From 11f2914b1fb705864692c97b7e0d0a256210507c Mon Sep 17 00:00:00 2001 From: Jessica_Natalia Date: Thu, 27 Aug 2026 03:11:47 -0300 Subject: [PATCH] Current updates Current updates --- APPLY_OVERLAY_CLEANUP.bat | 19 - include/psprecomp/runtime.hpp | 9 + profiles/vcs/APPLY_TIER2_EXTREME.bat | 15 - profiles/vcs/BUILD_VCS.bat | 3 - profiles/vcs/BUILD_VCS_FAST.bat | 3 - profiles/vcs/BUILD_VCS_NINJA.bat | 32 - profiles/vcs/BUILD_VCS_NINJA_CLANG.bat | 188 + profiles/vcs/COLLECT_SAVE_REPRO.bat | 42 - profiles/vcs/FIX_FUTURE_TIMESTAMPS.bat | 40 - .../vcs/FORCE_V9_3_CLEAN_REBASE_OBJECTS.bat | 29 - .../vcs/FORCE_V9_4_SAVEDATA_UI_OBJECTS.bat | 29 - .../vcs/FORCE_V9_5_HOST_TEXTURE_OBJECTS.bat | 29 - .../FORCE_V9_6_SAVEDATA_CANCEL_OBJECTS.bat | 29 - profiles/vcs/PLAY_VCS.bat | 3 - profiles/vcs/RESTORE_SAVE_REPRO.bat | 31 - .../vcs/{ => docs/archive}/THIRD_PARTY.md | 0 .../archive}/TIER2_EXTREME_2026-08-16.md | 0 .../TIER2_EXTREME_STATS_2026-08-16.json | 0 .../archive}/VCS_TIER2_BOOTFIX_2026-08-16.md | 0 .../archive}/VCS_TIER2_LEAF_AB_2026-08-16.md | 0 ...CS_TIER2_SUPERBLOCK_V1_PYFIX_2026-08-16.md | 0 ...TIER2_SUPERBLOCK_V3_DATAFLOW_2026-08-16.md | 0 .../vcs/generated/generated_unit_0000.cpp | 1659 +++++-- .../vcs/generated/generated_unit_0001.cpp | 1716 +++++-- .../vcs/generated/generated_unit_0002.cpp | 1206 +++-- .../vcs/generated/generated_unit_0003.cpp | 517 +- .../vcs/generated/generated_unit_0004.cpp | 597 +-- .../vcs/generated/generated_unit_0005.cpp | 1213 +++-- .../vcs/generated/generated_unit_0006.cpp | 1130 +++-- .../vcs/generated/generated_unit_0007.cpp | 934 ++-- .../vcs/generated/generated_unit_0008.cpp | 1220 +++-- .../vcs/generated/generated_unit_0009.cpp | 656 ++- .../vcs/generated/generated_unit_0010.cpp | 1126 +++-- .../vcs/generated/generated_unit_0011.cpp | 2625 +++++++--- .../vcs/generated/generated_unit_0012.cpp | 579 +-- .../vcs/generated/generated_unit_0013.cpp | 559 +-- .../vcs/generated/generated_unit_0014.cpp | 499 +- .../vcs/generated/generated_unit_0015.cpp | 435 +- .../vcs/generated/generated_unit_0016.cpp | 648 +-- .../vcs/generated/generated_unit_0017.cpp | 630 +-- .../vcs/generated/generated_unit_0018.cpp | 1129 +++-- .../vcs/generated/generated_unit_0019.cpp | 1229 +++-- .../vcs/generated/generated_unit_0020.cpp | 1234 +++-- .../vcs/generated/generated_unit_0021.cpp | 1232 +++-- .../vcs/generated/generated_unit_0022.cpp | 1363 ++++-- .../vcs/generated/generated_unit_0023.cpp | 1513 +++--- .../vcs/generated/generated_unit_0024.cpp | 1159 ++--- .../vcs/generated/generated_unit_0025.cpp | 1167 +++-- .../vcs/generated/generated_unit_0026.cpp | 1201 +++-- .../vcs/generated/generated_unit_0027.cpp | 1292 +++-- .../vcs/generated/generated_unit_0028.cpp | 828 +--- .../vcs/generated/generated_unit_0029.cpp | 511 +- .../vcs/generated/generated_unit_0030.cpp | 1275 +++-- .../vcs/generated/generated_unit_0031.cpp | 992 ++-- .../vcs/generated/generated_unit_0032.cpp | 2124 ++++++-- .../vcs/generated/generated_unit_0033.cpp | 1394 +++--- .../vcs/generated/generated_unit_0034.cpp | 879 ++-- .../vcs/generated/generated_unit_0035.cpp | 1163 +++-- .../vcs/generated/generated_unit_0036.cpp | 821 ++-- .../vcs/generated/generated_unit_0037.cpp | 590 +-- .../vcs/generated/generated_unit_0038.cpp | 1262 +++-- .../vcs/generated/generated_unit_0039.cpp | 1561 +++--- .../vcs/generated/generated_unit_0040.cpp | 523 +- .../vcs/generated/generated_unit_0041.cpp | 993 ++-- .../vcs/generated/generated_unit_0042.cpp | 497 +- .../vcs/generated/generated_unit_0043.cpp | 932 ++-- .../vcs/generated/generated_unit_0044.cpp | 1065 ++-- .../vcs/generated/generated_unit_0045.cpp | 1184 +++-- .../vcs/generated/generated_unit_0046.cpp | 393 +- .../vcs/generated/generated_unit_0047.cpp | 668 ++- .../vcs/generated/generated_unit_0048.cpp | 974 ++-- .../vcs/generated/generated_unit_0049.cpp | 1305 +++-- .../vcs/generated/generated_unit_0050.cpp | 614 +-- .../vcs/generated/generated_unit_0051.cpp | 494 +- .../vcs/generated/generated_unit_0052.cpp | 508 +- .../vcs/generated/generated_unit_0053.cpp | 630 +-- .../vcs/generated/generated_unit_0054.cpp | 955 ++-- .../vcs/generated/generated_unit_0055.cpp | 950 ++-- .../vcs/generated/generated_unit_0056.cpp | 760 +-- .../vcs/generated/generated_unit_0057.cpp | 661 +-- .../vcs/generated/generated_unit_0058.cpp | 706 +-- .../vcs/generated/generated_unit_0059.cpp | 959 ++-- .../vcs/generated/generated_unit_0060.cpp | 652 +-- .../vcs/generated/generated_unit_0061.cpp | 1048 ++-- .../vcs/generated/generated_unit_0062.cpp | 767 ++- .../vcs/generated/generated_unit_0063.cpp | 731 ++- .../vcs/generated/generated_unit_0064.cpp | 2446 +++++++--- .../vcs/generated/generated_unit_0065.cpp | 1364 +++--- .../vcs/generated/generated_unit_0066.cpp | 1462 ++++-- .../vcs/generated/generated_unit_0067.cpp | 1489 ++++-- .../vcs/generated/generated_unit_0068.cpp | 605 +-- .../vcs/generated/generated_unit_0069.cpp | 629 +-- .../vcs/generated/generated_unit_0070.cpp | 645 +-- .../vcs/generated/generated_unit_0071.cpp | 637 +-- .../vcs/generated/generated_unit_0072.cpp | 723 +-- .../vcs/generated/generated_unit_0073.cpp | 732 +-- .../vcs/generated/generated_unit_0074.cpp | 635 +-- .../vcs/generated/generated_unit_0075.cpp | 1078 +++-- .../vcs/generated/generated_unit_0076.cpp | 1357 +++--- .../vcs/generated/generated_unit_0077.cpp | 1546 ++++-- .../vcs/generated/generated_unit_0078.cpp | 1319 +++-- .../vcs/generated/generated_unit_0079.cpp | 869 ++-- .../vcs/generated/generated_unit_0080.cpp | 1708 +++++-- .../vcs/generated/generated_unit_0081.cpp | 996 ++-- .../vcs/generated/generated_unit_0082.cpp | 677 +-- .../vcs/generated/generated_unit_0083.cpp | 875 ++-- .../vcs/generated/generated_unit_0084.cpp | 1280 +++-- .../vcs/generated/generated_unit_0085.cpp | 653 +-- .../vcs/generated/generated_unit_0086.cpp | 902 ++-- .../vcs/generated/generated_unit_0087.cpp | 914 ++-- .../vcs/generated/generated_unit_0088.cpp | 1174 +++-- .../vcs/generated/generated_unit_0089.cpp | 1141 ++--- .../vcs/generated/generated_unit_0090.cpp | 1216 ++--- .../vcs/generated/generated_unit_0091.cpp | 1368 ++++-- .../vcs/generated/generated_unit_0092.cpp | 1320 +++-- .../vcs/generated/generated_unit_0093.cpp | 962 ++-- .../vcs/generated/generated_unit_0094.cpp | 880 ++-- .../vcs/generated/generated_unit_0095.cpp | 856 ++-- .../vcs/generated/generated_unit_0096.cpp | 1473 ++++-- .../vcs/generated/generated_unit_0097.cpp | 1398 ++++-- .../vcs/generated/generated_unit_0098.cpp | 1694 ++++--- .../vcs/generated/generated_unit_0099.cpp | 1244 +++-- .../vcs/generated/generated_unit_0100.cpp | 581 +-- .../vcs/generated/generated_unit_0101.cpp | 935 ++-- .../vcs/generated/generated_unit_0102.cpp | 545 +-- .../vcs/generated/generated_unit_0103.cpp | 474 +- .../vcs/generated/generated_unit_0104.cpp | 530 +- .../vcs/generated/generated_unit_0105.cpp | 987 ++-- .../vcs/generated/generated_unit_0106.cpp | 683 +-- .../vcs/generated/generated_unit_0107.cpp | 750 +-- .../vcs/generated/generated_unit_0108.cpp | 856 ++-- .../vcs/generated/generated_unit_0109.cpp | 1526 ++++-- .../vcs/generated/generated_unit_0110.cpp | 680 +-- .../vcs/generated/generated_unit_0111.cpp | 434 +- .../vcs/generated/generated_unit_0112.cpp | 1315 +++-- .../vcs/generated/generated_unit_0113.cpp | 974 ++-- .../vcs/generated/generated_unit_0114.cpp | 1047 ++-- .../vcs/generated/generated_unit_0115.cpp | 1052 ++-- .../vcs/generated/generated_unit_0116.cpp | 723 ++- .../vcs/generated/generated_unit_0117.cpp | 1034 ++-- .../vcs/generated/generated_unit_0118.cpp | 1401 ++++-- .../vcs/generated/generated_unit_0119.cpp | 1197 +++-- .../vcs/generated/generated_unit_0120.cpp | 1443 ++++-- .../vcs/generated/generated_unit_0121.cpp | 868 ++-- .../vcs/generated/generated_unit_0122.cpp | 938 ++-- .../vcs/generated/generated_unit_0123.cpp | 790 ++- .../vcs/generated/generated_unit_0124.cpp | 1264 +++-- .../vcs/generated/generated_unit_0125.cpp | 725 ++- .../vcs/generated/generated_unit_0126.cpp | 853 ++-- .../vcs/generated/generated_unit_0127.cpp | 1656 ++++--- .../vcs/generated/generated_unit_0128.cpp | 1558 ++++-- .../vcs/generated/generated_unit_0129.cpp | 1045 ++-- .../vcs/generated/generated_unit_0130.cpp | 896 ++-- .../vcs/generated/generated_unit_0131.cpp | 1246 +++-- .../vcs/generated/generated_unit_0132.cpp | 1089 +++-- .../vcs/generated/generated_unit_0133.cpp | 1768 +++++-- .../vcs/generated/generated_unit_0134.cpp | 1288 +++-- .../vcs/generated/generated_unit_0135.cpp | 471 +- .../vcs/generated/generated_unit_0136.cpp | 669 +-- .../vcs/generated/generated_unit_0137.cpp | 662 +-- .../vcs/generated/generated_unit_0138.cpp | 701 +-- .../vcs/generated/generated_unit_0139.cpp | 964 ++-- .../vcs/generated/generated_unit_0140.cpp | 1178 ++--- .../vcs/generated/generated_unit_0141.cpp | 732 ++- .../vcs/generated/generated_unit_0142.cpp | 1143 +++-- .../vcs/generated/generated_unit_0143.cpp | 1012 ++-- .../vcs/generated/generated_unit_0144.cpp | 635 +-- .../vcs/generated/generated_unit_0145.cpp | 612 +-- .../vcs/generated/generated_unit_0146.cpp | 506 +- .../vcs/generated/generated_unit_0147.cpp | 993 ++-- .../vcs/generated/generated_unit_0148.cpp | 1641 +++++-- .../vcs/generated/generated_unit_0149.cpp | 1989 +++++--- .../vcs/generated/generated_unit_0150.cpp | 521 +- .../vcs/generated/generated_unit_0151.cpp | 511 +- .../vcs/generated/generated_unit_0152.cpp | 1458 +++--- .../vcs/generated/generated_unit_0153.cpp | 747 +-- .../vcs/generated/generated_unit_0154.cpp | 538 +-- .../vcs/generated/generated_unit_0155.cpp | 623 +-- .../vcs/generated/generated_unit_0156.cpp | 762 ++- .../vcs/generated/generated_unit_0157.cpp | 1110 +++-- .../vcs/generated/generated_unit_0158.cpp | 702 ++- .../vcs/generated/generated_unit_0159.cpp | 564 +-- .../vcs/generated/generated_unit_0160.cpp | 1111 +++-- .../vcs/generated/generated_unit_0161.cpp | 814 ++-- .../vcs/generated/generated_unit_0162.cpp | 1373 ++++-- .../vcs/generated/generated_unit_0163.cpp | 1096 +++-- .../vcs/generated/generated_unit_0164.cpp | 1166 +++-- .../vcs/generated/generated_unit_0165.cpp | 781 +-- .../vcs/generated/generated_unit_0166.cpp | 1077 +++-- .../vcs/generated/generated_unit_0167.cpp | 1283 +++-- .../vcs/generated/generated_unit_0168.cpp | 855 ++-- .../vcs/generated/generated_unit_0169.cpp | 919 ++-- .../vcs/generated/generated_unit_0170.cpp | 1638 +++++-- .../vcs/generated/generated_unit_0171.cpp | 1480 ++++-- .../vcs/generated/generated_unit_0172.cpp | 1273 ++--- .../vcs/generated/generated_unit_0173.cpp | 1192 +++-- .../vcs/generated/generated_unit_0174.cpp | 1699 +++++-- .../vcs/generated/generated_unit_0175.cpp | 1637 +++++-- .../vcs/generated/generated_unit_0176.cpp | 1969 +++++--- .../vcs/generated/generated_unit_0177.cpp | 935 +--- .../vcs/generated/generated_unit_0178.cpp | 1060 ++-- .../vcs/generated/generated_unit_0179.cpp | 1695 +++++-- .../vcs/generated/generated_unit_0180.cpp | 1176 ++--- .../vcs/generated/generated_unit_0181.cpp | 893 ++-- .../vcs/generated/generated_unit_0182.cpp | 1521 ++++-- .../vcs/generated/generated_unit_0183.cpp | 1108 +++-- .../vcs/generated/generated_unit_0184.cpp | 1411 ++++-- .../vcs/generated/generated_unit_0185.cpp | 1332 +++-- .../vcs/generated/generated_unit_0186.cpp | 1148 +++-- .../vcs/generated/generated_unit_0187.cpp | 1458 ++++-- .../vcs/generated/generated_unit_0188.cpp | 1091 +++-- .../vcs/generated/generated_unit_0189.cpp | 790 +-- .../vcs/generated/generated_unit_0190.cpp | 1823 ++++--- .../vcs/generated/generated_unit_0191.cpp | 1265 ++--- .../vcs/generated/generated_unit_0192.cpp | 622 +-- .../vcs/generated/generated_unit_0193.cpp | 585 +-- .../vcs/generated/generated_unit_0194.cpp | 1708 ++++--- .../vcs/generated/generated_unit_0195.cpp | 1071 +++-- .../vcs/generated/generated_unit_0196.cpp | 1313 +++-- .../vcs/generated/generated_unit_0197.cpp | 1276 +++-- .../vcs/generated/generated_unit_0198.cpp | 1572 ++++-- .../vcs/generated/generated_unit_0199.cpp | 1019 ++-- .../vcs/generated/generated_unit_0200.cpp | 1087 +++-- .../vcs/generated/generated_unit_0201.cpp | 1331 +++-- .../vcs/generated/generated_unit_0202.cpp | 1244 +++-- .../vcs/generated/generated_unit_0203.cpp | 1184 +++-- .../vcs/generated/generated_unit_0204.cpp | 969 ++-- .../vcs/generated/generated_unit_0205.cpp | 1097 ++--- .../vcs/generated/generated_unit_0206.cpp | 928 ++-- .../vcs/generated/generated_unit_0207.cpp | 1022 ++-- .../vcs/generated/generated_unit_0208.cpp | 804 ++-- .../vcs/generated/generated_unit_0209.cpp | 583 +-- .../vcs/generated/generated_unit_0210.cpp | 625 +-- .../vcs/generated/generated_unit_0211.cpp | 1031 ++-- .../vcs/generated/generated_unit_0212.cpp | 1621 +++++-- .../vcs/generated/generated_unit_0213.cpp | 1709 +++++-- .../vcs/generated/generated_unit_0214.cpp | 1145 +++-- .../vcs/generated/generated_unit_0215.cpp | 1115 ++++- .../vcs/generated/generated_unit_0216.cpp | 1720 +++++-- .../vcs/generated/generated_unit_0217.cpp | 1246 +++-- .../vcs/generated/generated_unit_0218.cpp | 1264 +++-- .../vcs/generated/generated_unit_0219.cpp | 3833 +++++++++++---- .../vcs/generated/generated_unit_0220.cpp | 113 +- .../vcs/generated/generated_unit_0221.cpp | 163 +- .../vcs/generated/generated_unit_0222.cpp | 253 +- .../vcs/generated/generated_unit_0223.cpp | 282 +- .../vcs/generated/generated_unit_0224.cpp | 188 +- .../vcs/generated/generated_unit_0225.cpp | 557 +-- .../vcs/generated/generated_unit_0226.cpp | 4073 +--------------- .../vcs/generated/generated_unit_0227.cpp | 4262 +--------------- .../vcs/generated/generated_unit_0228.cpp | 4263 +---------------- .../vcs/generated/generated_unit_0229.cpp | 4256 +--------------- .../vcs/generated/generated_unit_0230.cpp | 4005 +--------------- .../vcs/generated/generated_unit_0231.cpp | 1424 +----- .../vcs/generated/generated_unit_0232.cpp | 604 +-- .../vcs/generated/generated_unit_0233.cpp | 445 +- .../vcs/generated/v811_perf_manifest.json | 22 + profiles/vcs/host/ge_renderer.cpp | 4 +- .../vcs/scripts/build_perf_ninja_clangcl.bat | 5 + .../build_release_ninja_clangcl_v811.bat | 203 + profiles/vcs/tests/check_v811_perf.py | 26 + profiles/vcs/tools/apply_v811_perf.py | 503 ++ ...ptimize_generated_v811_compact_dispatch.py | 288 ++ profiles/vcs/tools/vcs_codegen_main.cpp | 2 +- src/runtime.cpp | 29 + tools/codegen_main.cpp | 2 +- .../optimize_generated_register_residency.py | 4 +- 267 files changed, 134205 insertions(+), 126764 deletions(-) delete mode 100644 APPLY_OVERLAY_CLEANUP.bat delete mode 100644 profiles/vcs/APPLY_TIER2_EXTREME.bat delete mode 100644 profiles/vcs/BUILD_VCS.bat delete mode 100644 profiles/vcs/BUILD_VCS_FAST.bat delete mode 100644 profiles/vcs/BUILD_VCS_NINJA.bat create mode 100644 profiles/vcs/BUILD_VCS_NINJA_CLANG.bat delete mode 100644 profiles/vcs/COLLECT_SAVE_REPRO.bat delete mode 100644 profiles/vcs/FIX_FUTURE_TIMESTAMPS.bat delete mode 100644 profiles/vcs/FORCE_V9_3_CLEAN_REBASE_OBJECTS.bat delete mode 100644 profiles/vcs/FORCE_V9_4_SAVEDATA_UI_OBJECTS.bat delete mode 100644 profiles/vcs/FORCE_V9_5_HOST_TEXTURE_OBJECTS.bat delete mode 100644 profiles/vcs/FORCE_V9_6_SAVEDATA_CANCEL_OBJECTS.bat delete mode 100644 profiles/vcs/PLAY_VCS.bat delete mode 100644 profiles/vcs/RESTORE_SAVE_REPRO.bat rename profiles/vcs/{ => docs/archive}/THIRD_PARTY.md (100%) rename profiles/vcs/{ => docs/archive}/TIER2_EXTREME_2026-08-16.md (100%) rename profiles/vcs/{ => docs/archive}/TIER2_EXTREME_STATS_2026-08-16.json (100%) rename profiles/vcs/{ => docs/archive}/VCS_TIER2_BOOTFIX_2026-08-16.md (100%) rename profiles/vcs/{ => docs/archive}/VCS_TIER2_LEAF_AB_2026-08-16.md (100%) rename profiles/vcs/{ => docs/archive}/VCS_TIER2_SUPERBLOCK_V1_PYFIX_2026-08-16.md (100%) rename profiles/vcs/{ => docs/archive}/VCS_TIER2_SUPERBLOCK_V3_DATAFLOW_2026-08-16.md (100%) create mode 100644 profiles/vcs/generated/v811_perf_manifest.json create mode 100644 profiles/vcs/scripts/build_perf_ninja_clangcl.bat create mode 100644 profiles/vcs/scripts/build_release_ninja_clangcl_v811.bat create mode 100644 profiles/vcs/tests/check_v811_perf.py create mode 100644 profiles/vcs/tools/apply_v811_perf.py create mode 100644 profiles/vcs/tools/optimize_generated_v811_compact_dispatch.py diff --git a/APPLY_OVERLAY_CLEANUP.bat b/APPLY_OVERLAY_CLEANUP.bat deleted file mode 100644 index 903d8db..0000000 --- a/APPLY_OVERLAY_CLEANUP.bat +++ /dev/null @@ -1,19 +0,0 @@ -@echo off -setlocal -cd /d "%~dp0" -echo Cleaning obsolete shader files moved into profiles\vcs\host\propershaders\private... -if exist "profiles\\vcs\\host\\ge_cloudworks_present_shader.hpp" del /f /q "profiles\\vcs\\host\\ge_cloudworks_present_shader.hpp" -if exist "profiles\\vcs\\host\\ge_gpu_hdr_shaders.inc" del /f /q "profiles\\vcs\\host\\ge_gpu_hdr_shaders.inc" -if exist "profiles\\vcs\\shaders\\hdr\\LICENSE_SIMULATEHDR.txt" del /f /q "profiles\\vcs\\shaders\\hdr\\LICENSE_SIMULATEHDR.txt" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_blur.frag" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_blur.frag" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_blur.frag.spv" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_blur.frag.spv" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_combine.frag" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_combine.frag" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_combine.frag.spv" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_combine.frag.spv" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_composite.frag" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_composite.frag" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_composite.frag.spv" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_composite.frag.spv" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_extract.frag" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_extract.frag" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_extract.frag.spv" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_extract.frag.spv" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_fullscreen.vert" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_fullscreen.vert" -if exist "profiles\\vcs\\shaders\\hdr\\hdr_fullscreen.vert.spv" del /f /q "profiles\\vcs\\shaders\\hdr\\hdr_fullscreen.vert.spv" -echo Cleanup complete. -endlocal diff --git a/include/psprecomp/runtime.hpp b/include/psprecomp/runtime.hpp index df30720..2117360 100644 --- a/include/psprecomp/runtime.hpp +++ b/include/psprecomp/runtime.hpp @@ -190,6 +190,12 @@ public: [[nodiscard]] bool invoke_chained_unit(AllegrexContext &ctx, std::uint32_t unit_index, GuestMemory::AotFastView *shared_aot_mem = nullptr); + // V8.11: scheduler-exact top-level local redispatch. Generated code keeps + // the proven 256-JR boundary, publishes ctx.pc, and asks Runtime to perform + // the same logical outer-dispatch accounting without paying PC->unit lookup + // and native function return/re-entry when it is safe to remain in-place. + [[nodiscard]] bool continue_generated_local_dispatch(AllegrexContext &ctx); + // Compile-time direct chain shared implementation. V8.8 adds a trusted // specialization for title profiles that can prove at build time that the // target 16 KiB generated bucket contains no import/HLE/host replacement. @@ -584,6 +590,9 @@ private: // ownership while native AOT frames may still be nested. Cleared at the // beginning of each outer Runtime dispatch. bool chain_context_invalidated_{}; + // Enabled only inside Runtime::run's production outer loop when no outer + // dispatch observer/heartbeat/progress contract would be skipped. + bool local_redispatch_fastpath_active_{}; // Per-runtime sampler ticket. Only touched when hotspot profiling is on; // keeping it local avoids contending on a process-global counter. std::uint64_t guest_hotspot_ticket_{}; diff --git a/profiles/vcs/APPLY_TIER2_EXTREME.bat b/profiles/vcs/APPLY_TIER2_EXTREME.bat deleted file mode 100644 index 87030c0..0000000 --- a/profiles/vcs/APPLY_TIER2_EXTREME.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -where py >nul 2>nul -if not errorlevel 1 ( - py -3 "%~dp0tools\apply_tier2_extreme.py" "%~dp0generated" - exit /b %errorlevel% -) -where python >nul 2>nul -if errorlevel 1 ( - echo Python 3 not found. Install Python 3 or run tools\apply_tier2_extreme.py manually. - exit /b 2 -) -python "%~dp0tools\apply_tier2_extreme.py" "%~dp0generated" -exit /b %errorlevel% diff --git a/profiles/vcs/BUILD_VCS.bat b/profiles/vcs/BUILD_VCS.bat deleted file mode 100644 index 53f81e0..0000000 --- a/profiles/vcs/BUILD_VCS.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call "%~dp0scripts\build_release.bat" -exit /b %errorlevel% diff --git a/profiles/vcs/BUILD_VCS_FAST.bat b/profiles/vcs/BUILD_VCS_FAST.bat deleted file mode 100644 index 0a1dd9f..0000000 --- a/profiles/vcs/BUILD_VCS_FAST.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call "%~dp0scripts\build_fast.bat" -exit /b %errorlevel% diff --git a/profiles/vcs/BUILD_VCS_NINJA.bat b/profiles/vcs/BUILD_VCS_NINJA.bat deleted file mode 100644 index d956f5a..0000000 --- a/profiles/vcs/BUILD_VCS_NINJA.bat +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BUILD=%REPO%\out\vcs-release-ninja" -set "MARKER95=%BUILD%\.v9_5_host_texture_objects_done" -set "MARKER96=%BUILD%\.v9_6_savedata_cancel_objects_done" -set "MARKERSAFE=%BUILD%\.tier2_hotspot_hotfix_safe_done" - -if exist "%BUILD%" if not exist "%MARKERSAFE%" ( - echo [0c-safe] HOTSPOT OPT1 rollback - invalidating only affected objects once... - for %%U in (0154 0155 0085 0158 0084 0157 0129 0044 0043 0086 0179 0152 0035 0023) do ( - for /r "%BUILD%" %%F in (generated_unit_%%U.cpp.obj) do if exist "%%F" del /f /q "%%F" >nul 2>nul - ) - for %%N in (main.cpp.obj vcs_config.cpp.obj vcs_profile.cpp.obj vcs_runtime_log.cpp.obj) do ( - for /r "%BUILD%" %%F in (%%N) do if exist "%%F" del /f /q "%%F" >nul 2>nul - ) -) - -call "%~dp0FORCE_V9_5_HOST_TEXTURE_OBJECTS.bat" -if errorlevel 1 exit /b %errorlevel% -call "%~dp0FORCE_V9_6_SAVEDATA_CANCEL_OBJECTS.bat" -if errorlevel 1 exit /b %errorlevel% - -call "%~dp0scripts\build_release_ninja.bat" -set "RC=%errorlevel%" -if "%RC%"=="0" ( - if not exist "%BUILD%" mkdir "%BUILD%" >nul 2>nul - >"%MARKER95%" echo V9.5 host-texture isolation successfully rebuilt critical objects. - >"%MARKER96%" echo V9.6 mode-aware savedata cancellation successfully rebuilt vcs_profile.cpp. - >"%MARKERSAFE%" echo HOTSPOT OPT1 semantic rollback rebuilt successfully. -) -exit /b %RC% diff --git a/profiles/vcs/BUILD_VCS_NINJA_CLANG.bat b/profiles/vcs/BUILD_VCS_NINJA_CLANG.bat new file mode 100644 index 0000000..f27c59e --- /dev/null +++ b/profiles/vcs/BUILD_VCS_NINJA_CLANG.bat @@ -0,0 +1,188 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +rem ================================================================ +rem VCS V8.11 - Ninja + clang-cl launcher +rem Put this file in PSPRecomp\profiles\vcs. +rem ================================================================ + +for %%I in ("%~dp0..\..") do set "REPO=%%~fI" +for %%I in ("%~dp0.") do set "PROFILE=%%~fI" +set "BUILD=%REPO%\out\vcs-release-ninja-clangcl-v811" + +if not exist "%REPO%\CMakeLists.txt" goto BAD_ROOT +if not exist "%PROFILE%\CMakeLists.txt" goto BAD_ROOT +if not exist "%PROFILE%\tools\apply_v811_perf.py" goto MISSING_OVERLAY +if not exist "%PROFILE%\tests\check_v811_perf.py" goto MISSING_OVERLAY + +echo ================================================================ +echo VCS V8.11 - CPU / CODE-DENSITY BUILD +echo Ninja + clang-cl + lld-link +echo Repository: %REPO% +echo ================================================================ + +rem Use the already-installed VS2022 x64 developer environment. +set "VSROOT=%ProgramFiles%\Microsoft Visual Studio\2022\Community" +if exist "%VSROOT%\Common7\Tools\VsDevCmd.bat" goto HAVE_VS +set "VSROOT=%ProgramFiles%\Microsoft Visual Studio\2022\Professional" +if exist "%VSROOT%\Common7\Tools\VsDevCmd.bat" goto HAVE_VS +set "VSROOT=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise" +if exist "%VSROOT%\Common7\Tools\VsDevCmd.bat" goto HAVE_VS +set "VSROOT=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools" +if exist "%VSROOT%\Common7\Tools\VsDevCmd.bat" goto HAVE_VS +goto NO_VS + +:HAVE_VS +call "%VSROOT%\Common7\Tools\VsDevCmd.bat" -arch=x64 -host_arch=x64 +if errorlevel 1 goto NO_VS + +rem Standalone LLVM 22+. +if defined PSPRECOMP_LLVM_BIN ( + set "LLVM_BIN=%PSPRECOMP_LLVM_BIN%" +) else ( + set "LLVM_BIN=%ProgramFiles%\LLVM\bin" +) +set "CLANG_CL=%LLVM_BIN%\clang-cl.exe" +set "LLD_LINK=%LLVM_BIN%\lld-link.exe" +if not exist "%CLANG_CL%" goto NO_LLVM +if not exist "%LLD_LINK%" goto NO_LLVM + +echo. +echo LLVM compiler: +"%CLANG_CL%" --version +if errorlevel 1 goto NO_LLVM + +rem Prefer CMake/Ninja bundled with VS2022. +set "CMAKE=%VSROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" +set "NINJA=%VSROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" +if not exist "%CMAKE%" goto NO_CMAKE +if not exist "%NINJA%" goto NO_NINJA +set "CTEST=%VSROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\ctest.exe" +if not exist "%CTEST%" set "CTEST=ctest.exe" + +rem Python 3. +set "PY=py -3" +py -3 -c "import sys; raise SystemExit(0 if sys.version_info.major == 3 else 1)" >nul 2>&1 +if errorlevel 1 set "PY=python" +%PY% -c "import sys; raise SystemExit(0 if sys.version_info.major == 3 else 1)" >nul 2>&1 +if errorlevel 1 goto NO_PYTHON + +rem Conservative parallelism for this very large generated corpus. +if defined PSPRECOMP_JOBS ( + set "JOBS=%PSPRECOMP_JOBS%" +) else ( + set "JOBS=10" +) +echo Compile workers: %JOBS% + +rem Optional timestamp normalization from the profile, if present. +if exist "%PROFILE%\FIX_FUTURE_TIMESTAMPS.bat" call "%PROFILE%\FIX_FUTURE_TIMESTAMPS.bat" +if errorlevel 1 goto FAIL + +echo. +echo [0/5] Applying V8.11 structural performance pass... +%PY% "%PROFILE%\tools\apply_v811_perf.py" "%REPO%" +if errorlevel 1 goto FAIL +%PY% "%PROFILE%\tools\apply_v811_perf.py" "%REPO%" --check +if errorlevel 1 goto FAIL +%PY% "%PROFILE%\tests\check_v811_perf.py" +if errorlevel 1 goto FAIL + +echo. +echo [1/5] Configuring clang-cl / lld-link / Ninja... +"%CMAKE%" -S "%REPO%" -B "%BUILD%" -G Ninja ^ + "-DCMAKE_MAKE_PROGRAM=%NINJA%" ^ + "-DCMAKE_CXX_COMPILER=%CLANG_CL%" ^ + "-DCMAKE_LINKER=%LLD_LINK%" ^ + "-DCMAKE_CXX_FLAGS_RELEASE=/O2 /DNDEBUG /arch:AVX2 /Gy" ^ + "-DCMAKE_EXE_LINKER_FLAGS_RELEASE=/OPT:REF /OPT:ICF" ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DPSPRECOMP_PROFILE=vcs ^ + -DPSPRECOMP_WINDOWS_GPU_BACKEND=DX12 ^ + -DPSPRECOMP_GENERATED_OPT_LEVEL=2 ^ + -DPSPRECOMP_HOT_GENERATED_OPT_LEVEL=3 ^ + -DPSPRECOMP_GENERATED_INLINE_LEVEL=0 ^ + -DPSPRECOMP_HOT_GENERATED_INLINE_LEVEL=3 ^ + -DPSPRECOMP_PROFILE_GUIDED_AOT=ON ^ + -DPSPRECOMP_LTO=ON ^ + -DPSPRECOMP_VCS_AOT_LTO=OFF ^ + -DPSPRECOMP_NATIVE_AVX2=ON ^ + -DPSPRECOMP_AOT_ASSUME_NO_WRITE_WATCH=ON ^ + -DPSPRECOMP_AOT_PRODUCTION_FASTPATHS=ON ^ + -DPSPRECOMP_RUNTIME_CHAIN_TELEMETRY=OFF ^ + -DPSPRECOMP_VCS_TIER2_DEEP_TELEMETRY=OFF ^ + -DPSPRECOMP_MSVC_CGTHREADS=0 ^ + -DPSPRECOMP_MSVC_MP_JOBS=1 ^ + -DPSPRECOMP_BUILD_TESTS=ON ^ + -DPSPRECOMP_BUILD_PROFILE_TESTS=ON +if errorlevel 1 goto FAIL + +echo. +echo [2/5] Building VCSNative... +"%CMAKE%" --build "%BUILD%" --parallel %JOBS% --target VCSNative +if errorlevel 1 goto FAIL + +echo. +echo [3/5] Building regression tests... +"%CMAKE%" --build "%BUILD%" --parallel %JOBS% --target psprecomp_tests vcs_profile_tests vcs_config_tests audio_resampler_tests vfpu_tier2_tests vcs_bootstrap_paths_tests vcs_dx12_probe vcs_dx12_ge_probe +if errorlevel 1 goto FAIL +"%CTEST%" --test-dir "%BUILD%" --output-on-failure +if errorlevel 1 goto TEST_FAIL + +set "BIN=%BUILD%\bin\Release" +if not exist "%BIN%\VCSNative.exe" goto FAIL + +echo. +echo [4/5] Running DX12 probes... +"%BIN%\vcs_dx12_probe.exe" +if errorlevel 1 goto FAIL +set "PSPRECOMP_DX12_GE_STRICT=1" +set "PSPRECOMP_GE_PARALLEL_VERTEX_DECODE=0" +set "PSPRECOMP_GE_DIRECT_NONINDEXED_DRAW=1" +set "PSPRECOMP_DX12_PACKED_0115=1" +set "PSPRECOMP_DX12_NATIVE_INDEXED_DRAW=1" +set "PSPRECOMP_DX12_BATCH_MERGE=1" +"%BIN%\vcs_dx12_ge_probe.exe" +if errorlevel 1 goto FAIL +set "PSPRECOMP_DX12_GE_STRICT=" + +if exist "%PROFILE%\config\VCSNative.ini" copy /Y "%PROFILE%\config\VCSNative.ini" "%BIN%\VCSNative.ini" >nul + +echo. +echo [5/5] Done. +for %%F in ("%BIN%\VCSNative.exe") do echo VCSNative.exe size: %%~zF bytes +echo ================================================================ +echo BUILD OK +echo EXE: %BIN%\VCSNative.exe +echo ================================================================ +exit /b 0 + +:BAD_ROOT +echo ERROR: put BUILD_VCS_NINJA_CLANG.bat in PSPRecomp\profiles\vcs. +exit /b 20 +:MISSING_OVERLAY +echo ERROR: V8.11 overlay files are missing under profiles\vcs. +echo Reapply the V8.11 overlay first. +exit /b 21 +:NO_VS +echo ERROR: Visual Studio 2022 C++ environment not found in the standard Program Files path. +exit /b 2 +:NO_LLVM +echo ERROR: clang-cl.exe or lld-link.exe not found in "%LLVM_BIN%". +echo Expected default: "%ProgramFiles%\LLVM\bin" +exit /b 3 +:NO_CMAKE +echo ERROR: Visual Studio bundled CMake was not found. +exit /b 5 +:NO_NINJA +echo ERROR: Visual Studio bundled Ninja was not found. +exit /b 6 +:NO_PYTHON +echo ERROR: Python 3 was not found. +exit /b 7 +:TEST_FAIL +echo ERROR: regression tests failed. +exit /b 8 +:FAIL +echo ERROR: V8.11 build failed. See the first error above. +exit /b 1 diff --git a/profiles/vcs/COLLECT_SAVE_REPRO.bat b/profiles/vcs/COLLECT_SAVE_REPRO.bat deleted file mode 100644 index 1f43364..0000000 --- a/profiles/vcs/COLLECT_SAVE_REPRO.bat +++ /dev/null @@ -1,42 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BIN=%REPO%\out\vcs-release-ninja\bin\Release" -set "CHECKPOINT=%BIN%\VCS_SAVE_REPRO_CHECKPOINT.bin" -set "TRACE=%BIN%\VCS_SAVE_REPRO_TRACE.txt" -set "LOG=%BIN%\VCSNative.log" -set "MISSING=%BIN%\VCS_SAVE_REPRO_TRACE_MISSING.txt" -set "BUNDLE=%BIN%\VCS_SAVE_REPRO_BUNDLE.zip" -if not exist "%CHECKPOINT%" ( - echo ERROR: missing %CHECKPOINT% - echo The expensive post-mission checkpoint is not present. - pause - exit /b 2 -) -if exist "%MISSING%" del /q "%MISSING%" >nul 2>&1 -set "FILES='%CHECKPOINT%'" -if exist "%TRACE%" ( - set "FILES=%FILES%,'%TRACE%'" -) else ( - >"%MISSING%" echo VCS SAVE REPRO TRACE WAS NOT WRITTEN. - >>"%MISSING%" echo The checkpoint is valid and is included in this bundle. - >>"%MISSING%" echo V8.2.6B adds a post-F8/GetAsyncKeyState F10 fallback; restore the checkpoint and retry F10 if a full trace is still needed. - set "FILES=%FILES%,'%MISSING%'" - echo WARNING: %TRACE% is missing. - echo The bundle will still be created with the checkpoint and runtime log. -) -if exist "%LOG%" set "FILES=%FILES%,'%LOG%'" -powershell -NoProfile -ExecutionPolicy Bypass -Command "Compress-Archive -LiteralPath @(%FILES%) -DestinationPath '%BUNDLE%' -Force" -if errorlevel 1 ( - echo ERROR: could not create bundle. - pause - exit /b 4 -) -echo. -echo SAVE REPRO bundle created: -echo %BUNDLE% -echo. -if not exist "%TRACE%" echo NOTE: trace missing, but checkpoint was preserved in the ZIP. -echo Send this ZIP back in the chat. -pause -exit /b 0 diff --git a/profiles/vcs/FIX_FUTURE_TIMESTAMPS.bat b/profiles/vcs/FIX_FUTURE_TIMESTAMPS.bat deleted file mode 100644 index 8c4dc8b..0000000 --- a/profiles/vcs/FIX_FUTURE_TIMESTAMPS.bat +++ /dev/null @@ -1,40 +0,0 @@ -@echo off -setlocal EnableExtensions - -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" - -echo ================================================================ -echo PSPRecomp - FIX FUTURE FILE TIMESTAMPS -echo Repository: -echo %REPO% -echo ================================================================ -echo. - -powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -Command ^ - "$repo=[IO.Path]::GetFullPath('%REPO%');" ^ - "$now=Get-Date;" ^ - "$safe=$now.AddSeconds(-5);" ^ - "$skip=@('\out\','\.git\','\.vs\','\build\','\CMakeFiles\');" ^ - "$future=Get-ChildItem -LiteralPath $repo -Recurse -File -Force -ErrorAction SilentlyContinue | Where-Object {" ^ - " $p=$_.FullName;" ^ - " $blocked=$false;" ^ - " foreach($s in $skip){if($p.IndexOf($s,[StringComparison]::OrdinalIgnoreCase)-ge 0){$blocked=$true;break}};" ^ - " (-not $blocked) -and $_.LastWriteTime -gt $now.AddSeconds(2)" ^ - "};" ^ - "Write-Host ('Current local time: ' + $now.ToString('yyyy-MM-dd HH:mm:ss'));" ^ - "Write-Host ('Future-dated source files: ' + $future.Count);" ^ - "foreach($f in $future){" ^ - " Write-Host (' fixing: ' + $f.FullName + ' [' + $f.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss') + ']');" ^ - " $f.LastWriteTime=$safe" ^ - "};" ^ - "if($future.Count -gt 0){Write-Host ('Normalized to: ' + $safe.ToString('yyyy-MM-dd HH:mm:ss'))} else {Write-Host 'No future timestamps found.'}" -if errorlevel 1 ( - echo. - echo ERROR: PowerShell timestamp normalization failed. - pause - exit /b 1 -) - -echo. -echo Timestamp check complete. -exit /b 0 diff --git a/profiles/vcs/FORCE_V9_3_CLEAN_REBASE_OBJECTS.bat b/profiles/vcs/FORCE_V9_3_CLEAN_REBASE_OBJECTS.bat deleted file mode 100644 index 899d813..0000000 --- a/profiles/vcs/FORCE_V9_3_CLEAN_REBASE_OBJECTS.bat +++ /dev/null @@ -1,29 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BUILD=%REPO%\out\vcs-release-ninja" -set "MARKER=%BUILD%\.v9_3_clean_rebase_objects_done" - -if exist "%MARKER%" exit /b 0 - -echo [V9.3] CLEAN REBASE: invalidating stale incremental objects... -if not exist "%BUILD%" ( - echo [V9.3] Build tree does not exist yet; normal build will create it. - exit /b 0 -) - -powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -Command ^ - "$build=[IO.Path]::GetFullPath('%BUILD%');" ^ - "$names=@('vcs_profile.cpp.obj','savedata_utility_ui.cpp.obj','ge_renderer.cpp.obj','display_window.cpp.obj','main.cpp.obj','vcs_config.cpp.obj','generated_unit_0127.cpp.obj','generated_unit_0172.cpp.obj');" ^ - "$found=@(Get-ChildItem -LiteralPath $build -Recurse -File -Filter '*.obj' -ErrorAction SilentlyContinue); $found=@($found.Where({$names -contains $_.Name}));" ^ - "Write-Host ('[V9.3] stale objects found: ' + $found.Count);" ^ - "foreach($f in $found){Write-Host (' deleting: ' + $f.FullName); Remove-Item -LiteralPath $f.FullName -Force -ErrorAction Stop};" ^ - "$src=@('%REPO%\profiles\vcs\host\vcs_profile.cpp','%REPO%\profiles\vcs\host\savedata_utility_ui.cpp','%REPO%\profiles\vcs\host\ge_renderer.cpp','%REPO%\profiles\vcs\host\display_window.cpp','%REPO%\profiles\vcs\host\main.cpp','%REPO%\profiles\vcs\host\vcs_config.cpp','%REPO%\profiles\vcs\generated\generated_unit_0127.cpp','%REPO%\profiles\vcs\generated\generated_unit_0172.cpp');" ^ - "$now=Get-Date; foreach($p in $src){if(Test-Path -LiteralPath $p){(Get-Item -LiteralPath $p).LastWriteTime=$now}}" -if errorlevel 1 ( - echo ERROR: failed to invalidate V9.3 rollback objects. - exit /b 1 -) - -echo [V9.3] Critical objects invalidated. Ninja must compile them again. -exit /b 0 diff --git a/profiles/vcs/FORCE_V9_4_SAVEDATA_UI_OBJECTS.bat b/profiles/vcs/FORCE_V9_4_SAVEDATA_UI_OBJECTS.bat deleted file mode 100644 index c0c8d0a..0000000 --- a/profiles/vcs/FORCE_V9_4_SAVEDATA_UI_OBJECTS.bat +++ /dev/null @@ -1,29 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BUILD=%REPO%\out\vcs-release-ninja" -set "MARKER=%BUILD%\.v9_4_savedata_ui_objects_done" - -if exist "%MARKER%" exit /b 0 - -echo [V9.4] SAVEDATA/UI: invalidating stale incremental objects... -if not exist "%BUILD%" ( - echo [V9.4] Build tree does not exist yet; normal build will create it. - exit /b 0 -) - -powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -Command ^ - "$build=[IO.Path]::GetFullPath('%BUILD%');" ^ - "$names=@('vcs_profile.cpp.obj','savedata_utility_ui.cpp.obj');" ^ - "$found=@(Get-ChildItem -LiteralPath $build -Recurse -File -Filter '*.obj' -ErrorAction SilentlyContinue); $found=@($found.Where({$names -contains $_.Name}));" ^ - "Write-Host ('[V9.4] stale objects found: ' + $found.Count);" ^ - "foreach($f in $found){Write-Host (' deleting: ' + $f.FullName); Remove-Item -LiteralPath $f.FullName -Force -ErrorAction Stop};" ^ - "$src=@('%REPO%\profiles\vcs\host\vcs_profile.cpp','%REPO%\profiles\vcs\host\savedata_utility_ui.cpp');" ^ - "$now=Get-Date; foreach($p in $src){if(Test-Path -LiteralPath $p){(Get-Item -LiteralPath $p).LastWriteTime=$now}}" -if errorlevel 1 ( - echo ERROR: failed to invalidate V9.4 savedata/UI objects. - exit /b 1 -) - -echo [V9.4] Savedata/UI objects invalidated. Ninja must compile them again. -exit /b 0 diff --git a/profiles/vcs/FORCE_V9_5_HOST_TEXTURE_OBJECTS.bat b/profiles/vcs/FORCE_V9_5_HOST_TEXTURE_OBJECTS.bat deleted file mode 100644 index 9bbd64d..0000000 --- a/profiles/vcs/FORCE_V9_5_HOST_TEXTURE_OBJECTS.bat +++ /dev/null @@ -1,29 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BUILD=%REPO%\out\vcs-release-ninja" -set "MARKER=%BUILD%\.v9_5_host_texture_objects_done" - -if exist "%MARKER%" exit /b 0 - -echo [V9.5] SAVEDATA HOST TEXTURES: invalidating stale DX12/UI objects... -if not exist "%BUILD%" ( - echo [V9.5] Build tree does not exist yet; normal build will create it. - exit /b 0 -) - -powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -Command ^ - "$build=[IO.Path]::GetFullPath('%BUILD%');" ^ - "$names=@('ge_gpu_backend_dx12.cpp.obj','savedata_utility_ui.cpp.obj');" ^ - "$found=@(Get-ChildItem -LiteralPath $build -Recurse -File -Filter '*.obj' -ErrorAction SilentlyContinue); $found=@($found.Where({$names -contains $_.Name}));" ^ - "Write-Host ('[V9.5] stale objects found: ' + $found.Count);" ^ - "foreach($f in $found){Write-Host (' deleting: ' + $f.FullName); Remove-Item -LiteralPath $f.FullName -Force -ErrorAction Stop};" ^ - "$src=@('%REPO%\profiles\vcs\host\ge_gpu_backend_dx12.cpp','%REPO%\profiles\vcs\host\savedata_utility_ui.cpp');" ^ - "$now=Get-Date; foreach($p in $src){if(Test-Path -LiteralPath $p){(Get-Item -LiteralPath $p).LastWriteTime=$now}}" -if errorlevel 1 ( - echo ERROR: failed to invalidate V9.5 DX12/UI objects. - exit /b 1 -) - -echo [V9.5] DX12/UI objects invalidated. Ninja must compile them again. -exit /b 0 diff --git a/profiles/vcs/FORCE_V9_6_SAVEDATA_CANCEL_OBJECTS.bat b/profiles/vcs/FORCE_V9_6_SAVEDATA_CANCEL_OBJECTS.bat deleted file mode 100644 index a0c0dea..0000000 --- a/profiles/vcs/FORCE_V9_6_SAVEDATA_CANCEL_OBJECTS.bat +++ /dev/null @@ -1,29 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BUILD=%REPO%\out\vcs-release-ninja" -set "MARKER=%BUILD%\.v9_6_savedata_cancel_objects_done" - -if exist "%MARKER%" exit /b 0 - -echo [V9.6] SAVEDATA CANCEL: invalidating stale profile objects... -if not exist "%BUILD%" ( - echo [V9.6] Build tree does not exist yet; normal build will create it. - exit /b 0 -) - -powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -Command ^ - "$build=[IO.Path]::GetFullPath('%BUILD%');" ^ - "$names=@('vcs_profile.cpp.obj');" ^ - "$found=@(Get-ChildItem -LiteralPath $build -Recurse -File -Filter '*.obj' -ErrorAction SilentlyContinue); $found=@($found.Where({$names -contains $_.Name}));" ^ - "Write-Host ('[V9.6] stale objects found: ' + $found.Count);" ^ - "foreach($f in $found){Write-Host (' deleting: ' + $f.FullName); Remove-Item -LiteralPath $f.FullName -Force -ErrorAction Stop};" ^ - "$src='%REPO%\profiles\vcs\host\vcs_profile.cpp';" ^ - "if(Test-Path -LiteralPath $src){(Get-Item -LiteralPath $src).LastWriteTime=Get-Date}" -if errorlevel 1 ( - echo ERROR: failed to invalidate V9.6 savedata cancel objects. - exit /b 1 -) - -echo [V9.6] Savedata cancel objects invalidated. Ninja must compile vcs_profile.cpp again. -exit /b 0 diff --git a/profiles/vcs/PLAY_VCS.bat b/profiles/vcs/PLAY_VCS.bat deleted file mode 100644 index 9e50712..0000000 --- a/profiles/vcs/PLAY_VCS.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call "%~dp0scripts\play.bat" -exit /b %errorlevel% diff --git a/profiles/vcs/RESTORE_SAVE_REPRO.bat b/profiles/vcs/RESTORE_SAVE_REPRO.bat deleted file mode 100644 index 50e60a9..0000000 --- a/profiles/vcs/RESTORE_SAVE_REPRO.bat +++ /dev/null @@ -1,31 +0,0 @@ -@echo off -setlocal EnableExtensions -for %%I in ("%~dp0..\..") do set "REPO=%%~fI" -set "BIN=%REPO%\out\vcs-release-ninja\bin\Release" -set "GAME=%BIN%\PSP_DATA" -set "CHECKPOINT=%BIN%\VCS_SAVE_REPRO_CHECKPOINT.bin" -set "TRACE=%BIN%\VCS_SAVE_REPRO_TRACE.txt" -if not exist "%CHECKPOINT%" ( - echo ERROR: checkpoint not found: - echo %CHECKPOINT% - echo. - echo Finish the problematic mission once with V8.2.6 and press F8 after gameplay returns. - pause - exit /b 2 -) -if not exist "%GAME%\PSP_GAME\SYSDIR\EBOOT_DECRYPTED.ELF" ( - echo ERROR: PSP_DATA not found beside the Release executable: - echo %GAME% - pause - exit /b 3 -) -if exist "%TRACE%" del /q "%TRACE%" >nul 2>&1 -set "PSPRECOMP_SAVE_REPRO_TESTING=1" -set "PSPRECOMP_SAVE_REPRO_AUTO_RESTORE=1" -echo ================================================================ -echo VCS SAVE REPRO - AUTO RESTORE - echo Checkpoint: - echo %CHECKPOINT% -echo ================================================================ -call "%~dp0scripts\play.bat" "%GAME%" -exit /b %ERRORLEVEL% diff --git a/profiles/vcs/THIRD_PARTY.md b/profiles/vcs/docs/archive/THIRD_PARTY.md similarity index 100% rename from profiles/vcs/THIRD_PARTY.md rename to profiles/vcs/docs/archive/THIRD_PARTY.md diff --git a/profiles/vcs/TIER2_EXTREME_2026-08-16.md b/profiles/vcs/docs/archive/TIER2_EXTREME_2026-08-16.md similarity index 100% rename from profiles/vcs/TIER2_EXTREME_2026-08-16.md rename to profiles/vcs/docs/archive/TIER2_EXTREME_2026-08-16.md diff --git a/profiles/vcs/TIER2_EXTREME_STATS_2026-08-16.json b/profiles/vcs/docs/archive/TIER2_EXTREME_STATS_2026-08-16.json similarity index 100% rename from profiles/vcs/TIER2_EXTREME_STATS_2026-08-16.json rename to profiles/vcs/docs/archive/TIER2_EXTREME_STATS_2026-08-16.json diff --git a/profiles/vcs/VCS_TIER2_BOOTFIX_2026-08-16.md b/profiles/vcs/docs/archive/VCS_TIER2_BOOTFIX_2026-08-16.md similarity index 100% rename from profiles/vcs/VCS_TIER2_BOOTFIX_2026-08-16.md rename to profiles/vcs/docs/archive/VCS_TIER2_BOOTFIX_2026-08-16.md diff --git a/profiles/vcs/VCS_TIER2_LEAF_AB_2026-08-16.md b/profiles/vcs/docs/archive/VCS_TIER2_LEAF_AB_2026-08-16.md similarity index 100% rename from profiles/vcs/VCS_TIER2_LEAF_AB_2026-08-16.md rename to profiles/vcs/docs/archive/VCS_TIER2_LEAF_AB_2026-08-16.md diff --git a/profiles/vcs/VCS_TIER2_SUPERBLOCK_V1_PYFIX_2026-08-16.md b/profiles/vcs/docs/archive/VCS_TIER2_SUPERBLOCK_V1_PYFIX_2026-08-16.md similarity index 100% rename from profiles/vcs/VCS_TIER2_SUPERBLOCK_V1_PYFIX_2026-08-16.md rename to profiles/vcs/docs/archive/VCS_TIER2_SUPERBLOCK_V1_PYFIX_2026-08-16.md diff --git a/profiles/vcs/VCS_TIER2_SUPERBLOCK_V3_DATAFLOW_2026-08-16.md b/profiles/vcs/docs/archive/VCS_TIER2_SUPERBLOCK_V3_DATAFLOW_2026-08-16.md similarity index 100% rename from profiles/vcs/VCS_TIER2_SUPERBLOCK_V3_DATAFLOW_2026-08-16.md rename to profiles/vcs/docs/archive/VCS_TIER2_SUPERBLOCK_V3_DATAFLOW_2026-08-16.md diff --git a/profiles/vcs/generated/generated_unit_0000.cpp b/profiles/vcs/generated/generated_unit_0000.cpp index faa402c..5b6b7be 100644 --- a/profiles/vcs/generated/generated_unit_0000.cpp +++ b/profiles/vcs/generated/generated_unit_0000.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0000[4095] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 5, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 0, 8, 0, - 9, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 12, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 18, - 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 23, 0, 24, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 27, 0, - 28, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, - 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, - 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, - 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, - 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 87, 88, 0, 89, 0, - 90, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 103, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 106, - 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 109, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, 113, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 118, 0, 0, 119, 0, 120, 0, 0, 0, 0, - 121, 0, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 127, 0, 0, 0, - 128, 0, 129, 0, 130, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, 0, 135, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, - 138, 139, 0, 0, 0, 0, 140, 141, 0, 0, 0, 142, 0, 143, 0, 0, 0, 144, 145, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, - 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, - 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 160, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 164, - 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, - 0, 0, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 174, 0, 0, 175, 0, 176, 177, 0, 178, 0, 0, 179, 0, 180, 181, 0, 182, 0, - 183, 0, 0, 184, 0, 185, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 191, - 0, 192, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 0, 205, 0, 0, 0, 206, 0, 207, 0, 0, 0, 0, 208, 0, 209, 210, 0, 211, 0, 0, 212, 0, - 213, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 218, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 221, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 224, 0, 225, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 229, 0, 0, 0, 0, 0, 230, 231, 0, 232, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 235, 0, 236, 237, 0, 238, 0, 0, 239, 0, 240, - 0, 0, 0, 0, 0, 0, 241, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, - 0, 0, 0, 251, 0, 0, 252, 0, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 257, 0, 0, 258, 0, 259, - 0, 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, 0, 263, 0, 264, 0, 0, 0, 265, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 268, - 0, 0, 0, 269, 0, 270, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 275, 0, 0, 276, 0, 0, 0, 0, - 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 280, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 285, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 287, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 291, 0, 0, 0, 0, 0, 0, 292, 293, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, - 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, - 306, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 309, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 313, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 326, 0, 0, 327, 0, 0, 328, 0, 329, 0, 0, 0, 330, 0, 331, 0, 0, 0, 332, 0, 0, 333, - 0, 0, 0, 334, 0, 0, 0, 335, 336, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 340, 0, 341, 0, 342, 343, 0, 0, 0, - 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, 350, 0, 351, - 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 355, 0, 356, 0, 357, 0, 358, 0, 0, 359, 0, 0, 0, - 0, 0, 360, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 363, 0, 364, 0, 0, 365, 0, 366, 367, 0, 0, 368, 0, 0, 0, 369, 0, 0, 370, - 0, 0, 371, 0, 372, 0, 0, 373, 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 378, 0, 0, 379, 0, 380, 0, - 0, 0, 381, 0, 382, 0, 383, 0, 0, 0, 0, 0, 384, 0, 385, 0, 386, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 388, 0, 0, 389, - 0, 0, 0, 390, 0, 0, 391, 0, 392, 0, 0, 0, 393, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 399, 0, - 0, 0, 400, 0, 0, 401, 0, 402, 0, 403, 0, 404, 0, 0, 405, 406, 0, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 410, 0, 411, - 0, 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, - 0, 0, 421, 0, 422, 423, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, - 0, 431, 0, 432, 0, 433, 0, 434, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, - 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 0, - 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 446, 0, 0, 447, 0, - 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 454, - 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, - 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, 0, 471, 0, 472, 0, 473, 0, 474, - 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, - 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, - 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, 0, 495, 0, 496, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 0, - 499, 0, 500, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, - 505, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 0, - 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 516, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 518, 519, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 526, 0, 0, 0, 0, 0, 527, 0, 528, 529, 0, - 0, 530, 0, 0, 0, 531, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 535, 0, 536, - 0, 537, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 543, 0, 0, 544, 0, 545, 0, 0, - 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, - 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, - 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, - 0, 562, 0, 563, 0, 564, 0, 0, 0, 565, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 0, - 0, 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 575, 0, - 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, - 0, 0, 581, 0, 0, 582, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 584, 0, 585, 0, 0, 586, 0, 587, 0, 588, 0, 589, 0, 590, 0, - 591, 0, 592, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 595, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 0, 0, 0, 0, 598, 0, 599, - 0, 0, 600, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 603, 0, 0, 604, 0, 0, 605, 0, 606, 0, 607, 0, 0, 0, - 0, 608, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 615, 0, 616, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 620, - 0, 621, 0, 0, 0, 0, 622, 623, 0, 624, 625, 0, 0, 0, 0, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 631, 0, 632, 0, 0, 633, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, - 638, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 0, 0, 643, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0000[64] = { + 0xA4844A1141425021ull, 0x81410015504A4844ull, 0x0040240004080800ull, 0x4004010002110001ull, + 0x0800004004080000ull, 0x0400100102004004ull, 0x4040000000010002ull, 0x0404000000002000ull, + 0x0002000404000200ull, 0x0008082100040400ull, 0x4004040100040402ull, 0x0838240558240520ull, + 0x8100000149008101ull, 0x0A50210221408520ull, 0x850000B5108210C1ull, 0x844628C308004000ull, + 0x0000000004502000ull, 0x0000000114000000ull, 0x0000000440000000ull, 0x4012800280412A10ull, + 0x940005695A5A5228ull, 0x0000000000000556ull, 0x0000000000001080ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000040000800040ull, 0x000000214B428B00ull, 0x40000000604A4002ull, + 0x0000200001AA0000ull, 0x00402140A5A14582ull, 0xA484414880148801ull, 0x094420A880945224ull, + 0x00010A4000122A02ull, 0x40140002021C0D05ull, 0x18214A0182202005ull, 0x1002006004108200ull, + 0x9145244400080800ull, 0xAA2020221A890988ull, 0x9134A24412A88082ull, 0x9041505452240994ull, + 0xA244CAA448855148ull, 0x01010434AA821204ull, 0xA00108AA04008140ull, 0x4A00042028000208ull, + 0x8080804002000480ull, 0x0120080044040020ull, 0xAA48902010280100ull, 0x4108001442021028ull, + 0x0010400800104020ull, 0x01020505048A8810ull, 0x000A400909020811ull, 0x6824401105030082ull, + 0x29421112A0810222ull, 0x8010881410025002ull, 0x01420A2A21020012ull, 0x0222005044005042ull, + 0xA0484885554A1024ull, 0x00104A0215248024ull, 0x4B5506C2A008A848ull, 0x4090108120201400ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0000[64] = { + 1u, 19u, 35u, 41u, 48u, 52u, 58u, 62u, 65u, 69u, 75u, 82u, 98u, 107u, 121u, 136u, + 149u, 153u, 156u, 158u, 170u, 192u, 198u, 200u, 200u, 200u, 200u, 200u, 200u, 200u, 203u, 215u, + 223u, 229u, 245u, 260u, 277u, 287u, 300u, 314u, 322u, 334u, 352u, 371u, 390u, 412u, 427u, 439u, + 448u, 455u, 462u, 475u, 486u, 492u, 505u, 516u, 530u, 546u, 557u, 570u, 581u, 600u, 613u, 634u, }; void recomp_unit_0000_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0000_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08804000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0000[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0000[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0000[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08804000; @@ -819,7 +726,6 @@ L_08804000: aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (static_cast(ctx.gpr[2]) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08804030; } @@ -840,7 +746,6 @@ L_08804014: } L_08804030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08804078; } @@ -849,7 +754,6 @@ L_08804030: L_08804038: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08804060; } @@ -868,7 +772,6 @@ L_08804044: } L_08804058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08804078; } @@ -884,16 +787,24 @@ L_08804060: goto L_08804078; L_08804078: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804080: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088040AC; } @@ -912,7 +823,6 @@ L_08804090: } L_088040A4: aot_gpr_31 = (0x088040ACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088040ACu) goto L_088040AC; AOT_REGCACHE_SYNC_OUT(); return; L_088040AC: @@ -922,12 +832,21 @@ L_088040AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088040B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088040FC; } @@ -952,7 +871,6 @@ L_088040DC: L_088040E8: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088040FC; } @@ -960,7 +878,6 @@ L_088040E8: } L_088040F4: aot_gpr_31 = (0x088040FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088040FCu) goto L_088040FC; AOT_REGCACHE_SYNC_OUT(); return; L_088040FC: @@ -970,12 +887,21 @@ L_088040FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804108: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880414C; } @@ -1000,7 +926,6 @@ L_0880412C: L_08804138: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880414C; } @@ -1008,7 +933,6 @@ L_08804138: } L_08804144: aot_gpr_31 = (0x0880414Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880414Cu) goto L_0880414C; AOT_REGCACHE_SYNC_OUT(); return; L_0880414C: @@ -1018,7 +942,17 @@ L_0880414C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804158: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -1035,17 +969,14 @@ L_08804170: AOT_REGCACHE_SYNC_OUT(); return; L_08804178: aot_gpr_31 = (0x08804180u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08804180u) goto L_08804180; AOT_REGCACHE_SYNC_OUT(); return; L_08804180: aot_gpr_31 = (0x08804188u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08804188u) goto L_08804188; AOT_REGCACHE_SYNC_OUT(); return; L_08804188: aot_gpr_31 = (0x08804190u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08804190u) goto L_08804190; AOT_REGCACHE_SYNC_OUT(); return; L_08804190: @@ -1064,7 +995,17 @@ L_08804190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088041C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -1090,7 +1031,17 @@ L_088041E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088041FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1131,7 +1082,17 @@ L_0880424C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804268: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -1186,7 +1147,17 @@ L_088042D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804300: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1255,7 +1226,17 @@ L_088043A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088043C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1309,7 +1290,17 @@ L_0880444C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804468: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1363,7 +1354,17 @@ L_088044EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804508: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1407,7 +1408,17 @@ L_08804564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804580: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1454,7 +1465,17 @@ L_088045E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804604: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_16); @@ -1530,7 +1551,17 @@ L_088046D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088046F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -1663,7 +1694,17 @@ L_088047C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088047E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -1717,7 +1758,17 @@ L_08804868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804888: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -1794,7 +1845,17 @@ L_08804928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804948: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1844,7 +1905,17 @@ L_088049AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088049CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1889,7 +1960,17 @@ L_08804A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804A48: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1935,7 +2016,17 @@ L_08804AA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804AC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2010,7 +2101,6 @@ L_08804B54: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08804B70; } @@ -2072,7 +2162,6 @@ L_08804BB4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08804BD0; } @@ -2097,7 +2186,17 @@ L_08804BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804BEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2118,7 +2217,17 @@ L_08804C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2146,7 +2255,6 @@ L_08804C3C: L_08804C60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08804C78; } @@ -2194,7 +2302,17 @@ L_08804C80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804CE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2220,7 +2338,6 @@ L_08804CFC: L_08804D14: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08804D28; } @@ -2243,7 +2360,17 @@ L_08804D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -2274,7 +2401,17 @@ L_08804D74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804D84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2293,7 +2430,17 @@ L_08804DA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804DB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2338,14 +2485,23 @@ L_08804DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804E00: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (0u | 0u); ctx.gpr[8] = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08804E90; } @@ -2357,9 +2513,7 @@ L_08804E18: L_08804E1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804E70; } @@ -2368,9 +2522,7 @@ L_08804E1C: L_08804E30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804E70; } @@ -2380,9 +2532,7 @@ L_08804E44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804E70; } @@ -2391,9 +2541,7 @@ L_08804E44: L_08804E5C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804E88; } @@ -2411,7 +2559,6 @@ L_08804E70: } L_08804E80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08804E90; } @@ -2430,11 +2577,20 @@ L_08804E90: goto L_08804E94; L_08804E94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08804E9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[18]); @@ -2455,7 +2611,6 @@ L_08804E9C: } L_08804EE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08804FFC; } @@ -2507,7 +2662,6 @@ L_08804F38: L_08804F6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[30])) && aot_fpr_13 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); if (branch_taken) { @@ -2521,9 +2675,7 @@ L_08804F80: L_08804F84: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804F9C; } @@ -2534,9 +2686,7 @@ L_08804F98: goto L_08804F9C; L_08804F9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804FB4; } @@ -2548,9 +2698,7 @@ L_08804FAC: goto L_08804FB4; L_08804FB4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08804FC8; } @@ -2608,7 +2756,17 @@ L_08804FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805034: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2622,7 +2780,6 @@ L_08805034: goto L_08805050; L_08805050: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08805278; } @@ -2707,7 +2864,6 @@ L_08805068: } L_08805168: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08805278; } @@ -2796,7 +2952,17 @@ L_08805278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805288: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -2835,13 +3001,22 @@ L_08805288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880532C; } @@ -2849,7 +3024,6 @@ L_08805310: } L_08805324: aot_gpr_31 = (0x0880532Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880532Cu) goto L_0880532C; AOT_REGCACHE_SYNC_OUT(); return; L_0880532C: @@ -2863,7 +3037,17 @@ L_08805334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805340: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); @@ -2922,7 +3106,17 @@ L_088053C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088053D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2952,7 +3146,6 @@ L_088053F8: } L_0880540C: aot_gpr_31 = (0x08805414u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805414u) goto L_08805414; AOT_REGCACHE_SYNC_OUT(); return; L_08805414: @@ -2968,13 +3161,11 @@ L_08805424: goto L_08805630; L_08805430: aot_gpr_31 = (0x08805438u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 369u, 0x08A79D84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805438u) goto L_08805438; AOT_REGCACHE_SYNC_OUT(); return; L_08805438: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08805450; } @@ -2982,7 +3173,6 @@ L_08805438: } L_08805444: aot_gpr_31 = (0x0880544Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880544Cu) goto L_0880544C; AOT_REGCACHE_SYNC_OUT(); return; L_0880544C: @@ -2990,13 +3180,11 @@ L_0880544C: goto L_08805450; L_08805450: aot_gpr_31 = (0x08805458u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0084_entry, 84u, 126u, 0x089547C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805458u) goto L_08805458; AOT_REGCACHE_SYNC_OUT(); return; L_08805458: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08805470; } @@ -3004,7 +3192,6 @@ L_08805458: } L_08805464: aot_gpr_31 = (0x0880546Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880546Cu) goto L_0880546C; AOT_REGCACHE_SYNC_OUT(); return; L_0880546C: @@ -3012,18 +3199,15 @@ L_0880546C: goto L_08805470; L_08805470: aot_gpr_31 = (0x08805478u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0084_entry, 84u, 187u, 0x08954C1Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805478u) goto L_08805478; AOT_REGCACHE_SYNC_OUT(); return; L_08805478: aot_gpr_31 = (0x08805480u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 371u, 0x08A79DB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805480u) goto L_08805480; AOT_REGCACHE_SYNC_OUT(); return; L_08805480: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08805498; } @@ -3031,7 +3215,6 @@ L_08805480: } L_0880548C: aot_gpr_31 = (0x08805494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805494u) goto L_08805494; AOT_REGCACHE_SYNC_OUT(); return; L_08805494: @@ -3067,13 +3250,11 @@ L_088054A8: AOT_REGCACHE_SYNC_OUT(); return; L_088054E8: aot_gpr_31 = (0x088054F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 559u, 0x08982D80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088054F0u) goto L_088054F0; AOT_REGCACHE_SYNC_OUT(); return; L_088054F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08805508; } @@ -3081,7 +3262,6 @@ L_088054F0: } L_088054FC: aot_gpr_31 = (0x08805504u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805504u) goto L_08805504; AOT_REGCACHE_SYNC_OUT(); return; L_08805504: @@ -3094,17 +3274,14 @@ L_08805508: AOT_REGCACHE_SYNC_OUT(); return; L_08805510: aot_gpr_31 = (0x08805518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 416u, 0x08A7A094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805518u) goto L_08805518; AOT_REGCACHE_SYNC_OUT(); return; L_08805518: aot_gpr_31 = (0x08805520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 428u, 0x08A7A15Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805520u) goto L_08805520; AOT_REGCACHE_SYNC_OUT(); return; L_08805520: aot_gpr_31 = (0x08805528u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 445u, 0x08A7A2C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805528u) goto L_08805528; AOT_REGCACHE_SYNC_OUT(); return; L_08805528: @@ -3182,7 +3359,17 @@ L_0880561C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805630: aot_gpr_4 = (2236u << 16u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(29552))); @@ -3629,7 +3816,17 @@ L_08805630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805D18: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -3711,7 +3908,6 @@ L_08805E20: goto L_08805E24; L_08805E24: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08805E3C; } @@ -3755,7 +3951,6 @@ L_08805E60: goto L_08805E64; L_08805E64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08805E80; } @@ -3764,7 +3959,6 @@ L_08805E64: L_08805E6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08805E80; } @@ -3772,7 +3966,6 @@ L_08805E6C: } L_08805E78: aot_gpr_31 = (0x08805E80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 630u, 0x088A2BD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08805E80u) goto L_08805E80; AOT_REGCACHE_SYNC_OUT(); return; L_08805E80: @@ -3821,7 +4014,17 @@ L_08805E94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08805F04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -3838,7 +4041,6 @@ L_08805F04: L_08805F38: aot_gpr_16 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_0880604C; } @@ -3861,9 +4063,7 @@ L_08805F58: aot_gpr_4 = (17264u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880604C; } @@ -3942,7 +4142,6 @@ L_08806044: } L_0880604C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088061D8; } @@ -3950,7 +4149,6 @@ L_0880604C: } L_08806054: aot_gpr_31 = (0x0880605Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0156_entry, 156u, 753u, 0x08A77BF8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880605Cu) goto L_0880605C; AOT_REGCACHE_SYNC_OUT(); return; L_0880605C: @@ -4023,7 +4221,6 @@ L_0880611C: goto L_08806120; L_08806120: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_08806138; } @@ -4067,7 +4264,6 @@ L_0880615C: goto L_08806160; L_08806160: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088061A0; } @@ -4076,7 +4272,6 @@ L_08806160: L_08806168: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08806198; } @@ -4084,7 +4279,6 @@ L_08806168: } L_08806174: { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08806198; } @@ -4097,7 +4291,6 @@ L_0880617C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088061A0; } @@ -4105,7 +4298,6 @@ L_0880617C: } L_08806198: aot_gpr_31 = (0x088061A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 474u, 0x08B01C48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088061A0u) goto L_088061A0; AOT_REGCACHE_SYNC_OUT(); return; L_088061A0: @@ -4147,7 +4339,17 @@ L_088061D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806200: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (2235u << 16u); @@ -4224,12 +4426,21 @@ L_088062A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088062B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088062FC; } @@ -4254,7 +4465,6 @@ L_088062DC: L_088062E8: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088062FC; } @@ -4262,7 +4472,6 @@ L_088062E8: } L_088062F4: aot_gpr_31 = (0x088062FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088062FCu) goto L_088062FC; AOT_REGCACHE_SYNC_OUT(); return; L_088062FC: @@ -4272,11 +4481,20 @@ L_088062FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806308: aot_gpr_6 = (static_cast(aot_gpr_5) < -9999 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08806338; } @@ -4352,7 +4570,6 @@ L_0880637C: goto L_0880638C; L_0880638C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08806394; } @@ -4360,11 +4577,20 @@ L_0880638C: } L_08806394: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880639C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -4396,7 +4622,6 @@ L_088063C8: goto L_08806308; L_088063D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088063E0; } @@ -4409,7 +4634,17 @@ L_088063E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088063EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -4430,7 +4665,6 @@ L_08806404: ctx.gpr[2] = (ctx.gpr[2] + static_cast(-8)); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880642C; } @@ -4446,7 +4680,6 @@ L_08806424: } L_0880642C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08806444; } @@ -4465,7 +4698,17 @@ L_08806444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806450: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4509,7 +4752,17 @@ L_088064AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088064C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4526,7 +4779,6 @@ L_088064C0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08806508; } @@ -4546,7 +4798,6 @@ L_08806508: aot_gpr_6 = (aot_gpr_6 - aot_gpr_4); aot_gpr_6 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0880652C; } @@ -4567,7 +4818,6 @@ L_0880652C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880654C; } @@ -4591,7 +4841,17 @@ L_08806550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806564: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (aot_gpr_6 << 3u); @@ -4631,11 +4891,20 @@ L_08806584: } L_088065C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088065D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -4646,7 +4915,6 @@ L_088065D0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08806600; } @@ -4677,7 +4945,17 @@ L_08806608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806634: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4690,7 +4968,17 @@ L_08806634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806654: ctx.gpr[7] = (aot_gpr_5 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -4744,11 +5032,20 @@ L_088066AC: goto L_088066B8; L_088066B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088066C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4762,7 +5059,6 @@ L_088066D4: aot_gpr_6 = (aot_gpr_5 | 0u); ctx.gpr[7] = (aot_gpr_6 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08806724; } @@ -4798,7 +5094,17 @@ L_08806724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880673C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4812,7 +5118,6 @@ L_08806750: aot_gpr_4 = (aot_gpr_5 | 0u); ctx.gpr[7] = (aot_gpr_6 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08806798; } @@ -4853,7 +5158,17 @@ L_08806798: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088067C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4889,7 +5204,17 @@ L_088067F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880682C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4919,12 +5244,21 @@ L_0880684C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806888: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08806898u); - // nop goto L_088063EC; L_08806898: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -4941,7 +5275,17 @@ L_088068A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088068B4: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; @@ -4967,16 +5311,24 @@ L_088068C8: goto L_088068D8; L_088068D8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088068E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088068F0u); - // nop goto L_088063EC; L_088068F0: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -5001,7 +5353,6 @@ L_0880690C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806920; } @@ -5017,13 +5368,22 @@ L_08806920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880692C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); aot_gpr_31 = (0x08806940u); - // nop goto L_088063EC; L_08806940: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -5049,7 +5409,6 @@ L_0880695C: AOT_REGCACHE_SYNC_OUT(); return; L_08806964: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08806970; } @@ -5067,12 +5426,21 @@ L_08806970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806984: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08806994u); - // nop goto L_08806888; L_08806994: aot_gpr_4 = (ctx.gpr[2] ^ 4u); @@ -5086,7 +5454,17 @@ L_08806994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088069B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5145,7 +5523,17 @@ L_08806A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806A1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5204,17 +5592,25 @@ L_08806A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806A88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_31 = (0x08806A98u); - // nop goto L_088063EC; L_08806A98: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806AD0; } @@ -5224,7 +5620,6 @@ L_08806AA4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08806AC8; } @@ -5238,7 +5633,6 @@ L_08806AB4: L_08806ABC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806AD0; } @@ -5262,12 +5656,21 @@ L_08806AD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806AE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08806AF0u); - // nop goto L_088063EC; L_08806AF0: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -5296,7 +5699,6 @@ L_08806B08: L_08806B10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806B20; } @@ -5312,7 +5714,17 @@ L_08806B20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806B2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5323,7 +5735,6 @@ L_08806B2C: L_08806B48: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08806B70; } @@ -5333,7 +5744,6 @@ L_08806B54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08806B78; } @@ -5365,7 +5775,6 @@ L_08806B78: AOT_REGCACHE_SYNC_OUT(); return; L_08806B88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08806B98; } @@ -5381,7 +5790,6 @@ L_08806B98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08806BB8; } @@ -5413,7 +5821,17 @@ L_08806BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806BD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5424,7 +5842,6 @@ L_08806BD8: L_08806BF0: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08806C18; } @@ -5434,7 +5851,6 @@ L_08806BFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08806C20; } @@ -5466,7 +5882,6 @@ L_08806C20: AOT_REGCACHE_SYNC_OUT(); return; L_08806C30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08806C40; } @@ -5496,17 +5911,25 @@ L_08806C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806C5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08806C6Cu); - // nop goto L_088063EC; L_08806C6C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806C9C; } @@ -5525,7 +5948,6 @@ L_08806C78: L_08806C88: aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08806CB8; } @@ -5549,7 +5971,6 @@ L_08806C9C: } L_08806CA4: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08806C94; } @@ -5574,17 +5995,25 @@ L_08806CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806CC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08806CD8u); - // nop goto L_088063EC; L_08806CD8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806CF4; } @@ -5613,7 +6042,17 @@ L_08806CFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806D08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5626,7 +6065,6 @@ L_08806D08: L_08806D24: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08806D5C; } @@ -5637,7 +6075,6 @@ L_08806D30: aot_gpr_5 = (aot_gpr_5 + static_cast(-2)); aot_gpr_6 = (aot_gpr_5 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08806D90; } @@ -5649,11 +6086,20 @@ L_08806D44: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16208))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806D5C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -5693,7 +6139,6 @@ L_08806D7C: goto L_08806C5C; L_08806D88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08806D94; } @@ -5714,7 +6159,17 @@ L_08806D94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806DA8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), 0u); @@ -5725,7 +6180,17 @@ L_08806DA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806DC0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 3u); @@ -5738,7 +6203,17 @@ L_08806DC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -5792,7 +6267,17 @@ L_08806E3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806E68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5812,7 +6297,6 @@ L_08806E84: goto L_08806DA8; L_08806E8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08806EAC; } @@ -5841,7 +6325,17 @@ L_08806EAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806EC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -5886,7 +6380,17 @@ L_08806F0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806F24: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10]}; @@ -5902,7 +6406,6 @@ L_08806F24: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08806F74; } @@ -5936,7 +6439,17 @@ L_08806F94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08806FA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6030,7 +6543,17 @@ L_08807064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807098: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[7] = (0u | 1u); @@ -6044,7 +6567,17 @@ L_08807098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088070BC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[7] = (0u | 2u); @@ -6057,7 +6590,17 @@ L_088070BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088070DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6094,7 +6637,17 @@ L_08807114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807148: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6129,7 +6682,17 @@ L_08807178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088071AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6171,7 +6734,17 @@ L_088071E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807220: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6183,7 +6756,6 @@ L_08807220: aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08807254; } @@ -6220,7 +6792,17 @@ L_08807270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807294: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6233,7 +6815,6 @@ L_08807294: L_088072B0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088072F4; } @@ -6252,7 +6833,6 @@ L_088072BC: L_088072CC: aot_gpr_5 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088072F4; } @@ -6269,7 +6849,6 @@ L_088072D8: } L_088072E4: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088072F4; } @@ -6281,7 +6860,6 @@ L_088072EC: goto L_088072F4; L_088072F4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0880730C; } @@ -6324,7 +6902,17 @@ L_08807330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807344: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6379,7 +6967,17 @@ L_08807390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088073CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6407,7 +7005,17 @@ L_088073F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807414: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6450,7 +7058,17 @@ L_08807450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880748C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6496,7 +7114,17 @@ L_088074D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807510: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6541,7 +7169,6 @@ L_0880754C: L_0880755C: ctx.gpr[7] = (static_cast(ctx.gpr[7]) < 5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_088075A0; } @@ -6561,7 +7188,6 @@ L_08807568: } L_08807580: { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088075A0; } @@ -6597,7 +7223,17 @@ L_088075A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088075C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6615,7 +7251,6 @@ L_088075E0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0880762C; } @@ -6625,7 +7260,6 @@ L_08807600: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880762C; } @@ -6653,7 +7287,17 @@ L_0880762C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807644: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6671,7 +7315,17 @@ L_08807660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880766C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -6687,7 +7341,17 @@ L_08807680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880768C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -6744,7 +7408,17 @@ L_08807704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880771C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_gpr_6 | 0u); @@ -6795,7 +7469,17 @@ L_08807780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6816,7 +7500,6 @@ L_088077B8: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(6))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_088077F4; } @@ -6825,7 +7508,6 @@ L_088077B8: L_088077C8: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(7))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_088077F4; } @@ -6858,7 +7540,17 @@ L_088077F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807804: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); @@ -6867,7 +7559,17 @@ L_08807804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807814: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -6876,7 +7578,17 @@ L_08807814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (64u << 16u); @@ -6913,7 +7625,6 @@ L_0880785C: goto L_08807874; L_08807874: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08807884; } @@ -6921,7 +7632,6 @@ L_08807874: } L_0880787C: aot_gpr_31 = (0x08807884u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 534u, 0x08A16D40u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08807884u) goto L_08807884; AOT_REGCACHE_SYNC_OUT(); return; L_08807884: @@ -6931,12 +7641,21 @@ L_08807884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807890: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088078A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 734u, 0x089E76E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088078A0u) goto L_088078A0; AOT_REGCACHE_SYNC_OUT(); return; L_088078A0: @@ -6947,7 +7666,17 @@ L_088078A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088078B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6992,7 +7721,17 @@ L_088078F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807904: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -7018,7 +7757,6 @@ L_08807930: L_08807938: aot_gpr_4 = (static_cast(aot_gpr_16) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08807988; } @@ -7052,7 +7790,6 @@ L_08807970: } L_08807988: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088079BC; } @@ -7086,7 +7823,17 @@ L_088079BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088079D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -7135,7 +7882,17 @@ L_08807A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807A44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7150,7 +7907,6 @@ L_08807A60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08807A8C; } @@ -7160,7 +7916,6 @@ L_08807A74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08807A94; } @@ -7168,7 +7923,6 @@ L_08807A74: } L_08807A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08807AC4; } @@ -7186,7 +7940,6 @@ L_08807A94: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(7))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08807AAC; } @@ -7258,7 +8011,17 @@ L_08807B04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807B18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7269,7 +8032,6 @@ L_08807B18: goto L_08807A44; L_08807B30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08807B68; } @@ -7297,7 +8059,17 @@ L_08807B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807B78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7308,7 +8080,6 @@ L_08807B78: goto L_08807A44; L_08807B90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08807BC4; } @@ -7335,7 +8106,17 @@ L_08807BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807BD4: aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); @@ -7344,7 +8125,17 @@ L_08807BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807BE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2233u << 16u); @@ -7364,7 +8155,17 @@ L_08807C08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807C14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7396,7 +8197,6 @@ L_08807C44: L_08807C4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08807C60; } @@ -7408,7 +8208,6 @@ L_08807C58: goto L_08807C60; L_08807C60: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08807C70; } @@ -7420,7 +8219,6 @@ L_08807C68: goto L_08807C70; L_08807C70: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08807C80; } @@ -7432,7 +8230,6 @@ L_08807C78: goto L_08807CB8; L_08807C80: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08807C30; } @@ -7450,7 +8247,17 @@ L_08807C88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807C9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7465,7 +8272,17 @@ L_08807CAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807CB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7481,7 +8298,17 @@ L_08807CCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(12))); @@ -7489,7 +8316,6 @@ L_08807CD8: ctx.gpr[7] = (ctx.gpr[7] & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08807CFC; } @@ -7515,7 +8341,17 @@ L_08807D08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7552,7 +8388,6 @@ L_08807D54: } L_08807D60: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08807DA4; } @@ -7560,7 +8395,6 @@ L_08807D60: } L_08807D68: aot_gpr_31 = (0x08807D70u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08807D70u) goto L_08807D70; AOT_REGCACHE_SYNC_OUT(); return; L_08807D70: @@ -7608,7 +8442,17 @@ L_08807DB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807DD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -7636,7 +8480,6 @@ L_08807E18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08807E7C; } @@ -7649,7 +8492,6 @@ L_08807E2C: AOT_REGCACHE_SYNC_OUT(); return; L_08807E34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08807E7C; } @@ -7676,7 +8518,6 @@ L_08807E4C: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08807E9C; @@ -7701,9 +8542,7 @@ L_08807E7C: L_08807E84: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08807EA8; } @@ -7732,7 +8571,6 @@ L_08807EA8: goto L_08807EC0; L_08807EC0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08807EE0; } @@ -7748,7 +8586,6 @@ L_08807EC8: } L_08807ED0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08807EE0; } @@ -7815,7 +8652,17 @@ L_08807F30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807F54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7852,7 +8699,17 @@ L_08807F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08807FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0001.cpp b/profiles/vcs/generated/generated_unit_0001.cpp index c594b2a..e46add2 100644 --- a/profiles/vcs/generated/generated_unit_0001.cpp +++ b/profiles/vcs/generated/generated_unit_0001.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0001[4096] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 8, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 26, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 0, 0, 35, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, - 115, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 120, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 125, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, - 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, - 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 156, 0, 0, 157, 158, 0, 0, 0, 0, 0, 0, 0, 0, 159, - 0, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 163, 164, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, - 0, 166, 0, 0, 167, 0, 0, 0, 0, 168, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, - 179, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, 0, 0, 0, 185, 0, 186, - 0, 187, 0, 0, 0, 0, 188, 0, 189, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 194, - 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, 0, 0, 0, 203, - 204, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, - 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, - 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, - 222, 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 227, 0, 228, 0, 229, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, - 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 0, 237, 0, 238, 0, 239, 0, 0, 240, 0, 0, - 0, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 246, 0, 0, 247, 0, 0, - 0, 248, 249, 0, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 253, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 256, 0, - 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 259, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 264, 0, - 265, 0, 0, 0, 0, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, 270, 0, 271, 0, 272, 0, 273, 274, 0, 0, 0, 0, 275, 0, 0, 0, 276, - 0, 0, 277, 0, 278, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, 0, 285, 0, 286, 0, 287, 0, 288, - 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 294, 0, 295, 0, 296, 297, 0, - 0, 298, 299, 0, 0, 0, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 313, 0, 314, 0, - 0, 315, 0, 316, 0, 317, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 0, 0, - 0, 323, 0, 0, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 0, 330, 0, 331, 0, - 0, 0, 0, 332, 0, 333, 0, 0, 334, 0, 335, 0, 336, 0, 0, 337, 0, 338, 0, 339, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 341, 0, - 0, 342, 0, 0, 0, 0, 343, 0, 344, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 349, 0, 0, 0, - 0, 350, 0, 0, 0, 351, 352, 0, 353, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, - 0, 358, 0, 0, 0, 0, 359, 0, 360, 361, 0, 0, 362, 0, 363, 0, 364, 0, 365, 366, 0, 0, 367, 0, 368, 369, 0, 370, 0, 371, 0, 0, - 0, 372, 0, 373, 0, 0, 0, 374, 375, 0, 376, 0, 0, 0, 377, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, - 382, 383, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 391, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 395, 0, - 396, 0, 397, 398, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, - 0, 403, 0, 404, 0, 0, 405, 0, 0, 0, 0, 406, 0, 407, 0, 0, 0, 408, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 412, 413, 0, 0, - 414, 0, 0, 415, 0, 416, 417, 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 421, 0, 422, 0, 423, 0, 424, 0, - 0, 425, 0, 0, 426, 0, 427, 0, 0, 0, 0, 428, 0, 429, 0, 430, 0, 0, 0, 431, 0, 432, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, - 0, 435, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 441, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 445, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 449, 0, 450, 0, 451, 0, - 452, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, - 0, 458, 0, 459, 0, 0, 460, 0, 461, 462, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 467, 0, 468, 0, 0, - 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, - 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 477, 0, 478, 0, 479, 0, 0, - 480, 0, 481, 0, 0, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 486, 0, 487, 0, 0, 0, 488, 0, 489, - 0, 0, 490, 0, 491, 0, 492, 0, 493, 494, 0, 0, 495, 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 0, - 500, 501, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 504, 0, 505, 506, 0, 0, 507, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 513, 0, - 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 518, 0, 0, 519, 520, 0, 0, 0, 0, 521, - 0, 522, 0, 523, 0, 524, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, - 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, - 0, 536, 0, 0, 0, 537, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 540, 541, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 544, - 0, 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, - 550, 0, 0, 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, - 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 561, 0, 562, 0, 563, 0, 564, 0, 0, 0, 565, 0, 566, 0, 567, 568, 0, 0, - 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 575, - 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 0, 583, - 0, 0, 584, 0, 0, 585, 0, 0, 0, 0, 586, 587, 0, 0, 588, 0, 0, 0, 0, 589, 590, 0, 0, 591, 0, 0, 0, 0, 592, 593, 0, 0, - 594, 0, 0, 0, 0, 595, 596, 0, 0, 597, 0, 0, 0, 0, 598, 599, 0, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 0, - 606, 0, 0, 607, 608, 0, 0, 0, 0, 609, 0, 0, 0, 610, 0, 611, 0, 612, 0, 0, 0, 613, 0, 0, 614, 0, 615, 0, 0, 0, 0, 0, - 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 618, 0, 619, 0, 620, 0, 0, 0, 0, 0, 0, 0, 621, 0, 622, 0, - 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 626, 0, 0, 627, 0, 628, 0, 629, 0, - 630, 0, 631, 632, 0, 0, 0, 633, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 636, 0, 0, 637, 0, 0, 638, 0, - 0, 639, 0, 0, 640, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 644, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 648, 0, 649, 0, 650, 0, 0, 651, 0, 0, 0, 652, 0, 653, 0, 654, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, - 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, - 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 664, 0, 665, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, - 0, 668, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, - 672, 0, 0, 673, 0, 0, 0, 674, 675, 0, 0, 676, 0, 0, 677, 0, 0, 0, 678, 0, 0, 679, 0, 0, 680, 0, 0, 0, 681, 0, 682, 0, - 0, 0, 683, 0, 684, 0, 0, 685, 0, 686, 0, 0, 687, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 690, 691, 0, 0, 0, 0, 0, 0, 0, - 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 694, 0, 0, 695, 0, 0, 696, 0, 697, 0, 0, 698, 0, 0, 699, - 0, 700, 0, 0, 0, 701, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, 706, 0, 0, 707, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 708, 709, 0, 0, 0, 0, 0, 0, 0, 710, 0, 711, 0, 0, 712, 0, 0, 713, 0, 714, 0, 715, 0, 716, 717, 0, 0, 0, 0, - 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 0, 721, 0, 722, 0, 723, 0, 0, 724, 0, 725, 0, 0, 726, - 0, 0, 727, 0, 0, 728, 0, 729, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 732, 0, 733, 0, 734, 0, 735, 0, 0, - 0, 736, 737, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 0, 741, 0, 742, 0, 0, 0, 743, - 0, 0, 0, 744, 0, 745, 0, 0, 0, 746, 0, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 750, 0, - 0, 751, 0, 0, 752, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 755, 0, 0, 0, 756, 0, 0, 0, 757, 0, 758, 0, 0, 0, 759, 0, 0, - 0, 760, 0, 0, 761, 0, 762, 0, 0, 0, 0, 763, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 767, 0, 0, - 768, 0, 0, 0, 0, 769, 0, 0, 0, 0, 770, 0, 771, 0, 772, 0, 0, 773, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 775, 0, 776, - 0, 777, 0, 778, 0, 0, 0, 779, 0, 780, 0, 0, 781, 0, 0, 782, 0, 0, 783, 0, 784, 0, 785, 0, 0, 0, 0, 786, 0, 0, 787, 0, - 788, 0, 0, 789, 0, 790, 0, 0, 0, 791, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 794, 0, 0, 0, 795, 0, 0, - 796, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 799, 0, 0, 800, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, - 0, 0, 0, 0, 802, 0, 0, 803, 0, 0, 804, 0, 0, 805, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 807, 0, 0, 0, 808, 0, 809, 0, - 0, 0, 810, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 813, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 815, - 0, 0, 816, 0, 0, 817, 0, 0, 818, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 0, 822, - 0, 823, 0, 824, 0, 825, 826, 0, 0, 0, 0, 0, 827, 0, 828, 0, 0, 0, 0, 829, 0, 0, 0, 830, 0, 0, 831, 0, 0, 832, 0, 833, - 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, 0, 0, 836, 0, 0, 0, 0, 837, 0, 0, 838, 0, 839, 0, 0, 0, - 0, 0, 0, 840, 0, 0, 0, 0, 841, 0, 0, 0, 842, 0, 843, 0, 844, 0, 0, 0, 845, 0, 0, 846, 0, 0, 847, 0, 0, 848, 0, 849, - 850, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 852, 0, 853, 0, 854, 0, 0, 855, 856, 0, 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, - 858, 0, 0, 0, 0, 0, 859, 0, 0, 0, 0, 860, 0, 0, 861, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, 864, 0, - 0, 865, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, 0, 0, 868, 0, 0, 0, 869, 0, 870, 0, 871, 0, 0, 0, 872, 0, - 873, 0, 0, 0, 0, 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 876, 0, 877, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 879, - 0, 880, 0, 0, 881, 882, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 885, 0, 0, 0, 0, 0, 886, 0, 0, 887, - 0, 0, 0, 888, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 891, 0, 892, 0, 0, 0, 0, 893, 0, 0, 894, 0, - 0, 895, 0, 896, 0, 0, 0, 897, 0, 0, 0, 0, 0, 898, 0, 0, 899, 0, 0, 900, 0, 0, 0, 0, 901, 0, 0, 902, 0, 0, 903, 0, - 904, 0, 0, 0, 905, 0, 0, 0, 0, 0, 0, 0, 0, 906, 0, 0, 0, 907, 0, 908, 0, 0, 909, 0, 0, 0, 910, 0, 0, 0, 0, 0, - 911, 0, 912, 0, 0, 913, 0, 0, 914, 0, 915, 0, 0, 916, 0, 917, 0, 0, 918, 0, 919, 0, 920, 0, 0, 921, 0, 922, 0, 0, 0, 923, - 0, 0, 0, 924, 0, 0, 925, 0, 926, 0, 0, 0, 927, 0, 0, 0, 928, 0, 929, 0, 0, 0, 930, 0, 0, 0, 931, 0, 932, 0, 0, 0, - 933, 0, 0, 0, 934, 0, 935, 0, 0, 0, 936, 937, 0, 0, 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, 0, 0, 939, 0, 0, 940, 0, 0, - 941, 0, 942, 0, 0, 943, 0, 944, 0, 945, 0, 0, 946, 0, 0, 947, 0, 0, 948, 0, 949, 0, 950, 0, 0, 0, 951, 0, 952, 0, 0, 953, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0001[64] = { + 0x020C120281A24011ull, 0x8048008409010812ull, 0x2280240010100320ull, 0x0812020080050401ull, + 0x4101120082022401ull, 0x1040448020808900ull, 0x0410112008202240ull, 0x0104044802080890ull, + 0x0914012000820224ull, 0x0209001004002820ull, 0x0240412022401010ull, 0x1040448021012021ull, + 0x0410112008202240ull, 0x1000900404008240ull, 0x1024040400824004ull, 0x020C120280644802ull, + 0x2121112000042A12ull, 0xA8004542A14A0021ull, 0x1428400585282850ull, 0x0A10080220088881ull, + 0x25444450212A2245ull, 0x450A140624882204ull, 0x886A94A145052801ull, 0x6A10840AAA528514ull, + 0x50A28008100AAA86ull, 0x51401522084104AAull, 0x10508942420A9528ull, 0x2B4D534280022362ull, + 0x102A00A32405458Aull, 0x8800802D42480600ull, 0x5510816932A2284Aull, 0x0050A00A08A8A852ull, + 0x020A005155113114ull, 0x100504402A204B4Aull, 0xA28884852A820020ull, 0x6AA4D41324121354ull, + 0x440040AA86604081ull, 0xA106282290049084ull, 0xAA90028120050210ull, 0x0002000435154402ull, + 0xA014080000000000ull, 0x30984C2494209110ull, 0x0522A2191554C261ull, 0x5488080250152008ull, + 0x000204924920108Dull, 0x401544A801002102ull, 0x2001281480018104ull, 0x512449891004000Aull, + 0x9292100201889294ull, 0x0D52501802460922ull, 0x2A9010A494A90804ull, 0x408092288A810086ull, + 0x2441085222888852ull, 0x4854928AA0425421ull, 0x0824804122404229ull, 0x8084408451082490ull, + 0xA488506A91004124ull, 0xA491510814842010ull, 0x4808484101195081ull, 0x8814808145448022ull, + 0x4850408890480432ull, 0x044A20114909208Aull, 0x144511488A54A525ull, 0x945492A524020C51ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0001[64] = { + 1u, 15u, 26u, 36u, 45u, 56u, 66u, 76u, 86u, 97u, 105u, 115u, 126u, 136u, 144u, 153u, + 166u, 179u, 195u, 211u, 222u, 241u, 257u, 277u, 298u, 315u, 332u, 350u, 372u, 390u, 403u, 425u, + 441u, 458u, 474u, 490u, 514u, 529u, 545u, 559u, 571u, 576u, 594u, 616u, 630u, 644u, 657u, 668u, + 683u, 700u, 718u, 736u, 751u, 768u, 788u, 802u, 816u, 834u, 850u, 865u, 880u, 895u, 911u, 933u, }; void recomp_unit_0001_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0001_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08808000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0001[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0001[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0001[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08808000; @@ -1132,7 +1039,17 @@ L_08808000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808010: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1156,7 +1073,6 @@ L_08808044: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880805C; } @@ -1223,7 +1139,6 @@ L_088080B0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088080CC; } @@ -1245,7 +1160,17 @@ L_088080CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088080E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1282,7 +1207,17 @@ L_0880812C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808140: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1319,7 +1254,17 @@ L_08808188: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880819C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -1351,7 +1296,6 @@ L_088081D8: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -1363,9 +1307,7 @@ L_088081FC: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08808224; } @@ -1408,7 +1350,17 @@ L_08808250: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808270: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -1441,7 +1393,6 @@ L_088082B4: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); if (branch_taken) { @@ -1455,7 +1406,6 @@ L_088082DC: goto L_088082E4; L_088082E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_08808300; @@ -1483,7 +1433,6 @@ L_08808328: aot_fpr_13 = aot_fpr_20 - ctx.fpr[26]; ctx.fpr[14] = aot_fpr_22 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -1531,7 +1480,17 @@ L_0880837C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088083A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1568,7 +1527,17 @@ L_088083EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808400: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1619,7 +1588,17 @@ L_08808464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880847C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1670,7 +1649,17 @@ L_088084E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088084F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1721,7 +1710,17 @@ L_0880855C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808574: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1772,7 +1771,17 @@ L_088085D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088085F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1823,7 +1832,17 @@ L_08808654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880866C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1874,7 +1893,17 @@ L_088086D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088086E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1925,7 +1954,17 @@ L_0880874C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808764: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1976,7 +2015,17 @@ L_088087C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088087E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2027,7 +2076,17 @@ L_08808844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880885C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -2060,7 +2119,6 @@ L_088088A0: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); if (branch_taken) { @@ -2074,7 +2132,6 @@ L_088088C8: goto L_088088D0; L_088088D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_088088EC; @@ -2102,7 +2159,6 @@ L_08808914: aot_fpr_13 = aot_fpr_20 - ctx.fpr[26]; ctx.fpr[14] = aot_fpr_22 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -2150,7 +2206,17 @@ L_08808968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808990: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -2209,7 +2275,17 @@ L_08808A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808A30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2266,7 +2342,17 @@ L_08808AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808AB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2303,7 +2389,17 @@ L_08808B00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808B14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2341,7 +2437,17 @@ L_08808B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808B74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2392,7 +2498,17 @@ L_08808BD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2443,7 +2559,17 @@ L_08808C54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2494,7 +2620,17 @@ L_08808CD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808CE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -2553,7 +2689,17 @@ L_08808D68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2602,7 +2748,17 @@ L_08808DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808E08: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -2661,7 +2817,17 @@ L_08808E88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2698,7 +2864,17 @@ L_08808EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808F04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2731,7 +2907,6 @@ L_08808F38: L_08808F48: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08808F58; } @@ -2792,7 +2967,6 @@ L_08808FB0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08808FCC; } @@ -2814,7 +2988,17 @@ L_08808FCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08808FE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2837,7 +3021,6 @@ L_08809010: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08809034; } @@ -2862,7 +3045,17 @@ L_08809034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809048: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_16); @@ -2912,7 +3105,6 @@ L_088090C0: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088091A8; } @@ -2935,7 +3127,6 @@ L_088090E0: L_088090F4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088091A8; } @@ -2986,9 +3177,7 @@ L_08809114: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088091A8; } @@ -2996,7 +3185,6 @@ L_08809114: } L_08809144: aot_gpr_31 = (0x0880914Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880914Cu) goto L_0880914C; AOT_REGCACHE_SYNC_OUT(); return; L_0880914C: @@ -3007,7 +3195,6 @@ L_0880914C: AOT_REGCACHE_SYNC_OUT(); return; L_08809158: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088091A8; } @@ -3023,7 +3210,6 @@ L_08809160: AOT_REGCACHE_SYNC_OUT(); return; L_08809174: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088091A8; } @@ -3031,7 +3217,6 @@ L_08809174: } L_0880917C: aot_gpr_31 = (0x08809184u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08809184u) goto L_08809184; AOT_REGCACHE_SYNC_OUT(); return; L_08809184: @@ -3044,7 +3229,6 @@ L_08809184: AOT_REGCACHE_SYNC_OUT(); return; L_08809198: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088091A8; } @@ -3081,17 +3265,36 @@ L_088091B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088091EC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(5920), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088091F4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08809210; } @@ -3141,7 +3344,6 @@ L_08809234: goto L_0880924C; L_0880924C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880927C; } @@ -3150,7 +3352,6 @@ L_0880924C: L_08809254: aot_gpr_5 = (static_cast(aot_gpr_4) < 24 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08809268; } @@ -3180,11 +3381,20 @@ L_0880927C: goto L_08809280; L_08809280: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809288: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3296,7 +3506,6 @@ L_08809374: ctx.gpr[18] = (ctx.gpr[18] + static_cast(8)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0880932C; } @@ -3319,7 +3528,17 @@ L_08809384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088093AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3394,7 +3613,6 @@ L_08809434: goto L_08809444; L_08809444: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08809498; } @@ -3418,7 +3636,6 @@ L_08809460: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08809498; } @@ -3431,7 +3648,6 @@ L_08809474: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(55))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08809498; } @@ -3439,7 +3655,6 @@ L_08809474: } L_08809490: aot_gpr_31 = (0x08809498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 75u, 0x089904B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08809498u) goto L_08809498; AOT_REGCACHE_SYNC_OUT(); return; L_08809498: @@ -3476,7 +3691,6 @@ L_088094C8: goto L_088094D8; L_088094D8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880954C; } @@ -3500,7 +3714,6 @@ L_088094F4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880954C; } @@ -3513,7 +3726,6 @@ L_08809508: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(55))); { const bool branch_taken = aot_gpr_6 != aot_gpr_16; - // nop if (branch_taken) { goto L_0880954C; } @@ -3549,7 +3761,6 @@ L_0880954C: L_0880955C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(68))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08809588; } @@ -3586,10 +3797,19 @@ L_08809588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088095A8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088095C4; } @@ -3643,7 +3863,17 @@ L_088095F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809600: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -3658,7 +3888,6 @@ L_08809600: AOT_REGCACHE_SYNC_OUT(); return; L_0880962C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809648; } @@ -3667,7 +3896,6 @@ L_0880962C: L_08809634: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08809648; } @@ -3675,7 +3903,6 @@ L_08809634: } L_08809640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880984C; } @@ -3695,7 +3922,6 @@ L_08809648: } L_08809660: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08809678; } @@ -3741,7 +3967,6 @@ L_0880969C: goto L_088096A8; L_088096A8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088096D8; } @@ -3754,7 +3979,6 @@ L_088096B0: goto L_088091F4; L_088096BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088096D4; } @@ -3788,7 +4012,6 @@ L_088096EC: ctx.gpr[18] = (0u | 1u); aot_gpr_5 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08809824; } @@ -3801,7 +4024,6 @@ L_088096FC: goto L_08809708; L_08809708: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08809720; } @@ -3847,7 +4069,6 @@ L_08809744: goto L_08809750; L_08809750: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08809808; } @@ -3860,7 +4081,6 @@ L_08809758: goto L_088091F4; L_08809764: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809804; } @@ -3878,7 +4098,6 @@ L_08809774: AOT_REGCACHE_SYNC_OUT(); return; L_0880977C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088097F8; } @@ -3893,7 +4112,6 @@ L_0880978C: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); if (branch_taken) { @@ -3904,9 +4122,7 @@ L_0880978C: L_088097A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088097E4; } @@ -3915,9 +4131,7 @@ L_088097A8: L_088097BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088097E4; } @@ -3926,7 +4140,6 @@ L_088097BC: L_088097D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -3944,7 +4157,6 @@ L_088097E4: } L_088097EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088097F8; } @@ -3987,7 +4199,6 @@ L_08809824: } L_0880982C: aot_gpr_31 = (0x08809834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08809834u) goto L_08809834; AOT_REGCACHE_SYNC_OUT(); return; L_08809834: @@ -3997,12 +4208,10 @@ L_08809834: AOT_REGCACHE_SYNC_OUT(); return; L_0880983C: aot_gpr_31 = (0x08809844u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 286u, 0x0896D084u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08809844u) goto L_08809844; AOT_REGCACHE_SYNC_OUT(); return; L_08809844: aot_gpr_31 = (0x0880984Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880984Cu) goto L_0880984C; AOT_REGCACHE_SYNC_OUT(); return; L_0880984C: @@ -4021,7 +4230,17 @@ L_0880984C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809870: aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(5920), static_cast(aot_gpr_5)); @@ -4040,11 +4259,20 @@ L_08809870: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880988C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4064,7 +4292,6 @@ L_0880988C: } L_088098BC: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_088098D4; } @@ -4122,7 +4349,6 @@ L_0880990C: goto L_088091F4; L_08809914: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809928; } @@ -4159,7 +4385,17 @@ L_08809940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809958: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -4178,7 +4414,17 @@ L_0880996C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809984: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4192,7 +4438,17 @@ L_08809994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088099A0: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -4203,11 +4459,20 @@ L_088099A0: } L_088099A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088099B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-32528))); @@ -4225,7 +4490,6 @@ L_088099B0: } L_088099D8: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_088099F0; } @@ -4271,7 +4535,6 @@ L_08809A14: goto L_08809A20; L_08809A20: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08809A4C; } @@ -4285,7 +4548,6 @@ L_08809A28: L_08809A30: aot_gpr_4 = (ctx.gpr[2] & 130u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08809A4C; } @@ -4325,7 +4587,17 @@ L_08809A64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809A78: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-32528), aot_gpr_5); jump_target = aot_gpr_31; @@ -4333,7 +4605,17 @@ L_08809A78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809A84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -4354,7 +4636,17 @@ L_08809AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809AAC: aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); @@ -4363,7 +4655,17 @@ L_08809AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809ABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4383,7 +4685,6 @@ L_08809AD8: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_4 = (0u | 32u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08809B04; } @@ -4394,7 +4695,6 @@ L_08809AF0: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08809AF0; } @@ -4415,7 +4715,6 @@ L_08809B14: goto L_08809B18; L_08809B18: { const bool branch_taken = aot_gpr_16 != aot_gpr_6; - // nop if (branch_taken) { goto L_08809B24; } @@ -4428,7 +4727,6 @@ L_08809B24: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_16 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08809B18; } @@ -4442,7 +4740,17 @@ L_08809B34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), aot_gpr_16); @@ -4471,7 +4779,6 @@ L_08809B84: AOT_REGCACHE_SYNC_OUT(); return; L_08809B98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809BA4; } @@ -4501,7 +4808,6 @@ L_08809BB8: AOT_REGCACHE_SYNC_OUT(); return; L_08809BC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809BCC; } @@ -4518,7 +4824,6 @@ L_08809BCC: AOT_REGCACHE_SYNC_OUT(); return; L_08809BD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809BE4; } @@ -4529,7 +4834,6 @@ L_08809BE0: goto L_08809BE4; L_08809BE4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08809C0C; } @@ -4537,7 +4841,6 @@ L_08809BE4: } L_08809BEC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08809C0C; } @@ -4570,7 +4873,6 @@ L_08809C1C: goto L_08809C20; L_08809C20: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08809C40; } @@ -4588,7 +4890,6 @@ L_08809C28: } L_08809C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08809C68; } @@ -4621,7 +4922,6 @@ L_08809C68: L_08809C74: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_08809C84; } @@ -4642,7 +4942,6 @@ L_08809C84: } L_08809C94: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08809CCC; } @@ -4666,7 +4965,6 @@ L_08809C9C: } L_08809CC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08809D24; } @@ -4725,11 +5023,20 @@ L_08809D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809D4C: ctx.gpr[7] = (static_cast(aot_gpr_4) < 28 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08809D88; } @@ -4738,7 +5045,6 @@ L_08809D4C: L_08809D58: ctx.gpr[7] = (static_cast(aot_gpr_4) < 24 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08809D78; } @@ -4772,11 +5078,20 @@ L_08809D88: goto L_08809D8C; L_08809D8C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809D94: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -4786,7 +5101,17 @@ L_08809D94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809DBC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_gpr_5 = (0u | 96u); @@ -4803,7 +5128,17 @@ L_08809DBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809DEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4816,7 +5151,6 @@ L_08809DEC: } L_08809DFC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08809E0C; } @@ -4824,7 +5158,6 @@ L_08809DFC: } L_08809E04: aot_gpr_31 = (0x08809E0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08809E0Cu) goto L_08809E0C; AOT_REGCACHE_SYNC_OUT(); return; L_08809E0C: @@ -4834,7 +5167,17 @@ L_08809E0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4854,17 +5197,25 @@ L_08809E34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08809E54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 651u, 0x08B62FE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08809E54u) goto L_08809E54; AOT_REGCACHE_SYNC_OUT(); return; L_08809E54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08809E64; } @@ -4894,11 +5245,20 @@ L_08809E74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809E80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08809E94; } @@ -4917,11 +5277,20 @@ L_08809E94: goto L_08809E98; L_08809E98: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809EA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); @@ -4956,7 +5325,6 @@ L_08809EE0: AOT_REGCACHE_SYNC_OUT(); return; L_08809EE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08809F3C; } @@ -4981,7 +5349,6 @@ L_08809F04: AOT_REGCACHE_SYNC_OUT(); return; L_08809F10: aot_gpr_31 = (0x08809F18u); - // nop ctx.pc = 0x08B733FCu; AOT_REGCACHE_SYNC_OUT(); return; L_08809F18: @@ -4994,7 +5361,6 @@ L_08809F18: AOT_REGCACHE_SYNC_OUT(); return; L_08809F2C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08809F5C; } @@ -5085,14 +5451,33 @@ L_08809FBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809FD0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08809FD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5101,7 +5486,6 @@ L_08809FD8: { const std::uint32_t aot_run_words[6]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(20), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A010; } @@ -5115,7 +5499,6 @@ L_0880A010: ctx.gpr[19] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A034; } @@ -5125,7 +5508,6 @@ L_0880A020: ctx.gpr[19] = (ctx.gpr[19] + static_cast(4)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880A034; } @@ -5167,7 +5549,6 @@ L_0880A068: AOT_REGCACHE_SYNC_OUT(); return; L_0880A070: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880A080; } @@ -5185,7 +5566,6 @@ L_0880A080: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880A050; } @@ -5193,7 +5573,6 @@ L_0880A080: } L_0880A090: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0880A0CC; } @@ -5208,7 +5587,6 @@ L_0880A098: aot_fpr_13 = aot_fpr_13 - ctx.fpr[14]; aot_gpr_16 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0880A0C4; @@ -5263,7 +5641,6 @@ L_0880A120: goto L_0880A124; L_0880A124: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0880A16C; } @@ -5272,7 +5649,6 @@ L_0880A124: L_0880A12C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32479))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880A154; } @@ -5300,7 +5676,6 @@ L_0880A154: AOT_REGCACHE_SYNC_OUT(); return; L_0880A164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880A1F0; } @@ -5308,7 +5683,6 @@ L_0880A164: } L_0880A16C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880A1F0; } @@ -5383,7 +5757,17 @@ L_0880A1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A214: aot_gpr_4 = (ctx.gpr[7] & 255u); ctx.gpr[7] = (ctx.gpr[8] & 255u); @@ -5400,14 +5784,23 @@ L_0880A214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A244: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7713))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880A264; } @@ -5437,14 +5830,33 @@ L_0880A274: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A280: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A288: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); @@ -5460,7 +5872,17 @@ L_0880A29C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A2A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7713))); @@ -5476,7 +5898,6 @@ L_0880A2BC: aot_gpr_6 = (2237u << 16u); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(-1008))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880A2F4; } @@ -5492,7 +5913,6 @@ L_0880A2CC: goto L_0880A2DC; L_0880A2DC: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0880A2F4; } @@ -5502,7 +5922,6 @@ L_0880A2E4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(1398))); aot_gpr_6 = (0u | 109u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0880A320; } @@ -5532,7 +5951,6 @@ L_0880A308: } L_0880A310: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0880A2F4; } @@ -5556,7 +5974,17 @@ L_0880A324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A330: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5572,7 +6000,17 @@ L_0880A344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A350: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -5610,7 +6048,17 @@ L_0880A384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -5625,12 +6073,10 @@ L_0880A390: } L_0880A3A8: aot_gpr_31 = (0x0880A3B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0096_entry, 96u, 872u, 0x08987958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880A3B0u) goto L_0880A3B0; AOT_REGCACHE_SYNC_OUT(); return; L_0880A3B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880A3BC; } @@ -5646,7 +6092,17 @@ L_0880A3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A3C8: aot_gpr_4 = (0u | 286u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; @@ -5674,7 +6130,6 @@ L_0880A3DC: } L_0880A3E4: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0880A3F4; } @@ -5693,11 +6148,20 @@ L_0880A3F4: goto L_0880A3F8; L_0880A3F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A400: aot_gpr_4 = (aot_gpr_5 + aot_gpr_5); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); @@ -5709,7 +6173,17 @@ L_0880A400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A41C: aot_gpr_4 = (aot_gpr_5 + aot_gpr_5); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); @@ -5721,7 +6195,17 @@ L_0880A41C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A438: ctx.gpr[9] = (ctx.gpr[7] & 255u); ctx.gpr[10] = (2235u << 16u); @@ -5741,7 +6225,6 @@ L_0880A454: L_0880A458: ctx.gpr[9] = (aot_gpr_6 < static_cast(128) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_0880A468; } @@ -5787,7 +6270,6 @@ L_0880A48C: } L_0880A494: { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0880A4F8; } @@ -5809,8 +6291,6 @@ L_0880A4B8: aot_gpr_5 = (0u | 21336u); { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (0u | 64u); aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(576), aot_gpr_4); @@ -5899,11 +6379,20 @@ L_0880A570: goto L_0880A57C; L_0880A57C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A584: aot_gpr_4 = (aot_gpr_6 | 0u); aot_gpr_6 = (aot_gpr_4 < static_cast(127) ? 1u : 0u); @@ -5922,19 +6411,37 @@ L_0880A594: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A5AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A5B4: aot_gpr_4 = (0u | 44000u); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A5C8; } @@ -5953,7 +6460,17 @@ L_0880A5C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A5E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5964,7 +6481,6 @@ L_0880A5E0: AOT_REGCACHE_SYNC_OUT(); return; L_0880A5F4: aot_gpr_31 = (0x0880A5FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 63u, 0x08B64618u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880A5FCu) goto L_0880A5FC; AOT_REGCACHE_SYNC_OUT(); return; L_0880A5FC: @@ -5984,7 +6500,17 @@ L_0880A610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A624: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5996,7 +6522,6 @@ L_0880A624: goto L_08809D4C; L_0880A640: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880A674; } @@ -6022,7 +6547,17 @@ L_0880A674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A680: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6034,7 +6569,6 @@ L_0880A680: goto L_08809D4C; L_0880A69C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880A6D0; } @@ -6060,42 +6594,102 @@ L_0880A6D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A6DC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(4), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A6E4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(5), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A6EC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(6), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A6F4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(7), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A6FC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(8), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6130,7 +6724,6 @@ L_0880A740: AOT_REGCACHE_SYNC_OUT(); return; L_0880A748: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880A768; } @@ -6140,7 +6733,6 @@ L_0880A750: ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (static_cast(ctx.gpr[2]) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A770; } @@ -6148,7 +6740,6 @@ L_0880A750: } L_0880A760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880A774; } @@ -6177,14 +6768,23 @@ L_0880A774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880A788: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32479))); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(92), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880AEB4; } @@ -6276,7 +6876,6 @@ L_0880A8D0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 & ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A8FC; } @@ -6292,7 +6891,6 @@ L_0880A8FC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0880AC1C; } @@ -6341,7 +6939,6 @@ L_0880A954: aot_gpr_6 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1400))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0880A970; } @@ -6367,7 +6964,6 @@ L_0880A970: L_0880A97C: aot_gpr_4 = (0u | 67u); { const bool branch_taken = ctx.gpr[11] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880AB78; } @@ -6387,7 +6983,6 @@ L_0880A994: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A9AC; } @@ -6399,7 +6994,6 @@ L_0880A9A8: L_0880A9AC: aot_gpr_4 = (0u | 23u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880A9D0; } @@ -6410,7 +7004,6 @@ L_0880A9B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A9D0; } @@ -6422,7 +7015,6 @@ L_0880A9CC: L_0880A9D0: aot_gpr_4 = (0u | 24u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880A9F4; } @@ -6433,7 +7025,6 @@ L_0880A9DC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880A9F4; } @@ -6445,7 +7036,6 @@ L_0880A9F0: L_0880A9F4: aot_gpr_4 = (0u | 25u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880AA18; } @@ -6456,7 +7046,6 @@ L_0880AA00: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880AA18; } @@ -6468,7 +7057,6 @@ L_0880AA14: L_0880AA18: aot_gpr_4 = (0u | 26u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880AA3C; } @@ -6479,7 +7067,6 @@ L_0880AA24: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880AA3C; } @@ -6491,7 +7078,6 @@ L_0880AA38: L_0880AA3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(352))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880AA70; } @@ -6536,7 +7122,6 @@ L_0880AA70: L_0880AA80: aot_gpr_6 = (ctx.gpr[7] | 0u); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_0880AA90; } @@ -6550,7 +7135,6 @@ L_0880AA90: aot_gpr_4 = (aot_gpr_6 + ctx.gpr[23]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_0880AAB4; } @@ -6568,7 +7152,6 @@ L_0880AAA4: } L_0880AAB4: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_0880AAC4; } @@ -6595,7 +7178,6 @@ L_0880AAC4: L_0880AAD4: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[8] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880AAE8; } @@ -6651,7 +7233,6 @@ L_0880AB34: } L_0880AB40: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880AB50; } @@ -6756,7 +7337,6 @@ L_0880ABF8: } L_0880AC00: { const bool branch_taken = ctx.gpr[10] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880AC0C; } @@ -6803,7 +7383,6 @@ L_0880AC54: L_0880AC60: aot_gpr_4 = (static_cast(aot_gpr_16) < 4097 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880AC78; } @@ -6850,14 +7429,10 @@ L_0880ACA8: aot_gpr_4 = (ctx.gpr[18] - ctx.gpr[7]); { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[9] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(ctx.gpr[7])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_16 = (ctx.lo); goto L_0880ACC4; L_0880ACC4: - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[9]); const std::int32_t divisor = static_cast(ctx.gpr[18]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.gpr[7] | 0u); ctx.gpr[7] = (ctx.gpr[8] | 0u); @@ -6865,8 +7440,6 @@ L_0880ACC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_gpr_5 = (ctx.gpr[20] | 0u); ctx.gpr[17] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_16); const std::int32_t divisor = static_cast(ctx.gpr[18]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[9] = (ctx.gpr[17] | 0u); aot_gpr_16 = (ctx.lo); @@ -6897,8 +7470,6 @@ L_0880AD34: { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(ctx.gpr[8])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (0u | 3u); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (0u | 4096u); ctx.gpr[19] = (ctx.lo); @@ -6911,8 +7482,6 @@ L_0880AD34: L_0880AD60: { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(ctx.gpr[7])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (0u | 4096u); ctx.gpr[18] = (ctx.gpr[19] | 0u); @@ -6930,7 +7499,6 @@ L_0880AD8C: AOT_REGCACHE_SYNC_OUT(); return; L_0880AD94: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880ADF8; } @@ -6939,7 +7507,6 @@ L_0880AD94: L_0880AD9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880ADC0; } @@ -6964,7 +7531,6 @@ L_0880ADC0: AOT_REGCACHE_SYNC_OUT(); return; L_0880ADC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880ADF8; } @@ -7025,7 +7591,6 @@ L_0880AE40: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & aot_gpr_6); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880AE90; } @@ -7087,7 +7652,17 @@ L_0880AEC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880AEF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7118,7 +7693,17 @@ L_0880AF0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880AF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7181,7 +7766,6 @@ L_0880AFC8: L_0880AFD4: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0880AFF8; } @@ -7199,7 +7783,6 @@ L_0880AFE0: } L_0880AFF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B024; } @@ -7214,7 +7797,6 @@ L_0880AFF8: AOT_REGCACHE_SYNC_OUT(); return; L_0880B008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B060; } @@ -7246,7 +7828,6 @@ L_0880B03C: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880AFA0; } @@ -7278,7 +7859,17 @@ L_0880B060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B084: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (16672u << 16u); @@ -7316,7 +7907,6 @@ L_0880B0D0: AOT_REGCACHE_SYNC_OUT(); return; L_0880B0DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880B1E0; } @@ -7361,7 +7951,6 @@ L_0880B114: L_0880B120: aot_gpr_5 = (static_cast(ctx.gpr[18]) < 37 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880B148; } @@ -7405,7 +7994,6 @@ L_0880B164: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[7] = (ctx.gpr[7] & 8u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0880B1B0; } @@ -7430,7 +8018,6 @@ L_0880B190: } L_0880B1B0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880B1E0; } @@ -7485,7 +8072,17 @@ L_0880B1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B208: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (16256u << 16u); @@ -7514,7 +8111,6 @@ L_0880B240: AOT_REGCACHE_SYNC_OUT(); return; L_0880B24C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880B25C; } @@ -7522,7 +8118,6 @@ L_0880B24C: } L_0880B254: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0880B270; } @@ -7536,7 +8131,6 @@ L_0880B25C: AOT_REGCACHE_SYNC_OUT(); return; L_0880B268: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B294; } @@ -7577,7 +8171,17 @@ L_0880B29C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B2B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7597,7 +8201,6 @@ L_0880B2D0: AOT_REGCACHE_SYNC_OUT(); return; L_0880B2DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880B2F4; } @@ -7638,7 +8241,17 @@ L_0880B308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B31C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7661,7 +8274,6 @@ L_0880B340: AOT_REGCACHE_SYNC_OUT(); return; L_0880B35C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0880B37C; } @@ -7691,7 +8303,6 @@ L_0880B37C: AOT_REGCACHE_SYNC_OUT(); return; L_0880B38C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880B3A4; } @@ -7731,7 +8342,17 @@ L_0880B3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B3DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -7745,7 +8366,6 @@ L_0880B3DC: L_0880B3F8: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880B418; } @@ -7759,7 +8379,6 @@ L_0880B404: AOT_REGCACHE_SYNC_OUT(); return; L_0880B410: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B4AC; } @@ -7799,7 +8418,6 @@ L_0880B44C: AOT_REGCACHE_SYNC_OUT(); return; L_0880B45C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880B474; } @@ -7827,7 +8445,6 @@ L_0880B484: AOT_REGCACHE_SYNC_OUT(); return; L_0880B490: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880B4AC; } @@ -7853,7 +8470,17 @@ L_0880B4AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B4C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7891,7 +8518,17 @@ L_0880B500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B514: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7905,7 +8542,6 @@ L_0880B528: goto L_0880B4C0; L_0880B530: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880B544; } @@ -7926,7 +8562,17 @@ L_0880B544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B558: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7947,7 +8593,6 @@ L_0880B57C: goto L_0880B4C0; L_0880B584: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880B5A4; } @@ -7962,7 +8607,6 @@ L_0880B58C: AOT_REGCACHE_SYNC_OUT(); return; L_0880B59C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B5B0; } @@ -8002,9 +8646,7 @@ L_0880B5D0: L_0880B5D8: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_12)) && ctx.fpr[0] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880B600; } @@ -8018,7 +8660,6 @@ L_0880B5EC: AOT_REGCACHE_SYNC_OUT(); return; L_0880B5F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B624; } @@ -8032,7 +8673,6 @@ L_0880B600: AOT_REGCACHE_SYNC_OUT(); return; L_0880B60C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880B624; } @@ -8054,7 +8694,17 @@ L_0880B624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B638: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8098,7 +8748,17 @@ L_0880B680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B698: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8136,7 +8796,17 @@ L_0880B6D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B6EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8180,7 +8850,17 @@ L_0880B734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8217,7 +8897,17 @@ L_0880B788: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B79C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8244,7 +8934,17 @@ L_0880B7C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B7DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8287,7 +8987,17 @@ L_0880B820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8316,7 +9026,6 @@ L_0880B870: AOT_REGCACHE_SYNC_OUT(); return; L_0880B87C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880B88C; } @@ -8351,7 +9060,17 @@ L_0880B898: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B8B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8397,7 +9116,17 @@ L_0880B8FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880B910: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -8421,7 +9150,6 @@ L_0880B934: L_0880B948: aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(aot_fpr_20)) && aot_fpr_22 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u + static_cast(-1)); if (branch_taken) { @@ -8437,7 +9165,6 @@ L_0880B95C: AOT_REGCACHE_SYNC_OUT(); return; L_0880B968: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0880B9C0; } @@ -8476,7 +9203,6 @@ L_0880B9B0: goto L_0880B9B8; L_0880B9B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880B9FC; } @@ -8532,7 +9258,17 @@ L_0880BA00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BA1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8574,7 +9310,17 @@ L_0880BA50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BA60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -8620,7 +9366,17 @@ L_0880BAB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8651,7 +9407,17 @@ L_0880BB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BB14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8679,7 +9445,6 @@ L_0880BB48: AOT_REGCACHE_SYNC_OUT(); return; L_0880BB58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880BB68; } @@ -8716,7 +9481,17 @@ L_0880BB80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BB9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8736,7 +9511,6 @@ L_0880BBBC: AOT_REGCACHE_SYNC_OUT(); return; L_0880BBC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880BC04; } @@ -8761,7 +9535,6 @@ L_0880BBEC: AOT_REGCACHE_SYNC_OUT(); return; L_0880BBFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880BC14; } @@ -8788,7 +9561,17 @@ L_0880BC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BC28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8835,7 +9618,6 @@ L_0880BC8C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880BC7C; } @@ -8855,7 +9637,17 @@ L_0880BC9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BCB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8903,7 +9695,17 @@ L_0880BD0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BD1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8958,7 +9760,17 @@ L_0880BD80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BD90: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), aot_gpr_16); @@ -8980,7 +9792,6 @@ L_0880BDB4: AOT_REGCACHE_SYNC_OUT(); return; L_0880BDC4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880BE00; } @@ -8996,7 +9807,6 @@ L_0880BDD8: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880BE8C; } @@ -9008,11 +9818,20 @@ L_0880BDE8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17520))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BE00: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (ctx.gpr[17] | 0u); @@ -9135,7 +9954,6 @@ L_0880BEB0: AOT_REGCACHE_SYNC_OUT(); return; L_0880BEC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880BE8C; } @@ -9157,7 +9975,6 @@ L_0880BED8: AOT_REGCACHE_SYNC_OUT(); return; L_0880BEE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880BE8C; } @@ -9179,7 +9996,6 @@ L_0880BF00: AOT_REGCACHE_SYNC_OUT(); return; L_0880BF10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880BE8C; } @@ -9208,7 +10024,17 @@ L_0880BF2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880BF44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9235,7 +10061,6 @@ L_0880BF74: AOT_REGCACHE_SYNC_OUT(); return; L_0880BF80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880BFD0; } @@ -9249,7 +10074,6 @@ L_0880BF88: AOT_REGCACHE_SYNC_OUT(); return; L_0880BF94: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0880BFD8; } @@ -9280,7 +10104,6 @@ L_0880BFBC: AOT_REGCACHE_SYNC_OUT(); return; L_0880BFC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0002_entry, 2u, 6u, 0x0880C03Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9303,7 +10126,6 @@ L_0880BFD8: AOT_REGCACHE_SYNC_OUT(); return; L_0880BFE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0002_entry, 2u, 3u, 0x0880C018u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0002.cpp b/profiles/vcs/generated/generated_unit_0002.cpp index 7084214..09f55c2 100644 --- a/profiles/vcs/generated/generated_unit_0002.cpp +++ b/profiles/vcs/generated/generated_unit_0002.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0002[4094] = { - 1, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 7, 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 11, 0, 0, 12, 0, 0, 0, 13, 0, 14, 0, 15, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 19, 0, 20, 0, 21, 22, 0, 0, 23, 0, 0, 24, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 32, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, - 0, 39, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 44, - 0, 0, 0, 45, 0, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 49, 0, 0, 50, 0, 51, 0, 52, 0, 53, 0, 0, 0, 54, 0, 55, 0, - 0, 56, 0, 0, 57, 0, 0, 58, 0, 59, 0, 60, 0, 0, 61, 0, 0, 62, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 66, 0, 0, 67, - 0, 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, 71, 0, 0, 72, 0, 0, 0, 73, 0, 0, 74, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, - 0, 78, 0, 79, 0, 80, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 84, 0, 85, 0, 0, 0, 0, 86, 0, 0, 87, - 0, 0, 0, 0, 88, 0, 89, 0, 0, 90, 0, 0, 91, 0, 0, 92, 0, 0, 93, 0, 0, 94, 95, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 101, 0, 102, 0, 103, 0, 0, 0, 104, 0, - 105, 0, 0, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 0, 109, 110, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 112, 0, 0, 113, - 0, 0, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 120, 0, 0, 121, 0, 0, 0, 122, 123, 0, 0, 0, - 0, 124, 0, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 127, 0, 0, 128, 0, 0, 129, 0, 130, 0, 0, 131, 0, 0, 132, 0, 0, - 133, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 140, 141, 0, 0, - 0, 142, 0, 0, 143, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, - 0, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 155, 0, 0, - 0, 156, 0, 157, 0, 0, 0, 158, 0, 159, 0, 160, 0, 161, 0, 0, 0, 162, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, - 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 172, 0, 173, - 0, 0, 174, 0, 0, 175, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 180, 0, 0, 181, 0, 0, 0, 182, - 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 185, 0, 0, 186, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, - 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 192, 0, 193, 0, 194, 0, 0, 0, 195, 0, 196, 197, 0, 198, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 200, 0, - 201, 0, 0, 0, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, - 211, 0, 0, 0, 0, 212, 0, 0, 213, 0, 0, 214, 0, 215, 0, 0, 216, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, 219, - 0, 220, 0, 0, 221, 0, 222, 223, 0, 224, 0, 0, 225, 0, 0, 226, 0, 0, 227, 0, 0, 228, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, - 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, 237, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 242, - 0, 0, 243, 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, 0, 247, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 0, 251, 0, 0, 252, 0, 0, - 253, 0, 0, 254, 0, 0, 255, 0, 0, 256, 0, 0, 257, 0, 0, 258, 0, 0, 259, 0, 0, 260, 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, - 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 269, 0, 0, 270, 0, 0, 271, 0, 0, 272, 0, 0, 273, 0, 0, 274, - 0, 0, 275, 0, 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, 0, 279, 0, 0, 280, 281, 0, 282, 0, 283, 0, 0, 0, 0, 284, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, - 291, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 301, 0, 302, 303, 0, 0, 0, 304, 0, 305, 306, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, - 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, - 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 323, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 327, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, - 0, 331, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, 341, 0, 0, - 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, - 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 352, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 357, 0, 0, 358, 0, 359, 0, 360, 0, 361, 0, 0, 362, 0, 363, 364, 0, 0, 365, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, - 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 371, 0, 372, 0, 0, 0, 0, 373, 374, 0, 0, 0, 0, 375, 0, 376, 0, 0, 0, 0, 0, 377, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 382, 383, 0, 384, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 394, 395, 396, 0, 0, 0, 397, 0, 398, - 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 0, 0, 0, 402, 0, 0, 0, 403, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 405, 0, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, - 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, 0, 432, 0, 0, 0, 433, 0, - 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 435, 0, 436, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, - 0, 0, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 445, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 449, - 0, 450, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 454, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 0, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, 0, 0, - 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 468, 0, 469, 0, 0, - 0, 0, 470, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, - 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 480, 0, 481, 0, 482, 0, 0, 0, 0, 483, 0, 0, - 0, 0, 0, 0, 484, 0, 0, 485, 486, 0, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, - 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 497, 0, 498, 0, 499, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 503, 0, 504, 0, 505, 0, 506, 0, 0, 507, 0, - 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 0, 0, 0, 516, 0, 0, 517, 0, 518, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, - 522, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 526, 0, 0, - 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 532, - 533, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 541, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 546, 0, 547, 0, 548, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, - 551, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 554, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 557, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 565, 0, 566, - 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 579, 0, 0, 0, 580, 0, 581, 582, 0, 583, 0, 0, 584, 0, 585, 586, 0, 587, 0, 0, 0, 588, 0, 589, 590, 0, 591, - 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 594, 0, 595, 0, 0, 596, 0, 597, 598, 0, 599, 0, 0, 0, 600, 0, 601, 602, 0, 603, 0, 0, - 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, - 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 619, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, - 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 626, 0, 0, 627, 0, 0, 0, - 0, 0, 628, 0, 0, 0, 0, 0, 629, 0, 630, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 637, 0, 638, - 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 643, 0, - 0, 0, 644, 0, 645, 0, 646, 0, 647, 0, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, 650, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, 0, 655, 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 658, 0, 659, 0, - 660, 0, 661, 0, 0, 662, 0, 663, 0, 664, 0, 665, 0, 0, 666, 667, 0, 668, 0, 669, 0, 0, 670, 0, 671, 0, 672, 0, 673, 0, 0, 674, - 0, 675, 0, 676, 0, 677, 0, 0, 678, 0, 679, 0, 680, 0, 681, 0, 0, 682, 0, 683, 0, 684, 0, 0, 685, 686, 0, 687, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 0, 693, 0, 0, 694, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 696, - 0, 697, 0, 0, 698, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, 0, 701, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 704, - 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 712, 0, 713, 714, 0, 0, 0, 715, 0, 716, 0, - 717, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 721, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 0, 0, 724, - 0, 0, 0, 0, 725, 0, 726, 0, 727, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 730, 0, 731, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 734, 0, 0, 0, 0, 0, 735, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 737, 0, 738, 0, 0, 739, 0, 0, 740, 0, 0, 741, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 744, 0, 0, 745, 0, 0, 746, 0, 0, 747, 0, 0, 748, 0, 0, 749, 0, 0, 750, 0, 0, 751, 0, 0, 752, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, - 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 758, 0, 0, 0, 759, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, - 0, 763, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 771, 0, 0, 772, 0, 0, 773, 0, - 0, 774, 0, 0, 775, 0, 0, 776, 0, 0, 777, 0, 0, 778, 0, 0, 779, 0, 0, 780, 0, 0, 781, 0, 0, 782, 0, 0, 783, 0, 0, 784, - 0, 0, 785, 0, 0, 786, 0, 0, 787, 0, 0, 788, 0, 0, 789, 0, 0, 790, 0, 0, 791, 0, 0, 792, 0, 0, 793, 0, 0, 794, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0002[64] = { + 0x2010D449020C9145ull, 0x49222488020C6935ull, 0x5154914892400202ull, 0x4924492491524A92ull, + 0x4064925090A8442Aull, 0x9020C51145488A00ull, 0x24A4890218949228ull, 0x8410811234908105ull, + 0x408A2A8A28900890ull, 0x89212224A2444120ull, 0x0B45410204249410ull, 0x1420AAA148000000ull, + 0x492492D2A0812921ull, 0x2492492492492492ull, 0x9249249249249249ull, 0x0082000010AC8524ull, + 0x2020000010002000ull, 0x0800202001004015ull, 0x0A2868D000001400ull, 0x02A0001220404080ull, + 0x4200024800000442ull, 0x2905548A80040008ull, 0x01252001022002AAull, 0x40534AA400014000ull, + 0x8286148810000000ull, 0x002B820002000400ull, 0xA384100008150088ull, 0x1101042200A20A20ull, + 0x10004200008A2082ull, 0x8011240001008001ull, 0x0000000145104008ull, 0x000000282A001340ull, + 0x000000A288009A00ull, 0x20420251004D0000ull, 0x4214408428810802ull, 0x4084299021510220ull, + 0x4AA402D400908014ull, 0x20008348204A440Aull, 0x80A8102024020041ull, 0x0A80081000040103ull, + 0x112A882000000080ull, 0x000200600022C041ull, 0x01448002B4012002ull, 0x0000000802804250ull, + 0x2D169680B45A5A20ull, 0x8400100000000204ull, 0x2080000008000200ull, 0x8000000000002100ull, + 0x12A0200404A10402ull, 0xA440A00000005504ull, 0x4100002000008010ull, 0x5282210000D44154ull, + 0x0B2A552A954ACAA5ull, 0x809280928092AA80ull, 0x0000000400000008ull, 0x0200801000040000ull, + 0x8225101151A08000ull, 0x4120002A00001550ull, 0x0000000400192501ull, 0x2020000002492492ull, + 0x0211200400000040ull, 0x0800010280000200ull, 0x4920080040040400ull, 0x2492492492492492ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0002[64] = { + 1u, 19u, 39u, 56u, 78u, 97u, 114u, 133u, 149u, 166u, 183u, 199u, 211u, 232u, 253u, 275u, + 287u, 291u, 299u, 311u, 320u, 328u, 342u, 355u, 368u, 378u, 386u, 399u, 411u, 420u, 428u, 435u, + 444u, 453u, 464u, 477u, 492u, 508u, 522u, 533u, 542u, 551u, 560u, 572u, 579u, 604u, 609u, 613u, + 616u, 628u, 639u, 644u, 660u, 688u, 705u, 707u, 711u, 725u, 736u, 744u, 755u, 761u, 766u, 774u, }; void recomp_unit_0002_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0002_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0880C000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0002[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0002[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0002[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0880C000; @@ -1020,7 +927,17 @@ L_0880C04C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C064: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1052,7 +969,6 @@ L_0880C098: AOT_REGCACHE_SYNC_OUT(); return; L_0880C0A8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0880C0B8; } @@ -1081,7 +997,17 @@ L_0880C0BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C0D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1100,7 +1026,6 @@ L_0880C0D0: L_0880C0F4: aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0880C110; } @@ -1108,7 +1033,6 @@ L_0880C0F4: } L_0880C100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C114; } @@ -1134,7 +1058,6 @@ L_0880C114: L_0880C120: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0880C138; } @@ -1171,7 +1094,17 @@ L_0880C14C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C164: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1197,7 +1130,6 @@ L_0880C19C: L_0880C1A8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0880C1EC; } @@ -1259,7 +1191,17 @@ L_0880C204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C224: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1304,7 +1246,6 @@ L_0880C27C: L_0880C28C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0880C2E0; } @@ -1335,7 +1276,6 @@ L_0880C2BC: AOT_REGCACHE_SYNC_OUT(); return; L_0880C2C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880C2D8; } @@ -1343,7 +1283,6 @@ L_0880C2C8: } L_0880C2D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C2F8; } @@ -1366,7 +1305,6 @@ L_0880C2E0: AOT_REGCACHE_SYNC_OUT(); return; L_0880C2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C4D8; } @@ -1386,7 +1324,6 @@ L_0880C304: L_0880C310: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_0880C324; } @@ -1394,7 +1331,6 @@ L_0880C310: } L_0880C31C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C350; } @@ -1419,7 +1355,6 @@ L_0880C338: L_0880C344: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0880C2F8; } @@ -1427,7 +1362,6 @@ L_0880C344: } L_0880C350: { const bool branch_taken = static_cast(ctx.gpr[20]) > 0; - // nop if (branch_taken) { goto L_0880C454; } @@ -1435,7 +1369,6 @@ L_0880C350: } L_0880C358: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_0880C414; } @@ -1523,7 +1456,6 @@ L_0880C3F8: AOT_REGCACHE_SYNC_OUT(); return; L_0880C404: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880C498; } @@ -1531,7 +1463,6 @@ L_0880C404: } L_0880C40C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C4B0; } @@ -1562,7 +1493,6 @@ L_0880C438: AOT_REGCACHE_SYNC_OUT(); return; L_0880C44C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C4D8; } @@ -1570,7 +1500,6 @@ L_0880C44C: } L_0880C454: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0880C414; } @@ -1599,7 +1528,6 @@ L_0880C47C: AOT_REGCACHE_SYNC_OUT(); return; L_0880C490: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C4D8; } @@ -1653,7 +1581,17 @@ L_0880C4D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C4F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1670,7 +1608,6 @@ L_0880C4F8: AOT_REGCACHE_SYNC_OUT(); return; L_0880C524: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880C53C; } @@ -1698,7 +1635,6 @@ L_0880C54C: AOT_REGCACHE_SYNC_OUT(); return; L_0880C558: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880C5A8; } @@ -1718,7 +1654,6 @@ L_0880C568: AOT_REGCACHE_SYNC_OUT(); return; L_0880C578: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880C590; } @@ -1769,7 +1704,17 @@ L_0880C5BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1810,7 +1755,6 @@ L_0880C614: L_0880C624: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_17) >= 0; - // nop if (branch_taken) { goto L_0880C650; } @@ -1864,7 +1808,17 @@ L_0880C670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C684: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1890,7 +1844,6 @@ L_0880C6AC: L_0880C6BC: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_17) >= 0; - // nop if (branch_taken) { goto L_0880C708; } @@ -1904,7 +1857,6 @@ L_0880C6C8: AOT_REGCACHE_SYNC_OUT(); return; L_0880C6D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880C700; } @@ -1946,7 +1898,17 @@ L_0880C708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C720: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1980,7 +1942,6 @@ L_0880C75C: AOT_REGCACHE_SYNC_OUT(); return; L_0880C768: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880C784; } @@ -2023,7 +1984,17 @@ L_0880C7A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C7BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2049,7 +2020,17 @@ L_0880C7E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C7FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2072,7 +2053,17 @@ L_0880C81C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C82C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -2103,7 +2094,6 @@ L_0880C85C: AOT_REGCACHE_SYNC_OUT(); return; L_0880C86C: { const bool branch_taken = aot_gpr_16 != aot_gpr_17; - // nop if (branch_taken) { goto L_0880C88C; } @@ -2118,7 +2108,6 @@ L_0880C874: AOT_REGCACHE_SYNC_OUT(); return; L_0880C884: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C8DC; } @@ -2133,7 +2122,6 @@ L_0880C88C: AOT_REGCACHE_SYNC_OUT(); return; L_0880C89C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880C8CC; } @@ -2146,7 +2134,6 @@ L_0880C8A4: AOT_REGCACHE_SYNC_OUT(); return; L_0880C8AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880C8CC; } @@ -2161,7 +2148,6 @@ L_0880C8B4: AOT_REGCACHE_SYNC_OUT(); return; L_0880C8C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880C8DC; } @@ -2188,7 +2174,17 @@ L_0880C8DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C8F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2306,7 +2302,17 @@ L_0880C9EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880C9FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2355,15 +2361,23 @@ L_0880CA54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880CA68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (49024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880CAC0; } @@ -2374,9 +2388,7 @@ L_0880CA84: aot_gpr_5 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880CAC0; } @@ -2386,9 +2398,7 @@ L_0880CAA0: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880CAD8; } @@ -2396,7 +2406,6 @@ L_0880CAA0: } L_0880CAB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880CAC8; } @@ -2412,9 +2421,7 @@ L_0880CAC0: } L_0880CAC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880CAE0; } @@ -2433,11 +2440,20 @@ L_0880CAE0: goto L_0880CAE4; L_0880CAE4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880CAEC: ctx.gpr[7] = (0u | 3u); aot_gpr_4 = (aot_gpr_4 + static_cast(-4)); @@ -2473,7 +2489,17 @@ L_0880CAEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880CB6C: ctx.gpr[6] = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; @@ -2485,7 +2511,6 @@ L_0880CB6C: } L_0880CB78: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0880CBE8; } @@ -2520,7 +2545,6 @@ L_0880CB9C: } L_0880CBA4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880CBD4; } @@ -2528,7 +2552,6 @@ L_0880CBA4: } L_0880CBAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880CBE8; } @@ -2563,16 +2586,24 @@ L_0880CBD4: goto L_0880CBE8; L_0880CBE8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880CBF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880CC34; } @@ -2597,7 +2628,6 @@ L_0880CC14: L_0880CC20: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880CC34; } @@ -2605,7 +2635,6 @@ L_0880CC20: } L_0880CC2C: aot_gpr_31 = (0x0880CC34u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880CC34u) goto L_0880CC34; AOT_REGCACHE_SYNC_OUT(); return; L_0880CC34: @@ -2615,7 +2644,17 @@ L_0880CC34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880CC40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2647,7 +2686,6 @@ L_0880CC74: goto L_0880CC7C; L_0880CC7C: aot_gpr_31 = (0x0880CC84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 346u, 0x08B65788u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880CC84u) goto L_0880CC84; AOT_REGCACHE_SYNC_OUT(); return; L_0880CC84: @@ -2659,7 +2697,6 @@ L_0880CC84: goto L_0880CC90; L_0880CC90: aot_gpr_31 = (0x0880CC98u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880CC98u) goto L_0880CC98; AOT_REGCACHE_SYNC_OUT(); return; L_0880CC98: @@ -3017,7 +3054,6 @@ L_0880CF48: goto L_0880CF4C; L_0880CF4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880CF5C; } @@ -3040,7 +3076,17 @@ L_0880CF5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880CF70: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30]}; @@ -3162,7 +3208,17 @@ L_0880D070: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880D0D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3173,7 +3229,6 @@ L_0880D0D4: L_0880D0F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880D108; } @@ -3181,7 +3236,6 @@ L_0880D0F4: } L_0880D100: aot_gpr_31 = (0x0880D108u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D108u) goto L_0880D108; AOT_REGCACHE_SYNC_OUT(); return; L_0880D108: @@ -3283,14 +3337,33 @@ L_0880D1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880D228: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880D230: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -3328,7 +3401,6 @@ L_0880D298: goto L_0880D29C; L_0880D29C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(ctx.fpr[16])); if (branch_taken) { @@ -3350,7 +3422,6 @@ L_0880D2B4: L_0880D2B8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -3368,7 +3439,6 @@ L_0880D2CC: } L_0880D2D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_15)); if (branch_taken) { @@ -3435,7 +3505,6 @@ L_0880D374: L_0880D384: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0880D3DC; } @@ -3466,7 +3535,6 @@ L_0880D390: } L_0880D3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880D48C; } @@ -3474,7 +3542,6 @@ L_0880D3D4: } L_0880D3DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880D50C; } @@ -3537,7 +3604,6 @@ L_0880D428: L_0880D48C: aot_gpr_4 = (static_cast(aot_gpr_17) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880D50C; } @@ -3606,7 +3672,17 @@ L_0880D50C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880D548: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[20]); @@ -3627,7 +3703,6 @@ L_0880D548: } L_0880D57C: aot_gpr_31 = (0x0880D584u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D584u) goto L_0880D584; AOT_REGCACHE_SYNC_OUT(); return; L_0880D584: @@ -3639,7 +3714,6 @@ L_0880D58C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(6848), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0880D5EC; } @@ -3648,7 +3722,6 @@ L_0880D58C: L_0880D59C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880D5B0; } @@ -3656,7 +3729,6 @@ L_0880D59C: } L_0880D5A8: aot_gpr_31 = (0x0880D5B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D5B0u) goto L_0880D5B0; AOT_REGCACHE_SYNC_OUT(); return; L_0880D5B0: @@ -3666,7 +3738,6 @@ L_0880D5B0: AOT_REGCACHE_SYNC_OUT(); return; L_0880D5B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880D5EC; } @@ -3680,9 +3751,7 @@ L_0880D5C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(6844))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880D5F4; } @@ -3699,7 +3768,6 @@ L_0880D5E0: } L_0880D5EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880D7D8; } @@ -3721,12 +3789,10 @@ L_0880D604: goto L_0880D60C; L_0880D60C: aot_gpr_31 = (0x0880D614u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D614u) goto L_0880D614; AOT_REGCACHE_SYNC_OUT(); return; L_0880D614: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880D6C8; } @@ -3734,7 +3800,6 @@ L_0880D614: } L_0880D61C: aot_gpr_31 = (0x0880D624u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D624u) goto L_0880D624; AOT_REGCACHE_SYNC_OUT(); return; L_0880D624: @@ -3755,9 +3820,7 @@ L_0880D624: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880D664; } @@ -3778,7 +3841,6 @@ L_0880D664: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_17 - ctx.gpr[18]); if (branch_taken) { @@ -3812,7 +3874,6 @@ L_0880D6B4: goto L_0880D6C0; L_0880D6C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880D6D4; } @@ -3862,7 +3923,6 @@ L_0880D6E0: } L_0880D738: aot_gpr_31 = (0x0880D740u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D740u) goto L_0880D740; AOT_REGCACHE_SYNC_OUT(); return; L_0880D740: @@ -3888,7 +3948,6 @@ L_0880D740: L_0880D788: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880D79C; } @@ -3896,7 +3955,6 @@ L_0880D788: } L_0880D794: aot_gpr_31 = (0x0880D79Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D79Cu) goto L_0880D79C; AOT_REGCACHE_SYNC_OUT(); return; L_0880D79C: @@ -3906,7 +3964,6 @@ L_0880D79C: AOT_REGCACHE_SYNC_OUT(); return; L_0880D7A4: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0880D7D8; } @@ -3921,7 +3978,6 @@ L_0880D7AC: goto L_0880D7B8; L_0880D7B8: aot_gpr_31 = (0x0880D7C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880D7C0u) goto L_0880D7C0; AOT_REGCACHE_SYNC_OUT(); return; L_0880D7C0: @@ -3930,7 +3986,6 @@ L_0880D7C0: L_0880D7C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0880D7D8; } @@ -3956,7 +4011,17 @@ L_0880D7D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880D7F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_17); @@ -4009,7 +4074,6 @@ L_0880D88C: L_0880D89C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880D8FC; } @@ -4024,7 +4088,6 @@ L_0880D8B0: ctx.gpr[6] = (aot_gpr_16 + ctx.gpr[6]); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(8)))))); { const bool branch_taken = aot_gpr_17 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0880D8C8; } @@ -4038,7 +4101,6 @@ L_0880D8C8: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[6] = (static_cast(aot_gpr_4) < 75 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_0880D8B0; } @@ -4046,7 +4108,6 @@ L_0880D8C8: } L_0880D8DC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880D8FC; } @@ -4078,7 +4139,17 @@ L_0880D8FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880D928: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, ctx.gpr[18]}; @@ -4109,7 +4180,6 @@ L_0880D964: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4121,7 +4191,6 @@ L_0880D9A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4194,7 +4263,6 @@ L_0880DA40: } L_0880DA48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880DA50; } @@ -4214,7 +4282,17 @@ L_0880DA50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DA6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (32639u << 16u); @@ -4238,7 +4316,6 @@ L_0880DAB0: ctx.gpr[6] = (aot_gpr_4 | 0u); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(ctx.fpr[16])) && aot_fpr_15 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 0u); if (branch_taken) { @@ -4249,7 +4326,6 @@ L_0880DAB0: L_0880DAC8: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[16])) && aot_fpr_14 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 & 255u); if (branch_taken) { @@ -4267,7 +4343,6 @@ L_0880DAE4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880DAFC; } @@ -4291,7 +4366,17 @@ L_0880DAFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DB14: ctx.gpr[6] = (32639u << 16u); ctx.gpr[6] = (ctx.gpr[6] | 65535u); @@ -4326,11 +4411,20 @@ L_0880DB44: } L_0880DB54: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DB5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -4372,7 +4466,17 @@ L_0880DBA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DBC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -4412,7 +4516,17 @@ L_0880DC04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DC1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4424,7 +4538,6 @@ L_0880DC34: aot_gpr_17 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_0880DC4C; } @@ -4432,7 +4545,6 @@ L_0880DC34: } L_0880DC44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880DCA4; } @@ -4476,7 +4588,17 @@ L_0880DCA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DCB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -4532,7 +4654,17 @@ L_0880DD3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DD60: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23]}; @@ -4550,7 +4682,6 @@ L_0880DD60: L_0880DDA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(628))); { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_0880DDFC; } @@ -4559,7 +4690,6 @@ L_0880DDA8: L_0880DDB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(632))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0880DDFC; } @@ -4612,7 +4742,17 @@ L_0880DE0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DE38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_gpr_5 | 0u); @@ -4625,7 +4765,6 @@ L_0880DE50: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[6] + static_cast(656)))))); ctx.gpr[9] = (ctx.gpr[9] & 4u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0880DE78; } @@ -4633,7 +4772,6 @@ L_0880DE50: } L_0880DE60: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880DE78; } @@ -4651,7 +4789,6 @@ L_0880DE68: } L_0880DE78: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880DF20; } @@ -4710,7 +4847,6 @@ L_0880DE80: goto L_0880F004; L_0880DF18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880DF24; } @@ -4726,7 +4862,17 @@ L_0880DF24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880DF30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4744,7 +4890,6 @@ L_0880DF30: goto L_0880DF64; L_0880DF64: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_0880DF8C; } @@ -4752,7 +4897,6 @@ L_0880DF64: } L_0880DF6C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0880DF8C; } @@ -4818,7 +4962,6 @@ L_0880DF94: goto L_0880F004; L_0880E024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E030; } @@ -4834,7 +4977,17 @@ L_0880E030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E03C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[3] = (ctx.gpr[7] | 0u); @@ -4853,7 +5006,6 @@ L_0880E06C: ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(656)))))); ctx.gpr[2] = (ctx.gpr[2] & 4u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0880E094; } @@ -4861,7 +5013,6 @@ L_0880E06C: } L_0880E07C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0880E094; } @@ -4879,7 +5030,6 @@ L_0880E084: } L_0880E094: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0880E148; } @@ -4941,7 +5091,6 @@ L_0880E09C: goto L_0880F004; L_0880E140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E14C; } @@ -4957,7 +5106,17 @@ L_0880E14C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E158: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4978,13 +5137,11 @@ L_0880E158: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0880E180u); - // nop goto L_0880E03C; L_0880E180: aot_gpr_17 = (ctx.gpr[2] | 0u); ctx.gpr[2] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_17 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0880E198; } @@ -4992,7 +5149,6 @@ L_0880E180: } L_0880E190: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E1C4; } @@ -5025,7 +5181,17 @@ L_0880E1C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E1D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5069,7 +5235,17 @@ L_0880E22C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E240: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -5083,7 +5259,6 @@ L_0880E25C: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0880E274; } @@ -5091,7 +5266,6 @@ L_0880E25C: } L_0880E26C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E288; } @@ -5116,7 +5290,17 @@ L_0880E288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E29C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -5130,7 +5314,6 @@ L_0880E2B8: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0880E2D0; } @@ -5138,7 +5321,6 @@ L_0880E2B8: } L_0880E2C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E2E4; } @@ -5163,7 +5345,17 @@ L_0880E2E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E2F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -5177,7 +5369,6 @@ L_0880E314: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0880E350; } @@ -5208,7 +5399,6 @@ L_0880E340: } L_0880E350: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E360; } @@ -5230,7 +5420,17 @@ L_0880E360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E374: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -5255,7 +5455,6 @@ L_0880E39C: L_0880E3A0: aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0880E3B4; } @@ -5263,7 +5462,6 @@ L_0880E3A0: } L_0880E3AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E3C8; } @@ -5288,7 +5486,17 @@ L_0880E3C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E3DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -5310,7 +5518,6 @@ L_0880E3F8: } L_0880E408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E43C; } @@ -5341,11 +5548,20 @@ L_0880E43C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E450: ctx.gpr[6] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0880E490; } @@ -5362,7 +5578,6 @@ L_0880E45C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(666))); aot_gpr_5 = (aot_gpr_5 >> 16u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0880E498; } @@ -5370,7 +5585,6 @@ L_0880E45C: } L_0880E488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E49C; } @@ -5389,11 +5603,20 @@ L_0880E498: goto L_0880E49C; L_0880E49C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E4A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[18]); @@ -5409,7 +5632,6 @@ L_0880E4A4: L_0880E4C8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0880E4E4; } @@ -5417,7 +5639,6 @@ L_0880E4C8: } L_0880E4D4: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0880E4EC; } @@ -5425,7 +5646,6 @@ L_0880E4D4: } L_0880E4DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E5A0; } @@ -5442,7 +5662,6 @@ L_0880E4E4: L_0880E4EC: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0880E5A0; } @@ -5455,7 +5674,6 @@ L_0880E4F8: goto L_0880EA04; L_0880E504: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880E574; } @@ -5513,7 +5731,6 @@ L_0880E574: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(340), static_cast(aot_gpr_4)); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0880E598; } @@ -5548,7 +5765,17 @@ L_0880E5A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E5BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -5656,7 +5883,6 @@ L_0880E6B0: } L_0880E6CC: aot_gpr_31 = (0x0880E6D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880E6D4u) goto L_0880E6D4; AOT_REGCACHE_SYNC_OUT(); return; L_0880E6D4: @@ -5671,7 +5897,6 @@ L_0880E6DC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880E694; } @@ -5713,7 +5938,17 @@ L_0880E720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880E748: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -5733,7 +5968,6 @@ L_0880E790: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880E7E4; } @@ -5759,7 +5993,6 @@ L_0880E7AC: } L_0880E7DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E9C4; } @@ -5767,7 +6000,6 @@ L_0880E7DC: } L_0880E7E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880E9C4; } @@ -5828,7 +6060,6 @@ L_0880E81C: ctx.gpr[19] = (0u | 1u); ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(352))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0880E8C4; } @@ -5870,7 +6101,6 @@ L_0880E8C4: } L_0880E8CC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0880E93C; } @@ -5902,7 +6132,6 @@ L_0880E900: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880E93C; } @@ -5916,7 +6145,6 @@ L_0880E918: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880E93C; } @@ -5972,7 +6200,6 @@ L_0880E998: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880E81C; } @@ -6001,7 +6228,17 @@ L_0880E9C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EA04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6896))); @@ -6023,7 +6260,6 @@ L_0880EA04: L_0880EA34: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_0880EA70; } @@ -6039,7 +6275,6 @@ L_0880EA40: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0880EA34; } @@ -6062,14 +6297,33 @@ L_0880EA74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EA7C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EA84: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_17); @@ -6087,7 +6341,6 @@ L_0880EA84: L_0880EABC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(628))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880EB24; } @@ -6095,9 +6348,7 @@ L_0880EABC: } L_0880EAC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(ctx.fpr[24])) && ctx.fpr[20] == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880EB18; } @@ -6105,7 +6356,6 @@ L_0880EAC8: } L_0880EAD8: aot_gpr_31 = (0x0880EAE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EAE0u) goto L_0880EAE0; AOT_REGCACHE_SYNC_OUT(); return; L_0880EAE0: @@ -6145,9 +6395,7 @@ L_0880EAE0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880EB18; } @@ -6155,7 +6403,6 @@ L_0880EAE0: } L_0880EB10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880EB24; } @@ -6193,14 +6440,34 @@ L_0880EB38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EB5C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(6844), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EB64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6851))); @@ -6268,7 +6535,6 @@ L_0880EC14: } L_0880EC24: aot_gpr_31 = (0x0880EC2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EC2Cu) goto L_0880EC2C; AOT_REGCACHE_SYNC_OUT(); return; L_0880EC2C: @@ -6276,7 +6542,6 @@ L_0880EC2C: goto L_0880EC30; L_0880EC30: aot_gpr_31 = (0x0880EC38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 558u, 0x089BAA88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EC38u) goto L_0880EC38; AOT_REGCACHE_SYNC_OUT(); return; L_0880EC38: @@ -6290,7 +6555,6 @@ L_0880EC38: } L_0880EC44: aot_gpr_31 = (0x0880EC4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EC4Cu) goto L_0880EC4C; AOT_REGCACHE_SYNC_OUT(); return; L_0880EC4C: @@ -6298,7 +6562,6 @@ L_0880EC4C: goto L_0880EC50; L_0880EC50: aot_gpr_31 = (0x0880EC58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 565u, 0x089BAAD0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EC58u) goto L_0880EC58; AOT_REGCACHE_SYNC_OUT(); return; L_0880EC58: @@ -6313,7 +6576,6 @@ L_0880EC58: } L_0880EC68: aot_gpr_31 = (0x0880EC70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EC70u) goto L_0880EC70; AOT_REGCACHE_SYNC_OUT(); return; L_0880EC70: @@ -6321,7 +6583,6 @@ L_0880EC70: goto L_0880EC74; L_0880EC74: aot_gpr_31 = (0x0880EC7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 565u, 0x089BAAD0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880EC7Cu) goto L_0880EC7C; AOT_REGCACHE_SYNC_OUT(); return; L_0880EC7C: @@ -6332,7 +6593,6 @@ L_0880EC7C: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880ECA8; } @@ -6340,7 +6600,6 @@ L_0880EC7C: } L_0880EC9C: aot_gpr_31 = (0x0880ECA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880ECA4u) goto L_0880ECA4; AOT_REGCACHE_SYNC_OUT(); return; L_0880ECA4: @@ -6348,7 +6607,6 @@ L_0880ECA4: goto L_0880ECA8; L_0880ECA8: aot_gpr_31 = (0x0880ECB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 561u, 0x089BAAA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880ECB0u) goto L_0880ECB0; AOT_REGCACHE_SYNC_OUT(); return; L_0880ECB0: @@ -6362,7 +6620,6 @@ L_0880ECB0: } L_0880ECBC: aot_gpr_31 = (0x0880ECC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880ECC4u) goto L_0880ECC4; AOT_REGCACHE_SYNC_OUT(); return; L_0880ECC4: @@ -6370,7 +6627,6 @@ L_0880ECC4: goto L_0880ECC8; L_0880ECC8: aot_gpr_31 = (0x0880ECD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 569u, 0x089BAAFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880ECD0u) goto L_0880ECD0; AOT_REGCACHE_SYNC_OUT(); return; L_0880ECD0: @@ -6385,7 +6641,6 @@ L_0880ECD0: } L_0880ECE0: aot_gpr_31 = (0x0880ECE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880ECE8u) goto L_0880ECE8; AOT_REGCACHE_SYNC_OUT(); return; L_0880ECE8: @@ -6393,7 +6648,6 @@ L_0880ECE8: goto L_0880ECEC; L_0880ECEC: aot_gpr_31 = (0x0880ECF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 569u, 0x089BAAFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880ECF4u) goto L_0880ECF4; AOT_REGCACHE_SYNC_OUT(); return; L_0880ECF4: @@ -6417,7 +6671,17 @@ L_0880ED08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880ED24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6852))); ctx.gpr[7] = (17264u << 16u); @@ -6457,7 +6721,17 @@ L_0880ED24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EDB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(0))); @@ -6523,7 +6797,17 @@ L_0880EE24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EE6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5964))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5968))); @@ -6592,7 +6876,17 @@ L_0880EF20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EF34: aot_gpr_4 = (ctx.gpr[7] + ctx.gpr[7]); aot_gpr_4 = (ctx.gpr[7] + aot_gpr_4); @@ -6647,14 +6941,34 @@ L_0880EF34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880EFFC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(6900), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F004: ctx.gpr[6] = (aot_gpr_5 << 4u); ctx.gpr[7] = (ctx.gpr[6] + ctx.gpr[6]); @@ -6664,7 +6978,6 @@ L_0880F004: ctx.gpr[7] = (0u | 65534u); ctx.gpr[7] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0880F040; } @@ -6691,11 +7004,20 @@ L_0880F040: goto L_0880F054; L_0880F054: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F05C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6851))); if (aot_gpr_4 == 0u) { @@ -6711,7 +7033,6 @@ L_0880F068: ctx.fpr[0] = aot_fpr_12 + aot_fpr_13; ctx.fpr[0] = std::sqrt(ctx.fpr[0]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F0DC; } @@ -6726,7 +7047,6 @@ L_0880F088: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -6746,7 +7066,6 @@ L_0880F0B4: goto L_0880F0D4; L_0880F0D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F0DC; } @@ -6754,15 +7073,23 @@ L_0880F0D4: } L_0880F0DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F0E4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6851))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880F130; } @@ -6772,9 +7099,7 @@ L_0880F0F0: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880F128; } @@ -6784,7 +7109,6 @@ L_0880F108: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16256u << 16u); if (branch_taken) { @@ -6855,11 +7179,20 @@ L_0880F138: } L_0880F1B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F1BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6851))); @@ -6888,7 +7221,6 @@ L_0880F1E8: goto L_0880F1F4; L_0880F1F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F320; } @@ -6916,7 +7248,6 @@ L_0880F210: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0880F294; } @@ -6967,7 +7298,6 @@ L_0880F23C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F2E0; } @@ -7028,7 +7358,6 @@ L_0880F2E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); if (branch_taken) { @@ -7038,9 +7367,7 @@ L_0880F2E0: } L_0880F2F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880F318; } @@ -7048,7 +7375,6 @@ L_0880F2F8: } L_0880F308: aot_gpr_31 = (0x0880F310u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880F310u) goto L_0880F310; AOT_REGCACHE_SYNC_OUT(); return; L_0880F310: @@ -7071,7 +7397,6 @@ L_0880F320: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -7081,9 +7406,7 @@ L_0880F320: } L_0880F338: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0880F358; } @@ -7091,7 +7414,6 @@ L_0880F338: } L_0880F348: aot_gpr_31 = (0x0880F350u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0880F350u) goto L_0880F350; AOT_REGCACHE_SYNC_OUT(); return; L_0880F350: @@ -7140,7 +7462,17 @@ L_0880F3A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F3B4: aot_gpr_4 = (aot_gpr_5 | 0u); ctx.gpr[7] = (aot_gpr_4 < static_cast(8) ? 1u : 0u); @@ -7157,14 +7489,22 @@ L_0880F3C4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17632))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F3DC: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F3F0; } @@ -7185,7 +7525,6 @@ L_0880F3F0: goto L_0880F3F8; L_0880F3F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7193,7 +7532,6 @@ L_0880F3F8: } L_0880F400: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F414; } @@ -7214,7 +7552,6 @@ L_0880F414: goto L_0880F41C; L_0880F41C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7222,7 +7559,6 @@ L_0880F41C: } L_0880F424: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F438; } @@ -7242,7 +7578,6 @@ L_0880F438: goto L_0880F43C; L_0880F43C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7250,7 +7585,6 @@ L_0880F43C: } L_0880F444: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F458; } @@ -7271,7 +7605,6 @@ L_0880F458: goto L_0880F460; L_0880F460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7279,7 +7612,6 @@ L_0880F460: } L_0880F468: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F47C; } @@ -7300,7 +7632,6 @@ L_0880F47C: goto L_0880F484; L_0880F484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7308,7 +7639,6 @@ L_0880F484: } L_0880F48C: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F4A0; } @@ -7329,7 +7659,6 @@ L_0880F4A0: goto L_0880F4A8; L_0880F4A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7337,7 +7666,6 @@ L_0880F4A8: } L_0880F4B0: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0880F4C4; } @@ -7358,7 +7686,6 @@ L_0880F4C4: goto L_0880F4CC; L_0880F4CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F4E4; } @@ -7378,11 +7705,20 @@ L_0880F4E0: goto L_0880F4E4; L_0880F4E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F4EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 << 4u); @@ -7403,7 +7739,6 @@ L_0880F4EC: } L_0880F51C: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0880F5FC; } @@ -7411,7 +7746,6 @@ L_0880F51C: } L_0880F524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F544; } @@ -7427,7 +7761,6 @@ L_0880F52C: } L_0880F534: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880F5C4; } @@ -7435,7 +7768,6 @@ L_0880F534: } L_0880F53C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F5FC; } @@ -7450,7 +7782,6 @@ L_0880F544: L_0880F550: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880F57C; } @@ -7468,7 +7799,6 @@ L_0880F55C: goto L_0880F57C; L_0880F57C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F5FC; } @@ -7483,7 +7813,6 @@ L_0880F584: L_0880F590: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880F5BC; } @@ -7501,7 +7830,6 @@ L_0880F59C: goto L_0880F5BC; L_0880F5BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0880F5FC; } @@ -7516,7 +7844,6 @@ L_0880F5C4: L_0880F5D0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880F5FC; } @@ -7540,7 +7867,17 @@ L_0880F5FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F60C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), aot_gpr_16); @@ -7684,7 +8021,17 @@ L_0880F7BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880F7E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7709,7 +8056,6 @@ L_0880F83C: goto L_0880CA68; L_0880F854: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0880F860; } @@ -7730,7 +8076,6 @@ L_0880F860: } L_0880F870: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0880F880; } @@ -7797,7 +8142,6 @@ L_0880F8E4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_0880F8FC; @@ -7822,7 +8166,6 @@ L_0880F910: } L_0880F918: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880F9F8; } @@ -7830,7 +8173,6 @@ L_0880F918: } L_0880F920: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880F984; } @@ -7838,7 +8180,6 @@ L_0880F920: } L_0880F928: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0880F984; } @@ -7873,7 +8214,6 @@ L_0880F930: } L_0880F984: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880F9D4; } @@ -7881,7 +8221,6 @@ L_0880F984: } L_0880F98C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0880F9D4; } @@ -7912,7 +8251,6 @@ L_0880F994: L_0880F9D4: aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0880F9F8; } @@ -7928,7 +8266,6 @@ L_0880F9E0: goto L_0880F9F8; L_0880F9F8: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0880F8B0; } @@ -7942,7 +8279,6 @@ L_0880FA00: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 3u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0880FA28; } @@ -7959,7 +8295,6 @@ L_0880FA20: L_0880FA28: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); { const bool branch_taken = ctx.gpr[21] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_0880F890; } @@ -7968,7 +8303,6 @@ L_0880FA28: L_0880FA34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_0880FA4C; } @@ -8004,7 +8338,17 @@ L_0880FA50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880FA88: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), ctx.gpr[21]); @@ -8222,7 +8566,17 @@ L_0880FCE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880FD24: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -8350,7 +8704,17 @@ L_0880FE78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0880FEAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2235u << 16u); diff --git a/profiles/vcs/generated/generated_unit_0003.cpp b/profiles/vcs/generated/generated_unit_0003.cpp index 8e23628..21b783e 100644 --- a/profiles/vcs/generated/generated_unit_0003.cpp +++ b/profiles/vcs/generated/generated_unit_0003.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0003[4091] = { - 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, - 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, - 0, 0, 23, 0, 0, 24, 0, 0, 25, 0, 0, 26, 0, 0, 27, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, - 0, 0, 31, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 36, 0, 37, 0, 0, 38, 0, 0, 39, 0, 0, - 40, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 49, 0, 0, 50, 0, - 0, 51, 0, 0, 52, 0, 0, 53, 0, 0, 54, 0, 0, 55, 0, 0, 56, 0, 0, 57, 0, 0, 58, 0, 0, 59, 0, 0, 60, 0, 0, 61, - 0, 0, 62, 0, 0, 63, 0, 0, 64, 0, 0, 65, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, 71, - 0, 0, 72, 0, 0, 73, 0, 0, 74, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, - 82, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 0, 86, 0, 0, 87, 0, 0, 88, 0, 0, 89, 0, 0, 90, 0, 0, 91, 0, 92, 0, 0, - 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 96, 0, 0, - 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 104, 0, 0, 105, 0, 106, 0, 107, 0, 0, 0, 0, 0, - 108, 0, 0, 109, 110, 0, 111, 0, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 118, - 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 122, 0, 123, 0, 0, 0, 124, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 127, - 0, 0, 128, 129, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, - 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 137, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 140, - 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 0, 144, 0, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 148, 0, - 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 153, 0, 154, 0, 155, 0, 156, 0, 0, 157, 0, 0, 158, 0, 0, 159, 0, 0, 160, - 0, 0, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 167, - 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, - 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 185, - 0, 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 0, 194, 0, 0, 195, 0, 0, 196, - 0, 0, 197, 198, 0, 199, 0, 0, 200, 0, 0, 201, 0, 0, 202, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, 206, 0, 0, 207, 0, 0, 208, - 0, 209, 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 214, 0, 0, 0, 215, 0, 0, 216, 0, 0, 217, 0, 0, - 0, 218, 219, 0, 220, 0, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 0, 227, 0, 0, 228, 0, 0, 229, 0, 0, - 230, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 240, - 0, 0, 0, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 0, - 251, 0, 0, 0, 252, 0, 0, 253, 0, 0, 254, 0, 0, 255, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 259, 0, 0, 260, - 0, 261, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, - 0, 272, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, 279, 0, 0, 280, 0, 0, - 281, 0, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 284, 0, 285, 0, 0, 286, 0, 287, 288, 0, 0, 0, 0, 0, 0, 0, 289, 290, 0, - 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 298, 0, 299, 0, 0, 300, 0, 0, 301, 0, 0, 302, - 0, 0, 303, 0, 304, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, - 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 313, 0, 0, 0, 0, 0, 0, - 0, 0, 314, 0, 315, 0, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, - 0, 324, 0, 325, 0, 326, 0, 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 330, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, - 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 343, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 346, 0, 347, 0, 0, 0, 348, 0, - 0, 349, 0, 0, 350, 0, 0, 351, 352, 0, 0, 353, 0, 0, 354, 0, 0, 355, 0, 0, 356, 357, 0, 0, 358, 0, 0, 359, 0, 0, 360, 0, - 361, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 365, 0, 0, 366, 0, 367, 0, 368, 0, 0, 369, 0, 370, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 384, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, - 0, 388, 0, 0, 389, 0, 0, 390, 0, 391, 392, 0, 393, 0, 394, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 399, 400, 0, 401, 0, - 402, 0, 403, 0, 0, 404, 0, 0, 405, 0, 0, 406, 0, 407, 408, 0, 409, 0, 410, 0, 411, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 415, - 416, 0, 417, 0, 418, 0, 419, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 423, 424, 0, 425, 0, 426, 0, 427, 0, 0, 428, 0, 0, 429, 0, - 0, 430, 0, 431, 432, 0, 433, 0, 434, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 438, 0, 439, 440, 0, 441, 0, 442, 0, 443, 0, 0, 444, - 0, 0, 445, 0, 0, 446, 0, 447, 448, 0, 449, 0, 450, 0, 451, 0, 0, 452, 0, 0, 453, 0, 0, 454, 0, 455, 456, 0, 457, 0, 458, 0, - 459, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 463, 464, 0, 465, 0, 466, 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 470, 0, 471, 472, 0, - 473, 0, 474, 0, 475, 0, 0, 476, 0, 0, 477, 0, 0, 478, 0, 479, 480, 0, 481, 0, 482, 0, 483, 0, 0, 484, 0, 0, 485, 0, 0, 486, - 0, 487, 488, 0, 489, 0, 490, 0, 491, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 495, 496, 0, 497, 0, 498, 0, 499, 0, 0, 500, 0, 0, - 501, 0, 0, 502, 0, 503, 504, 0, 505, 0, 506, 0, 507, 0, 0, 508, 0, 0, 509, 0, 0, 510, 0, 511, 512, 0, 513, 0, 514, 0, 515, 0, - 0, 516, 0, 0, 517, 0, 0, 518, 0, 519, 520, 0, 521, 0, 522, 0, 523, 0, 0, 524, 0, 0, 525, 0, 0, 526, 0, 527, 528, 0, 529, 0, - 530, 0, 531, 0, 0, 532, 0, 0, 533, 0, 0, 534, 0, 535, 536, 0, 537, 0, 538, 0, 539, 0, 0, 540, 0, 0, 541, 0, 0, 542, 0, 543, - 544, 0, 545, 0, 546, 0, 547, 0, 0, 548, 0, 0, 549, 0, 0, 550, 0, 551, 552, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 0, 557, 0, - 0, 558, 0, 559, 560, 0, 561, 0, 562, 0, 563, 0, 0, 564, 0, 0, 565, 0, 0, 566, 0, 567, 568, 0, 569, 0, 570, 0, 571, 0, 0, 572, - 0, 0, 573, 0, 0, 574, 0, 575, 576, 0, 577, 0, 578, 0, 579, 0, 0, 580, 0, 0, 581, 0, 0, 582, 0, 583, 584, 0, 585, 0, 586, 0, - 587, 0, 0, 588, 0, 0, 589, 0, 0, 590, 0, 591, 592, 0, 593, 0, 594, 0, 595, 0, 0, 596, 0, 0, 597, 0, 0, 598, 0, 599, 600, 0, - 601, 0, 602, 0, 603, 0, 0, 604, 0, 0, 605, 0, 0, 606, 0, 607, 608, 0, 609, 0, 610, 0, 611, 0, 0, 612, 0, 0, 613, 0, 0, 614, - 0, 615, 616, 0, 617, 0, 618, 0, 619, 0, 0, 620, 0, 0, 621, 0, 0, 622, 0, 623, 624, 0, 625, 0, 626, 0, 627, 0, 0, 628, 0, 0, - 629, 0, 0, 630, 0, 631, 632, 0, 633, 0, 634, 0, 635, 0, 0, 636, 0, 0, 637, 0, 0, 638, 0, 639, 640, 0, 641, 0, 642, 0, 643, 0, - 0, 644, 0, 0, 645, 0, 0, 646, 0, 647, 648, 0, 649, 0, 650, 0, 651, 0, 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 656, 0, 657, 0, - 658, 0, 659, 0, 0, 660, 0, 0, 661, 0, 0, 662, 0, 663, 664, 0, 665, 0, 666, 0, 667, 0, 0, 668, 0, 0, 669, 0, 0, 670, 0, 671, - 672, 0, 673, 0, 674, 0, 675, 0, 0, 676, 0, 0, 677, 0, 0, 678, 0, 679, 680, 0, 681, 0, 682, 0, 683, 0, 0, 684, 0, 0, 685, 0, - 0, 686, 0, 687, 688, 0, 689, 0, 690, 0, 691, 0, 0, 692, 0, 0, 693, 0, 0, 694, 0, 695, 696, 0, 697, 0, 698, 0, 699, 0, 0, 700, - 0, 0, 701, 0, 0, 702, 0, 703, 704, 0, 705, 0, 706, 0, 707, 0, 0, 708, 0, 0, 709, 0, 0, 710, 0, 711, 712, 0, 713, 0, 714, 0, - 715, 0, 0, 716, 0, 0, 717, 0, 0, 718, 0, 719, 720, 0, 721, 0, 722, 0, 0, 0, 723, 0, 0, 724, 0, 0, 725, 0, 0, 726, 0, 0, - 727, 0, 728, 729, 0, 730, 0, 731, 0, 0, 732, 0, 733, 0, 0, 0, 734, 0, 0, 735, 0, 0, 736, 0, 0, 737, 0, 0, 738, 0, 739, 740, - 0, 741, 0, 742, 0, 0, 0, 743, 0, 0, 0, 744, 0, 0, 745, 0, 0, 746, 0, 0, 747, 0, 0, 748, 0, 749, 750, 0, 751, 0, 752, 0, - 0, 0, 753, 0, 0, 754, 0, 0, 755, 0, 0, 756, 0, 757, 758, 0, 759, 0, 760, 0, 0, 761, 0, 762, 0, 0, 763, 764, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, - 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 770, - 0, 0, 0, 0, 771, 0, 772, 0, 773, 0, 774, 0, 775, 0, 776, 0, 777, 0, 778, 0, 0, 0, 779, 0, 0, 0, 780, 781, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 783, 0, 784, 0, 0, 785, 0, 0, 786, 0, - 0, 0, 787, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, - 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 793, 0, 794, 0, 0, 0, 795, 0, 0, 796, 0, 797, 0, 798, 0, 0, 799, 0, 0, 800, 0, 801, 0, 802, 803, 0, 0, 0, 804, 0, - 0, 0, 805, 0, 0, 806, 0, 0, 807, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 809, 0, 810, 0, 811, 0, 0, 0, 812, 0, 0, 0, 0, - 0, 813, 0, 0, 0, 0, 814, 0, 815, 0, 0, 0, 816, 0, 0, 0, 817, 0, 0, 0, 818, 0, 0, 0, 819, 0, 820, 0, 0, 0, 0, 821, - 0, 0, 822, 0, 0, 0, 823, 0, 0, 0, 824, 0, 825, 826, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, - 0, 0, 829, 0, 830, 0, 831, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 0, - 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 836, 0, 0, 837, 0, 0, 0, 0, 838, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 839, 0, 840, 0, 0, 841, 0, 0, 842, 0, 0, 843, 0, 0, 844, 0, 0, 845, 0, 0, 0, 846, 0, 0, 0, 0, - 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, 0, 849, 0, 0, 850, 0, 0, 851, 0, - 0, 0, 852, 0, 0, 0, 853, 0, 0, 854, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, - 857, 0, 0, 0, 858, 0, 0, 0, 0, 0, 859, 0, 0, 0, 860, 0, 0, 0, 0, 0, 861, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 0, - 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, 0, 865, 0, 0, 0, 0, 866, 0, 0, 0, 0, 867, 0, 868, 0, 0, - 0, 0, 0, 869, 0, 870, 0, 0, 0, 871, 0, 0, 872, 0, 0, 873, 0, 0, 0, 874, 0, 0, 875, 0, 0, 0, 0, 0, 876, 0, 877, 0, - 0, 878, 0, 879, 880, 0, 0, 0, 881, 0, 0, 882, 0, 0, 0, 0, 0, 883, 0, 884, 0, 885, 0, 886, 0, 887, 888, 0, 0, 0, 889, 0, - 0, 0, 0, 0, 0, 890, 0, 0, 891, 0, 0, 0, 892, 0, 0, 0, 893, 0, 0, 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 895, 0, 0, 0, 896, 0, 0, 0, 897, 0, 0, 898, 0, 0, 0, 899, 0, 900, 0, 0, 901, 902, 0, 0, 903, 0, 904, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 905, 0, 906, 0, 907, 0, 0, 0, 0, 908, 0, 0, 0, 0, 909, 0, 0, 0, 0, 910, 0, 0, 0, 911, 0, - 0, 912, 0, 913, 0, 0, 0, 914, 0, 0, 0, 0, 0, 915, 0, 0, 0, 916, 0, 917, 0, 0, 918, 0, 0, 0, 919, 0, 0, 0, 920, 0, - 0, 0, 0, 921, 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 923, 0, 0, 924, 0, 0, 0, 0, 0, - 0, 925, 0, 0, 0, 926, 0, 0, 927, 0, 928, 0, 0, 0, 0, 0, 929, 0, 0, 0, 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, 0, 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, 0, 0, 934, 0, 0, 935, 0, 0, 936, 0, 0, 937, 938, 939, 0, - 0, 0, 940, 0, 941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, 0, 0, 946, 0, 0, 0, 947, 0, 0, 0, 948, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, 951, 0, 952, 0, 953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 954, 0, 0, 0, 0, 0, 0, 955, 0, 0, 0, 0, 0, 956, 0, 0, 957, - 0, 0, 958, 0, 959, 0, 0, 0, 0, 0, 960, 0, 961, 0, 0, 0, 962, 0, 0, 963, 0, 0, 964, 0, 0, 0, 965, 0, 0, 0, 966, 0, - 0, 0, 967, 0, 0, 968, 0, 0, 0, 969, 0, 0, 0, 970, 0, 0, 0, 971, 0, 0, 972, 0, 0, 0, 973, 0, 0, 0, 974, 0, 0, 0, - 975, 0, 0, 976, 0, 0, 0, 977, 0, 0, 0, 978, 0, 0, 0, 979, 0, 0, 0, 980, 0, 981, 0, 0, 0, 982, 983, 0, 0, 0, 0, 0, - 0, 0, 0, 984, 0, 0, 0, 0, 0, 0, 0, 985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, 987, 0, 0, - 0, 0, 0, 0, 0, 0, 988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 989, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 990, 0, 991, 992, 0, 0, 993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 994, 0, 995, 0, 996, 0, 997, 0, 0, 998, 0, 999, 0, 1000, 1001, 0, 1002, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1003, 0, 0, 0, 1004, 0, 1005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1006, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1008, 0, 0, 1009, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1012, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1013, 0, 0, 0, 0, 1014, 0, 0, 0, 0, 0, 0, 1015, 0, 0, 0, 1016, 0, 0, 0, 0, 0, 0, 0, 0, 1017, 0, - 0, 0, 0, 0, 0, 1018, 0, 0, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1021, 0, 0, 0, - 0, 0, 0, 1022, 0, 0, 0, 1023, 0, 0, 0, 0, 0, 1024, 0, 0, 0, 0, 0, 1025, 0, 0, 0, 1026, 0, 0, 1027, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0003[64] = { + 0x9249249249249249ull, 0x24A840A440124924ull, 0x9249249249249249ull, 0x2492492492444924ull, + 0x2480000229249249ull, 0x0549112100000009ull, 0x8891510484512459ull, 0x080000404200002Cull, + 0xA008060000000010ull, 0x4880000104480008ull, 0x924AA40000400012ull, 0x10084120A8014048ull, + 0x0060028020004A02ull, 0x9255422280448000ull, 0x248911229249492Cull, 0x8891492524955096ull, + 0x9481249124889550ull, 0x24489112AA84448Aull, 0x925AA8246034A091ull, 0x02A0012201000514ull, + 0x2400004280084214ull, 0x0000200042A2092Aull, 0x0A20000808201044ull, 0x4932499245240000ull, + 0x0088100029525041ull, 0x2800020080000A20ull, 0x4085400010040000ull, 0xA49569255A495692ull, + 0x9569255A49569255ull, 0x69255A49569255A4ull, 0x255A49569255A495ull, 0x5A49569255A49569ull, + 0x49569255A4956925ull, 0x569255A49569255Aull, 0x9255A49569255A49ull, 0x55A49569255A4956ull, + 0xA49569255A495692ull, 0x9569255A49569255ull, 0x24915A49569255A4ull, 0x5692488AD24914ADull, + 0x400004000CA56924ull, 0x8810000000000001ull, 0x495000000C455550ull, 0x0002042080000044ull, + 0x08A8032446A4A914ull, 0x8008344485111142ull, 0x084A000101000154ull, 0x4920000208924940ull, + 0x0210441140000A44ull, 0x5048922828428001ull, 0x0041112046AA091Aull, 0x44210A8014CA2444ull, + 0x04800028444A208Aull, 0x0004400000110522ull, 0x0002801472480800ull, 0x002A082008890010ull, + 0x4449141490408000ull, 0x0628888911122224ull, 0x0000004028000808ull, 0x0000000000800000ull, + 0x16A5500000009A00ull, 0x0012002001001440ull, 0x4022042004002002ull, 0x0488208810040220ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0003[64] = { + 1u, 23u, 40u, 62u, 82u, 97u, 108u, 128u, 135u, 141u, 149u, 161u, 173u, 182u, 197u, 218u, + 241u, 261u, 281u, 303u, 314u, 324u, 335u, 344u, 361u, 374u, 381u, 388u, 416u, 445u, 473u, 501u, + 530u, 558u, 587u, 615u, 644u, 672u, 701u, 727u, 753u, 767u, 771u, 787u, 793u, 813u, 829u, 839u, + 852u, 863u, 878u, 895u, 912u, 925u, 933u, 944u, 954u, 967u, 984u, 989u, 990u, 1003u, 1010u, 1018u, }; void recomp_unit_0003_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0003_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08810000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0003[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0003[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0003[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08810000; @@ -1409,7 +1316,17 @@ L_0881019C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088101B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1756,7 +1673,6 @@ L_08810460: AOT_REGCACHE_SYNC_OUT(); return; L_0881046C: aot_gpr_31 = (0x08810474u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08810474u) goto L_08810474; AOT_REGCACHE_SYNC_OUT(); return; L_08810474: @@ -1767,7 +1683,17 @@ L_08810474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08810484: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), std::bit_cast(aot_fpr_12)); @@ -1839,7 +1765,6 @@ L_08810580: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(32)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088109DC; } @@ -1848,7 +1773,6 @@ L_08810580: L_08810594: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088109DC; } @@ -1858,7 +1782,6 @@ L_088105A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(32)))))); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088109DC; } @@ -1883,7 +1806,6 @@ L_088105C0: L_088105CC: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08810610; } @@ -1896,7 +1818,6 @@ L_088105D8: AOT_REGCACHE_SYNC_OUT(); return; L_088105E0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08810600; } @@ -1919,7 +1840,6 @@ L_088105E8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881060C; } @@ -1946,7 +1866,6 @@ L_0881060C: goto L_08810610; L_08810610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881070C; } @@ -1956,7 +1875,6 @@ L_08810618: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08810658; } @@ -1971,7 +1889,6 @@ L_08810628: L_08810634: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810650; } @@ -1996,7 +1913,6 @@ L_08810640: goto L_08810650; L_08810650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881070C; } @@ -2006,7 +1922,6 @@ L_08810658: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881070C; } @@ -2023,7 +1938,6 @@ L_08810668: L_0881067C: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0881070C; } @@ -2075,7 +1989,6 @@ L_088106C0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08810708; } @@ -2122,7 +2035,6 @@ L_08810708: goto L_0881070C; L_0881070C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088109DC; } @@ -2189,9 +2101,7 @@ L_08810714: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088109DC; } @@ -2254,9 +2164,7 @@ L_088107EC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088109DC; } @@ -2326,9 +2234,7 @@ L_08810810: ctx.fpr[22] = ctx.fpr[22] + aot_fpr_12; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088108A8; } @@ -2368,9 +2274,7 @@ L_088108CC: aot_gpr_4 = (17302u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088108FC; } @@ -2386,9 +2290,7 @@ L_088108F4: } L_088108FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08810968; } @@ -2408,7 +2310,6 @@ L_0881090C: { const float fs = aot_fpr_12; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[20] = aot_fpr_12 + ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[20] - ctx.fpr[30]; goto L_08810958; @@ -2517,7 +2418,17 @@ L_08810A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08810A58: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(324), ctx.gpr[17]); @@ -2539,7 +2450,6 @@ L_08810A58: L_08810AA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810ABC; } @@ -2547,7 +2457,6 @@ L_08810AA8: } L_08810AB4: aot_gpr_31 = (0x08810ABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08810ABCu) goto L_08810ABC; AOT_REGCACHE_SYNC_OUT(); return; L_08810ABC: @@ -2557,7 +2466,6 @@ L_08810ABC: AOT_REGCACHE_SYNC_OUT(); return; L_08810AC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08810B74; } @@ -2613,7 +2521,6 @@ L_08810B18: AOT_REGCACHE_SYNC_OUT(); return; L_08810B38: aot_gpr_31 = (0x08810B40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 68u, 0x08960590u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08810B40u) goto L_08810B40; AOT_REGCACHE_SYNC_OUT(); return; L_08810B40: @@ -2635,7 +2542,6 @@ L_08810B40: } L_08810B6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08810D7C; } @@ -2643,7 +2549,6 @@ L_08810B6C: } L_08810B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811578; } @@ -2673,7 +2578,6 @@ L_08810BA0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810BF0; } @@ -2722,7 +2626,6 @@ L_08810C04: goto L_08810C24; L_08810C24: aot_gpr_31 = (0x08810C2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08810C2Cu) goto L_08810C2C; AOT_REGCACHE_SYNC_OUT(); return; L_08810C2C: @@ -2853,7 +2756,6 @@ L_08810D84: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810E84; } @@ -2863,7 +2765,6 @@ L_08810D94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810E84; } @@ -2874,7 +2775,6 @@ L_08810DA4: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08810E84; } @@ -2906,7 +2806,6 @@ L_08810DC8: } L_08810DD0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08810E40; } @@ -2915,7 +2814,6 @@ L_08810DD0: L_08810DD8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08810DF0; } @@ -2924,7 +2822,6 @@ L_08810DD8: L_08810DE4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08810E38; } @@ -2940,7 +2837,6 @@ L_08810DF0: L_08810DFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810E38; } @@ -2951,7 +2847,6 @@ L_08810E08: goto L_08810E0C; L_08810E0C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810E2C; } @@ -2960,7 +2855,6 @@ L_08810E0C: L_08810E14: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810E38; } @@ -2969,7 +2863,6 @@ L_08810E14: L_08810E20: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810E38; } @@ -2983,7 +2876,6 @@ L_08810E2C: AOT_REGCACHE_SYNC_OUT(); return; L_08810E38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08810E84; } @@ -2992,7 +2884,6 @@ L_08810E38: L_08810E40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08810E7C; } @@ -3001,7 +2892,6 @@ L_08810E40: L_08810E4C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810E70; } @@ -3010,7 +2900,6 @@ L_08810E4C: L_08810E58: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810E7C; } @@ -3019,7 +2908,6 @@ L_08810E58: L_08810E64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810E7C; } @@ -3033,7 +2921,6 @@ L_08810E70: AOT_REGCACHE_SYNC_OUT(); return; L_08810E7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08810E84; } @@ -3058,7 +2945,6 @@ L_08810EA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3068,7 +2954,6 @@ L_08810EB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3107,7 +2992,6 @@ L_08810EF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3118,7 +3002,6 @@ L_08810F04: goto L_08810F08; L_08810F08: { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08810F1C; } @@ -3127,7 +3010,6 @@ L_08810F08: L_08810F10: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3138,7 +3020,6 @@ L_08810F1C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3170,7 +3051,6 @@ L_08810F40: } L_08810F48: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08810F88; } @@ -3179,7 +3059,6 @@ L_08810F48: L_08810F50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810F74; } @@ -3188,7 +3067,6 @@ L_08810F50: L_08810F5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810F80; } @@ -3197,7 +3075,6 @@ L_08810F5C: L_08810F68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810F80; } @@ -3211,7 +3088,6 @@ L_08810F74: AOT_REGCACHE_SYNC_OUT(); return; L_08810F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3220,7 +3096,6 @@ L_08810F80: L_08810F88: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810FAC; } @@ -3229,7 +3104,6 @@ L_08810F88: L_08810F94: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08810FB8; } @@ -3238,7 +3112,6 @@ L_08810F94: L_08810FA0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08810FB8; } @@ -3252,7 +3125,6 @@ L_08810FAC: AOT_REGCACHE_SYNC_OUT(); return; L_08810FB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08810FC0; } @@ -3277,7 +3149,6 @@ L_08810FDC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881110C; } @@ -3287,7 +3158,6 @@ L_08810FEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881110C; } @@ -3298,7 +3168,6 @@ L_08810FFC: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881110C; } @@ -3330,7 +3199,6 @@ L_08811020: } L_08811028: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08811104; } @@ -3339,7 +3207,6 @@ L_08811028: L_08811030: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088110FC; } @@ -3349,7 +3216,6 @@ L_0881103C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088110FC; } @@ -3359,7 +3225,6 @@ L_0881104C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088110FC; } @@ -3368,7 +3233,6 @@ L_0881104C: L_0881105C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088110FC; } @@ -3377,7 +3241,6 @@ L_0881105C: L_08811068: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088110FC; } @@ -3386,7 +3249,6 @@ L_08811068: L_08811074: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_088110FC; } @@ -3396,7 +3258,6 @@ L_08811080: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(665))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088110FC; } @@ -3405,7 +3266,6 @@ L_08811080: L_08811090: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088110B4; } @@ -3414,7 +3274,6 @@ L_08811090: L_0881109C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088110FC; } @@ -3423,7 +3282,6 @@ L_0881109C: L_088110A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088110FC; } @@ -3432,7 +3290,6 @@ L_088110A8: L_088110B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088110F0; } @@ -3445,7 +3302,6 @@ L_088110C0: aot_gpr_4 = (ctx.gpr[23] << (aot_gpr_4 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088110FC; } @@ -3459,7 +3315,6 @@ L_088110DC: AOT_REGCACHE_SYNC_OUT(); return; L_088110E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088110FC; } @@ -3473,7 +3328,6 @@ L_088110F0: AOT_REGCACHE_SYNC_OUT(); return; L_088110FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881110C; } @@ -3481,7 +3335,6 @@ L_088110FC: } L_08811104: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881110C; } @@ -3506,7 +3359,6 @@ L_08811128: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08811310; } @@ -3516,7 +3368,6 @@ L_08811138: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08811310; } @@ -3527,7 +3378,6 @@ L_08811148: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08811310; } @@ -3559,7 +3409,6 @@ L_0881116C: } L_08811174: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08811184; } @@ -3567,7 +3416,6 @@ L_08811174: } L_0881117C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811310; } @@ -3576,7 +3424,6 @@ L_0881117C: L_08811184: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08811308; } @@ -3586,7 +3433,6 @@ L_08811190: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(665))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08811308; } @@ -3596,7 +3442,6 @@ L_088111A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(665))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08811308; } @@ -3605,7 +3450,6 @@ L_088111A0: L_088111B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(665))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08811308; } @@ -3615,7 +3459,6 @@ L_088111BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(665))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08811308; } @@ -3640,7 +3483,6 @@ L_088111D8: L_088111E8: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088112D0; } @@ -3649,7 +3491,6 @@ L_088111E8: L_088111F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881121C; } @@ -3673,7 +3514,6 @@ L_0881121C: ctx.gpr[17] = (aot_gpr_4 & 4u); ctx.gpr[17] = (0u < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08811254; } @@ -3681,7 +3521,6 @@ L_0881121C: } L_08811234: aot_gpr_31 = (0x0881123Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881123Cu) goto L_0881123C; AOT_REGCACHE_SYNC_OUT(); return; L_0881123C: @@ -3692,7 +3531,6 @@ L_0881123C: AOT_REGCACHE_SYNC_OUT(); return; L_08811248: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08811254; } @@ -3709,7 +3547,6 @@ L_08811254: aot_gpr_5 = (aot_gpr_4 << (aot_gpr_5 & 31u)); aot_gpr_5 = (aot_gpr_5 & ctx.gpr[6]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08811278; } @@ -3728,7 +3565,6 @@ L_08811278: L_08811288: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088112D0; } @@ -3740,7 +3576,6 @@ L_08811294: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088112D0; } @@ -3763,7 +3598,6 @@ L_088112BC: AOT_REGCACHE_SYNC_OUT(); return; L_088112C4: { const bool branch_taken = aot_gpr_16 != aot_gpr_2; - // nop if (branch_taken) { goto L_088112D0; } @@ -3774,7 +3608,6 @@ L_088112CC: goto L_088112D0; L_088112D0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08811308; } @@ -3783,7 +3616,6 @@ L_088112D0: L_088112D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088112FC; } @@ -3792,7 +3624,6 @@ L_088112D8: L_088112E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08811308; } @@ -3801,7 +3632,6 @@ L_088112E4: L_088112F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08811308; } @@ -3815,7 +3645,6 @@ L_088112FC: AOT_REGCACHE_SYNC_OUT(); return; L_08811308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811310; } @@ -3891,7 +3720,6 @@ L_08811384: L_08811394: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088113DC; } @@ -3915,7 +3743,6 @@ L_088113A0: AOT_REGCACHE_SYNC_OUT(); return; L_088113D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088114E8; } @@ -3923,7 +3750,6 @@ L_088113D4: } L_088113DC: aot_gpr_31 = (0x088113E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088113E4u) goto L_088113E4; AOT_REGCACHE_SYNC_OUT(); return; L_088113E4: @@ -3940,7 +3766,6 @@ L_088113E4: AOT_REGCACHE_SYNC_OUT(); return; L_08811408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088114E8; } @@ -3949,9 +3774,7 @@ L_08811408: L_08811410: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(6880))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08811484; } @@ -3960,9 +3783,7 @@ L_08811410: L_08811424: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(6884))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08811484; } @@ -3971,9 +3792,7 @@ L_08811424: L_08811438: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(6888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08811484; } @@ -4007,7 +3826,6 @@ L_0881144C: AOT_REGCACHE_SYNC_OUT(); return; L_0881147C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088114E8; } @@ -4029,7 +3847,6 @@ L_08811484: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08811498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08811498u) goto L_08811498; AOT_REGCACHE_SYNC_OUT(); return; L_08811498: @@ -4108,12 +3925,10 @@ L_088114F4: AOT_REGCACHE_SYNC_OUT(); return; L_08811504: aot_gpr_31 = (0x0881150Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881150Cu) goto L_0881150C; AOT_REGCACHE_SYNC_OUT(); return; L_0881150C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08811578; } @@ -4122,7 +3937,6 @@ L_0881150C: L_08811514: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6850))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08811578; } @@ -4138,7 +3952,6 @@ L_0881152C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(20))); if (branch_taken) { @@ -4148,9 +3961,7 @@ L_0881152C: } L_08811544: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08811564; } @@ -4158,7 +3969,6 @@ L_08811544: } L_08811554: aot_gpr_31 = (0x0881155Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881155Cu) goto L_0881155C; AOT_REGCACHE_SYNC_OUT(); return; L_0881155C: @@ -4199,7 +4009,17 @@ L_08811578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088115B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[20]); @@ -4227,7 +4047,6 @@ L_08811608: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(0)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08811654; } @@ -4306,7 +4125,6 @@ L_088116D4: AOT_REGCACHE_SYNC_OUT(); return; L_088116E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811AC8; } @@ -4361,7 +4179,6 @@ L_08811754: } L_08811760: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08811AC0; } @@ -4396,7 +4213,6 @@ L_08811784: L_08811790: aot_gpr_4 = (aot_gpr_4 + static_cast(255)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08811AC0; } @@ -4433,7 +4249,6 @@ L_088117B8: L_088117C4: aot_gpr_4 = (aot_gpr_4 + static_cast(255)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08811AC0; } @@ -4445,7 +4260,6 @@ L_088117D0: L_088117D4: aot_gpr_5 = (0u + static_cast(-2)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08811800; } @@ -4471,7 +4285,6 @@ L_088117EC: } L_088117F8: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08811AC0; } @@ -4483,7 +4296,6 @@ L_08811800: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(601) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08811844; } @@ -4495,7 +4307,6 @@ L_08811818: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-31120), aot_gpr_4); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08811838; } @@ -4550,7 +4361,6 @@ L_08811860: } L_0881186C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08811858; } @@ -4617,7 +4427,6 @@ L_08811914: AOT_REGCACHE_SYNC_OUT(); return; L_08811924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811858; } @@ -4682,7 +4491,6 @@ L_088119A4: AOT_REGCACHE_SYNC_OUT(); return; L_088119EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811858; } @@ -4748,7 +4556,6 @@ L_08811A70: AOT_REGCACHE_SYNC_OUT(); return; L_08811AB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08811858; } @@ -4780,11 +4587,20 @@ L_08811ADC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17664))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08811AF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); if (aot_gpr_4 != 0u) { @@ -4801,7 +4617,6 @@ L_08811B04: L_08811B10: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811B28; } @@ -4848,7 +4663,6 @@ L_08811B4C: L_08811B58: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811B70; } @@ -4895,7 +4709,6 @@ L_08811B94: L_08811BA0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811BB8; } @@ -4942,7 +4755,6 @@ L_08811BDC: L_08811BE8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811C00; } @@ -4989,7 +4801,6 @@ L_08811C24: L_08811C30: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811C48; } @@ -5036,7 +4847,6 @@ L_08811C6C: L_08811C78: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811C90; } @@ -5083,7 +4893,6 @@ L_08811CB4: L_08811CC0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811CD8; } @@ -5130,7 +4939,6 @@ L_08811CFC: L_08811D08: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811D20; } @@ -5177,7 +4985,6 @@ L_08811D44: L_08811D50: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811D68; } @@ -5224,7 +5031,6 @@ L_08811D8C: L_08811D98: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811DB0; } @@ -5271,7 +5077,6 @@ L_08811DD4: L_08811DE0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811DF8; } @@ -5318,7 +5123,6 @@ L_08811E1C: L_08811E28: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811E40; } @@ -5365,7 +5169,6 @@ L_08811E64: L_08811E70: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811E88; } @@ -5412,7 +5215,6 @@ L_08811EAC: L_08811EB8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811ED0; } @@ -5459,7 +5261,6 @@ L_08811EF4: L_08811F00: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811F18; } @@ -5506,7 +5307,6 @@ L_08811F3C: L_08811F48: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811F60; } @@ -5553,7 +5353,6 @@ L_08811F84: L_08811F90: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811FA8; } @@ -5600,7 +5399,6 @@ L_08811FCC: L_08811FD8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08811FF0; } @@ -5647,7 +5445,6 @@ L_08812014: L_08812020: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812038; } @@ -5694,7 +5491,6 @@ L_0881205C: L_08812068: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812080; } @@ -5741,7 +5537,6 @@ L_088120A4: L_088120B0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088120C8; } @@ -5788,7 +5583,6 @@ L_088120EC: L_088120F8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812110; } @@ -5835,7 +5629,6 @@ L_08812134: L_08812140: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812158; } @@ -5882,7 +5675,6 @@ L_0881217C: L_08812188: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088121A0; } @@ -5929,7 +5721,6 @@ L_088121C4: L_088121D0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088121E8; } @@ -5976,7 +5767,6 @@ L_0881220C: L_08812218: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812230; } @@ -6023,7 +5813,6 @@ L_08812254: L_08812260: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812278; } @@ -6070,7 +5859,6 @@ L_0881229C: L_088122A8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088122C0; } @@ -6117,7 +5905,6 @@ L_088122E4: L_088122F0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812308; } @@ -6164,7 +5951,6 @@ L_0881232C: L_08812338: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812350; } @@ -6211,7 +5997,6 @@ L_08812374: L_08812380: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812398; } @@ -6258,7 +6043,6 @@ L_088123BC: L_088123C8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088123E0; } @@ -6305,7 +6089,6 @@ L_08812404: L_08812410: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812428; } @@ -6352,7 +6135,6 @@ L_0881244C: L_08812458: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812470; } @@ -6399,7 +6181,6 @@ L_08812494: L_088124A0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088124B8; } @@ -6446,7 +6227,6 @@ L_088124DC: L_088124E8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812500; } @@ -6493,7 +6273,6 @@ L_08812524: L_08812530: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812548; } @@ -6540,7 +6319,6 @@ L_0881256C: L_08812578: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812590; } @@ -6587,7 +6365,6 @@ L_088125B4: L_088125C0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088125D8; } @@ -6634,7 +6411,6 @@ L_088125FC: L_08812608: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812620; } @@ -6681,7 +6457,6 @@ L_08812644: L_08812650: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08812668; } @@ -6728,7 +6503,6 @@ L_0881268C: L_08812698: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088126B0; } @@ -6764,7 +6538,6 @@ L_088126C0: L_088126D0: aot_gpr_5 = (0u | 32767u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_5; - // nop if (branch_taken) { goto L_08812728; } @@ -6786,7 +6559,6 @@ L_088126E8: L_088126F4: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0881270C; } @@ -6816,7 +6588,6 @@ L_0881271C: goto L_08812728; L_08812728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08812854; } @@ -6835,7 +6606,6 @@ L_08812730: L_08812740: aot_gpr_4 = (aot_gpr_4 + static_cast(255)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0881279C; } @@ -6857,7 +6627,6 @@ L_08812758: L_08812764: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0881277C; } @@ -6903,7 +6672,6 @@ L_0881279C: L_088127AC: aot_gpr_4 = (aot_gpr_4 + static_cast(255)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08812808; } @@ -6925,7 +6693,6 @@ L_088127C4: L_088127D0: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088127E8; } @@ -6974,7 +6741,6 @@ L_08812814: L_08812820: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08812838; } @@ -7004,7 +6770,6 @@ L_08812848: goto L_08812854; L_08812854: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08812868; } @@ -7041,7 +6806,17 @@ L_0881286C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088128A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-624)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -7130,7 +6905,6 @@ L_088129EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -7141,7 +6915,6 @@ L_088129FC: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -7181,7 +6954,6 @@ L_08812A28: } L_08812A30: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08813144; } @@ -7189,12 +6961,10 @@ L_08812A30: } L_08812A38: aot_gpr_31 = (0x08812A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08812A40u) goto L_08812A40; AOT_REGCACHE_SYNC_OUT(); return; L_08812A40: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08812AD0; } @@ -7212,7 +6982,6 @@ L_08812A58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08812AD0; } @@ -7251,7 +7020,6 @@ L_08812A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08812AD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -7259,7 +7027,6 @@ L_08812AD0: } L_08812AD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -7274,7 +7041,6 @@ L_08812AE0: L_08812AEC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08812C08; } @@ -7284,7 +7050,6 @@ L_08812AF8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_5 = (aot_gpr_5 & 224u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08812B18; } @@ -7294,7 +7059,6 @@ L_08812B08: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_5 = (aot_gpr_5 & 224u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08812C08; } @@ -7336,7 +7100,6 @@ L_08812B18: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_13)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(624))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08812B94; } @@ -7394,7 +7157,6 @@ L_08812BC4: AOT_REGCACHE_SYNC_OUT(); return; L_08812C08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -7410,7 +7172,6 @@ L_08812C10: L_08812C20: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08812C64; } @@ -7423,7 +7184,6 @@ L_08812C2C: AOT_REGCACHE_SYNC_OUT(); return; L_08812C34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08812C5C; } @@ -7432,7 +7192,6 @@ L_08812C34: L_08812C3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08812C54; } @@ -7470,7 +7229,6 @@ L_08812C68: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_5 = (aot_gpr_5 & 224u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08812C88; } @@ -7480,7 +7238,6 @@ L_08812C78: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_5 = (aot_gpr_5 & 224u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08812EC4; } @@ -7577,7 +7334,6 @@ L_08812D04: goto L_08812D18; L_08812D18: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08812E18; } @@ -7587,7 +7343,6 @@ L_08812D20: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[6] = (0u | 63u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08812D60; } @@ -7597,7 +7352,6 @@ L_08812D30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[6] = (0u | 61u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08812D60; } @@ -7607,7 +7361,6 @@ L_08812D40: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[6] = (0u | 52u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08812D60; } @@ -7617,7 +7370,6 @@ L_08812D50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[6] = (0u | 53u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08812E18; } @@ -7702,7 +7454,6 @@ L_08812DCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08812E10; } @@ -7711,7 +7462,6 @@ L_08812DCC: L_08812DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08812E10; } @@ -7724,7 +7474,6 @@ L_08812E08: AOT_REGCACHE_SYNC_OUT(); return; L_08812E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08812E60; } @@ -7732,7 +7481,6 @@ L_08812E10: } L_08812E18: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08812E60; } @@ -7790,7 +7538,6 @@ L_08812E80: AOT_REGCACHE_SYNC_OUT(); return; L_08812EC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -7840,7 +7587,6 @@ L_08812EEC: AOT_REGCACHE_SYNC_OUT(); return; L_08812F18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08812FF8; } @@ -7937,7 +7683,6 @@ L_08812FF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08813018; } @@ -7947,7 +7692,6 @@ L_08813008: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0881313C; } @@ -8036,7 +7780,6 @@ L_088130A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(624))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088130D0; } @@ -8092,7 +7835,6 @@ L_08813100: AOT_REGCACHE_SYNC_OUT(); return; L_0881313C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -8119,7 +7861,6 @@ L_08813158: } L_0881316C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0881339C; } @@ -8138,7 +7879,6 @@ L_08813174: AOT_REGCACHE_SYNC_OUT(); return; L_0881318C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0881339C; } @@ -8154,7 +7894,6 @@ L_08813194: L_088131A4: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08813268; } @@ -8163,7 +7902,6 @@ L_088131A4: L_088131B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088131D8; } @@ -8187,7 +7925,6 @@ L_088131D8: ctx.gpr[19] = (aot_gpr_4 & 4u); ctx.gpr[19] = (0u < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08813210; } @@ -8195,7 +7932,6 @@ L_088131D8: } L_088131F0: aot_gpr_31 = (0x088131F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088131F8u) goto L_088131F8; AOT_REGCACHE_SYNC_OUT(); return; L_088131F8: @@ -8206,7 +7942,6 @@ L_088131F8: AOT_REGCACHE_SYNC_OUT(); return; L_08813204: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08813210; } @@ -8225,7 +7960,6 @@ L_08813210: L_08813220: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08813268; } @@ -8237,7 +7971,6 @@ L_0881322C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08813268; } @@ -8260,7 +7993,6 @@ L_08813254: AOT_REGCACHE_SYNC_OUT(); return; L_0881325C: { const bool branch_taken = aot_gpr_16 != aot_gpr_2; - // nop if (branch_taken) { goto L_08813268; } @@ -8315,7 +8047,6 @@ L_088132C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881339C; } @@ -8333,7 +8064,6 @@ L_088132D8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881339C; } @@ -8408,7 +8138,6 @@ L_08813370: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08813308; } @@ -8424,7 +8153,6 @@ L_0881339C: } L_088133A4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08813A6C; } @@ -8435,7 +8163,6 @@ L_088133AC: aot_gpr_5 = (0u | 96u); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088133D4; } @@ -8446,7 +8173,6 @@ L_088133C0: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08813A6C; } @@ -8472,7 +8198,6 @@ L_088133E8: L_088133F8: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0881341C; } @@ -8574,7 +8299,6 @@ L_08813478: } L_0881348C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -8622,9 +8346,7 @@ L_088134E8: } L_08813504: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08813528; } @@ -8633,7 +8355,6 @@ L_08813504: L_08813514: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08813528; } @@ -8641,7 +8362,6 @@ L_08813514: } L_08813520: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -8653,7 +8373,6 @@ L_08813528: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088135B8; } @@ -8779,7 +8498,6 @@ L_08813678: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08813A6C; } @@ -8906,7 +8624,6 @@ L_088137AC: AOT_REGCACHE_SYNC_OUT(); return; L_088137C4: aot_gpr_31 = (0x088137CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088137CCu) goto L_088137CC; AOT_REGCACHE_SYNC_OUT(); return; L_088137CC: @@ -9013,7 +8730,6 @@ L_088138B0: L_088138C0: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088139E4; } @@ -9043,7 +8759,6 @@ L_088138F8: aot_gpr_5 = (0u | 63u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088139BC; } @@ -9073,7 +8788,6 @@ L_08813934: aot_gpr_5 = (0u | 61u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088139BC; } @@ -9103,7 +8817,6 @@ L_08813970: aot_gpr_5 = (0u | 52u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088139BC; } @@ -9133,7 +8846,6 @@ L_088139AC: aot_gpr_5 = (0u | 53u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088139E4; } @@ -9148,7 +8860,6 @@ L_088139BC: AOT_REGCACHE_SYNC_OUT(); return; L_088139CC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088139E4; } @@ -9210,7 +8921,6 @@ L_08813A2C: AOT_REGCACHE_SYNC_OUT(); return; L_08813A6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08813A74; } @@ -9287,7 +8997,17 @@ L_08813A98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08813B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); ctx.gpr[11] = (static_cast(static_cast(ctx.gpr[7]) >> 1u)); @@ -9335,7 +9055,6 @@ L_08813B5C: } L_08813C24: aot_gpr_31 = (0x08813C2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08813C2Cu) goto L_08813C2C; AOT_REGCACHE_SYNC_OUT(); return; L_08813C2C: @@ -9344,7 +9063,6 @@ L_08813C2C: L_08813C30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0004_entry, 4u, 141u, 0x0881487Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9389,7 +9107,6 @@ L_08813CB0: goto L_08813CB8; L_08813CB8: aot_gpr_31 = (0x08813CC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08813CC0u) goto L_08813CC0; AOT_REGCACHE_SYNC_OUT(); return; L_08813CC0: @@ -9399,7 +9116,6 @@ L_08813CC0: L_08813CC8: aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0004_entry, 4u, 6u, 0x08814068u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9407,7 +9123,6 @@ L_08813CC8: } L_08813CD4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08813CE8; } @@ -9415,7 +9130,6 @@ L_08813CD4: } L_08813CDC: aot_gpr_31 = (0x08813CE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08813CE4u) goto L_08813CE4; AOT_REGCACHE_SYNC_OUT(); return; L_08813CE4: @@ -9506,7 +9220,6 @@ L_08813D94: L_08813DC4: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(25))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08813E34; } @@ -9715,9 +9428,7 @@ L_08813FE8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0004_entry, 4u, 5u, 0x08814060u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0004.cpp b/profiles/vcs/generated/generated_unit_0004.cpp index c9a6e9f..bee2737 100644 --- a/profiles/vcs/generated/generated_unit_0004.cpp +++ b/profiles/vcs/generated/generated_unit_0004.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0004[4058] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, - 0, 7, 0, 8, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, - 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, - 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 45, 46, 0, 47, 0, 48, 49, 0, 50, 0, 0, - 0, 0, 51, 0, 52, 53, 0, 54, 0, 0, 0, 55, 0, 56, 57, 0, 58, 0, 0, 0, 59, 60, 0, 61, 0, 62, 0, 0, 63, 0, 0, 64, - 0, 65, 0, 0, 66, 0, 0, 0, 67, 0, 68, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 72, 0, 0, 73, 0, 0, 74, - 0, 75, 76, 0, 77, 0, 78, 0, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, 82, 0, 83, 84, 0, 85, 0, 86, 0, 0, 0, 87, 0, - 0, 88, 0, 0, 89, 0, 0, 90, 0, 91, 92, 0, 93, 0, 94, 0, 0, 0, 95, 0, 96, 0, 97, 0, 0, 98, 0, 0, 99, 0, 100, 101, - 0, 102, 0, 103, 0, 0, 0, 104, 0, 105, 0, 106, 0, 0, 107, 0, 0, 108, 0, 109, 110, 0, 111, 0, 112, 0, 0, 0, 113, 114, 0, 115, - 0, 0, 116, 0, 0, 117, 0, 118, 119, 0, 120, 0, 121, 0, 0, 0, 122, 0, 123, 0, 124, 0, 0, 125, 0, 0, 126, 0, 127, 128, 0, 129, - 0, 130, 0, 0, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, 0, 135, 0, 136, 137, 0, 138, 0, 139, 0, 0, 0, 140, 0, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 149, 0, - 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, - 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 158, 0, 159, 0, 0, 160, 0, 0, 0, - 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 168, 0, 0, 0, 169, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 175, 0, 0, 0, 176, 0, 177, 0, 0, 178, 179, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, - 183, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 186, 0, 0, 187, 0, 0, 0, 0, 0, - 0, 188, 0, 0, 189, 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 195, 0, 0, - 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, - 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 210, 0, 0, - 0, 211, 0, 0, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 216, 217, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 0, - 220, 0, 221, 222, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 227, 0, 228, 0, 0, 229, 0, 230, - 0, 0, 231, 0, 232, 233, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 238, 0, 239, 240, 0, 241, 0, 0, - 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, - 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 254, 255, 0, 256, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, - 0, 259, 0, 260, 0, 261, 262, 0, 0, 0, 263, 0, 264, 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 268, 0, 0, 0, 269, 270, - 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 276, 0, 277, 0, 0, 0, 0, - 278, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 282, 283, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, - 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, - 301, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, - 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, 313, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 315, - 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, - 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, - 327, 0, 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 332, 0, 0, - 0, 0, 0, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0, 335, 0, 336, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 338, 0, 0, 339, 0, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 0, 0, 0, 0, 346, 0, 347, 0, 0, 0, 0, 0, - 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, - 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, - 0, 0, 361, 0, 0, 362, 0, 363, 0, 364, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 370, 0, - 0, 0, 371, 0, 372, 373, 0, 374, 0, 375, 0, 0, 376, 0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 380, 0, 0, 0, - 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 0, 386, 0, 0, 0, 0, 0, - 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, - 392, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, - 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 0, 0, 0, - 416, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, - 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 433, 0, 434, 435, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, - 0, 440, 0, 0, 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, - 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, - 0, 0, 0, 0, 456, 0, 0, 0, 457, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, - 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 465, 0, 0, 466, 0, 0, 0, 0, 0, - 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, - 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 0, 492, 0, 493, 0, 494, 0, 495, 0, 0, 496, 0, - 0, 0, 497, 0, 498, 0, 0, 0, 499, 0, 0, 500, 0, 501, 0, 0, 502, 0, 503, 504, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 507, 0, 0, 0, 0, 0, 0, 0, 508, 509, 0, 510, 0, 511, 512, 0, 513, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 516, 0, - 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, - 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 526, 0, 527, - 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 533, 0, 534, 535, 0, 536, 0, 0, 537, 0, 538, 539, 0, 540, 0, 0, 541, 0, 542, 543, 0, 544, 0, 0, 545, 0, 546, 547, 0, 548, 0, - 0, 0, 549, 0, 550, 551, 0, 552, 0, 0, 553, 0, 554, 555, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, - 564, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 566, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, - 0, 0, 574, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 0, 578, 0, 0, 579, 0, 0, 580, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, 589, 0, 0, - 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 595, 0, 596, 597, 0, 0, 598, 0, 599, 600, 0, 0, 601, 0, 602, 603, 0, 0, 604, 0, 605, - 606, 0, 0, 607, 0, 608, 609, 0, 0, 610, 0, 611, 612, 0, 0, 613, 0, 614, 615, 0, 0, 616, 0, 617, 618, 0, 0, 619, 0, 620, 621, 0, - 0, 622, 0, 623, 624, 0, 0, 625, 0, 626, 627, 0, 0, 628, 0, 629, 630, 0, 0, 631, 0, 632, 633, 0, 0, 634, 0, 635, 636, 0, 0, 637, - 0, 638, 639, 0, 0, 640, 0, 641, 642, 0, 0, 643, 0, 644, 645, 0, 0, 646, 0, 647, 648, 0, 0, 649, 0, 650, 651, 0, 0, 652, 0, 653, - 654, 0, 0, 655, 0, 656, 657, 0, 0, 658, 0, 659, 660, 0, 0, 661, 0, 662, 663, 0, 0, 664, 0, 665, 666, 0, 0, 667, 0, 668, 669, 0, - 0, 670, 0, 671, 672, 0, 0, 673, 0, 674, 675, 0, 0, 676, 0, 677, 678, 0, 0, 679, 0, 680, 681, 0, 0, 682, 0, 683, 684, 0, 0, 685, - 0, 686, 687, 0, 0, 688, 0, 689, 690, 0, 0, 691, 0, 692, 693, 0, 0, 694, 0, 695, 696, 0, 0, 697, 0, 698, 699, 0, 0, 700, 0, 701, - 702, 0, 0, 703, 0, 704, 705, 0, 0, 706, 0, 707, 708, 0, 0, 709, 0, 710, 711, 0, 0, 712, 0, 713, 714, 0, 0, 715, 0, 716, 717, 0, - 0, 718, 0, 719, 720, 0, 0, 721, 0, 722, 723, 0, 0, 724, 0, 725, 726, 0, 0, 727, 0, 728, 729, 0, 0, 730, 0, 731, 732, 0, 0, 733, - 0, 734, 735, 0, 0, 736, 0, 737, 738, 0, 0, 739, 0, 740, 741, 0, 0, 742, 0, 743, 744, 0, 0, 745, 0, 746, 747, 0, 0, 748, 0, 749, - 750, 0, 0, 751, 0, 752, 753, 0, 0, 754, 0, 755, 756, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, - 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 765, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 768, 0, 769, 0, 0, 770, 0, 0, 0, 0, 0, 771, 0, - 0, 0, 772, 0, 0, 0, 773, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 775, 0, 0, 776, 777, 0, 778, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 781, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 784, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 792, 0, 0, 0, 0, 793, 0, 0, 794, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 797, 0, 0, 0, 0, - 798, 0, 0, 799, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0004[64] = { + 0x0001004A05010821ull, 0x8088088044022011ull, 0x0000002008808808ull, 0x2208000180000440ull, + 0x2D69000544028042ull, 0x9244451292B168B4ull, 0xD254569245692456ull, 0xB49515A4B15A4A8Aull, + 0x00020000845692A2ull, 0x4224004048420A80ull, 0x0800842112A20010ull, 0x0802401004480080ull, + 0x0490000922232884ull, 0x3004080424801492ull, 0x2280089400000414ull, 0xA5A000AD241A4122ull, + 0x004028822D2804B4ull, 0x9016240548000020ull, 0x0A884802C480B46Aull, 0x410412AA00058889ull, + 0x4081010010004010ull, 0x0201600424010101ull, 0x0400400480806010ull, 0x0808448000040402ull, + 0x0001A05030020409ull, 0x050C002004004112ull, 0x0500010250000008ull, 0x1200900000040080ull, + 0x120452B4540912A4ull, 0x2200801204812048ull, 0x2009024090240901ull, 0x0240902409012280ull, + 0x4812048091004009ull, 0x0481234010048120ull, 0x2489122444084812ull, 0x0000000004000510ull, + 0x0000000000000000ull, 0x04C0008840000080ull, 0x0810090048024012ull, 0x8000044081101000ull, + 0x4AA5548004800000ull, 0x420AD602014D2914ull, 0x0000220840000008ull, 0x00210820A1042200ull, + 0x5A5A5A5A00000040ull, 0x082000000140B4B4ull, 0x0000010102040800ull, 0x0092492490091122ull, + 0x2442110000082000ull, 0xA69A681000002484ull, 0x9A69A69A69A69A69ull, 0x69A69A69A69A69A6ull, + 0xA69A69A69A69A69Aull, 0x9A69A69A69A69A69ull, 0x08041A69A69A69A6ull, 0x0900840004080008ull, + 0x0000014441290010ull, 0x00100014002012C8ull, 0x0100084004001042ull, 0x0000000000000000ull, + 0x0000000001121200ull, 0x0900000000000000ull, 0x0000000000000089ull, 0x0000000002000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0004[64] = { + 1u, 11u, 22u, 28u, 35u, 51u, 75u, 102u, 130u, 143u, 155u, 166u, 174u, 188u, 201u, 211u, + 231u, 247u, 259u, 278u, 294u, 301u, 311u, 319u, 327u, 338u, 348u, 355u, 361u, 381u, 392u, 404u, + 416u, 428u, 440u, 456u, 460u, 460u, 467u, 477u, 484u, 497u, 517u, 522u, 532u, 549u, 561u, 566u, + 582u, 590u, 606u, 638u, 670u, 702u, 734u, 759u, 766u, 775u, 784u, 791u, 791u, 796u, 798u, 801u, }; void recomp_unit_0004_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0004_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08814000u; - entry_id = (entry_delta < 16232u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0004[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16232u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0004[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0004[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08814000; @@ -974,9 +882,7 @@ LOCAL_DISPATCH: L_08814000: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(180))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814060; } @@ -986,9 +892,7 @@ L_08814014: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814060; } @@ -997,9 +901,7 @@ L_08814014: L_0881402C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(172))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814060; } @@ -1269,7 +1171,6 @@ L_08814294: } L_08814318: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[21] + static_cast(40)); if (branch_taken) { @@ -1346,7 +1247,6 @@ L_088143E4: AOT_REGCACHE_SYNC_OUT(); return; L_088143F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); if (branch_taken) { @@ -1357,9 +1257,7 @@ L_088143F4: L_08814404: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(188))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814444; } @@ -1379,7 +1277,6 @@ L_08814418: AOT_REGCACHE_SYNC_OUT(); return; L_0881443C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08814468; } @@ -1406,7 +1303,6 @@ L_08814468: AOT_REGCACHE_SYNC_OUT(); return; L_08814478: aot_gpr_31 = (0x08814480u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814480u) goto L_08814480; AOT_REGCACHE_SYNC_OUT(); return; L_08814480: @@ -1434,7 +1330,6 @@ L_08814488: L_088144C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088144D8; } @@ -1442,7 +1337,6 @@ L_088144C0: } L_088144CC: aot_gpr_31 = (0x088144D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088144D4u) goto L_088144D4; AOT_REGCACHE_SYNC_OUT(); return; L_088144D4: @@ -1450,7 +1344,6 @@ L_088144D4: goto L_088144D8; L_088144D8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088144EC; } @@ -1458,7 +1351,6 @@ L_088144D8: } L_088144E0: aot_gpr_31 = (0x088144E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088144E8u) goto L_088144E8; AOT_REGCACHE_SYNC_OUT(); return; L_088144E8: @@ -1482,7 +1374,6 @@ L_088144F4: } L_08814508: aot_gpr_31 = (0x08814510u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814510u) goto L_08814510; AOT_REGCACHE_SYNC_OUT(); return; L_08814510: @@ -1505,7 +1396,6 @@ L_0881451C: } L_0881452C: aot_gpr_31 = (0x08814534u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814534u) goto L_08814534; AOT_REGCACHE_SYNC_OUT(); return; L_08814534: @@ -1520,7 +1410,6 @@ L_08814540: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(16))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08814554; } @@ -1539,7 +1428,6 @@ L_08814554: } L_0881455C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814584; } @@ -1559,7 +1447,6 @@ L_08814570: AOT_REGCACHE_SYNC_OUT(); return; L_0881457C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088145C8; } @@ -1583,7 +1470,6 @@ L_08814590: AOT_REGCACHE_SYNC_OUT(); return; L_088145A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088145B8; } @@ -1613,7 +1499,6 @@ L_088145C8: L_088145D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814610; } @@ -1628,7 +1513,6 @@ L_088145E4: L_088145F0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08814608; } @@ -1661,7 +1545,6 @@ L_08814618: L_08814628: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814660; } @@ -1676,7 +1559,6 @@ L_08814634: L_08814640: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08814658; } @@ -1709,7 +1591,6 @@ L_08814668: L_08814678: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088146B0; } @@ -1724,7 +1605,6 @@ L_08814684: L_08814690: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088146A8; } @@ -1779,7 +1659,6 @@ L_088146D8: L_088146E4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088146FC; } @@ -1819,7 +1698,6 @@ L_0881471C: } L_08814724: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814758; } @@ -1834,7 +1712,6 @@ L_0881472C: L_08814738: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08814750; } @@ -1869,7 +1746,6 @@ L_08814770: goto L_08814774; L_08814774: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088147A8; } @@ -1884,7 +1760,6 @@ L_0881477C: L_08814788: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088147A0; } @@ -1939,7 +1814,6 @@ L_088147D0: L_088147DC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088147F4; } @@ -1971,7 +1845,6 @@ L_08814804: AOT_REGCACHE_SYNC_OUT(); return; L_08814814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08814868; } @@ -1979,7 +1852,6 @@ L_08814814: } L_0881481C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814850; } @@ -1994,7 +1866,6 @@ L_08814824: L_08814830: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08814848; } @@ -2057,7 +1928,17 @@ L_0881487C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088148C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); aot_gpr_5 = (aot_gpr_5 << 4u); @@ -2083,12 +1964,10 @@ L_088148C4: } L_0881491C: aot_gpr_31 = (0x08814924u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814924u) goto L_08814924; AOT_REGCACHE_SYNC_OUT(); return; L_08814924: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088150D8; } @@ -2119,7 +1998,6 @@ L_08814958: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088149D4; } @@ -2128,7 +2006,6 @@ L_08814958: L_0881496C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088149D4; } @@ -2165,9 +2042,7 @@ L_08814998: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088149D4; } @@ -2182,7 +2057,6 @@ L_088149D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088149F8; } @@ -2193,7 +2067,6 @@ L_088149E4: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088150D8; } @@ -2216,7 +2089,6 @@ L_088149F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08814A10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814A10u) goto L_08814A10; AOT_REGCACHE_SYNC_OUT(); return; L_08814A10: @@ -2268,12 +2140,10 @@ L_08814A44: } L_08814A54: aot_gpr_31 = (0x08814A5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814A5Cu) goto L_08814A5C; AOT_REGCACHE_SYNC_OUT(); return; L_08814A5C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08814B90; } @@ -2282,7 +2152,6 @@ L_08814A5C: L_08814A64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08814B4C; } @@ -2292,7 +2161,6 @@ L_08814A70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814B4C; } @@ -2301,7 +2169,6 @@ L_08814A70: L_08814A80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(6880))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_29 + static_cast(112)); if (branch_taken) { @@ -2312,9 +2179,7 @@ L_08814A80: L_08814A94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(6884))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814AEC; } @@ -2323,9 +2188,7 @@ L_08814A94: L_08814AA8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(6888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814AEC; } @@ -2466,7 +2329,6 @@ L_08814B1C: L_08814B4C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814B90; } @@ -2476,7 +2338,6 @@ L_08814B58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08814B90; } @@ -2562,7 +2423,6 @@ L_08814BEC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17194u << 16u); if (branch_taken) { @@ -2573,9 +2433,7 @@ L_08814BEC: L_08814C08: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814C2C; } @@ -2585,7 +2443,6 @@ L_08814C1C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(665))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08814C34; } @@ -2619,7 +2476,6 @@ L_08814C54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08814C80; } @@ -2627,9 +2483,7 @@ L_08814C54: } L_08814C64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814C80; } @@ -2638,7 +2492,6 @@ L_08814C64: L_08814C74: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088150D8; } @@ -2647,7 +2500,6 @@ L_08814C74: L_08814C80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(665))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814E90; } @@ -2679,7 +2531,6 @@ L_08814C8C: ctx.gpr[30] = (ctx.gpr[30] & 255u); ctx.gpr[20] = (ctx.gpr[20] >> 8u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[23] = (ctx.gpr[20] & 255u); if (branch_taken) { @@ -2710,9 +2561,7 @@ L_08814CE8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08814D1C; } @@ -2765,7 +2614,6 @@ L_08814D30: L_08814D5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08814E88; } @@ -2796,7 +2644,6 @@ L_08814D88: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08814DF0; } @@ -2822,7 +2669,6 @@ L_08814DC8: aot_gpr_6 = (aot_gpr_2 >> 8u); aot_gpr_4 = (aot_gpr_4 + ctx.gpr[7]); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08814DF4; } @@ -2836,7 +2682,6 @@ L_08814DF4: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 75 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814D74; } @@ -2844,7 +2689,6 @@ L_08814DF4: } L_08814E08: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08814E88; } @@ -2887,7 +2731,6 @@ L_08814E28: goto L_08814E88; L_08814E88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088150D8; } @@ -2896,7 +2739,6 @@ L_08814E88: L_08814E90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08814EAC; } @@ -2906,7 +2748,6 @@ L_08814E9C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(665))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08814EE4; } @@ -2929,7 +2770,6 @@ L_08814EAC: AOT_REGCACHE_SYNC_OUT(); return; L_08814EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088150D8; } @@ -2939,7 +2779,6 @@ L_08814EE4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(665))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08814F14; } @@ -2949,7 +2788,6 @@ L_08814EF4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(665))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08814F14; } @@ -2959,7 +2797,6 @@ L_08814F04: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(665))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088150B4; } @@ -2968,7 +2805,6 @@ L_08814F04: L_08814F14: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088150D8; } @@ -2992,7 +2828,6 @@ L_08814F38: goto L_08814F44; L_08814F44: aot_gpr_31 = (0x08814F4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814F4Cu) goto L_08814F4C; AOT_REGCACHE_SYNC_OUT(); return; L_08814F4C: @@ -3010,7 +2845,6 @@ L_08814F50: L_08814F68: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08815028; } @@ -3025,7 +2859,6 @@ L_08814F74: goto L_08814F80; L_08814F80: aot_gpr_31 = (0x08814F88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814F88u) goto L_08814F88; AOT_REGCACHE_SYNC_OUT(); return; L_08814F88: @@ -3061,7 +2894,6 @@ L_08814F9C: goto L_08814FD4; L_08814FD4: aot_gpr_31 = (0x08814FDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08814FDCu) goto L_08814FDC; AOT_REGCACHE_SYNC_OUT(); return; L_08814FDC: @@ -3075,7 +2907,6 @@ L_08814FE0: L_08814FE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08814FFC; } @@ -3083,7 +2914,6 @@ L_08814FE8: } L_08814FF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815028; } @@ -3098,7 +2928,6 @@ L_08814FFC: goto L_08815008; L_08815008: aot_gpr_31 = (0x08815010u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08815010u) goto L_08815010; AOT_REGCACHE_SYNC_OUT(); return; L_08815010: @@ -3112,7 +2941,6 @@ L_08815014: L_0881501C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(25))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815028; } @@ -3132,7 +2960,6 @@ L_08815028: AOT_REGCACHE_SYNC_OUT(); return; L_0881504C: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_088150AC; } @@ -3147,7 +2974,6 @@ L_08815054: goto L_08815060; L_08815060: aot_gpr_31 = (0x08815068u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08815068u) goto L_08815068; AOT_REGCACHE_SYNC_OUT(); return; L_08815068: @@ -3162,7 +2988,6 @@ L_08815074: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(16))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088150AC; } @@ -3186,7 +3011,6 @@ L_0881509C: AOT_REGCACHE_SYNC_OUT(); return; L_088150AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088150D8; } @@ -3226,7 +3050,17 @@ L_088150D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08815114: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(348), ctx.gpr[16]); @@ -3272,7 +3106,6 @@ L_08815178: } L_08815180: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08815340; } @@ -3292,7 +3125,6 @@ L_08815188: L_088151A8: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088151C8; } @@ -3302,7 +3134,6 @@ L_088151B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088151C8; } @@ -3313,7 +3144,6 @@ L_088151C4: goto L_088151C8; L_088151C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815340; } @@ -3333,7 +3163,6 @@ L_088151D0: L_088151F0: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08815230; } @@ -3346,7 +3175,6 @@ L_088151FC: AOT_REGCACHE_SYNC_OUT(); return; L_08815204: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08815214; } @@ -3367,7 +3195,6 @@ L_08815218: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08815234; } @@ -3386,7 +3213,6 @@ L_08815230: goto L_08815234; L_08815234: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815340; } @@ -3406,7 +3232,6 @@ L_0881523C: L_0881525C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0881527C; } @@ -3416,7 +3241,6 @@ L_08815268: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(476))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881527C; } @@ -3427,7 +3251,6 @@ L_08815278: goto L_0881527C; L_0881527C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815340; } @@ -3449,7 +3272,6 @@ L_08815284: L_088152AC: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08815340; } @@ -3474,7 +3296,6 @@ L_088152CC: AOT_REGCACHE_SYNC_OUT(); return; L_088152DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08815300; } @@ -3501,7 +3322,6 @@ L_088152EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881533C; } @@ -3549,7 +3369,6 @@ L_0881533C: goto L_08815340; L_08815340: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088154F8; } @@ -3596,7 +3415,6 @@ L_08815348: AOT_REGCACHE_SYNC_OUT(); return; L_08815384: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088154F8; } @@ -3604,12 +3422,10 @@ L_08815384: } L_0881538C: aot_gpr_31 = (0x08815394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08815394u) goto L_08815394; AOT_REGCACHE_SYNC_OUT(); return; L_08815394: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088154F8; } @@ -3617,7 +3433,6 @@ L_08815394: } L_0881539C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088154A0; } @@ -3626,7 +3441,6 @@ L_0881539C: L_088153A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088154A0; } @@ -3636,9 +3450,7 @@ L_088153B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(6880))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08815438; } @@ -3648,9 +3460,7 @@ L_088153C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(6884))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08815438; } @@ -3660,9 +3470,7 @@ L_088153E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(6888))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08815438; } @@ -3685,7 +3493,6 @@ L_088153F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08815410u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08815410u) goto L_08815410; AOT_REGCACHE_SYNC_OUT(); return; L_08815410: @@ -3817,7 +3624,6 @@ L_088154A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088154F8; } @@ -3841,7 +3647,6 @@ L_088154C0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088154DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088154DCu) goto L_088154DC; AOT_REGCACHE_SYNC_OUT(); return; L_088154DC: @@ -3875,7 +3680,6 @@ L_088154DC: AOT_REGCACHE_SYNC_OUT(); return; L_088154F8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08815B1C; } @@ -3925,7 +3729,6 @@ L_08815540: L_08815568: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088155B4; } @@ -3961,7 +3764,6 @@ L_088155B4: goto L_088155B8; L_088155B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815638; } @@ -4034,7 +3836,6 @@ L_0881565C: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08815704; } @@ -4043,7 +3844,6 @@ L_0881565C: L_0881567C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815704; } @@ -4084,9 +3884,7 @@ L_088156B8: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08815704; } @@ -4124,7 +3922,6 @@ L_08815728: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 224u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08815B1C; } @@ -4192,9 +3989,7 @@ L_088157CC: L_088157EC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881580C; } @@ -4203,7 +3998,6 @@ L_088157EC: L_08815800: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815B1C; } @@ -4216,7 +4010,6 @@ L_0881580C: aot_gpr_4 = (ctx.gpr[16] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(665))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08815A78; } @@ -4240,7 +4033,6 @@ L_08815828: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); aot_gpr_31 = (0x08815844u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08815844u) goto L_08815844; AOT_REGCACHE_SYNC_OUT(); return; L_08815844: @@ -4265,7 +4057,6 @@ L_08815844: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815874; } @@ -4279,9 +4070,7 @@ L_08815874: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = ctx.fpr[20] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08815898; } @@ -4300,9 +4089,7 @@ L_08815898: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = ctx.fpr[20] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088158BC; } @@ -4341,7 +4128,6 @@ L_088158C0: L_08815904: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815A70; } @@ -4414,7 +4200,6 @@ L_08815994: aot_gpr_6 = (aot_gpr_2 >> 8u); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_088159CC; } @@ -4428,7 +4213,6 @@ L_088159CC: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 75 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08815920; } @@ -4436,7 +4220,6 @@ L_088159CC: } L_088159E0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08815A70; } @@ -4483,7 +4266,6 @@ L_08815A0C: goto L_08815A70; L_08815A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815B1C; } @@ -4505,7 +4287,6 @@ L_08815A84: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(665))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08815AE8; } @@ -4532,7 +4313,6 @@ L_08815AA0: AOT_REGCACHE_SYNC_OUT(); return; L_08815AE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815B1C; } @@ -4572,7 +4352,17 @@ L_08815B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08815B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), std::bit_cast(ctx.fpr[26])); @@ -4613,7 +4403,6 @@ L_08815BBC: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -4641,7 +4430,6 @@ L_08815BF0: L_08815C08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08815C1C; } @@ -4649,7 +4437,6 @@ L_08815C08: } L_08815C14: aot_gpr_31 = (0x08815C1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08815C1Cu) goto L_08815C1C; AOT_REGCACHE_SYNC_OUT(); return; L_08815C1C: @@ -4670,7 +4457,6 @@ L_08815C30: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08815F1C; } @@ -4679,7 +4465,6 @@ L_08815C30: L_08815C40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(6851))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815C68; } @@ -4692,7 +4477,6 @@ L_08815C4C: aot_gpr_4 = (ctx.hi); aot_gpr_4 = (aot_gpr_4 < static_cast(351) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08815F1C; } @@ -4708,7 +4492,6 @@ L_08815C68: } L_08815C70: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_08815F1C; } @@ -4745,7 +4528,6 @@ L_08815C94: } L_08815C9C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08815F1C; } @@ -4754,7 +4536,6 @@ L_08815C9C: L_08815CA4: aot_gpr_4 = (ctx.gpr[17] < static_cast(1) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088161A0; } @@ -4762,7 +4543,6 @@ L_08815CA4: } L_08815CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088161A4; } @@ -5025,7 +4805,6 @@ L_08815EF4: AOT_REGCACHE_SYNC_OUT(); return; L_08815F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08816328; } @@ -5298,7 +5077,6 @@ L_08816170: AOT_REGCACHE_SYNC_OUT(); return; L_08816198: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815F1C; } @@ -5486,7 +5264,6 @@ L_08816310: AOT_REGCACHE_SYNC_OUT(); return; L_08816320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08815F1C; } @@ -5515,7 +5292,17 @@ L_08816328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08816368: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_gpr_4 = (16217u << 16u); @@ -5957,7 +5744,17 @@ L_08816368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881651C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[16]); @@ -5982,7 +5779,6 @@ L_0881651C: L_08816578: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -6040,7 +5836,17 @@ L_088165E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08816604: aot_fpr_12 = ctx.fpr[24] - aot_fpr_12; { const bool branch_taken = 0u == 0u; @@ -6143,7 +5949,6 @@ L_088166D0: aot_gpr_4 = (ctx.hi); aot_gpr_4 = (aot_gpr_4 < static_cast(351) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088167A8; } @@ -6242,7 +6047,17 @@ L_088167A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088167FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(344), ctx.gpr[18]); @@ -6296,7 +6111,6 @@ L_08816868: L_0881689C: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088168B8; } @@ -6312,7 +6126,6 @@ L_088168A8: } L_088168B0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088168C0; } @@ -6333,7 +6146,6 @@ L_088168C0: L_088168C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6904))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088168F8; } @@ -6346,7 +6158,6 @@ L_088168D4: AOT_REGCACHE_SYNC_OUT(); return; L_088168DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088168F8; } @@ -6360,7 +6171,6 @@ L_088168E4: L_088168EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088169A8; } @@ -6370,7 +6180,6 @@ L_088168F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(6904))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08816960; } @@ -6385,7 +6194,6 @@ L_08816910: ctx.gpr[20] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08816960; } @@ -6394,7 +6202,6 @@ L_08816910: L_08816920: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08816960; } @@ -6402,7 +6209,6 @@ L_08816920: } L_0881692C: aot_gpr_31 = (0x08816934u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 229u, 0x08B21310u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816934u) goto L_08816934; AOT_REGCACHE_SYNC_OUT(); return; L_08816934: @@ -6414,7 +6220,6 @@ L_08816934: goto L_08816940; L_08816940: aot_gpr_31 = (0x08816948u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816948u) goto L_08816948; AOT_REGCACHE_SYNC_OUT(); return; L_08816948: @@ -6458,7 +6263,6 @@ L_088169A4: goto L_088169A8; L_088169A8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088169BC; } @@ -6474,7 +6278,6 @@ L_088169B8: goto L_088169BC; L_088169BC: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088169CC; } @@ -6482,7 +6285,6 @@ L_088169BC: } L_088169C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08816BD4; } @@ -6639,7 +6441,6 @@ L_08816B60: AOT_REGCACHE_SYNC_OUT(); return; L_08816B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08816BC0; } @@ -6703,7 +6504,17 @@ L_08816BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08816C18: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), ctx.gpr[16]); @@ -6731,7 +6542,6 @@ L_08816C18: } L_08816C84: aot_gpr_31 = (0x08816C8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816C8Cu) goto L_08816C8C; AOT_REGCACHE_SYNC_OUT(); return; L_08816C8C: @@ -6739,7 +6549,6 @@ L_08816C8C: goto L_08816C90; L_08816C90: aot_gpr_31 = (0x08816C98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 558u, 0x089BAA88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816C98u) goto L_08816C98; AOT_REGCACHE_SYNC_OUT(); return; L_08816C98: @@ -6753,7 +6562,6 @@ L_08816C98: } L_08816CA4: aot_gpr_31 = (0x08816CACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816CACu) goto L_08816CAC; AOT_REGCACHE_SYNC_OUT(); return; L_08816CAC: @@ -6761,7 +6569,6 @@ L_08816CAC: goto L_08816CB0; L_08816CB0: aot_gpr_31 = (0x08816CB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 561u, 0x089BAAA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816CB8u) goto L_08816CB8; AOT_REGCACHE_SYNC_OUT(); return; L_08816CB8: @@ -6775,7 +6582,6 @@ L_08816CB8: } L_08816CC4: aot_gpr_31 = (0x08816CCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816CCCu) goto L_08816CCC; AOT_REGCACHE_SYNC_OUT(); return; L_08816CCC: @@ -6783,7 +6589,6 @@ L_08816CCC: goto L_08816CD0; L_08816CD0: aot_gpr_31 = (0x08816CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 558u, 0x089BAA88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816CD8u) goto L_08816CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08816CD8: @@ -6797,7 +6602,6 @@ L_08816CD8: } L_08816CE4: aot_gpr_31 = (0x08816CECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816CECu) goto L_08816CEC; AOT_REGCACHE_SYNC_OUT(); return; L_08816CEC: @@ -6805,7 +6609,6 @@ L_08816CEC: goto L_08816CF0; L_08816CF0: aot_gpr_31 = (0x08816CF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 565u, 0x089BAAD0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816CF8u) goto L_08816CF8; AOT_REGCACHE_SYNC_OUT(); return; L_08816CF8: @@ -6820,7 +6623,6 @@ L_08816CF8: } L_08816D08: aot_gpr_31 = (0x08816D10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816D10u) goto L_08816D10; AOT_REGCACHE_SYNC_OUT(); return; L_08816D10: @@ -6828,7 +6630,6 @@ L_08816D10: goto L_08816D14; L_08816D14: aot_gpr_31 = (0x08816D1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 561u, 0x089BAAA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816D1Cu) goto L_08816D1C; AOT_REGCACHE_SYNC_OUT(); return; L_08816D1C: @@ -6842,7 +6643,6 @@ L_08816D1C: } L_08816D28: aot_gpr_31 = (0x08816D30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816D30u) goto L_08816D30; AOT_REGCACHE_SYNC_OUT(); return; L_08816D30: @@ -6850,7 +6650,6 @@ L_08816D30: goto L_08816D34; L_08816D34: aot_gpr_31 = (0x08816D3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 569u, 0x089BAAFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08816D3Cu) goto L_08816D3C; AOT_REGCACHE_SYNC_OUT(); return; L_08816D3C: @@ -6922,7 +6721,6 @@ L_08816DEC: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(36), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08816E2C; @@ -6933,7 +6731,6 @@ L_08816E2C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08816E48; @@ -6944,7 +6741,6 @@ L_08816E48: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[20])); ctx.fpr[26] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_08816E64; @@ -6955,7 +6751,6 @@ L_08816E64: aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08816E80; @@ -6998,9 +6793,7 @@ L_08816EA0: aot_fpr_14 = std::bit_cast(ctx.fpu_float_to_word_ct<3u>(ctx.fpr[19])); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[2]) || std::isnan(aot_fpr_12)) && ctx.fpr[2] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08816F20; } @@ -7008,9 +6801,7 @@ L_08816EA0: } L_08816F04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08816F20; } @@ -7023,9 +6814,7 @@ L_08816F14: goto L_08816F20; L_08816F20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_13)) && aot_fpr_14 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08816F4C; } @@ -7033,9 +6822,7 @@ L_08816F20: } L_08816F30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08816F4C; } @@ -7199,7 +6986,6 @@ L_088170D8: L_088170E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08817108; } @@ -7263,7 +7049,17 @@ L_08817134: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08817190: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); @@ -7279,7 +7075,6 @@ L_08817190: } L_088171AC: aot_gpr_31 = (0x088171B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088171B4u) goto L_088171B4; AOT_REGCACHE_SYNC_OUT(); return; L_088171B4: @@ -7296,7 +7091,6 @@ L_088171B8: } L_088171C4: aot_gpr_31 = (0x088171CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088171CCu) goto L_088171CC; AOT_REGCACHE_SYNC_OUT(); return; L_088171CC: @@ -7313,7 +7107,6 @@ L_088171D0: } L_088171DC: aot_gpr_31 = (0x088171E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088171E4u) goto L_088171E4; AOT_REGCACHE_SYNC_OUT(); return; L_088171E4: @@ -7330,7 +7123,6 @@ L_088171E8: } L_088171F4: aot_gpr_31 = (0x088171FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088171FCu) goto L_088171FC; AOT_REGCACHE_SYNC_OUT(); return; L_088171FC: @@ -7347,7 +7139,6 @@ L_08817200: } L_0881720C: aot_gpr_31 = (0x08817214u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817214u) goto L_08817214; AOT_REGCACHE_SYNC_OUT(); return; L_08817214: @@ -7364,7 +7155,6 @@ L_08817218: } L_08817224: aot_gpr_31 = (0x0881722Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881722Cu) goto L_0881722C; AOT_REGCACHE_SYNC_OUT(); return; L_0881722C: @@ -7381,7 +7171,6 @@ L_08817230: } L_0881723C: aot_gpr_31 = (0x08817244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817244u) goto L_08817244; AOT_REGCACHE_SYNC_OUT(); return; L_08817244: @@ -7398,7 +7187,6 @@ L_08817248: } L_08817254: aot_gpr_31 = (0x0881725Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881725Cu) goto L_0881725C; AOT_REGCACHE_SYNC_OUT(); return; L_0881725C: @@ -7415,7 +7203,6 @@ L_08817260: } L_0881726C: aot_gpr_31 = (0x08817274u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817274u) goto L_08817274; AOT_REGCACHE_SYNC_OUT(); return; L_08817274: @@ -7432,7 +7219,6 @@ L_08817278: } L_08817284: aot_gpr_31 = (0x0881728Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881728Cu) goto L_0881728C; AOT_REGCACHE_SYNC_OUT(); return; L_0881728C: @@ -7449,7 +7235,6 @@ L_08817290: } L_0881729C: aot_gpr_31 = (0x088172A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088172A4u) goto L_088172A4; AOT_REGCACHE_SYNC_OUT(); return; L_088172A4: @@ -7466,7 +7251,6 @@ L_088172A8: } L_088172B4: aot_gpr_31 = (0x088172BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088172BCu) goto L_088172BC; AOT_REGCACHE_SYNC_OUT(); return; L_088172BC: @@ -7483,7 +7267,6 @@ L_088172C0: } L_088172CC: aot_gpr_31 = (0x088172D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088172D4u) goto L_088172D4; AOT_REGCACHE_SYNC_OUT(); return; L_088172D4: @@ -7500,7 +7283,6 @@ L_088172D8: } L_088172E4: aot_gpr_31 = (0x088172ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088172ECu) goto L_088172EC; AOT_REGCACHE_SYNC_OUT(); return; L_088172EC: @@ -7517,7 +7299,6 @@ L_088172F0: } L_088172FC: aot_gpr_31 = (0x08817304u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817304u) goto L_08817304; AOT_REGCACHE_SYNC_OUT(); return; L_08817304: @@ -7534,7 +7315,6 @@ L_08817308: } L_08817314: aot_gpr_31 = (0x0881731Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881731Cu) goto L_0881731C; AOT_REGCACHE_SYNC_OUT(); return; L_0881731C: @@ -7551,7 +7331,6 @@ L_08817320: } L_0881732C: aot_gpr_31 = (0x08817334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817334u) goto L_08817334; AOT_REGCACHE_SYNC_OUT(); return; L_08817334: @@ -7568,7 +7347,6 @@ L_08817338: } L_08817344: aot_gpr_31 = (0x0881734Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881734Cu) goto L_0881734C; AOT_REGCACHE_SYNC_OUT(); return; L_0881734C: @@ -7585,7 +7363,6 @@ L_08817350: } L_0881735C: aot_gpr_31 = (0x08817364u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817364u) goto L_08817364; AOT_REGCACHE_SYNC_OUT(); return; L_08817364: @@ -7602,7 +7379,6 @@ L_08817368: } L_08817374: aot_gpr_31 = (0x0881737Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881737Cu) goto L_0881737C; AOT_REGCACHE_SYNC_OUT(); return; L_0881737C: @@ -7619,7 +7395,6 @@ L_08817380: } L_0881738C: aot_gpr_31 = (0x08817394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817394u) goto L_08817394; AOT_REGCACHE_SYNC_OUT(); return; L_08817394: @@ -7636,7 +7411,6 @@ L_08817398: } L_088173A4: aot_gpr_31 = (0x088173ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088173ACu) goto L_088173AC; AOT_REGCACHE_SYNC_OUT(); return; L_088173AC: @@ -7653,7 +7427,6 @@ L_088173B0: } L_088173BC: aot_gpr_31 = (0x088173C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088173C4u) goto L_088173C4; AOT_REGCACHE_SYNC_OUT(); return; L_088173C4: @@ -7670,7 +7443,6 @@ L_088173C8: } L_088173D4: aot_gpr_31 = (0x088173DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088173DCu) goto L_088173DC; AOT_REGCACHE_SYNC_OUT(); return; L_088173DC: @@ -7687,7 +7459,6 @@ L_088173E0: } L_088173EC: aot_gpr_31 = (0x088173F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088173F4u) goto L_088173F4; AOT_REGCACHE_SYNC_OUT(); return; L_088173F4: @@ -7704,7 +7475,6 @@ L_088173F8: } L_08817404: aot_gpr_31 = (0x0881740Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881740Cu) goto L_0881740C; AOT_REGCACHE_SYNC_OUT(); return; L_0881740C: @@ -7721,7 +7491,6 @@ L_08817410: } L_0881741C: aot_gpr_31 = (0x08817424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817424u) goto L_08817424; AOT_REGCACHE_SYNC_OUT(); return; L_08817424: @@ -7738,7 +7507,6 @@ L_08817428: } L_08817434: aot_gpr_31 = (0x0881743Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881743Cu) goto L_0881743C; AOT_REGCACHE_SYNC_OUT(); return; L_0881743C: @@ -7755,7 +7523,6 @@ L_08817440: } L_0881744C: aot_gpr_31 = (0x08817454u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817454u) goto L_08817454; AOT_REGCACHE_SYNC_OUT(); return; L_08817454: @@ -7772,7 +7539,6 @@ L_08817458: } L_08817464: aot_gpr_31 = (0x0881746Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881746Cu) goto L_0881746C; AOT_REGCACHE_SYNC_OUT(); return; L_0881746C: @@ -7789,7 +7555,6 @@ L_08817470: } L_0881747C: aot_gpr_31 = (0x08817484u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817484u) goto L_08817484; AOT_REGCACHE_SYNC_OUT(); return; L_08817484: @@ -7806,7 +7571,6 @@ L_08817488: } L_08817494: aot_gpr_31 = (0x0881749Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881749Cu) goto L_0881749C; AOT_REGCACHE_SYNC_OUT(); return; L_0881749C: @@ -7823,7 +7587,6 @@ L_088174A0: } L_088174AC: aot_gpr_31 = (0x088174B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088174B4u) goto L_088174B4; AOT_REGCACHE_SYNC_OUT(); return; L_088174B4: @@ -7840,7 +7603,6 @@ L_088174B8: } L_088174C4: aot_gpr_31 = (0x088174CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088174CCu) goto L_088174CC; AOT_REGCACHE_SYNC_OUT(); return; L_088174CC: @@ -7857,7 +7619,6 @@ L_088174D0: } L_088174DC: aot_gpr_31 = (0x088174E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088174E4u) goto L_088174E4; AOT_REGCACHE_SYNC_OUT(); return; L_088174E4: @@ -7874,7 +7635,6 @@ L_088174E8: } L_088174F4: aot_gpr_31 = (0x088174FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088174FCu) goto L_088174FC; AOT_REGCACHE_SYNC_OUT(); return; L_088174FC: @@ -7891,7 +7651,6 @@ L_08817500: } L_0881750C: aot_gpr_31 = (0x08817514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817514u) goto L_08817514; AOT_REGCACHE_SYNC_OUT(); return; L_08817514: @@ -7908,7 +7667,6 @@ L_08817518: } L_08817524: aot_gpr_31 = (0x0881752Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881752Cu) goto L_0881752C; AOT_REGCACHE_SYNC_OUT(); return; L_0881752C: @@ -7925,7 +7683,6 @@ L_08817530: } L_0881753C: aot_gpr_31 = (0x08817544u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817544u) goto L_08817544; AOT_REGCACHE_SYNC_OUT(); return; L_08817544: @@ -7942,7 +7699,6 @@ L_08817548: } L_08817554: aot_gpr_31 = (0x0881755Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881755Cu) goto L_0881755C; AOT_REGCACHE_SYNC_OUT(); return; L_0881755C: @@ -7959,7 +7715,6 @@ L_08817560: } L_0881756C: aot_gpr_31 = (0x08817574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817574u) goto L_08817574; AOT_REGCACHE_SYNC_OUT(); return; L_08817574: @@ -7976,7 +7731,6 @@ L_08817578: } L_08817584: aot_gpr_31 = (0x0881758Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881758Cu) goto L_0881758C; AOT_REGCACHE_SYNC_OUT(); return; L_0881758C: @@ -7993,7 +7747,6 @@ L_08817590: } L_0881759C: aot_gpr_31 = (0x088175A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088175A4u) goto L_088175A4; AOT_REGCACHE_SYNC_OUT(); return; L_088175A4: @@ -8010,7 +7763,6 @@ L_088175A8: } L_088175B4: aot_gpr_31 = (0x088175BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088175BCu) goto L_088175BC; AOT_REGCACHE_SYNC_OUT(); return; L_088175BC: @@ -8027,7 +7779,6 @@ L_088175C0: } L_088175CC: aot_gpr_31 = (0x088175D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088175D4u) goto L_088175D4; AOT_REGCACHE_SYNC_OUT(); return; L_088175D4: @@ -8044,7 +7795,6 @@ L_088175D8: } L_088175E4: aot_gpr_31 = (0x088175ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088175ECu) goto L_088175EC; AOT_REGCACHE_SYNC_OUT(); return; L_088175EC: @@ -8061,7 +7811,6 @@ L_088175F0: } L_088175FC: aot_gpr_31 = (0x08817604u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817604u) goto L_08817604; AOT_REGCACHE_SYNC_OUT(); return; L_08817604: @@ -8078,7 +7827,6 @@ L_08817608: } L_08817614: aot_gpr_31 = (0x0881761Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881761Cu) goto L_0881761C; AOT_REGCACHE_SYNC_OUT(); return; L_0881761C: @@ -8095,7 +7843,6 @@ L_08817620: } L_0881762C: aot_gpr_31 = (0x08817634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817634u) goto L_08817634; AOT_REGCACHE_SYNC_OUT(); return; L_08817634: @@ -8112,7 +7859,6 @@ L_08817638: } L_08817644: aot_gpr_31 = (0x0881764Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881764Cu) goto L_0881764C; AOT_REGCACHE_SYNC_OUT(); return; L_0881764C: @@ -8129,7 +7875,6 @@ L_08817650: } L_0881765C: aot_gpr_31 = (0x08817664u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817664u) goto L_08817664; AOT_REGCACHE_SYNC_OUT(); return; L_08817664: @@ -8146,7 +7891,6 @@ L_08817668: } L_08817674: aot_gpr_31 = (0x0881767Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881767Cu) goto L_0881767C; AOT_REGCACHE_SYNC_OUT(); return; L_0881767C: @@ -8163,7 +7907,6 @@ L_08817680: } L_0881768C: aot_gpr_31 = (0x08817694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08817694u) goto L_08817694; AOT_REGCACHE_SYNC_OUT(); return; L_08817694: @@ -8180,7 +7923,6 @@ L_08817698: } L_088176A4: aot_gpr_31 = (0x088176ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088176ACu) goto L_088176AC; AOT_REGCACHE_SYNC_OUT(); return; L_088176AC: @@ -8196,7 +7938,17 @@ L_088176B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088176C8: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -8216,7 +7968,6 @@ L_088176EC: ctx.gpr[9] = (aot_gpr_5 + static_cast(17)); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0881774C; } @@ -8251,7 +8002,6 @@ L_0881774C: ctx.gpr[9] = (aot_gpr_5 + static_cast(16)); ctx.gpr[9] = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088177A8; } @@ -8284,7 +8034,6 @@ L_088177A8: aot_gpr_6 = (aot_gpr_6 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_6) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088176EC; } @@ -8342,7 +8091,6 @@ L_08817840: goto L_0881784C; L_0881784C: { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08817860; } @@ -8391,7 +8139,17 @@ L_08817898: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088178A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[19]); @@ -8419,7 +8177,6 @@ L_088178A0: L_0881790C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(301))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08817930; } @@ -8570,7 +8327,17 @@ L_08817A68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08817A98: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -8580,7 +8347,17 @@ L_08817A98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08817AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[18]); @@ -8691,7 +8468,6 @@ L_08817C24: L_08817C30: { const float fs = aot_fpr_12; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_08817C50; @@ -8822,7 +8598,6 @@ L_08817DE0: L_08817DEC: { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[20] - aot_fpr_13; goto L_08817E0C; @@ -8932,7 +8707,17 @@ L_08817E1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08817F64: ctx.gpr[8] = (17664u << 16u); aot_fpr_14 = std::bit_cast(ctx.gpr[8]); diff --git a/profiles/vcs/generated/generated_unit_0005.cpp b/profiles/vcs/generated/generated_unit_0005.cpp index f85cc32..c175f25 100644 --- a/profiles/vcs/generated/generated_unit_0005.cpp +++ b/profiles/vcs/generated/generated_unit_0005.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0005[4055] = { - 1, 0, 0, 2, 3, 0, 0, 4, 5, 0, 6, 7, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 14, - 15, 0, 0, 16, 17, 0, 18, 19, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, 36, - 37, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 49, 50, 0, - 51, 0, 52, 53, 0, 54, 0, 55, 56, 0, 57, 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, - 0, 0, 66, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, - 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 75, 0, 0, 76, 0, 77, 0, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, - 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, - 89, 0, 90, 0, 0, 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 101, 0, 102, 0, 103, 0, 0, 0, 104, 105, - 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 109, 0, 110, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 115, 0, 116, 0, 0, 117, 0, 0, 118, 0, 119, 0, 120, 0, - 121, 0, 0, 122, 0, 123, 0, 124, 0, 125, 0, 0, 0, 126, 0, 127, 0, 0, 128, 0, 129, 0, 0, 130, 0, 0, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, - 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 137, 0, 0, 138, 0, 139, 0, 140, 0, 141, 0, 0, 142, 0, 0, 0, 0, 143, 0, 0, 144, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, - 0, 0, 147, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 150, 0, 0, 151, 0, 0, 152, 0, 153, 0, 154, 0, 0, 0, 0, 155, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 163, 0, 0, 164, 0, - 0, 165, 0, 166, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, - 0, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 176, 0, 0, 177, 0, 178, 0, 179, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 182, 0, 0, - 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 186, 0, 0, - 0, 0, 0, 0, 187, 0, 188, 0, 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, - 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 202, 0, 0, 203, 0, 204, - 0, 205, 0, 206, 0, 0, 207, 0, 0, 0, 0, 208, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, - 0, 215, 0, 216, 0, 217, 0, 0, 218, 0, 219, 0, 220, 0, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 228, 0, 0, 229, 0, - 230, 0, 231, 0, 232, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, - 0, 237, 0, 0, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 243, - 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, 0, 0, 0, 0, 0, 0, 247, 0, 0, 248, 0, 249, 0, 0, 250, 251, 0, 252, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 0, 0, 261, 0, 262, 0, 263, 0, - 0, 0, 264, 0, 265, 0, 0, 0, 266, 0, 267, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 0, - 0, 273, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 281, 0, 282, 0, - 283, 0, 284, 0, 285, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, - 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, 292, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, - 296, 0, 297, 0, 0, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 302, 0, 0, 0, 303, 0, 304, 0, 0, - 305, 0, 0, 0, 0, 306, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 311, 0, 0, 0, 0, 0, - 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 314, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 0, 0, 319, 0, - 320, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 0, 0, 0, - 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 341, 0, - 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 345, 0, 346, 0, 0, 0, 0, 347, 0, 348, 0, - 349, 0, 0, 350, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, - 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 360, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 362, 363, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, - 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, - 371, 0, 372, 0, 0, 0, 373, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 377, - 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 380, 0, 381, 382, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, - 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, - 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, - 0, 401, 0, 402, 0, 0, 0, 0, 0, 403, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, - 415, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, 0, 0, 0, - 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 0, 423, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 431, - 432, 0, 0, 0, 433, 0, 0, 0, 434, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 439, 0, 0, 440, 441, 0, 0, 0, 0, 0, 0, 0, 442, 443, 0, - 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, - 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 450, - 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 458, - 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 465, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 472, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 480, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 487, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, - 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 0, 0, 510, 0, 0, 511, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 521, 522, 523, 0, - 524, 525, 526, 0, 527, 528, 529, 0, 530, 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, - 0, 535, 0, 0, 536, 0, 537, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 541, 0, 542, 543, 0, 0, 0, - 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 0, 550, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 553, 0, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, 559, 560, - 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 565, - 0, 566, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 571, 572, 0, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, - 0, 575, 0, 0, 0, 576, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 580, 0, 0, 581, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 584, 0, 0, 585, 0, 0, 0, 0, 586, 0, 587, 0, 0, 588, 0, 0, - 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 592, 593, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 0, 0, - 0, 0, 602, 0, 0, 603, 0, 0, 604, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 611, 0, 612, 0, 0, 0, 0, - 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 0, 617, 0, 618, 0, 0, 619, 620, 0, 621, 0, 0, 622, 623, 0, 624, 0, 0, 625, 626, 0, 627, 0, 0, 628, 629, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, - 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 0, 0, 639, - 0, 0, 0, 0, 0, 0, 640, 641, 642, 0, 643, 0, 0, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 646, 647, 648, 0, 649, - 0, 0, 0, 650, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 652, 653, 654, 0, 655, 0, 0, 0, 656, 0, 0, 0, 0, 0, 657, 0, - 0, 0, 0, 0, 0, 658, 659, 660, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 664, 665, 666, 0, 667, 0, - 0, 0, 668, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 670, 671, 672, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 0, 676, 677, 678, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 682, 683, 684, 0, 685, 0, 0, - 686, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 692, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 695, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 698, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0005[64] = { + 0x0000000000014D99ull, 0xA800000000041000ull, 0x0000000000000CD9ull, 0x1000900C00005000ull, + 0x0000400008008000ull, 0x0000000D98010001ull, 0x6A05028000400022ull, 0x04010000000035ADull, + 0x2040082440040101ull, 0x44002080152A0042ull, 0x0444042590140202ull, 0x002D1202C5488901ull, + 0x0494A2A954940840ull, 0x484AA4A044000100ull, 0x2152520440001000ull, 0x4A40880000800240ull, + 0x880000200048022Aull, 0x2800800120954940ull, 0x01002440C0041250ull, 0x8002484AA4A04400ull, + 0x1202552A40840000ull, 0x0800825548180080ull, 0x2CA40C0484808032ull, 0x0A41151454555280ull, + 0x522040204000040Aull, 0x4000548808088115ull, 0x0601122128921045ull, 0x0122100545402842ull, + 0x522022240AA91020ull, 0x8020012950A50001ull, 0x0430400088110202ull, 0x8402014504440112ull, + 0xA028205028168240ull, 0x0504802048000400ull, 0x20502A0010288A0Aull, 0x004148140A200105ull, + 0x0020031184000288ull, 0x2000440260320804ull, 0xA804950080400040ull, 0x8020800001004004ull, + 0x2154808200000000ull, 0x8484808200000080ull, 0x0000020001222200ull, 0x0000000000000000ull, + 0x2409024090240902ull, 0x0000000020480000ull, 0x0102000108008000ull, 0x70AAAA8024480000ull, + 0x1A40285242040377ull, 0x8000080092004811ull, 0x91010080D2081210ull, 0x00012122028C9026ull, + 0x2146481025091224ull, 0x000823240A050080ull, 0x102000820A104100ull, 0x01082000232CB2CAull, + 0xB81045C082242002ull, 0x5C0822E041170208ull, 0x2E041170208B8104ull, 0x0000000000000081ull, + 0x2400000000000484ull, 0x0001200000000000ull, 0x0000000900000000ull, 0x0000000000480000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0005[64] = { + 1u, 10u, 15u, 22u, 29u, 32u, 40u, 51u, 62u, 71u, 83u, 96u, 113u, 132u, 145u, 156u, + 165u, 174u, 187u, 198u, 212u, 225u, 237u, 253u, 273u, 283u, 296u, 312u, 326u, 342u, 355u, 365u, + 378u, 393u, 401u, 415u, 427u, 437u, 448u, 459u, 465u, 473u, 481u, 487u, 487u, 500u, 503u, 508u, + 524u, 544u, 553u, 566u, 580u, 597u, 608u, 617u, 634u, 650u, 668u, 686u, 688u, 693u, 695u, 697u, }; void recomp_unit_0005_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0005_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08818000u; - entry_id = (entry_delta < 16220u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0005[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16220u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0005[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0005[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08818000; @@ -883,7 +791,6 @@ L_0881800C: L_08818010: ctx.gpr[2] = (static_cast(ctx.gpr[10]) < 17 ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08818020; } @@ -894,7 +801,6 @@ L_0881801C: goto L_08818020; L_08818020: { const bool branch_taken = static_cast(ctx.gpr[9]) >= 0; - // nop if (branch_taken) { goto L_0881802C; } @@ -978,12 +884,21 @@ L_08818040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818130: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7760))); ctx.fpr[0] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[0])) && aot_fpr_14 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (17664u << 16u); if (branch_taken) { @@ -1040,7 +955,6 @@ L_08818148: } L_088181EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08818200; } @@ -1048,7 +962,6 @@ L_088181EC: } L_088181F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08818330; } @@ -1060,7 +973,6 @@ L_088181FC: L_08818200: ctx.gpr[9] = (static_cast(ctx.gpr[7]) < 17 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08818210; } @@ -1071,7 +983,6 @@ L_0881820C: goto L_08818210; L_08818210: { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_0881821C; } @@ -1083,7 +994,6 @@ L_08818218: L_0881821C: ctx.gpr[9] = (static_cast(aot_gpr_5) < 17 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_0881822C; } @@ -1161,11 +1071,20 @@ L_0881822C: goto L_08818330; L_08818330: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818338: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24256))); @@ -1370,7 +1289,6 @@ L_0881857C: goto L_08818580; L_08818580: { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_0881858C; } @@ -1410,7 +1328,6 @@ L_0881858C: ctx.gpr[8] = (ctx.gpr[8] + static_cast(1)); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 17 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08818570; } @@ -1487,7 +1404,6 @@ L_088186A4: } L_088186C0: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088186E4; } @@ -1508,7 +1424,6 @@ L_088186C8: } L_088186E4: { const bool branch_taken = ctx.gpr[3] != 0u; - // nop if (branch_taken) { goto L_088186F4; } @@ -1527,7 +1442,6 @@ L_088186F4: goto L_088186F8; L_088186F8: { const bool branch_taken = ctx.gpr[3] != aot_gpr_5; - // nop if (branch_taken) { goto L_08818708; } @@ -1546,7 +1460,6 @@ L_08818708: goto L_0881870C; L_0881870C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0881871C; } @@ -1565,7 +1478,6 @@ L_0881871C: goto L_08818720; L_08818720: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08818730; } @@ -1691,7 +1603,17 @@ L_08818800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818820: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(25)))))); @@ -1705,7 +1627,17 @@ L_08818820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818848: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1763,7 +1695,17 @@ L_088188AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088188D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5976))); @@ -1792,7 +1734,17 @@ L_08818904: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818918: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -1807,7 +1759,6 @@ L_08818918: goto L_08818B84; L_08818944: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08818968; } @@ -1868,7 +1819,17 @@ L_0881899C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088189B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1882,7 +1843,6 @@ L_088189B4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818A04; } @@ -1897,7 +1857,6 @@ L_088189E8: L_088189F8: aot_gpr_4 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088189E8; } @@ -1918,7 +1877,17 @@ L_08818A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -1932,7 +1901,6 @@ L_08818A24: goto L_08818B84; L_08818A48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08818A94; } @@ -1985,7 +1953,17 @@ L_08818A94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818AA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -2005,7 +1983,6 @@ L_08818AD8: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08818AC8; } @@ -2024,7 +2001,17 @@ L_08818AE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818B00: ctx.gpr[7] = (aot_gpr_5 << 5u); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -2033,7 +2020,6 @@ L_08818B00: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08818B4C; } @@ -2042,7 +2028,6 @@ L_08818B00: L_08818B20: ctx.gpr[7] = (aot_gpr_6 + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08818B3C; } @@ -2079,7 +2064,6 @@ L_08818B4C: } L_08818B58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818B78; } @@ -2087,7 +2071,6 @@ L_08818B58: } L_08818B60: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08818B78; } @@ -2108,11 +2091,20 @@ L_08818B78: goto L_08818B7C; L_08818B7C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818B84: ctx.gpr[9] = (aot_gpr_5 << 5u); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -2130,7 +2122,6 @@ L_08818B84: L_08818BA4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08818BC8; } @@ -2159,11 +2150,20 @@ L_08818BC8: goto L_08818BCC; L_08818BCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 << 5u); @@ -2197,7 +2197,6 @@ L_08818C2C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818CDC; } @@ -2240,7 +2239,6 @@ L_08818C70: goto L_08818C78; L_08818C78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818C8C; } @@ -2270,7 +2268,6 @@ L_08818C94: AOT_REGCACHE_SYNC_OUT(); return; L_08818C9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08818CBC; } @@ -2285,7 +2282,6 @@ L_08818CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08818CB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08818CC8; } @@ -2299,7 +2295,6 @@ L_08818CBC: AOT_REGCACHE_SYNC_OUT(); return; L_08818CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08818CDC; } @@ -2339,7 +2334,17 @@ L_08818CE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818D20: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (aot_gpr_5 << 5u); @@ -2374,7 +2379,6 @@ L_08818D78: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818DEC; } @@ -2417,7 +2421,6 @@ L_08818DBC: goto L_08818DC4; L_08818DC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818DD8; } @@ -2468,7 +2471,17 @@ L_08818DF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818E30: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[8] = (aot_gpr_5 << 5u); @@ -2504,7 +2517,6 @@ L_08818E88: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818F18; } @@ -2518,7 +2530,6 @@ L_08818EA4: AOT_REGCACHE_SYNC_OUT(); return; L_08818EB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08818EE0; } @@ -2548,7 +2559,6 @@ L_08818ED0: goto L_08818ED8; L_08818ED8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08818EF4; } @@ -2616,7 +2626,17 @@ L_08818F24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08818F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[8] = (aot_gpr_5 << 5u); @@ -2654,7 +2674,6 @@ L_08818FBC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881904C; } @@ -2668,7 +2687,6 @@ L_08818FD8: AOT_REGCACHE_SYNC_OUT(); return; L_08818FE4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08819014; } @@ -2698,7 +2716,6 @@ L_08819004: goto L_0881900C; L_0881900C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08819024; } @@ -2767,7 +2784,17 @@ L_08819058: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819094: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[9] = (aot_gpr_5 << 5u); @@ -2806,7 +2833,6 @@ L_088190FC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08819174; } @@ -2849,7 +2875,6 @@ L_08819140: goto L_08819148; L_08819148: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881915C; } @@ -2902,7 +2927,17 @@ L_08819180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088191BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 << 5u); @@ -2932,7 +2967,6 @@ L_088191F4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08819224; } @@ -2969,7 +3003,17 @@ L_08819230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819248: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 << 5u); @@ -2998,7 +3042,6 @@ L_0881927C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088192A8; } @@ -3036,7 +3079,17 @@ L_088192B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088192E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (aot_gpr_5 << 5u); @@ -3071,7 +3124,6 @@ L_08819338: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088193B8; } @@ -3114,7 +3166,6 @@ L_0881937C: goto L_08819384; L_08819384: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08819398; } @@ -3171,7 +3222,17 @@ L_088193C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088193FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (aot_gpr_5 << 5u); @@ -3209,7 +3270,6 @@ L_0881945C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088194E4; } @@ -3218,7 +3278,6 @@ L_0881945C: L_08819478: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088194E4; } @@ -3231,7 +3290,6 @@ L_08819484: AOT_REGCACHE_SYNC_OUT(); return; L_0881948C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088194E4; } @@ -3240,7 +3298,6 @@ L_0881948C: L_08819494: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088194E4; } @@ -3253,7 +3310,6 @@ L_088194A0: AOT_REGCACHE_SYNC_OUT(); return; L_088194A8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088194E4; } @@ -3306,7 +3362,17 @@ L_088194F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881951C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 << 5u); @@ -3335,7 +3401,6 @@ L_08819550: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08819598; } @@ -3344,7 +3409,6 @@ L_08819550: L_0881956C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08819598; } @@ -3357,7 +3421,6 @@ L_08819578: AOT_REGCACHE_SYNC_OUT(); return; L_08819580: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08819598; } @@ -3393,7 +3456,17 @@ L_088195A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088195BC: ctx.gpr[8] = (aot_gpr_5 << 5u); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -3410,7 +3483,17 @@ L_088195BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088195EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -3424,7 +3507,6 @@ L_088195EC: L_08819604: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881967C; } @@ -3443,7 +3525,6 @@ L_08819614: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(264))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0881967C; } @@ -3457,7 +3538,6 @@ L_0881963C: ctx.gpr[7] = (ctx.gpr[7] << 24u); ctx.gpr[7] = (static_cast(static_cast(ctx.gpr[7]) >> 24u)); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0881967C; } @@ -3466,7 +3546,6 @@ L_0881963C: L_0881965C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(276))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0881967C; } @@ -3486,7 +3565,17 @@ L_0881967C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819688: aot_gpr_6 = (aot_gpr_5 << 5u); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -3495,7 +3584,6 @@ L_08819688: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088196E8; } @@ -3511,7 +3599,6 @@ L_088196AC: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088196DC; } @@ -3520,7 +3607,6 @@ L_088196AC: L_088196C8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088196DC; } @@ -3546,11 +3632,20 @@ L_088196E8: goto L_088196EC; L_088196EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088196F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -3565,7 +3660,6 @@ L_088196F4: AOT_REGCACHE_SYNC_OUT(); return; L_0881971C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08819740; } @@ -3582,7 +3676,6 @@ L_08819724: } L_08819730: { const bool branch_taken = static_cast(ctx.gpr[16]) <= 0; - // nop if (branch_taken) { goto L_088197C0; } @@ -3590,7 +3683,6 @@ L_08819730: } L_08819738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08819758; } @@ -3598,7 +3690,6 @@ L_08819738: } L_08819740: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088197C0; } @@ -3606,7 +3697,6 @@ L_08819740: } L_08819748: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08819790; } @@ -3614,7 +3704,6 @@ L_08819748: } L_08819750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088197C0; } @@ -3624,7 +3713,6 @@ L_08819758: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08819778; } @@ -3637,7 +3725,6 @@ L_08819768: AOT_REGCACHE_SYNC_OUT(); return; L_08819770: { const bool branch_taken = ctx.gpr[2] == aot_gpr_17; - // nop if (branch_taken) { goto L_08819788; } @@ -3652,7 +3739,6 @@ L_08819778: AOT_REGCACHE_SYNC_OUT(); return; L_08819788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088197C0; } @@ -3662,7 +3748,6 @@ L_08819790: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088197B0; } @@ -3675,7 +3760,6 @@ L_088197A0: AOT_REGCACHE_SYNC_OUT(); return; L_088197A8: { const bool branch_taken = ctx.gpr[2] == aot_gpr_17; - // nop if (branch_taken) { goto L_088197C0; } @@ -3701,7 +3785,17 @@ L_088197C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088197D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(376))); if (aot_gpr_5 != 0u) { @@ -3727,11 +3821,20 @@ L_088197EC: goto L_08819804; L_08819804: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881980C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(372))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_6); @@ -3743,7 +3846,17 @@ L_0881980C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819828: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(360), ctx.gpr[16]); @@ -3795,7 +3908,6 @@ L_088198B8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08819A50; } @@ -3826,7 +3938,6 @@ L_088198F0: goto L_088198F8; L_088198F8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08819A50; } @@ -3861,7 +3972,6 @@ L_08819920: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(3), static_cast(0u)); aot_gpr_6 = (ctx.gpr[7] | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08819A50; } @@ -3871,7 +3981,6 @@ L_0881993C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08819A44; } @@ -3885,7 +3994,6 @@ L_0881994C: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08819A44; } @@ -3899,7 +4007,6 @@ L_0881996C: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08819A44; } @@ -3930,7 +4037,6 @@ L_088199A8: goto L_088199B0; L_088199B0: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08819A44; } @@ -3977,9 +4083,7 @@ L_088199B8: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08819A44; } @@ -4013,7 +4117,6 @@ L_08819A18: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[8] = (static_cast(ctx.gpr[8]) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08819A44; } @@ -4029,7 +4132,6 @@ L_08819A30: L_08819A44: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0881993C; } @@ -4056,7 +4158,6 @@ L_08819A6C: L_08819A74: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08819A94; } @@ -4088,7 +4189,6 @@ L_08819AB0: ctx.gpr[19] = (aot_gpr_29 + aot_gpr_17); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(256))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08819BC4; } @@ -4119,7 +4219,6 @@ L_08819AE8: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); ctx.gpr[8] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08819B18; } @@ -4217,7 +4316,6 @@ L_08819BB0: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(256), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(256))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08819AC0; } @@ -4227,7 +4325,6 @@ L_08819BC4: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08819AB0; } @@ -4264,7 +4361,6 @@ L_08819C14: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08819D94; } @@ -4295,7 +4391,6 @@ L_08819C4C: goto L_08819C54; L_08819C54: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08819D94; } @@ -4327,7 +4422,6 @@ L_08819C6C: L_08819C88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08819D94; } @@ -4347,7 +4441,6 @@ L_08819CA4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08819D48; } @@ -4361,7 +4454,6 @@ L_08819CB4: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08819D48; } @@ -4392,7 +4484,6 @@ L_08819CF0: goto L_08819CF8; L_08819CF8: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08819D48; } @@ -4439,9 +4530,7 @@ L_08819D00: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08819D48; } @@ -4454,7 +4543,6 @@ L_08819D40: L_08819D48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08819CA4; } @@ -4462,7 +4550,6 @@ L_08819D48: } L_08819D54: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08819D78; } @@ -4477,7 +4564,6 @@ L_08819D5C: goto L_088196F4; L_08819D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08819D94; } @@ -4491,7 +4577,6 @@ L_08819D78: L_08819D80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08819D94; } @@ -4529,7 +4614,17 @@ L_08819DA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819DD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4563,7 +4658,17 @@ L_08819E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819E24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4646,7 +4751,17 @@ L_08819ED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819EE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4671,7 +4786,17 @@ L_08819F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819F20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4739,7 +4864,17 @@ L_08819FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08819FC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4774,11 +4909,20 @@ L_08819FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A018: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881A044; } @@ -4790,7 +4934,6 @@ L_0881A024: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881A044; } @@ -4809,11 +4952,20 @@ L_0881A044: goto L_0881A048; L_0881A048: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A050: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -4825,14 +4977,34 @@ L_0881A050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A06C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(48), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4859,7 +5031,17 @@ L_0881A098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A0B4: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(12))); @@ -4872,7 +5054,6 @@ L_0881A0B4: goto L_0881A0CC; L_0881A0CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881A0F4; } @@ -4890,11 +5071,20 @@ L_0881A0D4: goto L_0881A0F4; L_0881A0F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A0FC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(12))); @@ -4910,7 +5100,17 @@ L_0881A0FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A128: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(156), ctx.gpr[16]); @@ -4930,7 +5130,6 @@ L_0881A128: L_0881A16C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0881A22C; } @@ -4967,7 +5166,6 @@ L_0881A194: L_0881A1BC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(132))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881A1E8; } @@ -4987,7 +5185,6 @@ L_0881A1C8: } L_0881A1E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881A490; } @@ -5055,7 +5252,6 @@ L_0881A254: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881A2B4; } @@ -5079,7 +5275,6 @@ L_0881A270: AOT_REGCACHE_SYNC_OUT(); return; L_0881A2A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0881A2D8; } @@ -5087,7 +5282,6 @@ L_0881A2A4: } L_0881A2AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881A36C; } @@ -5116,9 +5310,7 @@ L_0881A2D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881A308; } @@ -5197,9 +5389,7 @@ L_0881A390: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881A3C0; } @@ -5329,7 +5519,17 @@ L_0881A4A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A4D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); @@ -5352,7 +5552,6 @@ L_0881A508: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fpr[24] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); if (branch_taken) { @@ -5364,9 +5563,7 @@ L_0881A52C: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881A554; } @@ -5390,7 +5587,6 @@ L_0881A554: ctx.fpr[16] = std::bit_cast(aot_run_words[3]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(29704))); if (branch_taken) { @@ -5404,7 +5600,6 @@ L_0881A574: L_0881A578: aot_gpr_4 = (0u | 17u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_0881A5A8; } @@ -5465,7 +5660,17 @@ L_0881A5F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A618: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[16]); @@ -5493,7 +5698,6 @@ L_0881A658: } aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-18160))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0881A6BC; } @@ -5513,7 +5717,6 @@ L_0881A67C: AOT_REGCACHE_SYNC_OUT(); return; L_0881A6A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881A6B0; } @@ -5527,7 +5730,6 @@ L_0881A6A8: L_0881A6B0: aot_gpr_17 = (ctx.gpr[16] | 0u); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_0881A67C; } @@ -5536,7 +5738,6 @@ L_0881A6B0: L_0881A6BC: aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-18156))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0881A708; } @@ -5556,7 +5757,6 @@ L_0881A6C8: AOT_REGCACHE_SYNC_OUT(); return; L_0881A6EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881A6FC; } @@ -5570,7 +5770,6 @@ L_0881A6F4: L_0881A6FC: aot_gpr_17 = (ctx.gpr[16] | 0u); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_0881A6C8; } @@ -5595,7 +5794,17 @@ L_0881A708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A738: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -5650,7 +5859,17 @@ L_0881A7BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A7D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, aot_gpr_31}; @@ -5759,7 +5978,17 @@ L_0881A884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5774,7 +6003,6 @@ L_0881A89C: L_0881A8BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881A8D8; } @@ -5782,12 +6010,10 @@ L_0881A8BC: } L_0881A8C8: aot_gpr_31 = (0x0881A8D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 303u, 0x08A3D9FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881A8D0u) goto L_0881A8D0; AOT_REGCACHE_SYNC_OUT(); return; L_0881A8D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881A8E0; } @@ -5795,7 +6021,6 @@ L_0881A8D0: } L_0881A8D8: aot_gpr_31 = (0x0881A8E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 308u, 0x08A3DA48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881A8E0u) goto L_0881A8E0; AOT_REGCACHE_SYNC_OUT(); return; L_0881A8E0: @@ -5807,7 +6032,17 @@ L_0881A8E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, aot_gpr_31}; @@ -5888,7 +6123,17 @@ L_0881A984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A99C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5903,7 +6148,6 @@ L_0881A99C: L_0881A9BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881A9DC; } @@ -5934,7 +6178,17 @@ L_0881A9E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881A9FC: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5988,11 +6242,20 @@ L_0881A9FC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AA24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6027,7 +6290,17 @@ L_0881AA54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AA60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, aot_gpr_31}; @@ -6396,7 +6669,17 @@ L_0881AD74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AE3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); @@ -6424,7 +6707,17 @@ L_0881AE3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AE6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6448,7 +6741,17 @@ L_0881AE80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AEC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6493,7 +6796,17 @@ L_0881AEE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AF4C: ctx.gpr[2] = (2178u << 16u); jump_target = aot_gpr_31; @@ -6501,12 +6814,21 @@ L_0881AF4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AF58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0881AF68u); - // nop goto L_0881AF4C; L_0881AF68: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6515,7 +6837,17 @@ L_0881AF68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881AF74: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6566,7 +6898,6 @@ L_0881AFCC: goto L_0881AFD4; L_0881AFD4: aot_gpr_31 = (0x0881AFDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881AFDCu) goto L_0881AFDC; AOT_REGCACHE_SYNC_OUT(); return; L_0881AFDC: @@ -6616,7 +6947,6 @@ L_0881B014: goto L_0881B018; L_0881B018: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881B024; } @@ -6641,7 +6971,17 @@ L_0881B024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B048: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -6672,7 +7012,6 @@ L_0881B078: L_0881B084: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881B098; } @@ -6695,14 +7034,34 @@ L_0881B098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B0AC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 9u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B0B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -6739,7 +7098,17 @@ L_0881B0F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B100: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6769,7 +7138,17 @@ L_0881B12C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B138: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -6847,7 +7226,17 @@ L_0881B1FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B210: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6863,7 +7252,17 @@ L_0881B224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B230: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6913,7 +7312,17 @@ L_0881B27C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B29C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_17); @@ -7019,12 +7428,21 @@ L_0881B364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B384: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0881B394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 166u, 0x08AACBDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881B394u) goto L_0881B394; AOT_REGCACHE_SYNC_OUT(); return; L_0881B394: @@ -7034,7 +7452,17 @@ L_0881B394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B3A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -7050,7 +7478,17 @@ L_0881B3B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B3C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[19]); @@ -7076,7 +7514,6 @@ L_0881B3C0: L_0881B408: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881B430; } @@ -7174,7 +7611,6 @@ L_0881B4C8: AOT_REGCACHE_SYNC_OUT(); return; L_0881B4D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881B4F4; } @@ -7205,7 +7641,17 @@ L_0881B4F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B51C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -7221,7 +7667,6 @@ L_0881B51C: } L_0881B540: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0881B564; } @@ -7241,7 +7686,6 @@ L_0881B548: AOT_REGCACHE_SYNC_OUT(); return; L_0881B564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881B5B4; } @@ -7294,7 +7738,17 @@ L_0881B5B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B5CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -7402,7 +7856,17 @@ L_0881B6D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B6F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7419,7 +7883,6 @@ L_0881B704: L_0881B70C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881B71C; } @@ -7436,7 +7899,6 @@ L_0881B71C: L_0881B724: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881B734; } @@ -7453,7 +7915,6 @@ L_0881B734: L_0881B73C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881B74C; } @@ -7470,7 +7931,6 @@ L_0881B74C: L_0881B754: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881B764; } @@ -7487,7 +7947,17 @@ L_0881B764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B774: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[19]); @@ -7537,7 +8007,17 @@ L_0881B7E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881B804: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -7581,7 +8061,6 @@ L_0881B864: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(752))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7594,7 +8073,6 @@ L_0881B87C: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7624,7 +8102,6 @@ L_0881B8B8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(756))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7637,7 +8114,6 @@ L_0881B8D0: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7667,7 +8143,6 @@ L_0881B90C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(760))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7680,7 +8155,6 @@ L_0881B924: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7710,7 +8184,6 @@ L_0881B960: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(764))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7723,7 +8196,6 @@ L_0881B978: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7753,7 +8225,6 @@ L_0881B9B4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(768))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7766,7 +8237,6 @@ L_0881B9CC: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7796,7 +8266,6 @@ L_0881BA08: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(772))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7809,7 +8278,6 @@ L_0881BA20: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7839,7 +8307,6 @@ L_0881BA5C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(776))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7852,7 +8319,6 @@ L_0881BA74: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7882,7 +8348,6 @@ L_0881BAB0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(780))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (0u | 0u); if (branch_taken) { @@ -7895,7 +8360,6 @@ L_0881BAC8: aot_gpr_4 = (aot_gpr_4 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[16] & 255u); if (branch_taken) { @@ -7911,7 +8375,6 @@ L_0881BAE8: goto L_0881BAEC; L_0881BAEC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881BB00; } @@ -7936,7 +8399,17 @@ L_0881BB00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881BB1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7994,7 +8467,6 @@ L_0881BB1C: ctx.gpr[16] = (aot_gpr_6 | 0u); aot_gpr_4 = (ctx.gpr[7] | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0881BC1C; } @@ -8011,7 +8483,6 @@ L_0881BC08: L_0881BC1C: aot_gpr_4 = (ctx.gpr[18] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881BCE8; } @@ -8070,7 +8541,6 @@ L_0881BC28: L_0881BCE8: aot_gpr_4 = (ctx.gpr[18] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881BDB4; } @@ -8129,7 +8599,6 @@ L_0881BCF4: L_0881BDB4: aot_gpr_4 = (ctx.gpr[18] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881BE80; } @@ -8188,7 +8657,6 @@ L_0881BDC0: L_0881BE80: aot_gpr_4 = (ctx.gpr[18] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881BF4C; } @@ -8247,7 +8715,6 @@ L_0881BE8C: L_0881BF4C: aot_gpr_4 = (ctx.gpr[18] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0006_entry, 6u, 2u, 0x0881C018u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0006.cpp b/profiles/vcs/generated/generated_unit_0006.cpp index ad933d8..a39e7ea 100644 --- a/profiles/vcs/generated/generated_unit_0006.cpp +++ b/profiles/vcs/generated/generated_unit_0006.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0006[4096] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, - 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, - 34, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 54, 55, - 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, 0, 0, 0, 0, 0, 66, 0, 0, - 67, 0, 0, 68, 0, 0, 0, 69, 0, 70, 71, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 74, 0, 0, 75, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, - 82, 0, 83, 84, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, - 0, 90, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 95, - 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, - 102, 0, 0, 103, 0, 0, 104, 0, 0, 0, 105, 0, 106, 107, 0, 0, 0, 0, 0, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, - 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, - 0, 123, 0, 124, 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, - 130, 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 136, 0, 0, - 137, 0, 0, 0, 138, 0, 139, 140, 0, 0, 0, 0, 0, 0, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, - 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, - 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 0, 0, 155, 0, 0, 0, 156, 0, 157, 0, - 0, 0, 158, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, - 0, 0, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, - 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, - 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 185, 0, 186, - 0, 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 192, 193, 0, 0, 0, - 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 0, 0, 0, 205, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, - 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 216, 0, 0, 217, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 223, 0, 224, - 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 230, 0, 231, 232, 0, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 252, 0, 253, 0, 0, 0, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, - 0, 257, 0, 0, 0, 0, 0, 0, 258, 259, 0, 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, 263, 0, 264, 265, 0, 266, 0, 0, 0, 0, 0, - 0, 267, 0, 0, 268, 0, 0, 269, 0, 0, 270, 0, 0, 0, 0, 271, 0, 272, 0, 273, 274, 0, 275, 0, 0, 0, 0, 0, 0, 276, 277, 0, - 0, 278, 0, 0, 279, 0, 0, 0, 280, 0, 281, 0, 282, 283, 0, 284, 0, 0, 0, 0, 0, 0, 285, 286, 0, 0, 287, 0, 0, 288, 0, 0, - 0, 289, 0, 290, 0, 291, 292, 0, 293, 0, 0, 0, 0, 0, 0, 294, 295, 0, 0, 296, 0, 0, 297, 0, 0, 0, 298, 0, 299, 0, 300, 0, - 0, 301, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, - 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 310, 0, 311, 0, 0, 0, 0, - 312, 0, 313, 314, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 319, - 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 0, 325, 0, 0, 326, 0, 0, 327, 0, 0, 328, 329, 0, 330, 0, 0, 0, 331, 0, 0, 332, - 0, 0, 333, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 339, 0, 340, 0, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 0, 345, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 0, 0, 354, - 0, 355, 0, 0, 0, 0, 356, 0, 357, 358, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 0, 0, 362, - 0, 363, 0, 364, 0, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 370, 371, 0, 0, 0, 372, 0, 0, 0, 0, 373, - 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 385, 0, 386, 0, 387, 388, 0, 389, 0, 0, 0, 390, 0, 391, 0, - 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, 0, - 0, 399, 0, 0, 400, 0, 401, 0, 0, 402, 0, 403, 0, 0, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, 407, 0, 0, 408, 0, 409, 0, 0, - 0, 0, 410, 411, 0, 0, 0, 0, 412, 0, 413, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 416, 0, 417, 0, 418, - 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 422, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, - 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 437, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 443, - 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 448, 0, 0, 449, 0, 450, 0, 0, - 0, 451, 0, 0, 452, 0, 453, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 457, 0, 0, 458, 0, 0, 0, 459, 0, - 0, 460, 0, 0, 0, 461, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, - 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, - 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 473, 0, 0, 0, 474, 0, - 475, 0, 476, 0, 0, 0, 477, 0, 478, 479, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 483, 0, 484, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 489, 490, 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 493, 0, 0, - 0, 494, 0, 0, 0, 495, 0, 0, 496, 0, 497, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 505, 0, 0, 506, 507, 0, 508, 509, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, - 0, 0, 516, 0, 0, 517, 0, 0, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, 526, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 530, 0, 531, 0, 0, 0, 532, 0, 533, 0, 534, 0, 0, - 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 0, 0, 542, 0, 0, 543, 0, 544, 0, 0, 0, 0, 545, - 0, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, - 555, 0, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 562, 0, 0, 0, 0, 563, 0, 0, - 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 0, - 568, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 574, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 0, 578, - 0, 0, 0, 579, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 582, 0, 0, 0, 0, 0, 0, 583, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 588, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, - 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, - 598, 0, 599, 0, 0, 600, 0, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 0, 608, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 611, 612, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, - 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, - 624, 0, 625, 0, 0, 0, 0, 0, 626, 0, 627, 0, 0, 0, 628, 0, 629, 0, 630, 0, 0, 0, 631, 0, 632, 0, 633, 0, 0, 634, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, - 0, 640, 0, 0, 641, 0, 642, 0, 0, 0, 0, 643, 0, 0, 0, 644, 0, 0, 645, 0, 646, 0, 0, 647, 0, 648, 0, 0, 0, 0, 649, 0, - 650, 0, 0, 0, 0, 651, 0, 0, 0, 652, 653, 0, 0, 654, 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 659, 0, 0, 0, 660, 0, 661, 0, 662, 663, 0, 664, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 670, 0, 0, 0, 671, 0, 672, 0, 673, 674, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 679, 0, 680, 0, 0, 0, 0, 0, 0, 681, 682, 0, 0, 0, 683, 0, 684, 0, - 685, 0, 686, 0, 687, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 691, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 692, 0, 0, 693, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, - 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 700, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, 0, - 0, 0, 0, 0, 0, 704, 0, 705, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 708, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 710, 0, 711, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 714, 0, 0, 715, 0, 716, 717, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, - 721, 0, 0, 0, 0, 0, 722, 0, 0, 723, 0, 0, 0, 724, 0, 0, 725, 0, 0, 726, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 731, 0, 732, 0, 733, 0, 734, 0, 735, 0, 736, 0, 737, 0, 738, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0006[64] = { + 0x1200000000000241ull, 0x0000900000000000ull, 0x0000002080000000ull, 0x0000480000024200ull, + 0x0000012000000900ull, 0x9000000480000024ull, 0x1040000012000000ull, 0x0000122148204004ull, + 0x5000044000080001ull, 0xD10900400200C300ull, 0x2090008094210140ull, 0x12009208024A0689ull, + 0x890010128420140Dull, 0x00503449400A1042ull, 0x2008A80142085120ull, 0x248020250840501Aull, + 0x24204100900280D1ull, 0x0841002C51090812ull, 0x1102205020520404ull, 0xA0400508840004A0ull, + 0x004400101A204120ull, 0x0001414000000110ull, 0x0410300000050500ull, 0x0000000001000011ull, + 0x00A4C00000000100ull, 0xA080200000000200ull, 0x0A0D010100800022ull, 0x0000000040A0A081ull, + 0x000A140200010400ull, 0x05A89302100C5421ull, 0x24C0B512605A8492ull, 0x2080800A5449816Aull, + 0x9201002D0A020608ull, 0x04116AA4916492AAull, 0x8440801200A050A0ull, 0x8469150A88202342ull, + 0x516A5044000016AAull, 0x29150A522148800Aull, 0x02003520AA00150Cull, 0x0108000000000000ull, + 0x81820A0104005018ull, 0x2944104090041200ull, 0x0480082244844152ull, 0x4410402040024404ull, + 0x0080200016020B45ull, 0x4004152221132200ull, 0xAA811B2008208100ull, 0xA805500000001224ull, + 0x8522AA442A2A4400ull, 0x010011110902AAA0ull, 0x1040802021208000ull, 0x8220400084410241ull, + 0x4000400020480018ull, 0x550820040420A100ull, 0x80086A0082415525ull, 0x4010410208008A00ull, + 0x2002940025454505ull, 0x1010A62142948852ull, 0x02041020102D4480ull, 0x5181508800020D44ull, + 0x08280A4010408095ull, 0x001540A028042802ull, 0x22008D200100004Aull, 0xAAAA104200292241ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0006[64] = { + 1u, 6u, 8u, 10u, 15u, 19u, 25u, 29u, 38u, 44u, 56u, 67u, 82u, 96u, 110u, 123u, + 137u, 150u, 164u, 176u, 187u, 197u, 203u, 211u, 214u, 220u, 225u, 235u, 242u, 249u, 267u, 289u, + 306u, 320u, 343u, 355u, 374u, 392u, 410u, 425u, 427u, 439u, 451u, 465u, 475u, 487u, 501u, 516u, + 527u, 546u, 560u, 568u, 579u, 586u, 598u, 615u, 624u, 640u, 658u, 670u, 685u, 698u, 710u, 721u, }; void recomp_unit_0006_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0006_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0881C000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0006[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0006[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0006[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0881C000; @@ -920,7 +827,6 @@ L_0881C000: L_0881C018: aot_gpr_4 = (ctx.gpr[18] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C0E4; } @@ -979,7 +885,6 @@ L_0881C024: L_0881C0E4: aot_gpr_4 = (ctx.gpr[18] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C1B0; } @@ -1038,7 +943,6 @@ L_0881C0F0: L_0881C1B0: aot_gpr_4 = (ctx.gpr[18] & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C27C; } @@ -1107,7 +1011,17 @@ L_0881C27C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881C294: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1159,7 +1073,6 @@ L_0881C324: L_0881C338: aot_gpr_4 = (ctx.gpr[16] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C3AC; } @@ -1196,7 +1109,6 @@ L_0881C344: L_0881C3AC: aot_gpr_4 = (ctx.gpr[16] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C420; } @@ -1233,7 +1145,6 @@ L_0881C3B8: L_0881C420: aot_gpr_4 = (ctx.gpr[16] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C494; } @@ -1270,7 +1181,6 @@ L_0881C42C: L_0881C494: aot_gpr_4 = (ctx.gpr[16] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C508; } @@ -1307,7 +1217,6 @@ L_0881C4A0: L_0881C508: aot_gpr_4 = (ctx.gpr[16] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C57C; } @@ -1344,7 +1253,6 @@ L_0881C514: L_0881C57C: aot_gpr_4 = (ctx.gpr[16] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C5F0; } @@ -1381,7 +1289,6 @@ L_0881C588: L_0881C5F0: aot_gpr_4 = (ctx.gpr[16] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C664; } @@ -1418,7 +1325,6 @@ L_0881C5FC: L_0881C664: aot_gpr_4 = (ctx.gpr[16] & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C6D8; } @@ -1465,14 +1371,23 @@ L_0881C6D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881C6F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0881C708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 264u, 0x08AAD80Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881C708u) goto L_0881C708; AOT_REGCACHE_SYNC_OUT(); return; L_0881C708: @@ -1491,7 +1406,17 @@ L_0881C708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881C738: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, aot_gpr_31}; @@ -1516,7 +1441,6 @@ L_0881C754: L_0881C76C: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881C780; } @@ -1539,12 +1463,21 @@ L_0881C780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881C794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0881C7A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 280u, 0x08AAD998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881C7A4u) goto L_0881C7A4; AOT_REGCACHE_SYNC_OUT(); return; L_0881C7A4: @@ -1554,14 +1487,23 @@ L_0881C7A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881C7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(472), aot_run_words); } ctx.gpr[23] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0881C800u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 271u, 0x08AAD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881C800u) goto L_0881C800; AOT_REGCACHE_SYNC_OUT(); return; L_0881C800: @@ -1653,9 +1595,7 @@ L_0881C8F8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[23] + static_cast(384), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881C93C; } @@ -1667,9 +1607,7 @@ L_0881C920: L_0881C924: aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881C924; } @@ -1686,7 +1624,6 @@ L_0881C93C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_0881C964; @@ -1705,7 +1642,6 @@ L_0881C964: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881C9C0; } @@ -1721,7 +1657,6 @@ L_0881C998: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881D07C; } @@ -1730,7 +1665,6 @@ L_0881C998: L_0881C9C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881CB58; } @@ -1797,9 +1731,7 @@ L_0881CA20: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CA70; } @@ -1808,9 +1740,7 @@ L_0881CA20: L_0881CA40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CA70; } @@ -1819,9 +1749,7 @@ L_0881CA40: L_0881CA54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CA70; } @@ -1891,7 +1819,6 @@ L_0881CADC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881CB58; } @@ -1900,7 +1827,6 @@ L_0881CADC: L_0881CAF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881CB58; } @@ -1969,7 +1895,6 @@ L_0881CB64: ctx.gpr[18] = (aot_gpr_29 + static_cast(32)); aot_gpr_4 = (17204u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[30] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1981,9 +1906,7 @@ L_0881CB8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(780))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CBE4; } @@ -1992,7 +1915,6 @@ L_0881CB8C: L_0881CBA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(260))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881CBBC; } @@ -2001,7 +1923,6 @@ L_0881CBA4: L_0881CBB0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881CBE4; } @@ -2079,9 +2000,7 @@ L_0881CC30: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CC84; } @@ -2090,9 +2009,7 @@ L_0881CC30: L_0881CC54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CC84; } @@ -2101,9 +2018,7 @@ L_0881CC54: L_0881CC68: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CC84; } @@ -2168,9 +2083,7 @@ L_0881CCE0: AOT_REGCACHE_SYNC_OUT(); return; L_0881CCEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CD80; } @@ -2184,9 +2097,7 @@ L_0881CCFC: L_0881CD04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CD30; } @@ -2214,7 +2125,6 @@ L_0881CD30: AOT_REGCACHE_SYNC_OUT(); return; L_0881CD44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881CD78; } @@ -2252,7 +2162,6 @@ L_0881CD78: L_0881CD80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881CEB4; } @@ -2326,9 +2235,7 @@ L_0881CE14: AOT_REGCACHE_SYNC_OUT(); return; L_0881CE20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CEB4; } @@ -2342,9 +2249,7 @@ L_0881CE30: L_0881CE38: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CE64; } @@ -2372,7 +2277,6 @@ L_0881CE64: AOT_REGCACHE_SYNC_OUT(); return; L_0881CE78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881CEAC; } @@ -2415,7 +2319,6 @@ L_0881CEBC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(452), ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(248))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D07C; } @@ -2486,9 +2389,7 @@ L_0881CF38: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CF88; } @@ -2497,9 +2398,7 @@ L_0881CF38: L_0881CF58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CF88; } @@ -2508,9 +2407,7 @@ L_0881CF58: L_0881CF6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881CF88; } @@ -2574,7 +2471,6 @@ L_0881CFDC: L_0881CFE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D07C; } @@ -2685,7 +2581,6 @@ L_0881D0D4: L_0881D0E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D104; } @@ -2701,7 +2596,6 @@ L_0881D0F4: L_0881D104: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(176))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D170; } @@ -2728,7 +2622,6 @@ L_0881D12C: L_0881D140: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D170; } @@ -2752,7 +2645,6 @@ L_0881D160: AOT_REGCACHE_SYNC_OUT(); return; L_0881D170: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0881D188; } @@ -2773,7 +2665,6 @@ L_0881D188: goto L_0881D18C; L_0881D18C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0881D0A0; } @@ -2802,17 +2693,25 @@ L_0881D1C0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17912))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881D1D8: ctx.gpr[16] = (0u | 1u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30700))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881D250; } @@ -2825,7 +2724,6 @@ L_0881D1EC: aot_gpr_17 = (0u | 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30688))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881D250; } @@ -2839,7 +2737,6 @@ L_0881D208: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30692))); ctx.fpr[28] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30688))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881D250; } @@ -2852,7 +2749,6 @@ L_0881D228: aot_gpr_17 = (0u | 0u); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881D250; } @@ -2865,7 +2761,6 @@ L_0881D244: goto L_0881D250; L_0881D250: { const bool branch_taken = static_cast(ctx.gpr[16]) < 0; - // nop if (branch_taken) { goto L_0881D290; } @@ -2893,7 +2788,6 @@ L_0881D274: AOT_REGCACHE_SYNC_OUT(); return; L_0881D290: { const bool branch_taken = static_cast(aot_gpr_17) < 0; - // nop if (branch_taken) { goto L_0881D2E0; } @@ -2911,9 +2805,7 @@ L_0881D298: AOT_REGCACHE_SYNC_OUT(); return; L_0881D2B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881D2E0; } @@ -2933,7 +2825,6 @@ L_0881D2E0: aot_gpr_5 = (0u + static_cast(-977)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(464))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881D31C; } @@ -2953,7 +2844,6 @@ L_0881D2F0: AOT_REGCACHE_SYNC_OUT(); return; L_0881D314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881D6D0; } @@ -2962,7 +2852,6 @@ L_0881D314: L_0881D31C: aot_gpr_5 = (0u + static_cast(-983)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881D3FC; } @@ -2999,7 +2888,6 @@ L_0881D37C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(204)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D3F4; } @@ -3010,7 +2898,6 @@ L_0881D38C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-11382)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881D3F4; } @@ -3031,7 +2918,6 @@ L_0881D3A8: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_15 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_0881D3D8; @@ -3049,7 +2935,6 @@ L_0881D3D8: AOT_REGCACHE_SYNC_OUT(); return; L_0881D3F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881D6D0; } @@ -3061,7 +2946,6 @@ L_0881D3FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D6D0; } @@ -3070,7 +2954,6 @@ L_0881D3FC: L_0881D414: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(268))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D6D0; } @@ -3155,7 +3038,6 @@ L_0881D490: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30668))); { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30664))); goto L_0881D4C8; @@ -3163,7 +3045,6 @@ L_0881D490: goto L_0881D4C8; L_0881D4C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0881D4D8; @@ -3197,7 +3078,6 @@ L_0881D4D8: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30668))); { const float fs = aot_fpr_15; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30664))); goto L_0881D510; @@ -3205,7 +3085,6 @@ L_0881D4D8: goto L_0881D510; L_0881D510: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0881D520; @@ -3239,7 +3118,6 @@ L_0881D520: aot_fpr_13 = aot_fpr_13 / aot_fpr_14; aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30656))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = ctx.fpr[24] - aot_fpr_12; if (branch_taken) { @@ -3259,9 +3137,7 @@ L_0881D5A0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30656))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881D5C0; } @@ -3293,9 +3169,7 @@ L_0881D5C0: aot_fpr_13 = aot_fpr_13 / aot_fpr_15; ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30652))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881D628; } @@ -3313,9 +3187,7 @@ L_0881D628: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30652))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881D648; } @@ -3349,9 +3221,7 @@ L_0881D648: ctx.fpr[24] = ctx.fpr[24] - aot_fpr_13; aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30648))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881D6B4; } @@ -3432,7 +3302,6 @@ L_0881D710: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_0881D760; @@ -3796,7 +3665,6 @@ L_0881D8B8: L_0881D8BC: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D8DC; } @@ -3805,7 +3673,6 @@ L_0881D8BC: L_0881D8C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881D8DC; } @@ -3841,7 +3708,17 @@ L_0881D8DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881D924: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[15]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3876,7 +3753,6 @@ L_0881D9B4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_17 | 0u); if (branch_taken) { @@ -3898,7 +3774,6 @@ L_0881D9DC: } L_0881D9F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DA14; } @@ -3906,7 +3781,6 @@ L_0881D9F4: } L_0881D9FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DC40; } @@ -4022,7 +3896,6 @@ L_0881DACC: AOT_REGCACHE_SYNC_OUT(); return; L_0881DAE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881DC28; } @@ -4031,9 +3904,7 @@ L_0881DAE4: L_0881DAEC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881DC28; } @@ -4044,9 +3915,7 @@ L_0881DB00: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881DC28; } @@ -4056,9 +3925,7 @@ L_0881DB1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881DB3C; } @@ -4076,9 +3943,7 @@ L_0881DB3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881DB5C; } @@ -4241,7 +4106,17 @@ L_0881DC40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DC84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4268,14 +4143,34 @@ L_0881DCB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DCC4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DCCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -4311,7 +4206,6 @@ L_0881DD14: AOT_REGCACHE_SYNC_OUT(); return; L_0881DD28: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0881DD38; } @@ -4354,7 +4248,17 @@ L_0881DD4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DD70: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4364,7 +4268,17 @@ L_0881DD70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DD84: ctx.gpr[7] = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_gpr_6 & 65535u); @@ -4372,7 +4286,6 @@ L_0881DD84: ctx.gpr[8] = (0u | 0u); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0881DDDC; } @@ -4384,7 +4297,6 @@ L_0881DDA0: L_0881DDA4: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DDBC; } @@ -4393,7 +4305,6 @@ L_0881DDA4: L_0881DDB0: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DDD4; } @@ -4411,7 +4322,6 @@ L_0881DDBC: } L_0881DDCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DDDC; } @@ -4430,11 +4340,20 @@ L_0881DDDC: goto L_0881DDE0; L_0881DDE0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DDE8: ctx.gpr[7] = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_gpr_6 & 65535u); @@ -4442,7 +4361,6 @@ L_0881DDE8: ctx.gpr[10] = (0u | 0u); ctx.gpr[8] = (static_cast(ctx.gpr[10]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0881DE4C; } @@ -4456,7 +4374,6 @@ L_0881DE04: L_0881DE10: ctx.gpr[11] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_0881DE28; } @@ -4465,7 +4382,6 @@ L_0881DE10: L_0881DE1C: ctx.gpr[11] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[11]; - // nop if (branch_taken) { goto L_0881DE44; } @@ -4484,7 +4400,6 @@ L_0881DE28: } L_0881DE3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DE4C; } @@ -4503,11 +4418,20 @@ L_0881DE4C: goto L_0881DE50; L_0881DE50: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DE58: ctx.gpr[7] = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_gpr_6 & 65535u); @@ -4515,7 +4439,6 @@ L_0881DE58: ctx.gpr[8] = (0u | 0u); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0881DEB0; } @@ -4527,7 +4450,6 @@ L_0881DE74: L_0881DE78: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DE90; } @@ -4536,7 +4458,6 @@ L_0881DE78: L_0881DE84: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DEA8; } @@ -4554,7 +4475,6 @@ L_0881DE90: } L_0881DEA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DEB0; } @@ -4573,11 +4493,20 @@ L_0881DEB0: goto L_0881DEB4; L_0881DEB4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DEBC: ctx.gpr[7] = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_gpr_6 & 65535u); @@ -4585,7 +4514,6 @@ L_0881DEBC: ctx.gpr[8] = (0u | 0u); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0881DF14; } @@ -4597,7 +4525,6 @@ L_0881DED8: L_0881DEDC: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DEF4; } @@ -4606,7 +4533,6 @@ L_0881DEDC: L_0881DEE8: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DF0C; } @@ -4624,7 +4550,6 @@ L_0881DEF4: } L_0881DF04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DF14; } @@ -4643,11 +4568,20 @@ L_0881DF14: goto L_0881DF18; L_0881DF18: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DF20: ctx.gpr[7] = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_gpr_6 & 65535u); @@ -4655,7 +4589,6 @@ L_0881DF20: ctx.gpr[8] = (0u | 0u); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0881DF78; } @@ -4667,7 +4600,6 @@ L_0881DF3C: L_0881DF40: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DF58; } @@ -4676,7 +4608,6 @@ L_0881DF40: L_0881DF4C: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881DF70; } @@ -4694,7 +4625,6 @@ L_0881DF58: } L_0881DF68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881DF78; } @@ -4715,11 +4645,20 @@ L_0881DF78: goto L_0881DF84; L_0881DF84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881DF8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(92))); @@ -4776,7 +4715,6 @@ L_0881E00C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881E028; } @@ -4799,7 +4737,17 @@ L_0881E028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E044: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -4816,7 +4764,6 @@ L_0881E044: } L_0881E064: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0881E088; } @@ -4827,7 +4774,6 @@ L_0881E06C: aot_gpr_5 = (ctx.gpr[7] + ctx.gpr[8]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0881E064; } @@ -4846,11 +4792,20 @@ L_0881E088: goto L_0881E08C; L_0881E08C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -4878,11 +4833,20 @@ L_0881E0C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E0E4: aot_gpr_6 = (aot_gpr_5 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0881E154; } @@ -4923,7 +4887,6 @@ L_0881E10C: } L_0881E114: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0881E148; } @@ -4978,16 +4941,24 @@ L_0881E154: goto L_0881E158; L_0881E158: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E160: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_0881E1AC; } @@ -4996,7 +4967,6 @@ L_0881E160: L_0881E170: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_0881E1A4; } @@ -5005,7 +4975,6 @@ L_0881E170: L_0881E17C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_0881E19C; } @@ -5014,7 +4983,6 @@ L_0881E17C: L_0881E188: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(7))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881E1B4; } @@ -5057,11 +5025,20 @@ L_0881E1B4: goto L_0881E1B8; L_0881E1B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E1C0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(47))); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); @@ -5097,11 +5074,20 @@ L_0881E1E8: goto L_0881E214; L_0881E214: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E21C: ctx.gpr[2] = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(49))); @@ -5115,7 +5101,6 @@ L_0881E21C: } L_0881E230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881E254; } @@ -5132,11 +5117,20 @@ L_0881E238: goto L_0881E254; L_0881E254: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E25C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1929)))))); @@ -5156,7 +5150,17 @@ L_0881E284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E290: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (static_cast(static_cast(aot_gpr_5) >> 31u)); @@ -5203,7 +5207,6 @@ L_0881E2E8: } L_0881E2FC: { const bool branch_taken = ctx.gpr[13] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0881E320; } @@ -5222,7 +5225,6 @@ L_0881E304: } L_0881E318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881E324; } @@ -5239,7 +5241,17 @@ L_0881E324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E334: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(14))); @@ -5277,7 +5289,6 @@ L_0881E36C: } L_0881E37C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881E3B0; } @@ -5296,7 +5307,6 @@ L_0881E38C: ctx.gpr[16] = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881E3A8; } @@ -5352,7 +5362,17 @@ L_0881E3D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E3E8: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(15)))))); aot_gpr_5 = (aot_gpr_5 + static_cast(240)); @@ -5366,7 +5386,6 @@ L_0881E3E8: } L_0881E3FC: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0881E40C; } @@ -5390,7 +5409,6 @@ L_0881E40C: } L_0881E414: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0881E424; } @@ -5409,11 +5427,20 @@ L_0881E424: goto L_0881E428; L_0881E428: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E430: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[30]); @@ -5458,7 +5485,6 @@ L_0881E498: } L_0881E4B0: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_0881E4D4; } @@ -5471,7 +5497,6 @@ L_0881E4B8: goto L_0881E0E4; L_0881E4C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881E4D8; } @@ -5490,7 +5515,6 @@ L_0881E4D4: goto L_0881E4D8; L_0881E4D8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0881E60C; } @@ -5654,7 +5678,6 @@ L_0881E5E0: } L_0881E5EC: aot_gpr_31 = (0x0881E5F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881E5F4u) goto L_0881E5F4; AOT_REGCACHE_SYNC_OUT(); return; L_0881E5F4: @@ -5680,7 +5703,6 @@ L_0881E60C: } L_0881E620: { const bool branch_taken = static_cast(ctx.gpr[22]) <= 0; - // nop if (branch_taken) { goto L_0881E67C; } @@ -5712,7 +5734,6 @@ L_0881E630: } L_0881E664: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0881E674; } @@ -5754,7 +5775,6 @@ L_0881E694: } L_0881E6A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881E6B0; } @@ -5762,7 +5782,6 @@ L_0881E6A0: } L_0881E6A8: aot_gpr_31 = (0x0881E6B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881E6B0u) goto L_0881E6B0; AOT_REGCACHE_SYNC_OUT(); return; L_0881E6B0: @@ -5787,7 +5806,17 @@ L_0881E6B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E6E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -5853,7 +5882,17 @@ L_0881E7CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E7E0: aot_gpr_5 = (17279u << 16u); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5863,9 +5902,7 @@ L_0881E7E0: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = aot_fpr_15 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881E810; } @@ -5880,7 +5917,6 @@ L_0881E810: aot_gpr_4 = (0u | 0u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_0881E830; @@ -5892,7 +5928,17 @@ L_0881E830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5925,7 +5971,6 @@ L_0881E880: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5953,9 +5998,7 @@ L_0881E8C4: aot_fpr_15 = aot_fpr_15 / aot_fpr_13; aot_fpr_14 = aot_fpr_15 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881E8E0; } @@ -5978,7 +6021,17 @@ L_0881E8E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881E8FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -6016,7 +6069,6 @@ L_0881E948: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881EA5C; } @@ -6025,7 +6077,6 @@ L_0881E948: L_0881E970: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0881EA5C; } @@ -6038,7 +6089,6 @@ L_0881E97C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881EA5C; } @@ -6061,7 +6111,6 @@ L_0881E9B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881E9F4; } @@ -6075,7 +6124,6 @@ L_0881E9C8: goto L_0881F588; L_0881E9D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881EA5C; } @@ -6089,7 +6137,6 @@ L_0881E9E0: AOT_REGCACHE_SYNC_OUT(); return; L_0881E9EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881EA5C; } @@ -6120,7 +6167,6 @@ L_0881EA10: goto L_0881EA18; L_0881EA18: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881EA5C; } @@ -6132,7 +6178,6 @@ L_0881EA20: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881EA48; } @@ -6165,7 +6210,6 @@ L_0881EA68: L_0881EA78: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881EADC; } @@ -6175,7 +6219,6 @@ L_0881EA84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881EADC; } @@ -6227,7 +6270,17 @@ L_0881EAE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881EB08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(456))); @@ -6256,7 +6309,17 @@ L_0881EB38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881EB44: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -6283,7 +6346,6 @@ L_0881EB78: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881ECB4; } @@ -6298,7 +6360,6 @@ L_0881EB94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(46))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0881ECB4; } @@ -6335,7 +6396,6 @@ L_0881EBE8: goto L_0881F588; L_0881EBF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0881EC08; } @@ -6368,7 +6428,6 @@ L_0881EC20: goto L_0881EC24; L_0881EC24: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0881EC68; } @@ -6393,7 +6452,6 @@ L_0881EC44: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(46))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0881EC68; } @@ -6404,7 +6462,6 @@ L_0881EC64: goto L_0881EC68; L_0881EC68: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0881ECB4; } @@ -6449,7 +6506,17 @@ L_0881ECB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881ECDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6490,7 +6557,6 @@ L_0881ED40: L_0881ED44: aot_gpr_4 = (aot_gpr_4 & 31744u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881ED60; } @@ -6514,7 +6580,6 @@ L_0881ED74: ctx.gpr[21] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 255u); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_0881EDF8; } @@ -6545,7 +6610,6 @@ L_0881EDA0: goto L_0881EDA8; L_0881EDA8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881EDF8; } @@ -6557,7 +6621,6 @@ L_0881EDB0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881EDF8; } @@ -6597,7 +6660,17 @@ L_0881EDF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881EE20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (ctx.gpr[7] & 255u); @@ -6643,7 +6716,6 @@ L_0881EE6C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881EEA0; } @@ -6663,7 +6735,6 @@ L_0881EEA0: goto L_0881EEA4; L_0881EEA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881EEB0; } @@ -6680,7 +6751,17 @@ L_0881EEB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881EEC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6696,7 +6777,6 @@ L_0881EEC0: } L_0881EEDC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881EEF4; } @@ -6709,7 +6789,6 @@ L_0881EEE4: AOT_REGCACHE_SYNC_OUT(); return; L_0881EEEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881EF08; } @@ -6717,7 +6796,6 @@ L_0881EEEC: } L_0881EEF4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881EF08; } @@ -6735,12 +6813,21 @@ L_0881EF08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881EF14: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0881EFC0; } @@ -6749,7 +6836,6 @@ L_0881EF14: L_0881EF24: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0881EFB8; } @@ -6804,7 +6890,6 @@ L_0881EF30: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19252))); { const float fs = aot_fpr_15; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); goto L_0881EFC8; @@ -6812,7 +6897,6 @@ L_0881EF30: goto L_0881EFB0; L_0881EFB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881EFF4; } @@ -6820,7 +6904,6 @@ L_0881EFB0: } L_0881EFB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881EFF4; } @@ -6828,7 +6911,6 @@ L_0881EFB8: } L_0881EFC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881EFF4; } @@ -6841,9 +6923,7 @@ L_0881EFC8: aot_fpr_13 = aot_fpr_13 + aot_fpr_12; aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0881EFF4; } @@ -6859,7 +6939,17 @@ L_0881EFF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881EFFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_gpr_5 | 0u); @@ -6881,7 +6971,6 @@ L_0881F028: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); ctx.gpr[7] = (ctx.gpr[7] & 2048u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0881F064; } @@ -6890,7 +6979,6 @@ L_0881F028: L_0881F038: ctx.gpr[7] = (ctx.gpr[16] | aot_gpr_6); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0881F054; } @@ -6898,7 +6986,6 @@ L_0881F038: } L_0881F044: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_0881F06C; } @@ -6906,7 +6993,6 @@ L_0881F044: } L_0881F04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F088; } @@ -6924,7 +7010,6 @@ L_0881F054: } L_0881F064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F0E8; } @@ -6932,7 +7017,6 @@ L_0881F064: } L_0881F06C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0881F088; } @@ -6959,7 +7043,6 @@ L_0881F088: L_0881F098: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0881F0B4; } @@ -6967,7 +7050,6 @@ L_0881F098: } L_0881F0A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F0C4; } @@ -6975,7 +7057,6 @@ L_0881F0A4: } L_0881F0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F0E8; } @@ -6998,7 +7079,6 @@ L_0881F0C4: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(12), ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F0E8; } @@ -7030,7 +7110,17 @@ L_0881F0E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F0FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7046,7 +7136,6 @@ L_0881F114: goto L_0881F11C; L_0881F11C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881F134; } @@ -7054,7 +7143,6 @@ L_0881F11C: } L_0881F124: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0881F134; } @@ -7070,7 +7158,6 @@ L_0881F12C: } L_0881F134: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0881F190; } @@ -7078,7 +7165,6 @@ L_0881F134: } L_0881F13C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881F180; } @@ -7107,7 +7193,6 @@ L_0881F16C: ctx.fpr[0] = std::bit_cast(aot_gpr_4); ctx.fpr[0] = aot_fpr_12 / ctx.fpr[0]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F1A0; } @@ -7137,7 +7222,17 @@ L_0881F1A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F1B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7187,7 +7282,6 @@ L_0881F23C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F260; } @@ -7210,7 +7304,17 @@ L_0881F260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F274: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -7238,7 +7342,17 @@ L_0881F294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F2BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7254,7 +7368,6 @@ L_0881F2D8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F300; } @@ -7272,7 +7385,6 @@ L_0881F300: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F368; } @@ -7281,7 +7393,6 @@ L_0881F300: L_0881F318: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0881F368; } @@ -7294,7 +7405,6 @@ L_0881F324: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F368; } @@ -7329,7 +7439,17 @@ L_0881F368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F37C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7357,7 +7477,6 @@ L_0881F3B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F3E4; } @@ -7428,7 +7547,17 @@ L_0881F458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F474: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7482,7 +7611,6 @@ L_0881F4F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F534; } @@ -7497,7 +7625,6 @@ L_0881F520: goto L_0881F6CC; L_0881F534: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0881F568; } @@ -7509,7 +7636,6 @@ L_0881F53C: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0881F568; } @@ -7537,7 +7663,17 @@ L_0881F568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F588: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -7607,7 +7743,6 @@ L_0881F5F8: goto L_0881F600; L_0881F600: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0881F630; } @@ -7616,7 +7751,6 @@ L_0881F600: L_0881F608: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2120))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0881F628; } @@ -7625,7 +7759,6 @@ L_0881F608: L_0881F614: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2120))); { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_0881F638; } @@ -7633,7 +7766,6 @@ L_0881F614: } L_0881F620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F640; } @@ -7657,7 +7789,6 @@ L_0881F630: } L_0881F638: { const bool branch_taken = ctx.gpr[16] != aot_gpr_17; - // nop if (branch_taken) { goto L_0881F628; } @@ -7669,7 +7800,6 @@ L_0881F640: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0881F664; } @@ -7678,7 +7808,6 @@ L_0881F640: L_0881F658: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != aot_gpr_17; - // nop if (branch_taken) { goto L_0881F6AC; } @@ -7705,7 +7834,6 @@ L_0881F67C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F6B4; } @@ -7742,7 +7870,17 @@ L_0881F6B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F6CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19]}; @@ -7772,7 +7910,6 @@ L_0881F6FC: AOT_REGCACHE_SYNC_OUT(); return; L_0881F724: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0881F784; } @@ -7827,14 +7964,23 @@ L_0881F784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F7A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(24))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881F800; } @@ -7861,7 +8007,6 @@ L_0881F7D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F808; } @@ -7869,7 +8014,6 @@ L_0881F7D0: } L_0881F7F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F868; } @@ -7877,7 +8021,6 @@ L_0881F7F8: } L_0881F800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881F868; } @@ -7889,7 +8032,6 @@ L_0881F808: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2048))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881F868; } @@ -7897,7 +8039,6 @@ L_0881F808: } L_0881F820: aot_gpr_31 = (0x0881F828u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 110u, 0x08A1CA0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881F828u) goto L_0881F828; AOT_REGCACHE_SYNC_OUT(); return; L_0881F828: @@ -7921,7 +8062,6 @@ L_0881F848: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F868; } @@ -7929,7 +8069,6 @@ L_0881F848: } L_0881F858: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881F868; } @@ -7947,7 +8086,17 @@ L_0881F868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F874: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -8117,7 +8266,6 @@ L_0881F9A8: } L_0881F9B4: aot_gpr_31 = (0x0881F9BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881F9BCu) goto L_0881F9BC; AOT_REGCACHE_SYNC_OUT(); return; L_0881F9BC: @@ -8142,7 +8290,17 @@ L_0881F9D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881F9F0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -8154,7 +8312,6 @@ L_0881F9F0: ctx.gpr[7] = (0u | 0u); ctx.gpr[8] = (ctx.gpr[7] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0881FA48; } @@ -8163,7 +8320,6 @@ L_0881F9F0: L_0881FA1C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_0881FA40; } @@ -8181,7 +8337,6 @@ L_0881FA28: } L_0881FA38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FA48; } @@ -8200,11 +8355,20 @@ L_0881FA48: goto L_0881FA4C; L_0881FA4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881FA54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -8216,7 +8380,17 @@ L_0881FA54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881FA70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -8270,7 +8444,6 @@ L_0881FAE4: aot_gpr_17 = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FB18; } @@ -8280,7 +8453,6 @@ L_0881FB08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(6))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881FB28; } @@ -8318,7 +8490,17 @@ L_0881FB2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881FB44: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); @@ -8341,7 +8523,6 @@ L_0881FB8C: ctx.gpr[21] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881FBB8; } @@ -8360,7 +8541,6 @@ L_0881FB9C: } L_0881FBB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FBF0; } @@ -8368,7 +8548,6 @@ L_0881FBB0: } L_0881FBB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEBC; } @@ -8381,7 +8560,6 @@ L_0881FBC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_0881FBE0; } @@ -8394,7 +8572,6 @@ L_0881FBE0: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FBC0; } @@ -8402,7 +8579,6 @@ L_0881FBE0: } L_0881FBF0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0881FC08; } @@ -8410,7 +8586,6 @@ L_0881FBF0: } L_0881FBF8: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0881FC10; } @@ -8418,7 +8593,6 @@ L_0881FBF8: } L_0881FC00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FD2C; } @@ -8426,7 +8600,6 @@ L_0881FC00: } L_0881FC08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEBC; } @@ -8435,7 +8608,6 @@ L_0881FC08: L_0881FC10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881FC98; } @@ -8449,7 +8621,6 @@ L_0881FC1C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881FC98; } @@ -8488,7 +8659,6 @@ L_0881FC70: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FCAC; } @@ -8503,7 +8673,6 @@ L_0881FC98: goto L_0881FCA4; L_0881FCA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FD2C; } @@ -8522,7 +8691,6 @@ L_0881FCAC: AOT_REGCACHE_SYNC_OUT(); return; L_0881FCCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEBC; } @@ -8534,7 +8702,6 @@ L_0881FCD4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881FD2C; } @@ -8561,7 +8728,6 @@ L_0881FD04: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FD74; } @@ -8589,7 +8755,6 @@ L_0881FD48: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FD9C; } @@ -8597,7 +8762,6 @@ L_0881FD48: } L_0881FD6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEBC; } @@ -8616,7 +8780,6 @@ L_0881FD74: AOT_REGCACHE_SYNC_OUT(); return; L_0881FD94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEBC; } @@ -8629,7 +8792,6 @@ L_0881FD9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_0881FEAC; } @@ -8637,7 +8799,6 @@ L_0881FD9C: } L_0881FDB8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0881FEA8; } @@ -8645,12 +8806,10 @@ L_0881FDB8: } L_0881FDC0: aot_gpr_31 = (0x0881FDC8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0881FDC8u) goto L_0881FDC8; AOT_REGCACHE_SYNC_OUT(); return; L_0881FDC8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0881FE0C; } @@ -8674,7 +8833,6 @@ L_0881FDD0: AOT_REGCACHE_SYNC_OUT(); return; L_0881FE04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEA0; } @@ -8683,7 +8841,6 @@ L_0881FE04: L_0881FE0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0881FEA0; } @@ -8707,7 +8864,6 @@ L_0881FE18: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FEA0; } @@ -8736,7 +8892,6 @@ L_0881FE94: goto L_0881FEA0; L_0881FEA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0881FEBC; } @@ -8749,7 +8904,6 @@ L_0881FEAC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FD9C; } @@ -8772,7 +8926,17 @@ L_0881FEBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881FEE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8795,7 +8959,6 @@ L_0881FF00: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0881FF34; } @@ -8804,7 +8967,6 @@ L_0881FF00: L_0881FF18: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0881FF34; } @@ -8823,7 +8985,6 @@ L_0881FF24: L_0881FF34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0881FF00; } @@ -8836,14 +8997,34 @@ L_0881FF40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881FF4C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0881FF54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8866,7 +9047,6 @@ L_0881FF84: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0881FFE4; } @@ -8888,7 +9068,6 @@ L_0881FFB0: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0881FFDC; } @@ -8901,7 +9080,6 @@ L_0881FFC4: AOT_REGCACHE_SYNC_OUT(); return; L_0881FFCC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0881FFEC; } @@ -8909,7 +9087,6 @@ L_0881FFCC: } L_0881FFD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0007_entry, 7u, 2u, 0x08820004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8938,7 +9115,6 @@ L_0881FFEC: AOT_REGCACHE_SYNC_OUT(); return; L_0881FFF4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0007_entry, 7u, 2u, 0x08820004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0007.cpp b/profiles/vcs/generated/generated_unit_0007.cpp index 4a1f186..65707c8 100644 --- a/profiles/vcs/generated/generated_unit_0007.cpp +++ b/profiles/vcs/generated/generated_unit_0007.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0007[4087] = { - 1, 2, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 7, 0, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, - 22, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 28, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, 0, 36, 0, 37, - 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, - 46, 0, 47, 0, 48, 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 57, 0, 58, 0, 59, 0, 0, 0, - 60, 0, 61, 0, 62, 0, 63, 0, 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 71, 0, 72, 0, 0, 0, 73, 0, 0, 74, 0, 0, 0, 75, 0, 76, - 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 83, 0, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 92, 0, - 0, 0, 0, 93, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 109, - 110, 0, 0, 111, 0, 0, 0, 112, 0, 0, 113, 114, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, - 0, 0, 121, 0, 0, 122, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, - 129, 0, 0, 0, 130, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 133, 0, 0, 134, 135, 0, 0, 136, 0, 0, 0, 0, 0, 0, - 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 146, 0, 147, 0, - 148, 149, 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 156, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 159, 0, 0, - 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, 169, 0, 170, 0, 0, 171, 0, 172, 0, 0, - 0, 0, 173, 0, 0, 174, 0, 175, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, - 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 186, 0, 0, 0, 187, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 190, - 0, 191, 0, 192, 193, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 197, 0, 198, 199, 0, - 0, 0, 200, 0, 0, 201, 0, 0, 202, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, - 0, 0, 0, 0, 205, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 208, 0, 209, 210, 0, 0, 211, 212, 0, 0, 213, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, - 217, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 225, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, - 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 245, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 251, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, - 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 256, 0, 257, 0, - 0, 0, 0, 258, 0, 259, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 0, 262, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, 266, 0, - 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, - 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, - 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 293, - 0, 294, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, 0, 0, 302, 0, 303, 0, 304, 0, 0, 0, 305, 0, 306, 0, 307, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 311, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 314, 0, 315, 0, 0, 0, 0, 316, 0, 317, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 320, 0, 321, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, - 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, - 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 333, 0, 0, 0, 0, 0, 334, 0, 335, 0, - 336, 0, 0, 337, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 342, 0, 0, - 0, 0, 0, 0, 0, 0, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, 0, 347, 0, 0, 0, 348, 0, 0, 0, 349, 0, 350, - 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, - 0, 354, 0, 355, 0, 356, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 361, 0, 0, 0, 362, 0, - 0, 363, 0, 0, 364, 0, 365, 0, 366, 0, 367, 0, 0, 368, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, - 372, 0, 373, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 375, 0, 376, 377, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, - 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, 0, 0, 0, - 0, 0, 386, 387, 0, 0, 0, 0, 0, 0, 388, 389, 0, 0, 0, 390, 391, 0, 392, 0, 393, 0, 394, 0, 395, 396, 0, 0, 0, 0, 0, 397, - 0, 398, 399, 0, 0, 0, 0, 400, 0, 401, 402, 0, 0, 0, 0, 403, 0, 404, 405, 0, 0, 0, 0, 0, 406, 0, 407, 408, 0, 0, 0, 0, - 409, 0, 410, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 0, 418, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 0, 420, 0, 421, 0, 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 425, 426, 0, 0, 0, 0, 427, 0, 428, 429, 0, 0, 0, 0, - 430, 0, 431, 432, 0, 0, 0, 0, 433, 0, 434, 435, 0, 0, 0, 0, 436, 0, 437, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 441, 0, - 442, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, - 0, 449, 0, 0, 0, 450, 0, 0, 0, 451, 0, 452, 453, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 458, 459, 0, 0, 0, 0, - 460, 0, 461, 0, 0, 462, 0, 463, 464, 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, - 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 487, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, - 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, - 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 507, 0, 508, 0, 0, 0, 509, 0, 0, - 0, 510, 0, 0, 511, 0, 512, 0, 513, 514, 0, 515, 0, 516, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 520, 0, 0, 0, 0, 521, 0, 522, 523, 0, 524, 0, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, - 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, 538, - 0, 539, 0, 540, 0, 541, 0, 0, 542, 0, 0, 543, 0, 544, 0, 545, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, 0, 549, 0, 550, 0, 551, - 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, 0, - 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, 565, 0, 566, 0, 567, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, - 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, - 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 577, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, 582, 583, 0, 0, 0, 0, 0, - 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 588, 0, 589, 0, 0, 590, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 596, 0, 0, - 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, - 606, 0, 607, 0, 608, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, - 0, 613, 0, 614, 0, 615, 0, 616, 0, 617, 0, 0, 0, 618, 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 621, 0, 622, 0, 623, 0, 624, 0, - 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 630, 0, 631, 0, 632, - 0, 0, 0, 633, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 0, 0, 643, 0, 644, 0, 645, 0, 0, 0, 0, 646, 647, - 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 651, 0, 0, 652, 0, 653, 0, 0, 0, 0, 654, 0, - 655, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 657, 0, 658, 659, 0, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 662, 0, - 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 669, - 0, 0, 0, 670, 0, 671, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 677, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 679, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 684, 685, - 0, 686, 0, 687, 0, 0, 688, 0, 0, 0, 689, 0, 0, 690, 0, 691, 0, 692, 0, 0, 0, 0, 693, 0, 0, 694, 695, 0, 696, 0, 697, 0, - 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 701, 0, 702, 0, 703, 0, 0, 0, - 0, 704, 0, 0, 705, 0, 0, 706, 0, 707, 0, 708, 0, 709, 0, 710, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 0, 716, 0, 717, 0, 718, - 0, 719, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, - 0, 723, 724, 0, 725, 0, 726, 727, 0, 728, 0, 729, 730, 0, 731, 0, 732, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 734, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 738, 739, 0, 0, - 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 742, 0, 0, 0, 0, 743, 0, 0, 0, 0, 744, 0, 745, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 748, 0, 0, 0, - 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 752, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0007[64] = { + 0x0404600252000087ull, 0x00100A0355548800ull, 0x4054A00AA0AA8152ull, 0x1504000205140515ull, + 0xA245410400601455ull, 0x400802084105100Aull, 0x0204022851041000ull, 0x8A10151120080080ull, + 0x4028808000100C89ull, 0x02648411280902A4ull, 0x544040400500A002ull, 0x205480010004204Bull, + 0x445412A429524955ull, 0x6882101A82515020ull, 0x2668805010000524ull, 0x0802020140900000ull, + 0x2210041060241000ull, 0x0040080211080208ull, 0x0010000008000400ull, 0x0001100001182010ull, + 0x5804000101300080ull, 0x4004001448948128ull, 0x0000888208240904ull, 0x0820000000000000ull, + 0x0000050028000000ull, 0xA208008004000080ull, 0x2A2A2080080102A2ull, 0x2850108200801008ull, + 0x2000000829400000ull, 0x5054001201201201ull, 0xA22C00C0228000A9ull, 0x4602282A80400080ull, + 0x000001050408A552ull, 0x1800010102085068ull, 0x0D06868683558C0Cull, 0x0D0D0A520255404Dull, + 0x40800002000D0D0Dull, 0x0D249A2222044105ull, 0x04201040120961A5ull, 0x0200000000000A80ull, + 0x08000C010000000Aull, 0x0000102800006000ull, 0x1004000100200800ull, 0x8001000210004280ull, + 0x05082B52228820A8ull, 0xA100955508052D08ull, 0x11042100A950A92Aull, 0x0415028401048420ull, + 0x0000810805080401ull, 0x0065410506809009ull, 0x2400455528014010ull, 0x5520A2AA40105015ull, + 0x00008018AA028820ull, 0x0000000000000000ull, 0x0000404800000000ull, 0x42921020C2A04890ull, + 0x000044024088D201ull, 0x1081AAA8A0048000ull, 0x5642A44AD2040800ull, 0xA955AA9215200808ull, + 0x00035AD621000042ull, 0x3008201400000000ull, 0x1082142100000801ull, 0x0048000002000004ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0007[64] = { + 1u, 13u, 27u, 46u, 60u, 77u, 88u, 98u, 110u, 121u, 137u, 148u, 160u, 183u, 200u, 214u, + 221u, 231u, 239u, 242u, 249u, 258u, 271u, 281u, 283u, 287u, 294u, 308u, 318u, 324u, 336u, 351u, + 363u, 375u, 386u, 409u, 430u, 442u, 460u, 475u, 479u, 485u, 490u, 495u, 502u, 520u, 539u, 557u, + 569u, 577u, 592u, 606u, 625u, 636u, 636u, 639u, 655u, 666u, 680u, 698u, 719u, 734u, 740u, 749u, }; void recomp_unit_0007_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0007_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08820000u; - entry_id = (entry_delta < 16348u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0007[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16348u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0007[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0007[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08820000; @@ -941,7 +848,17 @@ L_08820008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882001C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -983,7 +900,6 @@ L_08820070: L_08820078: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088200B8; } @@ -1059,7 +975,17 @@ L_088200C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088200E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_gpr_4 | 0u); @@ -1087,7 +1013,6 @@ L_0882012C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2228))); ctx.gpr[7] = (0u | 17u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08820170; } @@ -1096,7 +1021,6 @@ L_0882012C: L_0882013C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08820158; } @@ -1125,7 +1049,6 @@ L_08820158: } L_08820160: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08820184; } @@ -1149,7 +1072,6 @@ L_08820170: } L_08820178: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08820184; } @@ -1166,7 +1088,6 @@ L_08820184: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088201AC; } @@ -1192,7 +1113,17 @@ L_088201AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088201D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[19]); @@ -1221,7 +1152,6 @@ L_08820204: goto L_08820210; L_08820210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882027C; } @@ -1229,7 +1159,6 @@ L_08820210: } L_08820218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1242,7 +1171,6 @@ L_08820220: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882025C; } @@ -1255,7 +1183,6 @@ L_0882023C: AOT_REGCACHE_SYNC_OUT(); return; L_08820244: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882025C; } @@ -1268,7 +1195,6 @@ L_0882024C: AOT_REGCACHE_SYNC_OUT(); return; L_08820254: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08820274; } @@ -1291,7 +1217,6 @@ L_0882025C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088202BC; } @@ -1299,7 +1224,6 @@ L_0882025C: } L_08820274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1312,7 +1236,6 @@ L_0882027C: AOT_REGCACHE_SYNC_OUT(); return; L_08820284: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088202B4; } @@ -1347,7 +1270,6 @@ L_0882028C: } L_088202B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1372,7 +1294,6 @@ L_088202C8: } L_088202D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08820328; } @@ -1391,7 +1312,6 @@ L_088202D8: AOT_REGCACHE_SYNC_OUT(); return; L_088202F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1407,7 +1327,6 @@ L_08820300: } L_08820308: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1421,7 +1340,6 @@ L_08820310: goto L_08821A40; L_08820320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1440,7 +1358,6 @@ L_08820328: AOT_REGCACHE_SYNC_OUT(); return; L_08820348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1454,7 +1371,6 @@ L_08820350: goto L_08821968; L_08820360: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820368; } @@ -1474,7 +1390,17 @@ L_08820368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08820384: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -1597,7 +1523,6 @@ L_08820488: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088204FC; } @@ -1609,7 +1534,6 @@ L_088204A0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088204FC; } @@ -1617,7 +1541,6 @@ L_088204A0: } L_088204B8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088204E4; } @@ -1625,7 +1548,6 @@ L_088204B8: } L_088204C0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088204E4; } @@ -1660,7 +1582,6 @@ L_088204F4: goto L_088204FC; L_088204FC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08820540; } @@ -1668,7 +1589,6 @@ L_088204FC: } L_08820504: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08820540; } @@ -1696,7 +1616,6 @@ L_08820530: goto L_08820540; L_08820540: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0882058C; } @@ -1708,7 +1627,6 @@ L_08820548: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08820578; } @@ -1720,7 +1638,6 @@ L_08820560: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0882058C; } @@ -1743,7 +1660,6 @@ L_0882058C: aot_gpr_6 = (aot_gpr_6 >> 17u); aot_gpr_6 = (static_cast(aot_gpr_6) < 15 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088205CC; } @@ -1779,7 +1695,17 @@ L_088205CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088205F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -1805,7 +1731,6 @@ L_08820630: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08820660; } @@ -1817,7 +1742,6 @@ L_08820648: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08820694; } @@ -1827,7 +1751,6 @@ L_08820660: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882068C; } @@ -1902,7 +1825,6 @@ L_088206A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088206E4; } @@ -1971,9 +1893,7 @@ L_088206E4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882074C; } @@ -2016,7 +1936,6 @@ L_0882074C: L_08820774: aot_gpr_4 = (ctx.gpr[7] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088207A0; } @@ -2066,9 +1985,7 @@ L_088207B0: L_088207D0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08820800; } @@ -2084,9 +2001,7 @@ L_088207E4: } L_088207EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08820800; } @@ -2132,7 +2047,17 @@ L_0882082C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08820850: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -2171,7 +2096,6 @@ L_088208BC: goto L_08820B80; L_088208CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882091C; } @@ -2207,7 +2131,6 @@ L_08820908: } L_08820914: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882096C; } @@ -2228,7 +2151,6 @@ L_08820924: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882096C; } @@ -2276,7 +2198,6 @@ L_08820990: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088209D8; } @@ -2287,7 +2208,6 @@ L_088209A8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088209D4; } @@ -2310,7 +2230,6 @@ L_088209D4: L_088209D8: ctx.gpr[30] = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08820990; } @@ -2410,7 +2329,6 @@ L_08820AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08820AE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08820B04; } @@ -2423,7 +2341,6 @@ L_08820AF0: AOT_REGCACHE_SYNC_OUT(); return; L_08820AF8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08820B04; } @@ -2434,7 +2351,6 @@ L_08820B00: goto L_08820B04; L_08820B04: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08820B34; } @@ -2486,7 +2402,17 @@ L_08820B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08820B80: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); @@ -2510,7 +2436,6 @@ L_08820B80: L_08820BBC: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08820BD8; } @@ -2518,7 +2443,6 @@ L_08820BBC: } L_08820BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820C2C; } @@ -2539,7 +2463,6 @@ L_08820BD8: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08820C2C; } @@ -2553,7 +2476,6 @@ L_08820BF4: AOT_REGCACHE_SYNC_OUT(); return; L_08820C00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08820C20; } @@ -2566,7 +2488,6 @@ L_08820C08: AOT_REGCACHE_SYNC_OUT(); return; L_08820C10: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08820C20; } @@ -2588,7 +2509,6 @@ L_08820C20: L_08820C2C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(3))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08820C60; } @@ -2597,7 +2517,6 @@ L_08820C2C: L_08820C38: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(11))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08820C58; } @@ -2606,7 +2525,6 @@ L_08820C38: L_08820C44: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(5))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08820C74; } @@ -2614,7 +2532,6 @@ L_08820C44: } L_08820C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820D58; } @@ -2668,7 +2585,6 @@ L_08820C94: goto L_08820C9C; L_08820C9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08820D50; } @@ -2694,7 +2610,6 @@ L_08820CB0: AOT_REGCACHE_SYNC_OUT(); return; L_08820CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08820D50; } @@ -2702,7 +2617,6 @@ L_08820CC8: } L_08820CD0: aot_gpr_31 = (0x08820CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 230u, 0x089910A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08820CD8u) goto L_08820CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08820CD8: @@ -2749,7 +2663,6 @@ L_08820D30: AOT_REGCACHE_SYNC_OUT(); return; L_08820D38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08820D50; } @@ -2772,7 +2685,6 @@ L_08820D50: L_08820D58: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08820D8C; } @@ -2821,7 +2733,17 @@ L_08820D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08820DB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (16128u << 16u); @@ -2837,9 +2759,7 @@ L_08820DC4: aot_gpr_6 = (16256u << 16u); ctx.fpr[14] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08820DEC; } @@ -2847,9 +2767,7 @@ L_08820DC4: } L_08820DDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08820DF4; } @@ -2868,9 +2786,7 @@ L_08820DF4: goto L_08820DF8; L_08820DF8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08820E14; } @@ -2892,11 +2808,20 @@ L_08820E14: goto L_08820E20; L_08820E20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08820E28: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); @@ -2932,7 +2857,6 @@ L_08820E70: AOT_REGCACHE_SYNC_OUT(); return; L_08820E90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08820F50; } @@ -2955,7 +2879,6 @@ L_08820E98: } L_08820EBC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[14] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08820ED8; @@ -3082,7 +3005,6 @@ L_08820EF4: L_08820F50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821030; } @@ -3099,7 +3021,6 @@ L_08820F5C: AOT_REGCACHE_SYNC_OUT(); return; L_08820F78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08821030; } @@ -3114,7 +3035,6 @@ L_08820F80: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08821030; } @@ -3128,7 +3048,6 @@ L_08820FA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08820FEC; } @@ -3229,7 +3148,6 @@ L_08821030: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08821078; } @@ -3238,7 +3156,6 @@ L_08821030: L_08821048: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821078; } @@ -3252,7 +3169,6 @@ L_08821054: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821078; } @@ -3267,7 +3183,6 @@ L_08821078: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08821184; } @@ -3279,7 +3194,6 @@ L_08821090: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882110C; } @@ -3295,7 +3209,6 @@ L_088210A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (aot_gpr_5 + static_cast(160)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0882110C; } @@ -3336,7 +3249,6 @@ L_0882110C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08821184; } @@ -3352,7 +3264,6 @@ L_08821124: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (aot_gpr_5 + static_cast(80)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08821184; } @@ -3399,7 +3310,17 @@ L_08821184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088211AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3461,7 +3382,17 @@ L_08821228: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882126C: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(220), ctx.gpr[17]); @@ -3502,9 +3433,7 @@ L_088212D0: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[28] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08821590; } @@ -3517,9 +3446,7 @@ L_08821310: ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fpr[26] = ctx.fpr[26] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882134C; } @@ -3542,9 +3469,7 @@ L_0882134C: goto L_08821350; L_08821350: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08821520; } @@ -3616,7 +3541,6 @@ L_08821360: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821454; } @@ -3626,7 +3550,6 @@ L_088213B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821454; } @@ -3726,9 +3649,7 @@ L_0882141C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08821454; } @@ -3740,7 +3661,6 @@ L_08821450: L_08821454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088214F0; } @@ -3754,7 +3674,6 @@ L_08821460: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088214F0; } @@ -3803,9 +3722,7 @@ L_08821480: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19252))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088214F0; } @@ -3834,9 +3751,7 @@ L_088214C8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088214F0; } @@ -3847,7 +3762,6 @@ L_088214EC: goto L_088214F0; L_088214F0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08821514; } @@ -3866,7 +3780,6 @@ L_088214F8: AOT_REGCACHE_SYNC_OUT(); return; L_0882150C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08821520; } @@ -3897,7 +3810,6 @@ L_0882153C: AOT_REGCACHE_SYNC_OUT(); return; L_08821548: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08821590; } @@ -3911,9 +3823,7 @@ L_08821550: AOT_REGCACHE_SYNC_OUT(); return; L_0882155C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08821590; } @@ -3922,7 +3832,6 @@ L_0882155C: L_0882156C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821590; } @@ -3960,7 +3869,17 @@ L_08821590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088215C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3973,7 +3892,6 @@ L_088215C8: aot_gpr_6 = (aot_gpr_6 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08821608; } @@ -3992,7 +3910,6 @@ L_08821608: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088216AC; } @@ -4001,7 +3918,6 @@ L_08821608: L_08821620: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088216AC; } @@ -4014,7 +3930,6 @@ L_0882162C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088216AC; } @@ -4023,7 +3938,6 @@ L_0882162C: L_08821648: aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088216AC; } @@ -4046,7 +3960,6 @@ L_0882166C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088216AC; } @@ -4078,7 +3991,17 @@ L_088216AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088216BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-464)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4245,7 +4168,6 @@ L_088216BC: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_16 = (aot_gpr_6 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[7] | 0u); if (branch_taken) { @@ -4380,7 +4302,6 @@ L_088217EC: AOT_REGCACHE_SYNC_OUT(); return; L_0882186C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088218A8; } @@ -4545,7 +4466,17 @@ L_0882191C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08821968: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -4606,7 +4537,6 @@ L_08821A04: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821A24; } @@ -4614,7 +4544,6 @@ L_08821A04: } L_08821A14: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821A24; } @@ -4639,7 +4568,17 @@ L_08821A24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08821A40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -4698,7 +4637,6 @@ L_08821AD4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821AF4; } @@ -4706,7 +4644,6 @@ L_08821AD4: } L_08821AE4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08821AF4; } @@ -4730,7 +4667,17 @@ L_08821AF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08821B0C: ctx.gpr[9] = (2232u << 16u); ctx.gpr[10] = (ctx.gpr[7] & 255u); @@ -4757,7 +4704,6 @@ L_08821B30: ctx.gpr[7] = (ctx.gpr[7] >> 21u); ctx.gpr[7] = (ctx.gpr[7] & ctx.gpr[8]); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08821BD0; } @@ -4785,7 +4731,6 @@ L_08821B84: ctx.gpr[7] = (ctx.gpr[7] >> 21u); ctx.gpr[7] = (ctx.gpr[7] & ctx.gpr[8]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08821BB0; } @@ -4810,11 +4755,20 @@ L_08821BB0: goto L_08821BD0; L_08821BD0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08821BD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -4824,14 +4778,33 @@ L_08821BD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08821BEC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08821BF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); ctx.gpr[7] = (0u | 0u); @@ -5020,7 +4993,6 @@ L_08821DD8: goto L_08821DF0; L_08821DF0: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08821EE4; } @@ -5028,7 +5000,6 @@ L_08821DF0: } L_08821DF8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08821EE4; } @@ -5041,7 +5012,6 @@ L_08821E00: goto L_08821E0C; L_08821E0C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08821ED4; } @@ -5049,7 +5019,6 @@ L_08821E0C: } L_08821E14: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08821ED4; } @@ -5069,7 +5038,6 @@ L_08821E1C: { const float fs = ctx.fpr[19]; const float ft = ctx.fpr[19]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fpr[17] = ctx.fpr[2] + ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(ctx.fpr[19])); if (branch_taken) { @@ -5079,7 +5047,6 @@ L_08821E1C: } L_08821E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08821ECC; } @@ -5087,9 +5054,7 @@ L_08821E5C: } L_08821E64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[17]) || std::isnan(aot_fpr_12)) && ctx.fpr[17] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08821E98; } @@ -5122,9 +5087,7 @@ L_08821E9C: { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fpr[17] = ctx.fpr[17] + ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08821ECC; } @@ -5203,7 +5166,6 @@ L_08821F58: aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(168), static_cast(aot_gpr_16)); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08821F84; } @@ -5211,7 +5173,6 @@ L_08821F58: } L_08821F7C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882203C; } @@ -5224,7 +5185,6 @@ L_08821F84: AOT_REGCACHE_SYNC_OUT(); return; L_08821F8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08821FAC; } @@ -5236,7 +5196,6 @@ L_08821F94: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882203C; } @@ -5265,7 +5224,6 @@ L_08821FC4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08821FE8; } @@ -5284,7 +5242,6 @@ L_08821FE8: L_08821FF8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882203C; } @@ -5293,7 +5250,6 @@ L_08821FF8: L_08822004: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08822034; } @@ -5301,7 +5257,6 @@ L_08822004: } L_08822010: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0882203C; } @@ -5314,7 +5269,6 @@ L_08822018: AOT_REGCACHE_SYNC_OUT(); return; L_08822020: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08822034; } @@ -5323,7 +5277,6 @@ L_08822020: L_08822028: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882203C; } @@ -5337,7 +5290,6 @@ L_0882203C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0882230C; } @@ -5362,7 +5314,6 @@ L_08822068: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822088; } @@ -5380,9 +5331,7 @@ L_08822088: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(328))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08822118; } @@ -5431,7 +5380,6 @@ L_088220A0: AOT_REGCACHE_SYNC_OUT(); return; L_0882210C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822118; } @@ -5450,7 +5398,6 @@ L_08822118: goto L_08821B0C; L_08822130: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822164; } @@ -5496,7 +5443,6 @@ L_08822180: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822240; } @@ -5546,9 +5492,7 @@ L_088221A0: aot_gpr_5 = (aot_gpr_5 | 15728u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088221F0; } @@ -5561,9 +5505,7 @@ L_088221F0: aot_gpr_5 = (16656u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882220C; } @@ -5577,9 +5519,7 @@ L_0882220C: aot_gpr_5 = (aot_gpr_5 | 55051u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882222C; } @@ -5592,7 +5532,6 @@ L_0882222C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822240; } @@ -5608,7 +5547,6 @@ L_08822240: AOT_REGCACHE_SYNC_OUT(); return; L_08822248: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822264; } @@ -5621,7 +5559,6 @@ L_08822250: AOT_REGCACHE_SYNC_OUT(); return; L_08822258: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822264; } @@ -5640,7 +5577,6 @@ L_08822264: goto L_08821B0C; L_0882227C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822288; } @@ -5658,7 +5594,6 @@ L_08822288: goto L_08821B0C; L_0882229C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088222A8; } @@ -5676,7 +5611,6 @@ L_088222A8: goto L_08821B0C; L_088222BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088222C8; } @@ -5695,7 +5629,6 @@ L_088222C8: goto L_08821B0C; L_088222E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088222EC; } @@ -5713,7 +5646,6 @@ L_088222EC: goto L_08821B0C; L_08822300: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882230C; } @@ -5725,7 +5657,6 @@ L_08822308: L_0882230C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822398; } @@ -5739,7 +5670,6 @@ L_08822318: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822358; } @@ -5752,7 +5682,6 @@ L_08822338: AOT_REGCACHE_SYNC_OUT(); return; L_08822340: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822350; } @@ -5764,7 +5693,6 @@ L_08822348: goto L_08822350; L_08822350: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822398; } @@ -5773,7 +5701,6 @@ L_08822350: L_08822358: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822398; } @@ -5787,7 +5714,6 @@ L_08822364: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822398; } @@ -5796,7 +5722,6 @@ L_08822364: L_08822384: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822398; } @@ -5809,7 +5734,6 @@ L_08822390: L_08822398: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088223AC; } @@ -5828,7 +5752,6 @@ L_088223AC: goto L_08821B0C; L_088223C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088223CC; } @@ -5846,7 +5769,6 @@ L_088223CC: goto L_08821B0C; L_088223E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088223EC; } @@ -5864,7 +5786,6 @@ L_088223EC: goto L_08821B0C; L_08822400: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882240C; } @@ -5882,7 +5803,6 @@ L_0882240C: goto L_08821B0C; L_08822420: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882242C; } @@ -5900,7 +5820,6 @@ L_0882242C: goto L_08821B0C; L_08822440: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882244C; } @@ -5930,7 +5849,17 @@ L_0882244C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08822484: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); @@ -5973,7 +5902,6 @@ L_088224DC: } L_088224F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822548; } @@ -5981,7 +5909,6 @@ L_088224F8: } L_08822500: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822B84; } @@ -6026,7 +5953,6 @@ L_08822548: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088225B0; } @@ -6036,7 +5962,6 @@ L_08822564: ctx.gpr[17] = (ctx.gpr[23] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(352))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088225AC; } @@ -6073,7 +5998,6 @@ L_088225AC: L_088225B0: aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08822664; } @@ -6103,7 +6027,6 @@ L_088225D4: goto L_088225E0; L_088225E0: aot_gpr_31 = (0x088225E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088225E8u) goto L_088225E8; AOT_REGCACHE_SYNC_OUT(); return; L_088225E8: @@ -6134,7 +6057,6 @@ L_08822608: goto L_08822614; L_08822614: aot_gpr_31 = (0x0882261Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882261Cu) goto L_0882261C; AOT_REGCACHE_SYNC_OUT(); return; L_0882261C: @@ -6153,7 +6075,6 @@ L_08822634: goto L_08822638; L_08822638: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08822664; } @@ -6176,7 +6097,6 @@ L_0882264C: L_08822664: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08822698; } @@ -6192,7 +6112,6 @@ L_08822670: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822724; } @@ -6240,7 +6159,6 @@ L_088226E8: aot_gpr_5 = (aot_gpr_6 | 0u); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882272C; } @@ -6248,7 +6166,6 @@ L_088226E8: } L_0882271C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822B1C; } @@ -6256,7 +6173,6 @@ L_0882271C: } L_08822724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822B84; } @@ -6349,7 +6265,6 @@ L_088227E4: goto L_08822804; L_08822804: aot_gpr_31 = (0x0882280Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882280Cu) goto L_0882280C; AOT_REGCACHE_SYNC_OUT(); return; L_0882280C: @@ -6416,7 +6331,6 @@ L_08822880: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822804; } @@ -6496,7 +6410,6 @@ L_08822938: AOT_REGCACHE_SYNC_OUT(); return; L_0882298C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08822B1C; } @@ -6565,7 +6478,6 @@ L_088229B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822A80; } @@ -6595,7 +6507,6 @@ L_08822A54: aot_gpr_16 = (aot_gpr_16 & 255u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822A2C; } @@ -6630,7 +6541,6 @@ L_08822A80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822B1C; } @@ -6660,7 +6570,6 @@ L_08822AF0: aot_gpr_16 = (aot_gpr_16 & 255u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822AC8; } @@ -6668,7 +6577,6 @@ L_08822AF0: } L_08822B1C: aot_gpr_31 = (0x08822B24u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08822B24u) goto L_08822B24; AOT_REGCACHE_SYNC_OUT(); return; L_08822B24: @@ -6693,7 +6601,6 @@ L_08822B38: aot_gpr_5 = (aot_gpr_6 | 0u); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822B84; } @@ -6740,7 +6647,17 @@ L_08822B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08822BC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6766,7 +6683,6 @@ L_08822BFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08822C14; } @@ -6791,7 +6707,6 @@ L_08822C1C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822CA4; } @@ -6803,7 +6718,6 @@ L_08822C34: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822CA4; } @@ -6813,7 +6727,6 @@ L_08822C4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822C64; } @@ -6831,7 +6744,6 @@ L_08822C64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822C84; } @@ -6841,7 +6753,6 @@ L_08822C74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822CA4; } @@ -6850,7 +6761,6 @@ L_08822C74: L_08822C84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822CA0; } @@ -6863,7 +6773,6 @@ L_08822C90: AOT_REGCACHE_SYNC_OUT(); return; L_08822C98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08822CA4; } @@ -6879,7 +6788,6 @@ L_08822CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08822CAC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08822CE8; } @@ -6901,7 +6809,6 @@ L_08822CCC: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(11))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08822D28; } @@ -6909,7 +6816,6 @@ L_08822CCC: } L_08822CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822D2C; } @@ -6939,7 +6845,6 @@ L_08822D0C: AOT_REGCACHE_SYNC_OUT(); return; L_08822D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088230A0; } @@ -6950,7 +6855,6 @@ L_08822D28: goto L_08822D2C; L_08822D2C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08822D48; } @@ -6997,7 +6901,6 @@ L_08822D6C: AOT_REGCACHE_SYNC_OUT(); return; L_08822D80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088230A0; } @@ -7021,7 +6924,6 @@ L_08822D90: } L_08822D98: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08822F3C; } @@ -7029,7 +6931,6 @@ L_08822D98: } L_08822DA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088230A0; } @@ -7046,7 +6947,6 @@ L_08822DA8: L_08822DB0: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08823068; } @@ -7076,7 +6976,6 @@ L_08822DE0: AOT_REGCACHE_SYNC_OUT(); return; L_08822DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088230A0; } @@ -7084,7 +6983,6 @@ L_08822DF4: } L_08822DFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822DA0; } @@ -7092,7 +6990,6 @@ L_08822DFC: } L_08822E04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08823068; } @@ -7118,7 +7015,6 @@ L_08822E14: L_08822E20: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 27 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08823068; } @@ -7126,7 +7022,6 @@ L_08822E20: } L_08822E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822F3C; } @@ -7134,7 +7029,6 @@ L_08822E2C: } L_08822E34: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08823068; } @@ -7150,7 +7044,6 @@ L_08822E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08822E50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088230A0; } @@ -7167,7 +7060,6 @@ L_08822E58: L_08822E60: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 57 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08823068; } @@ -7175,7 +7067,6 @@ L_08822E60: } L_08822E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08822EC8; } @@ -7183,7 +7074,6 @@ L_08822E6C: } L_08822E74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823068; } @@ -7228,7 +7118,6 @@ L_08822EC8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08822EF0; } @@ -7302,7 +7191,6 @@ L_08822F60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823060; } @@ -7318,7 +7206,6 @@ L_08822F88: AOT_REGCACHE_SYNC_OUT(); return; L_08822F9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08823060; } @@ -7331,7 +7218,6 @@ L_08822FA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823060; } @@ -7344,7 +7230,6 @@ L_08822FC0: AOT_REGCACHE_SYNC_OUT(); return; L_08822FC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08823060; } @@ -7356,7 +7241,6 @@ L_08822FD0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08823060; } @@ -7383,7 +7267,6 @@ L_08823000: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823060; } @@ -7413,7 +7296,6 @@ L_0882304C: AOT_REGCACHE_SYNC_OUT(); return; L_08823060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088230A0; } @@ -7455,7 +7337,17 @@ L_088230A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088230BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[17]); @@ -7510,7 +7402,6 @@ L_0882313C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823164; } @@ -7533,7 +7424,6 @@ L_08823168: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088231A0; } @@ -7541,7 +7431,6 @@ L_08823168: } L_08823180: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088231A0; } @@ -7553,7 +7442,6 @@ L_08823188: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088231C0; } @@ -7565,7 +7453,6 @@ L_088231A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088231C8; } @@ -7590,7 +7477,6 @@ L_088231C0: L_088231C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088232A0; } @@ -7624,7 +7510,6 @@ L_08823210: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(4))); aot_gpr_5 = (ctx.gpr[3] | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -7634,7 +7519,6 @@ L_08823210: } L_08823238: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08823290; } @@ -7651,7 +7535,6 @@ L_08823240: aot_gpr_4 = (aot_gpr_6 & aot_gpr_4); aot_gpr_16 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08823274; } @@ -7659,7 +7542,6 @@ L_08823240: } L_0882326C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08823288; } @@ -7668,7 +7550,6 @@ L_0882326C: L_08823274: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088232A8; } @@ -7676,7 +7557,6 @@ L_08823274: } L_08823280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088233A4; } @@ -7718,7 +7598,6 @@ L_088232A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08823310; } @@ -7772,7 +7651,6 @@ L_088232B8: L_088232E8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08823310; } @@ -7786,7 +7664,6 @@ L_088232F4: AOT_REGCACHE_SYNC_OUT(); return; L_08823300: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08823310; } @@ -7808,7 +7685,6 @@ L_08823310: aot_gpr_5 = (aot_gpr_5 & ctx.gpr[7]); aot_gpr_4 = (aot_gpr_4 & aot_gpr_6); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08823338; } @@ -7816,7 +7692,6 @@ L_08823310: } L_08823330: { const bool branch_taken = aot_gpr_5 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0882338C; } @@ -7843,7 +7718,6 @@ L_08823350: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882338C; } @@ -7857,7 +7731,6 @@ L_08823378: AOT_REGCACHE_SYNC_OUT(); return; L_08823384: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882339C; } @@ -7865,7 +7738,6 @@ L_08823384: } L_0882338C: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_088233BC; } @@ -7873,7 +7745,6 @@ L_0882338C: } L_08823394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882347C; } @@ -7891,7 +7762,6 @@ L_088233A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_0882338C; } @@ -7924,7 +7794,6 @@ L_088233D4: AOT_REGCACHE_SYNC_OUT(); return; L_088233E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882346C; } @@ -7937,7 +7806,6 @@ L_088233E8: AOT_REGCACHE_SYNC_OUT(); return; L_088233F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08823464; } @@ -7975,7 +7843,6 @@ L_0882342C: AOT_REGCACHE_SYNC_OUT(); return; L_0882343C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08823464; } @@ -7987,9 +7854,7 @@ L_08823444: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08823474; } @@ -8023,7 +7888,6 @@ L_0882347C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(14))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08823464; } @@ -8050,7 +7914,17 @@ L_08823490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088234BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 255u); @@ -8177,7 +8051,17 @@ L_0882368C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823698: aot_gpr_5 = (2235u << 16u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); @@ -8190,7 +8074,17 @@ L_08823698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088236B8: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); ctx.gpr[2] = (2235u << 16u); @@ -8261,7 +8155,17 @@ L_088236B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823710: ctx.gpr[2] = (2178u << 16u); jump_target = aot_gpr_31; @@ -8269,12 +8173,21 @@ L_08823710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882371C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0882372Cu); - // nop goto L_08823710; L_0882372C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8283,7 +8196,17 @@ L_0882372C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823738: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8301,7 +8224,6 @@ L_08823754: goto L_0882375C; L_0882375C: aot_gpr_31 = (0x08823764u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823764u) goto L_08823764; AOT_REGCACHE_SYNC_OUT(); return; L_08823764: @@ -8309,7 +8231,6 @@ L_08823764: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882377C; } @@ -8331,7 +8252,17 @@ L_0882377C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8362,7 +8293,6 @@ L_088237C4: L_088237D0: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088237E4; } @@ -8385,14 +8315,34 @@ L_088237E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088237F8: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -8429,7 +8379,17 @@ L_0882383C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882384C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8459,7 +8419,17 @@ L_08823878: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823884: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -8568,7 +8538,17 @@ L_0882393C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823948: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8585,7 +8565,6 @@ L_08823948: AOT_REGCACHE_SYNC_OUT(); return; L_08823974: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088239C0; } @@ -8634,7 +8613,6 @@ L_088239AC: AOT_REGCACHE_SYNC_OUT(); return; L_088239B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088239C0; } @@ -8657,7 +8635,17 @@ L_088239C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088239DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8685,7 +8673,17 @@ L_088239F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823A2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8706,7 +8704,6 @@ L_08823A48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08823A84; } @@ -8721,7 +8718,6 @@ L_08823A64: goto L_08823A70; L_08823A70: aot_gpr_31 = (0x08823A78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823A78u) goto L_08823A78; AOT_REGCACHE_SYNC_OUT(); return; L_08823A78: @@ -8740,7 +8736,6 @@ L_08823A84: L_08823A8C: aot_gpr_4 = (ctx.gpr[17] + static_cast(128)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823ABC; } @@ -8750,7 +8745,6 @@ L_08823A98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823ABC; } @@ -8759,7 +8753,6 @@ L_08823A98: L_08823AA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823ABC; } @@ -8767,7 +8760,6 @@ L_08823AA8: } L_08823AB4: aot_gpr_31 = (0x08823ABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823ABCu) goto L_08823ABC; AOT_REGCACHE_SYNC_OUT(); return; L_08823ABC: @@ -8797,7 +8789,6 @@ L_08823AE4: goto L_08823AE8; L_08823AE8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823AF8; } @@ -8820,7 +8811,17 @@ L_08823AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8842,7 +8843,6 @@ L_08823B2C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08823C04; } @@ -8857,7 +8857,6 @@ L_08823B54: goto L_08823B60; L_08823B60: aot_gpr_31 = (0x08823B68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823B68u) goto L_08823B68; AOT_REGCACHE_SYNC_OUT(); return; L_08823B68: @@ -8895,7 +8894,6 @@ L_08823B9C: goto L_08823BA4; L_08823BA4: aot_gpr_31 = (0x08823BACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823BACu) goto L_08823BAC; AOT_REGCACHE_SYNC_OUT(); return; L_08823BAC: @@ -8918,7 +8916,6 @@ L_08823BC0: goto L_08823BC8; L_08823BC8: aot_gpr_31 = (0x08823BD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823BD0u) goto L_08823BD0; AOT_REGCACHE_SYNC_OUT(); return; L_08823BD0: @@ -8939,7 +8936,6 @@ L_08823BE0: goto L_08823BEC; L_08823BEC: aot_gpr_31 = (0x08823BF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823BF4u) goto L_08823BF4; AOT_REGCACHE_SYNC_OUT(); return; L_08823BF4: @@ -8963,7 +8959,17 @@ L_08823C04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823C18: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[17]); @@ -9009,7 +9015,6 @@ L_08823C88: AOT_REGCACHE_SYNC_OUT(); return; L_08823C90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08823C9C; } @@ -9025,7 +9030,6 @@ L_08823C9C: AOT_REGCACHE_SYNC_OUT(); return; L_08823CA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08823CB0; } @@ -9041,7 +9045,6 @@ L_08823CB0: AOT_REGCACHE_SYNC_OUT(); return; L_08823CB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08823CC4; } @@ -9132,7 +9135,6 @@ L_08823CC4: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(86), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08823D88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08823D88u) goto L_08823D88; AOT_REGCACHE_SYNC_OUT(); return; L_08823D88: @@ -9202,7 +9204,17 @@ L_08823E00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_6); @@ -9292,7 +9304,17 @@ L_08823EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08823F08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -9316,7 +9338,6 @@ L_08823F08: aot_gpr_4 = (ctx.gpr[17] & 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08823FCC; } @@ -9353,7 +9374,6 @@ L_08823F64: L_08823FCC: aot_gpr_4 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 2u, 0x08824040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0008.cpp b/profiles/vcs/generated/generated_unit_0008.cpp index d4baf29..95b7b78 100644 --- a/profiles/vcs/generated/generated_unit_0008.cpp +++ b/profiles/vcs/generated/generated_unit_0008.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0008[4092] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, - 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 24, 0, 25, 0, 0, 26, 0, - 0, 0, 27, 0, 0, 0, 28, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, - 34, 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 40, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, - 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, 0, - 76, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, - 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 85, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, 97, 0, 0, - 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 103, 0, 104, 0, 105, 0, 106, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 111, 112, 113, 0, 114, 0, 115, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, - 118, 119, 120, 0, 121, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 125, 126, 127, 0, 128, 0, 0, 129, 0, 130, - 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 136, 0, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 140, 0, 141, 0, - 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 0, 0, 149, 0, 150, 0, 151, 0, 0, 0, 0, 152, - 0, 153, 154, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, - 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 173, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, - 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 0, 181, 0, 0, 0, - 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 187, 0, 188, 0, 0, 0, 0, 189, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 194, - 0, 0, 0, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 200, 0, 0, 0, - 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 0, - 0, 207, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 214, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, - 0, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, 0, 232, 0, 0, 0, - 0, 0, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 237, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, - 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 244, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 0, 0, 0, 254, 255, 256, 0, 257, 258, 259, 0, 260, 261, 0, 0, 0, 0, - 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 264, 0, 0, 265, 0, 0, 266, 0, 267, 0, 0, 0, 0, 268, 0, 269, 0, - 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 272, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 277, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 282, - 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 0, 288, 0, 0, - 289, 0, 290, 291, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, - 295, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 298, 0, 299, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 303, 0, 0, 304, - 305, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 311, 0, 0, 0, 0, 312, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, - 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 0, 0, 320, 0, 0, 321, 0, 0, - 0, 322, 0, 0, 323, 0, 0, 0, 0, 324, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 329, - 0, 0, 330, 331, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, - 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 343, 0, 0, 0, 344, 0, - 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 347, - 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 349, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 358, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, - 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, - 0, 0, 367, 368, 369, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 374, 375, 0, 376, 0, 0, 0, 377, - 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 379, 380, 381, 0, 382, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 390, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, - 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, - 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 402, - 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 406, 0, 0, 407, - 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, 0, 418, 0, 0, - 0, 0, 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, - 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, - 432, 0, 0, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 437, 438, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, - 0, 0, 440, 0, 0, 0, 0, 441, 0, 442, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 445, 0, 446, 447, 0, 0, 0, 0, 0, 448, 0, - 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 450, 0, 451, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 455, 456, 0, 0, 0, 0, - 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 459, 0, 460, 461, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, 471, - 0, 0, 472, 0, 0, 473, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 481, - 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, - 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, - 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, - 0, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 511, 0, 0, 0, 512, 0, 0, 0, - 0, 513, 0, 0, 514, 0, 0, 515, 0, 0, 0, 516, 0, 517, 0, 518, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 526, 0, 0, - 527, 528, 0, 0, 529, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 532, 533, 0, 534, 0, 0, 0, 0, 535, 0, 536, 0, 537, 0, 538, 0, 0, - 539, 0, 0, 540, 0, 0, 541, 0, 0, 542, 0, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 546, 0, 547, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, - 549, 0, 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 0, 558, 0, - 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 561, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, 565, - 0, 566, 0, 0, 567, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 571, 0, 0, 572, 0, 0, 0, 0, 0, 0, - 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, - 0, 0, 0, 580, 0, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 588, 0, 589, 0, 0, 590, 0, 0, 0, 591, 0, 592, 0, 593, 0, 0, 0, 0, - 0, 594, 0, 0, 0, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, - 598, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0008[64] = { + 0x4921200000090001ull, 0x0400909000000492ull, 0x024410C44A224802ull, 0x0220016400202441ull, + 0x0040001002000081ull, 0x020804800101AAAAull, 0x0404010100404001ull, 0x0000082912040404ull, + 0x02A8200540000000ull, 0x06A9111121448AA8ull, 0x040AB82000000108ull, 0x00A40028A5C10297ull, + 0x8545545052000290ull, 0x0000100000000406ull, 0x0000000090000000ull, 0x0000000000048000ull, + 0x0000001249248024ull, 0x0800001200900000ull, 0x429248011240A002ull, 0x8421000000010000ull, + 0x0000000004000210ull, 0x1204000000000000ull, 0x0000481204812048ull, 0x0000000000004090ull, + 0x1000080000020021ull, 0x1110104002020200ull, 0x0020111011101110ull, 0x0122400208010089ull, + 0x50A484080DDC2AAAull, 0x8401240090223480ull, 0x0820080D24208090ull, 0x002440519204D221ull, + 0x2448000202011142ull, 0x0100428C90204A12ull, 0x820000104648140Aull, 0x4884204001041420ull, + 0x0812100402104000ull, 0x0412E0408B81045Cull, 0x2420000000000000ull, 0x0001200000000000ull, + 0x0000000900000000ull, 0x2000000002080000ull, 0x9000000480000024ull, 0x9040802082000000ull, + 0x0000800010002442ull, 0x2420004824200088ull, 0x0081000000000048ull, 0x0834424100800D00ull, + 0x0D10942041A21284ull, 0xA10484200149A102ull, 0x824A000000201224ull, 0x0002000000000100ull, + 0x0914240200000001ull, 0x0200080020088442ull, 0x0002008408100401ull, 0x0005A89211481400ull, + 0x2A85845324800920ull, 0x0000000050221249ull, 0x4A85044908000000ull, 0x0248811281404920ull, + 0x004422082008940Aull, 0x080008820A894422ull, 0x2105000010000101ull, 0x0901090000000001ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0008[64] = { + 1u, 10u, 19u, 34u, 45u, 50u, 64u, 71u, 80u, 88u, 108u, 118u, 136u, 153u, 157u, 159u, + 161u, 171u, 176u, 190u, 195u, 198u, 201u, 211u, 214u, 219u, 227u, 237u, 247u, 270u, 283u, 295u, + 311u, 322u, 336u, 348u, 359u, 367u, 385u, 388u, 390u, 392u, 395u, 401u, 408u, 414u, 424u, 428u, + 440u, 457u, 472u, 482u, 484u, 492u, 500u, 507u, 521u, 539u, 548u, 559u, 573u, 585u, 598u, 605u, }; void recomp_unit_0008_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0008_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08824000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0008[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0008[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0008[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08824000; @@ -802,7 +709,6 @@ L_08824000: L_08824040: aot_gpr_4 = (ctx.gpr[17] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088240B4; } @@ -839,7 +745,6 @@ L_0882404C: L_088240B4: aot_gpr_4 = (ctx.gpr[17] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088240D4; } @@ -855,7 +760,6 @@ L_088240C0: L_088240D4: aot_gpr_4 = (ctx.gpr[17] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088240EC; } @@ -870,7 +774,6 @@ L_088240E0: L_088240EC: aot_gpr_4 = (ctx.gpr[17] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08824104; } @@ -885,7 +788,6 @@ L_088240F8: L_08824104: aot_gpr_4 = (ctx.gpr[17] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882411C; } @@ -900,7 +802,6 @@ L_08824110: L_0882411C: aot_gpr_4 = (ctx.gpr[17] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08824190; } @@ -937,7 +838,6 @@ L_08824128: L_08824190: aot_gpr_4 = (ctx.gpr[17] & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088241B0; } @@ -953,7 +853,6 @@ L_0882419C: L_088241B0: aot_gpr_4 = (ctx.gpr[17] & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088241E8; } @@ -986,7 +885,17 @@ L_088241E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824204: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -1003,7 +912,6 @@ L_08824204: L_0882422C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882426C; } @@ -1072,7 +980,17 @@ L_0882429C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088242B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -1108,7 +1026,17 @@ L_088242E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824300: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -1145,7 +1073,17 @@ L_08824334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824354: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), std::bit_cast(ctx.fpr[24])); @@ -1219,9 +1157,7 @@ L_088243A0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824534; } @@ -1239,9 +1175,7 @@ L_088243E4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7792))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882452C; } @@ -1252,9 +1186,7 @@ L_08824400: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7796))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824524; } @@ -1275,7 +1207,6 @@ L_0882441C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), std::bit_cast(aot_fpr_12)); aot_fpr_12 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), std::bit_cast(ctx.fpr[24])); if (branch_taken) { @@ -1292,9 +1223,7 @@ L_08824464: { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824514; } @@ -1316,7 +1245,6 @@ L_08824490: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(aot_fpr_12)); aot_fpr_12 = aot_fpr_14 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -1333,9 +1261,7 @@ L_088244D8: { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882453C; } @@ -1415,7 +1341,17 @@ L_08824540: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824560: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -1451,7 +1387,17 @@ L_0882459C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088245A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1629,7 +1575,6 @@ L_08824770: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08824794; } @@ -1638,7 +1583,6 @@ L_08824770: L_08824780: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08824794; } @@ -1720,21 +1664,49 @@ L_088247AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824878: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824880: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824888: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -1760,7 +1732,6 @@ L_088248CC: goto L_088248D4; L_088248D4: aot_gpr_31 = (0x088248DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088248DCu) goto L_088248DC; AOT_REGCACHE_SYNC_OUT(); return; L_088248DC: @@ -1777,7 +1748,6 @@ L_088248E4: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088249E4; } @@ -1793,7 +1763,6 @@ L_0882490C: } L_08824914: aot_gpr_31 = (0x0882491Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882491Cu) goto L_0882491C; AOT_REGCACHE_SYNC_OUT(); return; L_0882491C: @@ -1815,7 +1784,6 @@ L_0882492C: L_0882493C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08824974; } @@ -1830,7 +1798,6 @@ L_08824948: AOT_REGCACHE_SYNC_OUT(); return; L_08824958: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08824974; } @@ -1841,7 +1808,6 @@ L_08824960: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08824980; } @@ -1887,7 +1853,6 @@ L_088249B0: L_088249C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(341)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088249D4; } @@ -1907,7 +1872,6 @@ L_088249D4: goto L_088249DC; L_088249DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088248CC; } @@ -1932,7 +1896,17 @@ L_088249E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824A0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); aot_gpr_4 = (aot_gpr_4 << 24u); @@ -1942,7 +1916,17 @@ L_08824A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), ctx.gpr[19]); @@ -1982,7 +1966,6 @@ L_08824A94: ctx.gpr[11] = (16128u << 16u); aot_fpr_15 = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -1998,7 +1981,6 @@ L_08824AB0: goto L_08824AB4; L_08824AB4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08824AC4; } @@ -2021,7 +2003,6 @@ L_08824ACC: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -2033,7 +2014,6 @@ L_08824AE8: ctx.gpr[11] = (16128u << 16u); aot_fpr_15 = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2049,7 +2029,6 @@ L_08824B04: goto L_08824B08; L_08824B08: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08824B1C; } @@ -2073,7 +2052,6 @@ L_08824B24: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -2085,7 +2063,6 @@ L_08824B40: ctx.gpr[11] = (16128u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2101,7 +2078,6 @@ L_08824B5C: goto L_08824B60; L_08824B60: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08824B74; } @@ -2124,7 +2100,6 @@ L_08824B7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(32))); ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08824B94; } @@ -2172,9 +2147,7 @@ L_08824B94: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824BD4; } @@ -2242,9 +2215,7 @@ L_08824BDC: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824C1C; } @@ -2315,9 +2286,7 @@ L_08824C24: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824C70; } @@ -2351,9 +2320,7 @@ L_08824C78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(96))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08824C98; } @@ -2367,7 +2334,6 @@ L_08824C98: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(102))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(102))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08824CC0; } @@ -2375,7 +2341,6 @@ L_08824C98: } L_08824CA8: aot_gpr_31 = (0x08824CB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08824CB0u) goto L_08824CB0; AOT_REGCACHE_SYNC_OUT(); return; L_08824CB0: @@ -2385,7 +2350,6 @@ L_08824CB0: AOT_REGCACHE_SYNC_OUT(); return; L_08824CB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08824CC8; } @@ -2399,7 +2363,6 @@ L_08824CC8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(100))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08824CE0; } @@ -2411,7 +2374,6 @@ L_08824CD8: goto L_08824CE0; L_08824CE0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08824D04; } @@ -2450,7 +2412,17 @@ L_08824D08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08824D28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2483,7 +2455,6 @@ L_08824D28: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_16 = (ctx.gpr[7] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08824E70; } @@ -2542,7 +2513,6 @@ L_08824DB0: L_08824E70: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08824F3C; } @@ -2601,7 +2571,6 @@ L_08824E7C: L_08824F3C: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825008; } @@ -2660,7 +2629,6 @@ L_08824F48: L_08825008: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882503C; } @@ -2681,7 +2649,6 @@ L_08825014: L_0882503C: aot_gpr_4 = (aot_gpr_16 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825054; } @@ -2696,7 +2663,6 @@ L_08825048: L_08825054: aot_gpr_4 = (aot_gpr_16 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882506C; } @@ -2711,7 +2677,6 @@ L_08825060: L_0882506C: aot_gpr_4 = (aot_gpr_16 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825084; } @@ -2726,7 +2691,6 @@ L_08825078: L_08825084: aot_gpr_4 = (aot_gpr_16 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825150; } @@ -2785,7 +2749,6 @@ L_08825090: L_08825150: aot_gpr_4 = (aot_gpr_16 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825184; } @@ -2806,7 +2769,6 @@ L_0882515C: L_08825184: aot_gpr_4 = (aot_gpr_16 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088251EC; } @@ -2850,7 +2812,17 @@ L_088251EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825204: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2863,7 +2835,6 @@ L_08825204: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08825270; } @@ -2871,7 +2842,6 @@ L_08825204: } L_08825234: aot_gpr_31 = (0x0882523Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882523Cu) goto L_0882523C; AOT_REGCACHE_SYNC_OUT(); return; L_0882523C: @@ -2909,7 +2879,17 @@ L_08825270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825280: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2932,7 +2912,6 @@ L_088252AC: L_088252B8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088252E4; } @@ -2941,7 +2920,6 @@ L_088252B8: L_088252C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088252E4; } @@ -2950,7 +2928,6 @@ L_088252C4: L_088252D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(376))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088252E4; } @@ -2958,7 +2935,6 @@ L_088252D0: } L_088252DC: aot_gpr_31 = (0x088252E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 649u, 0x089CF934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088252E4u) goto L_088252E4; AOT_REGCACHE_SYNC_OUT(); return; L_088252E4: @@ -2973,7 +2949,17 @@ L_088252E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088252F8: aot_gpr_4 = (0u | 48u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7788), static_cast(aot_gpr_4)); @@ -2996,7 +2982,17 @@ L_088252F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825340: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -3111,7 +3107,17 @@ L_08825340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088253C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -3121,7 +3127,17 @@ L_088253C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088253D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -3131,7 +3147,17 @@ L_088253D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088253E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -3141,7 +3167,17 @@ L_088253E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088253FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -3151,7 +3187,17 @@ L_088253FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -3161,7 +3207,17 @@ L_08825410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825424: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3530,7 +3586,17 @@ L_08825738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3554,7 +3620,17 @@ L_08825814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825844: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_6 = (aot_gpr_4 + static_cast(264)); @@ -3883,7 +3959,17 @@ L_08825B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825BB8: ctx.gpr[2] = (2178u << 16u); jump_target = aot_gpr_31; @@ -3891,12 +3977,21 @@ L_08825BB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825BC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08825BD4u); - // nop goto L_08825BB8; L_08825BD4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -3905,7 +4000,17 @@ L_08825BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825BE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3945,7 +4050,6 @@ L_08825C24: goto L_08825C2C; L_08825C2C: aot_gpr_31 = (0x08825C34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08825C34u) goto L_08825C34; AOT_REGCACHE_SYNC_OUT(); return; L_08825C34: @@ -3981,7 +4085,6 @@ L_08825C5C: goto L_08825C60; L_08825C60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825C6C; } @@ -4005,7 +4108,17 @@ L_08825C6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825C8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4036,7 +4149,6 @@ L_08825CBC: L_08825CC8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08825CDC; } @@ -4059,14 +4171,34 @@ L_08825CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825CF0: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 10u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825CF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -4103,7 +4235,17 @@ L_08825D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825D44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4133,7 +4275,17 @@ L_08825D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825D7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -4186,7 +4338,17 @@ L_08825DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4202,7 +4364,17 @@ L_08825E10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825E1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4269,7 +4441,17 @@ L_08825E8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825EAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -4391,12 +4573,21 @@ L_08825F98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825FB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08825FC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0158_entry, 158u, 692u, 0x08A7FC34u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08825FC8u) goto L_08825FC8; AOT_REGCACHE_SYNC_OUT(); return; L_08825FC8: @@ -4406,7 +4597,17 @@ L_08825FC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08825FD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -4428,7 +4629,6 @@ L_08826004: goto L_08826018; L_08826018: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08826040; } @@ -4477,7 +4677,17 @@ L_08826064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826084: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[19]); @@ -4503,7 +4713,6 @@ L_08826084: L_088260CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088260F4; } @@ -4601,7 +4810,6 @@ L_0882618C: AOT_REGCACHE_SYNC_OUT(); return; L_0882619C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088261B8; } @@ -4632,7 +4840,17 @@ L_088261B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088261E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -4648,7 +4866,6 @@ L_088261E0: } L_08826204: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08826228; } @@ -4668,7 +4885,6 @@ L_0882620C: AOT_REGCACHE_SYNC_OUT(); return; L_08826228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08826278; } @@ -4721,7 +4937,17 @@ L_08826278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826290: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -4829,7 +5055,17 @@ L_08826398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088263B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -4862,7 +5098,17 @@ L_088263EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088263F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[19]); @@ -4912,7 +5158,17 @@ L_08826464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826488: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -4946,7 +5202,6 @@ L_088264D0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(544))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4959,7 +5214,6 @@ L_088264EC: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4989,7 +5243,6 @@ L_08826528: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(548))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -5002,7 +5255,6 @@ L_08826540: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -5033,7 +5285,6 @@ L_0882657C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(552))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 0u); if (branch_taken) { @@ -5046,7 +5297,6 @@ L_08826598: aot_gpr_4 = (aot_gpr_4 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 255u); if (branch_taken) { @@ -5062,7 +5312,6 @@ L_088265B8: goto L_088265BC; L_088265BC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088265D0; } @@ -5086,7 +5335,17 @@ L_088265D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088265E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5144,7 +5403,6 @@ L_088265E8: aot_gpr_16 = (aot_gpr_6 | 0u); aot_gpr_4 = (ctx.gpr[7] | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088266E8; } @@ -5161,7 +5419,6 @@ L_088266D4: L_088266E8: aot_gpr_4 = (ctx.gpr[18] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088267B4; } @@ -5220,7 +5477,6 @@ L_088266F4: L_088267B4: aot_gpr_4 = (ctx.gpr[18] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08826880; } @@ -5279,7 +5535,6 @@ L_088267C0: L_08826880: aot_gpr_4 = (ctx.gpr[18] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882694C; } @@ -5348,7 +5603,17 @@ L_0882694C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826964: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5400,7 +5665,6 @@ L_088269F4: L_08826A08: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08826A7C; } @@ -5437,7 +5701,6 @@ L_08826A14: L_08826A7C: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08826AF0; } @@ -5474,7 +5737,6 @@ L_08826A88: L_08826AF0: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08826B64; } @@ -5521,14 +5783,23 @@ L_08826B64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826B7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08826B94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 170u, 0x08A82198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08826B94u) goto L_08826B94; AOT_REGCACHE_SYNC_OUT(); return; L_08826B94: @@ -5545,7 +5816,17 @@ L_08826B94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826BBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5570,7 +5851,6 @@ L_08826BD8: L_08826BF0: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08826C04; } @@ -5593,12 +5873,21 @@ L_08826C04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826C18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08826C28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 196u, 0x08A823A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08826C28u) goto L_08826C28; AOT_REGCACHE_SYNC_OUT(); return; L_08826C28: @@ -5608,14 +5897,23 @@ L_08826C28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08826C34: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(256), aot_run_words); } ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08826C70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 195u, 0x08A82398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08826C70u) goto L_08826C70; AOT_REGCACHE_SYNC_OUT(); return; L_08826C70: @@ -5684,7 +5982,6 @@ L_08826D1C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(284))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = aot_fpr_12 - aot_fpr_15; if (branch_taken) { @@ -5697,7 +5994,6 @@ L_08826D54: aot_fpr_15 = ctx.fpr[16] - aot_fpr_15; aot_fpr_15 = aot_fpr_15 / aot_fpr_14; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08826D74; } @@ -5712,9 +6008,7 @@ L_08826D74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(60))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08826D98; } @@ -5738,7 +6032,6 @@ L_08826D98: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(292))); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; if (branch_taken) { @@ -5751,7 +6044,6 @@ L_08826DD4: aot_fpr_14 = aot_fpr_15 - aot_fpr_14; aot_fpr_12 = aot_fpr_14 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08826DF4; } @@ -5766,9 +6058,7 @@ L_08826DF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(60))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08826E18; } @@ -5868,9 +6158,7 @@ L_08826E18: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08826EDC; } @@ -5881,9 +6169,7 @@ L_08826EC0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08826F98; } @@ -5904,7 +6190,6 @@ L_08826EDC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(216))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(220))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(156))); if (branch_taken) { @@ -5971,7 +6256,6 @@ L_08826F80: L_08826F98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827024; } @@ -6055,7 +6339,6 @@ L_0882701C: L_08827024: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088270B0; } @@ -6224,7 +6507,6 @@ L_0882713C: L_08827140: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827160; } @@ -6233,7 +6515,6 @@ L_08827140: L_0882714C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827160; } @@ -6264,7 +6545,17 @@ L_08827160: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827194: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6281,26 +6572,53 @@ L_088271A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088271BC: ctx.gpr[2] = (ctx.fcr31); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088271C8: ctx.gpr[2] = (ctx.fcr31); ctx.fcr31 = 0u & 0x0181FFFFu; - // nop ctx.fcr31 = aot_gpr_4 & 0x0181FFFFu; jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088271E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -6311,7 +6629,6 @@ L_088271E0: AOT_REGCACHE_SYNC_OUT(); return; L_088271F4: aot_gpr_31 = (0x088271FCu); - // nop goto L_088271BC; L_088271FC: aot_gpr_4 = (0u + static_cast(-3969)); @@ -6325,7 +6642,17 @@ L_08827208: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827214: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6339,7 +6666,17 @@ L_08827224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827230: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6374,13 +6711,10 @@ L_08827254: aot_gpr_6 = (static_cast(static_cast(aot_gpr_5) >> 16u)); ctx.gpr[7] = (ctx.lo); aot_gpr_5 = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.lo); aot_gpr_4 = (ctx.hi); { const bool branch_taken = ctx.gpr[7] == aot_gpr_6; - // nop if (branch_taken) { goto L_088272CC; } @@ -6388,7 +6722,6 @@ L_08827254: } L_088272C4: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088272D8; } @@ -6421,7 +6754,17 @@ L_088272E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088272FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6456,8 +6799,6 @@ L_08827320: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (ctx.lo); ctx.gpr[7] = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_6 - aot_gpr_4); @@ -6482,7 +6823,17 @@ L_08827320: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088273C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -6533,7 +6884,6 @@ L_08827400: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088274A8; } @@ -6573,7 +6923,6 @@ L_088274B4: AOT_REGCACHE_SYNC_OUT(); return; L_088274C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882753C; } @@ -6592,7 +6941,6 @@ L_088274D0: L_088274E0: aot_gpr_5 = (static_cast(ctx.gpr[18]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08827518; } @@ -6608,7 +6956,17 @@ L_088274EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827504: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(ctx.fpr[22])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); @@ -6637,7 +6995,6 @@ L_0882753C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088274B4; } @@ -6660,7 +7017,17 @@ L_0882754C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827574: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6671,7 +7038,6 @@ L_08827574: ctx.gpr[19] = (aot_gpr_5 & 65535u); ctx.gpr[20] = (aot_gpr_6 & 65535u); aot_gpr_31 = (0x088275ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 355u, 0x08A01434u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088275ACu) goto L_088275AC; AOT_REGCACHE_SYNC_OUT(); return; L_088275AC: @@ -6740,7 +7106,17 @@ L_08827600: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827628: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6794,11 +7170,20 @@ L_08827628: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827650: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (0u + static_cast(-2)); @@ -6810,7 +7195,17 @@ L_08827650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882766C: aot_gpr_6 = (2238u << 16u); aot_gpr_5 = (2233u << 16u); @@ -6876,11 +7271,20 @@ L_088276C4: } L_08827728: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827730: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6893,7 +7297,6 @@ L_08827730: L_0882774C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(125))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827760; } @@ -6926,7 +7329,17 @@ L_08827770: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827784: ctx.gpr[2] = (2238u << 16u); ctx.gpr[2] = (ctx.gpr[2] + static_cast(-6032)); @@ -6935,7 +7348,6 @@ L_08827784: L_08827790: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(125))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088277B4; } @@ -6953,7 +7365,6 @@ L_0882779C: } L_088277AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088277BC; } @@ -6961,7 +7372,6 @@ L_088277AC: } L_088277B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088277C0; } @@ -6972,11 +7382,20 @@ L_088277BC: goto L_088277C0; L_088277C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088277C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7050,7 +7469,6 @@ L_08827880: L_08827884: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(125))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827898; } @@ -7107,11 +7525,9 @@ L_088278DC: goto L_08827A6C; L_088278E4: aot_gpr_31 = (0x088278ECu); - // nop goto L_08827AF8; L_088278EC: aot_gpr_31 = (0x088278F4u); - // nop goto L_08827BA0; L_088278F4: aot_gpr_4 = (0u | 6u); @@ -7155,12 +7571,21 @@ L_08827930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827944: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7836))); aot_gpr_6 = (aot_gpr_5 < static_cast(31) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08827970; } @@ -7177,11 +7602,20 @@ L_08827954: goto L_08827970; L_08827970: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827978: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (2236u << 16u); @@ -7342,13 +7776,22 @@ L_08827978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827A6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7816))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827AEC; } @@ -7384,7 +7827,6 @@ L_08827AA8: AOT_REGCACHE_SYNC_OUT(); return; L_08827AC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08827AE4; } @@ -7400,7 +7842,6 @@ L_08827AC8: AOT_REGCACHE_SYNC_OUT(); return; L_08827ADC: aot_gpr_31 = (0x08827AE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08827AE4u) goto L_08827AE4; AOT_REGCACHE_SYNC_OUT(); return; L_08827AE4: @@ -7414,7 +7855,17 @@ L_08827AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827AF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7824))); @@ -7422,7 +7873,6 @@ L_08827AF8: aot_gpr_16 = (0u | 256u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08827B90; } @@ -7459,7 +7909,6 @@ L_08827B38: AOT_REGCACHE_SYNC_OUT(); return; L_08827B58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08827B84; } @@ -7477,7 +7926,6 @@ L_08827B60: AOT_REGCACHE_SYNC_OUT(); return; L_08827B7C: aot_gpr_31 = (0x08827B84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08827B84u) goto L_08827B84; AOT_REGCACHE_SYNC_OUT(); return; L_08827B84: @@ -7493,7 +7941,17 @@ L_08827B90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827BA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7832))); @@ -7501,7 +7959,6 @@ L_08827BA0: aot_gpr_16 = (0u | 384u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08827C3C; } @@ -7539,7 +7996,6 @@ L_08827BE4: AOT_REGCACHE_SYNC_OUT(); return; L_08827C04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08827C30; } @@ -7557,7 +8013,6 @@ L_08827C0C: AOT_REGCACHE_SYNC_OUT(); return; L_08827C28: aot_gpr_31 = (0x08827C30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08827C30u) goto L_08827C30; AOT_REGCACHE_SYNC_OUT(); return; L_08827C30: @@ -7573,7 +8028,17 @@ L_08827C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827C4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -7584,7 +8049,6 @@ L_08827C4C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827CC8; } @@ -7594,9 +8058,7 @@ L_08827C74: aot_gpr_4 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08827CC8; } @@ -7608,7 +8070,6 @@ L_08827C8C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08827CC8; } @@ -7636,7 +8097,17 @@ L_08827CC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -7710,7 +8181,6 @@ L_08827D5C: goto L_08827D64; L_08827D64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827DEC; } @@ -7722,7 +8192,6 @@ L_08827D6C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08827DEC; } @@ -7734,7 +8203,6 @@ L_08827D84: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08827DEC; } @@ -7788,7 +8256,17 @@ L_08827DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827E00: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -7797,7 +8275,6 @@ L_08827E00: aot_gpr_6 = (aot_gpr_6 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08827EF4; } @@ -7859,9 +8336,7 @@ L_08827E20: ctx.gpr[7] = (16672u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08827EC8; } @@ -7925,7 +8400,6 @@ L_08827E70: AOT_REGCACHE_SYNC_OUT(); return; L_08827EC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08827EF4; } @@ -7935,9 +8409,7 @@ L_08827EC8: aot_gpr_5 = (16880u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08827EF4; } @@ -7957,7 +8429,17 @@ L_08827EF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08827F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), std::bit_cast(ctx.fpr[20])); diff --git a/profiles/vcs/generated/generated_unit_0009.cpp b/profiles/vcs/generated/generated_unit_0009.cpp index fb1ef2a..cdd9fc6 100644 --- a/profiles/vcs/generated/generated_unit_0009.cpp +++ b/profiles/vcs/generated/generated_unit_0009.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0009[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 9, 0, 10, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0, 21, 0, 22, 0, - 0, 0, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 29, 0, 0, 30, 0, 31, 0, 32, 0, 0, 33, 0, 0, 34, 0, 35, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, - 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 67, 0, 0, 68, 0, - 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 87, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 0, - 0, 91, 0, 0, 92, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 97, 0, 0, 0, 98, - 0, 0, 0, 99, 0, 0, 100, 0, 0, 101, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 106, 0, 0, 107, 0, 0, - 0, 0, 0, 108, 0, 109, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, - 0, 114, 0, 115, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 0, 0, - 122, 0, 0, 123, 0, 0, 0, 0, 0, 124, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 134, 0, 135, 0, 136, 0, 137, 0, 0, 138, 0, 0, 0, 139, 0, 0, 140, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, - 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 156, 0, 157, 0, 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 0, - 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, - 0, 165, 0, 0, 0, 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, - 0, 170, 0, 171, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 176, 0, 0, 0, 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 189, 0, - 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 191, 0, 192, 193, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 199, - 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 203, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 0, 0, 207, - 0, 208, 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, - 0, 216, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 231, 0, 232, 0, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 235, 0, 236, 0, 0, 237, 0, 0, 238, 0, 0, 0, - 0, 239, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, - 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, - 0, 252, 0, 0, 0, 253, 0, 0, 0, 0, 254, 255, 0, 0, 0, 0, 256, 257, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 264, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 267, 0, - 0, 0, 268, 0, 269, 0, 0, 0, 0, 270, 0, 271, 0, 272, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, - 0, 277, 0, 278, 0, 0, 279, 0, 0, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 285, 0, 0, 0, 0, 286, 0, 287, 288, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, - 297, 0, 0, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, - 0, 0, 305, 0, 306, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, 0, 0, 310, 0, 311, 0, 0, 0, 312, 0, 0, 0, - 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 320, 0, - 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 326, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, - 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 331, 0, - 0, 332, 0, 0, 0, 0, 333, 0, 334, 0, 0, 0, 0, 335, 0, 0, 336, 0, 337, 338, 0, 0, 0, 339, 0, 0, 0, 340, 0, 0, 341, 0, - 0, 342, 0, 343, 0, 344, 0, 0, 0, 0, 345, 346, 347, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 350, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, - 0, 0, 356, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 360, 0, 0, 361, 0, 0, 362, 0, 363, 0, 0, 364, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, - 0, 0, 0, 0, 370, 0, 371, 0, 0, 372, 0, 373, 374, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, - 0, 380, 0, 0, 381, 0, 0, 382, 0, 0, 383, 0, 0, 384, 0, 0, 0, 385, 0, 0, 386, 0, 387, 388, 0, 389, 0, 0, 390, 0, 391, 0, - 0, 0, 0, 0, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 0, 399, - 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 409, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 412, 0, - 0, 0, 413, 0, 414, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 0, 0, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 424, 0, 425, 0, 426, 0, 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 429, 430, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 433, 434, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 443, 0, 0, 0, 444, 0, 445, 446, 0, 0, 0, 0, 0, - 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, - 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 459, 0, 0, 0, 460, 0, 0, 461, 0, 462, 0, 0, 0, 0, - 0, 0, 0, 0, 463, 0, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 471, 0, 0, 472, 0, 473, 474, 0, 0, 475, 0, 0, 476, 0, 477, 478, 0, 0, - 479, 0, 0, 480, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 485, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0009[64] = { + 0x0122115444808901ull, 0x2064000C50244204ull, 0x9002A80001154952ull, 0x0400000012000000ull, + 0x0000000000400000ull, 0x4000001200200000ull, 0x0011000800108421ull, 0x0010000000000020ull, + 0x0000000C4A200088ull, 0x0000000000000000ull, 0x0002000004000008ull, 0x0228810000000000ull, + 0x0000000000000080ull, 0x0000000000000000ull, 0x0010000000000000ull, 0x00A0000000000004ull, + 0x8824091244510014ull, 0x0000012824909248ull, 0x0000000000000000ull, 0x1000000100400000ull, + 0x000012090482850Aull, 0x0040802100200801ull, 0x0A0900000912A900ull, 0x0000020000888824ull, + 0x4100D50400100001ull, 0x2200088208800020ull, 0x000000000000001Aull, 0x0000200000080000ull, + 0x0021001000451100ull, 0x0000000000000000ull, 0x0000100000040000ull, 0x5000200001000080ull, + 0x0000000000000001ull, 0x0000000000000000ull, 0x8228282282822834ull, 0x0022828228282282ull, + 0x0228000000880000ull, 0x0000800400600000ull, 0x0000802A1250A0A0ull, 0x0400000000000000ull, + 0x0000002082082088ull, 0x0200000000000000ull, 0x0000000000830C22ull, 0x0000010011000000ull, + 0x22212A1448005408ull, 0x000000004010544Aull, 0x0000000001014342ull, 0x0000000000000000ull, + 0x14114141141A0000ull, 0x4141141411414114ull, 0x0000000400000011ull, 0x5008000404220004ull, + 0x84009C2A488D2142ull, 0x0000000000000000ull, 0x1410080400000000ull, 0x0152524000808014ull, + 0x88889A5040200000ull, 0x8909122052D22492ull, 0x14888254405AAAAAull, 0x0090682300495201ull, + 0x0689150000000440ull, 0x0025002020001489ull, 0x020202900A448020ull, 0x94040029349A4822ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0009[64] = { + 1u, 16u, 29u, 45u, 48u, 49u, 53u, 61u, 63u, 71u, 71u, 74u, 79u, 80u, 80u, 81u, + 84u, 99u, 111u, 111u, 114u, 126u, 133u, 145u, 152u, 162u, 170u, 173u, 175u, 183u, 183u, 185u, + 190u, 191u, 191u, 208u, 222u, 227u, 231u, 243u, 244u, 251u, 252u, 259u, 262u, 277u, 285u, 292u, + 292u, 305u, 321u, 324u, 332u, 351u, 351u, 356u, 368u, 380u, 400u, 422u, 437u, 447u, 457u, 468u, }; void recomp_unit_0009_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0009_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08828000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0009[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0009[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0009[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08828000; @@ -730,7 +637,6 @@ L_08828088: } L_08828090: aot_gpr_31 = (0x08828098u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08828098u) goto L_08828098; AOT_REGCACHE_SYNC_OUT(); return; L_08828098: @@ -814,7 +720,6 @@ L_08828138: L_08828148: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08828188; } @@ -827,7 +732,6 @@ L_08828154: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08828178; } @@ -876,7 +780,17 @@ L_0882818C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088281C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; @@ -953,7 +867,6 @@ L_08828238: goto L_08828240; L_08828240: { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08828250; } @@ -961,7 +874,6 @@ L_08828240: } L_08828248: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088282B4; } @@ -971,7 +883,6 @@ L_08828250: ctx.gpr[11] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(84))); ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = ctx.gpr[11] == ctx.gpr[10]; - // nop if (branch_taken) { goto L_088282B4; } @@ -994,9 +905,7 @@ L_08828260: aot_fpr_15 = std::sqrt(aot_fpr_15); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088282B4; } @@ -1008,7 +917,6 @@ L_088282AC: goto L_088282B4; L_088282B4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088281D8; } @@ -1016,11 +924,20 @@ L_088282B4: } L_088282BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088282C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -1042,7 +959,17 @@ L_088282F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088282FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -1276,9 +1203,7 @@ L_08828458: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088286D0; } @@ -1302,7 +1227,6 @@ L_08828554: L_08828584: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(127))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088286D0; } @@ -1349,7 +1273,6 @@ L_08828590: goto L_088285F8; L_088285F8: aot_gpr_31 = (0x08828600u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08828600u) goto L_08828600; AOT_REGCACHE_SYNC_OUT(); return; L_08828600: @@ -1422,7 +1345,6 @@ L_088286C0: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088285F8; } @@ -1452,7 +1374,17 @@ L_088286D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08828714: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[12]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -1542,7 +1474,6 @@ L_08828714: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088287D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 547u, 0x08827978u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088287D0u) goto L_088287D0; AOT_REGCACHE_SYNC_OUT(); return; L_088287D0: @@ -1596,7 +1527,6 @@ L_08828854: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7816))); aot_gpr_4 = (static_cast(aot_gpr_4) < 252 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882886C; } @@ -1604,13 +1534,11 @@ L_08828854: } L_08828864: aot_gpr_31 = (0x0882886Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 548u, 0x08827A6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882886Cu) goto L_0882886C; AOT_REGCACHE_SYNC_OUT(); return; L_0882886C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(127))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882888C; } @@ -1870,7 +1798,6 @@ L_08828AC4: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7816), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(126))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08828ED0; } @@ -1893,7 +1820,6 @@ L_08828BBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7824))); aot_gpr_4 = (static_cast(aot_gpr_4) < 380 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08828BD4; } @@ -1901,12 +1827,10 @@ L_08828BBC: } L_08828BCC: aot_gpr_31 = (0x08828BD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 558u, 0x08827AF8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08828BD4u) goto L_08828BD4; AOT_REGCACHE_SYNC_OUT(); return; L_08828BD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 140u); if (branch_taken) { @@ -2123,7 +2047,17 @@ L_08828ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08828F08: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2175,7 +2109,6 @@ L_08828F08: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(284), ctx.gpr[2]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(272), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -2196,7 +2129,6 @@ L_08828FDC: aot_fpr_12 = std::bit_cast(ctx.gpr[7]); aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -2213,8 +2145,6 @@ L_08829010: { const std::int64_t product = static_cast(static_cast(ctx.gpr[20])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.gpr[20] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (0u | 3u); aot_gpr_6 = (aot_gpr_5 < ctx.gpr[20] ? 1u : 0u); @@ -2234,7 +2164,6 @@ L_08829040: goto L_08829050; L_08829050: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08829078; } @@ -2319,7 +2248,6 @@ L_088290EC: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (ctx.gpr[21] < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882975C; } @@ -2329,7 +2257,6 @@ L_088290FC: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (ctx.gpr[19] < ctx.gpr[22] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882974C; } @@ -2399,7 +2326,6 @@ L_08829174: ctx.fpr[28] = ctx.fpr[28] / aot_fpr_12; aot_gpr_4 = (ctx.gpr[17] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882973C; } @@ -2407,13 +2333,11 @@ L_08829174: } L_0882918C: aot_gpr_31 = (0x08829194u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 513u, 0x08827784u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829194u) goto L_08829194; AOT_REGCACHE_SYNC_OUT(); return; L_08829194: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0882972C; } @@ -2571,7 +2495,6 @@ L_088291A0: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08829358u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829358u) goto L_08829358; AOT_REGCACHE_SYNC_OUT(); return; L_08829358: @@ -2654,9 +2577,7 @@ L_08829380: L_088293F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882940C; } @@ -2669,9 +2590,7 @@ L_08829404: L_0882940C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08829428; } @@ -2684,9 +2603,7 @@ L_08829420: L_08829428: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08829444; } @@ -2700,9 +2617,7 @@ L_08829444: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08829468; } @@ -2717,9 +2632,7 @@ L_08829468: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882948C; } @@ -2734,9 +2647,7 @@ L_0882948C: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088294B0; } @@ -2803,9 +2714,7 @@ L_088294B0: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882952C; } @@ -2834,7 +2743,6 @@ L_08829500: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08829554; } @@ -2885,7 +2793,6 @@ L_08829554: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08829580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829580u) goto L_08829580; AOT_REGCACHE_SYNC_OUT(); return; L_08829580: @@ -2893,7 +2800,6 @@ L_08829580: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(296), std::bit_cast(ctx.fpr[30])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(292), std::bit_cast(ctx.fpr[28])); aot_gpr_31 = (0x08829594u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829594u) goto L_08829594; AOT_REGCACHE_SYNC_OUT(); return; L_08829594: @@ -2962,7 +2868,6 @@ L_08829620: goto L_0882962C; L_0882962C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08829644; } @@ -2970,7 +2875,6 @@ L_0882962C: } L_08829634: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08829650; } @@ -2978,7 +2882,6 @@ L_08829634: } L_0882963C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088296EC; } @@ -3054,7 +2957,6 @@ L_0882966C: aot_gpr_4 = (20224u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -3117,7 +3019,6 @@ L_0882972C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882918C; } @@ -3127,7 +3028,6 @@ L_0882973C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (ctx.gpr[19] < ctx.gpr[22] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882910C; } @@ -3137,7 +3037,6 @@ L_0882974C: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (ctx.gpr[21] < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088290FC; } @@ -3168,7 +3067,17 @@ L_0882975C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088297A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(482)))))); @@ -3182,7 +3091,6 @@ L_088297A4: { const std::uint32_t aot_run_words[5]{ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(212), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088298B0; } @@ -3233,9 +3141,7 @@ L_08829800: aot_gpr_4 = (16928u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088298A8; } @@ -3278,16 +3184,13 @@ L_08829850: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08829888u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 547u, 0x08827978u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829888u) goto L_08829888; AOT_REGCACHE_SYNC_OUT(); return; L_08829888: aot_gpr_4 = (16880u << 16u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088298B8; } @@ -3303,7 +3206,6 @@ L_088298A0: } L_088298A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08829F1C; } @@ -3311,7 +3213,6 @@ L_088298A8: } L_088298B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08829F1C; } @@ -3329,7 +3230,6 @@ L_088298BC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(50))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08829F1C; } @@ -3418,7 +3318,6 @@ L_08829984: } L_0882999C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (0u | 255u); if (branch_taken) { @@ -3446,7 +3345,6 @@ L_088299E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7820))); aot_gpr_4 = (static_cast(aot_gpr_4) < 755 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08829A04; } @@ -3462,7 +3360,6 @@ L_088299F4: goto L_08829A04; L_08829A04: aot_gpr_31 = (0x08829A0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 558u, 0x08827AF8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829A0Cu) goto L_08829A0C; AOT_REGCACHE_SYNC_OUT(); return; L_08829A0C: @@ -3613,7 +3510,6 @@ L_08829C20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7828))); aot_gpr_4 = (static_cast(aot_gpr_4) < 1011 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08829C40; } @@ -3623,7 +3519,6 @@ L_08829C30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7832))); aot_gpr_4 = (static_cast(aot_gpr_4) < 507 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08829C48; } @@ -3631,12 +3526,10 @@ L_08829C30: } L_08829C40: aot_gpr_31 = (0x08829C48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 568u, 0x08827BA0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08829C48u) goto L_08829C48; AOT_REGCACHE_SYNC_OUT(); return; L_08829C48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (0u | 100u); if (branch_taken) { @@ -3678,7 +3571,6 @@ L_08829C90: L_08829CC0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + ctx.fpr[28]; goto L_08829CD4; @@ -3863,7 +3755,17 @@ L_08829F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08829F60: aot_gpr_29 = (aot_gpr_29 + static_cast(-464)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(482)))))); @@ -3916,7 +3818,6 @@ L_08829FF0: } L_08829FF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882A588; } @@ -4073,7 +3974,6 @@ L_0882A214: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_0882A234; @@ -4089,7 +3989,6 @@ L_0882A22C: } L_0882A234: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0882A244; @@ -4099,7 +3998,6 @@ L_0882A244: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); goto L_0882A264; @@ -4117,7 +4015,6 @@ L_0882A264: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_0882A284; @@ -4133,7 +4030,6 @@ L_0882A27C: } L_0882A284: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0882A294; @@ -4143,7 +4039,6 @@ L_0882A294: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_0882A2B4; @@ -4161,7 +4056,6 @@ L_0882A2B4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_0882A2D4; @@ -4177,7 +4071,6 @@ L_0882A2CC: } L_0882A2D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_0882A2E4; @@ -4187,7 +4080,6 @@ L_0882A2E4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_0882A304; @@ -4205,7 +4097,6 @@ L_0882A304: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_0882A324; @@ -4221,7 +4112,6 @@ L_0882A31C: } L_0882A324: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_0882A334; @@ -4231,7 +4121,6 @@ L_0882A334: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); goto L_0882A354; @@ -4249,7 +4138,6 @@ L_0882A354: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); goto L_0882A374; @@ -4265,7 +4153,6 @@ L_0882A36C: } L_0882A374: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_0882A384; @@ -4275,7 +4162,6 @@ L_0882A384: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); goto L_0882A3A4; @@ -4293,7 +4179,6 @@ L_0882A3A4: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); goto L_0882A3C4; @@ -4309,7 +4194,6 @@ L_0882A3BC: } L_0882A3C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[18])); goto L_0882A3D4; @@ -4427,7 +4311,6 @@ L_0882A3D4: aot_gpr_5 = (17302u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = ctx.fpr[17] - ctx.fpr[16]; if (branch_taken) { @@ -4525,7 +4408,6 @@ L_0882A45C: goto L_08828F08; L_0882A4CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882A554; } @@ -4656,7 +4538,17 @@ L_0882A588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882A5BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-640)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -4674,7 +4566,6 @@ L_0882A5BC: { const std::uint32_t aot_run_words[7]{ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(608), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882A61C; } @@ -4682,7 +4573,6 @@ L_0882A5BC: } L_0882A614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882AB70; } @@ -4709,7 +4599,6 @@ L_0882A63C: ctx.gpr[7] = (ctx.gpr[7] + aot_gpr_5); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(6))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_0882A670; } @@ -4717,7 +4606,6 @@ L_0882A63C: } L_0882A650: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0882A664; } @@ -4762,7 +4650,6 @@ L_0882A684: } L_0882A68C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882AB70; } @@ -5483,9 +5370,7 @@ L_0882A9E4: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(312))); aot_fpr_15 = aot_fpr_15 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882AA14; } @@ -5500,9 +5385,7 @@ L_0882AA04: L_0882AA14: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882AA2C; } @@ -5514,9 +5397,7 @@ L_0882AA28: L_0882AA2C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(312))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882AA44; } @@ -5734,7 +5615,17 @@ L_0882AB70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882ABA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15960))); @@ -5749,7 +5640,6 @@ L_0882ABA0: { const std::uint32_t aot_run_words[15]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(388), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882AC30; } @@ -5770,7 +5660,6 @@ L_0882AC0C: } L_0882AC28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882B388; } @@ -5778,7 +5667,6 @@ L_0882AC28: } L_0882AC30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882B388; } @@ -5848,7 +5736,6 @@ L_0882ACAC: L_0882ACB4: ctx.gpr[20] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0882B368; } @@ -5920,7 +5807,6 @@ L_0882AD28: goto L_0882AD30; L_0882AD30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882B368; } @@ -5932,7 +5818,6 @@ L_0882AD38: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882B368; } @@ -5948,7 +5833,6 @@ L_0882AD50: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(50))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882B368; } @@ -6083,7 +5967,6 @@ L_0882AE04: AOT_REGCACHE_SYNC_OUT(); return; L_0882AE18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882AE24; } @@ -6105,7 +5988,6 @@ L_0882AE24: } L_0882AE38: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882B368; } @@ -6119,7 +6001,6 @@ L_0882AE40: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882B344; } @@ -6267,7 +6148,6 @@ L_0882B050: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); goto L_0882B070; @@ -6283,7 +6163,6 @@ L_0882B068: } L_0882B070: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0882B080; @@ -6293,7 +6172,6 @@ L_0882B080: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); goto L_0882B0A0; @@ -6311,7 +6189,6 @@ L_0882B0A0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); goto L_0882B0C0; @@ -6327,7 +6204,6 @@ L_0882B0B8: } L_0882B0C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0882B0D0; @@ -6337,7 +6213,6 @@ L_0882B0D0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); goto L_0882B0F0; @@ -6355,7 +6230,6 @@ L_0882B0F0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_0882B110; @@ -6371,7 +6245,6 @@ L_0882B108: } L_0882B110: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_0882B120; @@ -6381,7 +6254,6 @@ L_0882B120: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); goto L_0882B140; @@ -6399,7 +6271,6 @@ L_0882B140: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_0882B160; @@ -6415,7 +6286,6 @@ L_0882B158: } L_0882B160: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_0882B170; @@ -6425,7 +6295,6 @@ L_0882B170: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); goto L_0882B190; @@ -6443,7 +6312,6 @@ L_0882B190: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); goto L_0882B1B0; @@ -6459,7 +6327,6 @@ L_0882B1A8: } L_0882B1B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_0882B1C0; @@ -6469,7 +6336,6 @@ L_0882B1C0: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); goto L_0882B1E0; @@ -6487,7 +6353,6 @@ L_0882B1E0: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); goto L_0882B200; @@ -6503,7 +6368,6 @@ L_0882B1F8: } L_0882B200: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_0882B210; @@ -6715,7 +6579,6 @@ L_0882B308: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(72), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882B368; } @@ -6773,7 +6636,17 @@ L_0882B388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -6798,7 +6671,17 @@ L_0882B3F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B404: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6808,7 +6691,6 @@ L_0882B404: goto L_0882B45C; L_0882B418: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882B440; } @@ -6819,7 +6701,6 @@ L_0882B420: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882B448; } @@ -6853,12 +6734,21 @@ L_0882B44C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B45C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882B48C; } @@ -6881,7 +6771,6 @@ L_0882B478: } L_0882B484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882B4AC; } @@ -6900,7 +6789,6 @@ L_0882B494: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0882B4AC; } @@ -6919,7 +6807,17 @@ L_0882B4B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B4BC: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -6931,11 +6829,20 @@ L_0882B4BC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B4E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7047,7 +6954,17 @@ L_0882B4FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B688: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7088,7 +7005,6 @@ L_0882B6D0: AOT_REGCACHE_SYNC_OUT(); return; L_0882B6E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882B708; } @@ -7128,7 +7044,17 @@ L_0882B710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B73C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7163,7 +7089,6 @@ L_0882B75C: L_0882B798: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882B7B8; } @@ -7177,7 +7102,6 @@ L_0882B7A4: AOT_REGCACHE_SYNC_OUT(); return; L_0882B7B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882B7C4; } @@ -7241,7 +7165,17 @@ L_0882B7E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B854: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7270,7 +7204,6 @@ L_0882B878: } L_0882B890: aot_gpr_31 = (0x0882B898u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 649u, 0x089CF934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882B898u) goto L_0882B898; AOT_REGCACHE_SYNC_OUT(); return; L_0882B898: @@ -7282,7 +7215,6 @@ L_0882B898: goto L_0882B8A4; L_0882B8A4: aot_gpr_31 = (0x0882B8ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882B8ACu) goto L_0882B8AC; AOT_REGCACHE_SYNC_OUT(); return; L_0882B8AC: @@ -7305,7 +7237,6 @@ L_0882B8CC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(470)))))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0882B904; } @@ -7329,13 +7260,11 @@ L_0882B8EC: goto L_0882B8FC; L_0882B8FC: aot_gpr_31 = (0x0882B904u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 460u, 0x088DF770u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882B904u) goto L_0882B904; AOT_REGCACHE_SYNC_OUT(); return; L_0882B904: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(476))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0882B928; } @@ -7344,7 +7273,6 @@ L_0882B904: L_0882B910: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-30396))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0882B928; } @@ -7383,7 +7311,6 @@ L_0882B944: goto L_0882B950; L_0882B950: aot_gpr_31 = (0x0882B958u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882B958u) goto L_0882B958; AOT_REGCACHE_SYNC_OUT(); return; L_0882B958: @@ -7397,7 +7324,6 @@ L_0882B95C: L_0882B964: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882B978; } @@ -7421,7 +7347,17 @@ L_0882B978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B994: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7436,7 +7372,17 @@ L_0882B9A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B9B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7451,7 +7397,17 @@ L_0882B9C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B9CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7467,12 +7423,21 @@ L_0882B9E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882B9EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(476))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882BA4C; } @@ -7512,7 +7477,6 @@ L_0882BA14: } L_0882BA1C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0882BA44; } @@ -7563,11 +7527,20 @@ L_0882BA4C: goto L_0882BA50; L_0882BA50: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882BA58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -7576,7 +7549,6 @@ L_0882BA58: aot_gpr_4 = (aot_gpr_5 & 64u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882BA90; } @@ -7592,7 +7564,6 @@ L_0882BA78: goto L_0882BA88; L_0882BA88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882BAE8; } @@ -7600,7 +7571,6 @@ L_0882BA88: } L_0882BA90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882BAF0; } @@ -7609,7 +7579,6 @@ L_0882BA90: L_0882BA98: aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0882BAE8; } @@ -7621,7 +7590,6 @@ L_0882BAA4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BAE8; } @@ -7662,7 +7630,17 @@ L_0882BAF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882BB00: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -7689,7 +7667,6 @@ L_0882BB24: } L_0882BB30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882BB4C; } @@ -7736,7 +7713,6 @@ L_0882BB58: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BB84; } @@ -7749,7 +7725,6 @@ L_0882BB84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BBAC; } @@ -7784,7 +7759,17 @@ L_0882BBB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882BBD0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(448), 0u); jump_target = aot_gpr_31; @@ -7792,7 +7777,17 @@ L_0882BBD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882BBDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-672)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(448))); @@ -7871,7 +7866,6 @@ L_0882BC28: } L_0882BCA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882BDC8; } @@ -7879,7 +7873,6 @@ L_0882BCA0: } L_0882BCA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882BF94; } @@ -7936,7 +7929,6 @@ L_0882BD0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(440))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BD30; } @@ -7945,7 +7937,6 @@ L_0882BD0C: L_0882BD1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(432))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BD30; } @@ -8038,7 +8029,6 @@ L_0882BD30: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BDC0; } @@ -8052,7 +8042,6 @@ L_0882BD74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BDC0; } @@ -8085,7 +8074,6 @@ L_0882BD94: AOT_REGCACHE_SYNC_OUT(); return; L_0882BDC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882BE14; } @@ -8213,7 +8201,6 @@ L_0882BE48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BE6C; } @@ -8222,7 +8209,6 @@ L_0882BE48: L_0882BE58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BE6C; } @@ -8264,7 +8250,6 @@ L_0882BEA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882BF04; } @@ -8278,7 +8263,6 @@ L_0882BEC4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882BF04; } @@ -8369,7 +8353,6 @@ L_0882BF70: L_0882BF74: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BF94; } @@ -8378,7 +8361,6 @@ L_0882BF74: L_0882BF80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882BF94; } @@ -8409,7 +8391,17 @@ L_0882BF94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882BFC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), std::bit_cast(ctx.fpr[20])); @@ -8423,7 +8415,6 @@ L_0882BFC8: AOT_REGCACHE_SYNC_OUT(); return; L_0882BFE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0010_entry, 10u, 6u, 0x0882C04Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8432,7 +8423,6 @@ L_0882BFE8: L_0882BFF0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(473))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0010_entry, 10u, 5u, 0x0882C044u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0010.cpp b/profiles/vcs/generated/generated_unit_0010.cpp index 14334a2..d565307 100644 --- a/profiles/vcs/generated/generated_unit_0010.cpp +++ b/profiles/vcs/generated/generated_unit_0010.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0010[4092] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 0, 0, 9, 0, 0, 10, 0, - 11, 0, 12, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, - 19, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 0, 28, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0, 33, - 0, 34, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 39, 0, 40, 0, 0, 0, 0, 0, 41, - 0, 42, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 45, 0, 46, 0, 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, - 50, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, - 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 63, 64, 0, 65, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 68, 0, 69, 70, 0, 0, 71, 0, 0, 72, 0, 0, 73, 0, 74, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 78, 0, 79, 0, 80, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 83, 0, 84, 85, 0, 0, 86, 0, 0, 87, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, 0, 96, 0, 0, 0, - 97, 0, 98, 0, 0, 0, 0, 99, 0, 100, 101, 0, 0, 102, 0, 0, 103, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 110, 111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 0, 118, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 121, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, - 126, 0, 0, 0, 0, 0, 0, 127, 0, 128, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 133, 0, 0, 0, 134, 0, 135, 0, 136, 0, 137, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, - 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 145, 0, 146, 0, 0, 147, 0, 0, 148, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 152, 0, 153, 0, 0, 0, 154, - 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 161, 0, 0, 162, 0, 0, 163, - 0, 0, 164, 0, 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, 0, 169, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 174, 0, 175, 0, 0, 0, 176, 0, 177, 0, - 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 184, - 0, 0, 0, 185, 0, 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 203, 0, 204, 0, 0, 205, - 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, - 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 0, 0, 217, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, 247, - 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 0, - 254, 0, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 260, 0, 0, 261, 0, 262, 0, 0, 263, 0, 0, - 0, 0, 264, 0, 0, 0, 265, 0, 266, 267, 0, 268, 0, 0, 0, 269, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 274, 0, - 0, 0, 275, 0, 276, 0, 277, 0, 0, 278, 0, 0, 0, 279, 0, 280, 281, 0, 282, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, - 0, 291, 0, 0, 292, 0, 0, 0, 293, 0, 294, 0, 295, 0, 0, 296, 0, 297, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 299, 0, 300, - 0, 301, 0, 0, 0, 0, 0, 0, 302, 303, 0, 304, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, - 0, 0, 0, 308, 0, 309, 0, 0, 310, 0, 311, 0, 312, 0, 313, 0, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 0, 319, 0, 320, 0, - 321, 0, 322, 0, 323, 0, 0, 324, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 330, 0, 331, 0, 332, - 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 0, 339, 0, 340, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, - 0, 344, 0, 345, 0, 346, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 349, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, - 0, 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 361, - 0, 362, 0, 0, 0, 363, 0, 0, 364, 0, 0, 365, 0, 366, 367, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 375, 0, 376, 0, 377, 0, 0, - 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 382, 0, 383, 0, 384, 0, 0, 385, 0, 0, 386, 0, 387, - 388, 0, 0, 389, 0, 390, 0, 0, 0, 391, 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 0, 398, - 0, 0, 0, 399, 0, 0, 400, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 407, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 412, 0, 413, 0, 414, 415, 0, 0, 416, 0, 417, 0, 418, 0, - 0, 0, 0, 0, 419, 0, 0, 420, 0, 0, 421, 0, 422, 423, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 426, 0, 0, - 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 433, 434, 0, 435, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, - 438, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 448, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 453, 0, 454, - 0, 0, 0, 455, 0, 0, 456, 457, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 463, 0, 464, 0, 465, 466, 0, 467, 0, 468, 0, 469, 0, - 0, 470, 0, 0, 471, 0, 0, 472, 0, 0, 473, 0, 474, 0, 475, 0, 476, 0, 477, 0, 478, 0, 0, 479, 0, 0, 480, 0, 481, 0, 482, 0, - 0, 483, 0, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 0, 491, 0, 0, 492, 0, 493, 0, 0, 494, 495, 0, 496, 0, - 497, 0, 498, 0, 499, 0, 500, 0, 501, 502, 0, 503, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 513, 0, 514, 0, 0, 0, 515, 0, 0, 0, - 0, 516, 0, 517, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, - 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 537, 0, 0, 0, 538, 0, 0, 0, 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 0, 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 0, 545, 0, 546, 0, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 549, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 0, 560, 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, - 566, 0, 567, 0, 0, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, - 0, 581, 0, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, 0, 0, 586, 0, 587, 0, 588, 0, 589, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, - 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, 597, - 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 600, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 602, 0, 603, 0, 0, 0, 0, 604, 0, - 605, 0, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 617, 0, - 0, 618, 0, 0, 0, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, - 625, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 0, 633, 0, 634, 0, 635, 0, 0, 636, 0, 637, 0, 0, 0, 0, 638, - 0, 0, 639, 0, 640, 0, 0, 0, 641, 0, 0, 642, 0, 0, 643, 0, 644, 645, 0, 646, 0, 647, 0, 0, 648, 0, 0, 0, 0, 0, 649, 0, - 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 653, 0, 654, 0, - 0, 655, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 658, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 664, 0, 665, - 0, 666, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 672, 0, 0, 673, 0, 674, 0, 0, 0, 0, 675, 0, 0, 0, 676, 0, 677, - 0, 678, 0, 679, 0, 680, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 683, 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 686, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, 690, 691, 0, 0, 0, 692, 0, 693, 0, - 0, 694, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 697, 0, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, - 701, 0, 0, 702, 0, 703, 0, 0, 704, 0, 705, 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 0, 708, 0, 0, 0, 709, 710, 0, 0, 711, 0, - 712, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, - 0, 0, 717, 718, 0, 0, 0, 719, 0, 720, 0, 0, 721, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 724, 0, 0, - 725, 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, 728, 0, 0, 729, 0, 730, 0, 0, 731, 0, 732, 0, 0, 0, 0, 733, 0, 734, 0, 0, 0, - 0, 735, 0, 0, 0, 736, 737, 0, 0, 738, 0, 739, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, - 742, 0, 743, 0, 744, 0, 0, 745, 0, 0, 746, 0, 0, 747, 0, 748, 0, 0, 0, 749, 0, 750, 0, 0, 751, 0, 752, 0, 753, 0, 0, 754, - 755, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 758, 0, 759, 0, 0, 760, 0, 761, - 0, 0, 762, 763, 0, 764, 0, 0, 765, 766, 0, 767, 0, 0, 0, 0, 768, 0, 769, 0, 770, 0, 0, 0, 771, 0, 772, 0, 773, 0, 0, 0, - 774, 0, 775, 776, 0, 777, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 780, 0, 781, 0, 0, 0, 0, 0, 0, 782, 0, 783, 0, 784, - 0, 0, 0, 0, 0, 785, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 788, - 0, 789, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 793, 0, 794, 0, 0, 795, 0, 796, 797, 0, 798, 0, 0, 799, 0, 0, 800, 0, - 801, 802, 0, 803, 0, 0, 804, 0, 0, 805, 0, 806, 807, 0, 808, 0, 0, 0, 0, 809, 0, 0, 810, 0, 811, 0, 0, 0, 0, 812, 0, 0, - 813, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 816, 0, 817, 0, 0, 818, 0, 819, 0, 0, 820, 0, 821, 0, 0, 822, 0, 0, 0, 0, 823, - 0, 0, 824, 0, 0, 825, 0, 826, 0, 827, 0, 828, 0, 0, 829, 0, 830, 831, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 833, 0, 0, 0, 834, 0, 835, 0, 836, 0, 0, 837, 0, 0, 838, 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, - 0, 0, 841, 0, 0, 842, 0, 843, 0, 844, 0, 845, 0, 0, 0, 0, 846, 0, 0, 0, 847, 0, 848, 0, 849, 0, 850, 0, 851, 0, 0, 0, - 0, 852, 0, 0, 0, 853, 0, 854, 0, 855, 0, 0, 856, 0, 0, 0, 0, 857, 0, 0, 0, 0, 858, 0, 0, 0, 0, 859, 0, 0, 860, 0, - 861, 862, 0, 863, 0, 864, 0, 865, 0, 0, 0, 866, 0, 867, 0, 0, 868, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 870, 0, 0, - 871, 0, 0, 872, 0, 873, 0, 874, 0, 875, 0, 0, 0, 0, 876, 0, 0, 0, 877, 0, 878, 0, 879, 0, 880, 0, 881, 0, 0, 0, 0, 882, - 0, 0, 0, 883, 0, 884, 0, 885, 0, 0, 886, 0, 0, 0, 0, 887, 0, 0, 0, 0, 888, 0, 0, 0, 0, 889, 0, 0, 890, 0, 891, 892, - 0, 893, 0, 894, 0, 895, 0, 0, 0, 896, 0, 897, 0, 0, 898, 0, 0, 899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 900, 0, 0, 901, 0, - 0, 902, 0, 903, 0, 904, 0, 905, 0, 0, 0, 0, 906, 0, 0, 0, 907, 0, 908, 0, 909, 0, 910, 0, 911, 0, 0, 0, 0, 912, 0, 0, - 0, 913, 0, 914, 0, 915, 0, 0, 916, 0, 0, 0, 0, 917, 0, 0, 0, 0, 918, 0, 0, 0, 0, 919, 0, 0, 920, 0, 921, 922, 0, 923, - 0, 924, 0, 0, 0, 925, 0, 0, 0, 0, 926, 0, 0, 0, 0, 927, 0, 0, 928, 0, 929, 930, 0, 931, 0, 932, 0, 933, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 934, 0, 0, 0, 0, 0, 0, 935, 0, 936, 0, 0, 937, 0, 938, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, - 0, 941, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, 944, 0, 0, 0, 0, - 0, 945, 0, 0, 946, 0, 0, 947, 0, 948, 0, 0, 949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, 951, 0, 0, 952, 0, 953, 0, - 0, 954, 0, 955, 0, 0, 0, 0, 956, 0, 0, 0, 957, 0, 958, 0, 959, 0, 960, 0, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 0, 0, - 962, 0, 0, 0, 963, 0, 0, 964, 0, 965, 966, 0, 967, 0, 968, 0, 0, 0, 0, 0, 969, 0, 0, 0, 970, 0, 971, 0, 972, 0, 0, 973, - 0, 0, 0, 974, 0, 0, 0, 0, 975, 0, 0, 0, 0, 976, 0, 0, 977, 0, 978, 979, 0, 980, 0, 981, 0, 0, 0, 982, 0, 0, 0, 0, - 983, 0, 0, 0, 0, 984, 0, 0, 985, 0, 986, 987, 0, 988, 0, 989, 0, 0, 990, 0, 991, 992, 0, 0, 993, 0, 0, 994, 0, 0, 0, 0, - 0, 995, 0, 0, 0, 0, 0, 0, 996, 0, 0, 0, 0, 997, 0, 0, 998, 0, 999, 1000, 0, 1001, 0, 1002, 0, 0, 0, 1003, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0010[64] = { + 0x4054005548AAA021ull, 0x82822842800A8085ull, 0x0A0A828282828282ull, 0x0004A2010A808095ull, + 0x0004011029268516ull, 0x440A400012685150ull, 0x1029268516000400ull, 0x0112210018080401ull, + 0x02808681502A5050ull, 0x0010000808006A88ull, 0x1400000000000000ull, 0x924848888A924944ull, + 0x5152000100064924ull, 0x84100000404000A0ull, 0x0042200021420A88ull, 0x0002821010008000ull, + 0x0410042095000000ull, 0x814400000200200Aull, 0x0408090008244800ull, 0x0051002001200021ull, + 0x0020848004041001ull, 0x09110820A4800004ull, 0x68848B4425242451ull, 0x0000002000ADA254ull, + 0xA0229512C4200000ull, 0x52AA552804028B02ull, 0x90114AAAAA081595ull, 0x400880010023006Aull, + 0x04446922A80A0104ull, 0xA4AA48082A880120ull, 0x20A4924889249229ull, 0x2810349054D51280ull, + 0x01010891090B0AAAull, 0xA421040090020048ull, 0x5495549255A955C8ull, 0x04802B5559495552ull, + 0x8802402A114AA110ull, 0x8062290055552848ull, 0x0801200011405114ull, 0xAAA555455552AA82ull, + 0xA1002801122A8AA2ull, 0x414AAAA942901802ull, 0x852A555520224142ull, 0x52400001412B4914ull, + 0x00020082A215510Aull, 0x0105442AA214A480ull, 0x10A4400A51920014ull, 0x900080214C428529ull, + 0x142948852200528Cull, 0x9528A49504010A62ull, 0x15150B2CA5080011ull, 0x000000A0A81500ADull, + 0xA000000000000000ull, 0x21485A4B4969502Aull, 0x04034AA484A52905ull, 0x15510AA480249510ull, + 0x200928AB484212A2ull, 0xD21084A8855442A9ull, 0x215510AA48024A2Aull, 0x0AB48422B484212Aull, + 0x09000102802A5020ull, 0x0205510A52401292ull, 0x08AD210895105691ull, 0x08AD21020934AD21ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0010[64] = { + 1u, 19u, 34u, 50u, 63u, 78u, 93u, 107u, 117u, 133u, 142u, 144u, 164u, 178u, 185u, 196u, + 202u, 210u, 218u, 227u, 235u, 243u, 254u, 275u, 287u, 301u, 321u, 344u, 355u, 371u, 388u, 408u, + 427u, 444u, 455u, 483u, 507u, 523u, 542u, 553u, 581u, 598u, 618u, 639u, 655u, 669u, 686u, 701u, + 717u, 735u, 755u, 774u, 787u, 789u, 813u, 833u, 852u, 871u, 893u, 913u, 934u, 945u, 962u, 983u, }; void recomp_unit_0010_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0010_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0882C000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0010[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0010[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0010[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0882C000; @@ -1179,7 +1086,6 @@ L_0882C000: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882C03C; } @@ -1191,7 +1097,6 @@ L_0882C014: { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -1201,7 +1106,6 @@ L_0882C014: } L_0882C034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C054; } @@ -1209,7 +1113,6 @@ L_0882C034: } L_0882C03C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1217,7 +1120,6 @@ L_0882C03C: } L_0882C044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1225,7 +1127,6 @@ L_0882C044: } L_0882C04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1233,7 +1134,6 @@ L_0882C04C: } L_0882C054: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1243,7 +1143,6 @@ L_0882C05C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(473))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1276,7 +1175,6 @@ L_0882C080: } L_0882C088: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0882C108; } @@ -1284,7 +1182,6 @@ L_0882C088: } L_0882C090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1317,7 +1214,6 @@ L_0882C098: goto L_0882C198; L_0882C0C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1325,7 +1221,6 @@ L_0882C0C8: } L_0882C0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1358,7 +1253,6 @@ L_0882C0F8: goto L_0882C8BC; L_0882C100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1369,7 +1263,6 @@ L_0882C108: aot_gpr_5 = (512u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882C14C; } @@ -1402,7 +1295,6 @@ L_0882C13C: goto L_0882C8BC; L_0882C144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1435,7 +1327,6 @@ L_0882C14C: goto L_0882C198; L_0882C17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C184; } @@ -1453,7 +1344,17 @@ L_0882C184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C198: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_gpr_6 & 255u); @@ -1475,7 +1376,6 @@ L_0882C1B4: aot_gpr_6 = (aot_gpr_6 & 255u); ctx.gpr[7] = (aot_gpr_6 < static_cast(11) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0882C308; } @@ -1487,14 +1387,22 @@ L_0882C1C4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18072))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C1DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C310; } @@ -1517,12 +1425,10 @@ L_0882C1E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C1FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 975u, 0x08997988u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C1FCu) goto L_0882C1FC; AOT_REGCACHE_SYNC_OUT(); return; L_0882C1FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1545,12 +1451,10 @@ L_0882C204: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C21Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 961u, 0x0899773Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C21Cu) goto L_0882C21C; AOT_REGCACHE_SYNC_OUT(); return; L_0882C21C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1573,12 +1477,10 @@ L_0882C224: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C23Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 989u, 0x08997BD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C23Cu) goto L_0882C23C; AOT_REGCACHE_SYNC_OUT(); return; L_0882C23C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1601,12 +1503,10 @@ L_0882C244: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C25Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 992u, 0x08997C24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C25Cu) goto L_0882C25C; AOT_REGCACHE_SYNC_OUT(); return; L_0882C25C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1629,12 +1529,10 @@ L_0882C264: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C27Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 1009u, 0x08997EE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C27Cu) goto L_0882C27C; AOT_REGCACHE_SYNC_OUT(); return; L_0882C27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1657,12 +1555,10 @@ L_0882C284: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C29Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0101_entry, 101u, 11u, 0x08998118u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C29Cu) goto L_0882C29C; AOT_REGCACHE_SYNC_OUT(); return; L_0882C29C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1685,12 +1581,10 @@ L_0882C2A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C2BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0101_entry, 101u, 23u, 0x089983B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C2BCu) goto L_0882C2BC; AOT_REGCACHE_SYNC_OUT(); return; L_0882C2BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1698,7 +1592,6 @@ L_0882C2BC: } L_0882C2C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1721,12 +1614,10 @@ L_0882C2CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C2E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0101_entry, 101u, 35u, 0x08998650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C2E4u) goto L_0882C2E4; AOT_REGCACHE_SYNC_OUT(); return; L_0882C2E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1748,12 +1639,10 @@ L_0882C2EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0882C300u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0101_entry, 101u, 47u, 0x089988BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C300u) goto L_0882C300; AOT_REGCACHE_SYNC_OUT(); return; L_0882C300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1761,7 +1650,6 @@ L_0882C300: } L_0882C308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C1DC; } @@ -1774,7 +1662,17 @@ L_0882C310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C31C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1821,7 +1719,17 @@ L_0882C36C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C380: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 << 16u); @@ -1845,7 +1753,6 @@ L_0882C3A4: goto L_0882C3B4; L_0882C3B4: aot_gpr_31 = (0x0882C3BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 458u, 0x088DF74Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C3BCu) goto L_0882C3BC; AOT_REGCACHE_SYNC_OUT(); return; L_0882C3BC: @@ -1855,7 +1762,17 @@ L_0882C3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C3C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -1876,7 +1793,6 @@ L_0882C404: goto L_0882C408; L_0882C408: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0882C420; } @@ -1921,7 +1837,6 @@ L_0882C444: L_0882C448: ctx.gpr[22] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0882C490; } @@ -1930,7 +1845,6 @@ L_0882C448: L_0882C454: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(476))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0882C490; } @@ -1944,7 +1858,6 @@ L_0882C460: AOT_REGCACHE_SYNC_OUT(); return; L_0882C46C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0882C490; } @@ -1989,7 +1902,17 @@ L_0882C4A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C4C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2014,7 +1937,6 @@ L_0882C510: goto L_0882C518; L_0882C518: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_0882C530; } @@ -2059,7 +1981,6 @@ L_0882C554: L_0882C558: ctx.gpr[23] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0882C5E8; } @@ -2090,9 +2011,7 @@ L_0882C570: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882C5E8; } @@ -2106,7 +2025,6 @@ L_0882C5B8: AOT_REGCACHE_SYNC_OUT(); return; L_0882C5C4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882C5E8; } @@ -2153,7 +2071,17 @@ L_0882C5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C628: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -2174,7 +2102,6 @@ L_0882C664: goto L_0882C668; L_0882C668: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0882C680; } @@ -2219,7 +2146,6 @@ L_0882C6A4: L_0882C6A8: ctx.gpr[22] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0882C6F0; } @@ -2228,7 +2154,6 @@ L_0882C6A8: L_0882C6B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(476))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0882C6F0; } @@ -2242,7 +2167,6 @@ L_0882C6C0: AOT_REGCACHE_SYNC_OUT(); return; L_0882C6CC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0882C6F0; } @@ -2287,7 +2211,17 @@ L_0882C700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C728: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -2297,7 +2231,6 @@ L_0882C728: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0882C8A4; } @@ -2309,7 +2242,6 @@ L_0882C74C: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 1u); if (branch_taken) { @@ -2332,7 +2264,6 @@ L_0882C770: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(478), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(478)))))); { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_0882C878; } @@ -2353,7 +2284,6 @@ L_0882C7B4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(473))); ctx.gpr[7] = (0u | 4u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882C7D0; } @@ -2368,7 +2298,6 @@ L_0882C7D0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_5 = (aot_gpr_6 & aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882C818; } @@ -2401,7 +2330,6 @@ L_0882C7E0: goto L_0882C198; L_0882C810: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C89C; } @@ -2443,7 +2371,6 @@ L_0882C844: AOT_REGCACHE_SYNC_OUT(); return; L_0882C84C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0882C870; } @@ -2463,7 +2390,6 @@ L_0882C854: AOT_REGCACHE_SYNC_OUT(); return; L_0882C870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882C89C; } @@ -2471,7 +2397,6 @@ L_0882C870: } L_0882C878: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882C89C; } @@ -2520,7 +2445,17 @@ L_0882C8A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C8BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2529,7 +2464,6 @@ L_0882C8BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882C8E4; } @@ -2537,7 +2471,6 @@ L_0882C8BC: } L_0882C8DC: aot_gpr_31 = (0x0882C8E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 649u, 0x089CF934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882C8E4u) goto L_0882C8E4; AOT_REGCACHE_SYNC_OUT(); return; L_0882C8E4: @@ -2614,7 +2547,17 @@ L_0882C96C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882C98C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -2736,7 +2679,6 @@ L_0882CB08: goto L_0882CB18; L_0882CB18: { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CB5C; } @@ -2745,7 +2687,6 @@ L_0882CB18: L_0882CB20: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CB5C; } @@ -2754,7 +2695,6 @@ L_0882CB20: L_0882CB2C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(198))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CB5C; } @@ -2763,7 +2703,6 @@ L_0882CB2C: L_0882CB38: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(200))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CB5C; } @@ -2772,7 +2711,6 @@ L_0882CB38: L_0882CB44: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(202))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CB5C; } @@ -2797,7 +2735,6 @@ L_0882CB5C: } L_0882CB64: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0882CB7C; } @@ -2829,7 +2766,6 @@ L_0882CB9C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 4u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CBB8; } @@ -2854,7 +2790,6 @@ L_0882CBB8: L_0882CBCC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(226))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2863,7 +2798,6 @@ L_0882CBCC: L_0882CBD8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(10))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2872,7 +2806,6 @@ L_0882CBD8: L_0882CBE4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2881,7 +2814,6 @@ L_0882CBE4: L_0882CBF0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(14))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2890,7 +2822,6 @@ L_0882CBF0: L_0882CBFC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2899,7 +2830,6 @@ L_0882CBFC: L_0882CC08: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2908,7 +2838,6 @@ L_0882CC08: L_0882CC14: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(2))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2917,7 +2846,6 @@ L_0882CC14: L_0882CC20: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(186))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0882CC38; } @@ -2926,7 +2854,6 @@ L_0882CC20: L_0882CC2C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(188))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0882CC44; } @@ -2962,7 +2889,17 @@ L_0882CC48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882CC80: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); aot_gpr_5 = (0u + static_cast(-1)); @@ -2980,7 +2917,6 @@ L_0882CC80: L_0882CCC4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(473))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882CCE0; } @@ -2988,7 +2924,6 @@ L_0882CCC4: } L_0882CCD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882CCF0; } @@ -2996,7 +2931,6 @@ L_0882CCD0: } L_0882CCD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882D4D4; } @@ -3026,7 +2960,6 @@ L_0882CCF8: AOT_REGCACHE_SYNC_OUT(); return; L_0882CD14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882CDE8; } @@ -3130,7 +3063,6 @@ L_0882CDE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(138))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0882CE1C; } @@ -3140,7 +3072,6 @@ L_0882CDFC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(190))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0882CE1C; } @@ -3166,7 +3097,6 @@ L_0882CE1C: } L_0882CE24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882CEC4; } @@ -3178,7 +3108,6 @@ L_0882CE2C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882CEC4; } @@ -3189,7 +3118,6 @@ L_0882CE44: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882CEC4; } @@ -3197,7 +3125,6 @@ L_0882CE44: } L_0882CE58: aot_gpr_31 = (0x0882CE60u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882CE60u) goto L_0882CE60; AOT_REGCACHE_SYNC_OUT(); return; L_0882CE60: @@ -3205,7 +3132,6 @@ L_0882CE60: aot_gpr_4 = (aot_gpr_4 & 31u); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0882CEC4; } @@ -3241,7 +3167,6 @@ L_0882CEC4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(242))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0882CF90; } @@ -3354,7 +3279,6 @@ L_0882CF90: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(244))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0882D4A8; } @@ -3373,7 +3297,6 @@ L_0882CFA4: AOT_REGCACHE_SYNC_OUT(); return; L_0882CFBC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882D4A8; } @@ -3434,12 +3357,10 @@ L_0882CFC4: AOT_REGCACHE_SYNC_OUT(); return; L_0882D060: aot_gpr_31 = (0x0882D068u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882D068u) goto L_0882D068; AOT_REGCACHE_SYNC_OUT(); return; L_0882D068: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882D4A8; } @@ -3476,7 +3397,6 @@ L_0882D0A8: aot_fpr_20 = std::bit_cast(0u); ctx.fpr[24] = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = ctx.fpr[26] + ctx.fpr[16]; if (branch_taken) { @@ -3488,9 +3408,7 @@ L_0882D0D0: aot_gpr_4 = (16320u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D2AC; } @@ -3501,9 +3419,7 @@ L_0882D0E8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D2AC; } @@ -3511,7 +3427,6 @@ L_0882D0E8: } L_0882D104: aot_gpr_31 = (0x0882D10Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882D10Cu) goto L_0882D10C; AOT_REGCACHE_SYNC_OUT(); return; L_0882D10C: @@ -3533,9 +3448,7 @@ L_0882D10C: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D2AC; } @@ -3559,9 +3472,7 @@ L_0882D134: aot_gpr_5 = (aot_gpr_5 | 52429u); ctx.fpr[22] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D2AC; } @@ -3657,7 +3568,6 @@ L_0882D1FC: L_0882D22C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(475))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882D248; } @@ -3672,7 +3582,6 @@ L_0882D238: L_0882D248: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(475))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0882D2AC; } @@ -3726,9 +3635,7 @@ L_0882D2AC: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D4A8; } @@ -3739,7 +3646,6 @@ L_0882D2CC: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49030u << 16u); if (branch_taken) { @@ -3751,9 +3657,7 @@ L_0882D2E8: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D4A8; } @@ -3762,9 +3666,7 @@ L_0882D2E8: L_0882D300: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0882D4A8; } @@ -3795,7 +3697,6 @@ L_0882D314: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.gpr[19] = (aot_gpr_29 + static_cast(176)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0882D354; @@ -3936,7 +3837,6 @@ L_0882D4A8: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882D4D4; } @@ -3970,7 +3870,17 @@ L_0882D4D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882D508: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4099,7 +4009,6 @@ L_0882D618: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0882D660; } @@ -4108,7 +4017,6 @@ L_0882D618: L_0882D628: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0882D654; } @@ -4119,7 +4027,6 @@ L_0882D634: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(0), aot_gpr_6); ctx.gpr[7] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0882D654; } @@ -4182,7 +4089,6 @@ L_0882D6A0: goto L_0882D6A4; L_0882D6A4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882D6F8; } @@ -4272,7 +4178,6 @@ L_0882D724: } L_0882D734: aot_gpr_31 = (0x0882D73Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882D73Cu) goto L_0882D73C; AOT_REGCACHE_SYNC_OUT(); return; L_0882D73C: @@ -4280,7 +4185,6 @@ L_0882D73C: goto L_0882D740; L_0882D740: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0882D708; } @@ -4291,7 +4195,6 @@ L_0882D748: goto L_0882D74C; L_0882D74C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882D75C; } @@ -4299,7 +4202,6 @@ L_0882D74C: } L_0882D754: aot_gpr_31 = (0x0882D75Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882D75Cu) goto L_0882D75C; AOT_REGCACHE_SYNC_OUT(); return; L_0882D75C: @@ -4323,7 +4225,17 @@ L_0882D75C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882D794: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4463,7 +4375,6 @@ L_0882D8F4: goto L_0882D8FC; L_0882D8FC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0882D924; } @@ -4486,7 +4397,6 @@ L_0882D920: goto L_0882D924; L_0882D924: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882D944; } @@ -4523,7 +4433,17 @@ L_0882D944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882D968: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -4561,7 +4481,6 @@ L_0882D9A8: goto L_0882DAD0; L_0882D9B0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882D9DC; } @@ -4578,7 +4497,6 @@ L_0882D9B8: } L_0882D9C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882D9DC; } @@ -4586,7 +4504,6 @@ L_0882D9C4: } L_0882D9CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882D9DC; } @@ -4594,12 +4511,10 @@ L_0882D9CC: } L_0882D9D4: aot_gpr_31 = (0x0882D9DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882D9DCu) goto L_0882D9DC; AOT_REGCACHE_SYNC_OUT(); return; L_0882D9DC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0882DA08; } @@ -4616,7 +4531,6 @@ L_0882D9E4: } L_0882D9F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882DA08; } @@ -4624,7 +4538,6 @@ L_0882D9F0: } L_0882D9F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882DA08; } @@ -4632,7 +4545,6 @@ L_0882D9F8: } L_0882DA00: aot_gpr_31 = (0x0882DA08u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DA08u) goto L_0882DA08; AOT_REGCACHE_SYNC_OUT(); return; L_0882DA08: @@ -4654,7 +4566,6 @@ L_0882DA1C: goto L_0882DA20; L_0882DA20: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882DA30; } @@ -4679,7 +4590,17 @@ L_0882DA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882DA4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(41))); @@ -4704,7 +4625,6 @@ L_0882DA6C: AOT_REGCACHE_SYNC_OUT(); return; L_0882DA74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882DA8C; } @@ -4712,7 +4632,6 @@ L_0882DA74: } L_0882DA7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882DAAC; } @@ -4720,7 +4639,6 @@ L_0882DA7C: } L_0882DA84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882DAC0; } @@ -4763,7 +4681,17 @@ L_0882DAC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882DAD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(34))); @@ -4779,7 +4707,6 @@ L_0882DAD0: L_0882DAF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882DB0C; } @@ -4795,7 +4722,6 @@ L_0882DAFC: } L_0882DB04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882DC08; } @@ -4916,7 +4842,17 @@ L_0882DC08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882DC20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); @@ -4934,7 +4870,6 @@ L_0882DC20: } L_0882DC44: aot_gpr_31 = (0x0882DC4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DC4Cu) goto L_0882DC4C; AOT_REGCACHE_SYNC_OUT(); return; L_0882DC4C: @@ -4950,12 +4885,10 @@ L_0882DC4C: AOT_REGCACHE_SYNC_OUT(); return; L_0882DC6C: aot_gpr_31 = (0x0882DC74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 538u, 0x08AD31E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DC74u) goto L_0882DC74; AOT_REGCACHE_SYNC_OUT(); return; L_0882DC74: aot_gpr_31 = (0x0882DC7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 172u, 0x08A1155Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DC7Cu) goto L_0882DC7C; AOT_REGCACHE_SYNC_OUT(); return; L_0882DC7C: @@ -4967,7 +4900,6 @@ L_0882DC84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0882DCC8; } @@ -4976,7 +4908,6 @@ L_0882DC84: L_0882DC94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(76))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882DCC8; } @@ -4991,7 +4922,6 @@ L_0882DCA0: goto L_0882DCAC; L_0882DCAC: aot_gpr_31 = (0x0882DCB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DCB4u) goto L_0882DCB4; AOT_REGCACHE_SYNC_OUT(); return; L_0882DCB4: @@ -5070,7 +5000,6 @@ L_0882DD4C: } L_0882DD5C: aot_gpr_31 = (0x0882DD64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DD64u) goto L_0882DD64; AOT_REGCACHE_SYNC_OUT(); return; L_0882DD64: @@ -5095,7 +5024,17 @@ L_0882DD74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882DD8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(34))); @@ -5117,7 +5056,6 @@ L_0882DDAC: L_0882DDB8: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0882DDD4; } @@ -5125,7 +5063,6 @@ L_0882DDB8: } L_0882DDC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882DDDC; } @@ -5133,7 +5070,6 @@ L_0882DDC4: } L_0882DDCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882DEDC; } @@ -5170,7 +5106,6 @@ L_0882DDFC: L_0882DE00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0882DE14; } @@ -5276,7 +5211,17 @@ L_0882DEDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882DEF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(33))); @@ -5294,7 +5239,6 @@ L_0882DEF4: } L_0882DF1C: aot_gpr_31 = (0x0882DF24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DF24u) goto L_0882DF24; AOT_REGCACHE_SYNC_OUT(); return; L_0882DF24: @@ -5307,7 +5251,6 @@ L_0882DF30: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_0882DF50; } @@ -5315,7 +5258,6 @@ L_0882DF30: } L_0882DF40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882DF5C; } @@ -5340,7 +5282,6 @@ L_0882DF58: L_0882DF5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882DF70; } @@ -5348,7 +5289,6 @@ L_0882DF5C: } L_0882DF68: aot_gpr_31 = (0x0882DF70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DF70u) goto L_0882DF70; AOT_REGCACHE_SYNC_OUT(); return; L_0882DF70: @@ -5379,7 +5319,6 @@ L_0882DF9C: AOT_REGCACHE_SYNC_OUT(); return; L_0882DFA8: aot_gpr_31 = (0x0882DFB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882DFB0u) goto L_0882DFB0; AOT_REGCACHE_SYNC_OUT(); return; L_0882DFB0: @@ -5399,7 +5338,17 @@ L_0882DFB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882DFD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(33))); @@ -5421,7 +5370,6 @@ L_0882DFF4: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0882E014; } @@ -5429,7 +5377,6 @@ L_0882DFF4: } L_0882E004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E0AC; } @@ -5437,7 +5384,6 @@ L_0882E004: } L_0882E00C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E0AC; } @@ -5445,12 +5391,10 @@ L_0882E00C: } L_0882E014: aot_gpr_31 = (0x0882E01Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E01Cu) goto L_0882E01C; AOT_REGCACHE_SYNC_OUT(); return; L_0882E01C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E090; } @@ -5541,7 +5485,17 @@ L_0882E0AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E0C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5645,7 +5599,17 @@ L_0882E1A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E1C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5658,7 +5622,6 @@ L_0882E1D4: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E2D0; } @@ -5667,7 +5630,6 @@ L_0882E1D4: L_0882E1E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E2D0; } @@ -5705,7 +5667,6 @@ L_0882E21C: goto L_0882E220; L_0882E220: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E268; } @@ -5740,7 +5701,6 @@ L_0882E24C: goto L_0882E9B4; L_0882E254: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E268; } @@ -5751,7 +5711,6 @@ L_0882E25C: goto L_0882E260; L_0882E260: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E2D0; } @@ -5763,7 +5722,6 @@ L_0882E268: goto L_0882E9B4; L_0882E270: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E2C0; } @@ -5777,7 +5735,6 @@ L_0882E278: L_0882E284: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E2E8; } @@ -5795,17 +5752,14 @@ L_0882E29C: goto L_0882DFD0; L_0882E2A8: aot_gpr_31 = (0x0882E2B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 297u, 0x08AB5428u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E2B0u) goto L_0882E2B0; AOT_REGCACHE_SYNC_OUT(); return; L_0882E2B0: aot_gpr_31 = (0x0882E2B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 807u, 0x08AB6E88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E2B8u) goto L_0882E2B8; AOT_REGCACHE_SYNC_OUT(); return; L_0882E2B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E2E8; } @@ -5817,7 +5771,6 @@ L_0882E2C0: goto L_0882DA4C; L_0882E2C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E2E8; } @@ -5826,7 +5779,6 @@ L_0882E2C8: L_0882E2D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E2E8; } @@ -5843,7 +5795,6 @@ L_0882E2E8: goto L_0882E9B4; L_0882E2F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E318; } @@ -5852,7 +5803,6 @@ L_0882E2F0: L_0882E2F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E318; } @@ -5861,7 +5811,6 @@ L_0882E2F8: L_0882E304: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E320; } @@ -5869,7 +5818,6 @@ L_0882E304: } L_0882E310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E328; } @@ -5877,7 +5825,6 @@ L_0882E310: } L_0882E318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E460; } @@ -5885,7 +5832,6 @@ L_0882E318: } L_0882E320: aot_gpr_31 = (0x0882E328u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E328u) goto L_0882E328; AOT_REGCACHE_SYNC_OUT(); return; L_0882E328: @@ -5899,7 +5845,6 @@ L_0882E330: goto L_0882E9C4; L_0882E338: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E3AC; } @@ -5908,7 +5853,6 @@ L_0882E338: L_0882E340: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(41))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E360; } @@ -5943,7 +5887,6 @@ L_0882E370: goto L_0882E378; L_0882E378: aot_gpr_31 = (0x0882E380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E380u) goto L_0882E380; AOT_REGCACHE_SYNC_OUT(); return; L_0882E380: @@ -5952,7 +5895,6 @@ L_0882E380: goto L_0882E388; L_0882E388: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882E3AC; } @@ -5960,7 +5902,6 @@ L_0882E388: } L_0882E390: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E3A4; } @@ -5968,7 +5909,6 @@ L_0882E390: } L_0882E398: aot_gpr_31 = (0x0882E3A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E3A0u) goto L_0882E3A0; AOT_REGCACHE_SYNC_OUT(); return; L_0882E3A0: @@ -5994,7 +5934,6 @@ L_0882E3B4: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0882E43C; } @@ -6003,7 +5942,6 @@ L_0882E3B4: L_0882E3DC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(28)))))); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0882E43C; } @@ -6029,7 +5967,6 @@ L_0882E410: aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0882E43C; } @@ -6040,7 +5977,6 @@ L_0882E420: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E43C; } @@ -6048,7 +5984,6 @@ L_0882E420: } L_0882E434: aot_gpr_31 = (0x0882E43Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0183_entry, 183u, 552u, 0x08AE1E48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882E43Cu) goto L_0882E43C; AOT_REGCACHE_SYNC_OUT(); return; L_0882E43C: @@ -6057,7 +5992,6 @@ L_0882E43C: goto L_0882E9B4; L_0882E444: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E460; } @@ -6066,7 +6000,6 @@ L_0882E444: L_0882E44C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E460; } @@ -6084,7 +6017,17 @@ L_0882E460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E470: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); @@ -6101,7 +6044,6 @@ L_0882E484: AOT_REGCACHE_SYNC_OUT(); return; L_0882E48C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E50C; } @@ -6116,7 +6058,6 @@ L_0882E494: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 2u)); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0882E50C; } @@ -6125,7 +6066,6 @@ L_0882E494: L_0882E4B8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0882E50C; } @@ -6151,7 +6091,6 @@ L_0882E4EC: aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0882E50C; } @@ -6171,7 +6110,17 @@ L_0882E50C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6181,7 +6130,6 @@ L_0882E518: goto L_0882E9B4; L_0882E52C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E550; } @@ -6198,7 +6146,6 @@ L_0882E534: } L_0882E540: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0882E660; } @@ -6206,7 +6153,6 @@ L_0882E540: } L_0882E548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E570; } @@ -6214,7 +6160,6 @@ L_0882E548: } L_0882E550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E660; } @@ -6230,7 +6175,6 @@ L_0882E558: } L_0882E560: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882E660; } @@ -6238,7 +6182,6 @@ L_0882E560: } L_0882E568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E660; } @@ -6307,7 +6250,6 @@ L_0882E5D8: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); aot_gpr_6 = (aot_gpr_4 & 255u); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_0882E630; } @@ -6334,7 +6276,6 @@ L_0882E610: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882E630; } @@ -6349,7 +6290,6 @@ L_0882E620: AOT_REGCACHE_SYNC_OUT(); return; L_0882E630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E660; } @@ -6368,7 +6308,6 @@ L_0882E638: AOT_REGCACHE_SYNC_OUT(); return; L_0882E658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E660; } @@ -6382,7 +6321,17 @@ L_0882E660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6441,7 +6390,17 @@ L_0882E6EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6458,7 +6417,6 @@ L_0882E71C: AOT_REGCACHE_SYNC_OUT(); return; L_0882E724: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E744; } @@ -6476,7 +6434,6 @@ L_0882E734: AOT_REGCACHE_SYNC_OUT(); return; L_0882E73C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E758; } @@ -6489,7 +6446,6 @@ L_0882E744: goto L_0882E750; L_0882E750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882E870; } @@ -6507,7 +6463,6 @@ L_0882E760: AOT_REGCACHE_SYNC_OUT(); return; L_0882E768: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E788; } @@ -6525,7 +6480,6 @@ L_0882E778: AOT_REGCACHE_SYNC_OUT(); return; L_0882E780: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E798; } @@ -6553,7 +6507,6 @@ L_0882E7A0: AOT_REGCACHE_SYNC_OUT(); return; L_0882E7A8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E7C8; } @@ -6571,7 +6524,6 @@ L_0882E7B8: AOT_REGCACHE_SYNC_OUT(); return; L_0882E7C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E7D4; } @@ -6598,7 +6550,6 @@ L_0882E7DC: AOT_REGCACHE_SYNC_OUT(); return; L_0882E7E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882E804; } @@ -6616,7 +6567,6 @@ L_0882E7F4: AOT_REGCACHE_SYNC_OUT(); return; L_0882E7FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E814; } @@ -6644,7 +6594,6 @@ L_0882E81C: AOT_REGCACHE_SYNC_OUT(); return; L_0882E824: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E83C; } @@ -6672,7 +6621,6 @@ L_0882E844: AOT_REGCACHE_SYNC_OUT(); return; L_0882E84C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882E864; } @@ -6701,7 +6649,17 @@ L_0882E870: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E880: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6798,11 +6756,20 @@ L_0882E930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E950: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882E964; } @@ -6825,11 +6792,20 @@ L_0882E964: goto L_0882E978; L_0882E978: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E980: aot_gpr_5 = (0u | 1u); jump_target = aot_gpr_31; @@ -6837,63 +6813,153 @@ L_0882E980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E98C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(30), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E994: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(31), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E99C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(40), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(41))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9AC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(41), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9B4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(32))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9BC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9C4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9CC: ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); jump_target = aot_gpr_31; @@ -6901,14 +6967,34 @@ L_0882E9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9D8: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(36), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882E9E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(42))); @@ -6935,14 +7021,34 @@ L_0882EA04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EA18: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(52), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EA20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6964,7 +7070,17 @@ L_0882EA44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EA54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(60))); @@ -6988,7 +7104,6 @@ L_0882EA74: } L_0882EA80: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0882EB60; } @@ -6996,7 +7111,6 @@ L_0882EA80: } L_0882EA88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882EB60; } @@ -7012,7 +7126,6 @@ L_0882EA90: } L_0882EA98: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882EB60; } @@ -7056,7 +7169,6 @@ L_0882EAD4: AOT_REGCACHE_SYNC_OUT(); return; L_0882EAE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882EB4C; } @@ -7117,7 +7229,6 @@ L_0882EB44: goto L_0882EB4C; L_0882EB4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882EB60; } @@ -7141,14 +7252,34 @@ L_0882EB60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EB78: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(64), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EB80: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(28)))))); @@ -7189,13 +7320,11 @@ L_0882EBE4: } L_0882EBF0: aot_gpr_31 = (0x0882EBF8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882EBF8u) goto L_0882EBF8; AOT_REGCACHE_SYNC_OUT(); return; L_0882EBF8: ctx.gpr[20] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0882EC9C; } @@ -7244,7 +7373,6 @@ L_0882EC38: } L_0882EC40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882EC9C; } @@ -7252,7 +7380,6 @@ L_0882EC40: } L_0882EC48: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882EC7C; } @@ -7277,7 +7404,6 @@ L_0882EC64: AOT_REGCACHE_SYNC_OUT(); return; L_0882EC74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882EC84; } @@ -7317,7 +7443,17 @@ L_0882EC9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882ECC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(28)))))); @@ -7358,13 +7494,11 @@ L_0882ED28: } L_0882ED34: aot_gpr_31 = (0x0882ED3Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882ED3Cu) goto L_0882ED3C; AOT_REGCACHE_SYNC_OUT(); return; L_0882ED3C: ctx.gpr[20] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0882EDE0; } @@ -7413,7 +7547,6 @@ L_0882ED7C: } L_0882ED84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882EDE0; } @@ -7421,7 +7554,6 @@ L_0882ED84: } L_0882ED8C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882EDC0; } @@ -7446,7 +7578,6 @@ L_0882EDA8: AOT_REGCACHE_SYNC_OUT(); return; L_0882EDB8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882EDC8; } @@ -7486,14 +7617,34 @@ L_0882EDE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EE08: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(29), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EE10: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -7686,7 +7837,6 @@ L_0882EF6C: } L_0882EF78: aot_gpr_31 = (0x0882EF80u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882EF80u) goto L_0882EF80; AOT_REGCACHE_SYNC_OUT(); return; L_0882EF80: @@ -7713,7 +7863,17 @@ L_0882EF94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882EFBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -7906,7 +8066,6 @@ L_0882F118: } L_0882F124: aot_gpr_31 = (0x0882F12Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F12Cu) goto L_0882F12C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F12C: @@ -7933,7 +8092,17 @@ L_0882F140: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882F168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(42))); @@ -7952,7 +8121,6 @@ L_0882F180: goto L_0882E9B4; L_0882F188: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882F1D4; } @@ -7961,7 +8129,6 @@ L_0882F188: L_0882F190: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(43))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F1BC; } @@ -7979,7 +8146,6 @@ L_0882F1A8: goto L_0882E9D8; L_0882F1B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882F1D4; } @@ -7998,7 +8164,6 @@ L_0882F1CC: L_0882F1D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F200; } @@ -8010,7 +8175,6 @@ L_0882F1E0: goto L_0882E9B4; L_0882F1E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882F1FC; } @@ -8032,7 +8196,17 @@ L_0882F200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882F210: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[18]); @@ -8055,7 +8229,6 @@ L_0882F24C: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(141))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882F268; } @@ -8063,7 +8236,6 @@ L_0882F24C: } L_0882F260: aot_gpr_31 = (0x0882F268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0181_entry, 181u, 881u, 0x08ADB9DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F268u) goto L_0882F268; AOT_REGCACHE_SYNC_OUT(); return; L_0882F268: @@ -8077,7 +8249,6 @@ L_0882F268: } L_0882F274: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882F288; } @@ -8086,7 +8257,6 @@ L_0882F274: L_0882F27C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0882F28C; } @@ -8097,7 +8267,6 @@ L_0882F288: goto L_0882F28C; L_0882F28C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F2A4; } @@ -8106,7 +8275,6 @@ L_0882F28C: L_0882F294: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F2A4; } @@ -8117,7 +8285,6 @@ L_0882F2A0: goto L_0882F2A4; L_0882F2A4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0882F2E8; } @@ -8132,12 +8299,10 @@ L_0882F2AC: goto L_0882EA18; L_0882F2C0: aot_gpr_31 = (0x0882F2C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 540u, 0x08AD3204u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F2C8u) goto L_0882F2C8; AOT_REGCACHE_SYNC_OUT(); return; L_0882F2C8: aot_gpr_31 = (0x0882F2D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 171u, 0x08A11550u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F2D0u) goto L_0882F2D0; AOT_REGCACHE_SYNC_OUT(); return; L_0882F2D0: @@ -8160,7 +8325,6 @@ L_0882F2E0: } L_0882F2E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882F6C4; } @@ -8186,7 +8350,6 @@ L_0882F30C: goto L_0882E9D8; L_0882F314: aot_gpr_31 = (0x0882F31Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F31Cu) goto L_0882F31C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F31C: @@ -8203,12 +8366,10 @@ L_0882F31C: AOT_REGCACHE_SYNC_OUT(); return; L_0882F340: aot_gpr_31 = (0x0882F348u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 723u, 0x08A06FE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F348u) goto L_0882F348; AOT_REGCACHE_SYNC_OUT(); return; L_0882F348: aot_gpr_31 = (0x0882F350u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F350u) goto L_0882F350; AOT_REGCACHE_SYNC_OUT(); return; L_0882F350: @@ -8223,12 +8384,10 @@ L_0882F350: AOT_REGCACHE_SYNC_OUT(); return; L_0882F36C: aot_gpr_31 = (0x0882F374u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 723u, 0x08A06FE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F374u) goto L_0882F374; AOT_REGCACHE_SYNC_OUT(); return; L_0882F374: aot_gpr_31 = (0x0882F37Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 691u, 0x08A06CBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F37Cu) goto L_0882F37C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F37C: @@ -8242,7 +8401,6 @@ L_0882F37C: AOT_REGCACHE_SYNC_OUT(); return; L_0882F394: aot_gpr_31 = (0x0882F39Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F39Cu) goto L_0882F39C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F39C: @@ -8348,7 +8506,6 @@ L_0882F504: goto L_0882E0C0; L_0882F50C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882F5B8; } @@ -8361,7 +8518,6 @@ L_0882F514: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(1398))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0882F538; } @@ -8379,7 +8535,6 @@ L_0882F538: L_0882F540: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0882F558; } @@ -8387,7 +8542,6 @@ L_0882F540: } L_0882F54C: aot_gpr_31 = (0x0882F554u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F554u) goto L_0882F554; AOT_REGCACHE_SYNC_OUT(); return; L_0882F554: @@ -8410,7 +8564,6 @@ L_0882F560: L_0882F56C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882F584; } @@ -8418,7 +8571,6 @@ L_0882F56C: } L_0882F578: aot_gpr_31 = (0x0882F580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F580u) goto L_0882F580; AOT_REGCACHE_SYNC_OUT(); return; L_0882F580: @@ -8426,13 +8578,11 @@ L_0882F580: goto L_0882F584; L_0882F584: aot_gpr_31 = (0x0882F58Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 712u, 0x089C70C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F58Cu) goto L_0882F58C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F58C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0882F5B8; } @@ -8441,7 +8591,6 @@ L_0882F58C: L_0882F598: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882F5B0; } @@ -8449,7 +8598,6 @@ L_0882F598: } L_0882F5A4: aot_gpr_31 = (0x0882F5ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F5ACu) goto L_0882F5AC; AOT_REGCACHE_SYNC_OUT(); return; L_0882F5AC: @@ -8490,7 +8638,6 @@ L_0882F5E0: L_0882F5F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882F608; } @@ -8498,7 +8645,6 @@ L_0882F5F4: } L_0882F600: aot_gpr_31 = (0x0882F608u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F608u) goto L_0882F608; AOT_REGCACHE_SYNC_OUT(); return; L_0882F608: @@ -8507,7 +8653,6 @@ L_0882F608: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(6851), static_cast(aot_gpr_5)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F6A4; } @@ -8530,7 +8675,6 @@ L_0882F634: AOT_REGCACHE_SYNC_OUT(); return; L_0882F640: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882F65C; } @@ -8544,7 +8688,6 @@ L_0882F648: AOT_REGCACHE_SYNC_OUT(); return; L_0882F654: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882F69C; } @@ -8572,7 +8715,6 @@ L_0882F67C: L_0882F688: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F69C; } @@ -8580,7 +8722,6 @@ L_0882F688: } L_0882F694: aot_gpr_31 = (0x0882F69Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F69Cu) goto L_0882F69C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F69C: @@ -8624,7 +8765,17 @@ L_0882F6C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882F6E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), aot_gpr_16); @@ -8648,7 +8799,6 @@ L_0882F710: AOT_REGCACHE_SYNC_OUT(); return; L_0882F720: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0882F73C; } @@ -8656,7 +8806,6 @@ L_0882F720: } L_0882F728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882F89C; } @@ -8711,12 +8860,10 @@ L_0882F788: } L_0882F794: aot_gpr_31 = (0x0882F79Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F79Cu) goto L_0882F79C; AOT_REGCACHE_SYNC_OUT(); return; L_0882F79C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882F894; } @@ -8765,7 +8912,6 @@ L_0882F7D8: } L_0882F7E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F894; } @@ -8773,7 +8919,6 @@ L_0882F7E0: } L_0882F7E8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882F81C; } @@ -8798,7 +8943,6 @@ L_0882F804: AOT_REGCACHE_SYNC_OUT(); return; L_0882F814: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882F824; } @@ -8858,7 +9002,6 @@ L_0882F880: goto L_0882F884; L_0882F884: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882F894; } @@ -8866,12 +9009,10 @@ L_0882F884: } L_0882F88C: aot_gpr_31 = (0x0882F894u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F894u) goto L_0882F894; AOT_REGCACHE_SYNC_OUT(); return; L_0882F894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882FC84; } @@ -8886,7 +9027,6 @@ L_0882F89C: AOT_REGCACHE_SYNC_OUT(); return; L_0882F8AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882FA14; } @@ -8932,12 +9072,10 @@ L_0882F900: } L_0882F90C: aot_gpr_31 = (0x0882F914u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882F914u) goto L_0882F914; AOT_REGCACHE_SYNC_OUT(); return; L_0882F914: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882FA0C; } @@ -8986,7 +9124,6 @@ L_0882F950: } L_0882F958: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FA0C; } @@ -8994,7 +9131,6 @@ L_0882F958: } L_0882F960: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882F994; } @@ -9019,7 +9155,6 @@ L_0882F97C: AOT_REGCACHE_SYNC_OUT(); return; L_0882F98C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882F99C; } @@ -9079,7 +9214,6 @@ L_0882F9F8: goto L_0882F9FC; L_0882F9FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FA0C; } @@ -9087,12 +9221,10 @@ L_0882F9FC: } L_0882FA04: aot_gpr_31 = (0x0882FA0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FA0Cu) goto L_0882FA0C; AOT_REGCACHE_SYNC_OUT(); return; L_0882FA0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882FC84; } @@ -9151,12 +9283,10 @@ L_0882FA78: } L_0882FA84: aot_gpr_31 = (0x0882FA8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FA8Cu) goto L_0882FA8C; AOT_REGCACHE_SYNC_OUT(); return; L_0882FA8C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882FBE4; } @@ -9205,7 +9335,6 @@ L_0882FAC8: } L_0882FAD0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FBE4; } @@ -9213,7 +9342,6 @@ L_0882FAD0: } L_0882FAD8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0882FB0C; } @@ -9238,7 +9366,6 @@ L_0882FAF4: AOT_REGCACHE_SYNC_OUT(); return; L_0882FB04: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0882FB14; } @@ -9298,7 +9425,6 @@ L_0882FB70: goto L_0882FB74; L_0882FB74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FB84; } @@ -9306,7 +9432,6 @@ L_0882FB74: } L_0882FB7C: aot_gpr_31 = (0x0882FB84u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FB84u) goto L_0882FB84; AOT_REGCACHE_SYNC_OUT(); return; L_0882FB84: @@ -9348,7 +9473,6 @@ L_0882FBD0: goto L_0882FBD4; L_0882FBD4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FBE4; } @@ -9356,12 +9480,10 @@ L_0882FBD4: } L_0882FBDC: aot_gpr_31 = (0x0882FBE4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FBE4u) goto L_0882FBE4; AOT_REGCACHE_SYNC_OUT(); return; L_0882FBE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882FC84; } @@ -9377,7 +9499,6 @@ L_0882FBEC: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FC7C; } @@ -9412,7 +9533,6 @@ L_0882FC44: AOT_REGCACHE_SYNC_OUT(); return; L_0882FC4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0882FC84; } @@ -9428,7 +9548,6 @@ L_0882FC54: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0882FC14; } @@ -9452,7 +9571,17 @@ L_0882FC84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0882FCA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), ctx.gpr[19]); @@ -9489,7 +9618,6 @@ L_0882FD04: L_0882FD10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FD24; } @@ -9497,7 +9625,6 @@ L_0882FD10: } L_0882FD1C: aot_gpr_31 = (0x0882FD24u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FD24u) goto L_0882FD24; AOT_REGCACHE_SYNC_OUT(); return; L_0882FD24: @@ -9535,13 +9662,11 @@ L_0882FD64: } L_0882FD70: aot_gpr_31 = (0x0882FD78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FD78u) goto L_0882FD78; AOT_REGCACHE_SYNC_OUT(); return; L_0882FD78: ctx.gpr[17] = (aot_gpr_16 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 24u, 0x08830114u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9590,7 +9715,6 @@ L_0882FDB8: } L_0882FDC0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 24u, 0x08830114u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9655,7 +9779,6 @@ L_0882FE28: AOT_REGCACHE_SYNC_OUT(); return; L_0882FE30: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0882FE68; } @@ -9740,7 +9863,6 @@ L_0882FEC8: goto L_0882FECC; L_0882FECC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FEDC; } @@ -9748,7 +9870,6 @@ L_0882FECC: } L_0882FED4: aot_gpr_31 = (0x0882FEDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FEDCu) goto L_0882FEDC; AOT_REGCACHE_SYNC_OUT(); return; L_0882FEDC: @@ -9790,7 +9911,6 @@ L_0882FF28: goto L_0882FF2C; L_0882FF2C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FF3C; } @@ -9798,7 +9918,6 @@ L_0882FF2C: } L_0882FF34: aot_gpr_31 = (0x0882FF3Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FF3Cu) goto L_0882FF3C; AOT_REGCACHE_SYNC_OUT(); return; L_0882FF3C: @@ -9810,7 +9929,6 @@ L_0882FF3C: goto L_0882FF48; L_0882FF48: aot_gpr_31 = (0x0882FF50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FF50u) goto L_0882FF50; AOT_REGCACHE_SYNC_OUT(); return; L_0882FF50: @@ -9825,7 +9943,6 @@ L_0882FF54: L_0882FF60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 8u, 0x08830044u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9866,7 +9983,6 @@ L_0882FFB4: goto L_0882FFC0; L_0882FFC0: aot_gpr_31 = (0x0882FFC8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FFC8u) goto L_0882FFC8; AOT_REGCACHE_SYNC_OUT(); return; L_0882FFC8: @@ -9874,7 +9990,6 @@ L_0882FFC8: goto L_0882FFCC; L_0882FFCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0882FFDC; } @@ -9882,7 +9997,6 @@ L_0882FFCC: } L_0882FFD4: aot_gpr_31 = (0x0882FFDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0882FFDCu) goto L_0882FFDC; AOT_REGCACHE_SYNC_OUT(); return; L_0882FFDC: diff --git a/profiles/vcs/generated/generated_unit_0011.cpp b/profiles/vcs/generated/generated_unit_0011.cpp index 5d1514b..98fa5ae 100644 --- a/profiles/vcs/generated/generated_unit_0011.cpp +++ b/profiles/vcs/generated/generated_unit_0011.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0011[4095] = { - 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 4, 5, 0, 6, 0, 7, 0, 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 11, 0, 0, 12, 0, 13, 14, 0, 15, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, 20, 0, - 21, 22, 0, 23, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, - 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 36, 0, 37, 0, 38, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, - 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, - 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 0, 53, 54, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 57, 0, 58, - 0, 0, 0, 0, 0, 59, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, - 0, 0, 65, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, - 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 90, 91, 0, 0, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 96, 0, 97, 98, 0, 99, 0, - 100, 0, 0, 0, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 107, 0, 108, 0, 109, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 111, 0, 0, 0, 112, 0, 113, 0, 0, 114, 0, 0, 0, 115, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, - 118, 0, 119, 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 124, - 0, 125, 0, 126, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, - 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 148, 0, 149, 0, 150, 0, 0, 0, 0, 151, 0, 152, 0, 153, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, - 0, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 159, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 165, 0, 0, 0, 166, 0, 0, 0, 167, 0, 168, - 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 184, 0, 0, 0, 185, 0, 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, 189, 0, 190, - 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 199, 200, 0, 201, 0, 202, 0, 0, 0, 0, - 203, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, - 0, 211, 0, 212, 0, 213, 0, 214, 0, 0, 0, 0, 0, 215, 0, 0, 216, 0, 0, 0, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 0, 219, - 220, 221, 0, 222, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 226, 0, 0, 227, 0, 228, 0, 0, 0, 0, - 0, 0, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 233, 0, 234, 0, 0, 235, 0, 236, 0, 237, 0, 0, 0, 238, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, - 245, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 250, 0, 0, 0, 251, 0, 252, 0, 253, 0, - 254, 0, 0, 0, 255, 0, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 259, 0, 260, 0, 0, 261, 0, 262, 0, 263, 0, 264, 0, - 0, 0, 265, 0, 0, 0, 266, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 283, 0, - 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 295, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 300, 0, 301, 0, 0, 0, 0, 302, 0, 303, - 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, - 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, - 0, 0, 0, 0, 312, 0, 0, 313, 0, 0, 0, 314, 0, 315, 0, 316, 0, 0, 317, 0, 318, 0, 0, 0, 319, 320, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, - 0, 328, 0, 0, 0, 0, 0, 0, 329, 330, 0, 0, 0, 331, 0, 332, 0, 0, 333, 0, 334, 0, 0, 0, 335, 0, 336, 0, 0, 337, 0, 0, - 338, 339, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 345, 0, 346, 0, 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, - 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 359, 0, 360, 0, 0, 361, 0, 0, 0, 362, 0, 363, - 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, 371, - 0, 372, 0, 373, 0, 374, 0, 0, 0, 375, 0, 376, 0, 377, 0, 0, 0, 378, 0, 379, 0, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 0, - 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, - 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 390, 0, 0, 0, 0, 391, 0, 0, 0, 392, 0, 393, 394, 0, 0, 0, 0, 0, 395, 0, - 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, - 0, 401, 0, 0, 0, 0, 402, 0, 0, 0, 0, 403, 0, 404, 405, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, 409, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 412, 0, 413, 0, 0, 0, 0, 414, 415, 0, 0, 416, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, - 0, 0, 421, 0, 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, - 430, 0, 0, 0, 0, 0, 431, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 436, 0, 0, 437, 0, - 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 0, 0, - 0, 442, 0, 443, 0, 444, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, 448, 0, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 454, 0, 0, 0, - 455, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, - 462, 0, 463, 464, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 468, 469, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, - 472, 0, 473, 474, 0, 0, 475, 0, 0, 0, 476, 0, 477, 0, 0, 478, 0, 0, 479, 480, 0, 481, 0, 0, 482, 0, 0, 483, 0, 484, 485, 0, - 486, 487, 0, 0, 488, 489, 0, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 495, - 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 500, 0, - 501, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, - 504, 0, 505, 0, 0, 0, 506, 0, 507, 508, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 513, - 514, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 517, 0, 0, 0, 518, 0, 519, 520, 0, 0, 0, 0, 0, 521, 0, - 0, 0, 0, 0, 0, 0, 522, 0, 0, 523, 0, 0, 0, 524, 0, 525, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 528, 0, - 0, 529, 0, 0, 530, 0, 0, 531, 0, 0, 0, 532, 0, 533, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 537, - 0, 0, 0, 538, 0, 539, 540, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 544, 0, 0, 0, 545, 0, 0, - 546, 0, 547, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 551, - 0, 0, 552, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 561, 0, 562, 0, 563, 564, 0, 0, 565, 0, 566, - 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 572, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 578, - 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 583, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, - 0, 0, 586, 0, 0, 587, 0, 0, 0, 588, 0, 0, 589, 0, 590, 591, 592, 0, 0, 0, 0, 593, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, - 596, 0, 0, 597, 0, 598, 0, 0, 0, 599, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, - 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 0, 612, 0, - 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 0, 0, 0, 616, 617, 618, 0, 619, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 624, 625, 0, 626, 0, - 0, 627, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, - 0, 0, 0, 0, 632, 0, 633, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 638, 0, 639, 0, - 640, 0, 0, 0, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 648, - 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 651, 0, 0, 0, 0, 652, 0, 653, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 656, 0, 0, 0, 0, 657, 0, 0, 658, 659, 0, 0, 0, - 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 666, 667, 0, 0, - 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 670, 0, 671, - 0, 0, 0, 672, 0, 0, 673, 0, 674, 0, 675, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 678, 0, 679, 0, - 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 684, 0, 685, 0, 0, 0, 686, 0, - 687, 688, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, - 0, 692, 0, 0, 0, 693, 0, 0, 694, 0, 695, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 699, 0, 700, - 0, 0, 0, 701, 0, 702, 703, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, - 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 708, 0, 0, 709, 0, 710, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, - 0, 0, 0, 713, 0, 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 718, - 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 0, 0, 0, 0, 0, 0, 724, - 725, 0, 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 731, 0, 732, 0, 733, 0, 0, 0, 0, 734, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, - 737, 0, 0, 0, 0, 0, 0, 0, 738, 0, 739, 740, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 744, - 0, 0, 0, 0, 0, 745, 0, 746, 0, 0, 0, 0, 0, 747, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 750, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 753, 0, 0, 754, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 756, 0, 757, 0, 758, 0, 0, 0, 759, 0, 0, 0, 0, 0, 760, 0, 0, - 0, 761, 0, 0, 0, 0, 762, 0, 0, 763, 0, 0, 764, 0, 0, 0, 0, 765, 0, 766, 0, 0, 0, 767, 0, 768, 0, 769, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 773, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 775, 0, - 0, 0, 0, 0, 776, 777, 0, 0, 778, 779, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 781, 782, 0, 0, 783, 0, 784, 0, 0, 785, 0, - 0, 786, 0, 0, 787, 0, 0, 0, 0, 0, 0, 788, 0, 789, 0, 790, 0, 0, 0, 791, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 793, 0, - 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 796, 0, 797, 0, 798, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 801, 0, 802, - 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 805, 0, 0, 0, 0, 0, 806, 807, 0, - 0, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 809, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 813, 814, 0, 0, 0, 0, 0, 0, 0, 0, 815, 816, 0, 0, 0, 817, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, 0, 819, 0, 0, 0, 0, 820, 0, 0, 0, 0, 821, 0, 0, - 0, 0, 822, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 829, 0, 830, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 833, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, 836, 0, 0, 0, - 0, 837, 0, 0, 0, 0, 0, 0, 0, 838, 0, 0, 839, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 841, 0, 0, 842, 0, 0, 0, 843, - 0, 0, 0, 844, 0, 845, 0, 846, 0, 847, 0, 0, 0, 848, 0, 0, 849, 0, 0, 0, 850, 0, 0, 851, 0, 0, 0, 0, 852, 0, 0, 853, - 0, 0, 0, 854, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 857, 0, 858, 0, 0, 0, 859, 0, 860, 0, 861, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, 0, 863, 0, 0, 0, 864, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 866, 0, 867, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0011[64] = { + 0x48422B484082AD21ull, 0xA0004010800800ABull, 0x4108100405414090ull, 0xB106481504040810ull, + 0x01008054110102A0ull, 0x085091002004A004ull, 0x3480102044102008ull, 0x05482AA15A440820ull, + 0x8108005505112888ull, 0x802200880402210Aull, 0x0010804455500500ull, 0x000000480482A150ull, + 0xA2288A2800000008ull, 0xA2A22A40202AAAAAull, 0x02A420510AC24AAAull, 0x0A4800AB848120AAull, + 0x000000001152A490ull, 0x5444808901090109ull, 0x000800C455284891ull, 0x0444820002801000ull, + 0x0889210862088110ull, 0xA148204000645400ull, 0x8008280421000100ull, 0x548400102314A890ull, + 0x000020232514A302ull, 0xA2588150AAA12A21ull, 0x288A2A2A88448904ull, 0x41A2110124020021ull, + 0x0001684201201404ull, 0x0844A61401034400ull, 0x48A100C140A89114ull, 0x1AA9492A05001001ull, + 0x1135010D40A00215ull, 0xC8080A33692C944Dull, 0x4000000949100010ull, 0x41A24041A2408345ull, + 0x901068924041A240ull, 0x8800200D22901068ull, 0x4A042008A6AAA954ull, 0x8100100800012000ull, + 0x1421D22422018888ull, 0x4AAA080402222229ull, 0x58880080000AE111ull, 0x5422025088000052ull, + 0x81100000201080C1ull, 0x1908800001143080ull, 0xA10000403440A402ull, 0x4548040452010548ull, + 0xA900852284000103ull, 0x8010A45080002068ull, 0x80A0440281100A08ull, 0x10A8400000420141ull, + 0x810A0D0101008000ull, 0x000000000020A0A0ull, 0x208A881200800041ull, 0x404540200A8A1242ull, + 0x4048A8124A610330ull, 0xA040015400000408ull, 0x0102200460880010ull, 0x2109000046018800ull, + 0x0001040020042084ull, 0x120212000000002Aull, 0x909122A889011202ull, 0x50422200A8A80088ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0011[64] = { + 1u, 21u, 32u, 44u, 59u, 70u, 81u, 92u, 110u, 125u, 136u, 148u, 158u, 169u, 191u, 211u, + 229u, 239u, 254u, 269u, 277u, 291u, 304u, 312u, 328u, 342u, 364u, 383u, 396u, 407u, 421u, 438u, + 455u, 472u, 496u, 504u, 522u, 538u, 552u, 573u, 579u, 596u, 613u, 627u, 640u, 649u, 660u, 672u, + 687u, 701u, 713u, 725u, 735u, 745u, 750u, 761u, 776u, 794u, 803u, 812u, 822u, 829u, 837u, 854u, }; void recomp_unit_0011_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0011_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08830000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0011[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0011[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0011[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08830000; @@ -1063,7 +970,6 @@ L_08830028: goto L_0883002C; L_0883002C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883003C; } @@ -1071,12 +977,10 @@ L_0883002C: } L_08830034: aot_gpr_31 = (0x0883003Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883003Cu) goto L_0883003C; AOT_REGCACHE_SYNC_OUT(); return; L_0883003C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08830114; } @@ -1118,7 +1022,6 @@ L_0883008C: goto L_08830098; L_08830098: aot_gpr_31 = (0x088300A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088300A0u) goto L_088300A0; AOT_REGCACHE_SYNC_OUT(); return; L_088300A0: @@ -1126,7 +1029,6 @@ L_088300A0: goto L_088300A4; L_088300A4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088300B4; } @@ -1134,7 +1036,6 @@ L_088300A4: } L_088300AC: aot_gpr_31 = (0x088300B4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088300B4u) goto L_088300B4; AOT_REGCACHE_SYNC_OUT(); return; L_088300B4: @@ -1177,7 +1078,6 @@ L_08830100: goto L_08830104; L_08830104: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08830114; } @@ -1185,7 +1085,6 @@ L_08830104: } L_0883010C: aot_gpr_31 = (0x08830114u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08830114u) goto L_08830114; AOT_REGCACHE_SYNC_OUT(); return; L_08830114: @@ -1212,7 +1111,17 @@ L_0883011C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883014C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1237,7 +1146,17 @@ L_0883017C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830190: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1270,14 +1189,34 @@ L_088301B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088301F4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088301FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -1292,7 +1231,17 @@ L_08830210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883021C: ctx.fpr[14] = aot_fpr_12 / aot_fpr_13; ctx.fpr[14] = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[14])); @@ -1300,25 +1249,42 @@ L_0883021C: { const float fs = ctx.fpr[14]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_0 = std::bit_cast(0x7FC00000u); else aot_fpr_0 = fs * ft; } aot_fpr_0 = aot_fpr_12 - aot_fpr_0; jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830238: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830240: aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08830260; } @@ -1334,11 +1300,20 @@ L_08830258: } L_08830260: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830268: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1382,11 +1357,20 @@ L_08830268: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830288: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1440,11 +1424,20 @@ L_08830288: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088302B0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1468,11 +1461,20 @@ L_088302B0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088302CC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1489,11 +1491,20 @@ L_088302CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088302E0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1519,11 +1530,20 @@ L_088302E0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088302F8: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1549,11 +1569,20 @@ L_088302F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830310: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -1572,11 +1601,20 @@ L_08830310: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883032C: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -1595,11 +1633,20 @@ L_0883032C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830348: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -1619,18 +1666,25 @@ L_08830348: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830368: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08830388; } @@ -1646,11 +1700,20 @@ L_08830380: } L_08830388: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1664,7 +1727,6 @@ L_08830390: L_088303AC: aot_gpr_4 = (ctx.gpr[2] & 3u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088303C4; } @@ -1695,12 +1757,21 @@ L_088303C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088303E0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088303F4; } @@ -1715,14 +1786,22 @@ L_088303F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088303FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883041C; } @@ -1738,11 +1817,20 @@ L_08830414: } L_0883041C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830424: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -1768,7 +1856,17 @@ L_08830440: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830460: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1788,7 +1886,17 @@ L_08830460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830470: aot_gpr_6 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -1811,11 +1919,20 @@ L_08830488: } L_08830490: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830498: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1827,11 +1944,20 @@ L_08830498: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088304BC: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1843,11 +1969,20 @@ L_088304BC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088304E0: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1860,11 +1995,20 @@ L_088304E0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830508: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1878,26 +2022,54 @@ L_08830508: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<64u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830534: jump_target = aot_gpr_31; { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_0 = std::bit_cast(0x7FC00000u); else aot_fpr_0 = fs * ft; } local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883053C: aot_fpr_0 = std::sqrt(aot_fpr_12); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830548: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1909,11 +2081,20 @@ L_08830548: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830574: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -1925,32 +2106,58 @@ L_08830574: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088305A0: aot_fpr_0 = std::bit_cast(ctx.fpu_float_to_word_ct<2u>(aot_fpr_12)); aot_fpr_0 = static_cast(static_cast(std::bit_cast(aot_fpr_0))); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088305B0: aot_fpr_0 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088305BC: aot_fpr_0 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_0 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088305D0; @@ -1958,11 +2165,20 @@ L_088305BC: goto L_088305D0; L_088305D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088305D8: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(ctx.fpr[14])}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -1971,7 +2187,17 @@ L_088305D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088305EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -1984,7 +2210,17 @@ L_088305EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883060C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2007,11 +2243,20 @@ L_0883060C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830634: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2027,11 +2272,20 @@ L_08830634: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830650: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2046,11 +2300,20 @@ L_08830650: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830668: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2070,7 +2333,17 @@ L_08830668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830678: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -2093,7 +2366,17 @@ L_08830678: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830694: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (0u + static_cast(-2)); @@ -2105,7 +2388,17 @@ L_08830694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088306B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2126,7 +2419,6 @@ L_088306B0: L_088306DC: aot_gpr_6 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088306F4; } @@ -2164,7 +2456,17 @@ L_08830714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883072C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2197,7 +2499,6 @@ L_08830758: goto L_08830764; L_08830764: aot_gpr_31 = (0x0883076Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883076Cu) goto L_0883076C; AOT_REGCACHE_SYNC_OUT(); return; L_0883076C: @@ -2205,7 +2506,6 @@ L_0883076C: goto L_08830770; L_08830770: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08830780; } @@ -2228,35 +2528,85 @@ L_08830780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830794: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883079C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088307A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088307AC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088307B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -2273,21 +2623,51 @@ L_088307CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088307D8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088307E0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088307E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -2295,7 +2675,6 @@ L_088307E8: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_0)) && aot_fpr_13 == aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -2305,9 +2684,7 @@ L_088307E8: } L_0883080C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_0)) && aot_fpr_12 == aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08830834; } @@ -2322,7 +2699,6 @@ L_0883081C: AOT_REGCACHE_SYNC_OUT(); return; L_0883082C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08830834; } @@ -2335,7 +2711,17 @@ L_08830834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830840: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2354,11 +2740,20 @@ L_08830850: goto L_08830860; L_08830860: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830868: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -2369,28 +2764,68 @@ L_08830868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830880: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830888: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830890: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830898: aot_gpr_4 = (16968u << 16u); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -2402,9 +2837,7 @@ L_08830898: aot_fpr_12 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088308E0; } @@ -2432,18 +2865,37 @@ L_088308E0: goto L_088308FC; L_088308FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830904: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883090C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -2453,7 +2905,17 @@ L_0883090C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830920: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_5 = (16u << 16u); @@ -2463,7 +2925,17 @@ L_08830920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830934: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 496u); @@ -2472,7 +2944,17 @@ L_08830934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830944: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -2486,7 +2968,17 @@ L_08830944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830968: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -2500,7 +2992,17 @@ L_08830968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883098C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 16384u); @@ -2509,7 +3011,17 @@ L_0883098C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883099C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -2524,7 +3036,17 @@ L_0883099C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088309C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 32768u); @@ -2533,7 +3055,17 @@ L_088309C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088309D4: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -2548,7 +3080,17 @@ L_088309D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088309FC: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -2562,14 +3104,34 @@ L_088309FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A20: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -2584,47 +3146,106 @@ L_08830A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A50: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A58: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A60: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(28), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A68: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(30), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A70: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08830A88u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08830A88u) goto L_08830A88; AOT_REGCACHE_SYNC_OUT(); return; L_08830A88: @@ -2635,7 +3256,17 @@ L_08830A88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830A98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[17]); @@ -2679,21 +3310,51 @@ L_08830AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B10: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B18: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(310), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B20: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(306), static_cast(0u)); aot_fpr_12 = std::bit_cast(0u); @@ -2703,21 +3364,51 @@ L_08830B20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B34: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(268))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B3C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(336))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -2734,7 +3425,17 @@ L_08830B5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { std::uint32_t aot_run_words[3]{}; @@ -2757,7 +3458,17 @@ L_08830B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (aot_gpr_4 + static_cast(112)); @@ -2866,7 +3577,17 @@ L_08830B98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830C0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -2981,14 +3702,34 @@ L_08830C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830C8C: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(264))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830C94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(340))); ctx.gpr[2] = (aot_gpr_4 & 4u); @@ -2997,14 +3738,34 @@ L_08830C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CA4: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(92)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(92)))))); ctx.gpr[2] = (aot_gpr_4 ^ 82u); @@ -3013,7 +3774,17 @@ L_08830CAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(92)))))); ctx.gpr[2] = (aot_gpr_4 ^ 70u); @@ -3022,14 +3793,34 @@ L_08830CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CCC: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -3038,7 +3829,17 @@ L_08830CD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -3047,91 +3848,221 @@ L_08830CE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CF4: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830CFC: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D04: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D0C: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D14: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(116))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D1C: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D24: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D2C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(148))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D34: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(149))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D3C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(160)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D44: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(136))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D4C: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(149)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D54: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(154)))))); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -3144,7 +4075,17 @@ L_08830D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D74: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(154)))))); @@ -3158,7 +4099,17 @@ L_08830D74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830D98: aot_gpr_5 = (aot_gpr_5 & 255u); if (aot_gpr_5 == 0u) { @@ -3176,11 +4127,20 @@ L_08830DA4: } L_08830DAC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DB4: aot_gpr_5 = (aot_gpr_5 << 4u); ctx.gpr[2] = (aot_gpr_4 + aot_gpr_5); @@ -3189,7 +4149,17 @@ L_08830DB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(636))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -3198,21 +4168,51 @@ L_08830DC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DD4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DDC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); ctx.gpr[2] = (aot_gpr_4 & 32u); @@ -3221,56 +4221,136 @@ L_08830DE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DF4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(600), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830DFC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(604), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E04: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E0C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(608), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E14: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E1C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E24: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E2C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(558))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -3283,7 +4363,6 @@ L_08830E2C: L_08830E38: ctx.gpr[7] = (0u | 65535u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08830E5C; } @@ -3294,7 +4373,6 @@ L_08830E44: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08830E5C; } @@ -3309,14 +4387,33 @@ L_08830E5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E64: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -3336,11 +4433,20 @@ L_08830E80: goto L_08830E90; L_08830E90: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830E98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3360,11 +4466,20 @@ L_08830EB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830EC8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(700))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08830EDC; } @@ -3376,11 +4491,20 @@ L_08830ED4: goto L_08830EDC; L_08830EDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830EE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(538)))))); @@ -3397,7 +4521,6 @@ L_08830EE4: } L_08830F04: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08830F34; } @@ -3434,7 +4557,17 @@ L_08830F34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08830F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3476,7 +4609,6 @@ L_08830F80: goto L_08830F84; L_08830F84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08831060; } @@ -3484,12 +4616,10 @@ L_08830F84: } L_08830F8C: aot_gpr_31 = (0x08830F94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08830F94u) goto L_08830F94; AOT_REGCACHE_SYNC_OUT(); return; L_08830F94: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08830FCC; } @@ -3507,7 +4637,6 @@ L_08830F9C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08831060; } @@ -3516,7 +4645,6 @@ L_08830F9C: L_08830FCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(700))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08831060; } @@ -3525,7 +4653,6 @@ L_08830FCC: L_08830FD8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(705))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0883101C; } @@ -3533,7 +4660,6 @@ L_08830FD8: } L_08830FE4: aot_gpr_31 = (0x08830FECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08830FECu) goto L_08830FEC; AOT_REGCACHE_SYNC_OUT(); return; L_08830FEC: @@ -3545,7 +4671,6 @@ L_08830FEC: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_5 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08831028; } @@ -3580,7 +4705,6 @@ L_08831028: } L_08831034: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831044; } @@ -3602,7 +4726,6 @@ L_08831044: } L_08831050: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831060; } @@ -3621,7 +4744,17 @@ L_08831060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831070: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -3773,7 +4906,6 @@ L_088311E8: } L_088311F0: aot_gpr_31 = (0x088311F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088311F8u) goto L_088311F8; AOT_REGCACHE_SYNC_OUT(); return; L_088311F8: @@ -3819,7 +4951,6 @@ L_08831238: goto L_088312CC; L_0883124C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08831270; } @@ -3832,7 +4963,6 @@ L_08831254: goto L_088312CC; L_08831260: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08831278; } @@ -3896,7 +5026,17 @@ L_0883129C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088312CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -3977,7 +5117,6 @@ L_088313A4: L_088313BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08831548; } @@ -3987,7 +5126,6 @@ L_088313C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08831548; } @@ -3997,7 +5135,6 @@ L_088313D8: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(84))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08831548; } @@ -4011,7 +5148,6 @@ L_088313E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08831410; @@ -4019,9 +5155,7 @@ L_088313E8: goto L_08831410; L_08831410: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08831548; } @@ -4032,7 +5166,6 @@ L_08831420: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0883143C; @@ -4040,9 +5173,7 @@ L_08831420: goto L_0883143C; L_0883143C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08831548; } @@ -4072,9 +5203,7 @@ L_08831474: L_08831478: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1536))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088314A0; } @@ -4085,7 +5214,6 @@ L_0883148C: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08831538; } @@ -4143,7 +5271,6 @@ L_088314EC: AOT_REGCACHE_SYNC_OUT(); return; L_08831528: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08831538; } @@ -4170,7 +5297,6 @@ L_08831538: L_08831548: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088313A4; } @@ -4202,7 +5328,17 @@ L_08831558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831598: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4228,7 +5364,6 @@ L_088315B4: L_088315CC: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088315E0; } @@ -4251,14 +5386,34 @@ L_088315E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088315F4: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1704))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088315FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4359,7 +5514,17 @@ L_088316B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088316CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4389,7 +5554,6 @@ L_088316FC: L_08831710: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0883173C; } @@ -4404,7 +5568,6 @@ L_0883171C: AOT_REGCACHE_SYNC_OUT(); return; L_0883172C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831774; } @@ -4412,7 +5575,6 @@ L_0883172C: } L_08831734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831774; } @@ -4421,7 +5583,6 @@ L_08831734: L_0883173C: aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08831774; } @@ -4429,7 +5590,6 @@ L_0883173C: } L_08831748: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08831764; } @@ -4466,7 +5626,17 @@ L_08831774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831790: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4498,7 +5668,6 @@ L_088317C8: L_088317DC: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088317F8; } @@ -4506,7 +5675,6 @@ L_088317DC: } L_088317E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883183C; } @@ -4514,7 +5682,6 @@ L_088317E8: } L_088317F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831894; } @@ -4523,7 +5690,6 @@ L_088317F0: L_088317F8: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_16 != aot_gpr_5; - // nop if (branch_taken) { goto L_08831824; } @@ -4551,7 +5717,6 @@ L_08831824: AOT_REGCACHE_SYNC_OUT(); return; L_08831834: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831894; } @@ -4560,7 +5725,6 @@ L_08831834: L_0883183C: aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08831894; } @@ -4568,7 +5732,6 @@ L_0883183C: } L_08831848: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08831868; } @@ -4592,7 +5755,6 @@ L_08831860: L_08831868: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_16 != aot_gpr_5; - // nop if (branch_taken) { goto L_08831884; } @@ -4629,7 +5791,17 @@ L_08831894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088318B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4671,7 +5843,6 @@ L_08831914: } L_08831924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831954; } @@ -4679,7 +5850,6 @@ L_08831924: } L_0883192C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831B14; } @@ -4688,7 +5858,6 @@ L_0883192C: L_08831934: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08831954; } @@ -4717,7 +5886,6 @@ L_0883195C: } L_08831964: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08831990; } @@ -4725,7 +5893,6 @@ L_08831964: } L_0883196C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08831990; } @@ -4733,7 +5900,6 @@ L_0883196C: } L_08831974: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08831990; } @@ -4757,7 +5923,6 @@ L_08831990: } L_08831998: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_088319D0; } @@ -4770,7 +5935,6 @@ L_088319A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088319D0; } @@ -4788,7 +5952,6 @@ L_088319CC: goto L_088319D0; L_088319D0: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_088319FC; } @@ -4797,7 +5960,6 @@ L_088319D0: L_088319D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08831B14; } @@ -4812,7 +5974,6 @@ L_088319E4: AOT_REGCACHE_SYNC_OUT(); return; L_088319F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831B14; } @@ -4821,7 +5982,6 @@ L_088319F4: L_088319FC: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08831AF4; } @@ -4839,7 +5999,6 @@ L_08831A08: L_08831A20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831A84; } @@ -4849,7 +6008,6 @@ L_08831A2C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831A84; } @@ -4858,7 +6016,6 @@ L_08831A2C: L_08831A3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08831A84; } @@ -4888,7 +6045,6 @@ L_08831A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08831A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831AEC; } @@ -4896,7 +6052,6 @@ L_08831A7C: } L_08831A84: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08831ADC; } @@ -4904,7 +6059,6 @@ L_08831A84: } L_08831A8C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08831AAC; } @@ -4919,7 +6073,6 @@ L_08831A94: AOT_REGCACHE_SYNC_OUT(); return; L_08831AA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831ADC; } @@ -4927,7 +6080,6 @@ L_08831AA4: } L_08831AAC: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08831ACC; } @@ -4942,7 +6094,6 @@ L_08831AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08831AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831ADC; } @@ -4964,7 +6115,6 @@ L_08831ADC: AOT_REGCACHE_SYNC_OUT(); return; L_08831AEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831B14; } @@ -4973,7 +6123,6 @@ L_08831AEC: L_08831AF4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08831B14; } @@ -5006,7 +6155,17 @@ L_08831B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5022,7 +6181,6 @@ L_08831B44: L_08831B68: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08831BDC; } @@ -5040,9 +6198,7 @@ L_08831B80: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_0; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08831BDC; } @@ -5094,7 +6250,17 @@ L_08831BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831BF8: aot_gpr_6 = (16256u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -5117,11 +6283,20 @@ L_08831C08: } L_08831C28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831C30: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -5176,13 +6351,22 @@ L_08831C84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831C98: aot_gpr_5 = (aot_gpr_5 << 2u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1264))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08831CB4; } @@ -5201,11 +6385,20 @@ L_08831CB4: goto L_08831CB8; L_08831CB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831CC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); ctx.gpr[7] = (aot_gpr_6 << 4u); @@ -5291,7 +6484,6 @@ L_08831D60: AOT_REGCACHE_SYNC_OUT(); return; L_08831D88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08831DA8; } @@ -5316,7 +6508,6 @@ L_08831DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08831DB4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08831E08; } @@ -5330,9 +6521,7 @@ L_08831DBC: AOT_REGCACHE_SYNC_OUT(); return; L_08831DC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_0)) && ctx.fpr[24] == aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08831E08; } @@ -5364,7 +6553,6 @@ L_08831E08: goto L_08831E10; L_08831E10: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[22])) && aot_fpr_20 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(41))); goto L_08831E9C; @@ -5395,7 +6583,6 @@ L_08831E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08831E4C: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08831E80; } @@ -5403,7 +6590,6 @@ L_08831E4C: } L_08831E54: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08831E98; } @@ -5423,7 +6609,6 @@ L_08831E5C: AOT_REGCACHE_SYNC_OUT(); return; L_08831E78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08831E98; } @@ -5476,7 +6661,6 @@ L_08831EDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831F00; } @@ -5485,7 +6669,6 @@ L_08831EDC: L_08831EEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831F00; } @@ -5515,7 +6698,17 @@ L_08831F00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08831F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5533,7 +6726,6 @@ L_08831F30: AOT_REGCACHE_SYNC_OUT(); return; L_08831F60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08831F8C; } @@ -5553,7 +6745,6 @@ L_08831F68: AOT_REGCACHE_SYNC_OUT(); return; L_08831F84: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08831F94; } @@ -5579,7 +6770,6 @@ L_08831F94: L_08831FA0: aot_gpr_5 = (static_cast(aot_gpr_16) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08831FF0; } @@ -5588,7 +6778,6 @@ L_08831FA0: L_08831FAC: aot_gpr_4 = (static_cast(aot_gpr_16) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08831FE4; } @@ -5613,7 +6802,6 @@ L_08831FC0: } L_08831FCC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08831FEC; } @@ -5621,7 +6809,6 @@ L_08831FCC: } L_08831FD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08831FF0; } @@ -5650,7 +6837,6 @@ L_08831FF0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832008; } @@ -5684,7 +6870,17 @@ L_08832010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832024: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5702,7 +6898,6 @@ L_08832024: AOT_REGCACHE_SYNC_OUT(); return; L_08832054: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08832080; } @@ -5722,7 +6917,6 @@ L_0883205C: AOT_REGCACHE_SYNC_OUT(); return; L_08832078: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08832088; } @@ -5751,7 +6945,17 @@ L_0883208C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088320A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 << 4u); @@ -5765,7 +6969,6 @@ L_088320A0: AOT_REGCACHE_SYNC_OUT(); return; L_088320C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088320D0; } @@ -5789,7 +6992,17 @@ L_088320D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088320E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5801,7 +7014,6 @@ L_088320F0: aot_gpr_4 = (ctx.gpr[2] & 255u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08832108; } @@ -5825,7 +7037,17 @@ L_0883210C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832118: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (0u | 254u); @@ -5856,7 +7078,6 @@ L_08832130: L_0883213C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(557)))))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0883216C; } @@ -5867,7 +7088,6 @@ L_08832148: goto L_0883214C; L_0883214C: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08832174; } @@ -5876,7 +7096,6 @@ L_0883214C: L_08832154: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(556)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08832174; } @@ -5885,7 +7104,6 @@ L_08832154: L_08832160: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(557)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832174; } @@ -5904,18 +7122,26 @@ L_08832174: goto L_08832178; L_08832178: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832180: aot_gpr_6 = (0u | 0u); goto L_08832184; L_08832184: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1756))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_08832194; } @@ -5936,11 +7162,20 @@ L_08832194: } L_088321A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088321AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5966,7 +7201,6 @@ L_088321CC: L_088321EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088321FC; } @@ -5987,7 +7221,17 @@ L_088321FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832210: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -6023,7 +7267,6 @@ L_08832260: L_0883226C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08832300; } @@ -6037,7 +7280,6 @@ L_08832278: L_08832280: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08832300; } @@ -6289,7 +7531,6 @@ L_08832458: L_08832478: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883255C; } @@ -6298,7 +7539,6 @@ L_08832478: L_08832484: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1276))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883255C; } @@ -6411,7 +7651,6 @@ L_08832564: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832588; } @@ -6420,7 +7659,6 @@ L_08832564: L_08832574: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832588; } @@ -6451,7 +7689,17 @@ L_0883258C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088325B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[19]); @@ -6474,7 +7722,6 @@ L_088325EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08832610; } @@ -6499,7 +7746,6 @@ L_08832608: } L_08832610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883278C; } @@ -6507,7 +7753,6 @@ L_08832610: } L_08832618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883278C; } @@ -6524,7 +7769,6 @@ L_08832620: } L_0883262C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883265C; } @@ -6548,7 +7792,6 @@ L_0883263C: } L_08832644: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08832664; } @@ -6556,7 +7799,6 @@ L_08832644: } L_0883264C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08832668; } @@ -6589,7 +7831,6 @@ L_08832668: AOT_REGCACHE_SYNC_OUT(); return; L_08832674: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0883278C; } @@ -6620,7 +7861,6 @@ L_088326B4: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088326E4; } @@ -6638,7 +7878,6 @@ L_088326C8: AOT_REGCACHE_SYNC_OUT(); return; L_088326E4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0883278C; } @@ -6743,7 +7982,17 @@ L_0883278C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088327B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_16); @@ -6814,7 +8063,6 @@ L_08832864: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08832924; } @@ -6830,7 +8078,6 @@ L_08832874: L_08832888: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1264))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08832914; } @@ -6892,7 +8139,6 @@ L_088328F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832914; } @@ -6901,7 +8147,6 @@ L_088328F0: L_08832900: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832914; } @@ -6909,7 +8154,6 @@ L_08832900: } L_0883290C: aot_gpr_31 = (0x08832914u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08832914u) goto L_08832914; AOT_REGCACHE_SYNC_OUT(); return; L_08832914: @@ -6966,7 +8210,17 @@ L_08832964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832988: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1653)))))); @@ -6980,7 +8234,17 @@ L_08832988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088329AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -6995,12 +8259,10 @@ L_088329AC: } L_088329C4: aot_gpr_31 = (0x088329CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088329CCu) goto L_088329CC; AOT_REGCACHE_SYNC_OUT(); return; L_088329CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088329E4; } @@ -7008,7 +8270,6 @@ L_088329CC: } L_088329D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08832ACC; } @@ -7016,7 +8277,6 @@ L_088329D4: } L_088329DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08832ACC; } @@ -7024,13 +8284,11 @@ L_088329DC: } L_088329E4: aot_gpr_31 = (0x088329ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088329ECu) goto L_088329EC; AOT_REGCACHE_SYNC_OUT(); return; L_088329EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08832ACC; } @@ -7038,7 +8296,6 @@ L_088329EC: } L_088329F8: aot_gpr_31 = (0x08832A00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08832A00u) goto L_08832A00; AOT_REGCACHE_SYNC_OUT(); return; L_08832A00: @@ -7078,7 +8335,6 @@ L_08832A38: goto L_08832A3C; L_08832A3C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832ACC; } @@ -7086,7 +8342,6 @@ L_08832A3C: } L_08832A44: aot_gpr_31 = (0x08832A4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08832A4Cu) goto L_08832A4C; AOT_REGCACHE_SYNC_OUT(); return; L_08832A4C: @@ -7145,9 +8400,7 @@ L_08832A4C: aot_gpr_4 = (17352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08832ACC; } @@ -7176,7 +8429,17 @@ L_08832ACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832ADC: ctx.gpr[7] = (aot_gpr_6 & 255u); ctx.gpr[8] = (aot_gpr_5 < static_cast(1000) ? 1u : 0u); @@ -7192,7 +8455,6 @@ L_08832AEC: goto L_08832AF0; L_08832AF0: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08832B04; } @@ -7218,7 +8480,17 @@ L_08832B10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832B18: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7241,7 +8513,6 @@ L_08832B18: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -7253,7 +8524,6 @@ L_08832B6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832C50; } @@ -7277,7 +8547,6 @@ L_08832B90: L_08832B98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832C3C; } @@ -7291,7 +8560,6 @@ L_08832BA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832C3C; } @@ -7301,7 +8569,6 @@ L_08832BC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(240))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08832C3C; } @@ -7312,7 +8579,6 @@ L_08832BD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08832C3C; } @@ -7320,7 +8586,6 @@ L_08832BD4: } L_08832BE8: aot_gpr_31 = (0x08832BF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08832BF0u) goto L_08832BF0; AOT_REGCACHE_SYNC_OUT(); return; L_08832BF0: @@ -7386,7 +8651,17 @@ L_08832C50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832C74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (0u | 20u); @@ -7440,7 +8715,6 @@ L_08832CFC: ctx.fpr[14] = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1716), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -7451,9 +8725,7 @@ L_08832CFC: L_08832D1C: aot_fpr_13 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08832D1C; } @@ -7474,14 +8746,34 @@ L_08832D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832D48: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1860), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832D50: aot_gpr_5 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); @@ -7490,7 +8782,17 @@ L_08832D50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832D60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (0u | 22u); @@ -7530,7 +8832,6 @@ L_08832DBC: L_08832DCC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7558,7 +8859,17 @@ L_08832DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832E04: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(108), aot_gpr_16); @@ -7581,7 +8892,6 @@ L_08832E28: } L_08832E34: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832F20; } @@ -7684,7 +8994,6 @@ L_08832EFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832F20; } @@ -7693,7 +9002,6 @@ L_08832EFC: L_08832F0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832F20; } @@ -7706,7 +9014,6 @@ L_08832F18: AOT_REGCACHE_SYNC_OUT(); return; L_08832F20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08832F28; } @@ -7725,7 +9032,17 @@ L_08832F28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7749,7 +9066,6 @@ L_08832F64: } L_08832F70: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08832F88; } @@ -7777,7 +9093,17 @@ L_08832F88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08832FA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1056))); @@ -7811,7 +9137,6 @@ L_08832FD8: } L_08832FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088330A8; } @@ -7899,7 +9224,6 @@ L_08833084: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088330A8; } @@ -7908,7 +9232,6 @@ L_08833084: L_08833094: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088330A8; } @@ -7931,7 +9254,17 @@ L_088330A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088330BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1012))); @@ -7965,7 +9298,6 @@ L_088330EC: } L_088330F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088331BC; } @@ -8053,7 +9385,6 @@ L_08833198: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088331BC; } @@ -8062,7 +9393,6 @@ L_08833198: L_088331A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088331BC; } @@ -8085,7 +9415,17 @@ L_088331BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088331D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8122,7 +9462,6 @@ L_0883320C: AOT_REGCACHE_SYNC_OUT(); return; L_08833224: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08833250; } @@ -8146,7 +9485,6 @@ L_08833250: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(628)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833344; } @@ -8166,7 +9504,6 @@ L_08833260: AOT_REGCACHE_SYNC_OUT(); return; L_0883327C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088332A8; } @@ -8190,7 +9527,6 @@ L_088332A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(628)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833344; } @@ -8245,7 +9581,6 @@ L_08833300: AOT_REGCACHE_SYNC_OUT(); return; L_08833318: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08833344; } @@ -8277,7 +9612,17 @@ L_08833344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833358: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_gpr_5 = (aot_gpr_4 + static_cast(32)); @@ -8317,7 +9662,6 @@ L_088333CC: } L_088333D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08833618; } @@ -8433,7 +9777,6 @@ L_088334AC: AOT_REGCACHE_SYNC_OUT(); return; L_088334C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08833600; } @@ -8442,9 +9785,7 @@ L_088334C4: L_088334CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08833600; } @@ -8455,9 +9796,7 @@ L_088334E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08833600; } @@ -8467,9 +9806,7 @@ L_088334FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883351C; } @@ -8487,7 +9824,6 @@ L_0883351C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); goto L_0883353C; @@ -8648,7 +9984,17 @@ L_08833618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883365C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8665,7 +10011,6 @@ L_0883365C: L_08833684: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088336C4; } @@ -8678,7 +10023,6 @@ L_08833690: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088336CC; } @@ -8693,7 +10037,6 @@ L_088336AC: AOT_REGCACHE_SYNC_OUT(); return; L_088336BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088336DC; } @@ -8701,7 +10044,6 @@ L_088336BC: } L_088336C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088336DC; } @@ -8727,7 +10069,17 @@ L_088336DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088336F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8758,7 +10110,17 @@ L_08833724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833730: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8779,21 +10141,50 @@ L_0883374C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883375C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833764: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883376C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8817,7 +10208,6 @@ L_08833794: aot_gpr_5 = (0u | 16u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08833840; } @@ -8825,12 +10215,10 @@ L_08833794: } L_088337B8: aot_gpr_31 = (0x088337C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088337C0u) goto L_088337C0; AOT_REGCACHE_SYNC_OUT(); return; L_088337C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088337D8; } @@ -8840,7 +10228,6 @@ L_088337C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833840; } @@ -8852,9 +10239,7 @@ L_088337D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08833824; } @@ -8866,7 +10251,6 @@ L_088337F8: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08833814; } @@ -8916,7 +10300,6 @@ L_08833858: AOT_REGCACHE_SYNC_OUT(); return; L_08833864: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088338F8; } @@ -8931,7 +10314,6 @@ L_0883386C: L_08833878: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_088338F8; } @@ -8960,7 +10342,6 @@ L_088338AC: AOT_REGCACHE_SYNC_OUT(); return; L_088338B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088338CC; } @@ -8970,7 +10351,6 @@ L_088338BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088338F8; } @@ -8998,7 +10378,6 @@ L_088338F8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833858; } @@ -9018,7 +10397,17 @@ L_0883390C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833928: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(172), aot_gpr_16); @@ -9042,7 +10431,6 @@ L_08833928: AOT_REGCACHE_SYNC_OUT(); return; L_08833988: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08833998; } @@ -9050,7 +10438,6 @@ L_08833988: } L_08833990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08833CC0; } @@ -9058,7 +10445,6 @@ L_08833990: } L_08833998: aot_gpr_31 = (0x088339A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088339A0u) goto L_088339A0; AOT_REGCACHE_SYNC_OUT(); return; L_088339A0: @@ -9103,7 +10489,6 @@ L_088339D8: goto L_088339F4; L_088339F4: aot_gpr_31 = (0x088339FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088339FCu) goto L_088339FC; AOT_REGCACHE_SYNC_OUT(); return; L_088339FC: @@ -9136,7 +10521,6 @@ L_08833A4C: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088339F4; } @@ -9148,7 +10532,6 @@ L_08833A5C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(2)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833A78; } @@ -9195,7 +10578,6 @@ L_08833AB4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08833AC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08833AC4u) goto L_08833AC4; AOT_REGCACHE_SYNC_OUT(); return; L_08833AC4: @@ -9233,7 +10615,6 @@ L_08833B2C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833AB4; } @@ -9251,7 +10632,6 @@ L_08833B40: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833B68; } @@ -9381,7 +10761,6 @@ L_08833CA8: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08833BC0; } @@ -9411,21 +10790,51 @@ L_08833CC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833D04: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2228)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833D0C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -9577,7 +10986,6 @@ L_08833E8C: } L_08833E94: aot_gpr_31 = (0x08833E9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08833E9Cu) goto L_08833E9C; AOT_REGCACHE_SYNC_OUT(); return; L_08833E9C: @@ -9667,21 +11075,51 @@ L_08833F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833F4C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833F54: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833F5C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); ctx.gpr[2] = (aot_gpr_4 & 16u); @@ -9690,21 +11128,51 @@ L_08833F5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833F6C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833F74: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9721,7 +11189,6 @@ L_08833FA4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08833FC4; } @@ -9731,7 +11198,6 @@ L_08833FB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08833FF0; } @@ -9754,11 +11220,20 @@ L_08833FD8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18256))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08833FF0: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); diff --git a/profiles/vcs/generated/generated_unit_0012.cpp b/profiles/vcs/generated/generated_unit_0012.cpp index 53c2ba7..25a8e94 100644 --- a/profiles/vcs/generated/generated_unit_0012.cpp +++ b/profiles/vcs/generated/generated_unit_0012.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0012[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 6, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 19, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 36, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, - 0, 0, 42, 0, 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, - 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 66, 0, - 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 70, 0, 71, 0, 72, 0, 0, 73, 0, 0, 0, 74, 0, 75, 0, 76, 0, 0, 0, 0, - 0, 0, 77, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 80, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, - 0, 0, 0, 0, 0, 86, 0, 87, 0, 88, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 94, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 109, 0, 110, 0, 0, 111, - 0, 0, 112, 0, 113, 0, 114, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, - 0, 0, 119, 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 125, 0, - 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, - 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 146, 0, 147, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 153, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, - 0, 0, 160, 0, 161, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 0, - 0, 166, 0, 0, 0, 167, 0, 168, 169, 0, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 172, 0, 173, 174, 0, 0, 0, 0, 0, 175, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 178, 0, 0, 179, 0, 180, 181, 0, 0, 182, 0, 0, 183, - 0, 184, 0, 185, 0, 0, 0, 186, 0, 187, 0, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 192, - 0, 0, 193, 194, 0, 195, 0, 0, 196, 197, 0, 198, 0, 0, 199, 200, 0, 201, 0, 0, 202, 203, 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, - 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, - 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 224, 0, 0, 0, 225, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 227, 228, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, - 0, 232, 0, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 237, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, - 0, 246, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, - 0, 250, 251, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 261, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, - 0, 0, 0, 0, 0, 0, 266, 267, 0, 268, 0, 269, 0, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 274, - 275, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 285, 0, 0, 0, 0, 0, - 0, 0, 0, 286, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 290, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, 0, 296, 0, 0, 0, 297, 0, 298, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 305, 0, - 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, - 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 316, - 0, 0, 0, 0, 317, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 322, - 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, - 0, 0, 329, 0, 0, 0, 0, 330, 331, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, - 0, 0, 0, 0, 342, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, - 0, 348, 0, 349, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, - 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 369, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 375, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, - 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 0, 383, 0, 0, 0, 0, 384, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, - 0, 390, 0, 391, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, - 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, - 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, - 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 418, - 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, - 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 0, 0, - 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, - 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 439, 0, 0, - 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 450, - 0, 0, 451, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 457, 0, 458, 0, 459, - 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 461, 462, 463, 0, 464, 0, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 468, - 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 471, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, - 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 487, 0, 0, 0, 0, - 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 496, 0, 497, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 501, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 503, 504, 505, 0, 506, 0, 0, 0, 507, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, - 509, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 514, 0, - 515, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, - 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 527, 0, 528, 0, 529, - 0, 0, 530, 0, 531, 0, 532, 0, 0, 533, 0, 534, 0, 0, 535, 0, 536, 0, 0, 0, 0, 537, 0, 0, 538, 0, 539, 0, 0, 540, 0, 541, - 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 548, 0, 0, 549, 0, 550, - 551, 0, 0, 552, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, - 0, 0, 0, 0, 558, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 0, 0, - 0, 0, 0, 570, 0, 0, 0, 571, 0, 572, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, 575, 0, 576, 0, 577, 0, 0, 578, - 0, 579, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 0, 588, 0, 589, 0, 0, 590, 0, - 591, 0, 592, 0, 593, 0, 0, 594, 0, 595, 0, 0, 596, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, 601, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0012[64] = { + 0xA200040102000001ull, 0x5100020081000000ull, 0x1440008102000000ull, 0x0001000000500841ull, + 0x0002000020288001ull, 0x2108404068004002ull, 0x2400000410055544ull, 0x0002800000500012ull, + 0x4880010000001500ull, 0x5012A0540A895411ull, 0x4100000208020AA0ull, 0x0500111022000800ull, + 0x0910205495204920ull, 0x4000204440910244ull, 0x0408000800044000ull, 0x8810100810040808ull, + 0x0080420001012888ull, 0x1000080000000012ull, 0x02800154800000A0ull, 0x9348A00041A241A2ull, + 0x48B2CB2CA080928Aull, 0x8004400001000020ull, 0x0000011000089102ull, 0x400050C811409088ull, + 0x0002200012004212ull, 0x1021100008000008ull, 0x0902A09608002202ull, 0x90122AC082022450ull, + 0x0008000004000111ull, 0x0200008804A04110ull, 0xA254084400020000ull, 0x4884004002004000ull, + 0x2000000410088040ull, 0x8800040001040000ull, 0x0000002080440250ull, 0x4000200008200001ull, + 0x4081414005084184ull, 0x0200008A04140830ull, 0x0010A81088000400ull, 0x4000080000052000ull, + 0x02808C2000240800ull, 0x8424040804805010ull, 0x9000011000000200ull, 0x080002041002082Aull, + 0x0040000204040400ull, 0x00002000402A4080ull, 0x8808101010080004ull, 0x0442010112020810ull, + 0x2280814042080011ull, 0x8209104008208208ull, 0x8A8B8080AA104094ull, 0x0021000000006810ull, + 0x0000100400040000ull, 0x0A80108104108008ull, 0x0042440000404401ull, 0x08B808001400042Aull, + 0x0000001104000000ull, 0x0000005144040010ull, 0x8800001000080800ull, 0xA900000040001080ull, + 0xA5208450A5214A54ull, 0x1040085020824089ull, 0x9512028815511000ull, 0x148152954A555112ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0012[64] = { + 1u, 8u, 14u, 20u, 26u, 32u, 42u, 54u, 60u, 67u, 86u, 95u, 103u, 119u, 130u, 135u, + 144u, 153u, 157u, 166u, 184u, 207u, 212u, 219u, 232u, 240u, 246u, 259u, 275u, 280u, 289u, 299u, + 306u, 312u, 317u, 324u, 329u, 342u, 352u, 360u, 365u, 374u, 385u, 390u, 399u, 404u, 411u, 419u, + 429u, 440u, 451u, 469u, 475u, 478u, 488u, 496u, 508u, 511u, 518u, 523u, 530u, 551u, 563u, 579u, }; void recomp_unit_0012_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0012_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08834000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0012[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0012[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0012[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08834000; @@ -797,7 +704,6 @@ L_08834000: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088340F4; } @@ -848,7 +754,6 @@ L_088340E4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08834064; } @@ -887,7 +792,6 @@ L_088340FC: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088341F0; } @@ -938,7 +842,6 @@ L_088341E0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08834160; } @@ -979,7 +882,6 @@ L_088341F8: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088342E8; } @@ -1027,7 +929,6 @@ L_088342D8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08834264; } @@ -1045,7 +946,6 @@ L_088342F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883444C; } @@ -1055,9 +955,7 @@ L_08834300: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08834358; } @@ -1078,9 +976,7 @@ L_0883432C: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08834358; } @@ -1120,7 +1016,6 @@ L_08834358: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883444C; } @@ -1175,7 +1070,6 @@ L_0883443C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088343C0; } @@ -1195,9 +1089,7 @@ L_08834454: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08834574; } @@ -1223,7 +1115,6 @@ L_08834474: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883456C; } @@ -1316,7 +1207,17 @@ L_08834578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08834598: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -1334,7 +1235,6 @@ L_088345B8: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08834630; } @@ -1345,7 +1245,6 @@ L_088345CC: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08834630; } @@ -1356,7 +1255,6 @@ L_088345E0: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08834628; } @@ -1367,7 +1265,6 @@ L_088345F4: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08834628; } @@ -1385,7 +1282,6 @@ L_08834608: } L_08834618: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08834640; } @@ -1393,7 +1289,6 @@ L_08834618: } L_08834620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834A6C; } @@ -1401,7 +1296,6 @@ L_08834620: } L_08834628: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834A6C; } @@ -1409,7 +1303,6 @@ L_08834628: } L_08834630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834A6C; } @@ -1417,7 +1310,6 @@ L_08834630: } L_08834638: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834A6C; } @@ -1425,7 +1317,6 @@ L_08834638: } L_08834640: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08834620; } @@ -1438,9 +1329,7 @@ L_08834648: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08834A6C; } @@ -1485,7 +1374,6 @@ L_08834688: L_088346E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08834710; } @@ -1495,7 +1383,6 @@ L_088346F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(48)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08834A44; } @@ -1504,7 +1391,6 @@ L_088346F4: L_08834704: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08834A44; } @@ -1555,7 +1441,6 @@ L_08834710: AOT_REGCACHE_SYNC_OUT(); return; L_08834750: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08834A2C; } @@ -1593,7 +1478,6 @@ L_08834758: AOT_REGCACHE_SYNC_OUT(); return; L_088347BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08834900; } @@ -1636,9 +1520,7 @@ L_088347C4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08834828; } @@ -1724,7 +1606,6 @@ L_088348DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08834900; } @@ -1733,7 +1614,6 @@ L_088348DC: L_088348EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08834900; } @@ -1748,7 +1628,6 @@ L_08834900: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(533)))))); aot_gpr_5 = (aot_gpr_4 < static_cast(23) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834A24; } @@ -1760,14 +1639,22 @@ L_08834910: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08834928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834A6C; } @@ -1780,7 +1667,6 @@ L_08834930: AOT_REGCACHE_SYNC_OUT(); return; L_08834938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1801,7 +1687,6 @@ L_0883494C: AOT_REGCACHE_SYNC_OUT(); return; L_0883495C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1809,7 +1694,6 @@ L_0883495C: } L_08834964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1838,7 +1722,6 @@ L_0883496C: AOT_REGCACHE_SYNC_OUT(); return; L_08834988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1846,7 +1729,6 @@ L_08834988: } L_08834990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1875,7 +1757,6 @@ L_08834998: AOT_REGCACHE_SYNC_OUT(); return; L_088349B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1883,7 +1764,6 @@ L_088349B4: } L_088349BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1892,7 +1772,6 @@ L_088349BC: L_088349C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088349F8; } @@ -1922,7 +1801,6 @@ L_088349D0: AOT_REGCACHE_SYNC_OUT(); return; L_088349F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834A14; } @@ -1951,7 +1829,6 @@ L_088349F8: AOT_REGCACHE_SYNC_OUT(); return; L_08834A14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1959,7 +1836,6 @@ L_08834A14: } L_08834A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1967,7 +1843,6 @@ L_08834A1C: } L_08834A24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08834928; } @@ -1991,9 +1866,7 @@ L_08834A44: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08834670; } @@ -2012,7 +1885,17 @@ L_08834A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08834A84: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2084,7 +1967,6 @@ L_08834B74: aot_mem.aot_direct_store16(aot_gpr_18 + static_cast(1660), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-29776))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08834BA0; } @@ -2137,7 +2019,6 @@ L_08834BE8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08834C98; } @@ -2281,7 +2162,6 @@ L_08834D24: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834D50; } @@ -2309,7 +2189,6 @@ L_08834D5C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834D88; } @@ -2338,7 +2217,6 @@ L_08834D98: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_18 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834DF8; } @@ -2389,7 +2267,6 @@ L_08834E38: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_18 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834E8C; } @@ -2443,7 +2320,6 @@ L_08834ECC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834F0C; } @@ -2481,7 +2357,6 @@ L_08834F2C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834F70; } @@ -2510,7 +2385,6 @@ L_08834F70: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08834FB0; } @@ -2548,7 +2422,6 @@ L_08834FD0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883502C; } @@ -2634,7 +2507,6 @@ L_08835060: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088350B8; } @@ -2654,9 +2526,7 @@ L_088350B8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835104; } @@ -2764,7 +2634,6 @@ L_088351F0: aot_mem.aot_direct_store32_block(aot_gpr_18 + static_cast(1704), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883521C; } @@ -2798,7 +2667,6 @@ L_0883521C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(680))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088352A0; } @@ -2823,7 +2691,6 @@ L_08835288: } L_08835290: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_088352A0; } @@ -2847,7 +2714,6 @@ L_088352A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_18 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883540C; } @@ -2995,7 +2861,6 @@ L_088353E0: L_088353E4: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835404; } @@ -3004,7 +2869,6 @@ L_088353E4: L_088353F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835404; } @@ -3017,7 +2881,6 @@ L_088353FC: AOT_REGCACHE_SYNC_OUT(); return; L_08835404: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08835514; } @@ -3027,7 +2890,6 @@ L_0883540C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_18 + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883543C; } @@ -3047,7 +2909,6 @@ L_08835424: L_08835430: aot_mem.aot_direct_store8(ctx.gpr[2] + static_cast(2), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08835514; } @@ -3061,7 +2922,6 @@ L_0883543C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835474; } @@ -3073,7 +2933,6 @@ L_0883545C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088354DC; } @@ -3087,7 +2946,6 @@ L_08835474: L_0883547C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883548C; } @@ -3104,7 +2962,6 @@ L_0883548C: L_08835494: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088354A4; } @@ -3121,7 +2978,6 @@ L_088354A4: L_088354AC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088354BC; } @@ -3138,7 +2994,6 @@ L_088354BC: L_088354C4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088354D4; } @@ -3149,7 +3004,6 @@ L_088354D0: goto L_088354D4; L_088354D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08835514; } @@ -3159,7 +3013,6 @@ L_088354DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_18 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08835514; } @@ -3168,7 +3021,6 @@ L_088354DC: L_088354EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835514; } @@ -3209,7 +3061,17 @@ L_08835514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08835560: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3263,7 +3125,6 @@ L_08835604: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088357B8; } @@ -3273,7 +3134,6 @@ L_08835620: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088357B0; } @@ -3282,7 +3142,6 @@ L_08835620: L_08835630: aot_gpr_4 = (ctx.gpr[19] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835690; } @@ -3292,7 +3151,6 @@ L_0883563C: aot_gpr_5 = (0u | 0u); aot_gpr_6 = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08835690; } @@ -3315,7 +3173,6 @@ L_0883564C: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_6 = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0883564C; } @@ -3325,7 +3182,6 @@ L_08835690: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08835730; } @@ -3356,9 +3212,7 @@ L_088356A0: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(1520), std::bit_cast(aot_fpr_12)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883571C; } @@ -3375,7 +3229,6 @@ L_0883571C: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088356A0; } @@ -3384,7 +3237,6 @@ L_0883571C: L_08835730: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835760; } @@ -3402,7 +3254,6 @@ L_0883573C: AOT_REGCACHE_SYNC_OUT(); return; L_08835758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883578C; } @@ -3412,7 +3263,6 @@ L_08835760: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); aot_gpr_4 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883578C; } @@ -3431,7 +3281,6 @@ L_08835770: L_0883578C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(96))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0883579C; } @@ -3449,7 +3298,6 @@ L_0883579C: goto L_088357B0; L_088357B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088365E4; } @@ -3471,7 +3319,6 @@ L_088357B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835A90; } @@ -3480,7 +3327,6 @@ L_088357B8: L_088357F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835824; } @@ -3489,7 +3335,6 @@ L_088357F8: L_08835804: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08835824; } @@ -3519,9 +3364,7 @@ L_08835838: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835870; } @@ -3560,7 +3403,6 @@ L_088358B4: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088359D4; } @@ -3631,9 +3473,7 @@ L_0883590C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088359C0; } @@ -3654,9 +3494,7 @@ L_0883596C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1520), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088359C0; } @@ -3673,7 +3511,6 @@ L_088359C0: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088358C4; } @@ -3703,9 +3540,7 @@ L_08835A04: aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835A34; } @@ -3745,7 +3580,6 @@ L_08835A34: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08835A6C; @@ -3755,9 +3589,7 @@ L_08835A6C: aot_fpr_13 = std::sqrt(aot_fpr_13); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835A88; } @@ -3768,7 +3600,6 @@ L_08835A84: goto L_08835A88; L_08835A88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088365E4; } @@ -3777,7 +3608,6 @@ L_08835A88: L_08835A90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(208))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835ABC; } @@ -3795,7 +3625,6 @@ L_08835A9C: goto L_08835AB4; L_08835AB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08835B28; } @@ -3803,7 +3632,6 @@ L_08835AB4: } L_08835ABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088365E4; } @@ -3814,9 +3642,7 @@ L_08835AC4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835B28; } @@ -3825,7 +3651,6 @@ L_08835AC4: L_08835AE0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835B18; } @@ -3882,7 +3707,6 @@ L_08835B44: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(ctx.fpr[22])); goto L_08835B9C; @@ -3923,7 +3747,6 @@ L_08835BA4: AOT_REGCACHE_SYNC_OUT(); return; L_08835BAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08835ED0; } @@ -3933,7 +3756,6 @@ L_08835BB4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); aot_gpr_4 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835BD0; } @@ -3954,9 +3776,7 @@ L_08835BD0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835BFC; } @@ -3978,7 +3798,6 @@ L_08835C00: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); aot_gpr_4 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835D5C; } @@ -3988,7 +3807,6 @@ L_08835C10: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835D38; } @@ -4060,9 +3878,7 @@ L_08835C68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835D20; } @@ -4083,9 +3899,7 @@ L_08835CCC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1520), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835D20; } @@ -4103,7 +3917,6 @@ L_08835D20: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835C20; } @@ -4121,7 +3934,6 @@ L_08835D38: AOT_REGCACHE_SYNC_OUT(); return; L_08835D54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08836584; } @@ -4130,7 +3942,6 @@ L_08835D54: L_08835D5C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835D8C; } @@ -4151,7 +3962,6 @@ L_08835D8C: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835EAC; } @@ -4222,9 +4032,7 @@ L_08835DE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835E98; } @@ -4245,9 +4053,7 @@ L_08835E44: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1520), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08835E98; } @@ -4264,7 +4070,6 @@ L_08835E98: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08835D9C; } @@ -4282,7 +4087,6 @@ L_08835EAC: AOT_REGCACHE_SYNC_OUT(); return; L_08835EC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08836584; } @@ -4324,7 +4128,6 @@ L_08835EFC: { const float fs = aot_fpr_20; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08835F38; @@ -4339,7 +4142,6 @@ L_08835F38: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = ctx.fpr[15] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08835F64; @@ -4356,7 +4158,6 @@ L_08835F64: { const float fs = aot_fpr_20; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08835F98; @@ -4372,7 +4173,6 @@ L_08835F98: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08835FC8; @@ -4383,7 +4183,6 @@ L_08835FC8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); aot_gpr_4 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08836218; } @@ -4393,7 +4192,6 @@ L_08835FDC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); aot_gpr_4 = (static_cast(aot_gpr_4) < 104 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08835FF8; } @@ -4410,9 +4208,7 @@ L_08835FF8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883603C; } @@ -4444,7 +4240,6 @@ L_0883604C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), std::bit_cast(ctx.fpr[24])); goto L_08836088; @@ -4518,7 +4313,6 @@ L_088360F4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[22]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); if (branch_taken) { @@ -4561,9 +4355,7 @@ L_08836160: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088361FC; } @@ -4584,9 +4376,7 @@ L_088361A8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1520), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088361FC; } @@ -4603,7 +4393,6 @@ L_088361FC: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883604C; } @@ -4620,7 +4409,6 @@ L_08836210: L_08836218: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1662))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08836248; } @@ -4652,7 +4440,6 @@ L_08836258: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), std::bit_cast(ctx.fpr[24])); goto L_08836294; @@ -4726,7 +4513,6 @@ L_08836300: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[22]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); if (branch_taken) { @@ -4769,9 +4555,7 @@ L_0883636C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836408; } @@ -4792,9 +4576,7 @@ L_088363B4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1520), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836408; } @@ -4811,7 +4593,6 @@ L_08836408: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08836258; } @@ -4824,9 +4605,7 @@ L_08836420: aot_fpr_13 = aot_fpr_12 - ctx.fpr[24]; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836584; } @@ -4837,7 +4616,6 @@ L_08836438: aot_fpr_12 = ctx.fpr[22] / aot_fpr_12; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_gpr_31 = (0x0883644Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883644Cu) goto L_0883644C; AOT_REGCACHE_SYNC_OUT(); return; L_0883644C: @@ -4850,7 +4628,6 @@ L_0883644C: AOT_REGCACHE_SYNC_OUT(); return; L_08836460: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_08836584; } @@ -4866,9 +4643,7 @@ L_08836468: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088364A0; } @@ -4886,9 +4661,7 @@ L_088364A0: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088364C0; } @@ -4913,7 +4686,6 @@ L_088364DC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16153u << 16u); if (branch_taken) { @@ -4925,9 +4697,7 @@ L_088364F8: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836514; } @@ -4940,9 +4710,7 @@ L_08836514: aot_gpr_4 = (16000u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836550; } @@ -4960,7 +4728,6 @@ L_0883652C: AOT_REGCACHE_SYNC_OUT(); return; L_08836548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08836584; } @@ -4970,9 +4737,7 @@ L_08836550: aot_gpr_4 = (16192u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836584; } @@ -4990,7 +4755,6 @@ L_08836568: AOT_REGCACHE_SYNC_OUT(); return; L_08836584: { const bool branch_taken = aot_gpr_18 == 0u; - // nop if (branch_taken) { goto L_088365E4; } @@ -5000,7 +4764,6 @@ L_0883658C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088365E4; } @@ -5024,7 +4787,6 @@ L_0883659C: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0883659C; } @@ -5054,7 +4816,17 @@ L_088365E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08836628: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5083,7 +4855,6 @@ L_0883667C: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(60))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088366B4; } @@ -5206,7 +4977,6 @@ L_08836748: ctx.gpr[21] = (static_cast(static_cast(ctx.gpr[21]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088366BC; } @@ -5246,7 +5016,6 @@ L_088367F8: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088367F8; } @@ -5257,9 +5026,7 @@ L_0883682C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836854; } @@ -5300,7 +5067,6 @@ L_08836854: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08836894; @@ -5309,9 +5075,7 @@ L_08836854: L_08836894: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088368AC; } @@ -5324,7 +5088,6 @@ L_088368AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08836910; } @@ -5359,7 +5122,6 @@ L_088368E4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_18 + static_cast(52))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088368E4; } @@ -5373,7 +5135,6 @@ L_08836910: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088369FC; } @@ -5381,7 +5142,6 @@ L_08836910: } L_08836930: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088369FC; } @@ -5414,9 +5174,7 @@ L_08836968: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); aot_fpr_14 = aot_fpr_14 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088369E8; } @@ -5427,9 +5185,7 @@ L_0883698C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_4); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088369D4; } @@ -5441,7 +5197,6 @@ L_088369A8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088369C8; @@ -5487,7 +5242,17 @@ L_088369FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08836A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5543,7 +5308,6 @@ L_08836AA0: L_08836AF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08836B14; } @@ -5556,7 +5320,6 @@ L_08836AFC: AOT_REGCACHE_SYNC_OUT(); return; L_08836B04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08836B14; } @@ -5573,7 +5336,6 @@ L_08836B14: aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(236), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08836B70; } @@ -5583,7 +5345,6 @@ L_08836B2C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08836B44; @@ -5610,7 +5371,6 @@ L_08836B70: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08836B88; @@ -5683,7 +5443,6 @@ L_08836BEC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08836E70; } @@ -5695,9 +5454,7 @@ L_08836C28: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836E70; } @@ -5711,7 +5468,6 @@ L_08836C48: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08836D54; } @@ -5722,7 +5478,6 @@ L_08836C68: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08836C84; @@ -5830,9 +5585,7 @@ L_08836D1C: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836D44; } @@ -5849,7 +5602,6 @@ L_08836D38: } L_08836D44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08837B30; } @@ -5857,7 +5609,6 @@ L_08836D44: } L_08836D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08836E70; } @@ -5870,9 +5621,7 @@ L_08836D54: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836E70; } @@ -5891,7 +5640,6 @@ L_08836D78: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08836DB4; @@ -6068,7 +5816,6 @@ L_08836ECC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08836F64; } @@ -6087,7 +5834,6 @@ L_08836EEC: L_08836EFC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[21] + static_cast(32)); if (branch_taken) { @@ -6100,7 +5846,6 @@ L_08836F10: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16153u << 16u); if (branch_taken) { @@ -6112,9 +5857,7 @@ L_08836F2C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836F64; } @@ -6137,7 +5880,6 @@ L_08836F44: L_08836F64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08836FC4; } @@ -6159,9 +5901,7 @@ L_08836F80: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08836FC4; } @@ -6205,7 +5945,6 @@ L_08836FE8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08837010; } @@ -6215,7 +5954,6 @@ L_08837000: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u | 170u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088370A0; } @@ -6234,9 +5972,7 @@ L_08837010: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088372FC; } @@ -6248,7 +5984,6 @@ L_0883704C: aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(617), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088372FC; } @@ -6259,7 +5994,6 @@ L_08837064: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088372FC; } @@ -6278,7 +6012,6 @@ L_08837078: AOT_REGCACHE_SYNC_OUT(); return; L_08837098: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088372FC; } @@ -6291,7 +6024,6 @@ L_088370A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883727C; } @@ -6305,7 +6037,6 @@ L_088370BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883727C; } @@ -6313,7 +6044,6 @@ L_088370BC: } L_088370DC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0883716C; } @@ -6321,7 +6051,6 @@ L_088370DC: } L_088370E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16153u << 16u); if (branch_taken) { @@ -6333,9 +6062,7 @@ L_088370F4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883727C; } @@ -6345,9 +6072,7 @@ L_0883710C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883716C; } @@ -6357,9 +6082,7 @@ L_08837124: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1524))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883716C; } @@ -6369,9 +6092,7 @@ L_0883713C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1528))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883716C; } @@ -6381,9 +6102,7 @@ L_08837154: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1532))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883727C; } @@ -6398,9 +6117,7 @@ L_0883716C: aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(617), static_cast(aot_gpr_4)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088371B0; } @@ -6430,7 +6147,6 @@ L_088371B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883726C; } @@ -6439,7 +6155,6 @@ L_088371B0: L_088371C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088371E4; } @@ -6460,7 +6175,6 @@ L_088371E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837264; } @@ -6474,7 +6188,6 @@ L_088371FC: AOT_REGCACHE_SYNC_OUT(); return; L_08837208: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08837250; } @@ -6510,7 +6223,6 @@ L_08837250: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088371FC; } @@ -6518,7 +6230,6 @@ L_08837250: } L_08837264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088372FC; } @@ -6531,7 +6242,6 @@ L_0883726C: AOT_REGCACHE_SYNC_OUT(); return; L_08837274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088372FC; } @@ -6573,7 +6283,6 @@ L_088372C0: goto L_088372C4; L_088372C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088372EC; } @@ -6583,7 +6292,6 @@ L_088372CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088372EC; } @@ -6596,7 +6304,6 @@ L_088372DC: AOT_REGCACHE_SYNC_OUT(); return; L_088372E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088372FC; } @@ -6611,7 +6318,6 @@ L_088372EC: L_088372FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(976))); if (branch_taken) { @@ -6624,7 +6330,6 @@ L_08837310: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (ctx.gpr[17] | 0u); if (branch_taken) { @@ -6634,7 +6339,6 @@ L_08837310: } L_0883732C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08837580; } @@ -6677,7 +6381,6 @@ L_08837338: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[20] = (std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088373C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088373C0u) goto L_088373C0; AOT_REGCACHE_SYNC_OUT(); return; L_088373C0: @@ -6873,9 +6576,7 @@ L_0883750C: L_0883753C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08837568; } @@ -6917,7 +6618,6 @@ L_08837580: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(83), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29700))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088376B8; } @@ -6928,7 +6628,6 @@ L_0883759C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29700))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088376B8; } @@ -6964,7 +6663,6 @@ L_088375B0: AOT_REGCACHE_SYNC_OUT(); return; L_088375DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088375EC; } @@ -6977,9 +6675,7 @@ L_088375E4: L_088375EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088376B8; } @@ -7023,7 +6719,6 @@ L_08837638: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(368), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08837658u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837658u) goto L_08837658; AOT_REGCACHE_SYNC_OUT(); return; L_08837658: @@ -7052,7 +6747,6 @@ L_088376A8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08837628; } @@ -7061,7 +6755,6 @@ L_088376A8: L_088376B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837768; } @@ -7072,7 +6765,6 @@ L_088376C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29704))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08837768; } @@ -7108,7 +6800,6 @@ L_088376D8: AOT_REGCACHE_SYNC_OUT(); return; L_08837704: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08837714; } @@ -7121,9 +6812,7 @@ L_0883770C: L_08837714: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(392))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08837768; } @@ -7149,7 +6838,6 @@ L_08837728: AOT_REGCACHE_SYNC_OUT(); return; L_08837768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08837B30; } @@ -7198,7 +6886,6 @@ L_088377D0: goto L_088377D4; L_088377D4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088377EC; } @@ -7247,7 +6934,6 @@ L_08837868: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(976))); if (branch_taken) { @@ -7259,7 +6945,6 @@ L_08837880: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(30))); aot_gpr_6 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08837B1C; } @@ -7391,9 +7076,7 @@ L_08837910: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08837B1C; } @@ -7405,7 +7088,6 @@ L_08837948: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16192u << 16u); if (branch_taken) { @@ -7429,7 +7111,6 @@ L_08837978: goto L_08837980; L_08837980: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(988), ctx.gpr[20]); goto L_08837998; @@ -7569,7 +7250,6 @@ L_08837998: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08837A2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837A2Cu) goto L_08837A2C; AOT_REGCACHE_SYNC_OUT(); return; L_08837A2C: @@ -7716,7 +7396,17 @@ L_08837B30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08837B78: aot_gpr_29 = (aot_gpr_29 + static_cast(-1920)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7738,7 +7428,6 @@ L_08837B78: L_08837BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837C2C; } @@ -7746,12 +7435,10 @@ L_08837BE0: } L_08837BEC: aot_gpr_31 = (0x08837BF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837BF4u) goto L_08837BF4; AOT_REGCACHE_SYNC_OUT(); return; L_08837BF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08837C2C; } @@ -7760,7 +7447,6 @@ L_08837BF4: L_08837BFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837C2C; } @@ -7768,7 +7454,6 @@ L_08837BFC: } L_08837C08: aot_gpr_31 = (0x08837C10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837C10u) goto L_08837C10; AOT_REGCACHE_SYNC_OUT(); return; L_08837C10: @@ -7779,7 +7464,6 @@ L_08837C10: L_08837C18: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837C2C; } @@ -7793,7 +7477,6 @@ L_08837C24: L_08837C2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837C40; } @@ -7801,7 +7484,6 @@ L_08837C2C: } L_08837C38: aot_gpr_31 = (0x08837C40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 672u, 0x08912A70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837C40u) goto L_08837C40; AOT_REGCACHE_SYNC_OUT(); return; L_08837C40: @@ -7809,7 +7491,6 @@ L_08837C40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837C90; } @@ -7823,7 +7504,6 @@ L_08837C54: AOT_REGCACHE_SYNC_OUT(); return; L_08837C60: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08837C7C; } @@ -7845,7 +7525,6 @@ L_08837C7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08837C54; } @@ -7860,7 +7539,6 @@ L_08837C98: ctx.gpr[19] = (ctx.gpr[2] | 0u); ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(864))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08837CD4; } @@ -7886,7 +7564,6 @@ L_08837CBC: L_08837CD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(368))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837CE8; } @@ -7894,7 +7571,6 @@ L_08837CD4: } L_08837CE0: aot_gpr_31 = (0x08837CE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 595u, 0x08A0BA78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837CE8u) goto L_08837CE8; AOT_REGCACHE_SYNC_OUT(); return; L_08837CE8: @@ -7906,7 +7582,6 @@ L_08837CE8: goto L_08837CF4; L_08837CF4: aot_gpr_31 = (0x08837CFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 595u, 0x08A0BA78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837CFCu) goto L_08837CFC; AOT_REGCACHE_SYNC_OUT(); return; L_08837CFC: @@ -7915,7 +7590,6 @@ L_08837CFC: L_08837D00: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837D5C; } @@ -7925,7 +7599,6 @@ L_08837D0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(613)))))); aot_gpr_5 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08837D38; } @@ -7943,7 +7616,6 @@ L_08837D1C: L_08837D38: aot_gpr_5 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08837D5C; } @@ -7976,7 +7648,6 @@ L_08837D74: ctx.gpr[8] = (ctx.gpr[8] << 24u); ctx.gpr[8] = (static_cast(static_cast(ctx.gpr[8]) >> 24u)); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08837D98; } @@ -7991,7 +7662,6 @@ L_08837D98: ctx.fpr[30] = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.gpr[7] = (ctx.gpr[7] & 128u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08837DD8; } @@ -8048,7 +7718,6 @@ L_08837E30: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08837E70; } @@ -8082,7 +7751,6 @@ L_08837E58: } L_08837E60: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08837E70; } @@ -8099,7 +7767,6 @@ L_08837E70: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08837F20; } @@ -8117,7 +7784,6 @@ L_08837E8C: } L_08837E9C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08837EE8; } @@ -8129,9 +7795,7 @@ L_08837EA4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08837EE8; } @@ -8152,7 +7816,6 @@ L_08837ED0: AOT_REGCACHE_SYNC_OUT(); return; L_08837EE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08837F20; } @@ -8166,7 +7829,6 @@ L_08837EE8: L_08837EF0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08837F20; } @@ -8194,7 +7856,6 @@ L_08837F20: ctx.gpr[16] = (0u | 0u); aot_gpr_18 = (0u | 0u); aot_gpr_31 = (0x08837F30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837F30u) goto L_08837F30; AOT_REGCACHE_SYNC_OUT(); return; L_08837F30: @@ -8207,12 +7868,10 @@ L_08837F30: } L_08837F38: aot_gpr_31 = (0x08837F40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837F40u) goto L_08837F40; AOT_REGCACHE_SYNC_OUT(); return; L_08837F40: { const bool branch_taken = ctx.gpr[30] == ctx.gpr[2]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0013_entry, 13u, 13u, 0x08838094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8220,7 +7879,6 @@ L_08837F40: } L_08837F48: aot_gpr_31 = (0x08837F50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837F50u) goto L_08837F50; AOT_REGCACHE_SYNC_OUT(); return; L_08837F50: @@ -8231,7 +7889,6 @@ L_08837F50: L_08837F58: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0013_entry, 13u, 13u, 0x08838094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8245,7 +7902,6 @@ L_08837F64: L_08837F6C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08837FB0; } @@ -8258,7 +7914,6 @@ L_08837F78: AOT_REGCACHE_SYNC_OUT(); return; L_08837F80: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08837FB0; } @@ -8272,7 +7927,6 @@ L_08837F88: L_08837F90: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08837FB0; } @@ -8286,7 +7940,6 @@ L_08837F9C: L_08837FA4: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0013_entry, 13u, 13u, 0x08838094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8294,7 +7947,6 @@ L_08837FA4: } L_08837FB0: aot_gpr_31 = (0x08837FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837FB8u) goto L_08837FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08837FB8: @@ -8307,9 +7959,7 @@ L_08837FC0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0013_entry, 13u, 13u, 0x08838094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8318,7 +7968,6 @@ L_08837FC0: L_08837FDC: aot_gpr_18 = (0u | 1u); aot_gpr_31 = (0x08837FE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08837FE8u) goto L_08837FE8; AOT_REGCACHE_SYNC_OUT(); return; L_08837FE8: diff --git a/profiles/vcs/generated/generated_unit_0013.cpp b/profiles/vcs/generated/generated_unit_0013.cpp index c3066d2..4b90885 100644 --- a/profiles/vcs/generated/generated_unit_0013.cpp +++ b/profiles/vcs/generated/generated_unit_0013.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0013[4096] = { - 1, 0, 0, 2, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, - 0, 11, 0, 12, 0, 13, 0, 14, 0, 0, 15, 0, 16, 0, 0, 17, 18, 0, 0, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, - 0, 25, 0, 26, 0, 27, 0, 28, 0, 0, 29, 0, 30, 0, 0, 31, 0, 32, 0, 0, 33, 0, 34, 0, 0, 35, 0, 36, 0, 0, 37, 0, - 38, 0, 0, 39, 0, 40, 0, 0, 41, 0, 42, 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 50, 0, 51, 0, 0, 0, 0, 0, 52, 53, 0, 0, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, - 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 0, 68, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 73, 0, 74, 0, 75, - 0, 76, 0, 77, 0, 78, 0, 0, 0, 0, 79, 0, 0, 80, 0, 81, 0, 0, 82, 0, 83, 0, 84, 0, 85, 0, 0, 86, 0, 0, 87, 0, - 88, 0, 89, 90, 0, 91, 0, 92, 0, 93, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 96, 97, 0, 98, 0, 99, 0, 0, 100, 0, 0, - 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, 0, 107, 0, 108, 0, 0, 109, 0, - 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 116, 0, 117, - 0, 118, 0, 0, 0, 119, 0, 120, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 124, 0, 125, 0, 0, 126, 0, 127, - 0, 0, 128, 0, 129, 0, 0, 130, 0, 0, 0, 131, 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 135, 0, 0, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, - 0, 141, 0, 142, 0, 0, 143, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 147, 0, 148, 0, 0, 0, 149, 0, 0, 150, 0, - 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 152, 0, 153, 0, 154, 0, 155, 0, 0, 156, 0, 0, 157, 0, 158, 0, 0, 159, 0, 160, 0, 161, - 0, 162, 0, 0, 0, 163, 164, 0, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, - 170, 0, 171, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 181, 0, 182, 0, 183, 0, 0, - 0, 184, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 188, 0, 189, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 194, 0, 195, - 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, - 209, 0, 210, 211, 0, 212, 0, 0, 0, 0, 213, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 216, 0, 217, 0, 218, 0, 0, 219, - 0, 220, 0, 221, 0, 0, 222, 0, 223, 0, 0, 224, 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, - 0, 0, 229, 0, 230, 0, 231, 0, 0, 232, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 236, 0, 237, 0, 0, 0, 0, 0, 238, 239, - 0, 0, 0, 0, 240, 0, 241, 0, 242, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, - 248, 0, 0, 0, 249, 0, 0, 0, 250, 0, 251, 0, 0, 0, 252, 0, 0, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 0, 258, 0, 259, - 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 0, 264, 265, 0, 0, 0, 0, 266, 0, 267, 0, 268, 0, 0, 0, - 0, 0, 269, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, 0, 277, 0, - 0, 0, 278, 0, 0, 0, 279, 0, 280, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 287, 0, 288, 0, - 0, 0, 0, 0, 289, 290, 0, 0, 0, 0, 291, 0, 292, 0, 293, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 296, 0, 297, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 299, 0, 0, 0, 300, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 0, 0, 0, 304, 0, 305, 0, 306, 0, 307, 0, - 308, 0, 309, 0, 0, 310, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 0, 316, 317, 0, 0, 0, 0, - 318, 0, 319, 0, 320, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, - 327, 0, 0, 0, 328, 0, 329, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, 0, 333, 0, 334, 0, 335, 336, 0, 0, 0, 0, - 337, 0, 338, 0, 339, 0, 340, 341, 0, 0, 0, 0, 342, 0, 343, 0, 344, 0, 345, 346, 0, 0, 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, - 351, 0, 0, 352, 0, 353, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 0, - 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 371, 0, 372, 0, 0, 0, 373, 0, 0, 374, 0, - 375, 0, 376, 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 382, 0, 383, 0, 384, 0, - 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 0, 0, 390, 0, 391, 0, 392, 0, 0, 0, 393, 0, 394, 0, 395, 0, 0, 0, 396, 0, 397, 0, - 398, 0, 0, 399, 400, 0, 0, 0, 0, 401, 0, 402, 0, 0, 403, 0, 0, 0, 404, 0, 0, 405, 0, 0, 406, 0, 0, 0, 407, 0, 408, 0, - 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 419, 0, 420, 0, 421, 0, 0, - 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 427, 0, 428, 0, 429, 430, 0, 0, 0, 0, 431, 0, 432, - 0, 433, 0, 434, 435, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 439, 440, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, 0, - 446, 0, 447, 0, 0, 448, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 453, 0, 0, 0, 454, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 460, 0, 0, 461, 0, 462, 0, - 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 466, 0, 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 470, 0, 471, 0, 472, 473, - 0, 0, 474, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 478, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 483, 0, - 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 0, 0, 489, 0, 490, 0, 491, 0, 0, 0, 492, 0, 493, 0, 494, 0, 0, 0, 495, 0, 496, 0, - 497, 0, 0, 498, 499, 0, 0, 0, 0, 500, 0, 501, 0, 0, 502, 0, 0, 0, 503, 0, 0, 504, 0, 505, 0, 0, 506, 0, 0, 507, 0, 0, - 508, 0, 0, 509, 0, 510, 0, 0, 511, 512, 0, 513, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 516, 0, 0, 517, 0, 518, 0, 0, 519, 520, - 0, 521, 0, 0, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, 0, 526, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, - 532, 0, 0, 533, 534, 0, 535, 0, 536, 0, 0, 0, 0, 0, 0, 537, 0, 538, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 0, 541, 0, 542, - 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 544, 545, 0, 546, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, - 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, 555, - 0, 0, 556, 0, 557, 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 561, 0, 562, 0, 0, 0, 563, 0, 564, 0, 565, 0, 566, 0, 0, 0, 567, - 0, 568, 0, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 578, 0, - 579, 0, 580, 0, 0, 581, 0, 0, 582, 0, 583, 0, 584, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 588, 0, 0, - 589, 0, 590, 0, 591, 592, 0, 0, 593, 0, 594, 0, 0, 0, 0, 595, 0, 596, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 600, 0, - 601, 0, 0, 0, 602, 0, 603, 0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 609, 0, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 0, 0, 615, 616, 0, 617, 0, 618, - 0, 619, 0, 620, 0, 0, 621, 0, 622, 0, 623, 0, 0, 0, 0, 624, 0, 625, 0, 626, 0, 627, 0, 628, 0, 0, 0, 629, 0, 0, 0, 0, - 0, 630, 0, 631, 0, 632, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 636, - 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 643, 0, 644, 0, 0, 645, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, 0, 650, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 653, 0, 0, 654, 0, 0, 0, 655, 0, 0, 0, 656, 0, 657, 0, - 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 660, 0, 0, 661, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 664, 0, 665, 0, - 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 0, 0, 669, 0, 0, 670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 673, 0, - 0, 0, 674, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 678, 0, 0, 679, 0, 0, 680, 0, 0, 0, 681, - 0, 0, 0, 682, 0, 683, 0, 0, 0, 684, 0, 685, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 0, 689, 0, - 0, 690, 0, 0, 0, 691, 0, 0, 0, 692, 0, 693, 0, 0, 0, 694, 0, 695, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, - 0, 698, 0, 0, 699, 0, 0, 700, 0, 0, 0, 701, 0, 0, 0, 702, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 0, 706, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 710, 0, 0, 0, 0, 0, 0, 711, 0, 0, - 0, 712, 0, 713, 0, 0, 0, 714, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 716, 0, 717, 0, 0, 718, 0, 719, 0, 0, 720, 0, 721, - 0, 0, 722, 0, 723, 0, 0, 724, 725, 0, 726, 0, 727, 0, 728, 0, 729, 730, 0, 0, 731, 0, 0, 0, 732, 733, 0, 734, 0, 0, 735, 0, - 0, 736, 0, 0, 737, 0, 0, 738, 0, 0, 739, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, - 0, 742, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, 0, 746, 0, 0, 0, 747, 0, 0, 0, 748, 0, 0, 749, 0, 0, 750, 0, - 0, 751, 0, 0, 752, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 756, 0, 757, 0, - 758, 0, 0, 759, 0, 0, 760, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 762, 0, 763, 0, 764, 0, 0, 765, 0, 0, 766, 0, 0, 767, - 0, 768, 0, 769, 0, 770, 0, 0, 771, 0, 0, 0, 0, 0, 772, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, - 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 776, 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 780, 0, 0, 781, 0, 0, 782, 0, 783, 0, 0, 784, 0, 0, 785, 0, 0, 786, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 788, 0, 789, 0, 790, 0, 0, 791, 0, 792, 0, 0, 793, 0, 0, 0, 794, - 0, 795, 0, 0, 0, 0, 0, 796, 0, 0, 797, 0, 0, 0, 0, 798, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 801, 802, 0, 803, 0, 804, 0, 0, 0, 805, 0, 0, 806, 0, 0, 0, 0, 0, 807, 0, 0, 808, 0, 0, 809, - 0, 0, 810, 0, 0, 0, 811, 0, 0, 812, 0, 813, 0, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 818, 0, 819, 0, 0, 0, 820, 0, 821, 822, 0, 823, 0, 0, 0, 824, 0, 0, 0, 0, - 0, 0, 0, 0, 825, 0, 0, 826, 0, 0, 0, 827, 0, 828, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 830, 0, 0, 0, 831, 832, 0, - 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 835, 0, 0, 836, 0, 0, 0, 0, 837, 0, 0, 0, - 838, 0, 0, 839, 840, 0, 0, 0, 0, 0, 841, 0, 0, 0, 842, 0, 0, 0, 0, 843, 0, 0, 844, 0, 0, 845, 0, 0, 846, 0, 0, 847, - 0, 0, 0, 0, 848, 0, 0, 0, 849, 0, 0, 0, 0, 0, 0, 850, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, - 853, 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 855, 0, 0, 856, 0, 0, 857, 0, 0, 858, 0, 0, 859, 860, 0, 0, 0, 0, 0, 0, 861, - 0, 862, 0, 0, 863, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 866, 0, 0, - 867, 0, 868, 0, 0, 0, 0, 0, 0, 869, 0, 870, 0, 0, 0, 871, 0, 0, 0, 0, 872, 0, 0, 873, 0, 874, 0, 875, 0, 0, 0, 0, - 876, 0, 877, 0, 878, 0, 0, 879, 0, 880, 0, 881, 0, 882, 0, 0, 883, 0, 0, 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 885, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 888, 0, 889, 890, 0, 891, 0, 0, 0, 0, 892, - 0, 893, 0, 0, 0, 894, 895, 0, 896, 0, 0, 897, 0, 0, 0, 0, 898, 0, 0, 899, 0, 900, 0, 901, 0, 902, 0, 903, 0, 904, 0, 905, - 0, 0, 906, 0, 907, 0, 908, 0, 0, 909, 0, 0, 910, 0, 911, 0, 912, 0, 913, 0, 914, 0, 915, 0, 916, 0, 917, 0, 918, 0, 919, 920, - 0, 0, 921, 0, 0, 922, 0, 923, 0, 0, 924, 0, 925, 0, 926, 0, 927, 928, 0, 929, 0, 0, 930, 0, 931, 0, 932, 0, 0, 0, 0, 0, - 0, 933, 0, 934, 0, 0, 0, 935, 0, 0, 0, 936, 0, 937, 0, 0, 938, 0, 939, 0, 0, 940, 0, 941, 0, 942, 0, 943, 0, 944, 0, 945, - 0, 946, 0, 947, 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, 951, 0, 952, 0, 0, - 953, 0, 0, 0, 0, 0, 0, 0, 0, 954, 0, 0, 0, 0, 0, 955, 0, 956, 0, 0, 0, 957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 958, 0, 0, 0, 0, 959, 0, 0, 0, 0, 960, 0, 0, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 962, 0, 0, 0, 0, 963, 0, 964, - 0, 965, 0, 966, 0, 0, 967, 0, 968, 0, 0, 969, 0, 0, 0, 0, 970, 0, 0, 971, 0, 972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 973, 0, 974, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, 0, 0, 0, 0, 0, 977, 0, 0, 0, 978, 0, 0, - 0, 0, 0, 979, 0, 980, 0, 981, 982, 0, 0, 983, 0, 0, 984, 0, 985, 986, 0, 0, 987, 0, 0, 988, 0, 989, 0, 990, 0, 0, 0, 991, - 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 993, 994, 0, 995, 0, 996, 0, 0, 997, 0, 0, 998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 999, - 0, 1000, 0, 0, 1001, 0, 1002, 0, 0, 0, 1003, 1004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1005, 0, 1006, 0, 0, 0, 0, 0, 0, 0, 0, - 1007, 0, 0, 0, 0, 0, 0, 0, 1008, 0, 0, 1009, 0, 1010, 0, 0, 0, 1011, 0, 1012, 0, 0, 0, 0, 1013, 0, 0, 0, 0, 1014, 0, 1015, - 0, 1016, 0, 1017, 0, 1018, 0, 0, 0, 0, 0, 0, 1019, 0, 1020, 0, 0, 0, 0, 0, 1021, 0, 1022, 0, 1023, 0, 1024, 0, 0, 0, 0, 0, - 1025, 0, 1026, 0, 1027, 0, 0, 0, 0, 1028, 0, 0, 1029, 0, 0, 1030, 0, 1031, 0, 1032, 0, 0, 0, 0, 0, 1033, 0, 1034, 0, 1035, 0, 1036, - 0, 0, 0, 0, 0, 1037, 0, 1038, 0, 1039, 0, 1040, 0, 1041, 0, 0, 0, 1042, 0, 0, 1043, 0, 0, 1044, 0, 1045, 0, 1046, 0, 0, 1047, 0, - 1048, 0, 1049, 0, 1050, 0, 1051, 0, 1052, 0, 1053, 0, 1054, 0, 0, 1055, 0, 0, 0, 0, 0, 1056, 1057, 0, 1058, 0, 0, 1059, 0, 1060, 0, 0, - 1061, 0, 1062, 0, 0, 0, 0, 0, 0, 1063, 0, 0, 1064, 0, 1065, 0, 1066, 0, 0, 0, 1067, 0, 1068, 0, 1069, 0, 0, 0, 0, 0, 0, 1070, - 0, 0, 1071, 0, 1072, 0, 1073, 0, 1074, 0, 0, 1075, 0, 0, 1076, 0, 0, 1077, 0, 0, 0, 1078, 0, 1079, 0, 0, 1080, 0, 1081, 0, 1082, 0, - 0, 1083, 0, 1084, 0, 1085, 0, 1086, 0, 1087, 0, 0, 0, 0, 0, 0, 1088, 0, 1089, 0, 0, 1090, 0, 1091, 0, 0, 1092, 0, 0, 0, 0, 0, - 0, 0, 1093, 0, 0, 1094, 0, 1095, 0, 1096, 0, 0, 1097, 0, 0, 0, 0, 0, 1098, 0, 0, 1099, 0, 1100, 0, 0, 0, 0, 0, 0, 0, 0, - 1101, 0, 0, 1102, 0, 1103, 0, 1104, 0, 0, 0, 1105, 0, 0, 0, 0, 0, 1106, 0, 0, 1107, 1108, 0, 0, 0, 1109, 0, 0, 1110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1111, 0, 1112, 0, 0, 1113, 0, 0, 0, 0, 0, 1114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 0, 0, 1118, 0, 0, 0, 0, 0, 1119, 0, - 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, 0, 1123, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1124, 0, 1125, 0, 0, 1126, 0, 0, 1127, 0, 0, 0, 0, 0, 0, 0, 0, 1128, 0, 0, 0, 0, 0, - 0, 0, 1129, 0, 1130, 1131, 0, 0, 1132, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 1134, 0, 1135, 0, 0, 0, 1136, 0, 0, 0, 0, 0, 1137, 0, - 0, 1138, 0, 1139, 0, 0, 1140, 0, 0, 1141, 0, 0, 1142, 1143, 0, 0, 1144, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1146, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1147, 0, 0, 1148, 0, 0, 0, 0, 0, 1149, 0, 0, 1150, 0, 1151, 0, 0, 0, 0, 0, 0, 1152, 0, 1153, 0, 0, - 0, 0, 0, 0, 1154, 0, 0, 0, 1155, 1156, 0, 1157, 0, 0, 0, 0, 0, 1158, 0, 1159, 0, 0, 1160, 0, 1161, 0, 1162, 0, 0, 0, 1163, 0, - 0, 0, 0, 1164, 0, 1165, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 1167, 0, 1168, 0, 1169, 0, 1170, 0, 0, 0, 0, 0, 0, 1171, 0, 1172, 0, - 0, 0, 0, 1173, 0, 1174, 0, 0, 0, 0, 0, 1175, 0, 1176, 0, 0, 0, 0, 0, 1177, 0, 1178, 0, 1179, 0, 1180, 0, 1181, 0, 1182, 0, 1183, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0013[64] = { + 0x555194AA0A2248A9ull, 0x024AA5294A5294AAull, 0xAA514AAA5555182Aull, 0x256112AD4954A42Aull, + 0xA12490024A548011ull, 0x08024894A52804A2ull, 0x48A8224A49000221ull, 0x80284262A9495420ull, + 0xAA05522A2A2A2AADull, 0x0A10920005290028ull, 0x2014494A9510142Dull, 0x40294150C1504A54ull, + 0x150C1504A5544511ull, 0x5412954451140294ull, 0x551144500A505430ull, 0x140294150C1504A5ull, + 0x550D50D50D504451ull, 0x4881200A22491129ull, 0x5490284548A84200ull, 0x51244A1951515155ull, + 0x2A802800204A0809ull, 0x2AA1AA1AA1AA0912ull, 0x52440A91001404A5ull, 0x540A9124D4925081ull, + 0x24A44A1951515155ull, 0x55528122CA490B29ull, 0x08025810A1428159ull, 0x8AA2A89488902110ull, + 0x2105152540AAA8A2ull, 0x28000A51504A8535ull, 0x08AA854AAC2AA500ull, 0x04410848901000AAull, + 0x5112480088444940ull, 0x5112500451125004ull, 0x4A008A2889280224ull, 0x08A2889280228A22ull, + 0xA528088A20488020ull, 0x040014924B135594ull, 0x5820009249112412ull, 0x8004412A92541049ull, + 0x2494920000014900ull, 0x04018482894AA000ull, 0x04090A4492091580ull, 0x6208289008B45040ull, + 0x9248441910902040ull, 0x8192488108028110ull, 0x0A908A0520800092ull, 0x85A4021000112A95ull, + 0xD5555254AAA90962ull, 0xAAA5288A054B54A4ull, 0x002282012820808Aull, 0x0029094AA1080842ull, + 0x8A9349A822080025ull, 0x00A00C528024AC01ull, 0x0550502AA10A2901ull, 0x4A922AA0AA0A9215ull, + 0x8151520529609555ull, 0x04A502AA54A24954ull, 0x123208A900A412A4ull, 0x4100880020041280ull, + 0x04024A0042008040ull, 0x1005324A41142134ull, 0x454A0B1028148240ull, 0xAAA82828502A8128ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0013[64] = { + 1u, 25u, 49u, 76u, 101u, 118u, 135u, 151u, 170u, 196u, 209u, 229u, 248u, 269u, 289u, 308u, + 327u, 351u, 368u, 385u, 409u, 422u, 446u, 463u, 484u, 508u, 532u, 549u, 568u, 589u, 608u, 630u, + 643u, 658u, 674u, 690u, 707u, 722u, 742u, 758u, 775u, 787u, 801u, 817u, 833u, 848u, 862u, 876u, + 893u, 921u, 946u, 958u, 973u, 992u, 1007u, 1025u, 1048u, 1071u, 1093u, 1111u, 1120u, 1129u, 1147u, 1164u, }; void recomp_unit_0013_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0013_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08838000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0013[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0013[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0013[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08838000; @@ -1355,7 +1262,6 @@ LOCAL_DISPATCH: } } L_08838000: - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1820), ctx.gpr[23]); goto L_08838038; @@ -1373,7 +1279,6 @@ L_08838014: AOT_REGCACHE_SYNC_OUT(); return; L_0883801C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1820), ctx.gpr[23]); goto L_08838038; @@ -1417,7 +1322,6 @@ L_0883806C: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[23] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1820))); if (branch_taken) { @@ -1431,7 +1335,6 @@ L_08838084: goto L_0883808C; L_0883808C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088380C0; } @@ -1445,7 +1348,6 @@ L_08838094: L_0883809C: aot_gpr_4 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088380C0; } @@ -1459,7 +1361,6 @@ L_088380A8: L_088380B0: aot_gpr_4 = (0u | 12u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088380C0; } @@ -1472,7 +1373,6 @@ L_088380C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088380D8; } @@ -1495,7 +1395,6 @@ L_088380E0: AOT_REGCACHE_SYNC_OUT(); return; L_088380E8: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088381BC; } @@ -1509,7 +1408,6 @@ L_088380F0: L_088380F8: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381BC; } @@ -1522,7 +1420,6 @@ L_08838104: AOT_REGCACHE_SYNC_OUT(); return; L_0883810C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088381BC; } @@ -1536,7 +1433,6 @@ L_08838114: L_0883811C: aot_gpr_4 = (0u | 12u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381BC; } @@ -1550,7 +1446,6 @@ L_08838128: L_08838130: aot_gpr_4 = (0u | 13u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381BC; } @@ -1564,7 +1459,6 @@ L_0883813C: L_08838144: aot_gpr_4 = (0u | 193u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381B4; } @@ -1578,7 +1472,6 @@ L_08838150: L_08838158: aot_gpr_4 = (0u | 207u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381B4; } @@ -1592,7 +1485,6 @@ L_08838164: L_0883816C: aot_gpr_4 = (0u | 234u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381B4; } @@ -1606,7 +1498,6 @@ L_08838178: L_08838180: aot_gpr_4 = (0u + static_cast(-958)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381B4; } @@ -1620,7 +1511,6 @@ L_0883818C: L_08838194: aot_gpr_4 = (0u | 246u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088381B4; } @@ -1634,7 +1524,6 @@ L_088381A0: L_088381A8: aot_gpr_4 = (0u | 218u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088381BC; } @@ -1670,7 +1559,6 @@ L_088381CC: L_088381D8: aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08838230; } @@ -1692,7 +1580,6 @@ L_088381E4: } L_08838204: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08838214; } @@ -1724,7 +1611,6 @@ L_08838230: AOT_REGCACHE_SYNC_OUT(); return; L_08838240: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088382E4; } @@ -1737,7 +1623,6 @@ L_08838248: AOT_REGCACHE_SYNC_OUT(); return; L_08838250: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088382E4; } @@ -1755,7 +1640,6 @@ L_08838260: AOT_REGCACHE_SYNC_OUT(); return; L_08838268: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088382E4; } @@ -1769,7 +1653,6 @@ L_08838270: L_08838278: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883829C; } @@ -1787,7 +1670,6 @@ L_0883828C: AOT_REGCACHE_SYNC_OUT(); return; L_08838294: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088382E4; } @@ -1806,7 +1688,6 @@ L_088382A4: L_088382AC: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088382E4; } @@ -1826,7 +1707,6 @@ L_088382C0: AOT_REGCACHE_SYNC_OUT(); return; L_088382D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088382E4; } @@ -1889,7 +1769,6 @@ L_08838328: AOT_REGCACHE_SYNC_OUT(); return; L_08838334: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088383C0; } @@ -1941,7 +1820,6 @@ L_08838378: AOT_REGCACHE_SYNC_OUT(); return; L_08838380: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088383C0; } @@ -1962,7 +1840,6 @@ L_08838394: AOT_REGCACHE_SYNC_OUT(); return; L_0883839C: { const bool branch_taken = aot_gpr_2 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088383C0; } @@ -1986,7 +1863,6 @@ L_088383C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08838328; } @@ -2021,7 +1897,6 @@ L_08838400: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1778))); aot_gpr_4 = (ctx.gpr[18] | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883843C; } @@ -2052,7 +1927,6 @@ L_0883843C: AOT_REGCACHE_SYNC_OUT(); return; L_08838448: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088384B0; } @@ -2066,7 +1940,6 @@ L_08838450: L_08838458: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088384B0; } @@ -2150,7 +2023,6 @@ L_088384F4: } L_088384FC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08838698; } @@ -2160,7 +2032,6 @@ L_08838504: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08838698; } @@ -2174,7 +2045,6 @@ L_08838514: L_0883851C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08838698; } @@ -2189,7 +2059,6 @@ L_08838528: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08838698; } @@ -2203,7 +2072,6 @@ L_0883854C: L_08838554: aot_gpr_4 = (0u | 226u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08838698; } @@ -2217,7 +2085,6 @@ L_08838560: L_08838568: aot_gpr_4 = (0u | 183u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08838698; } @@ -2231,7 +2098,6 @@ L_08838574: L_0883857C: aot_gpr_4 = (0u + static_cast(-959)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08838698; } @@ -2245,7 +2111,6 @@ L_08838588: L_08838590: aot_gpr_4 = (0u + static_cast(-937)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08838698; } @@ -2334,7 +2199,6 @@ L_08838660: L_0883866C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(496))); { const bool branch_taken = aot_gpr_4 != aot_gpr_30; - // nop if (branch_taken) { goto L_08838698; } @@ -2348,7 +2212,6 @@ L_08838678: AOT_REGCACHE_SYNC_OUT(); return; L_08838684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08838698; } @@ -2370,7 +2233,6 @@ L_088386A4: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(14) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08839994; } @@ -2382,11 +2244,20 @@ L_088386B4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18480))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088386CC: aot_gpr_31 = (0x088386D4u); aot_gpr_4 = (0u | 0u); @@ -2410,7 +2281,6 @@ L_088386DC: L_088386EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1786))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08838738; } @@ -2453,7 +2323,6 @@ L_08838738: L_08838740: aot_gpr_4 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088387D4; } @@ -2462,7 +2331,6 @@ L_08838740: L_0883874C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1787))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088387D4; } @@ -2499,7 +2367,6 @@ L_08838784: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088387D4; } @@ -2546,7 +2413,6 @@ L_088387D4: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_30; - // nop if (branch_taken) { goto L_08838800; } @@ -2557,7 +2423,6 @@ L_088387FC: goto L_08838800; L_08838800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883880C; } @@ -2568,7 +2433,6 @@ L_08838808: goto L_0883880C; L_0883880C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088388A4; } @@ -2581,7 +2445,6 @@ L_08838814: AOT_REGCACHE_SYNC_OUT(); return; L_0883881C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088392E8; } @@ -2601,7 +2464,6 @@ L_08838834: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088392E8; } @@ -2621,7 +2483,6 @@ L_08838854: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088392E8; } @@ -2641,7 +2502,6 @@ L_08838874: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088392E8; } @@ -2661,7 +2521,6 @@ L_08838894: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 67u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088392E8; } @@ -2688,7 +2547,6 @@ L_088388B8: AOT_REGCACHE_SYNC_OUT(); return; L_088388C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088388E4; } @@ -2718,7 +2576,6 @@ L_088388EC: AOT_REGCACHE_SYNC_OUT(); return; L_088388F4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08838914; } @@ -2728,7 +2585,6 @@ L_088388FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7892))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08838914; } @@ -2750,7 +2606,6 @@ L_08838914: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(252))); aot_gpr_4 = (aot_gpr_4 < static_cast(501) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08838A68; } @@ -2764,7 +2619,6 @@ L_08838940: AOT_REGCACHE_SYNC_OUT(); return; L_0883894C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08838A68; } @@ -2778,7 +2632,6 @@ L_08838954: AOT_REGCACHE_SYNC_OUT(); return; L_08838960: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08838A68; } @@ -2827,9 +2680,7 @@ L_088389BC: L_088389D0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838A60; } @@ -2843,7 +2694,6 @@ L_088389E4: L_088389EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(352))); if (branch_taken) { @@ -2853,7 +2703,6 @@ L_088389EC: } L_08838A00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08838A0C; } @@ -2864,7 +2713,6 @@ L_08838A08: goto L_08838A0C; L_08838A0C: aot_gpr_31 = (0x08838A14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 176u, 0x08830D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08838A14u) goto L_08838A14; AOT_REGCACHE_SYNC_OUT(); return; L_08838A14: @@ -2917,7 +2765,6 @@ L_08838A70: goto L_08838A7C; L_08838A7C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08839038; } @@ -2931,7 +2778,6 @@ L_08838A84: L_08838A8C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08839038; } @@ -2945,7 +2791,6 @@ L_08838A98: L_08838AA0: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08839038; } @@ -2969,7 +2814,6 @@ L_08838AB8: } L_08838AC8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08838EE8; } @@ -2984,7 +2828,6 @@ L_08838AD0: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_14 / aot_fpr_13; aot_gpr_31 = (0x08838AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 77u, 0x088305BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08838AF4u) goto L_08838AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08838AF4: @@ -3002,7 +2845,6 @@ L_08838B08: AOT_REGCACHE_SYNC_OUT(); return; L_08838B10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08838C50; } @@ -3029,7 +2871,6 @@ L_08838B38: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); goto L_08838B7C; @@ -3049,9 +2890,7 @@ L_08838B60: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838BB8; } @@ -3063,9 +2902,7 @@ L_08838B78: L_08838B7C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838D98; } @@ -3085,9 +2922,7 @@ L_08838BA0: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838D98; } @@ -3161,7 +2996,6 @@ L_08838C38: AOT_REGCACHE_SYNC_OUT(); return; L_08838C48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08838D98; } @@ -3179,7 +3013,6 @@ L_08838C58: AOT_REGCACHE_SYNC_OUT(); return; L_08838C60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08838D98; } @@ -3206,7 +3039,6 @@ L_08838C88: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); goto L_08838CCC; @@ -3226,9 +3058,7 @@ L_08838CB0: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838D08; } @@ -3240,9 +3070,7 @@ L_08838CC8: L_08838CCC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838D98; } @@ -3262,9 +3090,7 @@ L_08838CF0: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838D98; } @@ -3348,7 +3174,6 @@ L_08838DA0: AOT_REGCACHE_SYNC_OUT(); return; L_08838DA8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08839038; } @@ -3375,7 +3200,6 @@ L_08838DD0: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); goto L_08838E14; @@ -3395,9 +3219,7 @@ L_08838DF8: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838E50; } @@ -3409,9 +3231,7 @@ L_08838E10: L_08838E14: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839038; } @@ -3431,9 +3251,7 @@ L_08838E38: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839038; } @@ -3507,7 +3325,6 @@ L_08838ED0: AOT_REGCACHE_SYNC_OUT(); return; L_08838EE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08839038; } @@ -3515,7 +3332,6 @@ L_08838EE0: } L_08838EE8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08839038; } @@ -3533,7 +3349,6 @@ L_08838EF8: AOT_REGCACHE_SYNC_OUT(); return; L_08838F00: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08839038; } @@ -3560,7 +3375,6 @@ L_08838F28: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29804))); goto L_08838F6C; @@ -3580,9 +3394,7 @@ L_08838F50: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08838FA8; } @@ -3594,9 +3406,7 @@ L_08838F68: L_08838F6C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839038; } @@ -3616,9 +3426,7 @@ L_08838F90: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839038; } @@ -3694,7 +3502,6 @@ L_08839038: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1524))); goto L_0883906C; @@ -3712,7 +3519,6 @@ L_08839058: AOT_REGCACHE_SYNC_OUT(); return; L_08839060: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088390F8; } @@ -3724,7 +3530,6 @@ L_08839068: L_0883906C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1528))); goto L_0883909C; @@ -3742,7 +3547,6 @@ L_08839088: AOT_REGCACHE_SYNC_OUT(); return; L_08839090: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088390F8; } @@ -3754,7 +3558,6 @@ L_08839098: L_0883909C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1532))); goto L_088390CC; @@ -3772,7 +3575,6 @@ L_088390B8: AOT_REGCACHE_SYNC_OUT(); return; L_088390C0: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088390F8; } @@ -3784,9 +3586,7 @@ L_088390C8: L_088390CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088393D4; } @@ -3804,7 +3604,6 @@ L_088390E8: AOT_REGCACHE_SYNC_OUT(); return; L_088390F0: { const bool branch_taken = aot_gpr_2 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088393D4; } @@ -3818,7 +3617,6 @@ L_088390F8: L_08839100: aot_gpr_4 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088393D4; } @@ -3832,7 +3630,6 @@ L_0883910C: L_08839114: aot_gpr_4 = (0u | 246u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088393D4; } @@ -3897,7 +3694,6 @@ L_0883918C: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1808))); if (branch_taken) { @@ -3973,7 +3769,6 @@ L_0883924C: AOT_REGCACHE_SYNC_OUT(); return; L_08839254: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883926C; } @@ -4009,9 +3804,7 @@ L_08839280: goto L_08839288; L_08839288: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088392AC; } @@ -4026,7 +3819,6 @@ L_08839298: goto L_088392AC; L_088392AC: aot_gpr_31 = (0x088392B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 125u, 0x08830904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088392B4u) goto L_088392B4; AOT_REGCACHE_SYNC_OUT(); return; L_088392B4: @@ -4061,7 +3853,6 @@ L_088392E8: AOT_REGCACHE_SYNC_OUT(); return; L_088392F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088393D4; } @@ -4079,7 +3870,6 @@ L_08839300: AOT_REGCACHE_SYNC_OUT(); return; L_08839308: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088393D4; } @@ -4099,7 +3889,6 @@ L_08839320: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088393AC; } @@ -4119,7 +3908,6 @@ L_08839340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088393AC; } @@ -4156,7 +3944,6 @@ L_08839378: L_08839380: aot_gpr_4 = (0u | 16u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088393D4; } @@ -4177,7 +3964,6 @@ L_08839390: AOT_REGCACHE_SYNC_OUT(); return; L_088393A4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088393D4; } @@ -4310,7 +4096,6 @@ L_088394B4: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store8(aot_gpr_30 + static_cast(617), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 196u, 0x0883CCFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4364,7 +4149,6 @@ L_0883952C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1524))); goto L_08839560; @@ -4382,7 +4166,6 @@ L_0883954C: AOT_REGCACHE_SYNC_OUT(); return; L_08839554: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088395EC; } @@ -4394,7 +4177,6 @@ L_0883955C: L_08839560: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1528))); goto L_08839590; @@ -4412,7 +4194,6 @@ L_0883957C: AOT_REGCACHE_SYNC_OUT(); return; L_08839584: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088395EC; } @@ -4424,7 +4205,6 @@ L_0883958C: L_08839590: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1532))); goto L_088395C0; @@ -4442,7 +4222,6 @@ L_088395AC: AOT_REGCACHE_SYNC_OUT(); return; L_088395B4: { const bool branch_taken = aot_gpr_2 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088395EC; } @@ -4454,9 +4233,7 @@ L_088395BC: L_088395C0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088396E4; } @@ -4474,7 +4251,6 @@ L_088395DC: AOT_REGCACHE_SYNC_OUT(); return; L_088395E4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088396E4; } @@ -4488,7 +4264,6 @@ L_088395EC: L_088395F4: aot_gpr_4 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088396E4; } @@ -4502,7 +4277,6 @@ L_08839600: L_08839608: aot_gpr_4 = (0u | 245u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088396E4; } @@ -4516,7 +4290,6 @@ L_08839614: L_0883961C: aot_gpr_4 = (0u + static_cast(-967)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088396E4; } @@ -4528,9 +4301,7 @@ L_08839628: aot_mem.aot_direct_store8(aot_gpr_30 + static_cast(1654), static_cast(aot_gpr_4)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088396A4; } @@ -4571,7 +4342,6 @@ L_08839690: AOT_REGCACHE_SYNC_OUT(); return; L_0883969C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088396E4; } @@ -4629,7 +4399,6 @@ L_08839700: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(48)); if (branch_taken) { @@ -4647,7 +4416,6 @@ L_0883971C: AOT_REGCACHE_SYNC_OUT(); return; L_08839730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08839744; } @@ -4696,7 +4464,6 @@ L_08839778: L_0883977C: aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088397B0; } @@ -4745,7 +4512,6 @@ L_088397CC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(48)); if (branch_taken) { @@ -4760,7 +4526,6 @@ L_088397E8: AOT_REGCACHE_SYNC_OUT(); return; L_088397F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088398DC; } @@ -4778,7 +4543,6 @@ L_08839800: AOT_REGCACHE_SYNC_OUT(); return; L_08839808: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088398DC; } @@ -4798,7 +4562,6 @@ L_08839820: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088398AC; } @@ -4818,7 +4581,6 @@ L_08839840: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088398AC; } @@ -4855,7 +4617,6 @@ L_08839878: L_08839880: aot_gpr_4 = (0u | 16u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088398DC; } @@ -4876,7 +4637,6 @@ L_08839890: AOT_REGCACHE_SYNC_OUT(); return; L_088398A4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088398DC; } @@ -4903,7 +4663,6 @@ L_088398C8: AOT_REGCACHE_SYNC_OUT(); return; L_088398D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088398F4; } @@ -4952,7 +4711,6 @@ L_08839920: goto L_08839924; L_08839924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088399A0; } @@ -5003,7 +4761,6 @@ L_08839978: goto L_0883997C; L_0883997C: aot_gpr_31 = (0x08839984u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 367u, 0x08A42004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08839984u) goto L_08839984; AOT_REGCACHE_SYNC_OUT(); return; L_08839984: @@ -5035,7 +4792,6 @@ L_088399A0: AOT_REGCACHE_SYNC_OUT(); return; L_088399BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088399E0; } @@ -5049,7 +4805,6 @@ L_088399C4: AOT_REGCACHE_SYNC_OUT(); return; L_088399D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088399E8; } @@ -5057,7 +4812,6 @@ L_088399D0: } L_088399D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08839D44; } @@ -5065,7 +4819,6 @@ L_088399D8: } L_088399E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 196u, 0x0883CCFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5090,7 +4843,6 @@ L_088399F8: L_08839A00: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08839D44; } @@ -5106,7 +4858,6 @@ L_08839A10: AOT_REGCACHE_SYNC_OUT(); return; L_08839A18: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08839D44; } @@ -5133,9 +4884,7 @@ L_08839A3C: L_08839A44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839AB0; } @@ -5149,9 +4898,7 @@ L_08839A58: L_08839A60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839AB0; } @@ -5165,9 +4912,7 @@ L_08839A74: L_08839A7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839AB0; } @@ -5178,9 +4923,7 @@ L_08839A90: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839AB0; } @@ -5197,7 +4940,6 @@ L_08839AB0: L_08839AB8: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08839AEC; } @@ -5299,7 +5041,6 @@ L_08839B9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(619)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08839D10; } @@ -5322,9 +5063,7 @@ L_08839BBC: AOT_REGCACHE_SYNC_OUT(); return; L_08839BC4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839C54; } @@ -5347,9 +5086,7 @@ L_08839BE4: AOT_REGCACHE_SYNC_OUT(); return; L_08839BEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839C54; } @@ -5362,9 +5099,7 @@ L_08839BFC: AOT_REGCACHE_SYNC_OUT(); return; L_08839C04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839C54; } @@ -5377,9 +5112,7 @@ L_08839C14: AOT_REGCACHE_SYNC_OUT(); return; L_08839C1C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839C5C; } @@ -5392,7 +5125,6 @@ L_08839C2C: AOT_REGCACHE_SYNC_OUT(); return; L_08839C34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08839C5C; } @@ -5410,7 +5142,6 @@ L_08839C44: AOT_REGCACHE_SYNC_OUT(); return; L_08839C4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08839C5C; } @@ -5418,7 +5149,6 @@ L_08839C4C: } L_08839C54: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08839D08; } @@ -5431,7 +5161,6 @@ L_08839C5C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(309))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08839C80; } @@ -5439,7 +5168,6 @@ L_08839C5C: } L_08839C78: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08839D14; } @@ -5464,7 +5192,6 @@ L_08839C94: AOT_REGCACHE_SYNC_OUT(); return; L_08839CA0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08839D14; } @@ -5472,7 +5199,6 @@ L_08839CA0: } L_08839CA8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08839CC0; } @@ -5482,7 +5208,6 @@ L_08839CB0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(309))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08839CC8; } @@ -5517,7 +5242,6 @@ L_08839CF4: AOT_REGCACHE_SYNC_OUT(); return; L_08839D00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08839D14; } @@ -5542,7 +5266,6 @@ L_08839D14: AOT_REGCACHE_SYNC_OUT(); return; L_08839D20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08839D44; } @@ -5551,9 +5274,7 @@ L_08839D20: L_08839D28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1640))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08839D44; } @@ -5570,7 +5291,6 @@ L_08839D44: L_08839D4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1756))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08839D80; } @@ -5582,7 +5302,6 @@ L_08839D58: aot_mem.aot_direct_store8(aot_gpr_30 + static_cast(617), static_cast(aot_gpr_5)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7893))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08839D80; } @@ -5590,12 +5309,10 @@ L_08839D58: } L_08839D70: aot_gpr_31 = (0x08839D78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 133u, 0x088309C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08839D78u) goto L_08839D78; AOT_REGCACHE_SYNC_OUT(); return; L_08839D78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08839D98; } @@ -5613,7 +5330,6 @@ L_08839D80: } L_08839D90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08839DAC; } @@ -5627,7 +5343,6 @@ L_08839D98: AOT_REGCACHE_SYNC_OUT(); return; L_08839DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 196u, 0x0883CCFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5701,7 +5416,6 @@ L_08839E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08839E44: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08839E84; } @@ -5717,7 +5431,6 @@ L_08839E54: aot_gpr_4 = (ctx.gpr[17] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08839E6C; } @@ -5728,7 +5441,6 @@ L_08839E68: goto L_08839E6C; L_08839E6C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08839E7C; } @@ -5741,7 +5453,6 @@ L_08839E74: AOT_REGCACHE_SYNC_OUT(); return; L_08839E7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883A4CC; } @@ -5768,7 +5479,6 @@ L_08839E98: AOT_REGCACHE_SYNC_OUT(); return; L_08839EA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883A4CC; } @@ -5779,7 +5489,6 @@ L_08839EA8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1778))); aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883A4CC; } @@ -5792,7 +5501,6 @@ L_08839EBC: AOT_REGCACHE_SYNC_OUT(); return; L_08839EC4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883A4CC; } @@ -5810,9 +5518,7 @@ L_08839ED4: AOT_REGCACHE_SYNC_OUT(); return; L_08839EDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883A4CC; } @@ -5822,9 +5528,7 @@ L_08839EEC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883A4CC; } @@ -5842,7 +5546,6 @@ L_08839F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08839F14: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883A4CC; } @@ -6471,7 +6174,6 @@ L_0883A4CC: L_0883A4D4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883A4F4; } @@ -6485,7 +6187,6 @@ L_0883A4E0: L_0883A4E8: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883A520; } @@ -6499,7 +6200,6 @@ L_0883A4F4: L_0883A4FC: aot_gpr_4 = (0u | 20u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883A51C; } @@ -6513,7 +6213,6 @@ L_0883A508: L_0883A510: aot_gpr_4 = (0u | 22u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883A520; } @@ -6529,7 +6228,6 @@ L_0883A520: AOT_REGCACHE_SYNC_OUT(); return; L_0883A528: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883A550; } @@ -6564,7 +6262,6 @@ L_0883A550: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(304)))))); aot_gpr_5 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0883A564; } @@ -6580,7 +6277,6 @@ L_0883A564: L_0883A56C: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(1812), static_cast(ctx.gpr[23])); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0883A640; } @@ -6676,7 +6372,6 @@ L_0883A640: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(616)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883A77C; } @@ -6804,7 +6499,6 @@ L_0883A730: AOT_REGCACHE_SYNC_OUT(); return; L_0883A748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883A6F0; } @@ -6851,7 +6545,6 @@ L_0883A78C: L_0883A794: aot_gpr_4 = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883A7B8; } @@ -6977,7 +6670,6 @@ L_0883A8C8: L_0883A8D0: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883A93C; } @@ -6992,7 +6684,6 @@ L_0883A8DC: L_0883A8E8: aot_gpr_4 = (static_cast(aot_gpr_2) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883AA20; } @@ -7012,9 +6703,7 @@ L_0883A8F4: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1520), std::bit_cast(aot_fpr_13)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883AA20; } @@ -7041,7 +6730,6 @@ L_0883A944: L_0883A94C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883AA20; } @@ -7055,7 +6743,6 @@ L_0883A958: L_0883A960: aot_gpr_4 = (0u | 246u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883AA20; } @@ -7070,7 +6757,6 @@ L_0883A96C: AOT_REGCACHE_SYNC_OUT(); return; L_0883A97C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883A99C; } @@ -7132,9 +6818,7 @@ L_0883A9E8: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1520), std::bit_cast(ctx.fpr[16])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883AA20; } @@ -7170,9 +6854,7 @@ L_0883AA4C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883AAAC; } @@ -7262,9 +6944,7 @@ L_0883AB18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883ABF8; } @@ -7287,7 +6967,6 @@ L_0883AB38: } L_0883AB48: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0883AB54; } @@ -7350,18 +7029,26 @@ L_0883ABB4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18536))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883ABCC: aot_gpr_4 = (0u | 2u); aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1580), aot_gpr_4); aot_mem.aot_direct_store8(ctx.gpr[18] + static_cast(1600), static_cast(aot_gpr_5)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883ABF8; } @@ -7371,7 +7058,6 @@ L_0883ABE4: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1580), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883ABF8; } @@ -7424,7 +7110,6 @@ L_0883AC5C: ctx.gpr[18] = (aot_gpr_30 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1756))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883AC90; } @@ -7450,7 +7135,6 @@ L_0883AC90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[19] << 5u); if (branch_taken) { @@ -7468,9 +7152,7 @@ L_0883ACA8: L_0883ACB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883ACFC; } @@ -7505,7 +7187,6 @@ L_0883ACFC: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883AC34; } @@ -7522,9 +7203,7 @@ L_0883AD20: aot_gpr_4 = (aot_gpr_30 + ctx.gpr[16]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883AD6C; } @@ -7553,7 +7232,6 @@ L_0883AD6C: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883AD20; } @@ -7584,7 +7262,6 @@ L_0883ADAC: L_0883ADB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1756))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883ADE0; } @@ -7657,9 +7334,7 @@ L_0883AE5C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883AE80; } @@ -7676,7 +7351,6 @@ L_0883AE74: } L_0883AE80: aot_gpr_31 = (0x0883AE88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 125u, 0x08830904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883AE88u) goto L_0883AE88; AOT_REGCACHE_SYNC_OUT(); return; L_0883AE88: @@ -7695,9 +7369,7 @@ L_0883AEA4: goto L_0883AEAC; L_0883AEAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883AF40; } @@ -7714,7 +7386,6 @@ L_0883AEBC: L_0883AED0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0883AF00; } @@ -7730,7 +7401,6 @@ L_0883AEDC: } L_0883AEE4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883AF40; } @@ -7741,7 +7411,6 @@ L_0883AEEC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store8(aot_gpr_30 + static_cast(1885), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883AF40; } @@ -7757,7 +7426,6 @@ L_0883AF00: } L_0883AF08: { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_0883AF1C; } @@ -7770,7 +7438,6 @@ L_0883AF10: goto L_0883AF1C; L_0883AF1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883AF40; } @@ -7778,7 +7445,6 @@ L_0883AF1C: } L_0883AF24: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0883AF34; } @@ -7786,7 +7452,6 @@ L_0883AF24: } L_0883AF2C: { const bool branch_taken = ctx.gpr[16] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0883AF40; } @@ -7857,7 +7522,6 @@ L_0883AFC8: AOT_REGCACHE_SYNC_OUT(); return; L_0883AFD4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883AFE0; } @@ -7874,9 +7538,7 @@ L_0883AFE0: L_0883AFE8: ctx.fpr[22] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B014; } @@ -7902,7 +7564,6 @@ L_0883B014: goto L_0883B018; L_0883B018: aot_gpr_31 = (0x0883B020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 125u, 0x08830904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B020u) goto L_0883B020; AOT_REGCACHE_SYNC_OUT(); return; L_0883B020: @@ -7927,7 +7588,6 @@ L_0883B040: AOT_REGCACHE_SYNC_OUT(); return; L_0883B04C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B07C; } @@ -7940,7 +7600,6 @@ L_0883B054: AOT_REGCACHE_SYNC_OUT(); return; L_0883B05C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B074; } @@ -7953,7 +7612,6 @@ L_0883B064: AOT_REGCACHE_SYNC_OUT(); return; L_0883B06C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0883B07C; } @@ -8020,7 +7678,6 @@ L_0883B0C8: AOT_REGCACHE_SYNC_OUT(); return; L_0883B0D0: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_0883B0E0; } @@ -8033,7 +7690,6 @@ L_0883B0D8: AOT_REGCACHE_SYNC_OUT(); return; L_0883B0E0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0883B0F0; } @@ -8058,7 +7714,6 @@ L_0883B0F8: L_0883B0FC: ctx.gpr[16] = (0u | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883B144; } @@ -8086,7 +7741,6 @@ L_0883B11C: } L_0883B128: aot_gpr_31 = (0x0883B130u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B130u) goto L_0883B130; AOT_REGCACHE_SYNC_OUT(); return; L_0883B130: @@ -8096,7 +7750,6 @@ L_0883B130: AOT_REGCACHE_SYNC_OUT(); return; L_0883B138: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B144; } @@ -8121,7 +7774,6 @@ L_0883B14C: } L_0883B158: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0883B184; } @@ -8129,7 +7781,6 @@ L_0883B158: } L_0883B160: aot_gpr_31 = (0x0883B168u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 164u, 0x08830CCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B168u) goto L_0883B168; AOT_REGCACHE_SYNC_OUT(); return; L_0883B168: @@ -8147,7 +7798,6 @@ L_0883B168: } L_0883B184: aot_gpr_31 = (0x0883B18Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 164u, 0x08830CCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B18Cu) goto L_0883B18C; AOT_REGCACHE_SYNC_OUT(); return; L_0883B18C: @@ -8179,7 +7829,6 @@ L_0883B1B4: AOT_REGCACHE_SYNC_OUT(); return; L_0883B1C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B1D4; } @@ -8192,7 +7841,6 @@ L_0883B1C8: goto L_0883B1D4; L_0883B1D4: aot_gpr_31 = (0x0883B1DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B1DCu) goto L_0883B1DC; AOT_REGCACHE_SYNC_OUT(); return; L_0883B1DC: @@ -8203,7 +7851,6 @@ L_0883B1DC: goto L_0883B1E4; L_0883B1E4: aot_gpr_31 = (0x0883B1ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B1ECu) goto L_0883B1EC; AOT_REGCACHE_SYNC_OUT(); return; L_0883B1EC: @@ -8224,7 +7871,6 @@ L_0883B1FC: AOT_REGCACHE_SYNC_OUT(); return; L_0883B204: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B318; } @@ -8234,7 +7880,6 @@ L_0883B20C: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(1653)))))); aot_gpr_4 = (ctx.gpr[7] & 7u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0883B274; } @@ -8248,7 +7893,6 @@ L_0883B21C: aot_gpr_4 = (0u | 7000u); aot_mem.aot_direct_store16(aot_gpr_30 + static_cast(666), static_cast(aot_gpr_4)); aot_gpr_31 = (0x0883B23Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B23Cu) goto L_0883B23C; AOT_REGCACHE_SYNC_OUT(); return; L_0883B23C: @@ -8271,7 +7915,6 @@ L_0883B254: AOT_REGCACHE_SYNC_OUT(); return; L_0883B26C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883B318; } @@ -8280,7 +7923,6 @@ L_0883B26C: L_0883B274: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883B318; } @@ -8309,7 +7951,6 @@ L_0883B2A4: AOT_REGCACHE_SYNC_OUT(); return; L_0883B2BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883B318; } @@ -8319,7 +7960,6 @@ L_0883B2C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1778))); aot_gpr_5 = (aot_gpr_5 | aot_gpr_4); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0883B318; } @@ -8337,7 +7977,6 @@ L_0883B2D4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1815))); aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883B318; } @@ -8353,9 +7992,7 @@ L_0883B304: L_0883B318: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29680))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B4C4; } @@ -8367,9 +8004,7 @@ L_0883B32C: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B4B8; } @@ -8378,9 +8013,7 @@ L_0883B32C: L_0883B34C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B374; } @@ -8389,9 +8022,7 @@ L_0883B34C: L_0883B360: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(1556))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B4B8; } @@ -8404,7 +8035,6 @@ L_0883B374: AOT_REGCACHE_SYNC_OUT(); return; L_0883B37C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B4B8; } @@ -8488,7 +8118,6 @@ L_0883B414: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(600))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15692u << 16u); if (branch_taken) { @@ -8500,9 +8129,7 @@ L_0883B44C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B49C; } @@ -8510,7 +8137,6 @@ L_0883B44C: } L_0883B464: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48460u << 16u); if (branch_taken) { @@ -8522,9 +8148,7 @@ L_0883B474: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B49C; } @@ -8537,7 +8161,6 @@ L_0883B48C: AOT_REGCACHE_SYNC_OUT(); return; L_0883B494: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B4A0; } @@ -8590,7 +8213,6 @@ L_0883B4DC: AOT_REGCACHE_SYNC_OUT(); return; L_0883B4E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B4FC; } @@ -8632,7 +8254,6 @@ L_0883B52C: AOT_REGCACHE_SYNC_OUT(); return; L_0883B534: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B548; } @@ -8667,7 +8288,6 @@ L_0883B554: AOT_REGCACHE_SYNC_OUT(); return; L_0883B57C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0883B5D4; } @@ -8681,7 +8301,6 @@ L_0883B584: AOT_REGCACHE_SYNC_OUT(); return; L_0883B590: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B5A8; } @@ -8735,9 +8354,7 @@ L_0883B600: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883B62C; } @@ -8750,7 +8367,6 @@ L_0883B620: goto L_0883B62C; L_0883B62C: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_0883B64C; } @@ -8760,7 +8376,6 @@ L_0883B634: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_30 + static_cast(615)))))); aot_gpr_5 = (aot_gpr_5 & 128u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0883B64C; } @@ -8799,7 +8414,6 @@ L_0883B674: AOT_REGCACHE_SYNC_OUT(); return; L_0883B67C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B810; } @@ -8812,7 +8426,6 @@ L_0883B684: AOT_REGCACHE_SYNC_OUT(); return; L_0883B68C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B7B4; } @@ -8885,7 +8498,6 @@ L_0883B700: goto L_0883B708; L_0883B708: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883B73C; } @@ -8982,7 +8594,6 @@ L_0883B794: goto L_0883B79C; L_0883B79C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883B7AC; } @@ -9008,7 +8619,6 @@ L_0883B7B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_30 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883B828; } @@ -9017,7 +8627,6 @@ L_0883B7B4: L_0883B7C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1778))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883B828; } @@ -9026,7 +8635,6 @@ L_0883B7C4: L_0883B7D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1816))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883B828; } @@ -9039,7 +8647,6 @@ L_0883B7DC: AOT_REGCACHE_SYNC_OUT(); return; L_0883B7E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B828; } @@ -9053,7 +8660,6 @@ L_0883B7EC: AOT_REGCACHE_SYNC_OUT(); return; L_0883B7F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883B808; } @@ -9082,7 +8688,6 @@ L_0883B810: AOT_REGCACHE_SYNC_OUT(); return; L_0883B818: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B828; } @@ -9101,7 +8706,6 @@ L_0883B828: L_0883B830: aot_gpr_4 = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883B854; } @@ -9134,7 +8738,6 @@ L_0883B860: AOT_REGCACHE_SYNC_OUT(); return; L_0883B86C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0883B8B8; } @@ -9148,7 +8751,6 @@ L_0883B874: AOT_REGCACHE_SYNC_OUT(); return; L_0883B880: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B8B8; } @@ -9172,7 +8774,6 @@ L_0883B8A4: AOT_REGCACHE_SYNC_OUT(); return; L_0883B8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883B938; } @@ -9200,7 +8801,6 @@ L_0883B8D0: AOT_REGCACHE_SYNC_OUT(); return; L_0883B8D8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883B910; } @@ -9224,7 +8824,6 @@ L_0883B8FC: AOT_REGCACHE_SYNC_OUT(); return; L_0883B908: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883B938; } @@ -9268,7 +8867,6 @@ L_0883B944: goto L_0883B954; L_0883B954: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0883B984; } @@ -9282,7 +8880,6 @@ L_0883B95C: AOT_REGCACHE_SYNC_OUT(); return; L_0883B968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883B984; } @@ -9290,7 +8887,6 @@ L_0883B968: } L_0883B970: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883B984; } @@ -9304,12 +8900,10 @@ L_0883B978: AOT_REGCACHE_SYNC_OUT(); return; L_0883B984: aot_gpr_31 = (0x0883B98Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883B98Cu) goto L_0883B98C; AOT_REGCACHE_SYNC_OUT(); return; L_0883B98C: { const bool branch_taken = aot_gpr_30 != aot_gpr_2; - // nop if (branch_taken) { goto L_0883BA94; } @@ -9322,7 +8916,6 @@ L_0883B994: AOT_REGCACHE_SYNC_OUT(); return; L_0883B99C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883BA94; } @@ -9333,7 +8926,6 @@ L_0883B9A4: aot_gpr_4 = (17274u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(32)); if (branch_taken) { @@ -9363,7 +8955,6 @@ L_0883B9D4: L_0883B9DC: aot_gpr_4 = (0u | 194u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883BA1C; } @@ -9402,7 +8993,6 @@ L_0883BA1C: L_0883BA24: aot_gpr_4 = (0u | 198u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883BA5C; } @@ -9512,9 +9102,7 @@ L_0883BAF0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883BD10; } @@ -9686,9 +9274,7 @@ L_0883BCC4: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883BD08; } @@ -9709,7 +9295,6 @@ L_0883BCE8: AOT_REGCACHE_SYNC_OUT(); return; L_0883BD08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883BD14; } @@ -9728,7 +9313,6 @@ L_0883BD14: L_0883BD20: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_30 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1804), ctx.gpr[18]); goto L_0883BD48; @@ -9829,9 +9413,7 @@ L_0883BDF0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883BEA4; } @@ -9850,9 +9432,7 @@ L_0883BE24: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883BEA4; } @@ -9884,7 +9464,6 @@ L_0883BE50: AOT_REGCACHE_SYNC_OUT(); return; L_0883BE6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883BE90; } @@ -9902,9 +9481,7 @@ L_0883BE74: AOT_REGCACHE_SYNC_OUT(); return; L_0883BE90: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883BEA4; } @@ -9924,7 +9501,6 @@ L_0883BEAC: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883BEE8; } @@ -9938,7 +9514,6 @@ L_0883BEC4: L_0883BECC: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883BEE8; } @@ -9951,7 +9526,6 @@ L_0883BED8: AOT_REGCACHE_SYNC_OUT(); return; L_0883BEE0: { const bool branch_taken = aot_gpr_2 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0883BF0C; } @@ -9959,7 +9533,6 @@ L_0883BEE0: } L_0883BEE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1552))); if (branch_taken) { @@ -9972,7 +9545,6 @@ L_0883BEF8: aot_gpr_4 = (aot_gpr_4 | 39322u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883BF78; } @@ -9986,7 +9558,6 @@ L_0883BF0C: L_0883BF14: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883BF44; } @@ -9997,7 +9568,6 @@ L_0883BF20: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1552))); if (branch_taken) { @@ -10031,7 +9601,6 @@ L_0883BF54: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15820u << 16u); if (branch_taken) { @@ -10046,9 +9615,7 @@ L_0883BF70: L_0883BF78: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 3u, 0x0883C01Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10063,9 +9630,7 @@ L_0883BF94: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883BFCC; } @@ -10080,9 +9645,7 @@ L_0883BFB4: aot_gpr_4 = (48896u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 3u, 0x0883C01Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10090,7 +9653,6 @@ L_0883BFB4: } L_0883BFCC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0883BFDC; } @@ -10098,7 +9660,6 @@ L_0883BFCC: } L_0883BFD4: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0883BFEC; } @@ -10111,7 +9672,6 @@ L_0883BFDC: AOT_REGCACHE_SYNC_OUT(); return; L_0883BFE4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 2u, 0x0883C00Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10127,7 +9687,6 @@ L_0883BFEC: } L_0883BFF4: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0014_entry, 14u, 3u, 0x0883C01Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0014.cpp b/profiles/vcs/generated/generated_unit_0014.cpp index 257f3e0..9e2e620 100644 --- a/profiles/vcs/generated/generated_unit_0014.cpp +++ b/profiles/vcs/generated/generated_unit_0014.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0014[4093] = { - 1, 0, 2, 0, 0, 0, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, - 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 0, 39, 0, 0, 40, 0, 41, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, - 0, 0, 0, 47, 0, 48, 0, 49, 0, 0, 0, 0, 50, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 55, - 0, 56, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, - 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 69, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, - 76, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 79, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, - 0, 0, 83, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 89, 0, 0, 90, 0, 91, 0, - 0, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 99, 0, 100, 0, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 104, 0, 105, 0, 106, 0, 107, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, 0, 110, - 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, 113, 0, 0, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, 118, 0, 0, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 126, 0, 0, 127, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 130, 0, 0, 0, 0, 0, 0, 131, 132, 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 142, 0, 143, 0, 144, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 150, 0, - 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 161, - 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 163, 0, 164, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, - 0, 0, 170, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 173, 0, 0, 174, 0, 0, 175, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 178, - 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 181, 182, 0, 0, 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 185, 0, 0, 0, 186, 0, 187, 0, - 0, 188, 0, 0, 189, 0, 190, 0, 0, 0, 191, 0, 0, 0, 192, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 203, 0, - 204, 0, 205, 0, 0, 206, 0, 207, 0, 208, 0, 209, 0, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, - 0, 0, 217, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 0, 0, 0, 0, 221, 0, 0, 222, 0, 223, 0, 0, 224, 0, 225, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 228, 0, - 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 230, 0, 231, 0, 232, 0, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 0, 0, 0, 0, - 236, 0, 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 244, 0, - 0, 245, 0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 248, 0, 249, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, - 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, 264, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 266, 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 270, 0, 271, 272, 0, 273, 0, 0, 274, 0, 275, 0, 0, 276, 0, 0, 277, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 281, - 0, 0, 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 289, 0, 290, - 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, - 0, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 300, 0, 0, 0, 0, - 0, 301, 0, 302, 0, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 307, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, - 0, 0, 0, 310, 0, 311, 0, 0, 0, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 316, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 318, 0, 319, 0, 320, 0, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 0, 0, 0, - 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 328, 0, - 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, - 0, 0, 0, 334, 0, 335, 0, 336, 0, 0, 337, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, - 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, - 351, 0, 0, 352, 0, 0, 0, 353, 0, 0, 354, 0, 355, 0, 0, 0, 356, 0, 357, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, - 0, 0, 0, 361, 0, 0, 362, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 369, - 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 374, 0, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 379, 0, 380, 0, - 0, 381, 0, 0, 0, 0, 382, 0, 0, 0, 383, 384, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 0, - 0, 0, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 403, - 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, - 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, - 0, 421, 0, 0, 422, 0, 423, 0, 424, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, - 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, - 434, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, 0, - 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 0, - 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 453, 0, 0, - 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 0, 460, 0, - 0, 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, - 475, 0, 0, 476, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 0, 480, 0, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, - 0, 485, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 492, 0, 493, 0, 0, 494, 0, - 495, 0, 496, 0, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 502, 0, 503, 0, 0, - 0, 0, 0, 504, 0, 0, 0, 505, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 509, 0, 0, 0, 510, 0, 0, 511, 0, 0, - 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 515, 0, 0, 516, 0, 0, - 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 521, - 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 525, 0, 0, 0, 0, 526, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, 0, 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, - 0, 0, 538, 0, 539, 0, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, - 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, - 554, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 557, 0, 558, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 562, 0, 0, - 563, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, - 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, - 0, 577, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 583, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 587, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, - 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 593, 0, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 601, - 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, - 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 609, 0, 0, 0, 610, 0, 611, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, 0, 0, - 615, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 621, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 625, 0, 626, 0, 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, - 629, 0, 0, 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 0, 635, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, 639, 0, 0, 0, 640, 0, 641, 0, 0, 642, 0, 0, 0, 0, - 0, 0, 643, 0, 644, 0, 645, 0, 646, 0, 647, 0, 0, 648, 0, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, - 0, 653, 0, 654, 0, 655, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 0, - 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 666, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, - 677, 0, 678, 0, 679, 0, 0, 0, 680, 0, 0, 681, 0, 0, 0, 0, 682, 0, 0, 683, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, - 0, 686, 0, 0, 687, 0, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 691, 0, 692, 0, - 0, 0, 693, 0, 694, 0, 0, 0, 0, 695, 0, 0, 696, 0, 0, 697, 0, 698, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, - 701, 0, 0, 702, 0, 0, 0, 0, 703, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, - 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 711, 0, 0, 0, 712, 0, 713, 0, 0, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 716, 0, 0, 717, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 721, - 0, 0, 0, 722, 0, 0, 723, 0, 724, 0, 725, 0, 726, 0, 727, 0, 728, 0, 729, 0, 730, 0, 731, 0, 732, 0, 733, 0, 734, 0, 735, 0, - 0, 0, 736, 0, 737, 0, 0, 0, 738, 0, 739, 0, 740, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, - 0, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, - 0, 748, 0, 0, 0, 0, 0, 0, 749, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 752, 0, 0, 753, 0, 0, 0, 0, 0, 0, 754, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 757, 0, 0, 758, 0, 0, 0, 0, 0, 0, 759, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 761, 0, 762, 0, 0, 0, 763, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, - 767, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, - 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 774, 0, 0, 0, 0, 775, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 777, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, - 0, 781, 0, 782, 0, 0, 783, 0, 784, 0, 0, 0, 785, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 787, 0, 788, 0, 0, 0, 789, 0, 0, - 0, 0, 790, 0, 0, 0, 0, 791, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, - 0, 0, 0, 0, 0, 794, 0, 0, 795, 0, 0, 0, 0, 796, 0, 0, 797, 0, 0, 0, 0, 798, 799, 0, 800, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 804, 0, 0, 805, 0, 0, 0, 806, 0, - 807, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 811, 0, 0, - 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 814, 0, 0, 0, - 0, 0, 0, 815, 0, 0, 0, 0, 816, 0, 817, 0, 0, 0, 818, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 0, - 0, 822, 0, 0, 0, 0, 0, 823, 0, 0, 0, 824, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 826, 0, 0, 827, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 830, 0, - 0, 0, 831, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 0, 835, 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, - 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 840, 0, 0, 0, 0, 0, - 841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 842, 0, 843, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 846, 0, - 0, 0, 847, 0, 0, 0, 848, 0, 0, 0, 0, 0, 849, 0, 0, 0, 850, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 853, 0, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 855, 0, 856, 0, 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 858, 0, 0, 0, 859, 0, 0, 860, 0, 861, 0, 0, 862, - 0, 863, 0, 0, 0, 864, 0, 0, 0, 865, 0, 0, 0, 866, 0, 0, 867, 0, 0, 0, 0, 868, 0, 869, 0, 0, 870, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 871, 0, 872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 873, 0, 874, 0, 0, 0, 0, 0, 875, 0, 876, 0, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 878, - 0, 0, 0, 879, 0, 0, 880, 0, 881, 0, 0, 882, 0, 883, 0, 0, 0, 884, 0, 0, 0, 885, 0, 0, 0, 886, 0, 0, 887, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0014[64] = { + 0x2101208881280A45ull, 0x100040280AA88881ull, 0x0308008400142002ull, 0xA10290A840454A50ull, + 0x0440A0842A020242ull, 0x08448205042A0205ull, 0x5450294452904824ull, 0x0A1146108420AA14ull, + 0x1280020880001014ull, 0x0480544805302A00ull, 0x910924AA45084950ull, 0x8849242448815408ull, + 0x4444445251110C84ull, 0x4140200280010000ull, 0x800000A455228AA5ull, 0x0540540844405290ull, + 0x0888522244481415ull, 0x01601524AAA02800ull, 0x080402A0892494B6ull, 0x40014110A8000080ull, + 0x2229024A08801220ull, 0x0242A80084402428ull, 0x8008440242800844ull, 0x02514890092284A8ull, + 0x8902514890251489ull, 0x24808C4252A94124ull, 0xA008220090282AA8ull, 0x0042202420081104ull, + 0x2481055280249081ull, 0x1500492101004220ull, 0x2484040108809204ull, 0x0092420244105401ull, + 0x4124924922054092ull, 0x291091054A224492ull, 0x2440401024488488ull, 0x2128010090404010ull, + 0x1212401000814880ull, 0x08021110122AA894ull, 0x8021110122812891ull, 0x0211101228128910ull, + 0x915544A081289108ull, 0x1409448840108880ull, 0x4094488401088809ull, 0x0944884010888091ull, + 0x0840082AA020A554ull, 0x1402088800208821ull, 0x8029091502914440ull, 0x2022921450102212ull, + 0x4A21401480200909ull, 0x55555548A200A500ull, 0x4002024090005514ull, 0x0040481200080902ull, + 0x220020008A024090ull, 0x0048480240048009ull, 0x2280914A01200090ull, 0x0161212080001084ull, + 0x2800002544810810ull, 0x2204450814000040ull, 0x5000824000008882ull, 0x0480000222222044ull, + 0x001110444088A001ull, 0x9488008A00104800ull, 0x0002800004A12222ull, 0x1222294880114140ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0014[64] = { + 1u, 16u, 29u, 38u, 56u, 69u, 83u, 102u, 119u, 128u, 142u, 162u, 179u, 197u, 204u, 221u, + 236u, 253u, 269u, 287u, 296u, 310u, 323u, 334u, 351u, 370u, 389u, 404u, 414u, 430u, 442u, 454u, + 467u, 485u, 504u, 517u, 527u, 538u, 554u, 569u, 583u, 602u, 615u, 629u, 643u, 659u, 670u, 686u, + 701u, 715u, 736u, 748u, 757u, 767u, 777u, 790u, 801u, 812u, 822u, 831u, 841u, 852u, 863u, 873u, }; void recomp_unit_0014_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0014_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0883C004u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0014[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0014[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0014[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0883C004; @@ -1060,7 +967,6 @@ LOCAL_DISPATCH: } L_0883C004: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883C01C; } @@ -1138,7 +1044,6 @@ L_0883C080: goto L_0883C090; L_0883C090: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1852), std::bit_cast(ctx.fpr[22])); goto L_0883C0E4; @@ -1208,9 +1113,7 @@ L_0883C120: } L_0883C130: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C150; } @@ -1218,7 +1121,6 @@ L_0883C130: } L_0883C140: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u + static_cast(-17)); if (branch_taken) { @@ -1255,7 +1157,6 @@ L_0883C170: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u + static_cast(-17)); if (branch_taken) { @@ -1265,7 +1166,6 @@ L_0883C170: } L_0883C190: aot_gpr_31 = (0x0883C198u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 72u, 0x0883053Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883C198u) goto L_0883C198; AOT_REGCACHE_SYNC_OUT(); return; L_0883C198: @@ -1275,7 +1175,6 @@ L_0883C198: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (17224u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1305,7 +1204,6 @@ L_0883C1F4: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.gpr[16] = (aot_gpr_4 & 255u); aot_gpr_31 = (0x0883C208u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 125u, 0x08830904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883C208u) goto L_0883C208; AOT_REGCACHE_SYNC_OUT(); return; L_0883C208: @@ -1361,7 +1259,6 @@ L_0883C28C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.gpr[16] = (aot_gpr_4 & 255u); aot_gpr_31 = (0x0883C2A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 125u, 0x08830904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883C2A0u) goto L_0883C2A0; AOT_REGCACHE_SYNC_OUT(); return; L_0883C2A0: @@ -1401,7 +1298,6 @@ L_0883C2E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883C344; } @@ -1415,7 +1311,6 @@ L_0883C314: L_0883C31C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883C344; } @@ -1429,7 +1324,6 @@ L_0883C328: L_0883C330: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883C344; } @@ -1458,9 +1352,7 @@ L_0883C35C: aot_gpr_4 = (aot_gpr_4 | 49152u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C3C8; } @@ -1469,9 +1361,7 @@ L_0883C35C: L_0883C37C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C398; } @@ -1489,9 +1379,7 @@ L_0883C398: L_0883C3A0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C428; } @@ -1505,7 +1393,6 @@ L_0883C3B4: AOT_REGCACHE_SYNC_OUT(); return; L_0883C3C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883C428; } @@ -1516,9 +1403,7 @@ L_0883C3C8: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C428; } @@ -1527,9 +1412,7 @@ L_0883C3C8: L_0883C3E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C400; } @@ -1547,9 +1430,7 @@ L_0883C400: L_0883C408: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C428; } @@ -1567,9 +1448,7 @@ L_0883C428: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C50C; } @@ -1581,7 +1460,6 @@ L_0883C448: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1601,9 +1479,7 @@ L_0883C470: L_0883C478: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C4C0; } @@ -1612,9 +1488,7 @@ L_0883C478: L_0883C48C: aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C4C0; } @@ -1631,7 +1505,6 @@ L_0883C4A0: AOT_REGCACHE_SYNC_OUT(); return; L_0883C4B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883C5C0; } @@ -1642,7 +1515,6 @@ L_0883C4C0: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(0u); if (branch_taken) { @@ -1652,9 +1524,7 @@ L_0883C4C0: } L_0883C4DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C5C0; } @@ -1671,7 +1541,6 @@ L_0883C4EC: AOT_REGCACHE_SYNC_OUT(); return; L_0883C504: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883C5C0; } @@ -1682,9 +1551,7 @@ L_0883C50C: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C5C0; } @@ -1696,7 +1563,6 @@ L_0883C528: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1716,9 +1582,7 @@ L_0883C550: L_0883C558: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C58C; } @@ -1746,7 +1610,6 @@ L_0883C58C: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(0u); if (branch_taken) { @@ -1773,7 +1636,6 @@ L_0883C5CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883C668; } @@ -1835,7 +1697,6 @@ L_0883C654: AOT_REGCACHE_SYNC_OUT(); return; L_0883C660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1844,7 +1705,6 @@ L_0883C660: L_0883C668: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1812))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1857,9 +1717,7 @@ L_0883C674: AOT_REGCACHE_SYNC_OUT(); return; L_0883C67C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_20)) && ctx.fpr[0] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C69C; } @@ -1867,9 +1725,7 @@ L_0883C67C: } L_0883C68C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[30]) || std::isnan(aot_fpr_20)) && ctx.fpr[30] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C6B0; } @@ -1883,7 +1739,6 @@ L_0883C69C: L_0883C6A4: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1899,9 +1754,7 @@ L_0883C6B8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1914,9 +1767,7 @@ L_0883C6D4: AOT_REGCACHE_SYNC_OUT(); return; L_0883C6DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1934,9 +1785,7 @@ L_0883C6F4: AOT_REGCACHE_SYNC_OUT(); return; L_0883C6FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1950,9 +1799,7 @@ L_0883C70C: L_0883C714: aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C740; } @@ -1970,7 +1817,6 @@ L_0883C730: AOT_REGCACHE_SYNC_OUT(); return; L_0883C738: { const bool branch_taken = ctx.gpr[16] == aot_gpr_2; - // nop if (branch_taken) { goto L_0883C7AC; } @@ -1980,9 +1826,7 @@ L_0883C740: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1536))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C794; } @@ -1991,9 +1835,7 @@ L_0883C740: L_0883C758: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1540))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C794; } @@ -2002,9 +1844,7 @@ L_0883C758: L_0883C76C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1544))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C794; } @@ -2013,9 +1853,7 @@ L_0883C76C: L_0883C780: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1548))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C7AC; } @@ -2051,7 +1889,6 @@ L_0883C7C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(1654)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883C99C; } @@ -2062,7 +1899,6 @@ L_0883C7D4: ctx.gpr[16] = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[16]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883C99C; } @@ -2070,7 +1906,6 @@ L_0883C7D4: } L_0883C7E8: aot_gpr_31 = (0x0883C7F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 125u, 0x08830904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883C7F0u) goto L_0883C7F0; AOT_REGCACHE_SYNC_OUT(); return; L_0883C7F0: @@ -2197,9 +2032,7 @@ L_0883C938: aot_gpr_4 = (16576u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883C99C; } @@ -2211,7 +2044,6 @@ L_0883C954: L_0883C958: aot_gpr_4 = (aot_gpr_4 & ctx.gpr[16]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883C99C; } @@ -2248,7 +2080,6 @@ L_0883C99C: AOT_REGCACHE_SYNC_OUT(); return; L_0883C9AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883CA1C; } @@ -2347,7 +2178,6 @@ L_0883CA7C: AOT_REGCACHE_SYNC_OUT(); return; L_0883CA88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883CB00; } @@ -2419,9 +2249,7 @@ L_0883CB10: ctx.gpr[18] = (ctx.gpr[30] + ctx.gpr[18]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883CC30; } @@ -2429,7 +2257,6 @@ L_0883CB10: } L_0883CB2C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0883CB44; } @@ -2445,7 +2272,6 @@ L_0883CB34: } L_0883CB3C: { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883CC30; } @@ -2513,7 +2339,6 @@ L_0883CBB8: L_0883CBC4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883CC00; } @@ -2570,7 +2395,6 @@ L_0883CC30: aot_gpr_17 = (aot_gpr_17 & 65535u); aot_gpr_4 = (static_cast(aot_gpr_17) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883CB10; } @@ -2580,7 +2404,6 @@ L_0883CC44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883CC7C; } @@ -2602,7 +2425,6 @@ L_0883CC64: AOT_REGCACHE_SYNC_OUT(); return; L_0883CC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883CCFC; } @@ -2611,7 +2433,6 @@ L_0883CC74: L_0883CC7C: aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883CCFC; } @@ -2625,7 +2446,6 @@ L_0883CC88: AOT_REGCACHE_SYNC_OUT(); return; L_0883CC94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883CCFC; } @@ -2698,7 +2518,17 @@ L_0883CCFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883CD44: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2706,12 +2536,10 @@ L_0883CD44: ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_17 = (aot_gpr_5 & 255u); aot_gpr_31 = (0x0883CD80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883CD80u) goto L_0883CD80; AOT_REGCACHE_SYNC_OUT(); return; L_0883CD80: { const bool branch_taken = aot_gpr_2 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0883CDB8; } @@ -2729,7 +2557,6 @@ L_0883CD88: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883CE04; } @@ -2782,7 +2609,6 @@ L_0883CDE4: } L_0883CDFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883CE6C; } @@ -2790,7 +2616,6 @@ L_0883CDFC: } L_0883CE04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D2F0; } @@ -2799,7 +2624,6 @@ L_0883CE04: L_0883CE0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883CE58; } @@ -2812,7 +2636,6 @@ L_0883CE18: AOT_REGCACHE_SYNC_OUT(); return; L_0883CE20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883CE58; } @@ -2827,7 +2650,6 @@ L_0883CE30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 130u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883CE6C; } @@ -2842,7 +2664,6 @@ L_0883CE48: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 131u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883CE6C; } @@ -2856,7 +2677,6 @@ L_0883CE58: AOT_REGCACHE_SYNC_OUT(); return; L_0883CE64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883CE8C; } @@ -2912,7 +2732,6 @@ L_0883CEA0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(848))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(848))); goto L_0883CF00; @@ -2921,7 +2740,6 @@ L_0883CEA0: L_0883CF00: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0883CF14; @@ -2957,7 +2775,6 @@ L_0883CF3C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883CF7C; } @@ -2965,9 +2782,7 @@ L_0883CF3C: } L_0883CF5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883CF7C; } @@ -2982,7 +2797,6 @@ L_0883CF6C: L_0883CF7C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_0883CF90; @@ -2993,9 +2807,7 @@ L_0883CF90: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D05C; } @@ -3017,9 +2829,7 @@ L_0883CFBC: aot_gpr_4 = (17174u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D050; } @@ -3039,9 +2849,7 @@ L_0883CFEC: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D050; } @@ -3095,9 +2903,7 @@ L_0883D050: } L_0883D05C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D098; } @@ -3105,9 +2911,7 @@ L_0883D05C: } L_0883D06C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D088; } @@ -3134,9 +2938,7 @@ L_0883D088: } L_0883D098: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D0B4; } @@ -3158,9 +2960,7 @@ L_0883D0B4: L_0883D0BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(848))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D0E0; } @@ -3198,7 +2998,6 @@ L_0883D0F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D214; } @@ -3206,7 +3005,6 @@ L_0883D0F0: } L_0883D130: aot_gpr_31 = (0x0883D138u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883D138u) goto L_0883D138; AOT_REGCACHE_SYNC_OUT(); return; L_0883D138: @@ -3225,7 +3023,6 @@ L_0883D138: } L_0883D158: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0883D20C; } @@ -3233,7 +3030,6 @@ L_0883D158: } L_0883D160: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D180; } @@ -3249,7 +3045,6 @@ L_0883D168: } L_0883D170: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0883D1E4; } @@ -3257,7 +3052,6 @@ L_0883D170: } L_0883D178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D20C; } @@ -3266,7 +3060,6 @@ L_0883D178: L_0883D180: aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0883D198; } @@ -3284,7 +3077,6 @@ L_0883D18C: L_0883D198: aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D1AC; } @@ -3296,7 +3088,6 @@ L_0883D1A4: goto L_0883D1AC; L_0883D1AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D20C; } @@ -3311,7 +3102,6 @@ L_0883D1B4: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(600), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D1DC; } @@ -3322,7 +3112,6 @@ L_0883D1D8: goto L_0883D1DC; L_0883D1DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D20C; } @@ -3337,7 +3126,6 @@ L_0883D1E4: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(600), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D20C; } @@ -3348,7 +3136,6 @@ L_0883D208: goto L_0883D20C; L_0883D20C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D218; } @@ -3365,7 +3152,6 @@ L_0883D218: L_0883D220: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(154))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883D24C; } @@ -3379,7 +3165,6 @@ L_0883D22C: L_0883D234: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883D24C; } @@ -3388,7 +3173,6 @@ L_0883D234: L_0883D240: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(860))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D2F0; } @@ -3397,7 +3181,6 @@ L_0883D240: L_0883D24C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D270; } @@ -3406,7 +3189,6 @@ L_0883D24C: L_0883D258: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4209))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883D270; } @@ -3415,7 +3197,6 @@ L_0883D258: L_0883D264: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(860))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D2F0; } @@ -3442,7 +3223,6 @@ L_0883D280: } L_0883D298: aot_gpr_31 = (0x0883D2A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883D2A0u) goto L_0883D2A0; AOT_REGCACHE_SYNC_OUT(); return; L_0883D2A0: @@ -3465,9 +3245,7 @@ L_0883D2A8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883D2F0; } @@ -3515,7 +3293,17 @@ L_0883D2F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0883D320: aot_gpr_29 = (aot_gpr_29 + static_cast(-3984)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3562,7 +3350,6 @@ L_0883D3A4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D418; } @@ -3585,7 +3372,6 @@ L_0883D3C4: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_14 = ctx.fpr[16] - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0883D3FC; @@ -3605,7 +3391,6 @@ L_0883D418: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883D488; } @@ -3682,7 +3467,6 @@ L_0883D4C4: AOT_REGCACHE_SYNC_OUT(); return; L_0883D4D0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883E430; } @@ -3692,7 +3476,6 @@ L_0883D4D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883D718; } @@ -3702,7 +3485,6 @@ L_0883D4E8: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D710; } @@ -3722,7 +3504,6 @@ L_0883D4F8: } L_0883D510: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0883D700; } @@ -3786,7 +3567,6 @@ L_0883D580: AOT_REGCACHE_SYNC_OUT(); return; L_0883D5B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D700; } @@ -3802,7 +3582,6 @@ L_0883D5B8: } L_0883D5C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883D700; } @@ -3866,7 +3645,6 @@ L_0883D630: AOT_REGCACHE_SYNC_OUT(); return; L_0883D660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883D700; } @@ -3932,7 +3710,6 @@ L_0883D700: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883D4F8; } @@ -3940,7 +3717,6 @@ L_0883D700: } L_0883D710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E430; } @@ -3954,7 +3730,6 @@ L_0883D718: L_0883D720: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883D918; } @@ -4195,7 +3970,6 @@ L_0883D924: aot_gpr_4 = (17076u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[16] = (0u | 1u); goto L_0883D93C; @@ -4209,7 +3983,6 @@ L_0883D93C: L_0883D944: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883D988; } @@ -4222,7 +3995,6 @@ L_0883D950: AOT_REGCACHE_SYNC_OUT(); return; L_0883D958: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883D988; } @@ -4236,7 +4008,6 @@ L_0883D960: L_0883D968: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883D988; } @@ -4250,7 +4021,6 @@ L_0883D974: L_0883D97C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883E430; } @@ -4261,7 +4031,6 @@ L_0883D988: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1896))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883D9AC; } @@ -4271,7 +4040,6 @@ L_0883D99C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1904))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883D9B0; } @@ -4284,7 +4052,6 @@ L_0883D9B0: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883E430; } @@ -4296,7 +4063,6 @@ L_0883D9C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1536))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[19] << 5u); if (branch_taken) { @@ -4313,7 +4079,6 @@ L_0883D9E0: L_0883D9EC: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883E008; } @@ -4333,7 +4098,6 @@ L_0883D9F8: } L_0883DA10: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0883DF34; } @@ -4341,7 +4105,6 @@ L_0883DA10: } L_0883DA18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883DA38; } @@ -4357,7 +4120,6 @@ L_0883DA20: } L_0883DA28: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883DDEC; } @@ -4365,7 +4127,6 @@ L_0883DA28: } L_0883DA30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883DF34; } @@ -4382,7 +4143,6 @@ L_0883DA38: AOT_REGCACHE_SYNC_OUT(); return; L_0883DA50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883DB78; } @@ -4554,9 +4314,7 @@ L_0883DC04: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883DC80; } @@ -4603,7 +4361,6 @@ L_0883DC58: AOT_REGCACHE_SYNC_OUT(); return; L_0883DC80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E008; } @@ -4620,7 +4377,6 @@ L_0883DC88: } L_0883DC94: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_0883DCA4; } @@ -4628,7 +4384,6 @@ L_0883DC94: } L_0883DC9C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0883DDE4; } @@ -4643,9 +4398,7 @@ L_0883DCAC: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883DD64; } @@ -4718,9 +4471,7 @@ L_0883DD64: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1552))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883DDE4; } @@ -4767,7 +4518,6 @@ L_0883DDBC: AOT_REGCACHE_SYNC_OUT(); return; L_0883DDE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E008; } @@ -4782,9 +4532,7 @@ L_0883DDF4: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883DEAC; } @@ -4857,9 +4605,7 @@ L_0883DEAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1552))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883DF2C; } @@ -4906,7 +4652,6 @@ L_0883DF04: AOT_REGCACHE_SYNC_OUT(); return; L_0883DF2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E008; } @@ -4921,9 +4666,7 @@ L_0883DF3C: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883DF6C; } @@ -4951,7 +4694,6 @@ L_0883DF6C: L_0883DF7C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1600))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883E008; } @@ -4963,9 +4705,7 @@ L_0883DF88: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1552))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E008; } @@ -5030,9 +4770,7 @@ L_0883E020: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1536))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E420; } @@ -5053,7 +4791,6 @@ L_0883E04C: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(5988), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -5131,7 +4868,6 @@ L_0883E0CC: L_0883E0D8: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883E420; } @@ -5218,7 +4954,6 @@ L_0883E17C: } L_0883E184: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0883E1F8; } @@ -5269,7 +5004,6 @@ L_0883E1E4: AOT_REGCACHE_SYNC_OUT(); return; L_0883E1F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E25C; } @@ -5360,9 +5094,7 @@ L_0883E2BC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E33C; } @@ -5410,9 +5142,7 @@ L_0883E33C: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E420; } @@ -5495,7 +5225,6 @@ L_0883E420: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883D9C0; } @@ -5509,7 +5238,6 @@ L_0883E430: AOT_REGCACHE_SYNC_OUT(); return; L_0883E43C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883E4BC; } @@ -5557,7 +5285,6 @@ L_0883E494: L_0883E4BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1276))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883EC0C; } @@ -5587,9 +5314,7 @@ L_0883E4F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1540))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E880; } @@ -5603,7 +5328,6 @@ L_0883E50C: L_0883E514: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883E880; } @@ -5621,7 +5345,6 @@ L_0883E520: } L_0883E530: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0883E880; } @@ -5629,7 +5352,6 @@ L_0883E530: } L_0883E538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E558; } @@ -5645,7 +5367,6 @@ L_0883E540: } L_0883E548: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883E778; } @@ -5653,7 +5374,6 @@ L_0883E548: } L_0883E550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E880; } @@ -5721,9 +5441,7 @@ L_0883E5C8: L_0883E5F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1556))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E660; } @@ -5772,7 +5490,6 @@ L_0883E644: AOT_REGCACHE_SYNC_OUT(); return; L_0883E660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E880; } @@ -5840,9 +5557,7 @@ L_0883E6D8: L_0883E700: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1556))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E770; } @@ -5891,7 +5606,6 @@ L_0883E754: AOT_REGCACHE_SYNC_OUT(); return; L_0883E770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E880; } @@ -5959,9 +5673,7 @@ L_0883E7E8: L_0883E810: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1556))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E880; } @@ -6012,9 +5724,7 @@ L_0883E880: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1548))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6028,7 +5738,6 @@ L_0883E898: L_0883E8A0: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6046,7 +5755,6 @@ L_0883E8AC: } L_0883E8BC: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6054,7 +5762,6 @@ L_0883E8BC: } L_0883E8C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883E8E4; } @@ -6070,7 +5777,6 @@ L_0883E8CC: } L_0883E8D4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883EB04; } @@ -6078,7 +5784,6 @@ L_0883E8D4: } L_0883E8DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6146,9 +5851,7 @@ L_0883E954: L_0883E97C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1564))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883E9EC; } @@ -6197,7 +5900,6 @@ L_0883E9D0: AOT_REGCACHE_SYNC_OUT(); return; L_0883E9EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6265,9 +5967,7 @@ L_0883EA64: L_0883EA8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1564))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883EAFC; } @@ -6316,7 +6016,6 @@ L_0883EAE0: AOT_REGCACHE_SYNC_OUT(); return; L_0883EAFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6384,9 +6083,7 @@ L_0883EB74: L_0883EB9C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1564))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883EC0C; } @@ -6435,12 +6132,10 @@ L_0883EBF0: AOT_REGCACHE_SYNC_OUT(); return; L_0883EC0C: aot_gpr_31 = (0x0883EC14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883EC14u) goto L_0883EC14; AOT_REGCACHE_SYNC_OUT(); return; L_0883EC14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883EE3C; } @@ -6448,12 +6143,10 @@ L_0883EC14: } L_0883EC1C: aot_gpr_31 = (0x0883EC24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883EC24u) goto L_0883EC24; AOT_REGCACHE_SYNC_OUT(); return; L_0883EC24: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883EE3C; } @@ -6462,7 +6155,6 @@ L_0883EC24: L_0883EC2C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883EE3C; } @@ -6477,9 +6169,7 @@ L_0883EC40: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883EE3C; } @@ -6491,9 +6181,7 @@ L_0883EC58: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883EE3C; } @@ -6525,7 +6213,6 @@ L_0883EC98: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883EE3C; } @@ -6608,7 +6295,6 @@ L_0883ED58: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883EE2C; } @@ -6671,7 +6357,6 @@ L_0883EE1C: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883ED90; } @@ -6681,7 +6366,6 @@ L_0883EE2C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883ECB0; } @@ -6696,7 +6380,6 @@ L_0883EE44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883F178; } @@ -6710,7 +6393,6 @@ L_0883EE54: AOT_REGCACHE_SYNC_OUT(); return; L_0883EE60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0883F178; } @@ -6721,9 +6403,7 @@ L_0883EE68: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883F178; } @@ -6768,7 +6448,6 @@ L_0883EEC4: AOT_REGCACHE_SYNC_OUT(); return; L_0883EED0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883F178; } @@ -6782,9 +6461,7 @@ L_0883EED8: aot_gpr_4 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883EF74; } @@ -6834,7 +6511,6 @@ L_0883EF54: { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1572), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883EF94; } @@ -6878,7 +6554,6 @@ L_0883EFB4: AOT_REGCACHE_SYNC_OUT(); return; L_0883EFC0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883F010; } @@ -6936,9 +6611,7 @@ L_0883F030: { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29668))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883F178; } @@ -6965,7 +6638,6 @@ L_0883F080: AOT_REGCACHE_SYNC_OUT(); return; L_0883F08C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883F0BC; } @@ -6992,9 +6664,7 @@ L_0883F0BC: L_0883F0C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29664))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883F168; } @@ -7004,7 +6674,6 @@ L_0883F0D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(644))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883F168; } @@ -7012,13 +6681,11 @@ L_0883F0D8: } L_0883F0E8: aot_gpr_31 = (0x0883F0F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 143u, 0x08830A78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883F0F0u) goto L_0883F0F0; AOT_REGCACHE_SYNC_OUT(); return; L_0883F0F0: aot_gpr_4 = (aot_gpr_2 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883F12C; } @@ -7039,7 +6706,6 @@ L_0883F0FC: AOT_REGCACHE_SYNC_OUT(); return; L_0883F124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F168; } @@ -7053,7 +6719,6 @@ L_0883F12C: AOT_REGCACHE_SYNC_OUT(); return; L_0883F138: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0883F168; } @@ -7076,7 +6741,6 @@ L_0883F168: aot_gpr_4 = (0u | 99u); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0883F058; } @@ -7116,7 +6780,6 @@ L_0883F19C: } L_0883F1A4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883FC40; } @@ -7124,7 +6787,6 @@ L_0883F1A4: } L_0883F1AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7188,7 +6850,6 @@ L_0883F1E4: } L_0883F1EC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0883FD90; } @@ -7196,7 +6857,6 @@ L_0883F1EC: } L_0883F1F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7206,7 +6866,6 @@ L_0883F1FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883F9A4; } @@ -7245,7 +6904,6 @@ L_0883F22C: } L_0883F234: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883F468; } @@ -7298,7 +6956,6 @@ L_0883F2A8: ctx.gpr[21] = (ctx.gpr[22] | 0u); ctx.gpr[20] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F468; } @@ -7350,7 +7007,6 @@ L_0883F330: ctx.gpr[22] = (0u | 0u); ctx.gpr[21] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F468; } @@ -7403,7 +7059,6 @@ L_0883F3BC: ctx.gpr[22] = (0u | 0u); ctx.gpr[21] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F468; } @@ -7456,7 +7111,6 @@ L_0883F448: ctx.gpr[21] = (ctx.gpr[22] | 0u); ctx.gpr[20] = (ctx.gpr[22] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F468; } @@ -7464,14 +7118,12 @@ L_0883F448: } L_0883F468: aot_gpr_31 = (0x0883F470u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 120u, 0x08830890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883F470u) goto L_0883F470; AOT_REGCACHE_SYNC_OUT(); return; L_0883F470: aot_gpr_4 = (aot_gpr_2 & 1023u); aot_gpr_5 = (aot_gpr_4 < static_cast(512) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0883F4B8; } @@ -7483,11 +7135,9 @@ L_0883F480: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(ctx.gpr[6]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[19] = (ctx.lo); ctx.gpr[19] = (ctx.gpr[19] & 255u); - // nop { const std::int32_t dividend = static_cast(ctx.gpr[30]); const std::int32_t divisor = static_cast(ctx.gpr[6]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[18] = (ctx.lo); ctx.gpr[18] = (ctx.gpr[18] & 255u); - // nop { const std::int32_t dividend = static_cast(ctx.gpr[23]); const std::int32_t divisor = static_cast(ctx.gpr[6]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[16] = (ctx.lo); { const bool branch_taken = 0u == 0u; @@ -7502,11 +7152,9 @@ L_0883F4B8: { const std::int32_t dividend = static_cast(ctx.gpr[22]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[19] = (ctx.lo); ctx.gpr[19] = (ctx.gpr[19] & 255u); - // nop { const std::int32_t dividend = static_cast(ctx.gpr[21]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[18] = (ctx.lo); ctx.gpr[18] = (ctx.gpr[18] & 255u); - // nop { const std::int32_t dividend = static_cast(ctx.gpr[20]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[16] = (ctx.lo); ctx.gpr[16] = (ctx.gpr[16] & 255u); @@ -7515,7 +7163,6 @@ L_0883F4E8: aot_gpr_4 = (aot_gpr_4 & 511u); aot_gpr_5 = (aot_gpr_4 < static_cast(100) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0883F5B0; } @@ -7600,7 +7247,6 @@ L_0883F588: L_0883F5B0: aot_gpr_5 = (aot_gpr_4 < static_cast(413) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0883F688; } @@ -7696,7 +7342,6 @@ L_0883F690: AOT_REGCACHE_SYNC_OUT(); return; L_0883F69C: aot_gpr_31 = (0x0883F6A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 120u, 0x08830890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883F6A4u) goto L_0883F6A4; AOT_REGCACHE_SYNC_OUT(); return; L_0883F6A4: @@ -7828,7 +7473,6 @@ L_0883F7D8: goto L_0883F7DC; L_0883F7DC: aot_gpr_31 = (0x0883F7E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 120u, 0x08830890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883F7E4u) goto L_0883F7E4; AOT_REGCACHE_SYNC_OUT(); return; L_0883F7E4: @@ -7892,7 +7536,6 @@ L_0883F86C: } L_0883F87C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0883F974; } @@ -7900,7 +7543,6 @@ L_0883F87C: } L_0883F884: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F8F8; } @@ -7909,7 +7551,6 @@ L_0883F884: L_0883F88C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0883F974; } @@ -7941,7 +7582,6 @@ L_0883F898: AOT_REGCACHE_SYNC_OUT(); return; L_0883F8F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F990; } @@ -7984,7 +7624,6 @@ L_0883F91C: AOT_REGCACHE_SYNC_OUT(); return; L_0883F96C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883F990; } @@ -8011,7 +7650,6 @@ L_0883F990: goto L_0883F9A4; L_0883F9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8021,7 +7659,6 @@ L_0883F9AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883FAF4; } @@ -8139,7 +7776,6 @@ L_0883FAC0: AOT_REGCACHE_SYNC_OUT(); return; L_0883FAF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8149,7 +7785,6 @@ L_0883FAFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883FC38; } @@ -8264,7 +7899,6 @@ L_0883FC04: AOT_REGCACHE_SYNC_OUT(); return; L_0883FC38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8274,7 +7908,6 @@ L_0883FC40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883FD88; } @@ -8392,7 +8025,6 @@ L_0883FD54: AOT_REGCACHE_SYNC_OUT(); return; L_0883FD88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8402,7 +8034,6 @@ L_0883FD90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883FF3C; } @@ -8438,13 +8069,11 @@ L_0883FDE0: AOT_REGCACHE_SYNC_OUT(); return; L_0883FDEC: aot_gpr_31 = (0x0883FDF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 120u, 0x08830890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883FDF4u) goto L_0883FDF4; AOT_REGCACHE_SYNC_OUT(); return; L_0883FDF4: aot_gpr_4 = (aot_gpr_2 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0883FF24; } @@ -8485,9 +8114,7 @@ L_0883FE38: L_0883FE44: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0883FF24; } @@ -8501,7 +8128,6 @@ L_0883FE58: L_0883FE60: aot_gpr_4 = (0u | 204u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0883FEC8; } @@ -8532,7 +8158,6 @@ L_0883FE6C: AOT_REGCACHE_SYNC_OUT(); return; L_0883FEC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883FF3C; } @@ -8563,7 +8188,6 @@ L_0883FEC8: AOT_REGCACHE_SYNC_OUT(); return; L_0883FF1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0883FF3C; } @@ -8580,7 +8204,6 @@ L_0883FF24: AOT_REGCACHE_SYNC_OUT(); return; L_0883FF3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8590,7 +8213,6 @@ L_0883FF44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 5u, 0x0884007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8625,13 +8247,11 @@ L_0883FF90: AOT_REGCACHE_SYNC_OUT(); return; L_0883FF9C: aot_gpr_31 = (0x0883FFA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 120u, 0x08830890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0883FFA4u) goto L_0883FFA4; AOT_REGCACHE_SYNC_OUT(); return; L_0883FFA4: aot_gpr_4 = (aot_gpr_2 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0015_entry, 15u, 4u, 0x08840064u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8672,7 +8292,6 @@ L_0883FFE8: L_0883FFF4: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop ctx.pc = 0x08840000u; AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0015.cpp b/profiles/vcs/generated/generated_unit_0015.cpp index e8ee665..7c44bda 100644 --- a/profiles/vcs/generated/generated_unit_0015.cpp +++ b/profiles/vcs/generated/generated_unit_0015.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0015[4095] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 5, - 0, 6, 0, 0, 7, 0, 8, 0, 0, 9, 0, 10, 0, 0, 11, 0, 12, 0, 0, 13, 0, 14, 0, 0, 15, 0, 16, 0, 0, 17, 0, 18, - 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 21, 0, 22, 0, 0, 23, 0, 24, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 27, - 28, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, - 0, 0, 0, 0, 0, 34, 35, 36, 0, 0, 0, 0, 37, 0, 38, 0, 0, 39, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 51, 0, 0, 0, 52, 0, 53, 0, 54, 0, 0, 55, 0, 56, 57, 0, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 60, 61, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 64, 0, 65, 0, 66, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, - 70, 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 78, 0, 0, - 79, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 83, 0, 84, 0, 85, 0, 0, 0, 86, 0, 87, 0, 0, 88, - 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 0, 92, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 96, 0, - 0, 0, 97, 0, 98, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 105, 0, 0, 106, 0, 107, 0, 0, 108, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 0, 115, 0, 116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 121, 0, 0, 122, 0, 123, - 0, 0, 124, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 134, 0, 135, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, - 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 142, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 147, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 152, 0, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, - 0, 156, 0, 0, 157, 0, 0, 158, 0, 0, 159, 0, 0, 160, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 164, - 0, 0, 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, 0, 169, 0, 0, 170, 0, 0, 171, 0, 0, 172, 0, 0, 173, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, 181, 0, 182, - 0, 0, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 185, 0, 0, 0, 186, 0, 187, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, - 0, 214, 0, 0, 215, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 222, 0, 0, 223, - 0, 0, 224, 0, 0, 225, 0, 0, 226, 0, 0, 227, 0, 0, 228, 0, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, - 0, 232, 0, 233, 0, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, 237, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 242, 0, 243, 0, 244, 0, 0, 245, 0, 246, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 249, 250, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 253, 0, 254, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, 0, 257, 0, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 265, 0, 266, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 273, 0, 274, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 277, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 291, 0, 292, 0, 293, 0, 294, 0, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 0, 303, 0, 304, - 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 312, 0, 313, 0, 314, 0, 0, 315, 0, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, - 319, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 323, 0, 0, 324, 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 328, - 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 333, 0, 0, 0, 0, 0, - 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 336, 0, 337, 0, 0, 338, 0, 339, 0, 0, 340, 0, 0, 341, 0, 342, - 0, 0, 343, 0, 344, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, - 351, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 358, 0, - 359, 0, 360, 0, 0, 361, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 371, 0, 0, 372, 0, 0, 373, 0, 0, 374, 0, 0, 375, - 0, 0, 376, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, - 384, 0, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, - 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, - 396, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 399, - 0, 400, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 405, 0, 0, 406, 0, 0, 407, 0, 0, 408, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 410, 0, 411, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 0, 415, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, 0, - 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 429, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, - 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 436, 0, 0, 437, 0, 438, 0, 439, 0, 0, 440, 0, 0, 441, 0, 442, 0, - 0, 443, 0, 0, 444, 0, 445, 0, 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 449, 0, 0, - 450, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 456, 0, 457, 0, 458, 0, 0, 0, 0, - 459, 460, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, - 0, 0, 0, 0, 0, 464, 0, 0, 465, 0, 466, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, - 472, 0, 473, 0, 474, 0, 0, 475, 0, 0, 476, 0, 0, 477, 0, 0, 478, 0, 479, 0, 0, 0, 480, 0, 0, 481, 0, 0, 482, 0, 0, 483, - 0, 0, 484, 0, 485, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 489, 0, 0, 490, 0, 0, 0, 0, 491, 0, - 0, 492, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 0, 495, 0, 0, 496, 0, 497, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 500, - 0, 501, 0, 0, 502, 0, 0, 0, 0, 503, 0, 0, 0, 0, 504, 0, 505, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, - 0, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, 0, - 515, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 0, 0, 518, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 0, 0, - 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, - 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, - 0, 532, 0, 533, 0, 0, 534, 0, 0, 535, 0, 536, 0, 0, 537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 540, 0, - 541, 0, 0, 542, 0, 0, 543, 0, 0, 0, 0, 544, 0, 545, 0, 546, 0, 0, 0, 547, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, - 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 557, - 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, 0, 565, 0, 0, 0, - 0, 0, 0, 566, 0, 0, 0, 567, 0, 0, 0, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 571, 0, 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 0, 0, - 578, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, 592, 0, 0, 593, 0, 0, 594, 0, 595, 0, 0, 596, 0, 0, 0, 0, 0, 0, 597, 0, 0, - 0, 598, 0, 0, 0, 0, 599, 0, 600, 0, 0, 601, 0, 0, 602, 0, 0, 0, 603, 0, 604, 0, 0, 605, 0, 0, 606, 0, 0, 0, 607, 0, - 608, 0, 0, 609, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, 0, 615, 0, 616, 0, - 617, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 620, 0, 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, - 0, 625, 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 629, 0, 630, 0, 0, 631, 0, 0, 632, - 0, 633, 0, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 638, 0, 0, 639, 0, 0, 640, 0, 0, 0, - 641, 0, 642, 0, 0, 643, 0, 0, 644, 0, 0, 0, 645, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 650, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, 654, 0, 655, 0, 0, 656, 0, 0, 0, 0, - 0, 657, 0, 658, 0, 0, 659, 0, 0, 0, 0, 660, 0, 661, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, - 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 668, 0, 0, 669, 0, 0, 670, 0, 671, 0, 0, 672, 0, 0, 0, 0, - 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 675, 0, 676, 0, 0, 677, 0, 0, 678, 0, 0, 0, 679, 0, 680, 0, 0, 681, 0, 682, 0, - 0, 683, 0, 0, 0, 684, 0, 685, 0, 0, 686, 0, 0, 0, 0, 687, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, - 690, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, 693, 0, 0, 694, 0, 0, 695, 0, 696, 0, 0, 697, 0, 0, 698, 0, 0, 0, 699, 0, 0, - 700, 0, 0, 701, 0, 0, 702, 0, 0, 703, 0, 704, 0, 705, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, - 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 712, 0, 0, 713, 0, 714, 0, 0, 0, 0, 0, 0, 715, - 0, 0, 0, 716, 0, 0, 717, 0, 0, 718, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 0, 721, 0, 722, 0, 723, 0, 0, 0, - 724, 0, 0, 725, 0, 0, 0, 726, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 730, 0, 0, 731, 0, 0, 732, 0, - 733, 0, 734, 0, 0, 0, 735, 0, 736, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 0, 740, 0, 0, 741, 0, - 742, 0, 743, 0, 0, 744, 0, 745, 0, 0, 746, 0, 0, 747, 0, 0, 0, 748, 0, 0, 749, 0, 0, 750, 0, 0, 751, 0, 0, 752, 0, 753, - 0, 0, 754, 0, 0, 755, 0, 0, 0, 756, 0, 0, 757, 0, 0, 758, 0, 0, 0, 759, 0, 0, 760, 0, 761, 0, 0, 762, 0, 0, 763, 0, - 0, 0, 764, 0, 0, 765, 0, 0, 766, 0, 0, 767, 0, 0, 768, 0, 769, 0, 0, 770, 0, 0, 771, 0, 0, 0, 772, 0, 0, 773, 0, 0, - 774, 0, 0, 0, 775, 0, 0, 776, 0, 777, 0, 778, 0, 0, 779, 0, 0, 0, 780, 0, 781, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 783, - 0, 0, 0, 784, 0, 0, 785, 0, 0, 786, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 789, 0, 0, 0, 0, 790, 0, 791, - 0, 792, 0, 0, 793, 0, 0, 0, 0, 0, 794, 0, 795, 0, 0, 796, 0, 0, 0, 0, 797, 0, 0, 0, 0, 798, 0, 799, 0, 0, 800, 0, - 0, 0, 0, 0, 0, 801, 0, 0, 0, 802, 0, 0, 0, 0, 0, 803, 0, 0, 0, 804, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 806, 0, 807, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 811, 0, 0, 0, 0, 0, 812, 0, - 0, 0, 813, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 816, 0, 0, 0, 817, 0, 0, 0, 0, 0, 818, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 820, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 822, 0, 0, 823, 0, 0, 0, 824, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 826, 0, 827, 0, 0, 828, 0, 0, 829, 0, 830, 0, 0, 831, 0, 0, 0, 0, 0, 0, - 832, 0, 0, 0, 833, 0, 0, 0, 0, 834, 0, 835, 0, 0, 836, 0, 0, 837, 0, 0, 0, 0, 838, 0, 839, 0, 840, 0, 0, 0, 841, 0, - 842, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 846, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, - 0, 0, 0, 0, 0, 0, 0, 849, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 852, 0, 853, 0, 0, 854, 0, 0, 0, 0, 0, 855, - 0, 856, 0, 0, 857, 0, 0, 0, 0, 858, 0, 0, 0, 859, 0, 860, 0, 0, 861, 0, 0, 0, 0, 0, 0, 862, 0, 0, 0, 863, 0, 0, - 0, 0, 0, 864, 0, 0, 0, 865, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, 0, 868, 0, 869, 0, 0, 870, - 0, 0, 0, 0, 0, 0, 0, 0, 871, 0, 0, 0, 872, 0, 0, 0, 0, 0, 873, 0, 0, 0, 874, 0, 0, 0, 875, 0, 0, 0, 0, 0, - 0, 0, 876, 0, 0, 0, 877, 0, 0, 0, 878, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, 0, 881, 0, - 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 883, 0, 0, 884, 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 887, - 0, 888, 0, 0, 889, 0, 0, 890, 0, 891, 0, 0, 892, 0, 0, 0, 0, 0, 0, 893, 0, 0, 0, 894, 0, 0, 0, 0, 895, 0, 896, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0015[64] = { + 0xA5294A5282800005ull, 0x2404048180A52904ull, 0x81092124404A50E0ull, 0x1115488C00534A88ull, + 0x9455048129050829ull, 0x2A00109449028904ull, 0x52000000A5210000ull, 0x52000000A5000000ull, + 0x00000014A5000000ull, 0x0014A00000000A40ull, 0xA00000000A400000ull, 0x0052800014800014ull, + 0xA401249249148029ull, 0xA241252009249248ull, 0x0140080004251240ull, 0x8280000005200000ull, + 0x0001480000005280ull, 0x800014800014A000ull, 0x4012492494829052ull, 0x340252A00924924Aull, + 0x0294000002A80000ull, 0x0004000002940000ull, 0x0000528000015480ull, 0x0000AA5000002940ull, + 0x000014A000002940ull, 0x0124A00AA55552A8ull, 0x82A9221120024950ull, 0xA4A5400204A00204ull, + 0x4888820902890494ull, 0x0014800000290425ull, 0x25200924924A4000ull, 0x2000000A50049249ull, + 0x0249249290000005ull, 0x4802940124924948ull, 0x5254A40148029401ull, 0x0A82490920814052ull, + 0x0282A52080008023ull, 0x4251009492452495ull, 0x440942128254A022ull, 0x088822012A001110ull, + 0x20044820A0020888ull, 0x4128A84942204A4Aull, 0x12842504A80A0021ull, 0x1044025400222088ull, + 0x0890414004111011ull, 0x44944942204A4A20ull, 0x08284A0952808909ull, 0x1250881292880112ull, + 0x0950140042825125ull, 0x094944011208284Aull, 0x008484A252892844ull, 0x82042A49224A4885ull, + 0x1521024881492080ull, 0x4920094549202489ull, 0x49489224A49224A5ull, 0x80944A9124494924ull, + 0x4A109412A1402248ull, 0x4110095000888220ull, 0x2241050010444044ull, 0x45424A1102525100ull, + 0x8254028040248809ull, 0x950008882204A212ull, 0x5001044404441100ull, 0x5088129288022410ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0015[64] = { + 1u, 19u, 34u, 51u, 70u, 89u, 104u, 113u, 120u, 126u, 133u, 138u, 147u, 165u, 183u, 193u, + 199u, 206u, 214u, 232u, 251u, 259u, 264u, 273u, 283u, 291u, 312u, 329u, 343u, 359u, 369u, 384u, + 396u, 409u, 426u, 443u, 459u, 472u, 492u, 509u, 521u, 532u, 551u, 566u, 578u, 590u, 608u, 625u, + 641u, 657u, 673u, 690u, 709u, 724u, 742u, 764u, 784u, 801u, 813u, 825u, 842u, 856u, 871u, 882u, }; void recomp_unit_0015_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0015_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08840000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0015[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0015[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0015[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08840000; @@ -1069,7 +976,6 @@ LOCAL_DISPATCH: } L_08840000: { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08840064; } @@ -1100,7 +1006,6 @@ L_08840008: AOT_REGCACHE_SYNC_OUT(); return; L_0884005C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884007C; } @@ -1123,7 +1028,6 @@ L_0884007C: L_08840084: aot_gpr_4 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -1137,7 +1041,6 @@ L_08840090: L_08840098: aot_gpr_4 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -1151,7 +1054,6 @@ L_088400A4: L_088400AC: aot_gpr_4 = (0u | 246u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -1165,7 +1067,6 @@ L_088400B8: L_088400C0: aot_gpr_4 = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -1179,7 +1080,6 @@ L_088400CC: L_088400D4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -1199,13 +1099,11 @@ L_088400E8: goto L_088400F4; L_088400F4: aot_gpr_31 = (0x088400FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 859u, 0x08833F6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088400FCu) goto L_088400FC; AOT_REGCACHE_SYNC_OUT(); return; L_088400FC: aot_gpr_4 = (static_cast(aot_gpr_2) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884012C; } @@ -1229,7 +1127,6 @@ L_08840120: goto L_0884012C; L_0884012C: aot_gpr_31 = (0x08840134u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 859u, 0x08833F6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08840134u) goto L_08840134; AOT_REGCACHE_SYNC_OUT(); return; L_08840134: @@ -1241,7 +1138,6 @@ L_08840134: goto L_08840140; L_08840140: aot_gpr_31 = (0x08840148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 859u, 0x08833F6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08840148u) goto L_08840148; AOT_REGCACHE_SYNC_OUT(); return; L_08840148: @@ -1253,7 +1149,6 @@ L_08840148: goto L_08840154; L_08840154: aot_gpr_31 = (0x0884015Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 860u, 0x08833F74u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884015Cu) goto L_0884015C; AOT_REGCACHE_SYNC_OUT(); return; L_0884015C: @@ -1295,7 +1190,6 @@ L_088401A8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[16] = (0u | 1u); goto L_08840218; @@ -1326,7 +1220,6 @@ L_088401F4: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (ctx.gpr[16] & 255u); if (branch_taken) { @@ -1345,7 +1238,6 @@ L_0884021C: aot_gpr_4 = (aot_gpr_4 & 64u); aot_gpr_4 = (aot_gpr_4 >> 6u); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_0884030C; } @@ -1359,7 +1251,6 @@ L_08840230: L_08840238: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0884030C; } @@ -1373,7 +1264,6 @@ L_08840244: L_0884024C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08840278; } @@ -1448,9 +1338,7 @@ L_088402E0: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884030C; } @@ -1471,7 +1359,6 @@ L_0884030C: AOT_REGCACHE_SYNC_OUT(); return; L_0884031C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08840344; } @@ -1479,13 +1366,11 @@ L_0884031C: } L_08840324: aot_gpr_31 = (0x0884032Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 120u, 0x08830890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884032Cu) goto L_0884032C; AOT_REGCACHE_SYNC_OUT(); return; L_0884032C: aot_gpr_4 = (aot_gpr_2 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08840340; } @@ -1505,12 +1390,10 @@ L_08840340: L_08840344: ctx.gpr[19] = (0u | 0u); aot_gpr_31 = (0x08840350u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08840350u) goto L_08840350; AOT_REGCACHE_SYNC_OUT(); return; L_08840350: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_0884038C; } @@ -1528,7 +1411,6 @@ L_08840358: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884038C; } @@ -1541,7 +1423,6 @@ L_0884038C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088403B8; } @@ -1551,7 +1432,6 @@ L_0884039C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088403B8; } @@ -1560,7 +1440,6 @@ L_0884039C: L_088403AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(627))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088403C8; } @@ -1568,7 +1447,6 @@ L_088403AC: } L_088403B8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088403C8; } @@ -1576,7 +1454,6 @@ L_088403B8: } L_088403C0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08841BC0; } @@ -1584,7 +1461,6 @@ L_088403C0: } L_088403C8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08841BC0; } @@ -1626,9 +1502,7 @@ L_08840414: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08840448; } @@ -1644,7 +1518,6 @@ L_0884042C: AOT_REGCACHE_SYNC_OUT(); return; L_08840440: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884046C; } @@ -1681,9 +1554,7 @@ L_08840480: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088404A8; } @@ -1702,9 +1573,7 @@ L_088404A8: aot_gpr_4 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088404C8; } @@ -1818,7 +1687,6 @@ L_08840590: L_0884059C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -1839,7 +1707,6 @@ L_088405B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088405F4; } @@ -1847,12 +1714,10 @@ L_088405B0: } L_088405E4: aot_gpr_31 = (0x088405ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088405ECu) goto L_088405EC; AOT_REGCACHE_SYNC_OUT(); return; L_088405EC: { const bool branch_taken = aot_gpr_17 == aot_gpr_2; - // nop if (branch_taken) { goto L_08840BC4; } @@ -1875,7 +1740,6 @@ L_088405F4: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -1886,9 +1750,7 @@ L_088405F4: L_08840640: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08840860; } @@ -1902,7 +1764,6 @@ L_08840654: AOT_REGCACHE_SYNC_OUT(); return; L_08840660: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08840768; } @@ -1916,7 +1777,6 @@ L_08840668: AOT_REGCACHE_SYNC_OUT(); return; L_08840674: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088406E4; } @@ -1958,7 +1818,6 @@ L_088406E4: AOT_REGCACHE_SYNC_OUT(); return; L_088406F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840860; } @@ -1994,7 +1853,6 @@ L_088406F8: AOT_REGCACHE_SYNC_OUT(); return; L_08840760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08840860; } @@ -2008,7 +1866,6 @@ L_08840768: AOT_REGCACHE_SYNC_OUT(); return; L_08840774: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088407E4; } @@ -2050,7 +1907,6 @@ L_088407E4: AOT_REGCACHE_SYNC_OUT(); return; L_088407F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840860; } @@ -2086,7 +1942,6 @@ L_088407F8: AOT_REGCACHE_SYNC_OUT(); return; L_08840860: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08840AFC; } @@ -2100,7 +1955,6 @@ L_08840868: AOT_REGCACHE_SYNC_OUT(); return; L_08840874: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088409BC; } @@ -2114,7 +1968,6 @@ L_0884087C: AOT_REGCACHE_SYNC_OUT(); return; L_08840888: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840918; } @@ -2164,7 +2017,6 @@ L_08840918: AOT_REGCACHE_SYNC_OUT(); return; L_08840924: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2208,7 +2060,6 @@ L_0884092C: AOT_REGCACHE_SYNC_OUT(); return; L_088409B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2222,7 +2073,6 @@ L_088409BC: AOT_REGCACHE_SYNC_OUT(); return; L_088409C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840A58; } @@ -2272,7 +2122,6 @@ L_08840A58: AOT_REGCACHE_SYNC_OUT(); return; L_08840A64: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2316,7 +2165,6 @@ L_08840A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08840AF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2330,7 +2178,6 @@ L_08840AFC: AOT_REGCACHE_SYNC_OUT(); return; L_08840B08: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840B5C; } @@ -2365,7 +2212,6 @@ L_08840B5C: AOT_REGCACHE_SYNC_OUT(); return; L_08840B68: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2394,7 +2240,6 @@ L_08840B70: AOT_REGCACHE_SYNC_OUT(); return; L_08840BBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2408,7 +2253,6 @@ L_08840BC4: AOT_REGCACHE_SYNC_OUT(); return; L_08840BD0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840C00; } @@ -2435,7 +2279,6 @@ L_08840C00: AOT_REGCACHE_SYNC_OUT(); return; L_08840C0C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840C3C; } @@ -2462,7 +2305,6 @@ L_08840C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08840C48: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840CE8; } @@ -2472,7 +2314,6 @@ L_08840C50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08840CE8; } @@ -2547,7 +2388,6 @@ L_08840CE8: AOT_REGCACHE_SYNC_OUT(); return; L_08840CF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840D94; } @@ -2557,7 +2397,6 @@ L_08840CFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08840D94; } @@ -2717,9 +2556,7 @@ L_08840E48: L_08840E54: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08841204; } @@ -2740,9 +2577,7 @@ L_08840E68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(604))); ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08840FE4; } @@ -2764,7 +2599,6 @@ L_08840EAC: AOT_REGCACHE_SYNC_OUT(); return; L_08840ED8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08840F54; } @@ -2809,7 +2643,6 @@ L_08840F54: AOT_REGCACHE_SYNC_OUT(); return; L_08840F60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -2848,7 +2681,6 @@ L_08840F68: AOT_REGCACHE_SYNC_OUT(); return; L_08840FDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -2858,9 +2690,7 @@ L_08840FE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(608))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884101C; } @@ -2878,7 +2708,6 @@ L_08840FFC: goto L_0884101C; L_0884101C: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_0884113C; } @@ -2892,7 +2721,6 @@ L_08841024: AOT_REGCACHE_SYNC_OUT(); return; L_08841030: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088410AC; } @@ -2937,7 +2765,6 @@ L_088410AC: AOT_REGCACHE_SYNC_OUT(); return; L_088410B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -2976,7 +2803,6 @@ L_088410C0: AOT_REGCACHE_SYNC_OUT(); return; L_08841134: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -2990,7 +2816,6 @@ L_0884113C: AOT_REGCACHE_SYNC_OUT(); return; L_08841148: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884119C; } @@ -3025,7 +2850,6 @@ L_0884119C: AOT_REGCACHE_SYNC_OUT(); return; L_088411A8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -3054,7 +2878,6 @@ L_088411B0: AOT_REGCACHE_SYNC_OUT(); return; L_088411FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -3068,7 +2891,6 @@ L_08841204: AOT_REGCACHE_SYNC_OUT(); return; L_08841210: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841230; } @@ -3091,7 +2913,6 @@ L_08841230: AOT_REGCACHE_SYNC_OUT(); return; L_0884123C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884125C; } @@ -3114,7 +2935,6 @@ L_0884125C: AOT_REGCACHE_SYNC_OUT(); return; L_08841268: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088412F8; } @@ -3189,7 +3009,6 @@ L_088412F8: AOT_REGCACHE_SYNC_OUT(); return; L_08841304: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841394; } @@ -3258,7 +3077,6 @@ L_0884136C: AOT_REGCACHE_SYNC_OUT(); return; L_08841394: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3293,9 +3111,7 @@ L_088413C4: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088413F4; } @@ -3303,7 +3119,6 @@ L_088413C4: } L_088413E8: aot_gpr_31 = (0x088413F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 73u, 0x08830548u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088413F0u) goto L_088413F0; AOT_REGCACHE_SYNC_OUT(); return; L_088413F0: @@ -3349,7 +3164,6 @@ L_08841454: AOT_REGCACHE_SYNC_OUT(); return; L_0884145C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088414D0; } @@ -3385,7 +3199,6 @@ L_08841464: AOT_REGCACHE_SYNC_OUT(); return; L_088414C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088415C8; } @@ -3399,7 +3212,6 @@ L_088414D0: AOT_REGCACHE_SYNC_OUT(); return; L_088414DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841550; } @@ -3435,7 +3247,6 @@ L_088414E4: AOT_REGCACHE_SYNC_OUT(); return; L_08841548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088415C8; } @@ -3449,7 +3260,6 @@ L_08841550: AOT_REGCACHE_SYNC_OUT(); return; L_0884155C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088415C8; } @@ -3502,9 +3312,7 @@ L_088415C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(604))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08841798; } @@ -3531,7 +3339,6 @@ L_08841630: AOT_REGCACHE_SYNC_OUT(); return; L_08841638: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088416A4; } @@ -3565,7 +3372,6 @@ L_08841640: AOT_REGCACHE_SYNC_OUT(); return; L_0884169C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3579,7 +3385,6 @@ L_088416A4: AOT_REGCACHE_SYNC_OUT(); return; L_088416B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841720; } @@ -3614,7 +3419,6 @@ L_088416B8: AOT_REGCACHE_SYNC_OUT(); return; L_08841718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3628,7 +3432,6 @@ L_08841720: AOT_REGCACHE_SYNC_OUT(); return; L_0884172C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3662,7 +3465,6 @@ L_08841734: AOT_REGCACHE_SYNC_OUT(); return; L_08841790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3689,7 +3491,6 @@ L_088417AC: AOT_REGCACHE_SYNC_OUT(); return; L_088417B4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841820; } @@ -3723,7 +3524,6 @@ L_088417BC: AOT_REGCACHE_SYNC_OUT(); return; L_08841818: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3737,7 +3537,6 @@ L_08841820: AOT_REGCACHE_SYNC_OUT(); return; L_0884182C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884189C; } @@ -3772,7 +3571,6 @@ L_08841834: AOT_REGCACHE_SYNC_OUT(); return; L_08841894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3786,7 +3584,6 @@ L_0884189C: AOT_REGCACHE_SYNC_OUT(); return; L_088418A8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884190C; } @@ -3820,12 +3617,10 @@ L_088418B0: AOT_REGCACHE_SYNC_OUT(); return; L_0884190C: aot_gpr_31 = (0x08841914u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08841914u) goto L_08841914; AOT_REGCACHE_SYNC_OUT(); return; L_08841914: { const bool branch_taken = aot_gpr_17 != aot_gpr_2; - // nop if (branch_taken) { goto L_08841BB8; } @@ -3833,7 +3628,6 @@ L_08841914: } L_0884191C: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08841BB8; } @@ -3860,7 +3654,6 @@ L_08841938: AOT_REGCACHE_SYNC_OUT(); return; L_08841940: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841A74; } @@ -3868,7 +3661,6 @@ L_08841940: } L_08841948: aot_gpr_31 = (0x08841950u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08841950u) goto L_08841950; AOT_REGCACHE_SYNC_OUT(); return; L_08841950: @@ -3915,9 +3707,7 @@ L_0884198C: aot_gpr_4 = (aot_gpr_4 | 23592u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08841A18; } @@ -3963,7 +3753,6 @@ L_088419E0: AOT_REGCACHE_SYNC_OUT(); return; L_08841A10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08841A74; } @@ -4062,7 +3851,6 @@ L_08841AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08841ADC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841BB8; } @@ -4072,9 +3860,7 @@ L_08841AE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(608))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08841B5C; } @@ -4113,7 +3899,6 @@ L_08841B24: AOT_REGCACHE_SYNC_OUT(); return; L_08841B54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08841BB8; } @@ -4153,7 +3938,6 @@ L_08841B84: AOT_REGCACHE_SYNC_OUT(); return; L_08841BB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088422A8; } @@ -4167,7 +3951,6 @@ L_08841BC0: L_08841BC8: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -4181,7 +3964,6 @@ L_08841BD4: L_08841BDC: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088422A8; } @@ -4190,7 +3972,6 @@ L_08841BDC: L_08841BE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(627))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088422A8; } @@ -4198,7 +3979,6 @@ L_08841BE8: } L_08841BF4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088422A8; } @@ -4274,9 +4054,7 @@ L_08841C8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(608))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08841CBC; } @@ -4286,9 +4064,7 @@ L_08841CA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(604))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842230; } @@ -4340,9 +4116,7 @@ L_08841D08: L_08841D14: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088421B0; } @@ -4352,9 +4126,7 @@ L_08841D28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(604))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08841F78; } @@ -4368,7 +4140,6 @@ L_08841D40: AOT_REGCACHE_SYNC_OUT(); return; L_08841D4C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841DBC; } @@ -4410,7 +4181,6 @@ L_08841DBC: AOT_REGCACHE_SYNC_OUT(); return; L_08841DC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841E38; } @@ -4452,7 +4222,6 @@ L_08841E38: AOT_REGCACHE_SYNC_OUT(); return; L_08841E44: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841ED4; } @@ -4527,7 +4296,6 @@ L_08841ED4: AOT_REGCACHE_SYNC_OUT(); return; L_08841EE0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842228; } @@ -4596,7 +4364,6 @@ L_08841F48: AOT_REGCACHE_SYNC_OUT(); return; L_08841F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842228; } @@ -4610,7 +4377,6 @@ L_08841F78: AOT_REGCACHE_SYNC_OUT(); return; L_08841F84: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08841FF4; } @@ -4652,7 +4418,6 @@ L_08841FF4: AOT_REGCACHE_SYNC_OUT(); return; L_08842000: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842070; } @@ -4694,7 +4459,6 @@ L_08842070: AOT_REGCACHE_SYNC_OUT(); return; L_0884207C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884210C; } @@ -4769,7 +4533,6 @@ L_0884210C: AOT_REGCACHE_SYNC_OUT(); return; L_08842118: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842228; } @@ -4838,7 +4601,6 @@ L_08842180: AOT_REGCACHE_SYNC_OUT(); return; L_088421A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842228; } @@ -4852,7 +4614,6 @@ L_088421B0: AOT_REGCACHE_SYNC_OUT(); return; L_088421BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088421EC; } @@ -4879,7 +4640,6 @@ L_088421EC: AOT_REGCACHE_SYNC_OUT(); return; L_088421F8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842228; } @@ -4900,7 +4660,6 @@ L_08842200: AOT_REGCACHE_SYNC_OUT(); return; L_08842228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088422A8; } @@ -4914,7 +4673,6 @@ L_08842230: AOT_REGCACHE_SYNC_OUT(); return; L_0884223C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0884226C; } @@ -4941,7 +4699,6 @@ L_0884226C: AOT_REGCACHE_SYNC_OUT(); return; L_08842278: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088422A8; } @@ -4968,7 +4725,6 @@ L_088422A8: AOT_REGCACHE_SYNC_OUT(); return; L_088422B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088422D0; } @@ -4982,7 +4738,6 @@ L_088422BC: AOT_REGCACHE_SYNC_OUT(); return; L_088422C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842304; } @@ -4996,7 +4751,6 @@ L_088422D0: L_088422D8: aot_gpr_4 = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088422F8; } @@ -5010,7 +4764,6 @@ L_088422E4: AOT_REGCACHE_SYNC_OUT(); return; L_088422F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842304; } @@ -5030,7 +4783,6 @@ L_08842304: AOT_REGCACHE_SYNC_OUT(); return; L_08842310: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08842500; } @@ -5042,9 +4794,7 @@ L_08842318: aot_gpr_4 = (aot_gpr_4 | 26215u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842500; } @@ -5060,9 +4810,7 @@ L_08842340: aot_gpr_4 = (16880u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842500; } @@ -5126,7 +4874,6 @@ L_088423C4: AOT_REGCACHE_SYNC_OUT(); return; L_088423DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088423EC; } @@ -5139,9 +4886,7 @@ L_088423E4: L_088423EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(3052))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842404; } @@ -5186,7 +4931,6 @@ L_0884243C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_14; aot_gpr_31 = (0x0884247Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 75u, 0x088305A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884247Cu) goto L_0884247C; AOT_REGCACHE_SYNC_OUT(); return; L_0884247C: @@ -5201,7 +4945,6 @@ L_0884247C: L_08842494: aot_gpr_4 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088424B4; } @@ -5215,7 +4958,6 @@ L_088424A0: L_088424A8: aot_gpr_4 = (0u + static_cast(-972)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088424BC; } @@ -5234,9 +4976,7 @@ L_088424C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842500; } @@ -5276,7 +5016,6 @@ L_08842510: L_0884251C: aot_gpr_4 = (0u | 246u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0884259C; } @@ -5285,7 +5024,6 @@ L_0884251C: L_08842528: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884259C; } @@ -5385,7 +5123,6 @@ L_088425E4: L_088425F8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0884263C; } @@ -5411,7 +5148,6 @@ L_08842614: AOT_REGCACHE_SYNC_OUT(); return; L_08842634: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842648; } @@ -5430,7 +5166,6 @@ L_08842648: AOT_REGCACHE_SYNC_OUT(); return; L_08842650: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842918; } @@ -5439,7 +5174,6 @@ L_08842650: L_08842658: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884287C; } @@ -5449,9 +5183,7 @@ L_08842664: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1548))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884287C; } @@ -5465,7 +5197,6 @@ L_0884267C: L_08842684: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0884287C; } @@ -5484,7 +5215,6 @@ L_088426A4: aot_gpr_4 = (aot_gpr_4 + static_cast(3)); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884276C; } @@ -5559,7 +5289,6 @@ L_08842730: AOT_REGCACHE_SYNC_OUT(); return; L_08842764: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842918; } @@ -5669,7 +5398,6 @@ L_08842844: AOT_REGCACHE_SYNC_OUT(); return; L_08842874: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842918; } @@ -5696,7 +5424,6 @@ L_08842894: L_088428AC: aot_gpr_4 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088428C8; } @@ -5748,7 +5475,6 @@ L_08842918: AOT_REGCACHE_SYNC_OUT(); return; L_08842924: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08842980; } @@ -5787,7 +5513,6 @@ L_08842964: AOT_REGCACHE_SYNC_OUT(); return; L_08842978: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842998; } @@ -5852,7 +5577,6 @@ L_088429E0: AOT_REGCACHE_SYNC_OUT(); return; L_088429F8: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08842A4C; } @@ -5883,7 +5607,6 @@ L_08842A14: AOT_REGCACHE_SYNC_OUT(); return; L_08842A44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842A6C; } @@ -5907,7 +5630,6 @@ L_08842A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08842A74: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842D38; } @@ -5916,7 +5638,6 @@ L_08842A74: L_08842A7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08842CA0; } @@ -5926,9 +5647,7 @@ L_08842A88: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1540))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842CA0; } @@ -5942,7 +5661,6 @@ L_08842AA0: L_08842AA8: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08842CA0; } @@ -5961,7 +5679,6 @@ L_08842AC8: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08842B90; } @@ -6036,7 +5753,6 @@ L_08842B54: AOT_REGCACHE_SYNC_OUT(); return; L_08842B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842D38; } @@ -6146,7 +5862,6 @@ L_08842C68: AOT_REGCACHE_SYNC_OUT(); return; L_08842C98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842D38; } @@ -6173,7 +5888,6 @@ L_08842CB8: L_08842CD0: aot_gpr_4 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08842CEC; } @@ -6224,7 +5938,6 @@ L_08842D38: AOT_REGCACHE_SYNC_OUT(); return; L_08842D44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08842DA0; } @@ -6263,7 +5976,6 @@ L_08842D84: AOT_REGCACHE_SYNC_OUT(); return; L_08842D98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842DB8; } @@ -6296,7 +6008,6 @@ L_08842DC8: L_08842DD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1276))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843008; } @@ -6337,7 +6048,6 @@ L_08842E0C: L_08842E20: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08842E64; } @@ -6363,7 +6073,6 @@ L_08842E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08842E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842E70; } @@ -6382,7 +6091,6 @@ L_08842E70: AOT_REGCACHE_SYNC_OUT(); return; L_08842E78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08842F70; } @@ -6391,7 +6099,6 @@ L_08842E78: L_08842E80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08842ED4; } @@ -6401,9 +6108,7 @@ L_08842E8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1548))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08842ED4; } @@ -6417,7 +6122,6 @@ L_08842EA4: L_08842EAC: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08842ED4; } @@ -6433,7 +6137,6 @@ L_08842EB8: AOT_REGCACHE_SYNC_OUT(); return; L_08842ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842F70; } @@ -6460,7 +6163,6 @@ L_08842EEC: L_08842F04: aot_gpr_4 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08842F20; } @@ -6512,7 +6214,6 @@ L_08842F70: AOT_REGCACHE_SYNC_OUT(); return; L_08842F7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08842FD8; } @@ -6551,7 +6252,6 @@ L_08842FBC: AOT_REGCACHE_SYNC_OUT(); return; L_08842FD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08842FF0; } @@ -6584,7 +6284,6 @@ L_08843000: L_08843008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843264; } @@ -6625,7 +6324,6 @@ L_08843044: AOT_REGCACHE_SYNC_OUT(); return; L_0884305C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088430B0; } @@ -6656,7 +6354,6 @@ L_08843078: AOT_REGCACHE_SYNC_OUT(); return; L_088430A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088430D0; } @@ -6680,7 +6377,6 @@ L_088430D0: AOT_REGCACHE_SYNC_OUT(); return; L_088430D8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088431CC; } @@ -6689,7 +6385,6 @@ L_088430D8: L_088430E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843134; } @@ -6699,9 +6394,7 @@ L_088430EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1540))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08843134; } @@ -6715,7 +6408,6 @@ L_08843104: L_0884310C: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843134; } @@ -6731,7 +6423,6 @@ L_08843118: AOT_REGCACHE_SYNC_OUT(); return; L_0884312C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088431CC; } @@ -6758,7 +6449,6 @@ L_0884314C: L_08843164: aot_gpr_4 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843180; } @@ -6809,7 +6499,6 @@ L_088431CC: AOT_REGCACHE_SYNC_OUT(); return; L_088431D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08843234; } @@ -6848,7 +6537,6 @@ L_08843218: AOT_REGCACHE_SYNC_OUT(); return; L_0884322C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884324C; } @@ -6886,7 +6574,6 @@ L_08843264: AOT_REGCACHE_SYNC_OUT(); return; L_08843270: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088434F0; } @@ -6927,7 +6614,6 @@ L_088432A8: L_088432BC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843308; } @@ -6955,7 +6641,6 @@ L_088432DC: AOT_REGCACHE_SYNC_OUT(); return; L_08843300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884331C; } @@ -6996,7 +6681,6 @@ L_08843344: L_0884334C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1344))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843434; } @@ -7052,9 +6736,7 @@ L_088433AC: L_088433B4: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_12)) && ctx.fpr[0] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088433E4; } @@ -7087,9 +6769,7 @@ L_088433FC: aot_gpr_4 = (aot_gpr_4 | 62915u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08843434; } @@ -7112,7 +6792,6 @@ L_08843434: L_08843440: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 4u, 0x08844028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7121,7 +6800,6 @@ L_08843440: L_0884344C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 4u, 0x08844028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7192,7 +6870,6 @@ L_088434E0: AOT_REGCACHE_SYNC_OUT(); return; L_088434E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 4u, 0x08844028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7202,7 +6879,6 @@ L_088434F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08843608; } @@ -7328,7 +7004,6 @@ L_088435F8: AOT_REGCACHE_SYNC_OUT(); return; L_08843600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 4u, 0x08844028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7342,7 +7017,6 @@ L_08843608: AOT_REGCACHE_SYNC_OUT(); return; L_08843614: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088437AC; } @@ -7351,7 +7025,6 @@ L_08843614: L_0884361C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884367C; } @@ -7402,7 +7075,6 @@ L_08843674: L_0884367C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1344))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088436E0; } @@ -7454,7 +7126,6 @@ L_088436D8: L_088436E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843740; } @@ -7505,7 +7176,6 @@ L_08843738: L_08843740: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1316))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 4u, 0x08844028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7556,7 +7226,6 @@ L_0884379C: AOT_REGCACHE_SYNC_OUT(); return; L_088437A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 4u, 0x08844028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7592,9 +7261,7 @@ L_088437DC: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(600))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884380C; } @@ -7615,7 +7282,6 @@ L_0884380C: L_08843818: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843860; } @@ -7642,7 +7308,6 @@ L_08843834: AOT_REGCACHE_SYNC_OUT(); return; L_08843858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843874; } @@ -7663,7 +7328,6 @@ L_08843874: AOT_REGCACHE_SYNC_OUT(); return; L_0884387C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08843B44; } @@ -7672,7 +7336,6 @@ L_0884387C: L_08843884: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843AA8; } @@ -7682,9 +7345,7 @@ L_08843890: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1544))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08843AA8; } @@ -7698,7 +7359,6 @@ L_088438A8: L_088438B0: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843AA8; } @@ -7717,7 +7377,6 @@ L_088438D0: aot_gpr_4 = (aot_gpr_4 + static_cast(2)); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843998; } @@ -7792,7 +7451,6 @@ L_0884395C: AOT_REGCACHE_SYNC_OUT(); return; L_08843990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843B44; } @@ -7902,7 +7560,6 @@ L_08843A70: AOT_REGCACHE_SYNC_OUT(); return; L_08843AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843B44; } @@ -7929,7 +7586,6 @@ L_08843AC0: L_08843AD8: aot_gpr_4 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843AF4; } @@ -7981,7 +7637,6 @@ L_08843B44: AOT_REGCACHE_SYNC_OUT(); return; L_08843B50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08843BAC; } @@ -8020,7 +7675,6 @@ L_08843B90: AOT_REGCACHE_SYNC_OUT(); return; L_08843BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843BC4; } @@ -8080,9 +7734,7 @@ L_08843C0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(600))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08843C3C; } @@ -8103,7 +7755,6 @@ L_08843C3C: L_08843C48: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843CA4; } @@ -8135,7 +7786,6 @@ L_08843C78: AOT_REGCACHE_SYNC_OUT(); return; L_08843C9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843CC8; } @@ -8160,7 +7810,6 @@ L_08843CC8: AOT_REGCACHE_SYNC_OUT(); return; L_08843CD0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08843F90; } @@ -8169,7 +7818,6 @@ L_08843CD0: L_08843CD8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1782))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843EF8; } @@ -8179,9 +7827,7 @@ L_08843CE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1536))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08843EF8; } @@ -8195,7 +7841,6 @@ L_08843CFC: L_08843D04: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843EF8; } @@ -8213,7 +7858,6 @@ L_08843D24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08843DE8; } @@ -8288,7 +7932,6 @@ L_08843DAC: AOT_REGCACHE_SYNC_OUT(); return; L_08843DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843F90; } @@ -8398,7 +8041,6 @@ L_08843EC0: AOT_REGCACHE_SYNC_OUT(); return; L_08843EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08843F90; } @@ -8425,7 +8067,6 @@ L_08843F10: L_08843F28: aot_gpr_4 = (0u + static_cast(-994)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08843F44; } @@ -8476,7 +8117,6 @@ L_08843F90: AOT_REGCACHE_SYNC_OUT(); return; L_08843F9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08843FF8; } @@ -8515,7 +8155,6 @@ L_08843FDC: AOT_REGCACHE_SYNC_OUT(); return; L_08843FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0016_entry, 16u, 2u, 0x08844010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0016.cpp b/profiles/vcs/generated/generated_unit_0016.cpp index 28243ce..ba4ecd2 100644 --- a/profiles/vcs/generated/generated_unit_0016.cpp +++ b/profiles/vcs/generated/generated_unit_0016.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0016[4094] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 6, 0, 7, 0, 0, 8, 0, 9, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 0, 0, 0, 18, 0, 19, 0, 0, 20, 0, 21, 0, - 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 26, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 33, 0, 34, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 0, 0, 40, 0, 0, 0, - 41, 0, 42, 0, 0, 43, 0, 44, 0, 0, 45, 0, 0, 46, 0, 47, 0, 0, 48, 0, 0, 0, 49, 0, 50, 51, 0, 52, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 64, 65, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 68, 0, 69, 0, 0, 0, 0, 70, 0, 0, 71, 0, 0, 0, 72, 0, 0, - 0, 73, 0, 0, 0, 74, 0, 0, 75, 0, 0, 76, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 0, 81, 0, 0, - 0, 82, 0, 0, 83, 0, 0, 0, 84, 0, 0, 85, 0, 86, 0, 0, 0, 87, 0, 0, 88, 0, 89, 0, 90, 0, 91, 92, 0, 93, 0, 0, - 0, 94, 0, 0, 95, 0, 96, 0, 97, 0, 98, 99, 0, 100, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 104, 0, 105, 106, 0, 107, 0, 0, - 0, 108, 0, 0, 109, 0, 110, 0, 111, 0, 112, 113, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 0, 121, - 0, 122, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 0, 0, 0, - 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, - 0, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 146, 0, 147, 0, 0, 148, 0, 149, 0, 150, 0, 0, 151, 0, 0, 0, 152, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 155, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 163, 0, 164, 0, 0, 0, - 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, - 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 176, 0, 177, 0, 0, 0, 0, 0, - 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, - 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, - 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 0, 210, 0, 211, 0, 212, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, 0, 217, - 0, 218, 0, 219, 0, 220, 0, 0, 221, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 224, 0, 225, 0, 226, 227, 0, - 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 239, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 242, 0, 243, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 247, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 252, 253, 0, 0, 0, 0, 0, 0, 254, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 257, 0, 258, 0, 259, 0, 0, - 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 0, 264, 0, 265, 0, - 266, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 273, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, - 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 288, 0, 289, 0, 290, 0, 0, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 0, - 0, 296, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, - 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, 306, 307, 0, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 313, 0, 0, 314, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, - 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 321, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 327, 0, 0, 0, 328, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 333, 0, 334, 0, 335, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, - 341, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, - 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 360, 0, 0, 0, 361, 362, 0, 363, 364, 0, 365, 0, 0, 0, - 0, 0, 366, 367, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 371, 0, 372, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 375, 0, 0, 376, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, - 383, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 388, 0, 0, 389, 0, 0, 390, 0, - 0, 391, 0, 392, 0, 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, 399, 0, 0, 400, 0, 401, 0, - 402, 0, 403, 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 406, 0, 407, 0, 408, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 0, 0, 412, 0, - 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 416, 0, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, - 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 445, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 449, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, - 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 459, 0, 0, - 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 469, 0, 0, 0, - 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 475, - 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, - 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, - 486, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, - 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 506, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 516, 0, 517, - 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 526, - 0, 0, 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 532, - 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, - 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, - 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, - 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 552, 0, 553, 0, 0, 0, 0, 0, 554, - 0, 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, - 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 564, - 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 572, 0, - 573, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 578, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, 0, 582, 583, - 0, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 598, 0, 599, 0, 600, - 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 605, 0, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, 0, - 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 612, 0, 0, 613, 0, 614, 0, 615, 0, 0, - 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, - 622, 0, 0, 0, 0, 623, 0, 624, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 627, - 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 0, - 0, 635, 0, 0, 636, 0, 0, 0, 0, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 639, 640, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, - 643, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, - 0, 0, 0, 650, 0, 651, 0, 0, 652, 0, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, 657, 0, - 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 664, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, - 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, 0, 0, 673, 0, 0, 0, 0, - 0, 0, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0016[64] = { + 0x5285410124A94A89ull, 0x2941090510082020ull, 0x0B44A4A512804410ull, 0x8001010220001000ull, + 0x2242C04018908500ull, 0x2D52291222488922ull, 0x9548AD522D522D52ull, 0x0AAAA00040055522ull, + 0x2254A2088000A808ull, 0x0000110100022000ull, 0x1600088000040010ull, 0x2020000100008408ull, + 0x0540000080410040ull, 0x4020200000400042ull, 0x4081400000804100ull, 0x0080002050040000ull, + 0x2010102802000080ull, 0x8000800040004000ull, 0x6A80112A954AA402ull, 0x0100808000041020ull, + 0x1000928000010104ull, 0x0004002000010140ull, 0x2A10040040D10222ull, 0x0000020151088002ull, + 0x4880008000000280ull, 0x02AAA49008000201ull, 0x2040040A05545408ull, 0x1124C0A040010200ull, + 0x0000000000049200ull, 0x0241144812080000ull, 0x0108012A10402512ull, 0x2000108940000010ull, + 0x0000040001508024ull, 0x16C4500040920800ull, 0x00000000000A001Cull, 0x480502A4001000D0ull, + 0x5285222A49100A05ull, 0x08A004404152A825ull, 0x14022804401100A0ull, 0x402200A008A00440ull, + 0x0088028028022804ull, 0x2804400440140114ull, 0x1140220022001402ull, 0x011005008A011001ull, + 0x2800220140114022ull, 0x0140228002201402ull, 0x0008080500450022ull, 0x0100002AA0A11104ull, + 0x8408421089001001ull, 0x8200040810204210ull, 0x4014012044080000ull, 0x0480000C82A00008ull, + 0x8800000004004028ull, 0xC8A5102944055480ull, 0x0000821001282204ull, 0xA900014001400000ull, + 0x2A50005042150822ull, 0x804001A110528002ull, 0x1418281208822812ull, 0x6022812828120881ull, + 0x0000000002280450ull, 0x0848480120200280ull, 0x0000008800800550ull, 0x2000000000400000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0016[64] = { + 1u, 22u, 35u, 53u, 59u, 73u, 94u, 122u, 139u, 153u, 158u, 165u, 171u, 178u, 184u, 191u, + 196u, 203u, 207u, 228u, 234u, 242u, 247u, 260u, 268u, 274u, 287u, 301u, 312u, 316u, 326u, 339u, + 346u, 353u, 366u, 371u, 383u, 402u, 418u, 429u, 439u, 449u, 460u, 470u, 480u, 491u, 501u, 510u, + 522u, 533u, 542u, 550u, 559u, 565u, 584u, 593u, 601u, 616u, 628u, 643u, 658u, 664u, 674u, 681u, }; void recomp_unit_0016_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0016_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08844004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0016[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0016[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0016[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08844004; @@ -879,7 +786,6 @@ L_08844028: L_08844030: aot_gpr_4 = (0u + static_cast(-991)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08844050; } @@ -930,7 +836,6 @@ L_0884406C: L_08844078: aot_gpr_4 = (0u + static_cast(-967)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088440BC; } @@ -942,9 +847,7 @@ L_08844084: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088440BC; } @@ -971,9 +874,7 @@ L_088440C4: L_088440CC: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088441DC; } @@ -987,7 +888,6 @@ L_088440E0: L_088440E8: aot_gpr_4 = (0u + static_cast(-967)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08844118; } @@ -1017,9 +917,7 @@ L_08844118: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844184; } @@ -1050,7 +948,6 @@ L_08844174: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1876), std::bit_cast(ctx.fpr[0])); aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08844268; } @@ -1083,7 +980,6 @@ L_088441B0: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_gpr_31 = (0x088441C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 67u, 0x08830498u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088441C4u) goto L_088441C4; AOT_REGCACHE_SYNC_OUT(); return; L_088441C4: @@ -1106,7 +1002,6 @@ L_088441DC: L_088441E4: aot_gpr_4 = (0u + static_cast(-967)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08844214; } @@ -1134,9 +1029,7 @@ L_08844214: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1876))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844268; } @@ -1197,7 +1090,6 @@ L_08844298: L_088442A0: aot_gpr_4 = (0u + static_cast(-967)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088442C0; } @@ -1211,7 +1103,6 @@ L_088442AC: AOT_REGCACHE_SYNC_OUT(); return; L_088442B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088442CC; } @@ -1267,7 +1158,17 @@ L_088442F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08844334: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1307,7 +1208,6 @@ L_088443A4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088445A4; } @@ -1326,7 +1226,6 @@ L_088443C4: ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1336))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08844400; @@ -1339,7 +1238,6 @@ L_08844400: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 / ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08844424; @@ -1347,7 +1245,6 @@ L_08844400: goto L_08844424; L_08844424: aot_gpr_31 = (0x0884442Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884442Cu) goto L_0884442C; AOT_REGCACHE_SYNC_OUT(); return; L_0884442C: @@ -1376,7 +1273,6 @@ L_08844460: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08844474; } @@ -1393,7 +1289,6 @@ L_08844474: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_0884449C; @@ -1407,7 +1302,6 @@ L_0884449C: ctx.gpr[18] = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 151 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088444C0; } @@ -1418,7 +1312,6 @@ L_088444BC: goto L_088444C0; L_088444C0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088444F8; } @@ -1435,7 +1328,6 @@ L_088444C8: L_088444DC: ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088444F8; } @@ -1452,7 +1344,6 @@ L_088444F8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08844530; } @@ -1484,7 +1375,6 @@ L_08844530: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1344))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08844568; } @@ -1516,7 +1406,6 @@ L_08844568: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1316))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088445A4; } @@ -1532,7 +1421,6 @@ L_08844578: L_08844588: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088445A4; } @@ -1548,7 +1436,6 @@ L_08844594: L_088445A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1776))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08844744; } @@ -1572,7 +1459,6 @@ L_088445B8: L_088445C8: aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088445E4; } @@ -1581,7 +1467,6 @@ L_088445C8: L_088445D4: jump_target = aot_gpr_5; aot_gpr_31 = (0x088445DCu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088445DCu) goto L_088445DC; AOT_REGCACHE_SYNC_OUT(); return; @@ -1595,7 +1480,6 @@ L_088445DC: } L_088445E4: aot_gpr_31 = (0x088445ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088445ECu) goto L_088445EC; AOT_REGCACHE_SYNC_OUT(); return; L_088445EC: @@ -1603,7 +1487,6 @@ L_088445EC: goto L_088445F0; L_088445F0: aot_gpr_31 = (0x088445F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 598u, 0x0889E930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088445F8u) goto L_088445F8; AOT_REGCACHE_SYNC_OUT(); return; L_088445F8: @@ -1619,7 +1502,6 @@ L_088445F8: L_08844608: aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08844624; } @@ -1628,7 +1510,6 @@ L_08844608: L_08844614: jump_target = aot_gpr_5; aot_gpr_31 = (0x0884461Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884461Cu) goto L_0884461C; AOT_REGCACHE_SYNC_OUT(); return; @@ -1642,7 +1523,6 @@ L_0884461C: } L_08844624: aot_gpr_31 = (0x0884462Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884462Cu) goto L_0884462C; AOT_REGCACHE_SYNC_OUT(); return; L_0884462C: @@ -1650,7 +1530,6 @@ L_0884462C: goto L_08844630; L_08844630: aot_gpr_31 = (0x08844638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 598u, 0x0889E930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08844638u) goto L_08844638; AOT_REGCACHE_SYNC_OUT(); return; L_08844638: @@ -1666,7 +1545,6 @@ L_08844638: L_08844648: aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08844664; } @@ -1675,7 +1553,6 @@ L_08844648: L_08844654: jump_target = aot_gpr_5; aot_gpr_31 = (0x0884465Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884465Cu) goto L_0884465C; AOT_REGCACHE_SYNC_OUT(); return; @@ -1689,7 +1566,6 @@ L_0884465C: } L_08844664: aot_gpr_31 = (0x0884466Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884466Cu) goto L_0884466C; AOT_REGCACHE_SYNC_OUT(); return; L_0884466C: @@ -1697,7 +1573,6 @@ L_0884466C: goto L_08844670; L_08844670: aot_gpr_31 = (0x08844678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 598u, 0x0889E930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08844678u) goto L_08844678; AOT_REGCACHE_SYNC_OUT(); return; L_08844678: @@ -1713,7 +1588,6 @@ L_08844678: L_08844688: aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088446A4; } @@ -1722,7 +1596,6 @@ L_08844688: L_08844694: jump_target = aot_gpr_5; aot_gpr_31 = (0x0884469Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884469Cu) goto L_0884469C; AOT_REGCACHE_SYNC_OUT(); return; @@ -1736,7 +1609,6 @@ L_0884469C: } L_088446A4: aot_gpr_31 = (0x088446ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088446ACu) goto L_088446AC; AOT_REGCACHE_SYNC_OUT(); return; L_088446AC: @@ -1744,7 +1616,6 @@ L_088446AC: goto L_088446B0; L_088446B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088446F4; } @@ -1752,7 +1623,6 @@ L_088446B0: } L_088446B8: aot_gpr_31 = (0x088446C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 598u, 0x0889E930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088446C0u) goto L_088446C0; AOT_REGCACHE_SYNC_OUT(); return; L_088446C0: @@ -1768,7 +1638,6 @@ L_088446C0: L_088446D0: aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088446EC; } @@ -1777,13 +1646,11 @@ L_088446D0: L_088446DC: jump_target = aot_gpr_5; aot_gpr_31 = (0x088446E4u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088446E4u) goto L_088446E4; AOT_REGCACHE_SYNC_OUT(); return; L_088446E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088446F4; } @@ -1791,13 +1658,11 @@ L_088446E4: } L_088446EC: aot_gpr_31 = (0x088446F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088446F4u) goto L_088446F4; AOT_REGCACHE_SYNC_OUT(); return; L_088446F4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1288))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0884474C; } @@ -1836,7 +1701,6 @@ L_08844724: AOT_REGCACHE_SYNC_OUT(); return; L_0884472C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884474C; } @@ -1849,7 +1713,6 @@ L_08844734: AOT_REGCACHE_SYNC_OUT(); return; L_0884473C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884474C; } @@ -1879,14 +1742,23 @@ L_0884474C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884477C: aot_gpr_29 = (aot_gpr_29 + static_cast(-608)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(560), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x088447B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088447B8u) goto L_088447B8; AOT_REGCACHE_SYNC_OUT(); return; L_088447B8: @@ -1904,7 +1776,6 @@ L_088447C0: AOT_REGCACHE_SYNC_OUT(); return; L_088447C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088447E8; } @@ -1912,7 +1783,6 @@ L_088447C8: } L_088447D0: aot_gpr_31 = (0x088447D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088447D8u) goto L_088447D8; AOT_REGCACHE_SYNC_OUT(); return; L_088447D8: @@ -1923,7 +1793,6 @@ L_088447D8: goto L_088447E0; L_088447E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08844810; } @@ -1931,7 +1800,6 @@ L_088447E0: } L_088447E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -1945,7 +1813,6 @@ L_088447F0: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08844838; } @@ -1957,9 +1824,7 @@ L_08844810: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844840; } @@ -1967,7 +1832,6 @@ L_08844810: } L_08844830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -1975,7 +1839,6 @@ L_08844830: } L_08844838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -2052,7 +1915,6 @@ L_088448A8: } L_088448B8: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_088448E8; } @@ -2066,7 +1928,6 @@ L_088448C0: AOT_REGCACHE_SYNC_OUT(); return; L_088448CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088448E8; } @@ -2074,7 +1935,6 @@ L_088448CC: } L_088448D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088448E8; } @@ -2090,7 +1950,6 @@ L_088448E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-967)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08844938; } @@ -2123,7 +1982,6 @@ L_088448F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08844AA0; } @@ -2133,7 +1991,6 @@ L_08844938: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08844984; } @@ -2165,7 +2022,6 @@ L_08844948: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08844AA0; } @@ -2179,7 +2035,6 @@ L_08844984: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08844A4C; } @@ -2189,7 +2044,6 @@ L_088449A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 173u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08844A14; } @@ -2312,7 +2166,6 @@ L_08844AB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(93)))))); aot_gpr_5 = (0u | 69u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08844AEC; } @@ -2323,7 +2176,6 @@ L_08844AE8: goto L_08844AEC; L_08844AEC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08844CE4; } @@ -2334,9 +2186,7 @@ L_08844AF4: aot_gpr_4 = (17312u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844CE4; } @@ -2347,9 +2197,7 @@ L_08844B10: aot_gpr_4 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844CE4; } @@ -2360,7 +2208,6 @@ L_08844B2C: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08844CE4; } @@ -2459,7 +2306,6 @@ L_08844BD8: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08844BF8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08844BF8u) goto L_08844BF8; AOT_REGCACHE_SYNC_OUT(); return; L_08844BF8: @@ -2471,7 +2317,6 @@ L_08844BF8: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08844C5C; } @@ -2496,7 +2341,6 @@ L_08844C44: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08844C1C; } @@ -2511,7 +2355,6 @@ L_08844C5C: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 10u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08844CDC; } @@ -2567,7 +2410,6 @@ L_08844C80: AOT_REGCACHE_SYNC_OUT(); return; L_08844CDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -2575,7 +2417,6 @@ L_08844CDC: } L_08844CE4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08844EC4; } @@ -2586,9 +2427,7 @@ L_08844CEC: aot_gpr_4 = (17382u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844EC4; } @@ -2599,7 +2438,6 @@ L_08844D08: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08844EC4; } @@ -2699,7 +2537,6 @@ L_08844DB8: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08844DD8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08844DD8u) goto L_08844DD8; AOT_REGCACHE_SYNC_OUT(); return; L_08844DD8: @@ -2711,7 +2548,6 @@ L_08844DD8: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08844E3C; } @@ -2736,7 +2572,6 @@ L_08844E24: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08844DFC; } @@ -2751,7 +2586,6 @@ L_08844E3C: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 10u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08844EBC; } @@ -2807,7 +2641,6 @@ L_08844E60: AOT_REGCACHE_SYNC_OUT(); return; L_08844EBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -2818,9 +2651,7 @@ L_08844EC4: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08845598; } @@ -2831,9 +2662,7 @@ L_08844EE0: aot_gpr_4 = (17312u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08844F7C; } @@ -2899,7 +2728,6 @@ L_08844F4C: AOT_REGCACHE_SYNC_OUT(); return; L_08844F74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -2910,9 +2738,7 @@ L_08844F7C: aot_gpr_4 = (17347u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08845098; } @@ -3038,7 +2864,6 @@ L_08845068: AOT_REGCACHE_SYNC_OUT(); return; L_08845090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3049,7 +2874,6 @@ L_08845098: aot_gpr_4 = (17382u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (16320u << 16u); if (branch_taken) { @@ -3080,7 +2904,6 @@ L_088450D4: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0884517C; } @@ -3210,7 +3033,6 @@ L_088451C0: AOT_REGCACHE_SYNC_OUT(); return; L_08845200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3225,7 +3047,6 @@ L_08845208: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08845240; } @@ -3242,7 +3063,6 @@ L_0884522C: } L_08845238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845250; } @@ -3250,7 +3070,6 @@ L_08845238: } L_08845240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3258,7 +3077,6 @@ L_08845240: } L_08845248: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08845264; } @@ -3275,7 +3093,6 @@ L_08845250: } L_0884525C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845274; } @@ -3283,7 +3100,6 @@ L_0884525C: } L_08845264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3291,7 +3107,6 @@ L_08845264: } L_0884526C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08845288; } @@ -3308,7 +3123,6 @@ L_08845274: } L_08845280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845298; } @@ -3316,7 +3130,6 @@ L_08845280: } L_08845288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3324,7 +3137,6 @@ L_08845288: } L_08845290: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088452F0; } @@ -3333,7 +3145,6 @@ L_08845290: L_08845298: aot_gpr_4 = (static_cast(aot_gpr_4) < 236 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088452E8; } @@ -3355,7 +3166,6 @@ L_088452B4: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088452F8; @@ -3371,7 +3181,6 @@ L_088452E0: } L_088452E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3379,7 +3188,6 @@ L_088452E8: } L_088452F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3395,7 +3203,6 @@ L_088452FC: aot_fpr_12 = ctx.fpr[24] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088454A8; } @@ -3482,7 +3289,6 @@ L_088453A0: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088453C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088453C0u) goto L_088453C0; AOT_REGCACHE_SYNC_OUT(); return; L_088453C0: @@ -3494,7 +3300,6 @@ L_088453C0: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08845424; } @@ -3519,7 +3324,6 @@ L_0884540C: ctx.gpr[22] = (static_cast(static_cast(ctx.gpr[22]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088453E4; } @@ -3533,7 +3337,6 @@ L_08845424: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088454A0; } @@ -3589,7 +3392,6 @@ L_08845444: AOT_REGCACHE_SYNC_OUT(); return; L_088454A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3604,7 +3406,6 @@ L_088454A8: L_088454B4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08845524; } @@ -3641,7 +3442,6 @@ L_088454F4: AOT_REGCACHE_SYNC_OUT(); return; L_0884551C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3655,7 +3455,6 @@ L_08845524: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08845598; } @@ -3727,7 +3526,17 @@ L_08845598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088455CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-496)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3755,7 +3564,6 @@ L_08845618: ctx.gpr[19] = (aot_gpr_16 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08845904; } @@ -3861,7 +3669,6 @@ L_088456E8: AOT_REGCACHE_SYNC_OUT(); return; L_088456F0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088458E0; } @@ -3871,7 +3678,6 @@ L_088456F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(1018))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088458E0; } @@ -3905,7 +3711,6 @@ L_08845708: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (ctx.gpr[18] | 0u); if (branch_taken) { @@ -3936,7 +3741,6 @@ L_08845764: AOT_REGCACHE_SYNC_OUT(); return; L_08845774: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088458E0; } @@ -3944,7 +3748,6 @@ L_08845774: } L_0884577C: aot_gpr_31 = (0x08845784u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08845784u) goto L_08845784; AOT_REGCACHE_SYNC_OUT(); return; L_08845784: @@ -4068,7 +3871,6 @@ L_088457A8: AOT_REGCACHE_SYNC_OUT(); return; L_08845820: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088458A0; } @@ -4218,7 +4020,6 @@ L_088458E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08845904; } @@ -4227,7 +4028,6 @@ L_088458E0: L_088458F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08845904; } @@ -4254,7 +4054,17 @@ L_08845904: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08845928: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4285,7 +4095,6 @@ L_08845970: L_08845994: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088459C0; } @@ -4300,7 +4109,6 @@ L_088459A0: L_088459AC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088459D0; } @@ -4341,7 +4149,6 @@ L_088459D8: goto L_088459E0; L_088459E0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08845A34; } @@ -4395,7 +4202,6 @@ L_08845A3C: aot_gpr_4 = (ctx.gpr[23] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08845BA0; } @@ -4427,7 +4233,6 @@ L_08845A5C: } L_08845A64: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08845ADC; } @@ -4628,7 +4433,6 @@ L_08845BCC: L_08845BD8: ctx.gpr[20] = (ctx.gpr[20] + static_cast(80)); aot_gpr_31 = (0x08845BE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 622u, 0x08972DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08845BE4u) goto L_08845BE4; AOT_REGCACHE_SYNC_OUT(); return; L_08845BE4: @@ -4809,7 +4613,6 @@ L_08845D74: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_08845D9C; @@ -4842,7 +4645,6 @@ L_08845DB4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-30396))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08845E2C; } @@ -4871,7 +4673,6 @@ L_08845DE8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_08845E14; @@ -4923,9 +4724,7 @@ L_08845E38: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08845E74; } @@ -4946,7 +4745,6 @@ L_08845E5C: L_08845E74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 3u); if (branch_taken) { @@ -4964,7 +4762,6 @@ L_08845E88: } L_08845E90: { const bool branch_taken = ctx.gpr[23] == aot_gpr_5; - // nop if (branch_taken) { goto L_08845EA4; } @@ -4973,7 +4770,6 @@ L_08845E90: L_08845E98: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08845ED0; } @@ -5105,7 +4901,6 @@ L_08845F14: } L_08845F7C: { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_08845F90; } @@ -5114,7 +4909,6 @@ L_08845F7C: L_08845F84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08845FF8; } @@ -5130,9 +4924,7 @@ L_08845F90: L_08845FA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08845FF8; } @@ -5186,7 +4978,6 @@ L_08845FF8: L_0884600C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_08846040; } @@ -5209,7 +5000,6 @@ L_08846040: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08846130; } @@ -5222,7 +5012,6 @@ L_08846054: AOT_REGCACHE_SYNC_OUT(); return; L_0884605C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08846130; } @@ -5279,9 +5068,7 @@ L_08846064: aot_gpr_5 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846130; } @@ -5385,7 +5172,6 @@ L_08846130: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[10]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08846154; } @@ -5399,7 +5185,6 @@ L_08846148: L_08846154: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08846314; } @@ -5412,7 +5197,6 @@ L_08846160: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08846314; } @@ -5597,7 +5381,17 @@ L_08846320: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08846354: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5633,7 +5427,6 @@ L_08846398: } L_088463A0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088463F0; } @@ -5653,7 +5446,6 @@ L_088463A8: AOT_REGCACHE_SYNC_OUT(); return; L_088463C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088463F0; } @@ -5692,7 +5484,6 @@ L_088463FC: } L_08846404: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08846454; } @@ -5712,7 +5503,6 @@ L_0884640C: AOT_REGCACHE_SYNC_OUT(); return; L_08846428: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08846454; } @@ -5763,7 +5553,6 @@ L_08846470: L_0884647C: ctx.gpr[19] = (0u | 3u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088464CC; } @@ -5779,7 +5568,6 @@ L_08846488: } L_08846490: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088464C4; } @@ -5808,7 +5596,6 @@ L_088464A8: L_088464B8: ctx.gpr[19] = (0u | 5u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088464CC; } @@ -5816,7 +5603,6 @@ L_088464B8: } L_088464C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -5834,7 +5620,6 @@ L_088464CC: AOT_REGCACHE_SYNC_OUT(); return; L_088464E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088464FC; } @@ -5859,7 +5644,6 @@ L_088464F4: } L_088464FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -5888,14 +5672,22 @@ L_08846518: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18664))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08846530: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -5903,7 +5695,6 @@ L_08846530: } L_08846538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846BAC; } @@ -5920,7 +5711,6 @@ L_08846540: L_08846548: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 125 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08846C84; } @@ -5928,7 +5718,6 @@ L_08846548: } L_08846554: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -5948,20 +5737,27 @@ L_08846564: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18792))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884657C: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (16025u << 16u); aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088465E0; } @@ -5969,9 +5765,7 @@ L_0884657C: } L_0884659C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088465E0; } @@ -5995,7 +5789,6 @@ L_088465AC: AOT_REGCACHE_SYNC_OUT(); return; L_088465D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846618; } @@ -6003,9 +5796,7 @@ L_088465D8: } L_088465E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846618; } @@ -6028,7 +5819,6 @@ L_088465F0: AOT_REGCACHE_SYNC_OUT(); return; L_08846618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6041,9 +5831,7 @@ L_08846620: aot_gpr_4 = (aot_gpr_4 | 41943u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088466B8; } @@ -6051,9 +5839,7 @@ L_08846620: } L_08846644: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088466B8; } @@ -6074,9 +5860,7 @@ L_08846654: AOT_REGCACHE_SYNC_OUT(); return; L_0884667C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088466EC; } @@ -6098,7 +5882,6 @@ L_0884668C: AOT_REGCACHE_SYNC_OUT(); return; L_088466B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088466EC; } @@ -6106,9 +5889,7 @@ L_088466B0: } L_088466B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088466EC; } @@ -6130,7 +5911,6 @@ L_088466C8: AOT_REGCACHE_SYNC_OUT(); return; L_088466EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6144,9 +5924,7 @@ L_088466F4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846760; } @@ -6154,9 +5932,7 @@ L_088466F4: } L_0884671C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846760; } @@ -6180,7 +5956,6 @@ L_0884672C: AOT_REGCACHE_SYNC_OUT(); return; L_08846758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846798; } @@ -6188,9 +5963,7 @@ L_08846758: } L_08846760: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846798; } @@ -6213,7 +5986,6 @@ L_08846770: AOT_REGCACHE_SYNC_OUT(); return; L_08846798: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6227,9 +5999,7 @@ L_088467A0: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846838; } @@ -6237,9 +6007,7 @@ L_088467A0: } L_088467C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846838; } @@ -6259,9 +6027,7 @@ L_088467D8: AOT_REGCACHE_SYNC_OUT(); return; L_088467FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846870; } @@ -6283,7 +6049,6 @@ L_0884680C: AOT_REGCACHE_SYNC_OUT(); return; L_08846830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846870; } @@ -6291,9 +6056,7 @@ L_08846830: } L_08846838: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846870; } @@ -6316,7 +6079,6 @@ L_08846848: AOT_REGCACHE_SYNC_OUT(); return; L_08846870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6339,7 +6101,6 @@ L_08846878: AOT_REGCACHE_SYNC_OUT(); return; L_088468A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6353,9 +6114,7 @@ L_088468A8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846914; } @@ -6363,9 +6122,7 @@ L_088468A8: } L_088468D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846914; } @@ -6389,7 +6146,6 @@ L_088468E0: AOT_REGCACHE_SYNC_OUT(); return; L_0884690C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884694C; } @@ -6397,9 +6153,7 @@ L_0884690C: } L_08846914: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884694C; } @@ -6422,7 +6176,6 @@ L_08846924: AOT_REGCACHE_SYNC_OUT(); return; L_0884694C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6436,9 +6189,7 @@ L_08846954: aot_gpr_4 = (aot_gpr_4 | 18350u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088469F8; } @@ -6446,9 +6197,7 @@ L_08846954: } L_0884697C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088469F8; } @@ -6471,9 +6220,7 @@ L_0884698C: AOT_REGCACHE_SYNC_OUT(); return; L_088469BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846A2C; } @@ -6495,7 +6242,6 @@ L_088469CC: AOT_REGCACHE_SYNC_OUT(); return; L_088469F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846A2C; } @@ -6503,9 +6249,7 @@ L_088469F0: } L_088469F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846A2C; } @@ -6527,7 +6271,6 @@ L_08846A08: AOT_REGCACHE_SYNC_OUT(); return; L_08846A2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6544,9 +6287,7 @@ L_08846A34: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846AE4; } @@ -6554,9 +6295,7 @@ L_08846A34: } L_08846A68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846AE4; } @@ -6579,9 +6318,7 @@ L_08846A78: AOT_REGCACHE_SYNC_OUT(); return; L_08846AA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846BA4; } @@ -6603,7 +6340,6 @@ L_08846AB8: AOT_REGCACHE_SYNC_OUT(); return; L_08846ADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846BA4; } @@ -6611,9 +6347,7 @@ L_08846ADC: } L_08846AE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846B70; } @@ -6621,9 +6355,7 @@ L_08846AE4: } L_08846AF4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846B70; } @@ -6646,9 +6378,7 @@ L_08846B04: AOT_REGCACHE_SYNC_OUT(); return; L_08846B34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846BA4; } @@ -6670,7 +6400,6 @@ L_08846B44: AOT_REGCACHE_SYNC_OUT(); return; L_08846B68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846BA4; } @@ -6678,9 +6407,7 @@ L_08846B68: } L_08846B70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846BA4; } @@ -6702,7 +6429,6 @@ L_08846B80: AOT_REGCACHE_SYNC_OUT(); return; L_08846BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6716,9 +6442,7 @@ L_08846BAC: aot_gpr_4 = (aot_gpr_4 | 10486u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846C44; } @@ -6726,9 +6450,7 @@ L_08846BAC: } L_08846BD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846C44; } @@ -6748,9 +6470,7 @@ L_08846BE4: AOT_REGCACHE_SYNC_OUT(); return; L_08846C08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846C7C; } @@ -6772,7 +6492,6 @@ L_08846C18: AOT_REGCACHE_SYNC_OUT(); return; L_08846C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846C7C; } @@ -6780,9 +6499,7 @@ L_08846C3C: } L_08846C44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846C7C; } @@ -6805,7 +6522,6 @@ L_08846C54: AOT_REGCACHE_SYNC_OUT(); return; L_08846C7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6818,9 +6534,7 @@ L_08846C84: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846CF8; } @@ -6828,9 +6542,7 @@ L_08846C84: } L_08846CA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846CF8; } @@ -6857,7 +6569,6 @@ L_08846CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08846CF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846D2C; } @@ -6865,9 +6576,7 @@ L_08846CF0: } L_08846CF8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846D2C; } @@ -6889,7 +6598,6 @@ L_08846D08: AOT_REGCACHE_SYNC_OUT(); return; L_08846D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6902,9 +6610,7 @@ L_08846D34: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846DA8; } @@ -6912,9 +6618,7 @@ L_08846D34: } L_08846D58: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846DA8; } @@ -6941,7 +6645,6 @@ L_08846D68: AOT_REGCACHE_SYNC_OUT(); return; L_08846DA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846DDC; } @@ -6949,9 +6652,7 @@ L_08846DA0: } L_08846DA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846DDC; } @@ -6973,7 +6674,6 @@ L_08846DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08846DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -6986,9 +6686,7 @@ L_08846DE4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846E4C; } @@ -6996,9 +6694,7 @@ L_08846DE4: } L_08846E08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846E4C; } @@ -7022,7 +6718,6 @@ L_08846E18: AOT_REGCACHE_SYNC_OUT(); return; L_08846E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846E84; } @@ -7030,9 +6725,7 @@ L_08846E44: } L_08846E4C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08846E84; } @@ -7055,7 +6748,6 @@ L_08846E5C: AOT_REGCACHE_SYNC_OUT(); return; L_08846E84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846EB0; } @@ -7090,7 +6782,17 @@ L_08846EB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08846ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -7110,7 +6812,6 @@ L_08846F0C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08846F34; } @@ -7126,7 +6827,6 @@ L_08846F34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08846F80; } @@ -7137,7 +6837,6 @@ L_08846F44: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08846F80; } @@ -7145,7 +6844,6 @@ L_08846F44: } L_08846F58: aot_gpr_31 = (0x08846F60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08846F60u) goto L_08846F60; AOT_REGCACHE_SYNC_OUT(); return; L_08846F60: @@ -7162,7 +6860,6 @@ L_08846F60: } L_08846F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08846F88; } @@ -7170,7 +6867,6 @@ L_08846F78: } L_08846F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884743C; } @@ -7178,12 +6874,10 @@ L_08846F80: } L_08846F88: aot_gpr_31 = (0x08846F90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08846F90u) goto L_08846F90; AOT_REGCACHE_SYNC_OUT(); return; L_08846F90: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08847004; } @@ -7208,7 +6902,6 @@ L_08846F98: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(320), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08846FE4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08846FE4u) goto L_08846FE4; AOT_REGCACHE_SYNC_OUT(); return; L_08846FE4: @@ -7265,7 +6958,6 @@ L_08847034: L_08847064: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088471AC; } @@ -7275,7 +6967,6 @@ L_08847070: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088471AC; } @@ -7320,7 +7011,6 @@ L_088470D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884713C; } @@ -7464,7 +7154,6 @@ L_08847200: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884726C; } @@ -7483,7 +7172,6 @@ L_0884726C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08847298; } @@ -7539,7 +7227,6 @@ L_088472FC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_20 + aot_fpr_12; { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08847360; } @@ -7631,9 +7318,7 @@ L_08847310: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08847360; } @@ -7656,7 +7341,6 @@ L_08847368: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[18] = (0u | 1u); goto L_08847380; @@ -7665,7 +7349,6 @@ L_08847368: L_08847380: aot_gpr_4 = (ctx.gpr[18] & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08847390; } @@ -7746,7 +7429,6 @@ L_08847390: L_088473E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08847418; } @@ -7766,7 +7448,6 @@ L_088473EC: AOT_REGCACHE_SYNC_OUT(); return; L_08847410: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884743C; } @@ -7803,7 +7484,17 @@ L_0884743C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884746C: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -7863,7 +7554,6 @@ L_08847520: } L_0884752C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088475B4; } @@ -7871,7 +7561,6 @@ L_0884752C: } L_08847534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088475F0; } @@ -8086,7 +7775,6 @@ L_08847628: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08847694; } @@ -8117,7 +7805,6 @@ L_08847638: } L_08847650: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08847664; } @@ -8192,9 +7879,7 @@ L_08847664: L_08847694: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088476C0; } @@ -8331,7 +8016,6 @@ L_088476C0: AOT_REGCACHE_SYNC_OUT(); return; L_0884775C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08847800; } @@ -8367,7 +8051,6 @@ L_08847764: AOT_REGCACHE_SYNC_OUT(); return; L_0884779C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088477F8; } @@ -8401,7 +8084,6 @@ L_088477E4: goto L_088477F0; L_088477F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08847830; } @@ -8425,9 +8107,7 @@ L_08847800: } L_08847808: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08847830; } @@ -8437,9 +8117,7 @@ L_08847818: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884784C; } @@ -8484,7 +8162,6 @@ L_08847868: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088478F8; } @@ -8504,7 +8181,6 @@ L_0884787C: AOT_REGCACHE_SYNC_OUT(); return; L_08847894: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088478F0; } @@ -8529,7 +8205,6 @@ L_0884789C: AOT_REGCACHE_SYNC_OUT(); return; L_088478D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088478E8; } @@ -8554,7 +8229,6 @@ L_088478E8: } L_088478F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08847974; } @@ -8564,7 +8238,6 @@ L_088478F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884795C; } @@ -8589,7 +8262,6 @@ L_08847908: AOT_REGCACHE_SYNC_OUT(); return; L_08847940: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08847954; } @@ -8626,9 +8298,7 @@ L_0884795C: AOT_REGCACHE_SYNC_OUT(); return; L_08847974: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_20)) && ctx.fpr[22] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088479A0; } @@ -8637,9 +8307,7 @@ L_08847974: L_08847984: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088479A0; } @@ -8677,7 +8345,17 @@ L_088479A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088479DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8687,7 +8365,6 @@ L_088479DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_6 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08847B98; } @@ -8704,7 +8381,6 @@ L_08847A00: L_08847A08: aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08847B90; } @@ -8734,7 +8410,6 @@ L_08847A38: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(563))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08847AD4; } @@ -8822,7 +8497,6 @@ L_08847AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08847AEC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08847B90; } @@ -8832,7 +8506,6 @@ L_08847AF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08847B90; } @@ -8907,7 +8580,6 @@ L_08847B78: AOT_REGCACHE_SYNC_OUT(); return; L_08847B90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08847C58; } @@ -8916,7 +8588,6 @@ L_08847B90: L_08847B98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1668))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08847C58; } @@ -8946,7 +8617,6 @@ L_08847BC8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(563))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08847BFC; } @@ -8981,7 +8651,6 @@ L_08847BFC: AOT_REGCACHE_SYNC_OUT(); return; L_08847C14: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08847C50; } @@ -8991,7 +8660,6 @@ L_08847C1C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08847C50; } @@ -9023,7 +8691,17 @@ L_08847C58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08847C68: aot_gpr_29 = (aot_gpr_29 + static_cast(-912)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -9075,12 +8753,10 @@ L_08847C68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08847D20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08847D20u) goto L_08847D20; AOT_REGCACHE_SYNC_OUT(); return; L_08847D20: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[2]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0017_entry, 17u, 41u, 0x088485A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9098,7 +8774,6 @@ L_08847D28: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0017_entry, 17u, 41u, 0x088485A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9130,7 +8805,6 @@ L_08847D84: aot_gpr_4 = (16585u << 16u); aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -9146,9 +8820,7 @@ L_08847DB0: L_08847DBC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1852))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08847DDC; } @@ -9162,9 +8834,7 @@ L_08847DD0: L_08847DDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1852))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08847E14; } @@ -9194,7 +8864,6 @@ L_08847E1C: AOT_REGCACHE_SYNC_OUT(); return; L_08847E24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0017_entry, 17u, 29u, 0x088484E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9213,7 +8882,6 @@ L_08847E2C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0017_entry, 17u, 29u, 0x088484E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0017.cpp b/profiles/vcs/generated/generated_unit_0017.cpp index 6bab91b..856f9e7 100644 --- a/profiles/vcs/generated/generated_unit_0017.cpp +++ b/profiles/vcs/generated/generated_unit_0017.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0017[4091] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 33, 34, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 37, 0, - 38, 0, 0, 0, 39, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 53, 0, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 62, 0, 63, 0, - 0, 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 66, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 0, 77, 0, 78, - 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 86, 0, 87, 88, 0, 89, 90, 0, 0, 0, 0, - 0, 91, 0, 0, 0, 92, 0, 93, 0, 94, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, - 0, 99, 0, 100, 101, 0, 0, 102, 0, 0, 103, 0, 104, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 109, - 0, 110, 0, 0, 0, 0, 0, 111, 0, 112, 0, 113, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 118, 0, - 119, 0, 0, 0, 0, 0, 120, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 125, 0, 126, 0, 0, - 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, 137, 0, 138, 0, 139, - 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 146, 0, 0, - 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, - 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 164, - 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 167, 0, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, - 0, 174, 0, 0, 0, 175, 0, 176, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 181, 0, 182, - 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 188, 0, 189, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 0, - 0, 192, 0, 193, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 199, 0, 200, 0, - 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, - 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 214, 0, - 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, - 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 0, 226, 0, 227, 0, 228, - 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 234, - 0, 0, 0, 235, 0, 236, 0, 237, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 243, 0, 0, 0, 0, 0, 0, - 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, - 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 0, 0, 258, 0, 259, 0, 0, 0, 0, 260, 0, - 0, 261, 0, 262, 0, 0, 263, 0, 264, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 0, 0, 268, 0, - 269, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 0, 0, 274, 0, 275, 0, 0, 0, 0, - 276, 0, 0, 277, 0, 278, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 284, 0, - 0, 0, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, - 292, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, - 0, 0, 0, 299, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, 0, 0, 0, 0, 305, 0, - 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, - 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, - 320, 0, 0, 0, 0, 321, 0, 322, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 0, - 327, 0, 328, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 334, 0, 0, - 0, 0, 0, 335, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 348, 0, 0, - 0, 0, 0, 349, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 354, 0, 0, 0, 355, 0, 0, 356, 0, 357, 0, 0, - 358, 0, 0, 359, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, - 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, - 0, 0, 373, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 380, 0, 0, 0, - 0, 0, 0, 0, 381, 0, 382, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 388, - 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, - 0, 397, 0, 0, 398, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, - 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 409, - 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 418, 0, 419, 420, 0, 0, 0, 0, 0, - 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 427, 428, 0, 0, 429, - 430, 0, 0, 0, 0, 431, 0, 0, 432, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 436, 437, 0, 0, 438, 439, 0, 440, - 0, 0, 441, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 446, 447, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, - 451, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 455, 0, 456, 0, 0, 0, 0, 0, 0, 457, 458, - 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, - 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 0, 0, 0, - 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 474, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 481, 482, 0, 0, - 483, 0, 484, 0, 485, 0, 0, 486, 0, 0, 487, 0, 488, 0, 0, 489, 0, 490, 0, 491, 0, 492, 0, 0, 0, 493, 0, 0, 494, 0, 495, 0, - 0, 0, 496, 497, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 499, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 505, 0, 0, 0, 0, 0, 506, 0, 507, 0, 508, 0, 509, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 513, 0, 0, 514, - 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, 518, 0, 0, 0, 0, 519, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 524, 0, 525, 0, 0, 0, - 0, 526, 0, 0, 0, 527, 0, 528, 0, 529, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 0, 0, 539, 0, 540, 0, 541, - 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, - 545, 0, 0, 546, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 550, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 556, 0, 0, 557, 0, 558, 0, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 0, 562, 0, 0, 563, 0, 0, 564, 0, 565, 0, 0, - 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, 574, 0, 0, 0, - 575, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 580, - 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 583, 0, 584, 0, 0, 0, 585, 0, 0, 0, - 586, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, - 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, - 0, 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 606, 0, - 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 611, 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, - 0, 0, 0, 616, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 619, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, - 0, 0, 624, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, - 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, - 652, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 654, 0, 0, 0, 655, 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 658, 0, - 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 661, 0, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 664, - 0, 0, 0, 665, 0, 666, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, - 0, 669, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0017[64] = { + 0x0000020800085001ull, 0x008400000C02A014ull, 0x0202000002200000ull, 0x1000400004400100ull, + 0x2400202001000800ull, 0x0800029142041A20ull, 0x0009208800280000ull, 0x5821148210688000ull, + 0xA12210500042A828ull, 0x0DA20220010020A0ull, 0x8284949A401026A2ull, 0x2910214141424A82ull, + 0xA84802A010804810ull, 0x8000884129048440ull, 0x0000000040002880ull, 0x0142200000000000ull, + 0x000035408050A000ull, 0x0000800000000000ull, 0xA90120A244000020ull, 0x1115020100001040ull, + 0x010AA8845223002Aull, 0x020000844A001401ull, 0x85101080A9550884ull, 0x4091400102A422A8ull, + 0x4282202088820020ull, 0x0A0880A14111014Aull, 0x4282202850440529ull, 0x4050A0880A141101ull, + 0x4110142822028504ull, 0x285044050A0880A1ull, 0x2122241200148228ull, 0x1022812929150248ull, + 0x1282250410205488ull, 0x40A408A4824A0450ull, 0x9080420402110152ull, 0x0691001001140102ull, + 0xB34205219A102049ull, 0x2010B14000001104ull, 0xC0A8100000000101ull, 0x0008481021000850ull, + 0x010304240A000010ull, 0x522A949538108800ull, 0x000000A40000020Cull, 0x0000002000000020ull, + 0x928040002A822000ull, 0x1480028000485280ull, 0x00000A40000086A2ull, 0x0000020000000200ull, + 0x08040002A8220000ull, 0x0014000110A44049ull, 0x08140012292A2148ull, 0x8204081114202000ull, + 0x0820408111420040ull, 0x0112000080002004ull, 0x4800A04408800208ull, 0x0400148100410402ull, + 0x0211020490249018ull, 0x010A000020000040ull, 0x0000280100800000ull, 0x0000000004800400ull, + 0x1010040004040020ull, 0x0400410002000800ull, 0x8044500144488201ull, 0x0400000A800000A8ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0017[64] = { + 1u, 7u, 16u, 20u, 25u, 31u, 43u, 50u, 64u, 79u, 91u, 110u, 127u, 140u, 152u, 156u, + 160u, 170u, 171u, 183u, 192u, 209u, 218u, 235u, 250u, 261u, 276u, 292u, 306u, 320u, 335u, 349u, + 366u, 381u, 397u, 410u, 421u, 441u, 451u, 459u, 468u, 477u, 496u, 502u, 504u, 515u, 526u, 535u, + 537u, 545u, 556u, 571u, 581u, 591u, 597u, 607u, 616u, 629u, 634u, 638u, 641u, 647u, 652u, 665u, }; void recomp_unit_0017_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0017_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08848000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0017[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0017[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0017[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08848000; @@ -884,7 +791,6 @@ L_08848000: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08848030u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08848030u) goto L_08848030; AOT_REGCACHE_SYNC_OUT(); return; L_08848030: @@ -1000,7 +906,6 @@ L_088480A4: AOT_REGCACHE_SYNC_OUT(); return; L_08848108: aot_gpr_31 = (0x08848110u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08848110u) goto L_08848110; AOT_REGCACHE_SYNC_OUT(); return; L_08848110: @@ -1025,7 +930,6 @@ L_08848134: } L_0884813C: aot_gpr_31 = (0x08848144u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08848144u) goto L_08848144; AOT_REGCACHE_SYNC_OUT(); return; L_08848144: @@ -1191,7 +1095,6 @@ L_08848254: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088481DC; } @@ -1273,7 +1176,6 @@ L_088482C4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088482E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088482E4u) goto L_088482E4; AOT_REGCACHE_SYNC_OUT(); return; L_088482E4: @@ -1313,7 +1215,6 @@ L_088482E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08848320u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08848320u) goto L_08848320; AOT_REGCACHE_SYNC_OUT(); return; L_08848320: @@ -1379,7 +1280,6 @@ L_08848368: aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(272)); if (branch_taken) { @@ -1505,7 +1405,6 @@ L_088484B4: L_088484E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1344))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088485A4; } @@ -1593,7 +1492,6 @@ L_08848580: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088485A4; } @@ -1602,7 +1500,6 @@ L_08848580: L_08848590: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(512))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088485A4; } @@ -1638,7 +1535,17 @@ L_088485A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088485EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1650,12 +1557,10 @@ L_088485EC: aot_gpr_4 = (aot_gpr_4 | 16384u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x0884864Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884864Cu) goto L_0884864C; AOT_REGCACHE_SYNC_OUT(); return; L_0884864C: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08848E34; } @@ -1718,7 +1623,6 @@ L_088486B4: L_088486C0: ctx.gpr[23] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088487B0; } @@ -1821,7 +1725,6 @@ L_08848784: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088487B0; } @@ -1830,7 +1733,6 @@ L_08848784: L_0884879C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088487B0; } @@ -1864,7 +1766,6 @@ L_088487C0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1864))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08848AB0; } @@ -1887,7 +1788,6 @@ L_088487EC: goto L_088487F0; L_088487F0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0884880C; } @@ -1934,7 +1834,6 @@ L_08848834: goto L_0884883C; L_0884883C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08848898; } @@ -1945,7 +1844,6 @@ L_08848844: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); ctx.gpr[9] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(292))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08848898; } @@ -1990,9 +1888,7 @@ L_08848858: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848898; } @@ -2019,7 +1915,6 @@ L_088488B0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08848AB0; } @@ -2027,9 +1922,7 @@ L_088488B0: } L_088488C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848AB0; } @@ -2160,7 +2053,6 @@ L_088489A4: ctx.fpr[28] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[28]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[26])) && ctx.fpr[28] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2170,7 +2062,6 @@ L_088489A4: } L_088489C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088489E0; @@ -2199,7 +2090,6 @@ L_088489EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -2209,9 +2099,7 @@ L_088489EC: } L_08848A04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[26])) && aot_fpr_13 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848A1C; } @@ -2227,7 +2115,6 @@ L_08848A14: } L_08848A1C: aot_gpr_31 = (0x08848A24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08848A24u) goto L_08848A24; AOT_REGCACHE_SYNC_OUT(); return; L_08848A24: @@ -2292,7 +2179,6 @@ L_08848A8C: L_08848A90: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08848AB0; } @@ -2301,7 +2187,6 @@ L_08848A90: L_08848A9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08848AB0; } @@ -2315,7 +2200,6 @@ L_08848AA8: L_08848AB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1864))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08848B2C; } @@ -2324,7 +2208,6 @@ L_08848AB0: L_08848ABC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1864))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08848ADC; } @@ -2375,7 +2258,6 @@ L_08848B04: goto L_08848B1C; L_08848B1C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08848B2C; } @@ -2388,7 +2270,6 @@ L_08848B24: L_08848B2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1864))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08848BF4; } @@ -2397,7 +2278,6 @@ L_08848B2C: L_08848B38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1864))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08848B58; } @@ -2448,7 +2328,6 @@ L_08848B80: goto L_08848B98; L_08848B98: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08848BF4; } @@ -2476,7 +2355,6 @@ L_08848BD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(408))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08848BF4; } @@ -2485,7 +2363,6 @@ L_08848BD0: L_08848BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(400))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08848BF4; } @@ -2501,9 +2378,7 @@ L_08848BF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(52))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29640))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848C2C; } @@ -2534,7 +2409,6 @@ L_08848C38: aot_gpr_5 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -2566,7 +2440,6 @@ L_08848C70: } L_08848C94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08848CCC; } @@ -2601,9 +2474,7 @@ L_08848CCC: L_08848CD8: ctx.gpr[17] = (ctx.gpr[2] | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848D18; } @@ -2627,9 +2498,7 @@ L_08848CFC: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848E34; } @@ -2637,9 +2506,7 @@ L_08848CFC: } L_08848D18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848D3C; } @@ -2666,9 +2533,7 @@ L_08848D48: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848D6C; } @@ -2697,7 +2562,6 @@ L_08848D80: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16192u << 16u); if (branch_taken) { @@ -2708,9 +2572,7 @@ L_08848D80: L_08848D98: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848E34; } @@ -2749,9 +2611,7 @@ L_08848DFC: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08848E2C; } @@ -2795,7 +2655,17 @@ L_08848E34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08848E78: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -2952,7 +2822,6 @@ L_08848FE0: AOT_REGCACHE_SYNC_OUT(); return; L_08849034: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849050; } @@ -2980,7 +2849,6 @@ L_08849058: aot_fpr_12 = aot_fpr_12 / ctx.fpr[22]; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0884907C; @@ -2991,9 +2859,7 @@ L_0884907C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088490A8; } @@ -3001,7 +2867,6 @@ L_0884907C: } L_08849098: aot_gpr_31 = (0x088490A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 36u, 0x08B6033Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088490A0u) goto L_088490A0; AOT_REGCACHE_SYNC_OUT(); return; L_088490A0: @@ -3014,7 +2879,6 @@ L_088490A0: } L_088490A8: aot_gpr_31 = (0x088490B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 26u, 0x089644F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088490B0u) goto L_088490B0; AOT_REGCACHE_SYNC_OUT(); return; L_088490B0: @@ -3194,7 +3058,17 @@ L_088491BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08849214: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3206,7 +3080,6 @@ L_08849214: aot_fpr_13 = std::bit_cast(0u); aot_gpr_16 = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3223,7 +3096,6 @@ L_08849268: L_08849278: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088492C0; } @@ -3233,7 +3105,6 @@ L_08849284: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088492C0; } @@ -3241,16 +3112,13 @@ L_08849284: } L_08849294: aot_gpr_31 = (0x0884929Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884929Cu) goto L_0884929C; AOT_REGCACHE_SYNC_OUT(); return; L_0884929C: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088492C0; } @@ -3268,7 +3136,6 @@ L_088492C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088492F4; } @@ -3283,7 +3150,6 @@ L_088492E0: goto L_088492EC; L_088492EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088493A4; } @@ -3291,7 +3157,6 @@ L_088492EC: } L_088492F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -3304,7 +3169,6 @@ L_088492FC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088493A4; } @@ -3316,7 +3180,6 @@ L_08849318: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088493A4; } @@ -3367,9 +3230,7 @@ L_08849330: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088493A4; } @@ -3382,7 +3243,6 @@ L_08849380: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_20 = aot_fpr_20 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088493A4; @@ -3393,9 +3253,7 @@ L_088493A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08849444; } @@ -3403,12 +3261,10 @@ L_088493A4: } L_088493C0: aot_gpr_31 = (0x088493C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088493C8u) goto L_088493C8; AOT_REGCACHE_SYNC_OUT(); return; L_088493C8: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08849444; } @@ -3418,7 +3274,6 @@ L_088493D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884940C; } @@ -3428,7 +3283,6 @@ L_088493E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884940C; } @@ -3439,7 +3293,6 @@ L_088493F0: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08849414; } @@ -3447,7 +3300,6 @@ L_088493F0: } L_08849404: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849444; } @@ -3455,7 +3307,6 @@ L_08849404: } L_0884940C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -3470,7 +3321,6 @@ L_08849414: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08849440; @@ -3483,7 +3333,6 @@ L_08849444: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-972)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08849464; } @@ -3493,7 +3342,6 @@ L_08849454: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08849470; } @@ -3514,9 +3362,7 @@ L_08849470: goto L_08849478; L_08849478: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A128; } @@ -3527,7 +3373,6 @@ L_08849488: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0884A128; } @@ -3537,7 +3382,6 @@ L_0884949C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849578; } @@ -3545,12 +3389,10 @@ L_0884949C: } L_088494AC: aot_gpr_31 = (0x088494B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088494B4u) goto L_088494B4; AOT_REGCACHE_SYNC_OUT(); return; L_088494B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849578; } @@ -3563,7 +3405,6 @@ L_088494BC: AOT_REGCACHE_SYNC_OUT(); return; L_088494C4: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08849578; } @@ -3574,7 +3415,6 @@ L_088494CC: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08849578; } @@ -3596,7 +3436,6 @@ L_088494E0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[26] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08849500u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08849500u) goto L_08849500; AOT_REGCACHE_SYNC_OUT(); return; L_08849500: @@ -3615,9 +3454,7 @@ L_08849500: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08849578; } @@ -3625,7 +3462,6 @@ L_08849500: } L_08849528: aot_gpr_31 = (0x08849530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08849530u) goto L_08849530; AOT_REGCACHE_SYNC_OUT(); return; L_08849530: @@ -3647,9 +3483,7 @@ L_08849530: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08849578; } @@ -3657,7 +3491,6 @@ L_08849530: } L_08849564: aot_gpr_31 = (0x0884956Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884956Cu) goto L_0884956C; AOT_REGCACHE_SYNC_OUT(); return; L_0884956C: @@ -3679,9 +3512,7 @@ L_08849578: L_08849588: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884961C; } @@ -3703,7 +3534,6 @@ L_0884959C: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088495E4; @@ -3733,7 +3563,6 @@ L_0884961C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849660; } @@ -3744,7 +3573,6 @@ L_0884962C: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849660; } @@ -3757,7 +3585,6 @@ L_08849640: AOT_REGCACHE_SYNC_OUT(); return; L_08849648: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08849660; } @@ -3770,7 +3597,6 @@ L_08849650: AOT_REGCACHE_SYNC_OUT(); return; L_08849658: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08849674; } @@ -3779,7 +3605,6 @@ L_08849658: L_08849660: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884967C; } @@ -3787,7 +3612,6 @@ L_08849660: } L_0884966C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849734; } @@ -3795,7 +3619,6 @@ L_0884966C: } L_08849674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -3809,7 +3632,6 @@ L_0884967C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088496B0; } @@ -3834,7 +3656,6 @@ L_088496B0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849734; } @@ -3844,7 +3665,6 @@ L_088496D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08849734; } @@ -3852,7 +3672,6 @@ L_088496D0: } L_088496E0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08849714; } @@ -3877,7 +3696,6 @@ L_088496FC: AOT_REGCACHE_SYNC_OUT(); return; L_0884970C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0884971C; } @@ -3893,7 +3711,6 @@ L_08849714: } L_0884971C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08849734; } @@ -3910,7 +3727,6 @@ L_08849734: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884975C; } @@ -3925,7 +3741,6 @@ L_08849748: goto L_08849754; L_08849754: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088497C0; } @@ -3933,7 +3748,6 @@ L_08849754: } L_0884975C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -3946,7 +3760,6 @@ L_08849764: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088497C0; } @@ -3980,9 +3793,7 @@ L_08849780: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088497C0; } @@ -3990,7 +3801,6 @@ L_08849780: } L_088497B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -4000,7 +3810,6 @@ L_088497C0: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088497F8; } @@ -4019,7 +3828,6 @@ L_088497DC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088497D0; } @@ -4030,9 +3838,7 @@ L_088497F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08849844; } @@ -4056,9 +3862,7 @@ L_08849814: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08849E50; } @@ -4070,7 +3874,6 @@ L_08849844: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884986C; } @@ -4102,11 +3905,20 @@ L_0884987C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(18848))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08849894: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(92))); aot_gpr_5 = (aot_gpr_4 + static_cast(248)); @@ -4138,7 +3950,6 @@ L_088498C4: AOT_REGCACHE_SYNC_OUT(); return; L_088498DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088498F8; } @@ -4169,7 +3980,6 @@ L_08849904: L_0884990C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08849920; } @@ -4177,7 +3987,6 @@ L_0884990C: } L_08849918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4207,7 +4016,6 @@ L_08849950: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08849994; } @@ -4224,7 +4032,6 @@ L_08849960: AOT_REGCACHE_SYNC_OUT(); return; L_08849978: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849994; } @@ -4240,7 +4047,6 @@ L_08849980: AOT_REGCACHE_SYNC_OUT(); return; L_08849994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4277,7 +4083,6 @@ L_088499CC: AOT_REGCACHE_SYNC_OUT(); return; L_088499E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849A00; } @@ -4308,7 +4113,6 @@ L_08849A0C: L_08849A14: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08849A28; } @@ -4316,7 +4120,6 @@ L_08849A14: } L_08849A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4353,7 +4156,6 @@ L_08849A58: AOT_REGCACHE_SYNC_OUT(); return; L_08849A70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849A8C; } @@ -4369,7 +4171,6 @@ L_08849A78: AOT_REGCACHE_SYNC_OUT(); return; L_08849A8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4406,7 +4207,6 @@ L_08849AC4: AOT_REGCACHE_SYNC_OUT(); return; L_08849ADC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849AF8; } @@ -4422,7 +4222,6 @@ L_08849AE4: AOT_REGCACHE_SYNC_OUT(); return; L_08849AF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4459,7 +4258,6 @@ L_08849B30: AOT_REGCACHE_SYNC_OUT(); return; L_08849B48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849B64; } @@ -4475,7 +4273,6 @@ L_08849B50: AOT_REGCACHE_SYNC_OUT(); return; L_08849B64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4512,7 +4309,6 @@ L_08849B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08849BB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849BD0; } @@ -4528,7 +4324,6 @@ L_08849BBC: AOT_REGCACHE_SYNC_OUT(); return; L_08849BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4565,7 +4360,6 @@ L_08849C08: AOT_REGCACHE_SYNC_OUT(); return; L_08849C20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849C3C; } @@ -4581,7 +4375,6 @@ L_08849C28: AOT_REGCACHE_SYNC_OUT(); return; L_08849C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4618,7 +4411,6 @@ L_08849C74: AOT_REGCACHE_SYNC_OUT(); return; L_08849C8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849CA8; } @@ -4634,7 +4426,6 @@ L_08849C94: AOT_REGCACHE_SYNC_OUT(); return; L_08849CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4671,7 +4462,6 @@ L_08849CE0: AOT_REGCACHE_SYNC_OUT(); return; L_08849CF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849D14; } @@ -4687,7 +4477,6 @@ L_08849D00: AOT_REGCACHE_SYNC_OUT(); return; L_08849D14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4724,7 +4513,6 @@ L_08849D4C: AOT_REGCACHE_SYNC_OUT(); return; L_08849D64: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849D80; } @@ -4740,7 +4528,6 @@ L_08849D6C: AOT_REGCACHE_SYNC_OUT(); return; L_08849D80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4777,7 +4564,6 @@ L_08849DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08849DD0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849DEC; } @@ -4793,7 +4579,6 @@ L_08849DD8: AOT_REGCACHE_SYNC_OUT(); return; L_08849DEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4810,7 +4595,6 @@ L_08849DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08849E0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08849E50; } @@ -4840,7 +4624,6 @@ L_08849E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08849E48: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08849E50; } @@ -4859,7 +4642,6 @@ L_08849E50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-958)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08849EB4; } @@ -4868,7 +4650,6 @@ L_08849E50: L_08849E84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849EB4; } @@ -4880,7 +4661,6 @@ L_08849E90: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08849EB4; } @@ -4895,7 +4675,6 @@ L_08849EB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-972)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08849ED4; } @@ -4905,7 +4684,6 @@ L_08849EC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08849EE0; } @@ -4919,9 +4697,7 @@ L_08849ED4: L_08849EE0: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A0B4; } @@ -4931,9 +4707,7 @@ L_08849EF4: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08849FA0; } @@ -4942,7 +4716,6 @@ L_08849EF4: L_08849F0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849FA0; } @@ -4951,7 +4724,6 @@ L_08849F0C: L_08849F18: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08849FA0; } @@ -4964,7 +4736,6 @@ L_08849F24: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849FA0; } @@ -4972,12 +4743,10 @@ L_08849F24: } L_08849F40: aot_gpr_31 = (0x08849F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08849F48u) goto L_08849F48; AOT_REGCACHE_SYNC_OUT(); return; L_08849F48: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08849F60; } @@ -4987,7 +4756,6 @@ L_08849F50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08849FA0; } @@ -4996,7 +4764,6 @@ L_08849F50: L_08849F60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08849FA0; } @@ -5010,7 +4777,6 @@ L_08849F6C: L_08849F74: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08849F94; } @@ -5024,7 +4790,6 @@ L_08849F80: AOT_REGCACHE_SYNC_OUT(); return; L_08849F8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08849FA0; } @@ -5043,12 +4808,10 @@ L_08849FA0: ctx.gpr[17] = (aot_gpr_4 << 16u); ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_31 = (0x08849FBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08849FBCu) goto L_08849FBC; AOT_REGCACHE_SYNC_OUT(); return; L_08849FBC: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884A00C; } @@ -5058,7 +4821,6 @@ L_08849FC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08849FF0; } @@ -5094,7 +4856,6 @@ L_0884A00C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884A070; } @@ -5103,7 +4864,6 @@ L_0884A00C: L_0884A01C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A054; } @@ -5116,7 +4876,6 @@ L_0884A028: AOT_REGCACHE_SYNC_OUT(); return; L_0884A030: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884A054; } @@ -5160,9 +4919,7 @@ L_0884A088: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(636))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A0B4; } @@ -5170,7 +4927,6 @@ L_0884A088: } L_0884A0A0: { const bool branch_taken = static_cast(ctx.gpr[17]) <= 0; - // nop if (branch_taken) { goto L_0884A0B4; } @@ -5185,7 +4941,6 @@ L_0884A0B4: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A128; } @@ -5211,7 +4966,6 @@ L_0884A0DC: L_0884A0E4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0884A118; } @@ -5230,7 +4984,6 @@ L_0884A0F0: AOT_REGCACHE_SYNC_OUT(); return; L_0884A110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A128; } @@ -5240,7 +4993,6 @@ L_0884A118: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884A0C4; } @@ -5251,9 +5003,7 @@ L_0884A128: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A19C; } @@ -5267,7 +5017,6 @@ L_0884A144: L_0884A14C: aot_gpr_4 = (ctx.gpr[2] < static_cast(225) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A204; } @@ -5285,7 +5034,6 @@ L_0884A164: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1840), aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A204; } @@ -5294,7 +5042,6 @@ L_0884A164: L_0884A17C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1840))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A204; } @@ -5308,7 +5055,6 @@ L_0884A188: AOT_REGCACHE_SYNC_OUT(); return; L_0884A194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A204; } @@ -5318,7 +5064,6 @@ L_0884A19C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-967)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0884A204; } @@ -5329,9 +5074,7 @@ L_0884A1AC: aot_gpr_4 = (17352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A1DC; } @@ -5345,7 +5088,6 @@ L_0884A1C8: AOT_REGCACHE_SYNC_OUT(); return; L_0884A1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A204; } @@ -5356,9 +5098,7 @@ L_0884A1DC: aot_gpr_4 = (17430u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A204; } @@ -5373,7 +5113,6 @@ L_0884A1F8: L_0884A204: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -5386,7 +5125,6 @@ L_0884A210: AOT_REGCACHE_SYNC_OUT(); return; L_0884A218: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -5398,9 +5136,7 @@ L_0884A220: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A360; } @@ -5410,7 +5146,6 @@ L_0884A240: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -5436,7 +5171,6 @@ L_0884A264: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A350; } @@ -5478,9 +5212,7 @@ L_0884A2B8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A350; } @@ -5496,7 +5228,6 @@ L_0884A2DC: L_0884A2F0: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0884A320; } @@ -5534,7 +5265,6 @@ L_0884A320: AOT_REGCACHE_SYNC_OUT(); return; L_0884A348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A360; } @@ -5544,7 +5274,6 @@ L_0884A350: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884A250; } @@ -5569,7 +5298,17 @@ L_0884A360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884A390: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5601,7 +5340,6 @@ L_0884A3D0: goto L_0884A3DC; L_0884A3DC: aot_gpr_31 = (0x0884A3E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884A3E4u) goto L_0884A3E4; AOT_REGCACHE_SYNC_OUT(); return; L_0884A3E4: @@ -5633,9 +5371,7 @@ L_0884A418: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884A4A8; } @@ -5646,7 +5382,6 @@ L_0884A434: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -5657,7 +5392,6 @@ L_0884A434: L_0884A450: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0884A470; @@ -5699,7 +5433,6 @@ L_0884A494: AOT_REGCACHE_SYNC_OUT(); return; L_0884A4A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A4FC; } @@ -5710,7 +5443,6 @@ L_0884A4A8: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -5721,7 +5453,6 @@ L_0884A4A8: L_0884A4C4: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0884A4E4; @@ -5755,7 +5486,6 @@ L_0884A4F4: L_0884A4FC: aot_gpr_4 = (ctx.gpr[17] < static_cast(49) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A5B4; } @@ -5771,7 +5501,17 @@ L_0884A508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884A520: ctx.gpr[19] = (0u | 26u); aot_gpr_5 = (ctx.gpr[18] + static_cast(320)); @@ -5854,7 +5594,6 @@ L_0884A530: AOT_REGCACHE_SYNC_OUT(); return; L_0884A598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A5B4; } @@ -5872,7 +5611,6 @@ L_0884A5B0: goto L_0884A5B4; L_0884A5B4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0884A5F4; } @@ -5918,7 +5656,17 @@ L_0884A600: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884A620: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5954,7 +5702,6 @@ L_0884A6B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A6D4; } @@ -5970,7 +5717,6 @@ L_0884A6CC: } L_0884A6D4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0884A6FC; } @@ -5983,7 +5729,6 @@ L_0884A6DC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A6FC; } @@ -6012,7 +5757,6 @@ L_0884A718: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(620), std::bit_cast(ctx.fpr[16])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(604), ctx.gpr[10]); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0884A894; } @@ -6054,7 +5798,6 @@ L_0884A72C: L_0884A760: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0884A774; @@ -6065,7 +5808,6 @@ L_0884A774: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(636), ctx.gpr[11]); goto L_0884A7AC; @@ -6115,7 +5857,6 @@ L_0884A7CC: aot_gpr_4 = (ctx.gpr[10] << 4u); aot_gpr_4 = (ctx.gpr[11] + aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0884A810; @@ -6164,7 +5905,6 @@ L_0884A810: AOT_REGCACHE_SYNC_OUT(); return; L_0884A864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884A894; } @@ -6177,7 +5917,6 @@ L_0884A86C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884A894; } @@ -6191,7 +5930,6 @@ L_0884A888: L_0884A894: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(628), std::bit_cast(ctx.fpr[22])); goto L_0884A8C4; @@ -6201,9 +5939,7 @@ L_0884A8A8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(612), ctx.gpr[17]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B254; } @@ -6217,7 +5953,6 @@ L_0884A8C4: aot_gpr_5 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(609), static_cast(aot_gpr_4)); if (branch_taken) { @@ -6289,7 +6024,6 @@ L_0884A970: L_0884A974: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0884A9C4; } @@ -6398,7 +6132,6 @@ L_0884AA0C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(592), std::bit_cast(aot_fpr_13)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(608), static_cast(aot_gpr_16)); goto L_0884AE28; @@ -6797,7 +6530,6 @@ L_0884AC5C: } L_0884AC64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884AD38; } @@ -6823,7 +6555,6 @@ L_0884AC74: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_0884ACB8; @@ -6838,7 +6569,6 @@ L_0884ACB8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884ACFC; } @@ -6852,7 +6582,6 @@ L_0884ACDC: L_0884ACE4: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884ACFC; } @@ -6875,7 +6604,6 @@ L_0884ACFC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884AD38; } @@ -6889,7 +6617,6 @@ L_0884AD1C: L_0884AD24: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884AD38; } @@ -6938,7 +6665,6 @@ L_0884AD58: AOT_REGCACHE_SYNC_OUT(); return; L_0884AD9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884ADDC; } @@ -6969,7 +6695,6 @@ L_0884ADDC: AOT_REGCACHE_SYNC_OUT(); return; L_0884ADE8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0884AE1C; } @@ -6978,9 +6703,7 @@ L_0884ADE8: L_0884ADF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884AE1C; } @@ -6990,7 +6713,6 @@ L_0884AE04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0884AE1C; } @@ -7014,9 +6736,7 @@ L_0884AE24: L_0884AE28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B254; } @@ -7413,7 +7133,6 @@ L_0884B06C: } L_0884B074: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884B15C; } @@ -7439,7 +7158,6 @@ L_0884B084: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_0884B0C8; @@ -7471,7 +7189,6 @@ L_0884B0EC: L_0884B100: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884B118; } @@ -7510,7 +7227,6 @@ L_0884B138: L_0884B148: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884B15C; } @@ -7561,7 +7277,6 @@ L_0884B180: AOT_REGCACHE_SYNC_OUT(); return; L_0884B1C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884B20C; } @@ -7593,7 +7308,6 @@ L_0884B20C: AOT_REGCACHE_SYNC_OUT(); return; L_0884B218: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0884B24C; } @@ -7602,9 +7316,7 @@ L_0884B218: L_0884B220: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B24C; } @@ -7614,7 +7326,6 @@ L_0884B234: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0884B24C; } @@ -7644,7 +7355,6 @@ L_0884B254: L_0884B260: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(1660))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884B2D0; } @@ -7652,7 +7362,6 @@ L_0884B260: } L_0884B26C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0884B2D0; } @@ -7662,7 +7371,6 @@ L_0884B274: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1896))); aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0884B290; } @@ -7671,7 +7379,6 @@ L_0884B274: L_0884B284: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1904))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0884B2D0; } @@ -7689,9 +7396,7 @@ L_0884B290: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B334; } @@ -7710,9 +7415,7 @@ L_0884B2D0: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B334; } @@ -7746,7 +7449,6 @@ L_0884B334: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884B534; } @@ -7755,9 +7457,7 @@ L_0884B334: L_0884B354: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B444; } @@ -7765,7 +7465,6 @@ L_0884B354: } L_0884B368: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0884B418; } @@ -7773,9 +7472,7 @@ L_0884B368: } L_0884B370: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B418; } @@ -7783,9 +7480,7 @@ L_0884B370: } L_0884B380: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B3C8; } @@ -7796,9 +7491,7 @@ L_0884B390: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B3FC; } @@ -7822,9 +7515,7 @@ L_0884B3C8: aot_gpr_4 = (49024u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B3FC; } @@ -7867,9 +7558,7 @@ L_0884B418: L_0884B444: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B534; } @@ -7877,7 +7566,6 @@ L_0884B444: } L_0884B458: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0884B508; } @@ -7885,9 +7573,7 @@ L_0884B458: } L_0884B460: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B508; } @@ -7895,9 +7581,7 @@ L_0884B460: } L_0884B470: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B4B8; } @@ -7908,9 +7592,7 @@ L_0884B480: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B4EC; } @@ -7934,9 +7616,7 @@ L_0884B4B8: aot_gpr_4 = (49024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B4EC; } @@ -8001,7 +7681,17 @@ L_0884B534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884B57C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8027,7 +7717,6 @@ L_0884B5D0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(615)))))); aot_gpr_5 = (aot_gpr_5 & 128u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884B60C; } @@ -8072,7 +7761,6 @@ L_0884B624: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 16384u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884B6B4; } @@ -8082,7 +7770,6 @@ L_0884B65C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 4096u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884B6B4; } @@ -8095,7 +7782,6 @@ L_0884B66C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884B6B4; } @@ -8176,9 +7862,7 @@ L_0884B728: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29904))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B810; } @@ -8188,9 +7872,7 @@ L_0884B740: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1520))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884B810; } @@ -8206,7 +7888,6 @@ L_0884B758: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884B79C; } @@ -8219,7 +7900,6 @@ L_0884B780: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884B7E8; } @@ -8294,7 +7974,6 @@ L_0884B7E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884B810; } @@ -8320,7 +7999,6 @@ L_0884B810: L_0884B830: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0884B848; } @@ -8329,7 +8007,6 @@ L_0884B830: L_0884B83C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0884B8E4; } @@ -8348,7 +8025,6 @@ L_0884B854: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884B87C; } @@ -8363,7 +8039,6 @@ L_0884B870: L_0884B87C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0884B8E4; } @@ -8376,7 +8051,6 @@ L_0884B888: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884B8D0; } @@ -8389,7 +8063,6 @@ L_0884B8A4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884B8E4; } @@ -8399,7 +8072,6 @@ L_0884B8C0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884B8E4; } @@ -8432,7 +8104,17 @@ L_0884B8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884B918: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8444,7 +8126,6 @@ L_0884B918: aot_fpr_20 = std::bit_cast(0u); ctx.gpr[17] = (aot_gpr_4 + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -8502,7 +8183,6 @@ L_0884B974: AOT_REGCACHE_SYNC_OUT(); return; L_0884B9C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884BA5C; } @@ -8511,9 +8191,7 @@ L_0884B9C4: L_0884B9CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884BA5C; } @@ -8596,7 +8274,6 @@ L_0884BA5C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_0884BA80; @@ -8708,9 +8385,7 @@ L_0884BB28: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884BD2C; } @@ -8975,7 +8650,17 @@ L_0884BD2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884BD64: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8996,7 +8681,6 @@ L_0884BDA0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(84))); aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 43u, 0x0884C508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9012,7 +8696,6 @@ L_0884BDB8: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0884BDE8; @@ -9022,7 +8705,6 @@ L_0884BDE8: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_16 + static_cast(48)); if (branch_taken) { @@ -9037,7 +8719,6 @@ L_0884BE00: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0884BE24; @@ -9047,9 +8728,7 @@ L_0884BE24: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 43u, 0x0884C508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9059,7 +8738,6 @@ L_0884BE3C: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0884BE58; } @@ -9078,7 +8756,6 @@ L_0884BE58: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0884BE78; } @@ -9088,7 +8765,6 @@ L_0884BE68: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); ctx.gpr[7] = (0u | 8u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0884BE80; } @@ -9108,9 +8784,7 @@ L_0884BE80: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 43u, 0x0884C508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9118,7 +8792,6 @@ L_0884BE80: } L_0884BEB0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 20u, 0x0884C280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9128,7 +8801,6 @@ L_0884BEB8: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 43u, 0x0884C508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9138,7 +8810,6 @@ L_0884BEC8: aot_gpr_4 = (ctx.gpr[20] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1596))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 18u, 0x0884C268u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9151,9 +8822,7 @@ L_0884BED8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 18u, 0x0884C268u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9171,7 +8840,6 @@ L_0884BEFC: } L_0884BF0C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 3u, 0x0884C09Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9179,7 +8847,6 @@ L_0884BF0C: } L_0884BF14: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0884BFE8; } @@ -9220,7 +8887,6 @@ L_0884BF1C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 3u, 0x0884C09Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9236,7 +8902,6 @@ L_0884BF7C: } L_0884BF84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 3u, 0x0884C09Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9276,7 +8941,6 @@ L_0884BF8C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 3u, 0x0884C09Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0018.cpp b/profiles/vcs/generated/generated_unit_0018.cpp index a9613c1..37133a2 100644 --- a/profiles/vcs/generated/generated_unit_0018.cpp +++ b/profiles/vcs/generated/generated_unit_0018.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0018[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, - 20, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 0, 40, 0, 41, 0, 0, 0, 42, 0, - 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 53, 0, 0, 54, - 0, 55, 0, 56, 0, 57, 58, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 68, 0, 69, 0, 0, 0, 0, - 70, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, - 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, - 85, 0, 86, 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, 90, 0, 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 0, 103, 0, 0, 104, 0, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 107, 0, - 0, 0, 0, 108, 0, 109, 0, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 121, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 130, 0, 0, - 131, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, - 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 142, 143, 144, 0, 145, 0, 146, 147, 0, 0, - 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, 151, 0, - 0, 0, 0, 152, 0, 0, 153, 0, 154, 0, 0, 0, 155, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, - 0, 0, 0, 159, 160, 0, 161, 0, 0, 162, 163, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 0, 166, 0, 167, 0, 168, 0, 0, 0, - 0, 169, 0, 170, 0, 0, 0, 0, 171, 172, 0, 0, 0, 0, 173, 0, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, 176, 0, 0, 177, 178, - 0, 0, 0, 179, 0, 0, 0, 180, 0, 181, 0, 0, 0, 182, 183, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 188, 0, 189, 0, 0, 0, 190, 0, 0, 0, 191, 0, - 192, 0, 0, 0, 193, 0, 194, 0, 0, 0, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, 202, 0, 203, 0, 0, 204, - 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 210, 0, - 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 215, 0, 216, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, - 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 223, 0, 0, 224, 225, 0, 0, 0, 0, 0, 0, - 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 232, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, - 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 239, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, - 0, 242, 0, 0, 0, 243, 0, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, - 0, 0, 249, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 256, 0, 257, - 0, 258, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 0, 261, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 273, 0, 0, - 274, 0, 275, 0, 276, 277, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 282, - 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 291, 292, 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, - 297, 0, 0, 298, 0, 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, - 0, 0, 0, 304, 0, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 307, 308, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, - 311, 0, 312, 0, 313, 314, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, 320, 0, 321, - 0, 322, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 330, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, - 0, 0, 0, 335, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, - 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, - 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 362, 0, 363, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, - 0, 0, 0, 367, 0, 0, 0, 368, 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, - 0, 0, 375, 0, 0, 0, 376, 0, 377, 0, 378, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 382, 0, - 0, 383, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, - 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 402, 0, 403, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 408, 0, 409, 0, 410, 0, 411, 0, 0, 0, - 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, - 0, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 424, - 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 429, 0, - 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 444, 0, 445, 0, 446, 0, 0, 0, 0, 0, - 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 450, 0, 451, 0, 452, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, - 0, 0, 455, 0, 0, 0, 456, 0, 0, 457, 0, 0, 0, 458, 0, 459, 0, 460, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, - 0, 0, 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 467, 0, 0, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, - 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 483, 0, 0, 0, 484, 0, 0, - 485, 0, 0, 0, 0, 0, 0, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 0, 0, 0, 491, 492, 493, 0, 494, 495, 0, 0, 0, 0, 0, - 0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 0, 511, 0, - 512, 0, 513, 0, 514, 515, 0, 516, 0, 0, 517, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 522, 0, - 0, 523, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 530, 0, 0, - 0, 0, 0, 0, 531, 0, 0, 532, 0, 533, 0, 0, 534, 0, 535, 0, 0, 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, - 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 541, 0, 542, 0, 543, 0, 544, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 0, 553, 0, 554, 0, 0, 555, 0, 0, - 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 559, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 561, 0, 562, 0, 0, 563, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, 0, 0, - 573, 0, 574, 0, 0, 575, 0, 0, 576, 0, 577, 0, 0, 0, 578, 579, 0, 0, 580, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, - 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 592, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 596, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 600, 0, 0, 0, 0, 0, 601, 0, 0, 0, 602, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 0, 606, 0, 0, 607, 0, 0, 608, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 611, 0, 612, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 615, 0, 616, 0, 0, - 617, 0, 618, 0, 0, 0, 0, 619, 0, 620, 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 625, 0, 0, 0, 626, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 628, 0, 629, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 635, - 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 640, 0, 641, 0, 0, 0, - 0, 0, 642, 0, 0, 643, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 646, 0, 647, 0, 0, 0, 0, 0, 648, 0, 0, - 649, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 0, 656, - 0, 0, 657, 0, 658, 0, 0, 0, 0, 659, 0, 0, 660, 0, 661, 0, 0, 0, 0, 662, 663, 0, 0, 664, 0, 0, 665, 0, 666, 0, 667, 0, - 0, 668, 0, 0, 669, 0, 670, 0, 0, 671, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 676, 0, 0, 677, 0, 678, 0, 0, - 0, 0, 679, 0, 680, 0, 681, 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, - 0, 686, 687, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, 690, 0, 691, 692, 0, 0, 693, 0, 694, 0, 0, 0, 695, 696, 0, 0, 697, 0, 0, - 0, 698, 0, 699, 0, 0, 700, 0, 0, 0, 701, 0, 702, 0, 0, 703, 0, 704, 0, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 707, 0, 0, - 708, 0, 0, 0, 0, 709, 0, 0, 710, 711, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 715, 0, 716, 717, 0, 0, 0, 0, 718, 0, 0, 719, 0, 0, 720, 0, 721, 722, 0, 0, 723, 0, 724, 0, 0, 0, 725, 726, 0, 0, 727, - 0, 0, 0, 728, 0, 729, 0, 0, 730, 0, 0, 0, 731, 0, 732, 0, 0, 733, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 736, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 739, 0, 0, - 740, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, 0, 0, 0, 744, 745, 0, 0, 0, 0, 0, - 0, 0, 0, 746, 0, 0, 747, 0, 0, 748, 0, 749, 0, 750, 0, 751, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 753, 0, 0, 0, 754, 0, 755, 756, 0, 757, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 759, 0, 0, 760, 0, 761, 0, 762, 0, 0, 0, 0, 763, 764, 0, 0, 0, 0, 0, 765, 0, 0, 766, 0, 767, 0, 0, 0, 0, 768, - 0, 0, 0, 0, 0, 769, 0, 770, 0, 771, 0, 0, 0, 0, 772, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, - 0, 775, 0, 776, 0, 0, 0, 777, 0, 0, 778, 0, 0, 779, 0, 780, 0, 781, 0, 782, 0, 783, 0, 0, 0, 784, 0, 0, 785, 0, 0, 786, - 0, 787, 0, 788, 0, 0, 0, 789, 0, 790, 0, 0, 791, 0, 792, 0, 0, 0, 793, 0, 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 0, 0, - 798, 0, 0, 799, 0, 0, 800, 0, 801, 0, 802, 0, 803, 0, 0, 804, 805, 0, 0, 0, 806, 0, 0, 807, 0, 0, 808, 0, 809, 0, 810, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0018[64] = { + 0x4100108000040001ull, 0x4008100408024000ull, 0x0148044544550000ull, 0x020800840000A000ull, + 0x4550002020401200ull, 0x9282A80080008014ull, 0x0A5021080900056Aull, 0x8000100002009091ull, + 0x4010AC8504094908ull, 0x5204A84008024424ull, 0x042A200049055528ull, 0x0810A11122244840ull, + 0x5100000135C88801ull, 0x1514065804025148ull, 0x00056288C888430Aull, 0x8011085144510002ull, + 0x4056000294888000ull, 0x0320A208042A4444ull, 0x080080200A201411ull, 0x4000A52220009488ull, + 0x10224142A4444054ull, 0x2820080000222801ull, 0x05228808A8020235ull, 0x1108090908102382ull, + 0x1000000000231108ull, 0x0022020AA22202B5ull, 0x0404828820085622ull, 0x4028220440044440ull, + 0x8080000020010004ull, 0x0000002000808800ull, 0x88082A88880AC000ull, 0x4091120241021544ull, + 0x0000244002200A08ull, 0xA880000000010008ull, 0x4400440415488880ull, 0x4440040482042A24ull, + 0x0004450022044004ull, 0x0000200080002001ull, 0x0415444405600000ull, 0x48890120810AA244ull, + 0x0002440088A00420ull, 0x06E1550122500080ull, 0x0002010000000042ull, 0x540814B54AA95510ull, + 0x2800500008001022ull, 0x2A90100201025290ull, 0x0000C502252AAA80ull, 0x0204C5252AAA10A5ull, + 0x0000500000240000ull, 0x8480000120000120ull, 0x0008080900104100ull, 0x2910A90024912441ull, + 0x0000400044148A85ull, 0x15001480A800A405ull, 0x8521400520A800A4ull, 0x0080125254985214ull, + 0x8002245429080008ull, 0x2142944A2629A486ull, 0x98A6921A00112321ull, 0x28000100210A5128ull, + 0x0004AA4806140005ull, 0x8520C2A400012D10ull, 0x922AA48A0200C2A0ull, 0x549195491524528Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0018[64] = { + 1u, 7u, 14u, 27u, 33u, 43u, 55u, 70u, 78u, 94u, 108u, 124u, 138u, 152u, 169u, 186u, + 199u, 211u, 226u, 236u, 249u, 265u, 274u, 290u, 304u, 311u, 327u, 341u, 352u, 357u, 361u, 375u, + 390u, 398u, 404u, 417u, 430u, 439u, 443u, 455u, 471u, 480u, 496u, 500u, 523u, 531u, 545u, 561u, + 582u, 586u, 593u, 600u, 617u, 628u, 642u, 657u, 674u, 686u, 708u, 728u, 740u, 753u, 769u, 787u, }; void recomp_unit_0018_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0018_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0884C000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0018[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0018[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0018[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0884C000; @@ -1010,7 +917,6 @@ L_0884C000: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C09C; } @@ -1079,7 +985,6 @@ L_0884C0B0: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0884C0E0; @@ -1089,9 +994,7 @@ L_0884C0E0: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C268; } @@ -1111,9 +1014,7 @@ L_0884C0F8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C268; } @@ -1122,7 +1023,6 @@ L_0884C0F8: L_0884C138: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C16C; } @@ -1146,9 +1046,7 @@ L_0884C16C: aot_gpr_4 = (17402u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C268; } @@ -1162,7 +1060,6 @@ L_0884C188: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0884C1B0; @@ -1187,7 +1084,6 @@ L_0884C1CC: ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0884C1F8; @@ -1216,12 +1112,10 @@ L_0884C1F8: AOT_REGCACHE_SYNC_OUT(); return; L_0884C240: aot_gpr_31 = (0x0884C248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884C248u) goto L_0884C248; AOT_REGCACHE_SYNC_OUT(); return; L_0884C248: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884C268; } @@ -1243,7 +1137,6 @@ L_0884C268: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0017_entry, 17u, 662u, 0x0884BEC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1251,7 +1144,6 @@ L_0884C268: } L_0884C278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C508; } @@ -1259,7 +1151,6 @@ L_0884C278: } L_0884C280: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0884C508; } @@ -1269,7 +1160,6 @@ L_0884C288: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C508; } @@ -1279,7 +1169,6 @@ L_0884C298: aot_gpr_4 = (ctx.gpr[20] + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1276))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884C4F8; } @@ -1292,9 +1181,7 @@ L_0884C2A8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C4F8; } @@ -1309,7 +1196,6 @@ L_0884C2CC: goto L_0884C2D8; L_0884C2D8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0884C388; } @@ -1346,7 +1232,6 @@ L_0884C2E0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C388; } @@ -1354,7 +1239,6 @@ L_0884C2E0: } L_0884C334: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C388; } @@ -1420,7 +1304,6 @@ L_0884C39C: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0884C3CC; @@ -1430,9 +1313,7 @@ L_0884C3CC: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C4F8; } @@ -1452,9 +1333,7 @@ L_0884C3E4: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C4F8; } @@ -1463,7 +1342,6 @@ L_0884C3E4: L_0884C424: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C458; } @@ -1487,9 +1365,7 @@ L_0884C458: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884C4F8; } @@ -1526,12 +1402,10 @@ L_0884C494: AOT_REGCACHE_SYNC_OUT(); return; L_0884C4D0: aot_gpr_31 = (0x0884C4D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884C4D8u) goto L_0884C4D8; AOT_REGCACHE_SYNC_OUT(); return; L_0884C4D8: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884C4F8; } @@ -1553,7 +1427,6 @@ L_0884C4F8: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884C298; } @@ -1561,7 +1434,6 @@ L_0884C4F8: } L_0884C508: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0017_entry, 17u, 649u, 0x0884BDA0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1585,7 +1457,17 @@ L_0884C510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C53C: aot_gpr_4 = (48896u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -1606,7 +1488,17 @@ L_0884C53C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C57C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -1627,7 +1519,6 @@ L_0884C57C: } L_0884C5AC: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0884C5C4; } @@ -1635,7 +1526,6 @@ L_0884C5AC: } L_0884C5B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C5E4; } @@ -1643,7 +1533,6 @@ L_0884C5B4: } L_0884C5BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C66C; } @@ -1660,7 +1549,6 @@ L_0884C5C4: AOT_REGCACHE_SYNC_OUT(); return; L_0884C5DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0884C604; } @@ -1674,7 +1562,6 @@ L_0884C5E4: L_0884C5F0: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0884C60C; } @@ -1682,7 +1569,6 @@ L_0884C5F0: } L_0884C5FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C618; } @@ -1690,7 +1576,6 @@ L_0884C5FC: } L_0884C604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C66C; } @@ -1705,7 +1590,6 @@ L_0884C614: goto L_0884C618; L_0884C618: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0884C628; } @@ -1713,7 +1597,6 @@ L_0884C618: } L_0884C620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C66C; } @@ -1768,7 +1651,17 @@ L_0884C66C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C68C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1785,7 +1678,17 @@ L_0884C6A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1806,7 +1709,6 @@ L_0884C6D0: L_0884C6D8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C6EC; } @@ -1828,7 +1730,17 @@ L_0884C6EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C700: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1843,7 +1755,17 @@ L_0884C710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C71C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1859,7 +1781,17 @@ L_0884C730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C73C: aot_gpr_5 = (0u | 89u); aot_fpr_12 = std::bit_cast(0u); @@ -1873,7 +1805,17 @@ L_0884C73C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C764: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1915,12 +1857,21 @@ L_0884C7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C7FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C840; } @@ -1945,7 +1896,6 @@ L_0884C820: L_0884C82C: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884C840; } @@ -1953,7 +1903,6 @@ L_0884C82C: } L_0884C838: aot_gpr_31 = (0x0884C840u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884C840u) goto L_0884C840; AOT_REGCACHE_SYNC_OUT(); return; L_0884C840: @@ -1963,7 +1912,17 @@ L_0884C840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C84C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2015,7 +1974,6 @@ L_0884C8A8: goto L_0884C8AC; L_0884C8AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884C8BC; } @@ -2038,7 +1996,17 @@ L_0884C8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C8D0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(28), 0u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(18), static_cast(0u)); @@ -2053,12 +2021,21 @@ L_0884C8D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C8F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0884C908u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0206_entry, 206u, 305u, 0x08B3D594u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884C908u) goto L_0884C908; AOT_REGCACHE_SYNC_OUT(); return; L_0884C908: @@ -2068,7 +2045,17 @@ L_0884C908: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C914: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(160))); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -2078,12 +2065,21 @@ L_0884C914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C928: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0884C938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0206_entry, 206u, 49u, 0x08B3C350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884C938u) goto L_0884C938; AOT_REGCACHE_SYNC_OUT(); return; L_0884C938: @@ -2093,7 +2089,17 @@ L_0884C938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C944: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2122,13 +2128,22 @@ L_0884C96C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884C9B4; } @@ -2136,7 +2151,6 @@ L_0884C998: } L_0884C9AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884C9BC; } @@ -2144,7 +2158,6 @@ L_0884C9AC: } L_0884C9B4: aot_gpr_31 = (0x0884C9BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0206_entry, 206u, 399u, 0x08B3DAC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884C9BCu) goto L_0884C9BC; AOT_REGCACHE_SYNC_OUT(); return; L_0884C9BC: @@ -2154,7 +2167,17 @@ L_0884C9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884C9C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(156))); @@ -2188,13 +2211,11 @@ L_0884C9F8: AOT_REGCACHE_SYNC_OUT(); return; L_0884CA0C: aot_gpr_31 = (0x0884CA14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 327u, 0x088099B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884CA14u) goto L_0884CA14; AOT_REGCACHE_SYNC_OUT(); return; L_0884CA14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884CA30; } @@ -2202,7 +2223,6 @@ L_0884CA14: } L_0884CA20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884CA38; } @@ -2210,7 +2230,6 @@ L_0884CA20: } L_0884CA28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884CAD4; } @@ -2218,7 +2237,6 @@ L_0884CA28: } L_0884CA30: aot_gpr_31 = (0x0884CA38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884CA38u) goto L_0884CA38; AOT_REGCACHE_SYNC_OUT(); return; L_0884CA38: @@ -2228,7 +2246,6 @@ L_0884CA38: AOT_REGCACHE_SYNC_OUT(); return; L_0884CA40: aot_gpr_31 = (0x0884CA48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884CA48u) goto L_0884CA48; AOT_REGCACHE_SYNC_OUT(); return; L_0884CA48: @@ -2248,7 +2265,6 @@ L_0884CA60: L_0884CA6C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0884CAB4; } @@ -2302,7 +2318,17 @@ L_0884CAD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884CAE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2359,7 +2385,6 @@ L_0884CB64: L_0884CB74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(100))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0884CBA0; } @@ -2445,7 +2470,17 @@ L_0884CC00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884CC2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2480,7 +2515,6 @@ L_0884CC5C: goto L_0884CC60; L_0884CC60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884CC70; } @@ -2504,7 +2538,17 @@ L_0884CC74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884CC80: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[18]); @@ -2546,7 +2590,6 @@ L_0884CCE0: } L_0884CCF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884CEC8; } @@ -2555,7 +2598,6 @@ L_0884CCF0: L_0884CCF8: ctx.gpr[20] = (ctx.gpr[22] | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[22])) && aot_fpr_20 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); if (branch_taken) { @@ -2570,7 +2612,6 @@ L_0884CD0C: goto L_0884D624; L_0884CD18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884CD90; } @@ -2580,7 +2621,6 @@ L_0884CD20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884CD38; } @@ -2588,7 +2628,6 @@ L_0884CD20: } L_0884CD30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884CD90; } @@ -2644,7 +2683,6 @@ L_0884CD90: L_0884CD98: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884CCF8; } @@ -2669,7 +2707,6 @@ L_0884CDA8: } L_0884CDC8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0884CDE0; } @@ -2688,7 +2725,6 @@ L_0884CDE0: AOT_REGCACHE_SYNC_OUT(); return; L_0884CDE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884CE0C; } @@ -2748,9 +2784,7 @@ L_0884CE4C: goto L_0884CE5C; L_0884CE5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884CEC0; } @@ -2770,9 +2804,7 @@ L_0884CE78: goto L_0884CE7C; L_0884CE7C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(ctx.fpr[22])) && ctx.fpr[24] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884CEA4; } @@ -2803,7 +2835,6 @@ L_0884CEB4: goto L_0884CEB8; L_0884CEB8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0884CE7C; } @@ -2836,7 +2867,17 @@ L_0884CEC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884CF04: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -2874,7 +2915,6 @@ L_0884CF58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884CF80; } @@ -2884,7 +2924,6 @@ L_0884CF68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29600))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884CF80; } @@ -2892,7 +2931,6 @@ L_0884CF68: } L_0884CF78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884CFAC; } @@ -2907,7 +2945,6 @@ L_0884CF80: AOT_REGCACHE_SYNC_OUT(); return; L_0884CF90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884CFAC; } @@ -2936,7 +2973,6 @@ L_0884CFC0: ctx.gpr[20] = (ctx.gpr[20] + static_cast(4)); ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0884CF40; } @@ -2960,7 +2996,17 @@ L_0884CFD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884CFFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -2979,7 +3025,6 @@ L_0884D03C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29600))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D084; } @@ -2989,7 +3034,6 @@ L_0884D04C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D070; } @@ -3002,7 +3046,6 @@ L_0884D05C: goto L_0884DD94; L_0884D068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D07C; } @@ -3015,7 +3058,6 @@ L_0884D070: goto L_0884D854; L_0884D07C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D2BC; } @@ -3050,7 +3092,6 @@ L_0884D0C8: AOT_REGCACHE_SYNC_OUT(); return; L_0884D0D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D108; } @@ -3064,7 +3105,6 @@ L_0884D0D8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D108; } @@ -3080,7 +3120,6 @@ L_0884D108: ctx.gpr[21] = (ctx.gpr[21] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D0C8; } @@ -3090,7 +3129,6 @@ L_0884D118: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D200; } @@ -3105,7 +3143,6 @@ L_0884D128: L_0884D138: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D1E4; } @@ -3118,7 +3155,6 @@ L_0884D144: AOT_REGCACHE_SYNC_OUT(); return; L_0884D14C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D1E4; } @@ -3155,9 +3191,7 @@ L_0884D168: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<4u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D1A4; } @@ -3188,7 +3222,6 @@ L_0884D18C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D1B4; } @@ -3230,7 +3263,6 @@ L_0884D1BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D1E4; } @@ -3252,7 +3284,6 @@ L_0884D1E4: ctx.gpr[20] = (ctx.gpr[20] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D138; } @@ -3262,7 +3293,6 @@ L_0884D200: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D254; } @@ -3310,7 +3340,6 @@ L_0884D254: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D2BC; } @@ -3370,7 +3399,17 @@ L_0884D2BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884D2EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3402,7 +3441,6 @@ L_0884D31C: goto L_0884D854; L_0884D328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D330; } @@ -3415,7 +3453,17 @@ L_0884D330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884D33C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3434,7 +3482,6 @@ L_0884D374: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29600))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D3BC; } @@ -3444,7 +3491,6 @@ L_0884D384: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D3A8; } @@ -3457,7 +3503,6 @@ L_0884D394: goto L_0884E5B4; L_0884D3A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D3B4; } @@ -3470,7 +3515,6 @@ L_0884D3A8: goto L_0884E140; L_0884D3B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D5AC; } @@ -3498,7 +3542,6 @@ L_0884D3F8: ctx.gpr[20] = (ctx.gpr[21] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D458; } @@ -3511,7 +3554,6 @@ L_0884D408: AOT_REGCACHE_SYNC_OUT(); return; L_0884D410: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D448; } @@ -3525,7 +3567,6 @@ L_0884D418: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D448; } @@ -3541,7 +3582,6 @@ L_0884D448: ctx.gpr[20] = (ctx.gpr[20] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D408; } @@ -3569,7 +3609,6 @@ L_0884D474: AOT_REGCACHE_SYNC_OUT(); return; L_0884D47C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D4D4; } @@ -3594,7 +3633,6 @@ L_0884D4A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D4C4; } @@ -3638,7 +3676,6 @@ L_0884D4D4: ctx.gpr[20] = (ctx.gpr[20] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D474; } @@ -3648,7 +3685,6 @@ L_0884D4F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D544; } @@ -3709,7 +3745,6 @@ L_0884D544: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D5AC; } @@ -3755,19 +3790,27 @@ L_0884D5AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884D5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_gpr_31 = (0x0884D5ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0026_entry, 26u, 177u, 0x0886D34Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884D5ECu) goto L_0884D5EC; AOT_REGCACHE_SYNC_OUT(); return; L_0884D5EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D608; } @@ -3776,7 +3819,6 @@ L_0884D5EC: L_0884D5F4: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D610; } @@ -3784,7 +3826,6 @@ L_0884D5F4: } L_0884D600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D614; } @@ -3809,14 +3850,23 @@ L_0884D614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884D624: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -3832,9 +3882,7 @@ L_0884D644: aot_fpr_14 = ctx.fpr[15] + aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(16), std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D67C; } @@ -3842,7 +3890,6 @@ L_0884D644: } L_0884D66C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D6E8; } @@ -3858,9 +3905,7 @@ L_0884D674: } L_0884D67C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D6E8; } @@ -3874,7 +3919,6 @@ L_0884D68C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D6E8; } @@ -3892,7 +3936,6 @@ L_0884D6AC: } L_0884D6BC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0884D6D4; } @@ -3926,9 +3969,7 @@ L_0884D6E8: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D720; } @@ -3938,9 +3979,7 @@ L_0884D704: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(16), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D720; } @@ -3960,7 +3999,17 @@ L_0884D724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884D734: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3979,9 +4028,7 @@ L_0884D750: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D78C; } @@ -3992,7 +4039,6 @@ L_0884D76C: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0884D7A0; } @@ -4029,9 +4075,7 @@ L_0884D7AC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_14)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884D840; } @@ -4042,7 +4086,6 @@ L_0884D7CC: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0884D7F0; } @@ -4065,7 +4108,6 @@ L_0884D7F0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0884D820; } @@ -4082,7 +4124,6 @@ L_0884D820: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0884D840; } @@ -4108,7 +4149,17 @@ L_0884D844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884D854: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4150,7 +4201,6 @@ L_0884D8F0: } L_0884D900: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884D964; } @@ -4158,7 +4208,6 @@ L_0884D900: } L_0884D908: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884DD5C; } @@ -4174,7 +4223,6 @@ L_0884D914: AOT_REGCACHE_SYNC_OUT(); return; L_0884D91C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884D954; } @@ -4188,7 +4236,6 @@ L_0884D924: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884D954; } @@ -4204,7 +4251,6 @@ L_0884D954: ctx.gpr[23] = (ctx.gpr[23] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D914; } @@ -4223,7 +4269,6 @@ L_0884D974: AOT_REGCACHE_SYNC_OUT(); return; L_0884D97C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884DA14; } @@ -4240,7 +4285,6 @@ L_0884D98C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DA14; } @@ -4254,7 +4298,6 @@ L_0884D9A4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DA14; } @@ -4279,7 +4322,6 @@ L_0884D9D4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DA14; } @@ -4295,7 +4337,6 @@ L_0884DA14: ctx.gpr[23] = (ctx.gpr[23] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884D974; } @@ -4311,7 +4352,6 @@ L_0884DA28: AOT_REGCACHE_SYNC_OUT(); return; L_0884DA30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884DB88; } @@ -4349,9 +4389,7 @@ L_0884DA4C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<4u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884DA8C; } @@ -4382,7 +4420,6 @@ L_0884DA74: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884DA9C; } @@ -4424,7 +4461,6 @@ L_0884DAA4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DB88; } @@ -4444,7 +4480,6 @@ L_0884DAC8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DB88; } @@ -4462,7 +4497,6 @@ L_0884DAE8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DB28; } @@ -4478,7 +4512,6 @@ L_0884DB28: ctx.gpr[20] = (ctx.gpr[20] | ctx.gpr[30]); ctx.gpr[20] = (0u < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0884DB88; } @@ -4503,7 +4536,6 @@ L_0884DB48: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DB88; } @@ -4522,7 +4554,6 @@ L_0884DB88: ctx.gpr[21] = (ctx.gpr[21] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884DA28; } @@ -4532,7 +4563,6 @@ L_0884DBA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884DBF8; } @@ -4580,7 +4610,6 @@ L_0884DBF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884DD5C; } @@ -4600,7 +4629,6 @@ L_0884DC08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0884DC74; } @@ -4644,9 +4672,7 @@ L_0884DC74: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884DD3C; } @@ -4658,9 +4684,7 @@ L_0884DCDC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884DD2C; } @@ -4721,7 +4745,17 @@ L_0884DD5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884DD94: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4764,7 +4798,6 @@ L_0884DE3C: AOT_REGCACHE_SYNC_OUT(); return; L_0884DE44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884DE7C; } @@ -4778,7 +4811,6 @@ L_0884DE4C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DE7C; } @@ -4794,7 +4826,6 @@ L_0884DE7C: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884DE3C; } @@ -4813,7 +4844,6 @@ L_0884DE9C: AOT_REGCACHE_SYNC_OUT(); return; L_0884DEA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884DF08; } @@ -4830,7 +4860,6 @@ L_0884DEB4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DF08; } @@ -4844,7 +4873,6 @@ L_0884DECC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DF08; } @@ -4867,7 +4895,6 @@ L_0884DF08: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884DE9C; } @@ -4884,7 +4911,6 @@ L_0884DF20: AOT_REGCACHE_SYNC_OUT(); return; L_0884DF28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884DFDC; } @@ -4933,7 +4959,6 @@ L_0884DF60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DFDC; } @@ -4953,7 +4978,6 @@ L_0884DF84: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884DFDC; } @@ -4969,7 +4993,6 @@ L_0884DFB0: ctx.gpr[21] = (ctx.gpr[21] | ctx.gpr[17]); ctx.gpr[21] = (0u < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0884DFDC; } @@ -4995,7 +5018,6 @@ L_0884DFDC: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884DF20; } @@ -5006,7 +5028,6 @@ L_0884DFF8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884E054; } @@ -5055,7 +5076,6 @@ L_0884E054: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E10C; } @@ -5104,7 +5124,6 @@ L_0884E064: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0884E0A8; } @@ -5166,7 +5185,17 @@ L_0884E10C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884E140: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5200,7 +5229,6 @@ L_0884E1DC: ctx.gpr[22] = (ctx.gpr[21] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E23C; } @@ -5213,7 +5241,6 @@ L_0884E1EC: AOT_REGCACHE_SYNC_OUT(); return; L_0884E1F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884E22C; } @@ -5227,7 +5254,6 @@ L_0884E1FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E22C; } @@ -5243,7 +5269,6 @@ L_0884E22C: ctx.gpr[22] = (ctx.gpr[22] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E1EC; } @@ -5271,7 +5296,6 @@ L_0884E258: AOT_REGCACHE_SYNC_OUT(); return; L_0884E260: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884E2F8; } @@ -5288,7 +5312,6 @@ L_0884E270: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E2F8; } @@ -5302,7 +5325,6 @@ L_0884E288: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E2F8; } @@ -5327,7 +5349,6 @@ L_0884E2B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E2F8; } @@ -5343,7 +5364,6 @@ L_0884E2F8: ctx.gpr[23] = (ctx.gpr[23] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E258; } @@ -5371,7 +5391,6 @@ L_0884E324: AOT_REGCACHE_SYNC_OUT(); return; L_0884E32C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884E448; } @@ -5420,7 +5439,6 @@ L_0884E364: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E448; } @@ -5440,7 +5458,6 @@ L_0884E388: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E448; } @@ -5458,7 +5475,6 @@ L_0884E3A8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E3E8; } @@ -5474,7 +5490,6 @@ L_0884E3E8: ctx.gpr[20] = (ctx.gpr[20] | ctx.gpr[30]); ctx.gpr[20] = (0u < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0884E448; } @@ -5499,7 +5514,6 @@ L_0884E408: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E448; } @@ -5518,7 +5532,6 @@ L_0884E448: ctx.gpr[21] = (ctx.gpr[21] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E324; } @@ -5528,7 +5541,6 @@ L_0884E464: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E4B8; } @@ -5589,7 +5601,6 @@ L_0884E4B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E57C; } @@ -5609,7 +5620,6 @@ L_0884E4C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0884E534; } @@ -5670,7 +5680,17 @@ L_0884E57C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884E5B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5712,7 +5732,6 @@ L_0884E658: AOT_REGCACHE_SYNC_OUT(); return; L_0884E660: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884E698; } @@ -5726,7 +5745,6 @@ L_0884E668: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E698; } @@ -5742,7 +5760,6 @@ L_0884E698: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E658; } @@ -5761,7 +5778,6 @@ L_0884E6B8: AOT_REGCACHE_SYNC_OUT(); return; L_0884E6C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884E724; } @@ -5778,7 +5794,6 @@ L_0884E6D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E724; } @@ -5792,7 +5807,6 @@ L_0884E6E8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E724; } @@ -5815,7 +5829,6 @@ L_0884E724: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E6B8; } @@ -5832,7 +5845,6 @@ L_0884E73C: AOT_REGCACHE_SYNC_OUT(); return; L_0884E744: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884E7F8; } @@ -5881,7 +5893,6 @@ L_0884E77C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E7F8; } @@ -5901,7 +5912,6 @@ L_0884E7A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E7F8; } @@ -5917,7 +5927,6 @@ L_0884E7CC: ctx.gpr[21] = (ctx.gpr[21] | ctx.gpr[17]); ctx.gpr[21] = (0u < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0884E7F8; } @@ -5943,7 +5952,6 @@ L_0884E7F8: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E73C; } @@ -5954,7 +5962,6 @@ L_0884E814: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E86C; } @@ -6015,7 +6022,6 @@ L_0884E86C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884E91C; } @@ -6062,7 +6068,6 @@ L_0884E87C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0884E8B8; } @@ -6124,14 +6129,33 @@ L_0884E91C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884E950: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884E958: ctx.gpr[2] = (2181u << 16u); jump_target = aot_gpr_31; @@ -6139,12 +6163,21 @@ L_0884E958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884E964: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0884E974u); - // nop goto L_0884E958; L_0884E974: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6153,7 +6186,17 @@ L_0884E974: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884E980: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6182,7 +6225,6 @@ L_0884E9B0: goto L_0884E9B8; L_0884E9B8: aot_gpr_31 = (0x0884E9C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884E9C0u) goto L_0884E9C0; AOT_REGCACHE_SYNC_OUT(); return; L_0884E9C0: @@ -6204,7 +6246,6 @@ L_0884E9D8: goto L_0884E9DC; L_0884E9DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884E9E8; } @@ -6227,7 +6268,17 @@ L_0884E9E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EA04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6267,7 +6318,17 @@ L_0884EA18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EAA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -6318,7 +6379,6 @@ L_0884EB10: } L_0884EB20: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884EB38; } @@ -6326,7 +6386,6 @@ L_0884EB20: } L_0884EB28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884EB38; } @@ -6334,12 +6393,10 @@ L_0884EB28: } L_0884EB30: aot_gpr_31 = (0x0884EB38u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884EB38u) goto L_0884EB38; AOT_REGCACHE_SYNC_OUT(); return; L_0884EB38: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0884EB64; } @@ -6356,7 +6413,6 @@ L_0884EB40: } L_0884EB4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884EB64; } @@ -6364,7 +6420,6 @@ L_0884EB4C: } L_0884EB54: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884EB64; } @@ -6372,7 +6427,6 @@ L_0884EB54: } L_0884EB5C: aot_gpr_31 = (0x0884EB64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884EB64u) goto L_0884EB64; AOT_REGCACHE_SYNC_OUT(); return; L_0884EB64: @@ -6406,7 +6460,6 @@ L_0884EB80: goto L_0884EB88; L_0884EB88: aot_gpr_31 = (0x0884EB90u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884EB90u) goto L_0884EB90; AOT_REGCACHE_SYNC_OUT(); return; L_0884EB90: @@ -6420,7 +6473,6 @@ L_0884EB94: L_0884EB9C: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884EBB0; } @@ -6445,7 +6497,17 @@ L_0884EBB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EBCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(188))); @@ -6480,7 +6542,17 @@ L_0884EC04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EC14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(240))); @@ -6492,7 +6564,17 @@ L_0884EC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EC30: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -6527,7 +6609,6 @@ L_0884EC6C: AOT_REGCACHE_SYNC_OUT(); return; L_0884ECB0: aot_gpr_31 = (0x0884ECB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 63u, 0x08B0C4CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884ECB8u) goto L_0884ECB8; AOT_REGCACHE_SYNC_OUT(); return; L_0884ECB8: @@ -6573,7 +6654,6 @@ L_0884ED10: } L_0884ED1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884ED60; } @@ -6590,7 +6670,6 @@ L_0884ED24: } L_0884ED30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884ED60; } @@ -6644,7 +6723,17 @@ L_0884ED84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EDB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -6665,28 +6754,65 @@ L_0884EDD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EDDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EDE4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EDEC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EDF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(188))); @@ -6704,7 +6830,6 @@ L_0884EDF4: } L_0884EE1C: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0884EE2C; } @@ -6712,7 +6837,6 @@ L_0884EE1C: } L_0884EE24: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_0884EE4C; } @@ -6736,7 +6860,6 @@ L_0884EE34: } L_0884EE3C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884EE2C; } @@ -6744,7 +6867,6 @@ L_0884EE3C: } L_0884EE44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884EE74; } @@ -6752,7 +6874,6 @@ L_0884EE44: } L_0884EE4C: aot_gpr_31 = (0x0884EE54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 842u, 0x08993964u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884EE54u) goto L_0884EE54; AOT_REGCACHE_SYNC_OUT(); return; L_0884EE54: @@ -6766,7 +6887,6 @@ L_0884EE54: } L_0884EE60: aot_gpr_31 = (0x0884EE68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 842u, 0x08993964u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884EE68u) goto L_0884EE68; AOT_REGCACHE_SYNC_OUT(); return; L_0884EE68: @@ -6793,7 +6913,6 @@ L_0884EE84: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0884EEA8; } @@ -6811,7 +6930,6 @@ L_0884EEA8: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0884EE84; } @@ -6874,7 +6992,17 @@ L_0884EF1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EF30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(188))); @@ -6888,7 +7016,6 @@ L_0884EF30: } L_0884EF44: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0884EF6C; } @@ -6912,7 +7039,6 @@ L_0884EF54: } L_0884EF5C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884EF4C; } @@ -6920,7 +7046,6 @@ L_0884EF5C: } L_0884EF64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884EF88; } @@ -6956,7 +7081,6 @@ L_0884EF88: L_0884EF94: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0884EFA8; } @@ -6990,7 +7114,17 @@ L_0884EFBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884EFC8: ctx.gpr[11] = (aot_gpr_5 & 65535u); ctx.gpr[10] = (ctx.gpr[8] & 65535u); @@ -7019,8 +7153,6 @@ L_0884EFE4: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.gpr[9] = (ctx.gpr[9] & 65535u); ctx.gpr[8] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[11])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_12)); @@ -7038,7 +7170,6 @@ L_0884EFE4: L_0884F048: ctx.gpr[2] = (0u | 3u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884F0B0; } @@ -7058,8 +7189,6 @@ L_0884F054: ctx.gpr[9] = (ctx.gpr[9] & 65535u); aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[10])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (ctx.gpr[8] & 65535u); @@ -7075,7 +7204,6 @@ L_0884F054: } L_0884F0B0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0884F114; } @@ -7113,7 +7241,6 @@ L_0884F0B8: L_0884F114: ctx.gpr[2] = (0u | 1u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884F174; } @@ -7149,7 +7276,6 @@ L_0884F120: L_0884F174: ctx.gpr[2] = (0u | 4u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0884F1DC; } @@ -7165,8 +7291,6 @@ L_0884F180: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(192))); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[10])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[9] = (ctx.gpr[9] & 65535u); aot_gpr_5 = (ctx.lo); @@ -7187,7 +7311,17 @@ L_0884F1DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884F1E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7226,7 +7360,17 @@ L_0884F238: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884F250: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7279,7 +7423,17 @@ L_0884F2AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884F2CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -7473,7 +7627,6 @@ L_0884F43C: } L_0884F448: aot_gpr_31 = (0x0884F450u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884F450u) goto L_0884F450; AOT_REGCACHE_SYNC_OUT(); return; L_0884F450: @@ -7488,7 +7641,6 @@ L_0884F468: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884F334; } @@ -7517,7 +7669,17 @@ L_0884F478: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884F4B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -7548,9 +7710,7 @@ L_0884F508: aot_gpr_4 = (16544u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884F56C; } @@ -7601,9 +7761,7 @@ L_0884F57C: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884F5E0; } @@ -7652,9 +7810,7 @@ L_0884F5F0: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884F64C; } @@ -7703,9 +7859,7 @@ L_0884F65C: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884F6B8; } @@ -7750,7 +7904,6 @@ L_0884F6C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884F6E0; } @@ -7775,7 +7928,6 @@ L_0884F6E8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884F708; } @@ -7800,7 +7952,6 @@ L_0884F710: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884F730; } @@ -7837,7 +7988,6 @@ L_0884F74C: L_0884F750: aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884F7B0; } @@ -7862,7 +8012,6 @@ L_0884F768: } L_0884F770: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0884F798; } @@ -7871,7 +8020,6 @@ L_0884F770: L_0884F778: aot_gpr_4 = (ctx.gpr[18] | ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884F790; } @@ -7884,7 +8032,6 @@ L_0884F784: goto L_0884F790; L_0884F790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884F7B0; } @@ -7893,7 +8040,6 @@ L_0884F790: L_0884F798: aot_gpr_4 = (ctx.gpr[20] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884F7B0; } @@ -7922,7 +8068,17 @@ L_0884F7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884F7DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -7980,7 +8136,6 @@ L_0884F874: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(244), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884F9E0; } @@ -8084,7 +8239,6 @@ L_0884F928: } L_0884F934: aot_gpr_31 = (0x0884F93Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884F93Cu) goto L_0884F93C; AOT_REGCACHE_SYNC_OUT(); return; L_0884F93C: @@ -8120,7 +8274,6 @@ L_0884F964: L_0884F968: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884F984; } @@ -8179,7 +8332,6 @@ L_0884F9B0: } L_0884F9BC: aot_gpr_31 = (0x0884F9C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884F9C4u) goto L_0884F9C4; AOT_REGCACHE_SYNC_OUT(); return; L_0884F9C4: @@ -8191,7 +8343,6 @@ L_0884F9C4: goto L_0884F9D8; L_0884F9D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884FB74; } @@ -8202,7 +8353,6 @@ L_0884F9E0: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884FB74; } @@ -8224,7 +8374,6 @@ L_0884FA00: L_0884FA14: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) <= 0; - // nop if (branch_taken) { goto L_0884FA24; } @@ -8316,7 +8465,6 @@ L_0884FAB0: } L_0884FABC: aot_gpr_31 = (0x0884FAC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FAC4u) goto L_0884FAC4; AOT_REGCACHE_SYNC_OUT(); return; L_0884FAC4: @@ -8352,7 +8500,6 @@ L_0884FAEC: L_0884FAF0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884FB0C; } @@ -8411,7 +8558,6 @@ L_0884FB38: } L_0884FB44: aot_gpr_31 = (0x0884FB4Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FB4Cu) goto L_0884FB4C; AOT_REGCACHE_SYNC_OUT(); return; L_0884FB4C: @@ -8426,7 +8572,6 @@ L_0884FB60: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884F9F4; } @@ -8450,7 +8595,17 @@ L_0884FB74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884FBA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8475,7 +8630,6 @@ L_0884FBA0: } L_0884FBEC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0884FC8C; } @@ -8484,7 +8638,6 @@ L_0884FBEC: L_0884FBF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(184))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884FC8C; } @@ -8492,7 +8645,6 @@ L_0884FBF4: } L_0884FC00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0884FC8C; } @@ -8527,7 +8679,6 @@ L_0884FC50: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0884FC8C; } @@ -8545,7 +8696,6 @@ L_0884FC68: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[7] = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0884FC68; } @@ -8554,7 +8704,6 @@ L_0884FC68: L_0884FC8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884FCAC; } @@ -8578,7 +8727,6 @@ L_0884FCAC: AOT_REGCACHE_SYNC_OUT(); return; L_0884FCB4: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0884FD20; } @@ -8600,8 +8748,6 @@ L_0884FCC8: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); aot_gpr_5 = (ctx.gpr[9] + aot_gpr_5); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (ctx.lo); aot_gpr_6 = (ctx.gpr[7] + aot_gpr_6); @@ -8643,7 +8789,6 @@ L_0884FD2C: L_0884FD34: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0884FD94; } @@ -8659,8 +8804,6 @@ L_0884FD40: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); ctx.gpr[8] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[8]); @@ -8680,7 +8823,6 @@ L_0884FD88: goto L_0884FD94; L_0884FD94: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0884FDA4; } @@ -8688,7 +8830,6 @@ L_0884FD94: } L_0884FD9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0884FDE0; } @@ -8727,7 +8868,6 @@ L_0884FDD4: goto L_0884FDE0; L_0884FDE0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0884FE1C; } @@ -8736,9 +8876,7 @@ L_0884FDE0: L_0884FDE8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884FE1C; } @@ -8765,7 +8903,6 @@ L_0884FE14: } L_0884FE1C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0884FE3C; } @@ -8774,9 +8911,7 @@ L_0884FE1C: L_0884FE24: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0884FE3C; } @@ -8802,7 +8937,17 @@ L_0884FE3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0884FE64: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), ctx.gpr[17]); @@ -8816,7 +8961,6 @@ L_0884FE64: AOT_REGCACHE_SYNC_OUT(); return; L_0884FE84: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0884FEBC; } @@ -8846,7 +8990,6 @@ L_0884FEA8: } L_0884FEB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0884FECC; } @@ -8862,12 +9005,10 @@ L_0884FEBC: } L_0884FEC4: aot_gpr_31 = (0x0884FECCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FECCu) goto L_0884FECC; AOT_REGCACHE_SYNC_OUT(); return; L_0884FECC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0884FF38; } @@ -8897,12 +9038,10 @@ L_0884FEF0: } L_0884FEFC: aot_gpr_31 = (0x0884FF04u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FF04u) goto L_0884FF04; AOT_REGCACHE_SYNC_OUT(); return; L_0884FF04: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0884FF38; } @@ -8958,12 +9097,10 @@ L_0884FF54: } L_0884FF60: aot_gpr_31 = (0x0884FF68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FF68u) goto L_0884FF68; AOT_REGCACHE_SYNC_OUT(); return; L_0884FF68: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0884FFC0; } @@ -8993,12 +9130,10 @@ L_0884FF8C: } L_0884FF98: aot_gpr_31 = (0x0884FFA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FFA0u) goto L_0884FFA0; AOT_REGCACHE_SYNC_OUT(); return; L_0884FFA0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0884FFC0; } @@ -9042,12 +9177,10 @@ L_0884FFDC: } L_0884FFE8: aot_gpr_31 = (0x0884FFF0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0884FFF0u) goto L_0884FFF0; AOT_REGCACHE_SYNC_OUT(); return; L_0884FFF0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0019_entry, 19u, 9u, 0x08850048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0019.cpp b/profiles/vcs/generated/generated_unit_0019.cpp index 5752e95..9ce2ae2 100644 --- a/profiles/vcs/generated/generated_unit_0019.cpp +++ b/profiles/vcs/generated/generated_unit_0019.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0019[4095] = { - 1, 0, 2, 0, 0, 3, 0, 0, 4, 0, 5, 0, 6, 0, 7, 0, 0, 8, 9, 0, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 13, 0, - 14, 0, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 18, 0, 19, 0, 20, 21, 0, 0, 0, 22, 0, 0, 23, 0, 0, 24, 0, 25, 0, 26, - 0, 0, 0, 27, 0, 0, 28, 0, 0, 29, 0, 30, 0, 31, 0, 32, 33, 0, 34, 0, 35, 0, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, - 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 41, 0, 42, 0, 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 46, 0, - 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 57, 58, 0, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, - 0, 64, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 69, 0, 70, 0, 0, 0, - 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, - 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, - 0, 93, 94, 0, 95, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 0, 0, 0, 108, 0, 109, 0, 0, 0, - 0, 0, 110, 0, 111, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 117, - 0, 118, 0, 119, 0, 0, 0, 0, 0, 120, 121, 0, 122, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 125, 0, 126, 0, 0, 0, - 0, 0, 127, 0, 128, 0, 0, 0, 129, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, - 133, 134, 0, 135, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, - 0, 142, 0, 143, 0, 0, 0, 0, 0, 144, 0, 145, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, - 0, 150, 0, 151, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 157, 0, 0, 0, 0, 0, 158, 159, 0, 160, 0, 0, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, - 0, 165, 0, 166, 0, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, - 0, 173, 0, 174, 0, 0, 0, 0, 0, 175, 0, 176, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, 0, - 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 183, 184, 0, 185, 0, 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, 0, - 0, 188, 0, 189, 0, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, - 0, 196, 0, 197, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, 0, 0, 202, 0, 203, 0, 0, 0, 0, - 204, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 209, 0, 210, 0, 0, 0, 0, - 0, 211, 0, 212, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, - 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 223, 0, 224, 0, 0, 0, 0, 0, 225, 0, 226, 0, 0, 0, 0, - 0, 227, 0, 228, 0, 0, 0, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, - 233, 234, 0, 235, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, - 0, 242, 0, 243, 0, 0, 0, 0, 0, 244, 0, 245, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 248, 0, 249, 0, 0, 0, 0, - 0, 250, 0, 251, 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 0, 0, 254, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, - 0, 0, 257, 0, 0, 0, 0, 0, 258, 259, 0, 260, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 263, 0, 264, 0, 0, 0, 0, - 0, 265, 0, 266, 0, 0, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 269, 0, 270, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, - 0, 273, 0, 274, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 284, 0, 285, 0, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 0, - 0, 288, 0, 289, 0, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 0, - 0, 296, 0, 297, 0, 0, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, - 304, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 309, 0, 310, 0, 0, 0, 0, - 0, 311, 0, 312, 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 317, 0, 318, 0, 0, 0, 0, - 0, 319, 0, 320, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 0, - 0, 327, 0, 328, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, - 333, 334, 0, 335, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 0, - 0, 342, 0, 343, 0, 0, 0, 0, 0, 344, 0, 345, 0, 0, 0, 0, 0, 346, 0, 347, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, - 0, 350, 0, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, - 0, 0, 357, 0, 0, 0, 0, 0, 358, 359, 0, 360, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, - 0, 365, 0, 366, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, 0, - 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 378, 0, 379, 0, 0, 0, 0, - 0, 380, 0, 381, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, - 0, 388, 0, 389, 0, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 394, 0, 395, 0, 0, 0, 0, - 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, - 402, 403, 0, 404, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 407, 0, 408, 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, - 0, 411, 0, 412, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 0, 0, 415, 0, 416, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, - 0, 419, 0, 420, 0, 0, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, - 0, 0, 426, 0, 0, 0, 0, 0, 427, 428, 0, 429, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 0, 432, 0, 433, 0, 0, 0, 0, - 0, 434, 0, 435, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 0, - 0, 442, 0, 443, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 0, - 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 452, 453, 0, 454, 0, 0, 0, 0, 0, 455, 0, 456, 0, 0, 0, 0, - 0, 457, 0, 458, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, 0, - 0, 465, 0, 466, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, 469, 0, 470, 0, 0, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, - 473, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 477, 478, 0, 479, 0, 0, 0, 0, - 0, 480, 0, 481, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 0, 0, 486, 0, 487, 0, 0, 0, 0, - 0, 488, 0, 489, 0, 0, 0, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 494, 0, 495, 0, 0, 0, 0, - 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, - 502, 503, 0, 504, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 509, 0, 510, 0, 0, 0, 0, - 0, 511, 0, 512, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 0, 0, - 0, 519, 0, 520, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, - 0, 0, 526, 0, 0, 0, 0, 0, 527, 528, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, 0, 0, 532, 0, 533, 0, 0, 0, 0, - 0, 534, 0, 535, 0, 0, 0, 0, 0, 536, 0, 537, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, - 0, 542, 0, 543, 0, 0, 0, 0, 0, 544, 0, 545, 0, 0, 0, 0, 0, 546, 0, 547, 0, 0, 0, 0, 548, 0, 0, 549, 0, 0, 0, 0, - 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, 553, 0, 554, 0, 0, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, - 0, 557, 0, 558, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, - 0, 565, 0, 566, 0, 0, 0, 0, 0, 567, 0, 568, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 0, 0, 571, 0, 572, 0, 0, 0, 0, - 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 577, 578, 0, 579, 0, 0, 0, 0, - 0, 580, 0, 581, 0, 0, 0, 0, 0, 582, 0, 583, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, - 0, 588, 0, 589, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, - 0, 596, 0, 597, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, - 602, 603, 0, 604, 0, 0, 0, 0, 0, 605, 0, 606, 0, 0, 0, 0, 0, 607, 0, 608, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 0, - 0, 611, 0, 612, 0, 0, 0, 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, - 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 622, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, - 0, 0, 626, 0, 0, 0, 0, 0, 627, 628, 0, 629, 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 0, - 0, 634, 0, 635, 0, 0, 0, 0, 0, 636, 0, 637, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 0, 640, 0, 641, 0, 0, 0, 0, - 0, 642, 0, 643, 0, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 0, 646, 0, 647, 0, 0, 0, 0, 648, 0, 0, 649, 0, 0, 0, 0, - 0, 0, 0, 650, 0, 0, 651, 0, 652, 0, 653, 0, 0, 0, 0, 0, 654, 655, 0, 656, 0, 0, 0, 0, 0, 657, 0, 658, 0, 0, 0, 0, - 0, 659, 0, 660, 0, 0, 0, 0, 0, 661, 0, 662, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, - 0, 666, 0, 0, 0, 0, 0, 667, 668, 0, 669, 0, 0, 0, 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, - 674, 0, 675, 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 0, 0, - 682, 0, 683, 0, 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, 0, 0, 0, - 0, 0, 0, 690, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 692, 693, 0, 694, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 0, - 697, 0, 698, 0, 0, 0, 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 701, 0, 702, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, - 705, 0, 706, 0, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 711, 0, 712, 0, 0, 0, 0, 713, - 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 717, 0, 718, 0, 0, 0, 0, 0, 719, 720, 0, 721, 0, 0, 0, 0, 0, - 722, 0, 723, 0, 0, 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 0, 0, 0, - 0, 0, 730, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 732, 733, 0, 734, 0, 0, 0, 0, 0, 735, 0, 736, 0, 0, 0, 0, 0, 737, - 0, 738, 0, 0, 0, 0, 0, 739, 0, 740, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 0, 0, 743, 0, 744, 0, 0, 0, 0, 0, 745, - 0, 746, 0, 0, 0, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 751, 752, - 0, 753, 0, 0, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, 0, 756, 0, 757, 0, 0, 0, 0, 0, 758, 0, 759, 0, 0, 0, 0, 0, 760, - 0, 761, 0, 0, 0, 0, 0, 762, 0, 763, 0, 0, 0, 0, 0, 764, 0, 765, 0, 0, 0, 0, 766, 0, 0, 767, 0, 0, 0, 0, 0, 0, - 0, 0, 768, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 770, 771, 0, 772, 0, 0, 0, 0, 0, 773, 0, 774, 0, 0, 0, 0, 0, 775, - 0, 776, 0, 0, 0, 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 779, 0, 780, 0, 0, 0, 0, 0, 781, 0, 782, 0, 0, 0, 0, 0, 783, - 0, 784, 0, 0, 0, 0, 785, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 789, 790, - 0, 791, 0, 0, 0, 0, 0, 792, 0, 793, 0, 0, 0, 0, 0, 794, 0, 795, 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, 0, 0, 0, 798, - 0, 799, 0, 0, 0, 0, 0, 800, 0, 801, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 804, 0, 0, 805, 0, 0, 0, 0, 0, 0, - 0, 0, 806, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 808, 809, 0, 810, 0, 0, 0, 0, 0, 811, 0, 812, 0, 0, 0, 0, 0, 813, - 0, 814, 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 0, 817, 0, 818, 0, 0, 0, 0, 0, 819, 0, 820, 0, 0, 0, 0, 0, 821, - 0, 822, 0, 0, 0, 0, 823, 0, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 827, 828, - 0, 829, 0, 0, 0, 0, 0, 830, 0, 831, 0, 0, 0, 0, 0, 832, 0, 833, 0, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 0, 0, 836, - 0, 837, 0, 0, 0, 0, 0, 838, 0, 839, 0, 0, 0, 0, 0, 840, 0, 841, 0, 0, 0, 0, 0, 842, 0, 843, 0, 0, 0, 0, 0, 844, - 0, 845, 0, 0, 0, 0, 0, 846, 0, 847, 0, 0, 0, 0, 848, 0, 0, 849, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, 0, 0, 0, - 851, 0, 0, 0, 0, 0, 852, 853, 0, 854, 0, 0, 0, 0, 0, 855, 0, 856, 0, 0, 0, 0, 0, 857, 0, 858, 0, 0, 0, 0, 0, 859, - 0, 860, 0, 0, 0, 0, 0, 861, 0, 862, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 865, 0, 866, 0, 0, 0, 0, 0, 867, - 0, 868, 0, 0, 0, 0, 0, 869, 0, 870, 0, 0, 0, 0, 0, 871, 0, 872, 0, 0, 0, 0, 873, 0, 0, 874, 0, 0, 0, 0, 0, 0, - 0, 875, 0, 0, 876, 0, 877, 0, 878, 0, 0, 0, 0, 0, 879, 880, 0, 881, 0, 0, 0, 0, 0, 882, 0, 883, 0, 0, 0, 0, 0, 884, - 0, 885, 0, 0, 0, 0, 0, 886, 0, 887, 0, 0, 0, 888, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 891, 0, 892, 0, 893, - 0, 0, 0, 0, 0, 894, 895, 0, 896, 0, 0, 0, 0, 0, 897, 0, 898, 0, 0, 0, 0, 0, 899, 0, 900, 0, 0, 0, 0, 0, 901, 0, - 902, 0, 0, 0, 903, 0, 0, 904, 0, 0, 0, 0, 0, 0, 0, 905, 0, 0, 906, 0, 907, 0, 908, 0, 0, 0, 0, 0, 909, 910, 0, 911, - 0, 0, 0, 0, 0, 912, 0, 913, 0, 0, 0, 0, 0, 914, 0, 915, 0, 0, 0, 0, 0, 916, 0, 917, 0, 0, 0, 918, 0, 0, 919, 0, - 0, 0, 0, 0, 0, 0, 0, 920, 0, 0, 0, 0, 0, 921, 0, 0, 0, 0, 0, 922, 923, 0, 924, 0, 0, 0, 0, 0, 925, 0, 926, 0, - 0, 0, 0, 0, 927, 0, 928, 0, 0, 0, 0, 0, 929, 0, 930, 0, 0, 0, 0, 0, 931, 0, 932, 0, 0, 0, 0, 0, 933, 0, 934, 0, - 0, 0, 0, 0, 935, 0, 936, 0, 0, 0, 0, 0, 937, 0, 938, 0, 0, 0, 0, 0, 939, 0, 940, 0, 0, 0, 0, 0, 941, 0, 942, 0, - 0, 0, 0, 943, 0, 0, 944, 0, 0, 0, 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 947, 948, 0, 949, 0, - 0, 0, 0, 0, 950, 0, 951, 0, 0, 0, 0, 0, 952, 0, 953, 0, 0, 0, 0, 0, 954, 0, 955, 0, 0, 0, 0, 0, 956, 0, 957, 0, - 0, 0, 0, 0, 958, 0, 959, 0, 0, 0, 0, 0, 960, 0, 961, 0, 0, 0, 0, 0, 962, 0, 963, 0, 0, 0, 0, 0, 964, 0, 965, 0, - 0, 0, 0, 966, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 968, 0, 0, 969, 0, 970, 0, 971, 0, 0, 0, 0, 0, 972, 973, 0, 974, 0, - 0, 0, 0, 0, 975, 0, 976, 0, 0, 0, 0, 0, 977, 0, 978, 0, 0, 0, 0, 0, 979, 0, 980, 0, 0, 0, 981, 0, 0, 982, 0, 0, - 0, 0, 0, 0, 0, 983, 0, 0, 984, 0, 985, 0, 986, 0, 0, 0, 0, 0, 987, 988, 0, 989, 0, 0, 0, 0, 0, 990, 0, 991, 0, 0, - 0, 0, 0, 992, 0, 993, 0, 0, 0, 0, 0, 994, 0, 995, 0, 0, 0, 996, 0, 0, 997, 0, 0, 0, 0, 0, 0, 0, 998, 0, 0, 999, - 0, 1000, 0, 1001, 0, 0, 0, 0, 0, 1002, 1003, 0, 1004, 0, 0, 0, 0, 0, 1005, 0, 1006, 0, 0, 0, 0, 0, 1007, 0, 1008, 0, 0, 0, - 0, 0, 1009, 0, 1010, 0, 0, 0, 1011, 0, 0, 1012, 0, 0, 0, 0, 0, 0, 0, 1013, 0, 0, 1014, 0, 0, 0, 0, 0, 1015, 0, 1016, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0019[64] = { + 0xA923549152465525ull, 0x4160A9010615AA48ull, 0x28282C1480914141ull, 0x1414141416082012ull, + 0x0820121414141414ull, 0x1414141414141416ull, 0x1414160A90121414ull, 0x0A0A0A0B04100914ull, + 0x10090A0A0A0A0A0Aull, 0x0A0A0A0A0A0A0B04ull, 0x0A0B0410090A0A0Aull, 0x0A0A0A0A0A0A0A0Aull, + 0x0A0A0A0A0B041009ull, 0x0410090A0A0A0A0Aull, 0x0A0A0A0A0A0A0A0Bull, 0x0A0A0B0410090A0Aull, + 0x090A0A0A0A0A0A0Aull, 0x0A0A0A0A0A0B0410ull, 0x0B0410090A0A0A0Aull, 0x0A0A0A0A0A0A0A0Aull, + 0x0A0A0A0B0410090Aull, 0x10090A0A0A0A0A0Aull, 0x0A0A0A0A0A0A0B04ull, 0x0A0A0A0A0B041009ull, + 0x0410090A0A0A0A0Aull, 0x0A0A0A0A0A0A0A0Bull, 0x0A0A0B0410090A0Aull, 0x090A0A0A0A0A0A0Aull, + 0x0A0A0A0A0A0B0410ull, 0x0B0410090A0A0A0Aull, 0x0A0A0A0A0A0A0A0Aull, 0x0A0A0A0B0410090Aull, + 0x10090A0A0A0A0A0Aull, 0x0A0A0A0A0A0A0B04ull, 0x0A0B0410090A0A0Aull, 0x0A0A0A0A0A0A0A0Aull, + 0x0A0A0A0A0B041009ull, 0x0410090A0A0A0A0Aull, 0x0A0A0A0A0A0A0A0Bull, 0x0A0A0B0410090A0Aull, + 0x090A0A0A0A0A0A0Aull, 0x08048A0A0A0B0548ull, 0x0505050505050582ull, 0x0505820804850505ull, + 0x8505050505050505ull, 0x024505050582A404ull, 0x828282828282C104ull, 0x82828282C1040242ull, + 0x8282C10402428282ull, 0xC104024282828282ull, 0x0242828282828282ull, 0x828282828282C104ull, + 0x82828282C1040242ull, 0x0402428282828282ull, 0x82828282828282C1ull, 0x8282C15202428282ull, + 0x41414160A9012282ull, 0x48A0A0A0B0548091ull, 0x5050505050582080ull, 0x5820804850505050ull, + 0x5050505050505050ull, 0x24505050582A4048ull, 0x90122828282C1520ull, 0x504809141414160Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0019[64] = { + 1u, 27u, 47u, 64u, 79u, 93u, 110u, 127u, 142u, 157u, 173u, 188u, 204u, 219u, 233u, 250u, + 265u, 281u, 296u, 311u, 327u, 342u, 357u, 373u, 388u, 402u, 419u, 434u, 450u, 465u, 480u, 496u, + 511u, 526u, 542u, 557u, 573u, 588u, 602u, 619u, 634u, 650u, 666u, 682u, 697u, 714u, 730u, 746u, + 761u, 776u, 791u, 806u, 822u, 837u, 851u, 868u, 885u, 902u, 920u, 935u, 950u, 966u, 983u, 1000u, }; void recomp_unit_0019_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -154,13 +49,25 @@ void recomp_unit_0019_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08850000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0019[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0019[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0019[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08850000; @@ -1207,12 +1114,10 @@ L_08850014: } L_08850020: aot_gpr_31 = (0x08850028u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_8, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08850028u) goto L_08850028; AOT_REGCACHE_SYNC_OUT(); return; L_08850028: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08850048; } @@ -1256,12 +1161,10 @@ L_08850064: } L_08850070: aot_gpr_31 = (0x08850078u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_8, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08850078u) goto L_08850078; AOT_REGCACHE_SYNC_OUT(); return; L_08850078: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088500C4; } @@ -1291,12 +1194,10 @@ L_0885009C: } L_088500A8: aot_gpr_31 = (0x088500B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_8, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088500B0u) goto L_088500B0; AOT_REGCACHE_SYNC_OUT(); return; L_088500B0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088500C4; } @@ -1334,12 +1235,10 @@ L_088500E0: } L_088500EC: aot_gpr_31 = (0x088500F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_8, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088500F4u) goto L_088500F4; AOT_REGCACHE_SYNC_OUT(); return; L_088500F4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08850140; } @@ -1369,12 +1268,10 @@ L_08850118: } L_08850124: aot_gpr_31 = (0x0885012Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_8, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0885012Cu) goto L_0885012C; AOT_REGCACHE_SYNC_OUT(); return; L_0885012C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08850140; } @@ -1395,7 +1292,6 @@ L_08850140: AOT_REGCACHE_SYNC_OUT(); return; L_08850148: aot_gpr_31 = (0x08850150u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 75u, 0x08B0C580u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08850150u) goto L_08850150; AOT_REGCACHE_SYNC_OUT(); return; L_08850150: @@ -1422,7 +1318,17 @@ L_08850168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850180: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1456,7 +1362,6 @@ L_088501AC: } L_088501B4: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08850240; } @@ -1476,7 +1381,6 @@ L_088501D4: goto L_088501D8; L_088501D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850250; } @@ -1547,7 +1451,17 @@ L_08850250: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885025C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1573,7 +1487,6 @@ L_0885027C: } L_08850288: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088502F4; } @@ -1593,7 +1506,6 @@ L_088502A8: goto L_088502AC; L_088502AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850304; } @@ -1647,7 +1559,17 @@ L_08850304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850310: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1669,11 +1591,20 @@ L_08850334: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(19128))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885034C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1688,7 +1619,6 @@ L_08850364: goto L_08850368; L_08850368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088504A4; } @@ -1862,7 +1792,17 @@ L_088504A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088504B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1884,11 +1824,20 @@ L_088504D4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(19296))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088504EC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1903,7 +1852,6 @@ L_08850504: goto L_08850508; L_08850508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850644; } @@ -2077,7 +2025,17 @@ L_08850644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850650: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2111,7 +2069,6 @@ L_0885067C: } L_08850684: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08850710; } @@ -2131,7 +2088,6 @@ L_088506A4: goto L_088506A8; L_088506A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850720; } @@ -2202,7 +2158,17 @@ L_08850720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885072C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2224,11 +2190,20 @@ L_08850750: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(19464))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850768: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2243,7 +2218,6 @@ L_08850780: goto L_08850784; L_08850784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088508C0; } @@ -2417,7 +2391,17 @@ L_088508C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088508CC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2439,11 +2423,20 @@ L_088508F0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(19632))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850908: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2458,7 +2451,6 @@ L_08850920: goto L_08850924; L_08850924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850A60; } @@ -2632,7 +2624,17 @@ L_08850A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850A6C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2654,11 +2656,20 @@ L_08850A90: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(19800))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850AA8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2673,7 +2684,6 @@ L_08850AC0: goto L_08850AC4; L_08850AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850C00; } @@ -2847,7 +2857,17 @@ L_08850C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850C0C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2869,11 +2889,20 @@ L_08850C30: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(19968))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850C48: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2888,7 +2917,6 @@ L_08850C60: goto L_08850C64; L_08850C64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850DA0; } @@ -3062,7 +3090,17 @@ L_08850DA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850DAC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3084,11 +3122,20 @@ L_08850DD0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(20136))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850DE8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3103,7 +3150,6 @@ L_08850E00: goto L_08850E04; L_08850E04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08850F40; } @@ -3277,7 +3323,17 @@ L_08850F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850F4C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3299,11 +3355,20 @@ L_08850F70: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(20304))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08850F88: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3318,7 +3383,6 @@ L_08850FA0: goto L_08850FA4; L_08850FA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088510E0; } @@ -3492,7 +3556,17 @@ L_088510E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088510EC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3514,11 +3588,20 @@ L_08851110: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(20472))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851128: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3533,7 +3616,6 @@ L_08851140: goto L_08851144; L_08851144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851280; } @@ -3707,7 +3789,17 @@ L_08851280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885128C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3729,11 +3821,20 @@ L_088512B0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(20640))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088512C8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3748,7 +3849,6 @@ L_088512E0: goto L_088512E4; L_088512E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851420; } @@ -3922,7 +4022,17 @@ L_08851420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885142C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3944,11 +4054,20 @@ L_08851450: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(20808))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851468: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3963,7 +4082,6 @@ L_08851480: goto L_08851484; L_08851484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088515C0; } @@ -4137,7 +4255,17 @@ L_088515C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088515CC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4159,11 +4287,20 @@ L_088515F0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(20992))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851608: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4178,7 +4315,6 @@ L_08851620: goto L_08851624; L_08851624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851700; } @@ -4301,7 +4437,17 @@ L_08851700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885170C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4323,11 +4469,20 @@ L_08851730: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(21192))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851748: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4342,7 +4497,6 @@ L_08851760: goto L_08851764; L_08851764: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088518A0; } @@ -4516,7 +4670,17 @@ L_088518A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088518AC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4538,11 +4702,20 @@ L_088518D0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(21360))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088518E8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4557,7 +4730,6 @@ L_08851900: goto L_08851904; L_08851904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851A40; } @@ -4731,7 +4903,17 @@ L_08851A40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851A4C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4753,11 +4935,20 @@ L_08851A70: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(21528))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851A88: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4772,7 +4963,6 @@ L_08851AA0: goto L_08851AA4; L_08851AA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851BE0; } @@ -4946,7 +5136,17 @@ L_08851BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851BEC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4968,11 +5168,20 @@ L_08851C10: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(21696))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851C28: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4987,7 +5196,6 @@ L_08851C40: goto L_08851C44; L_08851C44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851D80; } @@ -5161,7 +5369,17 @@ L_08851D80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851D8C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5183,11 +5401,20 @@ L_08851DB0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(21864))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851DC8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5202,7 +5429,6 @@ L_08851DE0: goto L_08851DE4; L_08851DE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08851F20; } @@ -5376,7 +5602,17 @@ L_08851F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851F2C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5398,11 +5634,20 @@ L_08851F50: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(22032))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08851F68: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5417,7 +5662,6 @@ L_08851F80: goto L_08851F84; L_08851F84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088520C0; } @@ -5591,7 +5835,17 @@ L_088520C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088520CC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5613,11 +5867,20 @@ L_088520F0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(22200))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852108: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5632,7 +5895,6 @@ L_08852120: goto L_08852124; L_08852124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852260; } @@ -5806,7 +6068,17 @@ L_08852260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885226C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5828,11 +6100,20 @@ L_08852290: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(22368))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088522A8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5847,7 +6128,6 @@ L_088522C0: goto L_088522C4; L_088522C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852400; } @@ -6021,7 +6301,17 @@ L_08852400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885240C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6043,11 +6333,20 @@ L_08852430: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(22536))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852448: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6062,7 +6361,6 @@ L_08852460: goto L_08852464; L_08852464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088525A0; } @@ -6236,7 +6534,17 @@ L_088525A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088525AC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6258,11 +6566,20 @@ L_088525D0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(22704))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088525E8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6277,7 +6594,6 @@ L_08852600: goto L_08852604; L_08852604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852740; } @@ -6451,7 +6767,17 @@ L_08852740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885274C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6473,11 +6799,20 @@ L_08852770: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(22872))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852788: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6492,7 +6827,6 @@ L_088527A0: goto L_088527A4; L_088527A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088528E0; } @@ -6666,7 +7000,17 @@ L_088528E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088528EC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6700,7 +7044,6 @@ L_08852918: } L_08852920: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088529AC; } @@ -6720,7 +7063,6 @@ L_08852940: goto L_08852944; L_08852944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088529BC; } @@ -6791,7 +7133,17 @@ L_088529BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088529C8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6813,11 +7165,20 @@ L_088529EC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(23040))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852A04: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6832,7 +7193,6 @@ L_08852A1C: goto L_08852A20; L_08852A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852B5C; } @@ -7006,7 +7366,17 @@ L_08852B5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852B68: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7028,11 +7398,20 @@ L_08852B8C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(23208))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852BA4: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7047,7 +7426,6 @@ L_08852BBC: goto L_08852BC0; L_08852BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852CFC; } @@ -7221,7 +7599,17 @@ L_08852CFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852D08: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7255,7 +7643,6 @@ L_08852D34: } L_08852D3C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08852DC8; } @@ -7275,7 +7662,6 @@ L_08852D5C: goto L_08852D60; L_08852D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852DD8; } @@ -7346,7 +7732,17 @@ L_08852DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852DE4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7368,11 +7764,20 @@ L_08852E08: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(23376))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852E20: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7387,7 +7792,6 @@ L_08852E38: goto L_08852E3C; L_08852E3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08852F18; } @@ -7510,7 +7914,17 @@ L_08852F18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852F24: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7532,11 +7946,20 @@ L_08852F48: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(23576))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08852F60: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7551,7 +7974,6 @@ L_08852F78: goto L_08852F7C; L_08852F7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853058; } @@ -7674,7 +8096,17 @@ L_08853058: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853064: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7696,11 +8128,20 @@ L_08853088: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(23776))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088530A0: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7715,7 +8156,6 @@ L_088530B8: goto L_088530BC; L_088530BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853198; } @@ -7838,7 +8278,17 @@ L_08853198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088531A4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7860,11 +8310,20 @@ L_088531C8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(23976))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088531E0: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7879,7 +8338,6 @@ L_088531F8: goto L_088531FC; L_088531FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088532D8; } @@ -8002,7 +8460,17 @@ L_088532D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088532E4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8024,11 +8492,20 @@ L_08853308: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(24176))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853320: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8043,7 +8520,6 @@ L_08853338: goto L_0885333C; L_0885333C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853418; } @@ -8166,7 +8642,17 @@ L_08853418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853424: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8188,11 +8674,20 @@ L_08853448: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(24376))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853460: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8207,7 +8702,6 @@ L_08853478: goto L_0885347C; L_0885347C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088535B8; } @@ -8381,7 +8875,17 @@ L_088535B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088535C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8403,11 +8907,20 @@ L_088535E8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(24544))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853600: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8422,7 +8935,6 @@ L_08853618: goto L_0885361C; L_0885361C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853758; } @@ -8596,7 +9108,17 @@ L_08853758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853764: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8630,7 +9152,6 @@ L_08853790: } L_08853798: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08853824; } @@ -8650,7 +9171,6 @@ L_088537B8: goto L_088537BC; L_088537BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853834; } @@ -8721,7 +9241,17 @@ L_08853834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853840: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8755,7 +9285,6 @@ L_0885386C: } L_08853874: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08853900; } @@ -8775,7 +9304,6 @@ L_08853894: goto L_08853898; L_08853898: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853910; } @@ -8846,7 +9374,17 @@ L_08853910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885391C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8880,7 +9418,6 @@ L_08853948: } L_08853950: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088539DC; } @@ -8900,7 +9437,6 @@ L_08853970: goto L_08853974; L_08853974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088539EC; } @@ -8971,7 +9507,17 @@ L_088539EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088539F8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8993,11 +9539,20 @@ L_08853A1C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(24712))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853A34: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9012,7 +9567,6 @@ L_08853A4C: goto L_08853A50; L_08853A50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853B8C; } @@ -9186,7 +9740,17 @@ L_08853B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853B98: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9208,11 +9772,20 @@ L_08853BBC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(24880))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853BD4: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9227,7 +9800,6 @@ L_08853BEC: goto L_08853BF0; L_08853BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853D0C; } @@ -9384,7 +9956,17 @@ L_08853D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853D18: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9418,7 +10000,6 @@ L_08853D44: } L_08853D4C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08853DD8; } @@ -9438,7 +10019,6 @@ L_08853D6C: goto L_08853D70; L_08853D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853DE8; } @@ -9509,7 +10089,17 @@ L_08853DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853DF4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9543,7 +10133,6 @@ L_08853E20: } L_08853E28: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08853EB4; } @@ -9563,7 +10152,6 @@ L_08853E48: goto L_08853E4C; L_08853E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853EC4; } @@ -9634,7 +10222,17 @@ L_08853EC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853ED0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9668,7 +10266,6 @@ L_08853EFC: } L_08853F04: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08853F90; } @@ -9688,7 +10285,6 @@ L_08853F24: goto L_08853F28; L_08853F28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08853FA0; } @@ -9759,7 +10355,17 @@ L_08853FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08853FAC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9777,7 +10383,6 @@ L_08853FAC: L_08853FCC: aot_gpr_7 = (static_cast(aot_gpr_6) < 115 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08853FF8; } diff --git a/profiles/vcs/generated/generated_unit_0020.cpp b/profiles/vcs/generated/generated_unit_0020.cpp index 2ddbf55..8a64f0c 100644 --- a/profiles/vcs/generated/generated_unit_0020.cpp +++ b/profiles/vcs/generated/generated_unit_0020.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0020[4093] = { - 1, 0, 2, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 5, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 10, 11, 0, 12, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 17, - 0, 18, 0, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 21, 0, 22, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0, 25, - 0, 26, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 33, 0, - 34, 0, 0, 0, 0, 0, 35, 36, 0, 37, 0, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 42, - 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 48, 49, 0, - 50, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 57, 0, - 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 0, 65, 0, - 66, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, - 0, 0, 0, 0, 0, 73, 74, 0, 75, 0, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 80, 0, - 81, 0, 0, 0, 0, 0, 82, 0, 83, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 88, 0, - 89, 0, 0, 0, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 97, 0, 98, 0, 99, 0, 0, 0, 0, 0, 100, 101, 0, 102, 0, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 105, 0, - 106, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 109, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 113, 0, 114, 0, - 0, 0, 0, 0, 115, 116, 0, 117, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 120, 0, 121, 0, 0, 0, 0, 0, 122, 0, 123, - 0, 0, 0, 124, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 129, 130, 0, - 131, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 138, 0, 0, 139, - 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 142, 143, 0, 144, 0, 0, 0, 0, 0, 145, 0, 146, - 0, 0, 0, 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 149, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, 153, 0, 154, - 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 159, 0, 160, 0, 0, 0, 0, 0, 161, 0, 162, - 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 167, 168, 0, 169, - 0, 0, 0, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 176, 0, 177, - 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 184, 0, 185, - 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 191, 0, 192, - 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 199, 0, 200, - 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 0, 0, 0, 205, 0, 206, 0, 0, 0, 0, 0, 207, 0, 208, - 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, - 0, 0, 0, 0, 215, 216, 0, 217, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, 0, 222, 0, 223, - 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, 0, 0, 226, 0, 227, 0, 0, 0, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 230, 0, 231, - 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 240, 241, 0, 242, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 245, 0, 246, - 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 253, 0, 254, - 0, 0, 0, 0, 0, 255, 0, 256, 0, 0, 0, 0, 0, 257, 0, 258, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 261, 0, 0, 262, - 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 266, 0, 267, 0, 0, 0, 0, 0, 268, 0, 269, - 0, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 274, 0, 275, 0, 0, 0, 0, 0, 276, 0, 277, - 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 284, 0, 285, - 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 290, 291, 0, 292, - 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 300, - 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 307, 0, 308, - 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 314, 0, - 0, 0, 0, 0, 315, 316, 0, 317, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 320, 0, 321, 0, 0, 0, 0, 0, 322, 0, 323, - 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 0, 0, 0, 330, 0, 331, - 0, 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, - 338, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 340, 341, 0, 342, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 0, 0, 345, 0, 346, - 0, 0, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 349, 0, 350, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, 353, 0, 354, - 0, 0, 0, 0, 0, 355, 0, 356, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 361, 0, 0, 362, - 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 365, 366, 0, 367, 0, 0, 0, 0, 0, 368, 0, 369, - 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 0, 376, 0, 377, - 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 380, 0, 381, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 384, 0, 385, - 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 390, 391, 0, 392, - 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, 0, 0, 399, 0, 400, - 0, 0, 0, 0, 0, 401, 0, 402, 0, 0, 0, 0, 0, 403, 0, 404, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 407, 0, 408, - 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, - 0, 0, 0, 0, 415, 416, 0, 417, 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 422, 0, 423, - 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 426, 0, 427, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 430, 0, 431, - 0, 0, 0, 0, 0, 432, 0, 433, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, - 438, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, 441, 0, 442, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, 0, 445, 0, 446, - 0, 0, 0, 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 449, 0, 450, 0, 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 453, 0, 454, - 0, 0, 0, 0, 0, 455, 0, 456, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 0, 0, 459, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 461, - 0, 0, 462, 0, 463, 0, 464, 0, 0, 0, 0, 0, 465, 466, 0, 467, 0, 0, 0, 0, 0, 468, 0, 469, 0, 0, 0, 0, 0, 470, 0, 471, - 0, 0, 0, 0, 0, 472, 0, 473, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, 478, 0, 479, 0, 0, - 0, 0, 0, 480, 481, 0, 482, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 487, 0, 488, 0, - 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 493, 0, 494, 0, 0, 0, 0, 0, 495, 496, 0, 497, 0, 0, - 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 504, 0, 0, 505, 0, 0, 0, - 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 509, 0, 510, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, - 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, - 0, 0, 521, 0, 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 525, 0, 526, 0, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, - 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 533, 534, 0, 535, 0, 0, 0, - 0, 0, 536, 0, 537, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, - 0, 0, 544, 0, 545, 0, 0, 0, 0, 0, 546, 0, 547, 0, 0, 0, 0, 0, 548, 0, 549, 0, 0, 0, 0, 0, 550, 0, 551, 0, 0, 0, - 0, 0, 552, 0, 553, 0, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, - 0, 558, 559, 0, 560, 0, 0, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, - 0, 0, 567, 0, 568, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 0, 0, 571, 0, 572, 0, 0, 0, 0, 0, 573, 0, 574, 0, 0, 0, - 0, 0, 575, 0, 576, 0, 0, 0, 0, 0, 577, 0, 578, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, - 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 588, 0, 589, 0, 0, 0, - 0, 0, 590, 0, 591, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, - 0, 0, 598, 0, 599, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 0, 0, 602, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, - 0, 0, 0, 605, 0, 0, 0, 0, 0, 606, 607, 0, 608, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 611, 0, 612, 0, 0, 0, - 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 619, 0, 620, 0, 0, 0, - 0, 0, 621, 0, 622, 0, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 625, 0, 626, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, - 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 631, 632, 0, 633, 0, 0, 0, 0, 0, 634, 0, 635, 0, 0, 0, - 0, 0, 636, 0, 637, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 0, 640, 0, 641, 0, 0, 0, 0, 0, 642, 0, 643, 0, 0, 0, - 0, 0, 644, 0, 645, 0, 0, 0, 0, 0, 646, 0, 647, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, - 0, 652, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 656, 657, 0, 658, 0, 0, 0, - 0, 0, 659, 0, 660, 0, 0, 0, 0, 0, 661, 0, 662, 0, 0, 0, 0, 0, 663, 0, 664, 0, 0, 0, 0, 0, 665, 0, 666, 0, 0, 0, - 0, 0, 667, 0, 668, 0, 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 0, 0, 673, 0, 674, 0, 0, 0, - 0, 0, 675, 0, 676, 0, 0, 0, 0, 677, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, - 0, 681, 682, 0, 683, 0, 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, - 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 0, 0, 694, 0, 695, 0, 0, 0, 0, 0, 696, 0, 697, 0, 0, 0, - 0, 0, 698, 0, 699, 0, 0, 0, 0, 0, 700, 0, 701, 0, 0, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, - 0, 0, 0, 705, 0, 0, 0, 0, 0, 706, 707, 0, 708, 0, 0, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 711, 0, 712, 0, 0, 0, - 0, 0, 713, 0, 714, 0, 0, 0, 0, 0, 715, 0, 716, 0, 0, 0, 0, 0, 717, 0, 718, 0, 0, 0, 0, 0, 719, 0, 720, 0, 0, 0, - 0, 0, 721, 0, 722, 0, 0, 0, 0, 0, 723, 0, 724, 0, 0, 0, 0, 0, 725, 0, 726, 0, 0, 0, 0, 727, 0, 0, 728, 0, 0, 0, - 0, 0, 0, 0, 729, 0, 0, 730, 0, 731, 0, 732, 0, 0, 0, 0, 0, 733, 734, 0, 735, 0, 0, 0, 0, 0, 736, 0, 737, 0, 0, 0, - 0, 0, 738, 0, 739, 0, 0, 0, 0, 0, 740, 0, 741, 0, 0, 0, 742, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, - 746, 0, 747, 0, 0, 0, 0, 0, 748, 749, 0, 750, 0, 0, 0, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 753, 0, 754, 0, 0, 0, 0, - 0, 755, 0, 756, 0, 0, 0, 757, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 760, 0, 761, 0, 762, 0, 0, 0, 0, 0, 763, - 764, 0, 765, 0, 0, 0, 0, 0, 766, 0, 767, 0, 0, 0, 0, 0, 768, 0, 769, 0, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 772, 0, - 0, 773, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 775, 0, 776, 0, 777, 0, 0, 0, 0, 0, 778, 779, 0, 780, 0, 0, 0, 0, 0, 781, - 0, 782, 0, 0, 0, 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 785, 0, 786, 0, 0, 0, 787, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, - 0, 789, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 791, 792, 0, 793, 0, 0, 0, 0, 0, 794, 0, 795, 0, 0, 0, 0, 0, 796, 0, - 797, 0, 0, 0, 0, 0, 798, 0, 799, 0, 0, 0, 0, 0, 800, 0, 801, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 0, 804, 0, - 805, 0, 0, 0, 0, 0, 806, 0, 807, 0, 0, 0, 0, 0, 808, 0, 809, 0, 0, 0, 0, 0, 810, 0, 811, 0, 0, 0, 0, 812, 0, 0, - 813, 0, 0, 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 816, 817, 0, 818, 0, 0, 0, 0, 0, 819, 0, - 820, 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 0, 0, 0, 825, 0, 826, 0, 0, 0, 0, 0, 827, 0, - 828, 0, 0, 0, 0, 0, 829, 0, 830, 0, 0, 0, 0, 0, 831, 0, 832, 0, 0, 0, 0, 0, 833, 0, 834, 0, 0, 0, 0, 0, 835, 0, - 836, 0, 0, 0, 0, 837, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 840, 0, 841, 0, 842, 0, 0, 0, 0, 0, 843, 844, 0, - 845, 0, 0, 0, 0, 0, 846, 0, 847, 0, 0, 0, 0, 0, 848, 0, 849, 0, 0, 0, 0, 0, 850, 0, 851, 0, 0, 0, 852, 0, 0, 853, - 0, 0, 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 856, 857, 0, 858, 0, 0, 0, 0, 0, 859, 0, 860, - 0, 0, 0, 0, 0, 861, 0, 862, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 865, 0, 866, 0, 0, 0, 0, 0, 867, 0, 868, - 0, 0, 0, 0, 0, 869, 0, 870, 0, 0, 0, 0, 0, 871, 0, 872, 0, 0, 0, 0, 0, 873, 0, 874, 0, 0, 0, 0, 0, 875, 0, 876, - 0, 0, 0, 0, 877, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 881, 882, 0, 883, - 0, 0, 0, 0, 0, 884, 0, 885, 0, 0, 0, 0, 0, 886, 0, 887, 0, 0, 0, 0, 0, 888, 0, 889, 0, 0, 0, 0, 0, 890, 0, 891, - 0, 0, 0, 0, 0, 892, 0, 893, 0, 0, 0, 0, 0, 894, 0, 895, 0, 0, 0, 0, 0, 896, 0, 897, 0, 0, 0, 0, 0, 898, 0, 899, - 0, 0, 0, 0, 0, 900, 0, 901, 0, 0, 0, 0, 902, 0, 0, 903, 0, 0, 0, 0, 0, 0, 0, 904, 0, 0, 905, 0, 906, 0, 907, 0, - 0, 0, 0, 0, 908, 909, 0, 910, 0, 0, 0, 0, 0, 911, 0, 912, 0, 0, 0, 0, 0, 913, 0, 914, 0, 0, 0, 0, 0, 915, 0, 916, - 0, 0, 0, 917, 0, 0, 918, 0, 0, 0, 0, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 920, 0, 0, 0, 0, 0, 921, 922, 0, 923, 0, - 0, 0, 0, 0, 924, 0, 925, 0, 0, 0, 0, 0, 926, 0, 927, 0, 0, 0, 0, 0, 928, 0, 929, 0, 0, 0, 0, 0, 930, 0, 931, 0, - 0, 0, 0, 0, 932, 0, 933, 0, 0, 0, 0, 0, 934, 0, 935, 0, 0, 0, 0, 0, 936, 0, 937, 0, 0, 0, 0, 0, 938, 0, 939, 0, - 0, 0, 0, 0, 940, 0, 941, 0, 0, 0, 0, 942, 0, 0, 943, 0, 0, 0, 0, 0, 0, 0, 0, 944, 0, 0, 0, 0, 0, 945, 0, 0, - 0, 0, 0, 946, 947, 0, 948, 0, 0, 0, 0, 0, 949, 0, 950, 0, 0, 0, 0, 0, 951, 0, 952, 0, 0, 0, 0, 0, 953, 0, 954, 0, - 0, 0, 0, 0, 955, 0, 956, 0, 0, 0, 0, 0, 957, 0, 958, 0, 0, 0, 0, 0, 959, 0, 960, 0, 0, 0, 0, 0, 961, 0, 962, 0, - 0, 0, 0, 0, 963, 0, 964, 0, 0, 0, 0, 965, 0, 0, 966, 0, 0, 0, 0, 0, 0, 0, 967, 0, 0, 968, 0, 969, 0, 970, 0, 0, - 0, 0, 0, 971, 972, 0, 973, 0, 0, 0, 0, 0, 974, 0, 975, 0, 0, 0, 0, 0, 976, 0, 977, 0, 0, 0, 0, 0, 978, 0, 979, 0, - 0, 0, 980, 0, 0, 981, 0, 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, 0, 0, 0, 983, 0, 0, 0, 0, 0, 984, 985, 0, 986, 0, 0, - 0, 0, 0, 987, 0, 988, 0, 0, 0, 0, 0, 989, 0, 990, 0, 0, 0, 0, 0, 991, 0, 992, 0, 0, 0, 0, 0, 993, 0, 994, 0, 0, - 0, 0, 0, 995, 0, 996, 0, 0, 0, 0, 0, 997, 0, 998, 0, 0, 0, 0, 0, 999, 0, 1000, 0, 0, 0, 0, 0, 1001, 0, 1002, 0, 0, - 0, 0, 0, 1003, 0, 1004, 0, 0, 0, 0, 1005, 0, 0, 1006, 0, 0, 0, 0, 0, 0, 0, 0, 1007, 0, 0, 0, 0, 0, 1008, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0020[64] = { + 0x828282C104026095ull, 0x5202428282828282ull, 0x60820122828282C1ull, 0x4141414141414141ull, + 0x4141416082012141ull, 0x0121414141414141ull, 0x54809141414160A9ull, 0x60824048A0A0A0B0ull, + 0xA0B0410091414141ull, 0xA0A0A0A0A0A0A0A0ull, 0xA0A0A0A0B0410090ull, 0xB0410090A0A0A0A0ull, + 0xA0A0A0A0A0A0A0A0ull, 0xA0A0A0B0410090A0ull, 0x0090A0A0A0A0A0A0ull, 0xA0A0A0A0A0A0B041ull, + 0xA0B0410090A0A0A0ull, 0xA0A0A0A0A0A0A0A0ull, 0xA0A0A0A0B0410090ull, 0x410090A0A0A0A0A0ull, + 0xA0A0A0A0A0A0A0B0ull, 0xA0A0B0410090A0A0ull, 0x90A0A0A0A0A0A0A0ull, 0xA0A0A0A0A0B04100ull, + 0xB0410090A0A0A0A0ull, 0xA0A0A0A0A0A0A0A0ull, 0xA0A0A0B0410090A0ull, 0x0090A0A0A0A0A0A0ull, + 0xA0A0A0A0A0A0B041ull, 0xA0A0B0548090A0A0ull, 0x505050582A4048A0ull, 0x122828282C152024ull, + 0x1414141414160820ull, 0x1608201214141414ull, 0x1414141414141414ull, 0x1414141608201214ull, + 0x2012141414141414ull, 0x1414141414141608ull, 0x1414160820121414ull, 0x1214141414141414ull, + 0x1414141414160820ull, 0x1608201214141414ull, 0x1414141414141414ull, 0x1414141608201214ull, + 0x2012141414141414ull, 0x1414141414141608ull, 0x14160A9012141414ull, 0x0A0A0B0548091414ull, + 0x4505050582A4048Aull, 0x0122828282C15202ull, 0x4141414141416082ull, 0x4160820121414141ull, + 0x4141414141414141ull, 0x9141414160A90121ull, 0xA0A0A0A0A0B04100ull, 0xB0410090A0A0A0A0ull, + 0xA0A0A0A0A0A0A0A0ull, 0xA0A0A0B0548090A0ull, 0x5050505058208048ull, 0x2080485050505050ull, + 0x5050505050505058ull, 0x505050582A404850ull, 0x282828282C104024ull, 0x1040242828282828ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0020[64] = { + 1u, 18u, 34u, 50u, 66u, 81u, 96u, 115u, 131u, 147u, 163u, 178u, 193u, 209u, 224u, 238u, + 255u, 270u, 286u, 301u, 315u, 332u, 347u, 363u, 378u, 393u, 409u, 424u, 438u, 455u, 472u, 489u, + 506u, 521u, 536u, 552u, 567u, 582u, 598u, 613u, 629u, 644u, 659u, 675u, 690u, 705u, 721u, 738u, + 755u, 773u, 789u, 805u, 820u, 836u, 854u, 869u, 884u, 900u, 917u, 932u, 946u, 963u, 980u, 995u, }; void recomp_unit_0020_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -152,13 +47,25 @@ void recomp_unit_0020_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08854000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0020[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0020[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0020[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08854000; @@ -1182,7 +1089,6 @@ L_08854000: AOT_REGCACHE_SYNC_OUT(); return; L_08854008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854038; } @@ -1191,7 +1097,6 @@ L_08854008: L_08854010: aot_gpr_7 = (0u | 140u); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0019_entry, 19u, 1016u, 0x08853FF8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1216,7 +1121,17 @@ L_08854038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854044: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1238,11 +1153,20 @@ L_08854068: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(25048))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854080: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1257,7 +1181,6 @@ L_08854098: goto L_0885409C; L_0885409C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088541B8; } @@ -1414,7 +1337,17 @@ L_088541B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088541C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1448,7 +1381,6 @@ L_088541F0: } L_088541F8: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08854284; } @@ -1468,7 +1400,6 @@ L_08854218: goto L_0885421C; L_0885421C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854294; } @@ -1539,7 +1470,17 @@ L_08854294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088542A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1561,11 +1502,20 @@ L_088542C4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(25216))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088542DC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1580,7 +1530,6 @@ L_088542F4: goto L_088542F8; L_088542F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854434; } @@ -1754,7 +1703,17 @@ L_08854434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854440: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1776,11 +1735,20 @@ L_08854464: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(25384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885447C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1795,7 +1763,6 @@ L_08854494: goto L_08854498; L_08854498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088545D4; } @@ -1969,7 +1936,17 @@ L_088545D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088545E0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2003,7 +1980,6 @@ L_0885460C: } L_08854614: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088546A0; } @@ -2023,7 +1999,6 @@ L_08854634: goto L_08854638; L_08854638: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088546B0; } @@ -2094,7 +2069,17 @@ L_088546B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088546BC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2128,7 +2113,6 @@ L_088546E8: } L_088546F0: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885477C; } @@ -2148,7 +2132,6 @@ L_08854710: goto L_08854714; L_08854714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885478C; } @@ -2219,7 +2202,17 @@ L_0885478C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854798: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2249,11 +2242,20 @@ L_088547C4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_7); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(25560))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088547DC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2268,7 +2270,6 @@ L_088547F4: goto L_088547F8; L_088547F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854870; } @@ -2339,7 +2340,17 @@ L_08854870: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885487C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2361,11 +2372,20 @@ L_088548A0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(25720))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088548B8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2380,7 +2400,6 @@ L_088548D0: goto L_088548D4; L_088548D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854A10; } @@ -2554,7 +2573,17 @@ L_08854A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854A1C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2576,11 +2605,20 @@ L_08854A40: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(25888))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854A58: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2595,7 +2633,6 @@ L_08854A70: goto L_08854A74; L_08854A74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854B90; } @@ -2752,7 +2789,17 @@ L_08854B90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854B9C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2774,11 +2821,20 @@ L_08854BC0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(26048))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854BD8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2793,7 +2849,6 @@ L_08854BF0: goto L_08854BF4; L_08854BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854D30; } @@ -2967,7 +3022,17 @@ L_08854D30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854D3C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2989,11 +3054,20 @@ L_08854D60: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(26216))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854D78: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3008,7 +3082,6 @@ L_08854D90: goto L_08854D94; L_08854D94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08854ED0; } @@ -3182,7 +3255,17 @@ L_08854ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854EDC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3204,11 +3287,20 @@ L_08854F00: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(26384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08854F18: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3223,7 +3315,6 @@ L_08854F30: goto L_08854F34; L_08854F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855070; } @@ -3397,7 +3488,17 @@ L_08855070: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885507C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3419,11 +3520,20 @@ L_088550A0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(26552))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088550B8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3438,7 +3548,6 @@ L_088550D0: goto L_088550D4; L_088550D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855210; } @@ -3612,7 +3721,17 @@ L_08855210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885521C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3634,11 +3753,20 @@ L_08855240: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(26720))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855258: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3653,7 +3781,6 @@ L_08855270: goto L_08855274; L_08855274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088553B0; } @@ -3827,7 +3954,17 @@ L_088553B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088553BC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3849,11 +3986,20 @@ L_088553E0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(26888))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088553F8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3868,7 +4014,6 @@ L_08855410: goto L_08855414; L_08855414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855550; } @@ -4042,7 +4187,17 @@ L_08855550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885555C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4064,11 +4219,20 @@ L_08855580: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(27056))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855598: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4083,7 +4247,6 @@ L_088555B0: goto L_088555B4; L_088555B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088556F0; } @@ -4257,7 +4420,17 @@ L_088556F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088556FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4279,11 +4452,20 @@ L_08855720: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(27224))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855738: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4298,7 +4480,6 @@ L_08855750: goto L_08855754; L_08855754: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855890; } @@ -4472,7 +4653,17 @@ L_08855890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885589C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4494,11 +4685,20 @@ L_088558C0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(27392))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088558D8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4513,7 +4713,6 @@ L_088558F0: goto L_088558F4; L_088558F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855A30; } @@ -4687,7 +4886,17 @@ L_08855A30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855A3C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4709,11 +4918,20 @@ L_08855A60: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(27560))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855A78: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4728,7 +4946,6 @@ L_08855A90: goto L_08855A94; L_08855A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855BD0; } @@ -4902,7 +5119,17 @@ L_08855BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855BDC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4924,11 +5151,20 @@ L_08855C00: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(27728))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855C18: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4943,7 +5179,6 @@ L_08855C30: goto L_08855C34; L_08855C34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855D50; } @@ -5100,7 +5335,17 @@ L_08855D50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855D5C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5134,7 +5379,6 @@ L_08855D88: } L_08855D90: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08855E1C; } @@ -5154,7 +5398,6 @@ L_08855DB0: goto L_08855DB4; L_08855DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855E2C; } @@ -5225,7 +5468,17 @@ L_08855E2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855E38: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5259,7 +5512,6 @@ L_08855E64: } L_08855E6C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08855EF8; } @@ -5279,7 +5531,6 @@ L_08855E8C: goto L_08855E90; L_08855E90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855F08; } @@ -5350,7 +5601,17 @@ L_08855F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855F14: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5384,7 +5645,6 @@ L_08855F40: } L_08855F48: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08855FD4; } @@ -5404,7 +5664,6 @@ L_08855F68: goto L_08855F6C; L_08855F6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08855FE4; } @@ -5475,7 +5734,17 @@ L_08855FE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08855FF0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5497,11 +5766,20 @@ L_08856014: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(27888))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885602C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5516,7 +5794,6 @@ L_08856044: goto L_08856048; L_08856048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856184; } @@ -5690,7 +5967,17 @@ L_08856184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856190: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5712,11 +5999,20 @@ L_088561B4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(28056))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088561CC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5731,7 +6027,6 @@ L_088561E4: goto L_088561E8; L_088561E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856324; } @@ -5905,7 +6200,17 @@ L_08856324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856330: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5927,11 +6232,20 @@ L_08856354: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(28224))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885636C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5946,7 +6260,6 @@ L_08856384: goto L_08856388; L_08856388: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088564C4; } @@ -6120,7 +6433,17 @@ L_088564C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088564D0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6142,11 +6465,20 @@ L_088564F4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(28392))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885650C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6161,7 +6493,6 @@ L_08856524: goto L_08856528; L_08856528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856644; } @@ -6318,7 +6649,17 @@ L_08856644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856650: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6340,11 +6681,20 @@ L_08856674: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(28560))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885668C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6359,7 +6709,6 @@ L_088566A4: goto L_088566A8; L_088566A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088567E4; } @@ -6533,7 +6882,17 @@ L_088567E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088567F0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6555,11 +6914,20 @@ L_08856814: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(28728))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885682C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6574,7 +6942,6 @@ L_08856844: goto L_08856848; L_08856848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856984; } @@ -6748,7 +7115,17 @@ L_08856984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856990: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6770,11 +7147,20 @@ L_088569B4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(28896))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088569CC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6789,7 +7175,6 @@ L_088569E4: goto L_088569E8; L_088569E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856B24; } @@ -6963,7 +7348,17 @@ L_08856B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856B30: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6985,11 +7380,20 @@ L_08856B54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(29064))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856B6C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7004,7 +7408,6 @@ L_08856B84: goto L_08856B88; L_08856B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856CC4; } @@ -7178,7 +7581,17 @@ L_08856CC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856CD0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7200,11 +7613,20 @@ L_08856CF4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(29232))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856D0C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7219,7 +7641,6 @@ L_08856D24: goto L_08856D28; L_08856D28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856E64; } @@ -7393,7 +7814,17 @@ L_08856E64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856E70: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7427,7 +7858,6 @@ L_08856E9C: } L_08856EA4: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08856F30; } @@ -7447,7 +7877,6 @@ L_08856EC4: goto L_08856EC8; L_08856EC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08856F40; } @@ -7518,7 +7947,17 @@ L_08856F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08856F4C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7552,7 +7991,6 @@ L_08856F78: } L_08856F80: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885700C; } @@ -7572,7 +8010,6 @@ L_08856FA0: goto L_08856FA4; L_08856FA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885701C; } @@ -7643,7 +8080,17 @@ L_0885701C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857028: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7677,7 +8124,6 @@ L_08857054: } L_0885705C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088570E8; } @@ -7697,7 +8143,6 @@ L_0885707C: goto L_08857080; L_08857080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088570F8; } @@ -7768,7 +8213,17 @@ L_088570F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857104: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7802,7 +8257,6 @@ L_08857130: } L_08857138: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088571C4; } @@ -7822,7 +8276,6 @@ L_08857158: goto L_0885715C; L_0885715C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088571D4; } @@ -7893,7 +8346,17 @@ L_088571D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088571E0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7915,11 +8378,20 @@ L_08857204: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(29400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885721C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7934,7 +8406,6 @@ L_08857234: goto L_08857238; L_08857238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857374; } @@ -8108,7 +8579,17 @@ L_08857374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857380: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8130,11 +8611,20 @@ L_088573A4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(29568))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088573BC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8149,7 +8639,6 @@ L_088573D4: goto L_088573D8; L_088573D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857514; } @@ -8323,7 +8812,17 @@ L_08857514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857520: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8357,7 +8856,6 @@ L_0885754C: } L_08857554: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088575E0; } @@ -8377,7 +8875,6 @@ L_08857574: goto L_08857578; L_08857578: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088575F0; } @@ -8448,7 +8945,17 @@ L_088575F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088575FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8470,11 +8977,20 @@ L_08857620: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(29736))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857638: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8489,7 +9005,6 @@ L_08857650: goto L_08857654; L_08857654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857790; } @@ -8663,7 +9178,17 @@ L_08857790: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885779C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8685,11 +9210,20 @@ L_088577C0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(29904))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088577D8: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8704,7 +9238,6 @@ L_088577F0: goto L_088577F4; L_088577F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857930; } @@ -8878,7 +9411,17 @@ L_08857930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885793C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8912,7 +9455,6 @@ L_08857968: } L_08857970: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088579FC; } @@ -8932,7 +9474,6 @@ L_08857990: goto L_08857994; L_08857994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857A0C; } @@ -9003,7 +9544,17 @@ L_08857A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857A18: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9025,11 +9576,20 @@ L_08857A3C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30072))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857A54: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9044,7 +9604,6 @@ L_08857A6C: goto L_08857A70; L_08857A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857BAC; } @@ -9218,7 +9777,17 @@ L_08857BAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857BB8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9240,11 +9809,20 @@ L_08857BDC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30240))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857BF4: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9259,7 +9837,6 @@ L_08857C0C: goto L_08857C10; L_08857C10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857D2C; } @@ -9416,7 +9993,17 @@ L_08857D2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857D38: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9450,7 +10037,6 @@ L_08857D64: } L_08857D6C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08857DF8; } @@ -9470,7 +10056,6 @@ L_08857D8C: goto L_08857D90; L_08857D90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857E08; } @@ -9541,7 +10126,17 @@ L_08857E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857E14: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9563,11 +10158,20 @@ L_08857E38: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30392))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857E50: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9582,7 +10186,6 @@ L_08857E68: goto L_08857E6C; L_08857E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08857FA8; } @@ -9756,7 +10359,17 @@ L_08857FA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857FB4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9778,11 +10391,20 @@ L_08857FD8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30560))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08857FF0: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); diff --git a/profiles/vcs/generated/generated_unit_0021.cpp b/profiles/vcs/generated/generated_unit_0021.cpp index 3bffe6f..7dc8d68 100644 --- a/profiles/vcs/generated/generated_unit_0021.cpp +++ b/profiles/vcs/generated/generated_unit_0021.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0021[4093] = { - 1, 0, 2, 3, 0, 4, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 9, 0, 10, 0, 0, - 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, - 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 21, 0, 22, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 34, 0, 35, - 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, 0, 43, - 0, 0, 44, 0, 0, 0, 0, 0, 45, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 50, 0, 51, 0, 0, 0, 0, - 0, 52, 53, 0, 54, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, - 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 67, 68, 0, 69, 0, 0, 0, 0, - 0, 70, 0, 71, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, - 0, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, 83, 0, 84, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, - 87, 0, 88, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 95, 0, - 96, 0, 0, 0, 0, 0, 97, 98, 0, 99, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 106, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 112, 113, 0, - 114, 0, 0, 0, 0, 0, 115, 0, 116, 0, 0, 0, 0, 0, 117, 0, 118, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, 122, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 0, 0, 0, 0, 127, 128, 0, 129, 0, 0, 0, 0, 0, 130, 0, 131, - 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 138, - 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 140, 141, 0, 142, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 0, 145, 0, 146, 0, - 0, 0, 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 149, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, 153, 0, 154, 0, - 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 159, 0, 160, 0, 0, 0, 0, 161, 0, 0, 162, 0, - 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 165, 166, 0, 167, 0, 0, 0, 0, 0, 168, 0, 169, 0, - 0, 0, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 176, 0, 177, 0, - 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 184, 0, 185, 0, - 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 191, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, - 0, 0, 199, 0, 200, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 206, - 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 0, 210, 0, 211, 0, 0, 0, 0, 0, 212, 213, 0, 214, 0, 0, 0, 0, 0, - 215, 0, 216, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, - 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 0, 0, 227, 228, 0, 229, 0, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 232, - 0, 233, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 240, 0, 241, - 0, 0, 0, 0, 0, 242, 243, 0, 244, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 249, 0, - 250, 0, 0, 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 0, 257, 258, 0, 259, - 0, 0, 0, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 0, 0, 264, 0, 265, 0, 0, 0, 266, 0, 0, 267, 0, - 0, 0, 0, 0, 0, 0, 268, 0, 0, 269, 0, 270, 0, 271, 0, 0, 0, 0, 0, 272, 273, 0, 274, 0, 0, 0, 0, 0, 275, 0, 276, 0, - 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, - 284, 0, 285, 0, 286, 0, 0, 0, 0, 0, 287, 288, 0, 289, 0, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, - 0, 0, 0, 294, 0, 295, 0, 0, 0, 296, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 299, 0, 300, 0, 301, 0, 0, 0, 0, - 0, 302, 303, 0, 304, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, - 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 0, 317, 318, 0, 319, 0, 0, 0, 0, - 0, 320, 0, 321, 0, 0, 0, 0, 0, 322, 0, 323, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 326, 0, 0, 327, 0, 0, 0, 0, 0, - 0, 0, 328, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, 0, 332, 333, 0, 334, 0, 0, 0, 0, 0, 335, 0, 336, 0, 0, 0, 0, 0, - 337, 0, 338, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 344, 0, 345, 0, - 346, 0, 0, 0, 0, 0, 347, 348, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 354, - 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 363, 0, - 0, 0, 0, 0, 364, 0, 365, 0, 0, 0, 0, 0, 366, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, - 371, 0, 372, 0, 0, 0, 0, 0, 373, 374, 0, 375, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 380, - 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 387, 0, 388, 0, 0, 0, 0, 0, - 389, 0, 390, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 0, - 0, 397, 0, 0, 398, 0, 399, 0, 400, 0, 0, 0, 0, 0, 401, 402, 0, 403, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 406, - 0, 407, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 414, 0, 415, - 0, 0, 0, 0, 0, 416, 417, 0, 418, 0, 0, 0, 0, 0, 419, 0, 420, 0, 0, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 423, 0, - 424, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 429, 0, 430, 0, 0, 0, 0, 0, 431, 432, 0, 433, - 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 438, 0, 439, 0, 0, 0, 440, 0, 0, 441, 0, - 0, 0, 0, 0, 0, 0, 442, 0, 0, 443, 0, 444, 0, 445, 0, 0, 0, 0, 0, 446, 447, 0, 448, 0, 0, 0, 0, 0, 449, 0, 450, 0, - 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 459, 460, 0, 461, 0, 0, 0, 0, 0, 462, 0, 463, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, - 0, 0, 0, 466, 0, 467, 0, 0, 0, 0, 0, 468, 0, 469, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 472, 0, 473, 0, 0, - 0, 0, 0, 474, 0, 475, 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 478, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, 0, 0, - 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 486, 487, 0, 488, 0, 0, - 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, - 0, 0, 0, 497, 0, 498, 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 503, 0, 504, 0, 0, - 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, - 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 513, 514, 0, 515, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 518, 0, 519, 0, 0, - 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 524, 0, 525, 0, 0, 0, 0, 0, 526, 0, 527, 0, 0, - 0, 0, 0, 528, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, 0, 0, 532, 0, 533, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, - 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 538, 539, 0, 540, 0, 0, 0, 0, 0, 541, 0, 542, 0, 0, - 0, 0, 0, 543, 0, 544, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, 0, 549, 0, 550, 0, 0, - 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 560, 0, 561, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 0, 0, 0, 564, 0, 565, 0, 0, - 0, 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 0, 0, 0, 572, 0, 573, 0, 0, - 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 0, 0, 580, 0, 581, 0, 0, - 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 586, 587, 0, 588, 0, 0, - 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 595, 0, 596, 0, 0, - 0, 0, 0, 597, 0, 598, 0, 0, 0, 0, 0, 599, 0, 600, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, 0, 0, 0, 603, 0, 604, 0, 0, - 0, 0, 0, 605, 0, 606, 0, 0, 0, 0, 0, 607, 0, 608, 0, 0, 0, 0, 609, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, - 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 613, 614, 0, 615, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 0, 0, 618, 0, 619, 0, 0, - 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 0, 626, 0, 627, 0, 0, - 0, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 0, 634, 0, 0, 635, 0, 0, - 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 639, 0, 640, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, - 0, 0, 0, 643, 0, 644, 0, 0, 0, 0, 0, 645, 0, 646, 0, 0, 0, 0, 0, 647, 0, 648, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, - 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, - 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 659, 660, 0, 661, 0, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 664, 0, 665, 0, 0, - 0, 0, 0, 666, 0, 667, 0, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, - 0, 0, 0, 674, 0, 675, 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 0, 680, 0, 681, 0, 0, - 0, 0, 682, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 687, 0, 688, 0, 0, - 0, 0, 0, 689, 0, 690, 0, 0, 0, 0, 0, 691, 0, 692, 0, 0, 0, 0, 0, 693, 0, 694, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, - 0, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 701, 0, 702, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, - 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 709, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, - 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 713, 714, 0, 715, 0, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 0, 0, 718, 0, 719, 0, 0, - 0, 0, 0, 720, 0, 721, 0, 0, 0, 0, 0, 722, 0, 723, 0, 0, 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 0, 726, 0, 727, 0, 0, - 0, 0, 0, 728, 0, 729, 0, 0, 0, 0, 0, 730, 0, 731, 0, 0, 0, 0, 0, 732, 0, 733, 0, 0, 0, 0, 734, 0, 0, 735, 0, 0, - 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 738, 739, 0, 740, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, - 0, 0, 0, 743, 0, 744, 0, 0, 0, 0, 0, 745, 0, 746, 0, 0, 0, 0, 0, 747, 0, 748, 0, 0, 0, 0, 0, 749, 0, 750, 0, 0, - 0, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 753, 0, 754, 0, 0, 0, 0, 755, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, - 758, 0, 759, 0, 760, 0, 0, 0, 0, 0, 761, 762, 0, 763, 0, 0, 0, 0, 0, 764, 0, 765, 0, 0, 0, 0, 0, 766, 0, 767, 0, 0, - 0, 0, 0, 768, 0, 769, 0, 0, 0, 770, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, - 0, 774, 775, 0, 776, 0, 0, 0, 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 779, 0, 780, 0, 0, 0, 0, 0, 781, 0, 782, 0, 0, 0, - 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 785, 0, 786, 0, 0, 0, 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 789, 0, 790, 0, 0, 0, - 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 793, 0, 794, 0, 0, 0, 0, 795, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, - 0, 0, 0, 798, 0, 0, 0, 0, 0, 799, 800, 0, 801, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 0, 804, 0, 805, 0, 0, 0, - 0, 0, 806, 0, 807, 0, 0, 0, 0, 0, 808, 0, 809, 0, 0, 0, 0, 0, 810, 0, 811, 0, 0, 0, 0, 0, 812, 0, 813, 0, 0, 0, - 0, 0, 814, 0, 815, 0, 0, 0, 0, 0, 816, 0, 817, 0, 0, 0, 0, 0, 818, 0, 819, 0, 0, 0, 0, 820, 0, 0, 821, 0, 0, 0, - 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 824, 825, 0, 826, 0, 0, 0, 0, 0, 827, 0, 828, 0, 0, 0, - 0, 0, 829, 0, 830, 0, 0, 0, 0, 0, 831, 0, 832, 0, 0, 0, 0, 0, 833, 0, 834, 0, 0, 0, 0, 0, 835, 0, 836, 0, 0, 0, - 0, 0, 837, 0, 838, 0, 0, 0, 0, 0, 839, 0, 840, 0, 0, 0, 0, 0, 841, 0, 842, 0, 0, 0, 0, 0, 843, 0, 844, 0, 0, 0, - 0, 845, 0, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 848, 0, 0, 0, 0, 0, 849, 850, 0, 851, 0, 0, 0, - 0, 0, 852, 0, 853, 0, 0, 0, 0, 0, 854, 0, 855, 0, 0, 0, 0, 0, 856, 0, 857, 0, 0, 0, 0, 0, 858, 0, 859, 0, 0, 0, - 0, 0, 860, 0, 861, 0, 0, 0, 0, 0, 862, 0, 863, 0, 0, 0, 0, 0, 864, 0, 865, 0, 0, 0, 0, 0, 866, 0, 867, 0, 0, 0, - 0, 0, 868, 0, 869, 0, 0, 0, 0, 870, 0, 0, 871, 0, 0, 0, 0, 0, 0, 0, 0, 872, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, - 0, 874, 875, 0, 876, 0, 0, 0, 0, 0, 877, 0, 878, 0, 0, 0, 0, 0, 879, 0, 880, 0, 0, 0, 0, 0, 881, 0, 882, 0, 0, 0, - 0, 0, 883, 0, 884, 0, 0, 0, 0, 0, 885, 0, 886, 0, 0, 0, 0, 0, 887, 0, 888, 0, 0, 0, 0, 0, 889, 0, 890, 0, 0, 0, - 0, 0, 891, 0, 892, 0, 0, 0, 0, 0, 893, 0, 894, 0, 0, 0, 0, 895, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, - 0, 0, 0, 898, 0, 0, 0, 0, 0, 899, 900, 0, 901, 0, 0, 0, 0, 0, 902, 0, 903, 0, 0, 0, 0, 0, 904, 0, 905, 0, 0, 0, - 0, 0, 906, 0, 907, 0, 0, 0, 0, 0, 908, 0, 909, 0, 0, 0, 0, 0, 910, 0, 911, 0, 0, 0, 0, 0, 912, 0, 913, 0, 0, 0, - 0, 0, 914, 0, 915, 0, 0, 0, 0, 0, 916, 0, 917, 0, 0, 0, 0, 0, 918, 0, 919, 0, 0, 0, 0, 920, 0, 0, 921, 0, 0, 0, - 0, 0, 0, 0, 0, 922, 0, 0, 0, 0, 0, 923, 0, 0, 0, 0, 0, 924, 925, 0, 926, 0, 0, 0, 0, 0, 927, 0, 928, 0, 0, 0, - 0, 0, 929, 0, 930, 0, 0, 0, 0, 0, 931, 0, 932, 0, 0, 0, 0, 0, 933, 0, 934, 0, 0, 0, 0, 0, 935, 0, 936, 0, 0, 0, - 0, 0, 937, 0, 938, 0, 0, 0, 0, 0, 939, 0, 940, 0, 0, 0, 0, 0, 941, 0, 942, 0, 0, 0, 0, 0, 943, 0, 944, 0, 0, 0, - 0, 945, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 948, 0, 0, 0, 0, 0, 949, 950, 0, 951, 0, 0, 0, - 0, 0, 952, 0, 953, 0, 0, 0, 0, 0, 954, 0, 955, 0, 0, 0, 0, 0, 956, 0, 957, 0, 0, 0, 0, 0, 958, 0, 959, 0, 0, 0, - 0, 0, 960, 0, 961, 0, 0, 0, 0, 0, 962, 0, 963, 0, 0, 0, 0, 0, 964, 0, 965, 0, 0, 0, 0, 0, 966, 0, 967, 0, 0, 0, - 0, 0, 968, 0, 969, 0, 0, 0, 0, 970, 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 972, 0, 0, 0, 0, 0, 973, 0, 0, 0, 0, - 0, 974, 975, 0, 976, 0, 0, 0, 0, 0, 977, 0, 978, 0, 0, 0, 0, 0, 979, 0, 980, 0, 0, 0, 0, 0, 981, 0, 982, 0, 0, 0, - 0, 0, 983, 0, 984, 0, 0, 0, 0, 0, 985, 0, 986, 0, 0, 0, 0, 0, 987, 0, 988, 0, 0, 0, 0, 0, 989, 0, 990, 0, 0, 0, - 0, 0, 991, 0, 992, 0, 0, 0, 0, 0, 993, 0, 994, 0, 0, 0, 0, 995, 0, 0, 996, 0, 0, 0, 0, 0, 0, 0, 0, 997, 0, 0, - 0, 0, 0, 998, 0, 0, 0, 0, 0, 999, 1000, 0, 1001, 0, 0, 0, 0, 0, 1002, 0, 1003, 0, 0, 0, 0, 0, 1004, 0, 1005, 0, 0, 0, - 0, 0, 1006, 0, 1007, 0, 0, 0, 0, 0, 1008, 0, 1009, 0, 0, 0, 0, 0, 1010, 0, 1011, 0, 0, 0, 0, 0, 1012, 0, 1013, 0, 0, 0, - 0, 0, 1014, 0, 1015, 0, 0, 0, 0, 0, 1016, 0, 1017, 0, 0, 0, 0, 0, 1018, 0, 1019, 0, 0, 0, 0, 1020, 0, 0, 1021, 0, 0, 0, - 0, 0, 0, 0, 0, 1022, 0, 0, 0, 0, 0, 1023, 0, 0, 0, 0, 0, 1024, 1025, 0, 1026, 0, 0, 0, 0, 0, 1027, 0, 1028, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0021[64] = { + 0x282828282828282Dull, 0xA0A0960920242828ull, 0x0A901304A2824048ull, 0x0B05480914141416ull, + 0x050582A4048A0A0Aull, 0x828282C152024505ull, 0x9141414160A90122ull, 0x8048A0A0A0B05480ull, + 0x5050505050505820ull, 0x5058208048505050ull, 0x5050505050505050ull, 0x1012282024504048ull, + 0x0582A4048A080914ull, 0x8282C15202450505ull, 0x41414160A9012282ull, 0x48A0A0A0B0548091ull, + 0x2024505050582A40ull, 0x0A90122828282C15ull, 0x0B05480914141416ull, 0x050582A4048A0A0Aull, + 0x828282C152024505ull, 0x2024505058290122ull, 0x0582A4048A0A0B05ull, 0x8282C15202450505ull, + 0x41414160A9012282ull, 0x48A0A0A0B0548091ull, 0x4024505050582A40ull, 0x2828282828282C10ull, + 0x2C10402428282828ull, 0x2828282828282828ull, 0x28282C1040242828ull, 0x2428282828282828ull, + 0x28282828282C1040ull, 0x28282C1040242828ull, 0x2828282828282828ull, 0x282828282C104024ull, + 0x4024282828282828ull, 0x2828282828282C10ull, 0x282C104024282828ull, 0x4024282828282828ull, + 0x2828282828282C10ull, 0x2C10402428282828ull, 0x2828282828282828ull, 0x28282C1040242828ull, + 0x2428282828282828ull, 0x28282828282C1040ull, 0x28282C1520242828ull, 0x1414141608201228ull, + 0x2012141414141414ull, 0x1414141414141608ull, 0x1416082012141414ull, 0x1414141414141414ull, + 0x1414141416082012ull, 0x0820121414141414ull, 0x1414141414141416ull, 0x1414160820121414ull, + 0x1214141414141414ull, 0x1414141414160820ull, 0x1608201214141414ull, 0x1414141414141414ull, + 0x1414141608201214ull, 0x2012141414141414ull, 0x1414141414141608ull, 0x1416082012141414ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0021[64] = { + 1u, 19u, 36u, 52u, 70u, 87u, 105u, 123u, 139u, 155u, 170u, 186u, 199u, 215u, 233u, 250u, + 268u, 284u, 302u, 320u, 337u, 355u, 371u, 389u, 407u, 424u, 442u, 458u, 474u, 489u, 505u, 520u, + 536u, 551u, 566u, 582u, 597u, 612u, 628u, 643u, 658u, 674u, 689u, 705u, 720u, 736u, 751u, 768u, + 783u, 798u, 814u, 829u, 845u, 860u, 874u, 891u, 906u, 922u, 937u, 952u, 968u, 983u, 998u, 1014u, }; void recomp_unit_0021_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -152,13 +47,25 @@ void recomp_unit_0021_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08858000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0021[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0021[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0021[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08858000; @@ -1205,7 +1112,6 @@ L_08858008: goto L_0885800C; L_0885800C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858148; } @@ -1379,7 +1285,17 @@ L_08858148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858154: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1397,7 +1313,6 @@ L_08858154: L_08858174: aot_gpr_7 = (static_cast(aot_gpr_6) < 139 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_088581FC; } @@ -1426,7 +1341,6 @@ L_088581A4: goto L_088581A8; L_088581A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885820C; } @@ -1435,7 +1349,6 @@ L_088581A8: L_088581B0: aot_gpr_7 = (0u | 158u); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088581FC; } @@ -1489,7 +1402,17 @@ L_0885820C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858218: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1507,7 +1430,6 @@ L_08858218: L_08858238: aot_gpr_7 = (static_cast(aot_gpr_6) < 139 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08858264; } @@ -1539,7 +1461,6 @@ L_08858264: AOT_REGCACHE_SYNC_OUT(); return; L_08858274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088582A4; } @@ -1548,7 +1469,6 @@ L_08858274: L_0885827C: aot_gpr_7 = (static_cast(aot_gpr_6) < 141 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08858264; } @@ -1573,7 +1493,17 @@ L_088582A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088582B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1607,7 +1537,6 @@ L_088582DC: } L_088582E4: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858370; } @@ -1627,7 +1556,6 @@ L_08858304: goto L_08858308; L_08858308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858380; } @@ -1698,7 +1626,17 @@ L_08858380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885838C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1732,7 +1670,6 @@ L_088583B8: } L_088583C0: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885844C; } @@ -1752,7 +1689,6 @@ L_088583E0: goto L_088583E4; L_088583E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885845C; } @@ -1823,7 +1759,17 @@ L_0885845C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858468: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1857,7 +1803,6 @@ L_08858494: } L_0885849C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858528; } @@ -1877,7 +1822,6 @@ L_088584BC: goto L_088584C0; L_088584C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858538; } @@ -1948,7 +1892,17 @@ L_08858538: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858544: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1982,7 +1936,6 @@ L_08858570: } L_08858578: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858604; } @@ -2002,7 +1955,6 @@ L_08858598: goto L_0885859C; L_0885859C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858614; } @@ -2073,7 +2025,17 @@ L_08858614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858620: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2107,7 +2069,6 @@ L_0885864C: } L_08858654: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088586E0; } @@ -2127,7 +2088,6 @@ L_08858674: goto L_08858678; L_08858678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088586F0; } @@ -2198,7 +2158,17 @@ L_088586F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088586FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2232,7 +2202,6 @@ L_08858728: } L_08858730: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088587BC; } @@ -2252,7 +2221,6 @@ L_08858750: goto L_08858754; L_08858754: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088587CC; } @@ -2323,7 +2291,17 @@ L_088587CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088587D8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2345,11 +2323,20 @@ L_088587FC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30728))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858814: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2364,7 +2351,6 @@ L_0885882C: goto L_08858830; L_08858830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885896C; } @@ -2538,7 +2524,17 @@ L_0885896C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858978: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2560,11 +2556,20 @@ L_0885899C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30896))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088589B4: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2579,7 +2584,6 @@ L_088589CC: goto L_088589D0; L_088589D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858B0C; } @@ -2753,7 +2757,17 @@ L_08858B0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858B18: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2799,7 +2813,17 @@ L_08858B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858B74: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2845,7 +2869,17 @@ L_08858BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858BD0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2891,7 +2925,17 @@ L_08858C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858C2C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2937,7 +2981,17 @@ L_08858C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858C88: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2971,7 +3025,6 @@ L_08858CB4: } L_08858CBC: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858D48; } @@ -2991,7 +3044,6 @@ L_08858CDC: goto L_08858CE0; L_08858CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858D58; } @@ -3062,7 +3114,17 @@ L_08858D58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858D64: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3096,7 +3158,6 @@ L_08858D90: } L_08858D98: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858E24; } @@ -3116,7 +3177,6 @@ L_08858DB8: goto L_08858DBC; L_08858DBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858E34; } @@ -3187,7 +3247,17 @@ L_08858E34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858E40: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3221,7 +3291,6 @@ L_08858E6C: } L_08858E74: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858F00; } @@ -3241,7 +3310,6 @@ L_08858E94: goto L_08858E98; L_08858E98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858F10; } @@ -3312,7 +3380,17 @@ L_08858F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858F1C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3346,7 +3424,6 @@ L_08858F48: } L_08858F50: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08858FDC; } @@ -3366,7 +3443,6 @@ L_08858F70: goto L_08858F74; L_08858F74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08858FEC; } @@ -3437,7 +3513,17 @@ L_08858FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08858FF8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3471,7 +3557,6 @@ L_08859024: } L_0885902C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088590B8; } @@ -3491,7 +3576,6 @@ L_0885904C: goto L_08859050; L_08859050: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088590C8; } @@ -3562,7 +3646,17 @@ L_088590C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088590D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3596,7 +3690,6 @@ L_08859100: } L_08859108: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859194; } @@ -3616,7 +3709,6 @@ L_08859128: goto L_0885912C; L_0885912C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088591A4; } @@ -3687,7 +3779,17 @@ L_088591A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088591B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3721,7 +3823,6 @@ L_088591DC: } L_088591E4: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859270; } @@ -3741,7 +3842,6 @@ L_08859204: goto L_08859208; L_08859208: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859280; } @@ -3812,7 +3912,17 @@ L_08859280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885928C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3846,7 +3956,6 @@ L_088592B8: } L_088592C0: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885934C; } @@ -3866,7 +3975,6 @@ L_088592E0: goto L_088592E4; L_088592E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885935C; } @@ -3937,7 +4045,17 @@ L_0885935C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859368: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3971,7 +4089,6 @@ L_08859394: } L_0885939C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859428; } @@ -3991,7 +4108,6 @@ L_088593BC: goto L_088593C0; L_088593C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859438; } @@ -4062,7 +4178,17 @@ L_08859438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859444: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4096,7 +4222,6 @@ L_08859470: } L_08859478: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859504; } @@ -4116,7 +4241,6 @@ L_08859498: goto L_0885949C; L_0885949C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859514; } @@ -4187,7 +4311,17 @@ L_08859514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859520: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4213,7 +4347,6 @@ L_08859540: } L_0885954C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088595B8; } @@ -4233,7 +4366,6 @@ L_0885956C: goto L_08859570; L_08859570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088595C8; } @@ -4287,7 +4419,17 @@ L_088595C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088595D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4313,7 +4455,6 @@ L_088595F4: } L_08859600: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885966C; } @@ -4333,7 +4474,6 @@ L_08859620: goto L_08859624; L_08859624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885967C; } @@ -4387,7 +4527,17 @@ L_0885967C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859688: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4421,7 +4571,6 @@ L_088596B4: } L_088596BC: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859748; } @@ -4441,7 +4590,6 @@ L_088596DC: goto L_088596E0; L_088596E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859758; } @@ -4512,7 +4660,17 @@ L_08859758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859764: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4546,7 +4704,6 @@ L_08859790: } L_08859798: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859824; } @@ -4566,7 +4723,6 @@ L_088597B8: goto L_088597BC; L_088597BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859834; } @@ -4637,7 +4793,17 @@ L_08859834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859840: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4671,7 +4837,6 @@ L_0885986C: } L_08859874: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859900; } @@ -4691,7 +4856,6 @@ L_08859894: goto L_08859898; L_08859898: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859910; } @@ -4762,7 +4926,17 @@ L_08859910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885991C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4796,7 +4970,6 @@ L_08859948: } L_08859950: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088599DC; } @@ -4816,7 +4989,6 @@ L_08859970: goto L_08859974; L_08859974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088599EC; } @@ -4887,7 +5059,17 @@ L_088599EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088599F8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4921,7 +5103,6 @@ L_08859A24: } L_08859A2C: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08859AB8; } @@ -4941,7 +5122,6 @@ L_08859A4C: goto L_08859A50; L_08859A50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859AC8; } @@ -5012,7 +5192,17 @@ L_08859AC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859AD4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5034,11 +5224,20 @@ L_08859AF8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31080))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859B10: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5053,7 +5252,6 @@ L_08859B28: goto L_08859B2C; L_08859B2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859C88; } @@ -5244,7 +5442,17 @@ L_08859C88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859C94: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5266,11 +5474,20 @@ L_08859CB8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31240))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859CD0: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5285,7 +5502,6 @@ L_08859CE8: goto L_08859CEC; L_08859CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859E48; } @@ -5476,7 +5692,17 @@ L_08859E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859E54: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5498,11 +5724,20 @@ L_08859E78: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859E90: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5517,7 +5752,6 @@ L_08859EA8: goto L_08859EAC; L_08859EAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08859FE8; } @@ -5691,7 +5925,17 @@ L_08859FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08859FF4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5713,11 +5957,20 @@ L_0885A018: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31560))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A030: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5732,7 +5985,6 @@ L_0885A048: goto L_0885A04C; L_0885A04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885A148; } @@ -5872,7 +6124,17 @@ L_0885A148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A154: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5894,11 +6156,20 @@ L_0885A178: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31696))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A190: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5913,7 +6184,6 @@ L_0885A1A8: goto L_0885A1AC; L_0885A1AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885A308; } @@ -6104,7 +6374,17 @@ L_0885A308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A314: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6126,11 +6406,20 @@ L_0885A338: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31856))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A350: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6145,7 +6434,6 @@ L_0885A368: goto L_0885A36C; L_0885A36C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885A4C8; } @@ -6336,7 +6624,17 @@ L_0885A4C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A4D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6358,11 +6656,20 @@ L_0885A4F8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(32016))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A510: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6377,7 +6684,6 @@ L_0885A528: goto L_0885A52C; L_0885A52C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885A668; } @@ -6551,7 +6857,17 @@ L_0885A668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A674: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6573,11 +6889,20 @@ L_0885A698: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(32176))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A6B0: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6592,7 +6917,6 @@ L_0885A6C8: goto L_0885A6CC; L_0885A6CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885A7C8; } @@ -6732,7 +7056,17 @@ L_0885A7C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A7D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6754,11 +7088,20 @@ L_0885A7F8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(32312))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A810: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6773,7 +7116,6 @@ L_0885A828: goto L_0885A82C; L_0885A82C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885A988; } @@ -6964,7 +7306,17 @@ L_0885A988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A994: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -6986,11 +7338,20 @@ L_0885A9B8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(32472))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885A9D0: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7005,7 +7366,6 @@ L_0885A9E8: goto L_0885A9EC; L_0885A9EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885AB48; } @@ -7196,7 +7556,17 @@ L_0885AB48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885AB54: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7218,11 +7588,20 @@ L_0885AB78: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(32632))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885AB90: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7237,7 +7616,6 @@ L_0885ABA8: goto L_0885ABAC; L_0885ABAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885ACE8; } @@ -7411,7 +7789,17 @@ L_0885ACE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885ACF4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7433,11 +7821,20 @@ L_0885AD18: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-32744))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885AD30: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7452,7 +7849,6 @@ L_0885AD48: goto L_0885AD4C; L_0885AD4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885AE48; } @@ -7592,7 +7988,17 @@ L_0885AE48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885AE54: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7626,7 +8032,6 @@ L_0885AE80: } L_0885AE88: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885AF14; } @@ -7646,7 +8051,6 @@ L_0885AEA8: goto L_0885AEAC; L_0885AEAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885AF24; } @@ -7717,7 +8121,17 @@ L_0885AF24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885AF30: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7739,11 +8153,20 @@ L_0885AF54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-32608))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885AF6C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7758,7 +8181,6 @@ L_0885AF84: goto L_0885AF88; L_0885AF88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885B0C4; } @@ -7932,7 +8354,17 @@ L_0885B0C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B0D0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -7954,11 +8386,20 @@ L_0885B0F4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-32440))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B10C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7973,7 +8414,6 @@ L_0885B124: goto L_0885B128; L_0885B128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885B264; } @@ -8147,7 +8587,17 @@ L_0885B264: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B270: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8169,11 +8619,20 @@ L_0885B294: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-32272))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B2AC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8188,7 +8647,6 @@ L_0885B2C4: goto L_0885B2C8; L_0885B2C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885B404; } @@ -8362,7 +8820,17 @@ L_0885B404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B410: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8384,11 +8852,20 @@ L_0885B434: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-32104))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B44C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8403,7 +8880,6 @@ L_0885B464: goto L_0885B468; L_0885B468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885B5A4; } @@ -8577,7 +9053,17 @@ L_0885B5A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B5B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8599,11 +9085,20 @@ L_0885B5D4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31936))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B5EC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8618,7 +9113,6 @@ L_0885B604: goto L_0885B608; L_0885B608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885B744; } @@ -8792,7 +9286,17 @@ L_0885B744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B750: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -8814,11 +9318,20 @@ L_0885B774: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31768))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B78C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8833,7 +9346,6 @@ L_0885B7A4: goto L_0885B7A8; L_0885B7A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885B8E4; } @@ -9007,7 +9519,17 @@ L_0885B8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B8F0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9029,11 +9551,20 @@ L_0885B914: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31600))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885B92C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9048,7 +9579,6 @@ L_0885B944: goto L_0885B948; L_0885B948: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885BA84; } @@ -9222,7 +9752,17 @@ L_0885BA84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BA90: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9244,11 +9784,20 @@ L_0885BAB4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31432))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BACC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9263,7 +9812,6 @@ L_0885BAE4: goto L_0885BAE8; L_0885BAE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885BC24; } @@ -9437,7 +9985,17 @@ L_0885BC24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BC30: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9459,11 +10017,20 @@ L_0885BC54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31264))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BC6C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9478,7 +10045,6 @@ L_0885BC84: goto L_0885BC88; L_0885BC88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885BDC4; } @@ -9652,7 +10218,17 @@ L_0885BDC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BDD0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9674,11 +10250,20 @@ L_0885BDF4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31096))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BE0C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9693,7 +10278,6 @@ L_0885BE24: goto L_0885BE28; L_0885BE28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885BF64; } @@ -9867,7 +10451,17 @@ L_0885BF64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BF70: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -9889,11 +10483,20 @@ L_0885BF94: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30920))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885BFAC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9908,7 +10511,6 @@ L_0885BFC4: goto L_0885BFC8; L_0885BFC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0022_entry, 22u, 18u, 0x0885C104u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0022.cpp b/profiles/vcs/generated/generated_unit_0022.cpp index 872d124..c290dec 100644 --- a/profiles/vcs/generated/generated_unit_0022.cpp +++ b/profiles/vcs/generated/generated_unit_0022.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0022[4090] = { - 1, 0, 2, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 0, - 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, - 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, 0, 0, - 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, - 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 39, 0, 40, 0, 0, 0, - 0, 0, 41, 0, 42, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, - 0, 47, 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, - 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, - 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, - 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, - 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 97, 98, 0, 99, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 0, 0, 0, 108, 0, 109, 0, 0, 0, - 0, 0, 110, 0, 111, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, - 0, 118, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 123, 0, 124, 0, 0, 0, - 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, - 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 0, 0, 0, 139, 0, 140, 0, 0, 0, - 0, 0, 141, 0, 142, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, - 0, 147, 148, 0, 149, 0, 0, 0, 0, 0, 150, 0, 151, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, - 0, 0, 156, 0, 157, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, - 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, - 0, 0, 0, 171, 0, 0, 0, 0, 0, 172, 173, 0, 174, 0, 0, 0, 0, 0, 175, 0, 176, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, - 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 0, 183, 0, 184, 0, 0, 0, 0, 0, 185, 0, 186, 0, 0, 0, - 0, 0, 187, 0, 188, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, 191, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, - 0, 0, 0, 194, 0, 0, 0, 0, 0, 195, 196, 0, 197, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, - 0, 0, 202, 0, 203, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 0, 206, 0, 207, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, - 0, 0, 210, 0, 211, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, - 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 0, 222, 0, 0, 0, 0, 0, 223, 0, 224, 0, 0, 0, - 0, 0, 225, 0, 226, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 231, 0, 232, 0, 0, 0, - 0, 0, 233, 0, 234, 0, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, - 0, 241, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 245, 246, 0, 247, 0, 0, 0, - 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, - 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 258, 0, 259, 0, 0, 0, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, - 0, 0, 264, 0, 265, 0, 0, 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 0, 270, 271, 0, 272, 0, 0, 0, 0, 0, 273, 0, 274, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, - 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, 0, - 0, 0, 287, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 296, 0, 297, 0, 0, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, - 0, 0, 302, 0, 303, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, - 0, 0, 310, 0, 311, 0, 0, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 314, 0, 315, 0, 0, 0, 0, 316, 0, 0, 317, 0, 0, 0, - 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 321, 0, 322, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, - 0, 0, 325, 0, 326, 0, 0, 0, 0, 0, 327, 0, 328, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, - 0, 0, 333, 0, 334, 0, 0, 0, 0, 0, 335, 0, 336, 0, 0, 0, 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, - 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 346, 0, 347, 0, 0, 0, - 0, 0, 348, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, - 0, 0, 356, 0, 357, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, - 0, 0, 364, 0, 365, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, - 0, 370, 371, 0, 372, 0, 0, 0, 0, 0, 373, 0, 374, 0, 0, 0, 0, 0, 375, 0, 376, 0, 0, 0, 0, 0, 377, 0, 378, 0, 0, 0, - 0, 0, 379, 0, 380, 0, 0, 0, 0, 0, 381, 0, 382, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 0, 0, 385, 0, 386, 0, 0, 0, - 0, 0, 387, 0, 388, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, - 0, 0, 0, 394, 0, 0, 0, 0, 0, 395, 396, 0, 397, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 0, - 0, 0, 402, 0, 403, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 0, - 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, - 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 420, 421, 0, 422, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, - 0, 0, 425, 0, 426, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 0, - 0, 0, 433, 0, 434, 0, 0, 0, 0, 0, 435, 0, 436, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, - 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 446, 0, 447, 0, 0, 0, - 0, 0, 448, 0, 449, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, 0, - 0, 0, 456, 0, 457, 0, 0, 0, 0, 0, 458, 0, 459, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 462, 0, 463, 0, 0, 0, - 0, 0, 464, 0, 465, 0, 0, 0, 0, 466, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, - 0, 470, 471, 0, 472, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, - 0, 0, 479, 0, 480, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, - 0, 0, 487, 0, 488, 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, - 0, 0, 0, 494, 0, 0, 0, 0, 0, 495, 496, 0, 497, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 500, 0, 501, 0, 0, 0, - 0, 0, 502, 0, 503, 0, 0, 0, 0, 0, 504, 0, 505, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, - 0, 0, 510, 0, 511, 0, 0, 0, 0, 0, 512, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 516, 0, 0, 517, 0, 0, 0, - 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, 521, 0, 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, - 0, 0, 525, 0, 526, 0, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, 0, 531, 0, 532, 0, 0, 0, - 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 535, 0, 536, 0, 0, 0, 0, 0, 537, 0, 538, 0, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, - 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 545, 0, 546, 0, 0, 0, 0, 0, 547, 548, 0, 549, 0, 0, 0, - 0, 0, 550, 0, 551, 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 556, 0, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 558, 0, 0, 559, 0, 560, 0, 561, 0, 0, 0, 0, 0, 562, 563, 0, 564, 0, 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, 0, - 0, 567, 0, 568, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 574, - 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 0, 0, 582, - 0, 583, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 588, 0, 589, 0, 0, 0, 0, 590, 0, 591, 0, 0, - 0, 0, 592, 0, 593, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 598, 0, 599, 0, 0, 0, 0, 600, 0, - 601, 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 606, 0, 607, 0, 0, 0, 0, 608, 0, 609, 0, 0, 0, - 0, 610, 0, 611, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 614, 0, 615, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 0, 618, 0, 619, - 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, - 628, 0, 629, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 0, 634, 0, 635, 0, 0, 0, 0, 636, 0, 637, 0, - 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 640, 0, 641, 0, 0, 0, 0, 642, 0, 643, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 646, - 0, 647, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 652, 0, 653, 0, 0, 0, 0, 654, 0, 655, 0, 0, - 0, 0, 656, 0, 657, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, 660, 0, 661, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 664, 0, - 665, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, 0, 670, 0, 671, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, - 0, 674, 0, 675, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 0, 682, 0, 683, - 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 690, 0, 691, 0, 0, 0, 0, - 692, 0, 693, 0, 0, 0, 0, 694, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 0, 0, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 701, 0, - 0, 0, 0, 702, 0, 703, 0, 0, 0, 0, 704, 0, 705, 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 0, 708, 0, 709, 0, 0, 0, 0, 710, - 0, 711, 0, 0, 0, 0, 712, 0, 713, 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 0, 718, 0, 719, 0, 0, - 0, 0, 720, 0, 721, 0, 0, 0, 0, 722, 0, 723, 0, 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 728, 0, - 729, 0, 0, 0, 0, 730, 0, 731, 0, 0, 0, 0, 732, 0, 733, 0, 0, 0, 0, 734, 0, 735, 0, 0, 0, 0, 736, 0, 737, 0, 0, 0, - 0, 738, 0, 739, 0, 0, 0, 0, 740, 0, 741, 0, 0, 0, 0, 742, 0, 743, 0, 0, 0, 0, 744, 0, 745, 0, 0, 0, 0, 746, 0, 747, - 0, 0, 0, 0, 748, 0, 749, 0, 0, 0, 0, 750, 0, 751, 0, 0, 0, 0, 752, 0, 753, 0, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, - 756, 0, 757, 0, 0, 0, 0, 758, 0, 759, 0, 0, 0, 0, 760, 0, 761, 0, 0, 0, 0, 762, 0, 763, 0, 0, 0, 0, 764, 0, 765, 0, - 0, 0, 0, 766, 0, 767, 0, 0, 0, 0, 768, 0, 769, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 0, 772, 0, 773, 0, 0, 0, 0, 774, - 0, 775, 0, 0, 0, 0, 776, 0, 777, 0, 0, 0, 0, 778, 0, 779, 0, 0, 0, 0, 780, 0, 781, 0, 0, 0, 0, 782, 0, 783, 0, 0, - 0, 0, 784, 0, 785, 0, 0, 0, 0, 786, 0, 787, 0, 0, 0, 0, 788, 0, 789, 0, 0, 0, 0, 790, 0, 791, 0, 0, 0, 0, 792, 0, - 793, 0, 0, 0, 0, 794, 0, 795, 0, 0, 0, 0, 796, 0, 797, 0, 0, 0, 0, 798, 0, 799, 0, 0, 0, 0, 800, 0, 801, 0, 0, 0, - 0, 802, 0, 803, 0, 0, 0, 0, 804, 0, 805, 0, 0, 0, 0, 806, 0, 807, 0, 0, 0, 0, 808, 0, 809, 0, 0, 0, 0, 810, 0, 811, - 0, 0, 0, 0, 812, 0, 813, 0, 0, 0, 0, 814, 0, 815, 0, 0, 0, 0, 816, 0, 817, 0, 0, 0, 0, 818, 0, 819, 0, 0, 0, 0, - 820, 0, 821, 0, 0, 0, 0, 822, 0, 823, 0, 0, 0, 0, 824, 0, 825, 0, 0, 0, 0, 826, 0, 827, 0, 0, 0, 0, 828, 0, 829, 0, - 0, 0, 0, 830, 0, 831, 0, 0, 0, 0, 832, 0, 0, 833, 0, 0, 0, 834, 0, 0, 0, 835, 0, 0, 0, 0, 0, 0, 836, 0, 0, 837, - 0, 0, 838, 0, 839, 0, 840, 0, 841, 0, 842, 0, 0, 0, 0, 0, 843, 0, 844, 0, 0, 845, 0, 846, 847, 0, 0, 0, 0, 848, 0, 0, - 0, 0, 0, 0, 849, 0, 850, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 853, 0, 0, 0, 0, 854, - 0, 855, 0, 0, 0, 0, 0, 0, 0, 856, 0, 857, 0, 0, 858, 0, 0, 0, 0, 0, 859, 0, 0, 860, 0, 0, 0, 0, 0, 861, 0, 0, - 862, 0, 0, 863, 0, 864, 865, 0, 0, 0, 0, 0, 866, 0, 0, 867, 0, 0, 0, 0, 868, 0, 0, 0, 0, 0, 0, 0, 0, 869, 0, 870, - 0, 871, 0, 872, 0, 873, 0, 0, 0, 874, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 0, 876, 0, 0, 877, 0, 878, 0, 879, 0, 880, - 881, 0, 882, 0, 0, 883, 884, 0, 0, 0, 0, 885, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 888, 0, 0, 0, 0, 0, - 0, 889, 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 0, 892, 0, 893, 0, 0, 0, 894, 0, 0, 0, 895, 0, 0, 0, 0, 0, - 0, 0, 0, 896, 0, 897, 0, 0, 0, 0, 898, 0, 0, 899, 0, 900, 0, 0, 901, 902, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 0, 0, - 904, 0, 0, 905, 0, 0, 906, 0, 0, 0, 0, 907, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, - 910, 0, 0, 0, 0, 0, 911, 0, 0, 0, 912, 0, 0, 0, 0, 0, 913, 0, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, 0, 918, 0, 0, 919, 0, 0, 0, 0, 0, 0, 920, 0, 0, - 921, 0, 0, 0, 0, 0, 0, 922, 0, 0, 923, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 924, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 927, - 0, 0, 0, 0, 0, 0, 0, 928, 0, 0, 0, 929, 0, 0, 0, 930, 0, 931, 932, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 936, 0, 0, 937, 0, 0, 0, 0, 0, 0, 0, 938, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, 0, - 0, 0, 0, 0, 0, 0, 941, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 943, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0022[64] = { + 0x1414141414141415ull, 0x1414141416082012ull, 0x0820121414141414ull, 0x1414141414141416ull, + 0x1414160820121414ull, 0x1214141414141414ull, 0x1414141414160820ull, 0x1608201214141414ull, + 0x1414141414141414ull, 0x1414141608201214ull, 0x2012141414141414ull, 0x1414141414141608ull, + 0x1414160820121414ull, 0x1214141414141414ull, 0x1414141414160820ull, 0x1608201214141414ull, + 0x1414141414141414ull, 0x1414141608201214ull, 0x2012141414141414ull, 0x1414141414141608ull, + 0x1416082012141414ull, 0x1414141414141414ull, 0x1414141416082012ull, 0x0820121414141414ull, + 0x1414141414141416ull, 0x1414160820121414ull, 0x1214141414141414ull, 0x1414141414160820ull, + 0x1608201214141414ull, 0x1414141414141414ull, 0x1414141608201214ull, 0x2012141414141414ull, + 0x1414141414141608ull, 0x1416082012141414ull, 0x1414141414141414ull, 0x09141414160A9012ull, + 0x90048A0A0A0B0548ull, 0x2850A14285082920ull, 0x142850A142850A14ull, 0x0A142850A142850Aull, + 0x850A142850A14285ull, 0x42850A142850A142ull, 0xA142850A142850A1ull, 0x50A142850A142850ull, + 0x2850A142850A1428ull, 0x142850A142850A14ull, 0x0A142850A142850Aull, 0x850A142850A14285ull, + 0x42850A142850A142ull, 0xA142850A142850A1ull, 0x50A142850A142850ull, 0x21A5055490222428ull, + 0x20904A0286001050ull, 0xAA40422AA0109069ull, 0x0445101204402865ull, 0x02020849020CA428ull, + 0x0004000000210441ull, 0x2048100000008000ull, 0x0000000000000481ull, 0x0000000000800000ull, + 0x0000000000008000ull, 0x8000000000000080ull, 0x0004000800168880ull, 0x0200204040050120ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0022[64] = { + 1u, 18u, 33u, 47u, 64u, 79u, 95u, 110u, 125u, 141u, 156u, 171u, 187u, 202u, 218u, 233u, + 248u, 264u, 279u, 294u, 310u, 325u, 341u, 356u, 370u, 387u, 402u, 418u, 433u, 448u, 464u, 479u, + 494u, 510u, 525u, 541u, 558u, 575u, 592u, 610u, 628u, 647u, 665u, 684u, 702u, 720u, 738u, 756u, + 775u, 793u, 812u, 830u, 849u, 862u, 881u, 896u, 910u, 916u, 921u, 924u, 925u, 926u, 928u, 936u, }; void recomp_unit_0022_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0022_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0885C000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0022[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0022[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0022[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0885C000; @@ -1261,7 +1168,17 @@ L_0885C104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C110: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1283,11 +1200,20 @@ L_0885C134: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30752))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C14C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1302,7 +1228,6 @@ L_0885C164: goto L_0885C168; L_0885C168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885C2A4; } @@ -1476,7 +1401,17 @@ L_0885C2A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C2B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1498,11 +1433,20 @@ L_0885C2D4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30584))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C2EC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1517,7 +1461,6 @@ L_0885C304: goto L_0885C308; L_0885C308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885C444; } @@ -1691,7 +1634,17 @@ L_0885C444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C450: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1713,11 +1666,20 @@ L_0885C474: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30416))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C48C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1732,7 +1694,6 @@ L_0885C4A4: goto L_0885C4A8; L_0885C4A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885C5E4; } @@ -1906,7 +1867,17 @@ L_0885C5E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C5F0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1928,11 +1899,20 @@ L_0885C614: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30248))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C62C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -1947,7 +1927,6 @@ L_0885C644: goto L_0885C648; L_0885C648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885C784; } @@ -2121,7 +2100,17 @@ L_0885C784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C790: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2143,11 +2132,20 @@ L_0885C7B4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30080))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C7CC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2162,7 +2160,6 @@ L_0885C7E4: goto L_0885C7E8; L_0885C7E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885C924; } @@ -2336,7 +2333,17 @@ L_0885C924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C930: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2358,11 +2365,20 @@ L_0885C954: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-29912))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885C96C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2377,7 +2393,6 @@ L_0885C984: goto L_0885C988; L_0885C988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885CAC4; } @@ -2551,7 +2566,17 @@ L_0885CAC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CAD0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2573,11 +2598,20 @@ L_0885CAF4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-29744))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CB0C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2592,7 +2626,6 @@ L_0885CB24: goto L_0885CB28; L_0885CB28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885CC44; } @@ -2749,7 +2782,17 @@ L_0885CC44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CC50: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2771,11 +2814,20 @@ L_0885CC74: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-29576))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CC8C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2790,7 +2842,6 @@ L_0885CCA4: goto L_0885CCA8; L_0885CCA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885CDE4; } @@ -2964,7 +3015,17 @@ L_0885CDE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CDF0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -2986,11 +3047,20 @@ L_0885CE14: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-29408))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CE2C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3005,7 +3075,6 @@ L_0885CE44: goto L_0885CE48; L_0885CE48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885CF84; } @@ -3179,7 +3248,17 @@ L_0885CF84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CF90: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3201,11 +3280,20 @@ L_0885CFB4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-29240))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885CFCC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3220,7 +3308,6 @@ L_0885CFE4: goto L_0885CFE8; L_0885CFE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885D124; } @@ -3394,7 +3481,17 @@ L_0885D124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D130: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3416,11 +3513,20 @@ L_0885D154: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-29072))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D16C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3435,7 +3541,6 @@ L_0885D184: goto L_0885D188; L_0885D188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885D2C4; } @@ -3609,7 +3714,17 @@ L_0885D2C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D2D0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3631,11 +3746,20 @@ L_0885D2F4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28904))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D30C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3650,7 +3774,6 @@ L_0885D324: goto L_0885D328; L_0885D328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885D464; } @@ -3824,7 +3947,17 @@ L_0885D464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D470: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3846,11 +3979,20 @@ L_0885D494: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28736))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D4AC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3865,7 +4007,6 @@ L_0885D4C4: goto L_0885D4C8; L_0885D4C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885D604; } @@ -4039,7 +4180,17 @@ L_0885D604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D610: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4061,11 +4212,20 @@ L_0885D634: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28568))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D64C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4080,7 +4240,6 @@ L_0885D664: goto L_0885D668; L_0885D668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885D7A4; } @@ -4254,7 +4413,17 @@ L_0885D7A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D7B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4276,11 +4445,20 @@ L_0885D7D4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D7EC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4295,7 +4473,6 @@ L_0885D804: goto L_0885D808; L_0885D808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885D944; } @@ -4469,7 +4646,17 @@ L_0885D944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D950: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4491,11 +4678,20 @@ L_0885D974: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28224))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885D98C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4510,7 +4706,6 @@ L_0885D9A4: goto L_0885D9A8; L_0885D9A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885DAE4; } @@ -4684,7 +4879,17 @@ L_0885DAE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DAF0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4706,11 +4911,20 @@ L_0885DB14: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28056))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DB2C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4725,7 +4939,6 @@ L_0885DB44: goto L_0885DB48; L_0885DB48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885DC84; } @@ -4899,7 +5112,17 @@ L_0885DC84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DC90: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -4921,11 +5144,20 @@ L_0885DCB4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-27888))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DCCC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4940,7 +5172,6 @@ L_0885DCE4: goto L_0885DCE8; L_0885DCE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885DE24; } @@ -5114,7 +5345,17 @@ L_0885DE24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DE30: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5136,11 +5377,20 @@ L_0885DE54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-27720))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DE6C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5155,7 +5405,6 @@ L_0885DE84: goto L_0885DE88; L_0885DE88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885DFC4; } @@ -5329,7 +5578,17 @@ L_0885DFC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885DFD0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5351,11 +5610,20 @@ L_0885DFF4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-27552))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E00C: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5370,7 +5638,6 @@ L_0885E024: goto L_0885E028; L_0885E028: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885E164; } @@ -5544,7 +5811,17 @@ L_0885E164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E170: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -5566,11 +5843,20 @@ L_0885E194: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-27384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E1AC: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5585,7 +5871,6 @@ L_0885E1C4: goto L_0885E1C8; L_0885E1C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885E304; } @@ -5759,7 +6044,17 @@ L_0885E304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E310: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5793,7 +6088,6 @@ L_0885E33C: } L_0885E344: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885E3D0; } @@ -5813,7 +6107,6 @@ L_0885E364: goto L_0885E368; L_0885E368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885E3E0; } @@ -5884,7 +6177,17 @@ L_0885E3E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E3EC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5918,7 +6221,6 @@ L_0885E418: } L_0885E420: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_0885E4AC; } @@ -5938,7 +6240,6 @@ L_0885E440: goto L_0885E444; L_0885E444: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885E4BC; } @@ -6009,7 +6310,17 @@ L_0885E4BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E4C8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_7 = (aot_gpr_6 | 0u); @@ -6041,11 +6352,20 @@ L_0885E4FC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-27216))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E514: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16352))); { const bool branch_taken = 0u == 0u; @@ -6078,11 +6398,20 @@ L_0885E534: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26648))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885E54C: aot_gpr_6 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6093,7 +6422,6 @@ L_0885E54C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6109,7 +6437,6 @@ L_0885E568: AOT_REGCACHE_SYNC_OUT(); return; L_0885E57C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6125,7 +6452,6 @@ L_0885E584: AOT_REGCACHE_SYNC_OUT(); return; L_0885E598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6141,7 +6467,6 @@ L_0885E5A0: AOT_REGCACHE_SYNC_OUT(); return; L_0885E5B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6157,7 +6482,6 @@ L_0885E5BC: AOT_REGCACHE_SYNC_OUT(); return; L_0885E5D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6173,7 +6497,6 @@ L_0885E5D8: AOT_REGCACHE_SYNC_OUT(); return; L_0885E5EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6189,7 +6512,6 @@ L_0885E5F4: AOT_REGCACHE_SYNC_OUT(); return; L_0885E608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6205,7 +6527,6 @@ L_0885E610: AOT_REGCACHE_SYNC_OUT(); return; L_0885E624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6221,7 +6542,6 @@ L_0885E62C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6237,7 +6557,6 @@ L_0885E648: AOT_REGCACHE_SYNC_OUT(); return; L_0885E65C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6253,7 +6572,6 @@ L_0885E664: AOT_REGCACHE_SYNC_OUT(); return; L_0885E678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6269,7 +6587,6 @@ L_0885E680: AOT_REGCACHE_SYNC_OUT(); return; L_0885E694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6285,7 +6602,6 @@ L_0885E69C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E6B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6301,7 +6617,6 @@ L_0885E6B8: AOT_REGCACHE_SYNC_OUT(); return; L_0885E6CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6317,7 +6632,6 @@ L_0885E6D4: AOT_REGCACHE_SYNC_OUT(); return; L_0885E6E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6333,7 +6647,6 @@ L_0885E6F0: AOT_REGCACHE_SYNC_OUT(); return; L_0885E704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6349,7 +6662,6 @@ L_0885E70C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E720: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6365,7 +6677,6 @@ L_0885E728: AOT_REGCACHE_SYNC_OUT(); return; L_0885E73C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6381,7 +6692,6 @@ L_0885E744: AOT_REGCACHE_SYNC_OUT(); return; L_0885E758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6397,7 +6707,6 @@ L_0885E760: AOT_REGCACHE_SYNC_OUT(); return; L_0885E774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6413,7 +6722,6 @@ L_0885E77C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6429,7 +6737,6 @@ L_0885E798: AOT_REGCACHE_SYNC_OUT(); return; L_0885E7AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6445,7 +6752,6 @@ L_0885E7B4: AOT_REGCACHE_SYNC_OUT(); return; L_0885E7C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6461,7 +6767,6 @@ L_0885E7D0: AOT_REGCACHE_SYNC_OUT(); return; L_0885E7E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6477,7 +6782,6 @@ L_0885E7EC: AOT_REGCACHE_SYNC_OUT(); return; L_0885E800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6493,7 +6797,6 @@ L_0885E808: AOT_REGCACHE_SYNC_OUT(); return; L_0885E81C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6509,7 +6812,6 @@ L_0885E824: AOT_REGCACHE_SYNC_OUT(); return; L_0885E838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6525,7 +6827,6 @@ L_0885E840: AOT_REGCACHE_SYNC_OUT(); return; L_0885E854: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6541,7 +6842,6 @@ L_0885E85C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6557,7 +6857,6 @@ L_0885E878: AOT_REGCACHE_SYNC_OUT(); return; L_0885E88C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6573,7 +6872,6 @@ L_0885E894: AOT_REGCACHE_SYNC_OUT(); return; L_0885E8A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6589,7 +6887,6 @@ L_0885E8B0: AOT_REGCACHE_SYNC_OUT(); return; L_0885E8C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6605,7 +6902,6 @@ L_0885E8CC: AOT_REGCACHE_SYNC_OUT(); return; L_0885E8E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6621,7 +6917,6 @@ L_0885E8E8: AOT_REGCACHE_SYNC_OUT(); return; L_0885E8FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6637,7 +6932,6 @@ L_0885E904: AOT_REGCACHE_SYNC_OUT(); return; L_0885E918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6653,7 +6947,6 @@ L_0885E920: AOT_REGCACHE_SYNC_OUT(); return; L_0885E934: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6669,7 +6962,6 @@ L_0885E93C: AOT_REGCACHE_SYNC_OUT(); return; L_0885E950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6685,7 +6977,6 @@ L_0885E958: AOT_REGCACHE_SYNC_OUT(); return; L_0885E96C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6701,7 +6992,6 @@ L_0885E974: AOT_REGCACHE_SYNC_OUT(); return; L_0885E988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6717,7 +7007,6 @@ L_0885E990: AOT_REGCACHE_SYNC_OUT(); return; L_0885E9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6733,7 +7022,6 @@ L_0885E9AC: AOT_REGCACHE_SYNC_OUT(); return; L_0885E9C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6749,7 +7037,6 @@ L_0885E9C8: AOT_REGCACHE_SYNC_OUT(); return; L_0885E9DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6765,7 +7052,6 @@ L_0885E9E4: AOT_REGCACHE_SYNC_OUT(); return; L_0885E9F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6781,7 +7067,6 @@ L_0885EA00: AOT_REGCACHE_SYNC_OUT(); return; L_0885EA14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6797,7 +7082,6 @@ L_0885EA1C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EA30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6813,7 +7097,6 @@ L_0885EA38: AOT_REGCACHE_SYNC_OUT(); return; L_0885EA4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6829,7 +7112,6 @@ L_0885EA54: AOT_REGCACHE_SYNC_OUT(); return; L_0885EA68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6845,7 +7127,6 @@ L_0885EA70: AOT_REGCACHE_SYNC_OUT(); return; L_0885EA84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6861,7 +7142,6 @@ L_0885EA8C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EAA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6877,7 +7157,6 @@ L_0885EAA8: AOT_REGCACHE_SYNC_OUT(); return; L_0885EABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6893,7 +7172,6 @@ L_0885EAC4: AOT_REGCACHE_SYNC_OUT(); return; L_0885EAD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6909,7 +7187,6 @@ L_0885EAE0: AOT_REGCACHE_SYNC_OUT(); return; L_0885EAF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6925,7 +7202,6 @@ L_0885EAFC: AOT_REGCACHE_SYNC_OUT(); return; L_0885EB10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6941,7 +7217,6 @@ L_0885EB18: AOT_REGCACHE_SYNC_OUT(); return; L_0885EB2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6957,7 +7232,6 @@ L_0885EB34: AOT_REGCACHE_SYNC_OUT(); return; L_0885EB48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6973,7 +7247,6 @@ L_0885EB50: AOT_REGCACHE_SYNC_OUT(); return; L_0885EB64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -6989,7 +7262,6 @@ L_0885EB6C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EB80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7005,7 +7277,6 @@ L_0885EB88: AOT_REGCACHE_SYNC_OUT(); return; L_0885EB9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7021,7 +7292,6 @@ L_0885EBA4: AOT_REGCACHE_SYNC_OUT(); return; L_0885EBB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7037,7 +7307,6 @@ L_0885EBC0: AOT_REGCACHE_SYNC_OUT(); return; L_0885EBD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7053,7 +7322,6 @@ L_0885EBDC: AOT_REGCACHE_SYNC_OUT(); return; L_0885EBF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7069,7 +7337,6 @@ L_0885EBF8: AOT_REGCACHE_SYNC_OUT(); return; L_0885EC0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7085,7 +7352,6 @@ L_0885EC14: AOT_REGCACHE_SYNC_OUT(); return; L_0885EC28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7101,7 +7367,6 @@ L_0885EC30: AOT_REGCACHE_SYNC_OUT(); return; L_0885EC44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7117,7 +7382,6 @@ L_0885EC4C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EC60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7133,7 +7397,6 @@ L_0885EC68: AOT_REGCACHE_SYNC_OUT(); return; L_0885EC7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7149,7 +7412,6 @@ L_0885EC84: AOT_REGCACHE_SYNC_OUT(); return; L_0885EC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7165,7 +7427,6 @@ L_0885ECA0: AOT_REGCACHE_SYNC_OUT(); return; L_0885ECB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7181,7 +7442,6 @@ L_0885ECBC: AOT_REGCACHE_SYNC_OUT(); return; L_0885ECD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7197,7 +7457,6 @@ L_0885ECD8: AOT_REGCACHE_SYNC_OUT(); return; L_0885ECEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7213,7 +7472,6 @@ L_0885ECF4: AOT_REGCACHE_SYNC_OUT(); return; L_0885ED08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7229,7 +7487,6 @@ L_0885ED10: AOT_REGCACHE_SYNC_OUT(); return; L_0885ED24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7245,7 +7502,6 @@ L_0885ED2C: AOT_REGCACHE_SYNC_OUT(); return; L_0885ED40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7261,7 +7517,6 @@ L_0885ED48: AOT_REGCACHE_SYNC_OUT(); return; L_0885ED5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7277,7 +7532,6 @@ L_0885ED64: AOT_REGCACHE_SYNC_OUT(); return; L_0885ED78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7293,7 +7547,6 @@ L_0885ED80: AOT_REGCACHE_SYNC_OUT(); return; L_0885ED94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7309,7 +7562,6 @@ L_0885ED9C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EDB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7325,7 +7577,6 @@ L_0885EDB8: AOT_REGCACHE_SYNC_OUT(); return; L_0885EDCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7341,7 +7592,6 @@ L_0885EDD4: AOT_REGCACHE_SYNC_OUT(); return; L_0885EDE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7357,7 +7607,6 @@ L_0885EDF0: AOT_REGCACHE_SYNC_OUT(); return; L_0885EE04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7373,7 +7622,6 @@ L_0885EE0C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EE20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7389,7 +7637,6 @@ L_0885EE28: AOT_REGCACHE_SYNC_OUT(); return; L_0885EE3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7405,7 +7652,6 @@ L_0885EE44: AOT_REGCACHE_SYNC_OUT(); return; L_0885EE58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7421,7 +7667,6 @@ L_0885EE60: AOT_REGCACHE_SYNC_OUT(); return; L_0885EE74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7437,7 +7682,6 @@ L_0885EE7C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EE90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7453,7 +7697,6 @@ L_0885EE98: AOT_REGCACHE_SYNC_OUT(); return; L_0885EEAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7469,7 +7712,6 @@ L_0885EEB4: AOT_REGCACHE_SYNC_OUT(); return; L_0885EEC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7485,7 +7727,6 @@ L_0885EED0: AOT_REGCACHE_SYNC_OUT(); return; L_0885EEE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7501,7 +7742,6 @@ L_0885EEEC: AOT_REGCACHE_SYNC_OUT(); return; L_0885EF00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7517,7 +7757,6 @@ L_0885EF08: AOT_REGCACHE_SYNC_OUT(); return; L_0885EF1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7533,7 +7772,6 @@ L_0885EF24: AOT_REGCACHE_SYNC_OUT(); return; L_0885EF38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7549,7 +7787,6 @@ L_0885EF40: AOT_REGCACHE_SYNC_OUT(); return; L_0885EF54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7565,7 +7802,6 @@ L_0885EF5C: AOT_REGCACHE_SYNC_OUT(); return; L_0885EF70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7581,7 +7817,6 @@ L_0885EF78: AOT_REGCACHE_SYNC_OUT(); return; L_0885EF8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7597,7 +7832,6 @@ L_0885EF94: AOT_REGCACHE_SYNC_OUT(); return; L_0885EFA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7613,7 +7847,6 @@ L_0885EFB0: AOT_REGCACHE_SYNC_OUT(); return; L_0885EFC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7629,7 +7862,6 @@ L_0885EFCC: AOT_REGCACHE_SYNC_OUT(); return; L_0885EFE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7645,7 +7877,6 @@ L_0885EFE8: AOT_REGCACHE_SYNC_OUT(); return; L_0885EFFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7661,7 +7892,6 @@ L_0885F004: AOT_REGCACHE_SYNC_OUT(); return; L_0885F018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7677,7 +7907,6 @@ L_0885F020: AOT_REGCACHE_SYNC_OUT(); return; L_0885F034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7693,7 +7922,6 @@ L_0885F03C: AOT_REGCACHE_SYNC_OUT(); return; L_0885F050: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7709,7 +7937,6 @@ L_0885F058: AOT_REGCACHE_SYNC_OUT(); return; L_0885F06C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7725,7 +7952,6 @@ L_0885F074: AOT_REGCACHE_SYNC_OUT(); return; L_0885F088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7741,7 +7967,6 @@ L_0885F090: AOT_REGCACHE_SYNC_OUT(); return; L_0885F0A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7757,7 +7982,6 @@ L_0885F0AC: AOT_REGCACHE_SYNC_OUT(); return; L_0885F0C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7772,7 +7996,6 @@ L_0885F0C8: goto L_0885C110; L_0885F0DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7787,7 +8010,6 @@ L_0885F0E4: goto L_0885C2B0; L_0885F0F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7802,7 +8024,6 @@ L_0885F100: goto L_0885C450; L_0885F114: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7817,7 +8038,6 @@ L_0885F11C: goto L_0885C5F0; L_0885F130: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7832,7 +8052,6 @@ L_0885F138: goto L_0885C790; L_0885F14C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7847,7 +8066,6 @@ L_0885F154: goto L_0885C930; L_0885F168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7862,7 +8080,6 @@ L_0885F170: goto L_0885CAD0; L_0885F184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7877,7 +8094,6 @@ L_0885F18C: goto L_0885CC50; L_0885F1A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7892,7 +8108,6 @@ L_0885F1A8: goto L_0885CDF0; L_0885F1BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7907,7 +8122,6 @@ L_0885F1C4: goto L_0885CF90; L_0885F1D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7922,7 +8136,6 @@ L_0885F1E0: goto L_0885D130; L_0885F1F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7937,7 +8150,6 @@ L_0885F1FC: goto L_0885D2D0; L_0885F210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7952,7 +8164,6 @@ L_0885F218: goto L_0885D470; L_0885F22C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7967,7 +8178,6 @@ L_0885F234: goto L_0885D610; L_0885F248: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7982,7 +8192,6 @@ L_0885F250: goto L_0885D7B0; L_0885F264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -7997,7 +8206,6 @@ L_0885F26C: goto L_0885D950; L_0885F280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -8012,7 +8220,6 @@ L_0885F288: goto L_0885DAF0; L_0885F29C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -8027,7 +8234,6 @@ L_0885F2A4: goto L_0885DC90; L_0885F2B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -8042,7 +8248,6 @@ L_0885F2C0: goto L_0885DE30; L_0885F2D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -8057,7 +8262,6 @@ L_0885F2DC: goto L_0885DFD0; L_0885F2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -8072,7 +8276,6 @@ L_0885F2F8: goto L_0885E170; L_0885F30C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F328; } @@ -8092,12 +8295,21 @@ L_0885F328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F334: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0885F344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0089_entry, 89u, 288u, 0x08969514u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0885F344u) goto L_0885F344; AOT_REGCACHE_SYNC_OUT(); return; L_0885F344: @@ -8108,7 +8320,17 @@ L_0885F344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F354: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8116,7 +8338,6 @@ L_0885F354: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), aot_gpr_31); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0885F398; } @@ -8136,7 +8357,6 @@ L_0885F37C: AOT_REGCACHE_SYNC_OUT(); return; L_0885F388: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0885F3A0; } @@ -8144,7 +8364,6 @@ L_0885F388: } L_0885F390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F3DC; } @@ -8202,7 +8421,17 @@ L_0885F3E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F3F4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -8309,14 +8538,34 @@ L_0885F468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F47C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F484: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8325,7 +8574,6 @@ L_0885F484: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0885F53C; } @@ -8333,7 +8581,6 @@ L_0885F484: } L_0885F4A4: aot_gpr_31 = (0x0885F4ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 726u, 0x0887F5C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0885F4ACu) goto L_0885F4AC; AOT_REGCACHE_SYNC_OUT(); return; L_0885F4AC: @@ -8373,7 +8620,6 @@ L_0885F4DC: L_0885F4F4: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0885F53C; } @@ -8388,7 +8634,6 @@ L_0885F500: goto L_0885F50C; L_0885F50C: aot_gpr_31 = (0x0885F514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0885F514u) goto L_0885F514; AOT_REGCACHE_SYNC_OUT(); return; L_0885F514: @@ -8423,7 +8668,17 @@ L_0885F53C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F550: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8438,7 +8693,6 @@ L_0885F550: AOT_REGCACHE_SYNC_OUT(); return; L_0885F574: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0885F584; } @@ -8446,7 +8700,6 @@ L_0885F574: } L_0885F57C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F5A4; } @@ -8481,7 +8734,17 @@ L_0885F5A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F5B8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); @@ -8498,7 +8761,6 @@ L_0885F5B8: L_0885F5D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0885F5F4; } @@ -8514,7 +8776,6 @@ L_0885F5E4: } L_0885F5EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0885F618; } @@ -8522,7 +8783,6 @@ L_0885F5EC: } L_0885F5F4: aot_gpr_31 = (0x0885F5FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0885F5FCu) goto L_0885F5FC; AOT_REGCACHE_SYNC_OUT(); return; L_0885F5FC: @@ -8554,14 +8814,34 @@ L_0885F618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F62C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F634: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), 0u); @@ -8582,7 +8862,17 @@ L_0885F658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F668: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -8600,7 +8890,17 @@ L_0885F684: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F690: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8639,7 +8939,17 @@ L_0885F6D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F6E8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8654,7 +8964,6 @@ L_0885F6E8: AOT_REGCACHE_SYNC_OUT(); return; L_0885F70C: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0885F73C; } @@ -8671,7 +8980,6 @@ L_0885F714: L_0885F728: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0885F748; } @@ -8710,7 +9018,17 @@ L_0885F74C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F764: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); @@ -8724,7 +9042,6 @@ L_0885F764: L_0885F780: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0885F798; } @@ -8756,7 +9073,17 @@ L_0885F7AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F7C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -8795,7 +9122,17 @@ L_0885F818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F828: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8814,7 +9151,17 @@ L_0885F840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F854: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -8847,11 +9194,20 @@ L_0885F854: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(36), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_13)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F8C8: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -8884,11 +9240,20 @@ L_0885F8C8: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_14), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(32), aot_run_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F93C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -8921,11 +9286,20 @@ L_0885F93C: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_12)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F9B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_fpr_13 = std::bit_cast(0u); @@ -8942,7 +9316,17 @@ L_0885F9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885F9D8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_fpr_13 = std::bit_cast(0u); @@ -8959,7 +9343,17 @@ L_0885F9F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FA00: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_fpr_13 = std::bit_cast(0u); @@ -8976,7 +9370,17 @@ L_0885FA1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FA28: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -9065,11 +9469,20 @@ L_0885FA28: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(48), aot_run_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FB5C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -9130,11 +9543,20 @@ L_0885FB5C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(52), std::bit_cast(ctx.fpr[2])); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), std::bit_cast(aot_fpr_13)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FC3C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -9195,11 +9617,20 @@ L_0885FC3C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(48), std::bit_cast(ctx.fpr[1])); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), std::bit_cast(aot_fpr_13)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FD1C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -9260,11 +9691,20 @@ L_0885FD1C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(48), std::bit_cast(ctx.fpr[2])); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(52), std::bit_cast(aot_fpr_13)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FDFC: ctx.gpr[2] = (0u | 0u); { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); @@ -9365,7 +9805,6 @@ L_0885FE2C: } L_0885FE3C: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_0885FE48; } @@ -9376,11 +9815,20 @@ L_0885FE44: goto L_0885FE48; L_0885FE48: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FE50: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(48); std::uint32_t vfpu_words[4]{}; @@ -9443,7 +9891,17 @@ L_0885FE50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FE8C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(48); std::uint32_t vfpu_words[4]{}; @@ -9506,7 +9964,17 @@ L_0885FE8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FEC8: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9617,7 +10085,17 @@ L_0885FEC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FF14: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -9683,14 +10161,33 @@ L_0885FF20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FF40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FF48: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); @@ -9749,7 +10246,17 @@ L_0885FF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FF78: ctx.execute_vfpu_matrix_init_ct<32u, 4u, 3u>(); { float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value); @@ -9772,7 +10279,17 @@ L_0885FF78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FF98: ctx.execute_vfpu_matrix_init_ct<32u, 3u, 3u>(); { float vfpu_value[4]{}; ctx.read_vfpu_vector_ct<0u, 4u>(vfpu_value); @@ -9791,7 +10308,17 @@ L_0885FF98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FFB4: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.execute_vfpu_matrix_init_ct<32u, 4u, 3u>(); @@ -9818,7 +10345,17 @@ L_0885FFB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0885FFE4: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); aot_gpr_6 = (std::bit_cast(aot_fpr_13)); diff --git a/profiles/vcs/generated/generated_unit_0023.cpp b/profiles/vcs/generated/generated_unit_0023.cpp index 7d95fdc..732fe62 100644 --- a/profiles/vcs/generated/generated_unit_0023.cpp +++ b/profiles/vcs/generated/generated_unit_0023.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0023[4095] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, - 12, 0, 0, 0, 13, 0, 14, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 0, 22, 0, 23, 0, 0, 24, 0, 0, 25, 0, 26, 0, 27, 0, 28, 0, - 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 31, 0, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 0, 37, 0, 38, 0, 39, 0, 40, 0, - 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 45, 0, 46, 0, 47, 0, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, - 0, 0, 53, 0, 0, 0, 0, 0, 54, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 67, 0, 0, 0, 0, 0, 0, 0, - 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 73, 74, 0, 75, 0, - 0, 0, 0, 76, 0, 77, 0, 78, 0, 0, 0, 79, 0, 0, 80, 0, 81, 0, 82, 0, 0, 83, 0, 84, 0, 0, 0, 85, 0, 0, 86, 0, - 87, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 96, 0, 0, 97, 0, 98, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, 104, 0, 105, 0, 0, 0, 106, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 109, 0, 110, 0, 0, 0, - 0, 0, 111, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, - 0, 118, 0, 119, 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 123, 0, 0, 124, 0, 125, 0, 0, 126, 0, 0, 0, 0, 127, - 0, 0, 0, 128, 0, 129, 130, 0, 131, 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 135, 0, 136, 137, 0, 0, 0, 138, - 0, 139, 0, 140, 0, 0, 141, 0, 0, 0, 142, 0, 143, 144, 0, 145, 146, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 155, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, - 0, 157, 0, 158, 0, 0, 159, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 162, 0, 0, 163, 0, 0, 0, 164, 0, 165, 0, - 166, 0, 0, 167, 0, 168, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 173, 174, 0, 175, 0, - 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 180, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, 185, 0, - 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, 0, 192, 0, 0, 193, 0, 194, - 0, 0, 195, 0, 0, 196, 0, 0, 197, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, - 0, 0, 204, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, - 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 223, 0, 224, 0, 225, - 226, 0, 0, 227, 0, 228, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 243, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 247, - 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 253, 0, 0, 254, 0, 255, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 262, 0, 0, 0, 263, 0, 0, 0, 264, 0, 265, - 0, 266, 0, 0, 267, 0, 0, 0, 0, 268, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 280, 0, - 0, 281, 0, 0, 282, 0, 0, 0, 0, 283, 0, 284, 285, 0, 286, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 291, 292, 0, 0, 293, 0, - 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 297, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 0, 304, 0, 0, 0, 305, - 0, 306, 0, 307, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, 311, 0, 0, 312, 0, 313, 0, 0, 314, - 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 320, 0, 321, 322, 0, 0, 0, 0, 323, 0, - 0, 0, 324, 0, 325, 0, 326, 0, 0, 0, 0, 327, 328, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 0, 0, 335, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 338, 0, 339, 340, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 347, 0, 0, 0, 0, 348, 0, 0, 349, - 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, - 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 359, 360, 0, - 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 363, 0, 364, 0, 0, 0, 0, 365, 366, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, - 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, - 0, 0, 0, 0, 381, 0, 0, 0, 0, 382, 0, 383, 0, 384, 0, 385, 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 388, 389, 390, 0, 391, 0, - 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 393, 394, 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, 404, - 0, 0, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, 407, 408, 0, 0, 409, 0, 0, 410, 0, 0, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, - 0, 0, 0, 0, 416, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 422, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, - 429, 430, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 439, 0, 0, 0, 0, 440, 0, 441, 442, 0, 443, 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, - 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 453, 454, 0, - 0, 0, 0, 0, 455, 456, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 459, 0, 0, 0, 0, 460, 461, 0, 462, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 463, 464, 0, 0, 0, 0, 465, 466, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, - 469, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 472, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 475, 0, - 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 480, 0, 0, 0, 481, 0, - 0, 0, 0, 482, 483, 0, 484, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, - 0, 0, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 0, 502, 0, 503, 0, - 0, 504, 0, 505, 0, 0, 506, 0, 507, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 517, 0, 0, 0, - 518, 0, 0, 519, 0, 0, 520, 0, 521, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 525, 0, 526, 0, 527, 0, 0, 528, 0, 0, 529, - 0, 0, 0, 0, 0, 530, 0, 531, 0, 532, 533, 0, 534, 0, 0, 0, 535, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, - 542, 0, 543, 0, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, - 0, 558, 0, 559, 0, 560, 0, 561, 562, 0, 563, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, - 571, 0, 572, 0, 573, 574, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 578, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, - 0, 0, 0, 581, 582, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 591, 0, 592, 0, 593, 594, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 596, 0, 597, 598, 0, 0, 599, 0, 0, 600, 0, 601, - 0, 602, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 0, 0, 0, 606, 607, 0, 0, 608, 0, 0, 0, 609, 0, 610, 0, 611, 0, 0, 0, - 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 617, 0, - 0, 618, 0, 0, 0, 0, 0, 619, 0, 620, 621, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 626, 0, 0, 0, 0, - 0, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 631, 0, 632, - 0, 633, 0, 0, 634, 0, 0, 0, 0, 635, 0, 636, 0, 637, 0, 0, 638, 0, 639, 0, 0, 0, 640, 0, 641, 0, 0, 642, 0, 643, 0, 0, - 0, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 649, 0, 650, 0, 651, 0, 0, 652, 0, 0, 0, 0, 653, 0, 654, 0, 655, 0, 0, 656, - 0, 0, 657, 0, 658, 0, 0, 659, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, - 0, 664, 0, 0, 665, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 670, 0, 671, - 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, - 0, 678, 0, 0, 679, 0, 680, 0, 681, 0, 682, 0, 0, 683, 0, 684, 0, 685, 0, 0, 686, 0, 0, 687, 0, 688, 0, 0, 0, 689, 0, 690, - 0, 0, 0, 0, 691, 0, 0, 692, 0, 693, 0, 0, 694, 0, 695, 0, 0, 696, 0, 0, 697, 0, 698, 0, 0, 699, 0, 0, 700, 0, 701, 0, - 0, 0, 702, 0, 703, 0, 0, 0, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 0, 0, 709, 0, 0, 710, 0, 711, 0, 0, 0, 712, 0, 713, - 0, 0, 714, 0, 715, 716, 0, 0, 717, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 0, 0, 721, 0, 722, 0, 723, 0, 0, 0, 724, 0, 0, 0, 725, 0, 726, 0, 0, 0, 727, 0, 728, 0, 0, 0, 0, 729, 0, 730, - 0, 731, 0, 0, 732, 0, 733, 0, 0, 734, 0, 0, 735, 0, 736, 0, 0, 737, 0, 0, 738, 0, 739, 0, 0, 0, 740, 0, 741, 0, 0, 0, - 0, 742, 0, 743, 744, 0, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 746, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, - 749, 0, 750, 0, 0, 751, 0, 752, 0, 0, 0, 753, 0, 0, 0, 754, 0, 755, 0, 0, 0, 756, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, - 758, 0, 759, 760, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 763, 764, 0, 765, 0, 0, 0, 0, 766, 0, 767, 0, 768, - 0, 0, 769, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, 773, 0, 774, 0, 775, 0, 0, 776, 0, 0, 777, - 0, 778, 0, 0, 0, 779, 0, 0, 0, 780, 0, 781, 0, 782, 0, 783, 0, 784, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 786, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 788, 0, 0, 789, 0, 0, 0, 790, 0, 0, 791, 0, 792, 0, 793, 0, 0, 794, 0, 0, 795, 0, - 0, 796, 0, 797, 0, 0, 0, 0, 798, 0, 0, 799, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 801, 0, 802, 803, 0, 0, 0, 804, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0023[64] = { + 0x0002002000080081ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x2000011100400020ull, + 0x55255010012002D1ull, 0xAA954920552AA490ull, 0x01AA802100491504ull, 0x48A548A858912002ull, + 0x2950021004080111ull, 0x149000008A880640ull, 0x84A4848A21222104ull, 0x0015B44A8D109168ull, + 0x000000008A0A0804ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x5128024A80000000ull, + 0x54A8281458150229ull, 0x0220A524A4844111ull, 0x4204290404000000ull, 0xA8201155000A0821ull, + 0x01020484000002A9ull, 0x0024090005000000ull, 0x0008A4808803C000ull, 0xA229000022022290ull, + 0x5042401402842A12ull, 0x4D00080040045A12ull, 0x8A28502100000A01ull, 0x434285209486010Aull, + 0x00000A0001005854ull, 0x0420086800049048ull, 0x2040101290C80080ull, 0x0916152068400810ull, + 0x2225020040408088ull, 0x04520C085C84AA10ull, 0x55493280A4003200ull, 0x008080204A0400B0ull, + 0x8430001304020002ull, 0x010A168408000900ull, 0x6A00000000092002ull, 0x0500C300161800B0ull, + 0x4501401048106021ull, 0x52AAAAA824108158ull, 0x92A825491AAAA94Aull, 0xAAAAAAA5554916A0ull, + 0x091000B5555045AAull, 0x0001201811000000ull, 0x0008040200200280ull, 0xA4D0203500000000ull, + 0x4880882015130892ull, 0xA100091009211682ull, 0x0004008429452A12ull, 0x2008189495095110ull, + 0x00410004A0809112ull, 0xA292A55205080000ull, 0xA292AA1452525290ull, 0xA145115100200334ull, + 0x0094201A14525252ull, 0xA85A008D082288A5ull, 0x1102AA2292A28024ull, 0x4684090A49522440ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0023[64] = { + 1u, 6u, 6u, 6u, 12u, 29u, 53u, 68u, 87u, 99u, 111u, 128u, 149u, 156u, 156u, 156u, + 156u, 156u, 156u, 156u, 166u, 186u, 203u, 211u, 226u, 236u, 242u, 253u, 266u, 281u, 294u, 306u, + 324u, 333u, 344u, 355u, 370u, 381u, 399u, 416u, 426u, 436u, 447u, 455u, 469u, 482u, 504u, 530u, + 558u, 579u, 585u, 591u, 602u, 618u, 633u, 647u, 664u, 675u, 691u, 714u, 731u, 749u, 769u, 787u, }; void recomp_unit_0023_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0023_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08860000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0023[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0023[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0023[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08860000; @@ -996,7 +903,17 @@ L_08860000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886001C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<8u>(aot_gpr_5); @@ -1044,7 +961,17 @@ L_0886001C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886004C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); aot_gpr_6 = (std::bit_cast(aot_fpr_13)); @@ -1098,7 +1025,17 @@ L_0886004C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860094: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); aot_gpr_6 = (std::bit_cast(aot_fpr_13)); @@ -1124,7 +1061,17 @@ L_08860094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088600C4: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_5); @@ -1281,11 +1228,20 @@ L_088600C4: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_17), std::bit_cast(aot_fpr_12)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(48), aot_run_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860314: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1330,7 +1286,17 @@ L_08860314: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860358: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1415,7 +1381,17 @@ L_08860390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088603A0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1530,7 +1506,17 @@ L_088603A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088603F4: aot_gpr_5 = (0u | 239u); jump_target = aot_gpr_31; @@ -1538,12 +1524,21 @@ L_088603F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860400: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1970))); aot_gpr_5 = (0u | 102u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08860418; } @@ -1562,11 +1557,20 @@ L_08860418: goto L_0886041C; L_0886041C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860424: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -1603,9 +1607,7 @@ L_08860460: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088604B8; } @@ -1617,9 +1619,7 @@ L_08860490: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088604C8; } @@ -1627,7 +1627,6 @@ L_08860490: } L_088604B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088604F8; } @@ -1635,7 +1634,6 @@ L_088604B0: } L_088604B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -1643,7 +1641,6 @@ L_088604B8: } L_088604C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -1661,7 +1658,6 @@ L_088604C8: L_088604D4: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 103 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088604F0; } @@ -1669,7 +1665,6 @@ L_088604D4: } L_088604E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860630; } @@ -1677,7 +1672,6 @@ L_088604E0: } L_088604E8: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_088604E0; } @@ -1685,7 +1679,6 @@ L_088604E8: } L_088604F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -1695,9 +1688,7 @@ L_088604F8: aot_gpr_4 = (16288u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08860578; } @@ -1724,7 +1715,6 @@ L_0886051C: L_08860528: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 102 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08860544; } @@ -1732,7 +1722,6 @@ L_08860528: } L_08860534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860630; } @@ -1740,7 +1729,6 @@ L_08860534: } L_0886053C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08860534; } @@ -1748,7 +1736,6 @@ L_0886053C: } L_08860544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -1765,7 +1752,6 @@ L_0886054C: L_08860554: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 141 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08860544; } @@ -1773,7 +1759,6 @@ L_08860554: } L_08860560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860534; } @@ -1781,7 +1766,6 @@ L_08860560: } L_08860568: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08860544; } @@ -1789,7 +1773,6 @@ L_08860568: } L_08860570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860534; } @@ -1800,9 +1783,7 @@ L_08860578: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08860630; } @@ -1837,7 +1818,6 @@ L_088605AC: } L_088605B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088605DC; } @@ -1845,7 +1825,6 @@ L_088605B8: } L_088605C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860630; } @@ -1862,7 +1841,6 @@ L_088605C8: L_088605D0: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 108 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088605C0; } @@ -1870,7 +1848,6 @@ L_088605D0: } L_088605DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -1878,7 +1855,6 @@ L_088605DC: } L_088605E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088605DC; } @@ -1886,7 +1862,6 @@ L_088605E4: } L_088605EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088605C0; } @@ -1915,14 +1890,22 @@ L_08860608: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26552))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860620: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088605DC; } @@ -1930,7 +1913,6 @@ L_08860620: } L_08860628: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088605C0; } @@ -1940,7 +1922,6 @@ L_08860630: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1970))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -1949,7 +1930,6 @@ L_08860630: L_08860640: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1968))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_088606BC; } @@ -1995,7 +1975,6 @@ L_08860694: aot_gpr_4 = (ctx.gpr[21] + aot_gpr_4); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088606CC; } @@ -2003,7 +1982,6 @@ L_08860694: } L_088606BC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088606D4; } @@ -2011,7 +1989,6 @@ L_088606BC: } L_088606C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -2019,7 +1996,6 @@ L_088606C4: } L_088606CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088606E0; } @@ -2027,7 +2003,6 @@ L_088606CC: } L_088606D4: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_088606C4; } @@ -2052,7 +2027,17 @@ L_088606E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860704: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2067,7 +2052,6 @@ L_08860704: L_08860734: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08860770; } @@ -2083,7 +2067,6 @@ L_08860740: L_08860750: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08860770; } @@ -2101,7 +2084,6 @@ L_0886076C: goto L_08860770; L_08860770: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08860794; } @@ -2112,7 +2094,6 @@ L_08860778: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886079C; } @@ -2120,7 +2101,6 @@ L_08860778: } L_0886078C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088607AC; } @@ -2128,7 +2108,6 @@ L_0886078C: } L_08860794: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860928; } @@ -2138,7 +2117,6 @@ L_0886079C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(1926)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088607C0; } @@ -2147,7 +2125,6 @@ L_0886079C: L_088607AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1038))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088607C8; } @@ -2155,7 +2132,6 @@ L_088607AC: } L_088607B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088607DC; } @@ -2163,7 +2139,6 @@ L_088607B8: } L_088607C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860928; } @@ -2172,7 +2147,6 @@ L_088607C0: L_088607C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1712))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088607DC; } @@ -2186,7 +2160,6 @@ L_088607DC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1970))); aot_gpr_5 = (0u | 239u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08860928; } @@ -2209,7 +2182,6 @@ L_08860800: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1964))); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08860928; } @@ -2236,7 +2208,6 @@ L_08860820: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08860924; } @@ -2284,7 +2255,6 @@ L_088608A4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1970))); aot_gpr_5 = (0u | 127u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088608EC; } @@ -2310,7 +2280,6 @@ L_088608E0: goto L_088608EC; L_088608EC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08860918; } @@ -2355,7 +2324,17 @@ L_08860928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886094C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2370,7 +2349,6 @@ L_0886095C: AOT_REGCACHE_SYNC_OUT(); return; L_08860964: aot_gpr_31 = (0x0886096Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 469u, 0x08AEDEB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886096Cu) goto L_0886096C; AOT_REGCACHE_SYNC_OUT(); return; L_0886096C: @@ -2381,7 +2359,17 @@ L_0886096C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886097C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -2510,7 +2498,6 @@ L_08860A8C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08860AD4; } @@ -2519,7 +2506,6 @@ L_08860A8C: L_08860A9C: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08860AC8; } @@ -2530,7 +2516,6 @@ L_08860AA8: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(0), aot_gpr_6); ctx.gpr[7] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08860AC8; } @@ -2593,7 +2578,6 @@ L_08860B14: goto L_08860B18; L_08860B18: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08860B6C; } @@ -2683,7 +2667,6 @@ L_08860B98: } L_08860BA8: aot_gpr_31 = (0x08860BB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08860BB0u) goto L_08860BB0; AOT_REGCACHE_SYNC_OUT(); return; L_08860BB0: @@ -2691,7 +2674,6 @@ L_08860BB0: goto L_08860BB4; L_08860BB4: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08860B7C; } @@ -2702,7 +2684,6 @@ L_08860BBC: goto L_08860BC0; L_08860BC0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08860BD0; } @@ -2710,7 +2691,6 @@ L_08860BC0: } L_08860BC8: aot_gpr_31 = (0x08860BD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08860BD0u) goto L_08860BD0; AOT_REGCACHE_SYNC_OUT(); return; L_08860BD0: @@ -2734,7 +2714,17 @@ L_08860BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08860C08: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -2760,7 +2750,6 @@ L_08860C2C: AOT_REGCACHE_SYNC_OUT(); return; L_08860C44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08860C64; } @@ -2777,7 +2766,6 @@ L_08860C4C: AOT_REGCACHE_SYNC_OUT(); return; L_08860C64: aot_gpr_31 = (0x08860C6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08860C6Cu) goto L_08860C6C; AOT_REGCACHE_SYNC_OUT(); return; L_08860C6C: @@ -3240,12 +3228,10 @@ L_08860C7C: AOT_REGCACHE_SYNC_OUT(); return; L_0886137C: aot_gpr_31 = (0x08861384u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 723u, 0x08A06FE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08861384u) goto L_08861384; AOT_REGCACHE_SYNC_OUT(); return; L_08861384: aot_gpr_31 = (0x0886138Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886138Cu) goto L_0886138C; AOT_REGCACHE_SYNC_OUT(); return; L_0886138C: @@ -3348,7 +3334,6 @@ L_08861440: goto L_08861448; L_08861448: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08861470; } @@ -3371,7 +3356,6 @@ L_0886146C: goto L_08861470; L_08861470: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08861490; } @@ -3406,14 +3390,34 @@ L_08861490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088614AC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088614B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); @@ -3428,7 +3432,6 @@ L_088614B4: } L_088614CC: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088614F0; } @@ -3445,7 +3448,6 @@ L_088614D4: L_088614DC: aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088614D4; } @@ -3461,7 +3463,6 @@ L_088614E8: } L_088614F0: aot_gpr_31 = (0x088614F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 251u, 0x08B21418u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088614F8u) goto L_088614F8; AOT_REGCACHE_SYNC_OUT(); return; L_088614F8: @@ -3476,12 +3477,21 @@ L_08861500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861510: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); ctx.gpr[7] = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088615B4; } @@ -3493,11 +3503,20 @@ L_08861520: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26512))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861538: aot_gpr_4 = (0u | 10u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); @@ -3591,11 +3610,20 @@ L_088615A8: } L_088615B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088615BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29184))); @@ -3647,7 +3675,17 @@ L_088615E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861668: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_4 | 0u); @@ -3656,7 +3694,6 @@ L_08861668: aot_gpr_6 = (aot_gpr_5 < static_cast(12) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088617FC; } @@ -3668,11 +3705,20 @@ L_08861688: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26472))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088616A0: aot_gpr_5 = (16256u << 16u); aot_gpr_31 = (0x088616ACu); @@ -3720,7 +3766,6 @@ L_088616E4: goto L_088616F8; L_088616F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08861800; } @@ -3759,7 +3804,6 @@ L_0886172C: goto L_08861744; L_08861744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08861800; } @@ -3802,7 +3846,6 @@ L_08861790: goto L_088615BC; L_08861798: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08861788; } @@ -3843,7 +3886,6 @@ L_088617D4: goto L_088617EC; L_088617EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08861788; } @@ -3867,28 +3909,68 @@ L_08861800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886180C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861814: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886181C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861824: ctx.gpr[8] = (aot_gpr_5 & 1023u); ctx.gpr[8] = (ctx.gpr[8] << 10u); @@ -3918,7 +4000,17 @@ L_08861824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861888: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -3936,7 +4028,17 @@ L_0886189C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088618A8: { const std::uint32_t vfpu_address = ctx.gpr[7] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4042,7 +4144,6 @@ L_088618E0: } L_08861960: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088619A0; } @@ -4072,11 +4173,20 @@ L_08861968: L_088619A0: ctx.gpr[2] = (aot_gpr_4 | 0u); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088619AC: { const std::uint32_t vfpu_address = ctx.gpr[7] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4277,7 +4387,17 @@ L_08861A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861A7C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); @@ -4302,7 +4422,6 @@ L_08861A9C: L_08861AA8: aot_gpr_5 = (static_cast(aot_gpr_6) < 13 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08861ABC; } @@ -4352,7 +4471,6 @@ L_08861ACC: L_08861B10: ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08861B24; } @@ -4434,7 +4552,6 @@ L_08861B74: L_08861BC0: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08861BD4; } @@ -4466,11 +4583,20 @@ L_08861BE4: } L_08861BF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861BFC: ctx.gpr[2] = (aot_gpr_4 | 0u); aot_gpr_4 = (0u | 0u); @@ -4478,7 +4604,6 @@ L_08861BFC: L_08861C04: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08861C2C; } @@ -4505,11 +4630,20 @@ L_08861C24: } L_08861C2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861C34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4526,7 +4660,17 @@ L_08861C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861C5C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(400), static_cast(0u)); aot_gpr_5 = (0u | 0u); @@ -4540,7 +4684,6 @@ L_08861C64: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_6 = (static_cast(aot_gpr_5) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08861C64; } @@ -4548,11 +4691,20 @@ L_08861C64: } L_08861C88: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -4567,7 +4719,6 @@ L_08861C90: L_08861CB8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08861CD8; } @@ -4593,7 +4744,17 @@ L_08861CD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861CF0: ctx.gpr[7] = (aot_gpr_6 & 255u); aot_gpr_6 = (0u | 0u); @@ -4601,7 +4762,6 @@ L_08861CF0: L_08861CF8: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08861D10; } @@ -4610,7 +4770,6 @@ L_08861CF8: L_08861D04: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_08861D2C; } @@ -4640,11 +4799,20 @@ L_08861D2C: goto L_08861D30; L_08861D30: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861D38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); @@ -4673,9 +4841,7 @@ L_08861D48: aot_gpr_5 = (aot_gpr_5 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08861DE8; } @@ -4700,9 +4866,7 @@ L_08861D78: aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08861DE8; } @@ -4727,9 +4891,7 @@ L_08861DAC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08861DE8; } @@ -4753,7 +4915,17 @@ L_08861DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861DF8: aot_gpr_6 = (0u | 0u); aot_gpr_5 = (0u + static_cast(-1)); @@ -4767,7 +4939,6 @@ L_08861E00: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_6) < 6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08861E00; } @@ -4775,11 +4946,20 @@ L_08861E00: } L_08861E24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (16968u << 16u); @@ -4839,7 +5019,6 @@ L_08861EB8: AOT_REGCACHE_SYNC_OUT(); return; L_08861ECC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08861F04; } @@ -4853,7 +5032,6 @@ L_08861ED4: goto L_08861D38; L_08861EE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08861EFC; } @@ -4886,7 +5064,6 @@ L_08861F0C: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08861EB8; } @@ -4908,7 +5085,17 @@ L_08861F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861F44: ctx.gpr[8] = (0u | 0u); goto L_08861F48; @@ -4917,7 +5104,6 @@ L_08861F48: ctx.gpr[8] = (ctx.gpr[8] & 65535u); aot_gpr_6 = (static_cast(ctx.gpr[8]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08861F48; } @@ -4930,7 +5116,6 @@ L_08861F5C: goto L_08861F68; L_08861F68: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08861F94; } @@ -4939,7 +5124,6 @@ L_08861F68: L_08861F70: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_08861F94; } @@ -4964,7 +5148,17 @@ L_08861F94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861FA0: ctx.gpr[8] = (0u | 0u); aot_gpr_6 = (0u + static_cast(-1)); @@ -4974,7 +5168,6 @@ L_08861FA8: ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[7]); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08861FC4; } @@ -4989,7 +5182,6 @@ L_08861FC4: ctx.gpr[8] = (ctx.gpr[8] & 65535u); ctx.gpr[7] = (static_cast(ctx.gpr[8]) < 6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08861FA8; } @@ -4997,11 +5189,20 @@ L_08861FC4: } L_08861FD8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08861FE0: ctx.gpr[7] = (0u | 0u); goto L_08861FE4; @@ -5010,7 +5211,6 @@ L_08861FE4: aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_08862018; } @@ -5020,7 +5220,6 @@ L_08861FF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); aot_gpr_4 = (aot_gpr_4 < static_cast(1001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08862010; } @@ -5047,7 +5246,6 @@ L_08862018: ctx.gpr[7] = (ctx.gpr[7] & 65535u); aot_gpr_6 = (static_cast(ctx.gpr[7]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08861FE4; } @@ -5058,11 +5256,20 @@ L_0886202C: goto L_08862030; L_08862030: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862038: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (50588u << 16u); @@ -5102,7 +5309,6 @@ L_08862060: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_6) < 16 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08862060; } @@ -5114,7 +5320,17 @@ L_088620A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088620AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[18]); @@ -5139,7 +5355,6 @@ L_088620AC: L_0886210C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088621D4; } @@ -5151,7 +5366,6 @@ L_08862118: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[16] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088621D4; } @@ -5166,7 +5380,6 @@ L_08862130: L_0886213C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088621AC; } @@ -5225,9 +5438,7 @@ L_08862148: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862194; } @@ -5260,7 +5471,6 @@ L_08862198: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(32), ctx.gpr[16]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088621D4; } @@ -5318,7 +5528,17 @@ L_088621E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886221C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -5335,7 +5555,6 @@ L_0886221C: L_0886224C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088622D8; } @@ -5349,7 +5568,6 @@ L_0886225C: ctx.gpr[7] = (ctx.gpr[7] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[7]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886225C; } @@ -5362,7 +5580,6 @@ L_08862270: goto L_0886227C; L_0886227C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088622B0; } @@ -5371,7 +5588,6 @@ L_0886227C: L_08862284: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_088622B0; } @@ -5427,7 +5643,17 @@ L_088622D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088622F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (50588u << 16u); @@ -5444,7 +5670,6 @@ L_08862310: ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[7]); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08862358; } @@ -5477,7 +5702,6 @@ L_08862358: ctx.gpr[8] = (ctx.gpr[8] & 65535u); ctx.gpr[7] = (static_cast(ctx.gpr[8]) < 16 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08862310; } @@ -5489,7 +5713,17 @@ L_0886236C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862374: ctx.gpr[7] = (0u | 0u); goto L_08862378; @@ -5500,7 +5734,6 @@ L_08862378: aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_088623B0; } @@ -5509,7 +5742,6 @@ L_08862378: L_08862394: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088623A8; } @@ -5536,7 +5768,6 @@ L_088623B0: ctx.gpr[7] = (ctx.gpr[7] & 65535u); aot_gpr_6 = (static_cast(ctx.gpr[7]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08862378; } @@ -5547,16 +5778,24 @@ L_088623C4: goto L_088623C8; L_088623C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088623D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088623E0u); - // nop goto L_08861A7C; L_088623E0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5565,7 +5804,17 @@ L_088623E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088623EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5591,7 +5840,6 @@ L_0886241C: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886241C; } @@ -5614,7 +5862,6 @@ L_08862458: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 106 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08862458; } @@ -5635,7 +5882,17 @@ L_08862478: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088624A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7952), aot_gpr_4); @@ -5656,7 +5913,6 @@ L_088624C0: L_088624C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(535))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862510; } @@ -5666,7 +5922,6 @@ L_088624D4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8025))); aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08862510; } @@ -5676,7 +5931,6 @@ L_088624E4: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(516))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08862510; } @@ -5696,7 +5950,6 @@ L_08862510: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886253C; } @@ -5708,7 +5961,6 @@ L_08862524: goto L_088625E8; L_0886252C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08862524; } @@ -5716,7 +5968,6 @@ L_0886252C: } L_08862534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088625D8; } @@ -5725,7 +5976,6 @@ L_08862534: L_0886253C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(523))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088625D8; } @@ -5759,7 +6009,6 @@ L_0886256C: goto L_08862570; L_08862570: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088625D8; } @@ -5779,7 +6028,6 @@ L_0886258C: aot_gpr_6 = (aot_gpr_6 + aot_gpr_4); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088625AC; } @@ -5794,7 +6042,6 @@ L_088625AC: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0886258C; } @@ -5803,7 +6050,6 @@ L_088625AC: L_088625C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(-26272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088625D8; } @@ -5821,7 +6067,17 @@ L_088625D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088625E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -5837,7 +6093,6 @@ L_088625E8: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (aot_gpr_5 & 32768u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08862630; } @@ -5877,7 +6132,6 @@ L_08862634: L_08862668: ctx.gpr[9] = (ctx.gpr[8] | aot_gpr_6); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088626B0; } @@ -5908,7 +6162,6 @@ L_0886267C: L_0886269C: jump_target = aot_gpr_6; aot_gpr_31 = (0x088626A4u); - // nop ctx.pc = jump_target; ([&]() { AOT_REGCACHE_SYNC_OUT(); rt.invoke_native_fast_path(0x088B1780u, ctx); AOT_REGCACHE_SYNC_IN(); }()); if (ctx.pc == 0x088626A4u) goto L_088626A4; @@ -5932,7 +6185,17 @@ L_088626B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088626C0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -5957,7 +6220,6 @@ L_088626D8: goto L_088626E0; L_088626E0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088626F0; } @@ -5969,18 +6231,26 @@ L_088626E8: goto L_088626F0; L_088626F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088626F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08862714; } @@ -5995,7 +6265,17 @@ L_08862714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886271C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_5); @@ -6020,11 +6300,20 @@ L_08862748: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26368))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862764: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -6156,7 +6445,17 @@ L_08862884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862890: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -6216,7 +6515,17 @@ L_088628FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862920: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); jump_target = aot_gpr_31; @@ -6224,7 +6533,17 @@ L_08862920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886292C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -6277,7 +6596,6 @@ L_088629A4: goto L_088629A8; L_088629A8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088629CC; } @@ -6293,7 +6611,6 @@ L_088629B0: AOT_REGCACHE_SYNC_OUT(); return; L_088629C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088629E0; } @@ -6323,7 +6640,17 @@ L_088629E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862A04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -6348,7 +6675,6 @@ L_08862A34: L_08862A40: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862AEC; } @@ -6404,9 +6730,7 @@ L_08862A4C: ctx.fpr[3] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fpr[1] = ctx.fpr[1] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862AF4; } @@ -6414,7 +6738,6 @@ L_08862A4C: } L_08862AE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862AF8; } @@ -6422,7 +6745,6 @@ L_08862AE4: } L_08862AEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862C38; } @@ -6435,9 +6757,7 @@ L_08862AF8: ctx.fpr[2] = ctx.fpr[2] + aot_fpr_12; ctx.fpr[1] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862B14; } @@ -6448,7 +6768,6 @@ L_08862B10: goto L_08862B14; L_08862B14: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08862B68; } @@ -6464,9 +6783,7 @@ L_08862B1C: { const float fs = ctx.fpr[1]; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fpr[19] = ctx.fpr[19] + ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[3])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862B50; } @@ -6478,9 +6795,7 @@ L_08862B4C: L_08862B50: ctx.fpr[18] = ctx.fpr[0] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862B68; } @@ -6491,7 +6806,6 @@ L_08862B64: goto L_08862B68; L_08862B68: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08862BBC; } @@ -6507,9 +6821,7 @@ L_08862B70: { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_17 = aot_fpr_17 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_17 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862BA4; } @@ -6521,9 +6833,7 @@ L_08862BA0: L_08862BA4: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_17 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08862BBC; } @@ -6586,7 +6896,6 @@ L_08862C14: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862C38; } @@ -6608,7 +6917,17 @@ L_08862C38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862C50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(525))); @@ -6624,7 +6943,6 @@ L_08862C50: L_08862C6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7968))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862D3C; } @@ -6636,7 +6954,6 @@ L_08862C78: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08862D3C; } @@ -6657,7 +6974,6 @@ L_08862C90: AOT_REGCACHE_SYNC_OUT(); return; L_08862CB8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08862CE8; } @@ -6676,7 +6992,6 @@ L_08862CC0: AOT_REGCACHE_SYNC_OUT(); return; L_08862CE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08862D3C; } @@ -6686,7 +7001,6 @@ L_08862CE8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(516))); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08862D10; } @@ -6697,7 +7011,6 @@ L_08862CF8: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08862CF8; } @@ -6736,7 +7049,17 @@ L_08862D3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862D50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 65535u); @@ -6761,19 +7084,26 @@ L_08862D74: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[16]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26328))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862D8C: aot_gpr_31 = (0x08862D94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 956u, 0x0898BB4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08862D94u) goto L_08862D94; AOT_REGCACHE_SYNC_OUT(); return; L_08862D94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862E70; } @@ -6781,12 +7111,10 @@ L_08862D94: } L_08862D9C: aot_gpr_31 = (0x08862DA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 960u, 0x0898BB8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08862DA4u) goto L_08862DA4; AOT_REGCACHE_SYNC_OUT(); return; L_08862DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862E70; } @@ -6842,7 +7170,6 @@ L_08862DD4: } L_08862DDC: aot_gpr_31 = (0x08862DE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 972u, 0x0898BC4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08862DE4u) goto L_08862DE4; AOT_REGCACHE_SYNC_OUT(); return; L_08862DE4: @@ -6856,7 +7183,6 @@ L_08862DE4: } L_08862DF0: aot_gpr_31 = (0x08862DF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 976u, 0x0898BC6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08862DF8u) goto L_08862DF8; AOT_REGCACHE_SYNC_OUT(); return; L_08862DF8: @@ -6870,7 +7196,6 @@ L_08862DF8: } L_08862E04: aot_gpr_31 = (0x08862E0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 980u, 0x0898BC8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08862E0Cu) goto L_08862E0C; AOT_REGCACHE_SYNC_OUT(); return; L_08862E0C: @@ -6884,7 +7209,6 @@ L_08862E0C: } L_08862E18: aot_gpr_31 = (0x08862E20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 984u, 0x0898BCACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08862E20u) goto L_08862E20; AOT_REGCACHE_SYNC_OUT(); return; L_08862E20: @@ -6971,11 +7295,20 @@ L_08862E70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862E80: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08862EA0; } @@ -6984,7 +7317,6 @@ L_08862E80: L_08862E8C: aot_gpr_4 = (0u | 49u); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08862EA8; } @@ -6992,7 +7324,6 @@ L_08862E8C: } L_08862E98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862EE4; } @@ -7009,7 +7340,6 @@ L_08862EA0: L_08862EA8: aot_gpr_4 = (aot_gpr_5 < static_cast(49) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862EDC; } @@ -7021,11 +7351,20 @@ L_08862EB4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26248))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862ECC: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -7044,7 +7383,6 @@ L_08862ED4: } L_08862EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862F24; } @@ -7053,7 +7391,6 @@ L_08862EDC: L_08862EE4: aot_gpr_4 = (0u | 50u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08862F24; } @@ -7062,7 +7399,6 @@ L_08862EE4: L_08862EF0: aot_gpr_4 = (aot_gpr_5 < static_cast(49) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862F24; } @@ -7074,11 +7410,20 @@ L_08862EFC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26048))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862F14: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -7100,11 +7445,20 @@ L_08862F24: goto L_08862F28; L_08862F28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08862F30: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); @@ -7125,7 +7479,6 @@ L_08862F40: L_08862F4C: aot_gpr_4 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7133,7 +7486,6 @@ L_08862F4C: } L_08862F58: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08862F68; } @@ -7157,7 +7509,6 @@ L_08862F68: } L_08862F70: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08862FC4; } @@ -7165,7 +7516,6 @@ L_08862F70: } L_08862F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862FDC; } @@ -7182,7 +7532,6 @@ L_08862F80: L_08862F88: aot_gpr_4 = (static_cast(aot_gpr_4) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7190,7 +7539,6 @@ L_08862F88: } L_08862F94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862FF4; } @@ -7206,7 +7554,6 @@ L_08862F9C: } L_08862FA4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7214,7 +7561,6 @@ L_08862FA4: } L_08862FAC: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08862FBC; } @@ -7222,7 +7568,6 @@ L_08862FAC: } L_08862FB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7238,7 +7583,6 @@ L_08862FBC: } L_08862FC4: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08862FD4; } @@ -7246,7 +7590,6 @@ L_08862FC4: } L_08862FCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7262,7 +7605,6 @@ L_08862FD4: } L_08862FDC: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08862FEC; } @@ -7270,7 +7612,6 @@ L_08862FDC: } L_08862FE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7286,7 +7627,6 @@ L_08862FEC: } L_08862FF4: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08863004; } @@ -7294,7 +7634,6 @@ L_08862FF4: } L_08862FFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7310,7 +7649,6 @@ L_08863004: } L_0886300C: { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_0886301C; } @@ -7318,7 +7656,6 @@ L_0886300C: } L_08863014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08862F60; } @@ -7329,16 +7666,24 @@ L_0886301C: goto L_08863020; L_08863020: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863028: aot_gpr_4 = (aot_gpr_5 + static_cast(-4)); aot_gpr_5 = (aot_gpr_4 < static_cast(17) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08863058; } @@ -7350,14 +7695,22 @@ L_08863038: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-25848))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863050: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08863060; } @@ -7381,7 +7734,6 @@ L_08863060: } L_08863068: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08863078; } @@ -7389,7 +7741,6 @@ L_08863068: } L_08863070: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08863058; } @@ -7405,7 +7756,6 @@ L_08863078: } L_08863080: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08863090; } @@ -7413,7 +7763,6 @@ L_08863080: } L_08863088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08863058; } @@ -7424,11 +7773,20 @@ L_08863090: goto L_08863094; L_08863094: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886309C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(516))); @@ -7492,7 +7850,6 @@ L_088630EC: aot_gpr_5 = (0u | 0u); ctx.gpr[11] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08863190; } @@ -7538,7 +7895,17 @@ L_088631B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088631C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), ctx.gpr[19]); @@ -7567,7 +7934,6 @@ L_088631C0: AOT_REGCACHE_SYNC_OUT(); return; L_0886321C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863390; } @@ -7583,9 +7949,7 @@ L_08863224: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863390; } @@ -7601,9 +7965,7 @@ L_08863254: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863390; } @@ -7616,9 +7978,7 @@ L_08863284: ctx.fpr[15] = static_cast(static_cast(std::bit_cast(ctx.fpr[15]))); { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863390; } @@ -7631,9 +7991,7 @@ L_088632A8: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863390; } @@ -7717,7 +8075,6 @@ L_088632CC: AOT_REGCACHE_SYNC_OUT(); return; L_08863380: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08863390; } @@ -7749,7 +8106,17 @@ L_08863394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088633B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29152))); @@ -7757,7 +8124,6 @@ L_088633B4: ctx.gpr[16] = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088633DC; } @@ -7765,7 +8131,6 @@ L_088633B4: } L_088633D0: aot_gpr_31 = (0x088633D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 365u, 0x08871414u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088633D8u) goto L_088633D8; AOT_REGCACHE_SYNC_OUT(); return; L_088633D8: @@ -7774,7 +8139,6 @@ L_088633D8: L_088633DC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886341C; } @@ -7783,7 +8147,6 @@ L_088633DC: L_088633E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5992))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08863404; } @@ -7791,12 +8154,10 @@ L_088633E8: } L_088633F4: aot_gpr_31 = (0x088633FCu); - // nop ctx.pc = 0x08B73454u; AOT_REGCACHE_SYNC_OUT(); return; L_088633FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08863410; } @@ -7821,13 +8182,22 @@ L_0886341C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886342C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7964))); ctx.gpr[2] = (0u | 0u); aot_gpr_5 = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08863460; } @@ -7839,7 +8209,6 @@ L_08863440: L_08863444: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08863468; } @@ -7865,11 +8234,20 @@ L_08863460: } L_08863468: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863470: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7910,7 +8288,17 @@ L_088634BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088634DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7924,11 +8312,20 @@ L_088634EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088634F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7968))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08863524; } @@ -7940,7 +8337,6 @@ L_08863504: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08863524; } @@ -7959,16 +8355,24 @@ L_08863524: goto L_08863528; L_08863528: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863530: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08863540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08863540u) goto L_08863540; AOT_REGCACHE_SYNC_OUT(); return; L_08863540: @@ -7981,7 +8385,6 @@ L_08863540: L_08863554: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08863590; } @@ -7990,7 +8393,6 @@ L_08863554: L_08863560: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(ctx.gpr[7]) <= 0; - // nop if (branch_taken) { goto L_08863590; } @@ -8024,7 +8426,17 @@ L_088635A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088635AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -8035,7 +8447,6 @@ L_088635AC: { const std::uint32_t aot_run_words[3]{ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(20), aot_run_words); } aot_gpr_31 = (0x088635E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088635E0u) goto L_088635E0; AOT_REGCACHE_SYNC_OUT(); return; L_088635E0: @@ -8085,7 +8496,6 @@ L_0886362C: L_08863634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(100))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08863660; } @@ -8111,7 +8521,6 @@ L_08863658: L_08863660: aot_gpr_4 = (aot_gpr_17 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08863674; } @@ -8159,7 +8568,17 @@ L_0886369C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088636C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -8177,7 +8596,6 @@ L_088636C8: { const std::uint32_t aot_run_words[3]{ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08863738; } @@ -8187,7 +8605,6 @@ L_08863710: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08863738; } @@ -8205,7 +8622,6 @@ L_08863720: } L_08863730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088637AC; } @@ -8222,7 +8638,6 @@ L_08863738: L_08863740: aot_gpr_4 = (ctx.gpr[19] < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08863768; } @@ -8238,7 +8653,6 @@ L_0886374C: AOT_REGCACHE_SYNC_OUT(); return; L_08863760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886379C; } @@ -8265,7 +8679,6 @@ L_0886377C: AOT_REGCACHE_SYNC_OUT(); return; L_08863788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886379C; } @@ -8304,7 +8717,17 @@ L_088637B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088637CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[16]); @@ -8338,9 +8761,7 @@ L_08863804: goto L_08863810; L_08863810: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863830; } @@ -8367,7 +8788,6 @@ L_0886383C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_17)); if (branch_taken) { @@ -8379,9 +8799,7 @@ L_0886385C: aot_gpr_4 = (50042u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863888; } @@ -8427,7 +8845,17 @@ L_088638C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088638D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; @@ -8482,7 +8910,6 @@ L_08863968: L_08863984: aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08863B10; } @@ -8490,7 +8917,6 @@ L_08863984: } L_08863990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088639A8; } @@ -8498,7 +8924,6 @@ L_08863990: } L_08863998: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08863AB4; } @@ -8506,7 +8931,6 @@ L_08863998: } L_088639A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08863B10; } @@ -8515,7 +8939,6 @@ L_088639A0: L_088639A8: ctx.gpr[23] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(900))); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088639FC; } @@ -8528,7 +8951,6 @@ L_088639B4: AOT_REGCACHE_SYNC_OUT(); return; L_088639BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088639FC; } @@ -8537,7 +8959,6 @@ L_088639BC: L_088639C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088639FC; } @@ -8546,7 +8967,6 @@ L_088639C4: L_088639D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088639FC; } @@ -8554,7 +8974,6 @@ L_088639D0: } L_088639DC: aot_gpr_31 = (0x088639E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088639E4u) goto L_088639E4; AOT_REGCACHE_SYNC_OUT(); return; L_088639E4: @@ -8566,7 +8985,6 @@ L_088639E4: AOT_REGCACHE_SYNC_OUT(); return; L_088639F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863A1C; } @@ -8577,7 +8995,6 @@ L_088639FC: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (ctx.gpr[23] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08863A24; } @@ -8608,7 +9025,6 @@ L_08863A24: AOT_REGCACHE_SYNC_OUT(); return; L_08863A30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863A90; } @@ -8628,7 +9044,6 @@ L_08863A44: AOT_REGCACHE_SYNC_OUT(); return; L_08863A50: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08863A90; } @@ -8637,7 +9052,6 @@ L_08863A50: L_08863A58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08863A90; } @@ -8646,7 +9060,6 @@ L_08863A58: L_08863A64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08863A90; } @@ -8654,7 +9067,6 @@ L_08863A64: } L_08863A70: aot_gpr_31 = (0x08863A78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08863A78u) goto L_08863A78; AOT_REGCACHE_SYNC_OUT(); return; L_08863A78: @@ -8666,7 +9078,6 @@ L_08863A78: AOT_REGCACHE_SYNC_OUT(); return; L_08863A88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863AAC; } @@ -8677,7 +9088,6 @@ L_08863A90: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (ctx.gpr[23] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08863A24; } @@ -8685,7 +9095,6 @@ L_08863A90: } L_08863AA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08863A10; } @@ -8706,7 +9115,6 @@ L_08863AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08863ABC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08863AFC; } @@ -8715,7 +9123,6 @@ L_08863ABC: L_08863AC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08863AFC; } @@ -8724,7 +9131,6 @@ L_08863AC4: L_08863AD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08863AFC; } @@ -8732,7 +9138,6 @@ L_08863AD0: } L_08863ADC: aot_gpr_31 = (0x08863AE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08863AE4u) goto L_08863AE4; AOT_REGCACHE_SYNC_OUT(); return; L_08863AE4: @@ -8744,7 +9149,6 @@ L_08863AE4: AOT_REGCACHE_SYNC_OUT(); return; L_08863AF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863B08; } @@ -8801,7 +9205,17 @@ L_08863B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8816,7 +9230,6 @@ L_08863B80: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(900))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08863BE0; } @@ -8829,7 +9242,6 @@ L_08863B90: AOT_REGCACHE_SYNC_OUT(); return; L_08863B98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08863BE0; } @@ -8839,7 +9251,6 @@ L_08863BA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08863BE0; } @@ -8849,7 +9260,6 @@ L_08863BB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08863BE0; } @@ -8857,7 +9267,6 @@ L_08863BB0: } L_08863BC0: aot_gpr_31 = (0x08863BC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08863BC8u) goto L_08863BC8; AOT_REGCACHE_SYNC_OUT(); return; L_08863BC8: @@ -8869,7 +9278,6 @@ L_08863BC8: AOT_REGCACHE_SYNC_OUT(); return; L_08863BD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863BFC; } @@ -8910,7 +9318,6 @@ L_08863C04: AOT_REGCACHE_SYNC_OUT(); return; L_08863C10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863C70; } @@ -8930,7 +9337,6 @@ L_08863C24: AOT_REGCACHE_SYNC_OUT(); return; L_08863C30: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08863C70; } @@ -8939,7 +9345,6 @@ L_08863C30: L_08863C38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08863C70; } @@ -8948,7 +9353,6 @@ L_08863C38: L_08863C44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08863C70; } @@ -8956,7 +9360,6 @@ L_08863C44: } L_08863C50: aot_gpr_31 = (0x08863C58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08863C58u) goto L_08863C58; AOT_REGCACHE_SYNC_OUT(); return; L_08863C58: @@ -8968,7 +9371,6 @@ L_08863C58: AOT_REGCACHE_SYNC_OUT(); return; L_08863C68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863C8C; } @@ -8979,7 +9381,6 @@ L_08863C70: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (ctx.gpr[19] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08863C04; } @@ -9012,7 +9413,17 @@ L_08863C90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863CB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9023,7 +9434,6 @@ L_08863CB4: AOT_REGCACHE_SYNC_OUT(); return; L_08863CC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863D08; } @@ -9045,9 +9455,7 @@ L_08863CDC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(264))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863D88; } @@ -9072,7 +9480,6 @@ L_08863D08: } L_08863D14: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08863D88; } @@ -9082,7 +9489,6 @@ L_08863D1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08863D88; } @@ -9100,7 +9506,6 @@ L_08863D2C: } L_08863D3C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08863D88; } @@ -9110,7 +9515,6 @@ L_08863D44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08863D88; } @@ -9120,9 +9524,7 @@ L_08863D54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(792))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863D88; } @@ -9131,9 +9533,7 @@ L_08863D54: L_08863D6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(796))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863D88; } @@ -9158,7 +9558,17 @@ L_08863D8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863D9C: aot_gpr_5 = (15395u << 16u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -9167,9 +9577,7 @@ L_08863D9C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(264))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08863DCC; } @@ -9188,11 +9596,20 @@ L_08863DCC: goto L_08863DD0; L_08863DD0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863DD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9211,7 +9628,6 @@ L_08863DEC: AOT_REGCACHE_SYNC_OUT(); return; L_08863DF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863E7C; } @@ -9220,7 +9636,6 @@ L_08863DF4: L_08863DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08863E70; } @@ -9229,7 +9644,6 @@ L_08863DFC: L_08863E08: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08863E70; } @@ -9245,7 +9659,6 @@ L_08863E14: aot_gpr_5 = (0u | 5u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(680))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08863E44; } @@ -9259,7 +9672,6 @@ L_08863E44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08863E70; } @@ -9272,7 +9684,6 @@ L_08863E54: AOT_REGCACHE_SYNC_OUT(); return; L_08863E5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08863E70; } @@ -9321,7 +9732,6 @@ L_08863EA4: goto L_08863EAC; L_08863EAC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08863EBC; } @@ -9334,7 +9744,6 @@ L_08863EB4: AOT_REGCACHE_SYNC_OUT(); return; L_08863EBC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08863EE0; } @@ -9360,7 +9769,17 @@ L_08863EE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08863EF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -9379,7 +9798,6 @@ L_08863F18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 23u, 0x0886415Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9395,7 +9813,6 @@ L_08863F34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08863F50; } @@ -9413,7 +9830,6 @@ L_08863F50: AOT_REGCACHE_SYNC_OUT(); return; L_08863F58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 5u, 0x08864040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9422,7 +9838,6 @@ L_08863F58: L_08863F60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 5u, 0x08864040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9431,7 +9846,6 @@ L_08863F60: L_08863F6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = ctx.gpr[16] != aot_gpr_5; - // nop if (branch_taken) { goto L_08863FA0; } @@ -9440,7 +9854,6 @@ L_08863F6C: L_08863F78: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 5u, 0x08864040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9448,7 +9861,6 @@ L_08863F78: } L_08863F84: aot_gpr_31 = (0x08863F8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 374u, 0x08B41694u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08863F8Cu) goto L_08863F8C; AOT_REGCACHE_SYNC_OUT(); return; L_08863F8C: @@ -9465,7 +9877,6 @@ L_08863F8C: L_08863FA0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 5u, 0x08864040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9476,7 +9887,6 @@ L_08863FAC: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); goto L_08863FE8; @@ -9505,7 +9915,6 @@ L_08863FE8: aot_gpr_6 = (64u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 3u, 0x08864020u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0024.cpp b/profiles/vcs/generated/generated_unit_0024.cpp index efff484..03e56f6 100644 --- a/profiles/vcs/generated/generated_unit_0024.cpp +++ b/profiles/vcs/generated/generated_unit_0024.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0024[4093] = { - 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 0, - 0, 9, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 14, 0, 15, - 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 20, 0, 21, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 59, 0, - 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, - 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 76, 0, 77, 0, - 0, 0, 0, 0, 78, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 82, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, - 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 94, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, - 0, 0, 98, 0, 99, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 103, - 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 108, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, - 0, 113, 0, 114, 0, 115, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 118, 0, 0, 119, 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 122, 0, - 123, 0, 0, 0, 0, 0, 124, 0, 125, 0, 126, 0, 0, 0, 0, 127, 0, 128, 0, 0, 129, 0, 130, 0, 131, 0, 132, 0, 0, 0, 133, 0, - 134, 0, 135, 0, 136, 0, 137, 0, 0, 0, 0, 138, 0, 139, 0, 0, 140, 0, 141, 0, 142, 0, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 151, - 0, 0, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 157, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 161, 0, 162, 0, 163, 0, 0, 164, 0, 165, 0, 166, 0, 167, 0, 0, 168, 0, 169, 0, 170, 0, 171, 0, 0, 172, - 0, 0, 173, 174, 0, 0, 175, 0, 0, 0, 0, 176, 0, 177, 0, 0, 178, 0, 179, 0, 0, 180, 0, 181, 182, 0, 183, 0, 0, 184, 0, 185, - 0, 186, 187, 0, 188, 0, 0, 189, 0, 190, 0, 191, 192, 0, 193, 194, 0, 195, 0, 196, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 0, 0, - 0, 203, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 207, 0, 208, 0, 0, 209, 0, 0, 210, 0, 211, 0, 212, 0, - 0, 213, 0, 214, 0, 215, 0, 216, 0, 0, 217, 0, 218, 0, 0, 219, 0, 220, 0, 0, 221, 0, 0, 0, 222, 0, 0, 223, 0, 224, 0, 0, - 225, 0, 226, 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 230, 0, 231, 0, 0, 232, 0, 233, 0, 0, 234, 0, 235, 0, 236, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 241, - 0, 242, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 0, 247, 0, 0, 248, 0, 0, 249, 250, 0, 251, 0, 0, 252, 0, 253, 0, 0, 0, 0, - 0, 254, 0, 0, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, - 268, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 272, 0, 273, 0, 0, 274, 0, 275, 0, 0, 276, 0, 0, 277, 0, 0, 278, 0, 0, 279, - 280, 0, 0, 0, 281, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, - 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 0, 0, 296, 0, 0, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 0, 0, 302, - 0, 0, 0, 303, 0, 304, 0, 305, 0, 306, 0, 0, 307, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 311, 0, 0, 312, 313, 0, 314, 0, 315, - 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 0, 0, 323, 0, 0, 0, 324, 0, 325, - 0, 326, 0, 327, 0, 0, 328, 0, 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, 0, 0, 334, 0, 335, 0, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 0, 342, - 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, 347, 0, 0, 348, 0, 349, 0, 350, 0, 0, 351, 0, 0, 352, - 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 0, 355, 0, 356, 0, 0, 357, 0, 358, 0, 359, 0, 0, 360, 0, 0, 361, 0, 0, 0, - 362, 0, 0, 0, 0, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, 366, 0, 367, 0, 368, 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 380, 0, 381, 0, - 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, - 389, 0, 0, 0, 0, 0, 390, 0, 391, 0, 392, 0, 0, 393, 0, 0, 394, 0, 395, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 399, 0, 400, 0, 0, 0, 401, 0, 0, 0, 402, - 0, 0, 403, 0, 404, 0, 0, 0, 405, 0, 406, 0, 407, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, - 412, 0, 413, 0, 0, 414, 0, 415, 0, 416, 0, 417, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 421, 0, - 422, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, - 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 432, 0, 433, 0, 434, 0, 0, 0, - 0, 435, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 439, 440, 0, 441, 0, 442, 0, 0, 0, 0, 0, - 443, 0, 0, 444, 0, 445, 0, 446, 447, 0, 448, 0, 449, 0, 450, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, - 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 457, 458, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, - 461, 0, 0, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 0, 0, 0, 465, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 469, 0, - 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 0, 474, 475, 0, 476, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 479, 0, 0, 480, 0, 0, 0, - 481, 0, 0, 482, 0, 483, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 487, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, - 0, 491, 0, 0, 0, 492, 0, 0, 493, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, - 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 503, 0, 0, 0, 0, 0, - 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 508, 509, 0, 510, 0, 0, 0, 511, - 0, 0, 0, 0, 0, 512, 0, 0, 513, 0, 514, 0, 515, 516, 0, 517, 0, 518, 0, 519, 520, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 522, - 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 526, 527, 0, 528, 0, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 534, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, 539, 540, 0, 541, 0, - 0, 0, 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, - 0, 551, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 562, 0, 563, 0, - 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 567, 0, 568, 569, 0, 570, - 0, 0, 0, 571, 0, 0, 572, 0, 573, 0, 574, 0, 575, 0, 0, 576, 0, 577, 0, 578, 579, 0, 580, 0, 581, 0, 582, 583, 0, 584, 0, 0, - 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 590, 0, 591, 0, - 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 596, 0, 597, 0, 598, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 601, - 0, 0, 602, 603, 0, 604, 0, 0, 0, 0, 605, 0, 606, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 609, 0, 0, 610, 0, 611, 0, 0, 612, - 0, 0, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 616, 617, 0, 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, - 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, - 0, 624, 0, 625, 0, 626, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, - 0, 630, 0, 631, 632, 0, 633, 0, 0, 0, 634, 0, 0, 635, 0, 636, 0, 637, 0, 638, 0, 0, 639, 0, 640, 0, 641, 642, 0, 643, 0, 644, - 0, 645, 646, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, - 0, 0, 652, 653, 0, 654, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, - 0, 659, 0, 660, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 663, 0, 0, 664, 0, 0, 665, 0, 666, 0, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, 0, 670, 0, 671, 0, 672, - 0, 673, 0, 674, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 682, 0, 683, 0, 0, 0, 0, - 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, - 0, 0, 0, 0, 690, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 695, 696, 0, - 0, 0, 0, 0, 0, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 701, 702, 0, 703, - 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 709, 0, 710, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, 714, 0, 0, 0, 0, 715, - 0, 0, 0, 716, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 721, 0, - 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 726, 0, 727, 0, - 0, 0, 0, 728, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 731, 732, 0, 0, 0, 0, 0, 0, 0, 0, 733, - 0, 734, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 737, 738, 0, 739, 0, 0, 0, 0, 740, 0, 0, 0, - 0, 741, 0, 742, 0, 0, 0, 0, 0, 743, 0, 0, 744, 0, 745, 0, 746, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 749, 0, 750, 0, 0, 751, 0, 0, 752, 0, 753, 0, - 0, 0, 754, 0, 0, 0, 755, 0, 0, 756, 0, 757, 0, 0, 758, 0, 0, 0, 0, 0, 759, 0, 0, 760, 0, 0, 0, 761, 0, 0, 762, 0, - 0, 763, 0, 764, 0, 765, 0, 766, 0, 767, 0, 0, 768, 0, 769, 0, 770, 0, 0, 771, 0, 772, 0, 773, 0, 774, 0, 0, 0, 0, 0, 775, - 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 777, 0, 778, 0, 0, 779, 0, 0, 0, 780, 0, 781, 0, 0, 0, 782, 0, 783, 0, 784, 0, 0, - 785, 0, 0, 0, 0, 786, 0, 0, 0, 0, 787, 0, 0, 0, 0, 788, 0, 0, 0, 0, 789, 0, 0, 0, 0, 790, 0, 0, 0, 0, 791, 0, - 792, 0, 793, 0, 0, 0, 0, 794, 0, 0, 0, 0, 795, 0, 0, 0, 0, 796, 0, 0, 0, 0, 797, 0, 798, 799, 0, 800, 0, 0, 801, 0, - 0, 802, 0, 0, 803, 0, 804, 0, 805, 0, 0, 0, 0, 0, 806, 0, 807, 0, 808, 809, 0, 810, 0, 811, 0, 812, 813, 0, 814, 0, 0, 0, - 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 819, 820, 0, 821, 0, 822, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 829, 0, 830, 0, 0, - 831, 0, 0, 832, 0, 833, 0, 0, 0, 0, 834, 0, 0, 0, 835, 0, 0, 0, 0, 836, 0, 0, 837, 0, 838, 0, 839, 0, 840, 0, 0, 841, - 0, 842, 0, 843, 0, 844, 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 847, 0, 848, 0, 0, 849, 0, 0, 0, 850, - 0, 851, 0, 0, 0, 852, 0, 853, 0, 854, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 856, 0, 0, 0, 0, 857, 0, 0, 0, 0, 858, 0, - 0, 0, 0, 859, 0, 0, 0, 0, 860, 0, 0, 0, 0, 861, 0, 862, 0, 0, 0, 0, 863, 0, 0, 0, 0, 864, 0, 0, 0, 0, 865, 0, - 0, 0, 0, 866, 867, 0, 0, 0, 0, 0, 0, 0, 0, 868, 0, 869, 0, 0, 0, 0, 0, 870, 0, 0, 0, 0, 871, 0, 0, 0, 0, 0, - 0, 0, 872, 873, 0, 874, 0, 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, 877, 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 879, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 881, 0, 0, 882, 0, 883, 0, 0, 0, 0, 884, - 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 888, 0, 889, 0, 0, 890, 0, 0, 0, 891, 0, - 892, 0, 0, 0, 893, 0, 894, 0, 0, 0, 0, 0, 895, 0, 0, 0, 0, 896, 0, 0, 0, 0, 897, 0, 0, 0, 0, 898, 0, 0, 0, 0, - 899, 0, 0, 0, 0, 900, 0, 0, 0, 0, 901, 0, 902, 0, 0, 0, 0, 903, 0, 0, 0, 0, 904, 0, 0, 0, 0, 905, 0, 0, 0, 0, - 906, 907, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 909, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 911, 0, 0, 0, 0, 0, 0, 0, 912, - 913, 0, 914, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 916, 0, 917, 0, 0, 0, 0, 0, 0, 0, 918, 0, 0, 919, 0, 0, 0, 0, - 0, 0, 0, 920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 921, 0, 0, 922, - 0, 923, 0, 0, 0, 0, 924, 0, 0, 0, 0, 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 926, 0, 0, 0, 0, 0, 927, 0, - 928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 930, 0, 0, 0, 0, 931, 0, 0, - 0, 0, 0, 0, 0, 932, 0, 933, 0, 934, 0, 0, 0, 0, 0, 935, 0, 0, 936, 0, 937, 0, 0, 938, 0, 939, 0, 940, 0, 941, 0, 0, - 942, 0, 943, 0, 944, 0, 945, 0, 946, 0, 0, 947, 0, 0, 0, 0, 948, 0, 0, 0, 0, 949, 0, 0, 0, 0, 950, 0, 0, 0, 0, 951, - 0, 0, 0, 0, 952, 0, 0, 0, 0, 953, 0, 954, 0, 955, 0, 0, 0, 0, 956, 0, 0, 0, 0, 957, 0, 0, 0, 0, 958, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0024[64] = { + 0xAA00020A12411105ull, 0x1440411080929412ull, 0x0000000000050001ull, 0x0409002808008C00ull, + 0x0000000000000081ull, 0x04A1040280030000ull, 0x5000A80448000550ull, 0x5112009481008800ull, + 0x05010C8200000090ull, 0x4200020900120002ull, 0x8400109414000020ull, 0x40A940AA840A940Aull, + 0x0295285545528541ull, 0x2400A11088109408ull, 0x954AA54001500000ull, 0x042ADA96A5A5284Cull, + 0x5495202210480800ull, 0x54A58425291294AAull, 0x0A5924AAA4800100ull, 0x924A55115554AAA2ull, + 0x8AA88AAA20554451ull, 0xA22AA208AC9252A8ull, 0x9554A4800080214Aull, 0x1254A20892A51044ull, + 0x00844080210A9441ull, 0x40A140A050514004ull, 0x88A40000020D2541ull, 0x48408AA505209514ull, + 0x1502040810208921ull, 0x1402D5A905682082ull, 0x5205052102058084ull, 0x1228592000040001ull, + 0x04081322412A4129ull, 0x8B40810205408102ull, 0x02B01082805AB520ull, 0x5920000800A90028ull, + 0x4081320241291228ull, 0xB408102054081020ull, 0x580841402D5A9548ull, 0x9000040054801401ull, + 0x409901209489142Cull, 0x0408102A04081020ull, 0x0420A016AD4AA45Aull, 0x0002002A400A00ACull, + 0x0A41155AA9088524ull, 0x6082085041041042ull, 0x5480A040B0108280ull, 0x4208810885200100ull, + 0x8060820850410410ull, 0x0101520A10B01082ull, 0x48904A4452520000ull, 0x2A28950082A952AAull, + 0x4B42108542108421ull, 0xAC0420A016AD4152ull, 0x2900008000480A00ull, 0x8950082A95484429ull, + 0x4210A108421082A2ull, 0x480A00AC0420A018ull, 0x44A8040885200100ull, 0x0842142108421051ull, + 0x0901401580841403ull, 0x4100404290000008ull, 0x2A9482A021001001ull, 0x10842A1084210955ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0024[64] = { + 1u, 16u, 31u, 34u, 43u, 45u, 54u, 66u, 78u, 87u, 95u, 104u, 123u, 145u, 158u, 173u, + 199u, 213u, 237u, 254u, 280u, 303u, 326u, 343u, 362u, 375u, 389u, 403u, 422u, 435u, 455u, 470u, + 481u, 498u, 512u, 530u, 542u, 558u, 571u, 592u, 602u, 620u, 630u, 652u, 663u, 684u, 697u, 711u, + 722u, 734u, 748u, 763u, 785u, 802u, 823u, 831u, 851u, 866u, 880u, 892u, 906u, 920u, 928u, 942u, }; void recomp_unit_0024_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0024_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08864000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0024[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0024[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0024[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08864000; @@ -1174,7 +1081,6 @@ L_08864040: L_08864058: aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08864070; } @@ -1190,7 +1096,6 @@ L_08864070: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886408C; } @@ -1236,7 +1141,6 @@ L_088640E4: AOT_REGCACHE_SYNC_OUT(); return; L_088640EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886413C; } @@ -1244,7 +1148,6 @@ L_088640EC: } L_088640F4: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0886413C; } @@ -1252,7 +1155,6 @@ L_088640F4: } L_088640FC: aot_gpr_31 = (0x08864104u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864104u) goto L_08864104; AOT_REGCACHE_SYNC_OUT(); return; L_08864104: @@ -1286,7 +1188,6 @@ L_08864130: AOT_REGCACHE_SYNC_OUT(); return; L_0886413C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0886415C; } @@ -1319,7 +1220,17 @@ L_0886415C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886417C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1335,7 +1246,6 @@ L_08864190: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088641D8; } @@ -1368,10 +1278,19 @@ L_088641D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088641E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08864240; } @@ -1407,11 +1326,20 @@ L_08864200: goto L_08864240; L_08864240: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864248: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); @@ -1495,7 +1423,6 @@ L_0886433C: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[9] = (static_cast(aot_gpr_6) < 24 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_0886433C; } @@ -1509,7 +1436,6 @@ L_0886436C: ctx.gpr[7] = (ctx.gpr[7] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886432C; } @@ -1517,11 +1443,20 @@ L_0886436C: } L_0886438C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864394: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7984))); @@ -1559,7 +1494,6 @@ L_088643E8: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088643CC; } @@ -1579,7 +1513,17 @@ L_08864400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886441C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); @@ -1676,7 +1620,6 @@ L_08864544: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8020)))))); ctx.gpr[8] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08864544; } @@ -1684,11 +1627,20 @@ L_08864544: } L_0886457C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864584: aot_gpr_6 = (2239u << 16u); aot_gpr_5 = (aot_gpr_4 << 5u); @@ -1698,7 +1650,6 @@ L_08864584: aot_gpr_6 = (0u | 65534u); aot_gpr_6 = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088645C0; } @@ -1725,11 +1676,20 @@ L_088645C0: goto L_088645D4; L_088645D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088645DC: ctx.gpr[2] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[2]; @@ -1749,7 +1709,6 @@ L_088645E8: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(24))); aot_gpr_4 = (aot_gpr_4 >> 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08864620; } @@ -1765,7 +1724,6 @@ L_08864610: } L_08864618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08864620; } @@ -1773,11 +1731,20 @@ L_08864618: } L_08864620: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864628: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (15820u << 16u); @@ -1798,7 +1765,6 @@ L_08864628: L_0886466C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(26))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886472C; } @@ -1828,7 +1794,6 @@ L_08864688: AOT_REGCACHE_SYNC_OUT(); return; L_088646AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886472C; } @@ -1836,7 +1801,6 @@ L_088646AC: } L_088646B4: { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_088646F8; } @@ -1859,7 +1823,6 @@ L_088646BC: AOT_REGCACHE_SYNC_OUT(); return; L_088646F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886472C; } @@ -1906,7 +1869,17 @@ L_0886473C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864760: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -1927,7 +1900,6 @@ L_0886477C: } L_08864788: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0886479C; } @@ -1972,18 +1944,26 @@ L_088647C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088647D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088647E0u); - // nop goto L_088645DC; L_088647E0: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088647F8; } @@ -1991,7 +1971,6 @@ L_088647E0: } L_088647F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08864810; } @@ -2012,7 +1991,17 @@ L_08864810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886481C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), aot_gpr_16); @@ -2049,9 +2038,7 @@ L_08864884: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088648AC; } @@ -2126,7 +2113,6 @@ L_08864904: L_08864944: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864980; } @@ -2149,7 +2135,6 @@ L_08864950: L_08864980: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088649E4; } @@ -2187,7 +2172,6 @@ L_088649E4: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08864A88; } @@ -2270,9 +2254,7 @@ L_08864A14: ctx.gpr[10] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08864A70; } @@ -2288,7 +2270,6 @@ L_08864A70: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08864A14; } @@ -2296,7 +2277,6 @@ L_08864A70: } L_08864A88: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08864AB0; } @@ -2336,7 +2316,17 @@ L_08864AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864AE8: ctx.gpr[7] = (2240u << 16u); ctx.gpr[8] = (0u | 0u); @@ -2346,7 +2336,6 @@ L_08864AE8: goto L_08864AFC; L_08864AFC: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08864B44; } @@ -2354,7 +2343,6 @@ L_08864AFC: } L_08864B04: { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08864B44; } @@ -2367,7 +2355,6 @@ L_08864B0C: ctx.gpr[11] = (ctx.gpr[11] + ctx.gpr[7]); ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(0))); { const bool branch_taken = ctx.gpr[11] != aot_gpr_4; - // nop if (branch_taken) { goto L_08864B30; } @@ -2388,7 +2375,6 @@ L_08864B30: goto L_08864B3C; L_08864B3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08864AFC; } @@ -2396,7 +2382,6 @@ L_08864B3C: } L_08864B44: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08864B84; } @@ -2409,7 +2394,6 @@ L_08864B4C: ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[7]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(8))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08864B7C; } @@ -2440,7 +2424,6 @@ L_08864B84: goto L_08864B8C; L_08864B8C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08864BD4; } @@ -2448,7 +2431,6 @@ L_08864B8C: } L_08864B94: { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08864BD4; } @@ -2461,7 +2443,6 @@ L_08864B9C: ctx.gpr[11] = (ctx.gpr[11] + ctx.gpr[7]); ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(0))); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_08864BC0; } @@ -2482,7 +2463,6 @@ L_08864BC0: goto L_08864BCC; L_08864BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08864B8C; } @@ -2490,7 +2470,6 @@ L_08864BCC: } L_08864BD4: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08864BF8; } @@ -2506,11 +2485,20 @@ L_08864BDC: goto L_08864BF8; L_08864BF8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864C00: ctx.gpr[9] = (aot_gpr_5 & 255u); aot_gpr_5 = (2240u << 16u); @@ -2521,7 +2509,6 @@ L_08864C00: goto L_08864C18; L_08864C18: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08864C58; } @@ -2529,7 +2516,6 @@ L_08864C18: } L_08864C20: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08864C58; } @@ -2540,7 +2526,6 @@ L_08864C28: ctx.gpr[10] = (ctx.gpr[10] + aot_gpr_5); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_4; - // nop if (branch_taken) { goto L_08864C44; } @@ -2561,7 +2546,6 @@ L_08864C44: goto L_08864C50; L_08864C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08864C18; } @@ -2569,7 +2553,6 @@ L_08864C50: } L_08864C58: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08864C78; } @@ -2577,7 +2560,6 @@ L_08864C58: } L_08864C60: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08864CDC; } @@ -2595,7 +2577,6 @@ L_08864C68: } L_08864C78: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08864CDC; } @@ -2607,7 +2588,6 @@ L_08864C80: goto L_08864C88; L_08864C88: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08864CC8; } @@ -2615,7 +2595,6 @@ L_08864C88: } L_08864C90: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08864CC8; } @@ -2626,7 +2605,6 @@ L_08864C98: ctx.gpr[9] = (ctx.gpr[9] + aot_gpr_5); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08864CB4; } @@ -2647,7 +2625,6 @@ L_08864CB4: goto L_08864CC0; L_08864CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08864C88; } @@ -2655,7 +2632,6 @@ L_08864CC0: } L_08864CC8: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08864CDC; } @@ -2668,11 +2644,20 @@ L_08864CD0: goto L_08864CDC; L_08864CDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -2692,7 +2677,6 @@ L_08864D0C: ctx.gpr[17] = (ctx.gpr[17] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08864D3C; } @@ -2712,7 +2696,6 @@ L_08864D3C: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 80 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864D0C; } @@ -2732,7 +2715,17 @@ L_08864D50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864D6C: ctx.gpr[7] = (2240u << 16u); ctx.gpr[8] = (0u | 0u); @@ -2744,7 +2737,6 @@ L_08864D7C: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08864DA0; } @@ -2761,7 +2753,6 @@ L_08864DA0: ctx.gpr[8] = (ctx.gpr[8] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[8]) < 52 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08864D7C; } @@ -2769,11 +2760,20 @@ L_08864DA0: } L_08864DB4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2240u << 16u); @@ -2795,7 +2795,17 @@ L_08864DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08864DF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2827,7 +2837,6 @@ L_08864E50: AOT_REGCACHE_SYNC_OUT(); return; L_08864E58: aot_gpr_31 = (0x08864E60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 144u, 0x08AB4B00u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864E60u) goto L_08864E60; AOT_REGCACHE_SYNC_OUT(); return; L_08864E60: @@ -2871,7 +2880,6 @@ L_08864EA8: } L_08864EB4: aot_gpr_31 = (0x08864EBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864EBCu) goto L_08864EBC; AOT_REGCACHE_SYNC_OUT(); return; L_08864EBC: @@ -2894,7 +2902,6 @@ L_08864ECC: } L_08864ED8: aot_gpr_31 = (0x08864EE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864EE0u) goto L_08864EE0; AOT_REGCACHE_SYNC_OUT(); return; L_08864EE0: @@ -2909,7 +2916,6 @@ L_08864EE8: L_08864EF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864F08; } @@ -2935,7 +2941,6 @@ L_08864F18: ctx.gpr[21] = (ctx.gpr[21] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864F0C; } @@ -2943,13 +2948,11 @@ L_08864F18: } L_08864F2C: aot_gpr_31 = (0x08864F34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 475u, 0x08AFB4F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864F34u) goto L_08864F34; AOT_REGCACHE_SYNC_OUT(); return; L_08864F34: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864F48; } @@ -2957,13 +2960,11 @@ L_08864F34: } L_08864F40: aot_gpr_31 = (0x08864F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 538u, 0x08AD31E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864F48u) goto L_08864F48; AOT_REGCACHE_SYNC_OUT(); return; L_08864F48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864F60; } @@ -2971,7 +2972,6 @@ L_08864F48: } L_08864F54: aot_gpr_31 = (0x08864F5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864F5Cu) goto L_08864F5C; AOT_REGCACHE_SYNC_OUT(); return; L_08864F5C: @@ -2979,7 +2979,6 @@ L_08864F5C: goto L_08864F60; L_08864F60: aot_gpr_31 = (0x08864F68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 555u, 0x089BAA70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864F68u) goto L_08864F68; AOT_REGCACHE_SYNC_OUT(); return; L_08864F68: @@ -2993,7 +2992,6 @@ L_08864F68: } L_08864F74: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864F88; } @@ -3001,7 +2999,6 @@ L_08864F74: } L_08864F7C: aot_gpr_31 = (0x08864F84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864F84u) goto L_08864F84; AOT_REGCACHE_SYNC_OUT(); return; L_08864F84: @@ -3009,7 +3006,6 @@ L_08864F84: goto L_08864F88; L_08864F88: aot_gpr_31 = (0x08864F90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 555u, 0x089BAA70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864F90u) goto L_08864F90; AOT_REGCACHE_SYNC_OUT(); return; L_08864F90: @@ -3023,7 +3019,6 @@ L_08864F90: } L_08864F9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08864FB0; } @@ -3031,7 +3026,6 @@ L_08864F9C: } L_08864FA4: aot_gpr_31 = (0x08864FACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864FACu) goto L_08864FAC; AOT_REGCACHE_SYNC_OUT(); return; L_08864FAC: @@ -3055,7 +3049,6 @@ L_08864FBC: } L_08864FC4: aot_gpr_31 = (0x08864FCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08864FCCu) goto L_08864FCC; AOT_REGCACHE_SYNC_OUT(); return; L_08864FCC: @@ -3150,7 +3143,6 @@ L_088650B4: AOT_REGCACHE_SYNC_OUT(); return; L_088650C0: aot_gpr_31 = (0x088650C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 66u, 0x088807A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088650C8u) goto L_088650C8; AOT_REGCACHE_SYNC_OUT(); return; L_088650C8: @@ -3160,7 +3152,6 @@ L_088650C8: L_088650D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088651A8; } @@ -3177,7 +3168,6 @@ L_088650DC: } L_088650E8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08865194; } @@ -3185,7 +3175,6 @@ L_088650E8: } L_088650F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865114; } @@ -3202,7 +3191,6 @@ L_088650F8: } L_08865104: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0886516C; } @@ -3210,7 +3198,6 @@ L_08865104: } L_0886510C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865194; } @@ -3224,7 +3211,6 @@ L_08865114: L_0886511C: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865130; } @@ -3251,7 +3237,6 @@ L_0886513C: L_08865144: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865160; } @@ -3281,7 +3266,6 @@ L_0886516C: L_08865174: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865188; } @@ -3323,13 +3307,11 @@ L_088651BC: goto L_088651C0; L_088651C0: aot_gpr_31 = (0x088651C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 606u, 0x08AD368Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088651C8u) goto L_088651C8; AOT_REGCACHE_SYNC_OUT(); return; L_088651C8: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088651F8; } @@ -3343,7 +3325,6 @@ L_088651D4: L_088651DC: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088651F0; } @@ -3379,7 +3360,17 @@ L_088651F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08865220: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3398,7 +3389,6 @@ L_08865220: L_0886525C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08865620; } @@ -3415,7 +3405,6 @@ L_08865268: } L_08865274: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08865620; } @@ -3423,7 +3412,6 @@ L_08865274: } L_0886527C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886529C; } @@ -3439,7 +3427,6 @@ L_08865284: } L_0886528C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08865538; } @@ -3447,7 +3434,6 @@ L_0886528C: } L_08865294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865620; } @@ -3462,7 +3448,6 @@ L_0886529C: L_088652A8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088653C4; } @@ -3477,7 +3462,6 @@ L_088652B4: L_088652C0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088652D0; } @@ -3488,7 +3472,6 @@ L_088652CC: goto L_088652D0; L_088652D0: aot_gpr_31 = (0x088652D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 325u, 0x088099A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088652D8u) goto L_088652D8; AOT_REGCACHE_SYNC_OUT(); return; L_088652D8: @@ -3502,7 +3485,6 @@ L_088652D8: } L_088652E4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088653C4; } @@ -3536,7 +3518,6 @@ L_08865314: goto L_0886531C; L_0886531C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088653C4; } @@ -3549,7 +3530,6 @@ L_08865324: AOT_REGCACHE_SYNC_OUT(); return; L_0886532C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088653C4; } @@ -3557,7 +3537,6 @@ L_0886532C: } L_08865334: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088653C4; } @@ -3566,7 +3545,6 @@ L_08865334: L_0886533C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088653C4; } @@ -3574,7 +3552,6 @@ L_0886533C: } L_08865348: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088653C4; } @@ -3587,7 +3564,6 @@ L_08865350: AOT_REGCACHE_SYNC_OUT(); return; L_08865358: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088653C4; } @@ -3600,7 +3576,6 @@ L_08865360: AOT_REGCACHE_SYNC_OUT(); return; L_08865368: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088653C4; } @@ -3613,7 +3588,6 @@ L_08865370: AOT_REGCACHE_SYNC_OUT(); return; L_08865378: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088653C4; } @@ -3645,7 +3619,6 @@ L_088653A0: goto L_088653A8; L_088653A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088653B8; } @@ -3663,7 +3636,6 @@ L_088653B8: goto L_088653C4; L_088653C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865620; } @@ -3678,7 +3650,6 @@ L_088653CC: L_088653D8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08865530; } @@ -3706,7 +3677,6 @@ L_08865400: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(76))); aot_gpr_6 = (aot_gpr_6 & 2048u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088654A4; } @@ -3714,7 +3684,6 @@ L_08865400: } L_08865410: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865448; } @@ -3746,7 +3715,6 @@ L_08865438: goto L_08865440; L_08865440: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865458; } @@ -3754,12 +3722,10 @@ L_08865440: } L_08865448: aot_gpr_31 = (0x08865450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 325u, 0x088099A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08865450u) goto L_08865450; AOT_REGCACHE_SYNC_OUT(); return; L_08865450: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08865530; } @@ -3794,7 +3760,6 @@ L_08865484: goto L_0886548C; L_0886548C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08865530; } @@ -3807,7 +3772,6 @@ L_08865494: AOT_REGCACHE_SYNC_OUT(); return; L_0886549C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865530; } @@ -3815,7 +3779,6 @@ L_0886549C: } L_088654A4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088654DC; } @@ -3847,7 +3810,6 @@ L_088654CC: goto L_088654D4; L_088654D4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865530; } @@ -3855,12 +3817,10 @@ L_088654D4: } L_088654DC: aot_gpr_31 = (0x088654E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 325u, 0x088099A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088654E4u) goto L_088654E4; AOT_REGCACHE_SYNC_OUT(); return; L_088654E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08865530; } @@ -3892,7 +3852,6 @@ L_0886550C: goto L_08865514; L_08865514: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08865524; } @@ -3910,7 +3869,6 @@ L_08865524: goto L_08865530; L_08865530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865620; } @@ -3925,7 +3883,6 @@ L_08865538: L_08865544: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08865618; } @@ -3940,7 +3897,6 @@ L_08865550: L_0886555C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886556C; } @@ -3951,12 +3907,10 @@ L_08865568: goto L_0886556C; L_0886556C: aot_gpr_31 = (0x08865574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 325u, 0x088099A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08865574u) goto L_08865574; AOT_REGCACHE_SYNC_OUT(); return; L_08865574: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088655D4; } @@ -3966,7 +3920,6 @@ L_0886557C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(76))); aot_gpr_5 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865618; } @@ -4000,7 +3953,6 @@ L_088655B4: goto L_088655BC; L_088655BC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08865618; } @@ -4013,7 +3965,6 @@ L_088655C4: AOT_REGCACHE_SYNC_OUT(); return; L_088655CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865618; } @@ -4045,7 +3996,6 @@ L_088655F4: goto L_088655FC; L_088655FC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886560C; } @@ -4063,7 +4013,6 @@ L_0886560C: goto L_08865618; L_08865618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865620; } @@ -4097,7 +4046,17 @@ L_08865634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886565C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22]}; @@ -4114,7 +4073,6 @@ L_0886565C: L_0886569C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08865860; } @@ -4123,7 +4081,6 @@ L_0886569C: L_088656A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08865860; } @@ -4131,7 +4088,6 @@ L_088656A8: } L_088656B4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886584C; } @@ -4148,7 +4104,6 @@ L_088656BC: } L_088656C8: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0886584C; } @@ -4156,7 +4111,6 @@ L_088656C8: } L_088656D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088656F0; } @@ -4172,7 +4126,6 @@ L_088656D8: } L_088656E0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088657D8; } @@ -4180,7 +4133,6 @@ L_088656E0: } L_088656E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886584C; } @@ -4195,7 +4147,6 @@ L_088656F0: L_088656FC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886575C; } @@ -4205,7 +4156,6 @@ L_08865708: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_6 = (aot_gpr_5 & 2048u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0886575C; } @@ -4240,7 +4190,6 @@ L_08865740: L_08865748: aot_gpr_5 = (aot_gpr_5 | ctx.gpr[19]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886575C; } @@ -4248,12 +4197,10 @@ L_08865748: } L_08865754: aot_gpr_31 = (0x0886575Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 463u, 0x08A66048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886575Cu) goto L_0886575C; AOT_REGCACHE_SYNC_OUT(); return; L_0886575C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886584C; } @@ -4268,7 +4215,6 @@ L_08865764: L_08865770: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088657D0; } @@ -4278,7 +4224,6 @@ L_0886577C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_6 = (aot_gpr_5 & 2048u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088657D0; } @@ -4313,7 +4258,6 @@ L_088657B4: L_088657BC: aot_gpr_5 = (aot_gpr_5 | ctx.gpr[19]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088657D0; } @@ -4321,12 +4265,10 @@ L_088657BC: } L_088657C8: aot_gpr_31 = (0x088657D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 463u, 0x08A66048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088657D0u) goto L_088657D0; AOT_REGCACHE_SYNC_OUT(); return; L_088657D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886584C; } @@ -4341,7 +4283,6 @@ L_088657D8: L_088657E4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08865844; } @@ -4351,7 +4292,6 @@ L_088657F0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_6 = (aot_gpr_5 & 2048u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08865844; } @@ -4386,7 +4326,6 @@ L_08865828: L_08865830: aot_gpr_5 = (aot_gpr_5 | ctx.gpr[19]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08865844; } @@ -4394,12 +4333,10 @@ L_08865830: } L_0886583C: aot_gpr_31 = (0x08865844u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 463u, 0x08A66048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08865844u) goto L_08865844; AOT_REGCACHE_SYNC_OUT(); return; L_08865844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886584C; } @@ -4440,7 +4377,17 @@ L_08865874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886589C: ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_4); ctx.set_vfpu_scalar_bits_ct<29u>(aot_gpr_5); @@ -4465,11 +4412,20 @@ L_088658C8: ctx.gpr[10] = (ctx.gpr[10] + ctx.gpr[12]); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); jump_target = ctx.gpr[10]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088658DC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.set_vfpu_scalar_bits_ct<93u>(aot_gpr_31); @@ -4504,7 +4460,6 @@ L_08865908: } L_08865938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4522,7 +4477,6 @@ L_08865940: } L_08865950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4542,7 +4496,6 @@ L_08865958: } L_08865970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4563,7 +4516,6 @@ L_08865978: } L_08865994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4584,7 +4536,6 @@ L_0886599C: } L_088659B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4603,7 +4554,6 @@ L_088659C0: } L_088659D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4624,7 +4574,6 @@ L_088659DC: } L_088659F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4644,7 +4593,6 @@ L_08865A00: } L_08865A18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4674,7 +4622,6 @@ L_08865A34: } L_08865A40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865A4C; } @@ -4689,11 +4636,20 @@ L_08865A4C: aot_mem.aot_direct_store32(ctx.gpr[8] + static_cast(0), aot_gpr_5); ctx.gpr[2] = (aot_gpr_6 | 0u); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08865A64: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4741,7 +4697,6 @@ L_08865AEC: L_08865AFC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08865B28; } @@ -4764,7 +4719,6 @@ L_08865B10: } L_08865B20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865B54; } @@ -4772,7 +4726,6 @@ L_08865B20: } L_08865B28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865F00; } @@ -4781,7 +4734,6 @@ L_08865B28: L_08865B30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08865B54; } @@ -4804,7 +4756,6 @@ L_08865B3C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865B60; } @@ -4828,7 +4779,6 @@ L_08865B54: goto L_08865B60; L_08865B60: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08865BAC; } @@ -4844,10 +4794,19 @@ L_08865B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08865B80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865BAC; } @@ -4861,7 +4820,6 @@ L_08865B88: AOT_REGCACHE_SYNC_OUT(); return; L_08865B94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08865BA4; } @@ -4873,7 +4831,6 @@ L_08865B9C: goto L_08865BA4; L_08865BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865BAC; } @@ -4883,7 +4840,6 @@ L_08865BAC: ctx.fpr[30] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.fpr[28] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08865C14; } @@ -4894,7 +4850,6 @@ L_08865BBC: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -4905,7 +4860,6 @@ L_08865BBC: L_08865BD8: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08865C00; @@ -4943,7 +4897,6 @@ L_08865C14: L_08865C20: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08865DC4; } @@ -4963,9 +4916,7 @@ L_08865C3C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_14)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865CE8; } @@ -4976,9 +4927,7 @@ L_08865C54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fpr[15] = ctx.fpr[24] + ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865CE8; } @@ -4989,9 +4938,7 @@ L_08865C70: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[15] = ctx.fpr[28] - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865CE8; } @@ -5002,9 +4949,7 @@ L_08865C8C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[15] = aot_fpr_20 + ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865CE8; } @@ -5015,9 +4960,7 @@ L_08865CA8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fpr[15] = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865CE8; } @@ -5028,9 +4971,7 @@ L_08865CC4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865CE8; } @@ -5055,9 +4996,7 @@ L_08865CE8: L_08865CF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865D54; } @@ -5067,9 +5006,7 @@ L_08865D04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = ctx.fpr[24] + ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865D54; } @@ -5079,9 +5016,7 @@ L_08865D1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = ctx.fpr[28] - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865D54; } @@ -5091,9 +5026,7 @@ L_08865D34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = aot_fpr_20 + ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08865D54; } @@ -5112,7 +5045,6 @@ L_08865D54: goto L_08865D58; L_08865D58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08865DC4; } @@ -5120,7 +5052,6 @@ L_08865D58: } L_08865D60: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08865DC4; } @@ -5132,15 +5063,23 @@ L_08865D68: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[21]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-25712))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08865D80: ctx.gpr[17] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865DC4; } @@ -5153,7 +5092,6 @@ L_08865D8C: AOT_REGCACHE_SYNC_OUT(); return; L_08865D94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08865DA0; } @@ -5164,7 +5102,6 @@ L_08865D9C: goto L_08865DA0; L_08865DA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865DC4; } @@ -5177,7 +5114,6 @@ L_08865DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08865DB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08865DBC; } @@ -5188,7 +5124,6 @@ L_08865DB8: goto L_08865DBC; L_08865DBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865DC4; } @@ -5248,7 +5183,6 @@ L_08865E1C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08865E40; } @@ -5259,7 +5193,6 @@ L_08865E3C: goto L_08865E40; L_08865E40: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08865EE4; } @@ -5283,7 +5216,6 @@ L_08865E64: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -5294,7 +5226,6 @@ L_08865E64: L_08865E80: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08865EA8; @@ -5321,7 +5252,6 @@ L_08865EA8: AOT_REGCACHE_SYNC_OUT(); return; L_08865EC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865EE4; } @@ -5340,7 +5270,6 @@ L_08865EC8: L_08865EE4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08865F00; } @@ -5348,7 +5277,6 @@ L_08865EE4: } L_08865EF0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08865F00; } @@ -5356,7 +5284,6 @@ L_08865EF0: } L_08865EF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865F00; } @@ -5387,7 +5314,17 @@ L_08865F00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08865F48: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -5408,7 +5345,6 @@ L_08865F48: L_08865F94: aot_gpr_5 = (static_cast(aot_gpr_5) < 146 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08865FAC; } @@ -5417,7 +5353,6 @@ L_08865F94: L_08865FA0: ctx.gpr[18] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865FB0; } @@ -5443,7 +5378,6 @@ L_08865FB8: goto L_0886589C; L_08865FCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08865FE4; } @@ -5476,7 +5410,6 @@ L_08866000: AOT_REGCACHE_SYNC_OUT(); return; L_0886600C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08866038; } @@ -5485,7 +5418,6 @@ L_0886600C: L_08866014: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866038; } @@ -5508,7 +5440,6 @@ L_08866020: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866044; } @@ -5537,7 +5468,6 @@ L_08866044: AOT_REGCACHE_SYNC_OUT(); return; L_0886604C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08866078; } @@ -5546,7 +5476,6 @@ L_0886604C: L_08866054: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866078; } @@ -5569,7 +5498,6 @@ L_08866060: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866084; } @@ -5595,7 +5523,6 @@ L_08866084: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088660A0; } @@ -5616,7 +5543,6 @@ L_088660A0: L_088660A4: ctx.gpr[22] = (0u | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08866168; } @@ -5627,9 +5553,7 @@ L_088660B0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = aot_fpr_14 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866160; } @@ -5640,9 +5564,7 @@ L_088660CC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = aot_fpr_14 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866160; } @@ -5653,9 +5575,7 @@ L_088660E8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = aot_fpr_14 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866160; } @@ -5666,9 +5586,7 @@ L_08866104: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = aot_fpr_14 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866160; } @@ -5679,9 +5597,7 @@ L_08866120: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866160; } @@ -5692,9 +5608,7 @@ L_0886613C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866160; } @@ -5721,9 +5635,7 @@ L_08866168: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088661E0; } @@ -5734,9 +5646,7 @@ L_08866184: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088661E0; } @@ -5747,9 +5657,7 @@ L_088661A0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088661E0; } @@ -5760,9 +5668,7 @@ L_088661BC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088661E0; } @@ -5781,7 +5687,6 @@ L_088661E0: goto L_088661E4; L_088661E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866258; } @@ -5791,7 +5696,6 @@ L_088661EC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-134)); aot_gpr_4 = (ctx.gpr[17] < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866258; } @@ -5803,15 +5707,23 @@ L_088661FC: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[17]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-25648))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08866214: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866258; } @@ -5824,7 +5736,6 @@ L_08866220: AOT_REGCACHE_SYNC_OUT(); return; L_08866228: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08866234; } @@ -5835,7 +5746,6 @@ L_08866230: goto L_08866234; L_08866234: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866258; } @@ -5848,7 +5758,6 @@ L_0886623C: AOT_REGCACHE_SYNC_OUT(); return; L_08866244: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08866250; } @@ -5859,7 +5768,6 @@ L_0886624C: goto L_08866250; L_08866250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866258; } @@ -5919,7 +5827,6 @@ L_088662B0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088662D4; } @@ -5930,7 +5837,6 @@ L_088662D0: goto L_088662D4; L_088662D4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08866340; } @@ -5959,7 +5865,6 @@ L_088662E4: AOT_REGCACHE_SYNC_OUT(); return; L_0886630C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866340; } @@ -5982,7 +5887,6 @@ L_08866314: L_08866340: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886635C; } @@ -5990,7 +5894,6 @@ L_08866340: } L_0886634C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0886635C; } @@ -5998,7 +5901,6 @@ L_0886634C: } L_08866354: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886635C; } @@ -6023,7 +5925,17 @@ L_0886635C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886638C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -6043,7 +5955,6 @@ L_0886638C: L_088663D4: aot_gpr_5 = (static_cast(aot_gpr_5) < 312 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088663EC; } @@ -6052,7 +5963,6 @@ L_088663D4: L_088663E0: ctx.gpr[18] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088663F0; } @@ -6078,7 +5988,6 @@ L_088663F8: goto L_0886589C; L_0886640C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866424; } @@ -6111,7 +6020,6 @@ L_08866440: AOT_REGCACHE_SYNC_OUT(); return; L_0886644C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08866478; } @@ -6120,7 +6028,6 @@ L_0886644C: L_08866454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866478; } @@ -6143,7 +6050,6 @@ L_08866460: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866484; } @@ -6184,7 +6090,6 @@ L_08866484: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088664B0; } @@ -6205,7 +6110,6 @@ L_088664B0: L_088664B4: ctx.gpr[22] = (0u | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08866578; } @@ -6216,9 +6120,7 @@ L_088664C0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = aot_fpr_14 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866570; } @@ -6229,9 +6131,7 @@ L_088664DC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = aot_fpr_14 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866570; } @@ -6242,9 +6142,7 @@ L_088664F8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = aot_fpr_14 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866570; } @@ -6255,9 +6153,7 @@ L_08866514: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = aot_fpr_14 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866570; } @@ -6268,9 +6164,7 @@ L_08866530: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866570; } @@ -6281,9 +6175,7 @@ L_0886654C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866570; } @@ -6310,9 +6202,7 @@ L_08866578: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088665F0; } @@ -6323,9 +6213,7 @@ L_08866594: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088665F0; } @@ -6336,9 +6224,7 @@ L_088665B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088665F0; } @@ -6349,9 +6235,7 @@ L_088665CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088665F0; } @@ -6370,7 +6254,6 @@ L_088665F0: goto L_088665F4; L_088665F4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866674; } @@ -6380,7 +6263,6 @@ L_088665FC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-306)); aot_gpr_4 = (ctx.gpr[17] < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866674; } @@ -6413,7 +6295,6 @@ L_08866620: } L_08866628: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08866658; } @@ -6422,7 +6303,6 @@ L_08866628: L_08866630: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866674; } @@ -6435,7 +6315,6 @@ L_0886663C: AOT_REGCACHE_SYNC_OUT(); return; L_08866644: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08866650; } @@ -6446,7 +6325,6 @@ L_0886664C: goto L_08866650; L_08866650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866674; } @@ -6459,7 +6337,6 @@ L_08866658: AOT_REGCACHE_SYNC_OUT(); return; L_08866660: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886666C; } @@ -6470,7 +6347,6 @@ L_08866668: goto L_0886666C; L_0886666C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866674; } @@ -6530,7 +6406,6 @@ L_088666CC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088666F0; } @@ -6541,7 +6416,6 @@ L_088666EC: goto L_088666F0; L_088666F0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0886675C; } @@ -6570,7 +6444,6 @@ L_08866700: AOT_REGCACHE_SYNC_OUT(); return; L_08866728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886675C; } @@ -6593,7 +6466,6 @@ L_08866730: L_0886675C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866778; } @@ -6601,7 +6473,6 @@ L_0886675C: } L_08866768: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08866778; } @@ -6609,7 +6480,6 @@ L_08866768: } L_08866770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866778; } @@ -6634,7 +6504,17 @@ L_08866778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088667A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -6654,7 +6534,6 @@ L_088667A8: L_088667F0: aot_gpr_5 = (static_cast(aot_gpr_5) < 711 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08866808; } @@ -6663,7 +6542,6 @@ L_088667F0: L_088667FC: ctx.gpr[18] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886680C; } @@ -6689,7 +6567,6 @@ L_08866814: goto L_0886589C; L_08866828: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866840; } @@ -6722,7 +6599,6 @@ L_0886685C: AOT_REGCACHE_SYNC_OUT(); return; L_08866868: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08866894; } @@ -6731,7 +6607,6 @@ L_08866868: L_08866870: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866894; } @@ -6754,7 +6629,6 @@ L_0886687C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088668A0; } @@ -6795,7 +6669,6 @@ L_088668A0: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088668CC; } @@ -6816,7 +6689,6 @@ L_088668CC: L_088668D0: ctx.gpr[22] = (0u | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08866994; } @@ -6827,9 +6699,7 @@ L_088668DC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = aot_fpr_14 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886698C; } @@ -6840,9 +6710,7 @@ L_088668F8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_14 = aot_fpr_14 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886698C; } @@ -6853,9 +6721,7 @@ L_08866914: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = aot_fpr_14 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886698C; } @@ -6866,9 +6732,7 @@ L_08866930: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = aot_fpr_14 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886698C; } @@ -6879,9 +6743,7 @@ L_0886694C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886698C; } @@ -6892,9 +6754,7 @@ L_08866968: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886698C; } @@ -6921,9 +6781,7 @@ L_08866994: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866A0C; } @@ -6934,9 +6792,7 @@ L_088669B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866A0C; } @@ -6947,9 +6803,7 @@ L_088669CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866A0C; } @@ -6960,9 +6814,7 @@ L_088669E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866A0C; } @@ -6981,7 +6833,6 @@ L_08866A0C: goto L_08866A10; L_08866A10: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866A90; } @@ -6991,7 +6842,6 @@ L_08866A18: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-705)); aot_gpr_4 = (ctx.gpr[17] < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866A90; } @@ -7024,7 +6874,6 @@ L_08866A3C: } L_08866A44: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08866A74; } @@ -7033,7 +6882,6 @@ L_08866A44: L_08866A4C: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866A90; } @@ -7046,7 +6894,6 @@ L_08866A58: AOT_REGCACHE_SYNC_OUT(); return; L_08866A60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08866A6C; } @@ -7057,7 +6904,6 @@ L_08866A68: goto L_08866A6C; L_08866A6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866A90; } @@ -7070,7 +6916,6 @@ L_08866A74: AOT_REGCACHE_SYNC_OUT(); return; L_08866A7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08866A88; } @@ -7081,7 +6926,6 @@ L_08866A84: goto L_08866A88; L_08866A88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866A90; } @@ -7141,7 +6985,6 @@ L_08866AE8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866B0C; } @@ -7152,7 +6995,6 @@ L_08866B08: goto L_08866B0C; L_08866B0C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08866B78; } @@ -7181,7 +7023,6 @@ L_08866B1C: AOT_REGCACHE_SYNC_OUT(); return; L_08866B44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866B78; } @@ -7204,7 +7045,6 @@ L_08866B4C: L_08866B78: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866B94; } @@ -7212,7 +7052,6 @@ L_08866B78: } L_08866B84: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08866B94; } @@ -7220,7 +7059,6 @@ L_08866B84: } L_08866B8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866B94; } @@ -7245,7 +7083,17 @@ L_08866B94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08866BC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -7266,7 +7114,6 @@ L_08866BC4: L_08866C08: aot_gpr_5 = (static_cast(aot_gpr_5) < 262 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08866C20; } @@ -7328,7 +7175,6 @@ L_08866C6C: goto L_08866C74; L_08866C74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866CB0; } @@ -7344,7 +7190,6 @@ L_08866C7C: } L_08866C84: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08866CB0; } @@ -7372,7 +7217,6 @@ L_08866CA0: goto L_08866CA8; L_08866CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866CB0; } @@ -7382,7 +7226,6 @@ L_08866CB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08866CD8; } @@ -7410,7 +7253,6 @@ L_08866CD8: goto L_08866CE4; L_08866CE4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08866DF8; } @@ -7442,9 +7284,7 @@ L_08866CEC: L_08866D04: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7454,9 +7294,7 @@ L_08866D18: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fpr[19] = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7466,9 +7304,7 @@ L_08866D30: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[19] = aot_fpr_13 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7478,9 +7314,7 @@ L_08866D48: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[19] = ctx.fpr[16] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7490,9 +7324,7 @@ L_08866D60: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fpr[19] = aot_fpr_14 - ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7502,9 +7334,7 @@ L_08866D78: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fpr[17] = ctx.fpr[17] + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7521,9 +7351,7 @@ L_08866D90: L_08866D98: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7533,9 +7361,7 @@ L_08866DAC: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fpr[18] = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7545,9 +7371,7 @@ L_08866DC4: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[18] = aot_fpr_13 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7557,9 +7381,7 @@ L_08866DDC: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[18] = ctx.fpr[16] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08866DF8; } @@ -7622,7 +7444,6 @@ L_08866E50: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866E74; } @@ -7633,7 +7454,6 @@ L_08866E70: goto L_08866E74; L_08866E74: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08866EDC; } @@ -7664,7 +7484,6 @@ L_08866E98: AOT_REGCACHE_SYNC_OUT(); return; L_08866EB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866EDC; } @@ -7684,7 +7503,6 @@ L_08866EBC: L_08866EDC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08866EF8; } @@ -7692,7 +7510,6 @@ L_08866EDC: } L_08866EE8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08866EF8; } @@ -7700,7 +7517,6 @@ L_08866EE8: } L_08866EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08866EF8; } @@ -7723,7 +7539,17 @@ L_08866EF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08866F20: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7772,7 +7598,6 @@ L_08866F8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08866FBC; } @@ -7817,7 +7642,6 @@ L_08866FCC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (0u | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08867078; } @@ -7826,9 +7650,7 @@ L_08866FCC: L_08866FE4: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7838,9 +7660,7 @@ L_08866FF8: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fpr[0] = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7850,9 +7670,7 @@ L_08867010: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[0] = aot_fpr_13 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7862,9 +7680,7 @@ L_08867028: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[0] = ctx.fpr[16] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7874,9 +7690,7 @@ L_08867040: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fpr[0] = aot_fpr_14 - ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7886,9 +7700,7 @@ L_08867058: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fpr[18] = ctx.fpr[18] + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7905,9 +7717,7 @@ L_08867070: L_08867078: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7917,9 +7727,7 @@ L_0886708C: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fpr[19] = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7929,9 +7737,7 @@ L_088670A4: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[19] = aot_fpr_13 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -7941,9 +7747,7 @@ L_088670BC: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fpr[19] = ctx.fpr[16] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088670D8; } @@ -8006,7 +7810,6 @@ L_08867130: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867154; } @@ -8017,7 +7820,6 @@ L_08867150: goto L_08867154; L_08867154: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088671A4; } @@ -8044,7 +7846,6 @@ L_08867170: AOT_REGCACHE_SYNC_OUT(); return; L_08867184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088671A4; } @@ -8062,7 +7863,6 @@ L_0886718C: L_088671A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088671C0; } @@ -8070,7 +7870,6 @@ L_088671A4: } L_088671B0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088671C0; } @@ -8078,7 +7877,6 @@ L_088671B0: } L_088671B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088671C0; } @@ -8099,7 +7897,17 @@ L_088671C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088671E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -8121,7 +7929,6 @@ L_088671E0: L_08867244: aot_gpr_5 = (0u | 71u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08867264; } @@ -8129,7 +7936,6 @@ L_08867244: } L_08867250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867270; } @@ -8138,7 +7944,6 @@ L_08867250: L_08867258: aot_gpr_4 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867270; } @@ -8179,7 +7984,6 @@ L_08867298: AOT_REGCACHE_SYNC_OUT(); return; L_088672A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088672D0; } @@ -8188,7 +7992,6 @@ L_088672A4: L_088672AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088672D0; } @@ -8211,7 +8014,6 @@ L_088672B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088672DC; } @@ -8253,7 +8055,6 @@ L_088672EC: L_088672F8: aot_gpr_4 = (static_cast(aot_gpr_4) < 70 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08867364; } @@ -8261,7 +8062,6 @@ L_088672F8: } L_08867304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867364; } @@ -8269,7 +8069,6 @@ L_08867304: } L_0886730C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867304; } @@ -8277,7 +8076,6 @@ L_0886730C: } L_08867314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867364; } @@ -8292,7 +8090,6 @@ L_0886731C: L_08867324: aot_gpr_4 = (static_cast(aot_gpr_4) < 251 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867304; } @@ -8300,7 +8097,6 @@ L_08867324: } L_08867330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867340; } @@ -8308,7 +8104,6 @@ L_08867330: } L_08867338: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867364; } @@ -8322,7 +8117,6 @@ L_08867340: AOT_REGCACHE_SYNC_OUT(); return; L_0886734C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886735C; } @@ -8334,7 +8128,6 @@ L_08867354: goto L_0886735C; L_0886735C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867364; } @@ -8346,7 +8139,6 @@ L_08867364: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_13)); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088673B0; } @@ -8362,9 +8154,7 @@ L_0886737C: ctx.fpr[30] = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088673A8; } @@ -8389,9 +8179,7 @@ L_088673B0: goto L_088673BC; L_088673BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088673D4; } @@ -8403,9 +8191,7 @@ L_088673CC: goto L_088673D4; L_088673D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088673EC; } @@ -8417,7 +8203,6 @@ L_088673E4: goto L_088673EC; L_088673EC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08867570; } @@ -8426,7 +8211,6 @@ L_088673EC: L_088673F4: ctx.gpr[22] = (0u | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08867488; } @@ -8435,9 +8219,7 @@ L_088673F4: L_08867400: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867480; } @@ -8446,9 +8228,7 @@ L_08867400: L_08867414: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867480; } @@ -8457,9 +8237,7 @@ L_08867414: L_08867428: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867480; } @@ -8468,9 +8246,7 @@ L_08867428: L_0886743C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867480; } @@ -8479,9 +8255,7 @@ L_0886743C: L_08867450: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867480; } @@ -8490,9 +8264,7 @@ L_08867450: L_08867464: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867480; } @@ -8517,9 +8289,7 @@ L_08867480: L_08867488: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088674E0; } @@ -8528,9 +8298,7 @@ L_08867488: L_0886749C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088674E0; } @@ -8539,9 +8307,7 @@ L_0886749C: L_088674B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088674E0; } @@ -8550,9 +8316,7 @@ L_088674B0: L_088674C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088674E0; } @@ -8571,7 +8335,6 @@ L_088674E0: goto L_088674E4; L_088674E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867570; } @@ -8589,7 +8352,6 @@ L_088674EC: L_088674F8: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 70 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08867570; } @@ -8598,7 +8360,6 @@ L_088674F8: L_08867504: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867570; } @@ -8626,11 +8387,20 @@ L_08867520: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-25600))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08867538: aot_gpr_31 = (0x08867540u); aot_gpr_4 = (ctx.gpr[21] | 0u); @@ -8638,7 +8408,6 @@ L_08867538: AOT_REGCACHE_SYNC_OUT(); return; L_08867540: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886754C; } @@ -8649,7 +8418,6 @@ L_08867548: goto L_0886754C; L_0886754C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867570; } @@ -8662,7 +8430,6 @@ L_08867554: AOT_REGCACHE_SYNC_OUT(); return; L_0886755C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08867568; } @@ -8673,7 +8440,6 @@ L_08867564: goto L_08867568; L_08867568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867570; } @@ -8733,7 +8499,6 @@ L_088675C8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088675EC; } @@ -8744,7 +8509,6 @@ L_088675E8: goto L_088675EC; L_088675EC: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0886764C; } @@ -8752,7 +8516,6 @@ L_088675EC: } L_088675F4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0886762C; } @@ -8773,7 +8536,6 @@ L_088675FC: AOT_REGCACHE_SYNC_OUT(); return; L_08867624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886764C; } @@ -8793,7 +8555,6 @@ L_0886762C: L_0886764C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867658; } @@ -8823,7 +8584,17 @@ L_08867658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886769C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -8844,7 +8615,6 @@ L_0886769C: L_088676E0: aot_gpr_5 = (static_cast(aot_gpr_5) < 84 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886770C; } @@ -8852,7 +8622,6 @@ L_088676E0: } L_088676EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867700; } @@ -8861,7 +8630,6 @@ L_088676EC: L_088676F4: aot_gpr_6 = (0u | 257u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0886770C; } @@ -8909,7 +8677,6 @@ L_08867738: L_0886774C: aot_gpr_5 = (static_cast(aot_gpr_5) < 83 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08867794; } @@ -8917,7 +8684,6 @@ L_0886774C: } L_08867758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867794; } @@ -8933,7 +8699,6 @@ L_08867760: } L_08867768: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08867794; } @@ -8959,7 +8724,6 @@ L_08867784: goto L_0886778C; L_0886778C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867794; } @@ -8971,7 +8735,6 @@ L_08867794: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088677E0; } @@ -8987,9 +8750,7 @@ L_088677AC: ctx.fpr[0] = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088677D8; } @@ -9014,9 +8775,7 @@ L_088677E0: goto L_088677EC; L_088677EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867804; } @@ -9028,9 +8787,7 @@ L_088677FC: goto L_08867804; L_08867804: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886781C; } @@ -9042,7 +8799,6 @@ L_08867814: goto L_0886781C; L_0886781C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08867910; } @@ -9065,7 +8821,6 @@ L_08867824: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_5 = (0u | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088678BC; } @@ -9074,9 +8829,7 @@ L_08867824: L_0886783C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9085,9 +8838,7 @@ L_0886783C: L_08867850: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9096,9 +8847,7 @@ L_08867850: L_08867864: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9107,9 +8856,7 @@ L_08867864: L_08867878: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9118,9 +8865,7 @@ L_08867878: L_0886788C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9129,9 +8874,7 @@ L_0886788C: L_088678A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9148,9 +8891,7 @@ L_088678B4: L_088678BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9159,9 +8900,7 @@ L_088678BC: L_088678D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9170,9 +8909,7 @@ L_088678D0: L_088678E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9181,9 +8918,7 @@ L_088678E4: L_088678F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867910; } @@ -9246,7 +8981,6 @@ L_08867968: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886798C; } @@ -9257,7 +8991,6 @@ L_08867988: goto L_0886798C; L_0886798C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088679EC; } @@ -9265,7 +8998,6 @@ L_0886798C: } L_08867994: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088679CC; } @@ -9286,7 +9018,6 @@ L_0886799C: AOT_REGCACHE_SYNC_OUT(); return; L_088679C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088679EC; } @@ -9306,7 +9037,6 @@ L_088679CC: L_088679EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088679F8; } @@ -9329,7 +9059,17 @@ L_088679F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08867A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -9380,7 +9120,6 @@ L_08867A8C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08867ADC; } @@ -9396,9 +9135,7 @@ L_08867AA8: ctx.fpr[0] = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867AD4; } @@ -9423,9 +9160,7 @@ L_08867ADC: goto L_08867AE8; L_08867AE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867B00; } @@ -9437,9 +9172,7 @@ L_08867AF8: goto L_08867B00; L_08867B00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867B18; } @@ -9466,7 +9199,6 @@ L_08867B18: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (0u | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08867BB0; } @@ -9475,9 +9207,7 @@ L_08867B18: L_08867B30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9486,9 +9216,7 @@ L_08867B30: L_08867B44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9497,9 +9225,7 @@ L_08867B44: L_08867B58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9508,9 +9234,7 @@ L_08867B58: L_08867B6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9519,9 +9243,7 @@ L_08867B6C: L_08867B80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9530,9 +9252,7 @@ L_08867B80: L_08867B94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9549,9 +9269,7 @@ L_08867BA8: L_08867BB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9560,9 +9278,7 @@ L_08867BB0: L_08867BC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9571,9 +9287,7 @@ L_08867BC4: L_08867BD8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9582,9 +9296,7 @@ L_08867BD8: L_08867BEC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867C04; } @@ -9647,7 +9359,6 @@ L_08867C5C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867C80; } @@ -9658,7 +9369,6 @@ L_08867C7C: goto L_08867C80; L_08867C80: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08867CE0; } @@ -9666,7 +9376,6 @@ L_08867C80: } L_08867C88: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08867CC0; } @@ -9687,7 +9396,6 @@ L_08867C90: AOT_REGCACHE_SYNC_OUT(); return; L_08867CB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867CE0; } @@ -9707,7 +9415,6 @@ L_08867CC0: L_08867CE0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867CEC; } @@ -9728,7 +9435,17 @@ L_08867CEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08867D0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -9807,7 +9524,6 @@ L_08867DE0: goto L_08867DF8; L_08867DF8: aot_gpr_31 = (0x08867E00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08867E00u) goto L_08867E00; AOT_REGCACHE_SYNC_OUT(); return; L_08867E00: @@ -9822,7 +9538,6 @@ L_08867E00: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 21u, 0x088680A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9858,7 +9573,6 @@ L_08867E74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 20u, 0x08868098u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9871,7 +9585,6 @@ L_08867E94: AOT_REGCACHE_SYNC_OUT(); return; L_08867E9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08867EBC; } @@ -9894,7 +9607,6 @@ L_08867EA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867EC8; } @@ -9918,7 +9630,6 @@ L_08867EBC: goto L_08867EC8; L_08867EC8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08867F18; } @@ -9943,7 +9654,6 @@ L_08867EDC: } L_08867EE4: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08867EF4; } @@ -9951,7 +9661,6 @@ L_08867EE4: } L_08867EEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867F18; } @@ -9965,7 +9674,6 @@ L_08867EF4: AOT_REGCACHE_SYNC_OUT(); return; L_08867F00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08867F10; } @@ -9977,7 +9685,6 @@ L_08867F08: goto L_08867F10; L_08867F10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08867F18; } @@ -9985,7 +9692,6 @@ L_08867F10: } L_08867F18: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 20u, 0x08868098u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9994,7 +9700,6 @@ L_08867F18: L_08867F20: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08867FB4; } @@ -10003,9 +9708,7 @@ L_08867F20: L_08867F2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867FAC; } @@ -10014,9 +9717,7 @@ L_08867F2C: L_08867F40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867FAC; } @@ -10025,9 +9726,7 @@ L_08867F40: L_08867F54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867FAC; } @@ -10036,9 +9735,7 @@ L_08867F54: L_08867F68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867FAC; } @@ -10047,9 +9744,7 @@ L_08867F68: L_08867F7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867FAC; } @@ -10058,9 +9753,7 @@ L_08867F7C: L_08867F90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08867FAC; } @@ -10085,9 +9778,7 @@ L_08867FAC: L_08867FB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 2u, 0x0886800Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10096,9 +9787,7 @@ L_08867FB4: L_08867FC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 2u, 0x0886800Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10107,9 +9796,7 @@ L_08867FC8: L_08867FDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 2u, 0x0886800Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10118,9 +9805,7 @@ L_08867FDC: L_08867FF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 2u, 0x0886800Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0025.cpp b/profiles/vcs/generated/generated_unit_0025.cpp index 24fee3b..29f8df8 100644 --- a/profiles/vcs/generated/generated_unit_0025.cpp +++ b/profiles/vcs/generated/generated_unit_0025.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0025[4094] = { - 1, 0, 2, 3, 0, 0, 4, 0, 5, 0, 0, 6, 0, 7, 0, 8, 0, 9, 0, 0, 10, 0, 11, 0, 12, 13, 0, 14, 0, 15, 0, 16, - 17, 0, 18, 0, 19, 20, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 31, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 39, 40, 0, 41, 0, 0, 0, - 0, 42, 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 0, 46, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, - 51, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, - 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, - 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 70, 0, 71, 0, 0, 0, - 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 76, 77, 0, 0, 78, 0, - 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 87, 0, 88, 0, 89, 0, 90, 91, 0, 92, 0, 93, 94, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 0, 100, 101, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, - 0, 107, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 113, 114, 0, 115, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, - 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 122, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, 126, - 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 130, 0, 0, 0, 0, 0, 131, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, - 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 138, 0, 0, - 0, 0, 0, 0, 139, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, - 0, 0, 0, 0, 145, 0, 146, 147, 0, 0, 148, 0, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 157, - 0, 158, 0, 159, 0, 160, 161, 0, 162, 0, 163, 164, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, - 0, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 177, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, - 0, 182, 0, 0, 183, 184, 0, 185, 0, 0, 0, 0, 186, 0, 187, 188, 0, 0, 0, 189, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, - 0, 0, 0, 192, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, 197, 0, 0, 0, 198, 0, 199, 0, 0, 0, 200, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 205, 0, 206, 0, 207, 0, 0, 0, 0, - 0, 208, 0, 0, 209, 0, 210, 0, 0, 0, 0, 0, 211, 0, 212, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 0, 218, 0, 0, 0, - 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, - 0, 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 231, 232, 0, 0, 233, 0, 234, 0, 0, 0, 0, 0, - 235, 0, 0, 236, 0, 237, 0, 238, 239, 0, 240, 0, 241, 0, 242, 243, 0, 244, 0, 245, 246, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, - 0, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, 253, 0, 0, 254, 0, 0, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 263, 0, 0, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 268, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 274, 0, 275, - 0, 0, 0, 0, 276, 0, 277, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 281, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 285, 0, 286, 0, - 0, 287, 0, 0, 288, 0, 0, 289, 0, 290, 0, 291, 0, 292, 293, 0, 294, 0, 295, 296, 0, 297, 0, 0, 298, 0, 299, 300, 0, 301, 0, 302, - 303, 0, 304, 0, 0, 305, 0, 306, 307, 0, 308, 0, 309, 310, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 321, 0, 0, 322, - 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, - 0, 330, 0, 331, 0, 332, 0, 0, 333, 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, - 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, - 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, 0, 0, 0, - 351, 0, 0, 352, 0, 353, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 359, - 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 362, 0, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, - 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, - 0, 377, 0, 0, 378, 0, 0, 379, 380, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, - 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 385, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, - 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, 0, 0, 396, 0, 397, 0, - 0, 0, 398, 399, 0, 400, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 403, 0, 0, 404, 0, 0, 0, 0, 0, - 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 0, 0, 408, 0, 409, 0, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 412, - 0, 0, 0, 413, 0, 414, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 421, 0, 0, 0, 0, 0, 0, 0, 422, - 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 430, 0, 431, 432, - 0, 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, - 0, 0, 0, 440, 441, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 446, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 449, 0, 450, 0, 451, 0, - 452, 0, 0, 0, 0, 453, 0, 454, 0, 455, 0, 0, 456, 0, 457, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 460, 0, 461, 0, 0, 462, 0, - 463, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 466, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, - 0, 474, 0, 475, 0, 476, 477, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, - 480, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 483, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 487, - 0, 0, 0, 0, 488, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 492, 0, 493, 0, 0, 0, 494, 0, 495, 0, 496, 0, 497, - 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 500, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 504, 0, 0, - 505, 0, 506, 0, 0, 507, 0, 508, 0, 0, 509, 0, 510, 0, 511, 0, 0, 512, 513, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, - 0, 0, 516, 0, 517, 0, 0, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 523, 0, 524, 0, 525, - 0, 0, 526, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 533, 0, - 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 537, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 540, 0, 541, 542, 0, 543, 0, - 0, 0, 544, 545, 0, 0, 0, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 550, 0, 551, 0, - 0, 0, 0, 552, 0, 553, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, - 0, 0, 559, 560, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, - 0, 565, 0, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 574, 575, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 0, 578, - 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 580, 581, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 584, 0, 585, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 589, 0, 0, 590, 0, 591, 0, 0, 0, 592, 0, 593, - 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, 601, 0, 0, - 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 0, 0, 605, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, - 0, 0, 608, 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 615, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, - 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 621, 0, 0, 622, 0, 623, 624, 0, 0, 0, 625, 0, 0, - 626, 0, 627, 628, 0, 0, 0, 0, 0, 629, 0, 0, 630, 0, 631, 632, 0, 0, 0, 633, 0, 0, 634, 0, 635, 636, 0, 0, 0, 0, 0, 637, - 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, - 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, 646, 0, 647, 0, 648, 649, 0, 0, 0, 0, 0, - 650, 651, 0, 0, 652, 0, 0, 653, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 656, 0, 0, 0, - 0, 0, 657, 0, 658, 0, 659, 0, 0, 660, 0, 0, 0, 0, 661, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 675, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 677, 0, 678, 0, 679, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 683, 0, 0, 684, - 0, 0, 685, 0, 686, 0, 0, 0, 0, 0, 687, 0, 0, 0, 688, 0, 0, 689, 0, 0, 690, 0, 0, 0, 0, 691, 0, 0, 692, 0, 0, 0, - 693, 0, 0, 0, 0, 694, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 698, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 700, 0, 0, 701, 0, 0, 0, 0, 702, 0, 0, 0, 0, 703, 0, 0, 704, 0, 0, 0, - 0, 0, 0, 705, 0, 0, 0, 0, 0, 706, 0, 707, 0, 708, 709, 0, 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 712, 0, 0, 0, 0, 0, - 0, 0, 0, 713, 0, 714, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 717, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 723, 0, 0, 0, 0, 0, 0, 724, 0, 0, 725, 0, 0, 0, 0, 0, 0, 726, - 0, 0, 727, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 0, 0, 0, 0, 0, 732, 0, 0, - 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 735, 0, 0, 0, 0, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 739, - 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 742, 0, 0, 0, 743, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 745, - 0, 746, 0, 747, 0, 748, 0, 749, 0, 750, 0, 751, 0, 0, 0, 0, 752, 753, 754, 0, 755, 756, 757, 0, 758, 759, 0, 0, 0, 0, 0, 0, - 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 762, 0, 0, 763, 0, 0, 764, 0, 765, 0, 0, 0, 0, 766, 0, 767, 0, 0, 0, - 0, 0, 0, 0, 0, 768, 0, 0, 769, 0, 770, 771, 0, 0, 0, 772, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 774, 0, 0, 775, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 777, 0, 0, 778, 0, 0, 0, 779, 0, 0, 0, 780, 0, 0, 0, 0, 781, 0, 0, 782, 0, - 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 784, 0, 0, 785, 0, 786, 787, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, - 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 791, 0, 0, 792, 0, 793, 794, 0, 0, 795, 0, 0, 0, 0, 0, 0, 796, 0, - 0, 797, 0, 0, 798, 799, 0, 0, 0, 800, 0, 801, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 803, 0, 0, 804, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 806, 0, 0, 0, 807, 0, 0, 808, 0, 0, 0, 809, 0, 0, 810, 0, - 0, 0, 0, 811, 0, 812, 0, 0, 813, 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 815, 0, 0, 816, 0, 0, 817, 818, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0025[64] = { + 0x08280235AB52A94Dull, 0x20000A9028201301ull, 0x1120A48A16480000ull, 0x1020520A808A8045ull, + 0x4D02040815020408ull, 0x02105008D6AD5524ull, 0x0010002A400A00A6ull, 0xA804510122859200ull, + 0x204081020520A808ull, 0xD55244D020408150ull, 0x8029808414020D6Aull, 0x08000004000A9002ull, + 0x114511280418D0B2ull, 0x12AA50520A808540ull, 0x0534210854210842ull, 0x93010828041AD5A9ull, + 0x0000040001201400ull, 0xA4410A0092489400ull, 0xAD2D6A9254469250ull, 0x929084A80002B5A5ull, + 0x4004212A4414200Aull, 0x0000002020000200ull, 0x2001004108000040ull, 0x040002690A044400ull, + 0x0928910284002000ull, 0x0000000040004000ull, 0x0108010840200001ull, 0x0200000108000592ull, + 0x0440000004000300ull, 0x5140900402000000ull, 0x80A28A0404A000ACull, 0x80C00000202A2028ull, + 0xD421120000000804ull, 0x5000101890284220ull, 0x4A4252A15482C000ull, 0x0080086AAA814A11ull, + 0xAA2A211084109281ull, 0x208654A52802A0A0ull, 0x44891044AA220914ull, 0x5480050C5A145108ull, + 0x5080002C24200528ull, 0x884CA80801002482ull, 0x000008000100C040ull, 0x29000554A2940AA0ull, + 0x400080A480310802ull, 0x2349002402021440ull, 0x800000048348D20Dull, 0x2008000004000004ull, + 0x1400029306A84000ull, 0x0000010010024254ull, 0x0006480084100040ull, 0x0021510100401000ull, + 0x1212441490400010ull, 0x1210920100021421ull, 0x0854022804886A08ull, 0x0000000000001000ull, + 0x8120481000000000ull, 0x0240000120481204ull, 0x8084000000000001ull, 0x03770AAA80489010ull, + 0x24088D2014292102ull, 0x0203482048444880ull, 0x09080A32409A4404ull, 0x3240812848912000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0025[64] = { + 1u, 25u, 37u, 51u, 66u, 79u, 100u, 111u, 127u, 139u, 158u, 175u, 182u, 201u, 219u, 235u, + 256u, 261u, 276u, 303u, 323u, 337u, 340u, 346u, 357u, 368u, 370u, 377u, 385u, 390u, 398u, 413u, + 423u, 433u, 445u, 463u, 480u, 498u, 516u, 534u, 552u, 565u, 579u, 584u, 602u, 613u, 626u, 640u, + 644u, 657u, 665u, 673u, 681u, 693u, 705u, 720u, 721u, 727u, 736u, 740u, 760u, 776u, 789u, 805u, }; void recomp_unit_0025_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0025_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08868004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0025[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0025[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0025[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08868004; @@ -1003,7 +910,6 @@ L_0886800C: L_08868010: aot_gpr_16 = (0u | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886808C; } @@ -1011,7 +917,6 @@ L_08868010: } L_0886801C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0886808C; } @@ -1044,7 +949,6 @@ L_08868038: } L_08868040: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08868070; } @@ -1053,7 +957,6 @@ L_08868040: L_08868048: aot_gpr_16 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886808C; } @@ -1066,7 +969,6 @@ L_08868054: AOT_REGCACHE_SYNC_OUT(); return; L_0886805C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08868068; } @@ -1077,7 +979,6 @@ L_08868064: goto L_08868068; L_08868068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886808C; } @@ -1090,7 +991,6 @@ L_08868070: AOT_REGCACHE_SYNC_OUT(); return; L_08868078: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08868084; } @@ -1101,7 +1001,6 @@ L_08868080: goto L_08868084; L_08868084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886808C; } @@ -1109,7 +1008,6 @@ L_08868084: } L_0886808C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08868098; } @@ -1122,7 +1020,6 @@ L_08868098: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 930u, 0x08867E60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1183,7 +1080,6 @@ L_08868104: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868128; } @@ -1195,7 +1091,6 @@ L_08868124: L_08868128: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868194; } @@ -1227,7 +1122,6 @@ L_08868158: AOT_REGCACHE_SYNC_OUT(); return; L_08868170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868194; } @@ -1246,7 +1140,6 @@ L_08868178: L_08868194: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088681B0; } @@ -1254,7 +1147,6 @@ L_08868194: } L_088681A0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088681B0; } @@ -1262,7 +1154,6 @@ L_088681A0: } L_088681A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088681B0; } @@ -1293,7 +1184,17 @@ L_088681B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088681F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1314,7 +1215,6 @@ L_088681F8: L_08868250: aot_gpr_5 = (static_cast(aot_gpr_5) < 409 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08868268; } @@ -1323,7 +1223,6 @@ L_08868250: L_0886825C: ctx.gpr[23] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886826C; } @@ -1350,7 +1249,6 @@ L_08868274: AOT_REGCACHE_SYNC_OUT(); return; L_08868288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088682A0; } @@ -1377,7 +1275,6 @@ L_088682AC: AOT_REGCACHE_SYNC_OUT(); return; L_088682B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088682D8; } @@ -1400,7 +1297,6 @@ L_088682C0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088682E4; } @@ -1426,7 +1322,6 @@ L_088682E4: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868304; } @@ -1450,7 +1345,6 @@ L_0886830C: ctx.gpr[19] = (0u | 1u); ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x0886831Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886831Cu) goto L_0886831C; AOT_REGCACHE_SYNC_OUT(); return; L_0886831C: @@ -1466,7 +1360,6 @@ L_0886831C: goto L_08868340; L_08868340: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868590; } @@ -1474,7 +1367,6 @@ L_08868340: } L_08868348: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08868590; } @@ -1495,7 +1387,6 @@ L_08868360: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868580; } @@ -1508,7 +1399,6 @@ L_08868380: AOT_REGCACHE_SYNC_OUT(); return; L_08868388: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088683A8; } @@ -1531,7 +1421,6 @@ L_08868390: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088683B4; } @@ -1555,7 +1444,6 @@ L_088683A8: goto L_088683B4; L_088683B4: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868474; } @@ -1566,9 +1454,7 @@ L_088683BC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886846C; } @@ -1579,9 +1465,7 @@ L_088683D8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886846C; } @@ -1592,9 +1476,7 @@ L_088683F4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886846C; } @@ -1605,9 +1487,7 @@ L_08868410: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886846C; } @@ -1618,9 +1498,7 @@ L_0886842C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886846C; } @@ -1631,9 +1509,7 @@ L_08868448: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886846C; } @@ -1660,9 +1536,7 @@ L_08868474: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088684EC; } @@ -1673,9 +1547,7 @@ L_08868490: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088684EC; } @@ -1686,9 +1558,7 @@ L_088684AC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088684EC; } @@ -1699,9 +1569,7 @@ L_088684C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088684EC; } @@ -1721,7 +1589,6 @@ L_088684EC: L_088684F0: aot_gpr_16 = (0u | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868574; } @@ -1740,7 +1607,6 @@ L_088684FC: L_0886850C: aot_gpr_4 = (static_cast(aot_gpr_4) < 406 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08868574; } @@ -1749,7 +1615,6 @@ L_0886850C: L_08868518: aot_gpr_16 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868574; } @@ -1765,7 +1630,6 @@ L_08868524: } L_0886852C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08868558; } @@ -1773,7 +1637,6 @@ L_0886852C: } L_08868534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868574; } @@ -1786,7 +1649,6 @@ L_0886853C: AOT_REGCACHE_SYNC_OUT(); return; L_08868544: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08868550; } @@ -1797,7 +1659,6 @@ L_0886854C: goto L_08868550; L_08868550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868574; } @@ -1810,7 +1671,6 @@ L_08868558: AOT_REGCACHE_SYNC_OUT(); return; L_08868560: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886856C; } @@ -1821,7 +1681,6 @@ L_08868568: goto L_0886856C; L_0886856C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868574; } @@ -1829,7 +1688,6 @@ L_0886856C: } L_08868574: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08868580; } @@ -1902,7 +1760,6 @@ L_088685E8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886860C; } @@ -1914,7 +1771,6 @@ L_08868608: L_0886860C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886867C; } @@ -1922,7 +1778,6 @@ L_0886860C: } L_08868618: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868650; } @@ -1943,7 +1798,6 @@ L_08868620: AOT_REGCACHE_SYNC_OUT(); return; L_08868648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886867C; } @@ -1966,7 +1820,6 @@ L_08868650: L_0886867C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868698; } @@ -1974,7 +1827,6 @@ L_0886867C: } L_08868688: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868698; } @@ -1982,7 +1834,6 @@ L_08868688: } L_08868690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868698; } @@ -2010,7 +1861,17 @@ L_08868698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088686D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2030,7 +1891,6 @@ L_088686D4: L_08868728: aot_gpr_5 = (static_cast(aot_gpr_5) < 412 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08868740; } @@ -2039,7 +1899,6 @@ L_08868728: L_08868734: ctx.gpr[23] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868744; } @@ -2066,7 +1925,6 @@ L_0886874C: AOT_REGCACHE_SYNC_OUT(); return; L_08868760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868778; } @@ -2104,7 +1962,6 @@ L_08868784: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088687B4; } @@ -2128,7 +1985,6 @@ L_088687BC: ctx.gpr[19] = (0u | 1u); ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x088687CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088687CCu) goto L_088687CC; AOT_REGCACHE_SYNC_OUT(); return; L_088687CC: @@ -2144,7 +2000,6 @@ L_088687CC: goto L_088687F0; L_088687F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868A48; } @@ -2152,7 +2007,6 @@ L_088687F0: } L_088687F8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08868A48; } @@ -2173,7 +2027,6 @@ L_08868810: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868A30; } @@ -2186,7 +2039,6 @@ L_08868830: AOT_REGCACHE_SYNC_OUT(); return; L_08868838: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08868858; } @@ -2209,7 +2061,6 @@ L_08868840: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868864; } @@ -2233,7 +2084,6 @@ L_08868858: goto L_08868864; L_08868864: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868924; } @@ -2244,9 +2094,7 @@ L_0886886C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886891C; } @@ -2257,9 +2105,7 @@ L_08868888: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886891C; } @@ -2270,9 +2116,7 @@ L_088688A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886891C; } @@ -2283,9 +2127,7 @@ L_088688C0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886891C; } @@ -2296,9 +2138,7 @@ L_088688DC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886891C; } @@ -2309,9 +2149,7 @@ L_088688F8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886891C; } @@ -2338,9 +2176,7 @@ L_08868924: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886899C; } @@ -2351,9 +2187,7 @@ L_08868940: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886899C; } @@ -2364,9 +2198,7 @@ L_0886895C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886899C; } @@ -2377,9 +2209,7 @@ L_08868978: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886899C; } @@ -2399,7 +2229,6 @@ L_0886899C: L_088689A0: aot_gpr_16 = (0u | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868A24; } @@ -2418,7 +2247,6 @@ L_088689AC: L_088689BC: aot_gpr_4 = (static_cast(aot_gpr_4) < 409 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08868A24; } @@ -2427,7 +2255,6 @@ L_088689BC: L_088689C8: aot_gpr_16 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868A24; } @@ -2443,7 +2270,6 @@ L_088689D4: } L_088689DC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08868A08; } @@ -2451,7 +2277,6 @@ L_088689DC: } L_088689E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868A24; } @@ -2464,7 +2289,6 @@ L_088689EC: AOT_REGCACHE_SYNC_OUT(); return; L_088689F4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08868A00; } @@ -2475,7 +2299,6 @@ L_088689FC: goto L_08868A00; L_08868A00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868A24; } @@ -2488,7 +2311,6 @@ L_08868A08: AOT_REGCACHE_SYNC_OUT(); return; L_08868A10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08868A1C; } @@ -2499,7 +2321,6 @@ L_08868A18: goto L_08868A1C; L_08868A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868A24; } @@ -2507,7 +2328,6 @@ L_08868A1C: } L_08868A24: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08868A30; } @@ -2582,7 +2402,6 @@ L_08868AA0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868AC4; } @@ -2594,7 +2413,6 @@ L_08868AC0: L_08868AC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868B34; } @@ -2602,7 +2420,6 @@ L_08868AC4: } L_08868AD0: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868B08; } @@ -2623,7 +2440,6 @@ L_08868AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08868B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868B34; } @@ -2646,7 +2462,6 @@ L_08868B08: L_08868B34: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868B50; } @@ -2654,7 +2469,6 @@ L_08868B34: } L_08868B40: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08868B50; } @@ -2662,7 +2476,6 @@ L_08868B40: } L_08868B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868B50; } @@ -2690,7 +2503,17 @@ L_08868B50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08868B8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2718,11 +2541,20 @@ L_08868BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08868C08: ctx.gpr[17] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868C18; } @@ -2774,7 +2606,6 @@ L_08868C54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_13)); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08868CA4; } @@ -2790,9 +2621,7 @@ L_08868C6C: ctx.fpr[30] = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868C98; } @@ -2822,9 +2651,7 @@ L_08868CA4: goto L_08868CB4; L_08868CB4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868CCC; } @@ -2836,9 +2663,7 @@ L_08868CC4: goto L_08868CCC; L_08868CCC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868CE4; } @@ -2852,7 +2677,6 @@ L_08868CE4: ctx.gpr[19] = (0u | 1u); ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x08868CF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08868CF4u) goto L_08868CF4; AOT_REGCACHE_SYNC_OUT(); return; L_08868CF4: @@ -2869,7 +2693,6 @@ L_08868CF4: goto L_08868D1C; L_08868D1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868F6C; } @@ -2877,7 +2700,6 @@ L_08868D1C: } L_08868D24: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08868F6C; } @@ -2899,7 +2721,6 @@ L_08868D40: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868F54; } @@ -2912,7 +2733,6 @@ L_08868D60: AOT_REGCACHE_SYNC_OUT(); return; L_08868D68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08868D88; } @@ -2935,7 +2755,6 @@ L_08868D70: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868D94; } @@ -2959,7 +2778,6 @@ L_08868D88: goto L_08868D94; L_08868D94: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08868DE0; } @@ -2975,10 +2793,19 @@ L_08868D9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08868DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868DE0; } @@ -2992,7 +2819,6 @@ L_08868DBC: AOT_REGCACHE_SYNC_OUT(); return; L_08868DC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08868DD8; } @@ -3004,7 +2830,6 @@ L_08868DD0: goto L_08868DD8; L_08868DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868DE0; } @@ -3012,7 +2837,6 @@ L_08868DD8: } L_08868DE0: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08868F54; } @@ -3021,7 +2845,6 @@ L_08868DE0: L_08868DE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868E7C; } @@ -3030,9 +2853,7 @@ L_08868DE8: L_08868DF4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868E74; } @@ -3041,9 +2862,7 @@ L_08868DF4: L_08868E08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868E74; } @@ -3052,9 +2871,7 @@ L_08868E08: L_08868E1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868E74; } @@ -3063,9 +2880,7 @@ L_08868E1C: L_08868E30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868E74; } @@ -3074,9 +2889,7 @@ L_08868E30: L_08868E44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868E74; } @@ -3085,9 +2898,7 @@ L_08868E44: L_08868E58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868E74; } @@ -3112,9 +2923,7 @@ L_08868E74: L_08868E7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868ED4; } @@ -3123,9 +2932,7 @@ L_08868E7C: L_08868E90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868ED4; } @@ -3134,9 +2941,7 @@ L_08868E90: L_08868EA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868ED4; } @@ -3145,9 +2950,7 @@ L_08868EA4: L_08868EB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08868ED4; } @@ -3167,7 +2970,6 @@ L_08868ED4: L_08868ED8: aot_gpr_16 = (0u | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868F48; } @@ -3175,7 +2977,6 @@ L_08868ED8: } L_08868EE4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08868F48; } @@ -3191,11 +2992,20 @@ L_08868EEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08868F04: aot_gpr_16 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868F48; } @@ -3208,7 +3018,6 @@ L_08868F10: AOT_REGCACHE_SYNC_OUT(); return; L_08868F18: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08868F24; } @@ -3219,7 +3028,6 @@ L_08868F20: goto L_08868F24; L_08868F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868F48; } @@ -3232,7 +3040,6 @@ L_08868F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08868F34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08868F40; } @@ -3243,7 +3050,6 @@ L_08868F3C: goto L_08868F40; L_08868F40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08868F48; } @@ -3251,7 +3057,6 @@ L_08868F40: } L_08868F48: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08868F54; } @@ -3326,7 +3131,6 @@ L_08868FC4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08868FE8; } @@ -3338,7 +3142,6 @@ L_08868FE4: L_08868FE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869058; } @@ -3347,7 +3150,6 @@ L_08868FE8: L_08868FF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869034; } @@ -3369,7 +3171,6 @@ L_08869000: AOT_REGCACHE_SYNC_OUT(); return; L_0886902C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08869058; } @@ -3390,7 +3191,6 @@ L_08869034: L_08869058: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869064; } @@ -3421,7 +3221,17 @@ L_08869064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088690AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3531,7 +3341,6 @@ L_088691DC: aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(7984), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869348; } @@ -3540,7 +3349,6 @@ L_088691DC: L_088691EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-29156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08869348; } @@ -3548,7 +3356,6 @@ L_088691EC: } L_088691F8: aot_gpr_31 = (0x08869200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 54u, 0x08870454u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869200u) goto L_08869200; AOT_REGCACHE_SYNC_OUT(); return; L_08869200: @@ -3556,7 +3363,6 @@ L_08869200: aot_gpr_16 = (aot_gpr_16 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(304))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869228; } @@ -3564,13 +3370,11 @@ L_08869200: } L_08869214: aot_gpr_31 = (0x0886921Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0139_entry, 139u, 111u, 0x08A309DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886921Cu) goto L_0886921C; AOT_REGCACHE_SYNC_OUT(); return; L_0886921C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(304))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08869214; } @@ -3579,7 +3383,6 @@ L_0886921C: L_08869228: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088692A8; } @@ -3594,7 +3397,6 @@ L_08869234: goto L_08869240; L_08869240: aot_gpr_31 = (0x08869248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869248u) goto L_08869248; AOT_REGCACHE_SYNC_OUT(); return; L_08869248: @@ -3626,7 +3428,6 @@ L_0886926C: goto L_08869274; L_08869274: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088692A8; } @@ -3647,7 +3448,6 @@ L_08869288: L_08869294: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088692B0; } @@ -3671,7 +3471,6 @@ L_088692A8: } L_088692B0: aot_gpr_31 = (0x088692B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088692B8u) goto L_088692B8; AOT_REGCACHE_SYNC_OUT(); return; L_088692B8: @@ -3687,7 +3486,6 @@ L_088692BC: } L_088692C4: aot_gpr_31 = (0x088692CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088692CCu) goto L_088692CC; AOT_REGCACHE_SYNC_OUT(); return; L_088692CC: @@ -3707,7 +3505,6 @@ L_088692D8: goto L_088692E4; L_088692E4: aot_gpr_31 = (0x088692ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088692ECu) goto L_088692EC; AOT_REGCACHE_SYNC_OUT(); return; L_088692EC: @@ -3723,7 +3520,6 @@ L_088692F0: } L_088692F8: aot_gpr_31 = (0x08869300u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869300u) goto L_08869300; AOT_REGCACHE_SYNC_OUT(); return; L_08869300: @@ -3743,7 +3539,6 @@ L_0886930C: goto L_08869318; L_08869318: aot_gpr_31 = (0x08869320u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869320u) goto L_08869320; AOT_REGCACHE_SYNC_OUT(); return; L_08869320: @@ -3759,7 +3554,6 @@ L_08869324: } L_0886932C: aot_gpr_31 = (0x08869334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869334u) goto L_08869334; AOT_REGCACHE_SYNC_OUT(); return; L_08869334: @@ -3804,7 +3598,6 @@ L_08869348: } L_08869390: aot_gpr_31 = (0x08869398u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 595u, 0x088633B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869398u) goto L_08869398; AOT_REGCACHE_SYNC_OUT(); return; L_08869398: @@ -3837,7 +3630,6 @@ L_088693C0: L_088693D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(300))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088693E8; } @@ -3851,7 +3643,6 @@ L_088693E0: L_088693E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08869454; } @@ -3860,7 +3651,6 @@ L_088693E8: L_088693F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08869408; } @@ -3868,7 +3658,6 @@ L_088693F4: } L_08869400: aot_gpr_31 = (0x08869408u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869408u) goto L_08869408; AOT_REGCACHE_SYNC_OUT(); return; L_08869408: @@ -3954,7 +3743,6 @@ L_088694B8: aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(8020), static_cast(0u)); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(8022), static_cast(0u)); aot_gpr_31 = (0x088694CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 44u, 0x0886441Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088694CCu) goto L_088694CC; AOT_REGCACHE_SYNC_OUT(); return; L_088694CC: @@ -4162,7 +3950,6 @@ L_0886972C: aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(7990), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08869768; } @@ -4204,7 +3991,6 @@ L_08869770: L_08869784: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886979C; } @@ -4212,7 +3998,6 @@ L_08869784: } L_08869790: aot_gpr_31 = (0x08869798u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 222u, 0x08AB513Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08869798u) goto L_08869798; AOT_REGCACHE_SYNC_OUT(); return; L_08869798: @@ -4247,14 +4032,23 @@ L_088697A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088697EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(76), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869880; } @@ -4271,7 +4065,6 @@ L_08869838: aot_gpr_4 = (20224u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = std::bit_cast(0u); if (branch_taken) { @@ -4292,7 +4085,6 @@ L_0886986C: } L_08869880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08869C28; } @@ -4329,7 +4121,6 @@ L_088698C0: AOT_REGCACHE_SYNC_OUT(); return; L_088698D0: aot_gpr_31 = (0x088698D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 57u, 0x08864628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088698D8u) goto L_088698D8; AOT_REGCACHE_SYNC_OUT(); return; L_088698D8: @@ -4453,7 +4244,6 @@ L_08869A58: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 64 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08869A58; } @@ -4464,7 +4254,6 @@ L_08869A7C: ctx.gpr[18] = (ctx.gpr[18] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886993C; } @@ -4488,7 +4277,6 @@ L_08869AA4: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08869AA4; } @@ -4520,7 +4308,6 @@ L_08869AE4: L_08869B08: aot_gpr_6 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08869B24; } @@ -4529,7 +4316,6 @@ L_08869B08: L_08869B14: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(520))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08869B24; } @@ -4540,7 +4326,6 @@ L_08869B20: goto L_08869B24; L_08869B24: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08869AE4; } @@ -4620,7 +4405,6 @@ L_08869BE8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08869B84; } @@ -4653,7 +4437,17 @@ L_08869C28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08869C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4687,7 +4481,6 @@ L_08869CDC: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); aot_gpr_16 = (aot_gpr_16 + static_cast(1)); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08869CDC; } @@ -4724,7 +4517,6 @@ L_08869CEC: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_gpr_4 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08869D8C; } @@ -4739,7 +4531,6 @@ L_08869D68: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (aot_gpr_4 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08869D68; } @@ -4760,7 +4551,6 @@ L_08869D8C: L_08869DB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08869E18; } @@ -4780,7 +4570,6 @@ L_08869DC0: AOT_REGCACHE_SYNC_OUT(); return; L_08869DDC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08869DFC; } @@ -4813,7 +4602,6 @@ L_08869E0C: goto L_08869E10; L_08869E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08869E20; } @@ -4850,7 +4638,6 @@ L_08869E58: L_08869E60: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08869F50; } @@ -4864,7 +4651,6 @@ L_08869E6C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08869EE0; } @@ -4884,7 +4670,6 @@ L_08869E8C: AOT_REGCACHE_SYNC_OUT(); return; L_08869EA8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08869EC8; } @@ -4928,7 +4713,6 @@ L_08869EE0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08869F18; } @@ -4957,7 +4741,6 @@ L_08869F18: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08869F58; } @@ -5021,7 +4804,6 @@ L_08869F78: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7956))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0886A00C; } @@ -5038,7 +4820,6 @@ L_08869FE0: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (aot_gpr_4 < static_cast(536) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08869FE0; } @@ -5047,7 +4828,6 @@ L_08869FE0: L_0886A000: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08869FDC; } @@ -5069,7 +4849,17 @@ L_0886A00C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A030: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -5098,7 +4888,6 @@ L_0886A030: L_0886A0A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0886A3B0; } @@ -5119,7 +4908,6 @@ L_0886A0C4: ctx.gpr[17] = (aot_gpr_29 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_0886A100; } @@ -5130,7 +4918,6 @@ L_0886A0D8: aot_gpr_5 = (aot_gpr_5 & 14u); aot_gpr_5 = (aot_gpr_5 >> 1u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0886A100; } @@ -5138,12 +4925,10 @@ L_0886A0D8: } L_0886A0EC: aot_gpr_31 = (0x0886A0F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886A0F4u) goto L_0886A0F4; AOT_REGCACHE_SYNC_OUT(); return; L_0886A0F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886A100; } @@ -5158,7 +4943,6 @@ L_0886A100: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16)))))); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886A0C4; } @@ -5186,7 +4970,6 @@ L_0886A13C: aot_gpr_5 = (aot_gpr_29 + aot_gpr_5); ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_0886A39C; } @@ -5194,7 +4977,6 @@ L_0886A13C: } L_0886A150: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0886A39C; } @@ -5222,7 +5004,6 @@ L_0886A180: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(53))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0886A1FC; } @@ -5239,7 +5020,6 @@ L_0886A194: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_6 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0886A194; } @@ -5296,7 +5076,6 @@ L_0886A23C: goto L_0886A240; L_0886A240: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0886A398; } @@ -5315,7 +5094,6 @@ L_0886A248: L_0886A260: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886A398; } @@ -5323,7 +5101,6 @@ L_0886A260: } L_0886A26C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A284; } @@ -5331,7 +5108,6 @@ L_0886A26C: } L_0886A274: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886A368; } @@ -5339,7 +5115,6 @@ L_0886A274: } L_0886A27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A398; } @@ -5350,7 +5125,6 @@ L_0886A284: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886A360; } @@ -5363,7 +5137,6 @@ L_0886A298: AOT_REGCACHE_SYNC_OUT(); return; L_0886A2A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886A360; } @@ -5372,7 +5145,6 @@ L_0886A2A0: L_0886A2A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886A2C8; } @@ -5380,7 +5152,6 @@ L_0886A2A8: } L_0886A2B4: aot_gpr_31 = (0x0886A2BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 809u, 0x089C7804u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886A2BCu) goto L_0886A2BC; AOT_REGCACHE_SYNC_OUT(); return; L_0886A2BC: @@ -5394,7 +5165,6 @@ L_0886A2C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886A328; } @@ -5408,7 +5178,6 @@ L_0886A2DC: AOT_REGCACHE_SYNC_OUT(); return; L_0886A2E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886A314; } @@ -5437,7 +5206,6 @@ L_0886A314: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886A2DC; } @@ -5456,7 +5224,6 @@ L_0886A330: AOT_REGCACHE_SYNC_OUT(); return; L_0886A33C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0886A360; } @@ -5476,7 +5243,6 @@ L_0886A344: AOT_REGCACHE_SYNC_OUT(); return; L_0886A360: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A398; } @@ -5489,7 +5255,6 @@ L_0886A368: AOT_REGCACHE_SYNC_OUT(); return; L_0886A370: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886A390; } @@ -5502,7 +5267,6 @@ L_0886A378: AOT_REGCACHE_SYNC_OUT(); return; L_0886A380: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886A390; } @@ -5515,7 +5279,6 @@ L_0886A388: AOT_REGCACHE_SYNC_OUT(); return; L_0886A390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A398; } @@ -5529,7 +5292,6 @@ L_0886A39C: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886A13C; } @@ -5554,7 +5316,17 @@ L_0886A3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A3E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5594,13 +5366,22 @@ L_0886A434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A440: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[3] = (0u | 0u); ctx.gpr[8] = (static_cast(ctx.gpr[3]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0886A518; } @@ -5630,7 +5411,6 @@ L_0886A480: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[24] + static_cast(0)))))); ctx.gpr[24] = (ctx.gpr[24] & 2u); { const bool branch_taken = ctx.gpr[24] == 0u; - // nop if (branch_taken) { goto L_0886A4A4; } @@ -5651,7 +5431,6 @@ L_0886A4A4: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[24] + static_cast(0)))))); ctx.gpr[24] = (ctx.gpr[24] & 2u); { const bool branch_taken = ctx.gpr[24] == 0u; - // nop if (branch_taken) { goto L_0886A4C8; } @@ -5745,18 +5524,37 @@ L_0886A520: goto L_0886A538; L_0886A538: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A540: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A548: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5814,7 +5612,6 @@ L_0886A5A0: AOT_REGCACHE_SYNC_OUT(); return; L_0886A5AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886A5C8; } @@ -5849,7 +5646,17 @@ L_0886A5CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A5E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5868,14 +5675,34 @@ L_0886A5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A60C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A614: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5890,7 +5717,17 @@ L_0886A624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A630: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_6 | 0u); @@ -5908,12 +5745,21 @@ L_0886A648: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A658: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-28960))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0886A670; } @@ -5921,7 +5767,6 @@ L_0886A658: } L_0886A668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A678; } @@ -5933,11 +5778,20 @@ L_0886A670: goto L_0886A678; L_0886A678: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A680: aot_gpr_4 = (0u | 1u); jump_target = aot_gpr_31; @@ -5945,7 +5799,17 @@ L_0886A680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A68C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-28960))); ctx.gpr[2] = (aot_gpr_4 ^ 3u); @@ -5954,7 +5818,17 @@ L_0886A68C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A69C: aot_gpr_5 = (2240u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -5965,12 +5839,21 @@ L_0886A69C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0886A6C4u); - // nop goto L_0886A6EC; L_0886A6C4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5979,12 +5862,21 @@ L_0886A6C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A6D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0886A6E0u); - // nop goto L_0886A964; L_0886A6E0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5993,7 +5885,17 @@ L_0886A6E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A6EC: aot_gpr_5 = (2240u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-25552)); @@ -6030,7 +5932,6 @@ L_0886A724: goto L_0886A734; L_0886A734: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_0886A74C; } @@ -6074,7 +5975,6 @@ L_0886A770: goto L_0886A774; L_0886A774: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0886A790; } @@ -6084,7 +5984,6 @@ L_0886A77C: ctx.gpr[10] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(86)))))); ctx.gpr[11] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(306))); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_0886A790; } @@ -6106,18 +6005,26 @@ L_0886A790: } L_0886A7A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A7AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-28958))); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886A7F4; } @@ -6126,7 +6033,6 @@ L_0886A7AC: L_0886A7E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-28957))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886A7FC; } @@ -6134,7 +6040,6 @@ L_0886A7E0: } L_0886A7EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A818; } @@ -6142,7 +6047,6 @@ L_0886A7EC: } L_0886A7F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A938; } @@ -6168,7 +6072,6 @@ L_0886A818: AOT_REGCACHE_SYNC_OUT(); return; L_0886A824: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886A938; } @@ -6198,7 +6101,6 @@ L_0886A858: L_0886A86C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0886A890; } @@ -6319,14 +6221,23 @@ L_0886A938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886A964: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-28958))); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886A9B8; } @@ -6348,7 +6259,6 @@ L_0886A990: } L_0886A9B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886A9D0; } @@ -6356,7 +6266,6 @@ L_0886A9B0: } L_0886A9B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886AA40; } @@ -6388,7 +6297,6 @@ L_0886A9F0: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-17613), static_cast(aot_gpr_16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886AA1C; } @@ -6439,14 +6347,23 @@ L_0886AA40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886AA64: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-28976))); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(324), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886AB28; } @@ -6503,7 +6420,6 @@ L_0886AAB0: aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_29 + static_cast(16)); if (branch_taken) { @@ -6513,11 +6429,9 @@ L_0886AAB0: } L_0886AB18: aot_gpr_31 = (0x0886AB20u); - // nop goto L_0886A964; L_0886AB20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886AB54; } @@ -6525,7 +6439,6 @@ L_0886AB20: } L_0886AB28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886B0A8; } @@ -6536,9 +6449,7 @@ L_0886AB30: aot_gpr_4 = (aot_gpr_4 | 46208u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886AB54; } @@ -6546,7 +6457,6 @@ L_0886AB30: } L_0886AB4C: aot_gpr_31 = (0x0886AB54u); - // nop goto L_0886A7AC; L_0886AB54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -6590,7 +6500,6 @@ L_0886AB80: } L_0886AB8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886ABF8; } @@ -6606,7 +6515,6 @@ L_0886AB94: } L_0886AB9C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886AD34; } @@ -6632,7 +6540,6 @@ L_0886ABAC: { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-28972), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -6647,7 +6554,6 @@ L_0886ABE4: goto L_0886ABF0; L_0886ABF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886AD34; } @@ -6657,7 +6563,6 @@ L_0886ABF8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-28972), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-28959))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886AC98; } @@ -6671,7 +6576,6 @@ L_0886AC08: aot_gpr_4 = (15878u << 16u); aot_gpr_4 = (aot_gpr_4 | 2706u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6682,9 +6586,7 @@ L_0886AC08: L_0886AC30: aot_fpr_12 = aot_fpr_12 - ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886AC30; } @@ -6692,9 +6594,7 @@ L_0886AC30: } L_0886AC44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886AC58; } @@ -6711,7 +6611,6 @@ L_0886AC58: aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-28964), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6731,7 +6630,6 @@ L_0886AC8C: goto L_0886AC98; L_0886AC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886AD34; } @@ -6743,9 +6641,7 @@ L_0886ACA0: aot_gpr_4 = (aot_gpr_4 | 2706u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886ACFC; } @@ -6776,9 +6672,7 @@ L_0886ACFC: aot_gpr_4 = (aot_gpr_4 | 39846u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886AD2C; } @@ -6792,7 +6686,6 @@ L_0886AD1C: goto L_0886AD2C; L_0886AD2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886AD34; } @@ -6801,7 +6694,6 @@ L_0886AD2C: L_0886AD34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-28964))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_0886AD68; @@ -6824,7 +6716,6 @@ L_0886AD68: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-28968), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6866,7 +6757,6 @@ L_0886ADD0: goto L_0886ADDC; L_0886ADDC: aot_gpr_31 = (0x0886ADE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886ADE4u) goto L_0886ADE4; AOT_REGCACHE_SYNC_OUT(); return; L_0886ADE4: @@ -6876,7 +6766,6 @@ L_0886ADE8: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886AE28; } @@ -6891,7 +6780,6 @@ L_0886ADF8: goto L_0886AE04; L_0886AE04: aot_gpr_31 = (0x0886AE0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886AE0Cu) goto L_0886AE0C; AOT_REGCACHE_SYNC_OUT(); return; L_0886AE0C: @@ -6915,7 +6803,6 @@ L_0886AE28: goto L_0886AE34; L_0886AE34: aot_gpr_31 = (0x0886AE3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886AE3Cu) goto L_0886AE3C; AOT_REGCACHE_SYNC_OUT(); return; L_0886AE3C: @@ -6925,7 +6812,6 @@ L_0886AE40: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(400))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886AE80; } @@ -6940,7 +6826,6 @@ L_0886AE50: goto L_0886AE5C; L_0886AE5C: aot_gpr_31 = (0x0886AE64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886AE64u) goto L_0886AE64; AOT_REGCACHE_SYNC_OUT(); return; L_0886AE64: @@ -7007,7 +6892,6 @@ L_0886AE8C: L_0886AF00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886B06C; } @@ -7257,7 +7141,6 @@ L_0886B084: L_0886B088: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886B0A8; } @@ -7266,7 +7149,6 @@ L_0886B088: L_0886B094: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886B0A8; } @@ -7301,14 +7183,34 @@ L_0886B0A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B0EC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B0F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u | 0u); @@ -7320,7 +7222,6 @@ L_0886B0F4: AOT_REGCACHE_SYNC_OUT(); return; L_0886B10C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886B11C; } @@ -7341,7 +7242,17 @@ L_0886B11C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B128: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (0u | 88u); @@ -7357,7 +7268,17 @@ L_0886B13C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B148: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7424,7 +7345,17 @@ L_0886B1A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B21C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7463,7 +7394,17 @@ L_0886B26C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B280: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7604,7 +7545,17 @@ L_0886B3D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B414: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(28), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(32), 0u); @@ -7627,7 +7578,17 @@ L_0886B414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B45C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7640,7 +7601,6 @@ L_0886B45C: L_0886B474: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886B4BC; } @@ -7680,7 +7640,6 @@ L_0886B4BC: L_0886B4C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886B4E8; } @@ -7707,7 +7666,17 @@ L_0886B4F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7753,7 +7722,17 @@ L_0886B548: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B584: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7788,7 +7767,17 @@ L_0886B5C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7799,7 +7788,6 @@ L_0886B5D4: L_0886B5E8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0886B63C; } @@ -7825,7 +7813,6 @@ L_0886B610: AOT_REGCACHE_SYNC_OUT(); return; L_0886B628: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886B63C; } @@ -7847,12 +7834,21 @@ L_0886B63C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0886B660u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 498u, 0x08A16A94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886B660u) goto L_0886B660; AOT_REGCACHE_SYNC_OUT(); return; L_0886B660: @@ -7862,7 +7858,17 @@ L_0886B660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B66C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -7920,7 +7926,17 @@ L_0886B6DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886B6F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8289,7 +8305,17 @@ L_0886BA04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8310,7 +8336,17 @@ L_0886BAE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BB00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8331,7 +8367,17 @@ L_0886BB14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BB34: ctx.gpr[2] = (2183u << 16u); jump_target = aot_gpr_31; @@ -8339,12 +8385,21 @@ L_0886BB34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BB40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0886BB50u); - // nop goto L_0886BB34; L_0886BB50: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8353,7 +8408,17 @@ L_0886BB50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BB5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8393,7 +8458,6 @@ L_0886BBA0: goto L_0886BBA8; L_0886BBA8: aot_gpr_31 = (0x0886BBB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886BBB0u) goto L_0886BBB0; AOT_REGCACHE_SYNC_OUT(); return; L_0886BBB0: @@ -8429,7 +8493,6 @@ L_0886BBD8: goto L_0886BBDC; L_0886BBDC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886BBE8; } @@ -8453,7 +8516,17 @@ L_0886BBE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BC08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8484,7 +8557,6 @@ L_0886BC38: L_0886BC44: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886BC58; } @@ -8507,14 +8579,34 @@ L_0886BC58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BC6C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 8u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BC74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -8551,7 +8643,17 @@ L_0886BCB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BCC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8581,7 +8683,17 @@ L_0886BCEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BCF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -8624,7 +8736,17 @@ L_0886BD4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BD5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -8640,7 +8762,17 @@ L_0886BD70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BD7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8690,7 +8822,17 @@ L_0886BDC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BDE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -8797,7 +8939,17 @@ L_0886BEB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -8813,7 +8965,17 @@ L_0886BEE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886BEF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[19]); @@ -8839,7 +9001,6 @@ L_0886BEF0: L_0886BF38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886BF60; } diff --git a/profiles/vcs/generated/generated_unit_0026.cpp b/profiles/vcs/generated/generated_unit_0026.cpp index 49293a1..a9c2990 100644 --- a/profiles/vcs/generated/generated_unit_0026.cpp +++ b/profiles/vcs/generated/generated_unit_0026.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0026[4094] = { - 1, 0, 2, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, - 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 12, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 32, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, - 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 43, 0, 44, - 0, 0, 45, 0, 0, 46, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 52, 0, - 0, 53, 0, 0, 54, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 57, 0, 58, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 73, - 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, - 0, 91, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, 0, 110, 0, - 111, 0, 112, 0, 113, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 118, 119, 0, 0, 0, 0, 120, 0, 0, 0, - 0, 0, 0, 0, 121, 0, 122, 0, 0, 0, 0, 123, 0, 124, 0, 0, 0, 0, 125, 126, 0, 0, 0, 0, 127, 0, 0, 128, 129, 0, 130, 0, - 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 137, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, - 0, 0, 0, 0, 0, 0, 0, 141, 0, 142, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, - 148, 0, 0, 149, 0, 150, 0, 151, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 156, - 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, - 159, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 0, 0, - 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, - 0, 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, 180, 0, 181, 0, 0, 0, - 182, 0, 183, 0, 0, 0, 0, 0, 184, 185, 0, 0, 186, 0, 187, 0, 0, 0, 188, 0, 189, 0, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, - 0, 0, 192, 193, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 200, 0, 201, 0, 0, - 202, 0, 0, 0, 0, 0, 203, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 0, 209, 0, 210, 0, 211, 0, 0, - 0, 212, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 215, 216, 0, 217, 0, 0, 218, 0, 0, 0, 0, 0, 219, 0, 220, 0, 0, 221, 222, 0, - 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 225, 0, 0, 226, - 0, 227, 0, 0, 0, 0, 228, 0, 0, 229, 0, 230, 231, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 0, 236, 237, 0, 238, 0, 0, 0, 239, 0, 0, 240, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, - 0, 0, 0, 0, 243, 0, 0, 244, 0, 245, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, - 249, 250, 0, 251, 252, 0, 253, 0, 0, 254, 0, 0, 255, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, - 258, 259, 0, 260, 261, 0, 0, 0, 0, 262, 0, 0, 263, 0, 264, 0, 265, 0, 0, 266, 0, 267, 268, 0, 269, 270, 0, 271, 0, 272, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 295, 0, 0, 0, 296, 0, 297, 0, 298, 0, 0, 299, 0, 300, - 301, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 304, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 310, 0, - 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 315, - 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 320, - 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 330, 0, 331, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, - 343, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 346, 0, 347, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 355, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, - 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 372, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, - 377, 0, 0, 378, 0, 379, 0, 380, 0, 0, 381, 0, 382, 383, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, - 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 0, - 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 401, 402, 0, 0, 0, 0, 0, 0, - 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, - 0, 0, 407, 0, 0, 0, 408, 0, 409, 0, 410, 0, 411, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, - 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 426, 0, 0, 427, - 0, 0, 428, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 438, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 447, 0, 448, 0, 0, 449, 0, 450, - 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 454, 455, 0, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, - 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, - 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 465, 0, 0, 466, 0, 0, 467, 0, - 468, 0, 0, 0, 469, 0, 0, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, - 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, - 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 492, 0, 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, - 0, 496, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 503, 0, 0, 504, - 0, 505, 506, 507, 0, 0, 508, 0, 0, 509, 0, 510, 0, 511, 0, 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, - 0, 0, 0, 516, 0, 0, 0, 0, 517, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, - 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 526, 0, 0, 0, 527, 0, 528, 0, 0, 529, 0, 530, 0, 0, 531, 0, 0, 532, 0, 533, 534, 0, 0, 535, 0, 536, 0, 0, 0, - 0, 0, 0, 0, 537, 0, 538, 0, 539, 0, 0, 540, 0, 0, 541, 0, 542, 543, 0, 544, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, - 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 550, 0, 0, 551, 552, 0, 0, 0, 0, 553, 0, - 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 558, 0, 0, 0, 559, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, - 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 569, 0, 570, 0, 0, 571, 0, 572, 0, 0, - 573, 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 581, - 0, 582, 0, 583, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 587, 0, 588, 0, 0, 0, 0, 589, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 592, 0, 0, 0, 593, 0, 594, 0, 595, 0, 0, 596, 0, 597, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 598, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, 0, 603, 0, 604, 0, 0, - 0, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 608, 0, 609, 0, 610, 0, 0, 0, 0, 611, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 620, 0, 0, 0, 621, 0, 622, 0, 623, 0, 624, 0, 0, 625, 0, 626, 0, 0, 0, 0, 0, - 0, 0, 627, 628, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, 0, 632, 0, 633, 0, 634, 0, 0, 0, 0, 0, 635, - 636, 0, 637, 0, 0, 0, 0, 0, 0, 638, 0, 0, 639, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, - 642, 0, 643, 0, 644, 0, 645, 0, 0, 646, 0, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 0, 0, 653, 0, 0, 0, 654, 0, 0, - 655, 0, 0, 656, 0, 657, 0, 0, 658, 0, 0, 659, 0, 660, 0, 0, 0, 661, 0, 662, 0, 0, 663, 0, 0, 664, 0, 665, 0, 666, 0, 0, - 667, 0, 668, 0, 0, 669, 0, 0, 0, 0, 670, 0, 671, 0, 672, 0, 0, 0, 0, 0, 673, 0, 674, 0, 0, 0, 0, 675, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 682, 0, 683, 0, 684, 0, 0, 0, 0, 0, 0, 685, 0, 686, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0026[64] = { + 0x823240A050080215ull, 0x000820A104100000ull, 0x4490402104000502ull, 0x4100000000000000ull, + 0xA901012200000002ull, 0x022A0852508102A4ull, 0x020010100002A000ull, 0x0000000AA0818880ull, + 0x2011010000090000ull, 0x1000600000000000ull, 0x20000202000100A0ull, 0xA010090020000202ull, + 0x8088000080800100ull, 0x5202000080080000ull, 0x590C285010D40435ull, 0x4080252004040440ull, + 0x824028A90A085280ull, 0x0108010108000020ull, 0x0210240810800200ull, 0x141453051648AA84ull, + 0x2A4885412A40914Cull, 0x920000016504B282ull, 0x0000000000891A42ull, 0x2000000000224581ull, + 0x0200000000011290ull, 0x020000000001125Bull, 0x009100002B69521Bull, 0x4000008100255600ull, + 0x0000000004400AA8ull, 0x000AA005A5444080ull, 0x8200201141001001ull, 0x0010002284004022ull, + 0x01012840040008A1ull, 0x0000000004A10000ull, 0x0200000000022804ull, 0x0800000100254045ull, + 0x0000000000080280ull, 0x5020000000002282ull, 0x0012880002025404ull, 0x1102000000000011ull, + 0x208080020200B4A9ull, 0x2020080802080820ull, 0x0000440403480100ull, 0x0205154408000000ull, + 0x94224A02A0080008ull, 0x0040000000012024ull, 0x00A5200000000248ull, 0x10A62120A5221488ull, + 0x4950001008004001ull, 0x1108880000015511ull, 0x020A482050150004ull, 0x0000042204000244ull, + 0x10152A4E92100480ull, 0x0080108405102108ull, 0x042B495014D25288ull, 0x1150048043240404ull, + 0x2952080944120000ull, 0x0852810AA0129211ull, 0x29240210052A2120ull, 0x0220220021502022ull, + 0x82A4084C052A8AA8ull, 0x2255525508011205ull, 0x085054252A4A2929ull, 0x2815200801411000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0026[64] = { + 1u, 16u, 23u, 34u, 36u, 45u, 61u, 67u, 76u, 82u, 85u, 91u, 99u, 105u, 111u, 131u, + 141u, 157u, 163u, 171u, 192u, 212u, 227u, 235u, 243u, 249u, 258u, 276u, 286u, 293u, 307u, 316u, + 324u, 334u, 338u, 343u, 352u, 355u, 362u, 372u, 377u, 390u, 398u, 406u, 415u, 428u, 433u, 441u, + 459u, 468u, 480u, 492u, 499u, 516u, 526u, 547u, 560u, 573u, 590u, 605u, 616u, 636u, 655u, 676u, }; void recomp_unit_0026_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0026_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0886C000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0026[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0026[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0026[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0886C000; @@ -864,7 +771,6 @@ L_0886C000: AOT_REGCACHE_SYNC_OUT(); return; L_0886C008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886C024; } @@ -895,7 +801,17 @@ L_0886C024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C04C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -911,7 +827,6 @@ L_0886C04C: } L_0886C070: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0886C094; } @@ -931,7 +846,6 @@ L_0886C078: AOT_REGCACHE_SYNC_OUT(); return; L_0886C094: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886C0E4; } @@ -985,7 +899,17 @@ L_0886C0E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C0FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -1093,14 +1017,33 @@ L_0886C204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C220: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C228: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[19]); @@ -1150,7 +1093,17 @@ L_0886C294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C2B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1163,7 +1116,6 @@ L_0886C2B8: L_0886C2D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886C2E8; } @@ -1182,7 +1134,17 @@ L_0886C2E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C2F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1263,7 +1225,17 @@ L_0886C3F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C404: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1316,14 +1288,23 @@ L_0886C494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C4A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0886C4C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 170u, 0x08A82198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886C4C0u) goto L_0886C4C0; AOT_REGCACHE_SYNC_OUT(); return; L_0886C4C0: @@ -1389,7 +1370,17 @@ L_0886C524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C540: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1424,7 +1415,6 @@ L_0886C578: L_0886C584: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886C598; } @@ -1447,7 +1437,17 @@ L_0886C598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C5AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1475,14 +1475,23 @@ L_0886C5D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886C5E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-672)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(600), aot_run_words); } ctx.gpr[19] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0886C634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 195u, 0x08A82398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886C634u) goto L_0886C634; AOT_REGCACHE_SYNC_OUT(); return; L_0886C634: @@ -1582,7 +1591,6 @@ L_0886C72C: aot_gpr_4 = (ctx.gpr[18] | 0u); ctx.gpr[18] = (0u | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886C740; } @@ -1596,7 +1604,6 @@ L_0886C740: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[19] + static_cast(32)); if (branch_taken) { @@ -1608,9 +1615,7 @@ L_0886C75C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fpr[20] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886CD7C; } @@ -1623,7 +1628,6 @@ L_0886C774: AOT_REGCACHE_SYNC_OUT(); return; L_0886C77C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886CD7C; } @@ -1631,7 +1635,6 @@ L_0886C77C: } L_0886C784: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0886CD7C; } @@ -1776,7 +1779,6 @@ L_0886C84C: { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.gpr[30] = (aot_gpr_29 + static_cast(28)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(588), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1808,9 +1810,7 @@ L_0886C8A0: AOT_REGCACHE_SYNC_OUT(); return; L_0886C8C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886C8F4; } @@ -2005,9 +2005,7 @@ L_0886C8F4: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886C9B8; } @@ -2043,7 +2041,6 @@ L_0886C9F0: aot_gpr_4 = (16448u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(588))); goto L_0886CBAC; @@ -2061,7 +2058,6 @@ L_0886CA1C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(588))); goto L_0886CBAC; @@ -2247,9 +2243,7 @@ L_0886CBD0: aot_gpr_4 = (16448u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886CD7C; } @@ -2267,9 +2261,7 @@ L_0886CBFC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886CD7C; } @@ -2452,7 +2444,17 @@ L_0886CD7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CDC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2467,7 +2469,6 @@ L_0886CDC4: L_0886CDE4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886CE08; } @@ -2475,12 +2476,10 @@ L_0886CDE4: } L_0886CDF0: aot_gpr_31 = (0x0886CDF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 79u, 0x08A8C7F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886CDF8u) goto L_0886CDF8; AOT_REGCACHE_SYNC_OUT(); return; L_0886CDF8: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_0886CE10; } @@ -2488,7 +2487,6 @@ L_0886CDF8: } L_0886CE00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886CE14; } @@ -2496,7 +2494,6 @@ L_0886CE00: } L_0886CE08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886CE14; } @@ -2517,7 +2514,17 @@ L_0886CE14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CE28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2536,7 +2543,6 @@ L_0886CE48: AOT_REGCACHE_SYNC_OUT(); return; L_0886CE50: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0886CE5C; } @@ -2557,7 +2563,17 @@ L_0886CE5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CE70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2571,7 +2587,6 @@ L_0886CE70: AOT_REGCACHE_SYNC_OUT(); return; L_0886CE90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886CEB4; } @@ -2616,11 +2631,20 @@ L_0886CECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CEE0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0886CEF0; } @@ -2631,11 +2655,20 @@ L_0886CEEC: goto L_0886CEF0; L_0886CEF0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CEF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -2655,7 +2688,17 @@ L_0886CF18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CF28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2682,7 +2725,17 @@ L_0886CF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CF68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2743,7 +2796,17 @@ L_0886CFDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886CFF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2758,7 +2821,6 @@ L_0886CFF8: AOT_REGCACHE_SYNC_OUT(); return; L_0886D01C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886D038; } @@ -2771,7 +2833,6 @@ L_0886D024: goto L_0886CF68; L_0886D030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886D04C; } @@ -2798,14 +2859,34 @@ L_0886D04C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D064: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D06C: aot_gpr_29 = (aot_gpr_29 + static_cast(-800)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(780), aot_gpr_16); @@ -2927,7 +3008,17 @@ L_0886D180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D1A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -2951,7 +3042,17 @@ L_0886D1CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D1E0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); @@ -2973,7 +3074,17 @@ L_0886D1E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D224: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3000,7 +3111,17 @@ L_0886D25C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D270: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3061,7 +3182,17 @@ L_0886D2E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3072,7 +3203,6 @@ L_0886D308: AOT_REGCACHE_SYNC_OUT(); return; L_0886D31C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886D334; } @@ -3084,7 +3214,6 @@ L_0886D324: goto L_0886D06C; L_0886D32C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886D33C; } @@ -3102,7 +3231,17 @@ L_0886D33C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D34C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; @@ -3115,7 +3254,6 @@ L_0886D34C: L_0886D358: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886D368; } @@ -3130,12 +3268,21 @@ L_0886D368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D370: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886D3B0; } @@ -3155,7 +3302,6 @@ L_0886D388: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0886D3A4; } @@ -3167,7 +3313,6 @@ L_0886D3A0: L_0886D3A4: aot_gpr_4 = (aot_gpr_6 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886D380; } @@ -3175,16 +3320,24 @@ L_0886D3A4: } L_0886D3B0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D3B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886D418; } @@ -3204,7 +3357,6 @@ L_0886D3D0: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0886D40C; } @@ -3212,7 +3364,6 @@ L_0886D3D0: } L_0886D3E8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0886D408; } @@ -3224,7 +3375,6 @@ L_0886D3F0: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0886D40C; } @@ -3236,7 +3386,6 @@ L_0886D408: L_0886D40C: aot_gpr_4 = (ctx.gpr[7] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886D3C8; } @@ -3244,11 +3393,20 @@ L_0886D40C: } L_0886D418: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3262,7 +3420,17 @@ L_0886D430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D43C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3279,7 +3447,6 @@ L_0886D43C: L_0886D458: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0886D474; } @@ -3287,7 +3454,6 @@ L_0886D458: } L_0886D464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886D4A8; } @@ -3295,7 +3461,6 @@ L_0886D464: } L_0886D46C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886D4A8; } @@ -3316,7 +3481,6 @@ L_0886D480: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886D4A0; } @@ -3329,7 +3493,6 @@ L_0886D498: AOT_REGCACHE_SYNC_OUT(); return; L_0886D4A0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0886D474; } @@ -3347,12 +3510,21 @@ L_0886D4A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D4BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886D4E4; } @@ -3361,7 +3533,6 @@ L_0886D4BC: L_0886D4CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0886D4EC; } @@ -3370,7 +3541,6 @@ L_0886D4CC: L_0886D4D8: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886D4CC; } @@ -3386,16 +3556,24 @@ L_0886D4E4: } L_0886D4EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D4F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886D530; } @@ -3407,7 +3585,6 @@ L_0886D504: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886D524; } @@ -3415,7 +3592,6 @@ L_0886D504: } L_0886D51C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886D534; } @@ -3424,7 +3600,6 @@ L_0886D51C: L_0886D524: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886D504; } @@ -3435,15 +3610,23 @@ L_0886D530: goto L_0886D534; L_0886D534: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D53C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886D574; } @@ -3455,7 +3638,6 @@ L_0886D548: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886D568; } @@ -3463,7 +3645,6 @@ L_0886D548: } L_0886D560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886D578; } @@ -3472,7 +3653,6 @@ L_0886D560: L_0886D568: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886D548; } @@ -3483,11 +3663,20 @@ L_0886D574: goto L_0886D578; L_0886D578: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886D580: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[8]); @@ -3556,7 +3745,6 @@ L_0886D618: } L_0886D624: aot_gpr_31 = (0x0886D62Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886D62Cu) goto L_0886D62C; AOT_REGCACHE_SYNC_OUT(); return; L_0886D62C: @@ -3657,7 +3845,6 @@ L_0886D728: ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_0886D81C; } @@ -3666,7 +3853,6 @@ L_0886D728: L_0886D738: ctx.gpr[22] = (ctx.gpr[23] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0886D810; } @@ -3837,7 +4023,6 @@ L_0886D90C: goto L_0886D910; L_0886D910: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0886DA10; } @@ -3983,7 +4168,6 @@ L_0886DA54: goto L_0886DA58; L_0886DA58: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0886DA30; } @@ -3994,7 +4178,6 @@ L_0886DA60: goto L_0886DA64; L_0886DA64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886DA74; } @@ -4002,7 +4185,6 @@ L_0886DA64: } L_0886DA6C: aot_gpr_31 = (0x0886DA74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DA74u) goto L_0886DA74; AOT_REGCACHE_SYNC_OUT(); return; L_0886DA74: @@ -4031,12 +4213,21 @@ L_0886DA74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DAC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0886DAD0u); - // nop goto L_0886F8AC; L_0886DAD0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4045,7 +4236,17 @@ L_0886DAD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4086,7 +4287,6 @@ L_0886DB30: AOT_REGCACHE_SYNC_OUT(); return; L_0886DB38: aot_gpr_31 = (0x0886DB40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DB40u) goto L_0886DB40; AOT_REGCACHE_SYNC_OUT(); return; L_0886DB40: @@ -4129,7 +4329,17 @@ L_0886DB80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DB9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[22]); @@ -4176,7 +4386,6 @@ L_0886DC14: AOT_REGCACHE_SYNC_OUT(); return; L_0886DC1C: aot_gpr_31 = (0x0886DC24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DC24u) goto L_0886DC24; AOT_REGCACHE_SYNC_OUT(); return; L_0886DC24: @@ -4318,7 +4527,6 @@ L_0886DD7C: goto L_0886DD80; L_0886DD80: { const bool branch_taken = ctx.gpr[17] != aot_gpr_16; - // nop if (branch_taken) { goto L_0886DD58; } @@ -4348,7 +4556,6 @@ L_0886DDB4: AOT_REGCACHE_SYNC_OUT(); return; L_0886DDBC: aot_gpr_31 = (0x0886DDC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DDC4u) goto L_0886DDC4; AOT_REGCACHE_SYNC_OUT(); return; L_0886DDC4: @@ -4393,7 +4600,17 @@ L_0886DE00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4406,7 +4623,6 @@ L_0886DE30: ctx.gpr[8] = (aot_gpr_5 < ctx.gpr[8] ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0886DE90; } @@ -4423,7 +4639,6 @@ L_0886DE60: AOT_REGCACHE_SYNC_OUT(); return; L_0886DE78: aot_gpr_31 = (0x0886DE80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DE80u) goto L_0886DE80; AOT_REGCACHE_SYNC_OUT(); return; L_0886DE80: @@ -4448,7 +4663,17 @@ L_0886DE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DEB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4461,7 +4686,6 @@ L_0886DEB4: ctx.gpr[8] = (aot_gpr_5 < ctx.gpr[8] ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0886DF14; } @@ -4478,7 +4702,6 @@ L_0886DEE4: AOT_REGCACHE_SYNC_OUT(); return; L_0886DEFC: aot_gpr_31 = (0x0886DF04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DF04u) goto L_0886DF04; AOT_REGCACHE_SYNC_OUT(); return; L_0886DF04: @@ -4503,7 +4726,17 @@ L_0886DF14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DF38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4529,7 +4762,6 @@ L_0886DF68: AOT_REGCACHE_SYNC_OUT(); return; L_0886DF7C: aot_gpr_31 = (0x0886DF84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886DF84u) goto L_0886DF84; AOT_REGCACHE_SYNC_OUT(); return; L_0886DF84: @@ -4557,7 +4789,17 @@ L_0886DF94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886DFD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4583,7 +4825,6 @@ L_0886E000: AOT_REGCACHE_SYNC_OUT(); return; L_0886E014: aot_gpr_31 = (0x0886E01Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886E01Cu) goto L_0886E01C; AOT_REGCACHE_SYNC_OUT(); return; L_0886E01C: @@ -4611,7 +4852,17 @@ L_0886E02C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E068: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4640,7 +4891,6 @@ L_0886E098: AOT_REGCACHE_SYNC_OUT(); return; L_0886E0AC: aot_gpr_31 = (0x0886E0B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886E0B4u) goto L_0886E0B4; AOT_REGCACHE_SYNC_OUT(); return; L_0886E0B4: @@ -4660,7 +4910,17 @@ L_0886E0C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E0E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4700,7 +4960,6 @@ L_0886E140: AOT_REGCACHE_SYNC_OUT(); return; L_0886E154: aot_gpr_31 = (0x0886E15Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886E15Cu) goto L_0886E15C; AOT_REGCACHE_SYNC_OUT(); return; L_0886E15C: @@ -4899,7 +5158,17 @@ L_0886E354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E380: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); ctx.gpr[13] = (ctx.gpr[10] | 0u); @@ -4950,7 +5219,6 @@ L_0886E3EC: AOT_REGCACHE_SYNC_OUT(); return; L_0886E41C: aot_gpr_31 = (0x0886E424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886E424u) goto L_0886E424; AOT_REGCACHE_SYNC_OUT(); return; L_0886E424: @@ -5153,7 +5421,17 @@ L_0886E644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E664: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -5180,7 +5458,6 @@ L_0886E6AC: AOT_REGCACHE_SYNC_OUT(); return; L_0886E6BC: aot_gpr_31 = (0x0886E6C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886E6C4u) goto L_0886E6C4; AOT_REGCACHE_SYNC_OUT(); return; L_0886E6C4: @@ -5329,7 +5606,6 @@ L_0886E830: goto L_0886E834; L_0886E834: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0886E80C; } @@ -5352,7 +5628,17 @@ L_0886E83C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E864: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -5381,7 +5667,17 @@ L_0886E884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E8BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -5402,7 +5698,17 @@ L_0886E8DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5423,7 +5729,17 @@ L_0886E914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E92C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5444,7 +5760,17 @@ L_0886E94C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E964: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5472,7 +5798,17 @@ L_0886E98C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E9AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5500,7 +5836,17 @@ L_0886E9D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886E9F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5523,7 +5869,6 @@ L_0886EA20: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 2u)); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886EA64; } @@ -5537,7 +5882,6 @@ L_0886EA4C: AOT_REGCACHE_SYNC_OUT(); return; L_0886EA58: aot_gpr_31 = (0x0886EA60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886EA60u) goto L_0886EA60; AOT_REGCACHE_SYNC_OUT(); return; L_0886EA60: @@ -5661,7 +6005,6 @@ L_0886EBA0: } L_0886EBA8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886EBC8; } @@ -5696,7 +6039,17 @@ L_0886EBC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886EBE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -5732,14 +6085,23 @@ L_0886EC0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886EC4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886EC7C; } @@ -5842,7 +6204,17 @@ L_0886ED14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886ED34: aot_gpr_5 = (0u | 5u); jump_target = aot_gpr_31; @@ -5850,7 +6222,17 @@ L_0886ED34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886ED40: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[18]); @@ -6112,7 +6494,6 @@ L_0886EFC8: } L_0886EFD4: aot_gpr_31 = (0x0886EFDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886EFDCu) goto L_0886EFDC; AOT_REGCACHE_SYNC_OUT(); return; L_0886EFDC: @@ -6126,7 +6507,6 @@ L_0886EFF0: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886EE0C; } @@ -6168,7 +6548,17 @@ L_0886F038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F06C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); @@ -6213,7 +6603,6 @@ L_0886F0D0: AOT_REGCACHE_SYNC_OUT(); return; L_0886F0D8: aot_gpr_31 = (0x0886F0E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886F0E0u) goto L_0886F0E0; AOT_REGCACHE_SYNC_OUT(); return; L_0886F0E0: @@ -6244,7 +6633,6 @@ L_0886F110: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_0886F1F0; } @@ -6324,7 +6712,6 @@ L_0886F1E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); ctx.gpr[18] = (ctx.gpr[18] + static_cast(72)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0886F120; } @@ -6343,7 +6730,17 @@ L_0886F1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F208: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_31); @@ -6370,7 +6767,6 @@ L_0886F240: goto L_0886F248; L_0886F248: { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_0886F294; } @@ -6389,7 +6785,6 @@ L_0886F250: AOT_REGCACHE_SYNC_OUT(); return; L_0886F270: aot_gpr_31 = (0x0886F278u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886F278u) goto L_0886F278; AOT_REGCACHE_SYNC_OUT(); return; L_0886F278: @@ -6417,7 +6812,6 @@ L_0886F294: L_0886F2AC: ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); { const bool branch_taken = ctx.gpr[3] == aot_gpr_6; - // nop if (branch_taken) { goto L_0886F2CC; } @@ -6426,7 +6820,6 @@ L_0886F2AC: L_0886F2B8: ctx.gpr[2] = (ctx.gpr[2] + static_cast(72)); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_0886F2AC; } @@ -6480,7 +6873,17 @@ L_0886F318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F324: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_gpr_6); @@ -6530,7 +6933,17 @@ L_0886F394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F3A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-592)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(556), ctx.gpr[17]); @@ -6600,7 +7013,6 @@ L_0886F464: L_0886F470: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0886F488; } @@ -6634,7 +7046,6 @@ L_0886F498: } L_0886F4A4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0886F588; } @@ -6642,7 +7053,6 @@ L_0886F4A4: } L_0886F4AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886F588; } @@ -6665,7 +7075,6 @@ L_0886F4C0: goto L_0886F4C8; L_0886F4C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886F588; } @@ -6731,7 +7140,6 @@ L_0886F550: goto L_0886F560; L_0886F560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886F588; } @@ -6750,9 +7158,7 @@ L_0886F568: L_0886F588: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886F5B0; } @@ -6783,7 +7189,17 @@ L_0886F5B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F5DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(42))); @@ -6809,7 +7225,6 @@ L_0886F60C: goto L_0886F7A8; L_0886F61C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886F708; } @@ -6839,7 +7254,6 @@ L_0886F638: L_0886F644: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0886F65C; } @@ -6876,7 +7290,6 @@ L_0886F670: AOT_REGCACHE_SYNC_OUT(); return; L_0886F690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886F708; } @@ -6897,7 +7310,6 @@ L_0886F6A0: L_0886F6AC: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0886F6C4; } @@ -6953,7 +7365,17 @@ L_0886F708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F728: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_gpr_6 | 0u); @@ -6967,7 +7389,6 @@ L_0886F728: L_0886F748: ctx.gpr[11] = (static_cast(ctx.gpr[10]) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_0886F760; } @@ -7018,7 +7439,17 @@ L_0886F79C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F7A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -7094,7 +7525,6 @@ L_0886F868: AOT_REGCACHE_SYNC_OUT(); return; L_0886F878: aot_gpr_31 = (0x0886F880u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886F880u) goto L_0886F880; AOT_REGCACHE_SYNC_OUT(); return; L_0886F880: @@ -7118,14 +7548,23 @@ L_0886F88C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F8AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_6 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0886F8E0; } @@ -7144,7 +7583,6 @@ L_0886F8D0: AOT_REGCACHE_SYNC_OUT(); return; L_0886F8D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886F8F4; } @@ -7153,7 +7591,6 @@ L_0886F8D8: L_0886F8E0: aot_gpr_6 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0886F8F4; } @@ -7170,12 +7607,21 @@ L_0886F8F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F900: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886F944; } @@ -7200,7 +7646,6 @@ L_0886F924: L_0886F930: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886F944; } @@ -7208,7 +7653,6 @@ L_0886F930: } L_0886F93C: aot_gpr_31 = (0x0886F944u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886F944u) goto L_0886F944; AOT_REGCACHE_SYNC_OUT(); return; L_0886F944: @@ -7218,7 +7662,17 @@ L_0886F944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F950: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7243,7 +7697,6 @@ L_0886F97C: AOT_REGCACHE_SYNC_OUT(); return; L_0886F984: aot_gpr_31 = (0x0886F98Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886F98Cu) goto L_0886F98C; AOT_REGCACHE_SYNC_OUT(); return; L_0886F98C: @@ -7255,7 +7708,17 @@ L_0886F98C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F9A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7299,7 +7762,17 @@ L_0886F9D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886F9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7346,7 +7819,6 @@ L_0886FA44: } L_0886FA4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FB14; } @@ -7420,7 +7892,6 @@ L_0886FAD4: L_0886FAE0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_0886FAF4; } @@ -7469,7 +7940,17 @@ L_0886FB14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886FB34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7485,7 +7966,6 @@ L_0886FB34: } L_0886FB50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FBA4; } @@ -7526,7 +8006,17 @@ L_0886FBA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886FBB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7571,7 +8061,6 @@ L_0886FC0C: } L_0886FC14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FC68; } @@ -7579,7 +8068,6 @@ L_0886FC14: } L_0886FC1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FC98; } @@ -7587,7 +8075,6 @@ L_0886FC1C: } L_0886FC24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886FC68; } @@ -7597,7 +8084,6 @@ L_0886FC2C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0886FC44; } @@ -7613,7 +8099,6 @@ L_0886FC3C: } L_0886FC44: aot_gpr_31 = (0x0886FC4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886FC4Cu) goto L_0886FC4C; AOT_REGCACHE_SYNC_OUT(); return; L_0886FC4C: @@ -7669,7 +8154,17 @@ L_0886FC98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886FCAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7677,7 +8172,6 @@ L_0886FCAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886FCDC; } @@ -7686,7 +8180,6 @@ L_0886FCAC: L_0886FCC8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0886FCE4; } @@ -7694,7 +8187,6 @@ L_0886FCC8: } L_0886FCD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FD00; } @@ -7702,7 +8194,6 @@ L_0886FCD4: } L_0886FCDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FD30; } @@ -7724,7 +8215,6 @@ L_0886FCFC: goto L_0886FD00; L_0886FD00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0886FD24; } @@ -7756,7 +8246,17 @@ L_0886FD30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0886FD40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7782,7 +8282,6 @@ L_0886FD6C: } L_0886FD80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0886FFF4; } @@ -7790,12 +8289,10 @@ L_0886FD80: } L_0886FD88: aot_gpr_31 = (0x0886FD90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 643u, 0x08AD38DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886FD90u) goto L_0886FD90; AOT_REGCACHE_SYNC_OUT(); return; L_0886FD90: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0886FD88; } @@ -7809,7 +8306,6 @@ L_0886FD98: L_0886FDA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0886FE34; } @@ -7822,7 +8318,6 @@ L_0886FDB0: AOT_REGCACHE_SYNC_OUT(); return; L_0886FDB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886FE34; } @@ -7835,7 +8330,6 @@ L_0886FDC0: AOT_REGCACHE_SYNC_OUT(); return; L_0886FDC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886FE34; } @@ -7849,7 +8343,6 @@ L_0886FDD0: L_0886FDD8: aot_gpr_4 = (ctx.gpr[2] & 67u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886FE34; } @@ -7873,7 +8366,6 @@ L_0886FDF4: L_0886FE00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0886FE34; } @@ -7895,7 +8387,6 @@ L_0886FE14: L_0886FE20: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0886FE34; } @@ -7918,13 +8409,11 @@ L_0886FE34: } L_0886FE44: aot_gpr_31 = (0x0886FE4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 596u, 0x08AD35ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886FE4Cu) goto L_0886FE4C; AOT_REGCACHE_SYNC_OUT(); return; L_0886FE4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0886FE88; } @@ -7933,7 +8422,6 @@ L_0886FE4C: L_0886FE58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0886FE74; } @@ -7941,12 +8429,10 @@ L_0886FE58: } L_0886FE64: aot_gpr_31 = (0x0886FE6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886FE6Cu) goto L_0886FE6C; AOT_REGCACHE_SYNC_OUT(); return; L_0886FE6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0886FE88; } @@ -7979,7 +8465,6 @@ L_0886FE94: goto L_0886FEA8; L_0886FEA8: aot_gpr_31 = (0x0886FEB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0886FEB0u) goto L_0886FEB0; AOT_REGCACHE_SYNC_OUT(); return; L_0886FEB0: @@ -7992,9 +8477,7 @@ L_0886FEB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0886FF30; } @@ -8002,7 +8485,6 @@ L_0886FEB8: } L_0886FED0: aot_gpr_31 = (0x0886FED8u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_0886FED8: @@ -8028,7 +8510,6 @@ L_0886FEEC: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7680))); goto L_0886FFD0; @@ -8038,7 +8519,6 @@ L_0886FF30: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0886FF58; } @@ -8114,7 +8594,6 @@ L_0886FFD0: { const float fs = aot_fpr_12; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fpr[20] = aot_fpr_13 + ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(4), std::bit_cast(ctx.fpr[20])); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0027.cpp b/profiles/vcs/generated/generated_unit_0027.cpp index 9a4cad5..e04c2b3 100644 --- a/profiles/vcs/generated/generated_unit_0027.cpp +++ b/profiles/vcs/generated/generated_unit_0027.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0027[4096] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 10, - 0, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, - 21, 0, 0, 22, 0, 23, 0, 0, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 40, 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, - 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 51, 0, 52, 53, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, - 57, 0, 58, 0, 0, 59, 0, 60, 0, 61, 0, 62, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 66, 0, 0, 0, 0, 67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, 0, 70, 0, 71, 0, 0, 0, 0, - 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, - 79, 0, 80, 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 86, 0, 0, 87, 0, 0, 0, 0, 88, 0, - 0, 0, 89, 0, 90, 91, 0, 92, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 97, 98, 0, 0, 0, 99, 0, - 100, 0, 101, 0, 0, 102, 0, 0, 0, 103, 0, 104, 105, 0, 106, 107, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 115, 0, 0, 0, - 116, 117, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 121, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 128, 0, 0, 0, 0, 129, 0, 130, 0, 0, 131, 0, 132, 133, 0, - 0, 134, 0, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 0, 0, 145, 0, 146, 0, 0, 0, - 147, 0, 0, 148, 0, 149, 150, 0, 0, 151, 0, 0, 152, 0, 153, 154, 0, 0, 155, 0, 0, 156, 0, 157, 158, 0, 0, 159, 0, 0, 160, 0, - 0, 161, 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 165, 166, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, 0, - 0, 170, 0, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 174, 175, 0, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 0, 0, 179, 0, - 0, 180, 0, 181, 0, 0, 182, 0, 183, 184, 0, 0, 0, 0, 185, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 190, 0, - 0, 191, 0, 192, 193, 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 198, 0, 199, 0, 0, 200, 0, 201, 202, - 0, 0, 0, 0, 203, 0, 0, 0, 204, 0, 0, 205, 0, 0, 0, 206, 0, 0, 207, 0, 208, 0, 0, 209, 0, 210, 211, 0, 0, 0, 0, 212, - 0, 0, 0, 213, 0, 0, 214, 0, 0, 0, 215, 0, 0, 216, 0, 217, 0, 0, 218, 0, 219, 220, 0, 0, 0, 0, 221, 0, 0, 0, 222, 0, - 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 226, 0, 0, 227, 0, 228, 229, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, - 233, 0, 0, 234, 0, 235, 0, 0, 236, 0, 237, 238, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, 242, 0, 0, 243, 0, - 244, 0, 0, 245, 0, 246, 247, 0, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 250, 0, 0, 0, 251, 0, 0, 252, 0, 253, 0, 0, 254, 0, - 0, 255, 0, 0, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 259, 260, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 263, 0, 0, - 0, 264, 0, 0, 265, 0, 266, 0, 0, 267, 0, 268, 269, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 0, 274, - 0, 275, 0, 0, 276, 0, 277, 278, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 281, 0, 0, 0, 282, 0, 0, 283, 0, 284, 0, 0, 285, - 0, 286, 287, 0, 0, 0, 0, 288, 0, 0, 0, 289, 0, 0, 290, 0, 0, 0, 291, 0, 0, 292, 0, 293, 0, 0, 294, 0, 295, 296, 0, 0, - 0, 0, 297, 0, 0, 0, 298, 0, 0, 299, 0, 0, 0, 300, 0, 0, 301, 0, 302, 0, 0, 303, 0, 304, 305, 0, 0, 0, 0, 306, 0, 0, - 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, 311, 0, 0, 312, 0, 313, 314, 0, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 317, - 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 321, 0, 322, 323, 0, 0, 0, 0, 324, 0, 0, 0, 325, 0, 0, 326, 0, 0, 0, 327, 0, - 0, 328, 0, 329, 0, 0, 330, 0, 331, 332, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 337, 0, 338, 0, - 0, 339, 0, 340, 341, 0, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 347, 0, 0, 348, 0, 0, 0, - 0, 0, 349, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 354, 0, 355, 0, 0, - 0, 0, 0, 356, 0, 0, 357, 0, 358, 0, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 362, 0, 0, 363, 0, 0, - 0, 364, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 372, 0, 0, 373, 0, 374, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, - 0, 0, 0, 0, 377, 0, 378, 0, 379, 0, 0, 380, 0, 381, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 386, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, - 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, - 395, 0, 396, 0, 0, 0, 397, 0, 398, 0, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 0, 401, 0, 402, 0, 0, 403, 0, 404, 0, 0, 0, - 405, 0, 406, 0, 407, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 410, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 414, - 0, 415, 0, 0, 416, 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 420, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 426, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, - 0, 0, 435, 0, 436, 0, 437, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 441, 0, 0, 0, 442, 0, 443, 444, 0, 0, - 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 0, - 0, 450, 0, 451, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, 455, 456, 0, 0, 0, 0, 0, 457, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 462, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 465, 466, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, - 0, 474, 0, 475, 0, 476, 0, 0, 477, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 480, 0, 481, 0, 0, 482, 0, 0, 0, 0, 483, 0, 484, - 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 0, - 490, 0, 0, 0, 0, 491, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, - 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 500, - 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 503, 504, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 509, 0, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, - 0, 0, 514, 0, 0, 0, 515, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 518, 0, 0, 0, 0, 519, 0, 0, 520, - 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, - 0, 0, 524, 525, 0, 0, 0, 0, 526, 0, 527, 0, 0, 0, 528, 0, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, 0, - 0, 532, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 535, 0, 0, 0, 0, 0, 0, 0, - 0, 536, 0, 0, 0, 537, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, - 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, - 0, 546, 0, 0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 551, 0, 0, 552, 553, 0, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, - 0, 0, 0, 562, 0, 0, 0, 563, 0, 564, 0, 0, 565, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 569, 570, 0, 0, 0, 571, 0, 0, 0, - 0, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 576, 0, 577, 0, - 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, 581, 0, 582, 0, 0, 583, 0, 584, 0, 0, 585, 0, 0, 0, - 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, - 590, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 594, 0, 0, 0, 0, 0, 595, 0, 596, 0, 597, 0, 0, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 0, 601, 0, 602, 0, 0, 0, - 0, 0, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 605, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, - 610, 0, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 624, 625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 628, 0, 0, 0, 629, 0, 0, 0, 630, 0, - 631, 0, 0, 0, 632, 633, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 636, 0, 0, 0, 0, 0, 0, 0, 637, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 641, - 642, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, 649, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 652, 0, 653, 0, 0, 0, - 654, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 658, 0, - 659, 0, 660, 661, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, 0, 0, 0, - 0, 0, 673, 0, 674, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 681, 0, 682, 0, 683, 684, 0, 0, 685, 0, 0, 686, 0, 0, 0, 0, 0, - 0, 0, 687, 0, 0, 0, 0, 688, 689, 0, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 694, 0, 0, 695, 0, 0, - 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 698, 0, 0, 699, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 701, 0, 702, 0, 703, 0, - 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 707, 0, 0, 0, 0, 708, 709, 0, 0, 0, - 0, 0, 710, 0, 0, 0, 0, 711, 0, 712, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 0, 0, 0, 716, 0, - 0, 0, 0, 717, 0, 718, 0, 719, 0, 0, 0, 720, 0, 0, 0, 0, 721, 0, 0, 722, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, - 724, 0, 0, 725, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, - 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 732, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 736, - 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, - 0, 741, 0, 742, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 744, 0, 745, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 748, 749, 750, 0, - 0, 751, 0, 0, 0, 752, 0, 753, 0, 0, 754, 0, 0, 0, 0, 755, 0, 0, 756, 757, 758, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, - 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 762, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 765, 0, - 766, 0, 0, 767, 0, 0, 768, 0, 769, 0, 770, 0, 771, 0, 772, 0, 0, 773, 0, 774, 0, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, - 777, 0, 778, 0, 0, 779, 0, 780, 781, 0, 0, 782, 0, 0, 0, 783, 0, 0, 0, 0, 0, 784, 785, 786, 0, 787, 0, 0, 788, 0, 789, 790, - 0, 791, 0, 792, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 795, 796, 797, 0, 798, 0, 0, 799, - 0, 800, 0, 0, 801, 0, 0, 0, 802, 0, 803, 0, 0, 804, 0, 0, 0, 0, 805, 0, 806, 807, 0, 0, 0, 808, 0, 809, 0, 0, 810, 0, - 811, 0, 812, 0, 813, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 0, 816, 0, 817, 818, 0, 819, 0, 820, 0, 0, 0, 821, 0, 822, 0, 0, - 0, 0, 0, 0, 0, 0, 823, 0, 0, 824, 0, 825, 826, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, - 0, 0, 830, 0, 0, 831, 0, 0, 832, 0, 0, 0, 0, 833, 0, 834, 0, 835, 0, 836, 0, 837, 0, 0, 0, 838, 0, 839, 0, 0, 0, 0, - 0, 0, 0, 840, 0, 0, 0, 841, 0, 842, 0, 0, 0, 843, 0, 0, 0, 844, 0, 0, 0, 845, 0, 846, 0, 847, 0, 0, 848, 0, 849, 0, - 850, 0, 851, 0, 0, 852, 0, 853, 0, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 0, 0, 859, 0, 860, 861, 0, 0, 862, 0, 863, 0, - 864, 0, 0, 0, 865, 0, 866, 0, 867, 0, 0, 868, 0, 0, 869, 0, 870, 0, 871, 0, 0, 0, 0, 872, 0, 0, 873, 0, 0, 874, 0, 875, - 0, 876, 0, 877, 0, 0, 0, 878, 0, 879, 0, 880, 0, 0, 881, 0, 0, 882, 0, 883, 0, 884, 0, 0, 0, 0, 885, 0, 0, 886, 0, 0, - 887, 0, 888, 0, 0, 0, 889, 0, 890, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 892, 0, 0, 893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 895, 0, 0, 0, 0, 0, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 897, 0, 0, 898, 0, 0, 0, 0, 899, 0, 900, 0, 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 902, 0, 0, 0, 0, - 903, 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, 905, 0, 0, 0, 0, 0, 0, 906, 0, 907, 0, 908, 0, 909, 0, 0, 910, 0, 0, 0, 0, - 911, 912, 913, 0, 914, 0, 0, 915, 0, 916, 0, 0, 917, 0, 918, 0, 0, 0, 0, 0, 919, 0, 920, 921, 0, 922, 0, 0, 0, 923, 0, 0, - 0, 0, 0, 924, 0, 925, 0, 926, 0, 0, 927, 0, 928, 0, 929, 0, 930, 0, 0, 931, 0, 0, 0, 932, 0, 933, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 934, 0, 935, 0, 0, 0, 0, 0, 936, 0, 937, 0, 0, 0, 0, 938, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0027[64] = { + 0x0000000000510041ull, 0x8441000000001000ull, 0x80400329052AA288ull, 0x0914824080AA8140ull, + 0x42448AA55026D555ull, 0x109110820A480000ull, 0x468848B442524245ull, 0x14401202000ADA25ull, + 0x6942C04200862443ull, 0x49A4D26914555552ull, 0x4488691224434822ull, 0xD291221A5224434Aull, + 0x4434A44886948910ull, 0x48910D291221A522ull, 0x244348224A448869ull, 0x948910D291221A52ull, + 0x21A5224434A44886ull, 0x44886948910D2912ull, 0x1291221A5224434Aull, 0x2412214829200484ull, + 0x4214A80000015222ull, 0x480099000A082950ull, 0x14A1094502041010ull, 0x3000029288944415ull, + 0xA00A892100114108ull, 0x1410202034428854ull, 0x02500400418A004Aull, 0x0024000006100180ull, + 0x0800000800020804ull, 0x05004804A12A092Aull, 0xA808000102010521ull, 0x0002102004061080ull, + 0x90C00844100400A4ull, 0x4044450C80040002ull, 0x4000282201800006ull, 0x0081044210040884ull, + 0x80020412001140C8ull, 0x504020A011A49288ull, 0x022000211294A004ull, 0x1445150400802005ull, + 0x2208811120843220ull, 0xC0220A000040A000ull, 0x80A0043144500200ull, 0x0000400984104000ull, + 0x1484000050408001ull, 0x0100050D54000009ull, 0x0484100005001008ull, 0x00000002000C0054ull, + 0x25404984049A8110ull, 0x1848042054049090ull, 0x040908A840500A84ull, 0x0010000808208209ull, + 0x0800844082040041ull, 0x009C84A27212880Aull, 0x042A554944025001ull, 0x9700810AD2E089A5ull, + 0x28AD09154A342512ull, 0x0A2AA12404085A40ull, 0x534554A552A22288ull, 0x242A4A8AA4854951ull, + 0x0200090000010145ull, 0x0802142400001010ull, 0x22D0529709540881ull, 0x80285050028954A8ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0027[64] = { + 1u, 6u, 11u, 28u, 43u, 68u, 79u, 100u, 116u, 134u, 161u, 180u, 203u, 223u, 244u, 264u, + 286u, 307u, 328u, 349u, 364u, 377u, 391u, 405u, 421u, 435u, 450u, 462u, 469u, 474u, 490u, 501u, + 509u, 521u, 532u, 541u, 551u, 562u, 578u, 590u, 603u, 617u, 626u, 638u, 645u, 654u, 665u, 673u, + 679u, 696u, 710u, 724u, 732u, 741u, 760u, 777u, 800u, 823u, 840u, 864u, 887u, 895u, 903u, 924u, }; void recomp_unit_0027_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0027_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08870000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0027[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0027[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0027[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08870000; @@ -1124,7 +1031,17 @@ L_08870000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08870018: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -1141,7 +1058,6 @@ L_08870040: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08870244; } @@ -1149,7 +1065,6 @@ L_08870040: } L_08870050: aot_gpr_31 = (0x08870058u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 140u, 0x0889098Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870058u) goto L_08870058; AOT_REGCACHE_SYNC_OUT(); return; L_08870058: @@ -1316,7 +1231,6 @@ L_08870224: AOT_REGCACHE_SYNC_OUT(); return; L_08870234: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08870254; } @@ -1332,7 +1246,6 @@ L_0887023C: } L_08870244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887035C; } @@ -1340,7 +1253,6 @@ L_08870244: } L_0887024C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887035C; } @@ -1357,7 +1269,6 @@ L_08870254: } L_08870260: aot_gpr_31 = (0x08870268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870268u) goto L_08870268; AOT_REGCACHE_SYNC_OUT(); return; L_08870268: @@ -1455,7 +1366,6 @@ L_0887033C: AOT_REGCACHE_SYNC_OUT(); return; L_08870344: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887035C; } @@ -1485,7 +1395,17 @@ L_0887035C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887037C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1503,7 +1423,17 @@ L_08870398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088703A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1520,19 +1450,38 @@ L_088703BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088703C8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-27495))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088703D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088703E0u); - // nop goto L_088703EC; L_088703E0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1541,7 +1490,17 @@ L_088703E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088703EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -1553,7 +1512,6 @@ L_088703EC: goto L_08870400; L_08870400: aot_gpr_31 = (0x08870408u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870408u) goto L_08870408; AOT_REGCACHE_SYNC_OUT(); return; L_08870408: @@ -1562,7 +1520,6 @@ L_08870408: goto L_08870410; L_08870410: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08870428; } @@ -1578,7 +1535,6 @@ L_08870418: } L_08870420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887043C; } @@ -1586,7 +1542,6 @@ L_08870420: } L_08870428: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870448; } @@ -1594,7 +1549,6 @@ L_08870428: } L_08870430: aot_gpr_31 = (0x08870438u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870438u) goto L_08870438; AOT_REGCACHE_SYNC_OUT(); return; L_08870438: @@ -1602,7 +1556,6 @@ L_08870438: goto L_0887043C; L_0887043C: aot_gpr_31 = (0x08870444u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0032_entry, 32u, 258u, 0x088851A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870444u) goto L_08870444; AOT_REGCACHE_SYNC_OUT(); return; L_08870444: @@ -1615,7 +1568,17 @@ L_08870448: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08870454: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1629,7 +1592,6 @@ L_08870454: goto L_08870470; L_08870470: aot_gpr_31 = (0x08870478u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870478u) goto L_08870478; AOT_REGCACHE_SYNC_OUT(); return; L_08870478: @@ -1652,7 +1614,6 @@ L_08870488: } L_08870494: aot_gpr_31 = (0x0887049Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887049Cu) goto L_0887049C; AOT_REGCACHE_SYNC_OUT(); return; L_0887049C: @@ -1705,7 +1666,17 @@ L_088704E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088704F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -1834,7 +1805,6 @@ L_08870608: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08870650; } @@ -1843,7 +1813,6 @@ L_08870608: L_08870618: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08870644; } @@ -1854,7 +1823,6 @@ L_08870624: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(0), aot_gpr_6); ctx.gpr[7] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08870644; } @@ -1917,7 +1885,6 @@ L_08870690: goto L_08870694; L_08870694: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088706E8; } @@ -2007,7 +1974,6 @@ L_08870714: } L_08870724: aot_gpr_31 = (0x0887072Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887072Cu) goto L_0887072C; AOT_REGCACHE_SYNC_OUT(); return; L_0887072C: @@ -2015,7 +1981,6 @@ L_0887072C: goto L_08870730; L_08870730: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088706F8; } @@ -2026,7 +1991,6 @@ L_08870738: goto L_0887073C; L_0887073C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887074C; } @@ -2034,7 +1998,6 @@ L_0887073C: } L_08870744: aot_gpr_31 = (0x0887074Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887074Cu) goto L_0887074C; AOT_REGCACHE_SYNC_OUT(); return; L_0887074C: @@ -2058,7 +2021,17 @@ L_0887074C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08870784: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -2204,7 +2177,6 @@ L_088708B8: goto L_088708BC; L_088708BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088708E0; } @@ -2223,7 +2195,6 @@ L_088708C4: } L_088708D8: aot_gpr_31 = (0x088708E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088708E0u) goto L_088708E0; AOT_REGCACHE_SYNC_OUT(); return; L_088708E0: @@ -2235,7 +2206,6 @@ L_088708E0: goto L_088708EC; L_088708EC: aot_gpr_31 = (0x088708F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088708F4u) goto L_088708F4; AOT_REGCACHE_SYNC_OUT(); return; L_088708F4: @@ -2244,7 +2214,6 @@ L_088708F4: L_088708F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08870918; } @@ -2253,7 +2222,6 @@ L_088708F8: L_08870904: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08870920; } @@ -2261,7 +2229,6 @@ L_08870904: } L_08870910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870928; } @@ -2269,7 +2236,6 @@ L_08870910: } L_08870918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088712F0; } @@ -2277,7 +2243,6 @@ L_08870918: } L_08870920: aot_gpr_31 = (0x08870928u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870928u) goto L_08870928; AOT_REGCACHE_SYNC_OUT(); return; L_08870928: @@ -2287,27 +2252,22 @@ L_08870928: AOT_REGCACHE_SYNC_OUT(); return; L_08870930: aot_gpr_31 = (0x08870938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 542u, 0x08AC2318u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870938u) goto L_08870938; AOT_REGCACHE_SYNC_OUT(); return; L_08870938: aot_gpr_31 = (0x08870940u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 428u, 0x08AF64B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870940u) goto L_08870940; AOT_REGCACHE_SYNC_OUT(); return; L_08870940: aot_gpr_31 = (0x08870948u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0062_entry, 62u, 335u, 0x088FD89Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870948u) goto L_08870948; AOT_REGCACHE_SYNC_OUT(); return; L_08870948: aot_gpr_31 = (0x08870950u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 375u, 0x089759ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870950u) goto L_08870950; AOT_REGCACHE_SYNC_OUT(); return; L_08870950: aot_gpr_31 = (0x08870958u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0032_entry, 32u, 376u, 0x08885818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870958u) goto L_08870958; AOT_REGCACHE_SYNC_OUT(); return; L_08870958: @@ -2322,7 +2282,6 @@ L_08870958: } L_08870968: aot_gpr_31 = (0x08870970u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870970u) goto L_08870970; AOT_REGCACHE_SYNC_OUT(); return; L_08870970: @@ -2341,7 +2300,6 @@ L_08870980: goto L_0887098C; L_0887098C: aot_gpr_31 = (0x08870994u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870994u) goto L_08870994; AOT_REGCACHE_SYNC_OUT(); return; L_08870994: @@ -2362,7 +2320,6 @@ L_088709A4: goto L_088709B0; L_088709B0: aot_gpr_31 = (0x088709B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088709B8u) goto L_088709B8; AOT_REGCACHE_SYNC_OUT(); return; L_088709B8: @@ -2383,7 +2340,6 @@ L_088709C8: goto L_088709D4; L_088709D4: aot_gpr_31 = (0x088709DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088709DCu) goto L_088709DC; AOT_REGCACHE_SYNC_OUT(); return; L_088709DC: @@ -2398,7 +2354,6 @@ L_088709E0: L_088709EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08870E78; } @@ -2414,7 +2369,6 @@ L_08870A04: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08870E6C; } @@ -2426,11 +2380,20 @@ L_08870A14: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24512))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08870A2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); { const bool branch_taken = aot_gpr_4 != 0u; @@ -2442,7 +2405,6 @@ L_08870A2C: } L_08870A38: aot_gpr_31 = (0x08870A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870A40u) goto L_08870A40; AOT_REGCACHE_SYNC_OUT(); return; L_08870A40: @@ -2506,7 +2468,6 @@ L_08870AA0: } L_08870AAC: aot_gpr_31 = (0x08870AB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870AB4u) goto L_08870AB4; AOT_REGCACHE_SYNC_OUT(); return; L_08870AB4: @@ -2551,7 +2512,6 @@ L_08870AF8: AOT_REGCACHE_SYNC_OUT(); return; L_08870B04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2568,7 +2528,6 @@ L_08870B0C: } L_08870B18: aot_gpr_31 = (0x08870B20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870B20u) goto L_08870B20; AOT_REGCACHE_SYNC_OUT(); return; L_08870B20: @@ -2613,7 +2572,6 @@ L_08870B64: AOT_REGCACHE_SYNC_OUT(); return; L_08870B70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2630,7 +2588,6 @@ L_08870B78: } L_08870B84: aot_gpr_31 = (0x08870B8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870B8Cu) goto L_08870B8C; AOT_REGCACHE_SYNC_OUT(); return; L_08870B8C: @@ -2675,7 +2632,6 @@ L_08870BD0: AOT_REGCACHE_SYNC_OUT(); return; L_08870BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2692,7 +2648,6 @@ L_08870BE4: } L_08870BF0: aot_gpr_31 = (0x08870BF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870BF8u) goto L_08870BF8; AOT_REGCACHE_SYNC_OUT(); return; L_08870BF8: @@ -2737,7 +2692,6 @@ L_08870C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08870C48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2754,7 +2708,6 @@ L_08870C50: } L_08870C5C: aot_gpr_31 = (0x08870C64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870C64u) goto L_08870C64; AOT_REGCACHE_SYNC_OUT(); return; L_08870C64: @@ -2799,7 +2752,6 @@ L_08870CA8: AOT_REGCACHE_SYNC_OUT(); return; L_08870CB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2816,7 +2768,6 @@ L_08870CBC: } L_08870CC8: aot_gpr_31 = (0x08870CD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870CD0u) goto L_08870CD0; AOT_REGCACHE_SYNC_OUT(); return; L_08870CD0: @@ -2861,7 +2812,6 @@ L_08870D14: AOT_REGCACHE_SYNC_OUT(); return; L_08870D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2878,7 +2828,6 @@ L_08870D28: } L_08870D34: aot_gpr_31 = (0x08870D3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870D3Cu) goto L_08870D3C; AOT_REGCACHE_SYNC_OUT(); return; L_08870D3C: @@ -2923,7 +2872,6 @@ L_08870D80: AOT_REGCACHE_SYNC_OUT(); return; L_08870D8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -2940,7 +2888,6 @@ L_08870D94: } L_08870DA0: aot_gpr_31 = (0x08870DA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870DA8u) goto L_08870DA8; AOT_REGCACHE_SYNC_OUT(); return; L_08870DA8: @@ -2985,7 +2932,6 @@ L_08870DEC: AOT_REGCACHE_SYNC_OUT(); return; L_08870DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3002,7 +2948,6 @@ L_08870E00: } L_08870E0C: aot_gpr_31 = (0x08870E14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870E14u) goto L_08870E14; AOT_REGCACHE_SYNC_OUT(); return; L_08870E14: @@ -3047,7 +2992,6 @@ L_08870E58: AOT_REGCACHE_SYNC_OUT(); return; L_08870E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3066,7 +3010,6 @@ L_08870E84: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088712E4; } @@ -3078,11 +3021,20 @@ L_08870E94: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24472))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08870EAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); { const bool branch_taken = aot_gpr_4 != 0u; @@ -3094,7 +3046,6 @@ L_08870EAC: } L_08870EB8: aot_gpr_31 = (0x08870EC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870EC0u) goto L_08870EC0; AOT_REGCACHE_SYNC_OUT(); return; L_08870EC0: @@ -3139,7 +3090,6 @@ L_08870F04: AOT_REGCACHE_SYNC_OUT(); return; L_08870F10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3156,7 +3106,6 @@ L_08870F18: } L_08870F24: aot_gpr_31 = (0x08870F2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870F2Cu) goto L_08870F2C; AOT_REGCACHE_SYNC_OUT(); return; L_08870F2C: @@ -3201,7 +3150,6 @@ L_08870F70: AOT_REGCACHE_SYNC_OUT(); return; L_08870F7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3218,7 +3166,6 @@ L_08870F84: } L_08870F90: aot_gpr_31 = (0x08870F98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08870F98u) goto L_08870F98; AOT_REGCACHE_SYNC_OUT(); return; L_08870F98: @@ -3263,7 +3210,6 @@ L_08870FDC: AOT_REGCACHE_SYNC_OUT(); return; L_08870FE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3280,7 +3226,6 @@ L_08870FF0: } L_08870FFC: aot_gpr_31 = (0x08871004u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871004u) goto L_08871004; AOT_REGCACHE_SYNC_OUT(); return; L_08871004: @@ -3325,7 +3270,6 @@ L_08871048: AOT_REGCACHE_SYNC_OUT(); return; L_08871054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3342,7 +3286,6 @@ L_0887105C: } L_08871068: aot_gpr_31 = (0x08871070u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871070u) goto L_08871070; AOT_REGCACHE_SYNC_OUT(); return; L_08871070: @@ -3387,7 +3330,6 @@ L_088710B4: AOT_REGCACHE_SYNC_OUT(); return; L_088710C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3404,7 +3346,6 @@ L_088710C8: } L_088710D4: aot_gpr_31 = (0x088710DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088710DCu) goto L_088710DC; AOT_REGCACHE_SYNC_OUT(); return; L_088710DC: @@ -3449,7 +3390,6 @@ L_08871120: AOT_REGCACHE_SYNC_OUT(); return; L_0887112C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3466,7 +3406,6 @@ L_08871134: } L_08871140: aot_gpr_31 = (0x08871148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871148u) goto L_08871148; AOT_REGCACHE_SYNC_OUT(); return; L_08871148: @@ -3511,7 +3450,6 @@ L_0887118C: AOT_REGCACHE_SYNC_OUT(); return; L_08871198: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3528,7 +3466,6 @@ L_088711A0: } L_088711AC: aot_gpr_31 = (0x088711B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088711B4u) goto L_088711B4; AOT_REGCACHE_SYNC_OUT(); return; L_088711B4: @@ -3573,7 +3510,6 @@ L_088711F8: AOT_REGCACHE_SYNC_OUT(); return; L_08871204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3590,7 +3526,6 @@ L_0887120C: } L_08871218: aot_gpr_31 = (0x08871220u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871220u) goto L_08871220; AOT_REGCACHE_SYNC_OUT(); return; L_08871220: @@ -3635,7 +3570,6 @@ L_08871264: AOT_REGCACHE_SYNC_OUT(); return; L_08871270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3652,7 +3586,6 @@ L_08871278: } L_08871284: aot_gpr_31 = (0x0887128Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887128Cu) goto L_0887128C; AOT_REGCACHE_SYNC_OUT(); return; L_0887128C: @@ -3697,7 +3630,6 @@ L_088712D0: AOT_REGCACHE_SYNC_OUT(); return; L_088712DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08870A90; } @@ -3719,7 +3651,17 @@ L_088712F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2232u << 16u); @@ -3735,7 +3677,17 @@ L_0887131C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871328: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3753,7 +3705,6 @@ L_08871328: L_08871354: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08871398; } @@ -3776,7 +3727,6 @@ L_08871374: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (0u | 92u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08871398; } @@ -3805,12 +3755,21 @@ L_088713A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088713B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088713C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 107u, 0x08A94A04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088713C4u) goto L_088713C4; AOT_REGCACHE_SYNC_OUT(); return; L_088713C4: @@ -3820,7 +3779,17 @@ L_088713C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088713D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -3837,12 +3806,21 @@ L_088713E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088713F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08871404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 145u, 0x08A94CB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871404u) goto L_08871404; AOT_REGCACHE_SYNC_OUT(); return; L_08871404: @@ -3853,12 +3831,21 @@ L_08871404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871414: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08871424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 122u, 0x08A94B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871424u) goto L_08871424; AOT_REGCACHE_SYNC_OUT(); return; L_08871424: @@ -3868,21 +3855,49 @@ L_08871424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871430: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871438: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871440: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), ctx.gpr[17]); @@ -3926,7 +3941,6 @@ L_088714B4: L_088714BC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088714D0; } @@ -3959,7 +3973,17 @@ L_088714E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088714F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -3974,7 +3998,6 @@ L_088714F8: } L_08871510: { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_088715AC; } @@ -3999,7 +4022,6 @@ L_08871520: } L_0887152C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08871518; } @@ -4022,7 +4044,6 @@ L_0887154C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[0] = ctx.fpr[0] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088715B0; } @@ -4030,7 +4051,6 @@ L_0887154C: } L_08871564: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088715A0; } @@ -4076,7 +4096,6 @@ L_0887156C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088715B0; } @@ -4101,7 +4120,17 @@ L_088715B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088715BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4122,7 +4151,6 @@ L_088715BC: L_088715EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088716A0; } @@ -4147,7 +4175,6 @@ L_08871610: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088716A0; } @@ -4190,7 +4217,6 @@ L_08871664: AOT_REGCACHE_SYNC_OUT(); return; L_08871680: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088716A0; } @@ -4204,7 +4230,6 @@ L_08871688: goto L_088716C0; L_08871698: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088716AC; } @@ -4227,13 +4252,22 @@ L_088716AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088716C0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4))); ctx.gpr[2] = (0u | 0u); aot_gpr_6 = (static_cast(ctx.gpr[2]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08871700; } @@ -4246,7 +4280,6 @@ L_088716D4: L_088716DC: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_08871708; } @@ -4254,7 +4287,6 @@ L_088716DC: } L_088716E8: { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_08871708; } @@ -4280,18 +4312,25 @@ L_08871700: } L_08871708: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871710: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887175C; } @@ -4299,9 +4338,7 @@ L_08871710: } L_08871728: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08871750; } @@ -4309,9 +4346,7 @@ L_08871728: } L_08871738: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08871790; } @@ -4336,9 +4371,7 @@ L_08871750: } L_0887175C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08871784; } @@ -4346,9 +4379,7 @@ L_0887175C: } L_0887176C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08871790; } @@ -4378,11 +4409,20 @@ L_08871790: goto L_0887179C; L_0887179C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088717A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(5))); @@ -4430,7 +4470,6 @@ L_08871820: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(12))); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); if (branch_taken) { @@ -4471,13 +4510,22 @@ L_08871850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871880: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); ctx.gpr[2] = (0u | 0u); ctx.gpr[7] = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088718BC; } @@ -4491,7 +4539,6 @@ L_08871894: L_088718A0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_088718C4; } @@ -4517,11 +4564,20 @@ L_088718BC: } L_088718C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088718CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4540,7 +4596,6 @@ L_088718CC: } L_088718F4: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08871918; } @@ -4563,7 +4618,6 @@ L_08871908: goto L_08871910; L_08871910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08871994; } @@ -4643,7 +4697,17 @@ L_08871994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088719B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -4668,7 +4732,6 @@ L_088719D0: AOT_REGCACHE_SYNC_OUT(); return; L_088719E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08871A0C; } @@ -4680,7 +4743,6 @@ L_088719F0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(40))); jump_target = aot_gpr_5; aot_gpr_31 = (0x08871A04u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08871A04u) goto L_08871A04; AOT_REGCACHE_SYNC_OUT(); return; @@ -4696,7 +4758,17 @@ L_08871A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871A18: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), aot_gpr_31); @@ -4739,7 +4811,17 @@ L_08871A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871A78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); @@ -4752,7 +4834,6 @@ L_08871A78: aot_gpr_5 = (static_cast(aot_gpr_6) < 4097 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08871AD8; } @@ -4768,7 +4849,6 @@ L_08871AA8: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_5) < 4096 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08871AD8; } @@ -4785,7 +4865,17 @@ L_08871AD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871AE4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); @@ -4800,7 +4890,6 @@ L_08871AE4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_6); aot_gpr_6 = (ctx.gpr[7] | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08871B50; } @@ -4830,7 +4919,6 @@ L_08871B50: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.gpr[8] = (aot_gpr_6 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08871BC8; } @@ -4874,7 +4962,17 @@ L_08871BC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4915,7 +5013,17 @@ L_08871C2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871C44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4968,14 +5076,23 @@ L_08871C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871CEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08871D14; } @@ -4987,7 +5104,6 @@ L_08871D04: goto L_08871BD4; L_08871D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08871D20; } @@ -5005,14 +5121,23 @@ L_08871D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(44))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_6 = (static_cast(aot_gpr_5) < 4097 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08871D54; } @@ -5024,7 +5149,6 @@ L_08871D44: goto L_088719B4; L_08871D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08871D7C; } @@ -5040,7 +5164,6 @@ L_08871D60: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(44))); aot_gpr_5 = (static_cast(aot_gpr_5) < 4097 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08871D7C; } @@ -5058,7 +5181,17 @@ L_08871D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(108), ctx.gpr[19]); @@ -5119,7 +5252,6 @@ L_08871E00: aot_gpr_6 = (aot_gpr_6 - aot_gpr_5); aot_gpr_6 = (static_cast(aot_gpr_6) < 161 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08871E28; } @@ -5170,7 +5302,17 @@ L_08871E64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08871E80: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5228,7 +5370,6 @@ L_08871EFC: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), 0u); aot_gpr_5 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08871EFC; } @@ -5352,7 +5493,17 @@ L_0887201C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872048: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5389,7 +5540,6 @@ L_08872098: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_6 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088720DC; } @@ -5459,7 +5609,17 @@ L_08872104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872148: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5492,7 +5652,6 @@ L_0887218C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); aot_gpr_4 = (aot_gpr_4 + static_cast(24)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088721A8; } @@ -5506,7 +5665,6 @@ L_088721A8: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(6))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08872294; } @@ -5516,7 +5674,6 @@ L_088721B8: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(70))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088721D8; } @@ -5569,7 +5726,6 @@ L_08872208: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08872284; } @@ -5636,7 +5792,6 @@ L_088722B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(48))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08872308; } @@ -5682,7 +5837,17 @@ L_0887232C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5700,7 +5865,6 @@ L_08872370: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088723C0; } @@ -5749,7 +5913,17 @@ L_088723C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088723DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); @@ -5786,7 +5960,6 @@ L_0887241C: goto L_08872438; L_08872438: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08872484; } @@ -5856,7 +6029,17 @@ L_088724A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088724C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(46))); @@ -5881,7 +6064,6 @@ L_088724FC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(46))); aot_gpr_5 = (0u | 200u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08872524; } @@ -5896,7 +6078,6 @@ L_0887250C: AOT_REGCACHE_SYNC_OUT(); return; L_0887251C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887253C; } @@ -5905,7 +6086,6 @@ L_0887251C: L_08872524: aot_gpr_4 = (static_cast(aot_gpr_4) < 225 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887253C; } @@ -5924,7 +6104,6 @@ L_0887253C: L_08872548: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08872560; } @@ -5953,7 +6132,6 @@ L_08872570: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887259C; } @@ -5977,7 +6155,17 @@ L_0887259C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088725B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6003,7 +6191,6 @@ L_088725D8: goto L_08872148; L_088725F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887265C; } @@ -6013,7 +6200,6 @@ L_088725F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[7] = (aot_gpr_6 & 1u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08872650; } @@ -6034,7 +6220,6 @@ L_08872608: goto L_088723DC; L_08872634: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08872648; } @@ -6047,7 +6232,6 @@ L_0887263C: goto L_08872648; L_08872648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887265C; } @@ -6066,7 +6250,6 @@ L_0887265C: L_08872664: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08872680; } @@ -6090,7 +6273,17 @@ L_08872680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872694: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -6151,7 +6344,17 @@ L_08872708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872734: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -6162,7 +6365,6 @@ L_08872734: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088727C8; } @@ -6179,7 +6381,6 @@ L_0887275C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 3u)); aot_gpr_4 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088727B0; } @@ -6195,7 +6396,6 @@ L_08872788: goto L_08871A18; L_088727A0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088727F0; } @@ -6203,7 +6403,6 @@ L_088727A0: } L_088727A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08872834; } @@ -6217,7 +6416,6 @@ L_088727B0: goto L_08872694; L_088727C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08872834; } @@ -6227,7 +6425,6 @@ L_088727C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08872788; } @@ -6241,7 +6438,6 @@ L_088727D8: goto L_08872694; L_088727E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08872834; } @@ -6285,7 +6481,17 @@ L_08872834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872848: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(46))); @@ -6315,7 +6521,6 @@ L_08872880: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(8))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0887293C; } @@ -6356,7 +6561,6 @@ L_088728CC: aot_gpr_6 = (aot_gpr_6 - ctx.gpr[8]); aot_gpr_6 = (ctx.gpr[9] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0887293C; } @@ -6409,7 +6613,17 @@ L_0887293C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872958: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -6433,7 +6647,6 @@ L_08872958: goto L_08871A18; L_088729A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088729FC; } @@ -6485,7 +6698,17 @@ L_088729FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6587,7 +6810,17 @@ L_08872ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872AFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6643,7 +6876,17 @@ L_08872B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872B8C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -6655,11 +6898,20 @@ L_08872B8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872BB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[9] = (2235u << 16u); @@ -6749,7 +7001,17 @@ L_08872C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872C78: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -6788,7 +7050,6 @@ L_08872CDC: } L_08872CE8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08872D00; } @@ -6885,7 +7146,6 @@ L_08872D0C: } L_08872D68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08872D8C; } @@ -6901,12 +7161,10 @@ L_08872D70: } L_08872D78: aot_gpr_31 = (0x08872D80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08872D80u) goto L_08872D80; AOT_REGCACHE_SYNC_OUT(); return; L_08872D80: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08872D8C; } @@ -6918,9 +7176,7 @@ L_08872D88: L_08872D8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08872E30; } @@ -6928,7 +7184,6 @@ L_08872D8C: } L_08872DA0: aot_gpr_31 = (0x08872DA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08872DA8u) goto L_08872DA8; AOT_REGCACHE_SYNC_OUT(); return; L_08872DA8: @@ -6997,7 +7252,6 @@ L_08872E30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08872EB0; } @@ -7005,7 +7259,6 @@ L_08872E30: } L_08872E60: aot_gpr_31 = (0x08872E68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08872E68u) goto L_08872E68; AOT_REGCACHE_SYNC_OUT(); return; L_08872E68: @@ -7037,7 +7290,6 @@ L_08872E68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08872EC8; } @@ -7094,12 +7346,10 @@ L_08872EE8: } L_08872F08: aot_gpr_31 = (0x08872F10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08872F10u) goto L_08872F10; AOT_REGCACHE_SYNC_OUT(); return; L_08872F10: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08872F48; } @@ -7154,7 +7404,17 @@ L_08872F4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08872F84: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_4 = (0u | 0u); @@ -7194,7 +7454,6 @@ L_08873010: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873050; } @@ -7207,7 +7466,6 @@ L_08873020: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08873050; } @@ -7220,7 +7478,6 @@ L_0887303C: AOT_REGCACHE_SYNC_OUT(); return; L_08873044: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08873050; } @@ -7232,7 +7489,6 @@ L_0887304C: L_08873050: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887336C; } @@ -7259,9 +7515,7 @@ L_08873068: L_08873088: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088730A0; } @@ -7273,7 +7527,6 @@ L_0887309C: L_088730A0: aot_gpr_4 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873130; } @@ -7282,7 +7535,6 @@ L_088730A0: L_088730AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873110; } @@ -7296,7 +7548,6 @@ L_088730B8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873110; } @@ -7309,7 +7560,6 @@ L_088730D8: AOT_REGCACHE_SYNC_OUT(); return; L_088730E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08873110; } @@ -7338,7 +7588,6 @@ L_088730F4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08873130; } @@ -7370,7 +7619,6 @@ L_0887311C: L_08873130: aot_gpr_4 = (ctx.gpr[17] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088731A8; } @@ -7452,7 +7700,6 @@ L_088731A8: L_088731CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873324; } @@ -7461,9 +7708,7 @@ L_088731CC: L_088731D8: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088731F0; } @@ -7494,7 +7739,6 @@ L_08873208: AOT_REGCACHE_SYNC_OUT(); return; L_0887321C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887322C; } @@ -7502,7 +7746,6 @@ L_0887321C: } L_08873224: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088732E8; } @@ -7552,7 +7795,6 @@ L_0887322C: AOT_REGCACHE_SYNC_OUT(); return; L_08873250: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088732E8; } @@ -7572,9 +7814,7 @@ L_08873258: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088732E8; } @@ -7585,7 +7825,6 @@ L_08873278: aot_gpr_5 = (2048u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088732E8; } @@ -7598,7 +7837,6 @@ L_0887328C: AOT_REGCACHE_SYNC_OUT(); return; L_08873294: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088732CC; } @@ -7650,7 +7888,6 @@ L_088732E8: L_08873300: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873324; } @@ -7671,7 +7908,6 @@ L_08873324: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887336C; } @@ -7733,7 +7969,17 @@ L_0887338C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088733D0: aot_gpr_5 = (18804u << 16u); aot_gpr_5 = (aot_gpr_5 | 9216u); @@ -7750,7 +7996,17 @@ L_088733D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873400: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), std::bit_cast(aot_fpr_13)); @@ -7761,7 +8017,17 @@ L_08873400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873418: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7800,7 +8066,17 @@ L_08873464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887347C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6004))); @@ -7829,7 +8105,17 @@ L_088734A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088734BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 << 24u); @@ -7876,7 +8162,17 @@ L_0887350C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887352C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7903,7 +8199,6 @@ L_08873550: aot_gpr_5 = (aot_gpr_4 - aot_gpr_5); aot_gpr_5 = (aot_gpr_5 < static_cast(201) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08873574; } @@ -7931,7 +8226,17 @@ L_08873578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873584: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7958,7 +8263,6 @@ L_088735A8: aot_gpr_5 = (aot_gpr_4 - aot_gpr_5); aot_gpr_5 = (aot_gpr_5 < static_cast(201) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088735CC; } @@ -7986,7 +8290,17 @@ L_088735D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088735DC: aot_gpr_5 = (0u | 255u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); @@ -8000,7 +8314,17 @@ L_088735DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873600: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2237u << 16u); @@ -8021,7 +8345,6 @@ L_08873600: } L_08873630: aot_gpr_31 = (0x08873638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873638u) goto L_08873638; AOT_REGCACHE_SYNC_OUT(); return; L_08873638: @@ -8080,7 +8403,6 @@ L_088736A0: AOT_REGCACHE_SYNC_OUT(); return; L_088736A8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088736B8; } @@ -8093,7 +8415,6 @@ L_088736B0: L_088736B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088736CC; } @@ -8101,7 +8422,6 @@ L_088736B8: } L_088736C4: aot_gpr_31 = (0x088736CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088736CCu) goto L_088736CC; AOT_REGCACHE_SYNC_OUT(); return; L_088736CC: @@ -8121,7 +8441,17 @@ L_088736D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088736E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8132,7 +8462,6 @@ L_088736E8: AOT_REGCACHE_SYNC_OUT(); return; L_08873700: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887378C; } @@ -8147,7 +8476,6 @@ L_08873708: goto L_08873714; L_08873714: aot_gpr_31 = (0x0887371Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887371Cu) goto L_0887371C; AOT_REGCACHE_SYNC_OUT(); return; L_0887371C: @@ -8190,7 +8518,6 @@ L_08873758: goto L_0887375C; L_0887375C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887378C; } @@ -8205,7 +8532,6 @@ L_08873764: goto L_08873770; L_08873770: aot_gpr_31 = (0x08873778u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873778u) goto L_08873778; AOT_REGCACHE_SYNC_OUT(); return; L_08873778: @@ -8217,7 +8543,6 @@ L_0887377C: goto L_088739EC; L_08873784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08873938; } @@ -8228,7 +8553,6 @@ L_0887378C: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(140))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887386C; } @@ -8270,7 +8594,6 @@ L_088737E4: goto L_088737E8; L_088737E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088737FC; } @@ -8299,7 +8622,6 @@ L_08873810: goto L_08873D30; L_08873820: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08873864; } @@ -8339,7 +8661,6 @@ L_08873854: AOT_REGCACHE_SYNC_OUT(); return; L_08873864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08873938; } @@ -8348,7 +8669,6 @@ L_08873864: L_0887386C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08873880; } @@ -8356,7 +8676,6 @@ L_0887386C: } L_08873878: aot_gpr_31 = (0x08873880u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873880u) goto L_08873880; AOT_REGCACHE_SYNC_OUT(); return; L_08873880: @@ -8366,7 +8685,6 @@ L_08873880: AOT_REGCACHE_SYNC_OUT(); return; L_08873888: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088738A0; } @@ -8410,7 +8728,6 @@ L_088738CC: AOT_REGCACHE_SYNC_OUT(); return; L_088738D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887392C; } @@ -8455,7 +8772,6 @@ L_08873918: AOT_REGCACHE_SYNC_OUT(); return; L_08873924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08873930; } @@ -8481,7 +8797,17 @@ L_08873938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887394C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16)))))); @@ -8524,7 +8850,17 @@ L_08873994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088739A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8534,7 +8870,6 @@ L_088739A0: goto L_088703C8; L_088739B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088739C4; } @@ -8542,7 +8877,6 @@ L_088739B4: } L_088739BC: aot_gpr_31 = (0x088739C4u); - // nop goto L_088703EC; L_088739C4: aot_gpr_31 = (0x088739CCu); @@ -8561,14 +8895,34 @@ L_088739D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088739E4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088739EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -8629,7 +8983,6 @@ L_08873A5C: L_08873A64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08873A78; } @@ -8637,7 +8990,6 @@ L_08873A64: } L_08873A70: aot_gpr_31 = (0x08873A78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873A78u) goto L_08873A78; AOT_REGCACHE_SYNC_OUT(); return; L_08873A78: @@ -8656,7 +9008,6 @@ L_08873A80: L_08873A88: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(396))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08873AF8; } @@ -8725,7 +9076,6 @@ L_08873AE4: AOT_REGCACHE_SYNC_OUT(); return; L_08873AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08873C08; } @@ -8798,7 +9148,6 @@ L_08873B5C: L_08873B68: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08873B7C; } @@ -8811,7 +9160,6 @@ L_08873B74: AOT_REGCACHE_SYNC_OUT(); return; L_08873B7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08873C08; } @@ -8884,7 +9232,6 @@ L_08873BE8: L_08873BF4: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08873C08; } @@ -8899,7 +9246,6 @@ L_08873C08: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(204), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(424))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873C20; } @@ -8925,7 +9271,17 @@ L_08873C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873C40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9005,7 +9361,17 @@ L_08873D10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873D30: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -9028,7 +9394,6 @@ L_08873D30: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08873E1C; } @@ -9037,7 +9402,6 @@ L_08873D30: L_08873D88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(8)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08873E1C; } @@ -9048,7 +9412,6 @@ L_08873D94: aot_gpr_5 = (2183u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(20648)); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08873E1C; } @@ -9056,7 +9419,6 @@ L_08873D94: } L_08873DA8: aot_gpr_31 = (0x08873DB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873DB0u) goto L_08873DB0; AOT_REGCACHE_SYNC_OUT(); return; L_08873DB0: @@ -9105,7 +9467,17 @@ L_08873E1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9119,7 +9491,6 @@ L_08873E2C: goto L_08873E48; L_08873E48: aot_gpr_31 = (0x08873E50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873E50u) goto L_08873E50; AOT_REGCACHE_SYNC_OUT(); return; L_08873E50: @@ -9160,7 +9531,6 @@ L_08873E84: goto L_08873E88; L_08873E88: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08873EE4; } @@ -9169,7 +9539,6 @@ L_08873E88: L_08873E90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08873EA4; } @@ -9183,7 +9552,6 @@ L_08873E9C: L_08873EA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08873EB8; } @@ -9200,7 +9568,6 @@ L_08873EB8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(244), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08873EDC; } @@ -9208,7 +9575,6 @@ L_08873EB8: } L_08873ED0: aot_gpr_31 = (0x08873ED8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873ED8u) goto L_08873ED8; AOT_REGCACHE_SYNC_OUT(); return; L_08873ED8: @@ -9216,7 +9582,6 @@ L_08873ED8: goto L_08873EDC; L_08873EDC: aot_gpr_31 = (0x08873EE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 764u, 0x08A53F2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873EE4u) goto L_08873EE4; AOT_REGCACHE_SYNC_OUT(); return; L_08873EE4: @@ -9227,7 +9592,17 @@ L_08873EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873EF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9244,7 +9619,6 @@ L_08873F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08873F14: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08873F40; } @@ -9253,7 +9627,6 @@ L_08873F14: L_08873F1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08873F30; } @@ -9261,7 +9634,6 @@ L_08873F1C: } L_08873F28: aot_gpr_31 = (0x08873F30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08873F30u) goto L_08873F30; AOT_REGCACHE_SYNC_OUT(); return; L_08873F30: @@ -9271,7 +9643,6 @@ L_08873F30: AOT_REGCACHE_SYNC_OUT(); return; L_08873F38: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08873F4C; } @@ -9290,14 +9661,33 @@ L_08873F4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873F5C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08873F64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -9346,7 +9736,6 @@ L_08873FB8: goto L_08873FCC; L_08873FCC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0028_entry, 28u, 5u, 0x08874038u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9362,7 +9751,6 @@ L_08873FD4: ctx.gpr[7] = (ctx.gpr[8] + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0028_entry, 28u, 5u, 0x08874038u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0028.cpp b/profiles/vcs/generated/generated_unit_0028.cpp index 9e8f409..c2eee50 100644 --- a/profiles/vcs/generated/generated_unit_0028.cpp +++ b/profiles/vcs/generated/generated_unit_0028.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0028[4094] = { - 1, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 6, 0, 0, 7, 0, 0, 0, 8, 0, 9, 0, 0, 10, 0, 0, 0, - 0, 0, 11, 0, 12, 0, 13, 0, 0, 14, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 20, 0, - 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 0, 28, 0, 29, 0, 30, 0, 31, 0, 0, 32, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, - 39, 40, 0, 41, 0, 0, 42, 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, - 0, 0, 0, 50, 0, 51, 0, 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, - 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, - 0, 0, 0, 65, 0, 66, 0, 0, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, - 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, - 0, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 84, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 0, - 88, 0, 0, 89, 0, 0, 0, 90, 0, 91, 0, 0, 92, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, - 98, 0, 0, 99, 0, 0, 100, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 105, 0, 0, 106, 0, 107, 0, 0, 0, - 108, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 111, 0, 112, 0, 113, 0, 114, 0, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, - 118, 0, 119, 0, 0, 120, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 0, 127, 0, 128, 0, 129, 0, 0, 130, 0, 131, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 133, 134, 0, 135, 136, 0, 0, 137, 0, 138, 0, 0, 0, 139, 140, 0, 0, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 145, 0, 0, 0, 0, 0, 0, 146, 0, 147, 148, 0, - 149, 0, 0, 150, 0, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 159, 0, 0, 0, 160, - 0, 161, 0, 162, 0, 0, 163, 0, 164, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 167, 0, 168, 0, 169, 0, 170, 0, 0, 0, 0, 0, 0, - 171, 0, 172, 173, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 176, 0, 177, 178, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 182, 183, - 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 186, 0, 187, 188, 0, 189, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 192, 193, 0, 194, 0, 195, - 0, 0, 0, 0, 0, 0, 196, 0, 197, 198, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 201, 0, 202, 203, 0, 204, 205, 0, 0, 0, 0, 0, - 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 212, - 0, 213, 214, 0, 215, 0, 0, 216, 0, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 0, 222, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, - 227, 0, 0, 228, 0, 229, 0, 230, 0, 0, 231, 0, 232, 0, 0, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 0, 239, 0, 240, - 241, 0, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 247, 0, 0, 0, - 0, 248, 0, 249, 0, 0, 250, 0, 0, 0, 0, 251, 0, 252, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 256, 0, 0, 257, 0, 258, - 0, 259, 0, 0, 260, 0, 261, 0, 262, 0, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 265, 0, 266, 0, 0, 267, 0, 0, 268, 269, 0, 0, - 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 274, 0, 275, 0, 0, 0, 0, 276, 0, - 277, 278, 0, 279, 0, 0, 280, 0, 281, 282, 0, 283, 0, 0, 284, 0, 285, 286, 0, 287, 0, 0, 288, 0, 0, 289, 0, 0, 290, 0, 291, 292, - 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 296, 0, 297, 0, 298, 0, 0, 299, 0, 0, 300, 0, 301, 0, 302, 0, 303, - 0, 0, 304, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, 0, 312, - 0, 0, 313, 0, 0, 314, 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 319, 0, 0, 320, 0, 0, - 321, 0, 322, 0, 323, 0, 324, 0, 0, 325, 0, 0, 0, 0, 326, 327, 328, 0, 329, 0, 330, 0, 331, 332, 0, 333, 0, 334, 0, 335, 0, 336, - 0, 0, 337, 0, 0, 338, 0, 339, 0, 340, 0, 341, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 349, - 0, 0, 350, 0, 351, 0, 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 356, 0, 0, 357, 0, 358, 0, 359, 0, 360, 0, 0, 361, 0, 0, 0, - 0, 362, 363, 364, 0, 365, 0, 0, 0, 366, 0, 367, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 0, 373, - 0, 0, 0, 374, 0, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 0, 379, 0, 0, 380, 381, 382, 0, 383, 0, 0, 0, 384, 0, 0, 385, 0, - 0, 386, 0, 0, 387, 0, 388, 0, 389, 0, 390, 0, 0, 391, 0, 0, 0, 392, 0, 393, 394, 0, 0, 395, 0, 396, 0, 397, 0, 398, 0, 0, - 0, 399, 0, 0, 0, 400, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 408, 0, 409, 0, - 0, 0, 410, 0, 0, 411, 412, 413, 0, 414, 0, 0, 0, 415, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 418, 0, 419, 0, 0, 420, 0, 0, - 421, 0, 422, 423, 0, 424, 0, 0, 0, 425, 0, 0, 426, 0, 427, 428, 0, 429, 0, 0, 430, 0, 431, 0, 432, 0, 433, 0, 0, 434, 0, 0, - 435, 0, 0, 0, 0, 436, 0, 437, 0, 0, 438, 0, 0, 0, 0, 439, 440, 441, 0, 442, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 445, 446, - 0, 447, 0, 0, 0, 448, 0, 449, 0, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 456, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 458, 0, 459, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, - 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 469, 0, 0, 470, 0, 0, 0, 0, 471, 472, 473, 0, 474, - 0, 0, 0, 475, 0, 0, 0, 476, 0, 477, 0, 478, 0, 479, 0, 0, 0, 480, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 485, 486, - 0, 487, 0, 488, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 495, 496, 0, 497, 0, 498, - 0, 0, 0, 499, 0, 500, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, - 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 510, 0, 511, - 0, 512, 0, 0, 513, 0, 0, 514, 0, 0, 515, 0, 516, 517, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 522, 0, 523, 524, 0, 525, - 0, 526, 0, 0, 527, 0, 0, 528, 0, 0, 529, 0, 530, 531, 0, 532, 0, 533, 0, 0, 0, 534, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, - 538, 0, 539, 0, 540, 0, 541, 0, 0, 0, 542, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 546, 547, 0, 548, 0, 549, 0, 0, 0, 550, 0, - 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 0, 557, 0, 0, 558, 0, 559, 560, 0, 561, 0, 562, 0, 0, 0, 563, 0, - 0, 0, 564, 0, 0, 565, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 569, 570, 0, 571, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, - 0, 575, 0, 0, 576, 0, 0, 577, 0, 0, 578, 0, 579, 580, 0, 581, 0, 582, 0, 0, 0, 583, 0, 584, 0, 585, 0, 0, 586, 0, 0, 587, - 0, 0, 588, 0, 589, 590, 0, 591, 0, 592, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, - 0, 596, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, - 603, 604, 0, 605, 0, 606, 0, 0, 0, 607, 0, 608, 0, 609, 0, 0, 610, 0, 0, 611, 0, 0, 612, 0, 613, 614, 0, 615, 0, 616, 0, 0, - 0, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 622, 0, 0, - 623, 0, 0, 624, 0, 625, 626, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 0, 631, 0, 0, 632, 0, 633, 0, 634, 0, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 0, 0, - 0, 0, 0, 643, 0, 0, 0, 644, 0, 645, 0, 646, 0, 647, 648, 0, 0, 649, 0, 0, 0, 650, 0, 0, 0, 0, 0, 651, 652, 653, 0, 654, - 0, 0, 655, 0, 656, 657, 0, 0, 658, 0, 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 0, 0, 661, 662, 0, 0, 663, 0, 0, 0, 664, 0, - 0, 0, 0, 0, 665, 666, 667, 0, 668, 0, 0, 669, 0, 670, 671, 0, 672, 0, 673, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 678, 0, - 679, 0, 680, 0, 0, 681, 0, 0, 682, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 686, 0, 0, 687, 0, 688, 0, - 689, 0, 0, 690, 0, 691, 692, 0, 0, 693, 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 0, 696, 697, 0, 0, 698, 0, 0, 0, 699, - 0, 0, 0, 0, 0, 700, 701, 702, 0, 703, 0, 0, 704, 0, 0, 0, 0, 705, 0, 706, 707, 0, 0, 0, 708, 0, 709, 0, 0, 0, 710, 0, - 0, 711, 0, 712, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 715, 0, 716, 717, 0, 0, 718, 0, 719, - 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 724, 0, - 725, 0, 0, 726, 0, 727, 0, 728, 0, 0, 729, 0, 0, 730, 0, 0, 731, 0, 0, 732, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 734, 0, - 0, 0, 735, 0, 0, 0, 0, 736, 0, 737, 738, 0, 0, 0, 739, 0, 740, 0, 0, 0, 741, 0, 0, 0, 742, 0, 0, 0, 0, 0, 743, 0, - 744, 0, 745, 0, 746, 0, 747, 0, 748, 0, 749, 0, 750, 0, 751, 0, 752, 753, 0, 0, 754, 0, 755, 0, 0, 0, 0, 0, 0, 756, 757, 0, - 0, 758, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 762, 0, 763, 0, 0, 0, 764, 0, 0, 765, 0, 0, 0, 766, 0, - 767, 0, 768, 0, 0, 0, 769, 0, 0, 770, 0, 0, 771, 0, 772, 773, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 776, 0, - 0, 0, 777, 0, 0, 0, 778, 779, 0, 0, 0, 780, 781, 0, 0, 0, 782, 0, 783, 0, 784, 0, 0, 0, 0, 785, 0, 0, 786, 0, 0, 0, - 787, 0, 0, 0, 0, 788, 0, 789, 0, 0, 0, 790, 0, 0, 791, 0, 0, 0, 792, 0, 0, 793, 0, 0, 0, 794, 795, 0, 0, 0, 796, 797, - 0, 0, 798, 799, 0, 0, 800, 0, 801, 802, 0, 0, 0, 803, 0, 0, 0, 804, 0, 0, 0, 0, 0, 805, 806, 807, 0, 808, 0, 0, 0, 809, - 0, 0, 0, 810, 0, 0, 0, 0, 0, 811, 812, 0, 0, 813, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 816, 817, 0, 818, 0, 819, 0, 0, - 820, 0, 821, 0, 822, 0, 0, 823, 0, 0, 824, 0, 0, 0, 825, 0, 0, 826, 0, 0, 827, 0, 828, 0, 0, 0, 829, 0, 830, 0, 0, 0, - 831, 0, 0, 832, 0, 0, 833, 0, 834, 0, 0, 0, 835, 0, 0, 836, 0, 837, 0, 0, 0, 838, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, - 842, 0, 843, 0, 844, 0, 845, 0, 0, 0, 846, 0, 0, 847, 0, 0, 0, 848, 0, 0, 0, 0, 0, 849, 0, 0, 0, 0, 850, 0, 0, 851, - 0, 852, 0, 853, 0, 854, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, 857, 0, 858, 0, 0, 859, 0, 860, 0, 0, - 0, 861, 0, 862, 0, 0, 0, 863, 0, 0, 864, 0, 865, 0, 0, 866, 0, 867, 0, 0, 0, 868, 0, 869, 0, 0, 0, 870, 0, 0, 871, 0, - 872, 0, 0, 0, 0, 0, 0, 0, 873, 0, 0, 874, 0, 875, 0, 0, 0, 876, 0, 877, 0, 0, 0, 878, 0, 0, 0, 879, 880, 0, 0, 881, - 0, 0, 882, 0, 883, 0, 884, 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 887, 0, 888, 0, 0, 0, 889, 0, 890, 0, 0, - 0, 891, 0, 0, 0, 892, 0, 893, 0, 894, 0, 0, 0, 0, 0, 0, 0, 895, 0, 0, 896, 0, 897, 0, 0, 0, 898, 0, 899, 0, 0, 0, - 900, 0, 0, 0, 901, 902, 0, 0, 903, 0, 0, 904, 0, 905, 0, 906, 0, 0, 0, 907, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 909, 0, - 910, 0, 0, 0, 911, 0, 912, 0, 0, 0, 913, 0, 0, 0, 914, 0, 915, 0, 916, 0, 0, 0, 917, 0, 0, 918, 0, 919, 0, 920, 0, 921, - 0, 922, 0, 923, 0, 0, 0, 924, 0, 0, 925, 0, 0, 926, 0, 0, 927, 0, 928, 0, 929, 0, 0, 930, 0, 0, 0, 0, 0, 931, 0, 0, - 0, 932, 0, 0, 933, 0, 0, 934, 0, 0, 935, 0, 936, 0, 937, 0, 0, 938, 0, 0, 0, 0, 0, 939, 0, 0, 940, 0, 0, 0, 0, 941, - 0, 0, 0, 0, 942, 0, 0, 0, 0, 943, 0, 0, 0, 0, 944, 0, 945, 0, 0, 0, 946, 0, 0, 947, 0, 948, 0, 0, 949, 950, 0, 0, - 0, 951, 0, 952, 0, 0, 0, 953, 0, 954, 0, 0, 0, 955, 0, 0, 956, 0, 0, 0, 957, 0, 0, 958, 0, 0, 959, 0, 0, 960, 0, 961, - 0, 962, 0, 963, 0, 0, 964, 0, 0, 0, 965, 0, 0, 966, 0, 0, 0, 0, 967, 0, 968, 0, 969, 0, 970, 0, 971, 0, 0, 0, 972, 0, - 0, 973, 0, 974, 0, 0, 975, 0, 0, 0, 976, 0, 977, 0, 978, 0, 0, 979, 0, 0, 980, 0, 0, 981, 0, 0, 982, 0, 983, 0, 984, 0, - 0, 0, 985, 0, 986, 0, 987, 0, 0, 988, 0, 0, 989, 0, 0, 0, 990, 0, 991, 0, 0, 0, 992, 0, 0, 993, 0, 994, 0, 0, 0, 0, - 995, 0, 996, 0, 997, 0, 0, 0, 998, 0, 999, 0, 1000, 0, 0, 1001, 0, 1002, 0, 0, 0, 1003, 0, 0, 0, 0, 1004, 0, 0, 0, 1005, 0, - 0, 0, 0, 0, 0, 0, 1006, 0, 0, 0, 0, 1007, 0, 1008, 0, 0, 0, 1009, 0, 0, 1010, 0, 1011, 0, 1012, 0, 1013, 0, 0, 0, 0, 1014, - 0, 0, 0, 1015, 0, 0, 0, 0, 0, 0, 0, 1016, 0, 0, 0, 0, 1017, 0, 1018, 0, 0, 1019, 0, 1020, 0, 0, 0, 1021, 0, 1022, 0, 0, - 0, 1023, 0, 0, 1024, 0, 1025, 0, 0, 0, 1026, 0, 0, 1027, 0, 0, 1028, 0, 0, 0, 1029, 0, 1030, 0, 0, 0, 1031, 0, 0, 1032, 0, 1033, - 0, 0, 0, 1034, 0, 0, 1035, 0, 0, 1036, 0, 0, 0, 1037, 0, 1038, 0, 0, 0, 1039, 0, 0, 1040, 0, 1041, 0, 1042, 0, 0, 0, 1043, 0, - 0, 1044, 0, 1045, 0, 1046, 0, 1047, 0, 0, 1048, 0, 1049, 0, 0, 0, 1050, 0, 1051, 0, 0, 0, 1052, 0, 0, 1053, 0, 1054, 0, 0, 1055, 0, - 1056, 0, 0, 0, 1057, 0, 1058, 0, 0, 0, 1059, 0, 0, 1060, 0, 1061, 0, 0, 0, 1062, 0, 0, 0, 0, 1063, 0, 0, 0, 1064, 0, 0, 0, - 0, 0, 0, 0, 1065, 0, 0, 0, 0, 1066, 0, 1067, 0, 0, 0, 1068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1069, 0, 0, 0, 0, 0, 1070, - 0, 0, 0, 0, 1071, 0, 1072, 0, 0, 0, 1073, 0, 1074, 0, 1075, 0, 0, 1076, 0, 0, 1077, 0, 0, 0, 1078, 0, 0, 1079, 0, 0, 1080, 0, - 0, 1081, 0, 0, 0, 1082, 0, 1083, 0, 0, 0, 1084, 0, 0, 1085, 0, 0, 1086, 0, 1087, 0, 0, 0, 1088, 0, 0, 1089, 0, 0, 1090, 0, 0, - 0, 1091, 0, 1092, 0, 0, 0, 1093, 0, 0, 1094, 0, 1095, 0, 1096, 0, 1097, 0, 1098, 0, 0, 0, 1099, 0, 0, 1100, 0, 0, 0, 1101, 0, 0, - 0, 0, 0, 1102, 0, 0, 0, 0, 1103, 0, 0, 1104, 0, 1105, 0, 1106, 0, 1107, 0, 0, 0, 0, 0, 1108, 0, 0, 0, 0, 0, 0, 1109, 0, - 0, 0, 1110, 0, 1111, 0, 0, 1112, 0, 0, 1113, 0, 0, 0, 1114, 0, 1115, 0, 0, 0, 1116, 0, 0, 1117, 0, 1118, 0, 0, 1119, 0, 0, 1120, - 0, 0, 0, 1121, 0, 1122, 0, 0, 0, 1123, 0, 0, 1124, 0, 1125, 0, 0, 0, 0, 0, 0, 0, 1126, 0, 0, 1127, 0, 0, 1128, 0, 0, 0, - 1129, 0, 1130, 0, 0, 0, 1131, 0, 0, 0, 1132, 1133, 0, 0, 1134, 0, 0, 1135, 0, 1136, 0, 1137, 0, 0, 0, 1138, 0, 0, 0, 0, 0, 0, - 0, 1139, 0, 0, 1140, 0, 0, 1141, 0, 0, 0, 1142, 0, 1143, 0, 0, 0, 1144, 0, 0, 0, 1145, 0, 1146, 0, 1147, 0, 0, 0, 0, 0, 0, - 0, 1148, 0, 0, 1149, 0, 0, 1150, 0, 0, 0, 1151, 0, 1152, 0, 0, 0, 1153, 0, 0, 0, 1154, 1155, 0, 0, 1156, 0, 0, 1157, 0, 1158, 0, - 1159, 0, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 1162, 0, 0, 1163, 0, 0, 0, 1164, 0, 1165, 0, 0, 0, 1166, 0, 0, 0, - 1167, 0, 1168, 0, 1169, 0, 0, 0, 1170, 0, 0, 1171, 0, 1172, 0, 1173, 0, 1174, 0, 1175, 0, 1176, 0, 0, 0, 1177, 0, 0, 1178, 0, 0, 1179, - 0, 0, 1180, 0, 1181, 0, 1182, 0, 0, 1183, 0, 0, 0, 0, 0, 1184, 0, 0, 0, 1185, 0, 0, 1186, 0, 0, 1187, 0, 0, 1188, 0, 1189, 0, - 1190, 0, 0, 1191, 0, 0, 0, 0, 0, 1192, 0, 0, 1193, 0, 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 1196, 0, 0, 0, - 0, 1197, 0, 1198, 0, 0, 0, 1199, 0, 0, 1200, 0, 1201, 0, 0, 1202, 1203, 0, 0, 0, 1204, 0, 0, 1205, 0, 0, 0, 1206, 0, 1207, 0, 0, - 0, 1208, 0, 0, 1209, 0, 0, 0, 1210, 0, 0, 1211, 0, 0, 1212, 0, 0, 1213, 0, 1214, 0, 1215, 0, 1216, 0, 0, 1217, 0, 0, 0, 1218, 0, - 0, 0, 0, 1219, 1220, 0, 1221, 0, 1222, 0, 1223, 0, 1224, 0, 0, 0, 1225, 0, 0, 1226, 0, 1227, 0, 0, 1228, 0, 0, 0, 1229, 0, 1230, 0, - 1231, 0, 0, 1232, 0, 0, 1233, 0, 0, 1234, 0, 0, 1235, 0, 1236, 0, 1237, 0, 0, 0, 1238, 0, 1239, 0, 1240, 0, 0, 1241, 0, 0, 1242, 0, - 0, 0, 1243, 0, 1244, 0, 0, 0, 1245, 0, 0, 1246, 0, 1247, 0, 0, 0, 0, 1248, 0, 1249, 0, 1250, 0, 0, 0, 0, 0, 1251, 1252, 0, 1253, - 0, 0, 0, 1254, 0, 0, 0, 1255, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 1258, 0, 0, 0, 0, 1259, 0, 1260, - 0, 0, 0, 1261, 0, 0, 1262, 0, 0, 1263, 0, 0, 0, 1264, 0, 1265, 0, 0, 0, 1266, 0, 0, 1267, 0, 1268, 0, 0, 0, 1269, 0, 0, 1270, - 0, 0, 1271, 0, 0, 0, 1272, 0, 1273, 0, 0, 0, 1274, 0, 0, 1275, 0, 1276, 0, 0, 0, 1277, 0, 0, 1278, 0, 1279, 0, 1280, 0, 1281, 0, - 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 1283, 0, 0, 0, 1284, 0, 0, 0, 0, 1285, 0, 1286, 0, 0, 1287, 0, 0, 1288, 0, 0, 0, - 1289, 0, 1290, 0, 0, 0, 1291, 0, 0, 1292, 0, 1293, 0, 1294, 0, 0, 0, 1295, 0, 0, 1296, 0, 1297, 0, 1298, 0, 1299, 0, 0, 1300, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0028[64] = { + 0x50412A541289500Dull, 0x20160204954AA805ull, 0x081020A8A020AA4Bull, 0x082004081020A004ull, + 0x0828010204082A28ull, 0x204A900208010204ull, 0x14A4114905285289ull, 0x14A955650452A941ull, + 0x681411008314D804ull, 0x02A8154A8A815549ull, 0xAD02B40AD02B40ADull, 0x9044840106D02B40ull, + 0xA55514A952A55496ull, 0xA488A84A1140200Dull, 0x4294400832510952ull, 0xAA4A900AD24B4B4Bull, + 0x251004A484408B84ull, 0x8B914AA4AAD5C255ull, 0x92488A2E12A92A54ull, 0x2A9A255248B91548ull, + 0x251122E455224922ull, 0xD10B84A12552D22Dull, 0x1400428A00B554A2ull, 0xD24A2A88B84AA004ull, + 0x40810528AD24908Aull, 0xB4A2B492AA010020ull, 0x4569245548A2B492ull, 0x422B492445692552ull, + 0x040822B492A2B492ull, 0x2B492A2B49280102ull, 0x0940016922840202ull, 0xB8226A8815554A90ull, + 0x4AA5697044C11134ull, 0x8982226952204925ull, 0xA690010A451A12E0ull, 0x440924A954800010ull, + 0x6053555541114684ull, 0x4404D245448A9022ull, 0xC62448A1121518C4ull, 0x2B8226088B82234Cull, + 0x48A2914914524495ull, 0x2944082A90822455ull, 0x988A290148A2948Aull, 0x145202A228A40454ull, + 0xAA4544514808A931ull, 0x848254922095248Aull, 0xA491228A32914210ull, 0x5492544A4554244Aull, + 0x442295150A451254ull, 0x28A5080885522840ull, 0x4548A248A4512452ull, 0x1108A4514A4514AAull, + 0x4912545082008A10ull, 0x2245548A248A48A2ull, 0x929144944082A908ull, 0x022A4C4512405228ull, + 0x5262289202A22892ull, 0x922AA91511449011ull, 0x1102120952488254ull, 0x44AA49122891948Aull, + 0x4951524951291558ull, 0xA1100888B0542914ull, 0x552291449148A248ull, 0x25522A4512508804ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0028[64] = { + 1u, 21u, 39u, 56u, 65u, 77u, 88u, 108u, 132u, 149u, 171u, 196u, 213u, 241u, 259u, 277u, + 304u, 321u, 350u, 374u, 399u, 421u, 447u, 465u, 487u, 506u, 526u, 551u, 575u, 596u, 617u, 631u, + 655u, 679u, 700u, 720u, 735u, 758u, 777u, 798u, 820u, 842u, 861u, 882u, 900u, 922u, 942u, 962u, + 985u, 1006u, 1023u, 1044u, 1065u, 1081u, 1102u, 1121u, 1139u, 1159u, 1180u, 1197u, 1219u, 1243u, 1261u, 1282u, }; void recomp_unit_0028_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0028_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08874000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0028[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0028[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0028[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08874000; @@ -1496,7 +1403,6 @@ L_0887400C: AOT_REGCACHE_SYNC_OUT(); return; L_08874030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874064; } @@ -1504,7 +1410,6 @@ L_08874030: } L_08874038: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08874064; } @@ -1513,7 +1418,6 @@ L_08874038: L_08874040: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-27112))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08874064; } @@ -1533,7 +1437,6 @@ L_0887405C: L_08874064: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_088740AC; } @@ -1545,7 +1448,6 @@ L_08874070: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088740AC; } @@ -1564,7 +1466,6 @@ L_08874090: L_08874098: aot_gpr_4 = (static_cast(aot_gpr_2) < -125 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088740B4; } @@ -1572,7 +1473,6 @@ L_08874098: } L_088740A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874160; } @@ -1580,7 +1480,6 @@ L_088740A4: } L_088740AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887423C; } @@ -1589,7 +1488,6 @@ L_088740AC: L_088740B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-27108))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08874218; } @@ -1630,7 +1528,6 @@ L_088740F8: goto L_08874100; L_08874100: aot_gpr_31 = (0x08874108u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874108u) goto L_08874108; AOT_REGCACHE_SYNC_OUT(); return; L_08874108: @@ -1642,7 +1539,6 @@ L_08874108: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_2) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887414C; } @@ -1650,7 +1546,6 @@ L_08874108: } L_0887412C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887413C; } @@ -1670,7 +1565,6 @@ L_0887413C: goto L_08874144; L_08874144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874100; } @@ -1684,7 +1578,6 @@ L_0887414C: AOT_REGCACHE_SYNC_OUT(); return; L_08874158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874218; } @@ -1703,7 +1596,6 @@ L_08874168: L_08874170: aot_gpr_4 = (static_cast(aot_gpr_2) < 126 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874218; } @@ -1712,7 +1604,6 @@ L_08874170: L_0887417C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-27104))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08874218; } @@ -1747,7 +1638,6 @@ L_088741C4: goto L_088741C8; L_088741C8: aot_gpr_31 = (0x088741D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088741D0u) goto L_088741D0; AOT_REGCACHE_SYNC_OUT(); return; L_088741D0: @@ -1759,7 +1649,6 @@ L_088741D0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_2) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887420C; } @@ -1779,7 +1668,6 @@ L_08874200: goto L_08874204; L_08874204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088741C8; } @@ -1806,7 +1694,6 @@ L_08874224: goto L_0887422C; L_0887422C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0887423C; } @@ -1829,7 +1716,17 @@ L_0887423C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874254: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(40), ctx.gpr[16]); @@ -1842,7 +1739,6 @@ L_08874254: AOT_REGCACHE_SYNC_OUT(); return; L_08874274: aot_gpr_31 = (0x0887427Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887427Cu) goto L_0887427C; AOT_REGCACHE_SYNC_OUT(); return; L_0887427C: @@ -1859,7 +1755,6 @@ L_0887428C: AOT_REGCACHE_SYNC_OUT(); return; L_08874294: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_0887433C; } @@ -1920,7 +1815,6 @@ L_08874308: AOT_REGCACHE_SYNC_OUT(); return; L_08874334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088743D4; } @@ -1992,7 +1886,17 @@ L_088743D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088743EC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(40), ctx.gpr[16]); @@ -2005,7 +1909,6 @@ L_088743EC: AOT_REGCACHE_SYNC_OUT(); return; L_0887440C: aot_gpr_31 = (0x08874414u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874414u) goto L_08874414; AOT_REGCACHE_SYNC_OUT(); return; L_08874414: @@ -2022,7 +1925,6 @@ L_08874424: AOT_REGCACHE_SYNC_OUT(); return; L_0887442C: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_088744D4; } @@ -2083,7 +1985,6 @@ L_088744A0: AOT_REGCACHE_SYNC_OUT(); return; L_088744CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887456C; } @@ -2155,7 +2056,17 @@ L_0887456C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874584: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_17); @@ -2181,7 +2092,6 @@ L_088745B0: AOT_REGCACHE_SYNC_OUT(); return; L_088745BC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088745CC; } @@ -2222,7 +2132,6 @@ L_0887460C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08874638; } @@ -2254,7 +2163,6 @@ L_08874638: aot_gpr_6 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08874668; } @@ -2311,7 +2219,6 @@ L_088746A0: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2323,11 +2230,20 @@ L_088746B0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24184))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088746C8: aot_gpr_4 = (aot_gpr_17 | 0u); aot_gpr_31 = (0x088746D4u); @@ -2336,7 +2252,6 @@ L_088746C8: AOT_REGCACHE_SYNC_OUT(); return; L_088746D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2350,7 +2265,6 @@ L_088746DC: AOT_REGCACHE_SYNC_OUT(); return; L_088746E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2377,7 +2291,6 @@ L_08874700: AOT_REGCACHE_SYNC_OUT(); return; L_08874718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2391,7 +2304,6 @@ L_08874720: AOT_REGCACHE_SYNC_OUT(); return; L_0887472C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2399,7 +2311,6 @@ L_0887472C: } L_08874734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2407,7 +2318,6 @@ L_08874734: } L_0887473C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2421,7 +2331,6 @@ L_08874744: AOT_REGCACHE_SYNC_OUT(); return; L_08874750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2448,7 +2357,6 @@ L_08874768: AOT_REGCACHE_SYNC_OUT(); return; L_08874780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874788; } @@ -2469,7 +2377,6 @@ L_08874798: goto L_0887487C; L_088747A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088747B8; } @@ -2481,7 +2388,6 @@ L_088747A8: goto L_08874B80; L_088747B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088747F0; } @@ -2505,7 +2411,6 @@ L_088747CC: AOT_REGCACHE_SYNC_OUT(); return; L_088747D4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088747E8; } @@ -2519,7 +2424,6 @@ L_088747DC: AOT_REGCACHE_SYNC_OUT(); return; L_088747E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874798; } @@ -2538,7 +2442,17 @@ L_088747F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874808: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_17); @@ -2559,7 +2473,6 @@ L_0887482C: goto L_08874830; L_08874830: { const bool branch_taken = static_cast(aot_gpr_17) >= 0; - // nop if (branch_taken) { goto L_0887483C; } @@ -2571,7 +2484,6 @@ L_08874838: L_0887483C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_08874864; } @@ -2586,7 +2498,6 @@ L_08874850: aot_gpr_4 = (ctx.gpr[28] + aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(-27280))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874864; } @@ -2608,7 +2519,17 @@ L_08874864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887487C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -2624,7 +2545,6 @@ L_088748A0: aot_gpr_4 = (aot_gpr_2 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08874B64; } @@ -2636,11 +2556,20 @@ L_088748B0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24144))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088748C8: aot_gpr_31 = (0x088748D0u); aot_gpr_4 = (ctx.gpr[16] | 0u); @@ -2653,7 +2582,6 @@ L_088748D0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088748F4; } @@ -2672,7 +2600,6 @@ L_088748F4: goto L_088748F8; L_088748F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -2712,7 +2639,6 @@ L_08874928: goto L_08874930; L_08874930: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887496C; } @@ -2730,7 +2656,6 @@ L_08874940: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874964; } @@ -2787,7 +2712,6 @@ L_08874998: goto L_088749A0; L_088749A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088749DC; } @@ -2805,7 +2729,6 @@ L_088749B0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088749D4; } @@ -2839,7 +2762,6 @@ L_088749E4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874A08; } @@ -2858,7 +2780,6 @@ L_08874A08: goto L_08874A0C; L_08874A0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -2876,7 +2797,6 @@ L_08874A1C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874A40; } @@ -2895,7 +2815,6 @@ L_08874A40: goto L_08874A44; L_08874A44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -2913,7 +2832,6 @@ L_08874A54: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874A78; } @@ -2932,7 +2850,6 @@ L_08874A78: goto L_08874A7C; L_08874A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -2950,7 +2867,6 @@ L_08874A8C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874AB0; } @@ -2969,7 +2885,6 @@ L_08874AB0: goto L_08874AB4; L_08874AB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -2987,7 +2902,6 @@ L_08874AC4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874AE8; } @@ -3006,7 +2920,6 @@ L_08874AE8: goto L_08874AEC; L_08874AEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -3024,7 +2937,6 @@ L_08874AFC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874B20; } @@ -3043,7 +2955,6 @@ L_08874B20: goto L_08874B24; L_08874B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -3061,7 +2972,6 @@ L_08874B34: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08874B58; } @@ -3080,7 +2990,6 @@ L_08874B58: goto L_08874B5C; L_08874B5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874B68; } @@ -3102,7 +3011,17 @@ L_08874B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874B80: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3129,7 +3048,6 @@ L_08874BC8: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08874D08; } @@ -3141,11 +3059,20 @@ L_08874BD8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24104))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874BF0: aot_gpr_4 = (static_cast(ctx.gpr[16]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; @@ -3157,7 +3084,6 @@ L_08874BF0: } L_08874BFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874C08; } @@ -3168,7 +3094,6 @@ L_08874C04: goto L_08874C08; L_08874C08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874D0C; } @@ -3208,7 +3133,6 @@ L_08874C38: goto L_08874C40; L_08874C40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874C64; } @@ -3225,7 +3149,6 @@ L_08874C48: } L_08874C54: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874D00; } @@ -3273,7 +3196,6 @@ L_08874C8C: goto L_08874C94; L_08874C94: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874CB0; } @@ -3282,7 +3204,6 @@ L_08874C94: L_08874C9C: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874D00; } @@ -3330,7 +3251,6 @@ L_08874CD8: goto L_08874CE0; L_08874CE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874D00; } @@ -3347,7 +3267,6 @@ L_08874CE8: } L_08874CF4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08874D00; } @@ -3358,7 +3277,6 @@ L_08874CFC: goto L_08874D00; L_08874D00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874D0C; } @@ -3384,7 +3302,17 @@ L_08874D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874D34: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-672)); aot_gpr_4 = (0u | 1u); @@ -3397,7 +3325,6 @@ L_08874D34: AOT_REGCACHE_SYNC_OUT(); return; L_08874D58: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_08874D8C; } @@ -3423,7 +3350,6 @@ L_08874D70: } L_08874D84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08874DAC; } @@ -3451,7 +3377,6 @@ L_08874D98: } L_08874DAC: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08874DBC; } @@ -3482,7 +3407,6 @@ L_08874DCC: L_08874DDC: ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08874E10; } @@ -3491,7 +3415,6 @@ L_08874DDC: L_08874DE8: ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(128))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08874E04; } @@ -3499,7 +3422,6 @@ L_08874DE8: } L_08874DF4: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08874E04; } @@ -3524,7 +3446,6 @@ L_08874E04: } L_08874E10: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08874E20; } @@ -3561,7 +3482,6 @@ L_08874E40: AOT_REGCACHE_SYNC_OUT(); return; L_08874E50: aot_gpr_31 = (0x08874E58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 96u, 0x08B0C748u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874E58u) goto L_08874E58; AOT_REGCACHE_SYNC_OUT(); return; L_08874E58: @@ -3592,7 +3512,17 @@ L_08874E74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08874E8C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(396), static_cast(0u)); @@ -3630,7 +3560,6 @@ L_08874ED0: AOT_REGCACHE_SYNC_OUT(); return; L_08874EDC: aot_gpr_31 = (0x08874EE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 595u, 0x088633B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874EE4u) goto L_08874EE4; AOT_REGCACHE_SYNC_OUT(); return; L_08874EE4: @@ -3638,7 +3567,6 @@ L_08874EE4: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(424), static_cast(aot_gpr_4)); aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08874F04; } @@ -3646,7 +3574,6 @@ L_08874EE4: } L_08874EF8: aot_gpr_31 = (0x08874F00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874F00u) goto L_08874F00; AOT_REGCACHE_SYNC_OUT(); return; L_08874F00: @@ -3666,7 +3593,6 @@ L_08874F0C: goto L_08874F18; L_08874F18: aot_gpr_31 = (0x08874F20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874F20u) goto L_08874F20; AOT_REGCACHE_SYNC_OUT(); return; L_08874F20: @@ -3680,7 +3606,6 @@ L_08874F24: L_08874F2C: aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08874F44; } @@ -3688,7 +3613,6 @@ L_08874F2C: } L_08874F38: aot_gpr_31 = (0x08874F40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874F40u) goto L_08874F40; AOT_REGCACHE_SYNC_OUT(); return; L_08874F40: @@ -3715,7 +3639,6 @@ L_08874F58: L_08874F64: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08874F7C; } @@ -3761,7 +3684,6 @@ L_08874FB0: } L_08874FBC: aot_gpr_31 = (0x08874FC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874FC4u) goto L_08874FC4; AOT_REGCACHE_SYNC_OUT(); return; L_08874FC4: @@ -3783,7 +3705,6 @@ L_08874FD8: goto L_08874FE4; L_08874FE4: aot_gpr_31 = (0x08874FECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08874FECu) goto L_08874FEC; AOT_REGCACHE_SYNC_OUT(); return; L_08874FEC: @@ -3824,7 +3745,6 @@ L_08875020: goto L_08875024; L_08875024: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887503C; } @@ -3850,12 +3770,21 @@ L_0887503C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08875058: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887509C; } @@ -3880,7 +3809,6 @@ L_0887507C: L_08875088: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887509C; } @@ -3888,7 +3816,6 @@ L_08875088: } L_08875094: aot_gpr_31 = (0x0887509Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887509Cu) goto L_0887509C; AOT_REGCACHE_SYNC_OUT(); return; L_0887509C: @@ -3898,7 +3825,17 @@ L_0887509C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088750A8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(16), aot_gpr_17); @@ -3942,7 +3879,6 @@ L_088750F4: goto L_08875100; L_08875100: aot_gpr_31 = (0x08875108u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875108u) goto L_08875108; AOT_REGCACHE_SYNC_OUT(); return; L_08875108: @@ -3983,7 +3919,6 @@ L_0887513C: goto L_08875140; L_08875140: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088753F4; } @@ -3991,7 +3926,6 @@ L_08875140: } L_08875148: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887515C; } @@ -3999,7 +3933,6 @@ L_08875148: } L_08875150: aot_gpr_31 = (0x08875158u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875158u) goto L_08875158; AOT_REGCACHE_SYNC_OUT(); return; L_08875158: @@ -4012,7 +3945,6 @@ L_0887515C: AOT_REGCACHE_SYNC_OUT(); return; L_08875164: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4020,12 +3952,10 @@ L_08875164: } L_0887516C: aot_gpr_31 = (0x08875174u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 734u, 0x08B3AAF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875174u) goto L_08875174; AOT_REGCACHE_SYNC_OUT(); return; L_08875174: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4058,7 +3988,6 @@ L_0887519C: AOT_REGCACHE_SYNC_OUT(); return; L_088751A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088752AC; } @@ -4067,7 +3996,6 @@ L_088751A4: L_088751AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(416))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08875210; } @@ -4105,7 +4033,6 @@ L_088751E0: goto L_088751E4; L_088751E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4125,7 +4052,6 @@ L_088751FC: goto L_08874E8C; L_08875208: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4133,7 +4059,6 @@ L_08875208: } L_08875210: aot_gpr_31 = (0x08875218u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 595u, 0x088633B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875218u) goto L_08875218; AOT_REGCACHE_SYNC_OUT(); return; L_08875218: @@ -4147,7 +4072,6 @@ L_08875218: } L_08875224: aot_gpr_31 = (0x0887522Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887522Cu) goto L_0887522C; AOT_REGCACHE_SYNC_OUT(); return; L_0887522C: @@ -4169,7 +4093,6 @@ L_08875240: goto L_0887524C; L_0887524C: aot_gpr_31 = (0x08875254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875254u) goto L_08875254; AOT_REGCACHE_SYNC_OUT(); return; L_08875254: @@ -4210,7 +4133,6 @@ L_08875288: goto L_0887528C; L_0887528C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088752A4; } @@ -4234,7 +4156,6 @@ L_088752AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088752F0; } @@ -4250,7 +4171,6 @@ L_088752BC: L_088752CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088752E4; } @@ -4277,7 +4197,6 @@ L_088752E4: L_088752F0: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08875328; } @@ -4293,7 +4212,6 @@ L_088752FC: L_0887530C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08875320; } @@ -4343,7 +4261,6 @@ L_08875350: goto L_08875354; L_08875354: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4359,7 +4276,6 @@ L_0887535C: L_0887536C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(416))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4368,7 +4284,6 @@ L_0887536C: L_08875378: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875398; } @@ -4382,7 +4297,6 @@ L_08875384: AOT_REGCACHE_SYNC_OUT(); return; L_08875390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4394,7 +4308,6 @@ L_08875398: goto L_08874D34; L_088753A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088753E4; } @@ -4444,7 +4357,6 @@ L_088753E4: goto L_08874E8C; L_088753EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4454,7 +4366,6 @@ L_088753F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08875438; } @@ -4470,7 +4381,6 @@ L_08875404: L_08875414: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0887542C; } @@ -4497,7 +4407,6 @@ L_0887542C: L_08875438: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08875470; } @@ -4513,7 +4422,6 @@ L_08875444: L_08875454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08875468; } @@ -4563,7 +4471,6 @@ L_08875498: goto L_0887549C; L_0887549C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08875524; } @@ -4579,7 +4486,6 @@ L_088754A4: L_088754B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088754E8; } @@ -4600,7 +4506,6 @@ L_088754D0: AOT_REGCACHE_SYNC_OUT(); return; L_088754E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08875524; } @@ -4609,7 +4514,6 @@ L_088754E0: L_088754E8: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08875524; } @@ -4618,7 +4522,6 @@ L_088754E8: L_088754F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887550C; } @@ -4626,7 +4529,6 @@ L_088754F4: } L_08875500: aot_gpr_31 = (0x08875508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875508u) goto L_08875508; AOT_REGCACHE_SYNC_OUT(); return; L_08875508: @@ -4634,7 +4536,6 @@ L_08875508: goto L_0887550C; L_0887550C: aot_gpr_31 = (0x08875514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 4u, 0x08A54034u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875514u) goto L_08875514; AOT_REGCACHE_SYNC_OUT(); return; L_08875514: @@ -4646,7 +4547,6 @@ L_08875514: L_08875524: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0887553C; } @@ -4654,7 +4554,6 @@ L_08875524: } L_08875530: aot_gpr_31 = (0x08875538u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875538u) goto L_08875538; AOT_REGCACHE_SYNC_OUT(); return; L_08875538: @@ -4674,7 +4573,6 @@ L_08875544: goto L_08875550; L_08875550: aot_gpr_31 = (0x08875558u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875558u) goto L_08875558; AOT_REGCACHE_SYNC_OUT(); return; L_08875558: @@ -4692,7 +4590,6 @@ L_08875560: L_08875568: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875594; } @@ -4701,7 +4598,6 @@ L_08875568: L_08875574: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(16)))))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08875594; } @@ -4752,7 +4648,6 @@ L_088755C0: goto L_088755C4; L_088755C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4770,7 +4665,6 @@ L_088755E0: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(224), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088755FC; } @@ -4778,7 +4672,6 @@ L_088755E0: } L_088755F0: aot_gpr_31 = (0x088755F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088755F8u) goto L_088755F8; AOT_REGCACHE_SYNC_OUT(); return; L_088755F8: @@ -4786,7 +4679,6 @@ L_088755F8: goto L_088755FC; L_088755FC: aot_gpr_31 = (0x08875604u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 283u, 0x08A551F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875604u) goto L_08875604; AOT_REGCACHE_SYNC_OUT(); return; L_08875604: @@ -4810,7 +4702,6 @@ L_0887561C: goto L_08875628; L_08875628: aot_gpr_31 = (0x08875630u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875630u) goto L_08875630; AOT_REGCACHE_SYNC_OUT(); return; L_08875630: @@ -4819,7 +4710,6 @@ L_08875630: goto L_08875638; L_08875638: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088756E8; } @@ -4827,7 +4717,6 @@ L_08875638: } L_08875640: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875654; } @@ -4835,7 +4724,6 @@ L_08875640: } L_08875648: aot_gpr_31 = (0x08875650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875650u) goto L_08875650; AOT_REGCACHE_SYNC_OUT(); return; L_08875650: @@ -4843,7 +4731,6 @@ L_08875650: goto L_08875654; L_08875654: aot_gpr_31 = (0x0887565Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 247u, 0x08A54F5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887565Cu) goto L_0887565C; AOT_REGCACHE_SYNC_OUT(); return; L_0887565C: @@ -4876,7 +4763,6 @@ L_0887568C: AOT_REGCACHE_SYNC_OUT(); return; L_0887569C: aot_gpr_31 = (0x088756A4u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_088756A4: @@ -4919,7 +4805,17 @@ L_088756F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08875708: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(56), ctx.gpr[16]); @@ -4934,7 +4830,6 @@ L_08875708: goto L_08875734; L_08875734: aot_gpr_31 = (0x0887573Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887573Cu) goto L_0887573C; AOT_REGCACHE_SYNC_OUT(); return; L_0887573C: @@ -4975,7 +4870,6 @@ L_08875770: goto L_08875774; L_08875774: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08875894; } @@ -5010,7 +4904,6 @@ L_088757A4: AOT_REGCACHE_SYNC_OUT(); return; L_088757AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08875894; } @@ -5045,7 +4938,6 @@ L_088757D8: L_088757E4: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088757FC; } @@ -5106,7 +4998,6 @@ L_08875848: L_08875854: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887586C; } @@ -5138,7 +5029,6 @@ L_0887587C: AOT_REGCACHE_SYNC_OUT(); return; L_0887588C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5152,7 +5042,6 @@ L_08875894: AOT_REGCACHE_SYNC_OUT(); return; L_088758A0: aot_gpr_31 = (0x088758A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088758A8u) goto L_088758A8; AOT_REGCACHE_SYNC_OUT(); return; L_088758A8: @@ -5232,12 +5121,10 @@ L_0887596C: AOT_REGCACHE_SYNC_OUT(); return; L_08875974: aot_gpr_31 = (0x0887597Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 734u, 0x08B3AAF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887597Cu) goto L_0887597C; AOT_REGCACHE_SYNC_OUT(); return; L_0887597C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088759DC; } @@ -5261,7 +5148,6 @@ L_08875990: L_0887599C: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_088759B4; } @@ -5293,7 +5179,6 @@ L_088759C4: AOT_REGCACHE_SYNC_OUT(); return; L_088759D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5302,7 +5187,6 @@ L_088759D4: L_088759DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088759F4; } @@ -5310,7 +5194,6 @@ L_088759DC: } L_088759E8: aot_gpr_31 = (0x088759F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088759F0u) goto L_088759F0; AOT_REGCACHE_SYNC_OUT(); return; L_088759F0: @@ -5318,12 +5201,10 @@ L_088759F0: goto L_088759F4; L_088759F4: aot_gpr_31 = (0x088759FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 237u, 0x08A54ED4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088759FCu) goto L_088759FC; AOT_REGCACHE_SYNC_OUT(); return; L_088759FC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08875A5C; } @@ -5347,7 +5228,6 @@ L_08875A10: L_08875A1C: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08875A34; } @@ -5379,7 +5259,6 @@ L_08875A44: AOT_REGCACHE_SYNC_OUT(); return; L_08875A54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5421,7 +5300,6 @@ L_08875A88: } L_08875A90: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5452,7 +5330,6 @@ L_08875AB4: L_08875AC0: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08875AD8; } @@ -5485,7 +5362,6 @@ L_08875AE8: L_08875AF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875B18; } @@ -5509,7 +5385,6 @@ L_08875B18: AOT_REGCACHE_SYNC_OUT(); return; L_08875B20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5518,7 +5393,6 @@ L_08875B20: L_08875B28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875B60; } @@ -5533,7 +5407,6 @@ L_08875B34: L_08875B40: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08875B58; } @@ -5578,7 +5451,6 @@ L_08875B88: L_08875B94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875BCC; } @@ -5593,7 +5465,6 @@ L_08875BA0: L_08875BAC: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08875BC4; } @@ -5639,7 +5510,6 @@ L_08875BF8: L_08875C04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875C3C; } @@ -5654,7 +5524,6 @@ L_08875C10: L_08875C1C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08875C34; } @@ -5686,7 +5555,6 @@ L_08875C44: AOT_REGCACHE_SYNC_OUT(); return; L_08875C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5694,7 +5562,6 @@ L_08875C54: } L_08875C5C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08875DAC; } @@ -5718,7 +5585,6 @@ L_08875C70: L_08875C7C: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08875C94; } @@ -5824,7 +5690,6 @@ L_08875D60: L_08875D6C: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08875D84; } @@ -5856,7 +5721,6 @@ L_08875D94: AOT_REGCACHE_SYNC_OUT(); return; L_08875DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08875E04; } @@ -5885,7 +5749,6 @@ L_08875DC0: L_08875DCC: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08875DE4; } @@ -5930,7 +5793,17 @@ L_08875E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08875E24: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-176)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -5977,7 +5850,6 @@ L_08875E80: goto L_08875E8C; L_08875E8C: aot_gpr_31 = (0x08875E94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875E94u) goto L_08875E94; AOT_REGCACHE_SYNC_OUT(); return; L_08875E94: @@ -6007,7 +5879,6 @@ L_08875EA0: AOT_REGCACHE_SYNC_OUT(); return; L_08875ED8: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08875F10; } @@ -6040,7 +5911,6 @@ L_08875EEC: L_08875F10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875F24; } @@ -6048,7 +5918,6 @@ L_08875F10: } L_08875F1C: aot_gpr_31 = (0x08875F24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875F24u) goto L_08875F24; AOT_REGCACHE_SYNC_OUT(); return; L_08875F24: @@ -6059,7 +5928,6 @@ L_08875F24: L_08875F2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08875F40; } @@ -6067,7 +5935,6 @@ L_08875F2C: } L_08875F38: aot_gpr_31 = (0x08875F40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875F40u) goto L_08875F40; AOT_REGCACHE_SYNC_OUT(); return; L_08875F40: @@ -6077,7 +5944,6 @@ L_08875F40: AOT_REGCACHE_SYNC_OUT(); return; L_08875F48: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08875F70; } @@ -6095,7 +5961,6 @@ L_08875F58: AOT_REGCACHE_SYNC_OUT(); return; L_08875F60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088760C8; } @@ -6142,7 +6007,6 @@ L_08875FA4: goto L_08875FAC; L_08875FAC: aot_gpr_31 = (0x08875FB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08875FB4u) goto L_08875FB4; AOT_REGCACHE_SYNC_OUT(); return; L_08875FB4: @@ -6185,7 +6049,6 @@ L_08875FF0: goto L_08875FF4; L_08875FF4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088760C8; } @@ -6200,7 +6063,6 @@ L_08875FFC: goto L_08876008; L_08876008: aot_gpr_31 = (0x08876010u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876010u) goto L_08876010; AOT_REGCACHE_SYNC_OUT(); return; L_08876010: @@ -6279,7 +6141,6 @@ L_08876094: goto L_08876098; L_08876098: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088760C8; } @@ -6294,7 +6155,6 @@ L_088760A0: goto L_088760AC; L_088760AC: aot_gpr_31 = (0x088760B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088760B4u) goto L_088760B4; AOT_REGCACHE_SYNC_OUT(); return; L_088760B4: @@ -6307,7 +6167,6 @@ L_088760B8: AOT_REGCACHE_SYNC_OUT(); return; L_088760C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08876268; } @@ -6316,7 +6175,6 @@ L_088760C0: L_088760C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088760DC; } @@ -6324,7 +6182,6 @@ L_088760C8: } L_088760D4: aot_gpr_31 = (0x088760DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088760DCu) goto L_088760DC; AOT_REGCACHE_SYNC_OUT(); return; L_088760DC: @@ -6334,7 +6191,6 @@ L_088760DC: AOT_REGCACHE_SYNC_OUT(); return; L_088760E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08876138; } @@ -6343,7 +6199,6 @@ L_088760E4: L_088760EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876100; } @@ -6351,7 +6206,6 @@ L_088760EC: } L_088760F8: aot_gpr_31 = (0x08876100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876100u) goto L_08876100; AOT_REGCACHE_SYNC_OUT(); return; L_08876100: @@ -6362,7 +6216,6 @@ L_08876100: L_08876108: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08876120; } @@ -6377,7 +6230,6 @@ L_08876114: L_08876120: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08876138; } @@ -6419,7 +6271,6 @@ L_08876170: AOT_REGCACHE_SYNC_OUT(); return; L_08876178: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08876260; } @@ -6434,7 +6285,6 @@ L_08876180: goto L_0887618C; L_0887618C: aot_gpr_31 = (0x08876194u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876194u) goto L_08876194; AOT_REGCACHE_SYNC_OUT(); return; L_08876194: @@ -6513,7 +6363,6 @@ L_08876218: goto L_0887621C; L_0887621C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876260; } @@ -6553,7 +6402,6 @@ L_08876250: AOT_REGCACHE_SYNC_OUT(); return; L_08876260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 92u, 0x088784A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6569,7 +6417,6 @@ L_08876268: L_08876278: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088762D0; } @@ -6577,7 +6424,6 @@ L_08876278: } L_08876284: aot_gpr_31 = (0x0887628Cu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_0887628C: @@ -6611,7 +6457,6 @@ L_088762D0: goto L_088762DC; L_088762DC: aot_gpr_31 = (0x088762E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088762E4u) goto L_088762E4; AOT_REGCACHE_SYNC_OUT(); return; L_088762E4: @@ -6620,7 +6465,6 @@ L_088762E4: L_088762E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876440; } @@ -6628,7 +6472,6 @@ L_088762E8: } L_088762F4: aot_gpr_31 = (0x088762FCu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_088762FC: @@ -6656,9 +6499,7 @@ L_08876310: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08876440; } @@ -6667,7 +6508,6 @@ L_08876310: L_0887635C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876370; } @@ -6675,7 +6515,6 @@ L_0887635C: } L_08876368: aot_gpr_31 = (0x08876370u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876370u) goto L_08876370; AOT_REGCACHE_SYNC_OUT(); return; L_08876370: @@ -6685,7 +6524,6 @@ L_08876370: AOT_REGCACHE_SYNC_OUT(); return; L_08876378: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088763CC; } @@ -6694,7 +6532,6 @@ L_08876378: L_08876380: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876394; } @@ -6702,7 +6539,6 @@ L_08876380: } L_0887638C: aot_gpr_31 = (0x08876394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876394u) goto L_08876394; AOT_REGCACHE_SYNC_OUT(); return; L_08876394: @@ -6713,7 +6549,6 @@ L_08876394: L_0887639C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088763B4; } @@ -6728,7 +6563,6 @@ L_088763A8: L_088763B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088763CC; } @@ -6792,7 +6626,6 @@ L_08876428: AOT_REGCACHE_SYNC_OUT(); return; L_08876438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 92u, 0x088784A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6809,7 +6642,6 @@ L_08876450: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088764C4; } @@ -6821,11 +6653,20 @@ L_08876460: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24064))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08876478: { const bool branch_taken = 0u == 0u; aot_gpr_17 = (0u | 5u); @@ -6922,7 +6763,6 @@ L_088764D8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088764F8; } @@ -6954,7 +6794,6 @@ L_08876514: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088765A4; } @@ -6963,7 +6802,6 @@ L_08876514: L_08876530: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887654C; } @@ -6971,12 +6809,10 @@ L_08876530: } L_0887653C: aot_gpr_31 = (0x08876544u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 743u, 0x0887352Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876544u) goto L_08876544; AOT_REGCACHE_SYNC_OUT(); return; L_08876544: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08876568; } @@ -6998,7 +6834,6 @@ L_08876568: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08876588; } @@ -7006,12 +6841,10 @@ L_08876568: } L_08876578: aot_gpr_31 = (0x08876580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 751u, 0x08873584u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876580u) goto L_08876580; AOT_REGCACHE_SYNC_OUT(); return; L_08876580: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088765A4; } @@ -7038,7 +6871,6 @@ L_088765A4: goto L_088765B0; L_088765B0: aot_gpr_31 = (0x088765B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088765B8u) goto L_088765B8; AOT_REGCACHE_SYNC_OUT(); return; L_088765B8: @@ -7047,7 +6879,6 @@ L_088765B8: L_088765BC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876650; } @@ -7061,7 +6892,6 @@ L_088765C8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876648; } @@ -7071,7 +6901,6 @@ L_088765E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08876608; } @@ -7081,7 +6910,6 @@ L_088765F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887661C; } @@ -7102,7 +6930,6 @@ L_0887661C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876630; } @@ -7115,7 +6942,6 @@ L_08876630: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 82u, 0x08878430u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7151,7 +6977,6 @@ L_08876650: L_08876664: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08876680; } @@ -7183,7 +7008,6 @@ L_0887669C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088766D4; } @@ -7192,7 +7016,6 @@ L_0887669C: L_088766AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088766C8; } @@ -7214,7 +7037,6 @@ L_088766D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088766E8; } @@ -7227,7 +7049,6 @@ L_088766E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088766FC; } @@ -7239,7 +7060,6 @@ L_088766F8: L_088766FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0887670C; } @@ -7257,7 +7077,6 @@ L_0887670C: goto L_08876718; L_08876718: aot_gpr_31 = (0x08876720u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876720u) goto L_08876720; AOT_REGCACHE_SYNC_OUT(); return; L_08876720: @@ -7369,7 +7188,6 @@ L_088767E0: goto L_088767E4; L_088767E4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088767F4; } @@ -7382,7 +7200,6 @@ L_088767EC: L_088767F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876810; } @@ -7390,12 +7207,10 @@ L_088767F4: } L_08876800: aot_gpr_31 = (0x08876808u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 743u, 0x0887352Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876808u) goto L_08876808; AOT_REGCACHE_SYNC_OUT(); return; L_08876808: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08877498; } @@ -7404,7 +7219,6 @@ L_08876808: L_08876810: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08876838; } @@ -7413,7 +7227,6 @@ L_08876810: L_0887681C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08876838; } @@ -7429,7 +7242,6 @@ L_08876828: L_08876838: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088768A0; } @@ -7443,7 +7255,6 @@ L_08876844: AOT_REGCACHE_SYNC_OUT(); return; L_08876850: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08876870; } @@ -7458,7 +7269,6 @@ L_08876858: AOT_REGCACHE_SYNC_OUT(); return; L_08876868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887688C; } @@ -7484,7 +7294,6 @@ L_0887688C: goto L_08874584; L_08876898: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7494,7 +7303,6 @@ L_088768A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08876928; } @@ -7508,7 +7316,6 @@ L_088768B0: AOT_REGCACHE_SYNC_OUT(); return; L_088768BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088768DC; } @@ -7523,7 +7330,6 @@ L_088768C4: AOT_REGCACHE_SYNC_OUT(); return; L_088768D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088768F8; } @@ -7548,7 +7354,6 @@ L_088768F8: goto L_0887487C; L_08876900: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088768B0; } @@ -7560,7 +7365,6 @@ L_08876908: goto L_08874B80; L_08876910: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088768B0; } @@ -7586,7 +7390,6 @@ L_08876934: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7598,11 +7401,20 @@ L_08876944: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-24024))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887695C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (aot_gpr_4 + static_cast(-2)); @@ -7641,7 +7453,6 @@ L_08876984: } L_0887698C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08876BA4; } @@ -7680,7 +7491,6 @@ L_088769C8: goto L_088769D8; L_088769D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876CC0; } @@ -7694,7 +7504,6 @@ L_088769E0: AOT_REGCACHE_SYNC_OUT(); return; L_088769EC: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876A0C; } @@ -7709,7 +7518,6 @@ L_088769F4: AOT_REGCACHE_SYNC_OUT(); return; L_08876A04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876A28; } @@ -7730,7 +7538,6 @@ L_08876A1C: AOT_REGCACHE_SYNC_OUT(); return; L_08876A28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876CC0; } @@ -7744,7 +7551,6 @@ L_08876A30: AOT_REGCACHE_SYNC_OUT(); return; L_08876A3C: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876A5C; } @@ -7759,7 +7565,6 @@ L_08876A44: AOT_REGCACHE_SYNC_OUT(); return; L_08876A54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876A78; } @@ -7780,7 +7585,6 @@ L_08876A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08876A78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876CC0; } @@ -7794,7 +7598,6 @@ L_08876A80: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876B9C; } @@ -7808,7 +7611,6 @@ L_08876AA0: AOT_REGCACHE_SYNC_OUT(); return; L_08876AAC: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876ACC; } @@ -7823,7 +7625,6 @@ L_08876AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08876AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876AEC; } @@ -7860,7 +7661,6 @@ L_08876AFC: AOT_REGCACHE_SYNC_OUT(); return; L_08876B08: { const bool branch_taken = aot_gpr_17 == aot_gpr_2; - // nop if (branch_taken) { goto L_08876B48; } @@ -7868,7 +7668,6 @@ L_08876B08: } L_08876B10: aot_gpr_31 = (0x08876B18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876B18u) goto L_08876B18; AOT_REGCACHE_SYNC_OUT(); return; L_08876B18: @@ -7886,7 +7685,6 @@ L_08876B28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876B9C; } @@ -7900,7 +7698,6 @@ L_08876B48: AOT_REGCACHE_SYNC_OUT(); return; L_08876B54: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876B74; } @@ -7915,7 +7712,6 @@ L_08876B5C: AOT_REGCACHE_SYNC_OUT(); return; L_08876B6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876B94; } @@ -7945,7 +7741,6 @@ L_08876B94: } L_08876B9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876CC0; } @@ -7959,7 +7754,6 @@ L_08876BA4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876CC0; } @@ -7973,7 +7767,6 @@ L_08876BC4: AOT_REGCACHE_SYNC_OUT(); return; L_08876BD0: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876BF0; } @@ -7988,7 +7781,6 @@ L_08876BD8: AOT_REGCACHE_SYNC_OUT(); return; L_08876BE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876C10; } @@ -8025,7 +7817,6 @@ L_08876C20: AOT_REGCACHE_SYNC_OUT(); return; L_08876C2C: { const bool branch_taken = aot_gpr_17 == aot_gpr_2; - // nop if (branch_taken) { goto L_08876C6C; } @@ -8033,7 +7824,6 @@ L_08876C2C: } L_08876C34: aot_gpr_31 = (0x08876C3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876C3Cu) goto L_08876C3C; AOT_REGCACHE_SYNC_OUT(); return; L_08876C3C: @@ -8051,7 +7841,6 @@ L_08876C4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876CC0; } @@ -8065,7 +7854,6 @@ L_08876C6C: AOT_REGCACHE_SYNC_OUT(); return; L_08876C78: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876C98; } @@ -8080,7 +7868,6 @@ L_08876C80: AOT_REGCACHE_SYNC_OUT(); return; L_08876C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876CB8; } @@ -8110,7 +7897,6 @@ L_08876CB8: } L_08876CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8137,7 +7923,6 @@ L_08876CD8: } L_08876CE4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08876E40; } @@ -8145,7 +7930,6 @@ L_08876CE4: } L_08876CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876D0C; } @@ -8161,7 +7945,6 @@ L_08876CF4: } L_08876CFC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887706C; } @@ -8169,7 +7952,6 @@ L_08876CFC: } L_08876D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088770BC; } @@ -8212,7 +7994,6 @@ L_08876D40: goto L_08876D48; L_08876D48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876D74; } @@ -8273,7 +8054,6 @@ L_08876DA8: goto L_08876DB0; L_08876DB0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876DDC; } @@ -8315,7 +8095,6 @@ L_08876DFC: aot_gpr_5 = (aot_gpr_5 + static_cast(-28736)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(52))); { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_08876E24; } @@ -8341,7 +8120,6 @@ L_08876E24: goto L_08876E38; L_08876E38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088770BC; } @@ -8371,7 +8149,6 @@ L_08876E5C: L_08876E64: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08876E74; } @@ -8389,7 +8166,6 @@ L_08876E74: AOT_REGCACHE_SYNC_OUT(); return; L_08876E84: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08876EA4; } @@ -8404,7 +8180,6 @@ L_08876E8C: AOT_REGCACHE_SYNC_OUT(); return; L_08876E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876EC0; } @@ -8460,7 +8235,6 @@ L_08876EF4: goto L_08876EFC; L_08876EFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876F34; } @@ -8468,13 +8242,11 @@ L_08876EFC: } L_08876F04: aot_gpr_31 = (0x08876F0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08876F0Cu) goto L_08876F0C; AOT_REGCACHE_SYNC_OUT(); return; L_08876F0C: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08876F34; } @@ -8507,7 +8279,6 @@ L_08876F48: goto L_0887487C; L_08876F50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08876F68; } @@ -8519,7 +8290,6 @@ L_08876F58: goto L_08874B80; L_08876F60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08876FB0; } @@ -8546,7 +8316,6 @@ L_08876F84: L_08876F8C: aot_gpr_4 = (0u | 12u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08876FA8; } @@ -8561,7 +8330,6 @@ L_08876F98: AOT_REGCACHE_SYNC_OUT(); return; L_08876FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08876F48; } @@ -8611,7 +8379,6 @@ L_08876FE8: goto L_08876FF0; L_08876FF0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877010; } @@ -8630,7 +8397,6 @@ L_08877008: goto L_08877010; L_08877010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088770BC; } @@ -8645,7 +8411,6 @@ L_08877018: L_08877024: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877048; } @@ -8660,7 +8425,6 @@ L_08877030: AOT_REGCACHE_SYNC_OUT(); return; L_08877040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877064; } @@ -8681,7 +8445,6 @@ L_08877058: AOT_REGCACHE_SYNC_OUT(); return; L_08877064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088770BC; } @@ -8701,7 +8464,6 @@ L_08877080: AOT_REGCACHE_SYNC_OUT(); return; L_08877088: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088770B0; } @@ -8711,7 +8473,6 @@ L_08877090: aot_gpr_17 = (aot_gpr_17 + static_cast(-1)); aot_gpr_4 = (aot_gpr_17 < static_cast(170) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088770A8; } @@ -8736,7 +8497,6 @@ L_088770B0: goto L_088770BC; L_088770BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8746,7 +8506,6 @@ L_088770C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887712C; } @@ -8757,7 +8516,6 @@ L_088770D4: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(52))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08877118; } @@ -8793,7 +8551,6 @@ L_08877118: goto L_0887712C; L_0887712C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8810,7 +8567,6 @@ L_08877134: L_08877144: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877210; } @@ -8818,7 +8574,6 @@ L_08877144: } L_08877150: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877168; } @@ -8826,7 +8581,6 @@ L_08877150: } L_08877158: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088771C8; } @@ -8834,7 +8588,6 @@ L_08877158: } L_08877160: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877210; } @@ -8845,7 +8598,6 @@ L_08877168: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(52))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088771AC; } @@ -8881,7 +8633,6 @@ L_088771AC: goto L_088771C0; L_088771C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877210; } @@ -8895,7 +8646,6 @@ L_088771C8: AOT_REGCACHE_SYNC_OUT(); return; L_088771D4: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_088771F4; } @@ -8910,7 +8660,6 @@ L_088771DC: AOT_REGCACHE_SYNC_OUT(); return; L_088771EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877210; } @@ -8931,7 +8680,6 @@ L_08877204: AOT_REGCACHE_SYNC_OUT(); return; L_08877210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8941,7 +8689,6 @@ L_08877218: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08877274; } @@ -8956,7 +8703,6 @@ L_08877228: L_08877234: aot_gpr_4 = (static_cast(aot_gpr_2) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877258; } @@ -8971,7 +8717,6 @@ L_08877240: AOT_REGCACHE_SYNC_OUT(); return; L_08877250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877274; } @@ -8992,7 +8737,6 @@ L_08877268: AOT_REGCACHE_SYNC_OUT(); return; L_08877274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9002,7 +8746,6 @@ L_0887727C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088772D8; } @@ -9017,7 +8760,6 @@ L_0887728C: L_08877298: aot_gpr_4 = (static_cast(aot_gpr_2) < 1001 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088772BC; } @@ -9032,7 +8774,6 @@ L_088772A4: AOT_REGCACHE_SYNC_OUT(); return; L_088772B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088772D8; } @@ -9053,7 +8794,6 @@ L_088772CC: AOT_REGCACHE_SYNC_OUT(); return; L_088772D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9061,7 +8801,6 @@ L_088772D8: } L_088772E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9078,7 +8817,6 @@ L_088772E8: L_088772F8: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088773B4; } @@ -9086,7 +8824,6 @@ L_088772F8: } L_08877304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887731C; } @@ -9094,7 +8831,6 @@ L_08877304: } L_0887730C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887736C; } @@ -9102,7 +8838,6 @@ L_0887730C: } L_08877314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088773B4; } @@ -9116,7 +8851,6 @@ L_0887731C: AOT_REGCACHE_SYNC_OUT(); return; L_08877328: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08877348; } @@ -9131,7 +8865,6 @@ L_08877330: AOT_REGCACHE_SYNC_OUT(); return; L_08877340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877364; } @@ -9152,7 +8885,6 @@ L_08877358: AOT_REGCACHE_SYNC_OUT(); return; L_08877364: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088773B4; } @@ -9166,7 +8898,6 @@ L_0887736C: AOT_REGCACHE_SYNC_OUT(); return; L_08877378: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08877398; } @@ -9181,7 +8912,6 @@ L_08877380: AOT_REGCACHE_SYNC_OUT(); return; L_08877390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088773B4; } @@ -9202,7 +8932,6 @@ L_088773A8: AOT_REGCACHE_SYNC_OUT(); return; L_088773B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9212,7 +8941,6 @@ L_088773BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08877424; } @@ -9223,7 +8951,6 @@ L_088773CC: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(52))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08877410; } @@ -9259,7 +8986,6 @@ L_08877410: goto L_08877424; L_08877424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9312,7 +9038,6 @@ L_0887747C: goto L_08877490; L_08877490: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9322,7 +9047,6 @@ L_08877498: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088774B8; } @@ -9330,12 +9054,10 @@ L_08877498: } L_088774A8: aot_gpr_31 = (0x088774B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 751u, 0x08873584u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088774B0u) goto L_088774B0; AOT_REGCACHE_SYNC_OUT(); return; L_088774B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9344,7 +9066,6 @@ L_088774B0: L_088774B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088774E0; } @@ -9353,7 +9074,6 @@ L_088774B8: L_088774C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_088774E0; } @@ -9369,7 +9089,6 @@ L_088774D0: L_088774E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887754C; } @@ -9384,7 +9103,6 @@ L_088774EC: L_088774F8: aot_gpr_4 = (aot_gpr_2 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887751C; } @@ -9399,7 +9117,6 @@ L_08877504: AOT_REGCACHE_SYNC_OUT(); return; L_08877514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877538; } @@ -9425,7 +9142,6 @@ L_08877538: goto L_08874584; L_08877544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9435,7 +9151,6 @@ L_0887754C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088775D8; } @@ -9450,7 +9165,6 @@ L_0887755C: L_08877568: aot_gpr_4 = (aot_gpr_2 < static_cast(11) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887758C; } @@ -9465,7 +9179,6 @@ L_08877574: AOT_REGCACHE_SYNC_OUT(); return; L_08877584: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088775A8; } @@ -9490,7 +9203,6 @@ L_088775A8: goto L_0887487C; L_088775B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0887755C; } @@ -9502,7 +9214,6 @@ L_088775B8: goto L_08874B80; L_088775C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0887755C; } @@ -9528,7 +9239,6 @@ L_088775E4: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9540,11 +9250,20 @@ L_088775F4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23984))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887760C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (aot_gpr_4 + static_cast(-2)); @@ -9583,7 +9302,6 @@ L_08877634: } L_0887763C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08877864; } @@ -9622,7 +9340,6 @@ L_08877678: goto L_08877688; L_08877688: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877988; } @@ -9637,7 +9354,6 @@ L_08877690: L_0887769C: aot_gpr_4 = (static_cast(aot_gpr_2) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088776C0; } @@ -9652,7 +9368,6 @@ L_088776A8: AOT_REGCACHE_SYNC_OUT(); return; L_088776B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088776DC; } @@ -9673,7 +9388,6 @@ L_088776D0: AOT_REGCACHE_SYNC_OUT(); return; L_088776DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877988; } @@ -9688,7 +9402,6 @@ L_088776E4: L_088776F0: aot_gpr_4 = (static_cast(aot_gpr_2) < 60 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877714; } @@ -9703,7 +9416,6 @@ L_088776FC: AOT_REGCACHE_SYNC_OUT(); return; L_0887770C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877730; } @@ -9724,7 +9436,6 @@ L_08877724: AOT_REGCACHE_SYNC_OUT(); return; L_08877730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877988; } @@ -9738,7 +9449,6 @@ L_08877738: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887785C; } @@ -9753,7 +9463,6 @@ L_08877758: L_08877764: aot_gpr_4 = (static_cast(aot_gpr_2) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877788; } @@ -9768,7 +9477,6 @@ L_08877770: AOT_REGCACHE_SYNC_OUT(); return; L_08877780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088777A8; } @@ -9805,7 +9513,6 @@ L_088777B8: AOT_REGCACHE_SYNC_OUT(); return; L_088777C4: { const bool branch_taken = aot_gpr_17 == aot_gpr_2; - // nop if (branch_taken) { goto L_08877804; } @@ -9813,7 +9520,6 @@ L_088777C4: } L_088777CC: aot_gpr_31 = (0x088777D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088777D4u) goto L_088777D4; AOT_REGCACHE_SYNC_OUT(); return; L_088777D4: @@ -9831,7 +9537,6 @@ L_088777E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887785C; } @@ -9846,7 +9551,6 @@ L_08877804: L_08877810: aot_gpr_4 = (static_cast(aot_gpr_2) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877834; } @@ -9861,7 +9565,6 @@ L_0887781C: AOT_REGCACHE_SYNC_OUT(); return; L_0887782C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877854; } @@ -9891,7 +9594,6 @@ L_08877854: } L_0887785C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877988; } @@ -9905,7 +9607,6 @@ L_08877864: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877988; } @@ -9920,7 +9621,6 @@ L_08877884: L_08877890: aot_gpr_4 = (static_cast(aot_gpr_2) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088778B4; } @@ -9935,7 +9635,6 @@ L_0887789C: AOT_REGCACHE_SYNC_OUT(); return; L_088778AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088778D4; } @@ -9972,7 +9671,6 @@ L_088778E4: AOT_REGCACHE_SYNC_OUT(); return; L_088778F0: { const bool branch_taken = aot_gpr_17 == aot_gpr_2; - // nop if (branch_taken) { goto L_08877930; } @@ -9980,7 +9678,6 @@ L_088778F0: } L_088778F8: aot_gpr_31 = (0x08877900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08877900u) goto L_08877900; AOT_REGCACHE_SYNC_OUT(); return; L_08877900: @@ -9998,7 +9695,6 @@ L_08877910: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877988; } @@ -10013,7 +9709,6 @@ L_08877930: L_0887793C: aot_gpr_4 = (static_cast(aot_gpr_2) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877960; } @@ -10028,7 +9723,6 @@ L_08877948: AOT_REGCACHE_SYNC_OUT(); return; L_08877958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877980; } @@ -10058,7 +9752,6 @@ L_08877980: } L_08877988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10085,7 +9778,6 @@ L_088779A0: } L_088779AC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877B0C; } @@ -10093,7 +9785,6 @@ L_088779AC: } L_088779B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088779D4; } @@ -10109,7 +9800,6 @@ L_088779BC: } L_088779C4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877D34; } @@ -10117,7 +9807,6 @@ L_088779C4: } L_088779CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10160,7 +9849,6 @@ L_08877A08: goto L_08877A10; L_08877A10: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877A3C; } @@ -10221,7 +9909,6 @@ L_08877A70: goto L_08877A78; L_08877A78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877AA4; } @@ -10265,7 +9952,6 @@ L_08877AC4: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877AF0; } @@ -10290,7 +9976,6 @@ L_08877AF0: goto L_08877B04; L_08877B04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088779CC; } @@ -10320,7 +10005,6 @@ L_08877B28: L_08877B30: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08877B40; } @@ -10339,7 +10023,6 @@ L_08877B40: L_08877B50: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877B74; } @@ -10354,7 +10037,6 @@ L_08877B5C: AOT_REGCACHE_SYNC_OUT(); return; L_08877B6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877B90; } @@ -10410,7 +10092,6 @@ L_08877BC4: goto L_08877BCC; L_08877BCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877BF8; } @@ -10418,13 +10099,11 @@ L_08877BCC: } L_08877BD4: aot_gpr_31 = (0x08877BDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08877BDCu) goto L_08877BDC; AOT_REGCACHE_SYNC_OUT(); return; L_08877BDC: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877BF8; } @@ -10454,7 +10133,6 @@ L_08877C10: goto L_0887487C; L_08877C18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08877C30; } @@ -10466,7 +10144,6 @@ L_08877C20: goto L_08874B80; L_08877C28: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08877C78; } @@ -10493,7 +10170,6 @@ L_08877C4C: L_08877C54: aot_gpr_4 = (0u | 12u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08877C70; } @@ -10508,7 +10184,6 @@ L_08877C60: AOT_REGCACHE_SYNC_OUT(); return; L_08877C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877C10; } @@ -10558,7 +10233,6 @@ L_08877CB0: goto L_08877CB8; L_08877CB8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877CD8; } @@ -10577,7 +10251,6 @@ L_08877CD0: goto L_08877CD8; L_08877CD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088779CC; } @@ -10592,7 +10265,6 @@ L_08877CE0: L_08877CEC: aot_gpr_4 = (static_cast(aot_gpr_2) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877D10; } @@ -10607,7 +10279,6 @@ L_08877CF8: AOT_REGCACHE_SYNC_OUT(); return; L_08877D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877D2C; } @@ -10628,7 +10299,6 @@ L_08877D20: AOT_REGCACHE_SYNC_OUT(); return; L_08877D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088779CC; } @@ -10648,7 +10318,6 @@ L_08877D48: AOT_REGCACHE_SYNC_OUT(); return; L_08877D50: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08877D7C; } @@ -10660,7 +10329,6 @@ L_08877D58: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08877D74; } @@ -10691,7 +10359,6 @@ L_08877D8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08877DF4; } @@ -10713,7 +10380,6 @@ L_08877DAC: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877DE0; } @@ -10738,7 +10404,6 @@ L_08877DE0: goto L_08877DF4; L_08877DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10748,7 +10413,6 @@ L_08877DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08877E58; } @@ -10763,7 +10427,6 @@ L_08877E0C: L_08877E18: aot_gpr_4 = (static_cast(aot_gpr_2) < 15 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877E3C; } @@ -10778,7 +10441,6 @@ L_08877E24: AOT_REGCACHE_SYNC_OUT(); return; L_08877E34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877E58; } @@ -10799,7 +10461,6 @@ L_08877E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08877E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10809,7 +10470,6 @@ L_08877E60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08877EBC; } @@ -10824,7 +10484,6 @@ L_08877E70: L_08877E7C: aot_gpr_4 = (static_cast(aot_gpr_2) < 20000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877EA0; } @@ -10839,7 +10498,6 @@ L_08877E88: AOT_REGCACHE_SYNC_OUT(); return; L_08877E98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877EBC; } @@ -10860,7 +10518,6 @@ L_08877EB0: AOT_REGCACHE_SYNC_OUT(); return; L_08877EBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10877,7 +10534,6 @@ L_08877EC4: L_08877ED4: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877FA4; } @@ -10885,7 +10541,6 @@ L_08877ED4: } L_08877EE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877EF8; } @@ -10893,7 +10548,6 @@ L_08877EE0: } L_08877EE8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877F58; } @@ -10901,7 +10555,6 @@ L_08877EE8: } L_08877EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877FA4; } @@ -10923,7 +10576,6 @@ L_08877F08: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877F3C; } @@ -10948,7 +10600,6 @@ L_08877F3C: goto L_08877F50; L_08877F50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877FA4; } @@ -10963,7 +10614,6 @@ L_08877F58: L_08877F64: aot_gpr_4 = (static_cast(aot_gpr_2) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08877F88; } @@ -10978,7 +10628,6 @@ L_08877F70: AOT_REGCACHE_SYNC_OUT(); return; L_08877F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877FA4; } @@ -10999,7 +10648,6 @@ L_08877F98: AOT_REGCACHE_SYNC_OUT(); return; L_08877FA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11007,7 +10655,6 @@ L_08877FA4: } L_08877FAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 23u, 0x08878164u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11024,7 +10671,6 @@ L_08877FB4: L_08877FC4: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 12u, 0x08878088u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11032,7 +10678,6 @@ L_08877FC4: } L_08877FD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08877FE8; } @@ -11040,7 +10685,6 @@ L_08877FD0: } L_08877FD8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 6u, 0x0887803Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11048,7 +10692,6 @@ L_08877FD8: } L_08877FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 12u, 0x08878088u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11063,7 +10706,6 @@ L_08877FE8: L_08877FF4: aot_gpr_4 = (static_cast(aot_gpr_2) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0029_entry, 29u, 3u, 0x08878018u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0029.cpp b/profiles/vcs/generated/generated_unit_0029.cpp index 366cb28..c00a83b 100644 --- a/profiles/vcs/generated/generated_unit_0029.cpp +++ b/profiles/vcs/generated/generated_unit_0029.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0029[4096] = { - 1, 0, 0, 0, 2, 0, 3, 0, 0, 0, 4, 0, 0, 5, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 0, 9, 0, 10, 0, 0, 0, 11, - 0, 0, 12, 0, 13, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, - 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 25, - 0, 0, 26, 27, 28, 0, 29, 0, 0, 30, 0, 31, 0, 0, 0, 32, 0, 0, 33, 0, 34, 0, 0, 35, 0, 36, 37, 0, 0, 0, 38, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 40, 41, 42, 0, 43, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 47, 0, 0, 48, 0, - 0, 0, 49, 0, 0, 0, 0, 0, 50, 51, 52, 0, 53, 0, 0, 54, 0, 55, 0, 56, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, - 59, 0, 60, 0, 61, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 71, 0, 0, 72, 0, 0, 73, 0, 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, 0, 78, - 0, 79, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 83, 0, 0, 84, 0, 85, 0, 86, 0, 0, 87, 0, 88, 0, 0, 89, 0, - 0, 0, 90, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, - 95, 0, 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, - 0, 102, 0, 0, 103, 0, 0, 104, 0, 105, 106, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 0, 110, 111, 0, 0, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, - 116, 0, 117, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 121, 122, 0, 123, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 126, 0, 127, 0, - 0, 128, 0, 0, 129, 0, 0, 130, 0, 131, 132, 0, 133, 0, 0, 134, 0, 0, 0, 0, 135, 0, 0, 0, 136, 137, 0, 138, 0, 0, 139, 0, - 140, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 144, 0, 0, 0, 145, 146, 147, 0, 0, 0, 148, 0, - 0, 149, 0, 150, 151, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 156, 0, 157, 0, 0, 0, 0, 158, 0, 0, - 0, 159, 0, 0, 0, 160, 161, 162, 0, 163, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 166, 0, - 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 171, 0, 0, 172, 0, 173, 174, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, 178, 179, 0, 180, 0, 0, 0, - 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, 184, 185, 0, 186, 0, 0, 0, 187, 0, 188, 0, 0, 0, 189, 0, 0, 190, 0, 0, 0, 191, 0, - 192, 0, 0, 193, 0, 0, 194, 0, 0, 195, 0, 196, 197, 0, 198, 0, 199, 0, 0, 0, 200, 201, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, - 204, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 0, 207, 0, 0, 208, 0, 0, 209, 0, 210, 211, 0, 212, 0, 213, 0, 0, 0, - 214, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 217, 0, 0, 218, 0, 0, 219, 0, 0, 220, 0, 221, 222, 0, 223, 0, 224, 0, 0, 0, 225, - 0, 0, 226, 0, 0, 0, 227, 0, 228, 0, 229, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 233, 234, 0, 235, 0, 236, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, - 0, 242, 0, 243, 244, 0, 245, 0, 246, 0, 0, 0, 247, 0, 248, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 252, 0, 0, 253, - 0, 254, 255, 0, 256, 0, 257, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, - 0, 264, 0, 0, 265, 0, 266, 267, 268, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 274, 0, 0, - 275, 0, 276, 277, 0, 278, 0, 279, 0, 0, 0, 280, 0, 281, 0, 0, 282, 0, 0, 283, 0, 0, 284, 0, 285, 286, 0, 287, 0, 288, 0, 0, - 0, 289, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 292, 0, 0, 293, 0, 294, 295, 0, 296, 0, 297, 0, 0, 0, 298, 0, 299, 0, 300, 0, - 301, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 0, 305, 0, 306, 0, 0, 307, 0, 0, 308, 0, 0, 309, 0, 310, 311, 312, - 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 317, 0, 0, 318, 0, 319, 320, 0, 321, 0, 322, 0, 0, 0, 323, - 0, 324, 0, 325, 0, 326, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 329, 0, 0, 330, 0, 0, 331, 0, 0, 332, 0, 333, 334, 335, 0, 0, - 336, 0, 337, 0, 338, 0, 0, 339, 0, 0, 340, 0, 341, 342, 343, 0, 0, 344, 345, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, - 0, 349, 0, 350, 0, 0, 351, 0, 0, 352, 0, 0, 353, 0, 354, 355, 356, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, - 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 363, 0, 364, 365, 366, 0, 0, 367, 0, 0, 0, 368, 0, 369, 0, - 0, 370, 0, 0, 371, 0, 0, 372, 0, 373, 374, 0, 375, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 0, - 0, 0, 0, 380, 0, 0, 381, 0, 0, 382, 0, 383, 384, 385, 0, 0, 386, 0, 0, 0, 387, 0, 388, 0, 0, 389, 0, 0, 390, 0, 0, 391, - 0, 392, 393, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 399, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, - 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 406, 407, 0, 0, 408, 0, 0, 0, 409, 0, 410, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, - 414, 0, 0, 415, 0, 416, 417, 0, 0, 418, 0, 419, 0, 0, 0, 420, 0, 421, 0, 422, 0, 0, 423, 0, 0, 424, 0, 0, 425, 0, 0, 426, - 0, 427, 428, 0, 0, 429, 0, 430, 0, 0, 0, 431, 0, 432, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 438, 439, 0, - 440, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, 448, 449, 0, 0, 450, - 0, 451, 0, 0, 0, 452, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 457, 458, 0, 0, 459, 0, 460, 0, 0, 0, 461, 0, 0, 0, - 0, 462, 0, 0, 463, 0, 0, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 471, 0, 0, 472, 0, - 0, 473, 0, 0, 474, 0, 0, 475, 0, 476, 477, 0, 478, 0, 479, 0, 0, 0, 0, 480, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, - 0, 0, 0, 484, 0, 0, 0, 485, 0, 486, 0, 487, 488, 489, 0, 490, 0, 0, 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, 0, 493, 0, 0, - 494, 0, 0, 495, 0, 0, 496, 0, 497, 498, 0, 499, 0, 500, 0, 0, 0, 501, 0, 0, 502, 0, 0, 503, 0, 0, 504, 0, 505, 506, 507, 0, - 0, 508, 0, 0, 0, 509, 0, 510, 0, 0, 511, 0, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 0, 517, 0, 0, 518, 0, 0, 519, 0, - 520, 521, 0, 522, 0, 523, 0, 0, 0, 524, 0, 525, 0, 0, 526, 0, 527, 0, 528, 0, 0, 529, 0, 530, 0, 531, 0, 0, 532, 0, 0, 533, - 0, 0, 534, 0, 535, 536, 537, 0, 0, 538, 0, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 544, 0, 0, 0, 0, 545, - 0, 0, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 548, 0, 0, 549, 0, 0, 550, 0, 551, 552, 553, 0, 0, 554, 0, 0, 0, 0, 555, 0, - 556, 0, 0, 0, 557, 0, 558, 0, 559, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 564, 0, - 0, 565, 0, 0, 566, 0, 567, 568, 569, 0, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 575, - 0, 0, 576, 0, 0, 577, 0, 578, 579, 0, 580, 0, 581, 0, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, 0, 586, 0, 0, 0, 587, 0, 0, - 0, 588, 0, 0, 0, 589, 0, 590, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 594, 595, 596, 0, 0, 597, 0, 0, 0, 598, 0, 599, 0, 600, - 0, 0, 601, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 604, 0, 605, 0, 0, 606, 0, 0, 607, 0, 0, 608, 0, 609, 610, 611, - 0, 0, 612, 0, 613, 0, 0, 614, 0, 0, 615, 0, 0, 616, 0, 617, 618, 619, 0, 0, 620, 621, 0, 622, 0, 0, 0, 0, 623, 0, 0, 624, - 0, 0, 625, 0, 0, 626, 0, 0, 627, 0, 628, 629, 0, 630, 0, 631, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 634, 0, 0, 635, 0, 636, - 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, 639, 0, 0, 0, 640, 0, 0, 641, 0, 0, 642, 0, 0, 0, 643, 0, 644, 0, 0, 645, 0, - 0, 0, 646, 0, 0, 647, 0, 0, 648, 0, 0, 649, 0, 0, 650, 0, 651, 652, 0, 653, 0, 654, 0, 0, 0, 0, 655, 0, 656, 0, 0, 0, - 657, 0, 658, 0, 659, 0, 0, 660, 0, 661, 0, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 664, 0, 0, 665, 0, 0, 666, 0, 667, 668, 669, - 0, 0, 670, 0, 0, 0, 671, 0, 672, 0, 673, 0, 674, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 0, 678, 0, 679, 0, - 0, 680, 0, 0, 681, 0, 0, 682, 0, 683, 684, 0, 685, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, 690, 0, - 0, 691, 0, 692, 693, 0, 694, 0, 695, 0, 0, 0, 696, 0, 697, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 0, 701, 0, 0, 702, 0, 0, - 703, 0, 0, 704, 0, 0, 705, 0, 706, 707, 708, 0, 0, 709, 0, 710, 0, 711, 0, 0, 712, 0, 0, 713, 0, 714, 715, 716, 0, 0, 717, 718, - 0, 719, 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 0, 0, 722, 0, 723, 0, 0, 724, 0, 0, 725, 0, 0, 726, 0, 727, 728, 729, 0, 0, - 730, 0, 0, 0, 731, 0, 0, 732, 0, 733, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 736, 0, 0, 0, 737, 0, 0, 738, 0, - 0, 739, 0, 0, 740, 0, 741, 742, 743, 0, 0, 744, 0, 0, 0, 0, 745, 0, 746, 0, 0, 0, 747, 0, 748, 0, 749, 0, 0, 750, 0, 0, - 0, 0, 0, 751, 0, 0, 0, 752, 0, 0, 753, 0, 0, 754, 0, 755, 756, 757, 0, 0, 758, 0, 0, 0, 759, 0, 760, 0, 0, 0, 0, 0, - 761, 0, 0, 762, 0, 0, 763, 0, 0, 764, 0, 765, 766, 0, 767, 0, 768, 0, 0, 0, 0, 769, 0, 0, 0, 770, 0, 771, 0, 0, 772, 0, - 0, 773, 0, 0, 774, 0, 775, 776, 0, 777, 0, 778, 0, 0, 0, 0, 779, 0, 0, 0, 780, 781, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, - 0, 783, 0, 0, 0, 0, 0, 784, 0, 0, 785, 0, 0, 786, 0, 787, 788, 789, 0, 0, 790, 0, 0, 0, 791, 0, 792, 0, 0, 793, 0, 0, - 794, 0, 0, 795, 0, 796, 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 800, 801, 0, 0, 0, 0, 0, 802, 0, - 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 805, 0, 0, 806, 0, 807, 808, 809, 0, 0, 810, 0, 0, 0, 811, 0, 812, - 0, 0, 813, 0, 0, 814, 0, 0, 815, 0, 0, 816, 0, 817, 818, 0, 819, 0, 820, 0, 0, 0, 0, 821, 0, 0, 0, 822, 0, 823, 0, 0, - 824, 0, 0, 825, 0, 0, 826, 0, 827, 828, 0, 829, 0, 830, 0, 0, 0, 0, 831, 0, 0, 0, 832, 833, 0, 0, 0, 0, 0, 834, 0, 0, - 835, 0, 836, 837, 0, 0, 838, 0, 0, 839, 0, 840, 841, 0, 0, 0, 842, 0, 0, 0, 843, 0, 0, 0, 0, 0, 844, 845, 846, 0, 847, 0, - 0, 0, 848, 0, 0, 0, 849, 0, 0, 0, 0, 0, 850, 851, 0, 0, 852, 0, 0, 0, 853, 0, 0, 0, 0, 0, 854, 855, 856, 0, 857, 0, - 0, 0, 0, 858, 0, 0, 859, 0, 0, 0, 0, 0, 0, 860, 0, 861, 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, 863, 0, 0, 864, 0, 0, - 865, 0, 866, 867, 0, 0, 868, 0, 869, 0, 0, 0, 870, 0, 0, 871, 0, 0, 0, 0, 0, 0, 872, 0, 873, 0, 0, 0, 0, 0, 0, 0, - 874, 0, 0, 875, 0, 876, 0, 877, 0, 0, 878, 0, 0, 0, 0, 0, 879, 0, 0, 880, 0, 881, 0, 882, 0, 0, 883, 884, 0, 885, 0, 0, - 0, 0, 0, 886, 0, 0, 887, 0, 888, 0, 889, 0, 0, 890, 0, 0, 891, 0, 0, 892, 0, 0, 893, 0, 894, 895, 0, 896, 0, 897, 0, 0, - 0, 898, 0, 899, 0, 0, 900, 0, 0, 901, 0, 0, 902, 0, 903, 904, 0, 905, 0, 906, 0, 0, 0, 907, 0, 908, 0, 0, 909, 0, 0, 910, - 0, 0, 911, 0, 912, 913, 0, 914, 0, 915, 0, 0, 0, 916, 0, 917, 0, 918, 0, 0, 919, 0, 0, 0, 0, 0, 0, 920, 0, 921, 0, 0, - 0, 0, 0, 0, 0, 922, 0, 923, 0, 0, 924, 0, 0, 925, 0, 0, 926, 0, 927, 928, 0, 929, 0, 930, 0, 0, 0, 931, 0, 932, 0, 933, - 0, 0, 934, 0, 0, 0, 0, 0, 0, 935, 0, 936, 0, 0, 0, 0, 0, 0, 0, 937, 0, 938, 0, 0, 939, 0, 0, 940, 0, 0, 941, 0, - 942, 943, 0, 944, 0, 945, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 948, 0, 949, 950, 0, 0, 951, 0, 0, 952, 0, 953, 0, 954, 0, 0, 955, 0, 956, 0, 957, 0, 958, 0, 0, 959, 0, 0, 0, 0, - 960, 961, 962, 0, 963, 0, 964, 0, 0, 965, 0, 966, 0, 0, 0, 967, 0, 968, 969, 0, 970, 0, 0, 0, 971, 0, 0, 0, 972, 0, 973, 0, - 0, 974, 0, 0, 0, 975, 0, 0, 976, 0, 977, 0, 978, 0, 0, 0, 0, 979, 0, 0, 0, 980, 0, 0, 0, 981, 982, 983, 0, 984, 0, 0, - 0, 985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, 0, 0, 987, 0, 0, 0, 988, 989, 990, 0, 0, 0, 991, 0, 0, 992, 0, 0, - 993, 0, 994, 995, 0, 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 997, 0, 0, 998, 0, 0, 0, 999, 1000, 0, 0, 1001, 1002, 0, 0, 1003, - 1004, 0, 1005, 0, 0, 0, 0, 1006, 0, 0, 1007, 0, 0, 1008, 0, 0, 1009, 0, 1010, 1011, 0, 0, 1012, 0, 0, 0, 0, 0, 0, 0, 0, 1013, - 0, 0, 1014, 0, 0, 1015, 0, 1016, 1017, 1018, 0, 1019, 0, 0, 0, 1020, 0, 0, 1021, 0, 0, 1022, 0, 1023, 0, 0, 1024, 1025, 0, 1026, 0, 0, - 1027, 0, 0, 0, 0, 0, 1028, 0, 0, 1029, 0, 0, 0, 0, 1030, 0, 1031, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1034, 0, 0, 0, 1035, 0, 1036, 0, 0, 1037, 0, 0, 1038, 0, 1039, 0, 1040, 0, 0, 0, 1041, 0, 0, 1042, 0, 0, - 0, 0, 1043, 1044, 1045, 0, 1046, 0, 1047, 0, 0, 1048, 0, 0, 0, 0, 1049, 0, 1050, 0, 0, 1051, 0, 0, 0, 0, 1052, 1053, 1054, 0, 1055, 0, - 0, 0, 1056, 0, 1057, 0, 0, 0, 1058, 1059, 0, 0, 1060, 0, 1061, 0, 1062, 0, 0, 0, 1063, 0, 1064, 0, 0, 0, 1065, 1066, 0, 0, 0, 1067, - 0, 1068, 0, 1069, 0, 0, 0, 1070, 0, 0, 1071, 0, 0, 0, 1072, 1073, 0, 0, 0, 0, 0, 1074, 0, 1075, 0, 0, 0, 1076, 1077, 0, 0, 1078, - 0, 1079, 0, 1080, 0, 1081, 0, 0, 1082, 0, 0, 0, 0, 1083, 1084, 1085, 0, 1086, 0, 1087, 0, 0, 0, 1088, 0, 0, 1089, 1090, 1091, 0, 1092, 0, - 0, 0, 1093, 0, 0, 0, 1094, 0, 0, 1095, 0, 1096, 1097, 0, 1098, 0, 1099, 0, 1100, 0, 0, 1101, 0, 1102, 1103, 0, 1104, 0, 1105, 0, 0, 1106, - 0, 0, 1107, 0, 1108, 1109, 0, 1110, 0, 1111, 1112, 0, 0, 0, 1113, 0, 0, 1114, 0, 1115, 1116, 0, 1117, 0, 1118, 0, 1119, 0, 1120, 0, 1121, 0, - 1122, 0, 1123, 0, 1124, 0, 0, 1125, 0, 0, 0, 0, 1126, 1127, 1128, 0, 1129, 0, 1130, 0, 1131, 1132, 0, 1133, 0, 1134, 0, 0, 1135, 0, 1136, 1137, - 0, 1138, 0, 0, 1139, 0, 1140, 0, 0, 1141, 0, 1142, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 1144, 0, 1145, 0, 1146, 0, 1147, 0, 1148, 0, - 1149, 0, 0, 1150, 0, 0, 1151, 0, 0, 0, 0, 1152, 0, 1153, 0, 0, 1154, 0, 0, 0, 0, 1155, 1156, 1157, 0, 1158, 0, 0, 0, 0, 1159, 0, - 0, 0, 1160, 0, 1161, 1162, 0, 1163, 0, 0, 0, 1164, 0, 1165, 0, 0, 1166, 0, 1167, 0, 1168, 0, 1169, 0, 1170, 0, 1171, 1172, 0, 1173, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1174, 0, 1175, 0, 0, 0, 1176, 0, 1177, 0, 0, 0, 0, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1179, 0, 0, 0, 0, 0, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1181, 0, 0, 1182, 0, 0, 1183, 1184, 0, 1185, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 1188, 0, 0, 1189, 0, 0, 1190, - 0, 1191, 1192, 0, 1193, 0, 1194, 0, 0, 0, 1195, 0, 1196, 0, 0, 1197, 0, 0, 1198, 0, 0, 1199, 0, 1200, 1201, 1202, 0, 0, 0, 1203, 0, 0, - 0, 1204, 0, 0, 1205, 0, 0, 1206, 0, 0, 1207, 0, 1208, 1209, 0, 1210, 0, 0, 1211, 0, 0, 0, 1212, 0, 0, 1213, 0, 0, 1214, 0, 0, 1215, - 0, 1216, 1217, 0, 1218, 0, 0, 1219, 0, 0, 0, 1220, 0, 0, 1221, 0, 0, 1222, 0, 0, 1223, 0, 1224, 1225, 0, 1226, 0, 0, 1227, 0, 0, 0, - 1228, 0, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1230, 0, 0, 0, 1231, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 1233, 0, 0, 0, 1234, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1235, 0, 0, 1236, 0, 1237, 1238, 0, 1239, 0, 0, 1240, 0, 0, 0, 0, - 1241, 0, 0, 0, 1242, 0, 0, 1243, 0, 1244, 0, 1245, 0, 1246, 0, 0, 0, 0, 1247, 0, 0, 0, 1248, 0, 1249, 0, 0, 1250, 0, 0, 1251, 0, - 0, 1252, 0, 1253, 1254, 0, 0, 1255, 0, 1256, 0, 1257, 0, 0, 0, 1258, 0, 0, 1259, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 1261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 1263, 0, 0, 0, 1264, 1265, 1266, 0, 0, 0, 1267, 1268, 0, 0, 0, 1269, 0, 0, 0, - 0, 1270, 0, 0, 0, 0, 1271, 0, 0, 1272, 0, 0, 1273, 0, 0, 1274, 0, 1275, 1276, 0, 0, 1277, 0, 1278, 0, 0, 0, 1279, 0, 0, 0, 1280, - 0, 0, 1281, 0, 0, 1282, 0, 0, 1283, 0, 1284, 1285, 0, 1286, 0, 1287, 0, 0, 0, 1288, 0, 0, 0, 0, 1289, 0, 0, 0, 1290, 0, 0, 1291, - 0, 0, 0, 1292, 0, 0, 0, 1293, 1294, 0, 0, 0, 0, 1295, 0, 1296, 0, 0, 0, 1297, 0, 1298, 1299, 1300, 0, 0, 0, 1301, 0, 0, 0, 0, - 1302, 0, 0, 0, 1303, 0, 1304, 0, 1305, 0, 0, 0, 0, 0, 0, 0, 1306, 0, 0, 1307, 0, 0, 1308, 0, 0, 1309, 0, 1310, 1311, 0, 1312, 0, - 1313, 0, 0, 0, 1314, 1315, 0, 0, 0, 0, 1316, 0, 1317, 0, 0, 1318, 0, 0, 1319, 0, 0, 1320, 0, 1321, 1322, 0, 1323, 0, 1324, 0, 0, 0, - 1325, 0, 0, 1326, 0, 0, 0, 0, 0, 1327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1328, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1329, 0, 0, 0, 0, 0, 1330, 1331, 0, 0, 0, 0, 1332, 0, 0, 0, 0, 0, 1333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1335, 0, 0, 0, 0, 0, 1336, 1337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, 0, 1340, 0, 0, 1341, 0, 0, 1342, 0, 1343, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0029[64] = { + 0x422011148A24A451ull, 0x46948A5C8A104011ull, 0x204A97044C111704ull, 0xA924921008948495ull, + 0x200081144A549112ull, 0x0C11169242028405ull, 0x5109692548040001ull, 0x4711000B4B109692ull, + 0x410082E22152085Aull, 0x16909A4001010402ull, 0x12315A49448A2E22ull, 0x8AD24A1115A49021ull, + 0x4908100005692544ull, 0x420A44569242515Aull, 0x2B4928AD248289D2ull, 0xE925111154569242ull, + 0x3A49482A8AD24844ull, 0x4089D24A22167495ull, 0x20885692513A4808ull, 0x104A885692513A48ull, + 0x924A8A6925289D24ull, 0x9A4910896924A8A6ull, 0x4890AA92114D24A2ull, 0x2210BA8882285692ull, + 0x492AA4A274922B49ull, 0x84A8A27492A54A2Bull, 0x4881095142749220ull, 0x225515A4904509D2ull, + 0xE9252104A89D24A2ull, 0xA450AD2490B3A494ull, 0x142B49244A248884ull, 0x51111544E9221295ull, + 0x2485515A49089692ull, 0x3A494442CE92A749ull, 0x254509D248821291ull, 0x4A215A490513A488ull, + 0x2513A48208310AD2ull, 0xA274901041880169ull, 0x20C42B4928856924ull, 0x5C1130445C111A4Dull, + 0x0140914D2480A048ull, 0x2B4925482CA904A9ull, 0x2812A2B4928AD24Aull, 0x49280A04A8AD24A0ull, + 0x0954A9340020022Bull, 0x2E22152251168A57ull, 0x9989002D24711002ull, 0x2CA48BA4804D2485ull, + 0x2454944010054241ull, 0x8C5153145C25095Cull, 0x5C8AE12A98A0C48Aull, 0x555A46B495A55A44ull, + 0x55440A52D2B57095ull, 0x2D5528B442E12849ull, 0x000000410010A280ull, 0x23A4945692401592ull, + 0x12D248969244B492ull, 0x0969000022088841ull, 0x21048A9A49442A91ull, 0x88A69242118E2200ull, + 0x08E8A1889108AD24ull, 0x15A494315A490151ull, 0x0010430401000209ull, 0xA4A0002000182008ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0029[64] = { + 1u, 19u, 39u, 59u, 79u, 95u, 112u, 128u, 149u, 167u, 181u, 204u, 226u, 242u, 264u, 289u, + 313u, 336u, 360u, 380u, 402u, 427u, 451u, 473u, 494u, 520u, 546u, 565u, 588u, 612u, 637u, 657u, + 680u, 703u, 730u, 751u, 773u, 794u, 813u, 835u, 858u, 874u, 898u, 922u, 942u, 960u, 985u, 1004u, + 1027u, 1043u, 1068u, 1093u, 1122u, 1149u, 1174u, 1181u, 1204u, 1228u, 1241u, 1262u, 1281u, 1302u, 1325u, 1334u, }; void recomp_unit_0029_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0029_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08878000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0029[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0029[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0029[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08878000; @@ -1523,7 +1430,6 @@ L_08878000: AOT_REGCACHE_SYNC_OUT(); return; L_08878010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878034; } @@ -1544,7 +1450,6 @@ L_08878028: AOT_REGCACHE_SYNC_OUT(); return; L_08878034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878088; } @@ -1559,7 +1464,6 @@ L_0887803C: L_08878048: aot_gpr_4 = (static_cast(aot_gpr_2) < 60 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887806C; } @@ -1574,7 +1478,6 @@ L_08878054: AOT_REGCACHE_SYNC_OUT(); return; L_08878064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878088; } @@ -1595,7 +1498,6 @@ L_0887807C: AOT_REGCACHE_SYNC_OUT(); return; L_08878088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878164; } @@ -1605,7 +1507,6 @@ L_08878090: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088780F8; } @@ -1627,7 +1528,6 @@ L_088780B0: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088780E4; } @@ -1652,7 +1552,6 @@ L_088780E4: goto L_088780F8; L_088780F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878164; } @@ -1735,7 +1634,6 @@ L_0887818C: goto L_08878190; L_08878190: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088783A4; } @@ -1762,7 +1660,6 @@ L_088781AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (ctx.gpr[18] + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088781C8; } @@ -1776,7 +1673,6 @@ L_088781BC: AOT_REGCACHE_SYNC_OUT(); return; L_088781C8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088783A4; } @@ -1791,7 +1687,6 @@ L_088781D0: goto L_088781DC; L_088781DC: aot_gpr_31 = (0x088781E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088781E4u) goto L_088781E4; AOT_REGCACHE_SYNC_OUT(); return; L_088781E4: @@ -1903,7 +1798,6 @@ L_088782A4: goto L_088782A8; L_088782A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088783A4; } @@ -1912,7 +1806,6 @@ L_088782A8: L_088782B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088782C4; } @@ -1920,7 +1813,6 @@ L_088782B0: } L_088782BC: aot_gpr_31 = (0x088782C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088782C4u) goto L_088782C4; AOT_REGCACHE_SYNC_OUT(); return; L_088782C4: @@ -1944,7 +1836,6 @@ L_088782D8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878328; } @@ -1953,7 +1844,6 @@ L_088782D8: L_088782F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08878308; } @@ -1961,7 +1851,6 @@ L_088782F4: } L_08878300: aot_gpr_31 = (0x08878308u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878308u) goto L_08878308; AOT_REGCACHE_SYNC_OUT(); return; L_08878308: @@ -1972,7 +1861,6 @@ L_08878308: L_08878310: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878328; } @@ -1981,7 +1869,6 @@ L_08878310: L_0887831C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(4188))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088783A4; } @@ -2006,7 +1893,6 @@ L_0887833C: } L_08878348: aot_gpr_31 = (0x08878350u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878350u) goto L_08878350; AOT_REGCACHE_SYNC_OUT(); return; L_08878350: @@ -2113,7 +1999,6 @@ L_088783FC: L_08878404: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08878430; } @@ -2142,7 +2027,6 @@ L_08878430: L_0887843C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08878450; } @@ -2150,7 +2034,6 @@ L_0887843C: } L_08878448: aot_gpr_31 = (0x08878450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878450u) goto L_08878450; AOT_REGCACHE_SYNC_OUT(); return; L_08878450: @@ -2169,7 +2052,6 @@ L_08878458: } L_08878464: aot_gpr_31 = (0x0887846Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887846Cu) goto L_0887846C; AOT_REGCACHE_SYNC_OUT(); return; L_0887846C: @@ -2187,7 +2069,6 @@ L_08878478: AOT_REGCACHE_SYNC_OUT(); return; L_08878488: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088784A0; } @@ -2214,7 +2095,17 @@ L_088784A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088784BC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-1152)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(1100), ctx.gpr[16]); @@ -2233,7 +2124,6 @@ L_088784F4: AOT_REGCACHE_SYNC_OUT(); return; L_08878500: aot_gpr_31 = (0x08878508u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], aot_gpr_28, ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878508u) goto L_08878508; AOT_REGCACHE_SYNC_OUT(); return; L_08878508: @@ -2260,7 +2150,6 @@ L_08878528: } L_0887853C: aot_gpr_31 = (0x08878544u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878544u) goto L_08878544; AOT_REGCACHE_SYNC_OUT(); return; L_08878544: @@ -2271,7 +2160,6 @@ L_08878544: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878B14; } @@ -2301,7 +2189,6 @@ L_08878584: L_08878590: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088785A8; } @@ -2339,7 +2226,6 @@ L_088785D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088785EC; } @@ -2407,7 +2293,6 @@ L_08878678: AOT_REGCACHE_SYNC_OUT(); return; L_08878680: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088786F8; } @@ -2429,7 +2314,6 @@ L_08878694: L_088786A0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088786B8; } @@ -2470,7 +2354,6 @@ L_088786E0: AOT_REGCACHE_SYNC_OUT(); return; L_088786F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878760; } @@ -2492,7 +2375,6 @@ L_08878704: L_08878710: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08878728; } @@ -2547,7 +2429,6 @@ L_0887876C: goto L_08878778; L_08878778: aot_gpr_31 = (0x08878780u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878780u) goto L_08878780; AOT_REGCACHE_SYNC_OUT(); return; L_08878780: @@ -2605,7 +2486,6 @@ L_088787E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878AF0; } @@ -2620,7 +2500,6 @@ L_088787F8: goto L_08878804; L_08878804: aot_gpr_31 = (0x0887880Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887880Cu) goto L_0887880C; AOT_REGCACHE_SYNC_OUT(); return; L_0887880C: @@ -2636,7 +2515,6 @@ L_08878818: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08878844; } @@ -2648,7 +2526,6 @@ L_0887882C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08878AF0; } @@ -2657,7 +2534,6 @@ L_0887882C: L_08878844: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08878858; } @@ -2665,7 +2541,6 @@ L_08878844: } L_08878850: aot_gpr_31 = (0x08878858u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08878858u) goto L_08878858; AOT_REGCACHE_SYNC_OUT(); return; L_08878858: @@ -2710,7 +2585,6 @@ L_08878898: goto L_0887889C; L_0887889C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088788E0; } @@ -2746,7 +2620,6 @@ L_088788E0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878928; } @@ -2818,7 +2691,6 @@ L_08878998: goto L_088789A4; L_088789A4: aot_gpr_31 = (0x088789ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088789ACu) goto L_088789AC; AOT_REGCACHE_SYNC_OUT(); return; L_088789AC: @@ -2835,7 +2707,6 @@ L_088789BC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08878A80; } @@ -2850,7 +2721,6 @@ L_088789D0: goto L_088789DC; L_088789DC: aot_gpr_31 = (0x088789E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088789E4u) goto L_088789E4; AOT_REGCACHE_SYNC_OUT(); return; L_088789E4: @@ -2898,7 +2768,6 @@ L_08878A28: goto L_08878A2C; L_08878A2C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878A4C; } @@ -2913,7 +2782,6 @@ L_08878A34: AOT_REGCACHE_SYNC_OUT(); return; L_08878A44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878A5C; } @@ -2941,7 +2809,6 @@ L_08878A68: AOT_REGCACHE_SYNC_OUT(); return; L_08878A78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878AD4; } @@ -2963,7 +2830,6 @@ L_08878A8C: L_08878A98: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08878AB0; } @@ -3027,7 +2893,6 @@ L_08878B00: ctx.gpr[30] = (ctx.gpr[30] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08878648; } @@ -3059,7 +2924,6 @@ L_08878B3C: L_08878B48: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08878B60; } @@ -3125,7 +2989,6 @@ L_08878BB8: L_08878BC4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08878BDC; } @@ -3194,7 +3057,6 @@ L_08878C34: L_08878C40: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08878C58; } @@ -3272,7 +3134,6 @@ L_08878CEC: L_08878CF8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08878D10; } @@ -3337,7 +3198,6 @@ L_08878D64: L_08878D70: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08878D88; } @@ -3417,7 +3277,6 @@ L_08878DF8: L_08878E04: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08878E1C; } @@ -3458,7 +3317,6 @@ L_08878E44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08878EB4; } @@ -3480,7 +3338,6 @@ L_08878E68: L_08878E74: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08878E8C; } @@ -3512,7 +3369,6 @@ L_08878E9C: AOT_REGCACHE_SYNC_OUT(); return; L_08878EAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08878F04; } @@ -3534,7 +3390,6 @@ L_08878EC0: L_08878ECC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08878EE4; } @@ -3588,7 +3443,6 @@ L_08878F24: L_08878F30: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08878F48; } @@ -3630,7 +3484,6 @@ L_08878F70: AOT_REGCACHE_SYNC_OUT(); return; L_08878F78: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08878FC8; } @@ -3666,7 +3519,6 @@ L_08878FB0: AOT_REGCACHE_SYNC_OUT(); return; L_08878FC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08879018; } @@ -3690,7 +3542,6 @@ L_08878FD4: L_08878FE0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08878FF8; } @@ -3744,7 +3595,6 @@ L_08879038: L_08879044: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887905C; } @@ -3786,7 +3636,6 @@ L_08879084: AOT_REGCACHE_SYNC_OUT(); return; L_0887908C: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_0887918C; } @@ -3831,7 +3680,6 @@ L_088790CC: L_088790D8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088790F0; } @@ -3879,7 +3727,6 @@ L_08879110: L_0887911C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879134; } @@ -3934,7 +3781,6 @@ L_08879174: AOT_REGCACHE_SYNC_OUT(); return; L_08879184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088791DC; } @@ -3958,7 +3804,6 @@ L_08879198: L_088791A4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088791BC; } @@ -4032,7 +3877,6 @@ L_0887922C: L_08879238: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879250; } @@ -4083,7 +3927,6 @@ L_08879284: L_08879290: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088792A8; } @@ -4151,7 +3994,6 @@ L_0887930C: L_08879318: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879330; } @@ -4202,7 +4044,6 @@ L_08879364: L_08879370: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879388; } @@ -4256,7 +4097,6 @@ L_088793C4: L_088793CC: ctx.gpr[17] = (0u | 1u); { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088799D4; } @@ -4292,7 +4132,6 @@ L_08879408: L_08879414: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887942C; } @@ -4335,7 +4174,6 @@ L_08879454: AOT_REGCACHE_SYNC_OUT(); return; L_08879460: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088794C4; } @@ -4357,7 +4195,6 @@ L_08879474: L_08879480: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879498; } @@ -4390,7 +4227,6 @@ L_088794AC: AOT_REGCACHE_SYNC_OUT(); return; L_088794BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887959C; } @@ -4404,7 +4240,6 @@ L_088794C4: L_088794CC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08879534; } @@ -4426,7 +4261,6 @@ L_088794E4: L_088794F0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879508; } @@ -4459,7 +4293,6 @@ L_0887951C: AOT_REGCACHE_SYNC_OUT(); return; L_0887952C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887959C; } @@ -4473,7 +4306,6 @@ L_08879534: L_0887953C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0887959C; } @@ -4497,7 +4329,6 @@ L_08879554: L_08879560: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879578; } @@ -4559,7 +4390,6 @@ L_088795CC: L_088795D8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088795F0; } @@ -4611,7 +4441,6 @@ L_08879628: L_08879634: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887964C; } @@ -4684,7 +4513,6 @@ L_088796AC: goto L_088796B4; L_088796B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088796D0; } @@ -4733,7 +4561,6 @@ L_08879704: L_08879710: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879728; } @@ -4823,7 +4650,6 @@ L_088797B0: goto L_088797B4; L_088797B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088797D0; } @@ -4870,7 +4696,6 @@ L_08879800: L_0887980C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879824; } @@ -4918,7 +4743,6 @@ L_08879850: L_0887985C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879874; } @@ -4987,7 +4811,6 @@ L_088798C4: goto L_088798CC; L_088798CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887992C; } @@ -5009,7 +4832,6 @@ L_088798E0: L_088798EC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879904; } @@ -5041,7 +4863,6 @@ L_08879914: AOT_REGCACHE_SYNC_OUT(); return; L_08879924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088799CC; } @@ -5081,7 +4902,6 @@ L_08879954: goto L_0887995C; L_0887995C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088799BC; } @@ -5105,7 +4925,6 @@ L_08879970: L_0887997C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08879994; } @@ -5137,7 +4956,6 @@ L_088799A4: AOT_REGCACHE_SYNC_OUT(); return; L_088799B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088799CC; } @@ -5166,7 +4984,6 @@ L_088799D4: L_088799DC: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08879A98; } @@ -5214,7 +5031,6 @@ L_08879A30: L_08879A3C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08879A54; } @@ -5273,7 +5089,6 @@ L_08879A98: L_08879AA0: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08879C74; } @@ -5322,7 +5137,6 @@ L_08879AF8: L_08879B04: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08879B1C; } @@ -5390,7 +5204,6 @@ L_08879B7C: L_08879B88: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08879BA0; } @@ -5432,7 +5245,6 @@ L_08879BC8: AOT_REGCACHE_SYNC_OUT(); return; L_08879BD0: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08879C1C; } @@ -5467,7 +5279,6 @@ L_08879C04: AOT_REGCACHE_SYNC_OUT(); return; L_08879C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08879C6C; } @@ -5491,7 +5302,6 @@ L_08879C28: L_08879C34: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879C4C; } @@ -5537,7 +5347,6 @@ L_08879C74: L_08879C7C: ctx.gpr[16] = (0u | 4u); { const bool branch_taken = aot_gpr_2 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08879DF4; } @@ -5592,7 +5401,6 @@ L_08879CD4: L_08879CE0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879CF8; } @@ -5641,7 +5449,6 @@ L_08879D1C: L_08879D28: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08879D40; } @@ -5702,7 +5509,6 @@ L_08879D88: L_08879D94: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879DAC; } @@ -5762,7 +5568,6 @@ L_08879DF4: L_08879DFC: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08879F08; } @@ -5796,7 +5601,6 @@ L_08879E2C: L_08879E3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7868))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08879E6C; } @@ -5817,7 +5621,6 @@ L_08879E54: AOT_REGCACHE_SYNC_OUT(); return; L_08879E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08879E88; } @@ -5858,7 +5661,6 @@ L_08879EA0: L_08879EAC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08879EC4; } @@ -5917,7 +5719,6 @@ L_08879F08: L_08879F10: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0887A454; } @@ -5931,7 +5732,6 @@ L_08879F1C: L_08879F24: aot_gpr_4 = (0u | 7u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0887A21C; } @@ -5964,7 +5764,6 @@ L_08879F54: L_08879F60: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08879F78; } @@ -6042,7 +5841,6 @@ L_08879FE0: AOT_REGCACHE_SYNC_OUT(); return; L_08879FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887A04C; } @@ -6066,7 +5864,6 @@ L_0887A004: L_0887A010: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A028; } @@ -6121,7 +5918,6 @@ L_0887A06C: L_0887A078: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A090; } @@ -6163,7 +5959,6 @@ L_0887A0B8: AOT_REGCACHE_SYNC_OUT(); return; L_0887A0C0: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_0887A1C0; } @@ -6208,7 +6003,6 @@ L_0887A100: L_0887A10C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887A124; } @@ -6256,7 +6050,6 @@ L_0887A144: L_0887A150: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887A168; } @@ -6311,7 +6104,6 @@ L_0887A1A8: AOT_REGCACHE_SYNC_OUT(); return; L_0887A1B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887A210; } @@ -6335,7 +6127,6 @@ L_0887A1CC: L_0887A1D8: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A1F0; } @@ -6382,7 +6173,6 @@ L_0887A21C: L_0887A224: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0887A2E0; } @@ -6430,7 +6220,6 @@ L_0887A278: L_0887A284: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A29C; } @@ -6489,7 +6278,6 @@ L_0887A2E0: L_0887A2E8: aot_gpr_4 = (0u | 9u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0887A454; } @@ -6523,7 +6311,6 @@ L_0887A31C: L_0887A328: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887A340; } @@ -6564,7 +6351,6 @@ L_0887A368: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887A3EC; } @@ -6586,7 +6372,6 @@ L_0887A38C: L_0887A398: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887A3B0; } @@ -6626,7 +6411,6 @@ L_0887A3D4: AOT_REGCACHE_SYNC_OUT(); return; L_0887A3E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887A450; } @@ -6648,7 +6432,6 @@ L_0887A3F8: L_0887A404: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887A41C; } @@ -6695,7 +6478,6 @@ L_0887A454: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887A560; } @@ -6731,7 +6513,6 @@ L_0887A49C: L_0887A4A8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887A4C0; } @@ -6782,7 +6563,6 @@ L_0887A4F4: L_0887A500: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887A518; } @@ -6830,7 +6610,6 @@ L_0887A560: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887A6DC; } @@ -6868,7 +6647,6 @@ L_0887A5B0: L_0887A5BC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A5D4; } @@ -6906,7 +6684,6 @@ L_0887A5F4: L_0887A5FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-7072))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887A674; } @@ -6928,7 +6705,6 @@ L_0887A614: L_0887A620: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A638; } @@ -6968,7 +6744,6 @@ L_0887A65C: AOT_REGCACHE_SYNC_OUT(); return; L_0887A66C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887A6D8; } @@ -6990,7 +6765,6 @@ L_0887A680: L_0887A68C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A6A4; } @@ -7049,7 +6823,6 @@ L_0887A6F4: goto L_0887A700; L_0887A700: aot_gpr_31 = (0x0887A708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887A708u) goto L_0887A708; AOT_REGCACHE_SYNC_OUT(); return; L_0887A708: @@ -7058,7 +6831,6 @@ L_0887A708: L_0887A70C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AB74; } @@ -7073,7 +6845,6 @@ L_0887A718: goto L_0887A724; L_0887A724: aot_gpr_31 = (0x0887A72Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887A72Cu) goto L_0887A72C; AOT_REGCACHE_SYNC_OUT(); return; L_0887A72C: @@ -7185,7 +6956,6 @@ L_0887A7EC: goto L_0887A7F0; L_0887A7F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AABC; } @@ -7220,7 +6990,6 @@ L_0887A818: AOT_REGCACHE_SYNC_OUT(); return; L_0887A834: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887A85C; } @@ -7253,7 +7022,6 @@ L_0887A868: L_0887A874: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887A88C; } @@ -7287,7 +7055,6 @@ L_0887A8A0: L_0887A8B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0887A8E0; } @@ -7305,7 +7072,6 @@ L_0887A8BC: AOT_REGCACHE_SYNC_OUT(); return; L_0887A8D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887A900; } @@ -7325,7 +7091,6 @@ L_0887A8E0: L_0887A900: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887A914; } @@ -7333,7 +7098,6 @@ L_0887A900: } L_0887A90C: aot_gpr_31 = (0x0887A914u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887A914u) goto L_0887A914; AOT_REGCACHE_SYNC_OUT(); return; L_0887A914: @@ -7354,7 +7118,6 @@ L_0887A928: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AA64; } @@ -7363,7 +7126,6 @@ L_0887A928: L_0887A940: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887A954; } @@ -7371,7 +7133,6 @@ L_0887A940: } L_0887A94C: aot_gpr_31 = (0x0887A954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887A954u) goto L_0887A954; AOT_REGCACHE_SYNC_OUT(); return; L_0887A954: @@ -7382,7 +7143,6 @@ L_0887A954: L_0887A95C: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AA64; } @@ -7393,7 +7153,6 @@ L_0887A968: goto L_0887A96C; L_0887A96C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887AA64; } @@ -7405,7 +7164,6 @@ L_0887A974: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AA0C; } @@ -7414,7 +7172,6 @@ L_0887A974: L_0887A98C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887A9A0; } @@ -7422,7 +7179,6 @@ L_0887A98C: } L_0887A998: aot_gpr_31 = (0x0887A9A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887A9A0u) goto L_0887A9A0; AOT_REGCACHE_SYNC_OUT(); return; L_0887A9A0: @@ -7433,7 +7189,6 @@ L_0887A9A0: L_0887A9A8: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AA0C; } @@ -7455,7 +7210,6 @@ L_0887A9C0: L_0887A9CC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887A9E4; } @@ -7487,7 +7241,6 @@ L_0887A9F4: AOT_REGCACHE_SYNC_OUT(); return; L_0887AA04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887AC24; } @@ -7509,7 +7262,6 @@ L_0887AA18: L_0887AA24: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887AA3C; } @@ -7541,7 +7293,6 @@ L_0887AA4C: AOT_REGCACHE_SYNC_OUT(); return; L_0887AA5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887AC24; } @@ -7563,7 +7314,6 @@ L_0887AA70: L_0887AA7C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887AA94; } @@ -7595,7 +7345,6 @@ L_0887AAA4: AOT_REGCACHE_SYNC_OUT(); return; L_0887AAB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887AC24; } @@ -7609,7 +7358,6 @@ L_0887AABC: L_0887AAC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0887AAF4; } @@ -7627,7 +7375,6 @@ L_0887AAD0: AOT_REGCACHE_SYNC_OUT(); return; L_0887AAEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887AB14; } @@ -7665,7 +7412,6 @@ L_0887AB28: L_0887AB34: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887AB4C; } @@ -7697,7 +7443,6 @@ L_0887AB5C: AOT_REGCACHE_SYNC_OUT(); return; L_0887AB6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887AC24; } @@ -7711,7 +7456,6 @@ L_0887AB74: L_0887AB7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0887ABAC; } @@ -7729,7 +7473,6 @@ L_0887AB88: AOT_REGCACHE_SYNC_OUT(); return; L_0887ABA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887ABCC; } @@ -7767,7 +7510,6 @@ L_0887ABE0: L_0887ABEC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887AC04; } @@ -7816,7 +7558,17 @@ L_0887AC24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887AC54: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(20), ctx.gpr[18]); @@ -7835,7 +7587,6 @@ L_0887AC54: } L_0887AC88: aot_gpr_31 = (0x0887AC90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887AC90u) goto L_0887AC90; AOT_REGCACHE_SYNC_OUT(); return; L_0887AC90: @@ -7860,7 +7611,6 @@ L_0887ACAC: AOT_REGCACHE_SYNC_OUT(); return; L_0887ACB4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0887AD18; } @@ -7875,7 +7625,6 @@ L_0887ACBC: goto L_0887ACC8; L_0887ACC8: aot_gpr_31 = (0x0887ACD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ACD0u) goto L_0887ACD0; AOT_REGCACHE_SYNC_OUT(); return; L_0887ACD0: @@ -7916,7 +7665,6 @@ L_0887AD04: goto L_0887AD08; L_0887AD08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887AD18; } @@ -7924,7 +7672,6 @@ L_0887AD08: } L_0887AD10: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0887AD78; } @@ -7933,7 +7680,6 @@ L_0887AD10: L_0887AD18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887AD2C; } @@ -7948,7 +7694,6 @@ L_0887AD2C: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(244), ctx.gpr[17]); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0887AD48; } @@ -7956,7 +7701,6 @@ L_0887AD2C: } L_0887AD3C: aot_gpr_31 = (0x0887AD44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887AD44u) goto L_0887AD44; AOT_REGCACHE_SYNC_OUT(); return; L_0887AD44: @@ -7983,7 +7727,6 @@ L_0887AD60: AOT_REGCACHE_SYNC_OUT(); return; L_0887AD70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887B048; } @@ -8015,7 +7758,6 @@ L_0887AD94: } L_0887ADA0: aot_gpr_31 = (0x0887ADA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ADA8u) goto L_0887ADA8; AOT_REGCACHE_SYNC_OUT(); return; L_0887ADA8: @@ -8130,7 +7872,6 @@ L_0887AE58: L_0887AE68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(228))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887AEEC; } @@ -8147,7 +7888,6 @@ L_0887AE74: } L_0887AE80: aot_gpr_31 = (0x0887AE88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887AE88u) goto L_0887AE88; AOT_REGCACHE_SYNC_OUT(); return; L_0887AE88: @@ -8155,7 +7895,6 @@ L_0887AE88: goto L_0887AE8C; L_0887AE8C: aot_gpr_31 = (0x0887AE94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 247u, 0x08A54F5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887AE94u) goto L_0887AE94; AOT_REGCACHE_SYNC_OUT(); return; L_0887AE94: @@ -8217,7 +7956,6 @@ L_0887AEFC: goto L_0887AF00; L_0887AF00: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887B038; } @@ -8252,7 +7990,6 @@ L_0887AF28: L_0887AF34: aot_gpr_4 = (aot_gpr_4 + static_cast(1801)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0887AF4C; } @@ -8260,7 +7997,6 @@ L_0887AF34: } L_0887AF40: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0887AF4C; } @@ -8272,7 +8008,6 @@ L_0887AF48: L_0887AF4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(252))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0887AFA4; } @@ -8302,7 +8037,6 @@ L_0887AF7C: L_0887AF88: aot_gpr_5 = (aot_gpr_5 + static_cast(1801)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887AFA0; } @@ -8310,7 +8044,6 @@ L_0887AF88: } L_0887AF94: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887AFA0; } @@ -8324,7 +8057,6 @@ L_0887AFA0: goto L_0887AFA4; L_0887AFA4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0887AFEC; } @@ -8349,7 +8081,6 @@ L_0887AFBC: L_0887AFC8: aot_gpr_5 = (aot_gpr_5 + static_cast(1801)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887AFEC; } @@ -8357,7 +8088,6 @@ L_0887AFC8: } L_0887AFD4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887AFEC; } @@ -8383,7 +8113,6 @@ L_0887AFEC: L_0887AFF4: aot_gpr_4 = (aot_gpr_4 + static_cast(1801)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0887B018; } @@ -8395,7 +8124,6 @@ L_0887B000: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(256), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 51 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B038; } @@ -8417,7 +8145,6 @@ L_0887B024: AOT_REGCACHE_SYNC_OUT(); return; L_0887B038: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887B048; } @@ -8445,7 +8172,17 @@ L_0887B048: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887B070: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(16), ctx.gpr[17]); @@ -8489,7 +8226,6 @@ L_0887B0BC: goto L_0887B0C8; L_0887B0C8: aot_gpr_31 = (0x0887B0D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B0D0u) goto L_0887B0D0; AOT_REGCACHE_SYNC_OUT(); return; L_0887B0D0: @@ -8538,7 +8274,6 @@ L_0887B110: goto L_0887B118; L_0887B118: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0887B140; } @@ -8547,7 +8282,6 @@ L_0887B118: L_0887B120: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(16)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887B140; } @@ -8594,7 +8328,6 @@ L_0887B16C: goto L_0887B170; L_0887B170: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887B20C; } @@ -8604,7 +8337,6 @@ L_0887B178: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887B1C0; } @@ -8612,7 +8344,6 @@ L_0887B178: } L_0887B188: { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_0887B1A4; } @@ -8631,7 +8362,6 @@ L_0887B1A0: L_0887B1A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B1B8; } @@ -8653,7 +8383,6 @@ L_0887B1C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887B20C; } @@ -8661,7 +8390,6 @@ L_0887B1C0: } L_0887B1D0: { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_0887B1EC; } @@ -8681,7 +8409,6 @@ L_0887B1EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887B204; } @@ -8703,7 +8430,6 @@ L_0887B20C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-26620))); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887B23C; } @@ -8712,7 +8438,6 @@ L_0887B20C: L_0887B21C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0887B23C; } @@ -8737,7 +8462,6 @@ L_0887B23C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887B270; } @@ -8751,7 +8475,6 @@ L_0887B25C: aot_gpr_6 = (aot_gpr_6 + static_cast(-1)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887B25C; } @@ -8769,7 +8492,6 @@ L_0887B270: goto L_0887B27C; L_0887B27C: aot_gpr_31 = (0x0887B284u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B284u) goto L_0887B284; AOT_REGCACHE_SYNC_OUT(); return; L_0887B284: @@ -8810,7 +8532,6 @@ L_0887B2B8: goto L_0887B2BC; L_0887B2BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887B680; } @@ -8848,7 +8569,6 @@ L_0887B2EC: goto L_0887B2F0; L_0887B2F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887B3B8; } @@ -8865,7 +8585,6 @@ L_0887B308: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(216))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887B340; } @@ -8874,7 +8593,6 @@ L_0887B308: L_0887B318: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B330; } @@ -8882,7 +8600,6 @@ L_0887B318: } L_0887B324: aot_gpr_31 = (0x0887B32Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B32Cu) goto L_0887B32C; AOT_REGCACHE_SYNC_OUT(); return; L_0887B32C: @@ -8890,7 +8607,6 @@ L_0887B32C: goto L_0887B330; L_0887B330: aot_gpr_31 = (0x0887B338u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 4u, 0x08A54034u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B338u) goto L_0887B338; AOT_REGCACHE_SYNC_OUT(); return; L_0887B338: @@ -8914,7 +8630,6 @@ L_0887B348: goto L_0887B354; L_0887B354: aot_gpr_31 = (0x0887B35Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B35Cu) goto L_0887B35C; AOT_REGCACHE_SYNC_OUT(); return; L_0887B35C: @@ -8927,7 +8642,6 @@ L_0887B360: AOT_REGCACHE_SYNC_OUT(); return; L_0887B368: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0887B3A8; } @@ -8936,7 +8650,6 @@ L_0887B368: L_0887B370: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(204))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0887B3A4; } @@ -8945,7 +8658,6 @@ L_0887B370: L_0887B37C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B394; } @@ -8953,7 +8665,6 @@ L_0887B37C: } L_0887B388: aot_gpr_31 = (0x0887B390u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B390u) goto L_0887B390; AOT_REGCACHE_SYNC_OUT(); return; L_0887B390: @@ -8966,7 +8677,6 @@ L_0887B394: AOT_REGCACHE_SYNC_OUT(); return; L_0887B39C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887B3B8; } @@ -8979,7 +8689,6 @@ L_0887B3A8: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B348; } @@ -8988,7 +8697,6 @@ L_0887B3A8: L_0887B3B8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0887B3D0; } @@ -8996,7 +8704,6 @@ L_0887B3B8: } L_0887B3C4: aot_gpr_31 = (0x0887B3CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B3CCu) goto L_0887B3CC; AOT_REGCACHE_SYNC_OUT(); return; L_0887B3CC: @@ -9033,7 +8740,6 @@ L_0887B3F0: goto L_0887B3F8; L_0887B3F8: aot_gpr_31 = (0x0887B400u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B400u) goto L_0887B400; AOT_REGCACHE_SYNC_OUT(); return; L_0887B400: @@ -9074,7 +8780,6 @@ L_0887B434: goto L_0887B438; L_0887B438: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B4E0; } @@ -9082,7 +8787,6 @@ L_0887B438: } L_0887B440: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0887B454; } @@ -9090,7 +8794,6 @@ L_0887B440: } L_0887B448: aot_gpr_31 = (0x0887B450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B450u) goto L_0887B450; AOT_REGCACHE_SYNC_OUT(); return; L_0887B450: @@ -9103,7 +8806,6 @@ L_0887B454: AOT_REGCACHE_SYNC_OUT(); return; L_0887B45C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0887B4AC; } @@ -9112,7 +8814,6 @@ L_0887B45C: L_0887B464: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B47C; } @@ -9120,7 +8821,6 @@ L_0887B464: } L_0887B470: aot_gpr_31 = (0x0887B478u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B478u) goto L_0887B478; AOT_REGCACHE_SYNC_OUT(); return; L_0887B478: @@ -9128,13 +8828,11 @@ L_0887B478: goto L_0887B47C; L_0887B47C: aot_gpr_31 = (0x0887B484u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 93u, 0x08A546D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B484u) goto L_0887B484; AOT_REGCACHE_SYNC_OUT(); return; L_0887B484: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887B498; } @@ -9148,7 +8846,6 @@ L_0887B490: L_0887B498: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887B4AC; } @@ -9192,7 +8889,6 @@ L_0887B4E0: goto L_0887B4E8; L_0887B4E8: aot_gpr_31 = (0x0887B4F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B4F0u) goto L_0887B4F0; AOT_REGCACHE_SYNC_OUT(); return; L_0887B4F0: @@ -9210,7 +8906,6 @@ L_0887B4F8: L_0887B500: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B52C; } @@ -9219,7 +8914,6 @@ L_0887B500: L_0887B50C: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(16)))))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0887B52C; } @@ -9270,7 +8964,6 @@ L_0887B558: goto L_0887B55C; L_0887B55C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887B680; } @@ -9288,7 +8981,6 @@ L_0887B578: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(224), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B594; } @@ -9296,7 +8988,6 @@ L_0887B578: } L_0887B588: aot_gpr_31 = (0x0887B590u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B590u) goto L_0887B590; AOT_REGCACHE_SYNC_OUT(); return; L_0887B590: @@ -9304,7 +8995,6 @@ L_0887B590: goto L_0887B594; L_0887B594: aot_gpr_31 = (0x0887B59Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 283u, 0x08A551F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B59Cu) goto L_0887B59C; AOT_REGCACHE_SYNC_OUT(); return; L_0887B59C: @@ -9328,7 +9018,6 @@ L_0887B5B4: goto L_0887B5C0; L_0887B5C0: aot_gpr_31 = (0x0887B5C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B5C8u) goto L_0887B5C8; AOT_REGCACHE_SYNC_OUT(); return; L_0887B5C8: @@ -9337,7 +9026,6 @@ L_0887B5C8: goto L_0887B5D0; L_0887B5D0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887B680; } @@ -9345,7 +9033,6 @@ L_0887B5D0: } L_0887B5D8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B5EC; } @@ -9353,7 +9040,6 @@ L_0887B5D8: } L_0887B5E0: aot_gpr_31 = (0x0887B5E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B5E8u) goto L_0887B5E8; AOT_REGCACHE_SYNC_OUT(); return; L_0887B5E8: @@ -9361,7 +9047,6 @@ L_0887B5E8: goto L_0887B5EC; L_0887B5EC: aot_gpr_31 = (0x0887B5F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 247u, 0x08A54F5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B5F4u) goto L_0887B5F4; AOT_REGCACHE_SYNC_OUT(); return; L_0887B5F4: @@ -9394,7 +9079,6 @@ L_0887B624: AOT_REGCACHE_SYNC_OUT(); return; L_0887B634: aot_gpr_31 = (0x0887B63Cu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_0887B63C: @@ -9432,7 +9116,17 @@ L_0887B680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887B698: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-288)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7872))); @@ -9468,7 +9162,6 @@ L_0887B704: L_0887B710: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7868))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0887B720; } @@ -9518,7 +9211,6 @@ L_0887B764: L_0887B770: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887B788; } @@ -9571,7 +9263,6 @@ L_0887B7BC: L_0887B7C8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887B7E0; } @@ -9618,7 +9309,6 @@ L_0887B810: L_0887B81C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887B834; } @@ -9665,7 +9355,6 @@ L_0887B864: L_0887B870: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887B888; } @@ -9712,7 +9401,6 @@ L_0887B8B8: L_0887B8C4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887B8DC; } @@ -9760,7 +9448,6 @@ L_0887B918: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887B93C; } @@ -9824,7 +9511,6 @@ L_0887B974: L_0887B9C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B9D8; } @@ -9832,7 +9518,6 @@ L_0887B9C0: } L_0887B9CC: aot_gpr_31 = (0x0887B9D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887B9D4u) goto L_0887B9D4; AOT_REGCACHE_SYNC_OUT(); return; L_0887B9D4: @@ -9846,7 +9531,6 @@ L_0887B9D8: L_0887B9E0: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0887BCDC; } @@ -9857,7 +9541,6 @@ L_0887B9EC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); aot_gpr_5 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887BCD8; } @@ -9867,7 +9550,6 @@ L_0887BA00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(212))); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887BCD8; } @@ -9884,7 +9566,6 @@ L_0887BA10: } L_0887BA1C: aot_gpr_31 = (0x0887BA24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887BA24u) goto L_0887BA24; AOT_REGCACHE_SYNC_OUT(); return; L_0887BA24: @@ -9901,7 +9582,6 @@ L_0887BA34: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887BA60; } @@ -9916,7 +9596,6 @@ L_0887BA48: AOT_REGCACHE_SYNC_OUT(); return; L_0887BA58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887BABC; } @@ -9938,7 +9617,6 @@ L_0887BA6C: L_0887BA78: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887BA90; } @@ -10042,7 +9720,6 @@ L_0887BB4C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887BB60; } @@ -10093,7 +9770,6 @@ L_0887BBA4: L_0887BBB0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887BBC8; } @@ -10134,7 +9810,6 @@ L_0887BBEC: L_0887BBFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887BC34; } @@ -10149,7 +9824,6 @@ L_0887BC08: L_0887BC14: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0887BC2C; } @@ -10214,7 +9888,6 @@ L_0887BC8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7868))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887BCA0; } @@ -10261,7 +9934,6 @@ L_0887BCDC: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887B9C0; } @@ -10272,7 +9944,6 @@ L_0887BCEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(216))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887BD10; } @@ -10326,7 +9997,6 @@ L_0887BD4C: L_0887BD58: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887BD70; } @@ -10390,7 +10060,6 @@ L_0887BDBC: L_0887BDC8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887BDE0; } @@ -10423,7 +10092,6 @@ L_0887BDF0: L_0887BE00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(208))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0887BEA4; } @@ -10478,7 +10146,6 @@ L_0887BE88: aot_gpr_5 = (aot_gpr_4 - aot_gpr_5); aot_gpr_5 = (aot_gpr_5 < static_cast(1201) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887BEA4; } @@ -10492,7 +10159,6 @@ L_0887BEA4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(216))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887BF50; } @@ -10547,7 +10213,6 @@ L_0887BF34: aot_gpr_5 = (aot_gpr_4 - aot_gpr_5); aot_gpr_5 = (aot_gpr_5 < static_cast(1201) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0887BF50; } @@ -10580,7 +10245,17 @@ L_0887BF50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887BF94: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-384)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(364), ctx.gpr[22]); @@ -10601,7 +10276,6 @@ L_0887BF94: } L_0887BFD4: aot_gpr_31 = (0x0887BFDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887BFDCu) goto L_0887BFDC; AOT_REGCACHE_SYNC_OUT(); return; L_0887BFDC: @@ -10621,7 +10295,6 @@ L_0887BFE8: } L_0887BFF4: aot_gpr_31 = (0x0887BFFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887BFFCu) goto L_0887BFFC; AOT_REGCACHE_SYNC_OUT(); return; L_0887BFFC: diff --git a/profiles/vcs/generated/generated_unit_0030.cpp b/profiles/vcs/generated/generated_unit_0030.cpp index fef246e..913d6e4 100644 --- a/profiles/vcs/generated/generated_unit_0030.cpp +++ b/profiles/vcs/generated/generated_unit_0030.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0030[4082] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 4, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 8, 0, 9, 0, 0, 10, 0, 11, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 15, 0, 16, 0, 0, 17, 0, 18, - 19, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 23, 0, 24, 0, 0, 25, 0, 0, 0, 0, 26, 0, 27, 0, 0, 0, 28, 0, - 0, 0, 29, 0, 0, 0, 30, 31, 32, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 36, 37, 38, 0, 39, 0, 0, - 40, 0, 41, 42, 0, 43, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, - 0, 48, 0, 0, 0, 49, 0, 0, 0, 50, 51, 52, 0, 53, 0, 54, 0, 0, 0, 55, 0, 56, 0, 0, 57, 0, 58, 59, 0, 0, 60, 0, - 0, 61, 0, 62, 0, 0, 0, 63, 0, 0, 0, 64, 0, 65, 66, 0, 67, 0, 68, 0, 0, 69, 0, 70, 71, 0, 0, 72, 0, 73, 0, 0, - 74, 0, 75, 76, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, - 84, 85, 86, 0, 87, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 91, 92, 93, 0, 0, 0, - 94, 0, 0, 95, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 102, - 0, 103, 0, 104, 0, 0, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 107, 108, 109, 0, 110, 0, 0, 0, 111, 0, 0, 0, 0, 112, 0, 0, - 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 115, 0, 0, 0, 116, 117, 118, 0, 0, 0, 119, 0, 0, - 120, 0, 121, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, 125, 126, 127, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, - 130, 0, 0, 0, 131, 132, 133, 0, 0, 0, 0, 134, 0, 0, 135, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 145, 0, - 146, 147, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 0, 152, - 0, 0, 0, 153, 0, 154, 0, 155, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 158, 0, 0, 0, 159, 0, 0, 0, 160, 161, 162, 0, 163, - 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 168, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 174, 0, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, - 178, 0, 0, 179, 0, 180, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 184, 0, 185, 0, 186, 0, 0, 187, 0, 188, 0, 189, 0, 190, 0, 0, - 191, 0, 192, 193, 0, 194, 0, 195, 0, 196, 0, 0, 197, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, - 0, 0, 202, 0, 203, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 207, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 0, 210, 0, - 211, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, - 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 228, 0, 0, 229, 0, 0, - 230, 0, 231, 232, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 242, 0, 0, 0, 0, 0, 0, - 0, 243, 0, 0, 0, 244, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, - 0, 257, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 262, 0, 0, 0, 0, 263, 0, 0, 0, 0, - 264, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, - 0, 0, 269, 0, 0, 0, 0, 270, 271, 0, 0, 272, 0, 0, 0, 273, 0, 274, 0, 275, 0, 0, 276, 0, 277, 0, 0, 278, 0, 0, 0, 0, - 0, 279, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 287, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, - 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, - 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 305, - 0, 306, 0, 307, 0, 308, 0, 0, 309, 0, 0, 0, 0, 310, 0, 0, 311, 0, 0, 0, 312, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 0, - 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 0, 0, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, - 322, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 338, 0, 339, 0, 340, 0, 0, 341, 0, - 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 346, 0, 0, 0, - 0, 0, 347, 0, 0, 0, 0, 0, 348, 349, 0, 350, 0, 0, 0, 351, 0, 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 0, 0, 0, 356, 0, - 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 362, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, - 0, 0, 0, 369, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 371, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, 382, 0, 383, 0, 384, 385, 0, - 0, 0, 0, 0, 0, 386, 387, 0, 0, 0, 388, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 392, 0, 0, - 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 400, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 402, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 414, 0, 415, 416, 0, 0, 417, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, - 0, 0, 421, 0, 422, 423, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, 428, 429, - 0, 430, 0, 0, 0, 0, 431, 0, 432, 433, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, - 438, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 443, 0, 444, 445, 0, 446, 0, 0, - 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 449, 0, 450, 451, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, - 454, 455, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 459, 0, 460, 461, 0, 462, 0, 0, 0, 0, - 463, 0, 464, 465, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 469, 0, 470, 471, - 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 475, 0, 0, 476, 0, 477, 478, 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 482, 0, 0, 483, 0, 484, 485, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 489, 0, 0, 490, 0, 491, 492, 0, 493, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 496, 0, 0, 497, 0, 498, 499, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 505, 506, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, 512, 513, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 518, 0, 519, 520, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 526, 527, 0, 528, 0, 0, 529, 0, 530, 531, - 0, 532, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 537, - 0, 538, 0, 539, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, - 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, 0, 0, 549, 0, 0, 0, 0, 550, - 0, 551, 0, 552, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 555, 0, 556, 0, 0, 557, 0, 0, - 0, 0, 0, 558, 0, 0, 0, 559, 0, 560, 561, 0, 562, 0, 0, 563, 0, 0, 564, 0, 565, 0, 0, 566, 0, 567, 568, 0, 0, 0, 0, 0, - 0, 569, 0, 0, 0, 570, 0, 571, 572, 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 576, 577, 0, 0, 578, 0, 579, 0, 0, 580, 0, 581, 582, - 0, 583, 0, 0, 584, 0, 0, 585, 0, 586, 587, 0, 0, 588, 0, 589, 0, 0, 590, 0, 591, 592, 0, 0, 593, 0, 0, 0, 0, 594, 0, 0, - 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 598, 0, 0, 599, 0, 0, 0, - 0, 0, 600, 0, 0, 0, 601, 0, 602, 603, 0, 604, 0, 0, 605, 0, 0, 606, 0, 607, 0, 0, 608, 0, 609, 610, 0, 0, 0, 0, 0, 0, - 611, 0, 0, 0, 612, 0, 613, 614, 0, 615, 0, 0, 0, 616, 0, 0, 617, 0, 618, 619, 0, 0, 620, 0, 621, 0, 0, 622, 0, 623, 624, 0, - 625, 0, 0, 626, 0, 0, 627, 0, 628, 629, 0, 0, 630, 0, 631, 0, 0, 632, 0, 633, 634, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, 0, - 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 641, 0, - 0, 0, 0, 642, 643, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, - 0, 647, 0, 0, 0, 0, 0, 648, 0, 0, 649, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, - 655, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 660, 0, 0, 661, 0, 662, 0, 0, - 663, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 671, 0, 672, 0, 673, 0, 674, 0, 675, 0, 0, 0, 0, 676, 0, - 0, 677, 0, 0, 678, 0, 0, 679, 0, 680, 0, 681, 0, 0, 682, 0, 0, 683, 0, 0, 684, 0, 685, 0, 686, 0, 687, 0, 688, 0, 0, 689, - 0, 690, 0, 0, 691, 0, 692, 0, 693, 0, 694, 0, 0, 695, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, - 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 701, 0, 0, 702, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 704, 0, 0, 0, 0, - 0, 705, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, 0, 0, 709, 0, 0, 710, 0, - 0, 0, 711, 0, 0, 712, 0, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 717, 0, 718, 0, 0, 719, 0, 0, 0, 720, 0, 0, 721, 0, 0, 722, 0, 0, 0, 0, 723, 0, - 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 0, 0, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 0, 729, - 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 731, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, - 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 737, 0, 738, 0, 0, 0, 0, 0, 0, 739, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 744, 0, 745, 0, 0, 0, 0, - 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 748, 0, 0, 0, 0, 0, - 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 752, 0, 0, 0, 0, - 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 755, 0, - 0, 0, 0, 0, 0, 0, 0, 756, 0, 757, 758, 0, 0, 0, 0, 0, 759, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, - 0, 0, 763, 0, 0, 764, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 767, 768, 0, 0, 0, 0, 769, 0, 0, - 770, 0, 0, 771, 0, 772, 773, 0, 0, 774, 0, 775, 0, 0, 0, 776, 777, 0, 0, 778, 0, 0, 0, 0, 779, 780, 0, 781, 0, 0, 782, 0, - 0, 0, 783, 0, 784, 0, 0, 785, 0, 786, 0, 0, 0, 0, 787, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 0, - 793, 0, 0, 794, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 797, 0, 0, 798, 0, 0, 799, 0, 0, 800, 0, - 801, 0, 802, 0, 0, 0, 803, 0, 804, 0, 0, 0, 0, 805, 0, 806, 0, 0, 0, 0, 0, 807, 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, - 810, 0, 811, 0, 0, 0, 0, 812, 0, 813, 0, 0, 0, 0, 0, 814, 0, 815, 0, 0, 0, 0, 816, 0, 0, 0, 817, 0, 818, 0, 0, 0, - 819, 0, 820, 0, 821, 0, 822, 823, 0, 824, 0, 825, 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, - 0, 829, 0, 0, 830, 0, 831, 0, 0, 0, 0, 832, 0, 833, 0, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 0, 836, 0, 0, 0, 0, 837, - 0, 0, 0, 838, 0, 0, 839, 0, 0, 840, 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 0, 0, 846, 0, 0, 847, 0, 0, 0, - 0, 0, 848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 849, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0030[64] = { + 0xA548000152A41A41ull, 0x4509440000000105ull, 0x110010AD2E1085C4ull, 0x29A5688A4D28AE22ull, + 0x1C440097110A904Dull, 0x2117110A92011119ull, 0x108E221523888008ull, 0x4904922000054871ull, + 0xB88844A892020013ull, 0x4842802002B48044ull, 0x208A12AD2A95A429ull, 0x142850A142850A14ull, + 0x0014042D2488550Aull, 0x010000A202802904ull, 0x2008200000028000ull, 0x0852020AA00A0100ull, + 0x094A898440040109ull, 0x0000000844092082ull, 0x0020040822080242ull, 0x0400000201081200ull, + 0x0551212AA0004200ull, 0x0082482100C48012ull, 0x0000000024104128ull, 0x104280044AA21000ull, + 0x0010014041528B04ull, 0x8800000001000000ull, 0x00A8000000000000ull, 0x00000018A0200000ull, + 0x6A82500000A81412ull, 0x2100000020000C60ull, 0x8080000045041540ull, 0x0000080000100000ull, + 0x000000000005100Aull, 0x0080010000C00000ull, 0xD20080B48020109Aull, 0x2D20080B48020B42ull, + 0x0B48020B40B48020ull, 0x00404002D200082Dull, 0x01020B48008105A4ull, 0x04082D2002041690ull, + 0x1020B48008105A40ull, 0xD2D2002040016900ull, 0xA000802A8800810Aull, 0x2520008A84542001ull, + 0xD29A45A206949688ull, 0x129000402134A692ull, 0x694D22D1034A4B44ull, 0x48402020109A5349ull, + 0x2122148204002118ull, 0x2104210129042405ull, 0x95524A9242AA4008ull, 0x0840904202092552ull, + 0x0040422449040012ull, 0x8120904042489410ull, 0x0000108100840500ull, 0x0A2040800000140Aull, + 0x0C00400206000001ull, 0x8809068060000010ull, 0x4B098A6921A00124ull, 0x0280060000044294ull, + 0x10A0A14549220109ull, 0x08480AD514428285ull, 0x10100A4884282852ull, 0x0002000412088000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0030[64] = { + 1u, 19u, 29u, 48u, 74u, 94u, 113u, 130u, 146u, 164u, 178u, 202u, 220u, 237u, 247u, 252u, + 264u, 279u, 287u, 296u, 302u, 316u, 328u, 335u, 347u, 360u, 363u, 366u, 371u, 386u, 393u, 403u, + 405u, 410u, 414u, 430u, 447u, 463u, 475u, 489u, 503u, 517u, 532u, 544u, 558u, 583u, 600u, 625u, + 642u, 655u, 669u, 690u, 705u, 716u, 730u, 737u, 746u, 753u, 763u, 783u, 793u, 810u, 829u, 844u, }; void recomp_unit_0030_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0030_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0887C004u; - entry_id = (entry_delta < 16328u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0030[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16328u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0030[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0030[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0887C004; @@ -1026,7 +933,6 @@ L_0887C004: aot_gpr_4 = (aot_gpr_4 ^ 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887C0EC; } @@ -1041,7 +947,6 @@ L_0887C01C: goto L_0887C028; L_0887C028: aot_gpr_31 = (0x0887C030u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C030u) goto L_0887C030; AOT_REGCACHE_SYNC_OUT(); return; L_0887C030: @@ -1053,7 +958,6 @@ L_0887C034: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C0EC; } @@ -1062,7 +966,6 @@ L_0887C034: L_0887C04C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887C060; } @@ -1070,7 +973,6 @@ L_0887C04C: } L_0887C058: aot_gpr_31 = (0x0887C060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C060u) goto L_0887C060; AOT_REGCACHE_SYNC_OUT(); return; L_0887C060: @@ -1089,7 +991,6 @@ L_0887C068: } L_0887C074: aot_gpr_31 = (0x0887C07Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C07Cu) goto L_0887C07C; AOT_REGCACHE_SYNC_OUT(); return; L_0887C07C: @@ -1122,7 +1023,6 @@ L_0887C084: L_0887C0D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887C0E4; } @@ -1130,7 +1030,6 @@ L_0887C0D0: } L_0887C0DC: aot_gpr_31 = (0x0887C0E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C0E4u) goto L_0887C0E4; AOT_REGCACHE_SYNC_OUT(); return; L_0887C0E4: @@ -1147,7 +1046,6 @@ L_0887C0EC: goto L_0887C0F8; L_0887C0F8: aot_gpr_31 = (0x0887C100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C100u) goto L_0887C100; AOT_REGCACHE_SYNC_OUT(); return; L_0887C100: @@ -1219,7 +1117,6 @@ L_0887C1AC: } L_0887C1BC: aot_gpr_31 = (0x0887C1C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C1C4u) goto L_0887C1C4; AOT_REGCACHE_SYNC_OUT(); return; L_0887C1C4: @@ -1238,7 +1135,6 @@ L_0887C1D0: AOT_REGCACHE_SYNC_OUT(); return; L_0887C1E4: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_0887C41C; } @@ -1325,7 +1221,6 @@ L_0887C26C: goto L_0887C270; L_0887C270: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C2E4; } @@ -1340,7 +1235,6 @@ L_0887C278: goto L_0887C284; L_0887C284: aot_gpr_31 = (0x0887C28Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C28Cu) goto L_0887C28C; AOT_REGCACHE_SYNC_OUT(); return; L_0887C28C: @@ -1353,7 +1247,6 @@ L_0887C290: AOT_REGCACHE_SYNC_OUT(); return; L_0887C298: aot_gpr_31 = (0x0887C2A0u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_0887C2A0: @@ -1421,7 +1314,6 @@ L_0887C32C: goto L_0887C330; L_0887C330: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887C340; } @@ -1429,7 +1321,6 @@ L_0887C330: } L_0887C338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887C350; } @@ -1447,7 +1338,6 @@ L_0887C340: } L_0887C350: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C41C; } @@ -1462,7 +1352,6 @@ L_0887C358: goto L_0887C364; L_0887C364: aot_gpr_31 = (0x0887C36Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C36Cu) goto L_0887C36C; AOT_REGCACHE_SYNC_OUT(); return; L_0887C36C: @@ -1485,7 +1374,6 @@ L_0887C37C: AOT_REGCACHE_SYNC_OUT(); return; L_0887C388: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887C3CC; } @@ -1495,7 +1383,6 @@ L_0887C390: ctx.gpr[17] = (ctx.gpr[30] + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(228))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887C41C; } @@ -1511,7 +1398,6 @@ L_0887C3A0: goto L_0887C3B0; L_0887C3B0: aot_gpr_31 = (0x0887C3B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C3B8u) goto L_0887C3B8; AOT_REGCACHE_SYNC_OUT(); return; L_0887C3B8: @@ -1524,7 +1410,6 @@ L_0887C3BC: AOT_REGCACHE_SYNC_OUT(); return; L_0887C3C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887C41C; } @@ -1539,7 +1424,6 @@ L_0887C3CC: goto L_0887C3D8; L_0887C3D8: aot_gpr_31 = (0x0887C3E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C3E0u) goto L_0887C3E0; AOT_REGCACHE_SYNC_OUT(); return; L_0887C3E0: @@ -1548,7 +1432,6 @@ L_0887C3E0: L_0887C3E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C41C; } @@ -1556,7 +1439,6 @@ L_0887C3E4: } L_0887C3F0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0887C41C; } @@ -1571,7 +1453,6 @@ L_0887C3F8: goto L_0887C404; L_0887C404: aot_gpr_31 = (0x0887C40Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C40Cu) goto L_0887C40C; AOT_REGCACHE_SYNC_OUT(); return; L_0887C40C: @@ -1602,7 +1483,6 @@ L_0887C434: } L_0887C440: aot_gpr_31 = (0x0887C448u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C448u) goto L_0887C448; AOT_REGCACHE_SYNC_OUT(); return; L_0887C448: @@ -1716,7 +1596,6 @@ L_0887C4F4: L_0887C504: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887C514; } @@ -1782,7 +1661,6 @@ L_0887C574: } L_0887C580: aot_gpr_31 = (0x0887C588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C588u) goto L_0887C588; AOT_REGCACHE_SYNC_OUT(); return; L_0887C588: @@ -1827,7 +1705,6 @@ L_0887C5C8: goto L_0887C5CC; L_0887C5CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C5E4; } @@ -1904,7 +1781,6 @@ L_0887C668: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C798; } @@ -1921,7 +1797,6 @@ L_0887C678: } L_0887C684: aot_gpr_31 = (0x0887C68Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C68Cu) goto L_0887C68C; AOT_REGCACHE_SYNC_OUT(); return; L_0887C68C: @@ -1968,7 +1843,6 @@ L_0887C6D0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C798; } @@ -2014,7 +1888,6 @@ L_0887C71C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[22]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C798; } @@ -2023,7 +1896,6 @@ L_0887C71C: L_0887C730: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887C744; } @@ -2031,7 +1903,6 @@ L_0887C730: } L_0887C73C: aot_gpr_31 = (0x0887C744u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C744u) goto L_0887C744; AOT_REGCACHE_SYNC_OUT(); return; L_0887C744: @@ -2074,7 +1945,6 @@ L_0887C798: L_0887C7A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0887C808; } @@ -2083,7 +1953,6 @@ L_0887C7A8: L_0887C7B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887C808; } @@ -2092,7 +1961,6 @@ L_0887C7B4: L_0887C7C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C808; } @@ -2119,7 +1987,6 @@ L_0887C7E4: L_0887C7F0: aot_gpr_5 = (aot_gpr_5 + static_cast(1801)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887C808; } @@ -2127,7 +1994,6 @@ L_0887C7F0: } L_0887C7FC: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887C808; } @@ -2184,7 +2050,6 @@ L_0887C868: L_0887C874: aot_gpr_5 = (aot_gpr_5 + static_cast(1801)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0887C898; } @@ -2223,7 +2088,6 @@ L_0887C8AC: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(244), ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(324))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0887C968; } @@ -2266,7 +2130,6 @@ L_0887C8F4: goto L_0887C8F8; L_0887C8F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887C968; } @@ -2308,7 +2171,6 @@ L_0887C940: goto L_0887C94C; L_0887C94C: aot_gpr_31 = (0x0887C954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887C954u) goto L_0887C954; AOT_REGCACHE_SYNC_OUT(); return; L_0887C954: @@ -2342,7 +2204,17 @@ L_0887C968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887C998: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2358,7 +2230,6 @@ L_0887C998: AOT_REGCACHE_SYNC_OUT(); return; L_0887C9C0: aot_gpr_31 = (0x0887C9C8u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_0887C9C8: @@ -2383,7 +2254,6 @@ L_0887C9DC: L_0887C9F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(244))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887CA04; } @@ -2397,7 +2267,6 @@ L_0887C9FC: L_0887CA04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887CA18; } @@ -2419,7 +2288,6 @@ L_0887CA18: L_0887CA2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887CA44; } @@ -2427,7 +2295,6 @@ L_0887CA2C: } L_0887CA38: aot_gpr_31 = (0x0887CA40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CA40u) goto L_0887CA40; AOT_REGCACHE_SYNC_OUT(); return; L_0887CA40: @@ -2435,7 +2302,6 @@ L_0887CA40: goto L_0887CA44; L_0887CA44: aot_gpr_31 = (0x0887CA4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 255u, 0x08A54FE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CA4Cu) goto L_0887CA4C; AOT_REGCACHE_SYNC_OUT(); return; L_0887CA4C: @@ -2451,7 +2317,6 @@ L_0887CA54: AOT_REGCACHE_SYNC_OUT(); return; L_0887CA60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887CA78; } @@ -2469,7 +2334,6 @@ L_0887CA70: L_0887CA78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887CA90; } @@ -2477,7 +2341,6 @@ L_0887CA78: } L_0887CA84: aot_gpr_31 = (0x0887CA8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CA8Cu) goto L_0887CA8C; AOT_REGCACHE_SYNC_OUT(); return; L_0887CA8C: @@ -2485,23 +2348,19 @@ L_0887CA8C: goto L_0887CA90; L_0887CA90: aot_gpr_31 = (0x0887CA98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 42u, 0x08A54358u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CA98u) goto L_0887CA98; AOT_REGCACHE_SYNC_OUT(); return; L_0887CA98: aot_gpr_31 = (0x0887CAA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 1005u, 0x08AC3C94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CAA0u) goto L_0887CAA0; AOT_REGCACHE_SYNC_OUT(); return; L_0887CAA0: aot_gpr_31 = (0x0887CAA8u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_0887CAA8: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887CAC8; } @@ -2524,7 +2383,6 @@ L_0887CAD0: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (ctx.gpr[17] < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887CC10; } @@ -2536,11 +2394,20 @@ L_0887CAE0: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[17]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23944))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CAF8: aot_gpr_4 = (ctx.gpr[28] + static_cast(-26548)); aot_gpr_6 = (ctx.gpr[28] + static_cast(-26536)); @@ -2551,7 +2418,6 @@ L_0887CAF8: AOT_REGCACHE_SYNC_OUT(); return; L_0887CB0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2567,7 +2433,6 @@ L_0887CB14: AOT_REGCACHE_SYNC_OUT(); return; L_0887CB28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2583,7 +2448,6 @@ L_0887CB30: AOT_REGCACHE_SYNC_OUT(); return; L_0887CB44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2599,7 +2463,6 @@ L_0887CB4C: AOT_REGCACHE_SYNC_OUT(); return; L_0887CB60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2615,7 +2478,6 @@ L_0887CB68: AOT_REGCACHE_SYNC_OUT(); return; L_0887CB7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2631,7 +2493,6 @@ L_0887CB84: AOT_REGCACHE_SYNC_OUT(); return; L_0887CB98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2647,7 +2508,6 @@ L_0887CBA0: AOT_REGCACHE_SYNC_OUT(); return; L_0887CBB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2663,7 +2523,6 @@ L_0887CBBC: AOT_REGCACHE_SYNC_OUT(); return; L_0887CBD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2679,7 +2538,6 @@ L_0887CBD8: AOT_REGCACHE_SYNC_OUT(); return; L_0887CBEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2695,7 +2553,6 @@ L_0887CBF4: AOT_REGCACHE_SYNC_OUT(); return; L_0887CC08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CC24; } @@ -2716,7 +2573,6 @@ L_0887CC24: AOT_REGCACHE_SYNC_OUT(); return; L_0887CC2C: aot_gpr_31 = (0x0887CC34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 110u, 0x08870784u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CC34u) goto L_0887CC34; AOT_REGCACHE_SYNC_OUT(); return; L_0887CC34: @@ -2754,7 +2610,6 @@ L_0887CC6C: L_0887CC78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887CC90; } @@ -2762,7 +2617,6 @@ L_0887CC78: } L_0887CC84: aot_gpr_31 = (0x0887CC8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CC8Cu) goto L_0887CC8C; AOT_REGCACHE_SYNC_OUT(); return; L_0887CC8C: @@ -2770,7 +2624,6 @@ L_0887CC8C: goto L_0887CC90; L_0887CC90: aot_gpr_31 = (0x0887CC98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 730u, 0x08A53CC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CC98u) goto L_0887CC98; AOT_REGCACHE_SYNC_OUT(); return; L_0887CC98: @@ -2796,14 +2649,33 @@ L_0887CCAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CCCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CCD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (0u | 1u); @@ -2828,7 +2700,6 @@ L_0887CD0C: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(ctx.fpr[22])); goto L_0887CD38; @@ -2872,21 +2743,40 @@ L_0887CD38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CD60: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-26368), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CD68: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-26368))); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(80), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887CEB8; } @@ -2904,7 +2794,6 @@ L_0887CD88: } L_0887CD98: aot_gpr_31 = (0x0887CDA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887CDA0u) goto L_0887CDA0; AOT_REGCACHE_SYNC_OUT(); return; L_0887CDA0: @@ -2977,7 +2866,6 @@ L_0887CDE4: AOT_REGCACHE_SYNC_OUT(); return; L_0887CE40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887CEB8; } @@ -3038,7 +2926,17 @@ L_0887CEB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CED0: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3092,11 +2990,20 @@ L_0887CED0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CEF8: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3114,9 +3021,7 @@ L_0887CEF8: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887CF48; } @@ -3150,7 +3055,17 @@ L_0887CF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CF50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3196,7 +3111,17 @@ L_0887CF90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887CFA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3218,7 +3143,6 @@ L_0887CFC8: goto L_0887D43C; L_0887CFD4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887CFF0; } @@ -3240,7 +3164,6 @@ L_0887CFDC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887D010; } @@ -3262,7 +3185,6 @@ L_0887CFF0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887D010; } @@ -3296,7 +3218,17 @@ L_0887D010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D024: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -3352,7 +3284,6 @@ L_0887D0A0: L_0887D0A4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); { const bool branch_taken = aot_gpr_6 == aot_gpr_16; - // nop if (branch_taken) { goto L_0887D0C8; } @@ -3370,7 +3301,6 @@ L_0887D0B0: } L_0887D0C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887D0E4; } @@ -3388,7 +3318,6 @@ L_0887D0D0: goto L_0887D150; L_0887D0DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887D0F0; } @@ -3412,14 +3341,23 @@ L_0887D0F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D108: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(384))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_6 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0887D138; } @@ -3440,7 +3378,17 @@ L_0887D138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D144: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); jump_target = aot_gpr_31; @@ -3448,7 +3396,17 @@ L_0887D144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D150: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -3599,7 +3557,17 @@ L_0887D208: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D21C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); jump_target = aot_gpr_31; @@ -3607,7 +3575,17 @@ L_0887D21C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3663,7 +3641,17 @@ L_0887D278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D290: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -3697,7 +3685,6 @@ L_0887D2AC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0887D2D8; @@ -3781,7 +3768,17 @@ L_0887D328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D334: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3800,7 +3797,17 @@ L_0887D350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D364: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[17]); @@ -3945,7 +3952,17 @@ L_0887D428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D43C: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(400), aot_gpr_16); @@ -3959,7 +3976,6 @@ L_0887D43C: AOT_REGCACHE_SYNC_OUT(); return; L_0887D478: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887D4E4; } @@ -3972,7 +3988,6 @@ L_0887D480: AOT_REGCACHE_SYNC_OUT(); return; L_0887D488: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887D4DC; } @@ -3985,7 +4000,6 @@ L_0887D490: L_0887D498: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887D4D4; } @@ -4082,7 +4096,6 @@ L_0887D54C: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887D758; } @@ -4108,7 +4121,6 @@ L_0887D584: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887D748; } @@ -4120,7 +4132,6 @@ L_0887D598: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(16))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0887D734; } @@ -4142,7 +4153,6 @@ L_0887D5C8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887D734; } @@ -4165,7 +4175,6 @@ L_0887D5E0: AOT_REGCACHE_SYNC_OUT(); return; L_0887D610: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887D734; } @@ -4188,9 +4197,7 @@ L_0887D63C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(368))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887D734; } @@ -4200,9 +4207,7 @@ L_0887D654: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887D734; } @@ -4334,7 +4339,6 @@ L_0887D734: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887D598; } @@ -4352,7 +4356,6 @@ L_0887D748: } L_0887D758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887D828; } @@ -4360,7 +4363,6 @@ L_0887D758: } L_0887D760: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887D828; } @@ -4399,7 +4401,6 @@ L_0887D78C: AOT_REGCACHE_SYNC_OUT(); return; L_0887D7C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887D828; } @@ -4424,9 +4425,7 @@ L_0887D7F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(292))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(368))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887D828; } @@ -4436,9 +4435,7 @@ L_0887D80C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(288))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887D828; } @@ -4449,7 +4446,6 @@ L_0887D824: goto L_0887D828; L_0887D828: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0887D864; } @@ -4464,7 +4460,6 @@ L_0887D830: AOT_REGCACHE_SYNC_OUT(); return; L_0887D840: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0887D85C; } @@ -4477,7 +4472,6 @@ L_0887D848: goto L_0887D43C; L_0887D854: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887D8A4; } @@ -4547,7 +4541,17 @@ L_0887D8A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887D8D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(472), ctx.gpr[17]); @@ -4687,7 +4691,6 @@ L_0887D964: ctx.fpr[24] = ctx.fpr[28] + ctx.fpr[24]; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887DA00; } @@ -4811,9 +4814,7 @@ L_0887DA00: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887DAD8; } @@ -4917,7 +4918,6 @@ L_0887DB58: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[28])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_12; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } if (branch_taken) { @@ -4935,9 +4935,7 @@ L_0887DB78: } L_0887DB80: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887DB94; } @@ -5029,7 +5027,6 @@ L_0887DB94: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(440))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887DC60; } @@ -5038,7 +5035,6 @@ L_0887DB94: L_0887DC08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(432))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887DC34; } @@ -5054,7 +5050,6 @@ L_0887DC14: goto L_0887DD78; L_0887DC2C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887DC58; } @@ -5065,9 +5060,7 @@ L_0887DC34: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887DCF8; } @@ -5075,7 +5068,6 @@ L_0887DC34: } L_0887DC50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887DCFC; } @@ -5137,7 +5129,6 @@ L_0887DC60: AOT_REGCACHE_SYNC_OUT(); return; L_0887DCB4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887DCF0; } @@ -5146,7 +5137,6 @@ L_0887DCB4: L_0887DCBC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(432))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887DCF0; } @@ -5162,7 +5152,6 @@ L_0887DCC8: goto L_0887DD78; L_0887DCE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0887DCF0; } @@ -5178,7 +5167,6 @@ L_0887DCE8: } L_0887DCF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887DC34; } @@ -5192,9 +5180,7 @@ L_0887DCFC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887DD1C; } @@ -5207,7 +5193,6 @@ L_0887DD1C: aot_gpr_16 = (aot_gpr_16 + static_cast(2)); aot_gpr_4 = (static_cast(aot_gpr_16) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887DB58; } @@ -5241,7 +5226,17 @@ L_0887DD30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887DD78: aot_gpr_29 = (aot_gpr_29 + static_cast(-496)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(116))); @@ -5273,7 +5268,6 @@ L_0887DDE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(52)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887DE24; } @@ -5288,7 +5282,6 @@ L_0887DDF8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887DE34; } @@ -5296,7 +5289,6 @@ L_0887DDF8: } L_0887DE1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887DE6C; } @@ -5324,7 +5316,6 @@ L_0887DE34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887DE6C; } @@ -5334,9 +5325,7 @@ L_0887DE4C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1640))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887DE6C; } @@ -5472,9 +5461,7 @@ L_0887DF00: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887E034; } @@ -5540,9 +5527,7 @@ L_0887DF54: { const float fs = aot_fpr_12; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0887E034; } @@ -5597,7 +5582,6 @@ L_0887DFB0: AOT_REGCACHE_SYNC_OUT(); return; L_0887E008: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887E034; } @@ -5634,7 +5618,6 @@ L_0887E034: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887DEE0; } @@ -5642,7 +5625,6 @@ L_0887E034: } L_0887E044: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0887E15C; } @@ -5865,7 +5847,17 @@ L_0887E160: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E1A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -5900,7 +5892,6 @@ L_0887E1E0: goto L_0887E208; L_0887E208: aot_gpr_31 = (0x0887E210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E210u) goto L_0887E210; AOT_REGCACHE_SYNC_OUT(); return; L_0887E210: @@ -5936,7 +5927,17 @@ L_0887E234: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E258: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5959,7 +5960,6 @@ L_0887E280: goto L_0887E28C; L_0887E28C: aot_gpr_31 = (0x0887E294u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E294u) goto L_0887E294; AOT_REGCACHE_SYNC_OUT(); return; L_0887E294: @@ -5985,7 +5985,17 @@ L_0887E2A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E2C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6002,7 +6012,6 @@ L_0887E2C0: L_0887E2E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887E300; } @@ -6010,7 +6019,6 @@ L_0887E2E8: } L_0887E2F4: aot_gpr_31 = (0x0887E2FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E2FCu) goto L_0887E2FC; AOT_REGCACHE_SYNC_OUT(); return; L_0887E2FC: @@ -6026,7 +6034,6 @@ L_0887E308: aot_mem.aot_direct_store32(ctx.gpr[2] + static_cast(4), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887E328; } @@ -6034,7 +6041,6 @@ L_0887E308: } L_0887E31C: aot_gpr_31 = (0x0887E324u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E324u) goto L_0887E324; AOT_REGCACHE_SYNC_OUT(); return; L_0887E324: @@ -6042,7 +6048,6 @@ L_0887E324: goto L_0887E328; L_0887E328: aot_gpr_31 = (0x0887E330u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 27u, 0x089EC260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E330u) goto L_0887E330; AOT_REGCACHE_SYNC_OUT(); return; L_0887E330: @@ -6058,7 +6063,17 @@ L_0887E330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6081,7 +6096,6 @@ L_0887E370: goto L_0887E37C; L_0887E37C: aot_gpr_31 = (0x0887E384u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E384u) goto L_0887E384; AOT_REGCACHE_SYNC_OUT(); return; L_0887E384: @@ -6107,7 +6121,17 @@ L_0887E390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E3B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6130,7 +6154,6 @@ L_0887E3D8: goto L_0887E3E4; L_0887E3E4: aot_gpr_31 = (0x0887E3ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E3ECu) goto L_0887E3EC; AOT_REGCACHE_SYNC_OUT(); return; L_0887E3EC: @@ -6156,7 +6179,17 @@ L_0887E3F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E418: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6173,7 +6206,6 @@ L_0887E418: L_0887E440: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887E458; } @@ -6181,7 +6213,6 @@ L_0887E440: } L_0887E44C: aot_gpr_31 = (0x0887E454u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E454u) goto L_0887E454; AOT_REGCACHE_SYNC_OUT(); return; L_0887E454: @@ -6199,7 +6230,6 @@ L_0887E460: aot_mem.aot_direct_store8(ctx.gpr[2] + static_cast(25), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887E488; } @@ -6207,7 +6237,6 @@ L_0887E460: } L_0887E47C: aot_gpr_31 = (0x0887E484u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E484u) goto L_0887E484; AOT_REGCACHE_SYNC_OUT(); return; L_0887E484: @@ -6215,7 +6244,6 @@ L_0887E484: goto L_0887E488; L_0887E488: aot_gpr_31 = (0x0887E490u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 27u, 0x089EC260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E490u) goto L_0887E490; AOT_REGCACHE_SYNC_OUT(); return; L_0887E490: @@ -6231,7 +6259,17 @@ L_0887E490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E4A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6248,7 +6286,6 @@ L_0887E4A8: L_0887E4D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887E4E8; } @@ -6256,7 +6293,6 @@ L_0887E4D0: } L_0887E4DC: aot_gpr_31 = (0x0887E4E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E4E4u) goto L_0887E4E4; AOT_REGCACHE_SYNC_OUT(); return; L_0887E4E4: @@ -6272,7 +6308,6 @@ L_0887E4F0: aot_mem.aot_direct_store32(ctx.gpr[2] + static_cast(16), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887E510; } @@ -6280,7 +6315,6 @@ L_0887E4F0: } L_0887E504: aot_gpr_31 = (0x0887E50Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E50Cu) goto L_0887E50C; AOT_REGCACHE_SYNC_OUT(); return; L_0887E50C: @@ -6288,7 +6322,6 @@ L_0887E50C: goto L_0887E510; L_0887E510: aot_gpr_31 = (0x0887E518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 27u, 0x089EC260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E518u) goto L_0887E518; AOT_REGCACHE_SYNC_OUT(); return; L_0887E518: @@ -6304,7 +6337,17 @@ L_0887E518: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E530: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6331,7 +6374,6 @@ L_0887E568: goto L_0887E574; L_0887E574: aot_gpr_31 = (0x0887E57Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E57Cu) goto L_0887E57C; AOT_REGCACHE_SYNC_OUT(); return; L_0887E57C: @@ -6384,7 +6426,17 @@ L_0887E5BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E5DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6409,7 +6461,6 @@ L_0887E60C: goto L_0887E618; L_0887E618: aot_gpr_31 = (0x0887E620u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E620u) goto L_0887E620; AOT_REGCACHE_SYNC_OUT(); return; L_0887E620: @@ -6443,7 +6494,17 @@ L_0887E644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E660: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6468,7 +6529,6 @@ L_0887E690: goto L_0887E69C; L_0887E69C: aot_gpr_31 = (0x0887E6A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E6A4u) goto L_0887E6A4; AOT_REGCACHE_SYNC_OUT(); return; L_0887E6A4: @@ -6502,7 +6562,17 @@ L_0887E6C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E6E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6527,7 +6597,6 @@ L_0887E714: goto L_0887E720; L_0887E720: aot_gpr_31 = (0x0887E728u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E728u) goto L_0887E728; AOT_REGCACHE_SYNC_OUT(); return; L_0887E728: @@ -6561,7 +6630,17 @@ L_0887E74C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E768: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6586,7 +6665,6 @@ L_0887E798: goto L_0887E7A4; L_0887E7A4: aot_gpr_31 = (0x0887E7ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E7ACu) goto L_0887E7AC; AOT_REGCACHE_SYNC_OUT(); return; L_0887E7AC: @@ -6620,7 +6698,17 @@ L_0887E7D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E7EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6645,7 +6733,6 @@ L_0887E81C: goto L_0887E828; L_0887E828: aot_gpr_31 = (0x0887E830u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E830u) goto L_0887E830; AOT_REGCACHE_SYNC_OUT(); return; L_0887E830: @@ -6679,7 +6766,17 @@ L_0887E854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E870: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6704,7 +6801,6 @@ L_0887E8A0: goto L_0887E8AC; L_0887E8AC: aot_gpr_31 = (0x0887E8B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E8B4u) goto L_0887E8B4; AOT_REGCACHE_SYNC_OUT(); return; L_0887E8B4: @@ -6738,7 +6834,17 @@ L_0887E8D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6763,7 +6869,6 @@ L_0887E924: goto L_0887E930; L_0887E930: aot_gpr_31 = (0x0887E938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E938u) goto L_0887E938; AOT_REGCACHE_SYNC_OUT(); return; L_0887E938: @@ -6805,7 +6910,17 @@ L_0887E97C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887E998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6830,7 +6945,6 @@ L_0887E9C8: goto L_0887E9D4; L_0887E9D4: aot_gpr_31 = (0x0887E9DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887E9DCu) goto L_0887E9DC; AOT_REGCACHE_SYNC_OUT(); return; L_0887E9DC: @@ -6860,7 +6974,6 @@ L_0887E9FC: goto L_0887EA00; L_0887EA00: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0887EA10; } @@ -6892,7 +7005,17 @@ L_0887EA24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887EA40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -6925,7 +7048,6 @@ L_0887EA80: goto L_0887EA88; L_0887EA88: aot_gpr_31 = (0x0887EA90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EA90u) goto L_0887EA90; AOT_REGCACHE_SYNC_OUT(); return; L_0887EA90: @@ -6959,7 +7081,6 @@ L_0887EAC0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(3), static_cast(aot_gpr_5)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887EB04; } @@ -6967,7 +7088,6 @@ L_0887EAC0: } L_0887EAF8: aot_gpr_31 = (0x0887EB00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EB00u) goto L_0887EB00; AOT_REGCACHE_SYNC_OUT(); return; L_0887EB00: @@ -6993,13 +7113,22 @@ L_0887EB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887EB38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5888))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887EB54; } @@ -7007,7 +7136,6 @@ L_0887EB38: } L_0887EB4C: aot_gpr_31 = (0x0887EB54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EB54u) goto L_0887EB54; AOT_REGCACHE_SYNC_OUT(); return; L_0887EB54: @@ -7023,13 +7151,22 @@ L_0887EB5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887EB6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5888))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887EB88; } @@ -7037,7 +7174,6 @@ L_0887EB6C: } L_0887EB80: aot_gpr_31 = (0x0887EB88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EB88u) goto L_0887EB88; AOT_REGCACHE_SYNC_OUT(); return; L_0887EB88: @@ -7053,7 +7189,17 @@ L_0887EB90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887EBA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -7082,7 +7228,6 @@ L_0887EBD8: } L_0887EBE4: aot_gpr_31 = (0x0887EBECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EBECu) goto L_0887EBEC; AOT_REGCACHE_SYNC_OUT(); return; L_0887EBEC: @@ -7121,7 +7266,6 @@ L_0887EC10: goto L_0887EC20; L_0887EC20: aot_gpr_31 = (0x0887EC28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EC28u) goto L_0887EC28; AOT_REGCACHE_SYNC_OUT(); return; L_0887EC28: @@ -7135,7 +7279,6 @@ L_0887EC2C: L_0887EC34: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0887EC54; } @@ -7144,7 +7287,6 @@ L_0887EC34: L_0887EC40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887EC54; } @@ -7152,7 +7294,6 @@ L_0887EC40: } L_0887EC4C: aot_gpr_31 = (0x0887EC54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EC54u) goto L_0887EC54; AOT_REGCACHE_SYNC_OUT(); return; L_0887EC54: @@ -7164,7 +7305,6 @@ L_0887EC54: goto L_0887EC60; L_0887EC60: aot_gpr_31 = (0x0887EC68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EC68u) goto L_0887EC68; AOT_REGCACHE_SYNC_OUT(); return; L_0887EC68: @@ -7201,7 +7341,6 @@ L_0887EC88: goto L_0887EC98; L_0887EC98: aot_gpr_31 = (0x0887ECA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ECA0u) goto L_0887ECA0; AOT_REGCACHE_SYNC_OUT(); return; L_0887ECA0: @@ -7216,7 +7355,6 @@ L_0887ECAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(16))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887ECE8; } @@ -7231,7 +7369,6 @@ L_0887ECBC: goto L_0887ECC8; L_0887ECC8: aot_gpr_31 = (0x0887ECD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ECD0u) goto L_0887ECD0; AOT_REGCACHE_SYNC_OUT(); return; L_0887ECD0: @@ -7245,7 +7382,6 @@ L_0887ECD4: AOT_REGCACHE_SYNC_OUT(); return; L_0887ECE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887ED64; } @@ -7260,7 +7396,6 @@ L_0887ECE8: goto L_0887ECF4; L_0887ECF4: aot_gpr_31 = (0x0887ECFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ECFCu) goto L_0887ECFC; AOT_REGCACHE_SYNC_OUT(); return; L_0887ECFC: @@ -7274,7 +7409,6 @@ L_0887ED00: L_0887ED08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(25))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887ED40; } @@ -7289,7 +7423,6 @@ L_0887ED14: goto L_0887ED20; L_0887ED20: aot_gpr_31 = (0x0887ED28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ED28u) goto L_0887ED28; AOT_REGCACHE_SYNC_OUT(); return; L_0887ED28: @@ -7303,7 +7436,6 @@ L_0887ED2C: AOT_REGCACHE_SYNC_OUT(); return; L_0887ED38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887ED64; } @@ -7318,7 +7450,6 @@ L_0887ED40: goto L_0887ED4C; L_0887ED4C: aot_gpr_31 = (0x0887ED54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887ED54u) goto L_0887ED54; AOT_REGCACHE_SYNC_OUT(); return; L_0887ED54: @@ -7354,7 +7485,17 @@ L_0887ED78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887ED9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -7383,7 +7524,6 @@ L_0887EDD4: } L_0887EDE0: aot_gpr_31 = (0x0887EDE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EDE8u) goto L_0887EDE8; AOT_REGCACHE_SYNC_OUT(); return; L_0887EDE8: @@ -7422,7 +7562,6 @@ L_0887EE0C: goto L_0887EE1C; L_0887EE1C: aot_gpr_31 = (0x0887EE24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EE24u) goto L_0887EE24; AOT_REGCACHE_SYNC_OUT(); return; L_0887EE24: @@ -7436,7 +7575,6 @@ L_0887EE28: L_0887EE30: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0887EE50; } @@ -7445,7 +7583,6 @@ L_0887EE30: L_0887EE3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887EE50; } @@ -7453,7 +7590,6 @@ L_0887EE3C: } L_0887EE48: aot_gpr_31 = (0x0887EE50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EE50u) goto L_0887EE50; AOT_REGCACHE_SYNC_OUT(); return; L_0887EE50: @@ -7465,7 +7601,6 @@ L_0887EE50: goto L_0887EE5C; L_0887EE5C: aot_gpr_31 = (0x0887EE64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EE64u) goto L_0887EE64; AOT_REGCACHE_SYNC_OUT(); return; L_0887EE64: @@ -7502,7 +7637,6 @@ L_0887EE84: goto L_0887EE94; L_0887EE94: aot_gpr_31 = (0x0887EE9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EE9Cu) goto L_0887EE9C; AOT_REGCACHE_SYNC_OUT(); return; L_0887EE9C: @@ -7517,7 +7651,6 @@ L_0887EEA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(16))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0887EEE4; } @@ -7532,7 +7665,6 @@ L_0887EEB8: goto L_0887EEC4; L_0887EEC4: aot_gpr_31 = (0x0887EECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EECCu) goto L_0887EECC; AOT_REGCACHE_SYNC_OUT(); return; L_0887EECC: @@ -7546,7 +7678,6 @@ L_0887EED0: AOT_REGCACHE_SYNC_OUT(); return; L_0887EEDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887EF60; } @@ -7561,7 +7692,6 @@ L_0887EEE4: goto L_0887EEF0; L_0887EEF0: aot_gpr_31 = (0x0887EEF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EEF8u) goto L_0887EEF8; AOT_REGCACHE_SYNC_OUT(); return; L_0887EEF8: @@ -7575,7 +7705,6 @@ L_0887EEFC: L_0887EF04: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(25))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887EF3C; } @@ -7590,7 +7719,6 @@ L_0887EF10: goto L_0887EF1C; L_0887EF1C: aot_gpr_31 = (0x0887EF24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EF24u) goto L_0887EF24; AOT_REGCACHE_SYNC_OUT(); return; L_0887EF24: @@ -7604,7 +7732,6 @@ L_0887EF28: AOT_REGCACHE_SYNC_OUT(); return; L_0887EF34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887EF60; } @@ -7619,7 +7746,6 @@ L_0887EF3C: goto L_0887EF48; L_0887EF48: aot_gpr_31 = (0x0887EF50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887EF50u) goto L_0887EF50; AOT_REGCACHE_SYNC_OUT(); return; L_0887EF50: @@ -7655,7 +7781,17 @@ L_0887EF74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887EF98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7680,7 +7816,17 @@ L_0887EFB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887EFDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7703,7 +7849,6 @@ L_0887EFFC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887F014; } @@ -7720,7 +7865,17 @@ L_0887F014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F024: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7746,7 +7901,17 @@ L_0887F038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F06C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7772,7 +7937,6 @@ L_0887F088: L_0887F0A0: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887F0B4; } @@ -7794,7 +7958,17 @@ L_0887F0B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F0C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7809,7 +7983,17 @@ L_0887F0D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F0E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7825,14 +8009,34 @@ L_0887F0F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F104: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F10C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7841,7 +8045,6 @@ L_0887F10C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887F138; } @@ -7862,7 +8065,17 @@ L_0887F138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F14C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1836))); @@ -7886,7 +8099,6 @@ L_0887F164: } L_0887F170: aot_gpr_31 = (0x0887F178u); - // nop ctx.pc = 0x08B73564u; AOT_REGCACHE_SYNC_OUT(); return; L_0887F178: @@ -7931,7 +8143,17 @@ L_0887F1CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F1E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7950,7 +8172,17 @@ L_0887F1F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F210: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7968,7 +8200,6 @@ L_0887F210: L_0887F23C: aot_gpr_4 = (ctx.gpr[2] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887F258; } @@ -7976,7 +8207,6 @@ L_0887F23C: } L_0887F248: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887F260; } @@ -7984,7 +8214,6 @@ L_0887F248: } L_0887F250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F27C; } @@ -7992,7 +8221,6 @@ L_0887F250: } L_0887F258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F350; } @@ -8008,7 +8236,6 @@ L_0887F268: aot_gpr_4 = (aot_gpr_4 + static_cast(6784)); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887F31C; } @@ -8029,7 +8256,6 @@ L_0887F288: L_0887F294: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7584))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887F2EC; } @@ -8037,7 +8263,6 @@ L_0887F294: } L_0887F2A0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887F308; } @@ -8045,7 +8270,6 @@ L_0887F2A0: } L_0887F2A8: aot_gpr_31 = (0x0887F2B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887F2B0u) goto L_0887F2B0; AOT_REGCACHE_SYNC_OUT(); return; L_0887F2B0: @@ -8057,7 +8281,6 @@ L_0887F2B0: L_0887F2BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7584))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887F2EC; } @@ -8076,7 +8299,6 @@ L_0887F2D4: AOT_REGCACHE_SYNC_OUT(); return; L_0887F2DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0887F324; } @@ -8084,7 +8306,6 @@ L_0887F2DC: } L_0887F2E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F32C; } @@ -8092,7 +8313,6 @@ L_0887F2E4: } L_0887F2EC: aot_gpr_31 = (0x0887F2F4u); - // nop goto L_0887F804; L_0887F2F4: aot_gpr_4 = (0u | 0u); @@ -8102,7 +8322,6 @@ L_0887F2F4: AOT_REGCACHE_SYNC_OUT(); return; L_0887F300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F350; } @@ -8116,7 +8335,6 @@ L_0887F308: AOT_REGCACHE_SYNC_OUT(); return; L_0887F314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F350; } @@ -8124,7 +8342,6 @@ L_0887F314: } L_0887F31C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F350; } @@ -8144,7 +8361,6 @@ L_0887F32C: L_0887F338: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7584))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887F2EC; } @@ -8169,7 +8385,17 @@ L_0887F350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F368: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8189,7 +8415,17 @@ L_0887F388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F39C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2184u << 16u); @@ -8206,7 +8442,17 @@ L_0887F3B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F3C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8225,7 +8471,17 @@ L_0887F3DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F3F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2184u << 16u); @@ -8242,7 +8498,17 @@ L_0887F408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F414: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8267,7 +8533,6 @@ L_0887F44C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887F47C; } @@ -8287,7 +8552,6 @@ L_0887F47C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887F4A8; } @@ -8296,7 +8560,6 @@ L_0887F47C: L_0887F48C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887F4A8; } @@ -8334,7 +8597,17 @@ L_0887F4BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F4DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8359,7 +8632,6 @@ L_0887F514: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887F540; } @@ -8378,7 +8650,6 @@ L_0887F540: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887F568; } @@ -8387,7 +8658,6 @@ L_0887F540: L_0887F550: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0887F568; } @@ -8424,7 +8694,17 @@ L_0887F57C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F59C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2184u << 16u); @@ -8441,7 +8721,17 @@ L_0887F5B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F5C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2184u << 16u); @@ -8458,14 +8748,23 @@ L_0887F5D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F5E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_gpr_6 & 255u); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(32), aot_run_words); } { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0887F62C; } @@ -8480,7 +8779,6 @@ L_0887F600: aot_gpr_6 = (aot_gpr_6 - ctx.gpr[8]); aot_gpr_6 = (aot_gpr_6 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0887F62C; } @@ -8488,7 +8786,6 @@ L_0887F600: } L_0887F624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887F6A0; } @@ -8549,7 +8846,17 @@ L_0887F6A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), aot_gpr_16); @@ -8625,7 +8932,6 @@ L_0887F734: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887F7D8; } @@ -8658,14 +8964,33 @@ L_0887F7D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F7E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F7F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -8675,7 +9000,17 @@ L_0887F7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887F804: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8808,7 +9143,6 @@ L_0887F97C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0887F9AC; } @@ -8834,7 +9168,6 @@ L_0887F9AC: L_0887F9C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0887FB3C; } @@ -8938,7 +9271,6 @@ L_0887FA84: } L_0887FA90: aot_gpr_31 = (0x0887FA98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887FA98u) goto L_0887FA98; AOT_REGCACHE_SYNC_OUT(); return; L_0887FA98: @@ -9035,7 +9367,6 @@ L_0887FB14: } L_0887FB20: aot_gpr_31 = (0x0887FB28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887FB28u) goto L_0887FB28; AOT_REGCACHE_SYNC_OUT(); return; L_0887FB28: @@ -9100,7 +9431,6 @@ L_0887FBAC: AOT_REGCACHE_SYNC_OUT(); return; L_0887FBE0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0887FC10; } @@ -9182,7 +9512,6 @@ L_0887FC64: L_0887FC70: ctx.gpr[9] = (ctx.gpr[9] + static_cast(16717)); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0887FD9C; } @@ -9190,7 +9519,6 @@ L_0887FC70: } L_0887FC7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887FDA0; } @@ -9198,7 +9526,6 @@ L_0887FC7C: } L_0887FC84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887FDA0; } @@ -9208,7 +9535,6 @@ L_0887FC8C: ctx.gpr[8] = (0u | 0u); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 840 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0887FD84; } @@ -9216,7 +9542,6 @@ L_0887FC8C: } L_0887FC9C: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_0887FCB8; } @@ -9268,7 +9593,6 @@ L_0887FCF4: ctx.gpr[9] = (0u < ctx.gpr[9] ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0887FD74; } @@ -9276,7 +9600,6 @@ L_0887FCF4: } L_0887FD04: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_0887FD20; } @@ -9328,7 +9651,6 @@ L_0887FD5C: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); ctx.gpr[10] = (aot_gpr_5 + static_cast(32)); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_0887FD74; } @@ -9346,7 +9668,6 @@ L_0887FD74: ctx.gpr[8] = (ctx.gpr[8] + static_cast(1)); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 840 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_0887FC9C; } @@ -9354,7 +9675,6 @@ L_0887FD74: } L_0887FD84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887FDA0; } @@ -9362,7 +9682,6 @@ L_0887FD84: } L_0887FD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887FDA0; } @@ -9370,7 +9689,6 @@ L_0887FD8C: } L_0887FD94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887FDA0; } @@ -9381,7 +9699,6 @@ L_0887FD9C: goto L_0887FDA0; L_0887FDA0: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0887FDB0; } @@ -9389,7 +9706,6 @@ L_0887FDA0: } L_0887FDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0887FE80; } @@ -9403,7 +9719,6 @@ L_0887FDB0: ctx.gpr[9] = (ctx.gpr[9] << 2u); ctx.gpr[9] = (ctx.gpr[8] + ctx.gpr[9]); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_0887FE08; } @@ -9412,7 +9727,6 @@ L_0887FDB0: L_0887FDD0: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0887FDF0; } @@ -9431,7 +9745,6 @@ L_0887FDF0: ctx.gpr[9] = (ctx.gpr[9] << 2u); ctx.gpr[9] = (aot_gpr_6 + ctx.gpr[9]); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_0887FDD0; } @@ -9440,7 +9753,6 @@ L_0887FDF0: L_0887FE08: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_0887FE80; } @@ -9448,7 +9760,6 @@ L_0887FE08: } L_0887FE14: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_0887FE30; } @@ -9526,7 +9837,6 @@ L_0887FE90: L_0887FE9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0887FEB0; } @@ -9534,7 +9844,6 @@ L_0887FE9C: } L_0887FEA8: aot_gpr_31 = (0x0887FEB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0887FEB0u) goto L_0887FEB0; AOT_REGCACHE_SYNC_OUT(); return; L_0887FEB0: @@ -9553,7 +9862,17 @@ L_0887FEB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887FED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (2236u << 16u); @@ -9618,7 +9937,17 @@ L_0887FF74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887FF8C: aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_4 + static_cast(3), aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load_word_right(aot_gpr_4 + static_cast(0), aot_gpr_6)); @@ -9638,7 +9967,17 @@ L_0887FF8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0887FFC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0031.cpp b/profiles/vcs/generated/generated_unit_0031.cpp index 0deacb6..750c908 100644 --- a/profiles/vcs/generated/generated_unit_0031.cpp +++ b/profiles/vcs/generated/generated_unit_0031.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0031[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, - 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 22, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 61, 0, 62, 0, 0, 63, 0, 64, 0, 0, 0, - 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, 0, 0, 0, - 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, - 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, - 84, 0, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 0, 0, 90, 0, 0, 0, - 91, 92, 0, 93, 0, 94, 0, 0, 0, 0, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 99, 100, 0, 101, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 107, - 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 110, 0, 111, 112, 0, 113, 114, 0, 115, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 0, 0, 117, 0, 0, 0, 0, 118, 0, 119, 120, 0, 121, 122, 0, 123, 124, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, - 127, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, - 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, - 138, 139, 0, 140, 141, 0, 142, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 146, 147, 0, 148, 149, 0, 150, - 151, 0, 0, 0, 0, 0, 152, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, - 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 164, 0, 165, 166, 0, 167, 168, 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, - 0, 0, 0, 172, 0, 173, 174, 0, 175, 176, 0, 177, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, - 181, 182, 0, 183, 184, 0, 185, 186, 0, 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, - 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, - 0, 201, 0, 202, 203, 0, 204, 205, 0, 206, 207, 0, 0, 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 216, 0, 0, - 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 0, 226, 0, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, - 0, 0, 0, 0, 230, 0, 231, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 236, 0, 237, 0, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 241, - 0, 0, 0, 0, 242, 0, 243, 0, 0, 244, 0, 245, 0, 0, 0, 0, 246, 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 250, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 253, 0, 0, 0, 0, 0, 254, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 264, 0, 0, 265, 0, 0, 0, 266, 0, 0, - 0, 0, 0, 267, 0, 268, 0, 0, 269, 0, 0, 270, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 275, 0, 0, - 0, 276, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 283, 0, 0, 284, 0, 0, 285, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 288, 0, 0, 289, 0, 0, 290, 0, 0, 0, 291, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 294, 0, 0, 295, 0, 0, 0, 296, 0, 297, 0, - 0, 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, - 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, - 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, - 0, 0, 0, 0, 0, 0, 314, 0, 315, 0, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, - 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 325, 0, 0, 0, - 0, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, - 0, 0, 0, 0, 333, 0, 334, 0, 0, 335, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 344, 345, 0, 346, 0, 0, 0, 0, 347, 0, - 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 353, - 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, - 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 362, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 368, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 372, 0, 0, 373, 0, - 0, 0, 0, 0, 0, 0, 374, 0, 375, 0, 376, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, - 0, 380, 381, 0, 382, 0, 0, 0, 383, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, 0, 0, 396, - 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 400, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 407, 0, 408, 0, 0, - 409, 0, 0, 0, 0, 0, 0, 0, 410, 411, 0, 412, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 423, 0, 424, 0, - 0, 0, 425, 0, 426, 0, 0, 0, 0, 427, 0, 428, 429, 0, 430, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, 434, - 0, 0, 0, 0, 435, 0, 0, 436, 0, 437, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 440, 0, 441, 442, 0, 443, 0, 0, 0, 0, 0, 444, - 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 448, 449, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 457, 0, - 458, 0, 459, 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 474, 0, 475, 0, 0, 476, 0, 477, 0, 478, - 0, 479, 0, 0, 0, 480, 0, 481, 0, 482, 0, 0, 483, 0, 0, 0, 0, 484, 0, 485, 0, 0, 486, 0, 487, 0, 488, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 491, 0, 492, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 495, 0, 496, 0, 0, 497, 0, - 498, 0, 0, 499, 0, 500, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 507, 0, - 508, 0, 509, 0, 510, 0, 0, 511, 0, 0, 512, 0, 513, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, - 519, 0, 520, 0, 0, 0, 521, 0, 522, 0, 523, 0, 0, 0, 524, 0, 0, 0, 525, 0, 526, 0, 527, 0, 528, 0, 0, 529, 0, 530, 0, 531, - 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 535, 0, 0, 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 538, 0, 539, - 0, 0, 0, 540, 0, 541, 0, 542, 0, 0, 0, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, - 0, 0, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 554, 0, 0, - 555, 0, 556, 0, 0, 557, 558, 0, 0, 559, 0, 560, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, - 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 567, 0, 568, 0, 0, 0, 569, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, - 571, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 574, 0, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 578, 0, 579, 0, 0, 0, 580, 0, 581, - 0, 582, 0, 583, 0, 584, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 590, - 0, 0, 0, 591, 0, 592, 0, 0, 593, 0, 594, 0, 595, 0, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 0, 601, 0, 602, 0, 0, 0, - 0, 603, 0, 0, 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 608, 0, 0, 609, 0, 610, 0, 0, 0, 0, - 611, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, - 0, 621, 0, 0, 622, 0, 623, 0, 0, 0, 624, 0, 0, 0, 625, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, - 0, 629, 0, 0, 0, 0, 630, 0, 0, 631, 0, 632, 0, 0, 0, 633, 0, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 0, 0, - 0, 0, 640, 641, 0, 0, 642, 0, 0, 0, 0, 643, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 647, 0, 0, 648, 0, 0, 0, - 649, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, - 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, - 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 658, 0, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 0, 0, 0, 663, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 667, - 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 673, 0, 674, 675, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, - 0, 0, 678, 0, 0, 679, 0, 0, 0, 0, 0, 680, 681, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, - 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, - 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 692, 0, 693, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 700, 0, 701, - 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 705, 0, 706, 0, 0, 0, 707, 0, 708, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 712, 713, 0, 0, - 0, 0, 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 717, 0, 0, 0, 0, 0, 718, 719, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 724, 0, 725, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 727, - 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 732, 0, 733, 734, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 736, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 0, 739, 740, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 746, 0, - 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 751, - 0, 0, 752, 0, 753, 0, 754, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 759, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 762, 0, 763, - 0, 764, 0, 0, 0, 0, 765, 766, 0, 0, 0, 767, 0, 768, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 771, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0031[64] = { + 0x4900001042090801ull, 0x0000022001241844ull, 0x410080401000A4C0ull, 0x0000000000020500ull, + 0x0214002002208000ull, 0x1005220012000001ull, 0x4804A01280421000ull, 0x1440040214A24000ull, + 0x2520008C80A24082ull, 0x5A00382B11404085ull, 0xA028081000000000ull, 0x0906DA10216D0810ull, + 0x4204280A02000045ull, 0x00114241B684085Bull, 0x4085B42042084810ull, 0x252120DB42040B68ull, + 0x1028000110004500ull, 0x29020000450906DAull, 0x5054240020000910ull, 0x8000000000080000ull, + 0x8403508000200950ull, 0x0832000001090A50ull, 0x0000000000000000ull, 0x5220024100000000ull, + 0x224A020000004000ull, 0x0509200A24828928ull, 0x0000284900000000ull, 0x5124144900000000ull, + 0x0012040100A80204ull, 0x8005048101000000ull, 0x1280500820104940ull, 0x00440A500A02A014ull, + 0x42D4090100000000ull, 0x4040000482082024ull, 0x0002000020944040ull, 0x4890800088110004ull, + 0x0080251602804540ull, 0x022000408A008AAAull, 0x04848B0128891228ull, 0x84505A14510A1102ull, + 0x0401C42282D0A290ull, 0x4494021544A41000ull, 0xA960020080115000ull, 0x4A445420054A12A2ull, + 0x122A149541454229ull, 0xA1048882A9544545ull, 0x29024220222210A8ull, 0x0422C01204208A65ull, + 0xA0500A2AA2A48A41ull, 0x0A51050214AA9528ull, 0x2082000040451041ull, 0x15548A4221014452ull, + 0x040000851284284Cull, 0x4154900410002008ull, 0x0802100190404000ull, 0x040418240500D020ull, + 0x1022A01024004421ull, 0x00400408A8040900ull, 0x0609014034014514ull, 0x01A0444280855202ull, + 0x000000200830480Aull, 0x8080901040401040ull, 0x0041000000200854ull, 0x2100A8C2A0400120ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0031[64] = { + 1u, 11u, 20u, 30u, 33u, 40u, 48u, 59u, 70u, 84u, 102u, 108u, 127u, 138u, 157u, 172u, + 193u, 201u, 217u, 228u, 230u, 242u, 253u, 253u, 260u, 267u, 283u, 288u, 298u, 307u, 314u, 326u, + 339u, 348u, 357u, 364u, 374u, 387u, 400u, 417u, 435u, 452u, 467u, 479u, 498u, 519u, 540u, 555u, + 571u, 591u, 611u, 621u, 640u, 653u, 664u, 672u, 684u, 696u, 705u, 720u, 735u, 743u, 752u, 759u, }; void recomp_unit_0031_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0031_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08880000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0031[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0031[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0031[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08880000; @@ -1069,7 +976,6 @@ L_08880090: L_088800E0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08880130; } @@ -1100,7 +1006,6 @@ L_08880118: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08880130; } @@ -1128,7 +1033,6 @@ L_08880148: L_08880154: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(112))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08880218; } @@ -1153,7 +1057,6 @@ L_08880194: ctx.gpr[21] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_08880218; } @@ -1269,7 +1172,6 @@ L_08880218: L_0888021C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888023C; } @@ -1278,7 +1180,6 @@ L_0888021C: L_08880228: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888023C; } @@ -1309,7 +1210,17 @@ L_0888023C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880270: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -1319,7 +1230,17 @@ L_08880270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880298: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1331,11 +1252,20 @@ L_08880298: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088802BC: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1347,11 +1277,20 @@ L_088802BC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088802E0: aot_gpr_6 = (2240u << 16u); aot_gpr_4 = (2240u << 16u); @@ -1377,11 +1316,20 @@ L_088802F8: } L_08880320: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880328: aot_gpr_4 = (aot_gpr_4 << 4u); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -1393,7 +1341,17 @@ L_08880328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880344: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1586,7 +1544,6 @@ L_08880454: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088804D0; } @@ -1618,7 +1575,6 @@ L_08880464: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08880494; @@ -1651,7 +1607,6 @@ L_08880494: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_088804C8; @@ -1777,7 +1732,6 @@ L_08880500: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[18] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880570; } @@ -1816,7 +1770,6 @@ L_088805A4: L_088805B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088805C8; } @@ -1844,7 +1797,17 @@ L_088805C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088805F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_4 << 4u); @@ -1872,13 +1835,22 @@ L_08880630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880644: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (0u | 12u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08880684; } @@ -1898,7 +1870,6 @@ L_08880658: AOT_REGCACHE_SYNC_OUT(); return; L_0888067C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088806EC; } @@ -1907,7 +1878,6 @@ L_0888067C: L_08880684: ctx.gpr[7] = (0u | 17u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088806BC; } @@ -1927,7 +1897,6 @@ L_08880690: AOT_REGCACHE_SYNC_OUT(); return; L_088806B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088806EC; } @@ -1936,7 +1905,6 @@ L_088806B4: L_088806BC: ctx.gpr[7] = (0u | 18u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088806EC; } @@ -1961,7 +1929,17 @@ L_088806EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088806F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -1982,7 +1960,6 @@ L_088806F8: L_08880738: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08880770; } @@ -2000,7 +1977,6 @@ L_08880744: } L_08880754: { const bool branch_taken = aot_gpr_16 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08880768; } @@ -2009,7 +1985,6 @@ L_08880754: L_0888075C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); { const bool branch_taken = aot_gpr_6 != aot_gpr_16; - // nop if (branch_taken) { goto L_08880770; } @@ -2046,7 +2021,17 @@ L_08880784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088807A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2240u << 16u); @@ -2099,7 +2084,17 @@ L_08880804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888081C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2128,7 +2123,6 @@ L_08880844: } L_08880854: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880888; } @@ -2164,7 +2158,17 @@ L_0888088C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888089C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2192,7 +2196,6 @@ L_088808D4: } L_088808E0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08880908; } @@ -2201,7 +2204,6 @@ L_088808E0: L_088808E8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08880908; } @@ -2210,7 +2212,6 @@ L_088808E8: L_088808F4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != aot_gpr_16; - // nop if (branch_taken) { goto L_08880908; } @@ -2245,7 +2246,17 @@ L_0888091C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880938: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -2254,7 +2265,6 @@ L_08880938: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0888098C; } @@ -2325,7 +2335,6 @@ L_088809B4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088809EC; } @@ -2348,7 +2357,17 @@ L_088809F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088809F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-496)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(aot_fpr_28), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -2389,20 +2408,27 @@ L_08880A90: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23840))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08880AAC: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.gpr[20] = (ctx.gpr[20] + static_cast(20000)); ctx.fpr[24] = std::bit_cast(0u); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(ctx.fpr[22])) && ctx.fpr[20] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08880AD4; } @@ -2428,7 +2454,6 @@ L_08880AD4: goto L_08880AF4; L_08880AF4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08880BC4; } @@ -2439,7 +2464,6 @@ L_08880AFC: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08880B60; } @@ -2450,7 +2474,6 @@ L_08880B10: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2461,7 +2484,6 @@ L_08880B10: L_08880B2C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880B4C; @@ -2488,7 +2510,6 @@ L_08880B54: goto L_08880B58; L_08880B58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880BC8; } @@ -2499,7 +2520,6 @@ L_08880B60: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08880BC8; } @@ -2510,7 +2530,6 @@ L_08880B74: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2521,7 +2540,6 @@ L_08880B74: L_08880B90: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880BB0; @@ -2548,7 +2566,6 @@ L_08880BB8: goto L_08880BBC; L_08880BBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880BC8; } @@ -2634,9 +2651,7 @@ L_08880C64: ctx.fpr[26] = std::bit_cast(0u); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(ctx.fpr[24])) && ctx.fpr[20] == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08880C8C; } @@ -2662,7 +2677,6 @@ L_08880C8C: goto L_08880CAC; L_08880CAC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08880D7C; } @@ -2673,7 +2687,6 @@ L_08880CB4: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08880D18; } @@ -2684,7 +2697,6 @@ L_08880CC8: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2695,7 +2707,6 @@ L_08880CC8: L_08880CE4: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880D04; @@ -2722,7 +2733,6 @@ L_08880D0C: goto L_08880D10; L_08880D10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880D80; } @@ -2733,7 +2743,6 @@ L_08880D18: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08880D80; } @@ -2744,7 +2753,6 @@ L_08880D2C: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2755,7 +2763,6 @@ L_08880D2C: L_08880D48: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880D68; @@ -2782,7 +2789,6 @@ L_08880D70: goto L_08880D74; L_08880D74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880D80; } @@ -2853,7 +2859,6 @@ L_08880DD0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08880E38; } @@ -2866,7 +2871,6 @@ L_08880E10: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08880E38; } @@ -2895,7 +2899,6 @@ L_08880E4C: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[20])); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08880F98; } @@ -2906,7 +2909,6 @@ L_08880E64: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08880EC8; } @@ -2917,7 +2919,6 @@ L_08880E78: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2928,7 +2929,6 @@ L_08880E78: L_08880E94: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880EB4; @@ -2955,7 +2955,6 @@ L_08880EBC: goto L_08880EC0; L_08880EC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880F9C; } @@ -2966,7 +2965,6 @@ L_08880EC8: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08880F2C; } @@ -2977,7 +2975,6 @@ L_08880EDC: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -2988,7 +2985,6 @@ L_08880EDC: L_08880EF8: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880F18; @@ -3015,7 +3011,6 @@ L_08880F20: goto L_08880F24; L_08880F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880F9C; } @@ -3028,7 +3023,6 @@ L_08880F2C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08880F9C; } @@ -3039,7 +3033,6 @@ L_08880F48: aot_fpr_28 = std::bit_cast(std::bit_cast(aot_fpr_28) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_28) || std::isnan(aot_fpr_13)) && aot_fpr_28 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -3050,7 +3043,6 @@ L_08880F48: L_08880F64: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08880F84; @@ -3077,7 +3069,6 @@ L_08880F8C: goto L_08880F90; L_08880F90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08880F9C; } @@ -3115,7 +3106,6 @@ L_08880FC0: L_08880FD4: aot_gpr_4 = (0u | 15u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08881020; } @@ -3151,7 +3141,6 @@ L_08880FF4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881070; } @@ -3220,7 +3209,6 @@ L_08881080: aot_gpr_4 = (aot_gpr_4 | 34079u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088810CC; @@ -3228,7 +3216,6 @@ L_08881080: goto L_088810CC; L_088810CC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08881124; } @@ -3239,7 +3226,6 @@ L_088810D4: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_13)) && ctx.fpr[22] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -3250,7 +3236,6 @@ L_088810D4: L_088810F0: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08881110; @@ -3277,7 +3262,6 @@ L_08881118: goto L_0888111C; L_0888111C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881128; } @@ -3351,7 +3335,6 @@ L_08881178: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088811EC; } @@ -3364,7 +3347,6 @@ L_088811C4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088811EC; } @@ -3399,7 +3381,6 @@ L_08881210: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088812B4; } @@ -3443,7 +3424,6 @@ L_0888122C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08881274; @@ -3476,7 +3456,6 @@ L_08881274: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088812A8; @@ -3485,7 +3464,6 @@ L_08881274: L_088812A8: ctx.fpr[24] = ctx.fpr[24] + aot_fpr_13; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881560; } @@ -3496,7 +3474,6 @@ L_088812B4: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088813FC; } @@ -3509,7 +3486,6 @@ L_088812C8: AOT_REGCACHE_SYNC_OUT(); return; L_088812D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088813FC; } @@ -3521,7 +3497,6 @@ L_088812D8: ctx.gpr[17] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888134C; } @@ -3529,7 +3504,6 @@ L_088812D8: } L_088812F0: aot_gpr_31 = (0x088812F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088812F8u) goto L_088812F8; AOT_REGCACHE_SYNC_OUT(); return; L_088812F8: @@ -3653,7 +3627,6 @@ L_0888134C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881560; } @@ -3664,7 +3637,6 @@ L_088813FC: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08881518; } @@ -3677,7 +3649,6 @@ L_08881410: AOT_REGCACHE_SYNC_OUT(); return; L_08881418: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08881518; } @@ -3729,7 +3700,6 @@ L_08881454: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -3740,9 +3710,7 @@ L_08881454: L_0888149C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088814B8; } @@ -3758,7 +3726,6 @@ L_088814B0: } L_088814B8: aot_gpr_31 = (0x088814C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088814C0u) goto L_088814C0; AOT_REGCACHE_SYNC_OUT(); return; L_088814C0: @@ -3811,7 +3778,6 @@ L_08881518: AOT_REGCACHE_SYNC_OUT(); return; L_08881524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881560; } @@ -4104,7 +4070,6 @@ L_088817D4: L_088817E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088817F8; } @@ -4138,7 +4103,17 @@ L_088817F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08881838: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4175,7 +4150,6 @@ L_088818A4: } L_088818C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088818D8; } @@ -4193,7 +4167,6 @@ L_088818CC: L_088818D8: aot_gpr_4 = (0u | 32u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_0888190C; } @@ -4215,11 +4188,20 @@ L_088818F4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23808))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888190C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -4260,7 +4242,6 @@ L_08881944: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), ctx.gpr[17]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881C08; } @@ -4302,7 +4283,6 @@ L_0888198C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(212), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881C08; } @@ -4373,7 +4353,6 @@ L_088819E8: aot_gpr_5 = (aot_gpr_5 | aot_gpr_6); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(483), static_cast(aot_gpr_5)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881C08; } @@ -4457,7 +4436,6 @@ L_08881AB4: aot_gpr_5 = (aot_gpr_5 | aot_gpr_6); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(483), static_cast(aot_gpr_5)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881C08; } @@ -4495,7 +4473,6 @@ L_08881BB0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), ctx.gpr[17]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881C08; } @@ -4540,7 +4517,6 @@ L_08881C08: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08881C54; } @@ -4556,7 +4532,6 @@ L_08881C24: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), ctx.gpr[21]); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), ctx.gpr[20]); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08881C5C; } @@ -4564,7 +4539,6 @@ L_08881C24: } L_08881C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881CA8; } @@ -4680,7 +4654,6 @@ L_08881D60: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08881DC0; } @@ -4693,7 +4666,6 @@ L_08881D80: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08881DC0; } @@ -4702,7 +4674,6 @@ L_08881D80: L_08881D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2116))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08881DC0; } @@ -4740,7 +4711,17 @@ L_08881DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08881DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4748,7 +4729,6 @@ L_08881DFC: aot_gpr_16 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08881FC8; } @@ -4756,7 +4736,6 @@ L_08881DFC: } L_08881E18: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08881FC8; } @@ -4765,7 +4744,6 @@ L_08881E18: L_08881E20: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08881FC8; } @@ -4774,7 +4752,6 @@ L_08881E20: L_08881E2C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(12), static_cast(0u)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4786,7 +4763,6 @@ L_08881E38: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4801,7 +4777,6 @@ L_08881E50: aot_gpr_5 = (aot_gpr_5 + static_cast(-12)); aot_gpr_6 = (aot_gpr_5 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4813,11 +4788,20 @@ L_08881E74: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23776))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08881E8C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[7] = (aot_gpr_16 + static_cast(48)); @@ -4832,7 +4816,6 @@ L_08881E8C: AOT_REGCACHE_SYNC_OUT(); return; L_08881EB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4852,7 +4835,6 @@ L_08881EB8: AOT_REGCACHE_SYNC_OUT(); return; L_08881EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4873,7 +4855,6 @@ L_08881EF0: aot_gpr_6 = (aot_gpr_6 >> 1u); ctx.gpr[7] = (0u | 2u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08881F3C; } @@ -4881,7 +4862,6 @@ L_08881EF0: } L_08881F08: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08881F64; } @@ -4901,7 +4881,6 @@ L_08881F10: AOT_REGCACHE_SYNC_OUT(); return; L_08881F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881F64; } @@ -4909,7 +4888,6 @@ L_08881F34: } L_08881F3C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08881F64; } @@ -4928,7 +4906,6 @@ L_08881F44: AOT_REGCACHE_SYNC_OUT(); return; L_08881F64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4948,7 +4925,6 @@ L_08881F6C: AOT_REGCACHE_SYNC_OUT(); return; L_08881F90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08881F98; } @@ -4962,7 +4938,6 @@ L_08881F98: AOT_REGCACHE_SYNC_OUT(); return; L_08881FA4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08881FC8; } @@ -4988,7 +4963,17 @@ L_08881FC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08881FD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(aot_fpr_28), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5036,7 +5021,6 @@ L_08882080: L_088820A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088820DC; } @@ -5049,7 +5033,6 @@ L_088820AC: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088820DC; } @@ -5062,7 +5045,6 @@ L_088820C8: AOT_REGCACHE_SYNC_OUT(); return; L_088820D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088820DC; } @@ -5073,7 +5055,6 @@ L_088820D8: goto L_088820DC; L_088820DC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088828B8; } @@ -5094,7 +5075,6 @@ L_088820F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882114; } @@ -5103,7 +5083,6 @@ L_088820F8: L_08882108: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08882188; } @@ -5115,9 +5094,7 @@ L_08882114: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882188; } @@ -5127,9 +5104,7 @@ L_08882134: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(320))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882188; } @@ -5139,9 +5114,7 @@ L_0888214C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(324))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882188; } @@ -5151,7 +5124,6 @@ L_08882164: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(328))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15605u << 16u); if (branch_taken) { @@ -5212,9 +5184,7 @@ L_08882188: aot_gpr_4 = (aot_gpr_4 | 24576u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882238; } @@ -5226,9 +5196,7 @@ L_088821D8: aot_gpr_4 = (aot_gpr_4 | 49152u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882238; } @@ -5240,9 +5208,7 @@ L_088821F8: aot_gpr_4 = (aot_gpr_4 | 49152u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882238; } @@ -5254,9 +5220,7 @@ L_08882218: aot_gpr_4 = (aot_gpr_4 | 49152u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882250; } @@ -5291,7 +5255,6 @@ L_0888225C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888236C; } @@ -5382,7 +5345,6 @@ L_0888236C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); ctx.gpr[19] = (0u | 18u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088823BC; } @@ -5411,7 +5373,6 @@ L_088823BC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088824A8; } @@ -5420,7 +5381,6 @@ L_088823BC: L_088823D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088824A8; } @@ -5430,7 +5390,6 @@ L_088823DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882490; } @@ -5439,7 +5398,6 @@ L_088823DC: L_088823EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5453,7 +5411,6 @@ L_088823F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5466,7 +5423,6 @@ L_08882418: AOT_REGCACHE_SYNC_OUT(); return; L_08882420: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5507,7 +5463,6 @@ L_08882464: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882488; } @@ -5518,7 +5473,6 @@ L_08882484: goto L_08882488; L_08882488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5532,7 +5486,6 @@ L_08882490: goto L_08881DFC; L_088824A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5541,7 +5494,6 @@ L_088824A0: L_088824A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0888256C; } @@ -5602,7 +5554,6 @@ L_0888250C: AOT_REGCACHE_SYNC_OUT(); return; L_08882514: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888252C; } @@ -5615,7 +5566,6 @@ L_0888251C: AOT_REGCACHE_SYNC_OUT(); return; L_08882524: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888253C; } @@ -5653,7 +5603,6 @@ L_0888253C: AOT_REGCACHE_SYNC_OUT(); return; L_08882564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5663,7 +5612,6 @@ L_0888256C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882630; } @@ -5687,7 +5635,6 @@ L_0888257C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), ctx.gpr[21]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088825D4; } @@ -5733,9 +5680,7 @@ L_08882598: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882624; } @@ -5766,7 +5711,6 @@ L_088825E4: AOT_REGCACHE_SYNC_OUT(); return; L_0888260C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08882624; } @@ -5781,7 +5725,6 @@ L_08882614: L_08882624: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5791,7 +5734,6 @@ L_08882630: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_gpr_6 = (0u | 14u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0888264C; } @@ -5800,7 +5742,6 @@ L_08882630: L_08882640: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088828A8; } @@ -5810,7 +5751,6 @@ L_0888264C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(91)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882674; } @@ -5824,7 +5764,6 @@ L_0888265C: goto L_08881DFC; L_0888266C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5851,9 +5790,7 @@ L_08882680: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088826BC; } @@ -5864,7 +5801,6 @@ L_088826A0: goto L_088826A4; L_088826A4: { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088828A8; } @@ -5874,7 +5810,6 @@ L_088826AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5883,7 +5818,6 @@ L_088826AC: L_088826BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(310))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888274C; } @@ -5903,7 +5837,6 @@ L_088826C8: L_088826DC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(240))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08882730; } @@ -5916,7 +5849,6 @@ L_088826E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882730; } @@ -5929,7 +5861,6 @@ L_08882704: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882730; } @@ -5954,7 +5885,6 @@ L_08882730: } L_08882744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828A8; } @@ -5979,7 +5909,6 @@ L_08882760: goto L_08882770; L_08882770: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08882788; } @@ -6023,7 +5952,6 @@ L_088827AC: goto L_088827B0; L_088827B0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088827E8; } @@ -6043,7 +5971,6 @@ L_088827B8: AOT_REGCACHE_SYNC_OUT(); return; L_088827D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088827E8; } @@ -6084,7 +6011,6 @@ L_08882810: goto L_0888281C; L_0888281C: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08882834; } @@ -6128,7 +6054,6 @@ L_08882858: goto L_0888285C; L_0888285C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08882894; } @@ -6148,7 +6073,6 @@ L_08882864: AOT_REGCACHE_SYNC_OUT(); return; L_0888287C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882894; } @@ -6186,7 +6110,6 @@ L_088828A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088828BC; } @@ -6239,7 +6162,17 @@ L_088828E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08882930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(676))); @@ -6260,7 +6193,6 @@ L_08882948: AOT_REGCACHE_SYNC_OUT(); return; L_08882954: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088829D0; } @@ -6276,7 +6208,6 @@ L_08882968: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882988; } @@ -6289,7 +6220,6 @@ L_08882978: AOT_REGCACHE_SYNC_OUT(); return; L_08882980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088829E8; } @@ -6297,7 +6227,6 @@ L_08882980: } L_08882988: aot_gpr_31 = (0x08882990u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08882990u) goto L_08882990; AOT_REGCACHE_SYNC_OUT(); return; L_08882990: @@ -6322,7 +6251,6 @@ L_088829A4: AOT_REGCACHE_SYNC_OUT(); return; L_088829C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088829E8; } @@ -6331,7 +6259,6 @@ L_088829C8: L_088829D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088829E8; } @@ -6350,7 +6277,17 @@ L_088829E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088829F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(676))); @@ -6387,7 +6324,6 @@ L_08882A40: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08882A7C; } @@ -6434,7 +6370,6 @@ L_08882A50: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08882AA4; } @@ -6500,9 +6435,7 @@ L_08882AA4: { const float fs = ctx.fpr[20]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882AD8; } @@ -6524,7 +6457,6 @@ L_08882AE0: AOT_REGCACHE_SYNC_OUT(); return; L_08882AEC: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08882B30; } @@ -6537,7 +6469,6 @@ L_08882AF4: AOT_REGCACHE_SYNC_OUT(); return; L_08882AFC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882B30; } @@ -6563,7 +6494,6 @@ L_08882B14: } L_08882B1C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882B30; } @@ -6579,7 +6509,6 @@ L_08882B30: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882B4C; } @@ -6587,7 +6516,6 @@ L_08882B30: } L_08882B44: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08882B60; } @@ -6596,7 +6524,6 @@ L_08882B44: L_08882B4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882B68; } @@ -6604,7 +6531,6 @@ L_08882B4C: } L_08882B58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -6612,7 +6538,6 @@ L_08882B58: } L_08882B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -6635,9 +6560,7 @@ L_08882B68: aot_gpr_4 = (16880u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882C24; } @@ -6648,7 +6571,6 @@ L_08882B94: aot_gpr_4 = (512u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08882C14; } @@ -6661,7 +6583,6 @@ L_08882BA8: AOT_REGCACHE_SYNC_OUT(); return; L_08882BB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882C0C; } @@ -6671,7 +6592,6 @@ L_08882BB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882BEC; } @@ -6692,7 +6612,6 @@ L_08882BD8: AOT_REGCACHE_SYNC_OUT(); return; L_08882BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08882C0C; } @@ -6717,7 +6636,6 @@ L_08882C00: AOT_REGCACHE_SYNC_OUT(); return; L_08882C0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -6747,7 +6665,6 @@ L_08882C38: AOT_REGCACHE_SYNC_OUT(); return; L_08882C40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088833D0; } @@ -6757,7 +6674,6 @@ L_08882C48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); ctx.gpr[17] = (0u | 16u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08882C60; } @@ -6774,7 +6690,6 @@ L_08882C60: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882C90; } @@ -6787,7 +6702,6 @@ L_08882C78: AOT_REGCACHE_SYNC_OUT(); return; L_08882C80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882CB0; } @@ -6795,7 +6709,6 @@ L_08882C80: } L_08882C88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08882D48; } @@ -6815,7 +6728,6 @@ L_08882C9C: AOT_REGCACHE_SYNC_OUT(); return; L_08882CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -6826,7 +6738,6 @@ L_08882CB0: aot_gpr_5 = (0u | 18u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882D28; } @@ -6839,7 +6750,6 @@ L_08882CC4: AOT_REGCACHE_SYNC_OUT(); return; L_08882CCC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882D08; } @@ -6849,7 +6759,6 @@ L_08882CD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882D00; } @@ -6858,7 +6767,6 @@ L_08882CD4: L_08882CE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08882D00; } @@ -6873,7 +6781,6 @@ L_08882CF0: AOT_REGCACHE_SYNC_OUT(); return; L_08882D00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -6883,7 +6790,6 @@ L_08882D08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882D28; } @@ -6903,7 +6809,6 @@ L_08882D28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882D48; } @@ -6913,7 +6818,6 @@ L_08882D38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882D60; } @@ -6926,7 +6830,6 @@ L_08882D48: AOT_REGCACHE_SYNC_OUT(); return; L_08882D50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882D74; } @@ -6934,7 +6837,6 @@ L_08882D50: } L_08882D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08882DFC; } @@ -6948,7 +6850,6 @@ L_08882D60: AOT_REGCACHE_SYNC_OUT(); return; L_08882D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -6961,7 +6862,6 @@ L_08882D74: AOT_REGCACHE_SYNC_OUT(); return; L_08882D7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882DFC; } @@ -6973,7 +6873,6 @@ L_08882D84: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08882DFC; } @@ -6983,7 +6882,6 @@ L_08882D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882DF4; } @@ -6993,7 +6891,6 @@ L_08882DAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882DF4; } @@ -7011,7 +6908,6 @@ L_08882DC8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08882DF4; } @@ -7027,7 +6923,6 @@ L_08882DE0: AOT_REGCACHE_SYNC_OUT(); return; L_08882DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7037,7 +6932,6 @@ L_08882DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08882E30; } @@ -7050,7 +6944,6 @@ L_08882E0C: AOT_REGCACHE_SYNC_OUT(); return; L_08882E14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088831EC; } @@ -7061,7 +6954,6 @@ L_08882E1C: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088831EC; } @@ -7072,7 +6964,6 @@ L_08882E30: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08882EF4; } @@ -7082,7 +6973,6 @@ L_08882E44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882EF4; } @@ -7092,7 +6982,6 @@ L_08882E54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7102,7 +6991,6 @@ L_08882E64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088834E8; } @@ -7116,7 +7004,6 @@ L_08882E74: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088834E8; } @@ -7126,7 +7013,6 @@ L_08882E94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_088834E8; } @@ -7164,7 +7050,6 @@ L_08882EE0: AOT_REGCACHE_SYNC_OUT(); return; L_08882EEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7187,7 +7072,6 @@ L_08882F00: L_08882F08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08882F18; } @@ -7204,7 +7088,6 @@ L_08882F18: AOT_REGCACHE_SYNC_OUT(); return; L_08882F24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08882FBC; } @@ -7214,7 +7097,6 @@ L_08882F2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882FBC; } @@ -7226,7 +7108,6 @@ L_08882F3C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08882FBC; } @@ -7237,7 +7118,6 @@ L_08882F54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882FBC; } @@ -7258,7 +7138,6 @@ L_08882F68: L_08882F84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08882FBC; } @@ -7280,9 +7159,7 @@ L_08882F90: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[20]; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08882FBC; } @@ -7293,7 +7170,6 @@ L_08882FB8: goto L_08882FBC; L_08882FBC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08883048; } @@ -7303,7 +7179,6 @@ L_08882FC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888302C; } @@ -7314,7 +7189,6 @@ L_08882FD4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888302C; } @@ -7326,7 +7200,6 @@ L_08882FE8: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888302C; } @@ -7338,7 +7211,6 @@ L_08883000: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888302C; } @@ -7352,7 +7224,6 @@ L_08883018: AOT_REGCACHE_SYNC_OUT(); return; L_08883024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08883048; } @@ -7374,7 +7245,6 @@ L_0888303C: L_08883048: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088831E4; } @@ -7387,7 +7257,6 @@ L_08883054: AOT_REGCACHE_SYNC_OUT(); return; L_0888305C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088831E4; } @@ -7397,7 +7266,6 @@ L_08883064: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088831E4; } @@ -7410,7 +7278,6 @@ L_08883074: AOT_REGCACHE_SYNC_OUT(); return; L_0888307C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088831E4; } @@ -7423,7 +7290,6 @@ L_08883084: AOT_REGCACHE_SYNC_OUT(); return; L_0888308C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888313C; } @@ -7438,7 +7304,6 @@ L_08883094: AOT_REGCACHE_SYNC_OUT(); return; L_088830A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888313C; } @@ -7459,9 +7324,7 @@ L_088830AC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888313C; } @@ -7479,7 +7342,6 @@ L_088830D8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883128; } @@ -7494,7 +7356,6 @@ L_088830FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(676))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08883120; } @@ -7513,7 +7374,6 @@ L_08883114: AOT_REGCACHE_SYNC_OUT(); return; L_08883120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888313C; } @@ -7537,7 +7397,6 @@ L_0888313C: AOT_REGCACHE_SYNC_OUT(); return; L_08883144: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088831E4; } @@ -7572,7 +7431,6 @@ L_08883170: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088831E4; } @@ -7590,7 +7448,6 @@ L_08883184: AOT_REGCACHE_SYNC_OUT(); return; L_088831A0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088831E4; } @@ -7627,7 +7484,6 @@ L_088831D8: AOT_REGCACHE_SYNC_OUT(); return; L_088831E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7638,7 +7494,6 @@ L_088831EC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088834E8; } @@ -7650,7 +7505,6 @@ L_08883200: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(32) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088833AC; } @@ -7662,11 +7516,20 @@ L_08883218: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23744))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883230: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(676), 0u); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -7676,7 +7539,6 @@ L_08883230: AOT_REGCACHE_SYNC_OUT(); return; L_08883240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7686,7 +7548,6 @@ L_08883248: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883310; } @@ -7747,9 +7608,7 @@ L_08883278: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08883310; } @@ -7761,7 +7620,6 @@ L_088832C4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088832F4; } @@ -7773,7 +7631,6 @@ L_088832DC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08883310; } @@ -7794,7 +7651,6 @@ L_08883304: AOT_REGCACHE_SYNC_OUT(); return; L_08883310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7819,7 +7675,6 @@ L_08883328: } L_08883338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7852,7 +7707,6 @@ L_08883360: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1756))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1756), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7862,7 +7716,6 @@ L_08883374: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088833A4; } @@ -7883,7 +7736,6 @@ L_08883398: goto L_088833A4; L_088833A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7904,7 +7756,6 @@ L_088833BC: AOT_REGCACHE_SYNC_OUT(); return; L_088833C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7917,7 +7768,6 @@ L_088833D0: AOT_REGCACHE_SYNC_OUT(); return; L_088833D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -7940,7 +7790,6 @@ L_088833F0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088834E8; } @@ -7952,7 +7801,6 @@ L_08883408: L_0888340C: aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088834E8; } @@ -7971,7 +7819,6 @@ L_08883418: } L_0888342C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883464; } @@ -7982,7 +7829,6 @@ L_08883434: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0888345C; } @@ -7993,7 +7839,6 @@ L_08883448: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1156))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08883464; } @@ -8001,7 +7846,6 @@ L_08883448: } L_0888345C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -8010,7 +7854,6 @@ L_0888345C: L_08883464: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088834E8; } @@ -8020,7 +7863,6 @@ L_08883470: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088834E8; } @@ -8028,7 +7870,6 @@ L_08883470: } L_08883480: aot_gpr_31 = (0x08883488u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08883488u) goto L_08883488; AOT_REGCACHE_SYNC_OUT(); return; L_08883488: @@ -8077,7 +7918,17 @@ L_088834E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888350C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8124,7 +7975,17 @@ L_08883570: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883588: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8160,7 +8021,6 @@ L_088835C8: AOT_REGCACHE_SYNC_OUT(); return; L_088835D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088835E0; } @@ -8184,7 +8044,17 @@ L_088835E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088835F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -8210,7 +8080,6 @@ L_08883638: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); if (branch_taken) { @@ -8222,9 +8091,7 @@ L_08883658: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08883680; } @@ -8279,7 +8146,17 @@ L_088836C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088836EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8305,7 +8182,6 @@ L_08883714: AOT_REGCACHE_SYNC_OUT(); return; L_08883730: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888373C; } @@ -8366,7 +8242,6 @@ L_08883794: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088837B0; } @@ -8388,7 +8263,17 @@ L_088837B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088837C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8418,7 +8303,17 @@ L_08883800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883814: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -8435,7 +8330,17 @@ L_08883828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883838: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8473,7 +8378,6 @@ L_08883874: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(596))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088838BC; } @@ -8524,7 +8428,17 @@ L_088838D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088838F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8562,7 +8476,6 @@ L_0888392C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1712))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08883974; } @@ -8613,7 +8526,17 @@ L_0888398C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088839A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8642,7 +8565,6 @@ L_088839D8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); if (branch_taken) { @@ -8656,9 +8578,7 @@ L_08883A08: goto L_08883A10; L_08883A10: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08883A28; } @@ -8670,9 +8590,7 @@ L_08883A20: goto L_08883A28; L_08883A28: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08883A40; } @@ -8697,7 +8615,6 @@ L_08883A40: AOT_REGCACHE_SYNC_OUT(); return; L_08883A68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08883A74; } @@ -8758,7 +8675,6 @@ L_08883ACC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883AE8; } @@ -8781,7 +8697,17 @@ L_08883AE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883B04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8796,7 +8722,6 @@ L_08883B04: L_08883B24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883B40; } @@ -8809,7 +8734,6 @@ L_08883B30: AOT_REGCACHE_SYNC_OUT(); return; L_08883B38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08883B48; } @@ -8829,7 +8753,17 @@ L_08883B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8855,12 +8789,21 @@ L_08883B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08883BA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 897u, 0x0897F774u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08883BA8u) goto L_08883BA8; AOT_REGCACHE_SYNC_OUT(); return; L_08883BA8: @@ -8871,7 +8814,17 @@ L_08883BA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883BB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8884,7 +8837,6 @@ L_08883BB8: AOT_REGCACHE_SYNC_OUT(); return; L_08883BD4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08883BE0; } @@ -8945,7 +8897,6 @@ L_08883C38: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883C54; } @@ -8967,7 +8918,17 @@ L_08883C54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9023,7 +8984,17 @@ L_08883D18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883D30: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -9060,7 +9031,17 @@ L_08883D78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883D90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9090,7 +9071,17 @@ L_08883DBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883DDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9105,7 +9096,6 @@ L_08883DDC: L_08883DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08883E10; } @@ -9132,7 +9122,17 @@ L_08883E18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9241,7 +9241,17 @@ L_08883EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08883ED8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -9310,7 +9320,6 @@ L_08883F58: AOT_REGCACHE_SYNC_OUT(); return; L_08883F74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08883F84; } @@ -9323,9 +9332,7 @@ L_08883F7C: L_08883F84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08883F9C; } @@ -9338,7 +9345,6 @@ L_08883F9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08883FB4; } diff --git a/profiles/vcs/generated/generated_unit_0032.cpp b/profiles/vcs/generated/generated_unit_0032.cpp index 3f0aed9..877a8fd 100644 --- a/profiles/vcs/generated/generated_unit_0032.cpp +++ b/profiles/vcs/generated/generated_unit_0032.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0032[4094] = { - 1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0, 10, 0, 0, 11, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 0, 22, 0, 23, 0, - 24, 0, 25, 26, 0, 27, 0, 0, 28, 0, 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 39, 0, 40, 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 0, - 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 56, 0, 57, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 0, 67, 0, 0, 68, 0, 69, 0, 0, 0, 70, 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, - 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 76, 77, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 81, - 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 84, 85, 0, 86, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 0, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 100, - 0, 101, 0, 0, 0, 0, 0, 0, 0, 102, 0, 103, 104, 0, 105, 0, 0, 106, 0, 107, 0, 108, 0, 109, 0, 0, 0, 0, 0, 110, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 113, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 117, 0, - 118, 0, 0, 0, 0, 0, 119, 0, 120, 0, 121, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 124, 0, 125, 126, 0, 127, 0, 128, 0, 0, 129, - 0, 130, 0, 0, 0, 0, 0, 131, 0, 132, 133, 0, 134, 0, 135, 0, 136, 137, 0, 0, 0, 138, 0, 0, 139, 0, 140, 0, 141, 0, 142, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 146, 0, 147, 0, 0, 0, 0, 0, - 0, 0, 148, 0, 149, 150, 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 156, 0, 0, - 0, 0, 0, 157, 158, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, 162, 0, 0, - 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 169, 0, 170, 0, 171, 0, 0, - 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, 0, 0, 174, 175, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 183, 0, 184, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 186, 0, 0, 0, 0, 0, 187, 188, 0, 189, 0, 0, 190, 0, 191, - 192, 0, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 0, 198, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, 203, 204, 0, 205, 0, 0, 0, 0, 206, - 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 0, 0, 210, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 214, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 0, 219, 220, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 223, 0, 0, 0, - 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 233, 0, 0, - 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, - 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 247, 0, - 248, 0, 0, 249, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 252, 0, 0, 253, 0, 0, 0, 254, 0, 0, 255, 0, 0, 0, - 0, 256, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 262, 0, 0, 263, 0, - 0, 0, 0, 264, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, - 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 273, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, - 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 282, 283, 0, 284, 0, - 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 289, 0, 0, 290, 0, 0, 291, 0, 0, 292, 293, 0, 294, 0, - 295, 296, 0, 297, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 0, 304, 0, 0, 305, - 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 307, 0, 0, 308, 0, 309, 0, 310, 0, 311, 0, 0, 312, 0, 313, 0, 0, 314, 0, 0, 315, - 0, 316, 0, 317, 0, 318, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, 322, 0, 0, 323, 0, 324, 0, - 325, 0, 0, 0, 326, 0, 0, 327, 0, 0, 328, 0, 329, 330, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 333, 0, 334, 0, 0, 0, 335, 0, - 0, 336, 0, 0, 337, 0, 0, 0, 338, 0, 0, 339, 0, 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, - 345, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 351, 0, 0, - 352, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 358, 0, 359, 360, 0, 361, 0, 362, 0, 0, - 363, 0, 0, 364, 0, 0, 365, 0, 366, 0, 0, 367, 0, 368, 0, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 373, 0, 0, 374, - 375, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 382, 0, - 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 390, 0, 0, 391, - 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, - 0, 399, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 408, - 0, 409, 0, 410, 0, 0, 411, 0, 0, 412, 0, 0, 413, 0, 0, 0, 414, 0, 415, 0, 0, 416, 0, 0, 0, 417, 0, 0, 418, 0, 0, 419, - 0, 420, 0, 0, 0, 421, 0, 422, 0, 0, 423, 0, 0, 424, 425, 0, 426, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, 0, 430, 0, 431, - 0, 0, 0, 432, 0, 0, 0, 433, 0, 434, 435, 0, 0, 436, 0, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, - 445, 0, 0, 446, 0, 0, 0, 447, 0, 0, 448, 0, 0, 449, 0, 450, 0, 0, 451, 0, 0, 452, 0, 0, 453, 0, 454, 0, 0, 0, 455, 0, - 456, 0, 457, 0, 0, 458, 0, 0, 459, 0, 460, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 0, 465, 0, 0, 466, 0, 467, 0, - 0, 0, 468, 0, 0, 469, 0, 0, 470, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, 476, 0, 477, 0, 0, 0, - 0, 478, 0, 0, 479, 0, 0, 480, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 486, 487, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, - 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, - 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, - 500, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, - 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, - 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, - 0, 0, 516, 0, 0, 517, 0, 518, 0, 519, 0, 520, 0, 0, 521, 0, 0, 522, 0, 523, 524, 0, 525, 0, 526, 0, 0, 0, 527, 0, 0, 0, - 528, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 0, 0, - 0, 0, 535, 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, - 549, 0, 0, 0, 0, 0, 0, 0, 550, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, - 555, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, - 0, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 564, 0, 565, 0, 0, 0, 0, 566, - 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 571, 0, - 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, - 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, - 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, - 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, - 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 594, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 599, 0, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 0, 602, 0, 603, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 605, 0, 0, - 0, 0, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 0, - 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 614, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, - 0, 0, 0, 618, 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 0, - 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, - 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 634, 0, 635, 0, 0, 0, 0, 0, 636, - 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, - 0, 642, 0, 643, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 647, 0, 0, 0, 0, 0, 648, 0, - 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, - 654, 0, 655, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, 0, 660, 0, 0, - 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, - 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 669, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 671, 0, 0, 672, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, 0, 0, 0, 0, 0, 676, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 681, 0, - 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 686, - 0, 0, 0, 0, 687, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, 0, 692, 0, 0, 0, 0, - 0, 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 696, 0, 0, - 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 700, 0, 0, 701, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 704, 0, 0, 0, 0, 0, 705, - 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 709, 0, 0, 710, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, - 0, 714, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 719, 0, - 0, 0, 0, 720, 0, 721, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 0, - 726, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, - 0, 0, 0, 730, 0, 731, 0, 732, 0, 733, 0, 734, 0, 735, 0, 736, 0, 737, 0, 0, 738, 739, 0, 740, 0, 741, 0, 0, 742, 743, 0, 744, - 0, 0, 745, 0, 0, 746, 747, 0, 748, 0, 0, 749, 0, 750, 0, 751, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, - 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 757, - 0, 0, 0, 0, 758, 0, 759, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 765, 0, 0, 0, 766, 0, 767, - 0, 0, 768, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 772, 0, 0, 0, 773, 0, 0, 774, 0, 0, 775, 0, 776, - 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 780, 0, 781, 0, - 782, 0, 0, 783, 0, 784, 0, 0, 785, 0, 0, 0, 786, 0, 787, 0, 0, 0, 788, 0, 789, 0, 790, 0, 0, 0, 0, 0, 0, 791, 0, 0, - 0, 0, 0, 0, 0, 0, 792, 0, 793, 794, 0, 0, 795, 0, 796, 0, 0, 0, 797, 0, 798, 0, 799, 800, 0, 0, 0, 0, 0, 801, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 804, 0, 805, 0, 806, 0, 807, 0, 0, - 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, 0, 0, 810, 0, 0, 811, 0, 812, 0, 813, 0, 0, 0, 0, 0, 0, 814, 0, 815, 0, 0, 0, - 0, 0, 816, 0, 0, 0, 817, 0, 818, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 0, 0, 822, 0, 0, 0, - 0, 823, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, 826, 0, 0, 827, 0, 828, 0, 829, 0, 0, 0, 0, 830, 0, 0, 0, 0, 831, - 0, 0, 0, 0, 832, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 835, 0, 0, 836, 0, 837, 0, 0, 838, 0, 839, 0, 840, 0, 841, 0, 842, - 0, 843, 0, 0, 844, 0, 0, 0, 0, 0, 845, 0, 846, 0, 0, 0, 0, 847, 0, 0, 0, 848, 0, 849, 0, 0, 0, 0, 0, 850, 0, 0, - 851, 0, 0, 852, 0, 0, 0, 0, 0, 853, 0, 0, 854, 0, 0, 0, 855, 0, 0, 0, 856, 0, 0, 857, 0, 0, 0, 0, 0, 0, 858, 0, - 0, 0, 0, 859, 0, 860, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, 864, 0, 865, - 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 868, 0, 869, 0, 0, 870, 0, 0, 0, 0, 0, 871, 0, 872, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 876, 0, 0, 877, 0, 0, 0, 0, - 878, 879, 0, 880, 0, 881, 0, 882, 0, 883, 0, 884, 885, 0, 886, 0, 887, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 889, 0, 890, 0, 891, - 0, 892, 893, 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, 0, 0, 895, 0, 0, 896, 0, 897, 0, 0, 898, 0, 0, 0, 0, 0, 899, 0, 900, - 0, 901, 0, 0, 902, 0, 903, 0, 0, 0, 904, 0, 905, 0, 0, 906, 0, 907, 0, 0, 908, 0, 909, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 910, 0, 911, 0, 912, 0, 913, 0, 914, 0, 915, 0, 916, 0, 917, 0, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 919, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0032[64] = { + 0x0802002020200425ull, 0x5480408080828232ull, 0x500CB5520041292Dull, 0x280856AA40818240ull, + 0x0401445240021404ull, 0x050B0480A0042C0Aull, 0xA401020900101824ull, 0x680A900020AA5A02ull, + 0x5523568295A14541ull, 0x240502B405480200ull, 0x2A82405222400418ull, 0x041482400040C120ull, + 0x04500289A5824050ull, 0x400C120285824050ull, 0x1210309004010900ull, 0x2090002041212004ull, + 0x4908814848010083ull, 0x4A10821212248209ull, 0x1212440209080128ull, 0x592488245A801402ull, + 0x929548409248828Bull, 0x451234915224042Aull, 0x2240409121244912ull, 0x949229492B488909ull, + 0x9448448448445041ull, 0xA911112240091124ull, 0xA24964A29225124Aull, 0x4524A48955552688ull, + 0x1528512452291525ull, 0x0404314002020192ull, 0x0508082080820808ull, 0x408084142020A101ull, + 0x115A4AA402100808ull, 0x1102221404444409ull, 0x0A02000200014800ull, 0x4021020148008501ull, + 0x4220408085011208ull, 0x2404080804041040ull, 0x2020404020508004ull, 0x0109010802008810ull, + 0x0A10108421028A04ull, 0x0508082840414202ull, 0x828404142020A101ull, 0x4142020A10105080ull, + 0x20A1010508082840ull, 0x0104802090041420ull, 0x4802090041200824ull, 0x0A10105080824010ull, + 0x0208002020800202ull, 0x0820008082401048ull, 0x4041420209004120ull, 0x8020010105080828ull, + 0x2020A964B2B2AAA8ull, 0x2010105080804040ull, 0xA488A104A2200080ull, 0x2054512950410004ull, + 0x2A81020020D45340ull, 0x11104144140A9042ull, 0xAA949110842A500Aull, 0x4091120920A21412ull, + 0xA0941004A0240128ull, 0x0902000001080000ull, 0xA0948046A8215AABull, 0x2001555500529452ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0032[64] = { + 1u, 10u, 24u, 45u, 62u, 74u, 89u, 101u, 118u, 143u, 157u, 172u, 183u, 199u, 213u, 224u, + 234u, 248u, 264u, 277u, 295u, 316u, 336u, 352u, 375u, 392u, 409u, 432u, 456u, 478u, 490u, 500u, + 512u, 528u, 542u, 549u, 560u, 572u, 581u, 590u, 599u, 612u, 624u, 637u, 649u, 661u, 671u, 682u, + 693u, 700u, 709u, 720u, 730u, 754u, 763u, 777u, 792u, 808u, 823u, 843u, 859u, 873u, 878u, 901u, }; void recomp_unit_0032_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0032_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08884000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0032[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0032[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0032[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08884000; @@ -1127,7 +1034,17 @@ L_08884028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884054: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1151,7 +1068,17 @@ L_08884074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884094: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -1175,7 +1102,6 @@ L_088840C4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_16 = (2238u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_16 + static_cast(14864)); if (branch_taken) { @@ -1187,9 +1113,7 @@ L_088840EC: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08884114; } @@ -1224,7 +1148,6 @@ L_08884124: AOT_REGCACHE_SYNC_OUT(); return; L_0888413C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888415C; } @@ -1253,7 +1176,17 @@ L_0888415C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888417C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1276,7 +1209,17 @@ L_0888419C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088841B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1312,7 +1255,6 @@ L_088841F0: goto L_088841F8; L_088841F8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888420C; } @@ -1320,7 +1262,6 @@ L_088841F8: } L_08884200: aot_gpr_31 = (0x08884208u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08884208u) goto L_08884208; AOT_REGCACHE_SYNC_OUT(); return; L_08884208: @@ -1348,7 +1289,6 @@ L_08884220: AOT_REGCACHE_SYNC_OUT(); return; L_0888422C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08884240; } @@ -1373,7 +1313,17 @@ L_08884240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884258: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1411,7 +1361,6 @@ L_08884298: goto L_088842A0; L_088842A0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088842B4; } @@ -1419,7 +1368,6 @@ L_088842A0: } L_088842A8: aot_gpr_31 = (0x088842B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088842B0u) goto L_088842B0; AOT_REGCACHE_SYNC_OUT(); return; L_088842B0: @@ -1494,7 +1442,6 @@ L_08884324: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884340; } @@ -1517,7 +1464,17 @@ L_08884340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888435C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -1551,7 +1508,6 @@ L_0888438C: goto L_08884394; L_08884394: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088843A8; } @@ -1559,7 +1515,6 @@ L_08884394: } L_0888439C: aot_gpr_31 = (0x088843A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088843A4u) goto L_088843A4; AOT_REGCACHE_SYNC_OUT(); return; L_088843A4: @@ -1584,7 +1539,17 @@ L_088843B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088843CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1610,7 +1575,17 @@ L_088843F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884408: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1636,7 +1611,17 @@ L_08884430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884444: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1670,7 +1655,6 @@ L_08884484: } L_08884490: aot_gpr_31 = (0x08884498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08884498u) goto L_08884498; AOT_REGCACHE_SYNC_OUT(); return; L_08884498: @@ -1689,7 +1673,6 @@ L_088844A8: AOT_REGCACHE_SYNC_OUT(); return; L_088844B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088845CC; } @@ -1809,7 +1792,6 @@ L_088845A8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088845C4; } @@ -1820,7 +1802,6 @@ L_088845C0: goto L_088845C4; L_088845C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08884630; } @@ -1874,7 +1855,6 @@ L_08884614: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884630; } @@ -1898,7 +1878,17 @@ L_08884630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1943,7 +1933,17 @@ L_088846A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088846C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1966,7 +1966,6 @@ L_088846E8: goto L_088846F4; L_088846F4: aot_gpr_31 = (0x088846FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088846FCu) goto L_088846FC; AOT_REGCACHE_SYNC_OUT(); return; L_088846FC: @@ -1989,7 +1988,6 @@ L_08884704: } L_08884724: aot_gpr_31 = (0x0888472Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888472Cu) goto L_0888472C; AOT_REGCACHE_SYNC_OUT(); return; L_0888472C: @@ -2016,7 +2014,6 @@ L_08884744: AOT_REGCACHE_SYNC_OUT(); return; L_0888474C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888475C; } @@ -2040,7 +2037,17 @@ L_0888475C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884774: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2064,7 +2071,6 @@ L_088847B0: goto L_088847BC; L_088847BC: aot_gpr_31 = (0x088847C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088847C4u) goto L_088847C4; AOT_REGCACHE_SYNC_OUT(); return; L_088847C4: @@ -2087,7 +2093,6 @@ L_088847CC: } L_088847EC: aot_gpr_31 = (0x088847F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088847F4u) goto L_088847F4; AOT_REGCACHE_SYNC_OUT(); return; L_088847F4: @@ -2116,7 +2121,6 @@ L_08884818: goto L_08884820; L_08884820: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08884838; } @@ -2160,7 +2164,6 @@ L_0888485C: goto L_08884860; L_08884860: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088848C4; } @@ -2174,7 +2177,6 @@ L_08884868: L_08884870: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088848C0; } @@ -2182,7 +2184,6 @@ L_08884870: } L_0888487C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088848A4; } @@ -2194,7 +2195,6 @@ L_08884884: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088848A4; } @@ -2226,7 +2226,6 @@ L_088848B0: AOT_REGCACHE_SYNC_OUT(); return; L_088848B8: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_0888487C; } @@ -2248,7 +2247,6 @@ L_088848C4: L_088848D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088848F0; } @@ -2261,7 +2259,6 @@ L_088848E0: AOT_REGCACHE_SYNC_OUT(); return; L_088848E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088848F8; } @@ -2290,7 +2287,17 @@ L_088848F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884924: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2313,7 +2320,6 @@ L_0888494C: goto L_08884958; L_08884958: aot_gpr_31 = (0x08884960u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08884960u) goto L_08884960; AOT_REGCACHE_SYNC_OUT(); return; L_08884960: @@ -2336,7 +2342,6 @@ L_08884968: } L_08884988: aot_gpr_31 = (0x08884990u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08884990u) goto L_08884990; AOT_REGCACHE_SYNC_OUT(); return; L_08884990: @@ -2402,7 +2407,6 @@ L_088849F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884A10; } @@ -2424,7 +2428,17 @@ L_08884A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884A28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2509,7 +2523,6 @@ L_08884AC4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884B3C; } @@ -2568,7 +2581,6 @@ L_08884B20: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884B3C; } @@ -2591,7 +2603,17 @@ L_08884B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884B58: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2639,7 +2661,6 @@ L_08884BBC: } L_08884BC8: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08884C68; } @@ -2707,7 +2728,6 @@ L_08884C44: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884C60; } @@ -2718,7 +2738,6 @@ L_08884C5C: goto L_08884C60; L_08884C60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08884DCC; } @@ -2733,7 +2752,6 @@ L_08884C68: goto L_08884C74; L_08884C74: aot_gpr_31 = (0x08884C7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08884C7Cu) goto L_08884C7C; AOT_REGCACHE_SYNC_OUT(); return; L_08884C7C: @@ -2754,7 +2772,6 @@ L_08884C8C: AOT_REGCACHE_SYNC_OUT(); return; L_08884C9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08884D68; } @@ -2841,7 +2858,6 @@ L_08884D44: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884D60; } @@ -2852,7 +2868,6 @@ L_08884D5C: goto L_08884D60; L_08884D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08884DCC; } @@ -2906,7 +2921,6 @@ L_08884DB0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884DCC; } @@ -2933,7 +2947,17 @@ L_08884DCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884DF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2978,7 +3002,17 @@ L_08884E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884E68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3019,7 +3053,6 @@ L_08884EB4: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08884EE4; } @@ -3035,7 +3068,6 @@ L_08884ED0: L_08884EE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08884EB4; } @@ -3054,7 +3086,17 @@ L_08884EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884F08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3086,7 +3128,6 @@ L_08884F40: L_08884F54: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08884F78; } @@ -3114,7 +3155,17 @@ L_08884F78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08884F94: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3151,7 +3202,6 @@ L_08884FDC: L_08884FF4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08885004; } @@ -3185,7 +3235,17 @@ L_0888501C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885040: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3217,7 +3277,6 @@ L_08885078: L_0888508C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088850A0; } @@ -3242,12 +3301,21 @@ L_088850A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088850BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08885100; } @@ -3272,7 +3340,6 @@ L_088850E0: L_088850EC: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08885100; } @@ -3280,7 +3347,6 @@ L_088850EC: } L_088850F8: aot_gpr_31 = (0x08885100u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08885100u) goto L_08885100; AOT_REGCACHE_SYNC_OUT(); return; L_08885100: @@ -3290,7 +3356,17 @@ L_08885100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888510C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3367,7 +3443,17 @@ L_08885190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088851A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3386,7 +3472,17 @@ L_088851BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088851D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -3406,7 +3502,17 @@ L_088851EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088851F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -3426,7 +3532,17 @@ L_08885214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885220: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3468,7 +3584,17 @@ L_0888526C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885284: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3526,7 +3652,17 @@ L_088852F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885304: aot_gpr_5 = (2235u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-27628)); @@ -3539,14 +3675,34 @@ L_08885304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885328: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885330: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[18]); @@ -3574,7 +3730,6 @@ L_0888535C: } L_08885364: aot_gpr_31 = (0x0888536Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888536Cu) goto L_0888536C; AOT_REGCACHE_SYNC_OUT(); return; L_0888536C: @@ -3657,7 +3812,6 @@ L_088853F0: } L_088853F8: aot_gpr_31 = (0x08885400u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08885400u) goto L_08885400; AOT_REGCACHE_SYNC_OUT(); return; L_08885400: @@ -3740,7 +3894,17 @@ L_0888547C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885498: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3761,7 +3925,6 @@ L_088854AC: goto L_088854B8; L_088854B8: aot_gpr_31 = (0x088854C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088854C0u) goto L_088854C0; AOT_REGCACHE_SYNC_OUT(); return; L_088854C0: @@ -3776,7 +3939,6 @@ L_088854C8: L_088854D0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088854E4; } @@ -3800,7 +3962,6 @@ L_088854F0: goto L_088854FC; L_088854FC: aot_gpr_31 = (0x08885504u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08885504u) goto L_08885504; AOT_REGCACHE_SYNC_OUT(); return; L_08885504: @@ -3821,7 +3982,17 @@ L_08885514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885528: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3853,7 +4024,6 @@ L_08885564: AOT_REGCACHE_SYNC_OUT(); return; L_08885570: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088855E0; } @@ -3888,7 +4058,6 @@ L_0888559C: AOT_REGCACHE_SYNC_OUT(); return; L_088855A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088855C4; } @@ -4020,7 +4189,17 @@ L_0888569C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088856B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4053,7 +4232,6 @@ L_088856F4: L_08885700: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08885720; } @@ -4108,7 +4286,6 @@ L_08885764: AOT_REGCACHE_SYNC_OUT(); return; L_0888576C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088857F0; } @@ -4134,7 +4311,6 @@ L_0888578C: AOT_REGCACHE_SYNC_OUT(); return; L_08885798: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088857B4; } @@ -4209,14 +4385,23 @@ L_08885800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885818: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08885838; } @@ -4224,7 +4409,6 @@ L_08885818: } L_08885830: aot_gpr_31 = (0x08885838u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08885838u) goto L_08885838; AOT_REGCACHE_SYNC_OUT(); return; L_08885838: @@ -4341,12 +4525,21 @@ L_08885920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08885940u); - // nop goto L_0888594C; L_08885940: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4355,7 +4548,17 @@ L_08885940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888594C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4435,7 +4638,6 @@ L_088859FC: AOT_REGCACHE_SYNC_OUT(); return; L_08885A04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08885C28; } @@ -4468,7 +4670,6 @@ L_08885A30: AOT_REGCACHE_SYNC_OUT(); return; L_08885A40: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08885C14; } @@ -4501,7 +4702,6 @@ L_08885A70: AOT_REGCACHE_SYNC_OUT(); return; L_08885A7C: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08885A94; } @@ -4522,7 +4722,6 @@ L_08885A94: L_08885A9C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08885AB8; } @@ -4539,7 +4738,6 @@ L_08885AB4: goto L_08885AB8; L_08885AB8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08885C08; } @@ -4579,7 +4777,6 @@ L_08885AFC: ctx.gpr[21] = (ctx.gpr[2] - ctx.gpr[19]); ctx.gpr[21] = (ctx.gpr[21] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[21]) <= 0; - // nop if (branch_taken) { goto L_08885B24; } @@ -4594,7 +4791,6 @@ L_08885B0C: AOT_REGCACHE_SYNC_OUT(); return; L_08885B1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08885B28; } @@ -4612,7 +4808,6 @@ L_08885B28: L_08885B34: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08885BBC; } @@ -4664,7 +4859,6 @@ L_08885B70: AOT_REGCACHE_SYNC_OUT(); return; L_08885B78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08885BBC; } @@ -4697,7 +4891,6 @@ L_08885BA8: AOT_REGCACHE_SYNC_OUT(); return; L_08885BB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08885C08; } @@ -4723,7 +4916,6 @@ L_08885BD4: AOT_REGCACHE_SYNC_OUT(); return; L_08885BE0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08885C08; } @@ -4743,7 +4935,6 @@ L_08885BF8: AOT_REGCACHE_SYNC_OUT(); return; L_08885C00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08885D20; } @@ -4788,7 +4979,6 @@ L_08885C40: AOT_REGCACHE_SYNC_OUT(); return; L_08885C4C: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08885C78; } @@ -4804,7 +4994,6 @@ L_08885C54: L_08885C64: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08885CE8; } @@ -4812,7 +5001,6 @@ L_08885C64: } L_08885C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08885D10; } @@ -4846,7 +5034,6 @@ L_08885CA0: AOT_REGCACHE_SYNC_OUT(); return; L_08885CB0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08885CD4; } @@ -4862,7 +5049,6 @@ L_08885CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08885CCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08885CE0; } @@ -4876,7 +5062,6 @@ L_08885CD4: AOT_REGCACHE_SYNC_OUT(); return; L_08885CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08885C30; } @@ -4898,7 +5083,6 @@ L_08885CF0: L_08885D04: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08885CE8; } @@ -4929,7 +5113,17 @@ L_08885D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885D44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4952,7 +5146,6 @@ L_08885D64: ctx.fpr[16] = aot_fpr_13 - aot_fpr_12; aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[16])) && aot_fpr_14 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8080), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -4966,9 +5159,7 @@ L_08885D98: goto L_08885DA0; L_08885DA0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08885DB4; } @@ -4986,7 +5177,17 @@ L_08885DB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885DC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5011,7 +5212,17 @@ L_08885DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5027,7 +5238,6 @@ L_08885E2C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8088))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08885E44; @@ -5043,7 +5253,17 @@ L_08885E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885E5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5059,7 +5279,6 @@ L_08885E7C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8092))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08885E94; @@ -5075,7 +5294,17 @@ L_08885E94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885EAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5092,7 +5321,6 @@ L_08885ECC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8096))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08885EE8; } @@ -5116,7 +5344,17 @@ L_08885EE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5133,7 +5371,6 @@ L_08885F20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8100))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08885F3C; } @@ -5157,7 +5394,17 @@ L_08885F3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885F54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5174,7 +5421,6 @@ L_08885F74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8104))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08885F90; } @@ -5198,7 +5444,17 @@ L_08885F90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885FA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8108))); ctx.gpr[2] = (0u | 0u); @@ -5208,7 +5464,17 @@ L_08885FA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885FBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5231,7 +5497,17 @@ L_08885FDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08885FF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8116))); ctx.gpr[2] = (0u | 0u); @@ -5241,7 +5517,17 @@ L_08885FF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888600C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5266,7 +5552,17 @@ L_0888602C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8124))); ctx.gpr[2] = (0u | 0u); @@ -5276,7 +5572,17 @@ L_08886050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886064: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -5325,7 +5631,6 @@ L_088860AC: L_088860B8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088860D0; } @@ -5382,12 +5687,21 @@ L_0888610C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886128: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08886138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 161u, 0x08990BA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08886138u) goto L_08886138; AOT_REGCACHE_SYNC_OUT(); return; L_08886138: @@ -5398,12 +5712,21 @@ L_08886138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886148: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08886158u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 162u, 0x08990BB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08886158u) goto L_08886158; AOT_REGCACHE_SYNC_OUT(); return; L_08886158: @@ -5414,7 +5737,17 @@ L_08886158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5440,12 +5773,21 @@ L_08886190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088861A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088861B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 163u, 0x08990BC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088861B4u) goto L_088861B4; AOT_REGCACHE_SYNC_OUT(); return; L_088861B4: @@ -5456,7 +5798,17 @@ L_088861B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088861C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -5475,7 +5827,17 @@ L_088861E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088861F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5545,7 +5907,17 @@ L_08886284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088862C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5571,7 +5943,17 @@ L_088862EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886300: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5597,7 +5979,17 @@ L_08886328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888633C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5650,7 +6042,17 @@ L_088863A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088863C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5680,7 +6082,17 @@ L_088863F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888640C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8136))); @@ -5704,7 +6116,17 @@ L_08886430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886440: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5730,7 +6152,17 @@ L_08886468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888647C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5753,7 +6185,17 @@ L_0888649C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088864B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -5772,7 +6214,17 @@ L_088864D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088864E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8140))); ctx.gpr[2] = (0u | 0u); @@ -5782,7 +6234,17 @@ L_088864E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088864F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5798,7 +6260,6 @@ L_08886518: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08886530; @@ -5814,7 +6275,17 @@ L_08886530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886548: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5839,7 +6310,17 @@ L_08886568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888658C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5862,7 +6343,17 @@ L_088865AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088865C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5889,7 +6380,17 @@ L_088865F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886608: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -5918,7 +6419,6 @@ L_0888663C: } L_08886650: aot_gpr_31 = (0x08886658u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08886658u) goto L_08886658; AOT_REGCACHE_SYNC_OUT(); return; L_08886658: @@ -5946,7 +6446,17 @@ L_08886674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886698: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5969,7 +6479,17 @@ L_088866B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088866D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5992,7 +6512,17 @@ L_088866F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886710: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -6011,7 +6541,17 @@ L_0888672C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888673C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6042,7 +6582,17 @@ L_08886764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888678C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8168))); ctx.gpr[2] = (0u | 0u); @@ -6052,7 +6602,17 @@ L_0888678C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088867A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6079,7 +6639,17 @@ L_088867CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088867E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6116,7 +6686,6 @@ L_08886824: } L_0888682C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8172), aot_gpr_5); if (branch_taken) { @@ -6146,7 +6715,17 @@ L_08886844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886860: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8180))); ctx.gpr[2] = (0u | 0u); @@ -6156,7 +6735,17 @@ L_08886860: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886874: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8184))); ctx.gpr[2] = (0u | 0u); @@ -6166,7 +6755,17 @@ L_08886874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886888: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8188))); ctx.gpr[2] = (0u | 0u); @@ -6176,7 +6775,17 @@ L_08886888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888689C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8192))); ctx.gpr[2] = (0u | 0u); @@ -6186,7 +6795,17 @@ L_0888689C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088868B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6203,7 +6822,6 @@ L_088868D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8196))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088868EC; } @@ -6227,7 +6845,17 @@ L_088868EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886904: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6244,7 +6872,6 @@ L_08886924: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8200))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886940; } @@ -6268,7 +6895,17 @@ L_08886940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886958: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6285,7 +6922,6 @@ L_08886978: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8204))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886994; } @@ -6309,7 +6945,17 @@ L_08886994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088869AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6326,7 +6972,6 @@ L_088869CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8208))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088869E8; } @@ -6350,7 +6995,17 @@ L_088869E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6367,7 +7022,6 @@ L_08886A20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8212))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886A3C; } @@ -6391,7 +7045,17 @@ L_08886A3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886A54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6408,7 +7072,6 @@ L_08886A74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8216))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886A90; } @@ -6432,7 +7095,17 @@ L_08886A90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886AA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6449,7 +7122,6 @@ L_08886AC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8220))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886AE4; } @@ -6473,7 +7145,17 @@ L_08886AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886AFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6490,7 +7172,6 @@ L_08886B1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8224))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886B38; } @@ -6514,7 +7195,17 @@ L_08886B38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886B50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6531,7 +7222,6 @@ L_08886B70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8228))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886B8C; } @@ -6555,7 +7245,17 @@ L_08886B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886BA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6572,7 +7272,6 @@ L_08886BC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8232))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886BE0; } @@ -6596,7 +7295,17 @@ L_08886BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886BF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6613,7 +7322,6 @@ L_08886C18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8236))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886C34; } @@ -6637,7 +7345,17 @@ L_08886C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886C4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6654,7 +7372,6 @@ L_08886C6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8240))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886C88; } @@ -6678,7 +7395,17 @@ L_08886C88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886CA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6695,7 +7422,6 @@ L_08886CC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8244))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886CDC; } @@ -6719,7 +7445,17 @@ L_08886CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886CF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6736,7 +7472,6 @@ L_08886D14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8248))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886D30; } @@ -6760,7 +7495,17 @@ L_08886D30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886D48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6793,7 +7538,17 @@ L_08886D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886D94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6826,7 +7581,17 @@ L_08886DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6859,7 +7624,17 @@ L_08886E14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6892,7 +7667,17 @@ L_08886E60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886E78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6925,7 +7710,17 @@ L_08886EAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886EC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6958,7 +7753,17 @@ L_08886EF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886F10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6991,7 +7796,17 @@ L_08886F44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7008,7 +7823,6 @@ L_08886F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8252))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886F98; } @@ -7032,7 +7846,17 @@ L_08886F98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08886FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7049,7 +7873,6 @@ L_08886FD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8256))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08886FEC; } @@ -7073,7 +7896,17 @@ L_08886FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887004: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7097,7 +7930,6 @@ L_08887024: aot_fpr_13 = aot_fpr_14 / aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0888705C; @@ -7113,7 +7945,17 @@ L_0888705C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7137,7 +7979,6 @@ L_08887094: aot_fpr_13 = aot_fpr_14 / aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088870CC; @@ -7153,7 +7994,17 @@ L_088870CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088870E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7186,7 +8037,17 @@ L_08887118: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887130: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7219,7 +8080,17 @@ L_08887164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888717C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7243,7 +8114,6 @@ L_0888719C: aot_fpr_13 = aot_fpr_14 / aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088871D4; @@ -7259,7 +8129,17 @@ L_088871D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088871EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7292,7 +8172,17 @@ L_08887220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7325,7 +8215,17 @@ L_0888726C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887284: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7342,7 +8242,6 @@ L_088872A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8272))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088872C0; } @@ -7366,7 +8265,17 @@ L_088872C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088872D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7383,7 +8292,6 @@ L_088872F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8276))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08887314; } @@ -7407,7 +8315,17 @@ L_08887314: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888732C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7424,7 +8342,6 @@ L_0888734C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8280))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08887368; } @@ -7448,7 +8365,17 @@ L_08887368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887380: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7477,7 +8404,17 @@ L_088873A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088873D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7503,7 +8440,6 @@ L_088873FC: } L_0888740C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088874BC; } @@ -7519,7 +8455,6 @@ L_08887414: } L_0888741C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888745C; } @@ -7535,7 +8470,6 @@ L_08887424: } L_0888742C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088874A0; } @@ -7543,7 +8477,6 @@ L_0888742C: } L_08887434: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088874BC; } @@ -7551,7 +8484,6 @@ L_08887434: } L_0888743C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08887450; } @@ -7571,7 +8503,6 @@ L_08887450: goto L_08887454; L_08887454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088874BC; } @@ -7579,7 +8510,6 @@ L_08887454: } L_0888745C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08887470; } @@ -7599,7 +8529,6 @@ L_08887470: goto L_08887474; L_08887474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088874BC; } @@ -7608,7 +8537,6 @@ L_08887474: L_0888747C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08887494; } @@ -7628,7 +8556,6 @@ L_08887494: goto L_08887498; L_08887498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088874BC; } @@ -7637,7 +8564,6 @@ L_08887498: L_088874A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088874B4; } @@ -7649,7 +8575,6 @@ L_088874AC: goto L_088874B4; L_088874B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088874BC; } @@ -7668,7 +8593,17 @@ L_088874BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088874D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7693,7 +8628,17 @@ L_088874F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7718,7 +8663,17 @@ L_08887538: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888755C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7735,7 +8690,6 @@ L_0888757C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8304))); aot_gpr_6 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08887598; } @@ -7759,7 +8713,17 @@ L_08887598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088875B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7784,7 +8748,17 @@ L_088875D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088875F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7819,7 +8793,17 @@ L_0888761C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887654: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7842,7 +8826,6 @@ L_08887664: } L_08887674: aot_gpr_31 = (0x0888767Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888767Cu) goto L_0888767C; AOT_REGCACHE_SYNC_OUT(); return; L_0888767C: @@ -7852,7 +8835,17 @@ L_0888767C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887688: aot_gpr_5 = (2234u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(21416)); @@ -7878,12 +8871,21 @@ L_088876B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088876BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088876FC; } @@ -7907,7 +8909,6 @@ L_088876DC: L_088876E8: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088876FC; } @@ -7915,7 +8916,6 @@ L_088876E8: } L_088876F4: aot_gpr_31 = (0x088876FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088876FCu) goto L_088876FC; AOT_REGCACHE_SYNC_OUT(); return; L_088876FC: @@ -7925,7 +8925,17 @@ L_088876FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887708: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(72))); @@ -7962,7 +8972,6 @@ L_08887758: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08887778; } @@ -7970,7 +8979,6 @@ L_08887758: } L_08887770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088877D8; } @@ -7987,7 +8995,6 @@ L_08887780: goto L_08887A68; L_0888778C: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_088877D0; } @@ -7996,7 +9003,6 @@ L_0888778C: L_08887794: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088877B8; } @@ -8014,7 +9020,6 @@ L_088877A0: } L_088877B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088877D8; } @@ -8028,7 +9033,6 @@ L_088877B8: goto L_08887A0C; L_088877C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088877D8; } @@ -8036,7 +9040,6 @@ L_088877C8: } L_088877D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088877D8; } @@ -8056,7 +9059,17 @@ L_088877D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088877F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8090,7 +9103,6 @@ L_08887824: goto L_08887A68; L_08887830: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_08887850; } @@ -8100,7 +9112,6 @@ L_08887838: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08887824; } @@ -8108,7 +9119,6 @@ L_08887838: } L_08887848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08887858; } @@ -8138,7 +9148,17 @@ L_0888785C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887874: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(72))); @@ -8183,7 +9203,6 @@ L_088878C0: AOT_REGCACHE_SYNC_OUT(); return; L_088878DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088878F4; } @@ -8191,7 +9210,6 @@ L_088878DC: } L_088878E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08887904; } @@ -8199,7 +9217,6 @@ L_088878E4: } L_088878EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08887904; } @@ -8223,7 +9240,17 @@ L_08887904: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887918: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8308,7 +9335,6 @@ L_088879B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088879E0; } @@ -8324,7 +9350,6 @@ L_088879E0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08887930; } @@ -8342,14 +9367,34 @@ L_088879F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887A04: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887A0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8381,7 +9426,6 @@ L_08887A38: } L_08887A44: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08887A54; } @@ -8404,7 +9448,17 @@ L_08887A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887A68: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -8414,7 +9468,17 @@ L_08887A68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887A7C: aot_gpr_5 = (2234u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(21472)); @@ -8424,12 +9488,21 @@ L_08887A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08887AD0; } @@ -8453,7 +9526,6 @@ L_08887AB0: L_08887ABC: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08887AD0; } @@ -8461,7 +9533,6 @@ L_08887ABC: } L_08887AC8: aot_gpr_31 = (0x08887AD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887AD0u) goto L_08887AD0; AOT_REGCACHE_SYNC_OUT(); return; L_08887AD0: @@ -8471,46 +9542,101 @@ L_08887AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887ADC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887AE4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887AEC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887AF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887AFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887B04: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08887B28; } @@ -8534,7 +9660,17 @@ L_08887B28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887B30: aot_gpr_6 = (aot_gpr_4 | 0u); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -8550,7 +9686,6 @@ L_08887B44: aot_gpr_6 = (aot_gpr_6 + static_cast(2)); ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08887B44; } @@ -8558,7 +9693,6 @@ L_08887B44: } L_08887B54: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08887B74; } @@ -8583,7 +9717,17 @@ L_08887B74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887B80: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -8612,7 +9756,17 @@ L_08887BA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887BB0: aot_gpr_6 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); @@ -8636,7 +9790,6 @@ L_08887BC0: L_08887BD0: aot_gpr_5 = (static_cast(aot_gpr_5) < 123 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08887BF8; } @@ -8664,7 +9817,6 @@ L_08887BF8: goto L_08887C0C; L_08887C0C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08887BC0; } @@ -8677,7 +9829,17 @@ L_08887C14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2223u << 16u); @@ -8698,7 +9860,17 @@ L_08887C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887C54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2223u << 16u); @@ -8722,7 +9894,17 @@ L_08887C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887C88: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); @@ -8731,9 +9913,7 @@ L_08887C88: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08887CD0; } @@ -8743,7 +9923,6 @@ L_08887CB0: aot_gpr_4 = (17076u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17036u << 16u); if (branch_taken) { @@ -8778,11 +9957,20 @@ L_08887CDC: goto L_08887CF4; L_08887CF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887CFC: ctx.gpr[7] = (0u | 113u); aot_fpr_12 = std::bit_cast(0u); @@ -8844,7 +10032,17 @@ L_08887D60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887DC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -8909,7 +10107,6 @@ L_08887E1C: goto L_08887E24; L_08887E24: aot_gpr_31 = (0x08887E2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887E2Cu) goto L_08887E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08887E2C: @@ -8917,7 +10114,6 @@ L_08887E2C: goto L_08887E30; L_08887E30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08887E40; } @@ -8940,7 +10136,17 @@ L_08887E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887E54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -8955,12 +10161,10 @@ L_08887E54: } L_08887E6C: aot_gpr_31 = (0x08887E74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887E74u) goto L_08887E74; AOT_REGCACHE_SYNC_OUT(); return; L_08887E74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08887E84; } @@ -8982,7 +10186,17 @@ L_08887E88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08887E98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8992,7 +10206,6 @@ L_08887E98: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08887FF4; } @@ -9046,7 +10259,6 @@ L_08887EF4: } L_08887EFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08887FF4; } @@ -9100,7 +10312,6 @@ L_08887F3C: L_08887F44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08887F80; } @@ -9130,7 +10341,6 @@ L_08887F80: AOT_REGCACHE_SYNC_OUT(); return; L_08887F88: aot_gpr_31 = (0x08887F90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887F90u) goto L_08887F90; AOT_REGCACHE_SYNC_OUT(); return; L_08887F90: @@ -9146,22 +10356,18 @@ L_08887F98: AOT_REGCACHE_SYNC_OUT(); return; L_08887FA0: aot_gpr_31 = (0x08887FA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887FA8u) goto L_08887FA8; AOT_REGCACHE_SYNC_OUT(); return; L_08887FA8: aot_gpr_31 = (0x08887FB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887FB0u) goto L_08887FB0; AOT_REGCACHE_SYNC_OUT(); return; L_08887FB0: aot_gpr_31 = (0x08887FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 57u, 0x0893441Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08887FB8u) goto L_08887FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08887FB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08887F88; } diff --git a/profiles/vcs/generated/generated_unit_0033.cpp b/profiles/vcs/generated/generated_unit_0033.cpp index 683c59a..db59c90 100644 --- a/profiles/vcs/generated/generated_unit_0033.cpp +++ b/profiles/vcs/generated/generated_unit_0033.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0033[4096] = { - 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 9, 0, 0, 10, 0, - 0, 11, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 16, 0, 0, 0, 17, 0, 0, 18, 0, 19, 20, 0, 21, 0, - 22, 0, 23, 0, 0, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 34, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, - 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, - 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, 57, 0, 0, 58, 59, 0, 0, 0, 60, 0, 61, - 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 0, 69, 0, 70, 71, 0, 72, 0, 0, 73, 0, 74, 0, 0, 75, 0, 0, 76, - 0, 77, 0, 0, 78, 0, 79, 0, 80, 0, 0, 81, 82, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 87, 0, - 88, 0, 89, 0, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 96, 0, 97, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 0, 100, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, - 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 116, 117, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 121, 0, 122, 0, 0, 123, 0, 0, 124, - 0, 0, 125, 0, 126, 0, 127, 0, 128, 0, 0, 0, 129, 0, 130, 0, 131, 0, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 0, - 0, 138, 0, 139, 0, 140, 0, 0, 0, 141, 0, 142, 0, 143, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 147, - 0, 148, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, - 0, 159, 0, 160, 0, 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, - 168, 0, 0, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 0, 179, 0, 180, 0, 181, 0, - 182, 0, 183, 0, 0, 0, 184, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 188, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 191, - 0, 0, 192, 0, 193, 194, 0, 0, 0, 0, 195, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 199, 0, 200, 0, - 201, 0, 202, 0, 203, 0, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, - 0, 217, 0, 218, 0, 219, 0, 0, 0, 0, 220, 0, 221, 222, 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, 0, 227, 228, 0, 229, 0, 0, 0, - 0, 230, 0, 231, 0, 0, 0, 0, 232, 0, 233, 234, 0, 235, 0, 0, 236, 0, 237, 0, 0, 0, 238, 0, 239, 0, 0, 240, 0, 241, 242, 0, - 243, 0, 0, 244, 0, 245, 246, 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, - 256, 0, 0, 0, 0, 257, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 263, 0, 0, - 264, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 271, 0, 0, 0, 272, 0, 0, - 273, 0, 0, 0, 0, 0, 0, 274, 0, 275, 0, 0, 0, 276, 277, 0, 278, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 287, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, - 0, 291, 0, 292, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, - 0, 296, 0, 0, 0, 297, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 303, 304, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, - 309, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 313, 314, 0, 0, 0, 0, 0, 0, 315, 0, 316, - 0, 0, 0, 0, 0, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 0, 0, 0, 327, 0, 328, - 0, 0, 0, 0, 329, 0, 330, 0, 331, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, - 337, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 339, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 342, 343, 0, 0, 0, 0, 0, 0, - 344, 0, 0, 0, 0, 345, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, 0, 351, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 354, 0, 0, 355, 0, 0, 356, 0, 0, 0, 357, 0, 358, - 0, 359, 0, 360, 0, 0, 361, 0, 0, 0, 362, 0, 0, 363, 364, 0, 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 367, 0, 0, 368, 0, 0, - 369, 0, 0, 370, 0, 0, 371, 372, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 375, 0, 0, 376, 0, 0, 377, 378, 0, 0, 0, 0, 0, - 379, 0, 0, 380, 0, 381, 0, 382, 0, 0, 383, 0, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 389, 0, 0, 0, 390, - 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 399, 0, 400, 0, 0, 401, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, - 406, 0, 0, 0, 0, 407, 408, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, - 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, - 0, 426, 0, 0, 427, 428, 0, 429, 0, 430, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 433, 0, 434, 0, 0, 435, 0, 436, 0, - 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, - 451, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 457, 0, 0, 458, 0, 459, 0, 0, 460, - 0, 461, 0, 462, 0, 463, 0, 464, 0, 465, 0, 466, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, - 471, 0, 0, 472, 0, 473, 474, 0, 0, 0, 475, 476, 0, 0, 0, 477, 0, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 0, - 0, 484, 0, 0, 0, 485, 0, 0, 486, 0, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 0, - 497, 0, 498, 0, 499, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 503, 0, 504, 0, 505, 0, 0, 506, 0, 507, 0, 508, 0, 509, - 0, 510, 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 514, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 519, 0, 520, 0, - 521, 0, 0, 0, 522, 0, 0, 523, 0, 524, 0, 525, 0, 526, 527, 0, 528, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, 0, 531, 0, 532, 0, - 0, 533, 0, 0, 0, 534, 0, 0, 535, 536, 0, 537, 0, 0, 0, 0, 538, 0, 0, 539, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 541, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 544, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 549, 0, 0, 0, 0, 0, 550, 0, 0, - 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 558, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 561, 0, - 0, 0, 0, 0, 562, 0, 563, 0, 564, 0, 0, 0, 565, 0, 0, 0, 566, 567, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 571, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 575, 576, 0, 577, 0, 0, 578, 0, 0, 0, 579, 580, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 582, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 586, 0, 587, 0, 0, 0, 588, - 0, 589, 0, 590, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 596, 0, 0, 597, 0, 598, 0, - 599, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 0, 606, 0, 0, 0, 607, 0, 608, 0, - 609, 0, 610, 0, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 615, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 0, 620, 0, 621, 0, 622, 623, - 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 626, 0, 627, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 630, - 0, 631, 632, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 641, 0, 642, - 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 0, 0, - 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 657, 658, 0, 659, 0, 0, 660, 0, 0, 661, 0, 662, 0, 663, 0, 0, 0, 0, 664, - 0, 0, 0, 665, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 670, 671, 0, 0, 672, 0, 673, - 674, 0, 675, 0, 676, 0, 0, 677, 0, 678, 679, 0, 680, 0, 681, 0, 0, 0, 682, 0, 683, 0, 0, 684, 0, 0, 0, 0, 685, 0, 0, 686, - 687, 0, 0, 688, 0, 0, 689, 0, 0, 0, 0, 690, 0, 691, 0, 0, 692, 0, 0, 0, 0, 693, 0, 0, 694, 0, 0, 695, 696, 0, 0, 0, - 697, 0, 0, 0, 698, 0, 699, 0, 700, 0, 701, 0, 0, 702, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 706, - 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 709, 0, 710, 0, 0, 711, 0, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, - 0, 717, 0, 0, 718, 0, 719, 0, 720, 0, 0, 0, 0, 721, 0, 722, 0, 723, 0, 724, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, - 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, 734, 0, 0, 735, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 737, 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 740, 0, 741, 0, 0, 0, 0, - 742, 743, 0, 0, 0, 744, 0, 745, 0, 0, 746, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 751, 0, 752, 0, 753, 0, 754, 0, 755, 0, 0, - 756, 0, 0, 757, 0, 758, 0, 0, 0, 759, 0, 760, 0, 0, 0, 761, 0, 762, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, 0, 766, 0, 0, - 0, 767, 0, 768, 0, 0, 0, 769, 0, 770, 0, 0, 0, 771, 0, 772, 0, 0, 0, 773, 0, 774, 0, 0, 0, 775, 0, 776, 0, 0, 777, 0, - 778, 0, 0, 0, 779, 0, 0, 780, 0, 0, 781, 0, 0, 0, 782, 0, 783, 0, 0, 784, 0, 785, 786, 0, 0, 787, 0, 788, 0, 0, 789, 0, - 790, 0, 0, 791, 0, 0, 792, 0, 0, 0, 0, 793, 0, 0, 0, 0, 794, 0, 795, 796, 0, 0, 797, 0, 798, 0, 799, 0, 0, 0, 0, 0, - 0, 800, 0, 801, 0, 0, 802, 0, 0, 803, 0, 804, 805, 0, 806, 0, 0, 807, 0, 808, 0, 809, 0, 810, 0, 0, 811, 0, 0, 812, 0, 813, - 814, 0, 815, 0, 816, 0, 0, 817, 0, 818, 0, 0, 819, 0, 0, 820, 0, 821, 822, 0, 823, 0, 824, 0, 0, 825, 0, 826, 0, 0, 827, 0, - 0, 828, 0, 829, 830, 0, 831, 0, 832, 0, 0, 833, 0, 834, 0, 0, 835, 0, 0, 836, 0, 837, 838, 0, 839, 0, 840, 0, 0, 841, 0, 842, - 0, 0, 843, 0, 0, 844, 0, 845, 846, 0, 847, 0, 848, 0, 0, 849, 0, 850, 0, 0, 851, 0, 0, 852, 0, 853, 854, 0, 855, 0, 856, 0, - 0, 857, 0, 858, 0, 0, 859, 0, 0, 860, 0, 861, 862, 0, 863, 0, 864, 0, 0, 865, 0, 866, 0, 0, 867, 0, 0, 868, 0, 869, 870, 0, - 871, 0, 872, 0, 0, 873, 0, 874, 0, 0, 875, 0, 0, 876, 0, 877, 878, 0, 879, 0, 880, 0, 0, 881, 0, 882, 883, 0, 884, 0, 885, 0, - 0, 886, 0, 887, 888, 0, 889, 0, 890, 0, 0, 891, 0, 892, 893, 0, 894, 0, 895, 0, 896, 0, 0, 897, 0, 898, 0, 899, 0, 900, 0, 0, - 901, 0, 0, 902, 0, 0, 903, 0, 904, 905, 0, 906, 0, 907, 0, 908, 0, 909, 0, 910, 911, 0, 912, 0, 913, 0, 0, 914, 0, 0, 0, 915, - 0, 916, 0, 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, 918, 0, 919, 0, 0, 0, 920, 0, 921, 0, 0, 922, 0, 0, 0, 923, 0, 0, 924, - 0, 0, 925, 0, 0, 926, 0, 927, 928, 0, 929, 0, 0, 930, 0, 0, 931, 0, 932, 0, 0, 933, 0, 0, 0, 934, 0, 0, 935, 0, 0, 0, - 0, 936, 0, 937, 0, 0, 938, 0, 939, 0, 940, 0, 941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 943, 0, 0, 944, 0, 945, - 0, 0, 0, 0, 946, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 948, 0, 0, 0, 0, 949, 0, 0, 0, 0, 0, - 0, 0, 0, 950, 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, 952, 0, 953, 0, 0, 0, 0, 0, 0, 0, 0, 954, 0, 955, 0, 956, 0, 0, - 0, 0, 0, 957, 0, 0, 0, 0, 958, 0, 0, 0, 0, 0, 0, 959, 0, 0, 0, 0, 960, 0, 961, 0, 0, 962, 0, 963, 964, 0, 965, 0, - 0, 966, 0, 0, 967, 0, 968, 0, 0, 969, 0, 0, 970, 0, 0, 0, 971, 0, 972, 0, 0, 0, 973, 0, 0, 0, 0, 0, 0, 0, 0, 974, - 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, 976, 0, 0, 0, 0, 977, 0, 978, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 979, 0, 980, 0, - 981, 0, 982, 983, 0, 984, 0, 0, 0, 985, 0, 0, 0, 986, 0, 0, 0, 987, 0, 0, 988, 0, 989, 0, 990, 0, 0, 991, 0, 0, 0, 992, - 0, 0, 993, 0, 0, 0, 0, 994, 0, 995, 0, 996, 0, 0, 0, 997, 0, 0, 998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 999, 1000, 0, 0, - 0, 0, 1001, 0, 1002, 0, 1003, 0, 1004, 0, 1005, 0, 0, 1006, 0, 0, 0, 1007, 0, 0, 1008, 0, 0, 1009, 0, 0, 1010, 1011, 0, 1012, 0, 0, - 0, 0, 0, 1013, 0, 0, 0, 0, 0, 1014, 0, 0, 1015, 0, 1016, 0, 0, 0, 0, 1017, 0, 0, 1018, 0, 1019, 0, 1020, 0, 1021, 0, 0, 0, - 1022, 0, 1023, 0, 1024, 1025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1026, 0, 1027, 0, 1028, 0, 0, 1029, 0, 1030, 1031, 0, 1032, 0, 0, 0, - 0, 0, 0, 0, 1033, 0, 1034, 0, 0, 1035, 0, 0, 1036, 0, 0, 1037, 0, 0, 1038, 0, 1039, 1040, 0, 1041, 1042, 0, 1043, 0, 1044, 0, 0, 1045, - 0, 0, 1046, 0, 0, 1047, 0, 1048, 0, 0, 1049, 0, 0, 1050, 0, 0, 1051, 0, 1052, 0, 0, 0, 1053, 0, 1054, 0, 0, 1055, 0, 0, 0, 1056, - 0, 0, 0, 0, 1057, 0, 0, 0, 1058, 0, 1059, 0, 0, 0, 1060, 0, 0, 0, 0, 0, 1061, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1062, 0, 0, 1063, 0, 0, 0, 0, 0, 0, 0, 1064, 0, 0, 0, 0, 0, 1065, 0, 0, 1066, 0, 0, 1067, 0, 1068, 0, 1069, 0, - 1070, 0, 1071, 1072, 0, 1073, 0, 0, 1074, 0, 1075, 0, 0, 0, 1076, 0, 1077, 0, 1078, 0, 0, 0, 1079, 0, 1080, 0, 1081, 0, 1082, 1083, 0, 1084, - 0, 1085, 0, 1086, 0, 1087, 0, 1088, 0, 1089, 0, 1090, 0, 1091, 0, 0, 1092, 0, 1093, 0, 1094, 0, 1095, 0, 0, 0, 1096, 0, 1097, 0, 0, 1098, - 0, 0, 0, 0, 1099, 0, 0, 1100, 0, 1101, 1102, 0, 1103, 0, 0, 1104, 0, 0, 0, 0, 1105, 0, 0, 1106, 0, 1107, 1108, 0, 1109, 0, 1110, 0, - 0, 0, 1111, 0, 0, 1112, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 0, 1114, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 0, 1116, 0, 0, - 1117, 0, 1118, 0, 0, 1119, 0, 0, 1120, 1121, 0, 0, 1122, 0, 1123, 0, 1124, 0, 0, 0, 0, 0, 0, 1125, 0, 0, 1126, 0, 0, 1127, 0, 0, - 0, 1128, 0, 0, 1129, 0, 0, 0, 1130, 1131, 0, 1132, 0, 0, 1133, 0, 1134, 0, 0, 1135, 0, 0, 1136, 0, 1137, 0, 0, 0, 0, 1138, 0, 1139, - 0, 0, 1140, 0, 0, 0, 1141, 0, 0, 1142, 0, 0, 1143, 0, 1144, 0, 0, 0, 1145, 0, 0, 1146, 0, 1147, 0, 0, 0, 1148, 0, 0, 0, 1149, - 0, 1150, 0, 0, 0, 0, 0, 0, 1151, 0, 0, 0, 0, 1152, 0, 0, 1153, 0, 0, 1154, 0, 0, 0, 0, 1155, 0, 1156, 0, 1157, 0, 1158, 0, - 0, 0, 1159, 0, 0, 1160, 0, 1161, 1162, 0, 1163, 0, 1164, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 1166, 0, 1167, 0, 0, 0, 1168, 0, 0, 1169, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0033[64] = { + 0x5A45201649510505ull, 0xA024484184155545ull, 0xA3248008AAAA8904ull, 0x4902995292969555ull, + 0x54A44900A2844145ull, 0x92A020B0042482AAull, 0xA0086A2A2AA95154ull, 0x0A22222A08355492ull, + 0xA052424554AA9551ull, 0xAAAAAA9551202434ull, 0x69452D0A1694B42Aull, 0x0410A000020A0969ull, + 0x22A0494122812221ull, 0x0240200200296281ull, 0x1004008A40081809ull, 0x50042C4010041062ull, + 0xA1555540A0628011ull, 0x03081805400A4550ull, 0xA24A4000094088A1ull, 0x064920C92490644Aull, + 0x000048028A4924A9ull, 0x0020000040041010ull, 0x880014610822204Aull, 0x0504440008880008ull, + 0x529202B2090000A0ull, 0x94A4808555522AAAull, 0x15548C6902054AAAull, 0xAA5482952AAAA922ull, + 0x50516A915A00B522ull, 0x0850802800290B22ull, 0x00A9002020A08000ull, 0x0023115048046008ull, + 0x00418960024024A0ull, 0x5222124A8A420202ull, 0xD4AA4AA551155005ull, 0x00902146848A8010ull, + 0x00904004A0250000ull, 0x0006008400004800ull, 0x8549680405000000ull, 0x90945695A6084508ull, + 0xA005255119212849ull, 0x020AA152AA92A002ull, 0x5001800000000000ull, 0x0A90500024840408ull, + 0x2AA88002000204A3ull, 0x4A28A28A28A28A29ull, 0x054D08494A694491ull, 0x4A569295A4AA5A4Aull, + 0x569295A4A569295Aull, 0x5695A4A569295A4Aull, 0x895AAB492A95695Aull, 0x122525A49128A082ull, + 0x04200110A440154Aull, 0x5A5081082A014208ull, 0x5002850080451252ull, 0x30048A848952222Dull, + 0x154852082C922554ull, 0x95B4925016950035ull, 0x00104510894524A4ull, 0xB545452D54904048ull, + 0x5690969094552AAAull, 0x2481532520442024ull, 0x88A45244A1494B12ull, 0x914415A455092102ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0033[64] = { + 1u, 22u, 42u, 62u, 88u, 107u, 125u, 148u, 168u, 192u, 217u, 243u, 256u, 273u, 285u, 296u, + 309u, 329u, 344u, 359u, 379u, 394u, 399u, 413u, 422u, 437u, 461u, 484u, 510u, 533u, 547u, 556u, + 569u, 582u, 599u, 624u, 638u, 647u, 653u, 665u, 687u, 707u, 726u, 730u, 742u, 756u, 778u, 800u, + 828u, 857u, 886u, 916u, 936u, 950u, 966u, 981u, 1001u, 1022u, 1046u, 1062u, 1085u, 1111u, 1128u, 1150u, }; void recomp_unit_0033_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0033_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08888000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0033[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0033[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0033[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08888000; @@ -1346,7 +1253,17 @@ L_08888000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888008: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1357,7 +1274,6 @@ L_08888008: goto L_088888D8; L_08888020: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888040; } @@ -1379,21 +1295,51 @@ L_08888040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888050: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1540), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888058: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1552), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888060: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[6] == 0u; @@ -1406,7 +1352,6 @@ L_08888060: L_0888806C: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08888088; } @@ -1415,7 +1360,6 @@ L_0888806C: L_08888078: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08888088; } @@ -1426,11 +1370,20 @@ L_08888084: goto L_08888088; L_08888088: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -1457,7 +1410,6 @@ L_088880B4: } L_088880C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08888180; } @@ -1467,7 +1419,6 @@ L_088880C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1400))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08888180; } @@ -1489,24 +1440,20 @@ L_088880EC: goto L_088880F0; L_088880F0: aot_gpr_31 = (0x088880F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088880F8u) goto L_088880F8; AOT_REGCACHE_SYNC_OUT(); return; L_088880F8: aot_gpr_31 = (0x08888100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888100u) goto L_08888100; AOT_REGCACHE_SYNC_OUT(); return; L_08888100: aot_gpr_31 = (0x08888108u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 57u, 0x0893441Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888108u) goto L_08888108; AOT_REGCACHE_SYNC_OUT(); return; L_08888108: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088880F0; } @@ -1514,12 +1461,10 @@ L_08888108: } L_08888118: aot_gpr_31 = (0x08888120u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888120u) goto L_08888120; AOT_REGCACHE_SYNC_OUT(); return; L_08888120: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888150; } @@ -1532,22 +1477,18 @@ L_08888128: AOT_REGCACHE_SYNC_OUT(); return; L_08888130: aot_gpr_31 = (0x08888138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888138u) goto L_08888138; AOT_REGCACHE_SYNC_OUT(); return; L_08888138: aot_gpr_31 = (0x08888140u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888140u) goto L_08888140; AOT_REGCACHE_SYNC_OUT(); return; L_08888140: aot_gpr_31 = (0x08888148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 57u, 0x0893441Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888148u) goto L_08888148; AOT_REGCACHE_SYNC_OUT(); return; L_08888148: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888118; } @@ -1585,13 +1526,22 @@ L_08888180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888198: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088881FC; } @@ -1600,7 +1550,6 @@ L_08888198: L_088881AC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088881FC; } @@ -1610,7 +1559,6 @@ L_088881B8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1400))); ctx.gpr[6] = (0u | 2u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088881FC; } @@ -1619,7 +1567,6 @@ L_088881B8: L_088881C8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088881F4; } @@ -1637,7 +1584,6 @@ L_088881D4: goto L_088881F4; L_088881F4: aot_gpr_31 = (0x088881FCu); - // nop goto L_0888A16C; L_088881FC: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1646,7 +1592,17 @@ L_088881FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888208: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -1662,7 +1618,6 @@ L_08888208: L_08888220: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888827C; } @@ -1672,7 +1627,6 @@ L_0888822C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1400))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888827C; } @@ -1680,12 +1634,10 @@ L_0888822C: } L_0888823C: aot_gpr_31 = (0x08888244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888244u) goto L_08888244; AOT_REGCACHE_SYNC_OUT(); return; L_08888244: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888274; } @@ -1698,22 +1650,18 @@ L_0888824C: AOT_REGCACHE_SYNC_OUT(); return; L_08888254: aot_gpr_31 = (0x0888825Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888825Cu) goto L_0888825C; AOT_REGCACHE_SYNC_OUT(); return; L_0888825C: aot_gpr_31 = (0x08888264u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888264u) goto L_08888264; AOT_REGCACHE_SYNC_OUT(); return; L_08888264: aot_gpr_31 = (0x0888826Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 57u, 0x0893441Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888826Cu) goto L_0888826C; AOT_REGCACHE_SYNC_OUT(); return; L_0888826C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888823C; } @@ -1731,7 +1679,17 @@ L_0888827C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888828C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -1758,7 +1716,6 @@ L_088882BC: L_088882C8: aot_gpr_4 = (0u | 109u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088882E0; } @@ -1780,7 +1737,6 @@ L_088882E4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1513), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888300; } @@ -1788,7 +1744,6 @@ L_088882E4: } L_088882F4: aot_gpr_31 = (0x088882FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088882FCu) goto L_088882FC; AOT_REGCACHE_SYNC_OUT(); return; L_088882FC: @@ -1796,12 +1751,10 @@ L_088882FC: goto L_08888300; L_08888300: aot_gpr_31 = (0x08888308u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 278u, 0x088B5BECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888308u) goto L_08888308; AOT_REGCACHE_SYNC_OUT(); return; L_08888308: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888364; } @@ -1809,7 +1762,6 @@ L_08888308: } L_08888310: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888835C; } @@ -1817,12 +1769,10 @@ L_08888310: } L_08888318: aot_gpr_31 = (0x08888320u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888320u) goto L_08888320; AOT_REGCACHE_SYNC_OUT(); return; L_08888320: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888330; } @@ -1836,7 +1786,6 @@ L_08888328: L_08888330: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888348; } @@ -1844,7 +1793,6 @@ L_08888330: } L_0888833C: aot_gpr_31 = (0x08888344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888344u) goto L_08888344; AOT_REGCACHE_SYNC_OUT(); return; L_08888344: @@ -1871,7 +1819,6 @@ L_0888835C: L_08888364: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088883C4; } @@ -1888,7 +1835,6 @@ L_08888370: } L_0888837C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088883C4; } @@ -1905,7 +1851,6 @@ L_08888384: } L_08888390: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088883C4; } @@ -1913,7 +1858,6 @@ L_08888390: } L_08888398: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088883B0; } @@ -1922,7 +1866,6 @@ L_08888398: L_088883A0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1410))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088883B0; } @@ -1958,11 +1901,20 @@ L_088883C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088883E0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1399))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088883F8; } @@ -1971,7 +1923,6 @@ L_088883E0: L_088883EC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1400))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08888400; } @@ -1983,11 +1934,20 @@ L_088883F8: goto L_08888400; L_08888400: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888408: ctx.gpr[6] = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1380), static_cast(ctx.gpr[6])); @@ -1996,14 +1956,34 @@ L_08888408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888418: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(1416)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888420: ctx.gpr[6] = (aot_gpr_5 + aot_gpr_5); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[6]); @@ -2014,7 +1994,17 @@ L_08888420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888438: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1416))); aot_gpr_2 = (0u | 0u); @@ -2024,9 +2014,7 @@ L_08888438: L_08888448: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1416))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08888464; } @@ -2048,11 +2036,20 @@ L_08888464: } L_08888474: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888847C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1397))); @@ -2077,7 +2074,6 @@ L_088884A0: L_088884AC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088884C8; } @@ -2100,7 +2096,6 @@ L_088884C8: goto L_088884D4; L_088884D4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0888850C; } @@ -2109,7 +2104,6 @@ L_088884D4: L_088884DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088884F0; } @@ -2117,7 +2111,6 @@ L_088884DC: } L_088884E8: aot_gpr_31 = (0x088884F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088884F0u) goto L_088884F0; AOT_REGCACHE_SYNC_OUT(); return; L_088884F0: @@ -2140,7 +2133,6 @@ L_08888504: goto L_0888850C; L_0888850C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08888524; } @@ -2171,7 +2163,17 @@ L_08888524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888853C: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -2184,7 +2186,6 @@ L_0888853C: L_08888548: ctx.gpr[7] = (static_cast(aot_gpr_5) < 113 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08888594; } @@ -2222,11 +2223,20 @@ L_08888590: goto L_08888594; L_08888594: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888859C: ctx.gpr[7] = (aot_gpr_5 + aot_gpr_5); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[7]); @@ -2237,7 +2247,17 @@ L_0888859C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088885B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2246,7 +2266,6 @@ L_088885B4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088886B4; } @@ -2258,7 +2277,6 @@ L_088885D4: goto L_0888876C; L_088885DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888694; } @@ -2273,7 +2291,6 @@ L_088885E4: L_088885F0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08888674; } @@ -2298,7 +2315,6 @@ L_08888610: goto L_08889C04; L_08888618: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888640; } @@ -2308,7 +2324,6 @@ L_08888620: aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1396))); aot_gpr_4 = (0u | 113u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08888638; } @@ -2316,7 +2331,6 @@ L_08888620: } L_08888630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088886B8; } @@ -2333,7 +2347,6 @@ L_08888638: L_08888640: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888654; } @@ -2341,7 +2354,6 @@ L_08888640: } L_0888864C: aot_gpr_31 = (0x08888654u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888654u) goto L_08888654; AOT_REGCACHE_SYNC_OUT(); return; L_08888654: @@ -2351,7 +2363,6 @@ L_08888654: AOT_REGCACHE_SYNC_OUT(); return; L_0888865C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888866C; } @@ -2377,7 +2388,6 @@ L_08888674: aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1396))); aot_gpr_4 = (0u | 113u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0888868C; } @@ -2385,7 +2395,6 @@ L_08888674: } L_08888684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088886B8; } @@ -2403,7 +2412,6 @@ L_08888694: aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1396))); aot_gpr_4 = (0u | 113u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088886AC; } @@ -2411,7 +2419,6 @@ L_08888694: } L_088886A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088886B8; } @@ -2440,7 +2447,17 @@ L_088886B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088886CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2451,7 +2468,6 @@ L_088886CC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08888754; } @@ -2463,7 +2479,6 @@ L_088886F4: goto L_0888876C; L_088886FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888750; } @@ -2478,7 +2493,6 @@ L_08888704: L_08888710: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08888754; } @@ -2503,7 +2517,6 @@ L_08888730: goto L_08889C04; L_08888738: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08888748; } @@ -2541,7 +2554,17 @@ L_08888754: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888876C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2568,7 +2591,6 @@ L_08888794: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); ctx.gpr[6] = (0u | 60u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08888820; } @@ -2578,7 +2600,6 @@ L_088887A4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); ctx.gpr[6] = (0u | 63u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08888820; } @@ -2588,7 +2609,6 @@ L_088887B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); ctx.gpr[6] = (0u | 65u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08888820; } @@ -2598,7 +2618,6 @@ L_088887C4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(464))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08888820; } @@ -2608,7 +2627,6 @@ L_088887D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888820; } @@ -2616,7 +2634,6 @@ L_088887D4: } L_088887E4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0888883C; } @@ -2627,7 +2644,6 @@ L_088887EC: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08888818; } @@ -2678,7 +2694,6 @@ L_08888828: L_08888830: aot_gpr_4 = (static_cast(aot_gpr_16) < -939 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08888878; } @@ -2694,7 +2709,6 @@ L_0888883C: } L_08888844: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888883C; } @@ -2702,7 +2716,6 @@ L_08888844: } L_0888884C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888878; } @@ -2719,7 +2732,6 @@ L_08888854: L_0888885C: aot_gpr_4 = (static_cast(aot_gpr_16) < 246 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888883C; } @@ -2727,7 +2739,6 @@ L_0888885C: } L_08888868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888878; } @@ -2735,7 +2746,6 @@ L_08888868: } L_08888870: { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_0888883C; } @@ -2765,11 +2775,20 @@ L_08888888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888898: ctx.gpr[7] = (aot_gpr_5 < static_cast(9) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088888D0; } @@ -2798,11 +2817,20 @@ L_088888C4: goto L_088888D0; L_088888D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088888D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2815,7 +2843,6 @@ L_088888D8: AOT_REGCACHE_SYNC_OUT(); return; L_088888F4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888910; } @@ -2824,7 +2851,6 @@ L_088888F4: L_088888FC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08888910; } @@ -2853,7 +2879,17 @@ L_08888914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888928: aot_gpr_5 = (0u + static_cast(-1)); jump_target = aot_gpr_31; @@ -2861,7 +2897,17 @@ L_08888928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888934: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2875,7 +2921,6 @@ L_08888934: L_08888954: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08888970; } @@ -2885,7 +2930,6 @@ L_08888960: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08888980; } @@ -2899,7 +2943,6 @@ L_08888970: goto L_08888978; L_08888978: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088889DC; } @@ -2911,7 +2954,6 @@ L_08888980: goto L_0888847C; L_08888988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888B4C; } @@ -2920,7 +2962,6 @@ L_08888988: L_08888990: aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088889DC; } @@ -2933,12 +2974,10 @@ L_0888899C: AOT_REGCACHE_SYNC_OUT(); return; L_088889A4: aot_gpr_31 = (0x088889ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088889ACu) goto L_088889AC; AOT_REGCACHE_SYNC_OUT(); return; L_088889AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088889DC; } @@ -2951,22 +2990,18 @@ L_088889B4: AOT_REGCACHE_SYNC_OUT(); return; L_088889BC: aot_gpr_31 = (0x088889C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088889C4u) goto L_088889C4; AOT_REGCACHE_SYNC_OUT(); return; L_088889C4: aot_gpr_31 = (0x088889CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088889CCu) goto L_088889CC; AOT_REGCACHE_SYNC_OUT(); return; L_088889CC: aot_gpr_31 = (0x088889D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 57u, 0x0893441Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088889D4u) goto L_088889D4; AOT_REGCACHE_SYNC_OUT(); return; L_088889D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088889A4; } @@ -2992,7 +3027,6 @@ L_088889EC: goto L_088889F4; L_088889F4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08888B4C; } @@ -3000,7 +3034,6 @@ L_088889F4: } L_088889FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888A14; } @@ -3008,7 +3041,6 @@ L_088889FC: } L_08888A04: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888A8C; } @@ -3016,7 +3048,6 @@ L_08888A04: } L_08888A0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888B4C; } @@ -3035,7 +3066,6 @@ L_08888A14: } L_08888A28: aot_gpr_31 = (0x08888A30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888A30u) goto L_08888A30; AOT_REGCACHE_SYNC_OUT(); return; L_08888A30: @@ -3043,7 +3073,6 @@ L_08888A30: goto L_08888A34; L_08888A34: aot_gpr_31 = (0x08888A3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888A3Cu) goto L_08888A3C; AOT_REGCACHE_SYNC_OUT(); return; L_08888A3C: @@ -3054,7 +3083,6 @@ L_08888A3C: AOT_REGCACHE_SYNC_OUT(); return; L_08888A48: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08888A84; } @@ -3063,7 +3091,6 @@ L_08888A48: L_08888A50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888A68; } @@ -3071,7 +3098,6 @@ L_08888A50: } L_08888A5C: aot_gpr_31 = (0x08888A64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888A64u) goto L_08888A64; AOT_REGCACHE_SYNC_OUT(); return; L_08888A64: @@ -3079,7 +3105,6 @@ L_08888A64: goto L_08888A68; L_08888A68: aot_gpr_31 = (0x08888A70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888A70u) goto L_08888A70; AOT_REGCACHE_SYNC_OUT(); return; L_08888A70: @@ -3092,7 +3117,6 @@ L_08888A70: AOT_REGCACHE_SYNC_OUT(); return; L_08888A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888B4C; } @@ -3111,7 +3135,6 @@ L_08888A8C: } L_08888AA0: aot_gpr_31 = (0x08888AA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888AA8u) goto L_08888AA8; AOT_REGCACHE_SYNC_OUT(); return; L_08888AA8: @@ -3119,7 +3142,6 @@ L_08888AA8: goto L_08888AAC; L_08888AAC: aot_gpr_31 = (0x08888AB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888AB4u) goto L_08888AB4; AOT_REGCACHE_SYNC_OUT(); return; L_08888AB4: @@ -3130,7 +3152,6 @@ L_08888AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08888AC0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08888B44; } @@ -3144,7 +3165,6 @@ L_08888AC8: goto L_0888876C; L_08888AD8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888B44; } @@ -3161,7 +3181,6 @@ L_08888AE0: } L_08888AEC: aot_gpr_31 = (0x08888AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888AF4u) goto L_08888AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08888AF4: @@ -3169,7 +3188,6 @@ L_08888AF4: goto L_08888AF8; L_08888AF8: aot_gpr_31 = (0x08888B00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888B00u) goto L_08888B00; AOT_REGCACHE_SYNC_OUT(); return; L_08888B00: @@ -3183,7 +3201,6 @@ L_08888B00: } L_08888B0C: aot_gpr_31 = (0x08888B14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888B14u) goto L_08888B14; AOT_REGCACHE_SYNC_OUT(); return; L_08888B14: @@ -3191,7 +3208,6 @@ L_08888B14: goto L_08888B18; L_08888B18: aot_gpr_31 = (0x08888B20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888B20u) goto L_08888B20; AOT_REGCACHE_SYNC_OUT(); return; L_08888B20: @@ -3210,7 +3226,6 @@ L_08888B2C: AOT_REGCACHE_SYNC_OUT(); return; L_08888B44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08888B4C; } @@ -3229,7 +3244,17 @@ L_08888B4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888B64: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3360,7 +3385,6 @@ L_08888C64: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08888CA0; } @@ -3369,7 +3393,6 @@ L_08888C64: L_08888C74: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08888C98; } @@ -3448,7 +3471,6 @@ L_08888CD4: } L_08888CDC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08888D24; } @@ -3523,7 +3545,6 @@ L_08888D38: L_08888D40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08888D54; } @@ -3531,7 +3552,6 @@ L_08888D40: } L_08888D4C: aot_gpr_31 = (0x08888D54u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888D54u) goto L_08888D54; AOT_REGCACHE_SYNC_OUT(); return; L_08888D54: @@ -3553,7 +3573,17 @@ L_08888D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888D84: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3563,7 +3593,6 @@ L_08888D84: aot_gpr_16 = (aot_gpr_4 | 0u); ctx.gpr[19] = (aot_gpr_5 | 0u); aot_gpr_31 = (0x08888DB4u); - // nop goto L_08888050; L_08888DB4: { const std::uint32_t vfpu_address = ctx.gpr[19] + static_cast(0); @@ -3654,7 +3683,17 @@ L_08888E30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888E4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3666,7 +3705,6 @@ L_08888E4C: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1524))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08888F14; } @@ -3680,7 +3718,6 @@ L_08888E78: AOT_REGCACHE_SYNC_OUT(); return; L_08888E84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08888F04; } @@ -3690,7 +3727,6 @@ L_08888E8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); aot_gpr_5 = (ctx.gpr[17] + static_cast(32)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08888EF0; } @@ -3755,7 +3791,6 @@ L_08888F04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); ctx.gpr[17] = (ctx.gpr[17] + static_cast(32)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08888E78; } @@ -3777,7 +3812,17 @@ L_08888F18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3859,7 +3904,17 @@ L_08888FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08888FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9))); @@ -3878,12 +3933,10 @@ L_08888FC8: } L_08888FF0: aot_gpr_31 = (0x08888FF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08888FF8u) goto L_08888FF8; AOT_REGCACHE_SYNC_OUT(); return; L_08888FF8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888907C; } @@ -3914,7 +3967,6 @@ L_08889010: goto L_0888A144; L_0888903C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088891E4; } @@ -3945,7 +3997,6 @@ L_08889058: AOT_REGCACHE_SYNC_OUT(); return; L_08889074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088891E4; } @@ -4015,7 +4066,6 @@ L_088890D0: AOT_REGCACHE_SYNC_OUT(); return; L_088890D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088890FC; } @@ -4030,7 +4080,6 @@ L_088890E0: goto L_0888A144; L_088890F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088891E4; } @@ -4045,7 +4094,6 @@ L_088890FC: goto L_0888A144; L_08889110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088891E4; } @@ -4053,12 +4101,10 @@ L_08889110: } L_08889118: aot_gpr_31 = (0x08889120u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889120u) goto L_08889120; AOT_REGCACHE_SYNC_OUT(); return; L_08889120: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08889188; } @@ -4068,7 +4114,6 @@ L_08889128: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 113u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08889178; } @@ -4077,7 +4122,6 @@ L_08889128: L_08889138: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25948))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889178; } @@ -4165,7 +4209,17 @@ L_088891E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889200: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -4175,7 +4229,6 @@ L_08889200: goto L_08889D2C; L_08889214: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888922C; } @@ -4185,7 +4238,6 @@ L_0888921C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); aot_gpr_5 = (0u | 113u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08889258; } @@ -4195,7 +4247,6 @@ L_0888922C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_4 = (aot_gpr_4 < static_cast(18) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889464; } @@ -4208,14 +4259,22 @@ L_0888923C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23288))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888946C; } @@ -4224,7 +4283,6 @@ L_08889258: L_08889260: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8002))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088892C4; } @@ -4274,9 +4332,7 @@ L_0888926C: aot_gpr_4 = (aot_gpr_4 | 2048u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088892C4; } @@ -4293,13 +4349,11 @@ L_088892B8: } L_088892C4: aot_gpr_31 = (0x088892CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 278u, 0x08AF99F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088892CCu) goto L_088892CC; AOT_REGCACHE_SYNC_OUT(); return; L_088892CC: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088892F4; } @@ -4308,7 +4362,6 @@ L_088892CC: L_088892D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25916))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088892FC; } @@ -4330,12 +4383,10 @@ L_088892F4: goto L_088892FC; L_088892FC: aot_gpr_31 = (0x08889304u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 278u, 0x08AF99F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889304u) goto L_08889304; AOT_REGCACHE_SYNC_OUT(); return; L_08889304: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08889368; } @@ -4344,7 +4395,6 @@ L_08889304: L_0888930C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25916))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889368; } @@ -4361,7 +4411,6 @@ L_08889318: L_08889328: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0888935C; } @@ -4374,9 +4423,7 @@ L_08889338: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888935C; } @@ -4403,7 +4450,6 @@ L_0888935C: L_08889368: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25916))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889414; } @@ -4428,7 +4474,6 @@ L_08889380: L_0888938C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088893C0; } @@ -4441,9 +4486,7 @@ L_0888939C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088893C0; } @@ -4477,7 +4520,6 @@ L_088893CC: L_088893D8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0888940C; } @@ -4490,9 +4532,7 @@ L_088893E8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888940C; } @@ -4513,7 +4553,6 @@ L_0888940C: goto L_08889414; L_08889414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888946C; } @@ -4585,14 +4624,34 @@ L_0888946C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888947C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889484: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -4602,7 +4661,6 @@ L_08889484: aot_gpr_16 = (ctx.gpr[6] | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_31); aot_gpr_31 = (0x088894ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0032_entry, 32u, 866u, 0x08887C88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088894ACu) goto L_088894AC; AOT_REGCACHE_SYNC_OUT(); return; L_088894AC: @@ -4672,9 +4730,7 @@ L_088894B8: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08889604; } @@ -4698,7 +4754,6 @@ L_08889530: aot_gpr_4 = (17352u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 127u); if (branch_taken) { @@ -4713,8 +4768,6 @@ L_08889548: ctx.gpr[6] = (ctx.gpr[6] & 255u); { const std::int64_t product = static_cast(static_cast(ctx.gpr[6])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); { const bool branch_taken = 0u == 0u; @@ -4742,8 +4795,6 @@ L_08889578: aot_gpr_5 = (aot_gpr_5 & 255u); { const std::int64_t product = static_cast(static_cast(aot_gpr_5)) * static_cast(static_cast(ctx.gpr[6])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); { const bool branch_taken = 0u == 0u; @@ -4773,7 +4824,6 @@ L_088895D4: } L_08889604: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08889618; } @@ -4793,9 +4843,7 @@ L_08889618: aot_gpr_4 = (17036u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08889698; } @@ -4843,9 +4891,7 @@ L_0888966C: L_08889680: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25892))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08889698; } @@ -4858,7 +4904,6 @@ L_08889698: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1397))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088896FC; } @@ -4866,7 +4911,6 @@ L_08889698: } L_088896A8: aot_gpr_31 = (0x088896B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 278u, 0x08AF99F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088896B0u) goto L_088896B0; AOT_REGCACHE_SYNC_OUT(); return; L_088896B0: @@ -4884,7 +4928,6 @@ L_088896B0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088897B8; } @@ -4904,7 +4947,6 @@ L_088896FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1397))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888975C; } @@ -4926,7 +4968,6 @@ L_0888970C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088897B8; } @@ -4996,7 +5037,17 @@ L_088897C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088897E0: aot_gpr_5 = (0u | 0u); ctx.gpr[6] = (aot_gpr_5 + aot_gpr_5); @@ -5020,11 +5071,20 @@ L_088897E8: } L_08889814: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888981C: aot_gpr_5 = (aot_gpr_5 & 255u); ctx.gpr[6] = (aot_gpr_5 + aot_gpr_5); @@ -5051,7 +5111,6 @@ L_0888981C: L_08889860: ctx.gpr[6] = (static_cast(aot_gpr_5) < 29 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08889884; } @@ -5072,7 +5131,6 @@ L_0888986C: L_08889884: aot_gpr_4 = (static_cast(aot_gpr_5) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889894; } @@ -5083,7 +5141,6 @@ L_08889890: goto L_08889894; L_08889894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888989C; } @@ -5091,11 +5148,20 @@ L_08889894: } L_0888989C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088898A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5110,7 +5176,6 @@ L_088898A4: L_088898C4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08889980; } @@ -5123,7 +5188,6 @@ L_088898D0: goto L_08889B04; L_088898DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08889914; } @@ -5136,7 +5200,6 @@ L_088898E4: goto L_08889C04; L_088898F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888990C; } @@ -5145,7 +5208,6 @@ L_088898F0: L_088898F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888991C; } @@ -5153,7 +5215,6 @@ L_088898F8: } L_08889904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889924; } @@ -5177,7 +5238,6 @@ L_08889914: } L_0888991C: aot_gpr_31 = (0x08889924u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889924u) goto L_08889924; AOT_REGCACHE_SYNC_OUT(); return; L_08889924: @@ -5187,7 +5247,6 @@ L_08889924: AOT_REGCACHE_SYNC_OUT(); return; L_0888992C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08889960; } @@ -5197,7 +5256,6 @@ L_08889934: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(695))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08889958; } @@ -5206,7 +5264,6 @@ L_08889934: L_08889944: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889968; } @@ -5214,7 +5271,6 @@ L_08889944: } L_08889950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889970; } @@ -5238,7 +5294,6 @@ L_08889960: } L_08889968: aot_gpr_31 = (0x08889970u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889970u) goto L_08889970; AOT_REGCACHE_SYNC_OUT(); return; L_08889970: @@ -5274,7 +5329,17 @@ L_08889988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888999C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5289,7 +5354,6 @@ L_0888999C: L_088899BC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08889AE8; } @@ -5302,7 +5366,6 @@ L_088899C8: goto L_08889B04; L_088899D4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08889A0C; } @@ -5315,7 +5378,6 @@ L_088899DC: goto L_08889C04; L_088899E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08889A04; } @@ -5324,7 +5386,6 @@ L_088899E8: L_088899F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889A14; } @@ -5332,7 +5393,6 @@ L_088899F0: } L_088899FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889A1C; } @@ -5356,7 +5416,6 @@ L_08889A0C: } L_08889A14: aot_gpr_31 = (0x08889A1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889A1Cu) goto L_08889A1C; AOT_REGCACHE_SYNC_OUT(); return; L_08889A1C: @@ -5366,7 +5425,6 @@ L_08889A1C: AOT_REGCACHE_SYNC_OUT(); return; L_08889A24: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08889A40; } @@ -5381,7 +5439,6 @@ L_08889A2C: goto L_08889A38; L_08889A38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889AAC; } @@ -5402,7 +5459,6 @@ L_08889A48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(695))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889A80; } @@ -5415,7 +5471,6 @@ L_08889A64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(695))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889A64; } @@ -5430,7 +5485,6 @@ L_08889A80: goto L_08889A8C; L_08889A8C: aot_gpr_31 = (0x08889A94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889A94u) goto L_08889A94; AOT_REGCACHE_SYNC_OUT(); return; L_08889A94: @@ -5450,7 +5504,6 @@ L_08889AAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(695))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08889AE0; } @@ -5459,7 +5512,6 @@ L_08889AAC: L_08889ABC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889AD0; } @@ -5467,7 +5519,6 @@ L_08889ABC: } L_08889AC8: aot_gpr_31 = (0x08889AD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889AD0u) goto L_08889AD0; AOT_REGCACHE_SYNC_OUT(); return; L_08889AD0: @@ -5511,7 +5562,17 @@ L_08889AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889B04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); aot_gpr_5 = (static_cast(aot_gpr_4) < 219 ? 1u : 0u); @@ -5534,7 +5595,6 @@ L_08889B14: L_08889B20: aot_gpr_5 = (0u + static_cast(-992)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08889B80; } @@ -5606,7 +5666,6 @@ L_08889B64: } L_08889B6C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08889B2C; } @@ -5615,7 +5674,6 @@ L_08889B6C: L_08889B74: aot_gpr_4 = (static_cast(aot_gpr_4) < 208 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889B2C; } @@ -5660,15 +5718,23 @@ L_08889BA4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23216))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889BBC: aot_gpr_4 = (static_cast(aot_gpr_4) < 262 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889B80; } @@ -5676,7 +5742,6 @@ L_08889BBC: } L_08889BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889B2C; } @@ -5691,7 +5756,6 @@ L_08889BD0: L_08889BD8: aot_gpr_4 = (static_cast(aot_gpr_4) < 276 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889B80; } @@ -5699,7 +5763,6 @@ L_08889BD8: } L_08889BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889B2C; } @@ -5707,7 +5770,6 @@ L_08889BE4: } L_08889BEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889B80; } @@ -5715,7 +5777,6 @@ L_08889BEC: } L_08889BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889B2C; } @@ -5723,16 +5784,24 @@ L_08889BF4: } L_08889BFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889C04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-937)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08889C30; } @@ -5741,7 +5810,6 @@ L_08889C04: L_08889C14: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8001))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889C28; } @@ -5768,11 +5836,20 @@ L_08889C30: goto L_08889C34; L_08889C34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889C3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5791,7 +5868,6 @@ L_08889C3C: } L_08889C64: aot_gpr_31 = (0x08889C6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889C6Cu) goto L_08889C6C; AOT_REGCACHE_SYNC_OUT(); return; L_08889C6C: @@ -5799,12 +5875,10 @@ L_08889C6C: goto L_08889C70; L_08889C70: aot_gpr_31 = (0x08889C78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 278u, 0x088B5BECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889C78u) goto L_08889C78; AOT_REGCACHE_SYNC_OUT(); return; L_08889C78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08889CD0; } @@ -5814,7 +5888,6 @@ L_08889C80: aot_gpr_4 = (2244u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(27840)); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08889CA4; } @@ -5823,7 +5896,6 @@ L_08889C80: L_08889C90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889CAC; } @@ -5831,7 +5903,6 @@ L_08889C90: } L_08889C9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889CB8; } @@ -5847,7 +5918,6 @@ L_08889CA4: } L_08889CAC: aot_gpr_31 = (0x08889CB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889CB4u) goto L_08889CB4; AOT_REGCACHE_SYNC_OUT(); return; L_08889CB4: @@ -5855,7 +5925,6 @@ L_08889CB4: goto L_08889CB8; L_08889CB8: aot_gpr_31 = (0x08889CC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 483u, 0x088B693Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889CC0u) goto L_08889CC0; AOT_REGCACHE_SYNC_OUT(); return; L_08889CC0: @@ -5885,18 +5954,36 @@ L_08889CD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889CF0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889CF8: aot_gpr_5 = (aot_gpr_5 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08889D24; } @@ -5922,11 +6009,20 @@ L_08889D20: goto L_08889D24; L_08889D24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), aot_gpr_16); @@ -5938,7 +6034,6 @@ L_08889D2C: L_08889D40: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889D54; } @@ -6011,7 +6106,6 @@ L_08889DBC: AOT_REGCACHE_SYNC_OUT(); return; L_08889DD0: aot_gpr_31 = (0x08889DD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889DD8u) goto L_08889DD8; AOT_REGCACHE_SYNC_OUT(); return; L_08889DD8: @@ -6083,7 +6177,6 @@ L_08889E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08889E54: aot_gpr_31 = (0x08889E5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889E5Cu) goto L_08889E5C; AOT_REGCACHE_SYNC_OUT(); return; L_08889E5C: @@ -6103,7 +6196,6 @@ L_08889E74: aot_fpr_13 = std::bit_cast(ctx.gpr[8]); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); goto L_08889F0C; @@ -6134,7 +6226,6 @@ L_08889EC0: AOT_REGCACHE_SYNC_OUT(); return; L_08889ECC: aot_gpr_31 = (0x08889ED4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08889ED4u) goto L_08889ED4; AOT_REGCACHE_SYNC_OUT(); return; L_08889ED4: @@ -6164,7 +6255,6 @@ L_08889EDC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1492), aot_gpr_4); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1397), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08889F38; } @@ -6197,7 +6287,17 @@ L_08889F38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08889F48: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -6213,7 +6313,6 @@ L_08889F48: L_08889F6C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889F98; } @@ -6236,7 +6335,6 @@ L_08889F78: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1456))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08889FA0; } @@ -6244,7 +6342,6 @@ L_08889F78: } L_08889F90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A0A0; } @@ -6272,7 +6369,6 @@ L_08889FB0: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08889FC4; } @@ -6285,7 +6381,6 @@ L_08889FC4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1398))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1492))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888A01C; } @@ -6334,7 +6429,6 @@ L_08889FD4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1488))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888A028; } @@ -6394,7 +6488,6 @@ L_0888A064: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888A098; } @@ -6414,7 +6507,6 @@ L_0888A098: L_0888A0A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1504))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888A0BC; } @@ -6442,7 +6534,17 @@ L_0888A0C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A0D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6480,7 +6582,17 @@ L_0888A124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A144: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 & 255u); @@ -6495,24 +6607,42 @@ L_0888A158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A164: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25912), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A16C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0888A17Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 414u, 0x08AABBB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A17Cu) goto L_0888A17C; AOT_REGCACHE_SYNC_OUT(); return; L_0888A17C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888A18C; } @@ -6520,7 +6650,6 @@ L_0888A17C: } L_0888A184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A1A4; } @@ -6545,7 +6674,17 @@ L_0888A1A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A1B0: aot_gpr_4 = (2244u << 16u); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(27968)))))); @@ -6561,7 +6700,6 @@ L_0888A1C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1)))))); ctx.gpr[6] = (0u | 73u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0888A1F0; } @@ -6571,7 +6709,6 @@ L_0888A1D4: ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_5 = (0u | 70u); { const bool branch_taken = ctx.gpr[6] != aot_gpr_5; - // nop if (branch_taken) { goto L_0888A1F0; } @@ -6580,7 +6717,6 @@ L_0888A1D4: L_0888A1E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888A1F0; } @@ -6588,25 +6724,52 @@ L_0888A1E4: } L_0888A1F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A1F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A200: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A208: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6617,7 +6780,6 @@ L_0888A208: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888A240; } @@ -6633,7 +6795,6 @@ L_0888A230: } L_0888A238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A288; } @@ -6649,7 +6810,6 @@ L_0888A240: } L_0888A248: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888A288; } @@ -6684,7 +6844,6 @@ L_0888A278: AOT_REGCACHE_SYNC_OUT(); return; L_0888A280: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888A29C; } @@ -6701,7 +6860,6 @@ L_0888A288: } L_0888A294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A2B8; } @@ -6717,7 +6875,6 @@ L_0888A29C: } L_0888A2A4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888A2B8; } @@ -6726,7 +6883,6 @@ L_0888A2A4: L_0888A2AC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1456))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888A2CC; } @@ -6743,7 +6899,6 @@ L_0888A2B8: } L_0888A2C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A2DC; } @@ -6759,7 +6914,6 @@ L_0888A2CC: } L_0888A2D4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888A2F0; } @@ -6768,7 +6922,6 @@ L_0888A2D4: L_0888A2DC: aot_gpr_5 = (0u | 109u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888A2F8; } @@ -6805,7 +6958,17 @@ L_0888A2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A310: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), aot_gpr_16); @@ -6814,7 +6977,6 @@ L_0888A310: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(132), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A660; } @@ -6822,12 +6984,10 @@ L_0888A310: } L_0888A33C: aot_gpr_31 = (0x0888A344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A344u) goto L_0888A344; AOT_REGCACHE_SYNC_OUT(); return; L_0888A344: aot_gpr_31 = (0x0888A34Cu); - // nop goto L_0888A0D8; L_0888A34C: aot_gpr_4 = (2232u << 16u); @@ -6839,7 +6999,6 @@ L_0888A34C: L_0888A35C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0888A388; } @@ -6871,7 +7030,6 @@ L_0888A388: goto L_0888A398; L_0888A398: aot_gpr_31 = (0x0888A3A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A3A0u) goto L_0888A3A0; AOT_REGCACHE_SYNC_OUT(); return; L_0888A3A0: @@ -6940,7 +7098,6 @@ L_0888A440: L_0888A448: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0888A47C; } @@ -7021,8 +7178,6 @@ L_0888A4DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26320))); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[20])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[6]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.hi); { const bool branch_taken = 0u == 0u; @@ -7056,8 +7211,6 @@ L_0888A538: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26320))); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[20])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[6]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.hi); { const bool branch_taken = 0u == 0u; @@ -7084,7 +7237,6 @@ L_0888A59C: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 112 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A398; } @@ -7157,7 +7309,17 @@ L_0888A668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A688: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7174,7 +7336,6 @@ L_0888A688: } L_0888A6AC: aot_gpr_31 = (0x0888A6B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A6B4u) goto L_0888A6B4; AOT_REGCACHE_SYNC_OUT(); return; L_0888A6B4: @@ -7182,13 +7343,11 @@ L_0888A6B4: goto L_0888A6B8; L_0888A6B8: aot_gpr_31 = (0x0888A6C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 252u, 0x088B5A64u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A6C0u) goto L_0888A6C0; AOT_REGCACHE_SYNC_OUT(); return; L_0888A6C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1544))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888A768; } @@ -7201,7 +7360,6 @@ L_0888A6CC: goto L_088888D8; L_0888A6D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888A6E8; } @@ -7220,7 +7378,6 @@ L_0888A6E8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1398), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1399))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888A728; } @@ -7243,7 +7400,6 @@ L_0888A70C: AOT_REGCACHE_SYNC_OUT(); return; L_0888A720: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A74C; } @@ -7253,7 +7409,6 @@ L_0888A728: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); aot_gpr_5 = (0u | 110u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888A74C; } @@ -7273,7 +7428,6 @@ L_0888A74C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1544), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 1001 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A768; } @@ -7285,7 +7439,6 @@ L_0888A764: L_0888A768: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A780; } @@ -7293,7 +7446,6 @@ L_0888A768: } L_0888A774: aot_gpr_31 = (0x0888A77Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A77Cu) goto L_0888A77C; AOT_REGCACHE_SYNC_OUT(); return; L_0888A77C: @@ -7301,12 +7453,10 @@ L_0888A77C: goto L_0888A780; L_0888A780: aot_gpr_31 = (0x0888A788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 484u, 0x088B6944u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A788u) goto L_0888A788; AOT_REGCACHE_SYNC_OUT(); return; L_0888A788: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888A7B8; } @@ -7315,7 +7465,6 @@ L_0888A788: L_0888A790: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A7A8; } @@ -7323,7 +7472,6 @@ L_0888A790: } L_0888A79C: aot_gpr_31 = (0x0888A7A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A7A4u) goto L_0888A7A4; AOT_REGCACHE_SYNC_OUT(); return; L_0888A7A4: @@ -7331,12 +7479,10 @@ L_0888A7A4: goto L_0888A7A8; L_0888A7A8: aot_gpr_31 = (0x0888A7B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 278u, 0x088B5BECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888A7B0u) goto L_0888A7B0; AOT_REGCACHE_SYNC_OUT(); return; L_0888A7B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888A7D0; } @@ -7346,7 +7492,6 @@ L_0888A7B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888A7D0; } @@ -7359,7 +7504,6 @@ L_0888A7C8: L_0888A7D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1380))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888A800; } @@ -7387,7 +7531,6 @@ L_0888A7FC: L_0888A800: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7396,7 +7539,6 @@ L_0888A800: L_0888A80C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7420,7 +7562,6 @@ L_0888A82C: L_0888A834: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1411))); { const bool branch_taken = ctx.gpr[6] == aot_gpr_5; - // nop if (branch_taken) { goto L_0888A944; } @@ -7431,7 +7572,6 @@ L_0888A840: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1410), static_cast(ctx.gpr[17])); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1409))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888A870; } @@ -7440,7 +7580,6 @@ L_0888A840: L_0888A854: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26341))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888A870; } @@ -7449,7 +7588,6 @@ L_0888A854: L_0888A860: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26342))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888A870; } @@ -7462,7 +7600,6 @@ L_0888A870: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26344))); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A8A0; } @@ -7493,7 +7630,6 @@ L_0888A898: } L_0888A8A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7502,7 +7638,6 @@ L_0888A8A0: L_0888A8A8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0888A8F4; } @@ -7511,7 +7646,6 @@ L_0888A8A8: L_0888A8B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25832))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A8F4; } @@ -7541,7 +7675,6 @@ L_0888A8F4: AOT_REGCACHE_SYNC_OUT(); return; L_0888A8FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7559,7 +7692,6 @@ L_0888A904: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1398), static_cast(aot_gpr_4)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1412))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888A93C; } @@ -7584,7 +7716,6 @@ L_0888A93C: L_0888A944: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26341))); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0888A964; } @@ -7593,7 +7724,6 @@ L_0888A944: L_0888A950: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26342))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888A964; } @@ -7601,7 +7731,6 @@ L_0888A950: } L_0888A95C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888A984; } @@ -7617,7 +7746,6 @@ L_0888A964: } L_0888A96C: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0888A9BC; } @@ -7629,7 +7757,6 @@ L_0888A974: goto L_0888B67C; L_0888A97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7654,7 +7781,6 @@ L_0888A990: } L_0888A998: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888A9BC; } @@ -7669,7 +7795,6 @@ L_0888A9A0: goto L_0888A144; L_0888A9B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7677,7 +7802,6 @@ L_0888A9B4: } L_0888A9BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888A9CC; } @@ -7700,7 +7824,17 @@ L_0888A9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888A9E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1388), static_cast(0u)); @@ -7772,7 +7906,6 @@ L_0888AAC0: goto L_0888AAF0; L_0888AAF0: aot_gpr_31 = (0x0888AAF8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AAF8u) goto L_0888AAF8; AOT_REGCACHE_SYNC_OUT(); return; L_0888AAF8: @@ -7808,7 +7941,6 @@ L_0888AB28: L_0888AB48: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[26]; goto L_0888AB68; @@ -7843,7 +7975,6 @@ L_0888AB74: ctx.gpr[18] = (ctx.hi); aot_gpr_5 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888ABB8; } @@ -7886,9 +8017,7 @@ L_0888ABE4: L_0888ABEC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888AC04; } @@ -7909,7 +8038,6 @@ L_0888AC04: } L_0888AC14: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0888AC44; } @@ -7956,7 +8084,17 @@ L_0888AC44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888AC84: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(200), aot_gpr_16); @@ -7979,7 +8117,6 @@ L_0888ACBC: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888AD00; } @@ -7991,7 +8128,6 @@ L_0888ACCC: goto L_0888876C; L_0888ACD4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -7999,12 +8135,10 @@ L_0888ACD4: } L_0888ACDC: aot_gpr_31 = (0x0888ACE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888ACE4u) goto L_0888ACE4; AOT_REGCACHE_SYNC_OUT(); return; L_0888ACE4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888AD0C; } @@ -8012,7 +8146,6 @@ L_0888ACE4: } L_0888ACEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888AE10; } @@ -8038,14 +8171,12 @@ L_0888AD00: } L_0888AD0C: aot_gpr_31 = (0x0888AD14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AD14u) goto L_0888AD14; AOT_REGCACHE_SYNC_OUT(); return; L_0888AD14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8053,14 +8184,12 @@ L_0888AD14: } L_0888AD24: aot_gpr_31 = (0x0888AD2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AD2Cu) goto L_0888AD2C; AOT_REGCACHE_SYNC_OUT(); return; L_0888AD2C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); ctx.gpr[17] = (0u | 261u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8068,14 +8197,12 @@ L_0888AD2C: } L_0888AD3C: aot_gpr_31 = (0x0888AD44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AD44u) goto L_0888AD44; AOT_REGCACHE_SYNC_OUT(); return; L_0888AD44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8083,14 +8210,12 @@ L_0888AD44: } L_0888AD54: aot_gpr_31 = (0x0888AD5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AD5Cu) goto L_0888AD5C; AOT_REGCACHE_SYNC_OUT(); return; L_0888AD5C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 207u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8098,14 +8223,12 @@ L_0888AD5C: } L_0888AD6C: aot_gpr_31 = (0x0888AD74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AD74u) goto L_0888AD74; AOT_REGCACHE_SYNC_OUT(); return; L_0888AD74: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 234u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8113,14 +8236,12 @@ L_0888AD74: } L_0888AD84: aot_gpr_31 = (0x0888AD8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AD8Cu) goto L_0888AD8C; AOT_REGCACHE_SYNC_OUT(); return; L_0888AD8C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 191u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8128,14 +8249,12 @@ L_0888AD8C: } L_0888AD9C: aot_gpr_31 = (0x0888ADA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888ADA4u) goto L_0888ADA4; AOT_REGCACHE_SYNC_OUT(); return; L_0888ADA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 279u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8143,14 +8262,12 @@ L_0888ADA4: } L_0888ADB4: aot_gpr_31 = (0x0888ADBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888ADBCu) goto L_0888ADBC; AOT_REGCACHE_SYNC_OUT(); return; L_0888ADBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 189u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8158,14 +8275,12 @@ L_0888ADBC: } L_0888ADCC: aot_gpr_31 = (0x0888ADD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888ADD4u) goto L_0888ADD4; AOT_REGCACHE_SYNC_OUT(); return; L_0888ADD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8173,13 +8288,11 @@ L_0888ADD4: } L_0888ADE4: aot_gpr_31 = (0x0888ADECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888ADECu) goto L_0888ADEC; AOT_REGCACHE_SYNC_OUT(); return; L_0888ADEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8187,14 +8300,12 @@ L_0888ADEC: } L_0888ADF8: aot_gpr_31 = (0x0888AE00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888AE00u) goto L_0888AE00; AOT_REGCACHE_SYNC_OUT(); return; L_0888AE00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888ACF4; } @@ -8209,7 +8320,6 @@ L_0888AE10: L_0888AE1C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0888AE40; } @@ -8227,7 +8337,6 @@ L_0888AE28: } L_0888AE38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888AE58; } @@ -8244,7 +8353,6 @@ L_0888AE40: } L_0888AE4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888AE58; } @@ -8264,7 +8372,6 @@ L_0888AE58: } L_0888AE64: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0888AE80; } @@ -8281,7 +8388,6 @@ L_0888AE6C: } L_0888AE78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888AEC8; } @@ -8299,7 +8405,6 @@ L_0888AE80: L_0888AE8C: ctx.gpr[6] = (0u | 111u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0888AEC8; } @@ -8310,7 +8415,6 @@ L_0888AE98: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888AECC; } @@ -8321,7 +8425,6 @@ L_0888AEAC: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888AEAC; } @@ -8329,7 +8432,6 @@ L_0888AEAC: } L_0888AEC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888AECC; } @@ -8357,7 +8459,6 @@ L_0888AED8: } L_0888AEE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888AF18; } @@ -8374,7 +8475,17 @@ L_0888AEE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888AF04: { const bool branch_taken = aot_gpr_4 == 0u; ctx.gpr[18] = (0u | 111u); @@ -8386,7 +8497,6 @@ L_0888AF04: L_0888AF0C: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 30 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888AF4C; } @@ -8395,7 +8505,6 @@ L_0888AF0C: L_0888AF18: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0888B280; } @@ -8414,7 +8523,6 @@ L_0888AF2C: goto L_0888AF30; L_0888AF30: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0888AF4C; } @@ -8423,7 +8531,6 @@ L_0888AF30: L_0888AF38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888B1DC; } @@ -8431,7 +8538,6 @@ L_0888AF38: } L_0888AF44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B1E8; } @@ -8439,7 +8545,6 @@ L_0888AF44: } L_0888AF4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B658; } @@ -8462,7 +8567,6 @@ L_0888AF5C: L_0888AF68: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888AF80; } @@ -8511,7 +8615,6 @@ L_0888AFA4: L_0888AFB0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888AFC8; } @@ -8560,7 +8663,6 @@ L_0888AFEC: L_0888AFF8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B010; } @@ -8609,7 +8711,6 @@ L_0888B034: L_0888B040: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B058; } @@ -8658,7 +8759,6 @@ L_0888B07C: L_0888B088: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B0A0; } @@ -8707,7 +8807,6 @@ L_0888B0C4: L_0888B0D0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B0E8; } @@ -8756,7 +8855,6 @@ L_0888B10C: L_0888B118: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B130; } @@ -8805,7 +8903,6 @@ L_0888B154: L_0888B160: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B178; } @@ -8854,7 +8951,6 @@ L_0888B19C: L_0888B1A8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B1C0; } @@ -8888,7 +8984,6 @@ L_0888B1D0: } L_0888B1DC: aot_gpr_31 = (0x0888B1E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B1E4u) goto L_0888B1E4; AOT_REGCACHE_SYNC_OUT(); return; L_0888B1E4: @@ -8896,12 +8991,10 @@ L_0888B1E4: goto L_0888B1E8; L_0888B1E8: aot_gpr_31 = (0x0888B1F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 484u, 0x088B6944u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B1F0u) goto L_0888B1F0; AOT_REGCACHE_SYNC_OUT(); return; L_0888B1F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888B220; } @@ -8910,7 +9003,6 @@ L_0888B1F0: L_0888B1F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B210; } @@ -8918,7 +9010,6 @@ L_0888B1F8: } L_0888B204: aot_gpr_31 = (0x0888B20Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B20Cu) goto L_0888B20C; AOT_REGCACHE_SYNC_OUT(); return; L_0888B20C: @@ -8926,12 +9017,10 @@ L_0888B20C: goto L_0888B210; L_0888B210: aot_gpr_31 = (0x0888B218u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 278u, 0x088B5BECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B218u) goto L_0888B218; AOT_REGCACHE_SYNC_OUT(); return; L_0888B218: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888B250; } @@ -8940,7 +9029,6 @@ L_0888B218: L_0888B220: ctx.gpr[17] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0888B238; } @@ -8955,7 +9043,6 @@ L_0888B234: goto L_0888B238; L_0888B238: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0888B248; } @@ -8963,7 +9050,6 @@ L_0888B238: } L_0888B240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888AF18; } @@ -8971,7 +9057,6 @@ L_0888B240: } L_0888B248: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B658; } @@ -8988,7 +9073,6 @@ L_0888B250: } L_0888B25C: aot_gpr_31 = (0x0888B264u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B264u) goto L_0888B264; AOT_REGCACHE_SYNC_OUT(); return; L_0888B264: @@ -9018,7 +9102,6 @@ L_0888B280: L_0888B28C: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888B2A4; } @@ -9047,7 +9130,6 @@ L_0888B2B4: goto L_0888B2BC; L_0888B2BC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B2D0; } @@ -9055,7 +9137,6 @@ L_0888B2BC: } L_0888B2C4: aot_gpr_31 = (0x0888B2CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B2CCu) goto L_0888B2CC; AOT_REGCACHE_SYNC_OUT(); return; L_0888B2CC: @@ -9063,12 +9144,10 @@ L_0888B2CC: goto L_0888B2D0; L_0888B2D0: aot_gpr_31 = (0x0888B2D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 607u, 0x089BACE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B2D8u) goto L_0888B2D8; AOT_REGCACHE_SYNC_OUT(); return; L_0888B2D8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888B31C; } @@ -9077,7 +9156,6 @@ L_0888B2D8: L_0888B2E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25822))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0888B304; } @@ -9087,7 +9165,6 @@ L_0888B2EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8))); aot_gpr_5 = (0u | 113u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888B334; } @@ -9095,7 +9172,6 @@ L_0888B2EC: } L_0888B2FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B33C; } @@ -9137,7 +9213,6 @@ L_0888B33C: goto L_08889C3C; L_0888B34C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888B37C; } @@ -9146,7 +9221,6 @@ L_0888B34C: L_0888B354: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25824))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888B370; } @@ -9183,7 +9257,6 @@ L_0888B37C: L_0888B388: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B3A0; } @@ -9191,7 +9264,6 @@ L_0888B388: } L_0888B394: aot_gpr_31 = (0x0888B39Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B39Cu) goto L_0888B39C; AOT_REGCACHE_SYNC_OUT(); return; L_0888B39C: @@ -9199,7 +9271,6 @@ L_0888B39C: goto L_0888B3A0; L_0888B3A0: aot_gpr_31 = (0x0888B3A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 483u, 0x088B693Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B3A8u) goto L_0888B3A8; AOT_REGCACHE_SYNC_OUT(); return; L_0888B3A8: @@ -9218,7 +9289,6 @@ L_0888B3B4: goto L_0888B3C0; L_0888B3C0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B3E4; } @@ -9227,7 +9297,6 @@ L_0888B3C0: L_0888B3C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B3F0; } @@ -9265,7 +9334,6 @@ L_0888B3F0: } L_0888B404: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888B418; } @@ -9274,7 +9342,6 @@ L_0888B404: L_0888B40C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25823))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B47C; } @@ -9287,7 +9354,6 @@ L_0888B418: AOT_REGCACHE_SYNC_OUT(); return; L_0888B420: aot_gpr_31 = (0x0888B428u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B428u) goto L_0888B428; AOT_REGCACHE_SYNC_OUT(); return; L_0888B428: @@ -9318,7 +9384,6 @@ L_0888B458: L_0888B468: aot_gpr_4 = (0u | 111u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0888B490; } @@ -9326,7 +9391,6 @@ L_0888B468: } L_0888B474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B610; } @@ -9408,7 +9472,6 @@ L_0888B524: } L_0888B538: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0888B5D8; } @@ -9477,7 +9540,6 @@ L_0888B5BC: AOT_REGCACHE_SYNC_OUT(); return; L_0888B5D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B610; } @@ -9486,7 +9548,6 @@ L_0888B5D0: L_0888B5D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B5F0; } @@ -9494,7 +9555,6 @@ L_0888B5D8: } L_0888B5E4: aot_gpr_31 = (0x0888B5ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B5ECu) goto L_0888B5EC; AOT_REGCACHE_SYNC_OUT(); return; L_0888B5EC: @@ -9502,13 +9562,11 @@ L_0888B5EC: goto L_0888B5F0; L_0888B5F0: aot_gpr_31 = (0x0888B5F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 434u, 0x088B6620u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B5F8u) goto L_0888B5F8; AOT_REGCACHE_SYNC_OUT(); return; L_0888B5F8: aot_gpr_4 = (static_cast(aot_gpr_2) < 65 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B610; } @@ -9522,7 +9580,6 @@ L_0888B604: AOT_REGCACHE_SYNC_OUT(); return; L_0888B610: aot_gpr_31 = (0x0888B618u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 96u, 0x08B0C748u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B618u) goto L_0888B618; AOT_REGCACHE_SYNC_OUT(); return; L_0888B618: @@ -9534,7 +9591,6 @@ L_0888B618: L_0888B624: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888B648; } @@ -9549,7 +9605,6 @@ L_0888B630: AOT_REGCACHE_SYNC_OUT(); return; L_0888B640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B658; } @@ -9578,7 +9633,17 @@ L_0888B658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888B67C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -9587,7 +9652,6 @@ L_0888B67C: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888B714; } @@ -9608,7 +9672,6 @@ L_0888B6A8: AOT_REGCACHE_SYNC_OUT(); return; L_0888B6BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888B6F8; } @@ -9633,7 +9696,6 @@ L_0888B6C4: } L_0888B6F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B70C; } @@ -9645,7 +9707,6 @@ L_0888B6F8: goto L_088897E0; L_0888B700: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -9682,7 +9743,6 @@ L_0888B734: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(26344))); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B758; } @@ -9699,7 +9759,6 @@ L_0888B744: } L_0888B750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B77C; } @@ -9707,7 +9766,6 @@ L_0888B750: } L_0888B758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -9716,7 +9774,6 @@ L_0888B758: L_0888B760: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1405))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888B77C; } @@ -9731,7 +9788,6 @@ L_0888B76C: L_0888B77C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1403)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0888B8E0; } @@ -9742,7 +9798,6 @@ L_0888B788: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1402), static_cast(ctx.gpr[18])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1405))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B818; } @@ -9750,12 +9805,10 @@ L_0888B788: } L_0888B79C: aot_gpr_31 = (0x0888B7A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B7A4u) goto L_0888B7A4; AOT_REGCACHE_SYNC_OUT(); return; L_0888B7A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888B818; } @@ -9765,7 +9818,6 @@ L_0888B7AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 113u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888B7F4; } @@ -9809,7 +9861,6 @@ L_0888B808: AOT_REGCACHE_SYNC_OUT(); return; L_0888B810: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -9831,7 +9882,6 @@ L_0888B820: L_0888B828: ctx.gpr[17] = (0u | 113u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888B844; } @@ -9850,7 +9900,6 @@ L_0888B834: L_0888B844: aot_gpr_5 = (static_cast(aot_gpr_4) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888B868; } @@ -9875,7 +9924,6 @@ L_0888B868: goto L_0888B86C; L_0888B86C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -9937,12 +9985,10 @@ L_0888B8D8: } L_0888B8E0: aot_gpr_31 = (0x0888B8E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B8E8u) goto L_0888B8E8; AOT_REGCACHE_SYNC_OUT(); return; L_0888B8E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888B9F0; } @@ -9968,7 +10014,6 @@ L_0888B900: } L_0888B908: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888B9E8; } @@ -9993,7 +10038,6 @@ L_0888B914: AOT_REGCACHE_SYNC_OUT(); return; L_0888B940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -10018,7 +10062,6 @@ L_0888B950: } L_0888B95C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888B998; } @@ -10029,7 +10072,6 @@ L_0888B964: goto L_0888B968; L_0888B968: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888B9E8; } @@ -10048,7 +10090,6 @@ L_0888B970: AOT_REGCACHE_SYNC_OUT(); return; L_0888B990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -10057,7 +10098,6 @@ L_0888B990: L_0888B998: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888B9E0; } @@ -10072,7 +10112,6 @@ L_0888B9A4: L_0888B9B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1513))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888B9DC; } @@ -10087,7 +10126,6 @@ L_0888B9BC: goto L_0888B9C8; L_0888B9C8: aot_gpr_31 = (0x0888B9D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888B9D0u) goto L_0888B9D0; AOT_REGCACHE_SYNC_OUT(); return; L_0888B9D0: @@ -10103,7 +10141,6 @@ L_0888B9DC: goto L_0888B9E0; L_0888B9E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -10111,7 +10148,6 @@ L_0888B9E0: } L_0888B9E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BAB8; } @@ -10120,7 +10156,6 @@ L_0888B9E8: L_0888B9F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(5))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888BA08; } @@ -10152,7 +10187,6 @@ L_0888BA14: L_0888BA1C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0888BA7C; } @@ -10167,7 +10201,6 @@ L_0888BA28: L_0888BA34: aot_gpr_4 = (static_cast(aot_gpr_2) < 126 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BA7C; } @@ -10193,7 +10226,6 @@ L_0888BA58: L_0888BA60: aot_gpr_4 = (static_cast(aot_gpr_2) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BA7C; } @@ -10211,7 +10243,6 @@ L_0888BA7C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(7))); ctx.gpr[6] = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0888BAA8; } @@ -10248,7 +10279,17 @@ L_0888BAB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888BAD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -10293,11 +10334,20 @@ L_0888BB38: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-23112))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888BB50: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1406), static_cast(0u)); { const bool branch_taken = 0u == 0u; @@ -10310,7 +10360,6 @@ L_0888BB50: L_0888BB5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7701))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BB70; } @@ -10330,7 +10379,6 @@ L_0888BB70: goto L_0888876C; L_0888BB78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888BB88; } @@ -10354,7 +10402,6 @@ L_0888BB8C: L_0888BB94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BD14; } @@ -10362,7 +10409,6 @@ L_0888BB94: } L_0888BBA0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10380,7 +10426,6 @@ L_0888BBA8: } L_0888BBB8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10388,7 +10433,6 @@ L_0888BBB8: } L_0888BBC0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888BBF4; } @@ -10398,7 +10442,6 @@ L_0888BBC8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(86)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888BBF4; } @@ -10416,7 +10459,6 @@ L_0888BBE0: AOT_REGCACHE_SYNC_OUT(); return; L_0888BBE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888BBF4; } @@ -10437,7 +10479,6 @@ L_0888BBFC: AOT_REGCACHE_SYNC_OUT(); return; L_0888BC04: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888BC24; } @@ -10455,7 +10496,6 @@ L_0888BC14: AOT_REGCACHE_SYNC_OUT(); return; L_0888BC1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10463,7 +10503,6 @@ L_0888BC1C: } L_0888BC24: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10471,7 +10510,6 @@ L_0888BC24: } L_0888BC2C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10496,7 +10534,6 @@ L_0888BC48: goto L_08889C04; L_0888BC50: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10528,7 +10565,6 @@ L_0888BC7C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25952), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0888BCF8; } @@ -10537,7 +10573,6 @@ L_0888BC7C: L_0888BC90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BCA8; } @@ -10545,7 +10580,6 @@ L_0888BC90: } L_0888BC9C: aot_gpr_31 = (0x0888BCA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888BCA4u) goto L_0888BCA4; AOT_REGCACHE_SYNC_OUT(); return; L_0888BCA4: @@ -10553,7 +10587,6 @@ L_0888BCA4: goto L_0888BCA8; L_0888BCA8: aot_gpr_31 = (0x0888BCB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 490u, 0x088B6998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888BCB0u) goto L_0888BCB0; AOT_REGCACHE_SYNC_OUT(); return; L_0888BCB0: @@ -10570,7 +10603,6 @@ L_0888BCBC: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25952), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0888BCF8; } @@ -10579,7 +10611,6 @@ L_0888BCBC: L_0888BCD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BCE8; } @@ -10587,7 +10618,6 @@ L_0888BCD0: } L_0888BCDC: aot_gpr_31 = (0x0888BCE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888BCE4u) goto L_0888BCE4; AOT_REGCACHE_SYNC_OUT(); return; L_0888BCE4: @@ -10595,7 +10625,6 @@ L_0888BCE4: goto L_0888BCE8; L_0888BCE8: aot_gpr_31 = (0x0888BCF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 501u, 0x088B6A70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888BCF0u) goto L_0888BCF0; AOT_REGCACHE_SYNC_OUT(); return; L_0888BCF0: @@ -10606,7 +10635,6 @@ L_0888BCF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25952))); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10629,7 +10657,6 @@ L_0888BD14: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(3), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BD74; } @@ -10664,7 +10691,6 @@ L_0888BD58: L_0888BD74: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1409))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BD88; } @@ -10677,7 +10703,6 @@ L_0888BD80: L_0888BD88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0888BDA4; } @@ -10686,7 +10711,6 @@ L_0888BD88: L_0888BD94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0888BDA4; } @@ -10710,7 +10734,6 @@ L_0888BDB0: goto L_0888876C; L_0888BDB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888BDDC; } @@ -10728,7 +10751,6 @@ L_0888BDC0: L_0888BDDC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1406))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 50u, 0x0888C264u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10737,7 +10759,6 @@ L_0888BDDC: L_0888BDE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1407))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 29u, 0x0888C170u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10747,7 +10768,6 @@ L_0888BDF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_4) < 112 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BE98; } @@ -10766,7 +10786,6 @@ L_0888BE10: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0888BE24; } @@ -10777,7 +10796,6 @@ L_0888BE20: goto L_0888BE24; L_0888BE24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BE98; } @@ -10790,7 +10808,6 @@ L_0888BE2C: goto L_08888FC8; L_0888BE38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888BE98; } @@ -10799,7 +10816,6 @@ L_0888BE38: L_0888BE40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BE60; } @@ -10808,7 +10824,6 @@ L_0888BE40: L_0888BE4C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0888BE7C; } @@ -10816,7 +10831,6 @@ L_0888BE4C: } L_0888BE58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888BE98; } @@ -10831,7 +10845,6 @@ L_0888BE60: goto L_088897E0; L_0888BE74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 62u, 0x0888C2ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10851,7 +10864,6 @@ L_0888BE88: L_0888BE98: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1388))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BF34; } @@ -10887,7 +10899,6 @@ L_0888BEC8: goto L_08889C04; L_0888BED4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0888BEEC; } @@ -10911,7 +10922,6 @@ L_0888BEEC: goto L_0888BEFC; L_0888BEFC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0888BF20; } @@ -10968,7 +10978,6 @@ L_0888BF4C: } L_0888BF60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888BF70; } @@ -10980,7 +10989,6 @@ L_0888BF68: goto L_0888BF70; L_0888BF70: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 7u, 0x0888C050u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10990,7 +10998,6 @@ L_0888BF78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 7u, 0x0888C050u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10999,7 +11006,6 @@ L_0888BF78: L_0888BF88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888BFA0; } @@ -11007,7 +11013,6 @@ L_0888BF88: } L_0888BF94: aot_gpr_31 = (0x0888BF9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888BF9Cu) goto L_0888BF9C; AOT_REGCACHE_SYNC_OUT(); return; L_0888BF9C: @@ -11015,12 +11020,10 @@ L_0888BF9C: goto L_0888BFA0; L_0888BFA0: aot_gpr_31 = (0x0888BFA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 278u, 0x088B5BECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888BFA8u) goto L_0888BFA8; AOT_REGCACHE_SYNC_OUT(); return; L_0888BFA8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 7u, 0x0888C050u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11042,7 +11045,6 @@ L_0888BFC8: aot_gpr_4 = (aot_gpr_4 + static_cast(-10)); ctx.gpr[6] = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0888BFC8; } @@ -11050,7 +11052,6 @@ L_0888BFC8: } L_0888BFD8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888BFFC; } @@ -11060,7 +11061,6 @@ L_0888BFE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6008))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 7u, 0x0888C050u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0034.cpp b/profiles/vcs/generated/generated_unit_0034.cpp index 5d335b4..2fdcff8 100644 --- a/profiles/vcs/generated/generated_unit_0034.cpp +++ b/profiles/vcs/generated/generated_unit_0034.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0034[4089] = { - 1, 0, 2, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, - 10, 0, 11, 0, 12, 0, 13, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 18, 0, 19, 0, 0, 20, 0, 0, 0, 21, - 0, 0, 22, 23, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 27, 0, 0, 28, 0, 29, 0, 30, 0, - 0, 31, 0, 0, 32, 0, 33, 0, 0, 0, 34, 0, 0, 35, 0, 36, 0, 0, 0, 37, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, - 40, 0, 41, 0, 42, 0, 0, 0, 43, 0, 44, 0, 0, 45, 0, 46, 0, 47, 0, 0, 48, 0, 49, 0, 0, 50, 0, 0, 51, 0, 52, 0, - 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, 0, 0, 66, 0, 0, 67, 0, 68, 0, 69, 0, 0, 0, 70, - 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 76, 0, 0, 0, 77, 0, 0, - 78, 0, 0, 0, 79, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, - 0, 0, 0, 88, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 94, 0, - 95, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 99, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, - 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 106, 0, 107, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 112, 113, 0, 114, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, - 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, - 132, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 139, 0, 140, 0, 141, 0, 0, 0, - 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, - 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 157, 0, - 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, - 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 0, 172, 0, 0, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, - 0, 175, 0, 176, 177, 0, 0, 178, 179, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 184, 0, 0, 0, 185, 0, - 0, 0, 186, 0, 0, 0, 187, 188, 0, 0, 189, 0, 0, 190, 0, 191, 0, 192, 0, 0, 193, 194, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, - 0, 197, 0, 198, 0, 199, 0, 0, 0, 0, 200, 0, 201, 0, 202, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, - 207, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 211, 212, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 215, 0, 216, 0, 0, 0, 217, 0, 0, 0, 218, 0, 219, 0, 0, 220, 221, 0, 0, 0, 0, 222, 0, 0, 223, 0, 0, 0, 224, 0, - 0, 0, 0, 225, 0, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 234, 0, 235, 0, 0, 0, 0, 236, 0, 237, 0, 238, 0, - 0, 239, 0, 0, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 247, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 252, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, - 0, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 271, 272, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, - 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, - 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 286, 0, 0, 0, 287, - 0, 288, 0, 0, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 295, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 0, 0, 0, 309, 0, 0, - 0, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, - 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, - 0, 0, 0, 0, 0, 317, 0, 318, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, - 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 327, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, - 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 341, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 344, 0, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 350, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 354, 0, - 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, - 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 372, - 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 398, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, - 0, 407, 408, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, 419, 0, 0, 0, 0, - 420, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 426, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 437, 0, 0, 438, 0, 439, 0, 0, 440, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 442, 0, 443, 0, 444, 0, 0, 0, 0, 0, - 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 449, 0, 450, 0, 0, 0, 0, 0, - 451, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 455, 0, 0, 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, - 461, 462, 0, 0, 463, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, - 468, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 0, 0, - 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 483, 0, 0, 484, - 0, 485, 486, 0, 0, 487, 0, 488, 489, 0, 0, 0, 490, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 0, 495, 0, 0, 496, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, - 500, 0, 0, 501, 0, 0, 502, 0, 0, 503, 0, 0, 504, 0, 0, 505, 0, 0, 506, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, - 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 512, 0, 0, 513, 0, 0, 514, 0, 0, 515, 0, 0, 516, 0, 0, 517, 0, 0, 518, 0, 0, 519, 0, 0, 520, 0, 0, 521, - 0, 0, 522, 0, 0, 523, 0, 0, 524, 0, 0, 525, 0, 0, 526, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 531, 532, 0, 0, - 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 536, 0, 537, 0, 0, 538, 0, 539, 0, 0, 540, 0, 0, 0, - 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 544, 0, 545, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 549, - 550, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 0, 555, 556, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 565, 0, 0, - 566, 0, 567, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 575, 0, 576, 577, - 0, 0, 0, 578, 0, 0, 579, 0, 0, 580, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 584, 0, 585, 0, 586, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, 0, - 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, - 606, 0, 607, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 0, 614, 0, 615, 0, - 616, 0, 0, 617, 0, 0, 618, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 621, 0, 622, 0, 623, 0, 624, 0, 0, 625, 0, 0, 0, 0, - 626, 0, 627, 0, 628, 629, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 631, 0, 0, 0, 0, 632, 633, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, 636, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0034[64] = { + 0x895240D51095020Dull, 0x0288A4525481042Cull, 0x0A8954055252A515ull, 0x22A140048A928010ull, + 0x55080048AA888091ull, 0x00A1162208892221ull, 0xAAAAA20228008AB2ull, 0x2080000215422911ull, + 0x400014284A055555ull, 0x4450A19A10495555ull, 0x4284542A1132A4C4ull, 0x4486511401119111ull, + 0x542D002001420608ull, 0x0900000008288842ull, 0x1000000500289000ull, 0x0400800900000000ull, + 0x8000140000802000ull, 0x86A0000000005124ull, 0x1200405040084100ull, 0x50408A2288800090ull, + 0x0490040000221040ull, 0x23000000010A0000ull, 0x8000000212004088ull, 0x22100000000010A0ull, + 0x0414100028000010ull, 0x0000020002245081ull, 0x0004000000002400ull, 0x0000000000000244ull, + 0x4A0D000000480068ull, 0x1410000000200042ull, 0x924A080000402412ull, 0x0000000000100004ull, + 0x0014000090003000ull, 0x0000080000141000ull, 0x0400080000040000ull, 0x0140002000320200ull, + 0x0406000000040008ull, 0x0200210615024480ull, 0x200000050A481281ull, 0x0405404008001000ull, + 0x0000008084048840ull, 0x0504048105404948ull, 0x2100409100040209ull, 0x00000901028000B3ull, + 0x1050001014001000ull, 0x001031A695001500ull, 0x0024924924924800ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0008100480000000ull, + 0x0002492492492490ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x3400000090000000ull, + 0xA802A81212952020ull, 0x24800201288432A5ull, 0xD040820002024045ull, 0x0244548000010A48ull, + 0x4404880800488090ull, 0x0100002508044404ull, 0x0954214952810800ull, 0x014080C200000135ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0034[64] = { + 1u, 22u, 40u, 63u, 78u, 95u, 111u, 132u, 145u, 163u, 186u, 207u, 225u, 239u, 248u, 255u, + 259u, 264u, 274u, 283u, 296u, 304u, 310u, 317u, 323u, 330u, 338u, 341u, 344u, 355u, 361u, 373u, + 375u, 381u, 385u, 388u, 395u, 400u, 412u, 423u, 430u, 437u, 451u, 461u, 471u, 478u, 493u, 508u, + 508u, 508u, 508u, 508u, 512u, 528u, 528u, 528u, 533u, 550u, 566u, 578u, 590u, 601u, 610u, 626u, }; void recomp_unit_0034_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0034_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0888C000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0034[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0034[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0034[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0888C000; @@ -809,7 +716,6 @@ LOCAL_DISPATCH: } L_0888C000: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C00C; } @@ -824,7 +730,6 @@ L_0888C00C: aot_gpr_4 = (aot_gpr_4 + static_cast(100)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C048; } @@ -878,7 +783,6 @@ L_0888C070: } L_0888C080: { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_0888C090; } @@ -886,7 +790,6 @@ L_0888C080: } L_0888C088: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0888C0B8; } @@ -894,7 +797,6 @@ L_0888C088: } L_0888C090: { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_0888C09C; } @@ -929,7 +831,6 @@ L_0888C0C4: } L_0888C0D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C0E0; } @@ -943,7 +844,6 @@ L_0888C0D8: L_0888C0E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1520))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C0FC; } @@ -969,7 +869,6 @@ L_0888C108: goto L_0888C10C; L_0888C10C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888C2DC; } @@ -980,7 +879,6 @@ L_0888C114: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1552), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25908))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C168; } @@ -992,7 +890,6 @@ L_0888C128: aot_gpr_4 = (aot_gpr_4 + static_cast(100)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C2DC; } @@ -1027,7 +924,6 @@ L_0888C168: } L_0888C170: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888C258; } @@ -1036,7 +932,6 @@ L_0888C170: L_0888C178: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1388))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C208; } @@ -1074,7 +969,6 @@ L_0888C1A8: AOT_REGCACHE_SYNC_OUT(); return; L_0888C1B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C1CC; } @@ -1098,7 +992,6 @@ L_0888C1CC: goto L_0888C1DC; L_0888C1DC: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888C200; } @@ -1138,7 +1031,6 @@ L_0888C210: } L_0888C220: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888C2DC; } @@ -1155,7 +1047,6 @@ L_0888C228: } L_0888C234: aot_gpr_31 = (0x0888C23Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888C23Cu) goto L_0888C23C; AOT_REGCACHE_SYNC_OUT(); return; L_0888C23C: @@ -1170,7 +1061,6 @@ L_0888C244: AOT_REGCACHE_SYNC_OUT(); return; L_0888C250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C2DC; } @@ -1188,7 +1078,6 @@ L_0888C258: L_0888C264: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C2B8; } @@ -1201,12 +1090,10 @@ L_0888C270: AOT_REGCACHE_SYNC_OUT(); return; L_0888C278: aot_gpr_31 = (0x0888C280u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888C280u) goto L_0888C280; AOT_REGCACHE_SYNC_OUT(); return; L_0888C280: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888C2A8; } @@ -1233,7 +1120,6 @@ L_0888C2A8: AOT_REGCACHE_SYNC_OUT(); return; L_0888C2B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C2EC; } @@ -1247,7 +1133,6 @@ L_0888C2B8: L_0888C2C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1520))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C2DC; } @@ -1284,7 +1169,17 @@ L_0888C2EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888C310: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), aot_gpr_16); @@ -1295,7 +1190,6 @@ L_0888C310: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(108), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1402))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C344; } @@ -1308,7 +1202,6 @@ L_0888C33C: L_0888C344: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6008))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C35C; } @@ -1317,7 +1210,6 @@ L_0888C344: L_0888C350: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C3E4; } @@ -1325,12 +1217,10 @@ L_0888C350: } L_0888C35C: aot_gpr_31 = (0x0888C364u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888C364u) goto L_0888C364; AOT_REGCACHE_SYNC_OUT(); return; L_0888C364: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C3DC; } @@ -1340,7 +1230,6 @@ L_0888C36C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 113u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888C3C0; } @@ -1349,7 +1238,6 @@ L_0888C36C: L_0888C37C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25728))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C3C0; } @@ -1389,7 +1277,6 @@ L_0888C3D4: AOT_REGCACHE_SYNC_OUT(); return; L_0888C3DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CC28; } @@ -1414,7 +1301,6 @@ L_0888C400: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1403)))))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888C41C; } @@ -1423,7 +1309,6 @@ L_0888C400: L_0888C410: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1388))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C61C; } @@ -1444,7 +1329,6 @@ L_0888C43C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(26344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C464; } @@ -1454,7 +1338,6 @@ L_0888C44C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1388), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1405))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C46C; } @@ -1462,7 +1345,6 @@ L_0888C44C: } L_0888C45C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C4F0; } @@ -1470,7 +1352,6 @@ L_0888C45C: } L_0888C464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CC28; } @@ -1478,12 +1359,10 @@ L_0888C464: } L_0888C46C: aot_gpr_31 = (0x0888C474u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888C474u) goto L_0888C474; AOT_REGCACHE_SYNC_OUT(); return; L_0888C474: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C4F0; } @@ -1493,7 +1372,6 @@ L_0888C47C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 113u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888C4CC; } @@ -1502,7 +1380,6 @@ L_0888C47C: L_0888C48C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25727))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C4CC; } @@ -1539,7 +1416,6 @@ L_0888C4E0: AOT_REGCACHE_SYNC_OUT(); return; L_0888C4E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C614; } @@ -1552,7 +1428,6 @@ L_0888C4F0: AOT_REGCACHE_SYNC_OUT(); return; L_0888C4F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C54C; } @@ -1573,7 +1448,6 @@ L_0888C514: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(695))); aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C540; } @@ -1583,7 +1457,6 @@ L_0888C524: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(695))); aot_gpr_4 = (static_cast(aot_gpr_4) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C540; } @@ -1645,7 +1518,6 @@ L_0888C594: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1397))); aot_gpr_4 = (static_cast(aot_gpr_4) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C5B0; } @@ -1656,7 +1528,6 @@ L_0888C5A4: goto L_0888C5A8; L_0888C5A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C5DC; } @@ -1679,7 +1550,6 @@ L_0888C5C0: AOT_REGCACHE_SYNC_OUT(); return; L_0888C5D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C604; } @@ -1709,7 +1579,6 @@ L_0888C610: goto L_0888C614; L_0888C614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CC28; } @@ -1717,12 +1586,10 @@ L_0888C614: } L_0888C61C: aot_gpr_31 = (0x0888C624u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 412u, 0x08AABB88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888C624u) goto L_0888C624; AOT_REGCACHE_SYNC_OUT(); return; L_0888C624: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888C6A4; } @@ -1732,7 +1599,6 @@ L_0888C62C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_4 = (static_cast(aot_gpr_4) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C674; } @@ -1755,7 +1621,6 @@ L_0888C63C: AOT_REGCACHE_SYNC_OUT(); return; L_0888C66C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C6A4; } @@ -1765,7 +1630,6 @@ L_0888C674: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888C6A4; } @@ -1843,7 +1707,6 @@ L_0888C6EC: AOT_REGCACHE_SYNC_OUT(); return; L_0888C6F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C700; } @@ -1866,7 +1729,6 @@ L_0888C710: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_4 = (static_cast(aot_gpr_4) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888C734; } @@ -1875,7 +1737,6 @@ L_0888C710: L_0888C720: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1456))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C760; } @@ -1883,7 +1744,6 @@ L_0888C720: } L_0888C72C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0888C760; } @@ -1906,7 +1766,6 @@ L_0888C744: AOT_REGCACHE_SYNC_OUT(); return; L_0888C758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CC28; } @@ -1914,12 +1773,10 @@ L_0888C758: } L_0888C760: aot_gpr_31 = (0x0888C768u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 167u, 0x08A11520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888C768u) goto L_0888C768; AOT_REGCACHE_SYNC_OUT(); return; L_0888C768: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C9D8; } @@ -1930,7 +1787,6 @@ L_0888C770: ctx.gpr[17] = (ctx.gpr[17] + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CBDC; } @@ -1994,9 +1850,7 @@ L_0888C784: aot_gpr_4 = (aot_gpr_4 | 4096u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888C9BC; } @@ -2006,9 +1860,7 @@ L_0888C7DC: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888C8B0; } @@ -2074,7 +1926,6 @@ L_0888C838: AOT_REGCACHE_SYNC_OUT(); return; L_0888C840: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C86C; } @@ -2092,7 +1943,6 @@ L_0888C848: AOT_REGCACHE_SYNC_OUT(); return; L_0888C864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C9D0; } @@ -2101,7 +1951,6 @@ L_0888C864: L_0888C86C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6008))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C894; } @@ -2117,7 +1966,6 @@ L_0888C878: AOT_REGCACHE_SYNC_OUT(); return; L_0888C88C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C9D0; } @@ -2133,7 +1981,6 @@ L_0888C894: AOT_REGCACHE_SYNC_OUT(); return; L_0888C8A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C9D0; } @@ -2214,7 +2061,6 @@ L_0888C930: AOT_REGCACHE_SYNC_OUT(); return; L_0888C938: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888C94C; } @@ -2228,7 +2074,6 @@ L_0888C940: L_0888C94C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888C98C; } @@ -2265,7 +2110,6 @@ L_0888C98C: L_0888C990: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6008))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888C9A0; } @@ -2284,7 +2128,6 @@ L_0888C9A0: AOT_REGCACHE_SYNC_OUT(); return; L_0888C9B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888C9D0; } @@ -2300,7 +2143,6 @@ L_0888C9BC: AOT_REGCACHE_SYNC_OUT(); return; L_0888C9D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CBDC; } @@ -2310,7 +2152,6 @@ L_0888C9D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1403)))))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2328,7 +2169,6 @@ L_0888C9F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_4 = (static_cast(aot_gpr_4) < 33 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2338,7 +2178,6 @@ L_0888CA08: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1398))); aot_gpr_4 = (static_cast(aot_gpr_4) < 53 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2350,7 +2189,6 @@ L_0888CA18: L_0888CA1C: aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2359,7 +2197,6 @@ L_0888CA1C: L_0888CA28: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1402))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2372,7 +2209,6 @@ L_0888CA34: AOT_REGCACHE_SYNC_OUT(); return; L_0888CA3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2381,7 +2217,6 @@ L_0888CA3C: L_0888CA44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1456))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888CA54; } @@ -2420,7 +2255,6 @@ L_0888CA84: AOT_REGCACHE_SYNC_OUT(); return; L_0888CA8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888CAB0; } @@ -2436,7 +2270,6 @@ L_0888CA94: AOT_REGCACHE_SYNC_OUT(); return; L_0888CAA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CBDC; } @@ -2444,7 +2277,6 @@ L_0888CAA8: } L_0888CAB0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0888CB00; } @@ -2454,7 +2286,6 @@ L_0888CAB8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(6))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CAE4; } @@ -2470,7 +2301,6 @@ L_0888CAC8: AOT_REGCACHE_SYNC_OUT(); return; L_0888CADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888CAF8; } @@ -2496,7 +2326,6 @@ L_0888CB00: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1408)))))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0888CBB0; } @@ -2506,7 +2335,6 @@ L_0888CB10: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1408)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888CB50; } @@ -2516,7 +2344,6 @@ L_0888CB20: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(6))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CB3C; } @@ -2548,7 +2375,6 @@ L_0888CB50: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1408)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888CBA0; } @@ -2564,7 +2390,6 @@ L_0888CB60: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CB90; } @@ -2601,7 +2426,6 @@ L_0888CBB0: L_0888CBB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6008))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CBC8; } @@ -2621,7 +2445,6 @@ L_0888CBC8: L_0888CBDC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(5))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0888CBF8; } @@ -2642,7 +2465,6 @@ L_0888CBF8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(7))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888CC28; } @@ -2675,7 +2497,17 @@ L_0888CC28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888CC44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -2706,7 +2538,17 @@ L_0888CC60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888CC94: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); @@ -2716,9 +2558,7 @@ L_0888CC94: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888CCC8; } @@ -2737,17 +2577,25 @@ L_0888CCC8: goto L_0888CCCC; L_0888CCCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888CCD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x0888CCE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888CCE8u) goto L_0888CCE8; AOT_REGCACHE_SYNC_OUT(); return; L_0888CCE8: @@ -2811,7 +2659,17 @@ L_0888CD54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888CD6C: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); @@ -2869,7 +2727,6 @@ L_0888CDEC: { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_0888CE3C; @@ -2896,17 +2753,25 @@ L_0888CE4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888CE54: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } aot_gpr_31 = (0x0888CE80u); - // nop goto L_0888CC94; L_0888CE80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888D034; } @@ -2983,7 +2848,6 @@ L_0888CEF0: L_0888CF80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8383))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888D034; } @@ -2999,7 +2863,6 @@ L_0888CF8C: aot_fpr_13 = ctx.fpr[22] + ctx.fpr[26]; ctx.fpr[22] = ctx.fpr[22] + ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0888CFBC; @@ -3014,7 +2877,6 @@ L_0888CFBC: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_0888CFE8; @@ -3059,18 +2921,26 @@ L_0888D034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888D05C: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(232), aot_run_words); } aot_gpr_31 = (0x0888D0A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 865u, 0x08AC36A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888D0A8u) goto L_0888D0A8; AOT_REGCACHE_SYNC_OUT(); return; L_0888D0A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888D1DC; } @@ -3129,7 +2999,6 @@ L_0888D120: AOT_REGCACHE_SYNC_OUT(); return; L_0888D130: aot_gpr_31 = (0x0888D138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 58u, 0x08AA8BC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888D138u) goto L_0888D138; AOT_REGCACHE_SYNC_OUT(); return; L_0888D138: @@ -3169,7 +3038,6 @@ L_0888D138: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(224), aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), std::bit_cast(ctx.fpr[20])); if (branch_taken) { @@ -3179,7 +3047,6 @@ L_0888D138: } L_0888D1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888D1E8; } @@ -3187,7 +3054,6 @@ L_0888D1D4: } L_0888D1DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888DF08; } @@ -3201,7 +3067,6 @@ L_0888D1E8: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (static_cast(aot_gpr_4) < 180 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888D35C; } @@ -3214,7 +3079,6 @@ L_0888D1FC: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8396))); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); if (branch_taken) { @@ -3266,7 +3130,6 @@ L_0888D278: AOT_REGCACHE_SYNC_OUT(); return; L_0888D290: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888D35C; } @@ -3347,7 +3210,6 @@ L_0888D35C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 22 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888D384; } @@ -3357,7 +3219,6 @@ L_0888D36C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888D384; } @@ -3375,7 +3236,6 @@ L_0888D384: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 23 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888D3A4; } @@ -3385,7 +3245,6 @@ L_0888D394: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888D3AC; } @@ -3416,7 +3275,6 @@ L_0888D3BC: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(ctx.gpr[22]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[22] = (ctx.lo); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888D3F0; } @@ -3432,7 +3290,6 @@ L_0888D3D8: goto L_0888D3F0; L_0888D3F0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0888D6FC; } @@ -3444,7 +3301,6 @@ L_0888D3F8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8396))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (2234u << 16u); if (branch_taken) { @@ -3556,7 +3412,6 @@ L_0888D4E8: AOT_REGCACHE_SYNC_OUT(); return; L_0888D544: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888D5E4; } @@ -3567,7 +3422,6 @@ L_0888D54C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fpr[24] = ctx.fpr[26] / aot_fpr_12; aot_gpr_31 = (0x0888D560u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888D560u) goto L_0888D560; AOT_REGCACHE_SYNC_OUT(); return; L_0888D560: @@ -3612,7 +3466,6 @@ L_0888D5E4: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888D4A8; } @@ -3672,7 +3525,6 @@ L_0888D670: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fpr[22] = ctx.fpr[26] / aot_fpr_12; aot_gpr_31 = (0x0888D684u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888D684u) goto L_0888D684; AOT_REGCACHE_SYNC_OUT(); return; L_0888D684: @@ -3712,7 +3564,6 @@ L_0888D6FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7900))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8396))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8396))); goto L_0888D71C; @@ -3729,7 +3580,6 @@ L_0888D714: L_0888D71C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8400))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8400))); goto L_0888D730; @@ -3789,7 +3639,6 @@ L_0888D7E4: ctx.gpr[19] = (ctx.gpr[30] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888D8C8; } @@ -3843,7 +3692,6 @@ L_0888D810: AOT_REGCACHE_SYNC_OUT(); return; L_0888D86C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888D8B0; } @@ -3881,7 +3729,6 @@ L_0888D8B0: } L_0888D8C8: aot_gpr_31 = (0x0888D8D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888D8D0u) goto L_0888D8D0; AOT_REGCACHE_SYNC_OUT(); return; L_0888D8D0: @@ -3900,7 +3747,6 @@ L_0888D8E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7900))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8400))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8400))); goto L_0888D91C; @@ -3928,7 +3774,6 @@ L_0888D91C: goto L_0888D930; L_0888D930: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0888DECC; } @@ -4063,9 +3908,7 @@ L_0888DA34: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888DC14; } @@ -4085,7 +3928,6 @@ L_0888DAC8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7900))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8396))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = ctx.fpr[26] - ctx.fpr[20]; if (branch_taken) { @@ -4164,7 +4006,6 @@ L_0888DB24: ctx.gpr[7] = (std::bit_cast(aot_fpr_12)); ctx.gpr[8] = (ctx.gpr[8] & 255u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); if (branch_taken) { @@ -4261,7 +4102,6 @@ L_0888DCCC: } L_0888DCE4: aot_gpr_31 = (0x0888DCECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888DCECu) goto L_0888DCEC; AOT_REGCACHE_SYNC_OUT(); return; L_0888DCEC: @@ -4343,7 +4183,6 @@ L_0888DD54: aot_gpr_4 = (aot_gpr_16 + ctx.gpr[23]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888DEAC; } @@ -4360,7 +4199,6 @@ L_0888DDD0: AOT_REGCACHE_SYNC_OUT(); return; L_0888DDE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888DEAC; } @@ -4369,9 +4207,7 @@ L_0888DDE8: L_0888DDF0: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888DEAC; } @@ -4387,7 +4223,6 @@ L_0888DE10: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4407,7 +4242,6 @@ L_0888DE34: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16345u << 16u); if (branch_taken) { @@ -4453,7 +4287,6 @@ L_0888DEAC: } L_0888DEC4: aot_gpr_31 = (0x0888DECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888DECCu) goto L_0888DECC; AOT_REGCACHE_SYNC_OUT(); return; L_0888DECC: @@ -4511,7 +4344,17 @@ L_0888DF08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888DF50: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4588,7 +4431,6 @@ L_0888DF50: ctx.fpr[20] = std::bit_cast(0u); ctx.gpr[17] = (ctx.gpr[28] + static_cast(8376)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[28] + static_cast(8372)); if (branch_taken) { @@ -4614,9 +4456,7 @@ L_0888E034: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8388), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888E07C; } @@ -4648,7 +4488,6 @@ L_0888E07C: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8392), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0888E0C8u); - // nop goto L_0888CC94; L_0888E0C8: { const bool branch_taken = ctx.gpr[2] == 0u; @@ -4696,7 +4535,6 @@ L_0888E130: AOT_REGCACHE_SYNC_OUT(); return; L_0888E148: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888E4E8; } @@ -4712,14 +4550,10 @@ L_0888E150: aot_gpr_6 = (ctx.gpr[19] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), ctx.gpr[17]); ctx.gpr[17] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[17]); ctx.gpr[17] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[17]); @@ -4811,9 +4645,7 @@ L_0888E2AC: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888E324; } @@ -4832,7 +4664,6 @@ L_0888E2E8: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_0888E4C8; @@ -4844,7 +4675,6 @@ L_0888E324: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8374), static_cast(ctx.gpr[19])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8392))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8375), static_cast(ctx.gpr[18])); if (branch_taken) { @@ -4878,7 +4708,6 @@ L_0888E354: aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8384))); goto L_0888E3E0; @@ -4906,7 +4735,6 @@ L_0888E394: AOT_REGCACHE_SYNC_OUT(); return; L_0888E3D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888E4C4; } @@ -4921,7 +4749,6 @@ L_0888E3E0: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_0888E40C; @@ -4940,7 +4767,6 @@ L_0888E40C: aot_fpr_14 = aot_fpr_14 - aot_fpr_15; aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_0888E448; @@ -5013,7 +4839,17 @@ L_0888E4E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E51C: ctx.gpr[2] = (2185u << 16u); jump_target = aot_gpr_31; @@ -5021,12 +4857,21 @@ L_0888E51C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E528: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0888E538u); - // nop goto L_0888E51C; L_0888E538: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5035,7 +4880,17 @@ L_0888E538: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E544: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5053,7 +4908,6 @@ L_0888E560: goto L_0888E568; L_0888E568: aot_gpr_31 = (0x0888E570u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888E570u) goto L_0888E570; AOT_REGCACHE_SYNC_OUT(); return; L_0888E570: @@ -5061,7 +4915,6 @@ L_0888E570: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888E588; } @@ -5083,7 +4936,17 @@ L_0888E588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E5A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5108,7 +4971,17 @@ L_0888E5B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E5E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5140,7 +5013,6 @@ L_0888E61C: L_0888E624: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888E64C; } @@ -5167,7 +5039,6 @@ L_0888E64C: L_0888E658: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888E66C; } @@ -5190,14 +5061,33 @@ L_0888E66C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E680: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E688: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[6]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5343,9 +5233,7 @@ L_0888E76C: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888E7B8; } @@ -5365,9 +5253,7 @@ L_0888E798: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888E7C0; } @@ -5398,7 +5284,17 @@ L_0888E7C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888E7E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -5453,7 +5349,6 @@ L_0888E868: aot_gpr_4 = (aot_gpr_4 + static_cast(228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888E920; } @@ -5527,7 +5422,6 @@ L_0888E89C: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0888E918; } @@ -5541,7 +5435,6 @@ L_0888E90C: AOT_REGCACHE_SYNC_OUT(); return; L_0888E918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888E960; } @@ -5578,7 +5471,6 @@ L_0888E938: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_31 = (0x0888E958u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 66u, 0x08AD065Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888E958u) goto L_0888E958; AOT_REGCACHE_SYNC_OUT(); return; L_0888E958: @@ -5596,7 +5488,6 @@ L_0888E968: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888E9A8; } @@ -5609,7 +5500,6 @@ L_0888E980: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888E9A8; } @@ -5628,7 +5518,6 @@ L_0888E9A8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888EA24; } @@ -5647,7 +5536,6 @@ L_0888E9C8: AOT_REGCACHE_SYNC_OUT(); return; L_0888E9E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888EA24; } @@ -5659,7 +5547,6 @@ L_0888E9E8: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0888EA24; } @@ -5668,7 +5555,6 @@ L_0888E9E8: L_0888EA00: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(116))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888EA24; } @@ -5701,7 +5587,17 @@ L_0888EA24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888EA48: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[7]); @@ -5771,7 +5667,6 @@ L_0888EAE0: L_0888EAF4: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888EB04; } @@ -5783,7 +5678,6 @@ L_0888EB00: L_0888EB04: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0888EB14; } @@ -5794,7 +5688,6 @@ L_0888EB10: goto L_0888EB14; L_0888EB14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888EB5C; } @@ -5837,7 +5730,17 @@ L_0888EB64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888EB80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -5856,7 +5759,17 @@ L_0888EBA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888EBAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5913,7 +5826,6 @@ L_0888EBAC: aot_fpr_13 = std::bit_cast(ctx.gpr[10]); ctx.gpr[10] = (ctx.gpr[17] + static_cast(112)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[11] = (aot_gpr_16 + static_cast(112)); if (branch_taken) { @@ -5960,9 +5872,7 @@ L_0888EC30: ctx.gpr[12] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(ctx.gpr[12]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888EC70; } @@ -6060,9 +5970,7 @@ L_0888EC90: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888ECD8; } @@ -6123,9 +6031,7 @@ L_0888ECF0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888ED28; } @@ -6191,9 +6097,7 @@ L_0888ED30: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0888ED68; } @@ -6230,7 +6134,6 @@ L_0888ED70: AOT_REGCACHE_SYNC_OUT(); return; L_0888ED7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888ED88; } @@ -6247,7 +6150,6 @@ L_0888ED88: AOT_REGCACHE_SYNC_OUT(); return; L_0888ED94: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0888EDA0; } @@ -6260,7 +6162,6 @@ L_0888EDA0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(160))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0888EDB4; } @@ -6283,7 +6184,17 @@ L_0888EDB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888EDD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6304,7 +6215,6 @@ L_0888EDD0: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_16 = (ctx.gpr[7] | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0888EE50; } @@ -6331,7 +6241,6 @@ L_0888EE44: L_0888EE50: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888EE68; } @@ -6346,7 +6255,6 @@ L_0888EE5C: L_0888EE68: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888EE80; } @@ -6361,7 +6269,6 @@ L_0888EE74: L_0888EE80: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888EE98; } @@ -6376,7 +6283,6 @@ L_0888EE8C: L_0888EE98: aot_gpr_4 = (aot_gpr_16 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888EEB0; } @@ -6391,7 +6297,6 @@ L_0888EEA4: L_0888EEB0: aot_gpr_4 = (aot_gpr_16 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888EEC8; } @@ -6406,7 +6311,6 @@ L_0888EEBC: L_0888EEC8: aot_gpr_4 = (aot_gpr_16 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F37C; } @@ -6716,7 +6620,6 @@ L_0888EED4: L_0888F37C: aot_gpr_4 = (aot_gpr_16 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F3B0; } @@ -6748,7 +6651,17 @@ L_0888F3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888F3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6789,7 +6702,6 @@ L_0888F428: L_0888F434: aot_gpr_4 = (ctx.gpr[20] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F44C; } @@ -6804,7 +6716,6 @@ L_0888F440: L_0888F44C: aot_gpr_4 = (ctx.gpr[20] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F470; } @@ -6835,7 +6746,6 @@ L_0888F464: L_0888F470: aot_gpr_4 = (ctx.gpr[20] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F488; } @@ -6850,7 +6760,6 @@ L_0888F47C: L_0888F488: aot_gpr_4 = (ctx.gpr[20] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F4A0; } @@ -6865,7 +6774,6 @@ L_0888F494: L_0888F4A0: aot_gpr_4 = (ctx.gpr[20] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F4B8; } @@ -6880,7 +6788,6 @@ L_0888F4AC: L_0888F4B8: aot_gpr_4 = (ctx.gpr[20] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F770; } @@ -7063,7 +6970,6 @@ L_0888F4C4: L_0888F770: aot_gpr_4 = (ctx.gpr[20] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F7F4; } @@ -7096,7 +7002,6 @@ L_0888F77C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888F7F0; } @@ -7124,7 +7029,17 @@ L_0888F7F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888F814: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -7133,7 +7048,6 @@ L_0888F814: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(100))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0888F848; } @@ -7170,7 +7084,6 @@ L_0888F850: AOT_REGCACHE_SYNC_OUT(); return; L_0888F85C: aot_gpr_31 = (0x0888F864u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888F864u) goto L_0888F864; AOT_REGCACHE_SYNC_OUT(); return; L_0888F864: @@ -7192,7 +7105,17 @@ L_0888F884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888F890: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7209,7 +7132,6 @@ L_0888F8AC: goto L_0888F8B4; L_0888F8B4: aot_gpr_31 = (0x0888F8BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888F8BCu) goto L_0888F8BC; AOT_REGCACHE_SYNC_OUT(); return; L_0888F8BC: @@ -7226,7 +7148,6 @@ L_0888F8C4: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888F930; } @@ -7234,7 +7155,6 @@ L_0888F8C4: } L_0888F8EC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0888F900; } @@ -7242,7 +7162,6 @@ L_0888F8EC: } L_0888F8F4: aot_gpr_31 = (0x0888F8FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888F8FCu) goto L_0888F8FC; AOT_REGCACHE_SYNC_OUT(); return; L_0888F8FC: @@ -7260,7 +7179,6 @@ L_0888F908: goto L_0888F814; L_0888F914: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0888F924; } @@ -7298,7 +7216,17 @@ L_0888F934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888F948: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -7317,7 +7245,6 @@ L_0888F95C: AOT_REGCACHE_SYNC_OUT(); return; L_0888F96C: aot_gpr_31 = (0x0888F974u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888F974u) goto L_0888F974; AOT_REGCACHE_SYNC_OUT(); return; L_0888F974: @@ -7338,7 +7265,17 @@ L_0888F980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888F9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7353,7 +7290,6 @@ L_0888F9A4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888FA08; } @@ -7362,7 +7298,6 @@ L_0888F9A4: L_0888F9DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888FA08; } @@ -7377,7 +7312,6 @@ L_0888F9E8: L_0888F9F4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888FA08; } @@ -7396,7 +7330,17 @@ L_0888FA08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FA18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7415,7 +7359,17 @@ L_0888FA38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FA44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7423,7 +7377,6 @@ L_0888FA44: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0888FA64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0153_entry, 153u, 258u, 0x08A696F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888FA64u) goto L_0888FA64; AOT_REGCACHE_SYNC_OUT(); return; L_0888FA64: @@ -7458,7 +7411,17 @@ L_0888FAA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7483,7 +7446,6 @@ L_0888FAD8: goto L_0888FAF0; L_0888FAF0: aot_gpr_31 = (0x0888FAF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888FAF8u) goto L_0888FAF8; AOT_REGCACHE_SYNC_OUT(); return; L_0888FAF8: @@ -7505,7 +7467,6 @@ L_0888FB0C: L_0888FB18: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0888FB2C; } @@ -7528,7 +7489,17 @@ L_0888FB2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FB40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -7579,12 +7550,21 @@ L_0888FBB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FBC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0888FBD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 540u, 0x08A666DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888FBD8u) goto L_0888FBD8; AOT_REGCACHE_SYNC_OUT(); return; L_0888FBD8: @@ -7594,7 +7574,17 @@ L_0888FBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FBE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7606,7 +7596,6 @@ L_0888FBE4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(20))); aot_mem.aot_direct_store8(ctx.gpr[7] + static_cast(53), static_cast(0u)); aot_gpr_31 = (0x0888FC10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0153_entry, 153u, 76u, 0x08A68ACCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0888FC10u) goto L_0888FC10; AOT_REGCACHE_SYNC_OUT(); return; L_0888FC10: @@ -7616,7 +7605,17 @@ L_0888FC10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FC1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7664,7 +7663,17 @@ L_0888FC58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FC8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7789,7 +7798,17 @@ L_0888FD48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FD6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7810,7 +7829,17 @@ L_0888FD88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FD94: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), 0u); @@ -7834,7 +7863,17 @@ L_0888FD94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FDE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7865,7 +7904,17 @@ L_0888FE2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FE40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7934,13 +7983,22 @@ L_0888FEA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FEB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0888FED8; } @@ -7952,7 +8010,6 @@ L_0888FEC8: goto L_0888FE40; L_0888FED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0888FEE0; } @@ -7969,13 +8026,22 @@ L_0888FEE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FEEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0888FF10; } @@ -8003,7 +8069,17 @@ L_0888FF14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0888FF20: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (ctx.gpr[7] & 255u); @@ -8084,7 +8160,6 @@ L_0888FFE0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 26u, 0x088900F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0035.cpp b/profiles/vcs/generated/generated_unit_0035.cpp index 5729396..e02532c 100644 --- a/profiles/vcs/generated/generated_unit_0035.cpp +++ b/profiles/vcs/generated/generated_unit_0035.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0035[4088] = { - 1, 2, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 7, 0, 8, 0, 0, 9, 0, 0, 10, 11, 0, 12, 0, 13, 14, - 0, 0, 15, 0, 16, 0, 0, 17, 0, 18, 0, 19, 0, 0, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 0, 25, 0, 26, 0, 0, 27, - 0, 28, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, - 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 39, 40, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 0, 46, 0, 47, 0, 48, 0, 49, 0, 0, 0, 50, 0, 51, 0, 52, 0, 53, 0, - 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 61, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 64, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, - 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 0, 79, 0, 0, 0, 80, 0, 81, 0, 0, - 82, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 85, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 109, 0, - 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 0, 0, 112, 0, 0, 113, 0, 114, 0, 0, 0, 0, 115, 0, 116, 0, 117, 0, 0, 0, 0, 0, - 118, 0, 0, 119, 0, 120, 0, 0, 0, 0, 121, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 0, 0, 0, 127, 0, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 131, 0, 132, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 138, - 0, 139, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, - 0, 0, 0, 151, 0, 0, 152, 0, 153, 154, 0, 155, 0, 156, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 159, 0, 160, 0, 161, 0, 0, 162, 0, 0, 163, 0, 164, 0, 0, 0, 165, 0, - 166, 167, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, 188, 0, 189, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, - 0, 193, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, - 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 202, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 205, 0, 206, 0, 207, 0, 0, - 0, 0, 0, 208, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 210, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 0, 214, - 0, 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 217, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, - 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 0, 0, 227, 0, 228, 0, 229, - 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 241, 0, 242, 0, 0, 0, 243, 0, 244, 0, 245, 0, 246, 0, - 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 251, 0, - 0, 252, 0, 0, 253, 0, 0, 254, 0, 255, 0, 0, 256, 0, 0, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 0, 0, 262, 0, 0, 0, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 268, 0, 269, 0, - 270, 0, 271, 0, 272, 0, 273, 0, 274, 275, 0, 276, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 0, 280, 0, - 0, 0, 281, 0, 0, 282, 0, 0, 0, 283, 0, 284, 0, 285, 0, 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 0, 297, 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 309, 0, 310, 0, 311, 312, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 317, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, - 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 323, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 0, 331, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, - 0, 0, 334, 0, 0, 0, 335, 0, 336, 0, 337, 0, 0, 0, 0, 338, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 346, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 352, - 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, - 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 364, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 370, 0, 371, 0, 0, 0, 372, 0, 0, 373, 0, 374, 0, 375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 377, 0, 0, 0, 0, 378, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 381, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, - 385, 0, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 0, - 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 402, 403, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, - 0, 0, 0, 407, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 410, 0, 411, 0, 0, 0, 412, 0, 0, 0, 413, 0, 414, 0, 415, 0, 416, - 0, 0, 0, 0, 0, 417, 418, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 421, 0, - 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 424, 0, 425, 0, 0, 0, 426, 0, 0, 0, 427, 0, 428, - 0, 429, 0, 430, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 440, 0, 0, 0, 441, 0, 0, 442, 0, 443, - 0, 444, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 448, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, - 0, 450, 0, 0, 0, 451, 0, 452, 0, 0, 0, 453, 0, 0, 0, 454, 0, 455, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 458, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 0, 463, - 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, - 469, 0, 0, 0, 470, 0, 471, 0, 472, 0, 473, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, - 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 491, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 495, 0, 496, 0, 0, 497, 0, 498, 0, - 0, 499, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 509, 0, 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 522, 523, 0, 524, 0, 525, 0, 526, 527, 0, 0, 0, 528, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 530, 0, 531, 532, 0, 0, 533, 0, 534, 0, 535, 536, - 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 542, 0, 0, - 0, 0, 543, 0, 544, 545, 0, 0, 546, 0, 547, 0, 0, 548, 0, 0, 549, 550, 0, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 553, - 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 557, 0, 558, 559, 0, 0, 560, 0, 561, 0, 0, 562, 0, 0, 0, 0, 0, 0, 563, 0, - 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, 567, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 570, 0, 571, 572, 0, 0, 573, - 0, 574, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, - 0, 581, 0, 582, 0, 0, 0, 0, 583, 0, 584, 585, 0, 586, 0, 0, 587, 0, 588, 0, 589, 0, 0, 590, 0, 0, 0, 591, 0, 0, 0, 0, - 0, 592, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 0, - 0, 598, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, - 603, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 606, 0, 607, 608, 0, 609, 0, 0, 610, 0, 611, 0, 612, 0, 0, 613, 0, 0, 0, 614, 0, - 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, 621, - 0, 622, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 632, 0, 633, 634, 0, - 635, 0, 0, 0, 636, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 639, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 642, 0, - 0, 0, 0, 0, 643, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 653, 0, 654, 655, 0, 656, 0, 0, 0, 0, - 0, 657, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, - 0, 0, 0, 663, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0035[64] = { + 0x94AA8A94D64A9243ull, 0x248692084050808Aull, 0x0000800955154900ull, 0x2044C40020404210ull, + 0x28AA042020882840ull, 0x1209120082114881ull, 0x0200000000848242ull, 0x0542904852051800ull, + 0x00202A2001405429ull, 0x0000002A9015001Aull, 0x0000000000000000ull, 0x0000200000000000ull, + 0x0000000000000400ull, 0x0009000100000000ull, 0x810000000000A000ull, 0x4525600000042B48ull, + 0x0010020012000203ull, 0x000C000000200000ull, 0x0000000100000000ull, 0x0000000001000000ull, + 0x0200000080001000ull, 0x0000000000000000ull, 0x082004000A4D2202ull, 0x8204102410004012ull, + 0x908182082A080200ull, 0x8000010820042940ull, 0x05012484A8A00800ull, 0x4081200855145082ull, + 0x5280120211551292ull, 0x0020AA2450820B55ull, 0x0091200850400000ull, 0x0080020008000492ull, + 0x0001400002A08000ull, 0x800A00008540026Aull, 0x82A0140000854002ull, 0x000185440A000000ull, + 0x4240212000000001ull, 0x1001210884804480ull, 0x0021810004084020ull, 0x86000000A9144441ull, + 0x10400AA910152200ull, 0x20110C0800544511ull, 0x40400860AA228888ull, 0x1000108AA2288010ull, + 0xA451004008020040ull, 0x800000004280000Aull, 0x00000000800A88A2ull, 0x0900890084804240ull, + 0x2401004421010551ull, 0x0040210040120080ull, 0x2008001652A48604ull, 0x0552288020040100ull, + 0x2356A00001328000ull, 0x28A40008D4D40000ull, 0x4094D0A288432534ull, 0x000802129A145108ull, + 0x08952D0A28004000ull, 0x0100004204411022ull, 0x44A9685140080000ull, 0x00108082A2088220ull, + 0x6851400100000040ull, 0x0010811044088291ull, 0x0B428A0020000020ull, 0x0080010804411022ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0035[64] = { + 1u, 28u, 44u, 57u, 68u, 82u, 96u, 103u, 118u, 131u, 142u, 142u, 143u, 144u, 147u, 151u, + 166u, 173u, 176u, 177u, 178u, 181u, 181u, 193u, 203u, 215u, 224u, 237u, 252u, 270u, 288u, 296u, + 303u, 309u, 321u, 332u, 340u, 347u, 358u, 366u, 379u, 393u, 407u, 422u, 434u, 444u, 450u, 458u, + 469u, 482u, 489u, 504u, 515u, 529u, 543u, 564u, 578u, 592u, 601u, 615u, 626u, 635u, 647u, 657u, }; void recomp_unit_0035_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0035_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08890000u; - entry_id = (entry_delta < 16352u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0035[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16352u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0035[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0035[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08890000; @@ -837,7 +744,6 @@ LOCAL_DISPATCH: } } L_08890000: - // nop goto L_08890004; L_08890004: aot_gpr_16 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(8)))))); @@ -859,7 +765,6 @@ L_08890018: L_08890024: aot_gpr_4 = (static_cast(aot_gpr_16) < 26 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08890044; } @@ -876,7 +781,6 @@ L_08890030: } L_0889003C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889004C; } @@ -902,7 +806,6 @@ L_0889004C: L_08890058: aot_gpr_4 = (static_cast(aot_gpr_16) < 36 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08890078; } @@ -921,7 +824,6 @@ L_08890068: } L_08890070: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889007C; } @@ -933,7 +835,6 @@ L_08890078: L_0889007C: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_088900DC; } @@ -941,7 +842,6 @@ L_0889007C: } L_08890088: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088900DC; } @@ -956,7 +856,6 @@ L_08890090: goto L_0889009C; L_0889009C: aot_gpr_31 = (0x088900A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088900A4u) goto L_088900A4; AOT_REGCACHE_SYNC_OUT(); return; L_088900A4: @@ -967,7 +866,6 @@ L_088900AC: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[30]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(336))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088900DC; } @@ -981,7 +879,6 @@ L_088900BC: goto L_088900C4; L_088900C4: aot_gpr_31 = (0x088900CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088900CCu) goto L_088900CC; AOT_REGCACHE_SYNC_OUT(); return; L_088900CC: @@ -1018,7 +915,6 @@ L_088900FC: goto L_08890104; L_08890104: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0889018C; } @@ -1028,7 +924,6 @@ L_0889010C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_4 = (aot_gpr_16 | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889018C; } @@ -1042,7 +937,6 @@ L_0889011C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2)))))); ctx.gpr[18] = (ctx.lo); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08890150; } @@ -1058,7 +952,6 @@ L_0889013C: AOT_REGCACHE_SYNC_OUT(); return; L_08890150: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889018C; } @@ -1072,7 +965,6 @@ L_08890158: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2)))))); aot_gpr_16 = (ctx.lo); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0889018C; } @@ -1101,7 +993,6 @@ L_0889018C: L_088901A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889028C; } @@ -1118,7 +1009,6 @@ L_088901B0: } L_088901BC: aot_gpr_31 = (0x088901C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088901C4u) goto L_088901C4; AOT_REGCACHE_SYNC_OUT(); return; L_088901C4: @@ -1129,7 +1019,6 @@ L_088901C8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889028C; } @@ -1144,7 +1033,6 @@ L_088901DC: L_088901E8: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0889028C; } @@ -1161,7 +1049,6 @@ L_088901F4: aot_gpr_4 = (aot_gpr_4 << 5u); ctx.gpr[19] = (ctx.gpr[19] + aot_gpr_4); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0889028C; } @@ -1170,7 +1057,6 @@ L_088901F4: L_08890220: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(20))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889028C; } @@ -1193,7 +1079,6 @@ L_08890238: goto L_08890240; L_08890240: aot_gpr_31 = (0x08890248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08890248u) goto L_08890248; AOT_REGCACHE_SYNC_OUT(); return; L_08890248: @@ -1209,7 +1094,6 @@ L_08890250: AOT_REGCACHE_SYNC_OUT(); return; L_08890260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889028C; } @@ -1223,7 +1107,6 @@ L_08890268: goto L_08890270; L_08890270: aot_gpr_31 = (0x08890278u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08890278u) goto L_08890278; AOT_REGCACHE_SYNC_OUT(); return; L_08890278: @@ -1254,7 +1137,17 @@ L_0889028C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088902BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1324,7 +1217,17 @@ L_08890358: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890374: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1383,7 +1286,17 @@ L_088903D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088903F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1392,7 +1305,6 @@ L_088903F4: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889045C; } @@ -1446,7 +1358,17 @@ L_0889045C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890474: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); @@ -1462,9 +1384,7 @@ L_08890474: L_08890494: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088904CC; } @@ -1475,7 +1395,6 @@ L_088904A8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); if (branch_taken) { @@ -1485,7 +1404,6 @@ L_088904A8: } L_088904C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889051C; } @@ -1493,7 +1411,6 @@ L_088904C4: } L_088904CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08890564; } @@ -1501,7 +1418,6 @@ L_088904CC: } L_088904D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08890564; } @@ -1533,9 +1449,7 @@ L_08890500: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(40), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088904EC; } @@ -1559,7 +1473,6 @@ L_0889052C: AOT_REGCACHE_SYNC_OUT(); return; L_08890538: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08890550; } @@ -1596,7 +1509,17 @@ L_08890564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889057C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); @@ -1616,7 +1539,17 @@ L_088905A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088905B0: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_gpr_4 = (aot_gpr_5 << 5u); @@ -1625,7 +1558,17 @@ L_088905B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088905C0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(16), std::bit_cast(aot_fpr_12)); jump_target = aot_gpr_31; @@ -1633,7 +1576,17 @@ L_088905C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088905CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -1649,7 +1602,17 @@ L_088905E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088905F0: ctx.gpr[7] = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(52), ctx.gpr[7]); @@ -1659,7 +1622,17 @@ L_088905F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890604: ctx.gpr[7] = (0u | 2u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(52), ctx.gpr[7]); @@ -1669,7 +1642,17 @@ L_08890604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890618: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25560), 0u); jump_target = aot_gpr_31; @@ -1677,7 +1660,17 @@ L_08890618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890624: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1753,7 +1746,17 @@ L_0889065C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088906E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1783,9 +1786,7 @@ L_0889072C: goto L_08890730; L_08890730: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08890748; } @@ -1807,7 +1808,6 @@ L_08890748: L_08890764: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08890778; } @@ -1815,7 +1815,6 @@ L_08890764: } L_08890770: aot_gpr_31 = (0x08890778u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 621u, 0x08972D80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08890778u) goto L_08890778; AOT_REGCACHE_SYNC_OUT(); return; L_08890778: @@ -1827,7 +1826,17 @@ L_08890778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889078C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_5); jump_target = aot_gpr_31; @@ -1835,7 +1844,17 @@ L_0889078C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1847,7 +1866,6 @@ L_08890798: L_088907B0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088907C4; } @@ -1855,7 +1873,6 @@ L_088907B0: } L_088907BC: aot_gpr_31 = (0x088907C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 621u, 0x08972D80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088907C4u) goto L_088907C4; AOT_REGCACHE_SYNC_OUT(); return; L_088907C4: @@ -1867,21 +1884,51 @@ L_088907C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088907D8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088907E0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088907E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1893,7 +1940,6 @@ L_088907E8: L_08890800: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08890814; } @@ -1901,7 +1947,6 @@ L_08890800: } L_0889080C: aot_gpr_31 = (0x08890814u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 621u, 0x08972D80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08890814u) goto L_08890814; AOT_REGCACHE_SYNC_OUT(); return; L_08890814: @@ -1913,21 +1958,51 @@ L_08890814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890828: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890830: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1936,7 +2011,6 @@ L_08890838: aot_gpr_5 = (0u | 100u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088908A4; } @@ -1944,7 +2018,6 @@ L_08890838: } L_08890858: aot_gpr_31 = (0x08890860u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08890860: @@ -1979,7 +2052,6 @@ L_088908A4: goto L_088908AC; L_088908AC: aot_gpr_31 = (0x088908B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 723u, 0x08A06FE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088908B4u) goto L_088908B4; AOT_REGCACHE_SYNC_OUT(); return; L_088908B4: @@ -1994,7 +2066,17 @@ L_088908B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088908D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25560))); @@ -2036,7 +2118,6 @@ L_08890910: AOT_REGCACHE_SYNC_OUT(); return; L_08890940: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08890950; } @@ -2061,7 +2142,17 @@ L_08890950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890970: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(128), std::bit_cast(aot_fpr_12)); jump_target = aot_gpr_31; @@ -2069,28 +2160,68 @@ L_08890970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889097C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890984: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(96)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889098C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25560))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890994: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[7] = (15872u << 16u); @@ -2231,7 +2362,17 @@ L_08890994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890BB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), std::bit_cast(aot_fpr_20)); @@ -2374,7 +2515,17 @@ L_08890D80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890DC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8416))); { const bool branch_taken = aot_gpr_4 == 0u; @@ -2414,11 +2565,20 @@ L_08890DCC: goto L_08890E34; L_08890E34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890E3C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load_word_right(aot_gpr_6 + static_cast(1), ctx.gpr[8])); @@ -2454,7 +2614,17 @@ L_08890E3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890EE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2487,7 +2657,6 @@ L_08890F0C: goto L_08890F18; L_08890F18: aot_gpr_31 = (0x08890F20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08890F20u) goto L_08890F20; AOT_REGCACHE_SYNC_OUT(); return; L_08890F20: @@ -2495,7 +2664,6 @@ L_08890F20: goto L_08890F24; L_08890F24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08890F34; } @@ -2518,7 +2686,17 @@ L_08890F34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08890F48: aot_gpr_29 = (aot_gpr_29 + static_cast(-464)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25560), aot_gpr_4); @@ -2725,9 +2903,7 @@ L_08891154: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8408), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088911CC; } @@ -3124,7 +3300,6 @@ L_08891430: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8412), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0889147Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889147Cu) goto L_0889147C; AOT_REGCACHE_SYNC_OUT(); return; L_0889147C: @@ -3153,7 +3328,6 @@ L_0889147C: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8416), static_cast(aot_gpr_4)); aot_gpr_31 = (0x088914E4u); - // nop goto L_08890DC0; L_088914E4: aot_gpr_4 = (22016u << 16u); @@ -3266,7 +3440,6 @@ L_08891648: L_0889164C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889166C; } @@ -3275,7 +3448,6 @@ L_0889164C: L_08891658: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889166C; } @@ -3308,7 +3480,17 @@ L_0889166C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088916A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -3348,7 +3530,17 @@ L_08891704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891710: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3402,11 +3594,20 @@ L_08891710: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891738: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -3419,7 +3620,6 @@ L_08891738: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088918C0; } @@ -3439,7 +3639,6 @@ L_08891770: L_08891788: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088918C0; } @@ -3452,7 +3651,6 @@ L_08891794: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088918C0; } @@ -3517,7 +3715,6 @@ L_08891824: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088918BC; } @@ -3529,7 +3726,6 @@ L_0889184C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088918BC; } @@ -3542,7 +3738,6 @@ L_08891864: AOT_REGCACHE_SYNC_OUT(); return; L_0889186C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088918BC; } @@ -3554,7 +3749,6 @@ L_08891874: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088918BC; } @@ -3566,7 +3760,6 @@ L_0889188C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088918BC; } @@ -3578,7 +3771,6 @@ L_088918A4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088918C0; } @@ -3601,7 +3793,17 @@ L_088918C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088918DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); @@ -3617,7 +3819,17 @@ L_088918F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088918FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3639,7 +3851,6 @@ L_08891918: L_08891920: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08891934; } @@ -3662,7 +3873,17 @@ L_08891934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891948: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -3674,11 +3895,20 @@ L_08891948: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891974: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3697,7 +3927,17 @@ L_0889198C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088919A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -3768,7 +4008,17 @@ L_088919A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088919FC: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8420), static_cast(0u)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8421), static_cast(0u)); @@ -3785,7 +4035,17 @@ L_088919FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891A2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3804,7 +4064,6 @@ L_08891A2C: } L_08891A54: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08891A74; } @@ -3823,7 +4082,6 @@ L_08891A6C: goto L_08891A74; L_08891A74: { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08891A88; } @@ -3839,7 +4097,6 @@ L_08891A88: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08891B04; } @@ -3954,7 +4211,6 @@ L_08891B60: goto L_08891B68; L_08891B68: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08891B78; } @@ -3977,7 +4233,17 @@ L_08891B78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891B8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4029,7 +4295,6 @@ L_08891BDC: L_08891BF8: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08891C50; } @@ -4047,7 +4312,6 @@ L_08891C04: L_08891C10: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08891C30; } @@ -4071,7 +4335,6 @@ L_08891C30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 61u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08891C50; } @@ -4079,7 +4342,6 @@ L_08891C30: } L_08891C40: aot_gpr_31 = (0x08891C48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 441u, 0x089AA5B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08891C48u) goto L_08891C48; AOT_REGCACHE_SYNC_OUT(); return; L_08891C48: @@ -4096,7 +4358,6 @@ L_08891C50: } L_08891C58: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08891C70; } @@ -4114,7 +4375,6 @@ L_08891C70: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08891D44; } @@ -4128,7 +4388,6 @@ L_08891C84: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08891D2C; } @@ -4167,7 +4426,6 @@ L_08891CDC: L_08891CE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08891CF8; } @@ -4179,7 +4437,6 @@ L_08891CF0: goto L_08891CF8; L_08891CF8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08891D08; } @@ -4191,7 +4448,6 @@ L_08891D00: goto L_08891D08; L_08891D08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08891D18; } @@ -4199,12 +4455,10 @@ L_08891D08: } L_08891D10: aot_gpr_31 = (0x08891D18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 595u, 0x08807CB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08891D18u) goto L_08891D18; AOT_REGCACHE_SYNC_OUT(); return; L_08891D18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08891D24; } @@ -4215,7 +4469,6 @@ L_08891D20: goto L_08891D24; L_08891D24: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08891CA4; } @@ -4294,7 +4547,6 @@ L_08891DA4: goto L_08891DAC; L_08891DAC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08891DBC; } @@ -4318,7 +4570,17 @@ L_08891DBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891DD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[19]); @@ -4370,7 +4632,6 @@ L_08891E58: } L_08891E70: aot_gpr_31 = (0x08891E78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08891E78u) goto L_08891E78; AOT_REGCACHE_SYNC_OUT(); return; L_08891E78: @@ -4509,7 +4770,17 @@ L_08891FA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08891FDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -4532,7 +4803,6 @@ L_0889203C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); goto L_08892064; @@ -4579,7 +4849,6 @@ L_08892064: AOT_REGCACHE_SYNC_OUT(); return; L_088920B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0889210C; } @@ -4637,7 +4906,6 @@ L_088920C0: } L_08892104: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892118; } @@ -4657,7 +4925,6 @@ L_08892114: L_08892118: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08892160; } @@ -4696,7 +4963,6 @@ L_08892124: } L_08892158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889225C; } @@ -4773,7 +5039,6 @@ L_0889217C: AOT_REGCACHE_SYNC_OUT(); return; L_088921C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08892248; } @@ -4789,7 +5054,6 @@ L_088921CC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), std::bit_cast(aot_fpr_14)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); goto L_08892204; @@ -4820,7 +5084,6 @@ L_08892204: goto L_08891DD4; L_08892238: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08892248; } @@ -4839,7 +5102,6 @@ L_08892248: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889217C; } @@ -4868,7 +5130,6 @@ L_0889225C: goto L_08891DD4; L_088922A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088922DC; } @@ -4891,7 +5152,6 @@ L_088922B0: } L_088922D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088923BC; } @@ -4973,7 +5233,6 @@ L_088922FC: goto L_08891DD4; L_08892364: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088923A0; } @@ -4984,9 +5243,7 @@ L_0889236C: aot_fpr_12 = aot_fpr_12 - ctx.fpr[22]; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08892398; } @@ -5023,7 +5280,6 @@ L_088923A8: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088922FC; } @@ -5055,7 +5311,17 @@ L_088923C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08892400: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), std::bit_cast(aot_fpr_20)); @@ -5315,7 +5581,17 @@ L_08892668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088926A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[10] = (ctx.gpr[8] << 16u); @@ -5384,7 +5660,6 @@ L_088926D4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08892718; } @@ -5418,9 +5693,7 @@ L_08892718: goto L_08892728; L_08892728: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889276C; } @@ -5430,7 +5703,6 @@ L_08892738: ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[2] = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0889276C; } @@ -5438,7 +5710,6 @@ L_08892738: } L_08892748: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08892760; } @@ -5457,7 +5728,6 @@ L_08892760: goto L_0889276C; L_0889276C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088926C0; } @@ -5469,7 +5739,17 @@ L_08892774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889277C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[21]); @@ -5549,7 +5829,6 @@ L_08892834: } L_08892840: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_088928AC; } @@ -5557,7 +5836,6 @@ L_08892840: } L_08892848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892950; } @@ -5594,7 +5872,6 @@ L_08892880: } L_0889288C: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_088928AC; } @@ -5602,7 +5879,6 @@ L_0889288C: } L_08892894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892950; } @@ -5610,7 +5886,6 @@ L_08892894: } L_0889289C: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088928AC; } @@ -5618,7 +5893,6 @@ L_0889289C: } L_088928A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892950; } @@ -5665,7 +5939,6 @@ L_088928AC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088928F0; } @@ -5699,9 +5972,7 @@ L_088928F0: goto L_08892900; L_08892900: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08892950; } @@ -5711,7 +5982,6 @@ L_08892910: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08892948; } @@ -5719,7 +5989,6 @@ L_08892910: } L_08892920: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08892938; } @@ -5743,7 +6012,6 @@ L_08892938: } L_08892948: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892958; } @@ -5751,7 +6019,6 @@ L_08892948: } L_08892950: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088927E8; } @@ -5777,7 +6044,17 @@ L_08892958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889298C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[11] = (ctx.gpr[9] << 16u); @@ -5854,7 +6131,6 @@ L_088929D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08892A0C; } @@ -5888,9 +6164,7 @@ L_08892A0C: goto L_08892A1C; L_08892A1C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08892A6C; } @@ -5900,7 +6174,6 @@ L_08892A2C: ctx.gpr[3] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(0)))))); ctx.gpr[3] = (static_cast(ctx.gpr[3]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08892A64; } @@ -5908,7 +6181,6 @@ L_08892A2C: } L_08892A3C: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08892A54; } @@ -5932,7 +6204,6 @@ L_08892A54: } L_08892A64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892A74; } @@ -5940,7 +6211,6 @@ L_08892A64: } L_08892A6C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088929AC; } @@ -5952,7 +6222,17 @@ L_08892A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08892A7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[10] = (ctx.gpr[8] << 16u); @@ -6020,7 +6300,6 @@ L_08892AAC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08892AF8; } @@ -6065,9 +6344,7 @@ L_08892B10: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); aot_fpr_14 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08892B7C; } @@ -6077,7 +6354,6 @@ L_08892B3C: ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[2] = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08892B74; } @@ -6085,7 +6361,6 @@ L_08892B3C: } L_08892B4C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08892B64; } @@ -6109,7 +6384,6 @@ L_08892B64: } L_08892B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892B84; } @@ -6117,7 +6391,6 @@ L_08892B74: } L_08892B7C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08892A98; } @@ -6129,7 +6402,17 @@ L_08892B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08892B8C: ctx.gpr[8] = (ctx.gpr[8] << 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -6165,7 +6448,6 @@ L_08892BB0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[12] = (ctx.gpr[3] << 2u); if (branch_taken) { @@ -6181,7 +6463,6 @@ L_08892BF0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[12] = (ctx.gpr[3] << 2u); if (branch_taken) { @@ -6198,7 +6479,6 @@ L_08892C18: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(12))); aot_fpr_14 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[12] = (ctx.gpr[3] << 2u); if (branch_taken) { @@ -6214,7 +6494,6 @@ L_08892C44: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[12] = (ctx.gpr[3] << 2u); if (branch_taken) { @@ -6231,7 +6510,6 @@ L_08892C6C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(12))); aot_fpr_14 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[11] = (ctx.gpr[3] << 2u); if (branch_taken) { @@ -6247,9 +6525,7 @@ L_08892C98: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08892CFC; } @@ -6259,7 +6535,6 @@ L_08892CC0: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[2] = (static_cast(ctx.gpr[11]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08892CF4; } @@ -6267,7 +6542,6 @@ L_08892CC0: } L_08892CD0: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08892CE8; } @@ -6290,7 +6564,6 @@ L_08892CE8: } L_08892CF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892D04; } @@ -6298,7 +6571,6 @@ L_08892CF4: } L_08892CFC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08892B9C; } @@ -6306,11 +6578,20 @@ L_08892CFC: } L_08892D04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08892D0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(108), ctx.gpr[17]); @@ -6442,7 +6723,6 @@ L_08892D78: AOT_REGCACHE_SYNC_OUT(); return; L_08892DFC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08892E44; } @@ -6452,7 +6732,6 @@ L_08892E04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08892E3C; } @@ -6460,7 +6739,6 @@ L_08892E04: } L_08892E14: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08892E2C; } @@ -6484,7 +6762,6 @@ L_08892E2C: } L_08892E3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08892E4C; } @@ -6492,7 +6769,6 @@ L_08892E3C: } L_08892E44: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08892D64; } @@ -6517,7 +6793,17 @@ L_08892E4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08892E7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), ctx.gpr[21]); @@ -6681,7 +6967,6 @@ L_08893010: } L_08893018: aot_gpr_31 = (0x08893020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08893020u) goto L_08893020; AOT_REGCACHE_SYNC_OUT(); return; L_08893020: @@ -6715,7 +7000,6 @@ L_08893060: ctx.gpr[18] = (aot_gpr_5 | 0u); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088931B4; } @@ -6765,7 +7049,6 @@ L_088930C0: L_088930E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08893144; } @@ -6798,7 +7081,6 @@ L_0889311C: L_08893144: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088931A0; } @@ -6873,7 +7155,17 @@ L_088931D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08893208: ctx.gpr[2] = (ctx.gpr[11] | 0u); ctx.gpr[11] = (ctx.gpr[8] << 16u); @@ -6913,7 +7205,6 @@ L_0889323C: L_08893248: ctx.gpr[13] = (aot_mem.aot_direct_load8(ctx.gpr[3] + static_cast(612))); { const bool branch_taken = ctx.gpr[13] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08893288; } @@ -6929,7 +7220,6 @@ L_08893254: } L_0889325C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08893278; } @@ -6938,7 +7228,6 @@ L_0889325C: L_08893264: ctx.gpr[13] = (aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(2276))); { const bool branch_taken = ctx.gpr[13] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08893288; } @@ -6955,7 +7244,6 @@ L_08893270: L_08893278: ctx.gpr[13] = (aot_mem.aot_direct_load8(ctx.gpr[3] + static_cast(476))); { const bool branch_taken = ctx.gpr[13] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08893288; } @@ -6966,7 +7254,6 @@ L_08893284: goto L_08893288; L_08893288: { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_088933D8; } @@ -6985,7 +7272,6 @@ L_08893290: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[15] = (ctx.gpr[14] << 2u); if (branch_taken) { @@ -7001,7 +7287,6 @@ L_088932CC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[15] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[15] = (ctx.gpr[14] << 2u); if (branch_taken) { @@ -7018,7 +7303,6 @@ L_088932F4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[15] + static_cast(12))); aot_fpr_14 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[15] = (ctx.gpr[14] << 2u); if (branch_taken) { @@ -7034,7 +7318,6 @@ L_08893320: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[15] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[15] = (ctx.gpr[14] << 2u); if (branch_taken) { @@ -7051,7 +7334,6 @@ L_08893348: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(12))); aot_fpr_14 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[12] = (ctx.gpr[14] << 2u); if (branch_taken) { @@ -7067,9 +7349,7 @@ L_08893374: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088933D8; } @@ -7079,7 +7359,6 @@ L_0889339C: ctx.gpr[12] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[13] = (static_cast(ctx.gpr[12]) < static_cast(ctx.gpr[11]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[13] == 0u; - // nop if (branch_taken) { goto L_088933D0; } @@ -7087,7 +7366,6 @@ L_0889339C: } L_088933AC: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088933C4; } @@ -7110,7 +7388,6 @@ L_088933C4: } L_088933D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088933E0; } @@ -7118,7 +7395,6 @@ L_088933D0: } L_088933D8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08893228; } @@ -7126,11 +7402,20 @@ L_088933D8: } L_088933E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088933E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); @@ -7156,7 +7441,6 @@ L_088933E8: goto L_08891DD4; L_0889343C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08893450; } @@ -7181,7 +7465,17 @@ L_08893454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08893460: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; @@ -7206,7 +7500,6 @@ L_08893460: goto L_08891DD4; L_088934B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088934D0; } @@ -7214,7 +7507,6 @@ L_088934B4: } L_088934BC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088934C8; } @@ -7233,7 +7525,6 @@ L_088934C8: } L_088934D0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088934E0; } @@ -7254,7 +7545,17 @@ L_088934E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088934F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; @@ -7279,7 +7580,6 @@ L_088934F4: goto L_08891DD4; L_08893548: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08893568; } @@ -7287,7 +7587,6 @@ L_08893548: } L_08893550: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889355C; } @@ -7307,7 +7606,6 @@ L_0889355C: } L_08893568: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08893578; } @@ -7328,7 +7626,17 @@ L_0889357C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889358C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7356,7 +7664,6 @@ L_088935C8: goto L_088935D4; L_088935D4: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_088935EC; } @@ -7401,7 +7708,6 @@ L_08893610: L_08893614: ctx.gpr[19] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08893644; } @@ -7409,7 +7715,6 @@ L_08893614: } L_08893620: { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08893644; } @@ -7424,7 +7729,6 @@ L_08893628: L_08893634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08893644; } @@ -7463,7 +7767,6 @@ L_0889366C: goto L_0889367C; L_0889367C: { const bool branch_taken = static_cast(ctx.gpr[21]) < 0; - // nop if (branch_taken) { goto L_08893694; } @@ -7508,7 +7811,6 @@ L_088936B8: L_088936BC: ctx.gpr[20] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088936F8; } @@ -7516,7 +7818,6 @@ L_088936BC: } L_088936C8: { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_088936F8; } @@ -7570,7 +7871,6 @@ L_08893720: goto L_08893730; L_08893730: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08893748; } @@ -7615,7 +7915,6 @@ L_0889376C: L_08893770: aot_gpr_5 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08893790; } @@ -7623,7 +7922,6 @@ L_08893770: } L_0889377C: { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08893790; } @@ -7663,7 +7961,17 @@ L_088937A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088937CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[17]); @@ -7709,7 +8017,6 @@ L_08893838: goto L_0889386C; L_0889386C: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08893884; } @@ -7753,7 +8060,6 @@ L_088938A8: goto L_088938AC; L_088938AC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08893984; } @@ -7762,7 +8068,6 @@ L_088938AC: L_088938B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08893984; } @@ -7775,7 +8080,6 @@ L_088938C0: AOT_REGCACHE_SYNC_OUT(); return; L_088938C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08893984; } @@ -7784,7 +8088,6 @@ L_088938C8: L_088938D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1712))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08893984; } @@ -7804,7 +8107,6 @@ L_088938EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893904; @@ -7812,9 +8114,7 @@ L_088938EC: goto L_08893904; L_08893904: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893984; } @@ -7825,7 +8125,6 @@ L_08893914: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893930; @@ -7833,9 +8132,7 @@ L_08893914: goto L_08893930; L_08893930: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893984; } @@ -7845,7 +8142,6 @@ L_08893940: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893958; @@ -7853,9 +8149,7 @@ L_08893940: goto L_08893958; L_08893958: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893984; } @@ -7907,7 +8201,17 @@ L_08893998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088939E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[17]); @@ -7951,7 +8255,6 @@ L_08893A4C: goto L_08893A78; L_08893A78: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08893A90; } @@ -7995,7 +8298,6 @@ L_08893AB4: goto L_08893AB8; L_08893AB8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08893BBC; } @@ -8004,7 +8306,6 @@ L_08893AB8: L_08893AC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08893BBC; } @@ -8017,7 +8318,6 @@ L_08893ACC: AOT_REGCACHE_SYNC_OUT(); return; L_08893AD4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08893BBC; } @@ -8026,7 +8326,6 @@ L_08893AD4: L_08893ADC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1712))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08893BBC; } @@ -8047,7 +8346,6 @@ L_08893AF8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893B14; @@ -8055,9 +8353,7 @@ L_08893AF8: goto L_08893B14; L_08893B14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893BBC; } @@ -8067,7 +8363,6 @@ L_08893B24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893B3C; @@ -8075,9 +8370,7 @@ L_08893B24: goto L_08893B3C; L_08893B3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893BBC; } @@ -8087,7 +8380,6 @@ L_08893B4C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893B64; @@ -8095,9 +8387,7 @@ L_08893B4C: goto L_08893B64; L_08893B64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893BBC; } @@ -8110,7 +8400,6 @@ L_08893B74: AOT_REGCACHE_SYNC_OUT(); return; L_08893B7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08893B9C; } @@ -8172,7 +8461,17 @@ L_08893BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08893C18: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[17]); @@ -8219,7 +8518,6 @@ L_08893C80: goto L_08893CB8; L_08893CB8: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08893CD0; } @@ -8263,7 +8561,6 @@ L_08893CF4: goto L_08893CF8; L_08893CF8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08893DBC; } @@ -8273,7 +8570,6 @@ L_08893D00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08893DBC; } @@ -8300,7 +8596,6 @@ L_08893D24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893D3C; @@ -8308,9 +8603,7 @@ L_08893D24: goto L_08893D3C; L_08893D3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893DBC; } @@ -8321,7 +8614,6 @@ L_08893D4C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893D68; @@ -8329,9 +8621,7 @@ L_08893D4C: goto L_08893D68; L_08893D68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893DBC; } @@ -8341,7 +8631,6 @@ L_08893D78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893D90; @@ -8349,9 +8638,7 @@ L_08893D78: goto L_08893D90; L_08893D90: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893DBC; } @@ -8402,7 +8689,17 @@ L_08893DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08893E14: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[17]); @@ -8447,7 +8744,6 @@ L_08893E74: goto L_08893EA4; L_08893EA4: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08893EBC; } @@ -8501,7 +8797,6 @@ L_08893EEC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893F04; @@ -8509,9 +8804,7 @@ L_08893EEC: goto L_08893F04; L_08893F04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893F8C; } @@ -8522,7 +8815,6 @@ L_08893F14: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893F30; @@ -8530,9 +8822,7 @@ L_08893F14: goto L_08893F30; L_08893F30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893F8C; } @@ -8542,7 +8832,6 @@ L_08893F40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08893F58; @@ -8550,9 +8839,7 @@ L_08893F40: goto L_08893F58; L_08893F58: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08893F8C; } @@ -8603,7 +8890,17 @@ L_08893FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08893FDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), ctx.gpr[21]); diff --git a/profiles/vcs/generated/generated_unit_0036.cpp b/profiles/vcs/generated/generated_unit_0036.cpp index 6bbefcd..4860d13 100644 --- a/profiles/vcs/generated/generated_unit_0036.cpp +++ b/profiles/vcs/generated/generated_unit_0036.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0036[4086] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, - 6, 0, 0, 0, 0, 7, 0, 8, 9, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 0, - 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 27, 0, 28, 0, - 0, 0, 0, 29, 0, 30, 31, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 38, 0, 39, 0, 40, 0, 0, 41, 0, 42, 0, 43, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 50, 0, 51, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, - 0, 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 59, 0, 60, 0, 61, 0, 0, 0, 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 65, 0, 66, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, - 70, 0, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 76, 0, 0, 77, 0, 0, 78, 0, 0, 0, 79, 0, 0, 80, 0, 0, - 81, 0, 82, 0, 0, 0, 0, 83, 0, 84, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 91, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, - 0, 0, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, - 106, 0, 107, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 110, 0, 111, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 114, 0, 115, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, - 0, 119, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 125, 0, 126, 0, 0, - 127, 0, 128, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, 131, 0, 132, 0, 0, 133, 0, 134, 0, 0, 0, 135, 0, 0, 0, 0, 136, 0, 137, - 0, 138, 0, 0, 139, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 145, 0, 146, 0, 0, 0, - 147, 0, 148, 0, 0, 0, 0, 149, 0, 150, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, - 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 167, 0, 168, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, - 172, 173, 0, 174, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, - 179, 0, 180, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 183, 0, 184, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, - 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 203, 0, 204, 0, 205, 0, 206, - 0, 0, 0, 207, 0, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 215, - 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 222, 0, 223, 0, 224, 0, - 0, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 228, 0, 229, 0, 230, 0, 0, 231, 0, 232, 0, 233, 0, 0, 234, - 0, 235, 0, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 0, 241, 0, 242, 0, 243, 0, 244, 0, 0, 245, 0, 246, 0, 0, 0, 247, 0, - 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, - 0, 251, 0, 252, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 255, 0, 256, 257, 0, 258, 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 0, - 261, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 264, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, - 0, 0, 0, 0, 269, 0, 270, 0, 271, 272, 0, 273, 0, 0, 0, 274, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 277, 0, 0, 278, - 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, - 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 291, 0, 292, 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, - 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, 0, 0, 305, 0, 306, 0, 307, 0, 308, 0, - 309, 0, 310, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 0, 0, 0, 0, - 319, 0, 320, 0, 0, 0, 0, 0, 321, 0, 322, 0, 323, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 326, 0, 327, 0, 328, 0, - 329, 0, 330, 0, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 342, 0, 0, 343, 0, 344, 0, 345, - 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, - 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, - 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 358, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 361, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, - 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, - 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, - 0, 380, 0, 381, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 0, 390, 0, - 0, 0, 391, 0, 0, 0, 0, 392, 0, 0, 393, 394, 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 0, 400, - 0, 401, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 405, 0, 0, 0, 406, 407, 0, 408, 0, 409, 0, 410, 411, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 413, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 419, 0, 0, 0, - 420, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, - 426, 0, 427, 428, 0, 429, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, 0, 437, 0, 0, 0, 438, 0, 439, 0, 440, 0, 441, 442, 0, 0, 0, 443, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 449, - 0, 450, 0, 0, 0, 451, 452, 453, 0, 454, 0, 455, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 459, 0, 460, 0, 0, 0, 0, 461, 462, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, - 0, 0, 0, 465, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 469, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 472, 473, 0, 0, 0, 0, 0, 474, 0, 475, 0, 476, - 477, 0, 478, 0, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 486, 0, 0, 487, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, - 0, 490, 491, 0, 492, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, 495, 496, 0, 0, 0, 0, 497, 0, 498, 0, 0, 0, 0, 0, 0, 499, - 0, 500, 0, 0, 0, 501, 502, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, - 508, 0, 0, 509, 510, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 517, - 0, 0, 0, 0, 518, 0, 0, 519, 0, 0, 520, 0, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 525, 0, 526, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 529, 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 540, 0, 541, 542, 0, - 543, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 547, 0, 0, - 548, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 552, - 0, 553, 0, 0, 0, 554, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 558, 0, 559, 0, 560, 0, 0, 0, 561, 0, 562, 0, 563, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 568, 0, 569, 0, 0, 0, 570, 0, 571, 0, 0, 0, 572, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 575, 0, 576, 0, 0, 0, 577, - 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, - 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 590, 0, 0, 591, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 595, 0, 596, 0, 0, 0, 597, 0, 598, 0, 0, 599, 600, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 603, 0, 604, 0, 0, 0, 605, 0, 0, 0, 0, 606, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 609, 0, 0, 610, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 614, 0, 0, 0, - 615, 0, 616, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, - 0, 620, 0, 621, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 628, 0, 629, 0, 0, 0, 630, 0, 631, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 635, 0, 636, 0, 0, 0, 637, 0, 638, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 641, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 645, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 648, - 0, 0, 649, 0, 0, 650, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, - 0, 654, 0, 655, 0, 0, 0, 656, 0, 657, 0, 0, 658, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 663, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 668, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 672, 0, 673, 0, 0, 0, 674, 0, 675, 0, 0, 676, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 680, 0, 0, 0, 681, 0, 0, 0, 0, - 682, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, - 0, 687, 0, 688, 0, 0, 0, 689, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 693, 0, 694, 0, 695, 0, 0, 0, 696, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 699, 0, 0, 0, 700, 0, 701, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, - 705, 0, 0, 0, 0, 706, 707, 708, 0, 709, 0, 0, 0, 0, 0, 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, - 714, 0, 0, 0, 0, 715, 716, 717, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 720, 0, 721, 0, 722, 0, - 0, 723, 0, 0, 0, 724, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 727, 0, 0, 0, 728, - 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 0, 0, 732, 0, 0, 733, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 737, 0, 0, 0, 0, 738, 0, 739, - 740, 0, 741, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 744, 0, 745, 0, 0, 746, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 751, 0, 0, 0, 752, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, - 755, 0, 0, 0, 0, 0, 0, 0, 756, 0, 757, 0, 758, 0, 0, 759, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 767, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 769, 0, 770, 0, 0, 0, 0, 0, 771, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0036[64] = { + 0x2AA209A145000801ull, 0x1080000000100044ull, 0x5140004000020002ull, 0x054A845000208268ull, + 0x5222840000000040ull, 0x0705622808000420ull, 0x2449A14504000B40ull, 0x2040150102121285ull, + 0x0000004502954AA8ull, 0x2A2108421013428Bull, 0x00022052A114A425ull, 0x1015568516000002ull, + 0x428B020008A10842ull, 0x0005A1454001440Bull, 0x80000000001008A0ull, 0xAA22404480848084ull, + 0x8802004010002448ull, 0x5520820000100008ull, 0x452A9552952A2110ull, 0x088B428A10010001ull, + 0x90428B5042285101ull, 0x4000005104824120ull, 0x5505055550505050ull, 0x5414150505550505ull, + 0x4000000000020035ull, 0xA940201402010080ull, 0x0240240201280402ull, 0x0000002003201804ull, + 0x4020140201008040ull, 0x1008048040240201ull, 0x428204440002001Aull, 0x3562A006A8822C84ull, + 0x10A0811100000200ull, 0x800620AD80A80041ull, 0x9084440011AA2A00ull, 0x408614A000002AE2ull, + 0xA834400048010028ull, 0x8143111604A6AAA5ull, 0x8A140A1940A48062ull, 0x00000800A840A490ull, + 0x0048002400151000ull, 0x280100056A200090ull, 0x020008A2A0040011ull, 0x4515002000895150ull, + 0x480000828A801000ull, 0x0002400120009000ull, 0x0328A80100064880ull, 0x4920000084540080ull, + 0x8010002515002000ull, 0x0128A8010004908Aull, 0x000480000A2A0040ull, 0x8800002400120009ull, + 0x0800328A80100064ull, 0x0004920000084540ull, 0x08A8010002515002ull, 0x0400128A80100049ull, + 0x00000000080062A0ull, 0x082A02E108201510ull, 0x89000122550002E1ull, 0xA111100012240004ull, + 0x100044A000040015ull, 0x1000010004510000ull, 0x8A20000200089501ull, 0x0020A02200002000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0036[64] = { + 1u, 17u, 22u, 29u, 44u, 52u, 65u, 81u, 95u, 109u, 127u, 143u, 158u, 172u, 187u, 192u, + 207u, 216u, 225u, 248u, 261u, 279u, 289u, 309u, 329u, 335u, 346u, 356u, 363u, 371u, 380u, 391u, + 412u, 420u, 435u, 450u, 465u, 477u, 500u, 518u, 528u, 536u, 548u, 558u, 573u, 582u, 588u, 601u, + 611u, 620u, 633u, 641u, 649u, 661u, 670u, 682u, 693u, 699u, 714u, 729u, 740u, 749u, 755u, 766u, }; void recomp_unit_0036_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0036_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08894000u; - entry_id = (entry_delta < 16344u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0036[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16344u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0036[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0036[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08894000; @@ -972,7 +879,6 @@ L_0889402C: goto L_08894060; L_08894060: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08894078; } @@ -1017,7 +923,6 @@ L_0889409C: L_088940A0: aot_gpr_16 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088941F0; } @@ -1027,9 +932,7 @@ L_088940AC: aot_gpr_17 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088941F0; } @@ -1039,7 +942,6 @@ L_088940C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088940F4; } @@ -1052,7 +954,6 @@ L_088940D4: AOT_REGCACHE_SYNC_OUT(); return; L_088940DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088940F4; } @@ -1065,7 +966,6 @@ L_088940E4: AOT_REGCACHE_SYNC_OUT(); return; L_088940EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088941F0; } @@ -1240,7 +1140,17 @@ L_08894204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08894244: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), ctx.gpr[22]); @@ -1281,7 +1191,6 @@ L_08894298: goto L_088942D8; L_088942D8: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_088942F0; } @@ -1326,7 +1235,6 @@ L_08894314: L_08894318: aot_gpr_16 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08894514; } @@ -1336,9 +1244,7 @@ L_08894324: ctx.gpr[18] = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894514; } @@ -1350,7 +1256,6 @@ L_0889433C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08894398; } @@ -1396,7 +1301,6 @@ L_08894354: AOT_REGCACHE_SYNC_OUT(); return; L_08894390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894514; } @@ -1406,7 +1310,6 @@ L_08894398: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088943BC; } @@ -1417,7 +1320,6 @@ L_088943A8: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088943E8; } @@ -1425,12 +1327,10 @@ L_088943A8: } L_088943BC: ctx.gpr[31] = (0x088943C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088943C4u) goto L_088943C4; AOT_REGCACHE_SYNC_OUT(); return; L_088943C4: { const bool branch_taken = aot_gpr_17 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_088943E8; } @@ -1439,7 +1339,6 @@ L_088943C4: L_088943CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088944C4; } @@ -1452,7 +1351,6 @@ L_088943D8: AOT_REGCACHE_SYNC_OUT(); return; L_088943E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088944C4; } @@ -1577,7 +1475,6 @@ L_088944A8: AOT_REGCACHE_SYNC_OUT(); return; L_088944BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894514; } @@ -1587,7 +1484,6 @@ L_088944C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088944E4; } @@ -1597,7 +1493,6 @@ L_088944D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08894514; } @@ -1611,7 +1506,6 @@ L_088944E4: AOT_REGCACHE_SYNC_OUT(); return; L_088944F0: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08894514; } @@ -1664,7 +1558,17 @@ L_08894528: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889456C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -1673,7 +1577,6 @@ L_0889456C: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088945C0; } @@ -1744,7 +1647,6 @@ L_088945E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08894620; } @@ -1767,7 +1669,17 @@ L_08894624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889462C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -1793,7 +1705,6 @@ L_08894668: goto L_08894680; L_08894680: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08894698; } @@ -1838,7 +1749,6 @@ L_088946BC: L_088946C0: aot_gpr_5 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08894730; } @@ -1847,7 +1757,6 @@ L_088946C0: L_088946CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08894730; } @@ -1857,7 +1766,6 @@ L_088946D8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1653)))))); aot_gpr_5 = (aot_gpr_5 & 7u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08894730; } @@ -1866,7 +1774,6 @@ L_088946D8: L_088946E8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1656))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08894730; } @@ -1883,7 +1790,6 @@ L_088946F4: } L_08894700: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08894730; } @@ -1894,7 +1800,6 @@ L_08894708: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1656))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(668), aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08894730; } @@ -1928,7 +1833,6 @@ L_08894730: L_08894744: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088947A8; } @@ -1964,7 +1868,6 @@ L_08894780: AOT_REGCACHE_SYNC_OUT(); return; L_088947A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088947B0; } @@ -1992,7 +1895,17 @@ L_088947B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088947D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2012,7 +1925,6 @@ L_088947F4: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889481C; } @@ -2020,7 +1932,6 @@ L_088947F4: } L_0889480C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894850; } @@ -2028,7 +1939,6 @@ L_0889480C: } L_08894814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894888; } @@ -2036,12 +1946,10 @@ L_08894814: } L_0889481C: ctx.gpr[31] = (0x08894824u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08894824u) goto L_08894824; AOT_REGCACHE_SYNC_OUT(); return; L_08894824: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08894840; } @@ -2055,7 +1963,6 @@ L_0889482C: AOT_REGCACHE_SYNC_OUT(); return; L_08894838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894848; } @@ -2068,7 +1975,6 @@ L_08894840: AOT_REGCACHE_SYNC_OUT(); return; L_08894848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894888; } @@ -2082,7 +1988,6 @@ L_08894850: AOT_REGCACHE_SYNC_OUT(); return; L_0889485C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08894880; } @@ -2102,7 +2007,6 @@ L_08894864: AOT_REGCACHE_SYNC_OUT(); return; L_08894880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08894848; } @@ -2116,7 +2020,17 @@ L_08894888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08894898: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -2142,7 +2056,6 @@ L_08894900: goto L_08894904; L_08894904: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0889491C; } @@ -2187,7 +2100,6 @@ L_08894940: L_08894944: ctx.gpr[22] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08894AB4; } @@ -2210,9 +2122,7 @@ L_08894950: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894AB4; } @@ -2221,9 +2131,7 @@ L_08894950: L_08894970: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894AB4; } @@ -2232,9 +2140,7 @@ L_08894970: L_08894984: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894AB4; } @@ -2243,9 +2149,7 @@ L_08894984: L_08894998: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894AB4; } @@ -2254,9 +2158,7 @@ L_08894998: L_088949AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894AB4; } @@ -2265,9 +2167,7 @@ L_088949AC: L_088949C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894AB4; } @@ -2277,7 +2177,6 @@ L_088949D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08894AB4; } @@ -2290,7 +2189,6 @@ L_088949E4: AOT_REGCACHE_SYNC_OUT(); return; L_088949EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08894AB4; } @@ -2299,7 +2197,6 @@ L_088949EC: L_088949F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08894A14; } @@ -2321,7 +2218,6 @@ L_08894A14: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08894A74; } @@ -2335,7 +2231,6 @@ L_08894A28: AOT_REGCACHE_SYNC_OUT(); return; L_08894A34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08894A60; } @@ -2364,7 +2259,6 @@ L_08894A60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08894A28; } @@ -2388,7 +2282,6 @@ L_08894A84: AOT_REGCACHE_SYNC_OUT(); return; L_08894A90: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08894AB4; } @@ -2439,7 +2332,17 @@ L_08894AC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08894B04: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -2465,7 +2368,6 @@ L_08894B64: goto L_08894B68; L_08894B68: { const bool branch_taken = static_cast(aot_gpr_17) < 0; - // nop if (branch_taken) { goto L_08894B80; } @@ -2509,7 +2411,6 @@ L_08894BA4: goto L_08894BA8; L_08894BA8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08894C5C; } @@ -2522,7 +2423,6 @@ L_08894BB0: AOT_REGCACHE_SYNC_OUT(); return; L_08894BB8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08894C5C; } @@ -2535,7 +2435,6 @@ L_08894BC0: AOT_REGCACHE_SYNC_OUT(); return; L_08894BC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08894C5C; } @@ -2558,9 +2457,7 @@ L_08894BD0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894C5C; } @@ -2569,9 +2466,7 @@ L_08894BD0: L_08894BF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894C5C; } @@ -2580,9 +2475,7 @@ L_08894BF0: L_08894C04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894C5C; } @@ -2591,9 +2484,7 @@ L_08894C04: L_08894C18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894C5C; } @@ -2602,9 +2493,7 @@ L_08894C18: L_08894C2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894C5C; } @@ -2613,9 +2502,7 @@ L_08894C2C: L_08894C40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894C5C; } @@ -2657,7 +2544,17 @@ L_08894C6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08894CA4: ctx.gpr[7] = (aot_gpr_4 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); @@ -2676,7 +2573,6 @@ L_08894CC0: goto L_08894CC4; L_08894CC4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08894CDC; } @@ -2720,7 +2616,6 @@ L_08894D00: goto L_08894D04; L_08894D04: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08894D28; } @@ -2747,11 +2642,20 @@ L_08894D28: } L_08894D38: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08894D40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -2773,7 +2677,6 @@ L_08894D78: goto L_08894D80; L_08894D80: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08894D98; } @@ -2817,7 +2720,6 @@ L_08894DBC: goto L_08894DC0; L_08894DC0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08894E1C; } @@ -2840,9 +2742,7 @@ L_08894DC8: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08894E1C; } @@ -2850,7 +2750,6 @@ L_08894DC8: } L_08894E14: ctx.gpr[31] = (0x08894E1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 479u, 0x08B01C90u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08894E1Cu) goto L_08894E1C; AOT_REGCACHE_SYNC_OUT(); return; L_08894E1C: @@ -2879,7 +2778,17 @@ L_08894E2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08894E50: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -3032,7 +2941,6 @@ L_08894FE4: } L_08894FEC: ctx.gpr[31] = (0x08894FF4u); - // nop goto L_088954BC; L_08894FF4: aot_gpr_4 = (0u | 1u); @@ -3168,7 +3076,17 @@ L_0889510C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895150: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -3198,7 +3116,6 @@ L_088951BC: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(84))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088952F8; } @@ -3207,12 +3124,10 @@ L_088951BC: L_088951D4: aot_mem.aot_direct_store16(aot_gpr_17 + static_cast(84), static_cast(aot_gpr_4)); ctx.gpr[31] = (0x088951E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088951E0u) goto L_088951E0; AOT_REGCACHE_SYNC_OUT(); return; L_088951E0: { const bool branch_taken = aot_gpr_17 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_088952F8; } @@ -3225,7 +3140,6 @@ L_088951E8: AOT_REGCACHE_SYNC_OUT(); return; L_088951F0: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_088952F8; } @@ -3235,9 +3149,7 @@ L_088951F8: aot_gpr_4 = (aot_gpr_17 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088952F8; } @@ -3245,9 +3157,7 @@ L_088951F8: } L_08895210: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088952F8; } @@ -3256,9 +3166,7 @@ L_08895210: L_08895220: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088952F8; } @@ -3266,9 +3174,7 @@ L_08895220: } L_08895234: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088952F8; } @@ -3281,7 +3187,6 @@ L_08895244: AOT_REGCACHE_SYNC_OUT(); return; L_0889524C: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08895270; } @@ -3290,7 +3195,6 @@ L_0889524C: L_08895254: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1156))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088952F8; } @@ -3298,12 +3202,10 @@ L_08895254: } L_08895260: ctx.gpr[31] = (0x08895268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08895268u) goto L_08895268; AOT_REGCACHE_SYNC_OUT(); return; L_08895268: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088952F8; } @@ -3312,7 +3214,6 @@ L_08895268: L_08895270: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088952F8; } @@ -3320,7 +3221,6 @@ L_08895270: } L_0889527C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088952F8; } @@ -3329,7 +3229,6 @@ L_0889527C: L_08895284: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088952A0; } @@ -3337,7 +3236,6 @@ L_08895284: } L_08895290: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088952A0; } @@ -3345,7 +3243,6 @@ L_08895290: } L_08895298: { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_088952F8; } @@ -3358,7 +3255,6 @@ L_088952A0: AOT_REGCACHE_SYNC_OUT(); return; L_088952A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088952E8; } @@ -3367,7 +3263,6 @@ L_088952A8: L_088952B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_088952CC; } @@ -3380,7 +3275,6 @@ L_088952BC: AOT_REGCACHE_SYNC_OUT(); return; L_088952C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088952D4; } @@ -3399,7 +3293,6 @@ L_088952D4: AOT_REGCACHE_SYNC_OUT(); return; L_088952E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088952F8; } @@ -3414,7 +3307,6 @@ L_088952E8: AOT_REGCACHE_SYNC_OUT(); return; L_088952F8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088951BC; } @@ -3443,7 +3335,17 @@ L_08895300: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895340: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -3467,7 +3369,6 @@ L_08895370: goto L_08895384; L_08895384: { const bool branch_taken = static_cast(aot_gpr_17) < 0; - // nop if (branch_taken) { goto L_0889539C; } @@ -3511,7 +3412,6 @@ L_088953C0: goto L_088953C4; L_088953C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088953EC; } @@ -3521,7 +3421,6 @@ L_088953CC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088953EC; } @@ -3560,12 +3459,21 @@ L_08895400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895420: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25484))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08895438; } @@ -3588,16 +3496,24 @@ L_08895438: goto L_0889544C; L_0889544C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895454: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08895490; } @@ -3608,7 +3524,6 @@ L_08895464: aot_gpr_4 = (aot_gpr_4 + static_cast(-120)); aot_gpr_5 = (aot_gpr_4 < static_cast(34) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088954A0; } @@ -3620,11 +3535,20 @@ L_08895478: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-22992))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895490: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -3646,11 +3570,20 @@ L_088954A0: goto L_088954A4; L_088954A4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088954AC: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); @@ -3659,7 +3592,17 @@ L_088954AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088954BC: ctx.gpr[7] = (0u | 0u); aot_gpr_6 = (0u | 0u); @@ -3669,7 +3612,6 @@ L_088954C4: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088954F0; } @@ -3681,7 +3623,6 @@ L_088954D8: aot_mem.aot_direct_store16(ctx.gpr[8] + static_cast(84), static_cast(ctx.gpr[9])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088954D8; } @@ -3690,7 +3631,6 @@ L_088954D8: L_088954F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895514; } @@ -3702,7 +3642,6 @@ L_088954FC: aot_mem.aot_direct_store16(ctx.gpr[8] + static_cast(84), static_cast(ctx.gpr[9])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088954FC; } @@ -3711,7 +3650,6 @@ L_088954FC: L_08895514: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895538; } @@ -3723,7 +3661,6 @@ L_08895520: aot_mem.aot_direct_store16(ctx.gpr[8] + static_cast(84), static_cast(ctx.gpr[9])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08895520; } @@ -3732,7 +3669,6 @@ L_08895520: L_08895538: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889555C; } @@ -3744,7 +3680,6 @@ L_08895544: aot_mem.aot_direct_store16(ctx.gpr[8] + static_cast(84), static_cast(ctx.gpr[9])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08895544; } @@ -3753,7 +3688,6 @@ L_08895544: L_0889555C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895580; } @@ -3765,7 +3699,6 @@ L_08895568: aot_mem.aot_direct_store16(aot_gpr_5 + static_cast(84), static_cast(ctx.gpr[8])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08895568; } @@ -3783,11 +3716,20 @@ L_08895580: } L_08895590: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895598: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -3820,7 +3762,6 @@ L_088955F8: goto L_08895E44; L_08895610: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088956A0; } @@ -3836,7 +3777,6 @@ L_08895618: goto L_08895E44; L_08895630: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895698; } @@ -3852,7 +3792,6 @@ L_08895638: goto L_08895E44; L_08895650: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895690; } @@ -3868,7 +3807,6 @@ L_08895658: goto L_08895E44; L_08895670: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895688; } @@ -3876,7 +3814,6 @@ L_08895670: } L_08895678: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088956A8; } @@ -3884,7 +3821,6 @@ L_08895678: } L_08895680: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088956E8; } @@ -3932,7 +3868,6 @@ L_088956A8: goto L_08895E44; L_088956C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895700; } @@ -3948,7 +3883,6 @@ L_088956C8: goto L_08895E44; L_088956E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088956F8; } @@ -3956,7 +3890,6 @@ L_088956E0: } L_088956E8: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08895708; } @@ -3964,7 +3897,6 @@ L_088956E8: } L_088956F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08895748; } @@ -3996,7 +3928,6 @@ L_08895708: goto L_08895E44; L_08895720: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895760; } @@ -4012,7 +3943,6 @@ L_08895728: goto L_08895E44; L_08895740: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895758; } @@ -4020,7 +3950,6 @@ L_08895740: } L_08895748: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08895768; } @@ -4028,7 +3957,6 @@ L_08895748: } L_08895750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088957A8; } @@ -4060,7 +3988,6 @@ L_08895768: goto L_08895E44; L_08895780: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895810; } @@ -4076,7 +4003,6 @@ L_08895788: goto L_08895E44; L_088957A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08895808; } @@ -4084,7 +4010,6 @@ L_088957A0: } L_088957A8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08895800; } @@ -4100,7 +4025,6 @@ L_088957B0: goto L_08895E44; L_088957C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088957F8; } @@ -4116,7 +4040,6 @@ L_088957D0: goto L_08895E44; L_088957E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08895800; } @@ -4176,7 +4099,17 @@ L_08895814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895844: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4270,7 +4203,6 @@ L_08895964: AOT_REGCACHE_SYNC_OUT(); return; L_08895988: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088959D8; } @@ -4311,7 +4243,6 @@ L_088959D8: L_088959E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(9))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088959F4; } @@ -4323,7 +4254,6 @@ L_088959EC: goto L_088959F4; L_088959F4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08895A04; } @@ -4364,7 +4294,6 @@ L_08895A4C: L_08895A54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895AA8; } @@ -4397,7 +4326,6 @@ L_08895A84: L_08895AA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895AD8; } @@ -4456,9 +4384,7 @@ L_08895B30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08895B60; } @@ -4495,7 +4421,17 @@ L_08895B64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895B94: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4572,7 +4508,6 @@ L_08895C84: goto L_08896024; L_08895CA8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08895CF8; } @@ -4602,7 +4537,6 @@ L_08895CD4: goto L_08896024; L_08895CF8: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08895D48; } @@ -4633,7 +4567,6 @@ L_08895D24: L_08895D48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895D9C; } @@ -4664,7 +4597,6 @@ L_08895D78: L_08895D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895DF0; } @@ -4695,9 +4627,7 @@ L_08895DCC: L_08895DF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08895E0C; } @@ -4734,7 +4664,17 @@ L_08895E10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08895E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -4760,7 +4700,6 @@ L_08895E98: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4773,7 +4712,6 @@ L_08895EA8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08895EF8; } @@ -4785,7 +4723,6 @@ L_08895EC4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08895EF8; } @@ -4793,7 +4730,6 @@ L_08895EC4: } L_08895EDC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08895EF8; } @@ -4802,9 +4738,7 @@ L_08895EDC: L_08895EE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08895FE8; } @@ -4814,7 +4748,6 @@ L_08895EF8: aot_gpr_5 = (0u | 1u); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8072))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08895F2C; } @@ -4825,7 +4758,6 @@ L_08895F08: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08895F2C; } @@ -4834,7 +4766,6 @@ L_08895F08: L_08895F1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08895F2C; } @@ -4845,7 +4776,6 @@ L_08895F28: goto L_08895F2C; L_08895F2C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4855,7 +4785,6 @@ L_08895F34: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(84))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4867,7 +4796,6 @@ L_08895F44: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4877,7 +4805,6 @@ L_08895F5C: aot_mem.aot_direct_store16(ctx.gpr[21] + static_cast(84), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8068))); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4897,7 +4824,6 @@ L_08895F74: goto L_088961FC; L_08895F7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4948,7 +4874,6 @@ L_08895FD4: goto L_08895FD8; L_08895FD8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08895FE8; } @@ -4964,7 +4889,6 @@ L_08895FE0: } L_08895FE8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08895E98; } @@ -4992,7 +4916,17 @@ L_08895FF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08896024: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -5023,7 +4957,6 @@ L_08896090: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0889618C; } @@ -5036,7 +4969,6 @@ L_088960A0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088960F0; } @@ -5048,7 +4980,6 @@ L_088960BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088960F0; } @@ -5056,7 +4987,6 @@ L_088960BC: } L_088960D4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088960F0; } @@ -5065,9 +4995,7 @@ L_088960D4: L_088960DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889618C; } @@ -5077,7 +5005,6 @@ L_088960F0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(84))); aot_gpr_16 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_0889618C; } @@ -5089,7 +5016,6 @@ L_08896100: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889618C; } @@ -5143,7 +5069,6 @@ L_0889617C: goto L_08896180; L_08896180: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889618C; } @@ -5154,7 +5079,6 @@ L_08896188: goto L_0889618C; L_0889618C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08896090; } @@ -5168,9 +5092,7 @@ L_0889619C: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088961C4; } @@ -5209,7 +5131,17 @@ L_088961C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088961FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5233,7 +5165,6 @@ L_08896224: AOT_REGCACHE_SYNC_OUT(); return; L_0889622C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0889624C; } @@ -5243,7 +5174,6 @@ L_08896234: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(483)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889625C; } @@ -5284,7 +5214,17 @@ L_08896260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08896270: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -5292,7 +5232,6 @@ L_08896270: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25484), 0u); aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); ctx.gpr[31] = (0x088962A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088962A8u) goto L_088962A8; AOT_REGCACHE_SYNC_OUT(); return; L_088962A8: @@ -5316,7 +5255,6 @@ L_088962C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0889639C; } @@ -5327,7 +5265,6 @@ L_088962DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896324; } @@ -5366,7 +5303,6 @@ L_08896318: goto L_0889631C; L_0889631C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889639C; } @@ -5374,12 +5310,10 @@ L_0889631C: } L_08896324: ctx.gpr[31] = (0x0889632Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889632Cu) goto L_0889632C; AOT_REGCACHE_SYNC_OUT(); return; L_0889632C: { const bool branch_taken = ctx.gpr[2] == aot_gpr_17; - // nop if (branch_taken) { goto L_0889639C; } @@ -5409,7 +5343,6 @@ L_08896334: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-25484), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889639C; } @@ -5417,7 +5350,6 @@ L_08896334: } L_08896394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088963A8; } @@ -5426,7 +5358,6 @@ L_08896394: L_0889639C: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088962C8; } @@ -5455,7 +5386,6 @@ L_088963C8: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.gpr[11] = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_088963F8; } @@ -5483,7 +5413,6 @@ L_088963F8: } L_0889640C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088963B0; } @@ -5507,7 +5436,17 @@ L_08896414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08896440: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -5529,7 +5468,17 @@ L_0889646C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08896478: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -5540,7 +5489,6 @@ L_08896478: aot_gpr_16 = (aot_gpr_16 + static_cast(-28736)); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(11), static_cast(aot_gpr_4)); ctx.gpr[31] = (0x088964B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 530u, 0x0886A6D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088964B8u) goto L_088964B8; AOT_REGCACHE_SYNC_OUT(); return; L_088964B8: @@ -5555,7 +5503,6 @@ L_088964B8: } L_088964C8: ctx.gpr[31] = (0x088964D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088964D0u) goto L_088964D0; AOT_REGCACHE_SYNC_OUT(); return; L_088964D0: @@ -5567,7 +5514,6 @@ L_088964D4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08896508; } @@ -5575,7 +5521,6 @@ L_088964D4: } L_088964EC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896500; } @@ -5583,7 +5528,6 @@ L_088964EC: } L_088964F4: ctx.gpr[31] = (0x088964FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088964FCu) goto L_088964FC; AOT_REGCACHE_SYNC_OUT(); return; L_088964FC: @@ -5591,7 +5535,6 @@ L_088964FC: goto L_08896500; L_08896500: ctx.gpr[31] = (0x08896508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 93u, 0x0884C8F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08896508u) goto L_08896508; AOT_REGCACHE_SYNC_OUT(); return; L_08896508: @@ -5605,7 +5548,6 @@ L_08896508: } L_08896514: ctx.gpr[31] = (0x0889651Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889651Cu) goto L_0889651C; AOT_REGCACHE_SYNC_OUT(); return; L_0889651C: @@ -5615,22 +5557,18 @@ L_0889651C: AOT_REGCACHE_SYNC_OUT(); return; L_08896524: ctx.gpr[31] = (0x0889652Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 66u, 0x088807A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889652Cu) goto L_0889652C; AOT_REGCACHE_SYNC_OUT(); return; L_0889652C: ctx.gpr[31] = (0x08896534u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0010_entry, 10u, 62u, 0x0882C3C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08896534u) goto L_08896534; AOT_REGCACHE_SYNC_OUT(); return; L_08896534: ctx.gpr[31] = (0x0889653Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0010_entry, 10u, 93u, 0x0882C628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889653Cu) goto L_0889653C; AOT_REGCACHE_SYNC_OUT(); return; L_0889653C: ctx.gpr[31] = (0x08896544u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 867u, 0x089C7CE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08896544u) goto L_08896544; AOT_REGCACHE_SYNC_OUT(); return; L_08896544: @@ -5639,7 +5577,6 @@ L_08896544: L_08896548: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896588; } @@ -5653,7 +5590,6 @@ L_08896554: L_0889655C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896584; } @@ -5699,7 +5635,6 @@ L_088965B0: ctx.gpr[19] = (ctx.gpr[19] + ctx.gpr[18]); ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08896604; } @@ -5718,7 +5653,6 @@ L_088965C4: AOT_REGCACHE_SYNC_OUT(); return; L_088965D8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088965FC; } @@ -5748,7 +5682,6 @@ L_08896604: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25488))); ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08896680; } @@ -5766,7 +5699,6 @@ L_08896618: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896678; } @@ -5775,7 +5707,6 @@ L_08896618: L_0889663C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08896678; } @@ -5789,7 +5720,6 @@ L_08896648: AOT_REGCACHE_SYNC_OUT(); return; L_08896654: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08896678; } @@ -5818,7 +5748,6 @@ L_08896678: L_08896680: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088966D0; } @@ -5837,7 +5766,6 @@ L_08896690: AOT_REGCACHE_SYNC_OUT(); return; L_088966A4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088966C8; } @@ -5882,7 +5810,6 @@ L_088966EC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 2500 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088966EC; } @@ -5893,7 +5820,6 @@ L_088966FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889676C; } @@ -5908,7 +5834,6 @@ L_08896710: L_0889671C: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08896758; } @@ -5922,7 +5847,6 @@ L_08896728: AOT_REGCACHE_SYNC_OUT(); return; L_08896734: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08896758; } @@ -5945,7 +5869,6 @@ L_08896758: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896710; } @@ -5958,7 +5881,6 @@ L_0889676C: AOT_REGCACHE_SYNC_OUT(); return; L_08896774: ctx.gpr[31] = (0x0889677Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 49u, 0x08990290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889677Cu) goto L_0889677C; AOT_REGCACHE_SYNC_OUT(); return; L_0889677C: @@ -5980,7 +5902,17 @@ L_0889677C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088967AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -6023,7 +5955,6 @@ L_08896830: } L_08896840: ctx.gpr[31] = (0x08896848u); - // nop goto L_088954BC; L_08896848: aot_gpr_4 = (0u | 1u); @@ -6138,7 +6069,6 @@ L_08896964: goto L_0889696C; L_0889696C: { const bool branch_taken = aot_gpr_17 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08896988; } @@ -6149,7 +6079,6 @@ L_08896974: goto L_08896978; L_08896978: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088969F4; } @@ -6157,7 +6086,6 @@ L_08896978: } L_08896980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08896B38; } @@ -6195,7 +6123,6 @@ L_088969C0: goto L_08895598; L_088969EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897838; } @@ -6204,7 +6131,6 @@ L_088969EC: L_088969F4: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896A9C; } @@ -6214,7 +6140,6 @@ L_08896A00: aot_gpr_16 = (ctx.gpr[19] | 0u); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896A94; } @@ -6252,7 +6177,6 @@ L_08896A48: goto L_08895598; L_08896A74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08896A84; } @@ -6270,7 +6194,6 @@ L_08896A84: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896A10; } @@ -6278,7 +6201,6 @@ L_08896A84: } L_08896A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08896B30; } @@ -6288,7 +6210,6 @@ L_08896A9C: aot_gpr_16 = (ctx.gpr[19] | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896B30; } @@ -6326,7 +6247,6 @@ L_08896AE4: goto L_08895598; L_08896B10: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08896B20; } @@ -6344,7 +6264,6 @@ L_08896B20: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896AAC; } @@ -6360,7 +6279,6 @@ L_08896B30: } L_08896B38: { const bool branch_taken = aot_gpr_17 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08896C84; } @@ -6369,7 +6287,6 @@ L_08896B38: L_08896B40: aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896BE8; } @@ -6379,7 +6296,6 @@ L_08896B4C: aot_gpr_16 = (ctx.gpr[20] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896BE0; } @@ -6417,7 +6333,6 @@ L_08896B94: goto L_08895598; L_08896BC0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08896BD0; } @@ -6435,7 +6350,6 @@ L_08896BD0: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896B5C; } @@ -6443,7 +6357,6 @@ L_08896BD0: } L_08896BE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08896C7C; } @@ -6453,7 +6366,6 @@ L_08896BE8: aot_gpr_16 = (ctx.gpr[20] | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896C7C; } @@ -6491,7 +6403,6 @@ L_08896C30: goto L_08895598; L_08896C5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08896C6C; } @@ -6509,7 +6420,6 @@ L_08896C6C: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896BF8; } @@ -6527,9 +6437,7 @@ L_08896C84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889726C; } @@ -6678,7 +6586,6 @@ L_08896E1C: L_08896E2C: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896ED4; } @@ -6687,7 +6594,6 @@ L_08896E2C: L_08896E38: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896ECC; } @@ -6752,7 +6658,6 @@ L_08896EBC: goto L_08896ECC; L_08896ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08896F68; } @@ -6761,7 +6666,6 @@ L_08896ECC: L_08896ED4: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896F68; } @@ -6829,7 +6733,6 @@ L_08896F68: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897130; } @@ -6871,7 +6774,6 @@ L_08896FD4: L_08896FE0: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897088; } @@ -6880,7 +6782,6 @@ L_08896FE0: L_08896FEC: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897080; } @@ -6937,7 +6838,6 @@ L_08897070: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08896FF8; } @@ -6945,7 +6845,6 @@ L_08897070: } L_08897080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889711C; } @@ -6954,7 +6853,6 @@ L_08897080: L_08897088: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889711C; } @@ -7011,7 +6909,6 @@ L_0889710C: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897094; } @@ -7022,7 +6919,6 @@ L_0889711C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08896F7C; } @@ -7040,7 +6936,6 @@ L_08897130: L_0889713C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088971CC; } @@ -7078,7 +6973,6 @@ L_08897180: goto L_08895598; L_088971AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088971BC; } @@ -7096,7 +6990,6 @@ L_088971BC: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897148; } @@ -7104,7 +6997,6 @@ L_088971BC: } L_088971CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897264; } @@ -7113,7 +7005,6 @@ L_088971CC: L_088971D4: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897264; } @@ -7151,7 +7042,6 @@ L_08897218: goto L_08895598; L_08897244: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08897254; } @@ -7169,7 +7059,6 @@ L_08897254: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088971E0; } @@ -7177,7 +7066,6 @@ L_08897254: } L_08897264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897834; } @@ -7326,7 +7214,6 @@ L_088973EC: L_088973FC: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088974A4; } @@ -7335,7 +7222,6 @@ L_088973FC: L_08897408: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889749C; } @@ -7400,7 +7286,6 @@ L_0889748C: goto L_0889749C; L_0889749C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897538; } @@ -7409,7 +7294,6 @@ L_0889749C: L_088974A4: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897538; } @@ -7477,7 +7361,6 @@ L_08897538: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897700; } @@ -7519,7 +7402,6 @@ L_088975A4: L_088975B0: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897658; } @@ -7528,7 +7410,6 @@ L_088975B0: L_088975BC: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897650; } @@ -7585,7 +7466,6 @@ L_08897640: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088975C8; } @@ -7593,7 +7473,6 @@ L_08897640: } L_08897650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088976EC; } @@ -7602,7 +7481,6 @@ L_08897650: L_08897658: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088976EC; } @@ -7659,7 +7537,6 @@ L_088976DC: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897664; } @@ -7670,7 +7547,6 @@ L_088976EC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889754C; } @@ -7688,7 +7564,6 @@ L_08897700: L_0889770C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889779C; } @@ -7726,7 +7601,6 @@ L_08897750: goto L_08895598; L_0889777C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0889778C; } @@ -7744,7 +7618,6 @@ L_0889778C: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897718; } @@ -7752,7 +7625,6 @@ L_0889778C: } L_0889779C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897834; } @@ -7761,7 +7633,6 @@ L_0889779C: L_088977A4: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897834; } @@ -7799,7 +7670,6 @@ L_088977E8: goto L_08895598; L_08897814: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08897824; } @@ -7817,7 +7687,6 @@ L_08897824: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088977B0; } @@ -7846,7 +7715,17 @@ L_08897838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889786C: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -7897,7 +7776,6 @@ L_08897910: } L_08897920: ctx.gpr[31] = (0x08897928u); - // nop goto L_088954BC; L_08897928: aot_gpr_4 = (0u | 1u); @@ -7910,7 +7788,6 @@ L_08897930: aot_gpr_5 = (50454u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7922,7 +7799,6 @@ L_08897954: aot_gpr_5 = (17608u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (50426u << 16u); if (branch_taken) { @@ -7933,7 +7809,6 @@ L_08897954: L_0889796C: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (17658u << 16u); if (branch_taken) { @@ -7944,7 +7819,6 @@ L_0889796C: L_08897980: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7960,7 +7834,6 @@ L_08897998: goto L_0889799C; L_0889799C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088979CC; } @@ -7972,7 +7845,6 @@ L_088979A4: aot_gpr_5 = (50454u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8000,7 +7872,6 @@ L_088979D4: aot_gpr_5 = (17608u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (50426u << 16u); if (branch_taken) { @@ -8011,7 +7882,6 @@ L_088979D4: L_088979EC: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (17658u << 16u); if (branch_taken) { @@ -8022,7 +7892,6 @@ L_088979EC: L_08897A00: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -8038,7 +7907,6 @@ L_08897A18: goto L_08897A1C; L_08897A1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897A68; } @@ -8246,7 +8114,6 @@ L_08897BE0: goto L_08897BF4; L_08897BF4: { const bool branch_taken = aot_gpr_17 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08897C10; } @@ -8257,7 +8124,6 @@ L_08897BFC: goto L_08897C00; L_08897C00: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08897C9C; } @@ -8265,7 +8131,6 @@ L_08897C00: } L_08897C08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897E28; } @@ -8309,7 +8174,6 @@ L_08897C48: goto L_08895844; L_08897C94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0037_entry, 37u, 92u, 0x08898C70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8318,7 +8182,6 @@ L_08897C94: L_08897C9C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897D58; } @@ -8328,7 +8191,6 @@ L_08897CA8: aot_gpr_16 = (ctx.gpr[19] | 0u); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897D50; } @@ -8376,7 +8238,6 @@ L_08897D40: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897CB8; } @@ -8384,7 +8245,6 @@ L_08897D40: } L_08897D50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897E00; } @@ -8394,7 +8254,6 @@ L_08897D58: aot_gpr_16 = (ctx.gpr[19] | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897E00; } @@ -8442,7 +8301,6 @@ L_08897DF0: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897D68; } @@ -8454,7 +8312,6 @@ L_08897E00: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08897E20; @@ -8470,7 +8327,6 @@ L_08897E20: } L_08897E28: { const bool branch_taken = aot_gpr_17 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08897FBC; } @@ -8479,7 +8335,6 @@ L_08897E28: L_08897E30: aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897EEC; } @@ -8489,7 +8344,6 @@ L_08897E3C: aot_gpr_16 = (ctx.gpr[20] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897EE4; } @@ -8537,7 +8391,6 @@ L_08897ED4: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897E4C; } @@ -8545,7 +8398,6 @@ L_08897ED4: } L_08897EE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08897F94; } @@ -8555,7 +8407,6 @@ L_08897EEC: aot_gpr_16 = (ctx.gpr[20] | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08897F94; } @@ -8603,7 +8454,6 @@ L_08897F84: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08897EFC; } @@ -8615,7 +8465,6 @@ L_08897F94: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08897FB4; @@ -8633,9 +8482,7 @@ L_08897FBC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0037_entry, 37u, 46u, 0x08898614u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0037.cpp b/profiles/vcs/generated/generated_unit_0037.cpp index b224683..2748c7d 100644 --- a/profiles/vcs/generated/generated_unit_0037.cpp +++ b/profiles/vcs/generated/generated_unit_0037.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0037[4090] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 16, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 25, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 30, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 41, 0, 0, 42, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, - 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, 0, 62, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, - 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, - 69, 0, 0, 70, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, - 0, 81, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 86, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 91, 92, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 96, 0, 0, 0, 97, 0, 0, 98, - 0, 99, 100, 0, 101, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 107, 0, 0, 0, 0, - 0, 108, 0, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 0, 0, 114, 0, 115, 0, 116, 0, 117, 0, 0, 118, 0, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 121, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 0, 129, - 0, 0, 0, 0, 0, 130, 0, 131, 0, 132, 0, 0, 133, 0, 134, 135, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 138, 0, 139, 0, 140, 0, - 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, 147, 0, 148, 0, - 149, 0, 0, 0, 150, 0, 0, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, - 0, 0, 158, 0, 159, 0, 160, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 0, 0, 0, 167, - 0, 0, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, - 0, 176, 0, 177, 0, 178, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 0, 0, 0, 0, 185, 0, 0, 186, - 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 190, 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, 193, 0, 194, - 0, 195, 0, 196, 0, 197, 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 201, 0, 0, 202, 0, 203, 0, 0, 0, 0, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, - 0, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 215, 0, 216, 0, 0, 0, 0, - 0, 217, 0, 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, - 223, 0, 224, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 227, 0, 228, 0, 0, 229, 0, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, - 237, 0, 0, 0, 238, 239, 0, 0, 240, 0, 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 245, 0, 246, 0, - 247, 0, 0, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 0, 261, - 0, 262, 0, 263, 0, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 0, 0, 0, 269, 0, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, - 275, 0, 0, 276, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, - 0, 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, - 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, - 0, 0, 0, 299, 0, 0, 0, 300, 0, 301, 0, 302, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, - 0, 0, 0, 0, 307, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 311, 0, 0, 0, - 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, - 0, 317, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, - 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, - 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 0, 0, 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 0, 339, 0, 0, 0, 340, 0, - 341, 0, 342, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 0, - 348, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, - 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, - 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, - 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, - 0, 0, 0, 369, 0, 0, 370, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, - 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 378, 0, 379, 0, 380, 0, 381, 0, 0, 0, 0, 382, 0, 0, 0, 0, - 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, - 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, - 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, - 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, - 0, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 411, - 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, - 417, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, 421, 0, 422, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, - 0, 0, 0, 0, 426, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 440, 0, 0, 441, 0, 0, 0, 0, - 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, - 0, 450, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, - 456, 0, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, - 0, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 469, 0, - 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, - 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, - 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, - 485, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, - 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, - 0, 0, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 505, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 0, - 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, - 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, - 0, 524, 0, 0, 525, 0, 526, 0, 527, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, - 531, 0, 0, 532, 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 538, - 0, 0, 539, 0, 540, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, - 0, 546, 0, 547, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 553, - 0, 0, 0, 0, 0, 0, 0, 0, 554, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 560, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 564, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, - 0, 0, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 573, 0, 574, - 0, 575, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 0, 582, - 0, 0, 0, 0, 0, 583, 584, 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 588, 0, 589, 0, 590, 0, 0, 0, 591, 0, 0, 592, 0, 593, 594, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 596, 0, 0, 597, 0, 598, 0, 0, 0, 599, 0, 600, 0, 0, 0, 0, 601, 0, 602, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 0, 613, 0, 614, - 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 617, 0, 618, 619, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 625, 0, 0, 626, 0, 0, 627, 0, 628, 0, 0, 629, 0, 0, 630, 0, 0, 0, 0, 631, - 0, 0, 632, 0, 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 636, 0, 0, 0, 637, 0, 0, 638, 639, 0, 0, 0, 0, 640, 0, 641, 0, 0, - 642, 0, 643, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 646, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 649, - 0, 0, 0, 0, 650, 0, 651, 0, 652, 0, 653, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 660, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 663, - 0, 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 675, 676, 0, 0, - 0, 0, 677, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 680, 0, 0, 681, 0, 0, 0, 0, 0, 682, 683, 0, - 0, 0, 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, 690, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, - 696, 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 699, 700, 0, 701, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, - 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 0, 708, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0037[64] = { + 0x9000480024001201ull, 0x0000400092200000ull, 0x0084400004000944ull, 0xA200002000492000ull, + 0x0012422000020004ull, 0x800010004A200004ull, 0x4800240012000028ull, 0x4000922000009000ull, + 0x4000040009440000ull, 0x0020004920000084ull, 0x422000020004A200ull, 0x10004A2000040012ull, + 0x9128020018088000ull, 0x12A8AA820A410496ull, 0x5414D2A095505094ull, 0x4021551150520A40ull, + 0x41010AA88A829054ull, 0xA41520809055482Aull, 0x082AA0A40010122Aull, 0x41010A020A820228ull, + 0x4812820804A80105ull, 0x9555555154109131ull, 0xA00800A95548554Aull, 0x000000000040A150ull, + 0x4804480424021200ull, 0x1202021084082A88ull, 0x1012020280809010ull, 0x0000200100840090ull, + 0x0212010900000000ull, 0x0842041544240224ull, 0x9008048040240201ull, 0x0010084020120100ull, + 0x0424000000000002ull, 0x0855109008900848ull, 0x0809010101010842ull, 0x1012020240404808ull, + 0x0000000040020110ull, 0x2011201090084800ull, 0x408102108410AA21ull, 0x0902048102408120ull, + 0x0000000400402204ull, 0x0112021202120000ull, 0x4040421081055109ull, 0x8090101202024040ull, + 0x0010010184040480ull, 0x0900424000000000ull, 0x0042A21090042401ull, 0x4024024024020821ull, + 0x00900952012012AAull, 0x40240254804804A9ull, 0x004003008052012Aull, 0x0000000000284000ull, + 0xA822202820528048ull, 0x8902400040000022ull, 0x00000800D22A9160ull, 0xA4228000AAB428A4ull, + 0x8494952200013428ull, 0x8408620528645114ull, 0x0040000008002550ull, 0x0222222082081441ull, + 0x3008040200400400ull, 0x0154120860904014ull, 0x0101410000000400ull, 0x0241000228096025ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0037[64] = { + 1u, 10u, 15u, 23u, 31u, 38u, 45u, 53u, 60u, 66u, 73u, 81u, 89u, 99u, 119u, 141u, + 158u, 176u, 195u, 210u, 223u, 237u, 262u, 282u, 288u, 299u, 312u, 322u, 328u, 334u, 348u, 358u, + 365u, 369u, 383u, 393u, 403u, 407u, 417u, 431u, 442u, 447u, 456u, 470u, 480u, 488u, 493u, 505u, + 516u, 531u, 546u, 557u, 560u, 575u, 583u, 596u, 615u, 632u, 650u, 657u, 670u, 677u, 691u, 696u, }; void recomp_unit_0037_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0037_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08898000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0037[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0037[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0037[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08898000; @@ -1011,7 +918,6 @@ L_08898154: L_08898164: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898220; } @@ -1020,7 +926,6 @@ L_08898164: L_08898170: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898218; } @@ -1078,7 +983,6 @@ L_08898208: } L_08898218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088982C8; } @@ -1087,7 +991,6 @@ L_08898218: L_08898220: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088982C8; } @@ -1148,7 +1051,6 @@ L_088982C8: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088984B8; } @@ -1190,7 +1092,6 @@ L_08898334: L_08898340: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088983FC; } @@ -1199,7 +1100,6 @@ L_08898340: L_0889834C: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088983F4; } @@ -1257,7 +1157,6 @@ L_088983E4: } L_088983F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088984A4; } @@ -1266,7 +1165,6 @@ L_088983F4: L_088983FC: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088984A4; } @@ -1327,7 +1225,6 @@ L_088984A4: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088982DC; } @@ -1345,7 +1242,6 @@ L_088984B8: L_088984C4: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898564; } @@ -1392,7 +1288,6 @@ L_08898554: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088984D0; } @@ -1400,7 +1295,6 @@ L_08898554: } L_08898564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889860C; } @@ -1409,7 +1303,6 @@ L_08898564: L_0889856C: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889860C; } @@ -1456,7 +1349,6 @@ L_088985FC: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898578; } @@ -1464,7 +1356,6 @@ L_088985FC: } L_0889860C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08898C4C; } @@ -1613,7 +1504,6 @@ L_08898794: L_088987A4: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898860; } @@ -1622,7 +1512,6 @@ L_088987A4: L_088987B0: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898858; } @@ -1680,7 +1569,6 @@ L_08898848: } L_08898858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08898908; } @@ -1689,7 +1577,6 @@ L_08898858: L_08898860: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898908; } @@ -1750,7 +1637,6 @@ L_08898908: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898AF8; } @@ -1792,7 +1678,6 @@ L_08898974: L_08898980: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898A3C; } @@ -1801,7 +1686,6 @@ L_08898980: L_0889898C: aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898A34; } @@ -1859,7 +1743,6 @@ L_08898A24: } L_08898A34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08898AE4; } @@ -1868,7 +1751,6 @@ L_08898A34: L_08898A3C: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898AE4; } @@ -1929,7 +1811,6 @@ L_08898AE4: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889891C; } @@ -1947,7 +1828,6 @@ L_08898AF8: L_08898B04: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898BA4; } @@ -1994,7 +1874,6 @@ L_08898B94: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898B10; } @@ -2002,7 +1881,6 @@ L_08898B94: } L_08898BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08898C4C; } @@ -2011,7 +1889,6 @@ L_08898BA4: L_08898BAC: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898C4C; } @@ -2058,7 +1935,6 @@ L_08898C3C: aot_gpr_16 = (aot_gpr_16 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898BB8; } @@ -2070,7 +1946,6 @@ L_08898C4C: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08898C6C; @@ -2099,7 +1974,17 @@ L_08898C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08898CA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -2107,7 +1992,6 @@ L_08898CA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 63u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898CD4; } @@ -2115,13 +1999,11 @@ L_08898CA4: } L_08898CCC: ctx.gpr[31] = (0x08898CD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 385u, 0x08A92DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898CD4u) goto L_08898CD4; AOT_REGCACHE_SYNC_OUT(); return; L_08898CD4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8424))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898DE4; } @@ -2131,7 +2013,6 @@ L_08898CE0: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898DCC; } @@ -2146,7 +2027,6 @@ L_08898CF0: goto L_08898CFC; L_08898CFC: ctx.gpr[31] = (0x08898D04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898D04u) goto L_08898D04; AOT_REGCACHE_SYNC_OUT(); return; L_08898D04: @@ -2160,7 +2040,6 @@ L_08898D08: L_08898D10: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08898DBC; } @@ -2169,7 +2048,6 @@ L_08898D10: L_08898D1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898DBC; } @@ -2200,7 +2078,6 @@ L_08898D40: L_08898D58: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08898D6C; } @@ -2235,7 +2112,6 @@ L_08898D84: AOT_REGCACHE_SYNC_OUT(); return; L_08898D9C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08898DAC; } @@ -2260,7 +2136,6 @@ L_08898DBC: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898CF0; } @@ -2268,17 +2143,14 @@ L_08898DBC: } L_08898DCC: ctx.gpr[31] = (0x08898DD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 158u, 0x08990B78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898DD4u) goto L_08898DD4; AOT_REGCACHE_SYNC_OUT(); return; L_08898DD4: ctx.gpr[31] = (0x08898DDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 157u, 0x08990B70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898DDCu) goto L_08898DDC; AOT_REGCACHE_SYNC_OUT(); return; L_08898DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889973C; } @@ -2287,7 +2159,6 @@ L_08898DDC: L_08898DE4: aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08898E58; } @@ -2299,7 +2170,6 @@ L_08898DF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898E10; } @@ -2307,7 +2177,6 @@ L_08898DF0: } L_08898E08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08898E50; } @@ -2316,7 +2185,6 @@ L_08898E08: L_08898E10: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898E38; } @@ -2327,7 +2195,6 @@ L_08898E1C: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08898E38; } @@ -2351,7 +2218,6 @@ L_08898E38: AOT_REGCACHE_SYNC_OUT(); return; L_08898E50: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08898DF0; } @@ -2359,12 +2225,10 @@ L_08898E50: } L_08898E58: ctx.gpr[31] = (0x08898E60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 443u, 0x08896270u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898E60u) goto L_08898E60; AOT_REGCACHE_SYNC_OUT(); return; L_08898E60: ctx.gpr[31] = (0x08898E68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898E68u) goto L_08898E68; AOT_REGCACHE_SYNC_OUT(); return; L_08898E68: @@ -2375,7 +2239,6 @@ L_08898E68: L_08898E70: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08898FC0; } @@ -2387,7 +2250,6 @@ L_08898E7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898EA4; } @@ -2400,7 +2262,6 @@ L_08898E94: AOT_REGCACHE_SYNC_OUT(); return; L_08898E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08898FB8; } @@ -2415,7 +2276,6 @@ L_08898EA4: goto L_08898EB0; L_08898EB0: ctx.gpr[31] = (0x08898EB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08898EB8u) goto L_08898EB8; AOT_REGCACHE_SYNC_OUT(); return; L_08898EB8: @@ -2424,7 +2284,6 @@ L_08898EB8: L_08898EBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08898ED0; } @@ -2451,7 +2310,6 @@ L_08898ED0: AOT_REGCACHE_SYNC_OUT(); return; L_08898EE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08898EF8; } @@ -2473,7 +2331,6 @@ L_08898EF8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08898F24; } @@ -2486,7 +2343,6 @@ L_08898F18: goto L_08898F24; L_08898F24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898F80; } @@ -2506,7 +2362,6 @@ L_08898F2C: L_08898F44: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08898F58; } @@ -2530,7 +2385,6 @@ L_08898F58: AOT_REGCACHE_SYNC_OUT(); return; L_08898F70: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08898F80; } @@ -2567,7 +2421,6 @@ L_08898FA0: goto L_08898FA8; L_08898FA8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08898FB8; } @@ -2580,7 +2433,6 @@ L_08898FB0: AOT_REGCACHE_SYNC_OUT(); return; L_08898FB8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08898E7C; } @@ -2591,7 +2443,6 @@ L_08898FC0: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7893), static_cast(aot_gpr_4)); ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088990AC; } @@ -2606,7 +2457,6 @@ L_08898FD4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088990A4; } @@ -2616,7 +2466,6 @@ L_08898FF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899018; } @@ -2629,7 +2478,6 @@ L_08899008: AOT_REGCACHE_SYNC_OUT(); return; L_08899010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088990A4; } @@ -2649,7 +2497,6 @@ L_08899018: L_08899030: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08899044; } @@ -2673,7 +2520,6 @@ L_08899044: AOT_REGCACHE_SYNC_OUT(); return; L_0889905C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889906C; } @@ -2710,7 +2556,6 @@ L_0889908C: goto L_08899094; L_08899094: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088990A4; } @@ -2723,7 +2568,6 @@ L_0889909C: AOT_REGCACHE_SYNC_OUT(); return; L_088990A4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08898FD4; } @@ -2734,7 +2578,6 @@ L_088990AC: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8421), static_cast(0u)); ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08899158; } @@ -2748,7 +2591,6 @@ L_088990C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08899150; } @@ -2768,7 +2610,6 @@ L_088990E0: L_088990F8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889910C; } @@ -2798,7 +2639,6 @@ L_08899114: L_0889912C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8428), 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08899140; } @@ -2821,7 +2661,6 @@ L_08899148: AOT_REGCACHE_SYNC_OUT(); return; L_08899150: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088990C0; } @@ -2833,7 +2672,6 @@ L_08899158: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899224; } @@ -2842,7 +2680,6 @@ L_08899158: L_08899170: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08899214; } @@ -2856,7 +2693,6 @@ L_0889917C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889920C; } @@ -2876,7 +2712,6 @@ L_0889919C: L_088991B4: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_088991C8; } @@ -2906,7 +2741,6 @@ L_088991D0: L_088991E8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8428), 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_088991FC; } @@ -2929,7 +2763,6 @@ L_08899204: AOT_REGCACHE_SYNC_OUT(); return; L_0889920C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0889917C; } @@ -2939,7 +2772,6 @@ L_08899214: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08899170; } @@ -2948,7 +2780,6 @@ L_08899214: L_08899224: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08899314; } @@ -2962,7 +2793,6 @@ L_08899230: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889930C; } @@ -2990,7 +2820,6 @@ L_08899250: L_08899288: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889929C; } @@ -3014,7 +2843,6 @@ L_0889929C: AOT_REGCACHE_SYNC_OUT(); return; L_088992B4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088992C4; } @@ -3041,7 +2869,6 @@ L_088992D4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889930C; } @@ -3059,7 +2886,6 @@ L_088992EC: goto L_0889930C; L_0889930C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08899230; } @@ -3069,7 +2895,6 @@ L_08899314: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8425), static_cast(0u)); aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_088993AC; } @@ -3083,7 +2908,6 @@ L_08899324: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088993A4; } @@ -3116,7 +2940,6 @@ L_0889936C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088993A4; } @@ -3134,7 +2957,6 @@ L_08899384: goto L_088993A4; L_088993A4: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08899324; } @@ -3145,7 +2967,6 @@ L_088993AC: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8425), static_cast(aot_gpr_4)); aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_088994C4; } @@ -3159,7 +2980,6 @@ L_088993C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088994BC; } @@ -3192,7 +3012,6 @@ L_08899408: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088994BC; } @@ -3225,7 +3044,6 @@ L_0889944C: } L_08899454: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088994BC; } @@ -3284,7 +3102,6 @@ L_088994A4: AOT_REGCACHE_SYNC_OUT(); return; L_088994BC: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_088993C0; } @@ -3293,7 +3110,6 @@ L_088994BC: L_088994C4: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7636))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08899678; } @@ -3306,7 +3122,6 @@ L_088994D0: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08899638; } @@ -3328,7 +3143,6 @@ L_08899500: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08899530; } @@ -3340,7 +3154,6 @@ L_08899510: L_08899514: aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08899530; } @@ -3350,7 +3163,6 @@ L_08899520: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889960C; } @@ -3359,7 +3171,6 @@ L_08899520: L_08899530: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088995F0; } @@ -3382,14 +3193,22 @@ L_08899550: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-22856))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08899568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088995D8; } @@ -3402,7 +3221,6 @@ L_08899570: AOT_REGCACHE_SYNC_OUT(); return; L_08899578: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088995D8; } @@ -3412,7 +3230,6 @@ L_08899580: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2232))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088995A0; } @@ -3425,7 +3242,6 @@ L_08899590: AOT_REGCACHE_SYNC_OUT(); return; L_08899598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088995A8; } @@ -3438,7 +3254,6 @@ L_088995A0: AOT_REGCACHE_SYNC_OUT(); return; L_088995A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088995D8; } @@ -3451,7 +3266,6 @@ L_088995B0: AOT_REGCACHE_SYNC_OUT(); return; L_088995B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088995D8; } @@ -3464,7 +3278,6 @@ L_088995C0: AOT_REGCACHE_SYNC_OUT(); return; L_088995C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088995D8; } @@ -3487,7 +3300,6 @@ L_088995E0: AOT_REGCACHE_SYNC_OUT(); return; L_088995E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08899630; } @@ -3506,7 +3318,6 @@ L_088995FC: AOT_REGCACHE_SYNC_OUT(); return; L_08899604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08899630; } @@ -3515,7 +3326,6 @@ L_08899604: L_0889960C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899630; } @@ -3538,7 +3348,6 @@ L_08899628: AOT_REGCACHE_SYNC_OUT(); return; L_08899630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08899670; } @@ -3549,7 +3358,6 @@ L_08899638: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08899670; } @@ -3558,7 +3366,6 @@ L_08899638: L_0889964C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(448))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899670; } @@ -3581,7 +3388,6 @@ L_08899668: AOT_REGCACHE_SYNC_OUT(); return; L_08899670: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088994D0; } @@ -3589,13 +3395,11 @@ L_08899670: } L_08899678: ctx.gpr[31] = (0x08899680u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 169u, 0x08AB8BACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08899680u) goto L_08899680; AOT_REGCACHE_SYNC_OUT(); return; L_08899680: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5888))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08899694; } @@ -3603,7 +3407,6 @@ L_08899680: } L_0889968C: ctx.gpr[31] = (0x08899694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08899694u) goto L_08899694; AOT_REGCACHE_SYNC_OUT(); return; L_08899694: @@ -3623,7 +3426,6 @@ L_0889969C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088996F4; } @@ -3644,7 +3446,6 @@ L_088996CC: AOT_REGCACHE_SYNC_OUT(); return; L_088996F4: ctx.gpr[31] = (0x088996FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 157u, 0x08990B70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088996FCu) goto L_088996FC; AOT_REGCACHE_SYNC_OUT(); return; L_088996FC: @@ -3652,7 +3453,6 @@ L_088996FC: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08899720; } @@ -3660,12 +3460,10 @@ L_088996FC: } L_08899710: ctx.gpr[31] = (0x08899718u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 665u, 0x08893FDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08899718u) goto L_08899718; AOT_REGCACHE_SYNC_OUT(); return; L_08899718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889973C; } @@ -3676,7 +3474,6 @@ L_08899720: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889973C; } @@ -3684,7 +3481,6 @@ L_08899720: } L_08899734: ctx.gpr[31] = (0x0889973Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 23u, 0x08894244u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889973Cu) goto L_0889973C; AOT_REGCACHE_SYNC_OUT(); return; L_0889973C: @@ -3701,7 +3497,17 @@ L_0889973C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08899758: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -3870,7 +3676,6 @@ L_0889991C: } L_08899924: ctx.gpr[31] = (0x0889992Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889992Cu) goto L_0889992C; AOT_REGCACHE_SYNC_OUT(); return; L_0889992C: @@ -3903,7 +3708,6 @@ L_08899968: ctx.gpr[23] = (aot_gpr_5 | 0u); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08899B5C; } @@ -3921,7 +3725,6 @@ L_08899990: aot_gpr_16 = (aot_gpr_16 + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088999E4; } @@ -3952,7 +3755,6 @@ L_088999C4: L_088999E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(41))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899A30; } @@ -3983,7 +3785,6 @@ L_08899A10: L_08899A30: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899A7C; } @@ -4013,7 +3814,6 @@ L_08899A5C: AOT_REGCACHE_SYNC_OUT(); return; L_08899A7C: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08899AC4; } @@ -4044,7 +3844,6 @@ L_08899AA4: L_08899AC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899B10; } @@ -4075,7 +3874,6 @@ L_08899AF0: L_08899B10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899B48; } @@ -4141,7 +3939,17 @@ L_08899B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08899BB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4310,7 +4118,6 @@ L_08899D78: } L_08899D80: ctx.gpr[31] = (0x08899D88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08899D88u) goto L_08899D88; AOT_REGCACHE_SYNC_OUT(); return; L_08899D88: @@ -4343,7 +4150,6 @@ L_08899DC4: ctx.gpr[18] = (aot_gpr_5 | 0u); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08899FAC; } @@ -4361,7 +4167,6 @@ L_08899DEC: aot_gpr_16 = (aot_gpr_16 + aot_gpr_17); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899E48; } @@ -4394,7 +4199,6 @@ L_08899E24: L_08899E48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899E9C; } @@ -4427,7 +4231,6 @@ L_08899E78: L_08899E9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899EF0; } @@ -4460,7 +4263,6 @@ L_08899ECC: L_08899EF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899F44; } @@ -4493,7 +4295,6 @@ L_08899F20: L_08899F44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08899F98; } @@ -4569,7 +4370,17 @@ L_08899FD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889A004: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4736,7 +4547,6 @@ L_0889A1C0: } L_0889A1C8: ctx.gpr[31] = (0x0889A1D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889A1D0u) goto L_0889A1D0; AOT_REGCACHE_SYNC_OUT(); return; L_0889A1D0: @@ -4767,7 +4577,6 @@ L_0889A204: ctx.gpr[23] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0889A420; } @@ -4785,7 +4594,6 @@ L_0889A22C: aot_gpr_16 = (aot_gpr_16 + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A2C0; } @@ -4838,7 +4646,6 @@ L_0889A2A0: L_0889A2C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A32C; } @@ -4880,7 +4687,6 @@ L_0889A30C: L_0889A32C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A378; } @@ -4911,7 +4717,6 @@ L_0889A358: L_0889A378: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A3C4; } @@ -4942,7 +4747,6 @@ L_0889A3A4: L_0889A3C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A410; } @@ -5015,7 +4819,17 @@ L_0889A444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889A478: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -5179,7 +4993,6 @@ L_0889A624: } L_0889A62C: ctx.gpr[31] = (0x0889A634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889A634u) goto L_0889A634; AOT_REGCACHE_SYNC_OUT(); return; L_0889A634: @@ -5210,7 +5023,6 @@ L_0889A668: ctx.gpr[23] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0889A834; } @@ -5228,7 +5040,6 @@ L_0889A690: aot_gpr_16 = (aot_gpr_16 + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A714; } @@ -5277,7 +5088,6 @@ L_0889A6F8: L_0889A714: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A758; } @@ -5306,7 +5116,6 @@ L_0889A73C: L_0889A758: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A79C; } @@ -5335,7 +5144,6 @@ L_0889A780: L_0889A79C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A7E0; } @@ -5364,7 +5172,6 @@ L_0889A7C4: L_0889A7E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889A824; } @@ -5434,7 +5241,17 @@ L_0889A858: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889A888: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -5597,7 +5414,6 @@ L_0889AA30: } L_0889AA38: ctx.gpr[31] = (0x0889AA40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889AA40u) goto L_0889AA40; AOT_REGCACHE_SYNC_OUT(); return; L_0889AA40: @@ -5646,7 +5462,6 @@ L_0889AAA4: aot_gpr_16 = (aot_gpr_16 + ctx.gpr[23]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889AB38; } @@ -5699,7 +5514,6 @@ L_0889AB18: L_0889AB38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889AB84; } @@ -5730,7 +5544,6 @@ L_0889AB64: L_0889AB84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889ABD0; } @@ -5761,7 +5574,6 @@ L_0889ABB0: L_0889ABD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889AC1C; } @@ -5792,7 +5604,6 @@ L_0889ABFC: L_0889AC1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889AC68; } @@ -5867,7 +5678,17 @@ L_0889ACA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889ACD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -6024,7 +5845,6 @@ L_0889AE90: aot_gpr_5 = (0u | 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889AEB4; } @@ -6042,7 +5862,6 @@ L_0889AEA4: } L_0889AEB4: ctx.gpr[31] = (0x0889AEBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889AEBCu) goto L_0889AEBC; AOT_REGCACHE_SYNC_OUT(); return; L_0889AEBC: @@ -6097,7 +5916,6 @@ L_0889AF2C: aot_gpr_16 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B024; } @@ -6128,7 +5946,6 @@ L_0889AF44: L_0889AF68: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B01C; } @@ -6159,7 +5976,6 @@ L_0889AF74: L_0889AF98: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B014; } @@ -6190,7 +6006,6 @@ L_0889AFA4: L_0889AFC8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B00C; } @@ -6221,7 +6036,6 @@ L_0889AFD4: L_0889AFF8: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B024; } @@ -6262,7 +6076,6 @@ L_0889B01C: L_0889B024: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B0A0; } @@ -6293,7 +6106,6 @@ L_0889B030: L_0889B054: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B098; } @@ -6324,7 +6136,6 @@ L_0889B060: L_0889B084: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B0A0; } @@ -6349,7 +6160,6 @@ L_0889B098: L_0889B0A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B11C; } @@ -6380,7 +6190,6 @@ L_0889B0AC: L_0889B0D0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B114; } @@ -6411,7 +6220,6 @@ L_0889B0DC: L_0889B100: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B11C; } @@ -6436,7 +6244,6 @@ L_0889B114: L_0889B11C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B198; } @@ -6467,7 +6274,6 @@ L_0889B128: L_0889B14C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B190; } @@ -6498,7 +6304,6 @@ L_0889B158: L_0889B17C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B198; } @@ -6523,7 +6328,6 @@ L_0889B190: L_0889B198: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(148))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B214; } @@ -6554,7 +6358,6 @@ L_0889B1A4: L_0889B1C8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B20C; } @@ -6585,7 +6388,6 @@ L_0889B1D4: L_0889B1F8: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B214; } @@ -6610,7 +6412,6 @@ L_0889B20C: L_0889B214: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B258; } @@ -6641,7 +6442,6 @@ L_0889B220: L_0889B244: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B258; } @@ -6708,7 +6508,17 @@ L_0889B2A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889B2D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -6790,7 +6600,6 @@ L_0889B354: L_0889B40C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0889B654; } @@ -6805,7 +6614,6 @@ L_0889B418: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B450; } @@ -6813,7 +6621,6 @@ L_0889B418: } L_0889B43C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889B450; } @@ -6822,7 +6629,6 @@ L_0889B43C: L_0889B444: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(448))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_0889B64C; } @@ -6830,7 +6636,6 @@ L_0889B444: } L_0889B450: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0889B64C; } @@ -6843,7 +6648,6 @@ L_0889B458: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B4B4; } @@ -6855,7 +6659,6 @@ L_0889B474: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B4B4; } @@ -6863,7 +6666,6 @@ L_0889B474: } L_0889B48C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889B4B4; } @@ -6875,9 +6677,7 @@ L_0889B494: aot_gpr_4 = (aot_gpr_4 | 62915u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889B64C; } @@ -6887,7 +6687,6 @@ L_0889B4B4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(84))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889B64C; } @@ -6897,7 +6696,6 @@ L_0889B4C4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); aot_mem.aot_direct_store16(aot_gpr_17 + static_cast(84), static_cast(aot_gpr_4)); { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_0889B64C; } @@ -6909,7 +6707,6 @@ L_0889B4D4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B64C; } @@ -6917,7 +6714,6 @@ L_0889B4D4: } L_0889B4EC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0889B504; } @@ -6930,7 +6726,6 @@ L_0889B4F4: AOT_REGCACHE_SYNC_OUT(); return; L_0889B4FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0889B64C; } @@ -7004,9 +6799,7 @@ L_0889B514: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889B64C; } @@ -7034,7 +6827,6 @@ L_0889B578: L_0889B5B8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B618; } @@ -7047,7 +6839,6 @@ L_0889B5C4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0889B618; } @@ -7056,7 +6847,6 @@ L_0889B5C4: L_0889B5E0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0889B618; } @@ -7066,7 +6856,6 @@ L_0889B5EC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); aot_gpr_6 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0889B618; } @@ -7076,9 +6865,7 @@ L_0889B5FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(32))); aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889B618; } @@ -7089,7 +6876,6 @@ L_0889B614: goto L_0889B618; L_0889B618: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B64C; } @@ -7099,7 +6885,6 @@ L_0889B620: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B644; } @@ -7108,7 +6893,6 @@ L_0889B620: L_0889B630: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B644; } @@ -7129,7 +6913,6 @@ L_0889B644: } L_0889B64C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0889B418; } @@ -7139,7 +6922,6 @@ L_0889B654: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B678; } @@ -7148,7 +6930,6 @@ L_0889B654: L_0889B664: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B678; } @@ -7181,7 +6962,17 @@ L_0889B67C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889B6AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -7208,7 +6999,6 @@ L_0889B708: goto L_0889B714; L_0889B714: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_0889B72C; } @@ -7252,7 +7042,6 @@ L_0889B750: goto L_0889B754; L_0889B754: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889B7C4; } @@ -7265,7 +7054,6 @@ L_0889B75C: AOT_REGCACHE_SYNC_OUT(); return; L_0889B764: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0889B7C4; } @@ -7278,7 +7066,6 @@ L_0889B76C: AOT_REGCACHE_SYNC_OUT(); return; L_0889B774: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0889B7C4; } @@ -7309,9 +7096,7 @@ L_0889B77C: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889B7C4; } @@ -7348,7 +7133,6 @@ L_0889B7E8: goto L_0889B7F4; L_0889B7F4: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0889B80C; } @@ -7393,7 +7177,6 @@ L_0889B830: L_0889B834: aot_gpr_17 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0889B9A4; } @@ -7425,9 +7208,7 @@ L_0889B840: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889B9A4; } @@ -7437,7 +7218,6 @@ L_0889B884: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B8A0; } @@ -7446,7 +7226,6 @@ L_0889B884: L_0889B894: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_0889B9A4; } @@ -7459,7 +7238,6 @@ L_0889B8A0: AOT_REGCACHE_SYNC_OUT(); return; L_0889B8A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0889B9A4; } @@ -7468,7 +7246,6 @@ L_0889B8A8: L_0889B8B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B8E8; } @@ -7502,7 +7279,6 @@ L_0889B8E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889B96C; } @@ -7516,7 +7292,6 @@ L_0889B8FC: AOT_REGCACHE_SYNC_OUT(); return; L_0889B908: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0889B958; } @@ -7562,7 +7337,6 @@ L_0889B958: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889B8FC; } @@ -7581,7 +7355,6 @@ L_0889B974: AOT_REGCACHE_SYNC_OUT(); return; L_0889B980: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0889B9A4; } @@ -7692,7 +7465,6 @@ L_0889B9FC: AOT_REGCACHE_SYNC_OUT(); return; L_0889BA10: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0889BA28; } @@ -7700,12 +7472,10 @@ L_0889BA10: } L_0889BA18: ctx.gpr[31] = (0x0889BA20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 66u, 0x088807A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889BA20u) goto L_0889BA20; AOT_REGCACHE_SYNC_OUT(); return; L_0889BA20: ctx.gpr[31] = (0x0889BA28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 487u, 0x08A974F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889BA28u) goto L_0889BA28; AOT_REGCACHE_SYNC_OUT(); return; L_0889BA28: @@ -7735,7 +7505,17 @@ L_0889BA34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889BA6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -7773,7 +7553,6 @@ L_0889BB00: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(84))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7783,12 +7562,10 @@ L_0889BB18: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); aot_mem.aot_direct_store16(ctx.gpr[20] + static_cast(84), static_cast(aot_gpr_4)); ctx.gpr[31] = (0x0889BB28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889BB28u) goto L_0889BB28; AOT_REGCACHE_SYNC_OUT(); return; L_0889BB28: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7799,9 +7576,7 @@ L_0889BB30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7811,9 +7586,7 @@ L_0889BB4C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7823,9 +7596,7 @@ L_0889BB64: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(92))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7835,9 +7606,7 @@ L_0889BB7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7847,7 +7616,6 @@ L_0889BB94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7857,7 +7625,6 @@ L_0889BBA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(533)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889BBE4; } @@ -7867,7 +7634,6 @@ L_0889BBB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(533)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889BBE4; } @@ -7877,7 +7643,6 @@ L_0889BBC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(533)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889BBE4; } @@ -7887,7 +7652,6 @@ L_0889BBD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(533)))))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889BDD8; } @@ -7951,9 +7715,7 @@ L_0889BC58: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BCF4; } @@ -7966,9 +7728,7 @@ L_0889BC84: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BCF4; } @@ -7981,9 +7741,7 @@ L_0889BCA8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BCF4; } @@ -7996,9 +7754,7 @@ L_0889BCCC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BCF4; } @@ -8020,7 +7776,6 @@ L_0889BCF4: } L_0889BD08: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0889BDD8; } @@ -8045,9 +7800,7 @@ L_0889BD10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BD5C; } @@ -8057,7 +7810,6 @@ L_0889BD38: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); goto L_0889BD50; @@ -8066,7 +7818,6 @@ L_0889BD38: L_0889BD50: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889BD78; } @@ -8076,7 +7827,6 @@ L_0889BD5C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); goto L_0889BD74; @@ -8088,9 +7838,7 @@ L_0889BD74: L_0889BD78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889BDB0; } @@ -8100,7 +7848,6 @@ L_0889BD8C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_0889BDA4; @@ -8119,7 +7866,6 @@ L_0889BDB0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_0889BDC8; @@ -8136,7 +7882,6 @@ L_0889BDD0: AOT_REGCACHE_SYNC_OUT(); return; L_0889BDD8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_0889BB00; } @@ -8167,7 +7912,17 @@ L_0889BDE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889BE28: aot_gpr_29 = (aot_gpr_29 + static_cast(-704)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -8204,7 +7959,6 @@ L_0889BEA0: } L_0889BEB8: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0889BF00; } @@ -8218,7 +7972,6 @@ L_0889BEC0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889BF00; } @@ -8236,7 +7989,6 @@ L_0889BEE0: goto L_0889BF00; L_0889BF00: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0889BF38; } @@ -8245,7 +7997,6 @@ L_0889BF00: L_0889BF08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8072))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889BF38; } @@ -8259,7 +8010,6 @@ L_0889BF14: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889BF38; } @@ -8301,7 +8051,6 @@ L_0889BF74: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(608), static_cast(aot_gpr_17)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(596), static_cast(aot_gpr_16)); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 76u, 0x0889C5C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8339,7 +8088,6 @@ L_0889BFC0: L_0889BFD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8068))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 75u, 0x0889C5B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0038.cpp b/profiles/vcs/generated/generated_unit_0038.cpp index 5056559..d9fd63c 100644 --- a/profiles/vcs/generated/generated_unit_0038.cpp +++ b/profiles/vcs/generated/generated_unit_0038.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0038[4096] = { - 1, 0, 2, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, - 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 13, 0, 14, 0, 15, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 19, 0, 20, 0, - 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 25, 0, 26, 0, 27, 0, 0, 0, 0, 0, - 28, 0, 29, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 33, 0, 34, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, - 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, - 0, 0, 0, 0, 0, 0, 45, 0, 46, 0, 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, - 53, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, - 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, - 71, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, 75, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 79, - 0, 80, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 88, 0, 89, - 0, 90, 0, 0, 0, 0, 91, 0, 0, 0, 92, 0, 93, 0, 94, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 97, 98, 0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, 0, 105, 0, 0, - 106, 0, 0, 0, 107, 0, 108, 0, 109, 0, 0, 0, 0, 110, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 114, - 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, - 0, 121, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, 126, 0, 127, 0, 128, 0, 0, 0, 129, 0, - 0, 0, 0, 130, 0, 0, 0, 131, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, - 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 139, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, - 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 145, 0, 146, 0, 147, 0, 0, 0, 0, 0, 148, - 149, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 157, 158, 0, 0, 159, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, 163, 0, 0, 0, - 164, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, - 171, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 176, 0, - 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 180, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 182, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, 0, 189, 0, - 0, 0, 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 200, 0, 0, 201, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 204, 0, 205, 0, 0, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, - 209, 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, - 215, 0, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, - 0, 221, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 0, 226, 0, 227, 0, 0, 0, 228, 0, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, - 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 0, 237, 0, 238, 0, 239, 0, 0, 240, 0, 241, 0, 0, 242, 0, 0, 243, - 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, 0, 247, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 252, 0, 0, - 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 255, 0, 0, 256, 0, 0, 257, 0, 258, 0, 259, 0, 0, 260, 0, 261, 0, 262, 0, 0, 263, - 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 0, 276, 0, - 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 280, 0, 281, 0, 0, 282, 283, 0, 0, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 290, 291, 0, 292, 0, 0, 0, 293, 0, 0, - 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 296, 0, 297, 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, 0, - 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, - 307, 0, 0, 308, 0, 0, 309, 0, 0, 310, 0, 311, 0, 0, 312, 0, 313, 0, 314, 0, 0, 315, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, - 0, 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 321, 0, 0, 0, 322, 0, 323, 0, 324, 0, 0, 325, 0, 0, 0, 0, 326, 327, 0, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 331, 0, 0, 332, 0, 333, 0, 0, 334, 0, - 335, 0, 0, 336, 0, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, - 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, - 0, 0, 351, 0, 0, 0, 352, 0, 353, 0, 354, 355, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, - 359, 0, 360, 0, 0, 361, 0, 362, 0, 0, 363, 0, 0, 364, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 0, 0, 368, 0, 0, 0, 369, - 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 373, 0, 0, 374, 0, 0, 0, 375, 0, 0, 376, 0, - 0, 377, 0, 378, 0, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 382, 0, 383, 0, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, - 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, 0, 395, 0, - 396, 0, 397, 0, 0, 398, 0, 0, 399, 0, 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 0, 408, - 0, 409, 0, 0, 410, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, - 416, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 419, 420, 0, 0, 0, 421, 0, 0, 0, 0, - 0, 422, 0, 0, 423, 0, 0, 424, 0, 425, 0, 0, 426, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, - 430, 0, 431, 0, 432, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 435, 0, 0, 0, 436, 0, 437, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 440, 0, 0, 441, 0, 0, 0, 0, 0, 442, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 448, - 0, 449, 0, 450, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 458, 0, 459, 0, 460, 0, 0, 461, - 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 467, 0, 0, 0, 0, 468, 0, - 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 473, 0, - 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, 0, 0, 478, 0, 479, 0, 480, 481, 0, 0, 0, 482, 0, 0, - 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 486, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 490, 0, 0, 491, 0, 492, 0, - 0, 0, 493, 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 498, 0, 0, 499, 0, 0, 500, 0, - 501, 0, 502, 0, 503, 0, 0, 504, 0, 0, 505, 0, 506, 0, 0, 507, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 511, - 0, 0, 512, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 517, 0, 0, 518, 0, 0, 519, - 0, 0, 520, 0, 0, 521, 0, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 526, 0, 0, 0, 0, 0, 527, - 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 530, 0, 0, 531, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, - 0, 535, 0, 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 540, 0, 0, 0, 0, 541, - 0, 0, 0, 0, 0, 542, 0, 543, 0, 544, 0, 0, 0, 545, 0, 546, 0, 547, 548, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, 551, - 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 558, 0, 0, 559, 0, 0, 560, 0, 561, 562, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, - 0, 565, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 572, 0, 573, - 0, 0, 0, 0, 574, 0, 0, 575, 576, 0, 577, 0, 578, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 582, 0, 0, 583, - 0, 0, 584, 0, 0, 585, 0, 0, 586, 0, 0, 587, 0, 0, 588, 0, 0, 589, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 595, 0, - 0, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, 0, 0, 601, 0, 0, 0, 0, 0, - 0, 602, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 605, 0, 606, 0, 607, 608, 0, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, - 0, 611, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 617, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, - 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 626, 0, 627, 0, - 628, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, - 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 0, 640, 0, 641, 0, 642, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, - 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 651, 0, 0, 652, 0, 0, 0, 0, 653, 654, - 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 660, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, - 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 672, 0, 673, 0, 674, 0, 675, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 677, 0, 678, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, - 0, 0, 680, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 0, 0, 683, 0, 684, 0, 685, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 692, 0, - 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 695, 0, 696, 0, 697, 698, 0, 0, 0, 699, 0, 700, 0, - 701, 0, 702, 0, 0, 0, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 0, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, - 0, 0, 0, 711, 0, 712, 0, 713, 0, 714, 0, 0, 0, 0, 0, 0, 715, 0, 716, 0, 0, 717, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, - 720, 0, 721, 0, 722, 0, 0, 0, 723, 0, 724, 0, 725, 0, 0, 0, 726, 0, 0, 0, 727, 0, 0, 0, 728, 0, 0, 0, 0, 0, 729, 0, - 0, 0, 730, 0, 731, 0, 732, 0, 733, 0, 734, 0, 0, 0, 735, 0, 0, 0, 736, 0, 737, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, - 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 742, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 744, - 0, 0, 745, 0, 746, 0, 0, 747, 0, 748, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 0, 751, 0, 752, 0, 753, 0, 0, 0, 0, 0, 754, - 0, 755, 0, 0, 756, 0, 757, 0, 758, 0, 0, 0, 759, 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 0, 0, 0, 0, 762, 763, 0, 0, 0, - 764, 0, 765, 0, 0, 0, 766, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 768, 0, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 774, 0, 0, 775, 0, - 0, 0, 0, 0, 0, 776, 0, 0, 0, 777, 0, 778, 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 781, 0, 0, 0, 782, 0, 0, 0, 0, - 783, 0, 784, 0, 0, 0, 785, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 789, 790, 0, - 0, 0, 0, 791, 0, 792, 0, 0, 0, 793, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, 0, - 0, 798, 0, 0, 0, 0, 0, 0, 0, 799, 0, 800, 0, 801, 0, 0, 0, 802, 0, 0, 0, 803, 0, 804, 0, 805, 0, 0, 0, 806, 0, 0, - 807, 0, 0, 0, 808, 0, 0, 0, 809, 0, 810, 0, 0, 0, 811, 0, 0, 0, 812, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, - 814, 0, 815, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 818, 0, 0, 0, 819, 0, 0, 0, 0, - 0, 820, 0, 0, 0, 0, 0, 821, 0, 0, 0, 822, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 825, 0, - 826, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 830, 0, 0, 0, 0, 0, 0, 831, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 833, 0, 0, 834, 0, 835, 0, 836, 0, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 839, 0, 840, 0, 0, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 842, - 0, 843, 0, 844, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 847, 0, 0, 0, 848, 0, 0, 0, - 849, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, 0, 851, 0, 0, 0, 852, 0, 0, 0, 853, 0, 0, 0, 854, 0, 0, 0, 855, 0, 0, - 0, 856, 0, 0, 0, 0, 857, 0, 858, 0, 859, 0, 0, 0, 0, 860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, - 862, 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, 0, 865, 0, 866, 0, 867, 0, 0, 0, 0, 0, 0, 868, 0, 0, 869, 0, 870, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0038[64] = { + 0x522154AA282002A5ull, 0x910A222505488120ull, 0x401505402820A082ull, 0x0A80502540000000ull, + 0x244140000000802Aull, 0xA101511110000000ull, 0x0400200000020006ull, 0x04205442A040A000ull, + 0x8210A15128888423ull, 0x4544428204110908ull, 0x0401510850200A88ull, 0x0400082182B00002ull, + 0x1240019810810020ull, 0x5008101100885205ull, 0x50440A1100192002ull, 0x9280400010A10290ull, + 0x20020815054A4400ull, 0x88A1228211010221ull, 0x9295240829100000ull, 0x952A494022421924ull, + 0x4481045008428104ull, 0x22EAA00406512008ull, 0x4082540204541010ull, 0x3095129008654A49ull, + 0x244922494A490008ull, 0x20408D4402011122ull, 0x48948008892224A5ull, 0x491290102492A48Aull, + 0x08A00832948AA925ull, 0x0808929208C20021ull, 0x1048404014600215ull, 0x0084084AA0890080ull, + 0x4288041195204010ull, 0x2352A00244200202ull, 0x4940841452854442ull, 0x92409014A4019495ull, + 0x2420984082440A24ull, 0xA086A2A084202242ull, 0x2010D24002114108ull, 0x92421590A1025242ull, + 0x4800002400924924ull, 0x0413522204881220ull, 0x108400008055000Aull, 0x0108502150902204ull, + 0x0011208000000001ull, 0xC244084441100954ull, 0x8104040000020020ull, 0x0500140820202002ull, + 0x000000000AA21000ull, 0x800000000A020000ull, 0x00000000002A8844ull, 0x6400000000501000ull, + 0x0A02AA8551AA0001ull, 0x41111515442502A8ull, 0x8051000810944554ull, 0x1824115282A20A94ull, + 0x4900800040A41045ull, 0x6084104508882A20ull, 0x22A22A0214108228ull, 0x0881004500844511ull, + 0x40A0008540808882ull, 0x80081440010A9400ull, 0x222222011140010Aull, 0xA40AA00940008542ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0038[64] = { + 1u, 21u, 38u, 52u, 61u, 70u, 80u, 85u, 97u, 115u, 130u, 143u, 153u, 164u, 177u, 190u, + 202u, 215u, 230u, 244u, 264u, 277u, 294u, 307u, 328u, 345u, 359u, 377u, 396u, 416u, 430u, 443u, + 455u, 469u, 483u, 501u, 520u, 535u, 552u, 565u, 584u, 596u, 611u, 621u, 634u, 639u, 655u, 661u, + 670u, 676u, 680u, 687u, 693u, 711u, 730u, 745u, 764u, 776u, 791u, 807u, 820u, 832u, 843u, 856u, }; void recomp_unit_0038_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0038_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0889C000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0038[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0038[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0038[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0889C000; @@ -1043,7 +950,6 @@ LOCAL_DISPATCH: } L_0889C000: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C5B8; } @@ -1052,7 +958,6 @@ L_0889C000: L_0889C008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(628))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C024; } @@ -1065,7 +970,6 @@ L_0889C014: AOT_REGCACHE_SYNC_OUT(); return; L_0889C01C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889C5B8; } @@ -1083,7 +987,6 @@ L_0889C024: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C0F8; } @@ -1095,7 +998,6 @@ L_0889C054: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889C0C0; } @@ -1103,7 +1005,6 @@ L_0889C054: } L_0889C06C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0889C084; } @@ -1113,7 +1014,6 @@ L_0889C074: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889C0C0; } @@ -1121,7 +1021,6 @@ L_0889C074: } L_0889C084: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0889C0B8; } @@ -1134,7 +1033,6 @@ L_0889C08C: AOT_REGCACHE_SYNC_OUT(); return; L_0889C094: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889C0B8; } @@ -1143,7 +1041,6 @@ L_0889C094: L_0889C09C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C0B8; } @@ -1156,7 +1053,6 @@ L_0889C0A8: AOT_REGCACHE_SYNC_OUT(); return; L_0889C0B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889C0C0; } @@ -1208,7 +1104,6 @@ L_0889C0F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C23C; } @@ -1217,7 +1112,6 @@ L_0889C0F8: L_0889C114: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(352))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0889C158; } @@ -1261,7 +1155,6 @@ L_0889C158: } L_0889C160: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0889C204; } @@ -1273,7 +1166,6 @@ L_0889C168: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889C1CC; } @@ -1281,7 +1173,6 @@ L_0889C168: } L_0889C180: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0889C1C4; } @@ -1311,7 +1202,6 @@ L_0889C1B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889C1CC; } @@ -1362,7 +1252,6 @@ L_0889C204: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C234; } @@ -1378,7 +1267,6 @@ L_0889C21C: goto L_0889C234; L_0889C234: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889C26C; } @@ -1390,7 +1278,6 @@ L_0889C23C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C26C; } @@ -1406,7 +1293,6 @@ L_0889C254: goto L_0889C26C; L_0889C26C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0889C388; } @@ -1545,7 +1431,6 @@ L_0889C2F8: goto L_0889C378; L_0889C378: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C388; } @@ -1558,7 +1443,6 @@ L_0889C380: L_0889C388: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(624))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C5B8; } @@ -1578,7 +1462,6 @@ L_0889C394: AOT_REGCACHE_SYNC_OUT(); return; L_0889C3B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889C5B8; } @@ -1726,9 +1609,7 @@ L_0889C4C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889C4F4; } @@ -1849,9 +1730,7 @@ L_0889C4F4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889C580; } @@ -1859,9 +1738,7 @@ L_0889C4F4: } L_0889C570: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889C5A0; } @@ -1869,9 +1746,7 @@ L_0889C570: } L_0889C580: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889C5B8; } @@ -1879,9 +1754,7 @@ L_0889C580: } L_0889C590: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889C5B8; } @@ -1900,7 +1773,6 @@ L_0889C5B0: goto L_0889C5B8; L_0889C5B8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0037_entry, 37u, 706u, 0x0889BFC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1912,7 +1784,6 @@ L_0889C5C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_gpr_29 + static_cast(64)); goto L_0889C5FC; @@ -1964,7 +1835,17 @@ L_0889C608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889C644: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2058,7 +1939,6 @@ L_0889C6E8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (0u + static_cast(-65)); if (branch_taken) { @@ -2078,7 +1958,6 @@ L_0889C73C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889CF54; } @@ -2091,7 +1970,6 @@ L_0889C758: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C784; } @@ -2104,7 +1982,6 @@ L_0889C774: AOT_REGCACHE_SYNC_OUT(); return; L_0889C77C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889CF54; } @@ -2137,7 +2014,6 @@ L_0889C7A8: goto L_0889C7B0; L_0889C7B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CA8C; } @@ -2159,7 +2035,6 @@ L_0889C7B8: L_0889C7D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); goto L_0889C804; @@ -2169,9 +2044,7 @@ L_0889C7E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889C828; } @@ -2184,7 +2057,6 @@ L_0889C804: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(186))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889C828; } @@ -2195,7 +2067,6 @@ L_0889C814: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(188))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889C9F8; } @@ -2294,7 +2165,6 @@ L_0889C8A0: AOT_REGCACHE_SYNC_OUT(); return; L_0889C8B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889C9F8; } @@ -2313,7 +2183,6 @@ L_0889C8D0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(76))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889C968; } @@ -2325,7 +2194,6 @@ L_0889C8E4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889C968; } @@ -2384,7 +2252,6 @@ L_0889C950: aot_gpr_4 = (aot_gpr_4 | 64u); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(482), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889C9F8; } @@ -2397,7 +2264,6 @@ L_0889C968: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889C9F8; } @@ -2416,7 +2282,6 @@ L_0889C984: AOT_REGCACHE_SYNC_OUT(); return; L_0889C99C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889C9F8; } @@ -2427,7 +2292,6 @@ L_0889C9A4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(138))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889C9D8; } @@ -2437,7 +2301,6 @@ L_0889C9B8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(190))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889C9D8; } @@ -2463,7 +2326,6 @@ L_0889C9D8: } L_0889C9E0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889C9F8; } @@ -2502,7 +2364,6 @@ L_0889CA1C: goto L_0889CA24; L_0889CA24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CA8C; } @@ -2516,7 +2377,6 @@ L_0889CA2C: aot_fpr_13 = aot_fpr_13 / ctx.fpr[26]; aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0889CA54; @@ -2534,7 +2394,6 @@ L_0889CA54: AOT_REGCACHE_SYNC_OUT(); return; L_0889CA70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889CA8C; } @@ -2575,7 +2434,6 @@ L_0889CAB0: goto L_0889CAB8; L_0889CAB8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889CF54; } @@ -2589,7 +2447,6 @@ L_0889CAC0: aot_fpr_12 = aot_fpr_12 / ctx.fpr[26]; aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[30])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0889CAE8; @@ -2600,7 +2457,6 @@ L_0889CAE8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0889CB04; @@ -2634,9 +2490,7 @@ L_0889CB04: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889CB54; } @@ -2647,12 +2501,10 @@ L_0889CB50: goto L_0889CB54; L_0889CB54: aot_gpr_31 = (0x0889CB5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889CB5Cu) goto L_0889CB5C; AOT_REGCACHE_SYNC_OUT(); return; L_0889CB5C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_0889CB80; } @@ -2662,7 +2514,6 @@ L_0889CB64: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); goto L_0889CB7C; @@ -2688,7 +2539,6 @@ L_0889CB94: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889CC40; } @@ -2707,7 +2557,6 @@ L_0889CBAC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0889CBE8; @@ -2722,7 +2571,6 @@ L_0889CBE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0889CC14; @@ -2751,7 +2599,6 @@ L_0889CC40: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CD08; } @@ -2812,7 +2659,6 @@ L_0889CCA0: L_0889CCD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(268))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CD00; } @@ -2835,7 +2681,6 @@ L_0889CCF0: goto L_0889CD00; L_0889CD00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889CF54; } @@ -2848,7 +2693,6 @@ L_0889CD08: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CF24; } @@ -2857,12 +2701,10 @@ L_0889CD08: L_0889CD24: ctx.gpr[16] = (ctx.gpr[17] | 0u); aot_gpr_31 = (0x0889CD30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889CD30u) goto L_0889CD30; AOT_REGCACHE_SYNC_OUT(); return; L_0889CD30: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_0889CD5C; } @@ -2873,7 +2715,6 @@ L_0889CD38: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889CD5C; } @@ -2883,7 +2724,6 @@ L_0889CD4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889CF1C; } @@ -2919,7 +2759,6 @@ L_0889CD90: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CDF8; } @@ -2932,7 +2771,6 @@ L_0889CDB0: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889CDF8; } @@ -2952,7 +2790,6 @@ L_0889CDCC: AOT_REGCACHE_SYNC_OUT(); return; L_0889CDF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889CE80; } @@ -3018,7 +2855,6 @@ L_0889CE80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889CEA4; } @@ -3034,7 +2870,6 @@ L_0889CE90: AOT_REGCACHE_SYNC_OUT(); return; L_0889CEA4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889CF1C; } @@ -3047,7 +2882,6 @@ L_0889CEAC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889CF1C; } @@ -3057,7 +2891,6 @@ L_0889CEC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889CEF8; } @@ -3074,7 +2907,6 @@ L_0889CED8: AOT_REGCACHE_SYNC_OUT(); return; L_0889CEF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889CF10; } @@ -3097,7 +2929,6 @@ L_0889CF10: AOT_REGCACHE_SYNC_OUT(); return; L_0889CF1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889CF54; } @@ -3126,7 +2957,6 @@ L_0889CF40: AOT_REGCACHE_SYNC_OUT(); return; L_0889CF54: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_0889C6E8; } @@ -3163,7 +2993,17 @@ L_0889CF70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889CFB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3194,7 +3034,17 @@ L_0889CFF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889CFFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), ctx.gpr[17]); @@ -3233,7 +3083,6 @@ L_0889D044: L_0889D04C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0889D068; } @@ -3241,7 +3090,6 @@ L_0889D04C: } L_0889D058: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889D088; } @@ -3249,7 +3097,6 @@ L_0889D058: } L_0889D060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889D090; } @@ -3265,7 +3112,6 @@ L_0889D068: goto L_0889D1FC; L_0889D080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889D0AC; } @@ -3297,7 +3143,17 @@ L_0889D0AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D0C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3347,7 +3203,17 @@ L_0889D124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D140: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3377,7 +3243,17 @@ L_0889D170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D184: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[16]); @@ -3389,7 +3265,6 @@ L_0889D184: AOT_REGCACHE_SYNC_OUT(); return; L_0889D19C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889D1DC; } @@ -3405,7 +3280,6 @@ L_0889D1A4: L_0889D1B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0889D1DC; } @@ -3421,7 +3295,6 @@ L_0889D1C0: AOT_REGCACHE_SYNC_OUT(); return; L_0889D1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889D1EC; } @@ -3442,7 +3315,17 @@ L_0889D1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D1FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -3497,7 +3380,17 @@ L_0889D274: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D28C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3522,7 +3415,6 @@ L_0889D2B4: AOT_REGCACHE_SYNC_OUT(); return; L_0889D2C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889D2D0; } @@ -3598,7 +3490,17 @@ L_0889D330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D344: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3621,7 +3523,17 @@ L_0889D364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D374: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3636,7 +3548,6 @@ L_0889D374: AOT_REGCACHE_SYNC_OUT(); return; L_0889D398: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889D3E8; } @@ -3657,7 +3568,6 @@ L_0889D3AC: L_0889D3B8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889D3D4; } @@ -3670,7 +3580,6 @@ L_0889D3C4: AOT_REGCACHE_SYNC_OUT(); return; L_0889D3CC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889D3F0; } @@ -3723,7 +3632,17 @@ L_0889D408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3736,7 +3655,6 @@ L_0889D420: AOT_REGCACHE_SYNC_OUT(); return; L_0889D43C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889D458; } @@ -3761,7 +3679,17 @@ L_0889D458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D46C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3776,7 +3704,6 @@ L_0889D46C: AOT_REGCACHE_SYNC_OUT(); return; L_0889D490: { const bool branch_taken = aot_gpr_2 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0889D4A8; } @@ -3801,7 +3728,17 @@ L_0889D4A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D4C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3815,7 +3752,6 @@ L_0889D4C0: L_0889D4DC: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0889D4F8; } @@ -3839,7 +3775,17 @@ L_0889D4F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D50C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3855,7 +3801,6 @@ L_0889D50C: L_0889D534: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0889D550; } @@ -3869,7 +3814,6 @@ L_0889D540: goto L_0889D140; L_0889D550: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0889D568; } @@ -3899,7 +3843,17 @@ L_0889D568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D588: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -3915,7 +3869,6 @@ L_0889D588: AOT_REGCACHE_SYNC_OUT(); return; L_0889D5B4: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_0889D5E4; } @@ -3923,7 +3876,6 @@ L_0889D5B4: } L_0889D5BC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0889D5DC; } @@ -3976,7 +3928,17 @@ L_0889D5F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D610: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -3992,7 +3954,6 @@ L_0889D630: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] | 0u); if (branch_taken) { @@ -4007,7 +3968,6 @@ L_0889D648: AOT_REGCACHE_SYNC_OUT(); return; L_0889D650: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889D668; } @@ -4033,7 +3993,17 @@ L_0889D668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D684: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -4048,7 +4018,6 @@ L_0889D684: AOT_REGCACHE_SYNC_OUT(); return; L_0889D6A8: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_0889D6B8; } @@ -4080,7 +4049,17 @@ L_0889D6C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D6DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4093,7 +4072,6 @@ L_0889D6DC: AOT_REGCACHE_SYNC_OUT(); return; L_0889D6F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889D740; } @@ -4119,7 +4097,6 @@ L_0889D718: AOT_REGCACHE_SYNC_OUT(); return; L_0889D724: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889D748; } @@ -4168,7 +4145,17 @@ L_0889D758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D76C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4187,7 +4174,6 @@ L_0889D76C: L_0889D790: aot_gpr_4 = (static_cast(ctx.gpr[17]) < -9999 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889D7B0; } @@ -4215,7 +4201,6 @@ L_0889D7B0: goto L_0889D6DC; L_0889D7C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889D7D0; } @@ -4259,7 +4244,17 @@ L_0889D7F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D80C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -4297,7 +4292,6 @@ L_0889D858: AOT_REGCACHE_SYNC_OUT(); return; L_0889D864: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889D8A4; } @@ -4363,7 +4357,6 @@ L_0889D8D8: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889D904; } @@ -4379,7 +4372,6 @@ L_0889D8F4: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889D8E8; } @@ -4402,7 +4394,6 @@ L_0889D920: ctx.gpr[17] = (ctx.gpr[17] + static_cast(8)); ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0889D8CC; } @@ -4431,7 +4422,17 @@ L_0889D940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D964: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4461,7 +4462,6 @@ L_0889D998: AOT_REGCACHE_SYNC_OUT(); return; L_0889D9A0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889D9AC; } @@ -4491,7 +4491,17 @@ L_0889D9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889D9D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4510,7 +4520,6 @@ L_0889D9F4: AOT_REGCACHE_SYNC_OUT(); return; L_0889DA00: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889DA7C; } @@ -4580,7 +4589,17 @@ L_0889DA7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DA8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -4602,7 +4621,6 @@ L_0889DA8C: L_0889DABC: aot_gpr_4 = (static_cast(ctx.gpr[16]) < -9999 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DADC; } @@ -4642,7 +4660,6 @@ L_0889DAF8: goto L_0889D964; L_0889DB04: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_0889DB3C; } @@ -4669,7 +4686,6 @@ L_0889DB28: AOT_REGCACHE_SYNC_OUT(); return; L_0889DB34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889DB74; } @@ -4717,7 +4733,17 @@ L_0889DB74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DB90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4735,7 +4761,6 @@ L_0889DB90: L_0889DBB0: aot_gpr_4 = (static_cast(ctx.gpr[16]) < -9999 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DBD0; } @@ -4775,7 +4800,6 @@ L_0889DBEC: goto L_0889D964; L_0889DBF8: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_0889DC44; } @@ -4804,7 +4828,6 @@ L_0889DC20: goto L_0889D964; L_0889DC2C: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_0889DC3C; } @@ -4820,7 +4843,6 @@ L_0889DC34: } L_0889DC3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889DC94; } @@ -4828,7 +4850,6 @@ L_0889DC3C: } L_0889DC44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889DC94; } @@ -4849,7 +4870,6 @@ L_0889DC5C: AOT_REGCACHE_SYNC_OUT(); return; L_0889DC68: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889DC84; } @@ -4891,7 +4911,17 @@ L_0889DC94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DCAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4902,7 +4932,6 @@ L_0889DCAC: aot_gpr_4 = (aot_gpr_4 - ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DCDC; } @@ -4942,7 +4971,17 @@ L_0889DD00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DD14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -4952,7 +4991,6 @@ L_0889DD14: { const std::uint32_t aot_run_words[5]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DDCC; } @@ -4991,7 +5029,6 @@ L_0889DD6C: L_0889DD84: aot_gpr_6 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0889DD9C; } @@ -5008,7 +5045,6 @@ L_0889DD90: } L_0889DD9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889DDB0; } @@ -5017,7 +5053,6 @@ L_0889DD9C: L_0889DDA4: aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DD5C; } @@ -5050,7 +5085,17 @@ L_0889DDCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DDEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5060,7 +5105,6 @@ L_0889DDEC: goto L_0889DCAC; L_0889DE00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889DE10; } @@ -5079,7 +5123,17 @@ L_0889DE10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DE24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -5105,7 +5159,6 @@ L_0889DE58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DE70; } @@ -5146,7 +5199,17 @@ L_0889DE98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DEB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5170,7 +5233,17 @@ L_0889DED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DEF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5194,7 +5267,6 @@ L_0889DF1C: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889DF7C; } @@ -5224,7 +5296,6 @@ L_0889DF5C: AOT_REGCACHE_SYNC_OUT(); return; L_0889DF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889DFAC; } @@ -5236,7 +5307,6 @@ L_0889DF7C: goto L_0889DCAC; L_0889DF84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889DF98; } @@ -5269,7 +5339,17 @@ L_0889DFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DFC8: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(8), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 + static_cast(12)); @@ -5279,7 +5359,17 @@ L_0889DFC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889DFDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5306,7 +5396,6 @@ L_0889E010: aot_gpr_4 = (aot_gpr_4 ^ 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889E068; } @@ -5377,7 +5466,17 @@ L_0889E090: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E0A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5429,7 +5528,17 @@ L_0889E104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E124: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1032), ctx.gpr[16]); @@ -5502,7 +5611,6 @@ L_0889E1C4: goto L_0889E0A8; L_0889E1D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889E340; } @@ -5567,7 +5675,6 @@ L_0889E238: } L_0889E240: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889E290; } @@ -5586,7 +5693,6 @@ L_0889E248: } L_0889E25C: aot_gpr_31 = (0x0889E264u); - // nop ctx.pc = 0x08B7363Cu; AOT_REGCACHE_SYNC_OUT(); return; L_0889E264: @@ -5600,7 +5706,6 @@ L_0889E264: } L_0889E270: aot_gpr_31 = (0x0889E278u); - // nop ctx.pc = 0x08B7368Cu; AOT_REGCACHE_SYNC_OUT(); return; L_0889E278: @@ -5650,7 +5755,6 @@ L_0889E2BC: } L_0889E2D8: aot_gpr_31 = (0x0889E2E0u); - // nop ctx.pc = 0x08B7363Cu; AOT_REGCACHE_SYNC_OUT(); return; L_0889E2E0: @@ -5669,7 +5773,6 @@ L_0889E2EC: goto L_0889E0A8; L_0889E2F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889E340; } @@ -5677,12 +5780,10 @@ L_0889E2F8: } L_0889E300: aot_gpr_31 = (0x0889E308u); - // nop ctx.pc = 0x08B7368Cu; AOT_REGCACHE_SYNC_OUT(); return; L_0889E308: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0889E330; } @@ -5701,7 +5802,6 @@ L_0889E31C: goto L_0889E0A8; L_0889E328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889E340; } @@ -5733,11 +5833,20 @@ L_0889E340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E368: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889E37C; } @@ -5758,11 +5867,20 @@ L_0889E37C: goto L_0889E388; L_0889E388: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_5); @@ -5781,7 +5899,17 @@ L_0889E3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E3BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5814,7 +5942,6 @@ L_0889E3F0: L_0889E3FC: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0889E42C; } @@ -5835,7 +5962,6 @@ L_0889E414: AOT_REGCACHE_SYNC_OUT(); return; L_0889E424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889E464; } @@ -5877,7 +6003,17 @@ L_0889E464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E47C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5920,7 +6056,17 @@ L_0889E4BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E4D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5941,7 +6087,17 @@ L_0889E4F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5962,7 +6118,17 @@ L_0889E524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E534: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5993,7 +6159,17 @@ L_0889E568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E57C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6008,7 +6184,6 @@ L_0889E594: AOT_REGCACHE_SYNC_OUT(); return; L_0889E59C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889E5BC; } @@ -6026,7 +6201,6 @@ L_0889E5A4: } L_0889E5B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889E5C4; } @@ -6055,7 +6229,17 @@ L_0889E5C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E5DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6090,7 +6274,17 @@ L_0889E60C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E620: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6125,7 +6319,17 @@ L_0889E650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E664: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6188,12 +6392,21 @@ L_0889E6D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E6F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889E738; } @@ -6218,7 +6431,6 @@ L_0889E718: L_0889E724: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0889E738; } @@ -6226,7 +6438,6 @@ L_0889E724: } L_0889E730: aot_gpr_31 = (0x0889E738u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889E738u) goto L_0889E738; AOT_REGCACHE_SYNC_OUT(); return; L_0889E738: @@ -6236,7 +6447,17 @@ L_0889E738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E744: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6286,7 +6507,6 @@ L_0889E79C: goto L_0889E7A0; L_0889E7A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889E7B0; } @@ -6309,7 +6529,17 @@ L_0889E7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E7C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 2u); @@ -6381,7 +6611,6 @@ L_0889E844: L_0889E850: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889E888; } @@ -6433,7 +6662,17 @@ L_0889E894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E8EC: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); jump_target = aot_gpr_31; @@ -6441,7 +6680,17 @@ L_0889E8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E8F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2186u << 16u); @@ -6460,7 +6709,17 @@ L_0889E914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E924: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); jump_target = aot_gpr_31; @@ -6468,7 +6727,17 @@ L_0889E924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2186u << 16u); @@ -6487,7 +6756,17 @@ L_0889E94C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E95C: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); jump_target = aot_gpr_31; @@ -6495,7 +6774,17 @@ L_0889E95C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E968: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2186u << 16u); @@ -6514,17 +6803,25 @@ L_0889E984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E994: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0889E9A4u); - // nop goto L_0889E8F8; L_0889E9A4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889E9C0; } @@ -6553,7 +6850,17 @@ L_0889E9C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889E9D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), ctx.gpr[16], aot_gpr_31}; @@ -6577,7 +6884,6 @@ L_0889E9E8: AOT_REGCACHE_SYNC_OUT(); return; L_0889EA04: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889EA48; } @@ -6601,7 +6907,6 @@ L_0889EA0C: } L_0889EA40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889EAC8; } @@ -6673,7 +6978,17 @@ L_0889EAC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6692,7 +7007,17 @@ L_0889EAF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EB08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2186u << 16u); @@ -6711,7 +7036,17 @@ L_0889EB24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EB34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6725,7 +7060,6 @@ L_0889EB34: L_0889EB50: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889EB78; } @@ -6763,7 +7097,17 @@ L_0889EB80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EB94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -6802,7 +7146,17 @@ L_0889EBCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EBE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6862,7 +7216,17 @@ L_0889EC00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EC9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[16]); @@ -6885,7 +7249,17 @@ L_0889ECC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889ECD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(264), ctx.gpr[16]); @@ -6901,7 +7275,6 @@ L_0889ECD0: } L_0889ED08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889EE14; } @@ -6978,7 +7351,6 @@ L_0889EDAC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); aot_gpr_5 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0889EDD8; } @@ -6993,7 +7365,6 @@ L_0889EDC8: L_0889EDD8: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889EDF8; } @@ -7044,7 +7415,17 @@ L_0889EE14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EE44: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); @@ -7106,9 +7487,7 @@ L_0889EE44: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889EEC8; } @@ -7132,9 +7511,7 @@ L_0889EEC8: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889EEFC; } @@ -7151,7 +7528,6 @@ L_0889EEE0: goto L_0889EEFC; L_0889EEFC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0889EF34; } @@ -7218,7 +7594,6 @@ L_0889EF34: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -7244,9 +7619,7 @@ L_0889EF74: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889EFA8; } @@ -7263,7 +7636,6 @@ L_0889EF8C: goto L_0889EFA8; L_0889EFA8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0889EFE0; } @@ -7330,7 +7702,17 @@ L_0889EFE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889EFE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-640)); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7347,7 +7729,6 @@ L_0889EFE8: ctx.fpr[15] = std::bit_cast(0u); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[15])) && aot_fpr_14 == ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = ctx.fpr[16] - ctx.fpr[0]; if (branch_taken) { @@ -7358,9 +7739,7 @@ L_0889EFE8: L_0889F030: aot_fpr_14 = ctx.fpr[18] / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F064; } @@ -7368,9 +7747,7 @@ L_0889F030: } L_0889F044: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F064; } @@ -7386,7 +7763,6 @@ L_0889F054: } L_0889F05C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889F16C; } @@ -7512,9 +7888,7 @@ L_0889F06C: { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } ctx.fpr[19] = ctx.fpr[19] + ctx.fpr[0]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F164; } @@ -7535,7 +7909,6 @@ L_0889F144: } L_0889F164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889F208; } @@ -7673,9 +8046,7 @@ L_0889F16C: ctx.gpr[11] = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[19] = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F208; } @@ -7692,9 +8063,7 @@ L_0889F1FC: } L_0889F208: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(ctx.fpr[15])) && ctx.fpr[16] == ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F3F4; } @@ -7703,9 +8072,7 @@ L_0889F208: L_0889F218: aot_fpr_14 = ctx.fpr[17] / ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F24C; } @@ -7713,9 +8080,7 @@ L_0889F218: } L_0889F22C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F24C; } @@ -7731,7 +8096,6 @@ L_0889F23C: } L_0889F244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889F358; } @@ -7858,9 +8222,7 @@ L_0889F254: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F350; } @@ -7881,7 +8243,6 @@ L_0889F330: } L_0889F350: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889F3F4; } @@ -8019,9 +8380,7 @@ L_0889F358: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F3F4; } @@ -8045,7 +8404,17 @@ L_0889F3F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0889F400: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), ctx.gpr[16]); @@ -8065,7 +8434,6 @@ L_0889F400: AOT_REGCACHE_SYNC_OUT(); return; L_0889F444: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F460; } @@ -8073,12 +8441,10 @@ L_0889F444: } L_0889F44C: aot_gpr_31 = (0x0889F454u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889F454u) goto L_0889F454; AOT_REGCACHE_SYNC_OUT(); return; L_0889F454: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F460; } @@ -8091,7 +8457,6 @@ L_0889F460: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F548; } @@ -8099,7 +8464,6 @@ L_0889F460: } L_0889F470: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0889F548; } @@ -8112,7 +8476,6 @@ L_0889F478: AOT_REGCACHE_SYNC_OUT(); return; L_0889F480: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889F49C; } @@ -8141,7 +8504,6 @@ L_0889F4A4: AOT_REGCACHE_SYNC_OUT(); return; L_0889F4AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889F524; } @@ -8149,12 +8511,10 @@ L_0889F4AC: } L_0889F4B4: aot_gpr_31 = (0x0889F4BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 273u, 0x088954ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889F4BCu) goto L_0889F4BC; AOT_REGCACHE_SYNC_OUT(); return; L_0889F4BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889F524; } @@ -8173,7 +8533,6 @@ L_0889F4C4: AOT_REGCACHE_SYNC_OUT(); return; L_0889F4E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F50C; } @@ -8200,7 +8559,6 @@ L_0889F50C: AOT_REGCACHE_SYNC_OUT(); return; L_0889F514: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F540; } @@ -8225,7 +8583,6 @@ L_0889F524: goto L_0889F540; L_0889F540: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889F554; } @@ -8242,7 +8599,6 @@ L_0889F554: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F578; } @@ -8252,7 +8608,6 @@ L_0889F568: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F590; } @@ -8265,7 +8620,6 @@ L_0889F578: AOT_REGCACHE_SYNC_OUT(); return; L_0889F580: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889F5A8; } @@ -8273,7 +8627,6 @@ L_0889F580: } L_0889F588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889F618; } @@ -8296,7 +8649,6 @@ L_0889F5A0: } L_0889F5A8: aot_gpr_31 = (0x0889F5B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889F5B0u) goto L_0889F5B0; AOT_REGCACHE_SYNC_OUT(); return; L_0889F5B0: @@ -8313,7 +8665,6 @@ L_0889F5C0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2318)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0889F5F8; } @@ -8323,7 +8674,6 @@ L_0889F5D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889F5F8; } @@ -8335,7 +8685,6 @@ L_0889F5E0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889F618; } @@ -8371,7 +8720,6 @@ L_0889F618: AOT_REGCACHE_SYNC_OUT(); return; L_0889F620: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F670; } @@ -8381,7 +8729,6 @@ L_0889F628: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889F670; } @@ -8391,7 +8738,6 @@ L_0889F638: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889F670; } @@ -8399,13 +8745,11 @@ L_0889F638: } L_0889F648: aot_gpr_31 = (0x0889F650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889F650u) goto L_0889F650; AOT_REGCACHE_SYNC_OUT(); return; L_0889F650: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(2312))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0889F670; } @@ -8416,7 +8760,6 @@ L_0889F65C: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F6FC; } @@ -8427,9 +8770,7 @@ L_0889F670: aot_fpr_20 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F6D8; } @@ -8463,7 +8804,6 @@ L_0889F6C0: ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F710; } @@ -8518,7 +8858,6 @@ L_0889F71C: AOT_REGCACHE_SYNC_OUT(); return; L_0889F724: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F744; } @@ -8530,7 +8869,6 @@ L_0889F72C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 44u, 0x088A0284u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8553,7 +8891,6 @@ L_0889F754: AOT_REGCACHE_SYNC_OUT(); return; L_0889F75C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F784; } @@ -8576,7 +8913,6 @@ L_0889F77C: L_0889F784: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0889F85C; } @@ -8589,7 +8925,6 @@ L_0889F790: AOT_REGCACHE_SYNC_OUT(); return; L_0889F798: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889F85C; } @@ -8611,7 +8946,6 @@ L_0889F7B0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889F7D4; } @@ -8632,7 +8966,6 @@ L_0889F7D4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889F7F0; } @@ -8645,7 +8978,6 @@ L_0889F7F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889F808; } @@ -8657,9 +8989,7 @@ L_0889F800: goto L_0889F808; L_0889F808: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F85C; } @@ -8671,7 +9001,6 @@ L_0889F818: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1732))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889F848; } @@ -8683,7 +9012,6 @@ L_0889F830: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889F85C; } @@ -8708,9 +9036,7 @@ L_0889F85C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F8E0; } @@ -8758,9 +9084,7 @@ L_0889F878: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889F8E0; } @@ -8782,7 +9106,6 @@ L_0889F8BC: L_0889F8E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1772))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F914; } @@ -8791,7 +9114,6 @@ L_0889F8E0: L_0889F8EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1776))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889F914; } @@ -8804,7 +9126,6 @@ L_0889F8F8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889F92C; } @@ -8820,7 +9141,6 @@ L_0889F914: goto L_0889F924; L_0889F924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889FBC0; } @@ -8847,7 +9167,6 @@ L_0889F94C: ctx.gpr[20] = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FBC0; } @@ -8857,7 +9176,6 @@ L_0889F95C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889FBC0; } @@ -8868,7 +9186,6 @@ L_0889F96C: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FBC0; } @@ -8876,7 +9193,6 @@ L_0889F96C: } L_0889F980: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0889FBC0; } @@ -8884,7 +9200,6 @@ L_0889F980: } L_0889F988: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (0u | 61u); if (branch_taken) { @@ -8898,7 +9213,6 @@ L_0889F998: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1732))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FA3C; } @@ -8910,7 +9224,6 @@ L_0889F9B0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889FA3C; } @@ -8933,7 +9246,6 @@ L_0889F9DC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889FA0C; } @@ -8945,9 +9257,7 @@ L_0889F9F4: L_0889F9F8: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889FA3C; } @@ -8955,7 +9265,6 @@ L_0889F9F8: } L_0889FA0C: aot_gpr_31 = (0x0889FA14u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FA14u) goto L_0889FA14; AOT_REGCACHE_SYNC_OUT(); return; L_0889FA14: @@ -8972,9 +9281,7 @@ L_0889FA24: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889FBC0; } @@ -8985,7 +9292,6 @@ L_0889FA3C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0889FA68; } @@ -8997,7 +9303,6 @@ L_0889FA50: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0889FA70; } @@ -9012,7 +9317,6 @@ L_0889FA70: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FB28; } @@ -9035,7 +9339,6 @@ L_0889FAA4: AOT_REGCACHE_SYNC_OUT(); return; L_0889FAAC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0889FAD4; } @@ -9062,7 +9365,6 @@ L_0889FAD4: AOT_REGCACHE_SYNC_OUT(); return; L_0889FADC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889FB00; } @@ -9097,7 +9399,6 @@ L_0889FB10: AOT_REGCACHE_SYNC_OUT(); return; L_0889FB20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0889FB38; } @@ -9123,9 +9424,7 @@ L_0889FB38: L_0889FB48: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889FB88; } @@ -9145,7 +9444,6 @@ L_0889FB5C: AOT_REGCACHE_SYNC_OUT(); return; L_0889FB80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 43u, 0x088A027Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9155,7 +9453,6 @@ L_0889FB88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 43u, 0x088A027Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9192,9 +9489,7 @@ L_0889FBC0: } L_0889FBDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889FE60; } @@ -9206,7 +9501,6 @@ L_0889FBEC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889FE60; } @@ -9218,7 +9512,6 @@ L_0889FC04: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0889FE60; } @@ -9228,7 +9521,6 @@ L_0889FC1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FC3C; } @@ -9238,7 +9530,6 @@ L_0889FC2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FD30; } @@ -9269,7 +9560,6 @@ L_0889FC5C: AOT_REGCACHE_SYNC_OUT(); return; L_0889FC78: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0889FD44; } @@ -9277,7 +9567,6 @@ L_0889FC78: } L_0889FC80: aot_gpr_31 = (0x0889FC88u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FC88u) goto L_0889FC88; AOT_REGCACHE_SYNC_OUT(); return; L_0889FC88: @@ -9307,7 +9596,6 @@ L_0889FC9C: AOT_REGCACHE_SYNC_OUT(); return; L_0889FCD4: aot_gpr_31 = (0x0889FCDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FCDCu) goto L_0889FCDC; AOT_REGCACHE_SYNC_OUT(); return; L_0889FCDC: @@ -9337,7 +9625,6 @@ L_0889FCF8: AOT_REGCACHE_SYNC_OUT(); return; L_0889FD28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 40u, 0x088A0238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9359,7 +9646,6 @@ L_0889FD3C: } L_0889FD44: aot_gpr_31 = (0x0889FD4Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FD4Cu) goto L_0889FD4C; AOT_REGCACHE_SYNC_OUT(); return; L_0889FD4C: @@ -9389,9 +9675,7 @@ L_0889FD60: AOT_REGCACHE_SYNC_OUT(); return; L_0889FD98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0889FE04; } @@ -9399,7 +9683,6 @@ L_0889FD98: } L_0889FDA8: aot_gpr_31 = (0x0889FDB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FDB0u) goto L_0889FDB0; AOT_REGCACHE_SYNC_OUT(); return; L_0889FDB0: @@ -9429,7 +9712,6 @@ L_0889FDCC: AOT_REGCACHE_SYNC_OUT(); return; L_0889FDFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 40u, 0x088A0238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9437,7 +9719,6 @@ L_0889FDFC: } L_0889FE04: aot_gpr_31 = (0x0889FE0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FE0Cu) goto L_0889FE0C; AOT_REGCACHE_SYNC_OUT(); return; L_0889FE0C: @@ -9467,7 +9748,6 @@ L_0889FE20: AOT_REGCACHE_SYNC_OUT(); return; L_0889FE58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 40u, 0x088A0238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9477,7 +9757,6 @@ L_0889FE60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FEA4; } @@ -9487,7 +9766,6 @@ L_0889FE70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FEA4; } @@ -9508,7 +9786,6 @@ L_0889FEA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 40u, 0x088A0238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9518,7 +9795,6 @@ L_0889FEB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 40u, 0x088A0238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9528,7 +9804,6 @@ L_0889FEC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FF04; } @@ -9538,7 +9813,6 @@ L_0889FED4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FF04; } @@ -9548,7 +9822,6 @@ L_0889FEE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FF04; } @@ -9558,7 +9831,6 @@ L_0889FEF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FF20; } @@ -9569,7 +9841,6 @@ L_0889FF04: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0889FF80; } @@ -9577,7 +9848,6 @@ L_0889FF04: } L_0889FF18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 7u, 0x088A0048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9585,7 +9855,6 @@ L_0889FF18: } L_0889FF20: aot_gpr_31 = (0x0889FF28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0889FF28u) goto L_0889FF28; AOT_REGCACHE_SYNC_OUT(); return; L_0889FF28: @@ -9625,7 +9894,6 @@ L_0889FF78: L_0889FF80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 6u, 0x088A0040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9641,7 +9909,6 @@ L_0889FF8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FFE8; } @@ -9654,7 +9921,6 @@ L_0889FFB4: AOT_REGCACHE_SYNC_OUT(); return; L_0889FFBC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0889FFF4; } @@ -9672,7 +9938,6 @@ L_0889FFCC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0889FFF4; } @@ -9694,7 +9959,6 @@ L_0889FFF4: AOT_REGCACHE_SYNC_OUT(); return; L_0889FFFC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 5u, 0x088A0034u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0039.cpp b/profiles/vcs/generated/generated_unit_0039.cpp index f85935e..6076a2d 100644 --- a/profiles/vcs/generated/generated_unit_0039.cpp +++ b/profiles/vcs/generated/generated_unit_0039.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0039[4095] = { - 1, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 13, 0, 0, 0, 14, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 17, 0, 18, - 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 21, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 24, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, - 0, 27, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, 31, 0, 0, 32, 0, 33, 0, 0, 34, 0, 35, 0, 0, 0, 0, 36, 0, 0, 37, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 43, - 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, - 0, 50, 0, 51, 0, 52, 0, 53, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, - 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, - 0, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 0, 0, 84, 0, 85, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89, 0, 90, 0, 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, - 0, 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 103, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 109, 0, 0, 0, 110, 0, 111, 0, 0, - 112, 0, 0, 0, 113, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 119, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 122, 123, 0, 0, 124, 0, 125, 0, 126, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, - 132, 0, 133, 0, 134, 0, 0, 0, 135, 136, 0, 0, 137, 0, 138, 0, 0, 0, 0, 139, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 0, - 0, 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 146, 0, 147, 0, 0, 0, - 148, 0, 149, 0, 0, 0, 150, 0, 0, 0, 151, 152, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 156, 0, 157, - 0, 158, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, - 0, 163, 0, 164, 0, 165, 0, 166, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, - 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 183, 0, 0, 0, - 0, 184, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 0, 0, 192, 193, - 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 208, 0, 209, 0, 0, 0, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, - 0, 0, 0, 0, 215, 0, 216, 0, 217, 0, 0, 0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 220, 0, 221, 0, 222, 0, 0, 0, 0, 0, 223, - 0, 0, 0, 224, 0, 0, 0, 225, 0, 226, 0, 0, 0, 227, 0, 228, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, - 0, 0, 0, 0, 233, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 238, 0, 239, 0, 0, 0, 240, 0, - 0, 241, 0, 0, 0, 242, 0, 243, 0, 0, 0, 244, 0, 245, 0, 0, 0, 246, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 249, 0, - 250, 0, 0, 0, 251, 0, 0, 0, 252, 0, 253, 0, 254, 0, 0, 0, 255, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 260, - 0, 0, 0, 261, 0, 0, 0, 262, 0, 263, 0, 0, 0, 264, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 268, 0, 269, 270, - 0, 0, 0, 271, 0, 272, 273, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 278, 0, 279, 0, - 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 282, 283, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 287, 0, - 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 0, 0, - 293, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, - 299, 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 0, 0, 0, - 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 309, 0, 0, 0, 0, 310, 0, - 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, - 0, 0, 0, 317, 0, 0, 318, 0, 319, 0, 0, 320, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 324, - 0, 0, 325, 0, 326, 0, 327, 0, 328, 0, 0, 329, 0, 0, 330, 0, 0, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 0, 336, 0, 0, - 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 339, 340, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 345, 0, 346, - 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, - 0, 355, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 362, - 0, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 368, 0, 0, 369, 0, 0, 0, 370, 0, 371, 0, 372, 0, 0, 0, - 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 381, 0, 382, 0, 0, 383, 0, 0, 384, 0, 385, 0, 386, 0, - 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 0, 0, 389, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 394, 0, - 0, 395, 0, 396, 0, 397, 0, 398, 0, 399, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 404, 0, 405, 0, 0, 0, 0, - 406, 0, 0, 407, 408, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 0, 0, - 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, - 0, 423, 424, 0, 0, 0, 0, 425, 0, 0, 426, 0, 427, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, 0, 0, 431, 0, 432, 0, 0, - 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 437, 438, 0, 0, 0, 0, - 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 443, 444, 0, 0, 0, 0, 0, 0, 445, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 450, 0, 0, 451, - 0, 0, 0, 452, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 458, 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 462, 0, 463, 0, 0, 464, 0, 465, 0, 466, 0, 0, 0, 467, 0, 468, - 0, 469, 0, 470, 0, 471, 0, 472, 473, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, - 0, 0, 0, 0, 478, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, - 483, 0, 0, 484, 0, 485, 0, 486, 0, 487, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, - 0, 0, 491, 0, 492, 0, 493, 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 497, 0, 498, 0, 0, 0, 499, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 500, 0, 0, 0, 0, 501, 0, 0, 0, 502, 0, 503, 0, 504, 505, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, - 0, 0, 0, 508, 0, 0, 509, 0, 0, 0, 0, 0, 510, 511, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 513, 0, 0, 514, 0, 515, 0, 516, 0, 517, 0, 0, 518, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, 0, 0, 522, 0, 523, 0, 0, 0, - 524, 0, 0, 0, 525, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, 530, 0, 531, 0, 532, 0, - 533, 0, 0, 534, 0, 0, 0, 0, 0, 535, 0, 536, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 0, 0, 539, 0, 540, 0, - 0, 0, 0, 541, 0, 542, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 545, 546, 0, 0, 0, 0, 547, 0, 0, 0, - 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, - 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, - 0, 0, 557, 0, 0, 0, 0, 0, 558, 0, 559, 0, 560, 0, 0, 0, 561, 562, 0, 563, 0, 0, 0, 0, 0, 564, 0, 565, 0, 566, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 572, - 0, 0, 0, 0, 0, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, - 0, 581, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 584, 0, 585, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, - 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, - 594, 0, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 0, - 616, 0, 617, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, - 0, 0, 625, 0, 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, - 0, 633, 0, 0, 0, 634, 0, 635, 0, 0, 0, 636, 0, 0, 637, 0, 638, 0, 639, 0, 640, 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, 0, - 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 646, 0, 0, 647, 0, 0, - 0, 0, 648, 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 651, 0, 0, 652, 0, 0, 653, 0, 0, 654, 655, 0, 0, 656, 0, 657, 0, 658, 0, - 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 662, 0, 663, 0, 664, 0, 665, 0, 666, 0, 0, 0, 0, - 667, 0, 668, 0, 0, 0, 669, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, - 0, 0, 0, 0, 679, 0, 680, 0, 0, 681, 0, 682, 0, 0, 0, 683, 0, 684, 0, 0, 685, 0, 686, 0, 687, 0, 688, 0, 0, 0, 0, 0, - 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 691, 0, 692, 0, 0, 0, 0, 0, 0, 0, 693, 0, - 0, 0, 694, 0, 0, 695, 0, 0, 696, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, - 0, 0, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 710, 0, 0, 711, 0, 712, 713, 0, 0, - 0, 714, 0, 0, 715, 0, 716, 717, 0, 0, 0, 0, 0, 718, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 724, 0, 0, 725, 0, 726, 0, 727, 0, 0, 728, 0, 729, 0, - 0, 730, 0, 731, 0, 0, 732, 0, 733, 0, 734, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 736, 737, 0, 738, 0, 0, 739, 0, - 0, 0, 740, 0, 741, 0, 0, 742, 0, 743, 0, 0, 744, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, - 0, 0, 0, 748, 0, 749, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, 0, 756, 0, 0, 757, 0, 758, 0, - 759, 0, 760, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 0, 0, 0, 765, 0, 0, - 0, 766, 0, 767, 0, 0, 0, 768, 0, 769, 0, 770, 0, 771, 0, 772, 0, 0, 0, 773, 0, 774, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 776, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 780, 0, 781, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 784, - 0, 0, 0, 0, 785, 0, 0, 0, 0, 786, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 793, 0, 0, 0, 0, 794, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 797, 0, 0, 798, - 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 800, 0, 801, 0, 802, 803, 0, 0, 0, 0, 804, 0, 0, 805, 0, 806, 0, 0, 0, 0, 0, - 0, 0, 807, 0, 0, 0, 0, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 811, 0, 812, 0, 813, 814, 0, 0, 0, - 0, 815, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 818, 0, 0, 819, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, - 0, 821, 0, 822, 0, 823, 824, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 827, 0, 828, 0, 0, 0, 0, 0, - 0, 829, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, 831, 0, 832, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 834, 0, 0, 835, - 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 837, 0, 838, 0, 839, 840, 0, 0, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 843, - 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 845, 0, 0, 846, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, - 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, 0, 0, 851, 0, 0, 0, 0, - 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 0, 855, 0, 856, 0, 0, 0, 857, - 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 859, 0, - 860, 0, 0, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, 863, 0, 0, 0, 0, 864, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 865, 0, 0, 0, 866, 0, 867, 0, 868, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 870, 0, 0, 871, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 872, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, 874, 0, 875, 0, 0, 0, 0, 876, 0, 877, 0, 0, 878, 0, 879, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0039[64] = { + 0xA0A44C080425240Bull, 0x90A5228A11228488ull, 0x06082082C0084440ull, 0x22110822AAA204AAull, + 0x02000000040010A0ull, 0x0050080050000000ull, 0x00850A40010A0008ull, 0xA2088A22900042A0ull, + 0x0C80815128944820ull, 0x1421154D00000100ull, 0x1510001804485315ull, 0x2040002AA2084C45ull, + 0x0000440A241024AAull, 0x000401021222A048ull, 0x00804110C2900140ull, 0x2008020080200802ull, + 0x80088A0A00220080ull, 0x4822A28882A44150ull, 0x414228A245208230ull, 0xD110A288A8891511ull, + 0x50410C4452220868ull, 0x1021400902401041ull, 0x422840010A800109ull, 0x8082294804888804ull, + 0xA882588825544954ull, 0x820A208A22088154ull, 0x2000C80815128944ull, 0x4501514054951100ull, + 0x0040A0990A9222AAull, 0x90100102050010A0ull, 0x0D08010228905486ull, 0x9120240081824050ull, + 0xA2A5481200408928ull, 0x02401030480A01AAull, 0x04544154100412A9ull, 0x000830480A06A210ull, + 0x5504083114912552ull, 0x10C1202850480A09ull, 0x0810410810040404ull, 0x881109002A0B1504ull, + 0x0814541288805540ull, 0x02AAAAA900904028ull, 0x0001008524102AA8ull, 0x5022824402080421ull, + 0x24800410089548A2ull, 0x0AA8104454C92904ull, 0x2002A00080248445ull, 0x4050200405528A50ull, + 0x1000028020000324ull, 0x1029000000000090ull, 0x020120D234900200ull, 0x4B01054A52A54800ull, + 0x0004042810821294ull, 0x20508015520A1001ull, 0x1500400A00A8AA8Aull, 0x0200421080800400ull, + 0x9040044200280410ull, 0x1A8409040521A840ull, 0x0504206A10241012ull, 0xA081A84090405042ull, + 0x0840000140019040ull, 0x400000208A101008ull, 0x00082A2004280021ull, 0x5285082002400000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0039[64] = { + 1u, 19u, 38u, 50u, 69u, 74u, 79u, 89u, 104u, 120u, 132u, 148u, 163u, 176u, 187u, 198u, + 205u, 215u, 233u, 250u, 271u, 288u, 299u, 311u, 325u, 347u, 363u, 378u, 395u, 413u, 423u, 439u, + 452u, 469u, 483u, 500u, 513u, 533u, 548u, 557u, 573u, 589u, 607u, 620u, 633u, 648u, 667u, 679u, + 694u, 702u, 708u, 721u, 740u, 752u, 766u, 782u, 789u, 799u, 815u, 829u, 844u, 852u, 860u, 870u, }; void recomp_unit_0039_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0039_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088A0000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0039[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0039[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0039[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088A0000; @@ -1051,7 +958,6 @@ LOCAL_DISPATCH: } } L_088A0000: - // nop goto L_088A0004; L_088A0004: aot_gpr_31 = (0x088A000Cu); @@ -1065,7 +971,6 @@ L_088A000C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0034; } @@ -1120,7 +1025,6 @@ L_088A0068: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A00AC; } @@ -1131,7 +1035,6 @@ L_088A008C: aot_gpr_4 = (16576u << 16u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_088A00A8; @@ -1147,9 +1050,7 @@ L_088A00AC: goto L_088A00B8; L_088A00B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A00FC; } @@ -1163,7 +1064,6 @@ L_088A00C8: AOT_REGCACHE_SYNC_OUT(); return; L_088A00D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A00FC; } @@ -1180,7 +1080,6 @@ L_088A00DC: AOT_REGCACHE_SYNC_OUT(); return; L_088A00F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1188,9 +1087,7 @@ L_088A00F4: } L_088A00FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A01DC; } @@ -1200,7 +1097,6 @@ L_088A010C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A0238; } @@ -1209,7 +1105,6 @@ L_088A010C: L_088A011C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088A0238; } @@ -1220,7 +1115,6 @@ L_088A0128: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1228,7 +1122,6 @@ L_088A0128: } L_088A013C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1238,7 +1131,6 @@ L_088A0144: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1270,14 +1162,12 @@ L_088A0170: } L_088A0184: aot_gpr_31 = (0x088A018Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A018Cu) goto L_088A018C; AOT_REGCACHE_SYNC_OUT(); return; L_088A018C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(2312))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1285,14 +1175,12 @@ L_088A018C: } L_088A019C: aot_gpr_31 = (0x088A01A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A01A4u) goto L_088A01A4; AOT_REGCACHE_SYNC_OUT(); return; L_088A01A4: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A01C8; } @@ -1306,7 +1194,6 @@ L_088A01B4: AOT_REGCACHE_SYNC_OUT(); return; L_088A01C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1320,7 +1207,6 @@ L_088A01C8: AOT_REGCACHE_SYNC_OUT(); return; L_088A01D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1331,7 +1217,6 @@ L_088A01DC: ctx.gpr[17] = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1350,7 +1235,6 @@ L_088A01FC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (0u | 22u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088A0238; } @@ -1360,7 +1244,6 @@ L_088A0218: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0238; } @@ -1378,7 +1261,6 @@ L_088A0238: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A027C; } @@ -1403,7 +1285,6 @@ L_088A0278: goto L_088A027C; L_088A027C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A08E8; } @@ -1445,7 +1326,6 @@ L_088A02CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A035C; } @@ -1461,7 +1341,6 @@ L_088A02E8: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A035C; } @@ -1474,7 +1353,6 @@ L_088A0304: AOT_REGCACHE_SYNC_OUT(); return; L_088A030C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A0328; } @@ -1488,7 +1366,6 @@ L_088A0314: L_088A031C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A035C; } @@ -1508,7 +1385,6 @@ L_088A0344: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A036C; } @@ -1516,7 +1392,6 @@ L_088A0344: } L_088A0354: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A0384; } @@ -1542,7 +1417,6 @@ L_088A036C: AOT_REGCACHE_SYNC_OUT(); return; L_088A0374: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A0384; } @@ -1557,7 +1431,6 @@ L_088A0384: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A08E8; } @@ -1569,7 +1442,6 @@ L_088A0394: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A08E8; } @@ -1580,7 +1452,6 @@ L_088A03AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0784; } @@ -1588,7 +1459,6 @@ L_088A03AC: } L_088A03C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16448u << 16u); if (branch_taken) { @@ -1599,9 +1469,7 @@ L_088A03C0: L_088A03D0: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A0784; } @@ -1629,7 +1497,6 @@ L_088A03F4: AOT_REGCACHE_SYNC_OUT(); return; L_088A0414: aot_gpr_31 = (0x088A041Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A041Cu) goto L_088A041C; AOT_REGCACHE_SYNC_OUT(); return; L_088A041C: @@ -1686,9 +1553,7 @@ L_088A0468: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A06AC; } @@ -1746,7 +1611,6 @@ L_088A04E4: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1784,9 +1648,7 @@ L_088A05AC: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A05D8; } @@ -1827,9 +1689,7 @@ L_088A060C: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A06A4; } @@ -1837,7 +1697,6 @@ L_088A060C: } L_088A0644: aot_gpr_31 = (0x088A064Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A064Cu) goto L_088A064C; AOT_REGCACHE_SYNC_OUT(); return; L_088A064C: @@ -1873,7 +1732,6 @@ L_088A0698: AOT_REGCACHE_SYNC_OUT(); return; L_088A06A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A077C; } @@ -1882,9 +1740,7 @@ L_088A06A4: L_088A06AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2060))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A071C; } @@ -1892,7 +1748,6 @@ L_088A06AC: } L_088A06C0: aot_gpr_31 = (0x088A06C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A06C8u) goto L_088A06C8; AOT_REGCACHE_SYNC_OUT(); return; L_088A06C8: @@ -1922,7 +1777,6 @@ L_088A06DC: AOT_REGCACHE_SYNC_OUT(); return; L_088A0714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A077C; } @@ -1930,7 +1784,6 @@ L_088A0714: } L_088A071C: aot_gpr_31 = (0x088A0724u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A0724u) goto L_088A0724; AOT_REGCACHE_SYNC_OUT(); return; L_088A0724: @@ -1966,7 +1819,6 @@ L_088A0770: AOT_REGCACHE_SYNC_OUT(); return; L_088A077C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A08E8; } @@ -1976,7 +1828,6 @@ L_088A0784: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A08E8; } @@ -1986,7 +1837,6 @@ L_088A0794: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A08E8; } @@ -1994,7 +1844,6 @@ L_088A0794: } L_088A07A4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A08E8; } @@ -2004,7 +1853,6 @@ L_088A07AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A08E8; } @@ -2014,7 +1862,6 @@ L_088A07BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A07E4; } @@ -2041,7 +1888,6 @@ L_088A07E4: AOT_REGCACHE_SYNC_OUT(); return; L_088A07F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A08E8; } @@ -2053,7 +1899,6 @@ L_088A07FC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A082C; } @@ -2065,7 +1910,6 @@ L_088A0814: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0838; } @@ -2089,7 +1933,6 @@ L_088A0838: AOT_REGCACHE_SYNC_OUT(); return; L_088A0848: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A085C; } @@ -2113,7 +1956,6 @@ L_088A085C: AOT_REGCACHE_SYNC_OUT(); return; L_088A086C: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A0880; } @@ -2137,7 +1979,6 @@ L_088A0880: AOT_REGCACHE_SYNC_OUT(); return; L_088A0890: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A08A0; } @@ -2208,7 +2049,17 @@ L_088A08EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A0920: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -2236,7 +2087,6 @@ L_088A0920: AOT_REGCACHE_SYNC_OUT(); return; L_088A0980: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A098C; } @@ -2261,12 +2111,10 @@ L_088A0998: } L_088A09A0: aot_gpr_31 = (0x088A09A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A09A8u) goto L_088A09A8; AOT_REGCACHE_SYNC_OUT(); return; L_088A09A8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A09E8; } @@ -2294,7 +2142,6 @@ L_088A09C0: L_088A09D4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); goto L_088A0A90; @@ -2302,7 +2149,6 @@ L_088A09D4: goto L_088A09E8; L_088A09E8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A0A30; } @@ -2312,7 +2158,6 @@ L_088A09F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0A30; } @@ -2333,7 +2178,6 @@ L_088A0A10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A0A30; } @@ -2345,7 +2189,6 @@ L_088A0A20: L_088A0A24: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A0A38; } @@ -2414,7 +2257,6 @@ L_088A0A90: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0AE0; } @@ -2424,7 +2266,6 @@ L_088A0AD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0AF0; } @@ -2432,7 +2273,6 @@ L_088A0AD0: } L_088A0AE0: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088A0B08; } @@ -2440,7 +2280,6 @@ L_088A0AE0: } L_088A0AE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A0B84; } @@ -2473,7 +2312,6 @@ L_088A0B18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0B64; } @@ -2485,7 +2323,6 @@ L_088A0B28: L_088A0B2C: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0B64; } @@ -2496,7 +2333,6 @@ L_088A0B38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A0B64; } @@ -2508,7 +2344,6 @@ L_088A0B4C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A0B84; } @@ -2518,7 +2353,6 @@ L_088A0B64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 54u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A0B7C; } @@ -2539,7 +2373,6 @@ L_088A0B7C: } L_088A0B84: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088A0D3C; } @@ -2547,7 +2380,6 @@ L_088A0B84: } L_088A0B8C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A0D3C; } @@ -2595,9 +2427,7 @@ L_088A0B94: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A0C8C; } @@ -2608,9 +2438,7 @@ L_088A0BD8: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A0C0C; } @@ -2698,9 +2526,7 @@ L_088A0C8C: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A0D3C; } @@ -2710,7 +2536,6 @@ L_088A0CA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A0D3C; } @@ -2766,7 +2591,6 @@ L_088A0D34: } L_088A0D3C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A0D84; } @@ -2776,7 +2600,6 @@ L_088A0D44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A0D84; } @@ -2786,7 +2609,6 @@ L_088A0D54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A0D84; } @@ -2795,7 +2617,6 @@ L_088A0D54: L_088A0D64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2312))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088A0D84; } @@ -2806,7 +2627,6 @@ L_088A0D70: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A0E50; } @@ -2817,7 +2637,6 @@ L_088A0D84: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (ctx.gpr[17] | 0u); if (branch_taken) { @@ -2927,7 +2746,6 @@ L_088A0E78: L_088A0E7C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1929)))))); goto L_088A0EB8; @@ -2961,7 +2779,6 @@ L_088A0EB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -2977,7 +2794,6 @@ L_088A0EDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -2993,7 +2809,6 @@ L_088A0F04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3009,7 +2824,6 @@ L_088A0F2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3025,7 +2839,6 @@ L_088A0F54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3041,7 +2854,6 @@ L_088A0F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3057,7 +2869,6 @@ L_088A0FA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3073,7 +2884,6 @@ L_088A0FCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3089,7 +2899,6 @@ L_088A0FF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1044; } @@ -3105,7 +2914,6 @@ L_088A101C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A108C; } @@ -3128,7 +2936,6 @@ L_088A1054: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A1084; @@ -3136,7 +2943,6 @@ L_088A1054: goto L_088A1084; L_088A1084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1110; } @@ -3146,9 +2952,7 @@ L_088A108C: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A10BC; } @@ -3156,7 +2960,6 @@ L_088A108C: } L_088A10A4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A10BC; } @@ -3166,7 +2969,6 @@ L_088A10AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1110; } @@ -3189,7 +2991,6 @@ L_088A10CC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A10FC; @@ -3213,7 +3014,6 @@ L_088A1110: AOT_REGCACHE_SYNC_OUT(); return; L_088A1118: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1138; } @@ -3225,7 +3025,6 @@ L_088A1120: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A17B4; } @@ -3235,7 +3034,6 @@ L_088A1138: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1154; } @@ -3244,7 +3042,6 @@ L_088A1138: L_088A1148: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A11A4; } @@ -3257,7 +3054,6 @@ L_088A1154: AOT_REGCACHE_SYNC_OUT(); return; L_088A115C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A11A4; } @@ -3276,7 +3072,6 @@ L_088A117C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A119C; } @@ -3286,7 +3081,6 @@ L_088A118C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A11A4; } @@ -3301,7 +3095,6 @@ L_088A11A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A1268; } @@ -3314,7 +3107,6 @@ L_088A11B4: AOT_REGCACHE_SYNC_OUT(); return; L_088A11BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1268; } @@ -3336,7 +3128,6 @@ L_088A11D4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A11F8; } @@ -3357,7 +3148,6 @@ L_088A11F8: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1214; } @@ -3368,9 +3158,7 @@ L_088A1210: goto L_088A1214; L_088A1214: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A1268; } @@ -3382,7 +3170,6 @@ L_088A1224: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1732))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A1254; } @@ -3394,7 +3181,6 @@ L_088A123C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A1268; } @@ -3418,7 +3204,6 @@ L_088A1268: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A1284; } @@ -3431,9 +3216,7 @@ L_088A1278: goto L_088A1284; L_088A1284: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A13BC; } @@ -3441,7 +3224,6 @@ L_088A1284: } L_088A1294: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088A13BC; } @@ -3451,7 +3233,6 @@ L_088A129C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A13BC; } @@ -3459,7 +3240,6 @@ L_088A129C: } L_088A12AC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088A13BC; } @@ -3469,7 +3249,6 @@ L_088A12B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A13BC; } @@ -3480,7 +3259,6 @@ L_088A12C4: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1374; } @@ -3488,7 +3266,6 @@ L_088A12C4: } L_088A12D8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A1374; } @@ -3505,7 +3282,6 @@ L_088A12E0: AOT_REGCACHE_SYNC_OUT(); return; L_088A12F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A1320; } @@ -3532,7 +3308,6 @@ L_088A1320: AOT_REGCACHE_SYNC_OUT(); return; L_088A1328: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A134C; } @@ -3567,7 +3342,6 @@ L_088A135C: AOT_REGCACHE_SYNC_OUT(); return; L_088A136C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -3575,7 +3349,6 @@ L_088A136C: } L_088A1374: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088A13A4; } @@ -3597,7 +3370,6 @@ L_088A138C: AOT_REGCACHE_SYNC_OUT(); return; L_088A139C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -3612,7 +3384,6 @@ L_088A13A4: AOT_REGCACHE_SYNC_OUT(); return; L_088A13B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -3623,7 +3394,6 @@ L_088A13BC: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A13F8; } @@ -3633,7 +3403,6 @@ L_088A13D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A13F8; } @@ -3643,7 +3412,6 @@ L_088A13E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A13F8; } @@ -3662,7 +3430,6 @@ L_088A13F8: goto L_088A13FC; L_088A13FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); goto L_088A1418; @@ -3670,7 +3437,6 @@ L_088A13FC: goto L_088A140C; L_088A140C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A16D4; } @@ -3684,7 +3450,6 @@ L_088A1418: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A16D4; } @@ -3696,7 +3461,6 @@ L_088A142C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A16D4; } @@ -3706,7 +3470,6 @@ L_088A1444: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A16D4; } @@ -3716,7 +3479,6 @@ L_088A1454: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1478; } @@ -3756,7 +3518,6 @@ L_088A1498: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A1558; } @@ -3781,7 +3542,6 @@ L_088A14C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A16CC; } @@ -3805,7 +3565,6 @@ L_088A14F0: AOT_REGCACHE_SYNC_OUT(); return; L_088A14F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A16CC; } @@ -3843,7 +3602,6 @@ L_088A1530: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A16CC; } @@ -3914,7 +3672,6 @@ L_088A15F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1664; } @@ -3954,7 +3711,6 @@ L_088A1620: AOT_REGCACHE_SYNC_OUT(); return; L_088A165C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A16B8; } @@ -3962,7 +3718,6 @@ L_088A165C: } L_088A1664: aot_gpr_31 = (0x088A166Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A166Cu) goto L_088A166C; AOT_REGCACHE_SYNC_OUT(); return; L_088A166C: @@ -3999,7 +3754,6 @@ L_088A16B8: goto L_088A16CC; L_088A16CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4009,7 +3763,6 @@ L_088A16D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A172C; } @@ -4020,7 +3773,6 @@ L_088A16E4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A172C; } @@ -4030,7 +3782,6 @@ L_088A16F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A172C; } @@ -4051,7 +3802,6 @@ L_088A172C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4061,7 +3811,6 @@ L_088A173C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4071,7 +3820,6 @@ L_088A174C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4092,7 +3840,6 @@ L_088A1768: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4101,7 +3848,6 @@ L_088A1768: L_088A178C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4109,7 +3855,6 @@ L_088A178C: } L_088A1798: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088A17AC; } @@ -4123,7 +3868,6 @@ L_088A17A0: AOT_REGCACHE_SYNC_OUT(); return; L_088A17AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4133,7 +3877,6 @@ L_088A17B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4145,7 +3888,6 @@ L_088A17C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A182C; } @@ -4159,7 +3901,6 @@ L_088A17DC: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A182C; } @@ -4168,7 +3909,6 @@ L_088A17DC: L_088A17FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A182C; } @@ -4181,7 +3921,6 @@ L_088A1808: AOT_REGCACHE_SYNC_OUT(); return; L_088A1810: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1920; } @@ -4195,7 +3934,6 @@ L_088A1818: L_088A1820: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1920; } @@ -4204,7 +3942,6 @@ L_088A1820: L_088A182C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A1850; } @@ -4214,7 +3951,6 @@ L_088A1838: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1868; } @@ -4222,7 +3958,6 @@ L_088A1838: } L_088A1848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1910; } @@ -4261,7 +3996,6 @@ L_088A1874: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(72))); ctx.gpr[7] = (ctx.gpr[7] & 14u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_088A18B0; } @@ -4271,7 +4005,6 @@ L_088A188C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088A18AC; } @@ -4281,7 +4014,6 @@ L_088A189C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); ctx.gpr[7] = (0u | 2u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088A18B0; } @@ -4292,7 +4024,6 @@ L_088A18AC: goto L_088A18B0; L_088A18B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1910; } @@ -4301,7 +4032,6 @@ L_088A18B0: L_088A18B8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088A1910; } @@ -4313,7 +4043,6 @@ L_088A18C4: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088A1910; } @@ -4323,7 +4052,6 @@ L_088A18DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088A1910; } @@ -4336,7 +4064,6 @@ L_088A18EC: AOT_REGCACHE_SYNC_OUT(); return; L_088A18F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1910; } @@ -4383,7 +4110,6 @@ L_088A193C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4395,7 +4121,6 @@ L_088A194C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4405,7 +4130,6 @@ L_088A1964: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4415,7 +4139,6 @@ L_088A1974: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4423,7 +4146,6 @@ L_088A1974: } L_088A1984: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4433,7 +4155,6 @@ L_088A198C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A19B4; } @@ -4460,7 +4181,6 @@ L_088A19B4: AOT_REGCACHE_SYNC_OUT(); return; L_088A19C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1AB8; } @@ -4472,7 +4192,6 @@ L_088A19CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A19FC; } @@ -4484,7 +4203,6 @@ L_088A19E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1A08; } @@ -4508,7 +4226,6 @@ L_088A1A08: AOT_REGCACHE_SYNC_OUT(); return; L_088A1A18: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A1A2C; } @@ -4532,7 +4249,6 @@ L_088A1A2C: AOT_REGCACHE_SYNC_OUT(); return; L_088A1A3C: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A1A50; } @@ -4556,7 +4272,6 @@ L_088A1A50: AOT_REGCACHE_SYNC_OUT(); return; L_088A1A60: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A1A70; } @@ -4628,7 +4343,17 @@ L_088A1ABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A1AF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4650,7 +4375,6 @@ L_088A1B20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A1BB0; } @@ -4676,7 +4400,6 @@ L_088A1B40: } L_088A1B48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -4691,7 +4414,6 @@ L_088A1B50: L_088A1B5C: aot_gpr_4 = (ctx.gpr[2] & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -4704,7 +4426,6 @@ L_088A1B68: AOT_REGCACHE_SYNC_OUT(); return; L_088A1B70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -4723,7 +4444,6 @@ L_088A1B78: AOT_REGCACHE_SYNC_OUT(); return; L_088A1B98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -4741,12 +4461,10 @@ L_088A1BA0: } L_088A1BB0: aot_gpr_31 = (0x088A1BB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 273u, 0x088954ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A1BB8u) goto L_088A1BB8; AOT_REGCACHE_SYNC_OUT(); return; L_088A1BB8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A1D68; } @@ -4765,7 +4483,6 @@ L_088A1BC0: AOT_REGCACHE_SYNC_OUT(); return; L_088A1BE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -4792,7 +4509,6 @@ L_088A1BF8: } L_088A1C04: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1C24; } @@ -4800,7 +4516,6 @@ L_088A1C04: } L_088A1C0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -4808,7 +4523,6 @@ L_088A1C0C: } L_088A1C14: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A1C0C; } @@ -4816,7 +4530,6 @@ L_088A1C14: } L_088A1C1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1C34; } @@ -4836,7 +4549,6 @@ L_088A1C34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A1D60; } @@ -4851,7 +4563,6 @@ L_088A1C44: L_088A1C50: aot_gpr_4 = (ctx.gpr[2] & 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1D60; } @@ -4864,7 +4575,6 @@ L_088A1C5C: AOT_REGCACHE_SYNC_OUT(); return; L_088A1C64: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1D60; } @@ -4913,7 +4623,6 @@ L_088A1C9C: } L_088A1CB4: aot_gpr_31 = (0x088A1CBCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A1CBCu) goto L_088A1CBC; AOT_REGCACHE_SYNC_OUT(); return; L_088A1CBC: @@ -4972,7 +4681,6 @@ L_088A1D30: goto L_088A1D60; L_088A1D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1D84; } @@ -5001,7 +4709,17 @@ L_088A1D84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A1DA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5068,7 +4786,6 @@ L_088A1E1C: } L_088A1E28: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088A1E38; } @@ -5084,7 +4801,6 @@ L_088A1E38: ctx.gpr[7] = (aot_gpr_5 + ctx.gpr[8]); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088A1E1C; } @@ -5108,7 +4824,6 @@ L_088A1E5C: AOT_REGCACHE_SYNC_OUT(); return; L_088A1E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A1E84; } @@ -5135,7 +4850,17 @@ L_088A1E84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A1EA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5160,7 +4885,6 @@ L_088A1ECC: AOT_REGCACHE_SYNC_OUT(); return; L_088A1EE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A1EEC; } @@ -5221,7 +4945,6 @@ L_088A1F44: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1F60; } @@ -5244,7 +4967,17 @@ L_088A1F60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A1F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5281,7 +5014,6 @@ L_088A1FB4: L_088A1FD4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A1FFC; } @@ -5323,7 +5055,6 @@ L_088A2014: L_088A2020: aot_gpr_4 = (0u | 362u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A203C; } @@ -5350,7 +5081,17 @@ L_088A203C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2058: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5391,7 +5132,6 @@ L_088A20AC: AOT_REGCACHE_SYNC_OUT(); return; L_088A20B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A20C8; } @@ -5414,7 +5154,6 @@ L_088A20C8: goto L_088A20D4; L_088A20D4: aot_gpr_31 = (0x088A20DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A20DCu) goto L_088A20DC; AOT_REGCACHE_SYNC_OUT(); return; L_088A20DC: @@ -5425,7 +5164,6 @@ L_088A20E4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088A2120; } @@ -5441,7 +5179,6 @@ L_088A20F4: } L_088A20FC: aot_gpr_31 = (0x088A2104u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2104u) goto L_088A2104; AOT_REGCACHE_SYNC_OUT(); return; L_088A2104: @@ -5455,7 +5192,6 @@ L_088A210C: AOT_REGCACHE_SYNC_OUT(); return; L_088A2114: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A2120; } @@ -5516,7 +5252,6 @@ L_088A2178: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A2194; } @@ -5539,7 +5274,17 @@ L_088A2194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A21B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5574,7 +5319,6 @@ L_088A21E4: L_088A2200: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A221C; } @@ -5587,7 +5331,6 @@ L_088A220C: AOT_REGCACHE_SYNC_OUT(); return; L_088A2214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A2224; } @@ -5617,7 +5360,17 @@ L_088A2230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2248: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5637,7 +5390,6 @@ L_088A2270: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(29704), aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088A2298; } @@ -5645,12 +5397,10 @@ L_088A2270: } L_088A2288: aot_gpr_31 = (0x088A2290u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 635u, 0x08AD3860u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2290u) goto L_088A2290; AOT_REGCACHE_SYNC_OUT(); return; L_088A2290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A22A0; } @@ -5658,7 +5408,6 @@ L_088A2290: } L_088A2298: aot_gpr_31 = (0x088A22A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 637u, 0x08AD3880u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A22A0u) goto L_088A22A0; AOT_REGCACHE_SYNC_OUT(); return; L_088A22A0: @@ -5674,12 +5423,21 @@ L_088A22A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A22B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088A22C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A22C8u) goto L_088A22C8; AOT_REGCACHE_SYNC_OUT(); return; L_088A22C8: @@ -5689,7 +5447,6 @@ L_088A22C8: AOT_REGCACHE_SYNC_OUT(); return; L_088A22D0: aot_gpr_31 = (0x088A22D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A22D8u) goto L_088A22D8; AOT_REGCACHE_SYNC_OUT(); return; L_088A22D8: @@ -5700,7 +5457,17 @@ L_088A22D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A22E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5733,7 +5500,6 @@ L_088A2324: goto L_088A2334; L_088A2334: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A2344; } @@ -5800,7 +5566,6 @@ L_088A2398: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A23B4; } @@ -5822,7 +5587,17 @@ L_088A23B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A23CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5904,14 +5679,12 @@ L_088A245C: goto L_088A2468; L_088A2468: aot_gpr_31 = (0x088A2470u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 550u, 0x08AD32A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2470u) goto L_088A2470; AOT_REGCACHE_SYNC_OUT(); return; L_088A2470: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (0u | 362u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A2494; } @@ -5950,7 +5723,17 @@ L_088A24AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A24C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); @@ -5965,7 +5748,6 @@ L_088A24C8: } L_088A24E0: aot_gpr_31 = (0x088A24E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A24E8u) goto L_088A24E8; AOT_REGCACHE_SYNC_OUT(); return; L_088A24E8: @@ -5975,7 +5757,6 @@ L_088A24E8: AOT_REGCACHE_SYNC_OUT(); return; L_088A24F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A250C; } @@ -5983,13 +5764,11 @@ L_088A24F0: } L_088A24F8: aot_gpr_31 = (0x088A2500u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 573u, 0x08AD349Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2500u) goto L_088A2500; AOT_REGCACHE_SYNC_OUT(); return; L_088A2500: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A2578; } @@ -6044,7 +5823,6 @@ L_088A2558: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A25DC; } @@ -6106,7 +5884,6 @@ L_088A25C0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A25DC; } @@ -6124,7 +5901,17 @@ L_088A25DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A25F0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6150,11 +5937,20 @@ L_088A25F0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2608: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6198,11 +5994,20 @@ L_088A2608: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2628: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6246,11 +6051,20 @@ L_088A2628: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2648: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6304,11 +6118,20 @@ L_088A2648: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2670: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6332,11 +6155,20 @@ L_088A2670: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A268C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6353,11 +6185,20 @@ L_088A268C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A26A0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6383,11 +6224,20 @@ L_088A26A0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A26B8: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6413,11 +6263,20 @@ L_088A26B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A26D0: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -6436,11 +6295,20 @@ L_088A26D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A26EC: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -6459,18 +6327,25 @@ L_088A26EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2708: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A2728; } @@ -6486,16 +6361,24 @@ L_088A2720: } L_088A2728: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2730: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088A2744; } @@ -6510,14 +6393,22 @@ L_088A2744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A274C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A276C; } @@ -6533,11 +6424,20 @@ L_088A2764: } L_088A276C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2774: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -6549,19 +6449,37 @@ L_088A2774: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A27A0: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A27AC: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -6570,7 +6488,17 @@ L_088A27AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A27C0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6590,7 +6518,17 @@ L_088A27C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A27D0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6606,11 +6544,20 @@ L_088A27D0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A27EC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6630,7 +6577,17 @@ L_088A27EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A27FC: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -6653,35 +6610,85 @@ L_088A27FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2818: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2820: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2828: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2830: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6689,7 +6696,6 @@ L_088A2838: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[0])) && aot_fpr_13 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -6699,9 +6705,7 @@ L_088A2838: } L_088A285C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[0])) && aot_fpr_12 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A2884; } @@ -6716,7 +6720,6 @@ L_088A286C: AOT_REGCACHE_SYNC_OUT(); return; L_088A287C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A2884; } @@ -6729,7 +6732,17 @@ L_088A2884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2890: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -6740,21 +6753,51 @@ L_088A2890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A28A8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A28B0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A28B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 496u); @@ -6763,14 +6806,34 @@ L_088A28B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A28C8: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A28D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -6796,14 +6859,34 @@ L_088A28EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A290C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2914: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; @@ -6827,7 +6910,17 @@ L_088A2914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2938: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -6844,7 +6937,17 @@ L_088A2950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A295C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { std::uint32_t aot_run_words[3]{}; @@ -6867,84 +6970,200 @@ L_088A2980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A298C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2994: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(108))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A299C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29A4: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29BC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29CC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29DC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A29E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); @@ -6959,42 +7178,100 @@ L_088A29E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A0C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A14: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A1C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A24: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7026,7 +7303,6 @@ L_088A2A68: L_088A2A74: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A2A88; } @@ -7049,7 +7325,17 @@ L_088A2A88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2A9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7146,7 +7432,17 @@ L_088A2B4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2B64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7180,7 +7476,6 @@ L_088A2BA4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(652), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1776))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A2BC4; } @@ -7199,7 +7494,17 @@ L_088A2BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7207,7 +7512,6 @@ L_088A2BD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(988))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A2C5C; } @@ -7215,13 +7519,11 @@ L_088A2BD4: } L_088A2BF0: aot_gpr_31 = (0x088A2BF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 598u, 0x0889E930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2BF8u) goto L_088A2BF8; AOT_REGCACHE_SYNC_OUT(); return; L_088A2BF8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A2C5C; } @@ -7252,7 +7554,6 @@ L_088A2C1C: L_088A2C2C: aot_gpr_5 = (aot_gpr_5 + static_cast(-21846)); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A2C48; } @@ -7261,13 +7562,11 @@ L_088A2C2C: L_088A2C38: jump_target = aot_gpr_16; aot_gpr_31 = (0x088A2C40u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2C40u) goto L_088A2C40; AOT_REGCACHE_SYNC_OUT(); return; L_088A2C40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A2C50; } @@ -7275,7 +7574,6 @@ L_088A2C40: } L_088A2C48: aot_gpr_31 = (0x088A2C50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2C50u) goto L_088A2C50; AOT_REGCACHE_SYNC_OUT(); return; L_088A2C50: @@ -7292,7 +7590,17 @@ L_088A2C5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); @@ -7311,7 +7619,6 @@ L_088A2C90: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088A2DB0; } @@ -7341,7 +7648,6 @@ L_088A2CA8: ctx.gpr[17] = (aot_gpr_29 + static_cast(16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A2D20; } @@ -7367,7 +7673,6 @@ L_088A2CF4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088A2D20; } @@ -7390,7 +7695,6 @@ L_088A2D20: AOT_REGCACHE_SYNC_OUT(); return; L_088A2D2C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A2DB0; } @@ -7399,7 +7703,6 @@ L_088A2D2C: L_088A2D34: aot_gpr_4 = (0u + static_cast(-10)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A2D5C; } @@ -7443,7 +7746,6 @@ L_088A2D78: aot_gpr_4 = (ctx.gpr[2] + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088A2DB0; } @@ -7479,35 +7781,85 @@ L_088A2DB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2DCC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2DD4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2DDC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2DE4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2DEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7528,7 +7880,17 @@ L_088A2E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7559,7 +7921,17 @@ L_088A2E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2E54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7604,21 +7976,51 @@ L_088A2E7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2EB4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2EBC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2EC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17]}; @@ -7656,7 +8058,6 @@ L_088A2F18: AOT_REGCACHE_SYNC_OUT(); return; L_088A2F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A2F68; } @@ -7664,9 +8065,7 @@ L_088A2F24: } L_088A2F2C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A2F50; } @@ -7674,7 +8073,6 @@ L_088A2F2C: } L_088A2F3C: aot_gpr_31 = (0x088A2F44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2F44u) goto L_088A2F44; AOT_REGCACHE_SYNC_OUT(); return; L_088A2F44: @@ -7697,7 +8095,6 @@ L_088A2F58: goto L_088A2F60; L_088A2F60: aot_gpr_31 = (0x088A2F68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B627F0, 215u, 515u, 0x08B627F0u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 515u, 0x08B627F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A2F68u) goto L_088A2F68; AOT_REGCACHE_SYNC_OUT(); return; L_088A2F68: @@ -7715,7 +8112,17 @@ L_088A2F68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A2F88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -7768,7 +8175,6 @@ L_088A2FF8: L_088A3008: aot_gpr_5 = (0u | 233u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_088A3020; } @@ -7851,9 +8257,7 @@ L_088A30A4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3110; } @@ -7925,7 +8329,6 @@ L_088A311C: L_088A31C0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A31D4; } @@ -7989,7 +8392,6 @@ L_088A3250: L_088A325C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088A3274; } @@ -8013,7 +8415,6 @@ L_088A3274: L_088A3284: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088A329C; } @@ -8033,7 +8434,6 @@ L_088A329C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A32C0; } @@ -8060,7 +8460,17 @@ L_088A32C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A32E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-2320)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8076,7 +8486,6 @@ L_088A32E4: L_088A332C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A3378; } @@ -8089,7 +8498,6 @@ L_088A3338: AOT_REGCACHE_SYNC_OUT(); return; L_088A3340: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A3378; } @@ -8098,7 +8506,6 @@ L_088A3340: L_088A3348: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A3378; } @@ -8106,7 +8513,6 @@ L_088A3348: } L_088A3354: aot_gpr_31 = (0x088A335Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A335Cu) goto L_088A335C; AOT_REGCACHE_SYNC_OUT(); return; L_088A335C: @@ -8117,7 +8523,6 @@ L_088A335C: L_088A3364: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A3378; } @@ -8131,7 +8536,6 @@ L_088A3370: L_088A3378: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A338C; } @@ -8145,7 +8549,6 @@ L_088A3384: L_088A338C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A33A8; } @@ -8165,7 +8568,6 @@ L_088A33A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 0u); if (branch_taken) { @@ -8179,9 +8581,7 @@ L_088A33C0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A33E4; } @@ -8192,13 +8592,11 @@ L_088A33E0: goto L_088A33E4; L_088A33E4: aot_gpr_31 = (0x088A33ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A33ECu) goto L_088A33EC; AOT_REGCACHE_SYNC_OUT(); return; L_088A33EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088A34A8; } @@ -8208,7 +8606,6 @@ L_088A33F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A34A8; } @@ -8216,13 +8613,11 @@ L_088A33F8: } L_088A3408: aot_gpr_31 = (0x088A3410u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A3410u) goto L_088A3410; AOT_REGCACHE_SYNC_OUT(); return; L_088A3410: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A34A8; } @@ -8230,13 +8625,11 @@ L_088A3410: } L_088A341C: aot_gpr_31 = (0x088A3424u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B01E00, 191u, 504u, 0x08B01E00u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0191_entry, 191u, 504u, 0x08B01E00u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A3424u) goto L_088A3424; AOT_REGCACHE_SYNC_OUT(); return; L_088A3424: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A34A8; } @@ -8259,17 +8652,25 @@ L_088A3444: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-22688))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A345C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1072))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A34A8; } @@ -8287,7 +8688,6 @@ L_088A3470: AOT_REGCACHE_SYNC_OUT(); return; L_088A348C: aot_gpr_31 = (0x088A3494u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A3494u) goto L_088A3494; AOT_REGCACHE_SYNC_OUT(); return; L_088A3494: @@ -8359,7 +8759,6 @@ L_088A354C: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088A3854; } @@ -8400,7 +8799,6 @@ L_088A3580: } L_088A3588: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_088A36F0; } @@ -8430,7 +8828,6 @@ L_088A35BC: AOT_REGCACHE_SYNC_OUT(); return; L_088A35D0: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_088A3654; } @@ -8452,7 +8849,6 @@ L_088A35F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(619)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A360C; } @@ -8467,7 +8863,6 @@ L_088A360C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A363C; } @@ -8485,7 +8880,6 @@ L_088A3624: AOT_REGCACHE_SYNC_OUT(); return; L_088A362C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A363C; } @@ -8500,7 +8894,6 @@ L_088A363C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7892))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A3654; } @@ -8513,7 +8906,6 @@ L_088A364C: AOT_REGCACHE_SYNC_OUT(); return; L_088A3654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3854; } @@ -8574,7 +8966,6 @@ L_088A36E0: AOT_REGCACHE_SYNC_OUT(); return; L_088A36E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3854; } @@ -8594,7 +8985,6 @@ L_088A36F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A377C; } @@ -8650,7 +9040,6 @@ L_088A37A4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1112), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1116), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088A37B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A37B8u) goto L_088A37B8; AOT_REGCACHE_SYNC_OUT(); return; L_088A37B8: @@ -8683,7 +9072,6 @@ L_088A37B8: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A384C; } @@ -8706,9 +9094,7 @@ L_088A37E4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A384C; } @@ -8742,7 +9128,6 @@ L_088A3828: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0040_entry, 40u, 380u, 0x088A6140u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8750,7 +9135,6 @@ L_088A3828: } L_088A384C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3854; } @@ -8810,9 +9194,7 @@ L_088A38A8: aot_gpr_4 = (aot_gpr_4 | 49152u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3968; } @@ -8822,9 +9204,7 @@ L_088A38D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A38FC; } @@ -8840,7 +9220,6 @@ L_088A38FC: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -8851,9 +9230,7 @@ L_088A38FC: L_088A3918: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3934; } @@ -8869,7 +9246,6 @@ L_088A392C: } L_088A3934: aot_gpr_31 = (0x088A393Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A393Cu) goto L_088A393C; AOT_REGCACHE_SYNC_OUT(); return; L_088A393C: @@ -8878,9 +9254,7 @@ L_088A393C: L_088A3940: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3A10; } @@ -8894,7 +9268,6 @@ L_088A3954: AOT_REGCACHE_SYNC_OUT(); return; L_088A3960: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3A10; } @@ -8906,9 +9279,7 @@ L_088A3968: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3A10; } @@ -8918,9 +9289,7 @@ L_088A3988: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A39AC; } @@ -8936,7 +9305,6 @@ L_088A39AC: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -8947,9 +9315,7 @@ L_088A39AC: L_088A39C8: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A39E4; } @@ -8965,7 +9331,6 @@ L_088A39DC: } L_088A39E4: aot_gpr_31 = (0x088A39ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A39ECu) goto L_088A39EC; AOT_REGCACHE_SYNC_OUT(); return; L_088A39EC: @@ -8974,9 +9339,7 @@ L_088A39EC: L_088A39F0: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3A10; } @@ -8994,9 +9357,7 @@ L_088A3A10: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3B38; } @@ -9006,9 +9367,7 @@ L_088A3A30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3A54; } @@ -9024,7 +9383,6 @@ L_088A3A54: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -9035,9 +9393,7 @@ L_088A3A54: L_088A3A70: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3A8C; } @@ -9053,7 +9409,6 @@ L_088A3A84: } L_088A3A8C: aot_gpr_31 = (0x088A3A94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A3A94u) goto L_088A3A94; AOT_REGCACHE_SYNC_OUT(); return; L_088A3A94: @@ -9064,9 +9419,7 @@ L_088A3A98: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3AE8; } @@ -9075,9 +9428,7 @@ L_088A3A98: L_088A3AB4: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3AE8; } @@ -9094,7 +9445,6 @@ L_088A3AC8: AOT_REGCACHE_SYNC_OUT(); return; L_088A3AE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3C30; } @@ -9105,9 +9455,7 @@ L_088A3AE8: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3C30; } @@ -9116,9 +9464,7 @@ L_088A3AE8: L_088A3B04: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3C30; } @@ -9135,7 +9481,6 @@ L_088A3B18: AOT_REGCACHE_SYNC_OUT(); return; L_088A3B30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3C30; } @@ -9147,9 +9492,7 @@ L_088A3B38: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3C30; } @@ -9159,9 +9502,7 @@ L_088A3B58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3B7C; } @@ -9177,7 +9518,6 @@ L_088A3B7C: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -9188,9 +9528,7 @@ L_088A3B7C: L_088A3B98: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3BB4; } @@ -9206,7 +9544,6 @@ L_088A3BAC: } L_088A3BB4: aot_gpr_31 = (0x088A3BBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A3BBCu) goto L_088A3BBC; AOT_REGCACHE_SYNC_OUT(); return; L_088A3BBC: @@ -9217,9 +9554,7 @@ L_088A3BC0: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3BFC; } @@ -9236,7 +9571,6 @@ L_088A3BDC: AOT_REGCACHE_SYNC_OUT(); return; L_088A3BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3C30; } @@ -9247,9 +9581,7 @@ L_088A3BFC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A3C30; } @@ -9290,7 +9622,6 @@ L_088A3C40: AOT_REGCACHE_SYNC_OUT(); return; L_088A3C78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0040_entry, 40u, 338u, 0x088A5EB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9324,7 +9655,6 @@ L_088A3C80: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); goto L_088A3E68; @@ -9345,7 +9675,6 @@ L_088A3CEC: aot_gpr_4 = (49520u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); goto L_088A3D30; @@ -9394,7 +9723,6 @@ L_088A3D50: AOT_REGCACHE_SYNC_OUT(); return; L_088A3D64: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_088A3E54; } @@ -9404,7 +9732,6 @@ L_088A3D6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A3E00; } @@ -9484,7 +9811,6 @@ L_088A3D94: AOT_REGCACHE_SYNC_OUT(); return; L_088A3DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3E94; } @@ -9520,7 +9846,6 @@ L_088A3E14: AOT_REGCACHE_SYNC_OUT(); return; L_088A3E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A3E94; } @@ -9554,7 +9879,6 @@ L_088A3E94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0040_entry, 40u, 19u, 0x088A41F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9562,7 +9886,6 @@ L_088A3E94: } L_088A3EA4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088A3EB4; } @@ -9576,9 +9899,7 @@ L_088A3EB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1064))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0040_entry, 40u, 7u, 0x088A4078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9679,7 +10000,6 @@ L_088A3ECC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); goto L_088A3F64; @@ -9704,7 +10024,6 @@ L_088A3F64: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = aot_fpr_14 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); goto L_088A3F94; @@ -9736,7 +10055,6 @@ L_088A3FC0: L_088A3FC8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088A3FDC; @@ -9744,7 +10062,6 @@ L_088A3FC8: goto L_088A3FDC; L_088A3FDC: aot_gpr_31 = (0x088A3FE4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A3FE4u) goto L_088A3FE4; AOT_REGCACHE_SYNC_OUT(); return; L_088A3FE4: diff --git a/profiles/vcs/generated/generated_unit_0040.cpp b/profiles/vcs/generated/generated_unit_0040.cpp index 32fb5dd..bdc3b50 100644 --- a/profiles/vcs/generated/generated_unit_0040.cpp +++ b/profiles/vcs/generated/generated_unit_0040.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0040[4096] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 7, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, - 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, - 43, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 46, 0, 0, 47, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 55, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, - 65, 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 72, - 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, - 86, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, - 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 93, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 102, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, - 0, 115, 0, 116, 0, 0, 0, 0, 0, 117, 118, 0, 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 0, 127, 0, 128, 0, 0, - 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, - 0, 135, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 142, 0, - 143, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 148, 0, 0, 0, 149, 0, 150, 0, 0, 0, 151, 0, 152, 0, - 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 156, 0, 157, 0, 0, 0, 158, 0, 0, 159, 0, 0, - 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, - 165, 166, 0, 0, 167, 0, 168, 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 174, 0, 0, 175, - 0, 176, 0, 0, 0, 177, 0, 178, 0, 0, 179, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 183, 0, - 184, 0, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 196, 0, 197, 198, 0, 199, 0, 200, 0, 201, 0, 0, 202, 0, 0, 203, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, - 0, 0, 0, 0, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 214, 0, 215, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, - 222, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, - 229, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 240, 0, 0, 0, 241, 0, 242, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 245, 0, 0, 246, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 255, 0, 0, 0, 256, 0, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, - 0, 262, 0, 263, 0, 0, 264, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 270, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 273, 0, 274, 0, 0, 275, 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 286, 0, 0, 287, 0, 0, 0, 288, 0, 289, 0, 290, 0, - 291, 0, 292, 0, 293, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, - 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, - 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 309, 0, 310, 0, 0, 311, 0, 0, 0, 312, 0, 0, 313, 0, - 0, 314, 0, 0, 315, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 0, 0, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, - 0, 0, 0, 0, 0, 330, 0, 331, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 0, 336, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 340, 0, 0, 0, 341, 0, 342, 0, 0, 343, 0, - 0, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 348, 0, 0, 349, 0, 350, 0, 0, 351, 0, 352, 0, 0, 0, 0, 353, - 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, - 361, 0, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, - 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 374, 0, 375, 0, - 0, 0, 376, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 0, 394, 0, 395, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 397, 0, 398, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, 0, - 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 0, 410, 0, 0, 411, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, - 0, 418, 419, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 424, - 0, 425, 0, 0, 426, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 432, 0, 433, 0, 434, - 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 443, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 455, 0, 0, 456, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, 460, 0, 0, 0, 0, 0, 461, 0, 0, 0, - 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, 0, 0, 464, 0, 465, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 468, 0, 469, - 470, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 0, 477, - 0, 478, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 0, 482, 0, 483, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 0, - 486, 0, 487, 488, 0, 0, 0, 0, 0, 489, 0, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 493, 0, 494, 0, - 0, 495, 0, 0, 0, 0, 496, 0, 0, 0, 497, 0, 498, 499, 0, 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, - 0, 503, 0, 0, 0, 0, 504, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, - 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, - 0, 516, 0, 0, 0, 517, 0, 518, 0, 0, 0, 519, 520, 0, 521, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 524, 0, - 525, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 533, - 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 537, 538, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, - 0, 541, 0, 542, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 548, 0, 0, 0, 549, 0, 0, - 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 556, 0, 0, 0, 557, 0, 558, 559, - 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 563, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, - 567, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, - 575, 0, 576, 577, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 582, 0, 0, 0, 583, 0, 0, - 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 588, 589, 0, 0, 0, 0, 0, 590, 0, - 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 592, 0, 593, 0, 0, 594, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, - 0, 0, 597, 0, 598, 599, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 602, 0, 603, 604, 0, 605, 606, 0, 0, - 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 609, 0, 610, 0, 611, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 614, 0, 0, - 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 0, 619, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 626, 0, 627, 628, 0, 0, 0, 0, 0, 629, 0, 0, 0, - 0, 630, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 0, 636, 0, 0, 0, - 0, 637, 0, 0, 0, 638, 0, 639, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 644, 0, 0, 645, 0, 646, - 0, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 649, 0, 650, 0, 651, 652, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 655, 0, - 0, 0, 0, 656, 0, 0, 0, 657, 0, 658, 659, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, - 0, 662, 0, 0, 663, 0, 0, 0, 0, 664, 0, 665, 666, 0, 0, 667, 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 0, 673, 0, 0, 674, 0, - 0, 0, 675, 0, 676, 0, 677, 0, 678, 0, 0, 0, 679, 0, 0, 680, 0, 681, 0, 682, 0, 683, 0, 684, 0, 0, 0, 685, 0, 0, 686, 0, - 687, 0, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 690, 0, 691, 0, 692, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 695, 0, - 696, 0, 0, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 0, 0, 704, 0, 0, 0, 0, 705, 0, 0, 706, 0, 707, 0, - 708, 0, 709, 0, 710, 0, 0, 0, 711, 0, 0, 0, 0, 712, 0, 0, 713, 0, 714, 0, 0, 0, 715, 0, 716, 0, 0, 0, 717, 0, 0, 0, - 0, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 721, 722, 0, 0, 0, 0, 0, 723, 0, 0, 724, 0, 725, 0, 0, 0, 726, 0, 727, - 0, 728, 0, 729, 0, 730, 0, 731, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, 0, 0, 734, 0, 0, 0, 0, 735, 0, 736, 0, 737, 0, 738, - 0, 0, 739, 0, 0, 740, 0, 741, 0, 742, 0, 743, 0, 744, 0, 0, 745, 0, 0, 746, 0, 747, 0, 0, 0, 748, 0, 0, 0, 749, 0, 750, - 0, 751, 0, 0, 0, 0, 752, 0, 753, 0, 754, 0, 755, 0, 0, 0, 756, 0, 0, 0, 0, 757, 0, 0, 758, 0, 759, 0, 760, 0, 761, 0, - 762, 0, 0, 0, 763, 0, 0, 0, 0, 764, 0, 0, 765, 0, 766, 0, 0, 0, 767, 0, 768, 0, 0, 769, 0, 770, 0, 0, 771, 0, 0, 0, - 0, 772, 0, 773, 0, 0, 0, 0, 774, 0, 0, 0, 0, 775, 0, 776, 0, 777, 0, 778, 0, 0, 779, 0, 0, 780, 0, 781, 0, 782, 0, 783, - 0, 784, 0, 0, 785, 0, 0, 786, 0, 787, 0, 0, 0, 788, 0, 0, 789, 0, 0, 0, 790, 0, 791, 0, 792, 0, 0, 0, 0, 0, 793, 0, - 794, 0, 795, 0, 796, 0, 0, 0, 797, 0, 0, 0, 0, 798, 0, 0, 799, 0, 800, 0, 801, 0, 802, 0, 803, 0, 0, 0, 804, 0, 0, 0, - 0, 805, 0, 0, 806, 0, 807, 0, 0, 0, 808, 0, 809, 0, 0, 0, 0, 810, 0, 811, 0, 812, 0, 0, 813, 0, 0, 814, 0, 815, 0, 816, - 0, 0, 817, 0, 818, 0, 0, 819, 0, 820, 0, 821, 0, 0, 822, 0, 0, 0, 0, 823, 0, 824, 0, 0, 0, 825, 0, 826, 827, 0, 0, 0, - 0, 828, 0, 0, 0, 0, 829, 0, 0, 830, 0, 831, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 835, 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, 0, 838, 0, 0, 839, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0040[64] = { + 0x0000201060802881ull, 0x1004820409040500ull, 0x0408000000000000ull, 0x0440001428001008ull, + 0x0008001000204081ull, 0x2212208000004000ull, 0xC8082000041148A1ull, 0x8400000800802000ull, + 0xA80021250A200100ull, 0x0000000000505012ull, 0x1010244004020000ull, 0x0019010210010003ull, + 0x2000000000009000ull, 0x2000003200C11000ull, 0x0120250040488000ull, 0x284441401014060Aull, + 0x4444114280410842ull, 0x2454101051451049ull, 0x9148095304002A08ull, 0x0400A015440124A2ull, + 0x0082208004100000ull, 0x00AA815080249568ull, 0x222200610A10A02Aull, 0x4851451008888A45ull, + 0xAA91220000252880ull, 0x014A52200250494Aull, 0x544C012004800480ull, 0x202A840409050495ull, + 0x0004821248960020ull, 0x8209002004110064ull, 0x4A211200824804A0ull, 0x5008280A85294806ull, + 0x5501049100920501ull, 0x00A0000100014124ull, 0x480D080002955554ull, 0x000290840014A081ull, + 0x9000248610001442ull, 0x02220100A8112492ull, 0x0080800042054000ull, 0x0002000081040800ull, + 0x4840040000004004ull, 0xA212842010688000ull, 0x10942106884A1041ull, 0x028834425080A20Dull, + 0x1210244840820142ull, 0x890A1083440858A2ull, 0x2291090A1041A204ull, 0x44250820D1091112ull, + 0x2250820D10942083ull, 0x4004942041A20081ull, 0x2102548836880834ull, 0x0000000000605110ull, + 0x00000142106884A1ull, 0xA50841A212220000ull, 0x080106884881A908ull, 0x4908001000149A12ull, + 0x482A841148AA9154ull, 0x1145211552115551ull, 0xAA1084AAA2906884ull, 0x55211542A2292AA4ull, + 0xAA4AA10A12945211ull, 0x1155211541512292ull, 0x1A284A94A92A1452ull, 0x9111080002008A42ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0040[64] = { + 1u, 10u, 20u, 22u, 30u, 36u, 43u, 56u, 61u, 73u, 79u, 86u, 95u, 98u, 106u, 115u, + 129u, 143u, 160u, 176u, 190u, 196u, 214u, 229u, 247u, 262u, 279u, 291u, 307u, 319u, 330u, 344u, + 361u, 376u, 384u, 402u, 413u, 425u, 439u, 446u, 451u, 457u, 470u, 486u, 503u, 516u, 534u, 550u, + 567u, 584u, 597u, 615u, 621u, 633u, 647u, 662u, 675u, 696u, 718u, 739u, 762u, 784u, 805u, 828u, }; void recomp_unit_0040_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0040_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088A4000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0040[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0040[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0040[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088A4000; @@ -1015,7 +922,6 @@ L_088A4000: aot_gpr_4 = (aot_gpr_16 + static_cast(16)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 - ctx.fpr[0]; if (branch_taken) { @@ -1045,9 +951,7 @@ L_088A4034: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4074; } @@ -1057,7 +961,6 @@ L_088A405C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25136))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25136))); goto L_088A4074; @@ -1070,9 +973,7 @@ L_088A4078: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1064))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A41F0; } @@ -1085,7 +986,6 @@ L_088A4090: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1104))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1064), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1142,7 +1042,6 @@ L_088A40B4: AOT_REGCACHE_SYNC_OUT(); return; L_088A4120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A4148; } @@ -1162,7 +1061,6 @@ L_088A4148: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1108))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1108))); goto L_088A416C; @@ -1182,9 +1080,7 @@ L_088A416C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A41A4; } @@ -1203,9 +1099,7 @@ L_088A41A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1064))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A41C8; } @@ -1448,9 +1342,7 @@ L_088A42CC: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4374; } @@ -1463,9 +1355,7 @@ L_088A42E8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4374; } @@ -1478,9 +1368,7 @@ L_088A430C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4374; } @@ -1520,7 +1408,6 @@ L_088A4330: AOT_REGCACHE_SYNC_OUT(); return; L_088A436C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A4388; } @@ -1539,7 +1426,6 @@ L_088A4374: AOT_REGCACHE_SYNC_OUT(); return; L_088A4388: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088A43D8; } @@ -1587,7 +1473,6 @@ L_088A43D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A461C; } @@ -1597,7 +1482,6 @@ L_088A43E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1088))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(16)); if (branch_taken) { @@ -1610,7 +1494,6 @@ L_088A4400: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(32)); if (branch_taken) { @@ -1623,7 +1506,6 @@ L_088A441C: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48665u << 16u); if (branch_taken) { @@ -1636,7 +1518,6 @@ L_088A4438: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -1657,7 +1538,6 @@ L_088A4454: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -1678,9 +1558,7 @@ L_088A4490: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A461C; } @@ -1795,9 +1673,7 @@ L_088A459C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1088))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A45E4; } @@ -1847,9 +1723,7 @@ L_088A45F4: L_088A4600: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1088))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A461C; } @@ -1863,7 +1737,6 @@ L_088A461C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A4638; } @@ -1877,7 +1750,6 @@ L_088A462C: AOT_REGCACHE_SYNC_OUT(); return; L_088A4638: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A47E8; } @@ -1887,7 +1759,6 @@ L_088A4640: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A47E8; } @@ -1897,9 +1768,7 @@ L_088A4650: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A47E8; } @@ -1932,7 +1801,6 @@ L_088A4668: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A46CC; } @@ -1956,9 +1824,7 @@ L_088A46CC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A46F8; } @@ -1988,9 +1854,7 @@ L_088A46FC: { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A475C; } @@ -2117,9 +1981,7 @@ L_088A47FC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4854; } @@ -2144,9 +2006,7 @@ L_088A4820: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A57D0; } @@ -2156,7 +2016,6 @@ L_088A4854: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A48A0; } @@ -2164,7 +2023,6 @@ L_088A4854: } L_088A4864: aot_gpr_31 = (0x088A486Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A486Cu) goto L_088A486C; AOT_REGCACHE_SYNC_OUT(); return; L_088A486C: @@ -2177,7 +2035,6 @@ L_088A486C: AOT_REGCACHE_SYNC_OUT(); return; L_088A4880: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_088A48A0; } @@ -2186,7 +2043,6 @@ L_088A4880: L_088A4888: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A48A0; } @@ -2239,7 +2095,6 @@ L_088A48B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A4910; } @@ -2257,7 +2112,6 @@ L_088A48F4: AOT_REGCACHE_SYNC_OUT(); return; L_088A48FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A4910; } @@ -2274,9 +2128,7 @@ L_088A4910: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_20 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4938; } @@ -2294,9 +2146,7 @@ L_088A4938: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4958; } @@ -2458,9 +2308,7 @@ L_088A4A44: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A57C0; } @@ -2476,7 +2324,6 @@ L_088A4A68: ctx.fpr[15] = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(480), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -2518,9 +2365,7 @@ L_088A4AD0: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4B04; } @@ -2530,7 +2375,6 @@ L_088A4AF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A4B04; } @@ -2568,9 +2412,7 @@ L_088A4B04: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4BA0; } @@ -2594,9 +2436,7 @@ L_088A4B40: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4BA0; } @@ -2605,9 +2445,7 @@ L_088A4B40: L_088A4B70: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4BA0; } @@ -2628,7 +2466,6 @@ L_088A4BA0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(600))); aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } if (branch_taken) { @@ -2715,7 +2552,6 @@ L_088A4BD0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); goto L_088A4C3C; @@ -2828,9 +2664,7 @@ L_088A4C3C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4EA8; } @@ -2857,7 +2691,6 @@ L_088A4CF4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15897u << 16u); if (branch_taken) { @@ -2875,9 +2708,7 @@ L_088A4D40: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4D5C; } @@ -2894,7 +2725,6 @@ L_088A4D5C: ctx.gpr[20] = (aot_gpr_29 + static_cast(512)); ctx.gpr[21] = (aot_gpr_29 + static_cast(784)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_29 + static_cast(800)); if (branch_taken) { @@ -2981,7 +2811,6 @@ L_088A4D94: ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088A4DF4; @@ -3049,7 +2878,6 @@ L_088A4E58: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16281u << 16u); if (branch_taken) { @@ -3071,7 +2899,6 @@ L_088A4E78: goto L_088A4EA0; L_088A4EA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A4EB4; } @@ -3089,9 +2916,7 @@ L_088A4EB4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4F50; } @@ -3125,9 +2950,7 @@ L_088A4F0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1016))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1024))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4F48; } @@ -3148,7 +2971,6 @@ L_088A4F28: goto L_088A4F48; L_088A4F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A4F98; } @@ -3160,7 +2982,6 @@ L_088A4F50: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16281u << 16u); if (branch_taken) { @@ -3182,7 +3003,6 @@ L_088A4F70: goto L_088A4F98; L_088A4F98: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A5178; } @@ -3192,9 +3012,7 @@ L_088A4FA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A4FF4; } @@ -3227,7 +3045,6 @@ L_088A4FD8: AOT_REGCACHE_SYNC_OUT(); return; L_088A4FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A5018; } @@ -3254,9 +3071,7 @@ L_088A5004: L_088A5018: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5084; } @@ -3312,7 +3127,6 @@ L_088A5058: AOT_REGCACHE_SYNC_OUT(); return; L_088A507C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A50F8; } @@ -3328,7 +3142,6 @@ L_088A5084: AOT_REGCACHE_SYNC_OUT(); return; L_088A5098: aot_gpr_31 = (0x088A50A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 584u, 0x088A28B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A50A0u) goto L_088A50A0; AOT_REGCACHE_SYNC_OUT(); return; L_088A50A0: @@ -3403,7 +3216,6 @@ L_088A5130: AOT_REGCACHE_SYNC_OUT(); return; L_088A5140: aot_gpr_31 = (0x088A5148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 584u, 0x088A28B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A5148u) goto L_088A5148; AOT_REGCACHE_SYNC_OUT(); return; L_088A5148: @@ -3427,7 +3239,6 @@ L_088A5160: AOT_REGCACHE_SYNC_OUT(); return; L_088A5170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A51F4; } @@ -3437,9 +3248,7 @@ L_088A5178: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A51B0; } @@ -3459,9 +3268,7 @@ L_088A51B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(504))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A51D0; } @@ -3502,9 +3309,7 @@ L_088A520C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A550C; } @@ -3548,7 +3353,6 @@ L_088A5268: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2048))); aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088A5284; } @@ -3616,7 +3420,6 @@ L_088A52F0: AOT_REGCACHE_SYNC_OUT(); return; L_088A52FC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088A5314; } @@ -3676,7 +3479,6 @@ L_088A5368: AOT_REGCACHE_SYNC_OUT(); return; L_088A5378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A550C; } @@ -3689,7 +3491,6 @@ L_088A5380: AOT_REGCACHE_SYNC_OUT(); return; L_088A5388: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A550C; } @@ -3704,7 +3505,6 @@ L_088A5390: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A550C; } @@ -3724,9 +3524,7 @@ L_088A53BC: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A550C; } @@ -3828,7 +3626,6 @@ L_088A54DC: AOT_REGCACHE_SYNC_OUT(); return; L_088A550C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A5518; } @@ -3839,7 +3636,6 @@ L_088A5514: goto L_088A5518; L_088A5518: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A57B8; } @@ -3847,7 +3643,6 @@ L_088A5518: } L_088A5520: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A57B8; } @@ -3884,9 +3679,7 @@ L_088A5554: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5590; } @@ -3914,9 +3707,7 @@ L_088A55A0: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5634; } @@ -3929,7 +3720,6 @@ L_088A55BC: AOT_REGCACHE_SYNC_OUT(); return; L_088A55C4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A5604; } @@ -3989,9 +3779,7 @@ L_088A5634: L_088A563C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5664; } @@ -4000,9 +3788,7 @@ L_088A563C: L_088A5650: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5694; } @@ -4016,9 +3802,7 @@ L_088A5664: L_088A566C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5698; } @@ -4027,9 +3811,7 @@ L_088A566C: L_088A5680: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5698; } @@ -4081,7 +3863,6 @@ L_088A56F4: AOT_REGCACHE_SYNC_OUT(); return; L_088A5700: aot_gpr_31 = (0x088A5708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 584u, 0x088A28B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A5708u) goto L_088A5708; AOT_REGCACHE_SYNC_OUT(); return; L_088A5708: @@ -4099,7 +3880,6 @@ L_088A5718: AOT_REGCACHE_SYNC_OUT(); return; L_088A5724: aot_gpr_31 = (0x088A572Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 584u, 0x088A28B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A572Cu) goto L_088A572C; AOT_REGCACHE_SYNC_OUT(); return; L_088A572C: @@ -4163,7 +3943,6 @@ L_088A57A8: AOT_REGCACHE_SYNC_OUT(); return; L_088A57B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A57D0; } @@ -4183,9 +3962,7 @@ L_088A57D0: L_088A57D8: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_12)) && ctx.fpr[0] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A58DC; } @@ -4294,7 +4071,6 @@ L_088A58DC: AOT_REGCACHE_SYNC_OUT(); return; L_088A58E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A59B0; } @@ -4312,7 +4088,6 @@ L_088A58F4: AOT_REGCACHE_SYNC_OUT(); return; L_088A58FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A59B0; } @@ -4326,7 +4101,6 @@ L_088A5904: L_088A590C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088A59B0; } @@ -4353,9 +4127,7 @@ L_088A5938: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A59B0; } @@ -4419,7 +4191,6 @@ L_088A59C4: L_088A59CC: aot_gpr_4 = (0u | 278u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088A5ACC; } @@ -4522,7 +4293,6 @@ L_088A5AD8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A5B00; } @@ -4530,7 +4300,6 @@ L_088A5AD8: } L_088A5AE8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A5B00; } @@ -4538,7 +4307,6 @@ L_088A5AE8: } L_088A5AF0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088A5B00; } @@ -4568,7 +4336,6 @@ L_088A5B10: L_088A5B1C: aot_gpr_4 = (0u | 278u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A5B40; } @@ -4578,7 +4345,6 @@ L_088A5B28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1088))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1164))); goto L_088A5D18; @@ -4602,7 +4368,6 @@ L_088A5B48: L_088A5B60: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A5C48; } @@ -4613,9 +4378,7 @@ L_088A5B6C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5C48; } @@ -4627,7 +4390,6 @@ L_088A5B88: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4704,7 +4466,6 @@ L_088A5C44: goto L_088A5C48; L_088A5C48: aot_gpr_31 = (0x088A5C50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 584u, 0x088A28B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A5C50u) goto L_088A5C50; AOT_REGCACHE_SYNC_OUT(); return; L_088A5C50: @@ -4809,7 +4570,6 @@ L_088A5D40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A5DC0; } @@ -4819,9 +4579,7 @@ L_088A5D50: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5DC0; } @@ -4836,9 +4594,7 @@ L_088A5D68: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5DC0; } @@ -4861,7 +4617,6 @@ L_088A5D94: L_088A5DC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A5DE4; } @@ -4880,9 +4635,7 @@ L_088A5DE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1168))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5EA4; } @@ -4892,9 +4645,7 @@ L_088A5DFC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1164))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5EA4; } @@ -4908,7 +4659,6 @@ L_088A5E14: L_088A5E1C: aot_gpr_4 = (0u | 278u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088A5EA4; } @@ -4976,7 +4726,6 @@ L_088A5EB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1061)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A5EE4; } @@ -5035,7 +4784,6 @@ L_088A5F08: L_088A5F2C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A5F4C; } @@ -5043,7 +4791,6 @@ L_088A5F2C: } L_088A5F38: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088A5F4C; } @@ -5063,7 +4810,6 @@ L_088A5F4C: L_088A5F54: aot_gpr_4 = (0u | 278u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A6050; } @@ -5071,15 +4817,12 @@ L_088A5F54: } L_088A5F60: aot_gpr_31 = (0x088A5F68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0039_entry, 39u, 584u, 0x088A28B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A5F68u) goto L_088A5F68; AOT_REGCACHE_SYNC_OUT(); return; L_088A5F68: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A6050; } @@ -5092,7 +4835,6 @@ L_088A5F7C: AOT_REGCACHE_SYNC_OUT(); return; L_088A5F84: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A5FF8; } @@ -5104,9 +4846,7 @@ L_088A5F8C: aot_gpr_4 = (aot_gpr_4 | 18350u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A5FCC; } @@ -5139,7 +4879,6 @@ L_088A5FCC: AOT_REGCACHE_SYNC_OUT(); return; L_088A5FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A6080; } @@ -5156,9 +4895,7 @@ L_088A6000: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A6044; } @@ -5194,7 +4931,6 @@ L_088A6044: L_088A6050: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1783))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6080; } @@ -5216,7 +4952,6 @@ L_088A6080: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1060)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6138; } @@ -5249,9 +4984,7 @@ L_088A60C0: aot_gpr_4 = (aot_gpr_4 | 16374u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A60F0; } @@ -5330,7 +5063,17 @@ L_088A6140: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A6180: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(308), aot_gpr_16); @@ -5379,7 +5122,6 @@ L_088A6210: AOT_REGCACHE_SYNC_OUT(); return; L_088A6218: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A6238; } @@ -5397,7 +5139,6 @@ L_088A6228: AOT_REGCACHE_SYNC_OUT(); return; L_088A6230: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A6334; } @@ -5415,7 +5156,6 @@ L_088A6240: AOT_REGCACHE_SYNC_OUT(); return; L_088A6248: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088A62C8; } @@ -5448,7 +5188,6 @@ L_088A6264: aot_fpr_13 = ctx.fpr[30] + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1152), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); goto L_088A62AC; @@ -5457,7 +5196,6 @@ L_088A6264: L_088A62AC: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A62C0; @@ -5480,7 +5218,6 @@ L_088A62CC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48793u << 16u); if (branch_taken) { @@ -5551,7 +5288,6 @@ L_088A6350: aot_fpr_13 = ctx.fpr[30] + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1156), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1156))); goto L_088A6388; @@ -5560,7 +5296,6 @@ L_088A6350: L_088A6388: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A639C; @@ -5571,7 +5306,6 @@ L_088A639C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A6488; } @@ -5602,7 +5336,6 @@ L_088A63C4: aot_fpr_13 = ctx.fpr[30] + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1104), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1104))); goto L_088A6404; @@ -5611,7 +5344,6 @@ L_088A63C4: L_088A6404: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A6418; @@ -5643,7 +5375,6 @@ L_088A6430: aot_fpr_12 = ctx.fpr[30] + aot_fpr_12; aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1108), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1108))); goto L_088A6470; @@ -5652,7 +5383,6 @@ L_088A6430: L_088A6470: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088A6484; @@ -5664,9 +5394,7 @@ L_088A6484: L_088A6488: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1156))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A64A8; } @@ -5707,7 +5435,6 @@ L_088A64B4: L_088A64F0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A651C; } @@ -5721,7 +5448,6 @@ L_088A64FC: L_088A6504: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A651C; } @@ -5730,7 +5456,6 @@ L_088A6504: L_088A6510: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(860))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A65C4; } @@ -5739,7 +5464,6 @@ L_088A6510: L_088A651C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6540; } @@ -5748,7 +5472,6 @@ L_088A651C: L_088A6528: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4209))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A6540; } @@ -5757,7 +5480,6 @@ L_088A6528: L_088A6534: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(860))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A65C4; } @@ -5785,7 +5507,6 @@ L_088A6550: } L_088A656C: aot_gpr_31 = (0x088A6574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A6574u) goto L_088A6574; AOT_REGCACHE_SYNC_OUT(); return; L_088A6574: @@ -5808,9 +5529,7 @@ L_088A657C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A65C4; } @@ -5843,7 +5562,6 @@ L_088A65C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A677C; } @@ -5853,7 +5571,6 @@ L_088A65D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A677C; } @@ -5911,7 +5628,6 @@ L_088A6638: AOT_REGCACHE_SYNC_OUT(); return; L_088A6640: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A677C; } @@ -5924,7 +5640,6 @@ L_088A6648: aot_gpr_4 = (aot_gpr_4 + static_cast(90)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A677C; } @@ -6100,7 +5815,17 @@ L_088A677C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A67C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6153,7 +5878,6 @@ L_088A6838: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088A68A8; @@ -6182,7 +5906,6 @@ L_088A68D8: aot_gpr_5 = (0u | 192u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A6C20; } @@ -6191,7 +5914,6 @@ L_088A68D8: L_088A68EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(968))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A69C4; } @@ -6299,7 +6021,6 @@ L_088A69BC: L_088A69C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(972))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6A4C; } @@ -6382,7 +6103,6 @@ L_088A6A44: L_088A6A4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(976))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6AD0; } @@ -6464,7 +6184,6 @@ L_088A6AC8: L_088A6AD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(980))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6B78; } @@ -6561,7 +6280,6 @@ L_088A6B70: L_088A6B78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6C20; } @@ -6699,7 +6417,6 @@ L_088A6C78: L_088A6C8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6CA8; } @@ -6715,7 +6432,6 @@ L_088A6C98: L_088A6CA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(956))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6D14; } @@ -6742,7 +6458,6 @@ L_088A6CD0: L_088A6CE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6D14; } @@ -6766,7 +6481,6 @@ L_088A6D04: AOT_REGCACHE_SYNC_OUT(); return; L_088A6D14: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_088A6D2C; } @@ -6787,7 +6501,6 @@ L_088A6D2C: goto L_088A6D30; L_088A6D30: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088A6C44; } @@ -6890,7 +6603,6 @@ L_088A6DCC: L_088A6DE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6DFC; } @@ -6906,7 +6618,6 @@ L_088A6DEC: L_088A6DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(964))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6ED0; } @@ -6999,7 +6710,6 @@ L_088A6E8C: L_088A6EA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6ED0; } @@ -7029,7 +6739,6 @@ L_088A6ED0: AOT_REGCACHE_SYNC_OUT(); return; L_088A6EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A70D8; } @@ -7039,7 +6748,6 @@ L_088A6EE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-997)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A6F40; } @@ -7049,7 +6757,6 @@ L_088A6EF4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 277u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A6F40; } @@ -7058,7 +6765,6 @@ L_088A6EF4: L_088A6F04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088A6F40; } @@ -7068,7 +6774,6 @@ L_088A6F10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 257u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A6F40; } @@ -7078,7 +6783,6 @@ L_088A6F20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 225u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A6F40; } @@ -7088,7 +6792,6 @@ L_088A6F30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 248u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A70D8; } @@ -7097,7 +6800,6 @@ L_088A6F30: L_088A6F40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(968))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A6FC8; } @@ -7180,7 +6882,6 @@ L_088A6FC0: L_088A6FC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(980))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A7050; } @@ -7263,7 +6964,6 @@ L_088A7048: L_088A7050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A70D8; } @@ -7346,7 +7046,6 @@ L_088A70D0: L_088A70D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088A70F4; } @@ -7356,7 +7055,6 @@ L_088A70E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 248u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A71B0; } @@ -7365,7 +7063,6 @@ L_088A70E4: L_088A70F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(972))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A71B0; } @@ -7466,7 +7163,6 @@ L_088A71A8: L_088A71B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_088A7544; } @@ -7475,7 +7171,6 @@ L_088A71B0: L_088A71BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(976))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A741C; } @@ -7543,7 +7238,6 @@ L_088A722C: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_20)) && ctx.fpr[22] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); if (branch_taken) { @@ -7553,7 +7247,6 @@ L_088A722C: } L_088A724C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A7268; @@ -7582,7 +7275,6 @@ L_088A7274: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -7592,9 +7284,7 @@ L_088A7274: } L_088A728C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A72A8; } @@ -7611,7 +7301,6 @@ L_088A729C: } L_088A72A8: aot_gpr_31 = (0x088A72B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A72B0u) goto L_088A72B0; AOT_REGCACHE_SYNC_OUT(); return; L_088A72B0: @@ -7629,9 +7318,7 @@ L_088A72C4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A72F4; } @@ -7653,9 +7340,7 @@ L_088A72F4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A7320; } @@ -7669,9 +7354,7 @@ L_088A7310: goto L_088A7320; L_088A7320: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A7338; } @@ -7690,9 +7373,7 @@ L_088A7338: aot_gpr_4 = (aot_gpr_4 | 48716u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A7358; } @@ -7765,7 +7446,6 @@ L_088A7414: L_088A741C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(960))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A765C; } @@ -7923,7 +7603,6 @@ L_088A74A0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(944), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A765C; } @@ -7933,7 +7612,6 @@ L_088A7544: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A7564; } @@ -7943,7 +7621,6 @@ L_088A7554: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 214u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A765C; } @@ -8049,7 +7726,6 @@ L_088A75FC: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088A7634; } @@ -8060,7 +7736,6 @@ L_088A760C: aot_gpr_6 = (43691u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088A7634; } @@ -8070,7 +7745,6 @@ L_088A7620: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); jump_target = aot_gpr_5; aot_gpr_31 = (0x088A762Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A762Cu) goto L_088A762C; AOT_REGCACHE_SYNC_OUT(); return; @@ -8084,7 +7758,6 @@ L_088A762C: } L_088A7634: aot_gpr_31 = (0x088A763Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A763Cu) goto L_088A763C; AOT_REGCACHE_SYNC_OUT(); return; L_088A763C: @@ -8172,9 +7845,7 @@ L_088A76C0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25104))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A7704; } @@ -8184,7 +7855,6 @@ L_088A76EC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25104))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25104))); goto L_088A7704; @@ -8218,7 +7888,6 @@ L_088A772C: L_088A7730: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A7750; } @@ -8227,7 +7896,6 @@ L_088A7730: L_088A773C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A7750; } @@ -8261,7 +7929,17 @@ L_088A7750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A7790: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8302,7 +7980,6 @@ L_088A77E0: L_088A77EC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_088A78A8; } @@ -8326,7 +8003,6 @@ L_088A7808: goto L_088A7810; L_088A7810: aot_gpr_31 = (0x088A7818u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7818u) goto L_088A7818; AOT_REGCACHE_SYNC_OUT(); return; L_088A7818: @@ -8348,7 +8024,6 @@ L_088A7830: AOT_REGCACHE_SYNC_OUT(); return; L_088A783C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7878; } @@ -8362,7 +8037,6 @@ L_088A7844: goto L_088A784C; L_088A784C: aot_gpr_31 = (0x088A7854u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7854u) goto L_088A7854; AOT_REGCACHE_SYNC_OUT(); return; L_088A7854: @@ -8425,7 +8099,6 @@ L_088A78BC: goto L_088A78C4; L_088A78C4: aot_gpr_31 = (0x088A78CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A78CCu) goto L_088A78CC; AOT_REGCACHE_SYNC_OUT(); return; L_088A78CC: @@ -8461,7 +8134,6 @@ L_088A7900: AOT_REGCACHE_SYNC_OUT(); return; L_088A7910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E28; } @@ -8477,7 +8149,6 @@ L_088A7918: } L_088A7920: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A7978; } @@ -8491,7 +8162,6 @@ L_088A7928: goto L_088A7930; L_088A7930: aot_gpr_31 = (0x088A7938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7938u) goto L_088A7938; AOT_REGCACHE_SYNC_OUT(); return; L_088A7938: @@ -8521,7 +8191,6 @@ L_088A7964: AOT_REGCACHE_SYNC_OUT(); return; L_088A7970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A79C0; } @@ -8535,7 +8204,6 @@ L_088A7978: goto L_088A7980; L_088A7980: aot_gpr_31 = (0x088A7988u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7988u) goto L_088A7988; AOT_REGCACHE_SYNC_OUT(); return; L_088A7988: @@ -8577,7 +8245,6 @@ L_088A79C8: AOT_REGCACHE_SYNC_OUT(); return; L_088A79D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E28; } @@ -8587,7 +8254,6 @@ L_088A79E0: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); aot_gpr_6 = (0u | 20u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088A7A8C; } @@ -8599,7 +8265,6 @@ L_088A79F0: aot_gpr_6 = (aot_gpr_4 + static_cast(2228)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A7A7C; } @@ -8610,7 +8275,6 @@ L_088A7A08: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A7A7C; } @@ -8628,7 +8292,6 @@ L_088A7A1C: } L_088A7A2C: aot_gpr_31 = (0x088A7A34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7A34u) goto L_088A7A34; AOT_REGCACHE_SYNC_OUT(); return; L_088A7A34: @@ -8676,7 +8339,6 @@ L_088A7A7C: AOT_REGCACHE_SYNC_OUT(); return; L_088A7A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E28; } @@ -8692,7 +8354,6 @@ L_088A7A8C: } L_088A7A94: { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_088A7C50; } @@ -8701,7 +8362,6 @@ L_088A7A94: L_088A7A9C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088A7B84; } @@ -8712,7 +8372,6 @@ L_088A7AA8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.gpr[7] = (0u | 55u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088A7B74; } @@ -8723,7 +8382,6 @@ L_088A7ABC: aot_gpr_6 = (4u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088A7B74; } @@ -8748,7 +8406,6 @@ L_088A7AE4: goto L_088A7AEC; L_088A7AEC: aot_gpr_31 = (0x088A7AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7AF4u) goto L_088A7AF4; AOT_REGCACHE_SYNC_OUT(); return; L_088A7AF4: @@ -8769,7 +8426,6 @@ L_088A7B08: AOT_REGCACHE_SYNC_OUT(); return; L_088A7B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7B4C; } @@ -8783,7 +8439,6 @@ L_088A7B1C: goto L_088A7B24; L_088A7B24: aot_gpr_31 = (0x088A7B2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7B2Cu) goto L_088A7B2C; AOT_REGCACHE_SYNC_OUT(); return; L_088A7B2C: @@ -8831,7 +8486,6 @@ L_088A7B74: AOT_REGCACHE_SYNC_OUT(); return; L_088A7B7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E28; } @@ -8856,7 +8510,6 @@ L_088A7B98: goto L_088A7BA0; L_088A7BA0: aot_gpr_31 = (0x088A7BA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7BA8u) goto L_088A7BA8; AOT_REGCACHE_SYNC_OUT(); return; L_088A7BA8: @@ -8886,7 +8539,6 @@ L_088A7BD4: AOT_REGCACHE_SYNC_OUT(); return; L_088A7BE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7C30; } @@ -8900,7 +8552,6 @@ L_088A7BE8: goto L_088A7BF0; L_088A7BF0: aot_gpr_31 = (0x088A7BF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7BF8u) goto L_088A7BF8; AOT_REGCACHE_SYNC_OUT(); return; L_088A7BF8: @@ -8942,7 +8593,6 @@ L_088A7C38: AOT_REGCACHE_SYNC_OUT(); return; L_088A7C48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E28; } @@ -8956,7 +8606,6 @@ L_088A7C50: AOT_REGCACHE_SYNC_OUT(); return; L_088A7C5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A7D60; } @@ -8989,7 +8638,6 @@ L_088A7C8C: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A7D50; } @@ -9014,7 +8662,6 @@ L_088A7CB4: goto L_088A7CBC; L_088A7CBC: aot_gpr_31 = (0x088A7CC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7CC4u) goto L_088A7CC4; AOT_REGCACHE_SYNC_OUT(); return; L_088A7CC4: @@ -9035,7 +8682,6 @@ L_088A7CD8: AOT_REGCACHE_SYNC_OUT(); return; L_088A7CE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7D1C; } @@ -9049,7 +8695,6 @@ L_088A7CEC: goto L_088A7CF4; L_088A7CF4: aot_gpr_31 = (0x088A7CFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7CFCu) goto L_088A7CFC; AOT_REGCACHE_SYNC_OUT(); return; L_088A7CFC: @@ -9103,7 +8748,6 @@ L_088A7D50: AOT_REGCACHE_SYNC_OUT(); return; L_088A7D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E28; } @@ -9129,7 +8773,6 @@ L_088A7D78: goto L_088A7D80; L_088A7D80: aot_gpr_31 = (0x088A7D88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7D88u) goto L_088A7D88; AOT_REGCACHE_SYNC_OUT(); return; L_088A7D88: @@ -9159,7 +8802,6 @@ L_088A7DB4: AOT_REGCACHE_SYNC_OUT(); return; L_088A7DC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7E10; } @@ -9173,7 +8815,6 @@ L_088A7DC8: goto L_088A7DD0; L_088A7DD0: aot_gpr_31 = (0x088A7DD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7DD8u) goto L_088A7DD8; AOT_REGCACHE_SYNC_OUT(); return; L_088A7DD8: @@ -9215,7 +8856,6 @@ L_088A7E18: AOT_REGCACHE_SYNC_OUT(); return; L_088A7E28: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A7ECC; } @@ -9251,7 +8891,6 @@ L_088A7E54: L_088A7E60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088A7E90; } @@ -9259,12 +8898,10 @@ L_088A7E60: } L_088A7E6C: aot_gpr_31 = (0x088A7E74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7E74u) goto L_088A7E74; AOT_REGCACHE_SYNC_OUT(); return; L_088A7E74: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088A7E90; } @@ -9273,7 +8910,6 @@ L_088A7E74: L_088A7E7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088A7E90; } @@ -9299,7 +8935,6 @@ L_088A7E9C: AOT_REGCACHE_SYNC_OUT(); return; L_088A7EA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088A7ECC; } @@ -9321,7 +8956,6 @@ L_088A7EB8: AOT_REGCACHE_SYNC_OUT(); return; L_088A7ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A7F3C; } @@ -9339,7 +8973,6 @@ L_088A7ED4: } L_088A7EE4: aot_gpr_31 = (0x088A7EECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A7EECu) goto L_088A7EEC; AOT_REGCACHE_SYNC_OUT(); return; L_088A7EEC: @@ -9396,7 +9029,17 @@ L_088A7F3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A7F64: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(268))); @@ -9414,7 +9057,6 @@ L_088A7F64: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(60), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A7FC0; } @@ -9435,7 +9077,6 @@ L_088A7FC0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A7FE0; } @@ -9451,7 +9092,6 @@ L_088A7FE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 1u, 0x088A8004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9466,7 +9106,6 @@ L_088A7FF0: goto L_088A7FFC; L_088A7FFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 5u, 0x088A8038u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0041.cpp b/profiles/vcs/generated/generated_unit_0041.cpp index 061821a..62e5aba 100644 --- a/profiles/vcs/generated/generated_unit_0041.cpp +++ b/profiles/vcs/generated/generated_unit_0041.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0041[4059] = { - 1, 0, 2, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 19, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 25, - 0, 26, 0, 0, 27, 0, 0, 28, 0, 0, 29, 30, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 35, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 46, 0, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, - 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 61, 0, 62, 0, 0, 0, 63, 0, 64, 0, 0, 65, 0, 0, 66, 0, 67, 0, - 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 84, 0, - 85, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 88, 0, 0, 0, 89, 0, 90, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 93, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 99, 100, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, - 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 0, 126, - 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 136, 0, 0, 0, 137, 0, 138, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 142, 0, 0, 0, - 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, - 147, 0, 0, 148, 0, 0, 149, 0, 150, 0, 151, 0, 152, 153, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, - 0, 158, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 161, 0, 0, 162, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 166, 167, 0, 0, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, - 171, 0, 172, 0, 0, 0, 0, 173, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 0, 181, 0, 0, 0, 0, 182, 0, - 183, 0, 184, 0, 185, 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, 0, - 0, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 197, 0, 198, 0, 199, 0, 0, 0, 200, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, - 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 209, 0, 210, 0, 211, 0, 212, 0, 213, - 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, - 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 241, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, - 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, - 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, - 0, 0, 259, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 274, 0, 275, 0, 276, 0, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, - 279, 0, 280, 0, 0, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 288, 0, - 0, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 293, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 296, 0, 297, 0, - 0, 0, 0, 298, 0, 299, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, - 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 312, 0, 0, 313, 0, 314, 315, 0, 316, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 319, 320, 0, 321, - 0, 0, 322, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 331, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 0, 340, 0, 341, 0, 342, 0, 0, 0, 0, 343, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 347, 0, - 0, 0, 348, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, - 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, 360, - 0, 0, 0, 0, 361, 0, 362, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, - 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, - 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 375, 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 379, 0, 380, 0, 381, 0, 0, 0, 0, 382, 0, 383, 0, 384, 0, 385, - 0, 0, 0, 386, 0, 387, 0, 0, 0, 388, 0, 389, 0, 0, 0, 390, 0, 391, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 394, 0, 395, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 399, 0, 0, 0, - 0, 0, 0, 400, 0, 401, 402, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 405, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 407, 0, 408, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, - 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 423, - 0, 0, 0, 0, 424, 0, 425, 0, 0, 426, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, - 431, 0, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 438, 439, 0, - 440, 0, 0, 0, 441, 0, 442, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, - 448, 0, 449, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, 0, 0, 456, - 0, 457, 0, 458, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 463, 0, - 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 472, 0, 473, 0, 474, - 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, - 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 479, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 484, - 485, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 490, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, - 0, 493, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 498, 0, 499, - 0, 0, 0, 500, 0, 501, 502, 0, 0, 0, 0, 503, 0, 0, 0, 0, 504, 0, 505, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 0, 508, 0, - 0, 0, 509, 0, 0, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 514, 0, 515, 0, 516, 0, 0, 517, 0, 0, 0, - 518, 0, 0, 0, 519, 0, 0, 520, 0, 521, 0, 0, 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 531, 0, 532, 0, 0, 0, 533, 0, - 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 539, 0, 0, 0, 540, - 0, 0, 0, 0, 0, 0, 0, 0, 541, 542, 0, 543, 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, - 0, 0, 0, 551, 552, 0, 0, 553, 0, 554, 0, 555, 0, 0, 0, 556, 0, 557, 0, 558, 0, 0, 559, 0, 0, 0, 560, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 562, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 564, 565, 0, 0, 566, 0, 567, 0, 0, 0, 568, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, - 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 580, 581, 0, 0, 582, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 587, 0, 588, 0, 589, 0, 0, 0, 0, 590, 0, 591, 0, 592, 0, 0, 593, 0, 0, 594, 595, 0, - 596, 0, 0, 597, 0, 0, 0, 598, 0, 599, 0, 0, 600, 601, 0, 0, 602, 0, 0, 0, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 0, - 608, 0, 0, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 615, 0, 616, 0, 0, 617, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, - 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 622, 0, 623, 624, 0, 0, 625, 0, 0, 626, 0, 0, 0, 0, 627, 0, - 628, 0, 0, 0, 629, 0, 630, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 634, 0, 0, 635, 0, 636, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0041[64] = { + 0x80010001082020A5ull, 0x9201002000000C28ull, 0x80484C9290424020ull, 0x0020082010104454ull, + 0x4000403400000020ull, 0x0020004018000000ull, 0x2000000008400000ull, 0x04A0881252514A02ull, + 0x0500000000020840ull, 0x002A208554000500ull, 0x200004001A110528ull, 0x0445000011010888ull, + 0x1402000120000000ull, 0x0400000840000000ull, 0xA104004000000400ull, 0x00010110010A8022ull, + 0x2024000215004510ull, 0x0924002249013549ull, 0x04D0800000000000ull, 0x2000148509000000ull, + 0x2105085542A21000ull, 0x2482010045482890ull, 0x01401010AA880802ull, 0x20801081442104A0ull, + 0x0000015500004100ull, 0x0000020080000014ull, 0x400000100400000Aull, 0x1000201040000020ull, + 0x0400008020200800ull, 0x0820202480020080ull, 0x0080100008104010ull, 0x0040002800000000ull, + 0x5080A94508254080ull, 0x012210A850819054ull, 0x0000000000800000ull, 0x0904000102000000ull, + 0xD5500284B0215A44ull, 0x1001001001001000ull, 0x5001285500100100ull, 0x8452040814050104ull, + 0x4000002812220950ull, 0xAA15100008492001ull, 0x1900405001228A28ull, 0x0000000910000168ull, + 0xA004145000000000ull, 0xA100009200050900ull, 0x6490024948014250ull, 0x8504284520409251ull, + 0x080000015120004Aull, 0xA85042A000000000ull, 0xA4024A4020000004ull, 0x8000080034000083ull, + 0x48250868A8090082ull, 0x0205229112A42244ull, 0x4520480000008001ull, 0x8841080001000008ull, + 0x044A8A98AA822B00ull, 0x01148A600004A000ull, 0x0001000000000400ull, 0x0000008040200020ull, + 0x0000000000513140ull, 0x2AA1328964A85540ull, 0x424D400804A55551ull, 0x00000000052240D1ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0041[64] = { + 1u, 11u, 20u, 35u, 45u, 51u, 55u, 58u, 75u, 80u, 92u, 103u, 113u, 118u, 121u, 127u, + 136u, 147u, 164u, 169u, 177u, 192u, 206u, 218u, 230u, 237u, 241u, 246u, 251u, 256u, 264u, 270u, + 273u, 289u, 305u, 306u, 311u, 332u, 337u, 348u, 361u, 372u, 386u, 400u, 407u, 414u, 424u, 440u, + 457u, 466u, 475u, 485u, 493u, 509u, 526u, 534u, 541u, 561u, 572u, 574u, 578u, 585u, 608u, 628u, }; void recomp_unit_0041_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0041_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088A8004u; - entry_id = (entry_delta < 16236u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0041[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16236u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0041[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0041[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088A8004; @@ -808,7 +716,6 @@ LOCAL_DISPATCH: } L_088A8004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A8354; } @@ -817,7 +724,6 @@ L_088A8004: L_088A800C: aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A8038; } @@ -825,16 +731,13 @@ L_088A800C: } L_088A8018: aot_gpr_31 = (0x088A8020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A8020u) goto L_088A8020; AOT_REGCACHE_SYNC_OUT(); return; L_088A8020: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8038; } @@ -860,7 +763,6 @@ L_088A8058: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088A8354; } @@ -869,9 +771,7 @@ L_088A8058: L_088A8070: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25048))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8354; } @@ -907,7 +807,6 @@ L_088A8084: aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fpr[22] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (ctx.gpr[16] + static_cast(32)); if (branch_taken) { @@ -944,7 +843,6 @@ L_088A80C4: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088A8100; @@ -952,7 +850,6 @@ L_088A80C4: goto L_088A8100; L_088A8100: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25040))); goto L_088A8118; @@ -1048,7 +945,6 @@ L_088A8130: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088A8198; @@ -1079,7 +975,6 @@ L_088A8198: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088A81C4; @@ -1092,9 +987,7 @@ L_088A81C4: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8354; } @@ -1119,7 +1012,6 @@ L_088A8200: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_2 | 0u); if (branch_taken) { @@ -1142,7 +1034,6 @@ L_088A8218: L_088A823C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A8274; } @@ -1153,7 +1044,6 @@ L_088A8248: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088A8274; } @@ -1176,7 +1066,6 @@ L_088A8274: AOT_REGCACHE_SYNC_OUT(); return; L_088A8280: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088A8354; } @@ -1185,7 +1074,6 @@ L_088A8280: L_088A8288: aot_gpr_4 = (0u + static_cast(-10)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A82B0; } @@ -1215,9 +1103,7 @@ L_088A82B0: L_088A82BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8300; } @@ -1264,7 +1150,6 @@ L_088A831C: aot_gpr_4 = (aot_gpr_2 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088A8354; } @@ -1301,7 +1186,17 @@ L_088A8354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A8374: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), ctx.gpr[17]); @@ -1321,7 +1216,6 @@ L_088A8398: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1104))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1056))); goto L_088A8498; @@ -1365,7 +1259,6 @@ L_088A83D8: aot_gpr_5 = (ctx.gpr[16] + static_cast(192)); aot_gpr_4 = (ctx.gpr[16] + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A8418; @@ -1487,7 +1380,6 @@ L_088A84BC: aot_gpr_5 = (ctx.gpr[16] + static_cast(192)); aot_gpr_4 = (ctx.gpr[16] + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A84FC; @@ -1601,7 +1493,6 @@ L_088A859C: aot_gpr_5 = (ctx.gpr[16] + static_cast(192)); aot_gpr_4 = (ctx.gpr[16] + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088A85D8; @@ -1691,7 +1582,17 @@ L_088A865C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A8670: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(300), ctx.gpr[16]); @@ -1795,7 +1696,6 @@ L_088A8744: } L_088A8754: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A8768; } @@ -1820,7 +1720,6 @@ L_088A875C: L_088A8768: aot_gpr_4 = (0u | 10u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_088A877C; } @@ -1828,7 +1727,6 @@ L_088A8768: } L_088A8774: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088A8788; } @@ -1881,7 +1779,6 @@ L_088A87B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088A881C; } @@ -1912,7 +1809,6 @@ L_088A87C0: } L_088A87D8: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088A87EC; } @@ -1987,9 +1883,7 @@ L_088A87EC: L_088A881C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8848; } @@ -2126,7 +2020,6 @@ L_088A8848: AOT_REGCACHE_SYNC_OUT(); return; L_088A88E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088A8984; } @@ -2162,7 +2055,6 @@ L_088A88EC: AOT_REGCACHE_SYNC_OUT(); return; L_088A8924: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088A897C; } @@ -2197,7 +2089,6 @@ L_088A896C: } L_088A8974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A89B8; } @@ -2222,9 +2113,7 @@ L_088A8984: L_088A898C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A89B8; } @@ -2234,9 +2123,7 @@ L_088A89A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A89D0; } @@ -2246,7 +2133,6 @@ L_088A89B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A89D8; } @@ -2254,7 +2140,6 @@ L_088A89B8: } L_088A89C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A8A2C; } @@ -2287,7 +2172,6 @@ L_088A89D8: AOT_REGCACHE_SYNC_OUT(); return; L_088A8A10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088A8A24; } @@ -2324,9 +2208,7 @@ L_088A8A2C: AOT_REGCACHE_SYNC_OUT(); return; L_088A8A44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_20)) && ctx.fpr[22] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8A70; } @@ -2335,9 +2217,7 @@ L_088A8A44: L_088A8A54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A8A70; } @@ -2375,7 +2255,17 @@ L_088A8A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A8AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -2394,7 +2284,6 @@ L_088A8AF8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A8B20; } @@ -2410,7 +2299,6 @@ L_088A8B20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A8F00; } @@ -2421,7 +2309,6 @@ L_088A8B30: aot_gpr_6 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_088A8F00; } @@ -2489,7 +2376,6 @@ L_088A8B74: AOT_REGCACHE_SYNC_OUT(); return; L_088A8BC4: aot_gpr_31 = (0x088A8BCCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A8BCCu) goto L_088A8BCC; AOT_REGCACHE_SYNC_OUT(); return; L_088A8BCC: @@ -2650,7 +2536,6 @@ L_088A8CF4: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[20] = (std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088A8D7Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A8D7Cu) goto L_088A8D7C; AOT_REGCACHE_SYNC_OUT(); return; L_088A8D7C: @@ -2841,7 +2726,6 @@ L_088A8EE4: } L_088A8EF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9024; } @@ -2849,7 +2733,6 @@ L_088A8EF8: } L_088A8F00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A93B4; } @@ -2859,7 +2742,6 @@ L_088A8F08: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A9024; } @@ -2894,7 +2776,6 @@ L_088A8F18: AOT_REGCACHE_SYNC_OUT(); return; L_088A8F40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088A8F50; } @@ -2907,9 +2788,7 @@ L_088A8F48: L_088A8F50: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9024; } @@ -2955,7 +2834,6 @@ L_088A8FA4: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088A8FC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A8FC4u) goto L_088A8FC4; AOT_REGCACHE_SYNC_OUT(); return; L_088A8FC4: @@ -2984,7 +2862,6 @@ L_088A9014: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A8F94; } @@ -2992,7 +2869,6 @@ L_088A9014: } L_088A9024: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088A90CC; } @@ -3002,7 +2878,6 @@ L_088A902C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[23] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A90CC; } @@ -3037,7 +2912,6 @@ L_088A903C: AOT_REGCACHE_SYNC_OUT(); return; L_088A9064: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088A9074; } @@ -3050,7 +2924,6 @@ L_088A906C: L_088A9074: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15820u << 16u); if (branch_taken) { @@ -3081,7 +2954,6 @@ L_088A9088: L_088A90CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(960))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A93B4; } @@ -3101,7 +2973,6 @@ L_088A90D8: L_088A90F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A9124; } @@ -3116,7 +2987,6 @@ L_088A9104: L_088A9110: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088A912C; } @@ -3124,7 +2994,6 @@ L_088A9110: } L_088A911C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9138; } @@ -3132,7 +3001,6 @@ L_088A911C: } L_088A9124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A93B4; } @@ -3149,7 +3017,6 @@ L_088A9134: L_088A9138: ctx.gpr[19] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088A92D4; } @@ -3183,7 +3050,6 @@ L_088A9170: L_088A917C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(80)); aot_gpr_31 = (0x088A9188u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 622u, 0x08972DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9188u) goto L_088A9188; AOT_REGCACHE_SYNC_OUT(); return; L_088A9188: @@ -3332,7 +3198,6 @@ L_088A91F0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(272)); if (branch_taken) { @@ -3353,7 +3218,6 @@ L_088A92C0: } L_088A92D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A93B4; } @@ -3449,9 +3313,7 @@ L_088A92EC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9370; } @@ -3490,7 +3352,6 @@ L_088A938C: L_088A93A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A93B4; } @@ -3524,7 +3385,17 @@ L_088A93B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A93F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); @@ -3547,7 +3418,6 @@ L_088A9434: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A9460; } @@ -3557,7 +3427,6 @@ L_088A9448: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A9468; } @@ -3565,7 +3434,6 @@ L_088A9448: } L_088A9458: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A949C; } @@ -3573,7 +3441,6 @@ L_088A9458: } L_088A9460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9EB4; } @@ -3584,7 +3451,6 @@ L_088A9468: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A949C; } @@ -3597,7 +3463,6 @@ L_088A947C: AOT_REGCACHE_SYNC_OUT(); return; L_088A9484: { const bool branch_taken = ctx.gpr[17] == aot_gpr_2; - // nop if (branch_taken) { goto L_088A949C; } @@ -3610,7 +3475,6 @@ L_088A948C: AOT_REGCACHE_SYNC_OUT(); return; L_088A9494: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_088A94C4; } @@ -3619,9 +3483,7 @@ L_088A9494: L_088A949C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A94CC; } @@ -3640,7 +3502,6 @@ L_088A94B0: } L_088A94C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9EB4; } @@ -3650,9 +3511,7 @@ L_088A94CC: aot_gpr_4 = (16840u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A976C; } @@ -3663,7 +3522,6 @@ L_088A94E4: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A976C; } @@ -3674,9 +3532,7 @@ L_088A94F8: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A976C; } @@ -3695,7 +3551,6 @@ L_088A9520: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088A955C; } @@ -3703,16 +3558,13 @@ L_088A9520: } L_088A9530: aot_gpr_31 = (0x088A9538u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9538u) goto L_088A9538; AOT_REGCACHE_SYNC_OUT(); return; L_088A9538: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A955C; } @@ -3725,12 +3577,10 @@ L_088A9550: goto L_088A955C; L_088A955C: aot_gpr_31 = (0x088A9564u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9564u) goto L_088A9564; AOT_REGCACHE_SYNC_OUT(); return; L_088A9564: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_088A95C8; } @@ -3781,9 +3631,7 @@ L_088A95C8: aot_gpr_4 = (17008u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A95F8; } @@ -3792,7 +3640,6 @@ L_088A95C8: L_088A95E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A95F8; } @@ -3844,7 +3691,6 @@ L_088A9650: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A972C; } @@ -3852,12 +3698,10 @@ L_088A9650: } L_088A9660: aot_gpr_31 = (0x088A9668u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9668u) goto L_088A9668; AOT_REGCACHE_SYNC_OUT(); return; L_088A9668: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088A972C; } @@ -3870,7 +3714,6 @@ L_088A9670: AOT_REGCACHE_SYNC_OUT(); return; L_088A9678: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_088A972C; } @@ -3881,7 +3724,6 @@ L_088A9680: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088A972C; } @@ -3903,7 +3745,6 @@ L_088A9694: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x088A96B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A96B4u) goto L_088A96B4; AOT_REGCACHE_SYNC_OUT(); return; L_088A96B4: @@ -3922,9 +3763,7 @@ L_088A96B4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A972C; } @@ -3932,7 +3771,6 @@ L_088A96B4: } L_088A96DC: aot_gpr_31 = (0x088A96E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A96E4u) goto L_088A96E4; AOT_REGCACHE_SYNC_OUT(); return; L_088A96E4: @@ -3954,9 +3792,7 @@ L_088A96E4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A972C; } @@ -3964,7 +3800,6 @@ L_088A96E4: } L_088A9718: aot_gpr_31 = (0x088A9720u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9720u) goto L_088A9720; AOT_REGCACHE_SYNC_OUT(); return; L_088A9720: @@ -3977,9 +3812,7 @@ L_088A972C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(636))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A976C; } @@ -3988,9 +3821,7 @@ L_088A972C: L_088A9744: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A976C; } @@ -4007,7 +3838,6 @@ L_088A976C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A9784; } @@ -4023,9 +3853,7 @@ L_088A9784: aot_gpr_4 = (17382u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9EB4; } @@ -4051,7 +3879,6 @@ L_088A97B4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088A97E0; @@ -4061,7 +3888,6 @@ L_088A97E0: aot_gpr_4 = (17224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[16] + static_cast(48)); if (branch_taken) { @@ -4078,7 +3904,6 @@ L_088A97F8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088A9824; @@ -4088,9 +3913,7 @@ L_088A9824: aot_gpr_4 = (17224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9EB4; } @@ -4165,7 +3988,6 @@ L_088A9894: } L_088A989C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088A9B18; } @@ -4219,12 +4041,10 @@ L_088A98A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088A990Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A990Cu) goto L_088A990C; AOT_REGCACHE_SYNC_OUT(); return; L_088A990C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9B7C; } @@ -4279,7 +4099,6 @@ L_088A9914: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088A9980u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9980u) goto L_088A9980; AOT_REGCACHE_SYNC_OUT(); return; L_088A9980: @@ -4292,7 +4111,6 @@ L_088A9980: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9B7C; } @@ -4344,12 +4162,10 @@ L_088A99A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088A9A08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9A08u) goto L_088A9A08; AOT_REGCACHE_SYNC_OUT(); return; L_088A9A08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9B7C; } @@ -4400,7 +4216,6 @@ L_088A9A10: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088A9A6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9A6Cu) goto L_088A9A6C; AOT_REGCACHE_SYNC_OUT(); return; L_088A9A6C: @@ -4413,7 +4228,6 @@ L_088A9A6C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9B7C; } @@ -4467,7 +4281,6 @@ L_088A9A94: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088A9AFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9AFCu) goto L_088A9AFC; AOT_REGCACHE_SYNC_OUT(); return; L_088A9AFC: @@ -4477,7 +4290,6 @@ L_088A9AFC: aot_fpr_12 = aot_fpr_13 + aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088A9B7C; } @@ -4530,7 +4342,6 @@ L_088A9B18: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088A9B7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9B7Cu) goto L_088A9B7C; AOT_REGCACHE_SYNC_OUT(); return; L_088A9B7C: @@ -4560,9 +4371,7 @@ L_088A9B94: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9DD8; } @@ -4636,7 +4445,6 @@ L_088A9C58: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088A9C78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088A9C78u) goto L_088A9C78; AOT_REGCACHE_SYNC_OUT(); return; L_088A9C78: @@ -4684,7 +4492,6 @@ L_088A9CEC: aot_gpr_4 = (20224u << 16u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1080))); if (branch_taken) { @@ -4744,7 +4551,6 @@ L_088A9D98: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1080), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4769,9 +4575,7 @@ L_088A9DD8: aot_gpr_4 = (16000u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9E3C; } @@ -4786,7 +4590,6 @@ L_088A9DF0: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088A9E3C; } @@ -4809,9 +4612,7 @@ L_088A9E3C: aot_gpr_4 = (16000u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9EB4; } @@ -4822,9 +4623,7 @@ L_088A9E54: aot_gpr_4 = (17347u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088A9EB4; } @@ -4879,7 +4678,17 @@ L_088A9EB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088A9EE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); @@ -4964,7 +4773,6 @@ L_088A9F98: { const float fs = aot_fpr_12; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[30] = std::bit_cast(0x7FC00000u); else ctx.fpr[30] = fs * ft; } ctx.fpr[30] = ctx.fpr[30] + ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(ctx.fpr[30]) ^ 0x80000000u); goto L_088A9FDC; @@ -5023,7 +4831,6 @@ L_088AA03C: AOT_REGCACHE_SYNC_OUT(); return; L_088AA044: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AA058; } @@ -5059,7 +4866,6 @@ L_088AA084: goto L_088AA08C; L_088AA08C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088AA09C; @@ -5105,7 +4911,6 @@ L_088AA0E0: AOT_REGCACHE_SYNC_OUT(); return; L_088AA0F4: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_088AA11C; } @@ -5113,7 +4918,6 @@ L_088AA0F4: } L_088AA0FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088AA10C; @@ -5132,7 +4936,6 @@ L_088AA11C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(360))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); if (branch_taken) { @@ -5172,7 +4975,6 @@ L_088AA160: AOT_REGCACHE_SYNC_OUT(); return; L_088AA174: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_088AA1A0; } @@ -5181,7 +4983,6 @@ L_088AA174: L_088AA17C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088AA190; @@ -5189,7 +4990,6 @@ L_088AA17C: goto L_088AA190; L_088AA190: aot_gpr_31 = (0x088AA198u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA198u) goto L_088AA198; AOT_REGCACHE_SYNC_OUT(); return; L_088AA198: @@ -5201,7 +5001,6 @@ L_088AA1A0: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088AA1C8; } @@ -5212,7 +5011,6 @@ L_088AA1B4: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088AA1D8; } @@ -5477,7 +5275,17 @@ L_088AA384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA3CC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5503,11 +5311,20 @@ L_088AA3CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA3E4: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); jump_target = aot_gpr_31; @@ -5515,7 +5332,17 @@ L_088AA3E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA3F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5548,7 +5375,6 @@ L_088AA41C: goto L_088AA428; L_088AA428: aot_gpr_31 = (0x088AA430u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA430u) goto L_088AA430; AOT_REGCACHE_SYNC_OUT(); return; L_088AA430: @@ -5556,7 +5382,6 @@ L_088AA430: goto L_088AA434; L_088AA434: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AA444; } @@ -5579,7 +5404,17 @@ L_088AA444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA458: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -5587,7 +5422,6 @@ L_088AA458: aot_gpr_5 = (aot_gpr_6 - aot_gpr_5); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088AA478; } @@ -5598,11 +5432,20 @@ L_088AA474: goto L_088AA478; L_088AA478: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA480: aot_gpr_4 = (2246u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(4080)); @@ -5621,11 +5464,20 @@ L_088AA48C: } L_088AA4A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA4A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -5650,12 +5502,10 @@ L_088AA4D4: } L_088AA4DC: aot_gpr_31 = (0x088AA4E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA4E4u) goto L_088AA4E4; AOT_REGCACHE_SYNC_OUT(); return; L_088AA4E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AA6FC; } @@ -5663,12 +5513,10 @@ L_088AA4E4: } L_088AA4EC: aot_gpr_31 = (0x088AA4F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA4F4u) goto L_088AA4F4; AOT_REGCACHE_SYNC_OUT(); return; L_088AA4F4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088AA6FC; } @@ -5690,7 +5538,6 @@ L_088AA500: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 34u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5708,7 +5555,6 @@ L_088AA534: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 7u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5726,7 +5572,6 @@ L_088AA564: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 46u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5744,7 +5589,6 @@ L_088AA594: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5762,7 +5606,6 @@ L_088AA5C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 42u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5780,7 +5623,6 @@ L_088AA5F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5798,7 +5640,6 @@ L_088AA624: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 40u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AA684; } @@ -5816,7 +5657,6 @@ L_088AA654: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088AA6FC; } @@ -5824,12 +5664,10 @@ L_088AA654: } L_088AA684: aot_gpr_31 = (0x088AA68Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA68Cu) goto L_088AA68C; AOT_REGCACHE_SYNC_OUT(); return; L_088AA68C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AA6B0; } @@ -5837,7 +5675,6 @@ L_088AA68C: } L_088AA694: aot_gpr_31 = (0x088AA69Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA69Cu) goto L_088AA69C; AOT_REGCACHE_SYNC_OUT(); return; L_088AA69C: @@ -5856,7 +5693,6 @@ L_088AA69C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AA6C4; } @@ -5864,7 +5700,6 @@ L_088AA69C: } L_088AA6B0: aot_gpr_31 = (0x088AA6B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AA6B8u) goto L_088AA6B8; AOT_REGCACHE_SYNC_OUT(); return; L_088AA6B8: @@ -5901,9 +5736,7 @@ L_088AA6C4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AA6FC; } @@ -5911,7 +5744,6 @@ L_088AA6C4: } L_088AA6F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AA790; } @@ -5921,7 +5753,6 @@ L_088AA6FC: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-20)); aot_gpr_4 = (ctx.gpr[16] < static_cast(18) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AA724; } @@ -5933,11 +5764,20 @@ L_088AA70C: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[16]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-22608))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA724: ctx.gpr[8] = (16076u << 16u); ctx.gpr[8] = (ctx.gpr[8] | 52429u); @@ -5951,7 +5791,6 @@ L_088AA724: AOT_REGCACHE_SYNC_OUT(); return; L_088AA744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AA790; } @@ -5970,7 +5809,6 @@ L_088AA74C: AOT_REGCACHE_SYNC_OUT(); return; L_088AA76C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AA790; } @@ -6000,7 +5838,17 @@ L_088AA790: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA7AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6013,7 +5861,6 @@ L_088AA7AC: L_088AA7C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(45))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AA7DC; } @@ -6045,7 +5892,17 @@ L_088AA7EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6094,7 +5951,17 @@ L_088AA858: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA868: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-24948), 0u); jump_target = aot_gpr_31; @@ -6102,7 +5969,17 @@ L_088AA868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA874: ctx.gpr[7] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -6118,7 +5995,6 @@ L_088AA874: } L_088AA890: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AA8FC; } @@ -6175,11 +6051,20 @@ L_088AA898: goto L_088AA8FC; L_088AA8FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AA904: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6249,7 +6134,6 @@ L_088AA9B4: } L_088AA9C4: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_088AAA48; } @@ -6257,7 +6141,6 @@ L_088AA9C4: } L_088AA9CC: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_088AAA18; } @@ -6289,7 +6172,6 @@ L_088AA9F0: } L_088AA9F8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088AAA48; } @@ -6375,14 +6257,33 @@ L_088AAA64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAA94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAA9C: ctx.gpr[7] = (aot_gpr_4 + static_cast(32)); ctx.gpr[9] = (0u | 32u); @@ -6434,7 +6335,6 @@ L_088AAABC: L_088AAAE4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(112))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088AAAF4; } @@ -6469,11 +6369,20 @@ L_088AAB18: goto L_088AAB1C; L_088AAB1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAB24: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6498,7 +6407,6 @@ L_088AAB74: aot_gpr_4 = (ctx.gpr[16] + ctx.gpr[23]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(112))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088AACB4; } @@ -6507,7 +6415,6 @@ L_088AAB74: L_088AAB84: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(113))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AACB4; } @@ -6526,8 +6433,6 @@ L_088AAB90: aot_gpr_6 = (0u | 0u); ctx.gpr[7] = (0u | 1u); ctx.gpr[8] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[20]); const std::int32_t divisor = static_cast(ctx.gpr[22]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[8] = (ctx.gpr[8] & 255u); aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(11), static_cast(ctx.gpr[8])); @@ -6592,7 +6497,6 @@ L_088AAB90: AOT_REGCACHE_SYNC_OUT(); return; L_088AAC94: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AACB4; } @@ -6607,7 +6511,6 @@ L_088AAC9C: AOT_REGCACHE_SYNC_OUT(); return; L_088AACAC: aot_gpr_31 = (0x088AACB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AACB4u) goto L_088AACB4; AOT_REGCACHE_SYNC_OUT(); return; L_088AACB4: @@ -6640,14 +6543,34 @@ L_088AACCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AACF8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAD00: ctx.gpr[11] = (aot_gpr_6 & 255u); ctx.gpr[8] = (ctx.gpr[10] | 0u); @@ -6662,7 +6585,6 @@ L_088AAD00: L_088AAD24: ctx.gpr[12] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[12] == aot_gpr_4; - // nop if (branch_taken) { goto L_088AAD4C; } @@ -6681,7 +6603,6 @@ L_088AAD30: } L_088AAD44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AAD88; } @@ -6724,7 +6645,6 @@ L_088AAD4C: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(112), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AAE14; } @@ -6738,7 +6658,6 @@ L_088AAD88: L_088AAD94: ctx.gpr[12] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[12] != 0u; - // nop if (branch_taken) { goto L_088AAE00; } @@ -6798,7 +6717,6 @@ L_088AADE4: } L_088AADF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AAE14; } @@ -6817,11 +6735,20 @@ L_088AAE00: } L_088AAE14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAE1C: aot_gpr_4 = (2246u << 16u); aot_gpr_5 = (0u | 0u); @@ -6840,11 +6767,20 @@ L_088AAE28: } L_088AAE3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAE44: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6861,7 +6797,6 @@ L_088AAE44: L_088AAE70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AAF04; } @@ -6869,7 +6804,6 @@ L_088AAE70: } L_088AAE7C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088AAEFC; } @@ -6944,7 +6878,6 @@ L_088AAF04: } L_088AAF14: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088AAF40; } @@ -6982,7 +6915,17 @@ L_088AAF40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAF5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6995,7 +6938,6 @@ L_088AAF5C: L_088AAF78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AAF8C; } @@ -7027,20 +6969,39 @@ L_088AAF9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAFB0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8436), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AAFB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB010; } @@ -7057,7 +7018,6 @@ L_088AAFCC: AOT_REGCACHE_SYNC_OUT(); return; L_088AAFE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AB008; } @@ -7073,7 +7033,6 @@ L_088AAFEC: AOT_REGCACHE_SYNC_OUT(); return; L_088AB000: aot_gpr_31 = (0x088AB008u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AB008u) goto L_088AB008; AOT_REGCACHE_SYNC_OUT(); return; L_088AB008: @@ -7087,7 +7046,17 @@ L_088AB010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB01C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_2 = (ctx.gpr[11] | 0u); @@ -7112,7 +7081,6 @@ L_088AB01C: L_088AB058: aot_gpr_2 = (static_cast(ctx.gpr[11]) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088AB07C; } @@ -7122,7 +7090,6 @@ L_088AB064: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8436))); aot_gpr_2 = (static_cast(aot_gpr_2) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088AB084; } @@ -7130,7 +7097,6 @@ L_088AB064: } L_088AB074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AB198; } @@ -7138,7 +7104,6 @@ L_088AB074: } L_088AB07C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AB198; } @@ -7196,9 +7161,7 @@ L_088AB084: ctx.gpr[3] = (17008u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[3]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AB198; } @@ -7298,20 +7261,39 @@ L_088AB198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB1A0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8440), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB1A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB200; } @@ -7328,7 +7310,6 @@ L_088AB1BC: AOT_REGCACHE_SYNC_OUT(); return; L_088AB1D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AB1F8; } @@ -7344,7 +7325,6 @@ L_088AB1DC: AOT_REGCACHE_SYNC_OUT(); return; L_088AB1F0: aot_gpr_31 = (0x088AB1F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AB1F8u) goto L_088AB1F8; AOT_REGCACHE_SYNC_OUT(); return; L_088AB1F8: @@ -7358,7 +7338,17 @@ L_088AB200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB20C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -7446,7 +7436,6 @@ L_088AB2EC: goto L_088AB2F8; L_088AB2F8: aot_gpr_31 = (0x088AB300u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AB300u) goto L_088AB300; AOT_REGCACHE_SYNC_OUT(); return; L_088AB300: @@ -7483,7 +7472,6 @@ L_088AB320: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(96), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB374; } @@ -7521,7 +7509,17 @@ L_088AB378: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB3B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7563,7 +7561,17 @@ L_088AB408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB420: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -7606,7 +7614,6 @@ L_088AB470: } L_088AB478: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AB5CC; } @@ -7678,7 +7685,6 @@ L_088AB4D8: L_088AB4F0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(124))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088AB528; } @@ -7688,7 +7694,6 @@ L_088AB4FC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(124))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088AB528; } @@ -7698,7 +7703,6 @@ L_088AB50C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(124))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088AB528; } @@ -7714,7 +7718,6 @@ L_088AB528: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(80))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088AB560; } @@ -7725,7 +7728,6 @@ L_088AB538: aot_gpr_6 = (43691u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088AB560; } @@ -7735,13 +7737,11 @@ L_088AB54C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); jump_target = aot_gpr_5; aot_gpr_31 = (0x088AB558u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AB558u) goto L_088AB558; AOT_REGCACHE_SYNC_OUT(); return; L_088AB558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AB568; } @@ -7749,13 +7749,11 @@ L_088AB558: } L_088AB560: aot_gpr_31 = (0x088AB568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AB568u) goto L_088AB568; AOT_REGCACHE_SYNC_OUT(); return; L_088AB568: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(124))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088AB5A0; } @@ -7765,7 +7763,6 @@ L_088AB574: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(124))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088AB5A0; } @@ -7775,7 +7772,6 @@ L_088AB584: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(124))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088AB5A0; } @@ -7789,14 +7785,12 @@ L_088AB594: AOT_REGCACHE_SYNC_OUT(); return; L_088AB5A0: aot_gpr_31 = (0x088AB5A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 663u, 0x088B7A4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AB5A8u) goto L_088AB5A8; AOT_REGCACHE_SYNC_OUT(); return; L_088AB5A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB5CC; } @@ -7805,7 +7799,6 @@ L_088AB5A8: L_088AB5B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB5CC; } @@ -7830,7 +7823,17 @@ L_088AB5CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB5E8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (0u + static_cast(-2)); @@ -7842,7 +7845,17 @@ L_088AB5E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB604: aot_gpr_2 = (2246u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(11888)); @@ -7899,7 +7912,17 @@ L_088AB6B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB6BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7912,7 +7935,6 @@ L_088AB6BC: L_088AB6D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB6EC; } @@ -7944,7 +7966,17 @@ L_088AB6FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AB710: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[23]); @@ -7984,7 +8016,6 @@ L_088AB7B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(130)))))); aot_gpr_5 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088AB9C0; } @@ -7994,9 +8025,7 @@ L_088AB7C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(108))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AB830; } @@ -8005,9 +8034,7 @@ L_088AB7C4: L_088AB7DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AB830; } @@ -8030,9 +8057,7 @@ L_088AB800: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = aot_fpr_13 + ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AB830; } @@ -8043,7 +8068,6 @@ L_088AB824: goto L_088AB828; L_088AB828: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088AB99C; } @@ -8078,7 +8102,6 @@ L_088AB848: } L_088AB860: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088AB878; } @@ -8090,7 +8113,6 @@ L_088AB868: goto L_088AB3B0; L_088AB870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AB9D4; } @@ -8098,7 +8120,6 @@ L_088AB870: } L_088AB878: { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_088AB8C0; } @@ -8125,7 +8146,6 @@ L_088AB894: AOT_REGCACHE_SYNC_OUT(); return; L_088AB8A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088AB8B0; } @@ -8151,7 +8171,6 @@ L_088AB8B0: } L_088AB8C0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088AB998; } @@ -8164,7 +8183,6 @@ L_088AB8C8: L_088AB8D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088AB998; } @@ -8174,7 +8192,6 @@ L_088AB8DC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(124))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088AB940; } @@ -8204,7 +8221,6 @@ L_088AB8EC: AOT_REGCACHE_SYNC_OUT(); return; L_088AB938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AB998; } @@ -8213,7 +8229,6 @@ L_088AB938: L_088AB940: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088AB998; } @@ -8247,7 +8262,6 @@ L_088AB998: L_088AB99C: aot_gpr_5 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088AB9B0; } @@ -8270,7 +8284,6 @@ L_088AB9B0: L_088AB9C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AB9D4; } @@ -8315,7 +8328,17 @@ L_088AB9E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABA2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_2 = (0u | 1u); @@ -8400,7 +8423,17 @@ L_088ABB18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABB58: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (ctx.gpr[7] | 0u); @@ -8410,7 +8443,6 @@ L_088ABB58: ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (static_cast(ctx.gpr[9]) < 32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088ABC34; } @@ -8466,7 +8498,6 @@ L_088ABBA0: AOT_REGCACHE_SYNC_OUT(); return; L_088ABC1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ABC38; } @@ -8476,7 +8507,6 @@ L_088ABC24: ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); ctx.gpr[8] = (static_cast(ctx.gpr[9]) < 32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_088ABB7C; } @@ -8492,16 +8522,24 @@ L_088ABC38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABC44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088ABC54u); - // nop goto L_088AA480; L_088ABC54: aot_gpr_31 = (0x088ABC5Cu); - // nop goto L_088AA800; L_088ABC5C: aot_fpr_12 = std::bit_cast(0u); @@ -8555,20 +8593,16 @@ L_088ABC5C: goto L_088AAE1C; L_088ABD1C: aot_gpr_31 = (0x088ABD24u); - // nop goto L_088AAFB0; L_088ABD24: aot_gpr_31 = (0x088ABD2Cu); - // nop goto L_088AB1A0; L_088ABD2C: aot_gpr_31 = (0x088ABD34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0042_entry, 42u, 49u, 0x088AC608u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABD34u) goto L_088ABD34; AOT_REGCACHE_SYNC_OUT(); return; L_088ABD34: aot_gpr_31 = (0x088ABD3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 235u, 0x0887CCCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABD3Cu) goto L_088ABD3C; AOT_REGCACHE_SYNC_OUT(); return; L_088ABD3C: @@ -8592,7 +8626,6 @@ L_088ABD58: L_088ABD60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24960))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088ABD7C; } @@ -8609,7 +8642,6 @@ L_088ABD78: goto L_088ABD7C; L_088ABD7C: aot_gpr_31 = (0x088ABD84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABD84u) goto L_088ABD84; AOT_REGCACHE_SYNC_OUT(); return; L_088ABD84: @@ -8619,21 +8651,28 @@ L_088ABD84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABD90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088ABDA0u); - // nop goto L_088AB6BC; L_088ABDA0: aot_gpr_31 = (0x088ABDA8u); - // nop goto L_088AA868; L_088ABDA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24960))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ABDB8; } @@ -8649,13 +8688,22 @@ L_088ABDB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABDC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ABDE0; } @@ -8663,20 +8711,16 @@ L_088ABDC4: } L_088ABDD8: aot_gpr_31 = (0x088ABDE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 341u, 0x08A3E03Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABDE0u) goto L_088ABDE0; AOT_REGCACHE_SYNC_OUT(); return; L_088ABDE0: aot_gpr_31 = (0x088ABDE8u); - // nop goto L_088AAF5C; L_088ABDE8: aot_gpr_31 = (0x088ABDF0u); - // nop goto L_088AA7AC; L_088ABDF0: aot_gpr_31 = (0x088ABDF8u); - // nop goto L_088AAA94; L_088ABDF8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8685,50 +8729,51 @@ L_088ABDF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABE04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088ABE14u); - // nop goto L_088AAE44; L_088ABE14: aot_gpr_31 = (0x088ABE1Cu); - // nop goto L_088AA904; L_088ABE1C: aot_gpr_31 = (0x088ABE24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0042_entry, 42u, 110u, 0x088ACC20u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABE24u) goto L_088ABE24; AOT_REGCACHE_SYNC_OUT(); return; L_088ABE24: aot_gpr_31 = (0x088ABE2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0042_entry, 42u, 176u, 0x088ADD94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABE2Cu) goto L_088ABE2C; AOT_REGCACHE_SYNC_OUT(); return; L_088ABE2C: aot_gpr_31 = (0x088ABE34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0042_entry, 42u, 243u, 0x088AE8E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABE34u) goto L_088ABE34; AOT_REGCACHE_SYNC_OUT(); return; L_088ABE34: aot_gpr_31 = (0x088ABE3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0042_entry, 42u, 52u, 0x088AC630u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABE3Cu) goto L_088ABE3C; AOT_REGCACHE_SYNC_OUT(); return; L_088ABE3C: aot_gpr_31 = (0x088ABE44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 242u, 0x0887CD68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABE44u) goto L_088ABE44; AOT_REGCACHE_SYNC_OUT(); return; L_088ABE44: aot_gpr_31 = (0x088ABE4Cu); - // nop goto L_088AB710; L_088ABE4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6480))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ABE60; } @@ -8736,7 +8781,6 @@ L_088ABE4C: } L_088ABE58: aot_gpr_31 = (0x088ABE60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 365u, 0x08A3E394u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABE60u) goto L_088ABE60; AOT_REGCACHE_SYNC_OUT(); return; L_088ABE60: @@ -8746,7 +8790,17 @@ L_088ABE60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ABE6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-640)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6036))); @@ -8778,7 +8832,6 @@ L_088ABE90: AOT_REGCACHE_SYNC_OUT(); return; L_088ABEBC: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_088ABED0; } @@ -8786,7 +8839,6 @@ L_088ABEBC: } L_088ABEC4: aot_gpr_31 = (0x088ABECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ABECCu) goto L_088ABECC; AOT_REGCACHE_SYNC_OUT(); return; L_088ABECC: @@ -8795,7 +8847,6 @@ L_088ABECC: L_088ABED0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(772))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0042_entry, 42u, 28u, 0x088AC344u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8862,7 +8913,6 @@ L_088ABF48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ABF6C; } @@ -8871,7 +8921,6 @@ L_088ABF48: L_088ABF58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ABF6C; } diff --git a/profiles/vcs/generated/generated_unit_0042.cpp b/profiles/vcs/generated/generated_unit_0042.cpp index f7452b4..3147340 100644 --- a/profiles/vcs/generated/generated_unit_0042.cpp +++ b/profiles/vcs/generated/generated_unit_0042.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0042[4089] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, 0, 0, 0, 5, 0, 6, - 0, 0, 0, 7, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 0, 12, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 0, 18, 0, 19, 0, - 0, 0, 20, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 0, 25, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 48, 0, 0, - 0, 0, 49, 0, 0, 50, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 55, 0, 0, 0, 56, 0, 0, 0, - 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 59, 0, 60, - 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, 71, - 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 77, 0, 78, 0, 0, 79, 0, 0, - 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 0, 86, 0, 0, 87, 0, 0, 0, - 0, 88, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, - 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 96, 0, 0, 0, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 103, 0, 0, 104, 0, 105, 0, 0, 0, 106, 0, 0, 107, 0, - 0, 0, 108, 0, 0, 109, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 113, 0, 0, 114, - 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 121, 0, - 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, - 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, 135, 0, 136, 137, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 140, 0, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 148, - 0, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, - 158, 0, 159, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 163, 0, 164, 0, 165, 0, 0, 0, 0, 0, - 166, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 0, 0, 0, 169, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, - 0, 0, 180, 0, 0, 181, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 185, 0, - 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 191, - 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 197, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 200, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 0, 0, 0, 0, 205, - 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, - 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 219, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 227, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 237, 238, 0, 0, 0, - 0, 0, 239, 0, 240, 0, 0, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, - 0, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 252, 0, 253, 0, 0, 0, 0, 0, 254, 0, 255, 0, 256, 0, 0, 257, 0, 258, 0, - 0, 0, 0, 259, 0, 260, 0, 0, 0, 261, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 264, 0, 265, 0, 0, 266, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 269, 0, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 272, 0, 0, 273, 0, - 0, 274, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, - 0, 285, 0, 0, 0, 286, 0, 0, 287, 0, 288, 0, 0, 0, 289, 0, 290, 0, 0, 291, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 295, 0, - 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 0, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 0, 304, 0, 0, 305, 0, 306, 0, 0, 0, - 0, 0, 307, 308, 0, 0, 0, 309, 0, 310, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, - 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, - 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, - 0, 329, 330, 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 0, 0, 0, 0, 0, 0, - 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, 358, 359, 0, 0, 0, 0, 360, 0, 361, 0, 362, 0, 363, 0, - 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, 368, 0, 369, 0, 0, 370, 0, 0, 0, 0, 371, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, - 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 383, 0, 0, 384, 0, 385, 386, 0, 0, - 0, 0, 387, 0, 388, 0, 0, 0, 0, 0, 389, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, - 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, - 0, 0, 398, 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 402, 0, 403, 0, 404, 405, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 408, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 410, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 414, 0, 415, 0, 416, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 419, 0, - 0, 0, 0, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 428, 0, 0, 429, 430, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 434, - 0, 0, 0, 435, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, - 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 443, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0042[64] = { + 0x05224068A1280001ull, 0x5094000000000000ull, 0x0000000002912034ull, 0x0008400400820000ull, + 0x0001240080802100ull, 0x3404000015000140ull, 0xA400000211481424ull, 0x8C80480100100850ull, + 0x1288902425120484ull, 0x000000000040000Aull, 0x00C4242420000000ull, 0x48A4488002000000ull, + 0x9240000000000124ull, 0x0000000000204024ull, 0x4000400844400000ull, 0x0108000801088008ull, + 0x0000000000000004ull, 0x0000000000000000ull, 0x0000000003450000ull, 0x00D1400000000000ull, + 0x810A280000000000ull, 0x0020800000800024ull, 0x4081000000000020ull, 0x0000000905408505ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000401288ull, + 0x0000000000000000ull, 0x9200002000288000ull, 0x0000000000010124ull, 0x8208005444000000ull, + 0x8228A400A2208820ull, 0x8000000000012008ull, 0x0000000000448080ull, 0x0000008901010000ull, + 0x0112020200000000ull, 0x0404000000000000ull, 0x0000000000000224ull, 0x0000000002480808ull, + 0x0400019419010100ull, 0x52A0A22010124900ull, 0x0000000000000628ull, 0x0000000000000000ull, + 0x0003288000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0001001248A0C000ull, + 0x0555200008000000ull, 0x149242AA51494522ull, 0x0294800012002A8Cull, 0x0200080804A40402ull, + 0x10A0000A01551096ull, 0x0008541000048040ull, 0x0000000000000C00ull, 0x10942405550D2240ull, + 0x80000002080A0000ull, 0x00008010000C0000ull, 0x4000441434890000ull, 0x3540028402108405ull, + 0x4285448421015000ull, 0x8412032020105550ull, 0x0000041014000028ull, 0x0100000018000100ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0042[64] = { + 1u, 15u, 20u, 28u, 33u, 40u, 49u, 61u, 72u, 88u, 91u, 99u, 108u, 115u, 119u, 125u, + 132u, 133u, 133u, 138u, 143u, 149u, 154u, 158u, 168u, 168u, 168u, 168u, 173u, 173u, 180u, 184u, + 192u, 206u, 210u, 214u, 219u, 224u, 226u, 229u, 234u, 244u, 259u, 263u, 263u, 268u, 268u, 268u, + 277u, 285u, 307u, 320u, 329u, 344u, 352u, 354u, 372u, 377u, 381u, 392u, 406u, 420u, 435u, 441u, }; void recomp_unit_0042_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0042_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088AC000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0042[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0042[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0042[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088AC000; @@ -688,7 +595,6 @@ L_088AC000: AOT_REGCACHE_SYNC_OUT(); return; L_088AC04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AC344; } @@ -697,7 +603,6 @@ L_088AC04C: L_088AC054: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088AC1D0; } @@ -756,7 +661,6 @@ L_088AC0C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AC0E8; } @@ -765,7 +669,6 @@ L_088AC0C4: L_088AC0D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AC0E8; } @@ -945,7 +848,6 @@ L_088AC0E8: AOT_REGCACHE_SYNC_OUT(); return; L_088AC1C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AC344; } @@ -954,7 +856,6 @@ L_088AC1C8: L_088AC1D0: aot_gpr_4 = (0u | 10u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088AC344; } @@ -1013,7 +914,6 @@ L_088AC240: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(424))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AC264; } @@ -1022,7 +922,6 @@ L_088AC240: L_088AC250: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(416))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AC264; } @@ -1213,7 +1112,17 @@ L_088AC344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC35C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1234,8 +1143,6 @@ L_088AC388: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-24916), aot_gpr_6); ctx.gpr[18] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[17] = (ctx.lo); aot_gpr_31 = (0x088AC3B8u); @@ -1312,7 +1219,17 @@ L_088AC45C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC47C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), aot_gpr_16); @@ -1324,7 +1241,6 @@ L_088AC47C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(ctx.fpr[20])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088AC5F0; } @@ -1427,7 +1343,6 @@ L_088AC520: AOT_REGCACHE_SYNC_OUT(); return; L_088AC560: aot_gpr_31 = (0x088AC568u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AC568u) goto L_088AC568; AOT_REGCACHE_SYNC_OUT(); return; L_088AC568: @@ -1473,7 +1388,6 @@ L_088AC5C8: AOT_REGCACHE_SYNC_OUT(); return; L_088AC5E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AC5F4; } @@ -1494,7 +1408,17 @@ L_088AC5F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC608: aot_gpr_4 = (2246u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(16496)); @@ -1513,11 +1437,20 @@ L_088AC614: } L_088AC628: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC630: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1530,7 +1463,6 @@ L_088AC630: L_088AC64C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AC660; } @@ -1562,7 +1494,17 @@ L_088AC670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC684: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[21]); @@ -1593,7 +1535,6 @@ L_088AC684: L_088AC6E8: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088AC710; } @@ -1601,7 +1542,6 @@ L_088AC6E8: } L_088AC6F4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088AC710; } @@ -1620,7 +1560,6 @@ L_088AC6FC: } L_088AC710: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088AC750; } @@ -1675,7 +1614,17 @@ L_088AC750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC780: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -1697,7 +1646,17 @@ L_088AC7AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AC7B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); ctx.gpr[8] = (ctx.gpr[7] & 255u); @@ -1712,7 +1671,6 @@ L_088AC7B8: L_088AC7DC: ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(45))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AC7EC; } @@ -1734,7 +1692,6 @@ L_088AC7EC: L_088AC7FC: ctx.gpr[9] = (static_cast(ctx.gpr[11]) < 10 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_088AC868; } @@ -1761,7 +1718,6 @@ L_088AC828: ctx.fpr[16] = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_15; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_15 - aot_fpr_14; goto L_088AC850; @@ -1784,7 +1740,6 @@ L_088AC850: goto L_088AC860; L_088AC860: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AC8CC; } @@ -1793,7 +1748,6 @@ L_088AC860: L_088AC868: ctx.gpr[9] = (static_cast(ctx.gpr[11]) < 5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_088AC8CC; } @@ -1820,7 +1774,6 @@ L_088AC894: ctx.fpr[16] = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_15; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_15 - aot_fpr_14; goto L_088AC8BC; @@ -1849,7 +1802,6 @@ L_088AC8CC: goto L_088AC8DC; L_088AC8DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AC904; } @@ -1858,7 +1810,6 @@ L_088AC8DC: L_088AC8E4: ctx.gpr[3] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(45))); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_088AC904; } @@ -1877,7 +1828,6 @@ L_088AC8F0: } L_088AC904: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AC958; } @@ -2205,9 +2155,7 @@ L_088AC958: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ACC14; } @@ -2216,7 +2164,6 @@ L_088AC958: L_088ACA74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); goto L_088ACA94; @@ -2234,7 +2181,6 @@ L_088ACA88: L_088ACA94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); goto L_088ACAB4; @@ -2252,7 +2198,6 @@ L_088ACAA8: L_088ACAB4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); goto L_088ACAD8; @@ -2363,7 +2308,6 @@ L_088ACADC: aot_gpr_4 = (16384u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16128u << 16u); if (branch_taken) { @@ -2393,7 +2337,6 @@ L_088ACB64: } L_088ACB9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_14; goto L_088ACBB8; @@ -2422,7 +2365,6 @@ L_088ACBC8: AOT_REGCACHE_SYNC_OUT(); return; L_088ACBD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ACC14; } @@ -2430,7 +2372,6 @@ L_088ACBD4: } L_088ACBDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_14; goto L_088ACBF8; @@ -2464,7 +2405,17 @@ L_088ACC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ACC20: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); aot_gpr_4 = (2236u << 16u); @@ -2514,7 +2465,6 @@ L_088ACC20: L_088ACCD8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(45))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AD4CC; } @@ -2638,8 +2588,6 @@ L_088ACD54: aot_gpr_6 = (aot_gpr_5 - ctx.gpr[8]); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[8] = (ctx.lo); ctx.gpr[8] = (ctx.gpr[8] & 255u); @@ -2765,9 +2713,7 @@ L_088ACD54: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ACE68; } @@ -2775,9 +2721,7 @@ L_088ACD54: } L_088ACE58: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AD4CC; } @@ -2785,9 +2729,7 @@ L_088ACE58: } L_088ACE68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ACF3C; } @@ -2796,7 +2738,6 @@ L_088ACE68: L_088ACE78: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_088ACE8C; @@ -2822,7 +2763,6 @@ L_088ACE8C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088ACEB8; @@ -2872,7 +2812,6 @@ L_088ACEB8: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088ACEF8; @@ -2881,7 +2820,6 @@ L_088ACEB8: L_088ACEF8: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_088ACF0C; @@ -2921,7 +2859,6 @@ L_088ACF0C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AD008; } @@ -2929,9 +2866,7 @@ L_088ACF0C: } L_088ACF3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AD008; } @@ -2940,7 +2875,6 @@ L_088ACF3C: L_088ACF4C: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_088ACF60; @@ -2966,7 +2900,6 @@ L_088ACF60: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088ACF8C; @@ -3016,7 +2949,6 @@ L_088ACF8C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088ACFCC; @@ -3025,7 +2957,6 @@ L_088ACF8C: L_088ACFCC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_088ACFE0; @@ -3311,7 +3242,6 @@ L_088AD248: AOT_REGCACHE_SYNC_OUT(); return; L_088AD258: aot_gpr_31 = (0x088AD260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AD260u) goto L_088AD260; AOT_REGCACHE_SYNC_OUT(); return; L_088AD260: @@ -3415,7 +3345,6 @@ L_088AD3C0: AOT_REGCACHE_SYNC_OUT(); return; L_088AD3D0: aot_gpr_31 = (0x088AD3D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AD3D8u) goto L_088AD3D8; AOT_REGCACHE_SYNC_OUT(); return; L_088AD3D8: @@ -3474,7 +3403,6 @@ L_088AD3DC: AOT_REGCACHE_SYNC_OUT(); return; L_088AD4AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AD4CC; } @@ -3489,7 +3417,6 @@ L_088AD4B4: AOT_REGCACHE_SYNC_OUT(); return; L_088AD4C4: aot_gpr_31 = (0x088AD4CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AD4CCu) goto L_088AD4CC; AOT_REGCACHE_SYNC_OUT(); return; L_088AD4CC: @@ -3549,7 +3476,17 @@ L_088AD514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AD55C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1120)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3571,7 +3508,6 @@ L_088AD5BC: aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } aot_gpr_31 = (0x088AD5D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AD5D4u) goto L_088AD5D4; AOT_REGCACHE_SYNC_OUT(); return; L_088AD5D4: @@ -3728,7 +3664,6 @@ L_088AD614: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088AD6C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AD6C0u) goto L_088AD6C0; AOT_REGCACHE_SYNC_OUT(); return; L_088AD6C0: @@ -3764,7 +3699,6 @@ L_088AD6F8: } L_088AD700: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AD720; } @@ -3802,7 +3736,6 @@ L_088AD708: goto L_088AD720; L_088AD720: aot_gpr_31 = (0x088AD728u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AD728u) goto L_088AD728; AOT_REGCACHE_SYNC_OUT(); return; L_088AD728: @@ -3836,7 +3769,6 @@ L_088AD758: } L_088AD760: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AD780; } @@ -4446,7 +4378,6 @@ L_088ADB0C: AOT_REGCACHE_SYNC_OUT(); return; L_088ADB1C: aot_gpr_31 = (0x088ADB24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ADB24u) goto L_088ADB24; AOT_REGCACHE_SYNC_OUT(); return; L_088ADB24: @@ -4816,7 +4747,6 @@ L_088ADD3C: AOT_REGCACHE_SYNC_OUT(); return; L_088ADD4C: aot_gpr_31 = (0x088ADD54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ADD54u) goto L_088ADD54; AOT_REGCACHE_SYNC_OUT(); return; L_088ADD54: @@ -4842,14 +4772,23 @@ L_088ADD54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ADD94: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8436))); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(72), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AE8A0; } @@ -4979,7 +4918,6 @@ L_088ADF68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); aot_gpr_4 = (static_cast(aot_gpr_4) < 985 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ADF88; } @@ -4989,7 +4927,6 @@ L_088ADF78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8456))); aot_gpr_4 = (static_cast(aot_gpr_4) < 473 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088ADF90; } @@ -4997,12 +4934,10 @@ L_088ADF78: } L_088ADF88: aot_gpr_31 = (0x088ADF90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 452u, 0x088AAFB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ADF90u) goto L_088ADF90; AOT_REGCACHE_SYNC_OUT(); return; L_088ADF90: aot_gpr_31 = (0x088ADF98u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ADF98u) goto L_088ADF98; AOT_REGCACHE_SYNC_OUT(); return; L_088ADF98: @@ -5030,11 +4965,20 @@ L_088ADFCC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-22536))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ADFE4: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[22] = (0u | 255u); @@ -5105,7 +5049,6 @@ L_088AE054: } L_088AE064: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - ctx.fpr[22]; goto L_088AE07C; @@ -5143,7 +5086,6 @@ L_088AE0A8: } L_088AE0B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AE0FC; } @@ -5151,9 +5093,7 @@ L_088AE0B4: } L_088AE0BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AE0D4; } @@ -5169,9 +5109,7 @@ L_088AE0CC: } L_088AE0D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AE0FC; } @@ -5189,7 +5127,6 @@ L_088AE0FC: aot_gpr_6 = (ctx.gpr[7] + static_cast(-1)); aot_gpr_4 = (aot_gpr_6 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AE86C; } @@ -5209,7 +5146,17 @@ L_088AE10C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AE134: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); @@ -5821,7 +5768,6 @@ L_088AE870: } L_088AE888: aot_gpr_31 = (0x088AE890u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 452u, 0x088AAFB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AE890u) goto L_088AE890; AOT_REGCACHE_SYNC_OUT(); return; L_088AE890: @@ -5858,7 +5804,17 @@ L_088AE8A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AE8E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8440))); @@ -5924,7 +5880,6 @@ L_088AE994: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); aot_gpr_4 = (static_cast(aot_gpr_4) < 961 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AE9B4; } @@ -5934,7 +5889,6 @@ L_088AE9A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8456))); aot_gpr_4 = (static_cast(aot_gpr_4) < 449 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088AE9BC; } @@ -5942,7 +5896,6 @@ L_088AE9A4: } L_088AE9B4: aot_gpr_31 = (0x088AE9BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 468u, 0x088AB1A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AE9BCu) goto L_088AE9BC; AOT_REGCACHE_SYNC_OUT(); return; L_088AE9BC: @@ -5959,7 +5912,6 @@ L_088AE9BC: } L_088AE9D4: { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_088AEF38; } @@ -5967,7 +5919,6 @@ L_088AE9D4: } L_088AE9DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AE9F8; } @@ -5976,7 +5927,6 @@ L_088AE9DC: L_088AE9E4: aot_gpr_6 = (static_cast(aot_gpr_6) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088AEC9C; } @@ -5984,7 +5934,6 @@ L_088AE9E4: } L_088AE9F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AEF38; } @@ -6003,7 +5952,6 @@ L_088AE9F8: } L_088AEA0C: aot_gpr_31 = (0x088AEA14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 468u, 0x088AB1A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AEA14u) goto L_088AEA14; AOT_REGCACHE_SYNC_OUT(); return; L_088AEA14: @@ -6187,7 +6135,6 @@ L_088AEC9C: } L_088AECAC: aot_gpr_31 = (0x088AECB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 468u, 0x088AB1A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AECB4u) goto L_088AECB4; AOT_REGCACHE_SYNC_OUT(); return; L_088AECB4: @@ -6375,7 +6322,6 @@ L_088AEF3C: } L_088AEF54: aot_gpr_31 = (0x088AEF5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 468u, 0x088AB1A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088AEF5Cu) goto L_088AEF5C; AOT_REGCACHE_SYNC_OUT(); return; L_088AEF5C: @@ -6422,7 +6368,17 @@ L_088AEF90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088AEFC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-816)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6525,7 +6481,6 @@ L_088AF0D0: } L_088AF0D8: { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_088AF0E8; } @@ -6552,7 +6507,6 @@ L_088AF104: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(130)))))); ctx.gpr[7] = (ctx.gpr[7] & 1u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_088AF128; } @@ -6561,7 +6515,6 @@ L_088AF104: L_088AF114: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(88))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_16; - // nop if (branch_taken) { goto L_088AF128; } @@ -6587,7 +6540,6 @@ L_088AF128: } L_088AF138: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088AF170; } @@ -6601,7 +6553,6 @@ L_088AF140: L_088AF14C: ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(124))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088AF160; } @@ -6644,7 +6595,6 @@ L_088AF178: } L_088AF184: { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_088AF19C; } @@ -6652,7 +6602,6 @@ L_088AF184: } L_088AF18C: { const bool branch_taken = ctx.gpr[21] == aot_gpr_5; - // nop if (branch_taken) { goto L_088AF19C; } @@ -6660,7 +6609,6 @@ L_088AF18C: } L_088AF194: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088AF22C; } @@ -6673,9 +6621,7 @@ L_088AF19C: L_088AF1A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AF20C; } @@ -6684,7 +6630,6 @@ L_088AF1A4: L_088AF1B8: ctx.gpr[2] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(124))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_5; - // nop if (branch_taken) { goto L_088AF1E8; } @@ -6693,7 +6638,6 @@ L_088AF1B8: L_088AF1C4: ctx.gpr[2] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(124))); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_088AF1E8; } @@ -6702,7 +6646,6 @@ L_088AF1C4: L_088AF1D0: ctx.gpr[2] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(124))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088AF1E8; } @@ -6711,7 +6654,6 @@ L_088AF1D0: L_088AF1DC: ctx.gpr[2] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(124))); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088AF20C; } @@ -6719,7 +6661,6 @@ L_088AF1DC: } L_088AF1E8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088AF208; } @@ -6729,9 +6670,7 @@ L_088AF1F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(116))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AF20C; } @@ -6752,7 +6691,6 @@ L_088AF20C: } L_088AF21C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088AF22C; } @@ -6764,7 +6702,6 @@ L_088AF224: goto L_088AF22C; L_088AF22C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 17u, 0x088B0198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6814,7 +6751,6 @@ L_088AF270: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(116), std::bit_cast(ctx.fpr[30])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(88))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088AFB88; } @@ -6823,7 +6759,6 @@ L_088AF270: L_088AF2BC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(124))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088AFB88; } @@ -6848,7 +6783,6 @@ L_088AF2D0: } L_088AF2DC: { const bool branch_taken = ctx.gpr[21] != aot_gpr_5; - // nop if (branch_taken) { goto L_088AF35C; } @@ -6860,7 +6794,6 @@ L_088AF2E4: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(93), static_cast(ctx.gpr[9])); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(94), static_cast(ctx.gpr[30])); if (branch_taken) { @@ -6875,7 +6808,6 @@ L_088AF304: aot_gpr_5 = (16544u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } if (branch_taken) { @@ -6917,7 +6849,6 @@ L_088AF354: L_088AF35C: aot_gpr_5 = (0u | 6u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_5; - // nop if (branch_taken) { goto L_088AF408; } @@ -6930,7 +6861,6 @@ L_088AF368: aot_fpr_14 = ctx.fpr[20] + aot_fpr_14; aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(93), static_cast(ctx.gpr[9])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(94), static_cast(ctx.gpr[30])); if (branch_taken) { @@ -6944,7 +6874,6 @@ L_088AF38C: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_15 = ctx.fpr[20] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); if (branch_taken) { @@ -7000,7 +6929,6 @@ L_088AF408: L_088AF410: aot_gpr_5 = (0u | 8u); { const bool branch_taken = ctx.gpr[21] == aot_gpr_5; - // nop if (branch_taken) { goto L_088AF430; } @@ -7015,9 +6943,7 @@ L_088AF41C: goto L_088AF430; L_088AF430: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AF448; } @@ -7045,7 +6971,6 @@ L_088AF450: } L_088AF458: { const bool branch_taken = ctx.gpr[21] != aot_gpr_5; - // nop if (branch_taken) { goto L_088AF484; } @@ -7068,7 +6993,6 @@ L_088AF460: } L_088AF484: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_088AF4D4; } @@ -7100,7 +7024,6 @@ L_088AF48C: } L_088AF4D4: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088AF53C; } @@ -7109,7 +7032,6 @@ L_088AF4D4: L_088AF4DC: aot_fpr_12 = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); if (branch_taken) { @@ -7147,7 +7069,6 @@ L_088AF518: L_088AF53C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(128)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AF5A8; } @@ -7195,7 +7116,6 @@ L_088AF590: goto L_088AF5A8; L_088AF5A8: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088AF760; } @@ -7262,9 +7182,7 @@ L_088AF5CC: aot_gpr_5 = (aot_gpr_5 | 46871u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AF62C; } @@ -7383,7 +7301,6 @@ L_088AF724: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AF748; } @@ -7392,7 +7309,6 @@ L_088AF724: L_088AF734: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AF748; } @@ -7439,7 +7355,6 @@ L_088AF770: } L_088AF778: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_088AFA88; } @@ -7468,7 +7383,6 @@ L_088AF788: L_088AF7A8: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_088AF7D0; } @@ -7484,7 +7398,6 @@ L_088AF7B4: AOT_REGCACHE_SYNC_OUT(); return; L_088AF7C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AF7DC; } @@ -7573,7 +7486,6 @@ L_088AF7F0: AOT_REGCACHE_SYNC_OUT(); return; L_088AF844: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AF86C; } @@ -7597,7 +7509,6 @@ L_088AF84C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AF884; } @@ -7796,9 +7707,7 @@ L_088AF8FC: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AF94C; } @@ -7928,7 +7837,6 @@ L_088AFA4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AFA70; } @@ -7937,7 +7845,6 @@ L_088AFA4C: L_088AFA5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088AFA70; } @@ -7960,7 +7867,6 @@ L_088AFA74: goto L_088AFA88; L_088AFA88: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088AFAA8; } @@ -7996,7 +7902,6 @@ L_088AFAB8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(130)))))); goto L_088AFB64; @@ -8030,7 +7935,6 @@ L_088AFB08: L_088AFB28: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15692u << 16u); if (branch_taken) { @@ -8113,7 +8017,6 @@ L_088AFBE0: goto L_088AFBE8; L_088AFBE8: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088AFCA8; } @@ -8135,9 +8038,7 @@ L_088AFBF4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AFC9C; } @@ -8150,7 +8051,6 @@ L_088AFC30: AOT_REGCACHE_SYNC_OUT(); return; L_088AFC38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AFC9C; } @@ -8173,7 +8073,6 @@ L_088AFC40: L_088AFC60: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15692u << 16u); if (branch_taken) { @@ -8206,9 +8105,7 @@ L_088AFC9C: goto L_088AFCA8; L_088AFCA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AFCC0; } @@ -8239,7 +8136,6 @@ L_088AFCC8: AOT_REGCACHE_SYNC_OUT(); return; L_088AFCDC: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088AFD10; } @@ -8279,7 +8175,6 @@ L_088AFD18: } L_088AFD20: { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_088AFD30; } @@ -8287,7 +8182,6 @@ L_088AFD20: } L_088AFD28: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[23]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 9u, 0x088B00C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8295,7 +8189,6 @@ L_088AFD28: } L_088AFD30: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088AFDC4; } @@ -8305,9 +8198,7 @@ L_088AFD38: aot_gpr_4 = (16840u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AFDA0; } @@ -8320,7 +8211,6 @@ L_088AFD50: aot_gpr_4 = (16544u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[20]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } if (branch_taken) { @@ -8397,7 +8287,6 @@ L_088AFDFC: goto L_088AFE0C; L_088AFE0C: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_088AFF20; } @@ -8470,7 +8359,6 @@ L_088AFE14: AOT_REGCACHE_SYNC_OUT(); return; L_088AFE68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088AFE90; } @@ -8494,7 +8382,6 @@ L_088AFE70: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088AFEA8; } @@ -8693,9 +8580,7 @@ L_088AFF20: aot_gpr_5 = (aot_gpr_5 | 46871u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088AFF70; } diff --git a/profiles/vcs/generated/generated_unit_0043.cpp b/profiles/vcs/generated/generated_unit_0043.cpp index aa9717f..74e3c5d 100644 --- a/profiles/vcs/generated/generated_unit_0043.cpp +++ b/profiles/vcs/generated/generated_unit_0043.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0043[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, - 4, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, - 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, - 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 57, - 0, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 60, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 0, 73, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 88, 0, 89, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 93, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, - 0, 0, 0, 98, 0, 99, 100, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 104, 0, 105, 0, 106, 0, 107, 0, 0, 108, 0, 109, 0, 0, 110, 0, 0, 0, 111, 0, 112, 0, 113, 0, 0, 114, 0, 0, 0, 115, 0, 116, - 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, - 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 0, 125, 126, 0, 127, 0, 0, 0, 0, 128, 0, 129, 0, 130, 0, 131, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 140, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 0, 0, 143, 0, 144, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, - 0, 0, 150, 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 0, 155, - 0, 0, 156, 0, 0, 157, 0, 158, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, - 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 172, 0, 173, 0, - 174, 0, 0, 0, 0, 175, 0, 176, 177, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 181, 0, 182, - 0, 0, 0, 0, 183, 0, 184, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, - 0, 0, 0, 0, 0, 188, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 0, 199, 0, 200, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, - 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, - 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 220, 0, 0, 0, - 0, 0, 221, 222, 0, 223, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 0, 243, 0, 244, 0, 0, 0, 0, 0, - 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, - 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 253, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, - 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 263, 0, 264, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 271, 0, 272, 0, 273, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, - 0, 0, 281, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 287, 0, - 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, - 295, 0, 0, 0, 0, 0, 296, 0, 297, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, - 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, - 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, - 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, - 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 335, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 340, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 346, - 0, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, 0, 351, 0, 352, 0, 0, 0, 353, 0, 0, 0, 354, - 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 0, - 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 378, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 381, 0, 382, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 0, 0, - 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, - 393, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, - 0, 401, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 408, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 416, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 423, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 430, - 0, 431, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, - 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, 444, 0, 445, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, - 0, 0, 451, 0, 452, 0, 0, 0, 0, 453, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 463, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 467, 0, - 0, 0, 0, 468, 0, 469, 0, 470, 0, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, - 0, 0, 0, 478, 0, 479, 0, 0, 0, 0, 480, 0, 481, 0, 482, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 0, 487, 0, - 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 496, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, - 0, 504, 0, 0, 0, 0, 505, 0, 0, 506, 0, 0, 0, 507, 0, 0, 0, 0, 508, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0043[64] = { + 0x0814106912000001ull, 0x020000C02A020008ull, 0x24802000240C0080ull, 0x0090024008401000ull, + 0x0488810001052008ull, 0x8120808000042002ull, 0xA400000000000004ull, 0x0490040048022A10ull, + 0x0000082009408040ull, 0x0000000001292004ull, 0x12A4080200080080ull, 0x00100568140A9400ull, + 0x90012088A2544A55ull, 0x002A00101542C810ull, 0x0128480090002801ull, 0x80A0021490020020ull, + 0x00841800000004A4ull, 0x0160000000000000ull, 0x000005A154082041ull, 0xA801000000000000ull, + 0x800800A0200002D0ull, 0x00000000002D0000ull, 0x0000000002A84201ull, 0x0000200140000000ull, + 0x0840000080000108ull, 0x0000000414010000ull, 0x0080206C15002006ull, 0x0015400020A80140ull, + 0x0541010000110800ull, 0x0400541010150404ull, 0x0150404041001001ull, 0x1504040400400410ull, + 0x1010104004004100ull, 0x4004100150404054ull, 0x1040054101010400ull, 0x0400541010100100ull, + 0x0405410101001001ull, 0x1040040041001504ull, 0x0010010400541010ull, 0x0100104005410101ull, + 0x88A20A20A2000000ull, 0x0040000010000820ull, 0x2088800100000000ull, 0x0000400000100008ull, + 0x0008208001000000ull, 0x0000000040000010ull, 0x0000400002800100ull, 0x00000400C0000000ull, + 0x2100008001600000ull, 0x0840002008000884ull, 0x1084000200800221ull, 0x8421000080200022ull, + 0x8842100008020008ull, 0x2210840002008000ull, 0x0016000000010800ull, 0x1400000AA0000000ull, + 0x8000280000500001ull, 0x4000140000285428ull, 0x000050A002112A14ull, 0x002850A850800028ull, + 0x0800D42840001400ull, 0x00A4090240A00000ull, 0x0005084100005000ull, 0x800C224208000280ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0043[64] = { + 1u, 12u, 20u, 29u, 36u, 46u, 54u, 58u, 69u, 76u, 82u, 91u, 104u, 123u, 136u, 146u, + 156u, 164u, 167u, 179u, 183u, 192u, 196u, 203u, 206u, 211u, 215u, 227u, 237u, 245u, 256u, 265u, + 274u, 281u, 292u, 301u, 309u, 318u, 327u, 335u, 344u, 355u, 359u, 364u, 367u, 371u, 373u, 377u, + 380u, 386u, 393u, 401u, 409u, 417u, 424u, 429u, 435u, 441u, 451u, 463u, 475u, 485u, 494u, 501u, }; void recomp_unit_0043_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0043_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088B0000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0043[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0043[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0043[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088B0000; @@ -720,7 +627,6 @@ L_088B0070: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(488))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B0094; } @@ -729,7 +635,6 @@ L_088B0070: L_088B0080: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(480))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B0094; } @@ -769,7 +674,6 @@ L_088B00B0: } L_088B00C8: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088B016C; } @@ -780,7 +684,6 @@ L_088B00D0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -794,7 +697,6 @@ L_088B00EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(742))); ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = static_cast(static_cast(std::bit_cast(ctx.fpr[20]))); if (branch_taken) { @@ -881,7 +783,17 @@ L_088B019C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B01E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24904))); @@ -896,7 +808,6 @@ L_088B01E4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[19]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B04DC; } @@ -1018,7 +929,6 @@ L_088B0358: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088B024C; } @@ -1101,7 +1011,6 @@ L_088B0434: goto L_088B0440; L_088B0440: aot_gpr_31 = (0x088B0448u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B0448u) goto L_088B0448; AOT_REGCACHE_SYNC_OUT(); return; L_088B0448: @@ -1110,7 +1019,6 @@ L_088B0448: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[19] = (ctx.hi); aot_gpr_31 = (0x088B0460u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B0460u) goto L_088B0460; AOT_REGCACHE_SYNC_OUT(); return; L_088B0460: @@ -1153,7 +1061,6 @@ L_088B04CC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 200 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B0440; } @@ -1162,7 +1069,6 @@ L_088B04CC: L_088B04DC: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24920))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088B06E8; } @@ -1175,7 +1081,6 @@ L_088B04E8: ctx.gpr[8] = (ctx.gpr[7] - aot_gpr_4); ctx.gpr[8] = (aot_gpr_5 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088B05BC; } @@ -1188,8 +1093,6 @@ L_088B0504: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-24916), aot_gpr_4); ctx.gpr[18] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[7]); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[17] = (ctx.lo); aot_gpr_31 = (0x088B0534u); @@ -1333,7 +1236,6 @@ L_088B0608: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-24932), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B06F4; } @@ -1346,7 +1248,6 @@ L_088B06E8: goto L_088B06F4; L_088B06F4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B07E8; } @@ -1378,7 +1279,6 @@ L_088B0724: AOT_REGCACHE_SYNC_OUT(); return; L_088B072C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B07E8; } @@ -1469,7 +1369,17 @@ L_088B07E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0818: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -1504,7 +1414,17 @@ L_088B0860: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B086C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1558,11 +1478,20 @@ L_088B086C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0894: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1588,11 +1517,20 @@ L_088B0894: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B08AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1641,7 +1579,6 @@ L_088B0908: ctx.execute_vfpu_vec3_ct<1u, 1u, 55u, 3u, 0u>(); ctx.execute_vfpu_vcmp_ct<20u, 0u, 3u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0BA0; } @@ -1650,7 +1587,6 @@ L_088B0908: L_088B0934: ctx.execute_vfpu_vcmp_ct<20u, 1u, 3u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0BA0; } @@ -1721,7 +1657,6 @@ L_088B0960: ctx.execute_vfpu_vec3_ct<32u, 32u, 32u, 1u, 2u>(); ctx.execute_vfpu_vcmp_ct<0u, 32u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0B98; } @@ -1739,7 +1674,6 @@ L_088B0A1C: ctx.execute_vfpu_unary_ct<12u, 12u, 1u, 1u>(); ctx.execute_vfpu_vcmp_ct<12u, 116u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0B98; } @@ -1785,7 +1719,6 @@ L_088B0A84: ctx.execute_vfpu_vec3_ct<63u, 63u, 63u, 1u, 2u>(); ctx.execute_vfpu_vcmp_ct<31u, 63u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0B28; } @@ -1798,7 +1731,6 @@ L_088B0AAC: ctx.execute_vfpu_vec3_ct<63u, 98u, 98u, 1u, 2u>(); ctx.execute_vfpu_vcmp_ct<34u, 97u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0B28; } @@ -1807,7 +1739,6 @@ L_088B0AAC: L_088B0AC8: ctx.execute_vfpu_vcmp_ct<63u, 127u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0B28; } @@ -1815,11 +1746,9 @@ L_088B0AC8: } L_088B0AD4: aot_gpr_31 = (0x088B0ADCu); - // nop goto L_088B0BD0; L_088B0ADC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088B0B28; } @@ -1828,7 +1757,6 @@ L_088B0ADC: L_088B0AE4: ctx.execute_vfpu_vcmp_ct<120u, 127u, 1u, 6u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0B28; } @@ -1858,7 +1786,6 @@ L_088B0AF0: goto L_088B0B28; L_088B0B28: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088B0A84; } @@ -1908,11 +1835,9 @@ L_088B0B4C: aot_gpr_4 = (aot_gpr_4 + static_cast(32)); ctx.gpr[11] = (ctx.gpr[11] + static_cast(32)); aot_gpr_31 = (0x088B0B68u); - // nop goto L_088B0D44; L_088B0B68: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088B0B8C; } @@ -1935,7 +1860,6 @@ L_088B0B70: goto L_088B0B8C; L_088B0B8C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088B0B4C; } @@ -1946,7 +1870,6 @@ L_088B0B94: goto L_088B0B98; L_088B0B98: { const bool branch_taken = ctx.gpr[24] != ctx.gpr[25]; - // nop if (branch_taken) { goto L_088B0960; } @@ -1954,7 +1877,6 @@ L_088B0B98: } L_088B0BA0: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088B0908; } @@ -1974,7 +1896,17 @@ L_088B0BA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0BD0: aot_gpr_2 = (0u + 0u); ctx.execute_vfpu_vec3_ct<12u, 1u, 4u, 3u, 1u>(); @@ -2198,11 +2130,20 @@ L_088B0D38: goto L_088B0D3C; L_088B0D3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0D44: ctx.execute_vfpu_vdot_ct<24u, 1u, 7u, 3u>(); ctx.execute_vfpu_vdot_ct<56u, 2u, 7u, 3u>(); @@ -2216,7 +2157,6 @@ L_088B0D44: } L_088B0D58: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_088B0DCC; } @@ -2224,7 +2164,6 @@ L_088B0D58: } L_088B0D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B0D70; } @@ -2232,7 +2171,6 @@ L_088B0D60: } L_088B0D68: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0DCC; } @@ -2246,7 +2184,6 @@ L_088B0D70: ctx.execute_vfpu_vec3_ct<24u, 24u, 56u, 1u, 2u>(); ctx.execute_vfpu_vcmp_ct<24u, 127u, 1u, 6u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0DCC; } @@ -2265,7 +2202,6 @@ L_088B0D90: ctx.execute_vfpu_vdot_ct<100u, 14u, 15u, 3u>(); ctx.execute_vfpu_vcmp_ct<39u, 0u, 3u, 6u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_088B0DCC; } @@ -2277,14 +2213,34 @@ L_088B0DC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0DCC: jump_target = aot_gpr_31; aot_gpr_2 = (0u + 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0DD4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(60))); aot_gpr_5 = (2236u << 16u); @@ -2343,11 +2299,20 @@ L_088B0E00: } L_088B0E2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); @@ -2395,7 +2360,6 @@ L_088B0E7C: ctx.execute_vfpu_vec3_ct<25u, 29u, 35u, 3u, 0u>(); ctx.execute_vfpu_vcmp_ct<0u, 24u, 3u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0ECC; } @@ -2404,7 +2368,6 @@ L_088B0E7C: L_088B0EAC: ctx.execute_vfpu_vcmp_ct<0u, 25u, 3u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0ECC; } @@ -2422,7 +2385,6 @@ L_088B0EB8: goto L_088B0ECC; L_088B0ECC: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_088B0E7C; } @@ -2435,7 +2397,17 @@ L_088B0ED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0EE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[17]); @@ -2505,7 +2477,6 @@ L_088B0F44: ctx.gpr[8] = (ctx.gpr[8] + static_cast(32)); ctx.execute_vfpu_vcmp_ct<0u, 24u, 3u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0F88; } @@ -2514,7 +2485,6 @@ L_088B0F44: L_088B0F70: ctx.execute_vfpu_vcmp_ct<0u, 25u, 3u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B0F88; } @@ -2542,7 +2512,17 @@ L_088B0F90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B0FA4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48))); @@ -2589,7 +2569,6 @@ L_088B0FDC: ctx.execute_vfpu_vec3_ct<1u, 1u, 55u, 3u, 0u>(); ctx.execute_vfpu_vcmp_ct<20u, 0u, 3u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B1014; } @@ -2598,7 +2577,6 @@ L_088B0FDC: L_088B0FFC: ctx.execute_vfpu_vcmp_ct<20u, 1u, 3u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B1014; } @@ -2620,11 +2598,20 @@ L_088B1014: L_088B101C: aot_gpr_2 = (ctx.gpr[11] | 0u); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1028: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2683,9 +2670,7 @@ L_088B1028: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B10B0; } @@ -2698,9 +2683,7 @@ L_088B10B0: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B11D4; } @@ -2709,9 +2692,7 @@ L_088B10B0: L_088B10C8: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B11D4; } @@ -2836,16 +2817,24 @@ L_088B11D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B11E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_14 = aot_fpr_13 + aot_fpr_12; ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1278; } @@ -2855,9 +2844,7 @@ L_088B1200: aot_fpr_13 = aot_fpr_13 - aot_fpr_12; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1278; } @@ -2868,9 +2855,7 @@ L_088B1218: aot_fpr_14 = aot_fpr_13 + aot_fpr_12; ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1270; } @@ -2880,9 +2865,7 @@ L_088B1234: aot_fpr_13 = aot_fpr_13 - aot_fpr_12; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1270; } @@ -2893,9 +2876,7 @@ L_088B124C: aot_fpr_14 = aot_fpr_13 + aot_fpr_12; ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1294; } @@ -2928,9 +2909,7 @@ L_088B1278: L_088B1280: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B129C; } @@ -2949,11 +2928,20 @@ L_088B129C: goto L_088B12A0; L_088B12A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B12A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_gpr_4 + static_cast(16)); @@ -3116,9 +3104,7 @@ L_088B12A8: aot_fpr_13 = aot_fpr_13 - aot_fpr_12; aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B13F4; } @@ -3133,9 +3119,7 @@ L_088B13C0: { const float fs = aot_fpr_16; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1410; } @@ -3160,9 +3144,7 @@ L_088B13F4: L_088B13FC: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1418; } @@ -3185,7 +3167,17 @@ L_088B141C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1424: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); @@ -3258,9 +3250,7 @@ L_088B1424: aot_fpr_12 = std::bit_cast(ctx.gpr[7]); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B149C; } @@ -3280,9 +3270,7 @@ L_088B1474: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B14CC; } @@ -3290,7 +3278,6 @@ L_088B1474: } L_088B1494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B14FC; } @@ -3335,7 +3322,6 @@ L_088B149C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B154C; } @@ -3380,7 +3366,6 @@ L_088B14CC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B154C; } @@ -3417,9 +3402,7 @@ L_088B14FC: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1548; } @@ -3442,7 +3425,17 @@ L_088B154C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1554: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); ctx.gpr[8] = (aot_gpr_4 + static_cast(16)); @@ -3554,9 +3547,7 @@ L_088B1554: aot_fpr_12 = aot_fpr_16 - aot_fpr_12; ctx.fpr[17] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B165C; } @@ -3569,7 +3560,6 @@ L_088B1600: aot_fpr_12 = aot_fpr_12 / aot_fpr_14; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (16256u << 16u); if (branch_taken) { @@ -3580,9 +3570,7 @@ L_088B1600: L_088B1624: aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1654; } @@ -3591,9 +3579,7 @@ L_088B1624: L_088B1638: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1664; } @@ -3784,7 +3770,17 @@ L_088B1778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1780: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3870,7 +3866,17 @@ L_088B180C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1820: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3965,7 +3971,6 @@ L_088B1820: ctx.execute_vfpu_vec3_ct<12u, 12u, 13u, 3u, 0u>(); ctx.execute_vfpu_vcmp_ct<12u, 28u, 3u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B18D8; } @@ -4005,7 +4010,17 @@ L_088B18D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B18EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[16]); @@ -4044,7 +4059,6 @@ L_088B1940: goto L_088B1B74; L_088B1968: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088B1A04; } @@ -4054,9 +4068,7 @@ L_088B1970: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1A04; } @@ -4117,7 +4129,17 @@ L_088B1A08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1A34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4129,11 +4151,9 @@ L_088B1A34: ctx.gpr[17] = (aot_gpr_6 | 0u); ctx.gpr[18] = (aot_gpr_5 | 0u); aot_gpr_31 = (0x088B1A60u); - // nop goto L_088B18EC; L_088B1A60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088B1A94; } @@ -4181,7 +4201,17 @@ L_088B1A98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1AB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[16]); @@ -4239,7 +4269,6 @@ L_088B1ADC: goto L_088B1B74; L_088B1B18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088B1B54; } @@ -4284,7 +4313,17 @@ L_088B1B5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1B74: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4350,7 +4389,6 @@ L_088B1B74: } L_088B1BB8: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_088B1C40; } @@ -4358,7 +4396,6 @@ L_088B1BB8: } L_088B1BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B1BD0; } @@ -4366,7 +4403,6 @@ L_088B1BC0: } L_088B1BC8: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B1C40; } @@ -4396,7 +4432,6 @@ L_088B1BD0: ctx.execute_vfpu_vdot_ct<100u, 14u, 15u, 3u>(); ctx.execute_vfpu_vcmp_ct<39u, 0u, 3u, 6u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_088B1C40; } @@ -4417,14 +4452,34 @@ L_088B1C2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1C40: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B1C50: aot_gpr_29 = (aot_gpr_29 + static_cast(-1008)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(960), std::bit_cast(ctx.fpr[20])); @@ -4443,7 +4498,6 @@ L_088B1C50: ctx.gpr[18] = (aot_gpr_4 | 0u); ctx.gpr[17] = (aot_gpr_5 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_6 | 0u); if (branch_taken) { @@ -4457,9 +4511,7 @@ L_088B1CA0: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1CE0; } @@ -4469,9 +4521,7 @@ L_088B1CC0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1CE8; } @@ -4479,7 +4529,6 @@ L_088B1CC0: } L_088B1CD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2098; } @@ -4499,9 +4548,7 @@ L_088B1CE8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1D48; } @@ -4513,9 +4560,7 @@ L_088B1D08: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1D48; } @@ -4525,9 +4570,7 @@ L_088B1D28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1D50; } @@ -4535,7 +4578,6 @@ L_088B1D28: } L_088B1D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B1E60; } @@ -4555,9 +4597,7 @@ L_088B1D50: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1DB0; } @@ -4569,9 +4609,7 @@ L_088B1D70: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1DB0; } @@ -4581,9 +4619,7 @@ L_088B1D90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1DB8; } @@ -4591,7 +4627,6 @@ L_088B1D90: } L_088B1DA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B1DE8; } @@ -4628,7 +4663,6 @@ L_088B1DB8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4638,9 +4672,7 @@ L_088B1DE8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1E30; } @@ -4669,7 +4701,6 @@ L_088B1E00: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4698,7 +4729,6 @@ L_088B1E30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4708,9 +4738,7 @@ L_088B1E60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1F88; } @@ -4722,9 +4750,7 @@ L_088B1E78: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1ED8; } @@ -4736,9 +4762,7 @@ L_088B1E98: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1ED8; } @@ -4748,9 +4772,7 @@ L_088B1EB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1EE0; } @@ -4758,7 +4780,6 @@ L_088B1EB8: } L_088B1ED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B1F10; } @@ -4795,7 +4816,6 @@ L_088B1EE0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4805,9 +4825,7 @@ L_088B1F10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1F58; } @@ -4836,7 +4854,6 @@ L_088B1F28: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4865,7 +4882,6 @@ L_088B1F58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4877,9 +4893,7 @@ L_088B1F88: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1FE8; } @@ -4891,9 +4905,7 @@ L_088B1FA8: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1FE8; } @@ -4903,9 +4915,7 @@ L_088B1FC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B1FF0; } @@ -4913,7 +4923,6 @@ L_088B1FC8: } L_088B1FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2020; } @@ -4950,7 +4959,6 @@ L_088B1FF0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -4960,9 +4968,7 @@ L_088B2020: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2068; } @@ -4991,7 +4997,6 @@ L_088B2038: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5020,7 +5025,6 @@ L_088B2068: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5030,9 +5034,7 @@ L_088B2098: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2460; } @@ -5044,9 +5046,7 @@ L_088B20B0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2110; } @@ -5058,9 +5058,7 @@ L_088B20D0: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2110; } @@ -5070,9 +5068,7 @@ L_088B20F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2118; } @@ -5080,7 +5076,6 @@ L_088B20F0: } L_088B2108: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2228; } @@ -5100,9 +5095,7 @@ L_088B2118: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2178; } @@ -5114,9 +5107,7 @@ L_088B2138: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2178; } @@ -5126,9 +5117,7 @@ L_088B2158: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2180; } @@ -5136,7 +5125,6 @@ L_088B2158: } L_088B2170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B21B0; } @@ -5173,7 +5161,6 @@ L_088B2180: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5183,9 +5170,7 @@ L_088B21B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B21F8; } @@ -5214,7 +5199,6 @@ L_088B21C8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5243,7 +5227,6 @@ L_088B21F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5253,9 +5236,7 @@ L_088B2228: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2350; } @@ -5267,9 +5248,7 @@ L_088B2240: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B22A0; } @@ -5281,9 +5260,7 @@ L_088B2260: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B22A0; } @@ -5293,9 +5270,7 @@ L_088B2280: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B22A8; } @@ -5303,7 +5278,6 @@ L_088B2280: } L_088B2298: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B22D8; } @@ -5340,7 +5314,6 @@ L_088B22A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5350,9 +5323,7 @@ L_088B22D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2320; } @@ -5381,7 +5352,6 @@ L_088B22F0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5410,7 +5380,6 @@ L_088B2320: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5422,9 +5391,7 @@ L_088B2350: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B23B0; } @@ -5436,9 +5403,7 @@ L_088B2370: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B23B0; } @@ -5448,9 +5413,7 @@ L_088B2390: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B23B8; } @@ -5458,7 +5421,6 @@ L_088B2390: } L_088B23A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B23E8; } @@ -5495,7 +5457,6 @@ L_088B23B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5505,9 +5466,7 @@ L_088B23E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2430; } @@ -5536,7 +5495,6 @@ L_088B2400: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5565,7 +5523,6 @@ L_088B2430: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5577,9 +5534,7 @@ L_088B2460: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B24C0; } @@ -5591,9 +5546,7 @@ L_088B2480: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B24C0; } @@ -5603,9 +5556,7 @@ L_088B24A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B24C8; } @@ -5613,7 +5564,6 @@ L_088B24A0: } L_088B24B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B25D8; } @@ -5633,9 +5583,7 @@ L_088B24C8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2528; } @@ -5647,9 +5595,7 @@ L_088B24E8: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2528; } @@ -5659,9 +5605,7 @@ L_088B2508: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2530; } @@ -5669,7 +5613,6 @@ L_088B2508: } L_088B2520: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2560; } @@ -5706,7 +5649,6 @@ L_088B2530: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5716,9 +5658,7 @@ L_088B2560: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B25A8; } @@ -5747,7 +5687,6 @@ L_088B2578: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5776,7 +5715,6 @@ L_088B25A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5786,9 +5724,7 @@ L_088B25D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2700; } @@ -5800,9 +5736,7 @@ L_088B25F0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2650; } @@ -5814,9 +5748,7 @@ L_088B2610: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2650; } @@ -5826,9 +5758,7 @@ L_088B2630: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2658; } @@ -5836,7 +5766,6 @@ L_088B2630: } L_088B2648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2688; } @@ -5873,7 +5802,6 @@ L_088B2658: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5883,9 +5811,7 @@ L_088B2688: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B26D0; } @@ -5914,7 +5840,6 @@ L_088B26A0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5943,7 +5868,6 @@ L_088B26D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -5955,9 +5879,7 @@ L_088B2700: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2760; } @@ -5969,9 +5891,7 @@ L_088B2720: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2760; } @@ -5981,9 +5901,7 @@ L_088B2740: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2768; } @@ -5991,7 +5909,6 @@ L_088B2740: } L_088B2758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2798; } @@ -6028,7 +5945,6 @@ L_088B2768: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -6038,9 +5954,7 @@ L_088B2798: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B27E0; } @@ -6069,7 +5983,6 @@ L_088B27B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E64; } @@ -6155,7 +6068,6 @@ L_088B27E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(512))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); goto L_088B2874; @@ -6179,7 +6091,6 @@ L_088B287C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(516))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); goto L_088B28A4; @@ -6203,7 +6114,6 @@ L_088B28AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); goto L_088B28D4; @@ -6225,9 +6135,7 @@ L_088B28D4: goto L_088B28DC; L_088B28DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2ABC; } @@ -6235,9 +6143,7 @@ L_088B28DC: } L_088B28EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2ABC; } @@ -6247,9 +6153,7 @@ L_088B28FC: { const float fs = ctx.fpr[20]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2E5C; } @@ -6259,9 +6163,7 @@ L_088B2914: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(512))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B29D8; } @@ -6312,7 +6214,6 @@ L_088B2970: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), ctx.gpr[7]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2A80; } @@ -6404,9 +6305,7 @@ L_088B2A80: } L_088B2ABC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2C9C; } @@ -6414,9 +6313,7 @@ L_088B2ABC: } L_088B2ACC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2C9C; } @@ -6426,9 +6323,7 @@ L_088B2ADC: { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2E5C; } @@ -6438,9 +6333,7 @@ L_088B2AF4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(516))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2BB8; } @@ -6491,7 +6384,6 @@ L_088B2B50: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), ctx.gpr[7]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2C60; } @@ -6585,9 +6477,7 @@ L_088B2C9C: { const float fs = ctx.fpr[24]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2E5C; } @@ -6597,9 +6487,7 @@ L_088B2CB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2D78; } @@ -6650,7 +6538,6 @@ L_088B2D10: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), ctx.gpr[7]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B2E20; } @@ -6794,9 +6681,7 @@ L_088B2E64: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B2F78; } @@ -6885,7 +6770,17 @@ L_088B2F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B2FA8: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6949,11 +6844,20 @@ L_088B3054: goto L_088B3058; L_088B3058: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B3060: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[8] = (16256u << 16u); @@ -6967,9 +6871,7 @@ L_088B3060: { const float fs = aot_fpr_16; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B316C; } @@ -6990,9 +6892,7 @@ L_088B309C: aot_fpr_16 = ctx.fpr[19] + aot_fpr_16; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B316C; } @@ -7001,9 +6901,7 @@ L_088B309C: L_088B30E0: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B316C; } @@ -7012,9 +6910,7 @@ L_088B30E0: L_088B30F4: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B316C; } @@ -7023,9 +6919,7 @@ L_088B30F4: L_088B3108: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B316C; } @@ -7033,9 +6927,7 @@ L_088B3108: } L_088B311C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B316C; } @@ -7089,9 +6981,7 @@ L_088B316C: aot_fpr_12 = ctx.fpr[17] - aot_fpr_12; { const float fs = aot_fpr_16; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B325C; } @@ -7112,9 +7002,7 @@ L_088B3194: aot_fpr_16 = ctx.fpr[19] + aot_fpr_16; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B325C; } @@ -7123,9 +7011,7 @@ L_088B3194: L_088B31D8: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B325C; } @@ -7134,9 +7020,7 @@ L_088B31D8: L_088B31EC: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B325C; } @@ -7145,9 +7029,7 @@ L_088B31EC: L_088B3200: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B325C; } @@ -7155,9 +7037,7 @@ L_088B3200: } L_088B3214: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B325C; } @@ -7209,9 +7089,7 @@ L_088B325C: aot_fpr_12 = aot_fpr_12 - ctx.fpr[17]; { const float fs = aot_fpr_16; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3354; } @@ -7232,9 +7110,7 @@ L_088B3284: aot_fpr_16 = ctx.fpr[19] + aot_fpr_16; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3354; } @@ -7243,9 +7119,7 @@ L_088B3284: L_088B32C8: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3354; } @@ -7254,9 +7128,7 @@ L_088B32C8: L_088B32DC: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3354; } @@ -7265,9 +7137,7 @@ L_088B32DC: L_088B32F0: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3354; } @@ -7275,9 +7145,7 @@ L_088B32F0: } L_088B3304: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3354; } @@ -7331,9 +7199,7 @@ L_088B3354: aot_fpr_12 = ctx.fpr[17] - aot_fpr_12; { const float fs = aot_fpr_16; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3444; } @@ -7354,9 +7220,7 @@ L_088B337C: aot_fpr_16 = ctx.fpr[19] + aot_fpr_16; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3444; } @@ -7365,9 +7229,7 @@ L_088B337C: L_088B33C0: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3444; } @@ -7376,9 +7238,7 @@ L_088B33C0: L_088B33D4: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3444; } @@ -7387,9 +7247,7 @@ L_088B33D4: L_088B33E8: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3444; } @@ -7397,9 +7255,7 @@ L_088B33E8: } L_088B33FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3444; } @@ -7451,9 +7307,7 @@ L_088B3444: aot_fpr_12 = aot_fpr_12 - ctx.fpr[17]; { const float fs = aot_fpr_16; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B353C; } @@ -7474,9 +7328,7 @@ L_088B346C: aot_fpr_16 = ctx.fpr[19] + aot_fpr_16; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B353C; } @@ -7485,9 +7337,7 @@ L_088B346C: L_088B34B0: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B353C; } @@ -7496,9 +7346,7 @@ L_088B34B0: L_088B34C4: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B353C; } @@ -7507,9 +7355,7 @@ L_088B34C4: L_088B34D8: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B353C; } @@ -7517,9 +7363,7 @@ L_088B34D8: } L_088B34EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B353C; } @@ -7573,9 +7417,7 @@ L_088B353C: aot_fpr_12 = ctx.fpr[17] - aot_fpr_12; { const float fs = aot_fpr_16; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B362C; } @@ -7596,9 +7438,7 @@ L_088B3564: aot_fpr_16 = ctx.fpr[19] + aot_fpr_16; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B362C; } @@ -7607,9 +7447,7 @@ L_088B3564: L_088B35A8: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B362C; } @@ -7618,9 +7456,7 @@ L_088B35A8: L_088B35BC: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B362C; } @@ -7629,9 +7465,7 @@ L_088B35BC: L_088B35D0: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B362C; } @@ -7639,9 +7473,7 @@ L_088B35D0: } L_088B35E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B362C; } @@ -7688,9 +7520,7 @@ L_088B35F4: L_088B362C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B36C4; } @@ -7744,7 +7574,17 @@ L_088B36C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B36D0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7810,7 +7650,6 @@ L_088B36D0: } L_088B3774: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_088B37F0; } @@ -7818,7 +7657,6 @@ L_088B3774: } L_088B377C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B378C; } @@ -7826,7 +7664,6 @@ L_088B377C: } L_088B3784: { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B37F0; } @@ -7856,7 +7693,6 @@ L_088B378C: ctx.execute_vfpu_vdot_ct<100u, 14u, 15u, 3u>(); ctx.execute_vfpu_vcmp_ct<39u, 0u, 3u, 6u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_088B37F0; } @@ -7868,14 +7704,34 @@ L_088B37E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B37F0: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B3800: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[16]); @@ -7904,7 +7760,6 @@ L_088B3800: } L_088B3850: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B38AC; } @@ -7931,7 +7786,6 @@ L_088B3858: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3914; } @@ -7939,7 +7793,6 @@ L_088B3858: } L_088B38AC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B38FC; } @@ -7963,7 +7816,6 @@ L_088B38B4: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3914; } @@ -7977,7 +7829,6 @@ L_088B38FC: goto L_088B12A8; L_088B390C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088B3930; } @@ -7996,7 +7847,6 @@ L_088B3914: } L_088B3928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B3938; } @@ -8023,7 +7873,6 @@ L_088B3938: } L_088B394C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B39A8; } @@ -8050,7 +7899,6 @@ L_088B3954: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3A10; } @@ -8058,7 +7906,6 @@ L_088B3954: } L_088B39A8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B39F8; } @@ -8082,7 +7929,6 @@ L_088B39B0: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3A10; } @@ -8096,7 +7942,6 @@ L_088B39F8: goto L_088B1780; L_088B3A08: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088B3A2C; } @@ -8115,7 +7960,6 @@ L_088B3A10: } L_088B3A24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B3A34; } @@ -8132,7 +7976,6 @@ L_088B3A2C: L_088B3A34: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(50))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B3CB8; } @@ -8189,7 +8032,6 @@ L_088B3A64: goto L_088B1780; L_088B3A94: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088B3B9C; } @@ -8208,7 +8050,6 @@ L_088B3A9C: } L_088B3AB0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B3B0C; } @@ -8235,7 +8076,6 @@ L_088B3AB8: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3B78; } @@ -8243,7 +8083,6 @@ L_088B3AB8: } L_088B3B0C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B3B5C; } @@ -8267,7 +8106,6 @@ L_088B3B14: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3B78; } @@ -8282,7 +8120,6 @@ L_088B3B5C: goto L_088B36D0; L_088B3B70: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088B3B94; } @@ -8301,7 +8138,6 @@ L_088B3B78: } L_088B3B8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B3B9C; } @@ -8328,7 +8164,6 @@ L_088B3B9C: } L_088B3BB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B3CB8; } @@ -8347,7 +8182,6 @@ L_088B3BB8: } L_088B3BCC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B3C28; } @@ -8374,7 +8208,6 @@ L_088B3BD4: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3C94; } @@ -8382,7 +8215,6 @@ L_088B3BD4: } L_088B3C28: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B3C78; } @@ -8406,7 +8238,6 @@ L_088B3C30: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3C94; } @@ -8421,7 +8252,6 @@ L_088B3C78: goto L_088B36D0; L_088B3C8C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088B3CB0; } @@ -8440,7 +8270,6 @@ L_088B3C94: } L_088B3CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B3CB8; } @@ -8473,7 +8302,17 @@ L_088B3CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B3CEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(ctx.fpr[20])); @@ -8500,7 +8339,6 @@ L_088B3CEC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(52))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B3EAC; } @@ -8515,9 +8353,7 @@ L_088B3D5C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3D84; } @@ -8533,9 +8369,7 @@ L_088B3D84: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3DAC; } @@ -8551,9 +8385,7 @@ L_088B3DAC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B3DD4; } @@ -8566,7 +8398,6 @@ L_088B3DC8: goto L_088B3DD4; L_088B3DD4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B3E30; } @@ -8593,7 +8424,6 @@ L_088B3DDC: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3E98; } @@ -8601,7 +8431,6 @@ L_088B3DDC: } L_088B3E30: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B3E80; } @@ -8625,7 +8454,6 @@ L_088B3E38: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3E98; } @@ -8666,7 +8494,6 @@ L_088B3EAC: } L_088B3EC0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B3F1C; } @@ -8693,7 +8520,6 @@ L_088B3EC8: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3F84; } @@ -8701,7 +8527,6 @@ L_088B3EC8: } L_088B3F1C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B3F6C; } @@ -8725,7 +8550,6 @@ L_088B3F24: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B3F84; } diff --git a/profiles/vcs/generated/generated_unit_0044.cpp b/profiles/vcs/generated/generated_unit_0044.cpp index 11aa417..004f4c4 100644 --- a/profiles/vcs/generated/generated_unit_0044.cpp +++ b/profiles/vcs/generated/generated_unit_0044.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0044[4094] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 8, 9, 0, 0, - 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 18, 19, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 37, - 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 46, 0, 0, 0, 47, 0, 48, 0, - 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 0, 54, 55, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, - 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 74, 0, 0, 75, 0, 0, - 0, 0, 0, 76, 0, 77, 0, 78, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 95, 0, 0, 0, 0, 96, 0, 0, 0, 97, 98, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 99, 0, 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, 0, 105, 106, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 112, 0, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 118, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 121, 122, 0, 0, 0, 0, 123, 0, 0, - 0, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 127, 128, 0, 0, 0, 129, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, - 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 137, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, 145, 0, 146, 0, 0, 147, 0, 148, 0, 0, 0, 149, 0, 150, 0, 151, 0, 152, 0, - 153, 0, 0, 0, 0, 154, 0, 0, 155, 0, 156, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 166, 0, 167, 0, 168, - 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 176, 0, - 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, - 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 0, - 0, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 190, 0, 191, 0, - 0, 0, 192, 0, 0, 0, 0, 193, 0, 194, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 200, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 204, 0, 205, 0, 206, 0, 207, 208, 0, 0, 0, 0, - 0, 209, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 217, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 223, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 243, 0, 0, 0, 0, 0, 0, - 244, 0, 245, 0, 0, 0, 0, 246, 0, 247, 0, 0, 248, 0, 249, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 0, 255, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 259, - 0, 260, 0, 261, 0, 0, 262, 0, 263, 0, 0, 264, 265, 0, 266, 0, 267, 0, 0, 0, 268, 0, 269, 0, 270, 0, 271, 0, 0, 0, 272, 0, - 273, 0, 274, 0, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 282, 283, 0, 0, - 0, 284, 0, 0, 285, 0, 286, 0, 287, 0, 0, 288, 0, 289, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, - 0, 0, 0, 0, 293, 294, 0, 0, 0, 295, 296, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, - 306, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 311, - 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 318, 0, 0, - 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 323, 0, 0, 324, 0, 325, 0, 0, 326, 0, 0, 0, 0, 327, 0, 328, 329, - 0, 330, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 334, 335, 0, 0, 0, 336, 337, 0, 338, 0, 339, 0, 340, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 342, 0, 0, 343, 0, 0, 344, 0, 345, 0, 0, 0, 0, 346, 0, 0, 347, 0, 348, 349, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, - 0, 0, 0, 353, 0, 354, 0, 0, 0, 355, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 359, 0, 360, 0, 0, 361, 0, 0, 0, - 362, 0, 0, 0, 0, 363, 0, 364, 365, 0, 366, 0, 0, 367, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 371, 372, 0, 0, 0, - 0, 373, 0, 0, 374, 0, 375, 0, 376, 0, 0, 377, 0, 378, 379, 0, 380, 381, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 386, - 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 391, - 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 397, 0, 0, 0, 398, 0, 399, - 0, 0, 400, 0, 0, 0, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 406, 0, 0, 0, 407, 0, - 408, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 412, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, - 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 424, 425, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 432, - 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 437, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 443, 444, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, - 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 450, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 454, 0, - 455, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 464, - 0, 0, 465, 0, 0, 466, 0, 467, 468, 0, 469, 0, 470, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 473, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 477, 0, 478, 0, 479, 480, 0, 481, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 484, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, - 487, 0, 488, 489, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 497, 0, 498, 0, 499, 0, 500, 0, 0, 501, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, - 0, 0, 0, 507, 0, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, - 0, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 518, 519, 0, 0, 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 523, 0, 524, - 525, 0, 0, 0, 526, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, - 0, 0, 0, 531, 0, 0, 532, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 535, 0, 0, 536, 0, 537, 0, 0, 538, 0, 539, 0, 0, 0, 0, - 0, 540, 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 544, 0, 0, 545, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, - 0, 548, 0, 549, 0, 550, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 553, 0, - 0, 0, 0, 0, 554, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, - 0, 558, 0, 0, 559, 560, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, - 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 570, 0, 571, 0, 0, 0, 572, 0, 0, 0, 573, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, - 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, - 582, 0, 583, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 588, 0, 0, 589, 0, 590, 0, 0, 0, 0, 591, 0, 592, 0, - 593, 0, 0, 0, 594, 0, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, - 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 605, 0, 606, 0, - 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 0, 0, 0, 611, 0, - 0, 0, 612, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 617, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 626, 0, 0, 627, 628, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 630, 0, 631, 632, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, 637, 0, 0, 638, 0, 0, 639, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, - 648, 0, 649, 0, 0, 650, 0, 0, 0, 651, 0, 652, 0, 0, 0, 653, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 657, - 0, 0, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 660, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, - 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, - 0, 678, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 681, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 685, - 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, - 0, 691, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 695, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, - 697, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 0, 0, 700, 0, 0, 701, 0, 0, 0, 702, 0, 0, 703, 0, 0, 704, 0, 0, 705, 0, 0, - 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, - 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, - 0, 0, 0, 0, 714, 0, 715, 0, 0, 716, 0, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 0, 719, 0, 720, 0, 721, 0, 722, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0044[64] = { + 0x30810000500000A1ull, 0x1020000A00001428ull, 0x0814000004003106ull, 0x8821008040284204ull, + 0x51080204090A0010ull, 0x0020020C20081028ull, 0x141040000A000000ull, 0x0900000000002003ull, + 0x181082A824484808ull, 0x0400000040A20000ull, 0x0002000000000002ull, 0x00D051A00C434060ull, + 0x0000000040104200ull, 0x21A0309004000852ull, 0x010044108018D006ull, 0x0088420018800000ull, + 0x01002D215514A120ull, 0x4048510AA8A50480ull, 0x2100000202841001ull, 0x890106845201100Aull, + 0x0104120A0D52400Cull, 0x410228A0010228A0ull, 0x0000000000000000ull, 0x0000100000041080ull, + 0x5000280005000014ull, 0x0000D28502802800ull, 0xA800190401100000ull, 0x240401454551594Aull, + 0x1001695230110000ull, 0x102AA80800001630ull, 0x2444208292000045ull, 0x0AB1A122D0948914ull, + 0x448D214900000080ull, 0x1A1125A112911228ull, 0x90000100002B6952ull, 0xA2800849A8004002ull, + 0xAAB0120945202284ull, 0x81550100180A0902ull, 0x4935002004291088ull, 0x90508A1550494008ull, + 0x16A2080C008095A4ull, 0x0A14002D40814800ull, 0x0400950009544020ull, 0x8400020000012A88ull, + 0x80080891A8141A80ull, 0x8014C2120A522148ull, 0x401001106000006Aull, 0x0000000211200A32ull, + 0x8040000044521001ull, 0x50A52215200210A4ull, 0x5242200220880291ull, 0x0411222442400042ull, + 0xC880048004800480ull, 0x014000001A400000ull, 0x0200405000149210ull, 0x00028A2504200200ull, + 0x00050210C0100000ull, 0x0000000040000000ull, 0x1120001000040000ull, 0x0000800120000800ull, + 0x889044822A802800ull, 0x0429001240140024ull, 0x1010204024912089ull, 0x2A84425080080804ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0044[64] = { + 1u, 10u, 18u, 27u, 38u, 49u, 58u, 64u, 69u, 84u, 89u, 91u, 107u, 111u, 124u, 136u, + 143u, 160u, 177u, 185u, 200u, 215u, 228u, 228u, 232u, 240u, 251u, 260u, 280u, 293u, 306u, 319u, + 341u, 353u, 373u, 387u, 400u, 419u, 433u, 448u, 465u, 482u, 495u, 507u, 516u, 531u, 548u, 558u, + 567u, 576u, 593u, 607u, 619u, 629u, 635u, 645u, 655u, 662u, 663u, 668u, 672u, 686u, 697u, 710u, }; void recomp_unit_0044_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0044_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088B4004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0044[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0044[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0044[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088B4004; @@ -914,7 +821,6 @@ L_088B4004: } L_088B4018: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B4074; } @@ -941,7 +847,6 @@ L_088B4020: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B40E0; } @@ -949,7 +854,6 @@ L_088B4020: } L_088B4074: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B40C4; } @@ -973,7 +877,6 @@ L_088B407C: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B40E0; } @@ -1024,7 +927,6 @@ L_088B40F8: } L_088B4110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B4208; } @@ -1043,7 +945,6 @@ L_088B4118: } L_088B412C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B4188; } @@ -1070,7 +971,6 @@ L_088B4134: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B41F4; } @@ -1078,7 +978,6 @@ L_088B4134: } L_088B4188: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088B41D8; } @@ -1102,7 +1001,6 @@ L_088B4190: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B41F4; } @@ -1136,9 +1034,7 @@ L_088B420C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B4234; } @@ -1174,7 +1070,17 @@ L_088B4238: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B426C: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), aot_gpr_16); @@ -1207,7 +1113,6 @@ L_088B426C: } L_088B42CC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088B430C; } @@ -1220,7 +1125,6 @@ L_088B42D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B4328; } @@ -1233,7 +1137,6 @@ L_088B42F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B4328; } @@ -1256,7 +1159,6 @@ L_088B4328: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B42CC; } @@ -1267,7 +1169,6 @@ L_088B433C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B43D8; } @@ -1275,7 +1176,6 @@ L_088B433C: } L_088B4350: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088B43A0; } @@ -1290,7 +1190,6 @@ L_088B4358: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(32))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B43C4; } @@ -1305,7 +1204,6 @@ L_088B437C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(32))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B43C4; } @@ -1328,7 +1226,6 @@ L_088B43C4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B4350; } @@ -1348,7 +1245,6 @@ L_088B43F0: ctx.gpr[20] = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(54))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B44FC; } @@ -1359,7 +1255,6 @@ L_088B4400: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B44F4; } @@ -1399,7 +1294,6 @@ L_088B4414: AOT_REGCACHE_SYNC_OUT(); return; L_088B4448: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B44E4; } @@ -1410,7 +1304,6 @@ L_088B4450: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(14)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B44E4; } @@ -1419,7 +1312,6 @@ L_088B4450: L_088B4464: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B44A8; } @@ -1432,7 +1324,6 @@ L_088B4470: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B44D0; } @@ -1445,7 +1336,6 @@ L_088B448C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B44D0; } @@ -1469,7 +1359,6 @@ L_088B44D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(14)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B4464; } @@ -1479,7 +1368,6 @@ L_088B44E4: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B4414; } @@ -1487,7 +1375,6 @@ L_088B44E4: } L_088B44F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B458C; } @@ -1498,7 +1385,6 @@ L_088B44FC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(50))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B458C; } @@ -1506,7 +1392,6 @@ L_088B44FC: } L_088B4510: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088B4550; } @@ -1519,7 +1404,6 @@ L_088B4518: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B4578; } @@ -1532,7 +1416,6 @@ L_088B4534: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B4578; } @@ -1556,7 +1439,6 @@ L_088B4578: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(50))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B4510; } @@ -1569,9 +1451,7 @@ L_088B4590: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B4704; } @@ -1663,7 +1543,6 @@ L_088B45D8: aot_gpr_4 = (aot_gpr_4 + static_cast(-27712)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B46F4; } @@ -1671,7 +1550,6 @@ L_088B45D8: } L_088B4668: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B46F4; } @@ -1816,7 +1694,17 @@ L_088B4708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B4738: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::Matrix) && rt.memory().direct_fastmem_enabled()) { @@ -1973,7 +1861,6 @@ L_088B4738: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.execute_vfpu_vcmp_ct<20u, 16u, 3u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B4810; } @@ -1982,7 +1869,6 @@ L_088B4738: L_088B47E4: ctx.execute_vfpu_vcmp_ct<20u, 17u, 3u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 4u) & 1u) != 0u; - // nop if (branch_taken) { goto L_088B4810; } @@ -2019,7 +1905,6 @@ L_088B4810: ctx.gpr[18] = (ctx.gpr[10] | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(292), ctx.gpr[8]); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B48A0; } @@ -2091,7 +1976,6 @@ L_088B4898: } L_088B48A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B4F74; } @@ -2103,7 +1987,6 @@ L_088B48A8: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B48F0; } @@ -2160,7 +2043,6 @@ L_088B4948: aot_gpr_4 = (ctx.gpr[30] | ctx.gpr[19]); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[2]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B4960; } @@ -2222,7 +2104,6 @@ L_088B49EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(28))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(236))); if (branch_taken) { @@ -2300,7 +2181,6 @@ L_088B4AC8: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B4B5C; } @@ -2322,7 +2202,6 @@ L_088B4B1C: AOT_REGCACHE_SYNC_OUT(); return; L_088B4B3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B4B48; } @@ -2346,7 +2225,6 @@ L_088B4B5C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B4BB4; } @@ -2370,7 +2248,6 @@ L_088B4B70: AOT_REGCACHE_SYNC_OUT(); return; L_088B4B98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B4BA4; } @@ -2409,7 +2286,6 @@ L_088B4BBC: } L_088B4BD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B4C28; } @@ -2553,7 +2429,6 @@ L_088B4C7C: L_088B4D08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B4D1C; } @@ -2603,9 +2478,7 @@ L_088B4D6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B4DA0; } @@ -2621,7 +2494,6 @@ L_088B4DA0: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B4DF8; } @@ -2645,7 +2517,6 @@ L_088B4DB8: AOT_REGCACHE_SYNC_OUT(); return; L_088B4DD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B4DE4; } @@ -2691,7 +2562,6 @@ L_088B4E0C: AOT_REGCACHE_SYNC_OUT(); return; L_088B4E34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B4E40; } @@ -2753,7 +2623,6 @@ L_088B4EAC: aot_gpr_4 = (aot_gpr_29 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B4F60; } @@ -2870,7 +2739,17 @@ L_088B4F74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B4FA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2894,7 +2773,17 @@ L_088B4FD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B4FE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-656)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(608), aot_gpr_16); @@ -2915,7 +2804,6 @@ L_088B4FE0: L_088B5018: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088B5038; } @@ -2948,7 +2836,6 @@ L_088B5040: AOT_REGCACHE_SYNC_OUT(); return; L_088B504C: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_088B506C; } @@ -2958,7 +2845,6 @@ L_088B5054: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); aot_gpr_4 = (aot_gpr_4 & 61440u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088B507C; } @@ -2966,7 +2852,6 @@ L_088B5054: } L_088B5064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B50AC; } @@ -2987,7 +2872,6 @@ L_088B5074: } L_088B507C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088B50B0; } @@ -3019,7 +2903,6 @@ L_088B50AC: goto L_088B50B0; L_088B50B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B5040; } @@ -3040,7 +2923,17 @@ L_088B50B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B50E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-656)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(608), aot_gpr_16); @@ -3062,7 +2955,6 @@ L_088B50E4: L_088B5120: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[30]) < 0; - // nop if (branch_taken) { goto L_088B5144; } @@ -3096,7 +2988,6 @@ L_088B514C: AOT_REGCACHE_SYNC_OUT(); return; L_088B5158: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_088B5178; } @@ -3106,7 +2997,6 @@ L_088B5160: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); aot_gpr_4 = (aot_gpr_4 & 61440u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088B5188; } @@ -3114,7 +3004,6 @@ L_088B5160: } L_088B5170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B51BC; } @@ -3135,7 +3024,6 @@ L_088B5180: } L_088B5188: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088B51FC; } @@ -3191,7 +3079,6 @@ L_088B51DC: goto L_088B51FC; L_088B51FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B514C; } @@ -3213,7 +3100,17 @@ L_088B5204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5234: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[7] = (0u | 0u); @@ -3249,7 +3146,6 @@ L_088B5268: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); ctx.gpr[2] = (ctx.gpr[10] < ctx.gpr[2] ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B52E4; } @@ -3303,11 +3199,20 @@ L_088B52F8: } L_088B5308: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3391,7 +3296,17 @@ L_088B53AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B53C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -3400,7 +3315,6 @@ L_088B53C4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088B546C; } @@ -3409,7 +3323,6 @@ L_088B53C4: L_088B53E4: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088B546C; } @@ -3447,7 +3360,6 @@ L_088B5410: ctx.gpr[7] = (aot_gpr_16 + aot_gpr_6); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_088B5454; } @@ -3456,7 +3368,6 @@ L_088B5410: L_088B543C: aot_gpr_6 = (aot_gpr_4 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088B545C; } @@ -3504,14 +3415,34 @@ L_088B5470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5488: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24768))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5490: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3523,7 +3454,6 @@ L_088B5490: L_088B54A8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088B54CC; } @@ -3548,7 +3478,17 @@ L_088B54CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B54E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -3566,7 +3506,6 @@ L_088B54E4: goto L_088B5490; L_088B5518: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B5538; } @@ -3581,7 +3520,6 @@ L_088B5520: AOT_REGCACHE_SYNC_OUT(); return; L_088B5530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B5548; } @@ -3605,7 +3543,17 @@ L_088B5548: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5564: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -3623,7 +3571,6 @@ L_088B5564: goto L_088B5490; L_088B5598: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B55B8; } @@ -3638,7 +3585,6 @@ L_088B55A0: AOT_REGCACHE_SYNC_OUT(); return; L_088B55B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B55C8; } @@ -3662,7 +3608,17 @@ L_088B55C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B55E4: ctx.gpr[8] = (40503u << 16u); ctx.gpr[9] = (aot_gpr_5 | 0u); @@ -3775,7 +3731,17 @@ L_088B5734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B574C: ctx.gpr[11] = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[11] + static_cast(10))); @@ -3864,7 +3830,6 @@ L_088B5814: goto L_088B5864; L_088B5864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B58B0; } @@ -3959,7 +3924,6 @@ L_088B5938: goto L_088B5960; L_088B5960: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B5984; } @@ -4054,7 +4018,17 @@ L_088B59C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5A54: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); aot_gpr_5 = (aot_gpr_5 | 8u); @@ -4063,7 +4037,17 @@ L_088B5A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5A64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4089,7 +4073,6 @@ L_088B5A8C: L_088B5AA4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24736))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B5B44; } @@ -4118,7 +4101,6 @@ L_088B5AB4: AOT_REGCACHE_SYNC_OUT(); return; L_088B5AF0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088B5B08; } @@ -4147,7 +4129,6 @@ L_088B5B10: goto L_088B5BF8; L_088B5B1C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088B5B30; } @@ -4164,7 +4145,6 @@ L_088B5B30: goto L_088B5B34; L_088B5B34: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B5B44; } @@ -4179,7 +4159,6 @@ L_088B5B44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B5B7C; } @@ -4191,7 +4170,6 @@ L_088B5B54: goto L_088B65A4; L_088B5B5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088B5B6C; } @@ -4213,7 +4191,6 @@ L_088B5B7C: goto L_088B5BEC; L_088B5B84: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088B5BA4; } @@ -4223,7 +4200,6 @@ L_088B5B8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088B5BA4; } @@ -4247,7 +4223,17 @@ L_088B5BA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5BCC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4260,7 +4246,17 @@ L_088B5BCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5BEC: ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); jump_target = aot_gpr_31; @@ -4268,7 +4264,17 @@ L_088B5BEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5BF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4364,7 +4370,6 @@ L_088B5CB8: goto L_088B5CBC; L_088B5CBC: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088B5C94; } @@ -4453,7 +4458,17 @@ L_088B5D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5D90: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); @@ -4462,7 +4477,6 @@ L_088B5D90: aot_gpr_4 = (aot_gpr_5 & 8u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B5DD0; } @@ -4478,7 +4492,6 @@ L_088B5DB8: goto L_088B6F30; L_088B5DC0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088B5DD8; } @@ -4486,7 +4499,6 @@ L_088B5DC0: } L_088B5DC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B5E0C; } @@ -4494,7 +4506,6 @@ L_088B5DC8: } L_088B5DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B5E0C; } @@ -4528,7 +4539,17 @@ L_088B5E0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B5E1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4647,7 +4668,6 @@ L_088B5F14: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088B5F4C; } @@ -4656,7 +4676,6 @@ L_088B5F14: L_088B5F24: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088B5F40; } @@ -4712,7 +4731,6 @@ L_088B5F7C: goto L_088B5F80; L_088B5F80: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B5FC4; } @@ -4776,7 +4794,6 @@ L_088B5FD8: } L_088B5FE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B5FF0; } @@ -4784,7 +4801,6 @@ L_088B5FE0: } L_088B5FE8: aot_gpr_31 = (0x088B5FF0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B5FF0u) goto L_088B5FF0; AOT_REGCACHE_SYNC_OUT(); return; L_088B5FF0: @@ -4803,7 +4819,17 @@ L_088B5FF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6020: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[8]); @@ -4876,7 +4902,6 @@ L_088B60B8: } L_088B60C4: aot_gpr_31 = (0x088B60CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B60CCu) goto L_088B60CC; AOT_REGCACHE_SYNC_OUT(); return; L_088B60CC: @@ -4925,7 +4950,6 @@ L_088B6118: ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_088B6160; } @@ -4934,7 +4958,6 @@ L_088B6118: L_088B6128: ctx.gpr[22] = (ctx.gpr[23] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088B6154; } @@ -5004,7 +5027,6 @@ L_088B61A0: goto L_088B61A4; L_088B61A4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088B61F4; } @@ -5098,7 +5120,6 @@ L_088B6238: goto L_088B623C; L_088B623C: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088B6214; } @@ -5109,7 +5130,6 @@ L_088B6244: goto L_088B6248; L_088B6248: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B6258; } @@ -5117,7 +5137,6 @@ L_088B6248: } L_088B6250: aot_gpr_31 = (0x088B6258u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B6258u) goto L_088B6258; AOT_REGCACHE_SYNC_OUT(); return; L_088B6258: @@ -5143,7 +5162,17 @@ L_088B6258: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B62A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); aot_gpr_6 = (aot_gpr_6 & 255u); @@ -5258,7 +5287,6 @@ L_088B639C: aot_gpr_5 = (0u | 4096u); aot_gpr_4 = (aot_gpr_4 & 61440u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B64E8; } @@ -5276,7 +5304,6 @@ L_088B63B0: aot_gpr_4 = (ctx.gpr[8] & aot_gpr_4); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[9]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B64E8; } @@ -5296,7 +5323,6 @@ L_088B63E8: AOT_REGCACHE_SYNC_OUT(); return; L_088B63F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088B64E8; } @@ -5433,12 +5459,10 @@ L_088B64E8: } L_088B64F0: aot_gpr_31 = (0x088B64F8u); - // nop ctx.pc = 0x08B73684u; AOT_REGCACHE_SYNC_OUT(); return; L_088B64F8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088B6570; } @@ -5446,7 +5470,6 @@ L_088B64F8: } L_088B6500: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088B6570; } @@ -5519,7 +5542,17 @@ L_088B6574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B65A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); @@ -5528,7 +5561,6 @@ L_088B65A4: aot_gpr_4 = (aot_gpr_5 & 8u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B65DC; } @@ -5540,7 +5572,6 @@ L_088B65C4: goto L_088B6F30; L_088B65CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088B65E4; } @@ -5586,13 +5617,22 @@ L_088B6610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6620: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x088B6634u); - // nop goto L_088B666C; L_088B6634: aot_gpr_4 = (2232u << 16u); @@ -5621,7 +5661,17 @@ L_088B6658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B666C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -5637,7 +5687,17 @@ L_088B666C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6698: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5721,7 +5781,6 @@ L_088B673C: L_088B6744: aot_gpr_6 = (static_cast(aot_gpr_4) < 63 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088B67DC; } @@ -5730,7 +5789,6 @@ L_088B6744: L_088B6750: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088B67DC; } @@ -5750,7 +5808,6 @@ L_088B675C: } L_088B6774: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088B6794; } @@ -5758,7 +5815,6 @@ L_088B6774: } L_088B677C: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_088B6794; } @@ -5766,7 +5822,6 @@ L_088B677C: } L_088B6784: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088B67C0; } @@ -5774,7 +5829,6 @@ L_088B6784: } L_088B678C: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[3]; - // nop if (branch_taken) { goto L_088B67C0; } @@ -5793,7 +5847,6 @@ L_088B6794: } L_088B67A8: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[3]; - // nop if (branch_taken) { goto L_088B67D4; } @@ -5830,7 +5883,6 @@ L_088B67DC: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(27840))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B6840; } @@ -5854,7 +5906,6 @@ L_088B6800: L_088B680C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088B6824; } @@ -5895,7 +5946,17 @@ L_088B6840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6860: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -5907,7 +5968,6 @@ L_088B6860: ctx.gpr[7] = (0u | 0u); ctx.gpr[8] = (ctx.gpr[7] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088B68E8; } @@ -5936,7 +5996,6 @@ L_088B68B0: ctx.gpr[8] = (aot_gpr_4 + ctx.gpr[8]); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(9))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088B68E0; } @@ -5954,7 +6013,6 @@ L_088B68C8: } L_088B68D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B68E8; } @@ -5973,11 +6031,20 @@ L_088B68E8: goto L_088B68EC; L_088B68EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B68F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -6002,14 +6069,34 @@ L_088B6930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B693C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6944: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -6017,7 +6104,6 @@ L_088B6944: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088B6984; } @@ -6030,7 +6116,6 @@ L_088B6960: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B698C; } @@ -6057,11 +6142,20 @@ L_088B698C: goto L_088B6990; L_088B6990: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -6075,7 +6169,6 @@ L_088B6998: ctx.gpr[9] = (0u | 0u); ctx.gpr[7] = (ctx.gpr[9] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088B6A5C; } @@ -6123,7 +6216,6 @@ L_088B6A18: ctx.gpr[10] = (ctx.gpr[7] + ctx.gpr[10]); ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[10] + static_cast(9))); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_088B6A54; } @@ -6133,7 +6225,6 @@ L_088B6A3C: ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); ctx.gpr[10] = (ctx.gpr[9] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_088B69D4; } @@ -6141,7 +6232,6 @@ L_088B6A3C: } L_088B6A4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B6A5C; } @@ -6149,7 +6239,6 @@ L_088B6A4C: } L_088B6A54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B6A64; } @@ -6157,7 +6246,6 @@ L_088B6A54: } L_088B6A5C: aot_gpr_31 = (0x088B6A64u); - // nop goto L_088B7034; L_088B6A64: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6166,7 +6254,17 @@ L_088B6A64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6A70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -6180,7 +6278,6 @@ L_088B6A70: ctx.gpr[9] = (0u | 0u); ctx.gpr[7] = (ctx.gpr[9] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088B6B30; } @@ -6229,7 +6326,6 @@ L_088B6AEC: ctx.gpr[10] = (ctx.gpr[7] + ctx.gpr[10]); ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[10] + static_cast(9))); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_088B6B28; } @@ -6239,7 +6335,6 @@ L_088B6B10: ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); ctx.gpr[10] = (ctx.gpr[9] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_088B6AAC; } @@ -6247,7 +6342,6 @@ L_088B6B10: } L_088B6B20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B6B30; } @@ -6255,7 +6349,6 @@ L_088B6B20: } L_088B6B28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B6B38; } @@ -6263,7 +6356,6 @@ L_088B6B28: } L_088B6B30: aot_gpr_31 = (0x088B6B38u); - // nop goto L_088B7034; L_088B6B38: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6272,7 +6364,17 @@ L_088B6B38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[18]); @@ -6318,7 +6420,6 @@ L_088B6BA8: aot_gpr_5 = (ctx.lo); aot_gpr_5 = (ctx.gpr[21] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B6E7C; } @@ -6352,7 +6453,6 @@ L_088B6C20: AOT_REGCACHE_SYNC_OUT(); return; L_088B6C28: aot_gpr_31 = (0x088B6C30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B6C30u) goto L_088B6C30; AOT_REGCACHE_SYNC_OUT(); return; L_088B6C30: @@ -6385,12 +6485,10 @@ L_088B6C54: goto L_088B6C70; L_088B6C70: aot_gpr_31 = (0x088B6C78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0893685C, 76u, 698u, 0x0893685Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0076_entry, 76u, 698u, 0x0893685Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B6C78u) goto L_088B6C78; AOT_REGCACHE_SYNC_OUT(); return; L_088B6C78: aot_gpr_31 = (0x088B6C80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B6C80u) goto L_088B6C80; AOT_REGCACHE_SYNC_OUT(); return; L_088B6C80: @@ -6569,7 +6667,6 @@ L_088B6DC0: } L_088B6DCC: aot_gpr_31 = (0x088B6DD4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B6DD4u) goto L_088B6DD4; AOT_REGCACHE_SYNC_OUT(); return; L_088B6DD4: @@ -6598,7 +6695,6 @@ L_088B6E08: AOT_REGCACHE_SYNC_OUT(); return; L_088B6E10: aot_gpr_31 = (0x088B6E18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B6E18u) goto L_088B6E18; AOT_REGCACHE_SYNC_OUT(); return; L_088B6E18: @@ -6642,7 +6738,6 @@ L_088B6E7C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B6EA4; } @@ -6670,7 +6765,17 @@ L_088B6EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6ED4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -6681,7 +6786,6 @@ L_088B6ED4: ctx.gpr[9] = (ctx.lo); ctx.gpr[9] = (ctx.gpr[8] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088B6F28; } @@ -6695,7 +6799,6 @@ L_088B6EFC: L_088B6F08: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_088B6F18; } @@ -6716,11 +6819,20 @@ L_088B6F18: } L_088B6F28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (578u << 16u); @@ -6737,7 +6849,6 @@ L_088B6F30: L_088B6F58: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088B6F74; } @@ -6762,7 +6873,17 @@ L_088B6F74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B6F88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6812,7 +6933,17 @@ L_088B7004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7034: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6827,7 +6958,6 @@ L_088B7048: goto L_088B5BF8; L_088B7054: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088B706C; } @@ -6848,7 +6978,17 @@ L_088B706C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B707C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[30]); @@ -6907,7 +7047,6 @@ L_088B710C: } L_088B7118: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B7134; } @@ -7056,7 +7195,6 @@ L_088B7214: } L_088B7220: aot_gpr_31 = (0x088B7228u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B7228u) goto L_088B7228; AOT_REGCACHE_SYNC_OUT(); return; L_088B7228: @@ -7075,7 +7213,6 @@ L_088B7250: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B710C; } @@ -7115,12 +7252,21 @@ L_088B7288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B72B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B72FC; } @@ -7145,7 +7291,6 @@ L_088B72DC: L_088B72E8: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B72FC; } @@ -7153,7 +7298,6 @@ L_088B72E8: } L_088B72F4: aot_gpr_31 = (0x088B72FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B72FCu) goto L_088B72FC; AOT_REGCACHE_SYNC_OUT(); return; L_088B72FC: @@ -7163,7 +7307,17 @@ L_088B72FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -7173,7 +7327,17 @@ L_088B7308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B731C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (17279u << 16u); @@ -7214,7 +7378,6 @@ L_088B7368: goto L_088B737C; L_088B737C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - aot_fpr_14; goto L_088B7398; @@ -7237,7 +7400,6 @@ L_088B7398: goto L_088B73A8; L_088B73A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_14; goto L_088B73C4; @@ -7268,7 +7430,17 @@ L_088B73D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B73EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8488), std::bit_cast(aot_fpr_12)); @@ -7287,7 +7459,6 @@ L_088B73EC: L_088B7420: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B7460; } @@ -7311,7 +7482,6 @@ L_088B742C: L_088B7460: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24624))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B74A0; } @@ -7339,7 +7509,17 @@ L_088B74A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B74AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -7449,7 +7629,6 @@ L_088B7574: AOT_REGCACHE_SYNC_OUT(); return; L_088B75DC: aot_gpr_31 = (0x088B75E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 622u, 0x08972DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B75E4u) goto L_088B75E4; AOT_REGCACHE_SYNC_OUT(); return; L_088B75E4: @@ -7520,7 +7699,6 @@ L_088B7654: AOT_REGCACHE_SYNC_OUT(); return; L_088B7694: aot_gpr_31 = (0x088B769Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 622u, 0x08972DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B769Cu) goto L_088B769C; AOT_REGCACHE_SYNC_OUT(); return; L_088B769C: @@ -7531,7 +7709,6 @@ L_088B769C: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_16) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B7628; } @@ -7552,7 +7729,17 @@ L_088B76BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B76E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); @@ -7573,7 +7760,17 @@ L_088B76E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7728: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_14)); @@ -7593,7 +7790,6 @@ L_088B7728: L_088B7758: ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088B776C; @@ -7628,7 +7824,6 @@ L_088B7798: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8552))); ctx.gpr[9] = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088B77B0; } @@ -7650,7 +7845,6 @@ L_088B77B0: } L_088B77C0: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_088B7880; } @@ -7731,7 +7925,17 @@ L_088B7880: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7894: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24608))); aot_gpr_5 = (0u | 0u); @@ -7762,7 +7966,17 @@ L_088B78C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B78CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8464))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8468))); @@ -7811,7 +8025,17 @@ L_088B78CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B797C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); @@ -7868,7 +8092,17 @@ L_088B797C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7A4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); @@ -7910,7 +8144,17 @@ L_088B7A94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7AD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24624))); jump_target = aot_gpr_31; @@ -7918,7 +8162,17 @@ L_088B7AD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7AE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24624))); aot_gpr_5 = (0u | 1u); @@ -7927,7 +8181,17 @@ L_088B7AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7AF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24604))); @@ -7947,7 +8211,17 @@ L_088B7AF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7B30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); @@ -7975,7 +8249,17 @@ L_088B7B78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7B84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8480))); @@ -7995,7 +8279,17 @@ L_088B7B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7BC0: aot_gpr_4 = (2236u << 16u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(29552))); @@ -8028,10 +8322,19 @@ L_088B7BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7C30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B7C68; } @@ -8045,7 +8348,6 @@ L_088B7C38: aot_gpr_5 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_14)); goto L_088B7C70; @@ -8061,7 +8363,6 @@ L_088B7C60: } L_088B7C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B7D4C; } @@ -8085,7 +8386,6 @@ L_088B7C88: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_14 - aot_fpr_12; goto L_088B7CAC; @@ -8110,7 +8410,6 @@ L_088B7CBC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_088B7CE0; @@ -8170,11 +8469,20 @@ L_088B7D18: goto L_088B7D4C; L_088B7D4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7D54: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[17]); @@ -8194,7 +8502,6 @@ L_088B7D54: L_088B7D7C: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B7DD0; } @@ -8216,7 +8523,6 @@ L_088B7D94: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.gpr[18] = (ctx.gpr[18] + static_cast(112)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (ctx.gpr[19] + static_cast(29552)); if (branch_taken) { @@ -8235,7 +8541,6 @@ L_088B7DC4: } L_088B7DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B7F30; } @@ -8252,7 +8557,6 @@ L_088B7DEC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - aot_fpr_14; goto L_088B7E10; @@ -8277,7 +8581,6 @@ L_088B7E20: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_14; goto L_088B7E44; @@ -8336,7 +8639,6 @@ L_088B7E9C: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); goto L_088B7ED4; @@ -8397,7 +8699,17 @@ L_088B7F30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B7F50: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -8410,7 +8722,6 @@ L_088B7F50: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B7FF8; } @@ -8429,7 +8740,6 @@ L_088B7F80: } L_088B7F94: aot_gpr_31 = (0x088B7F9Cu); - // nop goto L_088B7C30; L_088B7F9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24624))); @@ -8466,7 +8776,6 @@ L_088B7FCC: } L_088B7FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 16u, 0x088B81B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8474,11 +8783,9 @@ L_088B7FE0: } L_088B7FE8: aot_gpr_31 = (0x088B7FF0u); - // nop goto L_088B7C30; L_088B7FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 16u, 0x088B81B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0045.cpp b/profiles/vcs/generated/generated_unit_0045.cpp index 60fc166..aaf5b85 100644 --- a/profiles/vcs/generated/generated_unit_0045.cpp +++ b/profiles/vcs/generated/generated_unit_0045.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0045[4055] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, - 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 25, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 28, 0, - 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, 0, 35, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 44, 0, 0, 45, - 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 61, 0, 62, 63, - 0, 64, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 68, 0, - 0, 0, 0, 0, 69, 0, 70, 71, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 76, 0, 77, - 0, 0, 78, 0, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 84, 0, 0, 85, 0, - 86, 0, 0, 0, 0, 0, 87, 88, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 91, 0, 0, 0, 92, 0, 93, 0, 0, 0, 0, 94, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 99, 0, 0, 100, 0, - 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 106, 107, 108, 0, 109, 110, 0, 0, 0, 0, 0, 0, 111, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, - 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 0, 0, 120, 0, 0, 121, 122, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, - 126, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 131, 0, 0, 132, 0, 0, 133, 0, - 0, 0, 134, 0, 0, 135, 136, 0, 0, 0, 137, 0, 138, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 142, 0, 0, - 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 0, 148, 0, 0, 149, 150, 0, 0, 0, 151, 0, - 152, 0, 0, 0, 153, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, - 159, 0, 0, 160, 0, 0, 161, 0, 0, 0, 162, 0, 0, 163, 164, 0, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 173, 0, 0, 174, 0, 0, 175, 0, 0, 0, 176, - 0, 0, 177, 178, 0, 0, 0, 179, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 188, 0, 0, 189, 0, 0, 0, 190, 0, 0, 191, 192, 0, 0, 0, 193, 0, 194, 0, - 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 201, - 0, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 0, 205, 206, 0, 0, 0, 207, 0, 208, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 0, - 0, 0, 211, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 0, 215, 0, 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, - 0, 219, 220, 0, 0, 0, 221, 0, 222, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 226, 0, 0, 0, 0, 0, - 0, 0, 0, 227, 0, 228, 0, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 0, 0, 232, 0, 0, 233, 234, 0, 0, 0, 235, 0, 236, 0, 0, - 0, 237, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 245, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, - 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 253, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, - 257, 0, 258, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 266, 0, 267, 0, 268, 0, 0, 0, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 275, 0, 276, 0, 277, 0, 278, 0, 0, 0, 279, 0, 280, 0, 281, 282, 0, 0, 283, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 285, 0, 286, 0, 287, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 292, 0, 0, 293, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, - 0, 0, 299, 0, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 303, 304, 0, 305, 0, 0, 0, 306, 0, - 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 317, 0, 0, - 0, 0, 318, 0, 0, 0, 319, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 325, 0, 326, 0, 0, 0, 0, 0, 0, 0, 327, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 341, 0, 0, 342, - 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 348, 0, 349, 0, 0, 0, 350, 0, 0, 0, 0, - 351, 352, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 356, 0, 357, 0, 0, 358, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 370, 0, - 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 380, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, - 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, - 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, - 0, 0, 0, 0, 408, 0, 409, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 418, - 0, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, - 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 426, 0, 0, 427, 428, 0, 0, 0, 429, 0, 0, 430, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, - 433, 0, 0, 434, 0, 435, 0, 0, 436, 437, 0, 438, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 0, 444, 445, - 0, 446, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, - 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, - 0, 0, 457, 0, 458, 0, 459, 460, 0, 461, 0, 0, 462, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 466, 0, 467, - 0, 0, 468, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, - 0, 473, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 485, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 487, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 491, 0, 492, 0, 493, 0, 0, 494, 0, 495, 0, 496, 0, 0, 497, 0, 0, 498, 0, - 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 503, 0, 504, 0, 0, 0, 0, 505, 0, - 0, 0, 506, 0, 0, 0, 507, 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 511, 0, 0, 512, 513, 0, 0, 0, 514, 0, 0, 0, - 0, 0, 0, 515, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 522, 0, 523, 0, 0, 0, 524, 525, 0, 526, 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 0, 0, - 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 532, 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, - 0, 0, 0, 0, 536, 0, 537, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 0, 0, 543, 0, 544, 0, 545, 0, 0, 0, 0, 0, 0, 546, 0, 547, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, - 0, 550, 0, 0, 551, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 555, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 568, - 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 570, 0, 0, 0, 0, 571, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 0, 0, - 0, 579, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 0, 587, 0, 588, 0, 589, 0, 590, 0, 591, 0, 0, 0, 592, 0, 0, - 0, 0, 0, 593, 0, 594, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 596, 597, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 600, 601, 0, 0, 0, 602, 0, 0, - 0, 0, 0, 0, 0, 603, 604, 0, 605, 0, 606, 0, 0, 607, 0, 608, 0, 609, 610, 0, 611, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 0, 0, 618, 619, 0, 620, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 629, 0, - 0, 630, 0, 631, 0, 0, 0, 632, 0, 0, 0, 633, 0, 0, 634, 0, 635, 0, 0, 636, 0, 637, 0, 0, 0, 0, 638, 0, 639, 0, 640, 0, - 0, 0, 641, 0, 0, 642, 0, 643, 0, 0, 0, 0, 644, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 648, 0, 649, 0, 650, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 652, 0, - 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 657, 0, 658, 0, 0, 0, 659, 0, 0, 660, 0, 0, 0, - 661, 0, 0, 662, 0, 663, 0, 0, 664, 0, 0, 0, 0, 665, 0, 666, 667, 0, 668, 0, 0, 0, 669, 0, 0, 670, 0, 0, 0, 0, 671, 0, - 672, 673, 0, 0, 0, 674, 675, 0, 676, 0, 677, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 681, 0, 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 0, 0, - 0, 0, 684, 0, 0, 685, 0, 0, 0, 0, 686, 0, 0, 687, 0, 688, 0, 0, 689, 690, 0, 0, 691, 0, 0, 0, 692, 0, 693, 0, 0, 0, - 694, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 699, 0, 0, - 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 707, 0, 0, 708, - 0, 0, 0, 0, 0, 709, 0, 710, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 712, 713, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 716, 717, 0, 0, 0, 0, - 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 720, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 725, 726, 0, 0, 727, 0, 728, 0, 0, 0, 0, 0, 0, - 0, 729, 730, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 732, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 734, 0, 735, 0, 736, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, - 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 742, 0, 743, 0, 0, 744, 0, 0, 0, 0, 745, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 752, 0, 753, 0, 754, 0, 0, 0, 0, 0, 0, 0, - 755, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 757, 0, 0, 0, 758, 0, 0, 0, 759, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 763, 0, 0, 0, 764, 0, 0, 765, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 768, 0, 769, 0, 0, 770, 0, 0, 771, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, - 0, 774, 775, 0, 776, 0, 0, 0, 777, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 780, 0, 781, 782, 783, 0, 0, 0, 784, 0, 0, 0, 0, 0, 785, 0, 786, 0, 787, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0045[64] = { + 0x4801000001100005ull, 0x4020500002244488ull, 0x40A9004004802002ull, 0x0000000000024001ull, + 0x12A4000000000000ull, 0x20408004950092A0ull, 0xD502818102040810ull, 0xA88480D04040010Aull, + 0x428850C14A110034ull, 0x81B8554048900101ull, 0xA000000002401000ull, 0x4914028111232248ull, + 0x4644914028111464ull, 0x1114644914028111ull, 0x0902228C89228048ull, 0x8A01204451912450ull, + 0x44914024088A3224ull, 0x28C8922804811146ull, 0x4046420400211022ull, 0x040882A54800A852ull, + 0x0110A15000002000ull, 0x0828255013515488ull, 0x458040A408108909ull, 0x004901442140AAAAull, + 0x0814811000855015ull, 0x08A4244491001200ull, 0x0024900040929113ull, 0x00A0515540A04081ull, + 0x08081009228008A0ull, 0x010000000000AA00ull, 0x2000420010008200ull, 0x0008015040850420ull, + 0x8010429084081109ull, 0xCA844B2911246500ull, 0x024201048404010Aull, 0x4002020CA50052D4ull, + 0x001082080010104Aull, 0x4952A84300095010ull, 0x11940A4442940840ull, 0x084B162004010508ull, + 0x000C445084210842ull, 0x802502A040000000ull, 0x0851400A00080852ull, 0x80802000010A0008ull, + 0x22AA555615558420ull, 0x00000000000000A8ull, 0x4056A56023040106ull, 0x04011000160A0900ull, + 0x5429488A44005280ull, 0x41054800008090A4ull, 0x4245A12912284888ull, 0x0484800001001563ull, + 0x24008141144CA424ull, 0x9800004010008830ull, 0x00000000000002A0ull, 0x002160040C100418ull, + 0x0004280602990040ull, 0x0000001020001015ull, 0x0000000000002000ull, 0x4410084010960000ull, + 0x0048884101520000ull, 0x9290001009140001ull, 0x0010091680001000ull, 0x00000000005411D0ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0045[64] = { + 1u, 8u, 19u, 29u, 32u, 37u, 50u, 64u, 78u, 95u, 112u, 117u, 134u, 152u, 169u, 185u, + 202u, 219u, 237u, 249u, 265u, 273u, 292u, 307u, 324u, 338u, 351u, 365u, 380u, 391u, 396u, 402u, + 412u, 425u, 446u, 457u, 473u, 482u, 499u, 515u, 529u, 542u, 550u, 562u, 569u, 593u, 596u, 614u, + 624u, 641u, 653u, 672u, 684u, 700u, 709u, 712u, 723u, 734u, 740u, 741u, 751u, 761u, 772u, 780u, }; void recomp_unit_0045_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0045_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088B8000u; - entry_id = (entry_delta < 16220u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0045[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16220u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0045[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0045[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088B8000; @@ -1035,7 +943,6 @@ L_088B80C0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8472))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[15]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } if (branch_taken) { @@ -1061,7 +968,6 @@ L_088B80F8: goto L_088B810C; L_088B810C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - ctx.fpr[20]; goto L_088B8128; @@ -1084,7 +990,6 @@ L_088B8128: goto L_088B8138; L_088B8138: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; goto L_088B8154; @@ -1132,7 +1037,6 @@ L_088B8164: } L_088B81B0: aot_gpr_31 = (0x088B81B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 671u, 0x088B7BC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B81B8u) goto L_088B81B8; AOT_REGCACHE_SYNC_OUT(); return; L_088B81B8: @@ -1149,14 +1053,23 @@ L_088B81B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B81D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24628))); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(168), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B8338; } @@ -1239,7 +1152,6 @@ L_088B8298: L_088B82C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8592))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B82F8; } @@ -1247,7 +1159,6 @@ L_088B82C0: } L_088B82CC: aot_gpr_31 = (0x088B82D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B82D4u) goto L_088B82D4; AOT_REGCACHE_SYNC_OUT(); return; L_088B82D4: @@ -1294,7 +1205,6 @@ L_088B8300: L_088B8338: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24624))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B84C8; } @@ -1486,7 +1396,6 @@ L_088B8344: L_088B84C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B84DC; } @@ -1494,7 +1403,6 @@ L_088B84C8: } L_088B84D4: aot_gpr_31 = (0x088B84DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B84DCu) goto L_088B84DC; AOT_REGCACHE_SYNC_OUT(); return; L_088B84DC: @@ -1505,7 +1413,6 @@ L_088B84DC: L_088B84E4: aot_gpr_4 = (ctx.gpr[2] < static_cast(257) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B86A0; } @@ -1528,7 +1435,6 @@ L_088B84F0: } L_088B8514: aot_gpr_31 = (0x088B851Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B851Cu) goto L_088B851C; AOT_REGCACHE_SYNC_OUT(); return; L_088B851C: @@ -1567,7 +1473,6 @@ L_088B853C: } L_088B8560: aot_gpr_31 = (0x088B8568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B8568u) goto L_088B8568; AOT_REGCACHE_SYNC_OUT(); return; L_088B8568: @@ -1600,7 +1505,6 @@ L_088B8588: aot_fpr_22 = aot_fpr_22 + ctx.fpr[20]; { const float fs = aot_fpr_14; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B85BC; @@ -1611,7 +1515,6 @@ L_088B85BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8468))); { const float fs = aot_fpr_12; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B85D8; @@ -1622,7 +1525,6 @@ L_088B85D8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8468), std::bit_cast(aot_fpr_12)); { const float fs = aot_fpr_13; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B85F4; @@ -1633,7 +1535,6 @@ L_088B85F4: aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8480))); { const float fs = aot_fpr_22; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B8610; @@ -1644,7 +1545,6 @@ L_088B8610: aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8484))); { const float fs = aot_fpr_22; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B862C; @@ -1655,7 +1555,6 @@ L_088B862C: aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8488))); { const float fs = aot_fpr_22; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B8648; @@ -1666,7 +1565,6 @@ L_088B8648: aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8464))); { const float fs = aot_fpr_22; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B8664; @@ -1677,7 +1575,6 @@ L_088B8664: aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8468))); { const float fs = aot_fpr_22; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B8680; @@ -1688,7 +1585,6 @@ L_088B8680: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8500), std::bit_cast(aot_fpr_22)); { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088B869C; @@ -1711,14 +1607,33 @@ L_088B86A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B86BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B86C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1748,7 +1663,6 @@ L_088B86E8: goto L_088B86F0; L_088B86F0: aot_gpr_31 = (0x088B86F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B86F8u) goto L_088B86F8; AOT_REGCACHE_SYNC_OUT(); return; L_088B86F8: @@ -1756,7 +1670,6 @@ L_088B86F8: goto L_088B86FC; L_088B86FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B870C; } @@ -1779,7 +1692,17 @@ L_088B870C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B8720: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -1816,7 +1739,6 @@ L_088B8778: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B879C; } @@ -1838,7 +1760,6 @@ L_088B879C: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B88CC; } @@ -1886,7 +1807,6 @@ L_088B87F4: L_088B87FC: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088B8814; } @@ -1973,7 +1893,6 @@ L_088B889C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B88B8; } @@ -1981,7 +1900,6 @@ L_088B889C: } L_088B88B0: aot_gpr_31 = (0x088B88B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B88B8u) goto L_088B88B8; AOT_REGCACHE_SYNC_OUT(); return; L_088B88B8: @@ -2054,7 +1972,17 @@ L_088B8920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B8950: ctx.gpr[2] = (2188u << 16u); jump_target = aot_gpr_31; @@ -2062,12 +1990,21 @@ L_088B8950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B895C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088B896Cu); - // nop goto L_088B8950; L_088B896C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -2076,7 +2013,17 @@ L_088B896C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B8978: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2105,7 +2052,6 @@ L_088B89A8: goto L_088B89B0; L_088B89B0: aot_gpr_31 = (0x088B89B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B89B8u) goto L_088B89B8; AOT_REGCACHE_SYNC_OUT(); return; L_088B89B8: @@ -2127,7 +2073,6 @@ L_088B89D0: goto L_088B89D4; L_088B89D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B89E0; } @@ -2150,7 +2095,17 @@ L_088B89E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B89FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2241,7 +2196,6 @@ L_088B8B0C: L_088B8B18: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B8B9C; } @@ -2346,7 +2300,6 @@ L_088B8BE0: L_088B8BEC: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B8C6C; } @@ -2450,7 +2403,6 @@ L_088B8CB0: L_088B8CBC: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B8D3C; } @@ -2554,7 +2506,6 @@ L_088B8D80: L_088B8D8C: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B8E0C; } @@ -2659,7 +2610,6 @@ L_088B8E54: L_088B8E60: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B8EE0; } @@ -2764,7 +2714,6 @@ L_088B8F28: L_088B8F34: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B8FB4; } @@ -2867,7 +2816,6 @@ L_088B8FFC: L_088B9008: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B9088; } @@ -2970,7 +2918,6 @@ L_088B90D0: L_088B90DC: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B915C; } @@ -3073,7 +3020,6 @@ L_088B91A4: L_088B91B0: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088B9230; } @@ -3173,7 +3119,17 @@ L_088B9254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9288: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3197,7 +3153,6 @@ L_088B92A4: L_088B92B8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(184))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088B92C8; } @@ -3236,7 +3191,6 @@ L_088B92F8: L_088B9304: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B9318; } @@ -3259,21 +3213,49 @@ L_088B9318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B932C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9334: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B933C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3285,7 +3267,6 @@ L_088B933C: L_088B936C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B9380; } @@ -3293,7 +3274,6 @@ L_088B936C: } L_088B9378: aot_gpr_31 = (0x088B9380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B9380u) goto L_088B9380; AOT_REGCACHE_SYNC_OUT(); return; L_088B9380: @@ -3312,7 +3292,6 @@ L_088B9388: } L_088B9394: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088B93A4; } @@ -3320,7 +3299,6 @@ L_088B9394: } L_088B939C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B94E0; } @@ -3363,8 +3341,6 @@ L_088B93E8: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[15] = static_cast(static_cast(std::bit_cast(ctx.fpr[15]))); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); @@ -3393,8 +3369,6 @@ L_088B9434: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[15] = static_cast(static_cast(std::bit_cast(ctx.fpr[15]))); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); @@ -3411,7 +3385,6 @@ L_088B9490: AOT_REGCACHE_SYNC_OUT(); return; L_088B9498: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088B94BC; } @@ -3427,7 +3400,6 @@ L_088B94A0: AOT_REGCACHE_SYNC_OUT(); return; L_088B94B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B94D0; } @@ -3469,12 +3441,21 @@ L_088B94E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B950C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088B951Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 511u, 0x08AC5CC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B951Cu) goto L_088B951C; AOT_REGCACHE_SYNC_OUT(); return; L_088B951C: @@ -3484,38 +3465,73 @@ L_088B951C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9528: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9530: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9538: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9540: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088B9550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 605u, 0x08AC646Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B9550u) goto L_088B9550; AOT_REGCACHE_SYNC_OUT(); return; L_088B9550: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088B9560; } @@ -3539,7 +3555,17 @@ L_088B9564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9570: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3547,7 +3573,6 @@ L_088B9570: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } aot_gpr_31 = (0x088B9590u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B9590u) goto L_088B9590; AOT_REGCACHE_SYNC_OUT(); return; L_088B9590: @@ -3584,7 +3609,6 @@ L_088B95B4: } L_088B95CC: aot_gpr_31 = (0x088B95D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088B95D4u) goto L_088B95D4; AOT_REGCACHE_SYNC_OUT(); return; L_088B95D4: @@ -3600,7 +3624,17 @@ L_088B95D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B95EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -3610,7 +3644,17 @@ L_088B95EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9600: aot_gpr_6 = (aot_gpr_4 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; @@ -3638,12 +3682,21 @@ L_088B9620: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B962C: aot_gpr_5 = (1u << 16u); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088B9688; } @@ -3689,7 +3742,6 @@ L_088B966C: L_088B9688: aot_gpr_5 = (aot_gpr_4 < static_cast(256) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B96B8; } @@ -3697,7 +3749,6 @@ L_088B9688: } L_088B9694: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B96DC; } @@ -3736,16 +3787,24 @@ L_088B96DC: goto L_088B96E0; L_088B96E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B96E8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088B970C; } @@ -3754,7 +3813,6 @@ L_088B96E8: L_088B96F8: aot_gpr_7 = (static_cast(aot_gpr_6) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_088B9714; } @@ -3778,7 +3836,6 @@ L_088B970C: } L_088B9714: { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_088B9788; } @@ -3786,7 +3843,6 @@ L_088B9714: } L_088B971C: { const bool branch_taken = static_cast(aot_gpr_6) > 0; - // nop if (branch_taken) { goto L_088B9760; } @@ -3810,7 +3866,6 @@ L_088B972C: } L_088B9734: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088B9788; } @@ -3821,7 +3876,6 @@ L_088B973C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[2] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[2] = (0u | 1u); goto L_088B9758; @@ -3829,7 +3883,6 @@ L_088B973C: goto L_088B9758; L_088B9758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9798; } @@ -3865,11 +3918,20 @@ L_088B9788: goto L_088B9798; L_088B9798: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B97A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -3914,7 +3976,6 @@ L_088B97D8: } L_088B9800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9830; } @@ -3944,7 +4005,6 @@ L_088B9810: } L_088B9830: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B9840; } @@ -3974,7 +4034,17 @@ L_088B9848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B985C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4035,7 +4105,17 @@ L_088B98D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B98EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_6); @@ -4059,7 +4139,17 @@ L_088B9924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9930: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4097,7 +4187,6 @@ L_088B9970: L_088B997C: aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088B99DC; } @@ -4120,7 +4209,6 @@ L_088B9998: L_088B99A8: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B99C8; } @@ -4142,7 +4230,6 @@ L_088B99C8: AOT_REGCACHE_SYNC_OUT(); return; L_088B99D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9A5C; } @@ -4160,7 +4247,6 @@ L_088B99EC: aot_gpr_4 = (ctx.gpr[19] + static_cast(-17)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088B9A04; } @@ -4179,7 +4265,6 @@ L_088B9A10: aot_gpr_4 = (ctx.gpr[16] + ctx.gpr[17]); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088B9A44; } @@ -4200,7 +4285,6 @@ L_088B9A30: AOT_REGCACHE_SYNC_OUT(); return; L_088B9A3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9A50; } @@ -4232,7 +4316,17 @@ L_088B9A5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9A78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4258,7 +4352,6 @@ L_088B9AB0: L_088B9ABC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088B9B1C; } @@ -4363,7 +4456,6 @@ L_088B9B88: } L_088B9B90: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088B9C74; } @@ -4371,7 +4463,6 @@ L_088B9B90: } L_088B9B98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9C80; } @@ -4385,7 +4476,6 @@ L_088B9BA0: goto L_088B985C; L_088B9BB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9C80; } @@ -4402,7 +4492,6 @@ L_088B9BB8: goto L_088B985C; L_088B9BD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088B9C80; } @@ -4506,7 +4595,17 @@ L_088B9C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9CB0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4536,11 +4635,20 @@ L_088B9CB0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9CCC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4575,7 +4683,17 @@ L_088B9CCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9CEC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4616,28 +4734,67 @@ L_088B9CEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9D24: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-24276), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9D2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9D34: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7588), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9D3C: aot_gpr_4 = (50300u << 16u); aot_gpr_4 = (aot_gpr_4 | 32768u); @@ -4683,7 +4840,17 @@ L_088B9D3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24260))); @@ -4742,7 +4909,6 @@ L_088B9E70: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -4753,9 +4919,7 @@ L_088B9E70: L_088B9EA4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B9F48; } @@ -4774,9 +4938,7 @@ L_088B9EB8: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; aot_fpr_14 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B9F48; } @@ -4788,9 +4950,7 @@ L_088B9EF4: aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[20])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088B9F28; } @@ -4799,7 +4959,6 @@ L_088B9EF4: L_088B9F14: ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_088B9F28; @@ -4880,7 +5039,17 @@ L_088B9FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088B9FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4941,7 +5110,17 @@ L_088BA030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA04C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4971,7 +5150,6 @@ L_088BA07C: L_088BA090: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BA0B8; } @@ -4979,7 +5157,6 @@ L_088BA090: } L_088BA09C: { const bool branch_taken = static_cast(ctx.gpr[16]) < 0; - // nop if (branch_taken) { goto L_088BA0B8; } @@ -5006,7 +5183,17 @@ L_088BA0B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA0D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[19]); @@ -5033,7 +5220,6 @@ L_088BA0FC: AOT_REGCACHE_SYNC_OUT(); return; L_088BA120: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088BA138; } @@ -5114,7 +5300,6 @@ L_088BA1A0: goto L_088BA1A4; L_088BA1A4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BA1FC; } @@ -5168,7 +5353,6 @@ L_088BA1F8: goto L_088BA1FC; L_088BA1FC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088BA220; } @@ -5176,7 +5360,6 @@ L_088BA1FC: } L_088BA204: { const bool branch_taken = static_cast(ctx.gpr[16]) < 0; - // nop if (branch_taken) { goto L_088BA220; } @@ -5207,7 +5390,17 @@ L_088BA220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA248: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5246,7 +5439,17 @@ L_088BA288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA2A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5285,7 +5488,6 @@ L_088BA2E4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BA318; } @@ -5326,7 +5528,6 @@ L_088BA324: AOT_REGCACHE_SYNC_OUT(); return; L_088BA330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BA388; } @@ -5347,7 +5548,6 @@ L_088BA338: AOT_REGCACHE_SYNC_OUT(); return; L_088BA360: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088BA37C; } @@ -5361,7 +5561,6 @@ L_088BA368: AOT_REGCACHE_SYNC_OUT(); return; L_088BA374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BA388; } @@ -5389,7 +5588,17 @@ L_088BA38C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA3A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5414,7 +5623,6 @@ L_088BA3C4: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BA40C; } @@ -5428,7 +5636,6 @@ L_088BA3F8: AOT_REGCACHE_SYNC_OUT(); return; L_088BA404: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BA418; } @@ -5453,7 +5660,17 @@ L_088BA418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5496,7 +5713,17 @@ L_088BA48C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA4A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5534,7 +5761,17 @@ L_088BA4D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA510: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5548,7 +5785,6 @@ L_088BA510: AOT_REGCACHE_SYNC_OUT(); return; L_088BA530: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BA540; } @@ -5599,7 +5835,17 @@ L_088BA584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA598: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -5613,7 +5859,6 @@ L_088BA598: } L_088BA5AC: aot_gpr_31 = (0x088BA5B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BA5B4u) goto L_088BA5B4; AOT_REGCACHE_SYNC_OUT(); return; L_088BA5B4: @@ -5636,7 +5881,6 @@ L_088BA5C4: } L_088BA5D0: aot_gpr_31 = (0x088BA5D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BA5D8u) goto L_088BA5D8; AOT_REGCACHE_SYNC_OUT(); return; L_088BA5D8: @@ -5656,7 +5900,17 @@ L_088BA5EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA5F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5676,7 +5930,17 @@ L_088BA618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA62C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5697,7 +5961,6 @@ L_088BA648: L_088BA650: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BA664; } @@ -5720,12 +5983,21 @@ L_088BA664: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA678: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_31); aot_gpr_31 = (0x088BA688u); - // nop goto L_088BA768; L_088BA688: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[2]); @@ -5744,14 +6016,34 @@ L_088BA698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA6A4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA6AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5759,7 +6051,6 @@ L_088BA6AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BA6DC; } @@ -5767,7 +6058,6 @@ L_088BA6AC: } L_088BA6C8: aot_gpr_31 = (0x088BA6D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 245u, 0x08B213BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BA6D0u) goto L_088BA6D0; AOT_REGCACHE_SYNC_OUT(); return; L_088BA6D0: @@ -5790,13 +6080,22 @@ L_088BA6E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA6F0: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_gpr_5 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088BA70C; @@ -5805,7 +6104,6 @@ L_088BA6F0: L_088BA70C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088BA720; @@ -5817,7 +6115,17 @@ L_088BA720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA728: aot_gpr_5 = (16256u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -5828,7 +6136,17 @@ L_088BA728: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA740: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(44), 0u); aot_gpr_5 = (0u + static_cast(-1)); @@ -5843,7 +6161,17 @@ L_088BA740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA768: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -5865,7 +6193,6 @@ L_088BA794: ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24163))); ctx.gpr[3] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_088BA7A8; } @@ -5876,7 +6203,6 @@ L_088BA7A4: goto L_088BA7A8; L_088BA7A8: { const bool branch_taken = static_cast(ctx.gpr[11]) < 0; - // nop if (branch_taken) { goto L_088BA7C4; } @@ -5897,7 +6223,6 @@ L_088BA7C0: goto L_088BA7C4; L_088BA7C4: { const bool branch_taken = static_cast(ctx.gpr[10]) < 0; - // nop if (branch_taken) { goto L_088BA7D8; } @@ -5913,7 +6238,6 @@ L_088BA7D8: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); ctx.gpr[10] = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_088BA890; } @@ -5925,11 +6249,20 @@ L_088BA7EC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21840))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA804: ctx.gpr[9] = (0u | 255u); ctx.gpr[8] = (0u | 180u); @@ -6009,7 +6342,6 @@ L_088BA87C: } L_088BA890: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088BA978; } @@ -6035,7 +6367,6 @@ L_088BA8B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16966))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088BA978; } @@ -6101,12 +6432,10 @@ L_088BA978: AOT_REGCACHE_SYNC_OUT(); return; L_088BA994: aot_gpr_31 = (0x088BA99Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 268u, 0x08935094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BA99Cu) goto L_088BA99C; AOT_REGCACHE_SYNC_OUT(); return; L_088BA99C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088BA9C0; } @@ -6136,7 +6465,17 @@ L_088BA9C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BA9D4: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -6221,7 +6560,17 @@ L_088BAA84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BAA8C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -6241,7 +6590,6 @@ L_088BAA8C: } L_088BAAB8: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088BAAD0; } @@ -6308,7 +6656,17 @@ L_088BAB44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BAB4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6318,7 +6676,17 @@ L_088BAB4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BAB60: aot_gpr_6 = (2234u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(22480)); @@ -6334,7 +6702,17 @@ L_088BAB60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BABB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6401,7 +6779,6 @@ L_088BAC40: } L_088BAC48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BAC68; } @@ -6409,7 +6786,6 @@ L_088BAC48: } L_088BAC50: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BAC68; } @@ -6417,7 +6793,6 @@ L_088BAC50: } L_088BAC58: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BAC68; } @@ -6430,7 +6805,6 @@ L_088BAC60: AOT_REGCACHE_SYNC_OUT(); return; L_088BAC68: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088BACB0; } @@ -6460,7 +6834,6 @@ L_088BAC88: } L_088BAC90: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088BACB0; } @@ -6468,7 +6841,6 @@ L_088BAC90: } L_088BAC98: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BACB0; } @@ -6476,7 +6848,6 @@ L_088BAC98: } L_088BACA0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BACB0; } @@ -6484,12 +6855,10 @@ L_088BACA0: } L_088BACA8: aot_gpr_31 = (0x088BACB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BACB0u) goto L_088BACB0; AOT_REGCACHE_SYNC_OUT(); return; L_088BACB0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088BACDC; } @@ -6506,7 +6875,6 @@ L_088BACB8: } L_088BACC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BACDC; } @@ -6514,7 +6882,6 @@ L_088BACC4: } L_088BACCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BACDC; } @@ -6522,7 +6889,6 @@ L_088BACCC: } L_088BACD4: aot_gpr_31 = (0x088BACDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BACDCu) goto L_088BACDC; AOT_REGCACHE_SYNC_OUT(); return; L_088BACDC: @@ -6689,7 +7055,6 @@ L_088BAE94: goto L_088BAE98; L_088BAE98: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088BAD0C; } @@ -6718,7 +7083,6 @@ L_088BAEB4: goto L_088BAEBC; L_088BAEBC: aot_gpr_31 = (0x088BAEC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BAEC4u) goto L_088BAEC4; AOT_REGCACHE_SYNC_OUT(); return; L_088BAEC4: @@ -6726,7 +7090,6 @@ L_088BAEC4: goto L_088BAEC8; L_088BAEC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BAED8; } @@ -6752,7 +7115,17 @@ L_088BAED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BAEF8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -6763,7 +7136,6 @@ L_088BAEF8: ctx.gpr[9] = (ctx.lo); ctx.gpr[9] = (ctx.gpr[8] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088BAF64; } @@ -6772,7 +7144,6 @@ L_088BAEF8: L_088BAF20: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); { const bool branch_taken = ctx.gpr[9] == aot_gpr_5; - // nop if (branch_taken) { goto L_088BAF4C; } @@ -6792,7 +7163,6 @@ L_088BAF2C: } L_088BAF44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BAF64; } @@ -6815,11 +7185,20 @@ L_088BAF64: goto L_088BAF68; L_088BAF68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BAF70: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6860,7 +7239,17 @@ L_088BAFC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BAFE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7023,7 +7412,6 @@ L_088BB108: } L_088BB114: aot_gpr_31 = (0x088BB11Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BB11Cu) goto L_088BB11C; AOT_REGCACHE_SYNC_OUT(); return; L_088BB11C: @@ -7053,7 +7441,17 @@ L_088BB13C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB15C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7172,7 +7570,6 @@ L_088BB254: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088BB28C; } @@ -7181,7 +7578,6 @@ L_088BB254: L_088BB264: aot_gpr_7 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BB280; } @@ -7237,7 +7633,6 @@ L_088BB2BC: goto L_088BB2C0; L_088BB2C0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088BB304; } @@ -7301,7 +7696,6 @@ L_088BB318: } L_088BB320: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BB330; } @@ -7309,7 +7703,6 @@ L_088BB320: } L_088BB328: aot_gpr_31 = (0x088BB330u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BB330u) goto L_088BB330; AOT_REGCACHE_SYNC_OUT(); return; L_088BB330: @@ -7330,7 +7723,17 @@ L_088BB330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB360: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7426,7 +7829,6 @@ L_088BB434: L_088BB43C: aot_gpr_4 = (aot_gpr_5 + static_cast(4)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088BB470; } @@ -7495,7 +7897,17 @@ L_088BB4A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7507,7 +7919,6 @@ L_088BB4BC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088BB52C; } @@ -7516,7 +7927,6 @@ L_088BB4BC: L_088BB4E8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BB514; } @@ -7543,7 +7953,6 @@ L_088BB514: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BB4E8; } @@ -7557,7 +7966,17 @@ L_088BB52C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB53C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), aot_gpr_31); @@ -7571,7 +7990,6 @@ L_088BB53C: { const std::int32_t dividend = static_cast(ctx.gpr[8]); const std::int32_t divisor = static_cast(ctx.gpr[10]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[8] = (ctx.lo); { const bool branch_taken = static_cast(ctx.gpr[8]) <= 0; - // nop if (branch_taken) { goto L_088BB5F0; } @@ -7784,7 +8202,6 @@ L_088BB7B4: goto L_088BB7B8; L_088BB7B8: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088BB614; } @@ -7799,7 +8216,17 @@ L_088BB7C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB7D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7834,7 +8261,6 @@ L_088BB818: L_088BB840: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088BB864; } @@ -7850,7 +8276,6 @@ L_088BB850: goto L_088BB53C; L_088BB85C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BB910; } @@ -7949,7 +8374,17 @@ L_088BB910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -7975,7 +8410,17 @@ L_088BB974: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BB990: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(192), ctx.gpr[16]); @@ -8081,7 +8526,6 @@ L_088BBA34: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BBBE8; } @@ -8164,7 +8608,17 @@ L_088BBBE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BBBF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8306,7 +8760,6 @@ L_088BBD50: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_7 = (0u | 1u); { const bool branch_taken = ctx.gpr[10] != aot_gpr_7; - // nop if (branch_taken) { goto L_088BBDDC; } @@ -8315,7 +8768,6 @@ L_088BBD50: L_088BBD60: aot_gpr_7 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BBDD0; } diff --git a/profiles/vcs/generated/generated_unit_0046.cpp b/profiles/vcs/generated/generated_unit_0046.cpp index 3881489..382202d 100644 --- a/profiles/vcs/generated/generated_unit_0046.cpp +++ b/profiles/vcs/generated/generated_unit_0046.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0046[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 0, 11, 12, 0, 13, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 0, 37, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 44, 45, 0, 46, 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, - 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, - 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 93, - 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 110, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 142, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, - 152, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 156, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 0, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, - 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, - 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 182, 0, 183, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 190, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 195, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 197, 0, 198, 0, 0, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 209, 0, 210, - 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 217, 0, 0, - 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 223, 0, 224, 225, 0, 0, 226, 0, 0, 0, - 0, 0, 227, 0, 228, 229, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 234, 235, 0, 0, 0, 236, 237, 0, 238, - 0, 239, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 244, 0, 245, 0, - 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, - 0, 0, 252, 0, 253, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 263, 0, 264, 0, 265, 0, - 266, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 273, - 0, 0, 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, - 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, - 0, 0, 287, 0, 288, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 299, 0, 300, 0, - 301, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, - 0, 0, 309, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, - 313, 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 317, 0, 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 321, 0, 322, 0, 0, 323, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 325, 0, 326, 0, 327, 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, - 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, 0, 0, - 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 356, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 360, 0, 0, - 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 371, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 375, 0, 0, 0, - 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 378, 0, 379, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 388, 389, 0, - 390, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 393, 0, 0, 0, - 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 403, - 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0046[64] = { + 0x15B0118200830001ull, 0x8002091000140400ull, 0x0000000002010200ull, 0x0008854100418000ull, + 0x8020AC0000000000ull, 0x0000000000104010ull, 0x0000A8200840102Bull, 0x0000000000000000ull, + 0x0080202020402100ull, 0x0560000000000000ull, 0x0000000104010802ull, 0x00A8200840105600ull, + 0x0000000000000000ull, 0x00A0082008030000ull, 0x0000000000000002ull, 0x1000002084804000ull, + 0x0000000002040000ull, 0x2008158000000000ull, 0x0080000000041004ull, 0x0000000000000004ull, + 0x0410040300000000ull, 0x4021490000010050ull, 0x0000008000000800ull, 0x0000000000000000ull, + 0x1405004100403000ull, 0x0000200000201480ull, 0x0000000000000408ull, 0x8200840102B00000ull, + 0x0000000400000000ull, 0x8000000000000000ull, 0x0000802802080201ull, 0x0000004002010A24ull, + 0x0000000000000020ull, 0x40100C0000000000ull, 0x0000000201014010ull, 0x0000101220100000ull, + 0x084B000000000000ull, 0x4088802401080420ull, 0x0000000000000000ull, 0x002004201080212Cull, + 0x24442082A4000044ull, 0xB1A048B413482450ull, 0x502001000000800Aull, 0x8004003450140280ull, + 0x5500501002001000ull, 0x0000800CA00A5005ull, 0x5014028050200100ull, 0x0200100080040034ull, + 0xA00A500555005010ull, 0x4AA42A214000800Cull, 0x0002425400008000ull, 0x0008004000000000ull, + 0x1004100080208004ull, 0x0680402010010080ull, 0x0101008114008000ull, 0x0010004028818200ull, + 0x9008800100028041ull, 0x0000000020100000ull, 0x0034100418000000ull, 0x000000000000A004ull, + 0x6202004000000001ull, 0x0089010811000021ull, 0x8800000010010010ull, 0x4000800000002002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0046[64] = { + 1u, 15u, 23u, 26u, 35u, 41u, 44u, 55u, 55u, 62u, 66u, 71u, 82u, 82u, 89u, 90u, + 96u, 98u, 104u, 108u, 109u, 114u, 123u, 125u, 125u, 134u, 139u, 141u, 150u, 151u, 152u, 159u, + 166u, 167u, 171u, 176u, 181u, 186u, 196u, 196u, 206u, 218u, 239u, 246u, 257u, 266u, 277u, 287u, + 294u, 309u, 324u, 331u, 333u, 340u, 348u, 355u, 363u, 372u, 374u, 381u, 384u, 390u, 399u, 404u, }; void recomp_unit_0046_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +50,25 @@ void recomp_unit_0046_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088BC000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0046[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0046[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0046[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088BC000; @@ -659,7 +566,6 @@ L_088BC0D0: goto L_088BC0D4; L_088BC0D4: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 785u, 0x088BBF48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -670,7 +576,6 @@ L_088BC0DC: goto L_088BC0E0; L_088BC0E0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088BC0F0; } @@ -701,7 +606,17 @@ L_088BC0F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BC128: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -709,12 +624,10 @@ L_088BC128: ctx.gpr[17] = (aot_gpr_5 | 0u); ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x088BC148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 620u, 0x088BAF70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BC148u) goto L_088BC148; AOT_REGCACHE_SYNC_OUT(); return; L_088BC148: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BC3A8; } @@ -864,7 +777,6 @@ L_088BC264: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BC398; } @@ -928,7 +840,17 @@ L_088BC3A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BC3BC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 ^ aot_gpr_5); @@ -937,7 +859,17 @@ L_088BC3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BC3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { std::uint32_t aot_run_words[3]{}; @@ -993,7 +925,6 @@ L_088BC3CC: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BC550; } @@ -1111,7 +1042,6 @@ L_088BC550: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BC6AC; } @@ -1188,7 +1118,6 @@ L_088BC694: goto L_088BC6AC; L_088BC6AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BC6B4; } @@ -1200,7 +1129,17 @@ L_088BC6B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BC6BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_8 = (aot_gpr_6 | 0u); @@ -1290,7 +1229,6 @@ L_088BC6BC: aot_gpr_5 = (aot_gpr_5 + aot_gpr_8); aot_gpr_5 = (aot_gpr_5 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088BC8B4; } @@ -1367,7 +1305,17 @@ L_088BC8B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BC8DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { std::uint32_t aot_run_words[3]{}; @@ -1434,7 +1382,6 @@ L_088BC8DC: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BCA80; } @@ -1554,7 +1501,6 @@ L_088BCA80: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088BCBCC; } @@ -1630,7 +1576,6 @@ L_088BCBB4: goto L_088BCBCC; L_088BCBCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BCBD4; } @@ -1642,7 +1587,17 @@ L_088BCBD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BCBDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_8 = (aot_gpr_7 | 0u); @@ -1732,7 +1687,6 @@ L_088BCBDC: aot_gpr_7 = (aot_gpr_7 + aot_gpr_8); aot_gpr_7 = (aot_gpr_7 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_7) <= 0; - // nop if (branch_taken) { goto L_088BCDDC; } @@ -1809,7 +1763,17 @@ L_088BCDDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BCE04: aot_gpr_29 = (aot_gpr_29 + static_cast(-1360)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[31]}; @@ -2286,7 +2250,6 @@ L_088BD308: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088BD518; } @@ -2360,7 +2323,6 @@ L_088BD518: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(192), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BD8E8; } @@ -2589,7 +2551,6 @@ L_088BD69C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088BD8C8; } @@ -2665,7 +2626,6 @@ L_088BD8C8: goto L_088BD8E8; L_088BD8E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BE260; } @@ -3048,7 +3008,6 @@ L_088BDC88: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088BDE94; } @@ -3122,7 +3081,6 @@ L_088BDE94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(420), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BE260; } @@ -3158,7 +3116,6 @@ L_088BDEBC: L_088BDF08: ctx.gpr[11] = (static_cast(ctx.gpr[9]) < 64 ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_088BDF24; } @@ -3347,7 +3304,6 @@ L_088BE014: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088BE240; } @@ -3437,7 +3393,17 @@ L_088BE260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BE284: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(420), ctx.gpr[16]); @@ -3601,7 +3567,6 @@ L_088BE3B0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088BE560; } @@ -3687,7 +3652,6 @@ L_088BE560: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(12), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BE808; } @@ -3807,7 +3771,6 @@ L_088BE5F8: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088BE7A8; } @@ -3894,7 +3857,6 @@ L_088BE7A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BE808; } @@ -3923,7 +3885,17 @@ L_088BE808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BE818: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -4044,7 +4016,6 @@ L_088BE918: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_8 = (0u | 1u); { const bool branch_taken = aot_gpr_7 != aot_gpr_8; - // nop if (branch_taken) { goto L_088BE958; } @@ -4053,7 +4024,6 @@ L_088BE918: L_088BE928: aot_gpr_7 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BE94C; } @@ -4115,7 +4085,6 @@ L_088BE990: goto L_088BE994; L_088BE994: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088BE9E0; } @@ -4181,7 +4150,6 @@ L_088BE9F4: } L_088BE9FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BEA0C; } @@ -4189,7 +4157,6 @@ L_088BE9FC: } L_088BEA04: ctx.gpr[31] = (0x088BEA0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_8, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BEA0Cu) goto L_088BEA0C; AOT_REGCACHE_SYNC_OUT(); return; L_088BEA0C: @@ -4210,7 +4177,17 @@ L_088BEA0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BEA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4329,7 +4306,6 @@ L_088BEB78: ctx.gpr[16] = (ctx.gpr[16] + static_cast(56)); ctx.gpr[20] = (ctx.gpr[20] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[20]) > 0; - // nop if (branch_taken) { goto L_088BEAD4; } @@ -4451,7 +4427,6 @@ L_088BEC90: } L_088BECB0: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088BECE8; } @@ -4474,7 +4449,6 @@ L_088BECB8: AOT_REGCACHE_SYNC_OUT(); return; L_088BECE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BECF0; } @@ -4506,7 +4480,6 @@ L_088BECF8: } L_088BED00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BECE8; } @@ -4529,7 +4502,6 @@ L_088BED08: AOT_REGCACHE_SYNC_OUT(); return; L_088BED30: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BED44; } @@ -4538,7 +4510,6 @@ L_088BED30: L_088BED38: ctx.gpr[16] = (ctx.gpr[16] + static_cast(56)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BED4C; } @@ -4569,7 +4540,6 @@ L_088BED4C: AOT_REGCACHE_SYNC_OUT(); return; L_088BED74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BED88; } @@ -4578,7 +4548,6 @@ L_088BED74: L_088BED7C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(56)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BECB8; } @@ -4606,7 +4575,17 @@ L_088BED8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BEDBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4725,7 +4704,6 @@ L_088BEEF8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(56)); ctx.gpr[20] = (ctx.gpr[20] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[20]) > 0; - // nop if (branch_taken) { goto L_088BEE54; } @@ -4847,7 +4825,6 @@ L_088BF010: } L_088BF030: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088BF068; } @@ -4870,7 +4847,6 @@ L_088BF038: AOT_REGCACHE_SYNC_OUT(); return; L_088BF060: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BF070; } @@ -4902,7 +4878,6 @@ L_088BF078: } L_088BF080: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BF068; } @@ -4925,7 +4900,6 @@ L_088BF088: AOT_REGCACHE_SYNC_OUT(); return; L_088BF0B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BF0C4; } @@ -4934,7 +4908,6 @@ L_088BF0B0: L_088BF0B8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(56)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BF0CC; } @@ -4965,7 +4938,6 @@ L_088BF0CC: AOT_REGCACHE_SYNC_OUT(); return; L_088BF0F4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088BF108; } @@ -4974,7 +4946,6 @@ L_088BF0F4: L_088BF0FC: ctx.gpr[16] = (ctx.gpr[16] + static_cast(56)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BF038; } @@ -5002,7 +4973,17 @@ L_088BF10C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088BF13C: aot_gpr_29 = (aot_gpr_29 + static_cast(-2656)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -5018,7 +4999,6 @@ L_088BF13C: } L_088BF178: ctx.gpr[31] = (0x088BF180u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088BF180u) goto L_088BF180; AOT_REGCACHE_SYNC_OUT(); return; L_088BF180: @@ -5048,7 +5028,6 @@ L_088BF1A4: goto L_088BF1AC; L_088BF1AC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088BF1E4; } @@ -5059,7 +5038,6 @@ L_088BF1B4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BF1DC; } @@ -5068,7 +5046,6 @@ L_088BF1B4: L_088BF1C8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2592), ctx.gpr[16]); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088BF1EC; } @@ -5076,7 +5053,6 @@ L_088BF1C8: } L_088BF1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BF1F8; } @@ -5084,7 +5060,6 @@ L_088BF1D4: } L_088BF1DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0047_entry, 47u, 55u, 0x088C0590u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5092,7 +5067,6 @@ L_088BF1DC: } L_088BF1E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0047_entry, 47u, 55u, 0x088C0590u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5121,7 +5095,6 @@ L_088BF1F8: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(4), aot_gpr_4); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_088BF290; } @@ -5160,7 +5133,6 @@ L_088BF288: } L_088BF290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0047_entry, 47u, 55u, 0x088C0590u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5292,7 +5264,6 @@ L_088BF408: aot_gpr_7 = (static_cast(aot_gpr_7) < 0 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BF47C; } @@ -5304,7 +5275,6 @@ L_088BF43C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2164), aot_gpr_7); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2172))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088BF5DC; } @@ -5339,7 +5309,6 @@ L_088BF47C: aot_gpr_7 = (static_cast(aot_gpr_7) < 0 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BF4F0; } @@ -5351,7 +5320,6 @@ L_088BF4B0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2180), aot_gpr_7); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2188))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088BF5DC; } @@ -5439,7 +5407,6 @@ L_088BF594: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2180), aot_gpr_7); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2188))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088BF5DC; } @@ -5510,7 +5477,6 @@ L_088BF63C: } L_088BF668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088BF680; } @@ -5520,7 +5486,6 @@ L_088BF670: ctx.gpr[9] = (ctx.gpr[9] + static_cast(56)); aot_gpr_7 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(16))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_7; - // nop if (branch_taken) { goto L_088BF2C4; } @@ -5533,7 +5498,6 @@ L_088BF680: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088BF974; } @@ -5581,7 +5545,6 @@ L_088BF6E0: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_5) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088BF75C; } @@ -5609,7 +5572,6 @@ L_088BF740: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); aot_gpr_7 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); { const bool branch_taken = aot_gpr_5 != aot_gpr_7; - // nop if (branch_taken) { goto L_088BF740; } @@ -5654,7 +5616,6 @@ L_088BF798: ctx.gpr[9] = (0u < ctx.gpr[9] ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088BF844; } @@ -5672,7 +5633,6 @@ L_088BF7D0: ctx.gpr[9] = (static_cast(ctx.gpr[9]) < 0 ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088BF844; } @@ -5684,7 +5644,6 @@ L_088BF800: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2292), ctx.gpr[9]); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2300))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088BF83C; } @@ -5804,7 +5763,6 @@ L_088BF950: aot_gpr_5 = (aot_gpr_5 + static_cast(56)); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(16))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_088BF774; } @@ -5872,7 +5830,6 @@ L_088BF974: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088BFAC8; } @@ -5936,7 +5893,6 @@ L_088BFAD4: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(2072), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BFB3C; } @@ -5953,7 +5909,6 @@ L_088BFB08: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BFB3C; } @@ -6012,7 +5967,6 @@ L_088BFB3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(48))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088BFC98; } @@ -6056,7 +6010,6 @@ L_088BFC00: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088BFC00; } @@ -6073,7 +6026,6 @@ L_088BFC98: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 2u)); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088BFCE4; } @@ -6160,7 +6112,6 @@ L_088BFD70: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0047_entry, 47u, 13u, 0x088C0178u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6171,7 +6122,6 @@ L_088BFD8C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0047_entry, 47u, 13u, 0x088C0178u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6218,7 +6168,6 @@ L_088BFDDC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088BFE70; } @@ -6236,7 +6185,6 @@ L_088BFE10: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088BFE70; } @@ -6254,7 +6202,6 @@ L_088BFE40: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0047_entry, 47u, 2u, 0x088C0014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6300,7 +6247,6 @@ L_088BFEEC: aot_gpr_4 = (ctx.gpr[2] & 255u); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(2)))))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088BFF04; } @@ -6322,7 +6268,6 @@ L_088BFF04: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088BFFBC; } diff --git a/profiles/vcs/generated/generated_unit_0047.cpp b/profiles/vcs/generated/generated_unit_0047.cpp index 4f0e7ae..63d79c0 100644 --- a/profiles/vcs/generated/generated_unit_0047.cpp +++ b/profiles/vcs/generated/generated_unit_0047.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0047[4095] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 5, 0, 6, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 32, 0, 0, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, - 0, 41, 0, 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 50, 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, - 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, - 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 76, 0, 77, - 0, 78, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 84, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, - 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 117, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 120, - 0, 121, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, - 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 0, 0, 130, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 136, 0, 0, 0, 0, 137, 0, 138, - 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 0, 142, 0, 143, 144, 0, 145, 0, 0, 146, 0, 0, 147, 0, 148, 149, 0, 150, 0, - 0, 151, 0, 0, 152, 0, 153, 154, 0, 155, 0, 0, 156, 0, 0, 157, 0, 158, 159, 0, 160, 0, 0, 161, 0, 0, 162, 0, 163, 164, 0, 165, - 0, 0, 166, 0, 0, 167, 0, 168, 169, 0, 170, 0, 0, 171, 0, 0, 172, 0, 173, 174, 0, 175, 0, 0, 176, 0, 0, 177, 0, 178, 179, 0, - 180, 0, 0, 181, 0, 0, 182, 0, 183, 184, 0, 185, 0, 0, 186, 0, 0, 187, 0, 188, 189, 0, 190, 0, 0, 191, 0, 0, 192, 0, 193, 194, - 0, 195, 0, 0, 196, 0, 0, 197, 0, 198, 199, 0, 200, 0, 0, 201, 0, 0, 202, 0, 203, 204, 0, 205, 0, 206, 0, 0, 0, 0, 0, 0, - 0, 207, 0, 208, 0, 0, 0, 0, 0, 209, 0, 0, 0, 210, 0, 211, 0, 212, 213, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 223, - 0, 0, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 227, 0, 228, 229, 0, 0, 230, 0, 231, 0, 0, 0, 0, 232, - 0, 0, 233, 0, 0, 234, 0, 235, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 256, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, - 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 327, 0, 328, 0, 0, 329, 0, 330, 0, 0, 331, 0, 332, 0, - 0, 333, 0, 334, 0, 0, 335, 0, 336, 0, 0, 337, 0, 338, 0, 0, 339, 0, 340, 0, 0, 341, 0, 342, 0, 0, 343, 0, 344, 0, 0, 345, - 0, 346, 0, 0, 347, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 353, 0, 354, 0, 355, - 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, - 362, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 368, 0, 369, 0, 0, - 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 379, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, - 0, 0, 0, 384, 0, 0, 385, 386, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, - 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 395, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 400, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 405, 0, - 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, - 0, 411, 412, 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, - 0, 426, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, - 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, 0, 433, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, - 0, 0, 437, 0, 0, 0, 0, 438, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, - 0, 445, 446, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 449, 0, 450, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 455, 456, 0, 0, 0, 457, 0, - 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, 464, 0, 0, 465, 0, 466, 0, 0, 0, 467, 0, 468, 0, - 469, 0, 470, 0, 0, 0, 0, 0, 0, 471, 472, 0, 473, 0, 0, 474, 0, 475, 0, 476, 0, 477, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 483, 0, 484, 0, 0, 0, 0, 485, - 0, 0, 0, 486, 0, 487, 0, 488, 0, 489, 0, 0, 490, 0, 0, 491, 492, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 494, 0, 0, 495, 0, 496, 0, 497, 0, 498, 0, 0, 499, 0, 500, 0, 501, 0, 0, 502, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, - 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, - 510, 0, 511, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 514, 0, 515, 0, 0, 516, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 519, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 521, 0, 522, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, - 0, 527, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 531, 0, 532, 0, 533, 0, 0, 534, 0, 535, 0, 0, 0, 536, 0, - 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 539, - 0, 0, 540, 0, 541, 0, 0, 542, 0, 543, 0, 544, 0, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, 0, 547, 0, 548, 0, 0, 0, 549, - 0, 0, 0, 0, 0, 550, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 557, 0, 0, - 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, - 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 568, - 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 576, - 0, 577, 0, 0, 0, 578, 0, 0, 0, 0, 579, 0, 580, 0, 581, 0, 0, 0, 0, 582, 0, 583, 0, 0, 0, 0, 584, 0, 0, 0, 585, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0047[64] = { + 0x0029448000000021ull, 0x0001420448080220ull, 0x0240080142000000ull, 0x8011980801213010ull, + 0x2002450A20002440ull, 0x0001001028102460ull, 0x0A800002E011510Aull, 0x0A800056A9008028ull, + 0x0802A10020000400ull, 0x0A49002000008100ull, 0x0000020000800000ull, 0x0010100101008000ull, + 0x0808008080080804ull, 0x884000000C008080ull, 0x100800100024000Aull, 0xA181200000212048ull, + 0xB49692D25A4B4904ull, 0xD25A4B49692D25A4ull, 0x0016A20A02B49692ull, 0x9048200000084021ull, + 0x084041A485348120ull, 0x02452A2010200000ull, 0x0008009002809048ull, 0x4004042008080842ull, + 0x0000000000001200ull, 0x0010401020000000ull, 0x0002048200000000ull, 0x0000000000000000ull, + 0x0004100000000000ull, 0x0801040000000000ull, 0x0000000000004000ull, 0x0000800010800000ull, + 0x0000000000000100ull, 0x0000400008001040ull, 0x8200000000000000ull, 0x0000001000000800ull, + 0x1001040000000000ull, 0x0000000000040000ull, 0x0000100041000000ull, 0x0000000000000020ull, + 0x0080000200020800ull, 0x0001000104000000ull, 0x0200104000000001ull, 0x4000820000000040ull, + 0x0100000000000100ull, 0x5294A01000002208ull, 0xAA24025294A5294Aull, 0x2920209110940108ull, + 0xA012255002400828ull, 0x020C8000000008C8ull, 0x0883200000000001ull, 0x11001021508B1400ull, + 0x1429222002042846ull, 0x4058441048000102ull, 0x0041442611140584ull, 0x0101002146220004ull, + 0x006A9605514C0800ull, 0x010192A885222001ull, 0x028A400810254AA4ull, 0x5028A4004114A425ull, + 0x80800020452A4242ull, 0x224054A08A280A94ull, 0x8200400402844144ull, 0x44285422A1108502ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0047[64] = { + 1u, 9u, 18u, 24u, 37u, 48u, 57u, 71u, 85u, 92u, 100u, 102u, 107u, 114u, 121u, 128u, + 139u, 166u, 195u, 215u, 224u, 240u, 250u, 259u, 268u, 270u, 274u, 278u, 278u, 280u, 283u, 284u, + 287u, 288u, 292u, 294u, 296u, 299u, 300u, 303u, 304u, 308u, 311u, 315u, 319u, 321u, 333u, 356u, + 370u, 384u, 392u, 398u, 411u, 426u, 437u, 452u, 462u, 479u, 494u, 510u, 527u, 540u, 558u, 569u, }; void recomp_unit_0047_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0047_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088C0000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0047[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0047[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0047[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088C0000; @@ -761,7 +668,6 @@ L_088C0000: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(2430)))))); aot_mem.aot_direct_store16(ctx.gpr[19] + static_cast(0), static_cast(aot_gpr_5)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C00B8; } @@ -809,7 +715,6 @@ L_088C0014: L_088C009C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C00B8; } @@ -823,7 +728,6 @@ L_088C00A8: goto L_088C00B8; L_088C00B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C00D4; } @@ -863,7 +767,6 @@ L_088C0114: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(18))); aot_gpr_4 = (aot_gpr_4 < static_cast(1025) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C0178; } @@ -902,7 +805,6 @@ L_088C0178: ctx.gpr[22] = (ctx.gpr[22] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(28))); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0046_entry, 46u, 392u, 0x088BFD60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -915,7 +817,6 @@ L_088C0188: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C04A8; } @@ -977,7 +878,6 @@ L_088C01C0: aot_mem.aot_direct_store8(ctx.gpr[7] + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_16 + static_cast(8)); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C0278; } @@ -992,7 +892,6 @@ L_088C0264: goto L_088C0278; L_088C0278: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C0340; } @@ -1009,7 +908,6 @@ L_088C0280: aot_gpr_5 = (static_cast(aot_gpr_5) < 0 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C0340; } @@ -1026,7 +924,6 @@ L_088C02AC: aot_gpr_5 = (static_cast(aot_gpr_5) < 0 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C0340; } @@ -1050,7 +947,6 @@ L_088C02E4: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 3u)); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_088C0330; } @@ -1087,7 +983,6 @@ L_088C0340: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(100))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C03BC; } @@ -1111,7 +1006,6 @@ L_088C0360: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 3u)); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_088C03AC; } @@ -1150,7 +1044,6 @@ L_088C03C0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(18))); aot_gpr_4 = (aot_gpr_4 < static_cast(1025) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C0428; } @@ -1189,7 +1082,6 @@ L_088C0418: L_088C0428: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_088C01C0; } @@ -1211,7 +1103,6 @@ L_088C0434: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C048C; } @@ -1226,7 +1117,6 @@ L_088C0474: AOT_REGCACHE_SYNC_OUT(); return; L_088C0484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C0528; } @@ -1242,7 +1132,6 @@ L_088C048C: AOT_REGCACHE_SYNC_OUT(); return; L_088C04A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C0528; } @@ -1277,7 +1166,6 @@ L_088C04C4: ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[9]); ctx.gpr[8] = (static_cast(static_cast(ctx.gpr[8]) >> 3u)); { const bool branch_taken = static_cast(ctx.gpr[8]) <= 0; - // nop if (branch_taken) { goto L_088C0514; } @@ -1304,7 +1192,6 @@ L_088C0518: aot_gpr_6 = (aot_gpr_6 + static_cast(-8)); aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(40), aot_gpr_6); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C04B8; } @@ -1313,7 +1200,6 @@ L_088C0518: L_088C0528: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2592))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C0590; } @@ -1326,7 +1212,6 @@ L_088C0534: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0590; } @@ -1339,7 +1224,6 @@ L_088C0550: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0590; } @@ -1347,7 +1231,6 @@ L_088C0550: } L_088C056C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088C0590; } @@ -1384,7 +1267,17 @@ L_088C0590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C05C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1402,7 +1295,6 @@ L_088C05C0: } L_088C0604: aot_gpr_31 = (0x088C060Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C060Cu) goto L_088C060C; AOT_REGCACHE_SYNC_OUT(); return; L_088C060C: @@ -1471,7 +1363,6 @@ L_088C0678: goto L_088C067C; L_088C067C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C06E4; } @@ -1499,7 +1390,6 @@ L_088C0684: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[19] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C06EC; } @@ -1507,7 +1397,6 @@ L_088C0684: } L_088C06DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C073C; } @@ -1515,7 +1404,6 @@ L_088C06DC: } L_088C06E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -1529,7 +1417,6 @@ L_088C06EC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088C0714; } @@ -1537,7 +1424,6 @@ L_088C06EC: } L_088C070C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C073C; } @@ -1553,7 +1439,6 @@ L_088C0714: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[19] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C06EC; } @@ -1568,7 +1453,6 @@ L_088C073C: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[19] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0774; } @@ -1577,7 +1461,6 @@ L_088C073C: L_088C0760: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C077C; } @@ -1593,7 +1476,6 @@ L_088C076C: } L_088C0774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -1601,7 +1483,6 @@ L_088C0774: } L_088C077C: aot_gpr_31 = (0x088C0784u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C0784u) goto L_088C0784; AOT_REGCACHE_SYNC_OUT(); return; L_088C0784: @@ -1614,7 +1495,6 @@ L_088C0788: AOT_REGCACHE_SYNC_OUT(); return; L_088C0790: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C07E4; } @@ -1637,7 +1517,6 @@ L_088C0798: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C07EC; } @@ -1645,7 +1524,6 @@ L_088C0798: } L_088C07DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C0828; } @@ -1653,7 +1531,6 @@ L_088C07DC: } L_088C07E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -1695,7 +1572,6 @@ L_088C0828: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C08BC; } @@ -1712,7 +1588,6 @@ L_088C0874: aot_gpr_6 = (aot_gpr_6 << (aot_gpr_4 & 31u)); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C08BC; } @@ -1723,7 +1598,6 @@ L_088C08A0: aot_gpr_5 = (aot_gpr_5 & 128u); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C08C4; } @@ -1731,7 +1605,6 @@ L_088C08A0: } L_088C08B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C08EC; } @@ -1739,7 +1612,6 @@ L_088C08B4: } L_088C08BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -1770,7 +1642,6 @@ L_088C08EC: aot_gpr_6 = (aot_gpr_6 | ctx.gpr[7]); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_6); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C0E54; } @@ -1811,7 +1682,6 @@ L_088C093C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088C0E48; } @@ -2022,7 +1892,6 @@ L_088C0BD0: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0D68; } @@ -2184,7 +2053,6 @@ L_088C0D6C: aot_gpr_4 = (aot_gpr_4 + static_cast(-64)); aot_gpr_4 = (aot_gpr_4 < static_cast(31) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C0E0C; } @@ -2195,7 +2063,6 @@ L_088C0DD8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_gpr_5 = (aot_gpr_5 + static_cast(-2)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C0DFC; } @@ -2266,7 +2133,6 @@ L_088C0E54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C1570; } @@ -2287,7 +2153,6 @@ L_088C0E90: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (ctx.gpr[20] & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C1468; } @@ -2302,7 +2167,6 @@ L_088C0ECC: ctx.gpr[23] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); aot_gpr_4 = (0u | 255u); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088C0F40; } @@ -2321,7 +2185,6 @@ L_088C0EF0: L_088C0F0C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088C0F34; } @@ -2342,7 +2205,6 @@ L_088C0F18: L_088C0F34: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-4784), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1554; } @@ -2353,7 +2215,6 @@ L_088C0F40: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (ctx.gpr[23] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0FE0; } @@ -2389,7 +2250,6 @@ L_088C0F54: L_088C0FB4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0FDC; } @@ -2420,7 +2280,6 @@ L_088C0FE0: AOT_REGCACHE_SYNC_OUT(); return; L_088C0FF4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C1468; } @@ -2429,7 +2288,6 @@ L_088C0FF4: L_088C0FFC: aot_gpr_4 = (ctx.gpr[23] < static_cast(13) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C125C; } @@ -2441,11 +2299,20 @@ L_088C1008: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[23]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21792))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C1020: ctx.gpr[23] = (0u | 0u); aot_gpr_31 = (0x088C102Cu); @@ -2455,7 +2322,6 @@ L_088C1020: L_088C102C: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C1044; } @@ -2471,7 +2337,6 @@ L_088C1040: goto L_088C1044; L_088C1044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2486,7 +2351,6 @@ L_088C104C: L_088C1058: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C1070; } @@ -2502,7 +2366,6 @@ L_088C106C: goto L_088C1070; L_088C1070: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2517,7 +2380,6 @@ L_088C1078: L_088C1084: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C109C; } @@ -2533,7 +2395,6 @@ L_088C1098: goto L_088C109C; L_088C109C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2548,7 +2409,6 @@ L_088C10A4: L_088C10B0: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C10C8; } @@ -2564,7 +2424,6 @@ L_088C10C4: goto L_088C10C8; L_088C10C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2579,7 +2438,6 @@ L_088C10D0: L_088C10DC: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C10F4; } @@ -2595,7 +2453,6 @@ L_088C10F0: goto L_088C10F4; L_088C10F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2610,7 +2467,6 @@ L_088C10FC: L_088C1108: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C1120; } @@ -2626,7 +2482,6 @@ L_088C111C: goto L_088C1120; L_088C1120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2641,7 +2496,6 @@ L_088C1128: L_088C1134: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C114C; } @@ -2657,7 +2511,6 @@ L_088C1148: goto L_088C114C; L_088C114C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2672,7 +2525,6 @@ L_088C1154: L_088C1160: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C1178; } @@ -2688,7 +2540,6 @@ L_088C1174: goto L_088C1178; L_088C1178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2703,7 +2554,6 @@ L_088C1180: L_088C118C: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C11A4; } @@ -2719,7 +2569,6 @@ L_088C11A0: goto L_088C11A4; L_088C11A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2734,7 +2583,6 @@ L_088C11AC: L_088C11B8: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C11D0; } @@ -2750,7 +2598,6 @@ L_088C11CC: goto L_088C11D0; L_088C11D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2765,7 +2612,6 @@ L_088C11D8: L_088C11E4: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C11FC; } @@ -2781,7 +2627,6 @@ L_088C11F8: goto L_088C11FC; L_088C11FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2796,7 +2641,6 @@ L_088C1204: L_088C1210: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C1228; } @@ -2812,7 +2656,6 @@ L_088C1224: goto L_088C1228; L_088C1228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2827,7 +2670,6 @@ L_088C1230: L_088C123C: ctx.gpr[30] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088C1254; } @@ -2843,7 +2685,6 @@ L_088C1250: goto L_088C1254; L_088C1254: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1264; } @@ -2851,7 +2692,6 @@ L_088C1254: } L_088C125C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -2917,7 +2757,6 @@ L_088C12C4: goto L_088C12C8; L_088C12C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C1300; } @@ -3013,7 +2852,6 @@ L_088C13B4: L_088C13CC: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088C1420; } @@ -3033,7 +2871,6 @@ L_088C13D8: L_088C13F0: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088C1420; } @@ -3053,7 +2890,6 @@ L_088C13FC: L_088C1414: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088C1460; } @@ -3066,7 +2902,6 @@ L_088C1420: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C1460; } @@ -3081,7 +2916,6 @@ L_088C143C: goto L_088C1448; L_088C1448: aot_gpr_31 = (0x088C1450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C1450u) goto L_088C1450; AOT_REGCACHE_SYNC_OUT(); return; L_088C1450: @@ -3095,7 +2929,6 @@ L_088C1454: AOT_REGCACHE_SYNC_OUT(); return; L_088C1460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C1554; } @@ -3112,7 +2945,6 @@ L_088C1468: L_088C147C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088C14B8; } @@ -3127,7 +2959,6 @@ L_088C1488: goto L_088C1494; L_088C1494: aot_gpr_31 = (0x088C149Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C149Cu) goto L_088C149C; AOT_REGCACHE_SYNC_OUT(); return; L_088C149C: @@ -3139,7 +2970,6 @@ L_088C14A0: aot_gpr_5 = (aot_gpr_5 | 1u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -3204,7 +3034,6 @@ L_088C1554: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C0E90; } @@ -3219,7 +3048,6 @@ L_088C1570: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088C15AC; } @@ -3229,7 +3057,6 @@ L_088C1594: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C15B4; } @@ -3237,7 +3064,6 @@ L_088C1594: } L_088C15A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C15D8; } @@ -3245,7 +3071,6 @@ L_088C15A4: } L_088C15AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -3254,7 +3079,6 @@ L_088C15AC: L_088C15B4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088C15C8; } @@ -3262,7 +3086,6 @@ L_088C15B4: } L_088C15C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C15D8; } @@ -3272,7 +3095,6 @@ L_088C15C8: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C15B4; } @@ -3281,7 +3103,6 @@ L_088C15C8: L_088C15D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C1664; } @@ -3297,7 +3118,6 @@ L_088C15E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C163C; } @@ -3340,7 +3160,6 @@ L_088C163C: AOT_REGCACHE_SYNC_OUT(); return; L_088C165C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -3357,7 +3176,6 @@ L_088C1664: aot_gpr_5 = (static_cast(aot_gpr_5) < 0 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C169C; } @@ -3387,7 +3205,17 @@ L_088C169C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C16CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3436,7 +3264,17 @@ L_088C172C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C174C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3470,7 +3308,17 @@ L_088C1794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C17A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3498,7 +3346,17 @@ L_088C17C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C17F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -3520,7 +3378,17 @@ L_088C1824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C1830: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_4 = (2236u << 16u); @@ -5016,7 +4884,6 @@ L_088C2C20: aot_fpr_12 = aot_fpr_14 - ctx.fpr[15]; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_088C2CE0; @@ -5082,7 +4949,17 @@ L_088C2D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C2D90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -5228,7 +5105,17 @@ L_088C2E98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C2EA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -5247,7 +5134,6 @@ L_088C2EA4: L_088C2EC8: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C2EEC; } @@ -5262,7 +5148,6 @@ L_088C2ED4: AOT_REGCACHE_SYNC_OUT(); return; L_088C2EE4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C2EFC; } @@ -5278,7 +5163,6 @@ L_088C2EEC: } L_088C2EF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C2F0C; } @@ -5302,7 +5186,17 @@ L_088C2F0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C2F20: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -5377,7 +5271,17 @@ L_088C2F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C2FB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5386,7 +5290,6 @@ L_088C2FB4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C2FE0; } @@ -5395,7 +5298,6 @@ L_088C2FB4: L_088C2FD4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C2FF4; } @@ -5410,7 +5312,6 @@ L_088C2FE0: goto L_088C2FEC; L_088C2FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C311C; } @@ -5427,7 +5328,6 @@ L_088C2FF4: AOT_REGCACHE_SYNC_OUT(); return; L_088C300C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C311C; } @@ -5461,7 +5361,6 @@ L_088C302C: L_088C3058: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(50))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C3098; } @@ -5478,7 +5377,6 @@ L_088C3064: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C30A8; } @@ -5486,7 +5384,6 @@ L_088C3064: } L_088C3090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C30B4; } @@ -5499,7 +5396,6 @@ L_088C3098: AOT_REGCACHE_SYNC_OUT(); return; L_088C30A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C311C; } @@ -5514,7 +5410,6 @@ L_088C30B4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(12))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C30FC; } @@ -5542,7 +5437,6 @@ L_088C30D0: goto L_088C30F4; L_088C30F4: { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_088C3118; } @@ -5571,7 +5465,17 @@ L_088C311C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C312C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5608,7 +5512,6 @@ L_088C312C: aot_gpr_5 = (aot_gpr_5 - aot_gpr_4); aot_gpr_5 = (static_cast(aot_gpr_5) < 25 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C31CC; } @@ -5643,7 +5546,17 @@ L_088C31E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5689,7 +5602,6 @@ L_088C3200: aot_gpr_5 = (aot_gpr_5 - aot_gpr_4); aot_gpr_5 = (static_cast(aot_gpr_5) < 33 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C32C4; } @@ -5721,7 +5633,17 @@ L_088C32DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C32EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -5763,7 +5685,6 @@ L_088C3340: goto L_088C3344; L_088C3344: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C3378; } @@ -5773,7 +5694,6 @@ L_088C334C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C3380; } @@ -5823,7 +5743,17 @@ L_088C3394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C33B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -5841,7 +5771,6 @@ L_088C33E0: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C3408; } @@ -5862,7 +5791,6 @@ L_088C3408: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C3434; } @@ -5904,7 +5832,17 @@ L_088C3448: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3464: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -5933,7 +5871,6 @@ L_088C34A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C34F0; } @@ -5948,7 +5885,6 @@ L_088C34B4: L_088C34C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C34D4; } @@ -5956,7 +5892,6 @@ L_088C34C0: } L_088C34CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3504; } @@ -5971,7 +5906,6 @@ L_088C34D4: goto L_088C32EC; L_088C34E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3504; } @@ -5998,7 +5932,17 @@ L_088C3504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3520: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -6019,7 +5963,6 @@ L_088C3520: L_088C356C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088C3650; } @@ -6069,7 +6012,6 @@ L_088C35CC: goto L_088C35D0; L_088C35D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C3648; } @@ -6112,7 +6054,6 @@ L_088C361C: goto L_088C3620; L_088C3620: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C3648; } @@ -6134,7 +6075,6 @@ L_088C3628: } L_088C3648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3688; } @@ -6151,7 +6091,6 @@ L_088C3660: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C3688; } @@ -6171,7 +6110,6 @@ L_088C3684: L_088C3688: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088C36C0; } @@ -6182,7 +6120,6 @@ L_088C3694: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C356C; } @@ -6197,7 +6134,6 @@ L_088C36A8: AOT_REGCACHE_SYNC_OUT(); return; L_088C36B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C36D8; } @@ -6230,7 +6166,17 @@ L_088C36D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3708: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -6252,7 +6198,6 @@ L_088C3744: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C3768; } @@ -6272,7 +6217,6 @@ L_088C3768: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088C3780; } @@ -6321,7 +6265,17 @@ L_088C37C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C37E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[21]); @@ -6363,7 +6317,6 @@ L_088C3848: L_088C384C: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088C3880; } @@ -6371,7 +6324,6 @@ L_088C384C: } L_088C3858: { const bool branch_taken = ctx.gpr[22] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088C3878; } @@ -6389,7 +6341,6 @@ L_088C3860: } L_088C3870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C38A8; } @@ -6426,7 +6377,6 @@ L_088C38A4: goto L_088C38A8; L_088C38A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C38CC; } @@ -6440,7 +6390,6 @@ L_088C38B0: AOT_REGCACHE_SYNC_OUT(); return; L_088C38BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C38D4; } @@ -6482,7 +6431,17 @@ L_088C38D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3900: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -6502,7 +6461,6 @@ L_088C3934: ctx.gpr[19] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C399C; } @@ -6523,7 +6481,6 @@ L_088C3954: AOT_REGCACHE_SYNC_OUT(); return; L_088C3960: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C3994; } @@ -6548,7 +6505,6 @@ L_088C397C: } L_088C398C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C39C0; } @@ -6580,7 +6536,6 @@ L_088C39A4: L_088C39B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C39C0; } @@ -6604,7 +6559,17 @@ L_088C39C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C39E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6625,7 +6590,6 @@ L_088C3A08: AOT_REGCACHE_SYNC_OUT(); return; L_088C3A14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C3A24; } @@ -6633,7 +6597,6 @@ L_088C3A14: } L_088C3A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3A70; } @@ -6647,7 +6610,6 @@ L_088C3A24: L_088C3A2C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_088C3A48; } @@ -6655,7 +6617,6 @@ L_088C3A2C: } L_088C3A38: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088C3A54; } @@ -6685,7 +6646,6 @@ L_088C3A54: ctx.gpr[17] = (ctx.gpr[17] + aot_gpr_4); aot_gpr_16 = (aot_gpr_16 - aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3A08; } @@ -6705,7 +6665,17 @@ L_088C3A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6726,7 +6696,6 @@ L_088C3A8C: L_088C3AB8: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C3AE4; } @@ -6734,7 +6703,6 @@ L_088C3AB8: } L_088C3AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3B08; } @@ -6749,7 +6717,6 @@ L_088C3ACC: AOT_REGCACHE_SYNC_OUT(); return; L_088C3ADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3B60; } @@ -6760,7 +6727,6 @@ L_088C3AE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[2] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[2] = (0u | 1u); goto L_088C3B00; @@ -6768,7 +6734,6 @@ L_088C3AE4: goto L_088C3B00; L_088C3B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3B60; } @@ -6777,7 +6742,6 @@ L_088C3B00: L_088C3B08: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C3B3C; } @@ -6793,7 +6757,6 @@ L_088C3B14: L_088C3B28: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088C3B50; } @@ -6801,7 +6764,6 @@ L_088C3B28: } L_088C3B34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3B60; } @@ -6840,7 +6802,17 @@ L_088C3B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3B78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6862,7 +6834,6 @@ L_088C3B78: L_088C3BA8: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C3BD4; } @@ -6870,7 +6841,6 @@ L_088C3BA8: } L_088C3BB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3BF8; } @@ -6885,7 +6855,6 @@ L_088C3BBC: AOT_REGCACHE_SYNC_OUT(); return; L_088C3BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3C78; } @@ -6896,7 +6865,6 @@ L_088C3BD4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[2] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[2] = (0u | 1u); goto L_088C3BF0; @@ -6904,7 +6872,6 @@ L_088C3BD4: goto L_088C3BF0; L_088C3BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3C78; } @@ -6913,7 +6880,6 @@ L_088C3BF0: L_088C3BF8: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C3C54; } @@ -6929,7 +6895,6 @@ L_088C3C04: L_088C3C18: ctx.gpr[19] = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088C3C4C; } @@ -6945,7 +6910,6 @@ L_088C3C24: L_088C3C38: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088C3C68; } @@ -6961,7 +6925,6 @@ L_088C3C44: } L_088C3C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3C78; } @@ -7001,7 +6964,17 @@ L_088C3C78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3C94: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (2232u << 16u); @@ -7041,7 +7014,6 @@ L_088C3CFC: goto L_088C2F20; L_088C3D08: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C3D2C; } @@ -7062,7 +7034,6 @@ L_088C3D1C: goto L_088C2F20; L_088C3D24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C3D6C; } @@ -7080,7 +7051,6 @@ L_088C3D2C: goto L_088C3708; L_088C3D4C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C3E64; } @@ -7095,7 +7065,6 @@ L_088C3D54: AOT_REGCACHE_SYNC_OUT(); return; L_088C3D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C3E64; } @@ -7105,7 +7074,6 @@ L_088C3D6C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(-4))); ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088C3E64; } @@ -7121,7 +7089,6 @@ L_088C3D7C: goto L_088C3D94; L_088C3D94: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C3DD8; } @@ -7142,7 +7109,6 @@ L_088C3DA8: goto L_088C2F20; L_088C3DB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C3DD8; } @@ -7240,7 +7206,6 @@ L_088C3E64: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C3CDC; } @@ -7265,7 +7230,17 @@ L_088C3E88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3EB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7289,11 +7264,20 @@ L_088C3EE4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21528))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C3EFC: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -7307,7 +7291,6 @@ L_088C3F04: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.gpr[2] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[2] = (0u | 1u); goto L_088C3F20; @@ -7315,7 +7298,6 @@ L_088C3F04: goto L_088C3F20; L_088C3F20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0048_entry, 48u, 5u, 0x088C4024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7347,7 +7329,6 @@ L_088C3F50: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088C3F7C; } @@ -7380,7 +7361,6 @@ L_088C3F84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C3FB0; } @@ -7422,7 +7402,6 @@ L_088C3FB8: } L_088C3FCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0048_entry, 48u, 1u, 0x088C4000u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7447,7 +7426,6 @@ L_088C3FE8: } L_088C3FF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0048_entry, 48u, 5u, 0x088C4024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0048.cpp b/profiles/vcs/generated/generated_unit_0048.cpp index 0c529ac..8018243 100644 --- a/profiles/vcs/generated/generated_unit_0048.cpp +++ b/profiles/vcs/generated/generated_unit_0048.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0048[4096] = { - 1, 0, 2, 0, 0, 3, 0, 0, 4, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 8, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 13, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 22, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, - 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, - 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 38, 0, 39, 0, 0, - 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, - 48, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, - 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 69, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 80, - 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, - 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 103, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, - 0, 110, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, 0, 0, 117, - 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 121, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 124, - 0, 0, 0, 125, 0, 0, 0, 0, 126, 0, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, 0, 0, 131, - 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, 0, 138, - 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 0, - 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, - 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, - 0, 0, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, 164, 0, 0, 0, 165, - 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, 0, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 0, 0, 173, 0, 0, 0, 0, 174, 0, - 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, - 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 0, 184, 0, 185, 0, 186, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, 193, 0, 0, 0, 0, 194, 0, 0, 0, 0, 195, 0, 0, 0, 196, 0, - 0, 0, 197, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 0, - 203, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 210, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 215, 0, 216, 0, 0, 217, 0, 0, - 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, - 0, 0, 223, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 231, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 236, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 240, 0, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 243, 0, 0, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, - 0, 0, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 255, 0, 0, 256, 0, 0, 0, - 257, 0, 0, 0, 258, 0, 259, 0, 0, 260, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 264, 0, 0, 0, 0, - 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 275, 0, 0, - 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 291, 0, 292, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, 0, 299, 300, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 0, 303, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 309, - 0, 310, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 318, 0, 319, 0, - 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, - 0, 324, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 0, 0, 0, 0, - 334, 0, 0, 0, 335, 336, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, - 0, 341, 0, 0, 0, 342, 0, 343, 0, 344, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, - 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, - 0, 358, 0, 0, 0, 0, 359, 0, 0, 0, 0, 360, 0, 0, 0, 361, 362, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, - 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 377, 0, 0, 0, 0, 0, 0, 378, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, - 0, 0, 383, 0, 0, 0, 0, 384, 385, 0, 0, 386, 0, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 389, 0, 390, 0, 0, 391, 0, 0, 0, - 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, - 397, 0, 0, 398, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, - 0, 405, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 413, - 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 420, 0, 0, 0, 421, 0, 0, 0, - 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, - 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, 431, 0, 0, 432, 0, 0, 433, 0, 434, 0, 0, 435, 0, 0, - 436, 0, 437, 0, 0, 438, 0, 0, 439, 0, 440, 0, 0, 441, 0, 0, 442, 0, 443, 0, 0, 444, 0, 0, 445, 0, 446, 0, 0, 447, 0, 0, - 448, 0, 449, 0, 0, 450, 0, 0, 451, 0, 452, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 455, 0, 456, 0, 457, 0, 458, 0, 0, 459, 0, - 0, 0, 0, 0, 0, 460, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 0, - 465, 0, 0, 466, 0, 0, 0, 467, 0, 468, 0, 0, 469, 0, 0, 0, 470, 0, 471, 0, 0, 472, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, - 0, 0, 476, 0, 477, 0, 0, 478, 0, 0, 479, 0, 480, 0, 0, 0, 481, 0, 482, 0, 483, 0, 484, 0, 0, 485, 0, 486, 0, 487, 0, 0, - 488, 0, 489, 0, 490, 0, 491, 0, 0, 492, 0, 493, 0, 494, 0, 0, 495, 0, 496, 0, 497, 0, 0, 498, 0, 0, 0, 499, 0, 500, 0, 0, - 501, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, - 511, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, - 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 522, 0, 523, 524, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 526, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 532, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 0, 537, 0, 538, 0, 0, 0, 539, 0, 540, 0, 541, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, 544, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 0, 549, 0, 0, 550, 0, 0, - 0, 551, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, - 0, 557, 0, 558, 0, 0, 0, 559, 560, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 565, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 571, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, - 575, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 0, 578, 0, 0, 0, 0, 579, 580, 0, 0, 0, 581, 582, 0, 0, 0, 0, 0, - 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 0, 0, 0, - 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 592, 593, 0, 0, 0, - 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, - 0, 0, 0, 0, 0, 596, 597, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, - 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 614, 0, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, - 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 622, 623, 0, 0, 0, 0, 624, 0, 0, 0, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, - 0, 628, 629, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, - 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, - 635, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 639, 0, 640, 0, 0, 0, 0, 0, 0, 0, 641, - 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 646, - 0, 0, 0, 0, 647, 0, 648, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 652, - 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 655, 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, - 0, 0, 660, 661, 0, 662, 0, 0, 0, 0, 663, 0, 664, 0, 665, 0, 0, 666, 0, 667, 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 676, 677, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 681, 0, 682, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 0, 693, 0, 694, 0, - 695, 696, 0, 697, 0, 0, 0, 698, 0, 699, 0, 700, 701, 0, 0, 702, 0, 0, 0, 0, 0, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, - 708, 709, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 713, - 0, 0, 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 719, 0, 0, 0, 720, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, - 0, 724, 725, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 727, 0, 0, 728, 0, 729, 0, 730, 0, 731, 0, 732, 0, 0, 733, 0, 0, 734, - 0, 735, 0, 736, 0, 737, 0, 738, 0, 739, 0, 740, 0, 741, 0, 742, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 744, - 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, - 749, 0, 0, 750, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 753, 0, 0, 754, 0, 0, 0, 0, 755, 0, 756, 0, 0, 0, 0, 757, 0, 0, - 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 760, 761, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 764, 0, 0, 0, 765, 0, 766, 0, 767, 0, 0, 0, 768, 0, 0, 0, 769, 0, 0, - 0, 770, 0, 771, 0, 772, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 778, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 781, 0, 0, 0, 0, 0, 782, 0, 0, 783, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 789, - 790, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, - 0, 0, 794, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 798, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 800, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 802, 0, 803, 804, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0048[64] = { + 0x102A912900008325ull, 0x1414008610220408ull, 0x2888080182200401ull, 0x4804001001008204ull, + 0x4008404402000A11ull, 0x10A0042022442101ull, 0x8842210800280280ull, 0x4004421015020050ull, + 0x88428010A0042022ull, 0x8842210A08222210ull, 0x8222210884282088ull, 0x42820888842210A0ull, + 0x140104A028221088ull, 0x540000808C101028ull, 0x4221090842108400ull, 0x442110850022A888ull, + 0x2244421108500224ull, 0x1228000225220500ull, 0x030240811014A224ull, 0x0A01922140000C00ull, + 0x0A10225112888528ull, 0x201000000000A005ull, 0x1012200228011200ull, 0x14A0104802900880ull, + 0xA80C090200410400ull, 0x5292111292110400ull, 0x0555500681010080ull, 0x511042A20A1000B1ull, + 0x2011884288821448ull, 0x2054022000808000ull, 0x1010140081840840ull, 0x0000000412920984ull, + 0x4444028901500002ull, 0x1122244488911222ull, 0x2525204048000489ull, 0x4AA1452525252525ull, + 0x4A25128904400860ull, 0x28952A552A551494ull, 0x4004AA8155548201ull, 0x4802A2001080D540ull, + 0x1514900008200000ull, 0x2222001224922D00ull, 0x008034000011098Aull, 0x06309041120A8840ull, + 0x1A00082208840088ull, 0x200A206010000020ull, 0x0400001102200100ull, 0x8005520800002204ull, + 0x8000040110D04410ull, 0x2400001080000106ull, 0xC002200880A20A01ull, 0x0A022920A10000D0ull, + 0x80808140102A542Cull, 0x0408284000805880ull, 0x55409A8B55545080ull, 0x0022103080840013ull, + 0x92AA440680010822ull, 0x020204108002AAAAull, 0x101A0002214240A9ull, 0x4011022A222A2100ull, + 0x100212080020D000ull, 0xA000000100000040ull, 0x8802020440100081ull, 0x8001068002110000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0048[64] = { + 1u, 17u, 29u, 40u, 48u, 58u, 70u, 81u, 92u, 104u, 118u, 132u, 146u, 159u, 170u, 182u, + 197u, 211u, 223u, 237u, 248u, 265u, 271u, 281u, 293u, 304u, 320u, 334u, 350u, 365u, 373u, 383u, + 393u, 405u, 422u, 436u, 460u, 476u, 501u, 519u, 533u, 542u, 557u, 568u, 583u, 594u, 602u, 608u, + 618u, 628u, 635u, 647u, 660u, 675u, 685u, 708u, 719u, 735u, 749u, 763u, 777u, 786u, 790u, 799u, }; void recomp_unit_0048_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0048_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088C4000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0048[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0048[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0048[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088C4000; @@ -995,7 +902,6 @@ L_088C4008: L_088C4014: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C4024; } @@ -1017,7 +923,17 @@ L_088C4024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C403C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -1055,7 +971,6 @@ L_088C408C: L_088C4094: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088C41D0; } @@ -1098,7 +1013,6 @@ L_088C40C4: } L_088C40CC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_088C4144; } @@ -1170,7 +1084,6 @@ L_088C4154: aot_gpr_16 = (aot_gpr_16 - aot_gpr_5); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C4188; } @@ -1214,7 +1127,6 @@ L_088C419C: } L_088C41C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C4200; } @@ -1231,7 +1143,6 @@ L_088C41D0: AOT_REGCACHE_SYNC_OUT(); return; L_088C41E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C4200; } @@ -1261,7 +1172,17 @@ L_088C4200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C4228: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -1310,7 +1231,6 @@ L_088C42AC: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_5 & 12u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C4308; } @@ -1330,7 +1250,6 @@ L_088C42DC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(48))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C4308; } @@ -1346,7 +1265,6 @@ L_088C42F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C433C; } @@ -1371,11 +1289,20 @@ L_088C4324: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21496))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C433C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); @@ -1438,7 +1365,6 @@ L_088C43C8: aot_gpr_4 = (ctx.gpr[19] >> 6u); aot_gpr_4 = (aot_gpr_4 & 511u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C43F8; } @@ -1451,7 +1377,6 @@ L_088C43EC: goto L_088C43F8; L_088C43F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1468,7 +1393,6 @@ L_088C4410: ctx.gpr[19] = (ctx.gpr[19] + static_cast(-8)); aot_gpr_4 = (ctx.gpr[19] < ctx.gpr[22] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C4410; } @@ -1476,7 +1400,6 @@ L_088C4410: } L_088C4424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1518,7 +1441,6 @@ L_088C4488: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C44B8; } @@ -1561,7 +1483,6 @@ L_088C44CC: goto L_088C44F8; L_088C44F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1603,7 +1524,6 @@ L_088C4548: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C45DC; } @@ -1619,7 +1539,6 @@ L_088C4564: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C4594; } @@ -1662,7 +1581,6 @@ L_088C45A8: goto L_088C45D4; L_088C45D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C461C; } @@ -1691,7 +1609,6 @@ L_088C45F0: goto L_088C461C; L_088C461C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1712,7 +1629,6 @@ L_088C4624: AOT_REGCACHE_SYNC_OUT(); return; L_088C464C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1804,7 +1720,6 @@ L_088C46FC: AOT_REGCACHE_SYNC_OUT(); return; L_088C4710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1831,7 +1746,6 @@ L_088C4744: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C4768; } @@ -1844,7 +1758,6 @@ L_088C4760: AOT_REGCACHE_SYNC_OUT(); return; L_088C4768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -1886,7 +1799,6 @@ L_088C47B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C575C; } @@ -1904,7 +1816,6 @@ L_088C47C8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C487C; } @@ -1920,7 +1831,6 @@ L_088C4804: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C4834; } @@ -1963,7 +1873,6 @@ L_088C4848: goto L_088C4874; L_088C4874: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C48BC; } @@ -1992,7 +1901,6 @@ L_088C4890: goto L_088C48BC; L_088C48BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2058,7 +1966,6 @@ L_088C4934: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C496C; } @@ -2096,7 +2003,6 @@ L_088C496C: goto L_088C403C; L_088C4984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2162,7 +2068,6 @@ L_088C49FC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C4A34; } @@ -2200,7 +2105,6 @@ L_088C4A34: goto L_088C403C; L_088C4A4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2266,7 +2170,6 @@ L_088C4AC4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C4AFC; } @@ -2304,7 +2207,6 @@ L_088C4AFC: goto L_088C403C; L_088C4B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2370,7 +2272,6 @@ L_088C4B8C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088C4BC4; } @@ -2408,7 +2309,6 @@ L_088C4BC4: goto L_088C403C; L_088C4BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2480,7 +2380,6 @@ L_088C4C54: goto L_088C403C; L_088C4C6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2494,7 +2393,6 @@ L_088C4C74: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088C4CA8; } @@ -2508,7 +2406,6 @@ L_088C4C94: L_088C4C9C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C4CC0; } @@ -2541,7 +2438,6 @@ L_088C4CC0: AOT_REGCACHE_SYNC_OUT(); return; L_088C4CE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C4D0C; } @@ -2559,7 +2455,6 @@ L_088C4CF0: AOT_REGCACHE_SYNC_OUT(); return; L_088C4D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2598,7 +2493,6 @@ L_088C4D50: aot_gpr_5 = (ctx.gpr[23] + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C4D6C; } @@ -2647,7 +2541,6 @@ L_088C4D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C4DF0; } @@ -2660,7 +2553,6 @@ L_088C4DE8: AOT_REGCACHE_SYNC_OUT(); return; L_088C4DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2857,7 +2749,6 @@ L_088C4F54: goto L_088C4F80; L_088C4F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -2958,7 +2849,6 @@ L_088C5024: goto L_088C5050; L_088C5050: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3059,7 +2949,6 @@ L_088C50F4: goto L_088C5120; L_088C5120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3140,7 +3029,6 @@ L_088C5184: goto L_088C51CC; L_088C51CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3150,7 +3038,6 @@ L_088C51D4: aot_gpr_4 = (ctx.gpr[19] >> 15u); aot_gpr_4 = (aot_gpr_4 & 511u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C51F0; } @@ -3173,7 +3060,6 @@ L_088C51F0: L_088C5208: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088C5270; } @@ -3183,7 +3069,6 @@ L_088C5214: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[22] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C5250; } @@ -3198,7 +3083,6 @@ L_088C5224: AOT_REGCACHE_SYNC_OUT(); return; L_088C5234: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_088C5248; } @@ -3211,7 +3095,6 @@ L_088C523C: goto L_088C5248; L_088C5248: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3235,7 +3118,6 @@ L_088C5270: aot_gpr_4 = (ctx.gpr[19] & 63u); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C529C; } @@ -3336,7 +3218,6 @@ L_088C532C: goto L_088C5378; L_088C5378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C4254; } @@ -3409,7 +3290,6 @@ L_088C53EC: AOT_REGCACHE_SYNC_OUT(); return; L_088C540C: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_088C5420; } @@ -3464,7 +3344,6 @@ L_088C545C: L_088C5464: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088C5480; } @@ -3495,7 +3374,6 @@ L_088C5490: L_088C5498: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088C54B4; } @@ -3524,7 +3402,6 @@ L_088C54B4: L_088C54D0: aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_088C54E4; @@ -3532,7 +3409,6 @@ L_088C54D0: goto L_088C54E4; L_088C54E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C5500; } @@ -3541,7 +3417,6 @@ L_088C54E4: L_088C54EC: aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_088C5500; @@ -3570,7 +3445,6 @@ L_088C5508: goto L_088C5534; L_088C5534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3677,7 +3551,6 @@ L_088C5640: goto L_088C566C; L_088C566C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3752,7 +3625,6 @@ L_088C571C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C575C; } @@ -3837,7 +3709,6 @@ L_088C57B0: } L_088C57D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3851,7 +3722,6 @@ L_088C57DC: AOT_REGCACHE_SYNC_OUT(); return; L_088C57E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3935,7 +3805,6 @@ L_088C58AC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C5840; } @@ -3952,7 +3821,6 @@ L_088C58CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C58F4; } @@ -3965,7 +3833,6 @@ L_088C58EC: AOT_REGCACHE_SYNC_OUT(); return; L_088C58F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C42AC; } @@ -3989,7 +3856,17 @@ L_088C58FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5928: aot_gpr_5 = (2234u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(22528)); @@ -4000,12 +3877,21 @@ L_088C5928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5940: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C5984; } @@ -4030,7 +3916,6 @@ L_088C5964: L_088C5970: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C5984; } @@ -4038,7 +3923,6 @@ L_088C5970: } L_088C597C: aot_gpr_31 = (0x088C5984u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C5984u) goto L_088C5984; AOT_REGCACHE_SYNC_OUT(); return; L_088C5984: @@ -4048,12 +3932,21 @@ L_088C5984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5990: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C59E4; } @@ -4088,7 +3981,6 @@ L_088C59C4: L_088C59D0: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C59E4; } @@ -4096,7 +3988,6 @@ L_088C59D0: } L_088C59DC: aot_gpr_31 = (0x088C59E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C59E4u) goto L_088C59E4; AOT_REGCACHE_SYNC_OUT(); return; L_088C59E4: @@ -4106,14 +3997,34 @@ L_088C59E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C59F0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C59F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 << 3u); @@ -4169,7 +4080,6 @@ L_088C5A60: } L_088C5A7C: { const bool branch_taken = static_cast(ctx.gpr[8]) >= 0; - // nop if (branch_taken) { goto L_088C5B00; } @@ -4188,7 +4098,6 @@ L_088C5A88: ctx.gpr[15] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[15] + static_cast(0)))))); ctx.gpr[15] = (ctx.gpr[15] & 1u); { const bool branch_taken = ctx.gpr[15] == 0u; - // nop if (branch_taken) { goto L_088C5AB8; } @@ -4220,7 +4129,6 @@ L_088C5AC0: } L_088C5AC8: { const bool branch_taken = ctx.gpr[13] == ctx.gpr[15]; - // nop if (branch_taken) { goto L_088C5AD8; } @@ -4228,7 +4136,6 @@ L_088C5AC8: } L_088C5AD0: { const bool branch_taken = static_cast(ctx.gpr[9]) >= 0; - // nop if (branch_taken) { goto L_088C5B00; } @@ -4236,7 +4143,6 @@ L_088C5AD0: } L_088C5AD8: { const bool branch_taken = aot_gpr_6 == ctx.gpr[10]; - // nop if (branch_taken) { goto L_088C5AE8; } @@ -4277,11 +4183,20 @@ L_088C5B10: goto L_088C5B14; L_088C5B14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5B1C: aot_gpr_4 = (2237u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(-28320)); @@ -4291,11 +4206,9 @@ L_088C5B1C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26344))); aot_gpr_6 = (ctx.hi); aot_gpr_6 = (aot_gpr_6 + static_cast(3)); - // nop { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.hi); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C5B64; } @@ -4310,11 +4223,20 @@ L_088C5B50: goto L_088C5B64; L_088C5B64: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5B6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4358,7 +4280,6 @@ L_088C5BB8: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088C5BF8; } @@ -4394,7 +4315,6 @@ L_088C5BF8: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C5BB8; } @@ -4435,7 +4355,6 @@ L_088C5C44: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088C5C84; } @@ -4471,7 +4390,6 @@ L_088C5C84: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C5C44; } @@ -4506,7 +4424,17 @@ L_088C5CC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5CD0: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4518,11 +4446,20 @@ L_088C5CD0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5CF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4575,7 +4512,6 @@ L_088C5D5C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(36))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C5DD0; } @@ -4605,7 +4541,6 @@ L_088C5DA4: } L_088C5DC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C5E5C; } @@ -4613,7 +4548,6 @@ L_088C5DC8: } L_088C5DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C5E60; } @@ -4637,7 +4571,6 @@ L_088C5DF4: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(36))); ctx.gpr[8] = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088C5E48; } @@ -4692,7 +4625,17 @@ L_088C5E60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5E7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4721,7 +4664,6 @@ L_088C5EB0: ctx.gpr[7] = (aot_gpr_16 + ctx.gpr[7]); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(6256))); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_088C5F08; } @@ -4735,7 +4677,6 @@ L_088C5ED0: ctx.gpr[9] = (ctx.gpr[9] < static_cast(1) ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088C5F08; } @@ -4775,7 +4716,6 @@ L_088C5F2C: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C5F20; } @@ -4784,7 +4724,6 @@ L_088C5F2C: L_088C5F44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C5F64; } @@ -4798,7 +4737,6 @@ L_088C5F50: AOT_REGCACHE_SYNC_OUT(); return; L_088C5F5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C5F70; } @@ -4823,7 +4761,17 @@ L_088C5F70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C5F88: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), aot_gpr_5); aot_gpr_5 = (0u | 12000u); @@ -4859,7 +4807,17 @@ L_088C5F88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6004: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(68), ctx.gpr[10]); @@ -4909,11 +4867,20 @@ L_088C6060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6080: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C609C; } @@ -4927,11 +4894,20 @@ L_088C608C: goto L_088C609C; L_088C609C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C60A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5170,7 +5146,17 @@ L_088C6278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6298: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5178,7 +5164,6 @@ L_088C6298: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26152))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C62C8; } @@ -5197,7 +5182,6 @@ L_088C62C0: L_088C62C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26148))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C62E8; } @@ -5216,7 +5200,6 @@ L_088C62E0: L_088C62E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(23528))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C6308; } @@ -5235,7 +5218,6 @@ L_088C6300: L_088C6308: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(23524))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C6328; } @@ -5254,7 +5236,6 @@ L_088C6320: L_088C6328: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(23520))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C6348; } @@ -5273,7 +5254,6 @@ L_088C6340: L_088C6348: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24260))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C6368; } @@ -5292,7 +5272,6 @@ L_088C6360: L_088C6368: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24256))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C6388; } @@ -5311,7 +5290,6 @@ L_088C6380: L_088C6388: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26144))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088C63A8; } @@ -5335,20 +5313,38 @@ L_088C63A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C63B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C63C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x088C63D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C63D4u) goto L_088C63D4; AOT_REGCACHE_SYNC_OUT(); return; L_088C63D4: @@ -5366,7 +5362,6 @@ L_088C63DC: } L_088C63E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C6418; } @@ -5375,7 +5370,6 @@ L_088C63E4: L_088C63EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C6418; } @@ -5388,7 +5382,6 @@ L_088C63F8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C6418; } @@ -5406,7 +5399,17 @@ L_088C6418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C642C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -5440,15 +5443,23 @@ L_088C6468: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21128))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6480: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C649C; } @@ -5462,7 +5473,6 @@ L_088C648C: goto L_088C6600; L_088C649C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5471,7 +5481,6 @@ L_088C649C: L_088C64A4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C64C0; } @@ -5486,7 +5495,6 @@ L_088C64B0: AOT_REGCACHE_SYNC_OUT(); return; L_088C64C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5495,7 +5503,6 @@ L_088C64C0: L_088C64C8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C64E4; } @@ -5510,7 +5517,6 @@ L_088C64D4: AOT_REGCACHE_SYNC_OUT(); return; L_088C64E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5519,7 +5525,6 @@ L_088C64E4: L_088C64EC: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C6508; } @@ -5534,7 +5539,6 @@ L_088C64F8: AOT_REGCACHE_SYNC_OUT(); return; L_088C6508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5543,7 +5547,6 @@ L_088C6508: L_088C6510: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C6540; } @@ -5560,7 +5563,6 @@ L_088C651C: } L_088C6528: { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088C6540; } @@ -5575,7 +5577,6 @@ L_088C6530: AOT_REGCACHE_SYNC_OUT(); return; L_088C6540: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5588,7 +5589,6 @@ L_088C6548: AOT_REGCACHE_SYNC_OUT(); return; L_088C6550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5597,7 +5597,6 @@ L_088C6550: L_088C6558: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C656C; } @@ -5610,7 +5609,6 @@ L_088C6564: AOT_REGCACHE_SYNC_OUT(); return; L_088C656C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5619,7 +5617,6 @@ L_088C656C: L_088C6574: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C6588; } @@ -5632,7 +5629,6 @@ L_088C6580: AOT_REGCACHE_SYNC_OUT(); return; L_088C6588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5640,7 +5636,6 @@ L_088C6588: } L_088C6590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5649,7 +5644,6 @@ L_088C6590: L_088C6598: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C65AC; } @@ -5662,7 +5656,6 @@ L_088C65A4: AOT_REGCACHE_SYNC_OUT(); return; L_088C65AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5671,7 +5664,6 @@ L_088C65AC: L_088C65B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C65C8; } @@ -5684,7 +5676,6 @@ L_088C65C0: AOT_REGCACHE_SYNC_OUT(); return; L_088C65C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5693,7 +5684,6 @@ L_088C65C8: L_088C65D0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(26341))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C65EC; } @@ -5708,7 +5698,6 @@ L_088C65DC: AOT_REGCACHE_SYNC_OUT(); return; L_088C65EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C65F4; } @@ -5721,7 +5710,17 @@ L_088C65F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6600: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 << 6u); @@ -5731,7 +5730,6 @@ L_088C6600: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6260))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C66BC; } @@ -5760,7 +5758,6 @@ L_088C663C: } L_088C6648: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088C6670; } @@ -5768,12 +5765,10 @@ L_088C6648: } L_088C6650: aot_gpr_31 = (0x088C6658u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0049_entry, 49u, 617u, 0x088CB124u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C6658u) goto L_088C6658; AOT_REGCACHE_SYNC_OUT(); return; L_088C6658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C66BC; } @@ -5781,7 +5776,6 @@ L_088C6658: } L_088C6660: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088C6680; } @@ -5789,7 +5783,6 @@ L_088C6660: } L_088C6668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C66BC; } @@ -5797,12 +5790,10 @@ L_088C6668: } L_088C6670: aot_gpr_31 = (0x088C6678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0049_entry, 49u, 177u, 0x088C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C6678u) goto L_088C6678; AOT_REGCACHE_SYNC_OUT(); return; L_088C6678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C66BC; } @@ -5815,7 +5806,6 @@ L_088C6680: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088C66AC; } @@ -5823,12 +5813,10 @@ L_088C6680: } L_088C669C: aot_gpr_31 = (0x088C66A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0156_entry, 156u, 395u, 0x08A75DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C66A4u) goto L_088C66A4; AOT_REGCACHE_SYNC_OUT(); return; L_088C66A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C66B4; } @@ -5836,12 +5824,10 @@ L_088C66A4: } L_088C66AC: aot_gpr_31 = (0x088C66B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0049_entry, 49u, 180u, 0x088C90E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C66B4u) goto L_088C66B4; AOT_REGCACHE_SYNC_OUT(); return; L_088C66B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C66BC; } @@ -5854,7 +5840,17 @@ L_088C66BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C66C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -5879,9 +5875,7 @@ L_088C66F8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C6854; } @@ -5889,7 +5883,6 @@ L_088C66F8: } L_088C6718: aot_gpr_31 = (0x088C6720u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C6720u) goto L_088C6720; AOT_REGCACHE_SYNC_OUT(); return; L_088C6720: @@ -5900,12 +5893,10 @@ L_088C6720: goto L_088C6728; L_088C6728: aot_gpr_31 = (0x088C6730u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C6730u) goto L_088C6730; AOT_REGCACHE_SYNC_OUT(); return; L_088C6730: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C6854; } @@ -5922,7 +5913,6 @@ L_088C673C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(696))); aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C67BC; } @@ -5961,7 +5951,6 @@ L_088C67A4: goto L_088C67B4; L_088C67B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C6854; } @@ -5969,7 +5958,6 @@ L_088C67B4: } L_088C67BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C6854; } @@ -6032,7 +6020,17 @@ L_088C6854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C686C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (17561u << 16u); @@ -6061,7 +6059,6 @@ L_088C68B0: L_088C68BC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088C68E8; } @@ -6069,7 +6066,6 @@ L_088C68BC: } L_088C68C8: aot_gpr_31 = (0x088C68D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C68D0u) goto L_088C68D0; AOT_REGCACHE_SYNC_OUT(); return; L_088C68D0: @@ -6092,7 +6088,6 @@ L_088C68E0: } L_088C68E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C6AB4; } @@ -6110,7 +6105,6 @@ L_088C68F0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C6928; } @@ -6220,7 +6214,6 @@ L_088C69E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23780))); aot_gpr_5 = (aot_gpr_4 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C6A0C; } @@ -6303,7 +6296,6 @@ L_088C6A50: AOT_REGCACHE_SYNC_OUT(); return; L_088C6AA8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088C6AB4; } @@ -6329,7 +6321,17 @@ L_088C6AB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6ADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(ctx.fpr[24])); @@ -6365,7 +6367,6 @@ L_088C6B2C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C6B4C; } @@ -6373,7 +6374,6 @@ L_088C6B2C: } L_088C6B3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C6CE4; } @@ -6391,9 +6391,7 @@ L_088C6B4C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C6B70; } @@ -6402,7 +6400,6 @@ L_088C6B4C: L_088C6B64: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(644))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C6CE4; } @@ -6420,7 +6417,6 @@ L_088C6B80: ctx.fpr[24] = std::bit_cast(aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1885))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088C6BB0; } @@ -6459,7 +6455,6 @@ L_088C6BD0: goto L_088C6BD4; L_088C6BD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16832u << 16u); if (branch_taken) { @@ -6486,7 +6481,6 @@ L_088C6C0C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C6CE4; } @@ -6501,7 +6495,6 @@ L_088C6C1C: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } aot_gpr_4 = (20224u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6600,7 +6593,17 @@ L_088C6CF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -6631,9 +6634,7 @@ L_088C6D70: aot_gpr_4 = (aot_gpr_4 | 8192u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C6D98; } @@ -6700,7 +6701,17 @@ L_088C6DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6E20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (18204u << 16u); @@ -6777,9 +6788,7 @@ L_088C6EE8: aot_gpr_4 = (aot_gpr_4 | 8192u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C6F8C; } @@ -6843,11 +6852,20 @@ L_088C6F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6FA4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C6FB8; } @@ -6859,18 +6877,36 @@ L_088C6FB0: goto L_088C6FB8; L_088C6FB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6FC0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C6FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (17692u << 16u); @@ -6895,7 +6931,6 @@ L_088C6FFC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C70FC; } @@ -6905,9 +6940,7 @@ L_088C7010: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C70FC; } @@ -7021,7 +7054,17 @@ L_088C7108: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7120: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_20)); @@ -7082,7 +7125,6 @@ L_088C71E8: L_088C71F4: aot_gpr_4 = (ctx.gpr[2] & 255u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088C72FC; } @@ -7097,7 +7139,6 @@ L_088C7200: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(42))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088C722C; } @@ -7105,7 +7146,6 @@ L_088C7200: } L_088C7224: { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088C72FC; } @@ -7115,9 +7155,7 @@ L_088C722C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C72FC; } @@ -7125,7 +7163,6 @@ L_088C722C: } L_088C7244: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_088C725C; @@ -7150,7 +7187,6 @@ L_088C727C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C72FC; } @@ -7199,7 +7235,6 @@ L_088C72FC: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C71E8; } @@ -7240,7 +7275,17 @@ L_088C731C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7360: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(604))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); @@ -7254,7 +7299,6 @@ L_088C7360: } L_088C7374: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088C73AC; } @@ -7266,11 +7310,20 @@ L_088C737C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21072))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7394: aot_gpr_4 = (aot_gpr_5 + static_cast(1888)); { const bool branch_taken = 0u == 0u; @@ -7291,7 +7344,6 @@ L_088C73A0: } L_088C73AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C740C; } @@ -7299,7 +7351,6 @@ L_088C73AC: } L_088C73B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (15759u << 16u); if (branch_taken) { @@ -7313,7 +7364,6 @@ L_088C73C4: aot_fpr_14 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088C73E4; @@ -7332,7 +7382,6 @@ L_088C73EC: aot_fpr_14 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088C7408; @@ -7343,11 +7392,20 @@ L_088C7408: goto L_088C740C; L_088C740C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7414: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_gpr_6 | 0u); @@ -7361,7 +7419,6 @@ L_088C7414: } L_088C7428: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C755C; } @@ -7369,7 +7426,6 @@ L_088C7428: } L_088C7430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C7454; } @@ -7386,7 +7442,6 @@ L_088C7438: } L_088C7444: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C74A0; } @@ -7394,7 +7449,6 @@ L_088C7444: } L_088C744C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C755C; } @@ -7405,7 +7459,6 @@ L_088C7454: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -7427,7 +7480,6 @@ L_088C7470: goto L_088C7498; L_088C7498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C755C; } @@ -7438,9 +7490,7 @@ L_088C74A0: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C74DC; } @@ -7462,9 +7512,7 @@ L_088C74DC: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C751C; } @@ -7476,7 +7524,6 @@ L_088C74FC: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088C751C; @@ -7484,9 +7531,7 @@ L_088C74FC: goto L_088C751C; L_088C751C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C7530; } @@ -7497,7 +7542,6 @@ L_088C752C: goto L_088C7530; L_088C7530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C755C; } @@ -7510,7 +7554,6 @@ L_088C7538: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(80))); aot_fpr_14 = aot_fpr_14 / ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088C755C; @@ -7540,7 +7583,6 @@ L_088C755C: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088C7598; @@ -7549,7 +7591,6 @@ L_088C755C: L_088C7598: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_088C75AC; @@ -7561,7 +7602,17 @@ L_088C75AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C75B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (16256u << 16u); @@ -7579,7 +7630,6 @@ L_088C75CC: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(80))); aot_fpr_13 = aot_fpr_13 / ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_088C75E8; @@ -7607,7 +7657,6 @@ L_088C75E8: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_088C761C; @@ -7616,7 +7665,6 @@ L_088C75E8: L_088C761C: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088C7630; @@ -7628,7 +7676,17 @@ L_088C7630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7638: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (0u | 71u); @@ -7681,7 +7739,6 @@ L_088C7668: } L_088C7670: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C7680; } @@ -7700,11 +7757,20 @@ L_088C7680: goto L_088C7684; L_088C7684: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C768C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7714,7 +7780,6 @@ L_088C768C: AOT_REGCACHE_SYNC_OUT(); return; L_088C769C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C76AC; } @@ -7738,7 +7803,17 @@ L_088C76B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C76BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7754,7 +7829,6 @@ L_088C76BC: } L_088C76D8: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088C76F8; } @@ -7767,7 +7841,6 @@ L_088C76E0: AOT_REGCACHE_SYNC_OUT(); return; L_088C76E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C7700; } @@ -7799,7 +7872,17 @@ L_088C7704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7710: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -7835,7 +7918,6 @@ L_088C775C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48332u << 16u); if (branch_taken) { @@ -7846,9 +7928,7 @@ L_088C775C: L_088C777C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C77C4; } @@ -7862,9 +7942,7 @@ L_088C7794: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C787C; } @@ -7873,9 +7951,7 @@ L_088C7794: L_088C77B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C787C; } @@ -7906,7 +7982,6 @@ L_088C7804: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C787C; } @@ -7972,7 +8047,17 @@ L_088C7888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C78A8: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 46 ? 1u : 0u); @@ -8002,7 +8087,6 @@ L_088C78C4: } L_088C78CC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C78FC; } @@ -8034,7 +8118,6 @@ L_088C78E4: L_088C78F0: aot_gpr_4 = (static_cast(aot_gpr_4) < 67 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C78D4; } @@ -8050,7 +8133,6 @@ L_088C78FC: } L_088C7904: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C78FC; } @@ -8058,7 +8140,6 @@ L_088C7904: } L_088C790C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C78D4; } @@ -8098,7 +8179,6 @@ L_088C792C: } L_088C7934: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_088C78D4; } @@ -8106,11 +8186,20 @@ L_088C7934: } L_088C793C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7944: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -8147,7 +8236,6 @@ L_088C7990: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_5 = (aot_gpr_5 >> 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088C7A0C; } @@ -8158,9 +8246,7 @@ L_088C79A8: aot_gpr_4 = (17347u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C7A0C; } @@ -8172,7 +8258,6 @@ L_088C79C4: aot_gpr_5 = (16880u << 16u); aot_gpr_4 = (0u | 7u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -8234,7 +8319,6 @@ L_088C7A44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C7A60; } @@ -8307,7 +8391,17 @@ L_088C7AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7AF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -8349,7 +8443,6 @@ L_088C7B34: } L_088C7B44: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088C7B64; } @@ -8357,7 +8450,6 @@ L_088C7B44: } L_088C7B4C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C7B84; } @@ -8403,7 +8495,6 @@ L_088C7B84: } L_088C7B8C: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088C7C30; } @@ -8429,7 +8520,6 @@ L_088C7BC0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C7C30; } @@ -8489,7 +8579,17 @@ L_088C7C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7C54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (17817u << 16u); @@ -8514,9 +8614,7 @@ L_088C7C8C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C7DF4; } @@ -8530,9 +8628,7 @@ L_088C7CA4: L_088C7CB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C7DF4; } @@ -8654,7 +8750,17 @@ L_088C7E00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7E1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (17692u << 16u); @@ -8682,9 +8788,7 @@ L_088C7E50: aot_gpr_6 = (aot_gpr_6 | 4719u); aot_fpr_20 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C7F9C; } @@ -8694,7 +8798,6 @@ L_088C7E78: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1060)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C7F9C; } @@ -8759,7 +8862,6 @@ L_088C7EFC: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - aot_fpr_12; goto L_088C7F50; @@ -8823,7 +8925,17 @@ L_088C7FA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C7FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (17692u << 16u); diff --git a/profiles/vcs/generated/generated_unit_0049.cpp b/profiles/vcs/generated/generated_unit_0049.cpp index 269486a..a7d6697 100644 --- a/profiles/vcs/generated/generated_unit_0049.cpp +++ b/profiles/vcs/generated/generated_unit_0049.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0049[4083] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 8, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 15, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 19, 0, 20, 0, 0, 21, 0, 0, 0, 22, - 0, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, - 0, 35, 0, 36, 0, 0, 37, 0, 38, 0, 39, 0, 40, 0, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 45, 0, - 46, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 50, 0, 51, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 57, 0, - 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 69, - 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, - 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 81, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, - 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 103, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 112, 113, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 115, 0, 0, 0, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 119, 120, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, - 126, 127, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 135, 0, 0, 0, 0, 0, 136, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 144, 0, 0, 0, - 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 149, 0, 0, - 0, 0, 0, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 155, 0, 156, 0, 157, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 159, 0, 0, 0, 160, 0, 0, 0, 0, 0, - 0, 161, 0, 0, 0, 162, 0, 0, 163, 0, 164, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 185, 0, 0, 0, 186, 0, 187, 0, 188, 189, - 0, 190, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 196, 0, 0, 197, 0, 0, 198, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 0, 205, 0, 0, 206, 0, 0, - 0, 0, 0, 0, 0, 0, 207, 0, 208, 0, 0, 209, 0, 0, 0, 210, 0, 0, 211, 0, 212, 0, 213, 0, 0, 214, 0, 0, 215, 0, 0, 0, - 216, 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 220, 0, 221, 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, - 0, 0, 0, 0, 225, 0, 0, 226, 0, 0, 227, 0, 228, 0, 0, 229, 0, 230, 0, 0, 231, 0, 232, 0, 0, 233, 0, 234, 0, 0, 235, 0, - 236, 0, 0, 237, 0, 238, 0, 0, 239, 0, 240, 0, 0, 241, 0, 242, 0, 0, 243, 0, 244, 0, 0, 245, 0, 246, 0, 0, 247, 0, 248, 0, - 0, 249, 0, 250, 0, 0, 251, 0, 252, 0, 0, 253, 0, 254, 0, 0, 255, 0, 256, 0, 0, 257, 0, 258, 0, 0, 259, 0, 260, 0, 0, 261, - 0, 262, 0, 0, 263, 0, 264, 0, 0, 265, 0, 266, 0, 0, 267, 0, 268, 0, 0, 269, 0, 270, 0, 0, 271, 0, 272, 0, 0, 273, 0, 274, - 0, 0, 275, 0, 276, 0, 0, 277, 0, 278, 0, 0, 279, 0, 280, 0, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, 0, 0, 285, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 292, 293, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, - 299, 0, 300, 0, 301, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 306, - 0, 307, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, 0, 0, 310, 0, 311, 0, 0, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 314, - 0, 315, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, - 0, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, - 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 333, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 340, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 0, - 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 354, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 361, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 365, 0, 0, 366, 367, 0, 0, 0, 0, - 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 0, 0, 0, - 0, 0, 373, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 0, 0, - 0, 0, 380, 0, 0, 381, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 384, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 391, 0, 0, 392, 0, 393, 0, 394, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, - 0, 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, - 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, - 0, 409, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 416, - 0, 0, 417, 0, 0, 0, 0, 418, 0, 419, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 424, 0, 425, 0, 0, - 426, 0, 0, 427, 0, 0, 0, 0, 428, 0, 429, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 433, 0, 434, 0, 435, 0, - 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 440, 0, - 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 445, 0, 446, 0, 447, 0, 0, 448, 0, 449, 0, 450, - 451, 0, 0, 0, 0, 452, 0, 0, 0, 453, 454, 0, 0, 0, 455, 0, 0, 0, 456, 0, 457, 0, 0, 458, 459, 0, 460, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 464, 465, 0, 0, 0, 466, 0, 467, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 469, 0, 0, 0, 0, 470, 0, 471, 0, 472, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 480, 481, 0, - 482, 0, 0, 0, 0, 0, 0, 483, 484, 0, 0, 485, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, 0, 489, 0, 0, 0, 490, 0, 0, - 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 497, 0, 0, 498, 0, 0, 0, 0, 499, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 502, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 505, 0, 0, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 510, 0, 0, 511, 0, 512, 0, 513, 0, 514, - 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 530, 0, 0, 531, 0, 532, - 0, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 535, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, 542, 543, 0, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 547, 0, 548, 0, 0, 549, 0, 550, 0, 0, 551, 0, 0, - 552, 0, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 557, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, - 571, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 574, 0, 575, 0, 0, 0, 0, 576, 0, 0, 577, 0, 0, 578, 0, 0, 579, 0, 580, 0, 581, - 0, 0, 0, 0, 582, 583, 0, 0, 584, 0, 0, 585, 0, 586, 0, 0, 0, 587, 0, 588, 0, 589, 0, 0, 590, 0, 591, 0, 0, 0, 0, 0, - 0, 592, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 595, 0, 596, 0, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 0, - 0, 0, 603, 0, 0, 0, 0, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 611, 0, 612, 0, 0, 613, 0, 0, 614, 0, 615, - 616, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 619, 0, - 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 622, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, 626, 627, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, - 632, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 0, 0, 635, 0, 0, 636, 0, 0, 637, 0, 0, 638, 0, 639, 0, 0, 640, 0, 0, 641, 0, - 642, 0, 0, 643, 0, 0, 644, 0, 645, 0, 0, 0, 646, 0, 647, 0, 648, 0, 0, 649, 0, 0, 650, 0, 0, 651, 0, 0, 652, 0, 0, 653, - 0, 654, 0, 0, 655, 0, 0, 656, 0, 0, 657, 0, 658, 0, 0, 659, 0, 0, 660, 0, 0, 661, 0, 662, 0, 0, 663, 0, 0, 664, 0, 665, - 0, 0, 0, 0, 666, 0, 0, 667, 0, 668, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 0, 672, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, - 0, 676, 0, 677, 0, 0, 678, 0, 0, 679, 0, 680, 0, 0, 681, 0, 0, 682, 0, 0, 0, 683, 0, 0, 684, 0, 685, 0, 0, 0, 0, 686, - 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 690, 0, 0, 691, 0, 0, 692, 0, 0, 693, 0, 0, 694, 0, 0, 695, 0, 0, 696, - 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 700, 0, 701, 0, 702, 0, 0, 703, 0, 0, 704, 0, 0, 705, 0, 706, 0, 707, 0, - 0, 708, 0, 0, 709, 0, 710, 0, 711, 0, 0, 0, 712, 0, 0, 713, 0, 0, 714, 0, 0, 715, 0, 0, 716, 0, 717, 0, 718, 0, 719, 0, - 0, 0, 720, 0, 0, 721, 0, 0, 722, 0, 723, 0, 0, 724, 0, 0, 0, 0, 725, 0, 0, 726, 0, 0, 727, 0, 0, 728, 0, 0, 729, 0, - 0, 730, 0, 0, 731, 0, 732, 0, 0, 733, 0, 0, 734, 0, 735, 0, 0, 736, 0, 0, 737, 0, 0, 738, 0, 0, 739, 0, 0, 740, 0, 0, - 741, 0, 742, 0, 0, 743, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 745, 0, 746, 0, 0, 747, 0, 0, 0, 748, 0, 0, 749, 0, 750, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 753, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 757, 0, 758, - 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 762, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 764, 0, - 0, 0, 0, 0, 765, 0, 0, 0, 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, 769, 0, 770, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, - 773, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 775, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, - 0, 0, 0, 778, 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 781, 0, 0, 0, 0, 782, 0, 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 787, 0, 0, 0, 0, 0, 788, 0, 0, 789, - 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, - 0, 0, 794, 0, 0, 795, 0, 0, 0, 0, 796, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 799, 0, - 0, 0, 0, 0, 0, 0, 800, 0, 801, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, - 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 0, 0, 0, 0, 0, 0, 808, 0, 0, 809, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 813, 0, - 814, 0, 0, 815, 0, 816, 0, 817, 0, 0, 818, 819, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 822, 0, 823, 0, 824, 0, 0, 825, 0, 0, - 0, 826, 0, 0, 0, 827, 0, 828, 0, 829, 0, 0, 830, 0, 0, 0, 831, 0, 0, 832, 0, 833, 0, 834, 835, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 836, 0, 837, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0049[64] = { + 0x0025080080402101ull, 0x8944804068008440ull, 0xA404404080290012ull, 0x044528215202954Aull, + 0x01100A0141000140ull, 0x0000100884444110ull, 0x0022282101450280ull, 0x1008440114014000ull, + 0x8904400200029404ull, 0x1011080200010010ull, 0x8000044200083400ull, 0x4000022000800206ull, + 0x20D0004022100103ull, 0x1A00400040110800ull, 0x2A89022028440010ull, 0x1050252204600000ull, + 0x021080005002AA14ull, 0x1254808AD4490840ull, 0x1254894024890841ull, 0x4A52949040435209ull, + 0x94A5294A5294A529ull, 0x114A5294A5294A52ull, 0x0505058208015080ull, 0x82828282C1040095ull, + 0x420080800000004Aull, 0x0448080010800110ull, 0x1102202000092902ull, 0x4040040000840000ull, + 0x4001040000220840ull, 0x0000088022214800ull, 0x092400010C920201ull, 0x010C012412412014ull, + 0x01412A9000244090ull, 0x2524000808000882ull, 0x2A802A849009140Aull, 0x5100004855005509ull, + 0x05944621A9548024ull, 0x0255090051890100ull, 0x6840840000000080ull, 0x0000142822490981ull, + 0x00002A1200020020ull, 0xAA48842100004021ull, 0x000000000014A2AAull, 0x0088000004800000ull, + 0x40421104A6002000ull, 0x2529200203028200ull, 0x44155440920054A9ull, 0x052A2930A9242A09ull, + 0xA4B555042AA94822ull, 0x1A102A0450000201ull, 0x4949208940804040ull, 0xA4A4949292495149ull, + 0x85224A4A48A49290ull, 0x5492A44492492504ull, 0x4924252455249152ull, 0x0000102524925252ull, + 0x000022000A44A000ull, 0x40452010A40200C0ull, 0x4001408114152210ull, 0x9048002005108828ull, + 0x50000C2480102004ull, 0x9014080880001140ull, 0x25510CA948010200ull, 0x000400A801A912A2ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0049[64] = { + 1u, 10u, 23u, 35u, 54u, 63u, 72u, 84u, 93u, 104u, 111u, 119u, 126u, 137u, 145u, 158u, + 169u, 181u, 199u, 216u, 236u, 262u, 286u, 299u, 315u, 322u, 330u, 341u, 346u, 353u, 361u, 373u, + 386u, 399u, 409u, 426u, 441u, 461u, 475u, 482u, 495u, 502u, 515u, 524u, 528u, 539u, 552u, 571u, + 592u, 616u, 628u, 642u, 666u, 687u, 708u, 730u, 745u, 753u, 765u, 778u, 790u, 800u, 810u, 826u, }; void recomp_unit_0049_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0049_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088C8000u; - entry_id = (entry_delta < 16332u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0049[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16332u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0049[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0049[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088C8000; @@ -1016,9 +923,7 @@ L_088C8000: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C816C; } @@ -1029,7 +934,6 @@ L_088C8020: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(619)))))); aot_gpr_5 = (aot_gpr_5 & 32u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C816C; } @@ -1080,7 +984,6 @@ L_088C80AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (static_cast(aot_gpr_4) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C80C8; } @@ -1114,7 +1017,6 @@ L_088C80D4: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; goto L_088C8128; @@ -1177,7 +1079,17 @@ L_088C8178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8198: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -1196,7 +1108,6 @@ L_088C8198: L_088C81BC: aot_gpr_6 = (static_cast(aot_gpr_6) < -962 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C8204; } @@ -1211,7 +1122,6 @@ L_088C81C8: AOT_REGCACHE_SYNC_OUT(); return; L_088C81D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8204; } @@ -1220,7 +1130,6 @@ L_088C81D8: L_088C81E0: ctx.gpr[7] = (0u | 280u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088C8204; } @@ -1234,7 +1143,6 @@ L_088C81EC: goto L_088C8210; L_088C81FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8204; } @@ -1247,7 +1155,17 @@ L_088C8204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8210: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (18493u << 16u); @@ -1285,9 +1203,7 @@ L_088C8254: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8344; } @@ -1298,9 +1214,7 @@ L_088C827C: aot_fpr_14 = std::bit_cast(aot_gpr_5); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8330; } @@ -1312,9 +1226,7 @@ L_088C8298: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8320; } @@ -1322,9 +1234,7 @@ L_088C8298: } L_088C82B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C830C; } @@ -1336,9 +1246,7 @@ L_088C82C8: aot_gpr_4 = (aot_gpr_4 | 42501u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C82FC; } @@ -1351,7 +1259,6 @@ L_088C82E8: goto L_088C8808; L_088C82F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8380; } @@ -1363,7 +1270,6 @@ L_088C82FC: goto L_088C8394; L_088C8304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8380; } @@ -1376,7 +1282,6 @@ L_088C830C: goto L_088C86D4; L_088C8318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8380; } @@ -1388,7 +1293,6 @@ L_088C8320: goto L_088C8694; L_088C8328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8380; } @@ -1401,7 +1305,6 @@ L_088C8330: goto L_088C85B0; L_088C833C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8380; } @@ -1413,9 +1316,7 @@ L_088C8344: aot_gpr_4 = (aot_gpr_4 | 42501u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8378; } @@ -1428,7 +1329,6 @@ L_088C8364: goto L_088C83E8; L_088C8370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8380; } @@ -1450,7 +1350,17 @@ L_088C8380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8394: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1461,7 +1371,6 @@ L_088C8394: goto L_088C8C20; L_088C83AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C83D8; } @@ -1474,7 +1383,6 @@ L_088C83B4: goto L_088C8910; L_088C83C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C83D8; } @@ -1494,7 +1402,17 @@ L_088C83D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C83E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -1529,7 +1447,6 @@ L_088C8420: aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fpr[24] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088C8460; @@ -1545,7 +1462,6 @@ L_088C8460: goto L_088C8CF4; L_088C8478: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C858C; } @@ -1639,7 +1555,6 @@ L_088C8538: goto L_088C8B24; L_088C8548: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[26]; goto L_088C8568; @@ -1684,7 +1599,17 @@ L_088C858C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C85B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(944)))))); @@ -1733,7 +1658,6 @@ L_088C8624: goto L_088C8CF4; L_088C8640: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C8680; } @@ -1775,7 +1699,17 @@ L_088C8680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8694: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1786,7 +1720,6 @@ L_088C8694: goto L_088C8C20; L_088C86AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C86C4; } @@ -1806,7 +1739,17 @@ L_088C86C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C86D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); @@ -1856,7 +1799,6 @@ L_088C8740: goto L_088C8910; L_088C8768: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C87F0; } @@ -1876,7 +1818,6 @@ L_088C8780: aot_gpr_4 = (20224u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[22]; goto L_088C87B8; @@ -1923,7 +1864,17 @@ L_088C87F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8808: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1936,7 +1887,6 @@ L_088C8808: goto L_088C8C20; L_088C8828: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088C88FC; } @@ -1969,7 +1919,6 @@ L_088C8844: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_088C8884; @@ -1986,7 +1935,6 @@ L_088C8884: { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_gpr_5 = (std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 & 255u); if (branch_taken) { @@ -2035,7 +1983,17 @@ L_088C88FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8910: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2082,8 +2040,6 @@ L_088C8984: aot_gpr_6 = (0u | 100u); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); @@ -2101,7 +2057,6 @@ L_088C89C0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C8A28; } @@ -2158,7 +2113,17 @@ L_088C8A34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8A4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -2246,7 +2211,17 @@ L_088C8B08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8B24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -2272,8 +2247,6 @@ L_088C8B5C: aot_gpr_5 = (0u | 100u); { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); @@ -2343,7 +2316,17 @@ L_088C8C04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2433,7 +2416,17 @@ L_088C8CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8CF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2543,7 +2536,17 @@ L_088C8DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8E10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_4 = (17204u << 16u); @@ -2556,7 +2559,6 @@ L_088C8E10: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_088C8E58; @@ -2581,11 +2583,20 @@ L_088C8E58: goto L_088C8E6C; L_088C8E6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8E74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); @@ -2612,9 +2623,7 @@ L_088C8EA4: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8EE4; } @@ -2638,7 +2647,6 @@ L_088C8ECC: } L_088C8EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8F54; } @@ -2698,15 +2706,23 @@ L_088C8F58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8F68: aot_gpr_4 = (14061u << 16u); aot_gpr_4 = (aot_gpr_4 | 34854u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8F94; } @@ -2729,11 +2745,20 @@ L_088C8F94: goto L_088C8FA0; L_088C8FA0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C8FA8: aot_gpr_4 = (2233u << 16u); aot_gpr_5 = (0u | 0u); @@ -2744,9 +2769,7 @@ L_088C8FB4: aot_gpr_6 = (aot_gpr_6 + aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C8FD8; } @@ -2754,7 +2777,6 @@ L_088C8FB4: } L_088C8FD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C8FF0; } @@ -2766,7 +2788,6 @@ L_088C8FD8: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088C8FB4; } @@ -2776,7 +2797,6 @@ L_088C8FF0: aot_gpr_6 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 5u); if (branch_taken) { @@ -2786,7 +2806,6 @@ L_088C8FF0: } L_088C9008: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088C902C; } @@ -2795,9 +2814,7 @@ L_088C9008: L_088C9010: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C903C; } @@ -2805,7 +2822,6 @@ L_088C9010: } L_088C9024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C9034; } @@ -2850,11 +2866,20 @@ L_088C9044: goto L_088C9070; L_088C9070: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9078: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2904,7 +2929,17 @@ L_088C90D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C90E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2950,7 +2985,17 @@ L_088C912C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9140: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -2963,7 +3008,6 @@ L_088C9140: L_088C914C: ctx.gpr[7] = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088C9168; } @@ -2977,11 +3021,20 @@ L_088C9158: goto L_088C9168; L_088C9168: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9170: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_4 = (aot_gpr_6 & 255u); @@ -2995,18 +3048,37 @@ L_088C9178: goto L_088C917C; L_088C917C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9184: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(26352), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C918C: aot_gpr_4 = (0u | 1u); aot_gpr_5 = (ctx.gpr[28] + aot_gpr_5); @@ -3015,7 +3087,17 @@ L_088C918C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C919C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3024,7 +3106,6 @@ L_088C919C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1540))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C91E4; } @@ -3038,7 +3119,6 @@ L_088C91BC: AOT_REGCACHE_SYNC_OUT(); return; L_088C91C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088C91D8; } @@ -3074,7 +3154,17 @@ L_088C91F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15976))); @@ -3093,7 +3183,17 @@ L_088C9218: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C922C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -3109,7 +3209,17 @@ L_088C9240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C924C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3130,7 +3240,17 @@ L_088C9268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9274: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3148,13 +3268,11 @@ L_088C9274: } L_088C9298: aot_gpr_31 = (0x088C92A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088C92A0u) goto L_088C92A0; AOT_REGCACHE_SYNC_OUT(); return; L_088C92A0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C92C8; } @@ -3164,7 +3282,6 @@ L_088C92AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C92D8; } @@ -3181,7 +3298,6 @@ L_088C92BC: } L_088C92C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C9344; } @@ -3189,7 +3305,6 @@ L_088C92C8: } L_088C92D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C9344; } @@ -3198,7 +3313,6 @@ L_088C92D0: L_088C92D8: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C92F0; } @@ -3217,7 +3331,6 @@ L_088C92F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7976))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088C9340; } @@ -3226,7 +3339,6 @@ L_088C92F0: L_088C9300: aot_gpr_5 = (ctx.gpr[17] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088C9338; } @@ -3238,7 +3350,6 @@ L_088C930C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C9330; } @@ -3284,7 +3395,17 @@ L_088C9344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9358: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3305,11 +3426,20 @@ L_088C9378: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-21032))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9390: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16352))); { const bool branch_taken = 0u == 0u; @@ -3327,7 +3457,6 @@ L_088C939C: AOT_REGCACHE_SYNC_OUT(); return; L_088C93A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3341,7 +3470,6 @@ L_088C93B0: AOT_REGCACHE_SYNC_OUT(); return; L_088C93BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3355,7 +3483,6 @@ L_088C93C4: AOT_REGCACHE_SYNC_OUT(); return; L_088C93D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3369,7 +3496,6 @@ L_088C93D8: AOT_REGCACHE_SYNC_OUT(); return; L_088C93E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3383,7 +3509,6 @@ L_088C93EC: AOT_REGCACHE_SYNC_OUT(); return; L_088C93F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3397,7 +3522,6 @@ L_088C9400: AOT_REGCACHE_SYNC_OUT(); return; L_088C940C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3411,7 +3535,6 @@ L_088C9414: AOT_REGCACHE_SYNC_OUT(); return; L_088C9420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3425,7 +3548,6 @@ L_088C9428: AOT_REGCACHE_SYNC_OUT(); return; L_088C9434: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3439,7 +3561,6 @@ L_088C943C: AOT_REGCACHE_SYNC_OUT(); return; L_088C9448: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3453,7 +3574,6 @@ L_088C9450: AOT_REGCACHE_SYNC_OUT(); return; L_088C945C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3467,7 +3587,6 @@ L_088C9464: AOT_REGCACHE_SYNC_OUT(); return; L_088C9470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3481,7 +3600,6 @@ L_088C9478: AOT_REGCACHE_SYNC_OUT(); return; L_088C9484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3495,7 +3613,6 @@ L_088C948C: AOT_REGCACHE_SYNC_OUT(); return; L_088C9498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3509,7 +3626,6 @@ L_088C94A0: AOT_REGCACHE_SYNC_OUT(); return; L_088C94AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3523,7 +3639,6 @@ L_088C94B4: AOT_REGCACHE_SYNC_OUT(); return; L_088C94C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3537,7 +3652,6 @@ L_088C94C8: AOT_REGCACHE_SYNC_OUT(); return; L_088C94D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3551,7 +3665,6 @@ L_088C94DC: AOT_REGCACHE_SYNC_OUT(); return; L_088C94E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3565,7 +3678,6 @@ L_088C94F0: AOT_REGCACHE_SYNC_OUT(); return; L_088C94FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3579,7 +3691,6 @@ L_088C9504: AOT_REGCACHE_SYNC_OUT(); return; L_088C9510: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3593,7 +3704,6 @@ L_088C9518: AOT_REGCACHE_SYNC_OUT(); return; L_088C9524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3607,7 +3717,6 @@ L_088C952C: AOT_REGCACHE_SYNC_OUT(); return; L_088C9538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3621,7 +3730,6 @@ L_088C9540: AOT_REGCACHE_SYNC_OUT(); return; L_088C954C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3635,7 +3743,6 @@ L_088C9554: AOT_REGCACHE_SYNC_OUT(); return; L_088C9560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3649,7 +3756,6 @@ L_088C9568: AOT_REGCACHE_SYNC_OUT(); return; L_088C9574: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3663,7 +3769,6 @@ L_088C957C: AOT_REGCACHE_SYNC_OUT(); return; L_088C9588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3677,7 +3782,6 @@ L_088C9590: AOT_REGCACHE_SYNC_OUT(); return; L_088C959C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3691,7 +3795,6 @@ L_088C95A4: AOT_REGCACHE_SYNC_OUT(); return; L_088C95B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3705,7 +3808,6 @@ L_088C95B8: AOT_REGCACHE_SYNC_OUT(); return; L_088C95C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C95CC; } @@ -3718,7 +3820,17 @@ L_088C95CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C95D8: if (ctx.gpr[8] != 0u) { ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -3746,7 +3858,6 @@ L_088C95F0: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_088C9638; } @@ -3773,7 +3884,17 @@ L_088C9638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9640: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -3797,11 +3918,20 @@ L_088C966C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20912))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9684: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3815,7 +3945,6 @@ L_088C969C: goto L_088C96A0; L_088C96A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C9710; } @@ -3880,7 +4009,17 @@ L_088C9710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C971C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -3904,11 +4043,20 @@ L_088C9748: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20760))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9760: aot_gpr_6 = (aot_gpr_4 + static_cast(1724)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3922,7 +4070,6 @@ L_088C9778: goto L_088C977C; L_088C977C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C980C; } @@ -4003,7 +4150,17 @@ L_088C980C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9818: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4045,7 +4202,6 @@ L_088C989C: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088C995C; } @@ -4077,9 +4233,7 @@ L_088C98BC: L_088C98E4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C995C; } @@ -4098,7 +4252,6 @@ L_088C9910: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C995C; } @@ -4127,7 +4280,6 @@ L_088C995C: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C989C; } @@ -4155,7 +4307,17 @@ L_088C9970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C99AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2237u << 16u); @@ -4164,7 +4326,6 @@ L_088C99AC: aot_gpr_6 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] == aot_gpr_6; - // nop if (branch_taken) { goto L_088C99E8; } @@ -4183,7 +4344,6 @@ L_088C99D8: ctx.gpr[7] = (ctx.gpr[7] + static_cast(32304)); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(2052))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088C9A40; } @@ -4196,7 +4356,6 @@ L_088C99E8: ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[7]); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(6260))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C9A40; } @@ -4220,7 +4379,6 @@ L_088C9A04: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(6308))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_088C9A34; } @@ -4234,7 +4392,6 @@ L_088C9A20: AOT_REGCACHE_SYNC_OUT(); return; L_088C9A2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088C9A40; } @@ -4253,7 +4410,17 @@ L_088C9A40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9A4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -4290,9 +4457,7 @@ L_088C9A94: aot_gpr_4 = (aot_gpr_4 | 8192u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C9B48; } @@ -4319,7 +4484,6 @@ L_088C9AE0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088C9B48; } @@ -4362,7 +4526,17 @@ L_088C9B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8632))); @@ -4405,7 +4579,6 @@ L_088C9BD8: aot_gpr_5 = (aot_gpr_6 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(144))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C9CA8; } @@ -4435,9 +4608,7 @@ L_088C9BF8: L_088C9C18: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088C9CA8; } @@ -4492,7 +4663,6 @@ L_088C9CA8: ctx.gpr[23] = (ctx.gpr[23] & 255u); aot_gpr_4 = (ctx.gpr[23] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088C9BD8; } @@ -4519,7 +4689,17 @@ L_088C9CC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9CF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -4541,7 +4721,6 @@ L_088C9CF8: L_088C9D2C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C9E00; } @@ -4570,7 +4749,6 @@ L_088C9D64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16352))); aot_gpr_4 = (aot_gpr_4 + static_cast(6028)); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_088C9E00; } @@ -4600,8 +4778,6 @@ L_088C9DAC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26340))); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[2])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[17]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (0u | 10u); aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(26304), static_cast(0u)); @@ -4635,7 +4811,17 @@ L_088C9E00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9E24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4653,7 +4839,6 @@ L_088C9E24: L_088C9E44: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088C9E68; } @@ -4689,7 +4874,17 @@ L_088C9E6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9E80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4717,7 +4912,17 @@ L_088C9EC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9ED4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -4730,7 +4935,6 @@ L_088C9ED4: L_088C9EE0: aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088C9F08; } @@ -4746,11 +4950,20 @@ L_088C9EEC: goto L_088C9F08; L_088C9F08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9F10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4760,7 +4973,6 @@ L_088C9F10: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C9FC8; } @@ -4769,7 +4981,6 @@ L_088C9F10: L_088C9F34: aot_gpr_5 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088C9FC8; } @@ -4852,7 +5063,17 @@ L_088C9FCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088C9FE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -4873,7 +5094,6 @@ L_088C9FE0: L_088CA010: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CA16C; } @@ -4896,7 +5116,6 @@ L_088CA038: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(26268))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CA16C; } @@ -4905,7 +5124,6 @@ L_088CA038: L_088CA048: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(26273))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CA16C; } @@ -4926,7 +5144,6 @@ L_088CA054: ctx.gpr[20] = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CA104; } @@ -4935,7 +5152,6 @@ L_088CA054: L_088CA090: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA0A4; } @@ -4943,7 +5159,6 @@ L_088CA090: } L_088CA09C: aot_gpr_31 = (0x088CA0A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CA0A4u) goto L_088CA0A4; AOT_REGCACHE_SYNC_OUT(); return; L_088CA0A4: @@ -4975,7 +5190,6 @@ L_088CA0C0: AOT_REGCACHE_SYNC_OUT(); return; L_088CA0D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CA104; } @@ -5013,8 +5227,6 @@ L_088CA12C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26340))); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[2])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[17]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (0u | 10u); aot_gpr_5 = (ctx.lo); @@ -5042,7 +5254,17 @@ L_088CA16C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA18C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -5063,7 +5285,6 @@ L_088CA18C: L_088CA1C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088CA1F4; } @@ -5077,7 +5298,6 @@ L_088CA1D4: AOT_REGCACHE_SYNC_OUT(); return; L_088CA1E0: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088CA1F4; } @@ -5104,7 +5324,6 @@ L_088CA1F4: } L_088CA204: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088CA24C; } @@ -5117,7 +5336,6 @@ L_088CA20C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CA230; } @@ -5125,7 +5343,6 @@ L_088CA20C: } L_088CA228: aot_gpr_31 = (0x088CA230u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 405u, 0x08ABA450u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CA230u) goto L_088CA230; AOT_REGCACHE_SYNC_OUT(); return; L_088CA230: @@ -5155,7 +5372,17 @@ L_088CA24C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA270: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -5168,7 +5395,6 @@ L_088CA270: L_088CA27C: aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088CA2AC; } @@ -5179,7 +5405,6 @@ L_088CA288: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26273))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CA2A4; } @@ -5219,7 +5444,6 @@ L_088CA2B4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_6); aot_gpr_4 = (aot_gpr_5 & 63u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA2E4; } @@ -5243,11 +5467,20 @@ L_088CA2E4: } L_088CA2EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA2F4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -5260,7 +5493,6 @@ L_088CA2F4: L_088CA300: aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088CA330; } @@ -5271,7 +5503,6 @@ L_088CA30C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26273))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CA328; } @@ -5311,7 +5542,6 @@ L_088CA338: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_6); aot_gpr_4 = (aot_gpr_5 & 63u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA368; } @@ -5335,11 +5565,20 @@ L_088CA368: } L_088CA370: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA378: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -5393,7 +5632,6 @@ L_088CA3E0: AOT_REGCACHE_SYNC_OUT(); return; L_088CA3F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CA408; } @@ -5413,7 +5651,17 @@ L_088CA408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA414: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5449,7 +5697,6 @@ L_088CA450: goto L_088CA494; L_088CA458: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CA46C; } @@ -5458,7 +5705,6 @@ L_088CA458: L_088CA460: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7700))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA47C; } @@ -5495,7 +5741,17 @@ L_088CA480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA494: aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_4 = (ctx.gpr[28] + aot_gpr_4); @@ -5504,7 +5760,17 @@ L_088CA494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA4A4: ctx.gpr[2] = (0u | 0u); goto L_088CA4A8; @@ -5512,7 +5778,6 @@ L_088CA4A8: aot_gpr_4 = (ctx.gpr[2] + ctx.gpr[28]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8656))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CA4D0; } @@ -5522,7 +5787,6 @@ L_088CA4B8: ctx.gpr[2] = (ctx.gpr[2] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[2]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA4A8; } @@ -5530,7 +5794,6 @@ L_088CA4B8: } L_088CA4C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CA4DC; } @@ -5550,11 +5813,20 @@ L_088CA4DC: goto L_088CA4E0; L_088CA4E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA4E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); @@ -5584,7 +5856,17 @@ L_088CA520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA540: ctx.gpr[2] = (0u | 0u); aot_gpr_5 = (0u | 0u); @@ -5594,7 +5876,6 @@ L_088CA54C: aot_gpr_6 = (aot_gpr_5 + ctx.gpr[28]); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(8656))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_088CA560; } @@ -5607,7 +5888,6 @@ L_088CA560: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088CA54C; } @@ -5615,11 +5895,20 @@ L_088CA560: } L_088CA570: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -5639,7 +5928,6 @@ L_088CA578: L_088CA5A0: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(8648))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_088CA5C8; } @@ -5650,7 +5938,6 @@ L_088CA5AC: ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(26268))); ctx.gpr[8] = (0u | 2u); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_088CA5D0; } @@ -5658,11 +5945,9 @@ L_088CA5AC: } L_088CA5C0: aot_gpr_31 = (0x088CA5C8u); - // nop goto L_088CA5E4; L_088CA5C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CA5D8; } @@ -5679,7 +5964,17 @@ L_088CA5D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA5E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5739,7 +6034,17 @@ L_088CA61C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA6A8: aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (ctx.gpr[28] + aot_gpr_4); @@ -5769,7 +6074,6 @@ L_088CA6D8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CA6F4; } @@ -5788,11 +6092,20 @@ L_088CA6F4: goto L_088CA6F8; L_088CA6F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA700: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -5819,7 +6132,6 @@ L_088CA72C: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA720; } @@ -5828,7 +6140,6 @@ L_088CA72C: L_088CA740: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26309))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA758; } @@ -5837,7 +6148,6 @@ L_088CA740: L_088CA74C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26310))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CA764; } @@ -5856,7 +6166,6 @@ L_088CA764: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26319))); aot_gpr_5 = (static_cast(aot_gpr_4) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CA794; } @@ -5868,7 +6177,6 @@ L_088CA774: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26319))); aot_gpr_4 = (static_cast(aot_gpr_4) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA794; } @@ -5890,14 +6198,34 @@ L_088CA794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA7A8: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); @@ -5957,7 +6285,17 @@ L_088CA7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CA814: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5989,7 +6327,6 @@ L_088CA844: L_088CA884: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA8AC; } @@ -6006,7 +6343,6 @@ L_088CA890: goto L_088CA8A4; L_088CA8A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAC7C; } @@ -6014,7 +6350,6 @@ L_088CA8A4: } L_088CA8AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAD64; } @@ -6039,7 +6374,6 @@ L_088CA8B4: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(38))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA994; } @@ -6061,7 +6395,6 @@ L_088CA914: ctx.gpr[7] = (ctx.gpr[7] + aot_gpr_4); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088CA980; } @@ -6116,7 +6449,6 @@ L_088CA9A8: aot_gpr_4 = (aot_gpr_4 + static_cast(-31073)); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CA9D8; } @@ -6156,7 +6488,6 @@ L_088CA9EC: goto L_088CA9F4; L_088CA9F4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088CAC7C; } @@ -6164,7 +6495,6 @@ L_088CA9F4: } L_088CA9FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAA1C; } @@ -6180,7 +6510,6 @@ L_088CAA04: } L_088CAA0C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CAC7C; } @@ -6188,7 +6517,6 @@ L_088CAA0C: } L_088CAA14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAC7C; } @@ -6196,7 +6524,6 @@ L_088CAA14: } L_088CAA1C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CAA3C; } @@ -6211,7 +6538,6 @@ L_088CAA24: AOT_REGCACHE_SYNC_OUT(); return; L_088CAA34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAA48; } @@ -6225,7 +6551,6 @@ L_088CAA3C: AOT_REGCACHE_SYNC_OUT(); return; L_088CAA48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAC7C; } @@ -6377,7 +6702,6 @@ L_088CABDC: aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(37), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(38))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CAC68; } @@ -6395,7 +6719,6 @@ L_088CAC34: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-23761))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CAC68; } @@ -6412,7 +6735,6 @@ L_088CAC68: AOT_REGCACHE_SYNC_OUT(); return; L_088CAC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CAC7C; } @@ -6421,7 +6743,6 @@ L_088CAC74: L_088CAC7C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1962))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CACA0; } @@ -6471,7 +6792,6 @@ L_088CACD8: aot_gpr_5 = (ctx.gpr[18] + aot_gpr_5); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(37)))))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088CAD24; } @@ -6514,7 +6834,6 @@ L_088CAD44: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_6 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088CAD44; } @@ -6538,7 +6857,17 @@ L_088CAD64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CAD84: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26341))); @@ -6572,7 +6901,6 @@ L_088CADC0: AOT_REGCACHE_SYNC_OUT(); return; L_088CADCC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6586,7 +6914,6 @@ L_088CADD4: AOT_REGCACHE_SYNC_OUT(); return; L_088CADE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6601,7 +6928,6 @@ L_088CADE8: L_088CADF4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_088CAE14; } @@ -6610,7 +6936,6 @@ L_088CADF4: L_088CAE00: aot_gpr_4 = (static_cast(aot_gpr_4) < -1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6618,7 +6943,6 @@ L_088CAE00: } L_088CAE0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6626,7 +6950,6 @@ L_088CAE0C: } L_088CAE14: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088CB100; } @@ -6640,7 +6963,6 @@ L_088CAE1C: AOT_REGCACHE_SYNC_OUT(); return; L_088CAE28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6667,7 +6989,6 @@ L_088CAE38: L_088CAE64: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6676,7 +6997,6 @@ L_088CAE64: L_088CAE70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(96))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088CB064; } @@ -6689,7 +7009,6 @@ L_088CAE7C: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CB064; } @@ -6707,7 +7026,6 @@ L_088CAE98: } L_088CAEA8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CAEC8; } @@ -6720,7 +7038,6 @@ L_088CAEB0: AOT_REGCACHE_SYNC_OUT(); return; L_088CAEB8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088CAEC8; } @@ -6728,7 +7045,6 @@ L_088CAEB8: } L_088CAEC0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088CB040; } @@ -6736,7 +7052,6 @@ L_088CAEC0: } L_088CAEC8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088CAF00; } @@ -6771,7 +7086,6 @@ L_088CAEF8: L_088CAF00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CAF2C; } @@ -6799,7 +7113,6 @@ L_088CAF24: } L_088CAF2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -6821,7 +7134,6 @@ L_088CAF48: L_088CAF54: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_088CAF74; } @@ -6830,7 +7142,6 @@ L_088CAF54: L_088CAF60: aot_gpr_4 = (static_cast(aot_gpr_4) < -1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CB064; } @@ -6838,7 +7149,6 @@ L_088CAF60: } L_088CAF6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB064; } @@ -6846,7 +7156,6 @@ L_088CAF6C: } L_088CAF74: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088CB064; } @@ -6869,7 +7178,6 @@ L_088CAF90: L_088CAF94: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(4312))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088CAFB4; } @@ -6878,7 +7186,6 @@ L_088CAF94: L_088CAFA0: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(4252))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088CAFB4; } @@ -6904,7 +7211,6 @@ L_088CAFB4: } L_088CAFC4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088CB038; } @@ -6924,7 +7230,6 @@ L_088CAFD4: AOT_REGCACHE_SYNC_OUT(); return; L_088CAFE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB038; } @@ -6937,7 +7242,6 @@ L_088CAFE8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CB038; } @@ -6947,7 +7251,6 @@ L_088CB004: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CB038; } @@ -6959,11 +7262,20 @@ L_088CB014: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20608))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CB02C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(648))); aot_gpr_31 = (0x088CB038u); @@ -6972,7 +7284,6 @@ L_088CB02C: AOT_REGCACHE_SYNC_OUT(); return; L_088CB038: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB064; } @@ -6994,7 +7305,6 @@ L_088CB04C: AOT_REGCACHE_SYNC_OUT(); return; L_088CB054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB064; } @@ -7012,7 +7322,6 @@ L_088CB064: AOT_REGCACHE_SYNC_OUT(); return; L_088CB06C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -7023,7 +7332,6 @@ L_088CB074: ctx.gpr[20] = (ctx.gpr[20] + static_cast(-2)); aot_gpr_4 = (ctx.gpr[20] < static_cast(32) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CB0D0; } @@ -7035,11 +7343,20 @@ L_088CB088: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[20]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20568))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CB0A0: { const bool branch_taken = 0u == 0u; ctx.gpr[17] = (0u | 61u); @@ -7093,7 +7410,6 @@ L_088CB0D0: goto L_088CB0D4; L_088CB0D4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -7102,7 +7418,6 @@ L_088CB0D4: L_088CB0DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(27028))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088CB100; } @@ -7116,7 +7431,6 @@ L_088CB0E8: AOT_REGCACHE_SYNC_OUT(); return; L_088CB0F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CB100; } @@ -7141,7 +7455,17 @@ L_088CB100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CB124: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[17]); @@ -7164,7 +7488,6 @@ L_088CB124: AOT_REGCACHE_SYNC_OUT(); return; L_088CB170: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_088CB1B4; } @@ -7174,7 +7497,6 @@ L_088CB178: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_4 = (aot_gpr_4 < static_cast(17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CB1AC; } @@ -7187,14 +7509,22 @@ L_088CB188: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20440))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CB1A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB1B4; } @@ -7202,7 +7532,6 @@ L_088CB1A4: } L_088CB1AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB794; } @@ -7260,7 +7589,6 @@ L_088CB1F0: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CB238; } @@ -7328,7 +7656,6 @@ L_088CB278: L_088CB280: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CB2B4; } @@ -7338,7 +7665,6 @@ L_088CB28C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CB788; } @@ -7350,11 +7676,20 @@ L_088CB29C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20368))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CB2B4: aot_gpr_4 = (ctx.gpr[17] | 0u); aot_gpr_31 = (0x088CB2C0u); @@ -7375,7 +7710,6 @@ L_088CB2CC: AOT_REGCACHE_SYNC_OUT(); return; L_088CB2D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB794; } @@ -7395,7 +7729,6 @@ L_088CB2EC: AOT_REGCACHE_SYNC_OUT(); return; L_088CB2F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB788; } @@ -7414,7 +7747,6 @@ L_088CB30C: AOT_REGCACHE_SYNC_OUT(); return; L_088CB318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB788; } @@ -7440,7 +7772,6 @@ L_088CB330: } L_088CB338: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CB3B0; } @@ -7478,7 +7809,6 @@ L_088CB370: AOT_REGCACHE_SYNC_OUT(); return; L_088CB37C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB3D4; } @@ -7503,7 +7833,6 @@ L_088CB39C: AOT_REGCACHE_SYNC_OUT(); return; L_088CB3A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB3D4; } @@ -7528,7 +7857,6 @@ L_088CB3C8: AOT_REGCACHE_SYNC_OUT(); return; L_088CB3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB788; } @@ -7548,7 +7876,6 @@ L_088CB3E8: AOT_REGCACHE_SYNC_OUT(); return; L_088CB3F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB788; } @@ -7559,7 +7886,6 @@ L_088CB3FC: aot_gpr_5 = (0u | 278u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CB424; } @@ -7572,7 +7898,6 @@ L_088CB410: goto L_088CB7B0; L_088CB41C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB430; } @@ -7604,7 +7929,6 @@ L_088CB448: AOT_REGCACHE_SYNC_OUT(); return; L_088CB454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB788; } @@ -7631,13 +7955,11 @@ L_088CB478: AOT_REGCACHE_SYNC_OUT(); return; L_088CB484: aot_gpr_31 = (0x088CB48Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CB48Cu) goto L_088CB48C; AOT_REGCACHE_SYNC_OUT(); return; L_088CB48C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CB4AC; } @@ -7651,7 +7973,6 @@ L_088CB498: AOT_REGCACHE_SYNC_OUT(); return; L_088CB4A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB4B8; } @@ -7687,7 +8008,6 @@ L_088CB4D4: AOT_REGCACHE_SYNC_OUT(); return; L_088CB4E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CB570; } @@ -7696,9 +8016,7 @@ L_088CB4E0: L_088CB4E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CB508; } @@ -7798,7 +8116,6 @@ L_088CB598: L_088CB5A8: aot_gpr_5 = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CB5F8; } @@ -7806,7 +8123,6 @@ L_088CB5A8: } L_088CB5B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB618; } @@ -7821,7 +8137,6 @@ L_088CB5BC: L_088CB5C4: aot_gpr_4 = (static_cast(aot_gpr_4) < -970 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CB618; } @@ -7841,7 +8156,6 @@ L_088CB5DC: AOT_REGCACHE_SYNC_OUT(); return; L_088CB5E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB774; } @@ -7849,7 +8163,6 @@ L_088CB5E8: } L_088CB5F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CB618; } @@ -7869,7 +8182,6 @@ L_088CB604: AOT_REGCACHE_SYNC_OUT(); return; L_088CB610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB774; } @@ -7891,7 +8203,6 @@ L_088CB620: L_088CB630: aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CB678; } @@ -7916,7 +8227,6 @@ L_088CB654: AOT_REGCACHE_SYNC_OUT(); return; L_088CB660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB774; } @@ -7924,7 +8234,6 @@ L_088CB660: } L_088CB668: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CB678; } @@ -7932,7 +8241,6 @@ L_088CB668: } L_088CB670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CB774; } @@ -7942,7 +8250,6 @@ L_088CB678: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 251u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CB694; } @@ -7961,7 +8268,6 @@ L_088CB694: AOT_REGCACHE_SYNC_OUT(); return; L_088CB6A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CB774; } @@ -7976,9 +8282,7 @@ L_088CB6A8: L_088CB6B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CB6D4; } @@ -8022,7 +8326,6 @@ L_088CB704: AOT_REGCACHE_SYNC_OUT(); return; L_088CB710: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CB724; } @@ -8042,7 +8345,6 @@ L_088CB724: AOT_REGCACHE_SYNC_OUT(); return; L_088CB730: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CB744; } @@ -8108,7 +8410,17 @@ L_088CB794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CB7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); @@ -8147,7 +8459,6 @@ L_088CB7B0: } L_088CB834: aot_gpr_31 = (0x088CB83Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CB83Cu) goto L_088CB83C; AOT_REGCACHE_SYNC_OUT(); return; L_088CB83C: @@ -8256,9 +8567,7 @@ L_088CB8B4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CB91C; } @@ -8298,7 +8607,6 @@ L_088CB944: L_088CB968: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CBA10; } @@ -8317,7 +8625,6 @@ L_088CB97C: aot_gpr_5 = (0u | 222u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CB9C8; } @@ -8338,7 +8645,6 @@ L_088CB990: L_088CB9B4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CBA10; } @@ -8356,7 +8662,6 @@ L_088CB9C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CB9F8; } @@ -8370,7 +8675,6 @@ L_088CB9D8: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[24] = ctx.fpr[24] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CBA10; } @@ -8387,9 +8691,7 @@ L_088CB9F8: L_088CBA10: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CBA50; } @@ -8399,7 +8701,6 @@ L_088CBA24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBA48; } @@ -8408,7 +8709,6 @@ L_088CBA24: L_088CBA34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBA48; } @@ -8431,9 +8731,7 @@ L_088CBA50: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CBA70; } @@ -8455,7 +8753,6 @@ L_088CBA80: aot_gpr_4 = (16928u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17046u << 16u); if (branch_taken) { @@ -8468,7 +8765,6 @@ L_088CBA9C: aot_gpr_4 = (16840u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16840u << 16u); if (branch_taken) { @@ -8513,7 +8809,6 @@ L_088CBAF8: goto L_088CBB0C; L_088CBB0C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CBCF0; } @@ -8532,7 +8827,6 @@ L_088CBB2C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CBCF0; } @@ -8543,7 +8837,6 @@ L_088CBB3C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(52), aot_gpr_4); aot_gpr_4 = (ctx.gpr[20] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBC94; } @@ -8594,7 +8887,6 @@ L_088CBB94: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (20224u << 16u); if (branch_taken) { @@ -8644,7 +8936,6 @@ L_088CBC08: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 949u); if (branch_taken) { @@ -8748,7 +9039,6 @@ L_088CBCF8: AOT_REGCACHE_SYNC_OUT(); return; L_088CBD18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CBD8C; } @@ -8758,7 +9048,6 @@ L_088CBD20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CBD7C; } @@ -8826,7 +9115,6 @@ L_088CBD30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CBD8C; } @@ -8855,9 +9143,7 @@ L_088CBD8C: aot_gpr_4 = (aot_gpr_4 | 8192u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0050_entry, 50u, 141u, 0x088CCD08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8868,9 +9154,7 @@ L_088CBDAC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CBDD0; } @@ -8911,7 +9195,6 @@ L_088CBDFC: { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1300u); if (branch_taken) { @@ -8954,13 +9237,11 @@ L_088CBE6C: goto L_088CBE78; L_088CBE78: aot_gpr_31 = (0x088CBE80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CBE80u) goto L_088CBE80; AOT_REGCACHE_SYNC_OUT(); return; L_088CBE80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CBEAC; } @@ -8968,7 +9249,6 @@ L_088CBE80: } L_088CBE8C: { const bool branch_taken = static_cast(ctx.gpr[18]) > 0; - // nop if (branch_taken) { goto L_088CBE9C; } @@ -8976,7 +9256,6 @@ L_088CBE8C: } L_088CBE94: { const bool branch_taken = static_cast(ctx.gpr[21]) <= 0; - // nop if (branch_taken) { goto L_088CBEAC; } @@ -8985,7 +9264,6 @@ L_088CBE94: L_088CBE9C: aot_gpr_4 = (ctx.gpr[22] < static_cast(1300) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBEAC; } @@ -8999,7 +9277,6 @@ L_088CBEAC: aot_gpr_5 = (0u | 275u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CBF5C; } @@ -9014,7 +9291,6 @@ L_088CBEC0: AOT_REGCACHE_SYNC_OUT(); return; L_088CBED0: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_088CBEE0; } @@ -9022,7 +9298,6 @@ L_088CBED0: } L_088CBED8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CBF5C; } @@ -9030,13 +9305,11 @@ L_088CBED8: } L_088CBEE0: aot_gpr_31 = (0x088CBEE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CBEE8u) goto L_088CBEE8; AOT_REGCACHE_SYNC_OUT(); return; L_088CBEE8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBF30; } @@ -9046,7 +9319,6 @@ L_088CBEF4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 61u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088CBF30; } @@ -9056,7 +9328,6 @@ L_088CBF04: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 59u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088CBF30; } @@ -9064,12 +9335,10 @@ L_088CBF04: } L_088CBF14: aot_gpr_31 = (0x088CBF1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CBF1Cu) goto L_088CBF1C; AOT_REGCACHE_SYNC_OUT(); return; L_088CBF1C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088CBF30; } @@ -9085,7 +9354,6 @@ L_088CBF30: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBF54; } @@ -9094,7 +9362,6 @@ L_088CBF30: L_088CBF40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CBF54; } @@ -9135,7 +9402,6 @@ L_088CBF60: } L_088CBF8C: { const bool branch_taken = static_cast(ctx.gpr[18]) > 0; - // nop if (branch_taken) { goto L_088CBF9C; } @@ -9176,7 +9442,6 @@ L_088CBFC8: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (20224u << 16u); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0050.cpp b/profiles/vcs/generated/generated_unit_0050.cpp index 54fe6b5..eee3ff2 100644 --- a/profiles/vcs/generated/generated_unit_0050.cpp +++ b/profiles/vcs/generated/generated_unit_0050.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0050[4093] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 13, - 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 18, 19, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 0, 21, 0, 22, 0, 0, 0, 0, 0, 23, 24, 0, 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, - 33, 0, 0, 34, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, - 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 74, 0, 0, 0, - 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, - 0, 0, 0, 82, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 87, 88, 0, 89, 0, 0, 0, 0, 0, - 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 112, 0, 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, - 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, - 0, 124, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 0, 0, 129, 130, 0, 0, 0, 0, - 131, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 134, 135, 0, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, - 0, 0, 141, 0, 0, 0, 142, 0, 0, 143, 0, 144, 0, 145, 0, 0, 0, 146, 0, 0, 147, 0, 148, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, - 0, 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 0, 155, 0, 156, 0, 157, 0, 0, 158, 0, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 161, 0, 162, 163, 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, - 0, 0, 0, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, - 0, 176, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 0, 183, - 184, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, 0, 0, 188, 189, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 0, - 0, 192, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, - 0, 196, 0, 0, 197, 0, 198, 0, 0, 0, 199, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, - 0, 203, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 0, 207, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, - 0, 0, 211, 0, 212, 0, 0, 213, 0, 214, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 219, 220, - 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 0, 224, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, - 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 231, 0, 232, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 236, - 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 240, 0, 241, - 0, 0, 0, 242, 243, 0, 0, 244, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 253, 254, 0, 0, 0, 255, 0, 0, 0, 256, 0, 257, 0, 0, 258, 0, 0, 0, 259, 0, - 0, 0, 260, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, - 0, 270, 0, 271, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 276, 0, - 0, 0, 277, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 280, 0, 0, 0, 281, 282, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 294, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 297, 0, 298, 0, 0, 299, 0, 0, 300, 301, 0, - 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 310, - 0, 0, 311, 0, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, - 316, 317, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 321, 0, 0, 0, 322, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, 325, 0, 326, 0, 0, 327, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, - 0, 331, 0, 0, 332, 0, 333, 0, 0, 334, 0, 335, 0, 0, 0, 336, 0, 0, 0, 337, 0, 338, 0, 0, 339, 0, 0, 0, 340, 0, 0, 0, - 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 343, 0, 344, 0, 0, 0, 345, 0, 346, 0, 0, 347, 0, 0, 0, 348, 0, 0, 349, 0, 0, 350, - 0, 0, 351, 0, 352, 0, 353, 0, 354, 0, 0, 355, 0, 356, 0, 357, 0, 358, 0, 0, 359, 360, 0, 0, 361, 0, 362, 0, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 370, 0, - 0, 0, 0, 371, 0, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 376, 0, 0, 0, 377, 0, 378, 0, 379, 0, 380, 0, 0, - 0, 0, 381, 0, 382, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, 386, 0, 0, 0, 387, 0, 388, 0, 0, 0, 0, 389, 0, 390, - 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, - 399, 400, 0, 0, 0, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 404, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, - 0, 408, 0, 0, 0, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, - 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 418, 0, 419, 0, 420, 0, 421, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 424, 0, 425, 0, 0, 0, 426, 0, - 427, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 429, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, - 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, - 0, 439, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 0, 0, - 445, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, - 0, 452, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 0, 0, 456, 0, - 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, - 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 464, 0, 465, 0, 466, 0, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 480, 481, 0, 0, 482, 0, 0, 0, 0, - 0, 0, 0, 483, 0, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 490, - 0, 0, 491, 0, 492, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 497, - 0, 0, 498, 0, 499, 500, 0, 501, 0, 502, 0, 0, 503, 0, 0, 504, 0, 505, 0, 506, 507, 0, 508, 509, 0, 0, 0, 0, 0, 0, 0, 0, - 510, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 513, 0, 0, 514, 0, 0, 515, 0, 516, 0, 517, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, - 0, 521, 0, 0, 522, 0, 0, 0, 523, 0, 524, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, - 0, 0, 0, 0, 528, 0, 0, 0, 529, 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, - 534, 0, 0, 0, 535, 0, 0, 536, 537, 0, 538, 539, 0, 0, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 544, 0, 0, 0, 0, 0, 545, - 0, 0, 546, 0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 549, 0, 550, 0, 0, 551, 0, 0, 0, 552, 553, 0, 0, 0, 0, 0, 0, 554, 0, - 555, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, 567, 0, 0, 568, 0, - 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, - 0, 574, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 0, 0, 0, 579, 0, 580, 581, 0, 0, 582, 0, 0, 0, 583, 0, 0, 584, - 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 587, 0, 588, 0, 0, 589, 0, 0, 590, 591, 0, 0, 0, 0, 0, 0, 0, - 0, 592, 0, 593, 0, 0, 594, 0, 0, 0, 0, 595, 0, 596, 0, 597, 598, 0, 0, 0, 599, 0, 600, 0, 0, 0, 0, 0, 0, 601, 0, 0, - 602, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 607, 0, 0, - 608, 0, 609, 610, 0, 611, 0, 612, 0, 0, 613, 0, 0, 0, 0, 0, 0, 614, 0, 0, 615, 616, 0, 617, 0, 0, 618, 0, 619, 620, 0, 0, - 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 627, 628, 0, 0, 0, - 0, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 631, 632, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 635, 0, - 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, - 640, 0, 0, 0, 0, 0, 641, 0, 0, 642, 643, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 647, 0, 648, 0, - 0, 0, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 653, 0, 0, - 0, 654, 0, 655, 0, 0, 0, 656, 657, 0, 658, 0, 659, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 662, 0, 0, 0, 0, 0, - 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 668, 0, 0, 669, 0, 0, 670, 0, 671, 672, 0, 0, 0, 673, 0, 674, 0, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 677, - 0, 0, 678, 0, 0, 679, 0, 680, 0, 681, 0, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 684, 0, 0, 0, 685, 0, 686, 0, 0, 0, 0, - 0, 0, 687, 0, 0, 0, 688, 689, 0, 690, 0, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 695, 0, - 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 700, 0, 0, 0, 701, 0, 0, - 0, 702, 0, 0, 703, 0, 0, 0, 704, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 707, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 710, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 713, 0, 714, - 715, 0, 0, 0, 0, 0, 0, 716, 717, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 725, - 0, 726, 727, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 731, 732, 733, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, - 0, 0, 737, 0, 738, 0, 739, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 744, 0, 0, 0, - 0, 745, 0, 746, 0, 747, 0, 748, 0, 0, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 752, 0, 0, 0, - 0, 753, 0, 754, 0, 755, 0, 756, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 759, - 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 766, 0, 767, 768, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 771, 0, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, - 0, 775, 0, 776, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 781, 0, 782, 0, 0, 0, 783, - 0, 784, 0, 785, 0, 786, 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 0, 789, 0, 790, 0, 0, 0, 0, 0, 791, 792, 0, 793, 0, 0, 794, - 0, 795, 0, 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, 0, 0, 0, 798, 799, 0, 800, 0, 0, 0, 0, 0, 0, 801, 802, 0, 0, 0, 803, - 804, 0, 0, 0, 0, 0, 805, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 808, 0, 0, 0, 0, 0, - 0, 0, 0, 809, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, 0, 0, 812, 0, 0, 0, 0, 813, 0, - 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 817, 0, 0, 818, 0, 0, 0, 0, 819, 0, 0, 820, 821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, - 0, 0, 823, 0, 0, 0, 0, 824, 0, 0, 0, 0, 825, 0, 0, 0, 826, 0, 827, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 829, 830, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 832, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 834, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0050[64] = { + 0x9082900204009209ull, 0x1220B05043048090ull, 0x0820050921008200ull, 0x0020881120001220ull, + 0x0200480204001440ull, 0x2005400600002801ull, 0x1480102004904800ull, 0x0582821824048484ull, + 0x0400890804100091ull, 0x0840800480004401ull, 0x10024824001002A0ull, 0x0C120242420A4008ull, + 0x200140000090C141ull, 0x8000008000D22A44ull, 0x000044D00292A448ull, 0x20000208080A8444ull, + 0x0458282182821422ull, 0x8001245214000022ull, 0x1200100016000082ull, 0x202C1410C1410A94ull, + 0xA8000820A2045842ull, 0x0081010000801498ull, 0x0092002444A23500ull, 0x4804408A50102002ull, + 0x00891408810C4284ull, 0x64A44000A8002000ull, 0x820011001000440Aull, 0x8A40020340010884ull, + 0x11288A5241295400ull, 0x1532A95492251488ull, 0x2A8AA08854054020ull, 0x088A2450A1448A14ull, + 0x1000150210861143ull, 0x45482A8001011041ull, 0x0A00444220142201ull, 0x04402885044000AAull, + 0x2200084241100022ull, 0x04A0801008825448ull, 0x09A0000000200680ull, 0x9110009480849148ull, + 0x0352490100DA92B4ull, 0x4040451280001000ull, 0x82A88D912080A110ull, 0x0884484140C4A444ull, + 0x010A01204A212010ull, 0x0192890091341492ull, 0x204048052051A84Aull, 0x1A11012234B204ADull, + 0x1000901044083088ull, 0x2041028050841641ull, 0x022108010480558Aull, 0x0A2902A480A51A48ull, + 0x22204090482212C4ull, 0xA801044000885112ull, 0x8042204008220181ull, 0x4000800020384056ull, + 0x140208AA14024454ull, 0x00044008810002AAull, 0x000101A000100408ull, 0x8A08442A08209200ull, + 0x8C0B0502960A052Aull, 0x4240020804400441ull, 0x8000321200005010ull, 0x10001A0064051084ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0050[64] = { + 1u, 14u, 29u, 39u, 48u, 56u, 65u, 75u, 90u, 100u, 108u, 118u, 131u, 141u, 152u, 166u, + 176u, 192u, 203u, 211u, 228u, 242u, 251u, 265u, 277u, 291u, 302u, 311u, 323u, 341u, 364u, 381u, + 399u, 413u, 427u, 439u, 452u, 462u, 475u, 483u, 498u, 519u, 528u, 546u, 562u, 574u, 592u, 608u, + 629u, 640u, 654u, 668u, 687u, 702u, 715u, 726u, 737u, 753u, 763u, 770u, 784u, 804u, 814u, 823u, }; void recomp_unit_0050_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0050_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088CC000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0050[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0050[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0050[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088CC000; @@ -1047,7 +954,6 @@ L_088CC03C: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 3713u); if (branch_taken) { @@ -1096,9 +1002,7 @@ L_088CC0C4: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CC164; } @@ -1142,7 +1046,6 @@ L_088CC11C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -1175,7 +1078,6 @@ L_088CC164: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23760))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CC198; } @@ -1229,7 +1131,6 @@ L_088CC1D4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CC374; } @@ -1255,7 +1156,6 @@ L_088CC1F0: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (18042u << 16u); if (branch_taken) { @@ -1300,7 +1200,6 @@ L_088CC260: L_088CC274: aot_gpr_4 = (ctx.gpr[20] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CC2A8; } @@ -1309,7 +1208,6 @@ L_088CC274: L_088CC280: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(296))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CC2A0; } @@ -1343,7 +1241,6 @@ L_088CC2A8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(60), static_cast(0u)); if (branch_taken) { @@ -1384,7 +1281,6 @@ L_088CC314: L_088CC324: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CC374; } @@ -1434,7 +1330,6 @@ L_088CC390: aot_gpr_4 = (16880u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16128u << 16u); if (branch_taken) { @@ -1456,7 +1351,6 @@ L_088CC3BC: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16128u << 16u); if (branch_taken) { @@ -1514,7 +1408,6 @@ L_088CC430: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17723u << 16u); if (branch_taken) { @@ -1565,7 +1458,6 @@ L_088CC4B8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(60), static_cast(0u)); if (branch_taken) { @@ -1649,7 +1541,6 @@ L_088CC588: } L_088CC5B8: { const bool branch_taken = static_cast(ctx.gpr[18]) > 0; - // nop if (branch_taken) { goto L_088CC5C8; } @@ -1690,7 +1581,6 @@ L_088CC5F4: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (20224u << 16u); if (branch_taken) { @@ -1740,7 +1630,6 @@ L_088CC668: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_7); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 1857u); if (branch_taken) { @@ -1789,9 +1678,7 @@ L_088CC6F0: aot_gpr_5 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CC790; } @@ -1835,7 +1722,6 @@ L_088CC748: aot_fpr_14 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (20224u << 16u); if (branch_taken) { @@ -1868,7 +1754,6 @@ L_088CC790: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23756))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088CC7C4; } @@ -1922,7 +1807,6 @@ L_088CC800: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CC97C; } @@ -1948,7 +1832,6 @@ L_088CC81C: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (18042u << 16u); if (branch_taken) { @@ -1993,7 +1876,6 @@ L_088CC88C: L_088CC8A0: aot_gpr_4 = (ctx.gpr[20] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CC8BC; } @@ -2018,7 +1900,6 @@ L_088CC8BC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(60), static_cast(0u)); if (branch_taken) { @@ -2098,7 +1979,6 @@ L_088CC988: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CCD08; } @@ -2109,9 +1989,7 @@ L_088CC9BC: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CCD08; } @@ -2120,7 +1998,6 @@ L_088CC9BC: L_088CC9D8: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17096u << 16u); if (branch_taken) { @@ -2184,7 +2061,6 @@ L_088CCA50: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (20224u << 16u); if (branch_taken) { @@ -2234,7 +2110,6 @@ L_088CCAC4: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 3713u); if (branch_taken) { @@ -2283,9 +2158,7 @@ L_088CCB4C: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CCBEC; } @@ -2329,7 +2202,6 @@ L_088CCBA4: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fpr[24] = aot_fpr_12 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -2362,7 +2234,6 @@ L_088CCBEC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23752))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CCC20; } @@ -2404,7 +2275,6 @@ L_088CCC3C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-23752), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CCD08; } @@ -2447,7 +2317,6 @@ L_088CCC5C: AOT_REGCACHE_SYNC_OUT(); return; L_088CCCB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CCD08; } @@ -2513,7 +2382,6 @@ L_088CCD08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CCD2C; } @@ -2522,7 +2390,6 @@ L_088CCD08: L_088CCD18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CCD2C; } @@ -2545,7 +2412,6 @@ L_088CCD34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CCD58; } @@ -2554,7 +2420,6 @@ L_088CCD34: L_088CCD44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CCD58; } @@ -2591,7 +2456,17 @@ L_088CCD5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CCD9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); @@ -2629,7 +2504,6 @@ L_088CCDFC: L_088CCE0C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_088CCE44; } @@ -2639,7 +2513,6 @@ L_088CCE18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD530; } @@ -2648,7 +2521,6 @@ L_088CCE18: L_088CCE28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD530; } @@ -2661,7 +2533,6 @@ L_088CCE34: AOT_REGCACHE_SYNC_OUT(); return; L_088CCE3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CD530; } @@ -2699,7 +2570,6 @@ L_088CCE64: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CCE98; } @@ -2719,7 +2589,6 @@ L_088CCE98: L_088CCE9C: aot_gpr_4 = (0u + static_cast(-943)); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CD184; } @@ -2729,7 +2598,6 @@ L_088CCEA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1885))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CCF44; } @@ -2761,7 +2629,6 @@ L_088CCEB8: goto L_088CCF08; L_088CCF08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_088CCF28; @@ -2786,7 +2653,6 @@ L_088CCF28: goto L_088CCF3C; L_088CCF3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CCF4C; } @@ -2802,9 +2668,7 @@ L_088CCF4C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD028; } @@ -2816,9 +2680,7 @@ L_088CCF6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(608))); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD028; } @@ -2828,9 +2690,7 @@ L_088CCF8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD028; } @@ -2862,7 +2722,6 @@ L_088CCFA4: goto L_088CCFF4; L_088CCFF4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_088CD014; @@ -2887,7 +2746,6 @@ L_088CD014: goto L_088CD028; L_088CD028: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CD0D0; } @@ -2898,7 +2756,6 @@ L_088CD030: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(712))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD064; } @@ -2940,7 +2797,6 @@ L_088CD080: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(708))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD0B4; } @@ -2979,7 +2835,6 @@ L_088CD0CC: goto L_088CD0D0; L_088CD0D0: { const bool branch_taken = static_cast(ctx.gpr[21]) <= 0; - // nop if (branch_taken) { goto L_088CD168; } @@ -3152,9 +3007,7 @@ L_088CD21C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD268; } @@ -3240,7 +3093,6 @@ L_088CD310: goto L_088CD31C; L_088CD31C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CD3CC; } @@ -3248,7 +3100,6 @@ L_088CD31C: } L_088CD324: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_088CD3CC; } @@ -3259,7 +3110,6 @@ L_088CD32C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(712))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD360; } @@ -3301,7 +3151,6 @@ L_088CD37C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(708))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD3B0; } @@ -3352,7 +3201,6 @@ L_088CD3D4: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_088CD404; @@ -3380,7 +3228,6 @@ L_088CD418: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD430; } @@ -3391,7 +3238,6 @@ L_088CD42C: goto L_088CD430; L_088CD430: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_088CD4EC; } @@ -3418,7 +3264,6 @@ L_088CD464: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CD4EC; } @@ -3426,7 +3271,6 @@ L_088CD464: } L_088CD474: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088CD494; } @@ -3473,7 +3317,6 @@ L_088CD4AC: AOT_REGCACHE_SYNC_OUT(); return; L_088CD4EC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CD50C; } @@ -3481,7 +3324,6 @@ L_088CD4EC: } L_088CD4F4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088CD50C; } @@ -3499,7 +3341,6 @@ L_088CD50C: L_088CD510: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD530; } @@ -3508,7 +3349,6 @@ L_088CD510: L_088CD51C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CD530; } @@ -3537,7 +3377,17 @@ L_088CD530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CD55C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_16); @@ -3558,7 +3408,6 @@ L_088CD5A0: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -3594,7 +3443,6 @@ L_088CD5DC: ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fpr[28] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[30] = std::bit_cast(aot_gpr_7); if (branch_taken) { @@ -3604,7 +3452,6 @@ L_088CD5DC: } L_088CD620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CD634; } @@ -3612,7 +3459,6 @@ L_088CD620: } L_088CD628: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CD934; } @@ -3623,7 +3469,6 @@ L_088CD630: goto L_088CD634; L_088CD634: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088CD644; @@ -3631,7 +3476,6 @@ L_088CD634: goto L_088CD644; L_088CD644: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088CD654; @@ -3639,7 +3483,6 @@ L_088CD644: goto L_088CD654; L_088CD654: ctx.gpr[31] = (0x088CD65Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CD65Cu) goto L_088CD65C; AOT_REGCACHE_SYNC_OUT(); return; L_088CD65C: @@ -3653,9 +3496,7 @@ L_088CD65C: } L_088CD668: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD6C4; } @@ -3793,7 +3634,6 @@ L_088CD79C: ctx.fpr[18] = std::bit_cast(aot_gpr_4); ctx.fpr[18] = ctx.fpr[19] / ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[18] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088CD7B8; @@ -3801,7 +3641,6 @@ L_088CD79C: goto L_088CD7B8; L_088CD7B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[18] = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088CD7C8; @@ -3829,9 +3668,7 @@ L_088CD7EC: goto L_088CD7F8; L_088CD7F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD824; } @@ -3840,7 +3677,6 @@ L_088CD7F8: L_088CD808: ctx.fpr[22] = ctx.fpr[16] + ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088CD81C; @@ -3848,7 +3684,6 @@ L_088CD808: goto L_088CD81C; L_088CD81C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CD838; } @@ -3857,7 +3692,6 @@ L_088CD81C: L_088CD824: ctx.fpr[22] = ctx.fpr[16] - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088CD838; @@ -3865,9 +3699,7 @@ L_088CD824: goto L_088CD838; L_088CD838: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CD84C; } @@ -3923,7 +3755,6 @@ L_088CD8A8: goto L_088CD8B0; L_088CD8B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; goto L_088CD8CC; @@ -3990,7 +3821,17 @@ L_088CD934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CD96C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -4001,11 +3842,20 @@ L_088CD96C: } L_088CD974: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CD97C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (17436u << 16u); @@ -4039,7 +3889,6 @@ L_088CD9B8: L_088CD9C8: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CD9E8; } @@ -4047,7 +3896,6 @@ L_088CD9C8: } L_088CD9D4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CD9F4; } @@ -4077,7 +3925,6 @@ L_088CD9F4: L_088CD9F8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CDB78; } @@ -4085,7 +3932,6 @@ L_088CD9F8: } L_088CDA04: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CDB78; } @@ -4096,9 +3942,7 @@ L_088CDA0C: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CDB78; } @@ -4123,7 +3967,6 @@ L_088CDA38: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CDA70; @@ -4148,7 +3991,6 @@ L_088CDAA0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CDB78; } @@ -4190,7 +4032,6 @@ L_088CDAFC: L_088CDB08: { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - aot_fpr_13; goto L_088CDB2C; @@ -4256,7 +4097,17 @@ L_088CDB84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CDBA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[17]); @@ -4272,7 +4123,6 @@ L_088CDBA4: L_088CDBD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CDBFC; } @@ -4280,7 +4130,6 @@ L_088CDBD8: } L_088CDBE4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CDBFC; } @@ -4290,7 +4139,6 @@ L_088CDBEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CDC30; } @@ -4305,7 +4153,6 @@ L_088CDBFC: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.gpr[18] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (0u | 0u); if (branch_taken) { @@ -4315,7 +4162,6 @@ L_088CDBFC: } L_088CDC28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CDC38; } @@ -4337,7 +4183,6 @@ L_088CDC38: L_088CDC40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CE624; } @@ -4345,7 +4190,6 @@ L_088CDC40: } L_088CDC4C: ctx.gpr[31] = (0x088CDC54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CDC54u) goto L_088CDC54; AOT_REGCACHE_SYNC_OUT(); return; L_088CDC54: @@ -4363,7 +4207,6 @@ L_088CDC60: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_5 = (aot_gpr_5 >> 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088CDCAC; } @@ -4386,7 +4229,6 @@ L_088CDC84: AOT_REGCACHE_SYNC_OUT(); return; L_088CDC90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CDCA4; } @@ -4410,7 +4252,6 @@ L_088CDCAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CE61C; } @@ -4425,13 +4266,11 @@ L_088CDCBC: AOT_REGCACHE_SYNC_OUT(); return; L_088CDCCC: ctx.gpr[31] = (0x088CDCD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088CDCD4u) goto L_088CDCD4; AOT_REGCACHE_SYNC_OUT(); return; L_088CDCD4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_6; - // nop if (branch_taken) { goto L_088CDD48; } @@ -4441,7 +4280,6 @@ L_088CDCE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CDD48; } @@ -4474,7 +4312,6 @@ L_088CDD1C: AOT_REGCACHE_SYNC_OUT(); return; L_088CDD28: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088CE61C; } @@ -4488,7 +4325,6 @@ L_088CDD30: goto L_088CE654; L_088CDD40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE61C; } @@ -4497,7 +4333,6 @@ L_088CDD40: L_088CDD48: aot_gpr_7 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088CE2EC; } @@ -4525,7 +4360,6 @@ L_088CDD64: L_088CDD70: aot_gpr_5 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CDDD0; } @@ -4550,7 +4384,6 @@ L_088CDD88: } L_088CDD90: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CDD7C; } @@ -4558,7 +4391,6 @@ L_088CDD90: } L_088CDD98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CDDD0; } @@ -4583,7 +4415,6 @@ L_088CDDAC: } L_088CDDB4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CDD7C; } @@ -4591,7 +4422,6 @@ L_088CDDB4: } L_088CDDBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CDDD0; } @@ -4620,7 +4450,6 @@ L_088CDDD4: } L_088CDDE0: { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_088CDE14; } @@ -4628,7 +4457,6 @@ L_088CDDE0: } L_088CDDE8: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_088CDE38; } @@ -4674,7 +4502,6 @@ L_088CDE38: } L_088CDE40: { const bool branch_taken = static_cast(ctx.gpr[9]) <= 0; - // nop if (branch_taken) { goto L_088CE1AC; } @@ -4696,7 +4523,6 @@ L_088CDE48: } L_088CDE68: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088CDE78; } @@ -4704,7 +4530,6 @@ L_088CDE68: } L_088CDE70: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088CDE9C; } @@ -4713,9 +4538,7 @@ L_088CDE70: L_088CDE78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CE05C; } @@ -4737,7 +4560,6 @@ L_088CDE9C: ctx.gpr[2] = (ctx.gpr[2] & 496u); ctx.gpr[2] = (ctx.gpr[2] >> 4u); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[3]; - // nop if (branch_taken) { goto L_088CDEC4; } @@ -4745,7 +4567,6 @@ L_088CDE9C: } L_088CDEB4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088CDEC4; } @@ -4753,7 +4574,6 @@ L_088CDEB4: } L_088CDEBC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088CDECC; } @@ -4761,7 +4581,6 @@ L_088CDEBC: } L_088CDEC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE05C; } @@ -4787,7 +4606,6 @@ L_088CDEDC: } L_088CDEE4: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[3]; - // nop if (branch_taken) { goto L_088CDFCC; } @@ -4795,7 +4613,6 @@ L_088CDEE4: } L_088CDEEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE05C; } @@ -4814,7 +4631,6 @@ L_088CDEF4: } L_088CDF08: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088CDF58; } @@ -4833,7 +4649,6 @@ L_088CDF10: } L_088CDF24: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088CDF3C; } @@ -4848,7 +4663,6 @@ L_088CDF2C: L_088CDF3C: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(12))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088CDF58; } @@ -4862,7 +4676,6 @@ L_088CDF48: goto L_088CDF58; L_088CDF58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE05C; } @@ -4881,7 +4694,6 @@ L_088CDF60: } L_088CDF74: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088CDFC4; } @@ -4900,7 +4712,6 @@ L_088CDF7C: } L_088CDF90: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088CDFA8; } @@ -4915,7 +4726,6 @@ L_088CDF98: L_088CDFA8: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(8))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088CDFC4; } @@ -4929,7 +4739,6 @@ L_088CDFB4: goto L_088CDFC4; L_088CDFC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE05C; } @@ -4956,7 +4765,6 @@ L_088CDFEC: ctx.gpr[3] = (ctx.gpr[11] + ctx.gpr[3]); ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(0))); { const bool branch_taken = ctx.gpr[3] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088CE004; } @@ -4970,7 +4778,6 @@ L_088CE004: ctx.gpr[2] = (ctx.gpr[2] & 255u); ctx.gpr[3] = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[3] != 0u; - // nop if (branch_taken) { goto L_088CDFEC; } @@ -4978,7 +4785,6 @@ L_088CE004: } L_088CE018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE05C; } @@ -4995,7 +4801,6 @@ L_088CE030: ctx.gpr[3] = (ctx.gpr[11] + ctx.gpr[3]); ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(0))); { const bool branch_taken = ctx.gpr[3] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088CE048; } @@ -5009,7 +4814,6 @@ L_088CE048: ctx.gpr[2] = (ctx.gpr[2] & 255u); ctx.gpr[3] = (static_cast(ctx.gpr[2]) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[3] != 0u; - // nop if (branch_taken) { goto L_088CE030; } @@ -5018,9 +4822,7 @@ L_088CE048: L_088CE05C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CE1A4; } @@ -5042,7 +4844,6 @@ L_088CE084: aot_fpr_20 = ctx.fpr[17] / aot_fpr_13; aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CE0A0; @@ -5050,7 +4851,6 @@ L_088CE084: goto L_088CE0A0; L_088CE0A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE1D8; } @@ -5078,7 +4878,6 @@ L_088CE0B0: { const float fs = aot_fpr_13; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CE0F0; @@ -5086,7 +4885,6 @@ L_088CE0B0: goto L_088CE0F0; L_088CE0F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_20)) && ctx.fpr[22] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[22]; goto L_088CE140; @@ -5106,7 +4904,6 @@ L_088CE118: aot_gpr_6 = (aot_gpr_7 + static_cast(12)); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[22]; goto L_088CE140; @@ -5145,7 +4942,6 @@ L_088CE160: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); aot_fpr_20 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CE19C; @@ -5153,7 +4949,6 @@ L_088CE160: goto L_088CE19C; L_088CE19C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE1D8; } @@ -5161,7 +4956,6 @@ L_088CE19C: } L_088CE1A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE1D8; } @@ -5229,7 +5023,6 @@ L_088CE200: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_088CE234; @@ -5254,7 +5047,6 @@ L_088CE234: goto L_088CE248; L_088CE248: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE2A8; } @@ -5267,7 +5059,6 @@ L_088CE250: aot_gpr_6 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_088CE284; @@ -5298,9 +5089,7 @@ L_088CE298: goto L_088CE2A8; L_088CE2A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CE2E4; } @@ -5341,7 +5130,6 @@ L_088CE2EC: goto L_088CE304; L_088CE304: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CE314; } @@ -5353,7 +5141,6 @@ L_088CE30C: goto L_088CE314; L_088CE314: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088CE388; } @@ -5372,7 +5159,6 @@ L_088CE31C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -5414,7 +5200,6 @@ L_088CE39C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CE61C; } @@ -5422,7 +5207,6 @@ L_088CE39C: } L_088CE3AC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088CE528; } @@ -5464,9 +5248,7 @@ L_088CE3E8: } L_088CE404: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CE484; } @@ -5485,7 +5267,6 @@ L_088CE414: aot_gpr_5 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_4); if (branch_taken) { @@ -5534,7 +5315,6 @@ L_088CE484: L_088CE498: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_6 << 3u); if (branch_taken) { @@ -5554,7 +5334,6 @@ L_088CE4AC: aot_gpr_5 = (20224u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_4); if (branch_taken) { @@ -5675,7 +5454,6 @@ L_088CE5BC: } L_088CE5D4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CE5E8; } @@ -5731,7 +5509,17 @@ L_088CE628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CE654: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_gpr_6 = (0u | 0u); @@ -5778,7 +5566,6 @@ L_088CE6DC: L_088CE6E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-23836))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CE70C; } @@ -5802,7 +5589,6 @@ L_088CE70C: AOT_REGCACHE_SYNC_OUT(); return; L_088CE718: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088CE748; } @@ -5843,9 +5629,7 @@ L_088CE75C: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CE788; } @@ -5881,7 +5665,6 @@ L_088CE79C: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(212), static_cast(ctx.gpr[2])); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088CE7D0; @@ -5889,7 +5672,6 @@ L_088CE79C: goto L_088CE7D0; L_088CE7D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088CE7E0; @@ -5917,7 +5699,6 @@ L_088CE7F0: L_088CE7FC: aot_gpr_6 = (static_cast(aot_gpr_6) < -969 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088CE8B8; } @@ -5942,7 +5723,6 @@ L_088CE814: goto L_088CE81C; L_088CE81C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CE8B8; } @@ -5968,7 +5748,6 @@ L_088CE830: } L_088CE83C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088CE8B8; } @@ -5987,7 +5766,6 @@ L_088CE84C: goto L_088CE850; L_088CE850: { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088CE8B8; } @@ -6059,7 +5837,6 @@ L_088CE8D0: goto L_088CE8D8; L_088CE8D8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088CE97C; } @@ -6120,7 +5897,6 @@ L_088CE930: } L_088CE97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CF774; } @@ -6129,7 +5905,6 @@ L_088CE97C: L_088CE984: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088CE9A0; } @@ -6139,7 +5914,6 @@ L_088CE990: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[8] = (0u | 184u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088CE9A8; } @@ -6151,7 +5925,6 @@ L_088CE9A0: goto L_088CE9A8; L_088CE9A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_4 + static_cast(320)); if (branch_taken) { @@ -6165,7 +5938,6 @@ L_088CE9B8: aot_gpr_6 = (17723u << 16u); aot_gpr_6 = (aot_gpr_6 | 32768u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[15] = std::bit_cast(aot_gpr_6); if (branch_taken) { @@ -6179,7 +5951,6 @@ L_088CE9D8: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CE9F8; @@ -6189,7 +5960,6 @@ L_088CE9F8: aot_fpr_13 = aot_fpr_14 / aot_fpr_13; { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - ctx.fpr[30]; goto L_088CEA20; @@ -6214,7 +5984,6 @@ L_088CEA20: goto L_088CEA34; L_088CEA34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CEA90; } @@ -6226,7 +5995,6 @@ L_088CEA3C: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CEA5C; @@ -6236,7 +6004,6 @@ L_088CEA5C: aot_fpr_12 = aot_fpr_14 / aot_fpr_13; { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[15] - ctx.fpr[30]; goto L_088CEA80; @@ -6260,7 +6027,6 @@ L_088CEA80: L_088CEA90: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(188))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088CEAA0; } @@ -6271,7 +6037,6 @@ L_088CEA9C: goto L_088CEAA0; L_088CEAA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CEAAC; } @@ -6282,9 +6047,7 @@ L_088CEAA8: goto L_088CEAAC; L_088CEAAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CEABC; } @@ -6292,7 +6055,6 @@ L_088CEAAC: } L_088CEABC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_088CEAD4; @@ -6322,7 +6084,6 @@ L_088CEAE4: aot_fpr_12 = aot_fpr_12 / ctx.fpr[17]; { const float fs = ctx.fpr[18]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; goto L_088CEB08; @@ -6345,7 +6106,6 @@ L_088CEB08: goto L_088CEB18; L_088CEB18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(192), ctx.gpr[21]); if (branch_taken) { @@ -6369,7 +6129,6 @@ L_088CEB34: L_088CEB3C: aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088CEBC8; } @@ -6379,7 +6138,6 @@ L_088CEB48: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1280)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CEB5C; } @@ -6409,7 +6167,6 @@ L_088CEB80: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088CEB98; @@ -6495,7 +6252,6 @@ L_088CEC40: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-23736), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(218))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CECCC; } @@ -6505,7 +6261,6 @@ L_088CEC54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(214)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 150 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CECC4; } @@ -6513,7 +6268,6 @@ L_088CEC54: } L_088CEC64: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CECC4; } @@ -6522,7 +6276,6 @@ L_088CEC64: L_088CEC6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(190)))))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088CECC4; } @@ -6535,7 +6288,6 @@ L_088CEC78: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CECC4; } @@ -6544,7 +6296,6 @@ L_088CEC78: L_088CEC94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CECC4; } @@ -6559,7 +6310,6 @@ L_088CECA0: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CECCC; } @@ -6591,9 +6341,7 @@ L_088CECE0: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CED1C; } @@ -6602,7 +6350,6 @@ L_088CECE0: L_088CED04: aot_gpr_6 = (aot_gpr_4 < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088CED30; } @@ -6620,7 +6367,6 @@ L_088CED10: L_088CED1C: aot_gpr_6 = (aot_gpr_4 < static_cast(800) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088CED30; } @@ -6656,7 +6402,6 @@ L_088CED50: L_088CED54: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(217))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088CEDC4; } @@ -6684,7 +6429,6 @@ L_088CED7C: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; goto L_088CEDAC; @@ -6764,7 +6508,6 @@ L_088CEE18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1654)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CEE34; } @@ -6793,7 +6536,6 @@ L_088CEE40: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(214)))))); aot_gpr_7 = (static_cast(aot_gpr_7) < 150 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_088CEEB8; } @@ -6801,7 +6543,6 @@ L_088CEE40: } L_088CEE50: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CEEB8; } @@ -6814,7 +6555,6 @@ L_088CEE58: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_088CEEB8; } @@ -6844,7 +6584,6 @@ L_088CEE88: aot_gpr_6 = (aot_gpr_6 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(200), ctx.gpr[8]); if (branch_taken) { @@ -6855,7 +6594,6 @@ L_088CEE88: L_088CEEAC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(190)))))); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_088CF1A4; } @@ -6882,7 +6620,6 @@ L_088CEED8: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_088CEF00; } @@ -6897,7 +6634,6 @@ L_088CEEF4: goto L_088CEF00; L_088CEF00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CEF14; } @@ -6908,7 +6644,6 @@ L_088CEF08: goto L_088CEF0C; L_088CEF0C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CF04C; } @@ -6945,7 +6680,6 @@ L_088CEF28: L_088CEF44: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-23744))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CEF68; } @@ -6956,7 +6690,6 @@ L_088CEF50: goto L_088CEF54; L_088CEF54: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CEF84; } @@ -6965,7 +6698,6 @@ L_088CEF54: L_088CEF5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-23745))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CEF84; } @@ -6973,7 +6705,6 @@ L_088CEF5C: } L_088CEF68: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CEF84; } @@ -7013,7 +6744,6 @@ L_088CEFA0: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_14 - ctx.fpr[30]; goto L_088CEFD0; @@ -7052,7 +6782,6 @@ L_088CEFF0: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_14 - ctx.fpr[30]; goto L_088CF01C; @@ -7095,7 +6824,6 @@ L_088CF04C: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[24]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); if (branch_taken) { @@ -7134,7 +6862,6 @@ L_088CF090: L_088CF0B0: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(217))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088CF118; } @@ -7151,7 +6878,6 @@ L_088CF0BC: { const float fs = ctx.fpr[24]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7191,7 +6917,6 @@ L_088CF124: goto L_088CF128; L_088CF128: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088CF15C; } @@ -7218,7 +6943,6 @@ L_088CF15C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(617)))))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088CF178; } @@ -7242,7 +6966,6 @@ L_088CF178: AOT_REGCACHE_SYNC_OUT(); return; L_088CF19C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CF354; } @@ -7292,7 +7015,6 @@ L_088CF1F4: } L_088CF204: { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_088CF220; } @@ -7315,7 +7037,6 @@ L_088CF220: goto L_088CF228; L_088CF228: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_088CF2AC; } @@ -7323,7 +7044,6 @@ L_088CF228: } L_088CF230: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CF280; } @@ -7428,7 +7148,6 @@ L_088CF30C: L_088CF318: aot_gpr_4 = (0u | 15u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CF32C; } @@ -7454,7 +7173,6 @@ L_088CF330: AOT_REGCACHE_SYNC_OUT(); return; L_088CF340: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_088CF354; } @@ -7491,7 +7209,6 @@ L_088CF35C: L_088CF37C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CF39C; } @@ -7509,7 +7226,6 @@ L_088CF394: goto L_088CF39C; L_088CF39C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088CF3CC; } @@ -7522,7 +7238,6 @@ L_088CF3A4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CF3CC; } @@ -7531,7 +7246,6 @@ L_088CF3A4: L_088CF3C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CF3D4; } @@ -7566,7 +7280,6 @@ L_088CF3EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(88))); ctx.fpr[26] = ctx.fpr[26] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088CF408; @@ -7574,9 +7287,7 @@ L_088CF3EC: goto L_088CF408; L_088CF408: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CF41C; } @@ -7641,7 +7352,6 @@ L_088CF478: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088CF4D4; } @@ -7661,7 +7371,6 @@ L_088CF49C: aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (15948u << 16u); if (branch_taken) { @@ -7674,9 +7383,7 @@ L_088CF4B8: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CF54C; } @@ -7686,7 +7393,6 @@ L_088CF4D4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (0u | 229u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088CF530; } @@ -7696,7 +7402,6 @@ L_088CF4E4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (0u + static_cast(-968)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088CF530; } @@ -7706,7 +7411,6 @@ L_088CF4F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (0u + static_cast(-969)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088CF530; } @@ -7715,7 +7419,6 @@ L_088CF4F4: L_088CF504: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088CF530; } @@ -7725,7 +7428,6 @@ L_088CF510: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (0u | 184u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088CF530; } @@ -7758,7 +7460,6 @@ L_088CF538: goto L_088CF54C; L_088CF54C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17948u << 16u); if (branch_taken) { @@ -7779,7 +7480,6 @@ L_088CF55C: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 & 4u); if (branch_taken) { @@ -7828,7 +7528,6 @@ L_088CF5EC: goto L_088CF5F4; L_088CF5F4: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088CF600; } @@ -7857,7 +7556,6 @@ L_088CF620: { const float fs = ctx.fpr[26]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 4u); if (branch_taken) { @@ -7905,7 +7603,6 @@ L_088CF698: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[26]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; goto L_088CF6C4; @@ -7941,7 +7638,6 @@ L_088CF6D8: goto L_088CF6FC; L_088CF6FC: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088CF708; } @@ -7952,7 +7648,6 @@ L_088CF704: goto L_088CF708; L_088CF708: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088CF718; } @@ -8023,7 +7718,17 @@ L_088CF774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CF7BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -8057,7 +7762,6 @@ L_088CF7F8: } L_088CF808: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088CF89C; } @@ -8065,7 +7769,6 @@ L_088CF808: } L_088CF810: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CF91C; } @@ -8075,7 +7778,6 @@ L_088CF818: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CF884; } @@ -8091,7 +7793,6 @@ L_088CF828: L_088CF838: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088CF870; } @@ -8104,9 +7805,7 @@ L_088CF844: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CF870; } @@ -8125,7 +7824,6 @@ L_088CF870: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CF828; } @@ -8133,7 +7831,6 @@ L_088CF870: } L_088CF884: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088CF894; } @@ -8141,7 +7838,6 @@ L_088CF884: } L_088CF88C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CF924; } @@ -8159,7 +7855,6 @@ L_088CF89C: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CF904; } @@ -8171,7 +7866,6 @@ L_088CF8AC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1076))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088CF8F0; } @@ -8184,9 +7878,7 @@ L_088CF8C4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CF8F0; } @@ -8205,7 +7897,6 @@ L_088CF8F0: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CF8AC; } @@ -8213,7 +7904,6 @@ L_088CF8F0: } L_088CF904: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088CF914; } @@ -8221,7 +7911,6 @@ L_088CF904: } L_088CF90C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CF924; } @@ -8256,7 +7945,6 @@ L_088CF924: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_20 = aot_fpr_20 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088CF960; @@ -8267,9 +7955,7 @@ L_088CF960: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CFA94; } @@ -8321,7 +8007,6 @@ L_088CF9C8: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17835u << 16u); if (branch_taken) { @@ -8400,7 +8085,17 @@ L_088CFAA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CFAC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_20)); @@ -8438,7 +8133,6 @@ L_088CFB24: L_088CFB30: aot_gpr_5 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088CFB84; } @@ -8450,11 +8144,20 @@ L_088CFB3C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20328))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CFB54: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); ctx.gpr[19] = (0u | 4u); @@ -8489,7 +8192,6 @@ L_088CFB84: } L_088CFB8C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088CFFA4; } @@ -8526,7 +8228,6 @@ L_088CFBCC: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088CFBEC; } @@ -8534,7 +8235,6 @@ L_088CFBCC: } L_088CFBE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CFD00; } @@ -8544,7 +8244,6 @@ L_088CFBEC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(92)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088CFC14; } @@ -8552,7 +8251,6 @@ L_088CFBEC: } L_088CFBFC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088CFC70; } @@ -8560,7 +8258,6 @@ L_088CFBFC: } L_088CFC04: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088CFCCC; } @@ -8568,7 +8265,6 @@ L_088CFC04: } L_088CFC0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CFCEC; } @@ -8585,7 +8281,6 @@ L_088CFC14: } L_088CFC20: { const bool branch_taken = aot_gpr_16 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088CFC4C; } @@ -8623,7 +8318,6 @@ L_088CFC64: goto L_088CFC68; L_088CFC68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CFCEC; } @@ -8640,7 +8334,6 @@ L_088CFC70: } L_088CFC7C: { const bool branch_taken = aot_gpr_16 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088CFCA8; } @@ -8678,7 +8371,6 @@ L_088CFCC0: goto L_088CFCC4; L_088CFCC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088CFCEC; } @@ -8699,9 +8391,7 @@ L_088CFCE8: goto L_088CFCEC; L_088CFCEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088CFD00; } @@ -8716,7 +8406,6 @@ L_088CFD00: aot_gpr_16 = (aot_gpr_16 & 255u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088CFBCC; } @@ -8724,7 +8413,6 @@ L_088CFD00: } L_088CFD18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (0u | 1u); if (branch_taken) { @@ -8776,11 +8464,20 @@ L_088CFD8C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20288))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CFDA4: aot_gpr_4 = (17995u << 16u); aot_gpr_4 = (aot_gpr_4 | 8192u); @@ -8792,7 +8489,6 @@ L_088CFDA4: aot_gpr_4 = (0u | 290u); ctx.fpr[24] = ctx.fpr[24] + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(56), aot_gpr_4); if (branch_taken) { @@ -8822,7 +8518,6 @@ L_088CFDF8: aot_mem.aot_direct_store8(ctx.gpr[18] + static_cast(72), static_cast(aot_gpr_7)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(72))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088CFE30; } @@ -8867,7 +8562,6 @@ L_088CFE38: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.gpr[8] = (0u | 8u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(-28320)); if (branch_taken) { @@ -8919,7 +8613,6 @@ L_088CFEB4: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.gpr[8] = (0u | 8u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(-28320)); if (branch_taken) { @@ -8948,7 +8641,6 @@ L_088CFF1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.gpr[10] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088CFF40; } @@ -9035,7 +8727,17 @@ L_088CFFB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088CFFF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); diff --git a/profiles/vcs/generated/generated_unit_0051.cpp b/profiles/vcs/generated/generated_unit_0051.cpp index d84c05f..0fb198e 100644 --- a/profiles/vcs/generated/generated_unit_0051.cpp +++ b/profiles/vcs/generated/generated_unit_0051.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0051[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 8, - 0, 9, 0, 10, 0, 0, 11, 0, 0, 0, 0, 12, 0, 13, 0, 14, 0, 0, 0, 15, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 0, 0, - 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 27, 0, 28, 0, 29, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, - 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, - 0, 0, 44, 0, 45, 0, 46, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 50, 0, 51, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 57, 58, 59, 0, 60, 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, - 63, 64, 65, 0, 66, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 69, 0, 70, 71, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 73, - 74, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 81, - 0, 82, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 87, 88, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 91, 0, - 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 96, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 103, 0, 0, 104, 0, 105, 0, - 106, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 0, 124, - 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 129, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, 144, 0, 0, 145, 0, 146, 0, 147, - 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 0, 152, 0, 0, 153, 154, 0, 0, 0, 155, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 159, 0, 0, 160, - 0, 161, 0, 162, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 168, 169, - 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 172, 0, 0, 173, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 188, 0, 0, - 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, - 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, 218, - 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 223, 0, 224, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, - 0, 0, 0, 228, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 231, 0, 232, 0, 0, 233, 0, 234, 235, 0, 236, 0, 0, 0, 0, 237, 0, 238, - 0, 239, 0, 240, 0, 241, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, - 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 254, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, - 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 271, 0, - 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, - 0, 0, 0, 282, 0, 0, 0, 283, 0, 284, 0, 0, 285, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 289, 0, - 0, 290, 291, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 0, 296, 297, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 305, 0, 0, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 310, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, - 0, 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 0, 320, 0, 321, 0, 322, 323, 0, 324, 0, 0, - 325, 0, 0, 0, 326, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 330, 331, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 336, 0, 337, 0, 0, - 0, 338, 0, 339, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 0, 342, 0, 343, 0, 344, 0, 0, 0, 0, 345, 0, 346, 0, 0, 0, 0, 347, - 348, 0, 0, 0, 349, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 352, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, 357, - 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 363, 0, 364, 0, 365, 0, - 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 373, 0, 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 379, 380, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 382, - 0, 383, 0, 384, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 0, 392, 0, 393, - 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, - 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 403, 0, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, 0, 0, - 0, 0, 407, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, - 413, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 0, 418, 419, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 422, 0, - 0, 0, 0, 423, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 0, 429, 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, - 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 439, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 444, 0, 445, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 455, 0, 456, 0, 0, 0, 0, - 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 458, 0, 459, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 465, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, - 0, 0, 0, 0, 474, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, - 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 487, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, - 492, 0, 493, 0, 494, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, - 0, 0, 0, 0, 504, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 510, 0, - 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, - 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 518, 0, 0, 0, 0, 0, 0, 519, - 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 523, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 532, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 536, 0, 0, 0, 0, 0, 537, 0, 538, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 543, 0, 0, - 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, - 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, - 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 568, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 578, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 580, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 587, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, - 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 593, 0, 594, 0, 0, 595, - 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 598, 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 0, 0, 606, 0, 0, 0, - 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 611, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, - 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, - 626, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 630, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0051[64] = { + 0x1548A84AA2148401ull, 0x2204350440040492ull, 0xA000080D00041021ull, 0x09170911022A0954ull, + 0xA0814221811A1217ull, 0x03400408424C9052ull, 0x5240060088000010ull, 0x10120000840002ABull, + 0x1A10008280AAA400ull, 0x1004201040250000ull, 0xA928008000201000ull, 0x928008008C920014ull, + 0x0A128008C920014Aull, 0x0808000402020040ull, 0x2900200004202000ull, 0x0840000202000040ull, + 0x800200080A000040ull, 0x8048000001002000ull, 0x0008002800010040ull, 0x940250000008A000ull, + 0x4000084A00402410ull, 0xA009112AA1694148ull, 0x2801094000300084ull, 0x0080020001000010ull, + 0x0002000400008100ull, 0x0880014050010812ull, 0x4420000040102000ull, 0x1850014644029288ull, + 0x12A8408000040040ull, 0x2D4902020A824AA0ull, 0x2900811030100891ull, 0xAA030A11850A850Aull, + 0x0001489054441104ull, 0xA000000065510448ull, 0xA50088100004001Aull, 0x054600408814002Aull, + 0x508C284588202204ull, 0x0000240882209558ull, 0x0022000001001AA0ull, 0x0A50240010222015ull, + 0x0949010500000002ull, 0x8004240001040C00ull, 0x04A0084800011030ull, 0x0001000088000088ull, + 0x0414A05540002200ull, 0x6000949010500000ull, 0x8188004240001040ull, 0x1100940042400008ull, + 0x00000010000C0000ull, 0x2242000150520041ull, 0x0210014000108008ull, 0x0200000420020000ull, + 0x4000108008000002ull, 0x0004004000008400ull, 0x4200200000200200ull, 0x0200000200200000ull, + 0x1221000200000420ull, 0x4000004200200000ull, 0x0804A48000008400ull, 0x0000010094800010ull, + 0x1112040000020129ull, 0x4000040048044004ull, 0x4010010040040000ull, 0x2200100911048882ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0051[64] = { + 1u, 20u, 34u, 44u, 63u, 82u, 97u, 106u, 117u, 131u, 139u, 148u, 161u, 176u, 182u, 189u, + 194u, 200u, 205u, 210u, 219u, 228u, 248u, 258u, 262u, 266u, 276u, 282u, 298u, 307u, 325u, 338u, + 358u, 371u, 383u, 394u, 407u, 423u, 436u, 444u, 457u, 466u, 474u, 484u, 489u, 501u, 511u, 520u, + 529u, 532u, 544u, 551u, 555u, 560u, 564u, 569u, 572u, 579u, 583u, 591u, 597u, 607u, 614u, 619u, }; void recomp_unit_0051_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0051_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088D0000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0051[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0051[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0051[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088D0000; @@ -834,7 +741,6 @@ L_088D003C: AOT_REGCACHE_SYNC_OUT(); return; L_088D0048: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D0084; } @@ -845,7 +751,6 @@ L_088D0050: aot_gpr_5 = (0u | 244u); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[6] == aot_gpr_5; - // nop if (branch_taken) { goto L_088D007C; } @@ -909,7 +814,6 @@ L_088D00AC: goto L_088D00B4; L_088D00B4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088D00E8; } @@ -919,7 +823,6 @@ L_088D00BC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.gpr[19] = (0u | 8u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088D00E0; } @@ -928,7 +831,6 @@ L_088D00BC: L_088D00CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(700))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088D00F0; } @@ -936,7 +838,6 @@ L_088D00CC: } L_088D00D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D0280; } @@ -963,7 +864,6 @@ L_088D00F0: ctx.gpr[6] = (ctx.gpr[6] & 496u); ctx.gpr[6] = (ctx.gpr[6] >> 4u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_088D0178; } @@ -1012,7 +912,6 @@ L_088D0148: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D01A8; } @@ -1086,7 +985,6 @@ L_088D01E4: L_088D01F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D0280; } @@ -1097,7 +995,6 @@ L_088D0200: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(52), aot_gpr_4); ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088D0230; } @@ -1167,7 +1064,17 @@ L_088D028C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D02AC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); @@ -1196,7 +1103,6 @@ L_088D02F4: L_088D02FC: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_2 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D0318; } @@ -1204,7 +1110,6 @@ L_088D02FC: } L_088D0308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D032C; } @@ -1220,13 +1125,11 @@ L_088D0310: } L_088D0318: aot_gpr_31 = (0x088D0320u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088D0320u) goto L_088D0320; AOT_REGCACHE_SYNC_OUT(); return; L_088D0320: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_2 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D034C; } @@ -1246,7 +1149,6 @@ L_088D032C: } L_088D0344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D0364; } @@ -1271,9 +1173,7 @@ L_088D0364: aot_gpr_4 = (aot_gpr_4 | 4096u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D05E0; } @@ -1325,7 +1225,6 @@ L_088D03C4: goto L_088D03C8; L_088D03C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D05D8; } @@ -1367,7 +1266,6 @@ L_088D0404: goto L_088D0408; L_088D0408: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D0450; } @@ -1378,7 +1276,6 @@ L_088D0410: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(700))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088D0430; } @@ -1394,7 +1291,6 @@ L_088D0430: aot_gpr_4 = (aot_gpr_4 + static_cast(375)); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D044C; } @@ -1446,7 +1342,6 @@ L_088D0494: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D05D8; } @@ -1462,7 +1357,6 @@ L_088D04A4: AOT_REGCACHE_SYNC_OUT(); return; L_088D04B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088D058C; } @@ -1475,7 +1369,6 @@ L_088D04C0: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_5 = (aot_gpr_5 >> 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088D04FC; } @@ -1495,7 +1388,6 @@ L_088D04DC: } L_088D04F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D0558; } @@ -1520,7 +1412,6 @@ L_088D0504: } L_088D0510: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D0558; } @@ -1532,7 +1423,6 @@ L_088D0518: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D053C; } @@ -1568,7 +1458,6 @@ L_088D054C: L_088D0558: aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D0578; } @@ -1648,7 +1537,17 @@ L_088D05E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D0610: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_fpr_12 = std::bit_cast(0u); @@ -1690,7 +1589,6 @@ L_088D067C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6308))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D1C18; } @@ -1735,7 +1633,6 @@ L_088D06E4: goto L_088D06F0; L_088D06F0: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_088D0884; } @@ -1754,7 +1651,6 @@ L_088D0700: goto L_088D0704; L_088D0704: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D06F8; } @@ -1762,7 +1658,6 @@ L_088D0704: } L_088D070C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D14F8; } @@ -1778,7 +1673,6 @@ L_088D0714: } L_088D071C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D06F8; } @@ -1839,7 +1733,6 @@ L_088D077C: L_088D07C4: aot_gpr_4 = (static_cast(aot_gpr_4) < 94 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D06F8; } @@ -1919,7 +1812,6 @@ L_088D084C: } L_088D0854: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D06F8; } @@ -1950,11 +1842,20 @@ L_088D0884: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20160))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D089C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_gpr_5 = (15969u << 16u); @@ -1966,7 +1867,6 @@ L_088D089C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -1977,7 +1877,6 @@ L_088D089C: L_088D08D0: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -2042,7 +1941,6 @@ L_088D0954: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17914u << 16u); if (branch_taken) { @@ -2175,7 +2073,6 @@ L_088D0A9C: } L_088D0ACC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D0B08; } @@ -2201,7 +2098,6 @@ L_088D0AE0: } L_088D0AEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D0B08; } @@ -2247,7 +2143,6 @@ L_088D0B10: L_088D0B44: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D0B5C; } @@ -2316,7 +2211,6 @@ L_088D0BAC: } L_088D0BDC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D0C18; } @@ -2342,7 +2236,6 @@ L_088D0BF0: } L_088D0BFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D0C18; } @@ -2388,7 +2281,6 @@ L_088D0C20: L_088D0C54: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D0C6C; } @@ -2445,7 +2337,6 @@ L_088D0CBC: L_088D0CC4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D0CE4; } @@ -2456,7 +2347,6 @@ L_088D0CD0: aot_gpr_5 = (0u + static_cast(-1000)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D0CEC; } @@ -2637,7 +2527,6 @@ L_088D0EB4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(6266))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D0EEC; } @@ -2736,7 +2625,6 @@ L_088D0FD8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23716))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D1064; } @@ -2832,9 +2720,7 @@ L_088D10C4: aot_gpr_4 = (17174u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D128C; } @@ -2852,7 +2738,6 @@ L_088D10FC: aot_gpr_4 = (17480u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); goto L_088D1160; @@ -2916,7 +2801,6 @@ L_088D11D8: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17882u << 16u); if (branch_taken) { @@ -3024,9 +2908,7 @@ L_088D12CC: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D133C; } @@ -3069,9 +2951,7 @@ L_088D134C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D13B8; } @@ -3095,7 +2975,6 @@ L_088D13C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23711))); aot_gpr_4 = (static_cast(aot_gpr_4) < 86 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D13F0; } @@ -3125,7 +3004,6 @@ L_088D1410: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D1434; } @@ -3162,7 +3040,6 @@ L_088D1458: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23710))); aot_gpr_4 = (static_cast(aot_gpr_4) < 95 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D148C; } @@ -3245,11 +3122,20 @@ L_088D1520: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-20032))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D1538: if (aot_gpr_5 == 0u) { aot_gpr_4 = (static_cast(aot_gpr_4) < 276 ? 1u : 0u); @@ -3259,7 +3145,6 @@ L_088D1538: L_088D1540: aot_gpr_4 = (static_cast(aot_gpr_4) < 262 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D1560; } @@ -3287,7 +3172,6 @@ L_088D1560: aot_gpr_5 = (0u | 275u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D15C0; } @@ -3305,7 +3189,6 @@ L_088D157C: AOT_REGCACHE_SYNC_OUT(); return; L_088D1584: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D15A0; } @@ -3319,7 +3202,6 @@ L_088D158C: L_088D1594: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088D15B0; } @@ -3462,7 +3344,6 @@ L_088D16C0: goto L_088D16EC; L_088D16EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D1AD4; } @@ -3519,7 +3400,6 @@ L_088D1760: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); goto L_088D17DC; @@ -3612,7 +3492,6 @@ L_088D1888: aot_gpr_5 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); goto L_088D18C4; @@ -3641,7 +3520,6 @@ L_088D18C4: L_088D1904: ctx.gpr[22] = (ctx.gpr[22] & 255u); { const bool branch_taken = static_cast(ctx.gpr[22]) <= 0; - // nop if (branch_taken) { goto L_088D1970; } @@ -3723,7 +3601,6 @@ L_088D19A0: aot_gpr_4 = (aot_gpr_4 | 18770u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15645u << 16u); if (branch_taken) { @@ -3753,7 +3630,6 @@ L_088D19EC: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17723u << 16u); if (branch_taken) { @@ -3814,7 +3690,6 @@ L_088D1A78: L_088D1AD4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); goto L_088D1BF0; @@ -3845,7 +3720,6 @@ L_088D1B0C: goto L_088D1B1C; L_088D1B1C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088D1B30; } @@ -3880,9 +3754,7 @@ L_088D1B44: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D1B78; } @@ -3937,7 +3809,6 @@ L_088D1BA0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23719))); aot_gpr_4 = (static_cast(aot_gpr_4) < 59 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D1BD8; } @@ -3991,7 +3862,17 @@ L_088D1C18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D1C48: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -4022,7 +3903,6 @@ L_088D1C9C: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D1CD4; } @@ -4066,7 +3946,6 @@ L_088D1CDC: L_088D1CE4: aot_gpr_4 = (static_cast(ctx.gpr[20]) < -997 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D1D1C; } @@ -4089,7 +3968,6 @@ L_088D1CF0: } L_088D1D14: { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088D1CF0; } @@ -4135,14 +4013,22 @@ L_088D1D44: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19896))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D1D5C: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_088D1D1C; } @@ -4150,7 +4036,6 @@ L_088D1D5C: } L_088D1D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D1CF0; } @@ -4162,11 +4047,20 @@ L_088D1D6C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19824))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D1D84: aot_gpr_4 = (17383u << 16u); aot_gpr_4 = (aot_gpr_4 | 32768u); @@ -4193,7 +4087,6 @@ L_088D1DA4: L_088D1DC0: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(12))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088D1DE0; } @@ -4202,7 +4095,6 @@ L_088D1DC0: L_088D1DCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D1DE8; } @@ -4210,7 +4102,6 @@ L_088D1DCC: } L_088D1DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D1DEC; } @@ -4229,13 +4120,11 @@ L_088D1DE8: goto L_088D1DEC; L_088D1DEC: aot_gpr_31 = (0x088D1DF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088D1DF4u) goto L_088D1DF4; AOT_REGCACHE_SYNC_OUT(); return; L_088D1DF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(12))); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D1E50; } @@ -4283,7 +4172,6 @@ L_088D1E50: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(608))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088D1E70; @@ -4297,7 +4185,6 @@ L_088D1E74: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_088D1EA0; @@ -4344,7 +4231,6 @@ L_088D1EE0: goto L_088D1EEC; L_088D1EEC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088D1FC4; } @@ -4354,7 +4240,6 @@ L_088D1EF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1092))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D1F44; } @@ -4362,7 +4247,6 @@ L_088D1EF4: } L_088D1F04: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088D1F28; } @@ -4404,7 +4288,6 @@ L_088D1F3C: } L_088D1F44: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088D1F68; } @@ -4443,7 +4326,6 @@ L_088D1F80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1096))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D1FAC; } @@ -4494,7 +4376,6 @@ L_088D1FC4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_088D210C; } @@ -4502,7 +4383,6 @@ L_088D1FC4: } L_088D1FE4: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088D2020; } @@ -4515,7 +4395,6 @@ L_088D1FEC: AOT_REGCACHE_SYNC_OUT(); return; L_088D1FF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D2020; } @@ -4524,7 +4403,6 @@ L_088D1FF4: L_088D1FFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D210C; } @@ -4536,7 +4414,6 @@ L_088D2008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D210C; } @@ -4562,7 +4439,6 @@ L_088D2048: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D210C; } @@ -4572,7 +4448,6 @@ L_088D2058: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (static_cast(aot_gpr_4) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D2070; } @@ -4594,9 +4469,7 @@ L_088D2078: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D209C; } @@ -4655,7 +4528,6 @@ L_088D20C0: L_088D210C: aot_gpr_4 = (0u | 214u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_088D21F4; } @@ -4681,7 +4553,6 @@ L_088D2140: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D21F4; } @@ -4707,7 +4578,6 @@ L_088D2160: L_088D2168: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D21F4; } @@ -4752,7 +4622,6 @@ L_088D2178: AOT_REGCACHE_SYNC_OUT(); return; L_088D21F4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088D2204; } @@ -4794,7 +4663,17 @@ L_088D2210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D2248: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -4821,7 +4700,6 @@ L_088D2290: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D230C; } @@ -4831,7 +4709,6 @@ L_088D22AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D2304; } @@ -4854,13 +4731,11 @@ L_088D22BC: } L_088D22E0: aot_gpr_31 = (0x088D22E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088D22E8u) goto L_088D22E8; AOT_REGCACHE_SYNC_OUT(); return; L_088D22E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088D2314; } @@ -4868,7 +4743,6 @@ L_088D22E8: } L_088D22F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D23E8; } @@ -4917,9 +4791,7 @@ L_088D2314: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D2350; } @@ -4934,7 +4806,6 @@ L_088D2350: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_088D237C; @@ -5005,7 +4876,6 @@ L_088D23E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(608))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088D2408; @@ -5016,7 +4886,6 @@ L_088D2408: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (0u | 0u); if (branch_taken) { @@ -5067,7 +4936,6 @@ L_088D247C: goto L_088D2480; L_088D2480: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088D2510; } @@ -5077,7 +4945,6 @@ L_088D2488: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23708))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D24B4; } @@ -5116,7 +4983,6 @@ L_088D24CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23704))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D24F8; } @@ -5153,7 +5019,6 @@ L_088D250C: goto L_088D2510; L_088D2510: { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_088D2614; } @@ -5161,7 +5026,6 @@ L_088D2510: } L_088D2518: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088D2554; } @@ -5174,7 +5038,6 @@ L_088D2520: AOT_REGCACHE_SYNC_OUT(); return; L_088D2528: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D2554; } @@ -5183,7 +5046,6 @@ L_088D2528: L_088D2530: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D2614; } @@ -5195,7 +5057,6 @@ L_088D253C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D2614; } @@ -5221,7 +5082,6 @@ L_088D257C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D2614; } @@ -5274,7 +5134,6 @@ L_088D25B4: AOT_REGCACHE_SYNC_OUT(); return; L_088D2614: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088D2624; } @@ -5314,7 +5173,17 @@ L_088D2630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D2660: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); @@ -5352,7 +5221,6 @@ L_088D26D4: aot_gpr_5 = (16968u << 16u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23696))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[30] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -5370,7 +5238,6 @@ L_088D2700: } L_088D2708: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D2B7C; } @@ -5383,7 +5250,6 @@ L_088D2710: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16179u << 16u); if (branch_taken) { @@ -5393,7 +5259,6 @@ L_088D2710: } L_088D2734: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(ctx.fpr[26])) && ctx.fpr[22] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16179u << 16u); if (branch_taken) { @@ -5412,7 +5277,6 @@ L_088D2754: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_088D2770; @@ -5430,7 +5294,6 @@ L_088D2770: ctx.gpr[23] = (aot_gpr_4 << 16u); ctx.gpr[23] = (static_cast(static_cast(ctx.gpr[23]) >> 16u)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088D27A8; @@ -5472,7 +5335,6 @@ L_088D27EC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088D2804; @@ -5523,7 +5385,6 @@ L_088D2888: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088D28A0; @@ -5630,7 +5491,6 @@ L_088D2960: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_5 = (2237u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 + static_cast(-28320)); if (branch_taken) { @@ -5720,7 +5580,6 @@ L_088D2A40: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (2237u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(-28320)); if (branch_taken) { @@ -5758,7 +5617,6 @@ L_088D2AAC: AOT_REGCACHE_SYNC_OUT(); return; L_088D2AD4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088D2B6C; } @@ -5847,7 +5705,17 @@ L_088D2B7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D2BC0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); @@ -5891,7 +5759,6 @@ L_088D2C34: ctx.fpr[26] = std::bit_cast(0u); ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[30] = std::bit_cast(ctx.gpr[6]); if (branch_taken) { @@ -5909,7 +5776,6 @@ L_088D2C78: } L_088D2C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D304C; } @@ -5954,7 +5820,6 @@ L_088D2CD0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[26])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088D2CE8; @@ -6000,7 +5865,6 @@ L_088D2D58: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088D2D70; @@ -6107,7 +5971,6 @@ L_088D2E30: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_5 = (2237u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 + static_cast(-28320)); if (branch_taken) { @@ -6149,7 +6012,6 @@ L_088D2E98: AOT_REGCACHE_SYNC_OUT(); return; L_088D2ECC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); if (branch_taken) { @@ -6197,7 +6059,6 @@ L_088D2F0C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (2237u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(-28320)); if (branch_taken) { @@ -6238,7 +6099,6 @@ L_088D2F78: AOT_REGCACHE_SYNC_OUT(); return; L_088D2FA8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088D3048; } @@ -6327,7 +6187,17 @@ L_088D304C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D3090: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(52), ctx.gpr[17]); @@ -6404,11 +6274,20 @@ L_088D3158: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[7]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19776))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D3170: { const bool branch_taken = ctx.gpr[7] != 0u; ctx.gpr[6] = (static_cast(ctx.gpr[6]) < 189 ? 1u : 0u); @@ -6419,7 +6298,6 @@ L_088D3170: } L_088D3178: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0052_entry, 52u, 87u, 0x088D4934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6453,7 +6331,6 @@ L_088D31C4: ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(8))); ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(368))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_088D31E4; } @@ -6472,7 +6349,6 @@ L_088D31E4: ctx.gpr[6] = (ctx.gpr[6] + static_cast(-18)); ctx.gpr[7] = (ctx.gpr[6] < static_cast(20) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D3A9C; } @@ -6484,11 +6360,20 @@ L_088D31F4: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[6]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19680))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D320C: aot_gpr_4 = (0u | 284u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(56), aot_gpr_4); @@ -6534,7 +6419,6 @@ L_088D3250: goto L_088D3298; L_088D3298: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0052_entry, 52u, 89u, 0x088D4948u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7040,7 +6924,6 @@ L_088D3884: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(368))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D38D4; } @@ -7223,7 +7106,6 @@ L_088D3AA8: AOT_REGCACHE_SYNC_OUT(); return; L_088D3AB4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D3AEC; } @@ -7423,7 +7305,6 @@ L_088D3CA8: ctx.gpr[6] = (aot_gpr_4 + ctx.gpr[6]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[26]; goto L_088D3CD0; @@ -7448,7 +7329,6 @@ L_088D3CE0: ctx.gpr[6] = (ctx.gpr[6] + static_cast(-18)); ctx.gpr[7] = (ctx.gpr[6] < static_cast(20) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D3EF8; } @@ -7460,11 +7340,20 @@ L_088D3CF0: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[6]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19600))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D3D08: aot_gpr_4 = (0u | 269u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(56), aot_gpr_4); @@ -7671,7 +7560,6 @@ L_088D3F2C: L_088D3F3C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088D3F8C; } diff --git a/profiles/vcs/generated/generated_unit_0052.cpp b/profiles/vcs/generated/generated_unit_0052.cpp index 02a6ca1..5b98b00 100644 --- a/profiles/vcs/generated/generated_unit_0052.cpp +++ b/profiles/vcs/generated/generated_unit_0052.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0052[4096] = { - 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 13, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, - 20, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, - 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, - 0, 52, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 58, 0, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, - 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 77, 0, 0, 78, 0, 0, 0, 79, - 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 0, 85, 86, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 89, 0, 0, 90, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, - 93, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 99, 0, - 100, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 124, 0, 125, 0, 0, 0, - 0, 0, 126, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 130, 0, 131, 0, 132, 0, - 133, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 139, - 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, - 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, - 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, - 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 161, 0, - 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 0, 165, 0, 0, 166, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, - 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 177, 0, - 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 0, - 0, 0, 0, 184, 0, 0, 0, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 189, 0, 190, 0, 0, - 0, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 197, - 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 203, - 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 207, 0, 208, 0, 209, - 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, 219, 0, 220, - 0, 0, 221, 0, 0, 222, 0, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, - 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, - 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, - 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 0, - 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 291, 0, 292, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 300, 0, 301, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 304, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 307, 0, 0, 308, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, - 312, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 326, 0, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, - 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, - 0, 0, 337, 0, 0, 338, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, - 0, 0, 346, 0, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 0, 353, 0, - 0, 354, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 359, 0, 0, 0, 0, - 360, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 0, 368, - 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 372, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 376, - 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, - 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, - 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, - 391, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, - 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, - 0, 401, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, - 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, - 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, - 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, - 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, - 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, - 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, - 451, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, - 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 459, 460, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, - 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 0, 472, 0, - 0, 473, 0, 0, 0, 474, 0, 475, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, - 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 493, 0, - 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 499, 0, 500, 0, 0, 0, 501, - 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 0, 0, 504, 0, 505, 0, 506, 0, 0, 0, 0, 507, 0, 0, 508, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, - 0, 0, 513, 0, 514, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 518, 519, 0, 0, 0, - 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 525, - 0, 0, 526, 527, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, - 532, 0, 533, 0, 0, 534, 0, 0, 0, 535, 0, 0, 0, 0, 536, 0, 0, 0, 537, 0, 538, 0, 539, 0, 0, 540, 0, 541, 0, 542, 0, 0, - 0, 543, 0, 544, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 552, 0, - 0, 0, 553, 0, 554, 0, 555, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 559, 0, 560, 0, 0, 0, 561, 0, 562, 0, 563, 0, - 0, 564, 0, 0, 0, 565, 0, 566, 0, 567, 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 571, 0, 0, 0, 572, 0, 573, 0, 0, - 0, 574, 0, 575, 0, 0, 0, 576, 0, 577, 0, 0, 0, 578, 0, 579, 0, 0, 0, 580, 0, 581, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, - 0, 584, 0, 585, 0, 586, 0, 0, 0, 587, 0, 588, 0, 0, 0, 589, 0, 590, 0, 0, 0, 591, 0, 592, 0, 0, 0, 593, 0, 594, 0, 0, - 0, 595, 0, 596, 0, 0, 597, 0, 0, 598, 0, 0, 599, 0, 600, 0, 601, 0, 0, 602, 0, 603, 0, 0, 0, 604, 0, 605, 0, 0, 0, 606, - 0, 607, 0, 0, 608, 0, 0, 609, 0, 610, 0, 611, 0, 0, 612, 0, 613, 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 617, 0, 0, 618, - 0, 0, 619, 0, 620, 0, 621, 0, 0, 622, 0, 623, 0, 0, 0, 624, 0, 625, 0, 0, 0, 626, 0, 627, 0, 0, 628, 0, 0, 629, 0, 630, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0052[64] = { + 0x5081102840441003ull, 0x0228404521028404ull, 0x200AA422020420A1ull, 0x2410909020060200ull, + 0x2101020842042112ull, 0x1000080004000002ull, 0x0000800040002000ull, 0x0008000400020001ull, + 0x0684084489100010ull, 0x440111090A24A000ull, 0x1000128110400049ull, 0x0000000010000000ull, + 0x00A0410000200000ull, 0x0000080000224000ull, 0x5480210414282400ull, 0x0100001084104105ull, + 0x0400000001000001ull, 0x4420000104000020ull, 0x0000008800008888ull, 0x106448104400A080ull, + 0x4101200414100004ull, 0x2840450811028404ull, 0x8141040284045210ull, 0x02080100A9002040ull, + 0x84100524A8222420ull, 0x0802000012484210ull, 0x1001042800400001ull, 0x2000008400140002ull, + 0x0000401000004200ull, 0x4200080004200200ull, 0x0008000080080000ull, 0x2000010800400002ull, + 0x0008400100000800ull, 0x0080000244200100ull, 0x0002100080000210ull, 0x0012880104448280ull, + 0x1480090020040080ull, 0x204A40A800001080ull, 0x0000401002448281ull, 0x0000081240948150ull, + 0x409204A408102A00ull, 0x4482112420000000ull, 0x4420204108408422ull, 0x8888888888800000ull, + 0x8000001210112448ull, 0x0408204102081040ull, 0x0810408204102081ull, 0x1020810408204102ull, + 0x1002080104008204ull, 0x0020801040082004ull, 0x1208010400820041ull, 0x0420801208012080ull, + 0x2000010140000080ull, 0x2048008401904444ull, 0x211028A241502204ull, 0x4A04420002452012ull, + 0x8A90008000200010ull, 0x2000540004854110ull, 0xA00120221A800114ull, 0x2A5442254400804Cull, + 0x545441545444448Aull, 0x9028A28A28A20AA2ull, 0x8A29524A28A28A2Aull, 0xA4A28A5494514A92ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0052[64] = { + 1u, 14u, 27u, 41u, 52u, 64u, 68u, 71u, 75u, 87u, 100u, 110u, 111u, 116u, 120u, 133u, + 142u, 145u, 151u, 157u, 169u, 178u, 191u, 204u, 213u, 228u, 237u, 244u, 250u, 254u, 260u, 263u, + 268u, 272u, 278u, 283u, 294u, 302u, 312u, 321u, 332u, 345u, 354u, 366u, 377u, 387u, 396u, 406u, + 416u, 424u, 431u, 440u, 449u, 454u, 466u, 481u, 494u, 502u, 513u, 526u, 543u, 564u, 584u, 607u, }; void recomp_unit_0052_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0052_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088D4000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0052[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0052[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0052[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088D4000; @@ -827,11 +734,20 @@ L_088D4030: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19520))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D4048: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(27028))); aot_gpr_5 = (0u | 61u); @@ -863,7 +779,6 @@ L_088D4078: goto L_088D408C; L_088D408C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D4234; } @@ -912,7 +827,6 @@ L_088D40DC: goto L_088D40F0; L_088D40F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D4234; } @@ -949,7 +863,6 @@ L_088D4128: goto L_088D413C; L_088D413C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D4234; } @@ -962,7 +875,6 @@ L_088D4144: ctx.gpr[6] = (0u | 63u); aot_gpr_4 = (ctx.hi); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088D4174; } @@ -986,7 +898,6 @@ L_088D4174: goto L_088D4180; L_088D4180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D4234; } @@ -1023,7 +934,6 @@ L_088D41B8: goto L_088D41CC; L_088D41CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D4234; } @@ -1059,7 +969,6 @@ L_088D4200: goto L_088D4214; L_088D4214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D4234; } @@ -1217,7 +1126,6 @@ L_088D4374: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 3u); if (branch_taken) { @@ -1253,7 +1161,6 @@ L_088D43BC: aot_gpr_5 = (aot_gpr_5 + static_cast(-2)); aot_gpr_4 = (aot_gpr_5 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D448C; } @@ -1265,15 +1172,23 @@ L_088D43D0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19392))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D43E8: aot_gpr_4 = (0u | 51u); { const bool branch_taken = ctx.gpr[6] != aot_gpr_4; - // nop if (branch_taken) { goto L_088D4404; } @@ -1677,7 +1592,6 @@ L_088D4810: goto L_088D4850; L_088D4850: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[26]; goto L_088D486C; @@ -1781,7 +1695,6 @@ L_088D4934: L_088D493C: ctx.gpr[6] = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0051_entry, 51u, 533u, 0x088D3118u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1800,7 +1713,6 @@ L_088D4954: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23679))); aot_gpr_5 = (static_cast(aot_gpr_5) < 61 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088D496C; } @@ -1813,9 +1725,7 @@ L_088D4964: L_088D496C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D4AB0; } @@ -1839,7 +1749,6 @@ L_088D49A0: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D4AB0; } @@ -1863,9 +1772,7 @@ L_088D49C0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[13]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D49F8; } @@ -1894,7 +1801,6 @@ L_088D4A00: L_088D4A0C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D4AB0; } @@ -1947,7 +1853,6 @@ L_088D4A80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23679))); aot_gpr_4 = (static_cast(aot_gpr_4) < 61 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D4AA4; } @@ -1986,7 +1891,17 @@ L_088D4AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D4AF0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-176)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -2106,17 +2021,25 @@ L_088D4CA0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-19352))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D4CB8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6276))); aot_gpr_4 = (17480u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17442u << 16u); if (branch_taken) { @@ -2149,7 +2072,6 @@ L_088D4CDC: { const float fs = aot_fpr_15; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_14 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(24))); if (branch_taken) { @@ -2268,7 +2190,6 @@ L_088D4E54: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D4E70; } @@ -2286,9 +2207,7 @@ L_088D4E70: aot_gpr_4 = (ctx.gpr[8] + ctx.gpr[17]); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D4EF0; } @@ -2298,7 +2217,6 @@ L_088D4E88: ctx.gpr[6] = (16256u << 16u); aot_fpr_15 = std::bit_cast(ctx.gpr[6]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (17076u << 16u); goto L_088D4EB4; @@ -2330,7 +2248,6 @@ L_088D4EB4: L_088D4EDC: aot_gpr_4 = (static_cast(aot_gpr_4) < -969 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D4F68; } @@ -2374,11 +2291,20 @@ L_088D4F08: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-18496))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D4F20: aot_gpr_4 = (0u | 5932u); aot_gpr_5 = (0u | 20u); @@ -2617,7 +2543,6 @@ L_088D5180: L_088D51D4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26332))); if (branch_taken) { @@ -2644,7 +2569,6 @@ L_088D51F8: goto L_088D520C; L_088D520C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - ctx.fpr[24]; goto L_088D522C; @@ -2725,8 +2649,6 @@ L_088D529C: ctx.gpr[6] = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(16))); { const std::int64_t product = static_cast(static_cast(ctx.gpr[6])) * static_cast(static_cast(ctx.gpr[9])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[6] = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = ctx.gpr[6]; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = 0u == 0u; @@ -2750,7 +2672,6 @@ L_088D531C: } L_088D5334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7810; } @@ -2767,7 +2688,6 @@ L_088D533C: aot_mem.aot_direct_store8(ctx.gpr[29] + static_cast(16), static_cast(ctx.gpr[7])); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(311))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088D53AC; } @@ -2809,7 +2729,6 @@ L_088D5390: L_088D53AC: aot_gpr_4 = (0u | 35u); { const bool branch_taken = ctx.gpr[10] != aot_gpr_4; - // nop if (branch_taken) { goto L_088D53C8; } @@ -2887,7 +2806,6 @@ L_088D5450: goto L_088D5468; L_088D5468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7810; } @@ -2944,11 +2862,20 @@ L_088D54E0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-18384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D54F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(27028))); ctx.gpr[6] = (0u | 61u); @@ -2980,7 +2907,6 @@ L_088D5528: goto L_088D553C; L_088D553C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D56FC; } @@ -3029,7 +2955,6 @@ L_088D558C: goto L_088D55A0; L_088D55A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D56FC; } @@ -3066,7 +2991,6 @@ L_088D55D8: goto L_088D55EC; L_088D55EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D56FC; } @@ -3079,7 +3003,6 @@ L_088D55F4: ctx.gpr[7] = (0u | 63u); aot_gpr_4 = (ctx.hi); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D5624; } @@ -3103,7 +3026,6 @@ L_088D5624: goto L_088D5630; L_088D5630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D56FC; } @@ -3140,7 +3062,6 @@ L_088D5668: goto L_088D567C; L_088D567C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D56FC; } @@ -3183,7 +3104,6 @@ L_088D56C0: goto L_088D56D8; L_088D56D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D56FC; } @@ -3254,7 +3174,6 @@ L_088D576C: } L_088D5774: { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088D57E4; } @@ -3321,7 +3240,6 @@ L_088D57E4: L_088D5814: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[10] = (0u | 319u); if (branch_taken) { @@ -3348,7 +3266,6 @@ L_088D5844: aot_gpr_4 = (aot_gpr_5 + static_cast(-22)); ctx.gpr[6] = (aot_gpr_4 < static_cast(16) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_088D58A0; } @@ -3360,11 +3277,20 @@ L_088D5854: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-18256))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D586C: { const bool branch_taken = 0u == 0u; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), ctx.gpr[10]); @@ -3410,7 +3336,6 @@ L_088D5894: } L_088D58A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7810; } @@ -3426,7 +3351,6 @@ L_088D58A8: aot_gpr_4 = (aot_gpr_5 + static_cast(-24)); aot_gpr_5 = (aot_gpr_4 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088D594C; } @@ -3438,11 +3362,20 @@ L_088D58D0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-18192))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D58E8: aot_gpr_4 = (0u | 26000u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_4); @@ -3639,7 +3572,17 @@ L_088D5AA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D5AC0: aot_gpr_4 = (0u | 284u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_4); @@ -4183,7 +4126,6 @@ L_088D6120: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(4))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D6168; } @@ -4346,7 +4288,6 @@ L_088D62C4: } L_088D631C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7810; } @@ -4356,7 +4297,6 @@ L_088D6324: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6276))); ctx.gpr[10] = (0u | 75u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[11] = (0u | 2u); if (branch_taken) { @@ -4383,7 +4323,6 @@ L_088D6358: aot_gpr_4 = (aot_gpr_4 + static_cast(-18)); aot_gpr_5 = (aot_gpr_4 < static_cast(20) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088D64E8; } @@ -4395,11 +4334,20 @@ L_088D6368: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-18080))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D6380: aot_gpr_4 = (0u | 269u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_4); @@ -4539,7 +4487,6 @@ L_088D64DC: } L_088D64E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7810; } @@ -4603,7 +4550,6 @@ L_088D658C: AOT_REGCACHE_SYNC_OUT(); return; L_088D6594: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088D65B8; } @@ -4630,7 +4576,6 @@ L_088D65B8: AOT_REGCACHE_SYNC_OUT(); return; L_088D65C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D65F4; } @@ -4686,7 +4631,6 @@ L_088D6624: aot_gpr_4 = (ctx.gpr[8] + ctx.gpr[17]); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - ctx.fpr[24]; goto L_088D6648; @@ -4710,7 +4654,6 @@ L_088D6648: L_088D6658: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D6690; } @@ -4778,7 +4721,6 @@ L_088D6710: AOT_REGCACHE_SYNC_OUT(); return; L_088D6718: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088D673C; } @@ -4805,7 +4747,6 @@ L_088D673C: AOT_REGCACHE_SYNC_OUT(); return; L_088D6748: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D6778; } @@ -4925,7 +4866,6 @@ L_088D6850: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D6888; } @@ -4952,7 +4892,6 @@ L_088D6888: AOT_REGCACHE_SYNC_OUT(); return; L_088D6894: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D68C4; } @@ -5045,7 +4984,6 @@ L_088D68F8: L_088D6974: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - ctx.fpr[24]; goto L_088D6994; @@ -5078,7 +5016,6 @@ L_088D69B0: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088D6A80; } @@ -5090,15 +5027,23 @@ L_088D69C4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-18000))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D69DC: aot_gpr_4 = (0u | 51u); { const bool branch_taken = ctx.gpr[10] != aot_gpr_4; - // nop if (branch_taken) { goto L_088D69F8; } @@ -5369,7 +5314,6 @@ L_088D6C0C: goto L_088D6C18; L_088D6C18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - ctx.fpr[24]; goto L_088D6C34; @@ -6220,7 +6164,6 @@ L_088D741C: } L_088D7478: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7810; } @@ -6267,7 +6210,6 @@ L_088D74A0: L_088D74F4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - ctx.fpr[24]; goto L_088D7518; @@ -6293,7 +6235,6 @@ L_088D7528: aot_gpr_4 = (ctx.gpr[17] + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088D755C; } @@ -6305,11 +6246,20 @@ L_088D7538: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17960))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D7550: aot_gpr_4 = (0u | 234u); { const bool branch_taken = 0u == 0u; @@ -6436,7 +6386,6 @@ L_088D7660: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(44))); aot_fpr_14 = aot_fpr_14 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - ctx.fpr[24]; goto L_088D7684; @@ -6469,7 +6418,6 @@ L_088D769C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23672))); aot_gpr_4 = (static_cast(aot_gpr_4) < 61 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D76B4; } @@ -6484,9 +6432,7 @@ L_088D76B4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_15)); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D77F8; } @@ -6511,7 +6457,6 @@ L_088D76F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D77F8; } @@ -6533,9 +6478,7 @@ L_088D7710: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[13]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D7740; } @@ -6564,7 +6507,6 @@ L_088D7748: L_088D7758: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(25))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D77F8; } @@ -6616,7 +6558,6 @@ L_088D77C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23672))); aot_gpr_4 = (static_cast(aot_gpr_4) < 61 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D77EC; } @@ -6688,7 +6629,17 @@ L_088D7854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D789C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(84), ctx.gpr[20]); @@ -6710,7 +6661,6 @@ L_088D789C: L_088D78D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D78EC; } @@ -6718,7 +6668,6 @@ L_088D78D0: } L_088D78DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7948; } @@ -6726,7 +6675,6 @@ L_088D78DC: } L_088D78E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7B18; } @@ -6736,7 +6684,6 @@ L_088D78EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1972))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7940; } @@ -6773,7 +6720,6 @@ L_088D7920: } L_088D7938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7B18; } @@ -6781,7 +6727,6 @@ L_088D7938: } L_088D7940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7B18; } @@ -6801,7 +6746,6 @@ L_088D7948: L_088D795C: aot_gpr_4 = (static_cast(ctx.gpr[20]) < 201 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D79A8; } @@ -6831,7 +6775,6 @@ L_088D7968: } L_088D79A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7B18; } @@ -6839,7 +6782,6 @@ L_088D79A8: } L_088D79B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D79A8; } @@ -6865,9 +6807,7 @@ L_088D79B8: L_088D79F4: ctx.fpr[13] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D7A10; } @@ -6875,7 +6815,6 @@ L_088D79F4: } L_088D7A08: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088D7B18; } @@ -6908,7 +6847,6 @@ L_088D7A20: AOT_REGCACHE_SYNC_OUT(); return; L_088D7A5C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088D7A6C; } @@ -6967,7 +6905,6 @@ L_088D7A94: L_088D7AB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D7B18; } @@ -7005,7 +6942,6 @@ L_088D7AC0: } L_088D7AF4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7B08; } @@ -7045,7 +6981,17 @@ L_088D7B18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D7B3C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), ctx.gpr[18]); @@ -7075,7 +7021,6 @@ L_088D7B68: } L_088D7B78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7B88; } @@ -7083,7 +7028,6 @@ L_088D7B78: } L_088D7B80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7B94; } @@ -7102,7 +7046,6 @@ L_088D7B94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1732))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D7BB8; } @@ -7113,7 +7056,6 @@ L_088D7BA4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7BE4; } @@ -7131,7 +7073,6 @@ L_088D7BB8: } L_088D7BC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7BD8; } @@ -7139,7 +7080,6 @@ L_088D7BC8: } L_088D7BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D7BE4; } @@ -7161,7 +7101,6 @@ L_088D7BE4: AOT_REGCACHE_SYNC_OUT(); return; L_088D7BEC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088D7C0C; } @@ -7176,7 +7115,6 @@ L_088D7BF4: AOT_REGCACHE_SYNC_OUT(); return; L_088D7C04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7186,7 +7124,6 @@ L_088D7C0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2280))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D7C38; } @@ -7195,7 +7132,6 @@ L_088D7C0C: L_088D7C1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2280))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7C38; } @@ -7205,7 +7141,6 @@ L_088D7C28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088D7C78; } @@ -7222,7 +7157,6 @@ L_088D7C48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-16352))); aot_gpr_4 = (aot_gpr_4 + static_cast(6028)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D7C70; } @@ -7248,7 +7182,6 @@ L_088D7C68: } L_088D7C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7263,7 +7196,6 @@ L_088D7C78: AOT_REGCACHE_SYNC_OUT(); return; L_088D7C88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7279,7 +7211,6 @@ L_088D7C90: } L_088D7C98: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088D7CB8; } @@ -7291,11 +7222,20 @@ L_088D7CA0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17920))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D7CB8: aot_gpr_4 = (aot_gpr_16 | 0u); aot_gpr_5 = (ctx.gpr[17] | 0u); @@ -7305,7 +7245,6 @@ L_088D7CB8: AOT_REGCACHE_SYNC_OUT(); return; L_088D7CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7313,7 +7252,6 @@ L_088D7CC8: } L_088D7CD0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D7CB8; } @@ -7328,7 +7266,6 @@ L_088D7CD8: AOT_REGCACHE_SYNC_OUT(); return; L_088D7CE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7345,7 +7282,6 @@ L_088D7CF0: L_088D7CF8: aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7D5C; } @@ -7360,7 +7296,6 @@ L_088D7D04: AOT_REGCACHE_SYNC_OUT(); return; L_088D7D14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7388,11 +7323,20 @@ L_088D7D2C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17864))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D7D44: aot_gpr_4 = (aot_gpr_16 | 0u); aot_gpr_5 = (ctx.gpr[17] | 0u); @@ -7402,7 +7346,6 @@ L_088D7D44: AOT_REGCACHE_SYNC_OUT(); return; L_088D7D54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7417,7 +7360,6 @@ L_088D7D5C: AOT_REGCACHE_SYNC_OUT(); return; L_088D7D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7432,7 +7374,6 @@ L_088D7D74: AOT_REGCACHE_SYNC_OUT(); return; L_088D7D84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7447,7 +7388,6 @@ L_088D7D8C: AOT_REGCACHE_SYNC_OUT(); return; L_088D7D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7462,7 +7402,6 @@ L_088D7DA4: AOT_REGCACHE_SYNC_OUT(); return; L_088D7DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7477,7 +7416,6 @@ L_088D7DBC: AOT_REGCACHE_SYNC_OUT(); return; L_088D7DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7490,7 +7428,6 @@ L_088D7DD4: aot_gpr_16 = (ctx.hi); aot_gpr_4 = (aot_gpr_16 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7E8C; } @@ -7523,7 +7460,6 @@ L_088D7E04: } L_088D7E0C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_088D7E74; } @@ -7538,7 +7474,6 @@ L_088D7E14: AOT_REGCACHE_SYNC_OUT(); return; L_088D7E24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7553,7 +7488,6 @@ L_088D7E2C: AOT_REGCACHE_SYNC_OUT(); return; L_088D7E3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7568,7 +7502,6 @@ L_088D7E44: AOT_REGCACHE_SYNC_OUT(); return; L_088D7E54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7583,7 +7516,6 @@ L_088D7E5C: AOT_REGCACHE_SYNC_OUT(); return; L_088D7E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7598,7 +7530,6 @@ L_088D7E74: AOT_REGCACHE_SYNC_OUT(); return; L_088D7E84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7639,7 +7570,6 @@ L_088D7EB0: } L_088D7EB8: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_088D7EEC; } @@ -7656,7 +7586,6 @@ L_088D7EC0: } L_088D7ECC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7EC0; } @@ -7671,7 +7600,6 @@ L_088D7ED4: AOT_REGCACHE_SYNC_OUT(); return; L_088D7EE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7686,7 +7614,6 @@ L_088D7EEC: AOT_REGCACHE_SYNC_OUT(); return; L_088D7EFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7718,7 +7645,6 @@ L_088D7F1C: } L_088D7F24: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_088D7F58; } @@ -7735,7 +7661,6 @@ L_088D7F2C: } L_088D7F38: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7F2C; } @@ -7750,7 +7675,6 @@ L_088D7F40: AOT_REGCACHE_SYNC_OUT(); return; L_088D7F50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7765,7 +7689,6 @@ L_088D7F58: AOT_REGCACHE_SYNC_OUT(); return; L_088D7F68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7797,7 +7720,6 @@ L_088D7F88: } L_088D7F90: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_088D7FC4; } @@ -7814,7 +7736,6 @@ L_088D7F98: } L_088D7FA4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D7F98; } @@ -7829,7 +7750,6 @@ L_088D7FAC: AOT_REGCACHE_SYNC_OUT(); return; L_088D7FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7844,7 +7764,6 @@ L_088D7FC4: AOT_REGCACHE_SYNC_OUT(); return; L_088D7FD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 24u, 0x088D80FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7876,7 +7795,6 @@ L_088D7FF4: } L_088D7FFC: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0053_entry, 53u, 5u, 0x088D8030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0053.cpp b/profiles/vcs/generated/generated_unit_0053.cpp index 700c714..72051f0 100644 --- a/profiles/vcs/generated/generated_unit_0053.cpp +++ b/profiles/vcs/generated/generated_unit_0053.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0053[4082] = { - 1, 0, 0, 2, 0, 3, 0, 0, 0, 4, 0, 5, 0, 0, 0, 6, 0, 7, 0, 0, 8, 0, 0, 9, 10, 0, 0, 11, 0, 12, 0, 13, - 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 0, 18, 0, 19, 0, 0, 0, 20, 0, 21, 0, 0, 0, 22, 0, 23, 0, 0, 24, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 28, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 32, - 0, 33, 0, 34, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 43, 44, 0, 45, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 50, 0, 51, 0, 52, 0, 0, 53, 0, 0, 54, - 0, 0, 0, 0, 0, 0, 55, 56, 0, 57, 0, 58, 0, 0, 59, 0, 60, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 63, 64, 0, 65, - 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 70, 0, 71, 0, 72, 0, 0, 73, 0, 0, 74, 0, 75, 0, 0, 0, 76, - 0, 77, 0, 0, 0, 0, 0, 78, 0, 79, 0, 80, 0, 81, 0, 0, 0, 82, 0, 83, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, 87, 0, - 88, 0, 89, 0, 90, 0, 0, 0, 91, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 0, 97, 0, 98, 0, 0, 0, - 99, 0, 100, 0, 101, 0, 0, 0, 102, 0, 103, 0, 0, 104, 0, 105, 0, 0, 0, 106, 0, 107, 0, 0, 0, 108, 0, 109, 0, 0, 0, 110, - 0, 111, 0, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 0, 0, 116, 0, 117, 0, 118, 0, 119, 0, 0, 0, 120, 0, 121, 0, 0, 0, 122, - 0, 123, 0, 0, 0, 124, 0, 125, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 0, 133, - 0, 134, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, - 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, - 145, 0, 0, 0, 0, 146, 0, 0, 147, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, 159, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, - 213, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 0, 0, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 224, - 0, 225, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 252, - 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, - 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, - 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 280, 0, - 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, - 289, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 305, 0, 306, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, - 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 326, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, - 0, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, - 0, 348, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 353, 0, 0, 0, 354, 355, 0, 0, 0, 0, 356, 0, - 357, 358, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, - 0, 0, 371, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, - 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, - 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, - 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, - 0, 0, 0, 0, 0, 0, 0, 398, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 0, 402, 0, 403, 0, 0, 0, 404, 0, - 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 414, 0, 415, 416, 0, 0, 0, 417, 418, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 428, 0, - 0, 429, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 437, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 0, 443, 0, 0, 0, - 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, - 450, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, 458, - 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 465, 0, 0, 0, 0, - 0, 0, 0, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, 471, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, - 0, 0, 0, 474, 0, 475, 0, 0, 0, 476, 0, 0, 477, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 0, 481, 0, 482, - 0, 483, 0, 0, 484, 0, 485, 0, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, - 490, 491, 0, 0, 492, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, - 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 510, 0, 511, 0, 0, 0, 512, 0, 0, 513, - 0, 514, 0, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, - 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, - 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 531, 532, 0, 0, 0, 0, 533, 0, 534, 0, 535, 0, 536, 0, 0, 0, 537, 0, 538, 0, - 539, 0, 540, 0, 541, 0, 0, 0, 0, 542, 0, 0, 543, 0, 544, 0, 545, 0, 0, 546, 0, 547, 0, 548, 0, 0, 0, 0, 549, 0, 550, 0, - 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, 555, 0, 556, 0, 557, 0, 0, 558, 0, 559, 560, - 0, 0, 561, 0, 0, 562, 0, 0, 563, 0, 0, 0, 564, 0, 0, 565, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, - 0, 0, 0, 569, 0, 570, 0, 0, 571, 0, 572, 0, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, - 0, 577, 0, 578, 0, 0, 579, 0, 0, 0, 580, 581, 0, 582, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 586, 0, 0, 0, - 0, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, 592, 0, 593, 0, - 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 0, 0, 0, 597, 0, 0, 598, 0, 0, 599, 0, 0, 600, 0, 601, 0, 602, 0, 0, 603, - 0, 0, 0, 604, 0, 0, 605, 0, 606, 0, 0, 607, 0, 0, 608, 0, 0, 609, 0, 0, 610, 0, 0, 0, 0, 0, 611, 0, 612, 0, 613, 0, - 0, 614, 615, 0, 616, 0, 0, 0, 0, 617, 0, 618, 0, 0, 619, 0, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 624, - 0, 625, 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 629, 0, 630, 0, 0, 631, 0, 632, 0, 0, 633, 0, 0, 0, 634, 0, 635, 0, - 0, 636, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 646, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, - 649, 0, 650, 0, 0, 651, 0, 0, 0, 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 660, 0, 661, 0, 0, - 0, 0, 662, 0, 0, 0, 663, 664, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 669, 0, 670, 0, 671, 0, 672, 0, 0, 0, - 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 675, 0, 0, 0, 0, 676, 0, 677, 0, 678, 0, 0, 0, 0, 0, 679, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 0, 684, 0, 0, 0, - 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 687, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, - 0, 0, 0, 0, 692, 0, 0, 0, 693, 694, 0, 0, 695, 0, 0, 0, 0, 0, 696, 0, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 706, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0053[64] = { + 0x4A28A2A8A9928A29ull, 0x092B024AC0929010ull, 0xB0254AC092B024ACull, 0x454A2A828A4AC092ull, + 0x8A28A51514514515ull, 0x000048A28A2A8AA2ull, 0x0810208A95500000ull, 0x4410852120810204ull, + 0x0000000020000840ull, 0x0008281004124100ull, 0x110508100820100Aull, 0x0084000002200900ull, + 0x0200802008200200ull, 0x8020080200802008ull, 0x0802008020080200ull, 0x0101000042208020ull, + 0x0800041000040400ull, 0x0002028000100029ull, 0x0000020280400248ull, 0x0400008000100002ull, + 0x0040000100002000ull, 0x0001000010000200ull, 0x0200020040004008ull, 0x0800084010001080ull, + 0x2108541094000420ull, 0x0200084000020002ull, 0x8010100202004010ull, 0x4205081100800200ull, + 0x0425002001002001ull, 0x2829004040289011ull, 0x002A000029400100ull, 0x2008020008010000ull, + 0x8010020040080100ull, 0x0880000082022084ull, 0x0028908004100208ull, 0x4201000000855420ull, + 0x2002102343148242ull, 0x2000008011000001ull, 0x8884441490020000ull, 0x8008484088891088ull, + 0x451401806010100Aull, 0x0C6A800088804488ull, 0x8020000020001020ull, 0x421090AA44412000ull, + 0x0842082210442210ull, 0x0C090A0485492021ull, 0xA109122821148910ull, 0x2002009320404252ull, + 0x4208801400284801ull, 0x914A000000001000ull, 0x080010020102002Aull, 0x0001000042022084ull, + 0x50A9521551543240ull, 0x20489124D2A28081ull, 0x14442C4A24012528ull, 0x9524848854420204ull, + 0x94244A1654124948ull, 0x0412102251294416ull, 0x0025242510A88202ull, 0x2810040000000002ull, + 0x15500420000002C4ull, 0x1240280082A14004ull, 0x0144131048224201ull, 0x0002800081200414ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0053[64] = { + 1u, 25u, 43u, 66u, 88u, 111u, 128u, 140u, 153u, 156u, 165u, 176u, 182u, 188u, 195u, 201u, + 208u, 213u, 220u, 227u, 231u, 234u, 237u, 242u, 248u, 260u, 265u, 272u, 281u, 289u, 302u, 310u, + 315u, 321u, 329u, 338u, 348u, 363u, 368u, 379u, 392u, 405u, 419u, 424u, 438u, 450u, 466u, 483u, + 496u, 507u, 514u, 522u, 529u, 551u, 569u, 587u, 604u, 625u, 642u, 657u, 662u, 673u, 685u, 699u, }; void recomp_unit_0053_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0053_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088D8004u; - entry_id = (entry_delta < 16328u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0053[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16328u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0053[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0053[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088D8004; @@ -888,7 +795,6 @@ L_088D8004: } L_088D8010: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D8004; } @@ -903,7 +809,6 @@ L_088D8018: AOT_REGCACHE_SYNC_OUT(); return; L_088D8028: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D80FC; } @@ -918,7 +823,6 @@ L_088D8030: AOT_REGCACHE_SYNC_OUT(); return; L_088D8040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D80FC; } @@ -956,7 +860,6 @@ L_088D8064: } L_088D8070: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_088D80F0; } @@ -964,7 +867,6 @@ L_088D8070: } L_088D8078: { const bool branch_taken = static_cast(aot_gpr_16) > 0; - // nop if (branch_taken) { goto L_088D80C0; } @@ -979,7 +881,6 @@ L_088D8080: AOT_REGCACHE_SYNC_OUT(); return; L_088D8090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D80FC; } @@ -995,7 +896,6 @@ L_088D8098: } L_088D80A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D80F0; } @@ -1010,7 +910,6 @@ L_088D80A8: AOT_REGCACHE_SYNC_OUT(); return; L_088D80B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D80FC; } @@ -1025,7 +924,6 @@ L_088D80C0: AOT_REGCACHE_SYNC_OUT(); return; L_088D80D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D80FC; } @@ -1040,7 +938,6 @@ L_088D80D8: AOT_REGCACHE_SYNC_OUT(); return; L_088D80E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D80FC; } @@ -1068,7 +965,17 @@ L_088D80FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D8114: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -1086,7 +993,6 @@ L_088D8114: L_088D8134: ctx.gpr[7] = (0u | 137u); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D8154; } @@ -1094,7 +1000,6 @@ L_088D8134: } L_088D8140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D8190; } @@ -1112,7 +1017,6 @@ L_088D8148: L_088D8154: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23560))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D8188; } @@ -1136,7 +1040,6 @@ L_088D817C: goto L_088D8180; L_088D8180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1149,7 +1052,6 @@ L_088D8188: L_088D8190: ctx.gpr[7] = (0u | 115u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D81D8; } @@ -1158,7 +1060,6 @@ L_088D8190: L_088D819C: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23559))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D81D0; } @@ -1182,7 +1083,6 @@ L_088D81C4: goto L_088D81C8; L_088D81C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1195,7 +1095,6 @@ L_088D81D0: L_088D81D8: ctx.gpr[7] = (0u | 147u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D8220; } @@ -1204,7 +1103,6 @@ L_088D81D8: L_088D81E4: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23558))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D8218; } @@ -1228,7 +1126,6 @@ L_088D820C: goto L_088D8210; L_088D8210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1241,7 +1138,6 @@ L_088D8218: L_088D8220: ctx.gpr[7] = (0u | 120u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D8268; } @@ -1250,7 +1146,6 @@ L_088D8220: L_088D822C: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23557))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D8260; } @@ -1274,7 +1169,6 @@ L_088D8254: goto L_088D8258; L_088D8258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1287,7 +1181,6 @@ L_088D8260: L_088D8268: ctx.gpr[7] = (0u | 122u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D82B0; } @@ -1296,7 +1189,6 @@ L_088D8268: L_088D8274: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23556))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D82A8; } @@ -1320,7 +1212,6 @@ L_088D829C: goto L_088D82A0; L_088D82A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1349,7 +1240,6 @@ L_088D82BC: } L_088D82C4: { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D8308; } @@ -1358,7 +1248,6 @@ L_088D82C4: L_088D82CC: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23555))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D8300; } @@ -1382,7 +1271,6 @@ L_088D82F4: goto L_088D82F8; L_088D82F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1395,7 +1283,6 @@ L_088D8300: L_088D8308: ctx.gpr[7] = (0u | 135u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D8350; } @@ -1404,7 +1291,6 @@ L_088D8308: L_088D8314: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23554))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D8348; } @@ -1428,7 +1314,6 @@ L_088D833C: goto L_088D8340; L_088D8340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1441,7 +1326,6 @@ L_088D8348: L_088D8350: ctx.gpr[7] = (0u | 107u); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088D8388; } @@ -1458,7 +1342,6 @@ L_088D835C: } L_088D8368: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_088D83D0; } @@ -1509,7 +1392,6 @@ L_088D83A8: } L_088D83B0: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D83D0; } @@ -1544,7 +1426,6 @@ L_088D83D0: } L_088D83DC: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_088D845C; } @@ -1552,7 +1433,6 @@ L_088D83DC: } L_088D83E4: { const bool branch_taken = static_cast(ctx.gpr[7]) > 0; - // nop if (branch_taken) { goto L_088D842C; } @@ -1567,7 +1447,6 @@ L_088D83EC: AOT_REGCACHE_SYNC_OUT(); return; L_088D83FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1583,7 +1462,6 @@ L_088D8404: } L_088D840C: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D845C; } @@ -1598,7 +1476,6 @@ L_088D8414: AOT_REGCACHE_SYNC_OUT(); return; L_088D8424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1613,7 +1490,6 @@ L_088D842C: AOT_REGCACHE_SYNC_OUT(); return; L_088D843C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1628,7 +1504,6 @@ L_088D8444: AOT_REGCACHE_SYNC_OUT(); return; L_088D8454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1643,7 +1518,6 @@ L_088D845C: AOT_REGCACHE_SYNC_OUT(); return; L_088D846C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1661,7 +1535,6 @@ L_088D8474: } L_088D8484: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_088D8508; } @@ -1669,7 +1542,6 @@ L_088D8484: } L_088D848C: { const bool branch_taken = static_cast(ctx.gpr[7]) > 0; - // nop if (branch_taken) { goto L_088D84D8; } @@ -1684,7 +1556,6 @@ L_088D8494: AOT_REGCACHE_SYNC_OUT(); return; L_088D84A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1701,7 +1572,6 @@ L_088D84AC: } L_088D84B8: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D8508; } @@ -1716,7 +1586,6 @@ L_088D84C0: AOT_REGCACHE_SYNC_OUT(); return; L_088D84D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1731,7 +1600,6 @@ L_088D84D8: AOT_REGCACHE_SYNC_OUT(); return; L_088D84E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1746,7 +1614,6 @@ L_088D84F0: AOT_REGCACHE_SYNC_OUT(); return; L_088D8500: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1761,7 +1628,6 @@ L_088D8508: AOT_REGCACHE_SYNC_OUT(); return; L_088D8518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1769,7 +1635,6 @@ L_088D8518: } L_088D8520: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_088D85A0; } @@ -1777,7 +1642,6 @@ L_088D8520: } L_088D8528: { const bool branch_taken = static_cast(ctx.gpr[7]) > 0; - // nop if (branch_taken) { goto L_088D8570; } @@ -1792,7 +1656,6 @@ L_088D8530: AOT_REGCACHE_SYNC_OUT(); return; L_088D8540: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1808,7 +1671,6 @@ L_088D8548: } L_088D8550: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088D85A0; } @@ -1823,7 +1685,6 @@ L_088D8558: AOT_REGCACHE_SYNC_OUT(); return; L_088D8568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1838,7 +1699,6 @@ L_088D8570: AOT_REGCACHE_SYNC_OUT(); return; L_088D8580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1853,7 +1713,6 @@ L_088D8588: AOT_REGCACHE_SYNC_OUT(); return; L_088D8598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D85B0; } @@ -1873,7 +1732,17 @@ L_088D85B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D85BC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(24), aot_gpr_16); @@ -1920,7 +1789,6 @@ L_088D8654: AOT_REGCACHE_SYNC_OUT(); return; L_088D865C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D866C; } @@ -1928,7 +1796,6 @@ L_088D865C: } L_088D8664: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D881C; } @@ -1942,7 +1809,6 @@ L_088D866C: L_088D8674: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D881C; } @@ -1962,7 +1828,6 @@ L_088D8690: ctx.gpr[17] = (aot_gpr_2 | 0u); aot_gpr_4 = (ctx.gpr[17] < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D8760; } @@ -1978,7 +1843,17 @@ L_088D86A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D86B8: aot_gpr_4 = (0u | 176u); aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_20)); @@ -2105,9 +1980,7 @@ L_088D87AC: L_088D87C0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D881C; } @@ -2126,7 +1999,6 @@ L_088D87EC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D881C; } @@ -2148,7 +2020,6 @@ L_088D881C: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 48 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D8654; } @@ -2179,7 +2050,17 @@ L_088D8830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D8878: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(40), aot_gpr_16); @@ -2229,7 +2110,6 @@ L_088D8924: ctx.gpr[19] = (ctx.gpr[20] + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D8BCC; } @@ -2238,7 +2118,6 @@ L_088D8924: L_088D893C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(19))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D8BCC; } @@ -2247,7 +2126,6 @@ L_088D893C: L_088D8948: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D8994; } @@ -2293,7 +2171,6 @@ L_088D8994: } L_088D89B0: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D8A58; } @@ -2316,7 +2193,6 @@ L_088D89D0: ctx.gpr[17] = (0u | 100u); aot_gpr_4 = (ctx.lo); aot_gpr_5 = (aot_gpr_4 >> 8u); - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), aot_gpr_4); aot_gpr_5 = (ctx.lo); @@ -2330,7 +2206,6 @@ L_088D89D0: } L_088D8A08: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D8A58; } @@ -2407,7 +2282,6 @@ L_088D8A94: L_088D8AB0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[30] < static_cast(1) ? 1u : 0u); if (branch_taken) { @@ -2417,7 +2291,6 @@ L_088D8AB0: } L_088D8AC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D8B24; } @@ -2436,7 +2309,6 @@ L_088D8AE4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D8B24; } @@ -2460,7 +2332,6 @@ L_088D8AF4: L_088D8B24: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(76))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D8BCC; } @@ -2522,7 +2393,6 @@ L_088D8BCC: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088D8924; } @@ -2553,7 +2423,17 @@ L_088D8BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D8C28: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(28), aot_gpr_16); @@ -2576,11 +2456,20 @@ L_088D8C58: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17704))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D8C70: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -2997,7 +2886,6 @@ L_088D90F0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D9118; } @@ -3011,7 +2899,6 @@ L_088D9104: AOT_REGCACHE_SYNC_OUT(); return; L_088D9110: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088D91A0; } @@ -3065,7 +2952,6 @@ L_088D9154: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(92), static_cast(aot_gpr_4)); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(113), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9CCC; } @@ -3073,7 +2959,6 @@ L_088D9154: } L_088D91A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -3123,7 +3008,6 @@ L_088D9210: L_088D921C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088D9280; } @@ -3162,7 +3046,6 @@ L_088D925C: } L_088D9280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -3670,13 +3553,11 @@ L_088D982C: } L_088D986C: aot_gpr_31 = (0x088D9874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088D9874u) goto L_088D9874; AOT_REGCACHE_SYNC_OUT(); return; L_088D9874: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088D98BC; } @@ -3699,14 +3580,22 @@ L_088D9894: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17352))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D98AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D98E4; } @@ -3714,7 +3603,6 @@ L_088D98AC: } L_088D98B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -4002,7 +3890,6 @@ L_088D9BB0: AOT_REGCACHE_SYNC_OUT(); return; L_088D9BC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -4028,7 +3915,6 @@ L_088D9BE8: AOT_REGCACHE_SYNC_OUT(); return; L_088D9BFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -4102,7 +3988,6 @@ L_088D9C98: } L_088D9CC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -4117,9 +4002,7 @@ L_088D9CCC: L_088D9CD8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088D9D7C; } @@ -4138,7 +4021,6 @@ L_088D9D04: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088D9D50; } @@ -4172,7 +4054,6 @@ L_088D9D40: AOT_REGCACHE_SYNC_OUT(); return; L_088D9D50: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088D9D7C; } @@ -4205,7 +4086,17 @@ L_088D9D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D9D9C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_16); @@ -4233,7 +4124,6 @@ L_088D9DC4: } L_088D9DD0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088D9EC8; } @@ -4245,14 +4135,22 @@ L_088D9DD8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17224))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088D9DF0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D9EC8; } @@ -4345,7 +4243,6 @@ L_088D9E78: } L_088D9EC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DA168; } @@ -4353,7 +4250,6 @@ L_088D9EC8: } L_088D9ED0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088D9EC8; } @@ -4397,7 +4293,6 @@ L_088D9ED8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DA100; } @@ -4564,9 +4459,7 @@ L_088DA100: L_088DA10C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA168; } @@ -4585,7 +4478,6 @@ L_088DA138: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088DA168; } @@ -4615,7 +4507,17 @@ L_088DA168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DA180: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); ctx.gpr[6] = (aot_gpr_5 << 6u); @@ -4650,7 +4552,6 @@ L_088DA1E0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(6266))); aot_gpr_5 = (0u | 184u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DA318; } @@ -4662,7 +4563,6 @@ L_088DA1F0: ctx.gpr[19] = (2237u << 16u); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (ctx.gpr[19] + static_cast(-28320)); if (branch_taken) { @@ -4723,9 +4623,7 @@ L_088DA26C: L_088DA2A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2024))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA2C0; } @@ -4770,9 +4668,7 @@ L_088DA2D8: L_088DA318: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA3C4; } @@ -4780,12 +4676,10 @@ L_088DA318: } L_088DA32C: aot_gpr_31 = (0x088DA334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DA334u) goto L_088DA334; AOT_REGCACHE_SYNC_OUT(); return; L_088DA334: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088DA34C; } @@ -4793,12 +4687,10 @@ L_088DA334: } L_088DA33C: aot_gpr_31 = (0x088DA344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DA344u) goto L_088DA344; AOT_REGCACHE_SYNC_OUT(); return; L_088DA344: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088DA3C4; } @@ -4866,9 +4758,7 @@ L_088DA3C4: L_088DA3E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA408; } @@ -4882,9 +4772,7 @@ L_088DA3FC: L_088DA408: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA428; } @@ -4899,9 +4787,7 @@ L_088DA428: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA44C; } @@ -4922,9 +4808,7 @@ L_088DA44C: goto L_088DA454; L_088DA454: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA468; } @@ -4936,9 +4820,7 @@ L_088DA464: L_088DA468: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8348))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA484; } @@ -4946,7 +4828,6 @@ L_088DA468: } L_088DA47C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DA488; } @@ -4957,9 +4838,7 @@ L_088DA484: goto L_088DA488; L_088DA488: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA574; } @@ -4970,9 +4849,7 @@ L_088DA498: aot_gpr_4 = (17046u << 16u); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA574; } @@ -5060,7 +4937,17 @@ L_088DA574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DA5A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_gpr_5 = (0u | 0u); @@ -5118,7 +5005,6 @@ L_088DA648: L_088DA674: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088DA6AC; } @@ -5127,7 +5013,6 @@ L_088DA674: L_088DA680: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088DA694; } @@ -5135,7 +5020,6 @@ L_088DA680: } L_088DA68C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DAA18; } @@ -5158,7 +5042,6 @@ L_088DA694: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DA6BC; } @@ -5191,7 +5074,6 @@ L_088DA6BC: L_088DA6CC: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); goto L_088DA87C; @@ -5201,7 +5083,6 @@ L_088DA6E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(62))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088DA710; } @@ -5211,7 +5092,6 @@ L_088DA6F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(62))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088DA710; } @@ -5253,7 +5133,6 @@ L_088DA734: L_088DA744: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(61))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_088DA834; } @@ -5263,7 +5142,6 @@ L_088DA750: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(62))); ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088DA810; } @@ -5273,7 +5151,6 @@ L_088DA760: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DA808; } @@ -5404,7 +5281,6 @@ L_088DA87C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6308))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DAA18; } @@ -5431,7 +5307,6 @@ L_088DA8A4: } L_088DA8CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DA9D0; } @@ -5439,9 +5314,7 @@ L_088DA8CC: } L_088DA8D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DA8EC; } @@ -5474,7 +5347,6 @@ L_088DA910: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088DA9C8; } @@ -5506,7 +5378,6 @@ L_088DA93C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(6266))); aot_gpr_5 = (0u | 75u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DA970; } @@ -5544,7 +5415,6 @@ L_088DA980: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-23551))); aot_gpr_4 = (static_cast(aot_gpr_4) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DA9D8; } @@ -5552,7 +5422,6 @@ L_088DA980: } L_088DA9C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DA9DC; } @@ -5638,7 +5507,17 @@ L_088DAA34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DAA78: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -5712,11 +5591,20 @@ L_088DAB44: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-17176))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DAB5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26324))); aot_gpr_4 = (aot_gpr_4 & 1u); @@ -5744,7 +5632,6 @@ L_088DAB7C: goto L_088DAB88; L_088DAB88: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_088DAB98; } @@ -6013,7 +5900,6 @@ L_088DAD50: } L_088DAD5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DB0E8; } @@ -6021,7 +5907,6 @@ L_088DAD5C: } L_088DAD64: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088DADA8; } @@ -6032,7 +5917,6 @@ L_088DAD6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23548))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088DAD8C; } @@ -6071,7 +5955,6 @@ L_088DADB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23544))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088DADD0; } @@ -6130,7 +6013,6 @@ L_088DAE14: L_088DAE24: aot_gpr_5 = (0u | 178u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DAE40; } @@ -6157,7 +6039,6 @@ L_088DAE40: } L_088DAE4C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DAE90; } @@ -6192,7 +6073,6 @@ L_088DAE78: } L_088DAE90: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_088DAEA8; } @@ -6227,7 +6107,6 @@ L_088DAEB4: L_088DAEC4: aot_gpr_5 = (ctx.gpr[7] < static_cast(290) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088DAEF8; } @@ -6258,7 +6137,6 @@ L_088DAEF8: } L_088DAF00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DAF14; } @@ -6280,7 +6158,6 @@ L_088DAF14: L_088DAF1C: aot_gpr_4 = (0u | 219u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_088DAF5C; } @@ -6289,9 +6166,7 @@ L_088DAF1C: L_088DAF28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8348))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DAF5C; } @@ -6360,7 +6235,6 @@ L_088DAFA0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(6266))); aot_gpr_5 = (0u | 185u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DAFF8; } @@ -6489,7 +6363,6 @@ L_088DB0E8: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DAB00; } @@ -6516,7 +6389,17 @@ L_088DB0FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DB134: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(24), aot_gpr_16); @@ -6564,7 +6447,6 @@ L_088DB1C8: L_088DB1D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB368; } @@ -6596,7 +6478,6 @@ L_088DB1F4: } L_088DB200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DB368; } @@ -6716,9 +6597,7 @@ L_088DB2F0: L_088DB30C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DB368; } @@ -6737,7 +6616,6 @@ L_088DB338: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088DB368; } @@ -6759,7 +6637,6 @@ L_088DB368: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DB1C8; } @@ -6790,7 +6667,17 @@ L_088DB37C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DB3C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(36), aot_gpr_16); @@ -6822,7 +6709,6 @@ L_088DB3C4: L_088DB41C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088DB438; } @@ -6850,7 +6736,6 @@ L_088DB438: } L_088DB44C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -6866,7 +6751,6 @@ L_088DB454: } L_088DB45C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088DB4BC; } @@ -6881,7 +6765,6 @@ L_088DB464: AOT_REGCACHE_SYNC_OUT(); return; L_088DB474: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088DB4C4; } @@ -6889,7 +6772,6 @@ L_088DB474: } L_088DB47C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DB4D0; } @@ -6905,7 +6787,6 @@ L_088DB484: } L_088DB48C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB4BC; } @@ -6922,7 +6803,6 @@ L_088DB494: L_088DB4A8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_088DB4E0; } @@ -6930,7 +6810,6 @@ L_088DB4A8: } L_088DB4B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DB504; } @@ -6938,7 +6817,6 @@ L_088DB4B4: } L_088DB4BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -6951,7 +6829,6 @@ L_088DB4C4: goto L_088DB4D0; L_088DB4D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -6970,7 +6847,6 @@ L_088DB4E0: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(26268), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(8648))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DB4FC; } @@ -6986,7 +6862,6 @@ L_088DB4F4: } L_088DB4FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -6999,7 +6874,6 @@ L_088DB504: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(-23531))); aot_gpr_4 = (static_cast(aot_gpr_4) < 480 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DB548; } @@ -7013,7 +6887,6 @@ L_088DB520: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(26268), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(8648))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB558; } @@ -7021,7 +6894,6 @@ L_088DB520: } L_088DB540: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7036,7 +6908,6 @@ L_088DB548: AOT_REGCACHE_SYNC_OUT(); return; L_088DB558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7044,7 +6915,6 @@ L_088DB558: } L_088DB560: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7053,7 +6923,6 @@ L_088DB560: L_088DB568: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB57C; } @@ -7073,7 +6942,6 @@ L_088DB57C: L_088DB580: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(-23834))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB638; } @@ -7082,7 +6950,6 @@ L_088DB580: L_088DB58C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB5D0; } @@ -7120,7 +6987,6 @@ L_088DB5C0: L_088DB5D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7133,7 +6999,6 @@ L_088DB5DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(-23526))); aot_gpr_4 = (static_cast(aot_gpr_4) < 90 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DB62C; } @@ -7150,7 +7015,6 @@ L_088DB5F8: AOT_REGCACHE_SYNC_OUT(); return; L_088DB610: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7164,7 +7028,6 @@ L_088DB618: AOT_REGCACHE_SYNC_OUT(); return; L_088DB624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7182,7 +7045,6 @@ L_088DB62C: L_088DB638: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(26273))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DB7C0; } @@ -7204,7 +7066,6 @@ L_088DB644: L_088DB66C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB690; } @@ -7243,7 +7104,6 @@ L_088DB6AC: goto L_088DB6B0; L_088DB6B0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088DB6F4; } @@ -7273,7 +7133,6 @@ L_088DB6DC: AOT_REGCACHE_SYNC_OUT(); return; L_088DB6EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DB7A0; } @@ -7293,9 +7152,7 @@ L_088DB70C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DB774; } @@ -7374,7 +7231,6 @@ L_088DB7AC: L_088DB7C0: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7383,7 +7239,6 @@ L_088DB7C0: L_088DB7CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DB7F4; } @@ -7397,7 +7252,6 @@ L_088DB7D8: AOT_REGCACHE_SYNC_OUT(); return; L_088DB7E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088DB824; } @@ -7405,7 +7259,6 @@ L_088DB7E4: } L_088DB7EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DB8B0; } @@ -7432,7 +7285,6 @@ L_088DB810: AOT_REGCACHE_SYNC_OUT(); return; L_088DB81C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7441,7 +7293,6 @@ L_088DB81C: L_088DB824: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7450,7 +7301,6 @@ L_088DB824: L_088DB830: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(-23536))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088DB848; } @@ -7468,7 +7318,6 @@ L_088DB83C: L_088DB848: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(-23834))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB874; } @@ -7502,7 +7351,6 @@ L_088DB874: L_088DB87C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088DB88C; } @@ -7513,7 +7361,6 @@ L_088DB888: goto L_088DB88C; L_088DB88C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7538,7 +7385,6 @@ L_088DB8A8: L_088DB8B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(26278))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DBA8C; } @@ -7590,7 +7436,6 @@ L_088DB8F4: AOT_REGCACHE_SYNC_OUT(); return; L_088DB900: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088DB90C; } @@ -7601,7 +7446,6 @@ L_088DB908: goto L_088DB90C; L_088DB90C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088DB958; } @@ -7625,7 +7469,6 @@ L_088DB92C: AOT_REGCACHE_SYNC_OUT(); return; L_088DB93C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7639,7 +7482,6 @@ L_088DB944: AOT_REGCACHE_SYNC_OUT(); return; L_088DB950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7648,7 +7490,6 @@ L_088DB950: L_088DB958: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB97C; } @@ -7663,7 +7504,6 @@ L_088DB964: AOT_REGCACHE_SYNC_OUT(); return; L_088DB974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7689,7 +7529,6 @@ L_088DB998: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DB9C8; } @@ -7706,7 +7545,6 @@ L_088DB9B4: L_088DB9C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(26240))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7726,9 +7564,7 @@ L_088DB9EC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBA58; } @@ -7790,7 +7626,6 @@ L_088DBA74: AOT_REGCACHE_SYNC_OUT(); return; L_088DBA84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7799,7 +7634,6 @@ L_088DBA84: L_088DBA8C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7833,7 +7667,6 @@ L_088DBAB8: AOT_REGCACHE_SYNC_OUT(); return; L_088DBAC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088DBAD8; } @@ -7863,7 +7696,17 @@ L_088DBAD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DBB08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23860))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23864))); @@ -7909,7 +7752,17 @@ L_088DBB08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DBBAC: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); ctx.gpr[7] = (ctx.gpr[6] + ctx.gpr[6]); @@ -7918,9 +7771,7 @@ L_088DBBAC: ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[7]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBBF8; } @@ -7948,9 +7799,7 @@ L_088DBBF0: L_088DBBF8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBC20; } @@ -7969,11 +7818,20 @@ L_088DBC1C: goto L_088DBC20; L_088DBC20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DBC28: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-112)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(ctx.fpr[26])); @@ -8009,9 +7867,7 @@ L_088DBC28: L_088DBC98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBCDC; } @@ -8025,9 +7881,7 @@ L_088DBCAC: ctx.gpr[6] = (aot_gpr_16 + ctx.gpr[6]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBCEC; } @@ -8035,7 +7889,6 @@ L_088DBCAC: } L_088DBCD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DBD44; } @@ -8059,7 +7912,6 @@ L_088DBCE4: } L_088DBCEC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088DBD0C; } @@ -8069,9 +7921,7 @@ L_088DBCF4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBDB8; } @@ -8093,7 +7943,6 @@ L_088DBD0C: goto L_088DBC28; L_088DBD3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 19u, 0x088DC15Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8102,9 +7951,7 @@ L_088DBD3C: L_088DBD44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBDB8; } @@ -8120,7 +7967,6 @@ L_088DBD58: } L_088DBD60: { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_088DBD80; } @@ -8130,9 +7976,7 @@ L_088DBD68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DBDB8; } @@ -8154,7 +7998,6 @@ L_088DBD80: goto L_088DBC28; L_088DBDB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 19u, 0x088DC15Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8187,7 +8030,6 @@ L_088DBDDC: L_088DBDE8: ctx.gpr[6] = (static_cast(aot_gpr_5) < 1 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_088DBE04; } @@ -8212,7 +8054,6 @@ L_088DBE04: aot_fpr_13 = aot_fpr_13 - aot_fpr_22; aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_gpr_31 = (0x088DBE28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, ctx.gpr[3], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[29], aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DBE28u) goto L_088DBE28; AOT_REGCACHE_SYNC_OUT(); return; L_088DBE28: @@ -8359,7 +8200,6 @@ L_088DBF2C: ctx.fpr[24] = ctx.fpr[15] / aot_fpr_13; ctx.fpr[24] = aot_fpr_12 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_088DBF58; diff --git a/profiles/vcs/generated/generated_unit_0054.cpp b/profiles/vcs/generated/generated_unit_0054.cpp index 99e2441..25b7653 100644 --- a/profiles/vcs/generated/generated_unit_0054.cpp +++ b/profiles/vcs/generated/generated_unit_0054.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0054[4095] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 23, 0, 0, 24, 0, 25, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 29, 0, 30, 0, 31, 32, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 0, 37, 0, 0, 0, 0, 38, 0, 39, 0, 0, 40, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 53, - 0, 54, 0, 55, 0, 0, 0, 0, 0, 56, 0, 57, 0, 58, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 63, 0, 0, 0, 0, - 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, - 68, 0, 69, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, - 76, 0, 0, 0, 0, 0, 77, 0, 78, 0, 79, 80, 0, 81, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 86, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 0, - 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 98, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 102, 103, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, - 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, - 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, - 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 0, 133, 0, 134, 0, 0, 135, 136, - 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 142, 0, - 0, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, - 148, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 153, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 164, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 169, - 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 174, 0, 0, 0, 0, 175, 0, 176, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 180, 0, 0, 0, 181, 0, 182, 0, - 0, 0, 183, 184, 0, 0, 0, 0, 185, 0, 0, 0, 186, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, 0, 191, 0, 192, 0, 0, 193, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 0, 196, 0, 197, 0, 0, 198, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 0, 0, 203, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 207, - 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 214, 0, 215, 216, 0, - 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, - 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 231, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, - 235, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 241, 0, 242, 0, 243, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, - 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 251, 0, 0, 0, 252, 0, 253, 0, 254, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 256, 0, 0, 257, 258, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, - 0, 0, 264, 0, 265, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 276, 277, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 288, 289, 0, 0, 0, - 290, 0, 0, 291, 0, 0, 0, 292, 0, 293, 0, 294, 295, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, - 299, 0, 0, 0, 0, 0, 300, 301, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, - 0, 0, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 328, - 329, 0, 330, 0, 331, 0, 332, 333, 0, 334, 0, 335, 0, 336, 337, 0, 0, 338, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, - 343, 0, 344, 0, 345, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 349, 0, 350, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, - 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 364, 0, 0, 0, 0, 365, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, 0, 371, 0, 0, 0, 0, 372, - 0, 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 378, - 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, - 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, - 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, - 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, - 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 422, 423, 0, 0, 0, 0, 424, 0, 0, 0, - 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, - 431, 0, 0, 0, 432, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, 0, 0, - 442, 0, 443, 444, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 448, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 453, 0, - 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 460, 0, 0, 0, 0, - 461, 0, 0, 462, 0, 0, 463, 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 468, 469, 0, 0, - 0, 0, 470, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 473, 0, 0, 474, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 0, 0, 477, 0, 478, - 0, 0, 479, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, - 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 490, 0, 491, 0, 492, 0, 0, 0, 0, 0, 493, - 0, 0, 494, 0, 0, 0, 495, 496, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 0, - 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 511, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, - 0, 0, 0, 0, 519, 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 525, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0054[64] = { + 0x102040300421A4A1ull, 0x0129222000481011ull, 0x94210A000B544000ull, 0x0000800004054002ull, + 0xA088010408000000ull, 0x082200040D016A0Aull, 0x1408AD4142A00505ull, 0x000020122A028150ull, + 0x4143121200000800ull, 0x0244000810812108ull, 0x01440204404A4000ull, 0xCA80A02000400200ull, + 0x4408000004800100ull, 0x0040880908104204ull, 0x0085000008011220ull, 0x0000000000010003ull, + 0x050C4088C0840012ull, 0x0004910C51140010ull, 0x4001095000A51100ull, 0x8910000044100000ull, + 0x6900001000248008ull, 0x0A10810808000010ull, 0x4102A20008004880ull, 0x2820544001004881ull, + 0x019102A200200910ull, 0x4004048800000000ull, 0x6900040488122054ull, 0x2024412000000040ull, + 0x20281A891A400800ull, 0x00404240200080C1ull, 0x410A880020212010ull, 0x0020100802201004ull, + 0x00426AD594000000ull, 0x0514909510808000ull, 0x0000200000008000ull, 0x0000000000002000ull, + 0x1084204081020408ull, 0x8108421084210842ull, 0x2041040408102040ull, 0x0810204082108010ull, + 0x1084210840810204ull, 0x0000440000300100ull, 0x0000240200002110ull, 0x0001820810C0A020ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000002000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x2000000000000000ull, + 0x0000000000100031ull, 0x2AA4020000000000ull, 0x440000500060504Dull, 0x3420244909042094ull, + 0x04104244A0912824ull, 0x000808C482A85204ull, 0x2000400008000002ull, 0x0000000A14005000ull, + 0x0000400000001A40ull, 0x2814000000020000ull, 0x00000000A0810290ull, 0x4030060001000020ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0054[64] = { + 1u, 15u, 27u, 41u, 47u, 54u, 68u, 86u, 97u, 107u, 117u, 127u, 137u, 143u, 153u, 161u, + 164u, 177u, 189u, 201u, 208u, 217u, 225u, 235u, 247u, 259u, 264u, 278u, 285u, 299u, 308u, 319u, + 326u, 340u, 353u, 355u, 356u, 366u, 379u, 388u, 397u, 408u, 413u, 419u, 429u, 429u, 429u, 429u, + 429u, 430u, 430u, 430u, 431u, 435u, 442u, 454u, 470u, 485u, 499u, 503u, 509u, 514u, 519u, 526u, }; void recomp_unit_0054_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0054_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088DC004u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0054[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0054[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0054[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088DC004; @@ -744,7 +651,6 @@ L_088DC040: L_088DC044: aot_fpr_13 = ctx.fpr[22] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088DC058; @@ -753,7 +659,6 @@ L_088DC044: L_088DC058: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_088DC06C; @@ -781,7 +686,6 @@ L_088DC098: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23476))); if (branch_taken) { @@ -794,9 +698,7 @@ L_088DC0BC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6052))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DC104; } @@ -807,7 +709,6 @@ L_088DC0D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23472))); aot_fpr_13 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088DC0F4; @@ -825,9 +726,7 @@ L_088DC0F4: } L_088DC104: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DC15C; } @@ -839,9 +738,7 @@ L_088DC114: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6052))); { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DC15C; } @@ -852,7 +749,6 @@ L_088DC134: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23472))); aot_fpr_12 = aot_fpr_12 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088DC150; @@ -885,12 +781,21 @@ L_088DC15C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC198: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DC1D8; } @@ -914,7 +819,6 @@ L_088DC1B8: L_088DC1C4: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088DC1D8; } @@ -922,7 +826,6 @@ L_088DC1C4: } L_088DC1D0: ctx.gpr[31] = (0x088DC1D8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DC1D8u) goto L_088DC1D8; AOT_REGCACHE_SYNC_OUT(); return; L_088DC1D8: @@ -932,7 +835,17 @@ L_088DC1D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC1E4: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1448))); @@ -948,8 +861,6 @@ L_088DC1E4: ctx.gpr[9] = (ctx.lo); aot_gpr_6 = (aot_gpr_6 + ctx.gpr[9]); ctx.gpr[9] = (ctx.hi); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(ctx.gpr[8])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (aot_gpr_5 + ctx.gpr[9]); ctx.gpr[8] = (ctx.lo); @@ -965,7 +876,6 @@ L_088DC23C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1448))); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088DC264; } @@ -981,7 +891,6 @@ L_088DC24C: } L_088DC254: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DC264; } @@ -1000,11 +909,20 @@ L_088DC264: goto L_088DC268; L_088DC268: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC270: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20]}; @@ -1020,7 +938,6 @@ L_088DC270: goto L_088DC1E4; L_088DC2A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DC300; } @@ -1038,7 +955,6 @@ L_088DC2C4: aot_gpr_4 = (1u << 16u); aot_gpr_4 = (aot_gpr_16 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DC2F4; } @@ -1091,7 +1007,6 @@ L_088DC308: aot_gpr_5 = (2u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DC344; } @@ -1128,7 +1043,17 @@ L_088DC34C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC36C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -1239,7 +1164,17 @@ L_088DC48C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC4A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-13104)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(13076), ctx.gpr[17]); @@ -1257,7 +1192,6 @@ L_088DC4D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(36)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DC56C; } @@ -1278,7 +1212,6 @@ L_088DC4F8: goto L_088DC500; L_088DC500: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DC544; } @@ -1286,7 +1219,6 @@ L_088DC500: } L_088DC508: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088DC544; } @@ -1302,7 +1234,6 @@ L_088DC510: goto L_088DCF44; L_088DC528: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DC538; } @@ -1363,7 +1294,17 @@ L_088DC570: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC58C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -1392,7 +1333,6 @@ L_088DC5D8: ctx.gpr[21] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_gpr_4 >> 2u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088DC658; } @@ -1407,7 +1347,6 @@ L_088DC5F0: goto L_088DC1E4; L_088DC604: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DC658; } @@ -1423,7 +1362,6 @@ L_088DC60C: goto L_088DC270; L_088DC624: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DC658; } @@ -1452,7 +1390,6 @@ L_088DC658: goto L_088DC660; L_088DC660: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088DC6B8; } @@ -1471,7 +1408,6 @@ L_088DC668: } L_088DC67C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DC6B8; } @@ -1487,7 +1423,6 @@ L_088DC684: goto L_088DCB5C; L_088DC69C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DC6AC; } @@ -1506,7 +1441,6 @@ L_088DC6AC: goto L_088DC6B0; L_088DC6B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DC660; } @@ -1514,7 +1448,6 @@ L_088DC6B0: } L_088DC6B8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088DC6D0; } @@ -1541,7 +1474,6 @@ L_088DC6D0: goto L_088DC1E4; L_088DC6EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DC71C; } @@ -1559,7 +1491,6 @@ L_088DC6F4: goto L_088DC270; L_088DC714: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DC778; } @@ -1581,7 +1512,6 @@ L_088DC724: goto L_088DC1E4; L_088DC740: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DC770; } @@ -1599,7 +1529,6 @@ L_088DC748: goto L_088DC270; L_088DC768: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DC788; } @@ -1644,7 +1573,17 @@ L_088DC794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DC7B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_gpr_5 = (aot_gpr_5 & 65535u); @@ -1749,7 +1688,6 @@ L_088DC8C8: goto L_088DC1E4; L_088DC8DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DCA3C; } @@ -1916,7 +1854,6 @@ L_088DCA3C: } L_088DCA48: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088DCAE4; } @@ -1974,7 +1911,6 @@ L_088DCACC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(36)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DCAE4; } @@ -2023,7 +1959,17 @@ L_088DCB28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DCB5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -2052,7 +1998,6 @@ L_088DCB98: goto L_088DC1E4; L_088DCBB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DCBF0; } @@ -2070,7 +2015,6 @@ L_088DCBC0: goto L_088DC270; L_088DCBE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DCBF0; } @@ -2109,7 +2053,17 @@ L_088DCC00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DCC24: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -2228,7 +2182,6 @@ L_088DCD3C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DCEE0; } @@ -2320,7 +2273,6 @@ L_088DCE18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(36)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DCECC; } @@ -2329,7 +2281,6 @@ L_088DCE18: L_088DCE28: ctx.gpr[24] = (ctx.gpr[20] | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[24]; - // nop if (branch_taken) { goto L_088DCECC; } @@ -2394,7 +2345,6 @@ L_088DCECC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DCD54; } @@ -2409,7 +2359,6 @@ L_088DCEE0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DCCFC; } @@ -2440,7 +2389,17 @@ L_088DCF08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DCF44: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -2613,7 +2572,6 @@ L_088DD0D0: goto L_088DC1E4; L_088DD0E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DD114; } @@ -2649,7 +2607,6 @@ L_088DD114: goto L_088DD14C; L_088DD14C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DD400; } @@ -2659,7 +2616,6 @@ L_088DD154: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(904)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DD400; } @@ -2673,7 +2629,6 @@ L_088DD164: goto L_088DC58C; L_088DD174: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DD1C0; } @@ -2721,7 +2676,6 @@ L_088DD1B4: L_088DD1C0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1492))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_088DD3F0; } @@ -2755,7 +2709,6 @@ L_088DD224: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(904)))))); aot_gpr_7 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_088DD258; } @@ -2765,7 +2718,6 @@ L_088DD234: aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1492))); ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(1494))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088DD24C; } @@ -2790,7 +2742,6 @@ L_088DD24C: } L_088DD258: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DD29C; } @@ -2809,7 +2760,6 @@ L_088DD260: aot_gpr_7 = (static_cast(static_cast(aot_gpr_7) >> 1u)); aot_gpr_7 = (aot_gpr_7 & 65535u); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_088DD29C; } @@ -2821,7 +2771,6 @@ L_088DD294: goto L_088DD29C; L_088DD29C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DD2B0; } @@ -2891,7 +2840,6 @@ L_088DD2FC: aot_fpr_14 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_14)); aot_gpr_5 = (std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2), static_cast(aot_gpr_5)); if (branch_taken) { @@ -2939,7 +2887,6 @@ L_088DD37C: aot_gpr_4 = (aot_gpr_4 & ctx.gpr[21]); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[22]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DD3F0; } @@ -2974,7 +2921,6 @@ L_088DD400: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(904)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088DD440; } @@ -3030,7 +2976,17 @@ L_088DD458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DD494: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), ctx.gpr[23]); @@ -3132,7 +3088,6 @@ L_088DD5A4: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088DD5D4; } @@ -3151,7 +3106,6 @@ L_088DD5D4: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088DD590; } @@ -3159,7 +3113,6 @@ L_088DD5D4: } L_088DD5E8: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_088DD63C; } @@ -3190,7 +3143,6 @@ L_088DD620: L_088DD630: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_088DD5F0; } @@ -3216,7 +3168,17 @@ L_088DD63C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DD670: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3276,7 +3238,6 @@ L_088DD6E4: AOT_REGCACHE_SYNC_OUT(); return; L_088DD6FC: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_088DD73C; } @@ -3302,7 +3263,6 @@ L_088DD720: L_088DD730: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_088DD704; } @@ -3325,7 +3285,17 @@ L_088DD73C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DD764: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3385,7 +3355,6 @@ L_088DD7D8: AOT_REGCACHE_SYNC_OUT(); return; L_088DD7F0: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_088DD830; } @@ -3411,7 +3380,6 @@ L_088DD814: L_088DD824: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_088DD7F8; } @@ -3434,7 +3402,17 @@ L_088DD830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DD858: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -3492,7 +3470,6 @@ L_088DD8C4: L_088DD8D4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088DD9AC; } @@ -3581,7 +3558,17 @@ L_088DD9AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DD9CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3639,7 +3626,6 @@ L_088DDA38: L_088DDA48: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088DDA8C; } @@ -3665,7 +3651,6 @@ L_088DDA70: L_088DDA80: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_088DDA54; } @@ -3686,7 +3671,17 @@ L_088DDA8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDAAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -3769,7 +3764,6 @@ L_088DDB1C: L_088DDB98: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088DDBD8; } @@ -3794,7 +3788,6 @@ L_088DDBBC: L_088DDBCC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_088DDBA4; } @@ -3815,7 +3808,17 @@ L_088DDBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDBF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3887,7 +3890,6 @@ L_088DDC90: AOT_REGCACHE_SYNC_OUT(); return; L_088DDCA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088DDCB0; } @@ -3954,7 +3956,6 @@ L_088DDD04: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DDD20; } @@ -3978,7 +3979,17 @@ L_088DDD20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDD40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4037,7 +4048,17 @@ L_088DDDBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDDDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4096,7 +4117,17 @@ L_088DDE58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDE78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4208,7 +4239,17 @@ L_088DDF68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDF90: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4220,11 +4261,20 @@ L_088DDF90: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDFB4: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4236,11 +4286,20 @@ L_088DDFB4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DDFD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); @@ -4294,7 +4353,6 @@ L_088DE06C: L_088DE074: aot_gpr_4 = (static_cast(ctx.gpr[20]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DE084; } @@ -4321,7 +4379,6 @@ L_088DE08C: } L_088DE094: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DE0A0; } @@ -4348,7 +4405,6 @@ L_088DE0A8: } L_088DE0B0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DE0BC; } @@ -4403,14 +4459,23 @@ L_088DE0DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DE140: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); aot_fpr_13 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16256u << 16u); if (branch_taken) { @@ -4421,9 +4486,7 @@ L_088DE140: L_088DE160: aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DE18C; } @@ -4433,7 +4496,6 @@ L_088DE174: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_5 = (aot_gpr_5 & 15u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088DE18C; } @@ -4441,7 +4503,6 @@ L_088DE174: } L_088DE184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088DE194; } @@ -4449,7 +4510,6 @@ L_088DE184: } L_088DE18C: ctx.gpr[31] = (0x088DE194u); - // nop goto L_088DE338; L_088DE194: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4458,7 +4518,17 @@ L_088DE194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DE1A0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(11232), aot_gpr_5); aot_gpr_5 = (0u | 1u); @@ -4486,11 +4556,20 @@ L_088DE1C0: goto L_088DE1CC; L_088DE1CC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DE1D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4553,7 +4632,17 @@ L_088DE1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DE240: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8344)))))); aot_gpr_7 = (aot_gpr_5 + aot_gpr_4); @@ -4588,7 +4677,17 @@ L_088DE240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DE2B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8344)))))); aot_gpr_4 = (aot_gpr_4 + aot_gpr_4); @@ -4625,7 +4724,17 @@ L_088DE2B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DE338: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7650))); @@ -5123,7 +5232,6 @@ L_088DE924: ctx.fpr[16] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(11148))); goto L_088DE954; @@ -5151,9 +5259,7 @@ L_088DE958: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fpr[20] = aot_fpr_12 + ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DEA14; } @@ -5161,9 +5267,7 @@ L_088DE958: } L_088DE9AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DEA14; } @@ -5201,7 +5305,6 @@ L_088DE9BC: } L_088DEA14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17543u << 16u); if (branch_taken) { @@ -5212,9 +5315,7 @@ L_088DEA14: L_088DEA24: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DEA88; } @@ -5316,7 +5417,6 @@ L_088DEB18: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(11240))); ctx.fpr[26] = aot_fpr_13 + ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088DEB38; @@ -5335,7 +5435,6 @@ L_088DEB40: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(11240))); ctx.fpr[26] = aot_fpr_13 - ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_088DEB5C; @@ -5347,9 +5446,7 @@ L_088DEB5C: L_088DEB60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DF3F8; } @@ -5931,7 +6028,6 @@ L_088DF404: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2900))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DF454; } @@ -6063,9 +6159,7 @@ L_088DF5A8: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088DF61C; } @@ -6074,7 +6168,6 @@ L_088DF5A8: L_088DF5CC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8668))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088DF63C; } @@ -6082,12 +6175,10 @@ L_088DF5CC: } L_088DF5D8: ctx.gpr[31] = (0x088DF5E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DF5E0u) goto L_088DF5E0; AOT_REGCACHE_SYNC_OUT(); return; L_088DF5E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DF61C; } @@ -6095,12 +6186,10 @@ L_088DF5E0: } L_088DF5E8: ctx.gpr[31] = (0x088DF5F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DF5F0u) goto L_088DF5F0; AOT_REGCACHE_SYNC_OUT(); return; L_088DF5F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088DF61C; } @@ -6115,7 +6204,6 @@ L_088DF5F8: goto L_088DF604; L_088DF604: ctx.gpr[31] = (0x088DF60Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DF60Cu) goto L_088DF60C; AOT_REGCACHE_SYNC_OUT(); return; L_088DF60C: @@ -6124,7 +6212,6 @@ L_088DF60C: L_088DF610: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DF63C; } @@ -6183,14 +6270,33 @@ L_088DF65C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF694: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF69C: aot_gpr_6 = (2234u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(22544)); @@ -6215,7 +6321,17 @@ L_088DF69C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF6EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -6238,7 +6354,6 @@ L_088DF6FC: } L_088DF70C: ctx.gpr[31] = (0x088DF714u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DF714u) goto L_088DF714; AOT_REGCACHE_SYNC_OUT(); return; L_088DF714: @@ -6248,7 +6363,17 @@ L_088DF714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF720: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6267,7 +6392,17 @@ L_088DF738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); @@ -6283,13 +6418,22 @@ L_088DF764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF770: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088DF790; } @@ -6307,7 +6451,17 @@ L_088DF790: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF79C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -6322,7 +6476,17 @@ L_088DF7AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF7B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6339,7 +6503,6 @@ L_088DF7D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(30)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088DF7F8; } @@ -6365,7 +6528,17 @@ L_088DF7F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF80C: aot_gpr_5 = (0u + static_cast(-1)); jump_target = ctx.gpr[31]; @@ -6373,14 +6546,23 @@ L_088DF80C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF818: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30)))))); aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088DF838; } @@ -6388,7 +6570,6 @@ L_088DF818: } L_088DF830: ctx.gpr[31] = (0x088DF838u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 644u, 0x08AAF008u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DF838u) goto L_088DF838; AOT_REGCACHE_SYNC_OUT(); return; L_088DF838: @@ -6398,7 +6579,17 @@ L_088DF838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF844: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -6413,14 +6604,23 @@ L_088DF854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF860: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30)))))); aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088DF880; } @@ -6428,7 +6628,6 @@ L_088DF860: } L_088DF878: ctx.gpr[31] = (0x088DF880u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 661u, 0x08AAF118u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088DF880u) goto L_088DF880; AOT_REGCACHE_SYNC_OUT(); return; L_088DF880: @@ -6438,7 +6637,17 @@ L_088DF880: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF88C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -6453,7 +6662,17 @@ L_088DF89C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF8A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6495,7 +6714,17 @@ L_088DF8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF90C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6503,7 +6732,6 @@ L_088DF90C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088DF93C; } @@ -6512,7 +6740,6 @@ L_088DF90C: L_088DF928: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(18))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088DF93C; } @@ -6532,28 +6759,66 @@ L_088DF93C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF950: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF958: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF960: jump_target = ctx.gpr[31]; ctx.gpr[2] = (0u + static_cast(-1)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF968: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -6590,7 +6855,17 @@ L_088DF9A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF9B0: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -6602,7 +6877,17 @@ L_088DF9B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DF9D0: aot_gpr_7 = (static_cast(static_cast(aot_gpr_6) >> 2u)); aot_gpr_7 = (aot_gpr_7 >> 30u); @@ -6621,7 +6906,17 @@ L_088DF9D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DFA08: ctx.gpr[15] = (ctx.gpr[11] - aot_gpr_7); ctx.gpr[2] = (ctx.gpr[15] + static_cast(31)); @@ -6741,11 +7036,20 @@ L_088DFB3C: } L_088DFB6C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DFB74: ctx.gpr[9] = (aot_gpr_5 | 0u); ctx.gpr[10] = (static_cast(ctx.gpr[9]) < 2 ? 1u : 0u); @@ -6944,11 +7248,20 @@ L_088DFD48: goto L_088DFDCC; L_088DFDCC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DFDD4: aot_gpr_7 = (aot_gpr_5 | 0u); aot_gpr_5 = (256u << 16u); @@ -6964,7 +7277,6 @@ L_088DFDD4: } L_088DFDF0: { const bool branch_taken = static_cast(aot_gpr_7) <= 0; - // nop if (branch_taken) { goto L_088DFE28; } @@ -6994,7 +7306,6 @@ L_088DFE14: } L_088DFE20: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_088DFE60; } @@ -7036,11 +7347,20 @@ L_088DFE60: goto L_088DFE78; L_088DFE78: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088DFE80: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_7 = (aot_gpr_7 & 255u); @@ -7168,11 +7488,20 @@ L_088DFFD8: } L_088DFFFC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0055.cpp b/profiles/vcs/generated/generated_unit_0055.cpp index 5d106f8..cd132ff 100644 --- a/profiles/vcs/generated/generated_unit_0055.cpp +++ b/profiles/vcs/generated/generated_unit_0055.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0055[4092] = { - 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 16, 17, 0, 0, 18, - 0, 19, 20, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 34, - 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, - 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 44, 0, 0, - 45, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 0, 54, - 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, - 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 68, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 74, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 77, 78, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 82, 0, 83, 0, 0, 0, - 0, 84, 0, 85, 0, 86, 0, 0, 87, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 93, - 0, 94, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, - 100, 0, 0, 101, 0, 102, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 106, 0, 107, 108, - 0, 109, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 113, 0, 114, 0, 115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 0, 121, - 0, 122, 0, 123, 0, 0, 0, 124, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 130, 0, 131, 0, 0, 132, - 0, 133, 0, 134, 0, 0, 135, 0, 136, 137, 0, 138, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 141, 0, 0, 142, 0, - 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 146, 0, 0, 147, 0, 148, 149, 0, 0, 0, 0, 0, 150, - 0, 0, 151, 0, 152, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 158, 0, 159, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 166, 0, 167, 0, 0, 168, 0, 169, 170, 0, 171, 0, 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 0, 174, 0, 175, 0, 176, 0, 177, - 0, 178, 0, 179, 0, 180, 0, 181, 182, 0, 0, 0, 183, 184, 0, 0, 185, 0, 186, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 189, - 190, 0, 0, 191, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 193, 0, 194, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, - 0, 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, - 206, 0, 0, 0, 0, 207, 0, 0, 0, 208, 0, 209, 0, 210, 0, 0, 0, 211, 0, 212, 0, 213, 0, 214, 0, 0, 0, 215, 0, 216, 0, 217, - 0, 0, 0, 218, 219, 0, 0, 220, 221, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 0, 225, 0, 0, 226, 0, 227, 228, 0, 229, - 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 0, 237, 0, 0, 238, 0, 239, 240, 0, 241, 242, 0, 0, 0, 0, 0, - 243, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 246, 0, 247, 0, 248, 0, 0, 0, 249, 0, 0, - 0, 250, 251, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, - 0, 267, 0, 268, 0, 0, 0, 269, 0, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 274, 0, 275, 0, 276, 0, 0, 277, 0, 278, - 0, 279, 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 291, 0, 0, 292, 293, 0, 294, 0, 0, - 0, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 297, 298, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 302, 303, 0, 304, - 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 307, 308, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 311, - 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 318, 0, - 0, 0, 0, 0, 0, 0, 319, 0, 320, 321, 0, 0, 0, 0, 322, 0, 323, 0, 324, 0, 325, 0, 0, 326, 0, 0, 327, 0, 328, 0, 0, 0, - 0, 0, 0, 0, 329, 0, 330, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 333, 334, 0, 335, 0, 0, 336, 0, 0, 337, 0, 338, 0, - 339, 0, 340, 0, 341, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, - 348, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 353, 0, 0, 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, - 0, 0, 357, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 362, 363, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, - 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 367, 368, 0, 369, 0, 0, 0, 370, 371, 0, 372, 0, 0, 0, 373, 374, 0, 375, 0, 0, 0, - 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, - 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 386, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 390, 0, 391, 0, 392, - 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, - 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 405, 0, 0, 406, 0, - 407, 0, 0, 408, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, 418, 0, 419, 0, 420, 0, 0, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 424, 0, 425, 0, 426, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, - 0, 0, 429, 0, 430, 0, 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, 0, 0, 0, 442, 0, 443, 0, 0, 0, 444, 0, 445, 0, 0, 446, 0, 447, 448, 0, 0, 0, - 0, 0, 0, 449, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 452, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 456, - 457, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 462, - 0, 0, 0, 463, 0, 0, 464, 0, 465, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 470, - 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, - 0, 477, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 484, 0, 0, 0, 485, 0, 486, 0, 487, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, 0, 0, - 490, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, - 499, 0, 0, 0, 0, 500, 0, 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, - 504, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 509, 0, 0, - 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, - 0, 0, 517, 0, 518, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 523, 0, 524, - 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 527, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 530, 0, 0, - 531, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 535, 0, 536, 0, 537, 0, 0, 0, 538, 0, 539, 0, - 540, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, - 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 561, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 570, 0, 0, 0, - 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 574, 0, 575, 0, 0, 576, 0, 0, 577, 0, 0, 578, - 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 584, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0055[64] = { + 0x0000040000000003ull, 0x0000000000000000ull, 0x4004000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x2008020000000000ull, 0x0000000002100880ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x9A80200000000000ull, 0x0800402000040416ull, 0x080808148602810Aull, 0x9554012121208004ull, + 0x08284408AA854088ull, 0x142AC14900400200ull, 0x408100C2920A092Aull, 0x05490102D2800429ull, + 0x0880028A81204120ull, 0x4C040B4A94800040ull, 0x01209214834C0009ull, 0x00080088000028A8ull, + 0xA01531AAAA481694ull, 0x8102004000034409ull, 0xA8AA2A2110820844ull, 0x00014041B4920598ull, + 0x22A2008106D24810ull, 0xAA815480002A4046ull, 0x0080808AA551228Aull, 0xB21059082C840955ull, + 0x00000042A002C440ull, 0x1495434048480002ull, 0x2024911552584250ull, 0x080A228000080005ull, + 0x162C589020350224ull, 0xAA252001128A0244ull, 0x4A81508820404024ull, 0x0A90414400824029ull, + 0x0824AA94021AA401ull, 0x910609081A514150ull, 0x8840854888002105ull, 0x000824820420280Aull, + 0x08151429104A8908ull, 0x2A01004101004421ull, 0xA28081144104A402ull, 0x5154202120824102ull, + 0x402AA90001155011ull, 0x0040189080042000ull, 0x925120041A020908ull, 0x0A00000400002120ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0055[64] = { + 1u, 4u, 4u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, 6u, + 6u, 6u, 6u, 6u, 6u, 9u, 13u, 13u, 13u, 19u, 27u, 40u, 55u, 71u, 84u, 100u, + 116u, 128u, 143u, 158u, 166u, 190u, 200u, 218u, 234u, 250u, 267u, 284u, 305u, 314u, 329u, 348u, + 357u, 376u, 393u, 407u, 421u, 439u, 457u, 471u, 482u, 499u, 510u, 525u, 540u, 556u, 564u, 579u, }; void recomp_unit_0055_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0055_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088E0000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0055[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0055[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0055[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088E0000; @@ -756,7 +663,6 @@ LOCAL_DISPATCH: } } L_088E0000: - // nop goto L_088E0004; L_088E0004: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -793,7 +699,17 @@ L_088E0004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E00A8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[7] = (15872u << 16u); @@ -934,7 +850,17 @@ L_088E00A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E02C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_16); @@ -2364,7 +2290,17 @@ L_088E1564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E18B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16436))); @@ -2383,12 +2319,10 @@ L_088E18B4: } L_088E18DC: aot_gpr_31 = (0x088E18E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 651u, 0x08B62FE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E18E4u) goto L_088E18E4; AOT_REGCACHE_SYNC_OUT(); return; L_088E18E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E18F0; } @@ -2405,7 +2339,6 @@ L_088E18F0: AOT_REGCACHE_SYNC_OUT(); return; L_088E18FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E1908; } @@ -2464,7 +2397,17 @@ L_088E1948: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1994: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(6096), 0u); @@ -2494,7 +2437,17 @@ L_088E19B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E19EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2518,7 +2471,17 @@ L_088E1A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2530,7 +2493,6 @@ L_088E1A20: goto L_088E1B3C; L_088E1A3C: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_088E1A64; } @@ -2565,7 +2527,17 @@ L_088E1A68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1A7C: aot_gpr_6 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; @@ -2590,7 +2562,17 @@ L_088E1A90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1AAC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16420))); ctx.gpr[2] = (0u | 0u); @@ -2603,7 +2585,17 @@ L_088E1AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1ACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2642,7 +2634,17 @@ L_088E1B08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1B3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16428))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16424))); @@ -2653,7 +2655,17 @@ L_088E1B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1B54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16424))); jump_target = aot_gpr_31; @@ -2661,7 +2673,17 @@ L_088E1B54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1B60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 1u); @@ -2671,7 +2693,17 @@ L_088E1B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1B74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); jump_target = aot_gpr_31; @@ -2679,7 +2711,17 @@ L_088E1B74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1B80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16432))); @@ -2695,7 +2737,17 @@ L_088E1B94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1BA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2715,7 +2767,6 @@ L_088E1BC8: goto L_088E1B74; L_088E1BD0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E1C64; } @@ -2727,7 +2778,6 @@ L_088E1BD8: goto L_088E1B54; L_088E1BE0: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_088E1C48; } @@ -2740,7 +2790,6 @@ L_088E1BE8: L_088E1BF0: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E1C0C; } @@ -2795,7 +2844,6 @@ L_088E1C48: AOT_REGCACHE_SYNC_OUT(); return; L_088E1C5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E1BC8; } @@ -2807,7 +2855,6 @@ L_088E1C64: goto L_088E1B54; L_088E1C6C: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_088E1CB8; } @@ -2870,7 +2917,17 @@ L_088E1CD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1CEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2905,7 +2962,17 @@ L_088E1D24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1D58: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -2928,7 +2995,6 @@ L_088E1D8C: AOT_REGCACHE_SYNC_OUT(); return; L_088E1D98: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088E1DE8; } @@ -2956,7 +3022,6 @@ L_088E1DBC: AOT_REGCACHE_SYNC_OUT(); return; L_088E1DC4: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088E1DD4; } @@ -3017,7 +3082,6 @@ L_088E1E14: L_088E1E20: ctx.gpr[21] = (ctx.gpr[20] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088E1E84; } @@ -3036,7 +3100,6 @@ L_088E1E2C: AOT_REGCACHE_SYNC_OUT(); return; L_088E1E44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E1E84; } @@ -3056,7 +3119,6 @@ L_088E1E4C: L_088E1E64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088E1E84; } @@ -3065,7 +3127,6 @@ L_088E1E64: L_088E1E70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E1E84; } @@ -3109,7 +3170,17 @@ L_088E1E9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1EC0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -3121,7 +3192,17 @@ L_088E1EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1EDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3142,7 +3223,6 @@ L_088E1EF8: L_088E1F00: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E1F14; } @@ -3165,7 +3245,17 @@ L_088E1F14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E1F28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -3193,7 +3283,6 @@ L_088E1F64: goto L_088E1F70; L_088E1F70: aot_gpr_31 = (0x088E1F78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E1F78u) goto L_088E1F78; AOT_REGCACHE_SYNC_OUT(); return; L_088E1F78: @@ -3242,7 +3331,6 @@ L_088E1FCC: goto L_088E1FD8; L_088E1FD8: aot_gpr_31 = (0x088E1FE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E1FE0u) goto L_088E1FE0; AOT_REGCACHE_SYNC_OUT(); return; L_088E1FE0: @@ -3265,7 +3353,6 @@ L_088E1FE8: L_088E2014: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2038; } @@ -3318,7 +3405,6 @@ L_088E207C: AOT_REGCACHE_SYNC_OUT(); return; L_088E2084: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E209C; } @@ -3380,7 +3466,17 @@ L_088E20EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2118: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[20]); @@ -3405,7 +3501,6 @@ L_088E2118: L_088E215C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2184; } @@ -3413,7 +3508,6 @@ L_088E215C: } L_088E2168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E218C; } @@ -3426,7 +3520,6 @@ L_088E2170: goto L_088E1F28; L_088E217C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E239C; } @@ -3445,7 +3538,6 @@ L_088E218C: goto L_088E2198; L_088E2198: aot_gpr_31 = (0x088E21A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E21A0u) goto L_088E21A0; AOT_REGCACHE_SYNC_OUT(); return; L_088E21A0: @@ -3492,7 +3584,6 @@ L_088E21EC: goto L_088E21F8; L_088E21F8: aot_gpr_31 = (0x088E2200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E2200u) goto L_088E2200; AOT_REGCACHE_SYNC_OUT(); return; L_088E2200: @@ -3532,7 +3623,6 @@ L_088E224C: AOT_REGCACHE_SYNC_OUT(); return; L_088E2258: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E2264; } @@ -3556,7 +3646,6 @@ L_088E2264: L_088E227C: aot_gpr_6 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_6; - // nop if (branch_taken) { goto L_088E2290; } @@ -3564,7 +3653,6 @@ L_088E227C: } L_088E2288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E238C; } @@ -3580,7 +3668,6 @@ L_088E2290: L_088E22A4: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088E22BC; } @@ -3633,7 +3720,6 @@ L_088E230C: AOT_REGCACHE_SYNC_OUT(); return; L_088E2314: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E232C; } @@ -3679,7 +3765,6 @@ L_088E238C: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_6 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088E21EC; } @@ -3704,7 +3789,17 @@ L_088E239C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E23CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -3738,7 +3833,6 @@ L_088E2410: goto L_088E241C; L_088E241C: aot_gpr_31 = (0x088E2424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E2424u) goto L_088E2424; AOT_REGCACHE_SYNC_OUT(); return; L_088E2424: @@ -3815,7 +3909,6 @@ L_088E248C: AOT_REGCACHE_SYNC_OUT(); return; L_088E2494: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E24A0; } @@ -3846,7 +3939,6 @@ L_088E24B4: goto L_088E24C0; L_088E24C0: aot_gpr_31 = (0x088E24C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E24C8u) goto L_088E24C8; AOT_REGCACHE_SYNC_OUT(); return; L_088E24C8: @@ -3870,7 +3962,6 @@ L_088E24D0: } L_088E24F4: aot_gpr_31 = (0x088E24FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E24FCu) goto L_088E24FC; AOT_REGCACHE_SYNC_OUT(); return; L_088E24FC: @@ -3904,7 +3995,6 @@ L_088E2528: } L_088E2538: aot_gpr_31 = (0x088E2540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E2540u) goto L_088E2540; AOT_REGCACHE_SYNC_OUT(); return; L_088E2540: @@ -3955,7 +4045,17 @@ L_088E2598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E25C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3963,7 +4063,6 @@ L_088E25C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E2608; } @@ -3992,13 +4091,22 @@ L_088E2608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2618: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[7] = (0u | 0u); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088E26FC; } @@ -4029,7 +4137,6 @@ L_088E265C: ctx.gpr[3] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[3] + static_cast(0)))))); ctx.gpr[3] = (ctx.gpr[3] & 2u); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_088E2680; } @@ -4050,7 +4157,6 @@ L_088E2680: ctx.gpr[3] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[3] + static_cast(0)))))); ctx.gpr[3] = (ctx.gpr[3] & 2u); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_088E26A4; } @@ -4110,7 +4216,6 @@ L_088E26CC: } L_088E26D4: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088E26F4; } @@ -4128,7 +4233,6 @@ L_088E26DC: } L_088E26EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E26FC; } @@ -4136,7 +4240,6 @@ L_088E26EC: } L_088E26F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2720; } @@ -4146,7 +4249,6 @@ L_088E26FC: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E271C; } @@ -4169,22 +4271,29 @@ L_088E271C: goto L_088E2720; L_088E2720: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2728: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x088E2744u); - // nop goto L_088E2618; L_088E2744: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088E277C; } @@ -4237,7 +4346,17 @@ L_088E2780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); @@ -4254,7 +4373,6 @@ L_088E2798: } L_088E27B8: aot_gpr_31 = (0x088E27C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E27C0u) goto L_088E27C0; AOT_REGCACHE_SYNC_OUT(); return; L_088E27C0: @@ -4284,18 +4402,26 @@ L_088E27C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2810: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x088E282Cu); - // nop goto L_088E2798; L_088E282C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088E2864; } @@ -4348,7 +4474,17 @@ L_088E2868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2880: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -4367,11 +4503,20 @@ L_088E2880: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E289C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -4382,7 +4527,6 @@ L_088E289C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088E28DC; } @@ -4392,7 +4536,6 @@ L_088E28C4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E28E4; } @@ -4438,7 +4581,17 @@ L_088E2908: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2918: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_6); @@ -4453,7 +4606,6 @@ L_088E2918: L_088E2938: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E294C; } @@ -4461,7 +4613,6 @@ L_088E2938: } L_088E2944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E299C; } @@ -4469,7 +4620,6 @@ L_088E2944: } L_088E294C: aot_gpr_31 = (0x088E2954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 19u, 0x08824204u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E2954u) goto L_088E2954; AOT_REGCACHE_SYNC_OUT(); return; L_088E2954: @@ -4511,28 +4661,68 @@ L_088E299C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E29A8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2016)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E29B0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2016)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E29B8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2268)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E29C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -4548,7 +4738,6 @@ L_088E29C0: } L_088E29DC: aot_gpr_31 = (0x088E29E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E29E4u) goto L_088E29E4; AOT_REGCACHE_SYNC_OUT(); return; L_088E29E4: @@ -4561,7 +4750,6 @@ L_088E29E4: } L_088E29EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2A24; } @@ -4569,7 +4757,6 @@ L_088E29EC: } L_088E29F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2A8C; } @@ -4582,7 +4769,6 @@ L_088E29FC: AOT_REGCACHE_SYNC_OUT(); return; L_088E2A04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E2A24; } @@ -4597,7 +4783,6 @@ L_088E2A0C: AOT_REGCACHE_SYNC_OUT(); return; L_088E2A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2A8C; } @@ -4607,7 +4792,6 @@ L_088E2A24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E2A68; } @@ -4616,7 +4800,6 @@ L_088E2A24: L_088E2A34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E2A58; } @@ -4631,7 +4814,6 @@ L_088E2A40: AOT_REGCACHE_SYNC_OUT(); return; L_088E2A50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2A8C; } @@ -4643,7 +4825,6 @@ L_088E2A58: goto L_088E34EC; L_088E2A60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2A8C; } @@ -4652,7 +4833,6 @@ L_088E2A60: L_088E2A68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2A84; } @@ -4665,7 +4845,6 @@ L_088E2A74: AOT_REGCACHE_SYNC_OUT(); return; L_088E2A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2A8C; } @@ -4684,7 +4863,17 @@ L_088E2A8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2A9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -4734,7 +4923,6 @@ L_088E2B00: } L_088E2B08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2C84; } @@ -4752,7 +4940,6 @@ L_088E2B18: L_088E2B20: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2B6C; } @@ -4765,7 +4952,6 @@ L_088E2B2C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E2B6C; } @@ -4791,7 +4977,6 @@ L_088E2B68: goto L_088E2B6C; L_088E2B6C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2BB0; } @@ -4803,7 +4988,6 @@ L_088E2B74: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E2BB0; } @@ -4829,7 +5013,6 @@ L_088E2BAC: goto L_088E2BB0; L_088E2BB0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2BF4; } @@ -4841,7 +5024,6 @@ L_088E2BB8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E2BF4; } @@ -4867,7 +5049,6 @@ L_088E2BF0: goto L_088E2BF4; L_088E2BF4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2C3C; } @@ -4880,7 +5061,6 @@ L_088E2BFC: ctx.gpr[17] = (0u < aot_gpr_5 ? 1u : 0u); ctx.gpr[17] = (ctx.gpr[17] & 255u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E2C3C; } @@ -4929,7 +5109,6 @@ L_088E2C44: AOT_REGCACHE_SYNC_OUT(); return; L_088E2C74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E2C84; } @@ -4951,7 +5130,17 @@ L_088E2C84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2C98: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[18]); @@ -5001,7 +5190,6 @@ L_088E2D04: L_088E2D4C: aot_gpr_5 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E2D6C; } @@ -5038,7 +5226,6 @@ L_088E2D78: AOT_REGCACHE_SYNC_OUT(); return; L_088E2D98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E2DB8; } @@ -5056,7 +5243,6 @@ L_088E2DA4: goto L_088E2DB8; L_088E2DB8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088E2DC8; } @@ -5064,7 +5250,6 @@ L_088E2DB8: } L_088E2DC0: { const bool branch_taken = ctx.gpr[22] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E2ED4; } @@ -5072,7 +5257,6 @@ L_088E2DC0: } L_088E2DC8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088E2DDC; } @@ -5081,7 +5265,6 @@ L_088E2DC8: L_088E2DD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E2ED4; } @@ -5095,7 +5278,6 @@ L_088E2DDC: AOT_REGCACHE_SYNC_OUT(); return; L_088E2DE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E2ED4; } @@ -5126,7 +5308,6 @@ L_088E2E18: L_088E2E24: aot_fpr_12 = aot_fpr_22 - ctx.fpr[0]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088E2E38; @@ -5135,9 +5316,7 @@ L_088E2E24: L_088E2E38: aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E2E50; } @@ -5178,7 +5357,6 @@ L_088E2E70: } L_088E2E78: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E2E90; } @@ -5186,7 +5364,6 @@ L_088E2E78: } L_088E2E80: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088E2E90; } @@ -5194,7 +5371,6 @@ L_088E2E80: } L_088E2E88: { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_088E2EA0; } @@ -5212,9 +5388,7 @@ L_088E2E90: } L_088E2EA0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E2ED4; } @@ -5255,7 +5429,6 @@ L_088E2ED4: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088E2D4C; } @@ -5294,7 +5467,17 @@ L_088E2F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E2F4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -5320,7 +5503,6 @@ L_088E2F4C: AOT_REGCACHE_SYNC_OUT(); return; L_088E2F9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E3048; } @@ -5330,7 +5512,6 @@ L_088E2FA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E3048; } @@ -5340,7 +5521,6 @@ L_088E2FB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E3048; } @@ -5400,7 +5580,6 @@ L_088E3024: AOT_REGCACHE_SYNC_OUT(); return; L_088E3040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3054; } @@ -5408,7 +5587,6 @@ L_088E3040: } L_088E3048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3054; } @@ -5432,7 +5610,17 @@ L_088E3054: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5446,7 +5634,6 @@ L_088E3074: L_088E3090: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E30B0; } @@ -5464,7 +5651,6 @@ L_088E30AC: goto L_088E30B0; L_088E30B0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E30CC; } @@ -5482,7 +5668,6 @@ L_088E30C8: goto L_088E30CC; L_088E30CC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E30E8; } @@ -5500,7 +5685,6 @@ L_088E30E4: goto L_088E30E8; L_088E30E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3108; } @@ -5518,7 +5702,6 @@ L_088E3108: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(688))); aot_gpr_4 = (static_cast(aot_gpr_4) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E3124; } @@ -5549,7 +5732,6 @@ L_088E314C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E3164; } @@ -5557,7 +5739,6 @@ L_088E314C: } L_088E315C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E3170; } @@ -5577,7 +5758,17 @@ L_088E3170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3180: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -5604,7 +5795,6 @@ L_088E31B4: AOT_REGCACHE_SYNC_OUT(); return; L_088E31C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E32B8; } @@ -5613,7 +5803,6 @@ L_088E31C0: L_088E31C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E31EC; } @@ -5631,7 +5820,6 @@ L_088E31D4: } L_088E31E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E32B0; } @@ -5639,7 +5827,6 @@ L_088E31E4: } L_088E31EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3344; } @@ -5647,7 +5834,6 @@ L_088E31EC: } L_088E31F4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E32B0; } @@ -5662,7 +5848,6 @@ L_088E31FC: L_088E3208: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E32B0; } @@ -5729,7 +5914,6 @@ L_088E329C: AOT_REGCACHE_SYNC_OUT(); return; L_088E32B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3344; } @@ -5737,7 +5921,6 @@ L_088E32B0: } L_088E32B8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088E3300; } @@ -5750,7 +5933,6 @@ L_088E32C0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3300; } @@ -5763,7 +5945,6 @@ L_088E32DC: AOT_REGCACHE_SYNC_OUT(); return; L_088E32E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E3300; } @@ -5772,7 +5953,6 @@ L_088E32E4: L_088E32EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088E3314; } @@ -5780,7 +5960,6 @@ L_088E32EC: } L_088E32F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3344; } @@ -5789,7 +5968,6 @@ L_088E32F8: L_088E3300: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3314; } @@ -5797,7 +5975,6 @@ L_088E3300: } L_088E330C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3344; } @@ -5836,7 +6013,17 @@ L_088E3344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E335C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5862,7 +6049,6 @@ L_088E3388: AOT_REGCACHE_SYNC_OUT(); return; L_088E3398: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E33E4; } @@ -5897,7 +6083,6 @@ L_088E33D0: goto L_088E33DC; L_088E33DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3428; } @@ -5931,7 +6116,6 @@ L_088E3400: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3444; } @@ -5945,7 +6129,6 @@ L_088E3428: AOT_REGCACHE_SYNC_OUT(); return; L_088E3434: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E344C; } @@ -5982,7 +6165,17 @@ L_088E3450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3464: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5997,7 +6190,6 @@ L_088E3464: AOT_REGCACHE_SYNC_OUT(); return; L_088E3488: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E349C; } @@ -6006,7 +6198,6 @@ L_088E3488: L_088E3490: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E34B4; } @@ -6019,7 +6210,6 @@ L_088E349C: AOT_REGCACHE_SYNC_OUT(); return; L_088E34A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E34BC; } @@ -6027,7 +6217,6 @@ L_088E34A4: } L_088E34AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E34D4; } @@ -6035,7 +6224,6 @@ L_088E34AC: } L_088E34B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E34D4; } @@ -6065,7 +6253,17 @@ L_088E34D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E34EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); @@ -6075,7 +6273,6 @@ L_088E34EC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3518; } @@ -6165,9 +6362,7 @@ L_088E35AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E3600; } @@ -6182,7 +6377,6 @@ L_088E35C8: ctx.gpr[17] = (0u < aot_gpr_5 ? 1u : 0u); ctx.gpr[17] = (ctx.gpr[17] & 255u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E3600; } @@ -6207,7 +6401,6 @@ L_088E35FC: goto L_088E3600; L_088E3600: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3620; } @@ -6233,7 +6426,17 @@ L_088E3620: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3634: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6254,7 +6457,6 @@ L_088E366C: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E36A0; } @@ -6286,7 +6488,6 @@ L_088E3698: } L_088E36A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E37B4; } @@ -6295,9 +6496,7 @@ L_088E36A0: L_088E36A8: ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E3704; } @@ -6310,7 +6509,6 @@ L_088E36BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3704; } @@ -6350,9 +6548,7 @@ L_088E370C: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E37B4; } @@ -6431,7 +6627,17 @@ L_088E37B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E37CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -6464,7 +6670,6 @@ L_088E380C: L_088E3820: aot_gpr_6 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E3844; } @@ -6482,7 +6687,6 @@ L_088E382C: } L_088E383C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3914; } @@ -6490,7 +6694,6 @@ L_088E383C: } L_088E3844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3AA0; } @@ -6499,7 +6702,6 @@ L_088E3844: L_088E384C: aot_gpr_6 = (aot_gpr_6 & 4096u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088E3914; } @@ -6511,7 +6713,6 @@ L_088E3858: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088E3894; } @@ -6540,7 +6741,6 @@ L_088E3894: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3A34; } @@ -6564,7 +6764,6 @@ L_088E38B0: goto L_088E38C0; L_088E38C0: { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E3A34; } @@ -6572,7 +6771,6 @@ L_088E38C0: } L_088E38C8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088E3A34; } @@ -6612,7 +6810,6 @@ L_088E3914: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E3A34; } @@ -6622,7 +6819,6 @@ L_088E3928: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E3A34; } @@ -6670,7 +6866,6 @@ L_088E3998: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[14])) && aot_fpr_13 == ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(68))); if (branch_taken) { @@ -6685,7 +6880,6 @@ L_088E39C0: ctx.fpr[14] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088E39E4; @@ -6698,7 +6892,6 @@ L_088E39E4: AOT_REGCACHE_SYNC_OUT(); return; L_088E39EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3A34; } @@ -6706,7 +6899,6 @@ L_088E39EC: } L_088E39F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15651u << 16u); if (branch_taken) { @@ -6721,7 +6913,6 @@ L_088E3A04: ctx.fpr[14] = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 - ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088E3A28; @@ -6735,13 +6926,11 @@ L_088E3A28: AOT_REGCACHE_SYNC_OUT(); return; L_088E3A34: aot_gpr_31 = (0x088E3A3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E3A3Cu) goto L_088E3A3C; AOT_REGCACHE_SYNC_OUT(); return; L_088E3A3C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_16; - // nop if (branch_taken) { goto L_088E3AA0; } @@ -6753,7 +6942,6 @@ L_088E3A48: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3AA0; } @@ -6803,7 +6991,17 @@ L_088E3AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3ABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6817,7 +7015,6 @@ L_088E3ABC: AOT_REGCACHE_SYNC_OUT(); return; L_088E3ADC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E3B20; } @@ -6840,7 +7037,6 @@ L_088E3AF4: AOT_REGCACHE_SYNC_OUT(); return; L_088E3AFC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E3B20; } @@ -6872,7 +7068,6 @@ L_088E3B20: L_088E3B38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088E3B80; } @@ -6884,7 +7079,6 @@ L_088E3B44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3B80; } @@ -6919,7 +7113,17 @@ L_088E3B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3B94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -6928,7 +7132,6 @@ L_088E3B94: aot_gpr_4 = (aot_gpr_5 & 1024u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E3BD8; } @@ -6939,7 +7142,6 @@ L_088E3BB4: aot_gpr_5 = (0u | 6u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E3BE0; } @@ -6952,7 +7154,6 @@ L_088E3BC8: AOT_REGCACHE_SYNC_OUT(); return; L_088E3BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3C50; } @@ -6960,7 +7161,6 @@ L_088E3BD0: } L_088E3BD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3C50; } @@ -6970,7 +7170,6 @@ L_088E3BE0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E3C00; } @@ -6983,7 +7182,6 @@ L_088E3BF0: AOT_REGCACHE_SYNC_OUT(); return; L_088E3BF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3C50; } @@ -6993,7 +7191,6 @@ L_088E3C00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E3C38; } @@ -7014,7 +7211,6 @@ L_088E3C10: AOT_REGCACHE_SYNC_OUT(); return; L_088E3C30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3C50; } @@ -7027,7 +7223,6 @@ L_088E3C38: AOT_REGCACHE_SYNC_OUT(); return; L_088E3C40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088E3C50; } @@ -7046,7 +7241,17 @@ L_088E3C50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3C60: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_gpr_5 << 2u); @@ -7069,7 +7274,6 @@ L_088E3C60: L_088E3CA0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E3CC4; } @@ -7082,7 +7286,6 @@ L_088E3CAC: AOT_REGCACHE_SYNC_OUT(); return; L_088E3CB4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088E3CD4; } @@ -7090,7 +7293,6 @@ L_088E3CB4: } L_088E3CBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3D90; } @@ -7098,7 +7300,6 @@ L_088E3CBC: } L_088E3CC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3DB0; } @@ -7106,7 +7307,6 @@ L_088E3CC4: } L_088E3CCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E3DB0; } @@ -7169,7 +7369,6 @@ L_088E3D7C: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E3D48; } @@ -7178,7 +7377,6 @@ L_088E3D7C: L_088E3D90: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E3DAC; } @@ -7210,7 +7408,17 @@ L_088E3DB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3DD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -7256,9 +7464,7 @@ L_088E3E44: aot_fpr_12 = aot_fpr_12 + aot_fpr_20; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E3E6C; } @@ -7288,7 +7494,17 @@ L_088E3E70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3E88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(0u); @@ -7309,7 +7525,6 @@ L_088E3E88: L_088E3EB4: aot_gpr_5 = (static_cast(aot_gpr_16) < 18 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088E3ED0; } @@ -7396,7 +7611,17 @@ L_088E3F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E3F34: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -7464,7 +7689,6 @@ L_088E3F88: AOT_REGCACHE_SYNC_OUT(); return; L_088E3FE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0056_entry, 56u, 13u, 0x088E4258u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0056.cpp b/profiles/vcs/generated/generated_unit_0056.cpp index 7fff27a..1038864 100644 --- a/profiles/vcs/generated/generated_unit_0056.cpp +++ b/profiles/vcs/generated/generated_unit_0056.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0056[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 7, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, - 21, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 29, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 40, 0, 41, 0, 0, 42, 43, 0, 44, 0, 45, 0, 46, 0, 47, 48, 0, - 0, 0, 49, 0, 50, 0, 51, 52, 0, 53, 0, 54, 0, 0, 55, 0, 56, 0, 57, 0, 0, 0, 58, 0, 59, 0, 0, 60, 61, 0, 0, 0, - 62, 0, 63, 0, 64, 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, 0, 0, - 70, 71, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 75, 0, 0, 76, 0, 77, 0, 78, - 0, 79, 0, 80, 0, 81, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 89, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 97, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, - 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, - 106, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 111, 112, 0, - 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, - 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 124, 0, 125, 0, 126, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 0, 0, 129, 0, - 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 133, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, - 138, 0, 0, 0, 139, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, 144, 0, 145, 0, 0, 0, 0, 0, 146, - 0, 0, 147, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 151, 152, 0, 153, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 156, - 0, 157, 158, 0, 0, 0, 159, 160, 0, 161, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, - 0, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, 0, 168, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 175, 0, 176, 177, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 179, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, - 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, - 0, 187, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 192, 0, 193, 0, 0, 0, 194, - 0, 195, 0, 196, 0, 197, 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 203, 0, 0, - 204, 0, 205, 0, 0, 206, 207, 0, 208, 0, 0, 209, 210, 0, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 214, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 0, 216, 217, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 221, 222, 0, 0, - 223, 0, 224, 0, 225, 0, 0, 0, 226, 0, 0, 227, 228, 0, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 0, 231, 0, 232, 0, 233, 0, 0, - 234, 0, 0, 235, 0, 236, 0, 237, 0, 0, 238, 0, 0, 239, 0, 240, 0, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, - 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, 0, 248, 0, 0, 249, 0, 250, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, - 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, - 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 0, 0, 262, 0, 263, 0, 264, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, - 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 271, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, 276, 0, 277, 0, 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 0, 0, 280, 0, 0, 0, - 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 285, 0, 286, 0, 0, 287, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 290, 0, 291, 0, 0, 292, 0, 293, 0, - 294, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, - 299, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 302, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 314, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, - 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, - 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 328, 0, - 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 0, - 0, 335, 336, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, 343, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, - 0, 346, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, - 353, 354, 0, 355, 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, - 364, 0, 0, 365, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 369, 0, 0, 0, 0, 370, 0, 371, 0, 0, - 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 376, 0, 377, 0, 378, 379, 0, 0, 0, 0, - 380, 0, 0, 0, 0, 0, 0, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 0, 388, 0, 389, 0, 0, 0, 0, 0, 390, - 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 395, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, - 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 402, 0, 0, 0, 403, 404, 0, 405, 0, 0, - 406, 0, 407, 0, 408, 0, 0, 0, 409, 0, 0, 410, 0, 411, 0, 412, 413, 414, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, 0, - 418, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 430, - 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, - 0, 436, 0, 0, 0, 0, 0, 0, 0, 437, 438, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, - 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, - 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 448, 0, 449, 0, 450, 0, 0, 0, 451, 0, 452, 0, 0, - 0, 0, 0, 453, 0, 454, 0, 455, 0, 456, 0, 0, 0, 457, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, - 460, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 467, - 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 471, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, 0, 477, 0, 0, 0, 478, 479, - 0, 480, 0, 0, 0, 0, 481, 0, 482, 0, 483, 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, - 498, 0, 499, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, - 505, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 0, 513, 0, 0, 0, 514, 515, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 517, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 521, 0, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 0, 524, 525, 0, 0, 526, 0, 0, 0, - 0, 0, 0, 527, 528, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, - 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, - 549, 0, 0, 0, 0, 550, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, - 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, - 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 575, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 578, 579, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 583, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 588, - 0, 0, 0, 589, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, - 0, 0, 0, 594, 0, 0, 0, 0, 595, 596, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 599, 0, - 0, 600, 0, 0, 601, 0, 0, 0, 602, 603, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 0, 612, 0, 613, 0, 0, - 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, - 0, 619, 0, 620, 0, 0, 0, 0, 621, 622, 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 626, 0, 627, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 632, 0, 0, 0, 633, 0, 634, 0, - 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 636, 0, 0, 637, 0, 638, 0, 639, 0, 640, 0, 0, 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, - 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 646, - 0, 647, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 654, 655, 0, 0, 0, 0, 0, 0, 0, 656, 0, - 0, 657, 0, 658, 0, 0, 0, 659, 0, 660, 0, 0, 661, 0, 662, 0, 663, 0, 664, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 667, - 0, 668, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, - 0, 0, 674, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 679, 0, 0, 680, 0, 0, 681, 0, - 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 683, 0, 684, 0, 685, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, - 0, 688, 0, 0, 0, 0, 689, 0, 690, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, - 0, 694, 0, 695, 0, 696, 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, - 0, 701, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, 709, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 712, 0, 713, 0, 714, - 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 718, 0, 0, 0, 0, 0, 0, 719, 720, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, - 0, 0, 0, 723, 0, 0, 0, 724, 0, 0, 0, 725, 0, 726, 0, 727, 0, 728, 0, 0, 729, 0, 730, 0, 731, 0, 0, 732, 0, 0, 0, 733, - 0, 734, 0, 735, 0, 0, 736, 0, 0, 0, 737, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 741, 0, 742, 0, - 743, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 747, 0, 748, 0, 749, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 752, 0, - 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 755, 0, 756, 757, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 759, - 0, 0, 760, 0, 761, 0, 762, 0, 763, 0, 0, 0, 764, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 0, 767, 0, 768, 0, 0, 0, 0, 0, - 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 773, 0, 0, 774, 0, 0, 775, 0, - 0, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 778, 0, 779, 0, 0, 780, 0, 781, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, - 783, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 787, 0, 0, 788, 0, 0, 0, 789, 0, 790, 0, 0, 0, 0, 0, 0, 791, 0, 792, 0, 793, 0, 0, 0, 0, 0, 0, 794, 795, - 0, 0, 796, 0, 0, 0, 797, 0, 0, 0, 798, 0, 0, 0, 799, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 801, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 804, 0, 0, 0, 805, 0, 806, 0, 0, 807, 0, 0, - 0, 0, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 811, 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 814, 0, 815, 0, 0, 0, 0, 0, 0, - 0, 816, 0, 817, 0, 818, 0, 0, 819, 0, 0, 820, 0, 0, 821, 0, 0, 822, 0, 823, 0, 0, 0, 0, 0, 824, 0, 0, 825, 0, 826, 0, - 827, 0, 828, 0, 0, 829, 0, 830, 0, 0, 831, 0, 832, 833, 0, 0, 0, 834, 0, 0, 0, 835, 0, 836, 0, 837, 0, 838, 0, 839, 0, 840, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0056[64] = { + 0x0500000000000001ull, 0x4200003500000011ull, 0x1222402000C00004ull, 0x015420A024448891ull, + 0x19454AD46AB29810ull, 0xA950008314040615ull, 0x02052A021001092Aull, 0x5000042A00008500ull, + 0x6800088940101002ull, 0x414150505548A010ull, 0x0820292000080010ull, 0x8145A054828A0511ull, + 0x0705622808002AC6ull, 0x2002000500000B40ull, 0x8A40404A04002042ull, 0x062059652052822Aull, + 0x2A50191531104181ull, 0x400000100006A4A9ull, 0x5000002040852412ull, 0x2040140104154555ull, + 0x9501100410445AA0ull, 0x0104028152808200ull, 0x0101000010412849ull, 0x102A000404000080ull, + 0x4280244040889101ull, 0x8080401624504002ull, 0x2028320208A82000ull, 0x2852020900AA8A8Bull, + 0x829555010D488081ull, 0x2C510102820A4880ull, 0x00548041210BA915ull, 0x8020222085008881ull, + 0x0100001020050602ull, 0x020122A828AA1042ull, 0x1200100890144085ull, 0x02024542C5110A00ull, + 0x8020100401004020ull, 0x0208805520120200ull, 0x00509000188AA909ull, 0x2204089813088480ull, + 0x0A00000000020908ull, 0x11020080200A8100ull, 0x08941420AAA80421ull, 0x8201401044004820ull, + 0x90009040150B0402ull, 0x4802030880280018ull, 0x2850100809140312ull, 0x0020A30A20202820ull, + 0x110AA4805188050Aull, 0x0200040A80900020ull, 0xA045528A40610088ull, 0x4942011414201022ull, + 0x1008114202025410ull, 0x02828202808004AAull, 0x00200020A9004608ull, 0x8952A88848302400ull, + 0x1540104150410C4Aull, 0x8086901050040000ull, 0x4950200805111154ull, 0x0104000910294084ull, + 0x00024444C0A81448ull, 0x0000004825120041ull, 0x02A0000A00080000ull, 0xAAA234A5520A492Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0056[64] = { + 1u, 4u, 12u, 21u, 37u, 62u, 79u, 93u, 102u, 113u, 130u, 138u, 157u, 175u, 183u, 195u, + 215u, 234u, 245u, 256u, 272u, 288u, 299u, 309u, 316u, 329u, 341u, 353u, 372u, 391u, 406u, 424u, + 436u, 444u, 460u, 472u, 487u, 494u, 505u, 520u, 534u, 540u, 549u, 566u, 576u, 589u, 600u, 614u, + 626u, 643u, 651u, 668u, 682u, 694u, 707u, 717u, 734u, 750u, 760u, 776u, 787u, 801u, 810u, 816u, }; void recomp_unit_0056_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0056_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088E4000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0056[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0056[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0056[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088E4000; @@ -1144,7 +1051,6 @@ L_088E4000: AOT_REGCACHE_SYNC_OUT(); return; L_088E40E0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E4110; } @@ -1154,9 +1060,7 @@ L_088E40E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(152))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E4110; } @@ -1252,7 +1156,6 @@ L_088E4180: goto L_088E4188; L_088E4188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E4258; } @@ -1290,9 +1193,7 @@ L_088E4194: L_088E41E4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E4258; } @@ -1358,7 +1259,17 @@ L_088E425C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4294: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[16]); @@ -1374,7 +1285,6 @@ L_088E4294: L_088E42B8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E42D4; } @@ -1396,7 +1306,6 @@ L_088E42D4: L_088E42E4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4300; } @@ -1418,7 +1327,6 @@ L_088E4300: L_088E4310: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E432C; } @@ -1440,7 +1348,6 @@ L_088E432C: L_088E433C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4358; } @@ -1462,7 +1369,6 @@ L_088E4358: L_088E4368: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E43B4; } @@ -1476,7 +1382,6 @@ L_088E4374: aot_gpr_5 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E439C; } @@ -1511,28 +1416,68 @@ L_088E43B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E43C8: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 4u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E43D0: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E43D8: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E43E0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), aot_gpr_18); @@ -1558,7 +1503,6 @@ L_088E4410: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4430; } @@ -1575,7 +1519,6 @@ L_088E4430: AOT_REGCACHE_SYNC_OUT(); return; L_088E443C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E4450; } @@ -1613,7 +1556,6 @@ L_088E4464: AOT_REGCACHE_SYNC_OUT(); return; L_088E446C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E4478; } @@ -1637,7 +1579,6 @@ L_088E4488: AOT_REGCACHE_SYNC_OUT(); return; L_088E4490: { const bool branch_taken = aot_gpr_18 != aot_gpr_2; - // nop if (branch_taken) { goto L_088E44A4; } @@ -1648,7 +1589,6 @@ L_088E4498: goto L_088E449C; L_088E449C: { const bool branch_taken = aot_gpr_18 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E44B8; } @@ -1656,7 +1596,6 @@ L_088E449C: } L_088E44A4: aot_gpr_31 = (0x088E44ACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E44ACu) goto L_088E44AC; AOT_REGCACHE_SYNC_OUT(); return; L_088E44AC: @@ -1671,7 +1610,6 @@ L_088E44B8: AOT_REGCACHE_SYNC_OUT(); return; L_088E44C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E44E0; } @@ -1681,7 +1619,6 @@ L_088E44C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E44E0; } @@ -1694,7 +1631,6 @@ L_088E44D8: L_088E44E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E44F0; } @@ -1707,7 +1643,6 @@ L_088E44F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E4528; } @@ -1720,7 +1655,6 @@ L_088E4500: AOT_REGCACHE_SYNC_OUT(); return; L_088E4508: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E4528; } @@ -1731,7 +1665,6 @@ L_088E4510: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4528; } @@ -1755,7 +1688,17 @@ L_088E4528: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4548: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -1769,7 +1712,6 @@ L_088E4548: AOT_REGCACHE_SYNC_OUT(); return; L_088E4568: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E4584; } @@ -1779,7 +1721,6 @@ L_088E4570: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E4584; } @@ -1801,7 +1742,17 @@ L_088E4584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E459C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -1820,7 +1771,6 @@ L_088E45D0: goto L_088E43D8; L_088E45D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E45F4; } @@ -1829,7 +1779,6 @@ L_088E45D8: L_088E45E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(420))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_088E460C; } @@ -1837,7 +1786,6 @@ L_088E45E0: } L_088E45EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E45FC; } @@ -1845,7 +1793,6 @@ L_088E45EC: } L_088E45F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E4804; } @@ -1857,7 +1804,6 @@ L_088E45FC: goto L_088E43D8; L_088E4604: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E47F8; } @@ -1917,7 +1863,6 @@ L_088E4684: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E46C8; } @@ -1929,7 +1874,6 @@ L_088E46A4: goto L_088E43D8; L_088E46AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E46C8; } @@ -1943,7 +1887,6 @@ L_088E46B4: AOT_REGCACHE_SYNC_OUT(); return; L_088E46C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E47F0; } @@ -1982,7 +1925,6 @@ L_088E46E4: } L_088E4720: aot_gpr_31 = (0x088E4728u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E4728u) goto L_088E4728; AOT_REGCACHE_SYNC_OUT(); return; L_088E4728: @@ -2016,7 +1958,6 @@ L_088E473C: AOT_REGCACHE_SYNC_OUT(); return; L_088E4784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E47F0; } @@ -2024,7 +1965,6 @@ L_088E4784: } L_088E478C: aot_gpr_31 = (0x088E4794u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E4794u) goto L_088E4794; AOT_REGCACHE_SYNC_OUT(); return; L_088E4794: @@ -2058,7 +1998,6 @@ L_088E47A8: AOT_REGCACHE_SYNC_OUT(); return; L_088E47F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E4804; } @@ -2087,7 +2026,17 @@ L_088E4804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4830: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(40), ctx.gpr[17]); @@ -2117,7 +2066,6 @@ L_088E4850: AOT_REGCACHE_SYNC_OUT(); return; L_088E4878: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E488C; } @@ -2132,7 +2080,6 @@ L_088E488C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E48AC; } @@ -2185,7 +2132,6 @@ L_088E48AC: ctx.gpr[17] = (0u | 0u); { const float fs = aot_fpr_20; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[17] = (0u | 1u); goto L_088E48EC; @@ -2215,7 +2161,17 @@ L_088E48F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4910: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -2230,7 +2186,6 @@ L_088E4910: AOT_REGCACHE_SYNC_OUT(); return; L_088E4934: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_088E49F8; } @@ -2273,7 +2228,6 @@ L_088E4960: } L_088E4968: { const bool branch_taken = ctx.gpr[17] != aot_gpr_6; - // nop if (branch_taken) { goto L_088E49B8; } @@ -2281,7 +2235,6 @@ L_088E4968: } L_088E4970: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E4998; } @@ -2298,7 +2251,6 @@ L_088E4978: AOT_REGCACHE_SYNC_OUT(); return; L_088E4990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E49F8; } @@ -2315,7 +2267,6 @@ L_088E4998: AOT_REGCACHE_SYNC_OUT(); return; L_088E49B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E49F8; } @@ -2323,7 +2274,6 @@ L_088E49B0: } L_088E49B8: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E49E0; } @@ -2340,7 +2290,6 @@ L_088E49C0: AOT_REGCACHE_SYNC_OUT(); return; L_088E49D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E49F8; } @@ -2368,7 +2317,17 @@ L_088E49F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4A10: aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_4 + static_cast(3), aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load_word_right(aot_gpr_4 + static_cast(0), aot_gpr_6)); @@ -2388,7 +2347,17 @@ L_088E4A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4A4C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(28), ctx.gpr[16]); @@ -2513,7 +2482,6 @@ L_088E4B4C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088E4B88; } @@ -2521,7 +2489,6 @@ L_088E4B4C: } L_088E4B5C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088E4B7C; } @@ -2581,7 +2548,6 @@ L_088E4BBC: goto L_088E4BC0; L_088E4BC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E4C08; } @@ -2648,7 +2614,6 @@ L_088E4C1C: } L_088E4C24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4C34; } @@ -2656,7 +2621,6 @@ L_088E4C24: } L_088E4C2C: aot_gpr_31 = (0x088E4C34u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E4C34u) goto L_088E4C34; AOT_REGCACHE_SYNC_OUT(); return; L_088E4C34: @@ -2680,7 +2644,17 @@ L_088E4C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4C6C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -2689,7 +2663,6 @@ L_088E4C6C: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088E4CC0; } @@ -2760,7 +2733,6 @@ L_088E4CE8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4D20; } @@ -2783,7 +2755,17 @@ L_088E4D24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E4D2C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-128)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2844,7 +2826,6 @@ L_088E4DF4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(1914))); aot_gpr_4 = (static_cast(aot_gpr_18) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4E18; } @@ -2908,9 +2889,7 @@ L_088E4E34: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E50B0; } @@ -2943,7 +2922,6 @@ L_088E4E98: aot_fpr_12 = aot_fpr_20 - aot_fpr_12; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_088E4EB8; @@ -2955,7 +2933,6 @@ L_088E4EB8: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -2993,7 +2970,6 @@ L_088E4EFC: } L_088E4F04: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E4F14; } @@ -3001,7 +2977,6 @@ L_088E4F04: } L_088E4F0C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088E4FB8; } @@ -3009,7 +2984,6 @@ L_088E4F0C: } L_088E4F14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16273u << 16u); if (branch_taken) { @@ -3021,9 +2995,7 @@ L_088E4F24: aot_gpr_5 = (aot_gpr_5 | 13854u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E50B0; } @@ -3031,7 +3003,6 @@ L_088E4F24: } L_088E4F3C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088E4F58; } @@ -3061,7 +3032,6 @@ L_088E4F58: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E4F88; } @@ -3092,7 +3062,6 @@ L_088E4F94: goto L_088E4F98; L_088E4F98: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E4FB0; } @@ -3101,7 +3070,6 @@ L_088E4F98: L_088E4FA0: ctx.gpr[30] = (0u | 1u); { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088E4FB0; } @@ -3112,7 +3080,6 @@ L_088E4FAC: goto L_088E4FB0; L_088E4FB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E50B0; } @@ -3123,7 +3090,6 @@ L_088E4FB8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16294u << 16u); if (branch_taken) { @@ -3133,7 +3099,6 @@ L_088E4FB8: } L_088E4FD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -3148,7 +3113,6 @@ L_088E4FE8: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16345u << 16u); if (branch_taken) { @@ -3161,7 +3125,6 @@ L_088E5000: aot_gpr_4 = (aot_gpr_4 | 48651u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -3176,7 +3139,6 @@ L_088E5020: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16156u << 16u); if (branch_taken) { @@ -3188,7 +3150,6 @@ L_088E5038: aot_gpr_4 = (aot_gpr_4 | 25003u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -3198,9 +3159,7 @@ L_088E5038: } L_088E5050: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E5090; } @@ -3208,9 +3167,7 @@ L_088E5050: } L_088E5060: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E5090; } @@ -3222,7 +3179,6 @@ L_088E5070: L_088E5074: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(56))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E5088; } @@ -3242,9 +3198,7 @@ L_088E5088: } L_088E5090: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E50B0; } @@ -3270,7 +3224,6 @@ L_088E50B0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_18) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E4DF4; } @@ -3278,7 +3231,6 @@ L_088E50B0: } L_088E50D0: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088E50F4; } @@ -3287,7 +3239,6 @@ L_088E50D0: L_088E50D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E50EC; } @@ -3308,7 +3259,6 @@ L_088E50EC: L_088E50F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E511C; } @@ -3317,7 +3267,6 @@ L_088E50F4: L_088E5100: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5114; } @@ -3338,7 +3287,6 @@ L_088E5114: L_088E511C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(53))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5144; } @@ -3359,7 +3307,6 @@ L_088E5134: goto L_088E513C; L_088E513C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5148; } @@ -3393,7 +3340,17 @@ L_088E5148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E5190: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-208)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3415,7 +3372,6 @@ L_088E5190: L_088E51F8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E5310; } @@ -3424,7 +3380,6 @@ L_088E51F8: L_088E5204: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E5308; } @@ -3442,7 +3397,6 @@ L_088E5210: L_088E5228: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088E5300; } @@ -3456,7 +3410,6 @@ L_088E5234: AOT_REGCACHE_SYNC_OUT(); return; L_088E5240: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E52F8; } @@ -3551,7 +3504,6 @@ L_088E5294: } L_088E52F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5338; } @@ -3559,7 +3511,6 @@ L_088E52F0: } L_088E52F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3567,7 +3518,6 @@ L_088E52F8: } L_088E5300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3575,7 +3525,6 @@ L_088E5300: } L_088E5308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3583,7 +3532,6 @@ L_088E5308: } L_088E5310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3596,7 +3544,6 @@ L_088E5318: AOT_REGCACHE_SYNC_OUT(); return; L_088E5320: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E5338; } @@ -3606,7 +3553,6 @@ L_088E5328: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E5348; } @@ -3614,7 +3560,6 @@ L_088E5328: } L_088E5338: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088E5350; } @@ -3622,7 +3567,6 @@ L_088E5338: } L_088E5340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E53B0; } @@ -3630,7 +3574,6 @@ L_088E5340: } L_088E5348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3668,7 +3611,6 @@ L_088E5380: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E53B0; } @@ -3676,7 +3618,6 @@ L_088E5380: } L_088E53A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3692,7 +3633,6 @@ L_088E53B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E5424; } @@ -3716,7 +3656,6 @@ L_088E53F4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23236))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23240))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E541C; } @@ -3724,7 +3663,6 @@ L_088E53F4: } L_088E5414: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088E542C; } @@ -3732,7 +3670,6 @@ L_088E5414: } L_088E541C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5430; } @@ -3740,7 +3677,6 @@ L_088E541C: } L_088E5424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3751,7 +3687,6 @@ L_088E542C: goto L_088E5430; L_088E5430: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E56E0; } @@ -3761,7 +3696,6 @@ L_088E5438: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E54E0; } @@ -3771,7 +3705,6 @@ L_088E5448: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E54E0; } @@ -3809,7 +3742,6 @@ L_088E5488: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E54C0; } @@ -3847,7 +3779,6 @@ L_088E54E8: L_088E54F0: aot_gpr_4 = (0u | 255u); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_088E5524; } @@ -3863,7 +3794,6 @@ L_088E54FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E5640; } @@ -3893,7 +3823,6 @@ L_088E553C: AOT_REGCACHE_SYNC_OUT(); return; L_088E555C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5640; } @@ -3912,7 +3841,6 @@ L_088E5570: AOT_REGCACHE_SYNC_OUT(); return; L_088E5578: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E5640; } @@ -3975,7 +3903,6 @@ L_088E55E0: L_088E5600: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E5618; } @@ -3990,7 +3917,6 @@ L_088E560C: L_088E5618: aot_gpr_4 = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[24])) && aot_fpr_20 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -4117,7 +4043,17 @@ L_088E56E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E571C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-304)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4157,7 +4093,6 @@ L_088E5788: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E57D4; } @@ -4165,7 +4100,6 @@ L_088E5788: } L_088E57C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E584C; } @@ -4173,7 +4107,6 @@ L_088E57C4: } L_088E57CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -4186,7 +4119,6 @@ L_088E57D4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E5A6C; } @@ -4224,7 +4156,6 @@ L_088E5820: L_088E5830: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5A6C; } @@ -4244,7 +4175,6 @@ L_088E584C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(1360))); ctx.gpr[16] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E58DC; } @@ -4285,7 +4215,6 @@ L_088E5898: L_088E58A8: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5A6C; } @@ -4326,7 +4255,6 @@ L_088E58E4: L_088E58F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E59B8; } @@ -4354,7 +4282,6 @@ L_088E5938: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (aot_gpr_2 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088E5958; } @@ -4362,7 +4289,6 @@ L_088E5938: } L_088E5950: { const bool branch_taken = aot_gpr_5 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088E59B8; } @@ -4378,7 +4304,6 @@ L_088E5958: L_088E5968: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088E5988; } @@ -4396,7 +4321,6 @@ L_088E5984: goto L_088E5988; L_088E5988: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5A6C; } @@ -4465,7 +4389,6 @@ L_088E5A34: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (aot_gpr_2 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_088E5A54; } @@ -4473,7 +4396,6 @@ L_088E5A34: } L_088E5A4C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088E5A6C; } @@ -4481,7 +4403,6 @@ L_088E5A4C: } L_088E5A54: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5A6C; } @@ -4499,7 +4420,6 @@ L_088E5A6C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5AB4; } @@ -4532,7 +4452,6 @@ L_088E5AB4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5B04; } @@ -4540,7 +4459,6 @@ L_088E5AB4: } L_088E5ACC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088E5B04; } @@ -4569,7 +4487,6 @@ L_088E5B00: goto L_088E5B04; L_088E5B04: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E5B54; } @@ -4579,7 +4496,6 @@ L_088E5B0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5B54; } @@ -4592,7 +4508,6 @@ L_088E5B1C: AOT_REGCACHE_SYNC_OUT(); return; L_088E5B24: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E5B44; } @@ -4602,7 +4517,6 @@ L_088E5B2C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_18 + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E5B44; } @@ -4610,7 +4524,6 @@ L_088E5B2C: } L_088E5B3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -4623,7 +4536,6 @@ L_088E5B44: AOT_REGCACHE_SYNC_OUT(); return; L_088E5B4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -4631,7 +4543,6 @@ L_088E5B4C: } L_088E5B54: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E5B8C; } @@ -4644,9 +4555,7 @@ L_088E5B5C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E5B8C; } @@ -4694,7 +4603,6 @@ L_088E5BD8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5BF4; } @@ -4707,7 +4615,6 @@ L_088E5BEC: L_088E5BF4: ctx.gpr[17] = (0u | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088E5CDC; } @@ -4748,7 +4655,6 @@ L_088E5C3C: L_088E5C4C: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5CDC; } @@ -4761,7 +4667,6 @@ L_088E5C58: AOT_REGCACHE_SYNC_OUT(); return; L_088E5C60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E5C6C; } @@ -4813,7 +4718,6 @@ L_088E5CA8: } L_088E5CB0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_088E5CD0; } @@ -4821,7 +4725,6 @@ L_088E5CB0: } L_088E5CB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5CD0; } @@ -4829,7 +4732,6 @@ L_088E5CB8: } L_088E5CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5CD0; } @@ -4837,7 +4739,6 @@ L_088E5CC0: } L_088E5CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E5CD0; } @@ -4850,7 +4751,6 @@ L_088E5CD0: goto L_088E5CDC; L_088E5CDC: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088E5D44; } @@ -4862,7 +4762,6 @@ L_088E5CE4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5D44; } @@ -4890,7 +4789,6 @@ L_088E5D1C: L_088E5D2C: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5D44; } @@ -4906,7 +4804,6 @@ L_088E5D38: goto L_088E5D44; L_088E5D44: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088E5E00; } @@ -4934,7 +4831,6 @@ L_088E5D64: goto L_088E5D7C; L_088E5D7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5DD8; } @@ -4992,7 +4888,6 @@ L_088E5DE8: goto L_088E5DEC; L_088E5DEC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E5E00; } @@ -5013,7 +4908,6 @@ L_088E5E00: AOT_REGCACHE_SYNC_OUT(); return; L_088E5E08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E5ED0; } @@ -5059,7 +4953,6 @@ L_088E5E40: goto L_088E5E44; L_088E5E44: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5ED0; } @@ -5127,7 +5020,6 @@ L_088E5EBC: AOT_REGCACHE_SYNC_OUT(); return; L_088E5EC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -5135,7 +5027,6 @@ L_088E5EC8: } L_088E5ED0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E7278; } @@ -5149,7 +5040,6 @@ L_088E5ED8: { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.gpr[16] = (0u | 11u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (0u | 15u); if (branch_taken) { @@ -5162,9 +5052,7 @@ L_088E5F00: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E5FB4; } @@ -5174,7 +5062,6 @@ L_088E5F1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E5F68; } @@ -5184,7 +5071,6 @@ L_088E5F2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E5F7C; } @@ -5205,7 +5091,6 @@ L_088E5F3C: goto L_088E5F60; L_088E5F60: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E5F7C; } @@ -5228,7 +5113,6 @@ L_088E5F7C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E5FA4; } @@ -5271,7 +5155,6 @@ L_088E5FD4: aot_gpr_5 = (aot_gpr_5 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E61C0; } @@ -5289,9 +5172,7 @@ L_088E6004: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_13 = ctx.fpr[24] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E61C0; } @@ -5304,9 +5185,7 @@ L_088E6028: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E61C0; } @@ -5314,7 +5193,6 @@ L_088E6028: } L_088E6040: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E61C0; } @@ -5443,7 +5321,6 @@ L_088E60E0: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E6174; } @@ -5454,7 +5331,6 @@ L_088E6104: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6130; } @@ -5483,7 +5359,6 @@ L_088E6144: AOT_REGCACHE_SYNC_OUT(); return; L_088E614C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E616C; } @@ -5503,7 +5378,6 @@ L_088E615C: AOT_REGCACHE_SYNC_OUT(); return; L_088E616C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E61B4; } @@ -5525,7 +5399,6 @@ L_088E618C: AOT_REGCACHE_SYNC_OUT(); return; L_088E6194: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E61B4; } @@ -5546,7 +5419,6 @@ L_088E61A4: L_088E61B4: ctx.gpr[19] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E6790; } @@ -5561,7 +5433,6 @@ L_088E61C0: aot_gpr_5 = (aot_gpr_5 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E6208; } @@ -5579,7 +5450,6 @@ L_088E61E4: AOT_REGCACHE_SYNC_OUT(); return; L_088E6200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E6790; } @@ -5588,9 +5458,7 @@ L_088E6200: L_088E6208: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6770; } @@ -5601,9 +5469,7 @@ L_088E621C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6770; } @@ -5613,7 +5479,6 @@ L_088E6238: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E6770; } @@ -5621,7 +5486,6 @@ L_088E6238: } L_088E6248: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6770; } @@ -5655,7 +5519,6 @@ L_088E6250: L_088E6270: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(64))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E62E4; } @@ -5665,7 +5528,6 @@ L_088E627C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(48)))))); aot_gpr_5 = (0u | 215u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E62B0; } @@ -5749,7 +5611,6 @@ L_088E62B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E6398; } @@ -5758,7 +5619,6 @@ L_088E62B0: L_088E62E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6324; } @@ -5831,7 +5691,6 @@ L_088E62F0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E6398; } @@ -5847,7 +5706,6 @@ L_088E632C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(48)))))); aot_gpr_5 = (0u | 215u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E6368; } @@ -5857,7 +5715,6 @@ L_088E6340: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(64))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E6368; } @@ -5908,7 +5765,6 @@ L_088E6398: AOT_REGCACHE_SYNC_OUT(); return; L_088E63A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E6414; } @@ -5918,7 +5774,6 @@ L_088E63A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_18 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6414; } @@ -5927,7 +5782,6 @@ L_088E63A8: L_088E63B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6414; } @@ -5941,7 +5795,6 @@ L_088E63C4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6414; } @@ -5995,7 +5848,6 @@ L_088E6438: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E6524; } @@ -6011,7 +5863,6 @@ L_088E6460: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E6524; } @@ -6027,7 +5878,6 @@ L_088E6488: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E6524; } @@ -6042,7 +5892,6 @@ L_088E64B0: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088E6524; } @@ -6058,7 +5907,6 @@ L_088E64D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E6524; } @@ -6074,7 +5922,6 @@ L_088E64FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E6550; } @@ -6106,7 +5953,6 @@ L_088E6550: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6598; } @@ -6115,7 +5961,6 @@ L_088E6550: L_088E6574: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6598; } @@ -6123,12 +5968,10 @@ L_088E6574: } L_088E6580: aot_gpr_31 = (0x088E6588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E6588u) goto L_088E6588; AOT_REGCACHE_SYNC_OUT(); return; L_088E6588: { const bool branch_taken = aot_gpr_2 == aot_gpr_18; - // nop if (branch_taken) { goto L_088E6598; } @@ -6148,7 +5991,6 @@ L_088E6598: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088E6764; } @@ -6158,7 +6000,6 @@ L_088E65BC: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(336))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E660C; } @@ -6168,9 +6009,7 @@ L_088E65CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6600; } @@ -6183,7 +6022,6 @@ L_088E65E4: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088E660C; } @@ -6199,7 +6037,6 @@ L_088E660C: aot_gpr_5 = (aot_gpr_5 + static_cast(-7)); aot_gpr_6 = (aot_gpr_5 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088E673C; } @@ -6240,7 +6077,6 @@ L_088E663C: } L_088E6644: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_088E66D8; } @@ -6260,7 +6096,6 @@ L_088E665C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(48)))))); aot_gpr_6 = (0u | 216u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E66D0; } @@ -6306,7 +6141,6 @@ L_088E66BC: AOT_REGCACHE_SYNC_OUT(); return; L_088E66D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E673C; } @@ -6352,7 +6186,6 @@ L_088E673C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6760; } @@ -6363,7 +6196,6 @@ L_088E674C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6764; } @@ -6375,7 +6207,6 @@ L_088E6760: L_088E6764: ctx.gpr[19] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E6790; } @@ -6386,9 +6217,7 @@ L_088E6770: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6790; } @@ -6400,7 +6229,6 @@ L_088E678C: L_088E6790: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(64))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_088E693C; } @@ -6410,7 +6238,6 @@ L_088E679C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E693C; } @@ -6421,9 +6248,7 @@ L_088E67AC: aot_gpr_4 = (16256u << 16u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E693C; } @@ -6434,9 +6259,7 @@ L_088E67C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E693C; } @@ -6446,7 +6269,6 @@ L_088E67E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E693C; } @@ -6544,9 +6366,7 @@ L_088E6844: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E68EC; } @@ -6592,7 +6412,6 @@ L_088E693C: AOT_REGCACHE_SYNC_OUT(); return; L_088E6944: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E6A4C; } @@ -6608,7 +6427,6 @@ L_088E694C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E69C4; } @@ -6624,7 +6442,6 @@ L_088E6974: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E69C4; } @@ -6640,7 +6457,6 @@ L_088E699C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E6A4C; } @@ -6651,9 +6467,7 @@ L_088E69C4: aot_gpr_4 = (17092u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E69F0; } @@ -6669,7 +6483,6 @@ L_088E69F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6A4C; } @@ -6678,9 +6491,7 @@ L_088E69F0: L_088E6A00: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6A4C; } @@ -6689,9 +6500,7 @@ L_088E6A00: L_088E6A14: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6A4C; } @@ -6716,7 +6525,6 @@ L_088E6A4C: AOT_REGCACHE_SYNC_OUT(); return; L_088E6A54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E6A94; } @@ -6734,7 +6542,6 @@ L_088E6A64: AOT_REGCACHE_SYNC_OUT(); return; L_088E6A6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E6A94; } @@ -6742,7 +6549,6 @@ L_088E6A6C: } L_088E6A74: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088E6A94; } @@ -6752,9 +6558,7 @@ L_088E6A7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(92))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E6AB0; } @@ -6763,7 +6567,6 @@ L_088E6A7C: L_088E6A94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (0u + static_cast(-5)); if (branch_taken) { @@ -6790,7 +6593,6 @@ L_088E6AB0: AOT_REGCACHE_SYNC_OUT(); return; L_088E6AC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -6799,7 +6601,6 @@ L_088E6AC8: L_088E6AD0: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E7240; } @@ -6809,7 +6610,6 @@ L_088E6ADC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E7240; } @@ -6825,7 +6625,6 @@ L_088E6AEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[17] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E6D54; } @@ -6837,7 +6636,6 @@ L_088E6B14: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6D54; } @@ -6846,7 +6644,6 @@ L_088E6B14: L_088E6B2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(228))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6D54; } @@ -6874,7 +6671,6 @@ L_088E6B68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6C04; } @@ -6886,7 +6682,6 @@ L_088E6B78: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6C04; } @@ -6902,7 +6697,6 @@ L_088E6B90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E6BC0; } @@ -6973,7 +6767,6 @@ L_088E6C40: goto L_088E6C44; L_088E6C44: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E6C60; } @@ -7007,7 +6800,6 @@ L_088E6C70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_mem.aot_direct_store32(aot_gpr_18 + static_cast(1748), aot_gpr_4); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E6D10; } @@ -7041,7 +6833,6 @@ L_088E6CBC: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_088E6CFC; @@ -7085,7 +6876,6 @@ L_088E6D10: AOT_REGCACHE_SYNC_OUT(); return; L_088E6D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -7099,9 +6889,7 @@ L_088E6D54: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E70BC; } @@ -7120,7 +6908,6 @@ L_088E6D8C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E70BC; } @@ -7137,7 +6924,6 @@ L_088E6DA4: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E6DEC; } @@ -7153,7 +6939,6 @@ L_088E6DC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E70BC; } @@ -7162,7 +6947,6 @@ L_088E6DC4: L_088E6DEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6FBC; } @@ -7184,7 +6968,6 @@ L_088E6E10: aot_gpr_4 = (aot_gpr_2 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E6E8C; } @@ -7202,7 +6985,6 @@ L_088E6E24: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E6FBC; } @@ -7210,7 +6992,6 @@ L_088E6E24: } L_088E6E48: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E6FBC; } @@ -7220,7 +7001,6 @@ L_088E6E50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6FBC; } @@ -7229,7 +7009,6 @@ L_088E6E50: L_088E6E60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(1328))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6FBC; } @@ -7243,7 +7022,6 @@ L_088E6E6C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6FBC; } @@ -7278,7 +7056,6 @@ L_088E6EB0: goto L_088E6ED0; L_088E6ED0: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088E6EF4; } @@ -7294,7 +7071,6 @@ L_088E6ED8: AOT_REGCACHE_SYNC_OUT(); return; L_088E6EEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E6FA4; } @@ -7324,7 +7100,6 @@ L_088E6F14: goto L_088E6F2C; L_088E6F2C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E6F8C; } @@ -7391,7 +7166,6 @@ L_088E6FA4: AOT_REGCACHE_SYNC_OUT(); return; L_088E6FB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E70B4; } @@ -7403,7 +7177,6 @@ L_088E6FBC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7078; } @@ -7427,7 +7200,6 @@ L_088E6FD4: goto L_088E7004; L_088E7004: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_088E7028; } @@ -7481,7 +7253,6 @@ L_088E7060: AOT_REGCACHE_SYNC_OUT(); return; L_088E7070: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E70B4; } @@ -7496,7 +7267,6 @@ L_088E7078: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E70B4; } @@ -7515,7 +7285,6 @@ L_088E70A8: goto L_088E70B4; L_088E70B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7240; } @@ -7528,7 +7297,6 @@ L_088E70BC: AOT_REGCACHE_SYNC_OUT(); return; L_088E70C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E7184; } @@ -7539,7 +7307,6 @@ L_088E70CC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7184; } @@ -7549,7 +7316,6 @@ L_088E70E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7184; } @@ -7564,7 +7330,6 @@ L_088E70F0: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088E7184; } @@ -7607,7 +7372,6 @@ L_088E715C: AOT_REGCACHE_SYNC_OUT(); return; L_088E717C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7240; } @@ -7623,9 +7387,7 @@ L_088E718C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E71E4; } @@ -7659,7 +7421,6 @@ L_088E71E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E7240; } @@ -7669,7 +7430,6 @@ L_088E720C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7240; } @@ -7689,9 +7449,7 @@ L_088E721C: L_088E7240: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E7258; } @@ -7708,7 +7466,6 @@ L_088E7258: aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_18 + static_cast(456), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -7717,7 +7474,6 @@ L_088E7258: L_088E7278: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(232))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -7725,7 +7481,6 @@ L_088E7278: } L_088E7284: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088E72A4; } @@ -7735,7 +7490,6 @@ L_088E728C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E72B8; } @@ -7743,7 +7497,6 @@ L_088E728C: } L_088E729C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E72D8; } @@ -7757,7 +7510,6 @@ L_088E72A4: AOT_REGCACHE_SYNC_OUT(); return; L_088E72B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -7770,7 +7522,6 @@ L_088E72B8: AOT_REGCACHE_SYNC_OUT(); return; L_088E72C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E72D8; } @@ -7780,7 +7531,6 @@ L_088E72C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_18 + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E72FC; } @@ -7801,7 +7551,6 @@ L_088E72D8: } L_088E72F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7370; } @@ -7809,7 +7558,6 @@ L_088E72F4: } L_088E72FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -7819,7 +7567,6 @@ L_088E7304: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7370; } @@ -7873,7 +7620,6 @@ L_088E7370: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E73E0; } @@ -7881,14 +7627,12 @@ L_088E7370: } L_088E7388: aot_gpr_31 = (0x088E7390u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E7390u) goto L_088E7390; AOT_REGCACHE_SYNC_OUT(); return; L_088E7390: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E73E0; } @@ -7926,7 +7670,6 @@ L_088E73D8: L_088E73E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E74A0; } @@ -7935,7 +7678,6 @@ L_088E73E0: L_088E73EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E74A0; } @@ -7976,7 +7718,6 @@ L_088E7430: L_088E7438: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E74A0; } @@ -8028,7 +7769,6 @@ L_088E74A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(1360))); ctx.gpr[16] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E750C; } @@ -8083,7 +7823,6 @@ L_088E750C: AOT_REGCACHE_SYNC_OUT(); return; L_088E7514: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E75E4; } @@ -8092,7 +7831,6 @@ L_088E7514: L_088E751C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088E75E4; } @@ -8122,7 +7860,6 @@ L_088E755C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23236))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23240))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E7584; } @@ -8130,7 +7867,6 @@ L_088E755C: } L_088E757C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088E75E4; } @@ -8144,7 +7880,6 @@ L_088E7584: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E75C4; } @@ -8225,9 +7960,7 @@ L_088E7638: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E766C; } @@ -8246,7 +7979,6 @@ L_088E766C: AOT_REGCACHE_SYNC_OUT(); return; L_088E7674: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E7694; } @@ -8283,7 +8015,17 @@ L_088E7694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E76D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-288)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -8304,7 +8046,6 @@ L_088E76D4: L_088E7728: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E7754; } @@ -8317,7 +8058,6 @@ L_088E7734: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7754; } @@ -8332,7 +8072,6 @@ L_088E7754: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E77D8; } @@ -8341,7 +8080,6 @@ L_088E7754: L_088E776C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E77C4; } @@ -8352,7 +8090,6 @@ L_088E7778: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E77BC; } @@ -8362,7 +8099,6 @@ L_088E778C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2236))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E77B4; } @@ -8378,7 +8114,6 @@ L_088E779C: goto L_088E77AC; L_088E77AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E77EC; } @@ -8386,7 +8121,6 @@ L_088E77AC: } L_088E77B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8394,7 +8128,6 @@ L_088E77B4: } L_088E77BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8408,7 +8141,6 @@ L_088E77C4: AOT_REGCACHE_SYNC_OUT(); return; L_088E77D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8416,7 +8148,6 @@ L_088E77D0: } L_088E77D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8425,7 +8156,6 @@ L_088E77D8: L_088E77E0: aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7804; } @@ -8449,7 +8179,6 @@ L_088E77FC: } L_088E7804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8466,7 +8195,6 @@ L_088E7818: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E78D8; } @@ -8491,7 +8219,6 @@ L_088E7840: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E78E8; } @@ -8515,7 +8242,6 @@ L_088E7870: AOT_REGCACHE_SYNC_OUT(); return; L_088E7878: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E78E8; } @@ -8553,7 +8279,6 @@ L_088E78B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E78E8; } @@ -8561,7 +8286,6 @@ L_088E78B0: } L_088E78D8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088E78F0; } @@ -8569,7 +8293,6 @@ L_088E78D8: } L_088E78E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7978; } @@ -8577,7 +8300,6 @@ L_088E78E0: } L_088E78E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8641,9 +8363,7 @@ L_088E78F0: aot_gpr_6 = (aot_gpr_6 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E7978; } @@ -8657,9 +8377,7 @@ L_088E7948: aot_gpr_4 = (16448u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E7978; } @@ -8667,7 +8385,6 @@ L_088E7948: } L_088E7970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8703,7 +8420,6 @@ L_088E79B0: AOT_REGCACHE_SYNC_OUT(); return; L_088E79BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E7A10; } @@ -8717,7 +8433,6 @@ L_088E79C8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7A68; } @@ -8743,7 +8458,6 @@ L_088E79FC: AOT_REGCACHE_SYNC_OUT(); return; L_088E7A08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E7A68; } @@ -8756,7 +8470,6 @@ L_088E7A10: AOT_REGCACHE_SYNC_OUT(); return; L_088E7A18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E7A50; } @@ -8766,7 +8479,6 @@ L_088E7A20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E7A50; } @@ -8776,7 +8488,6 @@ L_088E7A30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E7A50; } @@ -8800,7 +8511,6 @@ L_088E7A50: goto L_088E7A60; L_088E7A60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8815,7 +8525,6 @@ L_088E7A68: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7AD0; } @@ -8831,7 +8540,6 @@ L_088E7A8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[21] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088E7AD0; } @@ -8844,7 +8552,6 @@ L_088E7AB4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7C30; } @@ -8857,7 +8564,6 @@ L_088E7AD0: AOT_REGCACHE_SYNC_OUT(); return; L_088E7AD8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E7B54; } @@ -8866,7 +8572,6 @@ L_088E7AD8: L_088E7AE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088E7B38; } @@ -8875,7 +8580,6 @@ L_088E7AE0: L_088E7AEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7B38; } @@ -8885,7 +8589,6 @@ L_088E7AF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E7B38; } @@ -8896,7 +8599,6 @@ L_088E7B08: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E7B38; } @@ -8909,7 +8611,6 @@ L_088E7B1C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E7B54; } @@ -8917,7 +8618,6 @@ L_088E7B1C: } L_088E7B38: aot_gpr_31 = (0x088E7B40u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E7B40u) goto L_088E7B40; AOT_REGCACHE_SYNC_OUT(); return; L_088E7B40: @@ -8928,7 +8628,6 @@ L_088E7B40: AOT_REGCACHE_SYNC_OUT(); return; L_088E7B4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7C28; } @@ -8941,7 +8640,6 @@ L_088E7B54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7C28; } @@ -9000,9 +8698,7 @@ L_088E7BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E7C18; } @@ -9023,7 +8719,6 @@ L_088E7C18: AOT_REGCACHE_SYNC_OUT(); return; L_088E7C28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9036,7 +8731,6 @@ L_088E7C30: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7D68; } @@ -9058,9 +8752,7 @@ L_088E7C5C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E7CA8; } @@ -9072,7 +8764,6 @@ L_088E7C78: L_088E7C7C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E7CA8; } @@ -9082,7 +8773,6 @@ L_088E7C88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E7CA8; } @@ -9092,7 +8782,6 @@ L_088E7C98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E7D68; } @@ -9102,7 +8791,6 @@ L_088E7CA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E7D60; } @@ -9151,9 +8839,7 @@ L_088E7D18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E7D50; } @@ -9174,7 +8860,6 @@ L_088E7D50: AOT_REGCACHE_SYNC_OUT(); return; L_088E7D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9192,7 +8877,6 @@ L_088E7D74: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7FB4; } @@ -9201,7 +8885,6 @@ L_088E7D74: L_088E7D8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7FB4; } @@ -9367,7 +9050,6 @@ L_088E7E4C: AOT_REGCACHE_SYNC_OUT(); return; L_088E7E84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E7F14; } @@ -9391,7 +9073,6 @@ L_088E7E8C: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E7F14; } @@ -9404,7 +9085,6 @@ L_088E7ED4: AOT_REGCACHE_SYNC_OUT(); return; L_088E7EDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E7F0C; } @@ -9427,7 +9107,6 @@ L_088E7F04: goto L_088E7F0C; L_088E7F0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 154u, 0x088E89A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9436,7 +9115,6 @@ L_088E7F0C: L_088E7F14: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1716), ctx.gpr[17]); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E7F2C; } @@ -9451,7 +9129,6 @@ L_088E7F20: L_088E7F2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7F4C; } @@ -9465,7 +9142,6 @@ L_088E7F38: AOT_REGCACHE_SYNC_OUT(); return; L_088E7F44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7FB4; } @@ -9477,7 +9153,6 @@ L_088E7F4C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E7F78; } @@ -9491,7 +9166,6 @@ L_088E7F64: AOT_REGCACHE_SYNC_OUT(); return; L_088E7F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E7FB4; } @@ -9499,7 +9173,6 @@ L_088E7F70: } L_088E7F78: aot_gpr_31 = (0x088E7F80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E7F80u) goto L_088E7F80; AOT_REGCACHE_SYNC_OUT(); return; L_088E7F80: @@ -9518,7 +9191,6 @@ L_088E7F88: AOT_REGCACHE_SYNC_OUT(); return; L_088E7F94: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E7FB4; } @@ -9542,7 +9214,6 @@ L_088E7FB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 10u, 0x088E80A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9552,7 +9223,6 @@ L_088E7FC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 10u, 0x088E80A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9565,7 +9235,6 @@ L_088E7FD4: AOT_REGCACHE_SYNC_OUT(); return; L_088E7FDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 5u, 0x088E807Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9573,12 +9242,10 @@ L_088E7FDC: } L_088E7FE4: aot_gpr_31 = (0x088E7FECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E7FECu) goto L_088E7FEC; AOT_REGCACHE_SYNC_OUT(); return; L_088E7FEC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0057_entry, 57u, 5u, 0x088E807Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9586,7 +9253,6 @@ L_088E7FEC: } L_088E7FF4: aot_gpr_31 = (0x088E7FFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E7FFCu) goto L_088E7FFC; AOT_REGCACHE_SYNC_OUT(); return; L_088E7FFC: diff --git a/profiles/vcs/generated/generated_unit_0057.cpp b/profiles/vcs/generated/generated_unit_0057.cpp index cbf97a5..05d0438 100644 --- a/profiles/vcs/generated/generated_unit_0057.cpp +++ b/profiles/vcs/generated/generated_unit_0057.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0057[4095] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 20, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 22, 23, 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 30, 0, - 31, 0, 32, 0, 33, 0, 34, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 37, 0, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, - 0, 0, 44, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 61, 0, 0, 62, 0, 63, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, - 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, 0, 0, 70, 0, 0, 71, 0, 72, 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 79, 0, 0, 80, 0, 81, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 88, 0, - 89, 0, 0, 0, 90, 0, 91, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, - 0, 102, 0, 103, 0, 104, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, - 108, 0, 0, 0, 0, 0, 0, 109, 0, 0, 110, 0, 111, 0, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 115, 116, 0, 0, 117, 0, 0, 0, - 0, 0, 118, 0, 0, 0, 119, 0, 120, 0, 0, 121, 0, 0, 122, 0, 123, 0, 124, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 127, 0, 128, - 0, 129, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 132, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 136, 137, 0, 138, 0, 0, 0, 139, 0, 140, 0, 0, 0, 141, 0, 142, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, - 151, 0, 0, 152, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 156, 0, 0, 0, 0, 157, 0, 158, 0, 159, 0, 0, 160, 0, 0, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, 0, 0, 0, 165, 0, 0, - 166, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 171, - 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 176, 0, 177, 0, 0, 0, - 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 181, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, - 0, 189, 0, 190, 0, 0, 191, 0, 192, 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, - 198, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, - 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 208, 0, 0, 0, 209, 0, 210, 0, 0, 0, 0, 0, - 0, 211, 0, 212, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 216, 0, 217, 0, 218, - 0, 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 223, 0, 0, 224, 0, 0, 0, 225, 226, 0, 227, 0, - 0, 0, 228, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, - 233, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 242, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 247, 248, 0, 249, - 0, 0, 0, 250, 251, 0, 252, 0, 0, 0, 253, 254, 0, 255, 0, 0, 0, 256, 0, 0, 0, 257, 0, 258, 0, 0, 0, 259, 0, 0, 0, 0, - 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 265, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, - 0, 0, 0, 0, 273, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 277, 0, 278, 0, 0, - 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 0, 291, 0, 0, 292, - 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, - 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, - 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 317, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, - 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, - 0, 333, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 0, 0, 336, 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, - 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, - 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 358, - 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 362, 363, 0, 0, 364, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 0, - 0, 0, 0, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, - 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, - 0, 0, 0, 0, 378, 0, 0, 379, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, - 386, 0, 0, 0, 387, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 394, 0, - 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 399, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, - 0, 0, 0, 402, 0, 0, 0, 403, 0, 404, 0, 405, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, 0, 0, 409, - 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, - 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 415, 0, 0, 0, 416, 0, 0, 417, 418, 0, 0, 0, 419, 0, 0, 0, 0, 0, 420, 0, 0, 0, - 0, 0, 421, 0, 0, 422, 423, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 426, 427, 0, 428, 0, 0, 429, 0, 0, 430, 0, - 431, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, - 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, - 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, - 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 457, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 461, 0, 462, 0, 0, 463, 0, 0, 464, 0, 465, 466, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 471, 0, 0, 472, 473, 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 478, 0, 479, 0, 0, 480, 0, - 481, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, - 488, 0, 489, 0, 490, 0, 0, 491, 0, 0, 492, 0, 493, 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 497, 498, 0, 0, 0, 0, - 0, 499, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 507, 0, 508, 0, 0, 509, 0, 0, 0, 0, 0, 510, - 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 0, - 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 518, 0, 519, 0, 0, - 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 524, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 528, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 530, 531, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 535, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, - 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, - 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, - 0, 550, 0, 0, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 556, 0, - 0, 0, 557, 558, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, - 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 567, - 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 571, 0, 0, 572, 0, 0, 573, 0, 0, 0, 574, 0, - 0, 575, 0, 0, 0, 576, 0, 577, 0, 0, 578, 579, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 583, 0, 584, 0, 0, 585, 0, 0, 0, 0, 0, 586, 0, 0, - 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, - 0, 602, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, - 0, 0, 0, 610, 0, 0, 611, 0, 0, 0, 612, 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 617, 0, 618, 0, 0, 0, - 619, 0, 620, 0, 621, 622, 0, 0, 623, 0, 0, 0, 624, 0, 625, 0, 626, 0, 627, 628, 0, 0, 629, 0, 0, 630, 0, 631, 0, 632, 0, 633, - 0, 634, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 637, 0, 638, 0, 0, 639, 0, 0, - 0, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 645, 0, - 0, 0, 0, 646, 0, 0, 0, 647, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 0, 0, 651, 0, 652, 653, 0, 0, 654, 655, 0, - 656, 0, 0, 0, 0, 0, 657, 658, 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 661, 0, 662, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, - 664, 0, 0, 0, 0, 0, 665, 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, - 0, 0, 0, 0, 0, 670, 0, 671, 0, 672, 0, 673, 0, 674, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 678, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 0, 682, 0, 683, 0, 0, - 0, 0, 684, 685, 0, 686, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 693, 0, 0, 0, 694, 0, 0, 695, 0, 696, 0, 697, 0, 698, 0, 0, 699, 0, 0, 0, 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, - 705, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 0, 0, - 713, 0, 714, 0, 715, 0, 716, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 719, 0, 720, 0, 721, 0, 722, 0, - 723, 0, 724, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 727, 0, 0, 728, 0, 729, 0, 730, 0, 0, 0, 731, 0, 0, 0, 732, - 0, 0, 733, 0, 734, 0, 735, 0, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 738, 0, 739, 0, 740, 0, 741, 0, 0, 0, 742, 0, 743, 0, - 0, 0, 0, 744, 0, 745, 0, 746, 0, 747, 0, 748, 0, 749, 0, 750, 0, 751, 0, 752, 0, 753, 0, 754, 0, 0, 0, 0, 755, 0, 756, 0, - 0, 757, 0, 0, 758, 0, 759, 0, 760, 0, 0, 761, 0, 762, 0, 763, 0, 764, 0, 0, 765, 0, 0, 766, 0, 767, 0, 0, 768, 0, 769, 0, - 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, - 774, 0, 0, 0, 0, 0, 0, 775, 0, 776, 0, 777, 0, 778, 0, 779, 0, 780, 0, 781, 0, 782, 0, 783, 0, 784, 0, 0, 0, 0, 785, 0, - 0, 0, 0, 786, 0, 787, 0, 0, 788, 0, 0, 0, 789, 0, 790, 791, 0, 0, 0, 792, 0, 0, 0, 793, 0, 0, 794, 0, 0, 795, 0, 0, - 0, 796, 0, 0, 0, 0, 0, 0, 0, 797, 0, 798, 799, 0, 0, 800, 0, 801, 0, 0, 0, 0, 802, 0, 803, 804, 805, 0, 806, 0, 0, 807, - 0, 0, 0, 0, 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, 810, 0, 811, 0, 812, 0, 0, 0, 0, 813, 0, 814, 0, 0, 815, 0, 0, 816, - 0, 817, 818, 0, 0, 0, 819, 0, 820, 0, 0, 821, 0, 822, 0, 823, 0, 0, 824, 0, 825, 0, 826, 0, 827, 0, 0, 828, 0, 0, 829, 830, - 0, 831, 0, 0, 0, 0, 832, 0, 0, 0, 833, 0, 834, 0, 835, 0, 0, 0, 0, 836, 0, 837, 0, 0, 838, 0, 0, 839, 0, 840, 841, 0, - 0, 0, 842, 0, 843, 0, 0, 844, 0, 845, 0, 846, 0, 0, 847, 0, 848, 0, 849, 0, 850, 0, 0, 851, 0, 0, 852, 853, 0, 854, 0, 0, - 0, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 0, 860, 861, 0, 862, 0, 863, 0, 0, 864, 0, 865, 0, 866, 0, 867, 0, 868, 0, 869, - 0, 0, 870, 0, 871, 0, 0, 872, 0, 873, 0, 874, 0, 875, 0, 0, 876, 0, 0, 877, 0, 878, 0, 879, 0, 0, 880, 0, 881, 0, 882, 0, - 0, 883, 0, 0, 884, 0, 0, 885, 886, 0, 0, 887, 0, 0, 888, 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, 890, 0, 0, 0, 891, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0057[64] = { + 0x401542AA80200809ull, 0x44444443004A4104ull, 0x0A2240A4AAA45055ull, 0x101A488081112402ull, + 0x2948010402549441ull, 0x0820245150412810ull, 0x4040022A02810228ull, 0xA225494413491481ull, + 0x028A28B004015052ull, 0x0020042940520041ull, 0x8900080920AA2542ull, 0x0241481114804500ull, + 0x0422294A04900010ull, 0x0515000428201221ull, 0x58912210AA40010Aull, 0x0040A04540010A04ull, + 0x08A22C58B1221524ull, 0x2811011500042814ull, 0x010A05022A000850ull, 0xA000850291205240ull, + 0x489140010A050200ull, 0x1002800080550140ull, 0x0008208000040804ull, 0x00148A022002A021ull, + 0x0088844420400000ull, 0x904024020A010490ull, 0x0809024048931102ull, 0x1111129048120004ull, + 0x5209000001000111ull, 0x88820A88808A4120ull, 0x104645208000000Aull, 0x0000080549620264ull, + 0x2008040802000040ull, 0x4000000000208882ull, 0x000A000248000512ull, 0x1A4B110041000800ull, + 0x0010204000000400ull, 0x480104154AA01059ull, 0x004104120D105495ull, 0x0140101082550040ull, + 0x0041044028410002ull, 0x54A9010600942021ull, 0x08208020900A0810ull, 0x2082020C41410442ull, + 0x4490482081020808ull, 0x2094040000820CA2ull, 0x0001010000041040ull, 0x0000000000004000ull, + 0xAAA2000020004000ull, 0x14A02C48802A4482ull, 0x25020012AA4D5135ull, 0x6689028844880208ull, + 0x20011141081444C1ull, 0x285080A020012AA0ull, 0x000000002009542Cull, 0x1552002155425522ull, + 0x88A9400D55402055ull, 0x50AAAAA851550454ull, 0x008021025292A952ull, 0x2488D12842AAAA81ull, + 0x9285442097429A02ull, 0x69285442C954A946ull, 0xAAA565542C954A94ull, 0x4410499254A92A94ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0057[64] = { + 1u, 16u, 31u, 52u, 66u, 82u, 96u, 108u, 129u, 145u, 156u, 172u, 185u, 198u, 211u, 228u, + 239u, 260u, 273u, 285u, 299u, 311u, 321u, 327u, 339u, 347u, 359u, 373u, 386u, 395u, 410u, 421u, + 434u, 440u, 446u, 455u, 467u, 471u, 488u, 504u, 515u, 524u, 540u, 550u, 563u, 575u, 587u, 592u, + 593u, 602u, 619u, 640u, 656u, 670u, 684u, 693u, 713u, 733u, 757u, 774u, 796u, 817u, 842u, 870u, }; void recomp_unit_0057_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0057_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088E8000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0057[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0057[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0057[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088E8000; @@ -1065,7 +972,6 @@ LOCAL_DISPATCH: L_088E8000: aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E807C; } @@ -1079,7 +985,6 @@ L_088E800C: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E807C; } @@ -1095,7 +1000,6 @@ L_088E802C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E80A4; } @@ -1111,7 +1015,6 @@ L_088E8054: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E80A4; } @@ -1124,7 +1027,6 @@ L_088E807C: AOT_REGCACHE_SYNC_OUT(); return; L_088E8084: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E80B8; } @@ -1142,7 +1044,6 @@ L_088E8094: AOT_REGCACHE_SYNC_OUT(); return; L_088E809C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E814C; } @@ -1153,7 +1054,6 @@ L_088E80A4: aot_gpr_4 = (aot_gpr_4 | 4u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E89A8; } @@ -1161,7 +1061,6 @@ L_088E80A4: } L_088E80B8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088E814C; } @@ -1174,7 +1073,6 @@ L_088E80C0: AOT_REGCACHE_SYNC_OUT(); return; L_088E80C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E814C; } @@ -1190,7 +1088,6 @@ L_088E80D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E8120; } @@ -1200,7 +1097,6 @@ L_088E80F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E8120; } @@ -1232,7 +1128,6 @@ L_088E8138: AOT_REGCACHE_SYNC_OUT(); return; L_088E8144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E89A8; } @@ -1257,7 +1152,6 @@ L_088E8158: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E829C; } @@ -1271,7 +1165,6 @@ L_088E8184: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 34u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E829C; } @@ -1281,7 +1174,6 @@ L_088E8198: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 42u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E829C; } @@ -1291,7 +1183,6 @@ L_088E81A8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 7u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E829C; } @@ -1301,7 +1192,6 @@ L_088E81B8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E829C; } @@ -1311,7 +1201,6 @@ L_088E81C8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 46u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E829C; } @@ -1321,7 +1210,6 @@ L_088E81D8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 47u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E829C; } @@ -1331,7 +1219,6 @@ L_088E81E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E829C; } @@ -1344,7 +1231,6 @@ L_088E81F8: AOT_REGCACHE_SYNC_OUT(); return; L_088E8200: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E8230; } @@ -1357,7 +1243,6 @@ L_088E8208: AOT_REGCACHE_SYNC_OUT(); return; L_088E8210: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E829C; } @@ -1369,7 +1254,6 @@ L_088E8218: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E829C; } @@ -1390,7 +1274,6 @@ L_088E8238: L_088E8248: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088E829C; } @@ -1403,7 +1286,6 @@ L_088E8254: AOT_REGCACHE_SYNC_OUT(); return; L_088E825C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088E8288; } @@ -1411,7 +1293,6 @@ L_088E825C: } L_088E8264: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088E8294; } @@ -1424,7 +1305,6 @@ L_088E826C: AOT_REGCACHE_SYNC_OUT(); return; L_088E8274: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E8288; } @@ -1433,7 +1313,6 @@ L_088E8274: L_088E827C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8294; } @@ -1447,7 +1326,6 @@ L_088E8288: AOT_REGCACHE_SYNC_OUT(); return; L_088E8294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E89A8; } @@ -1476,7 +1354,6 @@ L_088E82C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E82EC; } @@ -1486,7 +1363,6 @@ L_088E82D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E82EC; } @@ -1538,7 +1414,6 @@ L_088E8340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E84E0; } @@ -1548,7 +1423,6 @@ L_088E8350: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E84E0; } @@ -1561,7 +1435,6 @@ L_088E8360: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E84E0; } @@ -1589,7 +1462,6 @@ L_088E839C: L_088E83AC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088E8464; } @@ -1604,7 +1476,6 @@ L_088E83B8: goto L_088E83C4; L_088E83C4: aot_gpr_31 = (0x088E83CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E83CCu) goto L_088E83CC; AOT_REGCACHE_SYNC_OUT(); return; L_088E83CC: @@ -1687,7 +1558,6 @@ L_088E8448: } L_088E8450: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8464; } @@ -1730,9 +1600,7 @@ L_088E84A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E898C; } @@ -1746,7 +1614,6 @@ L_088E84CC: AOT_REGCACHE_SYNC_OUT(); return; L_088E84D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E898C; } @@ -1755,7 +1622,6 @@ L_088E84D8: L_088E84E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E84F4; } @@ -1772,7 +1638,6 @@ L_088E84F4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8534; } @@ -1791,7 +1656,6 @@ L_088E8510: goto L_088E852C; L_088E852C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8684; } @@ -1800,7 +1664,6 @@ L_088E852C: L_088E8534: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8614; } @@ -1843,7 +1706,6 @@ L_088E8580: aot_gpr_4 = (aot_gpr_2 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E85D4; } @@ -1851,7 +1713,6 @@ L_088E8580: } L_088E8590: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8614; } @@ -1861,7 +1722,6 @@ L_088E8598: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8614; } @@ -1870,7 +1730,6 @@ L_088E8598: L_088E85A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1328))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8614; } @@ -1884,7 +1743,6 @@ L_088E85B4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8614; } @@ -1916,7 +1774,6 @@ L_088E85EC: goto L_088E860C; L_088E860C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8684; } @@ -1926,7 +1783,6 @@ L_088E8614: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E8664; } @@ -1939,7 +1795,6 @@ L_088E8624: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088E8664; } @@ -1958,7 +1813,6 @@ L_088E8640: goto L_088E865C; L_088E865C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8684; } @@ -1983,7 +1837,6 @@ L_088E8684: AOT_REGCACHE_SYNC_OUT(); return; L_088E868C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E8730; } @@ -1993,7 +1846,6 @@ L_088E8694: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E8730; } @@ -2023,7 +1875,6 @@ L_088E86D8: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23236))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23240))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E8700; } @@ -2031,7 +1882,6 @@ L_088E86D8: } L_088E86F8: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088E8730; } @@ -2044,7 +1894,6 @@ L_088E8700: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088E8728; } @@ -2073,7 +1922,6 @@ L_088E8730: L_088E8740: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E87D4; } @@ -2088,7 +1936,6 @@ L_088E874C: goto L_088E8758; L_088E8758: aot_gpr_31 = (0x088E8760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8760u) goto L_088E8760; AOT_REGCACHE_SYNC_OUT(); return; L_088E8760: @@ -2158,7 +2005,6 @@ L_088E87B8: } L_088E87C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E87D4; } @@ -2174,7 +2020,6 @@ L_088E87D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E898C; } @@ -2184,7 +2029,6 @@ L_088E87E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E898C; } @@ -2197,7 +2041,6 @@ L_088E87F4: AOT_REGCACHE_SYNC_OUT(); return; L_088E87FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E898C; } @@ -2211,7 +2054,6 @@ L_088E8804: AOT_REGCACHE_SYNC_OUT(); return; L_088E8810: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088E8894; } @@ -2239,7 +2081,6 @@ L_088E8830: } L_088E8838: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088E8894; } @@ -2255,7 +2096,6 @@ L_088E8840: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 26u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E8890; } @@ -2271,7 +2111,6 @@ L_088E8868: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E8894; } @@ -2282,7 +2121,6 @@ L_088E8890: goto L_088E8894; L_088E8894: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088E8900; } @@ -2297,7 +2135,6 @@ L_088E889C: AOT_REGCACHE_SYNC_OUT(); return; L_088E88AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E8900; } @@ -2312,7 +2149,6 @@ L_088E88B4: AOT_REGCACHE_SYNC_OUT(); return; L_088E88C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E8900; } @@ -2327,7 +2163,6 @@ L_088E88CC: AOT_REGCACHE_SYNC_OUT(); return; L_088E88DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E8900; } @@ -2361,9 +2196,7 @@ L_088E8918: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E8950; } @@ -2377,7 +2210,6 @@ L_088E8944: AOT_REGCACHE_SYNC_OUT(); return; L_088E8950: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088E898C; } @@ -2389,9 +2221,7 @@ L_088E8958: aot_gpr_4 = (aot_gpr_4 | 3712u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E898C; } @@ -2409,7 +2239,6 @@ L_088E8980: goto L_088E898C; L_088E898C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088E89A8; } @@ -2441,7 +2270,17 @@ L_088E89A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E89D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-112)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2460,7 +2299,6 @@ L_088E8A04: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8A28; } @@ -2468,7 +2306,6 @@ L_088E8A04: } L_088E8A18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8A80; } @@ -2476,7 +2313,6 @@ L_088E8A18: } L_088E8A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -2485,7 +2321,6 @@ L_088E8A20: L_088E8A28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1740))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8A4C; } @@ -2495,7 +2330,6 @@ L_088E8A34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(688))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8A5C; } @@ -2503,7 +2337,6 @@ L_088E8A34: } L_088E8A44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8A74; } @@ -2516,7 +2349,6 @@ L_088E8A4C: AOT_REGCACHE_SYNC_OUT(); return; L_088E8A54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -2534,7 +2366,6 @@ L_088E8A5C: L_088E8A74: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1740), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -2568,9 +2399,7 @@ L_088E8AAC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2060))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E8CB4; } @@ -2609,7 +2438,6 @@ L_088E8B28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(688))); aot_gpr_4 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8B70; } @@ -2622,9 +2450,7 @@ L_088E8B38: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E8B70; } @@ -2638,7 +2464,6 @@ L_088E8B5C: AOT_REGCACHE_SYNC_OUT(); return; L_088E8B68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8CAC; } @@ -2648,7 +2473,6 @@ L_088E8B70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(688))); aot_gpr_4 = (static_cast(aot_gpr_4) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8CA0; } @@ -2658,7 +2482,6 @@ L_088E8B80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(688))); aot_gpr_4 = (static_cast(aot_gpr_4) < 22 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8CA0; } @@ -2669,9 +2492,7 @@ L_088E8B90: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E8BC0; } @@ -2685,7 +2506,6 @@ L_088E8BAC: AOT_REGCACHE_SYNC_OUT(); return; L_088E8BB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8CAC; } @@ -2697,7 +2517,6 @@ L_088E8BC0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8C84; } @@ -2737,9 +2556,7 @@ L_088E8C10: aot_gpr_4 = (aot_gpr_4 | 55051u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E8C68; } @@ -2754,7 +2571,6 @@ L_088E8C50: L_088E8C5C: ctx.gpr[18] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8C84; } @@ -2767,7 +2583,6 @@ L_088E8C68: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8BD8; } @@ -2775,7 +2590,6 @@ L_088E8C68: } L_088E8C84: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088E8C98; } @@ -2789,7 +2603,6 @@ L_088E8C8C: AOT_REGCACHE_SYNC_OUT(); return; L_088E8C98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8CAC; } @@ -2803,7 +2616,6 @@ L_088E8CA0: AOT_REGCACHE_SYNC_OUT(); return; L_088E8CAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -2840,17 +2652,25 @@ L_088E8CE8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-16296))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E8D00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1736))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8DC0; } @@ -2866,7 +2686,6 @@ L_088E8D14: L_088E8D24: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8DC8; } @@ -2881,7 +2700,6 @@ L_088E8D30: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(692))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8D6C; } @@ -2898,7 +2716,6 @@ L_088E8D54: AOT_REGCACHE_SYNC_OUT(); return; L_088E8D6C: aot_gpr_31 = (0x088E8D74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8D74u) goto L_088E8D74; AOT_REGCACHE_SYNC_OUT(); return; L_088E8D74: @@ -2928,7 +2745,6 @@ L_088E8D88: AOT_REGCACHE_SYNC_OUT(); return; L_088E8DC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -2936,14 +2752,12 @@ L_088E8DC0: } L_088E8DC8: aot_gpr_31 = (0x088E8DD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8DD0u) goto L_088E8DD0; AOT_REGCACHE_SYNC_OUT(); return; L_088E8DD0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8E6C; } @@ -2966,7 +2780,6 @@ L_088E8DE8: AOT_REGCACHE_SYNC_OUT(); return; L_088E8E04: aot_gpr_31 = (0x088E8E0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8E0Cu) goto L_088E8E0C; AOT_REGCACHE_SYNC_OUT(); return; L_088E8E0C: @@ -3002,7 +2815,6 @@ L_088E8E58: AOT_REGCACHE_SYNC_OUT(); return; L_088E8E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E8DC0; } @@ -3015,7 +2827,6 @@ L_088E8E6C: AOT_REGCACHE_SYNC_OUT(); return; L_088E8E74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3026,7 +2837,6 @@ L_088E8E7C: aot_gpr_5 = (512u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9030; } @@ -3037,7 +2847,6 @@ L_088E8E90: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9030; } @@ -3053,7 +2862,6 @@ L_088E8EA4: L_088E8EB4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8EF0; } @@ -3069,7 +2877,6 @@ L_088E8EC0: L_088E8ED0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E8EF0; } @@ -3087,7 +2894,6 @@ L_088E8EEC: goto L_088E8EF0; L_088E8EF0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E8F80; } @@ -3097,7 +2903,6 @@ L_088E8EF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E8F80; } @@ -3115,7 +2920,6 @@ L_088E8F08: AOT_REGCACHE_SYNC_OUT(); return; L_088E8F24: aot_gpr_31 = (0x088E8F2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8F2Cu) goto L_088E8F2C; AOT_REGCACHE_SYNC_OUT(); return; L_088E8F2C: @@ -3145,7 +2949,6 @@ L_088E8F40: AOT_REGCACHE_SYNC_OUT(); return; L_088E8F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9330; } @@ -3153,14 +2956,12 @@ L_088E8F78: } L_088E8F80: aot_gpr_31 = (0x088E8F88u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8F88u) goto L_088E8F88; AOT_REGCACHE_SYNC_OUT(); return; L_088E8F88: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9028; } @@ -3178,7 +2979,6 @@ L_088E8F98: AOT_REGCACHE_SYNC_OUT(); return; L_088E8FB4: aot_gpr_31 = (0x088E8FBCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E8FBCu) goto L_088E8FBC; AOT_REGCACHE_SYNC_OUT(); return; L_088E8FBC: @@ -3209,7 +3009,6 @@ L_088E8FD8: L_088E9008: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1038))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E9330; } @@ -3223,7 +3022,6 @@ L_088E9014: AOT_REGCACHE_SYNC_OUT(); return; L_088E9020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9330; } @@ -3242,7 +3040,6 @@ L_088E9030: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9330; } @@ -3258,7 +3055,6 @@ L_088E9044: L_088E9054: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E9074; } @@ -3276,7 +3072,6 @@ L_088E9070: goto L_088E9074; L_088E9074: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E9090; } @@ -3294,7 +3089,6 @@ L_088E908C: goto L_088E9090; L_088E9090: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E90AC; } @@ -3312,7 +3106,6 @@ L_088E90A8: goto L_088E90AC; L_088E90AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9188; } @@ -3322,7 +3115,6 @@ L_088E90B4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088E90D4; } @@ -3332,7 +3124,6 @@ L_088E90C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 44u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E9188; } @@ -3340,14 +3131,12 @@ L_088E90C4: } L_088E90D4: aot_gpr_31 = (0x088E90DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E90DCu) goto L_088E90DC; AOT_REGCACHE_SYNC_OUT(); return; L_088E90DC: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9110; } @@ -3365,7 +3154,6 @@ L_088E90EC: AOT_REGCACHE_SYNC_OUT(); return; L_088E9108: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E912C; } @@ -3383,7 +3171,6 @@ L_088E9110: AOT_REGCACHE_SYNC_OUT(); return; L_088E912C: aot_gpr_31 = (0x088E9134u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E9134u) goto L_088E9134; AOT_REGCACHE_SYNC_OUT(); return; L_088E9134: @@ -3413,7 +3200,6 @@ L_088E9148: AOT_REGCACHE_SYNC_OUT(); return; L_088E9180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9318; } @@ -3421,7 +3207,6 @@ L_088E9180: } L_088E9188: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E926C; } @@ -3431,7 +3216,6 @@ L_088E9190: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088E926C; } @@ -3445,14 +3229,12 @@ L_088E91A0: aot_gpr_5 = (aot_gpr_5 | 4u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); aot_gpr_31 = (0x088E91C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E91C0u) goto L_088E91C0; AOT_REGCACHE_SYNC_OUT(); return; L_088E91C0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E91F4; } @@ -3470,7 +3252,6 @@ L_088E91D0: AOT_REGCACHE_SYNC_OUT(); return; L_088E91EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9210; } @@ -3488,7 +3269,6 @@ L_088E91F4: AOT_REGCACHE_SYNC_OUT(); return; L_088E9210: aot_gpr_31 = (0x088E9218u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E9218u) goto L_088E9218; AOT_REGCACHE_SYNC_OUT(); return; L_088E9218: @@ -3518,7 +3298,6 @@ L_088E922C: AOT_REGCACHE_SYNC_OUT(); return; L_088E9264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9318; } @@ -3526,14 +3305,12 @@ L_088E9264: } L_088E926C: aot_gpr_31 = (0x088E9274u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E9274u) goto L_088E9274; AOT_REGCACHE_SYNC_OUT(); return; L_088E9274: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E92A8; } @@ -3551,7 +3328,6 @@ L_088E9284: AOT_REGCACHE_SYNC_OUT(); return; L_088E92A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E92C4; } @@ -3569,7 +3345,6 @@ L_088E92A8: AOT_REGCACHE_SYNC_OUT(); return; L_088E92C4: aot_gpr_31 = (0x088E92CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E92CCu) goto L_088E92CC; AOT_REGCACHE_SYNC_OUT(); return; L_088E92CC: @@ -3600,7 +3375,6 @@ L_088E92E0: L_088E9318: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1038))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E9330; } @@ -3614,7 +3388,6 @@ L_088E9324: AOT_REGCACHE_SYNC_OUT(); return; L_088E9330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3627,7 +3400,6 @@ L_088E9338: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3636,7 +3408,6 @@ L_088E9338: L_088E9354: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1736))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9384; } @@ -3652,7 +3423,6 @@ L_088E9360: L_088E9370: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E93FC; } @@ -3660,7 +3430,6 @@ L_088E9370: } L_088E937C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E94C0; } @@ -3678,7 +3447,6 @@ L_088E9384: AOT_REGCACHE_SYNC_OUT(); return; L_088E93A0: aot_gpr_31 = (0x088E93A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E93A8u) goto L_088E93A8; AOT_REGCACHE_SYNC_OUT(); return; L_088E93A8: @@ -3708,7 +3476,6 @@ L_088E93BC: AOT_REGCACHE_SYNC_OUT(); return; L_088E93F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3724,7 +3491,6 @@ L_088E93FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(688))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E9448; } @@ -3742,7 +3508,6 @@ L_088E9424: AOT_REGCACHE_SYNC_OUT(); return; L_088E9440: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9464; } @@ -3760,7 +3525,6 @@ L_088E9448: AOT_REGCACHE_SYNC_OUT(); return; L_088E9464: aot_gpr_31 = (0x088E946Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E946Cu) goto L_088E946C; AOT_REGCACHE_SYNC_OUT(); return; L_088E946C: @@ -3790,7 +3554,6 @@ L_088E9480: AOT_REGCACHE_SYNC_OUT(); return; L_088E94B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3806,7 +3569,6 @@ L_088E94C0: L_088E94D0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E9520; } @@ -3822,7 +3584,6 @@ L_088E94DC: L_088E94EC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9548; } @@ -3841,7 +3602,6 @@ L_088E94F8: AOT_REGCACHE_SYNC_OUT(); return; L_088E9518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3860,7 +3620,6 @@ L_088E9520: AOT_REGCACHE_SYNC_OUT(); return; L_088E9540: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3873,7 +3632,6 @@ L_088E9548: AOT_REGCACHE_SYNC_OUT(); return; L_088E9550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9558; } @@ -3895,19 +3653,27 @@ L_088E9558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088E957C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-832)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(776), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x088E95BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0055_entry, 55u, 412u, 0x088E335Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E95BCu) goto L_088E95BC; AOT_REGCACHE_SYNC_OUT(); return; L_088E95BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E973C; } @@ -4089,7 +3855,6 @@ L_088E9714: } L_088E9734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9B08; } @@ -4121,7 +3886,6 @@ L_088E9774: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E97A4; } @@ -4149,7 +3913,6 @@ L_088E97AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(12))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(48))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E97D0; } @@ -4158,7 +3921,6 @@ L_088E97AC: L_088E97BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(744))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E97D0; } @@ -4166,7 +3928,6 @@ L_088E97BC: } L_088E97C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9AEC; } @@ -4242,9 +4003,7 @@ L_088E97D0: ctx.fpr[14] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E9AEC; } @@ -4257,7 +4016,6 @@ L_088E9858: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E996C; } @@ -4335,7 +4093,6 @@ L_088E9910: L_088E991C: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088E9964; } @@ -4377,7 +4134,6 @@ L_088E996C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(52), aot_gpr_5); aot_gpr_31 = (0x088E9984u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E9984u) goto L_088E9984; AOT_REGCACHE_SYNC_OUT(); return; L_088E9984: @@ -4389,7 +4145,6 @@ L_088E9984: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(56)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E99D8; } @@ -4431,7 +4186,6 @@ L_088E99F0: AOT_REGCACHE_SYNC_OUT(); return; L_088E99FC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E9AEC; } @@ -4460,7 +4214,6 @@ L_088E9A30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(56)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9AEC; } @@ -4508,7 +4261,6 @@ L_088E9A78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(64))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(68))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9ACC; } @@ -4619,7 +4371,6 @@ L_088E9B50: L_088E9B6C: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088E9CF0; } @@ -4644,7 +4395,6 @@ L_088E9B90: AOT_REGCACHE_SYNC_OUT(); return; L_088E9B9C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E9CF0; } @@ -4653,7 +4403,6 @@ L_088E9B9C: L_088E9BA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4663,7 +4412,6 @@ L_088E9BB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4673,7 +4421,6 @@ L_088E9BC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4683,7 +4430,6 @@ L_088E9BD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4693,7 +4439,6 @@ L_088E9BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4703,7 +4448,6 @@ L_088E9BF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4713,7 +4457,6 @@ L_088E9C00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088E9C20; } @@ -4723,7 +4466,6 @@ L_088E9C10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088E9CF0; } @@ -4802,7 +4544,6 @@ L_088E9CE4: AOT_REGCACHE_SYNC_OUT(); return; L_088E9CF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088E9F24; } @@ -4815,7 +4556,6 @@ L_088E9CF8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9F24; } @@ -4824,7 +4564,6 @@ L_088E9CF8: L_088E9D14: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088E9EA8; } @@ -4849,7 +4588,6 @@ L_088E9D38: AOT_REGCACHE_SYNC_OUT(); return; L_088E9D44: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088E9EA8; } @@ -4859,7 +4597,6 @@ L_088E9D4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088E9EA8; } @@ -4871,9 +4608,7 @@ L_088E9D5C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E9EA8; } @@ -4905,7 +4640,6 @@ L_088E9D9C: goto L_088E9DA4; L_088E9DA4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088E9DDC; } @@ -4915,9 +4649,7 @@ L_088E9DAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088E9DDC; } @@ -5161,7 +4893,6 @@ L_088E9F58: L_088E9F60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA3EC; } @@ -5170,7 +4901,6 @@ L_088E9F60: L_088E9F6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA3EC; } @@ -5178,12 +4908,10 @@ L_088E9F6C: } L_088E9F78: aot_gpr_31 = (0x088E9F80u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088E9F80u) goto L_088E9F80; AOT_REGCACHE_SYNC_OUT(); return; L_088E9F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EA3EC; } @@ -5420,7 +5148,6 @@ L_088EA0A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EA378; } @@ -5467,7 +5194,6 @@ L_088EA12C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(52))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA278; } @@ -5479,7 +5205,6 @@ L_088EA13C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EA278; } @@ -5555,9 +5280,7 @@ L_088EA154: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EA204; } @@ -5592,7 +5315,6 @@ L_088EA210: AOT_REGCACHE_SYNC_OUT(); return; L_088EA220: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EA26C; } @@ -5659,7 +5381,6 @@ L_088EA284: goto L_088EA2C4; L_088EA2C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA378; } @@ -5719,7 +5440,6 @@ L_088EA2CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x088EA32Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 658u, 0x08A6734Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EA32Cu) goto L_088EA32C; AOT_REGCACHE_SYNC_OUT(); return; L_088EA32C: @@ -5755,7 +5475,6 @@ L_088EA378: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[21] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EA0A8; } @@ -5790,7 +5509,6 @@ L_088EA3C4: L_088EA3CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA3EC; } @@ -5799,7 +5517,6 @@ L_088EA3CC: L_088EA3D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA3EC; } @@ -5807,7 +5524,6 @@ L_088EA3D8: } L_088EA3E4: aot_gpr_31 = (0x088EA3ECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EA3ECu) goto L_088EA3EC; AOT_REGCACHE_SYNC_OUT(); return; L_088EA3EC: @@ -5834,7 +5550,17 @@ L_088EA3F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EA428: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-352)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5911,7 +5637,6 @@ L_088EA50C: goto L_088EA510; L_088EA510: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088EA530; } @@ -5923,7 +5648,6 @@ L_088EA518: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EA564; } @@ -5949,7 +5673,6 @@ L_088EA554: goto L_088EA55C; L_088EA55C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EA578; } @@ -5957,7 +5680,6 @@ L_088EA55C: } L_088EA564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -5966,7 +5688,6 @@ L_088EA564: L_088EA56C: aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EA588; } @@ -5974,7 +5695,6 @@ L_088EA56C: } L_088EA578: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_088EA590; } @@ -5982,7 +5702,6 @@ L_088EA578: } L_088EA580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EA638; } @@ -5990,7 +5709,6 @@ L_088EA580: } L_088EA588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -6043,7 +5761,6 @@ L_088EA5EC: AOT_REGCACHE_SYNC_OUT(); return; L_088EA5F8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EA610; } @@ -6051,7 +5768,6 @@ L_088EA5F8: } L_088EA600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EA638; } @@ -6059,7 +5775,6 @@ L_088EA600: } L_088EA608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -6068,7 +5783,6 @@ L_088EA608: L_088EA610: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA638; } @@ -6082,7 +5796,6 @@ L_088EA61C: AOT_REGCACHE_SYNC_OUT(); return; L_088EA628: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EA638; } @@ -6090,7 +5803,6 @@ L_088EA628: } L_088EA630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -6115,7 +5827,6 @@ L_088EA650: AOT_REGCACHE_SYNC_OUT(); return; L_088EA660: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EA750; } @@ -6201,7 +5912,6 @@ L_088EA718: ctx.fpr[24] = std::bit_cast(0u); aot_gpr_16 = (ctx.gpr[29] + static_cast(16)); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088EA748; } @@ -6209,7 +5919,6 @@ L_088EA718: } L_088EA740: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088EA758; } @@ -6225,7 +5934,6 @@ L_088EA748: } L_088EA750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -6281,7 +5989,6 @@ L_088EA7B0: AOT_REGCACHE_SYNC_OUT(); return; L_088EA7D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EA86C; } @@ -6296,7 +6003,6 @@ L_088EA7E0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EA86C; } @@ -6374,7 +6080,6 @@ L_088EA804: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EA86C; } @@ -6425,7 +6130,6 @@ L_088EA898: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EA934; } @@ -6494,7 +6198,6 @@ L_088EA934: AOT_REGCACHE_SYNC_OUT(); return; L_088EA948: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EA9DC; } @@ -6517,7 +6220,6 @@ L_088EA95C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EA9C0; } @@ -6618,7 +6320,6 @@ L_088EAA2C: AOT_REGCACHE_SYNC_OUT(); return; L_088EAA44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EAA70; } @@ -6642,7 +6343,6 @@ L_088EAA4C: L_088EAA70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088EAABC; } @@ -6669,7 +6369,6 @@ L_088EAA94: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EAC2C; } @@ -6719,7 +6418,6 @@ L_088EAB18: aot_gpr_16 = (aot_gpr_2 | 0u); aot_gpr_4 = (0u | 255u); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_088EAB88; } @@ -6749,7 +6447,6 @@ L_088EAB40: AOT_REGCACHE_SYNC_OUT(); return; L_088EAB58: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_088EAB88; } @@ -6890,7 +6587,6 @@ L_088EAC94: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EAD04; } @@ -6899,7 +6595,6 @@ L_088EAC94: L_088EACAC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EAD04; } @@ -6911,7 +6606,6 @@ L_088EACB8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EAD04; } @@ -6920,7 +6614,6 @@ L_088EACB8: L_088EACD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088EAD04; } @@ -6936,7 +6629,6 @@ L_088EACE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EAD04; } @@ -7059,7 +6751,6 @@ L_088EADA8: AOT_REGCACHE_SYNC_OUT(); return; L_088EADC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -7068,7 +6759,6 @@ L_088EADC8: L_088EADD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB038; } @@ -7308,7 +6998,17 @@ L_088EB038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EB074: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7330,7 +7030,6 @@ L_088EB0C4: ctx.gpr[19] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB0FC; } @@ -7343,7 +7042,6 @@ L_088EB0D4: AOT_REGCACHE_SYNC_OUT(); return; L_088EB0DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB0F4; } @@ -7359,7 +7057,6 @@ L_088EB0E4: } L_088EB0EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB138; } @@ -7367,7 +7064,6 @@ L_088EB0EC: } L_088EB0F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB64C; } @@ -7375,7 +7071,6 @@ L_088EB0F4: } L_088EB0FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB64C; } @@ -7406,7 +7101,6 @@ L_088EB128: L_088EB138: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088EB1DC; } @@ -7414,12 +7108,10 @@ L_088EB138: } L_088EB144: aot_gpr_31 = (0x088EB14Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 273u, 0x088954ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB14Cu) goto L_088EB14C; AOT_REGCACHE_SYNC_OUT(); return; L_088EB14C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB1DC; } @@ -7435,7 +7127,6 @@ L_088EB154: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EB1DC; } @@ -7451,7 +7142,6 @@ L_088EB17C: L_088EB18C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EB1AC; } @@ -7469,7 +7159,6 @@ L_088EB1A8: goto L_088EB1AC; L_088EB1AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB1DC; } @@ -7481,9 +7170,7 @@ L_088EB1B4: aot_gpr_5 = (aot_gpr_5 | 48060u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EB1DC; } @@ -7491,7 +7178,6 @@ L_088EB1B4: } L_088EB1D4: aot_gpr_31 = (0x088EB1DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 73u, 0x08890474u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB1DCu) goto L_088EB1DC; AOT_REGCACHE_SYNC_OUT(); return; L_088EB1DC: @@ -7505,7 +7191,6 @@ L_088EB1DC: } L_088EB1E8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB238; } @@ -7526,7 +7211,6 @@ L_088EB200: AOT_REGCACHE_SYNC_OUT(); return; L_088EB208: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB238; } @@ -7538,7 +7222,6 @@ L_088EB210: L_088EB214: aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB238; } @@ -7556,7 +7239,6 @@ L_088EB220: } L_088EB230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB24C; } @@ -7564,7 +7246,6 @@ L_088EB230: } L_088EB238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB64C; } @@ -7581,7 +7262,6 @@ L_088EB248: L_088EB24C: aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EB26C; } @@ -7595,7 +7275,6 @@ L_088EB258: AOT_REGCACHE_SYNC_OUT(); return; L_088EB264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB2F4; } @@ -7603,7 +7282,6 @@ L_088EB264: } L_088EB26C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088EB2E8; } @@ -7616,7 +7294,6 @@ L_088EB274: AOT_REGCACHE_SYNC_OUT(); return; L_088EB27C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB2E8; } @@ -7625,7 +7302,6 @@ L_088EB27C: L_088EB284: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088EB2E8; } @@ -7662,7 +7338,6 @@ L_088EB2C4: } L_088EB2E0: { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088EB2F4; } @@ -7717,7 +7392,6 @@ L_088EB34C: L_088EB35C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB378; } @@ -7815,9 +7489,7 @@ L_088EB400: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EB628; } @@ -7829,7 +7501,6 @@ L_088EB418: L_088EB41C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EB628; } @@ -7839,7 +7510,6 @@ L_088EB428: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EB628; } @@ -7857,7 +7527,6 @@ L_088EB438: } L_088EB448: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB4A0; } @@ -7906,7 +7575,6 @@ L_088EB4A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); ctx.gpr[20] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088EB524; } @@ -7916,7 +7584,6 @@ L_088EB4B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB524; } @@ -7946,7 +7613,6 @@ L_088EB4F4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23236))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23240))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088EB51C; } @@ -7954,7 +7620,6 @@ L_088EB4F4: } L_088EB514: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088EB524; } @@ -7984,7 +7649,6 @@ L_088EB52C: L_088EB534: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088EB5F4; } @@ -8014,7 +7678,6 @@ L_088EB574: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23236))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23240))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088EB59C; } @@ -8022,7 +7685,6 @@ L_088EB574: } L_088EB594: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088EB5F4; } @@ -8087,7 +7749,6 @@ L_088EB608: goto L_088EB60C; L_088EB60C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088EB628; } @@ -8102,7 +7763,6 @@ L_088EB614: goto L_088EB628; L_088EB628: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088EB64C; } @@ -8115,7 +7775,6 @@ L_088EB630: AOT_REGCACHE_SYNC_OUT(); return; L_088EB638: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EB64C; } @@ -8144,7 +7803,17 @@ L_088EB64C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EB674: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-208)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8191,7 +7860,6 @@ L_088EB714: } L_088EB720: { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_088EB758; } @@ -8204,7 +7872,6 @@ L_088EB728: AOT_REGCACHE_SYNC_OUT(); return; L_088EB730: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB758; } @@ -8213,7 +7880,6 @@ L_088EB730: L_088EB738: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB758; } @@ -8224,7 +7890,6 @@ L_088EB744: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(60))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB770; } @@ -8232,7 +7897,6 @@ L_088EB744: } L_088EB758: aot_gpr_31 = (0x088EB760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB760u) goto L_088EB760; AOT_REGCACHE_SYNC_OUT(); return; L_088EB760: @@ -8245,7 +7909,6 @@ L_088EB760: } L_088EB768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB7C4; } @@ -8270,9 +7933,7 @@ L_088EB778: L_088EB780: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EB7C4; } @@ -8295,7 +7956,6 @@ L_088EB794: L_088EB7C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_088EB7D8; } @@ -8307,12 +7967,10 @@ L_088EB7D0: goto L_088EB7D8; L_088EB7D8: aot_gpr_31 = (0x088EB7E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB7E0u) goto L_088EB7E0; AOT_REGCACHE_SYNC_OUT(); return; L_088EB7E0: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088EB8DC; } @@ -8320,14 +7978,12 @@ L_088EB7E0: } L_088EB7E8: aot_gpr_31 = (0x088EB7F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB7F0u) goto L_088EB7F0; AOT_REGCACHE_SYNC_OUT(); return; L_088EB7F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB810; } @@ -8335,7 +7991,6 @@ L_088EB7F0: } L_088EB800: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088EB818; } @@ -8343,7 +7998,6 @@ L_088EB800: } L_088EB808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB868; } @@ -8364,7 +8018,6 @@ L_088EB818: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB868; } @@ -8392,7 +8045,6 @@ L_088EB858: AOT_REGCACHE_SYNC_OUT(); return; L_088EB860: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB878; } @@ -8422,7 +8074,6 @@ L_088EB878: } L_088EB880: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EB8B8; } @@ -8442,7 +8093,6 @@ L_088EB88C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(335))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EB8D4; } @@ -8450,7 +8100,6 @@ L_088EB88C: } L_088EB8B8: aot_gpr_31 = (0x088EB8C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB8C0u) goto L_088EB8C0; AOT_REGCACHE_SYNC_OUT(); return; L_088EB8C0: @@ -8461,7 +8110,6 @@ L_088EB8C0: AOT_REGCACHE_SYNC_OUT(); return; L_088EB8CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB8DC; } @@ -8479,7 +8127,6 @@ L_088EB8DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB910; } @@ -8489,7 +8136,6 @@ L_088EB8EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB910; } @@ -8504,7 +8150,6 @@ L_088EB8FC: goto L_088EB908; L_088EB908: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB928; } @@ -8522,7 +8167,6 @@ L_088EB918: aot_gpr_5 = (256u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB948; } @@ -8534,7 +8178,6 @@ L_088EB928: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EB950; } @@ -8542,7 +8185,6 @@ L_088EB928: } L_088EB940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB978; } @@ -8563,7 +8205,6 @@ L_088EB950: AOT_REGCACHE_SYNC_OUT(); return; L_088EB958: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB970; } @@ -8573,7 +8214,6 @@ L_088EB960: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EB978; } @@ -8581,7 +8221,6 @@ L_088EB960: } L_088EB970: { const bool branch_taken = ctx.gpr[23] != aot_gpr_16; - // nop if (branch_taken) { goto L_088EB994; } @@ -8592,7 +8231,6 @@ L_088EB978: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EB99C; } @@ -8600,7 +8238,6 @@ L_088EB978: } L_088EB98C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EB9CC; } @@ -8616,12 +8253,10 @@ L_088EB994: } L_088EB99C: aot_gpr_31 = (0x088EB9A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB9A4u) goto L_088EB9A4; AOT_REGCACHE_SYNC_OUT(); return; L_088EB9A4: { const bool branch_taken = ctx.gpr[21] == aot_gpr_2; - // nop if (branch_taken) { goto L_088EB9CC; } @@ -8629,12 +8264,10 @@ L_088EB9A4: } L_088EB9AC: aot_gpr_31 = (0x088EB9B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EB9B4u) goto L_088EB9B4; AOT_REGCACHE_SYNC_OUT(); return; L_088EB9B4: { const bool branch_taken = ctx.gpr[21] == aot_gpr_2; - // nop if (branch_taken) { goto L_088EB9CC; } @@ -8650,7 +8283,6 @@ L_088EB9BC: } L_088EB9C4: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EB9F0; } @@ -8663,7 +8295,6 @@ L_088EB9CC: AOT_REGCACHE_SYNC_OUT(); return; L_088EB9D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EB9F8; } @@ -8704,7 +8335,6 @@ L_088EBA04: } L_088EBA10: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EBA20; } @@ -8717,7 +8347,6 @@ L_088EBA18: L_088EBA20: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBB1C; } @@ -8725,7 +8354,6 @@ L_088EBA20: } L_088EBA2C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EBB1C; } @@ -8738,7 +8366,6 @@ L_088EBA34: AOT_REGCACHE_SYNC_OUT(); return; L_088EBA3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EBB1C; } @@ -8758,7 +8385,6 @@ L_088EBA50: AOT_REGCACHE_SYNC_OUT(); return; L_088EBA5C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EBA84; } @@ -8775,7 +8401,6 @@ L_088EBA64: } L_088EBA70: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EBA84; } @@ -8793,7 +8418,6 @@ L_088EBA84: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBB1C; } @@ -8804,7 +8428,6 @@ L_088EBAA0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBB1C; } @@ -8830,7 +8453,6 @@ L_088EBADC: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088EBB00; @@ -8901,7 +8523,6 @@ L_088EBB4C: } L_088EBB54: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EBB64; } @@ -8916,7 +8537,6 @@ L_088EBB64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EBBCC; } @@ -8932,7 +8552,6 @@ L_088EBB78: AOT_REGCACHE_SYNC_OUT(); return; L_088EBB8C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EBC68; } @@ -8979,7 +8598,6 @@ L_088EBBCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EBC68; } @@ -8994,7 +8612,6 @@ L_088EBBDC: L_088EBBE8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBC3C; } @@ -9004,7 +8621,6 @@ L_088EBBF4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088EBC3C; } @@ -9046,7 +8662,6 @@ L_088EBC30: } L_088EBC3C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBC60; } @@ -9055,9 +8670,7 @@ L_088EBC3C: L_088EBC44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EBC60; } @@ -9079,7 +8692,6 @@ L_088EBC64: goto L_088EBC68; L_088EBC68: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0058_entry, 58u, 131u, 0x088EC5E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9088,7 +8700,6 @@ L_088EBC68: L_088EBC70: aot_gpr_4 = (ctx.gpr[23] < static_cast(48) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0058_entry, 58u, 131u, 0x088EC5E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9104,13 +8715,22 @@ L_088EBC7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EBC94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(72))); aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EBCC0; } @@ -9120,7 +8740,6 @@ L_088EBCA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EBCC8; } @@ -9128,7 +8747,6 @@ L_088EBCA8: } L_088EBCB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBD20; } @@ -9152,7 +8770,6 @@ L_088EBCC8: AOT_REGCACHE_SYNC_OUT(); return; L_088EBCDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EBD18; } @@ -9213,7 +8830,6 @@ L_088EBD20: } L_088EBD2C: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088EBD7C; } @@ -9221,7 +8837,6 @@ L_088EBD2C: } L_088EBD34: { const bool branch_taken = static_cast(ctx.gpr[22]) > 0; - // nop if (branch_taken) { goto L_088EBD60; } @@ -9230,7 +8845,6 @@ L_088EBD34: L_088EBD3C: ctx.gpr[20] = (0u | 28u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBD7C; } @@ -9246,7 +8860,6 @@ L_088EBD48: } L_088EBD50: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EBD78; } @@ -9254,7 +8867,6 @@ L_088EBD50: } L_088EBD58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBD7C; } @@ -9263,7 +8875,6 @@ L_088EBD58: L_088EBD60: ctx.gpr[20] = (0u | 29u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBD7C; } @@ -9272,7 +8883,6 @@ L_088EBD60: L_088EBD6C: ctx.gpr[20] = (0u | 30u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBD7C; } @@ -9283,7 +8893,6 @@ L_088EBD78: goto L_088EBD7C; L_088EBD7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0058_entry, 58u, 131u, 0x088EC5E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9294,7 +8903,6 @@ L_088EBD84: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EBDB0; } @@ -9304,7 +8912,6 @@ L_088EBD98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EBDB8; } @@ -9312,7 +8919,6 @@ L_088EBD98: } L_088EBDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBE10; } @@ -9336,7 +8942,6 @@ L_088EBDB8: AOT_REGCACHE_SYNC_OUT(); return; L_088EBDCC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EBE08; } @@ -9397,7 +9002,6 @@ L_088EBE10: } L_088EBE1C: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088EBE6C; } @@ -9405,7 +9009,6 @@ L_088EBE1C: } L_088EBE24: { const bool branch_taken = static_cast(ctx.gpr[22]) > 0; - // nop if (branch_taken) { goto L_088EBE50; } @@ -9414,7 +9017,6 @@ L_088EBE24: L_088EBE2C: ctx.gpr[20] = (0u | 28u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBE6C; } @@ -9430,7 +9032,6 @@ L_088EBE38: } L_088EBE40: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EBE68; } @@ -9438,7 +9039,6 @@ L_088EBE40: } L_088EBE48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBE6C; } @@ -9447,7 +9047,6 @@ L_088EBE48: L_088EBE50: ctx.gpr[20] = (0u | 29u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBE6C; } @@ -9456,7 +9055,6 @@ L_088EBE50: L_088EBE5C: ctx.gpr[20] = (0u | 30u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBE6C; } @@ -9467,7 +9065,6 @@ L_088EBE68: goto L_088EBE6C; L_088EBE6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0058_entry, 58u, 131u, 0x088EC5E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9478,7 +9075,6 @@ L_088EBE74: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EBEA0; } @@ -9514,7 +9110,6 @@ L_088EBEA0: L_088EBEA8: aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBEC8; } @@ -9525,7 +9120,6 @@ L_088EBEB4: goto L_088EBEB8; L_088EBEB8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EBEC8; } @@ -9574,7 +9168,6 @@ L_088EBEE4: } L_088EBEEC: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EBEFC; } @@ -9591,7 +9184,6 @@ L_088EBEF4: L_088EBEFC: aot_gpr_4 = (0u | 21u); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EBF1C; } @@ -9599,7 +9191,6 @@ L_088EBEFC: } L_088EBF08: aot_gpr_31 = (0x088EBF10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EBF10u) goto L_088EBF10; AOT_REGCACHE_SYNC_OUT(); return; L_088EBF10: @@ -9613,7 +9204,6 @@ L_088EBF10: } L_088EBF1C: aot_gpr_31 = (0x088EBF24u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EBF24u) goto L_088EBF24; AOT_REGCACHE_SYNC_OUT(); return; L_088EBF24: @@ -9622,7 +9212,6 @@ L_088EBF24: goto L_088EBF2C; L_088EBF2C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBFAC; } @@ -9631,7 +9220,6 @@ L_088EBF2C: L_088EBF34: aot_gpr_4 = (0u | 21u); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EBF9C; } @@ -9648,7 +9236,6 @@ L_088EBF40: } L_088EBF4C: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088EBFA0; } @@ -9656,7 +9243,6 @@ L_088EBF4C: } L_088EBF54: { const bool branch_taken = static_cast(ctx.gpr[22]) > 0; - // nop if (branch_taken) { goto L_088EBF84; } @@ -9665,7 +9251,6 @@ L_088EBF54: L_088EBF5C: ctx.gpr[20] = (0u | 28u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBFA0; } @@ -9681,7 +9266,6 @@ L_088EBF68: } L_088EBF70: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EBFA0; } @@ -9690,7 +9274,6 @@ L_088EBF70: L_088EBF78: ctx.gpr[20] = (0u | 31u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBFA0; } @@ -9699,7 +9282,6 @@ L_088EBF78: L_088EBF84: ctx.gpr[20] = (0u | 29u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBFA0; } @@ -9708,7 +9290,6 @@ L_088EBF84: L_088EBF90: ctx.gpr[20] = (0u | 30u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EBFA0; } @@ -9729,7 +9310,6 @@ L_088EBFA0: L_088EBFAC: aot_gpr_4 = (ctx.gpr[30] < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0058_entry, 58u, 18u, 0x088EC0E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9741,11 +9321,20 @@ L_088EBFB8: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[30]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-16032))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EBFD0: ctx.gpr[20] = (0u | 20u); aot_gpr_6 = (ctx.gpr[22] << 24u); diff --git a/profiles/vcs/generated/generated_unit_0058.cpp b/profiles/vcs/generated/generated_unit_0058.cpp index ebc237a..06d64ad 100644 --- a/profiles/vcs/generated/generated_unit_0058.cpp +++ b/profiles/vcs/generated/generated_unit_0058.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0058[4096] = { - 1, 0, 2, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 9, 0, 10, 0, - 11, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 14, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 18, 0, 19, 0, 0, 0, 0, 20, - 0, 0, 21, 0, 22, 0, 0, 0, 0, 23, 0, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 38, 0, 0, 39, - 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 45, 0, 0, 46, 0, 47, 0, 48, - 0, 49, 0, 50, 0, 0, 51, 0, 52, 0, 53, 0, 54, 0, 0, 55, 0, 0, 56, 57, 0, 58, 0, 59, 0, 60, 0, 0, 61, 0, 62, 0, - 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 0, 71, 0, 72, 0, 0, 73, 0, 0, - 74, 75, 0, 76, 0, 77, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 84, 0, 85, 0, 0, 0, 86, 0, 87, 88, 0, 89, 0, - 0, 90, 0, 0, 91, 92, 0, 93, 0, 94, 0, 95, 0, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 101, 0, 102, 0, 0, 0, 103, 0, 104, - 105, 0, 106, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 0, 111, 0, 0, 112, 113, 0, 0, 0, 114, 115, 0, 116, 0, 0, 117, 0, 0, 0, 0, 118, 0, 0, 119, 0, - 120, 0, 121, 0, 122, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 127, 0, 0, 128, 0, 0, 129, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, - 141, 0, 0, 0, 142, 0, 0, 0, 143, 0, 144, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 148, 0, - 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 153, 0, - 0, 0, 154, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 166, 0, 167, - 0, 0, 0, 168, 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 174, 0, 175, - 0, 176, 0, 177, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, - 0, 0, 187, 188, 0, 0, 0, 0, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 203, - 0, 0, 204, 0, 205, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, - 0, 0, 212, 0, 0, 0, 213, 0, 214, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 220, 0, - 0, 221, 0, 0, 0, 222, 0, 223, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, - 230, 0, 231, 0, 232, 0, 0, 233, 0, 0, 234, 0, 235, 0, 236, 0, 0, 0, 237, 0, 238, 0, 0, 239, 0, 0, 0, 240, 0, 0, 0, 241, - 0, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, - 248, 0, 249, 0, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 255, 0, 0, 256, 0, 0, 0, 0, 257, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, - 260, 0, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 264, 0, 0, 265, 0, 266, 0, 0, 0, 267, 0, - 268, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 274, 0, 275, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 278, 0, 0, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 0, 284, 0, 0, 285, - 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 288, 0, 289, 0, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 0, 0, 296, 0, - 297, 0, 0, 298, 0, 299, 0, 0, 300, 0, 0, 301, 0, 302, 0, 303, 0, 0, 0, 304, 0, 305, 0, 306, 307, 308, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, - 0, 0, 311, 0, 0, 0, 312, 0, 313, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 319, - 0, 0, 0, 0, 0, 320, 0, 321, 0, 0, 0, 322, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 327, - 0, 328, 0, 329, 0, 0, 0, 330, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 335, 0, 336, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 340, 341, 0, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 0, - 345, 0, 0, 0, 0, 346, 0, 0, 0, 347, 0, 0, 348, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 352, 0, 353, 0, 354, 0, - 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, - 0, 0, 361, 0, 0, 0, 0, 362, 0, 363, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 367, 0, 0, 0, 368, 369, 0, 370, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 0, 0, 376, 0, 0, 0, - 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 380, 381, 0, 0, 382, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, - 387, 0, 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 391, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, - 395, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 0, 399, 0, 400, 0, 401, 0, 0, 0, 0, 0, 0, 0, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 403, 0, 404, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 408, 0, 409, 0, 410, 0, 411, 0, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 416, 417, - 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, 0, 421, - 422, 0, 0, 0, 423, 0, 424, 0, 425, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, - 433, 0, 434, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 437, 0, 438, 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 442, - 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 0, 452, 0, 453, 0, 454, 0, 0, - 455, 0, 0, 0, 456, 0, 0, 0, 457, 0, 458, 0, 459, 0, 0, 460, 0, 0, 0, 461, 0, 462, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, - 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 472, 0, 0, - 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 479, 0, 480, 0, - 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 484, 0, 485, 0, 486, 487, 0, 0, 488, 0, 0, 0, 489, 490, 0, 0, 491, 0, 0, 492, - 493, 0, 0, 494, 0, 0, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 501, 0, 502, 503, 0, 504, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 507, 508, 0, 0, 0, 509, 0, - 510, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 513, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 519, 0, 520, 521, 0, 522, 0, 523, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, 526, - 0, 527, 528, 0, 529, 0, 0, 0, 530, 0, 0, 0, 531, 0, 532, 533, 0, 534, 0, 535, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 537, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 0, 0, 542, 0, 0, 543, 0, 0, - 544, 0, 0, 0, 545, 546, 0, 0, 0, 547, 0, 548, 0, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 552, 0, 553, 0, 0, 0, 554, 0, 0, - 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, - 0, 0, 0, 0, 0, 562, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 0, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 0, 574, 0, - 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, - 0, 0, 580, 0, 0, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 0, 0, 585, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 589, 0, 590, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 0, 593, 0, 594, 0, 595, 0, 596, - 0, 597, 0, 598, 0, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, - 605, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 608, 0, 0, 0, 609, 0, 0, 610, 0, 611, 0, 612, 0, 613, 0, 0, 0, 614, - 0, 0, 0, 615, 616, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, 620, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, - 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 625, 0, 626, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 632, 0, 633, 0, 0, - 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 635, 0, 636, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, - 641, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 643, 0, 644, 0, 0, 645, 0, 646, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, - 649, 0, 650, 0, 0, 651, 0, 0, 0, 652, 0, 653, 0, 654, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 656, 0, 657, 0, 0, 658, 0, 659, - 0, 0, 660, 0, 661, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 668, 0, 0, 0, 669, 670, 0, 671, 0, - 0, 0, 672, 0, 0, 673, 0, 674, 0, 675, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 679, 0, 680, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 682, 0, 683, 0, 684, 0, 0, 685, 0, 686, 0, 687, 0, 0, 688, 0, 0, 0, 0, - 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 693, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 697, 0, 698, 0, 699, 700, 0, 0, 701, 0, 0, 0, 0, 0, 702, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, - 0, 0, 0, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 708, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 712, - 0, 713, 714, 0, 0, 715, 0, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 0, 0, 0, 718, 0, 719, 0, 720, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 725, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 0, 730, 0, 0, 0, 0, 731, 0, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, - 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 736, 0, 0, 0, 0, 0, - 0, 737, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 742, 0, 0, 0, 743, 744, - 0, 0, 0, 0, 0, 0, 745, 0, 0, 746, 0, 747, 0, 0, 748, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 755, 0, 0, 0, 0, 0, 0, - 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 758, 0, 759, 760, 0, 0, - 761, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 764, 0, 0, 0, 765, 0, 0, 0, 0, 0, 766, 0, 767, 0, 0, - 0, 0, 0, 768, 0, 0, 0, 769, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 773, 0, 0, 0, 774, 0, 0, 0, - 0, 0, 0, 775, 0, 776, 0, 0, 0, 0, 0, 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 780, 0, 0, 0, 781, - 782, 0, 0, 0, 783, 0, 0, 784, 785, 0, 0, 0, 786, 0, 0, 0, 787, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 0, 0, 793, 0, - 0, 0, 0, 0, 794, 795, 0, 0, 0, 0, 796, 0, 797, 0, 798, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 800, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 805, 806, 0, - 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 808, 0, 0, 0, 809, 0, 0, 0, 810, 0, 0, 0, 811, 812, 0, 813, 0, 814, 0, 815, 0, - 0, 0, 816, 0, 0, 817, 0, 0, 0, 0, 818, 819, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 822, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, - 0, 0, 825, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 830, 0, 0, - 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 834, 0, 0, 835, 0, 0, 836, 0, 837, 0, - 838, 0, 0, 839, 0, 840, 0, 841, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 845, 0, 0, - 0, 846, 0, 0, 0, 847, 0, 0, 848, 0, 0, 849, 0, 0, 0, 850, 0, 0, 0, 0, 851, 852, 0, 0, 853, 0, 0, 0, 854, 0, 0, 0, - 0, 855, 0, 0, 856, 0, 0, 0, 857, 858, 0, 859, 0, 0, 0, 860, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 862, 0, 0, 0, 0, 0, 863, 0, 0, 864, 0, 865, 0, 0, 866, 0, 0, 0, 0, 0, 867, 0, 868, 0, 869, 0, 0, 0, 0, - 0, 0, 0, 870, 0, 0, 871, 0, 0, 0, 0, 0, 872, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, 0, 0, 0, 0, 874, 0, 0, 875, 0, - 0, 0, 0, 0, 0, 876, 0, 0, 877, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 880, 0, 0, 0, 0, 0, 0, 881, - 0, 0, 0, 0, 0, 882, 0, 0, 883, 0, 884, 0, 0, 885, 0, 0, 0, 0, 0, 886, 0, 887, 0, 0, 0, 0, 0, 888, 0, 0, 0, 889, - 0, 0, 0, 0, 890, 0, 0, 0, 0, 891, 0, 0, 0, 0, 892, 0, 0, 893, 0, 894, 0, 0, 0, 0, 0, 895, 0, 0, 0, 0, 0, 896, - 897, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 899, 0, 0, 0, 0, 0, 0, 900, 0, 0, 901, 0, 0, 902, 0, 903, 0, 0, 0, 0, 904, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0058[64] = { + 0x85412A09504A8245ull, 0x9090908A01555214ull, 0x52AC954AA90A1090ull, 0x5A2D54AB252AAA20ull, + 0x00020095A2D54AB2ull, 0x0164AA55484B1908ull, 0x4880151110801555ull, 0x0000005440400902ull, + 0xA200114010054010ull, 0x5554120AA8840428ull, 0x9414A400008AAA0Cull, 0x4448894411110254ull, + 0x889454950414A8A2ull, 0x0008082514084210ull, 0x45280051021424A0ull, 0x92AA600015410511ull, + 0x03A8A92945552920ull, 0xA210454420000800ull, 0x0044288A8840A8A0ull, 0x54505221228C1415ull, + 0xB1440A8411108420ull, 0x4454C50811502080ull, 0x4054480940289405ull, 0x5541400D00000000ull, + 0xA8000002D4000100ull, 0x9411444555508151ull, 0x222895112A555222ull, 0x5404444422805444ull, + 0x0101014993135501ull, 0x46A000000B500004ull, 0x2B44400010054205ull, 0x810AD11688800000ull, + 0x22A88A3124450200ull, 0x210802A040A08540ull, 0x0222201045421080ull, 0xAA222900010A4A44ull, + 0x000000200000044Aull, 0x8AA4510108080100ull, 0x0088A090408A0458ull, 0x2A40000000040000ull, + 0x402A510142025420ull, 0x02009054A5102A25ull, 0x542102A458910000ull, 0x000004010952A800ull, + 0x0004000020018401ull, 0x00052220100504D4ull, 0x0150282690000100ull, 0x0108000002000000ull, + 0x0800005000400000ull, 0x0480000121108480ull, 0x00414A40C4202212ull, 0x0300010000014000ull, + 0x2822204134800002ull, 0x8880A02811280888ull, 0x4052000800091191ull, 0x6804800900085430ull, + 0x01100C2455888840ull, 0x0000020404000044ull, 0x5242080420404200ull, 0x21000000100004A9ull, + 0x00018B1211308922ull, 0x480410480A825208ull, 0x8828252081201120ull, 0x85240901820A4210ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0058[64] = { + 1u, 21u, 40u, 63u, 90u, 110u, 132u, 149u, 157u, 168u, 187u, 204u, 221u, 242u, 253u, 268u, + 286u, 309u, 320u, 335u, 355u, 371u, 387u, 403u, 413u, 422u, 443u, 465u, 481u, 499u, 510u, 524u, + 538u, 555u, 568u, 580u, 597u, 602u, 615u, 629u, 634u, 649u, 666u, 681u, 691u, 697u, 710u, 721u, + 724u, 728u, 737u, 751u, 756u, 768u, 782u, 794u, 807u, 822u, 827u, 838u, 846u, 862u, 876u, 890u, }; void recomp_unit_0058_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0058_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088EC000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0058[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0058[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0058[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088EC000; @@ -1096,7 +1003,6 @@ L_088EC008: L_088EC018: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC044; } @@ -1117,7 +1023,6 @@ L_088EC03C: goto L_088EC044; L_088EC044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC0E0; } @@ -1126,7 +1031,6 @@ L_088EC044: L_088EC04C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC078; } @@ -1147,7 +1051,6 @@ L_088EC070: goto L_088EC078; L_088EC078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC0E0; } @@ -1156,7 +1059,6 @@ L_088EC078: L_088EC080: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC0AC; } @@ -1177,7 +1079,6 @@ L_088EC0A4: goto L_088EC0AC; L_088EC0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC0E0; } @@ -1186,7 +1087,6 @@ L_088EC0AC: L_088EC0B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC0E0; } @@ -1207,7 +1107,6 @@ L_088EC0D8: goto L_088EC0E0; L_088EC0E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5E0; } @@ -1218,7 +1117,6 @@ L_088EC0E8: aot_gpr_5 = (2048u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC108; } @@ -1227,7 +1125,6 @@ L_088EC0E8: L_088EC0FC: ctx.gpr[20] = (0u | 16u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5E0; } @@ -1246,7 +1143,6 @@ L_088EC110: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC138; } @@ -1255,7 +1151,6 @@ L_088EC110: L_088EC124: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC140; } @@ -1263,7 +1158,6 @@ L_088EC124: } L_088EC130: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC24C; } @@ -1284,7 +1178,6 @@ L_088EC140: AOT_REGCACHE_SYNC_OUT(); return; L_088EC148: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EC24C; } @@ -1310,9 +1203,7 @@ L_088EC160: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC24C; } @@ -1320,14 +1211,12 @@ L_088EC160: } L_088EC184: aot_gpr_31 = (0x088EC18Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC18Cu) goto L_088EC18C; AOT_REGCACHE_SYNC_OUT(); return; L_088EC18C: ctx.gpr[16] = (aot_gpr_2 & 65535u); aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC1B0; } @@ -1344,7 +1233,6 @@ L_088EC19C: L_088EC1B0: aot_gpr_4 = (ctx.gpr[16] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC1D0; } @@ -1361,7 +1249,6 @@ L_088EC1BC: L_088EC1D0: aot_gpr_4 = (ctx.gpr[16] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC1F0; } @@ -1378,7 +1265,6 @@ L_088EC1DC: L_088EC1F0: aot_gpr_4 = (ctx.gpr[16] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC210; } @@ -1395,7 +1281,6 @@ L_088EC1FC: L_088EC210: aot_gpr_4 = (ctx.gpr[16] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC230; } @@ -1414,7 +1299,6 @@ L_088EC230: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC24C; } @@ -1429,7 +1313,6 @@ L_088EC24C: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC274; } @@ -1438,7 +1321,6 @@ L_088EC24C: L_088EC260: aot_gpr_4 = (static_cast(ctx.gpr[22]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC27C; } @@ -1462,7 +1344,6 @@ L_088EC274: } L_088EC27C: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088EC2CC; } @@ -1470,7 +1351,6 @@ L_088EC27C: } L_088EC284: { const bool branch_taken = static_cast(ctx.gpr[22]) > 0; - // nop if (branch_taken) { goto L_088EC2B0; } @@ -1479,7 +1359,6 @@ L_088EC284: L_088EC28C: ctx.gpr[20] = (0u | 28u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC2CC; } @@ -1495,7 +1374,6 @@ L_088EC298: } L_088EC2A0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC2C8; } @@ -1503,7 +1381,6 @@ L_088EC2A0: } L_088EC2A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC2CC; } @@ -1512,7 +1389,6 @@ L_088EC2A8: L_088EC2B0: ctx.gpr[20] = (0u | 29u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC2CC; } @@ -1521,7 +1397,6 @@ L_088EC2B0: L_088EC2BC: ctx.gpr[20] = (0u | 30u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC2CC; } @@ -1532,7 +1407,6 @@ L_088EC2C8: goto L_088EC2CC; L_088EC2CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5E0; } @@ -1545,7 +1419,6 @@ L_088EC2D4: AOT_REGCACHE_SYNC_OUT(); return; L_088EC2DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EC2F0; } @@ -1558,7 +1431,6 @@ L_088EC2E4: goto L_088EC2F0; L_088EC2F0: aot_gpr_31 = (0x088EC2F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC2F8u) goto L_088EC2F8; AOT_REGCACHE_SYNC_OUT(); return; L_088EC2F8: @@ -1568,7 +1440,6 @@ L_088EC2F8: aot_gpr_6 = (4096u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088EC32C; } @@ -1602,7 +1473,6 @@ L_088EC32C: } L_088EC334: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088EC480; } @@ -1610,7 +1480,6 @@ L_088EC334: } L_088EC33C: { const bool branch_taken = static_cast(ctx.gpr[22]) <= 0; - // nop if (branch_taken) { goto L_088EC368; } @@ -1618,7 +1487,6 @@ L_088EC33C: } L_088EC344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC3D4; } @@ -1626,7 +1494,6 @@ L_088EC344: } L_088EC34C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088EC3F8; } @@ -1635,7 +1502,6 @@ L_088EC34C: L_088EC354: aot_gpr_4 = (static_cast(ctx.gpr[22]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC464; } @@ -1643,7 +1509,6 @@ L_088EC354: } L_088EC360: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC480; } @@ -1661,7 +1526,6 @@ L_088EC368: L_088EC374: aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088EC394; } @@ -1672,7 +1536,6 @@ L_088EC380: goto L_088EC384; L_088EC384: { const bool branch_taken = ctx.gpr[30] != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC39C; } @@ -1680,7 +1543,6 @@ L_088EC384: } L_088EC38C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC39C; } @@ -1705,7 +1567,6 @@ L_088EC39C: } L_088EC3A8: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088EC3C0; } @@ -1713,7 +1574,6 @@ L_088EC3A8: } L_088EC3B0: { const bool branch_taken = ctx.gpr[30] != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC3C8; } @@ -1721,7 +1581,6 @@ L_088EC3B0: } L_088EC3B8: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088EC3C8; } @@ -1740,7 +1599,6 @@ L_088EC3C8: goto L_088EC3CC; L_088EC3CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC480; } @@ -1750,7 +1608,6 @@ L_088EC3D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC3EC; } @@ -1769,7 +1626,6 @@ L_088EC3EC: goto L_088EC3F0; L_088EC3F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC480; } @@ -1787,7 +1643,6 @@ L_088EC3F8: L_088EC404: aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088EC424; } @@ -1798,7 +1653,6 @@ L_088EC410: goto L_088EC414; L_088EC414: { const bool branch_taken = ctx.gpr[30] != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC42C; } @@ -1806,7 +1660,6 @@ L_088EC414: } L_088EC41C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC42C; } @@ -1831,7 +1684,6 @@ L_088EC42C: } L_088EC438: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088EC450; } @@ -1839,7 +1691,6 @@ L_088EC438: } L_088EC440: { const bool branch_taken = ctx.gpr[30] != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC458; } @@ -1847,7 +1698,6 @@ L_088EC440: } L_088EC448: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088EC458; } @@ -1866,7 +1716,6 @@ L_088EC458: goto L_088EC45C; L_088EC45C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC480; } @@ -1876,7 +1725,6 @@ L_088EC464: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC47C; } @@ -1895,7 +1743,6 @@ L_088EC47C: goto L_088EC480; L_088EC480: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EC530; } @@ -1903,7 +1750,6 @@ L_088EC480: } L_088EC488: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088EC530; } @@ -1998,9 +1844,7 @@ L_088EC52C: goto L_088EC530; L_088EC530: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC544; } @@ -2011,7 +1855,6 @@ L_088EC540: goto L_088EC544; L_088EC544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5E0; } @@ -2020,7 +1863,6 @@ L_088EC544: L_088EC54C: ctx.gpr[20] = (0u | 152u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5E0; } @@ -2031,7 +1873,6 @@ L_088EC558: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC580; } @@ -2040,7 +1881,6 @@ L_088EC558: L_088EC56C: aot_gpr_4 = (static_cast(ctx.gpr[22]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC588; } @@ -2064,7 +1904,6 @@ L_088EC580: } L_088EC588: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088EC5D8; } @@ -2072,7 +1911,6 @@ L_088EC588: } L_088EC590: { const bool branch_taken = static_cast(ctx.gpr[22]) > 0; - // nop if (branch_taken) { goto L_088EC5BC; } @@ -2081,7 +1919,6 @@ L_088EC590: L_088EC598: ctx.gpr[20] = (0u | 28u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5D8; } @@ -2097,7 +1934,6 @@ L_088EC5A4: } L_088EC5AC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC5D4; } @@ -2105,7 +1941,6 @@ L_088EC5AC: } L_088EC5B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5D8; } @@ -2114,7 +1949,6 @@ L_088EC5B4: L_088EC5BC: ctx.gpr[20] = (0u | 29u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5D8; } @@ -2123,7 +1957,6 @@ L_088EC5BC: L_088EC5C8: ctx.gpr[20] = (0u | 30u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5D8; } @@ -2134,7 +1967,6 @@ L_088EC5D4: goto L_088EC5D8; L_088EC5D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EC5E0; } @@ -2146,7 +1978,6 @@ L_088EC5E0: ctx.fpr[30] = std::bit_cast(aot_gpr_4); ctx.gpr[18] = (0u | 47u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[30] = (0u | 46u); if (branch_taken) { @@ -2156,7 +1987,6 @@ L_088EC5E0: } L_088EC600: { const bool branch_taken = ctx.gpr[23] == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088EC610; } @@ -2180,7 +2010,6 @@ L_088EC610: } L_088EC618: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC690; } @@ -2188,12 +2017,10 @@ L_088EC618: } L_088EC620: aot_gpr_31 = (0x088EC628u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC628u) goto L_088EC628; AOT_REGCACHE_SYNC_OUT(); return; L_088EC628: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088EC65C; } @@ -2215,9 +2042,7 @@ L_088EC630: L_088EC65C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC680; } @@ -2241,9 +2066,7 @@ L_088EC680: goto L_088EC690; L_088EC690: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[26])) && aot_fpr_20 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC6EC; } @@ -2251,12 +2074,10 @@ L_088EC690: } L_088EC6A0: aot_gpr_31 = (0x088EC6A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC6A8u) goto L_088EC6A8; AOT_REGCACHE_SYNC_OUT(); return; L_088EC6A8: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088EC6DC; } @@ -2284,7 +2105,6 @@ L_088EC6DC: L_088EC6EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2293,7 +2113,6 @@ L_088EC6EC: L_088EC6F8: aot_gpr_4 = (ctx.gpr[21] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2306,7 +2125,6 @@ L_088EC704: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2315,7 +2133,6 @@ L_088EC704: L_088EC720: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(124))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2351,7 +2168,6 @@ L_088EC72C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2372,7 +2188,6 @@ L_088EC778: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(64))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2385,7 +2200,6 @@ L_088EC788: AOT_REGCACHE_SYNC_OUT(); return; L_088EC790: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2508,14 +2322,12 @@ L_088EC870: AOT_REGCACHE_SYNC_OUT(); return; L_088EC898: aot_gpr_31 = (0x088EC8A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC8A0u) goto L_088EC8A0; AOT_REGCACHE_SYNC_OUT(); return; L_088EC8A0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC8E4; } @@ -2545,7 +2357,6 @@ L_088EC8E4: AOT_REGCACHE_SYNC_OUT(); return; L_088EC8F4: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088EC98C; } @@ -2560,7 +2371,6 @@ L_088EC8FC: AOT_REGCACHE_SYNC_OUT(); return; L_088EC90C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EC98C; } @@ -2569,9 +2379,7 @@ L_088EC90C: L_088EC914: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC98C; } @@ -2583,9 +2391,7 @@ L_088EC928: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC98C; } @@ -2594,7 +2400,6 @@ L_088EC928: L_088EC948: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); goto L_088EC95C; @@ -2604,7 +2409,6 @@ L_088EC95C: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(1252), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EC984; } @@ -2612,12 +2416,10 @@ L_088EC95C: } L_088EC96C: aot_gpr_31 = (0x088EC974u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC974u) goto L_088EC974; AOT_REGCACHE_SYNC_OUT(); return; L_088EC974: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088EC984; } @@ -2630,7 +2432,6 @@ L_088EC97C: AOT_REGCACHE_SYNC_OUT(); return; L_088EC984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED0E0; } @@ -2640,9 +2441,7 @@ L_088EC98C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EC9E8; } @@ -2651,7 +2450,6 @@ L_088EC98C: L_088EC9A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EC9E8; } @@ -2663,7 +2461,6 @@ L_088EC9B0: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(1252), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED0E0; } @@ -2671,12 +2468,10 @@ L_088EC9B0: } L_088EC9C8: aot_gpr_31 = (0x088EC9D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EC9D0u) goto L_088EC9D0; AOT_REGCACHE_SYNC_OUT(); return; L_088EC9D0: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088ED0E0; } @@ -2689,7 +2484,6 @@ L_088EC9D8: AOT_REGCACHE_SYNC_OUT(); return; L_088EC9E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED0E0; } @@ -2702,7 +2496,6 @@ L_088EC9E8: AOT_REGCACHE_SYNC_OUT(); return; L_088EC9F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088ECC34; } @@ -2732,12 +2525,10 @@ L_088ECA0C: AOT_REGCACHE_SYNC_OUT(); return; L_088ECA24: aot_gpr_31 = (0x088ECA2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECA2Cu) goto L_088ECA2C; AOT_REGCACHE_SYNC_OUT(); return; L_088ECA2C: { const bool branch_taken = ctx.gpr[21] == aot_gpr_2; - // nop if (branch_taken) { goto L_088ECA4C; } @@ -2745,7 +2536,6 @@ L_088ECA2C: } L_088ECA34: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088ECABC; } @@ -2753,12 +2543,10 @@ L_088ECA34: } L_088ECA3C: aot_gpr_31 = (0x088ECA44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECA44u) goto L_088ECA44; AOT_REGCACHE_SYNC_OUT(); return; L_088ECA44: { const bool branch_taken = ctx.gpr[21] != aot_gpr_2; - // nop if (branch_taken) { goto L_088ECABC; } @@ -2790,7 +2578,6 @@ L_088ECA5C: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(320), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088ECAA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECAA8u) goto L_088ECAA8; AOT_REGCACHE_SYNC_OUT(); return; L_088ECAA8: @@ -2801,7 +2588,6 @@ L_088ECAA8: AOT_REGCACHE_SYNC_OUT(); return; L_088ECAB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ECAC8; } @@ -2815,7 +2601,6 @@ L_088ECABC: AOT_REGCACHE_SYNC_OUT(); return; L_088ECAC8: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_088ECAFC; } @@ -2827,12 +2612,10 @@ L_088ECAD0: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(456), aot_gpr_4); aot_gpr_31 = (0x088ECAE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECAE8u) goto L_088ECAE8; AOT_REGCACHE_SYNC_OUT(); return; L_088ECAE8: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088ECAFC; } @@ -2846,7 +2629,6 @@ L_088ECAF0: L_088ECAFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ECC2C; } @@ -2859,7 +2641,6 @@ L_088ECB08: AOT_REGCACHE_SYNC_OUT(); return; L_088ECB10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ECC2C; } @@ -2868,7 +2649,6 @@ L_088ECB10: L_088ECB18: aot_gpr_4 = (0u | 42u); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_088ECC1C; } @@ -2881,7 +2661,6 @@ L_088ECB24: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ECC1C; } @@ -2914,7 +2693,6 @@ L_088ECB70: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ECBA0; } @@ -2929,7 +2707,6 @@ L_088ECB88: AOT_REGCACHE_SYNC_OUT(); return; L_088ECB98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ECC14; } @@ -2958,7 +2735,6 @@ L_088ECBBC: L_088ECBCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088ECC14; } @@ -2995,7 +2771,6 @@ L_088ECC04: AOT_REGCACHE_SYNC_OUT(); return; L_088ECC14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ECC2C; } @@ -3018,7 +2793,6 @@ L_088ECC2C: } L_088ECC34: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_088ECCD0; } @@ -3027,7 +2801,6 @@ L_088ECC34: L_088ECC3C: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(1252), std::bit_cast(ctx.fpr[26])); aot_gpr_31 = (0x088ECC48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECC48u) goto L_088ECC48; AOT_REGCACHE_SYNC_OUT(); return; L_088ECC48: @@ -3057,12 +2830,10 @@ L_088ECC68: AOT_REGCACHE_SYNC_OUT(); return; L_088ECC80: aot_gpr_31 = (0x088ECC88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECC88u) goto L_088ECC88; AOT_REGCACHE_SYNC_OUT(); return; L_088ECC88: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088ECC9C; } @@ -3076,7 +2847,6 @@ L_088ECC90: L_088ECC9C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ECCC8; } @@ -3089,7 +2859,6 @@ L_088ECCA8: AOT_REGCACHE_SYNC_OUT(); return; L_088ECCB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ECCC8; } @@ -3113,7 +2882,6 @@ L_088ECCC8: L_088ECCD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED0DC; } @@ -3133,7 +2901,6 @@ L_088ECCEC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088ECD24; } @@ -3144,7 +2911,6 @@ L_088ECCFC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088ED0DC; } @@ -3153,9 +2919,7 @@ L_088ECCFC: L_088ECD10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ED0DC; } @@ -3166,7 +2930,6 @@ L_088ECD24: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_088ECD4C; } @@ -3177,7 +2940,6 @@ L_088ECD38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[16] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088ECD70; } @@ -3205,7 +2967,6 @@ L_088ECD70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ECED4; } @@ -3219,7 +2980,6 @@ L_088ECD80: L_088ECD88: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088ECE14; } @@ -3231,7 +2991,6 @@ L_088ECD94: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088ECDCC; } @@ -3280,7 +3039,6 @@ L_088ECE14: L_088ECE1C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088ECED4; } @@ -3289,7 +3047,6 @@ L_088ECE1C: L_088ECE28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ECED4; } @@ -3300,7 +3057,6 @@ L_088ECE34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ECED4; } @@ -3308,7 +3064,6 @@ L_088ECE34: } L_088ECE48: aot_gpr_31 = (0x088ECE50u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECE50u) goto L_088ECE50; AOT_REGCACHE_SYNC_OUT(); return; L_088ECE50: @@ -3380,7 +3135,6 @@ L_088ECED4: AOT_REGCACHE_SYNC_OUT(); return; L_088ECEE0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ECF00; } @@ -3395,7 +3149,6 @@ L_088ECEE8: AOT_REGCACHE_SYNC_OUT(); return; L_088ECEF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ECFB4; } @@ -3405,7 +3158,6 @@ L_088ECF00: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(1252), std::bit_cast(ctx.fpr[26])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ECF40; } @@ -3415,7 +3167,6 @@ L_088ECF10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ECF40; } @@ -3445,12 +3196,10 @@ L_088ECF40: AOT_REGCACHE_SYNC_OUT(); return; L_088ECF58: aot_gpr_31 = (0x088ECF60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ECF60u) goto L_088ECF60; AOT_REGCACHE_SYNC_OUT(); return; L_088ECF60: { const bool branch_taken = ctx.gpr[21] != aot_gpr_2; - // nop if (branch_taken) { goto L_088ECFB4; } @@ -3458,7 +3207,6 @@ L_088ECF60: } L_088ECF68: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ECFB4; } @@ -3507,7 +3255,6 @@ L_088ECFCC: AOT_REGCACHE_SYNC_OUT(); return; L_088ECFD4: { const bool branch_taken = aot_gpr_2 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ECFFC; } @@ -3515,7 +3262,6 @@ L_088ECFD4: } L_088ECFDC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088ECFFC; } @@ -3539,7 +3285,6 @@ L_088ECFFC: ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088ECFB8; } @@ -3548,7 +3293,6 @@ L_088ECFFC: L_088ED014: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED040; } @@ -3557,7 +3301,6 @@ L_088ED014: L_088ED020: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ED040; } @@ -3565,7 +3308,6 @@ L_088ED020: } L_088ED02C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088ED040; } @@ -3579,12 +3321,10 @@ L_088ED034: AOT_REGCACHE_SYNC_OUT(); return; L_088ED040: aot_gpr_31 = (0x088ED048u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ED048u) goto L_088ED048; AOT_REGCACHE_SYNC_OUT(); return; L_088ED048: { const bool branch_taken = ctx.gpr[21] == aot_gpr_2; - // nop if (branch_taken) { goto L_088ED068; } @@ -3592,7 +3332,6 @@ L_088ED048: } L_088ED050: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088ED094; } @@ -3600,12 +3339,10 @@ L_088ED050: } L_088ED058: aot_gpr_31 = (0x088ED060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ED060u) goto L_088ED060; AOT_REGCACHE_SYNC_OUT(); return; L_088ED060: { const bool branch_taken = ctx.gpr[21] != aot_gpr_2; - // nop if (branch_taken) { goto L_088ED094; } @@ -3620,7 +3357,6 @@ L_088ED068: AOT_REGCACHE_SYNC_OUT(); return; L_088ED078: aot_gpr_31 = (0x088ED080u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088ED080u) goto L_088ED080; AOT_REGCACHE_SYNC_OUT(); return; L_088ED080: @@ -3631,7 +3367,6 @@ L_088ED080: AOT_REGCACHE_SYNC_OUT(); return; L_088ED08C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED0A0; } @@ -3646,7 +3381,6 @@ L_088ED094: L_088ED0A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED0CC; } @@ -3659,7 +3393,6 @@ L_088ED0AC: AOT_REGCACHE_SYNC_OUT(); return; L_088ED0B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ED0CC; } @@ -3674,7 +3407,6 @@ L_088ED0BC: AOT_REGCACHE_SYNC_OUT(); return; L_088ED0CC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088ED0DC; } @@ -3719,7 +3451,17 @@ L_088ED0E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ED12C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3742,7 +3484,6 @@ L_088ED174: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088ED284; } @@ -3752,7 +3493,6 @@ L_088ED188: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3765,7 +3505,6 @@ L_088ED198: AOT_REGCACHE_SYNC_OUT(); return; L_088ED1A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3775,7 +3514,6 @@ L_088ED1A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3787,7 +3525,6 @@ L_088ED1B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED1FC; } @@ -3819,7 +3556,6 @@ L_088ED1FC: aot_gpr_5 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3827,7 +3563,6 @@ L_088ED1FC: } L_088ED214: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3843,7 +3578,6 @@ L_088ED21C: goto L_088ED22C; L_088ED22C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3851,7 +3585,6 @@ L_088ED22C: } L_088ED234: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088ED27C; } @@ -3883,7 +3616,6 @@ L_088ED26C: goto L_088ED27C; L_088ED27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6D8; } @@ -3891,7 +3623,6 @@ L_088ED27C: } L_088ED284: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088ED364; } @@ -3901,7 +3632,6 @@ L_088ED28C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(48)))))); aot_gpr_5 = (0u | 216u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ED364; } @@ -3911,7 +3641,6 @@ L_088ED29C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ED364; } @@ -3937,7 +3666,6 @@ L_088ED2C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088ED300; } @@ -3953,7 +3681,6 @@ L_088ED2D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ED310; } @@ -3966,7 +3693,6 @@ L_088ED300: AOT_REGCACHE_SYNC_OUT(); return; L_088ED308: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088ED330; } @@ -4010,7 +3736,6 @@ L_088ED34C: AOT_REGCACHE_SYNC_OUT(); return; L_088ED35C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6D8; } @@ -4029,7 +3754,6 @@ L_088ED364: L_088ED374: aot_gpr_5 = (aot_gpr_5 & 4096u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088ED43C; } @@ -4070,7 +3794,6 @@ L_088ED3B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4094,7 +3817,6 @@ L_088ED3D8: goto L_088ED3E8; L_088ED3E8: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4102,7 +3824,6 @@ L_088ED3E8: } L_088ED3F0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4142,7 +3863,6 @@ L_088ED43C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088ED5D0; } @@ -4152,7 +3872,6 @@ L_088ED450: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088ED5D0; } @@ -4162,7 +3881,6 @@ L_088ED460: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); aot_gpr_6 = (0u | 22u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088ED5D0; } @@ -4189,7 +3907,6 @@ L_088ED488: goto L_088ED49C; L_088ED49C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088ED4E0; } @@ -4241,7 +3958,6 @@ L_088ED4F0: goto L_088ED4F4; L_088ED4F4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088ED534; } @@ -4253,9 +3969,7 @@ L_088ED4FC: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ED558; } @@ -4265,9 +3979,7 @@ L_088ED51C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ED558; } @@ -4296,7 +4008,6 @@ L_088ED550: } L_088ED558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6D8; } @@ -4357,7 +4068,6 @@ L_088ED5BC: AOT_REGCACHE_SYNC_OUT(); return; L_088ED5C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6D8; } @@ -4365,7 +4075,6 @@ L_088ED5C8: } L_088ED5D0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088ED5F8; } @@ -4375,7 +4084,6 @@ L_088ED5D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(48)))))); aot_gpr_5 = (0u | 214u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ED5F8; } @@ -4385,7 +4093,6 @@ L_088ED5E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088ED608; } @@ -4399,7 +4106,6 @@ L_088ED5F8: goto L_088ED600; L_088ED600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4418,7 +4124,6 @@ L_088ED608: AOT_REGCACHE_SYNC_OUT(); return; L_088ED628: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6D8; } @@ -4427,7 +4132,6 @@ L_088ED628: L_088ED630: aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4445,7 +4149,6 @@ L_088ED63C: } L_088ED64C: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4460,7 +4163,6 @@ L_088ED654: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088ED6B8; } @@ -4498,7 +4200,6 @@ L_088ED6B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088ED6D0; } @@ -4506,7 +4207,6 @@ L_088ED6B8: } L_088ED6C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED6D8; } @@ -4532,7 +4232,17 @@ L_088ED6D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088ED6F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-752)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4594,7 +4304,6 @@ L_088ED6F8: aot_fpr_13 = std::bit_cast(0u); ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_5 | 0u); if (branch_taken) { @@ -4638,7 +4347,6 @@ L_088ED78C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (0u | 0u); if (branch_taken) { @@ -4672,7 +4380,6 @@ L_088ED7D8: AOT_REGCACHE_SYNC_OUT(); return; L_088ED7E0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ED950; } @@ -4685,7 +4392,6 @@ L_088ED7E8: AOT_REGCACHE_SYNC_OUT(); return; L_088ED7F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088ED950; } @@ -4715,9 +4421,7 @@ L_088ED7F8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088ED884; } @@ -4768,7 +4472,6 @@ L_088ED820: AOT_REGCACHE_SYNC_OUT(); return; L_088ED868: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088ED878; } @@ -4787,7 +4490,6 @@ L_088ED878: goto L_088ED87C; L_088ED87C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088ED900; } @@ -4857,7 +4559,6 @@ L_088ED884: AOT_REGCACHE_SYNC_OUT(); return; L_088ED8EC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088ED8FC; } @@ -4878,7 +4579,6 @@ L_088ED900: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088ED93C; } @@ -4891,7 +4591,6 @@ L_088ED910: AOT_REGCACHE_SYNC_OUT(); return; L_088ED918: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ED93C; } @@ -4922,7 +4621,6 @@ L_088ED950: AOT_REGCACHE_SYNC_OUT(); return; L_088ED958: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088ED970; } @@ -4930,7 +4628,6 @@ L_088ED958: } L_088ED960: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088ED978; } @@ -4938,7 +4635,6 @@ L_088ED960: } L_088ED968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EDA04; } @@ -4946,7 +4642,6 @@ L_088ED968: } L_088ED970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE9BC; } @@ -4959,7 +4654,6 @@ L_088ED978: AOT_REGCACHE_SYNC_OUT(); return; L_088ED980: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EDA04; } @@ -4969,7 +4663,6 @@ L_088ED988: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDA04; } @@ -5017,7 +4710,6 @@ L_088ED9D0: AOT_REGCACHE_SYNC_OUT(); return; L_088ED9E8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088ED9FC; } @@ -5031,7 +4723,6 @@ L_088ED9F0: AOT_REGCACHE_SYNC_OUT(); return; L_088ED9FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE9BC; } @@ -5041,7 +4732,6 @@ L_088EDA04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2236))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDA48; } @@ -5051,7 +4741,6 @@ L_088EDA14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2236))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDA38; } @@ -5060,7 +4749,6 @@ L_088EDA14: L_088EDA24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EDA64; } @@ -5081,7 +4769,6 @@ L_088EDA38: AOT_REGCACHE_SYNC_OUT(); return; L_088EDA40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE9BC; } @@ -5094,7 +4781,6 @@ L_088EDA48: AOT_REGCACHE_SYNC_OUT(); return; L_088EDA50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE9BC; } @@ -5103,7 +4789,6 @@ L_088EDA50: L_088EDA58: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDBF0; } @@ -5116,7 +4801,6 @@ L_088EDA64: AOT_REGCACHE_SYNC_OUT(); return; L_088EDA6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EDAA8; } @@ -5125,7 +4809,6 @@ L_088EDA6C: L_088EDA74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EDAA8; } @@ -5135,7 +4818,6 @@ L_088EDA80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDAA8; } @@ -5151,7 +4833,6 @@ L_088EDA90: goto L_088EDAA0; L_088EDAA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EDB28; } @@ -5159,7 +4840,6 @@ L_088EDAA0: } L_088EDAA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE9BC; } @@ -5168,7 +4848,6 @@ L_088EDAA8: L_088EDAB0: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDB28; } @@ -5178,7 +4857,6 @@ L_088EDABC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDB28; } @@ -5186,7 +4864,6 @@ L_088EDABC: } L_088EDACC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5196,7 +4873,6 @@ L_088EDAD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE988; } @@ -5206,7 +4882,6 @@ L_088EDAE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE988; } @@ -5217,7 +4892,6 @@ L_088EDAF4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5242,7 +4916,6 @@ L_088EDB18: } L_088EDB28: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5250,7 +4923,6 @@ L_088EDB28: } L_088EDB30: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5265,7 +4937,6 @@ L_088EDB38: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(22)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5273,14 +4944,12 @@ L_088EDB38: } L_088EDB5C: aot_gpr_31 = (0x088EDB64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EDB64u) goto L_088EDB64; AOT_REGCACHE_SYNC_OUT(); return; L_088EDB64: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EDBA8; } @@ -5291,7 +4960,6 @@ L_088EDB74: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EDBA8; } @@ -5318,7 +4986,6 @@ L_088EDBA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5328,7 +4995,6 @@ L_088EDBB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5347,7 +5013,6 @@ L_088EDBC8: AOT_REGCACHE_SYNC_OUT(); return; L_088EDBE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5360,7 +5025,6 @@ L_088EDBF0: AOT_REGCACHE_SYNC_OUT(); return; L_088EDBF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EDC20; } @@ -5372,9 +5036,7 @@ L_088EDC00: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EDC98; } @@ -5387,7 +5049,6 @@ L_088EDC20: AOT_REGCACHE_SYNC_OUT(); return; L_088EDC28: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EE048; } @@ -5401,7 +5062,6 @@ L_088EDC30: goto L_088EDC38; L_088EDC38: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088EE048; } @@ -5421,7 +5081,6 @@ L_088EDC50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE048; } @@ -5440,7 +5099,6 @@ L_088EDC64: L_088EDC70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088EE048; } @@ -5452,7 +5110,6 @@ L_088EDC7C: L_088EDC80: aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDC98; } @@ -5461,7 +5118,6 @@ L_088EDC80: L_088EDC8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_088EE048; } @@ -5469,7 +5125,6 @@ L_088EDC8C: } L_088EDC98: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088EDE40; } @@ -5481,9 +5136,7 @@ L_088EDCA0: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EDE40; } @@ -5495,9 +5148,7 @@ L_088EDCC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1364))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EDE40; } @@ -5527,9 +5178,7 @@ L_088EDCE0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EDD6C; } @@ -5580,7 +5229,6 @@ L_088EDD08: AOT_REGCACHE_SYNC_OUT(); return; L_088EDD50: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EDD60; } @@ -5599,7 +5247,6 @@ L_088EDD60: goto L_088EDD64; L_088EDD64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EDDE8; } @@ -5669,7 +5316,6 @@ L_088EDD6C: AOT_REGCACHE_SYNC_OUT(); return; L_088EDDD4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EDDE4; } @@ -5690,7 +5336,6 @@ L_088EDDE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDE24; } @@ -5703,7 +5348,6 @@ L_088EDDF8: AOT_REGCACHE_SYNC_OUT(); return; L_088EDE00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EDE24; } @@ -5729,7 +5373,6 @@ L_088EDE24: AOT_REGCACHE_SYNC_OUT(); return; L_088EDE38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -5737,7 +5380,6 @@ L_088EDE38: } L_088EDE40: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EDEEC; } @@ -5767,9 +5409,7 @@ L_088EDE48: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EDEEC; } @@ -5822,7 +5462,6 @@ L_088EDEB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDED8; } @@ -5832,7 +5471,6 @@ L_088EDEC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDEE0; } @@ -5851,7 +5489,6 @@ L_088EDEE0: goto L_088EDEE4; L_088EDEE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EDFBC; } @@ -5859,7 +5496,6 @@ L_088EDEE4: } L_088EDEEC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EDF90; } @@ -5931,7 +5567,6 @@ L_088EDF5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDF7C; } @@ -5941,7 +5576,6 @@ L_088EDF6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDF84; } @@ -5960,7 +5594,6 @@ L_088EDF84: goto L_088EDF88; L_088EDF88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EDFBC; } @@ -5970,7 +5603,6 @@ L_088EDF90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EDFB0; } @@ -5980,7 +5612,6 @@ L_088EDFA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EDFB8; } @@ -6004,7 +5635,6 @@ L_088EDFBC: AOT_REGCACHE_SYNC_OUT(); return; L_088EDFC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6015,7 +5645,6 @@ L_088EDFCC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6041,7 +5670,6 @@ L_088EDFFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE988; } @@ -6059,7 +5687,6 @@ L_088EE024: AOT_REGCACHE_SYNC_OUT(); return; L_088EE040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6069,7 +5696,6 @@ L_088EE048: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE068; } @@ -6079,7 +5705,6 @@ L_088EE058: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE244; } @@ -6088,7 +5713,6 @@ L_088EE058: L_088EE068: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE0CC; } @@ -6105,7 +5729,6 @@ L_088EE080: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE0CC; } @@ -6118,7 +5741,6 @@ L_088EE094: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE0CC; } @@ -6126,7 +5748,6 @@ L_088EE094: } L_088EE0A4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6151,7 +5772,6 @@ L_088EE0BC: } L_088EE0CC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6164,7 +5784,6 @@ L_088EE0D4: AOT_REGCACHE_SYNC_OUT(); return; L_088EE0DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6174,7 +5793,6 @@ L_088EE0E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1364))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1364))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE988; } @@ -6189,7 +5807,6 @@ L_088EE0F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(22)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE194; } @@ -6202,7 +5819,6 @@ L_088EE118: AOT_REGCACHE_SYNC_OUT(); return; L_088EE120: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EE194; } @@ -6213,7 +5829,6 @@ L_088EE128: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE194; } @@ -6263,7 +5878,6 @@ L_088EE194: AOT_REGCACHE_SYNC_OUT(); return; L_088EE19C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EE1F4; } @@ -6293,9 +5907,7 @@ L_088EE1A4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EE1E0; } @@ -6347,9 +5959,7 @@ L_088EE1F4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EE230; } @@ -6382,7 +5992,6 @@ L_088EE244: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6390,7 +5999,6 @@ L_088EE244: } L_088EE258: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088EE3A0; } @@ -6398,7 +6006,6 @@ L_088EE258: } L_088EE260: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088EE278; } @@ -6408,7 +6015,6 @@ L_088EE268: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE3A0; } @@ -6420,7 +6026,6 @@ L_088EE278: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE32C; } @@ -6435,7 +6040,6 @@ L_088EE290: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EE32C; } @@ -6445,7 +6049,6 @@ L_088EE2B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE32C; } @@ -6455,7 +6058,6 @@ L_088EE2C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE32C; } @@ -6465,7 +6067,6 @@ L_088EE2D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE32C; } @@ -6480,7 +6081,6 @@ L_088EE2E4: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EE32C; } @@ -6501,7 +6101,6 @@ L_088EE318: AOT_REGCACHE_SYNC_OUT(); return; L_088EE324: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE344; } @@ -6521,7 +6120,6 @@ L_088EE338: AOT_REGCACHE_SYNC_OUT(); return; L_088EE344: aot_gpr_31 = (0x088EE34Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EE34Cu) goto L_088EE34C; AOT_REGCACHE_SYNC_OUT(); return; L_088EE34C: @@ -6557,7 +6155,6 @@ L_088EE360: L_088EE3A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EE5DC; } @@ -6565,7 +6162,6 @@ L_088EE3A0: } L_088EE3AC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088EE5DC; } @@ -6575,7 +6171,6 @@ L_088EE3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE3D4; } @@ -6585,7 +6180,6 @@ L_088EE3C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE5DC; } @@ -6595,7 +6189,6 @@ L_088EE3D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE5B8; } @@ -6608,7 +6201,6 @@ L_088EE3E4: AOT_REGCACHE_SYNC_OUT(); return; L_088EE3EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE418; } @@ -6621,7 +6213,6 @@ L_088EE3F4: AOT_REGCACHE_SYNC_OUT(); return; L_088EE3FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE5B8; } @@ -6635,7 +6226,6 @@ L_088EE404: L_088EE40C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE5B8; } @@ -6749,9 +6339,7 @@ L_088EE494: { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EE54C; } @@ -6766,9 +6354,7 @@ L_088EE520: aot_gpr_4 = (16320u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EE580; } @@ -6815,7 +6401,6 @@ L_088EE5A0: goto L_088EE5B0; L_088EE5B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6825,7 +6410,6 @@ L_088EE5B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE988; } @@ -6839,7 +6423,6 @@ L_088EE5C8: AOT_REGCACHE_SYNC_OUT(); return; L_088EE5D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -6852,7 +6435,6 @@ L_088EE5DC: AOT_REGCACHE_SYNC_OUT(); return; L_088EE5E4: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088EE8CC; } @@ -6870,7 +6452,6 @@ L_088EE5FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE8CC; } @@ -6881,7 +6462,6 @@ L_088EE60C: goto L_088EE610; L_088EE610: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_088EE8CC; } @@ -6891,7 +6471,6 @@ L_088EE618: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EE8B8; } @@ -6909,7 +6488,6 @@ L_088EE628: AOT_REGCACHE_SYNC_OUT(); return; L_088EE644: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE8B8; } @@ -6919,7 +6497,6 @@ L_088EE64C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE8B8; } @@ -6932,7 +6509,6 @@ L_088EE65C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088EE6CC; } @@ -6944,7 +6520,6 @@ L_088EE678: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6288))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088EE69C; } @@ -6965,7 +6540,6 @@ L_088EE69C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6288))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088EE6BC; } @@ -6979,7 +6553,6 @@ L_088EE6BC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088EE678; } @@ -7094,7 +6667,6 @@ L_088EE748: { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_088EE7D8; @@ -7103,7 +6675,6 @@ L_088EE748: L_088EE7D8: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_088EE878; } @@ -7111,7 +6682,6 @@ L_088EE7D8: } L_088EE7E4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EE878; } @@ -7119,7 +6689,6 @@ L_088EE7E4: } L_088EE7EC: { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_088EE828; } @@ -7154,7 +6723,6 @@ L_088EE828: AOT_REGCACHE_SYNC_OUT(); return; L_088EE830: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_088EE8B0; } @@ -7190,7 +6758,6 @@ L_088EE864: } L_088EE878: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EE8B0; } @@ -7215,7 +6782,6 @@ L_088EE8A0: goto L_088EE8B0; L_088EE8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -7229,7 +6795,6 @@ L_088EE8B8: AOT_REGCACHE_SYNC_OUT(); return; L_088EE8C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -7237,7 +6802,6 @@ L_088EE8C4: } L_088EE8CC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088EE968; } @@ -7252,7 +6816,6 @@ L_088EE8D4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(22)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE968; } @@ -7265,7 +6828,6 @@ L_088EE8F8: AOT_REGCACHE_SYNC_OUT(); return; L_088EE900: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EE924; } @@ -7274,7 +6836,6 @@ L_088EE900: L_088EE908: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EE924; } @@ -7284,7 +6845,6 @@ L_088EE914: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EE950; } @@ -7297,7 +6857,6 @@ L_088EE924: AOT_REGCACHE_SYNC_OUT(); return; L_088EE92C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE968; } @@ -7308,9 +6867,7 @@ L_088EE934: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EE968; } @@ -7325,7 +6882,6 @@ L_088EE950: AOT_REGCACHE_SYNC_OUT(); return; L_088EE960: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -7339,7 +6895,6 @@ L_088EE968: AOT_REGCACHE_SYNC_OUT(); return; L_088EE974: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088EE988; } @@ -7358,7 +6913,6 @@ L_088EE988: AOT_REGCACHE_SYNC_OUT(); return; L_088EE990: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EE9BC; } @@ -7396,7 +6950,17 @@ L_088EE9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EE9E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-1200)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7416,7 +6980,6 @@ L_088EEA40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EEA78; } @@ -7425,7 +6988,6 @@ L_088EEA40: L_088EEA50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2116))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EEA6C; } @@ -7435,7 +6997,6 @@ L_088EEA5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EEA70; } @@ -7446,7 +7007,6 @@ L_088EEA6C: goto L_088EEA70; L_088EEA70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -7456,7 +7016,6 @@ L_088EEA78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EEA9C; } @@ -7471,7 +7030,6 @@ L_088EEA88: goto L_088EEA94; L_088EEA94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EEAF8; } @@ -7479,7 +7037,6 @@ L_088EEA94: } L_088EEA9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -7492,7 +7049,6 @@ L_088EEAA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EEAF8; } @@ -7503,7 +7059,6 @@ L_088EEAC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EEB3C; } @@ -7514,7 +7069,6 @@ L_088EEAD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088EEB3C; } @@ -7527,7 +7081,6 @@ L_088EEAE8: AOT_REGCACHE_SYNC_OUT(); return; L_088EEAF0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EEB34; } @@ -7563,9 +7116,7 @@ L_088EEAF8: aot_gpr_4 = (16704u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EEB50; } @@ -7581,7 +7132,6 @@ L_088EEB2C: } L_088EEB34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -7589,7 +7139,6 @@ L_088EEB34: } L_088EEB3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -7598,7 +7147,6 @@ L_088EEB3C: L_088EEB44: aot_gpr_5 = (0u + static_cast(-939)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EF6D8; } @@ -7611,7 +7159,6 @@ L_088EEB50: AOT_REGCACHE_SYNC_OUT(); return; L_088EEB58: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088EF6D8; } @@ -7675,7 +7222,6 @@ L_088EEBA8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088EEC00; @@ -7774,7 +7320,6 @@ L_088EEC74: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_088EED48; } @@ -7820,7 +7365,6 @@ L_088EED08: } L_088EED10: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EED1C; } @@ -7832,7 +7376,6 @@ L_088EED18: L_088EED1C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EED40; } @@ -7849,7 +7392,6 @@ L_088EED28: AOT_REGCACHE_SYNC_OUT(); return; L_088EED40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF498; } @@ -7879,7 +7421,6 @@ L_088EED48: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1108))); if (branch_taken) { @@ -7894,7 +7435,6 @@ L_088EED70: { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); goto L_088EED94; @@ -7902,9 +7442,7 @@ L_088EED70: goto L_088EED94; L_088EED94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EEEB4; } @@ -7912,9 +7450,7 @@ L_088EED94: } L_088EEDA4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EEDC0; } @@ -7969,9 +7505,7 @@ L_088EEDC8: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EF498; } @@ -8044,7 +7578,6 @@ L_088EEE70: } L_088EEE7C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EEE88; } @@ -8056,7 +7589,6 @@ L_088EEE84: L_088EEE88: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EEEAC; } @@ -8073,7 +7605,6 @@ L_088EEE94: AOT_REGCACHE_SYNC_OUT(); return; L_088EEEAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF498; } @@ -8084,7 +7615,6 @@ L_088EEEB4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 2 ? 1u : 0u); if (branch_taken) { @@ -8094,7 +7624,6 @@ L_088EEEB4: } L_088EEED0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EEEE0; } @@ -8102,7 +7631,6 @@ L_088EEED0: } L_088EEED8: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_088EF404; } @@ -8139,7 +7667,6 @@ L_088EEEE0: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (aot_gpr_29 + static_cast(112)); if (branch_taken) { @@ -8242,9 +7769,7 @@ L_088EEF64: L_088EEFCC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EF098; } @@ -8338,9 +7863,7 @@ L_088EEFE0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(8))); ctx.fpr[15] = aot_fpr_14 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EF090; } @@ -8443,7 +7966,6 @@ L_088EF0EC: aot_fpr_14 = aot_fpr_14 - ctx.fpr[15]; ctx.fpr[30] = aot_fpr_14 / aot_fpr_12; aot_gpr_31 = (0x088EF11Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EF11Cu) goto L_088EF11C; AOT_REGCACHE_SYNC_OUT(); return; L_088EF11C: @@ -8566,7 +8088,6 @@ L_088EF180: L_088EF1DC: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EF204; } @@ -8593,7 +8114,6 @@ L_088EF204: L_088EF210: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088EF224; @@ -8612,7 +8132,6 @@ L_088EF234: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_088EF254; @@ -8630,7 +8149,6 @@ L_088EF268: ctx.gpr[18] = (ctx.gpr[18] + static_cast(2)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF27C; } @@ -8646,7 +8164,6 @@ L_088EF27C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EF3E4; } @@ -8655,7 +8172,6 @@ L_088EF27C: L_088EF298: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF3E4; } @@ -8669,7 +8185,6 @@ L_088EF2A4: L_088EF2AC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088EF3E0; } @@ -8677,7 +8192,6 @@ L_088EF2AC: } L_088EF2B8: aot_gpr_31 = (0x088EF2C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088EF2C0u) goto L_088EF2C0; AOT_REGCACHE_SYNC_OUT(); return; L_088EF2C0: @@ -8781,7 +8295,6 @@ L_088EF2D8: AOT_REGCACHE_SYNC_OUT(); return; L_088EF338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF3A0; } @@ -8951,7 +8464,6 @@ L_088EF3E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF498; } @@ -9026,7 +8538,6 @@ L_088EF45C: } L_088EF468: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_088EF474; } @@ -9038,7 +8549,6 @@ L_088EF470: L_088EF474: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EF498; } @@ -9070,7 +8580,6 @@ L_088EF4B4: aot_gpr_4 = (ctx.gpr[19] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088EF50C; } @@ -9080,7 +8589,6 @@ L_088EF4C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088EF4F4; } @@ -9097,7 +8605,6 @@ L_088EF4D4: AOT_REGCACHE_SYNC_OUT(); return; L_088EF4EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF50C; } @@ -9124,7 +8631,6 @@ L_088EF51C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1104))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF5BC; } @@ -9143,7 +8649,6 @@ L_088EF52C: AOT_REGCACHE_SYNC_OUT(); return; L_088EF54C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF5DC; } @@ -9180,7 +8685,6 @@ L_088EF570: AOT_REGCACHE_SYNC_OUT(); return; L_088EF58C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF5DC; } @@ -9199,7 +8703,6 @@ L_088EF594: AOT_REGCACHE_SYNC_OUT(); return; L_088EF5B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF5DC; } @@ -9228,7 +8731,6 @@ L_088EF5EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EF620; } @@ -9241,7 +8743,6 @@ L_088EF600: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EF620; } @@ -9250,7 +8751,6 @@ L_088EF600: L_088EF610: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2116))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF620; } @@ -9310,7 +8810,6 @@ L_088EF64C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_088EF68C; @@ -9355,7 +8854,6 @@ L_088EF6C4: AOT_REGCACHE_SYNC_OUT(); return; L_088EF6D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EFAE4; } @@ -9367,7 +8865,6 @@ L_088EF6D8: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16576u << 16u); if (branch_taken) { @@ -9379,9 +8876,7 @@ L_088EF6F8: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EF74C; } @@ -9393,9 +8888,7 @@ L_088EF710: L_088EF714: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EFAE4; } @@ -9417,9 +8910,7 @@ L_088EF730: L_088EF738: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EFAE4; } @@ -9488,7 +8979,6 @@ L_088EF7C8: AOT_REGCACHE_SYNC_OUT(); return; L_088EF7EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088EF818; } @@ -9536,7 +9026,6 @@ L_088EF84C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088EF8AC; } @@ -9547,7 +9036,6 @@ L_088EF85C: goto L_088EF860; L_088EF860: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF8AC; } @@ -9560,7 +9048,6 @@ L_088EF868: AOT_REGCACHE_SYNC_OUT(); return; L_088EF870: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EF8A8; } @@ -9570,7 +9057,6 @@ L_088EF878: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF8A8; } @@ -9579,7 +9065,6 @@ L_088EF878: L_088EF888: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088EF8A8; } @@ -9588,9 +9073,7 @@ L_088EF888: L_088EF894: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EF8AC; } @@ -9619,7 +9102,6 @@ L_088EF8AC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088EF908; } @@ -9629,7 +9111,6 @@ L_088EF8D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EF908; } @@ -9725,9 +9206,7 @@ L_088EF918: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EF988; } @@ -9848,7 +9327,6 @@ L_088EF9A4: aot_fpr_14 = std::bit_cast(aot_gpr_5); aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_088EFA24; @@ -9857,7 +9335,6 @@ L_088EF9A4: L_088EFA24: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088EFA38; @@ -9869,7 +9346,6 @@ L_088EFA38: aot_fpr_14 = std::bit_cast(aot_gpr_5); aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088EFA58; @@ -9903,7 +9379,6 @@ L_088EFA88: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_088EFAAC; @@ -9938,7 +9413,6 @@ L_088EFAD8: L_088EFAE4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -9951,7 +9425,6 @@ L_088EFAF0: AOT_REGCACHE_SYNC_OUT(); return; L_088EFAF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -9960,7 +9433,6 @@ L_088EFAF8: L_088EFB00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -9973,7 +9445,6 @@ L_088EFB0C: AOT_REGCACHE_SYNC_OUT(); return; L_088EFB14: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EFB28; } @@ -10010,7 +9481,17 @@ L_088EFB28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088EFB70: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -10107,7 +9588,6 @@ L_088EFC70: L_088EFC84: ctx.gpr[30] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088EFCA4; } @@ -10125,7 +9605,6 @@ L_088EFCA0: goto L_088EFCA4; L_088EFCA4: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088EFCC0; } @@ -10182,9 +9661,7 @@ L_088EFCC0: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EFD64; } @@ -10207,7 +9684,6 @@ L_088EFD24: AOT_REGCACHE_SYNC_OUT(); return; L_088EFD30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EFD5C; } @@ -10230,7 +9706,6 @@ L_088EFD44: AOT_REGCACHE_SYNC_OUT(); return; L_088EFD5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 155u, 0x088F0C30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10248,7 +9723,6 @@ L_088EFD6C: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(ctx.fpr[22])); goto L_088EFE20; @@ -10267,9 +9741,7 @@ L_088EFD98: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(ctx.fpr[22])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 18u, 0x088F00F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10279,9 +9751,7 @@ L_088EFDB0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(ctx.fpr[22])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 18u, 0x088F00F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10328,9 +9798,7 @@ L_088EFE14: } L_088EFE20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 12u, 0x088F009Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10343,9 +9811,7 @@ L_088EFE30: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EFED4; } @@ -10365,9 +9831,7 @@ L_088EFE60: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088EFED4; } @@ -10390,7 +9854,6 @@ L_088EFE94: AOT_REGCACHE_SYNC_OUT(); return; L_088EFEA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088EFECC; } @@ -10413,7 +9876,6 @@ L_088EFEB4: AOT_REGCACHE_SYNC_OUT(); return; L_088EFECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 155u, 0x088F0C30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10423,7 +9885,6 @@ L_088EFED4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(604))); aot_gpr_4 = (49024u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -10481,9 +9942,7 @@ L_088EFF4C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(ctx.fpr[22])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 18u, 0x088F00F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10493,9 +9952,7 @@ L_088EFF64: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(ctx.fpr[22])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 18u, 0x088F00F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10550,7 +10007,6 @@ L_088EFFD4: AOT_REGCACHE_SYNC_OUT(); return; L_088EFFE0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 6u, 0x088F0048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0059.cpp b/profiles/vcs/generated/generated_unit_0059.cpp index 5a67792..20628b7 100644 --- a/profiles/vcs/generated/generated_unit_0059.cpp +++ b/profiles/vcs/generated/generated_unit_0059.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0059[4092] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 5, 6, 0, 7, 0, 0, 0, 0, 8, 0, 0, 9, 0, 10, 0, - 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 15, 0, 16, 0, 0, 0, 0, 17, 0, 0, 18, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, 30, 0, 0, 0, 31, 0, 32, 0, - 0, 0, 33, 34, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 38, 0, 0, 39, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 58, 0, 0, 59, 0, 0, 0, 0, - 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 68, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 70, 71, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 77, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 81, 0, 82, - 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, - 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 99, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 102, 103, 0, 0, 104, 0, - 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 113, 0, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 122, - 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 126, 0, 127, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 130, 0, 0, - 131, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 135, 0, 0, 0, 136, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 139, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 143, 0, 0, - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, - 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, - 152, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 159, 0, 0, 160, 0, 0, - 0, 0, 0, 0, 161, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, 0, 168, - 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 174, 0, 0, 175, 0, 0, 176, 0, - 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 181, 0, 182, 0, 183, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 0, 187, 0, 0, 188, 0, 0, 0, 189, 190, 0, 191, 0, 0, 0, 192, - 193, 0, 194, 0, 0, 0, 195, 196, 0, 0, 0, 0, 197, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 200, 0, 0, 201, 0, 202, 0, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, - 0, 207, 0, 208, 209, 0, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, 213, 0, 214, 215, 0, 216, 217, 0, 218, 0, 0, 0, 219, 0, 0, 0, - 220, 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 223, 224, 0, 225, 226, 0, 227, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 230, 0, 231, 0, 0, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 235, 0, 236, 237, 0, 238, 0, 0, 0, 239, 0, 0, - 0, 0, 0, 0, 0, 240, 241, 0, 0, 0, 242, 243, 0, 244, 245, 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 249, - 0, 250, 0, 0, 0, 251, 0, 0, 0, 252, 0, 253, 0, 0, 0, 254, 0, 255, 256, 0, 257, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, - 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 265, 0, 0, 0, 266, 0, 0, 0, 0, 267, 268, 0, 0, 269, 0, 0, - 0, 270, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 0, 276, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 284, 0, - 285, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, - 290, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, - 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, 0, 303, 0, 0, - 0, 304, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 0, 311, - 0, 0, 0, 0, 0, 312, 313, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 317, 0, 0, 318, 0, - 319, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 0, 324, 325, 0, 326, 0, 0, 0, 0, 327, - 0, 0, 328, 0, 329, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 334, 0, 335, 0, 0, 0, 0, 336, - 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 340, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, - 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 348, 0, 0, 0, 349, - 0, 350, 0, 0, 0, 351, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, - 354, 0, 355, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, - 0, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 367, 368, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, - 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 0, 0, 0, - 0, 0, 387, 0, 0, 0, 0, 388, 389, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 392, 393, 0, 0, 394, 0, 0, 0, 0, 395, - 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 0, 0, 402, - 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, - 408, 0, 0, 0, 0, 409, 410, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 413, 414, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, - 0, 0, 0, 0, 417, 0, 0, 0, 418, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 423, 0, 0, - 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 432, 0, 0, - 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, - 0, 0, 436, 0, 0, 0, 0, 0, 437, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 442, - 0, 0, 0, 0, 443, 0, 444, 0, 445, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 448, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, - 0, 455, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 459, 0, 460, 0, 0, 0, - 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 469, 0, 470, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, 0, - 0, 0, 0, 0, 476, 477, 0, 0, 478, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 489, 0, 0, 0, - 0, 0, 0, 0, 490, 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 495, 0, 0, 496, 0, - 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, - 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 505, 0, - 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 515, 0, 516, 517, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, - 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 525, 0, 526, 0, 527, 0, 528, 0, 529, 0, 0, 0, 0, 530, 531, 0, 532, 0, 0, - 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, - 537, 0, 538, 0, 539, 0, 0, 0, 0, 540, 0, 541, 0, 542, 0, 543, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, - 547, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 550, 0, 0, 0, 551, 0, 552, 0, 0, 553, 0, 554, 0, 555, 0, 0, 0, 0, 556, 0, - 557, 0, 558, 0, 559, 0, 0, 560, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, - 565, 566, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, - 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 572, 0, 0, 573, 0, 574, 575, 0, 0, 0, 0, 576, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 582, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 584, 0, 0, 0, 585, 586, 0, 0, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, - 0, 589, 0, 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, - 0, 0, 600, 0, 601, 0, 0, 602, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 606, 0, 607, 0, 608, 0, 0, 0, 0, 609, 0, 0, 0, - 610, 0, 0, 0, 0, 0, 0, 611, 0, 612, 0, 0, 613, 0, 0, 0, 0, 0, 0, 614, 615, 0, 0, 616, 0, 617, 0, 0, 618, 0, 0, 0, - 0, 0, 0, 619, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 627, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, - 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, - 0, 641, 0, 0, 0, 642, 643, 0, 644, 0, 0, 0, 645, 0, 0, 646, 0, 647, 0, 0, 0, 648, 0, 0, 649, 650, 0, 0, 0, 651, 0, 652, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 654, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, - 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 659, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 663, 0, 664, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 667, 0, 0, 668, - 0, 669, 0, 670, 671, 0, 672, 0, 673, 0, 674, 0, 0, 675, 0, 0, 676, 0, 0, 677, 0, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, - 680, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 685, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, - 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 693, 0, 0, 694, 0, 0, 695, 0, 0, 696, 0, 0, 697, 0, 0, 0, 698, 0, 699, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 701, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 705, 0, 706, 0, 0, 0, - 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 710, 0, 0, 711, 0, 0, 712, 0, 0, 713, 0, - 714, 0, 715, 0, 716, 0, 717, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, 721, 0, 0, 722, 0, 723, 0, 724, 0, 725, 0, 726, - 0, 727, 0, 0, 728, 0, 0, 729, 0, 0, 730, 0, 731, 732, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, - 0, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 0, 737, 0, 0, 0, 0, 738, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 741, 742, 0, - 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 745, 0, 746, 0, 747, 0, 748, 0, 749, 0, 750, 0, 0, 0, 0, 0, - 751, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 0, 0, 756, 0, 0, 0, 757, - 0, 0, 0, 758, 0, 0, 0, 759, 0, 0, 0, 760, 0, 0, 0, 761, 0, 0, 0, 762, 0, 0, 0, 763, 0, 0, 0, 764, 0, 0, 0, 765, - 0, 0, 0, 766, 0, 767, 0, 768, 0, 769, 0, 770, 0, 0, 0, 771, 0, 772, 0, 773, 0, 0, 0, 774, 0, 775, 0, 776, 0, 777, 0, 0, - 0, 0, 0, 778, 779, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 783, 0, 0, 784, 0, 0, 785, 0, 0, 0, 0, 0, 786, 0, 0, 787, 0, 788, - 0, 0, 789, 0, 790, 0, 0, 791, 0, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 800, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 0, 0, 804, 0, 805, 0, 806, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0059[64] = { + 0x5214848852164211ull, 0x5180830016002C00ull, 0x00208A480400001Cull, 0x1084210880108421ull, + 0x0884810409040900ull, 0x0400002B00203020ull, 0x40824104A8041828ull, 0x4C205840AAA20400ull, + 0x0841442014440210ull, 0x3081610288402110ull, 0x2105108051100841ull, 0x0200020221008440ull, + 0x2440800040001205ull, 0x4944220488A42110ull, 0x8B12248005484220ull, 0x10210852000A10C5ull, + 0x408B6301116D451Aull, 0x88116C6022D14228ull, 0x4000000400968A22ull, 0x0031624226114888ull, + 0x00820901504A4100ull, 0x20A0948204022409ull, 0x4902406082890842ull, 0x8521221485908421ull, + 0x8C00C005800B0014ull, 0x4810404508000062ull, 0x80000AC008604088ull, 0x0AAA204002412A01ull, + 0x8510144084C20584ull, 0x2130816102880840ull, 0x2022021021440510ull, 0x4004000120502000ull, + 0x0041015082105104ull, 0x1482008202208A41ull, 0x0400400000100002ull, 0x250200802A440800ull, + 0x1120044802302530ull, 0x080010104C040450ull, 0x22502802440A1002ull, 0x021A200000000080ull, + 0x2C2AB0000A012001ull, 0x0844AA152020000Aull, 0x0221089542A51811ull, 0x121A488080008023ull, + 0x220C420012408020ull, 0x10AA249455512482ull, 0x0000111812981281ull, 0x0000000000904000ull, + 0x0000012100001000ull, 0x0120800000002000ull, 0x2000020000000000ull, 0x8004040000000024ull, + 0x402C0000A3229162ull, 0x9020020055004A10ull, 0x000040112049255Aull, 0x4200004000280820ull, + 0x0015124900022008ull, 0x4924040115000920ull, 0x40023492AA922255ull, 0x0555040470221088ull, + 0x8888888889042101ull, 0x200001182A8A8AA8ull, 0x15488894A4124080ull, 0x0A81401400000800ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0059[64] = { + 1u, 20u, 33u, 43u, 55u, 66u, 75u, 89u, 105u, 117u, 131u, 144u, 152u, 161u, 177u, 193u, + 207u, 230u, 250u, 261u, 278u, 290u, 304u, 319u, 337u, 350u, 361u, 372u, 387u, 403u, 417u, 429u, + 436u, 448u, 461u, 465u, 476u, 490u, 500u, 513u, 519u, 533u, 547u, 565u, 578u, 589u, 610u, 623u, + 626u, 630u, 634u, 636u, 641u, 657u, 669u, 683u, 690u, 701u, 714u, 735u, 751u, 766u, 782u, 799u, }; void recomp_unit_0059_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0059_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088F0000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0059[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0059[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0059[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088F0000; @@ -1014,7 +921,6 @@ L_088F0044: goto L_088F0048; L_088F0048: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F0070; } @@ -1023,9 +929,7 @@ L_088F0048: L_088F0050: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0070; } @@ -1038,7 +942,6 @@ L_088F0064: goto L_088F0070; L_088F0070: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F00F0; } @@ -1047,9 +950,7 @@ L_088F0070: L_088F0078: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F00F0; } @@ -1077,9 +978,7 @@ L_088F009C: L_088F00A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F00C8; } @@ -1092,7 +991,6 @@ L_088F00BC: goto L_088F00C8; L_088F00C8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F00F0; } @@ -1101,9 +999,7 @@ L_088F00C8: L_088F00D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F00F0; } @@ -1116,7 +1012,6 @@ L_088F00E4: goto L_088F00F0; L_088F00F0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F012C; } @@ -1132,7 +1027,6 @@ L_088F00F8: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[28] = ctx.fpr[28] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_088F0128; @@ -1143,7 +1037,6 @@ L_088F0128: goto L_088F012C; L_088F012C: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F0168; } @@ -1159,7 +1052,6 @@ L_088F0134: { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_088F0164; @@ -1170,7 +1062,6 @@ L_088F0164: goto L_088F0168; L_088F0168: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F01A4; } @@ -1186,7 +1077,6 @@ L_088F0170: { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_088F01A0; @@ -1212,9 +1102,7 @@ L_088F01BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_fpr_22 = aot_fpr_22 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(ctx.fpr[26])) && ctx.fpr[24] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F01E0; } @@ -1225,9 +1113,7 @@ L_088F01DC: goto L_088F01E0; L_088F01E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F01F8; } @@ -1243,7 +1129,6 @@ L_088F01F0: } L_088F01F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(96), std::bit_cast(aot_fpr_22)); goto L_088F0210; @@ -1321,7 +1206,6 @@ L_088F02A4: } L_088F02AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(76))); if (branch_taken) { @@ -1349,7 +1233,6 @@ L_088F02D4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1280), static_cast(aot_gpr_4)); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(72))); if (branch_taken) { @@ -1360,9 +1243,7 @@ L_088F02D4: L_088F0300: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F038C; } @@ -1371,9 +1252,7 @@ L_088F0300: L_088F0314: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F038C; } @@ -1382,9 +1261,7 @@ L_088F0314: L_088F0328: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0350; } @@ -1393,9 +1270,7 @@ L_088F0328: L_088F033C: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F038C; } @@ -1410,9 +1285,7 @@ L_088F0350: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[14]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[14] = std::bit_cast(0x7FC00000u); else ctx.fpr[14] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F042C; } @@ -1431,9 +1304,7 @@ L_088F037C: L_088F038C: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F042C; } @@ -1442,9 +1313,7 @@ L_088F038C: L_088F03A0: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F042C; } @@ -1453,9 +1322,7 @@ L_088F03A0: L_088F03B4: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F042C; } @@ -1464,9 +1331,7 @@ L_088F03B4: L_088F03C8: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F03F0; } @@ -1475,9 +1340,7 @@ L_088F03C8: L_088F03DC: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(aot_fpr_20)) && ctx.fpr[14] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F042C; } @@ -1493,9 +1356,7 @@ L_088F03F0: ctx.fpr[16] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[14]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[14] = std::bit_cast(0x7FC00000u); else ctx.fpr[14] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F042C; } @@ -1511,9 +1372,7 @@ L_088F042C: aot_gpr_4 = (aot_gpr_4 | 39322u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F046C; } @@ -1523,7 +1382,6 @@ L_088F0448: aot_gpr_4 = (16000u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088F0460; @@ -1532,7 +1390,6 @@ L_088F0448: L_088F0460: ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F0534; } @@ -1543,7 +1400,6 @@ L_088F046C: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -1555,9 +1411,7 @@ L_088F0488: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F04C8; } @@ -1568,7 +1422,6 @@ L_088F04A0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088F04BC; @@ -1577,7 +1430,6 @@ L_088F04A0: L_088F04BC: ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F0534; } @@ -1586,9 +1438,7 @@ L_088F04BC: L_088F04C8: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0534; } @@ -1596,9 +1446,7 @@ L_088F04C8: } L_088F04DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0534; } @@ -1612,9 +1460,7 @@ L_088F04EC: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); { const float fs = ctx.fpr[14]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0534; } @@ -1625,7 +1471,6 @@ L_088F0514: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088F0530; @@ -1640,9 +1485,7 @@ L_088F0534: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0584; } @@ -1657,7 +1500,6 @@ L_088F0554: aot_fpr_22 = aot_fpr_12 / ctx.fpr[14]; aot_fpr_22 = ctx.fpr[30] - aot_fpr_22; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_088F0580; @@ -1673,7 +1515,6 @@ L_088F0584: AOT_REGCACHE_SYNC_OUT(); return; L_088F058C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F0614; } @@ -1759,9 +1600,7 @@ L_088F0648: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F067C; } @@ -1774,7 +1613,6 @@ L_088F066C: AOT_REGCACHE_SYNC_OUT(); return; L_088F0674: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F0688; } @@ -1804,9 +1642,7 @@ L_088F06A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(24))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F06C4; } @@ -1854,9 +1690,7 @@ L_088F06F8: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0744; } @@ -1883,7 +1717,6 @@ L_088F0744: goto L_088F0754; L_088F0754: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F0764; } @@ -1900,7 +1733,6 @@ L_088F0764: AOT_REGCACHE_SYNC_OUT(); return; L_088F076C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F097C; } @@ -1908,7 +1740,6 @@ L_088F076C: } L_088F0774: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088F07B0; } @@ -1939,7 +1770,6 @@ L_088F07AC: goto L_088F07B0; L_088F07B0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088F07EC; } @@ -1971,7 +1801,6 @@ L_088F07E8: L_088F07EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F08C0; } @@ -1991,9 +1820,7 @@ L_088F07F8: L_088F0810: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0870; } @@ -2029,7 +1856,6 @@ L_088F0858: AOT_REGCACHE_SYNC_OUT(); return; L_088F0868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F097C; } @@ -2066,7 +1892,6 @@ L_088F08A8: AOT_REGCACHE_SYNC_OUT(); return; L_088F08B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F097C; } @@ -2086,7 +1911,6 @@ L_088F08C0: L_088F08D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u + static_cast(-2)); if (branch_taken) { @@ -2156,7 +1980,6 @@ L_088F096C: goto L_088F097C; L_088F097C: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_088F09B8; } @@ -2187,7 +2010,6 @@ L_088F09B4: goto L_088F09B8; L_088F09B8: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_088F09F4; } @@ -2219,7 +2041,6 @@ L_088F09F0: L_088F09F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F0AC8; } @@ -2239,9 +2060,7 @@ L_088F0A00: L_088F0A18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0A78; } @@ -2277,7 +2096,6 @@ L_088F0A60: AOT_REGCACHE_SYNC_OUT(); return; L_088F0A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F0B84; } @@ -2314,7 +2132,6 @@ L_088F0AB0: AOT_REGCACHE_SYNC_OUT(); return; L_088F0AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F0B84; } @@ -2334,7 +2151,6 @@ L_088F0AC8: L_088F0AE0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u + static_cast(-2)); if (branch_taken) { @@ -2408,9 +2224,7 @@ L_088F0B84: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0C30; } @@ -2443,7 +2257,6 @@ L_088F0BE4: AOT_REGCACHE_SYNC_OUT(); return; L_088F0C00: aot_gpr_31 = (0x088F0C08u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F0C08u) goto L_088F0C08; AOT_REGCACHE_SYNC_OUT(); return; L_088F0C08: @@ -2486,7 +2299,17 @@ L_088F0C30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F0C78: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -2510,7 +2333,6 @@ L_088F0CBC: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088F0D5C; } @@ -2526,7 +2348,6 @@ L_088F0CD8: L_088F0CE8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F0D54; } @@ -2537,9 +2358,7 @@ L_088F0CF4: aot_gpr_4 = (16256u << 16u); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0D54; } @@ -2579,7 +2398,6 @@ L_088F0D48: } L_088F0D54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -2605,7 +2423,6 @@ L_088F0D6C: L_088F0D7C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F0DD8; } @@ -2616,9 +2433,7 @@ L_088F0D88: aot_gpr_4 = (16256u << 16u); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0DD8; } @@ -2651,7 +2466,6 @@ L_088F0DC8: } L_088F0DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -2666,7 +2480,6 @@ L_088F0DE0: L_088F0DEC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F0E58; } @@ -2677,9 +2490,7 @@ L_088F0DF8: aot_gpr_4 = (16256u << 16u); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F0E58; } @@ -2719,7 +2530,6 @@ L_088F0E4C: } L_088F0E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -2746,7 +2556,6 @@ L_088F0E68: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088F0EB4; } @@ -2755,7 +2564,6 @@ L_088F0E68: L_088F0E9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088F0EB4; } @@ -2776,7 +2584,6 @@ L_088F0EB4: L_088F0EC4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F0EE4; } @@ -2794,7 +2601,6 @@ L_088F0EE0: goto L_088F0EE4; L_088F0EE4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F0F00; } @@ -2812,7 +2618,6 @@ L_088F0EFC: goto L_088F0F00; L_088F0F00: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F0F1C; } @@ -2833,7 +2638,6 @@ L_088F0F1C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(614)))))); aot_gpr_6 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088F1028; } @@ -2842,9 +2646,7 @@ L_088F0F1C: L_088F0F30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1028; } @@ -2852,7 +2654,6 @@ L_088F0F30: } L_088F0F44: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F1028; } @@ -2872,7 +2673,6 @@ L_088F0F4C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); ctx.gpr[7] = (0u | 16u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088F0F90; } @@ -2881,7 +2681,6 @@ L_088F0F4C: L_088F0F84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088F125C; } @@ -2889,7 +2688,6 @@ L_088F0F84: } L_088F0F90: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F0FC0; } @@ -2898,9 +2696,7 @@ L_088F0F90: L_088F0F98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F125C; } @@ -2909,9 +2705,7 @@ L_088F0F98: L_088F0FAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F125C; } @@ -2951,7 +2745,6 @@ L_088F0FF0: AOT_REGCACHE_SYNC_OUT(); return; L_088F1004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -2969,7 +2762,6 @@ L_088F1010: AOT_REGCACHE_SYNC_OUT(); return; L_088F1020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -2977,9 +2769,7 @@ L_088F1020: } L_088F1028: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[24])) && aot_fpr_20 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1040; } @@ -2987,7 +2777,6 @@ L_088F1028: } L_088F1038: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F1070; } @@ -2995,7 +2784,6 @@ L_088F1038: } L_088F1040: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F104C; } @@ -3006,7 +2794,6 @@ L_088F1048: goto L_088F104C; L_088F104C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F1058; } @@ -3017,7 +2804,6 @@ L_088F1054: goto L_088F1058; L_088F1058: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -3035,9 +2821,7 @@ L_088F1060: } L_088F1070: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1174; } @@ -3049,9 +2833,7 @@ L_088F1080: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F10A4; } @@ -3062,9 +2844,7 @@ L_088F10A0: goto L_088F10A4; L_088F10A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F10B8; } @@ -3075,7 +2855,6 @@ L_088F10B4: goto L_088F10B8; L_088F10B8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F10C4; } @@ -3086,7 +2865,6 @@ L_088F10C0: goto L_088F10C4; L_088F10C4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088F1158; } @@ -3109,7 +2887,6 @@ L_088F10DC: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088F1114; } @@ -3125,7 +2902,6 @@ L_088F10F8: AOT_REGCACHE_SYNC_OUT(); return; L_088F110C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F115C; } @@ -3151,7 +2927,6 @@ L_088F1124: AOT_REGCACHE_SYNC_OUT(); return; L_088F1138: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F115C; } @@ -3166,7 +2941,6 @@ L_088F1140: AOT_REGCACHE_SYNC_OUT(); return; L_088F1150: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F115C; } @@ -3177,7 +2951,6 @@ L_088F1158: goto L_088F115C; L_088F115C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -3199,9 +2972,7 @@ L_088F1174: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1198; } @@ -3212,9 +2983,7 @@ L_088F1194: goto L_088F1198; L_088F1198: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F11AC; } @@ -3225,7 +2994,6 @@ L_088F11A8: goto L_088F11AC; L_088F11AC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F11B8; } @@ -3236,7 +3004,6 @@ L_088F11B4: goto L_088F11B8; L_088F11B8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088F1244; } @@ -3259,7 +3026,6 @@ L_088F11D0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088F1204; } @@ -3274,7 +3040,6 @@ L_088F11EC: AOT_REGCACHE_SYNC_OUT(); return; L_088F11FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1248; } @@ -3284,7 +3049,6 @@ L_088F1204: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F122C; } @@ -3299,7 +3063,6 @@ L_088F1214: AOT_REGCACHE_SYNC_OUT(); return; L_088F1224: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1248; } @@ -3314,7 +3077,6 @@ L_088F122C: AOT_REGCACHE_SYNC_OUT(); return; L_088F123C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1248; } @@ -3325,7 +3087,6 @@ L_088F1244: goto L_088F1248; L_088F1248: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F125C; } @@ -3354,7 +3115,17 @@ L_088F125C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F1288: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-160)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3402,7 +3173,6 @@ L_088F132C: AOT_REGCACHE_SYNC_OUT(); return; L_088F1338: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F1368; } @@ -3450,7 +3220,6 @@ L_088F1384: L_088F1398: ctx.gpr[30] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088F13B8; } @@ -3468,7 +3237,6 @@ L_088F13B4: goto L_088F13B8; L_088F13B8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088F13D4; } @@ -3525,9 +3293,7 @@ L_088F13D4: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1478; } @@ -3550,7 +3316,6 @@ L_088F1438: AOT_REGCACHE_SYNC_OUT(); return; L_088F1444: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F1470; } @@ -3573,7 +3338,6 @@ L_088F1458: AOT_REGCACHE_SYNC_OUT(); return; L_088F1470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1F80; } @@ -3591,7 +3355,6 @@ L_088F1480: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(aot_fpr_20)); goto L_088F1534; @@ -3610,9 +3373,7 @@ L_088F14AC: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(aot_fpr_20)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1808; } @@ -3622,9 +3383,7 @@ L_088F14C4: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(aot_fpr_20)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1808; } @@ -3671,9 +3430,7 @@ L_088F1528: } L_088F1534: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F17B4; } @@ -3686,7 +3443,6 @@ L_088F1544: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] + static_cast(32)); if (branch_taken) { @@ -3699,9 +3455,7 @@ L_088F1568: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F15DC; } @@ -3724,7 +3478,6 @@ L_088F159C: AOT_REGCACHE_SYNC_OUT(); return; L_088F15A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F15D4; } @@ -3747,7 +3500,6 @@ L_088F15BC: AOT_REGCACHE_SYNC_OUT(); return; L_088F15D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1F80; } @@ -3757,7 +3509,6 @@ L_088F15DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(604))); aot_gpr_4 = (49024u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3809,7 +3560,6 @@ L_088F164C: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F1808; } @@ -3825,9 +3575,7 @@ L_088F1664: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(aot_fpr_20)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1808; } @@ -3837,9 +3585,7 @@ L_088F167C: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), std::bit_cast(aot_fpr_20)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1808; } @@ -3894,7 +3640,6 @@ L_088F16EC: AOT_REGCACHE_SYNC_OUT(); return; L_088F16F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F1760; } @@ -3946,7 +3691,6 @@ L_088F175C: goto L_088F1760; L_088F1760: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F1788; } @@ -3955,9 +3699,7 @@ L_088F1760: L_088F1768: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1788; } @@ -3970,7 +3712,6 @@ L_088F177C: goto L_088F1788; L_088F1788: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088F1808; } @@ -3979,9 +3720,7 @@ L_088F1788: L_088F1790: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1808; } @@ -4009,9 +3748,7 @@ L_088F17B4: L_088F17C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F17E0; } @@ -4024,7 +3761,6 @@ L_088F17D4: goto L_088F17E0; L_088F17E0: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088F1808; } @@ -4033,9 +3769,7 @@ L_088F17E0: L_088F17E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1808; } @@ -4048,7 +3782,6 @@ L_088F17FC: goto L_088F1808; L_088F1808: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F1844; } @@ -4064,7 +3797,6 @@ L_088F1810: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[24] = ctx.fpr[24] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_088F1840; @@ -4075,7 +3807,6 @@ L_088F1840: goto L_088F1844; L_088F1844: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F1880; } @@ -4091,7 +3822,6 @@ L_088F184C: { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088F187C; @@ -4102,7 +3832,6 @@ L_088F187C: goto L_088F1880; L_088F1880: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088F18BC; } @@ -4118,7 +3847,6 @@ L_088F1888: { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088F18B8; @@ -4136,9 +3864,7 @@ L_088F18BC: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_12 / aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(ctx.fpr[28])) && ctx.fpr[26] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F18EC; } @@ -4149,9 +3875,7 @@ L_088F18E8: goto L_088F18EC; L_088F18EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1904; } @@ -4167,9 +3891,7 @@ L_088F18FC: } L_088F1904: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1918; } @@ -4223,9 +3945,7 @@ L_088F1980: } L_088F1988: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1A9C; } @@ -4237,7 +3957,6 @@ L_088F1998: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -4249,9 +3968,7 @@ L_088F19B8: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F19F8; } @@ -4262,7 +3979,6 @@ L_088F19D0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_088F19EC; @@ -4271,7 +3987,6 @@ L_088F19D0: L_088F19EC: ctx.fpr[26] = std::bit_cast(std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1A58; } @@ -4280,9 +3995,7 @@ L_088F19EC: L_088F19F8: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1A58; } @@ -4290,9 +4003,7 @@ L_088F19F8: } L_088F1A0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1A58; } @@ -4303,9 +4014,7 @@ L_088F1A1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1A58; } @@ -4316,7 +4025,6 @@ L_088F1A38: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_088F1A54; @@ -4328,9 +4036,7 @@ L_088F1A54: L_088F1A58: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1A9C; } @@ -4345,7 +4051,6 @@ L_088F1A6C: aot_fpr_20 = aot_fpr_12 / aot_fpr_13; aot_fpr_20 = ctx.fpr[30] - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_088F1A98; @@ -4361,7 +4066,6 @@ L_088F1A9C: AOT_REGCACHE_SYNC_OUT(); return; L_088F1AA4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F1AFC; } @@ -4403,9 +4107,7 @@ L_088F1B00: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1B34; } @@ -4418,7 +4120,6 @@ L_088F1B24: AOT_REGCACHE_SYNC_OUT(); return; L_088F1B2C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F1B40; } @@ -4437,9 +4138,7 @@ L_088F1B40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1116))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1B64; } @@ -4465,9 +4164,7 @@ L_088F1B64: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1BB4; } @@ -4494,7 +4191,6 @@ L_088F1BB4: goto L_088F1BC4; L_088F1BC4: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F1BD4; } @@ -4511,7 +4207,6 @@ L_088F1BD4: AOT_REGCACHE_SYNC_OUT(); return; L_088F1BDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F1D5C; } @@ -4519,7 +4214,6 @@ L_088F1BDC: } L_088F1BE4: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_088F1C20; } @@ -4550,7 +4244,6 @@ L_088F1C1C: goto L_088F1C20; L_088F1C20: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_088F1C5C; } @@ -4582,7 +4275,6 @@ L_088F1C58: L_088F1C5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F1CE8; } @@ -4591,9 +4283,7 @@ L_088F1C5C: L_088F1C68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1CB0; } @@ -4618,7 +4308,6 @@ L_088F1C98: AOT_REGCACHE_SYNC_OUT(); return; L_088F1CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1D5C; } @@ -4644,7 +4333,6 @@ L_088F1CD0: AOT_REGCACHE_SYNC_OUT(); return; L_088F1CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1D5C; } @@ -4653,7 +4341,6 @@ L_088F1CE0: L_088F1CE8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (0u + static_cast(-2)); if (branch_taken) { @@ -4701,7 +4388,6 @@ L_088F1D4C: goto L_088F1D5C; L_088F1D5C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088F1D98; } @@ -4732,7 +4418,6 @@ L_088F1D94: goto L_088F1D98; L_088F1D98: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_088F1DD4; } @@ -4764,7 +4449,6 @@ L_088F1DD0: L_088F1DD4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F1E60; } @@ -4773,9 +4457,7 @@ L_088F1DD4: L_088F1DE0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1E28; } @@ -4800,7 +4482,6 @@ L_088F1E10: AOT_REGCACHE_SYNC_OUT(); return; L_088F1E20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1ED4; } @@ -4826,7 +4507,6 @@ L_088F1E48: AOT_REGCACHE_SYNC_OUT(); return; L_088F1E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F1ED4; } @@ -4835,7 +4515,6 @@ L_088F1E58: L_088F1E60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (0u + static_cast(-2)); if (branch_taken) { @@ -4887,9 +4566,7 @@ L_088F1ED4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F1F80; } @@ -4922,7 +4599,6 @@ L_088F1F34: AOT_REGCACHE_SYNC_OUT(); return; L_088F1F50: aot_gpr_31 = (0x088F1F58u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F1F58u) goto L_088F1F58; AOT_REGCACHE_SYNC_OUT(); return; L_088F1F58: @@ -4965,7 +4641,17 @@ L_088F1F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F1FC8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-272)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4982,7 +4668,6 @@ L_088F1FF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F2038; } @@ -5003,7 +4688,6 @@ L_088F2020: ctx.gpr[19] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F20A0; } @@ -5011,7 +4695,6 @@ L_088F2020: } L_088F2030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5057,7 +4740,6 @@ L_088F207C: AOT_REGCACHE_SYNC_OUT(); return; L_088F2090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5065,7 +4747,6 @@ L_088F2090: } L_088F2098: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5118,7 +4799,6 @@ L_088F2100: L_088F2118: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5126,7 +4806,6 @@ L_088F2118: } L_088F2124: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5154,7 +4833,6 @@ L_088F2154: ctx.gpr[19] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5207,7 +4885,6 @@ L_088F21C4: L_088F21DC: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5215,7 +4892,6 @@ L_088F21DC: } L_088F21E8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F2374; } @@ -5560,7 +5236,6 @@ L_088F2348: ctx.gpr[17] = (aot_gpr_2 | 0u); aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F2374; } @@ -5569,7 +5244,6 @@ L_088F2348: L_088F2358: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F236C; } @@ -5604,7 +5278,17 @@ L_088F2374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F239C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5658,11 +5342,20 @@ L_088F239C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F23C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -5670,7 +5363,6 @@ L_088F23C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2414; } @@ -5684,7 +5376,6 @@ L_088F23E0: L_088F23E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2410; } @@ -5708,7 +5399,6 @@ L_088F2410: L_088F2414: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2454; } @@ -5722,7 +5412,6 @@ L_088F2420: L_088F2428: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2450; } @@ -5751,7 +5440,17 @@ L_088F2454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2464: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); @@ -5791,7 +5490,6 @@ L_088F24A8: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2578; } @@ -5800,7 +5498,6 @@ L_088F24A8: L_088F24D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2518; } @@ -5836,7 +5533,6 @@ L_088F2518: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(58)))))); aot_gpr_5 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F256C; } @@ -5885,7 +5581,17 @@ L_088F2578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2590: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-192)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -5893,7 +5599,6 @@ L_088F2590: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x088F25B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F25B0u) goto L_088F25B0; AOT_REGCACHE_SYNC_OUT(); return; L_088F25B0: @@ -5931,7 +5636,6 @@ L_088F25B0: aot_fpr_13 = aot_fpr_13 - aot_fpr_12; aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_088F25EC; @@ -5941,9 +5645,7 @@ L_088F25EC: aot_gpr_6 = (16384u << 16u); ctx.fpr[14] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F27CC; } @@ -5969,7 +5671,6 @@ L_088F2604: L_088F2630: aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_088F2644; @@ -5988,9 +5689,7 @@ L_088F264C: ctx.fpr[14] = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_20; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[14] = std::bit_cast(0x7FC00000u); else ctx.fpr[14] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F26D8; } @@ -5998,9 +5697,7 @@ L_088F264C: } L_088F2668: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F26D0; } @@ -6042,7 +5739,6 @@ L_088F2684: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(52))); goto L_088F26E4; @@ -6050,7 +5746,6 @@ L_088F2684: goto L_088F26AC; L_088F26AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F271C; } @@ -6099,9 +5794,7 @@ L_088F26D8: } L_088F26E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F271C; } @@ -6246,9 +5939,7 @@ L_088F271C: goto L_088F27B4; L_088F27B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F27CC; } @@ -6277,7 +5968,17 @@ L_088F27D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F27E4: ctx.gpr[7] = (2246u << 16u); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(8688), static_cast(0u)); @@ -6320,7 +6021,6 @@ L_088F2840: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088F2840; } @@ -6332,7 +6032,17 @@ L_088F2864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F286C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(24), ctx.gpr[18]); @@ -6416,22 +6126,15 @@ L_088F2904: L_088F290C: { const std::int32_t dividend = static_cast(ctx.gpr[17]); const std::int32_t divisor = static_cast(aot_gpr_16); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_16; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.hi); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (aot_gpr_4 + static_cast(1)); ctx.gpr[20] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); aot_gpr_5 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F2A40; } @@ -6442,15 +6145,12 @@ L_088F2954: ctx.gpr[17] = (ctx.gpr[20] << 6u); ctx.gpr[17] = (ctx.gpr[17] + ctx.gpr[18]); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_16 = (ctx.lo); goto L_088F2974; L_088F2974: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F29BC; } @@ -6458,7 +6158,6 @@ L_088F2974: } L_088F2980: aot_gpr_31 = (0x088F2988u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F2988u) goto L_088F2988; AOT_REGCACHE_SYNC_OUT(); return; L_088F2988: @@ -6475,7 +6174,6 @@ L_088F2990: goto L_088F3DA0; L_088F29A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F2A30; } @@ -6487,7 +6185,6 @@ L_088F29AC: goto L_088F347C; L_088F29B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F2A30; } @@ -6496,7 +6193,6 @@ L_088F29B4: L_088F29BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2A30; } @@ -6506,7 +6202,6 @@ L_088F29C8: ctx.gpr[21] = (ctx.gpr[17] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2A30; } @@ -6533,7 +6228,6 @@ L_088F2A00: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(104), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2A2C; } @@ -6571,7 +6265,6 @@ L_088F2A40: L_088F2A48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2A90; } @@ -6579,7 +6272,6 @@ L_088F2A48: } L_088F2A54: aot_gpr_31 = (0x088F2A5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F2A5Cu) goto L_088F2A5C; AOT_REGCACHE_SYNC_OUT(); return; L_088F2A5C: @@ -6596,7 +6288,6 @@ L_088F2A64: goto L_088F3DA0; L_088F2A78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F2B04; } @@ -6608,7 +6299,6 @@ L_088F2A80: goto L_088F347C; L_088F2A88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F2B04; } @@ -6617,7 +6307,6 @@ L_088F2A88: L_088F2A90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2B04; } @@ -6627,7 +6316,6 @@ L_088F2A9C: ctx.gpr[17] = (ctx.gpr[18] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2B04; } @@ -6654,7 +6342,6 @@ L_088F2AD4: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(104), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2B00; } @@ -6702,7 +6389,17 @@ L_088F2B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2B3C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6743,7 +6440,6 @@ L_088F2B9C: ctx.gpr[18] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2BF0; } @@ -6802,7 +6498,17 @@ L_088F2BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2C14: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -6826,7 +6532,6 @@ L_088F2C3C: L_088F2C58: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(56))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088F2CB8; } @@ -6835,7 +6540,6 @@ L_088F2C58: L_088F2C64: ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088F2CB8; } @@ -6879,9 +6583,7 @@ L_088F2C70: ctx.gpr[8] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F2CB8; } @@ -6924,12 +6626,21 @@ L_088F2CCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2CE4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x088F2CF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B1FD70, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0198_entry, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F2CF4u) goto L_088F2CF4; AOT_REGCACHE_SYNC_OUT(); return; L_088F2CF4: @@ -6940,14 +6651,23 @@ L_088F2CF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2D04: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(158))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_088F2D70; } @@ -6956,7 +6676,6 @@ L_088F2D04: L_088F2D1C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(162))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_088F2D68; } @@ -6965,7 +6684,6 @@ L_088F2D1C: L_088F2D28: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(156))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F2D60; } @@ -6974,7 +6692,6 @@ L_088F2D28: L_088F2D34: aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F2D58; } @@ -6992,7 +6709,6 @@ L_088F2D40: } L_088F2D50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F2D88; } @@ -7048,7 +6764,17 @@ L_088F2D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2D9C: aot_gpr_5 = (2247u << 16u); aot_gpr_6 = (0u | 0u); @@ -7057,7 +6783,6 @@ L_088F2D9C: L_088F2DA8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F2DCC; } @@ -7087,23 +6812,30 @@ L_088F2DCC: goto L_088F2DD4; L_088F2DD4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2DDC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x088F2DF0u); - // nop goto L_088F352C; L_088F2DF0: aot_gpr_16 = (aot_gpr_2 | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_088F2EA0; } @@ -7116,7 +6848,6 @@ L_088F2E00: aot_gpr_16 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2E50; } @@ -7130,7 +6861,6 @@ L_088F2E1C: L_088F2E24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2E4C; } @@ -7154,7 +6884,6 @@ L_088F2E4C: L_088F2E50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2E90; } @@ -7168,7 +6897,6 @@ L_088F2E5C: L_088F2E64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F2E8C; } @@ -7203,7 +6931,17 @@ L_088F2EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F2EB0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7269,7 +7007,6 @@ L_088F2EB0: aot_gpr_5 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -7435,7 +7172,17 @@ L_088F30A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3134: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7501,7 +7248,6 @@ L_088F3134: aot_gpr_5 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -7663,7 +7409,17 @@ L_088F3314: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F33A8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -7712,9 +7468,7 @@ L_088F33C8: ctx.gpr[8] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F3404; } @@ -7747,7 +7501,17 @@ L_088F3418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3420: aot_gpr_6 = (2246u << 16u); ctx.gpr[7] = (0u | 0u); @@ -7757,7 +7521,6 @@ L_088F3420: L_088F3430: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(56))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088F3464; } @@ -7765,7 +7528,6 @@ L_088F3430: } L_088F343C: { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3464; } @@ -7775,7 +7537,6 @@ L_088F3444: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(48))); ctx.gpr[9] = (aot_gpr_4 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088F3460; } @@ -7805,11 +7566,20 @@ L_088F3464: } L_088F3474: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F347C: aot_gpr_6 = (2246u << 16u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -7829,7 +7599,6 @@ L_088F347C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8690))); aot_gpr_4 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F34CC; } @@ -7840,11 +7609,20 @@ L_088F34C8: goto L_088F34CC; L_088F34CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F34D4: aot_gpr_6 = (2246u << 16u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -7854,7 +7632,6 @@ L_088F34D4: aot_gpr_6 = (0u | 65534u); aot_gpr_6 = (static_cast(aot_gpr_2) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088F3510; } @@ -7881,11 +7658,20 @@ L_088F3510: goto L_088F3524; L_088F3524: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F352C: aot_gpr_2 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_2; @@ -7905,7 +7691,6 @@ L_088F3538: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(54))); aot_gpr_4 = (aot_gpr_4 >> 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_088F3570; } @@ -7921,7 +7706,6 @@ L_088F3560: } L_088F3568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3570; } @@ -7929,17 +7713,25 @@ L_088F3568: } L_088F3570: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3578: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } aot_gpr_31 = (0x088F35A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B1FD70, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0198_entry, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F35A4u) goto L_088F35A4; AOT_REGCACHE_SYNC_OUT(); return; L_088F35A4: @@ -7954,7 +7746,6 @@ L_088F35A4: aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3690; } @@ -7984,7 +7775,6 @@ L_088F35FC: goto L_088F3604; L_088F3604: { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088F3680; } @@ -7995,7 +7785,6 @@ L_088F360C: goto L_088F3610; L_088F3610: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3680; } @@ -8013,7 +7802,6 @@ L_088F3620: L_088F3628: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(104))); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F3680; } @@ -8022,7 +7810,6 @@ L_088F3628: L_088F3634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(44))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F3680; } @@ -8037,7 +7824,6 @@ L_088F3640: L_088F364C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3674; } @@ -8087,7 +7873,17 @@ L_088F3690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F36B8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); aot_gpr_6 = (0u | 30u); @@ -8186,7 +7982,6 @@ L_088F37E4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3834; } @@ -8228,7 +8023,6 @@ L_088F3834: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F374C; } @@ -8256,7 +8050,17 @@ L_088F3844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3880: aot_gpr_2 = (2246u << 16u); aot_gpr_5 = (0u | 0u); @@ -8265,7 +8069,6 @@ L_088F3880: L_088F388C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(56))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088F38B0; } @@ -8274,7 +8077,6 @@ L_088F388C: L_088F3898: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(32))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_088F38C8; } @@ -8283,7 +8085,6 @@ L_088F3898: L_088F38A4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(36))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_088F38C8; } @@ -8309,11 +8110,20 @@ L_088F38C0: } L_088F38C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F38D0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(56), ctx.gpr[20]); @@ -8333,7 +8143,6 @@ L_088F38D0: L_088F3914: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(56))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088F392C; } @@ -8342,7 +8151,6 @@ L_088F3914: L_088F3920: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(56))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_088F3970; } @@ -8386,9 +8194,7 @@ L_088F392C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F3970; } @@ -8429,7 +8235,17 @@ L_088F3980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F39A8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -8438,7 +8254,6 @@ L_088F39A8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(166))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A08; } @@ -8447,7 +8262,6 @@ L_088F39A8: L_088F39C8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(172))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A00; } @@ -8456,7 +8270,6 @@ L_088F39C8: L_088F39D4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(152))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A00; } @@ -8465,7 +8278,6 @@ L_088F39D4: L_088F39E0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A00; } @@ -8474,7 +8286,6 @@ L_088F39E0: L_088F39EC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F3A10; } @@ -8482,7 +8293,6 @@ L_088F39EC: } L_088F39F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3A84; } @@ -8506,13 +8316,11 @@ L_088F3A08: } L_088F3A10: aot_gpr_31 = (0x088F3A18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F3A18u) goto L_088F3A18; AOT_REGCACHE_SYNC_OUT(); return; L_088F3A18: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3A34; } @@ -8522,7 +8330,6 @@ L_088F3A24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A6C; } @@ -8532,7 +8339,6 @@ L_088F3A34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(162))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A64; } @@ -8541,7 +8347,6 @@ L_088F3A34: L_088F3A44: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(158))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3A64; } @@ -8558,7 +8363,6 @@ L_088F3A50: } L_088F3A5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3A84; } @@ -8582,7 +8386,6 @@ L_088F3A6C: } L_088F3A74: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F3A84; } @@ -8599,7 +8402,6 @@ L_088F3A7C: L_088F3A84: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(146))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3AA8; } @@ -8608,7 +8410,6 @@ L_088F3A84: L_088F3A90: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(148))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3AA8; } @@ -8617,7 +8418,6 @@ L_088F3A90: L_088F3A9C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(150))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_088F3AB0; } @@ -8642,7 +8442,17 @@ L_088F3AB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3AC4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); @@ -8661,7 +8471,6 @@ L_088F3AF8: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(132))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088F3B78; } @@ -8671,7 +8480,6 @@ L_088F3B0C: ctx.gpr[19] = (ctx.gpr[17] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3B74; } @@ -8698,7 +8506,6 @@ L_088F3B44: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(104), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3B70; } @@ -8747,7 +8554,17 @@ L_088F3B88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3BA8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8763,7 +8580,6 @@ L_088F3BC0: AOT_REGCACHE_SYNC_OUT(); return; L_088F3BC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F3BE8; } @@ -8771,7 +8587,6 @@ L_088F3BC8: } L_088F3BD0: aot_gpr_31 = (0x088F3BD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F3BD8u) goto L_088F3BD8; AOT_REGCACHE_SYNC_OUT(); return; L_088F3BD8: @@ -8781,7 +8596,6 @@ L_088F3BD8: AOT_REGCACHE_SYNC_OUT(); return; L_088F3BE0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F3C34; } @@ -8804,7 +8618,6 @@ L_088F3C00: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088F3C20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F3C20u) goto L_088F3C20; AOT_REGCACHE_SYNC_OUT(); return; L_088F3C20: @@ -8838,7 +8651,17 @@ L_088F3C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3C48: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); @@ -8854,7 +8677,6 @@ L_088F3C48: L_088F3C60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F3D1C; } @@ -8864,7 +8686,6 @@ L_088F3C6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8874,7 +8695,6 @@ L_088F3C7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8884,7 +8704,6 @@ L_088F3C8C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8894,7 +8713,6 @@ L_088F3C9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8904,7 +8722,6 @@ L_088F3CAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8914,7 +8731,6 @@ L_088F3CBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8924,7 +8740,6 @@ L_088F3CCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 119u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8934,7 +8749,6 @@ L_088F3CDC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 97u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8944,7 +8758,6 @@ L_088F3CEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 98u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3D14; } @@ -8960,7 +8773,6 @@ L_088F3CFC: goto L_088F3D0C; L_088F3D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D3C; } @@ -8968,7 +8780,6 @@ L_088F3D0C: } L_088F3D14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D90; } @@ -8976,7 +8787,6 @@ L_088F3D14: } L_088F3D1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D90; } @@ -8984,7 +8794,6 @@ L_088F3D1C: } L_088F3D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D90; } @@ -8994,7 +8803,6 @@ L_088F3D2C: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3D6C; } @@ -9007,7 +8815,6 @@ L_088F3D3C: AOT_REGCACHE_SYNC_OUT(); return; L_088F3D44: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F3D64; } @@ -9017,7 +8824,6 @@ L_088F3D4C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1918))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3D74; } @@ -9025,7 +8831,6 @@ L_088F3D4C: } L_088F3D5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D90; } @@ -9033,7 +8838,6 @@ L_088F3D5C: } L_088F3D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D90; } @@ -9041,7 +8845,6 @@ L_088F3D64: } L_088F3D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3D90; } @@ -9077,7 +8880,17 @@ L_088F3D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F3DA0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-272)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -9107,7 +8920,6 @@ L_088F3DF4: aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(48), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3E38; } @@ -9127,7 +8939,6 @@ L_088F3E1C: L_088F3E38: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(57))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0060_entry, 60u, 146u, 0x088F4884u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9136,7 +8947,6 @@ L_088F3E38: L_088F3E44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F3E90; } @@ -9154,7 +8964,6 @@ L_088F3E50: L_088F3E68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3E7C; } @@ -9168,7 +8977,6 @@ L_088F3E74: L_088F3E7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3E90; } @@ -9182,7 +8990,6 @@ L_088F3E88: L_088F3E90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0060_entry, 60u, 186u, 0x088F4AC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9192,7 +8999,6 @@ L_088F3E9C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(56))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F3EBC; } @@ -9202,7 +9008,6 @@ L_088F3EAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(56))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0060_entry, 60u, 13u, 0x088F40A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9219,7 +9024,6 @@ L_088F3EBC: L_088F3ECC: aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3EF0; } @@ -9227,7 +9031,6 @@ L_088F3ECC: } L_088F3ED8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0060_entry, 60u, 137u, 0x088F480Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9235,7 +9038,6 @@ L_088F3ED8: } L_088F3EE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F3ED8; } @@ -9243,7 +9045,6 @@ L_088F3EE0: } L_088F3EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F3FEC; } @@ -9359,7 +9160,6 @@ L_088F3F90: AOT_REGCACHE_SYNC_OUT(); return; L_088F3FB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F3FE4; } @@ -9370,9 +9170,7 @@ L_088F3FC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F3FE4; } @@ -9384,7 +9182,6 @@ L_088F3FDC: goto L_088F3FE4; L_088F3FE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0060_entry, 60u, 137u, 0x088F480Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0060.cpp b/profiles/vcs/generated/generated_unit_0060.cpp index 8830572..c39422c 100644 --- a/profiles/vcs/generated/generated_unit_0060.cpp +++ b/profiles/vcs/generated/generated_unit_0060.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0060[4060] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, 5, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 10, - 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 18, 0, 19, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 22, 0, 23, 0, 0, 0, 0, 24, 0, 25, 0, 26, 0, 27, 0, 0, 0, 0, 28, 0, 29, 30, - 0, 0, 0, 0, 0, 31, 32, 0, 33, 0, 0, 34, 0, 0, 0, 35, 0, 36, 0, 37, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, - 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 52, 0, 53, 0, 0, 54, 0, 55, - 0, 56, 0, 57, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, - 62, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 0, 70, 71, 0, 72, 0, 0, 73, - 0, 0, 74, 0, 75, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 81, 0, 0, 0, 82, 0, 0, 83, 0, - 84, 85, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 88, 89, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 93, 94, 0, 0, 0, 0, - 95, 0, 0, 0, 96, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, - 0, 102, 0, 103, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 107, 108, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, - 0, 111, 0, 0, 112, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 115, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, - 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 122, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 127, - 0, 128, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 133, 0, 0, 134, 0, 135, 136, 0, - 0, 0, 0, 137, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 142, 143, 0, 0, 0, 144, 0, 145, 0, 0, - 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, - 0, 153, 0, 154, 0, 0, 155, 0, 0, 156, 0, 157, 0, 158, 0, 0, 159, 0, 160, 0, 0, 0, 161, 0, 162, 0, 163, 0, 0, 0, 0, 0, - 0, 0, 0, 164, 0, 0, 0, 165, 0, 0, 166, 167, 0, 168, 0, 0, 169, 0, 170, 0, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, - 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, - 181, 0, 0, 0, 0, 0, 182, 0, 0, 183, 0, 184, 0, 0, 0, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 189, 0, 0, - 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 193, 0, 194, 0, 0, 0, 0, 0, 0, 195, 0, 0, 196, 0, 197, 0, 198, 0, 199, 0, - 200, 0, 0, 201, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 205, 0, 206, 0, 207, 0, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, - 0, 211, 212, 0, 213, 0, 0, 214, 0, 0, 215, 0, 0, 0, 216, 0, 217, 0, 0, 218, 0, 0, 219, 0, 0, 220, 0, 0, 221, 222, 223, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 227, - 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, - 0, 0, 0, 239, 0, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 248, 0, 249, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, - 255, 0, 256, 0, 257, 0, 258, 0, 0, 0, 259, 0, 0, 0, 260, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 264, 0, 0, 265, - 0, 0, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 270, 0, 0, 0, 0, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, - 0, 276, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, - 0, 280, 0, 281, 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, 287, 0, 0, 0, 0, - 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 0, 0, 295, 0, 296, 0, 297, 0, 298, - 0, 0, 299, 0, 0, 0, 0, 300, 0, 0, 0, 301, 0, 302, 0, 0, 303, 304, 0, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 0, 0, - 310, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 315, 0, 0, 316, 317, 0, 0, 318, 0, 319, - 0, 320, 0, 321, 0, 0, 0, 322, 0, 323, 0, 0, 0, 324, 0, 325, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, - 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 336, 0, - 0, 337, 0, 0, 0, 338, 0, 339, 0, 0, 340, 0, 341, 0, 0, 0, 342, 0, 343, 0, 0, 344, 0, 345, 0, 346, 0, 0, 347, 0, 0, 0, - 0, 348, 0, 349, 0, 0, 0, 350, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, - 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 366, 0, 367, 0, 368, 0, 369, 0, 0, - 370, 0, 371, 0, 372, 0, 0, 373, 0, 374, 375, 0, 376, 0, 0, 377, 0, 0, 378, 0, 379, 0, 380, 0, 0, 381, 0, 0, 0, 0, 0, 382, - 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 386, - 387, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 390, 0, 0, 391, 0, 392, 393, 0, 394, 0, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, - 0, 399, 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, - 406, 0, 407, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 410, 0, 0, 0, 411, 0, 412, 0, 413, 0, 0, 414, 0, 0, 0, 415, 0, 416, 0, 417, 0, 418, 0, 0, 0, 419, 0, 420, 0, 0, 421, 0, - 0, 0, 422, 0, 423, 424, 0, 425, 0, 0, 0, 426, 0, 427, 0, 0, 428, 0, 0, 0, 429, 0, 430, 431, 0, 432, 0, 0, 0, 0, 0, 433, - 0, 434, 0, 0, 435, 0, 0, 0, 436, 0, 437, 0, 0, 0, 438, 0, 439, 0, 0, 440, 0, 0, 441, 0, 0, 0, 442, 0, 443, 0, 0, 444, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 446, 0, 447, 0, 448, 0, - 0, 0, 0, 0, 0, 0, 0, 449, 0, 450, 0, 0, 451, 0, 452, 0, 0, 0, 0, 453, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 456, 0, 0, 457, 0, 458, 0, 0, 459, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, - 467, 0, 0, 0, 0, 468, 0, 469, 0, 470, 0, 0, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, - 0, 478, 0, 0, 0, 0, 0, 479, 0, 480, 0, 481, 0, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 0, 486, 0, - 0, 487, 0, 0, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, 0, 0, 493, 0, 0, - 0, 494, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 500, 0, 0, 0, 0, 501, 0, - 0, 502, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, - 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 516, 0, 517, - 0, 518, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 0, 0, 524, 525, 0, 0, 0, 0, 526, 0, - 527, 0, 0, 528, 0, 529, 0, 0, 0, 530, 531, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, - 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, - 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 561, - 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 565, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, - 569, 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 577, 0, 0, - 0, 578, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, 0, 582, 0, 583, 584, 0, 0, 585, 0, 0, 586, 0, 587, 0, 588, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, - 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 605, 0, 606, 0, - 0, 0, 607, 0, 0, 0, 0, 0, 608, 0, 0, 0, 609, 0, 610, 0, 611, 0, 0, 0, 612, 0, 0, 613, 0, 0, 614, 0, 0, 615, 0, 616, - 0, 617, 618, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 622, 623, 0, 624, 0, 0, 625, 0, 0, 626, 0, 0, 627, 0, 628, 0, 629, - 630, 0, 631, 0, 0, 632, 0, 0, 633, 0, 0, 634, 0, 0, 635, 0, 636, 0, 637, 638, 0, 639, 0, 0, 640, 0, 0, 641, 0, 0, 642, 0, - 0, 643, 0, 644, 0, 645, 646, 0, 647, 0, 0, 648, 0, 0, 649, 0, 0, 650, 0, 0, 651, 0, 652, 0, 653, 654, 0, 655, 0, 0, 656, 0, - 0, 657, 0, 0, 658, 0, 0, 659, 0, 660, 0, 661, 662, 0, 663, 0, 0, 664, 0, 0, 665, 0, 0, 666, 0, 0, 667, 0, 668, 0, 669, 670, - 0, 671, 0, 0, 672, 0, 0, 673, 0, 0, 674, 0, 0, 675, 0, 676, 0, 677, 678, 0, 679, 0, 0, 680, 0, 0, 681, 0, 0, 682, 0, 0, - 683, 0, 684, 0, 685, 686, 0, 687, 0, 0, 688, 0, 0, 689, 0, 0, 690, 0, 0, 691, 0, 692, 0, 693, 694, 0, 695, 0, 0, 696, 0, 0, - 697, 0, 0, 698, 0, 0, 699, 0, 700, 0, 701, 702, 0, 703, 0, 0, 704, 0, 0, 705, 0, 0, 706, 0, 0, 707, 0, 708, 0, 709, 710, 0, - 711, 0, 0, 712, 0, 0, 713, 0, 0, 714, 0, 0, 715, 0, 716, 0, 717, 718, 0, 719, 0, 0, 720, 0, 0, 721, 0, 0, 722, 0, 0, 723, - 0, 724, 0, 725, 726, 0, 727, 0, 0, 728, 0, 729, 0, 730, 0, 731, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, - 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, - 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 741, 0, - 0, 0, 742, 0, 0, 0, 743, 0, 0, 0, 744, 0, 0, 0, 745, 0, 746, 0, 0, 0, 747, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 749, 0, 750, 0, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, - 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, 0, 0, 0, 0, 758, 0, 0, 759, 0, 0, 0, 760, 0, 761, 0, - 0, 0, 762, 0, 0, 0, 763, 0, 0, 0, 764, 0, 0, 0, 765, 0, 0, 766, 767, 0, 768, 0, 0, 0, 769, 0, 770, 0, 0, 771, 0, 772, - 0, 773, 0, 0, 774, 0, 0, 775, 0, 0, 776, 0, 777, 0, 778, 779, 0, 780, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 782, 0, 0, 0, 0, 783, 784, 0, 0, 0, 0, 785, 0, 0, 0, 786, 787, 0, 788, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 790, 791, - 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 794, 795, 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, - 0, 0, 0, 0, 797, 0, 798, 0, 0, 0, 799, 0, 800, 0, 801, 0, 0, 802, 0, 0, 803, 0, 0, 804, 0, 805, 0, 806, 807, 0, 808, 0, - 0, 0, 809, 0, 810, 0, 0, 811, 0, 812, 813, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 815, 0, - 816, 0, 0, 817, 0, 818, 0, 819, 0, 820, 0, 821, 0, 822, 0, 823, 0, 824, 0, 825, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 828, 0, 0, 829, 0, 830, 831, 0, 0, 0, 0, 832, - 0, 0, 833, 0, 834, 0, 835, 0, 836, 0, 837, 0, 838, 0, 839, 0, 840, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 0, 0, 842, 0, 0, - 0, 0, 843, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 846, 0, 847, 0, 848, 0, 849, 0, 0, 850, 851, 0, 0, 0, 0, 852, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 857, 0, 0, 858, 0, 859, 0, 860, 0, 0, 0, 0, 861, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 865, 0, 0, 0, 0, 0, 0, 866, 0, 0, 0, 0, 0, 867, 0, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 870, 0, 0, 0, 0, 871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, 0, 0, 874, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0060[64] = { + 0x2A254580A80154A1ull, 0x820A8960D0AA1500ull, 0xA50A2090222A0820ull, 0x969129111000882Aull, + 0x0D22C14348A48254ull, 0x0000105A82082091ull, 0x8115043208000086ull, 0x69220502C1112420ull, + 0x0111282228C44448ull, 0x85252C8805452A4Aull, 0x00028A4104428420ull, 0x5520544222000001ull, + 0x7249449648954489ull, 0x00000002A1000002ull, 0x00000A8400005400ull, 0x0041090842100000ull, + 0x020000800A404840ull, 0x9111445528000040ull, 0x40002082AA822248ull, 0xAA2AA10408480A8Aull, + 0xA6510A0115532884ull, 0x508228488088A28Aull, 0x8880508A12A514A2ull, 0x2A90240002A80904ull, + 0xA000800282549695ull, 0x4041128254969121ull, 0x4A2A89510000800Dull, 0x9449451282D128B4ull, + 0x0128528055000000ull, 0x2000004014225290ull, 0x42848A82222AA2A1ull, 0x4242424221090842ull, + 0xA424242211088442ull, 0x001506294314A022ull, 0x0000001000000000ull, 0x0900000002040000ull, + 0x8000000000028000ull, 0x0001400000000002ull, 0x4000440000490410ull, 0x0402000000020001ull, + 0x8800000000004008ull, 0x000001219006A008ull, 0x2420008010000200ull, 0x100000200549A452ull, + 0x0200100000800001ull, 0x0005100000000080ull, 0x0000040004000100ull, 0xA491510452408000ull, + 0x492D4925A9259056ull, 0xD4925A924B52496Aull, 0x25A924B52496A492ull, 0x924B52496A492D49ull, + 0x080040808002AA5Aull, 0x0051444444401004ull, 0x5121500140005140ull, 0x0022D492A5164444ull, + 0x201A0004C10B10C2ull, 0x400086945A925450ull, 0x86910000010AAAA9ull, 0x8655401420215554ull, + 0x0215240400A00000ull, 0x1000A08100050400ull, 0x0001080000000000ull, 0x0000000008100002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0060[64] = { + 1u, 21u, 40u, 56u, 74u, 95u, 107u, 120u, 137u, 153u, 175u, 187u, 200u, 224u, 229u, 236u, + 244u, 252u, 266u, 280u, 299u, 320u, 337u, 356u, 370u, 387u, 406u, 422u, 445u, 456u, 467u, 487u, + 502u, 518u, 535u, 536u, 540u, 543u, 546u, 554u, 558u, 562u, 572u, 578u, 591u, 595u, 599u, 602u, + 617u, 643u, 671u, 697u, 724u, 737u, 749u, 762u, 782u, 797u, 816u, 833u, 853u, 862u, 870u, 872u, }; void recomp_unit_0060_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0060_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088F4000u; - entry_id = (entry_delta < 16240u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0060[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16240u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0060[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0060[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088F4000; @@ -1054,7 +962,6 @@ L_088F4000: AOT_REGCACHE_SYNC_OUT(); return; L_088F4014: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F4028; } @@ -1077,7 +984,6 @@ L_088F4030: AOT_REGCACHE_SYNC_OUT(); return; L_088F4038: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F40A0; } @@ -1099,7 +1005,6 @@ L_088F4040: AOT_REGCACHE_SYNC_OUT(); return; L_088F406C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F40A0; } @@ -1126,7 +1031,6 @@ L_088F409C: goto L_088F40A0; L_088F40A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F480C; } @@ -1141,7 +1045,6 @@ L_088F40A8: AOT_REGCACHE_SYNC_OUT(); return; L_088F40B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F4154; } @@ -1149,7 +1052,6 @@ L_088F40B8: } L_088F40C0: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F4130; } @@ -1158,7 +1060,6 @@ L_088F40C0: L_088F40C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F40F4; } @@ -1173,7 +1074,6 @@ L_088F40D4: AOT_REGCACHE_SYNC_OUT(); return; L_088F40E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F417C; } @@ -1203,7 +1103,6 @@ L_088F40F4: AOT_REGCACHE_SYNC_OUT(); return; L_088F4120: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F417C; } @@ -1227,7 +1126,6 @@ L_088F4130: AOT_REGCACHE_SYNC_OUT(); return; L_088F4144: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F417C; } @@ -1243,7 +1141,6 @@ L_088F414C: } L_088F4154: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_088F417C; } @@ -1259,7 +1156,6 @@ L_088F415C: AOT_REGCACHE_SYNC_OUT(); return; L_088F4170: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F417C; } @@ -1272,9 +1168,7 @@ L_088F417C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F4198; } @@ -1285,7 +1179,6 @@ L_088F4194: goto L_088F4198; L_088F4198: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088F44C4; } @@ -1301,7 +1194,6 @@ L_088F41AC: ctx.gpr[16] = (aot_gpr_2 | 0u); ctx.gpr[17] = (static_cast(ctx.gpr[16]) < 40 ? 1u : 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F4244; } @@ -1309,12 +1201,10 @@ L_088F41AC: } L_088F41BC: aot_gpr_31 = (0x088F41C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F41C4u) goto L_088F41C4; AOT_REGCACHE_SYNC_OUT(); return; L_088F41C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F4244; } @@ -1326,7 +1216,6 @@ L_088F41CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(166))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F4244; } @@ -1338,7 +1227,6 @@ L_088F41E4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(162))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F4244; } @@ -1350,7 +1238,6 @@ L_088F41FC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F4244; } @@ -1362,7 +1249,6 @@ L_088F4214: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F4244; } @@ -1382,7 +1268,6 @@ L_088F422C: } L_088F4244: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F44BC; } @@ -1390,7 +1275,6 @@ L_088F4244: } L_088F424C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088F44BC; } @@ -1407,7 +1291,6 @@ L_088F4264: ctx.gpr[16] = (aot_gpr_2 | 0u); ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(104))); aot_gpr_31 = (0x088F4274u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F4274u) goto L_088F4274; AOT_REGCACHE_SYNC_OUT(); return; L_088F4274: @@ -1423,7 +1306,6 @@ L_088F4274: L_088F4290: ctx.gpr[17] = (aot_gpr_2 | 0u); aot_gpr_31 = (0x088F429Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F429Cu) goto L_088F429C; AOT_REGCACHE_SYNC_OUT(); return; L_088F429C: @@ -1442,7 +1324,6 @@ L_088F42B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F42E8; } @@ -1450,7 +1331,6 @@ L_088F42B4: } L_088F42C4: aot_gpr_31 = (0x088F42CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F42CCu) goto L_088F42CC; AOT_REGCACHE_SYNC_OUT(); return; L_088F42CC: @@ -1458,7 +1338,6 @@ L_088F42CC: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_088F42E8; } @@ -1480,7 +1359,6 @@ L_088F42E8: AOT_REGCACHE_SYNC_OUT(); return; L_088F42F4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F4304; } @@ -1496,7 +1374,6 @@ L_088F42FC: } L_088F4304: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088F433C; } @@ -1504,7 +1381,6 @@ L_088F4304: } L_088F430C: aot_gpr_31 = (0x088F4314u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F4314u) goto L_088F4314; AOT_REGCACHE_SYNC_OUT(); return; L_088F4314: @@ -1513,7 +1389,6 @@ L_088F4314: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(1500) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F44BC; } @@ -1542,7 +1417,6 @@ L_088F433C: aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F43C0; } @@ -1552,7 +1426,6 @@ L_088F4370: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(56))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F43A0; } @@ -1562,7 +1435,6 @@ L_088F4380: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(56))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F43A0; } @@ -1572,7 +1444,6 @@ L_088F4390: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(56))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F43C0; } @@ -1586,7 +1457,6 @@ L_088F43A0: AOT_REGCACHE_SYNC_OUT(); return; L_088F43AC: aot_gpr_31 = (0x088F43B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F43B4u) goto L_088F43B4; AOT_REGCACHE_SYNC_OUT(); return; L_088F43B4: @@ -1599,7 +1469,6 @@ L_088F43C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(58)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F4448; } @@ -1614,7 +1483,6 @@ L_088F43D0: goto L_088F43DC; L_088F43DC: aot_gpr_31 = (0x088F43E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F43E4u) goto L_088F43E4; AOT_REGCACHE_SYNC_OUT(); return; L_088F43E4: @@ -1673,7 +1541,6 @@ L_088F443C: L_088F4448: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F445C; } @@ -1691,7 +1558,6 @@ L_088F445C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(58)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4498; } @@ -1706,7 +1572,6 @@ L_088F446C: goto L_088F4478; L_088F4478: aot_gpr_31 = (0x088F4480u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F4480u) goto L_088F4480; AOT_REGCACHE_SYNC_OUT(); return; L_088F4480: @@ -1722,7 +1587,6 @@ L_088F4484: AOT_REGCACHE_SYNC_OUT(); return; L_088F4498: aot_gpr_31 = (0x088F44A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F44A0u) goto L_088F44A0; AOT_REGCACHE_SYNC_OUT(); return; L_088F44A0: @@ -1731,7 +1595,6 @@ L_088F44A0: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(1500) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F44BC; } @@ -1742,7 +1605,6 @@ L_088F44B8: goto L_088F44BC; L_088F44BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F4510; } @@ -1752,7 +1614,6 @@ L_088F44C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(58)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4510; } @@ -1767,7 +1628,6 @@ L_088F44D4: goto L_088F44E0; L_088F44E0: aot_gpr_31 = (0x088F44E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F44E8u) goto L_088F44E8; AOT_REGCACHE_SYNC_OUT(); return; L_088F44E8: @@ -1790,7 +1650,6 @@ L_088F4500: L_088F4510: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4590; } @@ -1802,7 +1661,6 @@ L_088F451C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(146))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F457C; } @@ -1814,7 +1672,6 @@ L_088F4534: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(148))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F457C; } @@ -1826,7 +1683,6 @@ L_088F454C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(150))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F457C; } @@ -1838,7 +1694,6 @@ L_088F4564: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(168))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F4590; } @@ -1851,7 +1706,6 @@ L_088F457C: AOT_REGCACHE_SYNC_OUT(); return; L_088F4584: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F4590; } @@ -1862,7 +1716,6 @@ L_088F458C: goto L_088F4590; L_088F4590: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088F480C; } @@ -1897,9 +1750,7 @@ L_088F45B0: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F480C; } @@ -1937,9 +1788,7 @@ L_088F461C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F480C; } @@ -1958,7 +1807,6 @@ L_088F466C: L_088F4684: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F480C; } @@ -1972,7 +1820,6 @@ L_088F4694: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(168))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F46C0; } @@ -1984,7 +1831,6 @@ L_088F46A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(170))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F46D0; } @@ -1992,12 +1838,10 @@ L_088F46A8: } L_088F46C0: aot_gpr_31 = (0x088F46C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F46C8u) goto L_088F46C8; AOT_REGCACHE_SYNC_OUT(); return; L_088F46C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F480C; } @@ -2007,7 +1851,6 @@ L_088F46D0: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(60), static_cast(ctx.gpr[16])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F47A8; } @@ -2020,7 +1863,6 @@ L_088F46E0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(154))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F4714; } @@ -2032,7 +1874,6 @@ L_088F46FC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(152))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F477C; } @@ -2049,7 +1890,6 @@ L_088F4714: L_088F4728: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F477C; } @@ -2081,7 +1921,6 @@ L_088F4760: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F477C; } @@ -2092,7 +1931,6 @@ L_088F4778: goto L_088F477C; L_088F477C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088F47A0; } @@ -2110,7 +1948,6 @@ L_088F4784: AOT_REGCACHE_SYNC_OUT(); return; L_088F47A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F480C; } @@ -2138,7 +1975,6 @@ L_088F47C4: L_088F47D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F480C; } @@ -2153,7 +1989,6 @@ L_088F47E0: goto L_088F47EC; L_088F47EC: aot_gpr_31 = (0x088F47F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F47F4u) goto L_088F47F4; AOT_REGCACHE_SYNC_OUT(); return; L_088F47F4: @@ -2170,7 +2005,6 @@ L_088F47F8: L_088F480C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(57))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2204,7 +2038,6 @@ L_088F4848: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(56))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2217,7 +2050,6 @@ L_088F485C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2267,7 +2099,6 @@ L_088F48AC: L_088F48B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2277,7 +2108,6 @@ L_088F48C0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2287,7 +2117,6 @@ L_088F48D0: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F49B4; } @@ -2312,7 +2141,6 @@ L_088F4904: L_088F490C: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F49B4; } @@ -2326,7 +2154,6 @@ L_088F4918: AOT_REGCACHE_SYNC_OUT(); return; L_088F4924: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F4934; } @@ -2371,7 +2198,6 @@ L_088F4948: AOT_REGCACHE_SYNC_OUT(); return; L_088F4958: { const bool branch_taken = aot_gpr_2 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_088F4968; } @@ -2398,9 +2224,7 @@ L_088F4968: goto L_088F498C; L_088F498C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F49A8; } @@ -2409,7 +2233,6 @@ L_088F498C: L_088F499C: ctx.gpr[17] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F49B4; } @@ -2420,7 +2243,6 @@ L_088F49A8: goto L_088F49AC; L_088F49AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F4904; } @@ -2443,7 +2265,6 @@ L_088F49C0: L_088F49C8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_088F49E0; } @@ -2506,9 +2327,7 @@ L_088F4A3C: L_088F4A44: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F4A80; } @@ -2528,9 +2347,7 @@ L_088F4A68: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2547,7 +2364,6 @@ L_088F4A80: L_088F4A98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2562,7 +2378,6 @@ L_088F4AAC: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(57), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4AC4; } @@ -2595,7 +2410,17 @@ L_088F4AC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F4B00: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -2628,7 +2453,6 @@ L_088F4B74: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F4BE0; } @@ -2668,7 +2492,6 @@ L_088F4BB8: ctx.gpr[21] = (static_cast(static_cast(ctx.gpr[21]) >> 16u)); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(52))); { const bool branch_taken = ctx.gpr[21] != aot_gpr_5; - // nop if (branch_taken) { goto L_088F4BE0; } @@ -2681,7 +2504,6 @@ L_088F4BD4: goto L_088F4BE0; L_088F4BE0: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_088F4C90; } @@ -2694,7 +2516,6 @@ L_088F4BE8: AOT_REGCACHE_SYNC_OUT(); return; L_088F4BF0: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_088F4C00; } @@ -2749,7 +2570,6 @@ L_088F4C40: } L_088F4C48: { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F4CF8; } @@ -2758,7 +2578,6 @@ L_088F4C48: L_088F4C50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F4CF8; } @@ -2824,7 +2643,6 @@ L_088F4CB8: L_088F4CC0: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F4CF8; } @@ -2860,7 +2678,6 @@ L_088F4CF4: L_088F4CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F4E30; } @@ -2967,7 +2784,6 @@ L_088F4D84: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(76), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F4E38; } @@ -2975,7 +2791,6 @@ L_088F4D84: } L_088F4E28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F4F50; } @@ -2983,7 +2798,6 @@ L_088F4E28: } L_088F4E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F50E4; } @@ -3094,7 +2908,6 @@ L_088F4F50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(164))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F4F78; } @@ -3116,7 +2929,6 @@ L_088F4F78: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(182))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F4FA0; } @@ -3143,7 +2955,6 @@ L_088F4FAC: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F50E4; } @@ -3155,11 +2966,20 @@ L_088F4FC0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-16000))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F4FD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(482)))))); @@ -3176,7 +2996,6 @@ L_088F4FD8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(162))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5058; } @@ -3187,7 +3006,6 @@ L_088F5018: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(156))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5058; } @@ -3220,7 +3038,6 @@ L_088F5058: goto L_088F5064; L_088F5064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F50E4; } @@ -3238,7 +3055,6 @@ L_088F506C: aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(482), static_cast(aot_gpr_5)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F50E4; } @@ -3262,7 +3078,6 @@ L_088F509C: aot_gpr_5 = (aot_gpr_5 | aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(72), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F50E4; } @@ -3288,7 +3103,17 @@ L_088F50E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F5118: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3310,7 +3135,6 @@ L_088F5118: } L_088F516C: { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F5188; } @@ -3319,7 +3143,6 @@ L_088F516C: L_088F5174: ctx.gpr[19] = (0u | 0u); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F5190; } @@ -3327,7 +3150,6 @@ L_088F5174: } L_088F5180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5198; } @@ -3349,7 +3171,6 @@ L_088F5198: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(178))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F51D0; } @@ -3359,7 +3180,6 @@ L_088F51A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(180))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F51D0; } @@ -3381,7 +3201,6 @@ L_088F51D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F51F0; } @@ -3391,7 +3210,6 @@ L_088F51E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(152))); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F527C; } @@ -3400,7 +3218,6 @@ L_088F51E0: L_088F51F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F527C; } @@ -3416,7 +3233,6 @@ L_088F51FC: L_088F520C: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088F525C; } @@ -3448,7 +3264,6 @@ L_088F5244: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5274; } @@ -3456,7 +3271,6 @@ L_088F5244: } L_088F525C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F527C; } @@ -3469,7 +3283,6 @@ L_088F5264: AOT_REGCACHE_SYNC_OUT(); return; L_088F526C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F527C; } @@ -3494,7 +3307,6 @@ L_088F5284: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -3506,11 +3318,20 @@ L_088F529C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-15936))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F52B4: aot_gpr_4 = (ctx.gpr[18] << 8u); aot_gpr_5 = (ctx.gpr[18] + ctx.gpr[18]); @@ -3528,7 +3349,6 @@ L_088F52B4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F53A0; } @@ -3541,7 +3361,6 @@ L_088F52F8: goto L_088F74EC; L_088F5304: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F536C; } @@ -3556,7 +3375,6 @@ L_088F530C: AOT_REGCACHE_SYNC_OUT(); return; L_088F531C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F532C; } @@ -3564,7 +3382,6 @@ L_088F531C: } L_088F5324: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -3627,7 +3444,6 @@ L_088F53A0: AOT_REGCACHE_SYNC_OUT(); return; L_088F53B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -3647,7 +3463,6 @@ L_088F53C4: goto L_088F74EC; L_088F53CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F557C; } @@ -3662,7 +3477,6 @@ L_088F53D4: AOT_REGCACHE_SYNC_OUT(); return; L_088F53E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F53F4; } @@ -3670,7 +3484,6 @@ L_088F53E4: } L_088F53EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -3678,7 +3491,6 @@ L_088F53EC: } L_088F53F4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088F5524; } @@ -3687,7 +3499,6 @@ L_088F53F4: L_088F53FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5470; } @@ -3710,7 +3521,6 @@ L_088F541C: AOT_REGCACHE_SYNC_OUT(); return; L_088F542C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_088F5444; } @@ -3728,7 +3538,6 @@ L_088F5440: L_088F5444: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F550C; } @@ -3741,7 +3550,6 @@ L_088F5450: AOT_REGCACHE_SYNC_OUT(); return; L_088F5458: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F550C; } @@ -3754,7 +3562,6 @@ L_088F5460: AOT_REGCACHE_SYNC_OUT(); return; L_088F5468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F550C; } @@ -3764,7 +3571,6 @@ L_088F5470: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(58)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F54AC; } @@ -3784,7 +3590,6 @@ L_088F5480: AOT_REGCACHE_SYNC_OUT(); return; L_088F54A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F54C0; } @@ -3807,7 +3612,6 @@ L_088F54C0: AOT_REGCACHE_SYNC_OUT(); return; L_088F54D0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_088F54E8; } @@ -3825,7 +3629,6 @@ L_088F54E4: L_088F54E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F550C; } @@ -3838,7 +3641,6 @@ L_088F54F4: AOT_REGCACHE_SYNC_OUT(); return; L_088F54FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F550C; } @@ -3858,7 +3660,6 @@ L_088F550C: AOT_REGCACHE_SYNC_OUT(); return; L_088F551C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F557C; } @@ -3868,7 +3669,6 @@ L_088F5524: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(172))); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F557C; } @@ -3876,7 +3676,6 @@ L_088F5524: } L_088F5534: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088F557C; } @@ -3893,7 +3692,6 @@ L_088F554C: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_28 + static_cast(8692), static_cast(aot_gpr_4)); aot_gpr_31 = (0x088F555Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F555Cu) goto L_088F555C; AOT_REGCACHE_SYNC_OUT(); return; L_088F555C: @@ -3930,7 +3728,6 @@ L_088F557C: L_088F558C: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F55F8; } @@ -3941,7 +3738,6 @@ L_088F5598: aot_gpr_4 = (aot_gpr_4 + static_cast(30000)); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(48), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F55F8; } @@ -3949,7 +3745,6 @@ L_088F5598: } L_088F55AC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F55F8; } @@ -3959,7 +3754,6 @@ L_088F55B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(166))); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F55DC; } @@ -3986,7 +3780,6 @@ L_088F55DC: goto L_088F55F0; L_088F55F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F55F8; } @@ -4002,7 +3795,6 @@ L_088F5604: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(57), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4010,7 +3802,6 @@ L_088F5604: } L_088F5614: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_088F56FC; } @@ -4023,7 +3814,6 @@ L_088F561C: goto L_088F74EC; L_088F5628: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F56FC; } @@ -4038,7 +3828,6 @@ L_088F5630: AOT_REGCACHE_SYNC_OUT(); return; L_088F5640: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F565C; } @@ -4052,7 +3841,6 @@ L_088F5648: AOT_REGCACHE_SYNC_OUT(); return; L_088F5654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4060,7 +3848,6 @@ L_088F5654: } L_088F565C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_088F56DC; } @@ -4069,7 +3856,6 @@ L_088F565C: L_088F5664: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F568C; } @@ -4085,7 +3871,6 @@ L_088F5670: AOT_REGCACHE_SYNC_OUT(); return; L_088F5684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F56DC; } @@ -4095,7 +3880,6 @@ L_088F568C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(58)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F56B8; } @@ -4111,7 +3895,6 @@ L_088F569C: AOT_REGCACHE_SYNC_OUT(); return; L_088F56B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F56DC; } @@ -4133,7 +3916,6 @@ L_088F56DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(176))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F56FC; } @@ -4158,7 +3940,6 @@ L_088F5708: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(56), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5754; } @@ -4167,7 +3948,6 @@ L_088F5708: L_088F5720: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5754; } @@ -4181,7 +3961,6 @@ L_088F572C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5754; } @@ -4194,7 +3973,6 @@ L_088F574C: AOT_REGCACHE_SYNC_OUT(); return; L_088F5754: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4202,7 +3980,6 @@ L_088F5754: } L_088F575C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4252,7 +4029,6 @@ L_088F57D0: AOT_REGCACHE_SYNC_OUT(); return; L_088F57DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4260,7 +4036,6 @@ L_088F57DC: } L_088F57E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4268,7 +4043,6 @@ L_088F57E4: } L_088F57EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4277,7 +4051,6 @@ L_088F57EC: L_088F57F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-23120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F599C; } @@ -4285,12 +4058,10 @@ L_088F57F4: } L_088F5800: aot_gpr_31 = (0x088F5808u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5808u) goto L_088F5808; AOT_REGCACHE_SYNC_OUT(); return; L_088F5808: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F5884; } @@ -4305,7 +4076,6 @@ L_088F5810: goto L_088F581C; L_088F581C: aot_gpr_31 = (0x088F5824u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5824u) goto L_088F5824; AOT_REGCACHE_SYNC_OUT(); return; L_088F5824: @@ -4358,7 +4128,6 @@ L_088F5864: AOT_REGCACHE_SYNC_OUT(); return; L_088F587C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F599C; } @@ -4378,7 +4147,6 @@ L_088F5884: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(44))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F5930; } @@ -4404,7 +4172,6 @@ L_088F58BC: goto L_088F58F4; L_088F58F4: aot_gpr_31 = (0x088F58FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F58FCu) goto L_088F58FC; AOT_REGCACHE_SYNC_OUT(); return; L_088F58FC: @@ -4443,7 +4210,6 @@ L_088F5930: goto L_088F593C; L_088F593C: aot_gpr_31 = (0x088F5944u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5944u) goto L_088F5944; AOT_REGCACHE_SYNC_OUT(); return; L_088F5944: @@ -4496,7 +4262,6 @@ L_088F5984: AOT_REGCACHE_SYNC_OUT(); return; L_088F599C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4505,7 +4270,6 @@ L_088F599C: L_088F59A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5A00; } @@ -4524,7 +4288,6 @@ L_088F59C0: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(56), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5A00; } @@ -4538,7 +4301,6 @@ L_088F59D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5A00; } @@ -4551,7 +4313,6 @@ L_088F59F8: AOT_REGCACHE_SYNC_OUT(); return; L_088F5A00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5A08; } @@ -4579,7 +4340,17 @@ L_088F5A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F5A3C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4601,7 +4372,6 @@ L_088F5A80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(132))); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F5A98; } @@ -4609,7 +4379,6 @@ L_088F5A80: } L_088F5A90: aot_gpr_31 = (0x088F5A98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 733u, 0x088F3AC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5A98u) goto L_088F5A98; AOT_REGCACHE_SYNC_OUT(); return; L_088F5A98: @@ -4620,7 +4389,6 @@ L_088F5A98: L_088F5AA0: aot_gpr_4 = (static_cast(aot_gpr_2) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F5AC4; } @@ -4630,7 +4398,6 @@ L_088F5AAC: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (0u | 9u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5AD4; } @@ -4638,7 +4405,6 @@ L_088F5AAC: } L_088F5ABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5ACC; } @@ -4654,7 +4420,6 @@ L_088F5AC4: } L_088F5ACC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F5B14; } @@ -4668,7 +4433,6 @@ L_088F5AD4: goto L_088F5AE4; L_088F5AE4: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088F5B08; } @@ -4677,7 +4441,6 @@ L_088F5AE4: L_088F5AEC: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(56))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088F5B08; } @@ -4687,7 +4450,6 @@ L_088F5AF8: ctx.gpr[22] = (ctx.gpr[22] + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 + static_cast(-64)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5AE4; } @@ -4695,7 +4457,6 @@ L_088F5AF8: } L_088F5B08: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_088F5B14; } @@ -4706,7 +4467,6 @@ L_088F5B10: goto L_088F5B14; L_088F5B14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F5B5C; } @@ -4720,7 +4480,6 @@ L_088F5B1C: goto L_088F5B2C; L_088F5B2C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F5B50; } @@ -4729,7 +4488,6 @@ L_088F5B2C: L_088F5B34: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(56))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088F5B50; } @@ -4747,7 +4505,6 @@ L_088F5B40: } L_088F5B50: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F5B5C; } @@ -4758,7 +4515,6 @@ L_088F5B58: goto L_088F5B5C; L_088F5B5C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F5BF0; } @@ -4774,7 +4530,6 @@ L_088F5B64: goto L_088F5B7C; L_088F5B7C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F5BA0; } @@ -4783,7 +4538,6 @@ L_088F5B7C: L_088F5B84: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(56))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F5BA0; } @@ -4801,7 +4555,6 @@ L_088F5B90: } L_088F5BA0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F5BF0; } @@ -4815,7 +4568,6 @@ L_088F5BA8: goto L_088F5BB8; L_088F5BB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5BE8; } @@ -4824,7 +4576,6 @@ L_088F5BB8: L_088F5BC0: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(56))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_6; - // nop if (branch_taken) { goto L_088F5BE8; } @@ -4833,7 +4584,6 @@ L_088F5BC0: L_088F5BCC: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(56))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5BE8; } @@ -4851,7 +4601,6 @@ L_088F5BD8: } L_088F5BE8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5C70; } @@ -4899,7 +4648,6 @@ L_088F5BFC: } L_088F5C60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F5C9C; } @@ -4934,7 +4682,6 @@ L_088F5C78: goto L_088F5C9C; L_088F5C9C: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088F5CB0; } @@ -4947,7 +4694,6 @@ L_088F5CA4: goto L_088F5CB0; L_088F5CB0: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088F5CCC; } @@ -4962,7 +4708,6 @@ L_088F5CB8: goto L_088F5CCC; L_088F5CCC: { const bool branch_taken = ctx.gpr[18] != aot_gpr_6; - // nop if (branch_taken) { goto L_088F5CE0; } @@ -5001,7 +4746,6 @@ L_088F5CE0: L_088F5D10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5D24; } @@ -5015,7 +4759,6 @@ L_088F5D1C: L_088F5D24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5D38; } @@ -5029,7 +4772,6 @@ L_088F5D30: L_088F5D38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F5D68; } @@ -5039,7 +4781,6 @@ L_088F5D44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(132))); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F5D68; } @@ -5085,7 +4826,17 @@ L_088F5D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F5D98: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-592)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5095,13 +4846,11 @@ L_088F5D98: ctx.gpr[18] = (0u | 1u); ctx.gpr[19] = (0u | 0u); aot_gpr_31 = (0x088F5DF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 693u, 0x088F3880u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5DF4u) goto L_088F5DF4; AOT_REGCACHE_SYNC_OUT(); return; L_088F5DF4: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088F5E1C; } @@ -5112,7 +4861,6 @@ L_088F5E00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(168))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5E34; } @@ -5128,7 +4876,6 @@ L_088F5E14: } L_088F5E1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6E20; } @@ -5138,7 +4885,6 @@ L_088F5E24: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(170))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5E74; } @@ -5146,12 +4892,10 @@ L_088F5E24: } L_088F5E34: aot_gpr_31 = (0x088F5E3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5E3Cu) goto L_088F5E3C; AOT_REGCACHE_SYNC_OUT(); return; L_088F5E3C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F5E54; } @@ -5159,12 +4903,10 @@ L_088F5E3C: } L_088F5E44: aot_gpr_31 = (0x088F5E4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F5E4Cu) goto L_088F5E4C; AOT_REGCACHE_SYNC_OUT(); return; L_088F5E4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F5E64; } @@ -5190,7 +4932,6 @@ L_088F5E74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F5EA4; } @@ -5218,7 +4959,6 @@ L_088F5E9C: } L_088F5EA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6E20; } @@ -5228,7 +4968,6 @@ L_088F5EAC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(172))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5EC8; } @@ -5248,7 +4987,6 @@ L_088F5EC8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5EE4; } @@ -5267,7 +5005,6 @@ L_088F5EE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(166))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5F04; } @@ -5287,7 +5024,6 @@ L_088F5F04: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5F40; } @@ -5298,7 +5034,6 @@ L_088F5F18: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(168))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5F40; } @@ -5309,7 +5044,6 @@ L_088F5F2C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(170))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5F4C; } @@ -5329,7 +5063,6 @@ L_088F5F4C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(162))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F5F74; } @@ -5340,7 +5073,6 @@ L_088F5F60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(164))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5F84; } @@ -5361,7 +5093,6 @@ L_088F5F84: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(178))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5FA4; } @@ -5381,7 +5112,6 @@ L_088F5FA4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(180))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5FC4; } @@ -5401,7 +5131,6 @@ L_088F5FC4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(174))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F5FE4; } @@ -5421,7 +5150,6 @@ L_088F5FE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(176))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F6004; } @@ -5441,7 +5169,6 @@ L_088F6004: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(182))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F6028; } @@ -5462,7 +5189,6 @@ L_088F6028: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(146))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F604C; } @@ -5483,7 +5209,6 @@ L_088F604C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(148))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F6070; } @@ -5504,7 +5229,6 @@ L_088F6070: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(150))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F6094; } @@ -5525,7 +5249,6 @@ L_088F6094: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(132))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F60B4; } @@ -5545,7 +5268,6 @@ L_088F60B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(152))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F60D4; } @@ -5565,7 +5287,6 @@ L_088F60D4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(154))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F60F4; } @@ -5604,7 +5325,6 @@ L_088F6104: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F6610; } @@ -5635,7 +5355,6 @@ L_088F6134: L_088F613C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F6160; } @@ -5643,7 +5362,6 @@ L_088F613C: } L_088F6148: aot_gpr_31 = (0x088F6150u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F6150u) goto L_088F6150; AOT_REGCACHE_SYNC_OUT(); return; L_088F6150: @@ -5664,7 +5382,6 @@ L_088F6164: ctx.gpr[22] = (ctx.gpr[22] & 7u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F6180; } @@ -5681,7 +5398,6 @@ L_088F6178: L_088F6180: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F61A4; } @@ -5689,7 +5405,6 @@ L_088F6180: } L_088F618C: aot_gpr_31 = (0x088F6194u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F6194u) goto L_088F6194; AOT_REGCACHE_SYNC_OUT(); return; L_088F6194: @@ -5711,7 +5426,6 @@ L_088F61A8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F61C8; } @@ -5723,7 +5437,6 @@ L_088F61C0: goto L_088F61C8; L_088F61C8: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_088F63EC; } @@ -5916,7 +5629,6 @@ L_088F63EC: AOT_REGCACHE_SYNC_OUT(); return; L_088F643C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088F65C0; } @@ -5972,7 +5684,6 @@ L_088F6444: AOT_REGCACHE_SYNC_OUT(); return; L_088F64FC: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_088F6610; } @@ -6028,7 +5739,6 @@ L_088F6504: AOT_REGCACHE_SYNC_OUT(); return; L_088F65B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6610; } @@ -6062,7 +5772,6 @@ L_088F6610: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F6658; } @@ -6074,7 +5783,6 @@ L_088F6628: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F6658; } @@ -6083,7 +5791,6 @@ L_088F6628: L_088F6640: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(472))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F6658; } @@ -6092,7 +5799,6 @@ L_088F6640: L_088F664C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(468))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F6838; } @@ -6116,9 +5822,7 @@ L_088F6658: aot_gpr_5 = (16736u << 16u); ctx.fpr[24] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F6838; } @@ -6128,7 +5832,6 @@ L_088F66A8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_28 + static_cast(8688))); aot_gpr_5 = (static_cast(aot_gpr_5) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F6838; } @@ -6155,7 +5858,6 @@ L_088F66B8: AOT_REGCACHE_SYNC_OUT(); return; L_088F66F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F6838; } @@ -6213,7 +5915,6 @@ L_088F6744: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F67E8; } @@ -6301,7 +6002,6 @@ L_088F6838: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fpr[26] = ctx.fpr[26] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_088F68EC; @@ -6309,7 +6009,6 @@ L_088F6838: goto L_088F68EC; L_088F68EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_088F68FC; @@ -6317,9 +6016,7 @@ L_088F68EC: goto L_088F68FC; L_088F68FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F693C; } @@ -6333,7 +6030,6 @@ L_088F690C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_14 = aot_fpr_13 / ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 366u); if (branch_taken) { @@ -6343,7 +6039,6 @@ L_088F690C: } L_088F6934: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6948; } @@ -6351,7 +6046,6 @@ L_088F6934: } L_088F693C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6E20; } @@ -6370,7 +6064,6 @@ L_088F6948: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_6 = (0u | 362u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088F697C; } @@ -6379,7 +6072,6 @@ L_088F6948: L_088F6970: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088F6980; } @@ -6438,7 +6130,6 @@ L_088F69A0: aot_mem.aot_direct_store32_block(ctx.gpr[16] + static_cast(32), aot_run_words); } aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_088F6B60; } @@ -6515,7 +6206,6 @@ L_088F6AF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(232))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F6B18; } @@ -6524,7 +6214,6 @@ L_088F6AF4: L_088F6B04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F6B18; } @@ -6561,7 +6250,6 @@ L_088F6B3C: L_088F6B40: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F6B60; } @@ -6570,7 +6258,6 @@ L_088F6B40: L_088F6B4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(304))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F6B60; } @@ -6583,7 +6270,6 @@ L_088F6B58: AOT_REGCACHE_SYNC_OUT(); return; L_088F6B60: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F6DC0; } @@ -6598,7 +6284,6 @@ L_088F6B68: aot_gpr_4 = (17026u << 16u); ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_12)) && ctx.fpr[26] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (ctx.gpr[29] + static_cast(400)); if (branch_taken) { @@ -6639,7 +6324,6 @@ L_088F6B94: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6CB0; } @@ -6647,9 +6331,7 @@ L_088F6B94: } L_088F6BF0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(ctx.fpr[24])) && ctx.fpr[26] == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F6C5C; } @@ -6688,7 +6370,6 @@ L_088F6C00: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F6CB0; } @@ -6843,7 +6524,6 @@ L_088F6DB0: } L_088F6DC0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F6E20; } @@ -6898,7 +6578,17 @@ L_088F6E20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F6E68: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-112)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6959,7 +6649,6 @@ L_088F6F3C: ctx.gpr[18] = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(26))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088F6F78; } @@ -6989,7 +6678,6 @@ L_088F6F78: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(25))); aot_gpr_4 = (aot_gpr_6 < static_cast(14) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7001,11 +6689,20 @@ L_088F6F88: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-15872))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F6FA0: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_4 = (0u | 40u); @@ -7018,7 +6715,6 @@ L_088F6FA0: } L_088F6FB0: { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F6FC0; } @@ -7105,7 +6801,6 @@ L_088F703C: goto L_088F7040; L_088F7040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7151,7 +6846,6 @@ L_088F7080: L_088F7088: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7197,7 +6891,6 @@ L_088F70CC: L_088F70D4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7243,7 +6936,6 @@ L_088F7118: L_088F7120: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7289,7 +6981,6 @@ L_088F7164: L_088F716C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7335,7 +7026,6 @@ L_088F71B0: L_088F71B8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7381,7 +7071,6 @@ L_088F71FC: L_088F7204: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7427,7 +7116,6 @@ L_088F7248: L_088F7250: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7473,7 +7161,6 @@ L_088F7294: L_088F729C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7519,7 +7206,6 @@ L_088F72E0: L_088F72E8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7565,7 +7251,6 @@ L_088F732C: L_088F7334: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7611,7 +7296,6 @@ L_088F7378: L_088F7380: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7659,7 +7343,6 @@ L_088F73C4: L_088F73CC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7707,7 +7390,6 @@ L_088F7410: L_088F7418: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7424; } @@ -7715,7 +7397,6 @@ L_088F7418: } L_088F7424: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_088F749C; } @@ -7728,7 +7409,6 @@ L_088F742C: AOT_REGCACHE_SYNC_OUT(); return; L_088F7434: aot_gpr_31 = (0x088F743Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], aot_gpr_28, ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F743Cu) goto L_088F743C; AOT_REGCACHE_SYNC_OUT(); return; L_088F743C: @@ -7795,7 +7475,17 @@ L_088F74B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F74EC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7840,7 +7530,6 @@ L_088F7558: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(156))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F7680; } @@ -7850,7 +7539,6 @@ L_088F7568: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(158))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F7638; } @@ -7860,7 +7548,6 @@ L_088F7578: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(160))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F7620; } @@ -7870,7 +7557,6 @@ L_088F7588: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(162))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_088F75D8; } @@ -7880,7 +7566,6 @@ L_088F7598: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(164))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F75C0; } @@ -7890,7 +7575,6 @@ L_088F75A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(166))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F76B8; } @@ -7898,7 +7582,6 @@ L_088F75A8: } L_088F75B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F76F8; } @@ -8050,7 +7733,6 @@ L_088F76F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(168))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_088F7718; } @@ -8060,7 +7742,6 @@ L_088F7708: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(170))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F7750; } @@ -8077,7 +7758,6 @@ L_088F7728: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(168))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F7744; } @@ -8107,7 +7787,6 @@ L_088F7750: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(152))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F7918; } @@ -8115,13 +7794,11 @@ L_088F7750: } L_088F7760: aot_gpr_31 = (0x088F7768u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7768u) goto L_088F7768; AOT_REGCACHE_SYNC_OUT(); return; L_088F7768: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F7910; } @@ -8134,7 +7811,6 @@ L_088F7774: AOT_REGCACHE_SYNC_OUT(); return; L_088F777C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F7910; } @@ -8196,7 +7872,6 @@ L_088F77D4: aot_mem.aot_direct_store_word_right(ctx.gpr[29] + static_cast(29), aot_gpr_4); aot_mem.aot_direct_store_word_left(ctx.gpr[29] + static_cast(32), aot_gpr_4); aot_gpr_31 = (0x088F7804u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7804u) goto L_088F7804; AOT_REGCACHE_SYNC_OUT(); return; L_088F7804: @@ -8334,7 +8009,6 @@ L_088F7918: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F79A4; } @@ -8347,7 +8021,6 @@ L_088F7928: AOT_REGCACHE_SYNC_OUT(); return; L_088F7930: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F799C; } @@ -8399,7 +8072,6 @@ L_088F7978: AOT_REGCACHE_SYNC_OUT(); return; L_088F7988: aot_gpr_31 = (0x088F7990u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7990u) goto L_088F7990; AOT_REGCACHE_SYNC_OUT(); return; L_088F7990: @@ -8431,19 +8103,27 @@ L_088F79A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F79BC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-208)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(152), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x088F79F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F79F8u) goto L_088F79F8; AOT_REGCACHE_SYNC_OUT(); return; L_088F79F8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F7A14; } @@ -8452,7 +8132,6 @@ L_088F79F8: L_088F7A00: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F7A1C; } @@ -8460,7 +8139,6 @@ L_088F7A00: } L_088F7A0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7C5C; } @@ -8468,7 +8146,6 @@ L_088F7A0C: } L_088F7A14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7DBC; } @@ -8481,7 +8158,6 @@ L_088F7A1C: AOT_REGCACHE_SYNC_OUT(); return; L_088F7A24: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F7DB4; } @@ -8489,12 +8165,10 @@ L_088F7A24: } L_088F7A2C: aot_gpr_31 = (0x088F7A34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7A34u) goto L_088F7A34; AOT_REGCACHE_SYNC_OUT(); return; L_088F7A34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F7B10; } @@ -8502,7 +8176,6 @@ L_088F7A34: } L_088F7A3C: aot_gpr_31 = (0x088F7A44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7A44u) goto L_088F7A44; AOT_REGCACHE_SYNC_OUT(); return; L_088F7A44: @@ -8594,7 +8267,6 @@ L_088F7AFC: AOT_REGCACHE_SYNC_OUT(); return; L_088F7B08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7DB4; } @@ -8602,7 +8274,6 @@ L_088F7B08: } L_088F7B10: aot_gpr_31 = (0x088F7B18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7B18u) goto L_088F7B18; AOT_REGCACHE_SYNC_OUT(); return; L_088F7B18: @@ -8612,7 +8283,6 @@ L_088F7B18: AOT_REGCACHE_SYNC_OUT(); return; L_088F7B20: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F7B40; } @@ -8620,7 +8290,6 @@ L_088F7B20: } L_088F7B28: aot_gpr_31 = (0x088F7B30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7B30u) goto L_088F7B30; AOT_REGCACHE_SYNC_OUT(); return; L_088F7B30: @@ -8630,7 +8299,6 @@ L_088F7B30: AOT_REGCACHE_SYNC_OUT(); return; L_088F7B38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F7B90; } @@ -8651,7 +8319,6 @@ L_088F7B54: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088F7B74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F7B74u) goto L_088F7B74; AOT_REGCACHE_SYNC_OUT(); return; L_088F7B74: @@ -8675,7 +8342,6 @@ L_088F7B74: AOT_REGCACHE_SYNC_OUT(); return; L_088F7B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7DB4; } @@ -8699,7 +8365,6 @@ L_088F7B90: } L_088F7BB8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F7BD0; } @@ -8707,7 +8372,6 @@ L_088F7BB8: } L_088F7BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7BD8; } @@ -8715,7 +8379,6 @@ L_088F7BC0: } L_088F7BC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F7BD8; } @@ -8723,7 +8386,6 @@ L_088F7BC8: } L_088F7BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7C54; } @@ -8732,7 +8394,6 @@ L_088F7BD0: L_088F7BD8: aot_gpr_4 = (0u | 13u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_088F7BE8; } @@ -8786,7 +8447,6 @@ L_088F7BFC: AOT_REGCACHE_SYNC_OUT(); return; L_088F7C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F7DB4; } @@ -8813,7 +8473,6 @@ L_088F7C88: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F7D9C; } @@ -8822,7 +8481,6 @@ L_088F7C88: L_088F7CA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088F7D9C; } @@ -8831,7 +8489,6 @@ L_088F7CA8: L_088F7CB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F7CD0; } @@ -8844,7 +8501,6 @@ L_088F7CC0: AOT_REGCACHE_SYNC_OUT(); return; L_088F7CC8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_088F7D9C; } @@ -8900,7 +8556,6 @@ L_088F7D28: AOT_REGCACHE_SYNC_OUT(); return; L_088F7D40: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_088F7D9C; } @@ -8951,7 +8606,6 @@ L_088F7D9C: ctx.gpr[19] = (static_cast(static_cast(ctx.gpr[19]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F7C88; } @@ -8982,7 +8636,17 @@ L_088F7DBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F7DF0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-368)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0061.cpp b/profiles/vcs/generated/generated_unit_0061.cpp index c5ceccf..4fc3a41 100644 --- a/profiles/vcs/generated/generated_unit_0061.cpp +++ b/profiles/vcs/generated/generated_unit_0061.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0061[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 23, 0, 0, 24, 0, 25, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 32, - 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 45, 0, 0, 0, 0, 46, 0, 47, 48, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 0, 0, 55, - 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, - 0, 62, 0, 63, 0, 0, 64, 0, 65, 0, 0, 66, 0, 0, 67, 0, 68, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 72, - 0, 0, 73, 0, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 84, 0, - 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 88, 0, 0, 89, 0, 90, 0, 0, 0, 0, 91, 0, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 95, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 100, 0, 101, 0, 0, 102, 0, 103, 0, 104, 0, 0, 105, 0, 0, 106, 0, 107, 0, - 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 0, 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, - 0, 0, 0, 0, 118, 0, 119, 0, 120, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 125, 0, 126, 0, 127, 0, 0, 128, - 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 136, 0, - 137, 138, 0, 139, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 142, 0, 143, 0, 144, 0, 0, 145, 0, 0, 146, 147, 0, 0, 0, 148, 0, 149, - 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, 0, 0, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 0, - 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 166, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 171, - 0, 0, 0, 172, 0, 173, 174, 0, 175, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, 0, 180, 0, 0, 181, 0, 0, 182, 183, 0, - 184, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 189, 0, 0, 0, 190, 0, - 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 195, - 0, 196, 0, 0, 0, 197, 0, 198, 0, 0, 199, 0, 0, 200, 0, 201, 0, 0, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 206, 0, - 207, 0, 0, 208, 0, 0, 0, 209, 0, 210, 0, 211, 0, 212, 0, 0, 0, 213, 0, 214, 0, 215, 0, 0, 216, 0, 0, 0, 217, 0, 218, 0, - 219, 0, 220, 0, 0, 0, 221, 0, 222, 0, 223, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 0, 0, 0, 230, 0, - 231, 0, 232, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 0, 238, 0, 0, 0, 239, 0, 0, 0, - 0, 0, 0, 240, 241, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 245, 0, 0, - 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 250, 0, 251, 0, 0, 252, 0, 253, 0, 254, 0, 255, 0, 0, 256, - 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 265, 0, 0, 266, 0, 267, 0, 268, 0, 0, 0, 269, 0, 270, 0, 0, 271, 0, 0, 0, 0, - 0, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 0, 277, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, - 0, 281, 0, 0, 0, 0, 282, 0, 283, 0, 0, 284, 0, 0, 285, 0, 286, 0, 0, 0, 287, 0, 288, 0, 0, 0, 0, 289, 0, 290, 0, 0, - 291, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 295, 0, 0, 0, 296, 0, 297, 0, 0, 0, 298, 0, 0, 299, 0, 0, 300, 0, 301, 302, 0, - 303, 0, 0, 304, 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 311, 312, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 315, 0, 0, 316, 0, 0, 317, 0, 318, - 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 324, 0, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 327, 0, - 328, 0, 0, 329, 0, 330, 0, 0, 331, 0, 332, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 335, 0, 0, 336, 0, 337, 0, 0, 338, 0, 0, - 339, 0, 0, 0, 0, 0, 340, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 344, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, - 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, - 0, 354, 0, 355, 0, 356, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, - 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 365, - 0, 0, 0, 0, 0, 366, 0, 367, 0, 0, 368, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 372, 0, 0, 0, 373, 374, 0, 0, 375, 0, 0, - 376, 0, 0, 0, 0, 377, 0, 378, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 381, 0, 0, 0, 0, 0, 0, 382, 383, 0, 384, 0, - 385, 0, 0, 386, 0, 387, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, 392, 0, 393, 0, 0, 0, 394, 0, 0, - 395, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 399, 0, 0, 400, 0, 401, 0, 402, 0, 0, 403, 0, 0, 0, 0, - 404, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, - 408, 0, 0, 409, 0, 410, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 0, 0, 415, 0, 416, 0, - 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 421, 0, - 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 426, 0, 0, 0, 427, 0, 0, - 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, 431, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 441, 0, 442, 443, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 450, 0, 451, 0, 0, 0, 0, 0, 452, - 0, 453, 0, 454, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 462, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 465, 0, 466, 0, 467, 0, 468, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 471, 472, 0, 0, 473, 0, 0, 474, 0, 475, 0, 0, - 0, 0, 476, 0, 477, 0, 0, 0, 478, 0, 479, 0, 0, 0, 0, 480, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 482, 0, 0, 483, 0, 484, 485, 0, 0, 486, 0, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 491, 0, 0, - 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 496, 497, 0, 0, 498, - 0, 0, 499, 0, 500, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 503, 0, 504, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 507, 0, 508, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 511, 0, 0, 0, 512, 0, 513, 0, 0, 0, 514, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, 518, 0, 519, 0, 0, 0, 0, 0, - 520, 0, 521, 0, 0, 0, 0, 0, 522, 523, 0, 524, 0, 0, 525, 0, 526, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, - 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 531, 0, 532, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 536, 537, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 541, 0, 542, 543, 0, 0, 544, 0, 545, 0, 0, 546, - 0, 547, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 554, 0, 0, - 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 557, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 0, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 564, 0, 0, - 0, 0, 565, 0, 0, 566, 0, 0, 567, 0, 568, 569, 0, 0, 0, 570, 0, 0, 571, 0, 0, 572, 0, 0, 573, 0, 0, 574, 0, 575, 576, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 583, 0, - 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, 589, 590, 0, 0, 0, 591, 0, 0, 0, - 0, 592, 0, 593, 0, 0, 594, 0, 0, 595, 0, 596, 597, 0, 0, 0, 598, 0, 0, 599, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, 603, 604, - 0, 0, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, - 610, 0, 0, 611, 0, 612, 613, 0, 0, 0, 614, 0, 0, 615, 0, 0, 0, 616, 0, 617, 0, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, 0, - 0, 621, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 626, 0, 0, 0, - 0, 0, 627, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 630, 0, 0, 0, 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, - 633, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, - 0, 0, 638, 0, 639, 0, 0, 640, 0, 641, 0, 0, 0, 0, 0, 642, 0, 643, 0, 644, 0, 0, 0, 645, 0, 0, 0, 646, 0, 0, 0, 647, - 0, 648, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 651, 0, 0, 0, 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 0, 0, 656, - 0, 657, 0, 0, 658, 0, 0, 659, 0, 660, 0, 0, 661, 0, 0, 662, 0, 663, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 0, 667, 0, - 668, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 671, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 675, 0, 676, 0, 0, 0, 0, - 0, 677, 0, 0, 678, 0, 679, 680, 0, 0, 0, 681, 0, 0, 682, 0, 683, 0, 0, 0, 0, 684, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, - 0, 687, 0, 0, 688, 0, 0, 689, 0, 690, 691, 0, 0, 0, 692, 0, 0, 693, 0, 694, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 697, 0, - 0, 0, 698, 0, 699, 700, 0, 0, 0, 701, 0, 702, 0, 0, 0, 0, 0, 703, 0, 0, 704, 0, 705, 706, 0, 0, 0, 707, 0, 0, 708, 0, - 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 713, 0, - 0, 714, 0, 715, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 719, 0, 0, 720, 0, 721, 0, 0, 0, 0, 0, - 722, 0, 723, 0, 0, 0, 0, 0, 0, 724, 0, 0, 725, 0, 726, 727, 0, 0, 0, 728, 0, 0, 729, 0, 730, 731, 0, 732, 0, 0, 733, 0, - 0, 734, 0, 735, 0, 736, 0, 737, 0, 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 740, 741, 0, 0, 0, 742, 0, 0, 743, 0, 744, 0, 0, - 745, 0, 746, 747, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 750, 0, 0, 751, 0, 0, 752, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 0, 756, 0, - 0, 0, 0, 757, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 762, 0, 0, 763, 0, 764, 0, 0, 765, - 0, 766, 767, 0, 0, 768, 0, 769, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 771, 0, 772, 0, 773, 0, 0, 774, 0, 0, 0, 775, - 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 778, 0, 779, 0, 780, 0, 781, 0, 782, 0, 0, 783, 784, 0, 785, 0, 786, - 0, 0, 787, 788, 0, 0, 789, 0, 790, 0, 791, 0, 0, 792, 0, 0, 793, 0, 794, 0, 0, 0, 0, 795, 0, 796, 0, 797, 0, 0, 0, 0, - 798, 0, 799, 0, 800, 801, 0, 0, 802, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 805, 0, 0, 0, 0, 806, 0, 0, 0, 807, 0, 0, 0, 808, 0, 809, 0, 810, 0, 0, 0, 811, 0, 0, 812, 0, 0, 0, 0, 0, - 0, 813, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 0, 817, 0, 818, 0, 819, 0, 0, 0, 0, 0, 820, 0, - 821, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 825, 0, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 0, - 832, 0, 833, 0, 834, 0, 835, 0, 0, 836, 0, 0, 837, 0, 838, 0, 839, 0, 0, 0, 0, 0, 840, 841, 0, 0, 842, 0, 843, 0, 844, 0, - 0, 0, 845, 0, 0, 0, 0, 0, 846, 0, 0, 0, 847, 0, 0, 0, 0, 848, 0, 849, 0, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, - 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 853, 0, 0, 0, 0, 854, 0, 0, 0, 0, 855, 0, 856, 0, 0, 0, 0, - 857, 0, 858, 0, 0, 0, 859, 0, 860, 0, 0, 0, 861, 0, 0, 0, 0, 862, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 865, 0, 866, - 0, 0, 0, 0, 0, 867, 0, 868, 0, 0, 869, 0, 0, 0, 0, 870, 0, 871, 0, 0, 0, 0, 872, 0, 873, 0, 0, 0, 0, 874, 0, 875, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, 878, 0, - 879, 0, 0, 0, 0, 880, 0, 881, 0, 0, 0, 0, 0, 882, 0, 883, 0, 884, 0, 885, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 887, 0, 0, 0, 0, 888, 0, 889, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 891, 892, 0, 0, 0, 0, 0, 0, 893, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 894, 0, 0, 895, 0, 0, 896, 0, 897, 0, 0, 0, 0, 898, 0, 0, 0, 899, 0, 0, 900, 0, - 0, 901, 0, 902, 903, 0, 0, 0, 0, 0, 0, 0, 0, 904, 905, 0, 0, 0, 0, 0, 0, 0, 0, 906, 907, 0, 0, 0, 0, 908, 0, 0, - 0, 0, 0, 909, 0, 910, 0, 0, 0, 0, 0, 911, 912, 0, 0, 0, 0, 0, 913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, 0, 915, 0, 0, 916, 0, 917, 0, 0, 0, 0, 918, 0, 0, 0, 919, 0, 0, 920, 0, - 0, 921, 0, 922, 923, 0, 0, 0, 0, 0, 924, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 926, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, - 0, 928, 0, 929, 0, 930, 0, 0, 0, 0, 0, 0, 0, 0, 931, 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, 0, 936, 0, - 0, 937, 0, 938, 0, 939, 0, 940, 0, 0, 941, 0, 942, 0, 0, 0, 0, 943, 0, 0, 0, 944, 0, 0, 945, 0, 0, 946, 0, 947, 948, 0, - 0, 0, 0, 0, 0, 0, 0, 949, 950, 0, 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, 953, 954, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 955, 0, 956, 0, 0, 0, 0, 0, 0, 0, 0, 957, 0, 958, 0, 959, 960, 0, 0, 0, - 0, 961, 0, 0, 0, 0, 0, 962, 0, 963, 0, 0, 0, 0, 0, 964, 965, 0, 0, 0, 0, 0, 0, 0, 966, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 0, 0, 969, 0, 970, 0, 0, 971, - 0, 0, 0, 0, 0, 972, 0, 0, 973, 0, 974, 0, 0, 0, 0, 975, 0, 0, 0, 976, 0, 0, 977, 0, 978, 0, 0, 0, 0, 0, 0, 979, - 0, 0, 980, 0, 0, 0, 0, 0, 0, 0, 981, 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, 0, 983, 0, 984, 0, 985, 0, 0, 0, 0, 0, - 0, 0, 0, 986, 987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 989, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0061[64] = { + 0x00142A0042084001ull, 0x0000400880340015ull, 0x8000000000094911ull, 0xA108400000000000ull, + 0x81080A800010000Aull, 0x8AA9034200022100ull, 0x9015494A22210202ull, 0x4295000249492AA4ull, + 0x5254A280014A8001ull, 0x0008035080822AAAull, 0x4482885095200080ull, 0x4A284A08A325484Bull, + 0x90288610104A4000ull, 0x4508082164A48968ull, 0x5450A4A284008005ull, 0x42AA8545512A2A89ull, + 0x244000581160440Dull, 0x15082084954A2222ull, 0x8005255409454A00ull, 0x69228A2928514942ull, + 0xA4A0002018154249ull, 0x252825294125088Aull, 0x80012812812C0941ull, 0x88000801420208AAull, + 0x581408A1262924A0ull, 0x0952A20122A140A9ull, 0x5050222908002003ull, 0x2280010A41020081ull, + 0x0092248000406902ull, 0x82A252000101A400ull, 0x5504A5000222088Aull, 0x0002851429348000ull, + 0x9A40001421429348ull, 0x0020034000A50A14ull, 0x04114B05054A2288ull, 0x94D2081006905484ull, + 0x0845100435500042ull, 0x69248D2424400008ull, 0x11A4111044411104ull, 0x40022208D2491A4Aull, + 0x12028022144A2469ull, 0x800100450885000Cull, 0x82921282888A8294ull, 0x0A111A4149129292ull, + 0x450A4692422148D2ull, 0x4150000248D20A34ull, 0x4B48D2050524011Aull, 0x0001004D291A40AAull, + 0x94A4084850408920ull, 0xACAA8804895040A6ull, 0x004005350A85254Cull, 0x41505042048A8884ull, + 0x54C1525555525005ull, 0x0A108802010A1104ull, 0xA14284A0A1421145ull, 0x004AA0A150004000ull, + 0x4885240040C10508ull, 0x000418282180601Aull, 0x2020241A48852020ull, 0x404000800400C02Aull, + 0x34020180692214AAull, 0x010182821A805000ull, 0x8148852094802000ull, 0x4000801805440404ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0061[64] = { + 1u, 11u, 20u, 28u, 33u, 42u, 56u, 73u, 92u, 108u, 123u, 137u, 159u, 172u, 191u, 207u, + 231u, 246u, 264u, 281u, 303u, 319u, 339u, 354u, 366u, 385u, 404u, 417u, 428u, 440u, 453u, 469u, + 482u, 499u, 511u, 529u, 547u, 561u, 577u, 592u, 610u, 627u, 638u, 657u, 677u, 698u, 714u, 734u, + 750u, 766u, 787u, 805u, 821u, 845u, 857u, 876u, 887u, 901u, 914u, 928u, 937u, 955u, 967u, 980u, }; void recomp_unit_0061_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0061_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088F8000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0061[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0061[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0061[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088F8000; @@ -1262,7 +1169,6 @@ L_088F8078: } L_088F80A4: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088F817C; } @@ -1270,7 +1176,6 @@ L_088F80A4: } L_088F80AC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F80D0; } @@ -1297,7 +1202,6 @@ L_088F80B4: AOT_REGCACHE_SYNC_OUT(); return; L_088F80C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F817C; } @@ -1320,7 +1224,6 @@ L_088F80D0: AOT_REGCACHE_SYNC_OUT(); return; L_088F8100: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088F817C; } @@ -1362,7 +1265,6 @@ L_088F8110: AOT_REGCACHE_SYNC_OUT(); return; L_088F8148: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F817C; } @@ -1381,7 +1283,6 @@ L_088F8154: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F81B8; } @@ -1433,12 +1334,21 @@ L_088F81B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8240; } @@ -1462,7 +1372,6 @@ L_088F8220: L_088F822C: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F8240; } @@ -1470,7 +1379,6 @@ L_088F822C: } L_088F8238: aot_gpr_31 = (0x088F8240u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F8240u) goto L_088F8240; AOT_REGCACHE_SYNC_OUT(); return; L_088F8240: @@ -1480,7 +1388,17 @@ L_088F8240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F824C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4)))))); aot_gpr_6 = (0u + static_cast(-2)); @@ -1528,7 +1446,17 @@ L_088F824C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F82FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1599,7 +1527,17 @@ L_088F83B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F83CC: aot_gpr_4 = (aot_gpr_4 + static_cast(16)); { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); @@ -1616,11 +1554,20 @@ L_088F83CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F83E0: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), std::bit_cast(aot_fpr_12)); @@ -1630,28 +1577,67 @@ L_088F83E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F83F4: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F83FC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8404: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F840C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(0), static_cast(0u)); @@ -1761,9 +1747,7 @@ L_088F84FC: L_088F8520: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3964))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088F85A0; } @@ -1841,7 +1825,17 @@ L_088F85A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F85C0: aot_gpr_4 = (0u | 2u); jump_target = aot_gpr_31; @@ -1849,35 +1843,83 @@ L_088F85C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F85CC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 2u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F85D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F85DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F85E4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u + static_cast(-1)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F85EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.gpr[2] = (0u | 0u); @@ -1888,11 +1930,20 @@ L_088F85EC: goto L_088F85FC; L_088F85FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8604: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -1930,7 +1981,17 @@ L_088F8654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8664: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1953,7 +2014,6 @@ L_088F8674: } L_088F8684: aot_gpr_31 = (0x088F868Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F868Cu) goto L_088F868C; AOT_REGCACHE_SYNC_OUT(); return; L_088F868C: @@ -1963,10 +2023,19 @@ L_088F868C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8698: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F86C0; } @@ -1975,7 +2044,6 @@ L_088F8698: L_088F86A0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_088F86C0; } @@ -1984,7 +2052,6 @@ L_088F86A0: L_088F86AC: ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088F86C8; } @@ -1992,7 +2059,6 @@ L_088F86AC: } L_088F86B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F87E4; } @@ -2027,7 +2093,6 @@ L_088F86D0: L_088F86F0: ctx.gpr[3] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[3] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088F872C; } @@ -2036,7 +2101,6 @@ L_088F86F0: L_088F86FC: ctx.gpr[12] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1)))))); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_088F872C; } @@ -2045,7 +2109,6 @@ L_088F86FC: L_088F8708: ctx.gpr[12] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088F872C; } @@ -2057,7 +2120,6 @@ L_088F8714: goto L_088F871C; L_088F871C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_088F86F0; } @@ -2073,7 +2135,6 @@ L_088F8724: } L_088F872C: { const bool branch_taken = ctx.gpr[3] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088F8758; } @@ -2082,7 +2143,6 @@ L_088F872C: L_088F8734: ctx.gpr[12] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1)))))); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_088F8758; } @@ -2091,7 +2151,6 @@ L_088F8734: L_088F8740: ctx.gpr[12] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_088F8758; } @@ -2156,7 +2215,6 @@ L_088F8784: ctx.gpr[3] = (ctx.gpr[12] | ctx.gpr[3]); ctx.gpr[3] = (ctx.gpr[3] & 255u); { const bool branch_taken = ctx.gpr[3] != 0u; - // nop if (branch_taken) { goto L_088F87D0; } @@ -2164,7 +2222,6 @@ L_088F8784: } L_088F87C0: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088F87D0; } @@ -2172,7 +2229,6 @@ L_088F87C0: } L_088F87C8: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F87DC; } @@ -2189,7 +2245,6 @@ L_088F87D0: } L_088F87DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8724; } @@ -2225,7 +2280,6 @@ L_088F8800: ctx.gpr[9] = (ctx.gpr[10] | ctx.gpr[9]); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_088F884C; } @@ -2233,7 +2287,6 @@ L_088F8800: } L_088F883C: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_088F884C; } @@ -2241,7 +2294,6 @@ L_088F883C: } L_088F8844: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F8724; } @@ -2258,11 +2310,20 @@ L_088F884C: } L_088F8858: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8860: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2295,7 +2356,6 @@ L_088F88A4: AOT_REGCACHE_SYNC_OUT(); return; L_088F88B4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F89A0; } @@ -2325,7 +2385,6 @@ L_088F88D0: L_088F88D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088F89A0; } @@ -2338,7 +2397,6 @@ L_088F88E4: goto L_088F88F0; L_088F88F0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F8998; } @@ -2367,7 +2425,6 @@ L_088F890C: } L_088F8914: { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_088F8934; } @@ -2375,7 +2432,6 @@ L_088F8914: } L_088F891C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088F8934; } @@ -2383,7 +2439,6 @@ L_088F891C: } L_088F8924: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088F8934; } @@ -2391,7 +2446,6 @@ L_088F8924: } L_088F892C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_088F8998; } @@ -2477,7 +2531,17 @@ L_088F89A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F89CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[17]); @@ -2522,7 +2586,6 @@ L_088F8A1C: L_088F8A54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16552))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F8B7C; } @@ -2534,7 +2597,6 @@ L_088F8A60: goto L_088F8A68; L_088F8A68: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F8E00; } @@ -2543,7 +2605,6 @@ L_088F8A68: L_088F8A70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8E00; } @@ -2558,7 +2619,6 @@ L_088F8A7C: goto L_088F8E3C; L_088F8A90: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F8E00; } @@ -2603,7 +2663,6 @@ L_088F8AC4: L_088F8ADC: aot_gpr_5 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F8B04; } @@ -2629,7 +2688,6 @@ L_088F8B00: goto L_088F8B04; L_088F8B04: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088F8B40; } @@ -2701,7 +2759,6 @@ L_088F8B64: AOT_REGCACHE_SYNC_OUT(); return; L_088F8B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8A68; } @@ -2723,7 +2780,6 @@ L_088F8B8C: goto L_088F8BA4; L_088F8BA4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F8E00; } @@ -2732,7 +2788,6 @@ L_088F8BA4: L_088F8BAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8E00; } @@ -2747,7 +2802,6 @@ L_088F8BB8: goto L_088F8E3C; L_088F8BCC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F8E00; } @@ -2796,7 +2850,6 @@ L_088F8BF8: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8C44; } @@ -2813,7 +2866,6 @@ L_088F8C38: } L_088F8C44: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F8CA8; } @@ -2905,7 +2957,6 @@ L_088F8CD4: L_088F8CF0: aot_gpr_4 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F8D18; } @@ -2931,7 +2982,6 @@ L_088F8D14: goto L_088F8D18; L_088F8D18: { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088F8D54; } @@ -2998,7 +3048,6 @@ L_088F8D74: goto L_088F8D78; L_088F8D78: { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_088F8DE8; } @@ -3051,7 +3100,6 @@ L_088F8DCC: AOT_REGCACHE_SYNC_OUT(); return; L_088F8DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8DF8; } @@ -3066,7 +3114,6 @@ L_088F8DE8: AOT_REGCACHE_SYNC_OUT(); return; L_088F8DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8BA4; } @@ -3097,7 +3144,17 @@ L_088F8E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F8E3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3140,7 +3197,6 @@ L_088F8E84: AOT_REGCACHE_SYNC_OUT(); return; L_088F8E94: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F8EBC; } @@ -3149,7 +3205,6 @@ L_088F8E94: L_088F8E9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8EBC; } @@ -3166,7 +3221,6 @@ L_088F8EA8: } L_088F8EB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8FCC; } @@ -3196,7 +3250,6 @@ L_088F8ED8: goto L_088F8EE8; L_088F8EE8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8FBC; } @@ -3204,7 +3257,6 @@ L_088F8EE8: } L_088F8EF0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F8FBC; } @@ -3231,7 +3283,6 @@ L_088F8F0C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); ctx.gpr[8] = (ctx.gpr[8] & 1u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088F8F24; } @@ -3247,7 +3298,6 @@ L_088F8F1C: } L_088F8F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8F4C; } @@ -3255,7 +3305,6 @@ L_088F8F24: } L_088F8F2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8F4C; } @@ -3265,7 +3314,6 @@ L_088F8F34: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); ctx.gpr[8] = (ctx.gpr[8] & 1u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088F8F4C; } @@ -3316,7 +3364,6 @@ L_088F8F70: } L_088F8F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F8FA0; } @@ -3350,7 +3397,6 @@ L_088F8F98: } L_088F8FA0: { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088F8FBC; } @@ -3369,7 +3415,6 @@ L_088F8FA8: } L_088F8FBC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F9008; } @@ -3385,7 +3430,6 @@ L_088F8FC4: } L_088F8FCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F8FF8; } @@ -3393,7 +3437,6 @@ L_088F8FCC: } L_088F8FD4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F8FF8; } @@ -3401,7 +3444,6 @@ L_088F8FD4: } L_088F8FDC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F8FF8; } @@ -3420,7 +3462,6 @@ L_088F8FE4: } L_088F8FF8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F9008; } @@ -3451,12 +3492,21 @@ L_088F900C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9028: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F9054; } @@ -3480,16 +3530,24 @@ L_088F9054: goto L_088F9058; L_088F9058: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9060: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F908C; } @@ -3513,11 +3571,20 @@ L_088F908C: goto L_088F9090; L_088F9090: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9098: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -3534,7 +3601,6 @@ L_088F9098: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[7]); ctx.gpr[7] = (aot_gpr_4 < static_cast(128) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088F90E8; } @@ -3553,7 +3619,6 @@ L_088F90D8: L_088F90E8: ctx.gpr[7] = (aot_gpr_4 < static_cast(2048) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088F9104; } @@ -3573,7 +3638,6 @@ L_088F9104: ctx.gpr[7] = (1u << 16u); ctx.gpr[7] = (aot_gpr_4 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088F9124; } @@ -3593,7 +3657,6 @@ L_088F9124: ctx.gpr[7] = (32u << 16u); ctx.gpr[7] = (aot_gpr_4 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088F9144; } @@ -3644,7 +3707,6 @@ L_088F9160: } L_088F9168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F91B4; } @@ -3653,7 +3715,6 @@ L_088F9168: L_088F9170: ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_088F919C; } @@ -3662,7 +3723,6 @@ L_088F9170: L_088F917C: aot_gpr_5 = (static_cast(ctx.gpr[8]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F91E0; } @@ -3704,14 +3764,34 @@ L_088F91E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F91E8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F91F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3744,7 +3824,6 @@ L_088F922C: } L_088F9238: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F92A0; } @@ -3772,7 +3851,6 @@ L_088F9258: L_088F9260: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F9298; } @@ -3789,7 +3867,6 @@ L_088F926C: goto L_088F8E3C; L_088F9288: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F92A8; } @@ -3797,7 +3874,6 @@ L_088F9288: } L_088F9290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F9304; } @@ -3871,7 +3947,6 @@ L_088F9304: goto L_088F8E3C; L_088F9318: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088F9358; } @@ -3920,7 +3995,6 @@ L_088F9358: goto L_088F8E3C; L_088F936C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088F93AC; } @@ -3968,7 +4042,6 @@ L_088F93AC: goto L_088F9028; L_088F93BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F93D4; } @@ -3978,7 +4051,6 @@ L_088F93C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1)))))); aot_gpr_5 = (0u | 95u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F9400; } @@ -4045,7 +4117,6 @@ L_088F9424: goto L_088F9438; L_088F9438: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088F9448; } @@ -4061,7 +4132,6 @@ L_088F9440: } L_088F9448: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F9470; } @@ -4095,7 +4165,17 @@ L_088F9470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9494: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4122,7 +4202,6 @@ L_088F94D4: L_088F94DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F94FC; } @@ -4131,7 +4210,6 @@ L_088F94DC: L_088F94E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F9504; } @@ -4139,7 +4217,6 @@ L_088F94E8: } L_088F94F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F9504; } @@ -4155,7 +4232,6 @@ L_088F94FC: } L_088F9504: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F952C; } @@ -4191,7 +4267,6 @@ L_088F9540: L_088F9548: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F9580; } @@ -4200,7 +4275,6 @@ L_088F9548: L_088F9554: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F9578; } @@ -4246,7 +4320,6 @@ L_088F9594: } L_088F95A0: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F95D4; } @@ -4255,7 +4328,6 @@ L_088F95A0: L_088F95A8: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F95CC; } @@ -4293,7 +4365,6 @@ L_088F95E0: L_088F95E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F9620; } @@ -4302,7 +4373,6 @@ L_088F95E8: L_088F95F4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F9618; } @@ -4356,7 +4426,6 @@ L_088F964C: L_088F9654: aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088F9684; } @@ -4396,7 +4465,6 @@ L_088F9690: goto L_088F96AC; L_088F96AC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F964C; } @@ -4426,7 +4494,6 @@ L_088F96C0: aot_gpr_5 = (aot_gpr_6 | aot_gpr_5); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088F964C; } @@ -4434,7 +4501,6 @@ L_088F96C0: } L_088F96FC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_088F964C; } @@ -4442,7 +4508,6 @@ L_088F96FC: } L_088F9704: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_088F964C; } @@ -4450,7 +4515,6 @@ L_088F9704: } L_088F970C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088F964C; } @@ -4458,7 +4522,6 @@ L_088F970C: } L_088F9714: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_088F964C; } @@ -4534,7 +4597,17 @@ L_088F9780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F97AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -4566,7 +4639,6 @@ L_088F97FC: goto L_088F9814; L_088F9814: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F99D8; } @@ -4575,7 +4647,6 @@ L_088F9814: L_088F981C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F99D8; } @@ -4584,7 +4655,6 @@ L_088F981C: L_088F9828: aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088F9940; } @@ -4623,7 +4693,6 @@ L_088F9864: L_088F9868: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_088F989C; } @@ -4632,7 +4701,6 @@ L_088F9868: L_088F9874: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F9894; } @@ -4704,7 +4772,6 @@ L_088F98F0: goto L_088F9C58; L_088F98F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F9914; } @@ -4718,7 +4785,6 @@ L_088F9900: AOT_REGCACHE_SYNC_OUT(); return; L_088F990C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F9938; } @@ -4726,7 +4792,6 @@ L_088F990C: } L_088F9914: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F9938; } @@ -4746,7 +4811,6 @@ L_088F991C: AOT_REGCACHE_SYNC_OUT(); return; L_088F9938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F99C4; } @@ -4761,7 +4825,6 @@ L_088F9940: goto L_088F8E3C; L_088F9954: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088F9964; } @@ -4784,7 +4847,6 @@ L_088F9964: L_088F9974: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F99BC; } @@ -4813,7 +4875,6 @@ L_088F99A4: AOT_REGCACHE_SYNC_OUT(); return; L_088F99B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F99C4; } @@ -4842,7 +4903,6 @@ L_088F99D0: } L_088F99D8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088F9A00; } @@ -4851,7 +4911,6 @@ L_088F99D8: L_088F99E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F9A00; } @@ -4886,7 +4945,17 @@ L_088F9A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9A34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4947,7 +5016,6 @@ L_088F9AB4: goto L_088F8E3C; L_088F9AD0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F9AF8; } @@ -5000,7 +5068,17 @@ L_088F9B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5026,7 +5104,6 @@ L_088F9B60: L_088F9B78: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F9B8C; } @@ -5049,7 +5126,17 @@ L_088F9B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9BA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5070,7 +5157,6 @@ L_088F9BA0: AOT_REGCACHE_SYNC_OUT(); return; L_088F9BDC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088F9C04; } @@ -5100,7 +5186,6 @@ L_088F9C04: L_088F9C20: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088F9C34; } @@ -5132,7 +5217,17 @@ L_088F9C38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9C58: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5159,7 +5254,6 @@ L_088F9C9C: L_088F9CA8: aot_gpr_5 = (ctx.gpr[20] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088F9D3C; } @@ -5207,7 +5301,6 @@ L_088F9CDC: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F9D34; } @@ -5248,7 +5341,17 @@ L_088F9D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088F9D60: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(184), ctx.gpr[17]); @@ -5297,7 +5400,6 @@ L_088F9DC4: goto L_088F8E3C; L_088F9DD4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088F9E04; } @@ -5305,7 +5407,6 @@ L_088F9DD4: } L_088F9DDC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088F9DFC; } @@ -5329,7 +5430,6 @@ L_088F9DFC: } L_088F9E04: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_088F9E2C; } @@ -5389,7 +5489,6 @@ L_088F9E64: goto L_088F9EA0; L_088F9EA0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088FA1A0; } @@ -5398,7 +5497,6 @@ L_088F9EA0: L_088F9EA8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA1A0; } @@ -5406,7 +5504,6 @@ L_088F9EA8: } L_088F9EB4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_088F9EF0; } @@ -5433,7 +5530,6 @@ L_088F9EE0: goto L_088F9EE8; L_088F9EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F9FA8; } @@ -5503,7 +5599,6 @@ L_088F9F60: } L_088F9F6C: aot_gpr_31 = (0x088F9F74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F9F74u) goto L_088F9F74; AOT_REGCACHE_SYNC_OUT(); return; L_088F9F74: @@ -5519,7 +5614,6 @@ L_088F9F74: } L_088F9F88: aot_gpr_31 = (0x088F9F90u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088F9F90u) goto L_088F9F90; AOT_REGCACHE_SYNC_OUT(); return; L_088F9F90: @@ -5529,7 +5623,6 @@ L_088F9F90: goto L_088F9FA0; L_088F9FA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088F9EA0; } @@ -5544,7 +5637,6 @@ L_088F9FA8: goto L_088F8E3C; L_088F9FBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FA074; } @@ -5607,7 +5699,6 @@ L_088FA030: } L_088FA03C: aot_gpr_31 = (0x088FA044u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FA044u) goto L_088FA044; AOT_REGCACHE_SYNC_OUT(); return; L_088FA044: @@ -5623,7 +5714,6 @@ L_088FA044: } L_088FA058: aot_gpr_31 = (0x088FA060u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FA060u) goto L_088FA060; AOT_REGCACHE_SYNC_OUT(); return; L_088FA060: @@ -5645,7 +5735,6 @@ L_088FA074: goto L_088F8E3C; L_088FA088: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FA140; } @@ -5708,7 +5797,6 @@ L_088FA0FC: } L_088FA108: aot_gpr_31 = (0x088FA110u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FA110u) goto L_088FA110; AOT_REGCACHE_SYNC_OUT(); return; L_088FA110: @@ -5724,7 +5812,6 @@ L_088FA110: } L_088FA124: aot_gpr_31 = (0x088FA12Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FA12Cu) goto L_088FA12C; AOT_REGCACHE_SYNC_OUT(); return; L_088FA12C: @@ -5739,7 +5826,6 @@ L_088FA12C: } L_088FA140: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088F9FA0; } @@ -5748,7 +5834,6 @@ L_088FA140: L_088FA148: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088F9FA0; } @@ -5777,7 +5862,6 @@ L_088FA15C: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088F9FA0; } @@ -5813,7 +5897,17 @@ L_088FA1A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FA1D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5858,7 +5952,6 @@ L_088FA234: goto L_088FA244; L_088FA244: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FA260; } @@ -5875,7 +5968,6 @@ L_088FA24C: } L_088FA258: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088FA288; } @@ -5883,7 +5975,6 @@ L_088FA258: } L_088FA260: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088FA280; } @@ -5919,7 +6010,6 @@ L_088FA2A0: goto L_088FA2A4; L_088FA2A4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FA328; } @@ -5928,7 +6018,6 @@ L_088FA2A4: L_088FA2AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA328; } @@ -5936,7 +6025,6 @@ L_088FA2AC: } L_088FA2B8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_088FA328; } @@ -5997,7 +6085,6 @@ L_088FA31C: } L_088FA328: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_088FA350; } @@ -6005,7 +6092,6 @@ L_088FA328: } L_088FA330: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_088FA350; } @@ -6022,7 +6108,6 @@ L_088FA338: L_088FA350: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_088FA364; } @@ -6056,7 +6141,17 @@ L_088FA368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FA390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6091,7 +6186,6 @@ L_088FA3C4: goto L_088FA3D0; L_088FA3D0: aot_gpr_31 = (0x088FA3D8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FA3D8u) goto L_088FA3D8; AOT_REGCACHE_SYNC_OUT(); return; L_088FA3D8: @@ -6110,7 +6204,6 @@ L_088FA3E8: L_088FA3F0: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA404; } @@ -6133,7 +6226,17 @@ L_088FA404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FA418: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(52))); @@ -6170,7 +6273,6 @@ L_088FA458: } L_088FA460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FA4EC; } @@ -6178,7 +6280,6 @@ L_088FA460: } L_088FA468: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FA488; } @@ -6220,7 +6321,6 @@ L_088FA4B0: } L_088FA4C0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FA4EC; } @@ -6254,7 +6354,17 @@ L_088FA4EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FA50C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), 0u); @@ -6280,7 +6390,6 @@ L_088FA558: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1)))))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FA884; } @@ -6289,7 +6398,6 @@ L_088FA558: L_088FA568: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA884; } @@ -6309,7 +6417,6 @@ L_088FA574: L_088FA588: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FA5BC; } @@ -6349,7 +6456,6 @@ L_088FA5BC: L_088FA5C8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA5E0; } @@ -6358,7 +6464,6 @@ L_088FA5C8: L_088FA5D4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088FA608; } @@ -6395,7 +6500,6 @@ L_088FA608: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (0u | 120u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088FA704; } @@ -6405,7 +6509,6 @@ L_088FA620: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 48 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088FA658; } @@ -6415,7 +6518,6 @@ L_088FA630: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 58 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FA658; } @@ -6437,7 +6539,6 @@ L_088FA658: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 97 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088FA690; } @@ -6447,7 +6548,6 @@ L_088FA668: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 103 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FA690; } @@ -6469,7 +6569,6 @@ L_088FA690: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 65 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088FA6C8; } @@ -6479,7 +6578,6 @@ L_088FA6A0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 71 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FA6C8; } @@ -6535,7 +6633,6 @@ L_088FA6F0: } L_088FA704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FA828; } @@ -6544,7 +6641,6 @@ L_088FA704: L_088FA70C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FA740; } @@ -6584,7 +6680,6 @@ L_088FA740: L_088FA74C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA764; } @@ -6593,7 +6688,6 @@ L_088FA74C: L_088FA758: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088FA78C; } @@ -6630,7 +6724,6 @@ L_088FA78C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (0u | 35u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_088FA828; } @@ -6640,7 +6733,6 @@ L_088FA7A4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 48 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_088FA800; } @@ -6650,7 +6742,6 @@ L_088FA7B4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 58 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FA800; } @@ -6669,7 +6760,6 @@ L_088FA7C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (0u | 35u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_088FA7A4; } @@ -6677,7 +6767,6 @@ L_088FA7C4: } L_088FA7F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FA828; } @@ -6711,7 +6800,6 @@ L_088FA818: L_088FA828: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_088FA84C; } @@ -6725,7 +6813,6 @@ L_088FA834: goto L_088F9098; L_088FA844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FA858; } @@ -6765,7 +6852,6 @@ L_088FA884: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FA96C; } @@ -6786,7 +6872,6 @@ L_088FA894: AOT_REGCACHE_SYNC_OUT(); return; L_088FA8BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088FA95C; } @@ -6862,7 +6947,6 @@ L_088FA95C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FA894; } @@ -6906,7 +6990,17 @@ L_088FA998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FA9C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -6939,7 +7033,6 @@ L_088FAA08: L_088FAA10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FAA44; } @@ -6947,7 +7040,6 @@ L_088FAA10: } L_088FAA1C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAA3C; } @@ -6971,7 +7063,6 @@ L_088FAA3C: } L_088FAA44: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088FAA6C; } @@ -6993,7 +7084,6 @@ L_088FAA6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088FAAA4; } @@ -7001,7 +7091,6 @@ L_088FAA6C: } L_088FAA7C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAA9C; } @@ -7038,7 +7127,6 @@ L_088FAAB0: L_088FAAC4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FAADC; } @@ -7047,7 +7135,6 @@ L_088FAAC4: L_088FAAD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FAB04; } @@ -7055,7 +7142,6 @@ L_088FAAD0: } L_088FAADC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAAFC; } @@ -7114,7 +7200,6 @@ L_088FAB30: AOT_REGCACHE_SYNC_OUT(); return; L_088FAB3C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FAF74; } @@ -7123,7 +7208,6 @@ L_088FAB3C: L_088FAB44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FAF74; } @@ -7138,7 +7222,6 @@ L_088FAB50: L_088FAB60: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FAB78; } @@ -7147,7 +7230,6 @@ L_088FAB60: L_088FAB6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FABC0; } @@ -7155,7 +7237,6 @@ L_088FAB6C: } L_088FAB78: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAB98; } @@ -7198,7 +7279,6 @@ L_088FABC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FAC54; } @@ -7209,7 +7289,6 @@ L_088FABD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); aot_gpr_5 = (0u | 62u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088FAC2C; } @@ -7217,7 +7296,6 @@ L_088FABD0: } L_088FABE4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAC04; } @@ -7284,7 +7362,6 @@ L_088FAC54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); aot_gpr_5 = (0u | 62u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FAD6C; } @@ -7300,7 +7377,6 @@ L_088FAC64: L_088FAC78: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FAC90; } @@ -7309,7 +7385,6 @@ L_088FAC78: L_088FAC84: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FACB8; } @@ -7366,7 +7441,6 @@ L_088FACCC: goto L_088F8E3C; L_088FACE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FAD24; } @@ -7408,7 +7482,6 @@ L_088FAD14: } L_088FAD24: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAD44; } @@ -7491,7 +7564,6 @@ L_088FADD0: goto L_088FADD8; L_088FADD8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FADF8; } @@ -7548,7 +7620,6 @@ L_088FAE20: L_088FAE48: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FAE60; } @@ -7557,7 +7628,6 @@ L_088FAE48: L_088FAE54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FAECC; } @@ -7565,7 +7635,6 @@ L_088FAE54: } L_088FAE60: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FAE80; } @@ -7581,7 +7650,6 @@ L_088FAE68: goto L_088FA418; L_088FAE80: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088FAEA4; } @@ -7646,13 +7714,11 @@ L_088FAEE0: goto L_088FAEE4; L_088FAEE4: aot_gpr_31 = (0x088FAEECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0096_entry, 96u, 216u, 0x08984BA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FAEECu) goto L_088FAEEC; AOT_REGCACHE_SYNC_OUT(); return; L_088FAEEC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FAF60; } @@ -7682,7 +7748,6 @@ L_088FAF0C: AOT_REGCACHE_SYNC_OUT(); return; L_088FAF14: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_088FAF38; } @@ -7733,7 +7798,6 @@ L_088FAF60: AOT_REGCACHE_SYNC_OUT(); return; L_088FAF6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FAB3C; } @@ -7776,7 +7840,17 @@ L_088FAF98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FAFC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[19]); @@ -7809,7 +7883,6 @@ L_088FB014: L_088FB020: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FB058; } @@ -7902,7 +7975,6 @@ L_088FB0C8: } L_088FB0D4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FB108; } @@ -7919,7 +7991,6 @@ L_088FB0DC: } L_088FB0E8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FB108; } @@ -7936,7 +8007,6 @@ L_088FB0F0: } L_088FB0FC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FB108; } @@ -7989,7 +8059,6 @@ L_088FB150: } L_088FB158: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088FB1CC; } @@ -7998,7 +8067,6 @@ L_088FB158: L_088FB160: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FB1CC; } @@ -8013,7 +8081,6 @@ L_088FB16C: L_088FB17C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088FB1CC; } @@ -8042,7 +8109,6 @@ L_088FB1AC: AOT_REGCACHE_SYNC_OUT(); return; L_088FB1BC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FB1D4; } @@ -8050,7 +8116,6 @@ L_088FB1BC: } L_088FB1C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FB294; } @@ -8075,7 +8140,6 @@ L_088FB1D4: L_088FB1DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088FB1EC; } @@ -8086,7 +8150,6 @@ L_088FB1E8: goto L_088FB1EC; L_088FB1EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FB294; } @@ -8103,7 +8166,6 @@ L_088FB1F4: L_088FB1FC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_088FB20C; } @@ -8144,7 +8206,6 @@ L_088FB228: L_088FB234: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FB248; } @@ -8167,7 +8228,6 @@ L_088FB248: goto L_088F8E3C; L_088FB25C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FB26C; } @@ -8190,7 +8250,6 @@ L_088FB26C: goto L_088F8E3C; L_088FB280: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FB290; } @@ -8239,7 +8298,17 @@ L_088FB2A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB2D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8267,7 +8336,6 @@ L_088FB31C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FB344; } @@ -8293,7 +8361,6 @@ L_088FB33C: } L_088FB344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FB560; } @@ -8329,7 +8396,6 @@ L_088FB384: ctx.gpr[8] = (ctx.gpr[8] + static_cast(17)); ctx.gpr[9] = (ctx.gpr[8] < static_cast(31) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088FB4B8; } @@ -8341,14 +8407,22 @@ L_088FB398: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[8]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-14512))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB3B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FB560; } @@ -8408,7 +8482,6 @@ L_088FB408: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); ctx.gpr[9] = (ctx.lo); ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[9])) * static_cast(static_cast(ctx.gpr[8])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[20] = (ctx.lo); { const bool branch_taken = 0u == 0u; @@ -8420,7 +8493,6 @@ L_088FB408: } L_088FB430: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088FB4A4; } @@ -8429,7 +8501,6 @@ L_088FB430: L_088FB438: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(1)))))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088FB4B0; } @@ -8438,7 +8509,6 @@ L_088FB438: L_088FB444: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(2)))))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_088FB4B0; } @@ -8454,7 +8524,6 @@ L_088FB450: } L_088FB458: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_088FB468; } @@ -8470,7 +8539,6 @@ L_088FB460: } L_088FB468: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_088FB480; } @@ -8478,7 +8546,6 @@ L_088FB468: } L_088FB470: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_088FB480; } @@ -8494,7 +8561,6 @@ L_088FB478: } L_088FB480: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_088FB498; } @@ -8502,7 +8568,6 @@ L_088FB480: } L_088FB488: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_088FB498; } @@ -8532,7 +8597,6 @@ L_088FB4A4: goto L_088FB4B0; L_088FB4B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FB4F0; } @@ -8552,7 +8616,6 @@ L_088FB4C0: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[3]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FB4DC; } @@ -8576,7 +8639,6 @@ L_088FB4E8: goto L_088FB4F0; L_088FB4F0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FB384; } @@ -8651,7 +8713,17 @@ L_088FB560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB584: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8705,16 +8777,24 @@ L_088FB584: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB5AC: aot_gpr_5 = (256u << 16u); aot_gpr_5 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088FB620; } @@ -8725,7 +8805,6 @@ L_088FB5BC: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088FB5E4; } @@ -8775,7 +8854,6 @@ L_088FB608: goto L_088FB618; L_088FB618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FB6F4; } @@ -8785,7 +8863,6 @@ L_088FB620: aot_gpr_5 = (128u << 16u); aot_gpr_5 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_088FB69C; } @@ -8796,7 +8873,6 @@ L_088FB630: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088FB658; } @@ -8848,7 +8924,6 @@ L_088FB67C: goto L_088FB694; L_088FB694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FB6F4; } @@ -8857,7 +8932,6 @@ L_088FB694: L_088FB69C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_088FB6BC; } @@ -8908,11 +8982,20 @@ L_088FB6E0: goto L_088FB6F4; L_088FB6F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB6FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -8956,7 +9039,6 @@ L_088FB770: goto L_088FB778; L_088FB778: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_088FB794; } @@ -9003,7 +9085,6 @@ L_088FB7BC: goto L_088FB7C4; L_088FB7C4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FB828; } @@ -9012,7 +9093,6 @@ L_088FB7C4: L_088FB7CC: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_088FB828; } @@ -9056,9 +9136,7 @@ L_088FB7D8: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088FB828; } @@ -9118,7 +9196,17 @@ L_088FB85C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB878: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9142,7 +9230,6 @@ L_088FB8A8: L_088FB8B4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_088FB994; } @@ -9173,7 +9260,6 @@ L_088FB8DC: L_088FB8EC: ctx.gpr[18] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(32)))))); { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_088FB994; } @@ -9188,7 +9274,6 @@ L_088FB8F8: goto L_088FB904; L_088FB904: aot_gpr_31 = (0x088FB90Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 324u, 0x08B6A238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FB90Cu) goto L_088FB90C; AOT_REGCACHE_SYNC_OUT(); return; L_088FB90C: @@ -9221,7 +9306,6 @@ L_088FB938: aot_gpr_6 = (ctx.gpr[8] + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_088FB960; } @@ -9283,7 +9367,17 @@ L_088FB9B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FB9C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -9345,7 +9439,6 @@ L_088FBA5C: L_088FBA6C: ctx.gpr[23] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(32)))))); { const bool branch_taken = static_cast(ctx.gpr[23]) < 0; - // nop if (branch_taken) { goto L_088FBB38; } @@ -9360,7 +9453,6 @@ L_088FBA78: goto L_088FBA84; L_088FBA84: aot_gpr_31 = (0x088FBA8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 324u, 0x08B6A238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FBA8Cu) goto L_088FBA8C; AOT_REGCACHE_SYNC_OUT(); return; L_088FBA8C: @@ -9378,7 +9470,6 @@ L_088FBA90: L_088FBAA8: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_088FBB38; } @@ -9422,7 +9513,6 @@ L_088FBAD4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -9432,9 +9522,7 @@ L_088FBAD4: } L_088FBAF4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088FBB14; } @@ -9442,7 +9530,6 @@ L_088FBAF4: } L_088FBB04: aot_gpr_31 = (0x088FBB0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FBB0Cu) goto L_088FBB0C; AOT_REGCACHE_SYNC_OUT(); return; L_088FBB0C: @@ -9500,7 +9587,17 @@ L_088FBB68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FBB9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -9556,7 +9653,6 @@ L_088FBC14: L_088FBC1C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FBDA4; } @@ -9587,7 +9683,6 @@ L_088FBC44: L_088FBC54: ctx.gpr[17] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(32)))))); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_088FBDA4; } @@ -9602,7 +9697,6 @@ L_088FBC60: goto L_088FBC6C; L_088FBC6C: aot_gpr_31 = (0x088FBC74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 324u, 0x08B6A238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FBC74u) goto L_088FBC74; AOT_REGCACHE_SYNC_OUT(); return; L_088FBC74: @@ -9658,7 +9752,6 @@ L_088FBCC4: } L_088FBCE8: { const bool branch_taken = static_cast(ctx.gpr[19]) >= 0; - // nop if (branch_taken) { goto L_088FBD70; } @@ -9682,7 +9775,6 @@ L_088FBCF4: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[7] = (ctx.gpr[7] & 1u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088FBD38; } @@ -9705,7 +9797,6 @@ L_088FBD38: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); ctx.gpr[8] = (ctx.gpr[8] & 1u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_088FBD64; } @@ -9721,7 +9812,6 @@ L_088FBD5C: } L_088FBD64: { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_088FBD70; } @@ -9785,7 +9875,17 @@ L_088FBDC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FBDE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[20]); @@ -9890,7 +9990,6 @@ L_088FBECC: } L_088FBED8: aot_gpr_31 = (0x088FBEE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 324u, 0x08B6A238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FBEE0u) goto L_088FBEE0; AOT_REGCACHE_SYNC_OUT(); return; L_088FBEE0: @@ -9906,7 +10005,6 @@ L_088FBEE0: L_088FBEFC: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FBF8C; } @@ -9950,7 +10048,6 @@ L_088FBF28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -9960,9 +10057,7 @@ L_088FBF28: } L_088FBF48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_088FBF68; } @@ -9970,7 +10065,6 @@ L_088FBF48: } L_088FBF58: aot_gpr_31 = (0x088FBF60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FBF60u) goto L_088FBF60; AOT_REGCACHE_SYNC_OUT(); return; L_088FBF60: @@ -10030,7 +10124,17 @@ L_088FBFBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FBFF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0062.cpp b/profiles/vcs/generated/generated_unit_0062.cpp index 5e8c103..2170c88 100644 --- a/profiles/vcs/generated/generated_unit_0062.cpp +++ b/profiles/vcs/generated/generated_unit_0062.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0062[4079] = { - 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 8, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 12, 0, 0, 13, 0, 0, - 0, 0, 14, 0, 15, 0, 0, 0, 16, 0, 17, 0, 18, 0, 0, 19, 0, 20, 0, 0, 0, 21, 0, 22, 0, 23, 0, 24, 0, 0, 25, 0, - 0, 26, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 40, 0, 0, 0, 41, - 0, 42, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 0, 0, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 49, 0, 0, 50, 0, 0, 0, 51, - 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, - 57, 0, 0, 0, 0, 58, 0, 0, 59, 0, 0, 60, 0, 0, 61, 0, 62, 0, 0, 0, 0, 63, 0, 64, 0, 65, 66, 0, 0, 0, 0, 0, - 67, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 71, 0, 72, 0, 0, 73, 0, 0, 74, 0, 0, 0, - 0, 75, 0, 0, 76, 77, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 82, 0, - 83, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 87, 88, 0, 89, 0, 90, 0, 0, 91, 0, 0, 0, 92, 93, 0, 0, 0, 0, 0, 94, 0, - 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, - 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 106, 0, 107, 0, 108, 0, 0, 0, 109, 0, 110, 0, 0, 111, - 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 115, 0, 0, 116, 0, 117, 118, 0, 0, 119, 0, 120, 121, 0, 122, - 123, 0, 0, 0, 0, 0, 0, 124, 0, 0, 125, 0, 0, 126, 0, 0, 127, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, 131, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 134, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, - 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, - 0, 0, 146, 0, 0, 147, 0, 0, 148, 0, 0, 149, 0, 0, 0, 150, 0, 151, 0, 0, 152, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, 156, - 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 0, 0, 161, 0, 162, - 0, 163, 0, 164, 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 173, 0, 0, 174, 0, 175, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 179, 180, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, 0, 0, 0, 185, 0, 186, 0, - 187, 0, 188, 0, 0, 0, 189, 190, 0, 0, 0, 191, 0, 192, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, - 197, 0, 0, 0, 198, 0, 0, 0, 0, 199, 0, 0, 200, 0, 201, 0, 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, - 207, 0, 208, 0, 209, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 0, 0, 213, 0, 214, 0, 0, 215, 0, 216, 0, 217, 0, 0, 218, 219, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 224, - 0, 0, 0, 0, 225, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 231, 0, - 0, 0, 0, 0, 232, 233, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, - 0, 246, 0, 0, 0, 0, 0, 247, 248, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, 251, 0, 0, 0, 0, 0, 0, 0, 0, - 252, 0, 253, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 255, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 259, - 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 0, 267, 0, 0, 268, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 0, 275, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 281, 0, 0, 282, - 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, - 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, - 0, 290, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 0, - 0, 296, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 299, 0, 300, 0, 301, 0, 302, 0, 0, 303, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 308, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 315, 0, 0, 316, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, - 319, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 325, 0, 0, 0, 326, 0, 0, 327, - 0, 0, 0, 328, 0, 329, 0, 0, 330, 0, 331, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 338, 0, 0, 0, 339, 0, - 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, - 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 354, 0, 0, - 0, 0, 355, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, - 363, 0, 0, 364, 0, 0, 365, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 373, - 0, 0, 0, 374, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 381, 0, - 0, 382, 0, 0, 0, 383, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 0, 0, 390, - 0, 0, 391, 0, 0, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, - 399, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 0, 0, 407, 0, 0, - 0, 408, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 416, 0, - 0, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 422, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 425, - 0, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 429, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 0, - 0, 434, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 442, 0, - 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 450, - 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, 0, 458, 0, 0, - 0, 459, 0, 0, 460, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 0, 466, 0, 0, 0, - 467, 0, 0, 0, 468, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 475, 0, - 0, 0, 476, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 483, - 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, - 0, 492, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 500, 0, - 0, 0, 501, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 505, 0, 0, 0, 506, 0, 0, 507, 0, 0, 508, 0, 0, 0, 509, 0, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 515, 0, 0, 0, 516, 0, 0, 517, 0, 0, 0, 518, - 0, 0, 0, 0, 519, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 522, 0, 0, 523, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 526, 0, - 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, - 535, 0, 0, 0, 536, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 543, 0, - 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, - 552, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 559, 0, 0, 0, 560, 0, 0, - 0, 0, 561, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, - 569, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, 575, 0, 0, 0, 576, 0, 0, 577, 0, 0, - 0, 578, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 584, 0, 0, 585, 0, 0, 586, 0, - 0, 0, 587, 0, 0, 588, 0, 0, 589, 0, 590, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 593, 0, 0, 0, 594, 0, 0, 0, 0, - 0, 595, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, 0, 601, 0, 0, 602, 0, - 0, 0, 603, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 609, 0, 0, 0, - 0, 0, 610, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, 617, - 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 624, 0, 0, 0, - 0, 625, 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 631, 0, 0, 632, 0, 0, 0, 633, - 0, 0, 0, 634, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 641, 0, 0, - 0, 642, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, - 650, 0, 0, 0, 651, 0, 0, 0, 0, 652, 0, 0, 653, 0, 0, 654, 0, 0, 655, 0, 0, 656, 0, 657, 0, 0, 0, 658, 0, 0, 0, 659, - 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, - 668, 0, 0, 669, 0, 0, 0, 670, 0, 0, 0, 671, 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 0, 0, 676, 0, 0, - 0, 677, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 680, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 684, 0, 0, 0, 685, 0, - 0, 0, 686, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 690, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 694, - 0, 0, 0, 695, 0, 0, 696, 0, 0, 697, 0, 0, 698, 0, 0, 699, 0, 700, 0, 0, 0, 701, 0, 0, 0, 702, 0, 0, 703, 0, 0, 0, - 704, 0, 0, 705, 0, 0, 706, 0, 0, 707, 0, 0, 708, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 717, 0, 0, 718, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, - 0, 0, 721, 0, 722, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 725, - 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 0, 732, 0, 0, - 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 734, 735, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 740, 0, 741, 0, 0, 0, 742, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 744, 0, 745, 0, 0, 0, 746, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 749, - 0, 0, 0, 750, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 753, 0, 0, 0, - 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 760, 0, 0, 0, 761, 0, 0, 0, 0, 762, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, 769, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 774, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 777, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, - 0, 782, 0, 783, 0, 784, 0, 0, 0, 785, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, - 0, 789, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, - 794, 0, 0, 0, 0, 795, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 0, 799, 0, 0, 0, 0, 0, 0, - 0, 0, 800, 0, 0, 0, 0, 801, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 805, 0, 0, - 806, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 811, 0, - 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 817, - 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 820, 0, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, - 0, 0, 823, 0, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, 0, - 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, - 0, 832, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 835, 0, 0, 0, 0, 0, 0, 836, 0, 0, - 0, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, - 841, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 843, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0062[64] = { + 0x2508000848810921ull, 0x802851224AA29514ull, 0x892288A28A222208ull, 0x06A1492114201001ull, + 0x520804321250A101ull, 0x2404482441895951ull, 0xB4D3401094544809ull, 0x108A128088912481ull, + 0xA492892410249084ull, 0x0020492AA1200208ull, 0x0000114800000450ull, 0x222228C550A518A0ull, + 0x654A145521455211ull, 0x480A019090880400ull, 0x40500C50121040B0ull, 0x8058240500C04182ull, + 0x0244809004000420ull, 0x90205101224040A2ull, 0x8000080000000010ull, 0x0000001241020100ull, + 0x0000000000000000ull, 0x04AA02060A120000ull, 0x0040208480010410ull, 0x9128024512250024ull, + 0x4450008000408D28ull, 0x2242242242242240ull, 0xA492214924224224ull, 0x8891122244488908ull, + 0x2244488911222444ull, 0x8911222444889112ull, 0x4889112224448890ull, 0x2242244484484484ull, + 0x4889089112112112ull, 0x1122244484484484ull, 0x4491222444889112ull, 0x4889089089112224ull, + 0x4448891122244488ull, 0x2244488911211222ull, 0x2444889112224224ull, 0x0890452449122242ull, + 0x1120890448224112ull, 0x1122241090448224ull, 0x2422444889089112ull, 0x88A4921121122242ull, + 0x2244488911222444ull, 0x8911222444889112ull, 0x0400924912229248ull, 0x0001400100000000ull, + 0x8000812001000880ull, 0x2480144288000034ull, 0x0801040C00000002ull, 0x0000211400020000ull, + 0x12000108A0000445ull, 0x8018000000020004ull, 0x0111400008450000ull, 0x0001048000422800ull, + 0x0000000000000005ull, 0x4000001004102800ull, 0x009020120220122Aull, 0x2044048402410121ull, + 0x8404840241012101ull, 0x4081020408102404ull, 0x2040810204081020ull, 0x0000408102040810ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0062[64] = { + 1u, 14u, 34u, 52u, 67u, 83u, 102u, 123u, 139u, 157u, 170u, 177u, 197u, 220u, 232u, 246u, + 260u, 269u, 283u, 286u, 292u, 292u, 304u, 312u, 328u, 340u, 355u, 374u, 391u, 408u, 426u, 443u, + 459u, 476u, 492u, 510u, 527u, 544u, 561u, 578u, 595u, 610u, 625u, 642u, 660u, 677u, 695u, 711u, + 714u, 721u, 733u, 739u, 744u, 754u, 759u, 767u, 774u, 776u, 782u, 794u, 806u, 818u, 828u, 837u, }; void recomp_unit_0062_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0062_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x088FC000u; - entry_id = (entry_delta < 16316u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0062[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16316u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0062[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0062[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_088FC000; @@ -1046,7 +953,17 @@ L_088FC02C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC040: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1082,7 +999,17 @@ L_088FC078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC08C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), aot_gpr_16); @@ -1105,7 +1032,6 @@ L_088FC0CC: AOT_REGCACHE_SYNC_OUT(); return; L_088FC0E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC16C; } @@ -1127,7 +1053,6 @@ L_088FC0F4: AOT_REGCACHE_SYNC_OUT(); return; L_088FC108: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC15C; } @@ -1142,7 +1067,6 @@ L_088FC110: AOT_REGCACHE_SYNC_OUT(); return; L_088FC120: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC144; } @@ -1164,7 +1088,6 @@ L_088FC130: } L_088FC13C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC2FC; } @@ -1179,7 +1102,6 @@ L_088FC144: AOT_REGCACHE_SYNC_OUT(); return; L_088FC154: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC300; } @@ -1207,7 +1129,6 @@ L_088FC16C: L_088FC178: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088FC1B8; } @@ -1235,7 +1156,6 @@ L_088FC1A0: AOT_REGCACHE_SYNC_OUT(); return; L_088FC1B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC110; } @@ -1251,7 +1171,6 @@ L_088FC1B8: AOT_REGCACHE_SYNC_OUT(); return; L_088FC1CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC300; } @@ -1273,7 +1192,6 @@ L_088FC1FC: aot_gpr_4 = (aot_gpr_4 + static_cast(-83)); aot_gpr_5 = (aot_gpr_4 < static_cast(35) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FC2EC; } @@ -1285,11 +1203,20 @@ L_088FC20C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-14168))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC224: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); @@ -1319,7 +1246,6 @@ L_088FC254: AOT_REGCACHE_SYNC_OUT(); return; L_088FC264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC2EC; } @@ -1333,7 +1259,6 @@ L_088FC26C: goto L_088FC040; L_088FC27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC2EC; } @@ -1347,7 +1272,6 @@ L_088FC284: goto L_088FC040; L_088FC294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC2EC; } @@ -1369,7 +1293,6 @@ L_088FC2AC: AOT_REGCACHE_SYNC_OUT(); return; L_088FC2BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC2EC; } @@ -1398,7 +1321,6 @@ L_088FC2EC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FC1FC; } @@ -1426,7 +1348,17 @@ L_088FC300: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC330: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -1449,7 +1381,6 @@ L_088FC354: AOT_REGCACHE_SYNC_OUT(); return; L_088FC368: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC3C0; } @@ -1473,7 +1404,6 @@ L_088FC380: L_088FC394: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FC3DC; } @@ -1509,7 +1439,6 @@ L_088FC3C0: AOT_REGCACHE_SYNC_OUT(); return; L_088FC3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC3E8; } @@ -1536,7 +1465,17 @@ L_088FC3E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC400: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -1558,7 +1497,6 @@ L_088FC420: AOT_REGCACHE_SYNC_OUT(); return; L_088FC434: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088FC458; } @@ -1574,7 +1512,6 @@ L_088FC43C: AOT_REGCACHE_SYNC_OUT(); return; L_088FC450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC494; } @@ -1621,7 +1558,17 @@ L_088FC494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC4A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1651,7 +1598,6 @@ L_088FC4E4: AOT_REGCACHE_SYNC_OUT(); return; L_088FC4F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088FC518; } @@ -1699,7 +1645,6 @@ L_088FC52C: goto L_088FC530; L_088FC530: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_088FC540; } @@ -1742,7 +1687,17 @@ L_088FC560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1756,7 +1711,17 @@ L_088FC588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC594: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1779,7 +1744,17 @@ L_088FC5B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC5C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1806,7 +1781,6 @@ L_088FC5F4: L_088FC600: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_088FC670; } @@ -1826,7 +1800,6 @@ L_088FC60C: L_088FC62C: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_088FC650; } @@ -1841,7 +1814,6 @@ L_088FC638: AOT_REGCACHE_SYNC_OUT(); return; L_088FC648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC658; } @@ -1861,7 +1833,6 @@ L_088FC658: AOT_REGCACHE_SYNC_OUT(); return; L_088FC668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC67C; } @@ -1885,7 +1856,17 @@ L_088FC67C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC690: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -1900,7 +1881,6 @@ L_088FC690: AOT_REGCACHE_SYNC_OUT(); return; L_088FC6B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC6C4; } @@ -1917,7 +1897,6 @@ L_088FC6C4: AOT_REGCACHE_SYNC_OUT(); return; L_088FC6D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC6DC; } @@ -1934,7 +1913,6 @@ L_088FC6DC: AOT_REGCACHE_SYNC_OUT(); return; L_088FC6E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FC6F4; } @@ -1945,7 +1923,6 @@ L_088FC6F0: goto L_088FC6F4; L_088FC6F4: { const bool branch_taken = static_cast(aot_gpr_16) <= 0; - // nop if (branch_taken) { goto L_088FC700; } @@ -1968,7 +1945,17 @@ L_088FC700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC71C: ctx.gpr[7] = (aot_gpr_4 & 1u); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -1986,7 +1973,6 @@ L_088FC728: L_088FC734: ctx.gpr[7] = (aot_gpr_4 & 2u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_088FC750; } @@ -2001,7 +1987,6 @@ L_088FC740: L_088FC750: aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FC76C; } @@ -2021,7 +2006,17 @@ L_088FC76C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC77C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2034,7 +2029,6 @@ L_088FC77C: AOT_REGCACHE_SYNC_OUT(); return; L_088FC79C: { const bool branch_taken = static_cast(ctx.gpr[2]) > 0; - // nop if (branch_taken) { goto L_088FC7CC; } @@ -2056,7 +2050,6 @@ L_088FC7B0: AOT_REGCACHE_SYNC_OUT(); return; L_088FC7C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC830; } @@ -2133,7 +2126,17 @@ L_088FC854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC870: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2160,7 +2163,6 @@ L_088FC894: L_088FC8A0: aot_gpr_5 = (aot_gpr_5 + static_cast(-14904)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_088FC8C4; } @@ -2175,7 +2177,6 @@ L_088FC8AC: AOT_REGCACHE_SYNC_OUT(); return; L_088FC8BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FC8DC; } @@ -2229,7 +2230,17 @@ L_088FC90C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC924: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(252), aot_gpr_16); @@ -2273,7 +2284,6 @@ L_088FC97C: AOT_REGCACHE_SYNC_OUT(); return; L_088FC984: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088FC994; } @@ -2322,7 +2332,17 @@ L_088FC9B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FC9D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[17]); @@ -2391,7 +2411,6 @@ L_088FCA8C: AOT_REGCACHE_SYNC_OUT(); return; L_088FCA98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FCB14; } @@ -2462,7 +2481,6 @@ L_088FCB30: AOT_REGCACHE_SYNC_OUT(); return; L_088FCB40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FCCE0; } @@ -2471,7 +2489,6 @@ L_088FCB40: L_088FCB48: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 13 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FCBC4; } @@ -2479,7 +2496,6 @@ L_088FCB48: } L_088FCB54: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088FCBC4; } @@ -2495,7 +2511,6 @@ L_088FCB5C: AOT_REGCACHE_SYNC_OUT(); return; L_088FCB70: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_088FCB88; } @@ -2532,7 +2547,6 @@ L_088FCB9C: AOT_REGCACHE_SYNC_OUT(); return; L_088FCBAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_088FCB80; } @@ -2599,7 +2613,6 @@ L_088FCC10: L_088FCC24: aot_gpr_4 = (static_cast(aot_gpr_4) < 102 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FCC60; } @@ -2607,7 +2620,6 @@ L_088FCC24: } L_088FCC30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FCC48; } @@ -2623,7 +2635,6 @@ L_088FCC38: } L_088FCC40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FCC60; } @@ -2638,7 +2649,6 @@ L_088FCC48: AOT_REGCACHE_SYNC_OUT(); return; L_088FCC58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FCCC4; } @@ -2649,7 +2659,6 @@ L_088FCC60: aot_gpr_5 = (0u | 109u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_088FCC88; } @@ -2663,7 +2672,6 @@ L_088FCC74: AOT_REGCACHE_SYNC_OUT(); return; L_088FCC80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FCCC4; } @@ -2671,7 +2679,6 @@ L_088FCC80: } L_088FCC88: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_088FCC98; } @@ -2679,7 +2686,6 @@ L_088FCC88: } L_088FCC90: { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_088FCCB0; } @@ -2694,7 +2700,6 @@ L_088FCC98: AOT_REGCACHE_SYNC_OUT(); return; L_088FCCA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FCCC4; } @@ -2760,7 +2765,17 @@ L_088FCCF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCD28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2803,7 +2818,17 @@ L_088FCD7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCD90: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -2868,7 +2893,6 @@ L_088FCDF8: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FCE14; } @@ -2883,7 +2907,17 @@ L_088FCE14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCE1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2912,7 +2946,17 @@ L_088FCE50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCE64: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-29156), static_cast(0u)); jump_target = aot_gpr_31; @@ -2920,7 +2964,17 @@ L_088FCE64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCE70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); @@ -2937,14 +2991,12 @@ L_088FCE70: } L_088FCE90: aot_gpr_31 = (0x088FCE98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FCE98u) goto L_088FCE98; AOT_REGCACHE_SYNC_OUT(); return; L_088FCE98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FCEAC; } @@ -3005,7 +3057,6 @@ L_088FCF04: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FCF20; } @@ -3027,7 +3078,17 @@ L_088FCF20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCF38: aot_gpr_5 = (2237u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-28736)); @@ -3097,7 +3158,6 @@ L_088FCFB4: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_088FCFD0; } @@ -3112,7 +3172,17 @@ L_088FCFD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FCFD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3143,7 +3213,17 @@ L_088FD014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD028: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (std::bit_cast(aot_fpr_12)); @@ -3164,7 +3244,17 @@ L_088FD028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD068: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[7]); @@ -3187,7 +3277,17 @@ L_088FD090: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD09C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3256,7 +3356,17 @@ L_088FD11C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD138: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3325,7 +3435,17 @@ L_088FD1B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD1D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3351,7 +3471,17 @@ L_088FD1FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD210: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3425,14 +3555,23 @@ L_088FD2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD320: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(132), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x088FD344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FD344u) goto L_088FD344; AOT_REGCACHE_SYNC_OUT(); return; L_088FD344: @@ -3573,7 +3712,6 @@ L_088FD390: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(3), static_cast(aot_gpr_5)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FD56C; } @@ -3626,7 +3764,17 @@ L_088FD588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD5A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3643,12 +3791,10 @@ L_088FD5A4: } L_088FD5C4: aot_gpr_31 = (0x088FD5CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 125u, 0x08A1CC44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FD5CCu) goto L_088FD5CC; AOT_REGCACHE_SYNC_OUT(); return; L_088FD5CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_088FD5DC; } @@ -3656,7 +3802,6 @@ L_088FD5CC: } L_088FD5D4: aot_gpr_31 = (0x088FD5DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 110u, 0x08A1CA0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FD5DCu) goto L_088FD5DC; AOT_REGCACHE_SYNC_OUT(); return; L_088FD5DC: @@ -3666,14 +3811,23 @@ L_088FD5DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD5E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(24), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x088FD610u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FD610u) goto L_088FD610; AOT_REGCACHE_SYNC_OUT(); return; L_088FD610: @@ -3689,7 +3843,6 @@ L_088FD628: aot_fpr_12 = std::bit_cast(0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(18)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_12)) && ctx.fpr[0] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[19] = (ctx.gpr[18] | 0u); goto L_088FD640; @@ -3710,7 +3863,6 @@ L_088FD640: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(21), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FD69C; } @@ -3754,7 +3906,17 @@ L_088FD6B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD6D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3812,7 +3974,6 @@ L_088FD754: L_088FD764: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_088FD788; } @@ -3884,7 +4045,6 @@ L_088FD7E0: L_088FD7F0: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_088FD814; } @@ -3914,7 +4074,6 @@ L_088FD814: goto L_088FD820; L_088FD820: aot_gpr_31 = (0x088FD828u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FD828u) goto L_088FD828; AOT_REGCACHE_SYNC_OUT(); return; L_088FD828: @@ -3941,7 +4100,17 @@ L_088FD83C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD858: aot_gpr_4 = (0u | 21u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8748), static_cast(aot_gpr_4)); @@ -3963,14 +4132,23 @@ L_088FD858: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FD89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FD8D8; } @@ -3978,7 +4156,6 @@ L_088FD89C: } L_088FD8D0: aot_gpr_31 = (0x088FD8D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FD8D8u) goto L_088FD8D8; AOT_REGCACHE_SYNC_OUT(); return; L_088FD8D8: @@ -6516,7 +6693,17 @@ L_088FEEBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FEEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6571,7 +6758,6 @@ L_088FEEE8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(132), ctx.gpr[9]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_088FEF80; @@ -6682,7 +6868,6 @@ L_088FF01C: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FEFC0; } @@ -6708,7 +6893,17 @@ L_088FF02C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF060: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[2] = (ctx.gpr[11] | 0u); @@ -6732,7 +6927,17 @@ L_088FF094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF0A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6764,7 +6969,6 @@ L_088FF0BC: L_088FF0FC: ctx.gpr[8] = (static_cast(ctx.gpr[7]) < 749 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_088FF110; } @@ -6839,7 +7043,17 @@ L_088FF16C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF17C: { const bool branch_taken = aot_gpr_5 == 0u; ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -6867,11 +7081,20 @@ L_088FF198: goto L_088FF1A8; L_088FF1A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF1B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 << 7u); @@ -6883,7 +7106,6 @@ L_088FF1B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(128))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_088FF1F4; } @@ -6897,7 +7119,6 @@ L_088FF1DC: L_088FF1E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(128))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_088FF1DC; } @@ -6911,7 +7132,17 @@ L_088FF1F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF204: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(16), static_cast(0u)); @@ -6964,7 +7195,6 @@ L_088FF2A8: aot_fpr_12 = aot_fpr_22 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x088FF2C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FF2C0u) goto L_088FF2C0; AOT_REGCACHE_SYNC_OUT(); return; L_088FF2C0: @@ -7094,7 +7324,6 @@ L_088FF3B4: AOT_REGCACHE_SYNC_OUT(); return; L_088FF400: aot_gpr_31 = (0x088FF408u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FF408u) goto L_088FF408; AOT_REGCACHE_SYNC_OUT(); return; L_088FF408: @@ -7135,7 +7364,6 @@ L_088FF428: AOT_REGCACHE_SYNC_OUT(); return; L_088FF474: aot_gpr_31 = (0x088FF47Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FF47Cu) goto L_088FF47C; AOT_REGCACHE_SYNC_OUT(); return; L_088FF47C: @@ -7213,7 +7441,17 @@ L_088FF508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF544: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(20), static_cast(0u)); @@ -7341,7 +7579,6 @@ L_088FF66C: AOT_REGCACHE_SYNC_OUT(); return; L_088FF6B8: aot_gpr_31 = (0x088FF6C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FF6C0u) goto L_088FF6C0; AOT_REGCACHE_SYNC_OUT(); return; L_088FF6C0: @@ -7382,7 +7619,6 @@ L_088FF6E0: AOT_REGCACHE_SYNC_OUT(); return; L_088FF72C: aot_gpr_31 = (0x088FF734u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FF734u) goto L_088FF734; AOT_REGCACHE_SYNC_OUT(); return; L_088FF734: @@ -7461,14 +7697,33 @@ L_088FF7C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF800: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_088FF808: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_4 = (2234u << 16u); @@ -7535,11 +7790,9 @@ L_088FF808: ctx.gpr[21] = (ctx.gpr[21] + static_cast(-20440)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), aot_gpr_31); aot_gpr_31 = (0x088FF92Cu); - // nop goto L_088FF0A0; L_088FF92C: aot_gpr_31 = (0x088FF934u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 271u, 0x08941C80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x088FF934u) goto L_088FF934; AOT_REGCACHE_SYNC_OUT(); return; L_088FF934: diff --git a/profiles/vcs/generated/generated_unit_0063.cpp b/profiles/vcs/generated/generated_unit_0063.cpp index 0ae2c44..e80fd12 100644 --- a/profiles/vcs/generated/generated_unit_0063.cpp +++ b/profiles/vcs/generated/generated_unit_0063.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0063[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 9, 0, 0, 10, 0, 11, 0, 12, 0, 13, 0, 0, - 14, 0, 15, 0, 16, 0, 17, 0, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 0, 27, 0, 0, 28, - 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 0, 40, 0, 0, 41, 0, 0, 42, 0, - 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, - 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, - 74, 0, 75, 0, 0, 76, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, - 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 95, 0, 96, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, - 101, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 105, 0, 106, 0, 107, 0, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 110, 0, 0, 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 113, 0, 0, 0, 0, 0, 114, - 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 118, 119, 0, 120, 0, 121, 0, 122, 123, 0, 124, 0, 125, 0, 126, 127, - 0, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 0, 0, 133, 0, 0, 134, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 148, 0, - 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, - 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 158, 0, 0, 0, 0, 159, - 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, - 168, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, 175, 176, 0, - 0, 0, 177, 0, 0, 178, 0, 179, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 186, 0, 187, 0, 0, 0, 188, - 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 192, 0, 193, 0, 194, 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 197, - 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 201, - 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, - 0, 0, 0, 0, 0, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 0, 212, 213, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 222, 0, 0, - 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 244, - 0, 0, 0, 245, 0, 0, 0, 246, 0, 247, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, - 0, 251, 0, 252, 0, 0, 253, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, - 0, 0, 0, 258, 0, 0, 259, 0, 260, 0, 0, 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, - 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 268, 0, 0, 269, 270, 0, 271, 0, 272, 0, 273, 274, 0, 275, 0, 276, 0, 277, 278, 0, 0, 0, 279, 0, 0, 0, 280, - 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, 0, 284, 0, 0, 0, - 0, 285, 0, 286, 0, 0, 0, 287, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, - 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 294, 0, 0, 0, 295, 296, 0, 0, 0, 0, 0, 297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 299, 0, 300, 0, 301, 0, 0, 0, 0, 302, 0, 303, 304, 0, 0, 0, 305, - 0, 0, 306, 0, 307, 0, 308, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 313, - 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, - 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, - 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 333, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 347, 0, 348, 0, 0, 0, 349, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, - 0, 0, 355, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 359, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, - 0, 0, 363, 0, 0, 364, 0, 0, 0, 365, 0, 0, 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, - 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 383, 0, - 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 395, 0, 0, 0, 0, 396, 0, 397, 0, 0, 398, 399, 400, 0, 0, 401, 0, 0, 0, - 0, 402, 0, 403, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, - 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 414, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 418, 0, 0, 0, - 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 0, 431, 0, 0, - 0, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 438, 0, 439, - 0, 0, 0, 440, 0, 0, 441, 0, 0, 442, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 0, 446, 0, 447, 0, 0, 448, 0, 0, 449, 0, 450, - 0, 451, 0, 0, 0, 452, 0, 453, 0, 0, 454, 455, 0, 0, 456, 0, 0, 457, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 461, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 463, 464, 0, 465, 0, 0, 466, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 469, 0, 0, 470, 471, 0, 0, 0, 0, 0, 0, 472, 0, - 0, 0, 473, 0, 474, 0, 0, 475, 0, 476, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 485, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 488, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 495, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 0, 507, 0, 508, - 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 522, 0, 0, 0, 0, - 523, 0, 524, 525, 0, 526, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 531, 0, 0, - 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 538, 0, 0, 539, 0, 540, 0, - 0, 541, 0, 0, 0, 542, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, - 545, 0, 0, 0, 546, 0, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 550, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 551, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 558, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 560, 0, 0, 561, 0, 562, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 564, 0, 565, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 575, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 578, 0, 579, 0, 0, 580, 0, 0, 581, 582, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, - 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 587, 0, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, 0, 592, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 595, 0, 0, - 0, 0, 0, 596, 0, 597, 0, 598, 0, 0, 0, 599, 0, 0, 600, 601, 0, 602, 0, 603, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 605, 0, 0, 606, 0, 0, 607, 0, 0, 608, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 616, 0, 617, 0, 618, 0, 0, 619, 0, 0, 620, - 0, 621, 0, 622, 0, 623, 624, 0, 0, 625, 0, 0, 626, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 629, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 633, 0, 0, 634, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 638, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 0, - 643, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, - 0, 0, 0, 648, 649, 0, 0, 650, 0, 0, 0, 0, 0, 651, 0, 0, 0, 652, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, - 655, 0, 0, 0, 0, 656, 0, 657, 658, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 666, 0, 667, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, - 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, 673, 0, 0, 0, 0, 674, 0, 0, - 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, - 0, 680, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 684, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 690, 0, 0, 0, 691, 0, 0, 0, - 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 696, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 699, 700, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 704, 0, 0, 705, 0, 706, 707, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 713, 0, 0, 0, 714, 0, 715, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 719, 720, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0063[64] = { + 0x0000000010810001ull, 0x92AAAA552A950440ull, 0xAAAAA555492AAAAAull, 0xAA95552555552AAAull, + 0x1540090000008008ull, 0x5508208111050000ull, 0x0000001082441200ull, 0x01424554D5AB2800ull, + 0x0200050801400080ull, 0x8014800144200500ull, 0x2289048484880014ull, 0x000012A462412121ull, + 0x829522088A8020A0ull, 0x4008020281080002ull, 0x0020C410020080A0ull, 0x0000000005000020ull, + 0x2224400000000000ull, 0x0004044004000006ull, 0x8100000000000040ull, 0x0080420041280000ull, + 0x0202228888888800ull, 0x2241094840002A4Aull, 0x88D5AB2800000001ull, 0x2000208A10840008ull, + 0x8D0A840020C44888ull, 0x02010082804A0154ull, 0x08A0841104020804ull, 0x0044540000140000ull, + 0x008000A00000A000ull, 0x4540001004280002ull, 0x090921240A082800ull, 0x0040084055488224ull, + 0x5440000020051000ull, 0x0010414002282010ull, 0x0212890A13942500ull, 0x2000455514892244ull, + 0x0000012424920000ull, 0xA4A48A48A1040800ull, 0x0019400000064CA2ull, 0x04002A9440CA0496ull, + 0x0014000025020140ull, 0x001000000450A209ull, 0x00A01002A5555480ull, 0x0D00482000401201ull, + 0x84008004290100ADull, 0x4000006252801000ull, 0x060003000C001211ull, 0x000000A004420000ull, + 0x0002808A00000129ull, 0x0000012800001280ull, 0x10000000C9480005ull, 0x2054880002492004ull, + 0x04050924010AC8A8ull, 0x8804126A92A88900ull, 0x0044020900204400ull, 0x1100220104801022ull, + 0x004005A1200A2098ull, 0x0200400004008000ull, 0x2124002040094400ull, 0x40001000C0000004ull, + 0x008000002092200Aull, 0x0040110411200020ull, 0x010D208010043482ull, 0x68202000A2101014ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0063[64] = { + 1u, 5u, 29u, 59u, 89u, 97u, 109u, 116u, 137u, 144u, 154u, 168u, 182u, 198u, 206u, 215u, + 218u, 223u, 229u, 232u, 239u, 251u, 266u, 281u, 290u, 306u, 318u, 329u, 336u, 341u, 350u, 363u, + 376u, 384u, 393u, 410u, 427u, 435u, 451u, 463u, 480u, 488u, 497u, 513u, 523u, 536u, 545u, 555u, + 560u, 569u, 575u, 584u, 596u, 612u, 630u, 638u, 648u, 661u, 665u, 675u, 680u, 688u, 696u, 709u, }; void recomp_unit_0063_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0063_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08900000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0063[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0063[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0063[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08900000; @@ -992,7 +899,17 @@ L_08900128: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08900140: { const bool branch_taken = 0u == 0u; aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(124), ctx.gpr[10]); @@ -1086,7 +1003,6 @@ L_08900198: } L_089001A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089003FC; } @@ -1683,7 +1599,17 @@ L_0890040C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890043C: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), ctx.gpr[16]); @@ -1712,7 +1638,6 @@ L_0890043C: L_089004A0: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8812))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089004E0; } @@ -1727,9 +1652,7 @@ L_089004AC: ctx.gpr[21] = (ctx.gpr[21] + aot_gpr_5); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089004F0; } @@ -1737,7 +1660,6 @@ L_089004AC: } L_089004D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08900548; } @@ -1815,9 +1737,7 @@ L_089004F0: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08900548; } @@ -1884,7 +1804,6 @@ L_089005B4: aot_mem.aot_direct_store16(ctx.gpr[20] + static_cast(58), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089005E0; } @@ -1899,7 +1818,6 @@ L_089005CC: goto L_089005E0; L_089005E0: { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_089005F0; } @@ -1950,7 +1868,6 @@ L_089005F8: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(36), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(3))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900630; } @@ -1971,7 +1888,6 @@ L_08900630: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(0), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900658; } @@ -1986,7 +1902,6 @@ L_08900648: L_08900658: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(100))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900788; } @@ -2065,7 +1980,6 @@ L_0890072C: L_08900734: ctx.gpr[7] = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08900744; } @@ -2092,7 +2006,6 @@ L_0890074C: } L_08900754: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08900760; } @@ -2119,7 +2032,6 @@ L_08900768: } L_08900770: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0890077C; } @@ -2155,14 +2067,12 @@ L_08900798: goto L_089007A0; L_089007A0: aot_gpr_31 = (0x089007A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089007A8u) goto L_089007A8; AOT_REGCACHE_SYNC_OUT(); return; L_089007A8: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089007C4; } @@ -2176,9 +2086,7 @@ L_089007B8: L_089007C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890088C; } @@ -2186,7 +2094,6 @@ L_089007C4: } L_089007D8: aot_gpr_31 = (0x089007E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089007E0u) goto L_089007E0; AOT_REGCACHE_SYNC_OUT(); return; L_089007E0: @@ -2222,7 +2129,6 @@ L_0890081C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890088C; } @@ -2230,7 +2136,6 @@ L_0890081C: } L_08900858: aot_gpr_31 = (0x08900860u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08900860u) goto L_08900860; AOT_REGCACHE_SYNC_OUT(); return; L_08900860: @@ -2249,9 +2154,7 @@ L_08900860: L_0890088C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08900954; } @@ -2259,7 +2162,6 @@ L_0890088C: } L_089008A0: aot_gpr_31 = (0x089008A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089008A8u) goto L_089008A8; AOT_REGCACHE_SYNC_OUT(); return; L_089008A8: @@ -2295,7 +2197,6 @@ L_089008E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900954; } @@ -2303,7 +2204,6 @@ L_089008E4: } L_08900920: aot_gpr_31 = (0x08900928u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08900928u) goto L_08900928; AOT_REGCACHE_SYNC_OUT(); return; L_08900928: @@ -2322,9 +2222,7 @@ L_08900928: L_08900954: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089009BC; } @@ -2334,7 +2232,6 @@ L_08900968: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089009BC; } @@ -2342,7 +2239,6 @@ L_08900968: } L_08900978: aot_gpr_31 = (0x08900980u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08900980u) goto L_08900980; AOT_REGCACHE_SYNC_OUT(); return; L_08900980: @@ -2365,7 +2261,6 @@ L_08900980: L_089009BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089009FC; } @@ -2373,7 +2268,6 @@ L_089009BC: } L_089009C8: aot_gpr_31 = (0x089009D0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089009D0u) goto L_089009D0; AOT_REGCACHE_SYNC_OUT(); return; L_089009D0: @@ -2392,7 +2286,6 @@ L_089009D0: L_089009FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(84))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900B78; } @@ -2400,7 +2293,6 @@ L_089009FC: } L_08900A08: aot_gpr_31 = (0x08900A10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08900A10u) goto L_08900A10; AOT_REGCACHE_SYNC_OUT(); return; L_08900A10: @@ -2416,9 +2308,7 @@ L_08900A10: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08900AE4; } @@ -2475,7 +2365,6 @@ L_08900AA8: { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_08900ACC; @@ -2555,7 +2444,6 @@ L_08900B40: aot_fpr_12 = aot_fpr_12 / aot_fpr_15; aot_fpr_14 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - aot_fpr_13; goto L_08900B64; @@ -2583,7 +2471,6 @@ L_08900B78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900C6C; } @@ -2605,7 +2492,6 @@ L_08900B94: AOT_REGCACHE_SYNC_OUT(); return; L_08900B9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08900BB0; } @@ -2669,7 +2555,6 @@ L_08900BB0: AOT_REGCACHE_SYNC_OUT(); return; L_08900C14: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08900C64; } @@ -2679,9 +2564,7 @@ L_08900C1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08900C5C; } @@ -2734,7 +2617,6 @@ L_08900C6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900CD0; } @@ -2744,7 +2626,6 @@ L_08900C7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900CC8; } @@ -2763,7 +2644,6 @@ L_08900CA4: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-20760), std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900CC0; } @@ -2813,14 +2693,22 @@ L_08900CE4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-13616))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08900CFC: aot_gpr_31 = (0x08900D04u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08900D04u) goto L_08900D04; AOT_REGCACHE_SYNC_OUT(); return; L_08900D04: @@ -2977,9 +2865,7 @@ L_08900E90: goto L_08900EA8; L_08900EA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(ctx.fpr[22])) && ctx.fpr[20] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08900EBC; } @@ -3019,7 +2905,17 @@ L_08900ED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08900F14: aot_gpr_29 = (aot_gpr_29 + static_cast(-656)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8360))); @@ -3029,7 +2925,6 @@ L_08900F14: { const std::uint32_t aot_run_words[12]{std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(600), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08900F68; } @@ -3037,7 +2932,6 @@ L_08900F14: } L_08900F60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089023B8; } @@ -3127,14 +3021,12 @@ L_08900F68: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089010B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 302u, 0x08941EA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089010B8u) goto L_089010B8; AOT_REGCACHE_SYNC_OUT(); return; L_089010B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901198; } @@ -3173,7 +3065,6 @@ L_089010F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901198; } @@ -3227,7 +3118,6 @@ L_08901198: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 90 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089023B8; } @@ -3288,7 +3178,6 @@ L_089011C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 84u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901354; } @@ -3350,9 +3239,7 @@ L_08901218: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890134C; } @@ -3363,9 +3250,7 @@ L_089012E0: aot_gpr_4 = (16928u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890134C; } @@ -3416,9 +3301,7 @@ L_089012FC: aot_gpr_4 = (17008u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08901354; } @@ -3442,9 +3325,7 @@ L_08901360: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8348))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890142C; } @@ -3467,9 +3348,7 @@ L_08901378: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890142C; } @@ -3492,7 +3371,6 @@ L_089013B8: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089013DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089013DCu) goto L_089013DC; AOT_REGCACHE_SYNC_OUT(); return; L_089013DC: @@ -3533,7 +3411,6 @@ L_0890142C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890149C; } @@ -3543,7 +3420,6 @@ L_0890143C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890149C; } @@ -3553,7 +3429,6 @@ L_0890144C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 85u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890149C; } @@ -3563,7 +3438,6 @@ L_0890145C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890149C; } @@ -3573,7 +3447,6 @@ L_0890146C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890149C; } @@ -3583,7 +3456,6 @@ L_0890147C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890149C; } @@ -3593,7 +3465,6 @@ L_0890148C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901578; } @@ -3601,14 +3472,12 @@ L_0890148C: } L_0890149C: aot_gpr_31 = (0x089014A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089014A4u) goto L_089014A4; AOT_REGCACHE_SYNC_OUT(); return; L_089014A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089014C4; } @@ -3618,7 +3487,6 @@ L_089014B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901578; } @@ -3641,9 +3509,7 @@ L_089014E4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(176))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890150C; } @@ -3674,7 +3540,6 @@ L_08901518: } L_08901524: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08901534; } @@ -3682,7 +3547,6 @@ L_08901524: } L_0890152C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901534; } @@ -3750,7 +3614,6 @@ L_08901578: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08901598; } @@ -3759,7 +3622,6 @@ L_08901578: L_0890158C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(45))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089015A0; } @@ -3776,7 +3638,6 @@ L_08901598: L_089015A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089016FC; } @@ -3787,7 +3648,6 @@ L_089015AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089016EC; } @@ -3877,7 +3737,6 @@ L_0890168C: L_08901694: ctx.gpr[8] = (static_cast(aot_gpr_5) < 256 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089016A4; } @@ -3904,7 +3763,6 @@ L_089016AC: } L_089016B4: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089016C0; } @@ -3931,7 +3789,6 @@ L_089016C8: } L_089016D0: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089016DC; } @@ -3960,7 +3817,6 @@ L_089016FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890178C; } @@ -3990,9 +3846,7 @@ L_0890170C: L_08901748: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08901784; } @@ -4001,9 +3855,7 @@ L_08901748: L_0890175C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08901784; } @@ -4012,9 +3864,7 @@ L_0890175C: L_08901770: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890178C; } @@ -4032,7 +3882,6 @@ L_0890178C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089018EC; } @@ -4042,7 +3891,6 @@ L_0890179C: aot_fpr_13 = std::bit_cast(0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(48))); if (branch_taken) { @@ -4080,9 +3928,7 @@ L_089017B4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890180C; } @@ -4108,7 +3954,6 @@ L_0890180C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890182C; } @@ -4118,7 +3963,6 @@ L_0890181C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901838; } @@ -4156,7 +4000,6 @@ L_0890185C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -4192,7 +4035,6 @@ L_089018A8: goto L_089018BC; L_089018BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089018CC; } @@ -4205,9 +4047,7 @@ L_089018C4: L_089018CC: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089018E8; } @@ -4243,7 +4083,6 @@ L_089018FC: goto L_08901908; L_08901908: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4251,7 +4090,6 @@ L_08901908: } L_08901910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4259,7 +4097,6 @@ L_08901910: } L_08901918: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4285,7 +4122,6 @@ L_08901920: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4302,7 +4138,6 @@ L_08901944: L_0890194C: aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4328,7 +4163,6 @@ L_08901958: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4348,11 +4182,20 @@ L_08901984: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-13456))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890199C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); aot_gpr_4 = (std::bit_cast(aot_fpr_12)); @@ -4373,7 +4216,6 @@ L_0890199C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4399,7 +4241,6 @@ L_089019C0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4425,7 +4266,6 @@ L_089019E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4451,7 +4291,6 @@ L_08901A08: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901A2C; } @@ -4461,9 +4300,7 @@ L_08901A2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(56))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089020F8; } @@ -4476,9 +4313,7 @@ L_08901A44: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08901A80; } @@ -4496,7 +4331,6 @@ L_08901A80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08901DE8; } @@ -4506,9 +4340,7 @@ L_08901A90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089020F0; } @@ -4531,11 +4363,20 @@ L_08901ABC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-13416))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08901AD4: aot_gpr_31 = (0x08901ADCu); ctx.gpr[20] = (0u | 1u); @@ -4578,7 +4419,6 @@ L_08901AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08901B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901BA8; } @@ -4610,7 +4450,6 @@ L_08901B50: AOT_REGCACHE_SYNC_OUT(); return; L_08901BA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902368; } @@ -4668,7 +4507,6 @@ L_08901BD8: AOT_REGCACHE_SYNC_OUT(); return; L_08901C34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901C94; } @@ -4700,7 +4538,6 @@ L_08901C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08901C94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902368; } @@ -4775,7 +4612,6 @@ L_08901D04: AOT_REGCACHE_SYNC_OUT(); return; L_08901D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901DD8; } @@ -4828,7 +4664,6 @@ L_08901D90: AOT_REGCACHE_SYNC_OUT(); return; L_08901DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902368; } @@ -4836,7 +4671,6 @@ L_08901DD8: } L_08901DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -4846,7 +4680,6 @@ L_08901DE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08901F14; } @@ -4870,7 +4703,6 @@ L_08901DF8: AOT_REGCACHE_SYNC_OUT(); return; L_08901E2C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -4880,9 +4712,7 @@ L_08901E34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089020F0; } @@ -4894,7 +4724,6 @@ L_08901E4C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089020F0; } @@ -4966,7 +4795,6 @@ L_08901EEC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(24), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -4987,7 +4815,6 @@ L_08901F14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -4997,9 +4824,7 @@ L_08901F24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089020F0; } @@ -5018,7 +4843,6 @@ L_08901F3C: L_08901F4C: aot_gpr_4 = (static_cast(aot_gpr_4) < 69 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -5026,7 +4850,6 @@ L_08901F4C: } L_08901F58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08901F78; } @@ -5042,7 +4865,6 @@ L_08901F60: } L_08901F68: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -5121,7 +4943,6 @@ L_08902030: AOT_REGCACHE_SYNC_OUT(); return; L_08902040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -5177,7 +4998,6 @@ L_089020D8: AOT_REGCACHE_SYNC_OUT(); return; L_089020E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089020F0; } @@ -5185,7 +5005,6 @@ L_089020E8: } L_089020F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902228; } @@ -5195,9 +5014,7 @@ L_089020F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(56))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08902154; } @@ -5210,9 +5027,7 @@ L_08902110: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890214C; } @@ -5228,7 +5043,6 @@ L_08902134: goto L_0890214C; L_0890214C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902228; } @@ -5238,7 +5052,6 @@ L_08902154: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902228; } @@ -5262,7 +5075,6 @@ L_08902164: AOT_REGCACHE_SYNC_OUT(); return; L_08902198: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08902228; } @@ -5272,9 +5084,7 @@ L_089021A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(472))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08902228; } @@ -5286,7 +5096,6 @@ L_089021B8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08902228; } @@ -5317,7 +5126,6 @@ L_089021D0: AOT_REGCACHE_SYNC_OUT(); return; L_08902220: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902368; } @@ -5326,7 +5134,6 @@ L_08902220: L_08902228: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(56)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902264; } @@ -5337,7 +5144,6 @@ L_08902234: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(56)))))); aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08902250; } @@ -5354,7 +5160,6 @@ L_08902248: L_08902250: aot_gpr_5 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08902260; } @@ -5369,7 +5174,6 @@ L_08902260: L_08902264: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(58)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089022C4; } @@ -5380,7 +5184,6 @@ L_08902270: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(58)))))); aot_gpr_5 = (aot_gpr_5 - aot_gpr_4); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_0890228C; } @@ -5414,7 +5217,6 @@ L_089022AC: aot_mem.aot_direct_store8(ctx.gpr[18] + static_cast(45), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(45))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089022C4; } @@ -5431,7 +5233,6 @@ L_089022BC: L_089022C4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(50))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902340; } @@ -5442,7 +5243,6 @@ L_089022D0: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(60))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902334; } @@ -5457,7 +5257,6 @@ L_089022E4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(66))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902340; } @@ -5467,7 +5266,6 @@ L_08902308: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902324; } @@ -5500,7 +5298,6 @@ L_08902334: L_08902340: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(62)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890235C; } @@ -5530,7 +5327,6 @@ L_0890235C: goto L_08902368; L_08902368: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08902398; } @@ -5545,7 +5341,6 @@ L_08902370: AOT_REGCACHE_SYNC_OUT(); return; L_08902380: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08902390; } @@ -5573,7 +5368,6 @@ L_08902398: goto L_089023A0; L_089023A0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089011C8; } @@ -5583,7 +5377,6 @@ L_089023A8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 90 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089011A8; } @@ -5611,7 +5404,17 @@ L_089023B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089023F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5721,7 +5524,6 @@ L_08902548: aot_gpr_5 = (aot_gpr_6 & 4u); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08902574; } @@ -5732,7 +5534,6 @@ L_08902560: aot_gpr_5 = (aot_gpr_6 & 128u); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089025FC; } @@ -5740,14 +5541,12 @@ L_08902560: } L_08902574: aot_gpr_31 = (0x0890257Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890257Cu) goto L_0890257C; AOT_REGCACHE_SYNC_OUT(); return; L_0890257C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089025AC; } @@ -5767,7 +5566,6 @@ L_08902598: AOT_REGCACHE_SYNC_OUT(); return; L_089025A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089025F4; } @@ -5777,7 +5575,6 @@ L_089025AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089025DC; } @@ -5797,7 +5594,6 @@ L_089025C8: AOT_REGCACHE_SYNC_OUT(); return; L_089025D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089025F4; } @@ -5821,7 +5617,6 @@ L_089025F4: goto L_089025FC; L_089025FC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0890262C; } @@ -5831,7 +5626,6 @@ L_08902604: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_0890262C; } @@ -5839,7 +5633,6 @@ L_08902604: } L_08902614: aot_gpr_31 = (0x0890261Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890261Cu) goto L_0890261C; AOT_REGCACHE_SYNC_OUT(); return; L_0890261C: @@ -5863,7 +5656,6 @@ L_0890262C: L_08902638: aot_gpr_4 = (0u | 37u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_089026B8; } @@ -5905,7 +5697,6 @@ L_08902648: AOT_REGCACHE_SYNC_OUT(); return; L_089026B8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08903258; } @@ -5936,7 +5727,6 @@ L_089026D0: aot_gpr_5 = (aot_gpr_5 + static_cast(-6144)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902708; } @@ -5947,7 +5737,6 @@ L_08902704: goto L_08902708; L_08902708: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0890275C; } @@ -5956,7 +5745,6 @@ L_08902708: L_08902710: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(49))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890275C; } @@ -5965,7 +5753,6 @@ L_08902710: L_0890271C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0890275C; } @@ -5978,7 +5765,6 @@ L_08902728: aot_gpr_4 = (aot_gpr_6 + aot_gpr_4); ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0890275C; } @@ -5986,7 +5772,6 @@ L_08902728: } L_08902744: aot_gpr_31 = (0x0890274Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890274Cu) goto L_0890274C; AOT_REGCACHE_SYNC_OUT(); return; L_0890274C: @@ -6015,7 +5800,6 @@ L_08902778: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890290C; } @@ -6045,7 +5829,6 @@ L_0890279C: } L_089027A4: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08902818; } @@ -6118,7 +5901,6 @@ L_08902844: goto L_08902860; L_08902860: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08902900; } @@ -6157,7 +5939,6 @@ L_08902874: AOT_REGCACHE_SYNC_OUT(); return; L_089028C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08902900; } @@ -6200,7 +5981,6 @@ L_0890290C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (0u | 89u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08902934; } @@ -6230,7 +6010,6 @@ L_0890293C: AOT_REGCACHE_SYNC_OUT(); return; L_08902950: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -6240,7 +6019,6 @@ L_08902958: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902A1C; } @@ -6309,7 +6087,6 @@ L_08902968: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16329u << 16u); if (branch_taken) { @@ -6397,7 +6174,6 @@ L_08902A50: } L_08902A58: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08902B24; } @@ -6419,7 +6195,6 @@ L_08902A68: } L_08902A74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902AD4; } @@ -6427,7 +6202,6 @@ L_08902A74: } L_08902A7C: aot_gpr_31 = (0x08902A84u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08902A84u) goto L_08902A84; AOT_REGCACHE_SYNC_OUT(); return; L_08902A84: @@ -6461,7 +6235,6 @@ L_08902AB0: } L_08902AD4: aot_gpr_31 = (0x08902ADCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08902ADCu) goto L_08902ADC; AOT_REGCACHE_SYNC_OUT(); return; L_08902ADC: @@ -6494,7 +6267,6 @@ L_08902B00: L_08902B24: aot_gpr_4 = (0u | 47u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08902BAC; } @@ -6548,7 +6320,6 @@ L_08902B94: L_08902BAC: aot_gpr_4 = (0u | 11u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08902C14; } @@ -6584,7 +6355,6 @@ L_08902BE8: L_08902BEC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6613,7 +6383,6 @@ L_08902C0C: } L_08902C14: aot_gpr_31 = (0x08902C1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08902C1Cu) goto L_08902C1C; AOT_REGCACHE_SYNC_OUT(); return; L_08902C1C: @@ -6641,7 +6410,6 @@ L_08902C40: L_08902C60: aot_gpr_4 = (0u | 47u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08902D64; } @@ -6655,7 +6423,6 @@ L_08902C6C: L_08902C74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(48))); goto L_08902CBC; @@ -6696,7 +6463,6 @@ L_08902CBC: L_08902CE8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(48))); goto L_08902D30; @@ -6736,7 +6502,6 @@ L_08902D30: goto L_08902D5C; L_08902D5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -6753,7 +6518,6 @@ L_08902D64: } L_08902D70: { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08902E00; } @@ -6770,7 +6534,6 @@ L_08902D84: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(45))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890324C; } @@ -6808,7 +6571,6 @@ L_08902D98: AOT_REGCACHE_SYNC_OUT(); return; L_08902DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -6818,7 +6580,6 @@ L_08902E00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08902F58; } @@ -6827,7 +6588,6 @@ L_08902E00: L_08902E10: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[26])) && aot_fpr_13 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); if (branch_taken) { @@ -6856,9 +6616,7 @@ L_08902E30: aot_fpr_13 = ctx.fpr[17] + ctx.fpr[18]; aot_fpr_13 = std::sqrt(aot_fpr_13); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[26])) && aot_fpr_13 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08902E6C; } @@ -6880,9 +6638,7 @@ L_08902E6C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08902EA4; } @@ -6913,9 +6669,7 @@ L_08902EA4: { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08902EE8; } @@ -6965,7 +6719,6 @@ L_08902F58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890308C; } @@ -7006,7 +6759,6 @@ L_08902F68: AOT_REGCACHE_SYNC_OUT(); return; L_08902F94: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08903014; } @@ -7037,9 +6789,7 @@ L_08902F9C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(132), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890300C; } @@ -7093,7 +6843,6 @@ L_08903020: AOT_REGCACHE_SYNC_OUT(); return; L_08903084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -7103,7 +6852,6 @@ L_0890308C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08903124; } @@ -7115,7 +6863,6 @@ L_0890309C: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(88))); goto L_089030C4; @@ -7152,7 +6899,6 @@ L_089030C4: AOT_REGCACHE_SYNC_OUT(); return; L_0890311C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -7161,7 +6907,6 @@ L_0890311C: L_08903124: aot_gpr_4 = (0u | 35u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08903194; } @@ -7195,7 +6940,6 @@ L_08903130: AOT_REGCACHE_SYNC_OUT(); return; L_0890318C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -7237,7 +6981,6 @@ L_089031A0: AOT_REGCACHE_SYNC_OUT(); return; L_08903200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890324C; } @@ -7266,7 +7009,6 @@ L_08903208: L_0890324C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089026C0; } @@ -7274,7 +7016,6 @@ L_0890324C: } L_08903258: aot_gpr_31 = (0x08903260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08903260u) goto L_08903260; AOT_REGCACHE_SYNC_OUT(); return; L_08903260: @@ -7289,7 +7030,6 @@ L_08903260: L_0890326C: aot_gpr_4 = (0u | 37u); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_089032F0; } @@ -7405,7 +7145,17 @@ L_08903364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089033AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7420,21 +7170,51 @@ L_089033BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089033C8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089033D0: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089033D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7454,7 +7234,6 @@ L_089033F4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(36), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08903414; } @@ -7493,7 +7272,6 @@ L_08903438: goto L_0890343C; L_0890343C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890344C; } @@ -7516,7 +7294,17 @@ L_0890344C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903460: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7536,7 +7324,6 @@ L_08903488: L_08903494: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(180))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089034AC; } @@ -7579,7 +7366,17 @@ L_089034C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089034E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(70))); @@ -7603,7 +7400,6 @@ L_089034E8: L_08903520: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08903594; } @@ -7638,7 +7434,6 @@ L_08903554: AOT_REGCACHE_SYNC_OUT(); return; L_0890355C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08903598; } @@ -7671,7 +7466,6 @@ L_08903584: AOT_REGCACHE_SYNC_OUT(); return; L_0890358C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08903598; } @@ -7688,7 +7482,6 @@ L_08903598: L_089035A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(71))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089035EC; } @@ -7761,7 +7554,17 @@ L_08903638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903654: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -7777,7 +7580,6 @@ L_08903654: L_08903680: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(71))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089036C8; } @@ -7850,7 +7652,17 @@ L_08903714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903730: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -7866,7 +7678,6 @@ L_08903730: L_0890375C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(71))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089037A4; } @@ -7939,14 +7750,23 @@ L_089037F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890380C: aot_gpr_6 = (0u | 0u); goto L_08903810; L_08903810: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(180))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08903834; } @@ -7972,11 +7792,20 @@ L_08903834: } L_08903844: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890384C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[16]); @@ -8127,7 +7956,17 @@ L_089039B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089039E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); @@ -8357,7 +8196,17 @@ L_08903B7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903BB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[16]); @@ -8508,7 +8357,17 @@ L_08903CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8584,7 +8443,17 @@ L_08903DB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903DD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -8623,7 +8492,6 @@ L_08903E1C: goto L_08903E28; L_08903E28: aot_gpr_31 = (0x08903E30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08903E30u) goto L_08903E30; AOT_REGCACHE_SYNC_OUT(); return; L_08903E30: @@ -8653,7 +8521,17 @@ L_08903E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903E70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -8692,7 +8570,6 @@ L_08903EB4: goto L_08903EC0; L_08903EC0: aot_gpr_31 = (0x08903EC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08903EC8u) goto L_08903EC8; AOT_REGCACHE_SYNC_OUT(); return; L_08903EC8: @@ -8722,14 +8599,34 @@ L_08903EE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903F08: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903F10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -8768,14 +8665,33 @@ L_08903F64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903F74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08903F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -8812,7 +8728,6 @@ L_08903FD4: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08903FF8; } diff --git a/profiles/vcs/generated/generated_unit_0064.cpp b/profiles/vcs/generated/generated_unit_0064.cpp index de7a167..209497d 100644 --- a/profiles/vcs/generated/generated_unit_0064.cpp +++ b/profiles/vcs/generated/generated_unit_0064.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0064[4095] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 6, 0, 7, 0, 0, 8, 0, 9, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 14, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 17, 18, 0, - 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, - 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, 36, 37, 38, 0, 39, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, - 0, 0, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 48, - 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 57, 0, 58, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 0, 62, - 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 67, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, - 0, 0, 0, 78, 0, 0, 79, 0, 0, 0, 0, 80, 0, 81, 0, 82, 0, 83, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, - 0, 87, 0, 88, 0, 0, 0, 89, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 93, 94, 0, 0, 0, 95, 0, 96, 0, 0, 0, 97, - 0, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 0, 104, 0, 105, 0, 106, 0, 0, - 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 109, 0, 110, 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 113, 114, 0, 0, 0, 115, 0, 116, - 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 0, 119, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 122, 0, 0, 0, 0, 123, - 0, 124, 0, 125, 0, 0, 126, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 141, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 144, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, - 0, 148, 149, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 154, 0, 155, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 161, 0, 162, 0, 163, - 0, 164, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, - 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 176, 0, 177, 0, 178, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 183, 0, 0, - 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, - 0, 188, 0, 0, 0, 0, 0, 189, 190, 191, 0, 192, 0, 0, 0, 0, 0, 193, 0, 194, 0, 195, 0, 0, 0, 196, 0, 0, 0, 197, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, - 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, - 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, - 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, - 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, 229, 230, - 0, 231, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 237, - 0, 0, 238, 239, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 0, - 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 255, 256, 0, 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 0, 260, 0, 0, 0, 0, 261, - 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 269, - 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 273, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, - 276, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 281, 0, 282, 0, 283, 0, 284, - 0, 285, 0, 286, 0, 287, 288, 0, 289, 0, 0, 290, 0, 0, 291, 0, 0, 292, 0, 293, 0, 294, 0, 295, 296, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 297, 0, 0, 0, 0, 298, 0, 299, 0, 0, 300, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 0, 304, 0, 0, 0, 0, 0, 305, - 0, 306, 0, 307, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, - 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 317, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 322, 0, 323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, - 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 330, - 0, 331, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, - 0, 336, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, - 0, 0, 0, 0, 341, 0, 342, 0, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, - 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, - 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 366, - 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 371, - 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 374, 0, 0, 0, 375, 0, 376, 0, 377, 0, 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, - 0, 380, 0, 0, 0, 0, 381, 0, 0, 0, 0, 382, 0, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, - 0, 0, 0, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 403, 0, 404, 0, 405, 0, 0, 0, 0, - 0, 406, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 408, 0, 409, 0, 410, 0, 411, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 416, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 420, 0, 421, 0, 422, 0, 0, 423, 0, 0, 424, - 0, 425, 0, 0, 0, 0, 426, 0, 0, 427, 0, 428, 429, 0, 0, 430, 0, 0, 0, 431, 0, 0, 432, 0, 433, 0, 434, 0, 0, 0, 0, 435, - 0, 0, 436, 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 441, 0, 0, 442, 0, 0, 0, 443, 0, 0, 444, 0, 0, 445, - 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 452, 0, 0, 0, 453, 0, - 0, 0, 0, 0, 454, 0, 0, 455, 0, 456, 0, 457, 0, 458, 459, 0, 460, 0, 0, 0, 461, 0, 0, 462, 0, 463, 464, 0, 465, 0, 0, 466, - 0, 0, 467, 0, 0, 0, 468, 0, 0, 469, 0, 470, 471, 0, 472, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 476, - 0, 0, 477, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 484, 0, 0, 0, - 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 491, 0, 492, 0, - 0, 0, 0, 493, 0, 494, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 0, - 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 0, 504, 0, 0, 505, 0, 0, 0, 0, 506, 0, 507, 508, 0, 0, 0, 0, - 0, 509, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 0, 516, 0, 517, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 521, 0, 522, 0, 523, 0, 0, 0, 0, - 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, - 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 535, 0, 536, 0, 0, 0, 0, 537, 538, 0, 0, 0, 0, 0, 0, 0, - 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 542, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, - 545, 0, 546, 0, 547, 0, 548, 0, 0, 0, 549, 0, 550, 0, 0, 0, 0, 0, 551, 0, 552, 0, 553, 0, 0, 0, 554, 0, 0, 0, 0, 555, - 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 558, 559, 0, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, - 563, 0, 564, 0, 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, - 576, 0, 577, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 582, 0, 0, 583, 0, 584, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 587, 0, 588, 589, 0, 0, 0, 0, 0, 590, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, - 596, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, - 0, 0, 0, 601, 0, 602, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 606, 0, 0, 0, 607, 0, 608, 0, 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 612, 0, 0, 0, 0, 613, 614, 0, 0, - 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 621, 0, 0, - 0, 622, 0, 623, 0, 0, 0, 0, 0, 624, 0, 625, 626, 0, 627, 0, 0, 0, 628, 0, 629, 630, 0, 631, 0, 0, 0, 632, 0, 633, 0, 634, - 0, 635, 0, 636, 0, 0, 0, 637, 0, 0, 638, 0, 0, 639, 0, 640, 0, 641, 0, 642, 643, 0, 644, 0, 0, 0, 645, 0, 646, 0, 647, 0, - 648, 0, 649, 0, 650, 0, 651, 0, 652, 0, 653, 654, 0, 655, 0, 0, 0, 656, 0, 657, 0, 658, 0, 659, 0, 660, 0, 661, 0, 662, 663, 0, - 664, 0, 0, 0, 665, 0, 0, 666, 667, 0, 668, 0, 0, 0, 669, 0, 670, 0, 671, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 0, 0, 677, - 0, 678, 0, 679, 0, 680, 681, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 685, 0, 686, 0, 687, 0, 0, 688, 0, 0, 0, 0, 0, - 0, 0, 689, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 694, 0, 695, 0, 0, - 0, 0, 0, 0, 0, 696, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 703, 0, 0, 704, 0, 0, 0, 705, 0, 0, 706, 0, 0, 0, 707, 0, 0, 708, 0, 0, 709, 0, 710, 0, 0, 711, 0, - 712, 0, 713, 0, 714, 715, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 720, 0, 721, 0, 0, 0, 722, 0, 723, 0, 724, 0, 0, 725, 0, 0, 0, 0, 726, 0, - 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 732, 733, 0, 0, 734, 0, 0, 735, 0, 736, 0, 737, 738, 0, 0, 0, 739, 0, 740, 741, 0, 0, 0, 742, 0, 743, 0, - 744, 0, 0, 0, 745, 0, 0, 746, 0, 0, 0, 0, 747, 0, 748, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 751, - 0, 752, 0, 753, 0, 0, 0, 0, 0, 0, 754, 0, 755, 0, 756, 0, 0, 0, 0, 0, 757, 0, 758, 0, 759, 0, 760, 0, 761, 0, 0, 0, - 0, 762, 0, 763, 0, 764, 0, 0, 0, 765, 0, 766, 0, 0, 767, 0, 0, 0, 768, 0, 769, 0, 770, 0, 0, 771, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 774, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, - 777, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, - 0, 0, 0, 0, 0, 780, 0, 781, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 784, - 0, 0, 0, 0, 0, 0, 0, 785, 0, 786, 0, 787, 0, 0, 0, 788, 0, 789, 0, 790, 0, 791, 0, 792, 0, 793, 0, 794, 0, 795, 0, 796, - 0, 797, 0, 0, 798, 0, 799, 0, 800, 0, 801, 0, 0, 802, 0, 803, 0, 804, 0, 805, 0, 806, 0, 807, 0, 808, 0, 0, 0, 0, 809, 0, - 810, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 814, 0, 0, 815, 0, 0, 816, - 0, 817, 0, 818, 0, 819, 0, 0, 820, 0, 0, 821, 0, 0, 0, 0, 822, 823, 0, 0, 0, 824, 0, 0, 0, 0, 825, 0, 826, 0, 827, 0, - 828, 0, 829, 0, 0, 0, 830, 0, 0, 831, 0, 832, 0, 833, 0, 834, 0, 835, 0, 836, 0, 0, 837, 838, 0, 0, 0, 839, 0, 0, 0, 0, - 840, 0, 841, 0, 842, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 844, 0, 0, 0, 845, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 847, 0, 848, 0, 849, 0, 0, 850, 0, 0, 851, 0, 0, 0, 0, 0, 0, 852, 0, 853, 0, 0, 0, 854, 0, 0, 0, 855, 856, - 0, 857, 0, 858, 0, 0, 0, 0, 0, 859, 860, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, 863, 0, 864, 0, 865, 0, 0, - 0, 0, 0, 0, 866, 0, 867, 0, 0, 868, 0, 869, 0, 870, 0, 871, 0, 872, 0, 873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 874, 0, 875, - 0, 876, 0, 877, 0, 878, 0, 0, 0, 879, 0, 0, 880, 0, 0, 0, 881, 0, 882, 0, 0, 0, 0, 883, 0, 884, 0, 0, 0, 0, 885, 0, - 886, 0, 887, 888, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 891, 0, 892, 0, 0, 893, 0, 894, 0, 895, - 0, 0, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 899, 0, 900, 0, - 901, 0, 0, 0, 902, 0, 0, 903, 0, 0, 904, 0, 905, 0, 906, 0, 0, 0, 907, 0, 908, 0, 0, 909, 0, 0, 910, 0, 0, 0, 911, 0, - 0, 0, 0, 912, 0, 0, 0, 0, 0, 913, 0, 0, 914, 0, 915, 0, 916, 0, 917, 0, 0, 0, 0, 918, 0, 919, 0, 0, 0, 0, 0, 920, - 921, 0, 0, 0, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, 923, 0, 0, 924, 0, 925, 0, 0, 0, 0, 926, 0, 0, 0, 927, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0064[64] = { + 0x60A508801A544241ull, 0xA024480080A14428ull, 0xC08082201040DC2Aull, 0x10000882A0A5AAAAull, + 0xA002A10400022084ull, 0x8A32228A02A2A848ull, 0xA32228A02A292208ull, 0x0002114A85006088ull, + 0x0020A44808440840ull, 0x02C4401622016202ull, 0x04292202AA408408ull, 0x2041040802A0A142ull, + 0xA22A0B8208011010ull, 0x2001011010000000ull, 0x0800000210002200ull, 0x1000A20000202222ull, + 0xC144091020412040ull, 0x2AAA0A0C9009040Aull, 0x9249400484A21D55ull, 0xAA50001540261002ull, + 0x828A128401AA496Aull, 0x900010A08204810Aull, 0x4012900200100800ull, 0x0810401290020810ull, + 0x10000A5081080202ull, 0x8200809002008408ull, 0x8204110805021408ull, 0x1085454084002820ull, + 0x0A01004010088842ull, 0x0000485028140000ull, 0x0A85402000100000ull, 0x0A21455000000012ull, + 0x85489A4292A20420ull, 0x4520A04892252484ull, 0x880A5A4496916A90ull, 0x5092209012824484ull, + 0x0D092802109204A8ull, 0x0A90254400502812ull, 0x0185281010004955ull, 0x84541455009A0802ull, + 0x00046AA520409908ull, 0x0000080D100A8000ull, 0x20D1400052800080ull, 0x10000A8000000200ull, + 0x0040842804880005ull, 0x2242822030900D44ull, 0x545AA48AA8B45A0Aull, 0x955545916AAA2D55ull, + 0x2891001404A8896Aull, 0x4A4891200100AAA0ull, 0x4254520000104435ull, 0x51A3526001128008ull, + 0x1550540A8400D091ull, 0x0000008002544A2Aull, 0x0000400081000000ull, 0x8000000520000000ull, + 0xAAAA8A80840010A0ull, 0x9208101142AAA552ull, 0x08CAAA455423092Aull, 0xC45024A800A21015ull, + 0xA00AAA502A800E0Aull, 0xA940402D4285122Aull, 0x4494549151004010ull, 0x4429008182855208ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0064[64] = { + 1u, 19u, 33u, 49u, 67u, 78u, 98u, 117u, 130u, 141u, 156u, 171u, 184u, 199u, 204u, 209u, + 218u, 231u, 249u, 270u, 285u, 306u, 318u, 326u, 336u, 346u, 355u, 367u, 380u, 390u, 398u, 406u, + 417u, 436u, 454u, 477u, 493u, 509u, 524u, 539u, 556u, 572u, 580u, 591u, 596u, 606u, 622u, 648u, + 678u, 696u, 712u, 727u, 744u, 762u, 773u, 776u, 780u, 797u, 817u, 840u, 857u, 876u, 896u, 912u, }; void recomp_unit_0064_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0064_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08904000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0064[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0064[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0064[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08904000; @@ -1104,7 +1011,6 @@ L_08904000: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08904128; } @@ -1152,7 +1058,6 @@ L_08904050: L_08904058: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08904070; } @@ -1239,7 +1144,6 @@ L_089040F8: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08904114; } @@ -1247,7 +1151,6 @@ L_089040F8: } L_0890410C: aot_gpr_31 = (0x08904114u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904114u) goto L_08904114; AOT_REGCACHE_SYNC_OUT(); return; L_08904114: @@ -1320,7 +1223,17 @@ L_0890417C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089041AC: ctx.gpr[2] = (2192u << 16u); jump_target = aot_gpr_31; @@ -1328,12 +1241,21 @@ L_089041AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089041B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089041C8u); - // nop goto L_089041AC; L_089041C8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1342,7 +1264,17 @@ L_089041C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089041D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1371,7 +1303,6 @@ L_08904204: goto L_0890420C; L_0890420C: aot_gpr_31 = (0x08904214u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904214u) goto L_08904214; AOT_REGCACHE_SYNC_OUT(); return; L_08904214: @@ -1393,7 +1324,6 @@ L_0890422C: goto L_08904230; L_08904230: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890423C; } @@ -1416,7 +1346,17 @@ L_0890423C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904258: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1457,7 +1397,17 @@ L_089042A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089042BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1506,7 +1456,6 @@ L_08904304: } L_0890430C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890431C; } @@ -1514,7 +1463,6 @@ L_0890430C: } L_08904314: aot_gpr_31 = (0x0890431Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890431Cu) goto L_0890431C; AOT_REGCACHE_SYNC_OUT(); return; L_0890431C: @@ -1541,7 +1489,6 @@ L_0890432C: goto L_08904334; L_08904334: aot_gpr_31 = (0x0890433Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890433Cu) goto L_0890433C; AOT_REGCACHE_SYNC_OUT(); return; L_0890433C: @@ -1555,7 +1502,6 @@ L_08904340: L_08904348: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890435C; } @@ -1579,21 +1525,49 @@ L_0890435C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904374: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890437C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904384: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1653,7 +1627,17 @@ L_08904408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890441C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1713,21 +1697,49 @@ L_089044A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089044B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089044BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089044C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -1741,7 +1753,6 @@ L_089044C4: AOT_REGCACHE_SYNC_OUT(); return; L_089044F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08904534; } @@ -1773,7 +1784,6 @@ L_08904518: } L_0890452C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08904544; } @@ -1789,7 +1799,6 @@ L_08904534: } L_0890453C: aot_gpr_31 = (0x08904544u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904544u) goto L_08904544; AOT_REGCACHE_SYNC_OUT(); return; L_08904544: @@ -1848,7 +1857,6 @@ L_089045A4: ctx.gpr[20] = (aot_gpr_5 + ctx.gpr[20]); ctx.gpr[18] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[20] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08904624; } @@ -1935,7 +1943,6 @@ L_08904640: } L_0890464C: aot_gpr_31 = (0x08904654u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904654u) goto L_08904654; AOT_REGCACHE_SYNC_OUT(); return; L_08904654: @@ -1994,7 +2001,6 @@ L_089046B4: ctx.gpr[19] = (aot_gpr_5 + ctx.gpr[19]); ctx.gpr[17] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08904734; } @@ -2077,14 +2083,33 @@ L_08904738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904760: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904768: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2122,7 +2147,17 @@ L_089047A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089047B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -2132,7 +2167,17 @@ L_089047B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089047C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2166,7 +2211,17 @@ L_08904818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890482C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6512))); @@ -2195,7 +2250,17 @@ L_08904858: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890486C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2229,7 +2294,6 @@ L_089048A8: goto L_089048D4; L_089048B4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0890488C; } @@ -2248,7 +2312,17 @@ L_089048BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089048D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2284,7 +2358,6 @@ L_08904924: aot_gpr_4 = (aot_gpr_4 + static_cast(20)); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08904938; } @@ -2295,7 +2368,6 @@ L_08904934: goto L_08904938; L_08904938: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08904964; } @@ -2330,7 +2402,6 @@ L_08904974: aot_gpr_4 = (aot_gpr_4 + static_cast(32)); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08904988; } @@ -2341,7 +2412,6 @@ L_08904984: goto L_08904988; L_08904988: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089049B8; } @@ -2377,7 +2447,6 @@ L_089049C8: aot_gpr_4 = (aot_gpr_4 + static_cast(128)); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089049DC; } @@ -2429,7 +2498,17 @@ L_08904A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904A3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2460,7 +2539,6 @@ L_08904A6C: goto L_08904A74; L_08904A74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08904A84; } @@ -2485,12 +2563,21 @@ L_08904A84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904AA4: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_6 = (0u | 65535u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08904B18; } @@ -2499,7 +2586,6 @@ L_08904AA4: L_08904AB4: aot_gpr_6 = (static_cast(aot_gpr_5) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08904B04; } @@ -2508,7 +2594,6 @@ L_08904AB4: L_08904AC0: aot_gpr_6 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08904AE8; } @@ -2516,7 +2601,6 @@ L_08904AC0: } L_08904ACC: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08904B20; } @@ -2574,18 +2658,25 @@ L_08904B20: goto L_08904B34; L_08904B34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904B3C: ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08904B5C; } @@ -2601,11 +2692,20 @@ L_08904B54: } L_08904B5C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904B64: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2659,11 +2759,20 @@ L_08904B64: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904B8C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2687,11 +2796,20 @@ L_08904B8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904BA8: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2717,11 +2835,20 @@ L_08904BA8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904BC0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2747,11 +2874,20 @@ L_08904BC0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904BD8: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -2770,11 +2906,20 @@ L_08904BD8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904BF4: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -2793,11 +2938,20 @@ L_08904BF4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904C10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -2810,7 +2964,17 @@ L_08904C10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904C30: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(aot_fpr_13)); @@ -2819,7 +2983,17 @@ L_08904C30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904C40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -2835,12 +3009,21 @@ L_08904C40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904C6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -2852,7 +3035,6 @@ L_08904C84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[2] = (aot_gpr_6 & 255u); if (branch_taken) { @@ -2872,14 +3054,22 @@ L_08904CA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904CAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08904CCC; } @@ -2895,16 +3085,24 @@ L_08904CC4: } L_08904CCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904CD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08904CE4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904CE4u) goto L_08904CE4; AOT_REGCACHE_SYNC_OUT(); return; L_08904CE4: @@ -2915,14 +3113,34 @@ L_08904CE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904CF4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904CFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), std::bit_cast(ctx.fpr[20])); @@ -2977,7 +3195,6 @@ L_08904D90: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08904DA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904DA0u) goto L_08904DA0; AOT_REGCACHE_SYNC_OUT(); return; L_08904DA0: @@ -2988,7 +3205,6 @@ L_08904DA0: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08904DC0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904DC0u) goto L_08904DC0; AOT_REGCACHE_SYNC_OUT(); return; L_08904DC0: @@ -3015,7 +3231,6 @@ L_08904DC0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08904DF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904DF4u) goto L_08904DF4; AOT_REGCACHE_SYNC_OUT(); return; L_08904DF4: @@ -3037,7 +3252,6 @@ L_08904E24: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08904D90; } @@ -3065,7 +3279,17 @@ L_08904E34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904E70: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -3074,7 +3298,17 @@ L_08904E70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904E84: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(16), static_cast(0u)); @@ -3110,11 +3344,20 @@ L_08904EEC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-13040))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904F04: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_16) ? 1u : 0u); @@ -3146,7 +3389,6 @@ L_08904F24: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08904F34u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904F34u) goto L_08904F34; AOT_REGCACHE_SYNC_OUT(); return; L_08904F34: @@ -3157,7 +3399,6 @@ L_08904F34: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08904F54u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08904F54u) goto L_08904F54; AOT_REGCACHE_SYNC_OUT(); return; L_08904F54: @@ -3186,7 +3427,6 @@ L_08904FA4: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08904F24; } @@ -3194,7 +3434,6 @@ L_08904FA4: } L_08904FB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08904FBC; } @@ -3220,7 +3459,17 @@ L_08904FBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08904FF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -3272,7 +3521,17 @@ L_08905058: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -3309,7 +3568,17 @@ L_089050AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089050C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -3318,7 +3587,17 @@ L_089050C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089050D8: { const bool branch_taken = aot_gpr_4 == 0u; aot_gpr_5 = (0u | 0u); @@ -3333,7 +3612,6 @@ L_089050E0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089050FC; } @@ -3348,14 +3626,34 @@ L_089050FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905104: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2228)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890510C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3363,7 +3661,6 @@ L_0890510C: aot_gpr_6 = (0u | 36u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08905140; } @@ -3385,7 +3682,17 @@ L_08905140: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890514C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3395,7 +3702,6 @@ L_0890514C: aot_gpr_16 = (0u | 48u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_0890518C; } @@ -3428,14 +3734,34 @@ L_0890518C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089051A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089051AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3445,7 +3771,6 @@ L_089051AC: goto L_08905244; L_089051C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089051E4; } @@ -3464,7 +3789,6 @@ L_089051D4: goto L_089051DC; L_089051DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089051F4; } @@ -3480,7 +3804,6 @@ L_089051E4: } L_089051EC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08905208; } @@ -3497,7 +3820,6 @@ L_089051F4: } L_08905200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08905218; } @@ -3505,12 +3827,10 @@ L_08905200: } L_08905208: aot_gpr_31 = (0x08905210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 1019u, 0x08ACF8F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08905210u) goto L_08905210; AOT_REGCACHE_SYNC_OUT(); return; L_08905210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08905230; } @@ -3518,12 +3838,10 @@ L_08905210: } L_08905218: aot_gpr_31 = (0x08905220u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08905220u) goto L_08905220; AOT_REGCACHE_SYNC_OUT(); return; L_08905220: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0890522C; } @@ -3547,12 +3865,21 @@ L_08905230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905244: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890525C; } @@ -3586,7 +3913,17 @@ L_0890527C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905288: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); @@ -3604,7 +3941,6 @@ L_08905288: } L_089052B8: aot_gpr_31 = (0x089052C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089052C0u) goto L_089052C0; AOT_REGCACHE_SYNC_OUT(); return; L_089052C0: @@ -3644,7 +3980,6 @@ L_089052F0: } L_089052FC: aot_gpr_31 = (0x08905304u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08905304u) goto L_08905304; AOT_REGCACHE_SYNC_OUT(); return; L_08905304: @@ -3658,7 +3993,6 @@ L_08905304: aot_gpr_4 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08905348; } @@ -3669,7 +4003,6 @@ L_08905330: aot_gpr_5 = (ctx.gpr[20] + aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08905348; } @@ -3681,7 +4014,6 @@ L_08905344: L_08905348: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_089052F0; } @@ -3703,28 +4035,68 @@ L_08905354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905378: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905380: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2240), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905388: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2240))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905390: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3741,7 +4113,6 @@ L_08905390: goto L_08906DE4; L_089053D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089053EC; } @@ -3750,7 +4121,6 @@ L_089053D0: L_089053D8: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089053F4; } @@ -3766,7 +4136,6 @@ L_089053E4: } L_089053EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089055FC; } @@ -3774,7 +4143,6 @@ L_089053EC: } L_089053F4: aot_gpr_31 = (0x089053FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089053FCu) goto L_089053FC; AOT_REGCACHE_SYNC_OUT(); return; L_089053FC: @@ -3789,7 +4157,6 @@ L_08905404: goto L_0890540C; L_0890540C: aot_gpr_31 = (0x08905414u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08905414u) goto L_08905414; AOT_REGCACHE_SYNC_OUT(); return; L_08905414: @@ -3835,7 +4202,6 @@ L_0890544C: } L_08905454: aot_gpr_31 = (0x0890545Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890545Cu) goto L_0890545C; AOT_REGCACHE_SYNC_OUT(); return; L_0890545C: @@ -3851,7 +4217,6 @@ L_08905460: ctx.gpr[21] = (ctx.lo); aot_gpr_6 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089054A4; } @@ -3862,7 +4227,6 @@ L_08905488: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089054A4; } @@ -3870,7 +4234,6 @@ L_08905488: } L_0890549C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089054B0; } @@ -3879,7 +4242,6 @@ L_0890549C: L_089054A4: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0890544C; } @@ -3890,7 +4252,6 @@ L_089054B0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089054DC; } @@ -3898,7 +4259,6 @@ L_089054B0: } L_089054C4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089054DC; } @@ -3912,7 +4272,6 @@ L_089054CC: goto L_089054DC; L_089054DC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089054FC; } @@ -3922,9 +4281,7 @@ L_089054E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089055FC; } @@ -3936,7 +4293,6 @@ L_089054FC: goto L_08905504; L_08905504: aot_gpr_31 = (0x0890550Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890550Cu) goto L_0890550C; AOT_REGCACHE_SYNC_OUT(); return; L_0890550C: @@ -3963,7 +4319,6 @@ L_08905520: L_0890553C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(48)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08905504; } @@ -3994,7 +4349,6 @@ L_0890557C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089055F0; } @@ -4002,7 +4356,6 @@ L_0890557C: } L_08905594: aot_gpr_31 = (0x0890559Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890559Cu) goto L_0890559C; AOT_REGCACHE_SYNC_OUT(); return; L_0890559C: @@ -4059,7 +4412,17 @@ L_089055FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890562C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4092,7 +4455,17 @@ L_08905650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905684: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4117,7 +4490,6 @@ L_089056B0: goto L_0890562C; L_089056BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890572C; } @@ -4173,7 +4545,17 @@ L_0890572C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905744: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4198,7 +4580,6 @@ L_08905770: goto L_0890562C; L_0890577C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089057EC; } @@ -4254,7 +4635,17 @@ L_089057EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905804: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4267,7 +4658,17 @@ L_08905804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4315,7 +4716,6 @@ L_0890587C: AOT_REGCACHE_SYNC_OUT(); return; L_08905890: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08905928; } @@ -4328,7 +4728,6 @@ L_08905898: goto L_0890562C; L_089058A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08905928; } @@ -4386,7 +4785,17 @@ L_08905928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890593C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -4396,7 +4805,17 @@ L_0890593C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905964: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -4408,19 +4827,37 @@ L_08905964: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905990: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890599C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4433,7 +4870,17 @@ L_0890599C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089059BC: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4456,11 +4903,20 @@ L_089059BC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089059E4: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4475,11 +4931,20 @@ L_089059E4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089059FC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4499,7 +4964,17 @@ L_089059FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905A0C: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -4522,14 +4997,34 @@ L_08905A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905A28: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905A30: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4546,11 +5041,20 @@ L_08905A30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905A44: { std::uint32_t aot_run_words[3]{}; aot_mem.aot_direct_load32_block(aot_gpr_5 + static_cast(0), aot_run_words); @@ -4565,14 +5069,34 @@ L_08905A44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905A60: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905A68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4615,7 +5139,17 @@ L_08905AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905AB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4626,7 +5160,17 @@ L_08905AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905AC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -4638,7 +5182,17 @@ L_08905AC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905AE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4649,7 +5203,17 @@ L_08905AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905AFC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4660,7 +5224,17 @@ L_08905AFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905B14: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -4671,14 +5245,34 @@ L_08905B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905B2C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905B34: aot_gpr_4 = (16968u << 16u); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -4690,9 +5284,7 @@ L_08905B34: aot_fpr_12 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08905B7C; } @@ -4720,18 +5312,37 @@ L_08905B7C: goto L_08905B98; L_08905B98: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BA0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BA8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_6 | aot_gpr_5); @@ -4740,21 +5351,51 @@ L_08905BA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BB8: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BC0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(36), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -4764,7 +5405,17 @@ L_08905BC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -4774,7 +5425,17 @@ L_08905BDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905BF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -4784,7 +5445,17 @@ L_08905BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -4794,7 +5465,17 @@ L_08905C04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_5 = (16u << 16u); @@ -4804,7 +5485,17 @@ L_08905C18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 496u); @@ -4813,7 +5504,17 @@ L_08905C2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 512u); @@ -4822,7 +5523,17 @@ L_08905C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C4C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -4836,7 +5547,17 @@ L_08905C4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C70: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -4851,7 +5572,17 @@ L_08905C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905C98: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -4866,7 +5597,17 @@ L_08905C98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905CC0: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -4880,14 +5621,34 @@ L_08905CC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905CE4: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905CEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -4958,14 +5719,34 @@ L_08905CEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905D48: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905D50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[2] = (0u | 0u); @@ -4979,11 +5760,20 @@ L_08905D50: goto L_08905D6C; L_08905D6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905D74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[2] = (0u | 0u); @@ -4997,11 +5787,20 @@ L_08905D74: goto L_08905D90; L_08905D90: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905D98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; @@ -5017,7 +5816,17 @@ L_08905DAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905DB8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_6 = (0u + static_cast(-17)); @@ -5060,7 +5869,17 @@ L_08905DB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905E50: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -5102,11 +5921,20 @@ L_08905E50: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905E94: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -5116,25 +5944,54 @@ L_08905E94: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), ctx.vfpu_scalar_bits_ct<2u>()); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(4), ctx.vfpu_scalar_bits_ct<34u>()); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905EB8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905EC0: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(310), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905EC8: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(306), static_cast(0u)); aot_fpr_12 = std::bit_cast(0u); @@ -5144,21 +6001,51 @@ L_08905EC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905EDC: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(268))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905EE4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(336))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905EEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -5175,7 +6062,17 @@ L_08905F04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905F10: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -5290,28 +6187,68 @@ L_08905F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905F90: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905F98: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FA0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(474))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FA8: aot_gpr_5 = (0u | 0u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(24), static_cast(aot_gpr_5)); @@ -5320,14 +6257,34 @@ L_08905FA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FB8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FC0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); aot_gpr_5 = (~(aot_gpr_5 | 0u)); @@ -5337,7 +6294,17 @@ L_08905FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[2] = (aot_gpr_4 & 512u); @@ -5346,14 +6313,34 @@ L_08905FD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FE4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08905FEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5416,7 +6403,6 @@ L_08906064: L_08906070: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08906098; } @@ -5424,7 +6410,6 @@ L_08906070: } L_0890607C: aot_gpr_31 = (0x08906084u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08906084u) goto L_08906084; AOT_REGCACHE_SYNC_OUT(); return; L_08906084: @@ -5444,7 +6429,6 @@ L_08906098: goto L_089060A4; L_089060A4: aot_gpr_31 = (0x089060ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089060ACu) goto L_089060AC; AOT_REGCACHE_SYNC_OUT(); return; L_089060AC: @@ -5466,7 +6450,6 @@ L_089060BC: L_089060CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1712))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089060E0; } @@ -5474,7 +6457,6 @@ L_089060CC: } L_089060D8: aot_gpr_31 = (0x089060E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 649u, 0x089CF934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089060E0u) goto L_089060E0; AOT_REGCACHE_SYNC_OUT(); return; L_089060E0: @@ -5487,7 +6469,6 @@ L_089060E8: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08906108; } @@ -5503,7 +6484,6 @@ L_08906108: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08906128; } @@ -5523,7 +6503,6 @@ L_08906128: L_08906134: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08906148; } @@ -5556,7 +6535,6 @@ L_08906164: L_08906170: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089061D4; } @@ -5587,7 +6565,6 @@ L_08906198: AOT_REGCACHE_SYNC_OUT(); return; L_089061B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089061D4; } @@ -5661,7 +6638,6 @@ L_08906224: goto L_0890622C; L_0890622C: aot_gpr_31 = (0x08906234u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08906234u) goto L_08906234; AOT_REGCACHE_SYNC_OUT(); return; L_08906234: @@ -5694,7 +6670,6 @@ L_08906250: goto L_0890625C; L_0890625C: aot_gpr_31 = (0x08906264u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08906264u) goto L_08906264; AOT_REGCACHE_SYNC_OUT(); return; L_08906264: @@ -5742,7 +6717,6 @@ L_08906298: goto L_089062A4; L_089062A4: aot_gpr_31 = (0x089062ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089062ACu) goto L_089062AC; AOT_REGCACHE_SYNC_OUT(); return; L_089062AC: @@ -5756,7 +6730,6 @@ L_089062B0: L_089062B8: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089062CC; } @@ -5781,7 +6754,17 @@ L_089062CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089062EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5796,7 +6779,17 @@ L_089062FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5812,12 +6805,21 @@ L_0890631C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906328: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08906338u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 1147u, 0x08ACFFD0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08906338u) goto L_08906338; AOT_REGCACHE_SYNC_OUT(); return; L_08906338: @@ -5827,7 +6829,17 @@ L_08906338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906344: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5872,7 +6884,6 @@ L_0890639C: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(20))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_089063DC; } @@ -5925,7 +6936,6 @@ L_0890640C: AOT_REGCACHE_SYNC_OUT(); return; L_08906414: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08906428; } @@ -5943,7 +6953,6 @@ L_08906428: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08906450; } @@ -5981,7 +6990,17 @@ L_08906470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906484: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5996,7 +7015,6 @@ L_08906484: AOT_REGCACHE_SYNC_OUT(); return; L_089064AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089064EC; } @@ -6005,7 +7023,6 @@ L_089064AC: L_089064B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1364))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089064EC; } @@ -6027,7 +7044,6 @@ L_089064CC: AOT_REGCACHE_SYNC_OUT(); return; L_089064E0: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089064EC; } @@ -6068,14 +7084,34 @@ L_08906510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890652C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906534: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1929)))))); aot_gpr_6 = (aot_gpr_5 << 5u); @@ -6087,14 +7123,34 @@ L_08906534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906550: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906558: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); @@ -6118,7 +7174,6 @@ L_08906588: goto L_08906598; L_08906598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089065B4; } @@ -6135,7 +7190,6 @@ L_089065A0: L_089065A8: aot_gpr_5 = (aot_gpr_5 & 32u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08906618; } @@ -6154,7 +7208,6 @@ L_089065B4: L_089065D0: aot_gpr_4 = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08906610; } @@ -6167,7 +7220,6 @@ L_089065DC: AOT_REGCACHE_SYNC_OUT(); return; L_089065E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08906608; } @@ -6186,7 +7238,6 @@ L_089065EC: } L_08906600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089066DC; } @@ -6224,7 +7275,6 @@ L_08906620: L_0890662C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1784))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089066C8; } @@ -6269,9 +7319,7 @@ L_08906638: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089066C8; } @@ -6285,7 +7333,6 @@ L_08906670: aot_gpr_4 = (ctx.gpr[18] + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089066C8; } @@ -6303,7 +7350,6 @@ L_08906690: AOT_REGCACHE_SYNC_OUT(); return; L_089066AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089066C8; } @@ -6312,7 +7358,6 @@ L_089066AC: L_089066B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089066C8; } @@ -6356,7 +7401,17 @@ L_089066E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1929)))))); @@ -6376,7 +7431,6 @@ L_0890672C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890674C; } @@ -6400,7 +7454,17 @@ L_08906750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890675C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -6446,9 +7510,7 @@ L_089067B0: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089067D8; } @@ -6456,7 +7518,6 @@ L_089067B0: } L_089067C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08906820; } @@ -6472,9 +7533,7 @@ L_089067D0: } L_089067D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089067FC; } @@ -6493,9 +7552,7 @@ L_089067E8: } L_089067FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906830; } @@ -6541,7 +7598,17 @@ L_0890683C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906858: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6563,7 +7630,6 @@ L_08906874: } L_08906880: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089068AC; } @@ -6572,7 +7638,6 @@ L_08906880: L_08906888: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(228))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089068A4; } @@ -6580,12 +7645,10 @@ L_08906888: } L_08906894: aot_gpr_31 = (0x0890689Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890689Cu) goto L_0890689C; AOT_REGCACHE_SYNC_OUT(); return; L_0890689C: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089068B4; } @@ -6618,7 +7681,17 @@ L_089068B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089068C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_gpr_5 + static_cast(48)); @@ -6661,7 +7734,6 @@ L_0890693C: AOT_REGCACHE_SYNC_OUT(); return; L_08906944: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08906988; } @@ -6674,9 +7746,7 @@ L_0890694C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906988; } @@ -6690,7 +7760,6 @@ L_08906970: goto L_089069AC; L_08906980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890698C; } @@ -6714,7 +7783,17 @@ L_0890698C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089069AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6790,7 +7869,6 @@ L_08906A1C: AOT_REGCACHE_SYNC_OUT(); return; L_08906A5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08906AD8; } @@ -6799,7 +7877,6 @@ L_08906A5C: L_08906A64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08906AD8; } @@ -6834,7 +7911,6 @@ L_08906A78: AOT_REGCACHE_SYNC_OUT(); return; L_08906AB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08906AD8; } @@ -6844,7 +7920,6 @@ L_08906AC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08906AD8; } @@ -6874,7 +7949,17 @@ L_08906ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906AF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(124), aot_gpr_16); @@ -6968,7 +8053,6 @@ L_08906B9C: goto L_08906BA4; L_08906BA4: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08906C00; } @@ -7027,9 +8111,7 @@ L_08906BAC: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906C00; } @@ -7047,7 +8129,6 @@ L_08906BF0: } L_08906C00: { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08906C5C; } @@ -7106,9 +8187,7 @@ L_08906C08: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906C5C; } @@ -7127,7 +8206,6 @@ L_08906C4C: L_08906C5C: ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08906C8C; } @@ -7146,7 +8224,6 @@ L_08906C68: goto L_08906C8C; L_08906C8C: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08906B9C; } @@ -7180,7 +8257,17 @@ L_08906CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7191,7 +8278,6 @@ L_08906CD8: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); if (branch_taken) { @@ -7201,9 +8287,7 @@ L_08906CD8: } L_08906D08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906D20; } @@ -7219,7 +8303,6 @@ L_08906D18: } L_08906D20: aot_gpr_31 = (0x08906D28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08906D28u) goto L_08906D28; AOT_REGCACHE_SYNC_OUT(); return; L_08906D28: @@ -7232,7 +8315,6 @@ L_08906D2C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fpr[20] = ctx.fpr[20] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16329u << 16u); if (branch_taken) { @@ -7248,9 +8330,7 @@ L_08906D50: L_08906D5C: ctx.fpr[20] = ctx.fpr[20] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906D5C; } @@ -7267,7 +8347,6 @@ L_08906D74: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08906DA4; } @@ -7277,7 +8356,6 @@ L_08906D94: aot_gpr_4 = (aot_gpr_4 + static_cast(-4)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08906D94; } @@ -7296,14 +8374,34 @@ L_08906DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906DBC: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2256))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906DC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2256))); @@ -7318,12 +8416,21 @@ L_08906DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906DE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_5 = (static_cast(aot_gpr_5) < 41 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08906E24; } @@ -7341,7 +8448,6 @@ L_08906DF4: } L_08906E04: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08906E24; } @@ -7351,9 +8457,7 @@ L_08906E0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08906E2C; } @@ -7372,16 +8476,24 @@ L_08906E2C: goto L_08906E30; L_08906E30: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906E38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_4 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08906E50; } @@ -7400,11 +8512,20 @@ L_08906E50: goto L_08906E54; L_08906E54: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906E5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (static_cast(aot_gpr_4) < 24 ? 1u : 0u); @@ -7425,7 +8546,6 @@ L_08906E6C: } L_08906E74: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08906ECC; } @@ -7441,7 +8561,6 @@ L_08906E7C: } L_08906E84: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08906E7C; } @@ -7477,7 +8596,6 @@ L_08906EA8: } L_08906EB4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08906E7C; } @@ -7485,7 +8603,6 @@ L_08906EB4: } L_08906EBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08906ECC; } @@ -7493,7 +8610,6 @@ L_08906EBC: } L_08906EC4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08906E7C; } @@ -7504,11 +8620,20 @@ L_08906ECC: goto L_08906ED0; L_08906ED0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906ED8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_5 = (static_cast(aot_gpr_4) < 41 ? 1u : 0u); @@ -7569,7 +8694,6 @@ L_08906F10: } L_08906F18: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08906F28; } @@ -7588,11 +8712,20 @@ L_08906F28: goto L_08906F2C; L_08906F2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906F34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_5 = (0u | 57u); @@ -7637,7 +8770,6 @@ L_08906F5C: } L_08906F64: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08906F74; } @@ -7656,11 +8788,20 @@ L_08906F74: goto L_08906F78; L_08906F78: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906F80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 43u); @@ -7674,7 +8815,6 @@ L_08906F80: L_08906F90: aot_gpr_6 = (0u | 44u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08906FA0; } @@ -7689,7 +8829,17 @@ L_08906FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08906FA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_5 = (0u | 1u); @@ -7710,7 +8860,6 @@ L_08906FB8: } L_08906FC0: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890700C; } @@ -7771,7 +8920,6 @@ L_08906FFC: goto L_08907004; L_08907004: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907014; } @@ -7790,15 +8938,23 @@ L_08907014: goto L_08907018; L_08907018: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907020: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08907054; } @@ -7808,7 +8964,6 @@ L_0890702C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(852))); ctx.gpr[8] = (0u | 6u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08907054; } @@ -7824,7 +8979,6 @@ L_0890703C: goto L_0890704C; L_0890704C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907068; } @@ -7832,7 +8986,6 @@ L_0890704C: } L_08907054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907114; } @@ -7855,7 +9008,6 @@ L_08907068: aot_gpr_4 = (aot_gpr_4 | ctx.gpr[7]); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089070C0; } @@ -7863,7 +9015,6 @@ L_08907068: } L_08907088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907114; } @@ -7912,7 +9063,6 @@ L_089070DC: } L_089070EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907114; } @@ -7934,39 +9084,88 @@ L_089070F4: } L_08907114: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890711C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907124: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890712C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2260), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907134: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2256), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890713C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(468))); @@ -7999,7 +9198,6 @@ L_08907160: L_08907194: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089072B8; } @@ -8009,7 +9207,6 @@ L_089071A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(564))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089072B8; } @@ -8018,7 +9215,6 @@ L_089071A0: L_089071B0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089072B8; } @@ -8037,7 +9233,6 @@ L_089071BC: L_089071CC: aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08907214; } @@ -8046,7 +9241,6 @@ L_089071CC: L_089071D8: aot_gpr_4 = (static_cast(aot_gpr_5) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907210; } @@ -8071,7 +9265,6 @@ L_089071EC: } L_089071F8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08907214; } @@ -8101,7 +9294,6 @@ L_08907214: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(564))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089072B8; } @@ -8111,7 +9303,6 @@ L_08907228: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089072B8; } @@ -8194,9 +9385,7 @@ L_08907250: aot_gpr_4 = (16000u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089072B8; } @@ -8210,7 +9399,6 @@ L_089072A4: AOT_REGCACHE_SYNC_OUT(); return; L_089072B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089072F8; } @@ -8220,7 +9408,6 @@ L_089072B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089072E4; } @@ -8233,7 +9420,6 @@ L_089072C8: AOT_REGCACHE_SYNC_OUT(); return; L_089072D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089072E4; } @@ -8264,7 +9450,17 @@ L_089072F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890730C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(0u); @@ -8277,7 +9473,6 @@ L_0890730C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08907344; } @@ -8285,7 +9480,6 @@ L_0890730C: } L_0890733C: aot_gpr_31 = (0x08907344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 78u, 0x08A08AE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08907344u) goto L_08907344; AOT_REGCACHE_SYNC_OUT(); return; L_08907344: @@ -8295,7 +9489,17 @@ L_08907344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907350: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); ctx.gpr[2] = (aot_gpr_4 & 256u); @@ -8304,7 +9508,17 @@ L_08907350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907360: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8351,7 +9565,6 @@ L_089073B0: goto L_089073B8; L_089073B8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089073C4; } @@ -8395,7 +9608,6 @@ L_089073F0: } L_089073F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890743C; } @@ -8430,7 +9642,6 @@ L_0890741C: AOT_REGCACHE_SYNC_OUT(); return; L_08907430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890743C; } @@ -8465,21 +9676,51 @@ L_08907468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890747C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2260))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907484: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890748C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -8499,7 +9740,6 @@ L_089074A8: AOT_REGCACHE_SYNC_OUT(); return; L_089074B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089074D8; } @@ -8519,7 +9759,6 @@ L_089074B8: } L_089074D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089074F0; } @@ -8527,7 +9766,6 @@ L_089074D0: } L_089074D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8535,7 +9773,6 @@ L_089074D8: } L_089074E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8543,7 +9780,6 @@ L_089074E0: } L_089074E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890750C; } @@ -8554,7 +9790,6 @@ L_089074F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08907514; } @@ -8562,7 +9797,6 @@ L_089074F0: } L_08907504: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8570,7 +9804,6 @@ L_08907504: } L_0890750C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8580,7 +9813,6 @@ L_08907514: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08907868; } @@ -8588,7 +9820,6 @@ L_08907514: } L_08907524: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8597,7 +9828,6 @@ L_08907524: L_0890752C: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1784))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8607,7 +9837,6 @@ L_08907538: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08907868; } @@ -8620,7 +9849,6 @@ L_08907548: AOT_REGCACHE_SYNC_OUT(); return; L_08907550: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08907868; } @@ -8629,7 +9857,6 @@ L_08907550: L_08907558: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08907868; } @@ -8649,7 +9876,6 @@ L_08907564: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8704,7 +9930,6 @@ L_0890759C: aot_gpr_4 = (ctx.gpr[17] + static_cast(48)); aot_gpr_5 = (16288u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -8787,7 +10012,6 @@ L_089076B8: aot_fpr_12 = ctx.fpr[17] + ctx.fpr[18]; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 | 0u); if (branch_taken) { @@ -8802,7 +10026,6 @@ L_08907774: goto L_089068C8; L_08907780: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08907868; } @@ -8830,8 +10053,6 @@ L_08907788: aot_gpr_6 = (aot_gpr_6 & 16u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2260), std::bit_cast(aot_fpr_12)); ctx.gpr[7] = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = ctx.gpr[7]; const std::uint32_t divisor = aot_gpr_4; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); @@ -8854,7 +10075,6 @@ L_089077FC: AOT_REGCACHE_SYNC_OUT(); return; L_08907814: aot_gpr_31 = (0x0890781Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890781Cu) goto L_0890781C; AOT_REGCACHE_SYNC_OUT(); return; L_0890781C: @@ -8894,7 +10114,17 @@ L_08907868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890787C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8905,7 +10135,6 @@ L_0890787C: AOT_REGCACHE_SYNC_OUT(); return; L_0890789C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089078BC; } @@ -8920,7 +10149,6 @@ L_089078AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08907918; } @@ -8933,7 +10161,6 @@ L_089078BC: AOT_REGCACHE_SYNC_OUT(); return; L_089078C4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089078F4; } @@ -8956,7 +10183,6 @@ L_089078DC: AOT_REGCACHE_SYNC_OUT(); return; L_089078E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890793C; } @@ -8964,7 +10190,6 @@ L_089078E4: } L_089078EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089079B0; } @@ -8988,7 +10213,6 @@ L_08907904: AOT_REGCACHE_SYNC_OUT(); return; L_08907910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089079B0; } @@ -9012,7 +10236,6 @@ L_08907928: AOT_REGCACHE_SYNC_OUT(); return; L_08907934: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089079B0; } @@ -9025,7 +10248,6 @@ L_0890793C: AOT_REGCACHE_SYNC_OUT(); return; L_08907944: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089079B0; } @@ -9091,7 +10313,17 @@ L_089079B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089079CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1900))); @@ -9131,7 +10363,6 @@ L_08907A04: AOT_REGCACHE_SYNC_OUT(); return; L_08907A0C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08907A2C; } @@ -9140,7 +10371,6 @@ L_08907A0C: L_08907A14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(692))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08907A2C; } @@ -9177,7 +10407,17 @@ L_08907A44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907A54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9188,7 +10428,6 @@ L_08907A54: AOT_REGCACHE_SYNC_OUT(); return; L_08907A68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08907A98; } @@ -9206,7 +10445,6 @@ L_08907A78: AOT_REGCACHE_SYNC_OUT(); return; L_08907A80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08907A98; } @@ -9222,7 +10460,6 @@ L_08907A88: L_08907A98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(692))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907ABC; } @@ -9230,12 +10467,10 @@ L_08907A98: } L_08907AA4: aot_gpr_31 = (0x08907AACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 1019u, 0x08ACF8F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08907AACu) goto L_08907AAC; AOT_REGCACHE_SYNC_OUT(); return; L_08907AAC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08907ABC; } @@ -9252,7 +10487,6 @@ L_08907ABC: AOT_REGCACHE_SYNC_OUT(); return; L_08907AC4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08907ADC; } @@ -9261,7 +10495,6 @@ L_08907AC4: L_08907ACC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(692))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08907ADC; } @@ -9278,7 +10511,17 @@ L_08907ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907AEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -9288,7 +10531,6 @@ L_08907AEC: goto L_08906DE4; L_08907B00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08907B10; } @@ -9296,7 +10538,6 @@ L_08907B00: } L_08907B08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907B44; } @@ -9343,14 +10584,34 @@ L_08907B44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907B54: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -9485,7 +10746,6 @@ L_08907C5C: } L_08907C64: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08907CA4; } @@ -9493,7 +10753,6 @@ L_08907C64: } L_08907C6C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08907C98; } @@ -9506,7 +10765,6 @@ L_08907C74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08907CAC; } @@ -9514,7 +10772,6 @@ L_08907C74: } L_08907C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907D94; } @@ -9531,7 +10788,6 @@ L_08907C98: } L_08907CA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907D94; } @@ -9549,7 +10805,6 @@ L_08907CB4: goto L_08907CBC; L_08907CBC: aot_gpr_31 = (0x08907CC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08907CC4u) goto L_08907CC4; AOT_REGCACHE_SYNC_OUT(); return; L_08907CC4: @@ -9566,7 +10821,6 @@ L_08907CCC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907D94; } @@ -9582,7 +10836,6 @@ L_08907CF4: } L_08907CFC: aot_gpr_31 = (0x08907D04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08907D04u) goto L_08907D04; AOT_REGCACHE_SYNC_OUT(); return; L_08907D04: @@ -9604,7 +10857,6 @@ L_08907D14: L_08907D24: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08907D5C; } @@ -9619,7 +10871,6 @@ L_08907D30: AOT_REGCACHE_SYNC_OUT(); return; L_08907D40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08907D5C; } @@ -9630,7 +10881,6 @@ L_08907D48: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08907D64; } @@ -9654,7 +10904,6 @@ L_08907D64: AOT_REGCACHE_SYNC_OUT(); return; L_08907D78: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08907D88; } @@ -9691,7 +10940,17 @@ L_08907D94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9722,7 +10981,6 @@ L_08907DE0: } L_08907DEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08907DFC; } @@ -9745,7 +11003,17 @@ L_08907DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907E10: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -9755,7 +11023,17 @@ L_08907E10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907E38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -9782,7 +11060,6 @@ L_08907E60: } L_08907E70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907E90; } @@ -9790,7 +11067,6 @@ L_08907E70: } L_08907E78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08907F80; } @@ -9823,7 +11099,6 @@ L_08907EA8: AOT_REGCACHE_SYNC_OUT(); return; L_08907EB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08907ED0; } @@ -9844,7 +11119,6 @@ L_08907EC8: L_08907ED0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08907F0C; } @@ -9904,7 +11178,6 @@ L_08907F38: } L_08907F40: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08907F80; } @@ -9953,7 +11226,17 @@ L_08907F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08907F9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9971,7 +11254,6 @@ L_08907F9C: L_08907FC0: aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0065_entry, 65u, 1u, 0x08908000u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9979,7 +11261,6 @@ L_08907FC0: } L_08907FCC: aot_gpr_31 = (0x08907FD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 180u, 0x08945288u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08907FD4u) goto L_08907FD4; AOT_REGCACHE_SYNC_OUT(); return; L_08907FD4: @@ -10001,7 +11282,6 @@ L_08907FE8: goto L_08907FF8; L_08907FF8: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0065_entry, 65u, 6u, 0x08908028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0065.cpp b/profiles/vcs/generated/generated_unit_0065.cpp index 3ba8ebb..b315fd9 100644 --- a/profiles/vcs/generated/generated_unit_0065.cpp +++ b/profiles/vcs/generated/generated_unit_0065.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0065[4095] = { - 1, 0, 2, 0, 3, 0, 0, 4, 0, 5, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 0, 11, 0, 12, 0, 13, 14, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 19, 0, 20, 0, 0, 21, 0, 22, 0, - 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, - 29, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 36, - 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 55, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 61, 62, - 0, 0, 0, 63, 0, 0, 64, 65, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 0, 76, 0, 0, - 77, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, - 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 87, 0, 0, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 93, 0, 0, 94, 95, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 99, 0, 100, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, - 0, 104, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, - 111, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 115, 116, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, - 118, 0, 119, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 122, 0, 123, 0, 124, 0, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 0, 130, - 0, 0, 0, 0, 0, 131, 0, 0, 132, 133, 0, 134, 0, 135, 0, 0, 0, 0, 136, 0, 137, 0, 138, 0, 139, 0, 0, 0, 140, 0, 141, 0, - 0, 142, 143, 0, 0, 144, 145, 0, 0, 0, 0, 146, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 0, 0, 0, 0, 152, 0, 0, 0, 153, 0, - 154, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 158, 0, 159, 0, 0, 0, 160, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 166, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, 170, 0, 0, - 171, 0, 172, 173, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 178, - 0, 179, 180, 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 0, 0, 185, - 0, 0, 0, 0, 186, 0, 0, 187, 0, 188, 0, 0, 189, 0, 190, 0, 191, 0, 192, 0, 0, 193, 0, 194, 0, 0, 195, 0, 196, 0, 0, 197, - 0, 198, 0, 199, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 203, 0, 204, 0, 0, 0, 205, 0, 206, 0, 0, 0, 0, 0, 207, 0, - 208, 0, 209, 0, 0, 0, 210, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 221, 0, 222, 0, - 0, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, 227, 0, 0, 0, 228, 0, 0, 229, 0, 0, 230, 0, 231, 0, 232, 233, 0, 234, 0, 0, 0, - 0, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 239, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, - 0, 241, 0, 0, 242, 0, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 248, 0, 0, 249, 0, 250, 0, 251, 252, 0, 253, 0, 254, 0, - 0, 255, 0, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 258, 259, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, - 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, - 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 266, 0, 267, 268, 0, 0, 269, 270, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 277, - 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 280, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 283, 0, 0, 284, 0, 285, 0, 286, 0, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 0, 292, 0, 293, 0, 0, 294, 0, 0, 295, 0, - 0, 296, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, - 301, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, 304, 0, 305, 0, 306, 307, 0, 0, 0, 308, 309, 0, 310, 0, 0, 311, 312, 0, - 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 315, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, - 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 0, 324, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 0, 327, 0, 328, 0, - 329, 0, 0, 0, 0, 330, 0, 331, 0, 0, 0, 332, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, - 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 342, 343, - 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 349, 0, - 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, - 0, 355, 0, 356, 0, 357, 0, 0, 358, 0, 359, 0, 360, 0, 0, 0, 361, 0, 0, 0, 362, 0, 363, 0, 364, 0, 365, 0, 0, 0, 0, 0, - 0, 366, 0, 367, 0, 0, 0, 368, 0, 369, 0, 370, 0, 0, 371, 0, 372, 0, 373, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, - 0, 376, 0, 377, 0, 378, 0, 0, 0, 0, 0, 379, 0, 380, 0, 381, 0, 382, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, - 385, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, - 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, - 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, 0, - 410, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 414, 0, 415, 0, 0, 0, 416, 0, 0, 0, 417, - 0, 418, 0, 419, 0, 0, 0, 420, 0, 0, 0, 421, 0, 422, 0, 423, 0, 424, 425, 0, 426, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, - 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 435, 0, 436, 0, 437, - 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 449, 0, 0, 0, 0, 0, 0, 0, 450, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, - 455, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 0, 459, 0, 460, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 0, - 464, 0, 465, 0, 466, 0, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 472, 0, 473, 0, 474, 0, 475, 0, - 476, 0, 477, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, - 486, 0, 487, 0, 488, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 492, 0, 493, 0, 494, 0, 0, 495, 0, 496, 0, 497, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, - 500, 0, 0, 0, 501, 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 505, 0, 506, 507, 0, 508, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, 0, - 512, 0, 0, 513, 0, 514, 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 519, 0, 520, 0, 0, 0, 521, 0, - 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 526, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 532, 0, - 0, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 535, 0, 536, 0, 537, 0, 0, 538, 0, 539, 540, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, - 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 548, 0, 0, 0, - 0, 0, 549, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, 554, 0, 555, 0, 556, 0, 557, 0, - 0, 0, 558, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 563, 0, 564, 0, - 0, 565, 0, 566, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 0, 0, 572, 573, 0, - 574, 0, 575, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 578, 0, 0, 579, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, - 0, 0, 0, 583, 0, 584, 0, 585, 0, 0, 586, 0, 0, 587, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 590, 0, 591, 0, 0, 0, 0, - 592, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 595, 0, 596, 0, 0, 597, 0, 0, 0, 0, 0, - 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, - 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, 0, 0, 0, 609, 0, - 0, 0, 610, 0, 0, 611, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 615, 0, - 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 620, 0, - 621, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 0, 628, - 629, 0, 630, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 0, 0, - 637, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 640, 0, 641, 0, 0, 0, 642, 0, 0, 0, 643, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, - 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, - 0, 0, 0, 0, 654, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 658, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 0, 0, - 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 667, 0, 668, 0, 669, 0, 670, 0, 0, 0, 0, 671, 0, 0, - 0, 0, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 0, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, 682, 0, 0, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, - 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 691, 0, 0, 0, 692, 0, 693, 0, 694, 0, 695, 0, 0, 0, 0, 0, 696, 0, 697, 0, 0, 0, 0, 0, 698, 0, 0, 0, 699, - 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, 705, 0, 0, 706, 0, 707, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 709, - 0, 0, 710, 0, 0, 0, 0, 711, 0, 712, 0, 0, 713, 0, 0, 714, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 716, - 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 722, 0, 723, - 0, 724, 0, 725, 0, 726, 0, 727, 0, 728, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 0, 732, 0, - 0, 733, 0, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 740, 0, 741, 0, 742, 0, 743, 0, 744, 0, 0, 745, 0, 0, 0, 0, 0, 0, 746, - 747, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 752, 0, 753, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 757, 0, 758, 0, - 759, 0, 760, 0, 761, 0, 0, 0, 762, 0, 763, 0, 764, 0, 765, 0, 766, 0, 767, 0, 768, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, - 0, 0, 0, 770, 0, 0, 0, 771, 0, 772, 0, 0, 0, 0, 773, 0, 0, 774, 0, 0, 775, 0, 0, 776, 0, 0, 0, 0, 0, 0, 777, 0, - 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 781, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 783, 0, 784, 0, 785, 0, 0, 0, 786, 0, 0, 0, 0, 0, 787, 0, 788, 0, - 789, 0, 790, 0, 791, 0, 792, 0, 0, 793, 0, 0, 794, 0, 0, 795, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 800, 0, 0, 0, 0, 801, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 803, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, - 807, 0, 808, 0, 0, 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 0, 815, 0, 0, 816, 0, 0, 0, 0, 0, 0, 817, 0, 0, - 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 820, 0, 0, 821, 0, 822, 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, - 0, 0, 824, 0, 0, 0, 0, 825, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 829, 0, 830, 0, 0, 0, 0, 831, 0, 0, 832, 0, 0, 0, 0, 833, 0, 834, 0, 835, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, - 0, 0, 837, 0, 838, 0, 0, 839, 0, 0, 0, 0, 0, 840, 0, 841, 0, 0, 842, 0, 843, 0, 0, 0, 844, 0, 845, 0, 846, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 848, 0, 0, 849, 0, 850, 0, 0, 851, 0, 852, 0, 853, 0, - 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 856, 0, 857, 0, 858, 0, 859, 0, 860, 0, 0, 0, 0, 861, 0, 0, 0, - 0, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 863, 0, 0, 0, 864, 0, 0, 865, 0, 866, 0, 867, 0, 0, 868, 0, 0, 869, 0, 870, 0, - 0, 0, 0, 0, 0, 871, 0, 872, 0, 0, 873, 0, 0, 0, 874, 0, 875, 0, 876, 0, 0, 877, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, - 0, 879, 0, 0, 880, 0, 0, 0, 0, 0, 881, 0, 882, 0, 883, 0, 0, 0, 0, 884, 0, 0, 0, 0, 885, 0, 886, 0, 887, 0, 888, 0, - 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 891, 0, 892, 0, 893, 0, 0, 894, 0, 895, 896, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, 898, 0, 0, 0, 0, 0, 0, - 899, 0, 0, 0, 0, 0, 900, 0, 901, 0, 0, 0, 902, 0, 0, 903, 0, 0, 904, 0, 0, 905, 0, 0, 0, 0, 0, 0, 906, 0, 0, 907, - 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 909, 0, 0, 0, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 911, 0, 0, 0, 0, 912, 0, 0, 0, 0, 0, 0, 0, 913, 0, 914, 0, 915, 0, 0, 916, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 917, 0, 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 920, 0, 921, 0, 922, 0, 0, 0, 0, 0, 0, - 923, 0, 0, 924, 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 926, 0, 0, 927, 0, 0, 0, 928, 0, 929, 0, 0, 0, 0, 0, 0, 930, - 0, 0, 0, 0, 931, 0, 932, 0, 0, 933, 934, 0, 935, 0, 936, 0, 0, 937, 0, 938, 0, 0, 939, 0, 0, 0, 0, 940, 0, 0, 0, 0, - 0, 0, 941, 0, 942, 0, 0, 0, 943, 0, 0, 0, 0, 944, 0, 0, 0, 0, 945, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 947, 0, 948, - 0, 949, 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, 951, 0, 0, 952, 0, 0, 953, 0, 954, 0, 955, 0, 0, 0, 956, 0, 0, 957, 0, 958, - 0, 959, 0, 0, 0, 0, 0, 0, 960, 0, 0, 0, 0, 0, 961, 0, 0, 962, 0, 0, 963, 0, 964, 0, 965, 0, 0, 0, 966, 0, 0, 967, - 0, 0, 968, 0, 969, 0, 0, 0, 0, 0, 970, 0, 0, 0, 971, 0, 0, 972, 0, 0, 0, 0, 0, 973, 0, 974, 0, 0, 975, 0, 0, 976, - 0, 0, 0, 977, 0, 0, 978, 0, 0, 0, 0, 0, 979, 0, 980, 0, 0, 981, 0, 0, 982, 0, 983, 0, 984, 0, 0, 0, 0, 0, 0, 985, - 0, 986, 0, 0, 0, 987, 0, 988, 0, 0, 0, 989, 0, 990, 0, 0, 0, 991, 0, 0, 0, 992, 0, 0, 0, 993, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 994, 0, 0, 0, 0, 0, 0, 0, 995, - 0, 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 997, 0, 0, 0, 998, 0, 0, 0, 0, 999, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 1001, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0065[64] = { + 0x5294020106A55695ull, 0x9400908908240405ull, 0x8804440615551454ull, 0x044020C8C0A10500ull, + 0x4820808323028414ull, 0x0522A808CACA5408ull, 0x0086490120141092ull, 0x51542B209552A425ull, + 0x202A292544155866ull, 0x9080410D2444A100ull, 0x94A5529084800846ull, 0x051041454145412Aull, + 0x16A48A9454112010ull, 0x56A54A9201340104ull, 0x4010000141030212ull, 0xA042810002033440ull, + 0x494AA95200A01810ull, 0x658D428104002052ull, 0x508412A811021482ull, 0xC0400024554208A1ull, + 0x2804012040442102ull, 0x01254A8A0551152Aull, 0x555010411022A82Aull, 0x2482042200022808ull, + 0x88AA010102450002ull, 0xAA1140111416A88Aull, 0x80AA114002228001ull, 0x245450050108A000ull, + 0x112A821555150515ull, 0x200154A800008855ull, 0x408082D000001511ull, 0xA210000245440269ull, + 0x0134A91054114000ull, 0x552801141100A40Aull, 0x6140809A54020824ull, 0x0A2224A810892825ull, + 0x0809100204A10081ull, 0x440080A442A44001ull, 0x8902422150004202ull, 0x42222A0515500405ull, + 0x0AAA811020008555ull, 0x01110AA821550222ull, 0x020828021090A800ull, 0x80414AAA88282A88ull, + 0xA880208280409284ull, 0x09020812490082AAull, 0x00440821812AA400ull, 0x0415551551004105ull, + 0x8200040840924288ull, 0x0020925550454200ull, 0x4010400081108405ull, 0x2029080820495545ull, + 0x102A121400840884ull, 0x54A500001514A094ull, 0x5254882010AA9004ull, 0x55085412012544A0ull, + 0x02400000D2A80008ull, 0x0008048090249141ull, 0x02A0420400950108ull, 0x084A565081448089ull, + 0xA4549202A0442114ull, 0x9282441491524102ull, 0x022228A281525048ull, 0x4090880280800000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0065[64] = { + 1u, 23u, 37u, 56u, 69u, 84u, 104u, 118u, 142u, 164u, 179u, 198u, 216u, 235u, 255u, 265u, + 278u, 296u, 313u, 329u, 344u, 355u, 376u, 394u, 405u, 418u, 438u, 451u, 464u, 486u, 500u, 512u, + 527u, 542u, 558u, 574u, 592u, 603u, 616u, 629u, 646u, 663u, 680u, 691u, 710u, 724u, 739u, 752u, + 770u, 782u, 797u, 807u, 824u, 837u, 854u, 871u, 889u, 899u, 911u, 923u, 941u, 959u, 977u, 994u, }; void recomp_unit_0065_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0065_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08908000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0065[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0065[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0065[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08908000; @@ -1219,7 +1126,6 @@ L_08908038: } L_08908040: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08908068; } @@ -1228,7 +1134,6 @@ L_08908040: L_08908048: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908068; } @@ -1260,7 +1165,17 @@ L_08908068: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908080: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1285,7 +1200,6 @@ L_089080A4: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089080DC; } @@ -1310,7 +1224,6 @@ L_089080DC: L_089080E4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08908108; } @@ -1323,7 +1236,6 @@ L_089080F0: AOT_REGCACHE_SYNC_OUT(); return; L_089080F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08908108; } @@ -1341,7 +1253,6 @@ L_08908108: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908154; } @@ -1377,7 +1288,17 @@ L_08908154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890816C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1398,7 +1319,17 @@ L_0890818C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890819C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1680), aot_gpr_5); @@ -1413,7 +1344,17 @@ L_089081B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089081BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -1452,7 +1393,6 @@ L_089081FC: } L_08908208: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908228; } @@ -1460,7 +1400,6 @@ L_08908208: } L_08908210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908288; } @@ -1475,7 +1414,6 @@ L_08908218: AOT_REGCACHE_SYNC_OUT(); return; L_08908228: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08908240; } @@ -1490,7 +1428,6 @@ L_08908230: AOT_REGCACHE_SYNC_OUT(); return; L_08908240: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08908258; } @@ -1503,7 +1440,6 @@ L_08908248: AOT_REGCACHE_SYNC_OUT(); return; L_08908250: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08908288; } @@ -1511,7 +1447,6 @@ L_08908250: } L_08908258: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08908270; } @@ -1524,7 +1459,6 @@ L_08908260: AOT_REGCACHE_SYNC_OUT(); return; L_08908268: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08908288; } @@ -1556,7 +1490,17 @@ L_08908288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089082A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1572,7 +1516,17 @@ L_089082B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089082C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1623,7 +1577,6 @@ L_08908328: aot_gpr_16 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_0890835C; } @@ -1664,7 +1617,6 @@ L_0890837C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890839C; } @@ -1673,7 +1625,6 @@ L_0890837C: L_0890838C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0890839C; } @@ -1695,7 +1646,17 @@ L_0890839C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089083B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1711,7 +1672,6 @@ L_089083D8: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08908484; } @@ -1745,7 +1705,6 @@ L_08908410: aot_gpr_16 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08908444; } @@ -1786,7 +1745,6 @@ L_08908464: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908484; } @@ -1795,7 +1753,6 @@ L_08908464: L_08908474: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08908484; } @@ -1817,7 +1774,17 @@ L_08908484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890849C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1844,7 +1811,6 @@ L_089084D4: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089084BC; } @@ -1867,7 +1833,17 @@ L_089084F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890850C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1888,7 +1864,6 @@ L_08908528: } L_08908530: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890857C; } @@ -1897,7 +1872,6 @@ L_08908530: L_08908538: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1552))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0890857C; } @@ -1911,7 +1885,6 @@ L_08908544: L_0890854C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890855C; } @@ -1922,7 +1895,6 @@ L_08908558: goto L_0890855C; L_0890855C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890857C; } @@ -1930,7 +1902,6 @@ L_0890855C: } L_08908564: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890857C; } @@ -1939,7 +1910,6 @@ L_08908564: L_0890856C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1552))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0890857C; } @@ -1952,7 +1922,6 @@ L_0890857C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1676))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089085AC; } @@ -1976,12 +1945,10 @@ L_089085AC: goto L_089085B4; L_089085B4: aot_gpr_31 = (0x089085BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089085BCu) goto L_089085BC; AOT_REGCACHE_SYNC_OUT(); return; L_089085BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089085D4; } @@ -2002,7 +1969,6 @@ L_089085D4: goto L_0890816C; L_089085E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890861C; } @@ -2041,7 +2007,17 @@ L_0890861C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908630: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2072,7 +2048,6 @@ L_08908650: L_08908674: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_089086AC; } @@ -2098,7 +2073,6 @@ L_089086A0: L_089086AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1676))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089086C8; } @@ -2124,7 +2098,17 @@ L_089086C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089086DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -2135,7 +2119,6 @@ L_089086DC: AOT_REGCACHE_SYNC_OUT(); return; L_08908700: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089088B4; } @@ -2144,7 +2127,6 @@ L_08908700: L_08908708: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089088B4; } @@ -2172,7 +2154,6 @@ L_08908728: } L_08908734: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08908768; } @@ -2197,7 +2178,6 @@ L_08908744: } L_08908750: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08908770; } @@ -2230,7 +2210,6 @@ L_08908768: L_08908770: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_089087B4; } @@ -2242,7 +2221,6 @@ L_0890877C: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089087A4; } @@ -2335,7 +2313,6 @@ L_08908818: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089087C8; } @@ -2354,7 +2331,6 @@ L_08908830: } L_08908838: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908868; } @@ -2370,7 +2346,6 @@ L_08908840: } L_08908848: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908868; } @@ -2396,7 +2371,6 @@ L_08908868: } L_08908878: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908888; } @@ -2426,7 +2400,6 @@ L_089088A0: goto L_08908D60; L_089088AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089088D4; } @@ -2444,7 +2417,6 @@ L_089088B4: } L_089088C4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089088D4; } @@ -2470,7 +2442,17 @@ L_089088D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089088F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17]}; @@ -2499,7 +2481,6 @@ L_08908934: L_0890893C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908974; } @@ -2509,7 +2490,6 @@ L_08908948: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08908968; } @@ -2519,7 +2499,6 @@ L_08908958: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(50)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08908974; } @@ -2540,7 +2519,6 @@ L_08908974: goto L_08908980; L_08908980: aot_gpr_31 = (0x08908988u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08908988u) goto L_08908988; AOT_REGCACHE_SYNC_OUT(); return; L_08908988: @@ -2567,7 +2545,17 @@ L_089089A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089089B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -2596,7 +2584,6 @@ L_089089F0: goto L_089089FC; L_089089FC: aot_gpr_31 = (0x08908A04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08908A04u) goto L_08908A04; AOT_REGCACHE_SYNC_OUT(); return; L_08908A04: @@ -2621,7 +2608,17 @@ L_08908A18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908A2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -2679,7 +2676,6 @@ L_08908A9C: L_08908AA4: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908BA0; } @@ -2687,7 +2683,6 @@ L_08908AA4: } L_08908AB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908B60; } @@ -2695,7 +2690,6 @@ L_08908AB0: } L_08908AB8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908BA0; } @@ -2703,7 +2697,6 @@ L_08908AB8: } L_08908AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908B60; } @@ -2712,7 +2705,6 @@ L_08908AC0: L_08908AC8: aot_gpr_4 = (static_cast(aot_gpr_4) < 28 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908BA0; } @@ -2720,7 +2712,6 @@ L_08908AC8: } L_08908AD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908B98; } @@ -2737,7 +2728,6 @@ L_08908ADC: } L_08908AE8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08908B04; } @@ -2746,7 +2736,6 @@ L_08908AE8: L_08908AF0: aot_gpr_4 = (static_cast(aot_gpr_4) < 44 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908BA0; } @@ -2754,7 +2743,6 @@ L_08908AF0: } L_08908AFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908B60; } @@ -2762,7 +2750,6 @@ L_08908AFC: } L_08908B04: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08908B98; } @@ -2770,7 +2757,6 @@ L_08908B04: } L_08908B0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908BA0; } @@ -2779,7 +2765,6 @@ L_08908B0C: L_08908B14: aot_gpr_4 = (static_cast(aot_gpr_4) < 261 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908BA0; } @@ -2791,7 +2776,6 @@ L_08908B20: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908B58; } @@ -2804,7 +2788,6 @@ L_08908B38: AOT_REGCACHE_SYNC_OUT(); return; L_08908B40: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08908B58; } @@ -2818,7 +2801,6 @@ L_08908B48: goto L_08908B58; L_08908B58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908BE0; } @@ -2830,7 +2812,6 @@ L_08908B60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908B98; } @@ -2843,7 +2824,6 @@ L_08908B78: AOT_REGCACHE_SYNC_OUT(); return; L_08908B80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08908B98; } @@ -2857,7 +2837,6 @@ L_08908B88: goto L_08908B98; L_08908B98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908BE0; } @@ -2869,7 +2848,6 @@ L_08908BA0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908BE0; } @@ -2881,7 +2859,6 @@ L_08908BB8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908BE0; } @@ -2895,7 +2872,6 @@ L_08908BD0: goto L_08908BE0; L_08908BE0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08908A7C; } @@ -2918,7 +2894,17 @@ L_08908BE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908C10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); @@ -2945,7 +2931,17 @@ L_08908C40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908C50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -2968,7 +2964,6 @@ L_08908C68: } L_08908C70: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08908D48; } @@ -3007,7 +3002,6 @@ L_08908C9C: goto L_08908CA4; L_08908CA4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08908D48; } @@ -3047,7 +3041,6 @@ L_08908CD4: goto L_08908CDC; L_08908CDC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08908D48; } @@ -3058,7 +3051,6 @@ L_08908CE4: goto L_08908CE8; L_08908CE8: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08908D50; } @@ -3096,7 +3088,6 @@ L_08908D20: aot_gpr_4 = (aot_gpr_4 >> 12u); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908D50; } @@ -3120,7 +3111,17 @@ L_08908D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908D60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3148,7 +3149,6 @@ L_08908D84: L_08908D90: aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08908DF0; } @@ -3156,7 +3156,6 @@ L_08908D90: } L_08908D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908DC8; } @@ -3164,7 +3163,6 @@ L_08908D9C: } L_08908DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908E60; } @@ -3173,7 +3171,6 @@ L_08908DA4: L_08908DAC: aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908DF0; } @@ -3186,7 +3183,6 @@ L_08908DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08908DC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08908DF0; } @@ -3195,7 +3191,6 @@ L_08908DC0: L_08908DC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908DE8; } @@ -3203,7 +3198,6 @@ L_08908DC8: } L_08908DD4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08908DE4; } @@ -3223,7 +3217,6 @@ L_08908DE8: goto L_0890B488; L_08908DF0: { const bool branch_taken = aot_gpr_16 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08908E04; } @@ -3293,14 +3286,34 @@ L_08908E60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908E78: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2232), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08908E80: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3342,7 +3355,6 @@ L_08908EF8: aot_fpr_20 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -3352,7 +3364,6 @@ L_08908EF8: } L_08908F18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08908F34; @@ -3415,7 +3426,6 @@ L_08908F64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908FC4; } @@ -3446,7 +3456,6 @@ L_08908FC4: aot_gpr_5 = (0u | 9u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08908FFC; } @@ -3477,7 +3486,6 @@ L_08908FFC: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08909030; } @@ -3514,14 +3522,34 @@ L_08909030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909054: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2236))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890905C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3552,7 +3580,6 @@ L_08909090: goto L_08909098; L_08909098: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089090B4; } @@ -3569,7 +3596,6 @@ L_089090A0: } L_089090AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909104; } @@ -3577,7 +3603,6 @@ L_089090AC: } L_089090B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909168; } @@ -3593,7 +3618,6 @@ L_089090BC: } L_089090C4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08909104; } @@ -3602,7 +3626,6 @@ L_089090C4: L_089090CC: aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089090E0; } @@ -3631,7 +3654,6 @@ L_089090F8: L_08909104: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08909168; } @@ -3639,7 +3661,6 @@ L_08909104: } L_08909110: aot_gpr_31 = (0x08909118u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08909118u) goto L_08909118; AOT_REGCACHE_SYNC_OUT(); return; L_08909118: @@ -3680,7 +3701,17 @@ L_08909168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909180: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -3709,7 +3740,6 @@ L_089091A4: goto L_089091B8; L_089091B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089091E0; } @@ -3717,7 +3747,6 @@ L_089091B8: } L_089091C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909260; } @@ -3730,7 +3759,6 @@ L_089091CC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(36), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089091CC; } @@ -3759,7 +3787,6 @@ L_089091F4: L_089091F8: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(48)))))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_0890921C; } @@ -3780,7 +3807,6 @@ L_08909204: L_0890921C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089091F8; } @@ -3788,7 +3814,6 @@ L_0890921C: } L_08909228: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08909244; } @@ -3818,7 +3843,17 @@ L_08909260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909270: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3831,7 +3866,6 @@ L_08909270: AOT_REGCACHE_SYNC_OUT(); return; L_0890928C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890929C; } @@ -3839,7 +3873,6 @@ L_0890928C: } L_08909294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089092C8; } @@ -3875,13 +3908,22 @@ L_089092C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089092DC: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1736))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.gpr[7] = (ctx.gpr[7] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089092F8; } @@ -3893,11 +3935,20 @@ L_089092F0: goto L_089092F8; L_089092F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909300: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3918,14 +3969,23 @@ L_0890931C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890932C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 17u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08909360; } @@ -3936,7 +3996,6 @@ L_08909344: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_gpr_6 = (0u | 22u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08909370; } @@ -3960,7 +4019,6 @@ L_08909360: } L_08909368: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08909378; } @@ -3983,7 +4041,17 @@ L_08909388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909394: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1716))); @@ -4029,9 +4097,7 @@ L_08909404: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_14 = aot_fpr_12 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08909434; } @@ -4051,9 +4117,7 @@ L_08909420: L_08909434: aot_fpr_14 = aot_fpr_12 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08909458; } @@ -4071,7 +4135,6 @@ L_08909458: ctx.fpr[16] = std::bit_cast(0u); aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[15]) ^ 0x80000000u); goto L_08909478; @@ -4082,9 +4145,7 @@ L_08909478: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089094A0; } @@ -4112,7 +4173,17 @@ L_089094A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089094C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4125,7 +4196,6 @@ L_089094C8: goto L_08908C10; L_089094EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08909528; } @@ -4139,7 +4209,6 @@ L_089094F4: goto L_08908C10; L_08909504: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08909528; } @@ -4161,7 +4230,6 @@ L_08909514: } L_08909520: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909550; } @@ -4169,7 +4237,6 @@ L_08909520: } L_08909528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909698; } @@ -4179,7 +4246,6 @@ L_08909530: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08909550; } @@ -4198,7 +4264,6 @@ L_08909550: AOT_REGCACHE_SYNC_OUT(); return; L_08909558: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909634; } @@ -4216,7 +4281,6 @@ L_08909568: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089095A4; } @@ -4236,7 +4300,6 @@ L_0890958C: AOT_REGCACHE_SYNC_OUT(); return; L_0890959C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089095B8; } @@ -4270,7 +4333,6 @@ L_089095B8: AOT_REGCACHE_SYNC_OUT(); return; L_089095C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089095D4; } @@ -4302,7 +4364,6 @@ L_089095E0: AOT_REGCACHE_SYNC_OUT(); return; L_08909604: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0890962C; } @@ -4323,7 +4384,6 @@ L_08909614: goto L_08909A64; L_0890962C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909698; } @@ -4336,7 +4396,6 @@ L_08909634: AOT_REGCACHE_SYNC_OUT(); return; L_0890963C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909670; } @@ -4390,7 +4449,17 @@ L_08909698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089096B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4399,7 +4468,6 @@ L_089096B0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_5 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890970C; } @@ -4412,7 +4480,6 @@ L_089096D0: AOT_REGCACHE_SYNC_OUT(); return; L_089096D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089096F8; } @@ -4425,7 +4492,6 @@ L_089096E0: AOT_REGCACHE_SYNC_OUT(); return; L_089096E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890972C; } @@ -4433,7 +4499,6 @@ L_089096E8: } L_089096F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909734; } @@ -4476,7 +4541,17 @@ L_08909734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909744: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4555,7 +4630,17 @@ L_089097F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909804: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4609,7 +4694,17 @@ L_08909864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909880: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4642,7 +4737,6 @@ L_089098C4: AOT_REGCACHE_SYNC_OUT(); return; L_089098CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089098DC; } @@ -4660,7 +4754,17 @@ L_089098DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089098EC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 55u); @@ -4681,7 +4785,6 @@ L_089098FC: } L_08909904: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890993C; } @@ -4691,7 +4794,6 @@ L_0890990C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & 8192u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890993C; } @@ -4709,7 +4811,6 @@ L_0890991C: } L_0890992C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890993C; } @@ -4717,7 +4818,6 @@ L_0890992C: } L_08909934: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08909944; } @@ -4736,11 +4836,20 @@ L_08909944: goto L_08909948; L_08909948: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909950: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4752,7 +4861,6 @@ L_08909950: AOT_REGCACHE_SYNC_OUT(); return; L_08909968: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909980; } @@ -4772,7 +4880,17 @@ L_08909980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909990: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4791,7 +4909,6 @@ L_08909990: } L_089099B8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089099EC; } @@ -4801,7 +4918,6 @@ L_089099C0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); ctx.gpr[7] = (aot_gpr_6 & 64u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089099EC; } @@ -4818,7 +4934,6 @@ L_089099D0: goto L_089099E4; L_089099E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089099F4; } @@ -4826,7 +4941,6 @@ L_089099E4: } L_089099EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909A54; } @@ -4834,7 +4948,6 @@ L_089099EC: } L_089099F4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08909A54; } @@ -4862,7 +4975,6 @@ L_08909A00: goto L_089098EC; L_08909A3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909A54; } @@ -4882,7 +4994,17 @@ L_08909A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909A64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[9] = (aot_gpr_5 | 0u); @@ -4904,7 +5026,6 @@ L_08909A64: } L_08909A98: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08909ACC; } @@ -4914,7 +5035,6 @@ L_08909AA0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); ctx.gpr[7] = (aot_gpr_6 & 64u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08909ACC; } @@ -4925,7 +5045,6 @@ L_08909AB0: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.gpr[7] = (ctx.gpr[7] < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08909ADC; } @@ -4933,7 +5052,6 @@ L_08909AB0: } L_08909AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909AD4; } @@ -4941,7 +5059,6 @@ L_08909AC4: } L_08909ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909B4C; } @@ -4949,7 +5066,6 @@ L_08909ACC: } L_08909AD4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08909B4C; } @@ -4984,7 +5100,6 @@ L_08909AFC: goto L_089098EC; L_08909B34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909B4C; } @@ -5008,7 +5123,17 @@ L_08909B4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5045,7 +5170,6 @@ L_08909B88: goto L_089098EC; L_08909BB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909BC8; } @@ -5096,7 +5220,6 @@ L_08909BF4: } L_08909C00: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08909C10; } @@ -5114,14 +5237,34 @@ L_08909C10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909C20: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909C28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); @@ -5141,7 +5284,6 @@ L_08909C40: AOT_REGCACHE_SYNC_OUT(); return; L_08909C48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909C68; } @@ -5167,7 +5309,6 @@ L_08909C60: } L_08909C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909D2C; } @@ -5175,7 +5316,6 @@ L_08909C68: } L_08909C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909D2C; } @@ -5195,7 +5335,6 @@ L_08909C80: goto L_08909C88; L_08909C88: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08909C68; } @@ -5206,7 +5345,6 @@ L_08909C90: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08909D10; } @@ -5218,7 +5356,6 @@ L_08909CA4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08909D08; } @@ -5268,7 +5405,6 @@ L_08909D00: } L_08909D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909D2C; } @@ -5276,7 +5412,6 @@ L_08909D08: } L_08909D10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08909D2C; } @@ -5297,7 +5432,17 @@ L_08909D2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5340,7 +5485,6 @@ L_08909D8C: AOT_REGCACHE_SYNC_OUT(); return; L_08909D94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08909DB0; } @@ -5349,7 +5493,6 @@ L_08909D94: L_08909D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08909DC0; } @@ -5398,7 +5541,6 @@ L_08909DC0: L_08909DF4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08909E9C; } @@ -5430,7 +5572,6 @@ L_08909E20: goto L_08909E28; L_08909E28: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08909E9C; } @@ -5476,7 +5617,6 @@ L_08909E30: AOT_REGCACHE_SYNC_OUT(); return; L_08909E90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08909E9C; } @@ -5506,7 +5646,17 @@ L_08909EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909EBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); @@ -5515,7 +5665,6 @@ L_08909EBC: aot_gpr_4 = (aot_gpr_5 & 4096u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08909F68; } @@ -5533,7 +5682,6 @@ L_08909EDC: AOT_REGCACHE_SYNC_OUT(); return; L_08909EF8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08909F48; } @@ -5548,7 +5696,6 @@ L_08909F00: goto L_08909F0C; L_08909F0C: aot_gpr_31 = (0x08909F14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08909F14u) goto L_08909F14; AOT_REGCACHE_SYNC_OUT(); return; L_08909F14: @@ -5575,7 +5722,6 @@ L_08909F48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08909F68; } @@ -5599,7 +5745,17 @@ L_08909F68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909F78: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); jump_target = aot_gpr_31; @@ -5607,7 +5763,17 @@ L_08909F78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08909F84: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), aot_gpr_16); @@ -5640,7 +5806,6 @@ L_08909FD0: aot_gpr_6 = (8192u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890A190; } @@ -5658,7 +5823,6 @@ L_08909FE4: } L_08909FF4: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890A190; } @@ -5692,7 +5856,6 @@ L_0890A040: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890A190; } @@ -5704,7 +5867,6 @@ L_0890A050: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A078; } @@ -5716,7 +5878,6 @@ L_0890A068: goto L_0890A1A0; L_0890A070: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A190; } @@ -5726,9 +5887,7 @@ L_0890A078: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(452))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20380))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890A190; } @@ -5743,7 +5902,6 @@ L_0890A090: L_0890A0A0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890A10C; } @@ -5756,7 +5914,6 @@ L_0890A0AC: AOT_REGCACHE_SYNC_OUT(); return; L_0890A0B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890A134; } @@ -5771,7 +5928,6 @@ L_0890A0BC: goto L_0890A0C8; L_0890A0C8: aot_gpr_31 = (0x0890A0D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890A0D0u) goto L_0890A0D0; AOT_REGCACHE_SYNC_OUT(); return; L_0890A0D0: @@ -5796,7 +5952,6 @@ L_0890A0E0: goto L_089088F4; L_0890A104: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A134; } @@ -5807,9 +5962,7 @@ L_0890A10C: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890A134; } @@ -5822,7 +5975,6 @@ L_0890A128: goto L_0890A134; L_0890A134: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A190; } @@ -5835,9 +5987,7 @@ L_0890A13C: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890A188; } @@ -5847,7 +5997,6 @@ L_0890A160: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890A188; } @@ -5859,7 +6008,6 @@ L_0890A170: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A190; } @@ -5877,7 +6025,17 @@ L_0890A190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890A1A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5896,7 +6054,6 @@ L_0890A1A0: } L_0890A1CC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890A1F0; } @@ -5910,7 +6067,6 @@ L_0890A1D4: AOT_REGCACHE_SYNC_OUT(); return; L_0890A1E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890A1F8; } @@ -5918,7 +6074,6 @@ L_0890A1E0: } L_0890A1E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A41C; } @@ -5926,7 +6081,6 @@ L_0890A1E8: } L_0890A1F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A468; } @@ -5941,7 +6095,6 @@ L_0890A1F8: L_0890A208: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0890A22C; } @@ -5953,7 +6106,6 @@ L_0890A214: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890A270; } @@ -5975,9 +6127,7 @@ L_0890A244: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(452))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890A278; } @@ -5985,7 +6135,6 @@ L_0890A244: } L_0890A268: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A334; } @@ -5993,7 +6142,6 @@ L_0890A268: } L_0890A270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A468; } @@ -6008,7 +6156,6 @@ L_0890A278: goto L_0890A284; L_0890A284: aot_gpr_31 = (0x0890A28Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890A28Cu) goto L_0890A28C; AOT_REGCACHE_SYNC_OUT(); return; L_0890A28C: @@ -6028,7 +6175,6 @@ L_0890A29C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A2E0; } @@ -6046,7 +6192,6 @@ L_0890A2BC: AOT_REGCACHE_SYNC_OUT(); return; L_0890A2D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A2F8; } @@ -6069,7 +6214,6 @@ L_0890A2F8: AOT_REGCACHE_SYNC_OUT(); return; L_0890A300: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890A41C; } @@ -6092,7 +6236,6 @@ L_0890A314: AOT_REGCACHE_SYNC_OUT(); return; L_0890A32C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A41C; } @@ -6110,7 +6253,6 @@ L_0890A334: L_0890A340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890A3D4; } @@ -6120,7 +6262,6 @@ L_0890A34C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A3D4; } @@ -6150,7 +6291,6 @@ L_0890A38C: AOT_REGCACHE_SYNC_OUT(); return; L_0890A394: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890A3A8; } @@ -6165,7 +6305,6 @@ L_0890A39C: L_0890A3A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890A41C; } @@ -6175,7 +6314,6 @@ L_0890A3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_5 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890A41C; } @@ -6195,7 +6333,6 @@ L_0890A3D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A3EC; } @@ -6251,7 +6388,6 @@ L_0890A440: AOT_REGCACHE_SYNC_OUT(); return; L_0890A454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A468; } @@ -6277,7 +6413,17 @@ L_0890A468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890A484: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6286,7 +6432,6 @@ L_0890A484: { const std::uint32_t aot_run_words[5]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A564; } @@ -6350,7 +6495,6 @@ L_0890A538: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1748))); aot_gpr_5 = (ctx.gpr[17] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890A554; } @@ -6371,7 +6515,6 @@ L_0890A554: goto L_0890A55C; L_0890A55C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A59C; } @@ -6382,7 +6525,6 @@ L_0890A564: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A59C; } @@ -6392,7 +6534,6 @@ L_0890A578: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1748))); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A594; } @@ -6426,7 +6567,17 @@ L_0890A59C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890A5BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6435,7 +6586,6 @@ L_0890A5BC: { const std::uint32_t aot_run_words[5]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A680; } @@ -6501,7 +6651,6 @@ L_0890A670: goto L_0890A678; L_0890A678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A708; } @@ -6512,7 +6661,6 @@ L_0890A680: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A708; } @@ -6522,7 +6670,6 @@ L_0890A694: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890A700; } @@ -6549,7 +6696,6 @@ L_0890A6C4: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_0890A6EC; @@ -6592,7 +6738,17 @@ L_0890A708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890A728: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -6616,7 +6772,6 @@ L_0890A750: AOT_REGCACHE_SYNC_OUT(); return; L_0890A758: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890A7A4; } @@ -6629,7 +6784,6 @@ L_0890A760: AOT_REGCACHE_SYNC_OUT(); return; L_0890A768: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890A788; } @@ -6639,7 +6793,6 @@ L_0890A770: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890A7B4; } @@ -6647,7 +6800,6 @@ L_0890A770: } L_0890A780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A818; } @@ -6686,7 +6838,6 @@ L_0890A7B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890A808; } @@ -6696,7 +6847,6 @@ L_0890A7C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890A808; } @@ -6706,7 +6856,6 @@ L_0890A7D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890A7F8; } @@ -6757,7 +6906,6 @@ L_0890A818: } L_0890A820: aot_gpr_31 = (0x0890A828u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890A828u) goto L_0890A828; AOT_REGCACHE_SYNC_OUT(); return; L_0890A828: @@ -6815,7 +6963,6 @@ L_0890A8A0: AOT_REGCACHE_SYNC_OUT(); return; L_0890A8BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890A8CC; } @@ -6823,7 +6970,6 @@ L_0890A8BC: } L_0890A8C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A8DC; } @@ -6848,7 +6994,6 @@ L_0890A8DC: AOT_REGCACHE_SYNC_OUT(); return; L_0890A8E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890A9AC; } @@ -6878,7 +7023,6 @@ L_0890A914: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1930), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1930)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890A948; } @@ -6939,7 +7083,6 @@ L_0890A974: AOT_REGCACHE_SYNC_OUT(); return; L_0890A98C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890A99C; } @@ -6947,7 +7090,6 @@ L_0890A98C: } L_0890A994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890A8DC; } @@ -6986,7 +7128,6 @@ L_0890A9D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(56))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890AA3C; } @@ -7035,12 +7176,10 @@ L_0890A9E0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0890AA2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 174u, 0x089C89A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890AA2Cu) goto L_0890AA2C; AOT_REGCACHE_SYNC_OUT(); return; L_0890AA2C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890AA3C; } @@ -7081,7 +7220,17 @@ L_0890AA70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890AA84: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_20)); @@ -7096,7 +7245,6 @@ L_0890AA84: AOT_REGCACHE_SYNC_OUT(); return; L_0890AAAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890AB24; } @@ -7134,7 +7282,6 @@ L_0890AAE4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890AB24; } @@ -7152,7 +7299,6 @@ L_0890AB0C: } L_0890AB1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890AB6C; } @@ -7160,7 +7306,6 @@ L_0890AB1C: } L_0890AB24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890AC3C; } @@ -7175,7 +7320,6 @@ L_0890AB34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_29 + static_cast(32)); if (branch_taken) { @@ -7192,9 +7336,7 @@ L_0890AB54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890AB9C; } @@ -7204,7 +7346,6 @@ L_0890AB6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890AB94; } @@ -7217,7 +7358,6 @@ L_0890AB7C: AOT_REGCACHE_SYNC_OUT(); return; L_0890AB84: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890ABA4; } @@ -7225,7 +7365,6 @@ L_0890AB84: } L_0890AB8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890ABAC; } @@ -7233,7 +7372,6 @@ L_0890AB8C: } L_0890AB94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890AC3C; } @@ -7241,7 +7379,6 @@ L_0890AB94: } L_0890AB9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890AC3C; } @@ -7255,7 +7392,6 @@ L_0890ABA4: L_0890ABAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890ABC0; } @@ -7337,7 +7473,17 @@ L_0890AC3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890AC58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -7352,7 +7498,6 @@ L_0890AC58: AOT_REGCACHE_SYNC_OUT(); return; L_0890AC7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890ACF4; } @@ -7390,7 +7535,6 @@ L_0890ACB4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890ACF4; } @@ -7400,7 +7544,6 @@ L_0890ACDC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890ACFC; } @@ -7408,7 +7551,6 @@ L_0890ACDC: } L_0890ACEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890AD0C; } @@ -7416,7 +7558,6 @@ L_0890ACEC: } L_0890ACF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890ADAC; } @@ -7429,7 +7570,6 @@ L_0890ACFC: AOT_REGCACHE_SYNC_OUT(); return; L_0890AD04: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_0890AD1C; } @@ -7437,7 +7577,6 @@ L_0890AD04: } L_0890AD0C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0890AD24; } @@ -7445,7 +7584,6 @@ L_0890AD0C: } L_0890AD14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890ADAC; } @@ -7453,7 +7591,6 @@ L_0890AD14: } L_0890AD1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890ADAC; } @@ -7531,7 +7668,17 @@ L_0890ADAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890ADC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_16); @@ -7545,7 +7692,6 @@ L_0890ADC4: L_0890ADE0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890AE4C; } @@ -7591,9 +7737,7 @@ L_0890ADEC: aot_fpr_12 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_20; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890AE44; } @@ -7607,7 +7751,6 @@ L_0890AE28: AOT_REGCACHE_SYNC_OUT(); return; L_0890AE34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890AE54; } @@ -7669,7 +7812,17 @@ L_0890AE80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890AE94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7698,7 +7851,17 @@ L_0890AEC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890AED8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -7714,7 +7877,6 @@ L_0890AED8: AOT_REGCACHE_SYNC_OUT(); return; L_0890AF00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890AF78; } @@ -7752,7 +7914,6 @@ L_0890AF38: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890AF78; } @@ -7762,7 +7923,6 @@ L_0890AF60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); ctx.gpr[18] = (0u | 7u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0890AF80; } @@ -7770,7 +7930,6 @@ L_0890AF60: } L_0890AF70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890AF90; } @@ -7778,7 +7937,6 @@ L_0890AF70: } L_0890AF78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B05C; } @@ -7791,7 +7949,6 @@ L_0890AF80: AOT_REGCACHE_SYNC_OUT(); return; L_0890AF88: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_0890AFB8; } @@ -7801,7 +7958,6 @@ L_0890AF90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890AFB0; } @@ -7809,7 +7965,6 @@ L_0890AF90: } L_0890AFA0: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0890AFC0; } @@ -7817,7 +7972,6 @@ L_0890AFA0: } L_0890AFA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B05C; } @@ -7825,7 +7979,6 @@ L_0890AFA8: } L_0890AFB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B05C; } @@ -7833,7 +7986,6 @@ L_0890AFB0: } L_0890AFB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B05C; } @@ -7841,7 +7993,6 @@ L_0890AFB8: } L_0890AFC0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0890AFD0; } @@ -7881,7 +8032,6 @@ L_0890B00C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890B024; } @@ -7929,7 +8079,17 @@ L_0890B05C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B078: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7948,7 +8108,17 @@ L_0890B08C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B0A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -7990,7 +8160,6 @@ L_0890B0FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890B188; } @@ -8001,7 +8170,6 @@ L_0890B124: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890B180; } @@ -8014,7 +8182,6 @@ L_0890B138: AOT_REGCACHE_SYNC_OUT(); return; L_0890B140: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B178; } @@ -8024,7 +8191,6 @@ L_0890B148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890B178; } @@ -8044,7 +8210,6 @@ L_0890B158: } L_0890B170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B1BC; } @@ -8052,7 +8217,6 @@ L_0890B170: } L_0890B178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B260; } @@ -8060,7 +8224,6 @@ L_0890B178: } L_0890B180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B260; } @@ -8068,7 +8231,6 @@ L_0890B180: } L_0890B188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B260; } @@ -8129,7 +8291,6 @@ L_0890B208: ctx.fpr[16] = aot_fpr_13 + aot_fpr_20; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8151,7 +8312,6 @@ L_0890B228: L_0890B23C: aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8179,7 +8339,17 @@ L_0890B260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B27C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -8221,7 +8391,6 @@ L_0890B2D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890B330; } @@ -8234,7 +8403,6 @@ L_0890B2F8: AOT_REGCACHE_SYNC_OUT(); return; L_0890B300: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B328; } @@ -8244,7 +8412,6 @@ L_0890B308: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890B328; } @@ -8252,7 +8419,6 @@ L_0890B308: } L_0890B318: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0890B338; } @@ -8260,7 +8426,6 @@ L_0890B318: } L_0890B320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B42C; } @@ -8268,7 +8433,6 @@ L_0890B320: } L_0890B328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B42C; } @@ -8276,7 +8440,6 @@ L_0890B328: } L_0890B330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B42C; } @@ -8357,7 +8520,6 @@ L_0890B3D4: ctx.fpr[16] = aot_fpr_12 + aot_fpr_20; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8379,7 +8541,6 @@ L_0890B3F4: L_0890B408: aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8407,7 +8568,17 @@ L_0890B42C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B448: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8431,7 +8602,17 @@ L_0890B45C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B488: aot_gpr_6 = (0u | 0u); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8454,7 +8635,17 @@ L_0890B4A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B4B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -8465,7 +8656,6 @@ L_0890B4B0: AOT_REGCACHE_SYNC_OUT(); return; L_0890B4C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B5F0; } @@ -8483,7 +8673,6 @@ L_0890B4D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890B5F0; } @@ -8495,7 +8684,6 @@ L_0890B4F0: aot_gpr_4 = (aot_gpr_4 + static_cast(-2000)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890B568; } @@ -8503,7 +8691,6 @@ L_0890B4F0: } L_0890B508: aot_gpr_31 = (0x0890B510u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890B510u) goto L_0890B510; AOT_REGCACHE_SYNC_OUT(); return; L_0890B510: @@ -8547,7 +8734,6 @@ L_0890B550: goto L_0890B27C; L_0890B560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B5F8; } @@ -8614,9 +8800,7 @@ L_0890B570: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890B5C8; } @@ -8645,7 +8829,6 @@ L_0890B5DC: AOT_REGCACHE_SYNC_OUT(); return; L_0890B5E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B5F8; } @@ -8663,7 +8846,17 @@ L_0890B5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B608: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8686,12 +8879,10 @@ L_0890B630: } L_0890B63C: aot_gpr_31 = (0x0890B644u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890B644u) goto L_0890B644; AOT_REGCACHE_SYNC_OUT(); return; L_0890B644: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0890B6AC; } @@ -8704,7 +8895,6 @@ L_0890B64C: AOT_REGCACHE_SYNC_OUT(); return; L_0890B654: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B6AC; } @@ -8715,7 +8905,6 @@ L_0890B65C: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890B6AC; } @@ -8751,7 +8940,6 @@ L_0890B6AC: L_0890B6BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890B6E4; } @@ -8764,7 +8952,6 @@ L_0890B6C8: AOT_REGCACHE_SYNC_OUT(); return; L_0890B6D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B6E4; } @@ -8783,7 +8970,6 @@ L_0890B6E4: AOT_REGCACHE_SYNC_OUT(); return; L_0890B6F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B71C; } @@ -8801,7 +8987,6 @@ L_0890B6F8: AOT_REGCACHE_SYNC_OUT(); return; L_0890B714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890B748; } @@ -8810,7 +8995,6 @@ L_0890B714: L_0890B71C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890B748; } @@ -8828,7 +9012,6 @@ L_0890B728: } L_0890B738: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890B748; } @@ -8879,12 +9062,10 @@ L_0890B790: AOT_REGCACHE_SYNC_OUT(); return; L_0890B7A8: aot_gpr_31 = (0x0890B7B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890B7B0u) goto L_0890B7B0; AOT_REGCACHE_SYNC_OUT(); return; L_0890B7B0: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0890B864; } @@ -8903,7 +9084,6 @@ L_0890B7CC: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890B854; } @@ -8916,7 +9096,6 @@ L_0890B7E0: AOT_REGCACHE_SYNC_OUT(); return; L_0890B7E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890B84C; } @@ -8924,7 +9103,6 @@ L_0890B7E8: } L_0890B7F0: aot_gpr_31 = (0x0890B7F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890B7F8u) goto L_0890B7F8; AOT_REGCACHE_SYNC_OUT(); return; L_0890B7F8: @@ -8951,7 +9129,6 @@ L_0890B80C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(-182))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890B854; } @@ -9036,7 +9213,17 @@ L_0890B8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890B900: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -9047,7 +9234,6 @@ L_0890B900: AOT_REGCACHE_SYNC_OUT(); return; L_0890B918: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890B930; } @@ -9057,7 +9243,6 @@ L_0890B920: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890BA0C; } @@ -9152,7 +9337,17 @@ L_0890BA0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BA20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9177,7 +9372,6 @@ L_0890BA40: } L_0890BA48: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890BADC; } @@ -9232,7 +9426,6 @@ L_0890BAB8: goto L_0890BAD4; L_0890BAD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890BB00; } @@ -9240,7 +9433,6 @@ L_0890BAD4: } L_0890BADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890BB0C; } @@ -9269,7 +9461,17 @@ L_0890BB0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BB1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2232))); @@ -9297,7 +9499,6 @@ L_0890BB48: goto L_08908C10; L_0890BB58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890BB98; } @@ -9339,7 +9540,6 @@ L_0890BBA4: goto L_0890BBA8; L_0890BBA8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890BBB8; } @@ -9347,7 +9547,6 @@ L_0890BBA8: } L_0890BBB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890BBD8; } @@ -9381,7 +9580,17 @@ L_0890BBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BBEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -9392,7 +9601,6 @@ L_0890BBEC: AOT_REGCACHE_SYNC_OUT(); return; L_0890BC08: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9422,7 +9630,6 @@ L_0890BC48: aot_gpr_4 = (ctx.gpr[18] | ctx.gpr[2]); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890BC7C; } @@ -9439,7 +9646,6 @@ L_0890BC58: goto L_089088F4; L_0890BC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9447,7 +9653,6 @@ L_0890BC74: } L_0890BC7C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0890BCFC; } @@ -9459,9 +9664,7 @@ L_0890BC84: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890BD90; } @@ -9470,7 +9673,6 @@ L_0890BC84: L_0890BCA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(772))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9485,7 +9687,6 @@ L_0890BCB0: L_0890BCBC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9498,7 +9699,6 @@ L_0890BCC8: AOT_REGCACHE_SYNC_OUT(); return; L_0890BCD0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9519,7 +9719,6 @@ L_0890BCE8: AOT_REGCACHE_SYNC_OUT(); return; L_0890BCF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9527,7 +9726,6 @@ L_0890BCF4: } L_0890BCFC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0890BD90; } @@ -9538,9 +9736,7 @@ L_0890BD04: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890BD90; } @@ -9550,9 +9746,7 @@ L_0890BD20: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890BD90; } @@ -9567,7 +9761,6 @@ L_0890BD38: L_0890BD44: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890BD7C; } @@ -9580,7 +9773,6 @@ L_0890BD50: AOT_REGCACHE_SYNC_OUT(); return; L_0890BD58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890BD7C; } @@ -9621,7 +9813,17 @@ L_0890BD90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BDA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9644,7 +9846,6 @@ L_0890BDC4: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0890BDE4; } @@ -9657,7 +9858,6 @@ L_0890BDDC: L_0890BDE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890BDC4; } @@ -9670,7 +9870,17 @@ L_0890BDF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BDFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9681,7 +9891,6 @@ L_0890BDFC: L_0890BE0C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890BE44; } @@ -9693,7 +9902,6 @@ L_0890BE18: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0890BE38; } @@ -9706,7 +9914,6 @@ L_0890BE30: L_0890BE38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890BE18; } @@ -9719,21 +9926,51 @@ L_0890BE44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BE50: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2244), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BE58: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2252), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BE60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9745,7 +9982,6 @@ L_0890BE60: goto L_08908C10; L_0890BE7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890BE94; } @@ -9759,7 +9995,6 @@ L_0890BE84: goto L_08908C10; L_0890BE94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890BEAC; } @@ -9773,7 +10008,6 @@ L_0890BE9C: goto L_08908C10; L_0890BEAC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890BEC4; } @@ -9793,7 +10027,17 @@ L_0890BEC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BED4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); ctx.gpr[2] = (aot_gpr_4 & 2u); @@ -9802,7 +10046,17 @@ L_0890BED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890BEE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -9859,7 +10113,6 @@ L_0890BF84: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1940), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1944), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -9880,9 +10133,7 @@ L_0890BFAC: L_0890BFBC: aot_fpr_14 = ctx.fpr[24] - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890BFDC; } @@ -9898,7 +10149,6 @@ L_0890BFDC: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0890BFF8; diff --git a/profiles/vcs/generated/generated_unit_0066.cpp b/profiles/vcs/generated/generated_unit_0066.cpp index 3a45fec..380514e 100644 --- a/profiles/vcs/generated/generated_unit_0066.cpp +++ b/profiles/vcs/generated/generated_unit_0066.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0066[4090] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 0, 14, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, - 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 26, 0, 0, 27, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, - 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, 40, 0, 41, 0, 0, 0, 0, - 0, 0, 42, 0, 0, 0, 43, 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, - 0, 0, 49, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 63, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, 68, 0, 0, 69, 0, - 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, - 0, 75, 0, 76, 0, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, - 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 99, 0, 0, 100, 0, 101, 102, 0, 0, 0, - 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 106, 0, 0, 0, 107, 0, 0, 0, 0, 0, 108, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 112, 0, 0, 113, 0, 114, 0, 115, 0, 0, 116, 0, - 0, 117, 0, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 0, 0, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 130, 0, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 139, - 0, 0, 0, 140, 0, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, - 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 164, 0, 0, 0, 165, 0, 0, 166, 0, 167, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, - 0, 0, 0, 171, 0, 0, 172, 0, 173, 0, 0, 174, 0, 0, 175, 0, 0, 176, 0, 177, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 183, 0, 184, 0, 185, 0, 186, 0, 0, 187, 0, - 0, 0, 0, 0, 0, 188, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, - 193, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 197, 0, 198, 0, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 201, 0, 0, - 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 0, 0, 209, 0, 210, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, - 0, 0, 213, 0, 214, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, - 0, 0, 220, 0, 0, 0, 221, 0, 0, 222, 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 226, 0, 0, 227, 0, 228, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 0, 0, 240, 0, 0, 0, 241, 0, 0, 242, - 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 253, 0, 0, 254, 0, 255, 0, 0, 0, 0, 256, 0, 257, 0, 0, - 258, 0, 259, 0, 0, 0, 0, 260, 0, 261, 0, 0, 262, 0, 263, 0, 0, 0, 0, 264, 265, 0, 266, 0, 267, 0, 0, 268, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, - 279, 0, 280, 0, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 287, 0, 288, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, 291, - 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 304, 0, 305, - 0, 306, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 316, 0, 317, 318, 0, 319, 0, 0, 0, 320, - 0, 321, 0, 322, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 328, 0, 329, - 0, 330, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, - 340, 0, 341, 0, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 346, 0, - 0, 0, 347, 0, 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, - 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 358, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 365, 0, 0, - 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 370, 0, 0, 371, 0, 0, 0, 372, 0, 0, - 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 378, 0, 379, 380, 0, 0, 0, 0, - 381, 0, 0, 0, 0, 0, 382, 0, 0, 0, 383, 0, 384, 0, 385, 386, 0, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 0, - 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 399, 0, 400, 0, 0, 401, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 0, 408, 0, 409, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, - 0, 411, 0, 412, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 0, 0, 425, 0, 426, 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, - 0, 0, 0, 0, 430, 0, 431, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, - 0, 438, 0, 0, 0, 439, 0, 0, 0, 0, 440, 0, 441, 0, 0, 442, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 445, - 0, 446, 0, 0, 447, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, - 452, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 456, 0, 0, 457, 458, 0, 459, 0, 460, 0, 461, 0, 0, 0, 0, 0, 0, 462, - 0, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, 465, 0, 466, 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 0, 470, 0, 0, 471, 0, 472, 0, - 0, 473, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, - 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 486, 0, 487, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 496, 0, 497, 0, 498, 499, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, - 0, 504, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 0, 0, 509, 0, 510, 0, 0, 0, 511, 512, 0, 513, - 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 517, 0, 518, 0, 519, 0, 0, 0, 0, 0, 520, 0, 521, 0, 522, 0, 0, 523, - 0, 0, 524, 0, 0, 525, 0, 526, 0, 527, 0, 0, 0, 528, 0, 529, 0, 0, 0, 530, 0, 531, 0, 0, 0, 532, 0, 533, 0, 534, 0, 535, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, - 0, 0, 539, 0, 540, 0, 541, 0, 542, 0, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 0, 0, - 549, 0, 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 553, 0, 0, 554, 555, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, - 0, 0, 0, 0, 558, 0, 559, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 0, - 0, 0, 565, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 0, 0, - 572, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, - 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 585, 0, 586, 0, 587, 0, 588, 0, - 0, 0, 0, 0, 0, 0, 589, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 593, 0, 0, 0, 0, 594, - 0, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 602, 0, 0, 0, 603, 0, 0, 604, 0, 605, 0, - 0, 0, 606, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 609, 0, 0, 610, 0, 611, 0, 0, 0, 612, 0, 0, 0, 613, 0, 0, 614, 0, 0, - 0, 615, 0, 0, 616, 0, 617, 0, 0, 0, 618, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 621, 0, 0, 622, 0, 623, 0, 0, 0, 624, 0, - 0, 0, 625, 0, 0, 626, 0, 0, 0, 627, 0, 0, 628, 0, 629, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 632, 0, 0, 0, 633, 0, 0, - 634, 0, 635, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 639, 0, 0, 0, - 640, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 643, 0, 644, 0, 645, 0, 646, 0, 0, 0, 0, 0, - 0, 647, 0, 0, 0, 648, 649, 0, 0, 650, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 656, 0, 657, 0, 658, 0, - 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 661, 0, 662, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 665, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 670, 0, 0, - 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 673, 0, 674, 0, 0, 0, 0, 0, 675, 0, 676, 0, 677, 678, 0, 0, - 679, 0, 680, 0, 681, 0, 682, 0, 683, 0, 0, 0, 0, 684, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, - 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 694, - 0, 0, 0, 695, 0, 696, 0, 697, 0, 0, 698, 0, 0, 0, 0, 699, 0, 700, 0, 0, 701, 0, 0, 702, 0, 0, 0, 0, 703, 0, 704, 0, - 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, 0, - 0, 709, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, - 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, - 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 720, 721, 0, 0, 722, 723, 0, 0, 0, 724, - 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 730, - 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 733, 0, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 0, 0, 737, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 741, 0, 0, - 0, 742, 0, 0, 743, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 747, 0, 0, - 0, 748, 0, 0, 749, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 752, 0, 0, 753, 0, 0, 754, 0, 0, 0, 755, - 0, 756, 0, 757, 0, 758, 0, 759, 0, 0, 0, 760, 761, 762, 0, 763, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 765, 0, 0, 0, 0, 0, - 766, 0, 0, 0, 767, 0, 768, 0, 769, 0, 770, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 776, 777, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 780, 0, 781, 0, 782, 0, 0, 0, 783, 0, 784, 0, 785, 0, 0, 0, 0, 786, 0, 787, 0, 788, 0, 0, 789, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 791, 0, 792, 0, 0, 793, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 795, 0, 0, 796, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 798, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 803, 0, 804, 0, 805, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 808, 0, 0, 0, 0, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 811, 0, 812, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 814, 0, 815, 0, 0, 0, 0, 0, 0, 0, 816, 0, 817, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 821, 0, 822, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 825, 0, 826, 0, 827, 828, 0, 829, 0, 0, 0, 0, 0, 0, 830, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 832, 0, 0, - 0, 0, 833, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, - 0, 0, 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 841, 0, 0, 842, 0, 0, 0, 0, 0, 843, 0, 0, 844, 0, 0, 0, 0, 0, 845, - 0, 846, 0, 847, 0, 848, 0, 849, 0, 0, 0, 0, 0, 850, 0, 851, 0, 852, 0, 0, 853, 0, 0, 0, 0, 854, 0, 0, 855, 0, 0, 856, - 0, 857, 0, 858, 0, 859, 0, 860, 0, 0, 861, 0, 862, 863, 0, 0, 864, 0, 0, 0, 0, 865, 0, 0, 866, 0, 0, 867, 0, 868, 0, 869, - 0, 870, 0, 871, 0, 0, 872, 0, 873, 874, 0, 0, 875, 0, 0, 0, 0, 0, 876, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 880, 0, 0, 0, 0, 0, 881, 0, 0, 882, 0, 0, - 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 0, 885, 0, 886, 0, 887, 0, 888, 0, 0, 0, 0, - 0, 0, 0, 0, 889, 0, 890, 0, 0, 0, 891, 0, 892, 0, 893, 0, 894, 0, 895, 896, 0, 897, 0, 0, 0, 898, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0066[64] = { + 0x008C014020115011ull, 0x2228A51055440954ull, 0x10840A440A454841ull, 0x4282282090204A24ull, + 0x281001024A400880ull, 0x1A6AAAAAAA922A8Aull, 0x4A912008208A8002ull, 0xD555284022AAA412ull, + 0x02414044002D5548ull, 0x82010A4409121409ull, 0x4AA40488010A4948ull, 0x2045514102088220ull, + 0x200A211408545545ull, 0x2100004042948A44ull, 0x2048081491155500ull, 0x0958528528528520ull, + 0x0140010800801102ull, 0x8425AAA550000000ull, 0x042081000000140Aull, 0x00A00222A8200240ull, + 0xA114005A8B488284ull, 0x0411010000A20212ull, 0x2000150450200485ull, 0x2501412024812104ull, + 0x0D44102122540088ull, 0x040920501108D441ull, 0x0814A44800A54900ull, 0x0048440000824A0Aull, + 0x120449502012A091ull, 0x0110085280429422ull, 0x5224A8A081564125ull, 0x0405500002481112ull, + 0x0000005400000004ull, 0x0020405000102010ull, 0xB141120A14220350ull, 0xAA28A2A495054450ull, + 0x1244915404001800ull, 0x0888425084032449ull, 0x1000008104842504ull, 0x5522084004282210ull, + 0x5224455485400240ull, 0x4522445224452244ull, 0x0010020522445224ull, 0x0552020110400000ull, + 0x5500900080001262ull, 0x2804110041054808ull, 0x0882215535052002ull, 0x509284A8A8092001ull, + 0x200000121200000Aull, 0x8CD1000408042120ull, 0x10844408C8088001ull, 0x2400809224008028ull, + 0x0440B8AA89208092ull, 0x0000010000201551ull, 0x0950A8A801023500ull, 0x0108812000049480ull, + 0x0040085400100500ull, 0x014050200A800204ull, 0x40B52800A4008008ull, 0x2000008424000000ull, + 0x8241202001010220ull, 0xA92134AA9212A0AAull, 0x241101000024134Aull, 0x022D54500AA20002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0066[64] = { + 1u, 13u, 33u, 49u, 64u, 75u, 103u, 117u, 140u, 156u, 171u, 188u, 202u, 220u, 233u, 249u, + 269u, 277u, 292u, 300u, 311u, 330u, 340u, 352u, 366u, 381u, 396u, 411u, 422u, 438u, 452u, 473u, + 485u, 489u, 496u, 514u, 536u, 549u, 565u, 575u, 589u, 606u, 625u, 638u, 647u, 659u, 671u, 688u, + 705u, 712u, 725u, 737u, 748u, 766u, 774u, 790u, 800u, 808u, 818u, 831u, 836u, 846u, 870u, 883u, }; void recomp_unit_0066_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0066_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0890C000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0066[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0066[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0066[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0890C000; @@ -1071,7 +978,6 @@ LOCAL_DISPATCH: } L_0890C000: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16544u << 16u); if (branch_taken) { @@ -1125,7 +1031,17 @@ L_0890C050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1352))); @@ -1135,7 +1051,6 @@ L_0890C074: aot_gpr_4 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C0C8; } @@ -1173,7 +1088,17 @@ L_0890C0CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C0DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); @@ -1185,7 +1110,6 @@ L_0890C0DC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C120; } @@ -1198,7 +1122,6 @@ L_0890C108: AOT_REGCACHE_SYNC_OUT(); return; L_0890C110: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890C120; } @@ -1212,7 +1135,6 @@ L_0890C118: L_0890C120: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0890C160; } @@ -1225,7 +1147,6 @@ L_0890C12C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C160; } @@ -1235,7 +1156,6 @@ L_0890C148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890C170; } @@ -1243,7 +1163,6 @@ L_0890C148: } L_0890C158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C1BC; } @@ -1255,7 +1174,6 @@ L_0890C160: goto L_0890C354; L_0890C168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C338; } @@ -1271,7 +1189,6 @@ L_0890C178: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1740), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C1B4; } @@ -1289,7 +1206,6 @@ L_0890C190: } L_0890C1A0: { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_0890C1B4; } @@ -1303,7 +1219,6 @@ L_0890C1A8: AOT_REGCACHE_SYNC_OUT(); return; L_0890C1B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C338; } @@ -1313,7 +1228,6 @@ L_0890C1BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C240; } @@ -1321,14 +1235,12 @@ L_0890C1BC: } L_0890C1CC: aot_gpr_31 = (0x0890C1D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890C1D4u) goto L_0890C1D4; AOT_REGCACHE_SYNC_OUT(); return; L_0890C1D4: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < 512 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C22C; } @@ -1344,7 +1256,6 @@ L_0890C1E4: L_0890C1F4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C218; } @@ -1377,7 +1288,6 @@ L_0890C22C: AOT_REGCACHE_SYNC_OUT(); return; L_0890C238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C308; } @@ -1385,14 +1295,12 @@ L_0890C238: } L_0890C240: aot_gpr_31 = (0x0890C248u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890C248u) goto L_0890C248; AOT_REGCACHE_SYNC_OUT(); return; L_0890C248: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C288; } @@ -1406,7 +1314,6 @@ L_0890C258: AOT_REGCACHE_SYNC_OUT(); return; L_0890C264: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890C288; } @@ -1426,7 +1333,6 @@ L_0890C288: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890C308; } @@ -1440,7 +1346,6 @@ L_0890C298: AOT_REGCACHE_SYNC_OUT(); return; L_0890C2A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890C308; } @@ -1484,7 +1389,6 @@ L_0890C2F0: L_0890C308: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1740))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C338; } @@ -1494,7 +1398,6 @@ L_0890C314: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C338; } @@ -1523,7 +1426,17 @@ L_0890C338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C354: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1537,7 +1450,6 @@ L_0890C354: L_0890C370: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C394; } @@ -1569,7 +1481,6 @@ L_0890C3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890C41C; } @@ -1586,7 +1497,6 @@ L_0890C3C4: AOT_REGCACHE_SYNC_OUT(); return; L_0890C3DC: aot_gpr_31 = (0x0890C3E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890C3E4u) goto L_0890C3E4; AOT_REGCACHE_SYNC_OUT(); return; L_0890C3E4: @@ -1617,7 +1527,17 @@ L_0890C41C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C42C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -1687,7 +1607,17 @@ L_0890C4A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C4D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1699,7 +1629,6 @@ L_0890C4D0: goto L_0890FD50; L_0890C4EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890C5BC; } @@ -1709,7 +1638,6 @@ L_0890C4F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(311))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890C5B4; } @@ -1717,7 +1645,6 @@ L_0890C4F4: } L_0890C504: { const bool branch_taken = ctx.gpr[17] == aot_gpr_16; - // nop if (branch_taken) { goto L_0890C5AC; } @@ -1751,7 +1678,6 @@ L_0890C524: } L_0890C52C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890C5A4; } @@ -1761,7 +1687,6 @@ L_0890C534: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0890C59C; } @@ -1770,7 +1695,6 @@ L_0890C534: L_0890C544: aot_gpr_6 = (0u | 18u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890C594; } @@ -1779,7 +1703,6 @@ L_0890C544: L_0890C550: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890C58C; } @@ -1791,7 +1714,6 @@ L_0890C55C: goto L_0890D44C; L_0890C564: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890C584; } @@ -1809,7 +1731,6 @@ L_0890C574: goto L_0890C57C; L_0890C57C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C5C4; } @@ -1885,7 +1806,6 @@ L_0890C5C4: goto L_0890D46C; L_0890C5CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890C5EC; } @@ -1897,7 +1817,6 @@ L_0890C5D4: L_0890C5D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890C5EC; } @@ -1926,7 +1845,17 @@ L_0890C5F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C604: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -1952,7 +1881,6 @@ L_0890C63C: AOT_REGCACHE_SYNC_OUT(); return; L_0890C644: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890C73C; } @@ -1962,7 +1890,6 @@ L_0890C64C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890C73C; } @@ -2000,7 +1927,6 @@ L_0890C68C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890C73C; } @@ -2025,7 +1951,6 @@ L_0890C6C0: L_0890C6D0: ctx.gpr[19] = (0u | 1u); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0890C744; } @@ -2079,7 +2004,6 @@ L_0890C728: AOT_REGCACHE_SYNC_OUT(); return; L_0890C734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C774; } @@ -2087,7 +2011,6 @@ L_0890C734: } L_0890C73C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C774; } @@ -2112,7 +2035,6 @@ L_0890C754: goto L_0890C75C; L_0890C75C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C6E4; } @@ -2122,7 +2044,6 @@ L_0890C764: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(680))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890C6E4; } @@ -2144,7 +2065,17 @@ L_0890C774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2155,7 +2086,6 @@ L_0890C798: AOT_REGCACHE_SYNC_OUT(); return; L_0890C7AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890C7D0; } @@ -2172,7 +2102,6 @@ L_0890C7B4: } L_0890C7C0: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_0890C7F8; } @@ -2180,7 +2109,6 @@ L_0890C7C0: } L_0890C7C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C7F8; } @@ -2204,7 +2132,6 @@ L_0890C7D8: } L_0890C7E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C7F8; } @@ -2237,7 +2164,17 @@ L_0890C7FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C80C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; @@ -2249,7 +2186,6 @@ L_0890C80C: } L_0890C818: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0890C848; } @@ -2257,7 +2193,6 @@ L_0890C818: } L_0890C820: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890C848; } @@ -2273,7 +2208,6 @@ L_0890C828: } L_0890C830: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C848; } @@ -2300,11 +2234,20 @@ L_0890C848: goto L_0890C84C; L_0890C84C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890C854: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2339,7 +2282,6 @@ L_0890C898: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(36), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0890C8C0; } @@ -2356,7 +2298,6 @@ L_0890C8C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C930; } @@ -2400,7 +2341,6 @@ L_0890C90C: AOT_REGCACHE_SYNC_OUT(); return; L_0890C928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890CA60; } @@ -2411,7 +2351,6 @@ L_0890C930: aot_gpr_4 = (8u << 16u); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C988; } @@ -2420,7 +2359,6 @@ L_0890C930: L_0890C944: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1372))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C988; } @@ -2456,7 +2394,6 @@ L_0890C988: aot_gpr_4 = (16u << 16u); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890C9FC; } @@ -2470,7 +2407,6 @@ L_0890C998: AOT_REGCACHE_SYNC_OUT(); return; L_0890C9A4: aot_gpr_31 = (0x0890C9ACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890C9ACu) goto L_0890C9AC; AOT_REGCACHE_SYNC_OUT(); return; L_0890C9AC: @@ -2509,7 +2445,6 @@ L_0890C9FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890CA60; } @@ -2526,7 +2461,6 @@ L_0890CA0C: } L_0890CA18: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890CA38; } @@ -2585,12 +2519,21 @@ L_0890CA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CA8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890CAA8; } @@ -2630,7 +2573,6 @@ L_0890CAD4: goto L_0890CADC; L_0890CADC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890CAEC; } @@ -2648,7 +2590,17 @@ L_0890CAEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CAF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2666,7 +2618,6 @@ L_0890CB14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48)))))); aot_gpr_5 = (0u | 146u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890CB80; } @@ -2685,7 +2636,6 @@ L_0890CB3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890CB64; } @@ -2719,7 +2669,6 @@ L_0890CB80: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890CBC8; } @@ -2742,7 +2691,6 @@ L_0890CBA0: } L_0890CBB0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890CC58; } @@ -2755,7 +2703,6 @@ L_0890CBB8: AOT_REGCACHE_SYNC_OUT(); return; L_0890CBC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890CC58; } @@ -2765,7 +2712,6 @@ L_0890CBC8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_6 = (0u | 65u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890CC58; } @@ -2776,7 +2722,6 @@ L_0890CBD8: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (aot_gpr_4 | 4u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), aot_gpr_4); if (branch_taken) { @@ -2806,7 +2751,6 @@ L_0890CC08: } L_0890CC18: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890CC58; } @@ -2819,7 +2763,6 @@ L_0890CC20: AOT_REGCACHE_SYNC_OUT(); return; L_0890CC28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890CC58; } @@ -2842,7 +2785,6 @@ L_0890CC38: } L_0890CC48: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890CC58; } @@ -2865,7 +2807,17 @@ L_0890CC58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CC6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2888,13 +2840,22 @@ L_0890CC90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CCA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(456))); aot_gpr_6 = (8192u << 16u); aot_gpr_6 = (aot_gpr_4 & aot_gpr_6); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0890CCC4; } @@ -2908,11 +2869,20 @@ L_0890CCB4: goto L_0890CCC4; L_0890CCC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CCCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2923,7 +2893,6 @@ L_0890CCCC: aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890CD50; } @@ -2934,7 +2903,6 @@ L_0890CCF4: aot_gpr_5 = (16u << 16u); aot_gpr_5 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890CD50; } @@ -2944,7 +2912,6 @@ L_0890CD08: aot_gpr_16 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_16); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890CD50; } @@ -2953,7 +2920,6 @@ L_0890CD08: L_0890CD18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1372))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890CD50; } @@ -3003,7 +2969,17 @@ L_0890CD64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CD78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -3051,7 +3027,17 @@ L_0890CDE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890CDF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3075,7 +3061,6 @@ L_0890CE20: goto L_0890D44C; L_0890CE28: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890CE40; } @@ -3083,7 +3068,6 @@ L_0890CE28: } L_0890CE30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890CE60; } @@ -3091,7 +3075,6 @@ L_0890CE30: } L_0890CE38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890CFEC; } @@ -3127,7 +3110,6 @@ L_0890CE60: L_0890CE70: aot_gpr_6 = (0u | 242u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890CE90; } @@ -3136,7 +3118,6 @@ L_0890CE70: L_0890CE7C: aot_gpr_6 = (0u | 238u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890CF28; } @@ -3212,7 +3193,6 @@ L_0890CF14: } L_0890CF20: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890CF44; } @@ -3241,7 +3221,6 @@ L_0890CF44: } L_0890CF50: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890CF74; } @@ -3270,7 +3249,6 @@ L_0890CF74: } L_0890CF80: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890CFA4; } @@ -3299,7 +3277,6 @@ L_0890CFA4: } L_0890CFB0: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890CFD0; } @@ -3318,7 +3295,6 @@ L_0890CFCC: goto L_0890CFD0; L_0890CFD0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890CFE0; } @@ -3346,7 +3322,17 @@ L_0890CFEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D004: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3364,7 +3350,6 @@ L_0890D020: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); aot_gpr_5 = (0u | 147u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890D08C; } @@ -3411,7 +3396,17 @@ L_0890D08C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D0A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3441,7 +3436,6 @@ L_0890D0A0: AOT_REGCACHE_SYNC_OUT(); return; L_0890D0D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890D20C; } @@ -3491,7 +3485,6 @@ L_0890D0E0: } L_0890D170: { const bool branch_taken = static_cast(aot_gpr_16) <= 0; - // nop if (branch_taken) { goto L_0890D1C0; } @@ -3521,7 +3514,6 @@ L_0890D188: } L_0890D194: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0890D1B4; } @@ -3529,7 +3521,6 @@ L_0890D194: } L_0890D19C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D1C0; } @@ -3558,7 +3549,6 @@ L_0890D1BC: goto L_0890D1C0; L_0890D1C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890D1E8; } @@ -3624,7 +3614,6 @@ L_0890D20C: AOT_REGCACHE_SYNC_OUT(); return; L_0890D228: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890D2BC; } @@ -3694,7 +3683,17 @@ L_0890D2D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D2E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3742,7 +3741,6 @@ L_0890D324: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890D384; } @@ -3759,7 +3757,6 @@ L_0890D354: AOT_REGCACHE_SYNC_OUT(); return; L_0890D36C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890D37C; } @@ -3775,7 +3772,6 @@ L_0890D374: } L_0890D37C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D394; } @@ -3795,7 +3791,17 @@ L_0890D394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D3A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3824,7 +3830,6 @@ L_0890D3A4: AOT_REGCACHE_SYNC_OUT(); return; L_0890D3D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890D424; } @@ -3857,7 +3862,6 @@ L_0890D408: AOT_REGCACHE_SYNC_OUT(); return; L_0890D41C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D43C; } @@ -3879,11 +3883,20 @@ L_0890D43C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D44C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890D460; } @@ -3902,11 +3915,20 @@ L_0890D460: goto L_0890D464; L_0890D464: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D46C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_5 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); @@ -3919,7 +3941,6 @@ L_0890D46C: } L_0890D47C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890D48C; } @@ -3938,11 +3959,20 @@ L_0890D48C: goto L_0890D490; L_0890D490: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D498: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3953,7 +3983,6 @@ L_0890D498: AOT_REGCACHE_SYNC_OUT(); return; L_0890D4C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890D4E0; } @@ -3963,7 +3992,6 @@ L_0890D4D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890D4FC; } @@ -3980,7 +4008,6 @@ L_0890D4E0: goto L_0890D4F4; L_0890D4F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D628; } @@ -3988,7 +4015,6 @@ L_0890D4F4: } L_0890D4FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D628; } @@ -3997,7 +4023,6 @@ L_0890D4FC: L_0890D504: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890D628; } @@ -4033,7 +4058,6 @@ L_0890D544: AOT_REGCACHE_SYNC_OUT(); return; L_0890D554: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890D608; } @@ -4092,9 +4116,7 @@ L_0890D55C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890D608; } @@ -4108,7 +4130,6 @@ L_0890D5A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(25)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890D608; } @@ -4118,7 +4139,6 @@ L_0890D5C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890D608; } @@ -4144,7 +4164,6 @@ L_0890D5E8: AOT_REGCACHE_SYNC_OUT(); return; L_0890D600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D628; } @@ -4184,7 +4203,17 @@ L_0890D628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D654: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4195,7 +4224,6 @@ L_0890D654: AOT_REGCACHE_SYNC_OUT(); return; L_0890D670: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890D688; } @@ -4205,7 +4233,6 @@ L_0890D678: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890D6A8; } @@ -4225,7 +4252,6 @@ L_0890D688: } L_0890D6A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D7A0; } @@ -4233,7 +4259,6 @@ L_0890D6A0: } L_0890D6A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890D7A0; } @@ -4275,7 +4300,6 @@ L_0890D6F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(48)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890D75C; } @@ -4287,7 +4311,6 @@ L_0890D708: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890D740; } @@ -4298,7 +4321,6 @@ L_0890D720: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(144))); aot_gpr_6 = (ctx.gpr[17] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0890D740; } @@ -4316,7 +4338,6 @@ L_0890D740: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890D708; } @@ -4334,7 +4355,6 @@ L_0890D75C: L_0890D768: aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890D794; } @@ -4369,14 +4389,34 @@ L_0890D7A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D7B8: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2264), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D7C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4389,7 +4429,6 @@ L_0890D7C0: goto L_0890D44C; L_0890D7E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890D7F4; } @@ -4413,7 +4452,17 @@ L_0890D7F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D80C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1364))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -4422,7 +4471,17 @@ L_0890D80C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D81C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -4447,7 +4506,6 @@ L_0890D848: AOT_REGCACHE_SYNC_OUT(); return; L_0890D850: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890D9CC; } @@ -4456,7 +4514,6 @@ L_0890D850: L_0890D858: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890D9CC; } @@ -4466,7 +4523,6 @@ L_0890D864: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890D9CC; } @@ -4475,7 +4531,6 @@ L_0890D864: L_0890D874: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(562))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890D9CC; } @@ -4486,7 +4541,6 @@ L_0890D880: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890D9CC; } @@ -4509,7 +4563,6 @@ L_0890D8B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -4519,9 +4572,7 @@ L_0890D8B0: } L_0890D8C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890D8E0; } @@ -4537,7 +4588,6 @@ L_0890D8D8: } L_0890D8E0: aot_gpr_31 = (0x0890D8E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890D8E8u) goto L_0890D8E8; AOT_REGCACHE_SYNC_OUT(); return; L_0890D8E8: @@ -4558,7 +4608,6 @@ L_0890D900: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -4568,9 +4617,7 @@ L_0890D900: } L_0890D918: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890D930; } @@ -4586,7 +4633,6 @@ L_0890D928: } L_0890D930: aot_gpr_31 = (0x0890D938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890D938u) goto L_0890D938; AOT_REGCACHE_SYNC_OUT(); return; L_0890D938: @@ -4601,7 +4647,6 @@ L_0890D93C: L_0890D94C: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0890D960; @@ -4609,9 +4654,7 @@ L_0890D94C: goto L_0890D960; L_0890D960: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890D9CC; } @@ -4633,7 +4676,6 @@ L_0890D970: } L_0890D990: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890D9C0; } @@ -4674,7 +4716,17 @@ L_0890D9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890D9E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1740))); @@ -4687,7 +4739,6 @@ L_0890D9E8: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(76), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890DA2C; } @@ -4696,7 +4747,6 @@ L_0890D9E8: L_0890DA20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890DAD0; } @@ -4727,7 +4777,6 @@ L_0890DA48: AOT_REGCACHE_SYNC_OUT(); return; L_0890DA54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890DC50; } @@ -4745,7 +4794,6 @@ L_0890DA5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(172))); aot_gpr_4 = (static_cast(aot_gpr_4) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890DABC; } @@ -4770,7 +4818,6 @@ L_0890DAA8: AOT_REGCACHE_SYNC_OUT(); return; L_0890DAB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890DC50; } @@ -4784,7 +4831,6 @@ L_0890DABC: AOT_REGCACHE_SYNC_OUT(); return; L_0890DAC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890DC50; } @@ -4822,7 +4868,6 @@ L_0890DAEC: AOT_REGCACHE_SYNC_OUT(); return; L_0890DB04: aot_gpr_31 = (0x0890DB0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890DB0Cu) goto L_0890DB0C; AOT_REGCACHE_SYNC_OUT(); return; L_0890DB0C: @@ -4839,7 +4884,6 @@ L_0890DB0C: } L_0890DB24: aot_gpr_31 = (0x0890DB2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890DB2Cu) goto L_0890DB2C; AOT_REGCACHE_SYNC_OUT(); return; L_0890DB2C: @@ -4910,9 +4954,7 @@ L_0890DB5C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890DBB8; } @@ -4931,9 +4973,7 @@ L_0890DBA8: L_0890DBB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890DBD8; } @@ -4960,9 +5000,7 @@ L_0890DBD8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890DC50; } @@ -4978,7 +5016,6 @@ L_0890DC00: L_0890DC10: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890DC34; } @@ -5024,7 +5061,17 @@ L_0890DC50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890DC74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -5045,7 +5092,6 @@ L_0890DC90: AOT_REGCACHE_SYNC_OUT(); return; L_0890DC98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890DCB8; } @@ -5054,7 +5100,6 @@ L_0890DC98: L_0890DCA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890DCB8; } @@ -5074,7 +5119,17 @@ L_0890DCB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890DCC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5082,7 +5137,6 @@ L_0890DCC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890DD84; } @@ -5091,7 +5145,6 @@ L_0890DCC8: L_0890DCE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890DD30; } @@ -5102,7 +5155,6 @@ L_0890DCF0: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890DD30; } @@ -5123,7 +5175,6 @@ L_0890DD14: goto L_0890C42C; L_0890DD28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890DDD0; } @@ -5137,7 +5188,6 @@ L_0890DD30: AOT_REGCACHE_SYNC_OUT(); return; L_0890DD3C: aot_gpr_31 = (0x0890DD44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890DD44u) goto L_0890DD44; AOT_REGCACHE_SYNC_OUT(); return; L_0890DD44: @@ -5162,7 +5212,6 @@ L_0890DD58: AOT_REGCACHE_SYNC_OUT(); return; L_0890DD7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890DDD0; } @@ -5176,7 +5225,6 @@ L_0890DD84: AOT_REGCACHE_SYNC_OUT(); return; L_0890DD90: aot_gpr_31 = (0x0890DD98u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890DD98u) goto L_0890DD98; AOT_REGCACHE_SYNC_OUT(); return; L_0890DD98: @@ -5207,7 +5255,17 @@ L_0890DDD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890DDE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5221,7 +5279,6 @@ L_0890DDE0: AOT_REGCACHE_SYNC_OUT(); return; L_0890DE00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890DF10; } @@ -5230,7 +5287,6 @@ L_0890DE00: L_0890DE08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890DF10; } @@ -5239,7 +5295,6 @@ L_0890DE08: L_0890DE14: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_0890DE94; } @@ -5251,7 +5306,6 @@ L_0890DE20: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890DE48; } @@ -5277,7 +5331,6 @@ L_0890DE50: goto L_0890D44C; L_0890DE58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890DE9C; } @@ -5290,7 +5343,6 @@ L_0890DE60: aot_gpr_6 = (aot_gpr_6 & 496u); aot_gpr_6 = (aot_gpr_6 >> 4u); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890DE9C; } @@ -5325,7 +5377,6 @@ L_0890DE9C: } L_0890DEAC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890DEBC; } @@ -5352,7 +5403,6 @@ L_0890DED4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890DEF8; } @@ -5366,7 +5416,6 @@ L_0890DEE4: AOT_REGCACHE_SYNC_OUT(); return; L_0890DEF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890DF04; } @@ -5391,7 +5440,17 @@ L_0890DF10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890DF20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5428,7 +5487,17 @@ L_0890DF58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890DF64: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5474,7 +5543,6 @@ L_0890DF64: } L_0890DFB0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890DFC8; } @@ -5502,7 +5570,6 @@ L_0890DFC8: aot_gpr_6 = (aot_gpr_6 | 5243u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (15897u << 16u); goto L_0890E198; @@ -5514,9 +5581,7 @@ L_0890DFE8: aot_gpr_6 = (aot_gpr_6 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890E090; } @@ -5560,7 +5625,6 @@ L_0890E008: aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.gpr[17] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_29 + static_cast(16)); if (branch_taken) { @@ -5570,7 +5634,6 @@ L_0890E008: } L_0890E088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E150; } @@ -5657,7 +5720,6 @@ L_0890E110: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_20 = aot_fpr_13 / aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0890E134; @@ -5681,7 +5743,6 @@ L_0890E134: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E190; } @@ -5730,7 +5791,6 @@ L_0890E150: AOT_REGCACHE_SYNC_OUT(); return; L_0890E190: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E1D4; } @@ -5798,7 +5858,6 @@ L_0890E1D4: AOT_REGCACHE_SYNC_OUT(); return; L_0890E210: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890E220; } @@ -5830,12 +5889,21 @@ L_0890E224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E244: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 55u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890E268; } @@ -5846,7 +5914,6 @@ L_0890E254: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (ctx.gpr[10] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890E270; } @@ -5865,7 +5932,6 @@ L_0890E270: ctx.gpr[9] = (0u | 0u); aot_gpr_5 = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890E2F0; } @@ -5881,7 +5947,6 @@ L_0890E28C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(1784))); ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(1360))); { const bool branch_taken = ctx.gpr[11] != aot_gpr_6; - // nop if (branch_taken) { goto L_0890E2C0; } @@ -5890,7 +5955,6 @@ L_0890E28C: L_0890E2A4: ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(2196))); { const bool branch_taken = ctx.gpr[11] != aot_gpr_5; - // nop if (branch_taken) { goto L_0890E2C0; } @@ -5900,7 +5964,6 @@ L_0890E2B0: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(1156))); ctx.gpr[11] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1156))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_0890E2E0; } @@ -5912,7 +5975,6 @@ L_0890E2C0: ctx.gpr[9] = (static_cast(static_cast(ctx.gpr[9]) >> 16u)); ctx.gpr[7] = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0890E28C; } @@ -5920,7 +5982,6 @@ L_0890E2C0: } L_0890E2D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E2F0; } @@ -5941,11 +6002,20 @@ L_0890E2F0: goto L_0890E2F4; L_0890E2F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E2FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -5956,7 +6026,6 @@ L_0890E2FC: AOT_REGCACHE_SYNC_OUT(); return; L_0890E310: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890E368; } @@ -5988,7 +6057,6 @@ L_0890E338: goto L_0890E340; L_0890E340: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890E368; } @@ -6000,7 +6068,6 @@ L_0890E348: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890E370; } @@ -6008,7 +6075,6 @@ L_0890E348: } L_0890E360: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E3A4; } @@ -6016,7 +6082,6 @@ L_0890E360: } L_0890E368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E5DC; } @@ -6031,7 +6096,6 @@ L_0890E370: L_0890E37C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E39C; } @@ -6045,7 +6109,6 @@ L_0890E388: AOT_REGCACHE_SYNC_OUT(); return; L_0890E394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E5DC; } @@ -6053,7 +6116,6 @@ L_0890E394: } L_0890E39C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E5DC; } @@ -6068,7 +6130,6 @@ L_0890E3A4: AOT_REGCACHE_SYNC_OUT(); return; L_0890E3B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890E3F4; } @@ -6083,7 +6144,6 @@ L_0890E3BC: AOT_REGCACHE_SYNC_OUT(); return; L_0890E3CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890E3EC; } @@ -6093,7 +6153,6 @@ L_0890E3D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(311))); aot_gpr_5 = (0u | 26u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890E3FC; } @@ -6109,7 +6168,6 @@ L_0890E3E4: } L_0890E3EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E5DC; } @@ -6117,7 +6175,6 @@ L_0890E3EC: } L_0890E3F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E5DC; } @@ -6149,9 +6206,7 @@ L_0890E3FC: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890E498; } @@ -6185,7 +6240,6 @@ L_0890E468: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890E4A0; } @@ -6193,7 +6247,6 @@ L_0890E468: } L_0890E488: { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0890E4A0; } @@ -6209,7 +6262,6 @@ L_0890E490: } L_0890E498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E5DC; } @@ -6225,7 +6277,6 @@ L_0890E4A0: L_0890E4B0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E4C8; } @@ -6246,7 +6297,6 @@ L_0890E4C8: L_0890E4D8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E4F0; } @@ -6267,7 +6317,6 @@ L_0890E4F0: L_0890E500: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E518; } @@ -6288,7 +6337,6 @@ L_0890E518: L_0890E528: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E540; } @@ -6311,7 +6359,6 @@ L_0890E544: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E57C; } @@ -6376,7 +6423,17 @@ L_0890E5DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E5EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -6395,7 +6452,6 @@ L_0890E608: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E628; } @@ -6431,7 +6487,6 @@ L_0890E634: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890E754; } @@ -6442,7 +6497,6 @@ L_0890E648: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(904)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E668; } @@ -6451,7 +6505,6 @@ L_0890E648: L_0890E65C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(904)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890E680; } @@ -6509,9 +6562,7 @@ L_0890E69C: aot_fpr_12 = std::sqrt(aot_fpr_12); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2060))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890E724; } @@ -6525,7 +6576,6 @@ L_0890E6F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(906)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E724; } @@ -6542,7 +6592,6 @@ L_0890E724: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(906)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(904)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890E74C; } @@ -6580,7 +6629,17 @@ L_0890E754: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E768: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(460))); ctx.gpr[7] = (1024u << 16u); @@ -6597,7 +6656,17 @@ L_0890E768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6642,7 +6711,6 @@ L_0890E7E0: goto L_0890E7E8; L_0890E7E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890E7F8; } @@ -6665,7 +6733,17 @@ L_0890E7F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E818: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1340))); jump_target = aot_gpr_31; @@ -6673,7 +6751,17 @@ L_0890E818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890E824: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_gpr_6 | 0u); @@ -6699,7 +6787,6 @@ L_0890E858: goto L_0890E860; L_0890E860: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890EA88; } @@ -6751,7 +6838,6 @@ L_0890E898: } L_0890E8A0: { const bool branch_taken = aot_gpr_6 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0890EA38; } @@ -6766,7 +6852,6 @@ L_0890E8A8: AOT_REGCACHE_SYNC_OUT(); return; L_0890E8B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_0890E8D4; @@ -6810,7 +6895,6 @@ L_0890E8F8: AOT_REGCACHE_SYNC_OUT(); return; L_0890E908: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_0890E924; @@ -6854,7 +6938,6 @@ L_0890E948: AOT_REGCACHE_SYNC_OUT(); return; L_0890E958: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_0890E974; @@ -6898,7 +6981,6 @@ L_0890E998: AOT_REGCACHE_SYNC_OUT(); return; L_0890E9A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_0890E9C4; @@ -6942,7 +7024,6 @@ L_0890E9E8: AOT_REGCACHE_SYNC_OUT(); return; L_0890E9F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_0890EA14; @@ -6986,7 +7067,6 @@ L_0890EA38: AOT_REGCACHE_SYNC_OUT(); return; L_0890EA48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_0890EA64; @@ -7035,7 +7115,17 @@ L_0890EA88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EAA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), aot_gpr_16); @@ -7047,7 +7137,6 @@ L_0890EAA4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(124), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890EB70; } @@ -7140,7 +7229,6 @@ L_0890EB58: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890ECF8; } @@ -7150,7 +7238,6 @@ L_0890EB70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890ECF8; } @@ -7194,7 +7281,6 @@ L_0890EBD0: goto L_0890D44C; L_0890EBD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890EC14; } @@ -7231,7 +7317,6 @@ L_0890EC14: L_0890EC18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1676))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0890ECE0; } @@ -7307,7 +7392,6 @@ L_0890ECE0: goto L_0890D44C; L_0890ECE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890ECF8; } @@ -7329,7 +7413,17 @@ L_0890ECF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890ED0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7359,7 +7453,6 @@ L_0890ED38: goto L_0890ED40; L_0890ED40: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890EDF4; } @@ -7397,7 +7490,6 @@ L_0890ED78: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890EDF4; } @@ -7407,7 +7499,6 @@ L_0890EDA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890EDF4; } @@ -7451,7 +7542,17 @@ L_0890EDF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EE04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -7470,7 +7571,6 @@ L_0890EE04: L_0890EE34: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890EE48; } @@ -7498,7 +7598,6 @@ L_0890EE60: goto L_0890D44C; L_0890EE68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890EE74; } @@ -7519,7 +7618,6 @@ L_0890EE80: goto L_0890D44C; L_0890EE88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890EEA0; } @@ -7584,7 +7682,17 @@ L_0890EEEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EF00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7643,21 +7751,51 @@ L_0890EF7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EF8C: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(1916), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EF94: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1916))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EF9C: aot_gpr_5 = (0u | 2u); jump_target = aot_gpr_31; @@ -7665,13 +7803,22 @@ L_0890EF9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EFA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1931))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0890EFC4; } @@ -7694,7 +7841,17 @@ L_0890EFD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890EFDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -7715,14 +7872,33 @@ L_0890EFF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F004: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F00C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7759,7 +7935,6 @@ L_0890F00C: L_0890F064: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_0890F16C; } @@ -7781,7 +7956,6 @@ L_0890F070: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0890F084u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0171_entry, 171u, 52u, 0x08AB044Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890F084u) goto L_0890F084; AOT_REGCACHE_SYNC_OUT(); return; L_0890F084: @@ -7864,9 +8038,7 @@ L_0890F0F4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0890F16C; } @@ -7922,7 +8094,17 @@ L_0890F16C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F188: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_20)); @@ -7954,7 +8136,6 @@ L_0890F188: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); if (branch_taken) { @@ -7964,7 +8145,6 @@ L_0890F188: } L_0890F1C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0890F1DC; @@ -7992,7 +8172,6 @@ L_0890F1E8: goto L_0890F1EC; L_0890F1EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16073u << 16u); if (branch_taken) { @@ -8016,7 +8195,6 @@ L_0890F200: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16639u << 16u); if (branch_taken) { @@ -8064,7 +8242,17 @@ L_0890F27C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F28C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8089,7 +8277,17 @@ L_0890F2B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F2C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8141,7 +8339,17 @@ L_0890F314: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F33C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8201,7 +8409,17 @@ L_0890F39C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F3BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8261,14 +8479,23 @@ L_0890F41C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F43C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (aot_gpr_5 ^ 58u); aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0890F494; } @@ -8277,7 +8504,6 @@ L_0890F43C: L_0890F454: aot_gpr_6 = (0u | 65u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0890F48C; } @@ -8286,7 +8512,6 @@ L_0890F454: L_0890F460: aot_gpr_6 = (0u | 45u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0890F484; } @@ -8304,7 +8529,6 @@ L_0890F46C: } L_0890F47C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F4B0; } @@ -8338,7 +8562,6 @@ L_0890F49C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890F4B0; } @@ -8352,11 +8575,20 @@ L_0890F4B0: goto L_0890F4B4; L_0890F4B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -8364,7 +8596,6 @@ L_0890F4BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(176), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(180), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0890F528; } @@ -8374,7 +8605,6 @@ L_0890F4D8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_6 = (aot_gpr_6 & 512u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0890F520; } @@ -8386,7 +8616,6 @@ L_0890F4E8: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0890F518; } @@ -8404,7 +8633,6 @@ L_0890F500: } L_0890F510: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F554; } @@ -8612,7 +8840,6 @@ L_0890F5A0: AOT_REGCACHE_SYNC_OUT(); return; L_0890F620: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890F630; } @@ -8637,7 +8864,17 @@ L_0890F634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F644: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8662,14 +8899,33 @@ L_0890F660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F68C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F694: { const bool branch_taken = aot_gpr_5 == 0u; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(780), aot_gpr_5); @@ -8686,24 +8942,42 @@ L_0890F69C: goto L_0890F6AC; L_0890F6AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F6B4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(780))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F6BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890F6D8; } @@ -8719,7 +8993,6 @@ L_0890F6D0: } L_0890F6D8: aot_gpr_31 = (0x0890F6E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 666u, 0x08A673F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890F6E0u) goto L_0890F6E0; AOT_REGCACHE_SYNC_OUT(); return; L_0890F6E0: @@ -8729,7 +9002,17 @@ L_0890F6E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F6EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(448))); @@ -8764,7 +9047,6 @@ L_0890F728: L_0890F730: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(448))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890F748; } @@ -8871,7 +9153,6 @@ L_0890F748: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F7A0; } @@ -8907,12 +9188,21 @@ L_0890F7A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F7BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(448))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0890F7E0; } @@ -8934,7 +9224,6 @@ L_0890F7CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F820; } @@ -9010,7 +9299,6 @@ L_0890F7E0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F820; } @@ -9022,7 +9310,17 @@ L_0890F820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F828: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), ctx.gpr[17]); @@ -9104,7 +9402,6 @@ L_0890F850: AOT_REGCACHE_SYNC_OUT(); return; L_0890F888: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F898; } @@ -9174,7 +9471,6 @@ L_0890F8AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0890F8D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890F8D8u) goto L_0890F8D8; AOT_REGCACHE_SYNC_OUT(); return; L_0890F8D8: @@ -9198,7 +9494,17 @@ L_0890F8D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F908: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -9277,7 +9583,6 @@ L_0890F924: AOT_REGCACHE_SYNC_OUT(); return; L_0890F95C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890F96C; } @@ -9314,7 +9619,17 @@ L_0890F96C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890F994: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9322,7 +9637,6 @@ L_0890F994: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(448))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890F9B8; } @@ -9346,7 +9660,6 @@ L_0890F9B8: AOT_REGCACHE_SYNC_OUT(); return; L_0890F9D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890FA0C; } @@ -9384,7 +9697,17 @@ L_0890FA0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -9413,7 +9736,6 @@ L_0890FA68: } L_0890FA74: aot_gpr_31 = (0x0890FA7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0890FA7Cu) goto L_0890FA7C; AOT_REGCACHE_SYNC_OUT(); return; L_0890FA7C: @@ -9428,7 +9750,6 @@ L_0890FA7C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890FAC0; } @@ -9436,7 +9757,6 @@ L_0890FA7C: } L_0890FAAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890FAD0; } @@ -9445,7 +9765,6 @@ L_0890FAAC: L_0890FAB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890FAD0; } @@ -9469,7 +9788,6 @@ L_0890FAD0: goto L_0890FAD4; L_0890FAD4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0890FA68; } @@ -9489,7 +9807,17 @@ L_0890FADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FAF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -9686,7 +10014,17 @@ L_0890FC60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FC94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -9720,11 +10058,20 @@ L_0890FCC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FCD8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890FD0C; } @@ -9736,7 +10083,6 @@ L_0890FCE4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0890FD04; } @@ -9764,18 +10110,26 @@ L_0890FD0C: goto L_0890FD14; L_0890FD14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FD1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1032), aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0890FD44; } @@ -9783,7 +10137,6 @@ L_0890FD1C: } L_0890FD34: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890FD44; } @@ -9801,13 +10154,22 @@ L_0890FD44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FD50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890FD84; } @@ -9816,7 +10178,6 @@ L_0890FD50: L_0890FD64: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1028))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890FD7C; } @@ -9825,7 +10186,6 @@ L_0890FD64: L_0890FD70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1032))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890FD94; } @@ -9846,7 +10206,6 @@ L_0890FD84: AOT_REGCACHE_SYNC_OUT(); return; L_0890FD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890FDB4; } @@ -9854,7 +10213,6 @@ L_0890FD8C: } L_0890FD94: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0890FD7C; } @@ -9868,7 +10226,6 @@ L_0890FD9C: AOT_REGCACHE_SYNC_OUT(); return; L_0890FDA8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890FD7C; } @@ -9884,13 +10241,22 @@ L_0890FDB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FDC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0890FDF4; } @@ -9899,7 +10265,6 @@ L_0890FDC0: L_0890FDD4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1028))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0890FDEC; } @@ -9908,7 +10273,6 @@ L_0890FDD4: L_0890FDE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1032))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0890FE04; } @@ -9929,7 +10293,6 @@ L_0890FDF4: AOT_REGCACHE_SYNC_OUT(); return; L_0890FDFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890FE24; } @@ -9937,7 +10300,6 @@ L_0890FDFC: } L_0890FE04: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0890FDEC; } @@ -9951,7 +10313,6 @@ L_0890FE0C: AOT_REGCACHE_SYNC_OUT(); return; L_0890FE18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0890FDEC; } @@ -9967,7 +10328,17 @@ L_0890FE24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -10029,7 +10400,17 @@ L_0890FEC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -10063,7 +10444,6 @@ L_0890FEF4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0890FF44; } @@ -10119,28 +10499,68 @@ L_0890FF44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FF54: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1132), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FF5C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1132))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FF64: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1032), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0890FF6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -10154,7 +10574,6 @@ L_0890FF6C: AOT_REGCACHE_SYNC_OUT(); return; L_0890FF90: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0890FFB0; } @@ -10164,7 +10583,6 @@ L_0890FF98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0890FFC0; } @@ -10180,7 +10598,6 @@ L_0890FFA8: } L_0890FFB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 2u, 0x08910004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10188,7 +10605,6 @@ L_0890FFB0: } L_0890FFB8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0890FFC8; } diff --git a/profiles/vcs/generated/generated_unit_0067.cpp b/profiles/vcs/generated/generated_unit_0067.cpp index ae8aa14..1ad213f 100644 --- a/profiles/vcs/generated/generated_unit_0067.cpp +++ b/profiles/vcs/generated/generated_unit_0067.cpp @@ -7,125 +7,29 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0067[3758] = { - 1, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 6, 0, 7, 0, 8, 9, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, - 0, 23, 0, 24, 0, 25, 26, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, - 32, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 38, - 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 41, 0, 42, 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, - 0, 0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 53, - 0, 0, 54, 0, 0, 55, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, - 63, 0, 64, 0, 65, 0, 0, 66, 0, 67, 0, 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 73, - 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 0, 0, 79, 0, 80, 0, 0, 0, 0, 81, 0, 0, 82, - 0, 83, 84, 0, 85, 0, 0, 86, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 104, 0, 105, 0, - 106, 0, 0, 107, 0, 108, 0, 109, 0, 0, 110, 0, 0, 111, 0, 112, 0, 113, 0, 114, 0, 0, 115, 0, 116, 117, 0, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 123, 124, 0, 0, 0, 0, 125, - 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 128, 0, 129, 0, 0, 130, 0, 0, 0, 131, 132, 0, 133, 0, 0, 134, 0, - 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 0, 138, 0, 0, 0, 0, 139, 140, 141, 0, 142, 0, 0, 143, 0, 0, 144, 0, 145, 0, 0, 146, - 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, - 153, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, 0, - 159, 0, 160, 0, 161, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 167, 0, 168, - 0, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 172, 0, 173, 0, 174, 0, 0, 175, 0, 176, 0, 177, 0, 178, 179, - 0, 180, 0, 181, 182, 0, 0, 183, 0, 184, 0, 185, 0, 0, 186, 0, 187, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, - 0, 191, 0, 0, 192, 0, 193, 0, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 199, - 0, 200, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 0, 205, 206, 0, 207, 208, 0, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, - 211, 0, 0, 0, 0, 212, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 215, 0, 216, 217, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, - 225, 0, 0, 0, 226, 0, 227, 0, 228, 0, 0, 229, 0, 230, 0, 0, 0, 231, 232, 0, 233, 0, 234, 0, 0, 0, 235, 236, 0, 237, 0, 238, - 0, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, - 0, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 252, - 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 256, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 263, 0, 0, 0, - 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 266, 0, 267, 0, 268, 0, 0, 269, 0, 0, 270, 0, 0, 0, 271, 0, 272, - 0, 273, 0, 274, 0, 275, 0, 0, 0, 276, 0, 0, 277, 0, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, - 0, 0, 0, 284, 0, 285, 0, 286, 287, 0, 288, 0, 0, 0, 0, 289, 0, 0, 0, 290, 0, 291, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 295, 0, 296, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 300, 0, 301, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 307, 0, 0, 308, 0, - 309, 310, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 0, 0, 315, 0, 316, 0, 317, 0, 318, 0, 0, 319, - 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 326, 0, 0, 0, - 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 332, - 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 0, 336, 0, 0, 0, 337, 0, 338, 0, 339, 0, 0, 340, 341, 0, 342, 0, 0, 0, - 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, - 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, 0, 351, 0, 352, 353, 0, 0, 0, - 354, 0, 0, 355, 0, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 363, 0, 364, 365, 0, 0, - 0, 0, 0, 366, 0, 0, 367, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 371, - 0, 372, 0, 0, 0, 373, 0, 374, 0, 0, 375, 0, 0, 376, 0, 377, 378, 0, 0, 0, 0, 379, 0, 0, 380, 0, 381, 0, 382, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 388, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 393, 0, 394, 0, 395, - 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 401, 402, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, - 405, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 410, 0, 411, 0, 412, 0, 0, - 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 416, 0, 0, - 0, 417, 0, 0, 418, 0, 419, 0, 420, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, - 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 0, 439, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 0, - 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 455, 0, 456, 0, 0, 0, 457, 0, 0, 0, - 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, - 0, 465, 0, 466, 0, 467, 0, 468, 0, 0, 469, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 473, 474, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, - 0, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 482, 0, 483, 0, 484, 485, 0, 486, 0, 0, 0, 487, 488, 0, 489, 0, 490, 0, 491, - 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 497, 498, 499, 0, 500, 501, 0, 502, 0, - 503, 0, 504, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 513, 0, 514, 0, 0, - 515, 0, 516, 0, 0, 0, 517, 0, 518, 0, 0, 519, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 0, 0, 527, 0, - 528, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 0, 535, 0, 0, 536, 0, 537, 0, 0, 0, 0, 538, 539, 0, 0, 0, - 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 545, 0, 546, 0, 0, 0, 0, 547, 548, 0, 0, - 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 551, 0, 0, 0, 552, 0, 0, 553, 0, 554, 0, 0, 0, 0, 555, 556, 0, 0, 0, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, - 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 0, 570, 571, 0, 0, 572, 0, 0, 573, 0, 574, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 0, 579, 0, - 0, 0, 0, 580, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, - 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 590, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 596, 0, 0, 597, 0, 598, 0, 599, 0, 0, 600, 0, 601, 0, 0, 0, 0, 0, - 0, 0, 0, 602, 0, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 609, 0, 0, 610, 0, 0, 0, 0, - 0, 0, 0, 611, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, - 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 0, - 621, 0, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, - 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 632, 0, 633, 0, - 634, 0, 635, 0, 0, 636, 0, 637, 638, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 641, 0, 642, 0, 643, 0, 644, 0, - 645, 0, 0, 0, 0, 0, 0, 646, 647, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 651, 0, 652, - 0, 653, 0, 654, 0, 0, 0, 655, 0, 0, 656, 657, 0, 658, 0, 659, 0, 660, 0, 0, 0, 661, 662, 0, 0, 0, 0, 0, 663, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 664, 0, 0, 665, 0, 666, 0, 667, 0, 668, 0, 669, 0, 0, 0, 670, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 678, 0, 0, - 679, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 0, - 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 689, 0, 0, 690, 0, 691, 0, 692, 0, 693, 0, 0, 0, 694, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, - 0, 697, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 700, 0, 0, 0, 701, 0, 0, 0, 0, 702, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, - 0, 707, 0, 0, 0, 0, 708, 0, 709, 0, 710, 0, 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 713, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 716, 0, 717, 0, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 725, 0, 726, 727, 0, 728, 0, 729, - 0, 730, 0, 0, 0, 731, 0, 732, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 735, 0, 736, 0, 0, - 0, 737, 0, 0, 738, 739, 740, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 0, 0, - 0, 744, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, 748, 749, 0, 750, 0, 751, 0, 752, - 0, 753, 0, 754, 0, 0, 755, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 0, - 0, 760, 0, 0, 761, 0, 0, 0, 762, 0, 0, 0, 763, 0, 764, 0, 765, 0, 0, 766, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 768, - 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, - 0, 774, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 776, 0, 777, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 779, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 781, 0, 782, 0, 783, 0, 0, 784, 0, 0, 0, 785, 0, 0, 786, 0, 0, 0, 787, 0, - 788, 0, 789, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 792, 0, 0, - 0, 793, 0, 794, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 801, 0, 0, 802, 0, 803, 0, 0, 0, 804, 0, 0, 805, 0, 0, 0, 0, 0, 0, 806, 0, - 0, 0, 0, 0, 0, 0, 807, 0, 0, 808, 0, 809, 0, 810, 0, 811, 812, 0, 813, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 0, 816, - 0, 0, 817, 0, 0, 0, 0, 818, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 821, 0, 0, 822, 0, - 0, 823, 0, 0, 824, 825, 0, 826, 0, 0, 0, 0, 0, 827, 0, 828, 0, 0, 829, 0, 0, 0, 830, 0, 0, 0, 0, 0, 831, 0, 832, 0, - 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 0, 0, 836, 837, 0, 0, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 841, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 848, - 0, 0, 0, 0, 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 854, 0, 0, 855, 0, 0, 856, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 0, 858, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0067[59] = { + 0x0481251026A82103ull, 0x44080A6A82110200ull, 0x4021522084120049ull, 0x280854A4A8084A10ull, + 0x90A54042A5010A95ull, 0x0440208001205096ull, 0x0B4AA4A952A920A2ull, 0x4B12C00486900140ull, + 0x042090149497088Aull, 0xA204885548022009ull, 0xA0214A9AD52A02A0ull, 0x029B228A82884852ull, + 0x48085200020D1121ull, 0x88004248AC562951ull, 0x1AAA888888888888ull, 0x10AA922AA24A8801ull, + 0x2900A28820A885A8ull, 0x9541105349015080ull, 0xC010410212824140ull, 0x0000009016544910ull, + 0x1A50002124000000ull, 0x9000054834145549ull, 0x228090801521A4A2ull, 0x20005AAAA8900480ull, + 0x240400202A121009ull, 0x8210010040204152ull, 0x1152A01421084210ull, 0x1148840082224924ull, + 0x005014AA24244204ull, 0xAB16A11008088823ull, 0x28510AAD5B888881ull, 0x080000414554A945ull, + 0x1852240400000040ull, 0x1852281030A45408ull, 0x0020000080520408ull, 0x2930144810000001ull, + 0x0408A52842220080ull, 0x052A444801000C0Aull, 0x4080428809085548ull, 0x010A012109008040ull, + 0x552009A551108102ull, 0x1062AC8AA9004181ull, 0x2AA000801062AA40ull, 0x010A108808800005ull, + 0x0844102240028AA4ull, 0x0002154202082080ull, 0xAD02148040212851ull, 0x090010722C0040A2ull, + 0x2410104AAB108202ull, 0x0410504082095112ull, 0x4489510021028102ull, 0x00100AAA28000045ull, + 0x8825AA4040914880ull, 0x5044A0B249000284ull, 0x80000000100C1410ull, 0x402000400020A000ull, + 0x0000000000800000ull, 0x0024001080004000ull, 0x0000210009240008ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0067[59] = { + 1u, 18u, 32u, 46u, 63u, 83u, 95u, 119u, 135u, 153u, 169u, 191u, 211u, 225u, 245u, 264u, + 284u, 302u, 320u, 333u, 345u, 354u, 372u, 389u, 405u, 417u, 428u, 443u, 458u, 473u, 492u, 515u, + 531u, 540u, 557u, 564u, 575u, 588u, 602u, 617u, 627u, 645u, 664u, 679u, 689u, 703u, 713u, 730u, + 744u, 760u, 774u, 788u, 800u, 817u, 833u, 840u, 846u, 847u, 852u, }; void recomp_unit_0067_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -146,13 +50,25 @@ void recomp_unit_0067_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08910000u; - entry_id = (entry_delta < 15032u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0067[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 15032u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0067[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0067[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08910000; @@ -1036,13 +952,22 @@ L_08910004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910020: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910064; } @@ -1054,7 +979,6 @@ L_08910034: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0891005C; } @@ -1067,7 +991,6 @@ L_0891004C: AOT_REGCACHE_SYNC_OUT(); return; L_08910054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910068; } @@ -1091,7 +1014,17 @@ L_08910068: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -1114,7 +1047,6 @@ L_08910090: AOT_REGCACHE_SYNC_OUT(); return; L_089100A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089100B4; } @@ -1143,7 +1075,17 @@ L_089100B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089100C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -1201,13 +1143,22 @@ L_08910140: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910150: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910194; } @@ -1219,7 +1170,6 @@ L_08910164: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0891018C; } @@ -1232,7 +1182,6 @@ L_0891017C: AOT_REGCACHE_SYNC_OUT(); return; L_08910184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910198; } @@ -1256,14 +1205,34 @@ L_08910198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089101A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1128))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089101AC: aot_gpr_5 = (aot_gpr_5 + static_cast(1120)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1276,7 +1245,17 @@ L_089101AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089101CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -1299,7 +1278,6 @@ L_089101E8: AOT_REGCACHE_SYNC_OUT(); return; L_089101F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891020C; } @@ -1328,7 +1306,17 @@ L_0891020C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910218: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1356,7 +1344,6 @@ L_08910218: L_08910244: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089102C0; } @@ -1366,9 +1353,7 @@ L_08910250: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891027C; } @@ -1377,9 +1362,7 @@ L_08910250: L_08910268: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089102B8; } @@ -1391,7 +1374,6 @@ L_0891027C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089102C0; } @@ -1412,7 +1394,6 @@ L_089102A4: AOT_REGCACHE_SYNC_OUT(); return; L_089102B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089102C0; } @@ -1435,7 +1416,17 @@ L_089102C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089102D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1445,7 +1436,6 @@ L_089102D4: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0891032C; } @@ -1455,9 +1445,7 @@ L_089102F8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891032C; } @@ -1466,9 +1454,7 @@ L_089102F8: L_08910310: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891032C; } @@ -1486,7 +1472,17 @@ L_0891032C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910338: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1120), std::bit_cast(aot_fpr_12)); @@ -1496,7 +1492,17 @@ L_08910338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891034C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1533,7 +1539,6 @@ L_0891037C: L_08910388: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891039C; } @@ -1547,7 +1552,6 @@ L_08910394: L_0891039C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089103B8; } @@ -1555,7 +1559,6 @@ L_0891039C: } L_089103A8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_089103B8; } @@ -1578,7 +1581,17 @@ L_089103B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089103CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1609,7 +1622,6 @@ L_089103F4: } L_08910400: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910410; } @@ -1623,7 +1635,6 @@ L_08910408: L_08910410: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891042C; } @@ -1631,7 +1642,6 @@ L_08910410: } L_0891041C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0891042C; } @@ -1654,7 +1664,17 @@ L_0891042C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910440: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1685,7 +1705,6 @@ L_08910468: } L_08910474: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910484; } @@ -1708,7 +1727,17 @@ L_08910484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910498: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1739,7 +1768,6 @@ L_089104C0: L_089104C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089104DC; } @@ -1762,11 +1790,20 @@ L_089104DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089104F0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910504; } @@ -1785,15 +1822,23 @@ L_08910504: goto L_08910508; L_08910508: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910510: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08910530; } @@ -1819,11 +1864,20 @@ L_0891051C: goto L_08910530; L_08910530: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910538: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -1896,7 +1950,17 @@ L_089105D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089105E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -1919,7 +1983,6 @@ L_08910604: AOT_REGCACHE_SYNC_OUT(); return; L_08910614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910634; } @@ -1941,11 +2004,20 @@ L_08910634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910640: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910654; } @@ -1953,7 +2025,6 @@ L_08910640: } L_0891064C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891065C; } @@ -1965,15 +2036,23 @@ L_08910654: goto L_0891065C; L_0891065C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910664: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910678; } @@ -1981,7 +2060,6 @@ L_08910664: } L_08910670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910678; } @@ -1989,15 +2067,23 @@ L_08910670: } L_08910678: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910680: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910694; } @@ -2005,7 +2091,6 @@ L_08910680: } L_0891068C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910694; } @@ -2013,15 +2098,23 @@ L_0891068C: } L_08910694: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891069C: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089106BC; } @@ -2030,7 +2123,6 @@ L_0891069C: L_089106A8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1032))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089106D8; } @@ -2038,7 +2130,6 @@ L_089106A8: } L_089106B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089106C4; } @@ -2054,7 +2145,6 @@ L_089106BC: } L_089106C4: { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_089106D8; } @@ -2063,7 +2153,6 @@ L_089106C4: L_089106CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1028))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_089106E0; } @@ -2082,11 +2171,20 @@ L_089106E0: goto L_089106E4; L_089106E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089106EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -2141,7 +2239,6 @@ L_08910720: L_08910750: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1032))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08910764; } @@ -2170,11 +2267,20 @@ L_08910768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891077C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089107B8; } @@ -2203,15 +2309,23 @@ L_089107B8: goto L_089107BC; L_089107BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089107C4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089107E0; } @@ -2232,15 +2346,23 @@ L_089107E0: goto L_089107E4; L_089107E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089107EC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0891080C; } @@ -2288,7 +2410,6 @@ L_0891082C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08910844; } @@ -2302,15 +2423,23 @@ L_08910844: goto L_08910848; L_08910848: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910850: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08910868; } @@ -2334,15 +2463,23 @@ L_0891085C: goto L_08910868; L_08910868: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910870: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910888; } @@ -2355,11 +2492,20 @@ L_0891087C: goto L_08910888; L_08910888: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910890: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -2399,7 +2545,17 @@ L_089108D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089108E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -2436,7 +2592,17 @@ L_08910934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910944: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); @@ -2461,7 +2627,6 @@ L_0891096C: AOT_REGCACHE_SYNC_OUT(); return; L_08910978: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08910990; } @@ -2469,7 +2634,6 @@ L_08910978: } L_08910980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089109FC; } @@ -2477,7 +2641,6 @@ L_08910980: } L_08910988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089109FC; } @@ -2491,9 +2654,7 @@ L_08910990: L_08910998: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089109C8; } @@ -2503,7 +2664,6 @@ L_089109AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089109FC; } @@ -2523,9 +2683,7 @@ L_089109C8: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089109FC; } @@ -2535,7 +2693,6 @@ L_089109E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089109FC; } @@ -2558,7 +2715,17 @@ L_089109FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910A14: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -2569,11 +2736,20 @@ L_08910A14: } L_08910A1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2590,7 +2766,6 @@ L_08910A24: } L_08910A44: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910A90; } @@ -2598,7 +2773,6 @@ L_08910A44: } L_08910A4C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08910A90; } @@ -2607,7 +2781,6 @@ L_08910A4C: L_08910A54: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08910A70; } @@ -2615,7 +2788,6 @@ L_08910A54: } L_08910A60: aot_gpr_31 = (0x08910A68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 78u, 0x08B00578u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08910A68u) goto L_08910A68; AOT_REGCACHE_SYNC_OUT(); return; L_08910A68: @@ -2636,7 +2808,6 @@ L_08910A78: goto L_08910A7C; L_08910A7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910A8C; } @@ -2653,7 +2824,6 @@ L_08910A8C: L_08910A90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910AA4; } @@ -2675,7 +2845,6 @@ L_08910AA4: L_08910AAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910AC0; } @@ -2698,7 +2867,17 @@ L_08910AC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910AD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2729,7 +2908,6 @@ L_08910AFC: L_08910B04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910B18; } @@ -2752,7 +2930,17 @@ L_08910B18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910B2C: ctx.gpr[2] = (aot_gpr_4 ^ 10u); jump_target = aot_gpr_31; @@ -2760,13 +2948,22 @@ L_08910B2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910B38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910B84; } @@ -2796,11 +2993,20 @@ L_08910B64: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12904))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910B7C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -2826,7 +3032,6 @@ L_08910B8C: AOT_REGCACHE_SYNC_OUT(); return; L_08910B9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910BD0; } @@ -2845,7 +3050,6 @@ L_08910BA4: L_08910BB4: aot_gpr_6 = (0u | 38u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910BC4; } @@ -2872,14 +3076,33 @@ L_08910BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910BDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910BE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -2965,7 +3188,6 @@ L_08910C64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910CB8; } @@ -2974,7 +3196,6 @@ L_08910C64: L_08910CA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08910CB8; } @@ -2997,7 +3218,17 @@ L_08910CB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910CCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[17]); @@ -3015,7 +3246,6 @@ L_08910CCC: L_08910CEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08910D18; } @@ -3023,7 +3253,6 @@ L_08910CEC: } L_08910CF8: aot_gpr_31 = (0x08910D00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 78u, 0x08B00578u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08910D00u) goto L_08910D00; AOT_REGCACHE_SYNC_OUT(); return; L_08910D00: @@ -3035,7 +3264,6 @@ L_08910D00: AOT_REGCACHE_SYNC_OUT(); return; L_08910D10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910D8C; } @@ -3100,7 +3328,6 @@ L_08910D6C: AOT_REGCACHE_SYNC_OUT(); return; L_08910D74: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08910D8C; } @@ -3136,7 +3363,17 @@ L_08910DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1929)))))); @@ -3150,7 +3387,6 @@ L_08910DB8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08910EE4; } @@ -3160,7 +3396,6 @@ L_08910DEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 19u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3170,7 +3405,6 @@ L_08910DFC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 20u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3180,7 +3414,6 @@ L_08910E0C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 24u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3190,7 +3423,6 @@ L_08910E1C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 25u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3200,7 +3432,6 @@ L_08910E2C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 26u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3210,7 +3441,6 @@ L_08910E3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 27u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3220,7 +3450,6 @@ L_08910E4C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3230,7 +3459,6 @@ L_08910E5C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 10u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3240,7 +3468,6 @@ L_08910E6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3250,7 +3477,6 @@ L_08910E7C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910EDC; } @@ -3260,7 +3486,6 @@ L_08910E8C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910ED4; } @@ -3270,7 +3495,6 @@ L_08910E9C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_16 = (0u | 33u); { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08910ED4; } @@ -3280,7 +3504,6 @@ L_08910EAC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 35u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08910ED4; } @@ -3288,12 +3511,10 @@ L_08910EAC: } L_08910EBC: aot_gpr_31 = (0x08910EC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 161u, 0x08A40D58u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08910EC4u) goto L_08910EC4; AOT_REGCACHE_SYNC_OUT(); return; L_08910EC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08910EEC; } @@ -3317,7 +3538,6 @@ L_08910ED4: } L_08910EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910EF0; } @@ -3342,7 +3562,17 @@ L_08910EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08910F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3373,7 +3603,6 @@ L_08910F3C: AOT_REGCACHE_SYNC_OUT(); return; L_08910F44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08910F8C; } @@ -3382,7 +3611,6 @@ L_08910F44: L_08910F4C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08910F8C; } @@ -3391,7 +3619,6 @@ L_08910F4C: L_08910F58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08910F8C; } @@ -3409,7 +3636,6 @@ L_08910F64: } L_08910F74: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08910F94; } @@ -3426,7 +3652,6 @@ L_08910F84: goto L_08910F8C; L_08910F8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911074; } @@ -3436,7 +3661,6 @@ L_08910F94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(68)))))); ctx.gpr[18] = (0u | 9u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08910FB0; } @@ -3445,7 +3669,6 @@ L_08910F94: L_08910FA4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(695))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08910FC4; } @@ -3460,7 +3683,6 @@ L_08910FB0: goto L_08910FBC; L_08910FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08910FD4; } @@ -3468,7 +3690,6 @@ L_08910FBC: } L_08910FC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911074; } @@ -3476,7 +3697,6 @@ L_08910FC4: } L_08910FCC: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08911014; } @@ -3484,7 +3704,6 @@ L_08910FCC: } L_08910FD4: aot_gpr_31 = (0x08910FDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08910FDCu) goto L_08910FDC; AOT_REGCACHE_SYNC_OUT(); return; L_08910FDC: @@ -3518,7 +3737,6 @@ L_0891100C: } L_08911014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911074; } @@ -3529,7 +3747,6 @@ L_0891101C: goto L_08911020; L_08911020: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0891103C; } @@ -3554,7 +3771,6 @@ L_0891103C: goto L_0891104C; L_0891104C: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08911074; } @@ -3562,7 +3778,6 @@ L_0891104C: } L_08911054: aot_gpr_31 = (0x0891105Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891105Cu) goto L_0891105C; AOT_REGCACHE_SYNC_OUT(); return; L_0891105C: @@ -3590,7 +3805,17 @@ L_08911074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891108C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1952))); ctx.gpr[8] = (0u + static_cast(-1)); @@ -3603,7 +3828,6 @@ L_0891108C: } L_0891109C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089110B4; } @@ -3617,11 +3841,20 @@ L_089110A4: goto L_089110B4; L_089110B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089110BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2060), std::bit_cast(aot_fpr_12)); @@ -3673,21 +3906,51 @@ L_0891111C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911130: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2248))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911138: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2248), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911140: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -3715,7 +3978,6 @@ L_0891116C: goto L_08911178; L_08911178: aot_gpr_31 = (0x08911180u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08911180u) goto L_08911180; AOT_REGCACHE_SYNC_OUT(); return; L_08911180: @@ -3751,7 +4013,6 @@ L_089111B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089111F0; } @@ -3763,7 +4024,6 @@ L_089111C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089111F0; } @@ -3771,7 +4031,6 @@ L_089111C0: } L_089111D8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089111E8; } @@ -3779,7 +4038,6 @@ L_089111D8: } L_089111E0: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089111F0; } @@ -3787,7 +4045,6 @@ L_089111E0: } L_089111E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089111FC; } @@ -3796,7 +4053,6 @@ L_089111E8: L_089111F0: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0891116C; } @@ -3816,14 +4072,34 @@ L_089111FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911218: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2116))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911220: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -3836,7 +4112,6 @@ L_08911220: L_08911238: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911270; } @@ -3848,7 +4123,6 @@ L_08911244: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08911264; } @@ -3865,7 +4139,6 @@ L_0891125C: L_08911264: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08911244; } @@ -3880,7 +4153,17 @@ L_08911270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911284: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -3926,7 +4209,6 @@ L_089112D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089112FC; } @@ -3944,7 +4226,17 @@ L_089112FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911310: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1780)))))); ctx.gpr[2] = (aot_gpr_4 & 2u); @@ -3953,11 +4245,20 @@ L_08911310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911320: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08911348; } @@ -3966,7 +4267,6 @@ L_08911320: L_0891132C: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08911350; } @@ -3984,7 +4284,6 @@ L_08911338: } L_08911348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911368; } @@ -3992,7 +4291,6 @@ L_08911348: } L_08911350: { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_08911364; } @@ -4008,11 +4306,20 @@ L_08911364: goto L_08911368; L_08911368: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911370: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2144))); @@ -4095,7 +4402,6 @@ L_0891139C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(2180), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911480; } @@ -4104,7 +4410,6 @@ L_0891139C: L_08911468: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911480; } @@ -4128,7 +4433,17 @@ L_08911480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911494: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(476))); @@ -4161,7 +4476,6 @@ L_089114D8: goto L_089114E4; L_089114E4: aot_gpr_31 = (0x089114ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089114ECu) goto L_089114EC; AOT_REGCACHE_SYNC_OUT(); return; L_089114EC: @@ -4187,7 +4501,6 @@ L_0891150C: goto L_08911518; L_08911518: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_089115A0; } @@ -4200,7 +4513,6 @@ L_08911520: AOT_REGCACHE_SYNC_OUT(); return; L_08911528: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08911728; } @@ -4215,7 +4527,6 @@ L_08911538: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(48)))))); aot_gpr_5 = (0u | 413u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08911728; } @@ -4238,7 +4549,6 @@ L_08911550: goto L_08911568; L_08911568: aot_gpr_31 = (0x08911570u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08911570u) goto L_08911570; AOT_REGCACHE_SYNC_OUT(); return; L_08911570: @@ -4261,7 +4571,6 @@ L_0891158C: AOT_REGCACHE_SYNC_OUT(); return; L_08911598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911728; } @@ -4269,7 +4578,6 @@ L_08911598: } L_089115A0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08911728; } @@ -4345,7 +4653,6 @@ L_08911604: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(48)))))); aot_gpr_5 = (0u | 414u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08911628; } @@ -4370,7 +4677,6 @@ L_08911628: goto L_08911634; L_08911634: aot_gpr_31 = (0x0891163Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891163Cu) goto L_0891163C; AOT_REGCACHE_SYNC_OUT(); return; L_0891163C: @@ -4397,7 +4703,6 @@ L_08911660: AOT_REGCACHE_SYNC_OUT(); return; L_08911668: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089116F4; } @@ -4493,9 +4798,7 @@ L_089116F4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08911728; } @@ -4523,11 +4826,20 @@ L_08911728: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911750: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08911774; } @@ -4537,7 +4849,6 @@ L_0891175C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089117A4; } @@ -4593,7 +4904,6 @@ L_08911794: } L_0891179C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089117AC; } @@ -4612,11 +4922,20 @@ L_089117AC: goto L_089117B0; L_089117B0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089117B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -4656,7 +4975,6 @@ L_0891180C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911850; } @@ -4691,7 +5009,6 @@ L_08911864: goto L_0891186C; L_0891186C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089118E8; } @@ -4766,7 +5083,6 @@ L_08911910: goto L_08911918; L_08911918: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089119A0; } @@ -4778,7 +5094,6 @@ L_08911920: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089119A0; } @@ -4837,13 +5152,22 @@ L_089119A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089119D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(43) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08911A88; } @@ -4855,11 +5179,20 @@ L_089119E4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12688))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089119FC: aot_gpr_4 = (0u | 60u); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); @@ -4939,11 +5272,20 @@ L_08911A74: } L_08911A88: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4963,7 +5305,6 @@ L_08911AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08911ABC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08911AD0; } @@ -4990,7 +5331,6 @@ L_08911AE0: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-250)); aot_gpr_4 = (ctx.gpr[18] < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911B64; } @@ -5002,11 +5342,20 @@ L_08911AF0: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[18]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12512))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911B08: aot_gpr_4 = (0u | 6u); { const bool branch_taken = 0u == 0u; @@ -5085,7 +5434,17 @@ L_08911B64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911B7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), aot_gpr_16); @@ -5104,7 +5463,6 @@ L_08911BA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.gpr[17] = (0u | 173u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08911BF0; } @@ -5120,7 +5478,6 @@ L_08911BBC: L_08911BCC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911BE0; } @@ -5128,14 +5485,12 @@ L_08911BCC: } L_08911BD8: aot_gpr_31 = (0x08911BE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 620u, 0x0888FEB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08911BE0u) goto L_08911BE0; AOT_REGCACHE_SYNC_OUT(); return; L_08911BE0: ctx.gpr[18] = (ctx.gpr[18] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08911BBC; } @@ -5154,7 +5509,17 @@ L_08911BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911C08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5180,7 +5545,6 @@ L_08911C38: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08911C8C; } @@ -5203,7 +5567,6 @@ L_08911C54: L_08911C68: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911C84; } @@ -5217,7 +5580,6 @@ L_08911C74: goto L_08911C84; L_08911C84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911D14; } @@ -5230,7 +5592,6 @@ L_08911C8C: AOT_REGCACHE_SYNC_OUT(); return; L_08911C94: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_08911CB0; } @@ -5244,7 +5605,6 @@ L_08911C9C: AOT_REGCACHE_SYNC_OUT(); return; L_08911CA8: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08911CD8; } @@ -5335,7 +5695,17 @@ L_08911D4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911D6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5344,7 +5714,6 @@ L_08911D6C: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911DA0; } @@ -5354,7 +5723,6 @@ L_08911D90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08911DBC; } @@ -5373,7 +5741,6 @@ L_08911DA0: } L_08911DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911DC8; } @@ -5381,7 +5748,6 @@ L_08911DB4: } L_08911DBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911F80; } @@ -5392,7 +5758,6 @@ L_08911DC4: goto L_08911DC8; L_08911DC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911DE4; } @@ -5402,7 +5767,6 @@ L_08911DD0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08911DE4; } @@ -5413,7 +5777,6 @@ L_08911DE0: goto L_08911DE4; L_08911DE4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911E00; } @@ -5426,7 +5789,6 @@ L_08911DEC: AOT_REGCACHE_SYNC_OUT(); return; L_08911DF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08911E00; } @@ -5490,7 +5852,6 @@ L_08911E60: goto L_08911E64; L_08911E64: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08911E70; } @@ -5510,7 +5871,6 @@ L_08911E78: goto L_089101A4; L_08911E80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08911E8C; } @@ -5521,7 +5881,6 @@ L_08911E88: goto L_08911E8C; L_08911E8C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08911F68; } @@ -5544,7 +5903,6 @@ L_08911EAC: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911EC0; } @@ -5554,7 +5912,6 @@ L_08911EC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08911ED8; } @@ -5569,7 +5926,6 @@ L_08911ED8: aot_gpr_5 = (0u | 6u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08911F08; } @@ -5586,7 +5942,6 @@ L_08911EF4: goto L_08911F98; L_08911F00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911F48; } @@ -5596,7 +5951,6 @@ L_08911F08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08911F34; } @@ -5613,7 +5967,6 @@ L_08911F20: goto L_0891227C; L_08911F2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911F48; } @@ -5636,7 +5989,6 @@ L_08911F48: AOT_REGCACHE_SYNC_OUT(); return; L_08911F50: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08911F80; } @@ -5648,7 +6000,6 @@ L_08911F58: goto L_08912560; L_08911F60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08911F80; } @@ -5658,7 +6009,6 @@ L_08911F68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08911F80; } @@ -5681,7 +6031,17 @@ L_08911F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08911F98: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5806,7 +6166,6 @@ L_08912018: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08912088; @@ -5818,7 +6177,6 @@ L_08912088: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_089120A8; @@ -5827,7 +6185,6 @@ L_08912088: L_089120A8: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912130; } @@ -5849,7 +6206,6 @@ L_089120C4: goto L_089120D0; L_089120D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912128; } @@ -5858,9 +6214,7 @@ L_089120D0: L_089120D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08912128; } @@ -5893,7 +6247,6 @@ L_0891210C: AOT_REGCACHE_SYNC_OUT(); return; L_08912128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912228; } @@ -5901,7 +6254,6 @@ L_08912128: } L_08912130: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089121B4; } @@ -5923,7 +6275,6 @@ L_08912148: goto L_08912154; L_08912154: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089121AC; } @@ -5932,9 +6283,7 @@ L_08912154: L_0891215C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089121AC; } @@ -5967,7 +6316,6 @@ L_08912190: AOT_REGCACHE_SYNC_OUT(); return; L_089121AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912228; } @@ -5989,7 +6337,6 @@ L_089121C4: goto L_089121D0; L_089121D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912228; } @@ -5998,9 +6345,7 @@ L_089121D0: L_089121D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08912228; } @@ -6038,7 +6383,6 @@ L_08912228: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912258; } @@ -6047,7 +6391,6 @@ L_08912228: L_08912244: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912258; } @@ -6074,7 +6417,17 @@ L_08912258: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891227C: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6199,7 +6552,6 @@ L_08912300: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08912370; @@ -6253,7 +6605,6 @@ L_089123D0: L_089123D4: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089123F4; } @@ -6262,7 +6613,6 @@ L_089123D4: L_089123E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089123F4; } @@ -6290,7 +6640,17 @@ L_089123F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891241C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6355,7 +6715,6 @@ L_08912494: goto L_089124A0; L_089124A0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089124B4; } @@ -6441,7 +6800,17 @@ L_0891252C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912560: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6456,7 +6825,6 @@ L_08912560: L_0891258C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089125A8; } @@ -6466,7 +6834,6 @@ L_08912598: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089125CC; } @@ -6488,7 +6855,6 @@ L_089125B8: goto L_089125C4; L_089125C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089125E0; } @@ -6496,7 +6862,6 @@ L_089125C4: } L_089125CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089126F8; } @@ -6505,7 +6870,6 @@ L_089125CC: L_089125D4: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08912620; } @@ -6530,7 +6894,6 @@ L_089125E8: L_0891260C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08912628; } @@ -6538,7 +6901,6 @@ L_0891260C: } L_08912618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089126F8; } @@ -6546,7 +6908,6 @@ L_08912618: } L_08912620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089126F8; } @@ -6558,7 +6919,6 @@ L_08912628: goto L_089101A4; L_08912630: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089126F8; } @@ -6618,7 +6978,6 @@ L_0891268C: AOT_REGCACHE_SYNC_OUT(); return; L_0891269C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089126DC; } @@ -6671,7 +7030,17 @@ L_089126F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912718: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -6752,7 +7121,6 @@ L_089127A0: AOT_REGCACHE_SYNC_OUT(); return; L_089127C4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08912804; } @@ -6804,13 +7172,22 @@ L_08912820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891283C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08912860; } @@ -6820,7 +7197,6 @@ L_08912850: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(614)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08912878; } @@ -6830,7 +7206,6 @@ L_08912860: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(472))); aot_gpr_6 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08912880; } @@ -6868,7 +7243,6 @@ L_08912888: AOT_REGCACHE_SYNC_OUT(); return; L_08912894: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08912870; } @@ -6884,7 +7258,17 @@ L_089128A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089128AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6916,7 +7300,6 @@ L_089128E0: goto L_089128E8; L_089128E8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08912920; } @@ -6928,7 +7311,6 @@ L_089128F0: goto L_08910B38; L_089128F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08912920; } @@ -6941,7 +7323,6 @@ L_08912900: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_gpr_4 = (aot_gpr_4 | aot_gpr_6); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912920; } @@ -6963,7 +7344,17 @@ L_08912920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912938: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6995,7 +7386,6 @@ L_0891296C: goto L_08912974; L_08912974: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089129D8; } @@ -7007,7 +7397,6 @@ L_0891297C: goto L_08910B38; L_08912984: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089129D8; } @@ -7035,7 +7424,6 @@ L_089129A8: goto L_089129AC; L_089129AC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089129D8; } @@ -7056,7 +7444,6 @@ L_089129C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089129D8; } @@ -7078,7 +7465,17 @@ L_089129D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089129F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7110,7 +7507,6 @@ L_08912A24: goto L_08912A2C; L_08912A2C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08912A58; } @@ -7122,7 +7518,6 @@ L_08912A34: goto L_08910B38; L_08912A3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08912A58; } @@ -7132,7 +7527,6 @@ L_08912A44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912A58; } @@ -7154,7 +7548,17 @@ L_08912A58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912A70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); @@ -7184,7 +7588,6 @@ L_08912A9C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2092), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08912AD4; @@ -7205,7 +7608,6 @@ L_08912ADC: AOT_REGCACHE_SYNC_OUT(); return; L_08912AE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08912B08; } @@ -7219,7 +7621,6 @@ L_08912AEC: L_08912AF4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(332))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912B08; } @@ -7227,7 +7628,6 @@ L_08912AF4: } L_08912B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912BCC; } @@ -7278,7 +7678,6 @@ L_08912B6C: aot_fpr_12 = aot_fpr_14 - aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2092), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08912B8C; @@ -7286,7 +7685,6 @@ L_08912B6C: goto L_08912B8C; L_08912B8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2092), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7299,7 +7697,6 @@ L_08912B9C: aot_gpr_5 = (256u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08912BC4; } @@ -7333,7 +7730,17 @@ L_08912BCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912BE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7373,7 +7780,6 @@ L_08912C1C: } L_08912C24: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08912C3C; } @@ -7389,7 +7795,6 @@ L_08912C2C: goto L_08912C3C; L_08912C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912CD8; } @@ -7461,7 +7866,17 @@ L_08912CD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912CEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -7512,9 +7927,7 @@ L_08912D64: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08912DA0; } @@ -7533,7 +7946,6 @@ L_08912D84: } L_08912D98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912E54; } @@ -7541,7 +7953,6 @@ L_08912D98: } L_08912DA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912E54; } @@ -7549,7 +7960,6 @@ L_08912DA0: } L_08912DA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08912E54; } @@ -7602,9 +8012,7 @@ L_08912DC4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20376))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08912E40; } @@ -7619,7 +8027,6 @@ L_08912E00: AOT_REGCACHE_SYNC_OUT(); return; L_08912E10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08912E40; } @@ -7635,7 +8042,6 @@ L_08912E18: AOT_REGCACHE_SYNC_OUT(); return; L_08912E2C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08912E40; } @@ -7674,7 +8080,17 @@ L_08912E54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912E78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7683,7 +8099,6 @@ L_08912E78: { const std::uint32_t aot_run_words[3]{ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08912F74; } @@ -7692,7 +8107,6 @@ L_08912E78: L_08912E9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1744))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08912F04; } @@ -7700,7 +8114,6 @@ L_08912E9C: } L_08912EA8: aot_gpr_31 = (0x08912EB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08912EB0u) goto L_08912EB0; AOT_REGCACHE_SYNC_OUT(); return; L_08912EB0: @@ -7737,7 +8150,6 @@ L_08912EE8: goto L_08912EEC; L_08912EEC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08912EFC; } @@ -7763,7 +8175,6 @@ L_08912F04: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912F6C; } @@ -7771,7 +8182,6 @@ L_08912F04: } L_08912F14: aot_gpr_31 = (0x08912F1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08912F1Cu) goto L_08912F1C; AOT_REGCACHE_SYNC_OUT(); return; L_08912F1C: @@ -7814,7 +8224,6 @@ L_08912F74: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08912F94; } @@ -7845,7 +8254,17 @@ L_08912F98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08912FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7865,7 +8284,6 @@ L_08912FB0: L_08912FE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08913098; } @@ -7890,7 +8308,6 @@ L_08913004: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08913098; } @@ -7922,7 +8339,6 @@ L_08913050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08913064; } @@ -7938,7 +8354,6 @@ L_08913064: AOT_REGCACHE_SYNC_OUT(); return; L_0891306C: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_08913084; } @@ -7946,12 +8361,10 @@ L_0891306C: } L_08913074: aot_gpr_31 = (0x0891307Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891307Cu) goto L_0891307C; AOT_REGCACHE_SYNC_OUT(); return; L_0891307C: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08913098; } @@ -7959,7 +8372,6 @@ L_0891307C: } L_08913084: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08913098; } @@ -7984,7 +8396,17 @@ L_08913098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089130B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -8012,7 +8434,6 @@ L_089130D0: L_089130E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08913244; } @@ -8038,7 +8459,6 @@ L_08913110: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08913220; } @@ -8048,7 +8468,6 @@ L_08913120: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08913220; } @@ -8060,7 +8479,6 @@ L_08913130: goto L_08910B38; L_08913138: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08913220; } @@ -8069,7 +8487,6 @@ L_08913138: L_08913140: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089131B8; } @@ -8092,7 +8509,6 @@ L_08913164: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08913198; } @@ -8131,7 +8547,6 @@ L_08913198: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913260; } @@ -8139,7 +8554,6 @@ L_08913198: } L_089131B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891323C; } @@ -8162,7 +8576,6 @@ L_089131D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08913204; } @@ -8233,7 +8646,6 @@ L_08913220: goto L_0891323C; L_0891323C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913260; } @@ -8282,7 +8694,17 @@ L_08913260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08913274: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -8306,7 +8728,6 @@ L_089132A0: goto L_089132B0; L_089132B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089132CC; } @@ -8314,7 +8735,6 @@ L_089132B0: } L_089132B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8323,7 +8743,6 @@ L_089132B8: L_089132C0: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089132F8; } @@ -8333,7 +8752,6 @@ L_089132CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089132E8; } @@ -8342,7 +8760,6 @@ L_089132CC: L_089132DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089133A4; } @@ -8352,7 +8769,6 @@ L_089132E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891339C; } @@ -8364,7 +8780,6 @@ L_089132F8: goto L_089107EC; L_08913300: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08913394; } @@ -8422,9 +8837,7 @@ L_08913318: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891338C; } @@ -8439,7 +8852,6 @@ L_08913374: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089133AC; } @@ -8447,7 +8859,6 @@ L_08913374: } L_08913384: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8455,7 +8866,6 @@ L_08913384: } L_0891338C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8463,7 +8873,6 @@ L_0891338C: } L_08913394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8471,7 +8880,6 @@ L_08913394: } L_0891339C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8479,7 +8887,6 @@ L_0891339C: } L_089133A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8532,7 +8939,6 @@ L_0891341C: aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(906), static_cast(0u)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(904)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08913440; } @@ -8546,7 +8952,6 @@ L_0891342C: AOT_REGCACHE_SYNC_OUT(); return; L_08913438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08913478; } @@ -8592,11 +8997,20 @@ L_08913478: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08913498: aot_gpr_4 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089134B4; } @@ -8604,7 +9018,6 @@ L_08913498: } L_089134A4: { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_089134BC; } @@ -8631,11 +9044,20 @@ L_089134BC: goto L_089134C0; L_089134C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089134C8: ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(204)))))); jump_target = aot_gpr_31; @@ -8643,7 +9065,17 @@ L_089134C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089134D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -8677,14 +9109,34 @@ L_08913508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891351C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08913524: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -8705,7 +9157,6 @@ L_08913524: L_08913560: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08913594; } @@ -8720,7 +9171,6 @@ L_0891356C: L_08913578: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08913594; } @@ -8737,7 +9187,6 @@ L_08913590: goto L_08913594; L_08913594: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089135B4; } @@ -8747,9 +9196,7 @@ L_0891359C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891364C; } @@ -8757,7 +9204,6 @@ L_0891359C: } L_089135B4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089135C8; } @@ -8772,7 +9218,6 @@ L_089135C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089135F8; } @@ -8801,7 +9246,6 @@ L_089135F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08913630; } @@ -8852,7 +9296,17 @@ L_0891364C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08913670: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[22]); @@ -9208,7 +9662,6 @@ L_08913A6C: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(1900), 0u); aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(1904), 0u); aot_gpr_31 = (0x08913AA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08913AA0u) goto L_08913AA0; AOT_REGCACHE_SYNC_OUT(); return; L_08913AA0: diff --git a/profiles/vcs/generated/generated_unit_0068.cpp b/profiles/vcs/generated/generated_unit_0068.cpp index c3ee381..6934764 100644 --- a/profiles/vcs/generated/generated_unit_0068.cpp +++ b/profiles/vcs/generated/generated_unit_0068.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0068[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 0, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 34, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, - 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, 54, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 59, 0, 60, 0, 61, 0, 0, 0, 62, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 72, - 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 0, 76, 0, 77, 0, 0, 78, 0, 0, 0, 79, 0, 0, 80, 0, 0, 0, - 0, 81, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 85, 0, 0, 0, 86, 0, 0, 0, 87, 0, - 0, 88, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 96, 0, 97, 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, 0, 0, 100, 0, 101, 0, 0, 0, - 0, 102, 0, 0, 0, 0, 103, 104, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 108, 109, 0, 0, - 0, 0, 110, 0, 111, 0, 0, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 122, 0, 0, 123, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, - 126, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 133, 0, 134, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, - 140, 0, 141, 0, 142, 0, 143, 0, 0, 0, 0, 0, 144, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 147, 0, 148, 0, 149, 0, 0, 0, 150, - 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 157, - 158, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, - 163, 0, 0, 0, 0, 164, 0, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, 168, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 179, 0, 0, - 0, 180, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 186, 0, 0, - 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, - 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, - 195, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, - 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 0, 0, 0, 202, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 207, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 212, 213, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 216, 0, 217, 0, 218, - 0, 219, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 240, 0, 0, 0, 241, 242, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, - 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 249, 0, 250, 0, 251, 0, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, - 255, 0, 0, 256, 0, 257, 0, 258, 0, 259, 0, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, - 0, 0, 274, 0, 275, 0, 0, 0, 276, 0, 0, 0, 277, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 294, 0, - 0, 0, 295, 0, 0, 0, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 301, 0, 0, 0, 0, 0, - 302, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, - 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, - 0, 0, 326, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 330, 0, 331, 0, 332, 0, 0, 333, 0, 334, 0, 0, 0, - 335, 336, 0, 0, 337, 0, 0, 338, 0, 0, 339, 0, 0, 0, 340, 0, 341, 0, 342, 0, 0, 0, 343, 344, 0, 345, 0, 0, 0, 346, 347, 0, - 348, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, - 0, 0, 0, 354, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, 0, 357, 0, 358, 0, 359, 0, 0, 0, 360, 361, 0, 0, 362, 0, 0, 0, 363, - 0, 0, 0, 364, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, - 371, 0, 372, 0, 0, 373, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 380, 0, 381, 0, 382, 0, 383, 0, 0, 384, 0, 385, 0, 0, 386, 0, 0, 0, 387, 0, - 388, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, - 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 396, 397, 398, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 408, 0, 0, 0, 409, 0, 410, - 0, 411, 0, 412, 413, 0, 414, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 417, 418, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 0, - 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 426, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 0, - 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 433, 0, 434, 0, 0, 435, 0, 0, 436, 0, 437, 0, - 0, 0, 0, 438, 0, 0, 0, 439, 0, 0, 440, 0, 441, 0, 442, 0, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 0, 0, 0, 448, 0, - 449, 0, 450, 0, 451, 0, 0, 0, 0, 0, 452, 0, 453, 0, 454, 0, 455, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 458, 0, 0, 0, 0, - 0, 459, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 467, 0, - 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, 0, 471, 0, 472, 0, 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, - 484, 0, 485, 0, 0, 0, 486, 0, 487, 0, 0, 488, 0, 0, 489, 0, 490, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, - 0, 0, 0, 493, 0, 0, 494, 0, 0, 495, 0, 496, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 501, 0, 0, 502, 0, 0, 503, 0, 0, 504, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, - 507, 0, 0, 508, 0, 0, 509, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, - 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 517, 0, 0, 0, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, - 0, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 529, 0, 0, 0, 0, 0, 530, 0, - 0, 0, 531, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 535, 0, 536, 0, 537, - 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, 542, 0, 0, 543, 0, 0, 0, 544, 0, - 0, 545, 0, 0, 0, 546, 547, 0, 548, 0, 0, 549, 0, 550, 0, 0, 551, 0, 0, 552, 0, 553, 0, 0, 0, 554, 0, 0, 555, 556, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 561, 0, 0, - 0, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, 565, 0, 566, 0, 0, 0, 567, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 0, 570, 0, 0, - 0, 571, 0, 572, 0, 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 579, 0, 0, - 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 585, 586, 0, 0, 0, 587, 0, 588, 0, 0, 0, 0, - 0, 589, 0, 590, 0, 591, 0, 592, 0, 0, 0, 593, 0, 0, 0, 594, 595, 0, 0, 596, 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 599, 0, - 0, 0, 600, 0, 0, 601, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 605, 0, 0, 0, 606, 0, 0, 0, 607, 0, - 0, 0, 608, 0, 0, 0, 609, 0, 0, 0, 610, 0, 0, 0, 611, 0, 0, 0, 612, 0, 613, 0, 614, 0, 0, 0, 0, 0, 615, 0, 616, 0, - 0, 0, 617, 0, 0, 0, 618, 0, 619, 0, 620, 0, 0, 0, 621, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, - 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 0, 629, 0, 0, 0, - 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, 0, 632, 0, 0, 0, 633, 634, 0, 635, 0, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 0, 0, - 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 642, 0, - 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 646, 0, 0, 647, 648, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 650, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, 0, 655, 0, 0, 656, 0, 657, 0, 0, 0, 658, 0, - 0, 0, 659, 0, 0, 660, 0, 0, 661, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 663, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 670, 0, 671, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, - 0, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 677, 0, 678, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 682, 0, 0, - 0, 0, 0, 683, 0, 684, 0, 0, 685, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, - 0, 690, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 692, 0, 693, 0, 694, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 696, 0, 0, - 0, 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 699, 0, 700, 0, 0, 701, 0, 702, 0, 703, 0, 704, 0, 0, 705, 0, 0, 0, 706, 0, 0, - 707, 0, 0, 708, 0, 709, 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 713, 0, 714, 0, 715, 0, 0, 716, 0, 0, 0, 0, 0, - 0, 717, 718, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 721, 0, 722, 0, 0, 0, 723, 0, 724, 0, 725, 0, 726, - 0, 727, 0, 0, 728, 0, 729, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 732, 0, 733, 0, 734, 0, 735, - 0, 0, 0, 736, 0, 0, 0, 737, 738, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 740, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 742, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 745, 0, 0, 0, 0, 746, 0, 0, 747, 0, - 0, 0, 748, 0, 0, 0, 0, 749, 0, 0, 0, 0, 750, 0, 0, 751, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 753, 0, 754, 0, 755, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 757, 0, 0, 0, 0, 758, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 761, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0068[64] = { + 0x0000000000000001ull, 0x0000000000000000ull, 0x1000000000000000ull, 0x0084040044401441ull, + 0x1000821008100408ull, 0x144A002040400120ull, 0x0004000000001000ull, 0x0424021200000400ull, + 0x1080004010900848ull, 0x0248A9200612A204ull, 0x1225044480548811ull, 0x2804024244480122ull, + 0x310044C214602A40ull, 0x092100458000AA14ull, 0x0005111110001000ull, 0x8A905055111112A0ull, + 0x100C010180809888ull, 0x2902845001548A21ull, 0x0A00020420510142ull, 0x0204010140004084ull, + 0x0000042200000021ull, 0x00C4422200000214ull, 0x8102142AAA020000ull, 0x0001088000000840ull, + 0xC450888000008500ull, 0x285502AA02000000ull, 0x422000001220A2A9ull, 0x2220000021400000ull, + 0x0048828000003114ull, 0x0085000001088000ull, 0x000000C450888000ull, 0x1414090904400022ull, + 0x8010008000000000ull, 0x1002000000544400ull, 0x4010008000200808ull, 0x62C5449314A88904ull, + 0x898A92081040A005ull, 0x0410112528006448ull, 0x2020000544A55280ull, 0xA2A4420440A72124ull, + 0x500684442918815Aull, 0x42AA548852540220ull, 0x0000801209415415ull, 0x100D484444440440ull, + 0x0409400004409000ull, 0x00048A4880054945ull, 0x08808849206490A0ull, 0x110020540842A004ull, + 0xAA00404441440001ull, 0x3229296244888220ull, 0x21222A842A240000ull, 0x0A3222222444244Aull, + 0x44444424448988AAull, 0x0211454450544444ull, 0x1085890411104001ull, 0x001C889044410008ull, + 0x4522111200000000ull, 0x1120001000188124ull, 0x282451104440B000ull, 0x2042A10211201128ull, + 0x04A8152922552824ull, 0xAA020852AA280886ull, 0x4842010200501188ull, 0x8402850054409084ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0068[64] = { + 1u, 2u, 2u, 3u, 13u, 21u, 31u, 33u, 40u, 49u, 65u, 81u, 94u, 110u, 124u, 132u, + 151u, 163u, 180u, 191u, 199u, 204u, 214u, 227u, 232u, 243u, 255u, 268u, 274u, 284u, 290u, 298u, + 310u, 313u, 320u, 326u, 348u, 364u, 378u, 392u, 411u, 430u, 449u, 462u, 476u, 484u, 499u, 514u, + 526u, 538u, 557u, 571u, 589u, 608u, 625u, 638u, 650u, 659u, 669u, 683u, 697u, 717u, 736u, 748u, }; void recomp_unit_0068_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0068_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08914000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0068[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0068[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0068[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08914000; @@ -1120,14 +1027,12 @@ L_08914000: aot_gpr_4 = (aot_gpr_4 & ctx.gpr[11]); aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(476), aot_gpr_4); aot_gpr_31 = (0x089142F0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089142F0u) goto L_089142F0; AOT_REGCACHE_SYNC_OUT(); return; L_089142F0: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08914318; } @@ -1153,7 +1058,6 @@ L_08914318: goto L_08914328; L_08914328: aot_gpr_31 = (0x08914330u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08914330u) goto L_08914330; AOT_REGCACHE_SYNC_OUT(); return; L_08914330: @@ -1164,9 +1068,7 @@ L_08914330: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08914368; } @@ -1256,7 +1158,6 @@ L_08914428: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08914428; } @@ -1295,7 +1196,6 @@ L_089144A4: aot_gpr_4 = (17046u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089144BC; @@ -1406,12 +1306,10 @@ L_08914594: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089145C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089145C4u) goto L_089145C4; AOT_REGCACHE_SYNC_OUT(); return; L_089145C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089145F0; } @@ -1420,7 +1318,6 @@ L_089145C4: L_089145CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11832))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089145F0; } @@ -1430,7 +1327,6 @@ L_089145D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1360))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11832))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089145F0; } @@ -1463,7 +1359,17 @@ L_089145F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08914630: aot_gpr_29 = (aot_gpr_29 + static_cast(-816)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-13362)))))); @@ -1765,7 +1671,6 @@ L_08914908: aot_gpr_4 = (aot_gpr_4 + static_cast(36)); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089149D8; } @@ -1775,7 +1680,6 @@ L_08914924: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(708))); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_089149CC; } @@ -1797,7 +1701,6 @@ L_0891493C: L_08914944: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089149CC; } @@ -1808,7 +1711,6 @@ L_08914950: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089149CC; } @@ -1826,9 +1728,7 @@ L_08914968: { const float fs = ctx.fpr[28]; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089149CC; } @@ -1837,7 +1737,6 @@ L_08914968: L_08914994: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089149BC; } @@ -1846,7 +1745,6 @@ L_08914994: L_089149A0: aot_gpr_4 = (static_cast(ctx.gpr[21]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089149B4; } @@ -1862,7 +1760,6 @@ L_089149AC: } L_089149B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089149CC; } @@ -1877,7 +1774,6 @@ L_089149BC: L_089149CC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08914924; } @@ -1886,7 +1782,6 @@ L_089149CC: L_089149D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08914BA4; } @@ -1899,7 +1794,6 @@ L_089149E4: aot_gpr_4 = (aot_gpr_4 + static_cast(8)); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08914BA4; } @@ -1909,7 +1803,6 @@ L_08914A00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08914A48; } @@ -1953,7 +1846,6 @@ L_08914A48: } L_08914A50: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08914AC0; } @@ -1968,7 +1860,6 @@ L_08914A58: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08914AC0; } @@ -2000,7 +1891,6 @@ L_08914AA8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08914AC8; } @@ -2008,7 +1898,6 @@ L_08914AA8: } L_08914AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08914B98; } @@ -2017,7 +1906,6 @@ L_08914AC0: L_08914AC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08914AF0; } @@ -2067,9 +1955,7 @@ L_08914B20: { const float fs = ctx.fpr[28]; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08914B98; } @@ -2098,7 +1984,6 @@ L_08914B68: L_08914B78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08914B98; } @@ -2114,7 +1999,6 @@ L_08914B84: L_08914B98: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08914A00; } @@ -2241,7 +2125,6 @@ L_08914C98: L_08914C9C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(1912))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08914CE0; } @@ -2251,7 +2134,6 @@ L_08914CA8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(1912))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08914CE0; } @@ -2345,9 +2227,7 @@ L_08914D3C: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08914D80; } @@ -2358,7 +2238,6 @@ L_08914D7C: goto L_08914D80; L_08914D80: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08914DD4; } @@ -2368,7 +2247,6 @@ L_08914D88: aot_gpr_4 = (aot_gpr_16 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08914DC0; } @@ -2384,7 +2262,6 @@ L_08914D98: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08914D98; } @@ -2409,7 +2286,6 @@ L_08914DD4: L_08914DE0: aot_gpr_4 = (static_cast(aot_gpr_16) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08914D10; } @@ -2439,7 +2315,17 @@ L_08914DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08914E30: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -2457,7 +2343,6 @@ L_08914E70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08914F1C; } @@ -2467,7 +2352,6 @@ L_08914E80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08914F1C; } @@ -2477,7 +2361,6 @@ L_08914E90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08914F1C; } @@ -2487,7 +2370,6 @@ L_08914EA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08914F1C; } @@ -2497,7 +2379,6 @@ L_08914EB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08914F1C; } @@ -2534,7 +2415,6 @@ L_08914EC8: } L_08914F14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08914F60; } @@ -2542,7 +2422,6 @@ L_08914F14: } L_08914F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891629C; } @@ -2551,7 +2430,6 @@ L_08914F1C: L_08914F24: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1768))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08914F60; } @@ -2561,7 +2439,6 @@ L_08914F30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1768))); aot_gpr_5 = (aot_gpr_5 < static_cast(300) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08914F60; } @@ -2587,7 +2464,6 @@ L_08914F60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08914F88; } @@ -2597,7 +2473,6 @@ L_08914F70: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08914F90; } @@ -2605,7 +2480,6 @@ L_08914F70: } L_08914F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08914FE4; } @@ -2613,7 +2487,6 @@ L_08914F80: } L_08914F88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891629C; } @@ -2621,7 +2494,6 @@ L_08914F88: } L_08914F90: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891503C; } @@ -2633,7 +2505,6 @@ L_08914F98: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08914FB8; } @@ -2653,7 +2524,6 @@ L_08914FB8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08914FD0; } @@ -2662,7 +2532,6 @@ L_08914FB8: L_08914FD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08914F98; } @@ -2670,7 +2539,6 @@ L_08914FD0: } L_08914FDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891503C; } @@ -2678,7 +2546,6 @@ L_08914FDC: } L_08914FE4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891503C; } @@ -2688,7 +2555,6 @@ L_08914FEC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0891502C; } @@ -2698,7 +2564,6 @@ L_08914FFC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0891502C; } @@ -2708,7 +2573,6 @@ L_0891500C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0891502C; } @@ -2718,7 +2582,6 @@ L_0891501C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08915030; } @@ -2730,7 +2593,6 @@ L_0891502C: L_08915030: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08914FEC; } @@ -2752,7 +2614,6 @@ L_0891503C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089159EC; } @@ -2764,7 +2625,6 @@ L_0891505C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2284))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1929)))))); goto L_08915080; @@ -2781,7 +2641,6 @@ L_08915080: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089150C8; } @@ -2823,7 +2682,6 @@ L_089150F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(48)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915114; } @@ -2864,7 +2722,6 @@ L_0891512C: L_0891513C: aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08915250; } @@ -2872,7 +2729,6 @@ L_0891513C: } L_08915148: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915190; } @@ -2914,7 +2770,6 @@ L_08915160: } L_08915190: aot_gpr_31 = (0x08915198u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08915198u) goto L_08915198; AOT_REGCACHE_SYNC_OUT(); return; L_08915198: @@ -2935,7 +2790,6 @@ L_089151A8: AOT_REGCACHE_SYNC_OUT(); return; L_089151BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089151E0; } @@ -2961,7 +2815,6 @@ L_089151E0: } L_089151EC: aot_gpr_31 = (0x089151F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089151F4u) goto L_089151F4; AOT_REGCACHE_SYNC_OUT(); return; L_089151F4: @@ -2984,7 +2837,6 @@ L_08915204: AOT_REGCACHE_SYNC_OUT(); return; L_08915218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915240; } @@ -3019,9 +2871,7 @@ L_08915258: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089152EC; } @@ -3030,9 +2880,7 @@ L_08915258: L_08915274: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089152EC; } @@ -3043,7 +2891,6 @@ L_08915288: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17150u << 16u); if (branch_taken) { @@ -3072,7 +2919,6 @@ L_089152A4: AOT_REGCACHE_SYNC_OUT(); return; L_089152E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915378; } @@ -3083,9 +2929,7 @@ L_089152EC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915378; } @@ -3094,9 +2938,7 @@ L_089152EC: L_08915308: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915378; } @@ -3107,7 +2949,6 @@ L_0891531C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17150u << 16u); if (branch_taken) { @@ -3136,7 +2977,6 @@ L_08915338: AOT_REGCACHE_SYNC_OUT(); return; L_08915378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089159EC; } @@ -3148,9 +2988,7 @@ L_08915380: aot_gpr_4 = (aot_gpr_4 | 34953u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089156B0; } @@ -3164,9 +3002,7 @@ L_089153A0: aot_gpr_4 = (aot_gpr_4 | 34953u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089156B0; } @@ -3177,9 +3013,7 @@ L_089153C8: aot_gpr_4 = (aot_gpr_4 | 49807u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915400; } @@ -3275,14 +3109,12 @@ L_08915414: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08915484u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08915484u) goto L_08915484; AOT_REGCACHE_SYNC_OUT(); return; L_08915484: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089155B8; } @@ -3293,7 +3125,6 @@ L_08915494: aot_gpr_5 = (0u | 4096u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915510; } @@ -3328,7 +3159,6 @@ L_089154A8: AOT_REGCACHE_SYNC_OUT(); return; L_08915508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915584; } @@ -3339,7 +3169,6 @@ L_08915510: aot_gpr_5 = (0u | 8192u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915584; } @@ -3376,7 +3205,6 @@ L_08915584: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1768))); aot_gpr_4 = (aot_gpr_4 < static_cast(21) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089155A4; } @@ -3411,7 +3239,6 @@ L_089155C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(311))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915644; } @@ -3455,9 +3282,7 @@ L_08915644: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915684; } @@ -3465,12 +3290,10 @@ L_08915644: } L_08915664: aot_gpr_31 = (0x0891566Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891566Cu) goto L_0891566C; AOT_REGCACHE_SYNC_OUT(); return; L_0891566C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08915684; } @@ -3478,12 +3301,10 @@ L_0891566C: } L_08915674: aot_gpr_31 = (0x0891567Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891567Cu) goto L_0891567C; AOT_REGCACHE_SYNC_OUT(); return; L_0891567C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089156A8; } @@ -3496,7 +3317,6 @@ L_08915684: AOT_REGCACHE_SYNC_OUT(); return; L_0891568C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089156A8; } @@ -3512,7 +3332,6 @@ L_08915694: AOT_REGCACHE_SYNC_OUT(); return; L_089156A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089159EC; } @@ -3521,9 +3340,7 @@ L_089156A8: L_089156B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089159EC; } @@ -3534,9 +3351,7 @@ L_089156C4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089159EC; } @@ -3547,9 +3362,7 @@ L_089156E0: aot_gpr_4 = (aot_gpr_4 | 49807u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915718; } @@ -3645,14 +3458,12 @@ L_0891572C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0891579Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891579Cu) goto L_0891579C; AOT_REGCACHE_SYNC_OUT(); return; L_0891579C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089158D0; } @@ -3663,7 +3474,6 @@ L_089157AC: aot_gpr_5 = (0u | 4096u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915828; } @@ -3698,7 +3508,6 @@ L_089157C0: AOT_REGCACHE_SYNC_OUT(); return; L_08915820: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891589C; } @@ -3709,7 +3518,6 @@ L_08915828: aot_gpr_5 = (0u | 8192u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891589C; } @@ -3746,7 +3554,6 @@ L_0891589C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1768))); aot_gpr_4 = (aot_gpr_4 < static_cast(21) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089158BC; } @@ -3771,7 +3578,6 @@ L_089158BC: goto L_089158D0; L_089158D0: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08915964; } @@ -3789,7 +3595,6 @@ L_089158E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(311))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915964; } @@ -3833,9 +3638,7 @@ L_08915964: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089159C8; } @@ -3843,12 +3646,10 @@ L_08915964: } L_08915984: aot_gpr_31 = (0x0891598Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891598Cu) goto L_0891598C; AOT_REGCACHE_SYNC_OUT(); return; L_0891598C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089159C8; } @@ -3856,12 +3657,10 @@ L_0891598C: } L_08915994: aot_gpr_31 = (0x0891599Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891599Cu) goto L_0891599C; AOT_REGCACHE_SYNC_OUT(); return; L_0891599C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089159C8; } @@ -3879,7 +3678,6 @@ L_089159A4: AOT_REGCACHE_SYNC_OUT(); return; L_089159C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089159EC; } @@ -3892,7 +3690,6 @@ L_089159C8: AOT_REGCACHE_SYNC_OUT(); return; L_089159D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089159EC; } @@ -3908,7 +3705,6 @@ L_089159D8: AOT_REGCACHE_SYNC_OUT(); return; L_089159EC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08915A00; } @@ -3935,7 +3731,6 @@ L_08915A0C: AOT_REGCACHE_SYNC_OUT(); return; L_08915A14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08915F04; } @@ -3943,7 +3738,6 @@ L_08915A14: } L_08915A1C: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08915F04; } @@ -3953,7 +3747,6 @@ L_08915A24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08915F04; } @@ -3984,7 +3777,6 @@ L_08915A3C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915A70; } @@ -4071,14 +3863,12 @@ L_08915A70: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08915AD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08915AD4u) goto L_08915AD4; AOT_REGCACHE_SYNC_OUT(); return; L_08915AD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08915C08; } @@ -4089,7 +3879,6 @@ L_08915AE4: aot_gpr_5 = (0u | 4096u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915B60; } @@ -4124,7 +3913,6 @@ L_08915AF8: AOT_REGCACHE_SYNC_OUT(); return; L_08915B58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915BD4; } @@ -4135,7 +3923,6 @@ L_08915B60: aot_gpr_5 = (0u | 8192u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915BD4; } @@ -4172,7 +3959,6 @@ L_08915BD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1768))); aot_gpr_4 = (aot_gpr_4 < static_cast(21) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08915BF4; } @@ -4197,7 +3983,6 @@ L_08915BF4: goto L_08915C08; L_08915C08: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08915C9C; } @@ -4215,7 +4000,6 @@ L_08915C20: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(311))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915C9C; } @@ -4278,7 +4062,6 @@ L_08915CA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915CD8; } @@ -4365,14 +4148,12 @@ L_08915CD8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08915D3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08915D3Cu) goto L_08915D3C; AOT_REGCACHE_SYNC_OUT(); return; L_08915D3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08915E70; } @@ -4383,7 +4164,6 @@ L_08915D4C: aot_gpr_5 = (0u | 4096u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915DC8; } @@ -4418,7 +4198,6 @@ L_08915D60: AOT_REGCACHE_SYNC_OUT(); return; L_08915DC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08915E3C; } @@ -4429,7 +4208,6 @@ L_08915DC8: aot_gpr_5 = (0u | 8192u); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915E3C; } @@ -4466,7 +4244,6 @@ L_08915E3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1768))); aot_gpr_4 = (aot_gpr_4 < static_cast(21) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08915E5C; } @@ -4491,7 +4268,6 @@ L_08915E5C: goto L_08915E70; L_08915E70: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08915F04; } @@ -4509,7 +4285,6 @@ L_08915E88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(311))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08915F04; } @@ -4551,7 +4326,6 @@ L_08915F04: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(311))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891629C; } @@ -4572,7 +4346,6 @@ L_08915F14: aot_gpr_5 = (0u | 196u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(435), static_cast(aot_gpr_5)); if (branch_taken) { @@ -4594,9 +4367,7 @@ L_08915F68: aot_gpr_4 = (aot_gpr_4 | 29150u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08916128; } @@ -4605,7 +4376,6 @@ L_08915F68: L_08915F80: aot_fpr_12 = std::sqrt(ctx.fpr[20]); aot_gpr_31 = (0x08915F8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08915F8Cu) goto L_08915F8C; AOT_REGCACHE_SYNC_OUT(); return; L_08915F8C: @@ -4627,9 +4397,7 @@ L_08915FAC: ctx.fpr[20] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915FD0; } @@ -4643,9 +4411,7 @@ L_08915FD0: aot_gpr_4 = (16192u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08915FF0; } @@ -4834,7 +4600,6 @@ L_08916148: goto L_08916150; L_08916150: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891629C; } @@ -4913,7 +4678,6 @@ L_0891620C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(560), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0891622Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891622Cu) goto L_0891622C; AOT_REGCACHE_SYNC_OUT(); return; L_0891622C: @@ -4970,7 +4734,17 @@ L_0891629C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089162D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4980,7 +4754,6 @@ L_089162D0: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916354; } @@ -4990,7 +4763,6 @@ L_089162F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08916320; } @@ -5002,7 +4774,6 @@ L_08916308: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08916354; } @@ -5011,7 +4782,6 @@ L_08916308: L_08916320: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0891633C; } @@ -5027,7 +4797,6 @@ L_0891633C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08916354; } @@ -5062,7 +4831,6 @@ L_08916370: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_5 = (aot_gpr_5 & 1024u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089164C4; } @@ -5074,7 +4842,6 @@ L_08916380: L_08916384: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089164C4; } @@ -5089,7 +4856,6 @@ L_08916390: L_0891639C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089163C8; } @@ -5107,7 +4873,6 @@ L_089163A8: } L_089163B8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089163C8; } @@ -5133,7 +4898,6 @@ L_089163D8: goto L_089163DC; L_089163DC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089163F8; } @@ -5151,7 +4915,6 @@ L_089163F4: goto L_089163F8; L_089163F8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08916434; } @@ -5159,7 +4922,6 @@ L_089163F8: } L_08916400: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08916434; } @@ -5174,9 +4936,7 @@ L_08916408: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089164BC; } @@ -5195,9 +4955,7 @@ L_0891643C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089164BC; } @@ -5207,7 +4965,6 @@ L_08916458: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16170u << 16u); if (branch_taken) { @@ -5220,9 +4977,7 @@ L_08916470: aot_gpr_4 = (aot_gpr_4 | 49283u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089164BC; } @@ -5232,9 +4987,7 @@ L_0891648C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089164BC; } @@ -5253,7 +5006,6 @@ L_089164B0: goto L_089164BC; L_089164BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5269,7 +5021,6 @@ L_089164CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5291,7 +5042,6 @@ L_089164EC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5323,7 +5073,6 @@ L_08916518: L_08916528: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08916588; } @@ -5350,7 +5099,6 @@ L_08916538: AOT_REGCACHE_SYNC_OUT(); return; L_0891656C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5364,7 +5112,6 @@ L_08916574: AOT_REGCACHE_SYNC_OUT(); return; L_08916580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5379,7 +5126,6 @@ L_08916588: L_08916594: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5389,7 +5135,6 @@ L_089165A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089165D0; } @@ -5418,7 +5163,17 @@ L_089165D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089165E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_16); @@ -5431,7 +5186,6 @@ L_089165E8: AOT_REGCACHE_SYNC_OUT(); return; L_0891661C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08916638; } @@ -5446,7 +5200,6 @@ L_08916624: goto L_08916630; L_08916630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08916668; } @@ -5459,7 +5212,6 @@ L_08916638: AOT_REGCACHE_SYNC_OUT(); return; L_08916640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08916A90; } @@ -5468,7 +5220,6 @@ L_08916640: L_08916648: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891665C; } @@ -5476,7 +5227,6 @@ L_08916648: } L_08916654: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08916668; } @@ -5501,7 +5251,6 @@ L_08916678: goto L_08916ABC; L_08916680: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08916A90; } @@ -5549,7 +5298,6 @@ L_089166F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1930), static_cast(aot_gpr_4)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1930)))))); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_08916748; } @@ -5567,7 +5315,6 @@ L_08916708: L_08916714: aot_gpr_4 = (static_cast(aot_gpr_4) < 81 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08916748; } @@ -5659,7 +5406,6 @@ L_089167B8: L_089167C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_0891680C; } @@ -5672,7 +5418,6 @@ L_089167D4: AOT_REGCACHE_SYNC_OUT(); return; L_089167DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891680C; } @@ -5692,7 +5437,6 @@ L_089167F4: AOT_REGCACHE_SYNC_OUT(); return; L_089167FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891680C; } @@ -5713,7 +5457,6 @@ L_08916810: AOT_REGCACHE_SYNC_OUT(); return; L_08916818: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089169E4; } @@ -5749,7 +5492,6 @@ L_08916850: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1930), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089168F8; } @@ -5825,7 +5567,6 @@ L_089168C8: AOT_REGCACHE_SYNC_OUT(); return; L_089168F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08916A90; } @@ -5869,7 +5610,6 @@ L_08916948: AOT_REGCACHE_SYNC_OUT(); return; L_08916950: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08916978; } @@ -5878,7 +5618,6 @@ L_08916950: L_08916958: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08916978; } @@ -5915,7 +5654,6 @@ L_0891698C: L_0891699C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(56))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089169DC; } @@ -5928,7 +5666,6 @@ L_089169A8: AOT_REGCACHE_SYNC_OUT(); return; L_089169B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089169DC; } @@ -5947,7 +5684,6 @@ L_089169C4: AOT_REGCACHE_SYNC_OUT(); return; L_089169CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089169DC; } @@ -5960,7 +5696,6 @@ L_089169D4: AOT_REGCACHE_SYNC_OUT(); return; L_089169DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08916810; } @@ -5976,7 +5711,6 @@ L_089169E4: AOT_REGCACHE_SYNC_OUT(); return; L_089169F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08916A60; } @@ -5989,7 +5723,6 @@ L_08916A00: AOT_REGCACHE_SYNC_OUT(); return; L_08916A08: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08916A30; } @@ -6006,7 +5739,6 @@ L_08916A10: AOT_REGCACHE_SYNC_OUT(); return; L_08916A28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08916A90; } @@ -6019,7 +5751,6 @@ L_08916A30: AOT_REGCACHE_SYNC_OUT(); return; L_08916A38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08916A90; } @@ -6036,7 +5767,6 @@ L_08916A40: AOT_REGCACHE_SYNC_OUT(); return; L_08916A58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08916A90; } @@ -6081,7 +5811,17 @@ L_08916A90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08916ABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1136)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6132,7 +5872,6 @@ L_08916B48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6142,7 +5881,6 @@ L_08916B58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 52u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6152,7 +5890,6 @@ L_08916B68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6162,7 +5899,6 @@ L_08916B78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6172,7 +5908,6 @@ L_08916B88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6183,7 +5918,6 @@ L_08916B98: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6203,7 +5937,6 @@ L_08916BB8: AOT_REGCACHE_SYNC_OUT(); return; L_08916BC0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6221,7 +5954,6 @@ L_08916BCC: aot_gpr_4 = (aot_gpr_4 + static_cast(316)); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6260,7 +5992,6 @@ L_08916BF0: L_08916C30: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08916CC0; } @@ -6273,7 +6004,6 @@ L_08916C3C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08916CB8; } @@ -6283,7 +6013,6 @@ L_08916C58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08916CB8; } @@ -6346,7 +6075,6 @@ L_08916CE8: AOT_REGCACHE_SYNC_OUT(); return; L_08916D00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08916D20; } @@ -6356,7 +6084,6 @@ L_08916D08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08916D20; } @@ -6370,7 +6097,6 @@ L_08916D18: L_08916D20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08916D38; } @@ -6379,7 +6105,6 @@ L_08916D20: L_08916D2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08916D8C; } @@ -6510,7 +6235,6 @@ L_08916E1C: ctx.gpr[21] = (aot_gpr_4 ^ 1u); ctx.gpr[21] = (0u < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08917060; } @@ -6641,7 +6365,6 @@ L_08916F08: aot_gpr_4 = (4096u << 16u); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08916F88; } @@ -6654,7 +6377,6 @@ L_08916F34: AOT_REGCACHE_SYNC_OUT(); return; L_08916F3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08916F88; } @@ -6756,9 +6478,7 @@ L_08916FB4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917060; } @@ -6833,7 +6553,6 @@ L_08917048: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(804)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08917060; } @@ -6870,7 +6589,6 @@ L_08917078: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089170E4; } @@ -6880,7 +6598,6 @@ L_08917088: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089170E4; } @@ -6942,7 +6659,6 @@ L_089170B8: goto L_089170E4; L_089170E4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089171F4; } @@ -6955,7 +6671,6 @@ L_089170EC: AOT_REGCACHE_SYNC_OUT(); return; L_089170F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089171F4; } @@ -6967,7 +6682,6 @@ L_089170FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891714C; } @@ -6977,7 +6691,6 @@ L_08917114: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891714C; } @@ -7025,7 +6738,6 @@ L_08917168: L_08917178: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1068))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08917198; } @@ -7035,7 +6747,6 @@ L_08917184: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_5 = (aot_gpr_5 & 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08917198; } @@ -7046,7 +6757,6 @@ L_08917194: goto L_08917198; L_08917198: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089171F0; } @@ -7060,7 +6770,6 @@ L_089171A0: AOT_REGCACHE_SYNC_OUT(); return; L_089171AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089171E4; } @@ -7069,7 +6778,6 @@ L_089171AC: L_089171B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(904)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089171D4; } @@ -7083,7 +6791,6 @@ L_089171C0: AOT_REGCACHE_SYNC_OUT(); return; L_089171CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089171F0; } @@ -7168,7 +6875,6 @@ L_089171F4: L_08917248: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089172B4; } @@ -7178,7 +6884,6 @@ L_08917254: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089172B4; } @@ -7191,7 +6896,6 @@ L_08917264: AOT_REGCACHE_SYNC_OUT(); return; L_0891726C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089172B4; } @@ -7202,7 +6906,6 @@ L_08917274: aot_gpr_5 = (0u | 18u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089172AC; } @@ -7213,7 +6916,6 @@ L_08917288: aot_gpr_5 = (0u | 17u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089172AC; } @@ -7226,7 +6928,6 @@ L_0891729C: AOT_REGCACHE_SYNC_OUT(); return; L_089172A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089172B4; } @@ -7238,9 +6939,7 @@ L_089172AC: goto L_089172B4; L_089172B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089172D4; } @@ -7250,7 +6949,6 @@ L_089172C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891730C; } @@ -7259,7 +6957,6 @@ L_089172C4: L_089172D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08917304; } @@ -7270,7 +6967,6 @@ L_089172E0: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089173D4; } @@ -7297,7 +6993,6 @@ L_08917304: L_0891730C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08917358; } @@ -7305,9 +7000,7 @@ L_0891730C: } L_08917318: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917334; } @@ -7327,7 +7020,6 @@ L_08917334: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089173D4; } @@ -7347,7 +7039,6 @@ L_08917358: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 49u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917374; } @@ -7366,7 +7057,6 @@ L_08917374: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089173C4; } @@ -7376,7 +7066,6 @@ L_08917384: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089173C4; } @@ -7386,7 +7075,6 @@ L_08917394: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089173C4; } @@ -7396,7 +7084,6 @@ L_089173A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089173C4; } @@ -7406,7 +7093,6 @@ L_089173B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089173D0; } @@ -7428,7 +7114,6 @@ L_089173D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917440; } @@ -7445,7 +7130,6 @@ L_089173EC: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917440; } @@ -7463,7 +7147,6 @@ L_0891740C: AOT_REGCACHE_SYNC_OUT(); return; L_08917414: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08917440; } @@ -7473,7 +7156,6 @@ L_0891741C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891743C; } @@ -7495,7 +7177,6 @@ L_0891743C: L_08917440: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1068))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089175A0; } @@ -7503,9 +7184,7 @@ L_08917440: } L_0891744C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089175A0; } @@ -7524,7 +7203,6 @@ L_08917468: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2244))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08917488; } @@ -7543,7 +7221,6 @@ L_08917478: L_08917488: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089174A8; } @@ -7560,7 +7237,6 @@ L_089174A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7570,7 +7246,6 @@ L_089174B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7580,7 +7255,6 @@ L_089174C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 49u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7590,7 +7264,6 @@ L_089174D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7600,7 +7273,6 @@ L_089174E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7610,7 +7282,6 @@ L_089174F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7620,7 +7291,6 @@ L_08917508: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7630,7 +7300,6 @@ L_08917518: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7640,7 +7309,6 @@ L_08917528: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917548; } @@ -7650,7 +7318,6 @@ L_08917538: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917588; } @@ -7663,7 +7330,6 @@ L_08917548: AOT_REGCACHE_SYNC_OUT(); return; L_08917550: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08917570; } @@ -7719,7 +7385,6 @@ L_089175A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089175C0; } @@ -7741,7 +7406,6 @@ L_089175D0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089176C8; } @@ -7769,7 +7433,6 @@ L_08917600: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08917638; @@ -7779,9 +7442,7 @@ L_08917638: aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_14)); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917660; } @@ -7795,9 +7456,7 @@ L_08917650: goto L_08917660; L_08917660: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089176C0; } @@ -7807,7 +7466,6 @@ L_08917670: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16406u << 16u); if (branch_taken) { @@ -7819,9 +7477,7 @@ L_08917688: aot_gpr_4 = (aot_gpr_4 | 52196u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089176AC; } @@ -7838,9 +7494,7 @@ L_089176A0: } L_089176AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089176C0; } @@ -7851,7 +7505,6 @@ L_089176BC: goto L_089176C0; L_089176C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08917890; } @@ -7860,9 +7513,7 @@ L_089176C0: L_089176C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2064))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917890; } @@ -7871,9 +7522,7 @@ L_089176C8: L_089176DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2068))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917890; } @@ -7910,9 +7559,7 @@ L_08917740: aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917768; } @@ -7926,7 +7573,6 @@ L_08917758: goto L_08917768; L_08917768: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); goto L_089177D0; @@ -7936,9 +7582,7 @@ L_08917778: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891779C; } @@ -7955,7 +7599,6 @@ L_08917790: } L_0891779C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); goto L_089177D0; @@ -7965,7 +7608,6 @@ L_089177AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089177C8; } @@ -8029,9 +7671,7 @@ L_089177D0: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917890; } @@ -8046,7 +7686,6 @@ L_08917890: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089178B0; } @@ -8056,7 +7695,6 @@ L_089178A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089178E8; } @@ -8067,7 +7705,6 @@ L_089178B0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089178D4; } @@ -8077,7 +7714,6 @@ L_089178C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917920; } @@ -8091,7 +7727,6 @@ L_089178D4: AOT_REGCACHE_SYNC_OUT(); return; L_089178E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08917920; } @@ -8101,7 +7736,6 @@ L_089178E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917920; } @@ -8111,7 +7745,6 @@ L_089178F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917920; } @@ -8120,7 +7753,6 @@ L_089178F8: L_08917908: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08917920; } @@ -8177,7 +7809,17 @@ L_08917950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08917990: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1368))); @@ -8190,7 +7832,6 @@ L_08917990: { const std::uint32_t aot_run_words[6]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(20), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917B20; } @@ -8199,7 +7840,6 @@ L_08917990: L_089179D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1368))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917B20; } @@ -8229,9 +7869,7 @@ L_089179F0: ctx.fpr[16] = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08917A34; } @@ -8242,7 +7880,6 @@ L_08917A30: goto L_08917A34; L_08917A34: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917B14; } @@ -8262,7 +7899,6 @@ L_08917A58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917A78; } @@ -8272,7 +7908,6 @@ L_08917A68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917A90; } @@ -8291,7 +7926,6 @@ L_08917A90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917AB0; } @@ -8301,7 +7935,6 @@ L_08917AA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917B0C; } @@ -8309,14 +7942,12 @@ L_08917AA0: } L_08917AB0: aot_gpr_31 = (0x08917AB8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08917AB8u) goto L_08917AB8; AOT_REGCACHE_SYNC_OUT(); return; L_08917AB8: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917B0C; } @@ -8325,7 +7956,6 @@ L_08917AB8: L_08917AC8: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08917AF4; } @@ -8342,7 +7972,6 @@ L_08917AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08917AEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08917B0C; } @@ -8359,7 +7988,6 @@ L_08917AF4: AOT_REGCACHE_SYNC_OUT(); return; L_08917B0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0069_entry, 69u, 30u, 0x0891823Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8374,7 +8002,6 @@ L_08917B20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917B70; } @@ -8389,7 +8016,6 @@ L_08917B30: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08917B70; } @@ -8412,7 +8038,6 @@ L_08917B70: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917DFC; } @@ -8436,7 +8061,6 @@ L_08917BA0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917CCC; } @@ -8449,7 +8073,6 @@ L_08917BB4: AOT_REGCACHE_SYNC_OUT(); return; L_08917BBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08917C48; } @@ -8481,7 +8104,6 @@ L_08917BF4: ctx.gpr[17] = (ctx.gpr[2] & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917C14; } @@ -8506,7 +8128,6 @@ L_08917C14: } L_08917C2C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917C48; } @@ -8530,7 +8151,6 @@ L_08917C48: AOT_REGCACHE_SYNC_OUT(); return; L_08917C50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08917CCC; } @@ -8546,7 +8166,6 @@ L_08917C64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917C80; } @@ -8564,7 +8183,6 @@ L_08917C80: goto L_08916ABC; L_08917C8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08917CB0; } @@ -8603,7 +8221,6 @@ L_08917CCC: AOT_REGCACHE_SYNC_OUT(); return; L_08917CD4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08917DF4; } @@ -8661,7 +8278,6 @@ L_08917D2C: AOT_REGCACHE_SYNC_OUT(); return; L_08917D4C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08917D6C; } @@ -8671,7 +8287,6 @@ L_08917D54: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08917D7C; } @@ -8679,7 +8294,6 @@ L_08917D54: } L_08917D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08917D84; } @@ -8692,7 +8306,6 @@ L_08917D6C: AOT_REGCACHE_SYNC_OUT(); return; L_08917D74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0069_entry, 69u, 30u, 0x0891823Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8710,7 +8323,6 @@ L_08917D84: AOT_REGCACHE_SYNC_OUT(); return; L_08917D90: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08917DC4; } @@ -8721,7 +8333,6 @@ L_08917D98: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (ctx.gpr[17] - aot_gpr_4); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08917DC4; } @@ -8756,7 +8367,6 @@ L_08917DE4: goto L_08917990; L_08917DEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0069_entry, 69u, 30u, 0x0891823Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8764,7 +8374,6 @@ L_08917DEC: } L_08917DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0069_entry, 69u, 30u, 0x0891823Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8782,7 +8391,6 @@ L_08917E0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08917ED8; } @@ -8795,7 +8403,6 @@ L_08917E20: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08917ED8; } @@ -8826,7 +8433,6 @@ L_08917E58: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -8854,7 +8460,6 @@ L_08917EA0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8874,7 +8479,6 @@ L_08917ED8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0069_entry, 69u, 30u, 0x0891823Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8883,7 +8487,6 @@ L_08917ED8: L_08917EEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1376))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0069_entry, 69u, 30u, 0x0891823Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8923,7 +8526,6 @@ L_08917F3C: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(48)); if (branch_taken) { @@ -8989,7 +8591,6 @@ L_08917FC4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0069.cpp b/profiles/vcs/generated/generated_unit_0069.cpp index 281bebc..a2f6504 100644 --- a/profiles/vcs/generated/generated_unit_0069.cpp +++ b/profiles/vcs/generated/generated_unit_0069.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0069[4096] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, - 0, 8, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 15, 0, - 16, 0, 17, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 0, 0, 23, 24, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, 0, 0, 0, 35, 0, - 36, 0, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 45, 0, 46, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, - 55, 0, 0, 56, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 67, 0, 0, 68, 0, 69, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 72, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, - 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 83, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 87, 0, 0, 0, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 92, - 0, 93, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 99, 0, 0, - 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 0, 0, - 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, - 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, - 0, 120, 0, 0, 121, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 124, 0, 125, - 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, 128, 0, 0, 129, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, - 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, 0, 138, 0, 0, 0, 0, 0, 139, - 0, 0, 140, 0, 141, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 149, 0, 150, 0, 151, 0, 152, - 0, 0, 153, 154, 0, 155, 0, 156, 0, 0, 157, 0, 0, 158, 159, 160, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, - 163, 164, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 169, 0, 0, 170, 0, 171, - 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 174, 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 180, 0, 0, 0, 181, 0, 182, 0, 183, - 0, 184, 0, 185, 0, 0, 0, 186, 0, 187, 0, 188, 0, 189, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 197, 0, 198, 0, 199, 0, 200, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 205, - 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 0, 213, 0, 0, 0, - 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, - 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 223, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 0, 0, - 229, 0, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, - 236, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 241, 0, 0, 0, 242, 0, 243, 0, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 251, 0, - 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, 256, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, - 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 266, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 279, 0, 280, 0, - 0, 0, 0, 281, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, - 0, 0, 289, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, 294, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 298, - 0, 0, 0, 0, 299, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, - 304, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 0, 307, 0, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, 0, 311, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, - 316, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 335, - 336, 0, 337, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 342, - 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, - 0, 0, 0, 0, 356, 0, 0, 357, 0, 358, 0, 0, 0, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, 370, - 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 373, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, - 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 379, 380, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 387, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, - 0, 0, 0, 0, 396, 0, 0, 0, 0, 397, 398, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, - 0, 401, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 0, - 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, - 0, 413, 0, 414, 0, 415, 0, 0, 0, 0, 0, 416, 417, 0, 418, 0, 0, 0, 0, 0, 0, 419, 420, 421, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, - 426, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, - 433, 0, 434, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 441, - 0, 0, 0, 0, 442, 443, 0, 0, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, - 0, 0, 0, 448, 449, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, - 0, 459, 0, 0, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 465, 466, - 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, - 0, 0, 474, 0, 475, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 478, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, - 0, 482, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 491, 0, - 492, 493, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 497, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 0, - 0, 500, 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 0, 512, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 0, 0, 515, 0, 0, 516, - 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 537, 0, 538, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 544, 0, - 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 0, 556, 0, 557, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, - 0, 569, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 573, - 0, 0, 0, 574, 0, 0, 575, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 579, 0, 580, 0, - 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 590, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 597, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, - 0, 606, 0, 607, 0, 0, 0, 0, 0, 0, 608, 609, 0, 0, 0, 610, 0, 0, 0, 611, 0, 612, 0, 613, 0, 0, 614, 0, 0, 615, 0, 616, - 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 619, 0, 620, 621, 0, 622, 0, 0, 623, 0, 624, 0, 625, 0, - 626, 0, 0, 627, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 0, 0, 635, 0, 636, 0, 0, 0, 637, 0, 638, 0, 0, - 0, 639, 0, 0, 640, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 645, 646, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, 0, 650, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 652, 0, 653, 0, 0, 0, 654, 0, 0, 0, 655, 0, 656, 0, - 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 659, 0, 660, 0, 0, 0, 0, 661, 0, - 662, 0, 663, 0, 664, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, - 0, 668, 0, 0, 669, 0, 0, 670, 0, 671, 0, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 680, 0, 0, 0, 681, 0, 682, 0, - 0, 683, 0, 684, 0, 685, 0, 686, 0, 0, 0, 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 0, 692, 0, 0, 693, 0, 0, 0, 0, 0, 0, - 694, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 697, 0, 0, 698, 0, 699, 0, 0, 0, 700, 0, 701, 0, 702, 0, 0, 0, 703, 0, 0, 0, - 704, 0, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 709, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 710, 711, 0, 0, 712, 0, 713, 0, 714, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 716, 0, 0, 0, 0, 717, 0, - 718, 0, 0, 0, 0, 719, 0, 720, 0, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 723, 0, 724, 0, 725, 0, 0, 0, 726, 727, 0, 0, 728, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0069[64] = { + 0x4842211242050441ull, 0x0400A06202100485ull, 0x4520000008008402ull, 0x4812888054444AA9ull, + 0x1108028052000129ull, 0x00000D01001C82A4ull, 0x21482A2041000000ull, 0x2A00A08284400400ull, + 0xA005008004010404ull, 0x0200100414000080ull, 0xA100009284008024ull, 0x82A0010209052414ull, + 0xAA08284400400214ull, 0x000000534100E4ACull, 0x00190820A5004000ull, 0x08142A8AA8940008ull, + 0x90884AA008884000ull, 0x1400040811444442ull, 0x08044489048546AAull, 0x5415294400124021ull, + 0x408208010004A111ull, 0xA208000802086082ull, 0x245040A850884204ull, 0x0000000044110104ull, + 0x0840013082100800ull, 0x5400100084442111ull, 0x0411102100802555ull, 0x8104048589122000ull, + 0x0040120400002088ull, 0x0155429081041208ull, 0xA040000000040021ull, 0x00001C8490284010ull, + 0x0040800500308220ull, 0x0808061090280200ull, 0x0909000811084206ull, 0x4005000100E0582Aull, + 0x0001400D20822221ull, 0x05000C3084050000ull, 0x000C001400000058ull, 0x0000000000810000ull, + 0xC810803208200000ull, 0x108A105421151040ull, 0x540800400002410Aull, 0x022142220852200Bull, + 0x90A000008844A000ull, 0x1088000080042008ull, 0x0110800000000880ull, 0x0210280100004200ull, + 0x44420000812A0000ull, 0x0108440205004004ull, 0x00001000801A4200ull, 0x0200008004200404ull, + 0x8082000A80000020ull, 0x0101011054004248ull, 0x0004150001091000ull, 0x00800500300200A0ull, + 0xA4A88C0A08284020ull, 0x28A2AAA954B42004ull, 0x2210000800C90152ull, 0x4280800151141000ull, + 0x20088A9280800115ull, 0x024AA8AA5140100Aull, 0x05004111115148A1ull, 0x98AA10A142101530ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0069[64] = { + 1u, 16u, 28u, 36u, 55u, 67u, 79u, 89u, 100u, 109u, 115u, 126u, 140u, 153u, 167u, 177u, + 193u, 206u, 218u, 236u, 252u, 263u, 274u, 289u, 295u, 304u, 316u, 330u, 343u, 350u, 365u, 371u, + 382u, 391u, 401u, 413u, 426u, 438u, 448u, 455u, 457u, 467u, 482u, 492u, 507u, 517u, 524u, 529u, + 536u, 545u, 554u, 561u, 567u, 574u, 585u, 593u, 601u, 617u, 639u, 651u, 662u, 676u, 694u, 710u, }; void recomp_unit_0069_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0069_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08918000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0069[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0069[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0069[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08918000; @@ -903,9 +810,7 @@ L_08918000: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918028; } @@ -921,9 +826,7 @@ L_08918028: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918100; } @@ -1043,7 +946,6 @@ L_08918128: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -1068,7 +970,6 @@ L_08918164: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -1108,7 +1009,6 @@ L_089181BC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -1136,7 +1036,6 @@ L_08918204: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1170,7 +1069,17 @@ L_0891823C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891826C: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(516), ctx.gpr[19]); @@ -1204,7 +1113,6 @@ L_089182D4: AOT_REGCACHE_SYNC_OUT(); return; L_089182E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08918300; } @@ -1214,7 +1122,6 @@ L_089182E8: aot_gpr_4 = (16u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918314; } @@ -1222,7 +1129,6 @@ L_089182E8: } L_089182F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089183AC; } @@ -1249,7 +1155,6 @@ L_08918314: AOT_REGCACHE_SYNC_OUT(); return; L_0891831C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089183AC; } @@ -1263,7 +1168,6 @@ L_08918324: L_0891832C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089183AC; } @@ -1273,7 +1177,6 @@ L_08918338: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08918368; } @@ -1283,7 +1186,6 @@ L_08918348: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08918368; } @@ -1293,7 +1195,6 @@ L_08918358: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089183AC; } @@ -1306,7 +1207,6 @@ L_08918368: AOT_REGCACHE_SYNC_OUT(); return; L_08918370: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089183EC; } @@ -1321,7 +1221,6 @@ L_08918378: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089183C4; } @@ -1331,7 +1230,6 @@ L_0891839C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089183C4; } @@ -1347,7 +1245,6 @@ L_089183AC: goto L_089183BC; L_089183BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918478; } @@ -1389,7 +1286,6 @@ L_089183F8: L_08918400: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08918478; } @@ -1403,7 +1299,6 @@ L_0891840C: L_08918414: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918478; } @@ -1451,9 +1346,7 @@ L_08918420: aot_gpr_5 = (17352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918478; } @@ -1487,7 +1380,6 @@ L_08918478: AOT_REGCACHE_SYNC_OUT(); return; L_0891849C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089184CC; } @@ -1503,7 +1395,6 @@ L_089184A4: aot_gpr_4 = (aot_gpr_4 + static_cast(16)); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918A7C; } @@ -1514,7 +1405,6 @@ L_089184CC: ctx.gpr[30] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918A7C; } @@ -1550,7 +1440,6 @@ L_08918508: AOT_REGCACHE_SYNC_OUT(); return; L_08918514: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08918524; } @@ -1558,7 +1447,6 @@ L_08918514: } L_0891851C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -1615,7 +1503,6 @@ L_08918580: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1784))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[30] << 2u); if (branch_taken) { @@ -1625,7 +1512,6 @@ L_08918580: } L_089185A0: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -1679,7 +1565,6 @@ L_089185AC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(ctx.fpr[15])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089187BC; } @@ -1689,9 +1574,7 @@ L_08918660: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089187BC; } @@ -1702,9 +1585,7 @@ L_08918678: aot_gpr_4 = (17204u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089187BC; } @@ -1722,7 +1603,6 @@ L_08918694: } L_089186A4: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08918758; } @@ -1730,7 +1610,6 @@ L_089186A4: } L_089186AC: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_089186F4; } @@ -1753,7 +1632,6 @@ L_089186B4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918758; } @@ -1770,7 +1648,6 @@ L_089186CC: } L_089186D8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08918758; } @@ -1792,7 +1669,6 @@ L_089186E0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918758; } @@ -1833,7 +1709,6 @@ L_089186F4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918758; } @@ -1899,9 +1774,7 @@ L_08918784: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089187B4; } @@ -1911,9 +1784,7 @@ L_0891879C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089187BC; } @@ -1921,7 +1792,6 @@ L_0891879C: } L_089187B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -1942,7 +1812,6 @@ L_089187BC: AOT_REGCACHE_SYNC_OUT(); return; L_089187E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089188F4; } @@ -1950,7 +1819,6 @@ L_089187E4: } L_089187EC: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08918808; } @@ -1985,7 +1853,6 @@ L_08918828: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08918A68; } @@ -1999,9 +1866,7 @@ L_08918840: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918A68; } @@ -2033,9 +1898,7 @@ L_0891889C: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918A68; } @@ -2043,7 +1906,6 @@ L_0891889C: } L_089188C0: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -2068,7 +1930,6 @@ L_089188C8: } L_089188F4: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -2112,7 +1973,6 @@ L_0891891C: AOT_REGCACHE_SYNC_OUT(); return; L_08918968: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -2138,9 +1998,7 @@ L_08918988: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918A68; } @@ -2180,7 +2038,6 @@ L_089189E4: L_08918A08: aot_gpr_4 = (ctx.gpr[2] | ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918A68; } @@ -2194,9 +2051,7 @@ L_08918A14: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918A68; } @@ -2220,7 +2075,6 @@ L_08918A68: ctx.gpr[30] = (ctx.gpr[30] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089184E0; } @@ -2228,7 +2082,6 @@ L_08918A68: } L_08918A7C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08918A9C; } @@ -2237,7 +2090,6 @@ L_08918A7C: L_08918A84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918A9C; } @@ -2246,7 +2098,6 @@ L_08918A84: L_08918A90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2080))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08918AFC; } @@ -2288,7 +2139,6 @@ L_08918AE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(96)))))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918B10; } @@ -2296,7 +2146,6 @@ L_08918AE0: } L_08918AF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918EC0; } @@ -2322,7 +2171,6 @@ L_08918B10: ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918B48; } @@ -2331,7 +2179,6 @@ L_08918B10: L_08918B28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2080))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08918B48; } @@ -2357,7 +2204,6 @@ L_08918B48: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918EAC; } @@ -2366,7 +2212,6 @@ L_08918B48: L_08918B60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918CEC; } @@ -2376,9 +2221,7 @@ L_08918B6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918CEC; } @@ -2389,7 +2232,6 @@ L_08918B84: aot_gpr_4 = (17204u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[21] + static_cast(48)); if (branch_taken) { @@ -2418,7 +2260,6 @@ L_08918BA0: } L_08918BD4: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08918C88; } @@ -2426,7 +2267,6 @@ L_08918BD4: } L_08918BDC: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_08918C24; } @@ -2449,7 +2289,6 @@ L_08918BE4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918C88; } @@ -2466,7 +2305,6 @@ L_08918BFC: } L_08918C08: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08918C88; } @@ -2488,7 +2326,6 @@ L_08918C10: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918C88; } @@ -2529,7 +2366,6 @@ L_08918C24: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918C88; } @@ -2595,9 +2431,7 @@ L_08918CB4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918CE4; } @@ -2607,9 +2441,7 @@ L_08918CCC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08918CEC; } @@ -2617,7 +2449,6 @@ L_08918CCC: } L_08918CE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918E94; } @@ -2625,7 +2456,6 @@ L_08918CE4: } L_08918CEC: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08918CFC; } @@ -2650,7 +2480,6 @@ L_08918D08: goto L_08918D0C; L_08918D0C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08918E94; } @@ -2658,7 +2487,6 @@ L_08918D0C: } L_08918D14: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08918E94; } @@ -2695,7 +2523,6 @@ L_08918D3C: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (ctx.gpr[19] & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08918D78; } @@ -2705,7 +2532,6 @@ L_08918D60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 | 0u); if (branch_taken) { @@ -2715,7 +2541,6 @@ L_08918D60: } L_08918D78: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08918E94; } @@ -2792,7 +2617,6 @@ L_08918E38: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); goto L_08918E7C; @@ -2800,7 +2624,6 @@ L_08918E38: goto L_08918E60; L_08918E60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08918E94; } @@ -2834,7 +2657,6 @@ L_08918E94: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918B60; } @@ -2845,7 +2667,6 @@ L_08918EAC: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918B10; } @@ -2882,7 +2703,17 @@ L_08918ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08918F0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2893,7 +2724,6 @@ L_08918F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08918F48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08918FAC; } @@ -2902,7 +2732,6 @@ L_08918F48: L_08918F50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08918FAC; } @@ -2912,7 +2741,6 @@ L_08918F5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08918FAC; } @@ -2935,7 +2763,6 @@ L_08918F7C: AOT_REGCACHE_SYNC_OUT(); return; L_08918F84: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08918FA4; } @@ -2945,7 +2772,6 @@ L_08918F8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1360))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08918FB4; } @@ -2953,7 +2779,6 @@ L_08918F8C: } L_08918F9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089192A8; } @@ -2961,7 +2786,6 @@ L_08918F9C: } L_08918FA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08919448; } @@ -2969,7 +2793,6 @@ L_08918FA4: } L_08918FAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08919448; } @@ -2980,7 +2803,6 @@ L_08918FB4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089192A8; } @@ -2988,7 +2810,6 @@ L_08918FB4: } L_08918FC8: aot_gpr_31 = (0x08918FD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08918FD0u) goto L_08918FD0; AOT_REGCACHE_SYNC_OUT(); return; L_08918FD0: @@ -2998,7 +2819,6 @@ L_08918FD0: aot_gpr_4 = (ctx.hi); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919148; } @@ -3058,7 +2878,6 @@ L_0891905C: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_089190A4; } @@ -3080,9 +2899,7 @@ L_0891906C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089190A4; } @@ -3095,7 +2912,6 @@ L_08919094: AOT_REGCACHE_SYNC_OUT(); return; L_0891909C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089190AC; } @@ -3103,7 +2919,6 @@ L_0891909C: } L_089190A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089190DC; } @@ -3112,7 +2927,6 @@ L_089190A4: L_089190AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089190DC; } @@ -3123,7 +2937,6 @@ L_089190B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(144))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089190DC; } @@ -3157,7 +2970,6 @@ L_089190F0: } L_089190FC: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08919138; } @@ -3168,7 +2980,6 @@ L_08919104: aot_gpr_4 = (aot_gpr_29 + aot_gpr_4); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08919138; } @@ -3205,7 +3016,6 @@ L_08919148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089192A8; } @@ -3213,14 +3023,12 @@ L_08919148: } L_08919158: aot_gpr_31 = (0x08919160u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08919160u) goto L_08919160; AOT_REGCACHE_SYNC_OUT(); return; L_08919160: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089192A8; } @@ -3289,9 +3097,7 @@ L_089191A8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089191F0; } @@ -3299,7 +3105,6 @@ L_089191A8: } L_089191E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08919280; } @@ -3336,7 +3141,6 @@ L_08919214: goto L_0891921C; L_0891921C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08919268; } @@ -3349,7 +3153,6 @@ L_08919228: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08919268; } @@ -3362,7 +3165,6 @@ L_08919238: AOT_REGCACHE_SYNC_OUT(); return; L_08919240: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08919268; } @@ -3373,7 +3175,6 @@ L_08919248: aot_gpr_5 = (0u | 37u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08919268; } @@ -3394,7 +3195,6 @@ L_08919268: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089191A8; } @@ -3403,7 +3203,6 @@ L_08919268: L_08919280: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891929C; } @@ -3425,7 +3224,6 @@ L_089192A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); ctx.gpr[17] = (0u | 5u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08919448; } @@ -3445,9 +3243,7 @@ L_089192C8: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891943C; } @@ -3458,7 +3254,6 @@ L_089192EC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919448; } @@ -3489,7 +3284,6 @@ L_08919314: L_08919338: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1784))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08919420; } @@ -3498,7 +3292,6 @@ L_08919338: L_08919344: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08919420; } @@ -3543,9 +3336,7 @@ L_08919350: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919420; } @@ -3574,7 +3365,6 @@ L_089193A0: AOT_REGCACHE_SYNC_OUT(); return; L_089193AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08919420; } @@ -3588,7 +3378,6 @@ L_089193B4: AOT_REGCACHE_SYNC_OUT(); return; L_089193C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08919420; } @@ -3596,7 +3385,6 @@ L_089193C0: } L_089193C8: aot_gpr_31 = (0x089193D0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089193D0u) goto L_089193D0; AOT_REGCACHE_SYNC_OUT(); return; L_089193D0: @@ -3610,7 +3398,6 @@ L_089193D0: AOT_REGCACHE_SYNC_OUT(); return; L_089193E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08919420; } @@ -3623,7 +3410,6 @@ L_089193F0: AOT_REGCACHE_SYNC_OUT(); return; L_089193F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08919420; } @@ -3656,7 +3442,6 @@ L_08919420: } L_08919434: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08919448; } @@ -3688,7 +3473,17 @@ L_08919448: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08919480: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3756,7 +3551,6 @@ L_0891951C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919708; } @@ -3843,7 +3637,6 @@ L_089195E4: goto L_089195F4; L_089195F4: aot_gpr_31 = (0x089195FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089195FCu) goto L_089195FC; AOT_REGCACHE_SYNC_OUT(); return; L_089195FC: @@ -3857,9 +3650,7 @@ L_08919608: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = aot_fpr_12 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919638; } @@ -3879,9 +3670,7 @@ L_08919624: L_08919638: aot_fpr_13 = aot_fpr_12 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891965C; } @@ -3896,9 +3685,7 @@ L_0891964C: L_0891965C: aot_fpr_13 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919678; } @@ -3915,9 +3702,7 @@ L_08919670: L_08919678: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919694; } @@ -3953,7 +3738,6 @@ L_089196B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919708; } @@ -3974,7 +3758,6 @@ L_089196D8: L_089196E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919708; } @@ -3993,7 +3776,6 @@ L_08919708: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919740; } @@ -4013,7 +3795,6 @@ L_08919740: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08919778; } @@ -4090,7 +3871,6 @@ L_08919778: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919968; } @@ -4114,7 +3894,6 @@ L_0891982C: L_08919850: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (0u | 1u); goto L_08919894; @@ -4124,7 +3903,6 @@ L_08919864: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (0u | 1u); goto L_08919894; @@ -4133,9 +3911,7 @@ L_08919864: L_0891987C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919894; } @@ -4187,9 +3963,7 @@ L_089198D8: L_089198EC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919910; } @@ -4203,9 +3977,7 @@ L_08919900: goto L_08919910; L_08919910: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919934; } @@ -4225,9 +3997,7 @@ L_08919920: L_08919934: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919958; } @@ -4248,7 +4018,6 @@ L_08919958: L_08919968: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -4298,7 +4067,6 @@ L_089199E8: AOT_REGCACHE_SYNC_OUT(); return; L_089199F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08919A08; } @@ -4311,7 +4079,6 @@ L_089199F8: AOT_REGCACHE_SYNC_OUT(); return; L_08919A00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08919CB0; } @@ -4319,12 +4086,10 @@ L_08919A00: } L_08919A08: aot_gpr_31 = (0x08919A10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08919A10u) goto L_08919A10; AOT_REGCACHE_SYNC_OUT(); return; L_08919A10: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08919CB0; } @@ -4337,7 +4102,6 @@ L_08919A18: AOT_REGCACHE_SYNC_OUT(); return; L_08919A20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08919CB0; } @@ -4393,9 +4157,7 @@ L_08919A94: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919AC0; } @@ -4409,7 +4171,6 @@ L_08919AB0: goto L_08919AC0; L_08919AC0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16223u << 16u); if (branch_taken) { @@ -4421,9 +4182,7 @@ L_08919AD0: aot_gpr_4 = (aot_gpr_4 | 26355u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919B34; } @@ -4464,7 +4223,6 @@ L_08919B34: L_08919B44: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08919B80; } @@ -4480,7 +4238,6 @@ L_08919B50: L_08919B60: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08919B80; } @@ -4498,7 +4255,6 @@ L_08919B7C: goto L_08919B80; L_08919B80: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919B9C; } @@ -4507,9 +4263,7 @@ L_08919B80: L_08919B88: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08919CB0; } @@ -4527,7 +4281,6 @@ L_08919BA8: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -4552,7 +4305,6 @@ L_08919BE0: aot_gpr_4 = (aot_gpr_4 | 26355u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -4568,7 +4320,6 @@ L_08919BFC: goto L_08919C0C; L_08919C0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16223u << 16u); if (branch_taken) { @@ -4580,7 +4331,6 @@ L_08919C1C: aot_gpr_4 = (aot_gpr_4 | 26355u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17204u << 16u); if (branch_taken) { @@ -4644,7 +4394,17 @@ L_08919CB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08919CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); @@ -4656,7 +4416,6 @@ L_08919CD8: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(248), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08919D24; } @@ -4668,7 +4427,6 @@ L_08919D0C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919DC8; } @@ -4677,7 +4435,6 @@ L_08919D0C: L_08919D24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08919DC0; } @@ -4700,7 +4457,6 @@ L_08919D48: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08919DA4; } @@ -4749,7 +4505,6 @@ L_08919D90: } L_08919D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891A014; } @@ -4765,7 +4520,6 @@ L_08919DA4: AOT_REGCACHE_SYNC_OUT(); return; L_08919DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891A35C; } @@ -4773,7 +4527,6 @@ L_08919DB8: } L_08919DC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891A35C; } @@ -4781,7 +4534,6 @@ L_08919DC0: } L_08919DC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891A35C; } @@ -4808,7 +4560,6 @@ L_08919DE0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919EFC; } @@ -4819,7 +4570,6 @@ L_08919E00: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08919EFC; } @@ -5028,7 +4778,6 @@ L_08919F10: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08919FAC; } @@ -5039,7 +4788,6 @@ L_08919F38: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08919FAC; } @@ -5135,7 +4883,6 @@ L_0891A024: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(288))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(288))); goto L_0891A054; @@ -5144,7 +4891,6 @@ L_0891A024: L_0891A03C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1940))); goto L_0891A154; @@ -5162,7 +4908,6 @@ L_0891A054: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = aot_fpr_14 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5220,7 +4965,6 @@ L_0891A0D8: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5242,7 +4986,6 @@ L_0891A124: goto L_0891A14C; L_0891A14C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891A170; } @@ -5260,7 +5003,6 @@ L_0891A154: L_0891A170: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891A28C; } @@ -5280,7 +5022,6 @@ L_0891A190: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891A28C; } @@ -5338,7 +5079,6 @@ L_0891A208: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891A24C; } @@ -5349,7 +5089,6 @@ L_0891A224: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891A260; } @@ -5360,7 +5099,6 @@ L_0891A238: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891A260; } @@ -5375,9 +5113,7 @@ L_0891A24C: goto L_0891A260; L_0891A260: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A28C; } @@ -5422,7 +5158,6 @@ L_0891A28C: L_0891A2C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891A35C; } @@ -5439,7 +5174,6 @@ L_0891A2CC: L_0891A2E0: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0891A35C; } @@ -5464,7 +5198,6 @@ L_0891A304: AOT_REGCACHE_SYNC_OUT(); return; L_0891A30C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891A338; } @@ -5474,9 +5207,7 @@ L_0891A314: ctx.fpr[22] = ctx.fpr[22] - aot_fpr_20; aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A330; } @@ -5498,9 +5229,7 @@ L_0891A338: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A358; } @@ -5528,7 +5257,17 @@ L_0891A35C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891A380: aot_gpr_29 = (aot_gpr_29 + static_cast(-912)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(872), aot_gpr_16); @@ -5544,7 +5283,6 @@ L_0891A380: AOT_REGCACHE_SYNC_OUT(); return; L_0891A3C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891A414; } @@ -5588,7 +5326,6 @@ L_0891A414: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891A434; } @@ -5598,7 +5335,6 @@ L_0891A424: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891A444; } @@ -5630,9 +5366,7 @@ L_0891A45C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2092))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A480; } @@ -5722,7 +5456,6 @@ L_0891A4C0: AOT_REGCACHE_SYNC_OUT(); return; L_0891A540: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891A610; } @@ -5784,9 +5517,7 @@ L_0891A5AC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A60C; } @@ -5794,7 +5525,6 @@ L_0891A5AC: } L_0891A5E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891A610; } @@ -5820,7 +5550,6 @@ L_0891A60C: goto L_0891A610; L_0891A610: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0891A6CC; } @@ -5889,7 +5618,6 @@ L_0891A618: AOT_REGCACHE_SYNC_OUT(); return; L_0891A688: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891A6CC; } @@ -5907,9 +5635,7 @@ L_0891A690: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A6CC; } @@ -5947,7 +5673,6 @@ L_0891A6CC: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[20] = (std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0891A740u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891A740u) goto L_0891A740; AOT_REGCACHE_SYNC_OUT(); return; L_0891A740: @@ -6102,7 +5827,6 @@ L_0891A86C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); goto L_0891A894; @@ -6125,9 +5849,7 @@ L_0891A894: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; { const float fs = aot_fpr_20; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A8D0; } @@ -6149,7 +5871,6 @@ L_0891A8D0: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16243u << 16u); if (branch_taken) { @@ -6170,9 +5891,7 @@ L_0891A8FC: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891A930; } @@ -6198,7 +5917,6 @@ L_0891A930: goto L_0891A940; L_0891A940: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891A9C4; } @@ -6206,7 +5924,6 @@ L_0891A940: } L_0891A948: aot_gpr_31 = (0x0891A950u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891A950u) goto L_0891A950; AOT_REGCACHE_SYNC_OUT(); return; L_0891A950: @@ -6234,7 +5951,6 @@ L_0891A974: AOT_REGCACHE_SYNC_OUT(); return; L_0891A988: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_0891A9B0; } @@ -6242,7 +5958,6 @@ L_0891A988: } L_0891A990: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0891A9B0; } @@ -6270,7 +5985,6 @@ L_0891A9B0: } L_0891A9C4: aot_gpr_31 = (0x0891A9CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891A9CCu) goto L_0891A9CC; AOT_REGCACHE_SYNC_OUT(); return; L_0891A9CC: @@ -6298,7 +6012,6 @@ L_0891A9F0: AOT_REGCACHE_SYNC_OUT(); return; L_0891AA04: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_0891AA20; } @@ -6346,9 +6059,7 @@ L_0891AA44: aot_fpr_13 = std::sqrt(aot_fpr_13); ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[15])) && aot_fpr_13 == ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891AB58; } @@ -6365,7 +6076,6 @@ L_0891AA98: aot_fpr_14 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0891AACC; @@ -6376,9 +6086,7 @@ L_0891AACC: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891AAF8; } @@ -6386,7 +6094,6 @@ L_0891AACC: } L_0891AAE8: aot_gpr_31 = (0x0891AAF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 36u, 0x08B6033Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891AAF0u) goto L_0891AAF0; AOT_REGCACHE_SYNC_OUT(); return; L_0891AAF0: @@ -6399,7 +6106,6 @@ L_0891AAF0: } L_0891AAF8: aot_gpr_31 = (0x0891AB00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 26u, 0x089644F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891AB00u) goto L_0891AB00; AOT_REGCACHE_SYNC_OUT(); return; L_0891AB00: @@ -6426,7 +6132,6 @@ L_0891AB34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891AB58; } @@ -6435,7 +6140,6 @@ L_0891AB34: L_0891AB44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891AB58; } @@ -6470,7 +6174,6 @@ L_0891AB84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891ABA4; } @@ -6480,7 +6183,6 @@ L_0891AB94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891ACDC; } @@ -6499,7 +6201,6 @@ L_0891ABA4: } L_0891ABB8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891AC3C; } @@ -6545,7 +6246,6 @@ L_0891ABE4: AOT_REGCACHE_SYNC_OUT(); return; L_0891AC34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891ACD4; } @@ -6554,7 +6254,6 @@ L_0891AC34: L_0891AC3C: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891ACD4; } @@ -6564,7 +6263,6 @@ L_0891AC48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891ACD4; } @@ -6612,7 +6310,6 @@ L_0891AC7C: AOT_REGCACHE_SYNC_OUT(); return; L_0891ACD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891B0D8; } @@ -6757,7 +6454,6 @@ L_0891AE1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891B0D8; } @@ -6833,7 +6529,6 @@ L_0891AE2C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B0D8; } @@ -6880,9 +6575,7 @@ L_0891AEE0: L_0891AF24: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891AFB4; } @@ -6925,7 +6618,6 @@ L_0891AF80: AOT_REGCACHE_SYNC_OUT(); return; L_0891AFAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891B0C4; } @@ -6938,7 +6630,6 @@ L_0891AFB4: aot_gpr_5 = (aot_gpr_5 >> 24u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0891B0C4; } @@ -6947,9 +6638,7 @@ L_0891AFB4: L_0891AFD0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B0C4; } @@ -6992,7 +6681,6 @@ L_0891B044: } L_0891B04C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891B0C4; } @@ -7040,7 +6728,6 @@ L_0891B0C4: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891AEBC; } @@ -7080,7 +6767,6 @@ L_0891B108: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); goto L_0891B250; @@ -7112,7 +6798,6 @@ L_0891B138: AOT_REGCACHE_SYNC_OUT(); return; L_0891B160: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891B24C; } @@ -7123,9 +6808,7 @@ L_0891B168: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B1A8; } @@ -7204,7 +6887,6 @@ L_0891B238: AOT_REGCACHE_SYNC_OUT(); return; L_0891B244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891B7A8; } @@ -7222,7 +6904,6 @@ L_0891B250: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(0u); if (branch_taken) { @@ -7241,7 +6922,6 @@ L_0891B27C: aot_gpr_4 = (aot_gpr_4 + static_cast(14064)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); goto L_0891B328; @@ -7302,9 +6982,7 @@ L_0891B328: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B518; } @@ -7313,9 +6991,7 @@ L_0891B328: L_0891B354: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B39C; } @@ -7363,9 +7039,7 @@ L_0891B39C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B4DC; } @@ -7461,7 +7135,6 @@ L_0891B414: AOT_REGCACHE_SYNC_OUT(); return; L_0891B47C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891B48C; } @@ -7506,9 +7179,7 @@ L_0891B4DC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B50C; } @@ -7529,7 +7200,6 @@ L_0891B50C: L_0891B518: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B640; } @@ -7540,7 +7210,6 @@ L_0891B524: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20076))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891B640; } @@ -7577,7 +7246,6 @@ L_0891B538: AOT_REGCACHE_SYNC_OUT(); return; L_0891B568: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891B578; } @@ -7591,9 +7259,7 @@ L_0891B578: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(568))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B640; } @@ -7639,7 +7305,6 @@ L_0891B5C0: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(608), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0891B5E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891B5E0u) goto L_0891B5E0; AOT_REGCACHE_SYNC_OUT(); return; L_0891B5E0: @@ -7668,7 +7333,6 @@ L_0891B630: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891B5A0; } @@ -7677,7 +7341,6 @@ L_0891B630: L_0891B640: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B714; } @@ -7688,7 +7351,6 @@ L_0891B64C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20080))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891B714; } @@ -7729,7 +7391,6 @@ L_0891B660: AOT_REGCACHE_SYNC_OUT(); return; L_0891B6A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891B6B0; } @@ -7743,9 +7404,7 @@ L_0891B6B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(648))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891B714; } @@ -7775,7 +7434,6 @@ L_0891B6C8: AOT_REGCACHE_SYNC_OUT(); return; L_0891B714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891B7A0; } @@ -7850,7 +7508,17 @@ L_0891B7A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891B7DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -7904,7 +7572,6 @@ L_0891B854: ctx.gpr[17] = (aot_gpr_4 + aot_gpr_5); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_0891B88C; } @@ -7946,7 +7613,6 @@ L_0891B8AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891B8D4; } @@ -7956,7 +7622,6 @@ L_0891B8BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); aot_gpr_4 = (static_cast(aot_gpr_4) < 20000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B8D4; } @@ -7974,7 +7639,6 @@ L_0891B8D4: L_0891B8DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0891BA4C; } @@ -7983,7 +7647,6 @@ L_0891B8DC: L_0891B8E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0891BA4C; } @@ -8000,7 +7663,6 @@ L_0891B8F4: L_0891B8FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B970; } @@ -8017,7 +7679,6 @@ L_0891B908: aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B954; } @@ -8036,7 +7697,6 @@ L_0891B934: } L_0891B948: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891B954; } @@ -8063,7 +7723,6 @@ L_0891B968: AOT_REGCACHE_SYNC_OUT(); return; L_0891B970: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0891B9F4; } @@ -8095,7 +7754,6 @@ L_0891B994: AOT_REGCACHE_SYNC_OUT(); return; L_0891B99C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891B9BC; } @@ -8103,7 +7761,6 @@ L_0891B99C: } L_0891B9A4: { const bool branch_taken = static_cast(ctx.gpr[23]) < 0; - // nop if (branch_taken) { goto L_0891B9F4; } @@ -8116,7 +7773,6 @@ L_0891B9AC: AOT_REGCACHE_SYNC_OUT(); return; L_0891B9B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891B9F4; } @@ -8124,7 +7780,6 @@ L_0891B9B4: } L_0891B9BC: { const bool branch_taken = static_cast(ctx.gpr[22]) < 0; - // nop if (branch_taken) { goto L_0891B9D4; } @@ -8139,7 +7794,6 @@ L_0891B9C4: AOT_REGCACHE_SYNC_OUT(); return; L_0891B9D4: { const bool branch_taken = static_cast(ctx.gpr[23]) < 0; - // nop if (branch_taken) { goto L_0891B9EC; } @@ -8167,7 +7821,6 @@ L_0891B9F4: L_0891BA04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1929)))))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891BA4C; } @@ -8180,7 +7833,6 @@ L_0891BA10: AOT_REGCACHE_SYNC_OUT(); return; L_0891BA18: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BA4C; } @@ -8206,7 +7858,6 @@ L_0891BA40: L_0891BA4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0891BA5C; } @@ -8234,7 +7885,17 @@ L_0891BA5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891BA8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); @@ -8267,7 +7928,6 @@ L_0891BAE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BB70; } @@ -8297,7 +7957,6 @@ L_0891BB30: ctx.gpr[9] = (ctx.gpr[3] & ctx.gpr[21]); ctx.gpr[8] = (ctx.gpr[2] & ctx.gpr[20]); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0891BB50; } @@ -8305,7 +7964,6 @@ L_0891BB30: } L_0891BB48: { const bool branch_taken = ctx.gpr[9] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0891BB70; } @@ -8315,7 +7973,6 @@ L_0891BB50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BB70; } @@ -8338,7 +7995,6 @@ L_0891BB70: AOT_REGCACHE_SYNC_OUT(); return; L_0891BB78: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BC00; } @@ -8370,7 +8026,6 @@ L_0891BBBC: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0891BBE4; } @@ -8378,7 +8033,6 @@ L_0891BBBC: } L_0891BBDC: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0891BC00; } @@ -8389,7 +8043,6 @@ L_0891BBE4: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0891BC00; } @@ -8406,7 +8059,6 @@ L_0891BC00: AOT_REGCACHE_SYNC_OUT(); return; L_0891BC08: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BC9C; } @@ -8416,7 +8068,6 @@ L_0891BC10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); ctx.gpr[19] = (0u | 6u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0891BC9C; } @@ -8448,7 +8099,6 @@ L_0891BC5C: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0891BC84; } @@ -8456,7 +8106,6 @@ L_0891BC5C: } L_0891BC7C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0891BC9C; } @@ -8465,7 +8114,6 @@ L_0891BC7C: L_0891BC84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0891BC9C; } @@ -8487,7 +8135,6 @@ L_0891BC9C: AOT_REGCACHE_SYNC_OUT(); return; L_0891BCA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891BD0C; } @@ -8497,7 +8144,6 @@ L_0891BCAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BD0C; } @@ -8507,7 +8153,6 @@ L_0891BCBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 214u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BD0C; } @@ -8523,7 +8168,6 @@ L_0891BCCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_5 = (0u | 26u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891BD04; } @@ -8533,7 +8177,6 @@ L_0891BCF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BD0C; } @@ -8559,7 +8202,17 @@ L_0891BD0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891BD30: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8573,7 +8226,6 @@ L_0891BD30: AOT_REGCACHE_SYNC_OUT(); return; L_0891BD58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BD8C; } @@ -8588,7 +8240,6 @@ L_0891BD60: AOT_REGCACHE_SYNC_OUT(); return; L_0891BD70: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BD8C; } @@ -8603,7 +8254,6 @@ L_0891BD78: goto L_0891BD84; L_0891BD84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891BDBC; } @@ -8616,7 +8266,6 @@ L_0891BD8C: AOT_REGCACHE_SYNC_OUT(); return; L_0891BD94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8626,7 +8275,6 @@ L_0891BD9C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891BDBC; } @@ -8639,7 +8287,6 @@ L_0891BDAC: AOT_REGCACHE_SYNC_OUT(); return; L_0891BDB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891BDD8; } @@ -8652,7 +8299,6 @@ L_0891BDBC: AOT_REGCACHE_SYNC_OUT(); return; L_0891BDC4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BDD8; } @@ -8666,7 +8312,6 @@ L_0891BDCC: L_0891BDD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 6u, 0x0891C04Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8679,7 +8324,6 @@ L_0891BDE4: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BE1C; } @@ -8695,7 +8339,6 @@ L_0891BE00: AOT_REGCACHE_SYNC_OUT(); return; L_0891BE14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891BE2C; } @@ -8726,7 +8369,6 @@ L_0891BE2C: AOT_REGCACHE_SYNC_OUT(); return; L_0891BE38: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BE60; } @@ -8736,7 +8378,6 @@ L_0891BE40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8749,7 +8390,6 @@ L_0891BE50: AOT_REGCACHE_SYNC_OUT(); return; L_0891BE58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8759,7 +8399,6 @@ L_0891BE60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8769,7 +8408,6 @@ L_0891BE70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8779,7 +8417,6 @@ L_0891BE80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8789,7 +8426,6 @@ L_0891BE90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8801,7 +8437,6 @@ L_0891BEA0: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(1000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 13u, 0x0891C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8822,7 +8457,6 @@ L_0891BEB8: AOT_REGCACHE_SYNC_OUT(); return; L_0891BEE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891BF14; } @@ -8838,7 +8472,6 @@ L_0891BEE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891BF14; } @@ -8855,7 +8488,6 @@ L_0891BF14: AOT_REGCACHE_SYNC_OUT(); return; L_0891BF20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891BFCC; } @@ -8863,7 +8495,6 @@ L_0891BF20: } L_0891BF28: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0891BFCC; } @@ -8877,7 +8508,6 @@ L_0891BF30: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891BF9C; } @@ -8888,7 +8518,6 @@ L_0891BF50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 49 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891BF78; } @@ -8899,7 +8528,6 @@ L_0891BF64: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BF80; } @@ -8918,7 +8546,6 @@ L_0891BF80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 47 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891BFF0; } @@ -8937,7 +8564,6 @@ L_0891BF9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891BFC4; } @@ -8948,7 +8574,6 @@ L_0891BFB0: aot_gpr_5 = (0u | 207u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891BFF0; } @@ -8964,7 +8589,6 @@ L_0891BFC4: } L_0891BFCC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0891BFF0; } @@ -8972,14 +8596,12 @@ L_0891BFCC: } L_0891BFD4: aot_gpr_31 = (0x0891BFDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891BFDCu) goto L_0891BFDC; AOT_REGCACHE_SYNC_OUT(); return; L_0891BFDC: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891BFF0; } @@ -8991,7 +8613,6 @@ L_0891BFEC: L_0891BFF0: aot_gpr_4 = (0u | 173u); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0070_entry, 70u, 3u, 0x0891C01Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0070.cpp b/profiles/vcs/generated/generated_unit_0070.cpp index 16fa18e..9a27b9e 100644 --- a/profiles/vcs/generated/generated_unit_0070.cpp +++ b/profiles/vcs/generated/generated_unit_0070.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0070[4095] = { - 1, 0, 0, 0, 0, 0, 2, 3, 0, 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, - 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 0, 0, 21, 0, 22, 0, 23, 0, 24, 0, - 25, 0, 0, 26, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 31, 0, 32, 33, 0, 34, 0, 0, 0, 35, 0, - 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 39, 0, 0, 0, 0, 40, 0, 41, 0, 42, 0, 43, 0, 0, 0, 44, 0, 0, - 45, 0, 0, 0, 46, 47, 0, 48, 0, 0, 0, 49, 0, 50, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 55, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, - 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 66, - 0, 0, 0, 0, 67, 0, 0, 0, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 71, 0, 0, 0, 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, - 79, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 82, 0, 83, 0, 0, 0, 84, 0, 85, 0, 0, 0, 0, 86, 0, 87, 0, 88, 0, 0, - 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 93, 0, 0, 94, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 97, 0, - 0, 98, 99, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 109, 0, 110, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 118, 0, 0, 119, 0, 0, 0, 0, 120, 0, 121, - 0, 0, 0, 0, 122, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, - 0, 0, 129, 130, 0, 0, 131, 0, 132, 0, 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 136, 0, 137, 0, - 138, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 0, - 0, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 149, 150, 0, 0, 151, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, - 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 0, 164, 0, 165, 0, 166, 0, 0, 167, 0, 168, - 0, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 173, 0, 174, 0, 0, 175, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 0, 179, 0, 180, 0, 0, 0, 181, 0, 182, 0, 0, 0, - 183, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 187, 0, 188, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 0, 0, 192, 0, 193, 0, 0, - 194, 0, 195, 0, 0, 0, 196, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 199, 0, 200, 0, 201, 0, 0, 202, 0, 0, 203, 204, 0, 0, - 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, - 216, 0, 217, 0, 218, 0, 219, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, - 0, 0, 228, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 231, 0, 232, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 236, 0, - 0, 0, 237, 0, 238, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 247, 0, 0, 248, 0, 0, 0, 249, - 0, 0, 0, 250, 0, 0, 0, 251, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, 0, 0, 258, 0, - 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 0, 261, 0, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 265, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 268, - 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, - 0, 0, 276, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 281, 0, 0, 282, 0, 0, 0, 283, - 0, 0, 284, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 290, 0, 291, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 305, 0, 306, 0, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, - 310, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, 0, - 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 326, 327, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 334, 0, 335, 0, 0, 336, 0, 0, 0, - 337, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 0, - 350, 0, 351, 0, 352, 0, 0, 0, 353, 0, 0, 0, 354, 355, 0, 0, 356, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 359, 0, 0, 360, 0, - 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 363, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, - 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 0, 0, - 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 379, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 382, 0, 383, 0, 0, 0, 0, 384, 0, 0, 385, - 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 396, 0, 0, 0, 397, 398, 0, 0, - 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 404, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 407, 0, 408, 0, 0, 0, 0, 409, 0, 0, 410, 0, - 0, 0, 411, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 0, 419, 0, 0, 0, 420, 0, 421, 0, 0, 0, 422, 423, 0, 0, 0, - 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, - 0, 0, 0, 428, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 432, 0, 0, 0, - 0, 433, 0, 434, 0, 0, 435, 0, 436, 0, 0, 437, 0, 438, 0, 0, 439, 0, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 443, 0, 444, - 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, - 449, 0, 450, 0, 451, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, - 459, 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 0, - 0, 0, 469, 0, 0, 470, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, 0, 476, 0, 0, 477, 0, 0, 478, 479, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, - 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 494, - 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, - 499, 0, 0, 0, 500, 0, 0, 0, 0, 501, 0, 0, 502, 0, 0, 503, 0, 0, 504, 0, 505, 506, 0, 0, 0, 507, 0, 0, 0, 508, 0, 509, - 0, 510, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 513, 0, 514, 0, 515, 0, 0, 516, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 519, - 0, 0, 0, 520, 0, 521, 0, 0, 0, 522, 0, 523, 524, 0, 525, 0, 0, 526, 0, 527, 0, 0, 528, 529, 0, 0, 0, 530, 0, 531, 0, 532, - 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 535, 0, 0, 0, 536, 0, 537, 0, 538, 0, 0, 0, 0, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 542, 0, 543, 0, 0, 544, 0, 0, 0, 545, 0, 546, 0, 0, 547, 0, 0, 548, - 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 551, 0, 0, 0, 552, 0, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 0, - 561, 0, 0, 562, 0, 563, 0, 564, 565, 0, 566, 0, 567, 0, 568, 0, 0, 0, 569, 0, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, - 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, - 578, 0, 579, 0, 0, 0, 580, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, 0, 0, 586, 0, 587, 588, 0, - 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 0, 0, 593, 0, 594, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 598, 0, 599, 0, 0, 0, 0, 600, 0, 0, 0, 601, 0, 602, 603, 604, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 605, 0, 0, 0, 606, 0, 607, 0, 0, 0, 608, 0, 0, 609, 0, 0, 610, 0, 0, 0, 611, 0, 0, 612, 0, 0, 613, - 0, 0, 0, 614, 0, 0, 615, 0, 0, 616, 0, 0, 0, 617, 0, 0, 618, 0, 0, 619, 0, 620, 0, 621, 0, 622, 0, 0, 0, 0, 623, 0, - 0, 624, 0, 625, 0, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 630, - 0, 0, 0, 631, 0, 632, 0, 0, 633, 0, 634, 0, 635, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 639, 0, 640, 0, 641, - 0, 0, 642, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, 646, 0, 0, 0, 647, 0, 0, 648, 0, 649, 0, - 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, - 0, 0, 655, 656, 0, 0, 657, 0, 658, 0, 0, 0, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 0, 663, 0, 664, 0, 0, 0, 0, 0, 665, - 0, 666, 0, 667, 0, 668, 0, 0, 669, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, 673, 0, 0, 0, 674, 0, 0, - 0, 675, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 678, 0, 679, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 682, 0, 683, 0, - 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 0, 0, 0, 693, 0, 0, 0, - 694, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 0, 697, 0, 698, 0, 0, 699, 0, 0, 0, 700, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, - 0, 702, 0, 0, 0, 703, 0, 704, 0, 705, 0, 0, 0, 0, 0, 706, 707, 0, 708, 0, 0, 0, 0, 0, 709, 710, 0, 0, 0, 0, 711, 712, - 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 715, 0, 0, 0, 0, 716, 0, 0, 717, 0, 718, 0, 719, 0, 0, 720, - 0, 0, 0, 721, 0, 0, 0, 722, 0, 723, 0, 724, 0, 725, 0, 726, 0, 0, 0, 0, 727, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 0, - 730, 0, 0, 731, 0, 732, 733, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 736, 0, - 737, 0, 0, 738, 0, 0, 0, 739, 0, 0, 740, 0, 741, 0, 742, 0, 0, 743, 0, 744, 0, 745, 0, 0, 746, 0, 747, 0, 0, 0, 0, 748, - 0, 0, 749, 0, 750, 0, 0, 751, 0, 752, 0, 753, 0, 0, 754, 0, 755, 0, 0, 0, 756, 0, 0, 757, 0, 0, 0, 0, 0, 758, 759, 0, - 760, 0, 0, 0, 761, 0, 0, 762, 0, 0, 0, 0, 0, 763, 0, 0, 0, 764, 0, 765, 0, 766, 0, 767, 0, 768, 0, 0, 0, 0, 0, 769, - 770, 0, 771, 0, 0, 772, 0, 0, 0, 773, 0, 774, 0, 775, 0, 776, 0, 0, 777, 0, 0, 778, 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, - 0, 781, 0, 0, 0, 782, 0, 783, 0, 0, 784, 0, 785, 0, 786, 787, 0, 0, 0, 788, 0, 0, 789, 0, 790, 0, 791, 0, 792, 0, 793, 0, - 0, 0, 0, 0, 0, 794, 0, 795, 0, 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, 0, 0, 0, 0, 798, 0, 799, 0, 0, 0, 800, 0, 0, - 0, 0, 0, 0, 801, 0, 802, 0, 0, 0, 0, 0, 0, 803, 804, 0, 805, 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 808, 0, 0, 809, 0, - 0, 0, 810, 0, 0, 811, 0, 0, 0, 0, 812, 813, 0, 814, 0, 0, 0, 0, 815, 816, 0, 817, 0, 0, 0, 0, 818, 819, 0, 820, 0, 0, - 821, 0, 0, 822, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 824, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, - 0, 827, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 829, 0, 0, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, - 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 0, 834, - 0, 835, 0, 0, 0, 836, 837, 0, 0, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 0, 841, 0, 0, 842, - 0, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 845, 0, 846, 0, 0, 0, 0, 847, 0, 848, 0, 0, 849, 0, 0, 0, 0, 0, - 0, 850, 0, 851, 0, 0, 852, 0, 0, 0, 853, 854, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 857, 0, 0, 0, 858, - 0, 859, 0, 0, 0, 0, 0, 860, 0, 0, 0, 0, 0, 861, 0, 862, 0, 863, 0, 864, 0, 865, 0, 0, 0, 0, 0, 866, 0, 0, 0, 867, - 0, 868, 0, 869, 0, 0, 0, 870, 0, 0, 0, 871, 0, 872, 0, 0, 873, 0, 0, 0, 0, 0, 874, 0, 0, 0, 0, 0, 875, 0, 876, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0070[64] = { + 0x04082822880842C1ull, 0x45A2444955155400ull, 0x920A28B122A84C10ull, 0x9002440180248004ull, + 0x08A102A200080310ull, 0x448948242A145481ull, 0x0141400008021016ull, 0xA122448000050095ull, + 0x5100514C14120890ull, 0x260A0A4020821003ull, 0xA54AAAAA20000100ull, 0x145600044B000222ull, + 0x3254244528525249ull, 0x000800D540A05555ull, 0x444A888480111084ull, 0x8948000020129114ull, + 0x2205220844522288ull, 0x4110451090020000ull, 0x0002000C89280414ull, 0x0000000080000400ull, + 0x0400010280055010ull, 0x0001008000000020ull, 0x0805508010801000ull, 0x00A8000000540805ull, + 0x0020044809040000ull, 0x12A8000800110046ull, 0x0008800040000015ull, 0x2242000000888000ull, + 0x0089000448913115ull, 0x1200220112000021ull, 0x0000000020040001ull, 0x90B0004800001080ull, + 0x3144220002210488ull, 0x0000000010020020ull, 0x4858002400000840ull, 0x18A2110001108244ull, + 0x1240008840008810ull, 0x20000508A451294Aull, 0x2801104000010215ull, 0x2A00441000004085ull, + 0x40002000324942A4ull, 0x08002500A1555524ull, 0x8452A282A2349211ull, 0x02A28040A8CA5A28ull, + 0x0000400492894A01ull, 0x00A455A9208AAA44ull, 0x68AA014511080025ull, 0x03A2152000A8440Aull, + 0x42A9224892248A20ull, 0xA90495288040A20Aull, 0x8002000152284204ull, 0x828AA14C20004000ull, + 0x540152222248112Aull, 0x0822505111555042ull, 0x95210840C30582A2ull, 0x500080690150AA88ull, + 0x60914A94852A5489ull, 0x20A4AA2582AA2091ull, 0x228140A05548D4A2ull, 0x2C2C2C244A816050ull, + 0x0800902240024089ull, 0x9110806280800010ull, 0x8A004C4A04A15008ull, 0x5041288A882AA082ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0070[64] = { + 1u, 15u, 36u, 56u, 67u, 79u, 98u, 108u, 122u, 138u, 152u, 169u, 183u, 205u, 222u, 237u, + 250u, 266u, 276u, 287u, 289u, 298u, 301u, 310u, 319u, 326u, 337u, 343u, 350u, 365u, 374u, 377u, + 386u, 399u, 402u, 411u, 424u, 433u, 449u, 459u, 469u, 482u, 499u, 520u, 539u, 551u, 572u, 589u, + 605u, 624u, 642u, 653u, 666u, 684u, 702u, 721u, 737u, 760u, 781u, 801u, 821u, 832u, 843u, 859u, }; void recomp_unit_0070_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0070_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0891C000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0070[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0070[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0070[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0891C000; @@ -1061,7 +968,6 @@ L_0891C018: goto L_0891C01C; L_0891C01C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891C038; } @@ -1091,9 +997,7 @@ L_0891C04C: aot_gpr_4 = (aot_gpr_4 | 9200u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891C0B4; } @@ -1108,7 +1012,6 @@ L_0891C06C: AOT_REGCACHE_SYNC_OUT(); return; L_0891C07C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891C0CC; } @@ -1118,7 +1021,6 @@ L_0891C084: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891C0CC; } @@ -1135,7 +1037,6 @@ L_0891C094: AOT_REGCACHE_SYNC_OUT(); return; L_0891C0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C0CC; } @@ -1164,7 +1065,17 @@ L_0891C0CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891C0E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[19]); @@ -1194,7 +1105,6 @@ L_0891C128: AOT_REGCACHE_SYNC_OUT(); return; L_0891C130: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891C168; } @@ -1202,7 +1112,6 @@ L_0891C130: } L_0891C138: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C148; } @@ -1210,7 +1119,6 @@ L_0891C138: } L_0891C140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C424; } @@ -1218,7 +1126,6 @@ L_0891C140: } L_0891C148: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0891C424; } @@ -1236,7 +1143,6 @@ L_0891C150: } L_0891C160: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891C424; } @@ -1292,7 +1198,6 @@ L_0891C1A8: L_0891C1B8: aot_gpr_4 = (0u | 30u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891C1E0; } @@ -1307,7 +1212,6 @@ L_0891C1C4: AOT_REGCACHE_SYNC_OUT(); return; L_0891C1D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C1E0; } @@ -1318,7 +1222,6 @@ L_0891C1DC: goto L_0891C1E0; L_0891C1E0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0891C210; } @@ -1358,7 +1261,6 @@ L_0891C228: L_0891C22C: aot_gpr_4 = (0u | 121u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891C294; } @@ -1374,7 +1276,6 @@ L_0891C238: AOT_REGCACHE_SYNC_OUT(); return; L_0891C24C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C294; } @@ -1387,7 +1288,6 @@ L_0891C254: AOT_REGCACHE_SYNC_OUT(); return; L_0891C25C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C294; } @@ -1403,7 +1303,6 @@ L_0891C264: L_0891C274: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0891C294; } @@ -1421,7 +1320,6 @@ L_0891C290: goto L_0891C294; L_0891C294: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0891C2AC; } @@ -1473,7 +1371,6 @@ L_0891C2CC: L_0891C2E4: ctx.gpr[7] = (0u | 131u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0891C33C; } @@ -1555,7 +1452,6 @@ L_0891C380: { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.hi); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0891C410; } @@ -1635,7 +1531,17 @@ L_0891C424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891C44C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -1656,7 +1562,6 @@ L_0891C484: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891C9F4; } @@ -1669,7 +1574,6 @@ L_0891C494: AOT_REGCACHE_SYNC_OUT(); return; L_0891C49C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C9F4; } @@ -1680,7 +1584,6 @@ L_0891C4A4: aot_gpr_4 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (64u << 16u); if (branch_taken) { @@ -1698,7 +1601,6 @@ L_0891C4C0: AOT_REGCACHE_SYNC_OUT(); return; L_0891C4D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C4EC; } @@ -1708,7 +1610,6 @@ L_0891C4DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891C550; } @@ -1737,7 +1638,6 @@ L_0891C500: L_0891C51C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891C548; } @@ -1750,7 +1650,6 @@ L_0891C528: AOT_REGCACHE_SYNC_OUT(); return; L_0891C530: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C548; } @@ -1765,7 +1664,6 @@ L_0891C538: AOT_REGCACHE_SYNC_OUT(); return; L_0891C548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C9F4; } @@ -1817,7 +1715,6 @@ L_0891C594: L_0891C5AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0891C5CC; } @@ -1870,7 +1767,6 @@ L_0891C5E8: L_0891C5F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891C6C0; } @@ -1916,7 +1812,6 @@ L_0891C644: aot_gpr_4 = (aot_gpr_4 + static_cast(5)); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891C6C0; } @@ -1961,7 +1856,6 @@ L_0891C6C0: AOT_REGCACHE_SYNC_OUT(); return; L_0891C6D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C708; } @@ -1980,7 +1874,6 @@ L_0891C6E0: AOT_REGCACHE_SYNC_OUT(); return; L_0891C700: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C740; } @@ -1994,7 +1887,6 @@ L_0891C708: L_0891C710: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891C740; } @@ -2014,7 +1906,6 @@ L_0891C71C: AOT_REGCACHE_SYNC_OUT(); return; L_0891C740: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C9F4; } @@ -2062,7 +1953,6 @@ L_0891C7A8: L_0891C7B8: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0891C81C; } @@ -2094,7 +1984,6 @@ L_0891C7E0: AOT_REGCACHE_SYNC_OUT(); return; L_0891C7F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C810; } @@ -2117,7 +2006,6 @@ L_0891C81C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891C8A0; } @@ -2138,7 +2026,6 @@ L_0891C82C: L_0891C844: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1372))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891C870; } @@ -2181,7 +2068,6 @@ L_0891C88C: AOT_REGCACHE_SYNC_OUT(); return; L_0891C898: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891C9F4; } @@ -2196,7 +2082,6 @@ L_0891C8A0: AOT_REGCACHE_SYNC_OUT(); return; L_0891C8B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C944; } @@ -2210,7 +2095,6 @@ L_0891C8B8: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -2220,9 +2104,7 @@ L_0891C8B8: } L_0891C8E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891C8F8; } @@ -2238,7 +2120,6 @@ L_0891C8F0: } L_0891C8F8: aot_gpr_31 = (0x0891C900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891C900u) goto L_0891C900; AOT_REGCACHE_SYNC_OUT(); return; L_0891C900: @@ -2286,7 +2167,6 @@ L_0891C944: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891C998; } @@ -2324,7 +2204,6 @@ L_0891C998: AOT_REGCACHE_SYNC_OUT(); return; L_0891C9A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891C9CC; } @@ -2383,7 +2262,17 @@ L_0891C9F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891CA20: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[19]); @@ -2411,7 +2300,6 @@ L_0891CA74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891CBD8; } @@ -2432,7 +2320,6 @@ L_0891CA8C: AOT_REGCACHE_SYNC_OUT(); return; L_0891CA94: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0891CAA4; } @@ -2448,7 +2335,6 @@ L_0891CA9C: } L_0891CAA4: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_0891CAC4; } @@ -2461,7 +2347,6 @@ L_0891CAAC: AOT_REGCACHE_SYNC_OUT(); return; L_0891CAB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891CAC4; } @@ -2477,7 +2362,6 @@ L_0891CABC: } L_0891CAC4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891CAE0; } @@ -2486,7 +2370,6 @@ L_0891CAC4: L_0891CACC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1136))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_0891CAE0; } @@ -2502,7 +2385,6 @@ L_0891CAD8: } L_0891CAE0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0891CAFC; } @@ -2511,7 +2393,6 @@ L_0891CAE0: L_0891CAE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891CAFC; } @@ -2527,7 +2408,6 @@ L_0891CAF4: } L_0891CAFC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891CB6C; } @@ -2537,7 +2417,6 @@ L_0891CB04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891CB6C; } @@ -2590,9 +2469,7 @@ L_0891CB24: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891CB64; } @@ -2603,7 +2480,6 @@ L_0891CB60: goto L_0891CB64; L_0891CB64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891CBC8; } @@ -2612,7 +2488,6 @@ L_0891CB64: L_0891CB6C: aot_gpr_4 = (ctx.gpr[21] | ctx.gpr[18]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891CBC8; } @@ -2665,9 +2540,7 @@ L_0891CB88: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891CBC8; } @@ -2678,7 +2551,6 @@ L_0891CBC4: goto L_0891CBC8; L_0891CBC8: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0891CBD8; } @@ -2696,7 +2568,6 @@ L_0891CBD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891CBF0; } @@ -2723,7 +2594,6 @@ L_0891CC00: L_0891CC0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891CC30; } @@ -2732,7 +2602,6 @@ L_0891CC0C: L_0891CC18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891CC30; } @@ -2755,7 +2624,6 @@ L_0891CC30: L_0891CC38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891CC50; } @@ -2769,7 +2637,6 @@ L_0891CC44: AOT_REGCACHE_SYNC_OUT(); return; L_0891CC50: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891CC74; } @@ -2780,7 +2647,6 @@ L_0891CC58: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891CC74; } @@ -2802,7 +2668,6 @@ L_0891CC74: AOT_REGCACHE_SYNC_OUT(); return; L_0891CC80: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891CCB4; } @@ -2812,7 +2677,6 @@ L_0891CC88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891CCB4; } @@ -2834,7 +2698,6 @@ L_0891CCA8: L_0891CCB4: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); if (branch_taken) { @@ -2863,7 +2726,6 @@ L_0891CCD8: L_0891CCE4: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_16 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891CCF4; } @@ -2880,7 +2742,6 @@ L_0891CCF4: AOT_REGCACHE_SYNC_OUT(); return; L_0891CD00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891CD20; } @@ -2893,7 +2754,6 @@ L_0891CD08: AOT_REGCACHE_SYNC_OUT(); return; L_0891CD10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891CD78; } @@ -2901,7 +2761,6 @@ L_0891CD10: } L_0891CD18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891CD30; } @@ -2913,7 +2772,6 @@ L_0891CD20: goto L_0891CDCC; L_0891CD28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891CD9C; } @@ -2931,7 +2789,6 @@ L_0891CD38: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891CD78; } @@ -2949,7 +2806,6 @@ L_0891CD5C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891CD98; } @@ -2962,7 +2818,6 @@ L_0891CD78: AOT_REGCACHE_SYNC_OUT(); return; L_0891CD80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891CD98; } @@ -2974,7 +2829,6 @@ L_0891CD88: goto L_0891D2C4; L_0891CD90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891CD9C; } @@ -3002,7 +2856,17 @@ L_0891CD9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891CDCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3096,9 +2960,7 @@ L_0891CE7C: L_0891CE88: { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891CF44; } @@ -3120,7 +2982,6 @@ L_0891CEAC: AOT_REGCACHE_SYNC_OUT(); return; L_0891CEBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891CF44; } @@ -3134,7 +2995,6 @@ L_0891CEC4: L_0891CECC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891CF30; } @@ -3144,7 +3004,6 @@ L_0891CED8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1248))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891CF10; } @@ -3166,7 +3025,6 @@ L_0891CEF8: AOT_REGCACHE_SYNC_OUT(); return; L_0891CF08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891CF30; } @@ -3203,7 +3061,6 @@ L_0891CF3C: L_0891CF44: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891D0B4; } @@ -3259,7 +3116,6 @@ L_0891CF74: L_0891CFCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891D058; } @@ -3273,7 +3129,6 @@ L_0891CFD8: L_0891CFE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891D044; } @@ -3283,7 +3138,6 @@ L_0891CFEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1248))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891D024; } @@ -3305,7 +3159,6 @@ L_0891D00C: AOT_REGCACHE_SYNC_OUT(); return; L_0891D01C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891D044; } @@ -3343,7 +3196,6 @@ L_0891D058: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(328))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0891D0B4; } @@ -3353,7 +3205,6 @@ L_0891D068: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1024))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891D0B4; } @@ -3396,7 +3247,6 @@ L_0891D0B4: AOT_REGCACHE_SYNC_OUT(); return; L_0891D0C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891D1D0; } @@ -3518,9 +3368,7 @@ L_0891D170: L_0891D17C: { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891D1B8; } @@ -3535,7 +3383,6 @@ L_0891D190: AOT_REGCACHE_SYNC_OUT(); return; L_0891D1A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891D1B8; } @@ -3589,7 +3436,6 @@ L_0891D1F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1024))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0891D210; } @@ -3635,7 +3481,6 @@ L_0891D24C: L_0891D254: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(2232))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891D26C; } @@ -3684,7 +3529,17 @@ L_0891D28C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891D2C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-2032)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3824,7 +3679,6 @@ L_0891D438: AOT_REGCACHE_SYNC_OUT(); return; L_0891D440: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891D47C; } @@ -4267,7 +4121,6 @@ L_0891D630: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(288))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_5 | 0u); if (branch_taken) { @@ -4278,7 +4131,6 @@ L_0891D630: L_0891D65C: aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (ctx.gpr[21] | 0u); goto L_0891D670; @@ -4309,7 +4161,6 @@ L_0891D670: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(288))); ctx.fpr[26] = ctx.fpr[26] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_5 | 0u); if (branch_taken) { @@ -4320,7 +4171,6 @@ L_0891D670: L_0891D69C: ctx.gpr[17] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[17] = (ctx.gpr[21] | 0u); goto L_0891D6B0; @@ -4328,7 +4178,6 @@ L_0891D69C: goto L_0891D6B0; L_0891D6B0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0891D748; } @@ -4336,7 +4185,6 @@ L_0891D6B0: } L_0891D6B8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0891D748; } @@ -4398,7 +4246,6 @@ L_0891D6EC: goto L_0891D700; L_0891D700: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0891D848; } @@ -4450,7 +4297,6 @@ L_0891D72C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891D848; } @@ -4458,7 +4304,6 @@ L_0891D72C: } L_0891D748: { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0891D7CC; } @@ -4466,7 +4311,6 @@ L_0891D748: } L_0891D750: { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_0891D7CC; } @@ -4574,7 +4418,6 @@ L_0891D758: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891D848; } @@ -4582,7 +4425,6 @@ L_0891D758: } L_0891D7CC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891D848; } @@ -4590,7 +4432,6 @@ L_0891D7CC: } L_0891D7D4: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0891D848; } @@ -4805,9 +4646,7 @@ L_0891D8D4: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891D908; } @@ -4886,9 +4725,7 @@ L_0891D950: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891D9DC; } @@ -4938,7 +4775,6 @@ L_0891D98C: AOT_REGCACHE_SYNC_OUT(); return; L_0891D9CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891D9E4; } @@ -4946,7 +4782,6 @@ L_0891D9CC: } L_0891D9D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891DA10; } @@ -4970,7 +4805,6 @@ L_0891D9F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891DA08; } @@ -5106,9 +4940,7 @@ L_0891DA78: aot_fpr_14 = std::bit_cast(ctx.gpr[14]); aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891DB3C; } @@ -5116,9 +4948,7 @@ L_0891DA78: } L_0891DABC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891DB3C; } @@ -5225,7 +5055,6 @@ L_0891DACC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (ctx.gpr[12] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891DBC4; } @@ -5233,9 +5062,7 @@ L_0891DACC: } L_0891DB3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891DBC4; } @@ -5243,9 +5070,7 @@ L_0891DB3C: } L_0891DB4C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891DBC4; } @@ -5366,7 +5191,6 @@ L_0891DBC4: L_0891DBD8: aot_gpr_6 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_0891DC10; } @@ -5382,7 +5206,6 @@ L_0891DBE4: L_0891DBF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0891DC08; } @@ -5556,7 +5379,6 @@ L_0891DCDC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (aot_gpr_4 + static_cast(16)); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891DCC0; } @@ -5666,7 +5488,6 @@ L_0891DD80: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); ctx.gpr[18] = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0891DD64; } @@ -5905,9 +5726,7 @@ L_0891DE74: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891DF30; } @@ -5996,7 +5815,6 @@ L_0891DF30: L_0891DF8C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891DFD4; } @@ -6022,7 +5840,6 @@ L_0891DFD0: goto L_0891DFD4; L_0891DFD4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891E0F4; } @@ -6049,7 +5866,6 @@ L_0891DFFC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(560))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1912))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0891E0F0; } @@ -6077,7 +5893,6 @@ L_0891E028: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E0E0; } @@ -6088,7 +5903,6 @@ L_0891E040: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E064; } @@ -6153,9 +5967,7 @@ L_0891E064: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891E0B4; } @@ -6176,7 +5988,6 @@ L_0891E0B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1912))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E0D8; } @@ -6194,7 +6005,6 @@ L_0891E0C8: } L_0891E0D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891E0F4; } @@ -6407,9 +6217,7 @@ L_0891E170: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891E22C; } @@ -6498,7 +6306,6 @@ L_0891E22C: L_0891E288: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891E2D0; } @@ -6524,7 +6331,6 @@ L_0891E2CC: goto L_0891E2D0; L_0891E2D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891E3F0; } @@ -6551,7 +6357,6 @@ L_0891E2F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(564))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1912))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0891E3EC; } @@ -6579,7 +6384,6 @@ L_0891E324: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E3DC; } @@ -6590,7 +6394,6 @@ L_0891E33C: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E360; } @@ -6655,9 +6458,7 @@ L_0891E360: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891E3B0; } @@ -6678,7 +6479,6 @@ L_0891E3B0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1912))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E3D4; } @@ -6696,7 +6496,6 @@ L_0891E3C4: } L_0891E3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891E3F0; } @@ -6875,7 +6674,6 @@ L_0891E49C: L_0891E4D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1952))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891E50C; } @@ -6884,7 +6682,6 @@ L_0891E4D8: L_0891E4E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1944))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891E50C; } @@ -6893,7 +6690,6 @@ L_0891E4E4: L_0891E4F0: aot_gpr_4 = (0u | 2u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (ctx.gpr[8] | 0u); goto L_0891E504; @@ -6901,7 +6697,6 @@ L_0891E4F0: goto L_0891E504; L_0891E504: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891E5F4; } @@ -6910,7 +6705,6 @@ L_0891E504: L_0891E50C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1952))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891E520; } @@ -6927,7 +6721,6 @@ L_0891E518: L_0891E520: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1944))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891E534; } @@ -6944,7 +6737,6 @@ L_0891E52C: L_0891E534: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1948))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0891E558; } @@ -6954,7 +6746,6 @@ L_0891E540: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1940))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891E558; } @@ -6972,7 +6763,6 @@ L_0891E558: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1948))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891E57C; } @@ -6981,7 +6771,6 @@ L_0891E558: L_0891E568: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1940))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0891E57C; } @@ -7006,7 +6795,6 @@ L_0891E57C: L_0891E58C: aot_gpr_4 = (0u | 2u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (ctx.gpr[8] | 0u); goto L_0891E5A0; @@ -7014,7 +6802,6 @@ L_0891E58C: goto L_0891E5A0; L_0891E5A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891E5F4; } @@ -7037,7 +6824,6 @@ L_0891E5A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (ctx.gpr[8] | 0u); goto L_0891E5F4; @@ -7046,7 +6832,6 @@ L_0891E5A8: L_0891E5F4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0891E7E4; } @@ -7054,7 +6839,6 @@ L_0891E5F4: } L_0891E600: { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0891E6F4; } @@ -7116,7 +6900,6 @@ L_0891E640: ctx.fpr[16] = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[16])); ctx.gpr[7] = (std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store16(aot_gpr_5 + static_cast(2), static_cast(ctx.gpr[7])); if (branch_taken) { @@ -7161,7 +6944,6 @@ L_0891E6C0: } L_0891E6EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891E7E4; } @@ -7170,7 +6952,6 @@ L_0891E6EC: L_0891E6F4: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891E7E4; } @@ -7232,7 +7013,6 @@ L_0891E738: ctx.fpr[16] = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[16])); ctx.gpr[8] = (std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store16(aot_gpr_6 + static_cast(2), static_cast(ctx.gpr[8])); if (branch_taken) { @@ -7282,7 +7062,6 @@ L_0891E7E4: AOT_REGCACHE_SYNC_OUT(); return; L_0891E7EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891E824; } @@ -7299,7 +7078,6 @@ L_0891E7F4: L_0891E808: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0891E81C; } @@ -7384,7 +7162,17 @@ L_0891E874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891E8B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -7409,7 +7197,6 @@ L_0891E8F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & 512u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0891E940; } @@ -7418,7 +7205,6 @@ L_0891E8F8: L_0891E908: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0891E940; } @@ -7427,7 +7213,6 @@ L_0891E908: L_0891E914: aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891E938; } @@ -7440,7 +7225,6 @@ L_0891E920: AOT_REGCACHE_SYNC_OUT(); return; L_0891E928: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891E950; } @@ -7448,7 +7232,6 @@ L_0891E928: } L_0891E930: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7456,7 +7239,6 @@ L_0891E930: } L_0891E938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7464,7 +7246,6 @@ L_0891E938: } L_0891E940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7472,7 +7253,6 @@ L_0891E940: } L_0891E948: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7485,7 +7265,6 @@ L_0891E950: AOT_REGCACHE_SYNC_OUT(); return; L_0891E958: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891E974; } @@ -7496,7 +7275,6 @@ L_0891E960: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891E97C; } @@ -7504,7 +7282,6 @@ L_0891E960: } L_0891E974: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7545,7 +7322,6 @@ L_0891E9B4: aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0891E9EC; @@ -7554,7 +7330,6 @@ L_0891E9B4: L_0891E9EC: ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (0u | 0u); if (branch_taken) { @@ -7573,7 +7348,6 @@ L_0891EA10: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891EA54; } @@ -7582,7 +7356,6 @@ L_0891EA10: L_0891EA24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891EA54; } @@ -7591,7 +7364,6 @@ L_0891EA24: L_0891EA30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(700))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891EA54; } @@ -7605,7 +7377,6 @@ L_0891EA3C: AOT_REGCACHE_SYNC_OUT(); return; L_0891EA48: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891EA54; } @@ -7616,9 +7387,7 @@ L_0891EA50: goto L_0891EA54; L_0891EA54: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891EA84; } @@ -7628,7 +7397,6 @@ L_0891EA64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891EA84; } @@ -7636,7 +7404,6 @@ L_0891EA64: } L_0891EA74: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0891EA84; } @@ -7644,7 +7411,6 @@ L_0891EA74: } L_0891EA7C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891EABC; } @@ -7661,14 +7427,12 @@ L_0891EA84: AOT_REGCACHE_SYNC_OUT(); return; L_0891EA9C: aot_gpr_31 = (0x0891EAA4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891EAA4u) goto L_0891EAA4; AOT_REGCACHE_SYNC_OUT(); return; L_0891EAA4: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891EAD8; } @@ -7684,7 +7448,6 @@ L_0891EAB4: } L_0891EABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7693,7 +7456,6 @@ L_0891EABC: L_0891EAC4: aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891EAD8; } @@ -7701,7 +7463,6 @@ L_0891EAC4: } L_0891EAD0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891EBC4; } @@ -7717,7 +7478,6 @@ L_0891EAD8: L_0891EAE8: aot_fpr_20 = aot_fpr_20 + ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -7738,9 +7498,7 @@ L_0891EB0C: AOT_REGCACHE_SYNC_OUT(); return; L_0891EB14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891EB2C; } @@ -7768,7 +7526,6 @@ L_0891EB30: L_0891EB38: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891EB4C; } @@ -7785,7 +7542,6 @@ L_0891EB44: L_0891EB4C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891EB5C; } @@ -7803,7 +7559,6 @@ L_0891EB5C: AOT_REGCACHE_SYNC_OUT(); return; L_0891EB6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891EB7C; } @@ -7811,7 +7566,6 @@ L_0891EB6C: } L_0891EB74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7841,7 +7595,6 @@ L_0891EB98: AOT_REGCACHE_SYNC_OUT(); return; L_0891EBBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC24; } @@ -7856,7 +7609,6 @@ L_0891EBC4: AOT_REGCACHE_SYNC_OUT(); return; L_0891EBD4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891EBE4; } @@ -7864,7 +7616,6 @@ L_0891EBD4: } L_0891EBDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EC88; } @@ -7894,7 +7645,6 @@ L_0891EC00: AOT_REGCACHE_SYNC_OUT(); return; L_0891EC24: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0891EC38; } @@ -7932,7 +7682,6 @@ L_0891EC5C: L_0891EC64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2232))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891EC7C; } @@ -7969,7 +7718,17 @@ L_0891EC88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891ECB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7995,7 +7754,6 @@ L_0891ED08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891ED3C; } @@ -8004,7 +7762,6 @@ L_0891ED08: L_0891ED18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891ED3C; } @@ -8023,7 +7780,6 @@ L_0891ED2C: goto L_0891ED34; L_0891ED34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8031,7 +7787,6 @@ L_0891ED34: } L_0891ED3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8039,7 +7794,6 @@ L_0891ED3C: } L_0891ED44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8049,7 +7803,6 @@ L_0891ED4C: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8070,7 +7823,6 @@ L_0891ED5C: L_0891ED74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891EDA0; } @@ -8079,7 +7831,6 @@ L_0891ED74: L_0891ED80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(700))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891EDA0; } @@ -8092,7 +7843,6 @@ L_0891ED8C: AOT_REGCACHE_SYNC_OUT(); return; L_0891ED94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891EDA0; } @@ -8103,7 +7853,6 @@ L_0891ED9C: goto L_0891EDA0; L_0891EDA0: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0891EF0C; } @@ -8116,7 +7865,6 @@ L_0891EDA8: AOT_REGCACHE_SYNC_OUT(); return; L_0891EDB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891EDDC; } @@ -8140,7 +7888,6 @@ L_0891EDC8: AOT_REGCACHE_SYNC_OUT(); return; L_0891EDD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8181,7 +7928,6 @@ L_0891EE14: aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0891EE4C; @@ -8190,9 +7936,7 @@ L_0891EE14: L_0891EE4C: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891EE70; } @@ -8206,9 +7950,7 @@ L_0891EE60: goto L_0891EE70; L_0891EE70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891EED4; } @@ -8216,14 +7958,12 @@ L_0891EE70: } L_0891EE80: aot_gpr_31 = (0x0891EE88u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891EE88u) goto L_0891EE88; AOT_REGCACHE_SYNC_OUT(); return; L_0891EE88: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891EECC; } @@ -8251,7 +7991,6 @@ L_0891EEA0: } L_0891EEC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EEF8; } @@ -8259,7 +7998,6 @@ L_0891EEC4: } L_0891EECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8267,14 +8005,12 @@ L_0891EECC: } L_0891EED4: aot_gpr_31 = (0x0891EEDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891EEDCu) goto L_0891EEDC; AOT_REGCACHE_SYNC_OUT(); return; L_0891EEDC: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891EE98; } @@ -8338,7 +8074,6 @@ L_0891EF38: } L_0891EF4C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0891EFD4; } @@ -8346,7 +8081,6 @@ L_0891EF4C: } L_0891EF54: aot_gpr_31 = (0x0891EF5Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891EF5Cu) goto L_0891EF5C; AOT_REGCACHE_SYNC_OUT(); return; L_0891EF5C: @@ -8380,7 +8114,6 @@ L_0891EF94: } L_0891EFA0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891EFC4; } @@ -8388,7 +8121,6 @@ L_0891EFA0: } L_0891EFA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891EFD4; } @@ -8441,7 +8173,6 @@ L_0891F014: ctx.gpr[7] = (ctx.gpr[3] & ctx.gpr[19]); aot_gpr_6 = (ctx.gpr[2] & ctx.gpr[18]); { const bool branch_taken = aot_gpr_6 != aot_gpr_16; - // nop if (branch_taken) { goto L_0891F02C; } @@ -8449,7 +8180,6 @@ L_0891F014: } L_0891F024: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0891F0CC; } @@ -8465,7 +8195,6 @@ L_0891F02C: L_0891F03C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F054; } @@ -8486,7 +8215,6 @@ L_0891F054: L_0891F064: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F07C; } @@ -8507,7 +8235,6 @@ L_0891F07C: L_0891F08C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F0A4; } @@ -8528,7 +8255,6 @@ L_0891F0A4: L_0891F0B4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F0CC; } @@ -8541,7 +8267,6 @@ L_0891F0C0: goto L_0891F0CC; L_0891F0CC: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_0891F0F8; } @@ -8554,7 +8279,6 @@ L_0891F0D4: AOT_REGCACHE_SYNC_OUT(); return; L_0891F0DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891F1E0; } @@ -8565,7 +8289,6 @@ L_0891F0E4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F1E0; } @@ -8600,7 +8323,6 @@ L_0891F124: AOT_REGCACHE_SYNC_OUT(); return; L_0891F134: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891F1A8; } @@ -8643,7 +8365,6 @@ L_0891F18C: L_0891F194: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(2232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F1B0; } @@ -8651,7 +8372,6 @@ L_0891F194: } L_0891F1A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F1BC; } @@ -8659,7 +8379,6 @@ L_0891F1A0: } L_0891F1A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8738,7 +8457,6 @@ L_0891F238: goto L_0891F24C; L_0891F24C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8748,7 +8466,6 @@ L_0891F254: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8757,7 +8474,6 @@ L_0891F254: L_0891F264: ctx.gpr[23] = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(900))); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8770,7 +8486,6 @@ L_0891F270: AOT_REGCACHE_SYNC_OUT(); return; L_0891F278: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891F2FC; } @@ -8835,7 +8550,17 @@ L_0891F2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891F338: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); @@ -8862,7 +8587,6 @@ L_0891F374: aot_gpr_5 = (0u + static_cast(-964)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F38C; } @@ -8874,7 +8598,6 @@ L_0891F388: L_0891F38C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F3B4; } @@ -8882,7 +8605,6 @@ L_0891F38C: } L_0891F398: aot_gpr_31 = (0x0891F3A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891F3A0u) goto L_0891F3A0; AOT_REGCACHE_SYNC_OUT(); return; L_0891F3A0: @@ -8895,12 +8617,10 @@ L_0891F3A0: AOT_REGCACHE_SYNC_OUT(); return; L_0891F3B4: aot_gpr_31 = (0x0891F3BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891F3BCu) goto L_0891F3BC; AOT_REGCACHE_SYNC_OUT(); return; L_0891F3BC: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0891F458; } @@ -8908,14 +8628,12 @@ L_0891F3BC: } L_0891F3C4: aot_gpr_31 = (0x0891F3CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891F3CCu) goto L_0891F3CC; AOT_REGCACHE_SYNC_OUT(); return; L_0891F3CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F404; } @@ -8923,7 +8641,6 @@ L_0891F3CC: } L_0891F3DC: aot_gpr_31 = (0x0891F3E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891F3E4u) goto L_0891F3E4; AOT_REGCACHE_SYNC_OUT(); return; L_0891F3E4: @@ -8932,7 +8649,6 @@ L_0891F3E4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F40C; } @@ -8940,7 +8656,6 @@ L_0891F3E4: } L_0891F3FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F44C; } @@ -8956,13 +8671,11 @@ L_0891F404: } L_0891F40C: aot_gpr_31 = (0x0891F414u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891F414u) goto L_0891F414; AOT_REGCACHE_SYNC_OUT(); return; L_0891F414: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F44C; } @@ -8972,7 +8685,6 @@ L_0891F420: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891F44C; } @@ -9004,7 +8716,6 @@ L_0891F464: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F794; } @@ -9014,7 +8725,6 @@ L_0891F474: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F794; } @@ -9034,7 +8744,6 @@ L_0891F494: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F4B0; } @@ -9065,7 +8774,6 @@ L_0891F4C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F538; } @@ -9078,7 +8786,6 @@ L_0891F4E8: AOT_REGCACHE_SYNC_OUT(); return; L_0891F4F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891F598; } @@ -9087,7 +8794,6 @@ L_0891F4F0: L_0891F4F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F518; } @@ -9098,7 +8804,6 @@ L_0891F504: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F598; } @@ -9117,7 +8822,6 @@ L_0891F518: AOT_REGCACHE_SYNC_OUT(); return; L_0891F530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F598; } @@ -9130,7 +8834,6 @@ L_0891F538: AOT_REGCACHE_SYNC_OUT(); return; L_0891F540: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891F570; } @@ -9143,7 +8846,6 @@ L_0891F548: AOT_REGCACHE_SYNC_OUT(); return; L_0891F550: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891F598; } @@ -9168,7 +8870,6 @@ L_0891F570: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F590; } @@ -9178,7 +8879,6 @@ L_0891F580: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F598; } @@ -9195,7 +8895,6 @@ L_0891F598: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F5B8; } @@ -9208,7 +8907,6 @@ L_0891F5B0: L_0891F5B8: aot_gpr_4 = (0u | 173u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0891F6C0; } @@ -9218,7 +8916,6 @@ L_0891F5C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F640; } @@ -9266,7 +8963,6 @@ L_0891F614: } L_0891F61C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F640; } @@ -9286,7 +8982,6 @@ L_0891F63C: goto L_0891F640; L_0891F640: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0891F664; } @@ -9307,9 +9002,7 @@ L_0891F660: L_0891F664: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0891F67C; } @@ -9325,7 +9018,6 @@ L_0891F67C: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(8), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F6D4; } @@ -9370,7 +9062,6 @@ L_0891F6E0: AOT_REGCACHE_SYNC_OUT(); return; L_0891F6E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891F6FC; } @@ -9386,7 +9077,6 @@ L_0891F6FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2232))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F71C; } @@ -9396,7 +9086,6 @@ L_0891F70C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2232))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891F724; } @@ -9414,7 +9103,6 @@ L_0891F724: AOT_REGCACHE_SYNC_OUT(); return; L_0891F72C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891F73C; } @@ -9438,7 +9126,6 @@ L_0891F73C: } L_0891F750: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0891F78C; } @@ -9446,7 +9133,6 @@ L_0891F750: } L_0891F758: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0891F78C; } @@ -9495,7 +9181,17 @@ L_0891F798: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891F7BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2248))); @@ -9519,7 +9215,6 @@ L_0891F7F0: AOT_REGCACHE_SYNC_OUT(); return; L_0891F7F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891F84C; } @@ -9528,7 +9223,6 @@ L_0891F7F8: L_0891F800: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F838; } @@ -9538,7 +9232,6 @@ L_0891F80C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F830; } @@ -9547,7 +9240,6 @@ L_0891F80C: L_0891F81C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891F854; } @@ -9555,7 +9247,6 @@ L_0891F81C: } L_0891F828: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F868; } @@ -9563,7 +9254,6 @@ L_0891F828: } L_0891F830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -9577,7 +9267,6 @@ L_0891F838: AOT_REGCACHE_SYNC_OUT(); return; L_0891F844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -9585,7 +9274,6 @@ L_0891F844: } L_0891F84C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -9599,7 +9287,6 @@ L_0891F854: AOT_REGCACHE_SYNC_OUT(); return; L_0891F860: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891F888; } @@ -9610,7 +9297,6 @@ L_0891F868: aot_gpr_5 = (16u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F890; } @@ -9627,7 +9313,6 @@ L_0891F87C: } L_0891F888: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -9636,7 +9321,6 @@ L_0891F888: L_0891F890: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891F8B8; } @@ -9644,12 +9328,10 @@ L_0891F890: } L_0891F89C: aot_gpr_31 = (0x0891F8A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0891F8A4u) goto L_0891F8A4; AOT_REGCACHE_SYNC_OUT(); return; L_0891F8A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891F8B8; } @@ -9678,7 +9360,6 @@ L_0891F8C0: L_0891F8D0: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891F8F8; } @@ -9698,7 +9379,6 @@ L_0891F8F4: goto L_0891F8F8; L_0891F8F8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0891F980; } @@ -9714,7 +9394,6 @@ L_0891F900: L_0891F910: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891F94C; } @@ -9726,7 +9405,6 @@ L_0891F91C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891F94C; } @@ -9744,7 +9422,6 @@ L_0891F934: } L_0891F944: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891F95C; } @@ -9752,7 +9429,6 @@ L_0891F944: } L_0891F94C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0891F964; } @@ -9760,7 +9436,6 @@ L_0891F94C: } L_0891F954: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891F980; } @@ -9768,7 +9443,6 @@ L_0891F954: } L_0891F95C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -9788,7 +9462,6 @@ L_0891F97C: goto L_0891F980; L_0891F980: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -9828,7 +9501,6 @@ L_0891F9AC: } L_0891F9B4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891FA3C; } @@ -9869,7 +9541,6 @@ L_0891F9F4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0891FA14; } @@ -9889,7 +9560,6 @@ L_0891FA14: L_0891FA1C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891F9DC; } @@ -9912,7 +9582,6 @@ L_0891FA3C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0891FB64; } @@ -9953,7 +9622,6 @@ L_0891FA68: } L_0891FA70: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0891FA9C; } @@ -10056,7 +9724,6 @@ L_0891FB34: goto L_0891FB38; L_0891FB38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FB64; } @@ -10082,7 +9749,6 @@ L_0891FB5C: } L_0891FB64: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0891FCEC; } @@ -10091,7 +9757,6 @@ L_0891FB64: L_0891FB6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891FC78; } @@ -10107,7 +9772,6 @@ L_0891FB78: L_0891FB88: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891FBAC; } @@ -10126,7 +9790,6 @@ L_0891FBA8: goto L_0891FBAC; L_0891FBAC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891FBCC; } @@ -10145,7 +9808,6 @@ L_0891FBC8: goto L_0891FBCC; L_0891FBCC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891FBEC; } @@ -10164,7 +9826,6 @@ L_0891FBE8: goto L_0891FBEC; L_0891FBEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891FC00; } @@ -10182,7 +9843,6 @@ L_0891FBF4: L_0891FC00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0891FC1C; } @@ -10238,7 +9898,6 @@ L_0891FC44: L_0891FC78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0891FC94; } @@ -10302,7 +9961,17 @@ L_0891FCEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0891FD10: aot_gpr_29 = (aot_gpr_29 + static_cast(-1328)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1280), aot_gpr_16); @@ -10328,7 +9997,6 @@ L_0891FD5C: AOT_REGCACHE_SYNC_OUT(); return; L_0891FD7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0891FD98; } @@ -10338,7 +10006,6 @@ L_0891FD84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891FD98; } @@ -10365,7 +10032,6 @@ L_0891FDBC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891FDF0; } @@ -10375,7 +10041,6 @@ L_0891FDD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0891FDF0; } @@ -10390,7 +10055,6 @@ L_0891FDE0: L_0891FDF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891FE0C; } @@ -10411,7 +10075,6 @@ L_0891FE0C: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891FE38; } @@ -10446,7 +10109,6 @@ L_0891FE54: L_0891FE5C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-8)); { const bool branch_taken = static_cast(ctx.gpr[18]) >= 0; - // nop if (branch_taken) { goto L_0891FEAC; } @@ -10466,7 +10128,6 @@ L_0891FE68: AOT_REGCACHE_SYNC_OUT(); return; L_0891FE84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FEAC; } @@ -10475,7 +10136,6 @@ L_0891FE84: L_0891FE8C: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 255 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891FEAC; } @@ -10485,7 +10145,6 @@ L_0891FE98: ctx.gpr[18] = (ctx.gpr[18] + static_cast(16)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0891FEAC; } @@ -10523,7 +10182,6 @@ L_0891FEEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0891FF44; } @@ -10558,7 +10216,6 @@ L_0891FF1C: AOT_REGCACHE_SYNC_OUT(); return; L_0891FF34: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0891FF54; } @@ -10566,7 +10223,6 @@ L_0891FF34: } L_0891FF3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0891FF9C; } @@ -10579,7 +10235,6 @@ L_0891FF44: AOT_REGCACHE_SYNC_OUT(); return; L_0891FF4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 144u, 0x089246E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10603,7 +10258,6 @@ L_0891FF6C: AOT_REGCACHE_SYNC_OUT(); return; L_0891FF7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0891FF8C; } @@ -10624,7 +10278,6 @@ L_0891FF9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0071_entry, 71u, 59u, 0x089206D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10638,7 +10291,6 @@ L_0891FFAC: L_0891FFB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0071_entry, 71u, 38u, 0x08920498u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10650,7 +10302,6 @@ L_0891FFC0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0071_entry, 71u, 38u, 0x08920498u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10662,7 +10313,6 @@ L_0891FFD8: ctx.gpr[17] = (aot_gpr_4 - ctx.gpr[17]); aot_gpr_4 = (ctx.gpr[17] < static_cast(2000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0891FFF8; } @@ -10679,7 +10329,6 @@ L_0891FFF0: L_0891FFF8: aot_gpr_4 = (ctx.gpr[17] < static_cast(7001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0071_entry, 71u, 3u, 0x08920014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0071.cpp b/profiles/vcs/generated/generated_unit_0071.cpp index 2ee9aea..f2b187c 100644 --- a/profiles/vcs/generated/generated_unit_0071.cpp +++ b/profiles/vcs/generated/generated_unit_0071.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0071[4090] = { - 1, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, 0, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 38, 0, 39, 0, 40, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 51, 0, 52, 0, 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 65, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, - 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 75, 76, - 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, 83, 0, - 84, 0, 0, 0, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 90, 0, 91, - 0, 0, 0, 0, 0, 92, 93, 0, 0, 94, 0, 95, 0, 0, 0, 96, 0, 97, 0, 0, 0, 98, 0, 99, 0, 100, 0, 0, 0, 0, 0, 101, - 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 108, 0, 109, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 112, 0, 113, 0, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, - 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 123, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, - 131, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 137, 138, 0, 0, 0, 0, 0, - 0, 139, 0, 0, 0, 0, 140, 0, 141, 142, 0, 143, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 148, 149, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, - 0, 0, 0, 152, 0, 153, 0, 154, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 157, 0, - 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 0, 0, - 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 168, 0, 0, 0, 169, 0, - 170, 0, 0, 171, 0, 0, 172, 0, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 178, - 0, 0, 0, 0, 179, 0, 180, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 186, 187, 0, - 0, 0, 0, 0, 188, 0, 0, 189, 0, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 0, 194, 0, 195, 0, - 0, 196, 0, 0, 197, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 205, - 0, 206, 0, 0, 207, 0, 208, 0, 209, 0, 0, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 213, 0, 214, 0, 0, 0, 215, 0, 216, - 0, 217, 0, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, 0, 227, 0, 228, 0, 0, 229, 0, 230, - 0, 0, 231, 0, 232, 0, 0, 233, 0, 234, 0, 0, 235, 0, 236, 0, 0, 237, 0, 238, 0, 0, 239, 0, 240, 0, 0, 241, 0, 242, 0, 0, - 243, 0, 0, 244, 0, 245, 0, 246, 0, 247, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 252, 0, 253, 0, 254, 0, - 0, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, 258, 0, 259, 0, 260, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 263, 0, 264, 0, 0, 0, 265, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 271, 0, 0, 0, 272, - 0, 0, 273, 0, 274, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 277, 0, 0, 0, 278, 0, 0, 279, 0, 280, 0, - 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 0, 285, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, - 290, 0, 291, 0, 292, 0, 293, 294, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 299, 0, 0, 0, 300, 0, 301, 0, 0, - 302, 0, 0, 0, 0, 0, 303, 0, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 0, 310, 0, 0, 311, 0, 312, 0, 313, 0, 0, - 314, 0, 0, 315, 0, 316, 0, 317, 0, 0, 318, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, 0, 0, 321, 0, 0, 322, 323, 0, 0, 0, 0, - 324, 0, 325, 0, 0, 326, 0, 327, 0, 0, 328, 0, 329, 0, 330, 0, 0, 331, 0, 332, 0, 0, 333, 0, 334, 0, 335, 0, 0, 0, 0, 0, - 0, 336, 0, 0, 0, 337, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, - 0, 347, 0, 0, 348, 0, 0, 349, 0, 350, 0, 351, 0, 0, 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 356, 0, 0, 357, 0, 0, 358, 0, - 359, 0, 360, 0, 361, 0, 362, 0, 0, 363, 0, 364, 0, 365, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 369, 0, 370, 0, 0, 0, - 0, 0, 0, 371, 0, 372, 0, 373, 0, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, - 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 386, 0, 387, 0, 388, 0, 0, 389, 0, - 0, 0, 390, 0, 391, 0, 392, 0, 393, 0, 0, 394, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, - 401, 0, 0, 0, 402, 0, 403, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 0, 410, - 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 415, 0, 416, 0, 0, 417, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, - 0, 0, 421, 0, 422, 0, 0, 423, 0, 0, 424, 0, 425, 0, 426, 0, 0, 427, 0, 428, 0, 429, 0, 430, 0, 0, 431, 0, 0, 0, 0, 0, - 432, 0, 433, 0, 434, 0, 435, 0, 0, 436, 0, 437, 0, 0, 438, 439, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 442, 0, 0, - 0, 443, 444, 0, 445, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 448, 0, 449, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 0, - 453, 0, 0, 454, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 457, 0, 0, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 0, 463, 0, - 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 466, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, - 0, 472, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, - 478, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 0, 483, 0, 484, 0, 0, 485, 0, - 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 495, 0, 496, 0, 0, 0, 0, 0, 497, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 500, 0, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 0, - 506, 0, 507, 0, 0, 508, 0, 0, 509, 0, 0, 0, 0, 510, 0, 511, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, 0, - 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, 517, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 0, - 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 533, 0, 534, 0, - 0, 0, 535, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 0, 539, 0, 540, 0, 0, 541, 0, 542, 0, 543, - 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, - 0, 550, 0, 0, 551, 0, 0, 0, 0, 552, 0, 553, 0, 554, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, - 0, 558, 0, 0, 559, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 563, 0, 564, 0, 0, 565, 0, 566, 0, - 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 569, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, - 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, 575, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 578, 0, 0, 0, 579, 0, 580, - 0, 581, 0, 582, 0, 0, 583, 0, 584, 0, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 588, 0, 589, 0, 590, 0, - 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 596, 0, 597, 0, 0, 0, 598, 0, 599, 0, - 0, 0, 600, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, 0, 603, 0, 604, 0, 0, 0, 605, 0, 606, 0, 607, 0, 0, 608, 0, 0, 609, 0, - 0, 0, 0, 0, 0, 610, 0, 0, 0, 611, 0, 612, 0, 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 616, 0, 617, 0, 618, 0, 0, 0, 0, - 619, 0, 0, 620, 0, 0, 0, 621, 0, 622, 0, 0, 0, 623, 0, 624, 0, 0, 0, 625, 0, 0, 626, 0, 0, 0, 627, 0, 628, 0, 0, 0, - 629, 0, 630, 0, 0, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, 639, 0, 0, 0, 640, - 0, 0, 641, 0, 0, 0, 0, 642, 0, 0, 643, 0, 644, 0, 0, 645, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, 0, 649, - 0, 0, 0, 650, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 653, 0, 0, 0, 0, 654, 0, 0, 655, 0, 0, 0, 0, - 0, 0, 0, 656, 657, 0, 0, 658, 0, 0, 0, 659, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 663, 0, 664, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, - 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 0, - 673, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 0, 0, 0, - 679, 0, 680, 0, 0, 681, 0, 682, 0, 683, 0, 684, 0, 685, 0, 686, 0, 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 0, 0, 692, 0, 693, - 0, 0, 0, 694, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 698, 0, 0, 699, 0, 700, 0, 0, 0, 0, 701, - 0, 0, 702, 0, 703, 0, 0, 704, 0, 705, 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 708, 0, 0, 709, 0, 0, 0, 0, 710, 0, 0, 711, - 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 0, 0, 717, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 721, 0, 0, 0, 0, 722, - 0, 0, 0, 0, 0, 723, 0, 0, 724, 0, 725, 0, 0, 0, 0, 726, 0, 0, 727, 0, 728, 0, 0, 729, 0, 730, 0, 0, 0, 0, 731, 0, - 0, 0, 732, 0, 0, 733, 0, 0, 0, 734, 735, 0, 736, 0, 0, 0, 737, 0, 0, 738, 0, 739, 0, 740, 0, 0, 741, 0, 742, 0, 0, 0, - 743, 0, 0, 744, 0, 0, 0, 745, 746, 0, 747, 0, 0, 0, 748, 0, 0, 749, 0, 750, 0, 0, 0, 751, 0, 0, 752, 0, 753, 0, 754, 0, - 0, 0, 755, 0, 0, 756, 0, 0, 0, 757, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 760, 0, 0, 0, 0, 761, 0, - 0, 762, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 765, 0, 0, 0, 766, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 769, 0, 770, 0, 771, 0, 0, 772, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 776, 0, 777, 0, 0, 778, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, - 781, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 786, 0, 787, 0, 0, 0, 0, 0, - 0, 0, 0, 788, 0, 0, 0, 0, 0, 789, 790, 0, 791, 0, 0, 0, 0, 792, 0, 0, 793, 0, 794, 0, 0, 795, 0, 0, 796, 0, 797, 0, - 798, 0, 0, 799, 0, 0, 800, 801, 0, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 804, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 806, 0, - 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 808, 0, 0, 809, 0, 810, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 812, 0, 0, 813, 0, - 0, 0, 0, 0, 814, 0, 815, 0, 0, 816, 0, 817, 0, 0, 818, 0, 819, 0, 0, 0, 0, 820, 0, 821, 0, 0, 0, 822, 0, 0, 0, 0, - 823, 0, 0, 0, 0, 824, 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 826, 0, 827, 0, 828, 0, 829, 0, 0, 830, 0, 0, 831, 0, - 832, 0, 833, 0, 0, 834, 0, 835, 0, 836, 0, 0, 837, 0, 0, 0, 838, 0, 0, 0, 839, 0, 0, 840, 0, 0, 0, 0, 841, 0, 842, 0, - 843, 0, 844, 0, 845, 0, 0, 846, 0, 0, 0, 0, 0, 847, 0, 0, 848, 0, 849, 0, 0, 0, 0, 0, 850, 0, 0, 851, 0, 852, 0, 0, - 0, 853, 854, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, 857, 0, 0, 0, 858, 0, 859, 0, 0, 860, 0, 0, 861, 0, 0, - 0, 862, 0, 863, 0, 0, 0, 0, 864, 0, 865, 0, 866, 0, 867, 0, 0, 868, 0, 0, 0, 0, 0, 869, 0, 870, 0, 0, 0, 871, 0, 0, - 0, 0, 0, 872, 0, 0, 0, 873, 0, 0, 0, 0, 874, 0, 875, 0, 876, 0, 877, 0, 0, 0, 0, 0, 0, 878, 0, 0, 879, 0, 0, 0, - 0, 880, 0, 0, 881, 0, 0, 0, 882, 0, 0, 883, 0, 0, 884, 0, 885, 0, 886, 0, 887, 0, 888, 0, 0, 0, 0, 0, 889, 0, 890, 0, - 0, 0, 0, 0, 891, 0, 892, 0, 0, 0, 0, 0, 893, 0, 894, 0, 0, 895, 0, 896, 0, 897, 898, 0, 0, 0, 0, 899, 0, 0, 0, 0, - 0, 900, 0, 901, 0, 902, 0, 0, 0, 903, 0, 0, 904, 905, 0, 0, 906, 0, 907, 0, 0, 0, 908, 0, 0, 0, 909, 910, 0, 0, 0, 911, - 0, 912, 0, 0, 913, 0, 0, 914, 0, 0, 915, 0, 0, 916, 0, 917, 0, 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 0, 0, 0, 919, 0, - 0, 920, 0, 0, 0, 0, 0, 921, 0, 0, 922, 0, 923, 0, 924, 0, 925, 0, 0, 0, 926, 0, 0, 0, 0, 927, 0, 928, 0, 929, 0, 0, - 930, 0, 931, 0, 932, 0, 0, 0, 0, 933, 0, 934, 0, 935, 0, 936, 0, 937, 0, 938, 0, 939, 0, 940, 0, 941, 0, 942, 0, 0, 0, 943, - 0, 944, 0, 945, 0, 946, 0, 947, 0, 948, 0, 949, 0, 0, 0, 0, 0, 950, 0, 951, 0, 952, 0, 953, 0, 954, 0, 955, 0, 956, 0, 957, - 0, 958, 0, 959, 0, 960, 0, 0, 0, 0, 961, 0, 962, 0, 963, 0, 964, 0, 0, 0, 0, 965, 0, 966, 0, 0, 0, 967, 0, 968, 0, 969, - 0, 970, 0, 0, 0, 0, 971, 0, 972, 0, 973, 0, 974, 0, 0, 975, 0, 976, 0, 977, 0, 0, 978, 979, 0, 980, 0, 0, 981, 0, 0, 0, - 982, 0, 0, 983, 0, 0, 984, 0, 0, 0, 985, 986, 0, 0, 987, 0, 0, 0, 988, 0, 989, 0, 990, 0, 991, 0, 992, 0, 0, 0, 993, 0, - 994, 0, 0, 0, 995, 0, 996, 0, 0, 0, 997, 0, 998, 0, 999, 0, 1000, 0, 0, 0, 1001, 0, 1002, 0, 0, 0, 1003, 0, 1004, 0, 0, 0, - 0, 1005, 0, 1006, 0, 0, 0, 1007, 0, 1008, 0, 0, 0, 1009, 0, 1010, 0, 0, 0, 0, 0, 1011, 0, 1012, 0, 0, 1013, 0, 0, 0, 0, 1014, - 0, 1015, 0, 1016, 0, 1017, 0, 1018, 0, 1019, 0, 0, 0, 0, 1020, 0, 0, 0, 0, 0, 1021, 0, 0, 0, 0, 1022, 0, 0, 0, 1023, 0, 1024, - 0, 0, 0, 0, 1025, 0, 0, 0, 1026, 0, 1027, 0, 0, 0, 1028, 0, 1029, 0, 0, 0, 0, 1030, 0, 0, 1031, 0, 1032, 0, 1033, 0, 1034, 0, - 1035, 0, 1036, 0, 1037, 0, 1038, 0, 1039, 0, 1040, 0, 1041, 0, 1042, 0, 1043, 0, 1044, 0, 0, 1045, 0, 1046, 0, 0, 1047, 0, 1048, 0, 0, 1049, - 0, 0, 1050, 0, 0, 0, 0, 0, 1051, 0, 1052, 0, 1053, 0, 1054, 0, 1055, 0, 1056, 0, 1057, 0, 1058, 0, 1059, 0, 1060, 0, 1061, 0, 1062, 0, - 1063, 0, 1064, 0, 1065, 0, 1066, 0, 1067, 0, 0, 1068, 0, 1069, 0, 0, 1070, 0, 1071, 0, 1072, 0, 0, 1073, 0, 0, 0, 0, 1074, 0, 1075, 0, - 0, 0, 1076, 0, 1077, 0, 1078, 0, 1079, 0, 1080, 0, 1081, 0, 1082, 0, 1083, 0, 1084, 0, 1085, 0, 0, 0, 1086, 0, 0, 1087, 0, 1088, 0, 0, - 1089, 0, 0, 0, 0, 0, 0, 0, 0, 1090, 0, 1091, 0, 1092, 0, 0, 0, 0, 0, 1093, 0, 1094, 0, 0, 0, 1095, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0071[64] = { + 0x0040001020211223ull, 0x8004002001020414ull, 0x4008004002001000ull, 0x0000902410120901ull, + 0x0004154800004500ull, 0x0000000000004954ull, 0x00AA440000065410ull, 0xC4444402802A8124ull, + 0xA824003152044440ull, 0x5441040A82A28A60ull, 0x4024002010544800ull, 0x5020300800011481ull, + 0x00001B4206904141ull, 0x400B508000000000ull, 0x04810A40500001A8ull, 0x9281024944280102ull, + 0x5048449060A44250ull, 0xA2A4115294140A52ull, 0x294A5294A5295552ull, 0x0014AA28552052A9ull, + 0x522800948A808A8Aull, 0x28A20AD55522A002ull, 0x0C8224A92A4AAA41ull, 0xAA9048A2054A54A5ull, + 0x1540AA55492A4A92ull, 0x4A880890212554A8ull, 0x904A055110552954ull, 0x04AA54941252A482ull, + 0x2282A0562440CA55ull, 0x2825051045548489ull, 0x4A4801110089040Aull, 0x20A8001005014448ull, + 0x0884A1252AA45000ull, 0x109100480228AA08ull, 0xA942402450804009ull, 0x20122A1220122022ull, + 0x0400A20452900A12ull, 0x5414414AA2424488ull, 0x4951450451450510ull, 0x1448A2890AA22A20ull, + 0x9048948489115545ull, 0x00444898090A0088ull, 0x0A00012010040485ull, 0xA2AAAAA508405005ull, + 0x9091429485208508ull, 0x429485208508A2AAull, 0x548A458914A91624ull, 0x0890020242802224ull, + 0x080495400112AA00ull, 0x5252160805402805ull, 0x48814802408940C9ull, 0x4954042108A14A50ull, + 0x29052095509112A5ull, 0x2282550A24A22016ull, 0x5055491212055088ull, 0x8C45322A086A5050ull, + 0x2A1154824040A492ull, 0xAAAA0AAA8AAAAA15ull, 0x12CA9542A8A1542Aull, 0x1451545145544C49ull, + 0xA21042AA84A0A28Aull, 0x94A5555555214510ull, 0x5095295555555504ull, 0x02282A0129155554ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0071[64] = { + 1u, 11u, 19u, 24u, 34u, 43u, 49u, 61u, 77u, 92u, 110u, 120u, 131u, 145u, 152u, 164u, + 179u, 196u, 217u, 243u, 263u, 281u, 302u, 324u, 347u, 371u, 390u, 411u, 432u, 453u, 472u, 486u, + 498u, 515u, 529u, 544u, 558u, 572u, 591u, 610u, 629u, 650u, 663u, 673u, 694u, 712u, 732u, 755u, + 767u, 781u, 798u, 814u, 832u, 853u, 872u, 891u, 912u, 930u, 958u, 982u, 1005u, 1025u, 1050u, 1076u, }; void recomp_unit_0071_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0071_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08920000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0071[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0071[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0071[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08920000; @@ -1267,7 +1174,6 @@ LOCAL_DISPATCH: } } L_08920000: - // nop goto L_08920004; L_08920004: aot_gpr_4 = (16192u << 16u); @@ -1305,7 +1211,6 @@ L_08920040: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08920344; } @@ -1381,7 +1286,6 @@ L_08920090: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[18] << 2u); if (branch_taken) { @@ -1599,7 +1503,6 @@ L_089202CC: AOT_REGCACHE_SYNC_OUT(); return; L_089202F8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0892032C; } @@ -1628,7 +1531,6 @@ L_0892032C: ctx.gpr[18] = (ctx.gpr[18] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08920054; } @@ -1637,7 +1539,6 @@ L_0892032C: L_08920344: aot_gpr_4 = (ctx.gpr[17] < static_cast(2001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08920498; } @@ -1662,7 +1563,6 @@ L_08920350: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-2000)); aot_gpr_4 = (ctx.gpr[17] < static_cast(5000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08920428; } @@ -1733,7 +1633,6 @@ L_089203BC: AOT_REGCACHE_SYNC_OUT(); return; L_08920420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08920498; } @@ -1743,7 +1642,6 @@ L_08920428: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1780)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08920498; } @@ -1785,7 +1683,6 @@ L_08920498: AOT_REGCACHE_SYNC_OUT(); return; L_089204A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089204B0; } @@ -1802,7 +1699,6 @@ L_089204B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08920510; } @@ -1829,7 +1725,6 @@ L_089204C8: AOT_REGCACHE_SYNC_OUT(); return; L_08920508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089206CC; } @@ -1842,7 +1737,6 @@ L_08920510: AOT_REGCACHE_SYNC_OUT(); return; L_08920518: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089206CC; } @@ -1851,7 +1745,6 @@ L_08920518: L_08920520: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089206CC; } @@ -1983,7 +1876,6 @@ L_089206A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(168))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089206CC; } @@ -1992,7 +1884,6 @@ L_089206A8: L_089206B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089206CC; } @@ -2005,7 +1896,6 @@ L_089206C4: AOT_REGCACHE_SYNC_OUT(); return; L_089206CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 144u, 0x089246E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2027,7 +1917,6 @@ L_089206DC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892073C; } @@ -2036,7 +1925,6 @@ L_089206DC: L_08920708: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7893))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892073C; } @@ -2045,7 +1933,6 @@ L_08920708: L_08920714: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892073C; } @@ -2058,7 +1945,6 @@ L_08920720: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08920754; } @@ -2077,7 +1963,6 @@ L_08920744: goto L_0892074C; L_0892074C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089207F8; } @@ -2114,9 +1999,7 @@ L_08920784: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(264))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089207F8; } @@ -2126,7 +2009,6 @@ L_089207A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2248))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089207D8; } @@ -2136,7 +2018,6 @@ L_089207B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2248))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089207D8; } @@ -2146,7 +2027,6 @@ L_089207C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2248))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089207F8; } @@ -2156,7 +2036,6 @@ L_089207D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1938))); aot_gpr_4 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089207FC; } @@ -2180,7 +2059,6 @@ L_089207FC: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); goto L_08920894; @@ -2270,7 +2148,6 @@ L_08920894: L_089208C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089208EC; } @@ -2280,7 +2157,6 @@ L_089208D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); goto L_08920918; @@ -2293,7 +2169,6 @@ L_089208EC: AOT_REGCACHE_SYNC_OUT(); return; L_089208F4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923510; } @@ -2305,7 +2180,6 @@ L_089208FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923510; } @@ -2317,7 +2191,6 @@ L_08920914: L_08920918: aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08923510; } @@ -2325,7 +2198,6 @@ L_08920918: } L_08920924: aot_gpr_31 = (0x0892092Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892092Cu) goto L_0892092C; AOT_REGCACHE_SYNC_OUT(); return; L_0892092C: @@ -2337,7 +2209,6 @@ L_0892092C: AOT_REGCACHE_SYNC_OUT(); return; L_0892093C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923510; } @@ -2360,7 +2231,6 @@ L_08920954: AOT_REGCACHE_SYNC_OUT(); return; L_0892095C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08920984; } @@ -2377,7 +2247,6 @@ L_08920964: AOT_REGCACHE_SYNC_OUT(); return; L_0892097C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -2385,7 +2254,6 @@ L_0892097C: } L_08920984: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -2410,11 +2278,20 @@ L_089209A8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12480))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089209C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(352))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(108))); @@ -2435,7 +2312,6 @@ L_089209D8: AOT_REGCACHE_SYNC_OUT(); return; L_089209E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089209F8; } @@ -2443,7 +2319,6 @@ L_089209E8: } L_089209F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -2470,7 +2345,6 @@ L_089209F8: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08920A38; } @@ -2485,7 +2359,6 @@ L_08920A38: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 280u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08920B00; } @@ -2508,9 +2381,7 @@ L_08920A58: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920B00; } @@ -2575,9 +2446,7 @@ L_08920B00: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921218; } @@ -2651,9 +2520,7 @@ L_08920B40: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920BB0; } @@ -2666,7 +2533,6 @@ L_08920B8C: aot_fpr_12 = std::bit_cast(0u); aot_fpr_22 = aot_fpr_22 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08920BB0; @@ -2681,9 +2547,7 @@ L_08920BB4: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920BF0; } @@ -2706,7 +2570,6 @@ L_08920BF0: AOT_REGCACHE_SYNC_OUT(); return; L_08920BF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089211DC; } @@ -2716,9 +2579,7 @@ L_08920C00: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920C20; } @@ -2732,9 +2593,7 @@ L_08920C20: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920C68; } @@ -2744,9 +2603,7 @@ L_08920C38: aot_gpr_4 = (16720u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920C64; } @@ -2760,7 +2617,6 @@ L_08920C50: AOT_REGCACHE_SYNC_OUT(); return; L_08920C5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08920C68; } @@ -2774,7 +2630,6 @@ L_08920C68: aot_fpr_13 = std::bit_cast(0u); aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_22) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(aot_fpr_13)) && aot_fpr_22 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -2785,7 +2640,6 @@ L_08920C68: L_08920C84: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08920CA4; @@ -3003,7 +2857,6 @@ L_08920CB0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[14])) && aot_fpr_12 == ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(308))); if (branch_taken) { @@ -3014,9 +2867,7 @@ L_08920CB0: L_08920D9C: ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[14])) && aot_fpr_13 == ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920DB8; } @@ -3032,7 +2883,6 @@ L_08920DB0: } L_08920DB8: aot_gpr_31 = (0x08920DC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08920DC0u) goto L_08920DC0; AOT_REGCACHE_SYNC_OUT(); return; L_08920DC0: @@ -3052,7 +2902,6 @@ L_08920DCC: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[14])) && aot_fpr_12 == ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = ctx.fpr[15] - aot_fpr_13; if (branch_taken) { @@ -3063,9 +2912,7 @@ L_08920DCC: L_08920DF8: ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[14])) && aot_fpr_13 == ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920E14; } @@ -3081,7 +2928,6 @@ L_08920E0C: } L_08920E14: aot_gpr_31 = (0x08920E1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08920E1Cu) goto L_08920E1C; AOT_REGCACHE_SYNC_OUT(); return; L_08920E1C: @@ -3136,9 +2982,7 @@ L_08920E20: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_22) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920E98; } @@ -3155,9 +2999,7 @@ L_08920E78: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920EAC; } @@ -3180,9 +3022,7 @@ L_08920EA4: L_08920EAC: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920F80; } @@ -3209,7 +3049,6 @@ L_08920EE8: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -3222,9 +3061,7 @@ L_08920F04: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920F78; } @@ -3255,7 +3092,6 @@ L_08920F20: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[29] + static_cast(320)); if (branch_taken) { @@ -3271,9 +3107,7 @@ L_08920F4C: L_08920F54: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08920F78; } @@ -3288,7 +3122,6 @@ L_08920F68: AOT_REGCACHE_SYNC_OUT(); return; L_08920F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08921048; } @@ -3317,7 +3150,6 @@ L_08920FA4: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -3330,9 +3162,7 @@ L_08920FC0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921048; } @@ -3358,9 +3188,7 @@ L_08920FF0: L_08920FFC: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921048; } @@ -3380,9 +3208,7 @@ L_08921018: L_08921024: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921048; } @@ -3413,9 +3239,7 @@ L_0892105C: aot_gpr_4 = (16752u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921090; } @@ -3428,9 +3252,7 @@ L_08921078: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921198; } @@ -3486,7 +3308,6 @@ L_089210F0: L_089210F8: aot_gpr_4 = (0u + static_cast(-939)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921110; } @@ -3503,7 +3324,6 @@ L_08921104: } L_08921110: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08921124; } @@ -3541,9 +3361,7 @@ L_08921150: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921184; } @@ -3557,7 +3375,6 @@ L_08921168: L_08921170: aot_gpr_4 = (0u + static_cast(-939)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921184; } @@ -3576,7 +3393,6 @@ L_08921184: AOT_REGCACHE_SYNC_OUT(); return; L_08921190: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089211D4; } @@ -3591,7 +3407,6 @@ L_089211A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089211D4; } @@ -3614,7 +3429,6 @@ L_089211C8: AOT_REGCACHE_SYNC_OUT(); return; L_089211D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089211F4; } @@ -3639,7 +3453,6 @@ L_089211F4: AOT_REGCACHE_SYNC_OUT(); return; L_089211FC: { const bool branch_taken = aot_gpr_2 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08921210; } @@ -3665,7 +3478,6 @@ L_08921218: AOT_REGCACHE_SYNC_OUT(); return; L_08921220: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921534; } @@ -3678,7 +3490,6 @@ L_08921228: AOT_REGCACHE_SYNC_OUT(); return; L_08921230: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921300; } @@ -3692,7 +3503,6 @@ L_08921238: L_08921240: aot_gpr_4 = (0u | 24u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3706,7 +3516,6 @@ L_0892124C: L_08921254: aot_gpr_4 = (0u | 39u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3720,7 +3529,6 @@ L_08921260: L_08921268: aot_gpr_4 = (0u | 40u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3734,7 +3542,6 @@ L_08921274: L_0892127C: aot_gpr_4 = (0u | 43u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3748,7 +3555,6 @@ L_08921288: L_08921290: aot_gpr_4 = (0u | 44u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3762,7 +3568,6 @@ L_0892129C: L_089212A4: aot_gpr_4 = (0u | 45u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3776,7 +3581,6 @@ L_089212B0: L_089212B8: aot_gpr_4 = (0u | 53u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3790,7 +3594,6 @@ L_089212C4: L_089212CC: aot_gpr_4 = (0u | 18u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3804,7 +3607,6 @@ L_089212D8: L_089212E0: aot_gpr_4 = (0u | 49u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921300; } @@ -3818,7 +3620,6 @@ L_089212EC: L_089212F4: aot_gpr_4 = (0u | 25u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921534; } @@ -3827,7 +3628,6 @@ L_089212F4: L_08921300: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08921378; } @@ -3840,7 +3640,6 @@ L_0892130C: AOT_REGCACHE_SYNC_OUT(); return; L_08921314: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08921378; } @@ -3867,7 +3666,6 @@ L_08921338: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 | 0u); if (branch_taken) { @@ -3929,7 +3727,6 @@ L_089213A4: AOT_REGCACHE_SYNC_OUT(); return; L_089213AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089214CC; } @@ -3943,7 +3740,6 @@ L_089213B4: L_089213BC: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089214CC; } @@ -3951,7 +3747,6 @@ L_089213BC: } L_089213C8: aot_gpr_31 = (0x089213D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089213D0u) goto L_089213D0; AOT_REGCACHE_SYNC_OUT(); return; L_089213D0: @@ -3967,7 +3762,6 @@ L_089213D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(180))); aot_gpr_4 = (aot_gpr_2 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08921464; } @@ -3975,14 +3769,12 @@ L_089213D0: } L_08921404: aot_gpr_31 = (0x0892140Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892140Cu) goto L_0892140C; AOT_REGCACHE_SYNC_OUT(); return; L_0892140C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08921464; } @@ -4034,7 +3826,6 @@ L_0892146C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08921490; } @@ -4087,7 +3878,6 @@ L_089214D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089214F8; } @@ -4158,7 +3948,6 @@ L_08921554: AOT_REGCACHE_SYNC_OUT(); return; L_08921560: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921590; } @@ -4207,7 +3996,6 @@ L_0892159C: AOT_REGCACHE_SYNC_OUT(); return; L_089215A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089216C4; } @@ -4217,9 +4005,7 @@ L_089215AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(3156))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089216C4; } @@ -4229,7 +4015,6 @@ L_089215C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089216C4; } @@ -4237,14 +4022,12 @@ L_089215C4: } L_089215D4: aot_gpr_31 = (0x089215DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089215DCu) goto L_089215DC; AOT_REGCACHE_SYNC_OUT(); return; L_089215DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1736))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089216C4; } @@ -4252,7 +4035,6 @@ L_089215DC: } L_089215EC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089216C4; } @@ -4291,7 +4073,6 @@ L_0892162C: AOT_REGCACHE_SYNC_OUT(); return; L_08921634: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089216B4; } @@ -4316,7 +4097,6 @@ L_0892164C: L_08921658: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089216B4; } @@ -4341,7 +4121,6 @@ L_08921674: L_08921680: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089216B4; } @@ -4366,7 +4145,6 @@ L_0892169C: L_089216A8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_089216E8; } @@ -4405,7 +4183,6 @@ L_089216EC: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08921714; } @@ -4413,7 +4190,6 @@ L_089216EC: } L_08921700: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08921714; } @@ -4427,7 +4203,6 @@ L_08921708: AOT_REGCACHE_SYNC_OUT(); return; L_08921714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -4446,7 +4221,6 @@ L_08921728: AOT_REGCACHE_SYNC_OUT(); return; L_08921730: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921878; } @@ -4466,7 +4240,6 @@ L_08921744: L_0892174C: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08921878; } @@ -4479,7 +4252,6 @@ L_08921758: AOT_REGCACHE_SYNC_OUT(); return; L_08921760: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921878; } @@ -4490,9 +4262,7 @@ L_08921768: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921878; } @@ -4502,7 +4272,6 @@ L_08921784: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08921878; } @@ -4510,14 +4279,12 @@ L_08921784: } L_08921794: aot_gpr_31 = (0x0892179Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892179Cu) goto L_0892179C; AOT_REGCACHE_SYNC_OUT(); return; L_0892179C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1736))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08921878; } @@ -4556,7 +4323,6 @@ L_089217E4: AOT_REGCACHE_SYNC_OUT(); return; L_089217EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0892186C; } @@ -4581,7 +4347,6 @@ L_08921804: L_08921810: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0892186C; } @@ -4606,7 +4371,6 @@ L_0892182C: L_08921838: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0892186C; } @@ -4631,7 +4395,6 @@ L_08921854: L_08921860: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921878; } @@ -4644,7 +4407,6 @@ L_0892186C: goto L_08921878; L_08921878: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -4657,7 +4419,6 @@ L_08921880: AOT_REGCACHE_SYNC_OUT(); return; L_08921888: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089218A4; } @@ -4671,7 +4432,6 @@ L_08921890: L_08921898: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0892190C; } @@ -4697,9 +4457,7 @@ L_089218BC: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921930; } @@ -4725,9 +4483,7 @@ L_089218F0: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921930; } @@ -4740,7 +4496,6 @@ L_0892190C: AOT_REGCACHE_SYNC_OUT(); return; L_08921914: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08921930; } @@ -4754,7 +4509,6 @@ L_0892191C: AOT_REGCACHE_SYNC_OUT(); return; L_08921928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -4767,7 +4521,6 @@ L_08921930: AOT_REGCACHE_SYNC_OUT(); return; L_08921938: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08922734; } @@ -4827,9 +4580,7 @@ L_089219AC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089219DC; } @@ -4861,7 +4612,6 @@ L_089219F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089226E0; } @@ -4874,7 +4624,6 @@ L_08921A08: AOT_REGCACHE_SYNC_OUT(); return; L_08921A10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921BD4; } @@ -4888,7 +4637,6 @@ L_08921A18: L_08921A20: aot_gpr_4 = (0u | 12u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921A40; } @@ -4902,7 +4650,6 @@ L_08921A2C: L_08921A34: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921BD4; } @@ -4930,9 +4677,7 @@ L_08921A58: aot_gpr_4 = (aot_gpr_4 | 47299u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921A80; } @@ -4942,7 +4687,6 @@ L_08921A70: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1938))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08921B90; } @@ -4957,7 +4701,6 @@ L_08921A80: AOT_REGCACHE_SYNC_OUT(); return; L_08921A90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921AA8; } @@ -4970,7 +4713,6 @@ L_08921A98: AOT_REGCACHE_SYNC_OUT(); return; L_08921AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -4981,9 +4723,7 @@ L_08921AA8: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089226A0; } @@ -4997,7 +4737,6 @@ L_08921AC4: L_08921ACC: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921B3C; } @@ -5046,7 +4785,6 @@ L_08921B28: AOT_REGCACHE_SYNC_OUT(); return; L_08921B34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -5060,7 +4798,6 @@ L_08921B3C: L_08921B44: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921B70; } @@ -5074,7 +4811,6 @@ L_08921B50: L_08921B58: aot_gpr_4 = (0u | 13u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921B70; } @@ -5096,7 +4832,6 @@ L_08921B70: AOT_REGCACHE_SYNC_OUT(); return; L_08921B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -5105,7 +4840,6 @@ L_08921B88: L_08921B90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08921BA8; } @@ -5143,7 +4877,6 @@ L_08921BC4: AOT_REGCACHE_SYNC_OUT(); return; L_08921BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -5167,9 +4900,7 @@ L_08921BE8: aot_gpr_4 = (aot_gpr_4 | 2706u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921CDC; } @@ -5182,7 +4913,6 @@ L_08921C00: AOT_REGCACHE_SYNC_OUT(); return; L_08921C08: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08921CDC; } @@ -5210,7 +4940,6 @@ L_08921C24: L_08921C2C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08921CDC; } @@ -5224,9 +4953,7 @@ L_08921C3C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921CDC; } @@ -5242,7 +4969,6 @@ L_08921C58: L_08921C68: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08921C88; } @@ -5260,7 +4986,6 @@ L_08921C84: goto L_08921C88; L_08921C88: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08921CDC; } @@ -5276,7 +5001,6 @@ L_08921C98: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[18] | 0u); if (branch_taken) { @@ -5291,7 +5015,6 @@ L_08921CB4: AOT_REGCACHE_SYNC_OUT(); return; L_08921CBC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08921CDC; } @@ -5315,7 +5038,6 @@ L_08921CE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08921D60; } @@ -5357,7 +5079,6 @@ L_08921D28: L_08921D3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1368))); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08921D58; } @@ -5365,7 +5086,6 @@ L_08921D3C: } L_08921D48: aot_gpr_31 = (0x08921D50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08921D50u) goto L_08921D50; AOT_REGCACHE_SYNC_OUT(); return; L_08921D50: @@ -5374,7 +5094,6 @@ L_08921D50: goto L_08921D58; L_08921D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -5399,9 +5118,7 @@ L_08921D78: aot_gpr_4 = (aot_gpr_4 | 26355u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921DA0; } @@ -5411,7 +5128,6 @@ L_08921D90: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1938))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08921E0C; } @@ -5419,7 +5135,6 @@ L_08921D90: } L_08921DA0: aot_gpr_31 = (0x08921DA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08921DA8u) goto L_08921DA8; AOT_REGCACHE_SYNC_OUT(); return; L_08921DA8: @@ -5439,7 +5154,6 @@ L_08921DC0: L_08921DC8: aot_gpr_4 = (0u | 9u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921DEC; } @@ -5456,7 +5170,6 @@ L_08921DD4: AOT_REGCACHE_SYNC_OUT(); return; L_08921DEC: aot_gpr_31 = (0x08921DF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08921DF4u) goto L_08921DF4; AOT_REGCACHE_SYNC_OUT(); return; L_08921DF4: @@ -5468,7 +5181,6 @@ L_08921DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08921E04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -5479,9 +5191,7 @@ L_08921E0C: aot_gpr_4 = (aot_gpr_4 | 2706u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089226A0; } @@ -5558,7 +5268,6 @@ L_08921ECC: L_08921ED8: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08921EF8; } @@ -5572,7 +5281,6 @@ L_08921EE4: L_08921EEC: aot_gpr_4 = (0u | 9u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08922134; } @@ -5594,9 +5302,7 @@ L_08921F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08921F18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921F38; } @@ -5619,9 +5325,7 @@ L_08921F40: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08921FD4; } @@ -5665,7 +5369,6 @@ L_08921F90: AOT_REGCACHE_SYNC_OUT(); return; L_08921FCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922030; } @@ -5705,7 +5408,6 @@ L_08921FF4: AOT_REGCACHE_SYNC_OUT(); return; L_08922030: aot_gpr_31 = (0x08922038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08922038u) goto L_08922038; AOT_REGCACHE_SYNC_OUT(); return; L_08922038: @@ -5718,7 +5420,6 @@ L_08922038: L_08922048: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08922584; } @@ -5731,7 +5432,6 @@ L_08922054: AOT_REGCACHE_SYNC_OUT(); return; L_0892205C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922584; } @@ -5792,9 +5492,7 @@ L_089220BC: L_089220C8: aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089220EC; } @@ -5812,7 +5510,6 @@ L_089220EC: aot_gpr_4 = (aot_gpr_4 | 36151u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16490u << 16u); if (branch_taken) { @@ -5824,9 +5521,7 @@ L_0892210C: aot_gpr_4 = (aot_gpr_4 | 37504u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892212C; } @@ -5838,7 +5533,6 @@ L_08922124: goto L_0892212C; L_0892212C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922584; } @@ -5853,7 +5547,6 @@ L_0892213C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08922164; } @@ -5868,7 +5561,6 @@ L_08922154: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089222FC; } @@ -6013,9 +5705,7 @@ L_089222B8: L_089222C4: ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089222F4; } @@ -6034,7 +5724,6 @@ L_089222E0: AOT_REGCACHE_SYNC_OUT(); return; L_089222EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922744; } @@ -6042,7 +5731,6 @@ L_089222EC: } L_089222F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922584; } @@ -6057,7 +5745,6 @@ L_08922304: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089223AC; } @@ -6137,7 +5824,6 @@ L_089223B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892242C; } @@ -6210,7 +5896,6 @@ L_08922450: AOT_REGCACHE_SYNC_OUT(); return; L_0892245C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922478; } @@ -6224,7 +5909,6 @@ L_08922464: AOT_REGCACHE_SYNC_OUT(); return; L_08922470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922528; } @@ -6256,7 +5940,6 @@ L_089224A4: AOT_REGCACHE_SYNC_OUT(); return; L_089224B4: aot_gpr_31 = (0x089224BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 195u, 0x08904CD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089224BCu) goto L_089224BC; AOT_REGCACHE_SYNC_OUT(); return; L_089224BC: @@ -6329,7 +6012,6 @@ L_08922564: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08922584; } @@ -6337,7 +6019,6 @@ L_08922564: } L_08922574: aot_gpr_31 = (0x0892257Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892257Cu) goto L_0892257C; AOT_REGCACHE_SYNC_OUT(); return; L_0892257C: @@ -6371,9 +6052,7 @@ L_089225A0: AOT_REGCACHE_SYNC_OUT(); return; L_089225B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089225F0; } @@ -6395,7 +6074,6 @@ L_089225D0: AOT_REGCACHE_SYNC_OUT(); return; L_089225E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922640; } @@ -6417,9 +6095,7 @@ L_089225F8: AOT_REGCACHE_SYNC_OUT(); return; L_08922610: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922640; } @@ -6446,9 +6122,7 @@ L_08922640: AOT_REGCACHE_SYNC_OUT(); return; L_08922648: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[0])) && aot_fpr_20 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089226A0; } @@ -6456,14 +6130,12 @@ L_08922648: } L_08922658: aot_gpr_31 = (0x08922660u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08922660u) goto L_08922660; AOT_REGCACHE_SYNC_OUT(); return; L_08922660: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089226A0; } @@ -6471,7 +6143,6 @@ L_08922660: } L_08922670: aot_gpr_31 = (0x08922678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08922678u) goto L_08922678; AOT_REGCACHE_SYNC_OUT(); return; L_08922678: @@ -6499,7 +6170,6 @@ L_089226A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08922734; } @@ -6514,7 +6184,6 @@ L_089226C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08922734; } @@ -6527,7 +6196,6 @@ L_089226D0: AOT_REGCACHE_SYNC_OUT(); return; L_089226D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08922734; } @@ -6550,9 +6218,7 @@ L_089226F8: aot_gpr_4 = (aot_gpr_4 | 45613u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922734; } @@ -6567,7 +6233,6 @@ L_08922714: AOT_REGCACHE_SYNC_OUT(); return; L_08922724: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922734; } @@ -6592,7 +6257,6 @@ L_08922744: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089227D8; } @@ -6605,7 +6269,6 @@ L_08922754: AOT_REGCACHE_SYNC_OUT(); return; L_0892275C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089227D8; } @@ -6619,9 +6282,7 @@ L_08922764: L_0892276C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089227D8; } @@ -6642,7 +6303,6 @@ L_0892278C: AOT_REGCACHE_SYNC_OUT(); return; L_0892279C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089227BC; } @@ -6657,7 +6317,6 @@ L_089227A4: AOT_REGCACHE_SYNC_OUT(); return; L_089227B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089227CC; } @@ -6680,7 +6339,6 @@ L_089227D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08922818; } @@ -6695,7 +6353,6 @@ L_089227F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08922818; } @@ -6710,7 +6367,6 @@ L_08922808: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08922850; } @@ -6723,7 +6379,6 @@ L_08922818: AOT_REGCACHE_SYNC_OUT(); return; L_08922820: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089234F4; } @@ -6736,7 +6391,6 @@ L_08922828: AOT_REGCACHE_SYNC_OUT(); return; L_08922830: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089234F4; } @@ -6751,7 +6405,6 @@ L_08922840: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089234F4; } @@ -6770,7 +6423,6 @@ L_08922850: L_08922860: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089228B0; } @@ -6805,7 +6457,6 @@ L_0892289C: AOT_REGCACHE_SYNC_OUT(); return; L_089228A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089228D8; } @@ -6869,7 +6520,6 @@ L_0892291C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(310))); goto L_08922990; @@ -6902,9 +6552,7 @@ L_0892296C: ctx.fpr[14] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922A48; } @@ -6916,7 +6564,6 @@ L_0892298C: L_08922990: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08922ECC; } @@ -6959,9 +6606,7 @@ L_089229D8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922ECC; } @@ -6994,9 +6639,7 @@ L_08922A28: ctx.fpr[14] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922ECC; } @@ -7012,7 +6655,6 @@ L_08922A48: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08922B9C; } @@ -7061,7 +6703,6 @@ L_08922AA0: AOT_REGCACHE_SYNC_OUT(); return; L_08922AE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922B94; } @@ -7072,7 +6713,6 @@ L_08922AEC: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08922B30; } @@ -7091,9 +6731,7 @@ L_08922B08: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922B80; } @@ -7120,7 +6758,6 @@ L_08922B58: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08922B80; } @@ -7146,7 +6783,6 @@ L_08922B88: AOT_REGCACHE_SYNC_OUT(); return; L_08922B94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089234EC; } @@ -7159,7 +6795,6 @@ L_08922B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08922BA4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922D04; } @@ -7172,7 +6807,6 @@ L_08922BAC: AOT_REGCACHE_SYNC_OUT(); return; L_08922BB4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08922D04; } @@ -7190,7 +6824,6 @@ L_08922BC4: AOT_REGCACHE_SYNC_OUT(); return; L_08922BCC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922D04; } @@ -7228,9 +6861,7 @@ L_08922BFC: L_08922C0C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922C3C; } @@ -7244,9 +6875,7 @@ L_08922C20: L_08922C28: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922CB8; } @@ -7344,7 +6973,6 @@ L_08922CF0: AOT_REGCACHE_SYNC_OUT(); return; L_08922CFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089234EC; } @@ -7357,7 +6985,6 @@ L_08922D04: AOT_REGCACHE_SYNC_OUT(); return; L_08922D0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922E70; } @@ -7395,9 +7022,7 @@ L_08922D3C: L_08922D4C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922D7C; } @@ -7411,9 +7036,7 @@ L_08922D60: L_08922D68: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08922DF8; } @@ -7487,7 +7110,6 @@ L_08922DF8: L_08922E08: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08922E28; } @@ -7505,7 +7127,6 @@ L_08922E24: goto L_08922E28; L_08922E28: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08922E4C; } @@ -7531,7 +7152,6 @@ L_08922E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08922E54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08922E68; } @@ -7545,7 +7165,6 @@ L_08922E5C: AOT_REGCACHE_SYNC_OUT(); return; L_08922E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089234EC; } @@ -7561,7 +7180,6 @@ L_08922E70: L_08922E80: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08922EA0; } @@ -7579,7 +7197,6 @@ L_08922E9C: goto L_08922EA0; L_08922EA0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08922EC4; } @@ -7600,7 +7217,6 @@ L_08922EB8: AOT_REGCACHE_SYNC_OUT(); return; L_08922EC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089234EC; } @@ -7610,7 +7226,6 @@ L_08922ECC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(310))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089233A8; } @@ -7619,7 +7234,6 @@ L_08922ECC: L_08922EDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089233A8; } @@ -7632,7 +7246,6 @@ L_08922EE8: AOT_REGCACHE_SYNC_OUT(); return; L_08922EF0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089233A8; } @@ -7675,9 +7288,7 @@ L_08922F34: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089233A8; } @@ -7710,9 +7321,7 @@ L_08922F84: ctx.fpr[14] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089233A8; } @@ -7764,7 +7373,6 @@ L_08922FEC: AOT_REGCACHE_SYNC_OUT(); return; L_08923024: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0892303C; } @@ -7819,7 +7427,6 @@ L_08923060: AOT_REGCACHE_SYNC_OUT(); return; L_08923098: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089230B0; } @@ -7856,7 +7463,6 @@ L_089230C8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17402u << 16u); if (branch_taken) { @@ -7867,9 +7473,7 @@ L_089230C8: L_089230EC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08923158; } @@ -7887,9 +7491,7 @@ L_08923108: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08923160; } @@ -7907,9 +7509,7 @@ L_08923134: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08923160; } @@ -7935,7 +7535,6 @@ L_08923168: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17401u << 16u); if (branch_taken) { @@ -7947,9 +7546,7 @@ L_0892318C: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089231A8; } @@ -7960,7 +7557,6 @@ L_089231A4: goto L_089231A8; L_089231A8: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_0892324C; } @@ -7971,7 +7567,6 @@ L_089231B0: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892324C; } @@ -7980,7 +7575,6 @@ L_089231B0: L_089231C4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089231F8; } @@ -8054,9 +7648,7 @@ L_08923240: AOT_REGCACHE_SYNC_OUT(); return; L_0892324C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08923284; } @@ -8178,7 +7770,6 @@ L_0892335C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08923394; } @@ -8189,7 +7780,6 @@ L_0892336C: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08923394; } @@ -8220,9 +7810,7 @@ L_089233A8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089234EC; } @@ -8235,7 +7823,6 @@ L_089233C8: AOT_REGCACHE_SYNC_OUT(); return; L_089233D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923430; } @@ -8249,7 +7836,6 @@ L_089233D8: L_089233E0: aot_gpr_4 = (aot_gpr_2 < static_cast(2001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08923400; } @@ -8263,7 +7849,6 @@ L_089233EC: AOT_REGCACHE_SYNC_OUT(); return; L_089233F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923430; } @@ -8277,7 +7862,6 @@ L_08923400: L_08923408: aot_gpr_4 = (aot_gpr_2 < static_cast(1000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923430; } @@ -8322,9 +7906,7 @@ L_08923450: L_0892345C: aot_fpr_12 = aot_fpr_22 + ctx.fpr[0]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089234EC; } @@ -8342,7 +7924,6 @@ L_08923478: AOT_REGCACHE_SYNC_OUT(); return; L_08923480: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089234C8; } @@ -8356,7 +7937,6 @@ L_08923488: L_08923490: aot_gpr_4 = (aot_gpr_2 < static_cast(300) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089234C8; } @@ -8379,7 +7959,6 @@ L_089234B4: AOT_REGCACHE_SYNC_OUT(); return; L_089234C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089234EC; } @@ -8402,7 +7981,6 @@ L_089234E0: AOT_REGCACHE_SYNC_OUT(); return; L_089234EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923508; } @@ -8412,7 +7990,6 @@ L_089234F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < static_cast(1001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923508; } @@ -8423,7 +8000,6 @@ L_08923504: goto L_08923508; L_08923508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923574; } @@ -8438,7 +8014,6 @@ L_08923510: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 < static_cast(1001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923574; } @@ -8448,7 +8023,6 @@ L_08923534: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < static_cast(501) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923554; } @@ -8458,7 +8032,6 @@ L_08923544: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892355C; } @@ -8475,7 +8048,6 @@ L_08923554: L_0892355C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923574; } @@ -8490,7 +8062,6 @@ L_08923574: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892358C; } @@ -8506,7 +8077,6 @@ L_0892358C: aot_gpr_5 = (2048u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923630; } @@ -8519,7 +8089,6 @@ L_089235A0: AOT_REGCACHE_SYNC_OUT(); return; L_089235A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089235DC; } @@ -8557,7 +8126,6 @@ L_089235E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08923630; } @@ -8593,7 +8161,6 @@ L_08923630: AOT_REGCACHE_SYNC_OUT(); return; L_08923638: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089236AC; } @@ -8609,9 +8176,7 @@ L_08923648: aot_gpr_4 = (16000u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089236AC; } @@ -8658,7 +8223,6 @@ L_089236AC: AOT_REGCACHE_SYNC_OUT(); return; L_089236B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089237B4; } @@ -8671,7 +8235,6 @@ L_089236C0: AOT_REGCACHE_SYNC_OUT(); return; L_089236C8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089237B4; } @@ -8686,9 +8249,7 @@ L_089236D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089237B4; } @@ -8703,9 +8264,7 @@ L_089236F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(4))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089237B4; } @@ -8720,9 +8279,7 @@ L_08923718: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089237B4; } @@ -8747,7 +8304,6 @@ L_08923744: AOT_REGCACHE_SYNC_OUT(); return; L_0892374C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089237B4; } @@ -8759,9 +8315,7 @@ L_08923754: L_08923758: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089237B4; } @@ -8771,9 +8325,7 @@ L_0892376C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(796))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089237B4; } @@ -8786,7 +8338,6 @@ L_08923784: AOT_REGCACHE_SYNC_OUT(); return; L_0892378C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089237B4; } @@ -8796,7 +8347,6 @@ L_08923794: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089237B4; } @@ -8805,7 +8355,6 @@ L_08923794: L_089237A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089237B4; } @@ -8822,7 +8371,6 @@ L_089237B4: AOT_REGCACHE_SYNC_OUT(); return; L_089237C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089237D8; } @@ -8842,7 +8390,6 @@ L_089237D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(304)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089237EC; } @@ -8859,7 +8406,6 @@ L_089237EC: goto L_089237FC; L_089237FC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089238B0; } @@ -8938,7 +8484,6 @@ L_0892389C: AOT_REGCACHE_SYNC_OUT(); return; L_089238A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089238B8; } @@ -8958,7 +8503,6 @@ L_089238C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08923954; } @@ -8969,7 +8513,6 @@ L_089238D0: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08923954; } @@ -8982,7 +8525,6 @@ L_089238E4: AOT_REGCACHE_SYNC_OUT(); return; L_089238EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923924; } @@ -8991,7 +8533,6 @@ L_089238EC: L_089238F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923944; } @@ -9004,7 +8545,6 @@ L_08923900: AOT_REGCACHE_SYNC_OUT(); return; L_08923908: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923944; } @@ -9015,7 +8555,6 @@ L_08923910: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08923944; } @@ -9028,7 +8567,6 @@ L_08923924: AOT_REGCACHE_SYNC_OUT(); return; L_0892392C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923944; } @@ -9041,7 +8579,6 @@ L_08923934: AOT_REGCACHE_SYNC_OUT(); return; L_0892393C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0892394C; } @@ -9079,7 +8616,6 @@ L_0892396C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892398C; } @@ -9107,7 +8643,6 @@ L_08923994: AOT_REGCACHE_SYNC_OUT(); return; L_0892399C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089239AC; } @@ -9136,7 +8671,6 @@ L_089239C4: AOT_REGCACHE_SYNC_OUT(); return; L_089239CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923A54; } @@ -9149,7 +8683,6 @@ L_089239D4: AOT_REGCACHE_SYNC_OUT(); return; L_089239DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923A54; } @@ -9162,7 +8695,6 @@ L_089239E4: AOT_REGCACHE_SYNC_OUT(); return; L_089239EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923A54; } @@ -9175,7 +8707,6 @@ L_089239F4: AOT_REGCACHE_SYNC_OUT(); return; L_089239FC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923A54; } @@ -9188,7 +8719,6 @@ L_08923A04: AOT_REGCACHE_SYNC_OUT(); return; L_08923A0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923A28; } @@ -9212,7 +8742,6 @@ L_08923A28: AOT_REGCACHE_SYNC_OUT(); return; L_08923A30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923A54; } @@ -9239,7 +8768,6 @@ L_08923A5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08923BD8; } @@ -9270,7 +8798,6 @@ L_08923A84: AOT_REGCACHE_SYNC_OUT(); return; L_08923A98: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923ADC; } @@ -9289,7 +8816,6 @@ L_08923AA8: L_08923AB0: aot_gpr_4 = (0u | 24u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08923AD8; } @@ -9308,7 +8834,6 @@ L_08923AC4: L_08923ACC: aot_gpr_4 = (0u | 26u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08923ADC; } @@ -9319,7 +8844,6 @@ L_08923AD8: goto L_08923ADC; L_08923ADC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08923B2C; } @@ -9341,7 +8865,6 @@ L_08923AF0: L_08923B00: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08923B2C; } @@ -9373,7 +8896,6 @@ L_08923B38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923B68; } @@ -9381,7 +8903,6 @@ L_08923B38: } L_08923B48: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08923B68; } @@ -9389,7 +8910,6 @@ L_08923B48: } L_08923B50: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08923B68; } @@ -9402,7 +8922,6 @@ L_08923B58: AOT_REGCACHE_SYNC_OUT(); return; L_08923B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923B80; } @@ -9412,7 +8931,6 @@ L_08923B68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923B80; } @@ -9427,7 +8945,6 @@ L_08923B80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923BC0; } @@ -9442,7 +8959,6 @@ L_08923B98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08923BC0; } @@ -9450,7 +8966,6 @@ L_08923B98: } L_08923BA8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08923BC0; } @@ -9463,7 +8978,6 @@ L_08923BB0: AOT_REGCACHE_SYNC_OUT(); return; L_08923BB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923BD8; } @@ -9473,7 +8987,6 @@ L_08923BC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923BD8; } @@ -9488,7 +9001,6 @@ L_08923BD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923BF0; } @@ -9504,7 +9016,6 @@ L_08923BF0: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923C7C; } @@ -9519,7 +9030,6 @@ L_08923C0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08923C7C; } @@ -9534,7 +9044,6 @@ L_08923C24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08923C7C; } @@ -9579,7 +9088,6 @@ L_08923C7C: AOT_REGCACHE_SYNC_OUT(); return; L_08923C84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923C94; } @@ -9617,17 +9125,25 @@ L_08923CB8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12448))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08923CD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1364))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923D28; } @@ -9642,7 +9158,6 @@ L_08923CE4: AOT_REGCACHE_SYNC_OUT(); return; L_08923CF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923D60; } @@ -9665,7 +9180,6 @@ L_08923D10: AOT_REGCACHE_SYNC_OUT(); return; L_08923D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923D60; } @@ -9680,7 +9194,6 @@ L_08923D28: AOT_REGCACHE_SYNC_OUT(); return; L_08923D38: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923D60; } @@ -9702,7 +9215,6 @@ L_08923D54: AOT_REGCACHE_SYNC_OUT(); return; L_08923D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9715,7 +9227,6 @@ L_08923D68: AOT_REGCACHE_SYNC_OUT(); return; L_08923D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9723,7 +9234,6 @@ L_08923D70: } L_08923D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9736,7 +9246,6 @@ L_08923D80: AOT_REGCACHE_SYNC_OUT(); return; L_08923D88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923D98; } @@ -9749,7 +9258,6 @@ L_08923D90: AOT_REGCACHE_SYNC_OUT(); return; L_08923D98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9762,7 +9270,6 @@ L_08923DA0: AOT_REGCACHE_SYNC_OUT(); return; L_08923DA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9775,7 +9282,6 @@ L_08923DB0: AOT_REGCACHE_SYNC_OUT(); return; L_08923DB8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08923E28; } @@ -9789,7 +9295,6 @@ L_08923DC0: L_08923DC8: aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08923DE8; } @@ -9803,7 +9308,6 @@ L_08923DD4: L_08923DDC: aot_gpr_4 = (0u | 18u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08923DF0; } @@ -9839,7 +9343,6 @@ L_08923E08: AOT_REGCACHE_SYNC_OUT(); return; L_08923E20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 144u, 0x089246E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9857,7 +9360,6 @@ L_08923E30: AOT_REGCACHE_SYNC_OUT(); return; L_08923E38: { const bool branch_taken = aot_gpr_2 != aot_gpr_16; - // nop if (branch_taken) { goto L_08923E78; } @@ -9875,7 +9377,6 @@ L_08923E48: AOT_REGCACHE_SYNC_OUT(); return; L_08923E50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923E70; } @@ -9888,7 +9389,6 @@ L_08923E58: AOT_REGCACHE_SYNC_OUT(); return; L_08923E60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923E90; } @@ -9896,7 +9396,6 @@ L_08923E60: } L_08923E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923F08; } @@ -9904,7 +9403,6 @@ L_08923E68: } L_08923E70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 144u, 0x089246E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9922,7 +9420,6 @@ L_08923E80: AOT_REGCACHE_SYNC_OUT(); return; L_08923E88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923E58; } @@ -9941,7 +9438,6 @@ L_08923E98: L_08923EA0: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08923F08; } @@ -9949,7 +9445,6 @@ L_08923EA0: } L_08923EAC: aot_gpr_31 = (0x08923EB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08923EB4u) goto L_08923EB4; AOT_REGCACHE_SYNC_OUT(); return; L_08923EB4: @@ -9960,7 +9455,6 @@ L_08923EB4: AOT_REGCACHE_SYNC_OUT(); return; L_08923EC0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08923F08; } @@ -9974,7 +9468,6 @@ L_08923EC8: L_08923ED0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08923EF0; } @@ -9985,7 +9478,6 @@ L_08923EDC: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08923F08; } @@ -9993,7 +9485,6 @@ L_08923EDC: } L_08923EF0: aot_gpr_31 = (0x08923EF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08923EF8u) goto L_08923EF8; AOT_REGCACHE_SYNC_OUT(); return; L_08923EF8: @@ -10005,7 +9496,6 @@ L_08923EF8: AOT_REGCACHE_SYNC_OUT(); return; L_08923F08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10013,7 +9503,6 @@ L_08923F08: } L_08923F10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10021,7 +9510,6 @@ L_08923F10: } L_08923F18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10034,7 +9522,6 @@ L_08923F20: AOT_REGCACHE_SYNC_OUT(); return; L_08923F28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10042,7 +9529,6 @@ L_08923F28: } L_08923F30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10055,7 +9541,6 @@ L_08923F38: AOT_REGCACHE_SYNC_OUT(); return; L_08923F40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08923FB4; } @@ -10063,14 +9548,12 @@ L_08923F40: } L_08923F48: aot_gpr_31 = (0x08923F50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08923F50u) goto L_08923F50; AOT_REGCACHE_SYNC_OUT(); return; L_08923F50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08923FCC; } @@ -10112,7 +9595,6 @@ L_08923FA4: AOT_REGCACHE_SYNC_OUT(); return; L_08923FAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08923FCC; } @@ -10129,7 +9611,6 @@ L_08923FB4: AOT_REGCACHE_SYNC_OUT(); return; L_08923FCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0072_entry, 72u, 74u, 0x089242E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0072.cpp b/profiles/vcs/generated/generated_unit_0072.cpp index 9b79ac3..e3cb7b1 100644 --- a/profiles/vcs/generated/generated_unit_0072.cpp +++ b/profiles/vcs/generated/generated_unit_0072.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0072[4093] = { - 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 0, 9, 0, 0, 0, 10, 0, 11, 0, 0, 12, 0, 13, 0, 14, 0, - 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 0, 0, 0, 0, 20, 0, 21, 0, 22, 0, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, - 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, - 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, - 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 0, 63, 0, 64, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 68, - 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 70, 0, 71, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, - 0, 76, 0, 0, 0, 0, 77, 0, 0, 78, 79, 0, 80, 0, 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 84, 0, 0, 0, 85, 0, 0, 0, - 86, 0, 87, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 0, 100, 0, 101, 0, 0, 102, 0, 103, 0, 0, 104, - 0, 0, 0, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 0, 0, - 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 124, 0, 0, 125, 0, 0, 0, 126, - 0, 0, 127, 0, 128, 0, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, 135, 0, 0, 0, 136, 0, 137, 0, 138, 0, 0, 0, - 0, 0, 0, 139, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 147, 0, 148, 0, 149, - 0, 150, 0, 151, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 163, 0, 164, 0, - 0, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, - 0, 176, 0, 0, 0, 177, 0, 178, 0, 179, 0, 0, 180, 0, 181, 0, 182, 0, 183, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, - 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 189, 0, 0, 0, 190, 191, 192, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 196, 0, 0, - 0, 197, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, - 204, 0, 0, 205, 0, 206, 0, 0, 0, 207, 0, 208, 0, 209, 0, 0, 210, 0, 0, 211, 0, 0, 212, 0, 0, 0, 213, 0, 214, 0, 215, 0, - 0, 0, 0, 216, 0, 217, 0, 218, 0, 0, 0, 219, 220, 0, 221, 0, 222, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 225, - 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 229, 0, 0, 230, 0, 231, 0, - 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 0, 239, 0, 240, 0, 241, 0, 0, 242, 0, 243, 0, 244, 0, 245, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 250, 0, 0, 0, 0, - 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 255, 0, 256, - 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 264, 0, 0, 0, 265, 0, 0, 0, - 0, 266, 0, 0, 0, 0, 267, 0, 268, 0, 269, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, - 279, 0, 280, 0, 281, 0, 0, 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 287, 0, - 0, 0, 288, 0, 0, 289, 0, 0, 0, 290, 291, 0, 0, 292, 0, 0, 0, 293, 0, 0, 0, 294, 295, 0, 296, 297, 0, 0, 298, 0, 0, 0, - 299, 300, 0, 301, 0, 302, 0, 0, 303, 0, 304, 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 310, 0, 0, - 311, 0, 0, 312, 313, 0, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 319, 0, 0, 320, 0, 321, 0, 322, 0, 0, - 0, 323, 0, 324, 0, 325, 326, 0, 0, 0, 327, 0, 0, 0, 328, 0, 329, 0, 330, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, - 0, 334, 0, 0, 0, 335, 336, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, - 0, 343, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 349, 350, 0, 351, 0, 352, 0, 0, 353, - 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, 0, 0, 359, 0, 360, 0, 0, 361, 0, 362, 0, 0, 0, 0, - 363, 0, 364, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 368, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 371, 0, 372, 0, 373, 0, 0, - 0, 0, 374, 0, 375, 0, 0, 376, 0, 377, 0, 0, 0, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 0, 0, 389, 390, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, - 397, 0, 398, 0, 399, 0, 400, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 0, 404, 405, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, - 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, 0, 419, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, - 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, 427, 0, 428, 0, 0, - 429, 0, 0, 430, 0, 0, 0, 0, 431, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, - 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 439, 0, 0, 440, 0, 0, 441, 0, 0, 0, 0, 442, 0, 443, - 0, 0, 444, 0, 0, 445, 0, 0, 0, 0, 446, 0, 0, 447, 0, 448, 0, 0, 449, 0, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 459, - 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 467, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 472, - 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, - 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, - 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, - 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 501, 0, 502, 0, 503, 0, 0, 0, 504, 0, 505, 506, 0, 0, - 507, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, - 0, 0, 525, 0, 526, 0, 527, 0, 0, 0, 0, 528, 0, 0, 0, 529, 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 0, 534, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 537, 0, 0, 0, 0, 0, 0, 0, - 538, 0, 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 542, 0, 0, 543, 0, 544, 0, 0, 545, 0, 0, - 0, 0, 0, 546, 0, 547, 0, 0, 0, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 553, - 0, 554, 0, 555, 0, 556, 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 560, - 0, 0, 0, 0, 561, 0, 0, 0, 562, 0, 563, 564, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 570, - 0, 0, 0, 571, 0, 0, 572, 0, 573, 0, 574, 0, 575, 0, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 578, 0, 579, 0, 580, 0, 0, 0, - 581, 0, 0, 582, 0, 583, 584, 0, 0, 585, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 590, - 0, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 0, 594, 0, 595, 0, 596, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 0, 0, - 0, 0, 0, 599, 0, 0, 600, 0, 601, 0, 602, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 605, 0, 606, 0, 0, 607, 0, 0, 608, 0, - 0, 0, 609, 0, 0, 0, 0, 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 614, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 618, 619, 0, 0, 0, 620, 0, 0, 0, 621, 0, 622, 0, - 0, 0, 623, 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 0, 0, - 633, 0, 0, 634, 0, 635, 0, 636, 0, 0, 0, 637, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 641, 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 645, 0, 646, 0, 0, - 647, 0, 0, 648, 649, 0, 0, 650, 0, 651, 0, 0, 0, 0, 652, 0, 653, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, - 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 657, 0, 0, 658, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, - 0, 662, 0, 0, 0, 663, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 666, 0, 0, 667, 0, - 0, 668, 0, 0, 0, 669, 0, 0, 0, 670, 0, 671, 0, 0, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 0, 677, 0, 678, 0, 0, 0, 679, - 0, 0, 0, 680, 0, 0, 681, 0, 682, 0, 683, 0, 684, 0, 685, 686, 0, 687, 0, 688, 0, 0, 0, 689, 0, 690, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 695, - 0, 696, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 700, 0, 701, 0, 702, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, - 704, 0, 705, 0, 0, 0, 706, 0, 0, 707, 0, 708, 0, 0, 709, 0, 710, 0, 0, 711, 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, - 714, 0, 0, 0, 715, 0, 0, 716, 0, 717, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 723, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 727, 0, 0, 728, 0, 729, - 0, 730, 0, 0, 731, 0, 0, 0, 732, 0, 0, 0, 0, 733, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 736, 0, 737, 0, 0, 0, - 0, 0, 738, 0, 0, 0, 0, 739, 0, 740, 0, 0, 0, 0, 0, 741, 0, 0, 742, 0, 0, 0, 0, 743, 0, 744, 0, 745, 0, 746, 0, 747, - 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 749, 0, 0, 0, 0, 0, 750, 0, 751, 0, 0, 0, 0, 0, 752, 0, 753, 0, 754, 0, 0, 755, - 0, 0, 0, 0, 0, 756, 0, 757, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 760, 0, 0, 761, 762, 0, 0, - 763, 0, 0, 764, 0, 765, 0, 766, 0, 0, 0, 767, 0, 768, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 773, 0, 774, 0, 0, 775, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 779, 0, 0, 0, 780, 0, 781, 0, 782, - 0, 0, 783, 0, 784, 0, 785, 0, 0, 0, 786, 0, 787, 0, 0, 0, 0, 0, 0, 788, 0, 0, 789, 0, 790, 0, 0, 0, 791, 0, 0, 792, - 0, 793, 0, 794, 0, 0, 795, 0, 796, 0, 0, 797, 0, 0, 798, 0, 799, 0, 800, 0, 0, 801, 0, 0, 802, 0, 803, 0, 0, 0, 804, 0, - 0, 0, 0, 0, 0, 805, 0, 0, 0, 806, 0, 0, 0, 0, 807, 0, 0, 808, 0, 0, 809, 0, 810, 0, 0, 0, 0, 811, 0, 0, 0, 812, - 0, 0, 0, 813, 0, 0, 0, 0, 0, 814, 0, 815, 0, 816, 0, 0, 817, 0, 818, 0, 819, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 0, 822, 0, 0, 0, 823, 0, 0, 0, 824, 0, 0, 825, 0, 0, 826, 0, 827, 0, 828, 0, 0, - 0, 829, 0, 830, 0, 0, 831, 0, 0, 832, 0, 0, 833, 0, 834, 0, 835, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 837, 0, - 838, 0, 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 0, 843, 0, 0, - 0, 844, 0, 0, 845, 0, 0, 846, 0, 0, 847, 0, 848, 0, 849, 0, 850, 0, 851, 0, 852, 0, 853, 0, 0, 854, 0, 0, 0, 0, 0, 0, - 0, 855, 0, 856, 0, 857, 0, 858, 0, 0, 0, 859, 0, 0, 0, 860, 0, 0, 861, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 863, 0, 0, - 0, 0, 0, 0, 864, 0, 0, 0, 865, 0, 866, 0, 867, 0, 0, 868, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 870, 0, 0, 0, 0, 0, - 0, 871, 0, 0, 0, 0, 872, 0, 0, 873, 0, 0, 0, 0, 874, 0, 875, 0, 0, 876, 0, 877, 0, 878, 0, 0, 0, 879, 0, 880, 0, 0, - 0, 881, 0, 0, 882, 0, 0, 883, 0, 0, 0, 884, 0, 0, 0, 885, 0, 0, 0, 886, 0, 0, 0, 887, 0, 888, 0, 0, 0, 0, 889, 0, - 0, 890, 0, 0, 0, 891, 0, 0, 892, 0, 0, 0, 893, 0, 0, 0, 0, 0, 0, 894, 0, 0, 0, 895, 0, 0, 0, 0, 0, 0, 896, 0, - 0, 0, 897, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 899, 0, 900, 0, 901, 0, 0, 902, 0, 0, 0, 903, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 904, 0, 0, 905, 0, 0, 906, 0, 907, 0, 908, 0, 0, 0, 909, 0, 910, 0, 0, 0, 0, 0, 0, 911, 0, 0, 912, 0, 0, 913, - 0, 0, 914, 0, 0, 0, 915, 0, 0, 0, 916, 0, 0, 0, 917, 0, 0, 0, 918, 919, 0, 920, 0, 921, 0, 0, 0, 0, 922, 0, 0, 923, - 0, 0, 924, 925, 0, 0, 926, 0, 0, 927, 0, 0, 928, 0, 929, 0, 0, 0, 930, 0, 931, 0, 0, 932, 0, 0, 933, 0, 0, 0, 934, 0, - 0, 0, 935, 0, 0, 0, 936, 0, 937, 0, 0, 0, 938, 0, 0, 939, 0, 940, 0, 0, 0, 941, 0, 0, 942, 0, 943, 0, 0, 0, 944, 0, - 945, 0, 946, 0, 0, 0, 947, 0, 948, 0, 0, 0, 949, 0, 950, 0, 0, 951, 0, 0, 952, 0, 0, 953, 0, 954, 0, 955, 0, 0, 956, 0, - 0, 957, 0, 0, 0, 958, 0, 0, 0, 959, 0, 0, 0, 960, 0, 0, 0, 961, 962, 0, 963, 0, 964, 0, 0, 0, 965, 0, 966, 0, 967, 0, - 0, 0, 968, 0, 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, 970, 0, 0, 0, 971, 0, 0, 0, 0, 972, 0, 0, 0, 0, 0, 973, 0, 974, - 0, 0, 975, 0, 0, 0, 0, 0, 0, 976, 0, 977, 0, 978, 0, 0, 979, 0, 980, 0, 0, 0, 981, 0, 0, 0, 0, 982, 0, 983, 0, 984, - 0, 985, 0, 986, 0, 0, 987, 0, 988, 0, 0, 0, 989, 0, 0, 990, 0, 0, 0, 0, 0, 991, 0, 0, 992, 0, 0, 0, 993, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0072[64] = { + 0xAAA5415554A25555ull, 0x114AAAAAAAAAAAAAull, 0x050495008A012955ull, 0x01000A0511449642ull, + 0x94A5554000400010ull, 0x8922290215555550ull, 0x020188281514AA94ull, 0x002A022AA9000400ull, + 0xAAA8288452888500ull, 0x25171111042552A2ull, 0x54492A2908221052ull, 0x52800088840558A8ull, + 0x0A402010AA549155ull, 0x11AA8210A2000412ull, 0x14A4004100401542ull, 0x1362262444105415ull, + 0x2A640A993122852Bull, 0x104489624425446Aull, 0x0A50A8509588888Aull, 0x405542942A142545ull, + 0x02A81400C5540000ull, 0x00A00100029848D5ull, 0x0108249040201041ull, 0x0421250928490402ull, + 0x0124A424A1241008ull, 0x8442122480492884ull, 0x0010002084120200ull, 0x0000080000020000ull, + 0x2008808000000200ull, 0x4804028000040404ull, 0x3454288888A04820ull, 0x0404000000054811ull, + 0x2111280400110020ull, 0x01406110000A8854ull, 0x252200000000000Dull, 0x9088000000002428ull, + 0x90000000000004AAull, 0x9080020001010D10ull, 0x0040526915211548ull, 0x04454A2084000000ull, + 0x0000108449444548ull, 0x5119400500001400ull, 0x000018A915550224ull, 0x4021429929211410ull, + 0x4A0000A28010A480ull, 0x028AD5488AAA8A22ull, 0x0085511290121000ull, 0x0800229112094A45ull, + 0xA480140088080080ull, 0xAA84828414086112ull, 0x321080A095050480ull, 0x00280008000128A9ull, + 0x91481454A8884294ull, 0x885242204525494Aull, 0x2A48890000952A08ull, 0x241020214081524Aull, + 0x208488AA02555492ull, 0x28A9424204109510ull, 0x4088112242888892ull, 0x920515240112A204ull, + 0x4494524C90AC4444ull, 0x4A92514545229144ull, 0xA084480454562222ull, 0x1120914AA8452A04ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0072[64] = { + 1u, 29u, 58u, 76u, 91u, 105u, 127u, 145u, 157u, 176u, 197u, 216u, 232u, 251u, 266u, 279u, + 299u, 323u, 343u, 363u, 384u, 397u, 411u, 422u, 437u, 452u, 468u, 475u, 477u, 482u, 490u, 507u, + 515u, 525u, 538u, 546u, 554u, 561u, 571u, 589u, 599u, 612u, 623u, 639u, 656u, 668u, 691u, 704u, + 720u, 730u, 748u, 763u, 773u, 793u, 813u, 829u, 844u, 864u, 881u, 897u, 914u, 935u, 957u, 975u, }; void recomp_unit_0072_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0072_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08924000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0072[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0072[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0072[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08924000; @@ -1176,7 +1083,6 @@ L_08924008: AOT_REGCACHE_SYNC_OUT(); return; L_08924010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1184,7 +1090,6 @@ L_08924010: } L_08924018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1197,7 +1102,6 @@ L_08924020: AOT_REGCACHE_SYNC_OUT(); return; L_08924028: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1226,7 +1130,6 @@ L_08924044: AOT_REGCACHE_SYNC_OUT(); return; L_08924054: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08924068; } @@ -1240,7 +1143,6 @@ L_0892405C: AOT_REGCACHE_SYNC_OUT(); return; L_08924068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1253,7 +1155,6 @@ L_08924070: AOT_REGCACHE_SYNC_OUT(); return; L_08924078: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089240D4; } @@ -1271,7 +1172,6 @@ L_08924088: AOT_REGCACHE_SYNC_OUT(); return; L_08924090: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089240D4; } @@ -1293,7 +1193,6 @@ L_089240A0: AOT_REGCACHE_SYNC_OUT(); return; L_089240B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089240D4; } @@ -1317,7 +1216,6 @@ L_089240D4: AOT_REGCACHE_SYNC_OUT(); return; L_089240DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1330,7 +1228,6 @@ L_089240E4: AOT_REGCACHE_SYNC_OUT(); return; L_089240EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1343,7 +1240,6 @@ L_089240F4: AOT_REGCACHE_SYNC_OUT(); return; L_089240FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1356,7 +1252,6 @@ L_08924104: AOT_REGCACHE_SYNC_OUT(); return; L_0892410C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1369,7 +1264,6 @@ L_08924114: AOT_REGCACHE_SYNC_OUT(); return; L_0892411C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1382,7 +1276,6 @@ L_08924124: AOT_REGCACHE_SYNC_OUT(); return; L_0892412C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1395,7 +1288,6 @@ L_08924134: AOT_REGCACHE_SYNC_OUT(); return; L_0892413C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1403,7 +1295,6 @@ L_0892413C: } L_08924144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1416,7 +1307,6 @@ L_0892414C: AOT_REGCACHE_SYNC_OUT(); return; L_08924154: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089246E4; } @@ -1429,7 +1319,6 @@ L_0892415C: AOT_REGCACHE_SYNC_OUT(); return; L_08924164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1442,7 +1331,6 @@ L_0892416C: AOT_REGCACHE_SYNC_OUT(); return; L_08924174: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1455,7 +1343,6 @@ L_0892417C: AOT_REGCACHE_SYNC_OUT(); return; L_08924184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1468,7 +1355,6 @@ L_0892418C: AOT_REGCACHE_SYNC_OUT(); return; L_08924194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1481,7 +1367,6 @@ L_0892419C: AOT_REGCACHE_SYNC_OUT(); return; L_089241A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1494,7 +1379,6 @@ L_089241AC: AOT_REGCACHE_SYNC_OUT(); return; L_089241B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1507,7 +1391,6 @@ L_089241BC: AOT_REGCACHE_SYNC_OUT(); return; L_089241C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1516,7 +1399,6 @@ L_089241C4: L_089241CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1712))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089242B0; } @@ -1524,14 +1406,12 @@ L_089241CC: } L_089241D8: aot_gpr_31 = (0x089241E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089241E0u) goto L_089241E0; AOT_REGCACHE_SYNC_OUT(); return; L_089241E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1368))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08924210; } @@ -1541,7 +1421,6 @@ L_089241F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1712))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08924210; } @@ -1554,7 +1433,6 @@ L_08924200: AOT_REGCACHE_SYNC_OUT(); return; L_08924208: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1567,7 +1445,6 @@ L_08924210: AOT_REGCACHE_SYNC_OUT(); return; L_08924218: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0892426C; } @@ -1604,7 +1481,6 @@ L_08924240: AOT_REGCACHE_SYNC_OUT(); return; L_08924264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242A0; } @@ -1636,7 +1512,6 @@ L_089242A0: AOT_REGCACHE_SYNC_OUT(); return; L_089242A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089242E0; } @@ -1692,7 +1567,6 @@ L_08924304: L_08924318: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1935))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08924498; } @@ -1703,7 +1577,6 @@ L_08924324: goto L_08924328; L_08924328: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08924498; } @@ -1712,7 +1585,6 @@ L_08924328: L_08924330: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1935))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08924348; } @@ -1762,9 +1634,7 @@ L_08924388: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924498; } @@ -1772,7 +1642,6 @@ L_08924388: } L_089243A4: aot_gpr_31 = (0x089243ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 195u, 0x08904CD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089243ACu) goto L_089243AC; AOT_REGCACHE_SYNC_OUT(); return; L_089243AC: @@ -1858,7 +1727,6 @@ L_089244A0: AOT_REGCACHE_SYNC_OUT(); return; L_089244A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089244FC; } @@ -1871,7 +1739,6 @@ L_089244B0: AOT_REGCACHE_SYNC_OUT(); return; L_089244B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089244FC; } @@ -1885,7 +1752,6 @@ L_089244C0: L_089244C8: aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089244E8; } @@ -1899,7 +1765,6 @@ L_089244D4: L_089244DC: aot_gpr_4 = (0u | 18u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_089244F0; } @@ -1921,7 +1786,6 @@ L_089244FC: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089245A0; } @@ -1934,7 +1798,6 @@ L_08924510: AOT_REGCACHE_SYNC_OUT(); return; L_08924518: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089245A0; } @@ -1952,7 +1815,6 @@ L_08924528: AOT_REGCACHE_SYNC_OUT(); return; L_08924530: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089245A0; } @@ -1975,7 +1837,6 @@ L_08924548: AOT_REGCACHE_SYNC_OUT(); return; L_08924550: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089245A0; } @@ -1993,7 +1854,6 @@ L_08924560: AOT_REGCACHE_SYNC_OUT(); return; L_08924568: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089245A0; } @@ -2004,7 +1864,6 @@ L_08924570: aot_gpr_5 = (2048u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089245A0; } @@ -2023,7 +1882,6 @@ L_08924584: L_089245A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1952))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089245E0; } @@ -2031,14 +1889,12 @@ L_089245A0: } L_089245AC: aot_gpr_31 = (0x089245B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 275u, 0x08905378u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089245B4u) goto L_089245B4; AOT_REGCACHE_SYNC_OUT(); return; L_089245B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1956))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089245E0; } @@ -2059,7 +1915,6 @@ L_089245D4: L_089245E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-20331))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892461C; } @@ -2069,7 +1924,6 @@ L_089245EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892461C; } @@ -2078,7 +1932,6 @@ L_089245EC: L_089245FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892461C; } @@ -2086,7 +1939,6 @@ L_089245FC: } L_08924608: aot_gpr_31 = (0x08924610u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08924610u) goto L_08924610; AOT_REGCACHE_SYNC_OUT(); return; L_08924610: @@ -2102,7 +1954,6 @@ L_0892461C: AOT_REGCACHE_SYNC_OUT(); return; L_08924624: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0892468C; } @@ -2121,7 +1972,6 @@ L_08924634: L_0892463C: aot_gpr_4 = (0u | 11u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0892468C; } @@ -2136,7 +1986,6 @@ L_08924650: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892468C; } @@ -2149,7 +1998,6 @@ L_08924660: AOT_REGCACHE_SYNC_OUT(); return; L_08924668: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0892468C; } @@ -2227,7 +2075,17 @@ L_089246E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08924728: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-192)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(168), ctx.gpr[17]); @@ -2249,7 +2107,6 @@ L_08924728: L_08924760: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08924784; } @@ -2257,7 +2114,6 @@ L_08924760: } L_0892476C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089247A4; } @@ -2270,7 +2126,6 @@ L_08924774: AOT_REGCACHE_SYNC_OUT(); return; L_0892477C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -2283,7 +2138,6 @@ L_08924784: AOT_REGCACHE_SYNC_OUT(); return; L_0892478C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089247A4; } @@ -2293,7 +2147,6 @@ L_08924794: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089247CC; } @@ -2318,7 +2171,6 @@ L_089247A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08924828; } @@ -2326,7 +2178,6 @@ L_089247A4: } L_089247C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08924980; } @@ -2361,7 +2212,6 @@ L_089247D4: AOT_REGCACHE_SYNC_OUT(); return; L_08924820: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -2372,7 +2222,6 @@ L_08924828: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08924864; } @@ -2382,7 +2231,6 @@ L_0892483C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 237u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924878; } @@ -2397,7 +2245,6 @@ L_0892484C: AOT_REGCACHE_SYNC_OUT(); return; L_0892485C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2411,7 +2258,6 @@ L_08924864: AOT_REGCACHE_SYNC_OUT(); return; L_08924870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -2421,7 +2267,6 @@ L_08924878: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924904; } @@ -2432,7 +2277,6 @@ L_08924888: aot_gpr_5 = (0u | 112u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089248EC; } @@ -2447,7 +2291,6 @@ L_0892489C: AOT_REGCACHE_SYNC_OUT(); return; L_089248AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089248D4; } @@ -2457,7 +2300,6 @@ L_089248B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(32))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(36))); goto L_08924AF8; @@ -2465,7 +2307,6 @@ L_089248B4: goto L_089248CC; L_089248CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08924B68; } @@ -2483,7 +2324,6 @@ L_089248DC: AOT_REGCACHE_SYNC_OUT(); return; L_089248E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -2501,7 +2341,6 @@ L_089248F4: AOT_REGCACHE_SYNC_OUT(); return; L_089248FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -2516,7 +2355,6 @@ L_08924904: AOT_REGCACHE_SYNC_OUT(); return; L_08924914: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08924968; } @@ -2530,7 +2368,6 @@ L_0892491C: L_08924924: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(565))); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08924948; } @@ -2548,7 +2385,6 @@ L_08924938: AOT_REGCACHE_SYNC_OUT(); return; L_08924940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08924954; } @@ -2627,7 +2463,6 @@ L_089249C4: goto L_089249C8; L_089249C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089249E8; } @@ -2642,7 +2477,6 @@ L_089249D0: AOT_REGCACHE_SYNC_OUT(); return; L_089249E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2651,7 +2485,6 @@ L_089249E0: L_089249E8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08924A94; } @@ -2661,7 +2494,6 @@ L_089249F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08924A94; } @@ -2675,7 +2507,6 @@ L_08924A04: AOT_REGCACHE_SYNC_OUT(); return; L_08924A10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08924A44; } @@ -2706,7 +2537,6 @@ L_08924A30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2716,7 +2546,6 @@ L_08924A44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924A80; } @@ -2747,7 +2576,6 @@ L_08924A6C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2761,7 +2589,6 @@ L_08924A80: AOT_REGCACHE_SYNC_OUT(); return; L_08924A8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2781,7 +2608,6 @@ L_08924AA4: AOT_REGCACHE_SYNC_OUT(); return; L_08924AAC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2790,7 +2616,6 @@ L_08924AAC: L_08924AB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2799,7 +2624,6 @@ L_08924AB4: L_08924AC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089248B4; } @@ -2808,7 +2632,6 @@ L_08924AC0: L_08924ACC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089248B4; } @@ -2818,7 +2641,6 @@ L_08924AD8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089248B4; } @@ -2831,7 +2653,6 @@ L_08924AE8: AOT_REGCACHE_SYNC_OUT(); return; L_08924AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -2840,9 +2661,7 @@ L_08924AF0: L_08924AF8: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924B68; } @@ -2863,7 +2682,6 @@ L_08924B1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924BF8; } @@ -2887,7 +2705,6 @@ L_08924B38: AOT_REGCACHE_SYNC_OUT(); return; L_08924B40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08924BF8; } @@ -2912,7 +2729,6 @@ L_08924B48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08924BE4; } @@ -2994,7 +2810,6 @@ L_08924B9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08924CD8; } @@ -3016,7 +2831,6 @@ L_08924BE4: AOT_REGCACHE_SYNC_OUT(); return; L_08924BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3034,7 +2848,6 @@ L_08924C00: AOT_REGCACHE_SYNC_OUT(); return; L_08924C08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08924C20; } @@ -3047,7 +2860,6 @@ L_08924C10: AOT_REGCACHE_SYNC_OUT(); return; L_08924C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08924C3C; } @@ -3057,7 +2869,6 @@ L_08924C20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924C3C; } @@ -3081,7 +2892,6 @@ L_08924C48: AOT_REGCACHE_SYNC_OUT(); return; L_08924C50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08924C64; } @@ -3100,7 +2910,6 @@ L_08924C64: AOT_REGCACHE_SYNC_OUT(); return; L_08924C6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3117,9 +2926,7 @@ L_08924C74: L_08924C7C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924CEC; } @@ -3132,9 +2939,7 @@ L_08924C90: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924CD8; } @@ -3147,9 +2952,7 @@ L_08924CB4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924CEC; } @@ -3163,7 +2966,6 @@ L_08924CD8: AOT_REGCACHE_SYNC_OUT(); return; L_08924CE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08924D10; } @@ -3173,9 +2975,7 @@ L_08924CEC: aot_gpr_4 = (16512u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924D10; } @@ -3191,9 +2991,7 @@ L_08924D10: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924D7C; } @@ -3212,9 +3010,7 @@ L_08924D28: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08924D74; } @@ -3228,7 +3024,6 @@ L_08924D64: goto L_08924D74; L_08924D74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08924D90; } @@ -3258,11 +3053,20 @@ L_08924DA4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12176))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08924DBC: { const bool branch_taken = 0u == 0u; aot_gpr_4 = (0u | 1u); @@ -3302,7 +3106,6 @@ L_08924DE0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08924E04; } @@ -3333,7 +3136,6 @@ L_08924E18: AOT_REGCACHE_SYNC_OUT(); return; L_08924E20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3355,7 +3157,6 @@ L_08924E30: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(40))); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(48)); if (branch_taken) { @@ -3371,9 +3172,7 @@ L_08924E58: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(40))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089253D8; } @@ -3403,7 +3202,6 @@ L_08924E98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924EF0; } @@ -3417,7 +3215,6 @@ L_08924EC8: AOT_REGCACHE_SYNC_OUT(); return; L_08924ED4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3431,7 +3228,6 @@ L_08924EDC: AOT_REGCACHE_SYNC_OUT(); return; L_08924EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3441,7 +3237,6 @@ L_08924EF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08924F10; } @@ -3454,7 +3249,6 @@ L_08924F00: AOT_REGCACHE_SYNC_OUT(); return; L_08924F08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3466,7 +3260,6 @@ L_08924F10: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089253D0; } @@ -3479,7 +3272,6 @@ L_08924F28: AOT_REGCACHE_SYNC_OUT(); return; L_08924F30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089253D0; } @@ -3491,7 +3283,6 @@ L_08924F38: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (aot_gpr_4 < static_cast(14) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3503,16 +3294,24 @@ L_08924F50: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12120))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08924F68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08924F88; } @@ -3522,7 +3321,6 @@ L_08924F78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925044; } @@ -3539,7 +3337,6 @@ L_08924F94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925028; } @@ -3576,7 +3373,6 @@ L_08924FD4: goto L_08924FD8; L_08924FD8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08925014; } @@ -3598,7 +3394,6 @@ L_08924FF0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925028; } @@ -3614,7 +3409,6 @@ L_08925004: AOT_REGCACHE_SYNC_OUT(); return; L_0892500C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08925028; } @@ -3628,7 +3422,6 @@ L_08925014: AOT_REGCACHE_SYNC_OUT(); return; L_08925020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925204; } @@ -3644,7 +3437,6 @@ L_08925028: AOT_REGCACHE_SYNC_OUT(); return; L_0892503C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925204; } @@ -3671,7 +3463,6 @@ L_08925060: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925118; } @@ -3775,7 +3566,6 @@ L_08925104: AOT_REGCACHE_SYNC_OUT(); return; L_0892510C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08925118; } @@ -3811,7 +3601,6 @@ L_08925138: AOT_REGCACHE_SYNC_OUT(); return; L_08925140: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08925198; } @@ -3820,7 +3609,6 @@ L_08925140: L_08925148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925198; } @@ -3831,7 +3619,6 @@ L_08925154: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925198; } @@ -3862,7 +3649,6 @@ L_08925194: goto L_08925198; L_08925198: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089251F0; } @@ -3878,7 +3664,6 @@ L_089251AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925204; } @@ -3887,7 +3672,6 @@ L_089251AC: L_089251BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925204; } @@ -3897,7 +3681,6 @@ L_089251C8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925204; } @@ -3925,7 +3708,6 @@ L_089251F0: AOT_REGCACHE_SYNC_OUT(); return; L_08925204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -3935,7 +3717,6 @@ L_0892520C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892523C; } @@ -3945,7 +3726,6 @@ L_0892521C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892523C; } @@ -3955,7 +3735,6 @@ L_0892522C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925308; } @@ -3975,7 +3754,6 @@ L_0892524C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089252EC; } @@ -3991,7 +3769,6 @@ L_08925260: AOT_REGCACHE_SYNC_OUT(); return; L_08925268: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089252EC; } @@ -4024,7 +3801,6 @@ L_08925298: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089252D8; } @@ -4037,7 +3813,6 @@ L_089252AC: AOT_REGCACHE_SYNC_OUT(); return; L_089252B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4053,7 +3828,6 @@ L_089252BC: AOT_REGCACHE_SYNC_OUT(); return; L_089252D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4067,7 +3841,6 @@ L_089252D8: AOT_REGCACHE_SYNC_OUT(); return; L_089252E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4083,7 +3856,6 @@ L_089252EC: AOT_REGCACHE_SYNC_OUT(); return; L_08925300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4106,7 +3878,6 @@ L_08925318: AOT_REGCACHE_SYNC_OUT(); return; L_08925320: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089253A4; } @@ -4139,7 +3910,6 @@ L_08925350: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925390; } @@ -4152,7 +3922,6 @@ L_08925364: AOT_REGCACHE_SYNC_OUT(); return; L_0892536C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4168,7 +3937,6 @@ L_08925374: AOT_REGCACHE_SYNC_OUT(); return; L_08925388: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4182,7 +3950,6 @@ L_08925390: AOT_REGCACHE_SYNC_OUT(); return; L_0892539C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253B8; } @@ -4198,7 +3965,6 @@ L_089253A4: AOT_REGCACHE_SYNC_OUT(); return; L_089253B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -4211,7 +3977,6 @@ L_089253C0: AOT_REGCACHE_SYNC_OUT(); return; L_089253C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089253D8; } @@ -4237,7 +4002,17 @@ L_089253D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089253F8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-544)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -4256,7 +4031,6 @@ L_089253F8: } L_08925448: aot_gpr_31 = (0x08925450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08925450u) goto L_08925450; AOT_REGCACHE_SYNC_OUT(); return; L_08925450: @@ -4275,7 +4049,6 @@ L_08925458: } L_08925460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926050; } @@ -4285,7 +4058,6 @@ L_08925468: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089254DC; } @@ -4325,7 +4097,6 @@ L_089254B0: AOT_REGCACHE_SYNC_OUT(); return; L_089254CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089254E4; } @@ -4333,7 +4104,6 @@ L_089254CC: } L_089254D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892551C; } @@ -4341,7 +4111,6 @@ L_089254D4: } L_089254DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926050; } @@ -4370,7 +4139,6 @@ L_089254E4: AOT_REGCACHE_SYNC_OUT(); return; L_08925500: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0892551C; } @@ -4378,12 +4146,10 @@ L_08925500: } L_08925508: aot_gpr_31 = (0x08925510u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08925510u) goto L_08925510; AOT_REGCACHE_SYNC_OUT(); return; L_08925510: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0892551C; } @@ -4396,7 +4162,6 @@ L_0892551C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925550; } @@ -4405,7 +4170,6 @@ L_0892551C: L_0892552C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925550; } @@ -4416,7 +4180,6 @@ L_08925538: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925550; } @@ -4428,7 +4191,6 @@ L_0892554C: L_08925550: aot_gpr_4 = (ctx.gpr[17] | ctx.gpr[18]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089258A8; } @@ -4471,7 +4233,6 @@ L_08925564: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -4508,7 +4269,6 @@ L_089255DC: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-20352))); goto L_08925618; @@ -4791,7 +4551,6 @@ L_08925894: L_089258A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-20329))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925908; } @@ -4838,7 +4597,6 @@ L_08925908: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089259B0; } @@ -4848,7 +4606,6 @@ L_0892591C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1926)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089259B0; } @@ -4905,7 +4662,6 @@ L_08925994: aot_gpr_4 = (ctx.gpr[17] << 6u); aot_gpr_4 = (aot_gpr_2 + aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089259B0; } @@ -4922,7 +4678,6 @@ L_089259B0: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925D08; } @@ -4933,7 +4688,6 @@ L_089259C4: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925D08; } @@ -4943,7 +4697,6 @@ L_089259D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1926)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925D08; } @@ -4954,7 +4707,6 @@ L_089259E8: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_4 = (aot_gpr_4 < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08925D08; } @@ -5015,11 +4767,20 @@ L_08925A7C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12064))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08925A94: aot_gpr_4 = (15820u << 16u); aot_gpr_4 = (aot_gpr_4 | 52429u); @@ -5057,7 +4818,6 @@ L_08925A94: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925CBC; } @@ -5144,7 +4904,6 @@ L_08925AD0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925CBC; } @@ -5228,7 +4987,6 @@ L_08925B44: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925CBC; } @@ -5316,7 +5074,6 @@ L_08925BAC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925CBC; } @@ -5404,7 +5161,6 @@ L_08925C24: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08925CBC; } @@ -5434,7 +5190,6 @@ L_08925CBC: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08925D08; } @@ -5458,7 +5213,6 @@ L_08925CF4: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08925CCC; } @@ -5470,7 +5224,6 @@ L_08925D08: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -5484,9 +5237,7 @@ L_08925D28: aot_gpr_4 = (16752u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08926050; } @@ -5538,7 +5289,6 @@ L_08925D48: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08925D9C; @@ -5546,7 +5296,6 @@ L_08925D48: goto L_08925D9C; L_08925D9C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926050; } @@ -5561,7 +5310,6 @@ L_08925DA4: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.gpr[18] = (0u | 1u); aot_gpr_31 = (0x08925DC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08925DC8u) goto L_08925DC8; AOT_REGCACHE_SYNC_OUT(); return; L_08925DC8: @@ -5582,7 +5330,6 @@ L_08925DC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(160))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(160))); goto L_08925DF8; @@ -5602,9 +5349,7 @@ L_08925DF8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08925E54; } @@ -5614,7 +5359,6 @@ L_08925E14: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(164))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(164))); goto L_08925E38; @@ -5634,9 +5378,7 @@ L_08925E38: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08925E5C; } @@ -5654,7 +5396,6 @@ L_08925E5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925EAC; } @@ -5664,7 +5405,6 @@ L_08925E6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925EAC; } @@ -5674,7 +5414,6 @@ L_08925E7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925EAC; } @@ -5684,7 +5423,6 @@ L_08925E8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08925EAC; } @@ -5694,7 +5432,6 @@ L_08925E9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08925EB4; } @@ -5718,7 +5455,6 @@ L_08925EB4: AOT_REGCACHE_SYNC_OUT(); return; L_08925EC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08925ED8; } @@ -5741,7 +5477,6 @@ L_08925ED8: AOT_REGCACHE_SYNC_OUT(); return; L_08925EE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08925EF4; } @@ -5763,7 +5498,6 @@ L_08925F00: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926050; } @@ -5785,7 +5519,6 @@ L_08925F10: L_08925F2C: aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08925F48; } @@ -5793,7 +5526,6 @@ L_08925F2C: } L_08925F38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926040; } @@ -5801,7 +5533,6 @@ L_08925F38: } L_08925F40: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08925F38; } @@ -5904,7 +5635,6 @@ L_08925FC8: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(224), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08925FE8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08925FE8u) goto L_08925FE8; AOT_REGCACHE_SYNC_OUT(); return; L_08925FE8: @@ -5939,7 +5669,6 @@ L_08926040: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08925F10; } @@ -5966,7 +5695,17 @@ L_08926050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08926088: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-320)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6038,7 +5777,6 @@ L_08926118: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926144; } @@ -6048,7 +5786,6 @@ L_0892612C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892614C; } @@ -6064,7 +5801,6 @@ L_0892613C: } L_08926144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6144,9 +5880,7 @@ L_089261B8: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08926208; } @@ -6154,7 +5888,6 @@ L_089261B8: } L_089261D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6166,9 +5899,7 @@ L_089261E0: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08926208; } @@ -6176,7 +5907,6 @@ L_089261E0: } L_08926200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6257,7 +5987,6 @@ L_089262E0: L_089262E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(772))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6269,7 +5998,6 @@ L_089262F4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6339,7 +6067,6 @@ L_089263CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(772))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08926404; } @@ -6350,7 +6077,6 @@ L_089263DC: aot_gpr_6 = (43691u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08926404; } @@ -6360,13 +6086,11 @@ L_089263F0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); jump_target = aot_gpr_5; aot_gpr_31 = (0x089263FCu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089263FCu) goto L_089263FC; AOT_REGCACHE_SYNC_OUT(); return; L_089263FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892640C; } @@ -6374,7 +6098,6 @@ L_089263FC: } L_08926404: aot_gpr_31 = (0x0892640Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892640Cu) goto L_0892640C; AOT_REGCACHE_SYNC_OUT(); return; L_0892640C: @@ -6384,7 +6107,6 @@ L_0892640C: AOT_REGCACHE_SYNC_OUT(); return; L_08926414: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6393,7 +6115,6 @@ L_08926414: L_0892641C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6446,7 +6167,6 @@ L_08926428: aot_fpr_13 = aot_fpr_14 + aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3248), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -6560,7 +6280,6 @@ L_089265FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926620; } @@ -6569,7 +6288,6 @@ L_089265FC: L_0892660C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926620; } @@ -6594,7 +6312,6 @@ L_08926630: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3240))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926668; } @@ -6605,7 +6322,6 @@ L_08926640: aot_gpr_5 = (43691u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-21846)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08926668; } @@ -6621,7 +6337,6 @@ L_08926654: AOT_REGCACHE_SYNC_OUT(); return; L_08926660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926670; } @@ -6658,7 +6373,6 @@ L_08926694: L_08926698: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6667,7 +6381,6 @@ L_08926698: L_089266A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(176))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089266B8; } @@ -6693,7 +6406,17 @@ L_089266B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089266D8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-368)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(328), ctx.gpr[17]); @@ -6737,7 +6460,6 @@ L_08926768: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926794; } @@ -6758,7 +6480,6 @@ L_08926794: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089267D8; } @@ -6772,7 +6493,6 @@ L_089267A4: L_089267AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926838; } @@ -6785,7 +6505,6 @@ L_089267B8: AOT_REGCACHE_SYNC_OUT(); return; L_089267C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08926838; } @@ -6805,7 +6524,6 @@ L_089267D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926838; } @@ -6826,7 +6544,6 @@ L_089267E8: L_0892680C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926838; } @@ -6839,7 +6556,6 @@ L_08926818: AOT_REGCACHE_SYNC_OUT(); return; L_08926820: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08926838; } @@ -6856,7 +6572,6 @@ L_08926838: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08926858; } @@ -6866,7 +6581,6 @@ L_08926848: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926860; } @@ -6886,7 +6600,6 @@ L_08926860: L_0892686C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089269D0; } @@ -6896,7 +6609,6 @@ L_08926878: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089268B0; } @@ -6907,7 +6619,6 @@ L_08926888: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089268B0; } @@ -6918,7 +6629,6 @@ L_0892689C: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089269D0; } @@ -6978,7 +6688,6 @@ L_089268B0: AOT_REGCACHE_SYNC_OUT(); return; L_08926928: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089269C0; } @@ -7027,7 +6736,6 @@ L_08926930: AOT_REGCACHE_SYNC_OUT(); return; L_08926980: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089269C0; } @@ -7050,7 +6758,6 @@ L_08926988: AOT_REGCACHE_SYNC_OUT(); return; L_089269B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089269CC; } @@ -7069,7 +6776,6 @@ L_089269D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926F08; } @@ -7079,7 +6785,6 @@ L_089269E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926A48; } @@ -7094,7 +6799,6 @@ L_089269F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2308))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926A50; } @@ -7103,7 +6807,6 @@ L_089269F8: L_08926A08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926A50; } @@ -7113,7 +6816,6 @@ L_08926A14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08926A50; } @@ -7131,7 +6833,6 @@ L_08926A24: AOT_REGCACHE_SYNC_OUT(); return; L_08926A40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926A50; } @@ -7149,7 +6850,6 @@ L_08926A50: AOT_REGCACHE_SYNC_OUT(); return; L_08926A58: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08926A70; } @@ -7162,7 +6862,6 @@ L_08926A60: AOT_REGCACHE_SYNC_OUT(); return; L_08926A68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926F24; } @@ -7172,7 +6871,6 @@ L_08926A70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926BA4; } @@ -7181,7 +6879,6 @@ L_08926A70: L_08926A80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926BA4; } @@ -7202,7 +6899,6 @@ L_08926A9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926BA4; } @@ -7249,14 +6945,12 @@ L_08926B10: AOT_REGCACHE_SYNC_OUT(); return; L_08926B28: aot_gpr_31 = (0x08926B30u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08926B30u) goto L_08926B30; AOT_REGCACHE_SYNC_OUT(); return; L_08926B30: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08926B54; } @@ -7267,7 +6961,6 @@ L_08926B40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(22)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 71 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08926B74; } @@ -7316,7 +7009,6 @@ L_08926B90: AOT_REGCACHE_SYNC_OUT(); return; L_08926B9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926F24; } @@ -7327,7 +7019,6 @@ L_08926BA4: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926C3C; } @@ -7335,7 +7026,6 @@ L_08926BA4: } L_08926BB8: aot_gpr_31 = (0x08926BC0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08926BC0u) goto L_08926BC0; AOT_REGCACHE_SYNC_OUT(); return; L_08926BC0: @@ -7367,7 +7057,6 @@ L_08926BF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926C28; } @@ -7387,7 +7076,6 @@ L_08926C28: AOT_REGCACHE_SYNC_OUT(); return; L_08926C34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926F24; } @@ -7398,7 +7086,6 @@ L_08926C3C: ctx.gpr[19] = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926E84; } @@ -7420,7 +7107,6 @@ L_08926C50: AOT_REGCACHE_SYNC_OUT(); return; L_08926C7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08926CF8; } @@ -7430,7 +7116,6 @@ L_08926C84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08926CF8; } @@ -7438,7 +7123,6 @@ L_08926C84: } L_08926C94: aot_gpr_31 = (0x08926C9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08926C9Cu) goto L_08926C9C; AOT_REGCACHE_SYNC_OUT(); return; L_08926C9C: @@ -7484,9 +7168,7 @@ L_08926C9C: aot_gpr_4 = (16480u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08926CF8; } @@ -7494,7 +7176,6 @@ L_08926C9C: } L_08926CE4: aot_gpr_31 = (0x08926CECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08926CECu) goto L_08926CEC; AOT_REGCACHE_SYNC_OUT(); return; L_08926CEC: @@ -7506,7 +7187,6 @@ L_08926CEC: L_08926CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08926D2C; } @@ -7516,7 +7196,6 @@ L_08926D04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08926E50; } @@ -7531,7 +7210,6 @@ L_08926D14: AOT_REGCACHE_SYNC_OUT(); return; L_08926D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926E50; } @@ -7549,7 +7227,6 @@ L_08926D2C: } L_08926D3C: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08926DBC; } @@ -7562,7 +7239,6 @@ L_08926D44: AOT_REGCACHE_SYNC_OUT(); return; L_08926D4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08926D6C; } @@ -7570,12 +7246,10 @@ L_08926D4C: } L_08926D54: aot_gpr_31 = (0x08926D5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08926D5Cu) goto L_08926D5C; AOT_REGCACHE_SYNC_OUT(); return; L_08926D5C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08926DBC; } @@ -7612,7 +7286,6 @@ L_08926D7C: L_08926D8C: aot_gpr_4 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08926DBC; } @@ -7620,7 +7293,6 @@ L_08926D8C: } L_08926D98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926DA8; } @@ -7628,7 +7300,6 @@ L_08926D98: } L_08926DA0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926DBC; } @@ -7641,7 +7312,6 @@ L_08926DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08926DB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08926DBC; } @@ -7670,7 +7340,6 @@ L_08926DCC: AOT_REGCACHE_SYNC_OUT(); return; L_08926DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926E30; } @@ -7740,7 +7409,6 @@ L_08926E7C: L_08926E84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08926F24; } @@ -7750,7 +7418,6 @@ L_08926E90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08926F24; } @@ -7760,7 +7427,6 @@ L_08926EA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926F24; } @@ -7773,7 +7439,6 @@ L_08926EB0: AOT_REGCACHE_SYNC_OUT(); return; L_08926EB8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08926F24; } @@ -7781,7 +7446,6 @@ L_08926EB8: } L_08926EC0: aot_gpr_31 = (0x08926EC8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08926EC8u) goto L_08926EC8; AOT_REGCACHE_SYNC_OUT(); return; L_08926EC8: @@ -7806,7 +7470,6 @@ L_08926EDC: AOT_REGCACHE_SYNC_OUT(); return; L_08926F00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08926F24; } @@ -7816,7 +7479,6 @@ L_08926F08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08926F24; } @@ -7830,7 +7492,6 @@ L_08926F18: AOT_REGCACHE_SYNC_OUT(); return; L_08926F24: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08926F38; } @@ -7863,7 +7524,6 @@ L_08926F4C: L_08926F64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927260; } @@ -7873,7 +7533,6 @@ L_08926F70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892706C; } @@ -7883,7 +7542,6 @@ L_08926F80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892706C; } @@ -7897,7 +7555,6 @@ L_08926F90: AOT_REGCACHE_SYNC_OUT(); return; L_08926F9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0892706C; } @@ -7907,7 +7564,6 @@ L_08926FA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892706C; } @@ -7989,7 +7645,6 @@ L_0892707C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089271BC; } @@ -8025,7 +7680,6 @@ L_089270DC: L_089270E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08927110; } @@ -8038,7 +7692,6 @@ L_089270F4: AOT_REGCACHE_SYNC_OUT(); return; L_089270FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927110; } @@ -8063,7 +7716,6 @@ L_08927120: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089271C8; } @@ -8077,7 +7729,6 @@ L_08927138: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_gpr_31 = (0x0892714Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[29], aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892714Cu) goto L_0892714C; AOT_REGCACHE_SYNC_OUT(); return; L_0892714C: @@ -8092,7 +7743,6 @@ L_0892714C: AOT_REGCACHE_SYNC_OUT(); return; L_08927168: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_089271C8; } @@ -8104,7 +7754,6 @@ L_08927170: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_gpr_31 = (0x08927188u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[29], aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08927188u) goto L_08927188; AOT_REGCACHE_SYNC_OUT(); return; L_08927188: @@ -8117,7 +7766,6 @@ L_08927188: AOT_REGCACHE_SYNC_OUT(); return; L_0892719C: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_089271C8; } @@ -8146,7 +7794,6 @@ L_089271C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927228; } @@ -8159,7 +7806,6 @@ L_089271DC: AOT_REGCACHE_SYNC_OUT(); return; L_089271E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08927228; } @@ -8172,7 +7818,6 @@ L_089271EC: AOT_REGCACHE_SYNC_OUT(); return; L_089271F4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08927228; } @@ -8186,7 +7831,6 @@ L_089271FC: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(468), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927228; } @@ -8215,12 +7859,10 @@ L_08927228: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08927240u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 465u, 0x0896DCA0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08927240u) goto L_08927240; AOT_REGCACHE_SYNC_OUT(); return; L_08927240: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927260; } @@ -8241,7 +7883,6 @@ L_08927260: AOT_REGCACHE_SYNC_OUT(); return; L_08927268: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927294; } @@ -8274,7 +7915,6 @@ L_0892729C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(460), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089272E4; } @@ -8298,7 +7938,6 @@ L_089272D0: L_089272E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089272F4; } @@ -8326,7 +7965,6 @@ L_0892730C: AOT_REGCACHE_SYNC_OUT(); return; L_08927314: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08927340; } @@ -8336,7 +7974,6 @@ L_0892731C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927340; } @@ -8344,7 +7981,6 @@ L_0892731C: } L_0892732C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08927340; } @@ -8382,7 +8018,17 @@ L_08927340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892738C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-112)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(92), ctx.gpr[21]); @@ -8394,7 +8040,6 @@ L_0892738C: { const std::uint32_t aot_run_words[4]{ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(96), aot_run_words); } { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08927410; } @@ -8424,7 +8069,6 @@ L_089273D4: goto L_08927408; L_08927408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927568; } @@ -8438,7 +8082,6 @@ L_08927410: AOT_REGCACHE_SYNC_OUT(); return; L_0892741C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927FF0; } @@ -8449,7 +8092,6 @@ L_08927424: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927568; } @@ -8460,7 +8102,6 @@ L_08927438: aot_gpr_5 = (0u | 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927568; } @@ -8470,7 +8111,6 @@ L_0892744C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892746C; } @@ -8480,7 +8120,6 @@ L_0892745C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927568; } @@ -8502,7 +8141,6 @@ L_08927474: L_0892747C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08927540; } @@ -8515,7 +8153,6 @@ L_08927488: AOT_REGCACHE_SYNC_OUT(); return; L_08927490: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08927540; } @@ -8525,7 +8162,6 @@ L_08927498: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(900))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089274E0; } @@ -8556,7 +8192,6 @@ L_089274CC: AOT_REGCACHE_SYNC_OUT(); return; L_089274D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927568; } @@ -8571,7 +8206,6 @@ L_089274E0: L_089274F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892750C; } @@ -8584,7 +8218,6 @@ L_089274FC: AOT_REGCACHE_SYNC_OUT(); return; L_08927504: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892752C; } @@ -8615,7 +8248,6 @@ L_0892752C: AOT_REGCACHE_SYNC_OUT(); return; L_08927538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927568; } @@ -8640,7 +8272,6 @@ L_08927554: AOT_REGCACHE_SYNC_OUT(); return; L_08927560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927FF0; } @@ -8650,7 +8281,6 @@ L_08927568: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927594; } @@ -8669,7 +8299,6 @@ L_08927594: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089275D0; } @@ -8686,7 +8315,6 @@ L_089275A4: L_089275B8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089275D0; } @@ -8699,7 +8327,6 @@ L_089275C4: goto L_089275D0; L_089275D0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0892762C; } @@ -8710,7 +8337,6 @@ L_089275D8: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892762C; } @@ -8720,7 +8346,6 @@ L_089275EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892762C; } @@ -8730,7 +8355,6 @@ L_089275FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892762C; } @@ -8750,7 +8374,6 @@ L_0892760C: } L_08927624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089276A0; } @@ -8758,7 +8381,6 @@ L_08927624: } L_0892762C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927FF0; } @@ -8767,7 +8389,6 @@ L_0892762C: L_08927634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089276A0; } @@ -8780,7 +8401,6 @@ L_08927640: AOT_REGCACHE_SYNC_OUT(); return; L_08927648: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089276A0; } @@ -8789,7 +8409,6 @@ L_08927648: L_08927650: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089276A0; } @@ -8817,7 +8436,6 @@ L_0892765C: L_089276A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_089276BC; } @@ -8827,7 +8445,6 @@ L_089276AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089276CC; } @@ -8842,7 +8459,6 @@ L_089276BC: L_089276CC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(562))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089276E4; } @@ -8860,7 +8476,6 @@ L_089276E4: AOT_REGCACHE_SYNC_OUT(); return; L_089276EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0892770C; } @@ -8870,7 +8485,6 @@ L_089276F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892770C; } @@ -8884,7 +8498,6 @@ L_08927704: L_0892770C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08927724; } @@ -8899,7 +8512,6 @@ L_08927718: L_08927724: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08927840; } @@ -8912,7 +8524,6 @@ L_08927730: AOT_REGCACHE_SYNC_OUT(); return; L_08927738: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089277E8; } @@ -8951,7 +8562,6 @@ L_08927780: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089277D0; } @@ -9006,7 +8616,6 @@ L_089277F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927810; } @@ -9041,7 +8650,6 @@ L_08927830: AOT_REGCACHE_SYNC_OUT(); return; L_08927838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927FF0; } @@ -9054,7 +8662,6 @@ L_08927840: AOT_REGCACHE_SYNC_OUT(); return; L_08927848: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927864; } @@ -9078,7 +8685,6 @@ L_08927864: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(558))); aot_gpr_5 = (0u | 65535u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892788C; } @@ -9095,7 +8701,6 @@ L_0892788C: AOT_REGCACHE_SYNC_OUT(); return; L_08927894: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927930; } @@ -9115,7 +8720,6 @@ L_089278AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089278C8; } @@ -9124,7 +8728,6 @@ L_089278AC: L_089278BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08927920; } @@ -9135,7 +8738,6 @@ L_089278C8: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927910; } @@ -9182,7 +8784,6 @@ L_08927920: AOT_REGCACHE_SYNC_OUT(); return; L_08927928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927998; } @@ -9191,7 +8792,6 @@ L_08927928: L_08927930: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08927998; } @@ -9202,7 +8802,6 @@ L_0892793C: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927984; } @@ -9246,7 +8845,6 @@ L_08927984: L_08927998: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08927A78; } @@ -9305,7 +8903,6 @@ L_089279F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[18]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927A64; } @@ -9320,7 +8917,6 @@ L_08927A04: L_08927A10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08927A2C; } @@ -9330,7 +8926,6 @@ L_08927A1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927A64; } @@ -9366,7 +8961,6 @@ L_08927A64: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089279C0; } @@ -9375,7 +8969,6 @@ L_08927A64: L_08927A78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08927A94; } @@ -9385,7 +8978,6 @@ L_08927A84: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); aot_gpr_4 = (0u | 59u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08927C5C; } @@ -9420,7 +9012,6 @@ L_08927ACC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927AF8; } @@ -9439,7 +9030,6 @@ L_08927AF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927B24; } @@ -9458,7 +9048,6 @@ L_08927B24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927B50; } @@ -9471,7 +9060,6 @@ L_08927B34: AOT_REGCACHE_SYNC_OUT(); return; L_08927B3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927B50; } @@ -9487,7 +9075,6 @@ L_08927B50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927B88; } @@ -9509,7 +9096,6 @@ L_08927B60: L_08927B88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08927BE4; } @@ -9518,7 +9104,6 @@ L_08927B88: L_08927B94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08927BE4; } @@ -9526,12 +9111,10 @@ L_08927B94: } L_08927BA0: aot_gpr_31 = (0x08927BA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08927BA8u) goto L_08927BA8; AOT_REGCACHE_SYNC_OUT(); return; L_08927BA8: { const bool branch_taken = ctx.gpr[21] == aot_gpr_2; - // nop if (branch_taken) { goto L_08927BE4; } @@ -9541,7 +9124,6 @@ L_08927BB0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1360))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927BE4; } @@ -9576,7 +9158,6 @@ L_08927BF0: L_08927BFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08927E78; } @@ -9586,7 +9167,6 @@ L_08927C08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927C48; } @@ -9596,7 +9176,6 @@ L_08927C18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 49u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927C48; } @@ -9606,7 +9185,6 @@ L_08927C28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927C48; } @@ -9616,7 +9194,6 @@ L_08927C38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927C4C; } @@ -9632,7 +9209,6 @@ L_08927C4C: AOT_REGCACHE_SYNC_OUT(); return; L_08927C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927E78; } @@ -9652,7 +9228,6 @@ L_08927C5C: L_08927C70: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08927C8C; } @@ -9661,7 +9236,6 @@ L_08927C70: L_08927C7C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2276))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08927C8C; } @@ -9673,7 +9247,6 @@ L_08927C88: L_08927C8C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2228))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08927CE8; } @@ -9682,7 +9255,6 @@ L_08927C8C: L_08927C98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08927CE8; } @@ -9696,7 +9268,6 @@ L_08927CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08927CB0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08927CD0; } @@ -9711,7 +9282,6 @@ L_08927CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08927CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927CDC; } @@ -9736,7 +9306,6 @@ L_08927CE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927D08; } @@ -9746,7 +9315,6 @@ L_08927CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927D20; } @@ -9761,7 +9329,6 @@ L_08927D08: AOT_REGCACHE_SYNC_OUT(); return; L_08927D18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927DC4; } @@ -9771,7 +9338,6 @@ L_08927D20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927D44; } @@ -9785,7 +9351,6 @@ L_08927D30: AOT_REGCACHE_SYNC_OUT(); return; L_08927D3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927DC4; } @@ -9812,7 +9377,6 @@ L_08927D54: } L_08927D60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927DA0; } @@ -9827,7 +9391,6 @@ L_08927D68: AOT_REGCACHE_SYNC_OUT(); return; L_08927D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927DC4; } @@ -9835,7 +9398,6 @@ L_08927D78: } L_08927D80: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927DB8; } @@ -9850,7 +9412,6 @@ L_08927D88: AOT_REGCACHE_SYNC_OUT(); return; L_08927D98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927DC4; } @@ -9865,7 +9426,6 @@ L_08927DA0: AOT_REGCACHE_SYNC_OUT(); return; L_08927DB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927DC4; } @@ -9896,7 +9456,6 @@ L_08927DDC: AOT_REGCACHE_SYNC_OUT(); return; L_08927DE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927E04; } @@ -9905,7 +9464,6 @@ L_08927DE4: L_08927DEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08927E04; } @@ -9921,7 +9479,6 @@ L_08927E04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927E44; } @@ -9931,7 +9488,6 @@ L_08927E14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 49u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927E44; } @@ -9941,7 +9497,6 @@ L_08927E24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08927E44; } @@ -9951,7 +9506,6 @@ L_08927E34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(640))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08927E48; } @@ -9967,7 +9521,6 @@ L_08927E48: AOT_REGCACHE_SYNC_OUT(); return; L_08927E50: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08927E68; } @@ -9982,7 +9535,6 @@ L_08927E58: AOT_REGCACHE_SYNC_OUT(); return; L_08927E68: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08927E78; } @@ -10008,7 +9560,6 @@ L_08927E88: aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(563), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927EC8; } @@ -10017,7 +9568,6 @@ L_08927E88: L_08927EAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(563))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927EC8; } @@ -10035,7 +9585,6 @@ L_08927EC8: aot_gpr_4 = (aot_gpr_4 + static_cast(-8)); aot_gpr_5 = (aot_gpr_4 < static_cast(46) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08927EFC; } @@ -10047,14 +9596,22 @@ L_08927EDC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-12032))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08927EF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08927F08; } @@ -10083,7 +9640,6 @@ L_08927F24: AOT_REGCACHE_SYNC_OUT(); return; L_08927F2C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927F48; } @@ -10092,7 +9648,6 @@ L_08927F2C: L_08927F34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08927F48; } @@ -10107,7 +9662,6 @@ L_08927F48: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08927F6C; } @@ -10127,7 +9681,6 @@ L_08927F6C: AOT_REGCACHE_SYNC_OUT(); return; L_08927F74: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08927FE0; } @@ -10140,7 +9693,6 @@ L_08927F7C: AOT_REGCACHE_SYNC_OUT(); return; L_08927F84: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08927FE0; } @@ -10149,7 +9701,6 @@ L_08927F84: L_08927F8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08927FE0; } @@ -10164,7 +9715,6 @@ L_08927FA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08927FD4; } @@ -10173,7 +9723,6 @@ L_08927FA0: L_08927FB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08927FD4; } diff --git a/profiles/vcs/generated/generated_unit_0073.cpp b/profiles/vcs/generated/generated_unit_0073.cpp index 9f821ab..0aff0f1 100644 --- a/profiles/vcs/generated/generated_unit_0073.cpp +++ b/profiles/vcs/generated/generated_unit_0073.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0073[4092] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 5, 0, 6, 7, 0, 8, 0, 0, - 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 16, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 0, 20, 0, 0, 21, 0, 22, 0, 0, 23, 0, 24, 0, 0, 25, 0, - 0, 26, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, - 33, 0, 34, 0, 35, 0, 0, 36, 0, 0, 0, 37, 0, 38, 0, 39, 0, 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, 0, 0, 44, 0, 0, - 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 47, 0, 48, 0, 0, 0, 49, 0, 50, 0, 51, 0, 52, 0, 0, 53, - 0, 0, 0, 0, 54, 0, 55, 0, 56, 0, 0, 57, 0, 0, 0, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, 0, 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, - 0, 75, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 82, 0, 83, 0, - 0, 0, 0, 0, 0, 84, 0, 0, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, - 0, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 103, 0, 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 106, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, 0, 111, 0, 0, 0, 112, 113, 114, 0, 115, 0, 0, 0, 116, 0, 0, 0, 117, 0, 0, 118, 0, - 0, 0, 119, 0, 0, 0, 120, 121, 0, 122, 0, 0, 0, 123, 124, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 128, 0, 0, 0, 129, - 0, 0, 130, 0, 0, 0, 131, 132, 0, 133, 0, 0, 0, 134, 135, 0, 136, 0, 0, 0, 137, 138, 0, 139, 0, 0, 0, 140, 141, 0, 142, 0, - 0, 0, 143, 144, 0, 145, 0, 0, 0, 146, 147, 0, 148, 0, 0, 0, 149, 150, 0, 151, 0, 0, 0, 152, 153, 0, 154, 0, 0, 0, 155, 156, - 0, 157, 0, 0, 0, 158, 159, 0, 160, 0, 0, 0, 161, 162, 0, 163, 0, 0, 0, 164, 165, 0, 166, 0, 0, 0, 167, 168, 0, 169, 0, 170, - 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, - 178, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 181, 0, 182, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 185, 0, 0, 0, 186, - 0, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, 0, 193, 0, 0, 0, 0, 194, - 0, 0, 0, 0, 195, 0, 0, 0, 196, 0, 197, 0, 198, 0, 199, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 203, - 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 214, - 0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 219, 220, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 222, 0, - 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 226, 227, 0, 0, 228, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, 233, 234, 0, 0, 235, 0, 0, 0, 0, 236, 0, 0, - 0, 0, 237, 0, 0, 0, 238, 0, 0, 239, 0, 240, 0, 0, 241, 0, 242, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 246, 0, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 249, 0, 250, 0, 251, 252, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 254, 0, - 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 257, 0, 0, 258, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 261, 0, 262, - 0, 263, 264, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 272, - 0, 273, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 276, 0, 277, 278, 0, 0, 279, 0, 0, 0, 280, 0, 0, 281, 0, 282, 283, 0, - 0, 284, 0, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, - 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 302, - 0, 303, 0, 0, 0, 0, 304, 0, 305, 0, 306, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 310, - 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, - 318, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, - 0, 0, 0, 323, 0, 324, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 331, 0, 0, 332, - 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 339, 0, 340, 341, 0, 342, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, - 0, 346, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 349, 0, 0, 0, 350, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 355, 0, 356, 357, 0, 358, 0, 359, 0, 0, 0, - 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 0, 0, - 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 371, 0, 372, 0, - 0, 0, 373, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, - 0, 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 382, 0, 0, 0, 0, 0, - 0, 0, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 395, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 399, 0, - 0, 400, 0, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 0, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, 0, 409, 0, - 0, 410, 0, 0, 411, 0, 0, 412, 0, 413, 0, 0, 0, 0, 414, 0, 415, 0, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 0, 0, 421, - 0, 0, 422, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 428, 0, 0, 0, 429, 0, 0, 430, 0, - 0, 431, 0, 0, 432, 0, 433, 0, 0, 0, 0, 434, 0, 435, 0, 0, 436, 0, 437, 0, 0, 0, 438, 0, 439, 0, 440, 0, 441, 0, 0, 0, - 442, 0, 0, 443, 0, 0, 444, 0, 445, 0, 0, 0, 446, 0, 0, 447, 0, 0, 448, 0, 449, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 455, 0, 456, 0, 457, 0, 458, - 0, 0, 0, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 463, 0, 464, 0, 0, 0, 0, 465, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 0, - 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 472, 0, 0, 473, 0, 0, 0, 0, 0, 474, 0, 475, 0, 0, 0, 0, 476, 0, 477, 0, 0, - 0, 478, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 0, 0, 0, 486, 0, 487, 0, 0, 488, 0, - 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 494, 0, 495, - 0, 496, 0, 0, 0, 0, 497, 0, 0, 498, 0, 499, 0, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 0, - 0, 0, 504, 0, 0, 505, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, - 0, 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, - 0, 521, 0, 0, 0, 522, 0, 523, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 526, 527, 0, 528, 0, 0, 0, 529, 530, 0, 531, 0, 0, 0, - 532, 533, 0, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 537, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, - 540, 0, 0, 0, 0, 541, 0, 542, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, - 551, 0, 552, 0, 553, 0, 554, 0, 555, 556, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 564, 565, 0, 566, 567, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, - 0, 0, 0, 570, 0, 0, 0, 571, 572, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 576, 0, 577, 0, 0, 0, 578, 0, 0, 0, - 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 583, 0, 0, 584, 0, 0, 0, 585, 0, 586, 0, 0, 0, - 0, 0, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, 589, 0, 0, 0, 590, 0, 0, 0, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 594, 0, - 0, 0, 0, 0, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 599, 0, 600, 0, 0, 601, 0, 602, 0, - 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 606, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 609, - 0, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 612, 0, 0, 0, 613, 0, 614, 0, 0, 615, 0, 616, 0, 0, 617, 0, 618, 0, 0, 0, 0, - 619, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 621, 0, 0, 622, 0, 0, 0, 0, 0, 623, 0, 624, 0, 0, 625, 0, 626, 0, 627, - 0, 0, 628, 629, 0, 630, 631, 0, 632, 633, 0, 634, 635, 0, 636, 637, 0, 638, 639, 0, 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, 642, 0, - 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 645, 0, 646, 0, 0, 0, 647, 0, 0, 648, 0, 649, 0, 650, 0, 0, 0, 651, 0, 0, 652, - 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 655, 0, 0, 656, 0, 0, 657, 0, 0, 658, 0, 659, 0, 660, 0, 0, 0, 661, 0, 0, 662, 0, - 663, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 668, 0, 669, 0, 0, - 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 676, - 0, 0, 0, 0, 677, 0, 678, 0, 0, 0, 0, 0, 679, 0, 680, 0, 681, 0, 682, 0, 683, 0, 0, 0, 0, 0, 684, 0, 685, 0, 686, 0, - 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 689, 0, 690, 0, 0, 0, 691, 0, 692, 0, 693, 0, 694, 0, 695, 0, 0, 0, 0, - 0, 0, 696, 0, 0, 0, 0, 0, 697, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 0, 701, 0, 702, 0, 0, 0, 703, 0, 704, 0, 0, 0, - 0, 705, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 709, 0, 0, 0, 0, 710, 0, 0, 711, 0, 712, 0, 0, - 0, 713, 0, 714, 0, 715, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 718, 0, 0, 0, 0, 0, 719, 0, 720, 0, 721, 0, 0, 0, 0, 0, - 0, 0, 722, 0, 723, 0, 0, 0, 0, 0, 724, 0, 725, 0, 726, 0, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, - 0, 730, 0, 0, 0, 0, 0, 731, 0, 732, 0, 733, 0, 734, 0, 0, 0, 735, 0, 736, 0, 737, 0, 738, 0, 739, 0, 0, 0, 0, 0, 0, - 740, 0, 741, 0, 742, 0, 743, 0, 0, 744, 0, 0, 745, 0, 746, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 751, 0, 0, 0, 0, 0, 0, 752, 0, 753, 0, 754, 0, 0, - 0, 0, 755, 0, 756, 0, 0, 0, 0, 757, 0, 758, 0, 759, 0, 0, 0, 0, 760, 0, 761, 0, 762, 0, 0, 763, 0, 764, 0, 0, 0, 0, - 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, - 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 774, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 776, 0, 777, 778, 0, 779, 780, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 782, 0, - 783, 0, 784, 785, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 788, 0, 789, 790, 0, 791, 792, 0, 0, 0, 0, 0, - 0, 793, 0, 0, 0, 0, 794, 0, 795, 0, 796, 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 800, 0, 801, 802, - 0, 803, 804, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 806, 0, 807, 0, 808, 809, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, - 0, 0, 0, 0, 812, 0, 813, 814, 0, 815, 816, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 818, 0, 819, 0, 820, 821, 0, 822, 0, 0, - 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 824, 825, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, - 827, 828, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 830, 831, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, - 833, 834, 0, 0, 0, 0, 835, 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, 838, 0, 0, 0, 0, 0, 839, 0, 0, 840, 0, 0, 0, 0, 0, - 841, 0, 0, 842, 0, 0, 0, 0, 0, 843, 0, 0, 844, 0, 0, 0, 0, 0, 845, 0, 0, 846, 0, 0, 0, 0, 0, 847, 0, 0, 848, 0, - 0, 0, 0, 0, 849, 0, 0, 850, 0, 0, 0, 0, 0, 851, 0, 0, 852, 0, 0, 0, 0, 0, 853, 0, 0, 0, 854, 0, 0, 0, 855, 0, - 0, 0, 856, 0, 0, 857, 0, 0, 0, 0, 0, 858, 0, 0, 859, 0, 0, 0, 0, 0, 860, 0, 0, 861, 0, 0, 0, 0, 0, 862, 0, 0, - 863, 0, 0, 0, 0, 0, 864, 0, 0, 865, 0, 0, 0, 0, 0, 866, 0, 0, 867, 0, 0, 0, 0, 0, 868, 0, 0, 869, 0, 0, 0, 0, - 0, 870, 0, 0, 871, 0, 0, 0, 0, 872, 0, 873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 874, 0, 0, 0, 0, 0, 875, 0, 876, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 879, 0, 880, 0, 0, 881, 0, 0, 882, 0, 0, 883, 0, 0, 884, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 886, 0, 0, 887, 0, 0, 0, 0, 888, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 890, 0, 0, 891, 0, 892, 0, 0, 0, 893, 0, 0, 894, - 0, 895, 0, 0, 0, 896, 0, 897, 0, 0, 898, 0, 899, 0, 0, 0, 900, 0, 901, 0, 0, 902, 0, 903, 0, 0, 0, 904, 0, 905, 0, 0, - 906, 0, 907, 0, 0, 0, 908, 0, 909, 0, 910, 0, 911, 0, 912, 0, 0, 913, 0, 914, 0, 0, 915, 0, 916, 0, 917, 0, 0, 0, 918, 0, - 0, 0, 919, 0, 0, 920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 921, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 923, 0, 0, 0, 924, 0, - 0, 0, 0, 0, 0, 925, 0, 0, 0, 926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, 928, 0, 0, 0, 0, 0, 0, 929, 0, - 930, 0, 0, 0, 931, 0, 0, 0, 0, 932, 0, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, 0, - 935, 0, 0, 936, 0, 0, 937, 0, 0, 938, 0, 0, 939, 0, 0, 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 941, 0, - 0, 942, 0, 943, 0, 0, 0, 944, 0, 945, 0, 946, 0, 0, 947, 0, 948, 0, 0, 0, 949, 0, 950, 0, 0, 951, 0, 952, 0, 0, 0, 953, - 0, 954, 0, 0, 955, 0, 956, 0, 0, 0, 957, 0, 958, 0, 0, 959, 0, 960, 0, 0, 0, 961, 0, 962, 0, 0, 963, 0, 964, 0, 0, 0, - 965, 0, 966, 0, 967, 0, 0, 968, 0, 969, 0, 0, 970, 0, 971, 0, 972, 0, 0, 0, 973, 0, 0, 0, 974, 0, 0, 975, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0073[64] = { + 0x844241122D480201ull, 0x142801124A522804ull, 0x954510042254A895ull, 0x0209248128150950ull, + 0x8000020012200000ull, 0x000003205A882102ull, 0x0000101000000400ull, 0x2400400005000400ull, + 0x2483200000090884ull, 0x488B888880000800ull, 0x58B162C48A4162C4ull, 0xAC58B162C58B162Cull, + 0x8885510122094005ull, 0x8144551084520848ull, 0x440D1088A1155214ull, 0x21308400000A4D22ull, + 0x420D440148434A44ull, 0xA8814906A200A520ull, 0x0010005269135102ull, 0x0004240000028400ull, + 0x8900004240001090ull, 0x10489102A0028542ull, 0x9122056828000821ull, 0x440AD05000104220ull, + 0x15A0A00020844122ull, 0x5050001108824488ull, 0x0500221020080144ull, 0x1900A80001080AA8ull, + 0x44A1492242080400ull, 0x489122448AA94292ull, 0x0214914915452852ull, 0x2450A550AA084440ull, + 0x4A155412285048A8ull, 0x28050A42A1401041ull, 0x14122854420510A4ull, 0x4828020B162C48A2ull, + 0x21450355554920A1ull, 0x1150898812365000ull, 0x5241122014488888ull, 0x89085008529100A0ull, + 0xA94122010A528920ull, 0x915228904886DB6Cull, 0x2822008548A92488ull, 0x5415505080811414ull, + 0x145215040AA8A820ull, 0x0541442A290A0112ull, 0x02AA2A8280245414ull, 0x0021000000015255ull, + 0x0A542A142A050000ull, 0x0100000000000010ull, 0x2000000000001400ull, 0x4206D08011040810ull, + 0xD0802D4206D0802Dull, 0x2D4206D0802D4206ull, 0x010301030100C040ull, 0x4824120904824443ull, + 0x2090482444412090ull, 0x00000A1209048241ull, 0x0004924A00200682ull, 0x28A514A291481109ull, + 0x44088024454A5545ull, 0x4002021140880220ull, 0x8A514A8A40009249ull, 0x0911529514A29452ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0073[64] = { + 1u, 17u, 33u, 54u, 70u, 75u, 87u, 90u, 96u, 107u, 119u, 143u, 171u, 187u, 204u, 223u, + 237u, 255u, 273u, 288u, 294u, 303u, 318u, 333u, 346u, 360u, 373u, 383u, 396u, 410u, 431u, 451u, + 469u, 489u, 504u, 521u, 540u, 562u, 579u, 595u, 610u, 628u, 653u, 670u, 687u, 705u, 722u, 740u, + 750u, 765u, 767u, 770u, 783u, 803u, 823u, 833u, 849u, 863u, 874u, 886u, 906u, 925u, 935u, 954u, }; void recomp_unit_0073_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0073_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08928000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0073[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0073[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0073[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08928000; @@ -1162,7 +1069,17 @@ L_08928000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08928024: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1184,7 +1101,6 @@ L_0892804C: AOT_REGCACHE_SYNC_OUT(); return; L_08928058: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08928068; } @@ -1203,7 +1119,6 @@ L_08928068: goto L_0892806C; L_0892806C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08928134; } @@ -1213,7 +1128,6 @@ L_08928074: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); aot_gpr_5 = (0u | 197u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08928134; } @@ -1222,7 +1136,6 @@ L_08928074: L_08928084: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08928134; } @@ -1232,7 +1145,6 @@ L_08928090: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08928134; } @@ -1253,7 +1165,6 @@ L_089280A0: L_089280B8: aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089280E8; } @@ -1304,7 +1215,6 @@ L_08928108: AOT_REGCACHE_SYNC_OUT(); return; L_0892812C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089283CC; } @@ -1314,7 +1224,6 @@ L_08928134: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08928164; } @@ -1328,7 +1237,6 @@ L_08928144: AOT_REGCACHE_SYNC_OUT(); return; L_08928150: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08928164; } @@ -1359,7 +1267,6 @@ L_08928178: L_08928184: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892821C; } @@ -1383,7 +1290,6 @@ L_089281A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0892821C; } @@ -1391,7 +1297,6 @@ L_089281A0: } L_089281CC: aot_gpr_31 = (0x089281D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 78u, 0x08B00578u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089281D4u) goto L_089281D4; AOT_REGCACHE_SYNC_OUT(); return; L_089281D4: @@ -1399,7 +1304,6 @@ L_089281D4: aot_gpr_5 = (0u | 5u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(680))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_089281F0; } @@ -1413,7 +1317,6 @@ L_089281F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892821C; } @@ -1426,7 +1329,6 @@ L_08928200: AOT_REGCACHE_SYNC_OUT(); return; L_08928208: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892821C; } @@ -1450,7 +1352,6 @@ L_0892821C: } L_0892822C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892823C; } @@ -1474,7 +1375,6 @@ L_08928248: AOT_REGCACHE_SYNC_OUT(); return; L_08928250: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08928264; } @@ -1490,7 +1390,6 @@ L_08928264: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089282E0; } @@ -1529,7 +1428,6 @@ L_089282B0: AOT_REGCACHE_SYNC_OUT(); return; L_089282C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089282D8; } @@ -1544,7 +1442,6 @@ L_089282C8: AOT_REGCACHE_SYNC_OUT(); return; L_089282D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089283CC; } @@ -1560,7 +1457,6 @@ L_089282E0: } L_089282E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089282FC; } @@ -1581,7 +1477,6 @@ L_089282FC: AOT_REGCACHE_SYNC_OUT(); return; L_08928310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892836C; } @@ -1589,7 +1484,6 @@ L_08928310: } L_08928318: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892832C; } @@ -1615,7 +1509,6 @@ L_08928340: AOT_REGCACHE_SYNC_OUT(); return; L_08928348: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892836C; } @@ -1649,7 +1542,6 @@ L_08928380: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(464), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089283A8; } @@ -1692,7 +1584,17 @@ L_089283CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089283E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); @@ -1808,7 +1710,6 @@ L_08928534: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -1818,9 +1719,7 @@ L_08928534: } L_0892854C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08928564; } @@ -1836,7 +1735,6 @@ L_0892855C: } L_08928564: aot_gpr_31 = (0x0892856Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892856Cu) goto L_0892856C; AOT_REGCACHE_SYNC_OUT(); return; L_0892856C: @@ -1898,9 +1796,7 @@ L_089285A4: aot_gpr_4 = (aot_gpr_5 | 52429u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08928690; } @@ -1992,7 +1888,6 @@ L_08928628: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_13 = aot_fpr_12 - aot_fpr_13; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089287B8; } @@ -2004,9 +1899,7 @@ L_08928690: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08928768; } @@ -2100,9 +1993,7 @@ L_089286B0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fpr[15] = aot_fpr_14 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08928760; } @@ -2126,7 +2017,6 @@ L_08928728: goto L_08928760; L_08928760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089287B8; } @@ -2204,7 +2094,6 @@ L_089287B8: aot_fpr_14 = aot_fpr_14 - ctx.fpr[15]; aot_fpr_20 = aot_fpr_14 / aot_fpr_12; aot_gpr_31 = (0x089287E8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089287E8u) goto L_089287E8; AOT_REGCACHE_SYNC_OUT(); return; L_089287E8: @@ -2330,7 +2219,6 @@ L_0892884C: L_089288B4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_089288DC; } @@ -2383,7 +2271,17 @@ L_089288F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892892C: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); @@ -2448,7 +2346,6 @@ L_089289C0: goto L_089289C4; L_089289C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08928A6C; } @@ -2471,7 +2368,6 @@ L_089289DC: L_089289EC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928A1C; } @@ -2496,7 +2392,6 @@ L_08928A18: goto L_08928A1C; L_08928A1C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928A38; } @@ -2514,7 +2409,6 @@ L_08928A34: goto L_08928A38; L_08928A38: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928A58; } @@ -2540,7 +2434,6 @@ L_08928A58: AOT_REGCACHE_SYNC_OUT(); return; L_08928A64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929298; } @@ -2556,7 +2449,6 @@ L_08928A6C: L_08928A7C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928A9C; } @@ -2574,7 +2466,6 @@ L_08928A98: goto L_08928A9C; L_08928A9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928AB8; } @@ -2592,7 +2483,6 @@ L_08928AB4: goto L_08928AB8; L_08928AB8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928AD4; } @@ -2610,7 +2500,6 @@ L_08928AD0: goto L_08928AD4; L_08928AD4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928AF0; } @@ -2628,7 +2517,6 @@ L_08928AEC: goto L_08928AF0; L_08928AF0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928B0C; } @@ -2646,7 +2534,6 @@ L_08928B08: goto L_08928B0C; L_08928B0C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928B28; } @@ -2664,7 +2551,6 @@ L_08928B24: goto L_08928B28; L_08928B28: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928B44; } @@ -2682,7 +2568,6 @@ L_08928B40: goto L_08928B44; L_08928B44: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928B60; } @@ -2700,7 +2585,6 @@ L_08928B5C: goto L_08928B60; L_08928B60: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928B7C; } @@ -2718,7 +2602,6 @@ L_08928B78: goto L_08928B7C; L_08928B7C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928B98; } @@ -2736,7 +2619,6 @@ L_08928B94: goto L_08928B98; L_08928B98: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928BB4; } @@ -2754,7 +2636,6 @@ L_08928BB0: goto L_08928BB4; L_08928BB4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928BD0; } @@ -2772,7 +2653,6 @@ L_08928BCC: goto L_08928BD0; L_08928BD0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08928BEC; } @@ -2790,7 +2670,6 @@ L_08928BE8: goto L_08928BEC; L_08928BEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08928BFC; } @@ -2809,7 +2688,6 @@ L_08928BFC: goto L_08928C00; L_08928C00: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08928C40; } @@ -2835,7 +2713,6 @@ L_08928C08: } L_08928C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08928C74; } @@ -2879,7 +2756,6 @@ L_08928C80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08928D44; } @@ -2938,7 +2814,6 @@ L_08928CDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08928D18; } @@ -2948,7 +2823,6 @@ L_08928CEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08928D18; } @@ -2958,7 +2832,6 @@ L_08928CFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08928D18; } @@ -2974,7 +2847,6 @@ L_08928D18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08928E50; } @@ -3000,7 +2872,6 @@ L_08928D44: AOT_REGCACHE_SYNC_OUT(); return; L_08928D50: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08928DC8; } @@ -3010,7 +2881,6 @@ L_08928D58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08928D7C; } @@ -3021,7 +2891,6 @@ L_08928D68: aot_gpr_5 = (0u | 9u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08928D90; } @@ -3043,7 +2912,6 @@ L_08928D7C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08928E50; } @@ -3094,7 +2962,6 @@ L_08928DB8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08928E50; } @@ -3109,7 +2976,6 @@ L_08928DC8: AOT_REGCACHE_SYNC_OUT(); return; L_08928DD8: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08928DFC; } @@ -3147,7 +3013,6 @@ L_08928DFC: AOT_REGCACHE_SYNC_OUT(); return; L_08928E08: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08928E24; } @@ -3169,7 +3034,6 @@ L_08928E10: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08928E50; } @@ -3223,7 +3087,6 @@ L_08928E50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08928E74; } @@ -3234,7 +3097,6 @@ L_08928E60: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08928E8C; } @@ -3256,7 +3118,6 @@ L_08928E8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08928F4C; } @@ -3338,7 +3199,6 @@ L_08928F28: L_08928F2C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08928F4C; } @@ -3347,7 +3207,6 @@ L_08928F2C: L_08928F38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(352))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08928F4C; } @@ -3444,7 +3303,6 @@ L_08928FBC: aot_gpr_5 = (0u | 267u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08928FF4; } @@ -3474,7 +3332,6 @@ L_08928FF4: aot_gpr_5 = (0u | 176u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929058; } @@ -3484,7 +3341,6 @@ L_08929008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929058; } @@ -3512,7 +3368,6 @@ L_0892902C: AOT_REGCACHE_SYNC_OUT(); return; L_08929038: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08929058; } @@ -3533,7 +3388,6 @@ L_08929058: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929204; } @@ -3547,7 +3401,6 @@ L_0892906C: AOT_REGCACHE_SYNC_OUT(); return; L_08929078: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08929128; } @@ -3561,7 +3414,6 @@ L_08929080: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_gpr_4 = (aot_gpr_5 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3571,9 +3423,7 @@ L_08929080: } L_089290A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089290C0; } @@ -3589,7 +3439,6 @@ L_089290B8: } L_089290C0: aot_gpr_31 = (0x089290C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089290C8u) goto L_089290C8; AOT_REGCACHE_SYNC_OUT(); return; L_089290C8: @@ -3630,7 +3479,6 @@ L_08929114: AOT_REGCACHE_SYNC_OUT(); return; L_08929120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929244; } @@ -3644,7 +3492,6 @@ L_08929128: AOT_REGCACHE_SYNC_OUT(); return; L_08929134: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089291C0; } @@ -3658,7 +3505,6 @@ L_0892913C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_gpr_4 = (aot_gpr_5 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3668,9 +3514,7 @@ L_0892913C: } L_08929164: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892917C; } @@ -3686,7 +3530,6 @@ L_08929174: } L_0892917C: aot_gpr_31 = (0x08929184u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929184u) goto L_08929184; AOT_REGCACHE_SYNC_OUT(); return; L_08929184: @@ -3715,7 +3558,6 @@ L_089291AC: AOT_REGCACHE_SYNC_OUT(); return; L_089291B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929244; } @@ -3726,7 +3568,6 @@ L_089291C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -3736,9 +3577,7 @@ L_089291C0: } L_089291DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089291FC; } @@ -3746,7 +3585,6 @@ L_089291DC: } L_089291EC: aot_gpr_31 = (0x089291F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089291F4u) goto L_089291F4; AOT_REGCACHE_SYNC_OUT(); return; L_089291F4: @@ -3770,7 +3608,6 @@ L_08929204: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -3780,9 +3617,7 @@ L_08929204: } L_08929220: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08929240; } @@ -3790,7 +3625,6 @@ L_08929220: } L_08929230: aot_gpr_31 = (0x08929238u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929238u) goto L_08929238; AOT_REGCACHE_SYNC_OUT(); return; L_08929238: @@ -3836,7 +3670,6 @@ L_08929274: L_08929278: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929298; } @@ -3845,7 +3678,6 @@ L_08929278: L_08929284: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929298; } @@ -3877,7 +3709,17 @@ L_08929298: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089292D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-416)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -3901,7 +3743,6 @@ L_08929328: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929BEC; } @@ -3909,7 +3750,6 @@ L_08929328: } L_0892933C: aot_gpr_31 = (0x08929344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929344u) goto L_08929344; AOT_REGCACHE_SYNC_OUT(); return; L_08929344: @@ -4079,7 +3919,6 @@ L_08929504: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08929A18; } @@ -4087,7 +3926,6 @@ L_08929504: } L_08929518: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08929A18; } @@ -4102,7 +3940,6 @@ L_08929528: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(340))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08929A08; } @@ -4110,7 +3947,6 @@ L_08929528: } L_0892953C: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08929A08; } @@ -4132,7 +3968,6 @@ L_08929544: goto L_08929574; L_08929574: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08929694; } @@ -4140,7 +3975,6 @@ L_08929574: } L_0892957C: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08929694; } @@ -4168,7 +4002,6 @@ L_089295A0: L_089295B0: ctx.gpr[18] = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(17))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892968C; } @@ -4178,7 +4011,6 @@ L_089295BC: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892968C; } @@ -4209,7 +4041,6 @@ L_089295F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(20))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929674; } @@ -4220,7 +4051,6 @@ L_08929600: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(37))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08929674; } @@ -4276,7 +4106,6 @@ L_0892962C: aot_gpr_4 = (17024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(364))); if (branch_taken) { @@ -4298,7 +4127,6 @@ L_08929674: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089295CC; } @@ -4306,7 +4134,6 @@ L_08929674: } L_0892968C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929574; } @@ -4317,7 +4144,6 @@ L_08929694: goto L_08929698; L_08929698: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089297B8; } @@ -4325,7 +4151,6 @@ L_08929698: } L_089296A0: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_089297B8; } @@ -4353,7 +4178,6 @@ L_089296C4: L_089296D4: ctx.gpr[18] = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(17))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089297B0; } @@ -4363,7 +4187,6 @@ L_089296E0: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089297B0; } @@ -4394,7 +4217,6 @@ L_08929714: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(20))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929798; } @@ -4405,7 +4227,6 @@ L_08929724: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(37))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08929798; } @@ -4461,7 +4282,6 @@ L_08929750: aot_gpr_4 = (17024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(364))); if (branch_taken) { @@ -4483,7 +4303,6 @@ L_08929798: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089296F0; } @@ -4491,7 +4310,6 @@ L_08929798: } L_089297B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929698; } @@ -4502,7 +4320,6 @@ L_089297B8: goto L_089297BC; L_089297BC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089298DC; } @@ -4510,7 +4327,6 @@ L_089297BC: } L_089297C4: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_089298DC; } @@ -4538,7 +4354,6 @@ L_089297E8: L_089297F8: ctx.gpr[18] = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(17))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089298D4; } @@ -4548,7 +4363,6 @@ L_08929804: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089298D4; } @@ -4579,7 +4393,6 @@ L_08929838: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(20))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089298BC; } @@ -4590,7 +4403,6 @@ L_08929848: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(37))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089298BC; } @@ -4646,7 +4458,6 @@ L_08929874: aot_gpr_4 = (17024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(364))); if (branch_taken) { @@ -4668,7 +4479,6 @@ L_089298BC: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08929814; } @@ -4676,7 +4486,6 @@ L_089298BC: } L_089298D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089297BC; } @@ -4687,7 +4496,6 @@ L_089298DC: goto L_089298E0; L_089298E0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089299F8; } @@ -4695,7 +4503,6 @@ L_089298E0: } L_089298E8: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_089299F8; } @@ -4723,7 +4530,6 @@ L_0892990C: L_0892991C: ctx.gpr[18] = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(17))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089299F0; } @@ -4733,7 +4539,6 @@ L_08929928: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089299F0; } @@ -4764,7 +4569,6 @@ L_0892995C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(20))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089299D8; } @@ -4829,9 +4633,7 @@ L_08929990: aot_gpr_4 = (17024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089299D8; } @@ -4851,7 +4653,6 @@ L_089299D8: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08929938; } @@ -4859,7 +4660,6 @@ L_089299D8: } L_089299F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089298E0; } @@ -4887,7 +4687,6 @@ L_08929A08: } L_08929A18: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08929BEC; } @@ -4954,7 +4753,6 @@ L_08929A90: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929BBC; } @@ -4986,7 +4784,6 @@ L_08929AB4: } L_08929AE0: { const bool branch_taken = static_cast(ctx.gpr[21]) < 0; - // nop if (branch_taken) { goto L_08929BB4; } @@ -5006,7 +4803,6 @@ L_08929AE8: AOT_REGCACHE_SYNC_OUT(); return; L_08929B0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929BB4; } @@ -5022,7 +4818,6 @@ L_08929B14: } L_08929B1C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08929BB4; } @@ -5030,7 +4825,6 @@ L_08929B1C: } L_08929B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929BB4; } @@ -5079,7 +4873,6 @@ L_08929B60: AOT_REGCACHE_SYNC_OUT(); return; L_08929BAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929BB4; } @@ -5135,7 +4928,17 @@ L_08929BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08929C28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5145,7 +4948,6 @@ L_08929C28: aot_gpr_6 = (aot_gpr_5 < static_cast(15) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08929ED0; } @@ -5157,17 +4959,25 @@ L_08929C4C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-11848))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08929C64: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2240))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5176,7 +4986,6 @@ L_08929C64: L_08929C78: aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929CDC; } @@ -5192,7 +5001,6 @@ L_08929C84: L_08929C94: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929CAC; } @@ -5206,7 +5014,6 @@ L_08929CA0: L_08929CAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5214,7 +5021,6 @@ L_08929CAC: } L_08929CB8: aot_gpr_31 = (0x08929CC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929CC0u) goto L_08929CC0; AOT_REGCACHE_SYNC_OUT(); return; L_08929CC0: @@ -5227,7 +5033,6 @@ L_08929CC0: AOT_REGCACHE_SYNC_OUT(); return; L_08929CD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5236,7 +5041,6 @@ L_08929CD4: L_08929CDC: aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929D40; } @@ -5252,7 +5056,6 @@ L_08929CE8: L_08929CF8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929D10; } @@ -5266,7 +5069,6 @@ L_08929D04: L_08929D10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5274,7 +5076,6 @@ L_08929D10: } L_08929D1C: aot_gpr_31 = (0x08929D24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929D24u) goto L_08929D24; AOT_REGCACHE_SYNC_OUT(); return; L_08929D24: @@ -5287,7 +5088,6 @@ L_08929D24: AOT_REGCACHE_SYNC_OUT(); return; L_08929D38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5320,7 +5120,6 @@ L_08929D54: } L_08929D5C: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5328,7 +5127,6 @@ L_08929D5C: } L_08929D64: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929D98; } @@ -5344,7 +5142,6 @@ L_08929D6C: L_08929D7C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E04; } @@ -5363,7 +5160,6 @@ L_08929D88: L_08929D98: aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929DD0; } @@ -5379,7 +5175,6 @@ L_08929DA4: L_08929DB4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E04; } @@ -5398,7 +5193,6 @@ L_08929DC0: L_08929DD0: aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08929E04; } @@ -5414,7 +5208,6 @@ L_08929DDC: L_08929DEC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E04; } @@ -5428,7 +5221,6 @@ L_08929DF8: L_08929E04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E2C; } @@ -5436,7 +5228,6 @@ L_08929E04: } L_08929E10: aot_gpr_31 = (0x08929E18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929E18u) goto L_08929E18; AOT_REGCACHE_SYNC_OUT(); return; L_08929E18: @@ -5449,7 +5240,6 @@ L_08929E18: AOT_REGCACHE_SYNC_OUT(); return; L_08929E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929ED0; } @@ -5463,7 +5253,6 @@ L_08929E34: AOT_REGCACHE_SYNC_OUT(); return; L_08929E40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929ED0; } @@ -5478,7 +5267,6 @@ L_08929E48: AOT_REGCACHE_SYNC_OUT(); return; L_08929E58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08929E68; } @@ -5491,7 +5279,6 @@ L_08929E60: AOT_REGCACHE_SYNC_OUT(); return; L_08929E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929ED0; } @@ -5507,7 +5294,6 @@ L_08929E70: L_08929E80: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929E98; } @@ -5520,7 +5306,6 @@ L_08929E8C: goto L_08929E98; L_08929E98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929ED0; } @@ -5536,7 +5321,6 @@ L_08929EA0: L_08929EB0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929EC8; } @@ -5549,7 +5333,6 @@ L_08929EBC: goto L_08929EC8; L_08929EC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08929ED0; } @@ -5564,7 +5347,17 @@ L_08929ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08929EE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -5586,7 +5379,6 @@ L_08929F18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08929F64; } @@ -5596,7 +5388,6 @@ L_08929F28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08929F64; } @@ -5607,7 +5398,6 @@ L_08929F38: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(33) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5619,11 +5409,20 @@ L_08929F4C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-11784))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08929F64: aot_gpr_31 = (0x08929F6Cu); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -5635,7 +5434,6 @@ L_08929F6C: AOT_REGCACHE_SYNC_OUT(); return; L_08929F74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0EC; } @@ -5646,7 +5444,6 @@ L_08929F7C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08929FB4; } @@ -5654,12 +5451,10 @@ L_08929F7C: } L_08929F90: aot_gpr_31 = (0x08929F98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0130_entry, 130u, 555u, 0x08A0F33Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929F98u) goto L_08929F98; AOT_REGCACHE_SYNC_OUT(); return; L_08929F98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08929FB4; } @@ -5677,7 +5472,6 @@ L_08929FA8: AOT_REGCACHE_SYNC_OUT(); return; L_08929FB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5688,7 +5482,6 @@ L_08929FBC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A050; } @@ -5696,14 +5489,12 @@ L_08929FBC: } L_08929FD0: aot_gpr_31 = (0x08929FD8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08929FD8u) goto L_08929FD8; AOT_REGCACHE_SYNC_OUT(); return; L_08929FD8: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892A014; } @@ -5712,7 +5503,6 @@ L_08929FD8: L_08929FE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A014; } @@ -5729,7 +5519,6 @@ L_08929FF4: AOT_REGCACHE_SYNC_OUT(); return; L_0892A00C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A01C; } @@ -5749,7 +5538,6 @@ L_0892A01C: L_0892A02C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A050; } @@ -5765,7 +5553,6 @@ L_0892A038: goto L_0892A050; L_0892A050: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5776,7 +5563,6 @@ L_0892A058: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A0A8; } @@ -5796,7 +5582,6 @@ L_0892A074: L_0892A084: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A0A8; } @@ -5812,7 +5597,6 @@ L_0892A090: goto L_0892A0A8; L_0892A0A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5820,7 +5604,6 @@ L_0892A0A8: } L_0892A0B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5828,7 +5611,6 @@ L_0892A0B0: } L_0892A0B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5836,7 +5618,6 @@ L_0892A0B8: } L_0892A0C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5844,7 +5625,6 @@ L_0892A0C0: } L_0892A0C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5855,7 +5635,6 @@ L_0892A0D0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A100; } @@ -5873,7 +5652,6 @@ L_0892A0EC: AOT_REGCACHE_SYNC_OUT(); return; L_0892A0F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A158; } @@ -5885,7 +5663,6 @@ L_0892A100: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(2500) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A158; } @@ -5897,7 +5674,6 @@ L_0892A118: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(2001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892A158; } @@ -5918,7 +5694,6 @@ L_0892A130: AOT_REGCACHE_SYNC_OUT(); return; L_0892A158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5929,7 +5704,6 @@ L_0892A160: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A184; } @@ -5941,7 +5715,6 @@ L_0892A174: goto L_08929C28; L_0892A17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A1A4; } @@ -5952,7 +5725,6 @@ L_0892A184: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A1A4; } @@ -5965,7 +5737,6 @@ L_0892A198: goto L_0892A1A4; L_0892A1A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -5976,7 +5747,6 @@ L_0892A1AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A1F4; } @@ -6011,7 +5781,6 @@ L_0892A1F4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A214; } @@ -6024,7 +5793,6 @@ L_0892A208: goto L_0892A214; L_0892A214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -6035,7 +5803,6 @@ L_0892A21C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A290; } @@ -6050,7 +5817,6 @@ L_0892A230: AOT_REGCACHE_SYNC_OUT(); return; L_0892A240: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892A288; } @@ -6090,7 +5856,6 @@ L_0892A288: goto L_08929C28; L_0892A290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -6101,7 +5866,6 @@ L_0892A298: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A2E8; } @@ -6121,7 +5885,6 @@ L_0892A2B4: L_0892A2C4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A2E8; } @@ -6137,7 +5900,6 @@ L_0892A2D0: goto L_0892A2E8; L_0892A2E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -6148,7 +5910,6 @@ L_0892A2F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A530; } @@ -6179,7 +5940,6 @@ L_0892A31C: L_0892A32C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0892A34C; } @@ -6197,7 +5957,6 @@ L_0892A348: goto L_0892A34C; L_0892A34C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0892A368; } @@ -6215,7 +5974,6 @@ L_0892A364: goto L_0892A368; L_0892A368: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0892A384; } @@ -6233,7 +5991,6 @@ L_0892A380: goto L_0892A384; L_0892A384: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892A3F8; } @@ -6245,7 +6002,6 @@ L_0892A38C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892A3D4; } @@ -6266,7 +6022,6 @@ L_0892A3A4: AOT_REGCACHE_SYNC_OUT(); return; L_0892A3CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A3EC; } @@ -6283,7 +6038,6 @@ L_0892A3D4: L_0892A3EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0892A41C; } @@ -6299,7 +6053,6 @@ L_0892A400: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0892A460; } @@ -6349,7 +6102,6 @@ L_0892A458: } L_0892A460: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0892A4A4; } @@ -6357,7 +6109,6 @@ L_0892A460: } L_0892A468: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0892A490; } @@ -6381,7 +6132,6 @@ L_0892A478: } L_0892A480: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892A4A0; } @@ -6389,7 +6139,6 @@ L_0892A480: } L_0892A488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A4A4; } @@ -6441,7 +6190,6 @@ L_0892A4C8: AOT_REGCACHE_SYNC_OUT(); return; L_0892A4D8: aot_gpr_31 = (0x0892A4E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892A4E0u) goto L_0892A4E0; AOT_REGCACHE_SYNC_OUT(); return; L_0892A4E0: @@ -6471,7 +6219,6 @@ L_0892A4F4: goto L_0892A530; L_0892A530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -6491,7 +6238,6 @@ L_0892A544: goto L_0892A548; L_0892A548: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0892A554; } @@ -6531,7 +6277,6 @@ L_0892A58C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892A5D8; } @@ -6543,7 +6288,6 @@ L_0892A59C: L_0892A5A0: aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0892A5D8; } @@ -6553,7 +6297,6 @@ L_0892A5AC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0892A5D8; } @@ -6564,7 +6307,6 @@ L_0892A5BC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0892A5D8; } @@ -6572,7 +6314,6 @@ L_0892A5BC: } L_0892A5D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892A8E0; } @@ -6586,7 +6327,6 @@ L_0892A5E0: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2240), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6599,7 +6339,6 @@ L_0892A5F0: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6609,7 +6348,6 @@ L_0892A60C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[18] = (0u | 9u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6619,7 +6357,6 @@ L_0892A61C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6639,7 +6376,6 @@ L_0892A63C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6660,7 +6396,6 @@ L_0892A658: AOT_REGCACHE_SYNC_OUT(); return; L_0892A668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6675,7 +6410,6 @@ L_0892A670: aot_gpr_4 = (aot_gpr_6 - aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A6F8; } @@ -6691,7 +6425,6 @@ L_0892A694: L_0892A6A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0892A6C0; } @@ -6701,7 +6434,6 @@ L_0892A6B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892A6D8; } @@ -6730,7 +6462,6 @@ L_0892A6E4: AOT_REGCACHE_SYNC_OUT(); return; L_0892A6F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6748,7 +6479,6 @@ L_0892A6F8: AOT_REGCACHE_SYNC_OUT(); return; L_0892A714: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892A7B8; } @@ -6763,7 +6493,6 @@ L_0892A71C: aot_gpr_5 = (aot_gpr_6 << (aot_gpr_5 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892A764; } @@ -6784,7 +6513,6 @@ L_0892A750: AOT_REGCACHE_SYNC_OUT(); return; L_0892A75C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6798,7 +6526,6 @@ L_0892A764: AOT_REGCACHE_SYNC_OUT(); return; L_0892A770: aot_gpr_31 = (0x0892A778u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892A778u) goto L_0892A778; AOT_REGCACHE_SYNC_OUT(); return; L_0892A778: @@ -6823,7 +6550,6 @@ L_0892A78C: AOT_REGCACHE_SYNC_OUT(); return; L_0892A7B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6834,7 +6560,6 @@ L_0892A7B8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A858; } @@ -6861,7 +6586,6 @@ L_0892A7EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892A814; } @@ -6879,7 +6603,6 @@ L_0892A7FC: L_0892A814: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0892A82C; } @@ -6895,7 +6618,6 @@ L_0892A82C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6914,7 +6636,6 @@ L_0892A844: AOT_REGCACHE_SYNC_OUT(); return; L_0892A850: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A8A4; } @@ -6928,7 +6649,6 @@ L_0892A858: AOT_REGCACHE_SYNC_OUT(); return; L_0892A864: aot_gpr_31 = (0x0892A86Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892A86Cu) goto L_0892A86C; AOT_REGCACHE_SYNC_OUT(); return; L_0892A86C: @@ -6961,7 +6681,6 @@ L_0892A8A4: L_0892A8B4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0892A8D8; } @@ -6977,7 +6696,6 @@ L_0892A8C0: goto L_0892A8D8; L_0892A8D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -6986,7 +6704,6 @@ L_0892A8D8: L_0892A8E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A8F4; } @@ -6999,7 +6716,6 @@ L_0892A8EC: AOT_REGCACHE_SYNC_OUT(); return; L_0892A8F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7019,7 +6735,6 @@ L_0892A908: goto L_0892A90C; L_0892A90C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0892A918; } @@ -7030,7 +6745,6 @@ L_0892A914: goto L_0892A918; L_0892A918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A924; } @@ -7041,7 +6755,6 @@ L_0892A920: goto L_0892A924; L_0892A924: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0892A930; } @@ -7052,7 +6765,6 @@ L_0892A92C: goto L_0892A930; L_0892A930: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892A93C; } @@ -7063,7 +6775,6 @@ L_0892A938: goto L_0892A93C; L_0892A93C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0892A948; } @@ -7077,7 +6788,6 @@ L_0892A948: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A9E0; } @@ -7093,7 +6803,6 @@ L_0892A95C: L_0892A96C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0892A990; } @@ -7110,7 +6819,6 @@ L_0892A978: L_0892A990: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892A9D0; } @@ -7120,7 +6828,6 @@ L_0892A99C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 54u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892A9D0; } @@ -7128,7 +6835,6 @@ L_0892A99C: } L_0892A9AC: aot_gpr_31 = (0x0892A9B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892A9B4u) goto L_0892A9B4; AOT_REGCACHE_SYNC_OUT(); return; L_0892A9B4: @@ -7149,7 +6855,6 @@ L_0892A9D0: goto L_08929C28; L_0892A9D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892AA54; } @@ -7159,7 +6864,6 @@ L_0892A9E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892AA54; } @@ -7168,7 +6872,6 @@ L_0892A9E0: L_0892A9F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AA54; } @@ -7178,7 +6881,6 @@ L_0892A9FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892AA1C; } @@ -7188,7 +6890,6 @@ L_0892AA0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892AA54; } @@ -7197,7 +6898,6 @@ L_0892AA0C: L_0892AA1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AA34; } @@ -7231,7 +6931,6 @@ L_0892AA4C: AOT_REGCACHE_SYNC_OUT(); return; L_0892AA54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7247,7 +6946,6 @@ L_0892AA5C: L_0892AA6C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892AA88; } @@ -7259,7 +6957,6 @@ L_0892AA78: goto L_08929C28; L_0892AA80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892AAEC; } @@ -7270,7 +6967,6 @@ L_0892AA88: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892AAEC; } @@ -7306,7 +7002,6 @@ L_0892AAD4: AOT_REGCACHE_SYNC_OUT(); return; L_0892AAEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7317,7 +7012,6 @@ L_0892AAF4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AB28; } @@ -7338,7 +7032,6 @@ L_0892AB10: AOT_REGCACHE_SYNC_OUT(); return; L_0892AB28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7379,7 +7072,6 @@ L_0892AB7C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892ABB8; } @@ -7400,7 +7092,6 @@ L_0892AB98: AOT_REGCACHE_SYNC_OUT(); return; L_0892ABB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892ACA8; } @@ -7413,7 +7104,6 @@ L_0892ABB8: AOT_REGCACHE_SYNC_OUT(); return; L_0892ABC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892AC34; } @@ -7430,7 +7120,6 @@ L_0892ABD0: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892AC34; } @@ -7466,7 +7155,6 @@ L_0892AC14: AOT_REGCACHE_SYNC_OUT(); return; L_0892AC2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7497,7 +7185,6 @@ L_0892AC4C: } L_0892AC54: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892ACA8; } @@ -7533,7 +7220,6 @@ L_0892AC88: AOT_REGCACHE_SYNC_OUT(); return; L_0892ACA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892ACA8; } @@ -7541,7 +7227,6 @@ L_0892ACA0: } L_0892ACA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7552,7 +7237,6 @@ L_0892ACB0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AD44; } @@ -7561,7 +7245,6 @@ L_0892ACB0: L_0892ACC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892ACE8; } @@ -7569,7 +7252,6 @@ L_0892ACC4: } L_0892ACD0: aot_gpr_31 = (0x0892ACD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892ACD8u) goto L_0892ACD8; AOT_REGCACHE_SYNC_OUT(); return; L_0892ACD8: @@ -7588,7 +7270,6 @@ L_0892ACF0: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AD44; } @@ -7597,7 +7278,6 @@ L_0892ACF0: L_0892AD04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1372))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AD44; } @@ -7624,7 +7304,6 @@ L_0892AD20: AOT_REGCACHE_SYNC_OUT(); return; L_0892AD44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7635,7 +7314,6 @@ L_0892AD4C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AD8C; } @@ -7644,7 +7322,6 @@ L_0892AD4C: L_0892AD60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892AD84; } @@ -7652,7 +7329,6 @@ L_0892AD60: } L_0892AD6C: aot_gpr_31 = (0x0892AD74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892AD74u) goto L_0892AD74; AOT_REGCACHE_SYNC_OUT(); return; L_0892AD74: @@ -7668,7 +7344,6 @@ L_0892AD84: goto L_08929C28; L_0892AD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -7679,7 +7354,6 @@ L_0892AD94: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892ADE8; } @@ -7689,7 +7363,6 @@ L_0892ADA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892ADE8; } @@ -7715,7 +7388,6 @@ L_0892ADD8: goto L_08929C28; L_0892ADE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B06C; } @@ -7727,9 +7399,7 @@ L_0892ADE8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892AE38; } @@ -7755,7 +7425,6 @@ L_0892AE28: goto L_08929C28; L_0892AE30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B06C; } @@ -7785,9 +7454,7 @@ L_0892AE54: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892AEAC; } @@ -7813,7 +7480,6 @@ L_0892AE9C: goto L_08929C28; L_0892AEA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B06C; } @@ -7844,7 +7510,6 @@ L_0892AEC4: } L_0892AECC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892AF10; } @@ -7876,7 +7541,6 @@ L_0892AF00: goto L_08929C28; L_0892AF08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892AF10; } @@ -7884,13 +7548,11 @@ L_0892AF08: } L_0892AF10: aot_gpr_31 = (0x0892AF18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892AF18u) goto L_0892AF18; AOT_REGCACHE_SYNC_OUT(); return; L_0892AF18: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0892B06C; } @@ -7899,7 +7561,6 @@ L_0892AF18: L_0892AF24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B06C; } @@ -7912,7 +7573,6 @@ L_0892AF30: AOT_REGCACHE_SYNC_OUT(); return; L_0892AF38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892B06C; } @@ -8002,7 +7662,6 @@ L_0892AF40: aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (16640u << 16u); if (branch_taken) { @@ -8013,9 +7672,7 @@ L_0892AF40: L_0892AFC0: aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B06C; } @@ -8103,9 +7760,7 @@ L_0892AFD4: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B06C; } @@ -8132,7 +7787,6 @@ L_0892B064: goto L_08929C28; L_0892B06C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -8148,7 +7802,6 @@ L_0892B074: AOT_REGCACHE_SYNC_OUT(); return; L_0892B088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -8159,7 +7812,6 @@ L_0892B090: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B0AC; } @@ -8171,7 +7823,6 @@ L_0892B0A4: goto L_08929C28; L_0892B0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -8182,7 +7833,6 @@ L_0892B0B4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B0D0; } @@ -8194,7 +7844,6 @@ L_0892B0C8: goto L_08929C28; L_0892B0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892B0D8; } @@ -8203,7 +7852,6 @@ L_0892B0D0: L_0892B0D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892B0EC; } @@ -8230,7 +7878,17 @@ L_0892B0EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892B110: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8366,7 +8024,6 @@ L_0892B1E0: AOT_REGCACHE_SYNC_OUT(); return; L_0892B228: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892B9A4; } @@ -8534,7 +8191,6 @@ L_0892B370: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(116))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[22])) && aot_fpr_20 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; if (branch_taken) { @@ -8545,7 +8201,6 @@ L_0892B370: L_0892B39C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892B3BC; @@ -8575,7 +8230,6 @@ L_0892B3C8: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -8586,9 +8240,7 @@ L_0892B3C8: L_0892B3E4: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B400; } @@ -8604,7 +8256,6 @@ L_0892B3F8: } L_0892B400: aot_gpr_31 = (0x0892B408u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892B408u) goto L_0892B408; AOT_REGCACHE_SYNC_OUT(); return; L_0892B408: @@ -8634,7 +8285,6 @@ L_0892B414: L_0892B43C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892B45C; @@ -8664,7 +8314,6 @@ L_0892B468: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -8675,9 +8324,7 @@ L_0892B468: L_0892B484: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B4A0; } @@ -8693,7 +8340,6 @@ L_0892B498: } L_0892B4A0: aot_gpr_31 = (0x0892B4A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892B4A8u) goto L_0892B4A8; AOT_REGCACHE_SYNC_OUT(); return; L_0892B4A8: @@ -8723,7 +8369,6 @@ L_0892B4B4: L_0892B4DC: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892B4FC; @@ -8753,7 +8398,6 @@ L_0892B508: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -8764,9 +8408,7 @@ L_0892B508: L_0892B524: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B540; } @@ -8782,7 +8424,6 @@ L_0892B538: } L_0892B540: aot_gpr_31 = (0x0892B548u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892B548u) goto L_0892B548; AOT_REGCACHE_SYNC_OUT(); return; L_0892B548: @@ -8812,7 +8453,6 @@ L_0892B554: L_0892B57C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892B59C; @@ -8842,7 +8482,6 @@ L_0892B5A8: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -8853,9 +8492,7 @@ L_0892B5A8: L_0892B5C4: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B5E0; } @@ -8871,7 +8508,6 @@ L_0892B5D8: } L_0892B5E0: aot_gpr_31 = (0x0892B5E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892B5E8u) goto L_0892B5E8; AOT_REGCACHE_SYNC_OUT(); return; L_0892B5E8: @@ -8889,7 +8525,6 @@ L_0892B5F4: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8903,9 +8538,7 @@ L_0892B618: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B63C; } @@ -8921,7 +8554,6 @@ L_0892B63C: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8935,9 +8567,7 @@ L_0892B660: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B684; } @@ -8951,7 +8581,6 @@ L_0892B684: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8965,9 +8594,7 @@ L_0892B6A0: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B6C4; } @@ -8981,7 +8608,6 @@ L_0892B6C4: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(188))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8995,9 +8621,7 @@ L_0892B6E0: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892B704; } @@ -9011,7 +8635,6 @@ L_0892B704: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892B728; } @@ -9021,7 +8644,6 @@ L_0892B718: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892B858; } @@ -9031,7 +8653,6 @@ L_0892B728: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892B7C8; } @@ -9040,7 +8661,6 @@ L_0892B728: L_0892B738: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B75C; } @@ -9072,7 +8692,6 @@ L_0892B744: L_0892B75C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B780; } @@ -9104,7 +8723,6 @@ L_0892B768: L_0892B780: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(195))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B7A4; } @@ -9136,7 +8754,6 @@ L_0892B78C: L_0892B7A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(193))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B9A4; } @@ -9168,7 +8785,6 @@ L_0892B7B0: L_0892B7C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B7EC; } @@ -9200,7 +8816,6 @@ L_0892B7D4: L_0892B7EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B810; } @@ -9232,7 +8847,6 @@ L_0892B7F8: L_0892B810: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(193))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B834; } @@ -9264,7 +8878,6 @@ L_0892B81C: L_0892B834: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(195))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B9A4; } @@ -9297,7 +8910,6 @@ L_0892B858: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892B878; } @@ -9307,7 +8919,6 @@ L_0892B868: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892B9A4; } @@ -9317,7 +8928,6 @@ L_0892B878: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892B918; } @@ -9326,7 +8936,6 @@ L_0892B878: L_0892B888: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(195))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B8AC; } @@ -9358,7 +8967,6 @@ L_0892B894: L_0892B8AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(193))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B8D0; } @@ -9390,7 +8998,6 @@ L_0892B8B8: L_0892B8D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B8F4; } @@ -9422,7 +9029,6 @@ L_0892B8DC: L_0892B8F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B9A4; } @@ -9454,7 +9060,6 @@ L_0892B900: L_0892B918: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(193))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B93C; } @@ -9486,7 +9091,6 @@ L_0892B924: L_0892B93C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(195))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B960; } @@ -9518,7 +9122,6 @@ L_0892B948: L_0892B960: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B984; } @@ -9550,7 +9153,6 @@ L_0892B96C: L_0892B984: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892B9A4; } @@ -9576,7 +9178,6 @@ L_0892B990: goto L_0892B9A4; L_0892B9A4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0892BA24; } @@ -9640,9 +9241,7 @@ L_0892B9AC: aot_gpr_4 = (16000u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892BA1C; } @@ -9689,7 +9288,17 @@ L_0892BA28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892BA54: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -9757,7 +9366,6 @@ L_0892BAC8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(464), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0892BB20; } @@ -9784,7 +9392,6 @@ L_0892BB20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892BC20; } @@ -9811,7 +9418,6 @@ L_0892BB4C: AOT_REGCACHE_SYNC_OUT(); return; L_0892BB58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BB70; } @@ -9832,7 +9438,6 @@ L_0892BB70: AOT_REGCACHE_SYNC_OUT(); return; L_0892BB7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BB9C; } @@ -9847,7 +9452,6 @@ L_0892BB84: AOT_REGCACHE_SYNC_OUT(); return; L_0892BB94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BC28; } @@ -9861,7 +9465,6 @@ L_0892BB9C: AOT_REGCACHE_SYNC_OUT(); return; L_0892BBA8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BBC8; } @@ -9876,7 +9479,6 @@ L_0892BBB0: AOT_REGCACHE_SYNC_OUT(); return; L_0892BBC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BC28; } @@ -9890,7 +9492,6 @@ L_0892BBC8: AOT_REGCACHE_SYNC_OUT(); return; L_0892BBD4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BBF4; } @@ -9905,7 +9506,6 @@ L_0892BBDC: AOT_REGCACHE_SYNC_OUT(); return; L_0892BBEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BC28; } @@ -9919,7 +9519,6 @@ L_0892BBF4: AOT_REGCACHE_SYNC_OUT(); return; L_0892BC00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BC28; } @@ -9934,7 +9533,6 @@ L_0892BC08: AOT_REGCACHE_SYNC_OUT(); return; L_0892BC18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BC28; } @@ -9942,7 +9540,6 @@ L_0892BC18: } L_0892BC20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BDA4; } @@ -9955,7 +9552,6 @@ L_0892BC28: AOT_REGCACHE_SYNC_OUT(); return; L_0892BC30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892BC4C; } @@ -9975,7 +9571,6 @@ L_0892BC44: L_0892BC4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892BC78; } @@ -9988,7 +9583,6 @@ L_0892BC58: AOT_REGCACHE_SYNC_OUT(); return; L_0892BC60: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892BC78; } @@ -10046,7 +9640,6 @@ L_0892BCBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892BCE8; } @@ -10065,7 +9658,6 @@ L_0892BCE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892BD14; } @@ -10084,7 +9676,6 @@ L_0892BD14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892BD4C; } @@ -10129,7 +9720,6 @@ L_0892BD80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892BDA4; } @@ -10157,7 +9747,17 @@ L_0892BDA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892BDC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -10226,7 +9826,6 @@ L_0892BE3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892BEA4; } @@ -10240,7 +9839,6 @@ L_0892BE78: AOT_REGCACHE_SYNC_OUT(); return; L_0892BE84: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10255,7 +9853,6 @@ L_0892BE8C: AOT_REGCACHE_SYNC_OUT(); return; L_0892BE9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10263,7 +9860,6 @@ L_0892BE9C: } L_0892BEA4: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_0892BED8; } @@ -10277,7 +9873,6 @@ L_0892BEAC: AOT_REGCACHE_SYNC_OUT(); return; L_0892BEB8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10292,7 +9887,6 @@ L_0892BEC0: AOT_REGCACHE_SYNC_OUT(); return; L_0892BED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10306,7 +9900,6 @@ L_0892BED8: AOT_REGCACHE_SYNC_OUT(); return; L_0892BEE4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BF04; } @@ -10321,7 +9914,6 @@ L_0892BEEC: AOT_REGCACHE_SYNC_OUT(); return; L_0892BEFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10335,7 +9927,6 @@ L_0892BF04: AOT_REGCACHE_SYNC_OUT(); return; L_0892BF10: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BF30; } @@ -10350,7 +9941,6 @@ L_0892BF18: AOT_REGCACHE_SYNC_OUT(); return; L_0892BF28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10364,7 +9954,6 @@ L_0892BF30: AOT_REGCACHE_SYNC_OUT(); return; L_0892BF3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BF5C; } @@ -10379,7 +9968,6 @@ L_0892BF44: AOT_REGCACHE_SYNC_OUT(); return; L_0892BF54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10393,7 +9981,6 @@ L_0892BF5C: AOT_REGCACHE_SYNC_OUT(); return; L_0892BF68: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892BF80; } @@ -10413,7 +10000,6 @@ L_0892BF80: AOT_REGCACHE_SYNC_OUT(); return; L_0892BF88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892BFA4; } @@ -10433,7 +10019,6 @@ L_0892BF9C: L_0892BFA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892BFD0; } @@ -10446,7 +10031,6 @@ L_0892BFB0: AOT_REGCACHE_SYNC_OUT(); return; L_0892BFB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892BFD0; } diff --git a/profiles/vcs/generated/generated_unit_0074.cpp b/profiles/vcs/generated/generated_unit_0074.cpp index 67a1450..b2d77d1 100644 --- a/profiles/vcs/generated/generated_unit_0074.cpp +++ b/profiles/vcs/generated/generated_unit_0074.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0074[4096] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 12, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 23, 24, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, - 36, 0, 37, 0, 38, 0, 39, 0, 0, 40, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, - 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, - 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 0, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, - 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, - 0, 83, 0, 0, 84, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 88, 89, 0, 90, 0, 91, 0, - 92, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, - 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 107, 0, 0, 0, 0, 108, 0, 0, 109, 0, 110, 0, 0, 0, 111, 0, 112, 0, 113, 0, 114, 0, - 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 120, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 124, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 130, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, - 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 143, 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 146, 0, - 0, 147, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, - 153, 0, 154, 0, 0, 155, 0, 0, 0, 156, 0, 157, 0, 158, 0, 0, 159, 0, 160, 0, 161, 0, 162, 0, 0, 0, 0, 163, 0, 164, 0, 0, - 0, 0, 165, 0, 166, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, - 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 179, 0, 180, 0, 0, 181, 0, 182, 0, 183, - 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 186, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 0, - 0, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 0, 0, 195, 0, 0, 196, 0, 197, 198, 0, 0, 0, 199, - 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 204, 0, 0, 0, 0, 0, 205, - 0, 0, 206, 0, 0, 207, 0, 208, 209, 0, 0, 210, 0, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, - 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, - 0, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 227, 228, 0, 229, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 232, - 0, 0, 0, 233, 0, 0, 234, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 240, 241, 0, 0, 0, - 0, 242, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 245, 0, 0, 0, 246, 0, 0, 247, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 0, - 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 256, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, - 0, 0, 0, 260, 261, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 271, 272, 0, 273, 274, 0, 0, 275, 0, 0, 276, 0, 0, 0, 0, 0, - 277, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 281, 0, 0, 0, 0, 282, 0, 283, 284, 0, 285, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, - 289, 0, 290, 291, 0, 292, 293, 0, 294, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, - 301, 0, 302, 0, 303, 0, 304, 0, 0, 305, 0, 0, 306, 0, 0, 307, 0, 0, 308, 309, 0, 310, 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, - 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 316, 0, 317, 318, 0, 0, 0, 319, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, - 322, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 0, 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, - 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, - 0, 0, 0, 0, 345, 0, 0, 346, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, - 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 354, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, - 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, - 0, 371, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 375, 376, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 0, 380, 0, - 0, 0, 381, 0, 0, 0, 0, 0, 0, 382, 383, 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 0, 387, 0, 388, 0, 0, 0, 389, 0, - 0, 0, 390, 391, 0, 392, 0, 0, 0, 0, 393, 0, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 399, 0, 0, 0, - 400, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 407, 0, 408, 0, - 0, 0, 409, 0, 0, 0, 410, 411, 0, 412, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 415, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, - 419, 0, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 0, 423, 0, 0, 424, 0, 425, 0, 0, 0, 0, 426, 0, 427, 428, 0, 0, 0, 429, 0, - 430, 0, 431, 0, 0, 0, 432, 0, 0, 0, 433, 0, 434, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, - 0, 440, 0, 0, 441, 0, 0, 0, 442, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, 446, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 0, - 450, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 458, 0, 459, 0, 0, 0, 460, 0, - 0, 0, 461, 0, 462, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, 466, 0, 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 0, - 470, 0, 0, 471, 0, 0, 472, 0, 0, 473, 0, 0, 474, 0, 475, 0, 0, 0, 476, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 0, 480, 0, - 0, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 0, 485, 486, 0, 0, 0, 487, 0, 488, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, - 0, 490, 0, 0, 0, 491, 0, 492, 0, 493, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 497, 0, 498, 0, 499, 0, 0, 0, - 500, 0, 0, 0, 501, 0, 0, 502, 0, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 506, 0, 0, 0, - 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 510, 0, 0, 511, 0, 0, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 0, - 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, - 0, 519, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 524, 0, 0, 525, 0, 0, 526, 0, 0, 0, 0, 527, 0, - 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 532, 0, 0, 533, 0, - 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, - 539, 0, 0, 0, 0, 540, 0, 541, 0, 542, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 546, 0, - 547, 0, 0, 0, 548, 0, 0, 0, 549, 0, 550, 0, 0, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, - 557, 0, 0, 558, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 562, 0, 563, - 0, 564, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 570, 0, 0, 0, - 571, 0, 572, 0, 0, 0, 573, 0, 0, 574, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, - 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 586, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 589, 0, 590, 0, 591, 592, 0, 593, - 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 598, 599, 600, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, 0, 0, 603, 604, 0, 0, 0, - 605, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 610, 0, 0, 611, - 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 0, 620, 0, 621, 0, 622, 0, 0, 623, 0, 0, 624, 0, 0, - 0, 0, 0, 625, 0, 0, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, - 631, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 635, 0, 636, 0, 637, - 0, 638, 0, 639, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 645, 0, 0, 0, 646, 0, 0, 0, 647, 0, 648, 0, 649, 0, 0, 650, 0, 651, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, - 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, - 661, 0, 0, 662, 0, 0, 663, 0, 0, 0, 664, 0, 665, 0, 666, 0, 0, 667, 0, 668, 0, 0, 669, 0, 0, 0, 0, 0, 0, 670, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 674, 0, 675, 676, 0, - 677, 0, 0, 0, 0, 0, 0, 678, 0, 679, 680, 0, 0, 681, 0, 0, 0, 682, 0, 683, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 685, 0, - 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 688, 0, 689, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 692, - 0, 693, 694, 0, 695, 0, 0, 0, 696, 0, 697, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 700, 0, - 0, 701, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 0, 705, 0, 0, - 0, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 0, 0, - 0, 0, 0, 711, 0, 712, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 0, - 0, 0, 717, 0, 0, 718, 0, 0, 0, 719, 720, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 723, 0, 724, 0, 0, 0, 725, - 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, - 0, 0, 0, 0, 731, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, 734, 0, 0, 0, 735, 0, 736, 0, 737, 0, 0, 0, 0, 738, 0, 739, 0, - 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 0, - 0, 745, 0, 746, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 749, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 751, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, 0, 0, 756, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 758, 0, 759, 0, 760, 0, 761, 0, 762, 0, 763, 0, 0, 764, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 766, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 768, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 772, 0, 773, 0, 0, 0, 774, 775, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0074[64] = { + 0x1140840110220441ull, 0x0000000040001002ull, 0x6C000000048000A8ull, 0x2209110080200901ull, + 0x4806000140002A55ull, 0x800004A200000020ull, 0x2420884001900000ull, 0x2040000001000008ull, + 0x0084440000400824ull, 0x56042812AAA00020ull, 0x8885008024011025ull, 0x0544202455148520ull, + 0x0000500002801540ull, 0x1028100100014054ull, 0x00801006448A4002ull, 0x28552A2540000020ull, + 0xA9540820AA880A14ull, 0x8D20884408409450ull, 0x020149A482202024ull, 0x0028240244081400ull, + 0x9000DA1010000000ull, 0x00A9128218884548ull, 0x4218104020401400ull, 0x00D0050400002018ull, + 0x00020029049B4200ull, 0x1414156D08016D08ull, 0x0231A44440AC9255ull, 0x0000000000028121ull, + 0x0000000002902409ull, 0x0000000290240900ull, 0x0000029024090000ull, 0x0092902409000000ull, + 0x0880A00000000000ull, 0x0000000000492044ull, 0x4926902204405000ull, 0x1492442C45105604ull, + 0x492442C451005249ull, 0x4910944546852491ull, 0x4549244924524912ull, 0x4924524912491094ull, + 0x152222A20828C924ull, 0x1084911010808491ull, 0x4248888A88020210ull, 0x0108084248880840ull, + 0x222A4511404222A1ull, 0x11404222A0210109ull, 0x0250202109222A45ull, 0x03850440B5081000ull, + 0x9082400918500000ull, 0x24A9545000010002ull, 0xA880008540A00A08ull, 0xA5444801000A002Aull, + 0x020408A0800A0800ull, 0x68100A00204A5449ull, 0x80B40401420A2681ull, 0x2050010250010516ull, + 0x2402042810410208ull, 0x081040288A081624ull, 0x1048082050A89090ull, 0x40A102040024408Aull, + 0x0000020012AA8400ull, 0x0000000000000000ull, 0x000002A000000028ull, 0xC510000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0074[64] = { + 1u, 13u, 16u, 25u, 36u, 49u, 55u, 64u, 68u, 76u, 92u, 105u, 122u, 130u, 140u, 151u, + 165u, 184u, 200u, 214u, 224u, 233u, 250u, 260u, 269u, 281u, 301u, 322u, 327u, 334u, 341u, 348u, + 357u, 361u, 367u, 381u, 400u, 419u, 440u, 461u, 481u, 500u, 514u, 528u, 539u, 557u, 571u, 587u, + 601u, 612u, 625u, 638u, 652u, 661u, 677u, 693u, 706u, 717u, 731u, 745u, 757u, 766u, 766u, 771u, }; void recomp_unit_0074_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0074_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0892C000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0074[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0074[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0074[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0892C000; @@ -958,7 +865,6 @@ L_0892C018: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C044; } @@ -977,7 +883,6 @@ L_0892C044: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C070; } @@ -996,7 +901,6 @@ L_0892C070: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892C0A8; } @@ -1042,7 +946,6 @@ L_0892C0E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C104; } @@ -1073,7 +976,17 @@ L_0892C104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892C130: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(408), ctx.gpr[18]); @@ -1158,7 +1071,6 @@ L_0892C178: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C21C; } @@ -1166,7 +1078,6 @@ L_0892C178: } L_0892C20C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892C2F4; } @@ -1174,7 +1085,6 @@ L_0892C20C: } L_0892C214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892C8DC; } @@ -1213,7 +1123,6 @@ L_0892C21C: L_0892C25C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892C2EC; } @@ -1311,7 +1220,6 @@ L_0892C2E8: goto L_0892C2EC; L_0892C2EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892C2F8; } @@ -1322,7 +1230,6 @@ L_0892C2F4: goto L_0892C2F8; L_0892C2F8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892C354; } @@ -1409,7 +1316,6 @@ L_0892C3B0: L_0892C3C0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C3E4; } @@ -1427,7 +1333,6 @@ L_0892C3E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C400; } @@ -1453,7 +1358,6 @@ L_0892C408: AOT_REGCACHE_SYNC_OUT(); return; L_0892C410: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892C434; } @@ -1462,7 +1366,6 @@ L_0892C410: L_0892C418: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C480; } @@ -1475,7 +1378,6 @@ L_0892C424: AOT_REGCACHE_SYNC_OUT(); return; L_0892C42C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892C480; } @@ -1567,9 +1469,7 @@ L_0892C4C8: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892C4F8; } @@ -1600,7 +1500,6 @@ L_0892C4F8: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C584; } @@ -1653,7 +1552,6 @@ L_0892C584: AOT_REGCACHE_SYNC_OUT(); return; L_0892C594: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892C5FC; } @@ -1690,7 +1588,6 @@ L_0892C5A8: { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(164), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892C650; } @@ -1746,7 +1643,6 @@ L_0892C660: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892C6AC; } @@ -1764,7 +1660,6 @@ L_0892C6AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 12288u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C8DC; } @@ -1986,7 +1881,6 @@ L_0892C8A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1768))); aot_gpr_4 = (aot_gpr_4 < static_cast(41) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892C8C8; } @@ -2030,7 +1924,17 @@ L_0892C8DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892C914: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), std::bit_cast(ctx.fpr[20])); @@ -2060,7 +1964,6 @@ L_0892C954: AOT_REGCACHE_SYNC_OUT(); return; L_0892C95C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892C974; } @@ -2076,7 +1979,6 @@ L_0892C964: } L_0892C96C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892C990; } @@ -2127,7 +2029,6 @@ L_0892C990: AOT_REGCACHE_SYNC_OUT(); return; L_0892C9AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892C9C8; } @@ -2151,7 +2052,6 @@ L_0892C9C8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892C9E8; } @@ -2167,7 +2067,6 @@ L_0892C9E8: AOT_REGCACHE_SYNC_OUT(); return; L_0892C9F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892CA00; } @@ -2202,7 +2101,6 @@ L_0892CA30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1676))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892CA68; } @@ -2253,7 +2151,6 @@ L_0892CA9C: AOT_REGCACHE_SYNC_OUT(); return; L_0892CAC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892CB28; } @@ -2278,7 +2175,6 @@ L_0892CAEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892CB3C; } @@ -2301,7 +2197,6 @@ L_0892CB14: AOT_REGCACHE_SYNC_OUT(); return; L_0892CB20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892CB3C; } @@ -2339,7 +2234,6 @@ L_0892CB60: AOT_REGCACHE_SYNC_OUT(); return; L_0892CB68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892CE84; } @@ -2347,14 +2241,12 @@ L_0892CB68: } L_0892CB70: aot_gpr_31 = (0x0892CB78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CB78u) goto L_0892CB78; AOT_REGCACHE_SYNC_OUT(); return; L_0892CB78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892CE84; } @@ -2363,7 +2255,6 @@ L_0892CB78: L_0892CB88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892CE84; } @@ -2400,7 +2291,6 @@ L_0892CBC8: } L_0892CBD8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0892CD08; } @@ -2408,7 +2298,6 @@ L_0892CBD8: } L_0892CBE0: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0892CC64; } @@ -2437,12 +2326,10 @@ L_0892CBE8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0892CC18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CC18u) goto L_0892CC18; AOT_REGCACHE_SYNC_OUT(); return; L_0892CC18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892CD08; } @@ -2458,7 +2345,6 @@ L_0892CC20: } L_0892CC28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892CD08; } @@ -2486,12 +2372,10 @@ L_0892CC30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0892CC5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CC5Cu) goto L_0892CC5C; AOT_REGCACHE_SYNC_OUT(); return; L_0892CC5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892CD08; } @@ -2538,12 +2422,10 @@ L_0892CC64: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0892CCB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CCB0u) goto L_0892CCB0; AOT_REGCACHE_SYNC_OUT(); return; L_0892CCB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892CD08; } @@ -2591,12 +2473,10 @@ L_0892CCB8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0892CD08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CD08u) goto L_0892CD08; AOT_REGCACHE_SYNC_OUT(); return; L_0892CD08: aot_gpr_31 = (0x0892CD10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CD10u) goto L_0892CD10; AOT_REGCACHE_SYNC_OUT(); return; L_0892CD10: @@ -2614,7 +2494,6 @@ L_0892CD18: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(ctx.gpr[2] + static_cast(48), aot_run_words); } aot_gpr_31 = (0x0892CD38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CD38u) goto L_0892CD38; AOT_REGCACHE_SYNC_OUT(); return; L_0892CD38: @@ -2695,7 +2574,6 @@ L_0892CDD4: aot_gpr_4 = (49884u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17116u << 16u); if (branch_taken) { @@ -2706,9 +2584,7 @@ L_0892CDD4: L_0892CDF0: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892CE44; } @@ -2749,7 +2625,6 @@ L_0892CE38: goto L_0892CE44; L_0892CE44: aot_gpr_31 = (0x0892CE4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892CE4Cu) goto L_0892CE4C; AOT_REGCACHE_SYNC_OUT(); return; L_0892CE4C: @@ -2810,7 +2685,17 @@ L_0892CE88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892CEB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); @@ -2919,7 +2804,6 @@ L_0892CF14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892CF88; } @@ -2927,7 +2811,6 @@ L_0892CF14: } L_0892CF78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D02C; } @@ -2935,7 +2818,6 @@ L_0892CF78: } L_0892CF80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D2C0; } @@ -2959,7 +2841,6 @@ L_0892CF94: } L_0892CFA4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0892D1FC; } @@ -2967,7 +2848,6 @@ L_0892CFA4: } L_0892CFAC: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0892CFF4; } @@ -2981,7 +2861,6 @@ L_0892CFB4: AOT_REGCACHE_SYNC_OUT(); return; L_0892CFC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D1FC; } @@ -2997,7 +2876,6 @@ L_0892CFC8: } L_0892CFD0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892D1FC; } @@ -3013,7 +2891,6 @@ L_0892CFD8: AOT_REGCACHE_SYNC_OUT(); return; L_0892CFEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D1FC; } @@ -3029,7 +2906,6 @@ L_0892CFF4: AOT_REGCACHE_SYNC_OUT(); return; L_0892D008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D1FC; } @@ -3045,7 +2921,6 @@ L_0892D010: AOT_REGCACHE_SYNC_OUT(); return; L_0892D024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D1FC; } @@ -3057,7 +2932,6 @@ L_0892D02C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -3067,9 +2941,7 @@ L_0892D02C: } L_0892D04C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_22)) && aot_fpr_13 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D06C; } @@ -3077,7 +2949,6 @@ L_0892D04C: } L_0892D05C: aot_gpr_31 = (0x0892D064u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892D064u) goto L_0892D064; AOT_REGCACHE_SYNC_OUT(); return; L_0892D064: @@ -3095,7 +2966,6 @@ L_0892D06C: AOT_REGCACHE_SYNC_OUT(); return; L_0892D074: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892D0AC; } @@ -3118,7 +2988,6 @@ L_0892D094: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892D1EC; } @@ -3139,7 +3008,6 @@ L_0892D0AC: } L_0892D0C8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0892D128; } @@ -3147,7 +3015,6 @@ L_0892D0C8: } L_0892D0D0: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0892D0FC; } @@ -3155,7 +3022,6 @@ L_0892D0D0: } L_0892D0D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D128; } @@ -3172,7 +3038,6 @@ L_0892D0E0: } L_0892D0EC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892D118; } @@ -3180,7 +3045,6 @@ L_0892D0EC: } L_0892D0F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892D128; } @@ -3227,9 +3091,7 @@ L_0892D13C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2256))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D16C; } @@ -3251,9 +3113,7 @@ L_0892D16C: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D198; } @@ -3268,9 +3128,7 @@ L_0892D188: L_0892D198: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D1BC; } @@ -3290,9 +3148,7 @@ L_0892D1BC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D1E0; } @@ -3338,7 +3194,6 @@ L_0892D214: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892D254; } @@ -3407,7 +3262,6 @@ L_0892D29C: L_0892D2A0: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892D2C0; } @@ -3416,7 +3270,6 @@ L_0892D2A0: L_0892D2AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892D2C0; } @@ -3443,7 +3296,17 @@ L_0892D2C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892D2E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-752)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(720), aot_gpr_16); @@ -3458,7 +3321,6 @@ L_0892D2E4: AOT_REGCACHE_SYNC_OUT(); return; L_0892D328: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892D3D4; } @@ -3471,7 +3333,6 @@ L_0892D330: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892D3D4; } @@ -3484,7 +3345,6 @@ L_0892D34C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892D3D4; } @@ -3512,7 +3372,6 @@ L_0892D384: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -3645,7 +3504,6 @@ L_0892D470: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(aot_fpr_13)) && aot_fpr_22 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(688), std::bit_cast(ctx.fpr[20])); if (branch_taken) { @@ -3656,7 +3514,6 @@ L_0892D470: L_0892D490: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892D4B0; @@ -3703,7 +3560,6 @@ L_0892D4BC: L_0892D4F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892D528; } @@ -3713,7 +3569,6 @@ L_0892D4FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -3722,7 +3577,6 @@ L_0892D4FC: L_0892D50C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -3735,7 +3589,6 @@ L_0892D518: AOT_REGCACHE_SYNC_OUT(); return; L_0892D520: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -3772,7 +3625,6 @@ L_0892D55C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0892D570; } @@ -3800,7 +3652,6 @@ L_0892D584: AOT_REGCACHE_SYNC_OUT(); return; L_0892D59C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0892D5B0; } @@ -3816,7 +3667,6 @@ L_0892D5B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -3825,7 +3675,6 @@ L_0892D5B0: L_0892D5C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -3838,7 +3687,6 @@ L_0892D5CC: AOT_REGCACHE_SYNC_OUT(); return; L_0892D5D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -3861,7 +3709,6 @@ L_0892D5DC: aot_fpr_13 = ctx.fpr[16] + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -3881,7 +3728,6 @@ L_0892D630: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_0892D674; @@ -3903,9 +3749,7 @@ L_0892D674: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D6B0; } @@ -3924,9 +3768,7 @@ L_0892D6B0: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D6D0; } @@ -3962,7 +3804,6 @@ L_0892D6F8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0892D894; } @@ -4071,7 +3912,6 @@ L_0892D788: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_0892D7A8; @@ -4093,7 +3933,6 @@ L_0892D7A8: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4139,7 +3978,6 @@ L_0892D7DC: L_0892D824: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892D844; @@ -4326,7 +4164,6 @@ L_0892D8C4: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_13)) && ctx.fpr[26] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); if (branch_taken) { @@ -4337,7 +4174,6 @@ L_0892D8C4: L_0892D90C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892D92C; @@ -4376,7 +4212,6 @@ L_0892D940: ctx.fpr[30] = ctx.fpr[30] - aot_fpr_12; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[30]) || std::isnan(aot_fpr_13)) && ctx.fpr[30] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; if (branch_taken) { @@ -4387,7 +4222,6 @@ L_0892D940: L_0892D96C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0892D98C; @@ -4419,7 +4253,6 @@ L_0892D998: AOT_REGCACHE_SYNC_OUT(); return; L_0892D9A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892D9F0; } @@ -4427,16 +4260,13 @@ L_0892D9A0: } L_0892D9A8: aot_gpr_31 = (0x0892D9B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892D9B0u) goto L_0892D9B0; AOT_REGCACHE_SYNC_OUT(); return; L_0892D9B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(3156))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892D9E8; } @@ -4444,7 +4274,6 @@ L_0892D9B0: } L_0892D9C8: aot_gpr_31 = (0x0892D9D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892D9D0u) goto L_0892D9D0; AOT_REGCACHE_SYNC_OUT(); return; L_0892D9D0: @@ -4453,7 +4282,6 @@ L_0892D9D0: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[28] = aot_fpr_12 / ctx.fpr[28]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892DA4C; } @@ -4495,7 +4323,6 @@ L_0892DA08: } L_0892DA10: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892DA48; } @@ -4547,7 +4374,6 @@ L_0892DA4C: AOT_REGCACHE_SYNC_OUT(); return; L_0892DA54: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0892DAD4; } @@ -4560,7 +4386,6 @@ L_0892DA5C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DAD4; } @@ -4570,7 +4395,6 @@ L_0892DA78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892DAA8; } @@ -4580,7 +4404,6 @@ L_0892DA88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892DAA8; } @@ -4590,7 +4413,6 @@ L_0892DA98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892DAD4; } @@ -4604,7 +4426,6 @@ L_0892DAA8: AOT_REGCACHE_SYNC_OUT(); return; L_0892DAB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892DAC0; } @@ -4617,7 +4438,6 @@ L_0892DAC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DAD4; } @@ -4630,7 +4450,6 @@ L_0892DAD4: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892DB00; } @@ -4643,7 +4462,6 @@ L_0892DAE4: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0892DAE4; } @@ -4654,7 +4472,6 @@ L_0892DB00: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892DB20; } @@ -4663,7 +4480,6 @@ L_0892DB00: L_0892DB14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1376))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0892E86C; } @@ -4684,7 +4500,6 @@ L_0892DB20: } L_0892DB3C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0892E2C4; } @@ -4819,7 +4634,6 @@ L_0892DB44: L_0892DC00: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DC64; } @@ -4832,7 +4646,6 @@ L_0892DC0C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892DC34; } @@ -4854,7 +4667,6 @@ L_0892DC34: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DC5C; } @@ -5002,7 +4814,6 @@ L_0892DC64: L_0892DD20: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DD84; } @@ -5015,7 +4826,6 @@ L_0892DD2C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892DD54; } @@ -5037,7 +4847,6 @@ L_0892DD54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DD7C; } @@ -5185,7 +4994,6 @@ L_0892DD84: L_0892DE40: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DEA4; } @@ -5198,7 +5006,6 @@ L_0892DE4C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892DE74; } @@ -5220,7 +5027,6 @@ L_0892DE74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DE9C; } @@ -5368,7 +5174,6 @@ L_0892DEA4: L_0892DF60: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DFC4; } @@ -5381,7 +5186,6 @@ L_0892DF6C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892DF94; } @@ -5403,7 +5207,6 @@ L_0892DF94: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892DFBC; } @@ -5425,7 +5228,6 @@ L_0892DFBC: L_0892DFC4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E140; } @@ -5434,7 +5236,6 @@ L_0892DFC4: L_0892DFD0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E140; } @@ -5605,7 +5406,6 @@ L_0892DFDC: AOT_REGCACHE_SYNC_OUT(); return; L_0892E0B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892E140; } @@ -5661,7 +5461,6 @@ L_0892E118: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E140; } @@ -5675,7 +5474,6 @@ L_0892E134: L_0892E140: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E2BC; } @@ -5684,7 +5482,6 @@ L_0892E140: L_0892E14C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E2BC; } @@ -5855,7 +5652,6 @@ L_0892E158: AOT_REGCACHE_SYNC_OUT(); return; L_0892E230: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892E2BC; } @@ -5911,7 +5707,6 @@ L_0892E294: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E2BC; } @@ -5924,7 +5719,6 @@ L_0892E2B0: goto L_0892E2BC; L_0892E2BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892E2C8; } @@ -5936,7 +5730,6 @@ L_0892E2C4: L_0892E2C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E328; } @@ -5945,7 +5738,6 @@ L_0892E2C8: L_0892E2D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E328; } @@ -5954,7 +5746,6 @@ L_0892E2D4: L_0892E2E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E328; } @@ -5963,7 +5754,6 @@ L_0892E2E0: L_0892E2EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E328; } @@ -5973,7 +5763,6 @@ L_0892E2F8: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0892E324; } @@ -5986,7 +5775,6 @@ L_0892E308: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0892E308; } @@ -5997,7 +5785,6 @@ L_0892E324: goto L_0892E328; L_0892E328: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_0892E338; } @@ -6015,7 +5802,6 @@ L_0892E338: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); goto L_0892E350; @@ -6023,9 +5809,7 @@ L_0892E338: goto L_0892E350; L_0892E350: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E438; } @@ -6041,7 +5825,6 @@ L_0892E368: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E3A8; } @@ -6051,7 +5834,6 @@ L_0892E378: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E3A8; } @@ -6068,9 +5850,7 @@ L_0892E38C: L_0892E394: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E3F0; } @@ -6080,7 +5860,6 @@ L_0892E3A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E3DC; } @@ -6089,7 +5868,6 @@ L_0892E3A8: L_0892E3B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E3E8; } @@ -6098,7 +5876,6 @@ L_0892E3B8: L_0892E3C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E3E8; } @@ -6107,7 +5884,6 @@ L_0892E3C4: L_0892E3D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E3E8; } @@ -6134,7 +5910,6 @@ L_0892E3F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E424; } @@ -6143,7 +5918,6 @@ L_0892E3F0: L_0892E400: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E430; } @@ -6152,7 +5926,6 @@ L_0892E400: L_0892E40C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E430; } @@ -6161,7 +5934,6 @@ L_0892E40C: L_0892E418: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E430; } @@ -6192,7 +5964,6 @@ L_0892E438: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 - ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); goto L_0892E460; @@ -6200,9 +5971,7 @@ L_0892E438: goto L_0892E460; L_0892E460: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E548; } @@ -6218,7 +5987,6 @@ L_0892E478: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E4B8; } @@ -6228,7 +5996,6 @@ L_0892E488: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E4B8; } @@ -6245,9 +6012,7 @@ L_0892E49C: L_0892E4A4: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E500; } @@ -6257,7 +6022,6 @@ L_0892E4B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E4EC; } @@ -6266,7 +6030,6 @@ L_0892E4B8: L_0892E4C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E4F8; } @@ -6275,7 +6038,6 @@ L_0892E4C8: L_0892E4D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E4F8; } @@ -6284,7 +6046,6 @@ L_0892E4D4: L_0892E4E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E4F8; } @@ -6311,7 +6072,6 @@ L_0892E500: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E534; } @@ -6320,7 +6080,6 @@ L_0892E500: L_0892E510: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E540; } @@ -6329,7 +6088,6 @@ L_0892E510: L_0892E51C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E540; } @@ -6338,7 +6096,6 @@ L_0892E51C: L_0892E528: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E540; } @@ -6364,7 +6121,6 @@ L_0892E540: L_0892E548: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(0u); goto L_0892E568; @@ -6372,7 +6128,6 @@ L_0892E548: goto L_0892E55C; L_0892E55C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0892E580; } @@ -6383,9 +6138,7 @@ L_0892E564: goto L_0892E568; L_0892E568: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E6E0; } @@ -6393,7 +6146,6 @@ L_0892E568: } L_0892E578: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0892E6E0; } @@ -6401,7 +6153,6 @@ L_0892E578: } L_0892E580: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892E5B0; } @@ -6411,7 +6162,6 @@ L_0892E588: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E5A8; } @@ -6421,7 +6171,6 @@ L_0892E598: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892E5B0; } @@ -6444,9 +6193,7 @@ L_0892E5B0: L_0892E5BC: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E658; } @@ -6456,7 +6203,6 @@ L_0892E5D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E604; } @@ -6465,7 +6211,6 @@ L_0892E5D0: L_0892E5E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E610; } @@ -6474,7 +6219,6 @@ L_0892E5E0: L_0892E5EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E610; } @@ -6483,7 +6227,6 @@ L_0892E5EC: L_0892E5F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E610; } @@ -6502,7 +6245,6 @@ L_0892E610: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E644; } @@ -6511,7 +6253,6 @@ L_0892E610: L_0892E620: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E650; } @@ -6520,7 +6261,6 @@ L_0892E620: L_0892E62C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E650; } @@ -6529,7 +6269,6 @@ L_0892E62C: L_0892E638: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E650; } @@ -6556,7 +6295,6 @@ L_0892E658: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E68C; } @@ -6565,7 +6303,6 @@ L_0892E658: L_0892E668: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E698; } @@ -6574,7 +6311,6 @@ L_0892E668: L_0892E674: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E698; } @@ -6583,7 +6319,6 @@ L_0892E674: L_0892E680: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E698; } @@ -6602,7 +6337,6 @@ L_0892E698: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E6CC; } @@ -6611,7 +6345,6 @@ L_0892E698: L_0892E6A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E6D8; } @@ -6620,7 +6353,6 @@ L_0892E6A8: L_0892E6B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E6D8; } @@ -6629,7 +6361,6 @@ L_0892E6B4: L_0892E6C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E6D8; } @@ -6654,7 +6385,6 @@ L_0892E6D8: } L_0892E6E0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892E710; } @@ -6664,7 +6394,6 @@ L_0892E6E8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E708; } @@ -6674,7 +6403,6 @@ L_0892E6F8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892E710; } @@ -6697,9 +6425,7 @@ L_0892E710: L_0892E71C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892E7B8; } @@ -6709,7 +6435,6 @@ L_0892E730: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E764; } @@ -6718,7 +6443,6 @@ L_0892E730: L_0892E740: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E770; } @@ -6727,7 +6451,6 @@ L_0892E740: L_0892E74C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E770; } @@ -6736,7 +6459,6 @@ L_0892E74C: L_0892E758: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E770; } @@ -6755,7 +6477,6 @@ L_0892E770: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E7A4; } @@ -6764,7 +6485,6 @@ L_0892E770: L_0892E780: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E7B0; } @@ -6773,7 +6493,6 @@ L_0892E780: L_0892E78C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E7B0; } @@ -6782,7 +6501,6 @@ L_0892E78C: L_0892E798: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E7B0; } @@ -6809,7 +6527,6 @@ L_0892E7B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E7EC; } @@ -6818,7 +6535,6 @@ L_0892E7B8: L_0892E7C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E7F8; } @@ -6827,7 +6543,6 @@ L_0892E7C8: L_0892E7D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E7F8; } @@ -6836,7 +6551,6 @@ L_0892E7D4: L_0892E7E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E7F8; } @@ -6855,7 +6569,6 @@ L_0892E7F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E82C; } @@ -6864,7 +6577,6 @@ L_0892E7F8: L_0892E808: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E838; } @@ -6873,7 +6585,6 @@ L_0892E808: L_0892E814: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E838; } @@ -6882,7 +6593,6 @@ L_0892E814: L_0892E820: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E838; } @@ -6909,7 +6619,6 @@ L_0892E83C: AOT_REGCACHE_SYNC_OUT(); return; L_0892E84C: aot_gpr_31 = (0x0892E854u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892E854u) goto L_0892E854; AOT_REGCACHE_SYNC_OUT(); return; L_0892E854: @@ -6924,7 +6633,6 @@ L_0892E86C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); goto L_0892E884; @@ -6932,9 +6640,7 @@ L_0892E86C: goto L_0892E884; L_0892E884: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EA44; } @@ -6942,7 +6648,6 @@ L_0892E884: } L_0892E894: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892E990; } @@ -6950,7 +6655,6 @@ L_0892E894: } L_0892E89C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0892E8F0; } @@ -6960,7 +6664,6 @@ L_0892E8A4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E8C4; } @@ -6970,7 +6673,6 @@ L_0892E8B4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892E8F0; } @@ -6980,7 +6682,6 @@ L_0892E8C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -6989,7 +6690,6 @@ L_0892E8C4: L_0892E8D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7002,7 +6702,6 @@ L_0892E8E0: AOT_REGCACHE_SYNC_OUT(); return; L_0892E8E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7012,7 +6711,6 @@ L_0892E8F0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E928; } @@ -7022,7 +6720,6 @@ L_0892E900: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E928; } @@ -7031,7 +6728,6 @@ L_0892E900: L_0892E910: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892E95C; } @@ -7040,7 +6736,6 @@ L_0892E910: L_0892E91C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(215))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892E95C; } @@ -7094,7 +6789,6 @@ L_0892E990: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E9DC; } @@ -7104,7 +6798,6 @@ L_0892E9A0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892E9DC; } @@ -7113,7 +6806,6 @@ L_0892E9A0: L_0892E9B0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892EA10; } @@ -7128,9 +6820,7 @@ L_0892E9BC: L_0892E9C8: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EA10; } @@ -7188,7 +6878,6 @@ L_0892EA44: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fpr[30] = aot_fpr_14 - ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); goto L_0892EA6C; @@ -7196,9 +6885,7 @@ L_0892EA44: goto L_0892EA6C; L_0892EA6C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EC00; } @@ -7206,7 +6893,6 @@ L_0892EA6C: } L_0892EA7C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892EB4C; } @@ -7214,7 +6900,6 @@ L_0892EA7C: } L_0892EA84: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0892EAAC; } @@ -7224,7 +6909,6 @@ L_0892EA8C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EB4C; } @@ -7234,7 +6918,6 @@ L_0892EA9C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EB4C; } @@ -7244,7 +6927,6 @@ L_0892EAAC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EAE4; } @@ -7254,7 +6936,6 @@ L_0892EABC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EAE4; } @@ -7263,7 +6944,6 @@ L_0892EABC: L_0892EACC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(213))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892EB18; } @@ -7272,7 +6952,6 @@ L_0892EACC: L_0892EAD8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892EB18; } @@ -7326,7 +7005,6 @@ L_0892EB4C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EB98; } @@ -7336,7 +7014,6 @@ L_0892EB5C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EB98; } @@ -7345,7 +7022,6 @@ L_0892EB5C: L_0892EB6C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892EBCC; } @@ -7360,9 +7036,7 @@ L_0892EB78: L_0892EB84: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EBCC; } @@ -7415,9 +7089,7 @@ L_0892EBE0: L_0892EC00: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892ED74; } @@ -7425,7 +7097,6 @@ L_0892EC00: } L_0892EC14: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892EC78; } @@ -7433,7 +7104,6 @@ L_0892EC14: } L_0892EC1C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0892EC78; } @@ -7443,7 +7113,6 @@ L_0892EC24: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EC44; } @@ -7453,7 +7122,6 @@ L_0892EC34: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892EC78; } @@ -7483,7 +7151,6 @@ L_0892EC58: } L_0892EC78: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892ECD4; } @@ -7493,7 +7160,6 @@ L_0892EC80: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892ECA8; } @@ -7503,7 +7169,6 @@ L_0892EC90: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892ECD4; } @@ -7511,7 +7176,6 @@ L_0892EC90: } L_0892ECA0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0892ECD4; } @@ -7521,7 +7185,6 @@ L_0892ECA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7530,7 +7193,6 @@ L_0892ECA8: L_0892ECB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7543,7 +7205,6 @@ L_0892ECC4: AOT_REGCACHE_SYNC_OUT(); return; L_0892ECCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7553,7 +7214,6 @@ L_0892ECD4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892ED20; } @@ -7563,7 +7223,6 @@ L_0892ECE4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892ED20; } @@ -7572,7 +7231,6 @@ L_0892ECE4: L_0892ECF4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892ED40; } @@ -7587,9 +7245,7 @@ L_0892ED00: L_0892ED0C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892ED40; } @@ -7633,7 +7289,6 @@ L_0892ED54: } L_0892ED74: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892EDD8; } @@ -7641,7 +7296,6 @@ L_0892ED74: } L_0892ED7C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0892EDD8; } @@ -7651,7 +7305,6 @@ L_0892ED84: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EDA4; } @@ -7661,7 +7314,6 @@ L_0892ED94: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892EDD8; } @@ -7691,7 +7343,6 @@ L_0892EDB8: } L_0892EDD8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892EE34; } @@ -7701,7 +7352,6 @@ L_0892EDE0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EE08; } @@ -7711,7 +7361,6 @@ L_0892EDF0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892EE34; } @@ -7719,7 +7368,6 @@ L_0892EDF0: } L_0892EE00: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0892EE34; } @@ -7729,7 +7377,6 @@ L_0892EE08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7738,7 +7385,6 @@ L_0892EE08: L_0892EE18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7751,7 +7397,6 @@ L_0892EE24: AOT_REGCACHE_SYNC_OUT(); return; L_0892EE2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -7761,7 +7406,6 @@ L_0892EE34: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EE80; } @@ -7771,7 +7415,6 @@ L_0892EE44: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0892EE80; } @@ -7780,7 +7423,6 @@ L_0892EE44: L_0892EE54: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1150))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0892EEB4; } @@ -7795,9 +7437,7 @@ L_0892EE60: L_0892EE6C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EEB4; } @@ -7835,7 +7475,6 @@ L_0892EEB4: goto L_0892EED0; L_0892EED0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0892EEE4; } @@ -7927,7 +7566,6 @@ L_0892EF30: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(116))); if (branch_taken) { @@ -7938,9 +7576,7 @@ L_0892EF30: L_0892EF4C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EF68; } @@ -7956,7 +7592,6 @@ L_0892EF60: } L_0892EF68: aot_gpr_31 = (0x0892EF70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892EF70u) goto L_0892EF70; AOT_REGCACHE_SYNC_OUT(); return; L_0892EF70: @@ -7964,7 +7599,6 @@ L_0892EF70: goto L_0892EF74; L_0892EF74: aot_gpr_31 = (0x0892EF7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892EF7Cu) goto L_0892EF7C; AOT_REGCACHE_SYNC_OUT(); return; L_0892EF7C: @@ -7972,7 +7606,6 @@ L_0892EF7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); goto L_0892EFE4; @@ -7990,9 +7623,7 @@ L_0892EFA8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2260))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(692))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892EFC8; } @@ -8045,9 +7676,7 @@ L_0892EFE4: aot_gpr_4 = (16128u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892F058; } @@ -8060,9 +7689,7 @@ L_0892F050: L_0892F058: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(688))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892F070; } @@ -8095,7 +7722,6 @@ L_0892F08C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[28] = std::bit_cast(0x7FC00000u); else ctx.fpr[28] = fs * ft; } ctx.fpr[28] = aot_fpr_13 + ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -8125,7 +7751,6 @@ L_0892F0DC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2072), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -8134,7 +7759,6 @@ L_0892F0DC: L_0892F0F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892F104; } @@ -8167,7 +7791,17 @@ L_0892F104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892F140: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -8188,7 +7822,6 @@ L_0892F140: AOT_REGCACHE_SYNC_OUT(); return; L_0892F190: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0892F1B0; } @@ -8198,7 +7831,6 @@ L_0892F198: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[23] = (0u | 17u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_0892F1B8; } @@ -8206,7 +7838,6 @@ L_0892F198: } L_0892F1A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F1C0; } @@ -8214,7 +7845,6 @@ L_0892F1A8: } L_0892F1B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC70; } @@ -8222,7 +7852,6 @@ L_0892F1B0: } L_0892F1B8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0892F1D4; } @@ -8239,7 +7868,6 @@ L_0892F1C0: } L_0892F1CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F1E8; } @@ -8247,7 +7875,6 @@ L_0892F1CC: } L_0892F1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC70; } @@ -8262,7 +7889,6 @@ L_0892F1DC: L_0892F1E8: aot_gpr_4 = (ctx.gpr[20] < static_cast(33) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0892FC3C; } @@ -8274,11 +7900,20 @@ L_0892F1F4: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[20]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-11648))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892F20C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -8290,7 +7925,6 @@ L_0892F20C: AOT_REGCACHE_SYNC_OUT(); return; L_0892F224: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8311,7 +7945,6 @@ L_0892F22C: AOT_REGCACHE_SYNC_OUT(); return; L_0892F254: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8329,7 +7962,6 @@ L_0892F25C: AOT_REGCACHE_SYNC_OUT(); return; L_0892F278: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0892F2DC; } @@ -8337,7 +7969,6 @@ L_0892F278: } L_0892F280: aot_gpr_31 = (0x0892F288u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0892F288u) goto L_0892F288; AOT_REGCACHE_SYNC_OUT(); return; L_0892F288: @@ -8378,7 +8009,6 @@ L_0892F2DC: goto L_0892F2EC; L_0892F2EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8386,7 +8016,6 @@ L_0892F2EC: } L_0892F2F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8394,7 +8023,6 @@ L_0892F2F4: } L_0892F2FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8402,7 +8030,6 @@ L_0892F2FC: } L_0892F304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8410,7 +8037,6 @@ L_0892F304: } L_0892F30C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8433,7 +8059,6 @@ L_0892F314: AOT_REGCACHE_SYNC_OUT(); return; L_0892F344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8472,7 +8097,6 @@ L_0892F380: L_0892F3AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0892F3F4; } @@ -8482,7 +8106,6 @@ L_0892F3B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892F3F4; } @@ -8492,7 +8115,6 @@ L_0892F3C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892F3F4; } @@ -8515,7 +8137,6 @@ L_0892F3E8: goto L_0892F3F4; L_0892F3F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8547,7 +8168,6 @@ L_0892F42C: AOT_REGCACHE_SYNC_OUT(); return; L_0892F444: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8579,7 +8199,6 @@ L_0892F47C: AOT_REGCACHE_SYNC_OUT(); return; L_0892F494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8630,7 +8249,6 @@ L_0892F4E4: L_0892F500: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0892F544; } @@ -8639,7 +8257,6 @@ L_0892F500: L_0892F50C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0892F544; } @@ -8649,7 +8266,6 @@ L_0892F518: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0892F544; } @@ -8672,7 +8288,6 @@ L_0892F538: goto L_0892F544; L_0892F544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8713,7 +8328,6 @@ L_0892F574: AOT_REGCACHE_SYNC_OUT(); return; L_0892F5A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8745,7 +8359,6 @@ L_0892F5D0: goto L_0892F5EC; L_0892F5EC: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_0892F5F8; } @@ -8756,7 +8369,6 @@ L_0892F5F4: goto L_0892F5F8; L_0892F5F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F61C; } @@ -8773,7 +8385,6 @@ L_0892F600: goto L_0892F61C; L_0892F61C: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_0892F628; } @@ -8824,7 +8435,6 @@ L_0892F664: AOT_REGCACHE_SYNC_OUT(); return; L_0892F678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8858,7 +8468,6 @@ L_0892F6A8: goto L_0892F6C8; L_0892F6C8: { const bool branch_taken = ctx.gpr[22] != aot_gpr_5; - // nop if (branch_taken) { goto L_0892F6D4; } @@ -8869,7 +8478,6 @@ L_0892F6D0: goto L_0892F6D4; L_0892F6D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892F6FC; } @@ -8887,7 +8495,6 @@ L_0892F6DC: goto L_0892F6FC; L_0892F6FC: { const bool branch_taken = ctx.gpr[22] != aot_gpr_5; - // nop if (branch_taken) { goto L_0892F708; } @@ -8898,7 +8505,6 @@ L_0892F704: goto L_0892F708; L_0892F708: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892F720; } @@ -8944,7 +8550,6 @@ L_0892F740: AOT_REGCACHE_SYNC_OUT(); return; L_0892F770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -8985,7 +8590,6 @@ L_0892F7A0: AOT_REGCACHE_SYNC_OUT(); return; L_0892F7D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -9115,7 +8719,6 @@ L_0892F8E8: L_0892F8F4: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_14; goto L_0892F914; @@ -9141,7 +8744,6 @@ L_0892F924: goto L_0892F928; L_0892F928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -9192,7 +8794,6 @@ L_0892F97C: goto L_0892F98C; L_0892F98C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -9252,7 +8853,6 @@ L_0892FA10: L_0892FA1C: aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_0892FA3C; @@ -9283,7 +8883,6 @@ L_0892FA4C: } L_0892FA54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -9299,7 +8898,6 @@ L_0892FA5C: AOT_REGCACHE_SYNC_OUT(); return; L_0892FA70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -9341,7 +8939,6 @@ L_0892FAAC: L_0892FACC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0892FBD4; } @@ -9368,7 +8965,6 @@ L_0892FAF0: goto L_0892FB04; L_0892FB04: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0892FBD4; } @@ -9405,7 +9001,6 @@ L_0892FB38: L_0892FB48: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_0892FBD4; } @@ -9461,7 +9056,6 @@ L_0892FBC0: AOT_REGCACHE_SYNC_OUT(); return; L_0892FBD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC54; } @@ -9515,7 +9109,6 @@ L_0892FC44: AOT_REGCACHE_SYNC_OUT(); return; L_0892FC4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0892FC70; } @@ -9531,7 +9124,6 @@ L_0892FC54: } L_0892FC5C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0892FC70; } @@ -9562,7 +9154,17 @@ L_0892FC70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0892FCA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-960)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -9738,7 +9340,6 @@ L_0892FCA4: AOT_REGCACHE_SYNC_OUT(); return; L_0892FE0C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892FEA4; } @@ -9839,7 +9440,6 @@ L_0892FE14: AOT_REGCACHE_SYNC_OUT(); return; L_0892FE94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0892FEA4; } @@ -10039,9 +9639,7 @@ L_0892FEA4: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892FFE8; } @@ -10049,9 +9647,7 @@ L_0892FEA4: } L_0892FFD0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892FFFC; } @@ -10067,9 +9663,7 @@ L_0892FFE0: } L_0892FFE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0892FFFC; } @@ -10080,7 +9674,6 @@ L_0892FFF8: goto L_0892FFFC; L_0892FFFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0075_entry, 75u, 4u, 0x0893002Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0075.cpp b/profiles/vcs/generated/generated_unit_0075.cpp index 22eb1c0..00c07cb 100644 --- a/profiles/vcs/generated/generated_unit_0075.cpp +++ b/profiles/vcs/generated/generated_unit_0075.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0075[4096] = { - 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 0, 28, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 33, 0, - 34, 0, 35, 0, 36, 0, 0, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 0, 0, 42, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 46, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 51, 52, 0, 0, 0, 0, - 0, 0, 53, 0, 54, 0, 0, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 0, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 0, 0, - 65, 0, 0, 0, 66, 0, 67, 0, 0, 0, 68, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 0, - 0, 73, 0, 0, 0, 0, 74, 75, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 80, 0, 81, 0, - 0, 82, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 94, - 0, 0, 0, 95, 0, 0, 0, 96, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 101, 0, 102, 0, 0, 103, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 0, - 0, 112, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 116, 0, 117, 0, 0, 0, 0, - 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, 123, 0, 124, - 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 0, 0, 130, - 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, - 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 145, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 150, 0, 0, 0, 0, 0, 0, 0, 151, 152, 0, 153, 0, 0, 0, 154, 0, - 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 159, 0, - 160, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, - 164, 0, 0, 0, 165, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 168, 0, 169, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 172, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, - 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, 185, 186, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, - 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, - 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 197, - 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 202, 0, 0, 0, 0, 203, 0, 0, 204, 0, 0, 0, 0, 0, 205, 0, - 206, 0, 0, 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, - 211, 0, 212, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 218, 219, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 222, 223, 0, 224, 0, 225, 0, 0, 226, 0, - 0, 0, 0, 0, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, 0, 232, 0, 233, 0, 234, 0, 0, - 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 238, 0, 239, 0, 240, 241, 0, 0, 0, 0, 242, 0, 0, 0, 243, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 247, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 252, - 253, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 256, 0, 0, 257, 0, 0, 0, 258, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 261, 0, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 273, 0, 0, 274, 0, 275, 0, 0, 0, 276, 0, 277, 0, 0, 278, 0, 279, 0, 0, 0, 280, 0, 281, 0, 0, 282, 0, 283, 0, 0, 0, 284, - 0, 285, 0, 0, 0, 286, 0, 287, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, 290, 0, 291, 0, 292, 0, 293, 0, 0, 0, 294, 0, 295, 0, - 0, 0, 296, 0, 297, 0, 298, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, - 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 307, 0, 0, 0, 308, - 0, 0, 309, 0, 0, 0, 310, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 315, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 0, 319, 0, 0, 320, 0, 0, 321, 0, 0, 322, 323, 0, 324, 0, 0, 0, 0, - 325, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 328, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 334, 0, - 0, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 0, 344, 0, 0, - 0, 345, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 350, 0, 351, 352, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, - 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, 360, 0, 361, 0, - 0, 362, 0, 0, 363, 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 0, 367, 0, 368, 369, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 0, 372, - 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 380, 0, 381, - 0, 0, 0, 0, 382, 0, 0, 0, 383, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 388, 0, 389, 0, 0, - 0, 0, 390, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, - 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 411, 0, - 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 415, 0, 0, 416, 417, 0, 0, 0, 418, 0, 0, 419, 0, 420, 0, 0, 421, 422, 0, - 0, 423, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, - 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 0, 0, 436, 0, 0, 0, 0, 437, 0, 438, 0, 439, 0, 440, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 446, 0, 447, - 0, 448, 0, 0, 449, 0, 450, 0, 451, 0, 452, 0, 0, 453, 0, 454, 0, 455, 0, 0, 0, 456, 0, 0, 457, 0, 458, 0, 459, 0, 460, 0, - 0, 461, 0, 462, 0, 463, 0, 464, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 468, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 0, 473, 0, - 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, - 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, - 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 485, - 0, 0, 486, 0, 0, 487, 0, 488, 0, 489, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, - 0, 493, 0, 0, 494, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 499, 0, 0, 500, 0, 0, 0, 0, 501, - 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, 0, - 515, 0, 0, 0, 516, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, 521, - 522, 0, 523, 0, 524, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 527, 0, 0, 528, 0, 529, 0, 530, 0, 531, 0, 0, 532, 0, 0, - 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 537, 0, 538, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 541, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 543, 0, 544, 0, 0, 545, 0, 546, 0, - 547, 0, 548, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 553, 0, 0, 0, 554, 0, 0, 0, - 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 560, 0, - 0, 561, 0, 0, 562, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 565, 0, 0, 566, 0, 567, 0, 568, 0, 0, 569, 570, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 573, 0, 574, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, - 578, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 583, 0, 584, 0, 0, 585, 0, 586, 0, 587, 0, 0, - 0, 0, 588, 0, 0, 589, 0, 590, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 593, 0, - 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, - 599, 0, 0, 0, 0, 0, 600, 601, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 605, 0, 0, 606, 0, 607, 608, 0, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 611, 0, 612, 0, 613, 0, 0, 0, 0, 0, - 0, 614, 0, 615, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 617, 0, 0, 0, 0, 0, 618, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, - 621, 0, 622, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 0, 628, 629, - 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 634, 0, 0, 0, 635, 636, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 640, - 0, 0, 0, 0, 0, 641, 642, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, - 646, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, - 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 668, 0, 669, 670, 0, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 673, 0, 0, 674, 0, 675, 0, 0, 676, 0, 0, 677, 0, 678, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 685, - 0, 686, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 690, 0, 0, 691, 0, 692, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, - 695, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, - 701, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 705, 0, 0, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 708, 0, 0, 0, 0, 709, 0, 0, - 0, 710, 0, 0, 0, 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, 0, - 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 0, 0, 724, 0, 0, 0, 725, 0, 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, - 0, 0, 0, 0, 0, 0, 0, 736, 737, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 740, 0, 0, 0, 741, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 744, 0, 745, 0, 746, 0, 0, 0, 0, 0, 747, 748, 0, - 749, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, - 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 755, 756, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, - 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 761, 0, 0, 0, 762, 0, 0, 0, 763, 764, 0, 765, 0, - 0, 0, 0, 0, 0, 766, 0, 0, 0, 767, 0, 0, 0, 768, 0, 0, 769, 0, 770, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0075[64] = { + 0x0A00000802002A03ull, 0x0A00000000000800ull, 0xA000004040000800ull, 0x0112000100140000ull, + 0x5104350000001002ull, 0x0C210402C5115515ull, 0x10402C5115515514ull, 0x0001804250A240C2ull, + 0xA811000000080148ull, 0x0080820812A22288ull, 0x0A4200062040A000ull, 0x82820410A8210408ull, + 0x0400112028000008ull, 0x0A0B015001010000ull, 0x408100A04580A800ull, 0x0254211101400009ull, + 0x0082200110822044ull, 0x4202104040058310ull, 0x41215012B0000008ull, 0x30A1021504020141ull, + 0x2A2205204AC44000ull, 0x15008000886A2204ull, 0x00008201A1000140ull, 0x0092AA4008001890ull, + 0x8A514A2900042081ull, 0x10A80154515414A2ull, 0x2410224489002002ull, 0x44454A210B249500ull, + 0x091A511225548888ull, 0x848D2492508A8004ull, 0x28488910A1222442ull, 0x0412244142A22244ull, + 0x6523290244490020ull, 0x4200404008200082ull, 0x0810400410000000ull, 0x5522A552A9152A84ull, + 0x200010804AA454AAull, 0xC010044020801010ull, 0x8489091204008AA4ull, 0x2A0840800040292Aull, + 0x255281158A000231ull, 0x528086004A808404ull, 0x5089000111420425ull, 0x202154100654A092ull, + 0x404002A42A550821ull, 0x008810C120284020ull, 0x0430480A054104D2ull, 0x04010050C1202815ull, + 0x0000106090140310ull, 0x1000000000000008ull, 0x4000848822108841ull, 0x0400000280005000ull, + 0x0080002000014000ull, 0x0404292900082682ull, 0x0010104290008220ull, 0x010A410100802148ull, + 0x2111044000100101ull, 0x2000810000000422ull, 0x1108220000000000ull, 0x0140000010910442ull, + 0x4080804000005000ull, 0x60A9200088408180ull, 0x2010340120004201ull, 0x800D2220588A0008ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0075[64] = { + 1u, 10u, 13u, 18u, 24u, 34u, 53u, 73u, 86u, 95u, 108u, 118u, 131u, 138u, 148u, 160u, + 172u, 182u, 194u, 206u, 220u, 235u, 248u, 256u, 269u, 285u, 304u, 316u, 335u, 355u, 373u, 390u, + 406u, 423u, 431u, 436u, 461u, 477u, 486u, 502u, 515u, 533u, 547u, 561u, 578u, 594u, 605u, 621u, + 634u, 644u, 646u, 658u, 663u, 667u, 681u, 690u, 701u, 710u, 716u, 721u, 730u, 736u, 749u, 759u, }; void recomp_unit_0075_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0075_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08930000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0075[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0075[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0075[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08930000; @@ -944,7 +851,6 @@ LOCAL_DISPATCH: } } L_08930000: - // nop goto L_08930004; L_08930004: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); @@ -954,7 +860,6 @@ L_08930004: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08930034; } @@ -962,7 +867,6 @@ L_08930004: } L_08930024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930064; } @@ -999,7 +903,6 @@ L_08930034: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(296), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893008C; } @@ -1085,7 +988,6 @@ L_0893008C: AOT_REGCACHE_SYNC_OUT(); return; L_089300E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893012C; } @@ -1148,7 +1050,6 @@ L_089300EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930350; } @@ -1306,7 +1207,6 @@ L_0893012C: AOT_REGCACHE_SYNC_OUT(); return; L_089301E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893022C; } @@ -1369,7 +1269,6 @@ L_089301EC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930350; } @@ -1424,7 +1323,6 @@ L_0893022C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(520), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930298; } @@ -1438,7 +1336,6 @@ L_08930278: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089302FC; } @@ -1481,9 +1378,7 @@ L_08930298: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089302FC; } @@ -1538,7 +1433,6 @@ L_089302FC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08930348u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08930348u) goto L_08930348; AOT_REGCACHE_SYNC_OUT(); return; L_08930348: @@ -1564,7 +1458,17 @@ L_08930350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08930380: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1592,7 +1496,6 @@ L_08930380: L_089303C4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089303E0; } @@ -1602,7 +1505,6 @@ L_089303D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089304A8; } @@ -1714,7 +1616,6 @@ L_08930430: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (0u + static_cast(-5)); if (branch_taken) { @@ -1724,7 +1625,6 @@ L_08930430: } L_089304A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089304B4; } @@ -1732,7 +1632,6 @@ L_089304A0: } L_089304A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930820; } @@ -1766,7 +1665,6 @@ L_089304E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930510; } @@ -1774,7 +1672,6 @@ L_089304E0: } L_089304F0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08930510; } @@ -1782,7 +1679,6 @@ L_089304F0: } L_089304F8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08930508; } @@ -1816,7 +1712,6 @@ L_08930510: } L_08930520: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08930540; } @@ -1824,7 +1719,6 @@ L_08930520: } L_08930528: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08930538; } @@ -1850,7 +1744,6 @@ L_08930540: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930568; } @@ -1883,7 +1776,6 @@ L_08930578: goto L_0893057C; L_0893057C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930608; } @@ -1915,7 +1807,6 @@ L_089305A8: L_089305C0: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_14 - aot_fpr_12; goto L_089305EC; @@ -1924,7 +1815,6 @@ L_089305C0: L_089305D4: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089305E8; @@ -1945,7 +1835,6 @@ L_089305EC: AOT_REGCACHE_SYNC_OUT(); return; L_08930608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930738; } @@ -1963,7 +1852,6 @@ L_08930610: } L_08930620: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08930640; } @@ -1971,7 +1859,6 @@ L_08930620: } L_08930628: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08930638; } @@ -1997,7 +1884,6 @@ L_08930640: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930670; } @@ -2005,7 +1891,6 @@ L_08930640: } L_08930650: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08930670; } @@ -2013,7 +1898,6 @@ L_08930650: } L_08930658: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08930668; } @@ -2039,7 +1923,6 @@ L_08930670: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930698; } @@ -2072,7 +1955,6 @@ L_089306A8: goto L_089306AC; L_089306AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930738; } @@ -2104,7 +1986,6 @@ L_089306D8: L_089306F0: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = aot_fpr_14 - aot_fpr_12; goto L_0893071C; @@ -2113,7 +1994,6 @@ L_089306F0: L_08930704: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08930718; @@ -2148,7 +2028,6 @@ L_08930744: AOT_REGCACHE_SYNC_OUT(); return; L_08930754: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089307BC; } @@ -2215,7 +2094,6 @@ L_089307C0: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(472), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930820; } @@ -2224,7 +2102,6 @@ L_089307C0: L_0893080C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930820; } @@ -2253,7 +2130,17 @@ L_08930820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893084C: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(424), std::bit_cast(ctx.fpr[24])); @@ -2291,7 +2178,6 @@ L_089308C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089308F4; } @@ -2304,7 +2190,6 @@ L_089308D0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089308FC; } @@ -2312,7 +2197,6 @@ L_089308D0: } L_089308EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930944; } @@ -2330,7 +2214,6 @@ L_089308FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0893091C; } @@ -2340,7 +2223,6 @@ L_0893090C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08930924; } @@ -2358,7 +2240,6 @@ L_08930924: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08930944; } @@ -2368,7 +2249,6 @@ L_08930934: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0893095C; } @@ -2485,7 +2365,6 @@ L_089309DC: AOT_REGCACHE_SYNC_OUT(); return; L_08930A34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08930BE4; } @@ -2496,7 +2375,6 @@ L_08930A3C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); goto L_08930A88; @@ -2507,9 +2385,7 @@ L_08930A58: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08930BE4; } @@ -2519,7 +2395,6 @@ L_08930A74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08930BE4; } @@ -2563,7 +2438,6 @@ L_08930AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08930AE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08930BC4; } @@ -2577,7 +2451,6 @@ L_08930AEC: aot_gpr_4 = (8192u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08930B28; } @@ -2588,9 +2461,7 @@ L_08930B0C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08930B54; } @@ -2633,7 +2504,6 @@ L_08930B6C: AOT_REGCACHE_SYNC_OUT(); return; L_08930B74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08930B90; } @@ -2642,9 +2512,7 @@ L_08930B74: L_08930B7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08930BDC; } @@ -2677,7 +2545,6 @@ L_08930BA8: aot_gpr_4 = (aot_gpr_4 | 1u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930BDC; } @@ -2693,7 +2560,6 @@ L_08930BC4: goto L_08930BDC; L_08930BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08930BFC; } @@ -2820,9 +2686,7 @@ L_08930CB0: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089313F0; } @@ -2925,7 +2789,6 @@ L_08930DCC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08930E60; } @@ -2933,7 +2796,6 @@ L_08930DCC: } L_08930DE4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08930E60; } @@ -2990,7 +2852,6 @@ L_08930E5C: goto L_08930E60; L_08930E60: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089313DC; } @@ -3011,9 +2872,7 @@ L_08930E78: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08930EC0; } @@ -3034,9 +2893,7 @@ L_08930E9C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089310B4; } @@ -3062,7 +2919,6 @@ L_08930EDC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930FD0; } @@ -3150,7 +3006,6 @@ L_08930F60: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08930FB4; } @@ -3160,7 +3015,6 @@ L_08930F80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08930FA0; } @@ -3170,7 +3024,6 @@ L_08930F90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08930FB4; } @@ -3196,7 +3049,6 @@ L_08930FB4: goto L_08930FC8; L_08930FC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931008; } @@ -3231,7 +3083,6 @@ L_08931008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08931034; } @@ -3242,9 +3093,7 @@ L_08931018: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08931070; } @@ -3254,7 +3103,6 @@ L_08931034: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08931070; } @@ -3353,7 +3201,6 @@ L_089310DC: aot_gpr_6 = (aot_gpr_6 | 62915u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); goto L_08931124; @@ -3374,9 +3221,7 @@ L_08931124: aot_gpr_6 = (48768u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08931300; } @@ -3387,7 +3232,6 @@ L_0893113C: goto L_08931140; L_08931140: { const bool branch_taken = aot_gpr_6 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08931300; } @@ -3403,7 +3247,6 @@ L_08931148: aot_gpr_5 = (48768u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08931178; @@ -3415,7 +3258,6 @@ L_08931178: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[24])); if (branch_taken) { @@ -3434,7 +3276,6 @@ L_08931198: L_089311B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (0u | 2u); if (branch_taken) { @@ -3448,9 +3289,7 @@ L_089311C4: aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893120C; } @@ -3459,9 +3298,7 @@ L_089311C4: L_089311E4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893120C; } @@ -3470,9 +3307,7 @@ L_089311E4: L_089311F8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08931274; } @@ -3527,7 +3362,6 @@ L_08931274: AOT_REGCACHE_SYNC_OUT(); return; L_0893127C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08931290; } @@ -3565,9 +3399,7 @@ L_089312B8: L_089312C0: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089312F8; } @@ -3590,7 +3422,6 @@ L_089312E0: AOT_REGCACHE_SYNC_OUT(); return; L_089312F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931368; } @@ -3602,7 +3433,6 @@ L_08931300: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08931368; } @@ -3623,9 +3453,7 @@ L_08931320: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08931368; } @@ -3661,7 +3489,6 @@ L_08931380: AOT_REGCACHE_SYNC_OUT(); return; L_08931388: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089313A4; } @@ -3670,9 +3497,7 @@ L_08931388: L_08931390: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089313D4; } @@ -3708,7 +3533,6 @@ L_089313C0: goto L_089313D4; L_089313D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089313F0; } @@ -3776,7 +3600,6 @@ L_08931448: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893145C; } @@ -3787,7 +3610,6 @@ L_08931458: goto L_0893145C; L_0893145C: { const bool branch_taken = static_cast(ctx.gpr[19]) > 0; - // nop if (branch_taken) { goto L_0893146C; } @@ -3795,7 +3617,6 @@ L_0893145C: } L_08931464: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08931508; } @@ -3814,7 +3635,6 @@ L_08931478: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089314A0; } @@ -3828,7 +3648,6 @@ L_08931494: AOT_REGCACHE_SYNC_OUT(); return; L_089314A0: { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_08931508; } @@ -3841,7 +3660,6 @@ L_089314A8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089314F4; } @@ -3873,7 +3691,6 @@ L_089314E4: goto L_089314EC; L_089314EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08931508; } @@ -3923,7 +3740,6 @@ L_08931544: goto L_0893154C; L_0893154C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893172C; } @@ -3937,7 +3753,6 @@ L_08931558: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893172C; } @@ -3978,7 +3793,6 @@ L_089315BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(276), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(280), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4005,7 +3819,6 @@ L_089315F0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(320))); goto L_08931620; @@ -4040,9 +3853,7 @@ L_08931620: L_08931660: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089316BC; } @@ -4066,9 +3877,7 @@ L_08931680: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089316BC; } @@ -4114,7 +3923,6 @@ L_089316BC: aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(30))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893171C; } @@ -4160,7 +3968,17 @@ L_08931730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893176C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), aot_gpr_16); @@ -4172,7 +3990,6 @@ L_0893176C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089319F0; } @@ -4213,7 +4030,6 @@ L_089317B4: } L_089317BC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08931960; } @@ -4268,9 +4084,7 @@ L_0893181C: L_08931834: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893188C; } @@ -4301,7 +4115,6 @@ L_08931880: AOT_REGCACHE_SYNC_OUT(); return; L_0893188C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089319F0; } @@ -4316,7 +4129,6 @@ L_08931894: AOT_REGCACHE_SYNC_OUT(); return; L_089318A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089318C0; } @@ -4330,7 +4142,6 @@ L_089318AC: AOT_REGCACHE_SYNC_OUT(); return; L_089318B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931958; } @@ -4345,7 +4156,6 @@ L_089318C0: AOT_REGCACHE_SYNC_OUT(); return; L_089318D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089318EC; } @@ -4359,7 +4169,6 @@ L_089318D8: AOT_REGCACHE_SYNC_OUT(); return; L_089318E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931958; } @@ -4374,7 +4183,6 @@ L_089318EC: AOT_REGCACHE_SYNC_OUT(); return; L_089318FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893191C; } @@ -4389,7 +4197,6 @@ L_08931904: AOT_REGCACHE_SYNC_OUT(); return; L_08931914: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08931930; } @@ -4403,7 +4210,6 @@ L_0893191C: AOT_REGCACHE_SYNC_OUT(); return; L_08931928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931958; } @@ -4425,7 +4231,6 @@ L_08931948: AOT_REGCACHE_SYNC_OUT(); return; L_08931950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089319F0; } @@ -4433,7 +4238,6 @@ L_08931950: } L_08931958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089319F0; } @@ -4448,7 +4252,6 @@ L_08931960: AOT_REGCACHE_SYNC_OUT(); return; L_08931970: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08931990; } @@ -4458,7 +4261,6 @@ L_08931978: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08931998; } @@ -4466,7 +4268,6 @@ L_08931978: } L_08931988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089319CC; } @@ -4474,7 +4275,6 @@ L_08931988: } L_08931990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089319F0; } @@ -4532,7 +4332,17 @@ L_089319F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08931A04: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (48896u << 16u); @@ -4549,7 +4359,17 @@ L_08931A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08931A34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -4617,7 +4437,17 @@ L_08931AB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08931AD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -4633,7 +4463,17 @@ L_08931AE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08931AF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -4668,7 +4508,6 @@ L_08931B30: L_08931B3C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08931C0C; } @@ -4694,7 +4533,6 @@ L_08931B60: goto L_08931B64; L_08931B64: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08931B80; } @@ -4727,7 +4565,6 @@ L_08931B94: AOT_REGCACHE_SYNC_OUT(); return; L_08931BA4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08931BC0; } @@ -4736,7 +4573,6 @@ L_08931BA4: L_08931BAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08931BD8; } @@ -4770,7 +4606,6 @@ L_08931BC8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931CEC; } @@ -4805,7 +4640,6 @@ L_08931BF8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931CEC; } @@ -4853,7 +4687,6 @@ L_08931C50: AOT_REGCACHE_SYNC_OUT(); return; L_08931C58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08931C84; } @@ -4965,7 +4798,17 @@ L_08931CEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08931D08: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -4980,7 +4823,6 @@ L_08931D08: AOT_REGCACHE_SYNC_OUT(); return; L_08931D3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08931D78; } @@ -5011,7 +4853,6 @@ L_08931D5C: } L_08931D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931DCC; } @@ -5080,7 +4921,6 @@ L_08931DDC: L_08931DE8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17279u << 16u); if (branch_taken) { @@ -5099,7 +4939,6 @@ L_08931DFC: L_08931E04: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08931E18; @@ -5107,7 +4946,6 @@ L_08931E04: goto L_08931E18; L_08931E18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08931E34; @@ -5144,7 +4982,6 @@ L_08931E54: L_08931E60: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17279u << 16u); if (branch_taken) { @@ -5163,7 +5000,6 @@ L_08931E74: L_08931E7C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08931E90; @@ -5171,7 +5007,6 @@ L_08931E7C: goto L_08931E90; L_08931E90: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08931EAC; @@ -5208,7 +5043,6 @@ L_08931ECC: L_08931ED8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17279u << 16u); if (branch_taken) { @@ -5227,7 +5061,6 @@ L_08931EEC: L_08931EF4: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08931F08; @@ -5235,7 +5068,6 @@ L_08931EF4: goto L_08931F08; L_08931F08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08931F24; @@ -5286,7 +5118,6 @@ L_08931F5C: L_08931F64: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08931F80; @@ -5294,7 +5125,6 @@ L_08931F64: goto L_08931F78; L_08931F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08931F98; } @@ -5304,7 +5134,6 @@ L_08931F80: aot_gpr_4 = (17279u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08931F98; @@ -5312,7 +5141,6 @@ L_08931F80: goto L_08931F98; L_08931F98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[22] - aot_fpr_20; goto L_08931FB4; @@ -5365,7 +5193,17 @@ L_08931FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932014: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -5383,7 +5221,6 @@ L_08932014: L_08932040: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08932068; } @@ -5436,7 +5273,6 @@ L_089320A0: AOT_REGCACHE_SYNC_OUT(); return; L_089320AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089320C4; } @@ -5466,7 +5302,6 @@ L_089320D4: AOT_REGCACHE_SYNC_OUT(); return; L_089320E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089320F8; } @@ -5500,7 +5335,17 @@ L_08932104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893211C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5578,7 +5423,17 @@ L_08932198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089321B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), aot_gpr_16); @@ -5645,7 +5500,17 @@ L_08932270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932288: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5708,7 +5573,17 @@ L_089322EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -5720,7 +5595,6 @@ L_08932308: goto L_0893231C; L_0893231C: aot_gpr_31 = (0x08932324u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932324u) goto L_08932324; AOT_REGCACHE_SYNC_OUT(); return; L_08932324: @@ -5743,7 +5617,6 @@ L_08932334: } L_08932340: aot_gpr_31 = (0x08932348u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932348u) goto L_08932348; AOT_REGCACHE_SYNC_OUT(); return; L_08932348: @@ -5766,7 +5639,6 @@ L_08932360: goto L_0893236C; L_0893236C: aot_gpr_31 = (0x08932374u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932374u) goto L_08932374; AOT_REGCACHE_SYNC_OUT(); return; L_08932374: @@ -5787,7 +5659,6 @@ L_08932384: goto L_08932390; L_08932390: aot_gpr_31 = (0x08932398u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932398u) goto L_08932398; AOT_REGCACHE_SYNC_OUT(); return; L_08932398: @@ -5810,7 +5681,6 @@ L_089323A8: } L_089323B4: aot_gpr_31 = (0x089323BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089323BCu) goto L_089323BC; AOT_REGCACHE_SYNC_OUT(); return; L_089323BC: @@ -5833,7 +5703,6 @@ L_089323D4: goto L_089323E0; L_089323E0: aot_gpr_31 = (0x089323E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089323E8u) goto L_089323E8; AOT_REGCACHE_SYNC_OUT(); return; L_089323E8: @@ -5854,7 +5723,6 @@ L_089323F8: goto L_08932404; L_08932404: aot_gpr_31 = (0x0893240Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893240Cu) goto L_0893240C; AOT_REGCACHE_SYNC_OUT(); return; L_0893240C: @@ -5877,7 +5745,6 @@ L_0893241C: } L_08932428: aot_gpr_31 = (0x08932430u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932430u) goto L_08932430; AOT_REGCACHE_SYNC_OUT(); return; L_08932430: @@ -5900,7 +5767,6 @@ L_08932448: goto L_08932454; L_08932454: aot_gpr_31 = (0x0893245Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893245Cu) goto L_0893245C; AOT_REGCACHE_SYNC_OUT(); return; L_0893245C: @@ -5919,7 +5785,17 @@ L_0893246C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932478: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5972,7 +5848,17 @@ L_089324F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932510: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6010,7 +5896,17 @@ L_0893255C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932574: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6020,7 +5916,6 @@ L_08932574: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_31 = (0x08932598u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08807098, 0u, 451u, 0x08807098u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 451u, 0x08807098u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932598u) goto L_08932598; AOT_REGCACHE_SYNC_OUT(); return; L_08932598: @@ -6031,7 +5926,17 @@ L_08932598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089325A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6042,7 +5947,6 @@ L_089325A8: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08932624; } @@ -6083,12 +5987,10 @@ L_08932608: goto L_08932614; L_08932614: aot_gpr_31 = (0x0893261Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806DC0, 0u, 425u, 0x08806DC0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 425u, 0x08806DC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893261Cu) goto L_0893261C; AOT_REGCACHE_SYNC_OUT(); return; L_0893261C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893262C; } @@ -6096,7 +5998,6 @@ L_0893261C: } L_08932624: aot_gpr_31 = (0x0893262Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 424u, 0x08806DA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893262Cu) goto L_0893262C; AOT_REGCACHE_SYNC_OUT(); return; L_0893262C: @@ -6107,7 +6008,17 @@ L_0893262C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893263C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6123,7 +6034,6 @@ L_08932668: aot_gpr_4 = (20224u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08932690; @@ -6153,7 +6063,6 @@ L_089326A0: L_089326AC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_089326CC; @@ -6185,7 +6094,6 @@ L_089326E8: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.gpr[18] = (ctx.gpr[18] & ctx.gpr[17]); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08932704; } @@ -6201,7 +6109,6 @@ L_089326FC: } L_08932704: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08932714; } @@ -6246,7 +6153,17 @@ L_08932734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932758: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6288,7 +6205,17 @@ L_089327B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089327CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6300,7 +6227,6 @@ L_089327CC: AOT_REGCACHE_SYNC_OUT(); return; L_089327E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089327F4; } @@ -6324,7 +6250,6 @@ L_08932800: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[0])); aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08932810u); - // nop goto L_08932758; L_08932810: ctx.gpr[2] = (0u | 0u); @@ -6337,7 +6262,17 @@ L_08932814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); @@ -6369,7 +6304,6 @@ L_0893286C: aot_gpr_6 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08932864; } @@ -6380,7 +6314,6 @@ L_0893287C: goto L_08932880; L_08932880: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08932890; } @@ -6388,7 +6321,6 @@ L_08932880: } L_08932888: aot_gpr_31 = (0x08932890u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932890u) goto L_08932890; AOT_REGCACHE_SYNC_OUT(); return; L_08932890: @@ -6399,7 +6331,17 @@ L_08932890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089328A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6411,7 +6353,6 @@ L_089328A0: AOT_REGCACHE_SYNC_OUT(); return; L_089328BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089328E0; } @@ -6425,7 +6366,6 @@ L_089328C4: AOT_REGCACHE_SYNC_OUT(); return; L_089328D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089328E8; } @@ -6483,7 +6423,17 @@ L_08932928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893293C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6496,7 +6446,6 @@ L_0893293C: AOT_REGCACHE_SYNC_OUT(); return; L_0893295C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893296C; } @@ -6545,7 +6494,17 @@ L_089329A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089329BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6558,7 +6517,6 @@ L_089329BC: AOT_REGCACHE_SYNC_OUT(); return; L_089329DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08932A00; } @@ -6572,7 +6530,6 @@ L_089329E4: AOT_REGCACHE_SYNC_OUT(); return; L_089329F0: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08932A08; } @@ -6629,19 +6586,38 @@ L_08932A44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932A58: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932A60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08932A70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 696u, 0x08AD3BF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932A70u) goto L_08932A70; AOT_REGCACHE_SYNC_OUT(); return; L_08932A70: @@ -6652,7 +6628,17 @@ L_08932A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932A80: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6693,7 +6679,6 @@ L_08932AF0: L_08932AF8: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08932B58; } @@ -6708,7 +6693,6 @@ L_08932B04: L_08932B10: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08932B50; } @@ -6736,7 +6720,6 @@ L_08932B1C: AOT_REGCACHE_SYNC_OUT(); return; L_08932B34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08932B50; } @@ -6790,7 +6773,17 @@ L_08932B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932B90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6810,7 +6803,6 @@ L_08932BA8: AOT_REGCACHE_SYNC_OUT(); return; L_08932BB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08932BC0; } @@ -6830,7 +6822,17 @@ L_08932BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6871,7 +6873,17 @@ L_08932C14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932C2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6883,7 +6895,6 @@ L_08932C2C: goto L_08932C40; L_08932C40: aot_gpr_31 = (0x08932C48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932C48u) goto L_08932C48; AOT_REGCACHE_SYNC_OUT(); return; L_08932C48: @@ -6904,7 +6915,6 @@ L_08932C58: goto L_08932C64; L_08932C64: aot_gpr_31 = (0x08932C6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932C6Cu) goto L_08932C6C; AOT_REGCACHE_SYNC_OUT(); return; L_08932C6C: @@ -6926,21 +6936,50 @@ L_08932C88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932C94: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(8886), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932C9C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932CA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6984,7 +7023,17 @@ L_08932CF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7045,7 +7094,6 @@ L_08932D80: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08932D9C; } @@ -7063,7 +7111,17 @@ L_08932D9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932DB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -7082,7 +7140,17 @@ L_08932DCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932DDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7105,7 +7173,6 @@ L_08932E04: goto L_08932E10; L_08932E10: aot_gpr_31 = (0x08932E18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932E18u) goto L_08932E18; AOT_REGCACHE_SYNC_OUT(); return; L_08932E18: @@ -7130,7 +7197,17 @@ L_08932E28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932E40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); @@ -7145,7 +7222,6 @@ L_08932E40: } L_08932E58: aot_gpr_31 = (0x08932E60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932E60u) goto L_08932E60; AOT_REGCACHE_SYNC_OUT(); return; L_08932E60: @@ -7203,7 +7279,6 @@ L_08932EB8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08932ED4; } @@ -7221,7 +7296,17 @@ L_08932ED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932EE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); @@ -7236,7 +7321,6 @@ L_08932EE8: } L_08932F00: aot_gpr_31 = (0x08932F08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08932F08u) goto L_08932F08; AOT_REGCACHE_SYNC_OUT(); return; L_08932F08: @@ -7294,7 +7378,6 @@ L_08932F60: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08932F7C; } @@ -7312,14 +7395,34 @@ L_08932F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932F90: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932F98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7350,7 +7453,17 @@ L_08932FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08932FE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7429,7 +7542,6 @@ L_0893307C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08933098; } @@ -7451,7 +7563,17 @@ L_08933098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089330B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7566,7 +7688,6 @@ L_0893310C: ctx.fpr[26] = std::bit_cast(ctx.gpr[8]); { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[26] = std::bit_cast(0x7FC00000u); else ctx.fpr[26] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = std::bit_cast(0u); if (branch_taken) { @@ -7595,7 +7716,6 @@ L_08933200: L_08933218: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); goto L_0893323C; @@ -7621,7 +7741,6 @@ L_0893323C: L_08933250: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); if (branch_taken) { @@ -7649,7 +7768,6 @@ L_08933274: goto L_0893328C; L_0893328C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[9]); if (branch_taken) { @@ -7729,7 +7847,6 @@ L_089332BC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089333E8; } @@ -7753,7 +7870,6 @@ L_089332F8: AOT_REGCACHE_SYNC_OUT(); return; L_08933330: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089333E8; } @@ -7785,9 +7901,7 @@ L_08933338: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), std::bit_cast(aot_fpr_12)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08933384; } @@ -7861,7 +7975,6 @@ L_089333E8: AOT_REGCACHE_SYNC_OUT(); return; L_08933438: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08933494; } @@ -7916,7 +8029,17 @@ L_08933494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089334DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7942,7 +8065,6 @@ L_08933504: goto L_0893351C; L_0893351C: aot_gpr_31 = (0x08933524u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08933524u) goto L_08933524; AOT_REGCACHE_SYNC_OUT(); return; L_08933524: @@ -7967,7 +8089,17 @@ L_08933534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893354C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7995,7 +8127,6 @@ L_08933580: } L_0893358C: aot_gpr_31 = (0x08933594u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08933594u) goto L_08933594; AOT_REGCACHE_SYNC_OUT(); return; L_08933594: @@ -8007,7 +8138,6 @@ L_08933594: L_089335A0: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_089335B4; } @@ -8040,7 +8170,17 @@ L_089335C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089335E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8075,7 +8215,17 @@ L_08933624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893363C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8103,7 +8253,6 @@ L_08933670: } L_0893367C: aot_gpr_31 = (0x08933684u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08933684u) goto L_08933684; AOT_REGCACHE_SYNC_OUT(); return; L_08933684: @@ -8138,7 +8287,17 @@ L_089336B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089336D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8168,7 +8327,6 @@ L_0893370C: } L_08933718: aot_gpr_31 = (0x08933720u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08933720u) goto L_08933720; AOT_REGCACHE_SYNC_OUT(); return; L_08933720: @@ -8208,7 +8366,17 @@ L_0893375C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933780: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8254,7 +8422,17 @@ L_089337CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089337E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8278,7 +8456,17 @@ L_08933800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933820: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -8340,7 +8528,6 @@ L_089338A8: goto L_089338C0; L_089338C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = ctx.fpr[15] - aot_fpr_12; goto L_089338E0; @@ -8365,7 +8552,6 @@ L_089338E0: goto L_089338F4; L_089338F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - aot_fpr_12; goto L_08933914; @@ -8435,7 +8621,17 @@ L_089339A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089339BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8534,7 +8730,6 @@ L_089339F4: ctx.gpr[8] = (20224u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(144)); if (branch_taken) { @@ -8563,7 +8758,6 @@ L_08933AB4: L_08933ACC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); goto L_08933AF0; @@ -8589,7 +8783,6 @@ L_08933AF0: L_08933B04: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); if (branch_taken) { @@ -8617,7 +8810,6 @@ L_08933B28: goto L_08933B40; L_08933B40: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[9]); if (branch_taken) { @@ -8711,7 +8903,6 @@ L_08933B70: AOT_REGCACHE_SYNC_OUT(); return; L_08933BD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08933C98; } @@ -8746,9 +8937,7 @@ L_08933BE0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), std::bit_cast(aot_fpr_13)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08933C38; } @@ -8801,7 +8990,17 @@ L_08933C98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933CBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8824,7 +9023,17 @@ L_08933CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933CF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -8834,7 +9043,6 @@ L_08933CF8: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08933D6C; } @@ -8850,7 +9058,6 @@ L_08933D20: aot_gpr_4 = (aot_gpr_4 + static_cast(16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08933D58; } @@ -8885,7 +9092,17 @@ L_08933D6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933D7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -8909,7 +9126,6 @@ L_08933D7C: L_08933DB4: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08933DF8; } @@ -8918,7 +9134,6 @@ L_08933DB4: L_08933DC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08933DD4; } @@ -8926,7 +9141,6 @@ L_08933DC0: } L_08933DCC: aot_gpr_31 = (0x08933DD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08933DD4u) goto L_08933DD4; AOT_REGCACHE_SYNC_OUT(); return; L_08933DD4: @@ -8950,7 +9164,6 @@ L_08933DF4: goto L_08933DF8; L_08933DF8: aot_gpr_31 = (0x08933E00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08933E00u) goto L_08933E00; AOT_REGCACHE_SYNC_OUT(); return; L_08933E00: @@ -8962,7 +9175,6 @@ L_08933E00: aot_gpr_5 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08933DB4; } @@ -8980,7 +9192,17 @@ L_08933E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933E38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -9024,7 +9246,6 @@ L_08933E80: AOT_REGCACHE_SYNC_OUT(); return; L_08933EA8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08933EB4; } @@ -9073,7 +9294,17 @@ L_08933EF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08933F0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -9088,7 +9319,6 @@ L_08933F0C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[19]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08933F78; } @@ -9132,7 +9362,6 @@ L_08933F78: aot_gpr_4 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08933FA4; } @@ -9142,7 +9371,6 @@ L_08933F94: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 3u, 0x0893402Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0076.cpp b/profiles/vcs/generated/generated_unit_0076.cpp index 9e486ce..23a601e 100644 --- a/profiles/vcs/generated/generated_unit_0076.cpp +++ b/profiles/vcs/generated/generated_unit_0076.cpp @@ -23,135 +23,30 @@ static float widen_horizontal_extent(float native_extent) noexcept { vcs::resolve_display_surface_dimensions(config.display); return native_extent * vcs::widescreen_stretch_factor(config, output.width, output.height); } -static const std::uint16_t kEntryIds_recomp_unit_0076[4092] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 13, 14, 0, 15, 16, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 19, 0, 0, - 0, 20, 21, 0, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 38, 39, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, - 0, 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 52, 0, 53, 0, 0, - 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 58, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 63, 0, 64, 0, - 65, 0, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, - 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 0, 0, 80, 0, 81, 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 84, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, - 0, 0, 90, 0, 0, 91, 0, 92, 0, 93, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, - 98, 0, 0, 99, 0, 0, 100, 0, 101, 0, 102, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 0, 107, - 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 114, - 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, - 0, 0, 123, 0, 124, 125, 0, 0, 0, 0, 126, 0, 0, 0, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, - 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 137, 138, 0, 139, 0, 0, 140, 0, 141, 142, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 145, - 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 147, 0, 148, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, 153, - 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 161, 0, 162, - 0, 0, 163, 0, 164, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 169, 0, 170, 0, 171, - 0, 0, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 178, 179, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 184, 0, 185, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 0, 0, 192, 0, 193, 194, 0, 195, - 0, 0, 196, 0, 197, 0, 0, 198, 0, 199, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 0, 207, 0, 208, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, 211, - 0, 212, 0, 0, 213, 0, 0, 214, 0, 215, 216, 217, 0, 218, 0, 219, 0, 0, 220, 0, 0, 221, 0, 0, 222, 0, 223, 224, 0, 225, 0, 226, - 0, 227, 0, 0, 0, 0, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, - 0, 238, 0, 239, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 0, 244, 0, 0, 0, 0, 245, 0, 246, 0, 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 249, 0, 250, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, - 254, 0, 255, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 260, 0, 0, 0, 261, 0, 262, 0, 0, 0, 263, 0, 264, 0, 265, - 0, 266, 267, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 0, 273, 0, 274, - 0, 275, 276, 0, 277, 0, 0, 0, 0, 278, 279, 0, 280, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 283, 0, 284, 0, 285, 286, 0, - 287, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 292, 0, 0, 293, 0, 294, 0, 0, 0, 0, 295, 296, 0, 297, - 0, 0, 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 0, 0, 303, 0, 0, 304, 0, 0, 305, 0, 0, 306, 0, - 0, 307, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 311, 0, 312, 0, 313, 314, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, - 0, 0, 0, 317, 0, 318, 0, 0, 0, 0, 319, 320, 0, 321, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 324, 0, 325, 0, 326, 0, - 0, 327, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 333, 0, 334, 0, - 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 339, 0, 0, - 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 0, 358, 0, 359, 0, 360, 0, 361, 0, - 0, 362, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 367, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, - 0, 371, 0, 372, 0, 373, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 379, - 0, 380, 0, 381, 0, 0, 382, 0, 0, 383, 0, 0, 384, 0, 0, 385, 0, 386, 387, 0, 388, 0, 389, 0, 0, 0, 390, 0, 391, 0, 392, 0, - 0, 393, 0, 0, 394, 0, 0, 395, 0, 396, 397, 0, 398, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, - 405, 0, 406, 407, 0, 408, 0, 409, 0, 0, 0, 410, 0, 0, 411, 0, 0, 412, 0, 0, 413, 0, 414, 415, 0, 416, 0, 417, 0, 0, 0, 418, - 0, 419, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 421, 0, 422, 0, 0, 423, 0, 0, 424, 0, 425, 0, 426, 0, 427, 0, 428, 0, 429, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, - 435, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 439, 0, 440, 0, 441, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, - 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, - 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 458, 0, 0, 0, 459, 0, 0, 460, 461, 462, 0, 463, 0, 464, 0, 0, 465, - 0, 466, 0, 467, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 0, 0, 473, 0, 0, 474, 475, 476, 0, 477, 0, 478, 0, 0, 479, 0, 480, 0, - 481, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, - 0, 0, 0, 487, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 493, - 0, 494, 0, 0, 495, 0, 0, 0, 0, 496, 0, 497, 0, 0, 498, 0, 499, 0, 0, 0, 0, 500, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, - 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 508, 0, 0, 509, 0, 0, 0, 0, 510, 0, 511, 0, 0, - 512, 0, 513, 0, 514, 0, 515, 0, 516, 517, 0, 518, 0, 519, 0, 520, 521, 0, 522, 0, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, - 0, 529, 0, 0, 530, 0, 531, 0, 532, 0, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 0, 0, 538, 0, 539, 0, 540, 0, 0, 0, 0, - 0, 0, 0, 541, 0, 0, 0, 542, 0, 543, 0, 0, 544, 0, 545, 546, 0, 547, 0, 548, 0, 549, 0, 0, 550, 0, 551, 552, 0, 553, 0, 554, - 0, 0, 555, 0, 556, 557, 0, 558, 0, 559, 0, 0, 560, 0, 561, 0, 0, 0, 562, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 0, - 0, 569, 0, 570, 571, 0, 572, 0, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, - 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 588, 0, 589, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, - 0, 0, 592, 0, 0, 593, 0, 0, 0, 594, 0, 0, 595, 0, 0, 0, 596, 0, 597, 0, 598, 0, 0, 599, 0, 600, 0, 0, 601, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 610, 0, 0, - 611, 0, 612, 0, 613, 0, 614, 615, 0, 616, 0, 617, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, - 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 625, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, - 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, - 633, 0, 0, 0, 634, 0, 0, 635, 0, 0, 636, 0, 637, 0, 638, 0, 0, 639, 0, 640, 641, 0, 642, 0, 0, 643, 0, 644, 0, 0, 645, 0, - 646, 0, 647, 0, 648, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 652, 0, 653, 0, 654, 0, - 655, 0, 0, 656, 0, 0, 657, 0, 658, 0, 659, 0, 0, 660, 0, 661, 0, 662, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 664, 0, 0, - 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, 0, 670, 0, - 671, 0, 672, 0, 673, 0, 0, 674, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 676, 0, 677, 0, 678, 0, 679, 0, 680, 0, 681, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 683, 0, 684, 0, 685, 0, 686, 0, 687, 0, 688, 0, 689, 0, 690, 0, - 691, 692, 0, 0, 693, 0, 0, 694, 0, 0, 0, 0, 0, 695, 696, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 699, 0, 0, 0, 0, 0, 0, - 700, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 0, 704, 0, 705, 0, 706, 707, 0, 0, 708, 0, 0, 709, 0, - 710, 0, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 0, 0, 0, 720, 0, 721, 0, 722, 0, 723, 0, 0, - 724, 0, 725, 0, 726, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 728, 0, 0, 0, 729, 0, 0, 0, 730, 0, 0, 0, 0, 731, 0, 0, 0, - 732, 0, 0, 0, 733, 0, 0, 0, 734, 0, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 737, 0, 0, 0, 738, 0, 0, 0, 739, 0, 0, 0, - 0, 740, 0, 0, 0, 0, 741, 0, 0, 0, 0, 742, 0, 0, 0, 743, 0, 0, 0, 744, 0, 745, 0, 746, 0, 747, 0, 0, 748, 0, 749, 0, - 750, 0, 0, 751, 0, 752, 0, 753, 0, 0, 754, 0, 755, 0, 756, 0, 757, 0, 0, 758, 0, 759, 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, - 0, 762, 0, 763, 764, 0, 0, 765, 0, 0, 766, 0, 767, 0, 768, 0, 769, 0, 0, 770, 0, 0, 771, 0, 0, 772, 0, 773, 774, 775, 0, 776, - 0, 0, 0, 777, 0, 0, 778, 0, 0, 779, 0, 0, 780, 0, 781, 782, 0, 783, 0, 0, 0, 784, 0, 0, 785, 0, 0, 786, 0, 0, 787, 0, - 788, 789, 0, 790, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 792, 0, 793, 0, 0, 0, 794, 0, 0, 795, 0, 0, 796, 0, 0, 797, - 0, 798, 799, 0, 800, 0, 0, 0, 801, 0, 0, 802, 0, 0, 803, 0, 0, 804, 0, 805, 806, 0, 807, 0, 0, 0, 0, 808, 0, 0, 0, 0, - 0, 0, 0, 809, 0, 810, 0, 0, 811, 0, 812, 0, 813, 0, 814, 0, 0, 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 817, 0, 0, 0, - 0, 818, 0, 819, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, 0, 0, 823, 0, 824, 0, 0, 825, 0, 0, - 826, 0, 0, 827, 0, 828, 829, 830, 0, 831, 832, 0, 833, 0, 834, 0, 835, 0, 836, 0, 837, 0, 838, 0, 0, 0, 0, 839, 0, 0, 0, 840, - 0, 841, 0, 842, 0, 0, 0, 843, 0, 0, 844, 0, 845, 0, 846, 0, 847, 848, 0, 0, 0, 0, 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 850, 0, 0, 0, 851, 0, 852, 0, 853, 0, 854, 0, 0, 855, 0, 0, 856, 0, 857, 0, 0, 858, 0, 0, 0, 0, 859, 0, - 860, 0, 861, 0, 862, 0, 863, 864, 0, 865, 0, 0, 866, 0, 867, 0, 0, 0, 0, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, 0, 870, - 871, 0, 872, 0, 0, 0, 0, 873, 0, 0, 0, 874, 0, 0, 875, 876, 0, 0, 0, 877, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, 881, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, 884, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, - 0, 0, 887, 0, 888, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, - 0, 892, 0, 0, 893, 0, 894, 895, 896, 0, 897, 0, 898, 0, 0, 899, 0, 0, 900, 0, 0, 901, 0, 902, 903, 904, 0, 0, 905, 0, 906, 0, - 907, 0, 0, 0, 0, 0, 0, 0, 908, 0, 909, 0, 910, 0, 0, 911, 0, 0, 912, 913, 0, 0, 0, 0, 914, 0, 0, 0, 915, 0, 0, 0, - 916, 0, 917, 0, 918, 0, 919, 0, 0, 0, 0, 920, 0, 921, 0, 922, 0, 923, 0, 0, 0, 0, 924, 0, 925, 0, 0, 0, 0, 926, 0, 927, - 0, 0, 0, 0, 928, 929, 0, 930, 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 932, 0, 0, 0, 0, 0, 933, 0, 0, - 934, 0, 935, 0, 0, 0, 0, 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, 0, 0, 0, 0, 938, 0, 0, 0, 0, 0, 939, 0, 0, 940, - 0, 0, 0, 0, 941, 0, 0, 0, 0, 0, 0, 942, 943, 0, 944, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, 947, 0, 0, 0, 0, - 948, 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, 950, 0, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, - 953, 954, 0, 955, 0, 0, 0, 0, 956, 0, 957, 0, 958, 0, 959, 0, 0, 960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 961, 0, 962, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 963, 0, 964, 0, 965, 0, 966, 0, 0, 967, 0, 0, 968, 0, 0, 969, 0, 0, 970, 0, 971, 972, 973, 0, 0, - 974, 0, 0, 0, 975, 0, 976, 0, 0, 977, 0, 0, 978, 0, 0, 979, 0, 980, 981, 0, 982, 0, 983, 0, 0, 0, 984, 0, 0, 985, 0, 0, - 0, 986, 0, 987, 988, 0, 989, 0, 0, 0, 0, 990, 0, 0, 991, 0, 0, 0, 0, 0, 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 993, 0, - 994, 0, 0, 0, 0, 0, 0, 0, 0, 0, 995, 996, 0, 997, 0, 0, 998, 0, 0, 999, 0, 1000, 1001, 0, 1002, 0, 1003, 0, 0, 0, 1004, 0, - 1005, 0, 0, 0, 1006, 0, 0, 0, 1007, 0, 1008, 0, 1009, 0, 1010, 0, 0, 1011, 0, 0, 1012, 0, 1013, 0, 0, 1014, 0, 0, 1015, 0, 0, 0, - 1016, 0, 1017, 0, 1018, 0, 1019, 0, 1020, 0, 0, 0, 1021, 0, 1022, 1023, 0, 1024, 0, 1025, 0, 1026, 0, 0, 0, 1027, 0, 1028, 1029, 0, 1030, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1031, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 1033, 0, 0, 0, 0, 0, 0, - 0, 1034, 0, 1035, 0, 1036, 0, 0, 1037, 0, 1038, 0, 1039, 0, 0, 0, 0, 1040, 0, 0, 1041, 0, 1042, 0, 0, 1043, 0, 0, 0, 1044, 0, 0, - 1045, 0, 1046, 0, 1047, 0, 0, 1048, 0, 0, 0, 0, 1049, 0, 1050, 0, 0, 0, 0, 1051, 1052, 0, 1053, 0, 0, 1054, 0, 1055, 0, 1056, 0, 1057, - 1058, 0, 1059, 0, 1060, 0, 0, 1061, 0, 0, 1062, 0, 1063, 1064, 0, 0, 1065, 0, 0, 1066, 0, 0, 1067, 0, 1068, 0, 0, 1069, 0, 1070, 0, 1071, - 0, 1072, 0, 0, 1073, 0, 1074, 0, 0, 1075, 0, 0, 1076, 0, 1077, 0, 1078, 0, 0, 1079, 0, 0, 0, 1080, 0, 1081, 0, 1082, 0, 0, 0, 1083, - 0, 1084, 0, 1085, 0, 1086, 0, 0, 1087, 0, 0, 1088, 0, 0, 1089, 0, 0, 0, 0, 1090, 0, 1091, 0, 0, 0, 0, 0, 1092, 0, 0, 1093, 0, - 0, 0, 0, 1094, 0, 1095, 0, 0, 0, 1096, 0, 0, 0, 1097, 0, 1098, 0, 1099, 0, 1100, 0, 1101, 0, 1102, 0, 0, 1103, 0, 0, 0, 1104, 0, - 0, 1105, 0, 1106, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 1108, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1110, 0, 1111, 0, 0, 0, 1112, 0, 0, 0, 1113, 0, 1114, 0, 1115, 0, 1116, 0, 1117, 0, 1118, 0, 1119, 0, 1120, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1121, 0, 1122, 0, 1123, 0, 0, 0, 1124, 0, 1125, 0, 1126, 0, 0, 1127, 0, 0, - 0, 1128, 0, 1129, 0, 1130, 0, 1131, 0, 1132, 0, 1133, 0, 1134, 0, 1135, 0, 0, 1136, 0, 1137, 0, 1138, 0, 0, 0, 1139, 0, 0, 0, 1140, 0, - 1141, 0, 1142, 0, 0, 1143, 0, 1144, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1146, 0, 0, 0, 1147, 0, 1148, 0, 0, 1149, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0076[64] = { + 0x0021009200040A01ull, 0x0C05003622436224ull, 0x0D20441801090100ull, 0x2845081A40242010ull, + 0x44208AA9544248AAull, 0x8080104900115155ull, 0x8840A549042052A4ull, 0x402A90228404280Aull, + 0x825A5A044AAA8434ull, 0xA904841294103480ull, 0xAA00000040000294ull, 0x0000008018200AA8ull, + 0xB455500055020000ull, 0xA114122001809294ull, 0xAA80AA82AD24AE92ull, 0x482580042849042Aull, + 0xA84200A6A8A2A215ull, 0xB0A490296A121616ull, 0x8203524A49215090ull, 0x5042811254242C28ull, + 0x0000001221060008ull, 0x0044080000440400ull, 0x0044080002204000ull, 0x802A809A550A000Aull, + 0x5456924A9224082Aull, 0x8AD248AD24945692ull, 0x09050200AAA4A082ull, 0xA000000000855015ull, + 0x95C8A80410A0A2AAull, 0x0412010552B9155Aull, 0x04214A1282880508ull, 0xAAA5AB55284A812Aull, + 0xAD2AD2880A8AA952ull, 0x802AAA5A555452B4ull, 0x129512248012AAAAull, 0x4080AAD535524080ull, + 0x0220440880A20440ull, 0x544080554A5A5491ull, 0x484440102102A549ull, 0x5555400015541095ull, + 0x49AA404102906093ull, 0x108884152A855555ull, 0x52A8884211111111ull, 0xBA49549A40A954A9ull, + 0x9245010B4922D248ull, 0x11405528085A4916ull, 0x885556E9250A080Aull, 0x425255100043548Aull, + 0x0108C885A00852D5ull, 0x0418000400000000ull, 0x4001003408012400ull, 0x110C950153A495D2ull, + 0x208010B0A142A855ull, 0x0A01581090420085ull, 0x2802550B40010A01ull, 0x245692513A492A80ull, + 0x45692C014010485Aull, 0x5A2AD15512525511ull, 0x2252152A02400400ull, 0xA9493495AA585095ull, + 0x4828492A8A895252ull, 0x0000A02A44AAA228ull, 0x254540000AAAA228ull, 0x094401A54454AAAAull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0076[64] = { + 1u, 10u, 28u, 40u, 54u, 75u, 90u, 108u, 123u, 146u, 163u, 172u, 181u, 196u, 212u, 238u, + 254u, 275u, 298u, 317u, 335u, 342u, 348u, 354u, 371u, 393u, 419u, 435u, 445u, 466u, 487u, 502u, + 529u, 555u, 581u, 602u, 622u, 633u, 655u, 671u, 691u, 710u, 732u, 750u, 777u, 798u, 818u, 841u, + 860u, 879u, 883u, 892u, 916u, 934u, 948u, 963u, 986u, 1005u, 1031u, 1045u, 1072u, 1094u, 1110u, 1128u, }; void recomp_unit_0076_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -172,13 +67,25 @@ void recomp_unit_0076_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08934000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0076[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0076[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0076[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08934000; @@ -1368,7 +1275,17 @@ L_0893402C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934048: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -1411,7 +1328,6 @@ L_0893409C: aot_gpr_5 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08934084; } @@ -1429,7 +1345,17 @@ L_089340C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089340D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[16]); @@ -1598,7 +1524,6 @@ L_08934220: L_08934240: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08934310; } @@ -1670,7 +1595,6 @@ L_089342D4: goto L_089342E0; L_089342E0: aot_gpr_31 = (0x089342E8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089342E8u) goto L_089342E8; AOT_REGCACHE_SYNC_OUT(); return; L_089342E8: @@ -1685,7 +1609,6 @@ L_089342EC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089342A8; } @@ -1707,7 +1630,17 @@ L_08934310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934334: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_5); @@ -1722,7 +1655,17 @@ L_08934348: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934354: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1738,7 +1681,6 @@ L_08934354: L_08934378: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08934390; } @@ -1766,13 +1708,22 @@ L_08934390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089343AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089343C8; } @@ -1780,7 +1731,6 @@ L_089343AC: } L_089343C0: aot_gpr_31 = (0x089343C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089343C8u) goto L_089343C8; AOT_REGCACHE_SYNC_OUT(); return; L_089343C8: @@ -1791,13 +1741,22 @@ L_089343C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089343D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089343F4; } @@ -1805,7 +1764,6 @@ L_089343D8: } L_089343EC: aot_gpr_31 = (0x089343F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089343F4u) goto L_089343F4; AOT_REGCACHE_SYNC_OUT(); return; L_089343F4: @@ -1816,33 +1774,69 @@ L_089343F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934404: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893440C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934414: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893441C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0893442Cu); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_0893442C: @@ -1852,7 +1846,17 @@ L_0893442C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934438: aot_gpr_2 = (0u | 1u); jump_target = aot_gpr_31; @@ -1860,7 +1864,17 @@ L_08934438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934444: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1881,7 +1895,6 @@ L_08934458: } L_08934468: aot_gpr_31 = (0x08934470u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934470u) goto L_08934470; AOT_REGCACHE_SYNC_OUT(); return; L_08934470: @@ -1891,7 +1904,6 @@ L_08934470: AOT_REGCACHE_SYNC_OUT(); return; L_08934478: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0893448C; } @@ -1905,7 +1917,6 @@ L_08934480: AOT_REGCACHE_SYNC_OUT(); return; L_0893448C: aot_gpr_31 = (0x08934494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934494u) goto L_08934494; AOT_REGCACHE_SYNC_OUT(); return; L_08934494: @@ -1915,7 +1926,6 @@ L_08934494: AOT_REGCACHE_SYNC_OUT(); return; L_0893449C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089344AC; } @@ -1934,14 +1944,23 @@ L_089344AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089344BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19632))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08934538; } @@ -1963,7 +1982,6 @@ L_089344E8: AOT_REGCACHE_SYNC_OUT(); return; L_089344F8: aot_gpr_31 = (0x08934500u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 746u, 0x0887F804u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934500u) goto L_08934500; AOT_REGCACHE_SYNC_OUT(); return; L_08934500: @@ -1973,7 +1991,6 @@ L_08934500: AOT_REGCACHE_SYNC_OUT(); return; L_08934508: aot_gpr_31 = (0x08934510u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934510u) goto L_08934510; AOT_REGCACHE_SYNC_OUT(); return; L_08934510: @@ -1983,7 +2000,6 @@ L_08934510: AOT_REGCACHE_SYNC_OUT(); return; L_08934518: aot_gpr_31 = (0x08934520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 746u, 0x0887F804u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934520u) goto L_08934520; AOT_REGCACHE_SYNC_OUT(); return; L_08934520: @@ -1995,7 +2011,6 @@ L_08934520: AOT_REGCACHE_SYNC_OUT(); return; L_08934530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934540; } @@ -2013,7 +2028,17 @@ L_08934540: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934550: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2054,7 +2079,17 @@ L_08934598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089345B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19631))); @@ -2078,7 +2113,6 @@ L_089345DC: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08934668; } @@ -2093,7 +2127,6 @@ L_089345FC: L_08934608: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08934654; } @@ -2106,7 +2139,6 @@ L_08934614: AOT_REGCACHE_SYNC_OUT(); return; L_0893461C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934654; } @@ -2120,7 +2152,6 @@ L_08934624: AOT_REGCACHE_SYNC_OUT(); return; L_08934630: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08934654; } @@ -2143,7 +2174,6 @@ L_08934654: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089345FC; } @@ -2155,7 +2185,6 @@ L_08934668: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089346EC; } @@ -2170,7 +2199,6 @@ L_08934680: L_0893468C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089346D8; } @@ -2183,7 +2211,6 @@ L_08934698: AOT_REGCACHE_SYNC_OUT(); return; L_089346A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089346D8; } @@ -2197,7 +2224,6 @@ L_089346A8: AOT_REGCACHE_SYNC_OUT(); return; L_089346B4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089346D8; } @@ -2220,7 +2246,6 @@ L_089346D8: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08934680; } @@ -2235,7 +2260,6 @@ L_089346EC: AOT_REGCACHE_SYNC_OUT(); return; L_089346FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893470C; } @@ -2260,14 +2284,33 @@ L_0893470C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893472C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934734: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6548))); @@ -2308,7 +2351,17 @@ L_08934784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2325,7 +2378,6 @@ L_089347B0: goto L_08934438; L_089347BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089347CC; } @@ -2341,7 +2393,6 @@ L_089347C4: } L_089347CC: aot_gpr_31 = (0x089347D4u); - // nop ctx.pc = 0x08B7347Cu; AOT_REGCACHE_SYNC_OUT(); return; L_089347D4: @@ -2383,39 +2434,42 @@ L_08934814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934828: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x0893483Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 367u, 0x08871430u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893483Cu) goto L_0893483C; AOT_REGCACHE_SYNC_OUT(); return; L_0893483C: aot_gpr_31 = (0x08934844u); - // nop goto L_08934414; L_08934844: aot_gpr_31 = (0x0893484Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 368u, 0x08871438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893484Cu) goto L_0893484C; AOT_REGCACHE_SYNC_OUT(); return; L_0893484C: aot_gpr_31 = (0x08934854u); - // nop goto L_08934404; L_08934854: aot_gpr_31 = (0x0893485Cu); - // nop goto L_0893440C; L_0893485C: aot_gpr_31 = (0x08934864u); - // nop goto L_08934A1C; L_08934864: aot_gpr_31 = (0x0893486Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 819u, 0x0898B354u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893486Cu) goto L_0893486C; AOT_REGCACHE_SYNC_OUT(); return; L_0893486C: @@ -2441,7 +2495,6 @@ L_08934888: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-1040), static_cast(ctx.gpr[16])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089348B0; } @@ -2449,7 +2502,6 @@ L_08934888: } L_089348A4: aot_gpr_31 = (0x089348ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089348ACu) goto L_089348AC; AOT_REGCACHE_SYNC_OUT(); return; L_089348AC: @@ -2463,7 +2515,6 @@ L_089348B0: L_089348B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089348D0; } @@ -2471,7 +2522,6 @@ L_089348B8: } L_089348C4: aot_gpr_31 = (0x089348CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089348CCu) goto L_089348CC; AOT_REGCACHE_SYNC_OUT(); return; L_089348CC: @@ -2498,7 +2548,17 @@ L_089348E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089348FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2513,7 +2573,6 @@ L_089348FC: L_0893491C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08934934; } @@ -2559,7 +2618,6 @@ L_08934970: AOT_REGCACHE_SYNC_OUT(); return; L_0893497C: aot_gpr_31 = (0x08934984u); - // nop ctx.pc = 0x08B7347Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08934984: @@ -2581,7 +2639,17 @@ L_08934990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089349A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 1u); @@ -2596,14 +2664,23 @@ L_089349BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089349C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089349F4; } @@ -2612,7 +2689,6 @@ L_089349C8: L_089349E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19670))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08934A08; } @@ -2620,7 +2696,6 @@ L_089349E0: } L_089349EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934A10; } @@ -2650,14 +2725,33 @@ L_08934A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934A1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -2672,7 +2766,6 @@ L_08934A24: ctx.gpr[16] = (ctx.gpr[17] << 16u); ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); aot_gpr_31 = (0x08934A78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 438u, 0x08975D4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934A78u) goto L_08934A78; AOT_REGCACHE_SYNC_OUT(); return; L_08934A78: @@ -2720,7 +2813,6 @@ L_08934AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08934AF4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934B24; } @@ -2735,12 +2827,10 @@ L_08934AFC: AOT_REGCACHE_SYNC_OUT(); return; L_08934B0C: aot_gpr_31 = (0x08934B14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 36u, 0x08AF431Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934B14u) goto L_08934B14; AOT_REGCACHE_SYNC_OUT(); return; L_08934B14: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08934B2C; } @@ -2748,7 +2838,6 @@ L_08934B14: } L_08934B1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934B6C; } @@ -2805,7 +2894,17 @@ L_08934B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2841,7 +2940,6 @@ L_08934B9C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[20] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08934C44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 438u, 0x08975D4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934C44u) goto L_08934C44; AOT_REGCACHE_SYNC_OUT(); return; L_08934C44: @@ -2895,7 +2993,6 @@ L_08934C78: } L_08934CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934CF4; } @@ -2911,12 +3008,10 @@ L_08934CB8: } L_08934CC0: aot_gpr_31 = (0x08934CC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934CC8u) goto L_08934CC8; AOT_REGCACHE_SYNC_OUT(); return; L_08934CC8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934CF4; } @@ -2924,7 +3019,6 @@ L_08934CC8: } L_08934CD0: aot_gpr_31 = (0x08934CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934CD8u) goto L_08934CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08934CD8: @@ -2939,7 +3033,6 @@ L_08934CD8: } L_08934CE8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08934CF4; } @@ -2964,7 +3057,6 @@ L_08934CFC: AOT_REGCACHE_SYNC_OUT(); return; L_08934D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934D1C; } @@ -3027,12 +3119,21 @@ L_08934D60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934D94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08934DA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 251u, 0x0888CE54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934DA4u) goto L_08934DA4; AOT_REGCACHE_SYNC_OUT(); return; L_08934DA4: @@ -3042,18 +3143,26 @@ L_08934DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934DB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x08934DC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 744u, 0x08A071F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934DC8u) goto L_08934DC8; AOT_REGCACHE_SYNC_OUT(); return; L_08934DC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08934DFC; } @@ -3063,7 +3172,6 @@ L_08934DD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8808))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6552))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08934DFC; } @@ -3074,7 +3182,6 @@ L_08934DE0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(6552), aot_gpr_4); ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08934E04; } @@ -3082,7 +3189,6 @@ L_08934DE0: } L_08934DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934E2C; } @@ -3090,7 +3196,6 @@ L_08934DF4: } L_08934DFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934F14; } @@ -3105,7 +3210,6 @@ L_08934E04: L_08934E10: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08934E28; } @@ -3129,7 +3233,6 @@ L_08934E2C: AOT_REGCACHE_SYNC_OUT(); return; L_08934E34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934EA4; } @@ -3153,7 +3256,6 @@ L_08934E48: L_08934E54: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08934E6C; } @@ -3178,7 +3280,6 @@ L_08934E74: AOT_REGCACHE_SYNC_OUT(); return; L_08934E7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934EA4; } @@ -3188,9 +3289,7 @@ L_08934E84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19656))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08934EBC; } @@ -3198,7 +3297,6 @@ L_08934E84: } L_08934E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934EAC; } @@ -3206,7 +3304,6 @@ L_08934E9C: } L_08934EA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934F14; } @@ -3214,12 +3311,10 @@ L_08934EA4: } L_08934EAC: aot_gpr_31 = (0x08934EB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 302u, 0x08939298u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934EB4u) goto L_08934EB4; AOT_REGCACHE_SYNC_OUT(); return; L_08934EB4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934F0C; } @@ -3237,7 +3332,6 @@ L_08934EBC: goto L_08934A24; L_08934EDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08934F14; } @@ -3245,21 +3339,17 @@ L_08934EDC: } L_08934EE4: aot_gpr_31 = (0x08934EECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 36u, 0x08AF431Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934EECu) goto L_08934EEC; AOT_REGCACHE_SYNC_OUT(); return; L_08934EEC: aot_gpr_31 = (0x08934EF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934EF4u) goto L_08934EF4; AOT_REGCACHE_SYNC_OUT(); return; L_08934EF4: aot_gpr_31 = (0x08934EFCu); - // nop goto L_08936F58; L_08934EFC: aot_gpr_31 = (0x08934F04u); - // nop goto L_089366D8; L_08934F04: aot_gpr_31 = (0x08934F0Cu); @@ -3267,7 +3357,6 @@ L_08934F04: goto L_08934F28; L_08934F0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08934F14; } @@ -3285,7 +3374,17 @@ L_08934F14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08934F28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 & 255u); @@ -3307,7 +3406,6 @@ L_08934F40: L_08934F4C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08934FBC; } @@ -3316,9 +3414,7 @@ L_08934F4C: L_08934F58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19656))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08934FC0; } @@ -3326,7 +3422,6 @@ L_08934F58: } L_08934F6C: aot_gpr_31 = (0x08934F74u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08934F74: @@ -3361,13 +3456,11 @@ L_08934FBC: goto L_08934FC0; L_08934FC0: aot_gpr_31 = (0x08934FC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0075_entry, 75u, 590u, 0x08932C9Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08934FC8u) goto L_08934FC8; AOT_REGCACHE_SYNC_OUT(); return; L_08934FC8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08934FEC; } @@ -3388,7 +3481,6 @@ L_08934FD4: L_08934FEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08935000; } @@ -3396,7 +3488,6 @@ L_08934FEC: } L_08934FF8: aot_gpr_31 = (0x08935000u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935000u) goto L_08935000; AOT_REGCACHE_SYNC_OUT(); return; L_08935000: @@ -3431,7 +3522,6 @@ L_08935024: goto L_08935034; L_08935034: aot_gpr_31 = (0x0893503Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 97u, 0x08890618u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893503Cu) goto L_0893503C; AOT_REGCACHE_SYNC_OUT(); return; L_0893503C: @@ -3447,24 +3537,42 @@ L_08935044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935054: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893505C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0893506Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0119_entry, 119u, 312u, 0x089E17DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893506Cu) goto L_0893506C; AOT_REGCACHE_SYNC_OUT(); return; L_0893506C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08935084; } @@ -3472,12 +3580,10 @@ L_0893506C: } L_08935074: aot_gpr_31 = (0x0893507Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 710u, 0x08AC2FC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893507Cu) goto L_0893507C; AOT_REGCACHE_SYNC_OUT(); return; L_0893507C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935088; } @@ -3493,14 +3599,34 @@ L_08935088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935094: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19682))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893509C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -3536,7 +3662,6 @@ L_089350D8: } L_089350EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935108; } @@ -3629,7 +3754,6 @@ L_08935174: goto L_08935178; L_08935178: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893518C; } @@ -3638,7 +3762,6 @@ L_08935178: L_08935180: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893526C; } @@ -3646,7 +3769,6 @@ L_08935180: } L_0893518C: aot_gpr_31 = (0x08935194u); - // nop goto L_089352E4; L_08935194: ctx.gpr[18] = (ctx.gpr[28] + static_cast(5824)); @@ -3783,7 +3905,6 @@ L_08935284: L_0893528C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(43))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089352C0; } @@ -3832,7 +3953,17 @@ L_089352C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089352E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-19682), static_cast(0u)); @@ -3846,7 +3977,6 @@ L_089352FC: ctx.gpr[16] = (aot_gpr_2 | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_08935390; } @@ -3907,7 +4037,6 @@ L_08935354: goto L_08935368; L_08935368: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08935390; } @@ -3915,7 +4044,6 @@ L_08935368: } L_08935370: aot_gpr_31 = (0x08935378u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935378u) goto L_08935378; AOT_REGCACHE_SYNC_OUT(); return; L_08935378: @@ -3938,7 +4066,17 @@ L_08935390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089353A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19564))); @@ -3946,7 +4084,6 @@ L_089353A0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089353F0; } @@ -3954,7 +4091,6 @@ L_089353A0: } L_089353BC: aot_gpr_31 = (0x089353C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089353C4u) goto L_089353C4; AOT_REGCACHE_SYNC_OUT(); return; L_089353C4: @@ -3975,7 +4111,6 @@ L_089353D8: goto L_089353F0; L_089353F0: aot_gpr_31 = (0x089353F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089353F8u) goto L_089353F8; AOT_REGCACHE_SYNC_OUT(); return; L_089353F8: @@ -4027,7 +4162,17 @@ L_08935460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935474: aot_gpr_4 = (2234u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(-9176)); @@ -4036,7 +4181,17 @@ L_08935474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935484: aot_fpr_12 = std::bit_cast(0u); jump_target = aot_gpr_31; @@ -4044,7 +4199,17 @@ L_08935484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935490: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); @@ -4241,14 +4406,34 @@ L_089356D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935704: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-19648), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893570C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -4288,7 +4473,6 @@ L_08935760: } L_08935768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935790; } @@ -4296,7 +4480,6 @@ L_08935768: } L_08935770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935A7C; } @@ -4310,7 +4493,6 @@ L_08935778: AOT_REGCACHE_SYNC_OUT(); return; L_08935784: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08935790; } @@ -4338,7 +4520,6 @@ L_0893579C: goto L_08934A24; L_089357BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0893580C; } @@ -4351,7 +4532,6 @@ L_089357C4: AOT_REGCACHE_SYNC_OUT(); return; L_089357CC: aot_gpr_31 = (0x089357D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089357D4u) goto L_089357D4; AOT_REGCACHE_SYNC_OUT(); return; L_089357D4: @@ -4377,7 +4557,6 @@ L_089357FC: } L_08935804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893582C; } @@ -4385,7 +4564,6 @@ L_08935804: } L_0893580C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935A7C; } @@ -4425,7 +4603,6 @@ L_08935854: L_08935864: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19648))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089359FC; } @@ -4439,7 +4616,6 @@ L_08935870: AOT_REGCACHE_SYNC_OUT(); return; L_0893587C: aot_gpr_31 = (0x08935884u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935884u) goto L_08935884; AOT_REGCACHE_SYNC_OUT(); return; L_08935884: @@ -4450,7 +4626,6 @@ L_08935884: L_0893588C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19648))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089358F0; } @@ -4474,7 +4649,6 @@ L_089358A4: L_089358B0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089358C8; } @@ -4506,7 +4680,6 @@ L_089358D8: AOT_REGCACHE_SYNC_OUT(); return; L_089358E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089359FC; } @@ -4514,7 +4687,6 @@ L_089358E8: } L_089358F0: { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08935950; } @@ -4538,7 +4710,6 @@ L_08935904: L_08935910: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08935928; } @@ -4570,7 +4741,6 @@ L_08935938: AOT_REGCACHE_SYNC_OUT(); return; L_08935948: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089359FC; } @@ -4579,7 +4749,6 @@ L_08935948: L_08935950: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089359FC; } @@ -4603,7 +4772,6 @@ L_08935968: L_08935974: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0893598C; } @@ -4651,7 +4819,6 @@ L_089359B8: L_089359C4: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089359DC; } @@ -4683,7 +4850,6 @@ L_089359EC: AOT_REGCACHE_SYNC_OUT(); return; L_089359FC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08935A74; } @@ -4705,9 +4871,7 @@ L_08935A1C: aot_gpr_4 = (16688u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08935A3C; } @@ -4720,7 +4884,6 @@ L_08935A34: L_08935A3C: aot_fpr_12 = aot_fpr_12 / aot_fpr_13; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935A54; } @@ -4733,7 +4896,6 @@ L_08935A48: goto L_08935A54; L_08935A54: aot_gpr_31 = (0x08935A5Cu); - // nop goto L_08935490; L_08935A5C: aot_gpr_31 = (0x08935A64u); @@ -4742,7 +4904,6 @@ L_08935A5C: AOT_REGCACHE_SYNC_OUT(); return; L_08935A64: aot_gpr_31 = (0x08935A6Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935A6Cu) goto L_08935A6C; AOT_REGCACHE_SYNC_OUT(); return; L_08935A6C: @@ -4771,7 +4932,17 @@ L_08935A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935AA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4795,7 +4966,6 @@ L_08935AC8: L_08935AE0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08935B08; } @@ -4816,7 +4986,6 @@ L_08935B00: AOT_REGCACHE_SYNC_OUT(); return; L_08935B08: aot_gpr_31 = (0x08935B10u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08935B10: @@ -4831,7 +5000,6 @@ L_08935B10: goto L_08934A24; L_08935B30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08935C1C; } @@ -4839,12 +5007,10 @@ L_08935B30: } L_08935B38: aot_gpr_31 = (0x08935B40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 36u, 0x08AF431Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935B40u) goto L_08935B40; AOT_REGCACHE_SYNC_OUT(); return; L_08935B40: aot_gpr_31 = (0x08935B48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935B48u) goto L_08935B48; AOT_REGCACHE_SYNC_OUT(); return; L_08935B48: @@ -4902,17 +5068,14 @@ L_08935BF4: goto L_08934F28; L_08935BFC: aot_gpr_31 = (0x08935C04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935C04u) goto L_08935C04; AOT_REGCACHE_SYNC_OUT(); return; L_08935C04: aot_gpr_31 = (0x08935C0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935C0Cu) goto L_08935C0C; AOT_REGCACHE_SYNC_OUT(); return; L_08935C0C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08935C24; } @@ -4920,7 +5083,6 @@ L_08935C0C: } L_08935C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935C3C; } @@ -4928,7 +5090,6 @@ L_08935C14: } L_08935C1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935C3C; } @@ -4959,14 +5120,33 @@ L_08935C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935C54: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935C5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[16]); @@ -5034,7 +5214,6 @@ L_08935CDC: goto L_08935CE0; L_08935CE0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08935D80; } @@ -5048,7 +5227,6 @@ L_08935CE8: L_08935CF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(34)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08935D80; } @@ -5056,7 +5234,6 @@ L_08935CF0: } L_08935CFC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08935D10; } @@ -5064,7 +5241,6 @@ L_08935CFC: } L_08935D04: aot_gpr_31 = (0x08935D0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935D0Cu) goto L_08935D0C; AOT_REGCACHE_SYNC_OUT(); return; L_08935D0C: @@ -5072,7 +5248,6 @@ L_08935D0C: goto L_08935D10; L_08935D10: aot_gpr_31 = (0x08935D18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 829u, 0x0898B448u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935D18u) goto L_08935D18; AOT_REGCACHE_SYNC_OUT(); return; L_08935D18: @@ -5117,7 +5292,6 @@ L_08935D50: goto L_08935D54; L_08935D54: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08935D70; } @@ -5131,7 +5305,6 @@ L_08935D5C: L_08935D64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(34)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08935D78; } @@ -5139,7 +5312,6 @@ L_08935D64: } L_08935D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935D80; } @@ -5147,7 +5319,6 @@ L_08935D70: } L_08935D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935CB4; } @@ -5219,14 +5390,33 @@ L_08935E0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935E20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08935E28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5259,13 +5449,11 @@ L_08935E64: goto L_0893570C; L_08935E7C: aot_gpr_31 = (0x08935E84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 525u, 0x08AB5F30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935E84u) goto L_08935E84; AOT_REGCACHE_SYNC_OUT(); return; L_08935E84: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19672))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08935EAC; } @@ -5281,7 +5469,6 @@ L_08935E90: AOT_REGCACHE_SYNC_OUT(); return; L_08935EA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935F3C; } @@ -5319,7 +5506,6 @@ L_08935EE8: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08935F3C; } @@ -5327,7 +5513,6 @@ L_08935EE8: } L_08935F04: aot_gpr_31 = (0x08935F0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935F0Cu) goto L_08935F0C; AOT_REGCACHE_SYNC_OUT(); return; L_08935F0C: @@ -5348,7 +5533,6 @@ L_08935F20: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08935F04; } @@ -5360,7 +5544,6 @@ L_08935F3C: goto L_08935704; L_08935F44: aot_gpr_31 = (0x08935F4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 113u, 0x08A11120u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935F4Cu) goto L_08935F4C; AOT_REGCACHE_SYNC_OUT(); return; L_08935F4C: @@ -5378,12 +5561,10 @@ L_08935F58: goto L_0893570C; L_08935F6C: aot_gpr_31 = (0x08935F74u); - // nop goto L_08935C54; L_08935F74: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08935F90; } @@ -5399,7 +5580,6 @@ L_08935F88: goto L_0893509C; L_08935F90: aot_gpr_31 = (0x08935F98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935F98u) goto L_08935F98; AOT_REGCACHE_SYNC_OUT(); return; L_08935F98: @@ -5412,7 +5592,6 @@ L_08935FA0: goto L_08935FA4; L_08935FA4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08935FBC; } @@ -5420,7 +5599,6 @@ L_08935FA4: } L_08935FAC: aot_gpr_31 = (0x08935FB4u); - // nop goto L_089353A0; L_08935FB4: aot_gpr_31 = (0x08935FBCu); @@ -5431,7 +5609,6 @@ L_08935FBC: goto L_08935FC0; L_08935FC0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08935FF4; } @@ -5440,7 +5617,6 @@ L_08935FC0: L_08935FC8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2240))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08935FF4; } @@ -5448,11 +5624,9 @@ L_08935FC8: } L_08935FD4: aot_gpr_31 = (0x08935FDCu); - // nop goto L_08937A28; L_08935FDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08935FEC; } @@ -5460,7 +5634,6 @@ L_08935FDC: } L_08935FE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08935FF4; } @@ -5476,12 +5649,10 @@ L_08935FEC: } L_08935FF4: aot_gpr_31 = (0x08935FFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 888u, 0x0898B7D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08935FFCu) goto L_08935FFC; AOT_REGCACHE_SYNC_OUT(); return; L_08935FFC: aot_gpr_31 = (0x08936004u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 844u, 0x0898B4F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936004u) goto L_08936004; AOT_REGCACHE_SYNC_OUT(); return; L_08936004: @@ -5492,12 +5663,10 @@ L_08936004: AOT_REGCACHE_SYNC_OUT(); return; L_08936010: aot_gpr_31 = (0x08936018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 746u, 0x08AC3168u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936018u) goto L_08936018; AOT_REGCACHE_SYNC_OUT(); return; L_08936018: aot_gpr_31 = (0x08936020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936020u) goto L_08936020; AOT_REGCACHE_SYNC_OUT(); return; L_08936020: @@ -5511,7 +5680,6 @@ L_08936020: } L_0893602C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08936064; } @@ -5519,7 +5687,6 @@ L_0893602C: } L_08936034: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08936044; } @@ -5531,7 +5698,6 @@ L_0893603C: goto L_08936044; L_08936044: aot_gpr_31 = (0x0893604Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 772u, 0x08AC327Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893604Cu) goto L_0893604C; AOT_REGCACHE_SYNC_OUT(); return; L_0893604C: @@ -5569,22 +5735,29 @@ L_0893606C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893608C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0893609Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 260u, 0x0888D05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893609Cu) goto L_0893609C; AOT_REGCACHE_SYNC_OUT(); return; L_0893609C: aot_gpr_31 = (0x089360A4u); - // nop goto L_08934D94; L_089360A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089360BC; } @@ -5592,7 +5765,6 @@ L_089360A4: } L_089360B0: aot_gpr_31 = (0x089360B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360B8u) goto L_089360B8; AOT_REGCACHE_SYNC_OUT(); return; L_089360B8: @@ -5600,23 +5772,19 @@ L_089360B8: goto L_089360BC; L_089360BC: aot_gpr_31 = (0x089360C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 200u, 0x08805D18u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360C4u) goto L_089360C4; AOT_REGCACHE_SYNC_OUT(); return; L_089360C4: aot_gpr_31 = (0x089360CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 158u, 0x08805310u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360CCu) goto L_089360CC; AOT_REGCACHE_SYNC_OUT(); return; L_089360CC: aot_gpr_31 = (0x089360D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360D4u) goto L_089360D4; AOT_REGCACHE_SYNC_OUT(); return; L_089360D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089360EC; } @@ -5624,7 +5792,6 @@ L_089360D4: } L_089360E0: aot_gpr_31 = (0x089360E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360E8u) goto L_089360E8; AOT_REGCACHE_SYNC_OUT(); return; L_089360E8: @@ -5632,18 +5799,15 @@ L_089360E8: goto L_089360EC; L_089360EC: aot_gpr_31 = (0x089360F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 199u, 0x08805630u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360F4u) goto L_089360F4; AOT_REGCACHE_SYNC_OUT(); return; L_089360F4: aot_gpr_31 = (0x089360FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 450u, 0x08A7A300u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089360FCu) goto L_089360FC; AOT_REGCACHE_SYNC_OUT(); return; L_089360FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936114; } @@ -5651,7 +5815,6 @@ L_089360FC: } L_08936108: aot_gpr_31 = (0x08936110u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936110u) goto L_08936110; AOT_REGCACHE_SYNC_OUT(); return; L_08936110: @@ -5659,12 +5822,10 @@ L_08936110: goto L_08936114; L_08936114: aot_gpr_31 = (0x0893611Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 215u, 0x08805F04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893611Cu) goto L_0893611C; AOT_REGCACHE_SYNC_OUT(); return; L_0893611C: aot_gpr_31 = (0x08936124u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 136u, 0x08944FE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936124u) goto L_08936124; AOT_REGCACHE_SYNC_OUT(); return; L_08936124: @@ -5674,49 +5835,61 @@ L_08936124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936130: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936138: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08936148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 520u, 0x088277C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936148u) goto L_08936148; AOT_REGCACHE_SYNC_OUT(); return; L_08936148: aot_gpr_31 = (0x08936150u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 410u, 0x08A96B48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936150u) goto L_08936150; AOT_REGCACHE_SYNC_OUT(); return; L_08936150: aot_gpr_31 = (0x08936158u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 793u, 0x08A7BB14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936158u) goto L_08936158; AOT_REGCACHE_SYNC_OUT(); return; L_08936158: aot_gpr_31 = (0x08936160u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 35u, 0x08A98334u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936160u) goto L_08936160; AOT_REGCACHE_SYNC_OUT(); return; L_08936160: aot_gpr_31 = (0x08936168u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 29u, 0x08B201E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936168u) goto L_08936168; AOT_REGCACHE_SYNC_OUT(); return; L_08936168: aot_gpr_31 = (0x08936170u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 134u, 0x08A9100Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936170u) goto L_08936170; AOT_REGCACHE_SYNC_OUT(); return; L_08936170: aot_gpr_31 = (0x08936178u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 540u, 0x08A7A94Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936178u) goto L_08936178; AOT_REGCACHE_SYNC_OUT(); return; L_08936178: @@ -5728,7 +5901,6 @@ L_08936178: goto L_08936184; L_08936184: aot_gpr_31 = (0x0893618Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893618Cu) goto L_0893618C; AOT_REGCACHE_SYNC_OUT(); return; L_0893618C: @@ -5742,7 +5914,6 @@ L_08936190: L_08936198: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089361AC; } @@ -5750,7 +5921,6 @@ L_08936198: } L_089361A4: aot_gpr_31 = (0x089361ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089361ACu) goto L_089361AC; AOT_REGCACHE_SYNC_OUT(); return; L_089361AC: @@ -5760,22 +5930,18 @@ L_089361AC: AOT_REGCACHE_SYNC_OUT(); return; L_089361B4: aot_gpr_31 = (0x089361BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 592u, 0x08A7ADA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089361BCu) goto L_089361BC; AOT_REGCACHE_SYNC_OUT(); return; L_089361BC: aot_gpr_31 = (0x089361C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 136u, 0x08944FE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089361C4u) goto L_089361C4; AOT_REGCACHE_SYNC_OUT(); return; L_089361C4: aot_gpr_31 = (0x089361CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 193u, 0x08AFD054u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089361CCu) goto L_089361CC; AOT_REGCACHE_SYNC_OUT(); return; L_089361CC: aot_gpr_31 = (0x089361D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 605u, 0x089832B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089361D4u) goto L_089361D4; AOT_REGCACHE_SYNC_OUT(); return; L_089361D4: @@ -5793,47 +5959,38 @@ L_089361D4: AOT_REGCACHE_SYNC_OUT(); return; L_089361FC: aot_gpr_31 = (0x08936204u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 567u, 0x089CF240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936204u) goto L_08936204; AOT_REGCACHE_SYNC_OUT(); return; L_08936204: aot_gpr_31 = (0x0893620Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 608u, 0x088ABE04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893620Cu) goto L_0893620C; AOT_REGCACHE_SYNC_OUT(); return; L_0893620C: aot_gpr_31 = (0x08936214u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0078_entry, 78u, 823u, 0x0893FA34u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936214u) goto L_08936214; AOT_REGCACHE_SYNC_OUT(); return; L_08936214: aot_gpr_31 = (0x0893621Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 470u, 0x0898231Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893621Cu) goto L_0893621C; AOT_REGCACHE_SYNC_OUT(); return; L_0893621C: aot_gpr_31 = (0x08936224u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0063_entry, 63u, 426u, 0x089023F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936224u) goto L_08936224; AOT_REGCACHE_SYNC_OUT(); return; L_08936224: aot_gpr_31 = (0x0893622Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 607u, 0x08A17A18u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893622Cu) goto L_0893622C; AOT_REGCACHE_SYNC_OUT(); return; L_0893622C: aot_gpr_31 = (0x08936234u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 448u, 0x08B261A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936234u) goto L_08936234; AOT_REGCACHE_SYNC_OUT(); return; L_08936234: aot_gpr_31 = (0x0893623Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 120u, 0x0895CF40u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893623Cu) goto L_0893623C; AOT_REGCACHE_SYNC_OUT(); return; L_0893623C: aot_gpr_31 = (0x08936244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 484u, 0x08A7A5B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936244u) goto L_08936244; AOT_REGCACHE_SYNC_OUT(); return; L_08936244: @@ -5843,7 +6000,17 @@ L_08936244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936250: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_4 = (0u | 4u); @@ -5890,18 +6057,15 @@ L_089362B0: } L_089362C0: aot_gpr_31 = (0x089362C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 19u, 0x088B01E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089362C8u) goto L_089362C8; AOT_REGCACHE_SYNC_OUT(); return; L_089362C8: aot_gpr_31 = (0x089362D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0060_entry, 60u, 600u, 0x088F6E68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089362D0u) goto L_089362D0; AOT_REGCACHE_SYNC_OUT(); return; L_089362D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089362E4; } @@ -5956,7 +6120,6 @@ L_08936338: L_08936344: aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08936370; } @@ -5988,7 +6151,6 @@ L_08936360: } L_08936368: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08936374; } @@ -6022,7 +6184,6 @@ L_08936388: goto L_08936390; L_08936390: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089363BC; } @@ -6039,7 +6200,6 @@ L_0893639C: goto L_089363A4; L_089363A4: aot_gpr_31 = (0x089363ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089363ACu) goto L_089363AC; AOT_REGCACHE_SYNC_OUT(); return; L_089363AC: @@ -6048,7 +6208,6 @@ L_089363AC: goto L_089363B4; L_089363B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936510; } @@ -6115,7 +6274,6 @@ L_08936444: AOT_REGCACHE_SYNC_OUT(); return; L_08936454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089364B8; } @@ -6199,7 +6357,6 @@ L_08936510: L_0893651C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5888))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936530; } @@ -6207,7 +6364,6 @@ L_0893651C: } L_08936528: aot_gpr_31 = (0x08936530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936530u) goto L_08936530; AOT_REGCACHE_SYNC_OUT(); return; L_08936530: @@ -6218,7 +6374,6 @@ L_08936530: L_08936538: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936550; } @@ -6226,7 +6381,6 @@ L_08936538: } L_08936544: aot_gpr_31 = (0x0893654Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893654Cu) goto L_0893654C; AOT_REGCACHE_SYNC_OUT(); return; L_0893654C: @@ -6234,13 +6388,11 @@ L_0893654C: goto L_08936550; L_08936550: aot_gpr_31 = (0x08936558u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 480u, 0x089BA6ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936558u) goto L_08936558; AOT_REGCACHE_SYNC_OUT(); return; L_08936558: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24904))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893656C; } @@ -6248,7 +6400,6 @@ L_08936558: } L_08936564: aot_gpr_31 = (0x0893656Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0043_entry, 43u, 19u, 0x088B01E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893656Cu) goto L_0893656C; AOT_REGCACHE_SYNC_OUT(); return; L_0893656C: @@ -6259,22 +6410,18 @@ L_0893656C: AOT_REGCACHE_SYNC_OUT(); return; L_08936578: aot_gpr_31 = (0x08936580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 187u, 0x08AB8E04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936580u) goto L_08936580; AOT_REGCACHE_SYNC_OUT(); return; L_08936580: aot_gpr_31 = (0x08936588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 643u, 0x08A367F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936588u) goto L_08936588; AOT_REGCACHE_SYNC_OUT(); return; L_08936588: aot_gpr_31 = (0x08936590u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 294u, 0x0896D128u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936590u) goto L_08936590; AOT_REGCACHE_SYNC_OUT(); return; L_08936590: aot_gpr_31 = (0x08936598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 845u, 0x0898B4F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936598u) goto L_08936598; AOT_REGCACHE_SYNC_OUT(); return; L_08936598: @@ -6293,7 +6440,17 @@ L_08936598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089365BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -6326,7 +6483,6 @@ L_089365F0: AOT_REGCACHE_SYNC_OUT(); return; L_089365F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089366C8; } @@ -6360,7 +6516,6 @@ L_08936620: L_08936628: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893663C; } @@ -6368,7 +6523,6 @@ L_08936628: } L_08936634: aot_gpr_31 = (0x0893663Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893663Cu) goto L_0893663C; AOT_REGCACHE_SYNC_OUT(); return; L_0893663C: @@ -6436,13 +6590,22 @@ L_089366C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089366D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19682))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936708; } @@ -6451,7 +6614,6 @@ L_089366D8: L_089366EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936700; } @@ -6459,7 +6621,6 @@ L_089366EC: } L_089366F8: aot_gpr_31 = (0x08936700u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936700u) goto L_08936700; AOT_REGCACHE_SYNC_OUT(); return; L_08936700: @@ -6469,7 +6630,6 @@ L_08936700: AOT_REGCACHE_SYNC_OUT(); return; L_08936708: aot_gpr_31 = (0x08936710u); - // nop goto L_089372C0; L_08936710: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6478,13 +6638,22 @@ L_08936710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893671C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_4 < static_cast(22) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08936800; } @@ -6496,24 +6665,30 @@ L_08936730: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-11072))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936748: aot_gpr_31 = (0x08936750u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 708u, 0x08AC2FA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936750u) goto L_08936750; AOT_REGCACHE_SYNC_OUT(); return; L_08936750: aot_gpr_31 = (0x08936758u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0119_entry, 119u, 339u, 0x089E18E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936758u) goto L_08936758; AOT_REGCACHE_SYNC_OUT(); return; L_08936758: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08936768; } @@ -6573,7 +6748,6 @@ L_089367C0: goto L_0893505C; L_089367C8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089367D8; } @@ -6613,7 +6787,6 @@ L_089367E8: } L_089367F0: aot_gpr_31 = (0x089367F8u); - // nop goto L_08935054; L_089367F8: { const bool branch_taken = 0u == 0u; @@ -6633,7 +6806,17 @@ L_08936804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936810: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-19660), static_cast(0u)); jump_target = aot_gpr_31; @@ -6641,7 +6824,17 @@ L_08936810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893681C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_gpr_6 | 0u); @@ -6673,14 +6866,34 @@ L_08936850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893685C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936864: aot_fpr_14 = aot_fpr_12 / aot_fpr_13; aot_fpr_14 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_14)); @@ -6688,17 +6901,25 @@ L_08936864: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } ctx.fpr[0] = aot_fpr_12 - ctx.fpr[0]; jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936880: aot_gpr_29 = (aot_gpr_29 + static_cast(-784)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(768), aot_run_words); } aot_gpr_31 = (0x08936898u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 815u, 0x08B3AE5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936898u) goto L_08936898; AOT_REGCACHE_SYNC_OUT(); return; L_08936898: @@ -6720,7 +6941,6 @@ L_089368B8: AOT_REGCACHE_SYNC_OUT(); return; L_089368C4: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_089368D4; } @@ -6728,7 +6948,6 @@ L_089368C4: } L_089368CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089368CC; } @@ -6736,7 +6955,6 @@ L_089368CC: } L_089368D4: aot_gpr_31 = (0x089368DCu); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_089368DC: @@ -6754,7 +6972,6 @@ L_089368E0: L_089368EC: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936910; } @@ -6767,7 +6984,6 @@ L_089368F8: AOT_REGCACHE_SYNC_OUT(); return; L_08936900: aot_gpr_31 = (0x08936908u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08936908: @@ -6785,17 +7001,14 @@ L_08936910: AOT_REGCACHE_SYNC_OUT(); return; L_08936918: aot_gpr_31 = (0x08936920u); - // nop ctx.pc = 0x08B73104u; AOT_REGCACHE_SYNC_OUT(); return; L_08936920: aot_gpr_31 = (0x08936928u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936928u) goto L_08936928; AOT_REGCACHE_SYNC_OUT(); return; L_08936928: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08936940; } @@ -6808,7 +7021,6 @@ L_08936930: AOT_REGCACHE_SYNC_OUT(); return; L_08936938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08936920; } @@ -6829,12 +7041,10 @@ L_08936948: AOT_REGCACHE_SYNC_OUT(); return; L_0893695C: aot_gpr_31 = (0x08936964u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936964u) goto L_08936964; AOT_REGCACHE_SYNC_OUT(); return; L_08936964: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08936920; } @@ -6842,13 +7052,11 @@ L_08936964: } L_0893696C: aot_gpr_31 = (0x08936974u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08936974: aot_gpr_4 = (aot_gpr_2 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936920; } @@ -6856,12 +7064,10 @@ L_08936974: } L_08936980: aot_gpr_31 = (0x08936988u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0197_entry, 197u, 761u, 0x08B1B36Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936988u) goto L_08936988; AOT_REGCACHE_SYNC_OUT(); return; L_08936988: aot_gpr_31 = (0x08936990u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 96u, 0x08B60838u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936990u) goto L_08936990; AOT_REGCACHE_SYNC_OUT(); return; L_08936990: @@ -6999,7 +7205,6 @@ L_08936ABC: AOT_REGCACHE_SYNC_OUT(); return; L_08936ACC: aot_gpr_31 = (0x08936AD4u); - // nop ctx.pc = 0x08B73494u; AOT_REGCACHE_SYNC_OUT(); return; L_08936AD4: @@ -7009,13 +7214,11 @@ L_08936AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08936ADC: aot_gpr_31 = (0x08936AE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 294u, 0x08939238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936AE4u) goto L_08936AE4; AOT_REGCACHE_SYNC_OUT(); return; L_08936AE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936AF8; } @@ -7023,7 +7226,6 @@ L_08936AE4: } L_08936AF0: aot_gpr_31 = (0x08936AF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936AF8u) goto L_08936AF8; AOT_REGCACHE_SYNC_OUT(); return; L_08936AF8: @@ -7034,7 +7236,6 @@ L_08936AF8: L_08936B00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936B14; } @@ -7042,17 +7243,14 @@ L_08936B00: } L_08936B0C: aot_gpr_31 = (0x08936B14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936B14u) goto L_08936B14; AOT_REGCACHE_SYNC_OUT(); return; L_08936B14: aot_gpr_31 = (0x08936B1Cu); - // nop goto L_089343AC; L_08936B1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936B30; } @@ -7060,12 +7258,10 @@ L_08936B1C: } L_08936B28: aot_gpr_31 = (0x08936B30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936B30u) goto L_08936B30; AOT_REGCACHE_SYNC_OUT(); return; L_08936B30: aot_gpr_31 = (0x08936B38u); - // nop goto L_089343D8; L_08936B38: aot_gpr_31 = (0x08936B40u); @@ -7079,7 +7275,6 @@ L_08936B40: AOT_REGCACHE_SYNC_OUT(); return; L_08936B4C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08936B5C; } @@ -7106,7 +7301,6 @@ L_08936B5C: L_08936B78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8888))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936EA4; } @@ -7114,7 +7308,6 @@ L_08936B78: } L_08936B84: aot_gpr_31 = (0x08936B8Cu); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08936B8C: @@ -7132,7 +7325,6 @@ L_08936B90: L_08936B9C: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936BC0; } @@ -7145,7 +7337,6 @@ L_08936BA8: AOT_REGCACHE_SYNC_OUT(); return; L_08936BB0: aot_gpr_31 = (0x08936BB8u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08936BB8: @@ -7159,7 +7350,6 @@ L_08936BB8: L_08936BC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936BF4; } @@ -7174,7 +7364,6 @@ L_08936BCC: L_08936BD8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936BF0; } @@ -7200,7 +7389,6 @@ L_08936BFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8888))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08936CC8; } @@ -7222,7 +7410,6 @@ L_08936C18: L_08936C24: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936C3C; } @@ -7265,7 +7452,6 @@ L_08936C60: L_08936C6C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936C84; } @@ -7314,7 +7500,6 @@ L_08936CC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8888))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08936D94; } @@ -7336,7 +7521,6 @@ L_08936CE4: L_08936CF0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936D08; } @@ -7379,7 +7563,6 @@ L_08936D2C: L_08936D38: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936D50; } @@ -7431,7 +7614,6 @@ L_08936D94: goto L_08936DA0; L_08936DA0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936E68; } @@ -7444,7 +7626,6 @@ L_08936DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08936DB0: aot_gpr_31 = (0x08936DB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936DB8u) goto L_08936DB8; AOT_REGCACHE_SYNC_OUT(); return; L_08936DB8: @@ -7460,7 +7641,6 @@ L_08936DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08936DD8: aot_gpr_31 = (0x08936DE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 723u, 0x08A06FE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936DE0u) goto L_08936DE0; AOT_REGCACHE_SYNC_OUT(); return; L_08936DE0: @@ -7475,7 +7655,6 @@ L_08936DF0: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08936E60; } @@ -7483,7 +7662,6 @@ L_08936DF0: } L_08936E04: aot_gpr_31 = (0x08936E0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 704u, 0x08A06D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936E0Cu) goto L_08936E0C; AOT_REGCACHE_SYNC_OUT(); return; L_08936E0C: @@ -7503,12 +7681,10 @@ L_08936E2C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8728), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08936E44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 723u, 0x08A06FE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936E44u) goto L_08936E44; AOT_REGCACHE_SYNC_OUT(); return; L_08936E44: aot_gpr_31 = (0x08936E4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936E4Cu) goto L_08936E4C; AOT_REGCACHE_SYNC_OUT(); return; L_08936E4C: @@ -7516,7 +7692,6 @@ L_08936E4C: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936E04; } @@ -7524,13 +7699,11 @@ L_08936E4C: } L_08936E60: aot_gpr_31 = (0x08936E68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 691u, 0x08A06CBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936E68u) goto L_08936E68; AOT_REGCACHE_SYNC_OUT(); return; L_08936E68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08936E9C; } @@ -7545,7 +7718,6 @@ L_08936E74: L_08936E80: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936E98; } @@ -7572,12 +7744,10 @@ L_08936EA4: goto L_08936EA8; L_08936EA8: aot_gpr_31 = (0x08936EB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936EB0u) goto L_08936EB0; AOT_REGCACHE_SYNC_OUT(); return; L_08936EB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08936EC8; } @@ -7598,7 +7768,6 @@ L_08936EC0: } L_08936EC8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936ED8; } @@ -7606,7 +7775,6 @@ L_08936EC8: } L_08936ED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08936B78; } @@ -7617,7 +7785,6 @@ L_08936ED8: aot_gpr_4 = (aot_gpr_4 + static_cast(29232)); ctx.gpr[16] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(301))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936EFC; } @@ -7632,11 +7799,9 @@ L_08936EEC: AOT_REGCACHE_SYNC_OUT(); return; L_08936EFC: aot_gpr_31 = (0x08936F04u); - // nop goto L_089349A8; L_08936F04: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08936F1C; } @@ -7661,12 +7826,10 @@ L_08936F28: goto L_089349C8; L_08936F30: aot_gpr_31 = (0x08936F38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 731u, 0x08AC30B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08936F38u) goto L_08936F38; AOT_REGCACHE_SYNC_OUT(); return; L_08936F38: aot_gpr_31 = (0x08936F40u); - // nop goto L_08935E28; L_08936F40: aot_gpr_2 = (0u | 0u); @@ -7683,7 +7846,17 @@ L_08936F44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08936F58: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -7719,7 +7892,6 @@ L_08936FA8: AOT_REGCACHE_SYNC_OUT(); return; L_08936FB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08936FE4; } @@ -7748,7 +7920,6 @@ L_08936FD0: L_08936FD8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(42))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937000; } @@ -7759,7 +7930,6 @@ L_08936FE4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16965))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937030; } @@ -7783,7 +7953,6 @@ L_08937000: } L_08937008: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893701C; } @@ -7791,7 +7960,6 @@ L_08937008: } L_08937010: aot_gpr_31 = (0x08937018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937018u) goto L_08937018; AOT_REGCACHE_SYNC_OUT(); return; L_08937018: @@ -7799,13 +7967,11 @@ L_08937018: goto L_0893701C; L_0893701C: aot_gpr_31 = (0x08937024u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 631u, 0x089C6D78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937024u) goto L_08937024; AOT_REGCACHE_SYNC_OUT(); return; L_08937024: aot_gpr_4 = (aot_gpr_2 < static_cast(256) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937294; } @@ -7841,7 +8007,6 @@ L_0893704C: } L_08937074: aot_gpr_31 = (0x0893707Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893707Cu) goto L_0893707C; AOT_REGCACHE_SYNC_OUT(); return; L_0893707C: @@ -7872,7 +8037,6 @@ L_0893709C: L_089370AC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(1948))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089370BC; } @@ -7905,33 +8069,21 @@ L_089370E0: { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16966))); ctx.gpr[8] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[7])) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[8]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[8] = (0u | 256u); ctx.gpr[8] = (ctx.gpr[8] - ctx.gpr[17]); ctx.gpr[9] = (0u | 255u); ctx.gpr[10] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[7]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(24), static_cast(ctx.gpr[10])); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(25), static_cast(ctx.gpr[7])); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(26), static_cast(aot_gpr_5)); aot_gpr_4 = (ctx.lo); @@ -8004,7 +8156,6 @@ L_089371E8: L_08937228: ctx.gpr[18] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16965))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08937290; } @@ -8013,7 +8164,6 @@ L_08937228: L_08937234: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(1948))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937290; } @@ -8045,7 +8195,6 @@ L_0893726C: AOT_REGCACHE_SYNC_OUT(); return; L_08937288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08937294; } @@ -8072,7 +8221,17 @@ L_08937294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089372C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[16]); @@ -8082,7 +8241,6 @@ L_089372C0: { const std::uint32_t aot_run_words[5]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(72), aot_run_words); } { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08937320; } @@ -8097,7 +8255,6 @@ L_089372F8: L_08937304: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0893731C; } @@ -8121,7 +8278,6 @@ L_08937320: AOT_REGCACHE_SYNC_OUT(); return; L_08937328: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089373A8; } @@ -8145,7 +8301,6 @@ L_0893733C: L_08937348: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08937360; } @@ -8170,7 +8325,6 @@ L_08937364: AOT_REGCACHE_SYNC_OUT(); return; L_08937370: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089373A8; } @@ -8178,7 +8332,6 @@ L_08937370: } L_08937378: aot_gpr_31 = (0x08937380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 302u, 0x08939298u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937380u) goto L_08937380; AOT_REGCACHE_SYNC_OUT(); return; L_08937380: @@ -8197,7 +8350,6 @@ L_08937380: } L_089373A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089373CC; } @@ -8205,7 +8357,6 @@ L_089373A0: } L_089373A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089379F8; } @@ -8214,7 +8365,6 @@ L_089373A8: L_089373B0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16967))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089373CC; } @@ -8223,7 +8373,6 @@ L_089373B0: L_089373BC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16966))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089373CC; } @@ -8235,9 +8384,7 @@ L_089373C8: L_089373CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19656))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08937570; } @@ -8272,7 +8419,6 @@ L_08937408: AOT_REGCACHE_SYNC_OUT(); return; L_08937410: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08937570; } @@ -8296,7 +8442,6 @@ L_0893742C: AOT_REGCACHE_SYNC_OUT(); return; L_08937434: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08937494; } @@ -8304,7 +8449,6 @@ L_08937434: } L_0893743C: aot_gpr_31 = (0x08937444u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937444u) goto L_08937444; AOT_REGCACHE_SYNC_OUT(); return; L_08937444: @@ -8312,7 +8456,6 @@ L_08937444: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08937490; } @@ -8320,7 +8463,6 @@ L_08937444: } L_08937458: aot_gpr_31 = (0x08937460u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937460u) goto L_08937460; AOT_REGCACHE_SYNC_OUT(); return; L_08937460: @@ -8328,7 +8470,6 @@ L_08937460: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08937490; } @@ -8336,7 +8477,6 @@ L_08937460: } L_08937474: aot_gpr_31 = (0x0893747Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893747Cu) goto L_0893747C; AOT_REGCACHE_SYNC_OUT(); return; L_0893747C: @@ -8344,7 +8484,6 @@ L_0893747C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08937494; } @@ -8355,7 +8494,6 @@ L_08937490: goto L_08937494; L_08937494: aot_gpr_31 = (0x0893749Cu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_0893749C: @@ -8387,9 +8525,7 @@ L_089374DC: aot_gpr_4 = (16256u << 16u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08937570; } @@ -8447,7 +8583,6 @@ L_08937558: L_08937570: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19332))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089375B0; } @@ -8456,9 +8591,7 @@ L_08937570: L_0893757C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19336))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089375B0; } @@ -8469,7 +8602,6 @@ L_08937590: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-19336), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -8487,7 +8619,6 @@ L_089375B0: AOT_REGCACHE_SYNC_OUT(); return; L_089375B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08937680; } @@ -8500,7 +8631,6 @@ L_089375C0: ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_gpr_4 = (16384u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8510,7 +8640,6 @@ L_089375C0: } L_089375E4: aot_gpr_31 = (0x089375ECu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_089375EC: @@ -8557,7 +8686,6 @@ L_08937640: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[18] = (0u | 1u); goto L_08937678; @@ -8576,7 +8704,6 @@ L_08937680: goto L_08937684; L_08937684: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089376A0; } @@ -8585,9 +8712,7 @@ L_08937684: L_0893768C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19336))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08937900; } @@ -8600,12 +8725,10 @@ L_089376A0: AOT_REGCACHE_SYNC_OUT(); return; L_089376A8: aot_gpr_31 = (0x089376B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089376B0u) goto L_089376B0; AOT_REGCACHE_SYNC_OUT(); return; L_089376B0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08937818; } @@ -8635,7 +8758,6 @@ L_089376C4: AOT_REGCACHE_SYNC_OUT(); return; L_089376EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893771C; } @@ -8661,12 +8783,10 @@ L_0893771C: AOT_REGCACHE_SYNC_OUT(); return; L_08937724: aot_gpr_31 = (0x0893772Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 306u, 0x089392C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893772Cu) goto L_0893772C; AOT_REGCACHE_SYNC_OUT(); return; L_0893772C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08937798; } @@ -8675,7 +8795,6 @@ L_0893772C: L_08937734: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19332))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089377E8; } @@ -8699,7 +8818,6 @@ L_0893774C: L_08937758: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08937770; } @@ -8731,7 +8849,6 @@ L_08937780: AOT_REGCACHE_SYNC_OUT(); return; L_08937790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089377E8; } @@ -8755,7 +8872,6 @@ L_089377A4: L_089377B0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089377C8; } @@ -8817,9 +8933,7 @@ L_08937810: L_08937818: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-19336))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089379F8; } @@ -8897,7 +9011,6 @@ L_089378B4: L_089378C0: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089378D8; } @@ -8929,7 +9042,6 @@ L_089378E8: AOT_REGCACHE_SYNC_OUT(); return; L_089378F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089379F8; } @@ -8964,7 +9076,6 @@ L_08937928: AOT_REGCACHE_SYNC_OUT(); return; L_08937930: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089379F8; } @@ -8993,7 +9104,6 @@ L_08937950: L_08937958: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089379F8; } @@ -9024,7 +9134,6 @@ L_08937988: goto L_08937990; L_08937990: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089379CC; } @@ -9060,7 +9169,6 @@ L_089379BC: AOT_REGCACHE_SYNC_OUT(); return; L_089379C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089379F8; } @@ -9113,7 +9221,17 @@ L_089379F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08937A28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (2236u << 16u); @@ -9145,18 +9263,15 @@ L_08937A64: } L_08937A84: aot_gpr_31 = (0x08937A8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0174_entry, 174u, 640u, 0x08ABEFD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937A8Cu) goto L_08937A8C; AOT_REGCACHE_SYNC_OUT(); return; L_08937A8C: aot_gpr_31 = (0x08937A94u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08937A94: aot_gpr_4 = (aot_gpr_2 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937B9C; } @@ -9164,12 +9279,10 @@ L_08937A94: } L_08937AA0: aot_gpr_31 = (0x08937AA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 298u, 0x08939268u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937AA8u) goto L_08937AA8; AOT_REGCACHE_SYNC_OUT(); return; L_08937AA8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08937B9C; } @@ -9190,7 +9303,6 @@ L_08937AC4: AOT_REGCACHE_SYNC_OUT(); return; L_08937AD0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08937AE4; } @@ -9206,7 +9318,6 @@ L_08937AE4: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937AC4; } @@ -9230,7 +9341,6 @@ L_08937B08: L_08937B10: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937B38; } @@ -9245,7 +9355,6 @@ L_08937B1C: goto L_0893570C; L_08937B30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08937B4C; } @@ -9263,7 +9372,6 @@ L_08937B4C: goto L_08937B50; L_08937B50: aot_gpr_31 = (0x08937B58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937B58u) goto L_08937B58; AOT_REGCACHE_SYNC_OUT(); return; L_08937B58: @@ -9287,7 +9395,6 @@ L_08937B6C: } L_08937B74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937B80; } @@ -9298,7 +9405,6 @@ L_08937B7C: goto L_08937B80; L_08937B80: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08937B50; } @@ -9323,7 +9429,6 @@ L_08937B9C: goto L_08937BA8; L_08937BA8: aot_gpr_31 = (0x08937BB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937BB0u) goto L_08937BB0; AOT_REGCACHE_SYNC_OUT(); return; L_08937BB0: @@ -9332,7 +9437,6 @@ L_08937BB0: L_08937BB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937BCC; } @@ -9341,7 +9445,6 @@ L_08937BB4: L_08937BC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937BD8; } @@ -9363,7 +9466,6 @@ L_08937BD8: L_08937BE0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937BF4; } @@ -9371,12 +9473,10 @@ L_08937BE0: } L_08937BEC: aot_gpr_31 = (0x08937BF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0139_entry, 139u, 65u, 0x08A30754u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937BF4u) goto L_08937BF4; AOT_REGCACHE_SYNC_OUT(); return; L_08937BF4: aot_gpr_31 = (0x08937BFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 36u, 0x08AF431Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937BFCu) goto L_08937BFC; AOT_REGCACHE_SYNC_OUT(); return; L_08937BFC: @@ -9387,7 +9487,6 @@ L_08937BFC: L_08937C04: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937C18; } @@ -9395,13 +9494,11 @@ L_08937C04: } L_08937C10: aot_gpr_31 = (0x08937C18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0139_entry, 139u, 67u, 0x08A30774u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937C18u) goto L_08937C18; AOT_REGCACHE_SYNC_OUT(); return; L_08937C18: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937C38; } @@ -9410,7 +9507,6 @@ L_08937C18: L_08937C24: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937C38; } @@ -9423,13 +9519,11 @@ L_08937C30: AOT_REGCACHE_SYNC_OUT(); return; L_08937C38: aot_gpr_31 = (0x08937C40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 17u, 0x088B81D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937C40u) goto L_08937C40; AOT_REGCACHE_SYNC_OUT(); return; L_08937C40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19683))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937C7C; } @@ -9444,7 +9538,6 @@ L_08937C4C: AOT_REGCACHE_SYNC_OUT(); return; L_08937C5C: aot_gpr_31 = (0x08937C64u); - // nop goto L_089353A0; L_08937C64: aot_gpr_31 = (0x08937C6Cu); @@ -9463,7 +9556,6 @@ L_08937C7C: AOT_REGCACHE_SYNC_OUT(); return; L_08937C84: { const bool branch_taken = aot_gpr_2 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08937CAC; } @@ -9471,13 +9563,11 @@ L_08937C84: } L_08937C8C: aot_gpr_31 = (0x08937C94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 483u, 0x08ABAAD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937C94u) goto L_08937C94; AOT_REGCACHE_SYNC_OUT(); return; L_08937C94: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19672))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937CAC; } @@ -9491,7 +9581,6 @@ L_08937CA0: L_08937CAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937CD4; } @@ -9502,7 +9591,6 @@ L_08937CB8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19681))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937D14; } @@ -9510,7 +9598,6 @@ L_08937CB8: } L_08937CCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08937F34; } @@ -9575,7 +9662,6 @@ L_08937D3C: AOT_REGCACHE_SYNC_OUT(); return; L_08937D44: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08937E64; } @@ -9588,7 +9674,6 @@ L_08937D4C: AOT_REGCACHE_SYNC_OUT(); return; L_08937D54: { const bool branch_taken = aot_gpr_2 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08937E64; } @@ -9607,7 +9692,6 @@ L_08937D68: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937E64; } @@ -9622,7 +9706,6 @@ L_08937D78: goto L_08937D84; L_08937D84: aot_gpr_31 = (0x08937D8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937D8Cu) goto L_08937D8C; AOT_REGCACHE_SYNC_OUT(); return; L_08937D8C: @@ -9643,7 +9726,6 @@ L_08937D94: goto L_08934B9C; L_08937DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08937E0C; } @@ -9676,7 +9758,6 @@ L_08937DBC: goto L_08934B9C; L_08937E0C: aot_gpr_31 = (0x08937E14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937E14u) goto L_08937E14; AOT_REGCACHE_SYNC_OUT(); return; L_08937E14: @@ -9695,15 +9776,12 @@ L_08937E24: AOT_REGCACHE_SYNC_OUT(); return; L_08937E34: aot_gpr_31 = (0x08937E3Cu); - // nop goto L_0893608C; L_08937E3C: aot_gpr_31 = (0x08937E44u); - // nop goto L_08936138; L_08937E44: aot_gpr_31 = (0x08937E4Cu); - // nop goto L_08936130; L_08937E4C: aot_gpr_31 = (0x08937E54u); @@ -9712,11 +9790,9 @@ L_08937E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08937E54: aot_gpr_31 = (0x08937E5Cu); - // nop goto L_08936250; L_08937E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08937ED8; } @@ -9724,7 +9800,6 @@ L_08937E5C: } L_08937E64: aot_gpr_31 = (0x08937E6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 438u, 0x08975D4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937E6Cu) goto L_08937E6C; AOT_REGCACHE_SYNC_OUT(); return; L_08937E6C: @@ -9771,16 +9846,13 @@ L_08937EC8: AOT_REGCACHE_SYNC_OUT(); return; L_08937ED8: aot_gpr_31 = (0x08937EE0u); - // nop goto L_089365BC; L_08937EE0: aot_gpr_31 = (0x08937EE8u); - // nop goto L_08936F58; L_08937EE8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19683))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08937F04; } @@ -9790,7 +9862,6 @@ L_08937EF4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08937F24; } @@ -9798,11 +9869,9 @@ L_08937EF4: } L_08937F04: aot_gpr_31 = (0x08937F0Cu); - // nop goto L_089366D8; L_08937F0C: aot_gpr_31 = (0x08937F14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 747u, 0x0897EE30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937F14u) goto L_08937F14; AOT_REGCACHE_SYNC_OUT(); return; L_08937F14: @@ -9811,7 +9880,6 @@ L_08937F14: goto L_08934F28; L_08937F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08937F3C; } @@ -9831,13 +9899,11 @@ L_08937F2C: } L_08937F34: aot_gpr_31 = (0x08937F3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937F3Cu) goto L_08937F3C; AOT_REGCACHE_SYNC_OUT(); return; L_08937F3C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19683))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937F78; } @@ -9845,7 +9911,6 @@ L_08937F3C: } L_08937F48: aot_gpr_31 = (0x08937F50u); - // nop goto L_089353A0; L_08937F50: aot_gpr_31 = (0x08937F58u); @@ -9866,17 +9931,14 @@ L_08937F68: goto L_08937F78; L_08937F78: aot_gpr_31 = (0x08937F80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08937F80u) goto L_08937F80; AOT_REGCACHE_SYNC_OUT(); return; L_08937F80: aot_gpr_31 = (0x08937F88u); - // nop goto L_08935E20; L_08937F88: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08937F9C; } @@ -9884,7 +9946,6 @@ L_08937F88: } L_08937F94: aot_gpr_31 = (0x08937F9Cu); - // nop goto L_08935C5C; L_08937F9C: aot_gpr_2 = (ctx.gpr[21] | 0u); @@ -9906,7 +9967,17 @@ L_08937FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08937FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9926,7 +9997,17 @@ L_08937FE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08937FEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); diff --git a/profiles/vcs/generated/generated_unit_0077.cpp b/profiles/vcs/generated/generated_unit_0077.cpp index 33d0fe2..9845f99 100644 --- a/profiles/vcs/generated/generated_unit_0077.cpp +++ b/profiles/vcs/generated/generated_unit_0077.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0077[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 0, 0, - 0, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 18, 0, 0, 0, 19, 0, 0, 0, 20, - 21, 0, 22, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 27, 0, 28, 0, 29, 0, 30, 0, 0, 31, 0, 32, 0, 33, 0, 34, 0, 0, 35, 0, 36, 0, 37, 0, 38, 0, 0, 0, 0, 39, 0, 0, - 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 0, 0, 44, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0, 0, 51, 0, 52, 0, 0, 0, 53, 0, 54, - 0, 55, 0, 56, 0, 57, 0, 0, 58, 0, 0, 59, 0, 0, 60, 0, 0, 61, 0, 62, 0, 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, - 66, 0, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 74, 0, 75, 76, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 82, 0, 0, 83, 0, 0, 0, 84, 0, 85, - 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0, 0, 89, 0, - 0, 90, 0, 0, 91, 0, 0, 92, 0, 93, 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 0, 103, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, - 111, 0, 0, 112, 0, 0, 0, 113, 0, 114, 0, 0, 115, 0, 0, 116, 0, 0, 117, 0, 0, 118, 0, 119, 0, 120, 0, 0, 0, 121, 0, 122, - 0, 123, 0, 124, 0, 125, 0, 126, 0, 0, 127, 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 132, 0, 0, - 0, 0, 0, 133, 0, 0, 0, 0, 0, 134, 135, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 138, 0, 139, 0, 140, 0, 141, 0, 0, 142, 143, 0, 0, 144, 0, 0, 0, 0, 145, 146, 0, 147, 0, 148, 0, 149, 0, - 150, 0, 151, 0, 0, 152, 0, 153, 0, 154, 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 159, 0, 160, 0, - 0, 0, 161, 0, 0, 162, 0, 163, 0, 0, 164, 0, 0, 165, 0, 166, 0, 167, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 175, - 0, 0, 176, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 184, 0, 185, 0, 186, 0, 187, 0, 0, - 0, 188, 0, 189, 0, 0, 190, 191, 0, 0, 192, 0, 0, 193, 0, 194, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 198, 0, - 199, 0, 200, 0, 0, 201, 202, 0, 203, 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 0, 0, 208, 0, - 0, 209, 0, 210, 0, 0, 0, 211, 0, 0, 212, 0, 213, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, - 0, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 223, 0, 224, 0, 225, 0, 0, 226, 0, 227, 0, 228, 229, 0, - 230, 0, 231, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 237, 0, - 0, 0, 238, 0, 0, 0, 239, 0, 0, 240, 0, 241, 0, 0, 242, 0, 243, 0, 0, 244, 0, 245, 0, 0, 246, 0, 0, 247, 248, 0, 0, 249, - 0, 250, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 256, 0, 0, 257, 0, 0, 0, 258, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 263, 0, 264, 0, - 0, 265, 0, 0, 0, 266, 0, 0, 0, 0, 0, 267, 0, 268, 0, 0, 269, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, - 272, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, - 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 281, 0, 0, 0, 282, 0, 0, - 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 289, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 291, 0, 292, 0, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 298, 0, 0, 0, 0, 299, - 0, 300, 0, 301, 0, 0, 302, 0, 0, 0, 0, 303, 0, 304, 0, 305, 0, 0, 306, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 0, 310, 0, - 0, 0, 0, 311, 0, 312, 0, 313, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, - 0, 0, 0, 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 325, - 0, 0, 326, 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 332, - 0, 0, 0, 0, 333, 0, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, 336, 0, 0, 337, 0, 338, 0, 0, 339, 0, 0, 0, 340, 341, 0, 342, - 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, 350, 0, 0, 351, - 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, - 0, 0, 0, 355, 0, 356, 0, 357, 0, 358, 359, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 363, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 365, 366, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 370, 0, 371, 0, 372, 0, 0, 373, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 376, 0, 377, 0, 0, 378, 0, 379, 380, 0, 381, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, - 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, - 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 394, 0, 395, 0, 396, 0, 0, 397, 0, 398, 0, 399, 0, 0, 0, 400, 0, 401, 0, 402, - 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, - 0, 415, 416, 0, 417, 0, 418, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 424, 0, 0, 0, 0, - 0, 0, 0, 425, 0, 426, 0, 0, 0, 427, 0, 428, 0, 429, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, - 0, 0, 0, 440, 0, 441, 0, 0, 0, 0, 0, 442, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 446, 0, 0, 0, 447, 0, 0, 448, 449, 0, 0, 0, 0, 450, 0, 451, 0, 452, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 463, 464, 0, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, - 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 473, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 474, 0, 0, 0, 475, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 480, 0, 0, 481, 0, 482, 483, 0, - 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 488, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, - 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 500, - 0, 501, 0, 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 506, 0, 0, 507, 0, 508, 0, 0, 509, 510, 0, 0, 0, 511, 0, 0, 512, 0, 513, - 0, 514, 0, 515, 0, 0, 516, 0, 0, 0, 517, 0, 518, 0, 519, 0, 0, 520, 0, 521, 522, 0, 0, 523, 0, 0, 524, 0, 525, 0, 0, 526, - 0, 527, 0, 0, 528, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 532, 0, 0, 533, 0, 534, 0, 535, 0, 0, 0, - 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 539, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 0, 0, 0, 544, 0, 545, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 0, 0, - 0, 0, 0, 548, 0, 0, 549, 0, 550, 0, 551, 0, 0, 0, 0, 552, 0, 553, 0, 0, 554, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 560, 0, 0, 561, 0, 562, 0, 563, 0, 0, 0, 0, 564, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 568, 0, 569, 0, 0, 570, 0, 0, 0, 571, 0, 0, - 0, 0, 572, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 576, 0, 577, 0, 0, 0, 578, 0, 579, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 0, 585, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 587, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 590, - 0, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 0, 0, 593, 0, 594, 0, 0, 595, 0, 0, 0, 0, 596, 597, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 601, 0, 0, 0, 602, 0, 603, 0, 0, 604, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, - 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, 0, 608, 0, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 611, 0, 612, 613, 0, 614, 0, 615, 0, - 0, 616, 0, 617, 618, 0, 619, 0, 0, 620, 0, 0, 621, 0, 622, 623, 0, 624, 0, 0, 625, 0, 626, 0, 627, 0, 0, 0, 0, 628, 0, 0, - 0, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 633, 0, 634, - 0, 635, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 640, 0, 641, 0, 0, 0, 642, - 0, 643, 0, 644, 0, 645, 0, 0, 0, 0, 0, 646, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 650, 0, 0, - 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 654, 0, 655, - 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, - 0, 659, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 664, 0, 665, 0, - 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 670, 0, 0, - 671, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 676, 0, 0, 677, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 688, 689, 0, 0, - 0, 690, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 694, 0, 0, 695, 0, 0, 0, - 0, 0, 696, 0, 0, 0, 0, 697, 0, 698, 0, 699, 700, 0, 0, 701, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, 0, 704, 0, 0, 0, 0, - 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 0, 708, 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 711, 0, 0, - 0, 712, 0, 0, 0, 0, 0, 713, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 716, 0, 0, 717, 718, 0, - 719, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 724, 0, 0, 0, 0, 0, - 0, 725, 0, 0, 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 729, - 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 732, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 736, 0, 737, 0, 0, 0, 0, 738, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, - 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 743, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, - 0, 0, 746, 0, 0, 747, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 750, 0, 0, 751, 0, 0, 0, - 752, 0, 0, 0, 753, 0, 754, 0, 755, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, - 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, - 761, 0, 0, 0, 762, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 765, 0, 766, 0, 767, 768, 0, 769, 0, 0, 0, 770, 0, - 771, 0, 772, 0, 773, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 776, 0, 777, 0, 0, 778, 0, 0, 779, 0, - 0, 0, 780, 0, 781, 0, 0, 782, 0, 783, 0, 0, 0, 0, 784, 0, 0, 0, 785, 0, 786, 0, 0, 787, 0, 788, 0, 0, 0, 789, 0, 0, - 790, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, - 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 796, 0, 797, 0, 0, 798, 0, 0, 0, 799, 0, 800, 0, 801, 0, 0, 802, 0, - 803, 0, 0, 0, 804, 0, 0, 0, 805, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 808, 0, 0, 0, - 0, 0, 809, 0, 0, 810, 0, 0, 811, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 817, 0, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 822, 0, 0, 0, 823, 0, 0, 0, 0, 0, 824, 825, 0, 0, 0, 826, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 828, 0, - 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, - 0, 0, 834, 0, 0, 0, 0, 0, 0, 835, 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 843, 0, 0, 0, 0, 844, - 0, 0, 845, 0, 846, 0, 847, 0, 0, 0, 848, 0, 849, 0, 850, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0077[64] = { + 0x0008482415550201ull, 0x4020044588AA0000ull, 0x08144D022154AA55ull, 0x112A492AA2911000ull, + 0xA26AA681280010A9ull, 0x00428A9244800040ull, 0x4000080004402000ull, 0xA000080004440108ull, + 0x242124AAA2A49289ull, 0x5584CAA00000A608ull, 0x0042A4A451408AA5ull, 0x2AD54094A04880A0ull, + 0x45028165440CA4CAull, 0x6A56AA201009148Aull, 0x99294A4445090205ull, 0x50410A0089411282ull, + 0x2800082140112822ull, 0x894108A022504020ull, 0x4A84A84A84A844A0ull, 0x900908A0211404A8ull, + 0xB129221081028094ull, 0x2020001090A2500Aull, 0x00D00000A00886A8ull, 0x40085A500512A502ull, + 0xA8A9510080A022AAull, 0x4904020842040A04ull, 0x0940000000090156ull, 0x9012024009092A28ull, + 0x020AA19100484828ull, 0x0414011040020200ull, 0x8200880408108430ull, 0x6944052200000000ull, + 0x4908800900068080ull, 0xA465295284104009ull, 0x15310112949A544Aull, 0xA108408400014010ull, + 0x0912854812000000ull, 0x22512002854C1020ull, 0x002000000000020Cull, 0x840A020052901A28ull, + 0x1288412003094220ull, 0x56904A0220000000ull, 0xA20200882152D25Aull, 0x2500182A8B021022ull, + 0x20000202A20000A0ull, 0x5400008000000032ull, 0x2800000000800880ull, 0x0000C84000001015ull, + 0x0880540000020000ull, 0x1220108232020080ull, 0x20A4A00109409A84ull, 0x0444082164080482ull, + 0x0002000281000422ull, 0x8000C28001080024ull, 0x1280022410222002ull, 0x0200000420102151ull, + 0x4944005545A90111ull, 0x0104010122944294ull, 0x108041114A894801ull, 0x0084209001004124ull, + 0x4104608800280200ull, 0x1001000200008040ull, 0x4010004010040204ull, 0x8020545484400400ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0077[64] = { + 1u, 15u, 27u, 48u, 66u, 86u, 98u, 103u, 111u, 133u, 150u, 169u, 188u, 209u, 230u, 250u, + 265u, 277u, 291u, 311u, 326u, 343u, 355u, 367u, 384u, 403u, 415u, 425u, 440u, 455u, 463u, 474u, + 484u, 495u, 514u, 536u, 546u, 557u, 572u, 576u, 591u, 605u, 616u, 635u, 651u, 659u, 666u, 671u, + 679u, 685u, 696u, 712u, 725u, 732u, 741u, 752u, 761u, 780u, 794u, 809u, 819u, 829u, 834u, 841u, }; void recomp_unit_0077_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0077_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08938000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0077[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0077[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0077[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08938000; @@ -1045,7 +952,6 @@ L_08938024: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938050; } @@ -1058,7 +964,6 @@ L_08938040: AOT_REGCACHE_SYNC_OUT(); return; L_08938048: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08938068; } @@ -1077,7 +982,6 @@ L_08938058: goto L_08938060; L_08938060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089380B8; } @@ -1085,7 +989,6 @@ L_08938060: } L_08938068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089380B8; } @@ -1097,7 +1000,6 @@ L_08938070: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089380B8; } @@ -1136,7 +1038,17 @@ L_089380B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089380CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -1166,7 +1078,6 @@ L_089380CC: AOT_REGCACHE_SYNC_OUT(); return; L_08938144: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08938200; } @@ -1179,7 +1090,6 @@ L_0893814C: AOT_REGCACHE_SYNC_OUT(); return; L_08938154: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938200; } @@ -1197,7 +1107,6 @@ L_0893816C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938200; } @@ -1208,7 +1117,6 @@ L_0893817C: goto L_08938180; L_08938180: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08938200; } @@ -1218,7 +1126,6 @@ L_08938188: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); ctx.gpr[20] = (0u | 17u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08938200; } @@ -1228,7 +1135,6 @@ L_08938198: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938200; } @@ -1243,9 +1149,7 @@ L_089381A8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08938200; } @@ -1260,7 +1164,6 @@ L_089381D4: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938208; } @@ -1268,7 +1171,6 @@ L_089381D4: } L_089381F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938218; } @@ -1276,7 +1178,6 @@ L_089381F8: } L_08938200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1284,12 +1185,10 @@ L_08938200: } L_08938208: aot_gpr_31 = (0x08938210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938210u) goto L_08938210; AOT_REGCACHE_SYNC_OUT(); return; L_08938210: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0893822C; } @@ -1298,7 +1197,6 @@ L_08938210: L_08938218: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938234; } @@ -1306,7 +1204,6 @@ L_08938218: } L_08938224: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938260; } @@ -1314,7 +1211,6 @@ L_08938224: } L_0893822C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1322,13 +1218,11 @@ L_0893822C: } L_08938234: aot_gpr_31 = (0x0893823Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893823Cu) goto L_0893823C; AOT_REGCACHE_SYNC_OUT(); return; L_0893823C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08938258; } @@ -1341,7 +1235,6 @@ L_08938248: AOT_REGCACHE_SYNC_OUT(); return; L_08938250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938260; } @@ -1349,7 +1242,6 @@ L_08938250: } L_08938258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1360,7 +1252,6 @@ L_08938260: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938364; } @@ -1386,7 +1277,6 @@ L_08938284: AOT_REGCACHE_SYNC_OUT(); return; L_089382A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938364; } @@ -1398,7 +1288,6 @@ L_089382A8: L_089382AC: aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938364; } @@ -1408,7 +1297,6 @@ L_089382B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938364; } @@ -1416,7 +1304,6 @@ L_089382B8: } L_089382C8: aot_gpr_31 = (0x089382D0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089382D0u) goto L_089382D0; AOT_REGCACHE_SYNC_OUT(); return; L_089382D0: @@ -1471,7 +1358,6 @@ L_08938350: AOT_REGCACHE_SYNC_OUT(); return; L_0893835C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1481,7 +1367,6 @@ L_08938364: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0893838C; } @@ -1510,7 +1395,6 @@ L_08938384: } L_0893838C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1519,7 +1403,6 @@ L_0893838C: L_08938394: aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089383AC; } @@ -1528,7 +1411,6 @@ L_08938394: L_089383A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089383B8; } @@ -1543,7 +1425,6 @@ L_089383AC: L_089383B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08938400; } @@ -1556,7 +1437,6 @@ L_089383C4: AOT_REGCACHE_SYNC_OUT(); return; L_089383CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938400; } @@ -1572,7 +1452,6 @@ L_089383E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938414; } @@ -1582,7 +1461,6 @@ L_089383F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938414; } @@ -1597,7 +1475,6 @@ L_08938400: goto L_0893840C; L_0893840C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1605,7 +1482,6 @@ L_0893840C: } L_08938414: aot_gpr_31 = (0x0893841Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893841Cu) goto L_0893841C; AOT_REGCACHE_SYNC_OUT(); return; L_0893841C: @@ -1636,7 +1512,6 @@ L_08938430: AOT_REGCACHE_SYNC_OUT(); return; L_0893846C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1661,7 +1536,6 @@ L_08938480: AOT_REGCACHE_SYNC_OUT(); return; L_0893849C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1684,7 +1558,6 @@ L_089384B4: AOT_REGCACHE_SYNC_OUT(); return; L_089384BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1697,7 +1570,6 @@ L_089384C4: AOT_REGCACHE_SYNC_OUT(); return; L_089384CC: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08938768; } @@ -1709,7 +1581,6 @@ L_089384D4: L_089384D8: aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938768; } @@ -1719,7 +1590,6 @@ L_089384E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938768; } @@ -1727,7 +1597,6 @@ L_089384E4: } L_089384F4: aot_gpr_31 = (0x089384FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089384FCu) goto L_089384FC; AOT_REGCACHE_SYNC_OUT(); return; L_089384FC: @@ -1782,7 +1651,6 @@ L_08938578: L_08938584: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0893859C; } @@ -1796,12 +1664,10 @@ L_08938590: AOT_REGCACHE_SYNC_OUT(); return; L_0893859C: aot_gpr_31 = (0x089385A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089385A4u) goto L_089385A4; AOT_REGCACHE_SYNC_OUT(); return; L_089385A4: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08938768; } @@ -1811,7 +1677,6 @@ L_089385AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938768; } @@ -1819,7 +1684,6 @@ L_089385AC: } L_089385BC: aot_gpr_31 = (0x089385C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089385C4u) goto L_089385C4; AOT_REGCACHE_SYNC_OUT(); return; L_089385C4: @@ -1848,7 +1712,6 @@ L_089385D8: ctx.gpr[20] = (0u | 0u); ctx.gpr[18] = (ctx.lo); ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(ctx.gpr[18]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); ctx.gpr[19] = (ctx.lo); @@ -1939,7 +1802,6 @@ L_089386F8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938748; } @@ -1981,7 +1843,6 @@ L_08938748: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938658; } @@ -2017,7 +1878,17 @@ L_08938768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089387AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(72))); @@ -2056,7 +1927,6 @@ L_089387FC: L_08938800: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08938848; } @@ -2066,7 +1936,6 @@ L_0893880C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08938848; } @@ -2074,7 +1943,6 @@ L_0893880C: } L_0893881C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08938848; } @@ -2083,7 +1951,6 @@ L_0893881C: L_08938824: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08938848; } @@ -2104,7 +1971,6 @@ L_0893883C: L_08938848: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08938884; } @@ -2117,7 +1983,6 @@ L_08938854: AOT_REGCACHE_SYNC_OUT(); return; L_0893885C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893887C; } @@ -2127,7 +1992,6 @@ L_08938864: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[21] = (0u | 55u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0893888C; } @@ -2135,7 +1999,6 @@ L_08938864: } L_08938874: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893899C; } @@ -2143,7 +2006,6 @@ L_08938874: } L_0893887C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2151,7 +2013,6 @@ L_0893887C: } L_08938884: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2164,7 +2025,6 @@ L_0893888C: AOT_REGCACHE_SYNC_OUT(); return; L_08938894: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893899C; } @@ -2173,7 +2033,6 @@ L_08938894: L_0893889C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893899C; } @@ -2182,7 +2041,6 @@ L_0893889C: L_089388A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_089388E8; } @@ -2191,7 +2049,6 @@ L_089388A8: L_089388B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893899C; } @@ -2202,7 +2059,6 @@ L_089388C0: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0893899C; } @@ -2213,7 +2069,6 @@ L_089388D4: aot_gpr_6 = (0u | 38u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0893899C; } @@ -2222,7 +2077,6 @@ L_089388D4: L_089388E8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(612))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08938994; } @@ -2246,7 +2100,6 @@ L_0893890C: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_5 = (aot_gpr_5 >> 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08938994; } @@ -2258,7 +2111,6 @@ L_08938924: L_08938928: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(149)))))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08938994; } @@ -2266,7 +2118,6 @@ L_08938928: } L_08938934: aot_gpr_31 = (0x0893893Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 365u, 0x08B41608u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893893Cu) goto L_0893893C; AOT_REGCACHE_SYNC_OUT(); return; L_0893893C: @@ -2295,7 +2146,6 @@ L_0893893C: goto L_08938994; L_08938994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2315,7 +2165,6 @@ L_089389A4: L_089389AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089389F8; } @@ -2336,7 +2185,6 @@ L_089389C8: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089389F8; } @@ -2347,7 +2195,6 @@ L_089389DC: goto L_089389E0; L_089389E0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089389F8; } @@ -2355,7 +2202,6 @@ L_089389E0: } L_089389E8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938A00; } @@ -2363,7 +2209,6 @@ L_089389E8: } L_089389F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938A14; } @@ -2371,7 +2216,6 @@ L_089389F0: } L_089389F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2379,13 +2223,11 @@ L_089389F8: } L_08938A00: aot_gpr_31 = (0x08938A08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938A08u) goto L_08938A08; AOT_REGCACHE_SYNC_OUT(); return; L_08938A08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08938A24; } @@ -2393,7 +2235,6 @@ L_08938A08: } L_08938A14: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08938A2C; } @@ -2401,7 +2242,6 @@ L_08938A14: } L_08938A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2409,7 +2249,6 @@ L_08938A1C: } L_08938A24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2419,7 +2258,6 @@ L_08938A2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_5 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08938AA8; } @@ -2437,7 +2275,6 @@ L_08938A3C: AOT_REGCACHE_SYNC_OUT(); return; L_08938A58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938A9C; } @@ -2471,7 +2308,6 @@ L_08938A88: AOT_REGCACHE_SYNC_OUT(); return; L_08938A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2497,7 +2333,6 @@ L_08938AA8: } L_08938AB4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938A60; } @@ -2505,7 +2340,6 @@ L_08938AB4: } L_08938ABC: aot_gpr_31 = (0x08938AC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938AC4u) goto L_08938AC4; AOT_REGCACHE_SYNC_OUT(); return; L_08938AC4: @@ -2536,7 +2370,6 @@ L_08938AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08938B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2550,7 +2383,6 @@ L_08938B1C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(22)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08938B90; } @@ -2581,7 +2413,6 @@ L_08938B58: AOT_REGCACHE_SYNC_OUT(); return; L_08938B74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2595,7 +2426,6 @@ L_08938B7C: AOT_REGCACHE_SYNC_OUT(); return; L_08938B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2604,7 +2434,6 @@ L_08938B88: L_08938B90: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1364))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938BC0; } @@ -2617,7 +2446,6 @@ L_08938B9C: aot_gpr_4 = (ctx.gpr[19] << (aot_gpr_4 & 31u)); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938BDC; } @@ -2633,7 +2461,6 @@ L_08938BB8: } L_08938BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2646,7 +2473,6 @@ L_08938BC8: AOT_REGCACHE_SYNC_OUT(); return; L_08938BD0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08938BDC; } @@ -2657,7 +2483,6 @@ L_08938BD8: goto L_08938BDC; L_08938BDC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938D30; } @@ -2670,7 +2495,6 @@ L_08938BE4: AOT_REGCACHE_SYNC_OUT(); return; L_08938BEC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08938C0C; } @@ -2680,7 +2504,6 @@ L_08938BF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08938C0C; } @@ -2688,7 +2511,6 @@ L_08938BF4: } L_08938C04: { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08938C1C; } @@ -2715,7 +2537,6 @@ L_08938C1C: L_08938C28: aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08938C48; } @@ -2723,7 +2544,6 @@ L_08938C28: } L_08938C34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938C4C; } @@ -2732,7 +2552,6 @@ L_08938C34: L_08938C3C: aot_gpr_4 = (static_cast(aot_gpr_4) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938C4C; } @@ -2748,7 +2567,6 @@ L_08938C4C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938C98; } @@ -2766,7 +2584,6 @@ L_08938C68: } L_08938C78: { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08938C94; } @@ -2774,7 +2591,6 @@ L_08938C78: } L_08938C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938C98; } @@ -2783,7 +2599,6 @@ L_08938C80: L_08938C88: aot_gpr_4 = (static_cast(aot_gpr_4) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938C98; } @@ -2794,7 +2609,6 @@ L_08938C94: goto L_08938C98; L_08938C98: { const bool branch_taken = aot_gpr_5 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08938D0C; } @@ -2812,7 +2626,6 @@ L_08938CA0: AOT_REGCACHE_SYNC_OUT(); return; L_08938CBC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08938CE8; } @@ -2830,7 +2643,6 @@ L_08938CC4: AOT_REGCACHE_SYNC_OUT(); return; L_08938CE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08938D0C; } @@ -2851,7 +2663,6 @@ L_08938CF8: AOT_REGCACHE_SYNC_OUT(); return; L_08938D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D28; } @@ -2872,7 +2683,6 @@ L_08938D1C: AOT_REGCACHE_SYNC_OUT(); return; L_08938D28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08938D4C; } @@ -2907,7 +2717,17 @@ L_08938D4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938D70: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2954,7 +2774,6 @@ L_08938DB4: goto L_08938DBC; L_08938DBC: aot_gpr_31 = (0x08938DC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938DC4u) goto L_08938DC4; AOT_REGCACHE_SYNC_OUT(); return; L_08938DC4: @@ -2962,7 +2781,6 @@ L_08938DC4: goto L_08938DC8; L_08938DC8: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08938DA4; } @@ -2991,7 +2809,6 @@ L_08938DE4: goto L_08938DEC; L_08938DEC: aot_gpr_31 = (0x08938DF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938DF4u) goto L_08938DF4; AOT_REGCACHE_SYNC_OUT(); return; L_08938DF4: @@ -2999,7 +2816,6 @@ L_08938DF4: goto L_08938DF8; L_08938DF8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08938E08; } @@ -3024,7 +2840,17 @@ L_08938E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938E24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; @@ -3041,13 +2867,22 @@ L_08938E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938E4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08938E68; } @@ -3055,7 +2890,6 @@ L_08938E4C: } L_08938E60: aot_gpr_31 = (0x08938E68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938E68u) goto L_08938E68; AOT_REGCACHE_SYNC_OUT(); return; L_08938E68: @@ -3066,7 +2900,17 @@ L_08938E68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938E78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3081,7 +2925,17 @@ L_08938E88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938E98: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -3123,7 +2977,6 @@ L_08938EC0: } L_08938ECC: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08938EE0; } @@ -3149,7 +3002,6 @@ L_08938EEC: L_08938EF0: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08938EAC; } @@ -3161,7 +3013,17 @@ L_08938EFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938F04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3176,7 +3038,6 @@ L_08938F04: } L_08938F1C: aot_gpr_31 = (0x08938F24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938F24u) goto L_08938F24; AOT_REGCACHE_SYNC_OUT(); return; L_08938F24: @@ -3192,7 +3053,17 @@ L_08938F30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3207,7 +3078,6 @@ L_08938F40: } L_08938F58: aot_gpr_31 = (0x08938F60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938F60u) goto L_08938F60; AOT_REGCACHE_SYNC_OUT(); return; L_08938F60: @@ -3223,7 +3093,17 @@ L_08938F6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3242,7 +3122,6 @@ L_08938F7C: } L_08938FA4: aot_gpr_31 = (0x08938FACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938FACu) goto L_08938FAC; AOT_REGCACHE_SYNC_OUT(); return; L_08938FAC: @@ -3265,7 +3144,17 @@ L_08938FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08938FD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3280,7 +3169,6 @@ L_08938FD8: } L_08938FF0: aot_gpr_31 = (0x08938FF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08938FF8u) goto L_08938FF8; AOT_REGCACHE_SYNC_OUT(); return; L_08938FF8: @@ -3296,7 +3184,17 @@ L_08939004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939014: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3311,7 +3209,6 @@ L_08939014: } L_0893902C: aot_gpr_31 = (0x08939034u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939034u) goto L_08939034; AOT_REGCACHE_SYNC_OUT(); return; L_08939034: @@ -3327,7 +3224,17 @@ L_08939040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939050: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3346,7 +3253,6 @@ L_08939050: } L_08939078: aot_gpr_31 = (0x08939080u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939080u) goto L_08939080; AOT_REGCACHE_SYNC_OUT(); return; L_08939080: @@ -3369,7 +3275,17 @@ L_08939094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089390AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[21]); @@ -3392,7 +3308,6 @@ L_089390AC: } L_089390EC: aot_gpr_31 = (0x089390F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089390F4u) goto L_089390F4; AOT_REGCACHE_SYNC_OUT(); return; L_089390F4: @@ -3421,7 +3336,17 @@ L_08939114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939138: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3436,7 +3361,6 @@ L_08939138: } L_08939150: aot_gpr_31 = (0x08939158u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939158u) goto L_08939158; AOT_REGCACHE_SYNC_OUT(); return; L_08939158: @@ -3452,7 +3376,17 @@ L_08939164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939174: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3469,7 +3403,6 @@ L_08939174: } L_08939194: aot_gpr_31 = (0x0893919Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893919Cu) goto L_0893919C; AOT_REGCACHE_SYNC_OUT(); return; L_0893919C: @@ -3490,7 +3423,17 @@ L_089391AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089391C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3505,7 +3448,6 @@ L_089391C0: } L_089391D8: aot_gpr_31 = (0x089391E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089391E0u) goto L_089391E0; AOT_REGCACHE_SYNC_OUT(); return; L_089391E0: @@ -3521,7 +3463,17 @@ L_089391EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089391FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3536,7 +3488,6 @@ L_089391FC: } L_08939214: aot_gpr_31 = (0x0893921Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893921Cu) goto L_0893921C; AOT_REGCACHE_SYNC_OUT(); return; L_0893921C: @@ -3552,13 +3503,22 @@ L_08939228: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08939254; } @@ -3566,12 +3526,10 @@ L_08939238: } L_0893924C: aot_gpr_31 = (0x08939254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939254u) goto L_08939254; AOT_REGCACHE_SYNC_OUT(); return; L_08939254: aot_gpr_31 = (0x0893925Cu); - // nop goto L_08938E4C; L_0893925C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -3580,13 +3538,22 @@ L_0893925C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939268: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08939284; } @@ -3594,7 +3561,6 @@ L_08939268: } L_0893927C: aot_gpr_31 = (0x08939284u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939284u) goto L_08939284; AOT_REGCACHE_SYNC_OUT(); return; L_08939284: @@ -3608,13 +3574,22 @@ L_0893928C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939298: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089392B4; } @@ -3622,7 +3597,6 @@ L_08939298: } L_089392AC: aot_gpr_31 = (0x089392B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089392B4u) goto L_089392B4; AOT_REGCACHE_SYNC_OUT(); return; L_089392B4: @@ -3636,13 +3610,22 @@ L_089392BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089392C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089392E4; } @@ -3650,7 +3633,6 @@ L_089392C8: } L_089392DC: aot_gpr_31 = (0x089392E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089392E4u) goto L_089392E4; AOT_REGCACHE_SYNC_OUT(); return; L_089392E4: @@ -3664,13 +3646,22 @@ L_089392EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089392F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08939314; } @@ -3678,7 +3669,6 @@ L_089392F8: } L_0893930C: aot_gpr_31 = (0x08939314u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939314u) goto L_08939314; AOT_REGCACHE_SYNC_OUT(); return; L_08939314: @@ -3692,7 +3682,17 @@ L_0893931C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939328: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5908))); @@ -3709,7 +3709,6 @@ L_08939328: } L_08939348: aot_gpr_31 = (0x08939350u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08939350u) goto L_08939350; AOT_REGCACHE_SYNC_OUT(); return; L_08939350: @@ -3730,7 +3729,17 @@ L_08939360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939374: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3747,7 +3756,6 @@ L_08939374: } L_08939394: aot_gpr_31 = (0x0893939Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 660u, 0x08B6B650u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893939Cu) goto L_0893939C; AOT_REGCACHE_SYNC_OUT(); return; L_0893939C: @@ -3768,7 +3776,17 @@ L_089393AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089393C0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); jump_target = aot_gpr_31; @@ -3776,7 +3794,17 @@ L_089393C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089393CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(512), aot_gpr_16); @@ -3791,7 +3819,6 @@ L_089393CC: L_089393F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(6896))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893943C; } @@ -3810,7 +3837,6 @@ L_08939408: L_08939410: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0893943C; } @@ -3844,7 +3870,17 @@ L_08939444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939460: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3873,12 +3909,21 @@ L_08939490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089394A4: aot_gpr_4 = (aot_gpr_6 | 0u); aot_gpr_6 = (0u | 2u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089394C0; } @@ -3896,7 +3941,6 @@ L_089394B4: L_089394C0: aot_gpr_6 = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089394D4; } @@ -3932,21 +3976,51 @@ L_089394F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089394FC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939504: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893950C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3966,7 +4040,6 @@ L_08939530: L_08939538: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0893955C; } @@ -3980,7 +4053,6 @@ L_08939544: goto L_08939A10; L_08939554: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08939570; } @@ -4010,7 +4082,17 @@ L_0893957C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939590: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -4034,7 +4116,6 @@ L_089395D4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08939614; } @@ -4046,7 +4127,6 @@ L_089395F4: aot_gpr_5 = (aot_gpr_5 - aot_gpr_6); aot_gpr_6 = (aot_gpr_5 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08939624; } @@ -4054,7 +4134,6 @@ L_089395F4: } L_0893960C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08939628; } @@ -4161,7 +4240,17 @@ L_089396DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4173,7 +4262,6 @@ L_08939704: goto L_08939C14; L_08939720: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089397B0; } @@ -4198,7 +4286,6 @@ L_08939734: } L_0893973C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089397B0; } @@ -4207,7 +4294,6 @@ L_0893973C: L_08939744: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(6916))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089397AC; } @@ -4235,7 +4321,6 @@ L_08939768: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089397B0; } @@ -4255,7 +4340,6 @@ L_08939798: AOT_REGCACHE_SYNC_OUT(); return; L_089397A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089397B8; } @@ -4280,7 +4364,17 @@ L_089397B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089397CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -4312,7 +4406,6 @@ L_08939804: } L_0893980C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08939854; } @@ -4366,7 +4459,17 @@ L_0893985C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893987C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -4389,13 +4492,11 @@ L_089398B0: goto L_089398B8; L_089398B8: aot_gpr_31 = (0x089398C0u); - // nop ctx.pc = 0x08B7347Cu; AOT_REGCACHE_SYNC_OUT(); return; L_089398C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089398DC; } @@ -4403,12 +4504,10 @@ L_089398C0: } L_089398CC: aot_gpr_31 = (0x089398D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089398D4u) goto L_089398D4; AOT_REGCACHE_SYNC_OUT(); return; L_089398D4: aot_gpr_31 = (0x089398DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089398DCu) goto L_089398DC; AOT_REGCACHE_SYNC_OUT(); return; L_089398DC: @@ -4419,7 +4518,6 @@ L_089398DC: goto L_089397CC; L_089398EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089398FC; } @@ -4451,7 +4549,6 @@ L_08939908: AOT_REGCACHE_SYNC_OUT(); return; L_08939924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089398B8; } @@ -4471,7 +4568,17 @@ L_0893992C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939948: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4500,7 +4607,17 @@ L_08939978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893998C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4532,7 +4649,17 @@ L_089399C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089399E0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(44))); { const bool branch_taken = aot_gpr_6 != 0u; @@ -4552,7 +4679,6 @@ L_089399EC: L_089399F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(43))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08939A08; } @@ -4567,21 +4693,50 @@ L_08939A08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939A10: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939A18: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(46))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -4600,7 +4755,17 @@ L_08939A40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939A4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_4 | 0u); @@ -4636,7 +4801,6 @@ L_08939A4C: aot_gpr_4 = (ctx.gpr[8] | 0u); ctx.gpr[7] = (static_cast(aot_gpr_4) < -32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08939AEC; } @@ -4644,7 +4808,6 @@ L_08939A4C: } L_08939AD8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08939B2C; } @@ -4653,7 +4816,6 @@ L_08939AD8: L_08939AE0: ctx.gpr[7] = (static_cast(aot_gpr_4) < 65 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08939B14; } @@ -4689,7 +4851,6 @@ L_08939B14: goto L_08939B4C; L_08939B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08939B40; } @@ -4715,7 +4876,17 @@ L_08939B40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939B4C: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (20224u << 16u); @@ -4779,7 +4950,6 @@ L_08939BD0: aot_fpr_15 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - aot_fpr_12; goto L_08939BFC; @@ -4802,11 +4972,20 @@ L_08939BFC: goto L_08939C0C; L_08939C0C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939C14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4823,7 +5002,17 @@ L_08939C2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939C38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4839,7 +5028,17 @@ L_08939C4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939C58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4848,7 +5047,6 @@ L_08939C58: aot_gpr_16 = (aot_gpr_4 | 0u); ctx.gpr[17] = (aot_gpr_6 & 255u); aot_gpr_31 = (0x08939C80u); - // nop goto L_08939C14; L_08939C80: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(41), static_cast(ctx.gpr[18])); @@ -4863,7 +5061,6 @@ L_08939C80: L_08939C90: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(42))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08939CA0; } @@ -4886,7 +5083,6 @@ L_08939CB4: goto L_08939C38; L_08939CBC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08939CCC; } @@ -4909,7 +5105,17 @@ L_08939CCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[17]); @@ -4937,7 +5143,6 @@ L_08939D24: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(6912), aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(6908), aot_gpr_4); aot_gpr_31 = (0x08939D44u); - // nop ctx.pc = 0x08B7347Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08939D44: @@ -5016,7 +5221,6 @@ L_08939DE8: ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); ctx.gpr[8] = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08939E14; } @@ -5117,7 +5321,17 @@ L_08939EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08939EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[21]); @@ -5158,7 +5372,6 @@ L_08939F84: ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08939FA8; } @@ -5167,7 +5380,6 @@ L_08939F84: L_08939F94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(41))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08939FA8; } @@ -5195,7 +5407,6 @@ L_08939FC8: ctx.gpr[30] = (ctx.gpr[2] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08939FE0; } @@ -5242,7 +5453,6 @@ L_0893A01C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[30]); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893A044; } @@ -5269,7 +5479,6 @@ L_0893A048: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08939F84; } @@ -5301,12 +5510,21 @@ L_0893A08C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893A0BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A100; } @@ -5331,7 +5549,6 @@ L_0893A0E0: L_0893A0EC: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893A100; } @@ -5339,7 +5556,6 @@ L_0893A0EC: } L_0893A0F8: aot_gpr_31 = (0x0893A100u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893A100u) goto L_0893A100; AOT_REGCACHE_SYNC_OUT(); return; L_0893A100: @@ -5349,7 +5565,17 @@ L_0893A100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893A10C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[22]); @@ -5387,13 +5613,11 @@ L_0893A168: AOT_REGCACHE_SYNC_OUT(); return; L_0893A17C: aot_gpr_31 = (0x0893A184u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_0893A184: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A230; } @@ -5417,7 +5641,6 @@ L_0893A1A0: goto L_0893A1AC; L_0893A1AC: aot_gpr_31 = (0x0893A1B4u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_0893A1B4: @@ -5429,13 +5652,11 @@ L_0893A1B4: goto L_0893A1C0; L_0893A1C0: aot_gpr_31 = (0x0893A1C8u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_0893A1C8: aot_gpr_4 = (ctx.gpr[2] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A1D8; } @@ -5459,7 +5680,6 @@ L_0893A1E8: AOT_REGCACHE_SYNC_OUT(); return; L_0893A1F4: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_0893A204; } @@ -5467,7 +5687,6 @@ L_0893A1F4: } L_0893A1FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893A228; } @@ -5475,13 +5694,11 @@ L_0893A1FC: } L_0893A204: aot_gpr_31 = (0x0893A20Cu); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_0893A20C: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A228; } @@ -5499,7 +5716,6 @@ L_0893A218: } L_0893A228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893A198; } @@ -5512,7 +5728,6 @@ L_0893A230: L_0893A238: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A250; } @@ -5528,7 +5743,6 @@ L_0893A24C: L_0893A250: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A284; } @@ -5552,7 +5766,6 @@ L_0893A270: AOT_REGCACHE_SYNC_OUT(); return; L_0893A27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893A770; } @@ -5561,7 +5774,6 @@ L_0893A27C: L_0893A284: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A2C0; } @@ -5571,7 +5783,6 @@ L_0893A290: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A2C0; } @@ -5592,7 +5803,6 @@ L_0893A2C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6920))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893A2D4; } @@ -5613,7 +5823,6 @@ L_0893A2E0: goto L_08939C38; L_0893A2E8: aot_gpr_31 = (0x0893A2F0u); - // nop ctx.pc = 0x08B73494u; AOT_REGCACHE_SYNC_OUT(); return; L_0893A2F0: @@ -5637,7 +5846,6 @@ L_0893A310: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(32))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_0893A340; } @@ -5645,7 +5853,6 @@ L_0893A310: } L_0893A338: { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_0893A3B8; } @@ -5715,7 +5922,6 @@ L_0893A3E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A3FC; } @@ -5787,7 +5993,6 @@ L_0893A498: goto L_0893A4A0; L_0893A4A0: aot_gpr_31 = (0x0893A4A8u); - // nop ctx.pc = 0x08B73494u; AOT_REGCACHE_SYNC_OUT(); return; L_0893A4A8: @@ -5805,7 +6010,6 @@ L_0893A4BC: L_0893A4C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(42))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A54C; } @@ -5815,7 +6019,6 @@ L_0893A4D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A530; } @@ -5824,7 +6027,6 @@ L_0893A4D0: L_0893A4E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(40))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A530; } @@ -5840,7 +6042,6 @@ L_0893A4EC: aot_gpr_4 = (aot_gpr_6 & aot_gpr_4); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[7]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A530; } @@ -5875,7 +6076,6 @@ L_0893A54C: AOT_REGCACHE_SYNC_OUT(); return; L_0893A558: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893A568; } @@ -5883,7 +6083,6 @@ L_0893A558: } L_0893A560: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0893A5D8; } @@ -5914,7 +6113,6 @@ L_0893A584: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(36))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A5C0; } @@ -5946,7 +6144,6 @@ L_0893A5D0: L_0893A5D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A5F4; } @@ -5967,7 +6164,6 @@ L_0893A5F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A60C; } @@ -6029,7 +6225,6 @@ L_0893A624: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0893A72C; } @@ -6049,7 +6244,6 @@ L_0893A6D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(6916))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A72C; } @@ -6064,7 +6258,6 @@ L_0893A714: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); jump_target = aot_gpr_5; aot_gpr_31 = (0x0893A724u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893A724u) goto L_0893A724; AOT_REGCACHE_SYNC_OUT(); return; @@ -6083,7 +6276,6 @@ L_0893A730: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A75C; } @@ -6107,7 +6299,6 @@ L_0893A764: AOT_REGCACHE_SYNC_OUT(); return; L_0893A770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893A138; } @@ -6131,7 +6322,17 @@ L_0893A778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893A7A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); @@ -6148,7 +6349,6 @@ L_0893A7A4: } L_0893A7C4: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0893A7E8; } @@ -6187,13 +6387,22 @@ L_0893A814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893A824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x0893A838u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 98u, 0x08890624u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893A838u) goto L_0893A838; AOT_REGCACHE_SYNC_OUT(); return; L_0893A838: @@ -6216,7 +6425,17 @@ L_0893A84C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893A860: aot_gpr_5 = (0u | 0u); goto L_0893A864; @@ -6232,7 +6451,6 @@ L_0893A864: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0893A864; } @@ -6245,7 +6463,17 @@ L_0893A894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893A8A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -6263,7 +6491,6 @@ L_0893A8B8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A9A4; } @@ -6277,7 +6504,6 @@ L_0893A8CC: goto L_0893A8DC; L_0893A8DC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893A974; } @@ -6335,7 +6561,6 @@ L_0893A974: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893A9A4; } @@ -6362,7 +6587,6 @@ L_0893A9A4: L_0893A9AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893AA8C; } @@ -6374,7 +6598,6 @@ L_0893A9B8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2052))); aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0893AA50; } @@ -6383,7 +6606,6 @@ L_0893A9B8: L_0893A9D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893A9E8; } @@ -6391,7 +6613,6 @@ L_0893A9D0: } L_0893A9DC: aot_gpr_31 = (0x0893A9E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893A9E4u) goto L_0893A9E4; AOT_REGCACHE_SYNC_OUT(); return; L_0893A9E4: @@ -6399,12 +6620,10 @@ L_0893A9E4: goto L_0893A9E8; L_0893A9E8: aot_gpr_31 = (0x0893A9F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 580u, 0x089BABACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893A9F0u) goto L_0893A9F0; AOT_REGCACHE_SYNC_OUT(); return; L_0893A9F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893AA50; } @@ -6413,7 +6632,6 @@ L_0893A9F0: L_0893A9F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893AA10; } @@ -6421,7 +6639,6 @@ L_0893A9F8: } L_0893AA04: aot_gpr_31 = (0x0893AA0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893AA0Cu) goto L_0893AA0C; AOT_REGCACHE_SYNC_OUT(); return; L_0893AA0C: @@ -6435,7 +6652,6 @@ L_0893AA10: L_0893AA18: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893AA50; } @@ -6444,7 +6660,6 @@ L_0893AA18: L_0893AA24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893AA3C; } @@ -6452,7 +6667,6 @@ L_0893AA24: } L_0893AA30: aot_gpr_31 = (0x0893AA38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893AA38u) goto L_0893AA38; AOT_REGCACHE_SYNC_OUT(); return; L_0893AA38: @@ -6466,7 +6680,6 @@ L_0893AA3C: L_0893AA44: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893AA60; } @@ -6478,7 +6691,6 @@ L_0893AA50: goto L_0893ABE8; L_0893AA58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893AA8C; } @@ -6489,7 +6701,6 @@ L_0893AA60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893AA8C; } @@ -6511,7 +6722,17 @@ L_0893AA8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893AA9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1024), aot_gpr_16); @@ -6550,7 +6771,6 @@ L_0893AAE4: goto L_0893AAF4; L_0893AAF4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0893AB6C; } @@ -6558,7 +6778,6 @@ L_0893AAF4: } L_0893AAFC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893AB6C; } @@ -6568,7 +6787,6 @@ L_0893AB04: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[17]); { const bool branch_taken = static_cast(ctx.gpr[8]) >= 0; - // nop if (branch_taken) { goto L_0893AB30; } @@ -6592,7 +6810,6 @@ L_0893AB30: ctx.gpr[8] = (aot_gpr_29 + ctx.gpr[8]); ctx.gpr[8] = (aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0893AB60; } @@ -6616,7 +6833,6 @@ L_0893AB60: goto L_0893AB64; L_0893AB64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893AAF4; } @@ -6634,7 +6850,6 @@ L_0893AB6C: } L_0893AB7C: aot_gpr_31 = (0x0893AB84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893AB84u) goto L_0893AB84; AOT_REGCACHE_SYNC_OUT(); return; L_0893AB84: @@ -6659,7 +6874,17 @@ L_0893AB94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893ABAC: aot_gpr_5 = (0u | 0u); goto L_0893ABB0; @@ -6675,7 +6900,6 @@ L_0893ABB0: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0893ABB0; } @@ -6683,15 +6907,23 @@ L_0893ABB0: } L_0893ABE0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893ABE8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893AC14; } @@ -6709,11 +6941,20 @@ L_0893ABF4: goto L_0893AC14; L_0893AC14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893AC1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20]}; @@ -6745,7 +6986,6 @@ L_0893AC74: } L_0893AC7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893AE2C; } @@ -6759,7 +6999,6 @@ L_0893AC84: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893ACF4; } @@ -6791,7 +7030,6 @@ L_0893ACF4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(14))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893ADE8; } @@ -6868,7 +7106,6 @@ L_0893AD9C: goto L_0893ADE8; L_0893ADE8: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0893AE1C; } @@ -6876,7 +7113,6 @@ L_0893ADE8: } L_0893ADF0: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0893AE1C; } @@ -6926,7 +7162,17 @@ L_0893AE2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893AE5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1104)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1032), aot_gpr_5); @@ -6986,7 +7232,6 @@ L_0893AF00: } L_0893AF08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893B0EC; } @@ -7000,7 +7245,6 @@ L_0893AF10: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893AF98; } @@ -7039,7 +7283,6 @@ L_0893AF98: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(14))); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893B0A8; } @@ -7122,7 +7365,6 @@ L_0893B044: goto L_0893B0A8; L_0893B0A8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0893B0DC; } @@ -7130,7 +7372,6 @@ L_0893B0A8: } L_0893B0B0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0893B0DC; } @@ -7180,7 +7421,17 @@ L_0893B0EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B11C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7191,7 +7442,6 @@ L_0893B11C: aot_gpr_4 = (0u | 288u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0893B164; } @@ -7228,7 +7478,17 @@ L_0893B174: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B184: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7247,7 +7507,17 @@ L_0893B19C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B1B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7286,13 +7556,22 @@ L_0893B1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B208: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893B22C; } @@ -7300,7 +7579,6 @@ L_0893B208: } L_0893B21C: aot_gpr_31 = (0x0893B224u); - // nop goto L_0893B11C; L_0893B224: { const bool branch_taken = 0u == 0u; @@ -7320,7 +7598,17 @@ L_0893B230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B23C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7332,7 +7620,6 @@ L_0893B23C: goto L_0893B208; L_0893B258: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893B26C; } @@ -7355,7 +7642,17 @@ L_0893B26C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B280: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -7370,7 +7667,6 @@ L_0893B280: goto L_0893B208; L_0893B2B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893B328; } @@ -7379,7 +7675,6 @@ L_0893B2B4: L_0893B2BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_0893B2DC; } @@ -7392,7 +7687,6 @@ L_0893B2C8: goto L_0893B1B0; L_0893B2D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893B328; } @@ -7445,7 +7739,17 @@ L_0893B328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B34C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -7453,7 +7757,6 @@ L_0893B34C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0893B378; } @@ -7481,7 +7784,17 @@ L_0893B380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B394: ctx.gpr[7] = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), ctx.gpr[7]); @@ -7492,7 +7805,17 @@ L_0893B394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B3AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7517,7 +7840,17 @@ L_0893B3D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B3E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7545,7 +7878,17 @@ L_0893B414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B428: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -7603,7 +7946,17 @@ L_0893B484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B4C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7650,7 +8003,17 @@ L_0893B514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B54C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); @@ -7685,17 +8048,25 @@ L_0893B560: } L_0893B59C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B5A4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(52))); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0893B5FC; } @@ -7728,11 +8099,20 @@ L_0893B5BC: } L_0893B5FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B604: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -7775,7 +8155,17 @@ L_0893B654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7797,7 +8187,17 @@ L_0893B694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B6A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7825,7 +8225,6 @@ L_0893B6DC: L_0893B6E4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(56))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_0893B700; } @@ -7835,7 +8234,6 @@ L_0893B6F0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(60))); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_0893B718; } @@ -7853,7 +8251,6 @@ L_0893B700: } L_0893B710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893B720; } @@ -7861,7 +8258,6 @@ L_0893B710: } L_0893B718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893B7E4; } @@ -7945,12 +8341,21 @@ L_0893B7E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B800: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); ctx.gpr[2] = (ctx.gpr[2] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_0893B84C; } @@ -7970,7 +8375,6 @@ L_0893B820: ctx.gpr[7] = (aot_gpr_6 + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0893B854; } @@ -7995,17 +8399,25 @@ L_0893B84C: } L_0893B854: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B85C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); goto L_0893B860; L_0893B860: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893B880; } @@ -8015,7 +8427,6 @@ L_0893B868: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0893B880; } @@ -8031,7 +8442,6 @@ L_0893B878: } L_0893B880: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893B890; } @@ -8043,11 +8453,20 @@ L_0893B888: goto L_0893B890; L_0893B890: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B898: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -8073,7 +8492,6 @@ L_0893B8C8: goto L_0893B394; L_0893B8D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893B980; } @@ -8087,7 +8505,6 @@ L_0893B8E0: L_0893B8EC: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_0893B924; } @@ -8101,7 +8518,6 @@ L_0893B8F8: goto L_0893B394; L_0893B908: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0893B980; } @@ -8114,7 +8530,6 @@ L_0893B910: goto L_0893B85C; L_0893B91C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893B980; } @@ -8131,7 +8546,6 @@ L_0893B938: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893B964; } @@ -8139,7 +8553,6 @@ L_0893B938: } L_0893B948: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0893B980; } @@ -8185,7 +8598,17 @@ L_0893B980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893B9A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8220,7 +8643,17 @@ L_0893B9E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BA00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -8241,7 +8674,6 @@ L_0893BA00: L_0893BA2C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = static_cast(ctx.gpr[17]) > 0; - // nop if (branch_taken) { goto L_0893BA40; } @@ -8270,7 +8702,6 @@ L_0893BA4C: AOT_REGCACHE_SYNC_OUT(); return; L_0893BA5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893BAA0; } @@ -8278,7 +8709,6 @@ L_0893BA5C: } L_0893BA64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893BA78; } @@ -8292,7 +8722,6 @@ L_0893BA6C: AOT_REGCACHE_SYNC_OUT(); return; L_0893BA78: { const bool branch_taken = static_cast(ctx.gpr[17]) <= 0; - // nop if (branch_taken) { goto L_0893BAA0; } @@ -8325,7 +8754,17 @@ L_0893BAA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BAB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8381,7 +8820,17 @@ L_0893BB20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BB38: ctx.gpr[7] = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(4), ctx.gpr[7]); @@ -8396,7 +8845,17 @@ L_0893BB38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BB60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8414,7 +8873,6 @@ L_0893BB60: L_0893BB90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893BBB4; } @@ -8449,7 +8907,17 @@ L_0893BBC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BBDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8573,7 +9041,17 @@ L_0893BCF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BD18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8626,7 +9104,17 @@ L_0893BD84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BDC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8747,7 +9235,17 @@ L_0893BEF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BF28: aot_gpr_29 = (aot_gpr_29 + static_cast(-1568)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1548), aot_gpr_16); @@ -8825,7 +9323,17 @@ L_0893BFB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893BFD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0078.cpp b/profiles/vcs/generated/generated_unit_0078.cpp index b68aa6c..c214cb8 100644 --- a/profiles/vcs/generated/generated_unit_0078.cpp +++ b/profiles/vcs/generated/generated_unit_0078.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0078[4060] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, 0, 13, - 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 24, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 34, 0, 35, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 45, 0, 0, 46, 0, 0, 0, 47, 0, 0, 48, 0, 49, 0, 0, 0, 0, 50, 0, 51, 0, 52, 0, 0, 53, 0, 54, 0, 0, 55, 0, - 56, 0, 57, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, - 0, 62, 0, 63, 0, 0, 64, 0, 65, 0, 0, 66, 0, 67, 0, 0, 0, 0, 68, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, - 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 80, 0, 81, 0, 0, 0, 82, 0, 0, 0, 83, 0, 84, 0, 0, 85, 0, 86, - 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0, 0, 95, - 0, 0, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 105, - 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, 0, 0, 0, 110, 0, 111, 0, - 112, 0, 0, 0, 113, 0, 114, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 127, 0, 128, 0, 0, 129, - 0, 130, 0, 131, 0, 132, 0, 0, 133, 0, 134, 0, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 138, 0, 139, 0, 0, 0, 140, 0, 0, 0, - 141, 0, 0, 142, 0, 143, 0, 0, 144, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, - 0, 149, 0, 0, 150, 0, 151, 0, 152, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 0, 155, 0, 156, 0, 157, 0, 0, 0, 158, 0, 159, - 0, 160, 0, 0, 0, 161, 0, 162, 0, 163, 0, 0, 0, 164, 0, 165, 0, 166, 0, 0, 0, 167, 0, 168, 0, 169, 0, 170, 0, 0, 0, 0, - 171, 0, 172, 0, 0, 173, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 176, 0, 177, 0, 178, 0, 179, 180, 0, 181, 0, 0, 182, 0, 0, 183, - 0, 0, 184, 0, 0, 0, 0, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 0, 0, 0, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, - 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 203, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 205, 0, 0, 0, 206, 0, 207, 0, 0, 0, 208, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 213, 214, 0, - 215, 0, 216, 0, 217, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 0, 229, 230, 0, 231, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 234, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 236, 237, 0, 0, 238, 0, - 0, 0, 239, 0, 240, 0, 0, 0, 241, 0, 242, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 0, 251, 0, 252, 0, 0, 0, 0, 253, 0, 0, 0, 254, 0, - 0, 0, 255, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 0, 259, 0, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, - 0, 0, 263, 0, 0, 0, 264, 0, 0, 0, 265, 0, 266, 267, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 274, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 277, 0, 278, 0, 0, 279, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 0, - 0, 285, 0, 0, 0, 286, 0, 0, 0, 287, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 292, - 0, 0, 293, 0, 0, 294, 0, 0, 295, 0, 0, 0, 296, 0, 297, 0, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 300, 0, 0, 0, 301, 0, - 0, 0, 0, 302, 0, 303, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 307, 0, 0, 0, 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 0, 0, 320, 0, 0, 0, 321, 0, 322, 0, 0, 323, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 328, - 329, 0, 0, 330, 0, 331, 0, 332, 0, 333, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 341, 0, 0, 342, 0, 343, 0, 0, 344, 0, 345, 0, 346, 0, - 0, 0, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, - 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 358, - 359, 0, 360, 0, 361, 0, 362, 0, 0, 0, 0, 363, 0, 364, 0, 0, 365, 0, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, - 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, - 374, 0, 0, 0, 375, 0, 0, 376, 0, 377, 0, 378, 0, 379, 0, 0, 380, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 383, 0, 384, 0, 0, - 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 392, 0, 393, 0, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 399, 0, - 0, 0, 400, 0, 0, 401, 0, 402, 0, 403, 0, 404, 0, 0, 0, 405, 406, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, - 409, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, - 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 0, 0, 420, - 0, 0, 421, 0, 422, 0, 0, 423, 0, 424, 0, 0, 425, 0, 426, 0, 427, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 0, 0, 430, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, - 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 443, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 449, 0, - 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 452, 0, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 0, 457, 0, 458, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 463, 0, 0, 464, 465, 0, 0, 0, 0, 0, 466, 0, - 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 469, 0, 0, 470, 0, 0, 0, 471, 0, 472, 0, 0, 0, 473, 0, - 474, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, - 0, 0, 0, 0, 480, 0, 0, 481, 0, 482, 0, 0, 483, 0, 484, 0, 485, 0, 486, 0, 0, 0, 0, 487, 0, 488, 0, 0, 489, 0, 490, 0, - 0, 491, 0, 492, 0, 0, 493, 0, 494, 0, 495, 0, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, - 0, 506, 507, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, - 0, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, 0, 0, 522, 0, 0, 523, 0, 0, 524, 0, 0, 525, 0, 526, - 0, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 531, 0, 532, 0, 533, 0, 0, 534, 0, 0, 535, 0, 536, 0, 0, 537, 0, 538, - 0, 0, 539, 0, 0, 540, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 544, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 548, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 551, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 558, 559, 0, 0, 560, 0, 561, 562, 0, 0, 563, 0, 564, 565, 0, - 0, 566, 0, 567, 568, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 572, 0, 0, 0, 0, 573, 0, 574, 575, 0, 576, 0, 0, 577, - 0, 578, 0, 0, 579, 0, 0, 580, 581, 0, 582, 0, 583, 0, 584, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 587, 588, 0, 0, 0, 0, - 0, 589, 0, 590, 591, 0, 0, 0, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 594, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 597, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, 0, - 603, 0, 604, 605, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, - 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 0, 611, 0, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 615, 0, 616, - 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, - 0, 0, 0, 0, 0, 0, 0, 0, 621, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 626, 0, 0, 0, 627, 0, 628, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 634, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, - 640, 0, 0, 641, 0, 642, 0, 0, 643, 0, 0, 0, 644, 0, 0, 645, 0, 646, 0, 0, 647, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, - 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 654, 0, 0, 655, 0, 656, 0, 657, 0, 0, 0, 0, 0, 658, 659, - 0, 0, 660, 0, 661, 0, 0, 0, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 665, 0, 666, 0, 0, 667, - 0, 668, 0, 0, 669, 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 675, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 677, 0, 0, 678, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, - 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 683, 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, - 0, 0, 686, 0, 687, 0, 0, 0, 688, 689, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, 0, 0, 692, 0, 693, 0, 0, 0, - 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 697, 0, 698, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 0, 704, 0, - 0, 0, 0, 705, 0, 706, 0, 707, 708, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, - 711, 0, 712, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 715, 716, 0, 717, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 725, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 732, 0, 0, 0, 0, 733, 0, 734, 0, 0, 735, 0, 0, 0, 0, 736, 0, 737, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 741, 0, 742, 0, - 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, 0, 746, 0, 0, 747, 0, 0, - 748, 0, 0, 0, 0, 749, 0, 750, 0, 0, 0, 0, 751, 0, 752, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, - 0, 0, 755, 0, 0, 756, 0, 0, 0, 0, 0, 757, 0, 758, 0, 759, 0, 760, 0, 0, 0, 0, 0, 761, 0, 762, 0, 0, 0, 0, 763, 0, - 0, 764, 0, 0, 765, 0, 0, 766, 767, 0, 0, 768, 0, 769, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 771, 0, 0, 0, 0, 0, 772, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 776, 0, 777, 0, 0, 778, 0, 779, 0, 0, 780, 0, 0, 0, 0, 0, 0, 781, - 782, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 785, 0, 0, 0, 786, 0, 787, 0, 0, 0, 0, - 788, 0, 789, 0, 0, 0, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 793, 0, 0, 0, 794, 795, 0, 0, 0, 796, 0, 0, 0, - 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, - 0, 0, 799, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, 802, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, - 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 806, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 808, 809, 0, 810, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 813, 0, - 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 816, 0, 0, 0, 0, 817, 0, 818, 0, 0, 0, 0, 0, 0, 819, 0, - 0, 820, 0, 821, 0, 0, 0, 822, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 824, 0, 0, 825, 0, 826, 0, 0, 0, 827, 0, 0, 0, - 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 831, 0, 0, 0, 832, 0, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 838, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 841, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, 849, 0, 0, 0, 850, 851, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, - 853, 0, 0, 854, 0, 0, 855, 0, 0, 0, 0, 856, 0, 857, 0, 0, 0, 858, 0, 859, 0, 0, 0, 0, 860, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 864, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0078[64] = { + 0xA081000424902089ull, 0x8150901008221124ull, 0x0864095102220210ull, 0x4A54291200100204ull, + 0x8114294A10010115ull, 0xA511480010292900ull, 0x91044AA88A224844ull, 0x1052125151200402ull, + 0x1151252A9520A440ull, 0xA2A2415240102929ull, 0x92D524250AA2A2A2ull, 0x0002D55555415504ull, + 0x0A088A1565114510ull, 0x4C042A00B4112200ull, 0x442924001120A514ull, 0x2022344411092444ull, + 0x1114425000212510ull, 0x44445124A4100622ull, 0x0512150801001228ull, 0x8505251200010882ull, + 0x54A52220010052A9ull, 0x8440010105049084ull, 0x5001010412112855ull, 0x0085240828452A91ull, + 0x01098AA452491440ull, 0x8504000110491101ull, 0x0224910021215294ull, 0x410A220082441202ull, + 0x41949200A2124540ull, 0x4010224145128010ull, 0xAAAAA54A52855290ull, 0x0000404455440086ull, + 0xA5255244A4924402ull, 0x0001000040090AA4ull, 0x8000000030000014ull, 0x69A6800000402050ull, + 0x0C08D5929685141Aull, 0x24800224200C241Aull, 0xA12092402200002Dull, 0x0008030080004820ull, + 0x0024004004251500ull, 0x0A12912940901012ull, 0xC152040810000010ull, 0x0844829294084414ull, + 0x1430000408006408ull, 0x0010008814840314ull, 0x5200000801000940ull, 0x40056425020081A8ull, + 0x022A000100001100ull, 0x0020200020006000ull, 0x0034250800000000ull, 0x2490000854000020ull, + 0x4282A824400450A1ull, 0x00200A0800006992ull, 0x0A28002181294080ull, 0x8000000411890285ull, + 0x0140000101108024ull, 0x40A1201048025A00ull, 0x020020021148108Aull, 0x0040045000000510ull, + 0x0041002200800500ull, 0x0000040000020000ull, 0x010A284904314002ull, 0x0000000008108010ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0078[64] = { + 1u, 14u, 28u, 42u, 56u, 72u, 87u, 106u, 121u, 141u, 160u, 184u, 205u, 224u, 239u, 255u, + 271u, 285u, 302u, 315u, 329u, 347u, 359u, 374u, 391u, 409u, 421u, 437u, 450u, 467u, 480u, 506u, + 518u, 539u, 548u, 553u, 566u, 589u, 603u, 617u, 624u, 634u, 650u, 660u, 676u, 686u, 697u, 705u, + 720u, 727u, 732u, 739u, 748u, 764u, 775u, 788u, 799u, 807u, 820u, 831u, 838u, 845u, 847u, 861u, }; void recomp_unit_0078_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0078_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0893C004u; - entry_id = (entry_delta < 16240u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0078[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16240u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0078[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0078[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0893C004; @@ -1060,7 +968,17 @@ L_0893C020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C038: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1100,7 +1018,17 @@ L_0893C078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C08C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[19]); @@ -1142,7 +1070,6 @@ L_0893C0E0: AOT_REGCACHE_SYNC_OUT(); return; L_0893C0F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C10C; } @@ -1211,7 +1138,17 @@ L_0893C170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C194: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1237,7 +1174,6 @@ L_0893C1C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0893C1E4; } @@ -1245,7 +1181,6 @@ L_0893C1C0: } L_0893C1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C214; } @@ -1253,7 +1188,6 @@ L_0893C1D4: } L_0893C1DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C214; } @@ -1288,7 +1222,17 @@ L_0893C214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); @@ -1307,7 +1251,6 @@ L_0893C248: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893C29C; } @@ -1342,7 +1285,6 @@ L_0893C284: } L_0893C294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C2DC; } @@ -1350,7 +1292,6 @@ L_0893C294: } L_0893C29C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893C2B0; } @@ -1392,7 +1333,17 @@ L_0893C2DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C2F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1430,7 +1381,17 @@ L_0893C328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C354: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -1458,7 +1419,6 @@ L_0893C394: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_5 = (static_cast(aot_gpr_4) < 279 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893C3D4; } @@ -1467,7 +1427,6 @@ L_0893C394: L_0893C3A4: aot_gpr_4 = (static_cast(aot_gpr_4) < 278 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893C3F0; } @@ -1488,7 +1447,6 @@ L_0893C3B8: AOT_REGCACHE_SYNC_OUT(); return; L_0893C3CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C3FC; } @@ -1496,7 +1454,6 @@ L_0893C3CC: } L_0893C3D4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893C3F0; } @@ -1510,7 +1467,6 @@ L_0893C3DC: AOT_REGCACHE_SYNC_OUT(); return; L_0893C3E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C3FC; } @@ -1537,7 +1493,6 @@ L_0893C404: AOT_REGCACHE_SYNC_OUT(); return; L_0893C40C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893C394; } @@ -1565,7 +1520,17 @@ L_0893C424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C444: aot_gpr_29 = (aot_gpr_29 + static_cast(-1520)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19]}; @@ -1589,7 +1554,6 @@ L_0893C474: AOT_REGCACHE_SYNC_OUT(); return; L_0893C488: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0893C49C; } @@ -1649,7 +1613,17 @@ L_0893C4E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C500: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1669,7 +1643,6 @@ L_0893C524: AOT_REGCACHE_SYNC_OUT(); return; L_0893C530: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893C558; } @@ -1708,7 +1681,17 @@ L_0893C558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C574: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -1740,7 +1723,6 @@ L_0893C5B0: } L_0893C5BC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893C680; } @@ -1771,7 +1753,6 @@ L_0893C5E4: L_0893C5EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0893C600; } @@ -1860,7 +1841,6 @@ L_0893C680: AOT_REGCACHE_SYNC_OUT(); return; L_0893C690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C708; } @@ -1868,7 +1848,6 @@ L_0893C690: } L_0893C698: { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0893C6A8; } @@ -1884,7 +1863,6 @@ L_0893C6A0: } L_0893C6A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893C6BC; } @@ -1944,7 +1922,17 @@ L_0893C708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C72C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1965,7 +1953,6 @@ L_0893C72C: L_0893C758: aot_gpr_4 = (static_cast(aot_gpr_4) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893C79C; } @@ -1980,7 +1967,6 @@ L_0893C764: AOT_REGCACHE_SYNC_OUT(); return; L_0893C774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C7DC; } @@ -1988,7 +1974,6 @@ L_0893C774: } L_0893C77C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893C764; } @@ -2003,7 +1988,6 @@ L_0893C784: AOT_REGCACHE_SYNC_OUT(); return; L_0893C794: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C7DC; } @@ -2036,7 +2020,6 @@ L_0893C7C8: AOT_REGCACHE_SYNC_OUT(); return; L_0893C7D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C7DC; } @@ -2055,7 +2038,17 @@ L_0893C7DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C7F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -2100,15 +2093,23 @@ L_0893C840: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-10408))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C858: aot_gpr_4 = (static_cast(aot_gpr_4) < 91 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893C8AC; } @@ -2116,7 +2117,6 @@ L_0893C858: } L_0893C864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C938; } @@ -2133,7 +2133,6 @@ L_0893C86C: L_0893C874: aot_gpr_4 = (static_cast(aot_gpr_4) < 123 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893C864; } @@ -2141,7 +2140,6 @@ L_0893C874: } L_0893C880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C918; } @@ -2149,7 +2147,6 @@ L_0893C880: } L_0893C888: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893C864; } @@ -2157,7 +2154,6 @@ L_0893C888: } L_0893C890: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C918; } @@ -2171,7 +2167,6 @@ L_0893C898: AOT_REGCACHE_SYNC_OUT(); return; L_0893C8A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C930; } @@ -2197,7 +2192,6 @@ L_0893C8C4: AOT_REGCACHE_SYNC_OUT(); return; L_0893C8D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C930; } @@ -2229,7 +2223,6 @@ L_0893C904: goto L_0893C574; L_0893C910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C930; } @@ -2248,7 +2241,6 @@ L_0893C924: goto L_0893C574; L_0893C930: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893C81C; } @@ -2268,7 +2260,17 @@ L_0893C938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C954: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2288,7 +2290,6 @@ L_0893C954: L_0893C97C: aot_gpr_5 = (0u | 123u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893CA8C; } @@ -2301,7 +2302,6 @@ L_0893C988: goto L_0893DFBC; L_0893C994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2321,11 +2321,20 @@ L_0893C9A4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-10328))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893C9BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(28))); aot_gpr_31 = (0x0893C9C8u); @@ -2346,7 +2355,6 @@ L_0893C9D8: AOT_REGCACHE_SYNC_OUT(); return; L_0893C9E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2366,7 +2374,6 @@ L_0893C9F8: AOT_REGCACHE_SYNC_OUT(); return; L_0893CA00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2386,7 +2393,6 @@ L_0893CA18: AOT_REGCACHE_SYNC_OUT(); return; L_0893CA20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2406,7 +2412,6 @@ L_0893CA38: AOT_REGCACHE_SYNC_OUT(); return; L_0893CA40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2426,7 +2431,6 @@ L_0893CA58: AOT_REGCACHE_SYNC_OUT(); return; L_0893CA60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2446,7 +2450,6 @@ L_0893CA70: goto L_0893C444; L_0893CA84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CA98; } @@ -2469,7 +2472,17 @@ L_0893CA98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CAAC: aot_gpr_5 = (static_cast(aot_gpr_4) < 46 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; @@ -2482,7 +2495,6 @@ L_0893CAAC: L_0893CAB8: aot_gpr_4 = (static_cast(aot_gpr_4) < 45 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893CADC; } @@ -2498,7 +2510,6 @@ L_0893CAC4: } L_0893CACC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893CAC4; } @@ -2517,11 +2528,20 @@ L_0893CADC: goto L_0893CAE0; L_0893CAE0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CAE8: aot_gpr_5 = (static_cast(aot_gpr_4) < 257 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; @@ -2555,11 +2575,20 @@ L_0893CB0C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-10224))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CB24: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 14u); @@ -2570,7 +2599,6 @@ L_0893CB24: } L_0893CB2C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893CB24; } @@ -2598,11 +2626,20 @@ L_0893CB44: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-10136))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CB5C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -2704,11 +2741,20 @@ L_0893CBBC: goto L_0893CBC0; L_0893CBC0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CBC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -2747,7 +2793,6 @@ L_0893CC2C: ctx.gpr[20] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_0893CC6C; } @@ -2808,7 +2853,6 @@ L_0893CC94: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893CCF0; } @@ -2870,7 +2914,17 @@ L_0893CCF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CD28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2884,12 +2938,21 @@ L_0893CD38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CD44: aot_gpr_4 = (aot_gpr_4 + static_cast(-260)); aot_gpr_5 = (aot_gpr_4 < static_cast(29) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893CD74; } @@ -2901,11 +2964,20 @@ L_0893CD54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-10016))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CD6C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -2919,11 +2991,20 @@ L_0893CD74: goto L_0893CD78; L_0893CD78: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CD80: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -2958,7 +3039,17 @@ L_0893CDB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CDCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2979,7 +3070,6 @@ L_0893CDEC: L_0893CDF0: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0893CE2C; } @@ -2989,7 +3079,6 @@ L_0893CDFC: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_0893CE14; } @@ -3003,7 +3092,6 @@ L_0893CE14: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_0893CE2C; } @@ -3016,7 +3104,6 @@ L_0893CE24: L_0893CE2C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893CDF0; } @@ -3024,7 +3111,6 @@ L_0893CE2C: } L_0893CE38: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0893CE64; } @@ -3053,7 +3139,17 @@ L_0893CE64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CE74: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_16); @@ -3077,7 +3173,6 @@ L_0893CE74: L_0893CEAC: aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893CEC4; } @@ -3097,7 +3192,6 @@ L_0893CEC4: AOT_REGCACHE_SYNC_OUT(); return; L_0893CED0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893CF2C; } @@ -3114,7 +3208,6 @@ L_0893CEEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893CF0C; } @@ -3156,7 +3249,6 @@ L_0893CF38: L_0893CF44: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893CF8C; } @@ -3208,7 +3300,6 @@ L_0893CF9C: AOT_REGCACHE_SYNC_OUT(); return; L_0893CFAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893CFD8; } @@ -3246,7 +3337,17 @@ L_0893CFD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893CFF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3260,7 +3361,6 @@ L_0893D014: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893D02C; } @@ -3294,7 +3394,17 @@ L_0893D044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D058: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(460), aot_gpr_16); @@ -3448,7 +3558,6 @@ L_0893D1A4: goto L_0893D1B4; L_0893D1B4: { const bool branch_taken = aot_gpr_5 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0893D1CC; } @@ -3532,7 +3641,17 @@ L_0893D234: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D264: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -3603,7 +3722,17 @@ L_0893D2EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D308: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3628,7 +3757,17 @@ L_0893D330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D344: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[22]); @@ -3764,7 +3903,17 @@ L_0893D43C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D464: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3823,7 +3972,6 @@ L_0893D4E0: AOT_REGCACHE_SYNC_OUT(); return; L_0893D4EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893D50C; } @@ -3907,7 +4055,17 @@ L_0893D584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D5A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3950,7 +4108,6 @@ L_0893D604: AOT_REGCACHE_SYNC_OUT(); return; L_0893D60C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893D638; } @@ -4035,7 +4192,17 @@ L_0893D6A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D6C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_17); @@ -4082,7 +4249,6 @@ L_0893D714: } L_0893D720: { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0893D74C; } @@ -4094,7 +4260,6 @@ L_0893D728: goto L_0893D5A4; L_0893D730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893D75C; } @@ -4107,7 +4272,6 @@ L_0893D738: goto L_0893D464; L_0893D744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893D75C; } @@ -4146,7 +4310,17 @@ L_0893D778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4184,7 +4358,17 @@ L_0893D7CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D7E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_17); @@ -4238,7 +4422,6 @@ L_0893D850: L_0893D85C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0893D82C; } @@ -4247,7 +4430,6 @@ L_0893D85C: L_0893D868: aot_gpr_5 = (0u | 260u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893D8B0; } @@ -4327,7 +4509,17 @@ L_0893D8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D904: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -4404,7 +4596,17 @@ L_0893D984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893D9CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -4434,7 +4636,6 @@ L_0893DA00: AOT_REGCACHE_SYNC_OUT(); return; L_0893DA0C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893D9E4; } @@ -4448,7 +4649,6 @@ L_0893DA14: AOT_REGCACHE_SYNC_OUT(); return; L_0893DA20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893DA3C; } @@ -4497,7 +4697,17 @@ L_0893DA64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DA78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4516,7 +4726,6 @@ L_0893DAA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); ctx.gpr[18] = (0u | 46u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893DACC; } @@ -4531,7 +4740,6 @@ L_0893DAB4: L_0893DAC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893DAB4; } @@ -4540,7 +4748,6 @@ L_0893DAC0: L_0893DACC: aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893DAE8; } @@ -4568,7 +4775,17 @@ L_0893DAE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DB08: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -4618,7 +4835,17 @@ L_0893DB68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DB80: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -4635,7 +4862,6 @@ L_0893DBA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893DBD0; } @@ -4650,7 +4876,6 @@ L_0893DBB8: AOT_REGCACHE_SYNC_OUT(); return; L_0893DBC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893DBE4; } @@ -4676,7 +4901,17 @@ L_0893DBE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DBFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[18]); @@ -4694,7 +4929,6 @@ L_0893DC1C: goto L_0893CD44; L_0893DC24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893DC3C; } @@ -4704,7 +4938,6 @@ L_0893DC2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893DC48; } @@ -4744,7 +4977,6 @@ L_0893DC68: AOT_REGCACHE_SYNC_OUT(); return; L_0893DC78: { const bool branch_taken = ctx.gpr[18] != aot_gpr_17; - // nop if (branch_taken) { goto L_0893DCA8; } @@ -4825,7 +5057,17 @@ L_0893DCFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DD14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4842,7 +5084,6 @@ L_0893DD14: AOT_REGCACHE_SYNC_OUT(); return; L_0893DD40: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0893DD64; } @@ -4851,7 +5092,6 @@ L_0893DD40: L_0893DD48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893DD64; } @@ -4869,7 +5109,6 @@ L_0893DD54: } L_0893DD64: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0893DD7C; } @@ -4884,7 +5123,6 @@ L_0893DD6C: AOT_REGCACHE_SYNC_OUT(); return; L_0893DD7C: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0893DD9C; } @@ -4926,7 +5164,17 @@ L_0893DDB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DDD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4949,11 +5197,20 @@ L_0893DDFC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-9896))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DE14: aot_gpr_4 = (aot_gpr_16 | 0u); aot_gpr_31 = (0x0893DE20u); @@ -5057,7 +5314,6 @@ L_0893DEAC: AOT_REGCACHE_SYNC_OUT(); return; L_0893DEB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893DED0; } @@ -5069,7 +5325,6 @@ L_0893DEC0: goto L_0893D904; L_0893DEC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893DED8; } @@ -5130,7 +5385,17 @@ L_0893DF0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DF20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -5157,7 +5422,6 @@ L_0893DF4C: AOT_REGCACHE_SYNC_OUT(); return; L_0893DF5C: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_0893DF9C; } @@ -5169,7 +5433,6 @@ L_0893DF64: goto L_0893CD44; L_0893DF6C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893DF9C; } @@ -5211,7 +5474,17 @@ L_0893DF9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893DFBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -5278,7 +5551,6 @@ L_0893E060: L_0893E06C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0893E080; } @@ -5286,7 +5558,6 @@ L_0893E06C: } L_0893E078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893E130; } @@ -5301,7 +5572,6 @@ L_0893E08C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_5 = (static_cast(aot_gpr_4) < 92 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893E0BC; } @@ -5310,7 +5580,6 @@ L_0893E08C: L_0893E09C: aot_gpr_4 = (static_cast(aot_gpr_4) < 91 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893E100; } @@ -5323,7 +5592,6 @@ L_0893E0A8: goto L_0893C08C; L_0893E0B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893E10C; } @@ -5331,7 +5599,6 @@ L_0893E0B4: } L_0893E0BC: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0893E100; } @@ -5345,7 +5612,6 @@ L_0893E0C4: L_0893E0CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_0893E0EC; } @@ -5358,7 +5624,6 @@ L_0893E0D8: goto L_0893C2F0; L_0893E0E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893E0F8; } @@ -5371,7 +5636,6 @@ L_0893E0EC: goto L_0893C08C; L_0893E0F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893E10C; } @@ -5403,7 +5667,6 @@ L_0893E120: AOT_REGCACHE_SYNC_OUT(); return; L_0893E128: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0893E060; } @@ -5482,14 +5745,34 @@ L_0893E1C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E20C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E214: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5600,7 +5883,17 @@ L_0893E338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E35C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5643,7 +5936,6 @@ L_0893E3CC: goto L_0893ED4C; L_0893E3D8: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0893E3E4; } @@ -5659,7 +5951,6 @@ L_0893E3E4: goto L_0893ED4C; L_0893E3F0: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0893E3FC; } @@ -5675,7 +5966,6 @@ L_0893E3FC: goto L_0893ED4C; L_0893E408: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0893E414; } @@ -5698,7 +5988,6 @@ L_0893E414: } L_0893E42C: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_0893E444; } @@ -5742,7 +6031,6 @@ L_0893E468: goto L_0893E46C; L_0893E46C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0893E4C0; } @@ -5751,7 +6039,6 @@ L_0893E46C: L_0893E474: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(80))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0893E4C0; } @@ -5765,7 +6052,6 @@ L_0893E480: L_0893E488: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0893E4BC; } @@ -5793,12 +6079,10 @@ L_0893E4A4: } L_0893E4AC: aot_gpr_31 = (0x0893E4B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 620u, 0x0888FEB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893E4B4u) goto L_0893E4B4; AOT_REGCACHE_SYNC_OUT(); return; L_0893E4B4: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0893E494; } @@ -5839,7 +6123,6 @@ L_0893E4F0: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[20]); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[6] != aot_gpr_17; - // nop if (branch_taken) { goto L_0893E514; } @@ -5868,7 +6151,6 @@ L_0893E514: L_0893E52C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893E5A8; } @@ -5944,11 +6226,20 @@ L_0893E5A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E5E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893E604; } @@ -5957,7 +6248,6 @@ L_0893E5E0: L_0893E5EC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0893E60C; } @@ -5966,7 +6256,6 @@ L_0893E5EC: L_0893E5F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893E5EC; } @@ -5985,11 +6274,20 @@ L_0893E60C: goto L_0893E610; L_0893E610: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E618: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6043,7 +6341,6 @@ L_0893E69C: L_0893E6A8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893E6C0; } @@ -6064,7 +6361,6 @@ L_0893E6C0: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[19]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893E6E4; } @@ -6151,7 +6447,6 @@ L_0893E780: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.gpr[6] = (aot_gpr_16 < ctx.gpr[6] ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0893E824; } @@ -6207,7 +6502,6 @@ L_0893E824: AOT_REGCACHE_SYNC_OUT(); return; L_0893E82C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893E844; } @@ -6260,7 +6554,17 @@ L_0893E86C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6283,7 +6587,17 @@ L_0893E8CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E8D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6306,7 +6620,17 @@ L_0893E908: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893E914: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6334,7 +6658,6 @@ L_0893E934: L_0893E954: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893E990; } @@ -6347,7 +6670,6 @@ L_0893E960: ctx.gpr[6] = (0u < ctx.gpr[6] ? 1u : 0u); ctx.gpr[6] = (ctx.gpr[6] & 255u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0893E984; } @@ -6355,7 +6677,6 @@ L_0893E960: } L_0893E97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893E990; } @@ -6364,7 +6685,6 @@ L_0893E97C: L_0893E984: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893E960; } @@ -6372,7 +6692,6 @@ L_0893E984: } L_0893E990: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893E9B4; } @@ -6402,7 +6721,6 @@ L_0893E9B4: AOT_REGCACHE_SYNC_OUT(); return; L_0893E9C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893E9D4; } @@ -6419,7 +6737,6 @@ L_0893E9D4: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(64), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893E9F0; } @@ -6445,7 +6762,17 @@ L_0893E9F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EA14: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_5); @@ -6496,7 +6823,6 @@ L_0893EAAC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893EBA0; } @@ -6529,7 +6855,6 @@ L_0893EAE4: ctx.gpr[6] = (0u < ctx.gpr[6] ? 1u : 0u); ctx.gpr[6] = (ctx.gpr[6] & 255u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0893EB00; } @@ -6541,7 +6866,6 @@ L_0893EAFC: L_0893EB00: ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(48)))))); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0893EB14; } @@ -6571,7 +6895,6 @@ L_0893EB2C: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_16; - // nop if (branch_taken) { goto L_0893EB94; } @@ -6580,9 +6903,7 @@ L_0893EB2C: L_0893EB3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893EB80; } @@ -6593,9 +6914,7 @@ L_0893EB50: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(36))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893EB74; } @@ -6603,7 +6922,6 @@ L_0893EB50: } L_0893EB6C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0893EB88; } @@ -6630,7 +6948,6 @@ L_0893EB88: L_0893EB94: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(0))); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_0893EADC; } @@ -6699,9 +7016,7 @@ L_0893EC10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893EC38; } @@ -6736,7 +7051,17 @@ L_0893EC3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EC70: ctx.gpr[6] = (aot_gpr_5 << 4u); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6748,7 +7073,17 @@ L_0893EC70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EC8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -6806,7 +7141,6 @@ L_0893ECF4: } L_0893ED0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893ED24; } @@ -6841,7 +7175,17 @@ L_0893ED28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893ED4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6881,7 +7225,17 @@ L_0893ED90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EDA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[6] = (1u << 16u); @@ -6899,7 +7253,17 @@ L_0893EDA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EDD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6918,7 +7282,6 @@ L_0893EDD4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(22)))))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0893EE24; } @@ -6926,7 +7289,6 @@ L_0893EDD4: } L_0893EE1C: aot_gpr_31 = (0x0893EE24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 570u, 0x08AD3464u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893EE24u) goto L_0893EE24; AOT_REGCACHE_SYNC_OUT(); return; L_0893EE24: @@ -6936,7 +7298,17 @@ L_0893EE24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EE30: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[6] = (1u << 16u); @@ -6954,7 +7326,17 @@ L_0893EE30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EE64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[6] = (1u << 16u); @@ -6970,7 +7352,17 @@ L_0893EE64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EE90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6992,7 +7384,6 @@ L_0893EE90: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893EF20; } @@ -7006,7 +7397,6 @@ L_0893EEE8: AOT_REGCACHE_SYNC_OUT(); return; L_0893EEF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893EF18; } @@ -7025,7 +7415,6 @@ L_0893EEFC: } L_0893EF10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893EF20; } @@ -7056,7 +7445,17 @@ L_0893EF24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EF40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7084,7 +7483,6 @@ L_0893EF68: } L_0893EF84: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0893EFAC; } @@ -7118,7 +7516,6 @@ L_0893EFB8: goto L_0893EFBC; L_0893EFBC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0893EFCC; } @@ -7147,7 +7544,17 @@ L_0893EFCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893EFFC: { const std::uint32_t vfpu_address = ctx.gpr[6] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7201,11 +7608,20 @@ L_0893EFFC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F024: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1044), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1048), 0u); @@ -7214,7 +7630,17 @@ L_0893F024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F034: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -7262,7 +7688,6 @@ L_0893F0C8: } L_0893F0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893F2D8; } @@ -7309,7 +7734,6 @@ L_0893F0E8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0893F138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893F138u) goto L_0893F138; AOT_REGCACHE_SYNC_OUT(); return; L_0893F138: @@ -7580,7 +8004,6 @@ L_0893F290: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893F2AC; } @@ -7594,7 +8017,6 @@ L_0893F2A4: L_0893F2AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(5))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893F2D4; } @@ -7603,9 +8025,7 @@ L_0893F2AC: L_0893F2B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893F2D4; } @@ -7641,7 +8061,17 @@ L_0893F2D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F318: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7715,7 +8145,6 @@ L_0893F36C: goto L_0893F374; L_0893F374: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893F43C; } @@ -7787,7 +8216,6 @@ L_0893F404: AOT_REGCACHE_SYNC_OUT(); return; L_0893F418: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0893F43C; } @@ -7803,7 +8231,6 @@ L_0893F420: AOT_REGCACHE_SYNC_OUT(); return; L_0893F434: aot_gpr_31 = (0x0893F43Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0893F43Cu) goto L_0893F43C; AOT_REGCACHE_SYNC_OUT(); return; L_0893F43C: @@ -7814,7 +8241,17 @@ L_0893F43C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F44C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -7840,7 +8277,6 @@ L_0893F47C: L_0893F48C: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893F4E0; } @@ -7860,7 +8296,6 @@ L_0893F498: } L_0893F4B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893F5B0; } @@ -7876,7 +8311,6 @@ L_0893F4B8: } L_0893F4C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893F4E0; } @@ -7896,7 +8330,6 @@ L_0893F4C8: } L_0893F4E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893F5B0; } @@ -8006,7 +8439,17 @@ L_0893F5B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F5D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(0u); @@ -8039,7 +8482,17 @@ L_0893F5D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F620: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8060,7 +8513,6 @@ L_0893F63C: L_0893F644: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1044))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893F684; } @@ -8074,7 +8526,6 @@ L_0893F650: L_0893F658: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1044))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893F680; } @@ -8104,7 +8555,17 @@ L_0893F684: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F698: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -8121,7 +8582,6 @@ L_0893F698: } L_0893F6D0: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_0893F6E8; } @@ -8169,7 +8629,6 @@ L_0893F70C: goto L_0893F720; L_0893F720: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0893F93C; } @@ -8182,7 +8641,6 @@ L_0893F728: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893F93C; } @@ -8199,7 +8657,6 @@ L_0893F750: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893F93C; } @@ -8212,7 +8669,6 @@ L_0893F764: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893F93C; } @@ -8334,9 +8790,7 @@ L_0893F78C: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893F93C; } @@ -8345,7 +8799,6 @@ L_0893F78C: L_0893F800: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1048), aot_gpr_17); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0893F818; } @@ -8367,7 +8820,6 @@ L_0893F818: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0893F854; } @@ -8418,9 +8870,7 @@ L_0893F884: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_fpr_20 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0893F934; } @@ -8446,7 +8896,6 @@ L_0893F8E4: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -8463,7 +8912,6 @@ L_0893F930: goto L_0893F934; L_0893F934: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893F948; } @@ -8495,11 +8943,20 @@ L_0893F948: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F970: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1048))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0893F994; } @@ -8526,7 +8983,17 @@ L_0893F994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F9B8: aot_gpr_5 = (0u | 0u); aot_gpr_4 = (2247u << 16u); @@ -8545,11 +9012,20 @@ L_0893F9C4: } L_0893F9D8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893F9E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8561,7 +9037,6 @@ L_0893F9E0: L_0893F9FC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893FA10; } @@ -8593,7 +9068,17 @@ L_0893FA20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893FA34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8605,7 +9090,6 @@ L_0893FA34: L_0893FA50: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893FA64; } @@ -8637,7 +9121,17 @@ L_0893FA74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893FA88: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8684,7 +9178,6 @@ L_0893FAE8: ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[9]); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(8))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0893FB2C; } @@ -8694,7 +9187,6 @@ L_0893FB14: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); ctx.gpr[8] = (static_cast(aot_gpr_16) < 8 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0893FAB8; } @@ -8702,7 +9194,6 @@ L_0893FB14: } L_0893FB24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893FB9C; } @@ -8755,7 +9246,6 @@ L_0893FB2C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(5), static_cast(aot_gpr_16)); aot_gpr_31 = (0x0893FB94u); - // nop goto L_0893F44C; L_0893FB94: { const bool branch_taken = 0u == 0u; @@ -8769,7 +9259,6 @@ L_0893FB9C: aot_gpr_16 = (0u | 0u); ctx.gpr[8] = (static_cast(aot_gpr_16) < 8 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_0893FE54; } @@ -8787,7 +9276,6 @@ L_0893FBAC: ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[9]); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(4))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0893FE44; } @@ -8826,7 +9314,6 @@ L_0893FBDC: goto L_0893F5D8; L_0893FC24: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_0893FC60; } @@ -8867,7 +9354,6 @@ L_0893FC88: aot_gpr_17 = (0u | 1u); aot_gpr_4 = (static_cast(aot_gpr_17) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893FE08; } @@ -8893,7 +9379,6 @@ L_0893FCC4: { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_gpr_4 = (aot_gpr_17 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0893FD48; } @@ -8956,7 +9441,6 @@ L_0893FCDC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893FDAC; } @@ -9052,7 +9536,6 @@ L_0893FDAC: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0893FC98; } @@ -9071,7 +9554,6 @@ L_0893FE08: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(4), static_cast(aot_gpr_17)); aot_gpr_31 = (0x0893FE3Cu); - // nop goto L_0893F44C; L_0893FE3C: { const bool branch_taken = 0u == 0u; @@ -9085,7 +9567,6 @@ L_0893FE44: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); ctx.gpr[8] = (static_cast(aot_gpr_16) < 8 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0893FBAC; } @@ -9106,7 +9587,17 @@ L_0893FE58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893FE6C: ctx.gpr[9] = (aot_gpr_5 | 0u); ctx.gpr[8] = (0u | 0u); @@ -9118,7 +9609,6 @@ L_0893FE6C: L_0893FE84: ctx.gpr[10] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_0893FE9C; } @@ -9127,7 +9617,6 @@ L_0893FE84: L_0893FE90: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); { const bool branch_taken = ctx.gpr[10] == aot_gpr_4; - // nop if (branch_taken) { goto L_0893FEB8; } @@ -9146,7 +9635,6 @@ L_0893FE9C: } L_0893FEB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0893FEC8; } @@ -9171,17 +9659,25 @@ L_0893FEB8: goto L_0893FEC8; L_0893FEC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0893FED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[6] = (0u | 0u); ctx.gpr[7] = (static_cast(ctx.gpr[6]) < 8 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 3u, 0x08940040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9216,7 +9712,6 @@ L_0893FF14: ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 2u, 0x08940030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9225,7 +9720,6 @@ L_0893FF14: L_0893FF40: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0893FF54; @@ -9236,7 +9730,6 @@ L_0893FF54: aot_gpr_4 = (aot_gpr_4 | 48759u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0893FF70; diff --git a/profiles/vcs/generated/generated_unit_0079.cpp b/profiles/vcs/generated/generated_unit_0079.cpp index 625a4ea..c691785 100644 --- a/profiles/vcs/generated/generated_unit_0079.cpp +++ b/profiles/vcs/generated/generated_unit_0079.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0079[4084] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 4, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 13, - 0, 14, 0, 15, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 24, 0, 0, 0, 25, 0, 26, 0, 27, 28, 0, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 32, 0, 0, 0, 33, 0, 34, 0, 0, 0, 0, 35, 0, - 36, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 52, - 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, - 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 66, 0, 67, 0, - 68, 0, 0, 0, 69, 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, - 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, - 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, - 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, - 99, 100, 0, 0, 101, 0, 0, 102, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 0, 0, 107, - 0, 0, 0, 108, 0, 109, 0, 110, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 115, 0, 0, 116, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 0, 122, 0, 0, 0, 0, 123, - 0, 0, 0, 124, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 131, 0, - 0, 0, 0, 132, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 136, 0, 0, 137, 0, 138, 0, 139, 0, 0, 140, - 0, 0, 0, 141, 0, 142, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 0, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 162, 0, 163, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, - 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, 0, 0, 174, 175, 0, 0, 0, 176, 0, 177, 0, 0, 178, - 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 185, - 0, 0, 186, 0, 187, 0, 0, 188, 0, 189, 0, 0, 0, 0, 190, 0, 191, 0, 192, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, - 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 200, 0, 0, 0, 201, - 0, 0, 202, 0, 0, 0, 203, 204, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, - 0, 0, 0, 210, 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 214, 0, 0, 0, 215, 0, 0, 0, - 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 218, 219, - 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 222, 0, 0, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 228, 0, 229, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 232, - 0, 233, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 238, 0, 239, 0, 0, - 0, 0, 0, 240, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 245, 0, 0, 0, 0, 246, 0, 0, 247, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, - 255, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 263, 0, 264, 0, 0, 0, 265, 0, 0, 266, 0, 267, 268, 0, 269, 0, 270, 0, 0, 0, 0, - 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 274, 275, 0, 276, 0, 277, 278, 0, 0, 0, 0, 0, 0, 279, - 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, - 0, 0, 285, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, - 0, 294, 0, 0, 0, 295, 0, 0, 0, 0, 0, 296, 0, 297, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 299, 0, 0, 0, 300, 0, 301, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 305, 0, 0, 0, 0, 306, 0, 307, 0, - 308, 309, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 0, 314, 0, 0, 0, 315, 316, 0, - 0, 317, 0, 0, 318, 0, 319, 0, 0, 320, 0, 0, 0, 321, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 0, - 326, 0, 327, 0, 328, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 332, 0, 333, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 338, 0, 339, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 0, 342, 343, 0, 0, - 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, 347, 0, 348, 0, 0, 0, 349, 0, 0, - 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 356, 0, 357, 358, 0, 0, 359, 0, 0, 0, 360, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 364, - 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, - 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 384, 385, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 390, 0, 391, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 394, 0, - 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 403, 0, 0, 404, 405, - 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 412, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, - 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, - 0, 435, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, - 0, 0, 442, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, - 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, 454, - 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, - 458, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, - 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, - 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, - 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, - 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 547, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0079[64] = { + 0xA8004140140B1001ull, 0x2D4490402010841Aull, 0x000A40A1428A2000ull, 0x4804900020008080ull, + 0x8000400A88000080ull, 0x52200005A0001280ull, 0x4420000004001291ull, 0x2804900504002000ull, + 0x0000000000000050ull, 0x2000012020000040ull, 0x0000000000012400ull, 0x4800000000000002ull, + 0x8A00000000000A93ull, 0x84A44100911120A8ull, 0x952101284A0240A8ull, 0x00000004004000A8ull, + 0x0000000080000422ull, 0x0001000008860000ull, 0x0008000042220000ull, 0x00080000A1400000ull, + 0x005048040A000000ull, 0x8852200294609000ull, 0x8A2010010A454294ull, 0x11201018500424C4ull, + 0x00001010C8000002ull, 0x8A16000400040051ull, 0x486202182850100Aull, 0x0108100B55504000ull, + 0x81AD40010AD22A04ull, 0x20448AA450120002ull, 0x5094045100006822ull, 0x1202625262500413ull, + 0x31214848010B0255ull, 0x0009002022920010ull, 0x8082313440000440ull, 0x1040004000204040ull, + 0x0200040410028000ull, 0x0200400400200100ull, 0x0080000801808008ull, 0xCA514405448A2400ull, + 0x8080200080001042ull, 0x000200000A000200ull, 0x2288000808088004ull, 0x1009800000480000ull, + 0x0480008A10020020ull, 0x2408041420080000ull, 0x0800010882420908ull, 0x0020800000000005ull, + 0xA000140001000800ull, 0x8001400010010000ull, 0x8002800020040002ull, 0x0800500008010002ull, + 0x2010000004100020ull, 0x0080400002800020ull, 0x1008020000140002ull, 0x002010040000A000ull, + 0x8000080000014040ull, 0x2000020100880000ull, 0x2000100402200200ull, 0x4000100802200200ull, + 0x2000100401100400ull, 0x0200001000020200ull, 0x8020100020000804ull, 0x0008040100020000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0079[64] = { + 1u, 14u, 30u, 42u, 50u, 57u, 68u, 77u, 86u, 88u, 93u, 96u, 99u, 108u, 124u, 141u, + 146u, 150u, 155u, 160u, 165u, 172u, 186u, 202u, 216u, 222u, 233u, 248u, 261u, 280u, 294u, 308u, + 326u, 344u, 353u, 365u, 371u, 377u, 382u, 388u, 406u, 413u, 417u, 426u, 432u, 440u, 448u, 458u, + 462u, 468u, 473u, 479u, 485u, 490u, 495u, 501u, 506u, 511u, 516u, 522u, 528u, 534u, 538u, 544u, }; void recomp_unit_0079_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0079_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08940000u; - entry_id = (entry_delta < 16336u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0079[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16336u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0079[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0079[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08940000; @@ -773,7 +680,6 @@ L_08940030: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); aot_gpr_7 = (static_cast(aot_gpr_6) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0078_entry, 78u, 860u, 0x0893FEE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -788,7 +694,17 @@ L_08940044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894004C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -800,7 +716,6 @@ L_0894004C: AOT_REGCACHE_SYNC_OUT(); return; L_08940068: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089400FC; } @@ -832,7 +747,6 @@ L_08940070: AOT_REGCACHE_SYNC_OUT(); return; L_08940098: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089400F4; } @@ -860,7 +774,6 @@ L_089400B8: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(2320), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940104; } @@ -892,7 +805,6 @@ L_089400FC: } L_08940104: aot_gpr_31 = (0x0894010Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894010Cu) goto L_0894010C; AOT_REGCACHE_SYNC_OUT(); return; L_0894010C: @@ -926,7 +838,17 @@ L_0894013C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08940150: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -940,7 +862,17 @@ L_08940150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08940174: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -954,7 +886,17 @@ L_08940174: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08940198: aot_gpr_4 = (aot_gpr_4 << 3u); aot_gpr_5 = (2234u << 16u); @@ -965,7 +907,17 @@ L_08940198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089401B0: ctx.gpr[2] = (2247u << 16u); ctx.gpr[2] = (ctx.gpr[2] + static_cast(160)); @@ -974,7 +926,6 @@ L_089401B0: L_089401BC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_089401E0; } @@ -992,7 +943,6 @@ L_089401C8: } L_089401D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089401E8; } @@ -1000,7 +950,6 @@ L_089401D8: } L_089401E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089401EC; } @@ -1011,11 +960,20 @@ L_089401E8: goto L_089401EC; L_089401EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089401F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1040,7 +998,6 @@ L_08940234: } L_08940244: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0894025C; } @@ -1088,7 +1045,6 @@ L_08940280: goto L_08940294; L_08940294: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08940624; } @@ -1101,7 +1057,6 @@ L_0894029C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940624; } @@ -1110,7 +1065,6 @@ L_0894029C: L_089402B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1044))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08940624; } @@ -1305,9 +1259,7 @@ L_08940374: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08940600; } @@ -1316,7 +1268,6 @@ L_08940374: L_089403B0: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1048), ctx.gpr[17]); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089403C8; } @@ -1399,7 +1350,6 @@ L_0894047C: goto L_08940484; L_08940484: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089404B8; } @@ -1445,9 +1395,7 @@ L_089404FC: aot_fpr_20 = aot_fpr_20 - aot_fpr_12; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08940580; } @@ -1477,7 +1425,6 @@ L_08940530: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -1494,7 +1441,6 @@ L_0894057C: goto L_08940580; L_08940580: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_089405D4; } @@ -1563,7 +1509,6 @@ L_08940588: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = static_cast(ctx.gpr[18]) > 0; - // nop if (branch_taken) { goto L_08940588; } @@ -1573,7 +1518,6 @@ L_089405D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940630; } @@ -1582,7 +1526,6 @@ L_089405D4: L_089405E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940630; } @@ -1595,7 +1538,6 @@ L_089405F0: AOT_REGCACHE_SYNC_OUT(); return; L_089405F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08940630; } @@ -1605,7 +1547,6 @@ L_08940600: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940624; } @@ -1614,7 +1555,6 @@ L_08940600: L_08940610: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940624; } @@ -1655,7 +1595,17 @@ L_08940630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08940668: aot_gpr_29 = (aot_gpr_29 + static_cast(-992)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -1670,7 +1620,6 @@ L_08940668: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u + static_cast(-513)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089406D4; @@ -1679,7 +1628,6 @@ L_08940668: L_089406D4: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(1056), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_089406E8; @@ -1689,7 +1637,6 @@ L_089406E8: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(1056), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1048))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08940768; } @@ -1708,7 +1655,6 @@ L_089406F8: aot_gpr_5 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08940734; @@ -1727,7 +1673,6 @@ L_08940734: aot_gpr_4 = (aot_gpr_6 & aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(72), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08940780; } @@ -1743,7 +1688,6 @@ L_08940768: goto L_08940780; L_08940780: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08940E38; } @@ -1834,7 +1778,6 @@ L_089407F4: goto L_08940F58; L_08940810: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08940D34; } @@ -2134,9 +2077,7 @@ L_08940918: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08940994; } @@ -2292,7 +2233,6 @@ L_089409F4: L_08940A28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1048))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940C2C; } @@ -2445,7 +2385,6 @@ L_08940C00: L_08940C04: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940C24; } @@ -2454,7 +2393,6 @@ L_08940C04: L_08940C10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940C24; } @@ -2467,7 +2405,6 @@ L_08940C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08940C24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08940CE4; } @@ -2561,7 +2498,6 @@ L_08940D0C: goto L_08940D14; L_08940D14: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940D34; } @@ -2579,7 +2515,6 @@ L_08940D1C: L_08940D34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1048))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940DDC; } @@ -2645,7 +2580,6 @@ L_08940DB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(536))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940DDC; } @@ -2654,7 +2588,6 @@ L_08940DB8: L_08940DC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(528))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940DDC; } @@ -2668,7 +2601,6 @@ L_08940DD4: L_08940DDC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1044))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940E38; } @@ -2701,7 +2633,6 @@ L_08940E0C: goto L_08940E14; L_08940E14: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940E38; } @@ -2720,7 +2651,6 @@ L_08940E1C: L_08940E38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1048))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940EF0; } @@ -2734,7 +2664,6 @@ L_08940E44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08940E6C; } @@ -2748,7 +2677,6 @@ L_08940E64: L_08940E6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1048))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940E94; } @@ -2759,7 +2687,6 @@ L_08940E78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[16]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940E94; } @@ -2773,7 +2700,6 @@ L_08940E8C: L_08940E94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1048))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940F1C; } @@ -2787,7 +2713,6 @@ L_08940EA0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940F1C; } @@ -2798,7 +2723,6 @@ L_08940EC0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08940EE8; } @@ -2807,7 +2731,6 @@ L_08940EC0: L_08940ED4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940EE8; } @@ -2820,7 +2743,6 @@ L_08940EE0: AOT_REGCACHE_SYNC_OUT(); return; L_08940EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08940F1C; } @@ -2829,7 +2751,6 @@ L_08940EE8: L_08940EF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08940F0C; } @@ -2876,7 +2797,17 @@ L_08940F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08940F58: aot_gpr_29 = (aot_gpr_29 + static_cast(-864)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2966,9 +2897,7 @@ L_08940F88: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894137C; } @@ -2978,7 +2907,6 @@ L_08941004: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08941264; } @@ -2989,7 +2917,6 @@ L_08941014: aot_gpr_6 = (ctx.gpr[17] + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0894115C; } @@ -3052,9 +2979,7 @@ L_08941028: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08941144; } @@ -3238,7 +3163,6 @@ L_0894107C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08941148; } @@ -3252,7 +3176,6 @@ L_08941148: aot_gpr_6 = (ctx.gpr[17] + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08941028; } @@ -3262,7 +3185,6 @@ L_0894115C: aot_gpr_5 = (ctx.gpr[17] + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08941254; } @@ -3325,9 +3247,7 @@ L_0894116C: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08941244; } @@ -3459,7 +3379,6 @@ L_08941244: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0894116C; } @@ -3469,7 +3388,6 @@ L_08941254: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08941014; } @@ -3480,7 +3398,6 @@ L_08941264: aot_gpr_5 = (ctx.gpr[17] + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08941374; } @@ -3543,9 +3460,7 @@ L_08941278: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08941358; } @@ -3673,7 +3588,6 @@ L_089412CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08941360; } @@ -3692,7 +3606,6 @@ L_08941360: aot_gpr_5 = (ctx.gpr[17] + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08941278; } @@ -3767,7 +3680,6 @@ L_0894137C: ctx.gpr[18] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08941464; } @@ -3875,7 +3787,6 @@ L_089413CC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089413CC; } @@ -3903,7 +3814,17 @@ L_0894146C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941488: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3923,7 +3844,17 @@ L_089414AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089414B8: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(0u)); { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; @@ -3933,14 +3864,33 @@ L_089414B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089414D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089414D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -4143,7 +4093,6 @@ L_08941658: } L_08941664: aot_gpr_31 = (0x0894166Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894166Cu) goto L_0894166C; AOT_REGCACHE_SYNC_OUT(); return; L_0894166C: @@ -4172,7 +4121,17 @@ L_08941680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089416B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4182,7 +4141,6 @@ L_089416B0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08941734; } @@ -4192,7 +4150,6 @@ L_089416D4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_08941728; } @@ -4207,7 +4164,6 @@ L_089416EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); aot_gpr_5 = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0894171C; } @@ -4244,7 +4200,6 @@ L_0894171C: L_08941728: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089416D4; } @@ -4262,7 +4217,17 @@ L_08941734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941748: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4273,7 +4238,6 @@ L_08941748: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); ctx.gpr[17] = (aot_gpr_5 | 0u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08941790; } @@ -4289,7 +4253,6 @@ L_08941778: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08941770; } @@ -4313,7 +4276,17 @@ L_08941790: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089417B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4323,7 +4296,6 @@ L_089417B0: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_089417F0; } @@ -4338,7 +4310,6 @@ L_089417E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089417D4; } @@ -4356,7 +4327,17 @@ L_089417F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941804: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4403,7 +4384,6 @@ L_08941804: aot_gpr_5 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_4 | 0u); if (branch_taken) { @@ -4429,14 +4409,23 @@ L_0894187C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941890: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16179u << 16u); if (branch_taken) { @@ -4475,14 +4464,33 @@ L_08941900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941910: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941918: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7644), aot_gpr_4); @@ -4499,7 +4507,17 @@ L_08941918: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941948: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_6 = (0u | 24u); @@ -4510,8 +4528,6 @@ L_08941948: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8900), aot_gpr_6); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(7650), static_cast(0u)); aot_gpr_6 = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7648), static_cast(aot_gpr_6)); aot_gpr_4 = (ctx.hi); @@ -4520,7 +4536,17 @@ L_08941948: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941988: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_7 = (aot_gpr_5 & 255u); @@ -4536,7 +4562,6 @@ L_08941988: aot_gpr_4 = (aot_gpr_4 + aot_gpr_7); aot_gpr_6 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089419C8; } @@ -4551,13 +4576,22 @@ L_089419C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089419D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08941A04; } @@ -4580,7 +4614,6 @@ L_089419EC: } L_089419FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08941A58; } @@ -4588,7 +4621,6 @@ L_089419FC: } L_08941A04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08941AEC; } @@ -4711,7 +4743,17 @@ L_08941AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941AF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -4732,7 +4774,17 @@ L_08941AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941B38: aot_gpr_6 = (aot_gpr_5 & 255u); aot_gpr_4 = (aot_gpr_4 & 255u); @@ -4755,7 +4807,6 @@ L_08941B50: } L_08941B58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08941B80; } @@ -4779,7 +4830,6 @@ L_08941B68: } L_08941B70: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08941B80; } @@ -4798,11 +4848,20 @@ L_08941B80: goto L_08941B84; L_08941B84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941B8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); @@ -4816,7 +4875,17 @@ L_08941B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941BB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8904))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8905))); @@ -4828,7 +4897,17 @@ L_08941BB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941BCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4851,7 +4930,17 @@ L_08941BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941C08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4900,7 +4989,6 @@ L_08941C44: goto L_08941C50; L_08941C50: aot_gpr_31 = (0x08941C58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08941C58u) goto L_08941C58; AOT_REGCACHE_SYNC_OUT(); return; L_08941C58: @@ -4908,7 +4996,6 @@ L_08941C58: goto L_08941C5C; L_08941C5C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08941C6C; } @@ -4931,7 +5018,17 @@ L_08941C6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941C80: aot_gpr_5 = (2234u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-8976)); @@ -4949,7 +5046,6 @@ L_08941C80: goto L_08941CB8; L_08941CB8: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08941CC8; } @@ -4968,7 +5064,6 @@ L_08941CC8: goto L_08941CCC; L_08941CCC: { const bool branch_taken = ctx.gpr[9] != aot_gpr_6; - // nop if (branch_taken) { goto L_08941CDC; } @@ -5000,11 +5095,20 @@ L_08941CE0: } L_08941CFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941D04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(16), static_cast(0u)); @@ -5030,7 +5134,17 @@ L_08941D44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941D50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5047,7 +5161,6 @@ L_08941D50: } L_08941D70: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08941DC8; } @@ -5078,7 +5191,6 @@ L_08941D94: } L_08941D9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08941DC8; } @@ -5086,7 +5198,6 @@ L_08941D9C: } L_08941DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08941DC8; } @@ -5115,7 +5226,17 @@ L_08941DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941DD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5178,9 +5299,7 @@ L_08941E38: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08941E98; } @@ -5204,14 +5323,23 @@ L_08941E98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-18160))); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08941EDC; } @@ -5224,7 +5352,6 @@ L_08941EC8: L_08941ED0: aot_gpr_4 = (ctx.gpr[16] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08941EC8; } @@ -5251,7 +5378,6 @@ L_08941EF0: } L_08941EF8: aot_gpr_31 = (0x08941F00u); - // nop goto L_08941DD8; L_08941F00: ctx.gpr[16] = (ctx.gpr[16] + static_cast(32)); @@ -5278,7 +5404,17 @@ L_08941F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941F28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5319,7 +5455,6 @@ L_08941F74: L_08941F78: ctx.gpr[18] = (ctx.gpr[20] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08941F58; } @@ -5359,7 +5494,6 @@ L_08941FB4: L_08941FB8: ctx.gpr[18] = (ctx.gpr[20] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08941F98; } @@ -5380,7 +5514,17 @@ L_08941FC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08941FE4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(84))); { const bool branch_taken = ctx.gpr[8] != 0u; @@ -5394,7 +5538,6 @@ L_08941FF0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_7); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08942024; } @@ -5410,7 +5553,6 @@ L_08942000: } L_08942008: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08942018; } @@ -5436,7 +5578,6 @@ L_08942024: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_6); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(80))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08942044; } @@ -5447,11 +5588,20 @@ L_08942040: goto L_08942044; L_08942044: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894204C: aot_gpr_5 = (0u + static_cast(-5)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); @@ -5461,7 +5611,17 @@ L_0894204C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08942060: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5477,7 +5637,6 @@ L_08942060: L_0894208C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_089420E0; } @@ -5552,7 +5711,17 @@ L_089420F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08942110: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -5571,7 +5740,6 @@ L_08942110: L_08942144: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08942164; } @@ -5612,7 +5780,17 @@ L_08942174: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08942194: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2234u << 16u); @@ -5634,7 +5812,17 @@ L_089421C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089421CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(132), ctx.gpr[20]); @@ -5728,7 +5916,6 @@ L_08942290: L_08942294: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089422B0; } @@ -5763,11 +5950,20 @@ L_089422C4: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[22]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-9800))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089422DC: aot_gpr_5 = (0u | 30u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(100), aot_gpr_5); @@ -5872,7 +6068,6 @@ L_08942398: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894265C; } @@ -5924,7 +6119,6 @@ L_089423F0: goto L_08942060; L_0894243C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894265C; } @@ -5998,7 +6192,6 @@ L_089424A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894265C; } @@ -6029,7 +6222,6 @@ L_089424E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894265C; } @@ -6058,7 +6250,6 @@ L_08942520: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894265C; } @@ -6087,7 +6278,6 @@ L_08942554: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894265C; } @@ -6197,7 +6387,17 @@ L_08942660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894268C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1296)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1036))); @@ -6227,9 +6427,7 @@ L_089426DC: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08942788; } @@ -6248,7 +6446,6 @@ L_08942734: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(96))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894274C; } @@ -6285,7 +6482,6 @@ L_08942778: goto L_08942780; L_08942780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 90u, 0x08944C78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6299,7 +6495,6 @@ L_08942788: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(140))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 85u, 0x08944C28u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6309,7 +6504,6 @@ L_089427A8: aot_mem.aot_direct_store16(ctx.gpr[23] + static_cast(140), static_cast(0u)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(145)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089427D0; } @@ -6317,7 +6511,6 @@ L_089427A8: } L_089427B8: aot_gpr_31 = (0x089427C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089427C0u) goto L_089427C0; AOT_REGCACHE_SYNC_OUT(); return; L_089427C0: @@ -6328,7 +6521,6 @@ L_089427C0: goto L_089427D0; L_089427D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089427E4; } @@ -6337,7 +6529,6 @@ L_089427D0: L_089427D8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(145)))))); { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_08942804; } @@ -6352,7 +6543,6 @@ L_089427E4: L_089427EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(145)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08942804; } @@ -6374,7 +6564,6 @@ L_08942804: aot_gpr_4 = (aot_gpr_4 + static_cast(-5)); aot_gpr_5 = (aot_gpr_4 < static_cast(15) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 65u, 0x08944A80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6390,7 +6579,17 @@ L_08942818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08942830: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1152), ctx.gpr[23]); aot_gpr_4 = (ctx.gpr[23] + static_cast(48)); @@ -6473,7 +6672,6 @@ L_089428DC: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089428FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089428FCu) goto L_089428FC; AOT_REGCACHE_SYNC_OUT(); return; L_089428FC: @@ -6510,7 +6708,6 @@ L_08942924: AOT_REGCACHE_SYNC_OUT(); return; L_08942964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 84u, 0x08944C24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6602,7 +6799,6 @@ L_08942A3C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08942A4Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08942A4Cu) goto L_08942A4C; AOT_REGCACHE_SYNC_OUT(); return; L_08942A4C: @@ -6613,7 +6809,6 @@ L_08942A4C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08942A6Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08942A6Cu) goto L_08942A6C; AOT_REGCACHE_SYNC_OUT(); return; L_08942A6C: @@ -6624,7 +6819,6 @@ L_08942A6C: aot_fpr_12 = ctx.fpr[14] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08942A8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08942A8Cu) goto L_08942A8C; AOT_REGCACHE_SYNC_OUT(); return; L_08942A8C: @@ -6650,7 +6844,6 @@ L_08942ACC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08942A3C; } @@ -6724,7 +6917,6 @@ L_08942AF4: L_08942B4C: aot_mem.aot_direct_store32(ctx.gpr[23] + static_cast(88), ctx.gpr[2]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08942C84; } @@ -6861,7 +7053,6 @@ L_08942C70: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08942BC0; } @@ -6869,7 +7060,6 @@ L_08942C70: } L_08942C84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 84u, 0x08944C24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6929,7 +7119,6 @@ L_08942C9C: L_08942CDC: aot_mem.aot_direct_store32(ctx.gpr[23] + static_cast(88), ctx.gpr[2]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08942D88; } @@ -6993,7 +7182,6 @@ L_08942CE8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(146))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08942D88; } @@ -7017,7 +7205,6 @@ L_08942D74: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08942D4C; } @@ -7025,7 +7212,6 @@ L_08942D74: } L_08942D88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 84u, 0x08944C24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7037,7 +7223,6 @@ L_08942D90: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08942F00; } @@ -7070,9 +7255,7 @@ L_08942DCC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08942E0C; } @@ -7095,9 +7278,7 @@ L_08942DF4: L_08942E0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08942E44; } @@ -7120,9 +7301,7 @@ L_08942E2C: L_08942E44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08942E7C; } @@ -7192,7 +7371,6 @@ L_08942EEC: } L_08942F00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 84u, 0x08944C24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7273,7 +7451,6 @@ L_08942FBC: ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); aot_fpr_28 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); aot_gpr_31 = (0x08942FD4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08942FD4u) goto L_08942FD4; AOT_REGCACHE_SYNC_OUT(); return; L_08942FD4: @@ -7336,7 +7513,6 @@ L_0894302C: aot_fpr_12 = aot_fpr_12 + ctx.fpr[26]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(372), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943060u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943060u) goto L_08943060; AOT_REGCACHE_SYNC_OUT(); return; L_08943060: @@ -7362,7 +7538,6 @@ L_08943060: AOT_REGCACHE_SYNC_OUT(); return; L_089430A8: aot_gpr_31 = (0x089430B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089430B0u) goto L_089430B0; AOT_REGCACHE_SYNC_OUT(); return; L_089430B0: @@ -7387,7 +7562,6 @@ L_089430B0: AOT_REGCACHE_SYNC_OUT(); return; L_089430F4: aot_gpr_31 = (0x089430FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089430FCu) goto L_089430FC; AOT_REGCACHE_SYNC_OUT(); return; L_089430FC: @@ -7444,7 +7618,6 @@ L_08943140: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1216), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(372), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943170u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943170u) goto L_08943170; AOT_REGCACHE_SYNC_OUT(); return; L_08943170: @@ -7470,7 +7643,6 @@ L_08943170: AOT_REGCACHE_SYNC_OUT(); return; L_089431B8: aot_gpr_31 = (0x089431C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089431C0u) goto L_089431C0; AOT_REGCACHE_SYNC_OUT(); return; L_089431C0: @@ -7493,7 +7665,6 @@ L_089431C0: AOT_REGCACHE_SYNC_OUT(); return; L_089431FC: aot_gpr_31 = (0x08943204u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943204u) goto L_08943204; AOT_REGCACHE_SYNC_OUT(); return; L_08943204: @@ -7549,7 +7720,6 @@ L_08943248: aot_fpr_12 = aot_fpr_12 + ctx.fpr[26]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(372), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943274u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943274u) goto L_08943274; AOT_REGCACHE_SYNC_OUT(); return; L_08943274: @@ -7575,7 +7745,6 @@ L_08943274: AOT_REGCACHE_SYNC_OUT(); return; L_089432BC: aot_gpr_31 = (0x089432C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089432C4u) goto L_089432C4; AOT_REGCACHE_SYNC_OUT(); return; L_089432C4: @@ -7597,7 +7766,6 @@ L_089432C4: AOT_REGCACHE_SYNC_OUT(); return; L_089432FC: aot_gpr_31 = (0x08943304u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943304u) goto L_08943304; AOT_REGCACHE_SYNC_OUT(); return; L_08943304: @@ -7651,7 +7819,6 @@ L_08943340: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(372), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0894336Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894336Cu) goto L_0894336C; AOT_REGCACHE_SYNC_OUT(); return; L_0894336C: @@ -7676,7 +7843,6 @@ L_0894336C: AOT_REGCACHE_SYNC_OUT(); return; L_089433B0: aot_gpr_31 = (0x089433B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089433B8u) goto L_089433B8; AOT_REGCACHE_SYNC_OUT(); return; L_089433B8: @@ -7816,7 +7982,6 @@ L_089434F4: aot_fpr_12 = aot_fpr_28 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(436), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943514u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943514u) goto L_08943514; AOT_REGCACHE_SYNC_OUT(); return; L_08943514: @@ -7842,7 +8007,6 @@ L_08943514: AOT_REGCACHE_SYNC_OUT(); return; L_0894355C: aot_gpr_31 = (0x08943564u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943564u) goto L_08943564; AOT_REGCACHE_SYNC_OUT(); return; L_08943564: @@ -7921,7 +8085,6 @@ L_089435DC: aot_fpr_12 = ctx.fpr[30] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(436), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943604u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943604u) goto L_08943604; AOT_REGCACHE_SYNC_OUT(); return; L_08943604: @@ -7946,7 +8109,6 @@ L_08943604: AOT_REGCACHE_SYNC_OUT(); return; L_08943648: aot_gpr_31 = (0x08943650u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943650u) goto L_08943650; AOT_REGCACHE_SYNC_OUT(); return; L_08943650: @@ -8025,7 +8187,6 @@ L_089436CC: aot_fpr_12 = aot_fpr_28 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(436), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089436F0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089436F0u) goto L_089436F0; AOT_REGCACHE_SYNC_OUT(); return; L_089436F0: @@ -8050,7 +8211,6 @@ L_089436F0: AOT_REGCACHE_SYNC_OUT(); return; L_08943734: aot_gpr_31 = (0x0894373Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894373Cu) goto L_0894373C; AOT_REGCACHE_SYNC_OUT(); return; L_0894373C: @@ -8127,7 +8287,6 @@ L_089437B0: aot_fpr_12 = aot_fpr_28 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(436), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089437D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089437D4u) goto L_089437D4; AOT_REGCACHE_SYNC_OUT(); return; L_089437D4: @@ -8166,7 +8325,6 @@ L_08943818: } L_08943838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 84u, 0x08944C24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8319,7 +8477,6 @@ L_08943980: aot_fpr_12 = ctx.fpr[30] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(532), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089439A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089439A4u) goto L_089439A4; AOT_REGCACHE_SYNC_OUT(); return; L_089439A4: @@ -8426,7 +8583,6 @@ L_08943A88: aot_fpr_12 = aot_fpr_28 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(532), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943AB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943AB0u) goto L_08943AB0; AOT_REGCACHE_SYNC_OUT(); return; L_08943AB0: @@ -8530,7 +8686,6 @@ L_08943B8C: aot_fpr_12 = ctx.fpr[24] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(532), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943BB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943BB0u) goto L_08943BB0; AOT_REGCACHE_SYNC_OUT(); return; L_08943BB0: @@ -8634,7 +8789,6 @@ L_08943C88: aot_fpr_12 = ctx.fpr[24] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(532), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943CB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943CB0u) goto L_08943CB0; AOT_REGCACHE_SYNC_OUT(); return; L_08943CB0: @@ -8782,7 +8936,6 @@ L_08943E08: aot_fpr_12 = aot_fpr_28 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(596), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943E2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943E2Cu) goto L_08943E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08943E2C: @@ -8876,7 +9029,6 @@ L_08943ED4: aot_fpr_12 = aot_fpr_28 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(596), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943EFCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943EFCu) goto L_08943EFC; AOT_REGCACHE_SYNC_OUT(); return; L_08943EFC: @@ -8970,7 +9122,6 @@ L_08943FA8: aot_fpr_12 = ctx.fpr[26] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(596), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08943FCCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08943FCCu) goto L_08943FCC; AOT_REGCACHE_SYNC_OUT(); return; L_08943FCC: diff --git a/profiles/vcs/generated/generated_unit_0080.cpp b/profiles/vcs/generated/generated_unit_0080.cpp index b53aae9..5e909f0 100644 --- a/profiles/vcs/generated/generated_unit_0080.cpp +++ b/profiles/vcs/generated/generated_unit_0080.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0080[4096] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 0, 0, 0, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, - 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, - 65, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, 0, - 0, 71, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 85, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 90, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 0, 0, - 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, - 99, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 108, 0, 0, 109, 0, 0, 110, 0, 0, 111, 0, - 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 0, 121, 0, 0, 122, - 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, - 130, 0, 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, 135, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 137, 138, 0, 0, 0, 0, 139, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 145, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, 151, 0, 0, 152, 0, - 0, 153, 0, 0, 154, 0, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 163, 164, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, - 0, 167, 0, 168, 0, 169, 0, 0, 0, 170, 171, 0, 0, 172, 0, 173, 0, 0, 174, 0, 0, 0, 175, 0, 176, 0, 0, 0, 177, 0, 0, 178, - 179, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 183, 0, 184, 0, 0, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 189, - 0, 190, 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 196, 0, 197, 0, 0, 0, 198, 0, 199, 0, 200, 201, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, - 0, 204, 0, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 0, 0, 0, 209, 0, - 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 0, - 0, 0, 0, 217, 0, 218, 0, 219, 220, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, - 0, 0, 224, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, - 231, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 234, 0, 235, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 238, 0, 239, 0, 0, 0, - 240, 0, 241, 0, 242, 243, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 0, - 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 249, 0, 0, 250, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, - 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 272, 0, 273, 0, 0, 0, 274, 0, 275, 0, 276, 0, 277, 0, 0, 0, - 278, 0, 279, 0, 280, 281, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 285, 0, 0, 0, 286, 0, 0, 0, - 287, 0, 288, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 0, 0, 296, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, - 304, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 309, 0, 310, 0, - 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 0, 313, 0, 0, 314, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, 318, 0, 319, 320, - 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 327, 0, 0, 328, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 331, 0, 332, 0, 333, 334, 0, 0, 0, 0, 0, 335, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 340, 0, 0, 0, 341, 0, 0, - 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 351, 0, - 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 356, 0, 0, 0, 357, - 0, 0, 0, 0, 0, 358, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 363, 0, - 0, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 369, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, - 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, - 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, - 0, 386, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 0, 0, - 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 410, 411, 0, 0, 412, 413, 0, 0, 414, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 420, 421, 0, 0, 0, 422, 0, 0, 0, 423, 424, 0, 425, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 429, 0, 0, 0, 0, 430, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, - 0, 435, 0, 436, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 443, 0, - 444, 0, 445, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 449, 450, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 452, - 0, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 456, 457, 0, 0, 458, 0, 0, 459, 460, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 465, 0, 466, - 0, 0, 467, 0, 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 471, 0, 472, 0, 0, 473, 0, 474, 0, 0, 0, 0, 475, - 0, 0, 476, 0, 477, 0, 478, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 482, - 0, 0, 483, 0, 0, 0, 484, 0, 485, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 0, 490, - 0, 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 493, 494, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, - 0, 498, 0, 499, 0, 0, 0, 0, 0, 500, 0, 501, 502, 0, 0, 0, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 505, 0, 0, 0, 0, 0, - 506, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 0, 510, 0, 511, 0, 512, 0, 0, 513, 0, 0, 514, 0, 515, 0, 516, - 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 525, 0, 0, 526, 0, 527, 0, - 528, 0, 529, 0, 0, 530, 0, 531, 532, 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, 536, 0, 537, 0, 0, 538, 0, 539, 0, 540, 0, - 541, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, 547, 0, 0, 548, 0, 549, 0, 0, 0, - 0, 0, 0, 550, 0, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 555, 0, 556, 0, 557, 0, 558, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, - 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, - 573, 0, 0, 0, 0, 574, 0, 0, 0, 575, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 580, 0, 0, 581, 0, 0, 582, 0, 0, 583, 0, 584, 585, 0, 0, 586, 0, 0, - 0, 0, 0, 0, 587, 0, 588, 0, 589, 0, 0, 0, 590, 0, 591, 0, 592, 0, 593, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 595, - 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, - 600, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 602, 0, 603, 0, 604, 0, 0, 0, 0, 605, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 608, 609, 0, 610, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 616, 0, 617, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, - 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 626, - 0, 0, 627, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, - 0, 0, 0, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 0, 0, 641, 0, 642, 0, 643, 0, 644, 645, 0, 646, - 0, 647, 648, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 652, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, - 656, 0, 0, 657, 0, 0, 0, 658, 0, 0, 659, 0, 0, 0, 660, 0, 0, 661, 0, 0, 0, 0, 662, 0, 663, 664, 0, 665, 0, 0, 0, 0, - 0, 666, 0, 0, 667, 0, 0, 668, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 671, 0, 672, 0, 0, 673, 0, 674, 0, 675, 0, 676, 0, 0, - 0, 677, 0, 0, 678, 0, 0, 0, 679, 0, 680, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 683, 0, 684, 0, 685, 0, 686, 0, - 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 693, 0, 694, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, - 702, 0, 703, 0, 0, 0, 0, 0, 704, 0, 705, 706, 0, 0, 0, 707, 0, 0, 708, 0, 0, 0, 709, 0, 0, 0, 710, 0, 0, 0, 711, 0, - 0, 0, 0, 0, 0, 0, 712, 0, 713, 0, 714, 0, 0, 0, 715, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 717, 0, 718, 0, 719, - 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 724, 0, 0, 0, 725, 0, 0, 0, 0, 726, - 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 732, 0, 733, 0, 0, 734, - 0, 0, 735, 0, 736, 0, 0, 737, 0, 0, 0, 738, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, - 741, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, 0, 0, 0, 744, 0, 745, 0, 0, 0, 0, 0, 746, 0, 0, 747, 0, 0, 0, 748, 0, - 749, 750, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 753, 0, 754, 0, 755, 0, 756, 0, 757, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 760, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 762, 0, 0, 763, 0, 764, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 767, 0, 768, 0, 769, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 771, 0, 0, 772, 0, 0, 773, 0, 774, 775, 0, 0, 0, 0, 776, 0, 0, 777, 0, 778, 0, 0, - 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 781, 0, 0, 0, 782, 0, 783, 0, 0, 0, 0, 784, - 0, 785, 0, 786, 0, 787, 0, 0, 788, 0, 0, 0, 789, 0, 0, 0, 790, 0, 0, 0, 791, 0, 0, 792, 0, 0, 0, 793, 0, 0, 794, 0, - 0, 0, 0, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 799, 0, 800, 0, 0, 801, 0, 802, 0, 803, 0, 0, 0, 804, 0, 0, 0, 805, 0, - 0, 0, 0, 0, 806, 0, 807, 0, 0, 808, 0, 809, 0, 810, 0, 811, 0, 0, 0, 812, 0, 0, 0, 0, 813, 0, 0, 0, 0, 814, 0, 815, - 0, 0, 0, 816, 0, 0, 0, 817, 0, 0, 818, 0, 819, 0, 0, 820, 821, 0, 822, 0, 0, 823, 0, 0, 0, 824, 0, 0, 0, 0, 825, 0, - 826, 0, 0, 827, 0, 0, 828, 829, 0, 830, 0, 0, 831, 0, 0, 0, 832, 0, 0, 0, 0, 833, 0, 834, 0, 0, 0, 0, 835, 0, 0, 836, - 0, 0, 837, 0, 838, 0, 839, 0, 0, 840, 0, 0, 841, 0, 842, 0, 843, 0, 844, 0, 0, 0, 845, 0, 0, 0, 0, 846, 0, 0, 0, 0, - 847, 0, 848, 0, 0, 0, 849, 0, 0, 0, 850, 0, 0, 851, 0, 852, 0, 0, 853, 854, 0, 855, 0, 0, 856, 0, 0, 0, 857, 0, 0, 0, - 0, 858, 0, 859, 0, 0, 860, 0, 0, 861, 862, 0, 863, 0, 0, 864, 0, 0, 0, 865, 0, 0, 0, 0, 866, 0, 867, 0, 0, 0, 0, 868, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0080[64] = { + 0xA080002010040021ull, 0x1400110101100200ull, 0x2000000000014400ull, 0x0200040440004000ull, + 0x0020220040010110ull, 0x0020204002022008ull, 0x00020000000000A1ull, 0x0010010002020004ull, + 0x0101000800800202ull, 0x0A02001010010040ull, 0x0902104144000800ull, 0x0220A10020908242ull, + 0x0A01000050442610ull, 0x1002009128100024ull, 0x9249249249248408ull, 0x0212804909090824ull, + 0x489108C012104A18ull, 0x204C141008404912ull, 0xA11454459144A62Aull, 0x808D45400000902Aull, + 0x0504490241100212ull, 0x42048224840081A8ull, 0x088010351540A901ull, 0x20040D4028224812ull, + 0x1545480A10241124ull, 0x0242008511221035ull, 0x0002420081500000ull, 0x504200850102A000ull, + 0x04A08020D4224902ull, 0x2248420041A84492ull, 0x892100206AA20508ull, 0x14040D5440508120ull, + 0x1010940428084A02ull, 0x004424000455504Aull, 0x1400800800080000ull, 0x0012002000200002ull, + 0x0588C44009000933ull, 0x0481008008488080ull, 0x808622254444450Aull, 0xA4800800100C9A48ull, + 0x8100445485284444ull, 0x24021A0289008344ull, 0xA92A111104421A0Aull, 0x5210088000488024ull, + 0x1494085154A095A5ull, 0x84032008012A9548ull, 0x0080048000408402ull, 0x2692488000005221ull, + 0x1001100880855150ull, 0x0240205C01215021ull, 0x8805208044012A40ull, 0xB54555500A010284ull, + 0x0B42448914A08506ull, 0x554405122A952092ull, 0x44448D055550AD55ull, 0x84540420A8084540ull, + 0x0400289494444024ull, 0xAA82001344828501ull, 0x548002A400152000ull, 0x85120010290D2600ull, + 0x4454A5504891112Aull, 0x42259488A108AA50ull, 0x0845525490A112C9ull, 0x8508964A112CA445ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0080[64] = { + 1u, 9u, 17u, 21u, 26u, 33u, 40u, 44u, 49u, 55u, 62u, 71u, 83u, 94u, 104u, 123u, + 137u, 153u, 167u, 190u, 204u, 217u, 231u, 247u, 261u, 278u, 293u, 300u, 311u, 326u, 342u, 358u, + 373u, 386u, 400u, 405u, 410u, 426u, 435u, 453u, 467u, 483u, 498u, 517u, 528u, 550u, 566u, 573u, + 587u, 600u, 614u, 627u, 647u, 666u, 687u, 712u, 727u, 741u, 758u, 770u, 785u, 806u, 826u, 847u, }; void recomp_unit_0080_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0080_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08944000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0080[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0080[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0080[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08944000; @@ -1115,7 +1022,6 @@ L_08944070: aot_fpr_12 = ctx.fpr[26] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(596), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944094u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944094u) goto L_08944094; AOT_REGCACHE_SYNC_OUT(); return; L_08944094: @@ -1153,7 +1059,6 @@ L_089440DC: } L_089440F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08944C24; } @@ -1214,7 +1119,6 @@ L_08944150: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08944160u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944160u) goto L_08944160; AOT_REGCACHE_SYNC_OUT(); return; L_08944160: @@ -1225,7 +1129,6 @@ L_08944160: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(624), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944180u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944180u) goto L_08944180; AOT_REGCACHE_SYNC_OUT(); return; L_08944180: @@ -1236,14 +1139,12 @@ L_08944180: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(628), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089441A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089441A0u) goto L_089441A0; AOT_REGCACHE_SYNC_OUT(); return; L_089441A0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089441F0; } @@ -1268,7 +1169,6 @@ L_089441B0: AOT_REGCACHE_SYNC_OUT(); return; L_089441E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08944228; } @@ -1295,7 +1195,6 @@ L_08944228: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08944150; } @@ -1401,7 +1300,6 @@ L_08944240: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[21] + static_cast(136)); if (branch_taken) { @@ -1473,7 +1371,6 @@ L_08944378: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08944388u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944388u) goto L_08944388; AOT_REGCACHE_SYNC_OUT(); return; L_08944388: @@ -1484,7 +1381,6 @@ L_08944388: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(776), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089443A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089443A8u) goto L_089443A8; AOT_REGCACHE_SYNC_OUT(); return; L_089443A8: @@ -1545,7 +1441,6 @@ L_08944410: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08944420u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944420u) goto L_08944420; AOT_REGCACHE_SYNC_OUT(); return; L_08944420: @@ -1556,7 +1451,6 @@ L_08944420: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(776), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944440u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944440u) goto L_08944440; AOT_REGCACHE_SYNC_OUT(); return; L_08944440: @@ -1616,7 +1510,6 @@ L_089444A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089444B4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089444B4u) goto L_089444B4; AOT_REGCACHE_SYNC_OUT(); return; L_089444B4: @@ -1627,7 +1520,6 @@ L_089444B4: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(776), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089444D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089444D4u) goto L_089444D4; AOT_REGCACHE_SYNC_OUT(); return; L_089444D4: @@ -1686,7 +1578,6 @@ L_08944534: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08944544u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944544u) goto L_08944544; AOT_REGCACHE_SYNC_OUT(); return; L_08944544: @@ -1697,7 +1588,6 @@ L_08944544: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(776), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944564u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944564u) goto L_08944564; AOT_REGCACHE_SYNC_OUT(); return; L_08944564: @@ -1762,7 +1652,6 @@ L_08944600: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089445D4; } @@ -1770,7 +1659,6 @@ L_08944600: } L_08944614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08944C24; } @@ -1899,7 +1787,6 @@ L_08944708: aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(868), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944744u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944744u) goto L_08944744; AOT_REGCACHE_SYNC_OUT(); return; L_08944744: @@ -1910,7 +1797,6 @@ L_08944744: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(872), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944764u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944764u) goto L_08944764; AOT_REGCACHE_SYNC_OUT(); return; L_08944764: @@ -1981,7 +1867,6 @@ L_089447D0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1196), std::bit_cast(ctx.fpr[26])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(868), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944804u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944804u) goto L_08944804; AOT_REGCACHE_SYNC_OUT(); return; L_08944804: @@ -1992,7 +1877,6 @@ L_08944804: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(872), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944824u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944824u) goto L_08944824; AOT_REGCACHE_SYNC_OUT(); return; L_08944824: @@ -2062,7 +1946,6 @@ L_0894488C: aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(868), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089448C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089448C0u) goto L_089448C0; AOT_REGCACHE_SYNC_OUT(); return; L_089448C0: @@ -2073,7 +1956,6 @@ L_089448C0: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(872), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089448E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089448E0u) goto L_089448E0; AOT_REGCACHE_SYNC_OUT(); return; L_089448E0: @@ -2140,7 +2022,6 @@ L_08944940: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(868), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944970u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944970u) goto L_08944970; AOT_REGCACHE_SYNC_OUT(); return; L_08944970: @@ -2151,7 +2032,6 @@ L_08944970: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(872), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08944990u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944990u) goto L_08944990; AOT_REGCACHE_SYNC_OUT(); return; L_08944990: @@ -2186,7 +2066,6 @@ L_089449C4: } L_089449E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08944C24; } @@ -2276,7 +2155,6 @@ L_08944A68: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08944A2C; } @@ -2294,9 +2172,7 @@ L_08944A80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(128))); ctx.fpr[20] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08944BBC; } @@ -2308,7 +2184,6 @@ L_08944A98: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08944BB4; } @@ -2337,9 +2212,7 @@ L_08944AC4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08944B04; } @@ -2362,9 +2235,7 @@ L_08944AEC: L_08944B04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(948))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08944B3C; } @@ -2387,9 +2258,7 @@ L_08944B24: L_08944B3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(952))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08944B74; } @@ -2428,7 +2297,6 @@ L_08944BA0: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08944AC4; } @@ -2436,7 +2304,6 @@ L_08944BA0: } L_08944BB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08944C24; } @@ -2448,7 +2315,6 @@ L_08944BBC: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08944C24; } @@ -2479,7 +2345,6 @@ L_08944C10: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08944BE4; } @@ -2491,7 +2356,6 @@ L_08944C24: L_08944C28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(92))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08944C78; } @@ -2502,7 +2366,6 @@ L_08944C34: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08944C78; } @@ -2521,7 +2384,6 @@ L_08944C58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(96))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08944C78; } @@ -2557,7 +2419,17 @@ L_08944C78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944CC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2234u << 16u); @@ -2592,7 +2464,17 @@ L_08944D08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944D14: aot_gpr_5 = (0u | 3u); aot_fpr_12 = std::bit_cast(0u); @@ -2612,7 +2494,17 @@ L_08944D14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944D50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -2620,7 +2512,6 @@ L_08944D50: aot_gpr_4 = (aot_gpr_5 | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08944D74; } @@ -2628,7 +2519,6 @@ L_08944D50: } L_08944D6C: aot_gpr_31 = (0x08944D74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 621u, 0x08972D80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08944D74u) goto L_08944D74; AOT_REGCACHE_SYNC_OUT(); return; L_08944D74: @@ -2638,7 +2528,17 @@ L_08944D74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944D80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(7))); aot_gpr_2 = (0u | 0u); @@ -2647,7 +2547,17 @@ L_08944D80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944D90: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(7), static_cast(aot_gpr_5)); jump_target = aot_gpr_31; @@ -2655,7 +2565,17 @@ L_08944D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944D9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -2832,7 +2752,17 @@ L_08944F14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944F2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -2848,7 +2778,17 @@ L_08944F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944F4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -2864,7 +2804,17 @@ L_08944F60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944F6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -2886,7 +2836,17 @@ L_08944F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944F98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2896,7 +2856,6 @@ L_08944F98: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = ctx.gpr[16] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08944FD0; } @@ -2910,7 +2869,6 @@ L_08944FBC: L_08944FC4: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); { const bool branch_taken = ctx.gpr[16] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08944FBC; } @@ -2928,7 +2886,17 @@ L_08944FD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08944FE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -2964,7 +2932,6 @@ L_08945024: L_0894502C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08945010; } @@ -2983,7 +2950,17 @@ L_08945038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945050: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -2998,7 +2975,17 @@ L_08945064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945070: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -3021,7 +3008,6 @@ L_0894509C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894512C; } @@ -3047,7 +3033,6 @@ L_089450C0: L_089450D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089450F8; } @@ -3057,7 +3042,6 @@ L_089450DC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089450F8; } @@ -3078,7 +3062,6 @@ L_089450F8: L_08945104: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0894512C; } @@ -3088,7 +3071,6 @@ L_08945110: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894512C; } @@ -3103,7 +3085,6 @@ L_08945120: L_0894512C: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0894509C; } @@ -3124,13 +3105,22 @@ L_08945138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945158: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089451B0; } @@ -3184,7 +3174,17 @@ L_089451CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089451D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_4); @@ -3207,7 +3207,6 @@ L_089451F4: AOT_REGCACHE_SYNC_OUT(); return; L_08945204: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08945214; } @@ -3238,10 +3237,19 @@ L_08945228: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945234: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08945270; } @@ -3262,7 +3270,6 @@ L_08945248: goto L_08945258; L_08945258: { const bool branch_taken = aot_gpr_5 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_0894527C; } @@ -3292,16 +3299,24 @@ L_0894527C: goto L_08945280; L_08945280: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945288: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(40)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089452B0; } @@ -3319,7 +3334,6 @@ L_08945298: } L_089452A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089452C8; } @@ -3341,11 +3355,20 @@ L_089452B8: goto L_089452C8; L_089452C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089452D0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); aot_gpr_5 = (aot_gpr_6 | aot_gpr_5); @@ -3354,7 +3377,17 @@ L_089452D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089452E0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); aot_gpr_5 = (~(aot_gpr_5 | 0u)); @@ -3364,35 +3397,85 @@ L_089452E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089452F4: jump_target = aot_gpr_31; aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089452FC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(172))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945304: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(20), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894530C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945314: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -3400,7 +3483,6 @@ L_08945314: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089453A0; } @@ -3432,9 +3514,7 @@ L_0894533C: aot_fpr_13 = std::sqrt(aot_fpr_13); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089453A8; } @@ -3442,7 +3522,6 @@ L_0894533C: } L_08945398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089453B8; } @@ -3450,7 +3529,6 @@ L_08945398: } L_089453A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089453CC; } @@ -3458,9 +3536,7 @@ L_089453A0: } L_089453A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089453C8; } @@ -3490,7 +3566,17 @@ L_089453CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089453DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8916))); @@ -3523,7 +3609,17 @@ L_08945410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945424: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8916))); @@ -3549,7 +3645,6 @@ L_08945460: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6572))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_2 | 0u); if (branch_taken) { @@ -3571,9 +3666,7 @@ L_08945484: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945514; } @@ -3601,7 +3694,6 @@ L_089454C8: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 256u); if (branch_taken) { @@ -3624,9 +3716,7 @@ L_089454E8: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945514; } @@ -3662,7 +3752,17 @@ L_08945520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894553C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8916))); @@ -3707,7 +3807,6 @@ L_089455A4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6572))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); if (branch_taken) { @@ -3729,9 +3828,7 @@ L_089455C8: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945620; } @@ -3740,7 +3837,6 @@ L_089455C8: L_089455E4: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 256u); if (branch_taken) { @@ -3762,9 +3858,7 @@ L_08945600: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945634; } @@ -3773,7 +3867,6 @@ L_08945600: L_08945620: aot_gpr_4 = (ctx.gpr[17] & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894563C; } @@ -3781,7 +3874,6 @@ L_08945620: } L_0894562C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08945670; } @@ -3806,7 +3898,6 @@ L_0894563C: goto L_08945158; L_08945658: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08945668; } @@ -3833,7 +3924,6 @@ L_08945670: goto L_08945158; L_08945680: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08945690; } @@ -3861,7 +3951,17 @@ L_08945694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089456B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); @@ -3887,7 +3987,6 @@ L_089456EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6572))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_2 | 0u); if (branch_taken) { @@ -3909,9 +4008,7 @@ L_08945710: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089457A0; } @@ -3939,7 +4036,6 @@ L_08945754: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 256u); if (branch_taken) { @@ -3962,9 +4058,7 @@ L_08945774: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089457A0; } @@ -4000,7 +4094,17 @@ L_089457AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089457C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); @@ -4045,7 +4149,6 @@ L_08945830: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6572))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); if (branch_taken) { @@ -4067,9 +4170,7 @@ L_08945854: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089458AC; } @@ -4078,7 +4179,6 @@ L_08945854: L_08945870: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 256u); if (branch_taken) { @@ -4100,9 +4200,7 @@ L_0894588C: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089458C0; } @@ -4111,7 +4209,6 @@ L_0894588C: L_089458AC: aot_gpr_4 = (ctx.gpr[17] & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089458C8; } @@ -4119,7 +4216,6 @@ L_089458AC: } L_089458B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089458F0; } @@ -4141,7 +4237,6 @@ L_089458C8: goto L_08945158; L_089458D8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089458E8; } @@ -4168,7 +4263,6 @@ L_089458F0: goto L_08945158; L_08945900: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08945910; } @@ -4196,7 +4290,17 @@ L_08945914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4214,7 +4318,6 @@ L_08945944: L_08945954: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08945988; } @@ -4224,7 +4327,6 @@ L_08945960: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08945980; } @@ -4251,7 +4353,17 @@ L_08945988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894599C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); @@ -4312,7 +4424,6 @@ L_089459E4: goto L_08945158; L_08945A50: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08945A60; } @@ -4337,7 +4448,17 @@ L_08945A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945A7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8916))); @@ -4398,7 +4519,6 @@ L_08945AC4: goto L_08945158; L_08945B34: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08945B44; } @@ -4423,7 +4543,17 @@ L_08945B44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); @@ -4452,7 +4582,17 @@ L_08945B88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8928))); @@ -4471,9 +4611,7 @@ L_08945B9C: L_08945BC4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945C78; } @@ -4483,7 +4621,6 @@ L_08945BD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); if (branch_taken) { @@ -4509,9 +4646,7 @@ L_08945C04: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945C70; } @@ -4543,9 +4678,7 @@ L_08945C44: L_08945C54: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945C70; } @@ -4580,7 +4713,17 @@ L_08945C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945C94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8928))); @@ -4600,7 +4743,6 @@ L_08945CBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); if (branch_taken) { @@ -4626,9 +4768,7 @@ L_08945CE8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945D54; } @@ -4660,9 +4800,7 @@ L_08945D28: L_08945D38: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945D54; } @@ -4697,7 +4835,17 @@ L_08945D60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945D78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8928))); @@ -4716,9 +4864,7 @@ L_08945D78: L_08945DA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945E74; } @@ -4753,7 +4899,6 @@ L_08945DF4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6572))); if (branch_taken) { @@ -4764,7 +4909,6 @@ L_08945DF4: L_08945E0C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 2048u); if (branch_taken) { @@ -4785,9 +4929,7 @@ L_08945E28: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945E64; } @@ -4801,7 +4943,6 @@ L_08945E44: goto L_08945158; L_08945E54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08945E6C; } @@ -4809,7 +4950,6 @@ L_08945E54: } L_08945E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08945E74; } @@ -4845,7 +4985,17 @@ L_08945E78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945E94: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8928))); @@ -4890,7 +5040,6 @@ L_08945EFC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8944))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6572))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); if (branch_taken) { @@ -4912,9 +5061,7 @@ L_08945F20: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945F78; } @@ -4923,7 +5070,6 @@ L_08945F20: L_08945F3C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 256u); if (branch_taken) { @@ -4945,9 +5091,7 @@ L_08945F58: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08945F98; } @@ -4961,7 +5105,6 @@ L_08945F78: goto L_08945158; L_08945F88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08945FA0; } @@ -4969,7 +5112,6 @@ L_08945F88: } L_08945F90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08945FA8; } @@ -5005,7 +5147,17 @@ L_08945FAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08945FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8916))); @@ -5034,7 +5186,17 @@ L_08945FF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946004: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8916))); @@ -5067,7 +5229,17 @@ L_08946038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894604C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); @@ -5096,7 +5268,17 @@ L_08946074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946088: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8932))); @@ -5129,7 +5311,17 @@ L_089460BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089460D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5143,9 +5335,7 @@ L_089460D0: L_089460F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8936))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08946118; } @@ -5173,10 +5363,19 @@ L_08946118: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946130: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08946140; } @@ -5188,7 +5387,6 @@ L_08946138: goto L_08946140; L_08946140: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08946150; } @@ -5204,7 +5402,17 @@ L_08946150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946158: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5292,7 +5500,17 @@ L_089461D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894624C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-18092))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5313,7 +5531,17 @@ L_0894624C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894628C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (23808u << 16u); @@ -5344,14 +5572,34 @@ L_089462BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089462E8: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089462F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -5384,7 +5632,17 @@ L_08946304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946354: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-18092))); @@ -5428,7 +5686,6 @@ L_08946394: L_089463C4: aot_gpr_4 = (aot_gpr_6 & 12u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946400; } @@ -5458,7 +5715,6 @@ L_08946400: L_08946404: aot_gpr_4 = (aot_gpr_6 & 36u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946414; } @@ -5470,7 +5726,6 @@ L_08946410: L_08946414: aot_gpr_4 = (aot_gpr_6 & 1536u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089464E0; } @@ -5507,7 +5762,6 @@ L_0894642C: L_08946460: aot_gpr_4 = (aot_gpr_6 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946498; } @@ -5528,9 +5782,7 @@ L_0894646C: goto L_08946498; L_08946498: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089464BC; } @@ -5538,9 +5790,7 @@ L_08946498: } L_089464A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089464BC; } @@ -5551,9 +5801,7 @@ L_089464B8: goto L_089464BC; L_089464BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089464E0; } @@ -5561,9 +5809,7 @@ L_089464BC: } L_089464CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089464E0; } @@ -5578,7 +5824,17 @@ L_089464E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089464E8: aot_gpr_4 = (2247u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(8736)); @@ -5596,7 +5852,17 @@ L_089464E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894651C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5633,7 +5899,17 @@ L_08946558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894656C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -5663,9 +5939,7 @@ L_089465C0: aot_gpr_4 = (49864u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894660C; } @@ -5692,7 +5966,6 @@ L_089465E8: } L_08946604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08946668; } @@ -5708,7 +5981,6 @@ L_0894660C: AOT_REGCACHE_SYNC_OUT(); return; L_08946620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894674C; } @@ -5718,7 +5990,6 @@ L_08946628: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(168))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08946680; } @@ -5728,7 +5999,6 @@ L_08946638: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(146))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08946680; } @@ -5738,7 +6008,6 @@ L_08946648: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(148))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08946680; } @@ -5748,7 +6017,6 @@ L_08946658: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(150))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08946680; } @@ -5758,7 +6026,6 @@ L_08946668: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(168))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_089466C4; } @@ -5783,7 +6050,6 @@ L_08946680: L_08946688: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(146))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_089466C4; } @@ -5793,7 +6059,6 @@ L_08946694: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(148))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_089466C4; } @@ -5803,7 +6068,6 @@ L_089466A4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(150))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_089466C4; } @@ -5813,7 +6077,6 @@ L_089466B4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(132))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_089466C8; } @@ -5913,7 +6176,17 @@ L_0894674C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946770: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[19]); @@ -5949,7 +6222,6 @@ L_089467AC: L_089467DC: aot_gpr_4 = (ctx.gpr[18] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946860; } @@ -5963,7 +6235,6 @@ L_089467E8: AOT_REGCACHE_SYNC_OUT(); return; L_089467F4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08946854; } @@ -6001,7 +6272,6 @@ L_08946838: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946854; } @@ -6022,7 +6292,6 @@ L_08946854: } L_08946860: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089468A8; } @@ -6038,7 +6307,6 @@ L_08946868: L_0894687C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(56))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08946890; } @@ -6046,7 +6314,6 @@ L_0894687C: } L_08946888: { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08946898; } @@ -6090,7 +6357,17 @@ L_089468B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089468E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (ctx.gpr[28] + static_cast(-18004)); @@ -6103,7 +6380,6 @@ L_089468E0: L_089468FC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08946924; } @@ -6113,7 +6389,6 @@ L_08946908: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.gpr[16] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08946924; } @@ -6121,7 +6396,6 @@ L_08946908: } L_08946918: aot_gpr_31 = (0x08946920u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 608u, 0x088F2DDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946920u) goto L_08946920; AOT_REGCACHE_SYNC_OUT(); return; L_08946920: @@ -6140,7 +6414,17 @@ L_08946924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894693C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6156,7 +6440,6 @@ L_0894693C: L_08946960: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089469AC; } @@ -6166,7 +6449,6 @@ L_0894696C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089469AC; } @@ -6174,7 +6456,6 @@ L_0894696C: } L_0894697C: aot_gpr_31 = (0x08946984u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 659u, 0x088F352Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946984u) goto L_08946984; AOT_REGCACHE_SYNC_OUT(); return; L_08946984: @@ -6211,7 +6492,17 @@ L_089469B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089469C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6227,7 +6518,6 @@ L_089469C4: L_089469E8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946A2C; } @@ -6237,7 +6527,6 @@ L_089469F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08946A2C; } @@ -6245,7 +6534,6 @@ L_089469F4: } L_08946A04: aot_gpr_31 = (0x08946A0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 659u, 0x088F352Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946A0Cu) goto L_08946A0C; AOT_REGCACHE_SYNC_OUT(); return; L_08946A0C: @@ -6280,7 +6568,17 @@ L_08946A30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946A44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2u << 16u); @@ -6297,7 +6595,17 @@ L_08946A58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946A68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2237u << 16u); @@ -6315,12 +6623,21 @@ L_08946A80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08946AA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 733u, 0x088F3AC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946AA0u) goto L_08946AA0; AOT_REGCACHE_SYNC_OUT(); return; L_08946AA0: @@ -6331,7 +6648,17 @@ L_08946AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946AB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -6345,7 +6672,6 @@ L_08946AB0: } L_08946AC4: aot_gpr_31 = (0x08946ACCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946ACCu) goto L_08946ACC; AOT_REGCACHE_SYNC_OUT(); return; L_08946ACC: @@ -6369,7 +6695,6 @@ L_08946AE0: } L_08946AEC: aot_gpr_31 = (0x08946AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946AF4u) goto L_08946AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08946AF4: @@ -6389,7 +6714,17 @@ L_08946B08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946B14: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6443,11 +6778,20 @@ L_08946B14: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946B3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6462,7 +6806,17 @@ L_08946B4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946B58: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -6504,11 +6858,20 @@ L_08946B58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946B9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1780)))))); aot_gpr_2 = (aot_gpr_4 & 2u); @@ -6517,7 +6880,17 @@ L_08946B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946BAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -6564,7 +6937,6 @@ L_08946BF8: goto L_08946C00; L_08946C00: aot_gpr_31 = (0x08946C08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 721u, 0x08B6BAECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946C08u) goto L_08946C08; AOT_REGCACHE_SYNC_OUT(); return; L_08946C08: @@ -6576,7 +6948,6 @@ L_08946C08: goto L_08946C14; L_08946C14: aot_gpr_31 = (0x08946C1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946C1Cu) goto L_08946C1C; AOT_REGCACHE_SYNC_OUT(); return; L_08946C1C: @@ -6610,7 +6981,6 @@ L_08946C3C: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(40), aot_gpr_4); aot_gpr_4 = (ctx.gpr[18] + static_cast(28)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946C78; } @@ -6627,7 +6997,6 @@ L_08946C54: L_08946C5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946C78; } @@ -6635,7 +7004,6 @@ L_08946C5C: } L_08946C68: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946C78; } @@ -6643,7 +7011,6 @@ L_08946C68: } L_08946C70: aot_gpr_31 = (0x08946C78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946C78u) goto L_08946C78; AOT_REGCACHE_SYNC_OUT(); return; L_08946C78: @@ -6655,7 +7022,6 @@ L_08946C80: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(3292), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(3304))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946CD0; } @@ -6671,7 +7037,6 @@ L_08946C98: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-17613), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(3304))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946CC8; } @@ -6702,7 +7067,6 @@ L_08946CD0: L_08946CDC: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946CF0; } @@ -6727,11 +7091,20 @@ L_08946CF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946D0C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4196))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08946D20; } @@ -6751,15 +7124,23 @@ L_08946D20: goto L_08946D28; L_08946D28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946D30: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4196))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08946D44; } @@ -6779,11 +7160,20 @@ L_08946D44: goto L_08946D4C; L_08946D4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946D54: aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3292))); jump_target = aot_gpr_31; @@ -6791,7 +7181,17 @@ L_08946D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946D60: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -6876,7 +7276,6 @@ L_08946E04: aot_gpr_4 = (17146u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08946E28; @@ -6904,7 +7303,17 @@ L_08946E3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946E58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -6932,7 +7341,17 @@ L_08946E9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -6962,13 +7381,22 @@ L_08946EDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3292))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08946F24; } @@ -6988,14 +7416,33 @@ L_08946F24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946F30: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08946F38: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -7030,7 +7477,6 @@ L_08946F9C: L_08946FAC: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0894707C; } @@ -7039,7 +7485,6 @@ L_08946FAC: L_08946FB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(776))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08946FD0; } @@ -7048,7 +7493,6 @@ L_08946FB8: L_08946FC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0894707C; } @@ -7063,7 +7507,6 @@ L_08946FD0: goto L_08946FDC; L_08946FDC: aot_gpr_31 = (0x08946FE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08946FE4u) goto L_08946FE4; AOT_REGCACHE_SYNC_OUT(); return; L_08946FE4: @@ -7132,7 +7575,6 @@ L_08947038: } L_08947040: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894707C; } @@ -7182,7 +7624,17 @@ L_0894708C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089470B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7205,7 +7657,6 @@ L_089470C0: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(333))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08947138; } @@ -7215,7 +7666,6 @@ L_089470F0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3261)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08947138; } @@ -7224,9 +7674,7 @@ L_089470F0: L_08947100: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08947138; } @@ -7237,9 +7685,7 @@ L_08947114: aot_gpr_5 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08947140; } @@ -7247,7 +7693,6 @@ L_08947114: } L_08947130: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894718C; } @@ -7264,7 +7709,6 @@ L_08947138: L_08947140: aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08947154; @@ -7287,7 +7731,6 @@ L_08947160: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3160))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(3264), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7303,11 +7746,20 @@ L_0894718C: goto L_08947190; L_08947190: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947198: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -7339,7 +7791,17 @@ L_089471D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089471E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -7362,7 +7824,6 @@ L_089471E4: L_08947218: aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08947234; } @@ -7423,7 +7884,6 @@ L_0894729C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089472C0; } @@ -7463,7 +7923,6 @@ L_089472EC: L_089472FC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0894731C; } @@ -7495,7 +7954,17 @@ L_08947324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947340: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7537,7 +8006,6 @@ L_08947390: } L_08947398: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089473B0; } @@ -7545,7 +8013,6 @@ L_08947398: } L_089473A0: { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_089473B8; } @@ -7569,7 +8036,6 @@ L_089473B0: } L_089473B8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089473A8; } @@ -7577,7 +8043,6 @@ L_089473B8: } L_089473C0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089473E0; } @@ -7609,7 +8074,6 @@ L_089473E0: } L_089473E8: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08947404; } @@ -7620,7 +8084,6 @@ L_089473F0: goto L_089473F4; L_089473F4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08947404; } @@ -7650,7 +8113,17 @@ L_08947408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947420: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3292))); ctx.gpr[7] = (0u | 0u); @@ -7660,7 +8133,6 @@ L_08947428: aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(6288))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_0894745C; } @@ -7672,7 +8144,6 @@ L_0894743C: ctx.gpr[7] = (static_cast(static_cast(ctx.gpr[7]) >> 16u)); aot_gpr_6 = (static_cast(ctx.gpr[7]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08947428; } @@ -7680,7 +8151,6 @@ L_0894743C: } L_08947454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947468; } @@ -7697,11 +8167,20 @@ L_0894745C: } L_08947468: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947470: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7716,7 +8195,17 @@ L_08947480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894748C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7731,7 +8220,17 @@ L_0894749C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089474A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7746,13 +8245,22 @@ L_089474B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089474C4: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (2238u << 16u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-6992))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_089474E0; } @@ -7771,18 +8279,26 @@ L_089474E0: goto L_089474E4; L_089474E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089474EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_5 = (0u | 12u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08947510; } @@ -7801,7 +8317,17 @@ L_08947510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894751C: aot_gpr_6 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1364))); @@ -7833,7 +8359,6 @@ L_08947540: } L_08947548: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0894755C; } @@ -7850,7 +8375,6 @@ L_08947550: } L_0894755C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0894756C; } @@ -7862,16 +8386,24 @@ L_08947564: goto L_0894756C; L_0894756C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947574: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3261)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089475A0; } @@ -7880,7 +8412,6 @@ L_08947574: L_08947584: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3192))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089475A0; } @@ -7894,11 +8425,20 @@ L_08947590: goto L_089475A0; L_089475A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089475A8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1929)))))); aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); @@ -7907,7 +8447,6 @@ L_089475A8: aot_gpr_5 = (aot_gpr_6 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089475E0; } @@ -7917,7 +8456,6 @@ L_089475C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08947620; } @@ -7989,7 +8527,6 @@ L_08947610: } L_08947618: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08947628; } @@ -8008,18 +8545,37 @@ L_08947628: goto L_0894762C; L_0894762C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947634: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(3330)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894763C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8029,7 +8585,6 @@ L_0894763C: goto L_089476BC; L_08947650: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089476A0; } @@ -8041,7 +8596,6 @@ L_08947658: goto L_089476D8; L_08947660: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089476A0; } @@ -8053,7 +8607,6 @@ L_08947668: goto L_089476C8; L_08947670: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089476A0; } @@ -8061,12 +8614,10 @@ L_08947670: } L_08947678: aot_gpr_31 = (0x08947680u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08947680u) goto L_08947680; AOT_REGCACHE_SYNC_OUT(); return; L_08947680: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089476A0; } @@ -8078,7 +8629,6 @@ L_08947688: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089476A8; } @@ -8103,7 +8653,17 @@ L_089476AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089476BC: aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); jump_target = aot_gpr_31; @@ -8111,7 +8671,17 @@ L_089476BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089476C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); aot_gpr_2 = (aot_gpr_4 & 4u); @@ -8120,7 +8690,17 @@ L_089476C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089476D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); aot_gpr_2 = (aot_gpr_4 & 2u); @@ -8129,7 +8709,17 @@ L_089476D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089476E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); aot_gpr_2 = (aot_gpr_4 & 32u); @@ -8138,7 +8728,17 @@ L_089476E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089476F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8159,7 +8759,6 @@ L_08947718: goto L_0894763C; L_08947720: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08947738; } @@ -8183,7 +8782,17 @@ L_08947738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894774C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8204,7 +8813,6 @@ L_0894776C: goto L_0894763C; L_08947774: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08947794; } @@ -8230,7 +8838,17 @@ L_08947794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089477A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8251,7 +8869,6 @@ L_089477C8: goto L_0894763C; L_089477D0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089477E8; } @@ -8275,11 +8892,20 @@ L_089477E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089477FC: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08947868; } @@ -8288,7 +8914,6 @@ L_089477FC: L_08947808: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08947868; } @@ -8303,7 +8928,6 @@ L_08947814: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(3296), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08947848; } @@ -8323,7 +8947,6 @@ L_08947848: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08947868; } @@ -8337,15 +8960,23 @@ L_08947858: goto L_08947868; L_08947868: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947870: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08947888; } @@ -8358,15 +8989,23 @@ L_0894787C: goto L_08947888; L_08947888: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947890: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089478AC; } @@ -8380,11 +9019,20 @@ L_0894789C: goto L_089478AC; L_089478AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089478B4: aot_gpr_5 = (16968u << 16u); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -8396,7 +9044,6 @@ L_089478B4: aot_fpr_12 = std::bit_cast(ctx.gpr[7]); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3296))); if (branch_taken) { @@ -8432,7 +9079,17 @@ L_08947920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947928: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3296))); aot_gpr_2 = (0u | 0u); @@ -8444,18 +9101,26 @@ L_08947928: goto L_0894793C; L_0894793C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947944: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); aot_gpr_5 = (aot_gpr_5 & 16u); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08947984; } @@ -8464,7 +9129,6 @@ L_08947944: L_0894795C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08947984; } @@ -8498,7 +9162,17 @@ L_08947984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947990: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3330))); @@ -8510,7 +9184,6 @@ L_08947990: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(84), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089479EC; } @@ -8537,7 +9210,6 @@ L_089479C4: goto L_089476BC; L_089479DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089479FC; } @@ -8545,7 +9217,6 @@ L_089479DC: } L_089479E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947A40; } @@ -8557,7 +9228,6 @@ L_089479EC: goto L_08947944; L_089479F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947B74; } @@ -8594,7 +9264,6 @@ L_089479FC: L_08947A34: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947B28; } @@ -8606,7 +9275,6 @@ L_08947A40: goto L_089476D8; L_08947A48: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08947A94; } @@ -8643,7 +9311,6 @@ L_08947A50: L_08947A88: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947B28; } @@ -8655,7 +9322,6 @@ L_08947A94: goto L_089476C8; L_08947A9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08947AE8; } @@ -8692,7 +9358,6 @@ L_08947AA4: L_08947ADC: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947B28; } @@ -8704,7 +9369,6 @@ L_08947AE8: goto L_089476E8; L_08947AF0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08947B28; } @@ -8793,7 +9457,17 @@ L_08947B74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08947B90: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[18]); @@ -8812,7 +9486,6 @@ L_08947B90: L_08947BC4: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08947BE8; } @@ -8827,7 +9500,6 @@ L_08947BD0: AOT_REGCACHE_SYNC_OUT(); return; L_08947BE0: { const bool branch_taken = ctx.gpr[19] == aot_gpr_2; - // nop if (branch_taken) { goto L_08947C0C; } @@ -8849,7 +9521,6 @@ L_08947BFC: goto L_08947C04; L_08947C04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947C5C; } @@ -8893,7 +9564,6 @@ L_08947C40: L_08947C50: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(178))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08947C98; } @@ -8909,7 +9579,6 @@ L_08947C5C: L_08947C6C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08947EB8; } @@ -8921,7 +9590,6 @@ L_08947C78: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08947CA0; } @@ -8929,7 +9597,6 @@ L_08947C78: } L_08947C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947CBC; } @@ -8956,7 +9623,6 @@ L_08947CA8: AOT_REGCACHE_SYNC_OUT(); return; L_08947CB4: { const bool branch_taken = ctx.gpr[16] == aot_gpr_2; - // nop if (branch_taken) { goto L_08947CD0; } @@ -8965,7 +9631,6 @@ L_08947CB4: L_08947CBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08947CD8; } @@ -9006,7 +9671,6 @@ L_08947CF8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08947D2C; } @@ -9026,7 +9690,6 @@ L_08947D18: goto L_08947D24; L_08947D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08947E90; } @@ -9065,7 +9728,6 @@ L_08947D60: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08947E90; } @@ -9120,7 +9782,6 @@ L_08947DBC: goto L_08947DC0; L_08947DC0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08947E90; } @@ -9175,7 +9836,6 @@ L_08947E18: goto L_08947E1C; L_08947E1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08947E90; } @@ -9234,7 +9894,6 @@ L_08947E7C: goto L_08947E88; L_08947E88: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08947EC0; } @@ -9248,7 +9907,6 @@ L_08947E90: L_08947E98: aot_gpr_4 = (0u | 7u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08947EB8; } @@ -9257,7 +9915,6 @@ L_08947E98: L_08947EA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08947EC8; } @@ -9306,7 +9963,6 @@ L_08947EEC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08947EB8; } @@ -9361,7 +10017,6 @@ L_08947F48: goto L_08947F4C; L_08947F4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08947EB8; } @@ -9416,7 +10071,6 @@ L_08947FA4: goto L_08947FA8; L_08947FA8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08947EB8; } diff --git a/profiles/vcs/generated/generated_unit_0081.cpp b/profiles/vcs/generated/generated_unit_0081.cpp index d28b079..f9fa5d4 100644 --- a/profiles/vcs/generated/generated_unit_0081.cpp +++ b/profiles/vcs/generated/generated_unit_0081.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0081[4096] = { - 1, 0, 2, 0, 0, 3, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 24, 0, 25, 0, 0, 0, 0, 0, 26, 27, 0, 0, - 28, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 33, 0, 34, 0, 35, 0, 36, 0, - 0, 37, 0, 38, 0, 0, 0, 39, 0, 40, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 0, 46, 0, 0, 0, 0, 47, 48, 0, 49, 0, 50, 0, 51, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, - 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 64, 0, 65, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, - 0, 0, 0, 0, 70, 0, 0, 0, 71, 72, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 0, 84, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 86, 0, 87, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 0, - 91, 0, 0, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 97, 0, 0, 0, 98, 99, 0, 0, 100, 0, 0, 0, - 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, - 0, 0, 0, 0, 0, 110, 0, 111, 0, 112, 0, 113, 114, 0, 0, 115, 0, 116, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 118, 0, 0, 0, - 119, 0, 120, 0, 0, 121, 122, 0, 123, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, - 131, 0, 0, 0, 132, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, - 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 152, 0, 153, 0, - 154, 0, 0, 155, 0, 0, 156, 0, 0, 0, 157, 0, 0, 158, 0, 0, 0, 159, 0, 0, 160, 0, 0, 161, 162, 0, 163, 0, 164, 0, 0, 0, - 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 171, 172, 0, 173, 174, 0, - 0, 0, 175, 0, 0, 0, 176, 0, 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, - 0, 0, 0, 183, 0, 184, 0, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 192, 193, 0, 0, 194, 0, 0, 0, 195, 0, 0, 196, 0, 197, 0, 198, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, - 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 207, 0, 208, 0, 209, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 211, 212, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, - 217, 0, 218, 0, 0, 219, 0, 0, 220, 0, 221, 0, 0, 222, 0, 223, 0, 224, 0, 225, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, - 0, 0, 0, 228, 0, 229, 0, 0, 230, 0, 231, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 236, 0, 237, 0, - 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, - 244, 0, 0, 245, 0, 246, 0, 0, 247, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 251, 0, 252, 0, 253, 0, 254, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, 0, - 0, 0, 267, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 272, 0, 273, 0, 0, 0, 274, 0, - 0, 0, 0, 275, 0, 276, 0, 0, 277, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, 280, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, - 0, 0, 0, 283, 0, 0, 0, 0, 284, 0, 285, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 289, 0, 0, 0, 290, 0, - 0, 291, 0, 0, 292, 0, 0, 0, 293, 0, 0, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, - 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 0, 0, 0, - 0, 309, 0, 310, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 317, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 0, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, - 336, 0, 0, 0, 337, 0, 0, 0, 338, 339, 340, 0, 341, 0, 0, 0, 342, 0, 343, 0, 0, 344, 0, 345, 0, 0, 346, 0, 0, 347, 0, 0, - 348, 0, 349, 0, 0, 0, 0, 350, 0, 351, 0, 0, 352, 0, 353, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 367, 0, - 0, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, - 372, 0, 0, 373, 0, 0, 0, 374, 0, 375, 0, 376, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 382, 0, 383, 384, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 389, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, - 392, 0, 393, 0, 394, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, - 397, 0, 398, 399, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 404, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 408, 409, 0, 0, 0, - 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 413, 0, 414, 0, 0, 415, 0, 0, 0, 416, - 0, 417, 0, 0, 0, 418, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, - 429, 0, 430, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 444, 0, 445, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, 450, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, - 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, - 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, - 0, 473, 0, 0, 0, 0, 474, 475, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 484, 0, 485, 0, 0, 486, 0, 487, 0, 0, 488, 0, 0, 0, - 489, 0, 0, 490, 0, 491, 0, 492, 0, 0, 493, 0, 0, 494, 495, 0, 0, 496, 0, 0, 0, 497, 0, 0, 498, 0, 499, 0, 500, 0, 0, 501, - 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, - 512, 0, 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 519, - 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 527, 0, 0, - 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 530, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 532, 0, - 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, 537, 0, 538, 0, 0, 0, - 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 544, 0, 0, 0, - 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 550, 551, 0, - 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 553, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, 558, 0, 559, 0, 560, - 0, 561, 0, 562, 0, 563, 0, 564, 0, 565, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 577, 0, 0, 578, 0, 579, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 584, 0, 585, 0, 0, 586, 587, 0, 0, 0, - 0, 588, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 592, 0, 593, 594, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 0, - 597, 0, 0, 598, 0, 599, 600, 0, 601, 0, 602, 0, 603, 0, 0, 604, 0, 0, 0, 0, 605, 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, - 608, 0, 609, 0, 0, 610, 0, 0, 0, 0, 611, 0, 0, 612, 0, 0, 0, 613, 0, 614, 0, 0, 615, 0, 616, 0, 0, 617, 0, 0, 0, 0, - 0, 618, 0, 619, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 626, 0, - 627, 0, 0, 0, 628, 0, 0, 0, 0, 629, 0, 630, 0, 0, 0, 631, 0, 0, 632, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, 636, - 0, 0, 0, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 639, 640, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 642, 0, 643, 0, - 0, 0, 0, 644, 645, 0, 0, 0, 646, 0, 647, 0, 648, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 651, 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 656, 0, 0, 657, 0, 658, 0, 659, 0, 660, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 661, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 665, 0, 0, 0, 666, 0, 667, 0, 0, 668, 0, 0, 0, 669, 0, 0, 670, - 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 673, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 678, 0, 0, 679, 0, 680, 0, 0, 681, 0, 682, 0, 683, 0, 0, 684, 0, 685, 0, 686, 0, 687, 0, 0, 688, 0, 689, - 0, 690, 0, 691, 0, 0, 692, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 0, 695, 0, 696, 0, 697, 0, 698, 0, 0, - 0, 699, 0, 0, 0, 700, 0, 0, 0, 0, 701, 0, 702, 0, 703, 0, 704, 0, 705, 0, 706, 0, 0, 707, 0, 708, 0, 0, 709, 0, 0, 0, - 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 714, 715, 0, 716, 0, 0, 717, 0, 718, 0, 719, 0, 0, 720, 0, 0, 721, 0, 0, 722, 723, 724, 0, 725, 0, 726, 0, 0, - 727, 0, 0, 728, 0, 0, 729, 730, 731, 732, 0, 733, 0, 0, 734, 0, 0, 735, 0, 0, 736, 737, 738, 0, 739, 0, 740, 0, 0, 741, 0, 0, - 742, 0, 0, 743, 744, 745, 746, 0, 747, 0, 748, 0, 0, 0, 749, 0, 0, 0, 750, 0, 751, 0, 0, 752, 0, 753, 0, 754, 0, 0, 755, 0, - 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, - 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 763, 764, 765, - 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, 769, 0, 0, 0, 770, 0, 0, 0, 771, 0, 0, 0, 772, 0, 0, 0, 773, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 774, 0, 0, 775, 0, 0, 0, 776, 0, 0, 0, 777, 0, 778, 0, 779, 0, 0, 780, 0, 781, 0, 782, 0, 783, 0, 784, 0, - 0, 785, 0, 786, 0, 0, 0, 787, 0, 788, 0, 789, 0, 790, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 792, 0, 0, 793, 0, 794, 0, - 0, 795, 0, 796, 0, 0, 0, 797, 0, 0, 0, 798, 0, 0, 0, 799, 0, 0, 0, 800, 0, 0, 801, 0, 0, 0, 802, 0, 0, 0, 803, 0, - 0, 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 0, 808, 0, 809, 0, 810, 0, 0, - 0, 811, 0, 0, 812, 0, 0, 813, 0, 814, 0, 815, 0, 0, 0, 816, 0, 817, 0, 0, 818, 0, 819, 0, 0, 0, 0, 0, 820, 0, 0, 821, - 0, 822, 0, 823, 0, 0, 824, 0, 0, 0, 825, 0, 0, 0, 826, 0, 0, 827, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 829, - 0, 0, 0, 830, 0, 0, 0, 0, 0, 831, 0, 832, 0, 0, 0, 0, 833, 0, 834, 0, 835, 0, 836, 0, 0, 0, 837, 838, 0, 0, 839, 0, - 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, 841, 0, 842, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 847, 0, 0, 848, 0, 849, - 0, 850, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 852, 0, 0, 0, 853, 0, 0, 0, 854, 0, 855, 0, 856, 0, 0, 0, 0, 0, 0, - 857, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 859, 0, 0, 0, 0, 0, 0, 860, 0, 0, 0, 861, 0, 0, 0, 862, - 0, 0, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 866, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, - 868, 0, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 870, 0, 871, 0, 0, 0, 872, 0, 0, 0, 0, 0, 873, 0, 0, - 874, 0, 0, 0, 875, 0, 0, 876, 0, 877, 0, 878, 0, 0, 879, 0, 0, 0, 880, 0, 881, 0, 0, 882, 883, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 885, 0, 0, 0, 886, 0, 0, 0, 0, 887, 0, 0, - 0, 888, 0, 0, 0, 0, 889, 0, 0, 890, 0, 891, 0, 892, 0, 893, 0, 894, 0, 895, 896, 0, 0, 897, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 898, 0, 0, 0, 899, 0, 900, 0, 0, 0, 901, 0, 902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 904, 0, 905, 0, 0, 0, 0, 0, 906, 0, 907, 0, 908, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 909, 0, 0, 0, 910, 0, 0, 0, 0, 911, 0, 0, 0, 0, 912, 0, 0, 0, 0, 913, 0, 0, 0, 0, 914, 0, 0, 915, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0081[64] = { + 0x80818002240501A5ull, 0x3054804104102022ull, 0x40020A8A55120211ull, 0x08A02AA02AC21400ull, + 0x04100710A22A2418ull, 0x4445100084AA4404ull, 0x1084A94813144511ull, 0x0081096510429AA0ull, + 0x2810825100820088ull, 0x2088500080101100ull, 0x1592244950410108ull, 0x6C40050002200010ull, + 0x0028422811104544ull, 0x54898A0000000002ull, 0xAA50000442000802ull, 0x401AA52555300800ull, + 0x4400C80852214528ull, 0x020240400D528329ull, 0x4505220444444410ull, 0x4510250822288128ull, + 0x1021001450010912ull, 0x2100420A0A810480ull, 0x20008AA900815480ull, 0x1100140020008800ull, + 0x0089528524A51711ull, 0x5010480048104410ull, 0x04011A8904004204ull, 0x0208248100235080ull, + 0x8224040D10000415ull, 0x895040011C040200ull, 0x0000000020002122ull, 0x0502044522124480ull, + 0x0001210000000090ull, 0x1000540800B42050ull, 0x0A00101204004020ull, 0x4809100400249500ull, + 0x10148000024010C2ull, 0x952264A912948000ull, 0x1111120002011080ull, 0x2A00A502A8012421ull, + 0x1580100440488020ull, 0x70060404140A0820ull, 0x089022AAAA40A880ull, 0x002A610801202080ull, + 0x015A402A19500404ull, 0x094A242511109569ull, 0xA0548A114242222Aull, 0x00809518508060A0ull, + 0x9128A41401548A4Aull, 0xA552A52000AA8082ull, 0x129554222A88204Aull, 0x2B9254B001220008ull, + 0x4A94457925724BC9ull, 0xE010080402022010ull, 0x554A889004444522ull, 0x4448888A52082A8Aull, + 0x90528A922A500802ull, 0x4C550A088102444Aull, 0xA440004008005402ull, 0x8881004102A22202ull, + 0x208A010102140280ull, 0x2112000001944A91ull, 0x200028A2009AAA42ull, 0x9084211001505000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0081[64] = { + 1u, 15u, 28u, 44u, 60u, 76u, 91u, 110u, 127u, 139u, 148u, 165u, 175u, 189u, 199u, 210u, + 228u, 244u, 260u, 275u, 291u, 303u, 315u, 329u, 336u, 357u, 368u, 380u, 392u, 405u, 417u, 422u, + 436u, 441u, 453u, 461u, 473u, 483u, 502u, 512u, 528u, 539u, 552u, 570u, 581u, 597u, 618u, 637u, + 651u, 671u, 690u, 710u, 727u, 756u, 766u, 785u, 804u, 822u, 840u, 850u, 863u, 874u, 888u, 904u, }; void recomp_unit_0081_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0081_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08948000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0081[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0081[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0081[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08948000; @@ -1098,7 +1005,6 @@ L_08948008: goto L_08948014; L_08948014: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 842u, 0x08947EB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1122,14 +1028,34 @@ L_08948020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948040: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3304))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948048: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -1138,7 +1064,6 @@ L_08948048: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089480FC; } @@ -1177,7 +1102,6 @@ L_08948084: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08948104; } @@ -1212,7 +1136,6 @@ L_089480DC: } L_089480FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08948104; } @@ -1226,7 +1149,17 @@ L_08948104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948114: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1270,7 +1203,6 @@ L_08948168: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089481BC; } @@ -1309,7 +1241,6 @@ L_089481BC: AOT_REGCACHE_SYNC_OUT(); return; L_089481C8: aot_gpr_31 = (0x089481D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 606u, 0x08A17A04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089481D0u) goto L_089481D0; AOT_REGCACHE_SYNC_OUT(); return; L_089481D0: @@ -1335,7 +1266,6 @@ L_089481F0: L_089481F4: aot_gpr_5 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08948210; } @@ -1359,7 +1289,17 @@ L_08948210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948224: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1372,7 +1312,6 @@ L_08948224: L_08948244: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(3176))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_16; - // nop if (branch_taken) { goto L_08948268; } @@ -1390,7 +1329,6 @@ L_08948250: } L_08948260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08948270; } @@ -1398,7 +1336,6 @@ L_08948260: } L_08948268: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089482AC; } @@ -1416,7 +1353,6 @@ L_08948278: AOT_REGCACHE_SYNC_OUT(); return; L_08948284: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089482A4; } @@ -1434,7 +1370,6 @@ L_0894828C: } L_0894829C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089482AC; } @@ -1461,7 +1396,17 @@ L_089482AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089482C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -1506,9 +1451,7 @@ L_08948328: L_08948330: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948358; } @@ -1517,9 +1460,7 @@ L_08948330: L_08948344: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894835C; } @@ -1535,7 +1476,6 @@ L_0894835C: AOT_REGCACHE_SYNC_OUT(); return; L_08948364: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894839C; } @@ -1543,7 +1483,6 @@ L_08948364: } L_0894836C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894839C; } @@ -1555,7 +1494,6 @@ L_08948374: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(16))); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08948394; @@ -1584,7 +1522,6 @@ L_089483A4: } L_089483AC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089483DC; } @@ -1596,7 +1533,6 @@ L_089483B4: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089483D4; @@ -1612,9 +1548,7 @@ L_089483D4: } L_089483DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948410; } @@ -1626,7 +1560,6 @@ L_089483EC: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_0894840C; @@ -1639,7 +1572,6 @@ L_08948410: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -1658,9 +1590,7 @@ L_08948428: } L_08948434: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948454; } @@ -1668,7 +1598,6 @@ L_08948434: } L_08948444: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08948454; } @@ -1680,9 +1609,7 @@ L_0894844C: goto L_08948454; L_08948454: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089484A4; } @@ -1697,7 +1624,6 @@ L_08948464: AOT_REGCACHE_SYNC_OUT(); return; L_08948474: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089484A0; } @@ -1706,7 +1632,6 @@ L_08948474: L_0894847C: aot_fpr_12 = ctx.fpr[24] - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08948490; @@ -1745,12 +1670,21 @@ L_089484A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089484D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1272))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17968))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[0] = std::bit_cast(0u); if (branch_taken) { @@ -1764,7 +1698,6 @@ L_089484E8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); goto L_08948508; @@ -1786,9 +1719,7 @@ L_08948508: } L_08948528: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948544; } @@ -1805,11 +1736,20 @@ L_08948538: } L_08948544: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894854C: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -1820,11 +1760,20 @@ L_0894854C: } L_08948554: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894855C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3292))); jump_target = aot_gpr_31; @@ -1832,7 +1781,17 @@ L_0894855C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948568: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3262)))))); aot_gpr_6 = (0u + static_cast(-9)); @@ -1842,7 +1801,17 @@ L_08948568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894857C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1929)))))); @@ -1881,7 +1850,6 @@ L_089485C8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[7] = (0u | 30u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089485E8; } @@ -1891,7 +1859,6 @@ L_089485D8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[7] = (0u | 31u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08948600; } @@ -1916,7 +1883,6 @@ L_08948600: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[7] = (0u | 38u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08948628; } @@ -1941,7 +1907,6 @@ L_08948628: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08948650; } @@ -1979,7 +1944,17 @@ L_08948664: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1993,7 +1968,6 @@ L_08948670: L_0894868C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089486C8; } @@ -2001,7 +1975,6 @@ L_0894868C: } L_08948698: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089486C8; } @@ -2010,7 +1983,6 @@ L_08948698: L_089486A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3332))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089486B4; } @@ -2047,13 +2019,22 @@ L_089486C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089486DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0894872C; } @@ -2084,7 +2065,6 @@ L_089486F0: AOT_REGCACHE_SYNC_OUT(); return; L_08948714: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08948724; } @@ -2116,14 +2096,34 @@ L_08948730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894873C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3340))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948744: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -2151,7 +2151,6 @@ L_08948770: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08948788; } @@ -2168,7 +2167,6 @@ L_08948780: L_08948788: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08948758; } @@ -2179,15 +2177,23 @@ L_08948794: goto L_08948798; L_08948798: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089487A0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089487C0; } @@ -2209,7 +2215,6 @@ L_089487C0: aot_gpr_5 = (49864u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3268))); if (branch_taken) { @@ -2229,7 +2234,6 @@ L_089487DC: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(333))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08948844; } @@ -2239,7 +2243,6 @@ L_0894880C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3261)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08948844; } @@ -2261,9 +2264,7 @@ L_08948844: aot_gpr_5 = (17402u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948890; } @@ -2276,9 +2277,7 @@ L_0894885C: aot_gpr_5 = (17658u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948890; } @@ -2292,11 +2291,20 @@ L_08948880: goto L_08948890; L_08948890: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948898: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24920))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -2317,9 +2325,7 @@ L_089488A4: L_089488BC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3160))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089488EC; } @@ -2336,11 +2342,20 @@ L_089488D0: goto L_089488EC; L_089488EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089488F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_16); @@ -2381,7 +2396,6 @@ L_08948950: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_20 = std::sqrt(aot_fpr_20); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -2416,9 +2430,7 @@ L_089489B0: L_089489B8: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089489DC; } @@ -2457,7 +2469,6 @@ L_08948A0C: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08948AF0; } @@ -2480,7 +2491,6 @@ L_08948A40: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948A70; } @@ -2492,7 +2502,6 @@ L_08948A58: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948AF0; } @@ -2505,7 +2514,6 @@ L_08948A70: AOT_REGCACHE_SYNC_OUT(); return; L_08948A78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08948AF0; } @@ -2514,7 +2522,6 @@ L_08948A78: L_08948A80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3257))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08948AB4; } @@ -2523,7 +2530,6 @@ L_08948A80: L_08948A8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3172))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948AB4; } @@ -2564,7 +2570,6 @@ L_08948AC4: L_08948AD0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08948AE0; } @@ -2575,7 +2580,6 @@ L_08948ADC: goto L_08948AE0; L_08948AE0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08948AF0; } @@ -2601,7 +2605,17 @@ L_08948AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948B10: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[17]); @@ -2640,9 +2654,7 @@ L_08948B64: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_20 = aot_fpr_20 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948BF4; } @@ -2663,9 +2675,7 @@ L_08948BA8: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } aot_fpr_13 = aot_fpr_20 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948BE8; } @@ -2686,7 +2696,6 @@ L_08948BE8: goto L_08948BEC; L_08948BEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08948BF8; } @@ -2721,7 +2730,6 @@ L_08948C18: goto L_08948C20; L_08948C20: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948DC0; } @@ -2731,7 +2739,6 @@ L_08948C28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948DAC; } @@ -2743,7 +2750,6 @@ L_08948C38: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948DC0; } @@ -2753,7 +2759,6 @@ L_08948C50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08948DC0; } @@ -2774,9 +2779,7 @@ L_08948C70: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948DC0; } @@ -2812,7 +2815,6 @@ L_08948CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08948CCC: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08948DC0; } @@ -2836,9 +2838,7 @@ L_08948CD4: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08948DC0; } @@ -2893,7 +2893,6 @@ L_08948D04: AOT_REGCACHE_SYNC_OUT(); return; L_08948DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08948DC0; } @@ -2903,7 +2902,6 @@ L_08948DAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08948DC0; } @@ -2921,7 +2919,6 @@ L_08948DCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08948DF8; } @@ -2935,7 +2932,6 @@ L_08948DDC: AOT_REGCACHE_SYNC_OUT(); return; L_08948DE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08948DF8; } @@ -2968,7 +2964,17 @@ L_08948E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08948E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -2988,7 +2994,6 @@ L_08948E64: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08948ED8; } @@ -3021,7 +3026,6 @@ L_08948E88: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(28), aot_run_words); } ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08948EEC; } @@ -3046,7 +3050,6 @@ L_08948ED8: } L_08948EE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3054,7 +3057,6 @@ L_08948EE4: } L_08948EEC: aot_gpr_31 = (0x08948EF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08948EF4u) goto L_08948EF4; AOT_REGCACHE_SYNC_OUT(); return; L_08948EF4: @@ -3097,7 +3099,6 @@ L_08948F50: L_08948F54: aot_gpr_5 = (static_cast(ctx.gpr[19]) < 30001 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08949100; } @@ -3137,7 +3138,6 @@ L_08948F78: } L_08948F80: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08949100; } @@ -3152,7 +3152,6 @@ L_08948F88: L_08948F94: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3186,7 +3185,6 @@ L_08948FBC: } L_08948FC4: aot_gpr_31 = (0x08948FCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08948FCCu) goto L_08948FCC; AOT_REGCACHE_SYNC_OUT(); return; L_08948FCC: @@ -3202,7 +3200,6 @@ L_08948FD0: ctx.gpr[20] = (ctx.lo); aot_gpr_6 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08949014; } @@ -3213,7 +3210,6 @@ L_08948FF8: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08949014; } @@ -3230,7 +3226,6 @@ L_0894900C: L_08949014: ctx.gpr[23] = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08948FBC; } @@ -3238,7 +3233,6 @@ L_08949014: } L_08949020: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3256,7 +3250,6 @@ L_08949028: } L_08949038: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3267,7 +3260,6 @@ L_08949040: aot_gpr_4 = (ctx.gpr[19] - aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 25001 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3277,7 +3269,6 @@ L_08949054: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089490F8; } @@ -3290,7 +3281,6 @@ L_08949064: goto L_08949070; L_08949070: aot_gpr_31 = (0x08949078u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08949078u) goto L_08949078; AOT_REGCACHE_SYNC_OUT(); return; L_08949078: @@ -3358,7 +3348,6 @@ L_089490F8: L_08949100: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949168; } @@ -3387,7 +3376,6 @@ L_08949124: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949144; } @@ -3400,7 +3388,6 @@ L_0894913C: L_08949144: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08949124; } @@ -3408,7 +3395,6 @@ L_08949144: } L_08949150: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3421,7 +3407,6 @@ L_08949158: AOT_REGCACHE_SYNC_OUT(); return; L_08949160: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894916C; } @@ -3448,7 +3433,17 @@ L_0894916C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949198: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -3465,7 +3460,6 @@ L_08949198: L_089491B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949410; } @@ -3505,11 +3499,20 @@ L_08949210: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-9448))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949228: aot_gpr_4 = (15589u << 16u); aot_gpr_4 = (aot_gpr_4 | 51450u); @@ -3599,7 +3602,6 @@ L_089492B4: AOT_REGCACHE_SYNC_OUT(); return; L_089492C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089492E8; } @@ -3619,7 +3621,6 @@ L_089492C8: } L_089492E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894930C; } @@ -3644,7 +3645,6 @@ L_089492F8: goto L_0894930C; L_0894930C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949364; } @@ -3679,7 +3679,6 @@ L_0894933C: AOT_REGCACHE_SYNC_OUT(); return; L_0894934C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08949364; } @@ -3761,7 +3760,6 @@ L_089493D0: AOT_REGCACHE_SYNC_OUT(); return; L_089493E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089493F8; } @@ -3799,7 +3797,6 @@ L_08949410: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949404; } @@ -3822,7 +3819,17 @@ L_0894942C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949440: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1914))); @@ -3854,7 +3861,6 @@ L_08949478: AOT_REGCACHE_SYNC_OUT(); return; L_08949488: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089494C0; } @@ -3911,7 +3917,17 @@ L_089494D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089494F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3929,7 +3945,6 @@ L_089494F0: L_0894951C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08949640; } @@ -3939,9 +3954,7 @@ L_08949528: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949640; } @@ -3952,9 +3965,7 @@ L_08949540: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949640; } @@ -3962,7 +3973,6 @@ L_08949540: } L_0894955C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08949640; } @@ -3977,9 +3987,7 @@ L_0894956C: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089495A4; } @@ -3994,9 +4002,7 @@ L_0894958C: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949640; } @@ -4062,7 +4068,6 @@ L_08949628: goto L_08949630; L_08949630: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949640; } @@ -4087,7 +4092,17 @@ L_08949640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894965C: ctx.gpr[7] = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_gpr_6 << 24u); @@ -4108,7 +4123,6 @@ L_0894965C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_6 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089497A8; } @@ -4149,7 +4163,6 @@ L_0894969C: } L_089496A4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08949774; } @@ -4252,11 +4265,20 @@ L_08949774: goto L_089497A8; L_089497A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089497B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4317,7 +4339,6 @@ L_08949824: goto L_08949828; L_08949828: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949888; } @@ -4327,7 +4348,6 @@ L_08949830: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949880; } @@ -4368,7 +4388,6 @@ L_08949874: AOT_REGCACHE_SYNC_OUT(); return; L_08949880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089498CC; } @@ -4379,7 +4398,6 @@ L_08949888: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089498B8; } @@ -4397,7 +4415,6 @@ L_089498A4: AOT_REGCACHE_SYNC_OUT(); return; L_089498B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089498CC; } @@ -4421,7 +4438,17 @@ L_089498CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089498DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4444,7 +4471,6 @@ L_08949910: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949A24; } @@ -4454,7 +4480,6 @@ L_08949928: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08949A24; } @@ -4486,7 +4511,6 @@ L_08949950: L_0894996C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089499F0; } @@ -4518,9 +4542,7 @@ L_089499B8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089499F8; } @@ -4542,7 +4564,6 @@ L_089499D0: } L_089499F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08949A24; } @@ -4550,9 +4571,7 @@ L_089499F0: } L_089499F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949A24; } @@ -4579,7 +4598,17 @@ L_08949A24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949A38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4601,7 +4630,6 @@ L_08949A68: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949A8C; } @@ -4610,7 +4638,6 @@ L_08949A68: L_08949A80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949AA4; } @@ -4620,7 +4647,6 @@ L_08949A8C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949AAC; } @@ -4653,7 +4679,17 @@ L_08949AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949AC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -4716,9 +4752,7 @@ L_08949AE8: L_08949B1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949B40; } @@ -4751,7 +4785,17 @@ L_08949B44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[17]); @@ -4797,7 +4841,6 @@ L_08949BB4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949C08; } @@ -4807,7 +4850,6 @@ L_08949BCC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_08949BE4; @@ -4818,9 +4860,7 @@ L_08949BE4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949C08; } @@ -4845,7 +4885,6 @@ L_08949C10: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949C88; } @@ -4867,7 +4906,6 @@ L_08949C28: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(56))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08949C70; @@ -4875,9 +4913,7 @@ L_08949C28: goto L_08949C70; L_08949C70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949C88; } @@ -4908,7 +4944,17 @@ L_08949C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949CA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4934,7 +4980,17 @@ L_08949CD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); @@ -4986,7 +5042,6 @@ L_08949D24: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + aot_fpr_13; goto L_08949D48; @@ -4998,9 +5053,7 @@ L_08949D48: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08949D6C; } @@ -5020,7 +5073,17 @@ L_08949D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949D80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5044,7 +5107,6 @@ L_08949DB8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949E20; } @@ -5057,7 +5119,6 @@ L_08949DD0: AOT_REGCACHE_SYNC_OUT(); return; L_08949DD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08949E20; } @@ -5066,7 +5127,6 @@ L_08949DD8: L_08949DE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949E04; } @@ -5084,7 +5144,6 @@ L_08949DEC: } L_08949DFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08949E20; } @@ -5094,7 +5153,6 @@ L_08949E04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08949E20; } @@ -5118,7 +5176,17 @@ L_08949E20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08949E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -5404,7 +5472,6 @@ L_0894A134: goto L_0894A148; L_0894A148: aot_gpr_31 = (0x0894A150u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894A150u) goto L_0894A150; AOT_REGCACHE_SYNC_OUT(); return; L_0894A150: @@ -5482,7 +5549,17 @@ L_0894A1B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894A1F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5577,7 +5654,6 @@ L_0894A2EC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1712))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A328; } @@ -5636,7 +5712,6 @@ L_0894A388: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3224), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A3CC; } @@ -5646,7 +5721,6 @@ L_0894A3B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894A3CC; } @@ -5665,7 +5739,6 @@ L_0894A3CC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(3262), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3304))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894A430; } @@ -5680,7 +5753,6 @@ L_0894A3EC: L_0894A3F8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894A41C; } @@ -5756,7 +5828,6 @@ L_0894A464: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A4D0; } @@ -5765,7 +5836,6 @@ L_0894A464: L_0894A4BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A4D0; } @@ -5791,7 +5861,17 @@ L_0894A4D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894A4F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -5811,7 +5891,6 @@ L_0894A4F0: L_0894A53C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A564; } @@ -5825,7 +5904,6 @@ L_0894A548: L_0894A550: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A564; } @@ -5846,7 +5924,6 @@ L_0894A570: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894A594; } @@ -5855,7 +5932,6 @@ L_0894A570: L_0894A580: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3257))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0894A59C; } @@ -5863,7 +5939,6 @@ L_0894A580: } L_0894A58C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894A5A8; } @@ -5871,7 +5946,6 @@ L_0894A58C: } L_0894A594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -5885,7 +5959,6 @@ L_0894A59C: L_0894A5A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3257))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894A5B8; } @@ -5897,7 +5970,6 @@ L_0894A5B4: L_0894A5B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A5D4; } @@ -5912,7 +5984,6 @@ L_0894A5C4: L_0894A5D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0894A5E8; } @@ -5931,7 +6002,6 @@ L_0894A5E8: L_0894A5F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A640; } @@ -5945,7 +6015,6 @@ L_0894A5FC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A640; } @@ -5956,7 +6025,6 @@ L_0894A61C: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894A640; } @@ -5981,7 +6049,6 @@ L_0894A640: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894A6E0; } @@ -6020,7 +6087,6 @@ L_0894A664: L_0894A6A4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A6D0; } @@ -6030,7 +6096,6 @@ L_0894A6B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894A6D0; } @@ -6056,7 +6121,6 @@ L_0894A6E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A734; } @@ -6066,7 +6130,6 @@ L_0894A6F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3258))); aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_0894A728; } @@ -6099,7 +6162,6 @@ L_0894A728: L_0894A734: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3258))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894A76C; } @@ -6116,7 +6178,6 @@ L_0894A740: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_gpr_31 = (0x0894A76Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 514u, 0x088BA6F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894A76Cu) goto L_0894A76C; AOT_REGCACHE_SYNC_OUT(); return; L_0894A76C: @@ -6141,7 +6202,6 @@ L_0894A784: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894A7EC; } @@ -6189,7 +6249,6 @@ L_0894A7E4: } L_0894A7EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -6230,7 +6289,6 @@ L_0894A83C: L_0894A84C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0894A970; } @@ -6242,9 +6300,7 @@ L_0894A858: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(72))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894A970; } @@ -6254,7 +6310,6 @@ L_0894A878: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894A970; } @@ -6268,7 +6323,6 @@ L_0894A888: aot_gpr_4 = (16256u << 16u); ctx.gpr[21] = (ctx.gpr[28] + static_cast(7768)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6285,7 +6339,6 @@ L_0894A8B0: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3244), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6303,7 +6356,6 @@ L_0894A8E0: AOT_REGCACHE_SYNC_OUT(); return; L_0894A8E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894A94C; } @@ -6318,7 +6370,6 @@ L_0894A8F0: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0894A94C; } @@ -6328,9 +6379,7 @@ L_0894A914: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894A94C; } @@ -6347,7 +6396,6 @@ L_0894A92C: AOT_REGCACHE_SYNC_OUT(); return; L_0894A944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894A9F4; } @@ -6365,7 +6413,6 @@ L_0894A94C: AOT_REGCACHE_SYNC_OUT(); return; L_0894A968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894A9F4; } @@ -6375,9 +6422,7 @@ L_0894A970: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3244))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894A9F4; } @@ -6389,7 +6434,6 @@ L_0894A988: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15172u << 16u); if (branch_taken) { @@ -6418,7 +6462,6 @@ L_0894A9C8: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3244), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6441,7 +6484,6 @@ L_0894A9F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894AA58; } @@ -6451,7 +6493,6 @@ L_0894AA1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894AA58; } @@ -6464,7 +6505,6 @@ L_0894AA2C: AOT_REGCACHE_SYNC_OUT(); return; L_0894AA34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894AA58; } @@ -6483,7 +6523,6 @@ L_0894AA3C: L_0894AA58: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894ABB8; } @@ -6496,7 +6535,6 @@ L_0894AA64: AOT_REGCACHE_SYNC_OUT(); return; L_0894AA6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894ABB8; } @@ -6514,7 +6552,6 @@ L_0894AA7C: AOT_REGCACHE_SYNC_OUT(); return; L_0894AA84: { const bool branch_taken = static_cast(ctx.gpr[2]) > 0; - // nop if (branch_taken) { goto L_0894AA94; } @@ -6532,7 +6569,6 @@ L_0894AA94: AOT_REGCACHE_SYNC_OUT(); return; L_0894AA9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894ABB8; } @@ -6542,7 +6578,6 @@ L_0894AAA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894ABB8; } @@ -6553,9 +6588,7 @@ L_0894AAB4: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894ABB8; } @@ -6564,7 +6597,6 @@ L_0894AAB4: L_0894AAD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0894ABB8; } @@ -6590,7 +6622,6 @@ L_0894AAEC: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3300))); if (branch_taken) { @@ -6638,7 +6669,6 @@ L_0894AB60: aot_fpr_13 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1252), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -6670,7 +6700,6 @@ L_0894ABB4: L_0894ABB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894AD20; } @@ -6699,7 +6728,6 @@ L_0894ABD4: aot_fpr_13 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[17]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3340))); if (branch_taken) { @@ -6760,9 +6788,7 @@ L_0894AC6C: L_0894AC70: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3340))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894AD20; } @@ -6800,7 +6826,6 @@ L_0894ACB8: goto L_0894ACC4; L_0894ACC4: aot_gpr_31 = (0x0894ACCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894ACCCu) goto L_0894ACCC; AOT_REGCACHE_SYNC_OUT(); return; L_0894ACCC: @@ -6813,7 +6838,6 @@ L_0894ACD0: AOT_REGCACHE_SYNC_OUT(); return; L_0894ACD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894AD20; } @@ -6841,7 +6865,6 @@ L_0894AD00: goto L_0894AD0C; L_0894AD0C: aot_gpr_31 = (0x0894AD14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894AD14u) goto L_0894AD14; AOT_REGCACHE_SYNC_OUT(); return; L_0894AD14: @@ -6859,7 +6882,6 @@ L_0894AD20: AOT_REGCACHE_SYNC_OUT(); return; L_0894AD28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894AD50; } @@ -6868,7 +6890,6 @@ L_0894AD28: L_0894AD30: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894AD50; } @@ -6879,7 +6900,6 @@ L_0894AD3C: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894ADA8; } @@ -6889,7 +6909,6 @@ L_0894AD50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0894AD88; } @@ -6899,7 +6918,6 @@ L_0894AD60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894AD88; } @@ -6913,7 +6931,6 @@ L_0894AD70: goto L_08948898; L_0894AD80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894ADA8; } @@ -6922,7 +6939,6 @@ L_0894AD80: L_0894AD88: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0894ADA8; } @@ -6938,7 +6954,6 @@ L_0894AD94: L_0894ADA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0894ADCC; } @@ -6948,7 +6963,6 @@ L_0894ADB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894ADE0; } @@ -6956,7 +6970,6 @@ L_0894ADB4: } L_0894ADC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894AE14; } @@ -6969,7 +6982,6 @@ L_0894ADCC: goto L_08948114; L_0894ADD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -6986,7 +6998,6 @@ L_0894ADEC: aot_gpr_4 = (aot_gpr_4 + static_cast(4000)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894AE0C; } @@ -6999,7 +7010,6 @@ L_0894AE04: AOT_REGCACHE_SYNC_OUT(); return; L_0894AE0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -7009,7 +7019,6 @@ L_0894AE14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B00C; } @@ -7019,7 +7028,6 @@ L_0894AE24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B00C; } @@ -7029,7 +7037,6 @@ L_0894AE34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894AE58; } @@ -7040,7 +7047,6 @@ L_0894AE44: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B004; } @@ -7049,7 +7055,6 @@ L_0894AE44: L_0894AE58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B004; } @@ -7065,7 +7070,6 @@ L_0894AE64: AOT_REGCACHE_SYNC_OUT(); return; L_0894AE78: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0894B004; } @@ -7091,7 +7095,6 @@ L_0894AE90: } L_0894AEA4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894AFA8; } @@ -7107,7 +7110,6 @@ L_0894AEAC: L_0894AEBC: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894AFA8; } @@ -7129,9 +7131,7 @@ L_0894AED8: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894AFA8; } @@ -7146,9 +7146,7 @@ L_0894AEFC: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894AFA8; } @@ -7163,9 +7161,7 @@ L_0894AF1C: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894AFA8; } @@ -7183,7 +7179,6 @@ L_0894AF38: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894AF78; } @@ -7225,7 +7220,6 @@ L_0894AF90: AOT_REGCACHE_SYNC_OUT(); return; L_0894AFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -7233,7 +7227,6 @@ L_0894AFA0: } L_0894AFA8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0894B004; } @@ -7242,7 +7235,6 @@ L_0894AFA8: L_0894AFB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B004; } @@ -7256,7 +7248,6 @@ L_0894AFBC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894B004; } @@ -7279,7 +7270,6 @@ L_0894AFDC: AOT_REGCACHE_SYNC_OUT(); return; L_0894B004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -7288,7 +7278,6 @@ L_0894B004: L_0894B00C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894B024; } @@ -7308,7 +7297,6 @@ L_0894B02C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B048; } @@ -7321,7 +7309,6 @@ L_0894B03C: goto L_089494F0; L_0894B048: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B0F0; } @@ -7334,7 +7321,6 @@ L_0894B050: AOT_REGCACHE_SYNC_OUT(); return; L_0894B058: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B0F0; } @@ -7355,7 +7341,6 @@ L_0894B060: AOT_REGCACHE_SYNC_OUT(); return; L_0894B088: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894B0F0; } @@ -7367,7 +7352,6 @@ L_0894B090: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894B0F0; } @@ -7384,7 +7368,6 @@ L_0894B0A8: } L_0894B0B4: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0894B0D4; } @@ -7399,7 +7382,6 @@ L_0894B0BC: AOT_REGCACHE_SYNC_OUT(); return; L_0894B0CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B0F0; } @@ -7408,7 +7390,6 @@ L_0894B0CC: L_0894B0D4: aot_gpr_4 = (0u | 32u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0894B0F0; } @@ -7432,7 +7413,6 @@ L_0894B0F0: } L_0894B0FC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0894B9AC; } @@ -7444,11 +7424,20 @@ L_0894B104: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-9304))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894B11C: aot_gpr_6 = (15820u << 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2232))); @@ -7470,7 +7459,6 @@ L_0894B13C: AOT_REGCACHE_SYNC_OUT(); return; L_0894B144: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B154; } @@ -7483,7 +7471,6 @@ L_0894B14C: AOT_REGCACHE_SYNC_OUT(); return; L_0894B154: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B9C0; } @@ -7512,7 +7499,6 @@ L_0894B15C: L_0894B194: aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B1BC; } @@ -7520,7 +7506,6 @@ L_0894B194: } L_0894B1A0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B1D0; } @@ -7534,7 +7519,6 @@ L_0894B1A8: AOT_REGCACHE_SYNC_OUT(); return; L_0894B1B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B1D0; } @@ -7542,7 +7526,6 @@ L_0894B1B4: } L_0894B1BC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B1D0; } @@ -7561,7 +7544,6 @@ L_0894B1D0: AOT_REGCACHE_SYNC_OUT(); return; L_0894B1D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B1F4; } @@ -7569,7 +7551,6 @@ L_0894B1D8: } L_0894B1E0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B1F4; } @@ -7583,7 +7564,6 @@ L_0894B1E8: AOT_REGCACHE_SYNC_OUT(); return; L_0894B1F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B9C0; } @@ -7630,7 +7610,6 @@ L_0894B24C: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B274; } @@ -7654,7 +7633,6 @@ L_0894B264: } L_0894B26C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B2A8; } @@ -7706,7 +7684,6 @@ L_0894B2B8: AOT_REGCACHE_SYNC_OUT(); return; L_0894B2C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B2DC; } @@ -7725,7 +7702,6 @@ L_0894B2D0: AOT_REGCACHE_SYNC_OUT(); return; L_0894B2DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B9C0; } @@ -7794,7 +7770,6 @@ L_0894B360: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3156), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -7807,7 +7782,6 @@ L_0894B390: goto L_0894B394; L_0894B394: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B4D0; } @@ -7816,7 +7790,6 @@ L_0894B394: L_0894B39C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(154))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894B4D0; } @@ -7829,7 +7802,6 @@ L_0894B3A8: AOT_REGCACHE_SYNC_OUT(); return; L_0894B3B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894B4A0; } @@ -7916,7 +7888,6 @@ L_0894B420: goto L_0894B424; L_0894B424: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894B4A0; } @@ -8003,7 +7974,6 @@ L_0894B494: goto L_0894B498; L_0894B498: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B4D0; } @@ -8018,7 +7988,6 @@ L_0894B4A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B4C8; } @@ -8028,7 +7997,6 @@ L_0894B4B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B4D0; } @@ -8050,7 +8018,6 @@ L_0894B4DC: goto L_0894BEF4; L_0894B4E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B9C0; } @@ -8092,7 +8059,6 @@ L_0894B534: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B638; } @@ -8174,7 +8140,6 @@ L_0894B5F8: goto L_0894B5FC; L_0894B5FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B638; } @@ -8184,7 +8149,6 @@ L_0894B604: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B638; } @@ -8211,7 +8175,6 @@ L_0894B638: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B690; } @@ -8221,7 +8184,6 @@ L_0894B648: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B690; } @@ -8251,7 +8213,6 @@ L_0894B668: L_0894B690: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B6AC; } @@ -8261,7 +8222,6 @@ L_0894B69C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8276,7 +8236,6 @@ L_0894B6AC: AOT_REGCACHE_SYNC_OUT(); return; L_0894B6BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B6E0; } @@ -8284,7 +8243,6 @@ L_0894B6BC: } L_0894B6C4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8298,7 +8256,6 @@ L_0894B6CC: AOT_REGCACHE_SYNC_OUT(); return; L_0894B6D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8311,7 +8268,6 @@ L_0894B6E0: AOT_REGCACHE_SYNC_OUT(); return; L_0894B6E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B70C; } @@ -8319,7 +8275,6 @@ L_0894B6E8: } L_0894B6F0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8332,7 +8287,6 @@ L_0894B6F8: goto L_08948B10; L_0894B704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8342,7 +8296,6 @@ L_0894B70C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B78C; } @@ -8350,7 +8303,6 @@ L_0894B70C: } L_0894B71C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8362,7 +8314,6 @@ L_0894B724: goto L_0894854C; L_0894B72C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894B764; } @@ -8385,7 +8336,6 @@ L_0894B74C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B778; } @@ -8398,7 +8348,6 @@ L_0894B764: goto L_089488F4; L_0894B770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8412,7 +8361,6 @@ L_0894B778: AOT_REGCACHE_SYNC_OUT(); return; L_0894B784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8422,7 +8370,6 @@ L_0894B78C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B86C; } @@ -8432,7 +8379,6 @@ L_0894B79C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B850; } @@ -8442,7 +8388,6 @@ L_0894B7AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B850; } @@ -8452,7 +8397,6 @@ L_0894B7BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B850; } @@ -8461,7 +8405,6 @@ L_0894B7BC: L_0894B7CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0894B850; } @@ -8471,7 +8414,6 @@ L_0894B7D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894B86C; } @@ -8481,7 +8423,6 @@ L_0894B7E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B86C; } @@ -8490,7 +8431,6 @@ L_0894B7E8: L_0894B7F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B86C; } @@ -8506,7 +8446,6 @@ L_0894B804: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B850; } @@ -8521,7 +8460,6 @@ L_0894B82C: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894B86C; } @@ -8529,7 +8467,6 @@ L_0894B82C: } L_0894B850: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8543,7 +8480,6 @@ L_0894B858: AOT_REGCACHE_SYNC_OUT(); return; L_0894B864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8551,7 +8487,6 @@ L_0894B864: } L_0894B86C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B890; } @@ -8561,7 +8496,6 @@ L_0894B874: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B890; } @@ -8576,7 +8510,6 @@ L_0894B884: L_0894B890: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0894B8BC; } @@ -8589,7 +8522,6 @@ L_0894B89C: AOT_REGCACHE_SYNC_OUT(); return; L_0894B8A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894B8D0; } @@ -8599,7 +8531,6 @@ L_0894B8AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894B8D0; } @@ -8607,7 +8538,6 @@ L_0894B8AC: } L_0894B8BC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B8D0; } @@ -8621,7 +8551,6 @@ L_0894B8C4: AOT_REGCACHE_SYNC_OUT(); return; L_0894B8D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B9C0; } @@ -8647,7 +8576,6 @@ L_0894B8F0: AOT_REGCACHE_SYNC_OUT(); return; L_0894B8FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894B9C0; } @@ -8655,7 +8583,6 @@ L_0894B8FC: } L_0894B904: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894B918; } @@ -8671,7 +8598,6 @@ L_0894B918: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B97C; } @@ -8687,7 +8613,6 @@ L_0894B928: L_0894B938: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B97C; } @@ -8698,9 +8623,7 @@ L_0894B944: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894B97C; } @@ -8720,7 +8643,6 @@ L_0894B97C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894B9A4; } @@ -8740,7 +8662,6 @@ L_0894B98C: } L_0894B9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -8755,7 +8676,6 @@ L_0894B9AC: goto L_0894B9C0; L_0894B9C0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894BA28; } @@ -8776,7 +8696,6 @@ L_0894B9D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894BA28; } @@ -8788,7 +8707,6 @@ L_0894B9E8: L_0894B9EC: aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894BA28; } @@ -8838,7 +8756,6 @@ L_0894BA38: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0894BD2C; } @@ -8855,7 +8772,6 @@ L_0894BA6C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(228))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0894BD2C; } @@ -8875,7 +8791,6 @@ L_0894BA98: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); if (branch_taken) { @@ -8885,9 +8800,7 @@ L_0894BA98: } L_0894BAD8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894BAFC; } @@ -8909,7 +8822,6 @@ L_0894BAF4: } L_0894BAFC: aot_gpr_31 = (0x0894BB04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894BB04u) goto L_0894BB04; AOT_REGCACHE_SYNC_OUT(); return; L_0894BB04: @@ -8920,7 +8832,6 @@ L_0894BB04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894BB54; } @@ -8930,7 +8841,6 @@ L_0894BB24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894BB54; } @@ -8940,7 +8850,6 @@ L_0894BB34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894BB54; } @@ -8950,7 +8859,6 @@ L_0894BB44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894BB64; } @@ -8963,7 +8871,6 @@ L_0894BB54: AOT_REGCACHE_SYNC_OUT(); return; L_0894BB5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BD2C; } @@ -8974,7 +8881,6 @@ L_0894BB64: aot_gpr_4 = (aot_gpr_4 | 2706u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16568u << 16u); if (branch_taken) { @@ -8986,7 +8892,6 @@ L_0894BB80: aot_gpr_4 = (aot_gpr_4 | 20105u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16423u << 16u); if (branch_taken) { @@ -9015,9 +8920,7 @@ L_0894BBC0: aot_gpr_4 = (aot_gpr_4 | 37504u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894BC50; } @@ -9043,7 +8946,6 @@ L_0894BBFC: aot_gpr_4 = (aot_gpr_4 | 9200u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -9066,9 +8968,7 @@ L_0894BC24: aot_fpr_13 = aot_fpr_12 - aot_fpr_13; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894BC50; } @@ -9095,7 +8995,6 @@ L_0894BC64: aot_fpr_12 = aot_fpr_12 / aot_fpr_20; { const float fs = aot_fpr_12; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_0894BCA0; @@ -9144,7 +9043,6 @@ L_0894BCDC: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[24]; goto L_0894BD00; @@ -9173,7 +9071,6 @@ L_0894BD10: AOT_REGCACHE_SYNC_OUT(); return; L_0894BD1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BD2C; } @@ -9236,9 +9133,7 @@ L_0894BD60: aot_fpr_12 = aot_fpr_13 + ctx.fpr[17]; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894BE04; } @@ -9247,7 +9142,6 @@ L_0894BD60: L_0894BDC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3272))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894BDE0; } @@ -9268,7 +9162,6 @@ L_0894BDE0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894BE18; } @@ -9294,7 +9187,6 @@ L_0894BE04: L_0894BE18: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17963))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894BE50; } @@ -9302,12 +9194,10 @@ L_0894BE18: } L_0894BE24: aot_gpr_31 = (0x0894BE2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894BE2Cu) goto L_0894BE2C; AOT_REGCACHE_SYNC_OUT(); return; L_0894BE2C: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0894BE50; } @@ -9325,7 +9215,6 @@ L_0894BE3C: AOT_REGCACHE_SYNC_OUT(); return; L_0894BE44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894BE50; } @@ -9337,7 +9226,6 @@ L_0894BE4C: L_0894BE50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0894BE9C; } @@ -9353,7 +9241,6 @@ L_0894BE5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894BE94; } @@ -9363,7 +9250,6 @@ L_0894BE84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894BE9C; } @@ -9377,7 +9263,6 @@ L_0894BE9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894BEB4; } @@ -9411,7 +9296,17 @@ L_0894BEB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894BEF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -9421,7 +9316,6 @@ L_0894BEF4: goto L_08948744; L_0894BF30: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894BF58; } @@ -9439,7 +9333,6 @@ L_0894BF38: goto L_0894BF50; L_0894BF50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894BF90; } @@ -9447,7 +9340,6 @@ L_0894BF50: } L_0894BF58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0082_entry, 82u, 220u, 0x0894CE08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0082.cpp b/profiles/vcs/generated/generated_unit_0082.cpp index 89d3b22..73d2788 100644 --- a/profiles/vcs/generated/generated_unit_0082.cpp +++ b/profiles/vcs/generated/generated_unit_0082.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0082[4091] = { - 1, 0, 0, 2, 3, 0, 0, 4, 0, 0, 0, 5, 6, 0, 0, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 10, 0, 0, 11, - 0, 12, 0, 0, 13, 0, 14, 0, 0, 15, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 18, 19, 0, 20, 0, 21, 0, 0, 0, 22, 23, 0, - 0, 24, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, - 0, 0, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, - 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 45, 46, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, - 0, 0, 0, 0, 62, 63, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, - 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 80, - 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 83, 0, 0, 0, 0, 84, 0, 0, 0, 85, 86, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, - 0, 89, 90, 0, 0, 91, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 96, 0, 0, 0, 0, 97, - 0, 0, 98, 0, 99, 0, 0, 100, 0, 0, 101, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 105, 0, 106, 0, 0, 107, 0, 108, 0, - 0, 109, 0, 110, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 113, 114, 0, 115, 0, 116, 0, 117, 0, 0, 118, 0, 0, 0, 119, 0, 0, 120, - 0, 121, 0, 122, 0, 0, 123, 0, 124, 0, 125, 0, 126, 0, 0, 0, 0, 127, 0, 128, 0, 129, 0, 0, 0, 0, 130, 0, 131, 0, 0, 132, - 0, 0, 133, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 0, 0, 139, - 0, 0, 140, 0, 141, 0, 0, 142, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 147, - 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 157, - 0, 0, 0, 0, 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 167, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, - 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 0, 0, 0, 179, 0, - 0, 180, 0, 181, 0, 182, 0, 183, 0, 0, 0, 184, 0, 185, 0, 0, 0, 186, 0, 187, 0, 0, 0, 188, 0, 189, 0, 0, 0, 0, 190, 0, - 191, 0, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, - 200, 0, 0, 0, 0, 0, 0, 0, 201, 202, 0, 203, 204, 0, 205, 206, 0, 207, 0, 208, 0, 0, 0, 0, 209, 0, 0, 210, 0, 211, 0, 0, - 212, 0, 213, 0, 0, 214, 0, 215, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 219, - 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 0, - 228, 0, 229, 0, 230, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 0, - 0, 0, 238, 0, 0, 239, 0, 240, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 242, 0, 243, 0, 0, 244, 0, 0, 245, 0, 0, 0, 0, 0, - 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 250, - 0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 259, 0, 0, 0, 0, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, - 0, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 273, 0, 0, 0, 274, 0, 0, 275, 0, 276, 0, 277, 278, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 283, - 0, 0, 284, 0, 285, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 291, - 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, - 299, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 0, 304, 305, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 313, 314, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 317, 0, - 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 325, 0, - 0, 0, 326, 0, 327, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 333, - 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 338, 0, - 0, 0, 0, 339, 0, 0, 0, 0, 340, 0, 0, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, - 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 352, - 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 358, 0, 359, 0, 360, 0, 0, 0, 0, - 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 364, 0, 365, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 373, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 0, - 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, - 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, 383, 0, 0, 384, 0, 385, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 389, 0, 0, 390, 0, 0, 0, 391, 0, 0, - 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 0, 0, - 0, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 399, 0, 0, 400, 0, 401, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, - 0, 0, 405, 0, 406, 0, 407, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 415, - 0, 416, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 420, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, - 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 439, 0, 0, 0, 440, - 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 446, 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, - 453, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 456, 0, 0, 457, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 460, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, 0, 0, - 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, 472, 0, 473, 0, 0, 0, 0, - 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 479, 480, 0, 0, 481, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 483, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, - 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 494, 0, 0, - 0, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 0, 0, 504, 0, 0, 505, 0, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, - 0, 510, 0, 511, 0, 512, 513, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 523, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 530, 0, 0, 531, 0, 532, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, - 536, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 541, 0, 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 545, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 562, 0, 0, 563, 0, 564, 0, 565, - 0, 566, 0, 0, 567, 0, 568, 0, 0, 569, 0, 570, 0, 571, 0, 572, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 575, - 0, 0, 0, 576, 0, 0, 577, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, 0, - 0, 586, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 589, 0, 590, 0, 591, 0, 0, 0, 592, 0, 0, - 593, 0, 594, 0, 595, 0, 596, 0, 0, 597, 0, 0, 598, 0, 0, 599, 0, 0, 0, 600, 0, 0, 601, 0, 602, 0, 0, 603, 0, 0, 604, 605, - 0, 606, 0, 607, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, - 0, 0, 610, 0, 0, 0, 611, 0, 0, 0, 612, 0, 613, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 617, 618, 0, 0, - 0, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 627, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 630, 631, 0, 632, 0, 0, - 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 636, 0, 637, 0, 0, 0, 638, 0, 0, 0, 0, 0, 639, 0, 0, 0, 640, 0, 0, 0, 641, 0, - 0, 0, 0, 0, 0, 642, 0, 643, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 0, 651, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 0, 0, - 0, 0, 0, 656, 0, 657, 0, 658, 0, 659, 0, 0, 660, 0, 661, 0, 662, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 669, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, - 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 674, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 677, 0, 678, 0, 0, 0, 679, - 0, 680, 0, 681, 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 0, 685, 0, 686, 0, 687, 0, 688, 0, 0, 689, 0, 690, 0, 691, 0, - 692, 0, 0, 693, 0, 0, 0, 694, 695, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 698, 0, 699, - 0, 700, 0, 0, 701, 0, 702, 703, 0, 704, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 707, 0, 708, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 0, 0, 0, - 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, - 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 718, 0, 719, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 721, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 726, 0, 0, 0, - 0, 0, 0, 727, 0, 728, 0, 729, 0, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 732, 0, 733, 0, 0, 0, 734, 0, 735, 0, - 736, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 739, 0, 740, 0, 741, 0, 0, 742, 0, 0, 0, 743, 0, 744, 0, 0, 745, 746, 0, 0, 0, - 0, 0, 0, 0, 0, 747, 0, 748, 0, 749, 0, 750, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 753, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 756, 0, 757, 0, 758, 0, 0, 0, 0, 0, 759, 0, 0, - 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, 0, 0, 0, 763, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, - 0, 765, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, - 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, - 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 781, 0, 0, 782, 0, 783, 0, 784, 785, 786, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, - 0, 793, 0, 0, 794, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 796, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0082[64] = { + 0x62B1425294211899ull, 0x5200A0022090A142ull, 0x002160A08A000220ull, 0x504450001100A844ull, + 0x1108A044420010B0ull, 0x04588620A0450001ull, 0x528A1494842810A6ull, 0x942A154A912AC48Aull, + 0x8108129485021204ull, 0x8508400202040810ull, 0x00A4014010800030ull, 0x40A0040A040A8214ull, + 0x08851451428A28AAull, 0x840028A5290ADB01ull, 0x0842102100010004ull, 0x049420A411542115ull, + 0x0400088880840005ull, 0x400040010A108001ull, 0x0010814080080000ull, 0x8480BA9104080005ull, + 0x00810088C0140294ull, 0x00C8208500844000ull, 0x0010200008200100ull, 0x4444444444464020ull, + 0x4210084084210854ull, 0x8888884210842108ull, 0x000000050A888888ull, 0x0048120014200000ull, + 0x0480000808950010ull, 0x2254020029480005ull, 0xA520001424000020ull, 0x0012015448020000ull, + 0x00829042A8000810ull, 0x0824102080828041ull, 0x8820400001080410ull, 0x00B2014802081140ull, + 0x08841200820A5009ull, 0x268140820B040950ull, 0x2084500809115100ull, 0x42000080522AA854ull, + 0x20001080002022EAull, 0x0000004000225000ull, 0x0002004001000000ull, 0x20001000002A4100ull, + 0x0402A45200841005ull, 0xA914104045550880ull, 0x2A9422488204AA52ull, 0xC948925522A08202ull, + 0x308854440800040Aull, 0x2C400C1004290A20ull, 0x00A108A044411511ull, 0x0526280000000008ull, + 0x02002002000952A8ull, 0x8A04454040009110ull, 0xA802018954AA448Aull, 0x04400800A0400AD2ull, + 0x002A800102041001ull, 0x514088A810402281ull, 0x00802AA01944A891ull, 0x0222200820A82082ull, + 0x2000080220040042ull, 0x0084020004010808ull, 0x0000BA9000021000ull, 0x0400011220504100ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0082[64] = { + 1u, 24u, 38u, 49u, 62u, 75u, 89u, 109u, 133u, 148u, 158u, 167u, 180u, 200u, 220u, 228u, + 246u, 255u, 263u, 269u, 284u, 296u, 306u, 311u, 326u, 339u, 353u, 363u, 370u, 379u, 392u, 402u, + 411u, 422u, 433u, 441u, 453u, 466u, 482u, 495u, 510u, 521u, 526u, 529u, 536u, 549u, 566u, 586u, + 606u, 619u, 633u, 648u, 656u, 667u, 680u, 700u, 712u, 721u, 736u, 753u, 765u, 772u, 779u, 788u, }; void recomp_unit_0082_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0082_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0894C000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0082[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0082[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0082[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0894C000; @@ -970,7 +877,6 @@ LOCAL_DISPATCH: L_0894C000: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0894C010; } @@ -1026,7 +932,6 @@ L_0894C054: } L_0894C068: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0894C07C; } @@ -1040,7 +945,6 @@ L_0894C070: AOT_REGCACHE_SYNC_OUT(); return; L_0894C07C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894C090; } @@ -1054,7 +958,6 @@ L_0894C084: AOT_REGCACHE_SYNC_OUT(); return; L_0894C090: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894C0A4; } @@ -1075,7 +978,6 @@ L_0894C0A4: goto L_0894C0B8; L_0894C0B8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894C0D4; } @@ -1093,7 +995,6 @@ L_0894C0D0: goto L_0894C0D4; L_0894C0D4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894C0F8; } @@ -1101,7 +1002,6 @@ L_0894C0D4: } L_0894C0DC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894C0F8; } @@ -1139,7 +1039,6 @@ L_0894C104: } L_0894C118: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0894C134; } @@ -1167,9 +1066,7 @@ L_0894C134: L_0894C13C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C174; } @@ -1188,7 +1085,6 @@ L_0894C15C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(36))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[20]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[18]); if (branch_taken) { @@ -1252,7 +1148,6 @@ L_0894C1E4: AOT_REGCACHE_SYNC_OUT(); return; L_0894C1F0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894C308; } @@ -1275,7 +1170,6 @@ L_0894C214: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894C29C; } @@ -1313,7 +1207,6 @@ L_0894C224: AOT_REGCACHE_SYNC_OUT(); return; L_0894C264: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894C29C; } @@ -1323,7 +1216,6 @@ L_0894C26C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894C29C; } @@ -1360,7 +1252,6 @@ L_0894C2B4: goto L_0894C2B8; L_0894C2B8: aot_gpr_31 = (0x0894C2C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894C2C0u) goto L_0894C2C0; AOT_REGCACHE_SYNC_OUT(); return; L_0894C2C0: @@ -1399,9 +1290,7 @@ L_0894C308: L_0894C318: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3156))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C688; } @@ -1409,7 +1298,6 @@ L_0894C318: } L_0894C32C: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0894C688; } @@ -1442,7 +1330,6 @@ L_0894C360: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894C3F8; } @@ -1480,7 +1367,6 @@ L_0894C370: AOT_REGCACHE_SYNC_OUT(); return; L_0894C3B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894C3F8; } @@ -1490,7 +1376,6 @@ L_0894C3B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894C3F8; } @@ -1500,7 +1385,6 @@ L_0894C3C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894C3F8; } @@ -1537,7 +1421,6 @@ L_0894C410: goto L_0894C414; L_0894C414: aot_gpr_31 = (0x0894C41Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894C41Cu) goto L_0894C41C; AOT_REGCACHE_SYNC_OUT(); return; L_0894C41C: @@ -1566,7 +1449,6 @@ L_0894C430: L_0894C464: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); if (branch_taken) { @@ -1578,7 +1460,6 @@ L_0894C478: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894C4BC; } @@ -1588,7 +1469,6 @@ L_0894C488: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48)))))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894C4BC; } @@ -1616,7 +1496,6 @@ L_0894C4BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[18] = (0u | 17u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894C608; } @@ -1625,9 +1504,7 @@ L_0894C4BC: L_0894C4CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C57C; } @@ -1637,7 +1514,6 @@ L_0894C4E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894C57C; } @@ -1647,7 +1523,6 @@ L_0894C4F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48)))))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894C57C; } @@ -1685,7 +1560,6 @@ L_0894C500: AOT_REGCACHE_SYNC_OUT(); return; L_0894C540: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894C57C; } @@ -1695,7 +1569,6 @@ L_0894C548: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894C57C; } @@ -1733,7 +1606,6 @@ L_0894C594: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48)))))); aot_gpr_5 = (0u | 250u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894C5E8; } @@ -1755,7 +1627,6 @@ L_0894C5BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48)))))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894C5E8; } @@ -1766,7 +1637,6 @@ L_0894C5CC: goto L_0894C5D0; L_0894C5D0: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894C608; } @@ -1776,7 +1646,6 @@ L_0894C5D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(48)))))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894C608; } @@ -1803,7 +1672,6 @@ L_0894C608: AOT_REGCACHE_SYNC_OUT(); return; L_0894C614: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0894C690; } @@ -1812,9 +1680,7 @@ L_0894C614: L_0894C61C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C690; } @@ -1825,9 +1691,7 @@ L_0894C630: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C690; } @@ -1835,7 +1699,6 @@ L_0894C630: } L_0894C64C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0894C690; } @@ -1844,9 +1707,7 @@ L_0894C64C: L_0894C654: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C690; } @@ -1855,9 +1716,7 @@ L_0894C654: L_0894C668: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C690; } @@ -1879,7 +1738,6 @@ L_0894C688: L_0894C690: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(76))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894CBF8; } @@ -1896,7 +1754,6 @@ L_0894C69C: } L_0894C6A8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0894C6CC; } @@ -1926,7 +1783,6 @@ L_0894C6CC: goto L_0894C6DC; L_0894C6DC: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0894C6F0; } @@ -1940,7 +1796,6 @@ L_0894C6E4: AOT_REGCACHE_SYNC_OUT(); return; L_0894C6F0: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894C704; } @@ -1967,7 +1822,6 @@ L_0894C70C: L_0894C71C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0894C73C; } @@ -1985,7 +1839,6 @@ L_0894C738: goto L_0894C73C; L_0894C73C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0894C74C; } @@ -1998,7 +1851,6 @@ L_0894C744: AOT_REGCACHE_SYNC_OUT(); return; L_0894C74C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894C760; } @@ -2020,7 +1872,6 @@ L_0894C760: L_0894C770: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894C78C; } @@ -2039,7 +1890,6 @@ L_0894C784: L_0894C78C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894C7A8; } @@ -2057,7 +1907,6 @@ L_0894C7A0: AOT_REGCACHE_SYNC_OUT(); return; L_0894C7A8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_0894C7CC; } @@ -2077,7 +1926,6 @@ L_0894C7C4: goto L_0894C7CC; L_0894C7CC: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_0894C7F0; } @@ -2098,7 +1946,6 @@ L_0894C7E8: L_0894C7F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894C824; } @@ -2122,7 +1969,6 @@ L_0894C808: L_0894C824: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894C89C; } @@ -2131,9 +1977,7 @@ L_0894C824: L_0894C830: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C888; } @@ -2144,9 +1988,7 @@ L_0894C844: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C87C; } @@ -2154,7 +1996,6 @@ L_0894C844: } L_0894C860: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894C87C; } @@ -2163,9 +2004,7 @@ L_0894C860: L_0894C868: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C888; } @@ -2179,7 +2018,6 @@ L_0894C87C: AOT_REGCACHE_SYNC_OUT(); return; L_0894C888: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0894C89C; } @@ -2193,7 +2031,6 @@ L_0894C890: AOT_REGCACHE_SYNC_OUT(); return; L_0894C89C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894CA98; } @@ -2213,9 +2050,7 @@ L_0894C8B0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CA98; } @@ -2224,9 +2059,7 @@ L_0894C8B0: L_0894C8CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C8FC; } @@ -2248,7 +2081,6 @@ L_0894C8E0: L_0894C8FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16204u << 16u); if (branch_taken) { @@ -2261,9 +2093,7 @@ L_0894C910: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894C964; } @@ -2274,9 +2104,7 @@ L_0894C92C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CBF8; } @@ -2301,9 +2129,7 @@ L_0894C964: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CA5C; } @@ -2320,7 +2146,6 @@ L_0894C984: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-10228)); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_22 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2398,9 +2223,7 @@ L_0894CA14: L_0894CA5C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CBF8; } @@ -2424,7 +2247,6 @@ L_0894CA70: } L_0894CA98: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0894CAC8; } @@ -2449,7 +2271,6 @@ L_0894CAA0: L_0894CAC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894CB4C; } @@ -2457,7 +2278,6 @@ L_0894CAC8: } L_0894CAD4: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0894CB10; } @@ -2488,9 +2308,7 @@ L_0894CB08: L_0894CB10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CB3C; } @@ -2511,7 +2329,6 @@ L_0894CB3C: AOT_REGCACHE_SYNC_OUT(); return; L_0894CB44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894CBF8; } @@ -2522,9 +2339,7 @@ L_0894CB4C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CB8C; } @@ -2542,7 +2357,6 @@ L_0894CB68: AOT_REGCACHE_SYNC_OUT(); return; L_0894CB84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894CBF8; } @@ -2553,9 +2367,7 @@ L_0894CB8C: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894CBDC; } @@ -2577,7 +2389,6 @@ L_0894CBA8: AOT_REGCACHE_SYNC_OUT(); return; L_0894CBD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894CBF8; } @@ -2596,7 +2407,6 @@ L_0894CBDC: L_0894CBF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894CCDC; } @@ -2609,7 +2419,6 @@ L_0894CC04: AOT_REGCACHE_SYNC_OUT(); return; L_0894CC0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894CC78; } @@ -2617,7 +2426,6 @@ L_0894CC0C: } L_0894CC14: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0894CC2C; } @@ -2631,7 +2439,6 @@ L_0894CC1C: goto L_0894CC2C; L_0894CC2C: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0894CC44; } @@ -2645,7 +2452,6 @@ L_0894CC34: goto L_0894CC44; L_0894CC44: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894CC5C; } @@ -2659,7 +2465,6 @@ L_0894CC4C: goto L_0894CC5C; L_0894CC5C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894CE08; } @@ -2678,7 +2483,6 @@ L_0894CC64: } L_0894CC78: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0894CC90; } @@ -2692,7 +2496,6 @@ L_0894CC80: goto L_0894CC90; L_0894CC90: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0894CCA8; } @@ -2706,7 +2509,6 @@ L_0894CC98: goto L_0894CCA8; L_0894CCA8: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894CCC0; } @@ -2720,7 +2522,6 @@ L_0894CCB0: goto L_0894CCC0; L_0894CCC0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894CE08; } @@ -2741,7 +2542,6 @@ L_0894CCDC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894CDAC; } @@ -2752,7 +2552,6 @@ L_0894CCEC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894CD4C; } @@ -2777,7 +2576,6 @@ L_0894CD20: goto L_0894CD24; L_0894CD24: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0894CD30; } @@ -2788,7 +2586,6 @@ L_0894CD2C: goto L_0894CD30; L_0894CD30: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894CD3C; } @@ -2799,7 +2596,6 @@ L_0894CD38: goto L_0894CD3C; L_0894CD3C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894CE08; } @@ -2831,7 +2627,6 @@ L_0894CD60: goto L_0894CD6C; L_0894CD6C: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0894CD80; } @@ -2844,7 +2639,6 @@ L_0894CD74: goto L_0894CD80; L_0894CD80: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894CD94; } @@ -2857,7 +2651,6 @@ L_0894CD88: goto L_0894CD94; L_0894CD94: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0894CE08; } @@ -2894,7 +2687,6 @@ L_0894CDB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894CDFC; } @@ -2937,7 +2729,17 @@ L_0894CE08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894CE40: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), ctx.gpr[18]); @@ -2975,7 +2777,6 @@ L_0894CEB0: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894CFB4; } @@ -2986,7 +2787,6 @@ L_0894CEC4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_0894CFB4; } @@ -2997,7 +2797,6 @@ L_0894CED8: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_0894CFB4; } @@ -3008,7 +2807,6 @@ L_0894CEEC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0894CFB4; } @@ -3029,7 +2827,6 @@ L_0894CF10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894CF60; } @@ -3040,7 +2837,6 @@ L_0894CF20: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0894CF48; } @@ -3051,7 +2847,6 @@ L_0894CF34: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0894CF50; } @@ -3069,7 +2864,6 @@ L_0894CF50: AOT_REGCACHE_SYNC_OUT(); return; L_0894CF58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894CFB4; } @@ -3099,7 +2893,6 @@ L_0894CF88: AOT_REGCACHE_SYNC_OUT(); return; L_0894CF94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894CFB4; } @@ -3144,7 +2937,6 @@ L_0894CFD0: L_0894CFDC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0894D000; } @@ -3167,7 +2959,6 @@ L_0894CFE8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894D008; } @@ -3243,7 +3034,6 @@ L_0894D07C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(64))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(612))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0894D16C; } @@ -3253,7 +3043,6 @@ L_0894D08C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0894D16C; } @@ -3263,7 +3052,6 @@ L_0894D09C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0894D16C; } @@ -3320,7 +3108,6 @@ L_0894D0AC: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); goto L_0894D100; @@ -3351,9 +3138,7 @@ L_0894D100: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894D150; } @@ -3379,7 +3164,6 @@ L_0894D150: goto L_0894D164; L_0894D164: aot_gpr_31 = (0x0894D16Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 299u, 0x08B458A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894D16Cu) goto L_0894D16C; AOT_REGCACHE_SYNC_OUT(); return; L_0894D16C: @@ -3414,7 +3198,17 @@ L_0894D180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894D1B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3510,7 +3304,6 @@ L_0894D2A0: aot_gpr_4 = (49884u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17116u << 16u); if (branch_taken) { @@ -3521,9 +3314,7 @@ L_0894D2A0: L_0894D2BC: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894D308; } @@ -3652,7 +3443,6 @@ L_0894D3B0: goto L_0894D3B4; L_0894D3B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894D4C0; } @@ -3691,7 +3481,6 @@ L_0894D3E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894D48C; } @@ -3705,7 +3494,6 @@ L_0894D3FC: AOT_REGCACHE_SYNC_OUT(); return; L_0894D408: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_0894D424; } @@ -3719,7 +3507,6 @@ L_0894D410: AOT_REGCACHE_SYNC_OUT(); return; L_0894D41C: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_0894D450; } @@ -3801,7 +3588,17 @@ L_0894D4C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894D4DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -3814,7 +3611,6 @@ L_0894D4DC: { const std::uint32_t aot_run_words[3]{ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(460), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894D588; } @@ -3824,7 +3620,6 @@ L_0894D538: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894D580; } @@ -3855,7 +3650,6 @@ L_0894D55C: } L_0894D580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894DEFC; } @@ -3895,7 +3689,6 @@ L_0894D5B4: L_0894D5CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2192))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0894D654; } @@ -3948,7 +3741,6 @@ L_0894D654: ctx.gpr[7] = (static_cast(static_cast(ctx.gpr[7]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[7]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894D59C; } @@ -4034,7 +3826,6 @@ L_0894D714: L_0894D738: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(474))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_0894D818; } @@ -4047,7 +3838,6 @@ L_0894D748: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(22))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4057,7 +3847,6 @@ L_0894D758: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(24))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4067,7 +3856,6 @@ L_0894D768: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(26))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4077,7 +3865,6 @@ L_0894D778: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(28))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4087,7 +3874,6 @@ L_0894D788: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(210))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4097,7 +3883,6 @@ L_0894D798: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(212))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4107,7 +3892,6 @@ L_0894D7A8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(214))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4117,7 +3901,6 @@ L_0894D7B8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(216))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4127,7 +3910,6 @@ L_0894D7C8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(218))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4137,7 +3919,6 @@ L_0894D7D8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(220))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4147,7 +3928,6 @@ L_0894D7E8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(222))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894D808; } @@ -4173,7 +3953,6 @@ L_0894D808: } L_0894D810: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0894DBB0; } @@ -4184,7 +3963,6 @@ L_0894D818: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D840; } @@ -4206,7 +3984,6 @@ L_0894D840: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D868; } @@ -4228,7 +4005,6 @@ L_0894D868: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D898; } @@ -4252,7 +4028,6 @@ L_0894D898: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(14))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D8D0; } @@ -4278,7 +4053,6 @@ L_0894D8D0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D8F8; } @@ -4300,7 +4074,6 @@ L_0894D8F8: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(208))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D920; } @@ -4322,7 +4095,6 @@ L_0894D920: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(234))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D948; } @@ -4344,7 +4116,6 @@ L_0894D948: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(230))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D970; } @@ -4366,7 +4137,6 @@ L_0894D970: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(236))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894D998; } @@ -4388,7 +4158,6 @@ L_0894D998: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(22))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4398,7 +4167,6 @@ L_0894D9AC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(24))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4408,7 +4176,6 @@ L_0894D9BC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(26))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4418,7 +4185,6 @@ L_0894D9CC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(28))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4428,7 +4194,6 @@ L_0894D9DC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(210))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4438,7 +4203,6 @@ L_0894D9EC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(212))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4448,7 +4212,6 @@ L_0894D9FC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(214))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4458,7 +4221,6 @@ L_0894DA0C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(216))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4468,7 +4230,6 @@ L_0894DA1C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(218))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4478,7 +4239,6 @@ L_0894DA2C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(220))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4488,7 +4248,6 @@ L_0894DA3C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(222))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0894DA5C; } @@ -4514,7 +4273,6 @@ L_0894DA5C: } L_0894DA64: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0894DA80; } @@ -4533,7 +4291,6 @@ L_0894DA6C: } L_0894DA80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894DBB0; } @@ -4708,7 +4465,6 @@ L_0894DB54: AOT_REGCACHE_SYNC_OUT(); return; L_0894DB68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894DBA4; } @@ -4796,7 +4552,6 @@ L_0894DC10: goto L_0894DC40; L_0894DC40: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894DD74; } @@ -4804,7 +4559,6 @@ L_0894DC40: } L_0894DC48: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0894DD74; } @@ -4831,7 +4585,6 @@ L_0894DC5C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0894DC6Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894DC6Cu) goto L_0894DC6C; AOT_REGCACHE_SYNC_OUT(); return; L_0894DC6C: @@ -4842,7 +4595,6 @@ L_0894DC6C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0894DC8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894DC8Cu) goto L_0894DC8C; AOT_REGCACHE_SYNC_OUT(); return; L_0894DC8C: @@ -4890,9 +4642,7 @@ L_0894DC8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894DD4C; } @@ -4915,7 +4665,6 @@ L_0894DCE8: AOT_REGCACHE_SYNC_OUT(); return; L_0894DD00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894DD4C; } @@ -4954,7 +4703,6 @@ L_0894DD08: L_0894DD4C: aot_gpr_4 = (static_cast(aot_gpr_16) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894DD60; } @@ -4962,7 +4710,6 @@ L_0894DD4C: } L_0894DD58: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0894DD6C; } @@ -4975,7 +4722,6 @@ L_0894DD60: goto L_0894DD6C; L_0894DD6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894DC40; } @@ -5009,7 +4755,6 @@ L_0894DDA4: goto L_0894DDC8; L_0894DDC8: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0894DEFC; } @@ -5017,7 +4762,6 @@ L_0894DDC8: } L_0894DDD0: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_0894DEFC; } @@ -5044,7 +4788,6 @@ L_0894DDE4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0894DDF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894DDF4u) goto L_0894DDF4; AOT_REGCACHE_SYNC_OUT(); return; L_0894DDF4: @@ -5055,7 +4798,6 @@ L_0894DDF4: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0894DE14u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894DE14u) goto L_0894DE14; AOT_REGCACHE_SYNC_OUT(); return; L_0894DE14: @@ -5104,9 +4846,7 @@ L_0894DE14: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894DED4; } @@ -5128,7 +4868,6 @@ L_0894DE74: AOT_REGCACHE_SYNC_OUT(); return; L_0894DE88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894DED4; } @@ -5167,7 +4906,6 @@ L_0894DE90: L_0894DED4: aot_gpr_4 = (static_cast(aot_gpr_16) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894DEE8; } @@ -5175,7 +4913,6 @@ L_0894DED4: } L_0894DEE0: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0894DEF4; } @@ -5188,7 +4925,6 @@ L_0894DEE8: goto L_0894DEF4; L_0894DEF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894DDC8; } @@ -5219,7 +4955,17 @@ L_0894DEFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894DF44: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); @@ -5230,7 +4976,6 @@ L_0894DF44: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894DF98; } @@ -5239,7 +4984,6 @@ L_0894DF44: L_0894DF6C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894DF98; } @@ -5249,7 +4993,6 @@ L_0894DF78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894DF98; } @@ -5262,7 +5005,6 @@ L_0894DF88: AOT_REGCACHE_SYNC_OUT(); return; L_0894DF90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894DFA0; } @@ -5270,7 +5012,6 @@ L_0894DF90: } L_0894DF98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5348,9 +5089,7 @@ L_0894DFD0: ctx.gpr[9] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894E084; } @@ -5363,7 +5102,6 @@ L_0894E010: ctx.gpr[9] = (ctx.gpr[9] < static_cast(1) ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0894E07C; } @@ -5410,9 +5148,7 @@ L_0894E02C: ctx.gpr[9] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894E074; } @@ -5424,7 +5160,6 @@ L_0894E06C: goto L_0894E074; L_0894E074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E084; } @@ -5432,7 +5167,6 @@ L_0894E074: } L_0894E07C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5463,7 +5197,6 @@ L_0894E098: L_0894E0B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E144; } @@ -5471,7 +5204,6 @@ L_0894E0B0: } L_0894E0BC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5529,7 +5261,6 @@ L_0894E118: AOT_REGCACHE_SYNC_OUT(); return; L_0894E13C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5554,7 +5285,6 @@ L_0894E15C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5578,7 +5308,6 @@ L_0894E194: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5598,7 +5327,6 @@ L_0894E1B0: L_0894E1C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0894E24C; } @@ -5666,7 +5394,17 @@ L_0894E24C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894E260: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -5720,7 +5458,6 @@ L_0894E2EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894E3D4; } @@ -5738,7 +5475,6 @@ L_0894E2FC: AOT_REGCACHE_SYNC_OUT(); return; L_0894E318: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894E3D4; } @@ -5748,7 +5484,6 @@ L_0894E320: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0894E3D4; } @@ -5761,7 +5496,6 @@ L_0894E330: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E3D4; } @@ -5788,7 +5522,6 @@ L_0894E364: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E3D4; } @@ -5802,7 +5535,6 @@ L_0894E38C: AOT_REGCACHE_SYNC_OUT(); return; L_0894E398: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894E3D4; } @@ -5833,7 +5565,6 @@ L_0894E3D0: goto L_0894E3D4; L_0894E3D4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -5856,7 +5587,6 @@ L_0894E3DC: L_0894E400: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -5876,7 +5606,6 @@ L_0894E40C: AOT_REGCACHE_SYNC_OUT(); return; L_0894E430: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -5890,7 +5619,6 @@ L_0894E438: AOT_REGCACHE_SYNC_OUT(); return; L_0894E444: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -5902,7 +5630,6 @@ L_0894E44C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E5E4; } @@ -5929,7 +5656,6 @@ L_0894E47C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E5E4; } @@ -5938,7 +5664,6 @@ L_0894E47C: L_0894E4A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E4DC; } @@ -5960,7 +5685,6 @@ L_0894E4C8: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0894E56C; } @@ -5970,7 +5694,6 @@ L_0894E4DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894E520; } @@ -5997,7 +5720,6 @@ L_0894E510: AOT_REGCACHE_SYNC_OUT(); return; L_0894E518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -6006,7 +5728,6 @@ L_0894E518: L_0894E520: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -6019,7 +5740,6 @@ L_0894E52C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -6031,7 +5751,6 @@ L_0894E548: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E564; } @@ -6042,7 +5761,6 @@ L_0894E560: goto L_0894E564; L_0894E564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -6085,7 +5803,6 @@ L_0894E59C: AOT_REGCACHE_SYNC_OUT(); return; L_0894E5B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -6105,7 +5822,6 @@ L_0894E5C0: AOT_REGCACHE_SYNC_OUT(); return; L_0894E5DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E5E8; } @@ -6142,7 +5858,6 @@ L_0894E620: AOT_REGCACHE_SYNC_OUT(); return; L_0894E630: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894E640; } @@ -6243,7 +5958,6 @@ L_0894E708: goto L_0894E710; L_0894E710: aot_gpr_31 = (0x0894E718u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0141_entry, 141u, 407u, 0x08A39B74u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894E718u) goto L_0894E718; AOT_REGCACHE_SYNC_OUT(); return; L_0894E718: @@ -6251,7 +5965,6 @@ L_0894E718: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0894E778; } @@ -6259,7 +5972,6 @@ L_0894E718: } L_0894E72C: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_0894E778; } @@ -6272,7 +5984,6 @@ L_0894E734: AOT_REGCACHE_SYNC_OUT(); return; L_0894E73C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894E778; } @@ -6285,7 +5996,6 @@ L_0894E744: AOT_REGCACHE_SYNC_OUT(); return; L_0894E74C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894E778; } @@ -6295,7 +6005,6 @@ L_0894E754: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894E778; } @@ -6304,7 +6013,6 @@ L_0894E754: L_0894E764: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E778; } @@ -6331,7 +6039,17 @@ L_0894E778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894E79C: aot_gpr_29 = (aot_gpr_29 + static_cast(-704)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(684), ctx.gpr[17]); @@ -6392,7 +6110,6 @@ L_0894E818: goto L_0894E81C; L_0894E81C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E834; } @@ -6402,7 +6119,6 @@ L_0894E824: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894E938; } @@ -6427,7 +6143,6 @@ L_0894E834: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E89C; } @@ -6492,7 +6207,6 @@ L_0894E854: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E930; } @@ -6503,7 +6217,6 @@ L_0894E89C: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894E8F4; } @@ -6567,7 +6280,6 @@ L_0894E8B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894E930; } @@ -6633,7 +6345,6 @@ L_0894E8F4: goto L_0894E930; L_0894E930: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894ECC4; } @@ -6642,7 +6353,6 @@ L_0894E930: L_0894E938: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894E998; } @@ -6713,7 +6423,6 @@ L_0894E954: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894ECC4; } @@ -6858,9 +6567,7 @@ L_0894EA60: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894EB54; } @@ -6968,7 +6675,6 @@ L_0894EB20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EB4C; } @@ -6977,7 +6683,6 @@ L_0894EB20: L_0894EB38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EB4C; } @@ -6990,7 +6695,6 @@ L_0894EB44: AOT_REGCACHE_SYNC_OUT(); return; L_0894EB4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894EC98; } @@ -7102,9 +6806,7 @@ L_0894EBB0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(448))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894EC00; } @@ -7185,7 +6887,6 @@ L_0894EC5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(440))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EC98; } @@ -7194,7 +6895,6 @@ L_0894EC5C: L_0894EC84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(432))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EC98; } @@ -7209,7 +6909,6 @@ L_0894EC98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894ECBC; } @@ -7218,7 +6917,6 @@ L_0894EC98: L_0894ECA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894ECBC; } @@ -7231,7 +6929,6 @@ L_0894ECB4: AOT_REGCACHE_SYNC_OUT(); return; L_0894ECBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894ECC4; } @@ -7253,7 +6950,17 @@ L_0894ECC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894ECE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3262)))))); @@ -7275,7 +6982,6 @@ L_0894ED1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[18] = (0u | 17u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894ED48; } @@ -7294,7 +7000,6 @@ L_0894ED2C: } L_0894ED40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894EEF4; } @@ -7302,7 +7007,6 @@ L_0894ED40: } L_0894ED48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7310,7 +7014,6 @@ L_0894ED48: } L_0894ED50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7318,7 +7021,6 @@ L_0894ED50: } L_0894ED58: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0894EEF4; } @@ -7356,7 +7058,6 @@ L_0894ED98: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EDC8; } @@ -7368,7 +7069,6 @@ L_0894EDB0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EEEC; } @@ -7376,7 +7076,6 @@ L_0894EDB0: } L_0894EDC8: { const bool branch_taken = static_cast(ctx.gpr[17]) <= 0; - // nop if (branch_taken) { goto L_0894EEEC; } @@ -7415,7 +7114,6 @@ L_0894EDF4: } L_0894EDFC: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0894EEEC; } @@ -7424,7 +7122,6 @@ L_0894EDFC: L_0894EE04: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_0894EE8C; } @@ -7494,7 +7191,6 @@ L_0894EE7C: L_0894EE8C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3257))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0894EEE4; } @@ -7503,7 +7199,6 @@ L_0894EE8C: L_0894EE98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3172))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EEE4; } @@ -7521,7 +7216,6 @@ L_0894EEB4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3172), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894EEEC; } @@ -7540,7 +7234,6 @@ L_0894EED0: AOT_REGCACHE_SYNC_OUT(); return; L_0894EEDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894EEEC; } @@ -7553,7 +7246,6 @@ L_0894EEE4: AOT_REGCACHE_SYNC_OUT(); return; L_0894EEEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7563,7 +7255,6 @@ L_0894EEF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7586,7 +7277,6 @@ L_0894EF24: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EF54; } @@ -7598,7 +7288,6 @@ L_0894EF3C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7611,7 +7300,6 @@ L_0894EF54: AOT_REGCACHE_SYNC_OUT(); return; L_0894EF5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7642,7 +7330,6 @@ L_0894EF80: goto L_0894EF88; L_0894EF88: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7662,7 +7349,6 @@ L_0894EF98: L_0894EFA4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3257))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0894EFD8; } @@ -7671,7 +7357,6 @@ L_0894EFA4: L_0894EFB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3172))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894EFD8; } @@ -7710,7 +7395,6 @@ L_0894EFE0: L_0894EFEC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894EFFC; } @@ -7721,7 +7405,6 @@ L_0894EFF8: goto L_0894EFFC; L_0894EFFC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0894F00C; } @@ -7746,7 +7429,17 @@ L_0894F00C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894F028: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), aot_gpr_16); @@ -7798,7 +7491,6 @@ L_0894F0B0: L_0894F0B8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(ctx.fpr[26])); if (branch_taken) { @@ -7808,7 +7500,6 @@ L_0894F0B8: } L_0894F0CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); goto L_0894F0F4; @@ -7840,9 +7531,7 @@ L_0894F0F4: goto L_0894F114; L_0894F114: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894F12C; } @@ -7850,7 +7539,6 @@ L_0894F114: } L_0894F124: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0894F1F4; } @@ -7861,7 +7549,6 @@ L_0894F12C: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894F190; } @@ -7929,9 +7616,7 @@ L_0894F1AC: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[14] = ctx.fpr[30] - ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894F1E8; } @@ -7952,7 +7637,6 @@ L_0894F1E8: goto L_0894F1EC; L_0894F1EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F200; } @@ -7989,7 +7673,6 @@ L_0894F220: goto L_0894F228; L_0894F228: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F3C8; } @@ -7999,7 +7682,6 @@ L_0894F230: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F3B4; } @@ -8011,7 +7693,6 @@ L_0894F240: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8021,7 +7702,6 @@ L_0894F258: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8042,9 +7722,7 @@ L_0894F278: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8080,7 +7758,6 @@ L_0894F2C0: AOT_REGCACHE_SYNC_OUT(); return; L_0894F2D4: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8104,9 +7781,7 @@ L_0894F2DC: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8161,7 +7836,6 @@ L_0894F30C: AOT_REGCACHE_SYNC_OUT(); return; L_0894F3AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8171,7 +7845,6 @@ L_0894F3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F3C8; } @@ -8183,7 +7856,6 @@ L_0894F3C4: L_0894F3C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0894F414; } @@ -8217,7 +7889,6 @@ L_0894F3E8: } L_0894F40C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F440; } @@ -8230,7 +7901,6 @@ L_0894F414: AOT_REGCACHE_SYNC_OUT(); return; L_0894F41C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F53C; } @@ -8244,7 +7914,6 @@ L_0894F424: AOT_REGCACHE_SYNC_OUT(); return; L_0894F430: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F440; } @@ -8283,7 +7952,6 @@ L_0894F44C: { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); goto L_0894F484; @@ -8299,7 +7967,6 @@ L_0894F484: aot_fpr_12 = ctx.fpr[15] - ctx.fpr[14]; { const float fs = aot_fpr_12; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); goto L_0894F4B4; @@ -8315,7 +7982,6 @@ L_0894F4B4: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_0894F4E4; @@ -8330,7 +7996,6 @@ L_0894F4E4: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; { const float fs = aot_fpr_12; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_0894F510; @@ -8347,7 +8012,6 @@ L_0894F520: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894F53C; } @@ -8381,7 +8045,17 @@ L_0894F53C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894F578: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -8399,7 +8073,6 @@ L_0894F598: AOT_REGCACHE_SYNC_OUT(); return; L_0894F5A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F5EC; } @@ -8409,7 +8082,6 @@ L_0894F5A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894F5EC; } @@ -8419,7 +8091,6 @@ L_0894F5B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894F5EC; } @@ -8437,7 +8108,6 @@ L_0894F5C8: AOT_REGCACHE_SYNC_OUT(); return; L_0894F5E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F638; } @@ -8447,7 +8117,6 @@ L_0894F5EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F638; } @@ -8460,7 +8129,6 @@ L_0894F5FC: AOT_REGCACHE_SYNC_OUT(); return; L_0894F604: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894F61C; } @@ -8470,7 +8138,6 @@ L_0894F60C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894F638; } @@ -8491,7 +8158,6 @@ L_0894F628: L_0894F638: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F670; } @@ -8504,7 +8170,6 @@ L_0894F644: AOT_REGCACHE_SYNC_OUT(); return; L_0894F64C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894F958; } @@ -8523,7 +8188,6 @@ L_0894F65C: AOT_REGCACHE_SYNC_OUT(); return; L_0894F668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F958; } @@ -8551,7 +8215,6 @@ L_0894F68C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F6FC; } @@ -8569,7 +8232,6 @@ L_0894F6A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894F6F4; } @@ -8593,7 +8255,6 @@ L_0894F6C4: } L_0894F6EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F71C; } @@ -8601,7 +8262,6 @@ L_0894F6EC: } L_0894F6F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F958; } @@ -8620,7 +8280,6 @@ L_0894F704: AOT_REGCACHE_SYNC_OUT(); return; L_0894F710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F958; } @@ -8636,7 +8295,6 @@ L_0894F71C: AOT_REGCACHE_SYNC_OUT(); return; L_0894F724: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F7E8; } @@ -8653,7 +8311,6 @@ L_0894F72C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F7E8; } @@ -8671,7 +8328,6 @@ L_0894F758: AOT_REGCACHE_SYNC_OUT(); return; L_0894F774: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F7E8; } @@ -8721,7 +8377,6 @@ L_0894F7D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(3252), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F934; } @@ -8749,7 +8404,6 @@ L_0894F800: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_0894F848; @@ -8783,7 +8437,6 @@ L_0894F864: aot_gpr_5 = (aot_gpr_6 + ctx.gpr[18]); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F8C4; } @@ -8809,7 +8462,6 @@ L_0894F880: AOT_REGCACHE_SYNC_OUT(); return; L_0894F8BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894F934; } @@ -8822,7 +8474,6 @@ L_0894F8C4: AOT_REGCACHE_SYNC_OUT(); return; L_0894F8CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F934; } @@ -8839,7 +8490,6 @@ L_0894F8D4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894F934; } @@ -8857,7 +8507,6 @@ L_0894F900: AOT_REGCACHE_SYNC_OUT(); return; L_0894F91C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894F934; } @@ -8895,7 +8544,17 @@ L_0894F958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894F970: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -8913,7 +8572,6 @@ L_0894F98C: AOT_REGCACHE_SYNC_OUT(); return; L_0894F994: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0894F9E0; } @@ -8923,7 +8581,6 @@ L_0894F99C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894F9E0; } @@ -8933,7 +8590,6 @@ L_0894F9AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894F9E0; } @@ -8951,7 +8607,6 @@ L_0894F9BC: AOT_REGCACHE_SYNC_OUT(); return; L_0894F9D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894FA2C; } @@ -8961,7 +8616,6 @@ L_0894F9E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894FA2C; } @@ -8974,7 +8628,6 @@ L_0894F9F0: AOT_REGCACHE_SYNC_OUT(); return; L_0894F9F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894FA10; } @@ -8984,7 +8637,6 @@ L_0894FA00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894FA2C; } @@ -9051,7 +8703,6 @@ L_0894FA70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894FAAC; } @@ -9078,7 +8729,6 @@ L_0894FAA4: } L_0894FAAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894FDC8; } @@ -9108,7 +8758,6 @@ L_0894FADC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894FBD4; } @@ -9131,7 +8780,6 @@ L_0894FB1C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894FBD4; } @@ -9155,7 +8803,6 @@ L_0894FB4C: AOT_REGCACHE_SYNC_OUT(); return; L_0894FB54: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0894FBD4; } @@ -9193,7 +8840,6 @@ L_0894FB8C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0894FBD4; } @@ -9203,7 +8849,6 @@ L_0894FBB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894FBD4; } @@ -9213,7 +8858,6 @@ L_0894FBC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0894FC18; } @@ -9292,7 +8936,6 @@ L_0894FC74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3252), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0894FDA4; } @@ -9330,7 +8973,6 @@ L_0894FCAC: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); if (branch_taken) { @@ -9365,7 +9007,6 @@ L_0894FD2C: aot_gpr_4 = (aot_gpr_6 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894FDA4; } @@ -9381,7 +9022,6 @@ L_0894FD40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0894FDA4; } @@ -9429,7 +9069,17 @@ L_0894FDC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0894FDDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-864)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(820), aot_gpr_16); @@ -9507,7 +9157,6 @@ L_0894FEB0: goto L_0894FEB4; L_0894FEB4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0894FF84; } @@ -9577,9 +9226,7 @@ L_0894FEBC: aot_gpr_6 = (aot_gpr_6 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894FF50; } @@ -9589,9 +9236,7 @@ L_0894FF20: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(516))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894FF50; } @@ -9601,9 +9246,7 @@ L_0894FF38: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0894FF74; } @@ -9611,7 +9254,6 @@ L_0894FF38: } L_0894FF50: aot_gpr_31 = (0x0894FF58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894FF58u) goto L_0894FF58; AOT_REGCACHE_SYNC_OUT(); return; L_0894FF58: @@ -9634,7 +9276,6 @@ L_0894FF74: L_0894FF84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0083_entry, 83u, 2u, 0x0895000Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9644,7 +9285,6 @@ L_0894FF90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0083_entry, 83u, 2u, 0x0895000Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9709,7 +9349,6 @@ L_0894FFA0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0894FFE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0894FFE8u) goto L_0894FFE8; AOT_REGCACHE_SYNC_OUT(); return; L_0894FFE8: diff --git a/profiles/vcs/generated/generated_unit_0083.cpp b/profiles/vcs/generated/generated_unit_0083.cpp index df6b499..34749a9 100644 --- a/profiles/vcs/generated/generated_unit_0083.cpp +++ b/profiles/vcs/generated/generated_unit_0083.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0083[4086] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, - 0, 13, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 27, 0, 0, 0, 0, 28, 0, 0, 29, - 0, 30, 0, 31, 32, 33, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, - 0, 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, - 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 0, 52, 0, 0, 53, 0, 54, 0, 55, 56, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, - 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 65, 0, 66, 67, 0, 0, 68, 0, 0, 69, 0, 70, 71, 0, 0, - 72, 0, 0, 73, 0, 74, 75, 0, 0, 76, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 83, 0, 84, 85, 86, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 90, 91, 0, 0, 92, 0, 0, 93, 0, 94, 0, 95, - 0, 96, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 102, 0, 103, 0, 104, 0, 0, 0, - 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 116, 0, - 117, 0, 118, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 121, 0, 122, 0, 123, 124, 125, 0, 126, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, - 0, 0, 133, 0, 0, 134, 0, 135, 0, 136, 0, 0, 137, 0, 0, 138, 139, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 145, 0, 146, 0, 147, 0, 0, 148, 149, 0, 0, 0, 150, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 153, - 0, 0, 0, 154, 0, 0, 155, 0, 0, 156, 0, 157, 0, 158, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 165, 0, 166, 0, - 0, 167, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 172, - 0, 173, 0, 174, 0, 175, 0, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, - 0, 0, 0, 180, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 186, 0, 0, 187, 0, 0, 188, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 192, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 0, - 196, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 198, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, - 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 204, 0, 205, 0, 0, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 209, 0, 210, 0, 211, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, - 0, 216, 0, 217, 0, 0, 0, 218, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, - 0, 222, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, 229, 230, 0, 0, 231, 0, 0, 0, 232, - 0, 0, 233, 234, 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 241, 0, 242, 0, 243, 0, - 244, 0, 245, 0, 0, 246, 0, 247, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 251, 0, - 252, 0, 253, 0, 0, 0, 0, 254, 0, 0, 255, 0, 0, 256, 0, 257, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 261, 0, 0, - 262, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 270, 0, 271, 0, 272, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 277, 0, - 0, 278, 0, 279, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, - 0, 284, 0, 285, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, - 293, 0, 294, 0, 295, 0, 0, 296, 0, 297, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 0, 303, 0, 0, - 0, 0, 0, 304, 305, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 0, 309, 0, 310, 0, 0, 311, 0, 312, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 0, 318, 0, 0, 319, 0, 320, 0, 0, 321, 0, 322, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, 0, 0, 328, - 0, 329, 0, 330, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 334, - 0, 335, 0, 336, 0, 337, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, - 0, 341, 0, 342, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, - 347, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, - 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 359, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, - 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, - 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, - 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 379, 0, 380, 0, 0, 0, 0, 0, - 381, 0, 0, 382, 0, 0, 383, 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 388, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 393, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, - 400, 0, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 404, 0, 405, 0, 0, 0, 406, 407, 0, 408, 0, 0, 409, 0, 0, 0, 410, 0, - 0, 0, 411, 0, 0, 412, 0, 413, 0, 0, 0, 414, 415, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 0, 419, 0, 0, 420, - 0, 0, 0, 421, 0, 0, 0, 422, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 428, 0, 429, 0, 0, - 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, - 0, 0, 0, 435, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, - 0, 0, 0, 441, 0, 0, 0, 442, 0, 443, 0, 444, 445, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 450, 0, - 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, - 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 462, - 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 465, 0, 466, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 472, 0, 473, 0, 0, 0, 474, 475, 0, 476, 0, 0, 0, 0, 0, 0, 477, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 485, 0, 486, - 0, 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 0, 0, 0, 492, 0, 493, 0, 494, 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 497, 0, - 498, 0, 0, 0, 0, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 0, 0, 0, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 0, 0, - 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, 517, 0, 0, 0, 0, 0, 518, 0, 519, - 0, 520, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 527, 528, 0, 0, - 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 531, 0, 532, 0, 533, 0, 0, 0, 534, 0, 535, 0, 536, 0, 0, 537, 0, - 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 542, 0, 0, 0, 0, 543, 0, 544, 545, 0, 0, 546, 0, 0, - 547, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 553, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, - 559, 0, 0, 560, 0, 0, 0, 561, 0, 562, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, 566, 0, 0, 567, 0, 568, 0, 569, 0, 570, - 0, 571, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 575, 0, 576, 0, 577, 0, 0, 578, 0, 0, 0, 0, 579, 0, 0, 580, - 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 584, 0, 0, 0, 0, 585, - 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, - 0, 592, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 595, 0, 596, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 0, 599, 0, 600, 601, - 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 604, 0, 605, 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 0, - 609, 0, 0, 0, 610, 0, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 0, 616, 0, 0, 617, 0, - 618, 0, 0, 0, 619, 0, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 625, 0, 626, 0, 627, 0, 0, 628, 0, - 629, 0, 0, 0, 630, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 634, 0, 0, - 0, 0, 0, 0, 0, 0, 635, 0, 636, 637, 0, 638, 0, 0, 639, 0, 640, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 642, 0, 643, - 644, 0, 645, 0, 0, 646, 0, 647, 0, 0, 0, 0, 0, 648, 0, 649, 650, 0, 651, 0, 0, 652, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 655, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 658, 0, 659, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, - 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 669, 0, 0, - 0, 670, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 677, 0, 0, 0, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 680, 0, 0, 0, 681, - 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 685, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 690, 0, 691, 0, 0, 0, 0, 0, - 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 0, 694, 0, 695, 0, 696, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 700, 0, 701, - 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, - 0, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 0, 714, 0, 715, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 720, 0, 0, 721, 0, 0, 0, 722, 0, 0, 0, 0, 723, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 726, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 0, 731, 732, 0, 733, 734, - 0, 0, 735, 0, 0, 0, 736, 0, 0, 737, 0, 0, 738, 0, 0, 0, 739, 0, 0, 740, 0, 0, 0, 741, 0, 0, 742, 0, 0, 743, 0, 744, - 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 746, 0, 747, 748, 0, 749, 0, 750, 0, 0, 751, 0, 752, 0, 753, 0, 754, 0, 755, 0, - 756, 0, 0, 757, 0, 758, 0, 0, 759, 0, 760, 0, 761, 0, 0, 762, 0, 763, 764, 0, 0, 765, 0, 766, 0, 767, 0, 768, 0, 0, 0, 0, - 769, 0, 0, 0, 0, 770, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 774, 0, - 0, 0, 775, 776, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 780, 0, 0, 0, 0, 0, 781, 0, 0, 0, 782, - 0, 783, 0, 0, 784, 0, 0, 785, 0, 786, 787, 788, 0, 0, 789, 0, 0, 790, 0, 791, 792, 0, 793, 0, 794, 0, 0, 795, 0, 796, 797, 0, - 798, 0, 0, 0, 0, 0, 799, 0, 0, 0, 800, 0, 0, 801, 0, 0, 802, 0, 803, 0, 0, 804, 0, 0, 0, 805, 0, 0, 806, 0, 0, 807, - 0, 808, 0, 0, 809, 0, 0, 0, 810, 0, 811, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 814, - 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 816, 0, 817, 0, 0, 818, 0, 0, 0, 819, 0, 0, 0, 0, 0, 820, 0, 821, 0, 0, 822, 0, - 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 824, 0, 825, 0, 0, 0, - 0, 0, 0, 826, 827, 0, 0, 0, 828, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 833, 0, 0, 834, 0, 835, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 837, 0, - 0, 0, 0, 838, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, 0, 0, 0, 842, 0, 0, 0, 843, 0, 844, 0, 0, 0, 845, 0, 0, - 846, 0, 0, 0, 0, 847, 0, 0, 848, 0, 0, 849, 0, 850, 0, 0, 851, 0, 0, 0, 0, 852, 0, 0, 0, 853, 0, 854, 855, 0, 856, 0, - 0, 0, 857, 0, 0, 858, 0, 0, 0, 0, 859, 0, 0, 0, 860, 0, 861, 862, 0, 0, 0, 863, 0, 864, 0, 865, 0, 0, 866, 0, 0, 0, - 867, 0, 868, 869, 0, 870, 871, 0, 872, 0, 873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 874, 0, 0, 0, 0, 875, 0, 0, - 0, 0, 0, 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 0, - 0, 0, 879, 0, 880, 0, 0, 881, 0, 0, 0, 0, 0, 882, 0, 883, 0, 0, 0, 884, 885, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 889, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0083[64] = { + 0x8012080004000009ull, 0x8000000000000100ull, 0x2200000000020000ull, 0x0004000108402222ull, + 0x90A0800008011001ull, 0x28000818443088BAull, 0x0108000000010011ull, 0x349A48245002EA44ull, + 0xEA09000100005269ull, 0x1514088AA9342200ull, 0x502EA44541489555ull, 0x200992A411001400ull, + 0x900A32A008020080ull, 0x544010040100AA48ull, 0x2100442AA0080206ull, 0x1152900049211288ull, + 0x0402952040101821ull, 0x0810048A80202950ull, 0x5524414C89911522ull, 0x2882A485410012A5ull, + 0x4A0088AA020002ABull, 0x2429014A808000AAull, 0x14A4105822A05295ull, 0x8A9214A500410500ull, + 0x8080012AA020004Aull, 0x010000490100484Aull, 0x0854010100405401ull, 0x0222024420200810ull, + 0x0510041040048800ull, 0x4041080004290549ull, 0x44B1448904445100ull, 0x29111488908898A4ull, + 0x0411000000000042ull, 0x48445A8892004028ull, 0xA802082010088890ull, 0x8162A80800406A20ull, + 0x540542AAA82AA200ull, 0xA0AA02AA15505541ull, 0x4A8A824032205206ull, 0x8891000926851408ull, + 0xAA520A89500A1000ull, 0x8520002090951122ull, 0xD015608220108842ull, 0x4911111111114880ull, + 0x204002914AA91111ull, 0x1025A0A5A0814B40ull, 0x0000140081000000ull, 0x2081082030108105ull, + 0x8888240020882082ull, 0x0542000200088888ull, 0xA10000000014A848ull, 0x008A955411202840ull, + 0x0221080021128040ull, 0xA4891244D9040400ull, 0x0AA69529554AD020ull, 0x8824042C50001421ull, + 0x92252441695A4E92ull, 0x4A08941080202512ull, 0x0000091814000004ull, 0x0020000000001000ull, + 0x2288488841052400ull, 0x12A344245A212921ull, 0x080800402100056Dull, 0x002200200098A094ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0083[64] = { + 1u, 8u, 10u, 13u, 21u, 30u, 46u, 51u, 72u, 87u, 105u, 129u, 142u, 154u, 167u, 180u, + 196u, 209u, 222u, 244u, 262u, 278u, 293u, 313u, 329u, 341u, 351u, 362u, 372u, 381u, 394u, 411u, + 430u, 435u, 451u, 463u, 478u, 498u, 520u, 538u, 554u, 571u, 586u, 602u, 618u, 635u, 654u, 658u, + 670u, 682u, 692u, 702u, 718u, 728u, 745u, 769u, 783u, 808u, 823u, 830u, 832u, 846u, 867u, 879u, }; void recomp_unit_0083_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0083_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08950000u; - entry_id = (entry_delta < 16344u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0083[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16344u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0083[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0083[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08950000; @@ -1289,9 +1196,7 @@ L_08950120: aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(aot_fpr_22)) && ctx.fpr[28] == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950358; } @@ -1418,7 +1323,6 @@ L_08950244: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[28] = aot_fpr_12 / ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[30] = (aot_gpr_29 + static_cast(592)); if (branch_taken) { @@ -1428,9 +1332,7 @@ L_08950244: } L_089502E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950358; } @@ -1438,9 +1340,7 @@ L_089502E4: } L_089502F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950358; } @@ -1448,9 +1348,7 @@ L_089502F4: } L_08950304: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950334; } @@ -1458,9 +1356,7 @@ L_08950304: } L_08950314: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950358; } @@ -1468,9 +1364,7 @@ L_08950314: } L_08950324: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950358; } @@ -1503,9 +1397,7 @@ L_08950334: L_08950358: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(788))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089505AC; } @@ -1785,7 +1677,6 @@ L_08950514: goto L_0895051C; L_0895051C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49884u << 16u); if (branch_taken) { @@ -1795,9 +1686,7 @@ L_0895051C: } L_0895052C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089505AC; } @@ -1806,9 +1695,7 @@ L_0895052C: L_0895053C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17872))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089505AC; } @@ -1820,7 +1707,6 @@ L_08950550: L_08950554: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3304))); goto L_08950590; @@ -1828,9 +1714,7 @@ L_08950554: goto L_08950568; L_08950568: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089505AC; } @@ -1839,9 +1723,7 @@ L_08950568: L_08950578: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17872))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089505AC; } @@ -1880,7 +1762,6 @@ L_089505AC: AOT_REGCACHE_SYNC_OUT(); return; L_089505EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08950708; } @@ -1889,7 +1770,6 @@ L_089505EC: L_089505F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(464))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08950708; } @@ -1993,7 +1873,6 @@ L_08950640: aot_gpr_4 = (16948u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17144u << 16u); if (branch_taken) { @@ -2004,9 +1883,7 @@ L_08950640: L_089506CC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08950708; } @@ -2063,7 +1940,6 @@ L_08950738: goto L_0895073C; L_0895073C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950778; } @@ -2207,7 +2083,6 @@ L_08950814: L_08950818: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950838; } @@ -2216,7 +2091,6 @@ L_08950818: L_08950824: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950838; } @@ -2252,7 +2126,17 @@ L_08950838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08950880: aot_gpr_29 = (aot_gpr_29 + static_cast(-560)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(508), aot_gpr_16); @@ -2338,7 +2222,6 @@ L_08950934: goto L_08950948; L_08950948: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0895097C; } @@ -2350,7 +2233,6 @@ L_08950950: L_08950954: aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895097C; } @@ -2364,7 +2246,6 @@ L_08950960: AOT_REGCACHE_SYNC_OUT(); return; L_0895096C: aot_gpr_31 = (0x08950974u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 606u, 0x08A17A04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08950974u) goto L_08950974; AOT_REGCACHE_SYNC_OUT(); return; L_08950974: @@ -2379,7 +2260,6 @@ L_0895097C: AOT_REGCACHE_SYNC_OUT(); return; L_08950984: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089509D0; } @@ -2389,7 +2269,6 @@ L_0895098C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089509D0; } @@ -2399,7 +2278,6 @@ L_0895099C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089509D0; } @@ -2417,7 +2295,6 @@ L_089509AC: AOT_REGCACHE_SYNC_OUT(); return; L_089509C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08950A4C; } @@ -2427,7 +2304,6 @@ L_089509D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950A4C; } @@ -2440,7 +2316,6 @@ L_089509E0: AOT_REGCACHE_SYNC_OUT(); return; L_089509E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08950A30; } @@ -2450,7 +2325,6 @@ L_089509F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950A30; } @@ -2463,7 +2337,6 @@ L_08950A00: AOT_REGCACHE_SYNC_OUT(); return; L_08950A08: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08950A30; } @@ -2476,7 +2349,6 @@ L_08950A10: AOT_REGCACHE_SYNC_OUT(); return; L_08950A18: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08950A30; } @@ -2489,7 +2361,6 @@ L_08950A20: AOT_REGCACHE_SYNC_OUT(); return; L_08950A28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08950A4C; } @@ -2525,7 +2396,6 @@ L_08950A60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950AD4; } @@ -2538,7 +2408,6 @@ L_08950A78: AOT_REGCACHE_SYNC_OUT(); return; L_08950A80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08950AD4; } @@ -2548,7 +2417,6 @@ L_08950A88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08950AD4; } @@ -2613,7 +2481,6 @@ L_08950AD4: } L_08950AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08950B70; } @@ -2636,7 +2503,6 @@ L_08950AF8: AOT_REGCACHE_SYNC_OUT(); return; L_08950B28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -2652,7 +2518,6 @@ L_08950B30: ctx.fpr[14] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08950B60; @@ -2672,7 +2537,6 @@ L_08950B70: aot_gpr_4 = (17146u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08950B88; @@ -2690,7 +2554,6 @@ L_08950B94: AOT_REGCACHE_SYNC_OUT(); return; L_08950B9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08950BB0; } @@ -2699,7 +2562,6 @@ L_08950B9C: L_08950BA4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08950BC0; } @@ -2708,7 +2570,6 @@ L_08950BA4: L_08950BB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7580))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950BC0; } @@ -2720,7 +2581,6 @@ L_08950BBC: L_08950BC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1712))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08950DD8; } @@ -2736,7 +2596,6 @@ L_08950BCC: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08950C94; } @@ -2752,7 +2611,6 @@ L_08950BF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950C94; } @@ -2768,7 +2626,6 @@ L_08950C1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950C94; } @@ -2784,7 +2641,6 @@ L_08950C44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950C94; } @@ -2800,7 +2656,6 @@ L_08950C6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08950DD8; } @@ -2822,7 +2677,6 @@ L_08950C9C: L_08950CA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950CC4; } @@ -2835,7 +2689,6 @@ L_08950CB4: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1957))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08950D2C; } @@ -2861,7 +2714,6 @@ L_08950CCC: L_08950CF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950D18; } @@ -2891,7 +2743,6 @@ L_08950D18: AOT_REGCACHE_SYNC_OUT(); return; L_08950D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -2899,12 +2750,10 @@ L_08950D24: } L_08950D2C: aot_gpr_31 = (0x08950D34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 274u, 0x08A1D7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08950D34u) goto L_08950D34; AOT_REGCACHE_SYNC_OUT(); return; L_08950D34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08950DD8; } @@ -2919,7 +2768,6 @@ L_08950D3C: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08950DF0; } @@ -2935,7 +2783,6 @@ L_08950D60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950DF0; } @@ -2951,7 +2798,6 @@ L_08950D88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950DF0; } @@ -2967,7 +2813,6 @@ L_08950DB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950DF0; } @@ -2991,7 +2836,6 @@ L_08950DE8: } L_08950DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -3000,7 +2844,6 @@ L_08950DF0: L_08950DF8: aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08950E74; } @@ -3016,7 +2859,6 @@ L_08950E08: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950E74; } @@ -3032,7 +2874,6 @@ L_08950E24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08950E74; } @@ -3048,7 +2889,6 @@ L_08950E4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08950E8C; } @@ -3067,7 +2907,6 @@ L_08950E7C: goto L_08950E84; L_08950E84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951134; } @@ -3075,7 +2914,6 @@ L_08950E84: } L_08950E8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -3086,7 +2924,6 @@ L_08950E94: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951134; } @@ -3096,7 +2933,6 @@ L_08950EA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08951134; } @@ -3123,7 +2959,6 @@ L_08950EE0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(1976)))))); aot_gpr_4 = (0u | 47u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08951134; } @@ -3135,7 +2970,6 @@ L_08950EF4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08950F30; } @@ -3145,7 +2979,6 @@ L_08950F0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08950F24; } @@ -3165,7 +2998,6 @@ L_08950F30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3256)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1929)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895119C; } @@ -3185,7 +3017,6 @@ L_08950F40: L_08950F54: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08950FC4; } @@ -3194,7 +3025,6 @@ L_08950F54: L_08950F60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08950F78; } @@ -3233,7 +3063,6 @@ L_08950FB0: AOT_REGCACHE_SYNC_OUT(); return; L_08950FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3242,7 +3071,6 @@ L_08950FBC: L_08950FC4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08951014; } @@ -3255,7 +3083,6 @@ L_08950FD0: AOT_REGCACHE_SYNC_OUT(); return; L_08950FD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08950FF0; } @@ -3309,7 +3136,6 @@ L_08951030: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3325,7 +3151,6 @@ L_08951050: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0895119C; } @@ -3338,7 +3163,6 @@ L_08951078: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3358,7 +3182,6 @@ L_089510A0: AOT_REGCACHE_SYNC_OUT(); return; L_089510A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3372,7 +3195,6 @@ L_089510B0: AOT_REGCACHE_SYNC_OUT(); return; L_089510BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3387,7 +3209,6 @@ L_089510C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08951110; } @@ -3403,7 +3224,6 @@ L_089510E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08951120; } @@ -3416,7 +3236,6 @@ L_08951110: AOT_REGCACHE_SYNC_OUT(); return; L_08951118: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3430,7 +3249,6 @@ L_08951120: AOT_REGCACHE_SYNC_OUT(); return; L_0895112C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3444,7 +3262,6 @@ L_08951134: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895119C; } @@ -3473,7 +3290,6 @@ L_0895117C: AOT_REGCACHE_SYNC_OUT(); return; L_08951184: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895119C; } @@ -3489,7 +3305,6 @@ L_0895118C: L_0895119C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951220; } @@ -3505,7 +3320,6 @@ L_089511A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08951220; } @@ -3518,7 +3332,6 @@ L_089511D0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08951220; } @@ -3528,9 +3341,7 @@ L_089511EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08951220; } @@ -3540,7 +3351,6 @@ L_08951204: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951220; } @@ -3575,7 +3385,6 @@ L_08951240: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951CE8; } @@ -3584,7 +3393,6 @@ L_08951240: L_08951250: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951CE8; } @@ -3596,7 +3404,6 @@ L_0895125C: L_08951260: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1929)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08951CE8; } @@ -3615,7 +3422,6 @@ L_0895126C: L_0895127C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951CE8; } @@ -3632,7 +3438,6 @@ L_0895128C: AOT_REGCACHE_SYNC_OUT(); return; L_08951298: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08951CE8; } @@ -3644,7 +3449,6 @@ L_089512A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951CE8; } @@ -3654,7 +3458,6 @@ L_089512B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089512D4; } @@ -3663,7 +3466,6 @@ L_089512B8: L_089512C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951300; } @@ -3672,7 +3474,6 @@ L_089512C8: L_089512D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3260))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089512F8; } @@ -3691,7 +3492,6 @@ L_089512E8: goto L_089512F0; L_089512F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951388; } @@ -3699,7 +3499,6 @@ L_089512F0: } L_089512F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -3707,7 +3506,6 @@ L_089512F8: } L_08951300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -3716,7 +3514,6 @@ L_08951300: L_08951308: aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951388; } @@ -3729,7 +3526,6 @@ L_08951314: AOT_REGCACHE_SYNC_OUT(); return; L_0895131C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08951388; } @@ -3738,7 +3534,6 @@ L_0895131C: L_08951324: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951388; } @@ -3756,7 +3551,6 @@ L_08951330: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08951388; } @@ -3768,7 +3562,6 @@ L_08951360: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951388; } @@ -3820,7 +3613,6 @@ L_089513B4: goto L_089513BC; L_089513BC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089515D4; } @@ -3832,7 +3624,6 @@ L_089513C4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089515D4; } @@ -3857,7 +3648,6 @@ L_089513EC: L_089513F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895140C; } @@ -3868,7 +3658,6 @@ L_08951400: goto L_08951404; L_08951404: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -3881,7 +3670,6 @@ L_0895140C: AOT_REGCACHE_SYNC_OUT(); return; L_08951414: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08951494; } @@ -3919,7 +3707,6 @@ L_08951464: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0895148C; } @@ -3927,7 +3714,6 @@ L_08951464: } L_08951484: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08951494; } @@ -3940,7 +3726,6 @@ L_0895148C: AOT_REGCACHE_SYNC_OUT(); return; L_08951494: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -3950,7 +3735,6 @@ L_0895149C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -3960,7 +3744,6 @@ L_089514AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -3981,7 +3764,6 @@ L_089514BC: AOT_REGCACHE_SYNC_OUT(); return; L_089514E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -3990,7 +3772,6 @@ L_089514E4: L_089514EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7580))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951504; } @@ -3999,7 +3780,6 @@ L_089514EC: L_089514F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(1957))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -4012,7 +3792,6 @@ L_08951504: AOT_REGCACHE_SYNC_OUT(); return; L_0895150C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895158C; } @@ -4050,7 +3829,6 @@ L_0895155C: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08951584; } @@ -4058,7 +3836,6 @@ L_0895155C: } L_0895157C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895158C; } @@ -4072,7 +3849,6 @@ L_08951584: L_0895158C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089515CC; } @@ -4080,7 +3856,6 @@ L_0895158C: } L_08951598: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089515CC; } @@ -4094,7 +3869,6 @@ L_089515A0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089515CC; } @@ -4107,7 +3881,6 @@ L_089515C0: goto L_089515CC; L_089515CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951D54; } @@ -4146,7 +3919,6 @@ L_08951600: goto L_08951608; L_08951608: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951624; } @@ -4161,7 +3933,6 @@ L_08951610: goto L_0895161C; L_0895161C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089516C8; } @@ -4175,7 +3946,6 @@ L_08951624: AOT_REGCACHE_SYNC_OUT(); return; L_08951630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -4188,7 +3958,6 @@ L_08951638: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089516C8; } @@ -4209,7 +3978,6 @@ L_08951664: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089516DC; } @@ -4221,7 +3989,6 @@ L_08951674: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089516DC; } @@ -4232,7 +3999,6 @@ L_0895168C: goto L_08951690; L_08951690: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089516C8; } @@ -4244,7 +4010,6 @@ L_08951698: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089516DC; } @@ -4256,7 +4021,6 @@ L_089516B0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089516DC; } @@ -4271,7 +4035,6 @@ L_089516C8: goto L_089516D4; L_089516D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951728; } @@ -4285,7 +4048,6 @@ L_089516DC: AOT_REGCACHE_SYNC_OUT(); return; L_089516E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -4319,7 +4081,6 @@ L_089516F0: AOT_REGCACHE_SYNC_OUT(); return; L_08951720: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08951788; } @@ -4365,7 +4126,6 @@ L_08951758: } L_08951780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895190C; } @@ -4379,7 +4139,6 @@ L_08951788: AOT_REGCACHE_SYNC_OUT(); return; L_08951794: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952358; } @@ -4388,7 +4147,6 @@ L_08951794: L_0895179C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089517B0; } @@ -4432,7 +4190,6 @@ L_089517DC: goto L_089517E4; L_089517E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895190C; } @@ -4442,7 +4199,6 @@ L_089517EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895190C; } @@ -4455,7 +4211,6 @@ L_089517FC: AOT_REGCACHE_SYNC_OUT(); return; L_08951804: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08951884; } @@ -4493,7 +4248,6 @@ L_08951854: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0895187C; } @@ -4501,7 +4255,6 @@ L_08951854: } L_08951874: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08951884; } @@ -4519,7 +4272,6 @@ L_08951884: AOT_REGCACHE_SYNC_OUT(); return; L_0895188C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895190C; } @@ -4557,7 +4309,6 @@ L_089518DC: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (ctx.gpr[2] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08951904; } @@ -4565,7 +4316,6 @@ L_089518DC: } L_089518FC: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895190C; } @@ -4579,7 +4329,6 @@ L_08951904: L_0895190C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7580))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951CE0; } @@ -4596,7 +4345,6 @@ L_08951918: L_0895192C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951C3C; } @@ -4663,7 +4411,6 @@ L_08951998: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[18] = std::bit_cast(ctx.gpr[7]); if (branch_taken) { @@ -4715,7 +4462,6 @@ L_08951A38: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3284), std::bit_cast(ctx.fpr[16])); ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[18])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08951A58; @@ -4729,7 +4475,6 @@ L_08951A58: aot_fpr_13 = aot_fpr_13 / ctx.fpr[14]; { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(3288))); if (branch_taken) { @@ -4802,7 +4547,6 @@ L_08951B10: ctx.fpr[17] = aot_fpr_12 / ctx.fpr[17]; aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[18])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_08951B2C; @@ -4817,7 +4561,6 @@ L_08951B2C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(3216), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951C3C; } @@ -4831,7 +4574,6 @@ L_08951B54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951C3C; } @@ -4953,7 +4695,6 @@ L_08951C2C: L_08951C3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951CE0; } @@ -4971,7 +4712,6 @@ L_08951C48: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08951CE0; } @@ -5009,7 +4749,6 @@ L_08951CA8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951CE0; } @@ -5024,7 +4763,6 @@ L_08951CD0: AOT_REGCACHE_SYNC_OUT(); return; L_08951CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951D54; } @@ -5064,7 +4802,6 @@ L_08951D18: goto L_08951D20; L_08951D20: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951D54; } @@ -5076,7 +4813,6 @@ L_08951D28: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08951D54; } @@ -5097,7 +4833,6 @@ L_08951D54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08952338; } @@ -5149,7 +4884,6 @@ L_08951DC0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952004; } @@ -5163,7 +4897,6 @@ L_08951DD8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951FF4; } @@ -5204,7 +4937,6 @@ L_08951E20: AOT_REGCACHE_SYNC_OUT(); return; L_08951E30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08951FB0; } @@ -5237,7 +4969,6 @@ L_08951E68: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951F70; } @@ -5292,7 +5023,6 @@ L_08951ED0: goto L_08951ED4; L_08951ED4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08951F70; } @@ -5379,7 +5109,6 @@ L_08951F5C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951FA8; } @@ -5423,7 +5152,6 @@ L_08951F9C: goto L_08951FA8; L_08951FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08951FEC; } @@ -5468,7 +5196,6 @@ L_08951FE0: goto L_08951FEC; L_08951FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952004; } @@ -5507,7 +5234,6 @@ L_08952004: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089520C0; } @@ -5625,7 +5351,6 @@ L_089520C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08952138; } @@ -5668,7 +5393,6 @@ L_089520E8: AOT_REGCACHE_SYNC_OUT(); return; L_0895210C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952138; } @@ -5719,7 +5443,6 @@ L_08952138: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089521F8; } @@ -5728,7 +5451,6 @@ L_08952138: L_08952164: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089521F8; } @@ -5767,7 +5489,6 @@ L_0895219C: goto L_089521A4; L_089521A4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089521EC; } @@ -5800,7 +5521,6 @@ L_089521D8: aot_gpr_4 = (aot_gpr_4 + static_cast(180)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089521F8; } @@ -5818,7 +5538,6 @@ L_089521F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895223C; } @@ -5827,7 +5546,6 @@ L_089521F8: L_08952210: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08952338; } @@ -5837,7 +5555,6 @@ L_0895221C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0895223C; } @@ -5847,7 +5564,6 @@ L_0895222C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08952338; } @@ -5902,7 +5618,6 @@ L_0895224C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952294; } @@ -5981,7 +5696,6 @@ L_089522C4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08952338; } @@ -5994,7 +5708,6 @@ L_089522EC: AOT_REGCACHE_SYNC_OUT(); return; L_089522F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08952338; } @@ -6004,7 +5717,6 @@ L_089522FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(276))); if (branch_taken) { @@ -6014,9 +5726,7 @@ L_089522FC: } L_08952314: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08952334; } @@ -6024,7 +5734,6 @@ L_08952314: } L_08952324: aot_gpr_31 = (0x0895232Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895232Cu) goto L_0895232C; AOT_REGCACHE_SYNC_OUT(); return; L_0895232C: @@ -6068,7 +5777,17 @@ L_08952358: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895238C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -6088,12 +5807,10 @@ L_089523AC: goto L_089523B4; L_089523B4: aot_gpr_31 = (0x089523BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089523BCu) goto L_089523BC; AOT_REGCACHE_SYNC_OUT(); return; L_089523BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08952914; } @@ -6103,7 +5820,6 @@ L_089523C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8876))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08952914; } @@ -6114,7 +5830,6 @@ L_089523D4: goto L_089523D8; L_089523D8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08952914; } @@ -6160,7 +5875,6 @@ L_08952434: AOT_REGCACHE_SYNC_OUT(); return; L_0895243C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08952518; } @@ -6168,12 +5882,10 @@ L_0895243C: } L_08952444: aot_gpr_31 = (0x0895244Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895244Cu) goto L_0895244C; AOT_REGCACHE_SYNC_OUT(); return; L_0895244C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08952518; } @@ -6254,7 +5966,6 @@ L_089524A4: goto L_089524B8; L_089524B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089524C8; } @@ -6276,7 +5987,6 @@ L_089524C8: aot_gpr_5 = (aot_gpr_5 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08952500; } @@ -6289,7 +5999,6 @@ L_089524E8: AOT_REGCACHE_SYNC_OUT(); return; L_089524F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08952500; } @@ -6328,7 +6037,6 @@ L_08952520: goto L_08952528; L_08952528: aot_gpr_31 = (0x08952530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08952530u) goto L_08952530; AOT_REGCACHE_SYNC_OUT(); return; L_08952530: @@ -6388,7 +6096,6 @@ L_08952570: goto L_08952584; L_08952584: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08952594; } @@ -6400,7 +6107,6 @@ L_0895258C: goto L_08952594; L_08952594: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089525A4; } @@ -6422,7 +6128,6 @@ L_089525A4: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089525DC; } @@ -6430,12 +6135,10 @@ L_089525A4: } L_089525C4: aot_gpr_31 = (0x089525CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 283u, 0x08A417DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089525CCu) goto L_089525CC; AOT_REGCACHE_SYNC_OUT(); return; L_089525CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089525DC; } @@ -6455,7 +6158,6 @@ L_089525DC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(3256), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3256)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089525FC; } @@ -6471,7 +6173,6 @@ L_089525F4: } L_089525FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952584; } @@ -6526,7 +6227,6 @@ L_08952654: L_08952664: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_089526A4; } @@ -6544,7 +6244,6 @@ L_08952674: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08952914; } @@ -6553,7 +6252,6 @@ L_08952674: L_08952698: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08952914; } @@ -6581,7 +6279,6 @@ L_089526BC: } L_089526C4: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089526E4; } @@ -6591,7 +6288,6 @@ L_089526CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089526EC; } @@ -6599,7 +6295,6 @@ L_089526CC: } L_089526DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952880; } @@ -6607,7 +6302,6 @@ L_089526DC: } L_089526E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895297C; } @@ -6641,7 +6335,6 @@ L_0895270C: goto L_08952728; L_08952728: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_08952740; } @@ -6686,7 +6379,6 @@ L_08952764: L_08952768: ctx.gpr[10] = (ctx.gpr[9] | 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08952830; } @@ -6695,7 +6387,6 @@ L_08952768: L_08952774: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(852))); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08952830; } @@ -6704,7 +6395,6 @@ L_08952774: L_08952780: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(1656))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_08952830; } @@ -6731,7 +6421,6 @@ L_089527C0: aot_mem.aot_direct_store32(ctx.gpr[10] + static_cast(16), ctx.gpr[2]); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(668))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_08952830; } @@ -6740,7 +6429,6 @@ L_089527C0: L_089527D0: ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(666))); { const bool branch_taken = static_cast(ctx.gpr[10]) > 0; - // nop if (branch_taken) { goto L_08952830; } @@ -6750,7 +6438,6 @@ L_089527DC: ctx.gpr[10] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(615)))))); ctx.gpr[10] = (ctx.gpr[10] & 64u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08952830; } @@ -6760,7 +6447,6 @@ L_089527EC: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(72))); ctx.gpr[10] = (ctx.gpr[10] & 496u); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[3]; - // nop if (branch_taken) { goto L_08952830; } @@ -6794,7 +6480,6 @@ L_08952830: } L_08952844: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08952878; } @@ -6809,7 +6494,6 @@ L_0895284C: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08952878; } @@ -6840,7 +6524,6 @@ L_0895288C: goto L_0895289C; L_0895289C: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089528AC; } @@ -6869,7 +6552,6 @@ L_089528AC: L_089528C4: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_4; - // nop if (branch_taken) { goto L_089528D8; } @@ -6877,7 +6559,6 @@ L_089528C4: } L_089528D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952914; } @@ -6886,7 +6567,6 @@ L_089528D0: L_089528D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08952904; } @@ -6894,7 +6574,6 @@ L_089528D8: } L_089528E4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08952904; } @@ -6902,7 +6581,6 @@ L_089528E4: } L_089528EC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08952904; } @@ -6910,7 +6588,6 @@ L_089528EC: } L_089528F4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08952904; } @@ -6918,7 +6595,6 @@ L_089528F4: } L_089528FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952914; } @@ -6937,7 +6613,6 @@ L_08952904: L_08952914: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895297C; } @@ -6947,7 +6622,6 @@ L_08952920: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3256)))))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1929)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0895297C; } @@ -6973,7 +6647,6 @@ L_08952940: } L_08952948: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0895297C; } @@ -6982,7 +6655,6 @@ L_08952948: L_08952950: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24896))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895297C; } @@ -7015,7 +6687,17 @@ L_0895297C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08952994: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -7082,7 +6764,6 @@ L_08952A2C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3262)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08952AB8; } @@ -7093,7 +6774,6 @@ L_08952A3C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08952AB8; } @@ -7108,7 +6788,6 @@ L_08952A50: aot_gpr_5 = (aot_gpr_5 + static_cast(1396)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08952AB8; } @@ -7128,7 +6807,6 @@ L_08952A84: aot_gpr_5 = (aot_gpr_5 | 26355u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16223u << 16u); if (branch_taken) { @@ -7140,9 +6818,7 @@ L_08952A9C: aot_gpr_5 = (aot_gpr_5 | 26355u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08952AB8; } @@ -7181,7 +6857,6 @@ L_08952AD0: AOT_REGCACHE_SYNC_OUT(); return; L_08952AF0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08952CA4; } @@ -7198,7 +6873,6 @@ L_08952AFC: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952B40; } @@ -7208,7 +6882,6 @@ L_08952B1C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(776))); aot_gpr_4 = (0u | 31u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7222,7 +6895,6 @@ L_08952B2C: AOT_REGCACHE_SYNC_OUT(); return; L_08952B38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7232,7 +6904,6 @@ L_08952B40: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 19u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7242,7 +6913,6 @@ L_08952B50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 20u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7252,7 +6922,6 @@ L_08952B60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 24u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7262,7 +6931,6 @@ L_08952B70: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 25u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7272,7 +6940,6 @@ L_08952B80: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 26u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7282,7 +6949,6 @@ L_08952B90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 27u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7292,7 +6958,6 @@ L_08952BA0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7302,7 +6967,6 @@ L_08952BB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 10u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7312,7 +6976,6 @@ L_08952BC0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952BE0; } @@ -7322,7 +6985,6 @@ L_08952BD0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08952C00; } @@ -7331,7 +6993,6 @@ L_08952BD0: L_08952BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(776))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7345,7 +7006,6 @@ L_08952BEC: AOT_REGCACHE_SYNC_OUT(); return; L_08952BF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7355,7 +7015,6 @@ L_08952C00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08952C30; } @@ -7365,7 +7024,6 @@ L_08952C10: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[17] = (0u | 33u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952C30; } @@ -7375,7 +7033,6 @@ L_08952C20: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 35u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08952C54; } @@ -7385,7 +7042,6 @@ L_08952C30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(776))); aot_gpr_4 = (0u | 36u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7399,7 +7055,6 @@ L_08952C40: AOT_REGCACHE_SYNC_OUT(); return; L_08952C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7407,7 +7062,6 @@ L_08952C4C: } L_08952C54: aot_gpr_31 = (0x08952C5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 161u, 0x08A40D58u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08952C5Cu) goto L_08952C5C; AOT_REGCACHE_SYNC_OUT(); return; L_08952C5C: @@ -7420,7 +7074,6 @@ L_08952C5C: } L_08952C64: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7434,7 +7087,6 @@ L_08952C6C: AOT_REGCACHE_SYNC_OUT(); return; L_08952C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7444,7 +7096,6 @@ L_08952C80: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (0u | 30u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7458,7 +7109,6 @@ L_08952C90: AOT_REGCACHE_SYNC_OUT(); return; L_08952C9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7488,9 +7138,7 @@ L_08952CD8: aot_gpr_6 = (aot_gpr_6 | 13854u); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08952D40; } @@ -7505,7 +7153,6 @@ L_08952CF4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2256), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952D20; } @@ -7524,7 +7171,6 @@ L_08952D20: goto L_08952D24; L_08952D24: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7538,7 +7184,6 @@ L_08952D2C: AOT_REGCACHE_SYNC_OUT(); return; L_08952D38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7549,7 +7194,6 @@ L_08952D40: aot_gpr_6 = (16329u << 16u); aot_gpr_6 = (aot_gpr_6 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_6); if (branch_taken) { @@ -7563,7 +7207,6 @@ L_08952D5C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2256), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952D7C; } @@ -7582,7 +7225,6 @@ L_08952D7C: goto L_08952D80; L_08952D80: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7596,7 +7238,6 @@ L_08952D88: AOT_REGCACHE_SYNC_OUT(); return; L_08952D94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7608,7 +7249,6 @@ L_08952D9C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2256), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952DBC; } @@ -7627,7 +7267,6 @@ L_08952DBC: goto L_08952DC0; L_08952DC0: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08952DD4; } @@ -7653,7 +7292,17 @@ L_08952DD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08952DF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -7711,7 +7360,6 @@ L_08952E7C: AOT_REGCACHE_SYNC_OUT(); return; L_08952EA8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08952F08; } @@ -7753,7 +7401,6 @@ L_08952EB0: AOT_REGCACHE_SYNC_OUT(); return; L_08952F00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08952F20; } @@ -7778,7 +7425,6 @@ L_08952F20: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08952F50; } @@ -7799,7 +7445,6 @@ L_08952F50: aot_gpr_4 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08952F74; } @@ -7824,7 +7469,6 @@ L_08952F94: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089530B4; } @@ -7835,7 +7479,6 @@ L_08952FAC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089530B4; } @@ -7848,7 +7491,6 @@ L_08952FC0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08952FF4; } @@ -7860,7 +7502,6 @@ L_08952FDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08953004; } @@ -7882,7 +7523,6 @@ L_08953004: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_0895305C; } @@ -7894,7 +7534,6 @@ L_0895301C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0895305C; } @@ -7906,7 +7545,6 @@ L_08953034: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0895305C; } @@ -7969,9 +7607,7 @@ L_08953074: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089530B4; } @@ -7988,7 +7624,6 @@ L_089530B4: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08952F94; } @@ -7998,7 +7633,6 @@ L_089530CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3292))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6288))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895313C; } @@ -8008,7 +7642,6 @@ L_089530DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3292))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6292))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895313C; } @@ -8018,7 +7651,6 @@ L_089530EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3292))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6296))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895313C; } @@ -8028,7 +7660,6 @@ L_089530FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3292))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6296))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895313C; } @@ -8038,7 +7669,6 @@ L_0895310C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3292))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6304))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895313C; } @@ -8048,7 +7678,6 @@ L_0895311C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(3292))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6308))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895313C; } @@ -8091,7 +7720,17 @@ L_0895314C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953184: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1037))); @@ -8117,7 +7756,6 @@ L_089531C4: } L_089531D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08953474; } @@ -8125,7 +7763,6 @@ L_089531D8: } L_089531E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08953474; } @@ -8145,7 +7782,6 @@ L_089531E8: L_0895320C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1784))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8156,7 +7792,6 @@ L_08953218: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8164,12 +7799,10 @@ L_08953218: } L_0895322C: aot_gpr_31 = (0x08953234u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953234u) goto L_08953234; AOT_REGCACHE_SYNC_OUT(); return; L_08953234: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8183,7 +7816,6 @@ L_0895323C: AOT_REGCACHE_SYNC_OUT(); return; L_08953248: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953390; } @@ -8323,7 +7955,6 @@ L_08953250: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089532E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089532E0u) goto L_089532E0; AOT_REGCACHE_SYNC_OUT(); return; L_089532E0: @@ -8336,7 +7967,6 @@ L_089532E0: AOT_REGCACHE_SYNC_OUT(); return; L_089532F4: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_08953388; } @@ -8365,7 +7995,6 @@ L_089532FC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08953318u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953318u) goto L_08953318; AOT_REGCACHE_SYNC_OUT(); return; L_08953318: @@ -8378,7 +8007,6 @@ L_08953318: AOT_REGCACHE_SYNC_OUT(); return; L_0895332C: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08953388; } @@ -8398,9 +8026,7 @@ L_08953334: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08953388; } @@ -8409,7 +8035,6 @@ L_08953334: L_08953354: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953388; } @@ -8433,7 +8058,6 @@ L_08953370: AOT_REGCACHE_SYNC_OUT(); return; L_08953388: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8446,7 +8070,6 @@ L_08953390: AOT_REGCACHE_SYNC_OUT(); return; L_08953398: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8459,7 +8082,6 @@ L_089533A0: AOT_REGCACHE_SYNC_OUT(); return; L_089533A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8468,7 +8090,6 @@ L_089533A8: L_089533B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8481,7 +8102,6 @@ L_089533BC: AOT_REGCACHE_SYNC_OUT(); return; L_089533C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8491,7 +8111,6 @@ L_089533CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8537,9 +8156,7 @@ L_089533DC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08953460; } @@ -8561,7 +8178,6 @@ L_08953418: AOT_REGCACHE_SYNC_OUT(); return; L_0895343C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8570,7 +8186,6 @@ L_0895343C: L_08953444: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953460; } @@ -8615,7 +8230,17 @@ L_08953474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089534AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8632,7 +8257,17 @@ L_089534C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089534D4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -8641,7 +8276,17 @@ L_089534D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089534E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8694,7 +8339,6 @@ L_08953548: L_08953560: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08953570; } @@ -8705,7 +8349,6 @@ L_0895356C: goto L_08953570; L_08953570: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895357C; } @@ -8717,7 +8360,6 @@ L_08953578: L_0895357C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08953598; } @@ -8736,7 +8378,6 @@ L_08953588: L_08953598: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089535C0; } @@ -8745,7 +8386,6 @@ L_08953598: L_089535A4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089535C0; } @@ -8764,7 +8404,6 @@ L_089535B0: L_089535C0: aot_gpr_4 = (ctx.gpr[17] | aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089535DC; } @@ -8783,7 +8422,6 @@ L_089535CC: L_089535DC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(8))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089535F4; } @@ -8811,7 +8449,17 @@ L_089535FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953614: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8827,7 +8475,6 @@ L_08953614: } L_08953630: aot_gpr_31 = (0x08953638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953638u) goto L_08953638; AOT_REGCACHE_SYNC_OUT(); return; L_08953638: @@ -8840,7 +8487,6 @@ L_0895363C: AOT_REGCACHE_SYNC_OUT(); return; L_08953644: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953694; } @@ -8855,7 +8501,6 @@ L_0895364C: goto L_08953658; L_08953658: aot_gpr_31 = (0x08953660u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953660u) goto L_08953660; AOT_REGCACHE_SYNC_OUT(); return; L_08953660: @@ -8864,7 +8509,6 @@ L_08953660: goto L_08953668; L_08953668: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953678; } @@ -8872,7 +8516,6 @@ L_08953668: } L_08953670: aot_gpr_31 = (0x08953678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953678u) goto L_08953678; AOT_REGCACHE_SYNC_OUT(); return; L_08953678: @@ -8888,7 +8531,6 @@ L_08953680: AOT_REGCACHE_SYNC_OUT(); return; L_0895368C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089536EC; } @@ -8897,7 +8539,6 @@ L_0895368C: L_08953694: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089536B0; } @@ -8905,7 +8546,6 @@ L_08953694: } L_089536A0: aot_gpr_31 = (0x089536A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 292u, 0x08A8D904u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089536A8u) goto L_089536A8; AOT_REGCACHE_SYNC_OUT(); return; L_089536A8: @@ -8919,7 +8559,6 @@ L_089536A8: L_089536B0: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089536C8; } @@ -8944,7 +8583,6 @@ L_089536C8: } L_089536D4: aot_gpr_31 = (0x089536DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089536DCu) goto L_089536DC; AOT_REGCACHE_SYNC_OUT(); return; L_089536DC: @@ -8968,7 +8606,17 @@ L_089536EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953700: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8985,14 +8633,34 @@ L_08953714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953728: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953730: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -9014,7 +8682,6 @@ L_08953730: AOT_REGCACHE_SYNC_OUT(); return; L_08953770: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08953788; } @@ -9049,7 +8716,17 @@ L_08953794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089537A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9057,7 +8734,6 @@ L_089537A8: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08953860; } @@ -9066,7 +8742,6 @@ L_089537A8: L_089537C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08953860; } @@ -9107,7 +8782,6 @@ L_08953804: L_08953810: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08953828; } @@ -9141,7 +8815,6 @@ L_08953838: } L_08953844: aot_gpr_31 = (0x0895384Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895384Cu) goto L_0895384C; AOT_REGCACHE_SYNC_OUT(); return; L_0895384C: @@ -9154,7 +8827,6 @@ L_08953850: AOT_REGCACHE_SYNC_OUT(); return; L_08953858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08953880; } @@ -9163,7 +8835,6 @@ L_08953858: L_08953860: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953878; } @@ -9171,7 +8842,6 @@ L_08953860: } L_0895386C: aot_gpr_31 = (0x08953874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953874u) goto L_08953874; AOT_REGCACHE_SYNC_OUT(); return; L_08953874: @@ -9195,7 +8865,17 @@ L_08953880: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953898: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9225,7 +8905,17 @@ L_089538C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089538D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9255,7 +8945,17 @@ L_08953904: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953910: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9273,7 +8973,17 @@ L_08953928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953934: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9317,11 +9027,20 @@ L_08953934: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953954: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9375,11 +9094,20 @@ L_08953954: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895397C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9396,11 +9124,20 @@ L_0895397C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953990: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); @@ -9415,7 +9152,6 @@ L_08953990: } L_089539A8: aot_gpr_31 = (0x089539B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089539B0u) goto L_089539B0; AOT_REGCACHE_SYNC_OUT(); return; L_089539B0: @@ -9432,7 +9168,17 @@ L_089539BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089539CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); @@ -9447,7 +9193,6 @@ L_089539CC: } L_089539E4: aot_gpr_31 = (0x089539ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089539ECu) goto L_089539EC; AOT_REGCACHE_SYNC_OUT(); return; L_089539EC: @@ -9464,7 +9209,17 @@ L_089539F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953A08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (2236u << 16u); @@ -9496,7 +9251,6 @@ L_08953A08: } L_08953A68: aot_gpr_31 = (0x08953A70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953A70u) goto L_08953A70; AOT_REGCACHE_SYNC_OUT(); return; L_08953A70: @@ -9506,7 +9260,6 @@ L_08953A70: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953A90; } @@ -9568,7 +9321,17 @@ L_08953AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953B30: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load_word_right(aot_gpr_6 + static_cast(1), ctx.gpr[8])); @@ -9604,7 +9367,17 @@ L_08953B30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -9733,7 +9506,6 @@ L_08953CE4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08953D2C; } @@ -9742,7 +9514,6 @@ L_08953CE4: L_08953CF4: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08953D20; } @@ -9753,7 +9524,6 @@ L_08953D00: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(0), aot_gpr_6); ctx.gpr[7] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08953D20; } @@ -9816,7 +9586,6 @@ L_08953D6C: goto L_08953D70; L_08953D70: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08953DC4; } @@ -9906,7 +9675,6 @@ L_08953DF0: } L_08953E00: aot_gpr_31 = (0x08953E08u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953E08u) goto L_08953E08; AOT_REGCACHE_SYNC_OUT(); return; L_08953E08: @@ -9914,7 +9682,6 @@ L_08953E08: goto L_08953E0C; L_08953E0C: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08953DD4; } @@ -9925,7 +9692,6 @@ L_08953E14: goto L_08953E18; L_08953E18: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08953E28; } @@ -9933,7 +9699,6 @@ L_08953E18: } L_08953E20: aot_gpr_31 = (0x08953E28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08953E28u) goto L_08953E28; AOT_REGCACHE_SYNC_OUT(); return; L_08953E28: @@ -9957,13 +9722,22 @@ L_08953E28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953E60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08953F10; } @@ -10015,7 +9789,6 @@ L_08953EEC: aot_gpr_4 = (aot_gpr_5 + static_cast(29232)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(301))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08953F10; } @@ -10033,7 +9806,17 @@ L_08953F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953F1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -10086,7 +9869,17 @@ L_08953F5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08953F94: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0084.cpp b/profiles/vcs/generated/generated_unit_0084.cpp index 9951cf4..2903ba2 100644 --- a/profiles/vcs/generated/generated_unit_0084.cpp +++ b/profiles/vcs/generated/generated_unit_0084.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0084[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 5, 0, 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 9, 0, 10, 0, 11, 0, 0, 0, 12, 0, 13, 0, 14, 0, 0, 15, - 0, 16, 0, 17, 0, 0, 18, 0, 0, 19, 0, 20, 0, 21, 0, 22, 0, 0, 0, 23, 0, 0, 24, 25, 26, 0, 27, 0, 0, 28, 0, 29, - 0, 30, 0, 31, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 35, 36, 37, 0, 38, 0, 0, 39, 0, 40, 0, 0, 0, 41, - 0, 0, 42, 43, 44, 0, 45, 0, 0, 46, 0, 0, 47, 0, 48, 0, 49, 0, 0, 50, 51, 0, 0, 52, 0, 53, 54, 0, 0, 55, 0, 56, - 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 61, 0, 62, 0, 0, 0, 63, 0, 0, 64, 65, 66, 0, 67, 0, 0, 68, 0, 69, 0, 0, 0, - 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, - 75, 76, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 79, 80, 0, 0, 0, - 0, 81, 0, 0, 82, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 90, 0, 91, 0, 0, 0, 92, 0, 93, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 100, 0, 0, 0, - 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 0, 103, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 107, - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 112, 0, 0, 0, - 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 118, 0, 119, 120, 0, 0, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 124, 125, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 0, 0, 0, 136, 0, 137, 0, 0, 0, 138, 0, 139, 0, 0, 0, 140, 0, 141, 0, 0, 0, 142, 0, 143, 0, 0, 0, 144, 0, - 145, 0, 0, 0, 146, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 149, 150, 0, 151, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 156, 0, 157, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 161, 0, 0, 162, 0, 163, - 0, 0, 0, 164, 0, 165, 166, 0, 0, 0, 167, 168, 0, 0, 169, 0, 170, 0, 0, 0, 171, 172, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, - 0, 174, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 179, 0, 180, 0, 0, 0, 181, 182, 0, 183, 0, - 0, 184, 0, 0, 185, 186, 0, 187, 0, 0, 0, 188, 189, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 210, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, - 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 217, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, - 221, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 228, 229, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 240, 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 244, 0, - 0, 245, 246, 0, 247, 0, 0, 248, 0, 0, 0, 249, 0, 250, 0, 251, 0, 0, 252, 0, 253, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 258, 259, 0, 260, 0, 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 264, 0, 0, 0, 0, 0, 265, 266, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 272, 0, 0, - 0, 0, 0, 0, 273, 0, 274, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 280, - 0, 281, 0, 0, 0, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 297, - 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, - 0, 302, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, - 0, 305, 0, 306, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, 315, 0, 316, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 0, - 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, - 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, - 343, 0, 0, 0, 344, 0, 345, 0, 346, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 353, - 0, 0, 354, 0, 355, 0, 356, 0, 357, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 360, - 0, 0, 0, 361, 0, 0, 362, 0, 0, 363, 0, 364, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 367, 0, - 0, 0, 368, 0, 369, 0, 370, 0, 0, 0, 371, 0, 372, 373, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 376, 0, 377, 0, - 0, 0, 378, 0, 379, 0, 380, 0, 0, 381, 0, 382, 0, 383, 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 0, 387, 0, 0, 0, 388, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 0, 397, 0, 398, 0, 0, 0, - 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 401, 0, 402, 0, 0, 403, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, - 0, 0, 407, 0, 0, 408, 0, 409, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, - 418, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, - 0, 424, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 428, 0, 0, 0, 0, 429, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 432, 0, 0, 0, 433, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, - 438, 0, 439, 0, 0, 0, 0, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 443, 444, 0, 0, 0, 445, 0, 446, 0, 447, 0, 448, 0, 449, 0, - 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 0, 453, 0, 454, 0, 455, 0, 456, 0, - 457, 0, 458, 0, 459, 0, 0, 460, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 465, 0, 466, 0, - 467, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 471, 0, 472, 0, 0, 473, 0, 474, 0, 475, 0, 476, 0, - 477, 0, 0, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 484, 485, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, - 487, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 491, 0, 492, 0, 0, 0, 0, 0, 493, 0, - 0, 494, 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 499, 500, 0, 0, 501, 0, - 0, 502, 503, 504, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 513, 0, 514, 0, 0, 515, 0, 516, 0, 517, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, - 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 521, 0, 0, 522, 523, 0, 0, 0, 0, 524, 0, 0, 525, 0, 526, 0, 527, 0, 528, 0, - 0, 529, 0, 530, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, 0, 0, 536, - 0, 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 543, 0, 0, - 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 547, 0, 0, 548, 0, 0, 0, 549, 0, 550, 0, 0, 0, - 551, 0, 552, 0, 553, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 0, 557, 0, 558, 0, - 559, 0, 560, 0, 561, 0, 562, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 565, 0, 0, 566, 0, 567, 0, 0, 0, 568, 569, 0, 570, 0, 0, - 571, 0, 0, 0, 0, 0, 572, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 0, 577, 0, 0, - 0, 578, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, - 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, - 0, 0, 588, 0, 0, 589, 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 0, - 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 598, 0, 0, 599, 0, 0, 0, 600, 0, 601, 602, 0, 0, - 0, 0, 0, 603, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, - 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 610, 0, 0, 0, 611, 0, 0, 0, 0, 0, 612, 613, 0, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, - 0, 619, 620, 621, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 626, 0, 627, 0, 628, 0, 629, 0, 0, - 630, 0, 631, 0, 632, 0, 0, 633, 0, 634, 0, 635, 0, 0, 0, 636, 0, 637, 0, 638, 0, 639, 0, 0, 640, 0, 641, 0, 642, 0, 0, 643, - 644, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 648, 0, 649, 0, 650, 0, 0, 0, 0, 651, 0, - 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 656, 657, 0, 658, 0, 0, 0, 659, 0, 660, 0, 661, 0, 0, 662, 0, 663, 0, 664, - 0, 0, 0, 665, 0, 666, 0, 667, 0, 0, 668, 0, 669, 0, 670, 0, 671, 0, 672, 0, 0, 0, 673, 0, 674, 0, 675, 0, 676, 0, 0, 677, - 0, 678, 0, 679, 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, - 683, 0, 0, 0, 0, 0, 0, 684, 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 0, 698, 0, 699, 0, 0, - 700, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 702, 0, 703, 0, 704, 0, 705, 706, 0, 707, 0, 708, 0, 0, 0, 0, 709, 0, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 719, 0, 0, 720, - 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 724, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, - 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 729, 0, 0, 0, 730, 0, 0, 0, 0, - 731, 732, 0, 0, 0, 0, 733, 0, 734, 0, 0, 0, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 737, 0, 0, 0, 0, 0, 738, 0, 0, 0, - 0, 739, 0, 0, 740, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 0, 0, 744, 0, - 745, 0, 0, 0, 0, 746, 0, 747, 0, 0, 0, 0, 0, 748, 0, 0, 0, 749, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 751, 0, 0, 0, - 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 755, - 0, 0, 0, 0, 0, 756, 0, 757, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 760, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 762, 0, - 763, 0, 0, 764, 0, 0, 0, 0, 0, 765, 0, 766, 0, 0, 0, 0, 767, 0, 0, 768, 769, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, - 771, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 774, 0, 775, 0, 0, 0, 776, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, - 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 781, 0, 0, 0, 0, 0, 0, 782, 783, 0, 784, 0, 0, 785, 0, 0, 0, 0, - 786, 0, 0, 0, 0, 787, 788, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 793, 0, 0, 0, 0, 0, 0, 794, 0, 795, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 797, 0, 0, 0, 798, 0, 0, 0, 0, 799, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 805, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 807, 0, 808, 0, 809, 0, 810, 0, 0, 0, 0, 811, 0, 0, 0, 0, 812, 0, 0, 0, - 0, 813, 0, 0, 814, 0, 0, 0, 815, 816, 0, 817, 0, 0, 0, 818, 0, 0, 819, 820, 821, 0, 822, 0, 823, 0, 824, 0, 0, 0, 825, 0, - 0, 826, 827, 828, 0, 829, 0, 0, 0, 830, 0, 0, 0, 0, 0, 831, 0, 0, 0, 832, 0, 833, 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, - 0, 0, 0, 835, 0, 0, 0, 836, 0, 0, 837, 0, 0, 838, 0, 0, 839, 0, 840, 0, 841, 0, 0, 842, 0, 0, 0, 0, 843, 0, 0, 844, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0084[64] = { + 0x9515050520140001ull, 0x8A5C882AA5C8AA4Aull, 0x14B914AAA699525Cull, 0x1820008350042010ull, + 0x0200A8A208910452ull, 0x0000002010410410ull, 0x1401410080410205ull, 0x0004328043411482ull, + 0x0020080010800010ull, 0x4514514402900000ull, 0xA508544021158151ull, 0x58B1006204314C68ull, + 0x00200000100298B2ull, 0x0410000022402A00ull, 0xA010AA000208A801ull, 0x34215201020290A0ull, + 0x0001010200100104ull, 0x4800012601002040ull, 0x005458150114A896ull, 0xA4080A50228510C1ull, + 0x0900050020028062ull, 0xA0000024900AA040ull, 0x0030208A20000006ull, 0x240020000A420009ull, + 0x5000100010000008ull, 0x0000000100000001ull, 0x104A000000400000ull, 0x00A8001000200000ull, + 0x0000000000400000ull, 0xA409455144140800ull, 0x50010A4880400954ull, 0x44522A545400B454ull, + 0x1485400100094000ull, 0x801482A481019414ull, 0x2804008524400000ull, 0x480100A2002C244Aull, + 0x5510800455461505ull, 0x5528882154810895ull, 0x4150801104065551ull, 0x8401402E4D10020Aull, + 0x5521904104152A24ull, 0x212121209241020Aull, 0x52800115144A2001ull, 0x224040C12C524855ull, + 0x1004444808008022ull, 0x344C000405052124ull, 0x3044208088040208ull, 0x2A8A012E40050104ull, + 0x42A90041952A8A95ull, 0x954554A8A9516292ull, 0x040000000000041Aull, 0x4000148400120181ull, + 0x0856A88129422800ull, 0x0080100000000001ull, 0x9200400801002004ull, 0x0882400108288010ull, + 0x4240005210444143ull, 0x90002020104220A1ull, 0x20190A09410520A0ull, 0x0960480808514105ull, + 0x04281205000000E1ull, 0x2080500020042110ull, 0x455C8B1210855200ull, 0x909524882028822Eull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0084[64] = { + 1u, 16u, 42u, 70u, 81u, 96u, 102u, 113u, 127u, 132u, 145u, 164u, 184u, 194u, 202u, 215u, + 230u, 236u, 245u, 264u, 281u, 291u, 302u, 311u, 320u, 325u, 327u, 332u, 337u, 338u, 354u, 368u, + 389u, 399u, 415u, 424u, 438u, 457u, 477u, 494u, 510u, 529u, 544u, 559u, 578u, 588u, 603u, 614u, + 630u, 652u, 678u, 683u, 693u, 710u, 713u, 721u, 731u, 745u, 756u, 771u, 786u, 797u, 806u, 826u, }; void recomp_unit_0084_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0084_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08954000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0084[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0084[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0084[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08954000; @@ -1048,8 +955,6 @@ L_08954050: aot_gpr_5 = (0u | 3u); { const std::int32_t dividend = static_cast(ctx.gpr[17]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[19] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[18]); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[20] = (ctx.lo); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; @@ -1100,7 +1005,6 @@ L_089540A8: aot_gpr_5 = (aot_gpr_6 + aot_gpr_5); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089540C8; } @@ -1116,7 +1020,6 @@ L_089540C0: } L_089540C8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089540E8; } @@ -1142,7 +1045,6 @@ L_089540E0: } L_089540E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089542F0; } @@ -1163,7 +1065,6 @@ L_089540FC: goto L_08954104; L_08954104: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954134; } @@ -1185,7 +1086,6 @@ L_08954118: goto L_08957098; L_08954124: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08954134; } @@ -1226,7 +1126,6 @@ L_0895415C: goto L_08954160; L_08954160: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954174; } @@ -1235,7 +1134,6 @@ L_08954160: L_08954168: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895418C; } @@ -1247,7 +1145,6 @@ L_08954174: goto L_08954778; L_0895417C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08954194; } @@ -1255,7 +1152,6 @@ L_0895417C: } L_08954184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895424C; } @@ -1263,7 +1159,6 @@ L_08954184: } L_0895418C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089542F0; } @@ -1275,7 +1170,6 @@ L_08954194: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089541EC; } @@ -1308,7 +1202,6 @@ L_089541CC: goto L_089541D0; L_089541D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08954230; } @@ -1321,7 +1214,6 @@ L_089541D8: goto L_08956594; L_089541E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954230; } @@ -1354,7 +1246,6 @@ L_0895420C: goto L_08954210; L_08954210: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954224; } @@ -1363,7 +1254,6 @@ L_08954210: L_08954218: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08954230; } @@ -1380,7 +1270,6 @@ L_08954230: goto L_08954778; L_08954238: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0895424C; } @@ -1401,7 +1290,6 @@ L_08954250: goto L_08956F48; L_0895425C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089542B0; } @@ -1417,7 +1305,6 @@ L_08954268: goto L_08955EC0; L_08954274: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0895428C; } @@ -1441,7 +1328,6 @@ L_0895428C: goto L_08954778; L_08954294: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089542A8; } @@ -1487,7 +1373,6 @@ L_089542D0: goto L_089542D4; L_089542D4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089542E8; } @@ -1514,7 +1399,17 @@ L_089542F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1531,7 +1426,6 @@ L_08954334: aot_gpr_4 = (ctx.gpr[18] + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1040))); { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08954380; } @@ -1574,7 +1468,17 @@ L_08954384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895439C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1611,7 +1515,6 @@ L_089543F0: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[21]); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0895449C; } @@ -1620,7 +1523,6 @@ L_089543F0: L_08954404: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08954494; } @@ -1628,7 +1530,6 @@ L_08954404: } L_08954410: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08954450; } @@ -1662,7 +1563,6 @@ L_08954440: L_08954450: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0895449C; } @@ -1695,7 +1595,6 @@ L_08954484: } L_08954494: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[22]; - // nop if (branch_taken) { goto L_089544B4; } @@ -1713,7 +1612,6 @@ L_0895449C: } L_089544AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089544BC; } @@ -1737,7 +1635,17 @@ L_089544BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089544E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -1769,7 +1677,6 @@ L_08954528: aot_gpr_6 = (aot_gpr_6 + aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08954558; } @@ -1781,7 +1688,6 @@ L_08954540: aot_gpr_6 = (aot_gpr_6 + aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_6; - // nop if (branch_taken) { goto L_08954594; } @@ -1870,7 +1776,17 @@ L_08954608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954624: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1886,7 +1802,6 @@ L_08954640: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089546B8; } @@ -1901,7 +1816,6 @@ L_08954658: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089546A0; } @@ -1916,7 +1830,6 @@ L_0895467C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_089546C0; } @@ -1928,7 +1841,6 @@ L_089546A0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(688))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08954658; } @@ -1957,7 +1869,6 @@ L_089546C0: AOT_REGCACHE_SYNC_OUT(); return; L_089546E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089546F0; } @@ -1972,7 +1883,17 @@ L_089546F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1984,7 +1905,6 @@ L_08954704: L_0895471C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08954730; } @@ -2028,7 +1948,17 @@ L_08954764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954778: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2052,7 +1982,6 @@ L_0895479C: L_089547A4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(628))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089547B4; } @@ -2070,7 +1999,17 @@ L_089547B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089547C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), aot_gpr_16); @@ -2252,7 +2191,6 @@ L_089548D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08954964; } @@ -2261,7 +2199,6 @@ L_089548D4: L_08954950: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08954964; } @@ -2285,12 +2222,21 @@ L_08954964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954988: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(580))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089549A0; } @@ -2304,7 +2250,6 @@ L_089549A0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(588))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089549B8; } @@ -2318,7 +2263,6 @@ L_089549B8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(596))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089549D0; } @@ -2332,7 +2276,6 @@ L_089549D0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(584))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089549E8; } @@ -2346,7 +2289,6 @@ L_089549E8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(592))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954A00; } @@ -2360,7 +2302,6 @@ L_08954A00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(600))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08954A18; } @@ -2372,11 +2313,20 @@ L_08954A10: goto L_08954A18; L_08954A18: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2384,7 +2334,6 @@ L_08954A20: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_31 = (0x08954A3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08954A3Cu) goto L_08954A3C; AOT_REGCACHE_SYNC_OUT(); return; L_08954A3C: @@ -2402,7 +2351,6 @@ L_08954A50: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08954A40; } @@ -2417,7 +2365,17 @@ L_08954A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954A74: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(608))); @@ -2437,7 +2395,6 @@ L_08954A98: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1444))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1448))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08954AB8; } @@ -2445,7 +2402,6 @@ L_08954A98: } L_08954AA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954B54; } @@ -2453,7 +2409,6 @@ L_08954AA8: } L_08954AB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954B68; } @@ -2475,7 +2430,6 @@ L_08954ACC: ctx.gpr[18] = (aot_gpr_5 << 2u); ctx.gpr[18] = (ctx.gpr[19] + ctx.gpr[18]); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08954B14; } @@ -2503,7 +2457,6 @@ L_08954AFC: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), 0u); ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08954AE8; } @@ -2547,7 +2500,6 @@ L_08954B40: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), 0u); ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08954B2C; } @@ -2574,7 +2526,17 @@ L_08954B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954B84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(712))); @@ -2606,7 +2568,6 @@ L_08954BC0: ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(28))); ctx.gpr[11] = (static_cast(ctx.gpr[11]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_08954BDC; } @@ -2617,7 +2578,6 @@ L_08954BD0: goto L_08954BD4; L_08954BD4: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08954BEC; } @@ -2656,7 +2616,6 @@ L_08954BF8: L_08954C04: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(28))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08954C14; } @@ -2667,11 +2626,20 @@ L_08954C10: goto L_08954C14; L_08954C14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954C1C: ctx.gpr[7] = (aot_gpr_4 + static_cast(11748)); aot_gpr_5 = (aot_gpr_4 + static_cast(11764)); @@ -2698,7 +2666,17 @@ L_08954C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954C44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8144))); @@ -2764,7 +2742,6 @@ L_08954CD4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(29))); aot_gpr_6 = (0u | 7u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08954D34; } @@ -2772,7 +2749,6 @@ L_08954CD4: } L_08954D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954D58; } @@ -2780,7 +2756,6 @@ L_08954D24: } L_08954D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954DD0; } @@ -2803,7 +2778,6 @@ L_08954D34: ctx.execute_vfpu_vdot_ct<0u, 27u, 27u, 3u>(); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(0), ctx.vfpu_scalar_bits_ct<0u>()); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954DD0; } @@ -2812,7 +2786,6 @@ L_08954D34: L_08954D58: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(30))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954DD0; } @@ -2822,7 +2795,6 @@ L_08954D64: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8144))); aot_gpr_5 = (static_cast(aot_gpr_5) < 300 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954DD0; } @@ -2871,7 +2843,17 @@ L_08954DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954DE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2891,7 +2873,6 @@ L_08954E00: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(16))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08954E34; } @@ -2899,7 +2880,6 @@ L_08954E00: } L_08954E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08954E3C; } @@ -2917,7 +2897,17 @@ L_08954E3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954E4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2942,7 +2932,6 @@ L_08954E64: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08954EBC; } @@ -2969,7 +2958,17 @@ L_08954EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3045,7 +3044,17 @@ L_08954F64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08954F80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3055,7 +3064,6 @@ L_08954F80: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08954FB8; } @@ -3064,7 +3072,6 @@ L_08954F80: L_08954FA4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(692))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08954FC0; } @@ -3072,7 +3079,6 @@ L_08954FA4: } L_08954FB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955008; } @@ -3080,7 +3086,6 @@ L_08954FB0: } L_08954FB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955008; } @@ -3102,7 +3107,6 @@ L_08954FD4: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[17]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08954FF4; } @@ -3137,7 +3141,17 @@ L_08955008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955020: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1456))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1440))); @@ -3154,7 +3168,17 @@ L_08955020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955050: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (0u + static_cast(-2)); @@ -3172,7 +3196,17 @@ L_08955050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955084: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_5 = (0u + static_cast(-1)); @@ -3184,7 +3218,17 @@ L_08955084: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089550A0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_5 = (0u + static_cast(-1)); @@ -3197,7 +3241,17 @@ L_089550A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089550C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3392,7 +3446,6 @@ L_08955280: goto L_08955288; L_08955288: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089552B0; } @@ -3415,7 +3468,6 @@ L_089552AC: goto L_089552B0; L_089552B0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089552D0; } @@ -3455,7 +3507,17 @@ L_089552D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955300: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(688))); @@ -3476,7 +3538,6 @@ L_0895531C: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08955340; } @@ -3538,11 +3599,20 @@ L_08955374: } L_08955390: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955398: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); if (ctx.gpr[9] != 0u) { @@ -3552,7 +3622,6 @@ L_08955398: goto L_089553A4; L_089553A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895543C; } @@ -3566,7 +3635,6 @@ L_089553AC: aot_gpr_6 = (aot_gpr_6 + aot_gpr_6); aot_gpr_6 = (ctx.gpr[7] + aot_gpr_6); { const bool branch_taken = ctx.gpr[7] == aot_gpr_6; - // nop if (branch_taken) { goto L_0895543C; } @@ -3579,7 +3647,6 @@ L_089553CC: ctx.gpr[10] = (aot_gpr_4 + ctx.gpr[10]); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(1040))); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08955418; } @@ -3588,7 +3655,6 @@ L_089553CC: L_089553E8: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089553FC; } @@ -3596,7 +3662,6 @@ L_089553E8: } L_089553F4: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08955418; } @@ -3604,7 +3669,6 @@ L_089553F4: } L_089553FC: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08955414; } @@ -3628,7 +3692,6 @@ L_08955418: ctx.gpr[7] = (ctx.gpr[7] + static_cast(6)); aot_gpr_6 = (ctx.gpr[8] + aot_gpr_6); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089553CC; } @@ -3636,11 +3699,20 @@ L_08955418: } L_0895543C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955444: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::Geometry) && rt.memory().direct_fastmem_enabled()) { @@ -3660,7 +3732,6 @@ L_08955444: ctx.vfpu_ctrl[1u] = 0x000000FFu; ctx.execute_vfpu_vcmp_ct<14u, 21u, 4u, 3u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089554A0; } @@ -3681,11 +3752,20 @@ L_08955474: goto L_089554A0; L_089554A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089554A8: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::Geometry) && rt.memory().direct_fastmem_enabled()) { @@ -3716,7 +3796,6 @@ L_089554A8: L_089554E0: ctx.gpr[20] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08955544; } @@ -3733,7 +3812,6 @@ L_089554EC: ctx.gpr[18] = (2236u << 16u); ctx.gpr[18] = (ctx.gpr[18] + static_cast(29552)); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0895553C; } @@ -3744,7 +3822,6 @@ L_08955518: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(4), std::bit_cast(aot_fpr_12)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8408))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_gpr_5 + static_cast(12)); if (branch_taken) { @@ -3762,7 +3839,6 @@ L_08955534: } L_0895553C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089557B4; } @@ -3770,7 +3846,6 @@ L_0895553C: } L_08955544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089557B4; } @@ -3785,7 +3860,6 @@ L_0895554C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<131u>()); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08955604; } @@ -3799,7 +3873,6 @@ L_08955570: L_0895557C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089555FC; } @@ -3808,7 +3881,6 @@ L_0895557C: L_08955588: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08955604; } @@ -3843,7 +3915,6 @@ L_08955594: AOT_REGCACHE_SYNC_OUT(); return; L_089555F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089557B4; } @@ -3851,7 +3922,6 @@ L_089555F4: } L_089555FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089557B4; } @@ -3885,9 +3955,7 @@ L_08955608: aot_gpr_4 = (17008u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895568C; } @@ -3902,7 +3970,6 @@ L_08955674: AOT_REGCACHE_SYNC_OUT(); return; L_08955684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089557B4; } @@ -4001,7 +4068,6 @@ L_08955758: goto L_08955764; L_08955764: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089557B4; } @@ -4044,11 +4110,20 @@ L_089557B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089557E8: ctx.gpr[7] = (aot_gpr_6 < static_cast(8) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4060,11 +4135,20 @@ L_089557F4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8760))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895580C: aot_gpr_6 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1472), static_cast(aot_gpr_6)); @@ -4090,7 +4174,6 @@ L_0895580C: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4112,7 +4195,6 @@ L_08955870: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4134,7 +4216,6 @@ L_089558B0: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4142,7 +4223,6 @@ L_089558B0: } L_089558F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4150,7 +4230,6 @@ L_089558F0: } L_089558F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4188,7 +4267,6 @@ L_08955900: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4248,7 +4326,6 @@ L_08955980: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955AC4; } @@ -4285,15 +4362,23 @@ L_08955A58: goto L_08955AC4; L_08955AC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955ACC: ctx.gpr[7] = (aot_gpr_6 < static_cast(8) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4305,11 +4390,20 @@ L_08955AD8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8728))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955AF0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1472), static_cast(0u)); aot_gpr_6 = (0u & 255u); @@ -4335,7 +4429,6 @@ L_08955AF0: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4356,7 +4449,6 @@ L_08955B54: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4377,7 +4469,6 @@ L_08955B90: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4385,7 +4476,6 @@ L_08955B90: } L_08955BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4393,7 +4483,6 @@ L_08955BCC: } L_08955BD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4430,7 +4519,6 @@ L_08955BDC: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4489,7 +4577,6 @@ L_08955C58: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955D48; } @@ -4506,11 +4593,20 @@ L_08955D2C: goto L_08955D48; L_08955D48: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955D50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4533,7 +4629,6 @@ L_08955D68: goto L_08955D78; L_08955D78: { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_08955DC0; } @@ -4547,7 +4642,6 @@ L_08955D80: goto L_08956160; L_08955D90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955DC0; } @@ -4555,7 +4649,6 @@ L_08955D90: } L_08955D98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955DC0; } @@ -4563,7 +4656,6 @@ L_08955D98: } L_08955DA0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08955DC0; } @@ -4577,7 +4669,6 @@ L_08955DA8: goto L_08955DCC; L_08955DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955DC0; } @@ -4590,7 +4681,17 @@ L_08955DC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955DCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4607,7 +4708,6 @@ L_08955DCC: L_08955DE8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08955E10; } @@ -4620,7 +4720,6 @@ L_08955DF4: L_08955DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(628))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08955E20; } @@ -4628,7 +4727,6 @@ L_08955DFC: } L_08955E08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955E2C; } @@ -4636,7 +4734,6 @@ L_08955E08: } L_08955E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955EAC; } @@ -4644,7 +4741,6 @@ L_08955E10: } L_08955E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08955EAC; } @@ -4713,7 +4809,17 @@ L_08955EAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08955EC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4726,11 +4832,9 @@ L_08955EC0: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08955EF0u); - // nop goto L_08956F48; L_08955EF0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08955F10; } @@ -4786,8 +4890,6 @@ L_08955F3C: aot_gpr_4 = (0u | 3u); { const std::int32_t dividend = static_cast(ctx.gpr[17]); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[19] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[18]); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[20] = (ctx.lo); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -4801,7 +4903,6 @@ L_08955F68: goto L_08954778; L_08955F70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08955F90; } @@ -4848,7 +4949,6 @@ L_08955FA4: goto L_08955FAC; L_08955FAC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08955FD8; } @@ -4858,7 +4958,6 @@ L_08955FB4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(592))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08955FD0; } @@ -4885,7 +4984,6 @@ L_08955FD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08956040; } @@ -4895,7 +4993,6 @@ L_08955FE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(600))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08956038; } @@ -4934,7 +5031,6 @@ L_08956038: L_08956040: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089560C0; } @@ -4977,7 +5073,6 @@ L_08956080: goto L_08956160; L_089560B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895613C; } @@ -5043,7 +5138,6 @@ L_08956110: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08956130; } @@ -5077,7 +5171,17 @@ L_08956140: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956160: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5094,7 +5198,6 @@ L_08956160: L_0895617C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895619C; } @@ -5103,7 +5206,6 @@ L_0895617C: L_08956188: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(628))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089561BC; } @@ -5111,7 +5213,6 @@ L_08956188: } L_08956194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089561C8; } @@ -5119,7 +5220,6 @@ L_08956194: } L_0895619C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956288; } @@ -5131,7 +5231,6 @@ L_089561A4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956288; } @@ -5218,7 +5317,17 @@ L_08956288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895629C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5230,7 +5339,6 @@ L_0895629C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089562C8u); - // nop goto L_0895742C; L_089562C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); @@ -5255,7 +5363,6 @@ L_089562F4: aot_gpr_6 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0895630C; } @@ -5288,7 +5395,6 @@ L_08956318: L_08956328: aot_gpr_6 = (ctx.gpr[2] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895634C; } @@ -5299,7 +5405,6 @@ L_08956334: aot_gpr_5 = (aot_gpr_16 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1040))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895634C; } @@ -5310,7 +5415,6 @@ L_08956348: goto L_0895634C; L_0895634C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08956384; } @@ -5357,7 +5461,17 @@ L_0895639C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089563C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5375,7 +5489,6 @@ L_089563C0: L_089563EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(628))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08956428; } @@ -5387,7 +5500,6 @@ L_089563F8: goto L_08954778; L_08956400: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08956428; } @@ -5405,7 +5517,6 @@ L_08956408: goto L_08956420; L_08956420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956448; } @@ -5413,7 +5524,6 @@ L_08956420: } L_08956428: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956580; } @@ -5424,7 +5534,6 @@ L_08956430: ctx.gpr[7] = (116u << 16u); ctx.gpr[7] = (ctx.gpr[7] + static_cast(25976)); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08956448; } @@ -5437,7 +5546,6 @@ L_08956448: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08956468; } @@ -5445,7 +5553,6 @@ L_08956448: } L_08956458: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08956478; } @@ -5453,7 +5560,6 @@ L_08956458: } L_08956460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956510; } @@ -5465,7 +5571,6 @@ L_08956468: goto L_089569C0; L_08956470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956580; } @@ -5475,7 +5580,6 @@ L_08956478: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089564F8; } @@ -5502,7 +5606,6 @@ L_089564BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089564E8; } @@ -5512,7 +5615,6 @@ L_089564D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08956500; } @@ -5520,7 +5622,6 @@ L_089564D0: } L_089564E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956508; } @@ -5532,7 +5633,6 @@ L_089564E8: goto L_089569C0; L_089564F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956580; } @@ -5540,7 +5640,6 @@ L_089564F0: } L_089564F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956580; } @@ -5552,7 +5651,6 @@ L_08956500: goto L_0895629C; L_08956508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895652C; } @@ -5561,7 +5659,6 @@ L_08956508: L_08956510: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895652C; } @@ -5578,7 +5675,6 @@ L_0895652C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(640), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1036))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08956578; } @@ -5596,7 +5692,6 @@ L_08956540: L_0895655C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(628))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08956570; } @@ -5608,7 +5703,6 @@ L_08956568: goto L_089569C0; L_08956570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956580; } @@ -5627,7 +5721,17 @@ L_08956580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956594: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5644,7 +5748,6 @@ L_089565AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(588))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089565CC; } @@ -5654,7 +5757,6 @@ L_089565BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(580))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089565D4; } @@ -5667,7 +5769,6 @@ L_089565CC: L_089565D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089565E8; } @@ -5683,7 +5784,6 @@ L_089565E8: goto L_08954778; L_089565F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08956668; } @@ -5706,12 +5806,10 @@ L_08956610: goto L_089569A0; L_08956618: aot_gpr_31 = (0x08956620u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08956620u) goto L_08956620; AOT_REGCACHE_SYNC_OUT(); return; L_08956620: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08956638; } @@ -5719,7 +5817,6 @@ L_08956620: } L_08956628: aot_gpr_31 = (0x08956630u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 310u, 0x089392F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08956630u) goto L_08956630; AOT_REGCACHE_SYNC_OUT(); return; L_08956630: @@ -5765,7 +5862,17 @@ L_08956680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956690: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5788,7 +5895,6 @@ L_089566BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(588))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089566E0; } @@ -5796,7 +5902,6 @@ L_089566BC: } L_089566D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895678C; } @@ -5804,7 +5909,6 @@ L_089566D0: } L_089566D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956794; } @@ -5816,7 +5920,6 @@ L_089566E0: ctx.gpr[17] = (aot_gpr_5 << 2u); ctx.gpr[17] = (ctx.gpr[18] + ctx.gpr[17]); { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08956788; } @@ -5825,7 +5928,6 @@ L_089566E0: L_089566F8: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0895670C; } @@ -5833,7 +5935,6 @@ L_089566F8: } L_08956704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956778; } @@ -5845,7 +5946,6 @@ L_0895670C: ctx.gpr[19] = (aot_gpr_4 << 3u); ctx.gpr[19] = (ctx.gpr[20] + ctx.gpr[19]); { const bool branch_taken = ctx.gpr[20] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08956778; } @@ -5862,7 +5962,6 @@ L_08956724: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895676C; } @@ -5888,7 +5987,6 @@ L_08956768: L_0895676C: ctx.gpr[20] = (ctx.gpr[20] + static_cast(8)); { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08956724; } @@ -5897,7 +5995,6 @@ L_0895676C: L_08956778: ctx.gpr[18] = (ctx.gpr[18] + static_cast(4)); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089566F8; } @@ -5926,14 +6023,33 @@ L_08956794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089567B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089567C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5961,7 +6077,6 @@ L_089567E8: L_089567FC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895682C; } @@ -5977,7 +6092,6 @@ L_08956814: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613))); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[18]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08956904; } @@ -5993,7 +6107,6 @@ L_08956824: } L_0895682C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895690C; } @@ -6002,17 +6115,14 @@ L_0895682C: L_08956834: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-8707), static_cast(0u)); aot_gpr_31 = (0x08956840u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08956840u) goto L_08956840; AOT_REGCACHE_SYNC_OUT(); return; L_08956840: aot_gpr_31 = (0x08956848u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08956848u) goto L_08956848; AOT_REGCACHE_SYNC_OUT(); return; L_08956848: aot_gpr_31 = (0x08956850u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 206u, 0x08934DB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08956850u) goto L_08956850; AOT_REGCACHE_SYNC_OUT(); return; L_08956850: @@ -6033,7 +6143,6 @@ L_08956868: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089568B0; } @@ -6045,7 +6154,6 @@ L_08956880: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089568C0; } @@ -6057,7 +6165,6 @@ L_08956898: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089568C0; } @@ -6083,7 +6190,6 @@ L_089568C0: L_089568D4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089568E8; } @@ -6091,7 +6197,6 @@ L_089568D4: } L_089568E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956808; } @@ -6104,7 +6209,6 @@ L_089568E8: AOT_REGCACHE_SYNC_OUT(); return; L_089568F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956840; } @@ -6113,7 +6217,6 @@ L_089568F0: L_089568F8: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895690C; } @@ -6133,7 +6236,17 @@ L_0895690C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956924: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6167,7 +6280,6 @@ L_08956958: L_08956964: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(636), 0u); aot_gpr_31 = (0x08956970u); - // nop goto L_089567B8; L_08956970: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6176,7 +6288,17 @@ L_08956970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895697C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6193,7 +6315,17 @@ L_08956994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089569A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6209,7 +6341,17 @@ L_089569B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089569C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6225,7 +6367,17 @@ L_089569D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089569E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6241,7 +6393,17 @@ L_089569F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6287,7 +6449,6 @@ L_08956A58: goto L_08957098; L_08956A68: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08956A88; } @@ -6297,7 +6458,6 @@ L_08956A70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(600))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08956A90; } @@ -6305,7 +6465,6 @@ L_08956A70: } L_08956A80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08956AE4; } @@ -6323,7 +6482,6 @@ L_08956A90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08956ADC; } @@ -6361,7 +6519,6 @@ L_08956ADC: L_08956AE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08956B98; } @@ -6377,7 +6534,6 @@ L_08956AF0: } L_08956AF8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08956B10; } @@ -6393,7 +6549,6 @@ L_08956B00: } L_08956B08: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08956B18; } @@ -6412,7 +6567,6 @@ L_08956B18: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(720))); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08956B68; } @@ -6462,7 +6616,6 @@ L_08956B68: goto L_08956B6C; L_08956B6C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08956B98; } @@ -6499,7 +6652,17 @@ L_08956B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956BB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6508,7 +6671,6 @@ L_08956BB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(592))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08956C04; } @@ -6517,7 +6679,6 @@ L_08956BB8: L_08956BD8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08956C04; } @@ -6543,7 +6704,17 @@ L_08956C04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956C14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6572,7 +6743,17 @@ L_08956C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6581,7 +6762,6 @@ L_08956C6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(584))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08956CB8; } @@ -6590,7 +6770,6 @@ L_08956C6C: L_08956C8C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08956CB8; } @@ -6616,7 +6795,17 @@ L_08956CB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956CC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6639,7 +6828,6 @@ L_08956CF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08956D60; } @@ -6660,7 +6848,6 @@ L_08956D20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08956D48; } @@ -6681,7 +6868,6 @@ L_08956D48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08956D08; } @@ -6703,7 +6889,17 @@ L_08956D68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6765,7 +6961,6 @@ L_08956E0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08956DCC; } @@ -6784,7 +6979,17 @@ L_08956E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956E48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); @@ -6805,7 +7010,17 @@ L_08956E6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956E7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6814,7 +7029,6 @@ L_08956E7C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08956E9Cu); - // nop goto L_0895742C; L_08956E9C: ctx.gpr[18] = (0u | 0u); @@ -6833,7 +7047,6 @@ L_08956EB4: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[17]); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08956EF4; } @@ -6878,7 +7091,17 @@ L_08956F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956F20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -6887,18 +7110,37 @@ L_08956F20: aot_gpr_4 = (aot_gpr_4 << 2u); ctx.gpr[2] = (ctx.gpr[2] + aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956F40: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_5 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08956F48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6934,7 +7176,6 @@ L_08956F88: goto L_08956F8C; L_08956F8C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08956FA0; } @@ -6943,7 +7184,6 @@ L_08956F8C: L_08956F94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08956FEC; } @@ -6953,8 +7193,6 @@ L_08956FA0: aot_gpr_4 = (0u | 3u); { const std::int32_t dividend = static_cast(ctx.gpr[17]); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_16); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.lo); aot_gpr_31 = (0x08956FC4u); @@ -6962,7 +7200,6 @@ L_08956FA0: goto L_08957098; L_08956FC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08956FE4; } @@ -7017,7 +7254,6 @@ L_08957000: goto L_08957008; L_08957008: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895701C; } @@ -7026,7 +7262,6 @@ L_08957008: L_08957010: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895704C; } @@ -7038,7 +7273,6 @@ L_0895701C: goto L_08954778; L_08957024: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08957044; } @@ -7093,7 +7327,6 @@ L_08957060: goto L_08957068; L_08957068: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08957044; } @@ -7102,7 +7335,6 @@ L_08957068: L_08957070: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957044; } @@ -7121,7 +7353,17 @@ L_08957080: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957098: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7141,7 +7383,6 @@ L_08957098: L_089570C0: aot_gpr_5 = (static_cast(ctx.gpr[17]) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089570DC; } @@ -7157,7 +7398,6 @@ L_089570CC: } L_089570D4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089570E4; } @@ -7176,7 +7416,6 @@ L_089570E4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(720))); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08957134; } @@ -7226,7 +7465,6 @@ L_08957134: goto L_08957138; L_08957138: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957158; } @@ -7273,7 +7511,6 @@ L_0895716C: goto L_08957174; L_08957174: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08957194; } @@ -7320,7 +7557,6 @@ L_089571A8: goto L_089571B0; L_089571B0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089571E8; } @@ -7332,7 +7568,6 @@ L_089571B8: goto L_08954778; L_089571C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089571E0; } @@ -7387,7 +7622,6 @@ L_089571FC: goto L_08957204; L_08957204: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089571E0; } @@ -7406,7 +7640,17 @@ L_08957210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957228: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_20)); @@ -7542,7 +7786,6 @@ L_0895739C: goto L_089573A8; L_089573A8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089573F8; } @@ -7585,14 +7828,33 @@ L_089573F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895742C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957434: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7621,7 +7883,6 @@ L_08957458: L_08957460: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08957474; } @@ -7629,7 +7890,6 @@ L_08957460: } L_0895746C: aot_gpr_31 = (0x08957474u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08957474u) goto L_08957474; AOT_REGCACHE_SYNC_OUT(); return; L_08957474: @@ -7639,7 +7899,17 @@ L_08957474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957480: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7675,7 +7945,6 @@ L_089574B4: goto L_089574BC; L_089574BC: aot_gpr_31 = (0x089574C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089574C4u) goto L_089574C4; AOT_REGCACHE_SYNC_OUT(); return; L_089574C4: @@ -7683,7 +7952,6 @@ L_089574C4: goto L_089574C8; L_089574C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089574D8; } @@ -7703,7 +7971,17 @@ L_089574D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089574EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -7713,7 +7991,17 @@ L_089574EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957500: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7792,7 +8080,6 @@ L_08957500: ctx.execute_vfpu_vhdp_ct<34u, 1u, 52u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_089576F0; } @@ -7809,7 +8096,6 @@ L_089575B0: ctx.execute_vfpu_vhdp_ct<34u, 1u, 53u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_089576F0; } @@ -7826,7 +8112,6 @@ L_089575DC: ctx.execute_vfpu_vhdp_ct<34u, 1u, 54u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_089576F0; } @@ -7843,7 +8128,6 @@ L_08957608: ctx.execute_vfpu_vhdp_ct<34u, 1u, 55u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_089576F0; } @@ -7860,7 +8144,6 @@ L_08957634: ctx.execute_vfpu_vhdp_ct<2u, 0u, 48u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089576FC; } @@ -7877,7 +8160,6 @@ L_08957660: ctx.execute_vfpu_vhdp_ct<2u, 0u, 49u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089576FC; } @@ -7894,7 +8176,6 @@ L_0895768C: ctx.execute_vfpu_vhdp_ct<2u, 0u, 50u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089576FC; } @@ -7911,7 +8192,6 @@ L_089576B8: ctx.execute_vfpu_vhdp_ct<2u, 0u, 51u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089576FC; } @@ -7920,27 +8200,54 @@ L_089576B8: L_089576E4: ctx.gpr[2] = (0u + static_cast(2)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089576F0: ctx.gpr[2] = (0u + static_cast(0)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089576FC: ctx.gpr[2] = (0u + static_cast(1)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957710: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7952,14 +8259,12 @@ L_08957710: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0895773Cu); - // nop ctx.pc = 0x08B7326Cu; AOT_REGCACHE_SYNC_OUT(); return; L_0895773C: ctx.gpr[18] = (ctx.gpr[2] | 0u); ctx.gpr[19] = (0u | 3u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08957754; } @@ -7967,7 +8272,6 @@ L_0895773C: } L_0895774C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08957884; } @@ -7987,7 +8291,6 @@ L_0895776C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(580))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089577B8; } @@ -8012,7 +8315,6 @@ L_08957780: L_089577B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957848; } @@ -8024,7 +8326,6 @@ L_089577C4: aot_gpr_5 = (static_cast(0u) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08957804; } @@ -8056,7 +8357,6 @@ L_08957804: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957848; } @@ -8064,7 +8364,6 @@ L_08957804: } L_08957818: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08957848; } @@ -8138,7 +8437,6 @@ L_08957898: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957994; } @@ -8163,7 +8461,6 @@ L_089578E4: AOT_REGCACHE_SYNC_OUT(); return; L_089578F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895791C; } @@ -8174,7 +8471,6 @@ L_08957900: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895791C; } @@ -8190,7 +8486,6 @@ L_0895791C: aot_gpr_5 = (static_cast(0u) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08957958; } @@ -8253,7 +8548,17 @@ L_08957994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089579B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -8274,7 +8579,6 @@ L_089579B4: L_089579F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08957D48; } @@ -8294,7 +8598,6 @@ L_089579FC: } L_08957A14: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08957A78; } @@ -8306,7 +8609,6 @@ L_08957A1C: ctx.gpr[20] = (2232u << 16u); ctx.gpr[20] = (ctx.gpr[20] + static_cast(-8972)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08957A78; } @@ -8323,7 +8625,6 @@ L_08957A34: } L_08957A40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957A78; } @@ -8335,7 +8636,6 @@ L_08957A48: ctx.gpr[20] = (2232u << 16u); ctx.gpr[20] = (ctx.gpr[20] + static_cast(-8800)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08957A78; } @@ -8347,7 +8647,6 @@ L_08957A60: ctx.gpr[20] = (2232u << 16u); ctx.gpr[20] = (ctx.gpr[20] + static_cast(-8884)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08957A78; } @@ -8355,7 +8654,6 @@ L_08957A60: } L_08957A78: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08957B00; } @@ -8387,7 +8685,6 @@ L_08957AAC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957AD0; } @@ -8506,7 +8803,6 @@ L_08957BB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(300))); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08957BAC; } @@ -8582,7 +8878,6 @@ L_08957C1C: goto L_08955398; L_08957C80: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08957CB0; } @@ -8642,7 +8937,6 @@ L_08957CE8: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[11] + static_cast(0)))))); ctx.gpr[11] = (ctx.gpr[11] & 7u); { const bool branch_taken = ctx.gpr[11] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08957D20; } @@ -8687,7 +8981,17 @@ L_08957D48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08957D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(220), std::bit_cast(aot_fpr_20)); @@ -8703,7 +9007,6 @@ L_08957D74: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), aot_gpr_31); ctx.gpr[21] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08957DB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 747u, 0x08A0721Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08957DB0u) goto L_08957DB0; AOT_REGCACHE_SYNC_OUT(); return; L_08957DB0: @@ -8737,7 +9040,6 @@ L_08957DF4: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[23] = (ctx.lo); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[22] = (ctx.lo); ctx.gpr[30] = (0u | 0u); @@ -8751,7 +9053,6 @@ L_08957DF4: L_08957E24: aot_gpr_5 = (static_cast(ctx.gpr[23]) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08957E40; } @@ -8767,7 +9068,6 @@ L_08957E30: } L_08957E38: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08957E48; } @@ -8836,7 +9136,6 @@ L_08957EA0: goto L_08957EA4; L_08957EA4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957F54; } @@ -8869,7 +9168,6 @@ L_08957ECC: goto L_08957ED0; L_08957ED0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08957F3C; } @@ -8881,7 +9179,6 @@ L_08957ED8: goto L_08954778; L_08957EE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08957F24; } @@ -8914,7 +9211,6 @@ L_08957F08: goto L_08957F0C; L_08957F0C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957F24; } @@ -8942,7 +9238,6 @@ L_08957F3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(584))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08957F74; } @@ -8972,7 +9267,6 @@ L_08957F74: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957FFC; } @@ -8982,7 +9276,6 @@ L_08957F8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(588))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08957FFC; } @@ -9006,7 +9299,6 @@ L_08957FA8: L_08957FB4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08957FFC; } @@ -9019,7 +9311,6 @@ L_08957FC0: AOT_REGCACHE_SYNC_OUT(); return; L_08957FC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08957FFC; } @@ -9028,7 +9319,6 @@ L_08957FC8: L_08957FD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(608))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08957FF0; } diff --git a/profiles/vcs/generated/generated_unit_0085.cpp b/profiles/vcs/generated/generated_unit_0085.cpp index 36127b6..e46e950 100644 --- a/profiles/vcs/generated/generated_unit_0085.cpp +++ b/profiles/vcs/generated/generated_unit_0085.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0085[4079] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 13, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, - 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 45, - 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 55, 0, 0, 56, - 0, 57, 0, 0, 58, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 67, 0, 68, 0, 0, - 69, 0, 70, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 74, 0, 0, 75, - 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 0, - 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, - 0, 0, 90, 0, 91, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 101, - 0, 102, 0, 0, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, - 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, 126, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 0, 130, 0, - 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, - 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 144, 0, 145, 0, 0, 0, 0, 146, 0, 0, 147, - 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 0, 150, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 153, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, - 0, 162, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 0, 166, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, - 0, 0, 169, 0, 0, 170, 0, 0, 171, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 179, - 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, - 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 192, 0, 0, 0, 193, 0, 194, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 199, 0, 200, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 205, 0, 206, 0, - 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 210, 0, 0, 211, 0, 212, 0, 213, 0, 214, 0, 0, 0, - 0, 0, 0, 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 218, 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, - 0, 0, 222, 0, 0, 0, 0, 0, 223, 0, 224, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 228, 0, 229, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 235, 0, 236, - 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, - 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 253, - 0, 0, 0, 0, 0, 254, 0, 0, 255, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, - 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 0, 0, 0, - 268, 0, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 277, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, - 0, 0, 282, 0, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, - 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 0, 296, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 299, 0, 0, 0, - 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 310, 311, - 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 317, 0, - 318, 0, 319, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 321, 0, 0, 322, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 329, - 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 346, 0, - 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 352, 0, 353, 0, 0, 0, 0, - 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, - 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, - 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 381, - 382, 0, 383, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 390, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 393, 0, 0, 0, 394, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, 0, 398, 0, 0, 0, 399, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 401, - 0, 0, 402, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 408, 0, 0, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 410, 0, 0, 0, 0, 411, 412, 0, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, - 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, - 0, 0, 0, 0, 436, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 0, 452, - 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, - 0, 0, 0, 456, 0, 457, 0, 458, 459, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, 462, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, - 0, 0, 465, 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, - 0, 0, 472, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, - 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, - 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 486, 0, 487, 0, 488, 489, 0, 0, 0, 0, - 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 493, 0, 494, 0, 495, 0, 496, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 500, 0, - 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 507, 0, 0, 508, 0, 0, - 0, 509, 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 0, 513, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, - 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, - 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, 0, 0, 525, 0, 0, 0, 526, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 529, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 535, 536, 0, 537, 0, 0, 0, 0, - 0, 538, 539, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 543, 0, 0, 0, 544, 0, 545, 0, 0, 546, 0, 547, - 0, 0, 0, 548, 0, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 0, - 0, 0, 0, 561, 0, 0, 562, 0, 563, 0, 0, 0, 564, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, - 568, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 573, 574, 0, 575, 0, 0, - 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, - 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0085[64] = { + 0x0204041002014209ull, 0x8802828108099000ull, 0x9010110002224200ull, 0xA100A0250040A404ull, + 0x0000000010090010ull, 0x0400000000000000ull, 0x9120020000000004ull, 0x2A80224001000A12ull, + 0x02402A8092100025ull, 0x4080200A00440004ull, 0x88884800200A0054ull, 0x00AAA55522221522ull, + 0x2A00000000008000ull, 0x2409001258000200ull, 0x90A1100200A80008ull, 0x0085010080801842ull, + 0x1000000008000108ull, 0x804A400000000022ull, 0x8084042000201524ull, 0x0A00000000000010ull, + 0x0000008004242010ull, 0x1000002051410400ull, 0x5500000400344800ull, 0x1054820815482081ull, + 0xA920082054410504ull, 0x0000144105200820ull, 0x8208152082055500ull, 0x0820544105041054ull, + 0x802082A41040A920ull, 0x1140000041510414ull, 0x0000000000100448ull, 0xD120020000500000ull, + 0x008A410549004140ull, 0x0000200890228000ull, 0x0088022000000000ull, 0x0000400004820100ull, + 0x0A48014249080090ull, 0x000000220080000Aull, 0x0000000000000000ull, 0x1000000000800520ull, + 0x0000100404000000ull, 0x0020492049004401ull, 0x0A40A04D81000140ull, 0x44C0062008000800ull, + 0x8800000000000000ull, 0x902200000000240Cull, 0x080090C200000000ull, 0x0421000004105040ull, + 0x0100200400801000ull, 0x4000101012004008ull, 0x2404880000208210ull, 0x8482420400004000ull, + 0x041A05A808000840ull, 0x0824001404202A84ull, 0x0D51080410001450ull, 0x4121055000024002ull, + 0x0122448224A09084ull, 0x8842151040001002ull, 0x0000010000000000ull, 0x0000010000000000ull, + 0xA51210460B112222ull, 0x2089400028012A88ull, 0x2D04100520805148ull, 0x0000400240404001ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0085[64] = { + 1u, 11u, 23u, 33u, 46u, 50u, 51u, 57u, 69u, 82u, 90u, 102u, 123u, 127u, 137u, 148u, + 158u, 162u, 169u, 180u, 183u, 189u, 197u, 207u, 222u, 237u, 246u, 261u, 275u, 289u, 300u, 304u, + 312u, 325u, 332u, 336u, 341u, 354u, 359u, 359u, 364u, 367u, 378u, 391u, 400u, 402u, 410u, 416u, + 424u, 429u, 436u, 445u, 453u, 465u, 477u, 490u, 501u, 516u, 527u, 528u, 529u, 548u, 561u, 576u, }; void recomp_unit_0085_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0085_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08958004u; - entry_id = (entry_delta < 16316u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0085[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16316u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0085[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0085[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08958004; @@ -756,7 +663,6 @@ LOCAL_DISPATCH: L_08958004: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(608))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089580AC; } @@ -779,7 +685,6 @@ L_08958028: aot_gpr_6 = (aot_gpr_6 + aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08958044; } @@ -787,7 +692,6 @@ L_08958028: } L_0895803C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958094; } @@ -802,7 +706,6 @@ L_08958044: ctx.gpr[7] = (ctx.gpr[7] << 3u); ctx.gpr[7] = (aot_gpr_6 + ctx.gpr[7]); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08958094; } @@ -819,7 +722,6 @@ L_08958068: aot_mem.aot_direct_store32(ctx.gpr[8] + static_cast(0), 0u); aot_gpr_6 = (aot_gpr_6 + static_cast(8)); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08958068; } @@ -858,7 +760,6 @@ L_089580CC: ctx.gpr[18] = (aot_gpr_4 << 3u); ctx.gpr[18] = (ctx.gpr[17] + ctx.gpr[18]); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08958150; } @@ -883,7 +784,6 @@ L_089580E8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(8), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958144; } @@ -901,7 +801,6 @@ L_08958140: L_08958144: ctx.gpr[17] = (ctx.gpr[17] + static_cast(8)); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089580E8; } @@ -915,7 +814,6 @@ L_08958150: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 + static_cast(32)); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_089580CC; } @@ -926,7 +824,6 @@ L_08958170: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(580))); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_16)); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_089581A8; } @@ -972,7 +869,6 @@ L_089581C8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958200; } @@ -998,7 +894,6 @@ L_08958200: aot_gpr_4 = (aot_gpr_4 << 2u); aot_gpr_4 = (ctx.gpr[19] + aot_gpr_4); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_089582F4; } @@ -1009,7 +904,6 @@ L_08958228: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 32767u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089582D4; } @@ -1018,7 +912,6 @@ L_08958228: L_0895823C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08958258; } @@ -1038,7 +931,6 @@ L_08958258: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089582A4; } @@ -1090,7 +982,6 @@ L_089582D4: aot_gpr_4 = (aot_gpr_4 << 2u); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08958228; } @@ -1099,7 +990,6 @@ L_089582D4: L_089582F4: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089581C8; } @@ -1108,7 +998,6 @@ L_089582F4: L_08958300: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(608))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089583B8; } @@ -1122,7 +1011,6 @@ L_0895830C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_gpr_5 + static_cast(32)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089583B8; } @@ -1131,7 +1019,6 @@ L_0895830C: L_0895832C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08958340; } @@ -1139,7 +1026,6 @@ L_0895832C: } L_08958338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958398; } @@ -1152,7 +1038,6 @@ L_08958340: aot_gpr_6 = (aot_gpr_6 << 3u); aot_gpr_6 = (aot_gpr_5 + aot_gpr_6); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08958398; } @@ -1168,7 +1053,6 @@ L_0895835C: ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0895838C; } @@ -1181,7 +1065,6 @@ L_08958384: L_0895838C: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0895835C; } @@ -1195,7 +1078,6 @@ L_08958398: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_gpr_5 + static_cast(32)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895832C; } @@ -1251,7 +1133,6 @@ L_08958414: aot_gpr_16 = (aot_gpr_16 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(192))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958708; } @@ -1547,7 +1428,6 @@ L_089586E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958708; } @@ -1556,7 +1436,6 @@ L_089586E4: L_089586F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958708; } @@ -1570,7 +1449,6 @@ L_08958700: L_08958708: ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089583F8; } @@ -1589,7 +1467,6 @@ L_08958714: } L_08958728: aot_gpr_31 = (0x08958730u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 749u, 0x08A07240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08958730u) goto L_08958730; AOT_REGCACHE_SYNC_OUT(); return; L_08958730: @@ -1609,7 +1486,17 @@ L_08958730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08958764: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(272), std::bit_cast(aot_fpr_20)); @@ -1624,13 +1511,11 @@ L_08958764: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(308), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x0895879Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0084_entry, 84u, 693u, 0x0895742Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895879Cu) goto L_0895879C; AOT_REGCACHE_SYNC_OUT(); return; L_0895879C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089587E8; } @@ -1661,7 +1546,6 @@ L_089587B8: } L_089587E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089587F0; } @@ -1669,7 +1553,6 @@ L_089587E0: } L_089587E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -1683,7 +1566,6 @@ L_089587F0: L_089587F8: aot_gpr_4 = (ctx.gpr[2] < static_cast(512) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895880C; } @@ -1697,7 +1579,6 @@ L_08958804: L_0895880C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089588B0; } @@ -1718,7 +1599,6 @@ L_08958818: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(608), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 512 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958868; } @@ -1734,7 +1614,6 @@ L_08958854: L_08958868: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089588B8; } @@ -1743,7 +1622,6 @@ L_08958868: L_08958874: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17804))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089588A0; } @@ -1770,7 +1648,6 @@ L_089588A0: AOT_REGCACHE_SYNC_OUT(); return; L_089588A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089588B8; } @@ -1801,7 +1678,6 @@ L_089588B8: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089588E8; } @@ -1868,7 +1744,6 @@ L_0895890C: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089589E0; } @@ -1878,7 +1753,6 @@ L_0895894C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(588))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089589E0; } @@ -1891,7 +1765,6 @@ L_0895895C: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.lo); aot_gpr_31 = (0x08958988u); @@ -1900,7 +1773,6 @@ L_0895895C: AOT_REGCACHE_SYNC_OUT(); return; L_08958988: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089589E0; } @@ -1965,7 +1837,6 @@ L_089589E0: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958AD0; } @@ -1975,7 +1846,6 @@ L_089589FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958AD0; } @@ -1988,7 +1858,6 @@ L_08958A0C: AOT_REGCACHE_SYNC_OUT(); return; L_08958A14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08958AD0; } @@ -2001,7 +1870,6 @@ L_08958A1C: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.lo); aot_gpr_31 = (0x08958A48u); @@ -2010,7 +1878,6 @@ L_08958A1C: AOT_REGCACHE_SYNC_OUT(); return; L_08958A48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08958AD0; } @@ -2068,9 +1935,7 @@ L_08958A78: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08958AD0; } @@ -2079,7 +1944,6 @@ L_08958A78: L_08958AB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958AD0; } @@ -2094,9 +1958,7 @@ L_08958ABC: goto L_08958AD0; L_08958AD0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08958B00; } @@ -2106,7 +1968,6 @@ L_08958AE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(580))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958B08; } @@ -2114,9 +1975,7 @@ L_08958AE0: } L_08958AF0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08958B08; } @@ -2129,9 +1988,7 @@ L_08958B00: AOT_REGCACHE_SYNC_OUT(); return; L_08958B08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08958B2C; } @@ -2146,7 +2003,6 @@ L_08958B18: goto L_08958B24; L_08958B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958B58; } @@ -2154,7 +2010,6 @@ L_08958B24: } L_08958B2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -2165,7 +2020,6 @@ L_08958B34: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958B58; } @@ -2175,7 +2029,6 @@ L_08958B48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(580))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958BD8; } @@ -2185,7 +2038,6 @@ L_08958B58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958BD0; } @@ -2195,7 +2047,6 @@ L_08958B68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(600))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958BD0; } @@ -2204,7 +2055,6 @@ L_08958B68: L_08958B78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08958BC8; } @@ -2217,7 +2067,6 @@ L_08958B84: AOT_REGCACHE_SYNC_OUT(); return; L_08958B8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08958BAC; } @@ -2225,12 +2074,10 @@ L_08958B8C: } L_08958B94: aot_gpr_31 = (0x08958B9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08958B9Cu) goto L_08958B9C; AOT_REGCACHE_SYNC_OUT(); return; L_08958B9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08958BE0; } @@ -2238,7 +2085,6 @@ L_08958B9C: } L_08958BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -2257,7 +2103,6 @@ L_08958BB8: AOT_REGCACHE_SYNC_OUT(); return; L_08958BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -2265,7 +2110,6 @@ L_08958BC0: } L_08958BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -2273,7 +2117,6 @@ L_08958BC8: } L_08958BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -2281,7 +2124,6 @@ L_08958BD0: } L_08958BD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958CF8; } @@ -2445,7 +2287,17 @@ L_08958CF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08958D28: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::Geometry) && rt.memory().direct_fastmem_enabled()) { @@ -2497,7 +2349,6 @@ L_08958D7C: L_08958D88: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(500))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08958DF8; } @@ -2513,9 +2364,7 @@ L_08958D94: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08958DD0; } @@ -2531,9 +2380,7 @@ L_08958DD0: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(1480), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08958DF8; } @@ -2550,7 +2397,6 @@ L_08958DF8: aot_gpr_4 = (static_cast(0u) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958E58; } @@ -2570,7 +2416,6 @@ L_08958E10: aot_gpr_4 = (0u & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(552), aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(496), aot_gpr_4); if (branch_taken) { @@ -2580,7 +2425,6 @@ L_08958E10: } L_08958E50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08958EC4; } @@ -2588,7 +2432,6 @@ L_08958E50: } L_08958E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A72C; } @@ -2621,7 +2464,6 @@ L_08958E88: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(60), ctx.gpr[8]); aot_gpr_4 = (aot_gpr_4 + static_cast(68)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08958E88; } @@ -2646,7 +2488,6 @@ L_08958EC4: } L_08958ED8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08958F30; } @@ -2674,7 +2515,6 @@ L_08958EF4: } L_08958F00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08958F30; } @@ -2767,7 +2607,6 @@ L_08958FA4: goto L_08958FC4; L_08958FC4: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_089591DC; } @@ -2778,7 +2617,6 @@ L_08958FCC: aot_gpr_4 = (aot_gpr_4 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089591DC; } @@ -2796,7 +2634,6 @@ L_08958FE0: aot_gpr_16 = (aot_gpr_16 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(193))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089591D0; } @@ -3014,7 +2851,6 @@ L_08959118: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089591D0; } @@ -3023,7 +2859,6 @@ L_08959118: L_089591BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089591D0; } @@ -3078,12 +2913,10 @@ L_08959218: AOT_REGCACHE_SYNC_OUT(); return; L_08959224: aot_gpr_31 = (0x0895922Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895922Cu) goto L_0895922C; AOT_REGCACHE_SYNC_OUT(); return; L_0895922C: aot_gpr_31 = (0x08959234u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08959234u) goto L_08959234; AOT_REGCACHE_SYNC_OUT(); return; L_08959234: @@ -3239,7 +3072,6 @@ L_08959314: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(500))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089593F0; } @@ -3369,7 +3201,6 @@ L_0895952C: aot_gpr_6 = (static_cast(0u) < static_cast(aot_gpr_6) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08959F54; } @@ -3381,7 +3212,6 @@ L_08959544: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(592))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08959564; } @@ -3395,7 +3225,6 @@ L_08959564: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(608))); aot_gpr_4 = (static_cast(aot_gpr_4) < 255 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895957C; } @@ -3546,7 +3375,6 @@ L_0895963C: AOT_REGCACHE_SYNC_OUT(); return; L_0895964C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959658; } @@ -3576,7 +3404,6 @@ L_08959658: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(608))); aot_gpr_4 = (static_cast(aot_gpr_4) < 255 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959A24; } @@ -3619,7 +3446,6 @@ L_0895968C: goto L_089596E4; L_089596E4: { const bool branch_taken = aot_gpr_16 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089596F4; } @@ -3627,7 +3453,6 @@ L_089596E4: } L_089596EC: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089599B4; } @@ -3635,7 +3460,6 @@ L_089596EC: } L_089596F4: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0895975C; } @@ -3643,7 +3467,6 @@ L_089596F4: } L_089596FC: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959720; } @@ -3656,7 +3479,6 @@ L_08959704: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895975C; } @@ -3668,7 +3490,6 @@ L_08959720: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959750; } @@ -3686,7 +3507,6 @@ L_08959738: L_08959750: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089596F4; } @@ -3694,7 +3514,6 @@ L_08959750: } L_0895975C: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_0895986C; } @@ -3702,7 +3521,6 @@ L_0895975C: } L_08959764: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089597CC; } @@ -3710,7 +3528,6 @@ L_08959764: } L_0895976C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959790; } @@ -3723,7 +3540,6 @@ L_08959774: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089597CC; } @@ -3735,7 +3551,6 @@ L_08959790: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089597C0; } @@ -3753,7 +3568,6 @@ L_089597A8: L_089597C0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959764; } @@ -3761,7 +3575,6 @@ L_089597C0: } L_089597CC: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089599AC; } @@ -3769,7 +3582,6 @@ L_089597CC: } L_089597D4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089599AC; } @@ -3781,7 +3593,6 @@ L_089597DC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 32767u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089599AC; } @@ -3793,7 +3604,6 @@ L_089597F4: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895982C; } @@ -3810,7 +3620,6 @@ L_0895980C: AOT_REGCACHE_SYNC_OUT(); return; L_08959824: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895985C; } @@ -3822,7 +3631,6 @@ L_0895982C: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895985C; } @@ -3841,7 +3649,6 @@ L_0895985C: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089597CC; } @@ -3849,7 +3656,6 @@ L_0895985C: } L_0895986C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089598F0; } @@ -3857,7 +3663,6 @@ L_0895986C: } L_08959874: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959898; } @@ -3870,7 +3675,6 @@ L_0895987C: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089598F0; } @@ -3882,7 +3686,6 @@ L_08959898: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089598E4; } @@ -3898,7 +3701,6 @@ L_089598B0: ctx.vfpu_ctrl[1u] = 0x000000FFu; ctx.execute_vfpu_vcmp_ct<14u, 21u, 4u, 3u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089598E4; } @@ -3913,7 +3715,6 @@ L_089598D8: L_089598E4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895986C; } @@ -3921,7 +3722,6 @@ L_089598E4: } L_089598F0: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089599AC; } @@ -3929,7 +3729,6 @@ L_089598F0: } L_089598F8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089599AC; } @@ -3941,7 +3740,6 @@ L_08959900: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 32767u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089599AC; } @@ -3953,7 +3751,6 @@ L_08959918: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895996C; } @@ -3969,7 +3766,6 @@ L_08959930: ctx.vfpu_ctrl[1u] = 0x000000FFu; ctx.execute_vfpu_vcmp_ct<14u, 21u, 4u, 3u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_08959964; } @@ -3983,7 +3779,6 @@ L_08959958: AOT_REGCACHE_SYNC_OUT(); return; L_08959964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895999C; } @@ -3995,7 +3790,6 @@ L_0895996C: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895999C; } @@ -4014,7 +3808,6 @@ L_0895999C: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089598F0; } @@ -4022,7 +3815,6 @@ L_0895999C: } L_089599AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089596E4; } @@ -4067,7 +3859,6 @@ L_089599B4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959D5C; } @@ -4075,7 +3866,6 @@ L_089599B4: } L_08959A24: { const bool branch_taken = aot_gpr_16 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959A34; } @@ -4083,7 +3873,6 @@ L_08959A24: } L_08959A2C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959D5C; } @@ -4091,7 +3880,6 @@ L_08959A2C: } L_08959A34: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08959BAC; } @@ -4099,7 +3887,6 @@ L_08959A34: } L_08959A3C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959AA4; } @@ -4107,7 +3894,6 @@ L_08959A3C: } L_08959A44: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959A68; } @@ -4120,7 +3906,6 @@ L_08959A4C: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08959AA4; } @@ -4132,7 +3917,6 @@ L_08959A68: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959A98; } @@ -4150,7 +3934,6 @@ L_08959A80: L_08959A98: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959A3C; } @@ -4158,7 +3941,6 @@ L_08959A98: } L_08959AA4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959B0C; } @@ -4166,7 +3948,6 @@ L_08959AA4: } L_08959AAC: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959AD0; } @@ -4179,7 +3960,6 @@ L_08959AB4: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08959B0C; } @@ -4191,7 +3971,6 @@ L_08959AD0: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959B00; } @@ -4209,7 +3988,6 @@ L_08959AE8: L_08959B00: ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959AA4; } @@ -4217,7 +3995,6 @@ L_08959B00: } L_08959B0C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959D54; } @@ -4225,7 +4002,6 @@ L_08959B0C: } L_08959B14: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959D54; } @@ -4237,7 +4013,6 @@ L_08959B1C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 32767u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08959D54; } @@ -4249,7 +4024,6 @@ L_08959B34: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959B6C; } @@ -4266,7 +4040,6 @@ L_08959B4C: AOT_REGCACHE_SYNC_OUT(); return; L_08959B64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959B9C; } @@ -4278,7 +4051,6 @@ L_08959B6C: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959B9C; } @@ -4297,7 +4069,6 @@ L_08959B9C: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959B0C; } @@ -4305,7 +4076,6 @@ L_08959B9C: } L_08959BAC: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959C30; } @@ -4313,7 +4083,6 @@ L_08959BAC: } L_08959BB4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959BD8; } @@ -4326,7 +4095,6 @@ L_08959BBC: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08959C30; } @@ -4338,7 +4106,6 @@ L_08959BD8: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959C24; } @@ -4354,7 +4121,6 @@ L_08959BF0: ctx.vfpu_ctrl[1u] = 0x000000FFu; ctx.execute_vfpu_vcmp_ct<14u, 21u, 4u, 3u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_08959C24; } @@ -4369,7 +4135,6 @@ L_08959C18: L_08959C24: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959BAC; } @@ -4377,7 +4142,6 @@ L_08959C24: } L_08959C30: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959C98; } @@ -4385,7 +4149,6 @@ L_08959C30: } L_08959C38: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959C5C; } @@ -4398,7 +4161,6 @@ L_08959C40: aot_gpr_5 = (aot_gpr_5 & 32767u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08959C98; } @@ -4410,7 +4172,6 @@ L_08959C5C: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959C8C; } @@ -4428,7 +4189,6 @@ L_08959C74: L_08959C8C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959C30; } @@ -4436,7 +4196,6 @@ L_08959C8C: } L_08959C98: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08959D54; } @@ -4444,7 +4203,6 @@ L_08959C98: } L_08959CA0: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08959D54; } @@ -4456,7 +4214,6 @@ L_08959CA8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 32767u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08959D54; } @@ -4468,7 +4225,6 @@ L_08959CC0: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959D14; } @@ -4484,7 +4240,6 @@ L_08959CD8: ctx.vfpu_ctrl[1u] = 0x000000FFu; ctx.execute_vfpu_vcmp_ct<14u, 21u, 4u, 3u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_08959D0C; } @@ -4498,7 +4253,6 @@ L_08959D00: AOT_REGCACHE_SYNC_OUT(); return; L_08959D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959D44; } @@ -4510,7 +4264,6 @@ L_08959D14: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08959D44; } @@ -4529,7 +4282,6 @@ L_08959D44: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); ctx.gpr[17] = (ctx.gpr[17] + static_cast(68)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959C98; } @@ -4537,7 +4289,6 @@ L_08959D44: } L_08959D54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959A24; } @@ -4545,7 +4296,6 @@ L_08959D54: } L_08959D5C: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08959DE4; } @@ -4587,7 +4337,6 @@ L_08959D7C: aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(11768), aot_gpr_6); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8152)))))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08959D7C; } @@ -4595,7 +4344,6 @@ L_08959D7C: } L_08959DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08959E1C; } @@ -4605,7 +4353,6 @@ L_08959DE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(536))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11748)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08959E1C; } @@ -4624,7 +4371,6 @@ L_08959DF4: L_08959E10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(8152)))))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08959DF4; } @@ -4717,7 +4463,6 @@ L_08959E54: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A298; } @@ -4847,7 +4592,6 @@ L_08959FE4: AOT_REGCACHE_SYNC_OUT(); return; L_08959FF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A000; } @@ -4871,7 +4615,6 @@ L_0895A000: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0895A084; } @@ -4879,7 +4622,6 @@ L_0895A000: } L_0895A01C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895A0C8; } @@ -4891,7 +4633,6 @@ L_0895A024: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895A070; } @@ -4907,7 +4648,6 @@ L_0895A03C: ctx.vfpu_ctrl[1u] = 0x000000FFu; ctx.execute_vfpu_vcmp_ct<14u, 21u, 4u, 3u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) == 0u; - // nop if (branch_taken) { goto L_0895A070; } @@ -4922,7 +4662,6 @@ L_0895A064: L_0895A070: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895A024; } @@ -4930,7 +4669,6 @@ L_0895A070: } L_0895A07C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A0C8; } @@ -4938,7 +4676,6 @@ L_0895A07C: } L_0895A084: { const bool branch_taken = aot_gpr_16 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895A0C8; } @@ -4950,7 +4687,6 @@ L_0895A08C: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895A0BC; } @@ -4968,7 +4704,6 @@ L_0895A0A4: L_0895A0BC: aot_gpr_16 = (aot_gpr_16 + static_cast(68)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895A08C; } @@ -4976,7 +4711,6 @@ L_0895A0BC: } L_0895A0C8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_0895A148; } @@ -4986,7 +4720,6 @@ L_0895A0D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11748)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0895A140; } @@ -5016,7 +4749,6 @@ L_0895A0E0: aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(11768), aot_gpr_5); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8152)))))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0895A0E0; } @@ -5024,7 +4756,6 @@ L_0895A0E0: } L_0895A140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A180; } @@ -5034,7 +4765,6 @@ L_0895A148: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11748)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0895A180; } @@ -5053,7 +4783,6 @@ L_0895A158: L_0895A174: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(8152)))))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0895A158; } @@ -5144,7 +4873,6 @@ L_0895A298: aot_gpr_4 = (0u | 2u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(500))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0895A598; } @@ -5284,7 +5012,6 @@ L_0895A348: L_0895A360: ctx.gpr[22] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(10))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0895A3BC; } @@ -5321,7 +5048,6 @@ L_0895A36C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A414; } @@ -5365,7 +5091,6 @@ L_0895A3BC: L_0895A414: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0895A464; } @@ -5401,7 +5126,6 @@ L_0895A450: L_0895A464: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895A49C; } @@ -5410,7 +5134,6 @@ L_0895A464: L_0895A470: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0895A488; } @@ -5432,7 +5155,6 @@ L_0895A488: AOT_REGCACHE_SYNC_OUT(); return; L_0895A49C: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0895A4D0; } @@ -5454,7 +5176,6 @@ L_0895A4A4: L_0895A4D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895A4F0; } @@ -5468,7 +5189,6 @@ L_0895A4DC: AOT_REGCACHE_SYNC_OUT(); return; L_0895A4E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895A508; } @@ -5485,7 +5205,6 @@ L_0895A4F0: AOT_REGCACHE_SYNC_OUT(); return; L_0895A508: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0895A588; } @@ -5530,7 +5249,6 @@ L_0895A588: aot_gpr_16 = (aot_gpr_16 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(11768))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_0895A348; } @@ -5643,7 +5361,6 @@ L_0895A598: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895A72C; } @@ -5652,7 +5369,6 @@ L_0895A598: L_0895A718: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895A72C; } @@ -5680,7 +5396,17 @@ L_0895A72C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895A760: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::Geometry) && rt.memory().direct_fastmem_enabled()) { @@ -5807,9 +5533,7 @@ L_0895A8B4: aot_fpr_20 = std::bit_cast(ctx.gpr[10]); ctx.fpr[30] = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895A92C; } @@ -5829,9 +5553,7 @@ L_0895A904: goto L_0895A92C; L_0895A92C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(aot_fpr_13)) && ctx.fpr[28] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895A964; } @@ -5852,7 +5574,6 @@ L_0895A93C: L_0895A964: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0895AF54; } @@ -5927,7 +5648,6 @@ L_0895A9D8: aot_gpr_6 = (aot_gpr_6 & 15u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_0895ABE0; } @@ -5935,7 +5655,6 @@ L_0895A9D8: } L_0895AA1C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0895AA64; } @@ -5970,7 +5689,6 @@ L_0895AA64: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (aot_gpr_6 & 3u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0895AA84; } @@ -5981,7 +5699,6 @@ L_0895AA80: goto L_0895AA84; L_0895AA84: { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0895AA90; } @@ -5993,7 +5710,6 @@ L_0895AA8C: L_0895AA90: ctx.gpr[11] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[11]; - // nop if (branch_taken) { goto L_0895AAB8; } @@ -6010,7 +5726,6 @@ L_0895AA9C: goto L_0895AAB8; L_0895AAB8: { const bool branch_taken = aot_gpr_5 != ctx.gpr[11]; - // nop if (branch_taken) { goto L_0895AADC; } @@ -6028,7 +5743,6 @@ L_0895AAC0: L_0895AADC: ctx.gpr[11] = (0u | 3u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[11]; - // nop if (branch_taken) { goto L_0895AAF0; } @@ -6036,7 +5750,6 @@ L_0895AADC: } L_0895AAE8: { const bool branch_taken = aot_gpr_5 != ctx.gpr[11]; - // nop if (branch_taken) { goto L_0895AB30; } @@ -6218,7 +5931,6 @@ L_0895ACF0: L_0895AD00: aot_gpr_4 = (static_cast(aot_gpr_6) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895AD10; } @@ -6234,7 +5946,6 @@ L_0895AD10: aot_gpr_5 = (aot_gpr_5 >> 4u); aot_gpr_5 = (static_cast(aot_gpr_5) < 0 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895ADF4; } @@ -6302,7 +6013,6 @@ L_0895ADD8: aot_gpr_5 = (aot_gpr_5 >> 4u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895AD2C; } @@ -6368,7 +6078,6 @@ L_0895AEA0: aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895AEC0; } @@ -6377,7 +6086,6 @@ L_0895AEA0: L_0895AEB4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0895AEF0; } @@ -6408,7 +6116,6 @@ L_0895AEF0: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895AF34; } @@ -6424,7 +6131,6 @@ L_0895AF1C: goto L_0895AF34; L_0895AF34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895AF54; } @@ -6479,7 +6185,6 @@ L_0895AFC4: ctx.gpr[17] = (ctx.gpr[17] & 32767u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895B228; } @@ -6488,9 +6193,7 @@ L_0895AFC4: L_0895AFD8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8408))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895B194; } @@ -6514,7 +6217,6 @@ L_0895AFEC: ctx.execute_vfpu_vhdp_ct<34u, 1u, 52u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_0895B214; } @@ -6531,7 +6233,6 @@ L_0895B034: ctx.execute_vfpu_vhdp_ct<34u, 1u, 53u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_0895B214; } @@ -6548,7 +6249,6 @@ L_0895B060: ctx.execute_vfpu_vhdp_ct<34u, 1u, 54u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_0895B214; } @@ -6565,7 +6265,6 @@ L_0895B08C: ctx.execute_vfpu_vhdp_ct<34u, 1u, 55u, 4u>(); ctx.execute_vfpu_vcmp_ct<34u, 31u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_0895B214; } @@ -6582,7 +6281,6 @@ L_0895B0B8: ctx.execute_vfpu_vhdp_ct<2u, 0u, 48u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_0895B168; } @@ -6599,7 +6297,6 @@ L_0895B0E4: ctx.execute_vfpu_vhdp_ct<2u, 0u, 49u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_0895B168; } @@ -6616,7 +6313,6 @@ L_0895B110: ctx.execute_vfpu_vhdp_ct<2u, 0u, 50u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_0895B168; } @@ -6633,7 +6329,6 @@ L_0895B13C: ctx.execute_vfpu_vhdp_ct<2u, 0u, 51u, 4u>(); ctx.execute_vfpu_vcmp_ct<2u, 31u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) != 0u; - // nop if (branch_taken) { goto L_0895B194; } @@ -6653,7 +6348,6 @@ L_0895B174: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895B214; } @@ -6726,7 +6420,6 @@ L_0895B240: aot_gpr_4 = (aot_gpr_4 >> 15u); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895B2B0; } @@ -6760,7 +6453,6 @@ L_0895B2B0: ctx.gpr[18] = (ctx.gpr[18] + static_cast(24)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0895A8B4; } @@ -6769,7 +6461,6 @@ L_0895B2B0: L_0895B2C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895B2EC; } @@ -6788,7 +6479,6 @@ L_0895B2CC: L_0895B2EC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(60))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895B33C; } @@ -6837,7 +6527,17 @@ L_0895B33C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B38C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); @@ -6863,7 +6563,17 @@ L_0895B3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B3C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6926,7 +6636,17 @@ L_0895B430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B470: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6943,7 +6663,6 @@ L_0895B470: } L_0895B490: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0895B4A4; } @@ -6959,7 +6678,6 @@ L_0895B4A0: goto L_0895B4A4; L_0895B4A4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895B4D0; } @@ -6972,7 +6690,6 @@ L_0895B4AC: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(8), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(static_cast(aot_gpr_6) >> 16u)); { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_0895B4D0; } @@ -6980,7 +6697,6 @@ L_0895B4AC: } L_0895B4C8: aot_gpr_31 = (0x0895B4D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0006_entry, 6u, 244u, 0x0881DC84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895B4D0u) goto L_0895B4D0; AOT_REGCACHE_SYNC_OUT(); return; L_0895B4D0: @@ -6996,7 +6712,17 @@ L_0895B4D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B4EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -7023,7 +6749,6 @@ L_0895B520: AOT_REGCACHE_SYNC_OUT(); return; L_0895B528: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0895B538; } @@ -7056,7 +6781,17 @@ L_0895B558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B56C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); @@ -7090,7 +6825,6 @@ L_0895B594: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0895B5D8; } @@ -7111,7 +6845,17 @@ L_0895B5D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B5F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7222,7 +6966,17 @@ L_0895B674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B68C: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), ctx.gpr[17]); @@ -7251,7 +7005,6 @@ L_0895B6C4: goto L_0895B5F0; L_0895B6D4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0895B6EC; } @@ -7283,7 +7036,17 @@ L_0895B6F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B708: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7302,7 +7065,6 @@ L_0895B708: L_0895B73C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0895B7A4; } @@ -7339,7 +7101,6 @@ L_0895B794: } L_0895B79C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895B8C8; } @@ -7429,13 +7190,11 @@ L_0895B840: } L_0895B858: aot_gpr_31 = (0x0895B860u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0089_entry, 89u, 226u, 0x08968F88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895B860u) goto L_0895B860; AOT_REGCACHE_SYNC_OUT(); return; L_0895B860: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0895B8AC; } @@ -7521,7 +7280,17 @@ L_0895B908: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B934: { float vfpu_value[4]{}; vfpu_value[3u] = 1.0f; ctx.write_vfpu_vector_with_destination_prefix_ct<35u, 4u>(vfpu_value); } @@ -7628,11 +7397,20 @@ L_0895B934: ctx.write_vfpu_matrix_ct<20u, 4u>(vfpu_d); ctx.eat_vfpu_prefixes(); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B97C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7667,7 +7445,17 @@ L_0895B9B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B9C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7685,7 +7473,17 @@ L_0895B9DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895B9F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); @@ -7694,7 +7492,17 @@ L_0895B9F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895BA00: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load_word_right(aot_gpr_6 + static_cast(1), ctx.gpr[8])); @@ -7740,7 +7548,17 @@ L_0895BA00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895BAA4: { const std::uint32_t vfpu_address = ctx.gpr[7] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7863,7 +7681,17 @@ L_0895BAA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895BBA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), std::bit_cast(aot_fpr_20)); @@ -8008,13 +7836,11 @@ L_0895BCD4: } L_0895BCE4: aot_gpr_31 = (0x0895BCECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 779u, 0x08A07430u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895BCECu) goto L_0895BCEC; AOT_REGCACHE_SYNC_OUT(); return; L_0895BCEC: ctx.gpr[30] = (0u | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0895BE8C; } @@ -8029,7 +7855,6 @@ L_0895BD00: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); aot_gpr_31 = (0x0895BD10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0089_entry, 89u, 287u, 0x0896950Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895BD10u) goto L_0895BD10; AOT_REGCACHE_SYNC_OUT(); return; L_0895BD10: @@ -8042,7 +7867,6 @@ L_0895BD10: goto L_0895BD20; L_0895BD20: aot_gpr_31 = (0x0895BD28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0896918C, 89u, 250u, 0x0896918Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0089_entry, 89u, 250u, 0x0896918Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895BD28u) goto L_0895BD28; AOT_REGCACHE_SYNC_OUT(); return; L_0895BD28: @@ -8111,7 +7935,6 @@ L_0895BDBC: L_0895BDC4: aot_gpr_4 = (ctx.gpr[20] < ctx.gpr[2] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895BE34; } @@ -8138,7 +7961,6 @@ L_0895BDF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895BE24; } @@ -8147,7 +7969,6 @@ L_0895BDF8: L_0895BE10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895BE24; } @@ -8155,7 +7976,6 @@ L_0895BE10: } L_0895BE1C: aot_gpr_31 = (0x0895BE24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895BE24u) goto L_0895BE24; AOT_REGCACHE_SYNC_OUT(); return; L_0895BE24: @@ -8170,7 +7990,6 @@ L_0895BE24: } L_0895BE34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895BE84; } @@ -8242,7 +8061,6 @@ L_0895BECC: goto L_0895BEE4; L_0895BEE4: aot_gpr_31 = (0x0895BEECu); - // nop goto L_0895B934; L_0895BEEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); @@ -8255,7 +8073,6 @@ L_0895BEF0: L_0895BEF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17673))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895BF3C; } diff --git a/profiles/vcs/generated/generated_unit_0086.cpp b/profiles/vcs/generated/generated_unit_0086.cpp index 290e311..e6ae41a 100644 --- a/profiles/vcs/generated/generated_unit_0086.cpp +++ b/profiles/vcs/generated/generated_unit_0086.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0086[4087] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 0, 7, 0, 0, - 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, - 0, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 39, 0, 0, 40, 0, 0, 41, - 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 52, 0, - 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, - 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, - 0, 0, 79, 0, 80, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, - 0, 0, 0, 87, 88, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 104, 0, 105, 0, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 0, 110, 111, 0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 114, 115, 0, 0, 116, 0, 0, - 0, 0, 117, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 121, 0, 122, 0, 0, 123, 0, 0, 124, - 0, 125, 0, 0, 0, 126, 0, 127, 0, 128, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, - 135, 0, 136, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 141, 0, 0, 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 147, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 150, 0, 0, 0, 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 153, - 0, 154, 0, 0, 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, - 0, 0, 0, 166, 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 175, 0, 0, 0, 0, 0, 176, 177, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 186, 0, 187, 0, - 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, - 0, 193, 0, 0, 194, 0, 195, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, - 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 206, 0, 207, 208, 0, 0, - 0, 0, 0, 209, 0, 0, 210, 0, 211, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, - 0, 215, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 0, - 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, - 227, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 236, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 244, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 253, - 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, - 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 262, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, - 267, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 270, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 282, 0, - 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 285, 0, 286, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 0, - 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 0, 297, 0, 0, 298, 0, 299, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 304, 0, 0, 0, 0, 0, - 0, 305, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 0, - 0, 311, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 0, 317, - 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 0, 0, - 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, - 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0, 335, 0, 0, 336, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 337, 0, 338, 339, 0, 0, 0, 340, 0, 0, 341, 0, 342, 343, 0, 0, 0, 0, 0, 344, 0, 0, 345, 0, 346, 347, 0, 0, 0, - 348, 0, 0, 349, 0, 350, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, - 357, 0, 358, 0, 359, 0, 360, 0, 361, 0, 0, 362, 0, 363, 364, 0, 0, 0, 365, 0, 0, 366, 0, 367, 368, 0, 0, 0, 0, 0, 369, 0, - 370, 0, 0, 371, 0, 372, 373, 0, 0, 0, 374, 0, 0, 375, 0, 376, 377, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 380, 0, 381, 382, 0, - 0, 0, 383, 0, 0, 384, 0, 385, 386, 0, 0, 0, 0, 0, 387, 0, 388, 0, 389, 0, 0, 0, 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 398, 0, 0, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 403, 0, 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 408, - 0, 0, 409, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 422, 0, 0, - 423, 0, 424, 0, 425, 0, 0, 426, 0, 427, 0, 428, 0, 0, 429, 0, 0, 430, 431, 0, 432, 0, 433, 0, 434, 0, 0, 435, 0, 436, 0, 437, - 0, 0, 438, 0, 0, 439, 440, 0, 441, 0, 0, 442, 443, 0, 0, 444, 0, 445, 0, 446, 0, 447, 448, 0, 0, 0, 0, 0, 0, 449, 0, 0, - 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 455, 456, 0, 0, 0, 0, 457, 0, 0, 0, 0, 458, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 462, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 465, 0, 0, - 466, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, - 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, - 475, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, - 0, 0, 495, 0, 0, 496, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, - 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 503, - 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, - 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 515, 0, 516, 517, 0, 518, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, - 522, 0, 523, 524, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 527, 0, 528, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, - 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 536, 0, 537, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 0, 546, - 0, 0, 547, 0, 0, 548, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 553, 0, 554, 0, 0, 555, 0, 0, 556, - 0, 0, 557, 0, 0, 558, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 563, 0, 564, 0, 565, 0, 566, 0, 0, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 0, 0, 0, - 0, 574, 0, 0, 575, 0, 0, 576, 0, 0, 0, 0, 577, 0, 578, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 0, - 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 590, 0, 0, 591, 592, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 601, 0, 602, 0, 0, - 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0086[64] = { + 0x00000649224A0081ull, 0x8120200000000040ull, 0x0005040800020124ull, 0x0000000000080240ull, + 0x0000000000000000ull, 0x0000000012080000ull, 0x9292402000410000ull, 0x0000000003042014ull, + 0x0002000A46040001ull, 0x0000040040002040ull, 0x500A802081008040ull, 0x0008921444A11411ull, + 0x0008221810100000ull, 0x02A8024800042024ull, 0x260503082812A000ull, 0x4A810AA292810114ull, + 0x0010820000494925ull, 0x8084228100000000ull, 0x4000010000000422ull, 0x00014308A0108A01ull, + 0x00411304000102A0ull, 0x2010208450509080ull, 0x3540024042280552ull, 0x0448409240100948ull, + 0x000148052A000801ull, 0xA405210500004111ull, 0x9082800020444000ull, 0x000020444000A402ull, + 0x8002A04500804025ull, 0x4500A84004000800ull, 0x0084541021150408ull, 0x0142028206281149ull, + 0x1541001084804212ull, 0x8802200000000012ull, 0x0000400000000880ull, 0x0000000009028000ull, + 0x004850691A41A468ull, 0x41A4695540000000ull, 0x048541A46941A469ull, 0x0000090200000000ull, + 0x00000A8000000000ull, 0xA01000000042A511ull, 0x2AAA0A0004408204ull, 0x206A9964A9564A95ull, + 0x0000000010018002ull, 0x0000AA0000508640ull, 0x4200904924000000ull, 0xA08A000504000002ull, + 0x200008000A110000ull, 0x0108012492206800ull, 0x9000000000000082ull, 0x10A0000000000004ull, + 0x441B440200000155ull, 0x810002290000002Dull, 0x5002150000000540ull, 0x0000000000000200ull, + 0x0000000004000000ull, 0x9240000000000000ull, 0x200010A4928A1124ull, 0x0542A85500010000ull, + 0x0040481212015092ull, 0x0000104003300240ull, 0x0800001000000210ull, 0x004000042A004000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0086[64] = { + 1u, 13u, 18u, 26u, 29u, 29u, 32u, 42u, 48u, 56u, 60u, 70u, 85u, 92u, 103u, 117u, + 135u, 147u, 154u, 159u, 171u, 181u, 193u, 209u, 222u, 232u, 245u, 254u, 262u, 274u, 283u, 296u, + 311u, 324u, 330u, 333u, 337u, 356u, 370u, 392u, 395u, 398u, 409u, 423u, 450u, 454u, 464u, 473u, + 482u, 488u, 500u, 504u, 508u, 522u, 532u, 541u, 542u, 543u, 547u, 562u, 574u, 587u, 595u, 599u, }; void recomp_unit_0086_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0086_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0895C000u; - entry_id = (entry_delta < 16348u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0086[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16348u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0086[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0086[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0895C000; @@ -910,7 +817,6 @@ L_0895C0A8: aot_gpr_5 = (aot_gpr_5 + static_cast(4)); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(29552), aot_gpr_5); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0895C1D4; } @@ -1074,7 +980,6 @@ L_0895C2A8: } L_0895C2C0: aot_gpr_31 = (0x0895C2C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 671u, 0x088B7BC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895C2C8u) goto L_0895C2C8; AOT_REGCACHE_SYNC_OUT(); return; L_0895C2C8: @@ -1097,7 +1002,6 @@ L_0895C2C8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(29552), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895C934; } @@ -1267,7 +1171,6 @@ L_0895C54C: L_0895C564: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17680))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895C640; } @@ -1333,7 +1236,6 @@ L_0895C640: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (ctx.gpr[21] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895C878; } @@ -1385,7 +1287,6 @@ L_0895C6C4: L_0895C6D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17680))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895C708; } @@ -1399,7 +1300,6 @@ L_0895C6DC: L_0895C6E4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895C6FC; } @@ -1432,7 +1332,6 @@ L_0895C710: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[24])); aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (0u | 255u); if (branch_taken) { @@ -1443,7 +1342,6 @@ L_0895C710: L_0895C734: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_0895C748; @@ -1455,7 +1353,6 @@ L_0895C748: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17674))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895C764; } @@ -1468,7 +1365,6 @@ L_0895C764: { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[22])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); aot_gpr_4 = (ctx.gpr[8] - aot_gpr_4); - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[22])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); aot_gpr_6 = (57088u << 16u); @@ -1559,7 +1455,6 @@ L_0895C878: AOT_REGCACHE_SYNC_OUT(); return; L_0895C884: aot_gpr_31 = (0x0895C88Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 200u, 0x088615BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895C88Cu) goto L_0895C88C; AOT_REGCACHE_SYNC_OUT(); return; L_0895C88C: @@ -1600,7 +1495,6 @@ L_0895C8C4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(29552), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17676))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895C934; } @@ -1636,7 +1530,17 @@ L_0895C934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895C978: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -1653,7 +1557,17 @@ L_0895C978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895C9A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_5 = (0u | 10u); @@ -1662,20 +1576,14 @@ L_0895C9A8: ctx.gpr[2] = (2234u << 16u); ctx.gpr[2] = (ctx.gpr[2] + static_cast(2855)); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.gpr[7] + static_cast(48)); aot_mem.aot_direct_store8(ctx.gpr[2] + static_cast(12), static_cast(aot_gpr_4)); aot_gpr_4 = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_mem.aot_direct_store8(ctx.gpr[2] + static_cast(13), static_cast(aot_gpr_4)); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_mem.aot_direct_store8(ctx.gpr[2] + static_cast(15), static_cast(aot_gpr_4)); @@ -1686,7 +1594,17 @@ L_0895C9A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CA18: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1698,11 +1616,20 @@ L_0895CA18: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CA3C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1714,11 +1641,20 @@ L_0895CA3C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CA60: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_5); @@ -1730,7 +1666,17 @@ L_0895CA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CA7C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -1741,7 +1687,17 @@ L_0895CA7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CA94: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -1752,7 +1708,6 @@ L_0895CA94: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[20]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895CACC; } @@ -1760,12 +1715,10 @@ L_0895CA94: } L_0895CABC: aot_gpr_31 = (0x0895CAC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 400u, 0x08B25C08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895CAC4u) goto L_0895CAC4; AOT_REGCACHE_SYNC_OUT(); return; L_0895CAC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895CC50; } @@ -1784,11 +1737,9 @@ L_0895CACC: goto L_0895D628; L_0895CAF0: aot_gpr_31 = (0x0895CAF8u); - // nop goto L_0895DDBC; L_0895CAF8: aot_gpr_31 = (0x0895CB00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 400u, 0x08B25C08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895CB00u) goto L_0895CB00; AOT_REGCACHE_SYNC_OUT(); return; L_0895CB00: @@ -1824,7 +1775,6 @@ L_0895CB40: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0895CB68; } @@ -1837,7 +1787,6 @@ L_0895CB54: L_0895CB5C: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0895CB54; } @@ -1872,7 +1821,6 @@ L_0895CB90: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895CBBC; } @@ -1886,7 +1834,6 @@ L_0895CBA4: L_0895CBB0: aot_gpr_4 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895CBA4; } @@ -1949,7 +1896,17 @@ L_0895CC50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CC70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1957,7 +1914,6 @@ L_0895CC70: aot_gpr_16 = (aot_gpr_16 + static_cast(2448)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x0895CC8Cu); - // nop goto L_0895E038; L_0895CC8C: aot_gpr_4 = (0u | 0u); @@ -1981,7 +1937,17 @@ L_0895CCA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CCB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9008))); @@ -2018,7 +1984,6 @@ L_0895CCCC: L_0895CD08: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_0895CD34; } @@ -2087,7 +2052,17 @@ L_0895CD98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CDA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -2098,7 +2073,6 @@ L_0895CDA4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895CE3C; } @@ -2106,15 +2080,12 @@ L_0895CDA4: } L_0895CDCC: aot_gpr_31 = (0x0895CDD4u); - // nop goto L_0895DE74; L_0895CDD4: aot_gpr_31 = (0x0895CDDCu); - // nop goto L_0895D800; L_0895CDDC: aot_gpr_31 = (0x0895CDE4u); - // nop goto L_0895DFE0; L_0895CDE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -2144,7 +2115,6 @@ L_0895CDE4: } L_0895CE34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895CE8C; } @@ -2152,7 +2122,6 @@ L_0895CE34: } L_0895CE3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895CF20; } @@ -2170,7 +2139,6 @@ L_0895CE50: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(10))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0895CE74; } @@ -2178,7 +2146,6 @@ L_0895CE50: } L_0895CE6C: aot_gpr_31 = (0x0895CE74u); - // nop goto L_0895E090; L_0895CE74: aot_gpr_4 = (ctx.gpr[20] + static_cast(1)); @@ -2186,7 +2153,6 @@ L_0895CE74: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895CE50; } @@ -2213,7 +2179,6 @@ L_0895CEA4: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(10))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895CEC8; } @@ -2221,7 +2186,6 @@ L_0895CEA4: } L_0895CEC0: aot_gpr_31 = (0x0895CEC8u); - // nop goto L_0895E090; L_0895CEC8: aot_gpr_4 = (ctx.gpr[20] + static_cast(1)); @@ -2230,7 +2194,6 @@ L_0895CEC8: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895CEA4; } @@ -2242,7 +2205,6 @@ L_0895CEE4: L_0895CEE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(101))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895CF08; } @@ -2253,7 +2215,6 @@ L_0895CEF4: aot_gpr_4 = (ctx.gpr[17] + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895CF10; } @@ -2285,7 +2246,17 @@ L_0895CF20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CF40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -2293,7 +2264,6 @@ L_0895CF40: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895CF64; } @@ -2301,7 +2271,6 @@ L_0895CF40: } L_0895CF5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895CFAC; } @@ -2315,7 +2284,6 @@ L_0895CF64: L_0895CF70: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(101))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895CF84; } @@ -2337,15 +2305,12 @@ L_0895CF84: } L_0895CF94: aot_gpr_31 = (0x0895CF9Cu); - // nop goto L_0895D678; L_0895CF9C: aot_gpr_31 = (0x0895CFA4u); - // nop goto L_0895DE0C; L_0895CFA4: aot_gpr_31 = (0x0895CFACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 102u, 0x0897053Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895CFACu) goto L_0895CFAC; AOT_REGCACHE_SYNC_OUT(); return; L_0895CFAC: @@ -2357,7 +2322,17 @@ L_0895CFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895CFC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); @@ -2365,7 +2340,6 @@ L_0895CFC0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(36))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895CFEC; } @@ -2377,7 +2351,6 @@ L_0895CFDC: goto L_0895CCB4; L_0895CFE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D040; } @@ -2386,7 +2359,6 @@ L_0895CFE4: L_0895CFEC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(240))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895D008; } @@ -2398,7 +2370,6 @@ L_0895CFF8: goto L_0895CCB4; L_0895D000: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D040; } @@ -2407,7 +2378,6 @@ L_0895D000: L_0895D008: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(46))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895D038; } @@ -2416,7 +2386,6 @@ L_0895D008: L_0895D014: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(48))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895D038; } @@ -2425,7 +2394,6 @@ L_0895D014: L_0895D020: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(50))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0895D038; } @@ -2434,7 +2402,6 @@ L_0895D020: L_0895D02C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895D040; } @@ -2451,7 +2418,17 @@ L_0895D040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D04C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(101), static_cast(0u)); jump_target = aot_gpr_31; @@ -2459,7 +2436,17 @@ L_0895D04C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D058: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(ctx.fpr[20])); @@ -2487,7 +2474,6 @@ L_0895D0A4: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895D0A4; } @@ -2498,7 +2484,6 @@ L_0895D0BC: aot_gpr_4 = (ctx.gpr[28] + static_cast(-17616)); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_31 = (0x0895D0D0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B58974, 213u, 150u, 0x08B58974u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0213_entry, 213u, 150u, 0x08B58974u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895D0D0u) goto L_0895D0D0; AOT_REGCACHE_SYNC_OUT(); return; L_0895D0D0: @@ -2560,7 +2545,17 @@ L_0895D0D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D180: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2568,7 +2563,6 @@ L_0895D180: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895D1A4; } @@ -2576,7 +2570,6 @@ L_0895D180: } L_0895D19C: aot_gpr_31 = (0x0895D1A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895D1A4u) goto L_0895D1A4; AOT_REGCACHE_SYNC_OUT(); return; L_0895D1A4: @@ -2605,14 +2598,23 @@ L_0895D1C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D1DC: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[3] = (0u | 0u); ctx.gpr[10] = (ctx.gpr[2] | 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[11] = (0u | 0u); if (branch_taken) { @@ -2637,9 +2639,7 @@ L_0895D204: L_0895D214: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895D204; } @@ -2707,11 +2707,20 @@ L_0895D2A0: goto L_0895D2F8; L_0895D2F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D300: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -2746,7 +2755,17 @@ L_0895D33C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D350: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -2781,7 +2800,17 @@ L_0895D38C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D3A0: aot_gpr_5 = (0u | 0u); goto L_0895D3A4; @@ -2798,11 +2827,20 @@ L_0895D3A4: } L_0895D3B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D3C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -2876,7 +2914,6 @@ L_0895D414: goto L_0895D41C; L_0895D41C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895D578; } @@ -2889,7 +2926,6 @@ L_0895D424: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[7] = (std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0895D578; } @@ -2921,7 +2957,6 @@ L_0895D488: ctx.gpr[9] = (ctx.gpr[10] - ctx.gpr[9]); ctx.gpr[10] = (ctx.gpr[9] < static_cast(30001) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_0895D4A4; } @@ -2933,7 +2968,6 @@ L_0895D4A0: L_0895D4A4: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(256))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_0895D51C; } @@ -2951,7 +2985,6 @@ L_0895D4C0: aot_fpr_13 = aot_fpr_15 - aot_fpr_13; aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_0895D4D8; @@ -2990,7 +3023,6 @@ L_0895D51C: L_0895D530: aot_gpr_4 = (static_cast(aot_gpr_16) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895D578; } @@ -3006,7 +3038,6 @@ L_0895D53C: AOT_REGCACHE_SYNC_OUT(); return; L_0895D550: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895D578; } @@ -3023,7 +3054,6 @@ L_0895D558: AOT_REGCACHE_SYNC_OUT(); return; L_0895D570: aot_gpr_31 = (0x0895D578u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895D578u) goto L_0895D578; AOT_REGCACHE_SYNC_OUT(); return; L_0895D578: @@ -3034,13 +3064,22 @@ L_0895D578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D588: aot_gpr_6 = (aot_gpr_5 | 0u); aot_gpr_5 = (0u | 0u); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(256))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_0895D5F4; } @@ -3052,7 +3091,6 @@ L_0895D59C: ctx.gpr[7] = (ctx.gpr[8] - ctx.gpr[7]); ctx.gpr[7] = (ctx.gpr[7] < static_cast(2001) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0895D5F4; } @@ -3108,7 +3146,6 @@ L_0895D5F4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895D610; } @@ -3117,7 +3154,6 @@ L_0895D5F4: L_0895D604: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(256))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895D618; } @@ -3129,18 +3165,37 @@ L_0895D610: goto L_0895D618; L_0895D618: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D620: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D628: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3175,7 +3230,17 @@ L_0895D664: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D678: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(ctx.fpr[20])); @@ -3184,7 +3249,6 @@ L_0895D678: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4224))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895D6E8; } @@ -3193,7 +3257,6 @@ L_0895D678: L_0895D698: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895D6E0; } @@ -3210,7 +3273,6 @@ L_0895D6A4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11072))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11068))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11076))); if (branch_taken) { @@ -3220,7 +3282,6 @@ L_0895D6A4: } L_0895D6D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D6F4; } @@ -3228,7 +3289,6 @@ L_0895D6D8: } L_0895D6E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D7E8; } @@ -3236,7 +3296,6 @@ L_0895D6E0: } L_0895D6E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D7E8; } @@ -3249,7 +3308,6 @@ L_0895D6F4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7896))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0895D70C; @@ -3258,7 +3316,6 @@ L_0895D6F4: L_0895D70C: ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0895D720; } @@ -3286,7 +3343,6 @@ L_0895D72C: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[20]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0895D750; @@ -3328,9 +3384,7 @@ L_0895D79C: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895D7E8; } @@ -3368,7 +3422,17 @@ L_0895D7E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895D800: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(ctx.fpr[20])); @@ -3380,7 +3444,6 @@ L_0895D800: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895D86C; } @@ -3408,7 +3471,6 @@ L_0895D82C: } L_0895D864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D880; } @@ -3416,7 +3478,6 @@ L_0895D864: } L_0895D86C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DC14; } @@ -3499,7 +3560,6 @@ L_0895D900: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 23 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895D920; } @@ -3509,7 +3569,6 @@ L_0895D910: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895D9A0; } @@ -3550,7 +3609,6 @@ L_0895D938: AOT_REGCACHE_SYNC_OUT(); return; L_0895D980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895D9A0; } @@ -3651,7 +3709,6 @@ L_0895DA38: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 22 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895DA58; } @@ -3661,7 +3718,6 @@ L_0895DA48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895DADC; } @@ -3703,7 +3759,6 @@ L_0895DA74: AOT_REGCACHE_SYNC_OUT(); return; L_0895DABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DADC; } @@ -3805,7 +3860,6 @@ L_0895DB78: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895DB98; } @@ -3815,7 +3869,6 @@ L_0895DB88: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895DC14; } @@ -3858,7 +3911,6 @@ L_0895DBB4: AOT_REGCACHE_SYNC_OUT(); return; L_0895DC00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DC14; } @@ -3883,7 +3935,17 @@ L_0895DC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DC38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u | 0u); @@ -3927,12 +3989,21 @@ L_0895DC80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DC88: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895DCBC; } @@ -3943,9 +4014,7 @@ L_0895DC98: aot_gpr_5 = (49736u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895DCC4; } @@ -3953,7 +4022,6 @@ L_0895DC98: } L_0895DCB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DDAC; } @@ -3961,7 +4029,6 @@ L_0895DCB4: } L_0895DCBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DDAC; } @@ -3979,7 +4046,6 @@ L_0895DCC4: aot_gpr_5 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); goto L_0895DCFC; @@ -4050,9 +4116,7 @@ L_0895DD2C: ctx.gpr[10] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895DD98; } @@ -4130,14 +4194,34 @@ L_0895DDAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DDB4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DDBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4172,7 +4256,17 @@ L_0895DDF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DE0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4180,7 +4274,6 @@ L_0895DE0C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895DE40; } @@ -4200,7 +4293,6 @@ L_0895DE28: } L_0895DE40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DE60; } @@ -4229,7 +4321,17 @@ L_0895DE60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DE74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4237,7 +4339,6 @@ L_0895DE74: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895DEA8; } @@ -4257,7 +4358,6 @@ L_0895DE90: } L_0895DEA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895DEC8; } @@ -4286,7 +4386,17 @@ L_0895DEC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DEDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4310,7 +4420,6 @@ L_0895DF00: L_0895DF0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(180))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895DF54; } @@ -4325,7 +4434,6 @@ L_0895DF20: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-17613), static_cast(ctx.gpr[17])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(180))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895DF4C; } @@ -4371,7 +4479,17 @@ L_0895DF68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DF84: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8636), aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8632), aot_gpr_5); @@ -4415,11 +4533,20 @@ L_0895DFC4: } L_0895DFD8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895DFE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4460,7 +4587,17 @@ L_0895E024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895E038: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4501,7 +4638,17 @@ L_0895E07C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895E090: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), aot_gpr_16); @@ -4550,7 +4697,6 @@ L_0895E0E0: } L_0895E0E8: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0895E344; } @@ -4617,7 +4763,6 @@ L_0895E110: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_5 = (static_cast(aot_gpr_5) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895E1C4; } @@ -4627,7 +4772,6 @@ L_0895E1B4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_5 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895E33C; } @@ -4641,7 +4785,6 @@ L_0895E1C4: aot_gpr_5 = (17430u << 16u); ctx.fpr[16] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[17]) ^ 0x80000000u); goto L_0895E1EC; @@ -4649,9 +4792,7 @@ L_0895E1C4: goto L_0895E1EC; L_0895E1EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895E33C; } @@ -4663,7 +4804,6 @@ L_0895E1FC: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); ctx.fpr[17] = ctx.fpr[17] - ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[17]) ^ 0x80000000u); goto L_0895E21C; @@ -4671,9 +4811,7 @@ L_0895E1FC: goto L_0895E21C; L_0895E21C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895E33C; } @@ -4766,9 +4904,7 @@ L_0895E22C: aot_gpr_5 = (aot_gpr_5 | 34079u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895E33C; } @@ -4842,7 +4978,6 @@ L_0895E2B8: AOT_REGCACHE_SYNC_OUT(); return; L_0895E33C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E89C; } @@ -4916,7 +5051,6 @@ L_0895E36C: goto L_0895E40C; L_0895E40C: aot_gpr_31 = (0x0895E414u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E414u) goto L_0895E414; AOT_REGCACHE_SYNC_OUT(); return; L_0895E414: @@ -4926,7 +5060,6 @@ L_0895E418: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(608))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895E458; } @@ -4941,7 +5074,6 @@ L_0895E428: goto L_0895E434; L_0895E434: aot_gpr_31 = (0x0895E43Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E43Cu) goto L_0895E43C; AOT_REGCACHE_SYNC_OUT(); return; L_0895E43C: @@ -4965,7 +5097,6 @@ L_0895E458: goto L_0895E464; L_0895E464: aot_gpr_31 = (0x0895E46Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E46Cu) goto L_0895E46C; AOT_REGCACHE_SYNC_OUT(); return; L_0895E46C: @@ -4975,7 +5106,6 @@ L_0895E470: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(816))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895E4B0; } @@ -4990,7 +5120,6 @@ L_0895E480: goto L_0895E48C; L_0895E48C: aot_gpr_31 = (0x0895E494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E494u) goto L_0895E494; AOT_REGCACHE_SYNC_OUT(); return; L_0895E494: @@ -5007,7 +5136,6 @@ L_0895E498: AOT_REGCACHE_SYNC_OUT(); return; L_0895E4B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E89C; } @@ -5081,7 +5209,6 @@ L_0895E4D8: } L_0895E578: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0895E6C0; } @@ -5089,7 +5216,6 @@ L_0895E578: } L_0895E580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E5A0; } @@ -5105,7 +5231,6 @@ L_0895E588: } L_0895E590: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895E660; } @@ -5113,7 +5238,6 @@ L_0895E590: } L_0895E598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E6C0; } @@ -5128,7 +5252,6 @@ L_0895E5A0: goto L_0895E5AC; L_0895E5AC: aot_gpr_31 = (0x0895E5B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E5B4u) goto L_0895E5B4; AOT_REGCACHE_SYNC_OUT(); return; L_0895E5B4: @@ -5138,7 +5261,6 @@ L_0895E5B8: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1024))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895E5F8; } @@ -5153,7 +5275,6 @@ L_0895E5C8: goto L_0895E5D4; L_0895E5D4: aot_gpr_31 = (0x0895E5DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E5DCu) goto L_0895E5DC; AOT_REGCACHE_SYNC_OUT(); return; L_0895E5DC: @@ -5170,7 +5291,6 @@ L_0895E5E0: AOT_REGCACHE_SYNC_OUT(); return; L_0895E5F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E6C0; } @@ -5185,7 +5305,6 @@ L_0895E600: goto L_0895E60C; L_0895E60C: aot_gpr_31 = (0x0895E614u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E614u) goto L_0895E614; AOT_REGCACHE_SYNC_OUT(); return; L_0895E614: @@ -5195,7 +5314,6 @@ L_0895E618: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895E658; } @@ -5210,7 +5328,6 @@ L_0895E628: goto L_0895E634; L_0895E634: aot_gpr_31 = (0x0895E63Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E63Cu) goto L_0895E63C; AOT_REGCACHE_SYNC_OUT(); return; L_0895E63C: @@ -5227,7 +5344,6 @@ L_0895E640: AOT_REGCACHE_SYNC_OUT(); return; L_0895E658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E6C0; } @@ -5242,7 +5358,6 @@ L_0895E660: goto L_0895E66C; L_0895E66C: aot_gpr_31 = (0x0895E674u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E674u) goto L_0895E674; AOT_REGCACHE_SYNC_OUT(); return; L_0895E674: @@ -5252,7 +5367,6 @@ L_0895E678: aot_gpr_4 = (aot_gpr_4 + static_cast(1488)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895E6B8; } @@ -5267,7 +5381,6 @@ L_0895E688: goto L_0895E694; L_0895E694: aot_gpr_31 = (0x0895E69Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895E69Cu) goto L_0895E69C; AOT_REGCACHE_SYNC_OUT(); return; L_0895E69C: @@ -5284,7 +5397,6 @@ L_0895E6A0: AOT_REGCACHE_SYNC_OUT(); return; L_0895E6B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E6C0; } @@ -5292,7 +5404,6 @@ L_0895E6B8: } L_0895E6C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E89C; } @@ -5357,7 +5468,6 @@ L_0895E6E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E89C; } @@ -5445,7 +5555,6 @@ L_0895E7AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895E89C; } @@ -5480,9 +5589,7 @@ L_0895E8AC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895E928; } @@ -5492,7 +5599,6 @@ L_0895E900: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(10))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0895E944; } @@ -5515,7 +5621,6 @@ L_0895E920: L_0895E928: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(10))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895E944; } @@ -5538,7 +5643,17 @@ L_0895E944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895E958: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5567,7 +5682,6 @@ L_0895E958: aot_gpr_5 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -5582,7 +5696,6 @@ L_0895E9D0: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_15 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5601,7 +5714,6 @@ L_0895E9F4: L_0895E9FC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(101), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895EC40; } @@ -5635,7 +5747,6 @@ L_0895EA3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895EBD4; } @@ -5670,7 +5781,6 @@ L_0895EA68: goto L_0895EAA4; L_0895EAA4: aot_gpr_31 = (0x0895EAACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895EAACu) goto L_0895EAAC; AOT_REGCACHE_SYNC_OUT(); return; L_0895EAAC: @@ -5703,7 +5813,6 @@ L_0895EACC: } L_0895EAD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895EB50; } @@ -5719,7 +5828,6 @@ L_0895EADC: } L_0895EAE4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895EBAC; } @@ -5727,7 +5835,6 @@ L_0895EAE4: } L_0895EAEC: aot_gpr_31 = (0x0895EAF4u); - // nop goto L_0895C9A8; L_0895EAF4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(4), ctx.gpr[2]); @@ -5748,7 +5855,6 @@ L_0895EB00: } L_0895EB08: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0895EB44; } @@ -5773,7 +5879,6 @@ L_0895EB1C: } L_0895EB24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895EB44; } @@ -5802,7 +5907,6 @@ L_0895EB44: goto L_0895EB48; L_0895EB48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895EBB0; } @@ -5818,7 +5922,6 @@ L_0895EB50: } L_0895EB58: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0895EB94; } @@ -5843,7 +5946,6 @@ L_0895EB6C: } L_0895EB74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895EB94; } @@ -5872,7 +5974,6 @@ L_0895EB94: goto L_0895EB98; L_0895EB98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895EBB0; } @@ -5893,7 +5994,6 @@ L_0895EBAC: L_0895EBB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0895EAA4; } @@ -5901,7 +6001,6 @@ L_0895EBB0: } L_0895EBBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895EBC4; } @@ -5909,7 +6008,6 @@ L_0895EBBC: } L_0895EBC4: aot_gpr_31 = (0x0895EBCCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B58974, 213u, 150u, 0x08B58974u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0213_entry, 213u, 150u, 0x08B58974u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895EBCCu) goto L_0895EBCC; AOT_REGCACHE_SYNC_OUT(); return; L_0895EBCC: @@ -5926,7 +6024,6 @@ L_0895EBD8: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 39 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895EBD8; } @@ -5936,7 +6033,6 @@ L_0895EBF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895EC3C; } @@ -5981,7 +6077,17 @@ L_0895EC40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895EC70: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(140), std::bit_cast(ctx.fpr[20])); @@ -6033,7 +6139,6 @@ L_0895EC70: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_4 | 0u); if (branch_taken) { @@ -6056,7 +6161,6 @@ L_0895ED24: L_0895ED28: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(48))); goto L_0895ED50; @@ -6148,7 +6252,6 @@ L_0895EDA4: goto L_0895EDAC; L_0895EDAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F06C; } @@ -6156,7 +6259,6 @@ L_0895EDAC: } L_0895EDB4: aot_gpr_31 = (0x0895EDBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 58u, 0x08AA8BC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895EDBCu) goto L_0895EDBC; AOT_REGCACHE_SYNC_OUT(); return; L_0895EDBC: @@ -6266,7 +6368,6 @@ L_0895EEE4: L_0895EEF8: aot_gpr_4 = (ctx.gpr[17] & 31u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F040; } @@ -6316,7 +6417,6 @@ L_0895EF04: aot_gpr_4 = (aot_gpr_4 << (aot_gpr_16 & 31u)); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0895EFCC; } @@ -6333,7 +6433,6 @@ L_0895EF68: AOT_REGCACHE_SYNC_OUT(); return; L_0895EF80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895EFC4; } @@ -6359,7 +6458,6 @@ L_0895EF88: AOT_REGCACHE_SYNC_OUT(); return; L_0895EFC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895F040; } @@ -6369,7 +6467,6 @@ L_0895EFCC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(59))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F040; } @@ -6386,7 +6483,6 @@ L_0895EFDC: AOT_REGCACHE_SYNC_OUT(); return; L_0895EFF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895F040; } @@ -6435,7 +6531,6 @@ L_0895F050: } L_0895F064: aot_gpr_31 = (0x0895F06Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895F06Cu) goto L_0895F06C; AOT_REGCACHE_SYNC_OUT(); return; L_0895F06C: @@ -6458,7 +6553,17 @@ L_0895F06C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895F0AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(368), std::bit_cast(ctx.fpr[20])); @@ -6495,7 +6600,6 @@ L_0895F0F4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(16), std::bit_cast(aot_fpr_12)); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(0u); if (branch_taken) { @@ -6519,7 +6623,6 @@ L_0895F138: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(16), std::bit_cast(aot_fpr_13)); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); goto L_0895F154; @@ -6529,7 +6632,6 @@ L_0895F154: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(16), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895F1A0; } @@ -6538,7 +6640,6 @@ L_0895F154: L_0895F164: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895F1A0; } @@ -6547,7 +6648,6 @@ L_0895F164: L_0895F170: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895F1A0; } @@ -6556,7 +6656,6 @@ L_0895F170: L_0895F17C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895F1A0; } @@ -6565,7 +6664,6 @@ L_0895F17C: L_0895F188: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895F1A0; } @@ -6574,7 +6672,6 @@ L_0895F188: L_0895F194: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F5A4; } @@ -6589,7 +6686,6 @@ L_0895F1A0: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_gpr_4 = (aot_gpr_29 + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_0895F1CC; @@ -6609,7 +6705,6 @@ L_0895F1E0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); goto L_0895F204; @@ -6806,7 +6901,6 @@ L_0895F21C: L_0895F2F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F594; } @@ -6923,7 +7017,6 @@ L_0895F3DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0895F410; } @@ -6938,7 +7031,6 @@ L_0895F3F0: AOT_REGCACHE_SYNC_OUT(); return; L_0895F400: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895F410; } @@ -7016,7 +7108,6 @@ L_0895F484: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); aot_gpr_4 = (aot_gpr_4 + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(ctx.fpr[20])) && ctx.fpr[24] == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); if (branch_taken) { @@ -7026,7 +7117,6 @@ L_0895F484: } L_0895F4A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0895F4C4; @@ -7055,7 +7145,6 @@ L_0895F4D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); if (branch_taken) { @@ -7065,9 +7154,7 @@ L_0895F4D0: } L_0895F4E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895F500; } @@ -7083,7 +7170,6 @@ L_0895F4F8: } L_0895F500: aot_gpr_31 = (0x0895F508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895F508u) goto L_0895F508; AOT_REGCACHE_SYNC_OUT(); return; L_0895F508: @@ -7154,7 +7240,6 @@ L_0895F514: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F594; } @@ -7163,7 +7248,6 @@ L_0895F514: L_0895F580: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895F594; } @@ -7203,7 +7287,17 @@ L_0895F5A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895F5E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -7211,7 +7305,6 @@ L_0895F5E0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_31); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0895F620; } @@ -7222,9 +7315,7 @@ L_0895F5FC: aot_gpr_5 = (49736u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895F628; } @@ -7232,7 +7323,6 @@ L_0895F5FC: } L_0895F618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895FA9C; } @@ -7240,7 +7330,6 @@ L_0895F618: } L_0895F620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895FA9C; } @@ -7364,9 +7453,7 @@ L_0895F6A8: L_0895F6B0: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895FA9C; } @@ -7381,7 +7468,6 @@ L_0895F6C4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-272)); aot_gpr_16 = (2238u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_16 + static_cast(12016)); if (branch_taken) { @@ -7644,7 +7730,6 @@ L_0895FA30: AOT_REGCACHE_SYNC_OUT(); return; L_0895FA44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0895FA64; } @@ -7659,7 +7744,6 @@ L_0895FA4C: AOT_REGCACHE_SYNC_OUT(); return; L_0895FA5C: aot_gpr_31 = (0x0895FA64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895FA64u) goto L_0895FA64; AOT_REGCACHE_SYNC_OUT(); return; L_0895FA64: @@ -7699,7 +7783,17 @@ L_0895FA9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0895FAB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-560)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(500), std::bit_cast(ctx.fpr[20])); @@ -7767,9 +7861,7 @@ L_0895FAF4: aot_gpr_5 = (16840u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895FC84; } @@ -7843,7 +7935,6 @@ L_0895FB80: goto L_0895FB88; L_0895FB88: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895FC84; } @@ -7859,7 +7950,6 @@ L_0895FB98: aot_gpr_4 = (aot_gpr_4 + static_cast(10)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895FC84; } @@ -7876,7 +7966,6 @@ L_0895FBB4: AOT_REGCACHE_SYNC_OUT(); return; L_0895FBBC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0895FBE8; } @@ -7892,7 +7981,6 @@ L_0895FBC4: AOT_REGCACHE_SYNC_OUT(); return; L_0895FBD8: aot_gpr_31 = (0x0895FBE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 596u, 0x08AD35ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0895FBE0u) goto L_0895FBE0; AOT_REGCACHE_SYNC_OUT(); return; L_0895FBE0: @@ -7943,7 +8031,6 @@ L_0895FC30: goto L_0895FC38; L_0895FC38: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0895FC70; } @@ -7980,7 +8067,6 @@ L_0895FC70: L_0895FC84: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 5u, 0x08960030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8039,7 +8125,6 @@ L_0895FCD8: L_0895FD18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895FF74; } @@ -8054,9 +8139,7 @@ L_0895FD24: ctx.fpr[22] = aot_fpr_12 / aot_fpr_13; ctx.fpr[22] = ctx.fpr[20] + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895FD54; } @@ -8068,7 +8151,6 @@ L_0895FD50: L_0895FD54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(145))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0895FD64; } @@ -8108,7 +8190,6 @@ L_0895FD98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(480))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(484))); if (branch_taken) { @@ -8192,7 +8273,6 @@ L_0895FDB0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895FEEC; } @@ -8201,9 +8281,7 @@ L_0895FDB0: L_0895FE10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(156))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0895FE90; } @@ -8288,7 +8366,6 @@ L_0895FE24: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0895FEEC; } @@ -8407,7 +8484,6 @@ L_0895FEEC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_0895FF38; @@ -8515,9 +8591,7 @@ L_0895FF88: aot_gpr_5 = (16864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 4u, 0x08960028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0087.cpp b/profiles/vcs/generated/generated_unit_0087.cpp index c73990a..13274ea 100644 --- a/profiles/vcs/generated/generated_unit_0087.cpp +++ b/profiles/vcs/generated/generated_unit_0087.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0087[4095] = { - 1, 0, 0, 0, 0, 0, 2, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 0, 14, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 25, 0, 0, 26, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 0, 41, 0, 42, 0, 0, - 0, 43, 0, 44, 0, 45, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 0, 0, 56, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, - 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, - 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 0, 82, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 92, 0, - 93, 0, 94, 95, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 0, 108, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 120, - 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 133, 0, 134, 0, 0, 135, 0, 136, 0, 137, - 0, 138, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, - 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 0, 154, 0, - 155, 0, 156, 0, 157, 0, 0, 0, 158, 0, 0, 0, 159, 0, 0, 0, 160, 0, 161, 0, 162, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 165, - 0, 0, 166, 0, 0, 167, 0, 168, 0, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 173, 0, 174, 0, 175, 0, 0, - 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 181, 0, 182, 0, 0, 0, 183, 0, 184, 185, 0, 186, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 225, 226, 0, 227, 0, 0, 228, 0, - 0, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 233, 234, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 239, 0, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 244, 245, 0, 246, 0, 0, 247, 0, 0, - 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 0, 251, 0, 252, 253, 0, 254, 0, 255, 0, 256, 0, 0, 0, 257, 0, 0, 0, 258, 0, 0, - 259, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, - 265, 0, 0, 266, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 269, 270, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 280, 0, 0, 0, 0, 281, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 0, - 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 294, 0, 295, 296, 0, 297, - 0, 298, 0, 299, 0, 300, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 307, 308, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 310, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 319, 0, - 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 322, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 325, 0, 0, - 326, 0, 0, 0, 327, 0, 328, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 332, - 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, - 0, 0, 0, 338, 0, 339, 0, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, - 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, - 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, - 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 359, 0, 360, 0, 0, - 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, - 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, - 372, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 378, 0, - 0, 379, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, - 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 387, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, - 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 0, 0, - 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, - 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 402, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, - 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, - 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 418, - 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 427, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 430, 0, 0, - 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, - 0, 0, 439, 0, 440, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 445, 0, 446, 0, 0, - 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 451, 0, - 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 0, - 457, 0, 458, 0, 0, 459, 0, 0, 460, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, - 0, 0, 465, 0, 466, 0, 0, 467, 0, 468, 0, 0, 469, 0, 470, 0, 0, 471, 0, 472, 473, 0, 474, 0, 0, 0, 475, 0, 0, 476, 477, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, - 0, 485, 0, 486, 0, 487, 488, 0, 0, 489, 0, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, - 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 496, 0, 0, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 0, 0, 0, 0, 502, 0, - 0, 503, 0, 0, 0, 504, 0, 0, 505, 0, 0, 0, 0, 0, 506, 507, 0, 508, 0, 0, 509, 0, 0, 0, 0, 0, 510, 511, 0, 512, 0, 0, - 513, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, - 518, 0, 0, 0, 519, 0, 520, 0, 0, 521, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, - 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, 530, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 532, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, - 536, 0, 0, 0, 537, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 542, 0, 0, - 0, 0, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 547, 0, 548, 0, 549, 0, 0, 550, 551, - 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, - 556, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 559, 560, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, - 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 576, - 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 580, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 584, - 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 589, 0, 0, 0, 590, 0, 591, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 594, - 0, 0, 0, 0, 595, 596, 0, 0, 0, 0, 597, 598, 0, 0, 0, 0, 599, 600, 0, 0, 0, 0, 0, 601, 602, 0, 0, 0, 603, 0, 0, 0, - 604, 0, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 608, 609, 0, 610, 0, 0, 611, 0, 612, 0, 0, 0, 0, 0, 613, - 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 617, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, - 0, 0, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, 0, - 628, 629, 0, 630, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 634, 0, 0, 635, 0, 636, 0, 0, 0, - 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 639, 0, 0, 0, 0, 0, 0, 640, 0, 0, 641, 0, 0, 642, 0, 0, 643, 0, 0, 0, 0, 0, - 0, 644, 0, 0, 0, 645, 0, 0, 646, 0, 0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 651, 0, 652, - 0, 653, 0, 654, 0, 655, 0, 656, 657, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 660, 0, 661, 0, 662, 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 666, 0, 667, 0, 668, 0, 669, 0, 670, 0, - 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 674, 0, 0, 675, 0, 676, 0, 0, 0, 677, 0, - 678, 0, 0, 0, 679, 0, 680, 0, 0, 0, 681, 0, 682, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 685, 686, 0, 0, 0, - 687, 0, 688, 0, 0, 0, 689, 0, 0, 690, 0, 0, 0, 0, 0, 691, 0, 692, 0, 693, 0, 0, 694, 0, 695, 0, 0, 696, 0, 697, 698, 0, - 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 706, 0, 707, 0, 708, 0, 0, 709, 710, 0, 711, 0, 712, 0, 0, - 0, 713, 0, 714, 0, 715, 0, 0, 0, 716, 0, 717, 0, 718, 0, 0, 719, 0, 720, 0, 0, 0, 721, 0, 722, 0, 723, 0, 724, 0, 725, 0, - 0, 0, 726, 0, 727, 0, 728, 0, 0, 729, 0, 730, 0, 0, 0, 731, 0, 732, 0, 733, 0, 734, 0, 735, 0, 0, 0, 0, 736, 0, 737, 0, - 0, 0, 738, 0, 739, 0, 0, 0, 0, 740, 0, 741, 0, 0, 0, 742, 0, 0, 743, 0, 0, 0, 744, 0, 745, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 746, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 749, 750, 0, 751, 0, 0, - 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 754, 0, 755, 756, 0, 0, 0, 0, 0, 757, 0, 0, 758, 0, 759, 0, 760, - 0, 761, 0, 762, 0, 0, 763, 0, 0, 764, 0, 0, 765, 0, 0, 766, 0, 0, 767, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 769, 0, 0, 770, 0, 0, 771, 0, 772, 0, 773, 0, 774, 0, 775, 0, 0, 776, 0, 0, 777, 0, 0, 0, 0, 0, 778, 0, 779, 780, 0, - 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 785, 0, 0, 0, 786, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, - 0, 0, 790, 0, 0, 0, 791, 0, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 0, 794, 0, 0, 795, 0, 0, 0, 0, 796, 0, 0, 0, 0, - 797, 0, 798, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 800, 0, 0, 801, 802, 0, 0, 0, 0, 0, 803, 0, 0, 804, 0, 805, 0, - 0, 0, 0, 0, 0, 806, 0, 0, 807, 808, 0, 0, 0, 0, 0, 0, 809, 0, 0, 810, 811, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 813, - 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 815, 0, 0, 816, 817, 0, 0, 818, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 820, - 0, 0, 821, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, - 0, 0, 0, 0, 826, 0, 0, 0, 827, 0, 0, 0, 828, 0, 0, 0, 829, 0, 0, 0, 0, 0, 830, 831, 0, 0, 0, 832, 0, 0, 833, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0087[64] = { + 0x0024081008001541ull, 0x000400A000206882ull, 0x0004648040010801ull, 0x2A2290040011802Aull, + 0x411455500410026Aull, 0x4410001101155400ull, 0x8210A88005510555ull, 0x4900000000000000ull, + 0x002142010080002Dull, 0x08A0211022808014ull, 0x222A444091000844ull, 0x4100088AA9448440ull, + 0x88951115511122AAull, 0x5A2D100A2A4222A4ull, 0x0040040040040000ull, 0x4004004004004004ull, + 0x0400400400400400ull, 0x0010010000420040ull, 0x1001001001001001ull, 0x0100100100100100ull, + 0x4B48108010010010ull, 0x25A40840488AD248ull, 0x04842101222AD248ull, 0x421052202288D109ull, + 0x2082A00000200000ull, 0x0010422AB4282908ull, 0x1001041041064041ull, 0x220A804040900404ull, + 0x2200448082002251ull, 0x0208008208208228ull, 0x2891054020204802ull, 0x1411002240410011ull, + 0x4101041250440089ull, 0x0240101040030410ull, 0x80089448808A0101ull, 0x8A08801122012020ull, + 0x2082282200448804ull, 0x0202048020208008ull, 0x4041001128910114ull, 0x2088412504400882ull, + 0xAA820200645A5294ull, 0x415510820820A26Aull, 0x200090412C12C122ull, 0xA088080820204251ull, + 0x2880015142144000ull, 0x00810410CAA80108ull, 0x00014804008C2041ull, 0x9011202120212000ull, + 0x0801000484115108ull, 0x11830C3080928840ull, 0x4208422882962209ull, 0x148A010B4208A220ull, + 0xA210912204920484ull, 0x55511540000803AAull, 0x1888145145280050ull, 0x2B2A5155694A8245ull, + 0x50AA8A5455452A2Aull, 0x2D00009001448A14ull, 0x0024924AA906A004ull, 0x200008106824AA92ull, + 0x0404108800400000ull, 0x520C820508484444ull, 0x88132040A0190320ull, 0x48C1111040208104ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0087[64] = { + 1u, 11u, 20u, 29u, 43u, 60u, 72u, 90u, 93u, 103u, 115u, 129u, 144u, 166u, 187u, 191u, + 197u, 202u, 207u, 213u, 218u, 229u, 248u, 265u, 282u, 288u, 304u, 315u, 326u, 338u, 348u, 361u, + 372u, 385u, 394u, 407u, 419u, 431u, 439u, 452u, 465u, 485u, 503u, 518u, 531u, 543u, 556u, 566u, + 577u, 588u, 604u, 621u, 637u, 653u, 671u, 687u, 713u, 738u, 752u, 769u, 784u, 790u, 806u, 821u, }; void recomp_unit_0087_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0087_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08960000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0087[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0087[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0087[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08960000; @@ -1022,7 +929,6 @@ L_08960018: goto L_08960020; L_08960020: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08960030; } @@ -1055,7 +961,17 @@ L_08960030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896006C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -1095,7 +1011,17 @@ L_089600C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089600D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -1132,7 +1058,6 @@ L_0896011C: AOT_REGCACHE_SYNC_OUT(); return; L_0896012C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08960138; } @@ -1155,7 +1080,17 @@ L_08960138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960154: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -1177,7 +1112,6 @@ L_08960154: AOT_REGCACHE_SYNC_OUT(); return; L_08960194: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08960200; } @@ -1194,7 +1128,6 @@ L_0896019C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960200; } @@ -1225,7 +1158,6 @@ L_089601C8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896022C; } @@ -1267,7 +1199,17 @@ L_0896022C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960240: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -1303,7 +1245,6 @@ L_08960278: L_0896029C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089602B4; } @@ -1329,7 +1270,17 @@ L_089602B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089602C8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -1345,7 +1296,6 @@ L_089602C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896033C; } @@ -1353,12 +1303,10 @@ L_089602C8: } L_08960304: aot_gpr_31 = (0x0896030Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896030Cu) goto L_0896030C; AOT_REGCACHE_SYNC_OUT(); return; L_0896030C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896033C; } @@ -1391,7 +1339,17 @@ L_08960340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960350: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -1428,7 +1386,6 @@ L_08960388: L_089603B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089603C4; } @@ -1450,16 +1407,24 @@ L_089603C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089603D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089603E4u); - // nop goto L_089602C8; L_089603E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08960414; } @@ -1467,13 +1432,11 @@ L_089603E4: } L_089603EC: aot_gpr_31 = (0x089603F4u); - // nop goto L_089602C8; L_089603F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08960414; } @@ -1481,11 +1444,9 @@ L_089603F4: } L_08960404: aot_gpr_31 = (0x0896040Cu); - // nop goto L_089602C8; L_0896040C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960418; } @@ -1501,7 +1462,17 @@ L_08960418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960424: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -1517,7 +1488,17 @@ L_08960424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960450: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5465))); @@ -1540,7 +1521,6 @@ L_08960468: aot_gpr_16 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089604B0; } @@ -1548,11 +1528,9 @@ L_08960468: } L_08960490: aot_gpr_31 = (0x08960498u); - // nop goto L_089602C8; L_08960498: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089604C8; } @@ -1560,7 +1538,6 @@ L_08960498: } L_089604A0: aot_gpr_31 = (0x089604A8u); - // nop goto L_089602C8; L_089604A8: { const bool branch_taken = 0u == 0u; @@ -1600,14 +1577,23 @@ L_089604D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089604E0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5465))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08960550; } @@ -1625,7 +1611,6 @@ L_089604F8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08960548; } @@ -1633,7 +1618,6 @@ L_089604F8: } L_08960528: aot_gpr_31 = (0x08960530u); - // nop goto L_089602C8; L_08960530: if (ctx.gpr[2] == 0u) { @@ -1643,7 +1627,6 @@ L_08960530: goto L_08960538; L_08960538: aot_gpr_31 = (0x08960540u); - // nop goto L_089602C8; L_08960540: { const bool branch_taken = 0u == 0u; @@ -1689,7 +1672,17 @@ L_08960580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960590: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -1716,7 +1709,6 @@ L_089605D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -1726,9 +1718,7 @@ L_089605D0: } L_089605E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08960600; } @@ -1744,12 +1734,10 @@ L_089605F8: } L_08960600: aot_gpr_31 = (0x08960608u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08960608u) goto L_08960608; AOT_REGCACHE_SYNC_OUT(); return; L_08960608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089606BC; } @@ -1757,7 +1745,6 @@ L_08960608: } L_08960610: aot_gpr_31 = (0x08960618u); - // nop goto L_089602C8; L_08960618: if (ctx.gpr[2] == 0u) { @@ -1767,13 +1754,11 @@ L_08960618: goto L_08960620; L_08960620: aot_gpr_31 = (0x08960628u); - // nop goto L_089602C8; L_08960628: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(20))); if (branch_taken) { @@ -1783,9 +1768,7 @@ L_08960628: } L_08960640: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08960658; } @@ -1801,12 +1784,10 @@ L_08960650: } L_08960658: aot_gpr_31 = (0x08960660u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08960660u) goto L_08960660; AOT_REGCACHE_SYNC_OUT(); return; L_08960660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089606BC; } @@ -1823,7 +1804,6 @@ L_08960668: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -1833,9 +1813,7 @@ L_08960668: } L_0896069C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089606B4; } @@ -1851,7 +1829,6 @@ L_089606AC: } L_089606B4: aot_gpr_31 = (0x089606BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089606BCu) goto L_089606BC; AOT_REGCACHE_SYNC_OUT(); return; L_089606BC: @@ -1866,7 +1843,17 @@ L_089606BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089606D0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -1930,11 +1917,20 @@ L_089606FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089607E0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08960800; } @@ -1943,7 +1939,6 @@ L_089607E0: L_089607EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(216))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960808; } @@ -1970,11 +1965,20 @@ L_08960808: goto L_0896080C; L_0896080C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960814: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(24), ctx.gpr[17]); @@ -2002,7 +2006,6 @@ L_0896085C: aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = ctx.fpr[22] + ctx.fpr[26]; goto L_08960880; @@ -2023,7 +2026,6 @@ L_08960880: L_089608A4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + ctx.fpr[26]; goto L_089608B8; @@ -2037,7 +2039,6 @@ L_089608B8: L_089608C0: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); goto L_089608D4; @@ -2054,9 +2055,7 @@ L_089608D4: aot_fpr_12 = aot_fpr_15 - aot_fpr_12; { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08960910; } @@ -2084,7 +2083,17 @@ L_08960910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896093C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -2098,7 +2107,6 @@ L_0896093C: AOT_REGCACHE_SYNC_OUT(); return; L_0896095C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08960990; } @@ -2108,7 +2116,6 @@ L_08960964: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960990; } @@ -2132,7 +2139,6 @@ L_08960974: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089609A0; } @@ -2167,7 +2173,17 @@ L_089609A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089609B4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -2181,7 +2197,6 @@ L_089609B4: AOT_REGCACHE_SYNC_OUT(); return; L_089609D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08960A08; } @@ -2191,7 +2206,6 @@ L_089609DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960A08; } @@ -2215,7 +2229,6 @@ L_089609EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960A18; } @@ -2250,7 +2263,17 @@ L_08960A18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960A2C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(52), ctx.gpr[18]); @@ -2287,7 +2310,6 @@ L_08960A7C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960CD0; } @@ -2297,7 +2319,6 @@ L_08960A98: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08960ACC; } @@ -2307,7 +2328,6 @@ L_08960AA8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08960ACC; } @@ -2316,7 +2336,6 @@ L_08960AA8: L_08960AB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960AD4; } @@ -2332,7 +2351,6 @@ L_08960AC4: } L_08960ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2358,9 +2376,7 @@ L_08960AF4: aot_gpr_4 = (aot_gpr_5 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08960B28; } @@ -2370,7 +2386,6 @@ L_08960B18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(380))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08960B84; } @@ -2387,7 +2402,6 @@ L_08960B28: L_08960B3C: aot_gpr_4 = (0u | 10u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08960B7C; } @@ -2402,7 +2416,6 @@ L_08960B48: AOT_REGCACHE_SYNC_OUT(); return; L_08960B58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08960B74; } @@ -2411,7 +2424,6 @@ L_08960B58: L_08960B60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960B8C; } @@ -2427,7 +2439,6 @@ L_08960B6C: } L_08960B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2435,7 +2446,6 @@ L_08960B74: } L_08960B7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2443,7 +2453,6 @@ L_08960B7C: } L_08960B84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2481,9 +2490,7 @@ L_08960BAC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08960C0C; } @@ -2503,7 +2510,6 @@ L_08960BE0: L_08960BF8: ctx.gpr[21] = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08960C14; } @@ -2511,7 +2517,6 @@ L_08960BF8: } L_08960C04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960CC8; } @@ -2519,7 +2524,6 @@ L_08960C04: } L_08960C0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2538,7 +2542,6 @@ L_08960C24: ctx.gpr[19] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08960C70; } @@ -2568,7 +2571,6 @@ L_08960C60: aot_gpr_5 = (0u | 7u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(528))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08960C80; } @@ -2582,7 +2584,6 @@ L_08960C70: goto L_08960C78; L_08960C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960CC8; } @@ -2590,7 +2591,6 @@ L_08960C78: } L_08960C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2619,7 +2619,6 @@ L_08960CB0: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(528))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08960CC8; } @@ -2627,7 +2626,6 @@ L_08960CB0: } L_08960CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2635,7 +2633,6 @@ L_08960CC0: } L_08960CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D08; } @@ -2664,7 +2661,6 @@ L_08960CEC: L_08960CFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(206)))))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08960D1C; } @@ -2673,7 +2669,6 @@ L_08960CFC: L_08960D08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960D24; } @@ -2689,7 +2684,6 @@ L_08960D14: } L_08960D1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2713,7 +2707,6 @@ L_08960D44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08960D6C; } @@ -2722,7 +2715,6 @@ L_08960D44: L_08960D58: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(324))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08960D74; } @@ -2730,7 +2722,6 @@ L_08960D58: } L_08960D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2738,7 +2729,6 @@ L_08960D64: } L_08960D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08960D8C; } @@ -2771,12 +2761,21 @@ L_08960D8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960DB0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08960DC8; } @@ -2795,16 +2794,24 @@ L_08960DC8: goto L_08960DCC; L_08960DCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960DD4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08960DEC; } @@ -2823,11 +2830,20 @@ L_08960DEC: goto L_08960DF0; L_08960DF0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08960DF8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (0u | 352u); @@ -3102,7 +3118,17 @@ L_08961144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08961158: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -3375,7 +3401,17 @@ L_0896149C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089614B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208))); @@ -3397,7 +3433,6 @@ L_089614CC: goto L_089614D8; L_089614D8: aot_gpr_31 = (0x089614E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089614E0u) goto L_089614E0; AOT_REGCACHE_SYNC_OUT(); return; L_089614E0: @@ -3411,7 +3446,6 @@ L_089614E4: L_089614EC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08961598; } @@ -3441,7 +3475,6 @@ L_08961518: L_08961524: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0896153C; } @@ -3480,7 +3513,6 @@ L_0896155C: L_0896156C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08961598; } @@ -3508,7 +3540,17 @@ L_08961598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089615AC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208))); @@ -3530,7 +3572,6 @@ L_089615C8: goto L_089615D4; L_089615D4: aot_gpr_31 = (0x089615DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089615DCu) goto L_089615DC; AOT_REGCACHE_SYNC_OUT(); return; L_089615DC: @@ -3544,7 +3585,6 @@ L_089615E0: L_089615E8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089616A0; } @@ -3575,7 +3615,6 @@ L_08961618: L_08961624: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0896163C; } @@ -3619,7 +3658,6 @@ L_08961664: L_08961674: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089616A0; } @@ -3647,13 +3685,22 @@ L_089616A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089616B4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(208))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089616DC; } @@ -3674,7 +3721,17 @@ L_089616DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089616E8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -3690,7 +3747,6 @@ L_089616E8: L_08961700: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0896173C; } @@ -3711,7 +3767,6 @@ L_08961720: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 61u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0896173C; } @@ -3719,7 +3774,6 @@ L_08961720: } L_08961730: aot_gpr_31 = (0x08961738u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 441u, 0x089AA5B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08961738u) goto L_08961738; AOT_REGCACHE_SYNC_OUT(); return; L_08961738: @@ -3729,7 +3783,6 @@ L_0896173C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_6 = (0u | 17u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896175C; } @@ -3739,7 +3792,6 @@ L_0896174C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_6 = (0u | 18u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08961764; } @@ -3747,7 +3799,6 @@ L_0896174C: } L_0896175C: aot_gpr_31 = (0x08961764u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 1022u, 0x08AC7C60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08961764u) goto L_08961764; AOT_REGCACHE_SYNC_OUT(); return; L_08961764: @@ -3758,7 +3809,17 @@ L_08961764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08961774: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -3777,7 +3838,6 @@ L_08961794: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089617E4; } @@ -3791,7 +3851,6 @@ L_089617A4: AOT_REGCACHE_SYNC_OUT(); return; L_089617B0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089617E4; } @@ -3827,7 +3886,17 @@ L_089617E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089617F8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -3898,7 +3967,17 @@ L_089617F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08961854: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-256)); aot_gpr_6 = (16128u << 16u); @@ -3928,7 +4007,6 @@ L_089618B4: AOT_REGCACHE_SYNC_OUT(); return; L_089618BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08961974; } @@ -3940,7 +4018,6 @@ L_089618C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896190C; } @@ -3952,7 +4029,6 @@ L_089618DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896190C; } @@ -3964,7 +4040,6 @@ L_089618F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08961974; } @@ -3975,7 +4050,6 @@ L_0896190C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08961974; } @@ -3989,7 +4063,6 @@ L_08961920: AOT_REGCACHE_SYNC_OUT(); return; L_0896192C: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_08961974; } @@ -4001,7 +4074,6 @@ L_08961934: aot_gpr_5 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_5 < static_cast(1000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08961970; } @@ -4031,7 +4103,6 @@ L_08961970: goto L_08961974; L_08961974: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08961984; } @@ -4048,7 +4119,6 @@ L_08961984: AOT_REGCACHE_SYNC_OUT(); return; L_0896198C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089627B8; } @@ -4058,7 +4128,6 @@ L_08961994: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089627B8; } @@ -4069,7 +4138,6 @@ L_089619A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962090; } @@ -4097,7 +4165,6 @@ L_089619D0: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_12 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(252))); if (branch_taken) { @@ -4143,9 +4210,7 @@ L_08961A48: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1544))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961D24; } @@ -4155,9 +4220,7 @@ L_08961A60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1548))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961D24; } @@ -4167,9 +4230,7 @@ L_08961A78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1536))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961C18; } @@ -4179,9 +4240,7 @@ L_08961A90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1540))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961C18; } @@ -4191,7 +4250,6 @@ L_08961AA8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(268))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16968u << 16u); if (branch_taken) { @@ -4209,7 +4267,6 @@ L_08961AC0: aot_fpr_15 = std::bit_cast(ctx.gpr[7]); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(244))); if (branch_taken) { @@ -4265,7 +4322,6 @@ L_08961B5C: ctx.fpr[17] = ctx.fpr[17] / ctx.fpr[16]; { const float fs = ctx.fpr[17]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_08961B98; @@ -4312,7 +4368,6 @@ L_08961BCC: { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08961BE4; @@ -4320,7 +4375,6 @@ L_08961BCC: goto L_08961BE4; L_08961BE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_15; goto L_08961C00; @@ -4352,7 +4406,6 @@ L_08961C10: L_08961C18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08961CA8; } @@ -4378,7 +4431,6 @@ L_08961C34: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(272))); if (branch_taken) { @@ -4438,7 +4490,6 @@ L_08961CB8: aot_gpr_6 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08961CF4; } @@ -4454,9 +4505,7 @@ L_08961CF4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9044))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961D14; } @@ -4480,9 +4529,7 @@ L_08961D24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1536))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962000; } @@ -4492,9 +4539,7 @@ L_08961D3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1540))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962000; } @@ -4504,9 +4549,7 @@ L_08961D54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1540))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961EF4; } @@ -4516,9 +4559,7 @@ L_08961D6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1548))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961EF4; } @@ -4528,7 +4569,6 @@ L_08961D84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(268))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16968u << 16u); if (branch_taken) { @@ -4546,7 +4586,6 @@ L_08961D9C: aot_fpr_15 = std::bit_cast(ctx.gpr[7]); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(244))); if (branch_taken) { @@ -4602,7 +4641,6 @@ L_08961E38: ctx.fpr[17] = ctx.fpr[17] / ctx.fpr[16]; { const float fs = ctx.fpr[17]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_08961E74; @@ -4649,7 +4687,6 @@ L_08961EA8: { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08961EC0; @@ -4657,7 +4694,6 @@ L_08961EA8: goto L_08961EC0; L_08961EC0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_15; goto L_08961EDC; @@ -4689,7 +4725,6 @@ L_08961EEC: L_08961EF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08961F84; } @@ -4715,7 +4750,6 @@ L_08961F10: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(272))); if (branch_taken) { @@ -4775,7 +4809,6 @@ L_08961F94: aot_gpr_6 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08961FD0; } @@ -4791,9 +4824,7 @@ L_08961FD0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9044))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08961FF0; } @@ -4816,7 +4847,6 @@ L_08961FF0: L_08962000: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962084; } @@ -4843,7 +4873,6 @@ L_0896201C: aot_gpr_6 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08962058; } @@ -4859,9 +4888,7 @@ L_08962058: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9044))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962078; } @@ -4891,7 +4918,6 @@ L_08962090: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089620C0; } @@ -4903,7 +4929,6 @@ L_089620A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089627A0; } @@ -4915,9 +4940,7 @@ L_089620C0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1232))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089623FC; } @@ -4927,9 +4950,7 @@ L_089620E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1236))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089623FC; } @@ -4939,7 +4960,6 @@ L_089620F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -4951,9 +4971,7 @@ L_08962110: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1244))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089622B0; } @@ -4963,9 +4981,7 @@ L_08962128: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089622B0; } @@ -4985,7 +5001,6 @@ L_08962144: aot_fpr_15 = std::bit_cast(ctx.gpr[7]); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(0u); if (branch_taken) { @@ -5041,7 +5056,6 @@ L_089621E4: ctx.fpr[17] = ctx.fpr[17] / ctx.fpr[16]; { const float fs = ctx.fpr[17]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_08962220; @@ -5092,7 +5106,6 @@ L_0896225C: { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0896227C; @@ -5100,7 +5113,6 @@ L_0896225C: goto L_0896227C; L_0896227C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_15; goto L_08962298; @@ -5132,7 +5144,6 @@ L_089622A8: L_089622B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(256))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962340; } @@ -5158,7 +5169,6 @@ L_089622CC: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(272))); if (branch_taken) { @@ -5229,9 +5239,7 @@ L_08962374: goto L_08962380; L_08962380: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089623EC; } @@ -5248,7 +5256,6 @@ L_08962390: aot_gpr_6 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089623CC; } @@ -5264,9 +5271,7 @@ L_089623CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9052))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089623EC; } @@ -5289,7 +5294,6 @@ L_089623EC: L_089623FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(256))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089624C4; } @@ -5327,9 +5331,7 @@ L_0896243C: goto L_08962448; L_08962448: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089624B4; } @@ -5346,7 +5348,6 @@ L_08962458: aot_gpr_6 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08962494; } @@ -5362,9 +5363,7 @@ L_08962494: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9052))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089624B4; } @@ -5388,9 +5387,7 @@ L_089624C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962674; } @@ -5400,9 +5397,7 @@ L_089624DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1244))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17584))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962674; } @@ -5412,7 +5407,6 @@ L_089624F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(268))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -5430,7 +5424,6 @@ L_0896250C: aot_fpr_15 = std::bit_cast(ctx.gpr[7]); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(264))); if (branch_taken) { @@ -5486,7 +5479,6 @@ L_089625A8: ctx.fpr[17] = ctx.fpr[17] / ctx.fpr[16]; { const float fs = ctx.fpr[17]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); goto L_089625E4; @@ -5537,7 +5529,6 @@ L_08962620: { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08962640; @@ -5545,7 +5536,6 @@ L_08962620: goto L_08962640; L_08962640: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_15; goto L_0896265C; @@ -5577,7 +5567,6 @@ L_0896266C: L_08962674: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962704; } @@ -5603,7 +5592,6 @@ L_08962690: aot_fpr_13 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(272))); if (branch_taken) { @@ -5658,7 +5646,6 @@ L_0896271C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(264))); aot_gpr_4 = (aot_gpr_4 < static_cast(2000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962788; } @@ -5675,7 +5662,6 @@ L_0896272C: aot_gpr_6 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08962768; } @@ -5691,9 +5677,7 @@ L_08962768: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9060))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962788; } @@ -5758,7 +5742,6 @@ L_089627F4: aot_gpr_6 = (aot_gpr_6 + static_cast(-31072)); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08962810; } @@ -5775,7 +5758,6 @@ L_08962808: L_08962810: aot_gpr_6 = (static_cast(aot_gpr_5) < 10001 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08962824; } @@ -5792,7 +5774,6 @@ L_0896281C: L_08962824: aot_gpr_6 = (static_cast(aot_gpr_5) < 1001 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08962838; } @@ -5809,7 +5790,6 @@ L_08962830: L_08962838: aot_gpr_5 = (static_cast(aot_gpr_5) < 51 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0896284C; } @@ -5828,7 +5808,6 @@ L_0896284C: goto L_08962850; L_08962850: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08962868; } @@ -5861,7 +5840,6 @@ L_08962878: aot_fpr_12 = aot_fpr_12 + ctx.fpr[20]; aot_mem.aot_direct_store32(aot_gpr_23 + static_cast(304), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(304))); goto L_089628A4; @@ -5873,7 +5851,6 @@ L_089628A4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_23 + static_cast(304), std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(304))); goto L_089628C4; @@ -5885,7 +5862,6 @@ L_089628C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962904; } @@ -5898,7 +5874,6 @@ L_089628DC: AOT_REGCACHE_SYNC_OUT(); return; L_089628E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08962904; } @@ -5938,7 +5913,6 @@ L_08962914: L_08962918: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(324))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08962934; } @@ -5952,7 +5926,6 @@ L_08962924: goto L_08962934; L_08962934: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -5964,7 +5937,6 @@ L_0896293C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896341C; } @@ -5976,7 +5948,6 @@ L_08962954: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896341C; } @@ -5988,7 +5959,6 @@ L_0896296C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896341C; } @@ -6000,7 +5970,6 @@ L_08962984: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896341C; } @@ -6033,7 +6002,6 @@ L_089629C0: goto L_089629C8; L_089629C8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -6046,7 +6014,6 @@ L_089629D0: AOT_REGCACHE_SYNC_OUT(); return; L_089629D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08962D54; } @@ -6058,7 +6025,6 @@ L_089629E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962D54; } @@ -6083,7 +6049,6 @@ L_08962A04: L_08962A14: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08962A3C; } @@ -6095,7 +6060,6 @@ L_08962A20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08962A3C; } @@ -6112,7 +6076,6 @@ L_08962A3C: L_08962A44: aot_gpr_4 = (0u | 7u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08962A6C; } @@ -6124,7 +6087,6 @@ L_08962A50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08962A6C; } @@ -6135,7 +6097,6 @@ L_08962A68: goto L_08962A6C; L_08962A6C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6144,7 +6105,6 @@ L_08962A6C: L_08962A74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6173,7 +6133,6 @@ L_08962A98: L_08962AB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962B18; } @@ -6199,9 +6158,7 @@ L_08962ABC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962B10; } @@ -6221,7 +6178,6 @@ L_08962B00: goto L_08962B10; L_08962B10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6251,7 +6207,6 @@ L_08962B38: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6265,7 +6220,6 @@ L_08962B54: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6277,7 +6231,6 @@ L_08962B74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(680))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6322,7 +6275,6 @@ L_08962BDC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08962C50; } @@ -6330,7 +6282,6 @@ L_08962BDC: } L_08962BF4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962C38; } @@ -6357,9 +6308,7 @@ L_08962BFC: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962C50; } @@ -6374,7 +6323,6 @@ L_08962C38: AOT_REGCACHE_SYNC_OUT(); return; L_08962C48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6385,7 +6333,6 @@ L_08962C50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08962C78; } @@ -6396,7 +6343,6 @@ L_08962C64: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08962C98; } @@ -6404,7 +6350,6 @@ L_08962C64: } L_08962C78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6419,7 +6364,6 @@ L_08962C80: AOT_REGCACHE_SYNC_OUT(); return; L_08962C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6427,7 +6371,6 @@ L_08962C90: } L_08962C98: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962CDC; } @@ -6454,7 +6397,6 @@ L_08962CA0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(0))); goto L_08962CF4; @@ -6469,7 +6411,6 @@ L_08962CDC: AOT_REGCACHE_SYNC_OUT(); return; L_08962CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6481,7 +6422,6 @@ L_08962CF4: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6492,7 +6432,6 @@ L_08962D0C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08962D4C; } @@ -6513,7 +6452,6 @@ L_08962D20: goto L_08962D4C; L_08962D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -6538,7 +6476,6 @@ L_08962D64: L_08962D6C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(324))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0896341C; } @@ -6552,7 +6489,6 @@ L_08962D7C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896341C; } @@ -6564,7 +6500,6 @@ L_08962D90: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0896341C; } @@ -6576,7 +6511,6 @@ L_08962DA8: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0896341C; } @@ -6604,7 +6538,6 @@ L_08962DDC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08962EB8; } @@ -6616,7 +6549,6 @@ L_08962E00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08962EB8; } @@ -6638,7 +6570,6 @@ L_08962E34: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08962EB8; } @@ -6651,7 +6582,6 @@ L_08962E4C: aot_gpr_5 = (0u | 278u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08962EB8; } @@ -6681,9 +6611,7 @@ L_08962E88: aot_gpr_4 = (aot_gpr_5 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08962EB8; } @@ -6839,7 +6767,6 @@ L_0896300C: aot_gpr_5 = (0u | 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963030; } @@ -6857,7 +6784,6 @@ L_08963020: } L_08963030: aot_gpr_31 = (0x08963038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08963038u) goto L_08963038; AOT_REGCACHE_SYNC_OUT(); return; L_08963038: @@ -6968,7 +6894,6 @@ L_0896313C: L_08963144: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -6977,7 +6902,6 @@ L_08963144: L_08963150: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(180))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -6991,7 +6915,6 @@ L_0896315C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963264; } @@ -7016,7 +6939,6 @@ L_08963194: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089631AC; } @@ -7030,7 +6952,6 @@ L_089631AC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089631C4; } @@ -7045,7 +6966,6 @@ L_089631C4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089631E0; } @@ -7058,7 +6978,6 @@ L_089631E0: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896320C; } @@ -7082,7 +7001,6 @@ L_0896320C: aot_gpr_4 = (aot_gpr_4 & 2u); aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963248; } @@ -7092,7 +7010,6 @@ L_08963224: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(380))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08963244; } @@ -7102,7 +7019,6 @@ L_08963234: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(380))); aot_gpr_5 = (0u | 233u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08963248; } @@ -7113,7 +7029,6 @@ L_08963244: goto L_08963248; L_08963248: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896325C; } @@ -7126,7 +7041,6 @@ L_08963250: goto L_08960A2C; L_0896325C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7138,7 +7052,6 @@ L_08963264: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08963294; } @@ -7153,7 +7066,6 @@ L_0896327C: AOT_REGCACHE_SYNC_OUT(); return; L_0896328C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7163,7 +7075,6 @@ L_08963294: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7174,7 +7085,6 @@ L_089632A4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0896341C; } @@ -7185,7 +7095,6 @@ L_089632B8: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_0896341C; } @@ -7197,7 +7106,6 @@ L_089632CC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896341C; } @@ -7221,7 +7129,6 @@ L_089632F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963384; } @@ -7231,7 +7138,6 @@ L_08963314: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963380; } @@ -7246,7 +7152,6 @@ L_08963324: AOT_REGCACHE_SYNC_OUT(); return; L_08963334: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08963384; } @@ -7278,7 +7183,6 @@ L_08963364: AOT_REGCACHE_SYNC_OUT(); return; L_08963378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08963384; } @@ -7289,7 +7193,6 @@ L_08963380: goto L_08963384; L_08963384: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7300,7 +7203,6 @@ L_0896338C: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089633CC; } @@ -7320,7 +7222,6 @@ L_089633A0: AOT_REGCACHE_SYNC_OUT(); return; L_089633C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7330,7 +7231,6 @@ L_089633CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(60))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7344,7 +7244,6 @@ L_089633DC: AOT_REGCACHE_SYNC_OUT(); return; L_089633E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896341C; } @@ -7370,7 +7269,6 @@ L_08963408: L_0896341C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(216))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089635C0; } @@ -7392,7 +7290,6 @@ L_08963428: L_08963444: aot_gpr_4 = (aot_gpr_16 < static_cast(1000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963494; } @@ -7401,7 +7298,6 @@ L_08963444: L_08963450: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(208))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963494; } @@ -7410,7 +7306,6 @@ L_08963450: L_0896345C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(218))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963494; } @@ -7436,7 +7331,6 @@ L_08963484: L_08963494: aot_gpr_4 = (aot_gpr_16 < static_cast(2001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089635C0; } @@ -7489,12 +7383,10 @@ L_089634F4: AOT_REGCACHE_SYNC_OUT(); return; L_089634FC: aot_gpr_31 = (0x08963504u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08963504u) goto L_08963504; AOT_REGCACHE_SYNC_OUT(); return; L_08963504: aot_gpr_31 = (0x0896350Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0158_entry, 158u, 11u, 0x08A7C6A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896350Cu) goto L_0896350C; AOT_REGCACHE_SYNC_OUT(); return; L_0896350C: @@ -7504,7 +7396,6 @@ L_0896350C: AOT_REGCACHE_SYNC_OUT(); return; L_08963514: aot_gpr_31 = (0x0896351Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896351Cu) goto L_0896351C; AOT_REGCACHE_SYNC_OUT(); return; L_0896351C: @@ -7523,7 +7414,6 @@ L_08963524: aot_gpr_5 = (aot_gpr_5 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08963598; } @@ -7552,11 +7442,9 @@ L_0896354C: goto L_08963598; L_08963598: aot_gpr_31 = (0x089635A0u); - // nop goto L_089602C8; L_089635A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089635C0; } @@ -7564,7 +7452,6 @@ L_089635A0: } L_089635A8: aot_gpr_31 = (0x089635B0u); - // nop goto L_089602C8; L_089635B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(72))); @@ -7576,7 +7463,6 @@ L_089635C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963778; } @@ -7584,11 +7470,9 @@ L_089635C0: } L_089635D0: aot_gpr_31 = (0x089635D8u); - // nop goto L_089602C8; L_089635D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089636EC; } @@ -7601,7 +7485,6 @@ L_089635E0: AOT_REGCACHE_SYNC_OUT(); return; L_089635E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089636EC; } @@ -7609,15 +7492,12 @@ L_089635E8: } L_089635F0: aot_gpr_31 = (0x089635F8u); - // nop goto L_089602C8; L_089635F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(40))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089636EC; } @@ -7625,7 +7505,6 @@ L_089635F8: } L_08963610: aot_gpr_31 = (0x08963618u); - // nop goto L_089602C8; L_08963618: aot_gpr_4 = (ctx.gpr[2] + static_cast(320)); @@ -7646,9 +7525,7 @@ L_08963618: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089636EC; } @@ -7656,12 +7533,10 @@ L_08963618: } L_0896364C: aot_gpr_31 = (0x08963654u); - // nop goto L_089602C8; L_08963654: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963690; } @@ -7669,13 +7544,11 @@ L_08963654: } L_08963660: aot_gpr_31 = (0x08963668u); - // nop goto L_089602C8; L_08963668: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08963690; } @@ -7683,13 +7556,11 @@ L_08963668: } L_08963678: aot_gpr_31 = (0x08963680u); - // nop goto L_089602C8; L_08963680: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089636EC; } @@ -7697,13 +7568,11 @@ L_08963680: } L_08963690: aot_gpr_31 = (0x08963698u); - // nop goto L_089602C8; L_08963698: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089636EC; } @@ -7711,16 +7580,13 @@ L_08963698: } L_089636A8: aot_gpr_31 = (0x089636B0u); - // nop goto L_089602C8; L_089636B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(40))); aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089636DC; } @@ -7753,7 +7619,6 @@ L_089636F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963778; } @@ -7761,13 +7626,11 @@ L_089636F0: } L_08963700: aot_gpr_31 = (0x08963708u); - // nop goto L_089602C8; L_08963708: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963778; } @@ -7782,7 +7645,6 @@ L_08963724: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(636))); goto L_0896373C; @@ -7790,7 +7652,6 @@ L_08963724: goto L_0896373C; L_0896373C: aot_gpr_31 = (0x08963744u); - // nop goto L_089602C8; L_08963744: aot_gpr_31 = (0x0896374Cu); @@ -7799,7 +7660,6 @@ L_08963744: L_0896374C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963778; } @@ -7807,7 +7667,6 @@ L_0896374C: } L_08963758: aot_gpr_31 = (0x08963760u); - // nop goto L_089602C8; L_08963760: aot_gpr_4 = (ctx.gpr[2] + static_cast(944)); @@ -7817,18 +7676,15 @@ L_08963760: AOT_REGCACHE_SYNC_OUT(); return; L_0896376C: aot_gpr_31 = (0x08963774u); - // nop goto L_089602C8; L_08963774: aot_mem.aot_direct_store32(ctx.gpr[2] + static_cast(1840), 0u); goto L_08963778; L_08963778: aot_gpr_31 = (0x08963780u); - // nop goto L_089602C8; L_08963780: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089638F0; } @@ -7844,13 +7700,11 @@ L_08963790: goto L_08963798; L_08963798: aot_gpr_31 = (0x089637A0u); - // nop goto L_089602C8; L_089637A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089637EC; } @@ -7858,7 +7712,6 @@ L_089637A0: } L_089637B0: aot_gpr_31 = (0x089637B8u); - // nop goto L_089602C8; L_089637B8: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -7868,7 +7721,6 @@ L_089637B8: AOT_REGCACHE_SYNC_OUT(); return; L_089637C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089637E4; } @@ -7876,7 +7728,6 @@ L_089637C4: } L_089637CC: aot_gpr_31 = (0x089637D4u); - // nop goto L_089602C8; L_089637D4: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -7897,13 +7748,11 @@ L_089637E4: } L_089637EC: aot_gpr_31 = (0x089637F4u); - // nop goto L_089602C8; L_089637F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896393C; } @@ -7911,7 +7760,6 @@ L_089637F4: } L_08963804: aot_gpr_31 = (0x0896380Cu); - // nop goto L_089602C8; L_0896380C: aot_gpr_31 = (0x08963814u); @@ -7930,7 +7778,6 @@ L_08963814: } L_08963824: aot_gpr_31 = (0x0896382Cu); - // nop goto L_089602C8; L_0896382C: aot_gpr_31 = (0x08963834u); @@ -7940,7 +7787,6 @@ L_0896382C: L_08963834: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08963858; } @@ -7948,7 +7794,6 @@ L_08963834: } L_08963840: aot_gpr_31 = (0x08963848u); - // nop goto L_089602C8; L_08963848: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(264))); @@ -7958,7 +7803,6 @@ L_08963848: goto L_08963858; L_08963858: aot_gpr_31 = (0x08963860u); - // nop goto L_089602C8; L_08963860: aot_gpr_31 = (0x08963868u); @@ -7967,7 +7811,6 @@ L_08963860: AOT_REGCACHE_SYNC_OUT(); return; L_08963868: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08963888; } @@ -7975,7 +7818,6 @@ L_08963868: } L_08963870: aot_gpr_31 = (0x08963878u); - // nop goto L_089602C8; L_08963878: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(264))); @@ -7985,7 +7827,6 @@ L_08963878: goto L_08963888; L_08963888: aot_gpr_31 = (0x08963890u); - // nop goto L_089602C8; L_08963890: aot_gpr_31 = (0x08963898u); @@ -7995,7 +7836,6 @@ L_08963890: L_08963898: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089638BC; } @@ -8003,7 +7843,6 @@ L_08963898: } L_089638A4: aot_gpr_31 = (0x089638ACu); - // nop goto L_089602C8; L_089638AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(264))); @@ -8013,7 +7852,6 @@ L_089638AC: goto L_089638BC; L_089638BC: aot_gpr_31 = (0x089638C4u); - // nop goto L_089602C8; L_089638C4: aot_gpr_31 = (0x089638CCu); @@ -8022,7 +7860,6 @@ L_089638C4: AOT_REGCACHE_SYNC_OUT(); return; L_089638CC: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_0896393C; } @@ -8030,7 +7867,6 @@ L_089638CC: } L_089638D4: aot_gpr_31 = (0x089638DCu); - // nop goto L_089602C8; L_089638DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(264))); @@ -8045,13 +7881,11 @@ L_089638DC: } L_089638F0: aot_gpr_31 = (0x089638F8u); - // nop goto L_08960424; L_089638F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963924; } @@ -8059,7 +7893,6 @@ L_089638F8: } L_08963908: aot_gpr_31 = (0x08963910u); - // nop goto L_08960424; L_08963910: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(264))); @@ -8074,7 +7907,6 @@ L_08963910: } L_08963924: aot_gpr_31 = (0x0896392Cu); - // nop goto L_08960424; L_0896392C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(264))); @@ -8085,7 +7917,6 @@ L_0896392C: L_0896393C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963B78; } @@ -8116,12 +7947,9 @@ L_08963960: { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[20])); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_6; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08963A48; } @@ -8174,7 +8002,6 @@ L_0896399C: aot_gpr_4 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (0u | 1u); if (branch_taken) { @@ -8231,7 +8058,6 @@ L_08963A08: AOT_REGCACHE_SYNC_OUT(); return; L_08963A34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08963A44; } @@ -8254,7 +8080,6 @@ L_08963A48: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08963AD4; } @@ -8295,7 +8120,6 @@ L_08963A7C: } L_08963A84: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08963AC8; } @@ -8365,9 +8189,7 @@ L_08963AD4: ctx.fpr[22] = ctx.fpr[22] - aot_fpr_14; { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08963B48; } @@ -8376,7 +8198,6 @@ L_08963AD4: L_08963B04: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17556))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963B54; } @@ -8385,7 +8206,6 @@ L_08963B04: L_08963B10: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17555))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963B54; } @@ -8393,12 +8213,10 @@ L_08963B10: } L_08963B1C: aot_gpr_31 = (0x08963B24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08963B24u) goto L_08963B24; AOT_REGCACHE_SYNC_OUT(); return; L_08963B24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08963B54; } @@ -8406,12 +8224,10 @@ L_08963B24: } L_08963B2C: aot_gpr_31 = (0x08963B34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 530u, 0x08AAE97Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08963B34u) goto L_08963B34; AOT_REGCACHE_SYNC_OUT(); return; L_08963B34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08963B54; } @@ -8420,7 +8236,6 @@ L_08963B34: L_08963B3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08963B54; } @@ -8435,7 +8250,6 @@ L_08963B54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(320))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9088))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9088))); goto L_08963B74; @@ -8498,7 +8312,17 @@ L_08963BAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08963BF4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-304)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(276), ctx.gpr[19]); @@ -8559,7 +8383,6 @@ L_08963CB0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8573,7 +8396,6 @@ L_08963CC8: aot_gpr_6 = (aot_gpr_6 & 255u); aot_gpr_4 = (aot_gpr_6 | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8635,7 +8457,6 @@ L_08963D58: aot_gpr_6 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8646,7 +8467,6 @@ L_08963D6C: aot_gpr_6 = (0u | 96u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8654,7 +8474,6 @@ L_08963D6C: } L_08963D80: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8679,7 +8498,6 @@ L_08963DA4: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08963DCC; } @@ -8688,7 +8506,6 @@ L_08963DA4: L_08963DBC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(380))); { const bool branch_taken = aot_gpr_6 != aot_gpr_23; - // nop if (branch_taken) { goto L_08963DCC; } @@ -8703,7 +8520,6 @@ L_08963DCC: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08963E50; } @@ -8712,7 +8528,6 @@ L_08963DCC: L_08963DE4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(380))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08963E50; } @@ -8733,7 +8548,6 @@ L_08963DF8: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08963E24; } @@ -8742,7 +8556,6 @@ L_08963DF8: L_08963E14: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_6 != aot_gpr_23; - // nop if (branch_taken) { goto L_08963E24; } @@ -8758,7 +8571,6 @@ L_08963E24: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08963E50; } @@ -8767,7 +8579,6 @@ L_08963E24: L_08963E40: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08963E50; } @@ -8783,9 +8594,7 @@ L_08963E50: aot_gpr_6 = (aot_gpr_6 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08963E7C; } @@ -8793,7 +8602,6 @@ L_08963E50: } L_08963E74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8819,7 +8627,6 @@ L_08963E98: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963EC4; } @@ -8828,7 +8635,6 @@ L_08963E98: L_08963EB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08963EC4; } @@ -8847,7 +8653,6 @@ L_08963ED0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08963EEC; @@ -8855,9 +8660,7 @@ L_08963ED0: goto L_08963EEC; L_08963EEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8914,7 +8717,6 @@ L_08963F78: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963FDC; } @@ -8947,7 +8749,6 @@ L_08963FC0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08963FDC; } @@ -8958,9 +8759,7 @@ L_08963FD8: goto L_08963FDC; L_08963FDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 6u, 0x089640B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8969,7 +8768,6 @@ L_08963FDC: L_08963FEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 3u, 0x0896408Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0088.cpp b/profiles/vcs/generated/generated_unit_0088.cpp index 54d1608..98cd3f9 100644 --- a/profiles/vcs/generated/generated_unit_0088.cpp +++ b/profiles/vcs/generated/generated_unit_0088.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0088[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 19, 0, 20, 0, 0, 21, 0, 0, 22, 0, 23, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 33, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 0, 38, 0, - 0, 39, 0, 0, 0, 40, 0, 0, 41, 42, 43, 0, 44, 0, 0, 45, 46, 0, 0, 0, 0, 47, 0, 48, 49, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, - 0, 59, 60, 0, 0, 0, 0, 61, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 0, - 0, 67, 0, 0, 68, 0, 69, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, - 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 97, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 0, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 107, 108, 109, 0, 110, 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, - 0, 0, 0, 113, 0, 0, 0, 0, 0, 114, 115, 116, 0, 117, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 119, 120, 121, 0, 122, 0, 0, - 0, 123, 0, 0, 0, 124, 0, 125, 126, 127, 0, 128, 0, 0, 0, 129, 130, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 133, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 0, 0, 0, 140, 141, 142, 0, 143, 144, 0, 0, 0, - 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 148, 0, 0, 149, 0, 150, 0, 0, 0, 0, 151, 0, 152, 0, - 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 155, 156, 0, 0, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, 163, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 166, - 0, 0, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 171, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, - 177, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, 0, - 183, 0, 0, 184, 0, 0, 185, 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 189, 0, 0, 190, 0, 0, 0, - 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, - 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 210, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 214, 0, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, - 0, 222, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 226, 0, 0, 0, 0, 0, 0, 227, 0, 0, - 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 233, 0, 0, 234, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, - 0, 240, 0, 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, - 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, - 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 256, - 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 0, 260, 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 269, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, - 272, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 282, 0, 0, - 0, 0, 283, 0, 0, 284, 0, 285, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 289, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 292, 0, 0, 0, 293, 0, 294, 295, 296, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, - 300, 301, 302, 0, 0, 0, 303, 0, 0, 304, 0, 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 309, 310, 0, - 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 314, 315, 316, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 319, 0, - 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 327, 0, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 331, 332, 0, 0, 0, 0, - 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 336, 0, 0, 337, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 0, 343, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, - 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 355, 0, 0, - 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 359, 0, 0, 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 0, 366, - 0, 367, 0, 368, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 373, 0, 374, 375, 0, 0, 376, 0, 377, 0, 0, 378, - 0, 0, 379, 0, 0, 380, 381, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 386, 0, 0, 0, 0, 387, 0, - 0, 0, 388, 0, 0, 389, 0, 0, 390, 0, 0, 391, 0, 0, 392, 0, 0, 393, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, - 398, 0, 399, 0, 0, 400, 0, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 404, 0, 405, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 0, 408, - 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 413, 0, 414, 0, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 422, 0, 0, 423, 0, 424, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 428, 0, 429, 0, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 0, 0, - 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 438, - 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 441, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 443, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 450, 0, 451, - 0, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 457, 0, 458, - 0, 459, 0, 460, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 464, - 0, 0, 0, 465, 0, 0, 466, 467, 0, 0, 0, 468, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 472, 0, 0, 0, 0, 0, - 473, 0, 0, 474, 0, 475, 476, 0, 0, 477, 478, 0, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, - 0, 0, 0, 0, 487, 0, 0, 488, 0, 489, 490, 0, 0, 491, 0, 0, 0, 492, 493, 0, 0, 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 496, - 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, - 504, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 507, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 509, 0, 510, 0, 511, 0, 0, 0, - 0, 512, 0, 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, - 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 532, 0, 0, - 0, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, 0, - 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 540, 0, 0, 541, 0, 0, 542, 0, 543, 0, 544, 0, 545, 0, - 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 548, 0, 549, 0, 550, 0, 551, 0, 0, 0, 0, 0, 552, 0, 553, - 0, 554, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, 0, 561, - 0, 0, 0, 0, 562, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, - 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 577, - 0, 578, 0, 579, 0, 580, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 583, 0, 584, 585, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, - 0, 588, 0, 589, 590, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 595, 0, 596, 597, 0, 0, 0, - 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 600, 0, 0, 601, 0, 602, 0, 603, 0, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 0, 608, 0, - 609, 0, 0, 0, 610, 0, 0, 0, 0, 0, 611, 0, 612, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 616, 0, - 617, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 624, 0, - 625, 0, 0, 626, 0, 627, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 632, 0, 0, 633, - 0, 0, 0, 0, 0, 0, 634, 0, 0, 635, 0, 636, 0, 0, 637, 0, 0, 0, 638, 0, 639, 0, 640, 0, 641, 0, 0, 0, 0, 0, 0, 642, - 0, 643, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 653, 0, 0, 654, 0, 655, 0, 0, 0, 0, 656, 0, - 657, 0, 658, 0, 659, 0, 660, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, - 0, 0, 0, 665, 0, 0, 666, 0, 667, 0, 668, 0, 669, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, 673, - 0, 0, 0, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 678, 0, 679, 0, 680, 0, 0, 681, 0, 0, 0, 682, 0, 683, 0, 0, 684, 0, - 685, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 690, 0, 691, 0, 692, 0, 0, 0, 0, 0, 0, - 0, 0, 693, 0, 0, 694, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 698, 0, 699, 0, 0, 700, 0, 0, 0, 701, 0, - 0, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 706, 0, 707, 0, 708, 0, - 709, 0, 0, 0, 710, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 713, 0, 714, 0, 715, 0, 0, 716, 0, - 717, 0, 718, 0, 0, 719, 0, 0, 0, 720, 0, 721, 0, 0, 722, 0, 723, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, - 726, 0, 727, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 731, 0, 732, 0, 0, 0, 0, 733, 0, - 734, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 0, 0, 740, 0, 741, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0088[64] = { + 0x000140AA00000001ull, 0x48000000008A4004ull, 0x000000010A4A9208ull, 0x0000000000008000ull, + 0x4000000000000000ull, 0x44925100C0012000ull, 0x2832114003A19722ull, 0x0014285214801486ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000020ull, 0x0040004000000000ull, + 0x0004000000000280ull, 0x0000000000000000ull, 0x0100000000000004ull, 0x2421000004200420ull, + 0x4000000010002004ull, 0x0281822088220800ull, 0x2E082E08222E0820ull, 0x1B85540489018BA2ull, + 0x9022348050A48408ull, 0x8400000000812400ull, 0x1820810100101090ull, 0x1220214908810121ull, + 0x0020488002091042ull, 0x0808080000000000ull, 0x4122080091004122ull, 0x2048808244102440ull, + 0x0209104091010488ull, 0x4000048412208122ull, 0x00000410820A0210ull, 0x2124920000012492ull, + 0x2A94010200000121ull, 0x04123A22004522A4ull, 0x448E082470412247ull, 0x0D02484000409122ull, + 0x0024924000000008ull, 0x2009249000000000ull, 0x1000000000002401ull, 0x9554920222440004ull, + 0x4228246494D4920Aull, 0x888A452520AA4924ull, 0x02248020024A4824ull, 0x8140010902A544A9ull, + 0x0010540020400100ull, 0xA1040920B400000Aull, 0x044098C88044002Aull, 0x2208140010012669ull, + 0x4208888890862690ull, 0x0004824215013005ull, 0x80281400088A0088ull, 0x0C00010428005080ull, + 0xA0AA400255268008ull, 0xAA85015081201542ull, 0x500D212A90101108ull, 0x4A52A5041A44281Aull, + 0x5081201542045411ull, 0x81544A4094820429ull, 0x08088455429AAAAAull, 0x4A254AA088211548ull, + 0x44AA102402A84089ull, 0x4A80821154808088ull, 0x42A0801508094A25ull, 0x5120000002001005ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0088[64] = { + 1u, 8u, 15u, 25u, 26u, 27u, 39u, 59u, 74u, 74u, 74u, 75u, 77u, 80u, 80u, 82u, + 90u, 94u, 105u, 123u, 145u, 161u, 167u, 177u, 191u, 201u, 204u, 216u, 228u, 240u, 251u, 259u, + 272u, 283u, 300u, 320u, 333u, 340u, 347u, 351u, 367u, 388u, 409u, 422u, 439u, 446u, 459u, 473u, + 487u, 504u, 517u, 528u, 537u, 554u, 572u, 588u, 609u, 625u, 643u, 665u, 685u, 702u, 717u, 734u, }; void recomp_unit_0088_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0088_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08964000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0088[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0088[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0088[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08964000; @@ -991,7 +898,6 @@ L_08964000: AOT_REGCACHE_SYNC_OUT(); return; L_08964084: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089640B8; } @@ -1004,7 +910,6 @@ L_0896408C: AOT_REGCACHE_SYNC_OUT(); return; L_08964094: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089640B8; } @@ -1022,7 +927,6 @@ L_0896409C: AOT_REGCACHE_SYNC_OUT(); return; L_089640B8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 785u, 0x08963C8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1053,7 +957,17 @@ L_089640C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964108: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -1166,7 +1080,6 @@ L_08964230: AOT_REGCACHE_SYNC_OUT(); return; L_0896423C: aot_gpr_31 = (0x08964244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 66u, 0x088807A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08964244u) goto L_08964244; AOT_REGCACHE_SYNC_OUT(); return; L_08964244: @@ -1188,7 +1101,6 @@ L_08964258: AOT_REGCACHE_SYNC_OUT(); return; L_08964264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896433C; } @@ -1265,7 +1177,17 @@ L_0896433C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089644F8: ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<4u>(ctx.gpr[8]); @@ -1296,7 +1218,17 @@ L_08964534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964540: ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); ctx.gpr[9] = (std::bit_cast(aot_fpr_13)); @@ -1376,7 +1308,17 @@ L_089645D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089645DC: aot_gpr_7 = (static_cast(aot_gpr_6) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; @@ -1737,11 +1679,20 @@ L_089647B4: } L_089647C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089647D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (std::bit_cast(aot_fpr_12)); @@ -1891,7 +1842,17 @@ L_089647D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964A14: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (std::bit_cast(aot_fpr_12)); @@ -1993,7 +1954,17 @@ L_08964A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964B98: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (aot_gpr_6 & 255u); @@ -2010,7 +1981,6 @@ L_08964B98: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_7 = (aot_gpr_6 + aot_gpr_7); { const bool branch_taken = aot_gpr_6 == aot_gpr_7; - // nop if (branch_taken) { goto L_08964C1C; } @@ -2033,7 +2003,6 @@ L_08964BD8: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_7 = (aot_gpr_7 + ctx.gpr[8]); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08964BD8; } @@ -2041,11 +2010,20 @@ L_08964BD8: } L_08964C1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964C24: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); aot_gpr_7 = (aot_mem.aot_direct_load_word_right(aot_gpr_4 + static_cast(0), aot_gpr_7)); @@ -2091,7 +2069,17 @@ L_08964C24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964CC8: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2176,7 +2164,17 @@ L_08964CC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964E08: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2235,7 +2233,17 @@ L_08964E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964EE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -2256,7 +2264,6 @@ L_08964F14: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08964F54; } @@ -2273,7 +2280,6 @@ L_08964F28: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08964F28; } @@ -2291,7 +2297,17 @@ L_08964F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964F68: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2318,7 +2334,17 @@ L_08964F68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -2328,7 +2354,17 @@ L_08964FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964FD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -2344,7 +2380,17 @@ L_08964FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08964FF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2368,7 +2414,17 @@ L_08965008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965034: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(ctx.fpr[24])); @@ -2426,7 +2482,17 @@ L_08965070: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089650F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -2438,7 +2504,6 @@ L_089650F8: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(16), std::bit_cast(aot_fpr_15)); if (branch_taken) { @@ -2450,7 +2515,6 @@ L_0896512C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); goto L_089651C0; @@ -2458,9 +2522,7 @@ L_0896512C: goto L_08965144; L_08965144: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896516C; } @@ -2470,7 +2532,6 @@ L_08965154: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); goto L_089651C0; @@ -2478,9 +2539,7 @@ L_08965154: goto L_0896516C; L_0896516C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08965194; } @@ -2490,7 +2549,6 @@ L_0896517C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); goto L_089651C0; @@ -2498,9 +2556,7 @@ L_0896517C: goto L_08965194; L_08965194: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089651DC; } @@ -2510,9 +2566,7 @@ L_089651A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089651DC; } @@ -2536,7 +2590,17 @@ L_089651DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089651E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(40))); @@ -2559,7 +2623,6 @@ L_08965214: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(44))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -2571,7 +2634,6 @@ L_0896522C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(48))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2587,7 +2649,6 @@ L_08965248: goto L_0896524C; L_0896524C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965340; } @@ -2597,7 +2658,6 @@ L_08965254: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08965340; } @@ -2607,7 +2667,6 @@ L_08965264: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(56))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08965340; } @@ -2617,7 +2676,6 @@ L_08965274: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(60))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(60))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -2629,7 +2687,6 @@ L_0896528C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2645,7 +2702,6 @@ L_089652A8: goto L_089652AC; L_089652AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965340; } @@ -2655,7 +2711,6 @@ L_089652B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(68))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -2667,7 +2722,6 @@ L_089652CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2683,7 +2737,6 @@ L_089652E8: goto L_089652EC; L_089652EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965340; } @@ -2722,7 +2775,6 @@ L_08965320: goto L_08965324; L_08965324: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965340; } @@ -2732,7 +2784,6 @@ L_0896532C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(76))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08965340; } @@ -2756,7 +2807,17 @@ L_08965340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965360: ctx.gpr[2] = (2198u << 16u); jump_target = aot_gpr_31; @@ -2764,12 +2825,21 @@ L_08965360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896536C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0896537Cu); - // nop goto L_08965360; L_0896537C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -2778,7 +2848,17 @@ L_0896537C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965388: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2807,7 +2887,6 @@ L_089653B8: goto L_089653C0; L_089653C0: aot_gpr_31 = (0x089653C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089653C8u) goto L_089653C8; AOT_REGCACHE_SYNC_OUT(); return; L_089653C8: @@ -2829,7 +2908,6 @@ L_089653E0: goto L_089653E4; L_089653E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089653F0; } @@ -2852,7 +2930,17 @@ L_089653F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896540C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2883,7 +2971,6 @@ L_0896543C: L_08965448: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896545C; } @@ -2906,14 +2993,34 @@ L_0896545C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965470: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 6u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965478: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -2950,7 +3057,17 @@ L_089654B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089654C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2980,7 +3097,17 @@ L_089654F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089654FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -3069,7 +3196,17 @@ L_089655E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089655FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3084,7 +3221,17 @@ L_08965610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896561C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3105,7 +3252,17 @@ L_08965630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965650: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_13)); @@ -3205,7 +3362,17 @@ L_08965720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965740: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3246,7 +3413,6 @@ L_08965780: L_0896578C: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089657A0; } @@ -3269,7 +3435,17 @@ L_089657A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089657B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3316,7 +3492,17 @@ L_08965804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965818: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3351,7 +3537,17 @@ L_0896584C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965864: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3480,7 +3676,17 @@ L_089659CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089659EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3515,7 +3721,17 @@ L_08965A20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965A38: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3563,7 +3779,17 @@ L_08965A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3598,7 +3824,17 @@ L_08965AE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965AF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3639,7 +3875,17 @@ L_08965B34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965B50: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3674,7 +3920,17 @@ L_08965B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3715,7 +3971,17 @@ L_08965BD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965BF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3750,7 +4016,17 @@ L_08965C28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965C40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3791,7 +4067,17 @@ L_08965C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965C98: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3826,7 +4112,17 @@ L_08965CCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3867,7 +4163,17 @@ L_08965D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -3902,7 +4208,17 @@ L_08965D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3917,7 +4233,17 @@ L_08965D9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965DA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_6); @@ -4017,7 +4343,17 @@ L_08965E90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08965EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4047,7 +4383,6 @@ L_08965EA8: L_08965F04: aot_gpr_4 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965F1C; } @@ -4061,7 +4396,6 @@ L_08965F10: L_08965F1C: aot_gpr_4 = (ctx.gpr[17] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965F34; } @@ -4075,7 +4409,6 @@ L_08965F28: L_08965F34: aot_gpr_4 = (ctx.gpr[17] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965FA4; } @@ -4111,7 +4444,6 @@ L_08965F40: L_08965FA4: aot_gpr_4 = (ctx.gpr[17] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965FBC; } @@ -4125,7 +4457,6 @@ L_08965FB0: L_08965FBC: aot_gpr_4 = (ctx.gpr[17] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965FD4; } @@ -4139,7 +4470,6 @@ L_08965FC8: L_08965FD4: aot_gpr_4 = (ctx.gpr[17] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08965FF4; } @@ -4155,7 +4485,6 @@ L_08965FE0: L_08965FF4: aot_gpr_4 = (ctx.gpr[17] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966014; } @@ -4171,7 +4500,6 @@ L_08966000: L_08966014: aot_gpr_4 = (ctx.gpr[17] & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966084; } @@ -4218,7 +4546,17 @@ L_08966084: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089660A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -4234,7 +4572,6 @@ L_089660A0: AOT_REGCACHE_SYNC_OUT(); return; L_089660C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089660E4; } @@ -4243,7 +4580,6 @@ L_089660C8: L_089660D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089660EC; } @@ -4251,7 +4587,6 @@ L_089660D0: } L_089660DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966108; } @@ -4259,7 +4594,6 @@ L_089660DC: } L_089660E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966148; } @@ -4273,9 +4607,7 @@ L_089660EC: L_089660F4: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896611C; } @@ -4284,7 +4616,6 @@ L_089660F4: L_08966108: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966124; } @@ -4292,7 +4623,6 @@ L_08966108: } L_08966114: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966140; } @@ -4300,7 +4630,6 @@ L_08966114: } L_0896611C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966148; } @@ -4330,7 +4659,17 @@ L_08966148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966158: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -4379,7 +4718,6 @@ L_089661B4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089661D0; } @@ -4394,7 +4732,6 @@ L_089661D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(44))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4406,7 +4743,6 @@ L_089661E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(48))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4424,7 +4760,6 @@ L_08966208: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966224; } @@ -4439,7 +4774,6 @@ L_08966224: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08966240; } @@ -4454,7 +4788,6 @@ L_08966240: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(60))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(60))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4466,7 +4799,6 @@ L_08966258: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4484,7 +4816,6 @@ L_08966278: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966294; } @@ -4499,7 +4830,6 @@ L_08966294: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(68))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4511,7 +4841,6 @@ L_089662AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4529,7 +4858,6 @@ L_089662CC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089662E8; } @@ -4544,7 +4872,6 @@ L_089662E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(56))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08966304; } @@ -4559,7 +4886,6 @@ L_08966304: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(40))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08966320; } @@ -4574,7 +4900,6 @@ L_08966320: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(76))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896633C; } @@ -4599,7 +4924,17 @@ L_0896633C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966358: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -4629,7 +4964,6 @@ L_08966398: L_089663AC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089663C4; } @@ -4638,7 +4972,6 @@ L_089663AC: L_089663B8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089663E8; } @@ -4679,7 +5012,17 @@ L_089663EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896640C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4719,7 +5062,6 @@ L_0896640C: L_08966498: aot_gpr_4 = (ctx.gpr[18] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089664B0; } @@ -4733,7 +5075,6 @@ L_089664A4: L_089664B0: aot_gpr_4 = (ctx.gpr[18] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089664C8; } @@ -4747,7 +5088,6 @@ L_089664BC: L_089664C8: aot_gpr_4 = (ctx.gpr[18] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966590; } @@ -4805,7 +5145,6 @@ L_089664D4: L_08966590: aot_gpr_4 = (ctx.gpr[18] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089665A8; } @@ -4819,7 +5158,6 @@ L_0896659C: L_089665A8: aot_gpr_4 = (ctx.gpr[18] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089665C0; } @@ -4833,7 +5171,6 @@ L_089665B4: L_089665C0: aot_gpr_4 = (ctx.gpr[18] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089665F4; } @@ -4854,7 +5191,6 @@ L_089665CC: L_089665F4: aot_gpr_4 = (ctx.gpr[18] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966628; } @@ -4875,7 +5211,6 @@ L_08966600: L_08966628: aot_gpr_4 = (ctx.gpr[18] & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089666F0; } @@ -4943,7 +5278,17 @@ L_089666F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966708: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5050,7 +5395,6 @@ L_089667F0: AOT_REGCACHE_SYNC_OUT(); return; L_089667FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966A64; } @@ -5058,7 +5402,6 @@ L_089667FC: } L_08966804: { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_08966898; } @@ -5169,7 +5512,6 @@ L_089668B4: } L_089668CC: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089669B8; } @@ -5306,7 +5648,6 @@ L_089669B8: } L_089669C4: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08966A58; } @@ -5385,7 +5726,6 @@ L_08966A4C: L_08966A58: ctx.gpr[18] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089668B4; } @@ -5410,7 +5750,17 @@ L_08966A64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5423,7 +5773,6 @@ L_08966A94: L_08966ABC: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(76))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08966AD4; } @@ -5432,7 +5781,6 @@ L_08966ABC: L_08966AC8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08966D74; } @@ -5468,7 +5816,6 @@ L_08966B0C: AOT_REGCACHE_SYNC_OUT(); return; L_08966B14: aot_gpr_31 = (0x08966B1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08966B1Cu) goto L_08966B1C; AOT_REGCACHE_SYNC_OUT(); return; L_08966B1C: @@ -5489,7 +5836,6 @@ L_08966B28: } L_08966B38: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08966CB0; } @@ -5497,7 +5843,6 @@ L_08966B38: } L_08966B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966B5C; } @@ -5506,7 +5851,6 @@ L_08966B40: L_08966B48: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08966BD8; } @@ -5514,7 +5858,6 @@ L_08966B48: } L_08966B54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966CB0; } @@ -5580,7 +5923,6 @@ L_08966BE0: aot_gpr_4 = (17160u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); if (branch_taken) { @@ -5645,7 +5987,6 @@ L_08966C74: goto L_08966CA8; L_08966CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08966D04; } @@ -5763,7 +6104,17 @@ L_08966DAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966DC8: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9092), static_cast(aot_gpr_4)); @@ -5774,7 +6125,17 @@ L_08966DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5785,12 +6146,10 @@ L_08966DE0: AOT_REGCACHE_SYNC_OUT(); return; L_08966DF4: aot_gpr_31 = (0x08966DFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08966DFCu) goto L_08966DFC; AOT_REGCACHE_SYNC_OUT(); return; L_08966DFC: aot_gpr_31 = (0x08966E04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 544u, 0x08AD323Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08966E04u) goto L_08966E04; AOT_REGCACHE_SYNC_OUT(); return; L_08966E04: @@ -5800,7 +6159,6 @@ L_08966E04: AOT_REGCACHE_SYNC_OUT(); return; L_08966E0C: aot_gpr_31 = (0x08966E14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08966E14u) goto L_08966E14; AOT_REGCACHE_SYNC_OUT(); return; L_08966E14: @@ -5827,7 +6185,17 @@ L_08966E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966E58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); @@ -5856,7 +6224,6 @@ L_08966E7C: L_08966E8C: aot_gpr_6 = (static_cast(aot_gpr_4) < 24 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08966EB0; } @@ -5902,7 +6269,17 @@ L_08966ED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966EE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); @@ -5926,7 +6303,6 @@ L_08966F00: } L_08966F0C: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08966F28; } @@ -5960,7 +6336,17 @@ L_08966F34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5970,7 +6356,6 @@ L_08966F40: ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_31 = (0x08966F70u); - // nop goto L_08966FCC; L_08966F70: aot_gpr_4 = (0u | 1u); @@ -6030,14 +6415,23 @@ L_08966FB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08966FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967048; } @@ -6071,7 +6465,6 @@ L_08967010: goto L_0896701C; L_0896701C: aot_gpr_31 = (0x08967024u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967024u) goto L_08967024; AOT_REGCACHE_SYNC_OUT(); return; L_08967024: @@ -6102,13 +6495,22 @@ L_08967048: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896705C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08967198; } @@ -6157,7 +6559,6 @@ L_089670AC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); aot_gpr_7 = (0u | 32u); { const bool branch_taken = aot_gpr_6 == aot_gpr_7; - // nop if (branch_taken) { goto L_089670F8; } @@ -6167,7 +6568,6 @@ L_089670BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_6 = (0u | 38u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089670F8; } @@ -6177,9 +6577,7 @@ L_089670CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(636))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(632))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089670F8; } @@ -6190,7 +6588,6 @@ L_089670E4: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967198; } @@ -6198,7 +6595,6 @@ L_089670E4: } L_089670F8: aot_gpr_31 = (0x08967100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967100u) goto L_08967100; AOT_REGCACHE_SYNC_OUT(); return; L_08967100: @@ -6247,7 +6643,6 @@ L_08967140: AOT_REGCACHE_SYNC_OUT(); return; L_08967160: aot_gpr_31 = (0x08967168u); - // nop goto L_08966FCC; L_08967168: aot_gpr_31 = (0x08967170u); @@ -6276,14 +6671,23 @@ L_08967198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089671A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896724C; } @@ -6337,9 +6741,7 @@ L_089671C8: aot_gpr_4 = (17224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896724C; } @@ -6349,7 +6751,6 @@ L_0896720C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967244; } @@ -6370,7 +6771,6 @@ L_0896721C: AOT_REGCACHE_SYNC_OUT(); return; L_08967244: aot_gpr_31 = (0x0896724Cu); - // nop goto L_08966FCC; L_0896724C: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); @@ -6380,12 +6780,21 @@ L_0896724C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896725C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9160))); aot_gpr_5 = (static_cast(aot_gpr_5) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089672A8; } @@ -6421,11 +6830,20 @@ L_0896726C: goto L_089672A8; L_089672A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089672B0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6448,21 +6866,40 @@ L_089672B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089672CC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9188), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089672D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9188))); { const std::uint32_t aot_run_words[6]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(84), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089673EC; } @@ -6532,9 +6969,7 @@ L_08967338: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08967374; } @@ -6559,9 +6994,7 @@ L_08967388: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089673E8; } @@ -6627,7 +7060,17 @@ L_089673EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896740C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -6640,7 +7083,6 @@ L_0896740C: goto L_0896743C; L_0896743C: aot_gpr_31 = (0x08967444u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967444u) goto L_08967444; AOT_REGCACHE_SYNC_OUT(); return; L_08967444: @@ -6649,7 +7091,6 @@ L_08967444: L_08967448: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08967468; } @@ -6658,7 +7099,6 @@ L_08967448: L_08967454: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967470; } @@ -6674,7 +7114,6 @@ L_08967460: } L_08967468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -6682,13 +7121,11 @@ L_08967468: } L_08967470: aot_gpr_31 = (0x08967478u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0089_entry, 89u, 96u, 0x08968588u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967478u) goto L_08967478; AOT_REGCACHE_SYNC_OUT(); return; L_08967478: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -6707,7 +7144,6 @@ L_08967484: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(208))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -6740,7 +7176,6 @@ L_089674CC: } L_089674D4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08967E88; } @@ -6773,7 +7208,6 @@ L_08967504: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08967528; } @@ -6791,7 +7225,6 @@ L_08967520: AOT_REGCACHE_SYNC_OUT(); return; L_08967528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -6815,7 +7248,6 @@ L_08967530: L_08967554: aot_gpr_4 = (ctx.gpr[17] < static_cast(2049) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967590; } @@ -6849,7 +7281,6 @@ L_08967590: } L_08967598: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089677F8; } @@ -6903,7 +7334,6 @@ L_089675EC: AOT_REGCACHE_SYNC_OUT(); return; L_089675F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896767C; } @@ -6913,7 +7343,6 @@ L_089675FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896767C; } @@ -6924,7 +7353,6 @@ L_0896760C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08967670; } @@ -6945,7 +7373,6 @@ L_08967630: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896767C; } @@ -6973,17 +7400,14 @@ L_08967670: AOT_REGCACHE_SYNC_OUT(); return; L_0896767C: aot_gpr_31 = (0x08967684u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 969u, 0x0897FE60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967684u) goto L_08967684; AOT_REGCACHE_SYNC_OUT(); return; L_08967684: aot_gpr_31 = (0x0896768Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 231u, 0x08AB92E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896768Cu) goto L_0896768C; AOT_REGCACHE_SYNC_OUT(); return; L_0896768C: aot_gpr_31 = (0x08967694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 366u, 0x08B41628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967694u) goto L_08967694; AOT_REGCACHE_SYNC_OUT(); return; L_08967694: @@ -7009,7 +7433,6 @@ L_089676B4: goto L_089676C0; L_089676C0: aot_gpr_31 = (0x089676C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089676C8u) goto L_089676C8; AOT_REGCACHE_SYNC_OUT(); return; L_089676C8: @@ -7039,7 +7462,6 @@ L_089676CC: AOT_REGCACHE_SYNC_OUT(); return; L_089676F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08967734; } @@ -7054,7 +7476,6 @@ L_089676F8: goto L_08967704; L_08967704: aot_gpr_31 = (0x0896770Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896770Cu) goto L_0896770C; AOT_REGCACHE_SYNC_OUT(); return; L_0896770C: @@ -7083,7 +7504,6 @@ L_08967710: AOT_REGCACHE_SYNC_OUT(); return; L_0896772C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967748; } @@ -7112,7 +7532,6 @@ L_08967758: goto L_08967764; L_08967764: aot_gpr_31 = (0x0896776Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896776Cu) goto L_0896776C; AOT_REGCACHE_SYNC_OUT(); return; L_0896776C: @@ -7154,7 +7573,6 @@ L_089677A0: L_089677A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089677BC; } @@ -7162,7 +7580,6 @@ L_089677A8: } L_089677B4: aot_gpr_31 = (0x089677BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089677BCu) goto L_089677BC; AOT_REGCACHE_SYNC_OUT(); return; L_089677BC: @@ -7177,7 +7594,6 @@ L_089677C4: goto L_08966DE0; L_089677D0: aot_gpr_31 = (0x089677D8u); - // nop goto L_089672D4; L_089677D8: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1936), std::bit_cast(ctx.fpr[20])); @@ -7187,7 +7603,6 @@ L_089677D8: AOT_REGCACHE_SYNC_OUT(); return; L_089677E4: aot_gpr_31 = (0x089677ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 376u, 0x08A92D5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089677ECu) goto L_089677EC; AOT_REGCACHE_SYNC_OUT(); return; L_089677EC: @@ -7197,7 +7612,6 @@ L_089677EC: goto L_089677F8; L_089677F8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08967888; } @@ -7207,7 +7621,6 @@ L_08967800: aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(208), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967830; } @@ -7219,7 +7632,6 @@ L_08967810: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967830; } @@ -7239,7 +7651,6 @@ L_08967838: aot_mem.aot_direct_store16(ctx.gpr[2] + static_cast(154), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967880; } @@ -7265,7 +7676,6 @@ L_08967864: AOT_REGCACHE_SYNC_OUT(); return; L_08967878: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967888; } @@ -7277,7 +7687,6 @@ L_08967880: goto L_08967888; L_08967888: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -7301,7 +7710,6 @@ L_08967890: L_089678B4: aot_gpr_4 = (ctx.gpr[19] < static_cast(2049) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089678F0; } @@ -7327,12 +7735,10 @@ L_089678DC: AOT_REGCACHE_SYNC_OUT(); return; L_089678F0: aot_gpr_31 = (0x089678F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089678F8u) goto L_089678F8; AOT_REGCACHE_SYNC_OUT(); return; L_089678F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089679AC; } @@ -7341,7 +7747,6 @@ L_089678F8: L_08967900: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089679AC; } @@ -7349,7 +7754,6 @@ L_08967900: } L_0896790C: aot_gpr_31 = (0x08967914u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967914u) goto L_08967914; AOT_REGCACHE_SYNC_OUT(); return; L_08967914: @@ -7367,7 +7771,6 @@ L_08967928: aot_gpr_4 = (ctx.gpr[1] | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089679A4; } @@ -7393,7 +7796,6 @@ L_0896795C: AOT_REGCACHE_SYNC_OUT(); return; L_08967968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896797C; } @@ -7412,7 +7814,6 @@ L_0896797C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(342))); aot_gpr_4 = (static_cast(aot_gpr_4) < 29 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089679AC; } @@ -7434,7 +7835,6 @@ L_089679A4: L_089679AC: aot_gpr_4 = (ctx.gpr[16] < static_cast(4001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089679D0; } @@ -7444,7 +7844,6 @@ L_089679B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(341))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089679D0; } @@ -7464,7 +7863,6 @@ L_089679D0: } L_089679D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967BF8; } @@ -7517,7 +7915,6 @@ L_08967A14: } L_08967A1C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08967A4C; } @@ -7569,7 +7966,6 @@ L_08967A4C: L_08967A50: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(338))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08967A64; } @@ -7609,7 +8005,6 @@ L_08967A88: AOT_REGCACHE_SYNC_OUT(); return; L_08967A90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08967B18; } @@ -7619,7 +8014,6 @@ L_08967A98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967B18; } @@ -7630,7 +8024,6 @@ L_08967AA8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08967B0C; } @@ -7651,7 +8044,6 @@ L_08967ACC: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08967B18; } @@ -7679,17 +8071,14 @@ L_08967B0C: AOT_REGCACHE_SYNC_OUT(); return; L_08967B18: aot_gpr_31 = (0x08967B20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 969u, 0x0897FE60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967B20u) goto L_08967B20; AOT_REGCACHE_SYNC_OUT(); return; L_08967B20: aot_gpr_31 = (0x08967B28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 231u, 0x08AB92E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967B28u) goto L_08967B28; AOT_REGCACHE_SYNC_OUT(); return; L_08967B28: aot_gpr_31 = (0x08967B30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 366u, 0x08B41628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967B30u) goto L_08967B30; AOT_REGCACHE_SYNC_OUT(); return; L_08967B30: @@ -7748,7 +8137,6 @@ L_08967B94: AOT_REGCACHE_SYNC_OUT(); return; L_08967B9C: aot_gpr_31 = (0x08967BA4u); - // nop goto L_089672D4; L_08967BA4: aot_gpr_31 = (0x08967BACu); @@ -7758,7 +8146,6 @@ L_08967BA4: L_08967BAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08967BC0; } @@ -7766,7 +8153,6 @@ L_08967BAC: } L_08967BB8: aot_gpr_31 = (0x08967BC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967BC0u) goto L_08967BC0; AOT_REGCACHE_SYNC_OUT(); return; L_08967BC0: @@ -7788,7 +8174,6 @@ L_08967BD4: AOT_REGCACHE_SYNC_OUT(); return; L_08967BE4: aot_gpr_31 = (0x08967BECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 376u, 0x08A92D5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967BECu) goto L_08967BEC; AOT_REGCACHE_SYNC_OUT(); return; L_08967BEC: @@ -7798,7 +8183,6 @@ L_08967BEC: goto L_08967BF8; L_08967BF8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08967C5C; } @@ -7814,7 +8198,6 @@ L_08967C0C: aot_mem.aot_direct_store16(ctx.gpr[2] + static_cast(154), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9193))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967C54; } @@ -7840,7 +8223,6 @@ L_08967C38: AOT_REGCACHE_SYNC_OUT(); return; L_08967C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967C5C; } @@ -7852,7 +8234,6 @@ L_08967C54: goto L_08967C5C; L_08967C5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -7876,7 +8257,6 @@ L_08967C64: L_08967C88: aot_gpr_4 = (ctx.gpr[16] < static_cast(2049) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967CC4; } @@ -7910,7 +8290,6 @@ L_08967CC4: } L_08967CCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967E38; } @@ -7934,7 +8313,6 @@ L_08967CE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08967D68; } @@ -7945,7 +8323,6 @@ L_08967CF8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08967D5C; } @@ -7966,7 +8343,6 @@ L_08967D1C: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08967D68; } @@ -7994,17 +8370,14 @@ L_08967D5C: AOT_REGCACHE_SYNC_OUT(); return; L_08967D68: aot_gpr_31 = (0x08967D70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 969u, 0x0897FE60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967D70u) goto L_08967D70; AOT_REGCACHE_SYNC_OUT(); return; L_08967D70: aot_gpr_31 = (0x08967D78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 231u, 0x08AB92E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967D78u) goto L_08967D78; AOT_REGCACHE_SYNC_OUT(); return; L_08967D78: aot_gpr_31 = (0x08967D80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 366u, 0x08B41628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967D80u) goto L_08967D80; AOT_REGCACHE_SYNC_OUT(); return; L_08967D80: @@ -8054,7 +8427,6 @@ L_08967DBC: goto L_08967F30; L_08967DDC: aot_gpr_31 = (0x08967DE4u); - // nop goto L_089672CC; L_08967DE4: aot_gpr_31 = (0x08967DECu); @@ -8064,7 +8436,6 @@ L_08967DE4: L_08967DEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08967E00; } @@ -8072,7 +8443,6 @@ L_08967DEC: } L_08967DF8: aot_gpr_31 = (0x08967E00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967E00u) goto L_08967E00; AOT_REGCACHE_SYNC_OUT(); return; L_08967E00: @@ -8094,7 +8464,6 @@ L_08967E14: AOT_REGCACHE_SYNC_OUT(); return; L_08967E24: aot_gpr_31 = (0x08967E2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 376u, 0x08A92D5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08967E2Cu) goto L_08967E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08967E2C: @@ -8104,7 +8473,6 @@ L_08967E2C: goto L_08967E38; L_08967E38: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08967E80; } @@ -8137,7 +8505,6 @@ L_08967E6C: AOT_REGCACHE_SYNC_OUT(); return; L_08967E80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -8145,7 +8512,6 @@ L_08967E80: } L_08967E88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -8162,7 +8528,6 @@ L_08967E90: ctx.gpr[16] = (ctx.gpr[16] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(208))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08967F08; } @@ -8195,7 +8560,6 @@ L_08967EE4: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08967F08; } @@ -8228,7 +8592,17 @@ L_08967F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08967F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), std::bit_cast(ctx.fpr[20])); diff --git a/profiles/vcs/generated/generated_unit_0089.cpp b/profiles/vcs/generated/generated_unit_0089.cpp index e5fd4bb..a8d181d 100644 --- a/profiles/vcs/generated/generated_unit_0089.cpp +++ b/profiles/vcs/generated/generated_unit_0089.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0089[4090] = { - 1, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 5, 0, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 10, 0, 11, 0, 12, 0, - 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 22, 0, 0, - 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 0, 29, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 36, 0, 37, 0, 38, 0, 0, 39, 0, 40, 41, 0, 42, 0, 43, 0, 0, 44, 0, - 45, 46, 0, 47, 0, 48, 0, 49, 0, 0, 50, 0, 0, 51, 0, 52, 53, 0, 54, 0, 55, 56, 0, 57, 0, 58, 0, 0, 59, 0, 60, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 67, 68, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 0, 73, - 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, - 83, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, - 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 0, 90, 0, 91, 0, 0, 92, 0, 93, 0, 94, 0, 95, 0, 0, 0, 0, - 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 99, 0, 100, 0, 101, 0, 0, 102, 0, 0, 103, 0, 0, 0, - 104, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 112, 0, 113, 114, 0, 0, 115, 0, - 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 118, 0, 119, 0, 120, 0, 121, 0, 0, 0, 122, 0, 123, 0, 0, 0, 124, 0, 125, 0, 0, 0, - 126, 0, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 133, 0, 0, 0, 134, - 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 137, 0, 138, 0, 139, 0, 140, 0, 0, 141, 0, 142, 0, 143, 0, 0, 144, 0, 145, 0, 146, - 0, 0, 147, 0, 148, 0, 149, 150, 0, 0, 151, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, 0, 158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, - 163, 0, 164, 165, 0, 166, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, 170, 171, 0, 0, 172, 0, 0, 0, 173, 0, 174, 0, 175, 0, 176, 0, - 0, 0, 0, 177, 0, 178, 0, 0, 179, 0, 180, 0, 181, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 187, 0, 0, 188, 0, 189, 190, 0, - 0, 191, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 200, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, - 203, 0, 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 207, 0, 208, 0, 0, 209, 0, 210, 0, 211, 0, 0, 212, 0, 213, 0, 214, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, - 0, 0, 226, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, - 0, 0, 0, 232, 0, 233, 0, 234, 235, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 239, 0, 0, 0, 240, - 0, 241, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, - 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 260, 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 0, 271, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 0, 0, 279, 0, 0, - 280, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 285, 0, - 286, 0, 0, 287, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 294, 0, - 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 307, - 0, 0, 308, 309, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, - 0, 0, 313, 314, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, - 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 324, - 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, - 329, 330, 0, 0, 0, 331, 0, 0, 0, 0, 332, 333, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, - 0, 338, 0, 339, 0, 340, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, - 0, 0, 0, 346, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 351, 0, 0, 0, - 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 359, 0, 0, - 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, - 0, 0, 0, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 374, 0, 375, - 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 381, 0, 382, 0, 0, 0, 0, 0, 383, 384, 0, 0, 0, 0, 385, 0, 386, 0, 0, 0, 0, 0, 387, 0, 388, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 391, 0, 0, 0, 392, 0, - 0, 0, 0, 393, 0, 394, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 400, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 405, 0, 406, - 0, 0, 0, 0, 407, 0, 408, 0, 409, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 411, 0, 412, 413, 0, 414, 0, 0, 0, 415, 0, 416, 0, - 417, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 426, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, - 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 437, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 441, 0, 442, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 445, 0, 446, 0, 447, 0, 0, 0, 448, - 449, 0, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, 458, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, - 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 465, 0, - 0, 0, 0, 0, 0, 466, 0, 0, 0, 467, 468, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 472, 473, 0, 474, - 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 476, 477, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, - 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 487, 0, 0, 0, - 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 497, 0, 498, 0, 499, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 505, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 511, - 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 515, 0, 0, 516, 517, 0, 518, 0, 0, 519, 520, 0, 0, 0, 0, 521, 0, 522, - 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 525, 0, 0, 0, 0, 526, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, - 529, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 534, 535, 0, 0, 0, 0, 0, 536, 0, 537, 0, 0, - 0, 538, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 544, 0, - 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, 547, 0, 548, 549, 0, 0, 0, 0, 0, 550, 0, 551, 0, 0, 0, 0, 552, 0, 553, - 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 0, 556, 0, 557, 558, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, 566, 0, 567, 0, 0, 0, - 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 572, 0, 0, 0, 0, 0, 0, 573, 0, 574, 0, 575, 0, 0, 0, 0, - 0, 0, 576, 577, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 0, 0, 0, 0, 0, - 583, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, 588, 0, 0, - 0, 0, 0, 0, 589, 0, 590, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, - 596, 0, 597, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, - 0, 602, 0, 0, 603, 0, 604, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 608, 0, 0, 0, 0, 0, 0, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 0, 614, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 617, 0, 618, 0, 619, 0, 620, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, - 0, 0, 625, 0, 0, 0, 0, 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, - 631, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 634, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 637, 0, - 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 641, 642, 0, - 0, 0, 643, 0, 0, 644, 0, 645, 0, 646, 0, 647, 0, 0, 648, 0, 0, 649, 0, 0, 650, 0, 0, 0, 651, 0, 0, 0, 0, 0, 652, 0, - 653, 654, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 658, 0, 0, 659, 0, 660, 0, 0, 0, 0, 0, - 0, 0, 0, 661, 0, 662, 0, 663, 0, 664, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 666, 667, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, - 0, 0, 0, 0, 670, 0, 671, 0, 672, 0, 0, 0, 0, 0, 0, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 0, 0, - 0, 0, 677, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 679, 0, 0, 0, 0, 680, 0, 0, 0, 0, 681, 0, 682, 0, 683, 0, 684, 0, - 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 690, - 0, 0, 691, 0, 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 695, 0, 0, - 696, 0, 0, 0, 0, 697, 0, 0, 698, 0, 0, 0, 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, 701, 0, 0, 0, 0, 702, 0, 0, 0, 0, - 703, 0, 0, 0, 0, 0, 0, 704, 0, 705, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 709, 0, 710, - 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 712, 0, 713, 0, 0, 0, 0, 0, 714, 0, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 0, - 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 721, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 723, 0, 724, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, - 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 0, 730, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 733, - 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, - 739, 0, 0, 0, 740, 0, 741, 742, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 744, 0, 745, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 749, 0, 750, 0, - 751, 0, 0, 752, 0, 0, 0, 0, 753, 0, 754, 0, 0, 755, 0, 0, 756, 0, 0, 0, 757, 0, 758, 759, 0, 0, 0, 0, 0, 760, 0, 0, - 0, 0, 0, 0, 761, 0, 0, 0, 0, 762, 0, 763, 0, 0, 764, 0, 0, 0, 0, 765, 0, 766, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, - 769, 0, 0, 770, 0, 771, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 774, 0, 775, - 776, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 779, 0, 780, 0, 0, 781, 0, 0, 0, 782, 0, 783, 784, 0, - 0, 0, 0, 0, 785, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, - 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 790, 0, 0, 791, 0, 0, 0, 0, 792, 0, 793, 0, 0, 794, - 0, 0, 0, 795, 0, 796, 797, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 799, 0, 0, 800, 0, 801, 0, 0, 802, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0089[64] = { + 0x0001500455248945ull, 0xA002A55528440084ull, 0x52B5A4AB4AD2A500ull, 0x8944688001500100ull, + 0x0800028148152488ull, 0x125504040AA52801ull, 0x4D0540000050000Bull, 0x88A1440514515450ull, + 0xA8A054D4A952A888ull, 0x551348AD24042000ull, 0x6908005004011528ull, 0x0494402000852102ull, + 0x10801000552A54A1ull, 0x0108040000000900ull, 0x0000100000000000ull, 0x4200029480000000ull, + 0x10080022882045A8ull, 0x2C14902854100200ull, 0x0000200200549000ull, 0x0100000012808500ull, + 0x5110008122AA2000ull, 0x5400000004020129ull, 0x8800000010055555ull, 0x1000002C8800002Cull, + 0x0804408089085208ull, 0x2000004800080C23ull, 0x002000284005442Aull, 0x8800001010900000ull, + 0x200201402A020800ull, 0x0A00000001000048ull, 0xA280000004000480ull, 0x05050C1400421084ull, + 0x0282142844500000ull, 0x51682150A1011210ull, 0x2A80050804010009ull, 0x002C210204250200ull, + 0x028100498A909488ull, 0x4888001020062820ull, 0x20502C40B1024620ull, 0x0000840814210810ull, + 0x0002000800006140ull, 0x888025000A1482A8ull, 0x10050841A1964888ull, 0x5084104228348205ull, + 0x04834840A141A420ull, 0x0A81502816108408ull, 0x304100050284808Cull, 0x08080A0508284150ull, + 0x8008140040A80152ull, 0x208402AA00080102ull, 0x4801842108440184ull, 0x41124AA464010004ull, + 0x14300AA805221103ull, 0x550842040A050150ull, 0x8400200040002040ull, 0x0844212121000484ull, + 0x24882820A0A08281ull, 0x0006100000000440ull, 0xA000184208040068ull, 0x014020D112080801ull, + 0x20D1250952000084ull, 0xA200012914284A10ull, 0x2000021068942041ull, 0x0252106894250002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0089[64] = { + 1u, 17u, 34u, 61u, 74u, 87u, 104u, 116u, 135u, 159u, 177u, 191u, 203u, 219u, 224u, 225u, + 232u, 245u, 259u, 266u, 273u, 286u, 295u, 308u, 317u, 329u, 338u, 349u, 355u, 364u, 369u, 376u, + 389u, 400u, 417u, 428u, 439u, 455u, 466u, 482u, 491u, 497u, 512u, 529u, 545u, 561u, 576u, 589u, + 602u, 614u, 625u, 638u, 653u, 670u, 685u, 691u, 703u, 718u, 723u, 734u, 746u, 761u, 776u, 788u, }; void recomp_unit_0089_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0089_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08968000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0089[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0089[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0089[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08968000; @@ -975,7 +882,6 @@ LOCAL_DISPATCH: } L_08968000: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08968018; } @@ -985,7 +891,6 @@ L_08968008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08968020; } @@ -1006,7 +911,6 @@ L_0896802C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08968048; } @@ -1072,7 +976,6 @@ L_089680B0: AOT_REGCACHE_SYNC_OUT(); return; L_089680B8: aot_gpr_31 = (0x089680C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 366u, 0x08B41628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089680C0u) goto L_089680C0; AOT_REGCACHE_SYNC_OUT(); return; L_089680C0: @@ -1113,7 +1016,6 @@ L_089680C0: ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(4))); jump_target = ctx.gpr[6]; aot_gpr_31 = (0x08968108u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968108u) goto L_08968108; AOT_REGCACHE_SYNC_OUT(); return; @@ -1177,17 +1079,14 @@ L_08968188: AOT_REGCACHE_SYNC_OUT(); return; L_08968190: aot_gpr_31 = (0x08968198u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 376u, 0x08A92D5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968198u) goto L_08968198; AOT_REGCACHE_SYNC_OUT(); return; L_08968198: aot_gpr_31 = (0x089681A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 421u, 0x0896DA24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089681A0u) goto L_089681A0; AOT_REGCACHE_SYNC_OUT(); return; L_089681A0: aot_gpr_31 = (0x089681A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 233u, 0x089910E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089681A8u) goto L_089681A8; AOT_REGCACHE_SYNC_OUT(); return; L_089681A8: @@ -1203,7 +1102,6 @@ L_089681B4: AOT_REGCACHE_SYNC_OUT(); return; L_089681BC: aot_gpr_31 = (0x089681C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 787u, 0x08A07508u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089681C4u) goto L_089681C4; AOT_REGCACHE_SYNC_OUT(); return; L_089681C4: @@ -1240,13 +1138,11 @@ L_089681FC: AOT_REGCACHE_SYNC_OUT(); return; L_08968220: aot_gpr_31 = (0x08968228u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968228u) goto L_08968228; AOT_REGCACHE_SYNC_OUT(); return; L_08968228: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896823C; } @@ -1254,7 +1150,6 @@ L_08968228: } L_08968234: aot_gpr_31 = (0x0896823Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896823Cu) goto L_0896823C; AOT_REGCACHE_SYNC_OUT(); return; L_0896823C: @@ -1271,7 +1166,6 @@ L_08968244: goto L_08968250; L_08968250: aot_gpr_31 = (0x08968258u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968258u) goto L_08968258; AOT_REGCACHE_SYNC_OUT(); return; L_08968258: @@ -1296,7 +1190,6 @@ L_0896826C: goto L_08968278; L_08968278: aot_gpr_31 = (0x08968280u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968280u) goto L_08968280; AOT_REGCACHE_SYNC_OUT(); return; L_08968280: @@ -1304,7 +1197,6 @@ L_08968280: goto L_08968284; L_08968284: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08968294; } @@ -1312,7 +1204,6 @@ L_08968284: } L_0896828C: aot_gpr_31 = (0x08968294u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968294u) goto L_08968294; AOT_REGCACHE_SYNC_OUT(); return; L_08968294: @@ -1335,7 +1226,6 @@ L_089682A8: goto L_089682B4; L_089682B4: aot_gpr_31 = (0x089682BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089682BCu) goto L_089682BC; AOT_REGCACHE_SYNC_OUT(); return; L_089682BC: @@ -1351,7 +1241,6 @@ L_089682C0: } L_089682C8: aot_gpr_31 = (0x089682D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089682D0u) goto L_089682D0; AOT_REGCACHE_SYNC_OUT(); return; L_089682D0: @@ -1395,7 +1284,17 @@ L_089682F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968320: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[17]); @@ -1464,7 +1363,6 @@ L_089683B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089683D8; } @@ -1474,7 +1372,6 @@ L_089683C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089683E0; } @@ -1495,7 +1392,6 @@ L_089683EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896841C; } @@ -1505,7 +1401,6 @@ L_089683FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896841C; } @@ -1515,7 +1410,6 @@ L_0896840C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08968428; } @@ -1623,7 +1517,6 @@ L_089684A4: ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(4))); jump_target = ctx.gpr[6]; aot_gpr_31 = (0x089684ECu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089684ECu) goto L_089684EC; AOT_REGCACHE_SYNC_OUT(); return; @@ -1668,7 +1561,6 @@ L_08968540: L_08968548: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896855C; } @@ -1676,7 +1568,6 @@ L_08968548: } L_08968554: aot_gpr_31 = (0x0896855Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896855Cu) goto L_0896855C; AOT_REGCACHE_SYNC_OUT(); return; L_0896855C: @@ -1686,7 +1577,6 @@ L_0896855C: AOT_REGCACHE_SYNC_OUT(); return; L_08968564: aot_gpr_31 = (0x0896856Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 231u, 0x08AB92E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896856Cu) goto L_0896856C; AOT_REGCACHE_SYNC_OUT(); return; L_0896856C: @@ -1703,7 +1593,17 @@ L_0896856C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968588: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9093))); @@ -1712,7 +1612,6 @@ L_08968588: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -1724,14 +1623,22 @@ L_089685A8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8608))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089685C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -1744,7 +1651,6 @@ L_089685C8: AOT_REGCACHE_SYNC_OUT(); return; L_089685D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08968718; } @@ -1860,7 +1766,6 @@ L_089686C8: goto L_089686E0; L_089686E0: aot_gpr_31 = (0x089686E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089686E8u) goto L_089686E8; AOT_REGCACHE_SYNC_OUT(); return; L_089686E8: @@ -1903,7 +1808,6 @@ L_08968728: AOT_REGCACHE_SYNC_OUT(); return; L_08968730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -1911,14 +1815,12 @@ L_08968730: } L_08968738: aot_gpr_31 = (0x08968740u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968740u) goto L_08968740; AOT_REGCACHE_SYNC_OUT(); return; L_08968740: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08968768; } @@ -1926,14 +1828,12 @@ L_08968740: } L_08968750: aot_gpr_31 = (0x08968758u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968758u) goto L_08968758; AOT_REGCACHE_SYNC_OUT(); return; L_08968758: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896882C; } @@ -1941,14 +1841,12 @@ L_08968758: } L_08968768: aot_gpr_31 = (0x08968770u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968770u) goto L_08968770; AOT_REGCACHE_SYNC_OUT(); return; L_08968770: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1156))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896882C; } @@ -1956,7 +1854,6 @@ L_08968770: } L_08968780: aot_gpr_31 = (0x08968788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968788u) goto L_08968788; AOT_REGCACHE_SYNC_OUT(); return; L_08968788: @@ -1979,7 +1876,6 @@ L_089687A8: AOT_REGCACHE_SYNC_OUT(); return; L_089687B8: aot_gpr_31 = (0x089687C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089687C0u) goto L_089687C0; AOT_REGCACHE_SYNC_OUT(); return; L_089687C0: @@ -1987,7 +1883,6 @@ L_089687C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896882C; } @@ -1995,14 +1890,12 @@ L_089687C0: } L_089687D4: aot_gpr_31 = (0x089687DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089687DCu) goto L_089687DC; AOT_REGCACHE_SYNC_OUT(); return; L_089687DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1156))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896882C; } @@ -2012,7 +1905,6 @@ L_089687EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896882C; } @@ -2040,17 +1932,14 @@ L_0896881C: goto L_0896882C; L_0896882C: aot_gpr_31 = (0x08968834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 494u, 0x0896705Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968834u) goto L_08968834; AOT_REGCACHE_SYNC_OUT(); return; L_08968834: aot_gpr_31 = (0x0896883Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 514u, 0x089671A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896883Cu) goto L_0896883C; AOT_REGCACHE_SYNC_OUT(); return; L_0896883C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2103,7 +1992,6 @@ L_08968888: AOT_REGCACHE_SYNC_OUT(); return; L_08968890: { const bool branch_taken = aot_gpr_16 != aot_gpr_2; - // nop if (branch_taken) { goto L_089689E8; } @@ -2115,7 +2003,6 @@ L_08968898: L_0896889C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089689E8; } @@ -2123,7 +2010,6 @@ L_0896889C: } L_089688A8: aot_gpr_31 = (0x089688B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089688B0u) goto L_089688B0; AOT_REGCACHE_SYNC_OUT(); return; L_089688B0: @@ -2137,7 +2023,6 @@ L_089688B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(636))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(632))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); goto L_089688FC; @@ -2145,7 +2030,6 @@ L_089688B8: goto L_089688D4; L_089688D4: aot_gpr_31 = (0x089688DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089688DCu) goto L_089688DC; AOT_REGCACHE_SYNC_OUT(); return; L_089688DC: @@ -2157,12 +2041,10 @@ L_089688DC: AOT_REGCACHE_SYNC_OUT(); return; L_089688EC: aot_gpr_31 = (0x089688F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 494u, 0x0896705Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089688F4u) goto L_089688F4; AOT_REGCACHE_SYNC_OUT(); return; L_089688F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089689F0; } @@ -2214,7 +2096,6 @@ L_08968968: L_08968974: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0896898C; } @@ -2253,7 +2134,6 @@ L_089689AC: goto L_089689B8; L_089689B8: aot_gpr_31 = (0x089689C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089689C0u) goto L_089689C0; AOT_REGCACHE_SYNC_OUT(); return; L_089689C0: @@ -2274,7 +2154,6 @@ L_089689D0: AOT_REGCACHE_SYNC_OUT(); return; L_089689E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089689F0; } @@ -2282,12 +2161,10 @@ L_089689E0: } L_089689E8: aot_gpr_31 = (0x089689F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 494u, 0x0896705Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089689F0u) goto L_089689F0; AOT_REGCACHE_SYNC_OUT(); return; L_089689F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2298,7 +2175,6 @@ L_089689F8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08968B40; } @@ -2306,7 +2182,6 @@ L_089689F8: } L_08968A0C: aot_gpr_31 = (0x08968A14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968A14u) goto L_08968A14; AOT_REGCACHE_SYNC_OUT(); return; L_08968A14: @@ -2408,7 +2283,6 @@ L_08968ACC: aot_gpr_4 = (aot_gpr_4 + static_cast(500)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9156), aot_gpr_4); aot_gpr_31 = (0x08968AE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 241u, 0x08AB93D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968AE0u) goto L_08968AE0; AOT_REGCACHE_SYNC_OUT(); return; L_08968AE0: @@ -2420,7 +2294,6 @@ L_08968AE0: goto L_08968AEC; L_08968AEC: aot_gpr_31 = (0x08968AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968AF4u) goto L_08968AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08968AF4: @@ -2458,7 +2331,6 @@ L_08968B34: AOT_REGCACHE_SYNC_OUT(); return; L_08968B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2469,7 +2341,6 @@ L_08968B48: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08968C14; } @@ -2514,7 +2385,6 @@ L_08968BB8: AOT_REGCACHE_SYNC_OUT(); return; L_08968BC8: aot_gpr_31 = (0x08968BD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08968BD0u) goto L_08968BD0; AOT_REGCACHE_SYNC_OUT(); return; L_08968BD0: @@ -2547,7 +2417,6 @@ L_08968C00: goto L_08968C14; L_08968C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2566,7 +2435,6 @@ L_08968C28: AOT_REGCACHE_SYNC_OUT(); return; L_08968C30: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2585,7 +2453,6 @@ L_08968C44: AOT_REGCACHE_SYNC_OUT(); return; L_08968C4C: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2604,7 +2471,6 @@ L_08968C60: AOT_REGCACHE_SYNC_OUT(); return; L_08968C68: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08968CDC; } @@ -2657,7 +2523,17 @@ L_08968CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968CF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { std::uint32_t aot_run_words[4]{}; @@ -2680,7 +2556,17 @@ L_08968D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (15374u << 16u); @@ -2716,7 +2602,6 @@ L_08968D2C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08968DCC; } @@ -2868,14 +2753,34 @@ L_08968F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968F88: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968F90: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(24), aot_gpr_5); jump_target = aot_gpr_31; @@ -2883,14 +2788,34 @@ L_08968F90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968F9C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08968FA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3035,7 +2960,17 @@ L_089690CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089690F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3070,7 +3005,17 @@ L_08969124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969150: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3099,14 +3044,34 @@ L_08969178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896918C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969194: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); @@ -3114,7 +3079,6 @@ L_08969194: aot_gpr_4 = (ctx.gpr[6] + aot_gpr_4); ctx.gpr[7] = (ctx.gpr[6] | 0u); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_089691E8; } @@ -3123,7 +3087,6 @@ L_08969194: L_089691B0: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_089691D0; } @@ -3132,7 +3095,6 @@ L_089691B0: L_089691BC: ctx.gpr[7] = (ctx.gpr[7] + static_cast(8)); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_089691B0; } @@ -3140,7 +3102,6 @@ L_089691BC: } L_089691C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089691E8; } @@ -3163,11 +3124,20 @@ L_089691E8: goto L_089691EC; L_089691EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089691F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(328), ctx.gpr[18]); @@ -3187,7 +3157,6 @@ L_089691F4: L_08969230: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08969328; } @@ -3201,7 +3170,6 @@ L_0896923C: AOT_REGCACHE_SYNC_OUT(); return; L_08969248: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08969284; } @@ -3267,7 +3235,6 @@ L_08969258: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08969320; } @@ -3495,7 +3462,6 @@ L_089692B4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089692B4; } @@ -3503,7 +3469,6 @@ L_089692B4: } L_08969320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896933C; } @@ -3667,7 +3632,6 @@ L_08969370: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08969434; } @@ -3796,7 +3760,6 @@ L_08969434: } L_08969444: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08969480; } @@ -3820,7 +3783,6 @@ L_08969454: } L_0896945C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08969480; } @@ -3878,12 +3840,21 @@ L_0896949C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089694D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089694E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089694E0u) goto L_089694E0; AOT_REGCACHE_SYNC_OUT(); return; L_089694E0: @@ -3894,21 +3865,51 @@ L_089694E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089694F0: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089694F8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(164))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969500: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); jump_target = aot_gpr_31; @@ -3916,14 +3917,34 @@ L_08969500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896950C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969514: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(44), aot_gpr_5); jump_target = aot_gpr_31; @@ -3931,7 +3952,17 @@ L_08969514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969520: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -3943,11 +3974,20 @@ L_08969520: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969544: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -3959,11 +3999,20 @@ L_08969544: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969568: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -4078,91 +4127,218 @@ L_08969568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089695E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089695F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089695F8: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969600: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969608: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1348))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969610: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969618: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969620: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969628: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969630: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1508))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969638: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1072))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969640: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(1508)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969648: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -4170,7 +4346,6 @@ L_08969648: aot_gpr_16 = (aot_gpr_4 | 0u); ctx.gpr[6] = (ctx.gpr[6] & 255u); aot_gpr_31 = (0x08969670u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 581u, 0x08A5A7FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08969670u) goto L_08969670; AOT_REGCACHE_SYNC_OUT(); return; L_08969670: @@ -4244,7 +4419,6 @@ L_08969670: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08969714; } @@ -4260,7 +4434,6 @@ L_089696EC: L_089696FC: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0896970C; } @@ -4271,7 +4444,6 @@ L_08969708: goto L_0896970C; L_0896970C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089696EC; } @@ -4354,7 +4526,6 @@ L_08969714: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08969794; } @@ -4370,7 +4541,6 @@ L_0896976C: L_0896977C: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0896978C; } @@ -4381,7 +4551,6 @@ L_08969788: goto L_0896978C; L_0896978C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0896976C; } @@ -4428,7 +4597,17 @@ L_08969794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089697F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4454,7 +4633,6 @@ L_0896980C: L_08969824: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08969838; } @@ -4477,7 +4655,17 @@ L_08969838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896984C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4489,7 +4677,6 @@ L_0896984C: L_08969860: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896989C; } @@ -4499,7 +4686,6 @@ L_0896986C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); ctx.gpr[6] = (0u | 16u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0896989C; } @@ -4525,7 +4711,6 @@ L_0896989C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089698B8; } @@ -4539,7 +4724,17 @@ L_089698B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089698C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -4547,7 +4742,6 @@ L_089698C8: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1256))); goto L_08969904; @@ -4556,9 +4750,7 @@ L_089698C8: L_089698EC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896998C; } @@ -4569,7 +4761,6 @@ L_08969900: goto L_08969904; L_08969904: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1584))); goto L_0896992C; @@ -4578,9 +4769,7 @@ L_08969904: L_08969914: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896998C; } @@ -4595,7 +4784,6 @@ L_0896992C: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_0896994C; @@ -4638,7 +4826,17 @@ L_0896998C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1300))); @@ -4670,9 +4868,7 @@ L_08969998: } L_089699F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08969A14; } @@ -4700,7 +4896,17 @@ L_08969A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969A28: aot_gpr_4 = (15759u << 16u); aot_gpr_4 = (aot_gpr_4 | 23593u); @@ -4709,21 +4915,50 @@ L_08969A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969A38: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969A40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969A48: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); @@ -4746,7 +4981,6 @@ L_08969A78: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08969A94; } @@ -4754,7 +4988,6 @@ L_08969A78: } L_08969A8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08969B70; } @@ -4888,7 +5121,17 @@ L_08969B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969B90: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(236), aot_gpr_16); @@ -4945,11 +5188,20 @@ L_08969C2C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8576))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08969C44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 + static_cast(2)); @@ -4971,7 +5223,6 @@ L_08969C64: AOT_REGCACHE_SYNC_OUT(); return; L_08969C6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0896A1D8; } @@ -5003,7 +5254,6 @@ L_08969CA0: aot_gpr_4 = (16256u << 16u); ctx.gpr[18] = (aot_gpr_2 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5035,7 +5285,6 @@ L_08969CF4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08969D18; } @@ -5044,7 +5293,6 @@ L_08969CF4: L_08969D0C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1493))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08969EDC; } @@ -5074,7 +5322,6 @@ L_08969D18: aot_gpr_5 = (aot_gpr_16 + static_cast(192)); aot_gpr_4 = (aot_gpr_16 + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08969D60; @@ -5154,7 +5401,6 @@ L_08969D60: AOT_REGCACHE_SYNC_OUT(); return; L_08969DE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08969EDC; } @@ -5181,7 +5427,6 @@ L_08969DEC: L_08969E1C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1493))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08969EDC; } @@ -5209,7 +5454,6 @@ L_08969E28: aot_gpr_5 = (aot_gpr_16 + static_cast(192)); ctx.gpr[6] = (aot_gpr_16 + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08969E68; @@ -5292,7 +5536,6 @@ L_08969EE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08969EFC; } @@ -5312,9 +5555,7 @@ L_08969EFC: L_08969F08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A050; } @@ -5323,9 +5564,7 @@ L_08969F08: L_08969F1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1220))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A050; } @@ -5334,9 +5573,7 @@ L_08969F1C: L_08969F30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A050; } @@ -5345,9 +5582,7 @@ L_08969F30: L_08969F44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A050; } @@ -5379,7 +5614,6 @@ L_08969F58: ctx.fpr[20] = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17428))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17428))); goto L_08969FAC; @@ -5394,9 +5628,7 @@ L_08969F90: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08969FE0; } @@ -5408,9 +5640,7 @@ L_08969FA8: L_08969FAC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A050; } @@ -5425,9 +5655,7 @@ L_08969FC8: aot_fpr_12 = std::bit_cast(aot_gpr_2); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A050; } @@ -5505,7 +5733,6 @@ L_0896A068: L_0896A078: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17416))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[19] | 0u); if (branch_taken) { @@ -5521,7 +5748,6 @@ L_0896A08C: L_0896A094: aot_gpr_4 = (16128u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5531,7 +5757,6 @@ L_0896A094: } L_0896A0A8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896A0DC; } @@ -5540,9 +5765,7 @@ L_0896A0A8: L_0896A0B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A0DC; } @@ -5574,7 +5797,6 @@ L_0896A0E4: { const float fs = aot_fpr_12; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_0896A110; @@ -5596,9 +5818,7 @@ L_0896A124: AOT_REGCACHE_SYNC_OUT(); return; L_0896A130: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A17C; } @@ -5610,7 +5830,6 @@ L_0896A140: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1588), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5621,9 +5840,7 @@ L_0896A140: L_0896A160: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A1D8; } @@ -5640,9 +5857,7 @@ L_0896A174: L_0896A17C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(3264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A1D4; } @@ -5674,7 +5889,6 @@ L_0896A1B4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17420))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_0896A1CC; @@ -5693,7 +5907,6 @@ L_0896A1D4: goto L_0896A1D8; L_0896A1D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896A5CC; } @@ -5825,7 +6038,6 @@ L_0896A2F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1280), static_cast(aot_gpr_4)); aot_gpr_4 = (ctx.gpr[6] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896A348; } @@ -5843,7 +6055,6 @@ L_0896A324: AOT_REGCACHE_SYNC_OUT(); return; L_0896A340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896A354; } @@ -5857,9 +6068,7 @@ L_0896A348: L_0896A354: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1588))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A3CC; } @@ -5870,7 +6079,6 @@ L_0896A368: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17408))); goto L_0896A3A0; @@ -5899,9 +6107,7 @@ L_0896A3A0: L_0896A3B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1588))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A3CC; } @@ -5912,7 +6118,6 @@ L_0896A3C8: goto L_0896A3CC; L_0896A3CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896A5CC; } @@ -5938,9 +6143,7 @@ L_0896A3D4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A41C; } @@ -5950,7 +6153,6 @@ L_0896A40C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896A430; } @@ -5964,7 +6166,6 @@ L_0896A41C: AOT_REGCACHE_SYNC_OUT(); return; L_0896A428: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896A43C; } @@ -6009,7 +6210,6 @@ L_0896A46C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896A498; } @@ -6021,7 +6221,6 @@ L_0896A47C: L_0896A480: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896A498; } @@ -6060,7 +6259,6 @@ L_0896A4C0: AOT_REGCACHE_SYNC_OUT(); return; L_0896A4DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896A5CC; } @@ -6084,7 +6282,6 @@ L_0896A4E4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(0u); if (branch_taken) { @@ -6187,7 +6384,6 @@ L_0896A5DC: L_0896A5EC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896A614; } @@ -6198,9 +6394,7 @@ L_0896A5F8: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A628; } @@ -6226,7 +6420,6 @@ L_0896A628: L_0896A638: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896A660; } @@ -6237,9 +6430,7 @@ L_0896A644: aot_gpr_5 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A674; } @@ -6257,7 +6448,6 @@ L_0896A670: goto L_0896A674; L_0896A674: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896A698; } @@ -6268,9 +6458,7 @@ L_0896A67C: aot_gpr_5 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A6AC; } @@ -6288,7 +6476,6 @@ L_0896A6A8: goto L_0896A6AC; L_0896A6AC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896A6D0; } @@ -6299,9 +6486,7 @@ L_0896A6B4: aot_gpr_5 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A6F4; } @@ -6309,7 +6494,6 @@ L_0896A6B4: } L_0896A6D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896A770; } @@ -6320,9 +6504,7 @@ L_0896A6D8: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A770; } @@ -6346,9 +6528,7 @@ L_0896A710: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A768; } @@ -6357,9 +6537,7 @@ L_0896A710: L_0896A72C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1220))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A768; } @@ -6368,9 +6546,7 @@ L_0896A72C: L_0896A740: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A768; } @@ -6379,9 +6555,7 @@ L_0896A740: L_0896A754: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A88C; } @@ -6400,9 +6574,7 @@ L_0896A770: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A88C; } @@ -6413,9 +6585,7 @@ L_0896A78C: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A7BC; } @@ -6424,9 +6594,7 @@ L_0896A78C: L_0896A7A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A88C; } @@ -6469,9 +6637,7 @@ L_0896A7BC: aot_gpr_5 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A820; } @@ -6488,9 +6654,7 @@ L_0896A818: L_0896A820: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896A838; } @@ -6558,7 +6722,17 @@ L_0896A88C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896A8C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -6578,7 +6752,6 @@ L_0896A8C4: } L_0896A90C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0896A9A0; } @@ -6591,7 +6764,6 @@ L_0896A914: AOT_REGCACHE_SYNC_OUT(); return; L_0896A91C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0896A9A0; } @@ -6631,7 +6803,6 @@ L_0896A950: } L_0896A964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896A9B4; } @@ -6658,7 +6829,6 @@ L_0896A96C: } L_0896A9A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B308; } @@ -6737,7 +6907,6 @@ L_0896AA1C: L_0896AA2C: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0896AA48; } @@ -6754,7 +6923,6 @@ L_0896AA44: goto L_0896AA48; L_0896AA48: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0896AA60; } @@ -6772,9 +6940,7 @@ L_0896AA5C: L_0896AA60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1588))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AA7C; } @@ -6795,9 +6961,7 @@ L_0896AA80: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1516))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AF18; } @@ -6806,9 +6970,7 @@ L_0896AA80: L_0896AA98: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AF18; } @@ -6817,9 +6979,7 @@ L_0896AA98: L_0896AAAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17392))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AF18; } @@ -6827,7 +6987,6 @@ L_0896AAAC: } L_0896AAC0: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0896AF18; } @@ -6851,9 +7010,7 @@ L_0896AAC8: } L_0896AAF0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896ABB0; } @@ -6861,7 +7018,6 @@ L_0896AAF0: } L_0896AB00: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896AB3C; } @@ -6872,9 +7028,7 @@ L_0896AB08: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AB74; } @@ -6884,9 +7038,7 @@ L_0896AB24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AB74; } @@ -6901,7 +7053,6 @@ L_0896AB3C: goto L_0896AB48; L_0896AB48: aot_gpr_31 = (0x0896AB50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896AB50u) goto L_0896AB50; AOT_REGCACHE_SYNC_OUT(); return; L_0896AB50: @@ -6957,9 +7108,7 @@ L_0896ABB0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896ABF0; } @@ -6968,9 +7117,7 @@ L_0896ABB0: L_0896ABC8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1588))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896ABF0; } @@ -6981,7 +7128,6 @@ L_0896ABDC: ctx.gpr[6] = (0u | 32u); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0896AC74; } @@ -6989,7 +7135,6 @@ L_0896ABDC: } L_0896ABF0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896AC28; } @@ -7000,9 +7145,7 @@ L_0896ABF8: aot_gpr_5 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AC60; } @@ -7011,9 +7154,7 @@ L_0896ABF8: L_0896AC14: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AC60; } @@ -7028,7 +7169,6 @@ L_0896AC28: goto L_0896AC34; L_0896AC34: aot_gpr_31 = (0x0896AC3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896AC3Cu) goto L_0896AC3C; AOT_REGCACHE_SYNC_OUT(); return; L_0896AC3C: @@ -7060,7 +7200,6 @@ L_0896AC60: } L_0896AC74: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896ACAC; } @@ -7071,7 +7210,6 @@ L_0896AC7C: aot_gpr_5 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); goto L_0896ACE8; @@ -7080,7 +7218,6 @@ L_0896AC7C: L_0896AC98: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); goto L_0896ACE8; @@ -7095,7 +7232,6 @@ L_0896ACAC: goto L_0896ACB8; L_0896ACB8: aot_gpr_31 = (0x0896ACC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896ACC0u) goto L_0896ACC0; AOT_REGCACHE_SYNC_OUT(); return; L_0896ACC0: @@ -7124,7 +7260,6 @@ L_0896ACE8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0896AD68; } @@ -7135,9 +7270,7 @@ L_0896AD0C: aot_gpr_5 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AD64; } @@ -7146,9 +7279,7 @@ L_0896AD0C: L_0896AD28: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1236))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AD64; } @@ -7157,9 +7288,7 @@ L_0896AD28: L_0896AD3C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AD64; } @@ -7168,9 +7297,7 @@ L_0896AD3C: L_0896AD50: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1244))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AD68; } @@ -7181,7 +7308,6 @@ L_0896AD64: goto L_0896AD68; L_0896AD68: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896AE88; } @@ -7202,7 +7328,6 @@ L_0896AD70: } L_0896AD8C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0896ADB8; } @@ -7213,9 +7338,7 @@ L_0896AD94: aot_gpr_4 = (16128u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896ADB8; } @@ -7231,7 +7354,6 @@ L_0896ADB0: } L_0896ADB8: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_0896ADE4; } @@ -7242,9 +7364,7 @@ L_0896ADC0: aot_gpr_4 = (16128u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896ADE4; } @@ -7260,7 +7380,6 @@ L_0896ADDC: } L_0896ADE4: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0896AE0C; } @@ -7271,9 +7390,7 @@ L_0896ADEC: aot_gpr_4 = (16128u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AE0C; } @@ -7284,7 +7401,6 @@ L_0896AE08: goto L_0896AE0C; L_0896AE0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(32))); goto L_0896AE64; @@ -7296,9 +7412,7 @@ L_0896AE1C: ctx.fpr[20] = ctx.fpr[20] / aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AE48; } @@ -7336,7 +7450,6 @@ L_0896AE64: goto L_0896AE80; L_0896AE80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896AEC0; } @@ -7362,7 +7475,6 @@ L_0896AEC0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); goto L_0896AEF4; @@ -7372,9 +7484,7 @@ L_0896AED8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1532))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AF10; } @@ -7394,7 +7504,6 @@ L_0896AEF4: goto L_0896AF10; L_0896AF10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B194; } @@ -7402,7 +7511,6 @@ L_0896AF10: } L_0896AF18: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896AF4C; } @@ -7412,9 +7520,7 @@ L_0896AF20: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AF4C; } @@ -7423,9 +7529,7 @@ L_0896AF20: L_0896AF38: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AF80; } @@ -7433,7 +7537,6 @@ L_0896AF38: } L_0896AF4C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896AFEC; } @@ -7443,9 +7546,7 @@ L_0896AF54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AFEC; } @@ -7454,9 +7555,7 @@ L_0896AF54: L_0896AF6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896AFEC; } @@ -7464,7 +7563,6 @@ L_0896AF6C: } L_0896AF80: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896AFA4; } @@ -7521,7 +7619,6 @@ L_0896AFEC: L_0896B004: aot_gpr_4 = (ctx.gpr[18] | ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896B04C; } @@ -7571,9 +7668,7 @@ L_0896B05C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B0A8; } @@ -7610,9 +7705,7 @@ L_0896B0B0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B0FC; } @@ -7649,9 +7742,7 @@ L_0896B104: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B14C; } @@ -7692,7 +7783,6 @@ L_0896B14C: goto L_0896B184; L_0896B184: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0896B194; } @@ -7709,7 +7799,6 @@ L_0896B194: AOT_REGCACHE_SYNC_OUT(); return; L_0896B19C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0896B2F8; } @@ -7722,7 +7811,6 @@ L_0896B1A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1248))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1280), static_cast(aot_gpr_4)); if (branch_taken) { @@ -7733,9 +7821,7 @@ L_0896B1A4: L_0896B1C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B258; } @@ -7745,9 +7831,7 @@ L_0896B1DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B258; } @@ -7756,7 +7840,6 @@ L_0896B1DC: L_0896B1F4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1072))); goto L_0896B220; @@ -7765,9 +7848,7 @@ L_0896B1F4: L_0896B208: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B258; } @@ -7784,9 +7865,7 @@ L_0896B220: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B2F8; } @@ -7805,7 +7884,6 @@ L_0896B248: L_0896B258: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); if (branch_taken) { @@ -7816,9 +7894,7 @@ L_0896B258: L_0896B26C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B2F8; } @@ -7827,9 +7903,7 @@ L_0896B26C: L_0896B280: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B2F8; } @@ -7838,7 +7912,6 @@ L_0896B280: L_0896B294: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1072))); goto L_0896B2C0; @@ -7847,9 +7920,7 @@ L_0896B294: L_0896B2A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B2F8; } @@ -7867,9 +7938,7 @@ L_0896B2C0: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B2F8; } @@ -7907,7 +7976,17 @@ L_0896B308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896B340: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7936,7 +8015,6 @@ L_0896B378: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896B5F0; } @@ -7945,7 +8023,6 @@ L_0896B378: L_0896B388: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896B5F0; } @@ -7953,12 +8030,10 @@ L_0896B388: } L_0896B394: aot_gpr_31 = (0x0896B39Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896B39Cu) goto L_0896B39C; AOT_REGCACHE_SYNC_OUT(); return; L_0896B39C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0896B5F0; } @@ -7987,7 +8062,6 @@ L_0896B3B8: L_0896B3C4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(154))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896B444; } @@ -7995,9 +8069,7 @@ L_0896B3C4: } L_0896B3D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B444; } @@ -8015,7 +8087,6 @@ L_0896B3E0: goto L_0896B3F8; L_0896B3F8: aot_gpr_31 = (0x0896B400u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896B400u) goto L_0896B400; AOT_REGCACHE_SYNC_OUT(); return; L_0896B400: @@ -8047,9 +8118,7 @@ L_0896B430: goto L_0896B444; L_0896B444: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B518; } @@ -8058,7 +8127,6 @@ L_0896B444: L_0896B454: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896B48C; } @@ -8089,7 +8157,6 @@ L_0896B468: } L_0896B48C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0896B49C; } @@ -8110,7 +8177,6 @@ L_0896B49C: AOT_REGCACHE_SYNC_OUT(); return; L_0896B4A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0896B4F0; } @@ -8123,9 +8189,7 @@ L_0896B4AC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1584), std::bit_cast(aot_fpr_13)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17360))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B4D4; } @@ -8144,7 +8208,6 @@ L_0896B4D4: AOT_REGCACHE_SYNC_OUT(); return; L_0896B4E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B540; } @@ -8163,7 +8226,6 @@ L_0896B4F0: AOT_REGCACHE_SYNC_OUT(); return; L_0896B510: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B540; } @@ -8171,7 +8233,6 @@ L_0896B510: } L_0896B518: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896B540; } @@ -8189,7 +8250,6 @@ L_0896B520: goto L_0896B540; L_0896B540: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896B5E8; } @@ -8200,9 +8260,7 @@ L_0896B548: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B5E8; } @@ -8220,7 +8278,6 @@ L_0896B56C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896B5E8; } @@ -8231,9 +8288,7 @@ L_0896B588: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B5E0; } @@ -8242,9 +8297,7 @@ L_0896B588: L_0896B5A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1220))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B5E0; } @@ -8253,9 +8306,7 @@ L_0896B5A4: L_0896B5B8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B5E0; } @@ -8264,9 +8315,7 @@ L_0896B5B8: L_0896B5CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B5E8; } @@ -8278,7 +8327,6 @@ L_0896B5E0: goto L_0896B5E8; L_0896B5E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B618; } @@ -8286,7 +8334,6 @@ L_0896B5E8: } L_0896B5F0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0896B618; } @@ -8316,7 +8363,17 @@ L_0896B618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896B634: aot_gpr_29 = (aot_gpr_29 + static_cast(-496)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8370,7 +8427,6 @@ L_0896B6E8: aot_fpr_15 = ctx.fpr[16] - aot_fpr_15; aot_fpr_15 = aot_fpr_15 / aot_fpr_14; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B708; } @@ -8384,7 +8440,6 @@ L_0896B6FC: L_0896B708: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(60))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); if (branch_taken) { @@ -8422,7 +8477,6 @@ L_0896B760: aot_fpr_14 = aot_fpr_15 - aot_fpr_14; aot_fpr_12 = aot_fpr_14 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B780; } @@ -8436,7 +8490,6 @@ L_0896B774: L_0896B780: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(60))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); if (branch_taken) { @@ -8461,7 +8514,6 @@ L_0896B7B4: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896B800; } @@ -8471,7 +8523,6 @@ L_0896B7C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896B800; } @@ -8482,7 +8533,6 @@ L_0896B7D8: aot_gpr_5 = (0u | 16u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896B800; } @@ -8493,7 +8543,6 @@ L_0896B7EC: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896B8DC; } @@ -8518,7 +8567,6 @@ L_0896B800: goto L_0896B81C; L_0896B81C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896B87C; } @@ -8528,9 +8576,7 @@ L_0896B824: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1232))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B85C; } @@ -8540,9 +8586,7 @@ L_0896B83C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1236))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B85C; } @@ -8550,7 +8594,6 @@ L_0896B83C: } L_0896B854: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B8CC; } @@ -8560,9 +8603,7 @@ L_0896B85C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1236))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B8CC; } @@ -8570,7 +8611,6 @@ L_0896B85C: } L_0896B874: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B8CC; } @@ -8580,9 +8620,7 @@ L_0896B87C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1244))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B8B4; } @@ -8592,9 +8630,7 @@ L_0896B894: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B8B4; } @@ -8602,7 +8638,6 @@ L_0896B894: } L_0896B8AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896B8CC; } @@ -8612,9 +8647,7 @@ L_0896B8B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896B8CC; } @@ -8624,7 +8657,6 @@ L_0896B8CC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0896B81C; } @@ -8744,7 +8776,6 @@ L_0896B928: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), std::bit_cast(ctx.fpr[20])); goto L_0896B9C8; @@ -8753,9 +8784,7 @@ L_0896B928: L_0896B9B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896BA84; } @@ -8846,7 +8875,6 @@ L_0896BA6C: L_0896BA84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), std::bit_cast(ctx.fpr[20])); goto L_0896BAB0; @@ -8855,9 +8883,7 @@ L_0896BA84: L_0896BA98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896BB64; } @@ -8946,7 +8972,6 @@ L_0896BB4C: L_0896BB64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1544))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BD94; } @@ -9027,7 +9052,6 @@ L_0896BBE0: ctx.fpr[24] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / ctx.fpr[24]; aot_gpr_31 = (0x0896BC08u); - // nop goto L_08969520; L_0896BC08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(340))); @@ -9109,7 +9133,6 @@ L_0896BCA0: L_0896BCA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1560))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BD70; } @@ -9169,7 +9192,6 @@ L_0896BCF4: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896BD24; } @@ -9180,7 +9202,6 @@ L_0896BD10: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896BD54; } @@ -9210,7 +9231,6 @@ L_0896BD38: AOT_REGCACHE_SYNC_OUT(); return; L_0896BD4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896BD68; } @@ -9236,7 +9256,6 @@ L_0896BD70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BD94; } @@ -9245,7 +9264,6 @@ L_0896BD70: L_0896BD80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BD94; } @@ -9259,7 +9277,6 @@ L_0896BD8C: L_0896BD94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1548))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BE50; } @@ -9406,7 +9423,6 @@ L_0896BE90: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17345))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BEF4; } @@ -9438,7 +9454,6 @@ L_0896BEF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1076))); ctx.gpr[18] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_0896BF48; } @@ -9466,7 +9481,6 @@ L_0896BF04: AOT_REGCACHE_SYNC_OUT(); return; L_0896BF40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896BF54; } @@ -9546,7 +9560,6 @@ L_0896BFB0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17345))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896BFD8; } @@ -9555,7 +9568,6 @@ L_0896BFB0: L_0896BFC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1548))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896BFD8; } @@ -9568,7 +9580,6 @@ L_0896BFD0: L_0896BFD8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1077))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 3u, 0x0896C028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0090.cpp b/profiles/vcs/generated/generated_unit_0090.cpp index db57b47..5c59940 100644 --- a/profiles/vcs/generated/generated_unit_0090.cpp +++ b/profiles/vcs/generated/generated_unit_0090.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0090[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, 0, 0, 0, 5, 0, 6, 0, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, - 9, 0, 0, 10, 0, 0, 0, 11, 0, 12, 13, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 0, 21, - 0, 22, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 26, 0, 27, 0, 0, 28, 0, 0, 29, 0, 0, 0, - 30, 0, 31, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, - 0, 39, 0, 40, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 45, 46, 0, 0, 47, 0, 0, 48, - 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 52, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 55, 0, 56, 57, 0, 0, 0, 58, 0, 0, 59, 0, 60, 0, 0, 61, - 0, 62, 63, 0, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, - 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 74, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, 82, 0, 83, 84, 0, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, - 87, 0, 88, 0, 0, 89, 0, 90, 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 94, 0, 95, 0, 0, 0, 96, 0, 0, 0, 97, - 0, 98, 0, 99, 0, 0, 0, 0, 100, 0, 0, 101, 0, 102, 103, 0, 0, 0, 104, 0, 0, 105, 0, 106, 0, 0, 107, 0, 108, 109, 0, 0, - 0, 110, 0, 0, 111, 0, 112, 0, 0, 0, 0, 113, 0, 0, 114, 0, 115, 116, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 0, 120, 0, 121, - 122, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 0, 0, 0, 126, 0, 127, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 0, - 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 135, 0, 136, 0, 137, 0, 138, 0, 0, 0, 139, - 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 143, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 0, 147, 0, 0, 148, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 150, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 0, - 155, 0, 156, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 159, 0, 0, 160, 0, 161, 162, 0, 0, 0, 163, 0, 0, 164, - 0, 165, 0, 0, 166, 0, 167, 168, 0, 0, 0, 169, 0, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 0, 173, 0, 174, 0, 175, 0, 0, 176, - 0, 0, 177, 0, 178, 179, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 0, 184, 0, 185, 186, 0, 0, 0, 0, 187, - 0, 0, 0, 0, 188, 0, 0, 189, 0, 190, 0, 0, 0, 191, 0, 192, 0, 0, 193, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 195, 0, 196, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 201, 0, 202, 0, 0, 203, 0, 0, 0, - 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 210, 0, 0, 0, 211, 0, 0, 212, 0, 213, 0, 0, 214, - 0, 215, 216, 0, 0, 0, 217, 0, 0, 218, 0, 219, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 222, 0, 223, 0, 224, 0, 0, 0, 225, 0, - 0, 226, 0, 227, 228, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 231, 0, 232, 0, 0, 233, 0, 234, 235, 0, 0, 0, 0, 236, 0, - 0, 0, 0, 237, 0, 0, 238, 0, 239, 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 0, 0, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 0, - 247, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 252, 0, 253, 0, 254, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, - 0, 0, 0, 0, 0, 267, 0, 0, 268, 0, 269, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, - 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, - 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 287, 288, 0, 0, 289, 0, 0, 290, 291, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 297, 0, 298, 0, - 0, 0, 0, 299, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, - 305, 0, 0, 306, 0, 0, 307, 0, 0, 308, 0, 309, 310, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 315, - 0, 0, 316, 0, 0, 317, 0, 0, 318, 0, 0, 319, 0, 320, 321, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 325, - 0, 326, 0, 327, 0, 0, 328, 0, 0, 329, 0, 330, 331, 0, 332, 0, 333, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 338, 0, 0, 339, 340, 0, 0, 0, 341, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 344, 0, 0, 345, 0, 346, 0, 347, 0, 0, 0, 0, 0, 348, 349, 0, 350, 0, 0, 0, 0, 0, 351, 352, 0, 353, 0, 0, 0, 0, - 0, 354, 355, 0, 356, 0, 0, 0, 0, 0, 357, 358, 0, 359, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, - 0, 363, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 367, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 380, 381, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 383, 384, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 388, 0, 389, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 394, 0, 395, 0, 0, 0, 396, 397, - 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 0, 0, 0, 0, - 402, 0, 0, 0, 403, 0, 404, 0, 405, 0, 406, 0, 0, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 411, 0, 412, 413, 0, - 414, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 0, 420, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, - 426, 0, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 0, 431, 0, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 436, - 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 441, 0, 0, 442, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, 446, 0, 0, - 447, 0, 0, 448, 0, 0, 449, 0, 0, 450, 0, 451, 0, 452, 453, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 455, 456, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 461, 0, 462, 0, - 0, 0, 463, 464, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 466, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 0, 0, 473, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, - 476, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 479, 0, 480, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, - 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 493, 494, 0, 0, 495, 0, 496, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, - 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 505, 0, 506, 0, 507, 0, 508, 0, 0, 0, 509, - 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 518, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, - 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 527, 0, - 528, 0, 0, 0, 0, 529, 0, 0, 0, 530, 531, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, - 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, 0, 548, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, - 551, 0, 0, 552, 0, 0, 553, 0, 0, 0, 554, 0, 555, 556, 0, 557, 0, 558, 0, 559, 0, 0, 0, 0, 0, 560, 0, 561, 0, 562, 563, 0, - 564, 0, 0, 0, 0, 0, 565, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, - 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, - 583, 0, 584, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 0, 587, 0, 588, 0, 0, 589, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 0, 0, 594, 595, 0, 0, 0, - 596, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, - 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 612, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, - 617, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 623, - 0, 0, 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, - 0, 629, 0, 630, 0, 0, 631, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 0, - 0, 0, 635, 0, 0, 0, 636, 0, 0, 637, 0, 638, 639, 0, 0, 640, 0, 0, 0, 641, 642, 0, 643, 0, 644, 0, 0, 645, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 650, 0, 651, 652, 0, - 0, 653, 0, 0, 0, 654, 655, 0, 656, 0, 657, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 0, 663, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 667, 0, 0, 0, 0, 668, 0, 669, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, - 673, 0, 0, 0, 0, 674, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 679, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 681, 0, 0, 682, 0, 0, 683, 0, 0, 0, 0, 684, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 690, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 692, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 697, 0, 0, 698, 0, 0, 699, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 702, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 709, 0, 0, 0, 0, 0, - 0, 0, 710, 0, 711, 0, 712, 0, 713, 0, 0, 714, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 718, 0, 0, 0, - 0, 0, 719, 0, 0, 720, 0, 721, 0, 722, 0, 723, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, - 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 730, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 732, 0, 0, 733, - 0, 0, 0, 0, 0, 0, 0, 0, 734, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 737, 738, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 0, 0, 742, 0, 0, 743, 0, 744, 0, 0, - 745, 0, 746, 0, 747, 748, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 0, - 0, 0, 0, 756, 0, 0, 757, 0, 0, 0, 0, 758, 0, 759, 0, 0, 0, 760, 0, 0, 0, 0, 761, 0, 762, 0, 0, 0, 763, 0, 0, 0, - 0, 764, 0, 765, 0, 0, 0, 766, 0, 0, 767, 0, 768, 0, 0, 0, 769, 0, 0, 0, 0, 770, 0, 0, 771, 0, 772, 0, 0, 773, 0, 774, - 0, 775, 0, 776, 0, 0, 777, 0, 778, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 0, 781, 0, 782, 0, 0, 0, 0, 783, 0, 784, 0, 0, - 0, 0, 785, 0, 786, 0, 0, 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 790, 0, 0, - 791, 0, 792, 0, 793, 0, 794, 0, 795, 0, 796, 0, 797, 0, 798, 0, 799, 0, 800, 0, 801, 0, 802, 0, 0, 803, 0, 0, 804, 0, 805, 0, - 806, 0, 807, 0, 808, 0, 809, 0, 810, 0, 811, 0, 812, 813, 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 815, 0, 0, 816, 0, 0, 0, 0, 817, 0, 0, 0, 818, 0, 819, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 821, - 0, 0, 0, 822, 0, 0, 0, 0, 0, 823, 0, 0, 0, 824, 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, - 827, 0, 828, 0, 0, 0, 829, 0, 0, 0, 0, 0, 830, 0, 0, 0, 831, 0, 0, 0, 0, 832, 0, 0, 0, 833, 0, 0, 0, 0, 0, 834, - 0, 0, 0, 835, 836, 0, 0, 0, 0, 0, 837, 0, 0, 0, 838, 0, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, 842, 843, 0, 844, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, 0, 846, 0, 0, 0, 847, 0, 0, 848, 0, 0, 849, 0, 850, 851, 0, 852, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 854, 0, 0, 855, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 858, 0, 0, - 0, 0, 0, 0, 0, 859, 0, 0, 860, 0, 0, 0, 861, 0, 862, 0, 863, 0, 864, 0, 865, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 867, 0, 0, 0, 0, 0, 868, 0, 0, 869, 0, 0, 870, 0, 0, 871, 0, 0, 872, 0, 873, 0, 0, 874, 0, 0, 0, 0, 0, 875, - 0, 0, 0, 0, 0, 876, 0, 0, 0, 877, 0, 0, 0, 0, 0, 878, 0, 0, 879, 0, 0, 880, 0, 0, 881, 0, 0, 882, 0, 883, 0, 0, - 884, 0, 0, 0, 0, 0, 885, 0, 0, 0, 0, 0, 886, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 890, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 892, 0, 893, 0, 894, 0, 895, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0090[64] = { + 0x0001068910942501ull, 0x1250810689284200ull, 0x9342041A24A1020Dull, 0x948D212400020002ull, + 0x08088A40A2208A46ull, 0x88A421A5210D2484ull, 0xA523485234A4690Aull, 0x8AA1028820914291ull, + 0x0A11140025222902ull, 0x951148D291A44105ull, 0x0014A29086948434ull, 0x948D210A1285088Aull, + 0x434A421A45448A46ull, 0x0109529525429148ull, 0x889110A000001004ull, 0x0402842290002520ull, + 0x10864C0205510110ull, 0x280200A852200400ull, 0x88056924A2015A49ull, 0x0465200008115A4Aull, + 0x0B0582A400100040ull, 0x005A0016A000AC16ull, 0x1000950000040008ull, 0x00050400C02D2400ull, + 0x02800050C5500055ull, 0x8220480569244551ull, 0x9249249102290200ull, 0x06016A4924924924ull, + 0x1006010C55001040ull, 0x00A2A201010C5500ull, 0x0000000000280000ull, 0x000D340201042244ull, + 0x4000000000028000ull, 0x040448408AA40444ull, 0x54001440912A0400ull, 0xAAAAA88000004621ull, + 0x6A0AB44910008A22ull, 0x0001000214008241ull, 0x008940A555555100ull, 0xAAA82201180A0010ull, + 0x0421000000005AAAull, 0x0000011082108221ull, 0x4008000800000000ull, 0x09589A441200024Aull, + 0x0020456269104800ull, 0x0000C20090804000ull, 0x00020061240002A1ull, 0x080184900002A100ull, + 0x0000540042840000ull, 0x0001080024841040ull, 0x05008800010000A4ull, 0x02021AA411410954ull, + 0x0C08030090412024ull, 0x0400023529088020ull, 0x1142284841080840ull, 0x2852114AA521148Aull, + 0x5255555524000A14ull, 0x808510900000B555ull, 0x8221104501042208ull, 0x5A4888002D224418ull, + 0x2000000090400000ull, 0x0055512028000000ull, 0x2924822082524904ull, 0x2A800C2000811041ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0090[64] = { + 1u, 15u, 30u, 49u, 62u, 78u, 98u, 122u, 140u, 155u, 177u, 195u, 215u, 237u, 257u, 267u, + 279u, 294u, 305u, 326u, 342u, 354u, 370u, 377u, 388u, 402u, 421u, 437u, 457u, 469u, 483u, 485u, + 498u, 501u, 515u, 528u, 545u, 564u, 572u, 591u, 606u, 617u, 626u, 629u, 646u, 660u, 667u, 677u, + 687u, 694u, 702u, 710u, 727u, 739u, 751u, 764u, 785u, 806u, 822u, 835u, 853u, 857u, 867u, 884u, }; void recomp_unit_0090_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0090_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0896C000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0090[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0090[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0090[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0896C000; @@ -1079,7 +986,6 @@ L_0896C000: AOT_REGCACHE_SYNC_OUT(); return; L_0896C020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C034; } @@ -1110,7 +1016,6 @@ L_0896C048: L_0896C050: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1540))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C154; } @@ -1121,7 +1026,6 @@ L_0896C05C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(404), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17345))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896C080; } @@ -1238,7 +1142,6 @@ L_0896C14C: L_0896C154: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1564))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C1D8; } @@ -1320,7 +1223,6 @@ L_0896C1D0: L_0896C1D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1568))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C25C; } @@ -1485,7 +1387,6 @@ L_0896C2E0: L_0896C2E4: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C304; } @@ -1494,7 +1395,6 @@ L_0896C2E4: L_0896C2F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C304; } @@ -1528,7 +1428,17 @@ L_0896C304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896C344: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -1551,7 +1461,6 @@ L_0896C344: L_0896C388: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C454; } @@ -1560,7 +1469,6 @@ L_0896C388: L_0896C394: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0896C454; } @@ -1586,7 +1494,6 @@ L_0896C3B4: goto L_0896C3C0; L_0896C3C0: aot_gpr_31 = (0x0896C3C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C3C8u) goto L_0896C3C8; AOT_REGCACHE_SYNC_OUT(); return; L_0896C3C8: @@ -1607,7 +1514,6 @@ L_0896C3DC: AOT_REGCACHE_SYNC_OUT(); return; L_0896C3E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C424; } @@ -1622,7 +1528,6 @@ L_0896C3F0: goto L_0896C3FC; L_0896C3FC: aot_gpr_31 = (0x0896C404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C404u) goto L_0896C404; AOT_REGCACHE_SYNC_OUT(); return; L_0896C404: @@ -1669,7 +1574,6 @@ L_0896C454: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896C4CC; } @@ -1687,7 +1591,6 @@ L_0896C464: } L_0896C474: aot_gpr_31 = (0x0896C47Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C47Cu) goto L_0896C47C; AOT_REGCACHE_SYNC_OUT(); return; L_0896C47C: @@ -1734,7 +1637,6 @@ L_0896C4CC: aot_gpr_4 = (16128u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 2u); if (branch_taken) { @@ -1747,7 +1649,6 @@ L_0896C4EC: aot_gpr_5 = (48896u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (ctx.gpr[17] + static_cast(32)); if (branch_taken) { @@ -1758,9 +1659,7 @@ L_0896C4EC: L_0896C508: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896C5FC; } @@ -1778,7 +1677,6 @@ L_0896C51C: L_0896C528: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0896C588; } @@ -1793,7 +1691,6 @@ L_0896C534: goto L_0896C540; L_0896C540: aot_gpr_31 = (0x0896C548u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C548u) goto L_0896C548; AOT_REGCACHE_SYNC_OUT(); return; L_0896C548: @@ -1823,7 +1720,6 @@ L_0896C574: AOT_REGCACHE_SYNC_OUT(); return; L_0896C580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C5D4; } @@ -1838,7 +1734,6 @@ L_0896C588: goto L_0896C594; L_0896C594: aot_gpr_31 = (0x0896C59Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C59Cu) goto L_0896C59C; AOT_REGCACHE_SYNC_OUT(); return; L_0896C59C: @@ -1898,7 +1793,6 @@ L_0896C5FC: } L_0896C604: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0896C698; } @@ -1907,9 +1801,7 @@ L_0896C604: L_0896C60C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896C65C; } @@ -1924,7 +1816,6 @@ L_0896C620: goto L_0896C62C; L_0896C62C: aot_gpr_31 = (0x0896C634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C634u) goto L_0896C634; AOT_REGCACHE_SYNC_OUT(); return; L_0896C634: @@ -1945,7 +1836,6 @@ L_0896C648: AOT_REGCACHE_SYNC_OUT(); return; L_0896C654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C71C; } @@ -1960,7 +1850,6 @@ L_0896C65C: goto L_0896C668; L_0896C668: aot_gpr_31 = (0x0896C670u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C670u) goto L_0896C670; AOT_REGCACHE_SYNC_OUT(); return; L_0896C670: @@ -1981,7 +1870,6 @@ L_0896C684: AOT_REGCACHE_SYNC_OUT(); return; L_0896C690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C71C; } @@ -1990,9 +1878,7 @@ L_0896C690: L_0896C698: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896C6E8; } @@ -2007,7 +1893,6 @@ L_0896C6AC: goto L_0896C6B8; L_0896C6B8: aot_gpr_31 = (0x0896C6C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C6C0u) goto L_0896C6C0; AOT_REGCACHE_SYNC_OUT(); return; L_0896C6C0: @@ -2028,7 +1913,6 @@ L_0896C6D4: AOT_REGCACHE_SYNC_OUT(); return; L_0896C6E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C71C; } @@ -2043,7 +1927,6 @@ L_0896C6E8: goto L_0896C6F4; L_0896C6F4: aot_gpr_31 = (0x0896C6FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C6FCu) goto L_0896C6FC; AOT_REGCACHE_SYNC_OUT(); return; L_0896C6FC: @@ -2077,7 +1960,6 @@ L_0896C724: AOT_REGCACHE_SYNC_OUT(); return; L_0896C738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CD3C; } @@ -2087,7 +1969,6 @@ L_0896C740: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896C854; } @@ -2096,7 +1977,6 @@ L_0896C740: L_0896C750: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896C7EC; } @@ -2108,7 +1988,6 @@ L_0896C75C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896C7DC; } @@ -2120,7 +1999,6 @@ L_0896C774: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896C7DC; } @@ -2138,7 +2016,6 @@ L_0896C78C: } L_0896C79C: aot_gpr_31 = (0x0896C7A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C7A4u) goto L_0896C7A4; AOT_REGCACHE_SYNC_OUT(); return; L_0896C7A4: @@ -2174,7 +2051,6 @@ L_0896C7DC: AOT_REGCACHE_SYNC_OUT(); return; L_0896C7E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CD30; } @@ -2192,7 +2068,6 @@ L_0896C7EC: } L_0896C7FC: aot_gpr_31 = (0x0896C804u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C804u) goto L_0896C804; AOT_REGCACHE_SYNC_OUT(); return; L_0896C804: @@ -2244,7 +2119,6 @@ L_0896C854: } L_0896C860: { const bool branch_taken = ctx.gpr[19] != aot_gpr_5; - // nop if (branch_taken) { goto L_0896CABC; } @@ -2253,7 +2127,6 @@ L_0896C860: L_0896C868: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896C9F0; } @@ -2278,9 +2151,7 @@ L_0896C874: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896C908; } @@ -2295,7 +2166,6 @@ L_0896C8B0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896C8D0; } @@ -2305,7 +2175,6 @@ L_0896C8C0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896C8EC; } @@ -2321,7 +2190,6 @@ L_0896C8D0: AOT_REGCACHE_SYNC_OUT(); return; L_0896C8E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C900; } @@ -2337,7 +2205,6 @@ L_0896C8EC: AOT_REGCACHE_SYNC_OUT(); return; L_0896C900: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CDE0; } @@ -2349,7 +2216,6 @@ L_0896C908: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0896C9E0; } @@ -2361,7 +2227,6 @@ L_0896C920: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0896C9E0; } @@ -2386,7 +2251,6 @@ L_0896C948: goto L_0896C954; L_0896C954: aot_gpr_31 = (0x0896C95Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C95Cu) goto L_0896C95C; AOT_REGCACHE_SYNC_OUT(); return; L_0896C95C: @@ -2407,7 +2271,6 @@ L_0896C970: AOT_REGCACHE_SYNC_OUT(); return; L_0896C97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896C9B8; } @@ -2422,7 +2285,6 @@ L_0896C984: goto L_0896C990; L_0896C990: aot_gpr_31 = (0x0896C998u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896C998u) goto L_0896C998; AOT_REGCACHE_SYNC_OUT(); return; L_0896C998: @@ -2470,7 +2332,6 @@ L_0896C9E0: AOT_REGCACHE_SYNC_OUT(); return; L_0896C9E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CD30; } @@ -2494,7 +2355,6 @@ L_0896C9FC: goto L_0896CA08; L_0896CA08: aot_gpr_31 = (0x0896CA10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CA10u) goto L_0896CA10; AOT_REGCACHE_SYNC_OUT(); return; L_0896CA10: @@ -2524,7 +2384,6 @@ L_0896CA3C: AOT_REGCACHE_SYNC_OUT(); return; L_0896CA48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CA9C; } @@ -2539,7 +2398,6 @@ L_0896CA50: goto L_0896CA5C; L_0896CA5C: aot_gpr_31 = (0x0896CA64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CA64u) goto L_0896CA64; AOT_REGCACHE_SYNC_OUT(); return; L_0896CA64: @@ -2581,7 +2439,6 @@ L_0896CAA4: AOT_REGCACHE_SYNC_OUT(); return; L_0896CAB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CD30; } @@ -2595,7 +2452,6 @@ L_0896CABC: AOT_REGCACHE_SYNC_OUT(); return; L_0896CAC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896CC68; } @@ -2620,9 +2476,7 @@ L_0896CAD0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896CB64; } @@ -2637,7 +2491,6 @@ L_0896CB0C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896CB2C; } @@ -2647,7 +2500,6 @@ L_0896CB1C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896CB48; } @@ -2663,7 +2515,6 @@ L_0896CB2C: AOT_REGCACHE_SYNC_OUT(); return; L_0896CB40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CB5C; } @@ -2679,7 +2530,6 @@ L_0896CB48: AOT_REGCACHE_SYNC_OUT(); return; L_0896CB5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CDE0; } @@ -2712,7 +2562,6 @@ L_0896CB8C: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896CC58; } @@ -2738,7 +2587,6 @@ L_0896CBB4: goto L_0896CBC0; L_0896CBC0: aot_gpr_31 = (0x0896CBC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CBC8u) goto L_0896CBC8; AOT_REGCACHE_SYNC_OUT(); return; L_0896CBC8: @@ -2759,7 +2607,6 @@ L_0896CBDC: AOT_REGCACHE_SYNC_OUT(); return; L_0896CBE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CC24; } @@ -2774,7 +2621,6 @@ L_0896CBF0: goto L_0896CBFC; L_0896CBFC: aot_gpr_31 = (0x0896CC04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CC04u) goto L_0896CC04; AOT_REGCACHE_SYNC_OUT(); return; L_0896CC04: @@ -2828,7 +2674,6 @@ L_0896CC58: AOT_REGCACHE_SYNC_OUT(); return; L_0896CC60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CD30; } @@ -2853,7 +2698,6 @@ L_0896CC78: goto L_0896CC84; L_0896CC84: aot_gpr_31 = (0x0896CC8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CC8Cu) goto L_0896CC8C; AOT_REGCACHE_SYNC_OUT(); return; L_0896CC8C: @@ -2883,7 +2727,6 @@ L_0896CCB8: AOT_REGCACHE_SYNC_OUT(); return; L_0896CCC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896CD18; } @@ -2898,7 +2741,6 @@ L_0896CCCC: goto L_0896CCD8; L_0896CCD8: aot_gpr_31 = (0x0896CCE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CCE0u) goto L_0896CCE0; AOT_REGCACHE_SYNC_OUT(); return; L_0896CCE0: @@ -2945,7 +2787,6 @@ L_0896CD30: goto L_0896CD3C; L_0896CD3C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896CDE0; } @@ -2981,7 +2822,6 @@ L_0896CD68: L_0896CD74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0896CDA4; } @@ -2989,12 +2829,10 @@ L_0896CD74: } L_0896CD80: aot_gpr_31 = (0x0896CD88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896CD88u) goto L_0896CD88; AOT_REGCACHE_SYNC_OUT(); return; L_0896CD88: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0896CDA4; } @@ -3003,7 +2841,6 @@ L_0896CD88: L_0896CD90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0896CDA4; } @@ -3029,7 +2866,6 @@ L_0896CDB0: AOT_REGCACHE_SYNC_OUT(); return; L_0896CDB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896CDE0; } @@ -3066,7 +2902,17 @@ L_0896CDE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896CE08: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3120,11 +2966,20 @@ L_0896CE08: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896CE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3203,14 +3058,23 @@ L_0896CEEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896CEFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-17328), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17344))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0896CF28; } @@ -3233,7 +3097,17 @@ L_0896CF28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896CF34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3254,7 +3128,6 @@ L_0896CF34: L_0896CF70: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(61))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896CF84; } @@ -3280,7 +3153,6 @@ L_0896CF94: aot_gpr_5 = (0u | 12u); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896D068; } @@ -3324,7 +3196,6 @@ L_0896CFE8: aot_fpr_14 = aot_fpr_14 - aot_fpr_12; aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); goto L_0896D010; @@ -3332,9 +3203,7 @@ L_0896CFE8: goto L_0896D010; L_0896D010: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896D050; } @@ -3346,7 +3215,6 @@ L_0896D020: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_0896D040; @@ -3354,9 +3222,7 @@ L_0896D020: goto L_0896D040; L_0896D040: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896D060; } @@ -3369,7 +3235,6 @@ L_0896D050: AOT_REGCACHE_SYNC_OUT(); return; L_0896D058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D068; } @@ -3394,7 +3259,17 @@ L_0896D068: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D084: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3415,7 +3290,6 @@ L_0896D0A8: L_0896D0AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(168))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896D0C8; } @@ -3452,7 +3326,17 @@ L_0896D0DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D0F0: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3471,7 +3355,17 @@ L_0896D0F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D128: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17340))); @@ -3481,7 +3375,6 @@ L_0896D128: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(24), aot_run_words); } { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896D350; } @@ -3491,7 +3384,6 @@ L_0896D154: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17336))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896D350; } @@ -3508,7 +3400,6 @@ L_0896D164: } L_0896D170: aot_gpr_31 = (0x0896D178u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896D178u) goto L_0896D178; AOT_REGCACHE_SYNC_OUT(); return; L_0896D178: @@ -3521,7 +3412,6 @@ L_0896D178: AOT_REGCACHE_SYNC_OUT(); return; L_0896D18C: aot_gpr_31 = (0x0896D194u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896D194u) goto L_0896D194; AOT_REGCACHE_SYNC_OUT(); return; L_0896D194: @@ -3587,7 +3477,6 @@ L_0896D20C: L_0896D218: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0896D230; } @@ -3631,7 +3520,6 @@ L_0896D264: AOT_REGCACHE_SYNC_OUT(); return; L_0896D274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D350; } @@ -3640,7 +3528,6 @@ L_0896D274: L_0896D27C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9208))); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0896D304; } @@ -3664,7 +3551,6 @@ L_0896D294: L_0896D2A0: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0896D2B8; } @@ -3708,7 +3594,6 @@ L_0896D2EC: AOT_REGCACHE_SYNC_OUT(); return; L_0896D2FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D350; } @@ -3716,7 +3601,6 @@ L_0896D2FC: } L_0896D304: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896D338; } @@ -3731,7 +3615,6 @@ L_0896D30C: L_0896D318: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896D330; } @@ -3775,7 +3658,17 @@ L_0896D350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D36C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 << 16u); @@ -3803,7 +3696,6 @@ L_0896D36C: L_0896D3B4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0896D3D4; } @@ -3834,7 +3726,17 @@ L_0896D3D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D3E8: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3851,7 +3753,17 @@ L_0896D3E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D418: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3870,7 +3782,17 @@ L_0896D418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D450: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3910,7 +3832,6 @@ L_0896D494: } L_0896D49C: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0896D534; } @@ -3922,7 +3843,6 @@ L_0896D4A4: aot_gpr_5 = (aot_gpr_6 << (aot_gpr_5 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896D4C0; } @@ -3933,7 +3853,6 @@ L_0896D4BC: goto L_0896D4C0; L_0896D4C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D534; } @@ -3945,7 +3864,6 @@ L_0896D4C8: aot_gpr_5 = (aot_gpr_6 << (aot_gpr_5 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896D4E4; } @@ -3956,7 +3874,6 @@ L_0896D4E0: goto L_0896D4E4; L_0896D4E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D534; } @@ -3968,7 +3885,6 @@ L_0896D4EC: aot_gpr_5 = (aot_gpr_6 << (aot_gpr_5 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896D508; } @@ -3979,7 +3895,6 @@ L_0896D504: goto L_0896D508; L_0896D508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D534; } @@ -3991,7 +3906,6 @@ L_0896D510: aot_gpr_5 = (aot_gpr_6 << (aot_gpr_5 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896D52C; } @@ -4002,7 +3916,6 @@ L_0896D528: goto L_0896D52C; L_0896D52C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D534; } @@ -4010,11 +3923,20 @@ L_0896D52C: } L_0896D534: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D53C: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -4037,7 +3959,6 @@ L_0896D53C: } L_0896D574: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896D584; } @@ -4056,11 +3977,20 @@ L_0896D584: goto L_0896D588; L_0896D588: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D590: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -4074,7 +4004,6 @@ L_0896D590: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(62))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896D5CC; } @@ -4093,11 +4022,20 @@ L_0896D5CC: goto L_0896D5D0; L_0896D5D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D5D8: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -4115,7 +4053,17 @@ L_0896D5D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D60C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 << 16u); @@ -4131,7 +4079,6 @@ L_0896D60C: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(77))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_0896D6B0; } @@ -4157,9 +4104,7 @@ L_0896D648: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896D6A8; } @@ -4185,7 +4130,17 @@ L_0896D6B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D6BC: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -4203,7 +4158,17 @@ L_0896D6BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D6F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 << 16u); @@ -4228,11 +4193,20 @@ L_0896D728: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D734: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17296))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896D748; } @@ -4251,11 +4225,20 @@ L_0896D748: goto L_0896D74C; L_0896D74C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D754: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -4265,7 +4248,6 @@ L_0896D754: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896D878; } @@ -4285,7 +4267,6 @@ L_0896D77C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_5 = (aot_gpr_4 < static_cast(21) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896D818; } @@ -4297,14 +4278,22 @@ L_0896D7A8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8520))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D7C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D868; } @@ -4340,7 +4329,6 @@ L_0896D7C8: AOT_REGCACHE_SYNC_OUT(); return; L_0896D800: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0896D810; } @@ -4348,7 +4336,6 @@ L_0896D800: } L_0896D808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D868; } @@ -4392,7 +4379,6 @@ L_0896D818: AOT_REGCACHE_SYNC_OUT(); return; L_0896D850: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0896D860; } @@ -4400,7 +4386,6 @@ L_0896D850: } L_0896D858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D868; } @@ -4439,14 +4424,34 @@ L_0896D87C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D890: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9216))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896D898: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -4471,7 +4476,6 @@ L_0896D898: } L_0896D8DC: aot_gpr_31 = (0x0896D8E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896D8E4u) goto L_0896D8E4; AOT_REGCACHE_SYNC_OUT(); return; L_0896D8E4: @@ -4481,7 +4485,6 @@ L_0896D8E4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896D920; } @@ -4496,7 +4499,6 @@ L_0896D900: AOT_REGCACHE_SYNC_OUT(); return; L_0896D910: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0896D948; } @@ -4512,7 +4514,6 @@ L_0896D918: } L_0896D920: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896D9FC; } @@ -4522,7 +4523,6 @@ L_0896D928: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17340))); aot_gpr_6 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0896D948; } @@ -4532,7 +4532,6 @@ L_0896D938: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17336))); aot_gpr_6 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0896D9D4; } @@ -4554,7 +4553,6 @@ L_0896D954: L_0896D960: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0896D978; } @@ -4612,7 +4610,6 @@ L_0896D9D4: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(501) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896D9FC; } @@ -4643,7 +4640,17 @@ L_0896D9FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DA24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4656,7 +4663,6 @@ L_0896DA24: L_0896DA40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896DA54; } @@ -4691,12 +4697,21 @@ L_0896DA64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DA80: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(84))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4705,7 +4720,6 @@ L_0896DA80: L_0896DA90: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4714,7 +4728,6 @@ L_0896DA90: L_0896DA9C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(88))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4723,7 +4736,6 @@ L_0896DA9C: L_0896DAA8: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(90))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4732,7 +4744,6 @@ L_0896DAA8: L_0896DAB4: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(92))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4741,7 +4752,6 @@ L_0896DAB4: L_0896DAC0: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(94))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4750,7 +4760,6 @@ L_0896DAC0: L_0896DACC: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4759,7 +4768,6 @@ L_0896DACC: L_0896DAD8: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(98))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4768,7 +4776,6 @@ L_0896DAD8: L_0896DAE4: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(100))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4777,7 +4784,6 @@ L_0896DAE4: L_0896DAF0: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(102))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4786,7 +4792,6 @@ L_0896DAF0: L_0896DAFC: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4795,7 +4800,6 @@ L_0896DAFC: L_0896DB08: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(106))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4804,7 +4808,6 @@ L_0896DB08: L_0896DB14: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4813,7 +4816,6 @@ L_0896DB14: L_0896DB20: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(110))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4822,7 +4824,6 @@ L_0896DB20: L_0896DB2C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4831,7 +4832,6 @@ L_0896DB2C: L_0896DB38: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(114))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4840,7 +4840,6 @@ L_0896DB38: L_0896DB44: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(116))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4849,7 +4848,6 @@ L_0896DB44: L_0896DB50: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(118))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4858,7 +4856,6 @@ L_0896DB50: L_0896DB5C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(120))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4867,7 +4864,6 @@ L_0896DB5C: L_0896DB68: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(122))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4876,7 +4872,6 @@ L_0896DB68: L_0896DB74: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(124))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4885,7 +4880,6 @@ L_0896DB74: L_0896DB80: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(126))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4894,7 +4888,6 @@ L_0896DB80: L_0896DB8C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_0896DBAC; } @@ -4903,7 +4896,6 @@ L_0896DB8C: L_0896DB98: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(298))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896DBB4; } @@ -4930,11 +4922,20 @@ L_0896DBB4: goto L_0896DBB8; L_0896DBB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DBC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4944,7 +4945,6 @@ L_0896DBC0: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896DC88; } @@ -4977,11 +4977,20 @@ L_0896DC18: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8432))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DC30: aot_gpr_4 = (ctx.gpr[17] << 7u); aot_gpr_5 = (ctx.gpr[17] + ctx.gpr[17]); @@ -5010,7 +5019,6 @@ L_0896DC30: AOT_REGCACHE_SYNC_OUT(); return; L_0896DC60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0896DC70; } @@ -5018,7 +5026,6 @@ L_0896DC60: } L_0896DC68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896DC78; } @@ -5057,7 +5064,17 @@ L_0896DC8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DCA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5067,7 +5084,6 @@ L_0896DCA0: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896DD48; } @@ -5086,7 +5102,6 @@ L_0896DCC8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896DD38; } @@ -5120,7 +5135,6 @@ L_0896DCF0: AOT_REGCACHE_SYNC_OUT(); return; L_0896DD20: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0896DD30; } @@ -5128,7 +5142,6 @@ L_0896DD20: } L_0896DD28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896DD38; } @@ -5167,7 +5180,17 @@ L_0896DD4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DD60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5359,7 +5382,17 @@ L_0896DF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896DF60: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5535,7 +5568,6 @@ L_0896E128: L_0896E148: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(61))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_0896E164; } @@ -5548,7 +5580,6 @@ L_0896E154: AOT_REGCACHE_SYNC_OUT(); return; L_0896E15C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896E16C; } @@ -5576,7 +5607,6 @@ L_0896E17C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17344))); aot_gpr_5 = (0u + static_cast(-5)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896E1C8; } @@ -5621,7 +5651,17 @@ L_0896E1C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E1E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 << 16u); @@ -5638,7 +5678,6 @@ L_0896E1E8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(170))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896E24C; } @@ -5656,7 +5695,6 @@ L_0896E228: AOT_REGCACHE_SYNC_OUT(); return; L_0896E244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896E254; } @@ -5673,7 +5711,17 @@ L_0896E254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E260: aot_gpr_5 = (2246u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(17840)); @@ -5710,11 +5758,20 @@ L_0896E298: } L_0896E2A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E2B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 << 16u); @@ -5745,7 +5802,6 @@ L_0896E2E8: } L_0896E2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896E314; } @@ -5771,7 +5827,6 @@ L_0896E314: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(62))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896E328; } @@ -5788,7 +5843,17 @@ L_0896E328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E338: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5855,7 +5920,6 @@ L_0896E3C4: } L_0896E3CC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896E404; } @@ -5863,7 +5927,6 @@ L_0896E3CC: } L_0896E3D4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_0896E404; } @@ -5871,7 +5934,6 @@ L_0896E3D4: } L_0896E3DC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_0896E404; } @@ -5879,7 +5941,6 @@ L_0896E3DC: } L_0896E3E4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0896E404; } @@ -5887,7 +5948,6 @@ L_0896E3E4: } L_0896E3EC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0896E404; } @@ -5895,7 +5955,6 @@ L_0896E3EC: } L_0896E3F4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0896E404; } @@ -5903,7 +5962,6 @@ L_0896E3F4: } L_0896E3FC: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0896E42C; } @@ -5918,9 +5976,7 @@ L_0896E404: AOT_REGCACHE_SYNC_OUT(); return; L_0896E414: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896E42C; } @@ -5961,7 +6017,17 @@ L_0896E43C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E470: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (static_cast(aot_gpr_5) < 191 ? 1u : 0u); @@ -5984,7 +6050,6 @@ L_0896E480: L_0896E48C: aot_gpr_5 = (static_cast(aot_gpr_5) < -966 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896E4BC; } @@ -5994,7 +6059,6 @@ L_0896E498: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896E4EC; } @@ -6013,7 +6077,6 @@ L_0896E4B0: goto L_0896E4B4; L_0896E4B4: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0896E498; } @@ -6041,14 +6104,22 @@ L_0896E4CC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8360))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E4E4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896E4F4; } @@ -6067,17 +6138,25 @@ L_0896E4F4: goto L_0896E4F8; L_0896E4F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E500: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x0896E518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896E518u) goto L_0896E518; AOT_REGCACHE_SYNC_OUT(); return; L_0896E518: @@ -6106,7 +6185,6 @@ L_0896E53C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1676))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896E570; } @@ -6128,7 +6206,17 @@ L_0896E570: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E584: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -6148,7 +6236,17 @@ L_0896E584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E5C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6212,7 +6310,6 @@ L_0896E648: } L_0896E650: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0896E688; } @@ -6220,7 +6317,6 @@ L_0896E650: } L_0896E658: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_0896E688; } @@ -6228,7 +6324,6 @@ L_0896E658: } L_0896E660: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_0896E688; } @@ -6236,7 +6331,6 @@ L_0896E660: } L_0896E668: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_0896E688; } @@ -6244,7 +6338,6 @@ L_0896E668: } L_0896E670: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_0896E688; } @@ -6252,7 +6345,6 @@ L_0896E670: } L_0896E678: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_0896E688; } @@ -6260,7 +6352,6 @@ L_0896E678: } L_0896E680: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_0896E6CC; } @@ -6269,7 +6360,6 @@ L_0896E680: L_0896E688: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(62))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896E6CC; } @@ -6330,7 +6420,17 @@ L_0896E6DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E710: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -6356,7 +6456,6 @@ L_0896E74C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896E770; } @@ -6391,12 +6490,21 @@ L_0896E780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E7A4: aot_gpr_4 = (aot_gpr_4 + static_cast(-14)); aot_gpr_5 = (aot_gpr_4 < static_cast(17) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896E82C; } @@ -6408,11 +6516,20 @@ L_0896E7B4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8136))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E7CC: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -6514,11 +6631,20 @@ L_0896E82C: goto L_0896E830; L_0896E830: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896E838: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[18])); @@ -6560,7 +6686,6 @@ L_0896E838: L_0896E8C0: ctx.fpr[4] = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[4])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[4] = std::bit_cast(std::bit_cast(ctx.fpr[1])); goto L_0896E8D4; @@ -6569,7 +6694,6 @@ L_0896E8C0: L_0896E8D4: ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[2])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[4] < ctx.fpr[3])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[4])); goto L_0896E8E8; @@ -6579,7 +6703,6 @@ L_0896E8E8: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(16), std::bit_cast(ctx.fpr[3])); ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[18])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[3])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[0])); goto L_0896E900; @@ -6588,7 +6711,6 @@ L_0896E8E8: L_0896E900: ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] <= ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[3])); goto L_0896E914; @@ -6596,7 +6718,6 @@ L_0896E900: goto L_0896E914; L_0896E914: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[1])); goto L_0896E924; @@ -6606,7 +6727,6 @@ L_0896E924: ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[17])); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(20), std::bit_cast(ctx.fpr[2])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_0896E93C; @@ -6615,7 +6735,6 @@ L_0896E924: L_0896E93C: ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[1])); goto L_0896E950; @@ -6624,7 +6743,6 @@ L_0896E93C: L_0896E950: ctx.fpr[1] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[2])); goto L_0896E964; @@ -6634,7 +6752,6 @@ L_0896E964: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(24), std::bit_cast(ctx.fpr[1])); ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[17])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_0896E97C; @@ -6643,7 +6760,6 @@ L_0896E964: L_0896E97C: ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[1])); goto L_0896E990; @@ -6651,7 +6767,6 @@ L_0896E97C: goto L_0896E990; L_0896E990: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[2])); goto L_0896E9A0; @@ -6737,7 +6852,17 @@ L_0896EA8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896EACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), ctx.gpr[17]); @@ -6754,7 +6879,6 @@ L_0896EACC: L_0896EAF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(61))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896EB0C; } @@ -6762,7 +6886,6 @@ L_0896EAF8: } L_0896EB04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896ECA8; } @@ -6777,7 +6900,6 @@ L_0896EB0C: L_0896EB18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896EBE0; } @@ -6799,7 +6921,6 @@ L_0896EB24: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896EBB0; } @@ -6824,7 +6945,6 @@ L_0896EB88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896EBAC; } @@ -6833,7 +6953,6 @@ L_0896EB88: L_0896EB98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896EBAC; } @@ -6841,7 +6960,6 @@ L_0896EB98: } L_0896EBA4: aot_gpr_31 = (0x0896EBACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896EBACu) goto L_0896EBAC; AOT_REGCACHE_SYNC_OUT(); return; L_0896EBAC: @@ -6850,7 +6968,6 @@ L_0896EBAC: L_0896EBB0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(77))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896EBD0; } @@ -6868,7 +6985,6 @@ L_0896EBCC: goto L_0896EBD0; L_0896EBD0: aot_gpr_31 = (0x0896EBD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0022_entry, 22u, 936u, 0x0885FF14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896EBD8u) goto L_0896EBD8; AOT_REGCACHE_SYNC_OUT(); return; L_0896EBD8: @@ -6879,7 +6995,6 @@ L_0896EBD8: L_0896EBE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896ECA8; } @@ -6901,7 +7016,6 @@ L_0896EBEC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896EC78; } @@ -6926,7 +7040,6 @@ L_0896EC50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896EC74; } @@ -6935,7 +7048,6 @@ L_0896EC50: L_0896EC60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896EC74; } @@ -6943,7 +7055,6 @@ L_0896EC60: } L_0896EC6C: aot_gpr_31 = (0x0896EC74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896EC74u) goto L_0896EC74; AOT_REGCACHE_SYNC_OUT(); return; L_0896EC74: @@ -6952,7 +7063,6 @@ L_0896EC74: L_0896EC78: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(77))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896EC98; } @@ -6970,7 +7080,6 @@ L_0896EC94: goto L_0896EC98; L_0896EC98: aot_gpr_31 = (0x0896ECA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0022_entry, 22u, 936u, 0x0885FF14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896ECA0u) goto L_0896ECA0; AOT_REGCACHE_SYNC_OUT(); return; L_0896ECA0: @@ -7002,7 +7111,17 @@ L_0896ECB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896ECD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(312), ctx.gpr[20]); @@ -7160,7 +7279,6 @@ L_0896EE68: L_0896EE74: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896EE98; } @@ -7311,7 +7429,6 @@ L_0896EF90: L_0896EF9C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0896EFC0; } @@ -7608,7 +7725,6 @@ L_0896F1C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896F21C; } @@ -7617,7 +7733,6 @@ L_0896F1C0: L_0896F208: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896F21C; } @@ -7652,7 +7767,17 @@ L_0896F21C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F260: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_4 + aot_gpr_4); @@ -7716,7 +7841,6 @@ L_0896F2E8: goto L_0896F308; L_0896F308: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0896F320; } @@ -7756,11 +7880,20 @@ L_0896F340: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-8064))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F358: { const bool branch_taken = 0u == 0u; aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(62), static_cast(0u)); @@ -7794,7 +7927,6 @@ L_0896F370: L_0896F388: aot_gpr_4 = (0u | 11u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_0896F3A4; } @@ -7824,7 +7956,6 @@ L_0896F3AC: L_0896F3B0: aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_0896F3C4; @@ -7845,7 +7976,17 @@ L_0896F3C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F3E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -7865,7 +8006,17 @@ L_0896F408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F414: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -7883,7 +8034,6 @@ L_0896F414: L_0896F434: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896F590; } @@ -7902,7 +8052,6 @@ L_0896F458: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7922,9 +8071,7 @@ L_0896F47C: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F4CC; } @@ -7941,7 +8088,6 @@ L_0896F4A4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -7954,9 +8100,7 @@ L_0896F4CC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F514; } @@ -7973,7 +8117,6 @@ L_0896F4EC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -7997,9 +8140,7 @@ L_0896F514: goto L_0896F53C; L_0896F53C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F588; } @@ -8008,9 +8149,7 @@ L_0896F53C: L_0896F54C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F574; } @@ -8024,7 +8163,6 @@ L_0896F560: AOT_REGCACHE_SYNC_OUT(); return; L_0896F56C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896F580; } @@ -8063,7 +8201,17 @@ L_0896F594: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F5A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[18]); @@ -8110,9 +8258,7 @@ L_0896F62C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8121,9 +8267,7 @@ L_0896F62C: L_0896F64C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8133,9 +8277,7 @@ L_0896F660: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8144,9 +8286,7 @@ L_0896F660: L_0896F678: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8155,7 +8295,6 @@ L_0896F678: L_0896F68C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896F824; } @@ -8164,9 +8303,7 @@ L_0896F68C: L_0896F698: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F6B4; } @@ -8182,9 +8319,7 @@ L_0896F6AC: } L_0896F6B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8193,9 +8328,7 @@ L_0896F6B4: L_0896F6C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F6E0; } @@ -8211,9 +8344,7 @@ L_0896F6D8: } L_0896F6E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8222,9 +8353,7 @@ L_0896F6E0: L_0896F6F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F70C; } @@ -8240,9 +8369,7 @@ L_0896F704: } L_0896F70C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8259,7 +8386,6 @@ L_0896F71C: } L_0896F728: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896F824; } @@ -8269,7 +8395,6 @@ L_0896F730: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_0896F824; } @@ -8278,9 +8403,7 @@ L_0896F730: L_0896F740: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F824; } @@ -8293,7 +8416,6 @@ L_0896F754: goto L_0896F868; L_0896F760: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896F7A0; } @@ -8302,7 +8424,6 @@ L_0896F760: L_0896F768: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896F784; } @@ -8315,7 +8436,6 @@ L_0896F774: AOT_REGCACHE_SYNC_OUT(); return; L_0896F77C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0896F7A0; } @@ -8347,7 +8467,6 @@ L_0896F7A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0896F824; } @@ -8358,7 +8477,6 @@ L_0896F7B0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(614), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896F810; } @@ -8371,7 +8489,6 @@ L_0896F7C4: goto L_0896F868; L_0896F7D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0896F7F4; } @@ -8386,7 +8503,6 @@ L_0896F7D8: goto L_0896D898; L_0896F7EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896F824; } @@ -8401,7 +8517,6 @@ L_0896F7F4: goto L_0896D898; L_0896F808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896F824; } @@ -8416,7 +8531,6 @@ L_0896F810: goto L_0896D898; L_0896F824: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0896F618; } @@ -8444,11 +8558,20 @@ L_0896F82C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F868: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(119))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0896F8D8; } @@ -8529,7 +8652,6 @@ L_0896F8B8: } L_0896F8C0: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0896F8D0; } @@ -8554,7 +8676,6 @@ L_0896F8D0: L_0896F8D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0896F930; } @@ -8611,7 +8732,6 @@ L_0896F910: } L_0896F918: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0896F928; } @@ -8638,11 +8758,20 @@ L_0896F930: goto L_0896F934; L_0896F934: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896F93C: aot_gpr_5 = (16457u << 16u); aot_gpr_5 = (aot_gpr_5 | 3670u); @@ -8678,9 +8807,7 @@ L_0896F990: L_0896F99C: ctx.fpr[1] = ctx.fpr[1] - ctx.fpr[4]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[6])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F99C; } @@ -8688,7 +8815,6 @@ L_0896F99C: } L_0896F9B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[5])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16585u << 16u); if (branch_taken) { @@ -8703,9 +8829,7 @@ L_0896F9C0: L_0896F9C8: ctx.fpr[1] = ctx.fpr[1] + ctx.fpr[4]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[5])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896F9C8; } @@ -8725,9 +8849,7 @@ L_0896F9DC: goto L_0896F9FC; L_0896F9FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FA24; } @@ -8747,9 +8869,7 @@ L_0896FA0C: } L_0896FA24: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FA60; } @@ -8758,7 +8878,6 @@ L_0896FA24: L_0896FA34: ctx.fpr[3] = ctx.fpr[3] - ctx.fpr[2]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(64), std::bit_cast(ctx.fpr[3])); if (branch_taken) { @@ -8784,7 +8903,6 @@ L_0896FA60: aot_gpr_5 = (aot_gpr_5 | 3670u); ctx.fpr[4] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(64), std::bit_cast(ctx.fpr[3])); if (branch_taken) { @@ -8806,7 +8924,6 @@ L_0896FA98: ctx.fpr[2] = aot_fpr_13 - ctx.fpr[19]; aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[2])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[2]) ^ 0x80000000u); goto L_0896FAB0; @@ -8814,9 +8931,7 @@ L_0896FA98: goto L_0896FAB0; L_0896FAB0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FAD4; } @@ -8835,7 +8950,6 @@ L_0896FAC0: } L_0896FAD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[19] + ctx.fpr[0]; goto L_0896FAFC; @@ -8866,7 +8980,6 @@ L_0896FB10: aot_fpr_13 = aot_fpr_14 - ctx.fpr[16]; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_0896FB28; @@ -8874,9 +8987,7 @@ L_0896FB10: goto L_0896FB28; L_0896FB28: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FB44; } @@ -8893,9 +9004,7 @@ L_0896FB38: } L_0896FB44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FB60; } @@ -8919,11 +9028,20 @@ L_0896FB68: goto L_0896FB6C; L_0896FB6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896FB74: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -8936,7 +9054,6 @@ L_0896FB74: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[16])); { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[16]) ^ 0x80000000u); goto L_0896FBAC; @@ -8944,9 +9061,7 @@ L_0896FB74: goto L_0896FBAC; L_0896FBAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FBD8; } @@ -8954,9 +9069,7 @@ L_0896FBAC: } L_0896FBBC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FBE4; } @@ -8989,11 +9102,20 @@ L_0896FBEC: goto L_0896FBF0; L_0896FBF0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896FBF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[19]); @@ -9025,7 +9147,6 @@ L_0896FC58: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -9075,7 +9196,17 @@ L_0896FC7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896FCF4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); @@ -9114,21 +9245,40 @@ L_0896FCF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896FD6C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896FD74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896FDC0; } @@ -9137,7 +9287,6 @@ L_0896FD74: L_0896FD94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17264))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896FDB0; } @@ -9155,12 +9304,10 @@ L_0896FDA0: } L_0896FDB0: aot_gpr_31 = (0x0896FDB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 129u, 0x0897084Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896FDB8u) goto L_0896FDB8; AOT_REGCACHE_SYNC_OUT(); return; L_0896FDB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896FF00; } @@ -9168,12 +9315,10 @@ L_0896FDB8: } L_0896FDC0: aot_gpr_31 = (0x0896FDC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 125u, 0x089707FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0896FDC8u) goto L_0896FDC8; AOT_REGCACHE_SYNC_OUT(); return; L_0896FDC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0896FF00; } @@ -9195,7 +9340,6 @@ L_0896FDD8: aot_gpr_4 = (aot_gpr_6 + aot_gpr_4); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0896FE64; } @@ -9207,7 +9351,6 @@ L_0896FE08: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(86)))))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FE50; } @@ -9216,7 +9359,6 @@ L_0896FE08: L_0896FE20: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(32))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FE50; } @@ -9225,7 +9367,6 @@ L_0896FE20: L_0896FE2C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(34))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FE50; } @@ -9234,7 +9375,6 @@ L_0896FE2C: L_0896FE38: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(38))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FE50; } @@ -9243,7 +9383,6 @@ L_0896FE38: L_0896FE44: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(40))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0896FE58; } @@ -9256,7 +9395,6 @@ L_0896FE50: L_0896FE58: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0896FE08; } @@ -9280,7 +9418,6 @@ L_0896FE7C: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0896FDD0; } @@ -9290,7 +9427,6 @@ L_0896FE94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-25488))); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0896FF00; } @@ -9302,7 +9438,6 @@ L_0896FEA4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(86)))))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FEEC; } @@ -9311,7 +9446,6 @@ L_0896FEA4: L_0896FEBC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(32))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FEEC; } @@ -9320,7 +9454,6 @@ L_0896FEBC: L_0896FEC8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(34))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FEEC; } @@ -9329,7 +9462,6 @@ L_0896FEC8: L_0896FED4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(38))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_0896FEEC; } @@ -9338,7 +9470,6 @@ L_0896FED4: L_0896FEE0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(40))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0896FEF4; } @@ -9351,7 +9482,6 @@ L_0896FEEC: L_0896FEF4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_0896FEA4; } @@ -9370,7 +9500,17 @@ L_0896FF00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0896FF18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9383,7 +9523,6 @@ L_0896FF30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17264))); aot_gpr_5 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 1u, 0x08970000u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9411,7 +9550,6 @@ L_0896FF5C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(116), static_cast(0u)); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(64), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -9422,9 +9560,7 @@ L_0896FF5C: L_0896FF94: aot_fpr_13 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0896FF94; } @@ -9445,7 +9581,6 @@ L_0896FFAC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(30))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0896FFE4; } @@ -9465,7 +9600,6 @@ L_0896FFE4: goto L_0896FFEC; L_0896FFEC: aot_gpr_31 = (0x0896FFF4u); - // nop goto L_0896FD6C; L_0896FFF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17264))); diff --git a/profiles/vcs/generated/generated_unit_0091.cpp b/profiles/vcs/generated/generated_unit_0091.cpp index a64e8eb..1b2639b 100644 --- a/profiles/vcs/generated/generated_unit_0091.cpp +++ b/profiles/vcs/generated/generated_unit_0091.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0091[4095] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 5, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 8, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, - 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 19, 0, 20, 0, - 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 0, 0, 27, 0, 28, 0, 29, 0, 0, 0, 30, 0, 31, 0, 32, 0, 0, 0, 33, 0, - 34, 0, 35, 0, 0, 0, 36, 0, 37, 0, 38, 0, 0, 0, 39, 0, 40, 0, 41, 0, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, 45, 0, - 46, 47, 0, 48, 0, 0, 49, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 0, 0, 59, - 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 64, 65, 0, 66, 0, 0, 0, 0, 67, 0, 68, 69, 0, 70, - 0, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 79, 80, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, - 0, 84, 0, 85, 0, 86, 0, 0, 87, 0, 0, 0, 88, 0, 89, 0, 0, 0, 90, 0, 91, 92, 0, 93, 0, 0, 94, 0, 0, 0, 0, 95, - 0, 96, 0, 97, 0, 0, 98, 0, 0, 0, 99, 0, 100, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, - 104, 0, 0, 105, 0, 0, 106, 0, 0, 107, 0, 0, 108, 0, 0, 109, 0, 0, 110, 0, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 120, 0, 121, 0, 0, 122, 0, 123, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, - 0, 0, 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 130, 131, 0, 0, - 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, - 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 139, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, - 141, 0, 0, 0, 142, 143, 0, 144, 0, 0, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, - 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, - 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 160, 0, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, - 0, 0, 165, 0, 0, 166, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, - 186, 0, 0, 187, 188, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 193, 0, - 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, - 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, - 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 210, 0, 211, 0, 212, 0, 0, 213, 0, 0, 214, 0, 215, 0, - 0, 0, 0, 0, 216, 0, 217, 0, 218, 0, 0, 219, 0, 0, 0, 220, 0, 221, 0, 222, 0, 223, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, - 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 228, 0, 229, 0, 0, 230, 0, 0, 0, 231, 0, 232, 0, 233, 0, 234, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 0, 236, 0, 237, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, - 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 244, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 0, 247, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 252, 0, 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 255, 256, 0, 257, 0, 0, 0, 0, 0, 258, 0, 0, 259, 0, 0, 0, 0, 260, - 0, 0, 261, 0, 262, 0, 0, 263, 0, 264, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 285, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 290, 0, 291, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, - 297, 0, 0, 0, 298, 0, 299, 0, 300, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 303, 0, 0, 0, 304, 0, 305, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 308, 309, 0, 0, 0, 310, 0, 0, 0, 311, 0, 312, 0, 0, 0, 313, 0, 0, 314, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 325, - 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 331, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 333, 0, 334, 335, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, - 0, 338, 0, 0, 0, 339, 0, 340, 0, 341, 0, 0, 342, 0, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, - 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 352, 353, 0, 0, 0, 0, - 354, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 361, 0, - 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, - 0, 0, 0, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 372, 373, 374, 0, 375, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, - 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 382, 0, 383, 0, 0, 0, 384, 0, 385, 0, 0, 386, 0, 0, 0, 0, 387, 0, 388, - 0, 0, 0, 389, 0, 0, 0, 390, 0, 0, 391, 392, 0, 0, 0, 393, 0, 0, 0, 0, 394, 395, 0, 0, 396, 397, 0, 0, 0, 398, 0, 399, - 0, 400, 0, 401, 0, 402, 403, 0, 404, 0, 405, 0, 0, 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 411, 0, 412, 0, 413, 0, 0, 414, 0, - 415, 0, 416, 417, 0, 418, 0, 0, 419, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 0, 0, 423, 424, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 431, 0, 0, 432, - 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 435, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 443, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, - 0, 448, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 454, 0, 0, 0, 455, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 457, 0, 458, 0, 459, 0, 0, 460, 0, 461, 0, 0, 462, 0, 0, 0, 0, 463, - 0, 464, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 467, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 471, 0, 0, 0, 0, 0, 472, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, - 0, 0, 477, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, - 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 488, 0, 489, 0, 0, 490, 0, 491, 0, 0, 492, 0, 0, 0, - 0, 0, 0, 493, 0, 0, 0, 0, 494, 0, 495, 496, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 500, 0, 0, 501, 0, 502, - 503, 0, 0, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 509, 0, 510, 511, 0, 512, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 519, 0, - 520, 0, 521, 0, 522, 0, 523, 0, 0, 0, 524, 0, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 0, 0, 529, 0, 0, 530, 0, 0, 531, 0, - 532, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 0, - 0, 541, 0, 0, 542, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 546, 0, 547, 0, 548, 0, 0, 0, 0, 549, 550, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, 0, 554, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, - 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 560, 561, 562, 0, 563, 0, 0, 564, 0, 0, 565, 0, 0, 566, 0, 567, 568, 569, 0, 0, - 570, 0, 0, 571, 0, 572, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 577, 0, 0, 578, 0, 0, 579, 0, - 580, 581, 0, 582, 0, 583, 0, 0, 0, 0, 0, 0, 584, 585, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, - 0, 0, 0, 589, 0, 0, 590, 0, 591, 0, 592, 0, 0, 0, 593, 0, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 0, 598, 0, 599, 600, 0, - 601, 0, 602, 0, 0, 603, 0, 604, 605, 0, 606, 0, 607, 0, 0, 608, 0, 0, 0, 609, 0, 0, 610, 0, 0, 611, 612, 0, 0, 0, 613, 0, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 617, 0, 618, 0, 619, 620, 0, 0, 0, 0, 0, 0, - 621, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 627, 628, 0, 0, 0, 629, 0, 630, 0, 631, 0, 632, 633, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, - 0, 0, 0, 0, 0, 635, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 639, 0, 640, 0, 0, 0, 0, 0, - 0, 0, 641, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 643, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 647, 0, 0, - 0, 0, 648, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 652, 0, 653, 0, 0, 654, 0, 0, 0, - 655, 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 661, 0, - 0, 662, 0, 663, 0, 0, 664, 0, 665, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 0, 671, - 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 676, 0, 0, 677, 0, 0, 0, - 0, 678, 0, 679, 0, 0, 0, 0, 680, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 684, 0, 0, 685, 0, 0, - 0, 0, 686, 0, 687, 0, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 690, 0, 691, 0, 0, 692, 0, 693, 0, 0, 0, 0, 694, 0, 0, - 0, 695, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 699, 0, 700, 701, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 0, 0, 704, 0, 705, 0, 706, 0, 0, 0, 0, - 0, 0, 707, 708, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 713, 714, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, - 0, 716, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 721, 0, 722, 0, 723, 0, 0, 724, 0, 0, - 0, 725, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 728, 729, 0, 730, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 731, 0, 0, 732, 0, 733, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 736, 0, - 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 0, 0, 739, 0, 740, 0, 0, 741, 0, 0, 0, 742, 0, 743, 0, 744, 0, 745, 0, 746, - 0, 747, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 750, 0, 751, 0, 752, - 0, 0, 753, 0, 754, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 760, 0, 0, 761, 0, 0, 0, 0, 0, 0, 762, 0, 0, - 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 766, 0, 767, 0, 768, 0, 0, 0, 0, - 0, 0, 0, 769, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 772, 0, 773, 0, 774, 0, 0, 0, 0, 0, 0, - 0, 775, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 778, 0, 779, 0, 780, 0, 0, 0, 0, 0, 0, 0, 781, - 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 784, 0, 785, 0, 786, 0, 0, 0, 0, 787, 0, 788, 0, 789, 0, - 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 792, 0, 0, 793, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 795, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 798, 0, 799, 0, 800, 0, 0, 801, 0, 0, 0, 0, 0, 0, 802, 0, 803, 804, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 810, 0, 811, 812, 0, 0, 0, 0, - 0, 0, 0, 0, 813, 0, 0, 0, 814, 0, 0, 0, 815, 0, 816, 817, 0, 818, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 820, - 0, 821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, 0, 823, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, 826, 0, 0, 827, - 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 830, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 833, - 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 836, 0, 837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 838, 0, 839, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0091[64] = { + 0x2020402420A84021ull, 0x4545455554902050ull, 0x8AAAA24B45454545ull, 0x00040A84B42C8888ull, + 0x84B4512A12834900ull, 0x042492494000B44Aull, 0x0004020100804800ull, 0x8004294000200000ull, + 0x20002108300A0050ull, 0x052AA8B100A20022ull, 0x11208C8044040404ull, 0x0050200002450A24ull, + 0x2110800000800000ull, 0x44010A1901401240ull, 0x0224804804804805ull, 0x082A895052544421ull, + 0x202052A01544A80Aull, 0x0000A9002120C010ull, 0x0010A2948482C049ull, 0x0000250000000000ull, + 0x0000000000000004ull, 0x509000A408010014ull, 0x0001020015000000ull, 0x0000000000000000ull, + 0x500002000042A840ull, 0x8000228800005151ull, 0x804008010032288Cull, 0xA410201000000000ull, + 0x1203410100054050ull, 0x0C2880284400D2A2ull, 0x1224004051220085ull, 0x40010004206E1550ull, + 0xA3308C88A128B000ull, 0x0040052D4AD5456Aull, 0x00A1150894902259ull, 0x0452241249054500ull, + 0x4182322284A54100ull, 0x8122210405240000ull, 0xA4122D0812942450ull, 0x491400100015B551ull, + 0x444910854914A455ull, 0x8A0000800C2B0252ull, 0x3A49742040050000ull, 0x0802B02B49502069ull, + 0x464895A569544548ull, 0x0404820103544008ull, 0x201AA30004000000ull, 0x2821410405010920ull, + 0x4042084312808504ull, 0x124028408508894Aull, 0x214A41142520210Aull, 0x00000000D0120022ull, + 0x0000000000000000ull, 0x0082080C0A920000ull, 0x25508412101A0000ull, 0x42080A4002D00082ull, + 0xA900000AAA894090ull, 0x2048400401020214ull, 0x02A082080A820820ull, 0x542A082080A82082ull, + 0x0004000C00294001ull, 0x0D0254000806812Aull, 0x9400A8028202D110ull, 0x50015002A002A002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0091[64] = { + 1u, 13u, 34u, 60u, 76u, 96u, 113u, 119u, 126u, 136u, 153u, 165u, 176u, 181u, 194u, 206u, + 225u, 242u, 252u, 268u, 271u, 272u, 283u, 288u, 288u, 297u, 308u, 320u, 326u, 338u, 354u, 367u, + 381u, 400u, 422u, 440u, 456u, 473u, 484u, 503u, 520u, 541u, 555u, 570u, 589u, 614u, 626u, 635u, + 648u, 662u, 678u, 695u, 702u, 702u, 712u, 725u, 737u, 753u, 763u, 775u, 790u, 798u, 813u, 828u, }; void recomp_unit_0091_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0091_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08970000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0091[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0091[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0091[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08970000; @@ -1022,14 +929,23 @@ L_08970000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08970014: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970054; } @@ -1048,7 +964,6 @@ L_08970038: } L_0897004C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08970134; } @@ -1056,7 +971,6 @@ L_0897004C: } L_08970054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08970134; } @@ -1075,7 +989,6 @@ L_08970074: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(122))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970110; } @@ -1084,7 +997,6 @@ L_08970074: L_08970088: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(119))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970110; } @@ -1097,9 +1009,7 @@ L_08970094: aot_gpr_6 = (aot_gpr_4 + static_cast(48)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970118; } @@ -1110,9 +1020,7 @@ L_089700B8: aot_gpr_6 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970118; } @@ -1124,9 +1032,7 @@ L_089700D4: aot_fpr_13 = aot_fpr_12 + ctx.fpr[20]; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970118; } @@ -1137,9 +1043,7 @@ L_089700F4: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970118; } @@ -1156,7 +1060,6 @@ L_08970118: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970074; } @@ -1176,11 +1079,20 @@ L_08970134: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08970150: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08970170; } @@ -1189,7 +1101,6 @@ L_08970150: L_0897015C: aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08970228; } @@ -1253,7 +1164,6 @@ L_08970198: } L_089701A0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089701B8; } @@ -1263,7 +1173,6 @@ L_089701A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089701C0; } @@ -1289,7 +1198,6 @@ L_089701C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089701E0; } @@ -1297,7 +1205,6 @@ L_089701C8: } L_089701D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089701B8; } @@ -1315,7 +1222,6 @@ L_089701E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970200; } @@ -1323,7 +1229,6 @@ L_089701E8: } L_089701F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089701B8; } @@ -1341,7 +1246,6 @@ L_08970208: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970220; } @@ -1349,7 +1253,6 @@ L_08970208: } L_08970218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089701B8; } @@ -1367,7 +1270,6 @@ L_08970228: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970240; } @@ -1375,7 +1277,6 @@ L_08970228: } L_08970238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089701B8; } @@ -1393,7 +1294,6 @@ L_08970248: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970260; } @@ -1401,7 +1301,6 @@ L_08970248: } L_08970258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089701B8; } @@ -1419,7 +1318,6 @@ L_08970268: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970280; } @@ -1427,7 +1325,6 @@ L_08970268: } L_08970278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089701B8; } @@ -1438,15 +1335,23 @@ L_08970280: goto L_08970284; L_08970284: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897028C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089702B4; } @@ -1521,7 +1426,6 @@ L_089702DC: } L_089702E4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08970348; } @@ -1587,17 +1491,25 @@ L_08970348: goto L_0897034C; L_0897034C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08970354: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17260))); aot_gpr_5 = (0u | 127u); aot_gpr_4 = (aot_gpr_4 & 127u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08970370; } @@ -1616,15 +1528,23 @@ L_08970370: goto L_08970374; L_08970374: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897037C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089703A4; } @@ -1643,7 +1563,6 @@ L_08970388: } L_0897039C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897045C; } @@ -1686,9 +1605,7 @@ L_089703C8: aot_fpr_15 = aot_fpr_15 + ctx.fpr[17]; aot_fpr_15 = std::sqrt(aot_fpr_15); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970444; } @@ -1697,7 +1614,6 @@ L_089703C8: L_08970420: ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(108))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08970444; } @@ -1706,7 +1622,6 @@ L_08970420: L_0897042C: ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(117))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_6; - // nop if (branch_taken) { goto L_08970440; } @@ -1714,7 +1629,6 @@ L_0897042C: } L_08970438: { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_08970444; } @@ -1737,15 +1651,23 @@ L_08970444: } L_0897045C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08970464: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0897048C; } @@ -1781,7 +1703,6 @@ L_0897048C: L_08970494: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(108))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089704B8; } @@ -1799,7 +1720,6 @@ L_089704A0: } L_089704B0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089704D0; } @@ -1828,15 +1748,23 @@ L_089704D0: goto L_089704D4; L_089704D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089704DC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08970504; } @@ -1872,7 +1800,6 @@ L_08970504: L_0897050C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(108))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_08970530; } @@ -1901,18 +1828,26 @@ L_08970530: goto L_08970534; L_08970534: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897053C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(64), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08970580; } @@ -1920,7 +1855,6 @@ L_0897053C: } L_08970578: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089707C8; } @@ -2001,7 +1935,6 @@ L_089705E8: L_0897062C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089707B4; } @@ -2014,9 +1947,7 @@ L_08970638: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089707B4; } @@ -2029,9 +1960,7 @@ L_0897065C: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089707B4; } @@ -2044,9 +1973,7 @@ L_08970680: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089707B4; } @@ -2059,9 +1986,7 @@ L_089706A4: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089707B4; } @@ -2187,7 +2112,6 @@ L_08970754: AOT_REGCACHE_SYNC_OUT(); return; L_08970798: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089707B4; } @@ -2201,7 +2125,6 @@ L_089707A0: AOT_REGCACHE_SYNC_OUT(); return; L_089707AC: aot_gpr_31 = (0x089707B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089707B4u) goto L_089707B4; AOT_REGCACHE_SYNC_OUT(); return; L_089707B4: @@ -2235,7 +2158,17 @@ L_089707C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089707FC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17264))); ctx.gpr[7] = (0u | 0u); @@ -2270,11 +2203,20 @@ L_08970818: } L_08970844: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897084C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2324,7 +2266,17 @@ L_089708A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089708B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(116))); @@ -2363,7 +2315,6 @@ L_08970914: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08970944; @@ -2371,7 +2322,6 @@ L_08970914: goto L_08970944; L_08970944: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(117))); goto L_08970994; @@ -2389,7 +2339,6 @@ L_0897095C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08970980; @@ -2397,9 +2346,7 @@ L_0897095C: goto L_08970980; L_08970980: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897099C; } @@ -2418,7 +2365,6 @@ L_0897099C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(117))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -2458,7 +2404,6 @@ L_089709C4: } L_089709CC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08971244; } @@ -2467,7 +2412,6 @@ L_089709CC: L_089709D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089709E8; } @@ -2487,9 +2431,7 @@ L_089709E8: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2501,9 +2443,7 @@ L_08970A08: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2515,9 +2455,7 @@ L_08970A28: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2529,9 +2467,7 @@ L_08970A48: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2541,7 +2477,6 @@ L_08970A68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970B58; } @@ -2554,7 +2489,6 @@ L_08970A78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(320))); aot_gpr_5 = (aot_gpr_5 | 55050u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2576,9 +2510,7 @@ L_08970AA8: goto L_08970AAC; L_08970AAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2588,7 +2520,6 @@ L_08970ABC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(324))); goto L_08970AE0; @@ -2605,9 +2536,7 @@ L_08970AD4: } L_08970AE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2617,7 +2546,6 @@ L_08970AF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(328))); goto L_08970B14; @@ -2634,9 +2562,7 @@ L_08970B08: } L_08970B14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08970B58; } @@ -2644,7 +2570,6 @@ L_08970B14: } L_08970B24: aot_gpr_31 = (0x08970B2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08970B2Cu) goto L_08970B2C; AOT_REGCACHE_SYNC_OUT(); return; L_08970B2C: @@ -2658,7 +2583,6 @@ L_08970B2C: goto L_08970B40; L_08970B40: aot_gpr_31 = (0x08970B48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08970B48u) goto L_08970B48; AOT_REGCACHE_SYNC_OUT(); return; L_08970B48: @@ -2713,7 +2637,6 @@ L_08970BB4: AOT_REGCACHE_SYNC_OUT(); return; L_08970BD0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08970D58; } @@ -2750,7 +2673,6 @@ L_08970BD8: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -2807,7 +2729,6 @@ L_08970CE0: ctx.gpr[18] = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 10000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08970D58; } @@ -2828,7 +2749,6 @@ L_08970CF4: L_08970D18: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08970D58; } @@ -2855,7 +2775,6 @@ L_08970D30: AOT_REGCACHE_SYNC_OUT(); return; L_08970D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -2897,7 +2816,6 @@ L_08970D90: AOT_REGCACHE_SYNC_OUT(); return; L_08970DA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08970F48; } @@ -2908,7 +2826,6 @@ L_08970DAC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08970F48; } @@ -2942,7 +2859,6 @@ L_08970DE8: } L_08970DF8: aot_gpr_31 = (0x08970E00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08970E00u) goto L_08970E00; AOT_REGCACHE_SYNC_OUT(); return; L_08970E00: @@ -3032,7 +2948,6 @@ L_08970EBC: L_08970EC8: aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08970F48; } @@ -3087,7 +3002,6 @@ L_08970F38: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08970ED4; } @@ -3095,7 +3009,6 @@ L_08970F38: } L_08970F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -3139,7 +3052,6 @@ L_08970F78: AOT_REGCACHE_SYNC_OUT(); return; L_08970F90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08970FA0; } @@ -3152,7 +3064,6 @@ L_08970F98: L_08970FA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08970FBC; } @@ -3162,7 +3073,6 @@ L_08970FAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08970FC4; } @@ -3174,7 +3084,6 @@ L_08970FBC: goto L_08970FC4; L_08970FC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -3226,7 +3135,6 @@ L_0897100C: AOT_REGCACHE_SYNC_OUT(); return; L_0897102C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897103C; } @@ -3239,7 +3147,6 @@ L_08971034: L_0897103C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971058; } @@ -3249,7 +3156,6 @@ L_08971048: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971060; } @@ -3261,7 +3167,6 @@ L_08971058: goto L_08971060; L_08971060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -3286,7 +3191,6 @@ L_08971070: AOT_REGCACHE_SYNC_OUT(); return; L_08971094: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897123C; } @@ -3294,7 +3198,6 @@ L_08971094: } L_0897109C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897123C; } @@ -3303,7 +3206,6 @@ L_0897109C: L_089710A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971138; } @@ -3355,7 +3257,6 @@ L_08971110: aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; aot_fpr_12 = std::sqrt(aot_fpr_12); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897113C; } @@ -3368,9 +3269,7 @@ L_0897113C: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08971160; } @@ -3379,7 +3278,6 @@ L_0897113C: L_08971154: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(121))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897123C; } @@ -3390,7 +3288,6 @@ L_08971160: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(117), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971238; } @@ -3420,11 +3317,9 @@ L_089711A0: goto L_0897028C; L_089711AC: aot_gpr_31 = (0x089711B4u); - // nop goto L_08970354; L_089711B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08971200; } @@ -3459,7 +3354,6 @@ L_08971200: L_0897120C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971238; } @@ -3483,7 +3377,6 @@ L_08971238: goto L_0897123C; L_0897123C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -3495,7 +3388,6 @@ L_08971244: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(119))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971268; } @@ -3538,7 +3430,6 @@ L_08971290: AOT_REGCACHE_SYNC_OUT(); return; L_0897129C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089712B4; } @@ -3552,7 +3443,6 @@ L_089712A4: goto L_089712B4; L_089712B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089712BC; } @@ -3626,7 +3516,6 @@ L_089712D0: } L_089713A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089715F8; } @@ -3635,7 +3524,6 @@ L_089713A0: L_089713A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971508; } @@ -3807,7 +3695,6 @@ L_08971408: goto L_08971508; L_08971508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089715F8; } @@ -3825,7 +3712,6 @@ L_08971510: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08971588; } @@ -3840,7 +3726,6 @@ L_08971540: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(64), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3889,7 +3774,6 @@ L_0897159C: aot_fpr_13 = aot_fpr_14 + aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(64), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -3976,7 +3860,17 @@ L_08971670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089716A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -4201,7 +4095,17 @@ L_08971844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971858: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(ctx.fpr[20])); @@ -4240,7 +4144,6 @@ L_089718A4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-17264))); ctx.fpr[18] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_16 + static_cast(17072)); if (branch_taken) { @@ -4250,7 +4153,6 @@ L_089718A4: } L_089718F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08971918; } @@ -4258,7 +4160,6 @@ L_089718F0: } L_089718F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08971AAC; } @@ -4266,9 +4167,7 @@ L_089718F8: } L_08971900: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08971918; } @@ -4276,7 +4175,6 @@ L_08971900: } L_08971910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08971920; } @@ -4319,9 +4217,7 @@ L_08971938: ctx.fpr[0] = ctx.fpr[0] + ctx.fpr[3]; ctx.fpr[0] = std::sqrt(ctx.fpr[0]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089719A4; } @@ -4329,9 +4225,7 @@ L_08971938: } L_0897198C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089719A4; } @@ -4373,7 +4267,6 @@ L_089719B4: L_089719FC: ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(121))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08971A0C; } @@ -4404,7 +4297,6 @@ L_08971A1C: } L_08971A2C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08971A44; } @@ -4475,7 +4367,17 @@ L_08971AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971AD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4546,7 +4448,17 @@ L_08971B90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971BB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4572,7 +4484,6 @@ L_08971BD0: L_08971BE8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971BFC; } @@ -4595,14 +4506,34 @@ L_08971BFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971C10: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971C18: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2), static_cast(aot_gpr_6)); @@ -4615,21 +4546,49 @@ L_08971C18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971C38: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971C40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971C48: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -4666,7 +4625,6 @@ L_08971CA0: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08971CC4; } @@ -4734,7 +4692,6 @@ L_08971D1C: L_08971D24: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08971D3C; } @@ -4833,7 +4790,6 @@ L_08971DEC: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971E08; } @@ -4841,7 +4797,6 @@ L_08971DEC: } L_08971E00: aot_gpr_31 = (0x08971E08u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08971E08u) goto L_08971E08; AOT_REGCACHE_SYNC_OUT(); return; L_08971E08: @@ -4926,7 +4881,17 @@ L_08971E98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971EC8: ctx.gpr[2] = (2199u << 16u); jump_target = aot_gpr_31; @@ -4934,12 +4899,21 @@ L_08971EC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971ED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08971EE4u); - // nop goto L_08971EC8; L_08971EE4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4948,7 +4922,17 @@ L_08971EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971EF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4977,7 +4961,6 @@ L_08971F20: goto L_08971F28; L_08971F28: aot_gpr_31 = (0x08971F30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08971F30u) goto L_08971F30; AOT_REGCACHE_SYNC_OUT(); return; L_08971F30: @@ -4999,7 +4982,6 @@ L_08971F48: goto L_08971F4C; L_08971F4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08971F58; } @@ -5022,7 +5004,17 @@ L_08971F58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971F74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5048,7 +5040,17 @@ L_08971F88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08971FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5099,7 +5101,6 @@ L_0897203C: goto L_0897204C; L_0897204C: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08972074; } @@ -5108,7 +5109,6 @@ L_0897204C: L_08972054: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = ctx.gpr[21] == aot_gpr_6; - // nop if (branch_taken) { goto L_08972074; } @@ -5224,7 +5224,6 @@ L_08972104: goto L_0897210C; L_0897210C: aot_gpr_31 = (0x08972114u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972114u) goto L_08972114; AOT_REGCACHE_SYNC_OUT(); return; L_08972114: @@ -5232,7 +5231,6 @@ L_08972114: goto L_08972118; L_08972118: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089720F4; } @@ -5278,7 +5276,6 @@ L_08972148: goto L_08972150; L_08972150: aot_gpr_31 = (0x08972158u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972158u) goto L_08972158; AOT_REGCACHE_SYNC_OUT(); return; L_08972158: @@ -5286,7 +5283,6 @@ L_08972158: goto L_0897215C; L_0897215C: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08972138; } @@ -5315,7 +5311,6 @@ L_08972178: goto L_08972180; L_08972180: aot_gpr_31 = (0x08972188u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972188u) goto L_08972188; AOT_REGCACHE_SYNC_OUT(); return; L_08972188: @@ -5329,7 +5324,6 @@ L_0897218C: L_08972194: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089721A8; } @@ -5359,7 +5353,17 @@ L_089721A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089721D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5406,7 +5410,17 @@ L_08972224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972234: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5452,7 +5466,17 @@ L_0897227C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897228C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5478,7 +5502,17 @@ L_089722B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089722C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -5524,28 +5558,55 @@ L_08972328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972338: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972340: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972348: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089723D8; } @@ -5554,7 +5615,6 @@ L_08972348: L_08972360: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08972384; } @@ -5578,7 +5638,6 @@ L_08972378: L_08972384: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089723D8; } @@ -5608,7 +5667,6 @@ L_089723B4: L_089723C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089723D8; } @@ -5616,7 +5674,6 @@ L_089723C4: } L_089723D0: aot_gpr_31 = (0x089723D8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089723D8u) goto L_089723D8; AOT_REGCACHE_SYNC_OUT(); return; L_089723D8: @@ -5627,7 +5684,17 @@ L_089723D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089723E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(188))); @@ -5641,7 +5708,6 @@ L_089723E8: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08972440; } @@ -5659,7 +5725,6 @@ L_08972420: goto L_08972438; L_08972438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089724DC; } @@ -5680,7 +5745,6 @@ L_08972448: goto L_08972454; L_08972454: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0897247C; } @@ -5689,7 +5753,6 @@ L_08972454: L_0897245C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_6; - // nop if (branch_taken) { goto L_0897247C; } @@ -5718,7 +5781,6 @@ L_08972484: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[18] = (aot_gpr_5 | 0u); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089724DC; } @@ -5777,7 +5839,17 @@ L_089724E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089724F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_16); @@ -5906,7 +5978,6 @@ L_08972618: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0897265C; } @@ -5915,7 +5986,6 @@ L_08972618: L_08972628: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08972650; } @@ -5987,7 +6057,6 @@ L_089726A8: goto L_089726AC; L_089726AC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08972700; } @@ -6067,7 +6136,6 @@ L_08972720: goto L_08972728; L_08972728: aot_gpr_31 = (0x08972730u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972730u) goto L_08972730; AOT_REGCACHE_SYNC_OUT(); return; L_08972730: @@ -6075,7 +6143,6 @@ L_08972730: goto L_08972734; L_08972734: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08972710; } @@ -6086,7 +6153,6 @@ L_0897273C: goto L_08972740; L_08972740: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08972750; } @@ -6094,7 +6160,6 @@ L_08972740: } L_08972748: aot_gpr_31 = (0x08972750u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972750u) goto L_08972750; AOT_REGCACHE_SYNC_OUT(); return; L_08972750: @@ -6120,7 +6185,17 @@ L_08972750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972790: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[30]); @@ -6134,7 +6209,6 @@ L_08972790: AOT_REGCACHE_SYNC_OUT(); return; L_089727C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08972800; } @@ -6164,7 +6238,6 @@ L_089727EC: } L_089727F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08972810; } @@ -6180,12 +6253,10 @@ L_08972800: } L_08972808: aot_gpr_31 = (0x08972810u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972810u) goto L_08972810; AOT_REGCACHE_SYNC_OUT(); return; L_08972810: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08972850; } @@ -6247,12 +6318,10 @@ L_0897286C: } L_08972878: aot_gpr_31 = (0x08972880u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972880u) goto L_08972880; AOT_REGCACHE_SYNC_OUT(); return; L_08972880: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08972968; } @@ -6292,7 +6361,6 @@ L_089728C0: L_089728CC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08972954; } @@ -6355,7 +6423,6 @@ L_08972940: goto L_08972944; L_08972944: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08972954; } @@ -6371,7 +6438,6 @@ L_08972954: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089728B0; } @@ -6399,7 +6465,17 @@ L_0897296C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897299C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -6450,7 +6526,6 @@ L_089729FC: AOT_REGCACHE_SYNC_OUT(); return; L_08972A40: aot_gpr_31 = (0x08972A48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 63u, 0x08B0C4CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972A48u) goto L_08972A48; AOT_REGCACHE_SYNC_OUT(); return; L_08972A48: @@ -6529,7 +6604,6 @@ L_08972ACC: L_08972AD8: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08972AF0; } @@ -6610,7 +6684,6 @@ L_08972B60: L_08972B6C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08972B84; } @@ -6648,7 +6721,6 @@ L_08972BB0: goto L_08972BB4; L_08972BB4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08972BC4; } @@ -6676,7 +6748,17 @@ L_08972BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972BEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6692,7 +6774,6 @@ L_08972BEC: L_08972C0C: aot_gpr_4 = (static_cast(aot_gpr_4) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08972CE8; } @@ -6700,7 +6781,6 @@ L_08972C0C: } L_08972C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08972C60; } @@ -6708,7 +6788,6 @@ L_08972C18: } L_08972C20: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08972CE8; } @@ -6718,7 +6797,6 @@ L_08972C28: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(197))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08972C58; } @@ -6728,7 +6806,6 @@ L_08972C38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(198))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08972C50; } @@ -6748,7 +6825,6 @@ L_08972C50: goto L_08972C58; L_08972C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08972CE8; } @@ -6757,7 +6833,6 @@ L_08972C58: L_08972C60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08972C78; } @@ -6765,7 +6840,6 @@ L_08972C60: } L_08972C6C: aot_gpr_31 = (0x08972C74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972C74u) goto L_08972C74; AOT_REGCACHE_SYNC_OUT(); return; L_08972C74: @@ -6773,12 +6847,10 @@ L_08972C74: goto L_08972C78; L_08972C78: aot_gpr_31 = (0x08972C80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 472u, 0x088B6860u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972C80u) goto L_08972C80; AOT_REGCACHE_SYNC_OUT(); return; L_08972C80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08972CB0; } @@ -6787,7 +6859,6 @@ L_08972C80: L_08972C88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08972CA0; } @@ -6795,7 +6866,6 @@ L_08972C88: } L_08972C94: aot_gpr_31 = (0x08972C9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972C9Cu) goto L_08972C9C; AOT_REGCACHE_SYNC_OUT(); return; L_08972C9C: @@ -6803,12 +6873,10 @@ L_08972C9C: goto L_08972CA0; L_08972CA0: aot_gpr_31 = (0x08972CA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 562u, 0x088B6F30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08972CA8u) goto L_08972CA8; AOT_REGCACHE_SYNC_OUT(); return; L_08972CA8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08972CBC; } @@ -6827,7 +6895,6 @@ L_08972CBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(197))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08972CE8; } @@ -6836,7 +6903,6 @@ L_08972CBC: L_08972CCC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(198))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08972CE4; } @@ -6862,7 +6928,17 @@ L_08972CE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972CF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6872,7 +6948,17 @@ L_08972CF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972D0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -6901,7 +6987,6 @@ L_08972D38: AOT_REGCACHE_SYNC_OUT(); return; L_08972D48: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08972D58; } @@ -6917,7 +7002,6 @@ L_08972D50: } L_08972D58: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08972D38; } @@ -6940,7 +7024,17 @@ L_08972D64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972D80: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(152))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(3))); @@ -6954,7 +7048,17 @@ L_08972D80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972DA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6967,7 +7071,6 @@ L_08972DA4: L_08972DBC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08972DE8; } @@ -7042,7 +7145,17 @@ L_08972DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972E68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -7077,7 +7190,6 @@ L_08972EA4: AOT_REGCACHE_SYNC_OUT(); return; L_08972EB4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08972EC4; } @@ -7093,7 +7205,6 @@ L_08972EBC: } L_08972EC4: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08972EA4; } @@ -7118,7 +7229,17 @@ L_08972ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972EF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(152), aot_gpr_5); @@ -7141,7 +7262,6 @@ L_08972F14: L_08972F20: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(148))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08972F14; } @@ -7159,7 +7279,17 @@ L_08972F2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -7201,7 +7331,17 @@ L_08972F88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972FA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7224,7 +7364,17 @@ L_08972FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08972FD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7247,7 +7397,17 @@ L_08972FF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973008: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7270,7 +7430,17 @@ L_08973028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897303C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7296,7 +7466,6 @@ L_0897305C: L_08973064: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(148))); { const bool branch_taken = aot_gpr_6 == aot_gpr_16; - // nop if (branch_taken) { goto L_08973080; } @@ -7306,7 +7475,6 @@ L_08973070: aot_gpr_5 = (aot_gpr_6 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(148))); { const bool branch_taken = aot_gpr_6 != aot_gpr_16; - // nop if (branch_taken) { goto L_08973070; } @@ -7331,7 +7499,17 @@ L_08973098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089730AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(164))); @@ -7372,7 +7550,6 @@ L_089730D8: L_089730F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0897310C; } @@ -7386,7 +7563,6 @@ L_08973104: L_0897310C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08973120; } @@ -7399,7 +7575,6 @@ L_08973118: L_08973120: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897313C; } @@ -7409,7 +7584,6 @@ L_0897312C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(148))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897312C; } @@ -7430,7 +7604,6 @@ L_0897314C: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(4), 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_0897314C; } @@ -7450,7 +7623,17 @@ L_08973168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897317C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -7497,11 +7680,20 @@ L_089731D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089731E4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08973204; } @@ -7516,17 +7708,25 @@ L_089731F0: goto L_08973204; L_08973204: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897320C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(164))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08973268; } @@ -7560,7 +7760,6 @@ L_08973234: L_08973254: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08973268; } @@ -7578,7 +7777,17 @@ L_08973268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973274: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7599,7 +7808,17 @@ L_08973290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089732A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7614,7 +7833,6 @@ L_089732A0: L_089732B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089732D8; } @@ -7627,7 +7845,6 @@ L_089732C4: L_089732CC: aot_gpr_4 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089732C4; } @@ -7649,12 +7866,21 @@ L_089732E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089732F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08973304u); - // nop goto L_089732A0; L_08973304: ctx.gpr[2] = (0u | 1u); @@ -7664,7 +7890,17 @@ L_08973304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973314: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -7681,7 +7917,6 @@ L_08973314: L_08973344: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08973370; } @@ -7897,7 +8132,6 @@ L_08973544: L_08973550: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897356C; } @@ -7922,7 +8156,6 @@ L_0897356C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), ctx.gpr[19]); ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(148))); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08973544; } @@ -7939,7 +8172,6 @@ L_0897358C: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(160), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897364C; } @@ -8020,7 +8252,17 @@ L_08973650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8031,7 +8273,6 @@ L_08973670: L_08973684: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089736A8; } @@ -8054,13 +8295,22 @@ L_089736A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089736BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089736E0; } @@ -8072,7 +8322,6 @@ L_089736D0: goto L_08972EF4; L_089736D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089736E8; } @@ -8089,7 +8338,17 @@ L_089736E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089736F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(152))); ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3))); @@ -8098,7 +8357,17 @@ L_089736F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973704: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(152))); // PSP CACHE is a no-op in coherent host memory. @@ -8177,18 +8446,26 @@ L_0897371C: } L_08973750: aot_gpr_31 = (0x08973758u); - // nop goto L_08973764; L_08973758: aot_gpr_31 = (ctx.gpr[7] | 0u); goto L_0897375C; L_0897375C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973764: // PSP CACHE is a no-op in coherent host memory. { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(16); @@ -8267,7 +8544,6 @@ L_08973764: L_08973798: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(148))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08973764; } @@ -8275,11 +8551,20 @@ L_08973798: } L_089737A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089737AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-12)); { const std::uint32_t aot_run_words[3]{aot_gpr_4, aot_gpr_5, aot_gpr_31}; @@ -8360,7 +8645,17 @@ L_08973810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897381C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -8383,7 +8678,17 @@ L_08973840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897384C: aot_gpr_4 = (2234u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(3440)); @@ -8392,49 +8697,119 @@ L_0897384C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897385C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973864: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897386C: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(24), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973874: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(24)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897387C: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(26), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973884: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(26)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897388C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20]}; @@ -8463,7 +8838,6 @@ L_089738E0: AOT_REGCACHE_SYNC_OUT(); return; L_089738EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08973944; } @@ -8572,7 +8946,6 @@ L_089739F4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -8584,9 +8957,7 @@ L_08973A14: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973A5C; } @@ -8596,9 +8967,7 @@ L_08973A2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973A5C; } @@ -8608,7 +8977,6 @@ L_08973A44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -8626,7 +8994,6 @@ L_08973A5C: } L_08973A64: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08973BD4; } @@ -8638,7 +9005,6 @@ L_08973A6C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -8650,9 +9016,7 @@ L_08973A8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973AD4; } @@ -8662,9 +9026,7 @@ L_08973AA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973AD4; } @@ -8674,7 +9036,6 @@ L_08973ABC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -8692,7 +9053,6 @@ L_08973AD4: } L_08973ADC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08973BD4; } @@ -8704,7 +9064,6 @@ L_08973AE4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -8716,9 +9075,7 @@ L_08973B04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973B4C; } @@ -8728,9 +9085,7 @@ L_08973B1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973B4C; } @@ -8740,7 +9095,6 @@ L_08973B34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -8758,7 +9112,6 @@ L_08973B4C: } L_08973B54: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08973BD4; } @@ -8770,7 +9123,6 @@ L_08973B5C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -8782,9 +9134,7 @@ L_08973B7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973BC4; } @@ -8794,9 +9144,7 @@ L_08973B94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08973BC4; } @@ -8806,7 +9154,6 @@ L_08973BAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -8824,7 +9171,6 @@ L_08973BC4: } L_08973BCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08973BE8; } @@ -8845,7 +9191,6 @@ L_08973BE8: AOT_REGCACHE_SYNC_OUT(); return; L_08973BF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08973C38; } @@ -8935,7 +9280,17 @@ L_08973C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973CC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20]}; @@ -8952,7 +9307,6 @@ L_08973CC8: goto L_0897385C; L_08973D04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08973D44; } @@ -8979,7 +9333,6 @@ L_08973D20: goto L_0897388C; L_08973D3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08973D48; } @@ -9004,7 +9357,17 @@ L_08973D48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973D6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20]}; @@ -9021,7 +9384,6 @@ L_08973D6C: goto L_0897385C; L_08973DA8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08973DE8; } @@ -9048,7 +9410,6 @@ L_08973DC4: goto L_0897388C; L_08973DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08973DEC; } @@ -9073,12 +9434,21 @@ L_08973DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973E10: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); aot_gpr_4 = (0u | 126u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08973E38; } @@ -9088,7 +9458,6 @@ L_08973E20: ctx.gpr[2] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08973E38; } @@ -9096,7 +9465,6 @@ L_08973E20: } L_08973E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08973E3C; } @@ -9107,11 +9475,20 @@ L_08973E38: goto L_08973E3C; L_08973E3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -9120,7 +9497,6 @@ L_08973E44: aot_gpr_5 = (aot_gpr_4 < static_cast(33) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 12u, 0x089740F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9132,11 +9508,20 @@ L_08973E64: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-7936))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08973E7C: aot_gpr_31 = (0x08973E84u); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -9157,7 +9542,6 @@ L_08973E84: AOT_REGCACHE_SYNC_OUT(); return; L_08973EAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 12u, 0x089740F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9184,7 +9568,6 @@ L_08973EBC: AOT_REGCACHE_SYNC_OUT(); return; L_08973EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 12u, 0x089740F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9193,7 +9576,6 @@ L_08973EE8: L_08973EF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08973F3C; } @@ -9221,7 +9603,6 @@ L_08973F04: AOT_REGCACHE_SYNC_OUT(); return; L_08973F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08973F74; } @@ -9249,7 +9630,6 @@ L_08973F44: AOT_REGCACHE_SYNC_OUT(); return; L_08973F74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 12u, 0x089740F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9276,7 +9656,6 @@ L_08973F84: AOT_REGCACHE_SYNC_OUT(); return; L_08973FB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 12u, 0x089740F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9304,7 +9683,6 @@ L_08973FC0: AOT_REGCACHE_SYNC_OUT(); return; L_08973FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 12u, 0x089740F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0092.cpp b/profiles/vcs/generated/generated_unit_0092.cpp index 01440ca..9458c2b 100644 --- a/profiles/vcs/generated/generated_unit_0092.cpp +++ b/profiles/vcs/generated/generated_unit_0092.cpp @@ -16,135 +16,30 @@ static float get_effective_aspect_ratio(float default_aspect) noexcept { const float aspect = vcs::resolve_widescreen_aspect_ratio(config, output.width, output.height); return (aspect > 0.0f) ? aspect : default_aspect; } -static const std::uint16_t kEntryIds_recomp_unit_0092[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, 25, 0, 26, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 30, 0, 31, 0, 32, 0, 0, 33, 0, 34, 35, 0, 36, 0, 37, 0, 0, 38, 0, 0, 39, 0, 40, 0, 0, 41, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 49, 0, - 50, 0, 0, 51, 0, 0, 52, 0, 53, 0, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 58, 0, - 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, 62, 0, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 0, 0, 68, 0, 0, 0, 69, 0, 0, 70, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 73, 0, 74, 0, 0, 75, 0, 76, 0, 0, 77, 0, 0, 78, 0, 0, 0, 79, 0, - 80, 0, 81, 0, 0, 82, 0, 83, 0, 0, 84, 0, 0, 85, 0, 86, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 90, 0, 0, 91, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 0, 95, 0, 0, 96, 0, 0, 0, 97, 0, 98, - 0, 0, 99, 0, 0, 100, 0, 101, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 106, 0, 107, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 0, 0, 0, 113, 0, 114, - 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 118, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, - 0, 0, 126, 0, 127, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 131, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 140, 0, 141, 0, 142, 0, 0, 0, 0, 143, 0, - 144, 0, 145, 0, 146, 0, 0, 0, 0, 147, 0, 0, 148, 0, 149, 0, 0, 150, 0, 0, 0, 151, 0, 0, 152, 0, 0, 0, 153, 0, 154, 0, - 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 159, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 162, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 165, 0, 0, 0, - 166, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 172, 0, 173, 0, 0, 174, 0, 0, 175, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 179, - 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, - 189, 0, 0, 0, 190, 0, 191, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 194, 0, 195, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 198, 199, 0, 200, 0, 0, 201, 0, 202, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 205, 0, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 209, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 214, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, - 0, 217, 0, 218, 0, 0, 0, 219, 0, 0, 0, 220, 0, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 229, 0, 230, - 0, 0, 231, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 234, 0, 235, 0, 236, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 240, 0, 0, 241, 0, 0, 242, 0, 243, 0, 0, 244, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 0, 247, 0, 248, 0, 249, 0, 250, - 0, 251, 0, 252, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 256, 0, 257, 0, 0, 0, 258, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, - 0, 262, 0, 0, 0, 263, 0, 264, 0, 265, 0, 0, 0, 266, 0, 0, 0, 267, 0, 268, 0, 269, 0, 0, 0, 270, 0, 0, 0, 271, 0, 272, - 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 276, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, - 279, 0, 280, 0, 0, 0, 0, 281, 0, 0, 282, 0, 283, 0, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 0, 289, 0, 0, 290, 0, 0, - 291, 0, 292, 0, 0, 293, 0, 0, 294, 0, 295, 0, 0, 0, 0, 296, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 0, 304, 0, 0, 0, 0, 305, 0, 0, 0, 306, 0, - 0, 0, 307, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 310, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, - 314, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, - 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, - 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 333, 0, - 0, 0, 0, 334, 0, 335, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 340, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, - 0, 0, 343, 0, 344, 0, 345, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, - 352, 0, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 362, 0, 0, 363, 0, 0, 0, 0, 0, - 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, - 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 371, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, - 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 389, 0, 0, 390, 0, 391, - 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 0, 0, 0, 399, - 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 0, 0, 405, 0, 0, 406, 0, 0, 0, 407, 0, 0, - 0, 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, - 416, 0, 0, 0, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 422, 0, 0, 0, 0, 423, 0, 0, - 424, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 427, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 432, - 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, - 441, 0, 442, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 445, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 453, 454, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 456, - 0, 0, 0, 0, 457, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 463, 464, 0, 0, 0, - 465, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 469, 470, 0, 0, 0, 471, 0, 0, 0, 0, 0, - 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 475, - 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 481, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, - 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 486, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, - 0, 490, 0, 491, 492, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 497, 0, 0, 0, - 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, - 501, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 0, 505, 0, 506, 507, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 514, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 517, 518, 0, 519, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 523, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 525, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 528, 0, 529, 530, 0, 0, 531, 0, 0, 0, 0, 0, - 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 535, 536, 0, 0, 537, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 539, 0, 0, 540, 0, 541, 542, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, - 0, 547, 548, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 552, 0, 553, 554, 0, 555, 0, 0, 0, - 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, - 559, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 563, 0, 0, 0, 564, 0, 565, 0, 566, 0, 0, 0, 0, 567, 0, 0, 568, 0, 569, 570, 0, 0, 571, 0, 0, 0, 572, - 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 580, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, - 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, - 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 594, - 0, 0, 595, 0, 0, 596, 0, 597, 0, 0, 598, 0, 0, 599, 0, 0, 600, 0, 601, 0, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, 611, 0, 612, 0, 613, 0, 0, 0, 614, 0, 615, 0, 616, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 618, 0, 619, 0, 620, 0, 0, 0, 621, 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 0, - 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, 632, 0, - 633, 0, 634, 0, 0, 0, 635, 0, 636, 0, 0, 0, 637, 0, 638, 0, 0, 0, 639, 0, 640, 0, 0, 0, 641, 0, 642, 0, 0, 643, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 645, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 648, 0, 0, - 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, - 0, 0, 653, 0, 654, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 660, 0, 0, 661, 0, 0, 0, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 665, 0, 0, 0, 0, 0, 0, - 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 670, 671, 0, 672, 0, 0, 0, 0, 0, - 0, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, - 676, 0, 0, 677, 0, 0, 0, 0, 678, 0, 0, 0, 679, 680, 0, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 683, 0, 0, 684, 0, 685, 0, - 686, 0, 687, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 690, 0, 691, 0, 0, 0, 0, 692, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 702, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, 0, 0, 705, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 709, 0, 0, 0, 0, - 710, 0, 0, 0, 711, 712, 0, 0, 0, 0, 713, 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, - 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 725, 0, 726, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 733, 0, 0, 0, 734, 0, 0, - 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, - 0, 0, 0, 739, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 747, 0, 748, 0, 0, 0, 749, 0, 750, 0, 0, 751, 752, 0, 0, 0, 753, 0, - 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, 0, 757, - 0, 0, 758, 0, 0, 759, 0, 0, 0, 760, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 764, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 766, 0, 767, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 771, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 774, 0, 0, - 0, 0, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 779, 0, 0, 780, 0, 0, 0, 0, 781, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0092[64] = { + 0x2801500150015001ull, 0x0444AB0002AAA802ull, 0x450052800A525695ull, 0x200694014A002949ull, + 0x4494AA0091300000ull, 0xA24A00A50014A4A5ull, 0x10002200A50014A4ull, 0x00128482A0480000ull, + 0x0050005408025001ull, 0x42A400000155002Aull, 0x9400800251225215ull, 0x0005202512418200ull, + 0x152411119000A494ull, 0x2960802500200251ull, 0x022A10258002A500ull, 0xB04012801001288Aull, + 0x0949088000AA4014ull, 0x2A22A22AAA408000ull, 0x02008622A22A22A2ull, 0x2024852524AA9485ull, + 0x1029420444249080ull, 0x1408248081282011ull, 0x212A08A842050412ull, 0x0810212114111154ull, + 0x1020800804844440ull, 0x0820240082004008ull, 0x84909210A5555555ull, 0x1211212422424844ull, + 0x8490921121121121ull, 0x11114215500A2424ull, 0x821A401000000000ull, 0x046900411A401150ull, + 0x08020801A0000401ull, 0x42A2000410034000ull, 0x100010021110089Aull, 0x002111000088D215ull, + 0x006800010042D202ull, 0x0209A40104D20082ull, 0x1690104690041348ull, 0x0041000340000802ull, + 0x0021110089A42A20ull, 0x280408000411A401ull, 0x2000000000000801ull, 0x110524A488040001ull, + 0x0000000100008880ull, 0x55515800A8AC8008ull, 0x2514514564004840ull, 0x000080012800A080ull, + 0x0801011440080000ull, 0x0240210900200800ull, 0x0800001405805012ull, 0x8030A44552843109ull, + 0x0400000020001800ull, 0x0008481005004080ull, 0x002284310C800000ull, 0x0205202010A21008ull, + 0x2220100000089000ull, 0x2000480000000004ull, 0x4000280000000208ull, 0x4651500000108000ull, + 0x00A0122494000040ull, 0x0000080080094048ull, 0x8482108421000006ull, 0x1004040000000800ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0092[64] = { + 1u, 13u, 30u, 50u, 66u, 80u, 99u, 111u, 121u, 131u, 144u, 160u, 172u, 189u, 203u, 217u, + 231u, 245u, 262u, 279u, 300u, 314u, 327u, 343u, 358u, 368u, 376u, 400u, 416u, 433u, 450u, 457u, + 472u, 480u, 490u, 501u, 514u, 525u, 539u, 556u, 563u, 577u, 588u, 591u, 604u, 608u, 627u, 644u, + 651u, 658u, 666u, 676u, 695u, 699u, 707u, 717u, 728u, 735u, 739u, 744u, 754u, 764u, 771u, 782u, }; void recomp_unit_0092_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -165,13 +60,25 @@ void recomp_unit_0092_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08974000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0092[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0092[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0092[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08974000; @@ -981,7 +888,6 @@ L_08974000: goto L_08974104; L_08974030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089740F4; } @@ -1007,7 +913,6 @@ L_08974040: goto L_08974104; L_08974070: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089740F4; } @@ -1033,7 +938,6 @@ L_08974080: goto L_08974104; L_089740B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089740F4; } @@ -1058,7 +962,6 @@ L_089740C0: goto L_08974104; L_089740EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089740F4; } @@ -1072,7 +975,17 @@ L_089740F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974104: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1))); @@ -1087,56 +1000,136 @@ L_08974104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897412C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(28)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974134: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(32), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897413C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974144: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(36), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897414C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(36))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974154: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897415C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974164: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1166,7 +1159,6 @@ L_089741A4: goto L_089741AC; L_089741AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089743C4; } @@ -1174,7 +1166,6 @@ L_089741AC: } L_089741B4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089743C4; } @@ -1190,7 +1181,6 @@ L_089741C8: ctx.gpr[21] = (ctx.gpr[2] | 0u); aot_gpr_4 = (ctx.gpr[21] & 65535u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089742F8; } @@ -1212,14 +1202,22 @@ L_089741E8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-7800))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089742E0; } @@ -1227,7 +1225,6 @@ L_08974200: } L_08974208: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0897421C; } @@ -1240,7 +1237,6 @@ L_08974210: goto L_0897421C; L_0897421C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08974228; } @@ -1271,7 +1267,6 @@ L_08974238: L_08974244: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089742E0; } @@ -1341,7 +1336,6 @@ L_089742B8: goto L_089742E0; L_089742E0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089743BC; } @@ -1371,7 +1365,6 @@ L_08974300: L_0897430C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089743A8; } @@ -1481,7 +1474,17 @@ L_089743C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089743F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -1542,9 +1545,7 @@ L_0897447C: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089744D0; } @@ -1552,7 +1553,6 @@ L_0897447C: } L_089744A4: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_089744D0; } @@ -1560,7 +1560,6 @@ L_089744A4: } L_089744AC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089744C8; } @@ -1581,7 +1580,6 @@ L_089744BC: goto L_089744C8; L_089744C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089745E4; } @@ -1610,7 +1608,6 @@ L_089744E8: AOT_REGCACHE_SYNC_OUT(); return; L_089744F8: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089745D8; } @@ -1618,7 +1615,6 @@ L_089744F8: } L_08974500: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089745E4; } @@ -1627,7 +1623,6 @@ L_08974500: L_08974508: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089745D8; } @@ -1647,7 +1642,6 @@ L_0897451C: L_08974528: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089745C4; } @@ -1731,7 +1725,6 @@ L_089745CC: L_089745D8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08974460; } @@ -1741,7 +1734,6 @@ L_089745E4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-2)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089746B4; } @@ -1761,7 +1753,6 @@ L_089745FC: L_08974608: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089746A4; } @@ -1833,7 +1824,6 @@ L_089746A4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-2)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089745F4; } @@ -1861,7 +1851,17 @@ L_089746B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089746F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -1905,7 +1905,6 @@ L_08974758: goto L_089743F4; L_08974774: { const bool branch_taken = static_cast(ctx.gpr[2]) > 0; - // nop if (branch_taken) { goto L_08974784; } @@ -1913,7 +1912,6 @@ L_08974774: } L_0897477C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08974898; } @@ -1930,7 +1928,6 @@ L_08974784: L_0897479C: aot_gpr_4 = (ctx.gpr[2] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089747BC; } @@ -1954,7 +1951,6 @@ L_089747BC: L_089747C4: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974830; } @@ -1999,7 +1995,6 @@ L_08974830: L_08974838: aot_gpr_4 = (ctx.gpr[2] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974888; } @@ -2036,7 +2031,6 @@ L_08974888: goto L_08974890; L_08974890: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08974758; } @@ -2063,14 +2057,34 @@ L_08974898: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089748D0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(44)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089748D8: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(59), static_cast(aot_gpr_5)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); @@ -2086,21 +2100,51 @@ L_089748D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974904: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(59))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897490C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(60)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974914: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(64), static_cast(aot_gpr_5)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); @@ -2116,35 +2160,85 @@ L_08974914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974940: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(64))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974948: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(65)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974950: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(72), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974958: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974960: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[17]); @@ -2178,7 +2272,6 @@ L_089749C8: goto L_08974940; L_089749D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089749F8; } @@ -2202,7 +2295,6 @@ L_089749F8: goto L_08974904; L_08974A00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08974A24; } @@ -2245,7 +2337,6 @@ L_08974A44: L_08974A54: aot_gpr_4 = (ctx.gpr[2] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974A70; } @@ -2268,7 +2359,6 @@ L_08974A70: L_08974A78: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974AE8; } @@ -2314,7 +2404,6 @@ L_08974AE8: L_08974AF0: aot_gpr_4 = (ctx.gpr[2] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974B3C; } @@ -2363,7 +2452,6 @@ L_08974B58: L_08974B64: aot_gpr_4 = (ctx.gpr[2] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974B80; } @@ -2386,7 +2474,6 @@ L_08974B80: L_08974B88: aot_gpr_4 = (ctx.gpr[2] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974C08; } @@ -2442,7 +2529,6 @@ L_08974C08: L_08974C10: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974C70; } @@ -2502,7 +2588,6 @@ L_08974C90: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_gpr_16 & 65535u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974E88; } @@ -2524,15 +2609,23 @@ L_08974CB0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-7664))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08974CC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08974CE0; } @@ -2546,7 +2639,6 @@ L_08974CD4: AOT_REGCACHE_SYNC_OUT(); return; L_08974CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08974EC4; } @@ -2583,7 +2675,6 @@ L_08974D10: L_08974D18: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974D80; } @@ -2627,7 +2718,6 @@ L_08974D80: L_08974D88: aot_gpr_4 = (ctx.gpr[2] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974DD4; } @@ -2705,7 +2795,6 @@ L_08974E28: AOT_REGCACHE_SYNC_OUT(); return; L_08974E34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08974E80; } @@ -2737,7 +2826,6 @@ L_08974E7C: goto L_08974E80; L_08974E80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08974EC4; } @@ -2775,7 +2863,6 @@ L_08974EC4: } L_08974ECC: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08975038; } @@ -2793,9 +2880,7 @@ L_08974EE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08975038; } @@ -2832,7 +2917,6 @@ L_08974F2C: L_08974F34: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974F9C; } @@ -2876,7 +2960,6 @@ L_08974F9C: L_08974FA4: aot_gpr_4 = (ctx.gpr[2] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08974FF0; } @@ -2939,7 +3022,6 @@ L_08975010: L_08975038: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08974C80; } @@ -2983,12 +3065,21 @@ L_0897505C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897509C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089750E0; } @@ -3013,7 +3104,6 @@ L_089750C0: L_089750CC: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089750E0; } @@ -3021,7 +3111,6 @@ L_089750CC: } L_089750D8: aot_gpr_31 = (0x089750E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089750E0u) goto L_089750E0; AOT_REGCACHE_SYNC_OUT(); return; L_089750E0: @@ -3031,7 +3120,17 @@ L_089750E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089750EC: aot_gpr_5 = (2235u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-27044)); @@ -3056,7 +3155,17 @@ L_089750EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897513C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); @@ -3104,7 +3213,6 @@ L_08975174: } L_0897517C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_0897521C; } @@ -3120,7 +3228,6 @@ L_08975184: } L_0897518C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089751B4; } @@ -3150,7 +3257,6 @@ L_089751B4: } L_089751BC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089751E4; } @@ -3180,7 +3286,6 @@ L_089751E4: } L_089751EC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08975214; } @@ -3210,7 +3315,6 @@ L_08975214: } L_0897521C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08975244; } @@ -3240,7 +3344,6 @@ L_08975244: } L_0897524C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08975274; } @@ -3270,7 +3373,6 @@ L_08975274: } L_0897527C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089752A4; } @@ -3305,7 +3407,17 @@ L_089752A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089752BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[18]); @@ -3350,7 +3462,6 @@ L_08975308: L_0897531C: aot_gpr_5 = (static_cast(aot_gpr_5) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08975344; } @@ -3358,7 +3469,6 @@ L_0897531C: } L_08975328: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897533C; } @@ -3372,7 +3482,6 @@ L_08975330: AOT_REGCACHE_SYNC_OUT(); return; L_0897533C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08975374; } @@ -3393,7 +3502,6 @@ L_0897534C: AOT_REGCACHE_SYNC_OUT(); return; L_08975354: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08975374; } @@ -3439,7 +3547,6 @@ L_08975394: } L_089753A0: aot_gpr_31 = (0x089753A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089753A8u) goto L_089753A8; AOT_REGCACHE_SYNC_OUT(); return; L_089753A8: @@ -3479,7 +3586,17 @@ L_089753D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089753F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3555,18 +3672,26 @@ L_08975488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089754A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x089754B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 39u, 0x088703C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089754B8u) goto L_089754B8; AOT_REGCACHE_SYNC_OUT(); return; L_089754B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08975500; } @@ -3575,7 +3700,6 @@ L_089754B8: L_089754C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089754D4; } @@ -3583,7 +3707,6 @@ L_089754C0: } L_089754CC: aot_gpr_31 = (0x089754D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089754D4u) goto L_089754D4; AOT_REGCACHE_SYNC_OUT(); return; L_089754D4: @@ -3610,7 +3733,17 @@ L_08975500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975510: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3657,7 +3790,17 @@ L_08975560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897557C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3694,7 +3837,17 @@ L_089755B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089755CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -3709,7 +3862,6 @@ L_089755CC: } L_089755E8: aot_gpr_31 = (0x089755F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089755F0u) goto L_089755F0; AOT_REGCACHE_SYNC_OUT(); return; L_089755F0: @@ -3739,7 +3891,17 @@ L_08975610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975628: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -3754,7 +3916,6 @@ L_08975628: } L_08975640: aot_gpr_31 = (0x08975648u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975648u) goto L_08975648; AOT_REGCACHE_SYNC_OUT(); return; L_08975648: @@ -3776,13 +3937,22 @@ L_08975664: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975678: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08975694; } @@ -3790,7 +3960,6 @@ L_08975678: } L_0897568C: aot_gpr_31 = (0x08975694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975694u) goto L_08975694; AOT_REGCACHE_SYNC_OUT(); return; L_08975694: @@ -3806,7 +3975,17 @@ L_0897569C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089756AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -3821,7 +4000,6 @@ L_089756AC: } L_089756C4: aot_gpr_31 = (0x089756CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089756CCu) goto L_089756CC; AOT_REGCACHE_SYNC_OUT(); return; L_089756CC: @@ -3844,13 +4022,22 @@ L_089756E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089756F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08975710; } @@ -3858,7 +4045,6 @@ L_089756F4: } L_08975708: aot_gpr_31 = (0x08975710u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975710u) goto L_08975710; AOT_REGCACHE_SYNC_OUT(); return; L_08975710: @@ -3868,7 +4054,6 @@ L_08975710: AOT_REGCACHE_SYNC_OUT(); return; L_08975718: aot_gpr_31 = (0x08975720u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 595u, 0x088633B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975720u) goto L_08975720; AOT_REGCACHE_SYNC_OUT(); return; L_08975720: @@ -3879,12 +4064,21 @@ L_08975720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975730: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08975740u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 693u, 0x08936810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975740u) goto L_08975740; AOT_REGCACHE_SYNC_OUT(); return; L_08975740: @@ -3895,7 +4089,17 @@ L_08975740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975750: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 1u); @@ -3907,7 +4111,6 @@ L_08975750: AOT_REGCACHE_SYNC_OUT(); return; L_08975768: aot_gpr_31 = (0x08975770u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 615u, 0x088634DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975770u) goto L_08975770; AOT_REGCACHE_SYNC_OUT(); return; L_08975770: @@ -3918,7 +4121,17 @@ L_08975770: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975780: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3942,7 +4155,17 @@ L_089757A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089757B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -3975,7 +4198,17 @@ L_089757D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089757EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -4040,7 +4273,17 @@ L_08975868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897588C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4106,7 +4349,17 @@ L_089758F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897590C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4159,7 +4412,17 @@ L_08975964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897597C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4214,84 +4477,79 @@ L_089759D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089759EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x08975A00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0075_entry, 75u, 436u, 0x08932308u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A00u) goto L_08975A00; AOT_REGCACHE_SYNC_OUT(); return; L_08975A00: aot_gpr_31 = (0x08975A08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 282u, 0x08B1124Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A08u) goto L_08975A08; AOT_REGCACHE_SYNC_OUT(); return; L_08975A08: aot_gpr_31 = (0x08975A10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0197_entry, 197u, 247u, 0x08B18F24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A10u) goto L_08975A10; AOT_REGCACHE_SYNC_OUT(); return; L_08975A10: aot_gpr_31 = (0x08975A18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 105u, 0x08B54740u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A18u) goto L_08975A18; AOT_REGCACHE_SYNC_OUT(); return; L_08975A18: aot_gpr_31 = (0x08975A20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 288u, 0x08B255CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A20u) goto L_08975A20; AOT_REGCACHE_SYNC_OUT(); return; L_08975A20: aot_gpr_31 = (0x08975A28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 303u, 0x08B0D46Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A28u) goto L_08975A28; AOT_REGCACHE_SYNC_OUT(); return; L_08975A28: aot_gpr_31 = (0x08975A30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 308u, 0x08A354ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A30u) goto L_08975A30; AOT_REGCACHE_SYNC_OUT(); return; L_08975A30: aot_gpr_31 = (0x08975A38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 796u, 0x08A57790u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A38u) goto L_08975A38; AOT_REGCACHE_SYNC_OUT(); return; L_08975A38: aot_gpr_31 = (0x08975A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 834u, 0x08A57A1Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A40u) goto L_08975A40; AOT_REGCACHE_SYNC_OUT(); return; L_08975A40: aot_gpr_31 = (0x08975A48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 509u, 0x08946AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A48u) goto L_08975A48; AOT_REGCACHE_SYNC_OUT(); return; L_08975A48: aot_gpr_31 = (0x08975A50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 489u, 0x088BA598u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A50u) goto L_08975A50; AOT_REGCACHE_SYNC_OUT(); return; L_08975A50: aot_gpr_31 = (0x08975A58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0062_entry, 62u, 311u, 0x088FD6D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A58u) goto L_08975A58; AOT_REGCACHE_SYNC_OUT(); return; L_08975A58: aot_gpr_31 = (0x08975A60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 331u, 0x089E5ABCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A60u) goto L_08975A60; AOT_REGCACHE_SYNC_OUT(); return; L_08975A60: aot_gpr_31 = (0x08975A68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0075_entry, 75u, 580u, 0x08932C2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A68u) goto L_08975A68; AOT_REGCACHE_SYNC_OUT(); return; L_08975A68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08975A7C; } @@ -4299,7 +4557,6 @@ L_08975A68: } L_08975A74: aot_gpr_31 = (0x08975A7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975A7Cu) goto L_08975A7C; AOT_REGCACHE_SYNC_OUT(); return; L_08975A7C: @@ -4619,14 +4876,34 @@ L_08975D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975D44: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-16976), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975D4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(0u); @@ -4644,7 +4921,6 @@ L_08975D4C: } L_08975D70: aot_gpr_31 = (0x08975D78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975D78u) goto L_08975D78; AOT_REGCACHE_SYNC_OUT(); return; L_08975D78: @@ -4662,7 +4938,6 @@ L_08975D80: } L_08975D88: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08975DA4; } @@ -4692,7 +4967,6 @@ L_08975DA4: } L_08975DB8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08975DD0; } @@ -4722,7 +4996,17 @@ L_08975DE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975DF0: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (2247u << 16u); @@ -4742,7 +5026,17 @@ L_08975DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975E90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4765,7 +5059,6 @@ L_08975EB8: goto L_08975EC4; L_08975EC4: aot_gpr_31 = (0x08975ECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975ECCu) goto L_08975ECC; AOT_REGCACHE_SYNC_OUT(); return; L_08975ECC: @@ -4792,13 +5085,22 @@ L_08975EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5888))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08975F18; } @@ -4806,7 +5108,6 @@ L_08975EFC: } L_08975F10: aot_gpr_31 = (0x08975F18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975F18u) goto L_08975F18; AOT_REGCACHE_SYNC_OUT(); return; L_08975F18: @@ -4822,7 +5123,17 @@ L_08975F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4845,7 +5156,6 @@ L_08975F58: goto L_08975F64; L_08975F64: aot_gpr_31 = (0x08975F6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975F6Cu) goto L_08975F6C; AOT_REGCACHE_SYNC_OUT(); return; L_08975F6C: @@ -4871,7 +5181,17 @@ L_08975F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08975F98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4894,7 +5214,6 @@ L_08975FC0: goto L_08975FCC; L_08975FCC: aot_gpr_31 = (0x08975FD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08975FD4u) goto L_08975FD4; AOT_REGCACHE_SYNC_OUT(); return; L_08975FD4: @@ -4920,7 +5239,17 @@ L_08975FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976000: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4959,7 +5288,6 @@ L_08976028: goto L_08976074; L_08976074: aot_gpr_31 = (0x0897607Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897607Cu) goto L_0897607C; AOT_REGCACHE_SYNC_OUT(); return; L_0897607C: @@ -4992,7 +5320,17 @@ L_089760AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089760C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5031,7 +5369,6 @@ L_089760EC: goto L_08976138; L_08976138: aot_gpr_31 = (0x08976140u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976140u) goto L_08976140; AOT_REGCACHE_SYNC_OUT(); return; L_08976140: @@ -5064,7 +5401,17 @@ L_08976170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976188: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -5120,7 +5467,6 @@ L_089761F8: goto L_08976204; L_08976204: aot_gpr_31 = (0x0897620Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897620Cu) goto L_0897620C; AOT_REGCACHE_SYNC_OUT(); return; L_0897620C: @@ -5194,7 +5540,17 @@ L_08976284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089762B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -5250,7 +5606,6 @@ L_08976324: goto L_08976330; L_08976330: aot_gpr_31 = (0x08976338u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976338u) goto L_08976338; AOT_REGCACHE_SYNC_OUT(); return; L_08976338: @@ -5336,7 +5691,17 @@ L_089763D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976404: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5357,7 +5722,6 @@ L_08976424: goto L_08976430; L_08976430: aot_gpr_31 = (0x08976438u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976438u) goto L_08976438; AOT_REGCACHE_SYNC_OUT(); return; L_08976438: @@ -5377,7 +5741,17 @@ L_08976444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976458: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5416,7 +5790,6 @@ L_08976480: goto L_089764CC; L_089764CC: aot_gpr_31 = (0x089764D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089764D4u) goto L_089764D4; AOT_REGCACHE_SYNC_OUT(); return; L_089764D4: @@ -5449,7 +5822,17 @@ L_08976504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897651C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5472,7 +5855,6 @@ L_08976544: goto L_08976550; L_08976550: aot_gpr_31 = (0x08976558u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976558u) goto L_08976558; AOT_REGCACHE_SYNC_OUT(); return; L_08976558: @@ -5497,7 +5879,17 @@ L_08976568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976580: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5520,7 +5912,6 @@ L_089765A8: goto L_089765B4; L_089765B4: aot_gpr_31 = (0x089765BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089765BCu) goto L_089765BC; AOT_REGCACHE_SYNC_OUT(); return; L_089765BC: @@ -5545,7 +5936,17 @@ L_089765CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089765E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5568,7 +5969,6 @@ L_0897660C: goto L_08976618; L_08976618: aot_gpr_31 = (0x08976620u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976620u) goto L_08976620; AOT_REGCACHE_SYNC_OUT(); return; L_08976620: @@ -5593,7 +5993,17 @@ L_08976630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976648: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5616,7 +6026,6 @@ L_08976670: goto L_0897667C; L_0897667C: aot_gpr_31 = (0x08976684u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976684u) goto L_08976684; AOT_REGCACHE_SYNC_OUT(); return; L_08976684: @@ -5642,7 +6051,17 @@ L_08976698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089766B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5663,7 +6082,6 @@ L_089766D0: goto L_089766DC; L_089766DC: aot_gpr_31 = (0x089766E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089766E4u) goto L_089766E4; AOT_REGCACHE_SYNC_OUT(); return; L_089766E4: @@ -5683,7 +6101,17 @@ L_089766F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976704: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -5722,7 +6150,6 @@ L_0897672C: goto L_08976778; L_08976778: aot_gpr_31 = (0x08976780u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08976780u) goto L_08976780; AOT_REGCACHE_SYNC_OUT(); return; L_08976780: @@ -5759,7 +6186,17 @@ L_089767C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089767D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -5815,7 +6252,6 @@ L_08976848: goto L_08976854; L_08976854: aot_gpr_31 = (0x0897685Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897685Cu) goto L_0897685C; AOT_REGCACHE_SYNC_OUT(); return; L_0897685C: @@ -5892,7 +6328,17 @@ L_089768D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976900: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5915,7 +6361,6 @@ L_08976928: goto L_08976934; L_08976934: aot_gpr_31 = (0x0897693Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897693Cu) goto L_0897693C; AOT_REGCACHE_SYNC_OUT(); return; L_0897693C: @@ -5941,7 +6386,17 @@ L_08976950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976968: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -5983,11 +6438,20 @@ L_08976968: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089769AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -6028,7 +6492,17 @@ L_089769F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6157,7 +6631,6 @@ L_08976A2C: aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[14])) && aot_fpr_12 == ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08976B00; @@ -6193,7 +6666,17 @@ L_08976B00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); @@ -6235,7 +6718,6 @@ L_08976B88: } L_08976B94: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08976BC0; } @@ -6266,7 +6748,6 @@ L_08976BB4: } L_08976BC0: aot_gpr_31 = (0x08976BC8u); - // nop goto L_089769AC; L_08976BC8: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); @@ -6284,7 +6765,17 @@ L_08976BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6363,7 +6854,17 @@ L_08976C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976C80: ctx.gpr[1] = (1u << 16u); ctx.gpr[1] = (ctx.gpr[1] | 8928u); @@ -6432,7 +6933,6 @@ L_08976D0C: L_08976D3C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08976D4C; } @@ -6443,7 +6943,6 @@ L_08976D48: goto L_08976D4C; L_08976D4C: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_08976D74; } @@ -6465,7 +6964,6 @@ L_08976D5C: goto L_08976D6C; L_08976D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08976F80; } @@ -6473,7 +6971,6 @@ L_08976D6C: } L_08976D74: { const bool branch_taken = static_cast(ctx.gpr[17]) >= 0; - // nop if (branch_taken) { goto L_08976DB0; } @@ -6509,7 +7006,6 @@ L_08976DAC: goto L_08976DB0; L_08976DB0: { const bool branch_taken = static_cast(ctx.gpr[17]) >= 0; - // nop if (branch_taken) { goto L_08976DD8; } @@ -6531,7 +7027,6 @@ L_08976DC0: goto L_08976DD0; L_08976DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08976F80; } @@ -6539,7 +7034,6 @@ L_08976DD0: } L_08976DD8: { const bool branch_taken = ctx.gpr[17] != aot_gpr_16; - // nop if (branch_taken) { goto L_08976DF8; } @@ -6559,7 +7053,6 @@ L_08976DE8: goto L_08976DF0; L_08976DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08976F80; } @@ -6631,7 +7124,6 @@ L_08976E88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8216))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08976EB8; } @@ -6653,7 +7145,6 @@ L_08976EA0: goto L_08976EB0; L_08976EB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08976F80; } @@ -6663,7 +7154,6 @@ L_08976EB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8216))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08976EE8; } @@ -6685,7 +7175,6 @@ L_08976ED0: goto L_08976EE0; L_08976EE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08976F80; } @@ -6705,7 +7194,6 @@ L_08976EF4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08976F1C; @@ -6717,7 +7205,6 @@ L_08976F1C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08976F6C; } @@ -6780,7 +7267,17 @@ L_08976F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08976FBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); ctx.gpr[13] = (ctx.gpr[7] & 255u); @@ -6897,9 +7394,7 @@ L_089770C0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), aot_gpr_4); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897742C; } @@ -6931,7 +7426,6 @@ L_0897712C: ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fpr[14] = static_cast(static_cast(std::bit_cast(ctx.fpr[14]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), aot_gpr_4); if (branch_taken) { @@ -6990,7 +7484,6 @@ L_089771B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089773BC; } @@ -7013,7 +7506,6 @@ L_089771E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089773BC; } @@ -7036,7 +7528,6 @@ L_08977210: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089773BC; } @@ -7059,7 +7550,6 @@ L_08977238: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08977290; } @@ -7084,7 +7574,6 @@ L_08977268: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08977290; } @@ -7092,7 +7581,6 @@ L_08977268: } L_08977288: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_089773BC; } @@ -7151,7 +7639,6 @@ L_08977290: L_089772EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_0897730C; @@ -7169,7 +7656,6 @@ L_08977300: L_0897730C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08977330; @@ -7191,7 +7677,6 @@ L_08977330: L_08977334: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_0897735C; @@ -7215,7 +7700,6 @@ L_0897735C: L_08977364: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08977388; } @@ -7228,7 +7712,6 @@ L_08977370: AOT_REGCACHE_SYNC_OUT(); return; L_08977378: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08977388; } @@ -7236,7 +7719,6 @@ L_08977378: } L_08977380: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089773BC; } @@ -7244,9 +7726,7 @@ L_08977380: } L_08977388: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089773BC; } @@ -7254,9 +7734,7 @@ L_08977388: } L_08977398: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089773B4; } @@ -7301,7 +7779,6 @@ L_089773D4: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (ctx.gpr[22] + static_cast(600)); if (branch_taken) { @@ -7319,7 +7796,6 @@ L_089773FC: aot_gpr_5 = (aot_gpr_5 + static_cast(12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_5); if (branch_taken) { @@ -7354,7 +7830,17 @@ L_08977430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08977474: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), ctx.gpr[21]); @@ -7426,7 +7912,6 @@ L_08977538: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); if (branch_taken) { @@ -7446,7 +7931,6 @@ L_08977568: ctx.fpr[14] = std::bit_cast(aot_gpr_5); ctx.fpr[14] = static_cast(static_cast(std::bit_cast(ctx.fpr[14]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (0u + static_cast(600)); if (branch_taken) { @@ -7466,7 +7950,6 @@ L_08977590: L_089775AC: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(40))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08977770; } @@ -7583,7 +8066,6 @@ L_08977668: L_0897766C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08977690; @@ -7605,7 +8087,6 @@ L_08977690: L_08977694: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_089776BC; @@ -7628,9 +8109,7 @@ L_089776BC: goto L_089776C4; L_089776C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897775C; } @@ -7648,7 +8127,6 @@ L_089776D4: ctx.fpr[15] = ctx.fpr[17] + ctx.fpr[18]; ctx.fpr[15] = std::sqrt(ctx.fpr[15]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_20)) && ctx.fpr[15] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_08977730; @@ -7678,9 +8156,7 @@ L_08977730: goto L_08977744; L_08977744: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897775C; } @@ -7708,7 +8184,6 @@ L_08977770: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.gpr[7] = (ctx.gpr[7] + static_cast(600)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(600)); if (branch_taken) { @@ -7722,7 +8197,6 @@ L_08977794: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 + static_cast(12)); if (branch_taken) { @@ -7733,7 +8207,6 @@ L_08977794: L_089777B4: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_089777C8; } @@ -7741,7 +8214,6 @@ L_089777B4: } L_089777C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089777E4; } @@ -7754,7 +8226,6 @@ L_089777C8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897751C; } @@ -7786,11 +8257,20 @@ L_089777E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08977830: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_089778F4; } @@ -7800,7 +8280,6 @@ L_0897783C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.gpr[7] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089778F4; } @@ -7855,7 +8334,6 @@ L_0897784C: ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[11]); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(5))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089778E4; } @@ -7870,7 +8348,6 @@ L_089778B0: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(8)))))); ctx.gpr[7] = (ctx.gpr[7] & 15u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08977908; } @@ -7891,7 +8368,6 @@ L_089778D4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08977AAC; } @@ -7912,7 +8388,6 @@ L_089778E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08977AAC; } @@ -7968,7 +8443,6 @@ L_08977908: aot_fpr_12 = aot_fpr_12 + ctx.fpr[14]; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (16256u << 16u); if (branch_taken) { @@ -8006,9 +8480,7 @@ L_089779F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977A24; } @@ -8086,7 +8558,6 @@ L_08977A24: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08977AAC; } @@ -8098,7 +8569,17 @@ L_08977AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08977AB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_6 = (aot_gpr_5 << 3u); @@ -8212,7 +8693,6 @@ L_08977B50: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_gpr_4 = (17204u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_22)) && aot_fpr_13 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8238,7 +8718,6 @@ L_08977BB8: } L_08977BC0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[14] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08977BD8; @@ -8282,7 +8761,17 @@ L_08977BF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08977C18: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17]}; @@ -8308,7 +8797,6 @@ L_08977C18: } L_08977C68: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08977C94; } @@ -8326,7 +8814,6 @@ L_08977C70: L_08977C7C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08977C94; } @@ -8438,7 +8925,6 @@ L_08977D38: L_08977D40: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[17]) > 0; - // nop if (branch_taken) { goto L_08977CDC; } @@ -8488,7 +8974,17 @@ L_08977D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08977DAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -8561,9 +9057,7 @@ L_08977E08: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977EE8; } @@ -8572,9 +9066,7 @@ L_08977E08: L_08977E60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977EE8; } @@ -8583,9 +9075,7 @@ L_08977E60: L_08977E74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977EE8; } @@ -8594,9 +9084,7 @@ L_08977E74: L_08977E88: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977EE8; } @@ -8605,9 +9093,7 @@ L_08977E88: L_08977E9C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977EE8; } @@ -8616,9 +9102,7 @@ L_08977E9C: L_08977EB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08977EE8; } @@ -8630,7 +9114,6 @@ L_08977EC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08977EE8; } @@ -8672,7 +9155,17 @@ L_08977EFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08977F2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), ctx.gpr[17]); @@ -8733,7 +9226,6 @@ L_08977FC8: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0093.cpp b/profiles/vcs/generated/generated_unit_0093.cpp index e7b451e..2db727f 100644 --- a/profiles/vcs/generated/generated_unit_0093.cpp +++ b/profiles/vcs/generated/generated_unit_0093.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0093[4095] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 6, 0, - 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, - 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 21, 0, 22, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 33, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, - 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, - 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 63, - 0, 0, 0, 0, 64, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, - 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, - 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, - 103, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, 108, 0, 0, 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 114, 0, 0, 0, 0, 0, 115, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 130, - 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 136, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, - 0, 0, 145, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 150, 0, 151, 0, 0, - 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156, 0, 157, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, - 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, - 168, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 173, 174, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 176, 0, 0, 0, 177, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, - 181, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 0, 0, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 0, 190, - 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, 215, 0, 216, - 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 232, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 240, 0, 241, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 249, 0, 250, 0, 0, - 0, 251, 0, 0, 252, 0, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, 256, 0, 0, 0, 0, 257, 0, 258, 0, 0, 0, 0, 259, - 0, 260, 0, 0, 0, 261, 0, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, - 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 289, 290, 0, 0, 0, 0, - 291, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 0, 301, 0, 302, - 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 308, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, 313, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 314, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, 322, 0, 323, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, - 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 334, 335, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 340, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, - 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 345, 0, 346, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 349, 0, 0, 0, 0, - 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 362, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, - 0, 371, 0, 372, 0, 0, 0, 373, 374, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, - 377, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 382, 0, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 407, 0, 408, 0, 409, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 411, 0, 412, 413, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 417, 0, 0, 0, - 418, 0, 0, 0, 0, 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, - 423, 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 429, 430, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 433, 0, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, - 437, 0, 438, 0, 439, 0, 440, 0, 0, 0, 0, 441, 442, 443, 0, 444, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, - 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 449, 0, 450, 451, 0, 452, 0, 0, 0, 453, 0, 454, 455, 0, 456, 0, 0, 0, 0, 457, 0, 458, 459, 0, 460, 0, 0, 0, 461, - 0, 462, 463, 0, 464, 0, 0, 0, 0, 465, 0, 466, 467, 0, 468, 0, 0, 0, 469, 0, 470, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, - 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 480, 0, 0, - 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 483, 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 486, 0, 487, 0, 488, 489, 0, 0, 490, 0, 491, - 0, 492, 0, 493, 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 497, 0, 498, 0, 499, 0, 0, 500, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 505, 506, 0, 507, 0, 0, 508, 0, 509, 0, 510, - 0, 0, 0, 0, 0, 511, 0, 512, 513, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, - 0, 517, 0, 0, 0, 518, 0, 519, 0, 520, 0, 521, 0, 522, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 526, 527, - 0, 528, 0, 0, 529, 0, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 535, 0, 536, 0, 0, 537, 0, 538, 539, 0, 540, 0, 0, 541, 0, 542, - 543, 0, 544, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 547, 548, 0, 549, 0, 550, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 553, 554, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 557, 0, 0, 558, 0, 559, 560, 0, 561, 0, - 562, 0, 0, 563, 0, 564, 565, 0, 566, 0, 567, 0, 568, 0, 0, 569, 0, 570, 571, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, - 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, - 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, - 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 587, 0, 0, 588, 0, 589, 590, 0, 0, 0, 0, 0, 0, 591, 0, 592, 593, 0, - 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 597, 0, 598, 0, 599, 0, 0, 0, 0, 600, 0, 601, 602, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 605, 606, 0, 0, 0, 607, 0, 0, 608, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0093[64] = { + 0x0280A01142408021ull, 0x1000000001A0280Aull, 0x000084001808042Aull, 0x00000A00C0540000ull, + 0x4408421084000018ull, 0x0000090000010008ull, 0x0080042204210842ull, 0x22101090A4000000ull, + 0x0400280000000004ull, 0x0200000400440028ull, 0x0420044004088000ull, 0x2040400040001422ull, + 0x0000000000140808ull, 0x00882C1501001104ull, 0x080C00000160A808ull, 0x8480424000280048ull, + 0x0000100089008900ull, 0x2404010004010100ull, 0x1A0280A0280A0114ull, 0x2242242108000000ull, + 0x000001000C040215ull, 0x0000810512000188ull, 0x1414208292000310ull, 0x0A00AA8005080140ull, + 0x00080420B4002840ull, 0x1110006000412000ull, 0x0880100000200800ull, 0x0140004000006000ull, + 0x0540000000800000ull, 0x2850A10800004000ull, 0x01220322850A1052ull, 0x0404000000000400ull, + 0x0420880040080040ull, 0x0000500A01402804ull, 0x000808A10C424000ull, 0x800408A0A0A01402ull, + 0x010800C001806024ull, 0x8101A88000004040ull, 0xA004000000020000ull, 0x901800140005A042ull, + 0x000028040C095004ull, 0x0A01000100200000ull, 0x0041410000000000ull, 0x0800010010208282ull, + 0x1002018A20000000ull, 0x0A84000000080003ull, 0x0030254004901000ull, 0x0001100800000000ull, + 0x0000000008040001ull, 0x0000000000511110ull, 0x0150400000000000ull, 0x022000611442D400ull, + 0x4048940001888941ull, 0x000000082081B855ull, 0x80B45A168B42D168ull, 0xA6A2448829242080ull, + 0x08A542000000048Aull, 0x040121A0A9690000ull, 0xA5A5AA92D2006AA2ull, 0x5A428000D0256905ull, + 0x0005000400169569ull, 0x0400000220200000ull, 0x681A540280001022ull, 0x48D2000001A15488ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0093[64] = { + 1u, 13u, 21u, 30u, 37u, 47u, 51u, 61u, 70u, 74u, 80u, 87u, 95u, 99u, 111u, 121u, + 131u, 138u, 145u, 159u, 168u, 176u, 185u, 198u, 210u, 220u, 228u, 233u, 238u, 242u, 251u, 267u, + 270u, 277u, 286u, 296u, 308u, 318u, 327u, 331u, 343u, 353u, 358u, 362u, 370u, 377u, 384u, 394u, + 397u, 400u, 406u, 410u, 423u, 437u, 449u, 474u, 492u, 503u, 517u, 543u, 562u, 576u, 580u, 594u, }; void recomp_unit_0093_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0093_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08978000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0093[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0093[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0093[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08978000; @@ -794,7 +701,6 @@ L_08978014: aot_fpr_14 = std::bit_cast(ctx.gpr[15]); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u + static_cast(600)); if (branch_taken) { @@ -814,7 +720,6 @@ L_0897803C: L_08978058: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08978228; } @@ -854,7 +759,6 @@ L_08978090: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8)))))); aot_gpr_2 = (aot_gpr_2 & 32u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08978214; } @@ -876,7 +780,6 @@ L_089780BC: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8)))))); aot_gpr_2 = (aot_gpr_2 & 64u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08978214; } @@ -898,7 +801,6 @@ L_089780E4: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8)))))); aot_gpr_2 = (aot_gpr_2 & 512u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08978214; } @@ -946,7 +848,6 @@ L_08978134: goto L_08978154; L_08978154: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[13]; - // nop if (branch_taken) { goto L_08978214; } @@ -1040,7 +941,6 @@ L_08978160: ctx.gpr[10] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); if (branch_taken) { @@ -1057,7 +957,6 @@ L_089781F0: goto L_08978204; L_08978204: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08978214; } @@ -1089,7 +988,6 @@ L_08978228: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.gpr[11] = (ctx.gpr[11] + static_cast(600)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[10] = (ctx.gpr[10] + static_cast(600)); if (branch_taken) { @@ -1103,7 +1001,6 @@ L_0897824C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[25] = (ctx.gpr[25] + static_cast(12)); if (branch_taken) { @@ -1135,13 +1032,22 @@ L_08978270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089782A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08978350; } @@ -1180,9 +1086,7 @@ L_089782BC: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fpr[18] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978358; } @@ -1190,7 +1094,6 @@ L_089782BC: } L_08978348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089783A4; } @@ -1198,7 +1101,6 @@ L_08978348: } L_08978350: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089783A4; } @@ -1212,7 +1114,6 @@ L_08978358: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(0)))))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089783A4; } @@ -1243,7 +1144,17 @@ L_089783A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089783AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[19]); @@ -1318,9 +1229,7 @@ L_08978410: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089784F8; } @@ -1329,9 +1238,7 @@ L_08978410: L_08978468: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089784F8; } @@ -1340,9 +1247,7 @@ L_08978468: L_0897847C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089784F8; } @@ -1351,9 +1256,7 @@ L_0897847C: L_08978490: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089784F8; } @@ -1362,9 +1265,7 @@ L_08978490: L_089784A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089784F8; } @@ -1373,9 +1274,7 @@ L_089784A4: L_089784B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089784F8; } @@ -1388,7 +1287,6 @@ L_089784CC: aot_gpr_4 = (aot_gpr_4 & 32u); aot_gpr_4 = (aot_gpr_4 >> 5u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089784F8; } @@ -1431,7 +1329,17 @@ L_0897850C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978540: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[18]); @@ -1508,9 +1416,7 @@ L_089785AC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978694; } @@ -1519,9 +1425,7 @@ L_089785AC: L_08978604: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978694; } @@ -1530,9 +1434,7 @@ L_08978604: L_08978618: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978694; } @@ -1541,9 +1443,7 @@ L_08978618: L_0897862C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978694; } @@ -1552,9 +1452,7 @@ L_0897862C: L_08978640: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978694; } @@ -1563,9 +1461,7 @@ L_08978640: L_08978654: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978694; } @@ -1578,7 +1474,6 @@ L_08978668: aot_gpr_4 = (aot_gpr_4 & 32u); aot_gpr_4 = (aot_gpr_4 >> 5u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08978694; } @@ -1621,7 +1516,17 @@ L_089786A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089786DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), ctx.gpr[18]); @@ -1674,7 +1579,6 @@ L_08978774: L_0897877C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(164), aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), std::bit_cast(ctx.fpr[19])); if (branch_taken) { @@ -1701,7 +1605,6 @@ L_089787B0: ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fpr[26] = ctx.fpr[0] + ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(164))); if (branch_taken) { @@ -1712,9 +1615,7 @@ L_089787B0: L_089787D0: ctx.fpr[26] = ctx.fpr[26] + ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089787D0; } @@ -1722,9 +1623,7 @@ L_089787D0: } L_089787E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978808; } @@ -1733,9 +1632,7 @@ L_089787E4: L_089787F4: ctx.fpr[26] = ctx.fpr[26] - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089787F4; } @@ -1784,9 +1681,7 @@ L_08978808: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fpr[26] = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089788B4; } @@ -1822,9 +1717,7 @@ L_089788E8: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978914; } @@ -1922,9 +1815,7 @@ L_08978988: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(148))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978B14; } @@ -1974,9 +1865,7 @@ L_089789E4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978B14; } @@ -2009,7 +1898,6 @@ L_08978A68: { const float fs = ctx.fpr[20]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), std::bit_cast(ctx.fpr[20])); if (branch_taken) { @@ -2019,9 +1907,7 @@ L_08978A68: } L_08978A98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978B14; } @@ -2036,9 +1922,7 @@ L_08978AA8: { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978B14; } @@ -2047,9 +1931,7 @@ L_08978AA8: L_08978AD4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(156))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08978B14; } @@ -2062,7 +1944,6 @@ L_08978AE8: aot_gpr_4 = (aot_gpr_4 & 32u); aot_gpr_4 = (aot_gpr_4 >> 5u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08978B14; } @@ -2114,7 +1995,17 @@ L_08978B30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978B78: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[11] = (aot_gpr_6 & 15u); @@ -2201,7 +2092,17 @@ L_08978C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978C50: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0)))))); @@ -2272,18 +2173,26 @@ L_08978C50: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(aot_fpr_12)); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978D08: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8)))))); ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (ctx.gpr[8] & 15u); aot_gpr_7 = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08978DA8; } @@ -2307,7 +2216,6 @@ L_08978D30: ctx.gpr[11] = (ctx.gpr[11] + aot_gpr_2); ctx.gpr[11] = (aot_gpr_7 + ctx.gpr[11]); { const bool branch_taken = ctx.gpr[11] != aot_gpr_6; - // nop if (branch_taken) { goto L_08978D90; } @@ -2321,7 +2229,6 @@ L_08978D60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08978D88; } @@ -2360,18 +2267,26 @@ L_08978DA8: goto L_08978DAC; L_08978DAC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978DB4: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8)))))); ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (ctx.gpr[8] & 15u); aot_gpr_7 = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08978E54; } @@ -2395,7 +2310,6 @@ L_08978DDC: ctx.gpr[11] = (ctx.gpr[11] + aot_gpr_2); ctx.gpr[11] = (aot_gpr_7 + ctx.gpr[11]); { const bool branch_taken = ctx.gpr[11] != aot_gpr_6; - // nop if (branch_taken) { goto L_08978E3C; } @@ -2409,7 +2323,6 @@ L_08978E0C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08978E34; } @@ -2448,11 +2361,20 @@ L_08978E54: goto L_08978E58; L_08978E58: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978E60: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[8] = (aot_gpr_5 - ctx.gpr[8]); @@ -2479,7 +2401,6 @@ L_08978E60: ctx.gpr[9] = (ctx.gpr[9] & 15u); ctx.gpr[9] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08978F0C; } @@ -2540,11 +2461,20 @@ L_08978F18: goto L_08978F4C; L_08978F4C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08978F54: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_4 = (17056u << 16u); @@ -2684,7 +2614,17 @@ L_0897907C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089790B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(124), ctx.gpr[18]); @@ -2741,7 +2681,6 @@ L_08979140: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); if (branch_taken) { @@ -2773,7 +2712,6 @@ L_089791A0: ctx.fpr[16] = std::bit_cast(ctx.gpr[24]); ctx.fpr[16] = static_cast(static_cast(std::bit_cast(ctx.fpr[16]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u + static_cast(600)); if (branch_taken) { @@ -2794,7 +2732,6 @@ L_089791C8: L_089791E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08979424; } @@ -2834,7 +2771,6 @@ L_08979220: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8)))))); aot_gpr_2 = (aot_gpr_2 & 32u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08979410; } @@ -2856,7 +2792,6 @@ L_0897924C: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8)))))); aot_gpr_2 = (aot_gpr_2 & 64u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08979410; } @@ -2878,7 +2813,6 @@ L_08979274: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8)))))); aot_gpr_2 = (aot_gpr_2 & 512u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08979410; } @@ -2926,7 +2860,6 @@ L_089792C4: goto L_089792E4; L_089792E4: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[14]; - // nop if (branch_taken) { goto L_08979410; } @@ -3018,9 +2951,7 @@ L_089792F0: L_0897936C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979394; } @@ -3029,9 +2960,7 @@ L_0897936C: L_08979380: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979410; } @@ -3040,7 +2969,6 @@ L_08979380: L_08979394: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); goto L_089793B4; @@ -3057,9 +2985,7 @@ L_089793A8: } L_089793B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979400; } @@ -3068,7 +2994,6 @@ L_089793B4: L_089793C4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_089793E4; @@ -3085,9 +3010,7 @@ L_089793D8: } L_089793E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979400; } @@ -3100,7 +3023,6 @@ L_089793F4: goto L_08979400; L_08979400: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08979410; } @@ -3132,7 +3054,6 @@ L_08979424: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.gpr[10] = (ctx.gpr[10] + static_cast(600)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(600)); if (branch_taken) { @@ -3146,7 +3067,6 @@ L_08979448: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[31] = (ctx.gpr[31] + static_cast(12)); if (branch_taken) { @@ -3177,7 +3097,17 @@ L_0897946C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089794A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3205,7 +3135,6 @@ L_089794A0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089795A0; } @@ -3215,7 +3144,6 @@ L_0897950C: ctx.gpr[17] = (0u | 0u); aot_gpr_6 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089795A0; } @@ -3250,7 +3178,6 @@ L_08979520: L_08979564: aot_gpr_6 = (static_cast(aot_gpr_6) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08979588; } @@ -3290,7 +3217,17 @@ L_089795A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089795BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3312,7 +3249,6 @@ L_089795BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[31]); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_0897969C; } @@ -3322,7 +3258,6 @@ L_08979610: ctx.gpr[17] = (0u | 0u); aot_gpr_6 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0897969C; } @@ -3356,7 +3291,6 @@ L_08979624: L_08979664: aot_gpr_6 = (static_cast(aot_gpr_6) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08979684; } @@ -3394,7 +3328,17 @@ L_0897969C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089796B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); @@ -3408,7 +3352,6 @@ L_089796B4: } L_089796C8: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08979870; } @@ -3420,7 +3363,6 @@ L_089796D0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(12)))))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0897979C; } @@ -3428,7 +3370,6 @@ L_089796D0: } L_089796E8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897979C; } @@ -3448,7 +3389,6 @@ L_089796F0: goto L_08979718; L_08979718: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08979760; } @@ -3465,7 +3405,6 @@ L_08979720: aot_gpr_2 = (aot_gpr_2 << 16u); aot_gpr_2 = (static_cast(static_cast(aot_gpr_2) >> 16u)); { const bool branch_taken = aot_gpr_2 == aot_gpr_5; - // nop if (branch_taken) { goto L_08979760; } @@ -3484,7 +3423,6 @@ L_0897974C: } L_08979760: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_0897979C; } @@ -3503,7 +3441,6 @@ L_08979768: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 49152u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089797AC; } @@ -3511,7 +3448,6 @@ L_08979768: } L_0897979C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089797B4; } @@ -3519,7 +3455,6 @@ L_0897979C: } L_089797A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08979870; } @@ -3535,7 +3470,6 @@ L_089797AC: } L_089797B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08979870; } @@ -3555,7 +3489,6 @@ L_089797BC: goto L_089797E4; L_089797E4: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_0897982C; } @@ -3572,7 +3505,6 @@ L_089797EC: aot_gpr_5 = (aot_gpr_5 << 16u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_0897982C; } @@ -3591,7 +3523,6 @@ L_08979818: } L_0897982C: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08979870; } @@ -3610,7 +3541,6 @@ L_08979834: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 49152u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08979870; } @@ -3629,18 +3559,26 @@ L_08979870: goto L_08979874; L_08979874: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897987C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[31]); ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x08979894u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08979894u) goto L_08979894; AOT_REGCACHE_SYNC_OUT(); return; L_08979894: @@ -3664,7 +3602,17 @@ L_089798A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089798CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -3739,9 +3687,7 @@ L_08979958: aot_gpr_4 = (16964u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979A2C; } @@ -3782,7 +3728,6 @@ L_089799D0: ctx.gpr[20] = (aot_gpr_2 | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_089799F0; } @@ -3792,7 +3737,6 @@ L_089799E0: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store32(ctx.gpr[23] + static_cast(0), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08979EE0; } @@ -3903,7 +3847,6 @@ L_08979AEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08979EA4; } @@ -4019,7 +3962,6 @@ L_08979BE0: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(4), ctx.vfpu_scalar_bits_ct<34u>()); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08979CE8; } @@ -4085,7 +4027,6 @@ L_08979C5C: AOT_REGCACHE_SYNC_OUT(); return; L_08979CD8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08979CE8; } @@ -4093,7 +4034,6 @@ L_08979CD8: } L_08979CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08979EA4; } @@ -4117,9 +4057,7 @@ L_08979CE8: { const float fs = aot_fpr_13; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979EA4; } @@ -4144,9 +4082,7 @@ L_08979D38: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); ctx.fpr[28] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979E18; } @@ -4155,7 +4091,6 @@ L_08979D38: L_08979D8C: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08979DA0; @@ -4164,7 +4099,6 @@ L_08979D8C: L_08979DA0: { const float fs = aot_fpr_14; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 2u); if (branch_taken) { @@ -4183,9 +4117,7 @@ L_08979DB4: L_08979DBC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979DD8; } @@ -4202,9 +4134,7 @@ L_08979DD0: L_08979DD8: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979DF4; } @@ -4220,7 +4150,6 @@ L_08979DEC: } L_08979DF4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 3u); if (branch_taken) { @@ -4249,7 +4178,6 @@ L_08979E18: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08979E30; @@ -4258,7 +4186,6 @@ L_08979E18: L_08979E30: { const float fs = aot_fpr_15; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 6u); if (branch_taken) { @@ -4277,9 +4204,7 @@ L_08979E44: L_08979E4C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979E68; } @@ -4296,9 +4221,7 @@ L_08979E60: L_08979E68: { const float fs = aot_fpr_12; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08979E84; } @@ -4314,7 +4237,6 @@ L_08979E7C: } L_08979E84: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 5u); if (branch_taken) { @@ -4342,7 +4264,6 @@ L_08979EA4: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08979ADC; } @@ -4352,7 +4273,6 @@ L_08979EC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08979EE0; } @@ -4388,7 +4308,17 @@ L_08979EE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08979F28: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4449,7 +4379,6 @@ L_08979FE8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(252), ctx.gpr[21]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), ctx.gpr[18]); if (branch_taken) { @@ -4481,7 +4410,6 @@ L_0897A04C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(276), aot_gpr_4); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); goto L_0897A49C; @@ -4537,7 +4465,6 @@ L_0897A0E8: ctx.gpr[21] = (aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(0))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A12C; } @@ -4558,7 +4485,6 @@ L_0897A108: goto L_0897A12C; L_0897A12C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0897A158; } @@ -4579,7 +4505,6 @@ L_0897A134: goto L_0897A158; L_0897A158: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0897A184; } @@ -4594,7 +4519,6 @@ L_0897A160: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(8)))))); aot_gpr_7 = (aot_gpr_7 & 256u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_0897A1B8; } @@ -4602,7 +4526,6 @@ L_0897A160: } L_0897A184: { const bool branch_taken = ctx.gpr[20] != aot_gpr_5; - // nop if (branch_taken) { goto L_0897A1B0; } @@ -4617,7 +4540,6 @@ L_0897A18C: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(8)))))); aot_gpr_7 = (aot_gpr_7 & 256u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A1B8; } @@ -4702,7 +4624,6 @@ L_0897A1B8: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_0897A244; @@ -4720,7 +4641,6 @@ L_0897A238: L_0897A244: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_0897A268; @@ -4742,7 +4662,6 @@ L_0897A268: L_0897A26C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); goto L_0897A294; @@ -4765,9 +4684,7 @@ L_0897A294: goto L_0897A29C; L_0897A29C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897A434; } @@ -4781,7 +4698,6 @@ L_0897A2AC: aot_gpr_7 = (aot_gpr_7 & 15u); aot_gpr_7 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_0897A434; } @@ -4801,7 +4717,6 @@ L_0897A2CC: ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A328; } @@ -4816,7 +4731,6 @@ L_0897A304: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(8)))))); aot_gpr_7 = (aot_gpr_7 & 32u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A414; } @@ -4824,7 +4738,6 @@ L_0897A304: } L_0897A328: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0897A354; } @@ -4839,7 +4752,6 @@ L_0897A330: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(8)))))); aot_gpr_7 = (aot_gpr_7 & 64u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A414; } @@ -4847,7 +4759,6 @@ L_0897A330: } L_0897A354: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0897A374; } @@ -4859,7 +4770,6 @@ L_0897A35C: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(8)))))); aot_gpr_7 = (aot_gpr_7 & 256u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_0897A39C; } @@ -4867,7 +4777,6 @@ L_0897A35C: } L_0897A374: { const bool branch_taken = ctx.gpr[20] != aot_gpr_5; - // nop if (branch_taken) { goto L_0897A394; } @@ -4879,7 +4788,6 @@ L_0897A37C: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(8)))))); aot_gpr_7 = (aot_gpr_7 & 256u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A39C; } @@ -4887,7 +4795,6 @@ L_0897A37C: } L_0897A394: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_0897A414; } @@ -4948,9 +4855,7 @@ L_0897A3C8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897A408; } @@ -4974,7 +4879,6 @@ L_0897A414: aot_gpr_7 = (aot_gpr_7 & 15u); aot_gpr_7 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_0897A2CC; } @@ -5013,7 +4917,6 @@ L_0897A460: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(272), aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(268), aot_gpr_6); if (branch_taken) { @@ -5034,9 +4937,7 @@ L_0897A49C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(284), aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897A04C; } @@ -5045,9 +4946,7 @@ L_0897A49C: L_0897A4CC: { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897A5E0; } @@ -5146,7 +5045,6 @@ L_0897A538: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_gpr_4 = (17204u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5156,9 +5054,7 @@ L_0897A538: } L_0897A59C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[26])) && aot_fpr_13 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897A5B4; } @@ -5174,7 +5070,6 @@ L_0897A5AC: } L_0897A5B4: ctx.gpr[31] = (0x0897A5BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897A5BCu) goto L_0897A5BC; AOT_REGCACHE_SYNC_OUT(); return; L_0897A5BC: @@ -5188,7 +5083,6 @@ L_0897A5C0: aot_fpr_12 = ctx.fpr[26] / aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897A5FC; } @@ -5228,7 +5122,17 @@ L_0897A5FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897A644: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -5263,7 +5167,6 @@ L_0897A6C8: ctx.fpr[24] = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0897A704; @@ -5271,7 +5174,6 @@ L_0897A6C8: goto L_0897A6F4; L_0897A6F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897A704; } @@ -5290,7 +5192,6 @@ L_0897A704: aot_gpr_5 = (aot_gpr_5 & 63u); aot_gpr_6 = (0u | 63u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_0897A7FC; } @@ -5303,7 +5204,6 @@ L_0897A718: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897A73C; } @@ -5322,7 +5222,6 @@ L_0897A73C: goto L_0897A740; L_0897A740: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897A790; } @@ -5397,7 +5296,6 @@ L_0897A7F0: L_0897A7FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(30048))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897A838; } @@ -5413,7 +5311,6 @@ L_0897A808: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(30048))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[22] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897A840; } @@ -5438,7 +5335,6 @@ L_0897A838: L_0897A840: aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897AD00; } @@ -5451,7 +5347,6 @@ L_0897A84C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(30048))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897A86C; } @@ -5467,7 +5362,6 @@ L_0897A86C: ctx.gpr[17] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30056))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0897ACF0; } @@ -5482,7 +5376,6 @@ L_0897A888: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897A8B4; } @@ -5490,7 +5383,6 @@ L_0897A888: } L_0897A8AC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897ACF0; } @@ -5534,9 +5426,7 @@ L_0897A8B4: { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[20] = ctx.fpr[20] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897ACF0; } @@ -5553,7 +5443,6 @@ L_0897A954: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897ACF0; } @@ -5575,7 +5464,6 @@ L_0897A980: ctx.gpr[18] = (aot_gpr_4 << 16u); ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_0897ACC4; } @@ -5590,7 +5478,6 @@ L_0897A9C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897A9EC; } @@ -5598,7 +5485,6 @@ L_0897A9C0: } L_0897A9E4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897ACC4; } @@ -5649,7 +5535,6 @@ L_0897A9EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897AAB8; } @@ -5675,9 +5560,7 @@ L_0897AAC0: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_15 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897ACC4; } @@ -5694,7 +5577,6 @@ L_0897AAD8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897AB1C; } @@ -5720,7 +5602,6 @@ L_0897AB24: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_15 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0897AB3C; @@ -5730,7 +5611,6 @@ L_0897AB3C: aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fpr[16] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_0897AB54; @@ -5741,7 +5621,6 @@ L_0897AB54: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[16] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_0897AB70; @@ -5878,7 +5757,6 @@ L_0897ABEC: } L_0897AC74: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(304))); goto L_0897ACA0; @@ -5886,7 +5764,6 @@ L_0897AC74: goto L_0897AC84; L_0897AC84: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_0897ACC4; } @@ -5894,9 +5771,7 @@ L_0897AC84: } L_0897AC8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897ACC4; } @@ -5942,7 +5817,6 @@ L_0897ACC4: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897A980; } @@ -5952,7 +5826,6 @@ L_0897ACF0: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897A84C; } @@ -5986,7 +5859,17 @@ L_0897AD04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897AD4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -6015,7 +5898,6 @@ L_0897ADC8: aot_gpr_4 = (aot_gpr_4 & 63u); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0897ADEC; } @@ -6023,7 +5905,6 @@ L_0897ADC8: } L_0897ADDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897AE5C; } @@ -6079,7 +5960,6 @@ L_0897AE50: L_0897AE5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(30556))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897AEA0; } @@ -6097,7 +5977,6 @@ L_0897AE68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(30556))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[30] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897AEA8; } @@ -6122,7 +6001,6 @@ L_0897AEA0: L_0897AEA8: aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B45C; } @@ -6135,7 +6013,6 @@ L_0897AEB4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(30556))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897AED4; } @@ -6188,9 +6065,7 @@ L_0897AED4: ctx.fpr[22] = std::sqrt(ctx.fpr[22]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(308))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B44C; } @@ -6205,7 +6080,6 @@ L_0897AF8C: ctx.gpr[22] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); ctx.gpr[22] = (ctx.gpr[22] & 15u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0897B44C; } @@ -6215,7 +6089,6 @@ L_0897AFB0: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B44C; } @@ -6237,7 +6110,6 @@ L_0897AFC0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B43C; } @@ -6261,7 +6133,6 @@ L_0897B000: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B43C; } @@ -6276,7 +6147,6 @@ L_0897B048: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B43C; } @@ -6321,9 +6191,7 @@ L_0897B06C: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B120; } @@ -6331,9 +6199,7 @@ L_0897B06C: } L_0897B110: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B43C; } @@ -6341,9 +6207,7 @@ L_0897B110: } L_0897B120: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B140; } @@ -6351,9 +6215,7 @@ L_0897B120: } L_0897B130: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B43C; } @@ -6363,7 +6225,6 @@ L_0897B140: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B43C; } @@ -6371,7 +6232,6 @@ L_0897B140: } L_0897B150: ctx.gpr[31] = (0x0897B158u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B158u) goto L_0897B158; AOT_REGCACHE_SYNC_OUT(); return; L_0897B158: @@ -6579,7 +6439,6 @@ L_0897B2B8: AOT_REGCACHE_SYNC_OUT(); return; L_0897B2D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0897B33C; } @@ -6663,7 +6522,6 @@ L_0897B328: goto L_0897B330; L_0897B330: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B33C; } @@ -6674,7 +6532,6 @@ L_0897B338: goto L_0897B33C; L_0897B33C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897B368; } @@ -6683,9 +6540,7 @@ L_0897B33C: L_0897B344: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B368; } @@ -6693,7 +6548,6 @@ L_0897B344: } L_0897B358: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(332))); goto L_0897B398; @@ -6701,7 +6555,6 @@ L_0897B358: goto L_0897B368; L_0897B368: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897B42C; } @@ -6709,9 +6562,7 @@ L_0897B368: } L_0897B370: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B42C; } @@ -6720,9 +6571,7 @@ L_0897B370: L_0897B380: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897B42C; } @@ -6767,7 +6616,6 @@ L_0897B3D4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B42C; } @@ -6778,7 +6626,6 @@ L_0897B3E4: aot_fpr_13 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_0897B400; @@ -6788,7 +6635,6 @@ L_0897B400: aot_gpr_4 = (16448u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(316))); goto L_0897B420; @@ -6815,7 +6661,6 @@ L_0897B42C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B150; } @@ -6825,7 +6670,6 @@ L_0897B43C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897AFC0; } @@ -6835,7 +6679,6 @@ L_0897B44C: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897AEB4; } @@ -6869,14 +6712,33 @@ L_0897B460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B4A8: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B4B0: aot_gpr_2 = (2200u << 16u); jump_target = ctx.gpr[31]; @@ -6884,12 +6746,21 @@ L_0897B4B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x0897B4CCu); - // nop goto L_0897B4B0; L_0897B4CC: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6898,7 +6769,17 @@ L_0897B4CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B4D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6927,7 +6808,6 @@ L_0897B508: goto L_0897B510; L_0897B510: ctx.gpr[31] = (0x0897B518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B518u) goto L_0897B518; AOT_REGCACHE_SYNC_OUT(); return; L_0897B518: @@ -6949,7 +6829,6 @@ L_0897B530: goto L_0897B534; L_0897B534: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B540; } @@ -6972,7 +6851,17 @@ L_0897B540: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B55C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -7030,7 +6919,6 @@ L_0897B58C: } L_0897B60C: ctx.gpr[31] = (0x0897B614u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B614u) goto L_0897B614; AOT_REGCACHE_SYNC_OUT(); return; L_0897B614: @@ -7038,14 +6926,12 @@ L_0897B614: goto L_0897B618; L_0897B618: ctx.gpr[31] = (0x0897B620u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B620u) goto L_0897B620; AOT_REGCACHE_SYNC_OUT(); return; L_0897B620: aot_mem.aot_direct_store32(aot_gpr_2 + static_cast(0), ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B63C; } @@ -7053,7 +6939,6 @@ L_0897B620: } L_0897B630: ctx.gpr[31] = (0x0897B638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B638u) goto L_0897B638; AOT_REGCACHE_SYNC_OUT(); return; L_0897B638: @@ -7061,7 +6946,6 @@ L_0897B638: goto L_0897B63C; L_0897B63C: ctx.gpr[31] = (0x0897B644u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B644u) goto L_0897B644; AOT_REGCACHE_SYNC_OUT(); return; L_0897B644: @@ -7077,7 +6961,6 @@ L_0897B644: } L_0897B658: ctx.gpr[31] = (0x0897B660u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B660u) goto L_0897B660; AOT_REGCACHE_SYNC_OUT(); return; L_0897B660: @@ -7085,14 +6968,12 @@ L_0897B660: goto L_0897B664; L_0897B664: ctx.gpr[31] = (0x0897B66Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B66Cu) goto L_0897B66C; AOT_REGCACHE_SYNC_OUT(); return; L_0897B66C: aot_mem.aot_direct_store32(aot_gpr_2 + static_cast(8), ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B688; } @@ -7100,7 +6981,6 @@ L_0897B66C: } L_0897B67C: ctx.gpr[31] = (0x0897B684u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B684u) goto L_0897B684; AOT_REGCACHE_SYNC_OUT(); return; L_0897B684: @@ -7108,7 +6988,6 @@ L_0897B684: goto L_0897B688; L_0897B688: ctx.gpr[31] = (0x0897B690u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B690u) goto L_0897B690; AOT_REGCACHE_SYNC_OUT(); return; L_0897B690: @@ -7124,7 +7003,6 @@ L_0897B690: } L_0897B6A4: ctx.gpr[31] = (0x0897B6ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B6ACu) goto L_0897B6AC; AOT_REGCACHE_SYNC_OUT(); return; L_0897B6AC: @@ -7132,14 +7010,12 @@ L_0897B6AC: goto L_0897B6B0; L_0897B6B0: ctx.gpr[31] = (0x0897B6B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B6B8u) goto L_0897B6B8; AOT_REGCACHE_SYNC_OUT(); return; L_0897B6B8: aot_mem.aot_direct_store32(aot_gpr_2 + static_cast(16), ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897B6D4; } @@ -7147,7 +7023,6 @@ L_0897B6B8: } L_0897B6C8: ctx.gpr[31] = (0x0897B6D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B6D0u) goto L_0897B6D0; AOT_REGCACHE_SYNC_OUT(); return; L_0897B6D0: @@ -7155,7 +7030,6 @@ L_0897B6D0: goto L_0897B6D4; L_0897B6D4: ctx.gpr[31] = (0x0897B6DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B6DCu) goto L_0897B6DC; AOT_REGCACHE_SYNC_OUT(); return; L_0897B6DC: @@ -7173,7 +7047,17 @@ L_0897B6DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B6FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7220,7 +7104,6 @@ L_0897B754: L_0897B760: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897B774; } @@ -7244,12 +7127,21 @@ L_0897B774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B78C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x0897B79Cu); - // nop goto L_0897B8EC; L_0897B79C: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7258,12 +7150,21 @@ L_0897B79C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B7A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x0897B7B8u); - // nop goto L_0897B8EC; L_0897B7B8: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7272,17 +7173,25 @@ L_0897B7B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B7C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x0897B7D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 605u, 0x08AC646Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B7D4u) goto L_0897B7D4; AOT_REGCACHE_SYNC_OUT(); return; L_0897B7D4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0897B7E4; } @@ -7306,33 +7215,69 @@ L_0897B7E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B7F4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B7FC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B804: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B80C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x0897B81Cu); - // nop goto L_0897BE30; L_0897B81C: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7341,7 +7286,17 @@ L_0897B81C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B828: aot_gpr_5 = (0u | 1u); aot_gpr_6 = (17116u << 16u); @@ -7377,7 +7332,17 @@ L_0897B828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B8A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7404,7 +7369,6 @@ L_0897B8C8: AOT_REGCACHE_SYNC_OUT(); return; L_0897B8D4: ctx.gpr[31] = (0x0897B8DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B8DCu) goto L_0897B8DC; AOT_REGCACHE_SYNC_OUT(); return; L_0897B8DC: @@ -7415,7 +7379,17 @@ L_0897B8DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897B8EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -7445,7 +7419,6 @@ L_0897B8EC: L_0897B940: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897B958; } @@ -7453,7 +7426,6 @@ L_0897B940: } L_0897B94C: ctx.gpr[31] = (0x0897B954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B954u) goto L_0897B954; AOT_REGCACHE_SYNC_OUT(); return; L_0897B954: @@ -7473,7 +7445,6 @@ L_0897B960: goto L_0897B96C; L_0897B96C: ctx.gpr[31] = (0x0897B974u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B974u) goto L_0897B974; AOT_REGCACHE_SYNC_OUT(); return; L_0897B974: @@ -7486,7 +7457,6 @@ L_0897B97C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(6856), std::bit_cast(aot_fpr_12)); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897B9A0; } @@ -7494,7 +7464,6 @@ L_0897B97C: } L_0897B994: ctx.gpr[31] = (0x0897B99Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897B99Cu) goto L_0897B99C; AOT_REGCACHE_SYNC_OUT(); return; L_0897B99C: @@ -7577,7 +7546,6 @@ L_0897BA38: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897BC30; } @@ -7586,7 +7554,6 @@ L_0897BA38: L_0897BA64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897BA7C; } @@ -7594,7 +7561,6 @@ L_0897BA64: } L_0897BA70: ctx.gpr[31] = (0x0897BA78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BA78u) goto L_0897BA78; AOT_REGCACHE_SYNC_OUT(); return; L_0897BA78: @@ -7602,13 +7568,11 @@ L_0897BA78: goto L_0897BA7C; L_0897BA7C: ctx.gpr[31] = (0x0897BA84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 732u, 0x089C71A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BA84u) goto L_0897BA84; AOT_REGCACHE_SYNC_OUT(); return; L_0897BA84: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0897BB20; } @@ -7623,7 +7587,6 @@ L_0897BA90: goto L_0897BA9C; L_0897BA9C: ctx.gpr[31] = (0x0897BAA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BAA4u) goto L_0897BAA4; AOT_REGCACHE_SYNC_OUT(); return; L_0897BAA4: @@ -7632,7 +7595,6 @@ L_0897BAA4: goto L_0897BAAC; L_0897BAAC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897BAC0; } @@ -7640,7 +7602,6 @@ L_0897BAAC: } L_0897BAB4: ctx.gpr[31] = (0x0897BABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BABCu) goto L_0897BABC; AOT_REGCACHE_SYNC_OUT(); return; L_0897BABC: @@ -7648,7 +7609,6 @@ L_0897BABC: goto L_0897BAC0; L_0897BAC0: ctx.gpr[31] = (0x0897BAC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 732u, 0x089C71A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BAC8u) goto L_0897BAC8; AOT_REGCACHE_SYNC_OUT(); return; L_0897BAC8: @@ -7662,7 +7622,6 @@ L_0897BAC8: } L_0897BAD4: ctx.gpr[31] = (0x0897BADCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BADCu) goto L_0897BADC; AOT_REGCACHE_SYNC_OUT(); return; L_0897BADC: @@ -7670,7 +7629,6 @@ L_0897BADC: goto L_0897BAE0; L_0897BAE0: ctx.gpr[31] = (0x0897BAE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 729u, 0x089C718Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BAE8u) goto L_0897BAE8; AOT_REGCACHE_SYNC_OUT(); return; L_0897BAE8: @@ -7684,7 +7642,6 @@ L_0897BAE8: } L_0897BAF4: ctx.gpr[31] = (0x0897BAFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BAFCu) goto L_0897BAFC; AOT_REGCACHE_SYNC_OUT(); return; L_0897BAFC: @@ -7692,7 +7649,6 @@ L_0897BAFC: goto L_0897BB00; L_0897BB00: ctx.gpr[31] = (0x0897BB08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 732u, 0x089C71A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BB08u) goto L_0897BB08; AOT_REGCACHE_SYNC_OUT(); return; L_0897BB08: @@ -7707,7 +7663,6 @@ L_0897BB08: L_0897BB20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897BB38; } @@ -7715,7 +7670,6 @@ L_0897BB20: } L_0897BB2C: ctx.gpr[31] = (0x0897BB34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BB34u) goto L_0897BB34; AOT_REGCACHE_SYNC_OUT(); return; L_0897BB34: @@ -7723,12 +7677,10 @@ L_0897BB34: goto L_0897BB38; L_0897BB38: ctx.gpr[31] = (0x0897BB40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 730u, 0x089C7194u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BB40u) goto L_0897BB40; AOT_REGCACHE_SYNC_OUT(); return; L_0897BB40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0897BBC4; } @@ -7737,7 +7689,6 @@ L_0897BB40: L_0897BB48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-10001))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897BBC4; } @@ -7758,7 +7709,6 @@ L_0897BB54: } L_0897BB70: ctx.gpr[31] = (0x0897BB78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BB78u) goto L_0897BB78; AOT_REGCACHE_SYNC_OUT(); return; L_0897BB78: @@ -7788,7 +7738,6 @@ L_0897BB7C: AOT_REGCACHE_SYNC_OUT(); return; L_0897BBBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897BBF8; } @@ -7808,7 +7757,6 @@ L_0897BBC4: L_0897BBD8: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897BBF0; } @@ -7816,7 +7764,6 @@ L_0897BBD8: } L_0897BBE4: ctx.gpr[31] = (0x0897BBECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BBECu) goto L_0897BBEC; AOT_REGCACHE_SYNC_OUT(); return; L_0897BBEC: @@ -7835,7 +7782,6 @@ L_0897BBF8: L_0897BC00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897BC18; } @@ -7843,7 +7789,6 @@ L_0897BC00: } L_0897BC0C: ctx.gpr[31] = (0x0897BC14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BC14u) goto L_0897BC14; AOT_REGCACHE_SYNC_OUT(); return; L_0897BC14: @@ -7851,12 +7796,10 @@ L_0897BC14: goto L_0897BC18; L_0897BC18: ctx.gpr[31] = (0x0897BC20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 642u, 0x089C6DDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BC20u) goto L_0897BC20; AOT_REGCACHE_SYNC_OUT(); return; L_0897BC20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0897BC30; } @@ -7870,7 +7813,6 @@ L_0897BC28: L_0897BC30: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897BC48; } @@ -7878,7 +7820,6 @@ L_0897BC30: } L_0897BC3C: ctx.gpr[31] = (0x0897BC44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BC44u) goto L_0897BC44; AOT_REGCACHE_SYNC_OUT(); return; L_0897BC44: @@ -7910,7 +7851,17 @@ L_0897BC50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897BC88: { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_gpr_4 = (16384u << 16u); @@ -7929,14 +7880,33 @@ L_0897BC88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897BCC0: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897BCC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[16]); @@ -8052,7 +8022,17 @@ L_0897BE14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897BE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -8063,7 +8043,6 @@ L_0897BE30: AOT_REGCACHE_SYNC_OUT(); return; L_0897BE7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 529u, 0x0897DF18u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8086,7 +8065,6 @@ L_0897BE84: } L_0897BEA8: ctx.gpr[31] = (0x0897BEB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BEB0u) goto L_0897BEB0; AOT_REGCACHE_SYNC_OUT(); return; L_0897BEB0: @@ -8103,7 +8081,6 @@ L_0897BEB8: goto L_0897BEC4; L_0897BEC4: ctx.gpr[31] = (0x0897BECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BECCu) goto L_0897BECC; AOT_REGCACHE_SYNC_OUT(); return; L_0897BECC: @@ -8122,7 +8099,6 @@ L_0897BED0: goto L_0897BEEC; L_0897BEEC: ctx.gpr[31] = (0x0897BEF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BEF4u) goto L_0897BEF4; AOT_REGCACHE_SYNC_OUT(); return; L_0897BEF4: @@ -8133,7 +8109,6 @@ L_0897BEF8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(6860), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6608))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897BF1C; } @@ -8147,7 +8122,6 @@ L_0897BF0C: L_0897BF1C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(233))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897BFEC; } @@ -8155,7 +8129,6 @@ L_0897BF1C: } L_0897BF28: ctx.gpr[31] = (0x0897BF30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BF30u) goto L_0897BF30; AOT_REGCACHE_SYNC_OUT(); return; L_0897BF30: @@ -8181,7 +8154,6 @@ L_0897BF40: goto L_0897BF54; L_0897BF54: ctx.gpr[31] = (0x0897BF5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BF5Cu) goto L_0897BF5C; AOT_REGCACHE_SYNC_OUT(); return; L_0897BF5C: @@ -8224,7 +8196,6 @@ L_0897BFC4: goto L_0897BFD0; L_0897BFD0: ctx.gpr[31] = (0x0897BFD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897BFD8u) goto L_0897BFD8; AOT_REGCACHE_SYNC_OUT(); return; L_0897BFD8: @@ -8246,7 +8217,6 @@ L_0897BFEC: goto L_0897BFF8; L_0897BFF8: ctx.gpr[31] = (0x0897C000u); - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0094.cpp b/profiles/vcs/generated/generated_unit_0094.cpp index 2a95760..a315490 100644 --- a/profiles/vcs/generated/generated_unit_0094.cpp +++ b/profiles/vcs/generated/generated_unit_0094.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0094[4095] = { - 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 6, 0, 0, 7, 0, 8, 9, 0, 0, 0, 0, 0, 10, 0, - 0, 11, 0, 12, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 17, 18, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, - 0, 26, 0, 0, 0, 0, 27, 28, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, 35, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 39, 0, 0, 40, 0, 41, 42, 0, 0, 43, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 47, 0, 0, 48, 0, 49, 50, 0, 51, 0, 0, 52, 0, - 53, 54, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 58, 59, 60, 0, 61, 0, 0, 62, 0, 63, 0, 64, 0, 65, 0, 0, 66, 0, 0, 67, - 0, 68, 69, 0, 70, 0, 71, 0, 72, 0, 0, 0, 73, 0, 74, 0, 0, 75, 0, 76, 77, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 82, - 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 0, 0, 95, 0, 0, 96, 0, - 97, 98, 0, 99, 0, 100, 0, 101, 0, 0, 0, 102, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, - 0, 112, 0, 0, 0, 113, 0, 0, 114, 0, 0, 115, 0, 116, 117, 0, 118, 0, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, - 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 0, 0, 132, 133, 0, 0, 134, 0, 0, 0, 135, 0, 0, 136, 137, 138, 0, 139, 0, - 0, 0, 140, 0, 0, 141, 0, 142, 0, 143, 0, 144, 0, 0, 145, 0, 146, 147, 0, 148, 0, 0, 149, 0, 150, 151, 0, 152, 0, 153, 0, 154, - 0, 0, 155, 0, 0, 156, 0, 157, 158, 0, 159, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 165, 166, 0, 0, 0, 167, 0, 0, 168, 0, 169, 170, 0, 0, 0, - 0, 0, 171, 0, 0, 172, 0, 173, 174, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, 0, 180, 0, 181, 0, - 182, 0, 0, 183, 0, 184, 185, 0, 186, 0, 0, 187, 0, 0, 188, 0, 189, 0, 0, 190, 0, 191, 0, 192, 0, 193, 194, 0, 0, 0, 0, 0, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 200, 0, 201, 202, 0, 203, 0, 0, - 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 208, 209, 0, 210, 0, 0, 0, 0, 211, - 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 214, 215, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 221, 0, 222, 0, 0, 0, 223, 0, 0, 0, 0, - 224, 0, 0, 0, 225, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 228, 0, 0, 0, 229, 230, 0, 0, 0, 231, 0, 0, 0, 232, 0, 233, 0, - 234, 0, 0, 0, 235, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 238, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 241, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, - 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 249, 0, 250, 0, 0, 251, 0, 252, 0, 0, 253, 0, 254, 0, - 255, 0, 0, 256, 257, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 262, 0, 0, 0, 0, 263, 0, 0, 264, 0, 265, 0, 266, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 273, 0, 274, 275, 0, 0, 276, 0, 0, 0, 0, 277, - 0, 0, 0, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 288, 0, 289, 290, 0, 0, 291, 0, 0, 292, 0, 293, 294, - 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 0, 0, - 298, 0, 0, 0, 299, 0, 300, 0, 301, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 0, 0, 305, 306, 0, 0, 0, 0, - 307, 0, 0, 0, 308, 309, 0, 0, 0, 310, 0, 0, 0, 311, 0, 312, 0, 313, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 316, 0, - 0, 0, 0, 317, 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 322, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 326, 0, 327, 328, 0, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 0, 0, 0, 340, 341, - 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 344, 0, 345, 0, 346, 0, 347, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 0, 0, - 0, 0, 0, 0, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 361, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 0, 0, 364, 0, 365, 366, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 376, 0, 377, 0, 378, 0, - 379, 0, 380, 0, 0, 0, 0, 381, 382, 0, 0, 0, 383, 0, 0, 0, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 389, 0, 390, 0, 391, 0, - 392, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, - 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, 0, 0, 0, 405, - 0, 406, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 409, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, 416, 417, 0, - 418, 0, 419, 0, 420, 0, 421, 0, 0, 0, 0, 422, 423, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 426, 0, 427, 0, 428, 0, 429, 430, - 0, 431, 0, 432, 0, 433, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, - 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, - 445, 0, 0, 0, 0, 0, 446, 0, 447, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 450, 451, 0, 452, 0, 453, 0, - 454, 0, 455, 0, 456, 0, 457, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 0, 0, 463, 464, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, - 467, 0, 468, 0, 469, 0, 470, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 478, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 484, 0, - 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 488, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 491, - 492, 0, 0, 493, 0, 494, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 497, 0, 498, 499, 0, 0, 0, 500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 503, - 0, 0, 0, 0, 504, 0, 0, 0, 505, 0, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 510, 511, 0, 0, - 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 0, 0, 0, - 0, 515, 0, 0, 0, 0, 516, 0, 517, 0, 0, 518, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 524, 0, 0, 525, 0, - 526, 0, 0, 527, 528, 0, 529, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 535, 0, 536, - 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 538, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, - 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, 547, 0, 0, - 548, 0, 0, 549, 0, 550, 551, 552, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 559, 0, 560, 0, 561, - 0, 562, 0, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 0, - 0, 0, 572, 0, 0, 573, 0, 574, 0, 575, 0, 576, 0, 0, 577, 0, 578, 0, 579, 580, 0, 0, 0, 581, 0, 0, 582, 0, 0, 583, 0, 0, - 584, 0, 585, 586, 0, 587, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 590, 0, 591, 0, 592, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 595, 0, 596, 0, 597, 0, 0, 0, 598, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 600, 0, 0, 0, 0, 601, 602, 0, 603, 0, 604, 0, 0, 605, 0, 606, 0, 0, 607, 0, 0, 608, - 0, 0, 609, 0, 610, 611, 0, 612, 0, 613, 0, 0, 614, 615, 0, 616, 0, 617, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, - 0, 0, 627, 0, 0, 628, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, - 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 636, 0, 637, 0, 0, 638, 0, 0, 639, 0, 640, 641, - 0, 642, 0, 643, 0, 0, 0, 644, 0, 0, 645, 0, 646, 647, 0, 648, 0, 0, 649, 0, 650, 0, 0, 651, 0, 0, 652, 0, 653, 654, 655, 0, - 0, 656, 0, 0, 0, 657, 0, 658, 0, 659, 0, 0, 660, 0, 0, 661, 0, 662, 663, 0, 664, 0, 665, 0, 666, 667, 0, 668, 0, 0, 669, 0, - 670, 671, 0, 672, 0, 0, 0, 0, 673, 0, 0, 0, 674, 675, 0, 676, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 680, 681, 0, 682, 0, 0, 683, 0, 0, 684, 0, 685, 686, 0, 687, 0, 688, 0, 0, 0, 689, 0, 0, 690, 0, 691, 692, 0, - 693, 0, 694, 0, 695, 0, 0, 696, 0, 0, 697, 0, 698, 699, 0, 0, 700, 0, 701, 0, 0, 0, 702, 0, 703, 0, 704, 0, 0, 705, 0, 0, - 706, 0, 707, 708, 709, 0, 0, 710, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 713, 0, 0, - 0, 0, 714, 0, 715, 0, 0, 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 724, 0, 0, - 0, 0, 725, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 729, - 0, 0, 730, 731, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, - 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 736, 0, 0, 737, 738, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 740, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 743, 0, 0, 744, 745, 0, 0, - 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 749, 0, 0, 0, 750, - 0, 751, 0, 752, 0, 753, 0, 0, 754, 0, 755, 0, 0, 0, 756, 0, 0, 757, 758, 759, 0, 760, 0, 761, 0, 762, 0, 0, 0, 0, 763, 0, - 0, 764, 0, 765, 0, 766, 0, 767, 0, 768, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, 0, 0, 773, 0, - 774, 0, 0, 775, 0, 0, 776, 0, 777, 778, 0, 0, 779, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 782, 0, 0, - 783, 0, 784, 785, 0, 786, 0, 0, 787, 0, 0, 788, 0, 789, 790, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 793, - 0, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 796, 0, 0, 0, - 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 799, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 803, 804, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 807, 0, 0, 808, 0, 809, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 811, 0, 0, - 0, 0, 812, 0, 0, 0, 813, 0, 0, 0, 814, 0, 815, 0, 0, 0, 0, 816, 0, 817, 0, 0, 0, 818, 0, 819, 0, 0, 0, 820, 0, 0, - 821, 0, 822, 0, 823, 0, 0, 0, 0, 824, 0, 825, 826, 0, 827, 0, 0, 0, 828, 0, 829, 0, 0, 0, 0, 830, 0, 831, 832, 0, 0, 0, - 833, 834, 0, 835, 0, 836, 0, 837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 840, 0, 0, 841, 0, 0, 842, 0, 843, 844, 0, 845, 0, 846, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 848, 849, 0, 0, 0, 850, 851, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 853, 0, 854, 0, 0, 855, 0, 0, 856, 0, 857, 858, 0, 859, 0, 0, 860, 0, 0, 0, 0, 0, 0, 0, 861, - 0, 0, 862, 0, 0, 863, 0, 0, 864, 0, 865, 866, 0, 867, 0, 868, 0, 869, 0, 0, 0, 0, 0, 0, 870, 0, 871, 0, 872, 0, 873, 0, - 0, 874, 0, 0, 875, 0, 0, 876, 0, 877, 878, 879, 0, 0, 880, 0, 0, 0, 0, 0, 0, 881, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, - 0, 0, 883, 0, 0, 884, 0, 0, 885, 0, 886, 887, 888, 0, 0, 889, 0, 0, 0, 0, 890, 0, 891, 0, 0, 0, 0, 0, 892, 0, 0, 893, - 0, 0, 0, 0, 0, 0, 0, 894, 895, 0, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 0, 0, 0, 0, 899, 900, 0, 0, 901, 902, 0, 903, 0, 0, 904, 0, 0, 905, - 0, 0, 0, 906, 0, 0, 907, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 909, 910, 0, 911, 0, 912, 0, 913, 0, 914, 0, 915, 916, 0, - 917, 0, 918, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 920, 0, 0, 921, 0, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 0, 923, 0, - 0, 0, 924, 0, 925, 0, 926, 0, 0, 927, 0, 0, 0, 0, 0, 928, 0, 0, 0, 929, 0, 0, 0, 0, 930, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, 0, 0, 932, 0, 0, 0, 933, 0, 0, 0, 0, 934, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 936, 937, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, - 0, 0, 0, 0, 0, 0, 940, 0, 0, 0, 0, 941, 942, 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, 944, 0, 0, 0, 945, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 948, 0, 949, - 0, 950, 0, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, 0, 954, 0, 955, 0, - 0, 0, 956, 0, 957, 0, 0, 0, 0, 0, 958, 0, 0, 959, 0, 960, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, 0, 0, 0, 0, 0, 964, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, 0, 972, 0, 0, 0, 0, 0, 0, 973, 0, 0, 974, 0, 0, - 0, 975, 0, 0, 976, 0, 977, 0, 0, 978, 979, 0, 0, 0, 980, 0, 981, 0, 0, 0, 0, 982, 0, 0, 983, 0, 0, 0, 0, 0, 984, 0, - 0, 0, 0, 0, 985, 0, 0, 0, 0, 0, 986, 0, 0, 987, 0, 0, 0, 988, 0, 989, 0, 0, 0, 990, 0, 0, 0, 991, 0, 0, 992, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0094[64] = { + 0x04D2014A41A45403ull, 0x000034C284240082ull, 0x0000000000011A40ull, 0x0000000013485000ull, + 0x92A9722B4B4AA000ull, 0x48AAAAAAAA5A5156ull, 0xAAA96922AA9528ABull, 0xAB4B4AA45C898AAAull, + 0x1A469000000515A4ull, 0x06A94969549015A4ull, 0x2D08002000000A02ull, 0x0002690085A10804ull, + 0x5118861108A88440ull, 0x80028005001C2211ull, 0x0014041952968002ull, 0x0402152100004000ull, + 0x82010A9084D05041ull, 0x08800004D2682820ull, 0x4422A2310C221151ull, 0x00050005000A0038ull, + 0x1556A908C2AB554Dull, 0x1A08854001108030ull, 0x56AA118556AAB400ull, 0x8221500110803015ull, + 0xD52118556AAB4006ull, 0x10A80022100602AAull, 0x4230AAD556800341ull, 0x540022100602AAD5ull, + 0x08D20069A001A088ull, 0x34800D1081080000ull, 0x4A95094208400001ull, 0xA500000080002159ull, + 0x2500008A44000D00ull, 0xA8088100010804E9ull, 0x248D4AA41400D552ull, 0x08A90000005580ADull, + 0x002AB2B492958500ull, 0x010000400400A000ull, 0x100008A440800000ull, 0xD258000005000001ull, + 0x4B5692A27494B48Aull, 0x000014000004B10Bull, 0x254534956915A4B0ull, 0x2442AA942040089Dull, + 0x4004040C82020024ull, 0x3208080080819040ull, 0x42AE452A88801010ull, 0x2200934941402AAAull, + 0x12000100A002692Dull, 0x0040D00080144010ull, 0x228A144420829200ull, 0x000800AB1A145A15ull, + 0x00B18080015A4900ull, 0x5502AD2480969280ull, 0x90509D2404204E92ull, 0x92CC040020001180ull, + 0x404240856AAC2048ull, 0x2110100001088254ull, 0x8000040001801000ull, 0xA800008008901840ull, + 0x0020A41450110042ull, 0x0020008002080010ull, 0x2409001001004040ull, 0x488A241041214652ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0094[64] = { + 1u, 20u, 32u, 37u, 44u, 68u, 97u, 126u, 155u, 171u, 195u, 204u, 217u, 234u, 246u, 261u, + 269u, 285u, 298u, 317u, 326u, 354u, 367u, 392u, 406u, 431u, 445u, 467u, 485u, 501u, 512u, 526u, + 537u, 548u, 562u, 584u, 599u, 620u, 625u, 632u, 642u, 670u, 680u, 706u, 725u, 735u, 746u, 764u, + 783u, 797u, 806u, 821u, 839u, 853u, 874u, 894u, 906u, 924u, 935u, 940u, 950u, 962u, 967u, 975u, }; void recomp_unit_0094_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0094_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0897C000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0094[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0094[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0094[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0897C000; @@ -1190,7 +1097,6 @@ L_0897C004: AOT_REGCACHE_SYNC_OUT(); return; L_0897C028: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C048; } @@ -1198,7 +1104,6 @@ L_0897C028: } L_0897C030: aot_gpr_31 = (0x0897C038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 58u, 0x089604E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C038u) goto L_0897C038; AOT_REGCACHE_SYNC_OUT(); return; L_0897C038: @@ -1216,7 +1121,6 @@ L_0897C038: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897C078; } @@ -1231,7 +1135,6 @@ L_0897C048: goto L_0897C054; L_0897C054: aot_gpr_31 = (0x0897C05Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C05Cu) goto L_0897C05C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C05C: @@ -1275,7 +1178,6 @@ L_0897C078: AOT_REGCACHE_SYNC_OUT(); return; L_0897C084: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C0E8; } @@ -1292,7 +1194,6 @@ L_0897C08C: } L_0897C098: aot_gpr_31 = (0x0897C0A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C0A0u) goto L_0897C0A0; AOT_REGCACHE_SYNC_OUT(); return; L_0897C0A0: @@ -1316,7 +1217,6 @@ L_0897C0C4: goto L_0897C0D0; L_0897C0D0: aot_gpr_31 = (0x0897C0D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C0D8u) goto L_0897C0D8; AOT_REGCACHE_SYNC_OUT(); return; L_0897C0D8: @@ -1347,7 +1247,6 @@ L_0897C104: aot_gpr_4 = (aot_gpr_4 + static_cast(1200)); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897C434; } @@ -1386,7 +1285,6 @@ L_0897C154: L_0897C168: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = ctx.fpr[30] - ctx.fpr[0]; if (branch_taken) { @@ -1405,9 +1303,7 @@ L_0897C17C: L_0897C184: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897C19C; } @@ -1425,7 +1321,6 @@ L_0897C19C: goto L_0897C1A8; L_0897C1A8: aot_gpr_31 = (0x0897C1B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C1B0u) goto L_0897C1B0; AOT_REGCACHE_SYNC_OUT(); return; L_0897C1B0: @@ -1468,7 +1363,6 @@ L_0897C218: goto L_0897C224; L_0897C224: aot_gpr_31 = (0x0897C22Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C22Cu) goto L_0897C22C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C22C: @@ -1549,7 +1443,6 @@ L_0897C240: } L_0897C330: aot_gpr_31 = (0x0897C338u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C338u) goto L_0897C338; AOT_REGCACHE_SYNC_OUT(); return; L_0897C338: @@ -1569,7 +1462,6 @@ L_0897C34C: goto L_0897C358; L_0897C358: aot_gpr_31 = (0x0897C360u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C360u) goto L_0897C360; AOT_REGCACHE_SYNC_OUT(); return; L_0897C360: @@ -1644,7 +1536,6 @@ L_0897C43C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C444: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C48C; } @@ -1659,7 +1550,6 @@ L_0897C44C: goto L_0897C458; L_0897C458: aot_gpr_31 = (0x0897C460u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C460u) goto L_0897C460; AOT_REGCACHE_SYNC_OUT(); return; L_0897C460: @@ -1679,7 +1569,6 @@ L_0897C46C: goto L_0897C478; L_0897C478: aot_gpr_31 = (0x0897C480u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C480u) goto L_0897C480; AOT_REGCACHE_SYNC_OUT(); return; L_0897C480: @@ -1722,7 +1611,6 @@ L_0897C4B4: goto L_0897C4B8; L_0897C4B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897C558; } @@ -1731,7 +1619,6 @@ L_0897C4B8: L_0897C4C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C4D4; } @@ -1739,7 +1626,6 @@ L_0897C4C0: } L_0897C4CC: aot_gpr_31 = (0x0897C4D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C4D4u) goto L_0897C4D4; AOT_REGCACHE_SYNC_OUT(); return; L_0897C4D4: @@ -1749,7 +1635,6 @@ L_0897C4D4: AOT_REGCACHE_SYNC_OUT(); return; L_0897C4DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C538; } @@ -1758,7 +1643,6 @@ L_0897C4DC: L_0897C4E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(234))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C538; } @@ -1773,7 +1657,6 @@ L_0897C4F0: goto L_0897C4FC; L_0897C4FC: aot_gpr_31 = (0x0897C504u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C504u) goto L_0897C504; AOT_REGCACHE_SYNC_OUT(); return; L_0897C504: @@ -1781,7 +1664,6 @@ L_0897C504: goto L_0897C508; L_0897C508: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897C518; } @@ -1789,7 +1671,6 @@ L_0897C508: } L_0897C510: aot_gpr_31 = (0x0897C518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C518u) goto L_0897C518; AOT_REGCACHE_SYNC_OUT(); return; L_0897C518: @@ -1806,7 +1687,6 @@ L_0897C520: AOT_REGCACHE_SYNC_OUT(); return; L_0897C530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897C558; } @@ -1821,7 +1701,6 @@ L_0897C538: goto L_0897C544; L_0897C544: aot_gpr_31 = (0x0897C54Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C54Cu) goto L_0897C54C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C54C: @@ -1835,7 +1714,6 @@ L_0897C550: L_0897C558: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C56C; } @@ -1843,7 +1721,6 @@ L_0897C558: } L_0897C564: aot_gpr_31 = (0x0897C56Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C56Cu) goto L_0897C56C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C56C: @@ -1853,7 +1730,6 @@ L_0897C56C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C574: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C740; } @@ -1871,7 +1747,6 @@ L_0897C584: AOT_REGCACHE_SYNC_OUT(); return; L_0897C58C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C5DC; } @@ -1889,7 +1764,6 @@ L_0897C59C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C5A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C5DC; } @@ -1907,7 +1781,6 @@ L_0897C5B4: AOT_REGCACHE_SYNC_OUT(); return; L_0897C5BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C5DC; } @@ -1925,7 +1798,6 @@ L_0897C5CC: AOT_REGCACHE_SYNC_OUT(); return; L_0897C5D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C6C0; } @@ -1935,7 +1807,6 @@ L_0897C5DC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(184))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0897C634; } @@ -1950,7 +1821,6 @@ L_0897C5EC: goto L_0897C5F8; L_0897C5F8: aot_gpr_31 = (0x0897C600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C600u) goto L_0897C600; AOT_REGCACHE_SYNC_OUT(); return; L_0897C600: @@ -1958,7 +1828,6 @@ L_0897C600: goto L_0897C604; L_0897C604: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897C614; } @@ -1966,7 +1835,6 @@ L_0897C604: } L_0897C60C: aot_gpr_31 = (0x0897C614u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C614u) goto L_0897C614; AOT_REGCACHE_SYNC_OUT(); return; L_0897C614: @@ -1983,7 +1851,6 @@ L_0897C61C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C62C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897C6C0; } @@ -1992,7 +1859,6 @@ L_0897C62C: L_0897C634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C648; } @@ -2000,7 +1866,6 @@ L_0897C634: } L_0897C640: aot_gpr_31 = (0x0897C648u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C648u) goto L_0897C648; AOT_REGCACHE_SYNC_OUT(); return; L_0897C648: @@ -2021,7 +1886,6 @@ L_0897C65C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C664: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C684; } @@ -2039,7 +1903,6 @@ L_0897C674: AOT_REGCACHE_SYNC_OUT(); return; L_0897C67C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C694; } @@ -2069,7 +1932,6 @@ L_0897C6A0: goto L_0897C6AC; L_0897C6AC: aot_gpr_31 = (0x0897C6B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C6B4u) goto L_0897C6B4; AOT_REGCACHE_SYNC_OUT(); return; L_0897C6B4: @@ -2083,7 +1945,6 @@ L_0897C6B8: L_0897C6C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-10001))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897C73C; } @@ -2101,7 +1962,6 @@ L_0897C6D4: AOT_REGCACHE_SYNC_OUT(); return; L_0897C6DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C72C; } @@ -2119,7 +1979,6 @@ L_0897C6EC: AOT_REGCACHE_SYNC_OUT(); return; L_0897C6F4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C72C; } @@ -2137,7 +1996,6 @@ L_0897C704: AOT_REGCACHE_SYNC_OUT(); return; L_0897C70C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897C72C; } @@ -2155,7 +2013,6 @@ L_0897C71C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C724: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C740; } @@ -2207,7 +2064,6 @@ L_0897C76C: goto L_0897C770; L_0897C770: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897C9A0; } @@ -2223,7 +2079,6 @@ L_0897C778: L_0897C788: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C79C; } @@ -2231,7 +2086,6 @@ L_0897C788: } L_0897C794: aot_gpr_31 = (0x0897C79Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C79Cu) goto L_0897C79C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C79C: @@ -2241,7 +2095,6 @@ L_0897C79C: AOT_REGCACHE_SYNC_OUT(); return; L_0897C7A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C830; } @@ -2256,7 +2109,6 @@ L_0897C7AC: goto L_0897C7B8; L_0897C7B8: aot_gpr_31 = (0x0897C7C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C7C0u) goto L_0897C7C0; AOT_REGCACHE_SYNC_OUT(); return; L_0897C7C0: @@ -2276,7 +2128,6 @@ L_0897C7CC: goto L_0897C7D8; L_0897C7D8: aot_gpr_31 = (0x0897C7E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C7E0u) goto L_0897C7E0; AOT_REGCACHE_SYNC_OUT(); return; L_0897C7E0: @@ -2292,7 +2143,6 @@ L_0897C7E4: } L_0897C7EC: aot_gpr_31 = (0x0897C7F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C7F4u) goto L_0897C7F4; AOT_REGCACHE_SYNC_OUT(); return; L_0897C7F4: @@ -2315,7 +2165,6 @@ L_0897C808: goto L_0897C814; L_0897C814: aot_gpr_31 = (0x0897C81Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C81Cu) goto L_0897C81C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C81C: @@ -2328,7 +2177,6 @@ L_0897C820: AOT_REGCACHE_SYNC_OUT(); return; L_0897C828: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897C9A0; } @@ -2346,7 +2194,6 @@ L_0897C830: } L_0897C840: aot_gpr_31 = (0x0897C848u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C848u) goto L_0897C848; AOT_REGCACHE_SYNC_OUT(); return; L_0897C848: @@ -2387,7 +2234,6 @@ L_0897C8B0: goto L_0897C8BC; L_0897C8BC: aot_gpr_31 = (0x0897C8C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C8C4u) goto L_0897C8C4; AOT_REGCACHE_SYNC_OUT(); return; L_0897C8C4: @@ -2409,7 +2255,6 @@ L_0897C8D8: goto L_0897C8E4; L_0897C8E4: aot_gpr_31 = (0x0897C8ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C8ECu) goto L_0897C8EC; AOT_REGCACHE_SYNC_OUT(); return; L_0897C8EC: @@ -2433,7 +2278,6 @@ L_0897C908: goto L_0897C914; L_0897C914: aot_gpr_31 = (0x0897C91Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C91Cu) goto L_0897C91C; AOT_REGCACHE_SYNC_OUT(); return; L_0897C91C: @@ -2449,7 +2293,6 @@ L_0897C920: } L_0897C928: aot_gpr_31 = (0x0897C930u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C930u) goto L_0897C930; AOT_REGCACHE_SYNC_OUT(); return; L_0897C930: @@ -2471,7 +2314,6 @@ L_0897C950: L_0897C95C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C970; } @@ -2479,7 +2321,6 @@ L_0897C95C: } L_0897C968: aot_gpr_31 = (0x0897C970u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C970u) goto L_0897C970; AOT_REGCACHE_SYNC_OUT(); return; L_0897C970: @@ -2489,7 +2330,6 @@ L_0897C970: AOT_REGCACHE_SYNC_OUT(); return; L_0897C978: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897C9A0; } @@ -2504,7 +2344,6 @@ L_0897C980: goto L_0897C98C; L_0897C98C: aot_gpr_31 = (0x0897C994u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897C994u) goto L_0897C994; AOT_REGCACHE_SYNC_OUT(); return; L_0897C994: @@ -2524,7 +2363,6 @@ L_0897C9A0: L_0897C9AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(14)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897C9D4; } @@ -2538,7 +2376,6 @@ L_0897C9B8: L_0897C9C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897C9D4; } @@ -2546,7 +2383,6 @@ L_0897C9C0: } L_0897C9CC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0897C9DC; } @@ -2554,7 +2390,6 @@ L_0897C9CC: } L_0897C9D4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897CE48; } @@ -2576,9 +2411,7 @@ L_0897C9E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(228))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CE48; } @@ -2600,7 +2433,6 @@ L_0897CA04: } L_0897CA24: aot_gpr_31 = (0x0897CA2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897CA2Cu) goto L_0897CA2C; AOT_REGCACHE_SYNC_OUT(); return; L_0897CA2C: @@ -2655,9 +2487,7 @@ L_0897CA94: L_0897CACC: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CAE8; } @@ -2685,9 +2515,7 @@ L_0897CAEC: L_0897CAF4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CB2C; } @@ -2707,9 +2535,7 @@ L_0897CB08: L_0897CB2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_26)) && aot_fpr_12 == aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CB68; } @@ -2718,9 +2544,7 @@ L_0897CB2C: L_0897CB40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CB5C; } @@ -2748,9 +2572,7 @@ L_0897CB60: L_0897CB68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CBA0; } @@ -2776,7 +2598,6 @@ L_0897CBA0: goto L_0897CBAC; L_0897CBAC: aot_gpr_31 = (0x0897CBB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897CBB4u) goto L_0897CBB4; AOT_REGCACHE_SYNC_OUT(); return; L_0897CBB4: @@ -2817,9 +2638,7 @@ L_0897CBC4: } L_0897CC18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CC4C; } @@ -2828,9 +2647,7 @@ L_0897CC18: L_0897CC28: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CC54; } @@ -2838,9 +2655,7 @@ L_0897CC28: } L_0897CC3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CC54; } @@ -2856,7 +2671,6 @@ L_0897CC4C: } L_0897CC54: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897CCA8; } @@ -2864,9 +2678,7 @@ L_0897CC54: } L_0897CC5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CC80; } @@ -2875,9 +2687,7 @@ L_0897CC5C: L_0897CC6C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CCA4; } @@ -2885,9 +2695,7 @@ L_0897CC6C: } L_0897CC80: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CCA8; } @@ -2896,9 +2704,7 @@ L_0897CC80: L_0897CC90: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CCA8; } @@ -2910,7 +2716,6 @@ L_0897CCA4: L_0897CCA8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); goto L_0897CCD0; @@ -2918,9 +2723,7 @@ L_0897CCA8: goto L_0897CCBC; L_0897CCBC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CCF0; } @@ -2931,9 +2734,7 @@ L_0897CCCC: goto L_0897CCD0; L_0897CCD0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CCF8; } @@ -2941,9 +2742,7 @@ L_0897CCD0: } L_0897CCE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CCF8; } @@ -2965,9 +2764,7 @@ L_0897CCF8: goto L_0897CD00; L_0897CD00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CD24; } @@ -2976,9 +2773,7 @@ L_0897CD00: L_0897CD10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CD48; } @@ -2986,7 +2781,6 @@ L_0897CD10: } L_0897CD24: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897CD50; @@ -2995,7 +2789,6 @@ L_0897CD24: L_0897CD34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897CD50; @@ -3017,9 +2810,7 @@ L_0897CD50: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CD88; } @@ -3044,9 +2835,7 @@ L_0897CD88: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CDC4; } @@ -3072,9 +2861,7 @@ L_0897CDC4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CE04; } @@ -3100,9 +2887,7 @@ L_0897CE04: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CE44; } @@ -3127,7 +2912,6 @@ L_0897CE48: L_0897CE50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897CE78; } @@ -3141,7 +2925,6 @@ L_0897CE5C: L_0897CE64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(14)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897CE78; } @@ -3149,7 +2932,6 @@ L_0897CE64: } L_0897CE70: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897CE80; } @@ -3157,7 +2939,6 @@ L_0897CE70: } L_0897CE78: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_0897D40C; } @@ -3179,9 +2960,7 @@ L_0897CE90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D40C; } @@ -3203,7 +2982,6 @@ L_0897CEA8: } L_0897CEC8: aot_gpr_31 = (0x0897CED0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897CED0u) goto L_0897CED0; AOT_REGCACHE_SYNC_OUT(); return; L_0897CED0: @@ -3262,9 +3040,7 @@ L_0897CF38: L_0897CF80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CFA0; } @@ -3294,9 +3070,7 @@ L_0897CFA8: L_0897CFB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897CFE8; } @@ -3317,9 +3091,7 @@ L_0897CFE8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(356))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D018; } @@ -3329,9 +3101,7 @@ L_0897D000: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(352))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D068; } @@ -3341,7 +3111,6 @@ L_0897D018: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(352))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(196)); if (branch_taken) { @@ -3361,7 +3130,6 @@ L_0897D038: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(356))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(196), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3388,9 +3156,7 @@ L_0897D05C: L_0897D068: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_26)) && aot_fpr_12 == aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D0AC; } @@ -3399,9 +3165,7 @@ L_0897D068: L_0897D07C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D09C; } @@ -3431,9 +3195,7 @@ L_0897D0A4: L_0897D0AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D0E4; } @@ -3454,9 +3216,7 @@ L_0897D0E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(348))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D114; } @@ -3466,9 +3226,7 @@ L_0897D0FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D164; } @@ -3478,7 +3236,6 @@ L_0897D114: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(192)); if (branch_taken) { @@ -3498,7 +3255,6 @@ L_0897D134: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(348))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(192), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3531,7 +3287,6 @@ L_0897D164: goto L_0897D170; L_0897D170: aot_gpr_31 = (0x0897D178u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897D178u) goto L_0897D178; AOT_REGCACHE_SYNC_OUT(); return; L_0897D178: @@ -3572,9 +3327,7 @@ L_0897D188: } L_0897D1DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D210; } @@ -3583,9 +3336,7 @@ L_0897D1DC: L_0897D1EC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D218; } @@ -3593,9 +3344,7 @@ L_0897D1EC: } L_0897D200: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D218; } @@ -3611,7 +3360,6 @@ L_0897D210: } L_0897D218: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0897D26C; } @@ -3619,9 +3367,7 @@ L_0897D218: } L_0897D220: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D244; } @@ -3630,9 +3376,7 @@ L_0897D220: L_0897D230: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D268; } @@ -3640,9 +3384,7 @@ L_0897D230: } L_0897D244: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D26C; } @@ -3651,9 +3393,7 @@ L_0897D244: L_0897D254: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D26C; } @@ -3665,7 +3405,6 @@ L_0897D268: L_0897D26C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); goto L_0897D294; @@ -3673,9 +3412,7 @@ L_0897D26C: goto L_0897D280; L_0897D280: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D2B4; } @@ -3686,9 +3423,7 @@ L_0897D290: goto L_0897D294; L_0897D294: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D2BC; } @@ -3696,9 +3431,7 @@ L_0897D294: } L_0897D2A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D2BC; } @@ -3720,9 +3453,7 @@ L_0897D2BC: goto L_0897D2C4; L_0897D2C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D2E8; } @@ -3731,9 +3462,7 @@ L_0897D2C4: L_0897D2D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D30C; } @@ -3741,7 +3470,6 @@ L_0897D2D4: } L_0897D2E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D314; @@ -3750,7 +3478,6 @@ L_0897D2E8: L_0897D2F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D314; @@ -3772,9 +3499,7 @@ L_0897D314: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D34C; } @@ -3799,9 +3524,7 @@ L_0897D34C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D388; } @@ -3827,9 +3550,7 @@ L_0897D388: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D3C8; } @@ -3855,9 +3576,7 @@ L_0897D3C8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D408; } @@ -3912,7 +3631,6 @@ L_0897D440: goto L_0897D444; L_0897D444: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897D454; } @@ -3920,7 +3638,6 @@ L_0897D444: } L_0897D44C: aot_gpr_31 = (0x0897D454u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897D454u) goto L_0897D454; AOT_REGCACHE_SYNC_OUT(); return; L_0897D454: @@ -3937,9 +3654,7 @@ L_0897D45C: L_0897D464: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D48C; } @@ -3950,9 +3665,7 @@ L_0897D478: goto L_0897D47C; L_0897D47C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D634; } @@ -3961,9 +3674,7 @@ L_0897D47C: L_0897D48C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D4AC; } @@ -3990,7 +3701,6 @@ L_0897D4B4: AOT_REGCACHE_SYNC_OUT(); return; L_0897D4BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897D4C8; } @@ -4046,7 +3756,6 @@ L_0897D514: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.gpr[17] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_26)) && ctx.fpr[15] == aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; if (branch_taken) { @@ -4057,7 +3766,6 @@ L_0897D514: L_0897D53C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D560; @@ -4085,7 +3793,6 @@ L_0897D560: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(212), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -4112,7 +3819,6 @@ L_0897D5A0: L_0897D5A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_13 - ctx.fpr[28]; if (branch_taken) { @@ -4122,7 +3828,6 @@ L_0897D5A8: } L_0897D5BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D5F0; @@ -4132,7 +3837,6 @@ L_0897D5CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D5F0; @@ -4161,9 +3865,7 @@ L_0897D5F0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D630; } @@ -4217,7 +3919,6 @@ L_0897D664: goto L_0897D668; L_0897D668: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897D678; } @@ -4225,7 +3926,6 @@ L_0897D668: } L_0897D670: aot_gpr_31 = (0x0897D678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897D678u) goto L_0897D678; AOT_REGCACHE_SYNC_OUT(); return; L_0897D678: @@ -4242,9 +3942,7 @@ L_0897D680: L_0897D688: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D6B0; } @@ -4255,9 +3953,7 @@ L_0897D69C: goto L_0897D6A0; L_0897D6A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D844; } @@ -4266,9 +3962,7 @@ L_0897D6A0: L_0897D6B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D6CC; } @@ -4294,7 +3988,6 @@ L_0897D6D4: AOT_REGCACHE_SYNC_OUT(); return; L_0897D6DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897D6E8; } @@ -4350,7 +4043,6 @@ L_0897D734: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.gpr[17] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_26)) && ctx.fpr[15] == aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; if (branch_taken) { @@ -4361,7 +4053,6 @@ L_0897D734: L_0897D75C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D780; @@ -4387,7 +4078,6 @@ L_0897D780: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(212), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -4414,7 +4104,6 @@ L_0897D7B8: L_0897D7C0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_13 + ctx.fpr[28]; if (branch_taken) { @@ -4424,7 +4113,6 @@ L_0897D7C0: } L_0897D7D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D808; @@ -4434,7 +4122,6 @@ L_0897D7E4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); goto L_0897D808; @@ -4461,9 +4148,7 @@ L_0897D808: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D840; } @@ -4517,7 +4202,6 @@ L_0897D874: goto L_0897D878; L_0897D878: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897D888; } @@ -4525,7 +4209,6 @@ L_0897D878: } L_0897D880: aot_gpr_31 = (0x0897D888u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897D888u) goto L_0897D888; AOT_REGCACHE_SYNC_OUT(); return; L_0897D888: @@ -4542,9 +4225,7 @@ L_0897D890: L_0897D898: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D8C0; } @@ -4555,9 +4236,7 @@ L_0897D8AC: goto L_0897D8B0; L_0897D8B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897DA68; } @@ -4566,9 +4245,7 @@ L_0897D8B0: L_0897D8C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897D8E0; } @@ -4595,7 +4272,6 @@ L_0897D8E8: AOT_REGCACHE_SYNC_OUT(); return; L_0897D8F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897D8FC; } @@ -4651,7 +4327,6 @@ L_0897D948: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.gpr[17] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_26)) && ctx.fpr[15] == aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; if (branch_taken) { @@ -4662,7 +4337,6 @@ L_0897D948: L_0897D970: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); goto L_0897D994; @@ -4690,7 +4364,6 @@ L_0897D994: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(208), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -4717,7 +4390,6 @@ L_0897D9D4: L_0897D9DC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_13 - ctx.fpr[28]; if (branch_taken) { @@ -4727,7 +4399,6 @@ L_0897D9DC: } L_0897D9F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); goto L_0897DA24; @@ -4737,7 +4408,6 @@ L_0897DA00: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); goto L_0897DA24; @@ -4766,9 +4436,7 @@ L_0897DA24: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897DA64; } @@ -4822,7 +4490,6 @@ L_0897DA98: goto L_0897DA9C; L_0897DA9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897DAAC; } @@ -4830,7 +4497,6 @@ L_0897DA9C: } L_0897DAA4: aot_gpr_31 = (0x0897DAACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DAACu) goto L_0897DAAC; AOT_REGCACHE_SYNC_OUT(); return; L_0897DAAC: @@ -4847,9 +4513,7 @@ L_0897DAB4: L_0897DABC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897DAE4; } @@ -4860,9 +4524,7 @@ L_0897DAD0: goto L_0897DAD4; L_0897DAD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897DC80; } @@ -4871,9 +4533,7 @@ L_0897DAD4: L_0897DAE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897DB00; } @@ -4899,7 +4559,6 @@ L_0897DB08: AOT_REGCACHE_SYNC_OUT(); return; L_0897DB10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897DB1C; } @@ -4955,7 +4614,6 @@ L_0897DB68: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.gpr[17] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_26)) && ctx.fpr[15] == aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; if (branch_taken) { @@ -4966,7 +4624,6 @@ L_0897DB68: L_0897DB90: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); goto L_0897DBB4; @@ -4993,7 +4650,6 @@ L_0897DBB4: ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fpr[28] = static_cast(static_cast(std::bit_cast(ctx.fpr[28]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(208), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5020,7 +4676,6 @@ L_0897DBF0: L_0897DBF8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_26)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = aot_fpr_12 + ctx.fpr[28]; if (branch_taken) { @@ -5030,7 +4685,6 @@ L_0897DBF8: } L_0897DC0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); goto L_0897DC40; @@ -5040,7 +4694,6 @@ L_0897DC1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(204))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); goto L_0897DC40; @@ -5068,9 +4721,7 @@ L_0897DC40: ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fpr[28] = static_cast(static_cast(std::bit_cast(ctx.fpr[28]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897DC7C; } @@ -5098,7 +4749,6 @@ L_0897DC80: } L_0897DC8C: aot_gpr_31 = (0x0897DC94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DC94u) goto L_0897DC94; AOT_REGCACHE_SYNC_OUT(); return; L_0897DC94: @@ -5129,7 +4779,6 @@ L_0897DCC4: } L_0897DCD0: aot_gpr_31 = (0x0897DCD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DCD8u) goto L_0897DCD8; AOT_REGCACHE_SYNC_OUT(); return; L_0897DCD8: @@ -5173,7 +4822,6 @@ L_0897DCEC: L_0897DD4C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); goto L_0897DD60; @@ -5184,7 +4832,6 @@ L_0897DD60: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(92))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_26)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(92))); goto L_0897DD7C; @@ -5193,7 +4840,6 @@ L_0897DD60: L_0897DD7C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); goto L_0897DD90; @@ -5211,7 +4857,6 @@ L_0897DD90: } L_0897DDA0: aot_gpr_31 = (0x0897DDA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DDA8u) goto L_0897DDA8; AOT_REGCACHE_SYNC_OUT(); return; L_0897DDA8: @@ -5241,7 +4886,6 @@ L_0897DDDC: goto L_0897DDE8; L_0897DDE8: aot_gpr_31 = (0x0897DDF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DDF0u) goto L_0897DDF0; AOT_REGCACHE_SYNC_OUT(); return; L_0897DDF0: @@ -5282,7 +4926,6 @@ L_0897DE00: L_0897DE58: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); goto L_0897DE6C; @@ -5292,7 +4935,6 @@ L_0897DE6C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(208), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(92))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_26 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_26 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(92))); goto L_0897DE84; @@ -5301,7 +4943,6 @@ L_0897DE6C: L_0897DE84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_26)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_26 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(212))); goto L_0897DE98; @@ -5318,7 +4959,6 @@ L_0897DE98: L_0897DEA0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897DED0; } @@ -5334,7 +4974,6 @@ L_0897DEAC: AOT_REGCACHE_SYNC_OUT(); return; L_0897DEC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897DED0; } @@ -5347,7 +4986,6 @@ L_0897DEC8: L_0897DED0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897DEE4; } @@ -5355,7 +4993,6 @@ L_0897DED0: } L_0897DEDC: aot_gpr_31 = (0x0897DEE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DEE4u) goto L_0897DEE4; AOT_REGCACHE_SYNC_OUT(); return; L_0897DEE4: @@ -5366,7 +5003,6 @@ L_0897DEE4: L_0897DEEC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(234))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897DF10; } @@ -5380,7 +5016,6 @@ L_0897DEF8: L_0897DF00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(42)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897DF10; } @@ -5391,7 +5026,6 @@ L_0897DF0C: goto L_0897DF10; L_0897DF10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897DF20; } @@ -5434,7 +5068,17 @@ L_0897DF34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897DF7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); aot_gpr_6 = (16128u << 16u); @@ -5461,7 +5105,6 @@ L_0897DF7C: } L_0897DFE0: aot_gpr_31 = (0x0897DFE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897DFE8u) goto L_0897DFE8; AOT_REGCACHE_SYNC_OUT(); return; L_0897DFE8: @@ -5495,7 +5138,6 @@ L_0897DFFC: } L_0897E020: aot_gpr_31 = (0x0897E028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E028u) goto L_0897E028; AOT_REGCACHE_SYNC_OUT(); return; L_0897E028: @@ -5516,7 +5158,6 @@ L_0897E02C: ctx.gpr[21] = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897E078; } @@ -5540,7 +5181,6 @@ L_0897E078: AOT_REGCACHE_SYNC_OUT(); return; L_0897E084: aot_gpr_31 = (0x0897E08Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E08Cu) goto L_0897E08C; AOT_REGCACHE_SYNC_OUT(); return; L_0897E08C: @@ -5572,7 +5212,6 @@ L_0897E09C: AOT_REGCACHE_SYNC_OUT(); return; L_0897E0E0: aot_gpr_31 = (0x0897E0E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 75u, 0x08B0C580u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E0E8u) goto L_0897E0E8; AOT_REGCACHE_SYNC_OUT(); return; L_0897E0E8: @@ -5593,7 +5232,6 @@ L_0897E0F4: L_0897E100: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897E118; } @@ -5690,7 +5328,6 @@ L_0897E1EC: goto L_0897E1F4; L_0897E1F4: aot_gpr_31 = (0x0897E1FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E1FCu) goto L_0897E1FC; AOT_REGCACHE_SYNC_OUT(); return; L_0897E1FC: @@ -5700,7 +5337,6 @@ L_0897E1FC: L_0897E204: aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897E2B8; } @@ -5714,7 +5350,6 @@ L_0897E210: goto L_0897E218; L_0897E218: aot_gpr_31 = (0x0897E220u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E220u) goto L_0897E220; AOT_REGCACHE_SYNC_OUT(); return; L_0897E220: @@ -5729,7 +5364,6 @@ L_0897E228: goto L_0897E230; L_0897E230: aot_gpr_31 = (0x0897E238u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E238u) goto L_0897E238; AOT_REGCACHE_SYNC_OUT(); return; L_0897E238: @@ -5772,7 +5406,6 @@ L_0897E270: L_0897E288: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_0897E29C; } @@ -5784,7 +5417,6 @@ L_0897E294: goto L_0897E29C; L_0897E29C: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_0897E2AC; } @@ -5813,7 +5445,6 @@ L_0897E2B8: } L_0897E2C0: aot_gpr_31 = (0x0897E2C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E2C8u) goto L_0897E2C8; AOT_REGCACHE_SYNC_OUT(); return; L_0897E2C8: @@ -5842,7 +5473,6 @@ L_0897E2E8: L_0897E2F4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897E30C; } @@ -5887,7 +5517,6 @@ L_0897E340: goto L_0897E348; L_0897E348: aot_gpr_31 = (0x0897E350u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E350u) goto L_0897E350; AOT_REGCACHE_SYNC_OUT(); return; L_0897E350: @@ -5934,7 +5563,6 @@ L_0897E3C0: } L_0897E3CC: aot_gpr_31 = (0x0897E3D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E3D4u) goto L_0897E3D4; AOT_REGCACHE_SYNC_OUT(); return; L_0897E3D4: @@ -5966,7 +5594,6 @@ L_0897E3EC: AOT_REGCACHE_SYNC_OUT(); return; L_0897E420: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0897E440; } @@ -5985,7 +5612,6 @@ L_0897E43C: goto L_0897E440; L_0897E440: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0897E464; } @@ -6028,7 +5654,6 @@ L_0897E470: L_0897E47C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897E494; } @@ -6067,7 +5692,6 @@ L_0897E4B4: AOT_REGCACHE_SYNC_OUT(); return; L_0897E4BC: aot_gpr_31 = (0x0897E4C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E4C4u) goto L_0897E4C4; AOT_REGCACHE_SYNC_OUT(); return; L_0897E4C4: @@ -6109,7 +5733,6 @@ L_0897E4D4: AOT_REGCACHE_SYNC_OUT(); return; L_0897E534: aot_gpr_31 = (0x0897E53Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 63u, 0x08B0C4CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E53Cu) goto L_0897E53C; AOT_REGCACHE_SYNC_OUT(); return; L_0897E53C: @@ -6166,7 +5789,17 @@ L_0897E598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897E5E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-10001))); @@ -6220,7 +5853,6 @@ L_0897E688: AOT_REGCACHE_SYNC_OUT(); return; L_0897E694: aot_gpr_31 = (0x0897E69Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E69Cu) goto L_0897E69C; AOT_REGCACHE_SYNC_OUT(); return; L_0897E69C: @@ -6343,7 +5975,6 @@ L_0897E7D8: L_0897E7E4: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897E7FC; } @@ -6376,7 +6007,6 @@ L_0897E80C: L_0897E81C: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_0897E834; } @@ -6384,7 +6014,6 @@ L_0897E81C: } L_0897E828: aot_gpr_31 = (0x0897E830u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E830u) goto L_0897E830; AOT_REGCACHE_SYNC_OUT(); return; L_0897E830: @@ -6421,7 +6050,6 @@ L_0897E850: L_0897E85C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897E874; } @@ -6474,7 +6102,6 @@ L_0897E8A4: L_0897E8B0: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_0897E8C8; } @@ -6494,7 +6121,6 @@ L_0897E8C8: goto L_0897E8D0; L_0897E8D0: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_0897E8E4; } @@ -6502,7 +6128,6 @@ L_0897E8D0: } L_0897E8D8: aot_gpr_31 = (0x0897E8E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E8E0u) goto L_0897E8E0; AOT_REGCACHE_SYNC_OUT(); return; L_0897E8E0: @@ -6524,7 +6149,6 @@ L_0897E8EC: } L_0897E8F8: aot_gpr_31 = (0x0897E900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897E900u) goto L_0897E900; AOT_REGCACHE_SYNC_OUT(); return; L_0897E900: @@ -6652,7 +6276,6 @@ L_0897EA1C: L_0897EA28: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897EA40; } @@ -6685,7 +6308,6 @@ L_0897EA50: L_0897EA60: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_0897EA78; } @@ -6693,7 +6315,6 @@ L_0897EA60: } L_0897EA6C: aot_gpr_31 = (0x0897EA74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897EA74u) goto L_0897EA74; AOT_REGCACHE_SYNC_OUT(); return; L_0897EA74: @@ -6729,7 +6350,6 @@ L_0897EA90: L_0897EA9C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897EAB4; } @@ -6762,7 +6382,6 @@ L_0897EAC8: AOT_REGCACHE_SYNC_OUT(); return; L_0897EAD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897EB2C; } @@ -6785,7 +6404,6 @@ L_0897EAE8: L_0897EAF4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_0897EB0C; } @@ -6833,7 +6451,17 @@ L_0897EB2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897EB58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6865,7 +6493,6 @@ L_0897EB88: L_0897EB90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897EBA4; } @@ -6877,7 +6504,6 @@ L_0897EB9C: goto L_0897EBA4; L_0897EBA4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897EBB4; } @@ -6893,7 +6519,6 @@ L_0897EBB4: goto L_0897EBF4; L_0897EBBC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0897EB74; } @@ -6911,7 +6536,17 @@ L_0897EBC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897EBD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6926,7 +6561,17 @@ L_0897EBE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897EBF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -6942,7 +6587,17 @@ L_0897EC08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897EC14: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -6964,7 +6619,6 @@ L_0897EC44: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); if (branch_taken) { @@ -6976,9 +6630,7 @@ L_0897EC64: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897EC8C; } @@ -7018,7 +6670,17 @@ L_0897ECA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897ECC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -7040,7 +6702,6 @@ L_0897ECF8: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); if (branch_taken) { @@ -7052,9 +6713,7 @@ L_0897ED18: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897ED40; } @@ -7094,7 +6753,17 @@ L_0897ED5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897ED7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -7116,7 +6785,6 @@ L_0897EDAC: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); if (branch_taken) { @@ -7128,9 +6796,7 @@ L_0897EDCC: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897EDF4; } @@ -7170,14 +6836,23 @@ L_0897EE10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897EE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16752))); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897F07C; } @@ -7212,7 +6887,6 @@ L_0897EE84: AOT_REGCACHE_SYNC_OUT(); return; L_0897EE8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897F07C; } @@ -7256,7 +6930,6 @@ L_0897EEC8: goto L_0897EECC; L_0897EECC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897EF04; } @@ -7264,7 +6937,6 @@ L_0897EECC: } L_0897EED4: aot_gpr_31 = (0x0897EEDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897EEDCu) goto L_0897EEDC; AOT_REGCACHE_SYNC_OUT(); return; L_0897EEDC: @@ -7294,11 +6966,9 @@ L_0897EEF8: } L_0897EF04: aot_gpr_31 = (0x0897EF0Cu); - // nop goto L_0897F774; L_0897EF0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897F07C; } @@ -7315,7 +6985,6 @@ L_0897EF1C: AOT_REGCACHE_SYNC_OUT(); return; L_0897EF24: aot_gpr_31 = (0x0897EF2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897EF2Cu) goto L_0897EF2C; AOT_REGCACHE_SYNC_OUT(); return; L_0897EF2C: @@ -7363,7 +7032,6 @@ L_0897EF80: L_0897EF8C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0897EFA4; } @@ -7385,7 +7053,6 @@ L_0897EFA4: L_0897EFB0: aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897EFF4; } @@ -7416,7 +7083,6 @@ L_0897EFE4: L_0897EFF4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2052))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897F00C; } @@ -7445,7 +7111,6 @@ L_0897F014: L_0897F020: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897F038; } @@ -7476,7 +7141,6 @@ L_0897F044: aot_gpr_4 = (aot_gpr_4 - aot_gpr_6); aot_gpr_4 = (static_cast(aot_gpr_4) < -256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897F07C; } @@ -7484,7 +7148,6 @@ L_0897F044: } L_0897F074: aot_gpr_31 = (0x0897F07Cu); - // nop goto L_0897F774; L_0897F07C: { std::uint32_t aot_run_words[7]{}; @@ -7502,7 +7165,17 @@ L_0897F07C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F0A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); @@ -7537,9 +7210,7 @@ L_0897F0F0: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897F1B8; } @@ -7553,9 +7224,7 @@ L_0897F110: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897F1B8; } @@ -7628,7 +7297,17 @@ L_0897F1BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F1D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -7748,7 +7427,6 @@ L_0897F2CC: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0897F300; } @@ -7756,7 +7434,6 @@ L_0897F2CC: } L_0897F2DC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0897F2F4; } @@ -7811,7 +7488,6 @@ L_0897F32C: goto L_0897F330; L_0897F330: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0897F370; } @@ -7874,7 +7550,6 @@ L_0897F384: } L_0897F38C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897F39C; } @@ -7882,7 +7557,6 @@ L_0897F38C: } L_0897F394: aot_gpr_31 = (0x0897F39Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897F39Cu) goto L_0897F39C; AOT_REGCACHE_SYNC_OUT(); return; L_0897F39C: @@ -7904,7 +7578,17 @@ L_0897F39C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), ctx.gpr[23]); @@ -7937,7 +7621,6 @@ L_0897F42C: L_0897F438: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0897F450; } @@ -8052,7 +7735,6 @@ L_0897F524: L_0897F530: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0897F548; } @@ -8073,7 +7755,6 @@ L_0897F548: L_0897F550: aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897F730; } @@ -8108,7 +7789,6 @@ L_0897F588: L_0897F594: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0897F5AC; } @@ -8133,7 +7813,6 @@ L_0897F5B4: AOT_REGCACHE_SYNC_OUT(); return; L_0897F5BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0897F5E0; } @@ -8161,7 +7840,6 @@ L_0897F5E8: AOT_REGCACHE_SYNC_OUT(); return; L_0897F5F0: aot_gpr_31 = (0x0897F5F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 75u, 0x08B0C580u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897F5F8u) goto L_0897F5F8; AOT_REGCACHE_SYNC_OUT(); return; L_0897F5F8: @@ -8182,7 +7860,6 @@ L_0897F604: L_0897F610: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0897F628; } @@ -8246,7 +7923,6 @@ L_0897F688: L_0897F694: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_0897F6AC; } @@ -8274,7 +7950,6 @@ L_0897F6BC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9236))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9240))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_0897F6FC; } @@ -8352,7 +8027,17 @@ L_0897F730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F774: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9236))); @@ -8416,7 +8101,17 @@ L_0897F7E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F7F0: ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16752))); jump_target = aot_gpr_31; @@ -8424,12 +8119,21 @@ L_0897F7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F7FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0897F80Cu); - // nop goto L_0897F774; L_0897F80C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8438,7 +8142,17 @@ L_0897F80C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F818: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -8494,7 +8208,6 @@ L_0897F864: goto L_0897F86C; L_0897F86C: aot_gpr_31 = (0x0897F874u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897F874u) goto L_0897F874; AOT_REGCACHE_SYNC_OUT(); return; L_0897F874: @@ -8502,7 +8215,6 @@ L_0897F874: goto L_0897F878; L_0897F878: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0897F888; } @@ -8525,7 +8237,17 @@ L_0897F888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; @@ -8542,7 +8264,17 @@ L_0897F8B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F8C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8562,7 +8294,17 @@ L_0897F8D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F8F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8575,7 +8317,6 @@ L_0897F8F8: } L_0897F908: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0897F918; } @@ -8583,7 +8324,6 @@ L_0897F908: } L_0897F910: aot_gpr_31 = (0x0897F918u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897F918u) goto L_0897F918; AOT_REGCACHE_SYNC_OUT(); return; L_0897F918: @@ -8593,7 +8333,17 @@ L_0897F918: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F924: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8642,7 +8392,17 @@ L_0897F960: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897F9B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8695,7 +8455,6 @@ L_0897FA30: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(28), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -8731,7 +8490,17 @@ L_0897FA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FAA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -8839,7 +8608,6 @@ L_0897FB9C: AOT_REGCACHE_SYNC_OUT(); return; L_0897FBEC: aot_gpr_31 = (0x0897FBF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897FBF4u) goto L_0897FBF4; AOT_REGCACHE_SYNC_OUT(); return; L_0897FBF4: @@ -8850,7 +8618,6 @@ L_0897FBF4: goto L_0897FBFC; L_0897FBFC: aot_gpr_31 = (0x0897FC04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0897FC04u) goto L_0897FC04; AOT_REGCACHE_SYNC_OUT(); return; L_0897FC04: @@ -8910,7 +8677,6 @@ L_0897FC78: } L_0897FC88: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0897FCBC; } @@ -8933,7 +8699,6 @@ L_0897FCA8: AOT_REGCACHE_SYNC_OUT(); return; L_0897FCB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897FCD4; } @@ -8970,7 +8735,17 @@ L_0897FCD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FD10: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); aot_gpr_6 = (2238u << 16u); @@ -9055,7 +8830,17 @@ L_0897FDD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FE18: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (16256u << 16u); @@ -9068,7 +8853,17 @@ L_0897FE18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FE38: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -9078,7 +8873,17 @@ L_0897FE38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FE60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -9128,7 +8933,17 @@ L_0897FEC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FECC: ctx.gpr[7] = (2247u << 16u); ctx.gpr[7] = (ctx.gpr[7] + static_cast(-3872)); @@ -9141,7 +8956,6 @@ L_0897FECC: L_0897FEE8: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_0897FF28; } @@ -9151,7 +8965,6 @@ L_0897FEF4: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(32))); ctx.gpr[9] = (ctx.gpr[9] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_0897FF10; } @@ -9160,7 +8973,6 @@ L_0897FEF4: L_0897FF04: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(36))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_0897FF18; } @@ -9173,7 +8985,6 @@ L_0897FF10: L_0897FF18: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(36))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_4; - // nop if (branch_taken) { goto L_0897FF28; } @@ -9194,11 +9005,20 @@ L_0897FF28: } L_0897FF38: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0897FF40: ctx.gpr[7] = (aot_gpr_5 | 0u); aot_gpr_5 = (2247u << 16u); @@ -9209,7 +9029,6 @@ L_0897FF40: L_0897FF54: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_4; - // nop if (branch_taken) { goto L_0897FFB4; } @@ -9219,9 +9038,7 @@ L_0897FF60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897FFB4; } @@ -9231,9 +9048,7 @@ L_0897FF78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897FFB4; } @@ -9243,9 +9058,7 @@ L_0897FF90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0897FFB4; } @@ -9254,7 +9067,6 @@ L_0897FF90: L_0897FFA8: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(4))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_0897FFCC; } @@ -9272,7 +9084,6 @@ L_0897FFB4: } L_0897FFC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0897FFDC; } @@ -9306,7 +9117,6 @@ L_0897FFEC: L_0897FFF8: ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 3u, 0x0898000Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0095.cpp b/profiles/vcs/generated/generated_unit_0095.cpp index c7c9b22..5be9f8f 100644 --- a/profiles/vcs/generated/generated_unit_0095.cpp +++ b/profiles/vcs/generated/generated_unit_0095.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0095[4090] = { - 1, 2, 0, 3, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 8, 0, - 9, 0, 0, 10, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 27, 0, - 28, 0, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 0, 0, 35, 0, 0, 0, 36, 0, 37, 0, 38, 0, 0, 39, 0, 0, 40, - 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 0, 0, 46, 0, 0, 47, 0, 48, 0, 0, 0, 49, 0, 50, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 55, 56, - 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, - 75, 0, 76, 0, 77, 0, 78, 79, 0, 80, 0, 0, 81, 0, 82, 0, 83, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 86, - 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 90, 0, 91, 0, 92, 0, 0, 0, 0, 0, - 93, 0, 0, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 102, 0, 103, 0, 0, 104, 0, - 105, 0, 106, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 109, 0, 0, 110, 0, 0, 111, 0, 112, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, - 0, 0, 115, 0, 0, 116, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 125, 0, 126, - 0, 127, 128, 0, 129, 0, 130, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, - 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 136, 137, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, - 141, 0, 142, 0, 143, 0, 0, 144, 0, 145, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, - 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 154, 155, 0, 0, 0, 0, 156, 0, 157, 0, 0, - 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, - 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 168, - 0, 169, 0, 0, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, 174, 0, 175, 0, 0, 176, 0, 0, 0, 0, 177, 0, 178, 0, - 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, 182, 0, 0, 0, 183, 0, 0, 0, 0, 184, 185, 0, 186, 0, 187, 0, 0, 0, 188, 0, 0, 189, - 0, 0, 190, 0, 191, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 197, 0, 0, 198, 0, 199, 0, 200, - 0, 0, 0, 201, 0, 0, 202, 0, 203, 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 0, 209, 0, 210, 0, 0, 0, - 211, 0, 0, 212, 0, 213, 0, 0, 214, 0, 215, 0, 0, 0, 216, 0, 0, 217, 0, 218, 0, 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 0, - 0, 222, 0, 0, 223, 0, 224, 0, 225, 0, 0, 226, 0, 0, 227, 0, 228, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, - 0, 0, 0, 232, 233, 0, 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 0, 0, 0, 0, 238, 239, 0, 0, 240, 0, 0, 241, 0, 0, 0, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, - 245, 0, 0, 0, 0, 246, 0, 0, 0, 0, 247, 248, 249, 0, 250, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, - 253, 0, 0, 0, 0, 254, 255, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 268, 269, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 276, 0, 0, 277, 0, 0, 278, - 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 283, 0, 0, 284, 285, 0, 0, 286, 287, 0, 288, 0, 289, 290, 0, 0, 291, 0, 0, 292, 0, 0, - 0, 0, 293, 294, 0, 295, 0, 0, 296, 0, 297, 0, 0, 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 302, - 0, 0, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 305, 306, 0, 0, 0, 0, 307, 0, 308, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 316, 0, - 317, 0, 0, 0, 0, 0, 318, 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, 322, 0, 323, 324, 0, 325, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 333, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, - 0, 0, 0, 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, - 0, 355, 0, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, - 363, 0, 364, 0, 0, 0, 365, 0, 0, 0, 366, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 371, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 372, 373, 0, 374, 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, - 379, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 382, 0, 383, 0, 0, 0, 0, 0, 384, 385, 0, 386, 0, 0, 0, 387, 0, 0, 0, 388, - 0, 0, 0, 0, 0, 389, 390, 0, 391, 0, 0, 0, 0, 0, 392, 393, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, - 398, 0, 399, 0, 0, 0, 0, 0, 400, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, 0, 0, 0, 405, 406, 0, 407, 0, 0, 0, - 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 414, 0, - 415, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 420, 421, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 424, 0, 425, 0, 426, 0, 427, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 430, 0, 0, 431, 0, - 432, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 436, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 439, 0, - 0, 440, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, - 446, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, - 0, 449, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 459, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, - 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, - 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 487, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, - 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 493, 0, 494, 0, - 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, - 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 502, 0, 503, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 508, 0, 509, 0, 0, 510, 0, 511, 0, 0, 512, - 0, 0, 513, 0, 514, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, - 520, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 526, 0, 0, 527, 0, 0, 528, 0, 529, 0, 0, 530, 0, 531, 0, 0, 532, 533, 0, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 537, 0, 538, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, - 0, 0, 541, 0, 0, 542, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 548, 0, - 0, 0, 549, 550, 0, 0, 0, 0, 551, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, - 0, 0, 0, 0, 0, 555, 0, 0, 556, 0, 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 564, 0, 0, 565, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 0, 569, 0, 0, 0, 0, 0, - 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, - 0, 0, 574, 0, 0, 575, 0, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, - 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 582, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 0, 585, - 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 588, 0, 0, 0, 0, 0, 589, 0, 0, - 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 597, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, 0, 603, 0, 0, 604, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 0, 616, 0, 0, 617, 0, 0, - 618, 0, 0, 619, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 625, 0, 626, 0, 0, 627, - 0, 0, 628, 0, 0, 629, 0, 0, 630, 0, 0, 631, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 635, 0, 636, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 640, - 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, 648, - 0, 649, 0, 0, 650, 0, 651, 0, 652, 0, 0, 0, 0, 0, 653, 0, 0, 0, 654, 0, 655, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 663, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 668, 0, 669, - 0, 0, 670, 0, 0, 671, 0, 672, 673, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 677, 0, 0, 0, 0, 678, 0, 0, 679, 0, 0, 680, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0095[64] = { + 0x200154496400028Bull, 0x540000A802848001ull, 0x5149144492A22AA9ull, 0x0010044AC9090000ull, + 0x808952D555555504ull, 0x4A0A555105500108ull, 0x0082122404A92905ull, 0x08002856A8810004ull, + 0x4220069510901A08ull, 0x0289100428614401ull, 0x509448A292002002ull, 0xA920A29491584644ull, + 0x414A452914912948ull, 0x2008501820254952ull, 0x08205C2104018930ull, 0x44400444006802E1ull, + 0x9300089000960800ull, 0x24D6662000000202ull, 0x01286210A808452Cull, 0x5080004800000204ull, + 0x00004D0016902441ull, 0x00000008082A0002ull, 0x210A080000048040ull, 0x0908AA1010800080ull, + 0x03402C4504021552ull, 0x88B0580340204458ull, 0x16088B058222C160ull, 0x3401011168034010ull, + 0x5400000548515680ull, 0x0000009250400000ull, 0x8000001140004800ull, 0x03014100000020A2ull, + 0x00841400000A8000ull, 0x0800001000000000ull, 0x0840000000000004ull, 0x0000924000000080ull, + 0x02824A0000104000ull, 0x5280000841030842ull, 0x0041608404280008ull, 0x050100B494A40410ull, + 0x0400000008000009ull, 0x10594A4800005000ull, 0x8214400000000000ull, 0x0000090C40824924ull, + 0x8200000000000000ull, 0x0480000100004920ull, 0x9020000104924940ull, 0x8440A00214004224ull, + 0x0088140420A00080ull, 0x2000800000000000ull, 0x0000100004924A04ull, 0x0000002000080002ull, + 0x0000000000080000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0005000400000004ull, 0x0000000000000000ull, 0x9450824924900000ull, 0x0000008010004924ull, + 0xA20A100A82000550ull, 0x2028040000544152ull, 0xA402400000054200ull, 0x02484A00000041A4ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0095[64] = { + 1u, 17u, 28u, 51u, 62u, 87u, 105u, 121u, 134u, 150u, 164u, 179u, 201u, 222u, 238u, 253u, + 267u, 279u, 293u, 310u, 317u, 330u, 336u, 344u, 355u, 372u, 389u, 408u, 422u, 437u, 443u, 449u, + 458u, 465u, 467u, 470u, 475u, 483u, 495u, 505u, 520u, 524u, 536u, 541u, 553u, 555u, 562u, 574u, + 586u, 595u, 597u, 606u, 609u, 610u, 610u, 610u, 610u, 614u, 614u, 628u, 635u, 649u, 661u, 670u, }; void recomp_unit_0095_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0095_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08980000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0095[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0095[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0095[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08980000; @@ -852,7 +759,6 @@ LOCAL_DISPATCH: } } L_08980000: - // nop goto L_08980004; L_08980004: { const bool branch_taken = 0u == 0u; @@ -874,7 +780,6 @@ L_0898000C: } L_0898001C: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08980078; } @@ -908,7 +813,6 @@ L_08980024: aot_mem.aot_direct_store32(ctx.gpr[8] + static_cast(8), 0u); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08980074; } @@ -928,11 +832,20 @@ L_08980074: goto L_08980078; L_08980078: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980080: aot_gpr_6 = (2247u << 16u); ctx.gpr[7] = (0u | 0u); @@ -941,7 +854,6 @@ L_08980080: L_0898008C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_089800B0; } @@ -971,11 +883,20 @@ L_089800B0: goto L_089800B8; L_089800B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089800C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[9] = (2247u << 16u); @@ -994,7 +915,6 @@ L_089800C0: L_089800F4: ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[3] != aot_gpr_4; - // nop if (branch_taken) { goto L_08980148; } @@ -1051,9 +971,7 @@ L_08980100: ctx.gpr[3] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[3]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08980148; } @@ -1081,7 +999,17 @@ L_0898015C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980164: aot_gpr_4 = (aot_gpr_4 << 4u); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -1092,7 +1020,6 @@ L_08980164: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08980194; } @@ -1104,11 +1031,20 @@ L_0898018C: goto L_08980194; L_08980194: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898019C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1135,7 +1071,6 @@ L_0898019C: } L_089801E8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08980234; } @@ -1165,7 +1100,6 @@ L_08980200: } L_0898020C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980234; } @@ -1212,7 +1146,6 @@ L_08980244: goto L_08980254; L_08980254: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089802A8; } @@ -1220,7 +1153,6 @@ L_08980254: } L_0898025C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089802A8; } @@ -1229,7 +1161,6 @@ L_0898025C: L_08980264: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08980298; } @@ -1238,7 +1169,6 @@ L_08980264: L_08980270: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08980298; } @@ -1247,7 +1177,6 @@ L_08980270: L_0898027C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08980298; } @@ -1271,7 +1200,6 @@ L_08980298: } L_089802A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089803A8; } @@ -1295,7 +1223,6 @@ L_089802C0: L_089802CC: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089802E0; } @@ -1356,7 +1283,6 @@ L_089802F8: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(12), ctx.gpr[19]); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08980360; } @@ -1365,7 +1291,6 @@ L_089802F8: L_08980340: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08980360; } @@ -1382,7 +1307,6 @@ L_0898034C: L_08980360: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08980378; } @@ -1402,12 +1326,10 @@ L_08980378: goto L_0898037C; L_0898037C: aot_gpr_31 = (0x08980384u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980384u) goto L_08980384; AOT_REGCACHE_SYNC_OUT(); return; L_08980384: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_089803A8; } @@ -1416,7 +1338,6 @@ L_08980384: L_0898038C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089803A8; } @@ -1445,7 +1366,17 @@ L_089803A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089803D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -1471,11 +1402,20 @@ L_08980408: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-6936))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980420: { const bool branch_taken = 0u == 0u; ctx.gpr[19] = (0u | 7u); @@ -1601,7 +1541,6 @@ L_08980498: goto L_0898049C; L_0898049C: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08980558; } @@ -1615,7 +1554,6 @@ L_089804A4: AOT_REGCACHE_SYNC_OUT(); return; L_089804B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08980558; } @@ -1623,13 +1561,11 @@ L_089804B0: } L_089804B8: aot_gpr_31 = (0x089804C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089804C0u) goto L_089804C0; AOT_REGCACHE_SYNC_OUT(); return; L_089804C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08980558; } @@ -1639,7 +1575,6 @@ L_089804CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980558; } @@ -1653,7 +1588,6 @@ L_089804DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08980550; } @@ -1663,7 +1597,6 @@ L_089804FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08980550; } @@ -1693,7 +1626,6 @@ L_08980520: goto L_08980550; L_08980550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08980668; } @@ -1701,7 +1633,6 @@ L_08980550: } L_08980558: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08980668; } @@ -1709,7 +1640,6 @@ L_08980558: } L_08980560: aot_gpr_31 = (0x08980568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980568u) goto L_08980568; AOT_REGCACHE_SYNC_OUT(); return; L_08980568: @@ -1773,7 +1703,6 @@ L_089805A8: } L_089805B0: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08980600; } @@ -1782,7 +1711,6 @@ L_089805B0: L_089805B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1038))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980600; } @@ -1790,7 +1718,6 @@ L_089805B8: } L_089805C4: aot_gpr_31 = (0x089805CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089805CCu) goto L_089805CC; AOT_REGCACHE_SYNC_OUT(); return; L_089805CC: @@ -1804,7 +1731,6 @@ L_089805CC: AOT_REGCACHE_SYNC_OUT(); return; L_089805E4: aot_gpr_31 = (0x089805ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089805ECu) goto L_089805EC; AOT_REGCACHE_SYNC_OUT(); return; L_089805EC: @@ -1815,7 +1741,6 @@ L_089805EC: AOT_REGCACHE_SYNC_OUT(); return; L_089805F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08980620; } @@ -1823,7 +1748,6 @@ L_089805F8: } L_08980600: aot_gpr_31 = (0x08980608u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980608u) goto L_08980608; AOT_REGCACHE_SYNC_OUT(); return; L_08980608: @@ -1838,7 +1762,6 @@ L_08980608: L_08980620: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08980640; } @@ -1846,7 +1769,6 @@ L_08980620: } L_0898062C: aot_gpr_31 = (0x08980634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980634u) goto L_08980634; AOT_REGCACHE_SYNC_OUT(); return; L_08980634: @@ -1866,7 +1788,6 @@ L_08980640: } L_0898064C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08980668; } @@ -1874,7 +1795,6 @@ L_0898064C: } L_08980654: aot_gpr_31 = (0x0898065Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898065Cu) goto L_0898065C; AOT_REGCACHE_SYNC_OUT(); return; L_0898065C: @@ -1898,7 +1818,17 @@ L_08980668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980688: aot_gpr_2 = (2200u << 16u); jump_target = aot_gpr_31; @@ -1906,12 +1836,21 @@ L_08980688: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980694: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089806A4u); - // nop goto L_08980688; L_089806A4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1920,7 +1859,17 @@ L_089806A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089806B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1938,7 +1887,17 @@ L_089806C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089806DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -1970,7 +1929,17 @@ L_08980708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980740: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2010,7 +1979,6 @@ L_08980774: goto L_0898077C; L_0898077C: aot_gpr_31 = (0x08980784u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980784u) goto L_08980784; AOT_REGCACHE_SYNC_OUT(); return; L_08980784: @@ -2018,7 +1986,6 @@ L_08980784: goto L_08980788; L_08980788: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980798; } @@ -2041,14 +2008,33 @@ L_08980798: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089807AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089807B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -2085,7 +2071,6 @@ L_0898080C: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08980830; } @@ -2153,7 +2138,6 @@ L_08980888: L_08980890: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089808A8; } @@ -2252,7 +2236,6 @@ L_08980958: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980974; } @@ -2260,7 +2243,6 @@ L_08980958: } L_0898096C: aot_gpr_31 = (0x08980974u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980974u) goto L_08980974; AOT_REGCACHE_SYNC_OUT(); return; L_08980974: @@ -2345,7 +2327,17 @@ L_08980A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980A34: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -2377,7 +2369,6 @@ L_08980A70: } L_08980A7C: aot_gpr_31 = (0x08980A84u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980A84u) goto L_08980A84; AOT_REGCACHE_SYNC_OUT(); return; L_08980A84: @@ -2418,7 +2409,6 @@ L_08980AB8: goto L_08980AC8; L_08980AC8: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08980AF0; } @@ -2427,7 +2417,6 @@ L_08980AC8: L_08980AD0: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_6; - // nop if (branch_taken) { goto L_08980AF0; } @@ -2501,7 +2490,6 @@ L_08980B4C: goto L_08980B50; L_08980B50: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980B60; } @@ -2509,7 +2497,6 @@ L_08980B50: } L_08980B58: aot_gpr_31 = (0x08980B60u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980B60u) goto L_08980B60; AOT_REGCACHE_SYNC_OUT(); return; L_08980B60: @@ -2536,7 +2523,6 @@ L_08980B7C: } L_08980B88: aot_gpr_31 = (0x08980B90u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980B90u) goto L_08980B90; AOT_REGCACHE_SYNC_OUT(); return; L_08980B90: @@ -2588,12 +2574,10 @@ L_08980BE0: } L_08980BEC: aot_gpr_31 = (0x08980BF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980BF4u) goto L_08980BF4; AOT_REGCACHE_SYNC_OUT(); return; L_08980BF4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08980C40; } @@ -2628,7 +2612,6 @@ L_08980C20: } L_08980C2C: aot_gpr_31 = (0x08980C34u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980C34u) goto L_08980C34; AOT_REGCACHE_SYNC_OUT(); return; L_08980C34: @@ -2660,7 +2643,6 @@ L_08980C5C: } L_08980C68: aot_gpr_31 = (0x08980C70u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980C70u) goto L_08980C70; AOT_REGCACHE_SYNC_OUT(); return; L_08980C70: @@ -2692,7 +2674,6 @@ L_08980C94: } L_08980CA0: aot_gpr_31 = (0x08980CA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980CA8u) goto L_08980CA8; AOT_REGCACHE_SYNC_OUT(); return; L_08980CA8: @@ -2724,7 +2705,6 @@ L_08980CCC: } L_08980CD8: aot_gpr_31 = (0x08980CE0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980CE0u) goto L_08980CE0; AOT_REGCACHE_SYNC_OUT(); return; L_08980CE0: @@ -2753,12 +2733,10 @@ L_08980D04: } L_08980D10: aot_gpr_31 = (0x08980D18u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08980D18u) goto L_08980D18; AOT_REGCACHE_SYNC_OUT(); return; L_08980D18: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08980D90; } @@ -2767,7 +2745,6 @@ L_08980D18: L_08980D20: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08980D90; } @@ -2805,7 +2782,6 @@ L_08980D54: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(28), std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08980D74; @@ -2815,7 +2791,6 @@ L_08980D74: aot_fpr_13 = std::bit_cast(0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(28), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08980D8C; @@ -2839,14 +2814,33 @@ L_08980D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980DB0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -2856,7 +2850,17 @@ L_08980DB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980DCC: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2910,11 +2914,20 @@ L_08980DCC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08980DF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); @@ -2934,7 +2947,6 @@ L_08980E10: L_08980E14: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08980F98; } @@ -2968,7 +2980,6 @@ L_08980E40: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 0u); if (branch_taken) { @@ -2980,7 +2991,6 @@ L_08980E68: aot_gpr_6 = (17608u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (50426u << 16u); if (branch_taken) { @@ -2991,7 +3001,6 @@ L_08980E68: L_08980E80: aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (17658u << 16u); if (branch_taken) { @@ -3002,7 +3011,6 @@ L_08980E80: L_08980E94: aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 & 255u); if (branch_taken) { @@ -3027,7 +3035,6 @@ L_08980EB8: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 0u); if (branch_taken) { @@ -3039,7 +3046,6 @@ L_08980ED4: aot_gpr_6 = (17608u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (50426u << 16u); if (branch_taken) { @@ -3050,7 +3056,6 @@ L_08980ED4: L_08980EEC: aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (17658u << 16u); if (branch_taken) { @@ -3061,7 +3066,6 @@ L_08980EEC: L_08980F00: aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 & 255u); if (branch_taken) { @@ -3098,7 +3102,6 @@ L_08980F24: AOT_REGCACHE_SYNC_OUT(); return; L_08980F4C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08980F98; } @@ -3117,7 +3120,6 @@ L_08980F58: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08980F88; @@ -3153,7 +3155,6 @@ L_08980FA8: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08980FD8; @@ -3173,7 +3174,6 @@ L_08980FE8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(51))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08981050; } @@ -3190,7 +3190,6 @@ L_08980FF8: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0898102C; @@ -3202,7 +3201,6 @@ L_0898102C: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(52), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16584))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981048; } @@ -3213,7 +3211,6 @@ L_08981044: goto L_08981048; L_08981048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898109C; } @@ -3222,7 +3219,6 @@ L_08981048: L_08981050: aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0898109C; } @@ -3239,7 +3235,6 @@ L_0898105C: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08981090; @@ -3271,7 +3266,6 @@ L_089810AC: aot_fpr_12 = aot_fpr_14 - aot_fpr_12; aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089810E0; @@ -3292,7 +3286,6 @@ L_089810E4: L_089810F0: aot_gpr_5 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08981104; } @@ -3314,7 +3307,17 @@ L_08981104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08981124: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (15605u << 16u); @@ -3363,7 +3366,6 @@ L_089811A4: L_089811A8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(246))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089811B8; } @@ -3375,7 +3377,6 @@ L_089811B4: L_089811B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089811C8; } @@ -3391,7 +3392,6 @@ L_089811C8: AOT_REGCACHE_SYNC_OUT(); return; L_089811D0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089811DC; } @@ -3403,7 +3403,6 @@ L_089811D8: L_089811DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16576))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_089811F4; } @@ -3437,7 +3436,6 @@ L_0898120C: L_08981214: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981228; } @@ -3469,13 +3467,22 @@ L_08981238: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898124C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x0898126Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898126Cu) goto L_0898126C; AOT_REGCACHE_SYNC_OUT(); return; L_0898126C: @@ -3500,7 +3507,6 @@ L_08981290: ctx.gpr[17] = (ctx.gpr[17] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089812B8; } @@ -3521,7 +3527,6 @@ L_089812B8: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08981290; } @@ -3529,7 +3534,6 @@ L_089812B8: } L_089812CC: aot_gpr_31 = (0x089812D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089812D4u) goto L_089812D4; AOT_REGCACHE_SYNC_OUT(); return; L_089812D4: @@ -3547,7 +3551,6 @@ L_089812E0: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_6 = (static_cast(aot_gpr_5) < 56 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089812E0; } @@ -3567,7 +3570,17 @@ L_08981308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08981324: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); @@ -3603,7 +3616,17 @@ L_0898138C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08981398: aot_gpr_6 = (2236u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(32304)); @@ -3619,9 +3642,7 @@ L_08981398: { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } aot_fpr_14 = aot_fpr_14 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089813F0; } @@ -3640,7 +3661,6 @@ L_089813DC: } L_089813F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981468; } @@ -3660,7 +3680,6 @@ L_08981400: ctx.gpr[8] = (ctx.gpr[8] + aot_gpr_6); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(16))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_08981428; } @@ -3679,7 +3698,6 @@ L_08981418: L_08981428: aot_gpr_4 = (0u | 56u); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_0898145C; } @@ -3692,7 +3710,6 @@ L_08981434: ctx.gpr[7] = (ctx.gpr[7] + aot_gpr_6); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981464; } @@ -3716,7 +3733,6 @@ L_08981450: goto L_0898145C; L_0898145C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981468; } @@ -3727,11 +3743,20 @@ L_08981464: goto L_08981468; L_08981468: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08981470: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -3744,7 +3769,6 @@ L_08981470: goto L_089814A0; L_089814A0: aot_gpr_31 = (0x089814A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089814A8u) goto L_089814A8; AOT_REGCACHE_SYNC_OUT(); return; L_089814A8: @@ -3753,7 +3777,6 @@ L_089814A8: L_089814AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898154C; } @@ -3817,7 +3840,6 @@ L_08981504: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); goto L_08981554; @@ -3825,7 +3847,6 @@ L_08981504: goto L_08981544; L_08981544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089816AC; } @@ -3833,7 +3854,6 @@ L_08981544: } L_0898154C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089816F4; } @@ -3843,9 +3863,7 @@ L_08981554: ctx.fpr[24] = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089816AC; } @@ -3906,9 +3924,7 @@ L_08981618: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089816AC; } @@ -3917,7 +3933,6 @@ L_08981618: L_0898163C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089816AC; } @@ -3961,7 +3976,6 @@ L_089816AC: AOT_REGCACHE_SYNC_OUT(); return; L_089816C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089816E0; } @@ -4002,7 +4016,17 @@ L_089816F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898171C: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -4022,7 +4046,6 @@ L_0898175C: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089817B4; } @@ -4034,9 +4057,7 @@ L_08981770: aot_gpr_4 = (aot_gpr_4 | 49807u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089817AC; } @@ -4055,7 +4076,6 @@ L_08981790: } L_089817A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089817CC; } @@ -4063,7 +4083,6 @@ L_089817A4: } L_089817AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089822EC; } @@ -4071,7 +4090,6 @@ L_089817AC: } L_089817B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089822EC; } @@ -4088,7 +4106,6 @@ L_089817CC: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089822EC; } @@ -4126,7 +4143,6 @@ L_08981804: } L_08981810: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089822D8; } @@ -4134,7 +4150,6 @@ L_08981810: } L_08981818: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981830; } @@ -4142,7 +4157,6 @@ L_08981818: } L_08981820: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089820B0; } @@ -4150,7 +4164,6 @@ L_08981820: } L_08981828: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089822D8; } @@ -4183,7 +4196,6 @@ L_08981844: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(40))); aot_gpr_5 = (aot_gpr_4 < static_cast(15) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4195,11 +4207,20 @@ L_08981868: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-6864))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08981880: { const bool branch_taken = 0u == 0u; ctx.gpr[20] = (0u | 1u); @@ -4212,7 +4233,6 @@ L_08981888: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089818A8; } @@ -4222,7 +4242,6 @@ L_08981898: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089818AC; } @@ -4233,7 +4252,6 @@ L_089818A8: goto L_089818AC; L_089818AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4248,7 +4266,6 @@ L_089818B4: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089818E0; } @@ -4275,7 +4292,6 @@ L_089818E4: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981910; } @@ -4286,7 +4302,6 @@ L_0898190C: goto L_08981910; L_08981910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4296,7 +4311,6 @@ L_08981918: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981954; } @@ -4306,7 +4320,6 @@ L_08981928: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08981954; } @@ -4317,9 +4330,7 @@ L_08981938: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089819B0; } @@ -4334,7 +4345,6 @@ L_08981954: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981980; } @@ -4361,7 +4371,6 @@ L_08981984: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089819B0; } @@ -4372,7 +4381,6 @@ L_089819AC: goto L_089819B0; L_089819B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4384,7 +4392,6 @@ L_089819B8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089819D4; } @@ -4395,7 +4402,6 @@ L_089819D0: goto L_089819D4; L_089819D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4405,7 +4411,6 @@ L_089819DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089819FC; } @@ -4415,7 +4420,6 @@ L_089819EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981A18; } @@ -4427,7 +4431,6 @@ L_089819FC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981A18; } @@ -4438,7 +4441,6 @@ L_08981A14: goto L_08981A18; L_08981A18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4450,7 +4452,6 @@ L_08981A20: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981A3C; } @@ -4461,7 +4462,6 @@ L_08981A38: goto L_08981A3C; L_08981A3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4471,7 +4471,6 @@ L_08981A44: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981A64; } @@ -4481,7 +4480,6 @@ L_08981A54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981A80; } @@ -4493,7 +4491,6 @@ L_08981A64: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981A80; } @@ -4504,7 +4501,6 @@ L_08981A7C: goto L_08981A80; L_08981A80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4516,7 +4512,6 @@ L_08981A88: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981AA4; } @@ -4527,7 +4522,6 @@ L_08981AA0: goto L_08981AA4; L_08981AA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4537,7 +4531,6 @@ L_08981AAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981ACC; } @@ -4547,7 +4540,6 @@ L_08981ABC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981AE8; } @@ -4559,7 +4551,6 @@ L_08981ACC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981AE8; } @@ -4570,7 +4561,6 @@ L_08981AE4: goto L_08981AE8; L_08981AE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4584,7 +4574,6 @@ L_08981AF0: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981B74; } @@ -4600,7 +4589,6 @@ L_08981B10: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981B40; } @@ -4627,7 +4615,6 @@ L_08981B44: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981B78; } @@ -4646,7 +4633,6 @@ L_08981B74: goto L_08981B78; L_08981B78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4656,7 +4642,6 @@ L_08981B80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981BA0; } @@ -4666,7 +4651,6 @@ L_08981B90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981C28; } @@ -4680,7 +4664,6 @@ L_08981BA0: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981C24; } @@ -4696,7 +4679,6 @@ L_08981BC0: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981BF0; } @@ -4723,7 +4705,6 @@ L_08981BF4: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981C28; } @@ -4742,7 +4723,6 @@ L_08981C24: goto L_08981C28; L_08981C28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4750,7 +4730,6 @@ L_08981C28: } L_08981C30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4758,7 +4737,6 @@ L_08981C30: } L_08981C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981C40; } @@ -4768,7 +4746,6 @@ L_08981C40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981C80; } @@ -4776,7 +4753,6 @@ L_08981C40: } L_08981C50: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08981C6C; } @@ -4800,7 +4776,6 @@ L_08981C6C: goto L_08981C78; L_08981C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089822EC; } @@ -4808,7 +4783,6 @@ L_08981C78: } L_08981C80: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08981CF0; } @@ -4842,7 +4816,6 @@ L_08981C88: goto L_08983B9C; L_08981CE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981D58; } @@ -4850,7 +4823,6 @@ L_08981CE8: } L_08981CF0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08981D58; } @@ -4886,7 +4858,6 @@ L_08981D58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (0u | 0u); if (branch_taken) { @@ -4896,7 +4867,6 @@ L_08981D58: } L_08981D70: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08981E78; } @@ -4905,7 +4875,6 @@ L_08981D70: L_08981D78: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08981D9C; } @@ -4914,7 +4883,6 @@ L_08981D78: L_08981D84: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(17))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08981D9C; } @@ -4923,7 +4891,6 @@ L_08981D84: L_08981D90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981E38; } @@ -4981,7 +4948,6 @@ L_08981D9C: L_08981E2C: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981E78; } @@ -5018,7 +4984,6 @@ L_08981E38: AOT_REGCACHE_SYNC_OUT(); return; L_08981E78: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08981FA0; } @@ -5028,7 +4993,6 @@ L_08981E80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981F04; } @@ -5076,7 +5040,6 @@ L_08981E90: AOT_REGCACHE_SYNC_OUT(); return; L_08981EFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08981FA0; } @@ -5086,7 +5049,6 @@ L_08981F04: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08981FA0; } @@ -5094,7 +5056,6 @@ L_08981F04: } L_08981F14: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08981FA0; } @@ -5104,9 +5065,7 @@ L_08981F1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08981FA0; } @@ -5156,9 +5115,7 @@ L_08981FA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089820A8; } @@ -5166,7 +5123,6 @@ L_08981FA0: } L_08981FB8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08982044; } @@ -5178,7 +5134,6 @@ L_08981FC0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11136))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(52))); goto L_08981FE4; @@ -5214,7 +5169,6 @@ L_08981FE4: AOT_REGCACHE_SYNC_OUT(); return; L_0898203C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089820A8; } @@ -5222,7 +5176,6 @@ L_0898203C: } L_08982044: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089820A8; } @@ -5256,7 +5209,6 @@ L_0898204C: AOT_REGCACHE_SYNC_OUT(); return; L_089820A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089822D8; } @@ -5266,9 +5218,7 @@ L_089820B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089822D8; } @@ -5460,9 +5410,7 @@ L_08982190: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089822D8; } @@ -5536,7 +5484,6 @@ L_089822D8: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089817E0; } @@ -5561,7 +5508,17 @@ L_089822EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898231C: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(108), ctx.gpr[16]); @@ -5688,7 +5645,6 @@ L_089824A4: L_089824AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089824C4; } @@ -5697,7 +5653,6 @@ L_089824AC: L_089824B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(51))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08982AE4; } @@ -5726,7 +5681,6 @@ L_089824E4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(56), static_cast(aot_gpr_4)); if (branch_taken) { @@ -5737,7 +5691,6 @@ L_089824E4: L_08982504: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56)))))); goto L_08982544; @@ -5746,7 +5699,6 @@ L_08982504: L_08982518: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56)))))); goto L_08982544; @@ -5755,9 +5707,7 @@ L_08982518: L_0898252C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08982560; } @@ -5785,7 +5735,6 @@ L_08982560: aot_gpr_5 = (aot_gpr_5 + static_cast(2000)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089825F8; } @@ -5796,7 +5745,6 @@ L_08982578: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56)))))); aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089825F0; } @@ -5877,7 +5825,6 @@ L_0898260C: goto L_0898264C; L_0898264C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089826B8; } @@ -5898,9 +5845,7 @@ L_08982668: aot_gpr_5 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089826B4; } @@ -5919,9 +5864,7 @@ L_0898269C: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089826B8; } @@ -5932,7 +5875,6 @@ L_089826B4: goto L_089826B8; L_089826B8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08982AE4; } @@ -5942,7 +5884,6 @@ L_089826C0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16128u << 16u); if (branch_taken) { @@ -5962,7 +5903,6 @@ L_089826D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56)))))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); if (branch_taken) { @@ -6003,7 +5943,6 @@ L_08982748: } L_08982754: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08982790; } @@ -6026,7 +5965,6 @@ L_08982768: L_08982770: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08982790; } @@ -6051,7 +5989,6 @@ L_08982790: goto L_08982794; L_08982794: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898298C; } @@ -6064,7 +6001,6 @@ L_0898279C: ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_13)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089827C0; @@ -6162,7 +6098,6 @@ L_0898286C: ctx.fpr[1] = std::bit_cast(ctx.gpr[8]); ctx.fpr[16] = ctx.fpr[16] - ctx.fpr[3]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[1])); goto L_089828E8; @@ -6191,7 +6126,6 @@ L_089828E8: AOT_REGCACHE_SYNC_OUT(); return; L_08982930: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898298C; } @@ -6224,7 +6158,6 @@ L_08982938: L_0898298C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(54))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08982AE4; } @@ -6239,7 +6172,6 @@ L_08982998: goto L_089829A4; L_089829A4: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089829CC; } @@ -6256,7 +6188,6 @@ L_089829AC: } L_089829B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089829CC; } @@ -6276,7 +6207,6 @@ L_089829CC: goto L_089829D0; L_089829D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08982AC8; } @@ -6315,18 +6245,12 @@ L_089829F0: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(12)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(14)))))); ctx.gpr[8] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(ctx.gpr[7])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(ctx.gpr[9])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 8u)); aot_gpr_6 = (aot_gpr_6 & 255u); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[7] = (static_cast(static_cast(ctx.gpr[7]) >> 8u)); aot_gpr_4 = (static_cast(static_cast(ctx.gpr[8]) >> 8u)); @@ -6348,7 +6272,6 @@ L_08982AB8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(20)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089829D8; } @@ -6356,7 +6279,6 @@ L_08982AB8: } L_08982AC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08982AE4; } @@ -6375,7 +6297,6 @@ L_08982AE4: ctx.gpr[23] = (static_cast(static_cast(ctx.gpr[23]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 56 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08982438; } @@ -6432,7 +6353,6 @@ L_08982B5C: aot_gpr_4 = (ctx.gpr[17] + ctx.gpr[18]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08982CFC; } @@ -6442,7 +6362,6 @@ L_08982B78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(56)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08982CFC; } @@ -6456,7 +6375,6 @@ L_08982B8C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(100))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08982CE4; } @@ -6507,37 +6425,27 @@ L_08982BAC: { const std::int64_t product = static_cast(static_cast(ctx.gpr[10])) * static_cast(static_cast(ctx.gpr[8])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_fpr_13 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_13)); aot_gpr_2 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[10])) * static_cast(static_cast(ctx.gpr[7])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[8] = (std::bit_cast(aot_fpr_13)); ctx.gpr[7] = (static_cast(static_cast(aot_gpr_2) >> 8u)); ctx.gpr[7] = (ctx.gpr[7] & 255u); aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(4), static_cast(ctx.gpr[7])); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[10])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (static_cast(static_cast(ctx.gpr[7]) >> 8u)); aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(5), static_cast(aot_gpr_5)); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(6), static_cast(aot_gpr_5)); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(ctx.gpr[9])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 8u)); aot_gpr_6 = (aot_gpr_6 & 255u); aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(20), static_cast(aot_gpr_6)); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(ctx.gpr[11])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 8u)); aot_gpr_6 = (aot_gpr_6 & 255u); @@ -6558,7 +6466,6 @@ L_08982CE4: ctx.gpr[19] = (static_cast(static_cast(ctx.gpr[19]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08982B8C; } @@ -6570,7 +6477,6 @@ L_08982CFC: ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 56 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08982B5C; } @@ -6619,7 +6525,17 @@ L_08982D38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08982D80: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); @@ -6666,7 +6582,6 @@ L_08982DE8: } L_08982E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983268; } @@ -6747,7 +6662,6 @@ L_08982ED4: ctx.gpr[16] = (ctx.gpr[16] + ctx.gpr[21]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08983208; } @@ -6756,7 +6670,6 @@ L_08982ED4: L_08982EF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(52))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08982F08; } @@ -6765,7 +6678,6 @@ L_08982EF0: L_08982EFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(51))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08983208; } @@ -6774,7 +6686,6 @@ L_08982EFC: L_08982F08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(55))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08983208; } @@ -6784,7 +6695,6 @@ L_08982F14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(56)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08982F84; } @@ -6795,7 +6705,6 @@ L_08982F24: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08982FD8; } @@ -6818,7 +6727,6 @@ L_08982F38: AOT_REGCACHE_SYNC_OUT(); return; L_08982F68: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08982FD8; } @@ -6852,7 +6760,6 @@ L_08982F84: AOT_REGCACHE_SYNC_OUT(); return; L_08982FB4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08982FD8; } @@ -6871,7 +6778,6 @@ L_08982FD8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(56)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08983208; } @@ -6880,9 +6786,7 @@ L_08982FD8: L_08982FE8: ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(44))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983208; } @@ -6894,9 +6798,7 @@ L_08982FFC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983208; } @@ -6932,7 +6834,6 @@ L_0898301C: AOT_REGCACHE_SYNC_OUT(); return; L_08983054: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08983208; } @@ -6942,7 +6843,6 @@ L_0898305C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(36))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_08983074; @@ -6951,9 +6851,7 @@ L_0898305C: L_08983074: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983208; } @@ -6965,7 +6863,6 @@ L_08983088: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); goto L_089830B0; @@ -6984,7 +6881,6 @@ L_089830B0: aot_fpr_12 = aot_fpr_13 / aot_fpr_12; aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089830CC; @@ -6992,7 +6888,6 @@ L_089830B0: goto L_089830CC; L_089830CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_089830DC; @@ -7040,14 +6935,10 @@ L_089830DC: { const std::int64_t product = static_cast(static_cast(aot_gpr_5)) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } { const float fs = aot_fpr_15; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[7])) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); ctx.gpr[16] = (aot_gpr_5 & 255u); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); ctx.gpr[22] = (aot_gpr_5 & 255u); @@ -7099,7 +6990,6 @@ L_08983208: } L_08983224: aot_gpr_31 = (0x0898322Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898322Cu) goto L_0898322C; AOT_REGCACHE_SYNC_OUT(); return; L_0898322C: @@ -7157,7 +7047,17 @@ L_08983268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089832B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); @@ -7173,7 +7073,6 @@ L_089832B0: { const std::uint32_t aot_run_words[8]{std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(68), aot_run_words); } { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983B70; } @@ -7195,7 +7094,6 @@ L_08983304: aot_gpr_4 = (16256u << 16u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_0898334C; @@ -7217,9 +7115,7 @@ L_0898334C: { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983B70; } @@ -7577,8 +7473,6 @@ L_08983808: ctx.fpr[19] = std::bit_cast(ctx.gpr[3]); ctx.fpr[19] = static_cast(static_cast(std::bit_cast(ctx.fpr[19]))); ctx.gpr[12] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[11]); const std::int32_t divisor = static_cast(ctx.gpr[10]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[12] = (ctx.gpr[12] + static_cast(60)); ctx.fpr[17] = std::bit_cast(ctx.gpr[12]); @@ -7606,7 +7500,6 @@ L_08983888: { const float fs = ctx.fpr[0]; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[19] = std::bit_cast(0x7FC00000u); else ctx.fpr[19] = fs * ft; } ctx.fpr[18] = ctx.fpr[18] + ctx.fpr[19]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8456))); goto L_089838C8; @@ -7779,7 +7672,6 @@ L_08983ABC: AOT_REGCACHE_SYNC_OUT(); return; L_08983AD0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08983AF0; } @@ -7794,7 +7686,6 @@ L_08983AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08983AE8: aot_gpr_31 = (0x08983AF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08983AF0u) goto L_08983AF0; AOT_REGCACHE_SYNC_OUT(); return; L_08983AF0: @@ -7867,7 +7758,17 @@ L_08983B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08983B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_2 = (2236u << 16u); @@ -7905,7 +7806,6 @@ L_08983B9C: } L_08983C10: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08983C28; } @@ -7913,7 +7813,6 @@ L_08983C10: } L_08983C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983CB0; } @@ -7921,7 +7820,6 @@ L_08983C18: } L_08983C20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983EB8; } @@ -7967,9 +7865,7 @@ L_08983C28: ctx.gpr[14] = (16908u << 16u); ctx.fpr[16] = std::bit_cast(ctx.gpr[14]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983C84; } @@ -7979,7 +7875,6 @@ L_08983C64: ctx.gpr[14] = (16968u << 16u); ctx.fpr[18] = std::bit_cast(ctx.gpr[14]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[14] = (16752u << 16u); if (branch_taken) { @@ -7989,7 +7884,6 @@ L_08983C64: } L_08983C7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983CB0; } @@ -7997,7 +7891,6 @@ L_08983C7C: } L_08983C84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983EB8; } @@ -8035,7 +7928,6 @@ L_08983CCC: ctx.gpr[25] = (ctx.gpr[25] + ctx.gpr[14]); ctx.gpr[25] = (aot_mem.aot_direct_load32(ctx.gpr[25] + static_cast(16))); { const bool branch_taken = ctx.gpr[25] == aot_gpr_4; - // nop if (branch_taken) { goto L_08983CF4; } @@ -8053,7 +7945,6 @@ L_08983CE4: } L_08983CF4: { const bool branch_taken = ctx.gpr[15] != ctx.gpr[24]; - // nop if (branch_taken) { goto L_08983DD4; } @@ -8061,7 +7952,6 @@ L_08983CF4: } L_08983CFC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08983D10; } @@ -8078,7 +7968,6 @@ L_08983D04: } L_08983D10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983EB8; } @@ -8098,7 +7987,6 @@ L_08983D20: ctx.gpr[25] = (ctx.gpr[25] + ctx.gpr[14]); ctx.gpr[25] = (aot_mem.aot_direct_load32(ctx.gpr[25] + static_cast(16))); { const bool branch_taken = ctx.gpr[25] == 0u; - // nop if (branch_taken) { goto L_08983D48; } @@ -8124,7 +8012,6 @@ L_08983D48: } L_08983D50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983EB8; } @@ -8161,7 +8048,6 @@ L_08983DA8: ctx.gpr[15] = (static_cast(static_cast(ctx.gpr[15]) >> 16u)); ctx.gpr[16] = (static_cast(ctx.gpr[15]) < 6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08983DA8; } @@ -8169,7 +8055,6 @@ L_08983DA8: } L_08983DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08983DF4; } @@ -8183,7 +8068,6 @@ L_08983DD4: ctx.gpr[14] = (aot_mem.aot_direct_load8(ctx.gpr[24] + static_cast(52))); ctx.gpr[14] = (ctx.gpr[14] | aot_gpr_2); { const bool branch_taken = ctx.gpr[14] == 0u; - // nop if (branch_taken) { goto L_08983E38; } @@ -8210,9 +8094,7 @@ L_08983DF4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fpr[16] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08983E40; } @@ -8278,7 +8160,17 @@ L_08983EB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08983EC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), 0u); @@ -8338,7 +8230,17 @@ L_08983F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08983F38: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[17]); @@ -8377,7 +8279,6 @@ L_08983FA4: L_08983FAC: aot_gpr_5 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0096_entry, 96u, 55u, 0x089842D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8415,7 +8316,6 @@ L_08983FE4: aot_gpr_4 = (0u | 38u); ctx.gpr[19] = (ctx.gpr[19] & 255u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0096_entry, 96u, 28u, 0x0898414Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0096.cpp b/profiles/vcs/generated/generated_unit_0096.cpp index 6e3f32b..b8320dc 100644 --- a/profiles/vcs/generated/generated_unit_0096.cpp +++ b/profiles/vcs/generated/generated_unit_0096.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0096[4090] = { - 1, 0, 0, 2, 0, 3, 0, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 10, - 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 18, 0, 19, 0, 20, 0, 0, 21, 0, 0, 0, - 0, 22, 0, 0, 23, 0, 0, 0, 24, 0, 25, 0, 0, 0, 26, 0, 27, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 31, 0, - 0, 32, 0, 0, 0, 33, 0, 0, 34, 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, 0, 39, 0, 0, 40, 0, 0, 41, - 0, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 0, 0, 45, 0, 46, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, - 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 52, 53, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 59, 0, 0, 60, 0, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 65, 0, 66, 0, 0, 67, 0, 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, - 72, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 75, 0, 0, 76, 0, 77, 78, 0, 79, 0, 80, 0, 0, 0, 81, 0, 82, 0, 83, 0, - 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, - 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, 93, 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 97, 98, 0, 0, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 101, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 106, 0, - 0, 107, 0, 108, 0, 0, 0, 109, 0, 110, 0, 0, 111, 112, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 116, 0, - 0, 117, 118, 0, 119, 0, 120, 0, 0, 121, 122, 0, 123, 0, 124, 0, 0, 125, 126, 0, 0, 0, 0, 127, 0, 0, 128, 0, 129, 0, 0, 130, - 131, 0, 132, 0, 133, 0, 0, 134, 135, 0, 136, 0, 0, 137, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 0, 143, 144, 0, 145, 0, 146, 0, - 0, 147, 148, 0, 149, 0, 0, 150, 151, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, - 0, 0, 0, 0, 154, 0, 155, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 160, 0, 0, 161, 0, 0, 162, 0, - 163, 0, 0, 164, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 169, 0, 0, 170, 0, 0, 0, - 171, 0, 0, 172, 0, 0, 173, 0, 174, 0, 175, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 182, 0, 0, 183, 0, 0, 0, 0, 184, 0, - 0, 185, 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 190, 191, 0, 0, 192, 0, 193, 0, 0, 194, 0, 195, 196, - 0, 197, 0, 198, 0, 0, 0, 199, 0, 200, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 205, 0, 0, 206, 0, - 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, 211, 0, 0, 212, 0, 0, 0, 0, 213, 0, - 214, 0, 0, 0, 0, 0, 215, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 219, 0, 0, 220, 0, 221, - 0, 0, 0, 222, 0, 223, 0, 0, 224, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, - 0, 0, 229, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 235, 0, 236, - 0, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 241, 0, 242, 243, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 247, 0, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 254, 0, 255, 0, 0, 256, 0, 257, 0, 258, 0, 0, 259, 0, 0, 0, 0, 0, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 264, 0, 265, 0, 0, 266, 267, 0, - 0, 268, 0, 269, 0, 0, 270, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 274, 0, 275, 0, 0, - 276, 0, 277, 0, 0, 278, 0, 279, 0, 0, 280, 0, 281, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 284, 0, 0, 285, 0, 0, 286, 0, - 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 288, 0, 289, 0, 0, 290, 0, 291, 0, 0, 292, 0, 0, 0, 293, 0, 294, 0, 0, - 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 299, 0, 300, 0, 0, - 301, 0, 0, 0, 0, 302, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 0, - 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 313, 0, 0, 314, 0, 315, 0, 0, 316, 0, 0, 317, 0, 318, 0, 0, 319, 0, 0, - 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, - 0, 0, 0, 0, 326, 0, 0, 327, 0, 328, 0, 0, 0, 329, 0, 0, 330, 0, 331, 0, 0, 332, 333, 0, 0, 0, 0, 0, 334, 0, 0, 0, - 335, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 339, 0, 0, 340, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, - 0, 0, 0, 0, 0, 343, 0, 0, 344, 0, 345, 0, 0, 0, 0, 0, 346, 347, 0, 0, 348, 0, 349, 0, 0, 350, 351, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 359, 0, - 360, 361, 0, 0, 362, 0, 363, 0, 0, 364, 0, 365, 366, 0, 0, 367, 0, 368, 0, 0, 369, 0, 370, 371, 0, 0, 372, 0, 373, 0, 0, 374, - 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 380, 0, 0, 381, 0, 382, 0, 0, 383, 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 0, - 389, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 393, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, - 397, 0, 0, 398, 0, 0, 0, 399, 0, 400, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 406, 0, 0, 407, 0, - 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 415, 0, - 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 418, 0, 419, 0, 0, 0, 420, 0, 0, 421, 0, 422, 0, 0, 423, 424, 0, - 0, 0, 0, 0, 425, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 430, 0, 0, 431, 0, 0, 432, - 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, - 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 443, 0, 444, 0, 0, 445, 0, 446, 0, 0, - 447, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 453, 0, 454, 0, - 0, 455, 0, 456, 0, 0, 457, 0, 0, 0, 0, 458, 0, 459, 0, 460, 0, 461, 0, 462, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 467, - 0, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 0, 472, 0, 473, 474, 0, 0, 0, 0, 475, 0, 0, 476, 0, - 0, 477, 0, 478, 479, 0, 0, 0, 480, 0, 0, 481, 0, 482, 483, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 485, 486, 0, 0, 0, 0, 0, - 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 488, 489, 0, 0, 0, 0, 0, 0, 490, 0, 491, 0, 0, 492, 493, 0, 494, 0, 495, 0, 0, 496, - 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 500, 501, 0, 0, 502, 0, 503, 0, 0, 504, 505, 0, 0, - 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 508, 0, 509, 510, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 513, 0, 0, - 514, 0, 0, 515, 0, 0, 0, 0, 516, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, 520, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 527, 0, 528, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 0, 0, - 0, 0, 0, 0, 0, 537, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 542, 0, 0, 0, 0, 543, 0, 544, 0, 0, 0, - 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, - 0, 0, 550, 0, 0, 551, 0, 552, 0, 0, 553, 0, 554, 0, 0, 555, 0, 556, 0, 0, 557, 0, 558, 0, 0, 0, 0, 0, 559, 0, 0, 0, - 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 566, 0, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 570, 0, - 571, 0, 572, 0, 0, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, - 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, - 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, - 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 590, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 600, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, - 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 608, 0, 0, - 0, 0, 609, 610, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 617, 0, 618, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 621, - 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 627, 0, 0, 0, 0, 628, 0, 0, 629, 0, 630, 0, 631, 0, 0, 0, 632, 0, 0, 633, 0, 0, - 0, 634, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, - 0, 647, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 650, 0, 0, 651, 0, 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, 654, - 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 658, 659, 0, 0, 660, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, - 0, 0, 663, 0, 0, 664, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 668, 0, 669, 0, 670, 0, 671, 672, 0, 0, 0, 0, 0, - 673, 0, 674, 0, 0, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 680, 0, 0, 681, 0, 682, 0, 683, 0, 684, 0, 685, 0, 0, 0, 686, 0, - 687, 0, 688, 0, 689, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, - 0, 0, 0, 0, 693, 0, 0, 0, 694, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 699, 0, 0, 700, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 0, 0, 706, 0, 0, 0, 0, 707, 0, 708, 0, 0, - 0, 0, 709, 0, 710, 711, 0, 0, 0, 0, 712, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 715, - 0, 0, 0, 716, 0, 0, 717, 0, 0, 0, 0, 718, 0, 719, 0, 0, 720, 0, 0, 0, 0, 721, 0, 722, 0, 0, 0, 0, 723, 0, 724, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, - 0, 728, 0, 729, 0, 730, 0, 731, 732, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 734, 0, 735, 0, 736, 0, 737, 0, 0, 738, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, - 0, 0, 0, 742, 0, 743, 0, 744, 0, 0, 0, 745, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 747, 0, 0, 748, 0, 749, 750, 0, 751, - 0, 0, 0, 0, 0, 0, 752, 0, 753, 0, 754, 755, 0, 756, 0, 757, 758, 0, 759, 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 0, 0, 762, - 0, 763, 0, 764, 0, 765, 0, 0, 0, 0, 0, 766, 0, 767, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 770, 0, 0, 0, - 0, 0, 0, 771, 0, 0, 0, 0, 0, 772, 0, 773, 0, 774, 775, 0, 0, 776, 0, 0, 777, 0, 778, 0, 0, 0, 0, 779, 0, 0, 780, 0, - 0, 781, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 783, 0, 784, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, - 787, 0, 788, 0, 789, 0, 790, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 793, 0, 0, 0, 794, 0, 0, 0, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 800, 0, 0, 0, 0, 0, - 801, 0, 0, 802, 0, 0, 0, 0, 803, 0, 804, 0, 805, 0, 806, 0, 0, 0, 807, 0, 0, 0, 0, 0, 0, 808, 0, 809, 0, 0, 0, 810, - 0, 811, 0, 812, 0, 813, 0, 814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 815, 0, 816, 0, - 0, 0, 817, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, 0, 819, 0, 0, 0, 820, 0, 0, 0, 0, 821, 0, 822, 0, 823, 0, 824, 0, 0, - 0, 825, 0, 0, 0, 0, 0, 826, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 830, 0, 0, - 0, 831, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 836, 0, 0, 0, 837, 0, 838, - 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 841, 0, 842, 0, 0, 843, 844, 0, 0, 0, 0, 0, 0, 0, 845, 0, - 0, 0, 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 848, 0, 849, 0, 850, 0, 851, 0, 852, 0, 853, 0, 854, 0, 855, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, 857, 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 859, 0, 0, - 860, 0, 0, 0, 0, 0, 0, 861, 0, 862, 0, 0, 0, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, - 865, 0, 866, 0, 0, 0, 867, 0, 0, 0, 868, 0, 0, 0, 0, 869, 870, 871, 0, 0, 0, 872, 0, 0, 0, 873, 0, 0, 874, 0, 0, 875, - 0, 0, 0, 0, 876, 0, 0, 877, 878, 0, 0, 0, 0, 879, 0, 0, 0, 880, 0, 881, 0, 882, 0, 0, 883, 0, 0, 0, 0, 0, 0, 884, - 0, 0, 0, 0, 885, 0, 886, 0, 0, 887, 0, 0, 888, 0, 0, 889, 0, 890, 0, 891, 0, 892, 0, 0, 893, 0, 894, 0, 895, 0, 896, 0, - 0, 897, 0, 898, 0, 899, 0, 900, 0, 901, 0, 0, 902, 0, 903, 0, 904, 0, 0, 905, 0, 0, 906, 0, 0, 0, 0, 907, 0, 0, 908, 909, - 0, 0, 0, 0, 910, 0, 0, 0, 911, 0, 912, 0, 913, 0, 0, 914, 0, 0, 0, 0, 0, 0, 915, 0, 916, 0, 0, 917, 0, 0, 918, 0, - 919, 0, 920, 0, 921, 0, 922, 0, 0, 923, 0, 924, 0, 925, 0, 0, 926, 0, 927, 0, 928, 0, 0, 929, 0, 930, 0, 931, 0, 932, 933, 0, - 934, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, 938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, 941, 0, 942, 0, 0, 0, 0, 943, 0, 0, 944, 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 948, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, 0, 951, 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 953, 0, 0, 954, 0, 0, 0, 0, 0, 955, 0, 0, 0, 0, 0, 0, 0, 0, 956, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 957, 0, 0, 958, 0, 0, 0, 0, 0, 0, 959, 0, 0, 960, 0, 0, 0, 0, 0, 961, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, 0, 0, 963, 0, 0, 0, 0, 964, 0, 965, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0096[64] = { + 0x12A5514484289129ull, 0x9224892248454512ull, 0x001708041048A248ull, 0x21010A5020A92A01ull, + 0x40A0481054569281ull, 0x48809A0419452440ull, 0x948656565208328Aull, 0x1000059656556595ull, + 0x128800A9494204D0ull, 0x4240800020922549ull, 0x4D010A8AD29A4142ull, 0xA488024142508021ull, + 0xA490810421010328ull, 0x0014A490004D4910ull, 0x6524020104A94480ull, 0x490494A5284020CAull, + 0x290020502894A020ull, 0x25252481224A04A1ull, 0x1065229008520810ull, 0x0653052010929009ull, + 0x94D29A5348204891ull, 0x2481065200148042ull, 0x4A24928924A24021ull, 0x6522900852081092ull, + 0x0400041092900910ull, 0x2949008042000402ull, 0xA49AA84A54820043ull, 0x0604691A48682A10ull, + 0x329A402095940C04ull, 0x1140210920968408ull, 0x2880004000280440ull, 0x142502A015528200ull, + 0x105294A481020024ull, 0x404002900A810402ull, 0x8008200208008285ull, 0x0500104000040020ull, + 0x01041000820C0041ull, 0x10010400820020A0ull, 0x0001002C20828010ull, 0x245486AA890A5005ull, + 0xA029040AAAAA052Aull, 0x06A920A44204D404ull, 0x200001354554AAA5ull, 0x0022480400080510ull, + 0x8400443428428820ull, 0x4001100050A12848ull, 0x8000440012A881AAull, 0x8905AD40B48108A8ull, + 0x48526A081202282Aull, 0x0040025508015022ull, 0x8A0455090500AA11ull, 0x2A844804500000AAull, + 0xA228110220440882ull, 0x0000002040650804ull, 0x0000000000000000ull, 0x5555400000000000ull, + 0x08010281200C1000ull, 0x812A219092238445ull, 0xC84952AA552A9250ull, 0x6A952A5549409510ull, + 0x8003000200000041ull, 0x5008000004242C00ull, 0x4020900000A04200ull, 0x0284800082409000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0096[64] = { + 1u, 22u, 42u, 56u, 72u, 90u, 107u, 131u, 154u, 171u, 185u, 207u, 222u, 237u, 252u, 268u, + 287u, 301u, 320u, 335u, 352u, 375u, 389u, 408u, 425u, 436u, 447u, 468u, 487u, 506u, 521u, 529u, + 545u, 560u, 571u, 581u, 587u, 596u, 604u, 613u, 634u, 655u, 673u, 693u, 702u, 716u, 728u, 742u, + 763u, 781u, 793u, 811u, 825u, 839u, 847u, 847u, 856u, 865u, 885u, 910u, 934u, 940u, 949u, 957u, }; void recomp_unit_0096_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0096_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08984004u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0096[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0096[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0096[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08984004; @@ -1191,7 +1098,6 @@ L_08984058: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0898414C; } @@ -1230,7 +1136,6 @@ L_089840A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (0u | 120u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_0898414C; } @@ -1255,7 +1160,6 @@ L_089840C4: L_089840CC: aot_gpr_6 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089842CC; } @@ -1312,7 +1216,6 @@ L_0898412C: aot_gpr_6 = (aot_gpr_5 + ctx.gpr[16]); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08984144; } @@ -1320,7 +1223,6 @@ L_0898412C: } L_0898413C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089842CC; } @@ -1328,7 +1230,6 @@ L_0898413C: } L_08984144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089840BC; } @@ -1364,7 +1265,6 @@ L_08984170: L_0898417C: aot_gpr_4 = (0u | 60u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089841A4; } @@ -1389,7 +1289,6 @@ L_08984198: L_089841A4: aot_gpr_4 = (0u | 62u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089841CC; } @@ -1414,7 +1313,6 @@ L_089841C0: L_089841CC: aot_gpr_4 = (0u | 34u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089841F4; } @@ -1439,7 +1337,6 @@ L_089841E8: L_089841F4: aot_gpr_4 = (0u | 39u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0898421C; } @@ -1464,7 +1361,6 @@ L_08984210: L_0898421C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898425C; } @@ -1578,7 +1474,17 @@ L_089842D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984304: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1600,7 +1506,6 @@ L_08984328: goto L_08984330; L_08984330: aot_gpr_31 = (0x08984338u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0174_entry, 174u, 468u, 0x08ABE29Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08984338u) goto L_08984338; AOT_REGCACHE_SYNC_OUT(); return; L_08984338: @@ -1645,7 +1550,17 @@ L_08984360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984378: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1667,7 +1582,6 @@ L_08984394: L_0898439C: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089843B0; } @@ -1690,7 +1604,17 @@ L_089843B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089843C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1739,7 +1663,6 @@ L_08984404: AOT_REGCACHE_SYNC_OUT(); return; L_08984420: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089843F8; } @@ -1748,7 +1671,6 @@ L_08984420: L_08984428: aot_gpr_4 = (aot_gpr_17 + static_cast(32)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08984454; } @@ -1763,7 +1685,6 @@ L_08984434: goto L_08984440; L_08984440: aot_gpr_31 = (0x08984448u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08984448u) goto L_08984448; AOT_REGCACHE_SYNC_OUT(); return; L_08984448: @@ -1789,7 +1710,6 @@ L_0898445C: goto L_0898446C; L_0898446C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898447C; } @@ -1813,7 +1733,17 @@ L_0898447C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984494: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1850,7 +1780,6 @@ L_089844BC: AOT_REGCACHE_SYNC_OUT(); return; L_089844D8: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_089844B0; } @@ -1870,7 +1799,17 @@ L_089844E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089844FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[18]); @@ -1909,7 +1848,6 @@ L_08984538: } L_08984544: aot_gpr_31 = (0x0898454Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898454Cu) goto L_0898454C; AOT_REGCACHE_SYNC_OUT(); return; L_0898454C: @@ -1933,7 +1871,6 @@ L_0898455C: L_08984564: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(48))); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0898451C; } @@ -1955,7 +1892,17 @@ L_08984574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898458C: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(16), aot_gpr_4); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); @@ -1963,7 +1910,6 @@ L_0898458C: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(44), aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089845B0; } @@ -1987,7 +1933,17 @@ L_089845B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089845C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[18]); @@ -2026,7 +1982,6 @@ L_089845FC: } L_08984608: aot_gpr_31 = (0x08984610u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08984610u) goto L_08984610; AOT_REGCACHE_SYNC_OUT(); return; L_08984610: @@ -2050,7 +2005,6 @@ L_08984620: L_08984628: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(48))); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089845E0; } @@ -2072,7 +2026,17 @@ L_08984638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, aot_gpr_31}; @@ -2100,7 +2064,6 @@ L_08984674: L_0898467C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0898468C; } @@ -2111,7 +2074,6 @@ L_08984688: goto L_0898468C; L_0898468C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089846B4; } @@ -2128,7 +2090,6 @@ L_08984694: L_0898469C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089846AC; } @@ -2139,7 +2100,6 @@ L_089846A8: goto L_089846AC; L_089846AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089846CC; } @@ -2152,7 +2112,6 @@ L_089846B4: L_089846BC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08984674; } @@ -2173,7 +2132,17 @@ L_089846CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089846E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; @@ -2194,7 +2163,6 @@ L_089846EC: L_089846F4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_08984704; } @@ -2205,7 +2173,6 @@ L_08984700: goto L_08984704; L_08984704: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0898472C; } @@ -2222,7 +2189,6 @@ L_0898470C: L_08984714: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08984724; } @@ -2233,7 +2199,6 @@ L_08984720: goto L_08984724; L_08984724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898473C; } @@ -2242,7 +2207,6 @@ L_08984724: L_0898472C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089846EC; } @@ -2253,21 +2217,39 @@ L_08984738: goto L_0898473C; L_0898473C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984744: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898474C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089847A0; } @@ -2284,7 +2266,6 @@ L_08984754: L_0898475C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0898476C; } @@ -2295,7 +2276,6 @@ L_08984768: goto L_0898476C; L_0898476C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08984794; } @@ -2312,7 +2292,6 @@ L_08984774: L_0898477C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898478C; } @@ -2323,7 +2302,6 @@ L_08984788: goto L_0898478C; L_0898478C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089847A4; } @@ -2332,7 +2310,6 @@ L_0898478C: L_08984794: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08984754; } @@ -2343,11 +2320,20 @@ L_089847A0: goto L_089847A4; L_089847A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089847AC: aot_gpr_6 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_6); @@ -2368,7 +2354,17 @@ L_089847AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089847F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -2414,7 +2410,17 @@ L_0898482C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984848: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (ctx.gpr[2] + static_cast(32)); @@ -2455,7 +2461,6 @@ L_0898487C: L_08984884: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08984898; } @@ -2471,11 +2476,20 @@ L_08984890: } L_08984898: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089848A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2533,7 +2547,6 @@ L_08984910: AOT_REGCACHE_SYNC_OUT(); return; L_0898491C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08984960; } @@ -2582,7 +2595,17 @@ L_08984960: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984978: aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), aot_gpr_5); @@ -2605,7 +2628,17 @@ L_08984978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089849C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2682,7 +2715,6 @@ L_08984A3C: goto L_08984A48; L_08984A48: aot_gpr_31 = (0x08984A50u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08984A50u) goto L_08984A50; AOT_REGCACHE_SYNC_OUT(); return; L_08984A50: @@ -2695,7 +2727,6 @@ L_08984A54: goto L_08984A60; L_08984A60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08984A88; } @@ -2710,7 +2741,6 @@ L_08984A68: goto L_08984A74; L_08984A74: aot_gpr_31 = (0x08984A7Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08984A7Cu) goto L_08984A7C; AOT_REGCACHE_SYNC_OUT(); return; L_08984A7C: @@ -2736,7 +2766,6 @@ L_08984A90: goto L_08984AA0; L_08984AA0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08984AB0; } @@ -2759,7 +2788,17 @@ L_08984AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984AC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); @@ -2823,13 +2862,22 @@ L_08984B18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984B40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08984B68; } @@ -2846,7 +2894,6 @@ L_08984B54: L_08984B5C: ctx.gpr[7] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_08984B54; } @@ -2862,7 +2909,6 @@ L_08984B68: AOT_REGCACHE_SYNC_OUT(); return; L_08984B7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08984B9C; } @@ -2883,7 +2929,17 @@ L_08984B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984BA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[19]); @@ -2924,7 +2980,6 @@ L_08984BEC: } L_08984BF8: aot_gpr_31 = (0x08984C00u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08984C00u) goto L_08984C00; AOT_REGCACHE_SYNC_OUT(); return; L_08984C00: @@ -2948,7 +3003,6 @@ L_08984C10: L_08984C18: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_17; - // nop if (branch_taken) { goto L_08984BD0; } @@ -2971,7 +3025,17 @@ L_08984C28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984C44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3010,7 +3074,17 @@ L_08984C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984CA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3044,7 +3118,6 @@ L_08984CE0: L_08984CEC: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08984D00; } @@ -3067,7 +3140,17 @@ L_08984D00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3077,7 +3160,6 @@ L_08984D14: L_08984D24: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08984D4C; } @@ -3102,7 +3184,6 @@ L_08984D3C: } L_08984D44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08984D50; } @@ -3118,7 +3199,17 @@ L_08984D50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3136,7 +3227,6 @@ L_08984D5C: L_08984D94: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08984DC0; } @@ -3159,7 +3249,6 @@ L_08984DAC: } L_08984DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08984E3C; } @@ -3173,7 +3262,6 @@ L_08984DC0: AOT_REGCACHE_SYNC_OUT(); return; L_08984DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08984E84; } @@ -3215,7 +3303,6 @@ L_08984E2C: goto L_08984E3C; L_08984E3C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08984E58; } @@ -3228,7 +3315,6 @@ L_08984E44: goto L_08984AC4; L_08984E50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08984E84; } @@ -3241,7 +3327,6 @@ L_08984E58: L_08984E60: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08984E84; } @@ -3272,7 +3357,17 @@ L_08984E84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3288,7 +3383,6 @@ L_08984EA8: L_08984ECC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08984EFC; } @@ -3322,7 +3416,6 @@ L_08984EF8: L_08984EFC: aot_gpr_4 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08984F10; } @@ -3357,7 +3450,17 @@ L_08984F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08984F38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3430,7 +3533,6 @@ L_08984FAC: L_08984FB4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08984F78; } @@ -3439,7 +3541,6 @@ L_08984FB4: L_08984FC0: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(24))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08984FFC; } @@ -3464,7 +3565,6 @@ L_08984FE4: L_08984FF0: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(48))); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08984FCC; } @@ -3484,7 +3584,17 @@ L_08984FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985018: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3505,7 +3615,6 @@ L_08985040: goto L_0898504C; L_0898504C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898509C; } @@ -3526,7 +3635,6 @@ L_08985060: goto L_08984B40; L_08985070: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08985094; } @@ -3566,7 +3674,17 @@ L_0898509C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089850B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3645,7 +3763,6 @@ L_08985148: L_08985150: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08985120; } @@ -3654,7 +3771,6 @@ L_08985150: L_0898515C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089851EC; } @@ -3670,7 +3786,6 @@ L_08985168: L_08985178: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(24))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089851AC; } @@ -3691,7 +3806,6 @@ L_08985184: L_089851A0: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08985184; } @@ -3732,7 +3846,6 @@ L_089851D8: AOT_REGCACHE_SYNC_OUT(); return; L_089851E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089851F8; } @@ -3758,7 +3871,17 @@ L_089851F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985214: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3783,7 +3906,6 @@ L_08985230: L_08985248: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898525C; } @@ -3806,7 +3928,17 @@ L_0898525C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985270: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3841,7 +3973,6 @@ L_089852A8: L_089852B8: aot_gpr_4 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089852CC; } @@ -3876,12 +4007,21 @@ L_089852DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089852F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08985304u); - // nop goto L_089847F4; L_08985304: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -3890,7 +4030,17 @@ L_08985304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3942,7 +4092,17 @@ L_08985360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985374: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3983,7 +4143,6 @@ L_089853C4: L_089853C8: aot_gpr_4 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089853DC; } @@ -4018,12 +4177,21 @@ L_089853EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985404: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08985414u); - // nop goto L_089847F4; L_08985414: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4032,7 +4200,17 @@ L_08985414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4047,7 +4225,17 @@ L_08985430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898543C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -4082,7 +4270,6 @@ L_08985470: goto L_0898547C; L_0898547C: aot_gpr_31 = (0x08985484u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08985484u) goto L_08985484; AOT_REGCACHE_SYNC_OUT(); return; L_08985484: @@ -4110,7 +4297,6 @@ L_0898549C: goto L_089854A8; L_089854A8: aot_gpr_31 = (0x089854B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089854B0u) goto L_089854B0; AOT_REGCACHE_SYNC_OUT(); return; L_089854B0: @@ -4138,7 +4324,6 @@ L_089854C8: goto L_089854D4; L_089854D4: aot_gpr_31 = (0x089854DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089854DCu) goto L_089854DC; AOT_REGCACHE_SYNC_OUT(); return; L_089854DC: @@ -4156,7 +4341,6 @@ L_089854EC: L_089854F4: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08985508; } @@ -4179,7 +4363,17 @@ L_08985508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898551C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4223,7 +4417,6 @@ L_08985554: L_08985588: aot_gpr_4 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898559C; } @@ -4258,7 +4451,17 @@ L_089855AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089855C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4298,7 +4501,17 @@ L_08985604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985618: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4328,7 +4541,6 @@ L_08985648: goto L_08985658; L_08985658: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08985684; } @@ -4369,7 +4581,6 @@ L_08985690: goto L_089856A0; L_089856A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089856CC; } @@ -4410,7 +4621,6 @@ L_089856D8: goto L_089856E8; L_089856E8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08985714; } @@ -4452,7 +4662,17 @@ L_08985720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985734: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -4477,7 +4697,6 @@ L_08985750: L_08985768: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898577C; } @@ -4500,7 +4719,17 @@ L_0898577C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4535,7 +4764,6 @@ L_089857C8: L_089857D8: aot_gpr_4 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089857EC; } @@ -4570,12 +4798,21 @@ L_089857FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985814: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08985824u); - // nop goto L_089847F4; L_08985824: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4584,7 +4821,17 @@ L_08985824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985830: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4636,7 +4883,17 @@ L_08985880: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985894: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4675,7 +4932,17 @@ L_089858EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985908: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4729,7 +4996,17 @@ L_0898597C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089859A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4757,7 +5034,6 @@ L_089859D0: goto L_08985A1C; L_089859DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089859F8; } @@ -4796,7 +5072,17 @@ L_08985A08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985A1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -4842,7 +5128,6 @@ L_08985A74: L_08985A7C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08985BCC; } @@ -4856,7 +5141,6 @@ L_08985A88: L_08985A90: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08985AB8; } @@ -4989,7 +5273,6 @@ L_08985B5C: L_08985B70: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08985BA4; } @@ -5066,7 +5349,17 @@ L_08985BEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985C0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5107,7 +5400,6 @@ L_08985C4C: L_08985C54: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); { const bool branch_taken = aot_gpr_5 != aot_gpr_17; - // nop if (branch_taken) { goto L_08985C64; } @@ -5118,7 +5410,6 @@ L_08985C60: goto L_08985C64; L_08985C64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08985C74; } @@ -5126,7 +5417,6 @@ L_08985C64: } L_08985C6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08985C80; } @@ -5135,7 +5425,6 @@ L_08985C6C: L_08985C74: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(48))); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08985C30; } @@ -5154,7 +5443,17 @@ L_08985C80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985C98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5170,7 +5469,6 @@ L_08985C98: L_08985CBC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08985CD4; } @@ -5186,7 +5484,6 @@ L_08985CD0: L_08985CD4: aot_gpr_4 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08985CE8; } @@ -5221,7 +5518,17 @@ L_08985CF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985D10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5255,13 +5562,11 @@ L_08985D48: goto L_08985D4C; L_08985D4C: aot_gpr_31 = (0x08985D54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0121_entry, 121u, 141u, 0x089E8D0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08985D54u) goto L_08985D54; AOT_REGCACHE_SYNC_OUT(); return; L_08985D54: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(24))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08985D90; } @@ -5286,7 +5591,6 @@ L_08985D78: L_08985D84: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(48))); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08985D60; } @@ -5304,7 +5608,17 @@ L_08985D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985DA4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16388))); aot_gpr_4 = (2247u << 16u); @@ -5321,7 +5635,6 @@ L_08985DB8: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[8] = (static_cast(aot_gpr_5) < 36 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08985DB8; } @@ -5329,11 +5642,20 @@ L_08985DB8: } L_08985DDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985DE4: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(23772), static_cast(0u)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(23773), static_cast(0u)); @@ -5350,7 +5672,6 @@ L_08985DF4: aot_gpr_6 = (aot_gpr_6 & 255u); aot_gpr_5 = (static_cast(aot_gpr_6) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08985DF4; } @@ -5371,7 +5692,6 @@ L_08985E2C: aot_gpr_6 = (aot_gpr_6 & 255u); ctx.gpr[7] = (static_cast(aot_gpr_6) < 20 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08985E2C; } @@ -5379,11 +5699,20 @@ L_08985E2C: } L_08985E50: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985E58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5432,14 +5761,34 @@ L_08985EE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985EF0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16399))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08985EF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -5463,7 +5812,6 @@ L_08985F28: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1400))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08985F5C; } @@ -5471,13 +5819,11 @@ L_08985F28: } L_08985F40: aot_gpr_31 = (0x08985F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08985F48u) goto L_08985F48; AOT_REGCACHE_SYNC_OUT(); return; L_08985F48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08985F64; } @@ -5485,7 +5831,6 @@ L_08985F48: } L_08985F54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986048; } @@ -5493,7 +5838,6 @@ L_08985F54: } L_08985F5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986048; } @@ -5509,7 +5853,6 @@ L_08985F64: } L_08985F6C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08986048; } @@ -5524,7 +5867,6 @@ L_08985F74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08985FA0; } @@ -5540,7 +5882,6 @@ L_08985F98: } L_08985FA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986048; } @@ -5553,7 +5894,6 @@ L_08985FA8: aot_gpr_4 = (ctx.gpr[18] + aot_gpr_4); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(23776))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08985FCC; } @@ -5570,7 +5910,6 @@ L_08985FC4: L_08985FCC: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(23776))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_17; - // nop if (branch_taken) { goto L_08985FF4; } @@ -5581,7 +5920,6 @@ L_08985FD8: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_4 = (static_cast(aot_gpr_5) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08985FA8; } @@ -5589,7 +5927,6 @@ L_08985FD8: } L_08985FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898600C; } @@ -5612,7 +5949,6 @@ L_08985FF4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(23808), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986048; } @@ -5621,7 +5957,6 @@ L_08985FF4: L_0898600C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08986048; } @@ -5666,7 +6001,17 @@ L_08986048: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986064: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -5696,7 +6041,6 @@ L_0898608C: AOT_REGCACHE_SYNC_OUT(); return; L_08986098: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089860D4; } @@ -5710,7 +6054,6 @@ L_089860A0: AOT_REGCACHE_SYNC_OUT(); return; L_089860AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089860D4; } @@ -5724,7 +6067,6 @@ L_089860B4: AOT_REGCACHE_SYNC_OUT(); return; L_089860C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089860D4; } @@ -5760,7 +6102,17 @@ L_089860F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986108: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -5782,7 +6134,6 @@ L_0898612C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1400))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08986168; } @@ -5795,7 +6146,6 @@ L_08986144: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08986170; } @@ -5803,7 +6153,6 @@ L_08986144: } L_08986160: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986648; } @@ -5811,7 +6160,6 @@ L_08986160: } L_08986168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986648; } @@ -5850,7 +6198,6 @@ L_08986194: } L_089861A0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08986648; } @@ -5879,7 +6226,6 @@ L_089861DC: ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(4))); ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0898620C; } @@ -5887,7 +6233,6 @@ L_089861DC: } L_089861FC: { const bool branch_taken = ctx.gpr[11] != ctx.gpr[3]; - // nop if (branch_taken) { goto L_0898620C; } @@ -5906,7 +6251,6 @@ L_0898620C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (static_cast(aot_gpr_5) < 36 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089861DC; } @@ -5914,7 +6258,6 @@ L_0898620C: } L_08986220: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08986648; } @@ -5926,7 +6269,6 @@ L_08986228: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08986270; } @@ -5952,7 +6294,6 @@ L_08986270: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089862B8; } @@ -5978,7 +6319,6 @@ L_089862B8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08986300; } @@ -6041,7 +6381,6 @@ L_0898634C: ctx.fpr[0] = aot_fpr_13 + aot_fpr_15; { const float fs = aot_fpr_14; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; if (branch_taken) { @@ -6055,7 +6394,6 @@ L_0898639C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089863E4; } @@ -6087,9 +6425,7 @@ L_089863EC: aot_fpr_13 = aot_fpr_13 - aot_fpr_15; ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08986450; } @@ -6101,7 +6437,6 @@ L_08986404: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898644C; } @@ -6128,9 +6463,7 @@ L_08986450: aot_fpr_13 = aot_fpr_12 + aot_fpr_14; aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089864B4; } @@ -6142,7 +6475,6 @@ L_08986468: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08986568; } @@ -6171,9 +6503,7 @@ L_089864B4: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08986518; } @@ -6185,7 +6515,6 @@ L_089864CC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08986568; } @@ -6212,7 +6541,6 @@ L_089864E4: } L_08986518: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08986568; } @@ -6224,7 +6552,6 @@ L_08986520: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08986568; } @@ -6250,7 +6577,6 @@ L_08986568: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089865AC; } @@ -6275,7 +6601,6 @@ L_089865AC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089865F4; } @@ -6303,7 +6628,6 @@ L_089865F4: aot_gpr_5 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08986640; } @@ -6339,7 +6663,17 @@ L_08986648: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986660: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16352))); aot_gpr_4 = (aot_gpr_4 + static_cast(6028)); @@ -6350,7 +6684,17 @@ L_08986660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986678: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16324))); aot_gpr_5 = (0u | 7u); @@ -6367,11 +6711,20 @@ L_0898668C: goto L_08986690; L_08986690: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986698: ctx.gpr[8] = (2237u << 16u); aot_gpr_6 = (2246u << 16u); @@ -6409,11 +6762,20 @@ L_089866C4: } L_08986704: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898670C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_5 = (2232u << 16u); @@ -6434,7 +6796,6 @@ L_08986734: L_0898673C: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08986798; } @@ -6471,7 +6832,6 @@ L_08986770: AOT_REGCACHE_SYNC_OUT(); return; L_08986780: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089867A0; } @@ -6521,7 +6881,17 @@ L_089867AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089867C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16328))); { const bool branch_taken = aot_gpr_4 == 0u; @@ -6533,7 +6903,6 @@ L_089867C0: } L_089867CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089867D4; } @@ -6541,11 +6910,20 @@ L_089867CC: } L_089867D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089867DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6559,7 +6937,17 @@ L_089867EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089867F8: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16340))); aot_gpr_6 = (static_cast(aot_gpr_4) < 68 ? 1u : 0u); @@ -6572,7 +6960,6 @@ L_089867F8: } L_08986808: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08986888; } @@ -6589,7 +6976,6 @@ L_08986810: L_08986818: ctx.gpr[2] = (0u | 2u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08986860; } @@ -6597,7 +6983,6 @@ L_08986818: } L_08986824: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08986858; } @@ -6610,7 +6995,6 @@ L_0898682C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); ctx.gpr[2] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08986850; } @@ -6618,7 +7002,6 @@ L_0898682C: } L_08986848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986888; } @@ -6642,7 +7025,6 @@ L_08986858: } L_08986860: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08986880; } @@ -6650,7 +7032,6 @@ L_08986860: } L_08986868: { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_08986878; } @@ -6658,7 +7039,6 @@ L_08986868: } L_08986870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986888; } @@ -6682,11 +7062,20 @@ L_08986880: } L_08986888: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986890: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -6706,7 +7095,6 @@ L_089868AC: ctx.gpr[8] = (0u + static_cast(-1)); aot_gpr_6 = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08986934; } @@ -6723,7 +7111,6 @@ L_089868C4: } L_089868D0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08986900; } @@ -6741,7 +7128,6 @@ L_089868D8: goto L_089871DC; L_089868F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898692C; } @@ -6750,7 +7136,6 @@ L_089868F8: L_08986900: aot_gpr_6 = (static_cast(aot_gpr_5) < 6027 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0898692C; } @@ -6792,7 +7177,17 @@ L_08986940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898694C: aot_gpr_5 = (2279u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(17408)); @@ -6804,13 +7199,22 @@ L_0898694C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986968: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16344))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08986A94; } @@ -6820,7 +7224,6 @@ L_0898697C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16340))); ctx.gpr[2] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_6 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08986A8C; } @@ -6829,7 +7232,6 @@ L_0898697C: L_0898698C: aot_gpr_6 = (static_cast(aot_gpr_4) < 68 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08986A84; } @@ -6837,7 +7239,6 @@ L_0898698C: } L_08986998: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08986A84; } @@ -6849,7 +7250,6 @@ L_089869A0: ctx.gpr[7] = (aot_gpr_4 + aot_gpr_6); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08986A7C; } @@ -6858,7 +7258,6 @@ L_089869A0: L_089869B8: ctx.gpr[7] = (0u | 255u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089869D8; } @@ -6875,7 +7274,6 @@ L_089869C4: } L_089869D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986A0C; } @@ -6891,7 +7289,6 @@ L_089869D8: } L_089869E0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08986A0C; } @@ -6906,7 +7303,6 @@ L_089869EC: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); ctx.gpr[7] = (static_cast(aot_gpr_5) < 40 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089869EC; } @@ -6914,7 +7310,6 @@ L_089869EC: } L_08986A04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986A6C; } @@ -6931,7 +7326,6 @@ L_08986A0C: } L_08986A18: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08986A30; } @@ -6947,7 +7341,6 @@ L_08986A20: } L_08986A28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986A6C; } @@ -6963,7 +7356,6 @@ L_08986A30: } L_08986A38: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08986A6C; } @@ -6972,7 +7364,6 @@ L_08986A38: L_08986A40: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16296))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08986A5C; } @@ -6980,7 +7371,6 @@ L_08986A40: } L_08986A4C: { const bool branch_taken = aot_gpr_5 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08986A64; } @@ -6988,7 +7378,6 @@ L_08986A4C: } L_08986A54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986A6C; } @@ -7022,7 +7411,6 @@ L_08986A7C: } L_08986A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986A98; } @@ -7046,7 +7434,17 @@ L_08986A98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986AA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_4 + aot_gpr_4); @@ -7091,14 +7489,34 @@ L_08986B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986B24: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986B2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -7108,7 +7526,17 @@ L_08986B2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08986B50: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(180), ctx.gpr[16]); @@ -7144,7 +7572,6 @@ L_08986BB0: L_08986BBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16336))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08986CBC; } @@ -7154,7 +7581,6 @@ L_08986BC8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16280))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08986CEC; } @@ -7199,7 +7625,6 @@ L_08986C30: AOT_REGCACHE_SYNC_OUT(); return; L_08986C40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08986C5C; } @@ -7223,7 +7648,6 @@ L_08986C5C: AOT_REGCACHE_SYNC_OUT(); return; L_08986C70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08986C98; } @@ -7292,7 +7716,6 @@ L_08986D00: ctx.gpr[23] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(176))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08986D58; } @@ -7301,7 +7724,6 @@ L_08986D00: L_08986D10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16336))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08986D30; } @@ -7354,7 +7776,6 @@ L_08986D60: goto L_08986D74; L_08986D74: { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08986E68; } @@ -7406,7 +7827,6 @@ L_08986DC4: L_08986DFC: ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08986E20; } @@ -7430,7 +7850,6 @@ L_08986E10: } L_08986E18: { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08986E24; } @@ -7477,7 +7896,6 @@ L_08986E60: L_08986E68: aot_gpr_5 = (0u | 67u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08986F20; } @@ -7584,7 +8002,6 @@ L_08986F60: } L_08986F6C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08986F78; } @@ -7623,7 +8040,6 @@ L_08986FAC: goto L_08986FB0; L_08986FB0: { const bool branch_taken = aot_gpr_17 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08986FC4; } @@ -7639,7 +8055,6 @@ L_08986FC0: goto L_08986FC4; L_08986FC4: { const bool branch_taken = aot_gpr_17 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08986FF0; } @@ -7682,7 +8097,6 @@ L_08987008: } L_08987010: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08987030; } @@ -7702,7 +8116,6 @@ L_08987018: } L_08987030: { const bool branch_taken = aot_gpr_17 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089870C8; } @@ -7712,7 +8125,6 @@ L_08987038: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16312))); aot_gpr_4 = (0u | 255u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08987068; } @@ -7735,7 +8147,6 @@ L_08987048: L_08987068: aot_gpr_4 = (aot_gpr_5 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089870BC; } @@ -7752,7 +8163,17 @@ L_08987074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987090: aot_gpr_6 = (2237u << 16u); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -7804,7 +8225,6 @@ L_089870C8: } L_089870D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089870FC; } @@ -7829,7 +8249,6 @@ L_089870F0: L_089870FC: aot_gpr_4 = (0u | 67u); { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898713C; } @@ -7839,7 +8258,6 @@ L_08987108: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16312))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08987134; } @@ -7878,7 +8296,6 @@ L_08987144: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-16336), ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08987194; } @@ -7903,7 +8320,6 @@ L_0898718C: goto L_08987194; L_08987194: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089871A8; } @@ -7935,7 +8351,17 @@ L_089871A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089871DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[18]); @@ -7945,7 +8371,6 @@ L_089871DC: { const std::uint32_t aot_run_words[3]{ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(20), aot_run_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08987214; } @@ -7955,7 +8380,6 @@ L_08987204: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16284))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987230; } @@ -7974,7 +8398,6 @@ L_08987214: } L_08987228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987238; } @@ -7990,7 +8413,6 @@ L_08987230: } L_08987238: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08987264; } @@ -8009,7 +8431,6 @@ L_08987240: goto L_08987264; L_08987264: { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_08987290; } @@ -8053,7 +8474,6 @@ L_089872AC: } L_089872B4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089872E8; } @@ -8063,7 +8483,6 @@ L_089872BC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16332))); aot_gpr_6 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089874D0; } @@ -8084,7 +8503,6 @@ L_089872CC: } L_089872E8: { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_089873B0; } @@ -8118,7 +8536,6 @@ L_08987308: } L_08987310: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089874D0; } @@ -8126,7 +8543,6 @@ L_08987310: } L_08987318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089874D0; } @@ -8161,7 +8577,6 @@ L_08987320: } L_08987374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089874D0; } @@ -8191,7 +8606,6 @@ L_0898738C: L_089873B0: aot_gpr_5 = (0u | 67u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089874D0; } @@ -8236,7 +8650,6 @@ L_089873E8: } L_089873F0: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089874A4; } @@ -8338,7 +8751,6 @@ L_089874B4: } L_089874D0: { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_08987500; } @@ -8348,7 +8760,6 @@ L_089874D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16312))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987500; } @@ -8362,7 +8773,6 @@ L_089874E8: goto L_08986B2C; L_089874F8: aot_gpr_31 = (0x08987500u); - // nop goto L_08986678; L_08987500: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[19]); @@ -8395,7 +8805,6 @@ L_08987530: AOT_REGCACHE_SYNC_OUT(); return; L_08987544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987558; } @@ -8424,7 +8833,17 @@ L_0898755C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898757C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8579,7 +8998,6 @@ L_08987598: goto L_0898670C; L_089877BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089877F4; } @@ -8587,11 +9005,9 @@ L_089877BC: } L_089877C4: aot_gpr_31 = (0x089877CCu); - // nop goto L_08986698; L_089877CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089877EC; } @@ -8599,11 +9015,9 @@ L_089877CC: } L_089877D4: aot_gpr_31 = (0x089877DCu); - // nop goto L_089867C0; L_089877DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089877FC; } @@ -8740,7 +9154,6 @@ L_089878F0: } L_08987904: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08987944; } @@ -8779,12 +9192,21 @@ L_08987948: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987958: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16320))); ctx.gpr[7] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08987AA0; } @@ -8793,7 +9215,6 @@ L_08987958: L_08987968: aot_gpr_6 = (0u | 255u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089879D8; } @@ -8802,7 +9223,6 @@ L_08987968: L_08987974: aot_gpr_5 = (static_cast(aot_gpr_4) < 5875 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089879C8; } @@ -8818,7 +9238,6 @@ L_08987980: L_08987994: aot_gpr_6 = (ctx.gpr[7] | 0u); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_089879A4; } @@ -8832,7 +9251,6 @@ L_089879A4: aot_gpr_6 = (aot_gpr_6 + aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_089879D0; } @@ -8867,7 +9285,6 @@ L_089879D0: L_089879D8: aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08987A1C; } @@ -8891,7 +9308,6 @@ L_08987A00: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(67))); ctx.gpr[2] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08987BF8; } @@ -8899,7 +9315,6 @@ L_08987A00: } L_08987A14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987BFC; } @@ -8917,7 +9332,6 @@ L_08987A1C: L_08987A28: aot_gpr_5 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08987A6C; } @@ -8926,7 +9340,6 @@ L_08987A28: L_08987A34: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16308))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987A74; } @@ -8950,7 +9363,6 @@ L_08987A48: } L_08987A50: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08987A6C; } @@ -8959,7 +9371,6 @@ L_08987A50: L_08987A58: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16300))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987A98; } @@ -8992,7 +9403,6 @@ L_08987A74: L_08987A7C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16304))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987A90; } @@ -9024,7 +9434,6 @@ L_08987A98: } L_08987AA0: { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08987AC4; } @@ -9033,7 +9442,6 @@ L_08987AA0: L_08987AA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16312))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987ABC; } @@ -9058,7 +9466,6 @@ L_08987ABC: L_08987AC4: aot_gpr_6 = (0u | 255u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08987B34; } @@ -9067,7 +9474,6 @@ L_08987AC4: L_08987AD0: aot_gpr_5 = (static_cast(aot_gpr_4) < 5875 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08987B24; } @@ -9083,7 +9489,6 @@ L_08987ADC: L_08987AF0: aot_gpr_6 = (ctx.gpr[7] | 0u); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_08987B00; } @@ -9097,7 +9502,6 @@ L_08987B00: aot_gpr_6 = (aot_gpr_6 + aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08987B2C; } @@ -9132,7 +9536,6 @@ L_08987B2C: L_08987B34: aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08987B64; } @@ -9145,7 +9548,6 @@ L_08987B40: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08987BF0; } @@ -9171,7 +9573,6 @@ L_08987B64: L_08987B70: aot_gpr_5 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08987BF0; } @@ -9179,7 +9580,6 @@ L_08987B70: } L_08987B7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987B9C; } @@ -9195,7 +9595,6 @@ L_08987B84: } L_08987B8C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08987BD4; } @@ -9203,7 +9602,6 @@ L_08987B8C: } L_08987B94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987BF0; } @@ -9212,7 +9610,6 @@ L_08987B94: L_08987B9C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16308))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08987BB0; } @@ -9220,7 +9617,6 @@ L_08987B9C: } L_08987BA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987BF0; } @@ -9237,7 +9633,6 @@ L_08987BB0: L_08987BB8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16304))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08987BCC; } @@ -9245,7 +9640,6 @@ L_08987BB8: } L_08987BC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08987BF0; } @@ -9262,7 +9656,6 @@ L_08987BCC: L_08987BD4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16300))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08987BE8; } @@ -9297,11 +9690,20 @@ L_08987BF8: goto L_08987BFC; L_08987BFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987C04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (ctx.gpr[28] + static_cast(7712)); @@ -9322,7 +9724,17 @@ L_08987C1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987C88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9352,7 +9764,6 @@ L_08987C88: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_6 | 0u); if (branch_taken) { @@ -9377,9 +9788,7 @@ L_08987CC8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(0), std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08987D2C; } @@ -9435,7 +9844,17 @@ L_08987D58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987D6C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); @@ -9462,11 +9881,20 @@ L_08987D6C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<64u>()); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987DD0: aot_gpr_6 = (aot_mem.aot_direct_load_word_right(aot_gpr_5 + static_cast(0), aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_5 + static_cast(3), aot_gpr_6)); @@ -9483,10 +9911,19 @@ L_08987DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987DF4: { const bool branch_taken = ctx.gpr[24] != 0u; - // nop if (branch_taken) { goto L_08987E28; } @@ -9503,17 +9940,25 @@ L_08987DFC: ctx.execute_vfpu_unary_ct<99u, 92u, 1u, 0u>(); ctx.execute_vfpu_unary_ct<99u, 99u, 1u, 2u>(); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987E28: ctx.execute_vfpu_unary_ct<67u, 67u, 1u, 2u>(); ctx.execute_vfpu_unary_ct<99u, 99u, 1u, 2u>(); ctx.gpr[1] = (0u + static_cast(1)); { const bool branch_taken = ctx.gpr[24] != ctx.gpr[1]; - // nop if (branch_taken) { goto L_08987E58; } @@ -9530,11 +9975,20 @@ L_08987E3C: goto L_08987E58; L_08987E58: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987E60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9577,7 +10031,17 @@ L_08987EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987ED8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(24), 0u); aot_fpr_12 = std::bit_cast(0u); @@ -9591,7 +10055,17 @@ L_08987ED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -9625,7 +10099,6 @@ L_08987F40: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08987F68; } @@ -9650,7 +10123,17 @@ L_08987F68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08987F80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -9705,7 +10188,17 @@ L_08987FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0097.cpp b/profiles/vcs/generated/generated_unit_0097.cpp index 4b4c61f..4f547a8 100644 --- a/profiles/vcs/generated/generated_unit_0097.cpp +++ b/profiles/vcs/generated/generated_unit_0097.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0097[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 9, 0, 10, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 18, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 21, 0, - 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 26, 0, 27, 0, 28, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 33, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 52, 53, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, - 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, - 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 80, 81, 0, 0, 0, 82, 0, 0, 83, 0, 0, 84, 0, 0, 0, 85, 0, - 86, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, - 90, 0, 91, 0, 0, 0, 92, 0, 0, 0, 93, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 96, 97, 0, 0, 98, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 103, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 108, 109, 0, 0, 0, 110, 0, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 114, 0, - 0, 0, 0, 0, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, 0, - 119, 0, 0, 0, 120, 0, 0, 0, 121, 0, 122, 0, 0, 123, 0, 0, 0, 0, 0, 0, 124, 125, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 130, 0, 131, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 0, 135, 0, - 0, 136, 0, 137, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 0, 141, 142, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, - 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 148, 0, 0, 149, 0, 150, 0, 151, 0, 152, 153, 0, 154, 0, 0, 155, 0, 0, 156, 0, 157, 158, - 159, 0, 0, 160, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 166, 0, - 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, 0, 170, 0, 171, 0, 172, 0, 0, 0, 0, 173, 0, 174, 0, 0, 0, 0, 175, 0, - 176, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 183, 0, 184, 0, 0, 0, - 0, 185, 0, 186, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 203, 0, 204, 0, 205, 0, 206, 207, 0, - 208, 0, 0, 209, 0, 0, 210, 0, 211, 212, 213, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, - 218, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, - 0, 227, 0, 228, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 0, 231, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 235, 0, 236, - 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, - 248, 0, 249, 0, 250, 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 255, 0, 256, 0, 257, 0, - 258, 259, 0, 260, 0, 0, 261, 0, 0, 262, 0, 263, 264, 265, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 0, 0, 269, - 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, 0, 277, 0, 278, - 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 0, 285, 0, 286, 0, 0, 0, 0, - 287, 0, 288, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, 292, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, - 0, 299, 0, 300, 0, 301, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 307, 0, 308, 0, - 0, 309, 0, 0, 310, 0, 311, 312, 313, 0, 0, 314, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, - 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 319, 320, 0, 321, 0, 0, 322, 0, 0, 323, 0, 324, 325, 326, 0, 0, 327, 0, 0, - 0, 0, 0, 328, 329, 0, 0, 0, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 0, 336, 0, 337, 0, 0, 338, 0, 339, 0, 0, - 0, 340, 0, 341, 0, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 350, 0, 0, 351, 0, 0, 352, 0, 353, 354, 355, 0, 0, 356, 0, 0, - 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 359, 0, 360, 0, 361, 0, 362, 0, 0, 363, 0, 364, 365, 0, 366, 0, 0, 367, 0, 0, 368, 0, - 369, 370, 371, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 375, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 378, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 383, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 386, - 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 390, 0, 0, - 0, 391, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 395, 0, 396, 0, 0, 397, 0, 0, 398, 0, 399, 400, 401, 0, 0, 402, - 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 406, 0, 0, 0, 407, 0, 408, 0, 0, 0, 0, 409, 0, 410, 411, 0, - 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 416, 0, 417, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 421, 422, 423, 0, 0, 424, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, - 0, 427, 0, 428, 429, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, - 435, 0, 436, 0, 0, 437, 0, 0, 438, 0, 439, 440, 441, 0, 0, 442, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 445, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 450, 0, 451, 0, 0, 452, 0, - 0, 453, 0, 454, 455, 456, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, - 0, 0, 0, 0, 460, 0, 461, 462, 0, 463, 0, 0, 464, 0, 0, 465, 0, 466, 467, 468, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, - 0, 0, 0, 471, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 474, 0, 475, 476, 0, 477, - 0, 0, 478, 0, 0, 479, 0, 480, 481, 482, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 490, 0, 491, 0, 0, 492, 0, 0, 493, 0, 494, 495, 496, - 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 501, 502, 0, 503, 0, 0, 504, 0, 0, 505, 0, 506, 507, 508, 0, 0, 509, 0, 0, 0, - 0, 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 513, 0, 514, - 515, 0, 516, 0, 0, 517, 0, 0, 518, 0, 519, 520, 521, 0, 0, 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 525, 0, 0, 0, 0, 0, 526, - 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 530, 531, 0, 532, 0, 0, 533, 0, 0, - 534, 0, 535, 536, 537, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, - 0, 0, 0, 0, 0, 543, 0, 544, 545, 0, 546, 0, 0, 547, 0, 0, 548, 0, 549, 550, 551, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, - 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 558, 0, 559, 0, 0, 560, 0, 0, 561, 0, 562, - 563, 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, - 0, 570, 571, 0, 572, 0, 0, 573, 0, 0, 574, 0, 575, 576, 577, 0, 0, 578, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 582, 0, 583, 584, 0, 585, 0, 0, 586, 0, 0, 587, 0, 588, 589, 590, 0, 0, 591, 0, - 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 595, 0, 596, 597, 0, 598, 0, - 0, 599, 0, 0, 600, 0, 601, 602, 603, 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, - 0, 0, 0, 0, 0, 0, 608, 0, 609, 610, 0, 611, 0, 0, 612, 0, 0, 613, 0, 614, 615, 616, 0, 0, 617, 0, 0, 0, 0, 0, 0, 618, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 622, 0, 623, 0, 0, 624, 0, 0, 625, - 0, 626, 627, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, - 0, 0, 632, 0, 633, 634, 0, 635, 0, 0, 636, 0, 0, 637, 0, 638, 639, 640, 0, 0, 641, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 644, 0, 645, 646, 0, 647, 0, 0, 648, 0, 0, 649, 0, 650, 651, 652, - 0, 0, 653, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, 0, - 657, 658, 0, 659, 0, 0, 660, 0, 0, 661, 0, 662, 663, 664, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 668, 0, 669, 670, 0, 671, 0, 0, 672, 0, 0, 673, 0, 674, 675, 676, 0, 0, 677, 0, - 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 682, 0, 683, - 0, 0, 684, 0, 0, 685, 0, 686, 687, 688, 0, 0, 689, 0, 0, 0, 0, 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 695, 696, 0, 697, 0, 0, 698, 0, 0, 699, 0, 700, 701, 702, - 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 706, 0, 707, 708, - 0, 709, 0, 0, 710, 0, 0, 711, 0, 712, 713, 714, 0, 0, 715, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 717, 0, 0, 0, 0, 0, 0, 0, 718, 0, 719, 720, 0, 721, 0, 0, 722, 0, 0, 723, 0, 724, 725, 726, 0, 0, 727, 0, 0, 0, 0, 0, - 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 731, 0, 732, 0, 0, 733, 0, - 734, 0, 0, 735, 0, 736, 0, 737, 0, 0, 738, 0, 739, 0, 740, 0, 0, 741, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, 0, 0, 746, 0, 0, 747, 0, 748, 749, 0, 750, 0, 0, 751, 0, 0, 752, 0, 753, - 754, 755, 0, 0, 756, 0, 0, 0, 0, 0, 757, 0, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, - 0, 0, 0, 0, 761, 0, 762, 763, 0, 764, 0, 0, 765, 0, 0, 766, 0, 767, 768, 769, 0, 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 773, 0, 774, 0, 0, 775, 0, 0, 0, 0, 0, 0, 776, 0, 777, 0, 0, 778, 779, 0, 0, 780, - 0, 781, 0, 0, 782, 0, 783, 0, 784, 0, 0, 785, 0, 786, 0, 787, 0, 0, 788, 0, 789, 0, 790, 0, 0, 791, 0, 792, 0, 793, 0, 0, - 794, 0, 795, 0, 796, 0, 0, 797, 0, 798, 0, 799, 0, 0, 800, 0, 801, 0, 802, 0, 0, 803, 0, 804, 0, 805, 0, 0, 806, 0, 807, 0, - 808, 0, 0, 809, 0, 810, 0, 811, 0, 0, 812, 0, 813, 0, 814, 815, 0, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 818, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, - 0, 821, 0, 822, 0, 0, 0, 823, 0, 0, 824, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, - 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 830, 0, 0, 831, 0, 832, 0, 833, 0, 834, - 0, 835, 0, 0, 836, 0, 0, 0, 837, 0, 0, 838, 0, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, 842, 0, 843, 0, 0, 844, 0, 845, 0, - 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 847, 0, 848, 0, 849, 0, 850, 0, 0, 0, 851, 0, 0, 0, 852, 0, 853, 0, 854, 0, 855, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 858, 0, 859, 0, 860, 0, - 861, 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, 863, 0, 0, 864, 0, 0, 865, 0, 866, 867, 0, 868, 0, 869, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 870, 0, 871, 0, 0, 872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, - 0, 0, 874, 0, 0, 0, 875, 0, 876, 0, 877, 0, 878, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 880, 0, 0, 881, 0, 0, 882, 0, 883, - 884, 0, 885, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 888, 0, 0, 0, 889, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 891, 0, 0, 892, 0, - 893, 0, 894, 0, 0, 895, 0, 896, 0, 897, 0, 0, 898, 0, 0, 899, 0, 0, 900, 901, 902, 0, 903, 0, 0, 904, 0, 0, 905, 0, 0, 906, - 907, 908, 0, 909, 0, 0, 910, 0, 0, 911, 0, 0, 912, 913, 914, 0, 915, 0, 0, 916, 0, 917, 0, 918, 0, 0, 919, 0, 920, 0, 921, 0, - 0, 922, 0, 923, 0, 924, 0, 0, 925, 0, 926, 0, 927, 0, 0, 928, 0, 0, 929, 0, 0, 930, 931, 932, 0, 933, 0, 0, 934, 0, 0, 935, - 0, 0, 936, 937, 938, 0, 939, 0, 0, 940, 0, 0, 0, 941, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 943, 0, 0, 0, 0, 944, 0, 0, - 0, 0, 0, 945, 0, 946, 947, 0, 0, 948, 0, 0, 0, 0, 0, 0, 949, 0, 0, 950, 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, 953, 0, 954, 0, 955, 0, 956, 0, 0, 957, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 958, 959, 0, 960, 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, 963, 0, 964, 0, 0, 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 966, 967, 0, 968, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 970, 971, 0, 972, 0, 0, 973, 0, 974, 975, 0, 976, 0, 0, 977, 0, - 978, 979, 0, 980, 0, 0, 981, 0, 982, 983, 0, 984, 0, 0, 985, 0, 986, 987, 0, 988, 0, 0, 989, 0, 0, 990, 0, 0, 991, 992, 0, 993, - 0, 0, 994, 0, 0, 995, 996, 997, 0, 998, 0, 0, 999, 0, 0, 1000, 0, 0, 1001, 1002, 0, 1003, 0, 0, 1004, 0, 0, 1005, 1006, 1007, 0, 1008, - 0, 0, 1009, 0, 0, 1010, 0, 0, 1011, 1012, 0, 1013, 0, 0, 1014, 0, 0, 1015, 1016, 1017, 0, 1018, 0, 0, 1019, 0, 0, 1020, 0, 0, 1021, 1022, - 0, 1023, 0, 0, 1024, 0, 0, 1025, 1026, 1027, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 1029, 0, 0, 0, 1030, 0, 1031, 0, 1032, 0, 1033, 0, - 0, 0, 1034, 0, 0, 0, 1035, 0, 1036, 0, 1037, 0, 1038, 1039, 0, 0, 0, 0, 1040, 0, 0, 0, 0, 1041, 0, 1042, 0, 1043, 0, 1044, 0, 1045, - 1046, 0, 0, 0, 1047, 0, 0, 0, 0, 1048, 0, 1049, 0, 1050, 0, 1051, 0, 1052, 1053, 0, 0, 0, 1054, 0, 0, 0, 0, 1055, 0, 1056, 0, 1057, - 0, 1058, 0, 1059, 1060, 0, 0, 0, 1061, 0, 0, 0, 0, 1062, 0, 1063, 0, 1064, 0, 1065, 0, 1066, 1067, 0, 0, 0, 1068, 0, 0, 1069, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0097[64] = { + 0x2046A80105090001ull, 0x040100A05042A804ull, 0x00020043000108AAull, 0x0081200048222023ull, + 0x8410610002300100ull, 0x8002400000200010ull, 0x2102080048288800ull, 0x0000000000000414ull, + 0x4491A21000041000ull, 0x04C0944580000881ull, 0x0000450002004800ull, 0x6000022051246884ull, + 0x5100240001302511ull, 0x840B428A42200200ull, 0x44444409D25AA502ull, 0x142850A142854444ull, + 0x6A940822AAAA850Aull, 0x1511111111102749ull, 0x55542850A142850Aull, 0x88813A4B54A04115ull, + 0x0A142850A8888888ull, 0x5A0208AAAAA14285ull, 0x27496900800409D2ull, 0x8008A28A294AAA18ull, + 0x4969542827492800ull, 0x0001624900254827ull, 0x2440010084000000ull, 0x685144209D25A012ull, + 0x2104E92500408402ull, 0x00A09D25A020051Aull, 0x1000813A4B40400Aull, 0xB4040088104E92D0ull, + 0xE92D0100220413A4ull, 0x13A4B40200000204ull, 0x82A09D25A0200208ull, 0x2009409D25A02004ull, + 0xA4B40401409D25A0ull, 0x0502749680802813ull, 0x5A0200A04E92D010ull, 0x813A4B40401409D2ull, + 0x0400204E92D01000ull, 0xE92D01000813A4B4ull, 0x00813A4B40400204ull, 0xB40400204E92D010ull, + 0xE92D0100402813A4ull, 0x00204E92D0100204ull, 0x4A80200204E92D01ull, 0xA4B48900102254A9ull, + 0x204E92D010084413ull, 0x2A54A95299409500ull, 0x0002D4A952A54A95ull, 0x1002048A80210400ull, + 0x52A44912AA440404ull, 0x5440800055115480ull, 0x080004A0015A4901ull, 0x04420015A4901544ull, + 0x925C92A548200000ull, 0x92E4952A54A9724Bull, 0x080902682140225Cull, 0x004B004B004AA200ull, + 0xB24B4B4B4B4B004Bull, 0xC92E4B24B92C92E4ull, 0xAA84354455100B92ull, 0x246AA11AA846AA11ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0097[64] = { + 1u, 14u, 26u, 36u, 47u, 57u, 62u, 72u, 75u, 86u, 99u, 105u, 119u, 132u, 146u, 167u, + 185u, 208u, 227u, 248u, 270u, 287u, 309u, 328u, 348u, 369u, 385u, 391u, 412u, 427u, 445u, 460u, + 478u, 497u, 510u, 527u, 543u, 563u, 581u, 599u, 619u, 632u, 653u, 667u, 684u, 703u, 717u, 734u, + 754u, 772u, 794u, 817u, 827u, 846u, 861u, 874u, 890u, 907u, 936u, 952u, 966u, 994u, 1023u, 1046u, }; void recomp_unit_0097_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0097_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08988000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0097[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0097[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0097[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08988000; @@ -1294,7 +1201,17 @@ L_08988068: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988080: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -1306,7 +1223,6 @@ L_08988080: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089880BC; } @@ -1341,7 +1257,17 @@ L_089880C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089880D8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[16]); @@ -1356,7 +1282,6 @@ L_089880F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); aot_gpr_6 = (static_cast(aot_gpr_5) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08988134; } @@ -1379,7 +1304,6 @@ L_08988108: } L_0898812C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898813C; } @@ -1395,7 +1319,6 @@ L_08988134: } L_0898813C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08988178; } @@ -1448,9 +1371,7 @@ L_0898819C: ctx.gpr[3] = (ctx.vfpu_scalar_bits_ct<0u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[3]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08988240; } @@ -1466,7 +1387,6 @@ L_089881C0: ctx.gpr[8] = (ctx.gpr[11] + aot_gpr_5); ctx.gpr[8] = (ctx.gpr[8] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_0898822C; } @@ -1479,7 +1399,6 @@ L_089881E8: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08988214; } @@ -1559,7 +1478,17 @@ L_08988284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988298: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -1568,7 +1497,6 @@ L_08988298: ctx.gpr[16] = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089882C4u); - // nop goto L_08988080; L_089882C4: aot_gpr_4 = (aot_gpr_2 | 0u); @@ -1595,7 +1523,6 @@ L_089882C4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08988304; } @@ -1606,9 +1533,7 @@ L_08988300: goto L_08988304; L_08988304: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089883C0; } @@ -1650,7 +1575,6 @@ L_08988354: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089883C0; } @@ -1699,7 +1623,6 @@ L_08988378: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089883C0; } @@ -1724,7 +1647,17 @@ L_089883C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089883DC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-192)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(136), std::bit_cast(ctx.fpr[22])); @@ -1760,9 +1693,7 @@ L_08988450: goto L_08988454; L_08988454: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089885C4; } @@ -1781,9 +1712,7 @@ L_08988464: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089884B4; } @@ -1794,7 +1723,6 @@ L_089884A0: aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; ctx.fpr[22] = aot_fpr_12 / ctx.fpr[22]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089884B8; } @@ -1940,7 +1868,6 @@ L_08988554: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089885C4; } @@ -1972,7 +1899,17 @@ L_089885C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089885FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -1995,7 +1932,6 @@ L_0898862C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(8)))))); ctx.gpr[9] = (0u | 6u); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08988654; } @@ -2009,7 +1945,6 @@ L_0898863C: goto L_08988848; L_0898864C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898866C; } @@ -2030,7 +1965,17 @@ L_0898866C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988678: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -2043,7 +1988,6 @@ L_08988678: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(68), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08988710; } @@ -2055,7 +1999,6 @@ L_089886AC: aot_gpr_5 = (aot_gpr_5 & 1u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08988830; } @@ -2089,7 +2032,6 @@ L_089886F4: AOT_REGCACHE_SYNC_OUT(); return; L_08988708: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08988830; } @@ -2101,7 +2043,6 @@ L_08988710: aot_gpr_5 = (aot_gpr_5 & 1u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08988830; } @@ -2185,7 +2126,17 @@ L_08988830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988848: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -2356,7 +2307,6 @@ L_089889A8: L_089889B0: ctx.execute_vfpu_vcmp_ct<12u, 28u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_089889DC; } @@ -2381,7 +2331,6 @@ L_089889D8: L_089889DC: ctx.gpr[8] = (ctx.gpr[25] & 2u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08988A2C; } @@ -2412,7 +2361,6 @@ L_089889E8: L_08988A2C: ctx.gpr[8] = (ctx.gpr[25] & 1u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08988AA8; } @@ -2467,7 +2415,17 @@ L_08988AA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988AB8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -2640,7 +2598,6 @@ L_08988C20: L_08988C28: ctx.execute_vfpu_vcmp_ct<12u, 28u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 0u) & 1u) == 0u; - // nop if (branch_taken) { goto L_08988C54; } @@ -2665,7 +2622,6 @@ L_08988C50: L_08988C54: ctx.gpr[8] = (ctx.gpr[25] & 2u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08988CA8; } @@ -2697,7 +2653,6 @@ L_08988C60: L_08988CA8: ctx.gpr[8] = (ctx.gpr[25] & 1u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08988D54; } @@ -2724,7 +2679,6 @@ L_08988CE0: ctx.execute_vfpu_unary_ct<3u, 1u, 4u, 0u>(); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), aot_gpr_31); aot_gpr_31 = (0x08988CF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0096_entry, 96u, 947u, 0x08987DF4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988CF0u) goto L_08988CF0; AOT_REGCACHE_SYNC_OUT(); return; L_08988CF0: @@ -2742,7 +2696,6 @@ L_08988CF8: ctx.execute_vfpu_unary_ct<3u, 2u, 4u, 0u>(); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), aot_gpr_31); aot_gpr_31 = (0x08988D24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0096_entry, 96u, 947u, 0x08987DF4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988D24u) goto L_08988D24; AOT_REGCACHE_SYNC_OUT(); return; L_08988D24: @@ -2770,7 +2723,17 @@ L_08988D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988D64: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-15976))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(8))); @@ -2789,7 +2752,6 @@ L_08988D78: goto L_08988D84; L_08988D84: { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_08988D9C; } @@ -2833,7 +2795,6 @@ L_08988DC0: goto L_08988DC4; L_08988DC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08988DE8; } @@ -2861,22 +2822,29 @@ L_08988DE8: } L_08988DFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08988E04: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } aot_gpr_31 = (0x08988E20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988E20u) goto L_08988E20; AOT_REGCACHE_SYNC_OUT(); return; L_08988E20: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08988E3C; } @@ -2885,7 +2853,6 @@ L_08988E20: L_08988E28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08988E44; } @@ -2901,7 +2868,6 @@ L_08988E34: } L_08988E3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08989094; } @@ -2909,7 +2875,6 @@ L_08988E3C: } L_08988E44: aot_gpr_31 = (0x08988E4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988E4Cu) goto L_08988E4C; AOT_REGCACHE_SYNC_OUT(); return; L_08988E4C: @@ -2932,7 +2897,6 @@ L_08988E58: L_08988E64: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08988E7C; } @@ -3035,7 +2999,6 @@ L_08988F38: AOT_REGCACHE_SYNC_OUT(); return; L_08988F40: aot_gpr_31 = (0x08988F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988F48u) goto L_08988F48; AOT_REGCACHE_SYNC_OUT(); return; L_08988F48: @@ -3048,7 +3011,6 @@ L_08988F48: AOT_REGCACHE_SYNC_OUT(); return; L_08988F5C: aot_gpr_31 = (0x08988F64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988F64u) goto L_08988F64; AOT_REGCACHE_SYNC_OUT(); return; L_08988F64: @@ -3061,7 +3023,6 @@ L_08988F64: AOT_REGCACHE_SYNC_OUT(); return; L_08988F78: aot_gpr_31 = (0x08988F80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988F80u) goto L_08988F80; AOT_REGCACHE_SYNC_OUT(); return; L_08988F80: @@ -3074,7 +3035,6 @@ L_08988F80: AOT_REGCACHE_SYNC_OUT(); return; L_08988F94: aot_gpr_31 = (0x08988F9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988F9Cu) goto L_08988F9C; AOT_REGCACHE_SYNC_OUT(); return; L_08988F9C: @@ -3087,7 +3047,6 @@ L_08988F9C: AOT_REGCACHE_SYNC_OUT(); return; L_08988FB0: aot_gpr_31 = (0x08988FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988FB8u) goto L_08988FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08988FB8: @@ -3100,7 +3059,6 @@ L_08988FB8: AOT_REGCACHE_SYNC_OUT(); return; L_08988FCC: aot_gpr_31 = (0x08988FD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988FD4u) goto L_08988FD4; AOT_REGCACHE_SYNC_OUT(); return; L_08988FD4: @@ -3113,7 +3071,6 @@ L_08988FD4: AOT_REGCACHE_SYNC_OUT(); return; L_08988FE8: aot_gpr_31 = (0x08988FF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08988FF0u) goto L_08988FF0; AOT_REGCACHE_SYNC_OUT(); return; L_08988FF0: @@ -3126,7 +3083,6 @@ L_08988FF0: AOT_REGCACHE_SYNC_OUT(); return; L_08989004: aot_gpr_31 = (0x0898900Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898900Cu) goto L_0898900C; AOT_REGCACHE_SYNC_OUT(); return; L_0898900C: @@ -3139,7 +3095,6 @@ L_0898900C: AOT_REGCACHE_SYNC_OUT(); return; L_08989020: aot_gpr_31 = (0x08989028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989028u) goto L_08989028; AOT_REGCACHE_SYNC_OUT(); return; L_08989028: @@ -3214,18 +3169,26 @@ L_08989094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089890AC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } aot_gpr_31 = (0x089890C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089890C8u) goto L_089890C8; AOT_REGCACHE_SYNC_OUT(); return; L_089890C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089890E4; } @@ -3234,7 +3197,6 @@ L_089890C8: L_089890D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089890EC; } @@ -3250,7 +3212,6 @@ L_089890DC: } L_089890E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08989320; } @@ -3258,7 +3219,6 @@ L_089890E4: } L_089890EC: aot_gpr_31 = (0x089890F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089890F4u) goto L_089890F4; AOT_REGCACHE_SYNC_OUT(); return; L_089890F4: @@ -3281,7 +3241,6 @@ L_08989100: L_0898910C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08989124; } @@ -3384,7 +3343,6 @@ L_089891E0: AOT_REGCACHE_SYNC_OUT(); return; L_089891E8: aot_gpr_31 = (0x089891F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089891F0u) goto L_089891F0; AOT_REGCACHE_SYNC_OUT(); return; L_089891F0: @@ -3397,7 +3355,6 @@ L_089891F0: AOT_REGCACHE_SYNC_OUT(); return; L_08989204: aot_gpr_31 = (0x0898920Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898920Cu) goto L_0898920C; AOT_REGCACHE_SYNC_OUT(); return; L_0898920C: @@ -3410,7 +3367,6 @@ L_0898920C: AOT_REGCACHE_SYNC_OUT(); return; L_08989220: aot_gpr_31 = (0x08989228u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989228u) goto L_08989228; AOT_REGCACHE_SYNC_OUT(); return; L_08989228: @@ -3423,7 +3379,6 @@ L_08989228: AOT_REGCACHE_SYNC_OUT(); return; L_0898923C: aot_gpr_31 = (0x08989244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989244u) goto L_08989244; AOT_REGCACHE_SYNC_OUT(); return; L_08989244: @@ -3436,7 +3391,6 @@ L_08989244: AOT_REGCACHE_SYNC_OUT(); return; L_08989258: aot_gpr_31 = (0x08989260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989260u) goto L_08989260; AOT_REGCACHE_SYNC_OUT(); return; L_08989260: @@ -3449,7 +3403,6 @@ L_08989260: AOT_REGCACHE_SYNC_OUT(); return; L_08989274: aot_gpr_31 = (0x0898927Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898927Cu) goto L_0898927C; AOT_REGCACHE_SYNC_OUT(); return; L_0898927C: @@ -3462,7 +3415,6 @@ L_0898927C: AOT_REGCACHE_SYNC_OUT(); return; L_08989290: aot_gpr_31 = (0x08989298u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989298u) goto L_08989298; AOT_REGCACHE_SYNC_OUT(); return; L_08989298: @@ -3475,7 +3427,6 @@ L_08989298: AOT_REGCACHE_SYNC_OUT(); return; L_089892AC: aot_gpr_31 = (0x089892B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089892B4u) goto L_089892B4; AOT_REGCACHE_SYNC_OUT(); return; L_089892B4: @@ -3550,18 +3501,26 @@ L_08989320: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989338: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } aot_gpr_31 = (0x08989354u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989354u) goto L_08989354; AOT_REGCACHE_SYNC_OUT(); return; L_08989354: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08989370; } @@ -3570,7 +3529,6 @@ L_08989354: L_0898935C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08989378; } @@ -3586,7 +3544,6 @@ L_08989368: } L_08989370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089895AC; } @@ -3594,7 +3551,6 @@ L_08989370: } L_08989378: aot_gpr_31 = (0x08989380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989380u) goto L_08989380; AOT_REGCACHE_SYNC_OUT(); return; L_08989380: @@ -3617,7 +3573,6 @@ L_0898938C: L_08989398: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089893B0; } @@ -3720,7 +3675,6 @@ L_0898946C: AOT_REGCACHE_SYNC_OUT(); return; L_08989474: aot_gpr_31 = (0x0898947Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898947Cu) goto L_0898947C; AOT_REGCACHE_SYNC_OUT(); return; L_0898947C: @@ -3733,7 +3687,6 @@ L_0898947C: AOT_REGCACHE_SYNC_OUT(); return; L_08989490: aot_gpr_31 = (0x08989498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989498u) goto L_08989498; AOT_REGCACHE_SYNC_OUT(); return; L_08989498: @@ -3746,7 +3699,6 @@ L_08989498: AOT_REGCACHE_SYNC_OUT(); return; L_089894AC: aot_gpr_31 = (0x089894B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089894B4u) goto L_089894B4; AOT_REGCACHE_SYNC_OUT(); return; L_089894B4: @@ -3759,7 +3711,6 @@ L_089894B4: AOT_REGCACHE_SYNC_OUT(); return; L_089894C8: aot_gpr_31 = (0x089894D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089894D0u) goto L_089894D0; AOT_REGCACHE_SYNC_OUT(); return; L_089894D0: @@ -3772,7 +3723,6 @@ L_089894D0: AOT_REGCACHE_SYNC_OUT(); return; L_089894E4: aot_gpr_31 = (0x089894ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089894ECu) goto L_089894EC; AOT_REGCACHE_SYNC_OUT(); return; L_089894EC: @@ -3785,7 +3735,6 @@ L_089894EC: AOT_REGCACHE_SYNC_OUT(); return; L_08989500: aot_gpr_31 = (0x08989508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989508u) goto L_08989508; AOT_REGCACHE_SYNC_OUT(); return; L_08989508: @@ -3798,7 +3747,6 @@ L_08989508: AOT_REGCACHE_SYNC_OUT(); return; L_0898951C: aot_gpr_31 = (0x08989524u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989524u) goto L_08989524; AOT_REGCACHE_SYNC_OUT(); return; L_08989524: @@ -3811,7 +3759,6 @@ L_08989524: AOT_REGCACHE_SYNC_OUT(); return; L_08989538: aot_gpr_31 = (0x08989540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989540u) goto L_08989540; AOT_REGCACHE_SYNC_OUT(); return; L_08989540: @@ -3886,7 +3833,17 @@ L_089895AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089895C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -3899,7 +3856,6 @@ L_089895C4: goto L_089895E4; L_089895E4: aot_gpr_31 = (0x089895ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089895ECu) goto L_089895EC; AOT_REGCACHE_SYNC_OUT(); return; L_089895EC: @@ -3922,7 +3878,6 @@ L_089895F8: L_08989604: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898961C; } @@ -3975,7 +3930,17 @@ L_08989648: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898967C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_4 = (aot_gpr_4 & 255u); @@ -3997,7 +3962,6 @@ L_089896A0: goto L_089896AC; L_089896AC: aot_gpr_31 = (0x089896B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089896B4u) goto L_089896B4; AOT_REGCACHE_SYNC_OUT(); return; L_089896B4: @@ -4020,7 +3984,6 @@ L_089896C0: L_089896CC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089896E4; } @@ -4070,7 +4033,6 @@ L_08989724: AOT_REGCACHE_SYNC_OUT(); return; L_0898972C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089897CC; } @@ -4078,7 +4040,6 @@ L_0898972C: } L_08989734: aot_gpr_31 = (0x0898973Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898973Cu) goto L_0898973C; AOT_REGCACHE_SYNC_OUT(); return; L_0898973C: @@ -4094,7 +4055,6 @@ L_08989744: L_0898974C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089897CC; } @@ -4102,7 +4062,6 @@ L_0898974C: } L_08989758: aot_gpr_31 = (0x08989760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989760u) goto L_08989760; AOT_REGCACHE_SYNC_OUT(); return; L_08989760: @@ -4113,7 +4072,6 @@ L_08989760: AOT_REGCACHE_SYNC_OUT(); return; L_0898976C: aot_gpr_31 = (0x08989774u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989774u) goto L_08989774; AOT_REGCACHE_SYNC_OUT(); return; L_08989774: @@ -4125,7 +4083,6 @@ L_08989774: AOT_REGCACHE_SYNC_OUT(); return; L_08989784: aot_gpr_31 = (0x0898978Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898978Cu) goto L_0898978C; AOT_REGCACHE_SYNC_OUT(); return; L_0898978C: @@ -4137,7 +4094,6 @@ L_0898978C: AOT_REGCACHE_SYNC_OUT(); return; L_0898979C: aot_gpr_31 = (0x089897A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089897A4u) goto L_089897A4; AOT_REGCACHE_SYNC_OUT(); return; L_089897A4: @@ -4149,7 +4105,6 @@ L_089897A4: AOT_REGCACHE_SYNC_OUT(); return; L_089897B4: aot_gpr_31 = (0x089897BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089897BCu) goto L_089897BC; AOT_REGCACHE_SYNC_OUT(); return; L_089897BC: @@ -4178,7 +4133,17 @@ L_089897CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089897FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -4197,7 +4162,6 @@ L_089897FC: } L_0898982C: aot_gpr_31 = (0x08989834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989834u) goto L_08989834; AOT_REGCACHE_SYNC_OUT(); return; L_08989834: @@ -4218,7 +4182,6 @@ L_08989840: L_0898984C: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08989864; } @@ -4275,7 +4238,6 @@ L_089898B0: AOT_REGCACHE_SYNC_OUT(); return; L_089898B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08989AA0; } @@ -4290,7 +4252,6 @@ L_089898C0: goto L_089898CC; L_089898CC: aot_gpr_31 = (0x089898D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089898D4u) goto L_089898D4; AOT_REGCACHE_SYNC_OUT(); return; L_089898D4: @@ -4313,7 +4274,6 @@ L_089898E0: L_089898EC: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08989904; } @@ -4348,7 +4308,6 @@ L_08989914: L_0898992C: aot_gpr_4 = (ctx.gpr[19] & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08989948; } @@ -4387,7 +4346,6 @@ L_08989954: L_08989980: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08989AA0; } @@ -4420,7 +4378,6 @@ L_089899B4: goto L_089899B8; L_089899B8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08989AA0; } @@ -4552,7 +4509,17 @@ L_08989AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989AD8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -4566,7 +4533,17 @@ L_08989AE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989AF4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -4580,7 +4557,17 @@ L_08989B04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989B10: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -4593,7 +4580,6 @@ L_08989B10: goto L_08989B34; L_08989B34: aot_gpr_31 = (0x08989B3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989B3Cu) goto L_08989B3C; AOT_REGCACHE_SYNC_OUT(); return; L_08989B3C: @@ -4616,7 +4602,6 @@ L_08989B48: L_08989B54: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08989B6C; } @@ -4667,7 +4652,6 @@ L_08989BA8: goto L_08989BB8; L_08989BB8: { const bool branch_taken = static_cast(ctx.gpr[16]) < 0; - // nop if (branch_taken) { goto L_08989BD0; } @@ -4712,7 +4696,6 @@ L_08989BF4: L_08989BF8: aot_gpr_4 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08989C28; } @@ -4757,7 +4740,17 @@ L_08989C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989C58: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16151))); @@ -4774,7 +4767,6 @@ L_08989C58: } L_08989C80: aot_gpr_31 = (0x08989C88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989C88u) goto L_08989C88; AOT_REGCACHE_SYNC_OUT(); return; L_08989C88: @@ -4795,7 +4787,6 @@ L_08989C94: L_08989CA0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08989CB8; } @@ -4867,7 +4858,6 @@ L_08989D10: } L_08989D20: aot_gpr_31 = (0x08989D28u); - // nop goto L_08988D64; L_08989D28: aot_gpr_4 = (0u | 1u); @@ -4887,7 +4877,17 @@ L_08989D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989D54: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -4900,7 +4900,6 @@ L_08989D54: goto L_08989D74; L_08989D74: aot_gpr_31 = (0x08989D7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989D7Cu) goto L_08989D7C; AOT_REGCACHE_SYNC_OUT(); return; L_08989D7C: @@ -4923,7 +4922,6 @@ L_08989D88: L_08989D94: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08989DAC; } @@ -4977,7 +4975,6 @@ L_08989DDC: } L_08989E04: aot_gpr_31 = (0x08989E0Cu); - // nop goto L_08988D64; L_08989E0C: aot_gpr_4 = (0u | 1u); @@ -4997,7 +4994,17 @@ L_08989E0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989E38: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5010,7 +5017,6 @@ L_08989E38: goto L_08989E58; L_08989E58: aot_gpr_31 = (0x08989E60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989E60u) goto L_08989E60; AOT_REGCACHE_SYNC_OUT(); return; L_08989E60: @@ -5033,7 +5039,6 @@ L_08989E6C: L_08989E78: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08989E90; } @@ -5086,7 +5091,17 @@ L_08989EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989EF0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5099,7 +5114,6 @@ L_08989EF0: goto L_08989F10; L_08989F10: aot_gpr_31 = (0x08989F18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989F18u) goto L_08989F18; AOT_REGCACHE_SYNC_OUT(); return; L_08989F18: @@ -5122,7 +5136,6 @@ L_08989F24: L_08989F30: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08989F48; } @@ -5159,9 +5172,7 @@ L_08989F70: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08989F9C; } @@ -5191,7 +5202,17 @@ L_08989F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08989FC8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5204,7 +5225,6 @@ L_08989FC8: goto L_08989FE8; L_08989FE8: aot_gpr_31 = (0x08989FF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08989FF0u) goto L_08989FF0; AOT_REGCACHE_SYNC_OUT(); return; L_08989FF0: @@ -5227,7 +5247,6 @@ L_08989FFC: L_0898A008: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A020; } @@ -5264,9 +5283,7 @@ L_0898A048: aot_gpr_4 = (16000u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898A074; } @@ -5296,7 +5313,17 @@ L_0898A074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A0A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5309,7 +5336,6 @@ L_0898A0A0: goto L_0898A0C0; L_0898A0C0: aot_gpr_31 = (0x0898A0C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A0C8u) goto L_0898A0C8; AOT_REGCACHE_SYNC_OUT(); return; L_0898A0C8: @@ -5332,7 +5358,6 @@ L_0898A0D4: L_0898A0E0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A0F8; } @@ -5396,7 +5421,17 @@ L_0898A124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A184: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5409,7 +5444,6 @@ L_0898A184: goto L_0898A1A8; L_0898A1A8: aot_gpr_31 = (0x0898A1B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A1B0u) goto L_0898A1B0; AOT_REGCACHE_SYNC_OUT(); return; L_0898A1B0: @@ -5432,7 +5466,6 @@ L_0898A1BC: L_0898A1C8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A1E0; } @@ -5493,7 +5526,17 @@ L_0898A224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A254: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5506,7 +5549,6 @@ L_0898A254: goto L_0898A274; L_0898A274: aot_gpr_31 = (0x0898A27Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A27Cu) goto L_0898A27C; AOT_REGCACHE_SYNC_OUT(); return; L_0898A27C: @@ -5529,7 +5571,6 @@ L_0898A288: L_0898A294: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898A2AC; } @@ -5563,7 +5604,6 @@ L_0898A2BC: AOT_REGCACHE_SYNC_OUT(); return; L_0898A2D4: aot_gpr_31 = (0x0898A2DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A2DCu) goto L_0898A2DC; AOT_REGCACHE_SYNC_OUT(); return; L_0898A2DC: @@ -5605,7 +5645,17 @@ L_0898A308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A334: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5618,7 +5668,6 @@ L_0898A334: goto L_0898A354; L_0898A354: aot_gpr_31 = (0x0898A35Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A35Cu) goto L_0898A35C; AOT_REGCACHE_SYNC_OUT(); return; L_0898A35C: @@ -5641,7 +5690,6 @@ L_0898A368: L_0898A374: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A38C; } @@ -5676,7 +5724,6 @@ L_0898A39C: AOT_REGCACHE_SYNC_OUT(); return; L_0898A3B8: aot_gpr_31 = (0x0898A3C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A3C0u) goto L_0898A3C0; AOT_REGCACHE_SYNC_OUT(); return; L_0898A3C0: @@ -5702,7 +5749,17 @@ L_0898A3CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A3F4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5715,7 +5772,6 @@ L_0898A3F4: goto L_0898A414; L_0898A414: aot_gpr_31 = (0x0898A41Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A41Cu) goto L_0898A41C; AOT_REGCACHE_SYNC_OUT(); return; L_0898A41C: @@ -5738,7 +5794,6 @@ L_0898A428: L_0898A434: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A44C; } @@ -5793,7 +5848,17 @@ L_0898A480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A4A8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5806,7 +5871,6 @@ L_0898A4A8: goto L_0898A4C8; L_0898A4C8: aot_gpr_31 = (0x0898A4D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A4D0u) goto L_0898A4D0; AOT_REGCACHE_SYNC_OUT(); return; L_0898A4D0: @@ -5829,7 +5893,6 @@ L_0898A4DC: L_0898A4E8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A500; } @@ -5884,7 +5947,17 @@ L_0898A534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A55C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5897,7 +5970,6 @@ L_0898A55C: goto L_0898A57C; L_0898A57C: aot_gpr_31 = (0x0898A584u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A584u) goto L_0898A584; AOT_REGCACHE_SYNC_OUT(); return; L_0898A584: @@ -5920,7 +5992,6 @@ L_0898A590: L_0898A59C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A5B4; } @@ -5975,7 +6046,17 @@ L_0898A5E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A610: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -5988,7 +6069,6 @@ L_0898A610: goto L_0898A630; L_0898A630: aot_gpr_31 = (0x0898A638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A638u) goto L_0898A638; AOT_REGCACHE_SYNC_OUT(); return; L_0898A638: @@ -6011,7 +6091,6 @@ L_0898A644: L_0898A650: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A668; } @@ -6066,7 +6145,17 @@ L_0898A69C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A6C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6079,7 +6168,6 @@ L_0898A6C4: goto L_0898A6E4; L_0898A6E4: aot_gpr_31 = (0x0898A6ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A6ECu) goto L_0898A6EC; AOT_REGCACHE_SYNC_OUT(); return; L_0898A6EC: @@ -6102,7 +6190,6 @@ L_0898A6F8: L_0898A704: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A71C; } @@ -6157,7 +6244,17 @@ L_0898A750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A778: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6170,7 +6267,6 @@ L_0898A778: goto L_0898A798; L_0898A798: aot_gpr_31 = (0x0898A7A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A7A0u) goto L_0898A7A0; AOT_REGCACHE_SYNC_OUT(); return; L_0898A7A0: @@ -6193,7 +6289,6 @@ L_0898A7AC: L_0898A7B8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A7D0; } @@ -6246,7 +6341,17 @@ L_0898A7FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A830: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6259,7 +6364,6 @@ L_0898A830: goto L_0898A850; L_0898A850: aot_gpr_31 = (0x0898A858u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A858u) goto L_0898A858; AOT_REGCACHE_SYNC_OUT(); return; L_0898A858: @@ -6282,7 +6386,6 @@ L_0898A864: L_0898A870: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A888; } @@ -6335,7 +6438,17 @@ L_0898A8B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A8E8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6348,7 +6461,6 @@ L_0898A8E8: goto L_0898A908; L_0898A908: aot_gpr_31 = (0x0898A910u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A910u) goto L_0898A910; AOT_REGCACHE_SYNC_OUT(); return; L_0898A910: @@ -6371,7 +6483,6 @@ L_0898A91C: L_0898A928: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A940; } @@ -6424,7 +6535,17 @@ L_0898A96C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898A9A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6437,7 +6558,6 @@ L_0898A9A0: goto L_0898A9C0; L_0898A9C0: aot_gpr_31 = (0x0898A9C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898A9C8u) goto L_0898A9C8; AOT_REGCACHE_SYNC_OUT(); return; L_0898A9C8: @@ -6460,7 +6580,6 @@ L_0898A9D4: L_0898A9E0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898A9F8; } @@ -6513,7 +6632,17 @@ L_0898AA24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898AA58: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6526,7 +6655,6 @@ L_0898AA58: goto L_0898AA78; L_0898AA78: aot_gpr_31 = (0x0898AA80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AA80u) goto L_0898AA80; AOT_REGCACHE_SYNC_OUT(); return; L_0898AA80: @@ -6549,7 +6677,6 @@ L_0898AA8C: L_0898AA98: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898AAB0; } @@ -6602,7 +6729,17 @@ L_0898AADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898AB10: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6615,7 +6752,6 @@ L_0898AB10: goto L_0898AB30; L_0898AB30: aot_gpr_31 = (0x0898AB38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AB38u) goto L_0898AB38; AOT_REGCACHE_SYNC_OUT(); return; L_0898AB38: @@ -6638,7 +6774,6 @@ L_0898AB44: L_0898AB50: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898AB68; } @@ -6691,7 +6826,17 @@ L_0898AB94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898ABC8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6704,7 +6849,6 @@ L_0898ABC8: goto L_0898ABE8; L_0898ABE8: aot_gpr_31 = (0x0898ABF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898ABF0u) goto L_0898ABF0; AOT_REGCACHE_SYNC_OUT(); return; L_0898ABF0: @@ -6727,7 +6871,6 @@ L_0898ABFC: L_0898AC08: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898AC20; } @@ -6762,7 +6905,6 @@ L_0898AC30: AOT_REGCACHE_SYNC_OUT(); return; L_0898AC4C: aot_gpr_31 = (0x0898AC54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AC54u) goto L_0898AC54; AOT_REGCACHE_SYNC_OUT(); return; L_0898AC54: @@ -6794,7 +6936,17 @@ L_0898AC78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898ACA0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6807,7 +6959,6 @@ L_0898ACA0: goto L_0898ACC0; L_0898ACC0: aot_gpr_31 = (0x0898ACC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898ACC8u) goto L_0898ACC8; AOT_REGCACHE_SYNC_OUT(); return; L_0898ACC8: @@ -6830,7 +6981,6 @@ L_0898ACD4: L_0898ACE0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898ACF8; } @@ -6881,7 +7031,17 @@ L_0898AD24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898AD50: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6894,7 +7054,6 @@ L_0898AD50: goto L_0898AD70; L_0898AD70: aot_gpr_31 = (0x0898AD78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AD78u) goto L_0898AD78; AOT_REGCACHE_SYNC_OUT(); return; L_0898AD78: @@ -6917,7 +7076,6 @@ L_0898AD84: L_0898AD90: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898ADA8; } @@ -6968,7 +7126,17 @@ L_0898ADD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898AE00: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -6981,7 +7149,6 @@ L_0898AE00: goto L_0898AE20; L_0898AE20: aot_gpr_31 = (0x0898AE28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AE28u) goto L_0898AE28; AOT_REGCACHE_SYNC_OUT(); return; L_0898AE28: @@ -7004,7 +7171,6 @@ L_0898AE34: L_0898AE40: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898AE58; } @@ -7056,18 +7222,26 @@ L_0898AE84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898AEB4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(32), aot_run_words); } aot_gpr_31 = (0x0898AEDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AEDCu) goto L_0898AEDC; AOT_REGCACHE_SYNC_OUT(); return; L_0898AEDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898B04C; } @@ -7075,7 +7249,6 @@ L_0898AEDC: } L_0898AEE4: aot_gpr_31 = (0x0898AEECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AEECu) goto L_0898AEEC; AOT_REGCACHE_SYNC_OUT(); return; L_0898AEEC: @@ -7089,13 +7262,11 @@ L_0898AEEC: } L_0898AEF8: aot_gpr_31 = (0x0898AF00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AF00u) goto L_0898AF00; AOT_REGCACHE_SYNC_OUT(); return; L_0898AF00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0898B04C; } @@ -7127,7 +7298,6 @@ L_0898AF28: AOT_REGCACHE_SYNC_OUT(); return; L_0898AF30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898AF54; } @@ -7185,7 +7355,6 @@ L_0898AF70: L_0898AFA0: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_0898B04C; } @@ -7195,7 +7364,6 @@ L_0898AFAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898B04C; } @@ -7210,7 +7378,6 @@ L_0898AFBC: goto L_0898AFC8; L_0898AFC8: aot_gpr_31 = (0x0898AFD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898AFD0u) goto L_0898AFD0; AOT_REGCACHE_SYNC_OUT(); return; L_0898AFD0: @@ -7233,7 +7400,6 @@ L_0898AFDC: L_0898AFE8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898B000; } @@ -7295,7 +7461,17 @@ L_0898B04C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B070: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); @@ -7308,7 +7484,6 @@ L_0898B070: goto L_0898B090; L_0898B090: aot_gpr_31 = (0x0898B098u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898B098u) goto L_0898B098; AOT_REGCACHE_SYNC_OUT(); return; L_0898B098: @@ -7331,7 +7506,6 @@ L_0898B0A4: L_0898B0B0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_0898B0C8; } @@ -7382,14 +7556,23 @@ L_0898B0F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B120: ctx.gpr[7] = (0u | 0u); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); goto L_0898B128; L_0898B128: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_0898B158; } @@ -7415,7 +7598,17 @@ L_0898B13C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B158: { const bool branch_taken = 0u == 0u; aot_gpr_2 = (0u | 0u); @@ -7427,7 +7620,6 @@ L_0898B158: L_0898B160: aot_gpr_6 = (aot_gpr_6 + static_cast(-2)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B17C; } @@ -7456,7 +7648,6 @@ L_0898B17C: L_0898B184: aot_gpr_6 = (aot_gpr_6 + static_cast(-5)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B198; } @@ -7481,7 +7672,6 @@ L_0898B198: L_0898B1A0: aot_gpr_6 = (aot_gpr_6 + static_cast(-10)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B1B4; } @@ -7506,7 +7696,6 @@ L_0898B1B4: L_0898B1BC: aot_gpr_6 = (aot_gpr_6 + static_cast(-1)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B1D0; } @@ -7531,7 +7720,6 @@ L_0898B1D0: L_0898B1D8: aot_gpr_6 = (aot_gpr_6 + static_cast(-7)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B1EC; } @@ -7556,7 +7744,6 @@ L_0898B1EC: L_0898B1F4: aot_gpr_6 = (aot_gpr_6 + static_cast(-6)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B208; } @@ -7581,7 +7768,6 @@ L_0898B208: L_0898B210: aot_gpr_6 = (aot_gpr_6 + static_cast(-10)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B224; } @@ -7606,7 +7792,6 @@ L_0898B224: L_0898B22C: aot_gpr_6 = (aot_gpr_6 + static_cast(-11)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B240; } @@ -7631,7 +7816,6 @@ L_0898B240: L_0898B248: aot_gpr_6 = (aot_gpr_6 + static_cast(-7)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B25C; } @@ -7656,7 +7840,6 @@ L_0898B25C: L_0898B264: aot_gpr_6 = (aot_gpr_6 + static_cast(-9)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B278; } @@ -7681,7 +7864,6 @@ L_0898B278: L_0898B280: aot_gpr_6 = (aot_gpr_6 + static_cast(-3)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B294; } @@ -7706,7 +7888,6 @@ L_0898B294: L_0898B29C: aot_gpr_6 = (aot_gpr_6 + static_cast(-8)); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_0898B2B0; } @@ -7733,11 +7914,20 @@ L_0898B2B8: goto L_0898B2BC; L_0898B2BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B2C4: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(6), static_cast(0u)); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(4), static_cast(0u)); @@ -7767,7 +7957,17 @@ L_0898B2C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B328: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -7785,7 +7985,17 @@ L_0898B340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B354: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5900))); @@ -7804,7 +8014,6 @@ L_0898B354: } L_0898B37C: aot_gpr_31 = (0x0898B384u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898B384u) goto L_0898B384; AOT_REGCACHE_SYNC_OUT(); return; L_0898B384: @@ -7872,7 +8081,17 @@ L_0898B408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B428: aot_gpr_5 = (aot_gpr_4 << 5u); aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); @@ -7885,7 +8104,17 @@ L_0898B428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B448: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -7921,7 +8150,17 @@ L_0898B484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B490: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -7940,17 +8179,25 @@ L_0898B4AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B4B8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0898B4C8u); - // nop goto L_0898B448; L_0898B4C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(9287))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B4E4; } @@ -7971,14 +8218,33 @@ L_0898B4E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B4F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B4F8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_gpr_4 = (2236u << 16u); @@ -7987,7 +8253,6 @@ L_0898B4F8: { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(48), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898B530; } @@ -8002,7 +8267,6 @@ L_0898B51C: goto L_0898B528; L_0898B528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898B69C; } @@ -8010,7 +8274,6 @@ L_0898B528: } L_0898B530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898B7C4; } @@ -8018,7 +8281,6 @@ L_0898B530: } L_0898B538: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898B69C; } @@ -8053,7 +8315,6 @@ L_0898B568: AOT_REGCACHE_SYNC_OUT(); return; L_0898B570: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898B69C; } @@ -8103,7 +8364,6 @@ L_0898B5E8: AOT_REGCACHE_SYNC_OUT(); return; L_0898B5F0: aot_gpr_31 = (0x0898B5F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], aot_gpr_28, ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898B5F8u) goto L_0898B5F8; AOT_REGCACHE_SYNC_OUT(); return; L_0898B5F8: @@ -8140,7 +8400,6 @@ L_0898B62C: L_0898B638: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898B650; } @@ -8181,7 +8440,6 @@ L_0898B660: AOT_REGCACHE_SYNC_OUT(); return; L_0898B694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898B7C4; } @@ -8190,7 +8448,6 @@ L_0898B694: L_0898B69C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(9287))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B7C4; } @@ -8240,7 +8497,6 @@ L_0898B718: AOT_REGCACHE_SYNC_OUT(); return; L_0898B720: aot_gpr_31 = (0x0898B728u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], aot_gpr_28, ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898B728u) goto L_0898B728; AOT_REGCACHE_SYNC_OUT(); return; L_0898B728: @@ -8277,7 +8533,6 @@ L_0898B75C: L_0898B768: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898B780; } @@ -8328,12 +8583,21 @@ L_0898B7C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B7D8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0898B7E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 475u, 0x08AFB4F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898B7E8u) goto L_0898B7E8; AOT_REGCACHE_SYNC_OUT(); return; L_0898B7E8: @@ -8367,7 +8631,17 @@ L_0898B7E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898B854: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); @@ -8399,7 +8673,6 @@ L_0898B878: } L_0898B880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898BA24; } @@ -8420,7 +8693,6 @@ L_0898B894: goto L_0898B89C; L_0898B89C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B8B0; } @@ -8458,7 +8730,6 @@ L_0898B8CC: goto L_0898B8D0; L_0898B8D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B8E4; } @@ -8496,7 +8767,6 @@ L_0898B900: goto L_0898B904; L_0898B904: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B918; } @@ -8534,7 +8804,6 @@ L_0898B934: goto L_0898B938; L_0898B938: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B94C; } @@ -8552,7 +8821,6 @@ L_0898B94C: goto L_0898BCCC; L_0898B954: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898B968; } @@ -8570,7 +8838,6 @@ L_0898B968: goto L_0898BD24; L_0898B970: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898B984; } @@ -8588,7 +8855,6 @@ L_0898B984: goto L_0898BD7C; L_0898B98C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898B9A0; } @@ -8606,7 +8872,6 @@ L_0898B9A0: goto L_0898BDD4; L_0898B9A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898B9BC; } @@ -8644,7 +8909,6 @@ L_0898B9D8: goto L_0898B9DC; L_0898B9DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898B9F0; } @@ -8682,7 +8946,6 @@ L_0898BA0C: goto L_0898BA10; L_0898BA10: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898BA24; } @@ -8702,7 +8965,17 @@ L_0898BA24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BA34: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -8760,7 +9033,6 @@ L_0898BAA4: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898BAA4; } @@ -8779,7 +9051,6 @@ L_0898BACC: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0898BACC; } @@ -8806,7 +9077,17 @@ L_0898BAEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BB24: aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(184))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); @@ -8815,32 +9096,69 @@ L_0898BB24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BB34: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(144), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BB3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BB44: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BB4C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BB80; } @@ -8867,15 +9185,23 @@ L_0898BB80: goto L_0898BB84; L_0898BB84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BB8C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BBC0; } @@ -8902,15 +9228,23 @@ L_0898BBC0: goto L_0898BBC4; L_0898BBC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BBCC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BC00; } @@ -8937,15 +9271,23 @@ L_0898BC00: goto L_0898BC04; L_0898BC04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BC0C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BC40; } @@ -8972,15 +9314,23 @@ L_0898BC40: goto L_0898BC44; L_0898BC44: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BC4C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BC60; } @@ -8999,15 +9349,23 @@ L_0898BC60: goto L_0898BC64; L_0898BC64: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BC6C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BC80; } @@ -9026,15 +9384,23 @@ L_0898BC80: goto L_0898BC84; L_0898BC84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BC8C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BCA0; } @@ -9053,15 +9419,23 @@ L_0898BCA0: goto L_0898BCA4; L_0898BCA4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BCAC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BCC0; } @@ -9080,15 +9454,23 @@ L_0898BCC0: goto L_0898BCC4; L_0898BCC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BCCC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BCFC; } @@ -9106,7 +9488,6 @@ L_0898BCD8: L_0898BCE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(76)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BCF4; } @@ -9135,7 +9516,6 @@ L_0898BCFC: L_0898BD08: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(68)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BD18; } @@ -9149,15 +9529,23 @@ L_0898BD18: goto L_0898BD1C; L_0898BD1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BD24: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BD54; } @@ -9175,7 +9563,6 @@ L_0898BD30: L_0898BD3C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(78)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BD4C; } @@ -9204,7 +9591,6 @@ L_0898BD54: L_0898BD60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(70)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BD70; } @@ -9218,15 +9604,23 @@ L_0898BD70: goto L_0898BD74; L_0898BD74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BD7C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BDAC; } @@ -9244,7 +9638,6 @@ L_0898BD88: L_0898BD94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(80)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BDA4; } @@ -9273,7 +9666,6 @@ L_0898BDAC: L_0898BDB8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(72)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BDC8; } @@ -9287,15 +9679,23 @@ L_0898BDC8: goto L_0898BDCC; L_0898BDCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BDD4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-16128))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898BE04; } @@ -9313,7 +9713,6 @@ L_0898BDE0: L_0898BDEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(82)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BDFC; } @@ -9342,7 +9741,6 @@ L_0898BE04: L_0898BE10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(74)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898BE20; } @@ -9356,11 +9754,20 @@ L_0898BE20: goto L_0898BE24; L_0898BE24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BE2C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); @@ -9427,7 +9834,6 @@ L_0898BE98: } L_0898BEA0: { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_0898BEB0; } @@ -9456,7 +9862,17 @@ L_0898BEB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BEC8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -9467,7 +9883,6 @@ L_0898BEC8: AOT_REGCACHE_SYNC_OUT(); return; L_0898BEDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898BEF4; } @@ -9479,7 +9894,6 @@ L_0898BEE4: goto L_0898BD7C; L_0898BEEC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898BEFC; } @@ -9504,7 +9918,17 @@ L_0898BF00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BF10: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -9515,7 +9939,6 @@ L_0898BF10: AOT_REGCACHE_SYNC_OUT(); return; L_0898BF24: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898BF3C; } @@ -9527,7 +9950,6 @@ L_0898BF2C: goto L_0898BDD4; L_0898BF34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898BF44; } @@ -9552,7 +9974,17 @@ L_0898BF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BF58: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -9563,7 +9995,6 @@ L_0898BF58: AOT_REGCACHE_SYNC_OUT(); return; L_0898BF6C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898BF84; } @@ -9575,7 +10006,6 @@ L_0898BF74: goto L_0898BCCC; L_0898BF7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898BF8C; } @@ -9600,7 +10030,17 @@ L_0898BF90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BFA0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -9611,7 +10051,6 @@ L_0898BFA0: AOT_REGCACHE_SYNC_OUT(); return; L_0898BFB4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898BFCC; } @@ -9623,7 +10062,6 @@ L_0898BFBC: goto L_0898BD24; L_0898BFC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898BFD4; } @@ -9648,7 +10086,17 @@ L_0898BFD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BFE8: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); jump_target = aot_gpr_31; @@ -9656,7 +10104,17 @@ L_0898BFE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898BFF4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(44)))))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(40)))))); diff --git a/profiles/vcs/generated/generated_unit_0098.cpp b/profiles/vcs/generated/generated_unit_0098.cpp index f930f2e..9ab25d2 100644 --- a/profiles/vcs/generated/generated_unit_0098.cpp +++ b/profiles/vcs/generated/generated_unit_0098.cpp @@ -11,135 +11,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0098[4092] = { - 1, 0, 2, 0, 0, 3, 0, 0, 4, 5, 6, 0, 7, 0, 0, 8, 9, 10, 0, 0, 0, 11, 0, 0, 12, 0, 0, 13, 14, 0, 15, 0, - 0, 16, 0, 0, 17, 18, 19, 0, 20, 0, 0, 21, 22, 23, 0, 0, 0, 24, 0, 0, 25, 0, 0, 26, 27, 0, 28, 0, 0, 0, 0, 29, - 0, 30, 0, 31, 0, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 40, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, - 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 51, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, - 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 0, 62, 0, 63, 0, 0, 64, 0, 65, 0, 0, 66, 0, 0, 67, 0, - 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 76, 0, 77, 0, - 78, 0, 0, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 0, 94, 0, 95, 0, 96, 0, - 97, 0, 98, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 0, 103, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, - 0, 0, 0, 0, 106, 0, 107, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 112, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 0, 0, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, - 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 126, 0, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 0, 0, 0, 133, 0, 0, - 0, 134, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, - 0, 142, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 145, 0, 146, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, - 155, 0, 156, 0, 157, 0, 0, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, 165, 0, 166, 0, 167, 0, 168, 0, 0, - 169, 0, 0, 0, 170, 0, 0, 171, 0, 0, 172, 173, 0, 174, 0, 0, 0, 175, 0, 176, 0, 0, 177, 0, 178, 179, 0, 180, 0, 0, 181, 0, - 182, 0, 0, 183, 0, 184, 0, 185, 0, 0, 186, 0, 187, 0, 188, 0, 0, 189, 0, 190, 0, 191, 0, 0, 192, 0, 193, 0, 194, 0, 195, 196, - 0, 197, 0, 198, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, - 0, 203, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 206, 0, 0, 207, 0, 208, 0, 209, 0, 0, 0, 210, 0, 211, - 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 0, 217, 0, 218, 0, 219, 0, 220, 0, 0, 221, 0, 0, 0, 222, 0, 0, 223, 0, 0, 224, - 225, 0, 226, 0, 0, 0, 227, 0, 228, 0, 0, 229, 0, 230, 231, 0, 232, 0, 0, 233, 0, 234, 0, 0, 235, 0, 236, 0, 237, 0, 0, 238, - 0, 239, 0, 240, 0, 0, 241, 0, 242, 0, 243, 0, 0, 244, 0, 245, 0, 246, 0, 247, 248, 0, 249, 0, 250, 0, 251, 0, 0, 0, 0, 252, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 0, 264, 0, 0, 265, 0, 0, 266, 267, 268, - 0, 269, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 273, 274, 275, 0, 276, 277, 0, 0, 0, 0, 278, 0, 279, 0, 0, 280, 0, 281, 0, 0, - 282, 0, 283, 0, 0, 284, 0, 0, 0, 285, 0, 0, 286, 0, 0, 287, 0, 0, 288, 289, 290, 0, 291, 292, 0, 0, 0, 293, 0, 0, 294, 0, - 0, 295, 296, 297, 0, 298, 299, 0, 0, 0, 0, 300, 0, 0, 301, 0, 302, 0, 0, 303, 0, 304, 0, 0, 0, 0, 305, 0, 306, 0, 0, 307, - 308, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 311, 0, 0, 312, 0, 313, 0, 314, 0, 315, 0, 0, 316, 317, 318, 0, 319, 0, 0, - 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 332, 0, 0, - 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, - 346, 0, 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 351, 0, 0, 0, 0, 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 356, 357, 358, - 0, 359, 0, 0, 0, 0, 360, 0, 0, 361, 0, 362, 0, 363, 0, 0, 364, 365, 366, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, - 0, 369, 0, 370, 0, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 379, 0, 380, 0, 381, 0, - 0, 382, 0, 383, 0, 384, 0, 0, 385, 0, 386, 0, 387, 0, 0, 0, 388, 0, 0, 0, 0, 389, 0, 390, 391, 0, 392, 0, 0, 393, 0, 0, - 394, 0, 0, 395, 0, 396, 0, 397, 0, 398, 0, 399, 0, 0, 400, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 0, - 406, 0, 407, 0, 408, 0, 0, 409, 410, 411, 0, 412, 0, 0, 0, 0, 413, 0, 0, 414, 0, 415, 0, 416, 0, 417, 418, 0, 419, 0, 0, 0, - 0, 420, 0, 0, 421, 0, 422, 0, 0, 423, 0, 424, 0, 425, 0, 426, 0, 0, 427, 428, 429, 0, 430, 0, 0, 0, 0, 431, 0, 432, 433, 0, - 434, 0, 0, 0, 0, 435, 0, 0, 436, 0, 437, 0, 438, 0, 0, 439, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, 444, 0, 445, 0, - 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 0, 451, 0, 452, 0, 453, 0, 0, 454, 0, 455, 0, 456, 0, 457, 458, 0, 0, 0, 459, 0, 0, - 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 462, 0, 0, 463, 0, 464, 0, 465, 0, 466, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, - 469, 0, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, 478, 0, 479, 0, 480, 0, - 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 484, 0, 485, 0, 486, 0, 487, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, - 0, 490, 0, 491, 0, 492, 0, 0, 493, 0, 494, 495, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 498, 0, 499, 0, 0, 500, - 0, 501, 0, 502, 0, 503, 0, 0, 504, 505, 506, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 509, 0, 0, 510, 0, 511, 0, 0, 512, 0, 513, - 0, 514, 0, 515, 0, 0, 516, 517, 518, 0, 519, 0, 0, 0, 0, 520, 0, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 0, 0, - 0, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 535, 0, 536, 0, 537, 0, 538, - 0, 539, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, 0, 546, - 0, 547, 0, 548, 0, 0, 549, 0, 550, 0, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, - 558, 0, 559, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 563, 0, 564, 0, 565, 0, 566, 0, 567, 568, 0, 0, 569, 0, - 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 576, 0, 0, 577, 0, 0, 0, 578, 0, 579, 0, 0, 0, 580, 0, - 0, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 0, 0, 0, 585, 0, 586, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, 589, 0, 590, 0, 0, - 591, 0, 0, 0, 592, 0, 593, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 597, 0, 0, 598, 0, 0, 0, 599, 0, 600, 0, 0, 0, - 601, 0, 0, 0, 602, 0, 0, 603, 0, 604, 0, 0, 605, 0, 0, 0, 0, 606, 0, 0, 607, 0, 608, 0, 609, 0, 0, 610, 611, 612, 0, 613, - 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 615, 0, 0, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 620, 0, 621, 0, 0, 0, 622, 0, 623, - 0, 0, 0, 0, 624, 0, 625, 0, 626, 0, 627, 0, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 0, 0, - 645, 0, 646, 0, 647, 648, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 652, 0, 653, 0, 654, 0, 655, 0, - 0, 656, 0, 657, 0, 0, 658, 0, 0, 0, 659, 0, 660, 0, 661, 0, 662, 0, 663, 0, 664, 0, 665, 0, 666, 0, 0, 667, 0, 668, 0, 0, - 669, 670, 671, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 0, 0, 0, 680, 0, - 0, 681, 0, 682, 0, 683, 0, 684, 0, 685, 0, 686, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, 0, 690, 0, 0, 0, 0, 0, 691, - 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 695, 0, 696, 0, 697, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, - 0, 0, 699, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 701, 702, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, 0, 705, - 0, 706, 0, 0, 707, 0, 708, 0, 709, 0, 0, 0, 710, 711, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 714, - 0, 715, 0, 0, 0, 716, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 720, 721, 0, 0, 0, - 722, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 725, 0, 726, 0, 0, 0, 727, 0, 728, 0, 0, 0, 0, 729, 0, 730, 0, 0, 0, 0, - 731, 732, 0, 0, 733, 0, 0, 734, 0, 735, 0, 736, 0, 0, 737, 0, 0, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 740, 741, 0, - 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 743, 0, 744, 0, 745, 746, 0, 0, 747, 0, 0, 748, 0, 749, 0, 750, 0, 0, 0, 751, 752, 0, - 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 755, 0, 0, 0, 0, 756, 757, 0, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, - 760, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 764, - 765, 0, 766, 0, 0, 0, 0, 767, 0, 768, 0, 769, 0, 770, 771, 0, 772, 0, 0, 773, 0, 774, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 776, 0, 777, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 781, 782, 0, 783, - 0, 784, 785, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 787, 0, 788, 0, 789, 0, 790, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 797, 0, 798, 0, 799, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 801, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 804, 0, 0, 0, 0, 805, 0, 0, 0, 0, 806, 0, 0, 0, 807, 0, 808, 809, 0, 0, 0, 0, - 0, 0, 810, 0, 0, 0, 811, 0, 812, 813, 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 816, 817, 0, 0, 0, 0, 0, 0, - 818, 0, 0, 0, 819, 0, 820, 821, 0, 0, 0, 0, 0, 0, 822, 0, 0, 0, 823, 0, 824, 825, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, - 827, 0, 828, 829, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, 831, 0, 832, 833, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 835, 0, 836, 837, - 0, 0, 0, 0, 0, 838, 0, 0, 0, 839, 0, 840, 841, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 843, 0, 844, 845, 0, 0, 0, 0, 0, - 0, 846, 0, 0, 0, 847, 0, 848, 849, 0, 0, 0, 0, 0, 0, 850, 0, 0, 0, 851, 0, 852, 853, 0, 0, 0, 0, 0, 0, 854, 0, 0, - 0, 855, 0, 0, 856, 857, 858, 0, 859, 0, 0, 0, 860, 0, 0, 0, 861, 0, 862, 0, 863, 0, 864, 0, 865, 866, 0, 867, 0, 0, 0, 0, - 868, 0, 0, 869, 870, 871, 0, 872, 0, 873, 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 876, 0, 0, 877, 0, 0, 878, 0, 0, - 879, 0, 880, 0, 0, 881, 0, 882, 0, 0, 883, 884, 0, 885, 0, 0, 886, 0, 0, 887, 0, 0, 888, 0, 0, 889, 0, 0, 890, 0, 0, 891, - 0, 0, 892, 0, 0, 893, 0, 0, 894, 0, 0, 895, 0, 0, 896, 0, 0, 897, 0, 0, 898, 0, 0, 899, 0, 0, 900, 0, 0, 901, 0, 0, - 902, 0, 0, 903, 0, 0, 904, 0, 905, 0, 0, 0, 0, 0, 906, 907, 0, 908, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, 910, 0, 0, - 911, 912, 0, 0, 913, 0, 914, 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 916, 0, 0, 0, 0, 0, 0, - 917, 0, 0, 0, 918, 0, 919, 0, 920, 0, 921, 0, 0, 0, 0, 922, 0, 923, 0, 0, 924, 0, 925, 0, 926, 0, 0, 0, 927, 0, 928, 0, - 0, 929, 0, 930, 0, 0, 0, 931, 0, 932, 0, 0, 933, 0, 934, 0, 0, 0, 935, 0, 936, 0, 0, 937, 0, 938, 0, 0, 0, 939, 0, 940, - 0, 0, 941, 0, 942, 0, 0, 0, 943, 0, 944, 0, 0, 0, 945, 0, 946, 0, 0, 0, 947, 0, 948, 0, 0, 949, 0, 950, 0, 0, 0, 951, - 0, 952, 0, 0, 953, 0, 954, 0, 0, 0, 955, 0, 956, 0, 0, 957, 0, 958, 0, 0, 0, 959, 0, 960, 0, 0, 961, 0, 962, 0, 0, 0, - 963, 0, 964, 0, 0, 965, 0, 966, 0, 0, 0, 967, 0, 968, 0, 0, 969, 0, 970, 0, 0, 0, 971, 0, 972, 0, 0, 973, 0, 974, 0, 0, - 0, 975, 0, 976, 0, 0, 977, 0, 978, 0, 0, 0, 979, 0, 980, 0, 0, 981, 0, 982, 0, 0, 0, 983, 0, 984, 0, 0, 985, 0, 986, 0, - 0, 0, 987, 0, 988, 0, 0, 989, 0, 990, 0, 0, 0, 991, 0, 992, 0, 0, 993, 0, 994, 0, 0, 0, 995, 0, 996, 0, 0, 997, 0, 998, - 0, 0, 0, 999, 0, 1000, 0, 0, 1001, 0, 1002, 0, 0, 0, 1003, 0, 1004, 0, 0, 1005, 0, 1006, 0, 0, 0, 1007, 0, 1008, 0, 0, 1009, 0, - 1010, 0, 0, 0, 1011, 0, 1012, 0, 0, 1013, 0, 1014, 0, 0, 0, 1015, 0, 1016, 0, 0, 1017, 0, 1018, 0, 0, 0, 1019, 0, 1020, 0, 0, 1021, - 0, 1022, 0, 0, 0, 1023, 0, 1024, 0, 0, 1025, 0, 1026, 0, 0, 0, 1027, 0, 1028, 0, 0, 1029, 0, 1030, 0, 0, 0, 1031, 0, 1032, 0, 0, - 0, 0, 0, 0, 0, 1033, 0, 1034, 1035, 0, 0, 1036, 0, 0, 1037, 0, 0, 1038, 0, 1039, 1040, 0, 1041, 0, 1042, 0, 0, 0, 0, 0, 1043, 0, - 1044, 0, 0, 0, 1045, 0, 1046, 0, 0, 0, 0, 0, 0, 0, 1047, 0, 1048, 1049, 0, 0, 1050, 0, 0, 1051, 0, 0, 1052, 0, 1053, 1054, 0, 1055, - 0, 1056, 0, 0, 0, 0, 0, 1057, 0, 1058, 0, 0, 0, 1059, 0, 1060, 0, 0, 1061, 0, 1062, 0, 0, 0, 1063, 0, 1064, 0, 0, 1065, 0, 1066, - 0, 0, 0, 1067, 0, 1068, 0, 0, 1069, 0, 1070, 0, 0, 0, 1071, 0, 1072, 0, 0, 1073, 0, 1074, 0, 0, 0, 1075, 0, 1076, 0, 0, 1077, 0, - 1078, 0, 0, 0, 1079, 0, 1080, 0, 0, 1081, 0, 1082, 0, 0, 0, 1083, 0, 1084, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 1086, 0, 0, 0, 0, - 0, 1087, 0, 0, 1088, 0, 0, 1089, 0, 1090, 0, 0, 1091, 0, 0, 1092, 0, 0, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 1095, 0, - 0, 1096, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 1099, 0, 0, 0, 0, 0, 1100, 0, 1101, 1102, 0, 0, 0, 0, 1103, - 0, 1104, 0, 0, 1105, 0, 1106, 0, 1107, 0, 0, 0, 1108, 0, 1109, 0, 1110, 0, 0, 0, 1111, 0, 1112, 0, 1113, 0, 0, 0, 0, 0, 0, 0, - 0, 1114, 0, 1115, 0, 1116, 0, 1117, 0, 0, 1118, 0, 1119, 0, 0, 1120, 0, 1121, 0, 0, 1122, 0, 0, 0, 1123, 0, 0, 1124, 0, 1125, 0, 0, - 0, 0, 0, 0, 0, 1126, 0, 0, 0, 0, 0, 0, 0, 1127, 0, 0, 0, 0, 1128, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 0, 0, 1130, 0, - 0, 0, 0, 0, 0, 0, 1131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 1134, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 0, 0, 0, 1136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1137, 0, 0, 1138, 0, 0, 1139, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 0, 0, 0, 1141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 1144, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 1147, 0, 0, 0, 1148, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 1151, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 1153, 0, 0, 0, 0, 0, 1154, 0, 0, 1155, 1156, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 1158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, - 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 0, 1164, 0, 0, 1165, 0, 0, 0, - 0, 0, 1166, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 1168, 0, 1169, 0, 1170, 1171, 0, 0, 0, 0, 0, 0, 1172, 0, 1173, 0, 0, - 0, 0, 0, 0, 0, 1174, 0, 0, 1175, 0, 0, 0, 0, 0, 1176, 1177, 0, 0, 0, 0, 1178, 0, 0, 0, 0, 1179, 0, 0, 0, 1180, 0, 0, - 0, 0, 0, 0, 0, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1182, 0, 0, 0, 0, 1183, 0, 1184, 0, 0, 1185, 0, 0, - 0, 0, 1186, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 1188, 0, 0, 0, 1189, 0, 0, 0, 0, 1190, 0, 0, 0, 1191, 0, 0, 0, 0, 0, 0, - 0, 1192, 0, 0, 1193, 0, 0, 1194, 1195, 0, 0, 0, 0, 1196, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 1198, 0, 0, 0, 0, 1199, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 1204, 0, 1205, 0, 0, 1206, 0, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1209, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 1213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 1217, 0, 0, 1218, 1219, 0, 0, - 1220, 0, 0, 1221, 1222, 0, 0, 1223, 0, 0, 1224, 0, 0, 0, 1225, 0, 0, 0, 0, 0, 1226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 1228, 0, 1229, 0, 0, 1230, 0, 0, 0, 1231, 0, 0, 0, 0, 0, 0, 0, 1232, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0098[64] = { + 0x8592397259239725ull, 0x1004D5554135554Aull, 0x52802155494A5555ull, 0x54A804202A025551ull, + 0x086A055009250115ull, 0x21554880442AA910ull, 0x4010D40AA0124A02ull, 0x2A95551528005400ull, + 0xD52A54A94B4A2C91ull, 0xA2A5000A8008021Aull, 0x95296945922552AAull, 0x02A00200855AA54Aull, + 0x29437246E4955440ull, 0x9429486E48DC9225ull, 0x355555102E552121ull, 0xE5485509AAAAA881ull, + 0x5522554A20172A42ull, 0x52484AA925A1152Aull, 0x685CAA5216A90B95ull, 0x2354A955542A9521ull, + 0x55204AA902554812ull, 0x95008D2A012AA409ull, 0x155485CAA521472Aull, 0xA401110AAA502554ull, + 0x4D54810D4825494Aull, 0x291144A445135520ull, 0xB9521291144A4451ull, 0x082AA550A2AA8500ull, + 0x5528023515555500ull, 0x42AA90872955544Aull, 0x102A805082540AAAull, 0x84083152A0460204ull, + 0x0A14550118081062ull, 0x62A4D40461084A93ull, 0xA010000502118421ull, 0xB420003400A96A85ull, + 0x01100040022A8406ull, 0x0002A00015080020ull, 0x034103440D108420ull, 0xD103440D103440D1ull, + 0x206881A206881A20ull, 0x249012B90B551172ull, 0x2492492492492CA5ull, 0x020080532042C149ull, + 0xA294528A51528551ull, 0x14A294528A514514ull, 0x528A514A294528A5ull, 0x4A294528A514A294ull, + 0x28A514A294528A51ull, 0xB4934051415A49A0ull, 0x4A294528A514A282ull, 0x4804929208128A51ull, + 0x0151515286821012ull, 0x48042020291294AAull, 0x4900420040210040ull, 0x0221040092008200ull, + 0x0190404004100008ull, 0x1280401040200808ull, 0x2210C120281A8104ull, 0x0221108425080020ull, + 0x0041010042202192ull, 0x0041100100225080ull, 0x3220088000002200ull, 0x0808942000104499ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0098[64] = { + 1u, 30u, 54u, 78u, 97u, 115u, 134u, 150u, 169u, 197u, 212u, 239u, 257u, 282u, 308u, 333u, + 359u, 382u, 406u, 434u, 460u, 481u, 501u, 527u, 547u, 570u, 591u, 614u, 634u, 656u, 681u, 699u, + 715u, 731u, 753u, 765u, 784u, 795u, 803u, 818u, 838u, 855u, 879u, 902u, 917u, 941u, 963u, 987u, + 1010u, 1033u, 1056u, 1078u, 1096u, 1114u, 1131u, 1140u, 1149u, 1157u, 1166u, 1181u, 1192u, 1203u, 1212u, 1220u, }; void recomp_unit_0098_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -160,13 +55,25 @@ void recomp_unit_0098_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0898C000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0098[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0098[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0098[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0898C000; @@ -1413,7 +1320,17 @@ L_0898C000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C008: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(44)))))); { const bool branch_taken = aot_gpr_5 != 0u; @@ -1467,7 +1384,17 @@ L_0898C044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C054: ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); { const bool branch_taken = ctx.gpr[6] == 0u; @@ -1480,7 +1407,6 @@ L_0898C054: L_0898C060: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(92)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C070; } @@ -1495,7 +1421,17 @@ L_0898C070: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C078: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(44)))))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -1549,7 +1485,17 @@ L_0898C0B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C0C4: ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); { const bool branch_taken = ctx.gpr[6] == 0u; @@ -1562,7 +1508,6 @@ L_0898C0C4: L_0898C0D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(92)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C0E0; } @@ -1577,7 +1522,17 @@ L_0898C0E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C0E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(150))); @@ -1591,7 +1546,6 @@ L_0898C0E8: } L_0898C0FC: { const bool branch_taken = static_cast(ctx.gpr[6]) < 0; - // nop if (branch_taken) { goto L_0898C138; } @@ -1599,7 +1553,6 @@ L_0898C0FC: } L_0898C104: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C118; } @@ -1608,7 +1561,6 @@ L_0898C104: L_0898C10C: ctx.gpr[7] = (0u | 2u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_0898C138; } @@ -1616,7 +1568,6 @@ L_0898C10C: } L_0898C118: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898C128; } @@ -1624,7 +1575,6 @@ L_0898C118: } L_0898C120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C138; } @@ -1632,12 +1582,10 @@ L_0898C120: } L_0898C128: aot_gpr_31 = (0x0898C130u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 998u, 0x0898BD24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C130u) goto L_0898C130; AOT_REGCACHE_SYNC_OUT(); return; L_0898C130: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C154; } @@ -1645,7 +1593,6 @@ L_0898C130: } L_0898C138: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898C150; } @@ -1653,12 +1600,10 @@ L_0898C138: } L_0898C140: aot_gpr_31 = (0x0898C148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 988u, 0x0898BCCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C148u) goto L_0898C148; AOT_REGCACHE_SYNC_OUT(); return; L_0898C148: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C154; } @@ -1674,7 +1619,17 @@ L_0898C154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C160: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(150))); @@ -1689,7 +1644,6 @@ L_0898C160: } L_0898C178: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0898C1B8; } @@ -1697,7 +1651,6 @@ L_0898C178: } L_0898C180: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_0898C1A8; } @@ -1705,7 +1658,6 @@ L_0898C180: } L_0898C188: aot_gpr_31 = (0x0898C190u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 972u, 0x0898BC4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C190u) goto L_0898C190; AOT_REGCACHE_SYNC_OUT(); return; L_0898C190: @@ -1726,7 +1678,6 @@ L_0898C198: } L_0898C1A0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898C1B8; } @@ -1734,7 +1685,6 @@ L_0898C1A0: } L_0898C1A8: aot_gpr_31 = (0x0898C1B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 976u, 0x0898BC6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C1B0u) goto L_0898C1B0; AOT_REGCACHE_SYNC_OUT(); return; L_0898C1B0: @@ -1755,7 +1705,17 @@ L_0898C1BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C1C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -1766,7 +1726,6 @@ L_0898C1C8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C220; } @@ -1782,7 +1741,6 @@ L_0898C1F0: goto L_0898C200; L_0898C200: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0898C210; } @@ -1803,7 +1761,6 @@ L_0898C210: AOT_REGCACHE_SYNC_OUT(); return; L_0898C218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C2A0; } @@ -1819,7 +1776,6 @@ L_0898C220: } L_0898C228: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C208; } @@ -1827,13 +1783,11 @@ L_0898C228: } L_0898C230: aot_gpr_31 = (0x0898C238u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C238u) goto L_0898C238; AOT_REGCACHE_SYNC_OUT(); return; L_0898C238: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898C26C; } @@ -1847,7 +1801,6 @@ L_0898C244: L_0898C24C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898C290; } @@ -1861,7 +1814,6 @@ L_0898C258: L_0898C260: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898C290; } @@ -1870,7 +1822,6 @@ L_0898C260: L_0898C26C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C280; } @@ -1878,7 +1829,6 @@ L_0898C26C: } L_0898C278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C208; } @@ -1891,7 +1841,6 @@ L_0898C280: AOT_REGCACHE_SYNC_OUT(); return; L_0898C288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C2A0; } @@ -1904,7 +1853,6 @@ L_0898C290: AOT_REGCACHE_SYNC_OUT(); return; L_0898C298: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C2A0; } @@ -1922,7 +1870,17 @@ L_0898C2A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C2B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -1941,13 +1899,11 @@ L_0898C2B4: } L_0898C2DC: aot_gpr_31 = (0x0898C2E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C2E4u) goto L_0898C2E4; AOT_REGCACHE_SYNC_OUT(); return; L_0898C2E4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C300; } @@ -1955,7 +1911,6 @@ L_0898C2E4: } L_0898C2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C310; } @@ -1973,7 +1928,6 @@ L_0898C300: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898C364; } @@ -1981,7 +1935,6 @@ L_0898C300: } L_0898C310: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0898C330; } @@ -2037,7 +1990,6 @@ L_0898C364: AOT_REGCACHE_SYNC_OUT(); return; L_0898C36C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C394; } @@ -2065,7 +2017,17 @@ L_0898C394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C3A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -2075,7 +2037,6 @@ L_0898C3A8: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C400; } @@ -2087,7 +2048,6 @@ L_0898C3CC: goto L_0898CF8C; L_0898C3D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898C3F8; } @@ -2104,7 +2064,6 @@ L_0898C3DC: } L_0898C3E8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C408; } @@ -2147,7 +2106,17 @@ L_0898C410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2164,7 +2133,6 @@ L_0898C420: } L_0898C440: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C4D4; } @@ -2234,7 +2202,6 @@ L_0898C4A8: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C4CC; } @@ -2250,7 +2217,6 @@ L_0898C4C4: } L_0898C4CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C4D8; } @@ -2271,7 +2237,17 @@ L_0898C4D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C4EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -2281,7 +2257,6 @@ L_0898C4EC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C544; } @@ -2291,7 +2266,6 @@ L_0898C510: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C53C; } @@ -2308,7 +2282,6 @@ L_0898C520: } L_0898C52C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C54C; } @@ -2358,7 +2331,17 @@ L_0898C568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -2368,7 +2351,6 @@ L_0898C578: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C5D0; } @@ -2378,7 +2360,6 @@ L_0898C59C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C5C8; } @@ -2395,7 +2376,6 @@ L_0898C5AC: } L_0898C5B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C5D8; } @@ -2445,7 +2425,17 @@ L_0898C5F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C604: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2462,7 +2452,6 @@ L_0898C604: } L_0898C624: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C6B8; } @@ -2532,7 +2521,6 @@ L_0898C68C: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C6B0; } @@ -2548,7 +2536,6 @@ L_0898C6A8: } L_0898C6B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C6BC; } @@ -2569,7 +2556,17 @@ L_0898C6BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C6D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -2580,7 +2577,6 @@ L_0898C6D0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C730; } @@ -2606,7 +2602,6 @@ L_0898C6F8: } L_0898C728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C76C; } @@ -2633,7 +2628,6 @@ L_0898C738: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898C788; } @@ -2641,13 +2635,11 @@ L_0898C738: } L_0898C76C: aot_gpr_31 = (0x0898C774u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C774u) goto L_0898C774; AOT_REGCACHE_SYNC_OUT(); return; L_0898C774: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0898C790; } @@ -2655,7 +2647,6 @@ L_0898C774: } L_0898C780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C834; } @@ -2689,7 +2680,6 @@ L_0898C7A0: } L_0898C7A8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898C7C8; } @@ -2706,7 +2696,6 @@ L_0898C7B8: goto L_0898CF8C; L_0898C7C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898C7E4; } @@ -2720,7 +2709,6 @@ L_0898C7C8: L_0898C7D0: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898C810; } @@ -2728,7 +2716,6 @@ L_0898C7D0: } L_0898C7DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C7EC; } @@ -2750,7 +2737,6 @@ L_0898C7EC: L_0898C7F4: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898C834; } @@ -2760,7 +2746,6 @@ L_0898C800: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 198u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898C834; } @@ -2778,7 +2763,6 @@ L_0898C810: L_0898C81C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898C82C; } @@ -2805,7 +2789,6 @@ L_0898C834: goto L_0898C844; L_0898C844: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0898C878; } @@ -2833,7 +2816,6 @@ L_0898C860: goto L_0898C864; L_0898C864: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898C878; } @@ -2842,7 +2824,6 @@ L_0898C864: L_0898C86C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C904; } @@ -2871,7 +2852,6 @@ L_0898C88C: goto L_0898C894; L_0898C894: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898C8B0; } @@ -2917,7 +2897,6 @@ L_0898C8C4: goto L_0898C8CC; L_0898C8CC: { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_0898C8E8; } @@ -2934,7 +2913,6 @@ L_0898C8D4: } L_0898C8E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C8FC; } @@ -2950,7 +2928,6 @@ L_0898C8E8: } L_0898C8F0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898C8FC; } @@ -2987,7 +2964,17 @@ L_0898C910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898C924: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -2998,7 +2985,6 @@ L_0898C924: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898C984; } @@ -3024,7 +3010,6 @@ L_0898C94C: } L_0898C97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898C9C0; } @@ -3051,7 +3036,6 @@ L_0898C98C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898C9DC; } @@ -3059,13 +3043,11 @@ L_0898C98C: } L_0898C9C0: aot_gpr_31 = (0x0898C9C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898C9C8u) goto L_0898C9C8; AOT_REGCACHE_SYNC_OUT(); return; L_0898C9C8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0898C9E4; } @@ -3073,7 +3055,6 @@ L_0898C9C8: } L_0898C9D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CA88; } @@ -3107,7 +3088,6 @@ L_0898C9F4: } L_0898C9FC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898CA1C; } @@ -3124,7 +3104,6 @@ L_0898CA0C: goto L_0898CF8C; L_0898CA14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898CA38; } @@ -3138,7 +3117,6 @@ L_0898CA1C: L_0898CA24: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898CA64; } @@ -3146,7 +3124,6 @@ L_0898CA24: } L_0898CA30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CA40; } @@ -3168,7 +3145,6 @@ L_0898CA40: L_0898CA48: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898CA88; } @@ -3178,7 +3154,6 @@ L_0898CA54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 198u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898CA88; } @@ -3196,7 +3171,6 @@ L_0898CA64: L_0898CA70: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CA80; } @@ -3223,7 +3197,6 @@ L_0898CA88: goto L_0898CA98; L_0898CA98: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0898CACC; } @@ -3251,7 +3224,6 @@ L_0898CAB4: goto L_0898CAB8; L_0898CAB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898CACC; } @@ -3260,7 +3232,6 @@ L_0898CAB8: L_0898CAC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898CB58; } @@ -3289,7 +3260,6 @@ L_0898CAE0: goto L_0898CAE8; L_0898CAE8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CB04; } @@ -3335,7 +3305,6 @@ L_0898CB18: goto L_0898CB20; L_0898CB20: { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_0898CB3C; } @@ -3352,7 +3321,6 @@ L_0898CB28: } L_0898CB34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CB50; } @@ -3368,7 +3336,6 @@ L_0898CB3C: } L_0898CB44: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CB50; } @@ -3406,7 +3373,17 @@ L_0898CB68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898CB7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -3417,7 +3394,6 @@ L_0898CB7C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898CBDC; } @@ -3443,7 +3419,6 @@ L_0898CBA4: } L_0898CBD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CC18; } @@ -3470,7 +3445,6 @@ L_0898CBE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898CC38; } @@ -3486,7 +3460,6 @@ L_0898CC18: goto L_0898CC28; L_0898CC28: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0898CDFC; } @@ -3494,7 +3467,6 @@ L_0898CC28: } L_0898CC30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CC50; } @@ -3510,7 +3482,6 @@ L_0898CC38: } L_0898CC40: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898CCD8; } @@ -3518,7 +3489,6 @@ L_0898CC40: } L_0898CC48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CDFC; } @@ -3559,7 +3529,6 @@ L_0898CC78: goto L_0898CC7C; L_0898CC7C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898CC88; } @@ -3604,7 +3573,6 @@ L_0898CCB4: goto L_0898CCB8; L_0898CCB8: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0898CCC4; } @@ -3626,13 +3594,11 @@ L_0898CCC4: } L_0898CCD8: aot_gpr_31 = (0x0898CCE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898CCE0u) goto L_0898CCE0; AOT_REGCACHE_SYNC_OUT(); return; L_0898CCE0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898CDAC; } @@ -3646,7 +3612,6 @@ L_0898CCEC: L_0898CCF4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898CD24; } @@ -3660,7 +3625,6 @@ L_0898CD00: L_0898CD08: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898CDAC; } @@ -3670,7 +3634,6 @@ L_0898CD14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 198u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898CDAC; } @@ -3711,7 +3674,6 @@ L_0898CD4C: goto L_0898CD50; L_0898CD50: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898CD5C; } @@ -3756,7 +3718,6 @@ L_0898CD88: goto L_0898CD8C; L_0898CD8C: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_0898CD98; } @@ -3779,7 +3740,6 @@ L_0898CD98: L_0898CDAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898CDFC; } @@ -3793,7 +3753,6 @@ L_0898CDB8: L_0898CDC0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0898CDD4; } @@ -3812,7 +3771,6 @@ L_0898CDD4: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_4) < 30 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898CDFC; } @@ -3847,11 +3805,20 @@ L_0898CE00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898CE14: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CE50; } @@ -3862,7 +3829,6 @@ L_0898CE20: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CE48; } @@ -3879,7 +3845,6 @@ L_0898CE34: } L_0898CE40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CE68; } @@ -3904,7 +3869,6 @@ L_0898CE50: L_0898CE58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898CE68; } @@ -3918,11 +3882,20 @@ L_0898CE68: goto L_0898CE6C; L_0898CE6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898CE74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -3930,7 +3903,6 @@ L_0898CE74: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CEA8; } @@ -3940,7 +3912,6 @@ L_0898CE90: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(150))); ctx.gpr[6] = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_0898CEB0; } @@ -3964,7 +3935,6 @@ L_0898CEA8: } L_0898CEB0: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0898CEF0; } @@ -3972,7 +3942,6 @@ L_0898CEB0: } L_0898CEB8: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_0898CEE0; } @@ -3980,7 +3949,6 @@ L_0898CEB8: } L_0898CEC0: aot_gpr_31 = (0x0898CEC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 976u, 0x0898BC6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898CEC8u) goto L_0898CEC8; AOT_REGCACHE_SYNC_OUT(); return; L_0898CEC8: @@ -4001,7 +3969,6 @@ L_0898CED0: } L_0898CED8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898CEF0; } @@ -4009,7 +3976,6 @@ L_0898CED8: } L_0898CEE0: aot_gpr_31 = (0x0898CEE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 972u, 0x0898BC4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898CEE8u) goto L_0898CEE8; AOT_REGCACHE_SYNC_OUT(); return; L_0898CEE8: @@ -4030,7 +3996,17 @@ L_0898CEF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898CF00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -4038,7 +4014,6 @@ L_0898CF00: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CF34; } @@ -4048,7 +4023,6 @@ L_0898CF1C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(150))); ctx.gpr[6] = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_0898CF3C; } @@ -4072,7 +4046,6 @@ L_0898CF34: } L_0898CF3C: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_0898CF7C; } @@ -4080,7 +4053,6 @@ L_0898CF3C: } L_0898CF44: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_0898CF6C; } @@ -4088,12 +4060,10 @@ L_0898CF44: } L_0898CF4C: aot_gpr_31 = (0x0898CF54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 998u, 0x0898BD24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898CF54u) goto L_0898CF54; AOT_REGCACHE_SYNC_OUT(); return; L_0898CF54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CF80; } @@ -4109,7 +4079,6 @@ L_0898CF5C: } L_0898CF64: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898CF7C; } @@ -4117,12 +4086,10 @@ L_0898CF64: } L_0898CF6C: aot_gpr_31 = (0x0898CF74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 988u, 0x0898BCCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898CF74u) goto L_0898CF74; AOT_REGCACHE_SYNC_OUT(); return; L_0898CF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CF80; } @@ -4138,13 +4105,22 @@ L_0898CF80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898CF8C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898CFA8; } @@ -4164,17 +4140,25 @@ L_0898CFA8: goto L_0898CFB0; L_0898CFB0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898CFB8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898CFE0; } @@ -4191,7 +4175,6 @@ L_0898CFCC: } L_0898CFD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898CFF8; } @@ -4208,7 +4191,6 @@ L_0898CFE0: L_0898CFE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(94)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898CFF8; } @@ -4222,17 +4204,25 @@ L_0898CFF8: goto L_0898CFFC; L_0898CFFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D004: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D02C; } @@ -4249,7 +4239,6 @@ L_0898D018: } L_0898D024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898D044; } @@ -4266,7 +4255,6 @@ L_0898D02C: L_0898D034: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(94)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D044; } @@ -4280,11 +4268,20 @@ L_0898D044: goto L_0898D048; L_0898D048: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D050: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -4294,7 +4291,6 @@ L_0898D050: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D0A0; } @@ -4310,7 +4306,6 @@ L_0898D074: goto L_0898D084; L_0898D084: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0898D0F0; } @@ -4343,7 +4338,6 @@ L_0898D0A0: } L_0898D0A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D0F0; } @@ -4351,13 +4345,11 @@ L_0898D0A8: } L_0898D0B0: aot_gpr_31 = (0x0898D0B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D0B8u) goto L_0898D0B8; AOT_REGCACHE_SYNC_OUT(); return; L_0898D0B8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D0E8; } @@ -4367,7 +4359,6 @@ L_0898D0C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898D0E8; } @@ -4456,13 +4447,22 @@ L_0898D130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D140: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D15C; } @@ -4490,15 +4490,23 @@ L_0898D15C: goto L_0898D160; L_0898D160: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D168: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D194; } @@ -4507,7 +4515,6 @@ L_0898D168: L_0898D174: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(156))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D194; } @@ -4516,7 +4523,6 @@ L_0898D174: L_0898D180: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(167))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D19C; } @@ -4544,11 +4550,20 @@ L_0898D19C: goto L_0898D1A4; L_0898D1A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D1AC: aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(40)))))); jump_target = aot_gpr_31; @@ -4556,13 +4571,22 @@ L_0898D1AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D1B8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D208; } @@ -4571,7 +4595,6 @@ L_0898D1B8: L_0898D1CC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(167))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D200; } @@ -4580,7 +4603,6 @@ L_0898D1CC: L_0898D1D8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(156))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D1F8; } @@ -4597,7 +4619,6 @@ L_0898D1E4: } L_0898D1F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898D220; } @@ -4630,7 +4651,6 @@ L_0898D208: L_0898D210: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(90)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D220; } @@ -4644,17 +4664,25 @@ L_0898D220: goto L_0898D224; L_0898D224: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D22C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D25C; } @@ -4671,7 +4699,6 @@ L_0898D240: } L_0898D24C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D264; } @@ -4698,17 +4725,25 @@ L_0898D264: goto L_0898D268; L_0898D268: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D270: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D2B4; } @@ -4725,7 +4760,6 @@ L_0898D284: } L_0898D290: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D2AC; } @@ -4742,7 +4776,6 @@ L_0898D298: } L_0898D2A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898D2CC; } @@ -4767,7 +4800,6 @@ L_0898D2B4: L_0898D2BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(94)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D2CC; } @@ -4781,17 +4813,25 @@ L_0898D2CC: goto L_0898D2D0; L_0898D2D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D2D8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D2F4; } @@ -4819,17 +4859,25 @@ L_0898D2F4: goto L_0898D2F8; L_0898D2F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D300: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D328; } @@ -4879,11 +4927,20 @@ L_0898D344: goto L_0898D34C; L_0898D34C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D354: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4894,7 +4951,6 @@ L_0898D354: AOT_REGCACHE_SYNC_OUT(); return; L_0898D368: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D3B4; } @@ -4907,7 +4963,6 @@ L_0898D370: AOT_REGCACHE_SYNC_OUT(); return; L_0898D378: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D3B4; } @@ -4920,7 +4975,6 @@ L_0898D380: AOT_REGCACHE_SYNC_OUT(); return; L_0898D388: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D3B4; } @@ -4933,7 +4987,6 @@ L_0898D390: AOT_REGCACHE_SYNC_OUT(); return; L_0898D398: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D3B4; } @@ -4979,7 +5032,6 @@ L_0898D3C8: goto L_0898D3D0; L_0898D3D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D3E0; } @@ -5004,12 +5056,21 @@ L_0898D3E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D3F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x0898D404u); - // nop goto L_0898D354; L_0898D404: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5018,7 +5079,17 @@ L_0898D404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5026,7 +5097,6 @@ L_0898D410: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D448; } @@ -5043,7 +5113,6 @@ L_0898D42C: } L_0898D438: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D450; } @@ -5067,7 +5136,6 @@ L_0898D448: } L_0898D450: aot_gpr_31 = (0x0898D458u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 1018u, 0x0898BDD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D458u) goto L_0898D458; AOT_REGCACHE_SYNC_OUT(); return; L_0898D458: @@ -5077,7 +5145,17 @@ L_0898D458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D464: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5085,7 +5163,6 @@ L_0898D464: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D49C; } @@ -5102,7 +5179,6 @@ L_0898D480: } L_0898D48C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D4A4; } @@ -5126,7 +5202,6 @@ L_0898D49C: } L_0898D4A4: aot_gpr_31 = (0x0898D4ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 1008u, 0x0898BD7Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D4ACu) goto L_0898D4AC; AOT_REGCACHE_SYNC_OUT(); return; L_0898D4AC: @@ -5136,7 +5211,17 @@ L_0898D4AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D4B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5144,7 +5229,6 @@ L_0898D4B8: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D4F0; } @@ -5161,7 +5245,6 @@ L_0898D4D4: } L_0898D4E0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D4F8; } @@ -5185,7 +5268,6 @@ L_0898D4F0: } L_0898D4F8: aot_gpr_31 = (0x0898D500u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 1008u, 0x0898BD7Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D500u) goto L_0898D500; AOT_REGCACHE_SYNC_OUT(); return; L_0898D500: @@ -5195,7 +5277,17 @@ L_0898D500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D50C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5203,7 +5295,6 @@ L_0898D50C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D544; } @@ -5220,7 +5311,6 @@ L_0898D528: } L_0898D534: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D54C; } @@ -5244,7 +5334,6 @@ L_0898D544: } L_0898D54C: aot_gpr_31 = (0x0898D554u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 1018u, 0x0898BDD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D554u) goto L_0898D554; AOT_REGCACHE_SYNC_OUT(); return; L_0898D554: @@ -5254,7 +5343,17 @@ L_0898D554: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D560: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5264,7 +5363,6 @@ L_0898D560: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D5A0; } @@ -5276,7 +5374,6 @@ L_0898D584: goto L_0898DAFC; L_0898D58C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D5A8; } @@ -5310,7 +5407,17 @@ L_0898D5AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D5BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5320,7 +5427,6 @@ L_0898D5BC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D60C; } @@ -5332,7 +5438,6 @@ L_0898D5E0: goto L_0898DAFC; L_0898D5E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D604; } @@ -5349,7 +5454,6 @@ L_0898D5F0: } L_0898D5FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898D624; } @@ -5374,7 +5478,6 @@ L_0898D60C: L_0898D614: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(64)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D624; } @@ -5394,20 +5497,39 @@ L_0898D628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D638: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D640: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D684; } @@ -5424,7 +5546,6 @@ L_0898D654: } L_0898D660: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D67C; } @@ -5441,7 +5562,6 @@ L_0898D668: } L_0898D674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898D69C; } @@ -5466,7 +5586,6 @@ L_0898D684: L_0898D68C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(88)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D69C; } @@ -5480,17 +5599,25 @@ L_0898D69C: goto L_0898D6A0; L_0898D6A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D6A8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D6D8; } @@ -5507,7 +5634,6 @@ L_0898D6BC: } L_0898D6C8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D6E0; } @@ -5535,11 +5661,20 @@ L_0898D6E0: goto L_0898D6E8; L_0898D6E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D6F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5566,7 +5701,6 @@ L_0898D710: } L_0898D718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898D734; } @@ -5600,7 +5734,6 @@ L_0898D734: } L_0898D750: { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_0898D78C; } @@ -5625,7 +5758,6 @@ L_0898D764: } L_0898D76C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D784; } @@ -5637,7 +5769,6 @@ L_0898D774: goto L_0898D6A8; L_0898D77C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D7A0; } @@ -5676,7 +5807,17 @@ L_0898D7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D7C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5687,7 +5828,6 @@ L_0898D7C0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898D7FC; } @@ -5696,7 +5836,6 @@ L_0898D7C0: L_0898D7E8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(150))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_0898D888; } @@ -5720,7 +5859,6 @@ L_0898D7FC: } L_0898D804: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D888; } @@ -5729,7 +5867,6 @@ L_0898D804: L_0898D80C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(42)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898D888; } @@ -5793,7 +5930,6 @@ L_0898D86C: goto L_0898D878; L_0898D878: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0898D888; } @@ -5822,7 +5958,17 @@ L_0898D88C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D8A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5830,7 +5976,6 @@ L_0898D8A0: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D8E0; } @@ -5839,7 +5984,6 @@ L_0898D8A0: L_0898D8BC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(14)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D8D8; } @@ -5847,12 +5991,10 @@ L_0898D8BC: } L_0898D8C8: aot_gpr_31 = (0x0898D8D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 1008u, 0x0898BD7Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D8D0u) goto L_0898D8D0; AOT_REGCACHE_SYNC_OUT(); return; L_0898D8D0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D8E8; } @@ -5884,7 +6026,17 @@ L_0898D8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D8F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -5892,7 +6044,6 @@ L_0898D8F8: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D938; } @@ -5901,7 +6052,6 @@ L_0898D8F8: L_0898D914: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(14)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D930; } @@ -5909,12 +6059,10 @@ L_0898D914: } L_0898D920: aot_gpr_31 = (0x0898D928u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 1018u, 0x0898BDD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898D928u) goto L_0898D928; AOT_REGCACHE_SYNC_OUT(); return; L_0898D928: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898D940; } @@ -5946,7 +6094,17 @@ L_0898D944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D950: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5963,7 +6121,6 @@ L_0898D968: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < -15 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D994; } @@ -5973,7 +6130,6 @@ L_0898D978: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-16024)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < -5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D994; } @@ -5999,7 +6155,17 @@ L_0898D99C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898D9A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6016,7 +6182,6 @@ L_0898D9C0: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898D9EC; } @@ -6026,7 +6191,6 @@ L_0898D9D0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-16022)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898D9EC; } @@ -6052,7 +6216,17 @@ L_0898D9F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DA00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6069,7 +6243,6 @@ L_0898DA18: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < -25 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898DA44; } @@ -6079,7 +6252,6 @@ L_0898DA28: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-16020)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < -20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DA44; } @@ -6105,7 +6277,17 @@ L_0898DA4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DA58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6122,7 +6304,6 @@ L_0898DA70: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 26 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DA9C; } @@ -6132,7 +6313,6 @@ L_0898DA80: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-16018)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898DA9C; } @@ -6158,13 +6338,22 @@ L_0898DAA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DAB0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DAD8; } @@ -6181,7 +6370,6 @@ L_0898DAC4: } L_0898DAD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898DAF0; } @@ -6198,7 +6386,6 @@ L_0898DAD8: L_0898DAE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(60)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898DAF0; } @@ -6212,11 +6399,20 @@ L_0898DAF0: goto L_0898DAF4; L_0898DAF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DAFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -6226,7 +6422,6 @@ L_0898DAFC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898DB44; } @@ -6234,7 +6429,6 @@ L_0898DAFC: } L_0898DB20: aot_gpr_31 = (0x0898DB28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898DB28u) goto L_0898DB28; AOT_REGCACHE_SYNC_OUT(); return; L_0898DB28: @@ -6242,7 +6436,6 @@ L_0898DB28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898DB90; } @@ -6250,7 +6443,6 @@ L_0898DB28: } L_0898DB3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898DB4C; } @@ -6270,7 +6462,6 @@ L_0898DB4C: goto L_0898CE14; L_0898DB54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898DBA8; } @@ -6278,14 +6469,12 @@ L_0898DB54: } L_0898DB5C: aot_gpr_31 = (0x0898DB64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898DB64u) goto L_0898DB64; AOT_REGCACHE_SYNC_OUT(); return; L_0898DB64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898DBA8; } @@ -6293,7 +6482,6 @@ L_0898DB64: } L_0898DB74: aot_gpr_31 = (0x0898DB7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898DB7Cu) goto L_0898DB7C; AOT_REGCACHE_SYNC_OUT(); return; L_0898DB7C: @@ -6301,7 +6489,6 @@ L_0898DB7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898DBA8; } @@ -6309,7 +6496,6 @@ L_0898DB7C: } L_0898DB90: aot_gpr_31 = (0x0898DB98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898DB98u) goto L_0898DB98; AOT_REGCACHE_SYNC_OUT(); return; L_0898DB98: @@ -6319,7 +6505,6 @@ L_0898DB98: AOT_REGCACHE_SYNC_OUT(); return; L_0898DBA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898DBBC; } @@ -6336,7 +6521,6 @@ L_0898DBA8: } L_0898DBB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898DC80; } @@ -6352,7 +6536,6 @@ L_0898DBBC: } L_0898DBC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898DC90; } @@ -6360,7 +6543,6 @@ L_0898DBC4: } L_0898DBCC: aot_gpr_31 = (0x0898DBD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898DBD4u) goto L_0898DBD4; AOT_REGCACHE_SYNC_OUT(); return; L_0898DBD4: @@ -6428,7 +6610,6 @@ L_0898DC38: } L_0898DC40: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898DC90; } @@ -6440,7 +6621,6 @@ L_0898DC48: goto L_0898C4EC; L_0898DC50: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898DC68; } @@ -6452,7 +6632,6 @@ L_0898DC58: goto L_0898C578; L_0898DC60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898DC70; } @@ -6478,7 +6657,6 @@ L_0898DC70: } L_0898DC80: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898DC90; } @@ -6503,7 +6681,17 @@ L_0898DC94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DCA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); @@ -6514,7 +6702,6 @@ L_0898DCA4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898DCE8; } @@ -6522,13 +6709,11 @@ L_0898DCA4: } L_0898DCCC: aot_gpr_31 = (0x0898DCD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898DCD4u) goto L_0898DCD4; AOT_REGCACHE_SYNC_OUT(); return; L_0898DCD4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0898DCF0; } @@ -6536,7 +6721,6 @@ L_0898DCD4: } L_0898DCE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898DD18; } @@ -6558,7 +6742,6 @@ L_0898DCF0: L_0898DCF8: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898DD38; } @@ -6572,7 +6755,6 @@ L_0898DD04: L_0898DD0C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_0898DD38; } @@ -6588,7 +6770,6 @@ L_0898DD18: goto L_0898DD28; L_0898DD28: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0898DD58; } @@ -6617,7 +6798,6 @@ L_0898DD40: } L_0898DD48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898DD30; } @@ -6625,7 +6805,6 @@ L_0898DD48: } L_0898DD50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898DD60; } @@ -6656,7 +6835,6 @@ L_0898DD6C: L_0898DD74: aot_gpr_4 = (static_cast(aot_gpr_2) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898DD84; } @@ -6680,13 +6858,22 @@ L_0898DD88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DD9C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DDCC; } @@ -6703,7 +6890,6 @@ L_0898DDB0: } L_0898DDBC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DDD4; } @@ -6731,17 +6917,25 @@ L_0898DDD4: goto L_0898DDDC; L_0898DDDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DDE4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DE14; } @@ -6758,7 +6952,6 @@ L_0898DDF8: } L_0898DE04: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898DE1C; } @@ -6786,11 +6979,20 @@ L_0898DE1C: goto L_0898DE24; L_0898DE24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DE2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6806,7 +7008,6 @@ L_0898DE2C: } L_0898DE48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898DF44; } @@ -6820,7 +7021,6 @@ L_0898DE50: L_0898DE58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898DECC; } @@ -6843,7 +7043,6 @@ L_0898DE7C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(1976)))))); aot_gpr_4 = (0u | 11u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898DEBC; } @@ -6886,7 +7085,6 @@ L_0898DEC4: if (vcs::vcs_camera_hook_enabled() && aot_gpr_2 == 0u) aot_gpr_2 = (static_cast(static_cast(vcs::vcs_camera_axis_x()))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898DF48; } @@ -6965,7 +7163,17 @@ L_0898DF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898DF58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6981,7 +7189,6 @@ L_0898DF58: } L_0898DF74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898E06C; } @@ -6995,7 +7202,6 @@ L_0898DF7C: L_0898DF84: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898DFFC; } @@ -7033,7 +7239,6 @@ L_0898DFB4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(1976)))))); aot_gpr_4 = (0u | 45u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898DFE8; } @@ -7134,7 +7339,17 @@ L_0898E070: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898E080: vcs::vcs_camera_note_site(0u); aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); @@ -7155,7 +7370,6 @@ L_0898E080: aot_gpr_4 = (static_cast(aot_gpr_5) < 7 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898E174; } @@ -7178,7 +7392,6 @@ L_0898E0A8: // the branch alone; the pad reproducing the stall is what ruled that out. if (vcs::vcs_camera_hook_enabled()) goto L_0898E104; { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898E104; } @@ -7186,14 +7399,12 @@ L_0898E0A8: } L_0898E0B0: aot_gpr_31 = (0x0898E0B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E0B8u) goto L_0898E0B8; AOT_REGCACHE_SYNC_OUT(); return; L_0898E0B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898E104; } @@ -7201,7 +7412,6 @@ L_0898E0B8: } L_0898E0C8: aot_gpr_31 = (0x0898E0D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E0D0u) goto L_0898E0D0; AOT_REGCACHE_SYNC_OUT(); return; L_0898E0D0: @@ -7209,7 +7419,6 @@ L_0898E0D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0898E100; } @@ -7217,7 +7426,6 @@ L_0898E0D0: } L_0898E0E4: aot_gpr_31 = (0x0898E0ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E0ECu) goto L_0898E0EC; AOT_REGCACHE_SYNC_OUT(); return; L_0898E0EC: @@ -7225,7 +7433,6 @@ L_0898E0EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898E104; } @@ -7246,7 +7453,6 @@ L_0898E104: L_0898E110: aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898E138; } @@ -7281,9 +7487,7 @@ L_0898E12C: L_0898E138: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898E160; } @@ -7322,7 +7526,17 @@ L_0898E178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898E188: vcs::vcs_camera_note_site(2u); aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); @@ -7334,7 +7548,6 @@ L_0898E188: aot_gpr_4 = (static_cast(aot_gpr_5) < 7 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898E23C; } @@ -7348,7 +7561,6 @@ L_0898E1B0: // The Y counterpart: ThirteenAG's beqz -> b at ptr + 0x118. if (vcs::vcs_camera_hook_enabled()) goto L_0898E1BC; { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898E1BC; } @@ -7373,7 +7585,6 @@ L_0898E1BC: L_0898E1C8: aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898E200; } @@ -7410,7 +7621,6 @@ L_0898E1F4: goto L_0898E1F8; L_0898E1F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898E200; } @@ -7419,9 +7629,7 @@ L_0898E1F8: L_0898E200: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898E228; } @@ -7461,7 +7669,17 @@ L_0898E240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898E250: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7480,14 +7698,34 @@ L_0898E264: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898E280: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7664))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898E288: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), aot_gpr_16); @@ -7534,7 +7772,6 @@ L_0898E2FC: goto L_0898E300; L_0898E300: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898E324; } @@ -7553,7 +7790,6 @@ L_0898E308: } L_0898E31C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898E338; } @@ -7561,7 +7797,6 @@ L_0898E31C: } L_0898E324: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898EB98; } @@ -7569,7 +7804,6 @@ L_0898E324: } L_0898E32C: aot_gpr_31 = (0x0898E334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E334u) goto L_0898E334; AOT_REGCACHE_SYNC_OUT(); return; L_0898E334: @@ -7577,7 +7811,6 @@ L_0898E334: goto L_0898E338; L_0898E338: aot_gpr_31 = (0x0898E340u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 553u, 0x0889E620u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E340u) goto L_0898E340; AOT_REGCACHE_SYNC_OUT(); return; L_0898E340: @@ -7589,7 +7822,6 @@ L_0898E340: goto L_0898E34C; L_0898E34C: aot_gpr_31 = (0x0898E354u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E354u) goto L_0898E354; AOT_REGCACHE_SYNC_OUT(); return; L_0898E354: @@ -7615,7 +7847,6 @@ L_0898E35C: } L_0898E388: aot_gpr_31 = (0x0898E390u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E390u) goto L_0898E390; AOT_REGCACHE_SYNC_OUT(); return; L_0898E390: @@ -7635,7 +7866,6 @@ L_0898E394: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[6]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16136))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); if (branch_taken) { @@ -7646,9 +7876,7 @@ L_0898E394: L_0898E3D4: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898E3F4; } @@ -7672,7 +7900,6 @@ L_0898E3F4: } L_0898E3FC: aot_gpr_31 = (0x0898E404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E404u) goto L_0898E404; AOT_REGCACHE_SYNC_OUT(); return; L_0898E404: @@ -7707,7 +7934,6 @@ L_0898E43C: goto L_0898E444; L_0898E444: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898E454; } @@ -7719,9 +7945,7 @@ L_0898E44C: goto L_0898E454; L_0898E454: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898E498; } @@ -7764,9 +7988,7 @@ L_0898E498: goto L_0898E4D0; L_0898E4D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898E514; } @@ -7818,7 +8040,6 @@ L_0898E54C: goto L_0898E560; L_0898E560: aot_gpr_31 = (0x0898E568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E568u) goto L_0898E568; AOT_REGCACHE_SYNC_OUT(); return; L_0898E568: @@ -7848,7 +8069,6 @@ L_0898E570: goto L_0898E5B4; L_0898E5B4: aot_gpr_31 = (0x0898E5BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E5BCu) goto L_0898E5BC; AOT_REGCACHE_SYNC_OUT(); return; L_0898E5BC: @@ -7918,7 +8138,6 @@ L_0898E650: } L_0898E660: aot_gpr_31 = (0x0898E668u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E668u) goto L_0898E668; AOT_REGCACHE_SYNC_OUT(); return; L_0898E668: @@ -7947,7 +8166,6 @@ L_0898E688: } L_0898E698: aot_gpr_31 = (0x0898E6A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E6A0u) goto L_0898E6A0; AOT_REGCACHE_SYNC_OUT(); return; L_0898E6A0: @@ -7978,7 +8196,6 @@ L_0898E6C0: } L_0898E6D8: aot_gpr_31 = (0x0898E6E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E6E0u) goto L_0898E6E0; AOT_REGCACHE_SYNC_OUT(); return; L_0898E6E0: @@ -8007,7 +8224,6 @@ L_0898E700: } L_0898E710: aot_gpr_31 = (0x0898E718u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E718u) goto L_0898E718; AOT_REGCACHE_SYNC_OUT(); return; L_0898E718: @@ -8036,7 +8252,6 @@ L_0898E738: } L_0898E748: aot_gpr_31 = (0x0898E750u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E750u) goto L_0898E750; AOT_REGCACHE_SYNC_OUT(); return; L_0898E750: @@ -8065,7 +8280,6 @@ L_0898E770: } L_0898E780: aot_gpr_31 = (0x0898E788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E788u) goto L_0898E788; AOT_REGCACHE_SYNC_OUT(); return; L_0898E788: @@ -8094,7 +8308,6 @@ L_0898E7A8: } L_0898E7B8: aot_gpr_31 = (0x0898E7C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E7C0u) goto L_0898E7C0; AOT_REGCACHE_SYNC_OUT(); return; L_0898E7C0: @@ -8123,7 +8336,6 @@ L_0898E7E0: } L_0898E7F0: aot_gpr_31 = (0x0898E7F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E7F8u) goto L_0898E7F8; AOT_REGCACHE_SYNC_OUT(); return; L_0898E7F8: @@ -8151,7 +8363,6 @@ L_0898E814: } L_0898E824: aot_gpr_31 = (0x0898E82Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E82Cu) goto L_0898E82C; AOT_REGCACHE_SYNC_OUT(); return; L_0898E82C: @@ -8180,7 +8391,6 @@ L_0898E84C: } L_0898E85C: aot_gpr_31 = (0x0898E864u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E864u) goto L_0898E864; AOT_REGCACHE_SYNC_OUT(); return; L_0898E864: @@ -8209,7 +8419,6 @@ L_0898E884: } L_0898E894: aot_gpr_31 = (0x0898E89Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E89Cu) goto L_0898E89C; AOT_REGCACHE_SYNC_OUT(); return; L_0898E89C: @@ -8238,7 +8447,6 @@ L_0898E8BC: } L_0898E8CC: aot_gpr_31 = (0x0898E8D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 46u, 0x08B6833Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898E8D4u) goto L_0898E8D4; AOT_REGCACHE_SYNC_OUT(); return; L_0898E8D4: @@ -8282,7 +8490,6 @@ L_0898E914: goto L_0898E918; L_0898E918: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898E96C; } @@ -8366,7 +8573,6 @@ L_0898E990: goto L_0898E994; L_0898E994: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898E9A4; } @@ -8379,7 +8585,6 @@ L_0898E99C: L_0898E9A4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25556))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898E9D0; } @@ -8407,7 +8612,6 @@ L_0898E9D0: L_0898E9DC: aot_gpr_5 = (static_cast(ctx.gpr[6]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0898EA14; } @@ -8416,7 +8620,6 @@ L_0898E9DC: L_0898E9E8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(60)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898EA08; } @@ -8425,7 +8628,6 @@ L_0898E9E8: L_0898E9F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898EA08; } @@ -8450,7 +8652,6 @@ L_0898EA08: } L_0898EA14: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898EA2C; } @@ -8459,7 +8660,6 @@ L_0898EA14: L_0898EA1C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898EA2C; } @@ -8470,7 +8670,6 @@ L_0898EA28: goto L_0898EA2C; L_0898EA2C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8479,7 +8678,6 @@ L_0898EA2C: L_0898EA34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(8)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8488,7 +8686,6 @@ L_0898EA34: L_0898EA40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8497,7 +8694,6 @@ L_0898EA40: L_0898EA4C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8506,7 +8702,6 @@ L_0898EA4C: L_0898EA58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8515,7 +8710,6 @@ L_0898EA58: L_0898EA64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(20)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8524,7 +8718,6 @@ L_0898EA64: L_0898EA70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(22)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8533,7 +8726,6 @@ L_0898EA70: L_0898EA7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(24)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8542,7 +8734,6 @@ L_0898EA7C: L_0898EA88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(40)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8551,7 +8742,6 @@ L_0898EA88: L_0898EA94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(42)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8560,7 +8750,6 @@ L_0898EA94: L_0898EAA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(44)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8569,7 +8758,6 @@ L_0898EAA0: L_0898EAAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(38)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8578,7 +8766,6 @@ L_0898EAAC: L_0898EAB8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(34)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8587,7 +8774,6 @@ L_0898EAB8: L_0898EAC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(36)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8596,7 +8782,6 @@ L_0898EAC4: L_0898EAD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(10)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8605,7 +8790,6 @@ L_0898EAD0: L_0898EADC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8614,7 +8798,6 @@ L_0898EADC: L_0898EAE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(14)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8623,7 +8806,6 @@ L_0898EAE8: L_0898EAF4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8632,7 +8814,6 @@ L_0898EAF4: L_0898EB00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(46)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB18; } @@ -8641,7 +8822,6 @@ L_0898EB00: L_0898EB0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898EB20; } @@ -8657,7 +8837,6 @@ L_0898EB20: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(166), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB3C; } @@ -8693,7 +8872,6 @@ L_0898EB58: L_0898EB74: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9285))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EB84; } @@ -8705,7 +8883,6 @@ L_0898EB80: L_0898EB84: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(167))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898EB98; } @@ -8731,7 +8908,17 @@ L_0898EB98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898EBBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8766,7 +8953,6 @@ L_0898EC00: goto L_0898EC10; L_0898EC10: aot_gpr_31 = (0x0898EC18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898EC18u) goto L_0898EC18; AOT_REGCACHE_SYNC_OUT(); return; L_0898EC18: @@ -8775,7 +8961,6 @@ L_0898EC18: goto L_0898EC20; L_0898EC20: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898EC58; } @@ -8791,7 +8976,6 @@ L_0898EC28: AOT_REGCACHE_SYNC_OUT(); return; L_0898EC3C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EC60; } @@ -8805,7 +8989,6 @@ L_0898EC44: AOT_REGCACHE_SYNC_OUT(); return; L_0898EC50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8813,7 +8996,6 @@ L_0898EC50: } L_0898EC58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8828,7 +9010,6 @@ L_0898EC60: AOT_REGCACHE_SYNC_OUT(); return; L_0898EC70: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EC8C; } @@ -8842,7 +9023,6 @@ L_0898EC78: AOT_REGCACHE_SYNC_OUT(); return; L_0898EC84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8857,7 +9037,6 @@ L_0898EC8C: AOT_REGCACHE_SYNC_OUT(); return; L_0898EC9C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898ECB8; } @@ -8871,7 +9050,6 @@ L_0898ECA4: AOT_REGCACHE_SYNC_OUT(); return; L_0898ECB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8886,7 +9064,6 @@ L_0898ECB8: AOT_REGCACHE_SYNC_OUT(); return; L_0898ECC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898ECE4; } @@ -8900,7 +9077,6 @@ L_0898ECD0: AOT_REGCACHE_SYNC_OUT(); return; L_0898ECDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8915,7 +9091,6 @@ L_0898ECE4: AOT_REGCACHE_SYNC_OUT(); return; L_0898ECF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898ED10; } @@ -8929,7 +9104,6 @@ L_0898ECFC: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8944,7 +9118,6 @@ L_0898ED10: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED20: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898ED40; } @@ -8959,7 +9132,6 @@ L_0898ED28: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -8974,7 +9146,6 @@ L_0898ED40: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED50: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898ED6C; } @@ -8988,7 +9159,6 @@ L_0898ED58: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9003,7 +9173,6 @@ L_0898ED6C: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED7C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898ED98; } @@ -9017,7 +9186,6 @@ L_0898ED84: AOT_REGCACHE_SYNC_OUT(); return; L_0898ED90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9032,7 +9200,6 @@ L_0898ED98: AOT_REGCACHE_SYNC_OUT(); return; L_0898EDA8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EDC4; } @@ -9046,7 +9213,6 @@ L_0898EDB0: AOT_REGCACHE_SYNC_OUT(); return; L_0898EDBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9061,7 +9227,6 @@ L_0898EDC4: AOT_REGCACHE_SYNC_OUT(); return; L_0898EDD4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EDF0; } @@ -9075,7 +9240,6 @@ L_0898EDDC: AOT_REGCACHE_SYNC_OUT(); return; L_0898EDE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9090,7 +9254,6 @@ L_0898EDF0: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE00: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EE1C; } @@ -9104,7 +9267,6 @@ L_0898EE08: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9119,7 +9281,6 @@ L_0898EE1C: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE2C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EE48; } @@ -9133,7 +9294,6 @@ L_0898EE34: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9148,7 +9308,6 @@ L_0898EE48: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE58: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EE74; } @@ -9162,7 +9321,6 @@ L_0898EE60: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9177,7 +9335,6 @@ L_0898EE74: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE84: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EEA0; } @@ -9191,7 +9348,6 @@ L_0898EE8C: AOT_REGCACHE_SYNC_OUT(); return; L_0898EE98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9206,7 +9362,6 @@ L_0898EEA0: AOT_REGCACHE_SYNC_OUT(); return; L_0898EEB0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EECC; } @@ -9220,7 +9375,6 @@ L_0898EEB8: AOT_REGCACHE_SYNC_OUT(); return; L_0898EEC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9235,7 +9389,6 @@ L_0898EECC: AOT_REGCACHE_SYNC_OUT(); return; L_0898EEDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EEF8; } @@ -9249,7 +9402,6 @@ L_0898EEE4: AOT_REGCACHE_SYNC_OUT(); return; L_0898EEF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9264,7 +9416,6 @@ L_0898EEF8: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF08: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EF24; } @@ -9278,7 +9429,6 @@ L_0898EF10: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9293,7 +9443,6 @@ L_0898EF24: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF34: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EF50; } @@ -9307,7 +9456,6 @@ L_0898EF3C: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9322,7 +9470,6 @@ L_0898EF50: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EF7C; } @@ -9336,7 +9483,6 @@ L_0898EF68: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9351,7 +9497,6 @@ L_0898EF7C: AOT_REGCACHE_SYNC_OUT(); return; L_0898EF8C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EFA8; } @@ -9365,7 +9510,6 @@ L_0898EF94: AOT_REGCACHE_SYNC_OUT(); return; L_0898EFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9380,7 +9524,6 @@ L_0898EFA8: AOT_REGCACHE_SYNC_OUT(); return; L_0898EFB8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898EFD4; } @@ -9394,7 +9537,6 @@ L_0898EFC0: AOT_REGCACHE_SYNC_OUT(); return; L_0898EFCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9409,7 +9551,6 @@ L_0898EFD4: AOT_REGCACHE_SYNC_OUT(); return; L_0898EFE4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F000; } @@ -9423,7 +9564,6 @@ L_0898EFEC: AOT_REGCACHE_SYNC_OUT(); return; L_0898EFF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9438,7 +9578,6 @@ L_0898F000: AOT_REGCACHE_SYNC_OUT(); return; L_0898F010: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F02C; } @@ -9452,7 +9591,6 @@ L_0898F018: AOT_REGCACHE_SYNC_OUT(); return; L_0898F024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9467,7 +9605,6 @@ L_0898F02C: AOT_REGCACHE_SYNC_OUT(); return; L_0898F03C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F058; } @@ -9481,7 +9618,6 @@ L_0898F044: AOT_REGCACHE_SYNC_OUT(); return; L_0898F050: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9496,7 +9632,6 @@ L_0898F058: AOT_REGCACHE_SYNC_OUT(); return; L_0898F068: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F084; } @@ -9510,7 +9645,6 @@ L_0898F070: AOT_REGCACHE_SYNC_OUT(); return; L_0898F07C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9525,7 +9659,6 @@ L_0898F084: AOT_REGCACHE_SYNC_OUT(); return; L_0898F094: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F0B0; } @@ -9539,7 +9672,6 @@ L_0898F09C: AOT_REGCACHE_SYNC_OUT(); return; L_0898F0A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9554,7 +9686,6 @@ L_0898F0B0: AOT_REGCACHE_SYNC_OUT(); return; L_0898F0C0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F0DC; } @@ -9568,7 +9699,6 @@ L_0898F0C8: AOT_REGCACHE_SYNC_OUT(); return; L_0898F0D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9583,7 +9713,6 @@ L_0898F0DC: AOT_REGCACHE_SYNC_OUT(); return; L_0898F0EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F180; } @@ -9605,7 +9734,6 @@ L_0898F0F4: } L_0898F114: aot_gpr_31 = (0x0898F11Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898F11Cu) goto L_0898F11C; AOT_REGCACHE_SYNC_OUT(); return; L_0898F11C: @@ -9629,7 +9757,6 @@ L_0898F12C: L_0898F138: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0898F150; } @@ -9663,7 +9790,6 @@ L_0898F160: AOT_REGCACHE_SYNC_OUT(); return; L_0898F178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9678,7 +9804,6 @@ L_0898F180: AOT_REGCACHE_SYNC_OUT(); return; L_0898F190: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F224; } @@ -9700,7 +9825,6 @@ L_0898F198: } L_0898F1B8: aot_gpr_31 = (0x0898F1C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898F1C0u) goto L_0898F1C0; AOT_REGCACHE_SYNC_OUT(); return; L_0898F1C0: @@ -9724,7 +9848,6 @@ L_0898F1D0: L_0898F1DC: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0898F1F4; } @@ -9758,7 +9881,6 @@ L_0898F204: AOT_REGCACHE_SYNC_OUT(); return; L_0898F21C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9773,7 +9895,6 @@ L_0898F224: AOT_REGCACHE_SYNC_OUT(); return; L_0898F234: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F250; } @@ -9787,7 +9908,6 @@ L_0898F23C: AOT_REGCACHE_SYNC_OUT(); return; L_0898F248: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9802,7 +9922,6 @@ L_0898F250: AOT_REGCACHE_SYNC_OUT(); return; L_0898F260: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F27C; } @@ -9816,7 +9935,6 @@ L_0898F268: AOT_REGCACHE_SYNC_OUT(); return; L_0898F274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9831,7 +9949,6 @@ L_0898F27C: AOT_REGCACHE_SYNC_OUT(); return; L_0898F28C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F2A8; } @@ -9845,7 +9962,6 @@ L_0898F294: AOT_REGCACHE_SYNC_OUT(); return; L_0898F2A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9860,7 +9976,6 @@ L_0898F2A8: AOT_REGCACHE_SYNC_OUT(); return; L_0898F2B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F2D4; } @@ -9874,7 +9989,6 @@ L_0898F2C0: AOT_REGCACHE_SYNC_OUT(); return; L_0898F2CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9889,7 +10003,6 @@ L_0898F2D4: AOT_REGCACHE_SYNC_OUT(); return; L_0898F2E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F300; } @@ -9903,7 +10016,6 @@ L_0898F2EC: AOT_REGCACHE_SYNC_OUT(); return; L_0898F2F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9918,7 +10030,6 @@ L_0898F300: AOT_REGCACHE_SYNC_OUT(); return; L_0898F310: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F32C; } @@ -9932,7 +10043,6 @@ L_0898F318: AOT_REGCACHE_SYNC_OUT(); return; L_0898F324: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9947,7 +10057,6 @@ L_0898F32C: AOT_REGCACHE_SYNC_OUT(); return; L_0898F33C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F350; } @@ -9973,7 +10082,17 @@ L_0898F350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F36C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9994,7 +10113,6 @@ L_0898F384: L_0898F390: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-15996)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0898F3A4; } @@ -10007,7 +10125,6 @@ L_0898F39C: L_0898F3A4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-15996)))))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_0898F3EC; } @@ -10049,7 +10166,6 @@ L_0898F3C8: L_0898F3EC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-15996)))))); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_0898F430; } @@ -10118,7 +10234,6 @@ L_0898F468: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898F498; } @@ -10126,13 +10241,11 @@ L_0898F468: } L_0898F47C: aot_gpr_31 = (0x0898F484u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0898F484u) goto L_0898F484; AOT_REGCACHE_SYNC_OUT(); return; L_0898F484: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0898F4A0; } @@ -10140,7 +10253,6 @@ L_0898F484: } L_0898F490: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F4C0; } @@ -10158,7 +10270,6 @@ L_0898F4A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898F4C0; } @@ -10170,7 +10281,6 @@ L_0898F4B0: goto L_0898CF8C; L_0898F4B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_0898F504; } @@ -10223,7 +10333,6 @@ L_0898F504: } L_0898F50C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898F4D8; } @@ -10237,7 +10346,6 @@ L_0898F514: L_0898F51C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0898F560; } @@ -10263,7 +10371,6 @@ L_0898F53C: L_0898F544: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_0898F560; } @@ -10286,7 +10393,6 @@ L_0898F560: goto L_0898F56C; L_0898F56C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898F4D8; } @@ -10332,7 +10438,17 @@ L_0898F5B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F5C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -10352,7 +10468,17 @@ L_0898F5EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F5F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -10386,7 +10512,17 @@ L_0898F640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F654: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (2236u << 16u); @@ -10422,7 +10558,17 @@ L_0898F6A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F6B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -10445,7 +10591,6 @@ L_0898F6E0: L_0898F6EC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898F724; } @@ -10478,7 +10623,17 @@ L_0898F724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F73C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -10501,7 +10656,6 @@ L_0898F764: L_0898F770: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898F7A8; } @@ -10534,7 +10688,17 @@ L_0898F7A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F7C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -10551,7 +10715,17 @@ L_0898F7D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F7E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -10598,7 +10772,17 @@ L_0898F850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F868: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -10620,7 +10804,6 @@ L_0898F898: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); if (branch_taken) { @@ -10632,9 +10815,7 @@ L_0898F8B8: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898F8E0; } @@ -10678,7 +10859,17 @@ L_0898F90C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F92C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -10717,7 +10908,17 @@ L_0898F978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898F990: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -10738,9 +10939,7 @@ L_0898F9B8: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0898F9E4; } @@ -10781,7 +10980,17 @@ L_0898FA08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FA20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -10794,7 +11003,6 @@ L_0898FA20: AOT_REGCACHE_SYNC_OUT(); return; L_0898FA3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_0898FA4C; } @@ -10861,7 +11069,6 @@ L_0898FAA0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898FABC; } @@ -10879,7 +11086,17 @@ L_0898FABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FAD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -10896,7 +11113,17 @@ L_0898FAE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FAF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -10922,7 +11149,6 @@ L_0898FB14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); ctx.gpr[6] = (0u | 4u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0898FB68; } @@ -10938,7 +11164,6 @@ L_0898FB4C: AOT_REGCACHE_SYNC_OUT(); return; L_0898FB60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0898FB88; } @@ -10947,7 +11172,6 @@ L_0898FB60: L_0898FB68: ctx.gpr[6] = (0u | 18u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0898FB88; } @@ -10970,7 +11194,17 @@ L_0898FB88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FB9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -10987,7 +11221,17 @@ L_0898FBB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FBC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -11004,7 +11248,17 @@ L_0898FBD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FBE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -11019,7 +11273,6 @@ L_0898FBE4: L_0898FC04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898FC1C; } @@ -11046,7 +11299,17 @@ L_0898FC20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FC34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -11074,7 +11337,17 @@ L_0898FC64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FC78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -11112,7 +11385,17 @@ L_0898FCC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FCD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (2236u << 16u); @@ -11130,7 +11413,6 @@ L_0898FCD8: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(112)))))); ctx.gpr[8] = (0u | 4u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0898FD30; } @@ -11165,7 +11447,17 @@ L_0898FD44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FD54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -11192,7 +11484,6 @@ L_0898FD80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0898FDC0; } @@ -11217,7 +11508,17 @@ L_0898FDC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FDD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2236u << 16u); @@ -11251,7 +11552,17 @@ L_0898FE24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FE34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2236u << 16u); @@ -11289,7 +11600,17 @@ L_0898FE9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FEAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -11325,7 +11646,6 @@ L_0898FEF0: L_0898FEF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0898FF10; } @@ -11343,7 +11663,6 @@ L_0898FF0C: L_0898FF10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0898FF28; } @@ -11378,7 +11697,17 @@ L_0898FF38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FF50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (2236u << 16u); @@ -11396,7 +11725,6 @@ L_0898FF50: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(112)))))); ctx.gpr[8] = (0u | 18u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_0898FFA8; } @@ -11431,7 +11759,17 @@ L_0898FFBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0898FFCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0099.cpp b/profiles/vcs/generated/generated_unit_0099.cpp index 26fd3a4..cb61a22 100644 --- a/profiles/vcs/generated/generated_unit_0099.cpp +++ b/profiles/vcs/generated/generated_unit_0099.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0099[4089] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 6, 0, 7, - 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 15, 0, 16, 0, 0, - 17, 0, 0, 18, 0, 0, 0, 19, 20, 0, 0, 21, 0, 22, 0, 0, 0, 23, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 31, 32, 0, 0, 0, 33, 0, 0, 34, 0, 0, 35, 36, 0, 0, - 0, 37, 0, 0, 38, 0, 0, 39, 40, 0, 0, 0, 41, 0, 0, 42, 0, 0, 43, 44, 0, 0, 0, 45, 0, 0, 46, 0, 0, 47, 48, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, - 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 64, 0, 65, - 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, - 71, 0, 72, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 80, - 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 86, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 0, 90, 0, 91, 0, - 92, 0, 0, 0, 93, 0, 0, 0, 94, 0, 95, 0, 0, 96, 97, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 103, 0, 104, 0, - 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 109, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, - 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, - 0, 123, 0, 0, 124, 0, 0, 0, 125, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, - 0, 138, 0, 0, 0, 0, 0, 0, 139, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 146, 0, 147, 0, 0, 148, 149, 0, 0, 0, 0, 150, 151, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, - 159, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, - 0, 167, 0, 168, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 173, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, - 179, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, - 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, - 0, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, - 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 211, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, - 214, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 217, 218, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, - 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 0, 0, 0, 0, - 227, 0, 228, 0, 0, 0, 229, 0, 230, 0, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 239, 240, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 243, 0, - 0, 0, 0, 244, 245, 0, 246, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 249, 250, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, - 253, 0, 0, 0, 0, 254, 255, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 0, 0, 0, 259, 260, 0, 261, 0, 0, 0, 0, 0, 0, - 262, 0, 263, 0, 0, 0, 0, 264, 265, 0, 266, 0, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 269, 270, 0, 271, 0, 0, 0, 0, 272, - 0, 273, 0, 0, 0, 0, 0, 274, 275, 0, 276, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 279, 280, 0, 281, 0, 0, 0, 0, - 0, 0, 282, 0, 283, 0, 0, 0, 0, 284, 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 289, - 290, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 295, 0, 296, 0, - 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 302, 0, 303, 0, 0, 0, 304, 0, 0, 0, 0, - 0, 305, 0, 306, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 311, 0, 0, 312, 0, 0, 0, 313, 0, 314, 0, 0, - 315, 0, 0, 0, 316, 0, 317, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, - 322, 0, 323, 0, 324, 0, 0, 325, 0, 0, 326, 0, 327, 328, 0, 329, 0, 330, 0, 0, 331, 0, 332, 0, 333, 0, 0, 0, 0, 334, 0, 0, - 0, 335, 0, 0, 336, 0, 0, 0, 337, 0, 0, 338, 0, 0, 339, 0, 0, 340, 0, 0, 341, 0, 342, 343, 0, 344, 0, 345, 0, 0, 346, 0, - 347, 0, 348, 0, 0, 349, 0, 0, 350, 0, 0, 351, 0, 352, 353, 0, 354, 0, 355, 0, 0, 356, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 0, 0, 0, 362, 363, 0, 0, 0, 0, 364, 365, 0, 0, 0, 0, 366, 367, 0, 0, 0, 0, 368, 369, 0, 0, 0, 0, 370, - 371, 0, 0, 0, 0, 372, 373, 0, 0, 0, 0, 374, 375, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 380, - 381, 0, 0, 0, 0, 382, 383, 0, 0, 0, 0, 384, 385, 0, 0, 0, 0, 0, 386, 387, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 394, - 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 0, 398, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 0, 403, 0, 404, 0, 0, 0, 405, - 0, 406, 0, 0, 0, 407, 0, 408, 0, 0, 0, 409, 0, 410, 0, 0, 411, 0, 0, 412, 0, 413, 0, 0, 0, 414, 0, 415, 0, 0, 0, 416, - 0, 417, 0, 0, 418, 0, 0, 419, 0, 420, 0, 0, 0, 421, 0, 422, 0, 0, 0, 423, 0, 424, 0, 0, 425, 0, 0, 426, 0, 427, 0, 0, - 0, 428, 0, 429, 0, 0, 0, 430, 0, 431, 0, 0, 432, 0, 0, 433, 0, 434, 0, 0, 0, 435, 0, 436, 0, 0, 0, 437, 0, 438, 0, 0, - 439, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 443, 0, 0, 0, 444, 0, 445, 0, 0, 446, 0, 0, 447, 0, 448, 0, 0, 0, 449, 0, 450, - 0, 0, 0, 451, 0, 452, 0, 0, 453, 0, 0, 454, 0, 455, 0, 0, 0, 456, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 461, - 0, 462, 0, 0, 0, 463, 0, 464, 0, 0, 0, 465, 0, 466, 0, 0, 467, 0, 0, 468, 0, 469, 0, 0, 0, 470, 0, 471, 0, 0, 0, 472, - 0, 473, 0, 0, 474, 0, 0, 475, 0, 476, 0, 0, 0, 477, 0, 478, 0, 0, 0, 479, 0, 480, 0, 0, 481, 0, 0, 482, 0, 483, 0, 0, - 0, 484, 0, 485, 0, 0, 0, 486, 0, 487, 0, 0, 488, 0, 0, 489, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 0, 493, 0, 494, 0, 0, - 495, 0, 0, 496, 0, 0, 0, 497, 0, 498, 0, 0, 0, 499, 0, 500, 0, 0, 501, 0, 0, 502, 0, 503, 0, 0, 0, 504, 0, 505, 0, 0, - 0, 506, 0, 507, 0, 0, 508, 0, 0, 509, 0, 510, 0, 0, 0, 511, 0, 512, 0, 0, 0, 513, 0, 514, 0, 0, 515, 0, 0, 516, 0, 517, - 0, 0, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 525, 0, 526, 0, 0, 0, 527, 0, 528, - 0, 0, 529, 0, 0, 530, 0, 531, 0, 0, 0, 532, 0, 533, 0, 0, 0, 534, 0, 535, 0, 0, 536, 0, 0, 537, 0, 538, 0, 0, 0, 539, - 0, 540, 0, 0, 0, 541, 0, 542, 0, 0, 543, 0, 0, 544, 0, 545, 0, 0, 0, 546, 0, 547, 0, 0, 0, 548, 0, 549, 0, 0, 550, 0, - 0, 0, 551, 0, 552, 0, 0, 0, 553, 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 0, 557, 0, 0, 0, 558, 0, 559, 0, 0, 0, 560, 0, - 561, 0, 0, 0, 562, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, 567, 0, 568, 0, 0, 0, 569, 0, 570, 0, - 0, 0, 0, 571, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 574, 0, 575, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, 0, - 579, 0, 580, 0, 0, 0, 581, 0, 582, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 587, 0, 588, 0, 0, - 0, 589, 0, 590, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 594, 0, 595, - 0, 0, 0, 596, 0, 597, 0, 0, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, - 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, - 605, 0, 0, 0, 0, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 611, - 0, 0, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 0, 616, 0, 0, 0, 0, 617, 0, 0, - 0, 0, 618, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 0, 0, 0, - 624, 0, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, 0, 0, 629, 0, 0, 0, 0, 630, 0, - 0, 0, 0, 631, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 634, 0, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, 0, - 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 0, 0, 641, 0, 0, 0, 0, 642, 0, 0, 0, 0, 643, - 0, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, - 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 652, 0, 0, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, 0, 0, 655, 0, 0, 0, 0, - 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, - 0, 0, 0, 663, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 0, 0, - 0, 669, 0, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, 0, 0, 0, 0, 674, 0, 0, 0, 0, 675, - 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 680, 0, 0, 0, - 0, 0, 681, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, - 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, 0, 0, 0, 0, 692, 0, - 0, 0, 0, 693, 0, 0, 0, 0, 694, 0, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 0, 0, 0, 697, 0, 0, 0, 0, 698, 0, 0, 0, - 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, 0, 701, 0, 0, 0, 0, 702, 0, 0, 0, 0, 703, 0, 0, 0, 0, 704, 0, 0, 0, 0, 705, - 0, 0, 0, 0, 706, 0, 0, 0, 0, 707, 0, 0, 0, 0, 708, 0, 0, 0, 0, 709, 0, 0, 0, 0, 710, 0, 0, 0, 0, 711, 0, 0, - 0, 0, 712, 0, 0, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 715, 0, 0, 0, 0, 716, 0, 0, 0, 0, 717, 0, 0, 0, 0, - 718, 0, 719, 0, 0, 720, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, - 730, 0, 0, 0, 0, 731, 0, 0, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 736, 0, - 0, 0, 0, 737, 0, 0, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 740, 0, 0, 0, 0, 741, 0, 0, 0, 0, 742, 0, 0, 0, - 0, 743, 0, 0, 0, 0, 744, 0, 0, 0, 0, 745, 0, 0, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, 0, 748, 0, 0, 0, 0, 749, - 0, 0, 0, 0, 750, 0, 0, 0, 0, 751, 0, 0, 0, 0, 752, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 755, 0, 0, - 0, 0, 756, 0, 0, 0, 0, 757, 0, 0, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 760, 0, 0, 0, 0, 761, 0, 0, 0, 0, - 762, 0, 0, 0, 0, 763, 0, 0, 0, 0, 764, 0, 0, 0, 0, 765, 0, 0, 0, 0, 766, 0, 0, 0, 0, 767, 0, 0, 0, 0, 768, 0, - 0, 0, 0, 769, 0, 0, 0, 0, 770, 0, 0, 0, 0, 771, 0, 0, 0, 0, 772, 0, 0, 0, 0, 773, 0, 0, 0, 0, 774, 0, 0, 0, - 0, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 0, 0, 0, 781, - 0, 0, 0, 0, 782, 0, 0, 0, 0, 783, 0, 0, 0, 0, 784, 0, 0, 0, 0, 785, 0, 0, 0, 0, 786, 0, 0, 0, 0, 787, 0, 0, - 0, 0, 788, 0, 0, 0, 0, 789, 0, 0, 0, 0, 790, 0, 0, 0, 0, 791, 0, 0, 0, 0, 792, 0, 0, 0, 0, 793, 0, 0, 0, 0, - 794, 0, 0, 0, 0, 795, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 799, 0, 0, 0, - 0, 0, 800, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 804, 0, 0, 0, 0, 805, 0, - 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, 0, 810, 0, 0, 0, 0, 811, - 0, 0, 0, 0, 812, 0, 0, 0, 0, 813, 0, 0, 0, 0, 814, 0, 0, 0, 0, 815, 0, 0, 0, 0, 816, 0, 0, 0, 0, 817, 0, 0, - 0, 0, 818, 0, 0, 0, 0, 819, 0, 0, 0, 0, 820, 0, 0, 0, 0, 821, 0, 0, 0, 0, 822, 0, 0, 0, 0, 823, 0, 0, 0, 0, - 824, 0, 0, 0, 0, 825, 0, 0, 0, 0, 826, 0, 0, 0, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, 829, 0, 0, 0, 0, 830, 0, - 0, 0, 0, 831, 0, 0, 0, 0, 832, 0, 0, 0, 0, 833, 0, 0, 0, 0, 834, 0, 0, 0, 0, 835, 0, 0, 0, 0, 836, 0, 0, 0, - 0, 837, 0, 0, 0, 0, 838, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 845, 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 848, 0, 849, 0, - 850, 0, 0, 0, 0, 0, 0, 0, 851, 0, 852, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 854, 0, 855, 0, - 0, 0, 0, 0, 0, 0, 0, 856, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 858, 0, 859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 860, 0, 0, 861, 0, 862, 0, 0, 0, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, - 866, 0, 0, 867, 0, 0, 868, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 870, 0, 871, 0, 872, 0, 0, 873, 0, 874, 0, 0, 0, 0, 0, - 875, 0, 876, 0, 877, 0, 0, 0, 878, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 880, 0, 881, 882, 0, 0, 883, 0, 884, 0, 0, 0, 885, - 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 887, 0, 888, 889, 0, 0, 890, 0, 891, 0, 0, 0, 892, 0, 0, 893, 0, 0, 0, 0, 0, 0, - 0, 894, 0, 895, 896, 0, 0, 897, 0, 898, 0, 0, 0, 899, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 901, 0, 902, 903, 0, 0, 904, 0, - 905, 0, 0, 0, 0, 906, 0, 907, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 909, 0, 910, 0, 0, 911, 0, 912, 0, 913, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 914, 0, 915, 0, 0, 916, 0, 917, 0, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 919, 0, 920, 0, 0, 921, 0, 922, 0, 923, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 924, 0, 925, 0, 0, 926, - 0, 927, 0, 928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 929, 0, 930, 0, 0, 0, 0, 931, 0, 932, 0, 933, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, 0, 935, 0, 0, 0, 0, 936, 0, 937, 0, 938, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0099[64] = { + 0x2940A442A8A00041ull, 0x32464810302A2989ull, 0x24242510648C9192ull, 0x10001010A4242424ull, + 0x008010A502000040ull, 0x0C304088A0440000ull, 0x0018651151200000ull, 0x010C204450224000ull, + 0x0808610222811200ull, 0x4120904810A04512ull, 0x0619444000310502ull, 0x1422228155501000ull, + 0x041041041041050Aull, 0x1041041041041041ull, 0x00002D5555555554ull, 0x400130A140000000ull, + 0x050411450940A008ull, 0x40B0A058502C2814ull, 0x8582858502C28161ull, 0x844016140B0A0582ull, + 0x08A2841450820821ull, 0x028002D12894822Aull, 0x4AD249122152B495ull, 0x0000000400A56925ull, + 0x0000000000000420ull, 0x850A186186186184ull, 0x00082080010C1861ull, 0x8A4A28A490800000ull, + 0x2928A2928A2928A2ull, 0xA2928A2928A2928Aull, 0x8A2928A2928A2928ull, 0x28A2928A2928A292ull, + 0xA4A28A4A28A4A289ull, 0x8A4A28A4A28A4A28ull, 0x451145144A28A4A2ull, 0x0851450851450851ull, + 0xA280010A28885145ull, 0x0000000228008A28ull, 0x8410842108000000ull, 0x0842108421084210ull, + 0x1084210842108421ull, 0x2108421084210842ull, 0x4210842108421084ull, 0x8421084210842108ull, + 0x4108410410410410ull, 0x1084210842108410ull, 0x2108421084210842ull, 0x0020422508421084ull, + 0x4210842104210842ull, 0x8421084210842108ull, 0x0842108421084210ull, 0x1084210842108421ull, + 0x2108421084210842ull, 0x1041042108421084ull, 0x8421041042104104ull, 0x0842108421084210ull, + 0x1084210842108421ull, 0x5401500802084442ull, 0x0014028050001501ull, 0x052A014940280520ull, + 0x024534048A680915ull, 0x0A9402A14D01229Aull, 0x94000A94000A9400ull, 0x0150A0002A14000Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0099[64] = { + 1u, 17u, 37u, 57u, 69u, 77u, 88u, 100u, 111u, 123u, 138u, 152u, 167u, 179u, 190u, 213u, + 221u, 235u, 253u, 273u, 290u, 305u, 322u, 347u, 359u, 361u, 381u, 392u, 406u, 428u, 451u, 473u, + 495u, 518u, 540u, 561u, 579u, 596u, 604u, 612u, 624u, 637u, 650u, 663u, 676u, 687u, 699u, 712u, + 724u, 737u, 750u, 762u, 775u, 788u, 800u, 812u, 824u, 837u, 850u, 860u, 875u, 894u, 914u, 927u, }; void recomp_unit_0099_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0099_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08990000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0099[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0099[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0099[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08990000; @@ -1119,7 +1026,17 @@ L_08990000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990018: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -1133,7 +1050,6 @@ L_08990018: { const std::uint32_t aot_run_words[4]{aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08990174; } @@ -1151,7 +1067,6 @@ L_0899005C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.gpr[7] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08990074; } @@ -1192,7 +1107,6 @@ L_08990098: aot_gpr_17 = (aot_gpr_16 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(476))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089900E0; } @@ -1206,7 +1120,6 @@ L_089900A8: AOT_REGCACHE_SYNC_OUT(); return; L_089900B4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089900D8; } @@ -1226,7 +1139,6 @@ L_089900BC: AOT_REGCACHE_SYNC_OUT(); return; L_089900D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08990174; } @@ -1240,7 +1152,6 @@ L_089900E0: AOT_REGCACHE_SYNC_OUT(); return; L_089900EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08990174; } @@ -1255,7 +1166,6 @@ L_089900F4: L_08990100: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08990120; } @@ -1279,7 +1189,6 @@ L_08990120: AOT_REGCACHE_SYNC_OUT(); return; L_0899012C: aot_gpr_31 = (0x08990134u); - // nop goto L_08990374; L_08990134: aot_gpr_4 = (ctx.gpr[18] | 0u); @@ -1330,7 +1239,17 @@ L_08990174: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990190: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -1472,7 +1391,17 @@ L_08990278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990290: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -1492,7 +1421,17 @@ L_089902A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089902B4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1508,7 +1447,17 @@ L_089902C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089902D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1524,7 +1473,17 @@ L_089902E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089902F4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1540,7 +1499,17 @@ L_08990308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990314: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1556,7 +1525,17 @@ L_08990328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990334: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1572,7 +1551,17 @@ L_08990348: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990354: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1588,14 +1577,34 @@ L_08990368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990374: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 544u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899037C: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2), static_cast(0u)); @@ -1605,7 +1614,17 @@ L_0899037C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990390: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2), static_cast(0u)); @@ -1618,7 +1637,17 @@ L_08990390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089903B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(32), std::bit_cast(aot_fpr_20)); @@ -1675,7 +1704,17 @@ L_08990418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990464: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_17); @@ -1696,7 +1735,6 @@ L_08990480: L_08990488: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899049C; } @@ -1719,7 +1757,17 @@ L_0899049C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089904B0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(52), static_cast(0u)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(54), static_cast(0u)); @@ -1734,7 +1782,17 @@ L_089904B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089904DC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1793,7 +1851,6 @@ L_08990548: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(54), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(68))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990574; } @@ -1821,7 +1878,6 @@ L_0899057C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(54))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(54))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089905D4; } @@ -1864,7 +1920,6 @@ L_089905D4: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990654; } @@ -1906,7 +1961,6 @@ L_089905EC: L_08990654: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08990680; } @@ -1916,7 +1970,6 @@ L_08990660: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(52), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990678; } @@ -1939,7 +1992,6 @@ L_08990680: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089906B8; } @@ -1974,7 +2026,6 @@ L_089906B8: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990738; } @@ -2018,7 +2069,6 @@ L_089906D0: L_08990738: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(53))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08990778; } @@ -2028,7 +2078,6 @@ L_08990744: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(53), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990770; } @@ -2056,7 +2105,6 @@ L_08990778: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(53))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(53))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089907CC; } @@ -2098,7 +2146,6 @@ L_089907CC: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990824; } @@ -2143,7 +2190,6 @@ L_089907E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(53))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089907E0; } @@ -2152,7 +2198,6 @@ L_089907E0: L_08990824: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08990864; } @@ -2162,7 +2207,6 @@ L_08990830: aot_mem.aot_direct_store16(aot_gpr_17 + static_cast(48), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899085C; } @@ -2190,7 +2234,6 @@ L_08990864: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(48))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089908B8; } @@ -2232,7 +2275,6 @@ L_089908B8: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990904; } @@ -2255,7 +2297,6 @@ L_089908EC: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089908CC; } @@ -2264,7 +2305,6 @@ L_089908EC: L_08990904: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(50))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899095C; } @@ -2274,7 +2314,6 @@ L_08990910: aot_mem.aot_direct_store16(aot_gpr_17 + static_cast(50), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(76))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990928; } @@ -2289,7 +2328,6 @@ L_08990928: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(76), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(72))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990954; } @@ -2331,7 +2369,6 @@ L_08990970: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08990998; } @@ -2348,7 +2385,6 @@ L_08990998: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); aot_gpr_5 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089909BC; } @@ -2365,7 +2401,6 @@ L_089909BC: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(4))); aot_gpr_5 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089909E0; } @@ -2382,7 +2417,6 @@ L_089909E0: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08990970; } @@ -2409,7 +2443,6 @@ L_08990A04: AOT_REGCACHE_SYNC_OUT(); return; L_08990A20: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08990A98; } @@ -2464,7 +2497,6 @@ L_08990A98: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(50))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(50))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08990AD0; } @@ -2499,7 +2531,6 @@ L_08990AD0: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08990B30; } @@ -2545,49 +2576,115 @@ L_08990B30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B50: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(9296), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B58: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B60: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7892), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B70: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B78: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990B80: aot_gpr_6 = (aot_gpr_4 << 2u); aot_gpr_6 = (ctx.gpr[28] + aot_gpr_6); @@ -2605,7 +2702,17 @@ L_08990B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990BA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9348))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -2614,7 +2721,17 @@ L_08990BA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990BB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9352))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -2623,7 +2740,17 @@ L_08990BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990BC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9356))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -2632,7 +2759,17 @@ L_08990BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990BD4: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9360))); @@ -2648,7 +2785,17 @@ L_08990BE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990BF0: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9364))); @@ -2664,7 +2811,17 @@ L_08990C04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990C0C: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9368))); @@ -2680,14 +2837,22 @@ L_08990C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990C28: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990EA0; } @@ -2697,9 +2862,7 @@ L_08990C40: aot_gpr_4 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E98; } @@ -2709,9 +2872,7 @@ L_08990C58: aot_gpr_4 = (17046u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E90; } @@ -2721,9 +2882,7 @@ L_08990C70: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E88; } @@ -2733,9 +2892,7 @@ L_08990C88: aot_gpr_4 = (17174u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E80; } @@ -2745,9 +2902,7 @@ L_08990CA0: aot_gpr_4 = (17224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E78; } @@ -2757,9 +2912,7 @@ L_08990CB8: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E70; } @@ -2769,9 +2922,7 @@ L_08990CD0: aot_gpr_4 = (17302u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E68; } @@ -2781,9 +2932,7 @@ L_08990CE8: aot_gpr_4 = (17327u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E60; } @@ -2793,9 +2942,7 @@ L_08990D00: aot_gpr_4 = (17352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E58; } @@ -2805,9 +2952,7 @@ L_08990D18: aot_gpr_4 = (17402u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E50; } @@ -2817,9 +2962,7 @@ L_08990D30: aot_gpr_4 = (17430u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E48; } @@ -2829,9 +2972,7 @@ L_08990D48: aot_gpr_4 = (17455u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E40; } @@ -2841,9 +2982,7 @@ L_08990D60: aot_gpr_4 = (17480u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E38; } @@ -2853,9 +2992,7 @@ L_08990D78: aot_gpr_4 = (17505u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E30; } @@ -2865,9 +3002,7 @@ L_08990D90: aot_gpr_4 = (17530u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E28; } @@ -2877,9 +3012,7 @@ L_08990DA8: aot_gpr_4 = (17558u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E20; } @@ -2889,9 +3022,7 @@ L_08990DC0: aot_gpr_4 = (17583u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E18; } @@ -2901,9 +3032,7 @@ L_08990DD8: aot_gpr_4 = (17608u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990E10; } @@ -2913,9 +3042,7 @@ L_08990DF0: aot_gpr_4 = (17633u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08990EA8; } @@ -3086,11 +3213,20 @@ L_08990EA8: goto L_08990EAC; L_08990EAC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08990EB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -3148,7 +3284,6 @@ L_08990EB4: } L_08990F78: { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_08990F9C; } @@ -3186,7 +3321,6 @@ L_08990FB0: L_08990FB4: aot_gpr_5 = (static_cast(aot_gpr_4) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08990FF8; } @@ -3211,9 +3345,7 @@ L_08990FC0: L_08990FF8: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08991034; } @@ -3233,17 +3365,25 @@ L_0899100C: goto L_08991034; L_08991034: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899103C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8084))); aot_fpr_13 = std::bit_cast(0u); aot_gpr_4 = (17096u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_13)) && aot_fpr_14 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3253,7 +3393,6 @@ L_0899103C: } L_08991058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899106C; } @@ -3267,7 +3406,6 @@ L_08991060: L_0899106C: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08991080; @@ -3275,11 +3413,20 @@ L_0899106C: goto L_08991080; L_08991080: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991088: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9376))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -3288,14 +3435,34 @@ L_08991088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991098: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9380), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089910A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9384))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -3304,7 +3471,17 @@ L_089910A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089910B0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9392))); @@ -3315,7 +3492,17 @@ L_089910B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089910C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9412))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9408))); @@ -3326,14 +3513,34 @@ L_089910C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089910E0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9408), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089910E8: aot_gpr_6 = (aot_gpr_4 << 2u); aot_gpr_4 = (2279u << 16u); @@ -3352,7 +3559,17 @@ L_08991108: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991110: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3360,7 +3577,6 @@ L_08991110: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991134; } @@ -3388,11 +3604,20 @@ L_08991148: goto L_0899114C; L_0899114C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991154: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3400,7 +3625,6 @@ L_08991154: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991178; } @@ -3428,11 +3652,20 @@ L_0899118C: goto L_08991190; L_08991190: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991198: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3440,7 +3673,6 @@ L_08991198: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089911BC; } @@ -3468,11 +3700,20 @@ L_089911D0: goto L_089911D4; L_089911D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089911DC: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3480,7 +3721,6 @@ L_089911DC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991200; } @@ -3508,11 +3748,20 @@ L_08991214: goto L_08991218; L_08991218: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991220: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3520,7 +3769,6 @@ L_08991220: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991244; } @@ -3548,11 +3796,20 @@ L_08991258: goto L_0899125C; L_0899125C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991264: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3560,7 +3817,6 @@ L_08991264: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991288; } @@ -3588,17 +3844,25 @@ L_0899129C: goto L_089912A0; L_089912A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089912A8: aot_gpr_4 = (aot_gpr_4 << 2u); aot_gpr_4 = (ctx.gpr[28] + aot_gpr_4); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(9416))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089912C4; } @@ -3627,17 +3891,25 @@ L_089912DC: goto L_089912E0; L_089912E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089912E8: aot_gpr_4 = (aot_gpr_4 << 2u); aot_gpr_4 = (ctx.gpr[28] + aot_gpr_4); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(9432))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991304; } @@ -3666,11 +3938,20 @@ L_0899131C: goto L_08991320; L_08991320: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991328: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3678,7 +3959,6 @@ L_08991328: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0899134C; } @@ -3706,11 +3986,20 @@ L_08991360: goto L_08991364; L_08991364: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899136C: aot_gpr_6 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3718,7 +4007,6 @@ L_0899136C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08991390; } @@ -3746,11 +4034,20 @@ L_089913A4: goto L_089913A8; L_089913A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089913B0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -3773,7 +4070,6 @@ L_089913D8: L_089913E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -3808,7 +4104,17 @@ L_08991414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899142C: aot_gpr_5 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -3819,7 +4125,17 @@ L_0899142C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991444: aot_gpr_4 = (2279u << 16u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(17584))); @@ -3831,9 +4147,7 @@ L_08991444: L_0899145C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08991478; } @@ -3855,11 +4169,20 @@ L_08991478: } L_08991488: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991490: aot_gpr_4 = (2279u << 16u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(17584))); @@ -3871,9 +4194,7 @@ L_08991490: L_089914A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089914C4; } @@ -3895,16 +4216,24 @@ L_089914C4: } L_089914D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089914DC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899150C; } @@ -3916,7 +4245,6 @@ L_089914EC: aot_gpr_4 = (aot_gpr_6 << (aot_gpr_4 & 31u)); aot_gpr_6 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_0899150C; } @@ -3928,16 +4256,24 @@ L_08991504: goto L_0899150C; L_0899150C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991514: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08991548; } @@ -3949,7 +4285,6 @@ L_08991524: aot_gpr_4 = (aot_gpr_6 << (aot_gpr_4 & 31u)); aot_gpr_6 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08991548; } @@ -3962,11 +4297,20 @@ L_0899153C: goto L_08991548; L_08991548: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991550: aot_gpr_5 = (static_cast(aot_gpr_4) < 60 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; @@ -3988,15 +4332,23 @@ L_0899155C: } L_0899156C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991574: aot_gpr_5 = (static_cast(aot_gpr_4) < 60 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991590; } @@ -4006,7 +4358,6 @@ L_08991580: aot_gpr_4 = (aot_gpr_4 + static_cast(-60)); aot_gpr_5 = (static_cast(aot_gpr_4) < 60 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08991580; } @@ -4014,7 +4365,6 @@ L_08991580: } L_08991590: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_0899159C; } @@ -4029,7 +4379,17 @@ L_0899159C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089915A4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-560)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(516), aot_gpr_16); @@ -4047,7 +4407,6 @@ L_089915A4: } L_089915DC: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08991608; } @@ -4076,7 +4435,6 @@ L_08991600: } L_08991608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899175C; } @@ -4091,7 +4449,6 @@ L_08991610: L_0899161C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08991634; } @@ -4130,7 +4487,6 @@ L_08991650: } L_08991658: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08991708; } @@ -4148,7 +4504,6 @@ L_08991674: ctx.gpr[19] = (0u | 1u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089916A0; } @@ -4164,7 +4519,6 @@ L_08991690: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08991684; } @@ -4194,7 +4548,6 @@ L_089916B8: L_089916C4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089916DC; } @@ -4230,7 +4583,6 @@ L_089916F8: AOT_REGCACHE_SYNC_OUT(); return; L_08991700: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899175C; } @@ -4254,7 +4606,6 @@ L_08991714: L_08991720: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08991738; } @@ -4306,7 +4657,17 @@ L_0899175C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991788: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9304), 0u); @@ -4581,7 +4942,6 @@ L_08991A30: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991A30; } @@ -4620,7 +4980,6 @@ L_08991A9C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991A9C; } @@ -4665,7 +5024,17 @@ L_08991ACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08991B5C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(60), aot_gpr_16); @@ -4676,7 +5045,6 @@ L_08991B5C: L_08991B70: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08991C34; } @@ -4685,7 +5053,6 @@ L_08991B70: L_08991B7C: aot_gpr_5 = (static_cast(aot_gpr_4) < -499 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08991B9C; } @@ -4694,7 +5061,6 @@ L_08991B7C: L_08991B88: aot_gpr_5 = (static_cast(aot_gpr_4) < -1999 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08991BB4; } @@ -4702,7 +5068,6 @@ L_08991B88: } L_08991B94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991BCC; } @@ -4717,7 +5082,6 @@ L_08991B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08991BAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4732,7 +5096,6 @@ L_08991BB4: AOT_REGCACHE_SYNC_OUT(); return; L_08991BC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4741,7 +5104,6 @@ L_08991BC4: L_08991BCC: aot_gpr_5 = (static_cast(aot_gpr_4) < -3999 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08991BEC; } @@ -4750,7 +5112,6 @@ L_08991BCC: L_08991BD8: aot_gpr_4 = (static_cast(aot_gpr_4) < -5999 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08991C04; } @@ -4758,7 +5119,6 @@ L_08991BD8: } L_08991BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991C1C; } @@ -4773,7 +5133,6 @@ L_08991BEC: AOT_REGCACHE_SYNC_OUT(); return; L_08991BFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4788,7 +5147,6 @@ L_08991C04: AOT_REGCACHE_SYNC_OUT(); return; L_08991C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4803,7 +5161,6 @@ L_08991C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08991C2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4812,7 +5169,6 @@ L_08991C2C: L_08991C34: aot_gpr_5 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991C54; } @@ -4821,7 +5177,6 @@ L_08991C34: L_08991C40: aot_gpr_5 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991C6C; } @@ -4829,7 +5184,6 @@ L_08991C40: } L_08991C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991C84; } @@ -4844,7 +5198,6 @@ L_08991C54: AOT_REGCACHE_SYNC_OUT(); return; L_08991C64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4859,7 +5212,6 @@ L_08991C6C: AOT_REGCACHE_SYNC_OUT(); return; L_08991C7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4868,7 +5220,6 @@ L_08991C7C: L_08991C84: aot_gpr_5 = (static_cast(aot_gpr_4) < 75 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991CA4; } @@ -4877,7 +5228,6 @@ L_08991C84: L_08991C90: aot_gpr_5 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991CBC; } @@ -4885,7 +5235,6 @@ L_08991C90: } L_08991C9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991CD4; } @@ -4900,7 +5249,6 @@ L_08991CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08991CB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4915,7 +5263,6 @@ L_08991CBC: AOT_REGCACHE_SYNC_OUT(); return; L_08991CCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4924,7 +5271,6 @@ L_08991CCC: L_08991CD4: aot_gpr_5 = (static_cast(aot_gpr_4) < 120 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991CF4; } @@ -4933,7 +5279,6 @@ L_08991CD4: L_08991CE0: aot_gpr_5 = (static_cast(aot_gpr_4) < 150 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991D0C; } @@ -4941,7 +5286,6 @@ L_08991CE0: } L_08991CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991D24; } @@ -4956,7 +5300,6 @@ L_08991CF4: AOT_REGCACHE_SYNC_OUT(); return; L_08991D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4971,7 +5314,6 @@ L_08991D0C: AOT_REGCACHE_SYNC_OUT(); return; L_08991D1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -4980,7 +5322,6 @@ L_08991D1C: L_08991D24: aot_gpr_5 = (static_cast(aot_gpr_4) < 200 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991D44; } @@ -4989,7 +5330,6 @@ L_08991D24: L_08991D30: aot_gpr_5 = (static_cast(aot_gpr_4) < 240 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991D5C; } @@ -4997,7 +5337,6 @@ L_08991D30: } L_08991D3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991D74; } @@ -5012,7 +5351,6 @@ L_08991D44: AOT_REGCACHE_SYNC_OUT(); return; L_08991D54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5027,7 +5365,6 @@ L_08991D5C: AOT_REGCACHE_SYNC_OUT(); return; L_08991D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5036,7 +5373,6 @@ L_08991D6C: L_08991D74: aot_gpr_5 = (static_cast(aot_gpr_4) < 270 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991D94; } @@ -5045,7 +5381,6 @@ L_08991D74: L_08991D80: aot_gpr_5 = (static_cast(aot_gpr_4) < 300 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991DAC; } @@ -5053,7 +5388,6 @@ L_08991D80: } L_08991D8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991DC4; } @@ -5068,7 +5402,6 @@ L_08991D94: AOT_REGCACHE_SYNC_OUT(); return; L_08991DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5083,7 +5416,6 @@ L_08991DAC: AOT_REGCACHE_SYNC_OUT(); return; L_08991DBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5092,7 +5424,6 @@ L_08991DBC: L_08991DC4: aot_gpr_5 = (static_cast(aot_gpr_4) < 335 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991DE4; } @@ -5101,7 +5432,6 @@ L_08991DC4: L_08991DD0: aot_gpr_5 = (static_cast(aot_gpr_4) < 370 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991DFC; } @@ -5109,7 +5439,6 @@ L_08991DD0: } L_08991DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991E14; } @@ -5124,7 +5453,6 @@ L_08991DE4: AOT_REGCACHE_SYNC_OUT(); return; L_08991DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5139,7 +5467,6 @@ L_08991DFC: AOT_REGCACHE_SYNC_OUT(); return; L_08991E0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5148,7 +5475,6 @@ L_08991E0C: L_08991E14: aot_gpr_5 = (static_cast(aot_gpr_4) < 400 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991E34; } @@ -5157,7 +5483,6 @@ L_08991E14: L_08991E20: aot_gpr_5 = (static_cast(aot_gpr_4) < 450 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991E4C; } @@ -5165,7 +5490,6 @@ L_08991E20: } L_08991E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991E64; } @@ -5180,7 +5504,6 @@ L_08991E34: AOT_REGCACHE_SYNC_OUT(); return; L_08991E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5195,7 +5518,6 @@ L_08991E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08991E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5204,7 +5526,6 @@ L_08991E5C: L_08991E64: aot_gpr_5 = (static_cast(aot_gpr_4) < 500 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991E84; } @@ -5213,7 +5534,6 @@ L_08991E64: L_08991E70: aot_gpr_5 = (static_cast(aot_gpr_4) < 550 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991E9C; } @@ -5221,7 +5541,6 @@ L_08991E70: } L_08991E7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991EB4; } @@ -5236,7 +5555,6 @@ L_08991E84: AOT_REGCACHE_SYNC_OUT(); return; L_08991E94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5251,7 +5569,6 @@ L_08991E9C: AOT_REGCACHE_SYNC_OUT(); return; L_08991EAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5260,7 +5577,6 @@ L_08991EAC: L_08991EB4: aot_gpr_5 = (static_cast(aot_gpr_4) < 600 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991ED4; } @@ -5269,7 +5585,6 @@ L_08991EB4: L_08991EC0: aot_gpr_5 = (static_cast(aot_gpr_4) < 610 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991EEC; } @@ -5277,7 +5592,6 @@ L_08991EC0: } L_08991ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991F04; } @@ -5292,7 +5606,6 @@ L_08991ED4: AOT_REGCACHE_SYNC_OUT(); return; L_08991EE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5307,7 +5620,6 @@ L_08991EEC: AOT_REGCACHE_SYNC_OUT(); return; L_08991EFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5316,7 +5628,6 @@ L_08991EFC: L_08991F04: aot_gpr_5 = (static_cast(aot_gpr_4) < 650 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991F24; } @@ -5325,7 +5636,6 @@ L_08991F04: L_08991F10: aot_gpr_5 = (static_cast(aot_gpr_4) < 700 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991F3C; } @@ -5333,7 +5643,6 @@ L_08991F10: } L_08991F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991F54; } @@ -5348,7 +5657,6 @@ L_08991F24: AOT_REGCACHE_SYNC_OUT(); return; L_08991F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5363,7 +5671,6 @@ L_08991F3C: AOT_REGCACHE_SYNC_OUT(); return; L_08991F4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5372,7 +5679,6 @@ L_08991F4C: L_08991F54: aot_gpr_5 = (static_cast(aot_gpr_4) < 850 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991F74; } @@ -5381,7 +5687,6 @@ L_08991F54: L_08991F60: aot_gpr_5 = (static_cast(aot_gpr_4) < 1000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991F8C; } @@ -5389,7 +5694,6 @@ L_08991F60: } L_08991F6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991FA4; } @@ -5404,7 +5708,6 @@ L_08991F74: AOT_REGCACHE_SYNC_OUT(); return; L_08991F84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5419,7 +5722,6 @@ L_08991F8C: AOT_REGCACHE_SYNC_OUT(); return; L_08991F9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5428,7 +5730,6 @@ L_08991F9C: L_08991FA4: aot_gpr_5 = (static_cast(aot_gpr_4) < 1005 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991FC4; } @@ -5437,7 +5738,6 @@ L_08991FA4: L_08991FB0: aot_gpr_5 = (static_cast(aot_gpr_4) < 1150 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08991FDC; } @@ -5445,7 +5745,6 @@ L_08991FB0: } L_08991FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08991FF4; } @@ -5460,7 +5759,6 @@ L_08991FC4: AOT_REGCACHE_SYNC_OUT(); return; L_08991FD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5475,7 +5773,6 @@ L_08991FDC: AOT_REGCACHE_SYNC_OUT(); return; L_08991FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5484,7 +5781,6 @@ L_08991FEC: L_08991FF4: aot_gpr_5 = (static_cast(aot_gpr_4) < 1300 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899203C; } @@ -5493,7 +5789,6 @@ L_08991FF4: L_08992000: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9036))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08992024; } @@ -5508,7 +5803,6 @@ L_0899200C: AOT_REGCACHE_SYNC_OUT(); return; L_0899201C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5523,7 +5817,6 @@ L_08992024: AOT_REGCACHE_SYNC_OUT(); return; L_08992034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5532,7 +5825,6 @@ L_08992034: L_0899203C: aot_gpr_5 = (static_cast(aot_gpr_4) < 1500 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0899205C; } @@ -5541,7 +5833,6 @@ L_0899203C: L_08992048: aot_gpr_5 = (static_cast(aot_gpr_4) < 1700 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992074; } @@ -5549,7 +5840,6 @@ L_08992048: } L_08992054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899208C; } @@ -5564,7 +5854,6 @@ L_0899205C: AOT_REGCACHE_SYNC_OUT(); return; L_0899206C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5579,7 +5868,6 @@ L_08992074: AOT_REGCACHE_SYNC_OUT(); return; L_08992084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5588,7 +5876,6 @@ L_08992084: L_0899208C: aot_gpr_5 = (static_cast(aot_gpr_4) < 2000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089920AC; } @@ -5597,7 +5884,6 @@ L_0899208C: L_08992098: aot_gpr_5 = (static_cast(aot_gpr_4) < 2100 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089920C4; } @@ -5605,7 +5891,6 @@ L_08992098: } L_089920A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089920DC; } @@ -5620,7 +5905,6 @@ L_089920AC: AOT_REGCACHE_SYNC_OUT(); return; L_089920BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5635,7 +5919,6 @@ L_089920C4: AOT_REGCACHE_SYNC_OUT(); return; L_089920D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5644,7 +5927,6 @@ L_089920D4: L_089920DC: aot_gpr_5 = (static_cast(aot_gpr_4) < 2300 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089920FC; } @@ -5653,7 +5935,6 @@ L_089920DC: L_089920E8: aot_gpr_5 = (static_cast(aot_gpr_4) < 2500 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992114; } @@ -5661,7 +5942,6 @@ L_089920E8: } L_089920F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899212C; } @@ -5676,7 +5956,6 @@ L_089920FC: AOT_REGCACHE_SYNC_OUT(); return; L_0899210C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5691,7 +5970,6 @@ L_08992114: AOT_REGCACHE_SYNC_OUT(); return; L_08992124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5700,7 +5978,6 @@ L_08992124: L_0899212C: aot_gpr_5 = (static_cast(aot_gpr_4) < 2750 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0899214C; } @@ -5709,7 +5986,6 @@ L_0899212C: L_08992138: aot_gpr_5 = (static_cast(aot_gpr_4) < 3000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992164; } @@ -5717,7 +5993,6 @@ L_08992138: } L_08992144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899217C; } @@ -5732,7 +6007,6 @@ L_0899214C: AOT_REGCACHE_SYNC_OUT(); return; L_0899215C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5747,7 +6021,6 @@ L_08992164: AOT_REGCACHE_SYNC_OUT(); return; L_08992174: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5756,7 +6029,6 @@ L_08992174: L_0899217C: aot_gpr_5 = (static_cast(aot_gpr_4) < 3500 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0899219C; } @@ -5765,7 +6037,6 @@ L_0899217C: L_08992188: aot_gpr_5 = (static_cast(aot_gpr_4) < 4000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089921B4; } @@ -5773,7 +6044,6 @@ L_08992188: } L_08992194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089921CC; } @@ -5788,7 +6058,6 @@ L_0899219C: AOT_REGCACHE_SYNC_OUT(); return; L_089921AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5803,7 +6072,6 @@ L_089921B4: AOT_REGCACHE_SYNC_OUT(); return; L_089921C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5812,7 +6080,6 @@ L_089921C4: L_089921CC: aot_gpr_5 = (static_cast(aot_gpr_4) < 5000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089921EC; } @@ -5821,7 +6088,6 @@ L_089921CC: L_089921D8: aot_gpr_5 = (static_cast(aot_gpr_4) < 7500 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992204; } @@ -5829,7 +6095,6 @@ L_089921D8: } L_089921E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899221C; } @@ -5844,7 +6109,6 @@ L_089921EC: AOT_REGCACHE_SYNC_OUT(); return; L_089921FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5859,7 +6123,6 @@ L_08992204: AOT_REGCACHE_SYNC_OUT(); return; L_08992214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5868,7 +6131,6 @@ L_08992214: L_0899221C: aot_gpr_5 = (static_cast(aot_gpr_4) < 10000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0899223C; } @@ -5877,7 +6139,6 @@ L_0899221C: L_08992228: aot_gpr_5 = (static_cast(aot_gpr_4) < 20000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992254; } @@ -5885,7 +6146,6 @@ L_08992228: } L_08992234: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899226C; } @@ -5900,7 +6160,6 @@ L_0899223C: AOT_REGCACHE_SYNC_OUT(); return; L_0899224C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5915,7 +6174,6 @@ L_08992254: AOT_REGCACHE_SYNC_OUT(); return; L_08992264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5924,7 +6182,6 @@ L_08992264: L_0899226C: aot_gpr_5 = (static_cast(aot_gpr_4) < 30000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992290; } @@ -5934,7 +6191,6 @@ L_08992278: aot_gpr_5 = (0u | 40000u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089922A8; } @@ -5942,7 +6198,6 @@ L_08992278: } L_08992288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089922C0; } @@ -5957,7 +6212,6 @@ L_08992290: AOT_REGCACHE_SYNC_OUT(); return; L_089922A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5972,7 +6226,6 @@ L_089922A8: AOT_REGCACHE_SYNC_OUT(); return; L_089922B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -5982,7 +6235,6 @@ L_089922C0: aot_gpr_5 = (0u | 50000u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089922E8; } @@ -5992,7 +6244,6 @@ L_089922D0: aot_gpr_5 = (0u | 65000u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992300; } @@ -6000,7 +6251,6 @@ L_089922D0: } L_089922E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08992318; } @@ -6015,7 +6265,6 @@ L_089922E8: AOT_REGCACHE_SYNC_OUT(); return; L_089922F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6030,7 +6279,6 @@ L_08992300: AOT_REGCACHE_SYNC_OUT(); return; L_08992310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6041,7 +6289,6 @@ L_08992318: aot_gpr_5 = (aot_gpr_5 + static_cast(14464)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992348; } @@ -6052,7 +6299,6 @@ L_0899232C: aot_gpr_5 = (aot_gpr_5 + static_cast(-31072)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992360; } @@ -6060,7 +6306,6 @@ L_0899232C: } L_08992340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08992378; } @@ -6075,7 +6320,6 @@ L_08992348: AOT_REGCACHE_SYNC_OUT(); return; L_08992358: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6090,7 +6334,6 @@ L_08992360: AOT_REGCACHE_SYNC_OUT(); return; L_08992370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6101,7 +6344,6 @@ L_08992378: aot_gpr_5 = (aot_gpr_5 + static_cast(18928)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089923A8; } @@ -6112,7 +6354,6 @@ L_0899238C: aot_gpr_5 = (aot_gpr_5 + static_cast(3392)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089923C0; } @@ -6120,7 +6361,6 @@ L_0899238C: } L_089923A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089923D8; } @@ -6135,7 +6375,6 @@ L_089923A8: AOT_REGCACHE_SYNC_OUT(); return; L_089923B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6150,7 +6389,6 @@ L_089923C0: AOT_REGCACHE_SYNC_OUT(); return; L_089923D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6161,7 +6399,6 @@ L_089923D8: aot_gpr_5 = (aot_gpr_5 + static_cast(-27680)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992408; } @@ -6172,7 +6409,6 @@ L_089923EC: aot_gpr_5 = (aot_gpr_5 + static_cast(-18216)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08992420; } @@ -6180,7 +6416,6 @@ L_089923EC: } L_08992400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08992438; } @@ -6195,7 +6430,6 @@ L_08992408: AOT_REGCACHE_SYNC_OUT(); return; L_08992418: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6210,7 +6444,6 @@ L_08992420: AOT_REGCACHE_SYNC_OUT(); return; L_08992430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6221,7 +6454,6 @@ L_08992438: aot_gpr_5 = (aot_gpr_5 + static_cast(-24288)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899248C; } @@ -6231,7 +6463,6 @@ L_0899244C: aot_gpr_4 = (0u | 11u); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08992474; } @@ -6246,7 +6477,6 @@ L_0899245C: AOT_REGCACHE_SYNC_OUT(); return; L_0899246C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6261,7 +6491,6 @@ L_08992474: AOT_REGCACHE_SYNC_OUT(); return; L_08992484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6272,7 +6501,6 @@ L_0899248C: aot_gpr_5 = (aot_gpr_5 + static_cast(16960)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089924E4; } @@ -6293,7 +6521,6 @@ L_089924A0: aot_gpr_5 = (aot_gpr_5 + static_cast(-27008)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089924FC; } @@ -6301,7 +6528,6 @@ L_089924A0: } L_089924DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08992514; } @@ -6316,7 +6542,6 @@ L_089924E4: AOT_REGCACHE_SYNC_OUT(); return; L_089924F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6331,7 +6556,6 @@ L_089924FC: AOT_REGCACHE_SYNC_OUT(); return; L_0899250C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6346,7 +6570,6 @@ L_08992514: AOT_REGCACHE_SYNC_OUT(); return; L_08992524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899252C; } @@ -6360,7 +6583,17 @@ L_0899252C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899253C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), ctx.gpr[18]); @@ -6373,7 +6606,6 @@ L_0899253C: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(12), ctx.gpr[19]); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(16), aot_gpr_31); aot_gpr_31 = (0x0899256Cu); - // nop goto L_089910C8; L_0899256C: aot_gpr_4 = (0u | 338u); @@ -7414,7 +7646,17 @@ L_08992FB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08992FD4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -8390,7 +8632,17 @@ L_0899394C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08993964: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-736)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(708), aot_gpr_16); @@ -8407,9 +8659,7 @@ L_0899398C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089939F0; } @@ -8417,7 +8667,6 @@ L_0899398C: } L_089939B0: { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_089939C0; } @@ -8454,7 +8703,6 @@ L_089939E8: } L_089939F0: { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993A00; } @@ -8489,7 +8737,6 @@ L_08993A20: } L_08993A28: { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993A78; } @@ -8502,16 +8749,11 @@ L_08993A30: aot_gpr_5 = (0u | 60u); aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.hi); { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993AA4; } @@ -8573,16 +8815,11 @@ L_08993AD0: aot_gpr_4 = (0u | 60u); aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.hi); { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993B28; } @@ -8591,7 +8828,6 @@ L_08993AD0: L_08993B14: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993B54; } @@ -8599,7 +8835,6 @@ L_08993B14: } L_08993B20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08993B80; } @@ -8648,7 +8883,6 @@ L_08993B78: L_08993B80: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993BA0; } @@ -8665,7 +8899,6 @@ L_08993B8C: } L_08993B98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 20u, 0x08994138u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8710,7 +8943,6 @@ L_08993BD4: } L_08993BE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08993C58; } @@ -8735,7 +8967,6 @@ L_08993C00: } L_08993C08: { const bool branch_taken = aot_gpr_17 != aot_gpr_16; - // nop if (branch_taken) { goto L_08993C54; } @@ -8781,7 +9012,6 @@ L_08993C54: L_08993C58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08993CB4; } @@ -8789,7 +9019,6 @@ L_08993C58: } L_08993C64: { const bool branch_taken = aot_gpr_17 != aot_gpr_16; - // nop if (branch_taken) { goto L_08993CB0; } @@ -8835,7 +9064,6 @@ L_08993CB0: L_08993CB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8304))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08993D10; } @@ -8843,7 +9071,6 @@ L_08993CB4: } L_08993CC0: { const bool branch_taken = aot_gpr_17 != aot_gpr_16; - // nop if (branch_taken) { goto L_08993D0C; } @@ -8889,7 +9116,6 @@ L_08993D0C: L_08993D10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8308))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08993D6C; } @@ -8897,7 +9123,6 @@ L_08993D10: } L_08993D1C: { const bool branch_taken = aot_gpr_17 != aot_gpr_16; - // nop if (branch_taken) { goto L_08993D68; } @@ -8943,7 +9168,6 @@ L_08993D68: L_08993D6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08993D80; } @@ -8951,7 +9175,6 @@ L_08993D6C: } L_08993D78: aot_gpr_31 = (0x08993D80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08993D80u) goto L_08993D80; AOT_REGCACHE_SYNC_OUT(); return; L_08993D80: @@ -8967,7 +9190,6 @@ L_08993D80: } L_08993D94: { const bool branch_taken = aot_gpr_17 == aot_gpr_16; - // nop if (branch_taken) { goto L_08993DA4; } @@ -9004,7 +9226,6 @@ L_08993DC8: L_08993DD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8312))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08993E30; } @@ -9053,7 +9274,6 @@ L_08993E28: L_08993E30: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8313))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08993E90; } @@ -9102,7 +9322,6 @@ L_08993E88: L_08993E90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8314))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08993EF0; } @@ -9151,7 +9370,6 @@ L_08993EE8: L_08993EF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8315))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08993F50; } @@ -9202,7 +9420,6 @@ L_08993F50: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8180))); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08993FBC; } @@ -9254,7 +9471,6 @@ L_08993FBC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8188))); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 3u, 0x08994028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0100.cpp b/profiles/vcs/generated/generated_unit_0100.cpp index d476800..f7238bf 100644 --- a/profiles/vcs/generated/generated_unit_0100.cpp +++ b/profiles/vcs/generated/generated_unit_0100.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0100[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 7, 0, 8, 0, 0, 0, 0, - 0, 9, 0, 10, 0, 0, 11, 0, 0, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 0, 0, 20, 0, 21, 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 25, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 29, 0, 0, 30, 0, 31, 0, 0, 32, 0, 33, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, - 48, 0, 0, 49, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 55, 0, - 0, 56, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, 63, - 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, 0, 70, 0, 0, - 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, - 77, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 81, 0, 0, 0, 0, 82, 0, 0, 83, 0, 84, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 89, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, - 93, 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 0, 97, 0, 98, 0, 0, 0, 99, 0, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 103, 0, - 104, 0, 0, 0, 105, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 0, 109, 0, 110, 111, 0, 112, 0, 0, 113, 0, 114, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 118, 0, 0, 119, 0, 0, 120, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, 0, 126, 0, 0, 127, 0, 128, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, - 0, 134, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 0, 143, 0, 144, 145, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150, 0, 0, 151, - 0, 152, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 157, 0, - 0, 158, 0, 0, 159, 0, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 164, 0, 165, 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, - 169, 0, 170, 0, 0, 171, 0, 172, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 0, 177, 0, 0, 178, 0, 0, 179, 0, 180, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 0, 186, 0, 0, 187, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, - 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 198, 0, 0, 199, 0, 200, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, - 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, - 209, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 212, 0, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, - 0, 0, 0, 216, 0, 217, 0, 218, 0, 0, 0, 0, 219, 0, 0, 220, 0, 0, 221, 0, 222, 223, 224, 0, 0, 225, 0, 0, 226, 0, 227, 0, - 228, 0, 229, 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 233, 234, 235, 0, 0, 236, 0, 0, 237, 0, 238, 0, 239, 0, 240, 0, 0, - 0, 0, 241, 0, 0, 242, 0, 0, 243, 0, 244, 245, 246, 0, 0, 247, 0, 0, 248, 0, 249, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 0, - 253, 0, 0, 254, 0, 255, 256, 257, 0, 0, 258, 0, 0, 259, 0, 260, 0, 261, 0, 262, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 265, 0, - 266, 267, 268, 0, 0, 269, 0, 0, 270, 0, 271, 0, 272, 0, 273, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 276, 0, 277, 278, 279, 0, 0, - 280, 0, 0, 281, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 287, 0, 288, 289, 290, 0, 0, 291, 0, 0, 292, 0, - 293, 0, 294, 0, 295, 0, 0, 0, 0, 296, 0, 0, 297, 0, 0, 298, 0, 299, 300, 301, 0, 0, 302, 0, 0, 303, 0, 304, 0, 305, 0, 306, - 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 309, 0, 310, 311, 312, 0, 0, 313, 0, 0, 314, 0, 315, 0, 316, 0, 317, 0, 0, 0, 0, 318, - 0, 0, 319, 0, 0, 320, 0, 321, 322, 323, 0, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, 328, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, - 331, 0, 332, 333, 334, 0, 0, 335, 0, 0, 336, 0, 337, 0, 338, 0, 339, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 343, 344, 345, - 0, 0, 346, 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 353, 0, 354, 355, 356, 0, 0, 357, 0, 0, - 358, 0, 359, 360, 0, 361, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, - 366, 0, 367, 0, 0, 368, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, - 374, 0, 0, 375, 0, 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 381, 0, - 0, 382, 0, 0, 383, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 0, 389, - 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, - 398, 0, 0, 399, 0, 400, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 403, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 407, 0, 408, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 414, 0, 415, 0, 416, 0, - 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 419, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 424, 0, - 425, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 429, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, - 0, 433, 0, 0, 434, 0, 435, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, - 442, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 449, 0, 0, 450, 0, 0, 0, - 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 453, 0, 454, 0, 455, 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 458, 0, 459, - 0, 0, 460, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 468, 0, 469, 0, 0, 470, 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, 476, 0, 477, 0, 0, - 0, 0, 0, 0, 0, 0, 478, 0, 479, 0, 0, 480, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 485, 0, 486, - 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 0, 0, 490, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, - 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 500, 0, 501, 0, 502, 0, 503, 0, 0, 504, - 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 507, 0, 508, 0, 509, 0, 510, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, - 512, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, - 0, 521, 0, 522, 0, 523, 0, 524, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 526, 0, 527, 0, 0, 0, 0, 0, 528, 0, 529, 0, 530, 0, - 531, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 535, 0, 536, 0, 0, 537, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, - 539, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 542, 0, 0, 543, 0, 544, 0, 0, 545, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, - 547, 0, 548, 0, 549, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 552, 0, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 555, - 0, 556, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 563, - 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 566, 0, 0, 567, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 570, 0, - 0, 571, 0, 0, 0, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 578, - 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 581, 0, 582, 0, 583, 0, 0, 584, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, - 0, 587, 0, 588, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, - 0, 0, 595, 0, 596, 0, 0, 597, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, 0, - 603, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 606, 0, 607, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, - 611, 0, 612, 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 617, 0, 0, 618, 0, 0, 0, 0, 0, 0, - 0, 619, 0, 620, 0, 0, 621, 0, 622, 0, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 626, 0, 0, 0, 627, - 0, 0, 0, 0, 0, 628, 0, 629, 0, 630, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 0, 634, 0, 0, 0, 0, - 0, 0, 635, 0, 636, 0, 637, 0, 0, 0, 638, 0, 0, 0, 0, 0, 639, 0, 640, 0, 0, 0, 641, 0, 642, 0, 0, 643, 0, 644, 0, 0, - 0, 0, 0, 0, 645, 0, 646, 0, 0, 0, 0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, 651, 0, 652, 0, - 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 655, 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 659, 0, 660, - 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 666, 0, 667, 0, 0, 0, 668, 0, - 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 671, 0, 672, 0, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 0, 677, 0, - 0, 678, 0, 0, 0, 0, 0, 0, 0, 679, 0, 680, 0, 0, 681, 0, 682, 0, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 685, - 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 689, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 694, - 0, 695, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 698, 0, 0, 699, 0, 700, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, - 703, 0, 704, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 708, 0, 709, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 711, - 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 720, 0, 0, 0, 721, 0, 722, - 0, 0, 0, 723, 0, 724, 0, 0, 0, 725, 0, 726, 0, 0, 0, 727, 0, 728, 0, 0, 0, 729, 0, 730, 0, 0, 0, 731, 0, 732, 0, 0, - 0, 733, 0, 734, 0, 0, 0, 735, 0, 736, 0, 0, 737, 0, 738, 0, 0, 0, 739, 0, 0, 0, 0, 0, 740, 0, 0, 0, 741, 0, 742, 0, - 0, 0, 743, 0, 744, 0, 0, 0, 745, 0, 746, 0, 0, 0, 747, 0, 748, 0, 0, 0, 749, 0, 750, 0, 0, 0, 751, 0, 752, 0, 0, 0, - 753, 0, 754, 0, 0, 0, 755, 0, 756, 0, 0, 0, 757, 0, 758, 759, 0, 760, 0, 0, 761, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 763, - 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 766, 0, 0, 767, 0, 0, 768, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 771, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 773, 0, 0, 774, 0, 0, 775, 0, 776, 0, 0, 777, 0, 0, 0, 778, 0, 779, 0, 0, 0, - 0, 0, 0, 0, 0, 780, 0, 781, 0, 0, 0, 782, 0, 0, 0, 0, 0, 783, 0, 784, 0, 785, 0, 0, 786, 0, 0, 0, 0, 0, 787, 0, - 788, 0, 0, 0, 789, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 793, 0, 0, 0, 794, 795, 0, 0, 0, 0, 0, 0, 0, 796, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 799, 0, 800, 0, 0, 0, 801, - 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 804, 0, 805, 0, 806, 0, 0, 0, 807, 0, 0, 0, 0, 0, 0, 808, 0, 809, 0, 810, 0, - 811, 0, 812, 0, 0, 0, 0, 813, 0, 0, 814, 0, 0, 815, 0, 816, 817, 818, 0, 0, 819, 0, 820, 0, 0, 0, 0, 0, 821, 0, 822, 0, - 0, 0, 823, 0, 0, 0, 824, 0, 0, 825, 0, 0, 826, 0, 827, 828, 829, 0, 0, 830, 0, 831, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, - 833, 0, 834, 0, 0, 0, 0, 835, 0, 0, 836, 0, 0, 837, 0, 838, 839, 840, 0, 0, 841, 0, 842, 0, 0, 0, 0, 0, 843, 0, 844, 0, - 0, 0, 0, 845, 0, 0, 0, 846, 0, 0, 847, 0, 0, 848, 0, 849, 850, 851, 0, 0, 852, 0, 853, 0, 0, 854, 0, 0, 0, 0, 0, 0, - 0, 855, 0, 856, 0, 0, 0, 0, 857, 0, 0, 858, 0, 0, 859, 0, 860, 861, 862, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 865, 0, 866, - 0, 0, 0, 0, 867, 0, 0, 0, 868, 0, 0, 0, 0, 0, 0, 869, 0, 0, 870, 0, 0, 871, 0, 0, 872, 0, 0, 873, 0, 0, 874, 0, - 875, 876, 877, 0, 0, 878, 0, 879, 0, 0, 0, 0, 0, 0, 0, 880, 0, 881, 0, 0, 882, 0, 0, 883, 0, 0, 884, 0, 885, 886, 887, 0, - 0, 888, 0, 889, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 891, 0, 0, 892, 0, 0, 0, 893, 0, 0, 0, 894, 0, 895, 0, 896, - 0, 897, 0, 898, 0, 0, 0, 0, 0, 899, 0, 900, 0, 0, 0, 0, 901, 0, 0, 0, 0, 902, 0, 903, 0, 0, 0, 0, 0, 904, 0, 905, - 0, 0, 0, 0, 906, 0, 0, 0, 0, 907, 0, 908, 0, 0, 0, 0, 0, 909, 0, 910, 0, 0, 0, 911, 0, 0, 912, 0, 0, 913, 0, 0, - 914, 0, 0, 0, 0, 915, 0, 916, 0, 0, 0, 0, 917, 918, 0, 919, 0, 0, 920, 0, 921, 0, 0, 0, 0, 922, 0, 0, 0, 0, 923, 0, - 0, 924, 0, 0, 0, 925, 0, 0, 926, 0, 0, 927, 0, 0, 928, 0, 0, 929, 0, 930, 931, 0, 932, 0, 933, 0, 0, 934, 0, 935, 0, 0, - 936, 0, 937, 0, 0, 938, 0, 0, 939, 0, 0, 940, 0, 941, 942, 0, 943, 0, 944, 0, 0, 945, 0, 946, 0, 0, 947, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, - 0, 950, 0, 0, 0, 0, 951, 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, 953, 0, 0, 0, 0, 954, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 955, 0, 0, 0, 0, 0, 956, 0, 957, 958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 959, 0, 0, 0, 960, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, 0, 963, 0, 0, 0, 0, 964, 0, 0, 0, 0, 965, 0, 0, 0, 0, 0, - 0, 966, 0, 0, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 0, 0, 0, 0, 0, 969, 0, 970, 971, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 972, 0, 0, 0, 973, 0, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 976, 0, 977, 0, 0, 0, 0, 978, 0, 0, 0, 0, 979, 0, 0, 0, 0, 0, 0, 980, 0, 0, 0, 0, 981, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, 0, 0, 0, 983, 0, 984, 985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, 0, 0, 987, - 0, 0, 0, 988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 990, 0, 0, 0, 991, 0, 0, 0, 0, 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 993, 0, 994, 0, 0, 0, 0, 995, 0, 0, 0, 0, 996, 0, 0, 0, 0, 0, 0, 0, 0, 997, 0, 0, 0, 0, 998, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 999, 0, 0, 0, 0, 0, 1000, 0, 1001, 1002, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1003, 0, 0, 0, 0, 1004, 0, 0, 0, 1005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1006, - 0, 0, 0, 1007, 0, 0, 0, 1008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1009, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 0, 1011, 0, 0, 0, 0, 1012, 0, 0, 0, 0, 1013, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0100[64] = { + 0x05028A4A0A444501ull, 0x294A005500294280ull, 0x4028052A014A0140ull, 0x94028052500A0149ull, + 0x0240500A2500A014ull, 0x1045441015214015ull, 0x052D145145145145ull, 0x29280500A4A00500ull, + 0x34AA911280800940ull, 0x5001400692800A00ull, 0x4000014A002800D2ull, 0x0A003494005001A5ull, + 0x000A500140069280ull, 0x00A4A002800D2A00ull, 0x527490A820212805ull, 0x21549D242A93A485ull, + 0x3A485527490AA4E9ull, 0xAA4E921549D242A9ull, 0x242A93A485527490ull, 0x27490AA4E921549Dull, + 0x4028052500A0052Dull, 0x94028052500A0149ull, 0x02A500A9402A500Aull, 0x4A01528054A01528ull, + 0x5414015280152805ull, 0xA025505012A82809ull, 0x2A500A9401528054ull, 0x500A9402A500A940ull, + 0x012A82809541402Aull, 0x541404AA0A025505ull, 0x00A5280500A52809ull, 0x8294402280528095ull, + 0xD0120A0241494002ull, 0x0482814A28254088ull, 0x1411502114048294ull, 0x8A02414A024140A5ull, + 0x2945045408500AA0ull, 0xA822809052809050ull, 0x4502945045421402ull, 0x9402A82280914A02ull, + 0x805500A5402A500Aull, 0x28A28A28A28822AAull, 0x145145145104528Aull, 0xA01494028052D145ull, + 0x412A08A0144A4A00ull, 0x8A80400040628151ull, 0x5053A4855408A850ull, 0x5053A4850129D244ull, + 0xA0A7490A0253A488ull, 0x749280A749248110ull, 0xA0A10A0AA889080Aull, 0x4214B0A1248A0A10ull, + 0x04A56925295A4922ull, 0x8000000000000080ull, 0x2200D04000840842ull, 0x0000000000008000ull, + 0x6820004204214000ull, 0x0000000400011100ull, 0x0210210A00000000ull, 0x0020000888034100ull, + 0x0000000000000211ull, 0x006820000840210Aull, 0x0200008880000221ull, 0x4214000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0100[64] = { + 1u, 18u, 34u, 48u, 64u, 77u, 93u, 115u, 129u, 146u, 158u, 169u, 184u, 196u, 209u, 228u, + 253u, 280u, 307u, 331u, 358u, 374u, 390u, 407u, 425u, 442u, 460u, 478u, 495u, 512u, 531u, 547u, + 564u, 579u, 595u, 611u, 628u, 645u, 661u, 678u, 695u, 712u, 733u, 753u, 772u, 788u, 802u, 823u, + 845u, 867u, 888u, 906u, 924u, 948u, 950u, 961u, 962u, 972u, 976u, 982u, 990u, 993u, 1003u, 1010u, }; void recomp_unit_0100_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0100_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08994000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0100[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0100[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0100[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08994000; @@ -1206,7 +1113,6 @@ L_08994028: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08994138; } @@ -1223,7 +1129,6 @@ L_08994048: aot_gpr_4 = (ctx.gpr[18] + aot_gpr_28); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8160))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899406C; } @@ -1237,7 +1142,6 @@ L_08994058: AOT_REGCACHE_SYNC_OUT(); return; L_08994064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994084; } @@ -1254,7 +1158,6 @@ L_0899406C: AOT_REGCACHE_SYNC_OUT(); return; L_08994084: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089940C4; } @@ -1263,7 +1166,6 @@ L_08994084: L_0899408C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089940AC; } @@ -1272,7 +1174,6 @@ L_0899408C: L_08994098: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089940E8; } @@ -1280,7 +1181,6 @@ L_08994098: } L_089940A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994124; } @@ -1346,7 +1246,6 @@ L_08994124: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08994038; } @@ -1354,7 +1253,6 @@ L_08994124: } L_08994138: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994154; } @@ -1371,7 +1269,6 @@ L_08994140: } L_0899414C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089941CC; } @@ -1400,7 +1297,6 @@ L_08994180: } L_08994188: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994198; } @@ -1438,7 +1334,6 @@ L_089941C4: L_089941CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899428C; } @@ -1446,7 +1341,6 @@ L_089941CC: } L_089941D8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089941F4; } @@ -1455,7 +1349,6 @@ L_089941D8: L_089941E0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994220; } @@ -1463,7 +1356,6 @@ L_089941E0: } L_089941EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899424C; } @@ -1510,7 +1402,6 @@ L_08994244: L_0899424C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994260; } @@ -1545,7 +1436,6 @@ L_08994284: } L_0899428C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089942A8; } @@ -1554,7 +1444,6 @@ L_0899428C: L_08994294: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089942D4; } @@ -1562,7 +1451,6 @@ L_08994294: } L_089942A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994300; } @@ -1609,7 +1497,6 @@ L_089942F8: L_08994300: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994320; } @@ -1618,7 +1505,6 @@ L_08994300: L_0899430C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899434C; } @@ -1626,7 +1512,6 @@ L_0899430C: } L_08994318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994378; } @@ -1673,7 +1558,6 @@ L_08994370: L_08994378: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994398; } @@ -1682,7 +1566,6 @@ L_08994378: L_08994384: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089943C4; } @@ -1690,7 +1573,6 @@ L_08994384: } L_08994390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089943F0; } @@ -1737,7 +1619,6 @@ L_089943E8: L_089943F0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994410; } @@ -1746,7 +1627,6 @@ L_089943F0: L_089943FC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899443C; } @@ -1754,7 +1634,6 @@ L_089943FC: } L_08994408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994468; } @@ -1801,7 +1680,6 @@ L_08994460: L_08994468: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899448C; } @@ -1819,7 +1697,6 @@ L_08994474: } L_08994484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994500; } @@ -1936,7 +1813,6 @@ L_08994560: } L_08994568: { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089945A8; } @@ -1950,7 +1826,6 @@ L_08994570: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089945A8; } @@ -1968,7 +1843,6 @@ L_089945A8: ctx.gpr[6] = (ctx.gpr[6] + static_cast(1)); ctx.gpr[7] = (static_cast(ctx.gpr[6]) < 16 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08994554; } @@ -1976,7 +1850,6 @@ L_089945A8: } L_089945B8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089946CC; } @@ -1984,7 +1857,6 @@ L_089945B8: } L_089945C0: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089946C8; } @@ -2006,11 +1878,20 @@ L_089945D8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4944))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089945F0: aot_gpr_4 = (aot_gpr_28 + static_cast(-14900)); aot_gpr_5 = (aot_gpr_28 + static_cast(-14892)); @@ -2020,7 +1901,6 @@ L_089945F0: AOT_REGCACHE_SYNC_OUT(); return; L_08994600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2035,7 +1915,6 @@ L_08994608: AOT_REGCACHE_SYNC_OUT(); return; L_08994618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2050,7 +1929,6 @@ L_08994620: AOT_REGCACHE_SYNC_OUT(); return; L_08994630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2065,7 +1943,6 @@ L_08994638: AOT_REGCACHE_SYNC_OUT(); return; L_08994648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2080,7 +1957,6 @@ L_08994650: AOT_REGCACHE_SYNC_OUT(); return; L_08994660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2095,7 +1971,6 @@ L_08994668: AOT_REGCACHE_SYNC_OUT(); return; L_08994678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2110,7 +1985,6 @@ L_08994680: AOT_REGCACHE_SYNC_OUT(); return; L_08994690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2125,7 +1999,6 @@ L_08994698: AOT_REGCACHE_SYNC_OUT(); return; L_089946A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089946C0; } @@ -2160,7 +2033,6 @@ L_089946CC: L_089946D4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994728; } @@ -2168,7 +2040,6 @@ L_089946D4: } L_089946E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899475C; } @@ -2222,7 +2093,6 @@ L_08994754: L_0899475C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899477C; } @@ -2231,7 +2101,6 @@ L_0899475C: L_08994768: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089947A8; } @@ -2239,7 +2108,6 @@ L_08994768: } L_08994774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089947D4; } @@ -2286,7 +2154,6 @@ L_089947CC: L_089947D4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089947F4; } @@ -2295,7 +2162,6 @@ L_089947D4: L_089947E0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994820; } @@ -2303,7 +2169,6 @@ L_089947E0: } L_089947EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994884; } @@ -2389,7 +2254,6 @@ L_089948A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7868))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08994D2C; } @@ -2422,7 +2286,6 @@ L_089948C4: } L_089948CC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08994B00; } @@ -2447,7 +2310,6 @@ L_089948DC: } L_089948E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994964; } @@ -2520,7 +2382,6 @@ L_08994970: } L_0899497C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089949F8; } @@ -2593,7 +2454,6 @@ L_08994A04: } L_08994A10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994A8C; } @@ -2708,7 +2568,6 @@ L_08994B08: goto L_08994B14; L_08994B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994B90; } @@ -2777,7 +2636,6 @@ L_08994B9C: goto L_08994BA8; L_08994BA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994C24; } @@ -2846,7 +2704,6 @@ L_08994C30: goto L_08994C3C; L_08994C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994CB8; } @@ -2961,7 +2818,6 @@ L_08994D34: goto L_08994D40; L_08994D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994DBC; } @@ -3017,7 +2873,6 @@ L_08994DB4: L_08994DBC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994DDC; } @@ -3026,7 +2881,6 @@ L_08994DBC: L_08994DC8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08994E08; } @@ -3034,7 +2888,6 @@ L_08994DC8: } L_08994DD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08994E34; } @@ -3106,11 +2959,20 @@ L_08994E54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4904))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08994E74: aot_gpr_5 = (0u | 0u); ctx.gpr[6] = (0u | 0u); @@ -3155,7 +3017,6 @@ L_08994EB0: L_08994EBC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08994ED4; } @@ -3228,7 +3089,6 @@ L_08994F1C: L_08994F28: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08994F40; } @@ -3301,7 +3161,6 @@ L_08994F88: L_08994F94: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08994FAC; } @@ -3374,7 +3233,6 @@ L_08994FF4: L_08995000: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08995018; } @@ -3447,7 +3305,6 @@ L_08995060: L_0899506C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08995084; } @@ -3520,7 +3377,6 @@ L_089950CC: L_089950D8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089950F0; } @@ -3593,7 +3449,6 @@ L_08995138: L_08995144: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0899515C; } @@ -3666,7 +3521,6 @@ L_089951A4: L_089951B0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089951C8; } @@ -3739,7 +3593,6 @@ L_08995210: L_0899521C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08995234; } @@ -3812,7 +3665,6 @@ L_0899527C: L_08995288: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089952A0; } @@ -3885,7 +3737,6 @@ L_089952E8: L_089952F4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0899530C; } @@ -3958,7 +3809,6 @@ L_08995354: L_08995360: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08995378; } @@ -4031,7 +3881,6 @@ L_089953C0: L_089953CC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089953E4; } @@ -4073,7 +3922,6 @@ L_08995408: goto L_0899540C; L_0899540C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995428; } @@ -4082,7 +3930,6 @@ L_0899540C: L_08995414: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899545C; } @@ -4090,7 +3937,6 @@ L_08995414: } L_08995420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08995488; } @@ -4139,7 +3985,6 @@ L_08995480: L_08995488: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089954A8; } @@ -4148,7 +3993,6 @@ L_08995488: L_08995494: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089954D4; } @@ -4156,7 +4000,6 @@ L_08995494: } L_089954A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08995500; } @@ -4203,7 +4046,6 @@ L_089954F8: L_08995500: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995520; } @@ -4212,7 +4054,6 @@ L_08995500: L_0899550C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899554C; } @@ -4220,7 +4061,6 @@ L_0899550C: } L_08995518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08995578; } @@ -4267,7 +4107,6 @@ L_08995570: L_08995578: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995598; } @@ -4276,7 +4115,6 @@ L_08995578: L_08995584: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089955C4; } @@ -4284,7 +4122,6 @@ L_08995584: } L_08995590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089955F0; } @@ -4339,7 +4176,6 @@ L_089955F0: } L_089955FC: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899560C; } @@ -4375,7 +4211,6 @@ L_08995630: L_08995638: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9360))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995680; } @@ -4383,7 +4218,6 @@ L_08995638: } L_08995644: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995654; } @@ -4419,7 +4253,6 @@ L_08995678: L_08995680: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8116))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089956C8; } @@ -4427,7 +4260,6 @@ L_08995680: } L_0899568C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899569C; } @@ -4463,7 +4295,6 @@ L_089956C0: L_089956C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8120))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995714; } @@ -4506,7 +4337,6 @@ L_0899570C: L_08995714: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9348))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_0899575C; } @@ -4514,7 +4344,6 @@ L_08995714: } L_08995720: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995730; } @@ -4550,7 +4379,6 @@ L_08995754: L_0899575C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9364))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089957A4; } @@ -4558,7 +4386,6 @@ L_0899575C: } L_08995768: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995778; } @@ -4594,7 +4421,6 @@ L_0899579C: L_089957A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9356))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089957EC; } @@ -4602,7 +4428,6 @@ L_089957A4: } L_089957B0: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089957C0; } @@ -4638,7 +4463,6 @@ L_089957E4: L_089957EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9368))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995834; } @@ -4646,7 +4470,6 @@ L_089957EC: } L_089957F8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995808; } @@ -4682,7 +4505,6 @@ L_0899582C: L_08995834: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8148))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995884; } @@ -4690,7 +4512,6 @@ L_08995834: } L_08995840: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995850; } @@ -4728,7 +4549,6 @@ L_0899587C: L_08995884: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8196))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089958D0; } @@ -4774,7 +4594,6 @@ L_089958D0: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995934; } @@ -4782,7 +4601,6 @@ L_089958D0: } L_089958E8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089958F8; } @@ -4831,7 +4649,6 @@ L_08995934: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995998; } @@ -4839,7 +4656,6 @@ L_08995934: } L_0899594C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899595C; } @@ -4888,7 +4704,6 @@ L_08995998: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089959FC; } @@ -4896,7 +4711,6 @@ L_08995998: } L_089959B0: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089959C0; } @@ -4942,7 +4756,6 @@ L_089959F4: L_089959FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8168))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995A44; } @@ -4950,7 +4763,6 @@ L_089959FC: } L_08995A08: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995A18; } @@ -4986,7 +4798,6 @@ L_08995A3C: L_08995A44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8212))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995A90; } @@ -5029,7 +4840,6 @@ L_08995A88: L_08995A90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8216))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995AD8; } @@ -5037,7 +4847,6 @@ L_08995A90: } L_08995A9C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995AAC; } @@ -5073,7 +4882,6 @@ L_08995AD0: L_08995AD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8220))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995B20; } @@ -5081,7 +4889,6 @@ L_08995AD8: } L_08995AE4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995AF4; } @@ -5117,7 +4924,6 @@ L_08995B18: L_08995B20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8224))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995B68; } @@ -5125,7 +4931,6 @@ L_08995B20: } L_08995B2C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995B3C; } @@ -5161,7 +4966,6 @@ L_08995B60: L_08995B68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8228))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995BB0; } @@ -5169,7 +4973,6 @@ L_08995B68: } L_08995B74: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995B84; } @@ -5205,7 +5008,6 @@ L_08995BA8: L_08995BB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8232))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995BF8; } @@ -5213,7 +5015,6 @@ L_08995BB0: } L_08995BBC: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995BCC; } @@ -5249,7 +5050,6 @@ L_08995BF0: L_08995BF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8236))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995C40; } @@ -5257,7 +5057,6 @@ L_08995BF8: } L_08995C04: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995C14; } @@ -5296,7 +5095,6 @@ L_08995C40: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995CA4; } @@ -5304,7 +5102,6 @@ L_08995C40: } L_08995C58: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995C68; } @@ -5353,7 +5150,6 @@ L_08995CA4: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995D08; } @@ -5361,7 +5157,6 @@ L_08995CA4: } L_08995CBC: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995CCC; } @@ -5410,7 +5205,6 @@ L_08995D08: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995D6C; } @@ -5418,7 +5212,6 @@ L_08995D08: } L_08995D20: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995D30; } @@ -5467,7 +5260,6 @@ L_08995D6C: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995DD0; } @@ -5475,7 +5267,6 @@ L_08995D6C: } L_08995D84: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995D94; } @@ -5524,7 +5315,6 @@ L_08995DD0: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08995E34; } @@ -5532,7 +5322,6 @@ L_08995DD0: } L_08995DE8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995DF8; } @@ -5578,7 +5367,6 @@ L_08995E2C: L_08995E34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8172))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995EB4; } @@ -5586,7 +5374,6 @@ L_08995E34: } L_08995E40: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995E5C; } @@ -5595,7 +5382,6 @@ L_08995E40: L_08995E48: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995E88; } @@ -5650,7 +5436,6 @@ L_08995EAC: L_08995EB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8280))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08995F84; } @@ -5658,7 +5443,6 @@ L_08995EB4: } L_08995EC0: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995EDC; } @@ -5667,7 +5451,6 @@ L_08995EC0: L_08995EC8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995F08; } @@ -5675,7 +5458,6 @@ L_08995EC8: } L_08995ED4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08995F44; } @@ -5732,7 +5514,6 @@ L_08995F3C: L_08995F44: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08995F58; } @@ -5769,7 +5550,6 @@ L_08995F84: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899610C; } @@ -5784,7 +5564,6 @@ L_08995F94: aot_gpr_5 = (32768u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089960FC; } @@ -5808,7 +5587,6 @@ L_08995FC8: L_08995FD0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996004; } @@ -5816,7 +5594,6 @@ L_08995FD0: } L_08995FDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996040; } @@ -5864,7 +5641,6 @@ L_08996038: L_08996040: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996060; } @@ -5873,7 +5649,6 @@ L_08996040: L_0899604C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089960AC; } @@ -5881,7 +5656,6 @@ L_0899604C: } L_08996058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089960F8; } @@ -5960,7 +5734,6 @@ L_089960FC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08995F94; } @@ -5983,7 +5756,6 @@ L_0899611C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08996270; } @@ -5991,7 +5763,6 @@ L_0899611C: } L_08996138: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08996174; } @@ -6039,7 +5810,6 @@ L_08996174: AOT_REGCACHE_SYNC_OUT(); return; L_08996184: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089961A0; } @@ -6048,7 +5818,6 @@ L_08996184: L_0899618C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089961C4; } @@ -6056,7 +5825,6 @@ L_0899618C: } L_08996198: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996210; } @@ -6115,7 +5883,6 @@ L_08996208: L_08996210: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996224; } @@ -6166,7 +5933,6 @@ L_08996270: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899611C; } @@ -6190,7 +5956,6 @@ L_08996294: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089963EC; } @@ -6198,7 +5963,6 @@ L_08996294: } L_089962B0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089962F0; } @@ -6247,7 +6011,6 @@ L_089962F0: AOT_REGCACHE_SYNC_OUT(); return; L_08996300: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899631C; } @@ -6256,7 +6019,6 @@ L_08996300: L_08996308: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996340; } @@ -6264,7 +6026,6 @@ L_08996308: } L_08996314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899638C; } @@ -6323,7 +6084,6 @@ L_08996384: L_0899638C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089963A0; } @@ -6374,7 +6134,6 @@ L_089963EC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08996294; } @@ -6384,9 +6143,7 @@ L_089963FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8260))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08996458; } @@ -6394,7 +6151,6 @@ L_089963FC: } L_08996414: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08996458; } @@ -6402,7 +6158,6 @@ L_08996414: } L_0899641C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899642C; } @@ -6453,7 +6208,6 @@ L_0899646C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089965C4; } @@ -6461,7 +6215,6 @@ L_0899646C: } L_08996488: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089964C8; } @@ -6510,7 +6263,6 @@ L_089964C8: AOT_REGCACHE_SYNC_OUT(); return; L_089964D8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089964F4; } @@ -6519,7 +6271,6 @@ L_089964D8: L_089964E0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996518; } @@ -6527,7 +6278,6 @@ L_089964E0: } L_089964EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996564; } @@ -6586,7 +6336,6 @@ L_0899655C: L_08996564: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996578; } @@ -6637,7 +6386,6 @@ L_089965C4: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899646C; } @@ -6647,9 +6395,7 @@ L_089965D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8264))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08996630; } @@ -6657,7 +6403,6 @@ L_089965D4: } L_089965EC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08996630; } @@ -6665,7 +6410,6 @@ L_089965EC: } L_089965F4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996604; } @@ -6714,7 +6458,6 @@ L_08996644: aot_gpr_4 = (aot_gpr_28 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(9416))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08996784; } @@ -6722,7 +6465,6 @@ L_08996644: } L_08996658: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08996698; } @@ -6771,7 +6513,6 @@ L_08996698: AOT_REGCACHE_SYNC_OUT(); return; L_089966A8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089966C4; } @@ -6780,7 +6521,6 @@ L_089966A8: L_089966B0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089966E8; } @@ -6788,7 +6528,6 @@ L_089966B0: } L_089966BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899672C; } @@ -6845,7 +6584,6 @@ L_08996724: L_0899672C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996740; } @@ -6894,7 +6632,6 @@ L_08996784: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08996644; } @@ -6904,9 +6641,7 @@ L_08996794: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089967F0; } @@ -6914,7 +6649,6 @@ L_08996794: } L_089967AC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089967F0; } @@ -6922,7 +6656,6 @@ L_089967AC: } L_089967B4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089967C4; } @@ -6958,7 +6691,6 @@ L_089967E8: L_089967F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9372))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08996838; } @@ -6966,7 +6698,6 @@ L_089967F0: } L_089967FC: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899680C; } @@ -7002,7 +6733,6 @@ L_08996830: L_08996838: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9404))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08996880; } @@ -7010,7 +6740,6 @@ L_08996838: } L_08996844: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996854; } @@ -7045,7 +6774,6 @@ L_08996878: } L_08996880: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899689C; } @@ -7062,7 +6790,6 @@ L_08996888: } L_08996894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996904; } @@ -7089,7 +6816,6 @@ L_089968C0: } L_089968C8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089968D8; } @@ -7124,12 +6850,10 @@ L_089968FC: } L_08996904: aot_gpr_31 = (0x0899690Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 286u, 0x089913B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899690Cu) goto L_0899690C; AOT_REGCACHE_SYNC_OUT(); return; L_0899690C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08996B3C; } @@ -7137,7 +6861,6 @@ L_0899690C: } L_08996914: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996A24; } @@ -7145,14 +6868,12 @@ L_08996914: } L_0899691C: aot_gpr_31 = (0x08996924u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 293u, 0x08991444u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08996924u) goto L_08996924; AOT_REGCACHE_SYNC_OUT(); return; L_08996924: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08996A0C; } @@ -7164,11 +6885,20 @@ L_08996934: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4856))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899694C: aot_gpr_4 = (aot_gpr_28 + static_cast(-14084)); aot_gpr_5 = (aot_gpr_28 + static_cast(-14076)); @@ -7178,7 +6908,6 @@ L_0899694C: AOT_REGCACHE_SYNC_OUT(); return; L_0899695C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7193,7 +6922,6 @@ L_08996964: AOT_REGCACHE_SYNC_OUT(); return; L_08996974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7208,7 +6936,6 @@ L_0899697C: AOT_REGCACHE_SYNC_OUT(); return; L_0899698C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7223,7 +6950,6 @@ L_08996994: AOT_REGCACHE_SYNC_OUT(); return; L_089969A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7238,7 +6964,6 @@ L_089969AC: AOT_REGCACHE_SYNC_OUT(); return; L_089969BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7253,7 +6978,6 @@ L_089969C4: AOT_REGCACHE_SYNC_OUT(); return; L_089969D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7268,7 +6992,6 @@ L_089969DC: AOT_REGCACHE_SYNC_OUT(); return; L_089969EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7283,7 +7006,6 @@ L_089969F4: AOT_REGCACHE_SYNC_OUT(); return; L_08996A04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996A1C; } @@ -7307,7 +7029,6 @@ L_08996A1C: L_08996A24: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996B38; } @@ -7315,14 +7036,12 @@ L_08996A24: } L_08996A30: aot_gpr_31 = (0x08996A38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 298u, 0x08991490u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08996A38u) goto L_08996A38; AOT_REGCACHE_SYNC_OUT(); return; L_08996A38: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08996B20; } @@ -7334,11 +7053,20 @@ L_08996A48: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4824))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08996A60: aot_gpr_4 = (aot_gpr_28 + static_cast(-14004)); aot_gpr_5 = (aot_gpr_28 + static_cast(-14076)); @@ -7348,7 +7076,6 @@ L_08996A60: AOT_REGCACHE_SYNC_OUT(); return; L_08996A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7363,7 +7090,6 @@ L_08996A78: AOT_REGCACHE_SYNC_OUT(); return; L_08996A88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7378,7 +7104,6 @@ L_08996A90: AOT_REGCACHE_SYNC_OUT(); return; L_08996AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7393,7 +7118,6 @@ L_08996AA8: AOT_REGCACHE_SYNC_OUT(); return; L_08996AB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7408,7 +7132,6 @@ L_08996AC0: AOT_REGCACHE_SYNC_OUT(); return; L_08996AD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7423,7 +7146,6 @@ L_08996AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08996AE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7438,7 +7160,6 @@ L_08996AF0: AOT_REGCACHE_SYNC_OUT(); return; L_08996B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7453,7 +7174,6 @@ L_08996B08: AOT_REGCACHE_SYNC_OUT(); return; L_08996B18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996B30; } @@ -7479,7 +7199,6 @@ L_08996B38: goto L_08996B3C; L_08996B3C: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996B58; } @@ -7488,7 +7207,6 @@ L_08996B3C: L_08996B44: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996B84; } @@ -7496,7 +7214,6 @@ L_08996B44: } L_08996B50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996BB0; } @@ -7543,7 +7260,6 @@ L_08996BA8: L_08996BB0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996BD0; } @@ -7558,7 +7274,6 @@ L_08996BBC: goto L_08996BC8; L_08996BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996C2C; } @@ -7606,7 +7321,6 @@ L_08996C24: L_08996C2C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996C4C; } @@ -7615,7 +7329,6 @@ L_08996C2C: L_08996C38: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996C70; } @@ -7685,7 +7398,6 @@ L_08996CAC: aot_gpr_5 = (aot_gpr_5 << (ctx.gpr[19] & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08996D44; } @@ -7693,7 +7405,6 @@ L_08996CAC: } L_08996CC4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08996D00; } @@ -7741,7 +7452,6 @@ L_08996D00: AOT_REGCACHE_SYNC_OUT(); return; L_08996D10: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08996D20; } @@ -7776,7 +7486,6 @@ L_08996D44: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08996CAC; } @@ -7800,7 +7509,17 @@ L_08996D58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08996D78: aot_gpr_29 = (aot_gpr_29 + static_cast(-592)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(564), ctx.gpr[19]); @@ -7834,7 +7553,6 @@ L_08996DB8: } L_08996DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996E34; } @@ -7842,7 +7560,6 @@ L_08996DDC: } L_08996DE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089974E8; } @@ -7868,7 +7585,6 @@ L_08996DFC: AOT_REGCACHE_SYNC_OUT(); return; L_08996E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08996E2C; } @@ -7884,7 +7600,6 @@ L_08996E18: AOT_REGCACHE_SYNC_OUT(); return; L_08996E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973BC; } @@ -7892,7 +7607,6 @@ L_08996E2C: } L_08996E34: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08997240; } @@ -7947,7 +7661,6 @@ L_08996E78: } L_08996E80: { const bool branch_taken = ctx.gpr[6] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08996FF8; } @@ -7973,7 +7686,6 @@ L_08996E9C: L_08996EA8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08996EC0; } @@ -8012,7 +7724,6 @@ L_08996ED8: AOT_REGCACHE_SYNC_OUT(); return; L_08996EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8044,7 +7755,6 @@ L_08996F18: L_08996F24: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08996F3C; } @@ -8091,7 +7801,6 @@ L_08996F60: AOT_REGCACHE_SYNC_OUT(); return; L_08996F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8117,7 +7826,6 @@ L_08996F9C: L_08996FA8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08996FC0; } @@ -8156,7 +7864,6 @@ L_08996FD8: AOT_REGCACHE_SYNC_OUT(); return; L_08996FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8189,7 +7896,6 @@ L_0899701C: L_08997028: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08997040; } @@ -8236,7 +7942,6 @@ L_08997064: AOT_REGCACHE_SYNC_OUT(); return; L_08997084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8262,7 +7967,6 @@ L_089970A0: L_089970AC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089970C4; } @@ -8301,7 +8005,6 @@ L_089970DC: AOT_REGCACHE_SYNC_OUT(); return; L_089970F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8368,7 +8071,6 @@ L_08997160: L_0899716C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08997184; } @@ -8409,7 +8111,6 @@ L_0899719C: AOT_REGCACHE_SYNC_OUT(); return; L_089971BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899722C; } @@ -8433,7 +8134,6 @@ L_089971D0: L_089971DC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089971F4; } @@ -8538,7 +8238,6 @@ L_0899727C: } L_08997284: { const bool branch_taken = ctx.gpr[6] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089972FC; } @@ -8555,7 +8254,6 @@ L_0899728C: AOT_REGCACHE_SYNC_OUT(); return; L_089972A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8579,7 +8277,6 @@ L_089972C0: AOT_REGCACHE_SYNC_OUT(); return; L_089972D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8596,7 +8293,6 @@ L_089972DC: AOT_REGCACHE_SYNC_OUT(); return; L_089972F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8620,7 +8316,6 @@ L_08997310: AOT_REGCACHE_SYNC_OUT(); return; L_08997324: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8637,7 +8332,6 @@ L_0899732C: AOT_REGCACHE_SYNC_OUT(); return; L_08997344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B4; } @@ -8668,7 +8362,6 @@ L_08997368: L_08997374: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7868))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_0899739C; } @@ -8684,7 +8377,6 @@ L_08997380: AOT_REGCACHE_SYNC_OUT(); return; L_08997394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089973B0; } @@ -8716,7 +8408,6 @@ L_089973BC: } L_089973C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08997488; } @@ -8735,7 +8426,6 @@ L_089973E4: ctx.gpr[17] = (0u | 1u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08997414; } @@ -8751,7 +8441,6 @@ L_08997404: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089973F8; } @@ -8781,7 +8470,6 @@ L_0899742C: L_08997438: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08997450; } @@ -8823,7 +8511,6 @@ L_08997474: AOT_REGCACHE_SYNC_OUT(); return; L_08997480: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089974E8; } @@ -8847,7 +8534,6 @@ L_08997494: L_089974A0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089974B8; } @@ -8907,7 +8593,17 @@ L_089974E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899751C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(108), ctx.gpr[30]); @@ -8956,7 +8652,6 @@ L_0899751C: goto L_089975FC; L_089975FC: aot_gpr_31 = (0x08997604u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_28, aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08997604u) goto L_08997604; AOT_REGCACHE_SYNC_OUT(); return; L_08997604: @@ -9051,7 +8746,6 @@ L_089976E4: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089975FC; } @@ -9082,7 +8776,17 @@ L_089976F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899773C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), ctx.gpr[30]); @@ -9137,7 +8841,6 @@ L_0899773C: goto L_08997838; L_08997838: aot_gpr_31 = (0x08997840u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_28, aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08997840u) goto L_08997840; AOT_REGCACHE_SYNC_OUT(); return; L_08997840: @@ -9232,7 +8935,6 @@ L_08997920: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08997838; } @@ -9270,7 +8972,17 @@ L_08997940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08997988: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), ctx.gpr[30]); @@ -9325,7 +9037,6 @@ L_08997988: goto L_08997A84; L_08997A84: aot_gpr_31 = (0x08997A8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_28, aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08997A8Cu) goto L_08997A8C; AOT_REGCACHE_SYNC_OUT(); return; L_08997A8C: @@ -9420,7 +9131,6 @@ L_08997B6C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08997A84; } @@ -9458,7 +9168,17 @@ L_08997B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08997BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -9480,7 +9200,6 @@ L_08997BD4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08997C00u); - // nop goto L_0899751C; L_08997C00: aot_gpr_4 = (0u | 84u); @@ -9501,7 +9220,17 @@ L_08997C10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08997C24: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), ctx.gpr[22]); @@ -9550,7 +9279,6 @@ L_08997C24: goto L_08997D04; L_08997D04: aot_gpr_31 = (0x08997D0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_28, aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08997D0Cu) goto L_08997D0C; AOT_REGCACHE_SYNC_OUT(); return; L_08997D0C: @@ -9651,7 +9379,6 @@ L_08997E00: { const std::int32_t dividend = static_cast(ctx.gpr[17]); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.hi); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08997E7C; } @@ -9715,7 +9442,6 @@ L_08997E7C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08997D04; } @@ -9753,7 +9479,17 @@ L_08997E9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08997EE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), ctx.gpr[30]); @@ -9802,7 +9538,6 @@ L_08997EE4: goto L_08997FC8; L_08997FC8: aot_gpr_31 = (0x08997FD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_28, aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08997FD0u) goto L_08997FD0; AOT_REGCACHE_SYNC_OUT(); return; L_08997FD0: diff --git a/profiles/vcs/generated/generated_unit_0101.cpp b/profiles/vcs/generated/generated_unit_0101.cpp index 8d1d2ca..677f275 100644 --- a/profiles/vcs/generated/generated_unit_0101.cpp +++ b/profiles/vcs/generated/generated_unit_0101.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0101[4096] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, - 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 0, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 67, 0, 0, 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 79, - 0, 0, 80, 0, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 84, 0, 85, 0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 93, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, 0, - 101, 102, 0, 0, 0, 103, 104, 0, 0, 105, 0, 106, 0, 0, 0, 0, 107, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 122, 123, 0, 124, 0, 0, 0, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 127, 0, 128, 0, 129, - 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 134, 0, 135, 136, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 139, 140, 0, 141, 0, 142, 0, 143, 0, 0, 0, 0, - 144, 0, 0, 145, 0, 146, 0, 147, 148, 149, 0, 150, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 171, 0, 172, 0, 0, 173, 0, 0, 0, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 187, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 0, 0, 190, 0, 0, 0, 0, 191, 0, 192, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 196, 197, 0, 198, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, 206, 0, 0, 207, 0, 0, 208, 0, 0, 0, 0, 209, - 0, 210, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 217, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, - 0, 0, 0, 0, 225, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 237, - 0, 238, 0, 0, 239, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 246, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 264, 0, 265, 266, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 275, 0, 0, 0, 276, 0, 277, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 301, 0, 302, 0, 303, 0, 0, 304, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, - 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 311, 0, 312, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, - 0, 320, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 0, 0, 0, 0, - 330, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 333, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, 342, 0, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 0, - 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 355, 0, - 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 360, - 0, 361, 0, 362, 0, 363, 364, 0, 0, 0, 365, 0, 0, 366, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 370, 0, 0, - 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 380, 0, 381, 0, 382, 0, 0, 0, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 391, 0, 392, - 0, 393, 0, 394, 0, 395, 0, 396, 397, 0, 398, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 401, 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 406, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 413, 0, - 414, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, - 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 425, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 0, - 431, 0, 0, 432, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 435, 436, 0, 0, 0, 437, 438, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 443, 444, 0, 445, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, - 0, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, 458, 0, 0, 459, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 468, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, - 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, - 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 484, 0, 485, 0, 486, 0, 0, 0, 487, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, - 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 495, 0, 0, 0, 0, 0, - 496, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, - 503, 0, 504, 0, 505, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, 510, 0, 511, 0, 0, 0, - 0, 0, 512, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, - 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 524, 0, 525, 0, 0, 0, 0, 0, 526, 0, 527, 0, 0, 0, - 0, 0, 528, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, 0, 0, 532, 0, 533, 0, 0, 0, 0, 0, 534, 0, 535, 0, 536, 0, - 537, 0, 0, 0, 0, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 0, 544, 0, 545, 0, 0, 546, 0, 547, 0, 0, 548, 0, 549, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0101[64] = { + 0x0011100682000421ull, 0x5000000000000040ull, 0x0000404000420108ull, 0x0000200008840000ull, + 0x2100842800000000ull, 0x4200000000202000ull, 0x0000000000100004ull, 0x0001080008410850ull, + 0x0000800022100000ull, 0x0000000001800000ull, 0x0002000000000010ull, 0x0208204010000444ull, + 0x0012021200150541ull, 0x0241524488901424ull, 0x0492490900005240ull, 0x08040288000B0A63ull, + 0x0900000008810020ull, 0x00235442A8882C04ull, 0x00001BA90AB08000ull, 0x1010801020800800ull, + 0x000800800000A000ull, 0x0484800400040800ull, 0x0405210095509480ull, 0x02C48A84804C0040ull, + 0x0000000000000000ull, 0x8492488000014040ull, 0x8100000001042242ull, 0x0000200001000000ull, + 0x4200109082284000ull, 0x0100400800000400ull, 0x0004A41290080002ull, 0x1000001801008000ull, + 0x0000100000000100ull, 0x0441000000024000ull, 0x4000004000000000ull, 0x0D44001000241000ull, + 0x0000044000904000ull, 0x0000001400000000ull, 0x0000140080345000ull, 0x0208002A00020000ull, + 0x0810440004020108ull, 0x8000000000002808ull, 0x040000000432A200ull, 0x0820820820A88102ull, + 0x0200080002082082ull, 0x08001A8102801000ull, 0x0002820001000000ull, 0x240000200052A000ull, + 0x4100808000040150ull, 0x2440A46A80500201ull, 0x0111054000520555ull, 0x000215AAB0810210ull, + 0x4909109000480109ull, 0x0000000292001205ull, 0x0531824924891890ull, 0x00000000B0080400ull, + 0x2440000001000000ull, 0x404C8A0448240200ull, 0x0800000090450200ull, 0xA001400340010004ull, + 0x045020441028AAAAull, 0x1414141504202249ull, 0x1414141414141414ull, 0xA529554154141414ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0101[64] = { + 1u, 11u, 14u, 20u, 24u, 30u, 34u, 36u, 44u, 48u, 50u, 52u, 60u, 72u, 88u, 101u, + 115u, 121u, 138u, 152u, 159u, 163u, 170u, 185u, 199u, 199u, 210u, 218u, 220u, 230u, 234u, 244u, + 249u, 251u, 256u, 258u, 267u, 272u, 274u, 282u, 288u, 296u, 300u, 308u, 320u, 327u, 336u, 340u, + 348u, 356u, 371u, 386u, 401u, 414u, 422u, 441u, 446u, 450u, 463u, 470u, 479u, 496u, 512u, 528u, }; void recomp_unit_0101_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0101_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08998000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0101[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0101[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0101[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08998000; @@ -794,7 +701,6 @@ L_089980B0: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0100_entry, 100u, 1010u, 0x08997FC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -832,7 +738,17 @@ L_089980D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998118: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[30]); @@ -1030,7 +946,17 @@ L_0899836C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089983B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[30]); @@ -1228,7 +1154,17 @@ L_08998608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998650: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(124), ctx.gpr[30]); @@ -1414,7 +1350,17 @@ L_08998874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089988BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1466,7 +1412,6 @@ L_089988BC: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1650,7 +1595,6 @@ L_08998A10: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08998AC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08998AC4u) goto L_08998AC4; AOT_REGCACHE_SYNC_OUT(); return; L_08998AC4: @@ -1677,7 +1621,6 @@ L_08998B08: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08998A10; } @@ -1715,7 +1658,17 @@ L_08998B28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998B70: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1769,11 +1722,20 @@ L_08998B70: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998B98: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1797,11 +1759,20 @@ L_08998B98: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998BB4: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1827,11 +1798,20 @@ L_08998BB4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998BCC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1857,11 +1837,20 @@ L_08998BCC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998BE4: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -1880,18 +1869,25 @@ L_08998BE4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998C00: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08998C20; } @@ -1907,18 +1903,25 @@ L_08998C18: } L_08998C20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998C28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08998C48; } @@ -1934,11 +1937,20 @@ L_08998C40: } L_08998C48: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998C50: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(0u); @@ -1950,7 +1962,6 @@ L_08998C50: ctx.gpr[10] = (16256u << 16u); ctx.gpr[8] = (ctx.gpr[9] + static_cast(-1)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(ctx.gpr[10]); if (branch_taken) { @@ -2005,7 +2016,6 @@ L_08998CD0: { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } if (branch_taken) { @@ -2031,7 +2041,6 @@ L_08998D14: goto L_08998D28; L_08998D28: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08998D6C; } @@ -2043,7 +2052,6 @@ L_08998D30: ctx.fpr[16] = static_cast(static_cast(std::bit_cast(ctx.fpr[16]))); ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[16]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = ctx.fpr[16] - ctx.fpr[18]; goto L_08998D5C; @@ -2066,7 +2074,6 @@ L_08998D5C: goto L_08998D6C; L_08998D6C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = ctx.fpr[15] - ctx.fpr[18]; goto L_08998D88; @@ -2139,7 +2146,6 @@ L_08998DE4: ctx.fpr[16] = ctx.fpr[15] - aot_fpr_14; { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = ctx.fpr[16] - ctx.fpr[18]; goto L_08998E24; @@ -2253,9 +2259,7 @@ L_08998EE8: ctx.fpr[19] = ctx.fpr[0] - ctx.fpr[19]; ctx.fpr[18] = ctx.fpr[19] / ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08998F04; } @@ -2266,9 +2270,7 @@ L_08998F00: goto L_08998F04; L_08998F04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08998F18; } @@ -2340,11 +2342,20 @@ L_08998F8C: goto L_08998F9C; L_08998F9C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998FA4: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -2356,11 +2367,20 @@ L_08998FA4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998FC8: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -2372,11 +2392,20 @@ L_08998FC8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08998FEC: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -2389,11 +2418,20 @@ L_08998FEC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999014: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -2405,11 +2443,20 @@ L_08999014: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999040: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2425,11 +2472,20 @@ L_08999040: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899905C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2449,7 +2505,17 @@ L_0899905C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899906C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (aot_gpr_4 + static_cast(112)); @@ -2558,11 +2624,20 @@ L_0899906C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089990E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08999128; } @@ -2575,7 +2650,6 @@ L_089990EC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08999128; } @@ -2600,11 +2674,20 @@ L_08999128: goto L_0899912C; L_0899912C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999134: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7580))); @@ -2631,7 +2714,6 @@ L_0899915C: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089991C0; } @@ -2639,12 +2721,10 @@ L_0899915C: } L_0899916C: aot_gpr_31 = (0x08999174u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08999174u) goto L_08999174; AOT_REGCACHE_SYNC_OUT(); return; L_08999174: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089991C0; } @@ -2652,7 +2732,6 @@ L_08999174: } L_0899917C: aot_gpr_31 = (0x08999184u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08999184u) goto L_08999184; AOT_REGCACHE_SYNC_OUT(); return; L_08999184: @@ -2660,7 +2739,6 @@ L_08999184: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089991C0; } @@ -2670,7 +2748,6 @@ L_08999198: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089991C0; } @@ -2683,7 +2760,6 @@ L_089991A8: AOT_REGCACHE_SYNC_OUT(); return; L_089991B0: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089991C0; } @@ -2708,7 +2784,17 @@ L_089991C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089991D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(240), std::bit_cast(aot_fpr_20)); @@ -2752,12 +2838,10 @@ L_08999250: goto L_08999254; L_08999254: aot_gpr_31 = (0x0899925Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899925Cu) goto L_0899925C; AOT_REGCACHE_SYNC_OUT(); return; L_0899925C: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089992B0; } @@ -2765,7 +2849,6 @@ L_0899925C: } L_08999264: aot_gpr_31 = (0x0899926Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899926Cu) goto L_0899926C; AOT_REGCACHE_SYNC_OUT(); return; L_0899926C: @@ -2788,7 +2871,6 @@ L_08999280: goto L_0899928C; L_0899928C: aot_gpr_31 = (0x08999294u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08999294u) goto L_08999294; AOT_REGCACHE_SYNC_OUT(); return; L_08999294: @@ -2807,7 +2889,6 @@ L_089992A0: goto L_089992A4; L_089992A4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089992B0; } @@ -2886,9 +2967,7 @@ L_089992B0: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08999374; } @@ -2904,7 +2983,6 @@ L_0899932C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0899935C; @@ -2923,7 +3001,6 @@ L_08999374: aot_gpr_4 = (16140u << 16u); aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -2940,7 +3017,6 @@ L_08999390: aot_gpr_4 = (16256u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089993BC; @@ -3006,7 +3082,6 @@ L_089993F0: AOT_REGCACHE_SYNC_OUT(); return; L_08999434: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899949C; } @@ -3080,7 +3155,17 @@ L_0899949C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089994CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -3121,7 +3206,17 @@ L_0899952C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999548: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3180,7 +3275,6 @@ L_089995BC: L_089995C8: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -3211,7 +3305,6 @@ L_089995E8: L_0899961C: ctx.gpr[7] = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08999668; } @@ -3219,7 +3312,6 @@ L_0899961C: } L_08999628: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08999668; } @@ -3228,7 +3320,6 @@ L_08999628: L_08999630: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1784))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08999658; } @@ -3239,7 +3330,6 @@ L_0899963C: ctx.gpr[7] = (ctx.gpr[7] + static_cast(2228)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08999658; } @@ -3267,7 +3357,6 @@ L_08999660: } L_08999668: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08999758; } @@ -3313,7 +3402,6 @@ L_0899967C: L_089996A0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -3337,9 +3425,7 @@ L_089996C8: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08999758; } @@ -3355,9 +3441,7 @@ L_089996E8: aot_gpr_4 = (16288u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08999758; } @@ -3373,9 +3457,7 @@ L_08999718: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899974C; } @@ -3406,11 +3488,20 @@ L_08999758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899977C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089997A4; } @@ -3429,7 +3520,6 @@ L_08999788: } L_0899979C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089997BC; } @@ -3452,7 +3542,6 @@ L_089997AC: L_089997BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089997D8; } @@ -3473,11 +3562,20 @@ L_089997D8: goto L_089997DC; L_089997DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089997E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(0u); @@ -3617,7 +3715,17 @@ L_08999938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999940: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6640))); @@ -3741,7 +3849,6 @@ L_08999A04: L_08999A18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6660))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08999A34; } @@ -3758,7 +3865,6 @@ L_08999A34: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2068))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08999A60; } @@ -4005,7 +4111,17 @@ L_08999AFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (17036u << 16u); @@ -4141,7 +4257,6 @@ L_08999C64: L_08999C7C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4157,7 +4272,6 @@ L_08999C90: L_08999C9C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(312))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(124), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4187,9 +4301,7 @@ L_08999CB0: L_08999CE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(308))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08999D28; } @@ -4334,7 +4446,17 @@ L_08999DE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999E04: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_16); @@ -4508,7 +4630,17 @@ L_08999F3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08999F60: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_16); @@ -4519,7 +4651,6 @@ L_08999F60: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(84), aot_run_words); } { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_08999F90; } @@ -4761,7 +4892,17 @@ L_0899A020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899A0B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_31); @@ -4849,7 +4990,6 @@ L_0899A0B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x0899A138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 6u, 0x089A8094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899A138u) goto L_0899A138; AOT_REGCACHE_SYNC_OUT(); return; L_0899A138: @@ -4859,7 +4999,17 @@ L_0899A138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899A144: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5107,7 +5257,17 @@ L_0899A1E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899A298: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -5150,7 +5310,6 @@ L_0899A2F8: aot_gpr_5 = (aot_gpr_6 + aot_gpr_5); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0899A390; } @@ -5201,7 +5360,6 @@ L_0899A354: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899A3C8; } @@ -5238,7 +5396,6 @@ L_0899A3C8: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899A648; } @@ -5246,7 +5403,6 @@ L_0899A3C8: } L_0899A3D8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_0899A3E8; } @@ -5330,7 +5486,6 @@ L_0899A438: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5499,7 +5654,6 @@ L_0899A4A8: AOT_REGCACHE_SYNC_OUT(); return; L_0899A588: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899A638; } @@ -5601,7 +5755,6 @@ L_0899A638: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899A3D8; } @@ -5635,7 +5788,17 @@ L_0899A654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899A67C: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), ctx.gpr[17]); @@ -5655,7 +5818,6 @@ L_0899A67C: } L_0899A6A8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0899A78C; } @@ -5799,9 +5961,7 @@ L_0899A744: aot_gpr_4 = (aot_gpr_4 | 1153u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899A794; } @@ -5809,7 +5969,6 @@ L_0899A744: } L_0899A784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899A80C; } @@ -5843,9 +6002,7 @@ L_0899A794: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899A7E4; } @@ -5881,7 +6038,6 @@ L_0899A7E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899A844; } @@ -5890,9 +6046,7 @@ L_0899A7E4: L_0899A80C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899A844; } @@ -5996,9 +6150,7 @@ L_0899A868: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899A8D0; } @@ -6006,9 +6158,7 @@ L_0899A868: } L_0899A8A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899A8D0; } @@ -6087,7 +6237,17 @@ L_0899A8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899A90C: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(180), ctx.gpr[17]); @@ -6104,7 +6264,6 @@ L_0899A90C: } L_0899A92C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899AA3C; } @@ -6293,7 +6452,6 @@ L_0899AA24: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899AA44; } @@ -6301,7 +6459,6 @@ L_0899AA24: } L_0899AA34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899AA50; } @@ -6335,7 +6492,17 @@ L_0899AA54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899AA68: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(240), ctx.gpr[23]); @@ -6416,7 +6583,6 @@ L_0899AB4C: goto L_0899AB54; L_0899AB54: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899AD80; } @@ -6426,9 +6592,7 @@ L_0899AB5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899AD80; } @@ -6440,7 +6604,6 @@ L_0899AB74: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6452,7 +6615,6 @@ L_0899AB8C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6464,7 +6626,6 @@ L_0899ABA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(14))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6476,7 +6637,6 @@ L_0899ABBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(184))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6488,7 +6648,6 @@ L_0899ABD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(226))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6500,7 +6659,6 @@ L_0899ABEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(18))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6512,7 +6670,6 @@ L_0899AC04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6524,7 +6681,6 @@ L_0899AC1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(232))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6536,7 +6692,6 @@ L_0899AC34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(6))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899AC64; } @@ -6548,7 +6703,6 @@ L_0899AC4C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899AD80; } @@ -6597,9 +6751,7 @@ L_0899AC64: aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899AD80; } @@ -6723,7 +6875,6 @@ L_0899AD30: AOT_REGCACHE_SYNC_OUT(); return; L_0899AD5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899AD80; } @@ -6756,7 +6907,6 @@ L_0899AD80: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899AB20; } @@ -6764,7 +6914,6 @@ L_0899AD80: } L_0899AD9C: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_0899ADAC; } @@ -6803,7 +6952,17 @@ L_0899ADB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899ADEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(140), aot_gpr_16); @@ -6860,9 +7019,7 @@ L_0899AEA4: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899AEC4; } @@ -6870,7 +7027,6 @@ L_0899AEA4: } L_0899AEBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899AF58; } @@ -6950,7 +7106,6 @@ L_0899AEC4: AOT_REGCACHE_SYNC_OUT(); return; L_0899AF34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0899AF44; } @@ -6958,7 +7113,6 @@ L_0899AF34: } L_0899AF3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899AEBC; } @@ -6972,7 +7126,6 @@ L_0899AF44: AOT_REGCACHE_SYNC_OUT(); return; L_0899AF50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899AE60; } @@ -7000,7 +7153,17 @@ L_0899AF58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899AF94: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7037,7 +7200,6 @@ L_0899AF94: L_0899AFE8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_0899B0E0; } @@ -7050,7 +7212,6 @@ L_0899AFF4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899B0E0; } @@ -7058,12 +7219,10 @@ L_0899AFF4: } L_0899B010: aot_gpr_31 = (0x0899B018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899B018u) goto L_0899B018; AOT_REGCACHE_SYNC_OUT(); return; L_0899B018: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_0899B048; } @@ -7142,9 +7301,7 @@ L_0899B09C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[0] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B0E0; } @@ -7174,14 +7331,33 @@ L_0899B0E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B0F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B100: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -7213,7 +7389,6 @@ L_0899B124: AOT_REGCACHE_SYNC_OUT(); return; L_0899B150: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899B184; } @@ -7226,9 +7401,7 @@ L_0899B158: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B194; } @@ -7236,7 +7409,6 @@ L_0899B158: } L_0899B17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899B198; } @@ -7244,7 +7416,6 @@ L_0899B17C: } L_0899B184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899B198; } @@ -7252,7 +7423,6 @@ L_0899B184: } L_0899B18C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899B198; } @@ -7269,11 +7439,20 @@ L_0899B198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B1A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899B1BC; } @@ -7294,7 +7473,6 @@ L_0899B1BC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899B228; } @@ -7334,7 +7512,6 @@ L_0899B200: goto L_0899B208; L_0899B208: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899B218; } @@ -7354,7 +7531,6 @@ L_0899B218: goto L_0899B220; L_0899B220: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899B250; } @@ -7367,7 +7543,6 @@ L_0899B228: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899B250; } @@ -7380,11 +7555,20 @@ L_0899B244: goto L_0899B250; L_0899B250: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B258: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -7414,7 +7598,6 @@ L_0899B298: AOT_REGCACHE_SYNC_OUT(); return; L_0899B2A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899B2E0; } @@ -7424,7 +7607,6 @@ L_0899B2A8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(3236))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_13)) && aot_fpr_14 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(3232))); if (branch_taken) { @@ -7434,9 +7616,7 @@ L_0899B2A8: } L_0899B2C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B2E0; } @@ -7464,7 +7644,6 @@ L_0899B2E0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); aot_gpr_4 = (0u | 45u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_0899B324; } @@ -7495,7 +7674,17 @@ L_0899B324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B340: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -7551,7 +7740,6 @@ L_0899B38C: goto L_0899B394; L_0899B394: aot_gpr_31 = (0x0899B39Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899B39Cu) goto L_0899B39C; AOT_REGCACHE_SYNC_OUT(); return; L_0899B39C: @@ -7559,7 +7747,6 @@ L_0899B39C: goto L_0899B3A0; L_0899B3A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899B3B0; } @@ -7582,7 +7769,17 @@ L_0899B3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B3C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[11] = (20224u << 16u); @@ -7654,7 +7851,6 @@ L_0899B458: { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_14; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } if (branch_taken) { @@ -7680,7 +7876,6 @@ L_0899B49C: goto L_0899B4B0; L_0899B4B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[12] = (ctx.gpr[14] | 0u); if (branch_taken) { @@ -7757,7 +7952,6 @@ L_0899B530: ctx.fpr[15] = aot_fpr_14 - aot_fpr_13; { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = ctx.fpr[15] - ctx.fpr[1]; goto L_0899B570; @@ -7833,9 +8027,7 @@ L_0899B610: goto L_0899B61C; L_0899B61C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[4] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B630; } @@ -7846,7 +8038,6 @@ L_0899B62C: goto L_0899B630; L_0899B630: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[1] = ctx.fpr[3] - ctx.fpr[1]; goto L_0899B64C; @@ -7913,9 +8104,7 @@ L_0899B6A4: ctx.fpr[3] = ctx.fpr[4] - ctx.fpr[3]; ctx.fpr[1] = ctx.fpr[3] / ctx.fpr[1]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B6C0; } @@ -7926,9 +8115,7 @@ L_0899B6BC: goto L_0899B6C0; L_0899B6C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B6D4; } @@ -7962,7 +8149,6 @@ L_0899B6E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_6 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } if (branch_taken) { @@ -7977,9 +8163,7 @@ L_0899B728: ctx.gpr[9] = (aot_gpr_5 + ctx.gpr[9]); ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[18]) || std::isnan(ctx.fpr[19])) && ctx.fpr[18] == ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B774; } @@ -7992,9 +8176,7 @@ L_0899B74C: ctx.gpr[8] = (aot_gpr_5 + ctx.gpr[8]); ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[18]) || std::isnan(ctx.fpr[19])) && ctx.fpr[18] == ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899B774; } @@ -8120,7 +8302,17 @@ L_0899B8E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899B8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(aot_fpr_20)); @@ -8151,7 +8343,6 @@ L_0899B924: L_0899B948: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6736))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899B96C; } @@ -8167,7 +8358,6 @@ L_0899B954: L_0899B96C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899B988; } @@ -8186,7 +8376,6 @@ L_0899B988: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(176), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899B9AC; } @@ -8200,7 +8389,6 @@ L_0899B9AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(176))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899B9C8; } @@ -8221,7 +8409,6 @@ L_0899B9C8: L_0899B9CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(160))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899BD18; } @@ -8259,9 +8446,7 @@ L_0899B9F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899BA48; } @@ -8272,9 +8457,7 @@ L_0899BA24: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899BA48; } @@ -8299,7 +8482,6 @@ L_0899BA58: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8349,7 +8531,6 @@ L_0899BA7C: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); goto L_0899BB08; @@ -8376,7 +8557,6 @@ L_0899BB08: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[15] = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_20; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_0899BB84; @@ -8394,7 +8574,6 @@ L_0899BB40: ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_fpr_20 = aot_fpr_20 / ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899BB78; @@ -8422,7 +8601,6 @@ L_0899BB84: ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_fpr_20 = aot_fpr_20 / ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899BBB8; @@ -8463,7 +8641,6 @@ L_0899BBFC: AOT_REGCACHE_SYNC_OUT(); return; L_0899BC04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899BC3C; } @@ -8481,7 +8658,6 @@ L_0899BC14: AOT_REGCACHE_SYNC_OUT(); return; L_0899BC1C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0899BC3C; } @@ -8499,7 +8675,6 @@ L_0899BC2C: AOT_REGCACHE_SYNC_OUT(); return; L_0899BC34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899BC4C; } @@ -8513,7 +8688,6 @@ L_0899BC3C: goto L_0899BC4C; L_0899BC4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899BD24; } @@ -8526,7 +8700,6 @@ L_0899BC54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899BC88; } @@ -8549,7 +8722,6 @@ L_0899BC70: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899BC98; } @@ -8577,9 +8749,7 @@ L_0899BC98: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899BCD8; } @@ -8590,9 +8760,7 @@ L_0899BCB4: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899BCD8; } @@ -8617,7 +8785,6 @@ L_0899BCE8: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8659,7 +8826,6 @@ L_0899BD24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899BD54; } @@ -8702,14 +8868,22 @@ L_0899BD68: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4728))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899BD80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8717,7 +8891,6 @@ L_0899BD80: } L_0899BD88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8733,7 +8906,6 @@ L_0899BD90: goto L_08999B60; L_0899BDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8750,7 +8922,6 @@ L_0899BDB0: AOT_REGCACHE_SYNC_OUT(); return; L_0899BDC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8767,7 +8938,6 @@ L_0899BDD0: AOT_REGCACHE_SYNC_OUT(); return; L_0899BDE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8784,7 +8954,6 @@ L_0899BDF0: AOT_REGCACHE_SYNC_OUT(); return; L_0899BE08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8801,7 +8970,6 @@ L_0899BE10: AOT_REGCACHE_SYNC_OUT(); return; L_0899BE28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8818,7 +8986,6 @@ L_0899BE30: AOT_REGCACHE_SYNC_OUT(); return; L_0899BE48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8834,7 +9001,6 @@ L_0899BE50: goto L_0899A0B0; L_0899BE68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8850,7 +9016,6 @@ L_0899BE70: goto L_0899A144; L_0899BE88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8867,7 +9032,6 @@ L_0899BE90: AOT_REGCACHE_SYNC_OUT(); return; L_0899BEA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8883,7 +9047,6 @@ L_0899BEB0: goto L_08999E04; L_0899BEC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8900,7 +9063,6 @@ L_0899BED0: AOT_REGCACHE_SYNC_OUT(); return; L_0899BEE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8916,7 +9078,6 @@ L_0899BEF0: goto L_08999F60; L_0899BF08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8933,7 +9094,6 @@ L_0899BF10: AOT_REGCACHE_SYNC_OUT(); return; L_0899BF28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8950,7 +9110,6 @@ L_0899BF30: AOT_REGCACHE_SYNC_OUT(); return; L_0899BF48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8967,7 +9126,6 @@ L_0899BF50: AOT_REGCACHE_SYNC_OUT(); return; L_0899BF68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8980,7 +9138,6 @@ L_0899BF70: AOT_REGCACHE_SYNC_OUT(); return; L_0899BF78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8997,7 +9154,6 @@ L_0899BF80: AOT_REGCACHE_SYNC_OUT(); return; L_0899BF98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9010,7 +9166,6 @@ L_0899BFA0: AOT_REGCACHE_SYNC_OUT(); return; L_0899BFA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9022,7 +9177,6 @@ L_0899BFB0: goto L_0899A298; L_0899BFB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9036,7 +9190,6 @@ L_0899BFC0: AOT_REGCACHE_SYNC_OUT(); return; L_0899BFCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9050,7 +9203,6 @@ L_0899BFD4: AOT_REGCACHE_SYNC_OUT(); return; L_0899BFE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9064,7 +9216,6 @@ L_0899BFE8: AOT_REGCACHE_SYNC_OUT(); return; L_0899BFF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0102_entry, 102u, 14u, 0x0899C0CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0102.cpp b/profiles/vcs/generated/generated_unit_0102.cpp index f965fa1..6531d83 100644 --- a/profiles/vcs/generated/generated_unit_0102.cpp +++ b/profiles/vcs/generated/generated_unit_0102.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0102[4095] = { - 1, 0, 2, 0, 3, 0, 0, 4, 0, 5, 0, 0, 6, 0, 7, 0, 0, 8, 0, 9, 0, 0, 10, 0, 11, 0, 0, 12, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 16, 0, 0, 17, 0, 18, 0, 0, - 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 27, 0, 0, 0, 28, 0, 0, 0, - 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 43, 44, 0, 0, 0, - 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 0, 50, 51, 0, 52, 0, 0, 53, 0, - 0, 0, 0, 54, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 0, 60, 0, 0, 0, 61, 0, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, - 65, 0, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 74, 0, 75, 0, 76, 0, 77, - 0, 78, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 84, 0, 85, 0, 0, 0, 86, 0, 0, - 0, 0, 0, 0, 0, 87, 0, 88, 0, 89, 0, 90, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 93, 0, 0, 0, 94, 0, 95, 0, 96, 0, - 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 104, 0, 105, 0, - 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 114, - 0, 115, 0, 116, 0, 117, 0, 118, 119, 0, 120, 0, 121, 0, 122, 0, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 126, 127, 128, 0, 129, 0, - 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, 0, 0, 134, 0, 0, 135, 0, - 136, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, 0, 140, 141, 0, 0, 142, 0, 0, 143, 0, 0, - 0, 0, 144, 0, 145, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, - 0, 0, 155, 0, 156, 0, 157, 0, 158, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 164, 0, 165, 166, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 0, - 0, 173, 0, 174, 0, 175, 0, 176, 0, 0, 0, 177, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 184, 0, 0, 0, 0, 185, 0, 186, 0, 0, - 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, - 0, 204, 0, 205, 206, 0, 207, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 210, 0, 211, 0, - 212, 213, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, - 0, 0, 0, 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, - 0, 229, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 235, 0, 0, - 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 240, 0, 0, 0, 241, 0, 0, 242, - 0, 0, 0, 243, 0, 244, 0, 245, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 249, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 253, 0, 0, - 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 260, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 270, 0, 0, 0, 0, - 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, - 0, 0, 280, 0, 281, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 288, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 298, 0, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 313, 0, 314, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 326, 327, - 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 341, 342, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 345, - 0, 346, 0, 347, 0, 348, 0, 0, 349, 0, 0, 350, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, - 355, 356, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, - 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 368, 0, - 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 372, 373, 0, 0, 0, 0, 0, 374, 0, 0, 0, - 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 380, 381, 0, 0, 0, - 382, 0, 0, 383, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 387, 0, 0, 0, 388, 0, 389, - 0, 390, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 395, 0, 396, 0, 0, 397, 0, 0, 0, 398, 0, 0, - 399, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, - 0, 408, 0, 409, 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 416, 0, - 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 422, 0, 0, - 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 426, 0, 0, 0, 0, 0, 427, 0, 428, 0, 429, - 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 439, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 443, 444, 0, - 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 449, 0, 450, 0, 0, 451, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 0, 0, 0, 0, 456, 0, - 457, 0, 0, 0, 0, 458, 459, 460, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, - 0, 0, 0, 0, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, - 0, 0, 476, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 0, 0, 0, 482, 483, - 484, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 487, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 491, 492, 0, 493, 0, 0, 0, 0, 494, 0, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 500, 501, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 504, 0, - 505, 0, 506, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 511, 0, 512, - 0, 0, 0, 0, 0, 513, 514, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 518, 0, - 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, - 524, 0, 0, 0, 525, 0, 0, 526, 0, 0, 0, 527, 0, 0, 528, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 533, 0, 0, 534, 0, 0, 0, 535, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 546, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 552, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, - 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 563, 0, 564, - 0, 565, 0, 566, 0, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 570, 571, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, 575, 0, 0, 0, 576, 0, 0, - 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, - 0, 586, 0, 587, 0, 0, 0, 588, 0, 0, 0, 0, 589, 0, 0, 0, 590, 0, 591, 0, 0, 0, 592, 0, 0, 0, 593, 0, 594, 0, 0, 0, - 595, 0, 0, 0, 596, 0, 597, 0, 0, 0, 598, 0, 599, 0, 0, 0, 600, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, - 0, 603, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, - 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, - 0, 0, 0, 0, 622, 0, 623, 0, 624, 0, 0, 0, 625, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, 0, 628, 0, 0, 0, 629, 0, - 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 633, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 640, 641, 0, 0, 642, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0102[64] = { + 0x29480000294A5295ull, 0x1141000214000842ull, 0x0040412084820005ull, 0x4B09404818888400ull, + 0xAA444AA911289558ull, 0x544A0AA022889112ull, 0x0800010154444444ull, 0x5D4855AA80402A02ull, + 0x24C4110148600801ull, 0x0030000000842114ull, 0x0010035408100002ull, 0x1080041000096A81ull, + 0x40000040000128AAull, 0x240C442428480080ull, 0x0000822400000000ull, 0x508000DA10005102ull, + 0x1415401000002013ull, 0x2100910A05088108ull, 0x000050A8910A0440ull, 0x2140000003020000ull, + 0x0060100100800828ull, 0x0010000800020002ull, 0x0000000000000000ull, 0x000109040C0008A0ull, + 0x02000000A0000000ull, 0x0000015444000000ull, 0x0002000000000000ull, 0x000080006000000Aull, + 0x0000014000008400ull, 0x0200015002A00400ull, 0x0002004000000050ull, 0x0200034004815500ull, + 0xC422A80000A80000ull, 0x0200008008002820ull, 0x000A000804000000ull, 0x1201492A824C1220ull, + 0x5124088110300007ull, 0x1A01421010620880ull, 0x22541086A2080249ull, 0x0000048000000011ull, + 0x5104406A20031080ull, 0xA830044020810403ull, 0x624060200491090Aull, 0x4300500009504110ull, + 0x00440540882100E1ull, 0x4210000020020040ull, 0x00018281C2804224ull, 0x000000000A90B0A0ull, + 0xA02085055001C280ull, 0x100480A048028060ull, 0x1122400002044891ull, 0x0040000011224000ull, + 0x0000004000002280ull, 0x0000000028000021ull, 0x002A005400810000ull, 0x0000280102000000ull, + 0x0001012AA8000000ull, 0x080002AA22211060ull, 0x8000000020200000ull, 0x200314511445108Aull, + 0x0808100840208042ull, 0x10040A0002242240ull, 0x4400200445011150ull, 0x4C28400042000200ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0102[64] = { + 1u, 19u, 29u, 39u, 54u, 78u, 97u, 109u, 130u, 144u, 152u, 161u, 173u, 182u, 195u, 199u, + 212u, 223u, 236u, 248u, 254u, 262u, 266u, 266u, 275u, 278u, 284u, 285u, 290u, 294u, 302u, 306u, + 317u, 328u, 334u, 338u, 355u, 369u, 382u, 399u, 403u, 417u, 430u, 445u, 457u, 470u, 476u, 489u, + 498u, 513u, 524u, 536u, 542u, 546u, 550u, 558u, 562u, 570u, 583u, 586u, 603u, 612u, 622u, 634u, }; void recomp_unit_0102_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0102_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x0899C000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0102[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0102[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0102[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_0899C000; @@ -821,7 +728,6 @@ L_0899C000: AOT_REGCACHE_SYNC_OUT(); return; L_0899C008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C0CC; } @@ -835,7 +741,6 @@ L_0899C010: AOT_REGCACHE_SYNC_OUT(); return; L_0899C01C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C0CC; } @@ -849,7 +754,6 @@ L_0899C024: AOT_REGCACHE_SYNC_OUT(); return; L_0899C030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C0CC; } @@ -863,7 +767,6 @@ L_0899C038: AOT_REGCACHE_SYNC_OUT(); return; L_0899C044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C0CC; } @@ -877,7 +780,6 @@ L_0899C04C: AOT_REGCACHE_SYNC_OUT(); return; L_0899C058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C0CC; } @@ -891,7 +793,6 @@ L_0899C060: AOT_REGCACHE_SYNC_OUT(); return; L_0899C06C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C0CC; } @@ -955,7 +856,6 @@ L_0899C074: L_0899C0CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899C0E0; } @@ -963,7 +863,6 @@ L_0899C0CC: } L_0899C0D8: aot_gpr_31 = (0x0899C0E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899C0E0u) goto L_0899C0E0; AOT_REGCACHE_SYNC_OUT(); return; L_0899C0E0: @@ -977,14 +876,12 @@ L_0899C0E0: } L_0899C0EC: aot_gpr_31 = (0x0899C0F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899C0F4u) goto L_0899C0F4; AOT_REGCACHE_SYNC_OUT(); return; L_0899C0F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5848))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(11244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C1C0; } @@ -993,9 +890,7 @@ L_0899C0F4: L_0899C104: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899C1C0; } @@ -1004,9 +899,7 @@ L_0899C104: L_0899C118: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899C170; } @@ -1025,7 +918,6 @@ L_0899C12C: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(296))); aot_fpr_12 = ctx.fpr[15] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(296), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1035,7 +927,6 @@ L_0899C12C: } L_0899C168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C1C0; } @@ -1044,9 +935,7 @@ L_0899C168: L_0899C170: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899C1C0; } @@ -1065,7 +954,6 @@ L_0899C184: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(296))); { const float fs = ctx.fpr[15]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(296), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1077,9 +965,7 @@ L_0899C1C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(128))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899C1E0; } @@ -1093,7 +979,6 @@ L_0899C1E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 48 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899C200; } @@ -1103,7 +988,6 @@ L_0899C1F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 57 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899C208; } @@ -1154,7 +1038,6 @@ L_0899C244: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1179,7 +1062,6 @@ L_0899C27C: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1198,7 +1080,6 @@ L_0899C2A0: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899C2D8; } @@ -1246,7 +1127,6 @@ L_0899C2D8: aot_gpr_4 = (aot_gpr_4 + static_cast(112)); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_0899C5F8; } @@ -1283,7 +1163,6 @@ L_0899C35C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899C564; } @@ -1299,7 +1178,6 @@ L_0899C370: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C564; } @@ -1308,7 +1186,6 @@ L_0899C370: L_0899C38C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C410; } @@ -1322,7 +1199,6 @@ L_0899C398: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C410; } @@ -1336,7 +1212,6 @@ L_0899C3B8: L_0899C3C0: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_0899C3E0; } @@ -1347,7 +1222,6 @@ L_0899C3CC: aot_gpr_5 = (0u + static_cast(-984)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899C3E4; } @@ -1364,7 +1238,6 @@ L_0899C3E4: L_0899C3EC: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_0899C410; } @@ -1375,7 +1248,6 @@ L_0899C3F8: aot_gpr_5 = (0u | 198u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C410; } @@ -1396,7 +1268,6 @@ L_0899C418: AOT_REGCACHE_SYNC_OUT(); return; L_0899C420: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899C454; } @@ -1410,7 +1281,6 @@ L_0899C428: L_0899C430: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C44C; } @@ -1433,7 +1303,6 @@ L_0899C44C: L_0899C454: aot_gpr_4 = (ctx.gpr[17] | ctx.gpr[18]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C48C; } @@ -1443,7 +1312,6 @@ L_0899C460: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C480; } @@ -1476,7 +1344,6 @@ L_0899C494: AOT_REGCACHE_SYNC_OUT(); return; L_0899C49C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899C4E4; } @@ -1484,7 +1351,6 @@ L_0899C49C: } L_0899C4A4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0899C4E4; } @@ -1500,7 +1366,6 @@ L_0899C4B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C4D8; } @@ -1533,7 +1398,6 @@ L_0899C4EC: AOT_REGCACHE_SYNC_OUT(); return; L_0899C4F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899C53C; } @@ -1541,7 +1405,6 @@ L_0899C4F4: } L_0899C4FC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_0899C53C; } @@ -1557,7 +1420,6 @@ L_0899C510: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C530; } @@ -1582,7 +1444,6 @@ L_0899C53C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C55C; } @@ -1602,7 +1463,6 @@ L_0899C564: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899C5F8; } @@ -1616,7 +1476,6 @@ L_0899C574: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C5F8; } @@ -1634,7 +1493,6 @@ L_0899C59C: AOT_REGCACHE_SYNC_OUT(); return; L_0899C5A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899C5F0; } @@ -1646,7 +1504,6 @@ L_0899C5AC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C5F0; } @@ -1660,7 +1517,6 @@ L_0899C5C4: L_0899C5CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C5E8; } @@ -1688,7 +1544,6 @@ L_0899C5F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1698,7 +1553,6 @@ L_0899C608: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1708,7 +1562,6 @@ L_0899C618: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1718,7 +1571,6 @@ L_0899C628: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1728,7 +1580,6 @@ L_0899C638: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1738,7 +1589,6 @@ L_0899C648: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1748,7 +1598,6 @@ L_0899C658: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C678; } @@ -1761,7 +1610,6 @@ L_0899C668: AOT_REGCACHE_SYNC_OUT(); return; L_0899C670: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899C680; } @@ -1787,7 +1635,17 @@ L_0899C680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899C6A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-1264)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(6784))); @@ -1819,7 +1677,6 @@ L_0899C704: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899C794; } @@ -1832,7 +1689,6 @@ L_0899C724: AOT_REGCACHE_SYNC_OUT(); return; L_0899C72C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899C78C; } @@ -1864,7 +1720,6 @@ L_0899C758: AOT_REGCACHE_SYNC_OUT(); return; L_0899C77C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0899C79C; } @@ -1872,7 +1727,6 @@ L_0899C77C: } L_0899C784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899C7A0; } @@ -1880,7 +1734,6 @@ L_0899C784: } L_0899C78C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DFA4; } @@ -1888,7 +1741,6 @@ L_0899C78C: } L_0899C794: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DFA4; } @@ -1899,7 +1751,6 @@ L_0899C79C: goto L_0899C7A0; L_0899C7A0: aot_gpr_31 = (0x0899C7A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899C7A8u) goto L_0899C7A8; AOT_REGCACHE_SYNC_OUT(); return; L_0899C7A8: @@ -1910,7 +1761,6 @@ L_0899C7A8: goto L_0899C7B0; L_0899C7B0: aot_gpr_31 = (0x0899C7B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899C7B8u) goto L_0899C7B8; AOT_REGCACHE_SYNC_OUT(); return; L_0899C7B8: @@ -1933,7 +1783,6 @@ L_0899C7CC: goto L_0899C7D8; L_0899C7D8: aot_gpr_31 = (0x0899C7E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899C7E0u) goto L_0899C7E0; AOT_REGCACHE_SYNC_OUT(); return; L_0899C7E0: @@ -1971,7 +1820,6 @@ L_0899C800: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899C854; } @@ -1987,7 +1835,6 @@ L_0899C82C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899C858; } @@ -2001,7 +1848,6 @@ L_0899C858: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899C8DC; } @@ -2028,9 +1874,7 @@ L_0899C880: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[15] = ctx.fpr[15] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899C8B0; } @@ -2050,9 +1894,7 @@ L_0899C8B0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(296))); aot_fpr_14 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899C8D8; } @@ -2094,7 +1936,6 @@ L_0899C8F4: goto L_0899C908; L_0899C908: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899C920; } @@ -2185,7 +2026,6 @@ L_0899C9D4: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_12 / aot_fpr_20; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899CB40; } @@ -2218,7 +2058,6 @@ L_0899CA50: ctx.fpr[16] = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); goto L_0899CA6C; @@ -2229,9 +2068,7 @@ L_0899CA6C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899CA98; } @@ -2282,7 +2119,6 @@ L_0899CAD0: { const float fs = aot_fpr_20; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_0899CB00; @@ -2293,9 +2129,7 @@ L_0899CB00: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899CB2C; } @@ -2329,7 +2163,6 @@ L_0899CB38: L_0899CB40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(163))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899CBA8; } @@ -2408,7 +2241,6 @@ L_0899CBDC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899CC04; } @@ -2434,12 +2266,10 @@ L_0899CBF0: goto L_0899CC04; L_0899CC04: aot_gpr_31 = (0x0899CC0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899CC0Cu) goto L_0899CC0C; AOT_REGCACHE_SYNC_OUT(); return; L_0899CC0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899CC40; } @@ -2447,14 +2277,12 @@ L_0899CC0C: } L_0899CC14: aot_gpr_31 = (0x0899CC1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899CC1Cu) goto L_0899CC1C; AOT_REGCACHE_SYNC_OUT(); return; L_0899CC1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899CC40; } @@ -2462,13 +2290,11 @@ L_0899CC1C: } L_0899CC2C: aot_gpr_31 = (0x0899CC34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899CC34u) goto L_0899CC34; AOT_REGCACHE_SYNC_OUT(); return; L_0899CC34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899CCF8; } @@ -2521,7 +2347,6 @@ L_0899CC40: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899CC98; @@ -2625,7 +2450,6 @@ L_0899CCF8: ctx.fpr[24] = aot_fpr_12 - ctx.fpr[24]; aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899D28C; } @@ -2642,7 +2466,6 @@ L_0899CD1C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899CD74; } @@ -2651,7 +2474,6 @@ L_0899CD1C: L_0899CD4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899CD74; } @@ -2667,7 +2489,6 @@ L_0899CD58: AOT_REGCACHE_SYNC_OUT(); return; L_0899CD6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899CD88; } @@ -2694,7 +2515,6 @@ L_0899CD74: L_0899CD88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899CDA8; } @@ -2719,7 +2539,6 @@ L_0899CDB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899CE88; } @@ -2735,7 +2554,6 @@ L_0899CDCC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899CE88; } @@ -2744,7 +2562,6 @@ L_0899CDCC: L_0899CDE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(163))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899CE88; } @@ -2839,7 +2656,6 @@ L_0899CDF4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899CF38; } @@ -2848,7 +2664,6 @@ L_0899CDF4: L_0899CE88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(163))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899CEA4; } @@ -2858,7 +2673,6 @@ L_0899CE94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899CEBC; } @@ -2881,7 +2695,6 @@ L_0899CEA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899CF38; } @@ -2971,7 +2784,6 @@ L_0899CF38: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_13)) && ctx.fpr[24] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); if (branch_taken) { @@ -2982,7 +2794,6 @@ L_0899CF38: L_0899CF70: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899CF90; @@ -3029,7 +2840,6 @@ L_0899CF9C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_13)) && ctx.fpr[26] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899CFF8; @@ -3038,7 +2848,6 @@ L_0899CF9C: L_0899CFDC: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899CFF8; @@ -3063,7 +2872,6 @@ L_0899D000: L_0899D004: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899D034; } @@ -3134,7 +2942,6 @@ L_0899D034: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); goto L_0899D090; @@ -3162,12 +2969,10 @@ L_0899D090: goto L_0899D0B8; L_0899D0B8: aot_gpr_31 = (0x0899D0C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899D0C0u) goto L_0899D0C0; AOT_REGCACHE_SYNC_OUT(); return; L_0899D0C0: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_0899D0E8; } @@ -3175,7 +2980,6 @@ L_0899D0C0: } L_0899D0C8: aot_gpr_31 = (0x0899D0D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899D0D0u) goto L_0899D0D0; AOT_REGCACHE_SYNC_OUT(); return; L_0899D0D0: @@ -3184,7 +2988,6 @@ L_0899D0D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899D0F0; } @@ -3199,9 +3002,7 @@ L_0899D0F0: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D120; } @@ -3223,9 +3024,7 @@ L_0899D120: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D14C; } @@ -3257,9 +3056,7 @@ L_0899D168: aot_fpr_13 = ctx.fpr[26] - aot_fpr_13; aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D18C; } @@ -3276,9 +3073,7 @@ L_0899D184: L_0899D18C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D1B0; } @@ -3306,9 +3101,7 @@ L_0899D1BC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D1F4; } @@ -3332,9 +3125,7 @@ L_0899D1F4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D228; } @@ -3351,9 +3142,7 @@ L_0899D228: aot_fpr_13 = ctx.fpr[24] - aot_fpr_13; aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D24C; } @@ -3370,9 +3159,7 @@ L_0899D244: L_0899D24C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D270; } @@ -3459,9 +3246,7 @@ L_0899D2B8: aot_gpr_4 = (16384u << 16u); ctx.fpr[17] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D364; } @@ -3472,9 +3257,7 @@ L_0899D344: aot_gpr_4 = (16384u << 16u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D364; } @@ -3522,7 +3305,6 @@ L_0899D3D8: L_0899D3E0: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(124), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -3540,7 +3322,6 @@ L_0899D3F4: goto L_0899D40C; L_0899D40C: aot_gpr_31 = (0x0899D414u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899D414u) goto L_0899D414; AOT_REGCACHE_SYNC_OUT(); return; L_0899D414: @@ -3565,7 +3346,6 @@ L_0899D42C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[20] << 5u); if (branch_taken) { @@ -3598,7 +3378,6 @@ L_0899D480: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[20] << 5u); if (branch_taken) { @@ -3629,7 +3408,6 @@ L_0899D4D8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); if (branch_taken) { @@ -3651,7 +3429,6 @@ L_0899D504: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899D544; @@ -3677,7 +3454,6 @@ L_0899D544: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_20 + aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899D5D0; } @@ -3860,7 +3636,6 @@ L_0899D5D0: AOT_REGCACHE_SYNC_OUT(); return; L_0899D714: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899DEC4; } @@ -3870,7 +3645,6 @@ L_0899D71C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899DBBC; } @@ -3918,7 +3692,6 @@ L_0899D72C: aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.gpr[19] = (0u | 40u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_0899D9A0; } @@ -3951,7 +3724,6 @@ L_0899D788: L_0899D7A0: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899D7C0; } @@ -4095,7 +3867,6 @@ L_0899D7C0: AOT_REGCACHE_SYNC_OUT(); return; L_0899D874: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899D990; } @@ -4141,9 +3912,7 @@ L_0899D87C: aot_gpr_4 = (aot_gpr_4 | 45613u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899D968; } @@ -4223,7 +3992,6 @@ L_0899D8E4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899D9A0; } @@ -4233,7 +4001,6 @@ L_0899D968: ctx.gpr[19] = (ctx.gpr[19] + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899D988; } @@ -4247,7 +4014,6 @@ L_0899D978: goto L_0899D988; L_0899D988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899D998; } @@ -4255,7 +4021,6 @@ L_0899D988: } L_0899D990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899D9A0; } @@ -4458,7 +4223,6 @@ L_0899D9A0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899DB04; } @@ -4507,7 +4271,6 @@ L_0899DAC4: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DB0C; } @@ -4568,9 +4331,7 @@ L_0899DB0C: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899DB78; } @@ -4637,7 +4398,6 @@ L_0899DB78: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DEC4; } @@ -4706,9 +4466,7 @@ L_0899DBBC: L_0899DC28: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899DDA0; } @@ -4817,7 +4575,6 @@ L_0899DCA0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -4834,7 +4591,6 @@ L_0899DD28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8896))); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899DD54; @@ -4847,7 +4603,6 @@ L_0899DD54: AOT_REGCACHE_SYNC_OUT(); return; L_0899DD5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DD98; } @@ -4862,7 +4617,6 @@ L_0899DD64: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899DD90; @@ -4875,7 +4629,6 @@ L_0899DD90: AOT_REGCACHE_SYNC_OUT(); return; L_0899DD98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DE18; } @@ -4907,7 +4660,6 @@ L_0899DDA0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -4924,7 +4676,6 @@ L_0899DDE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8896))); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899DE10; @@ -4993,9 +4744,7 @@ L_0899DE18: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899DEC4; } @@ -5051,7 +4800,6 @@ L_0899DEC4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899DF28; } @@ -5059,7 +4807,6 @@ L_0899DEC4: } L_0899DF20: aot_gpr_31 = (0x0899DF28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899DF28u) goto L_0899DF28; AOT_REGCACHE_SYNC_OUT(); return; L_0899DF28: @@ -5069,7 +4816,6 @@ L_0899DF28: AOT_REGCACHE_SYNC_OUT(); return; L_0899DF30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899DF40; } @@ -5077,7 +4823,6 @@ L_0899DF30: } L_0899DF38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899DF40; } @@ -5175,7 +4920,17 @@ L_0899DFA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899DFE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-1184)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -5204,7 +4959,6 @@ L_0899E04C: AOT_REGCACHE_SYNC_OUT(); return; L_0899E054: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899E0B4; } @@ -5246,7 +5000,6 @@ L_0899E0AC: } L_0899E0B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899F9A4; } @@ -5254,7 +5007,6 @@ L_0899E0B4: } L_0899E0BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899F9A4; } @@ -5342,7 +5094,6 @@ L_0899E134: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_0899E16C; @@ -5360,7 +5111,6 @@ L_0899E16C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1036), aot_gpr_4); aot_gpr_4 = (ctx.gpr[7] | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899E38C; } @@ -5526,7 +5276,6 @@ L_0899E28C: AOT_REGCACHE_SYNC_OUT(); return; L_0899E2C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899E34C; } @@ -5582,9 +5331,7 @@ L_0899E2CC: AOT_REGCACHE_SYNC_OUT(); return; L_0899E314: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E34C; } @@ -5619,7 +5366,6 @@ L_0899E34C: L_0899E358: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_0899E28C; } @@ -5656,7 +5402,6 @@ L_0899E38C: L_0899E394: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13476))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899E3AC; } @@ -5732,7 +5477,6 @@ L_0899E408: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13540))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1080), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1104), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -5748,9 +5492,7 @@ L_0899E454: aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(-13540), std::bit_cast(ctx.fpr[30])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1972))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E480; } @@ -5771,9 +5513,7 @@ L_0899E480: aot_gpr_5 = (16384u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E4AC; } @@ -5794,7 +5534,6 @@ L_0899E4AC: aot_gpr_5 = (16448u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1064), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5841,9 +5580,7 @@ L_0899E4F8: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[15] = ctx.fpr[15] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E52C; } @@ -5863,9 +5600,7 @@ L_0899E52C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(296))); aot_fpr_14 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E554; } @@ -5904,7 +5639,6 @@ L_0899E570: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899E5F0; } @@ -5915,7 +5649,6 @@ L_0899E590: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_0899E5F0; } @@ -5934,7 +5667,6 @@ L_0899E5A4: AOT_REGCACHE_SYNC_OUT(); return; L_0899E5B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899E5EC; } @@ -5947,7 +5679,6 @@ L_0899E5C0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(272), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5964,7 +5695,6 @@ L_0899E5EC: goto L_0899E5F0; L_0899E5F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_0899E600; @@ -5982,7 +5712,6 @@ L_0899E600: L_0899E60C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(88))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0899E624; } @@ -6007,7 +5736,6 @@ L_0899E624: aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(161), static_cast(aot_gpr_5)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2066))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_0899E6B0; } @@ -6017,7 +5745,6 @@ L_0899E64C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -6027,9 +5754,7 @@ L_0899E64C: } L_0899E664: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E67C; } @@ -6045,7 +5770,6 @@ L_0899E674: } L_0899E67C: aot_gpr_31 = (0x0899E684u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899E684u) goto L_0899E684; AOT_REGCACHE_SYNC_OUT(); return; L_0899E684: @@ -6241,7 +5965,6 @@ L_0899E710: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1056))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899E7A8; } @@ -6348,9 +6071,7 @@ L_0899E7A8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E844; } @@ -6359,7 +6080,6 @@ L_0899E7A8: L_0899E81C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), std::bit_cast(ctx.fpr[30])); if (branch_taken) { @@ -6369,7 +6089,6 @@ L_0899E81C: } L_0899E830: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_0899E840; @@ -6388,7 +6107,6 @@ L_0899E844: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6398,9 +6116,7 @@ L_0899E844: } L_0899E874: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E88C; } @@ -6416,7 +6132,6 @@ L_0899E884: } L_0899E88C: aot_gpr_31 = (0x0899E894u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899E894u) goto L_0899E894; AOT_REGCACHE_SYNC_OUT(); return; L_0899E894: @@ -6428,7 +6143,6 @@ L_0899E898: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1076))); if (branch_taken) { @@ -6446,7 +6160,6 @@ L_0899E8C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -6456,9 +6169,7 @@ L_0899E8C8: } L_0899E8E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899E8F8; } @@ -6474,7 +6185,6 @@ L_0899E8F0: } L_0899E8F8: aot_gpr_31 = (0x0899E900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899E900u) goto L_0899E900; AOT_REGCACHE_SYNC_OUT(); return; L_0899E900: @@ -6487,7 +6197,6 @@ L_0899E904: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -6512,7 +6221,6 @@ L_0899E940: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1100), aot_gpr_16); if (branch_taken) { @@ -6558,7 +6266,6 @@ L_0899E9A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899EA20; } @@ -6578,7 +6285,6 @@ L_0899E9D4: AOT_REGCACHE_SYNC_OUT(); return; L_0899E9EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899EA20; } @@ -6596,7 +6302,6 @@ L_0899E9FC: AOT_REGCACHE_SYNC_OUT(); return; L_0899EA04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899EA20; } @@ -6630,7 +6335,6 @@ L_0899EA40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899EA5C; } @@ -6648,7 +6352,6 @@ L_0899EA50: L_0899EA5C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-13532))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899EAB8; } @@ -6671,9 +6374,7 @@ L_0899EA68: aot_gpr_4 = (aot_gpr_4 | 4719u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EAB4; } @@ -6685,9 +6386,7 @@ L_0899EA94: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EAB8; } @@ -6702,7 +6401,6 @@ L_0899EAB8: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[22]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); goto L_0899EAF8; @@ -6717,7 +6415,6 @@ L_0899EAD8: goto L_0899EAE4; L_0899EAE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[16])) && aot_fpr_13 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -6742,9 +6439,7 @@ L_0899EAF8: } L_0899EB10: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[16])) && aot_fpr_13 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EB60; } @@ -6754,7 +6449,6 @@ L_0899EB20: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13464))); { const float fs = ctx.fpr[15]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0899EB38; @@ -6764,7 +6458,6 @@ L_0899EB38: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13460))); ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[16])) && aot_fpr_13 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[26] = std::bit_cast(0x7FC00000u); else ctx.fpr[26] = fs * ft; } if (branch_taken) { @@ -6787,7 +6480,6 @@ L_0899EB58: L_0899EB60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899EBB8; } @@ -6835,7 +6527,6 @@ L_0899EB6C: ctx.fpr[30] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[30]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[30] = std::bit_cast(0x7FC00000u); else ctx.fpr[30] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0899EBB0; @@ -6865,7 +6556,6 @@ L_0899EBB8: ctx.fpr[30] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[30]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[30] = std::bit_cast(0x7FC00000u); else ctx.fpr[30] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0899EBE0; @@ -6877,9 +6567,7 @@ L_0899EBE0: L_0899EBE4: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EC00; } @@ -6896,7 +6584,6 @@ L_0899EBF8: L_0899EC00: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -6917,9 +6604,7 @@ L_0899EC1C: ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EC54; } @@ -6940,9 +6625,7 @@ L_0899EC54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(124))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EC7C; } @@ -6985,7 +6668,6 @@ L_0899ECA8: aot_gpr_4 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(24))); goto L_0899ECC8; @@ -6993,7 +6675,6 @@ L_0899ECA8: goto L_0899ECC8; L_0899ECC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899ECD8; @@ -7015,9 +6696,7 @@ L_0899ECD8: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EE08; } @@ -7040,9 +6719,7 @@ L_0899ED18: aot_gpr_4 = (aot_gpr_4 | 4719u); ctx.fpr[17] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EE08; } @@ -7058,7 +6735,6 @@ L_0899ED44: { const float fs = aot_fpr_12; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_20 = aot_fpr_20 / ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0899ED74; @@ -7085,9 +6761,7 @@ L_0899ED74: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EDE4; } @@ -7107,9 +6781,7 @@ L_0899EDD0: L_0899EDE4: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EE08; } @@ -7141,7 +6813,6 @@ L_0899EE14: L_0899EE24: { const float fs = aot_fpr_14; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[30] = std::bit_cast(0x7FC00000u); else ctx.fpr[30] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_0899EE38; @@ -7154,9 +6825,7 @@ L_0899EE38: { const float fs = aot_fpr_13; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[26] = std::bit_cast(0x7FC00000u); else ctx.fpr[26] = fs * ft; } { const float fs = ctx.fpr[30]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EE64; } @@ -7173,9 +6842,7 @@ L_0899EE5C: L_0899EE64: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EE7C; } @@ -7192,9 +6859,7 @@ L_0899EE80: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1080))); ctx.fpr[24] = ctx.fpr[24] - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EEA4; } @@ -7212,9 +6877,7 @@ L_0899EEA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1104))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EEC0; } @@ -7242,9 +6905,7 @@ L_0899EEC0: ctx.fpr[16] = ctx.fpr[24] - ctx.fpr[16]; { const float fs = ctx.fpr[28]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[28] = std::bit_cast(0x7FC00000u); else ctx.fpr[28] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EF1C; } @@ -7261,9 +6922,7 @@ L_0899EF14: L_0899EF1C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899EF34; } @@ -7293,7 +6952,6 @@ L_0899EF50: AOT_REGCACHE_SYNC_OUT(); return; L_0899EF5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899EF6C; } @@ -7356,7 +7014,6 @@ L_0899EF6C: aot_gpr_4 = (16256u << 16u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = ctx.fpr[26] - aot_fpr_20; if (branch_taken) { @@ -7375,7 +7032,6 @@ L_0899F01C: L_0899F024: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(304))); goto L_0899F040; @@ -7397,9 +7053,7 @@ L_0899F040: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899F078; } @@ -7416,7 +7070,6 @@ L_0899F078: AOT_REGCACHE_SYNC_OUT(); return; L_0899F080: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0899F0A0; } @@ -7438,7 +7091,6 @@ L_0899F0A0: L_0899F0A8: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(124), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -7460,7 +7112,6 @@ L_0899F0D4: { const float fs = ctx.fpr[26]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(292), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7480,9 +7131,7 @@ L_0899F0FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(292))); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899F118; } @@ -7498,7 +7147,6 @@ L_0899F118: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(292))); goto L_0899F144; @@ -7516,7 +7164,6 @@ L_0899F144: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1080))); ctx.fpr[24] = ctx.fpr[24] + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(120), std::bit_cast(ctx.fpr[16])); if (branch_taken) { @@ -7538,9 +7185,7 @@ L_0899F178: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(120))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899F19C; } @@ -7571,7 +7216,6 @@ L_0899F19C: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(120))); goto L_0899F1C8; @@ -7590,7 +7234,6 @@ L_0899F1C8: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_29 + static_cast(80)); if (branch_taken) { @@ -7608,7 +7251,6 @@ L_0899F200: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(124))); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(-13468), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x0899F210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0101_entry, 101u, 113u, 0x08998FC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899F210u) goto L_0899F210; AOT_REGCACHE_SYNC_OUT(); return; L_0899F210: @@ -7912,7 +7554,6 @@ L_0899F370: aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(8068), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1088))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899F7B4; } @@ -7940,7 +7581,6 @@ L_0899F3D8: AOT_REGCACHE_SYNC_OUT(); return; L_0899F41C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899F7B4; } @@ -8065,9 +7705,7 @@ L_0899F498: L_0899F500: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899F6D4; } @@ -8243,7 +7881,6 @@ L_0899F640: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -8260,7 +7897,6 @@ L_0899F65C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8896))); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899F688; @@ -8273,7 +7909,6 @@ L_0899F688: AOT_REGCACHE_SYNC_OUT(); return; L_0899F690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899F6CC; } @@ -8288,7 +7923,6 @@ L_0899F698: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899F6C4; @@ -8301,7 +7935,6 @@ L_0899F6C4: AOT_REGCACHE_SYNC_OUT(); return; L_0899F6CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899F7B4; } @@ -8404,7 +8037,6 @@ L_0899F764: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -8421,7 +8053,6 @@ L_0899F780: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(8896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_0899F7AC; @@ -8538,7 +8169,6 @@ L_0899F7B4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_0899F874; } @@ -8546,7 +8176,6 @@ L_0899F7B4: } L_0899F86C: aot_gpr_31 = (0x0899F874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x0899F874u) goto L_0899F874; AOT_REGCACHE_SYNC_OUT(); return; L_0899F874: @@ -8556,7 +8185,6 @@ L_0899F874: AOT_REGCACHE_SYNC_OUT(); return; L_0899F87C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_0899F88C; } @@ -8564,7 +8192,6 @@ L_0899F87C: } L_0899F884: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899F88C; } @@ -8668,9 +8295,7 @@ L_0899F8C0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13536))); aot_fpr_13 = ctx.fpr[15] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899F918; } @@ -8685,7 +8310,6 @@ L_0899F918: aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(163), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_0899F964; } @@ -8695,7 +8319,6 @@ L_0899F930: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-1044))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_0899F964; } @@ -8743,7 +8366,6 @@ L_0899F98C: AOT_REGCACHE_SYNC_OUT(); return; L_0899F994: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_0899F9A4; } @@ -8779,7 +8401,17 @@ L_0899F9A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_0899F9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -8862,7 +8494,6 @@ L_0899FA74: } L_0899FAFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899FB1C; } @@ -8870,7 +8501,6 @@ L_0899FAFC: } L_0899FB04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0103_entry, 103u, 274u, 0x089A1A6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8897,7 +8527,6 @@ L_0899FB30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FB48; } @@ -8915,7 +8544,6 @@ L_0899FB48: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (0u + static_cast(-972)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FB68; } @@ -8925,7 +8553,6 @@ L_0899FB58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FB70; } @@ -8943,7 +8570,6 @@ L_0899FB70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FB90; } @@ -8953,7 +8579,6 @@ L_0899FB80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (0u | 230u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FB98; } @@ -8971,7 +8596,6 @@ L_0899FB98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); ctx.gpr[6] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FBB0; } @@ -8989,7 +8613,6 @@ L_0899FBB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_0899FBC4; } @@ -9050,9 +8673,7 @@ L_0899FC3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(928))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FC78; } @@ -9076,9 +8697,7 @@ L_0899FC54: L_0899FC78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FCB0; } @@ -9104,9 +8723,7 @@ L_0899FCB0: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FCEC; } @@ -9131,7 +8748,6 @@ L_0899FCEC: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } if (branch_taken) { @@ -9142,7 +8758,6 @@ L_0899FCEC: L_0899FD18: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0899FD34; } @@ -9220,7 +8835,6 @@ L_0899FD64: AOT_REGCACHE_SYNC_OUT(); return; L_0899FDA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_0899FDF0; } @@ -9231,9 +8845,7 @@ L_0899FDAC: { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_20 = aot_fpr_20 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FDF0; } @@ -9257,7 +8869,6 @@ L_0899FDF0: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); if (branch_taken) { @@ -9275,7 +8886,6 @@ L_0899FE10: } L_0899FE18: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_0899FE30; } @@ -9289,7 +8899,6 @@ L_0899FE20: goto L_0899FE30; L_0899FE30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_0899FE40; @@ -9331,7 +8940,6 @@ L_0899FE78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FEE8; } @@ -9362,9 +8970,7 @@ L_0899FE88: aot_fpr_13 = std::bit_cast(ctx.gpr[6]); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13672))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FEE8; } @@ -9409,7 +9015,6 @@ L_0899FEE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); ctx.gpr[6] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_0899FF64; } @@ -9440,9 +9045,7 @@ L_0899FEF8: aot_fpr_13 = std::bit_cast(ctx.gpr[6]); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-13664))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FF64; } @@ -9485,9 +9088,7 @@ L_0899FF24: L_0899FF64: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FFB8; } @@ -9514,9 +9115,7 @@ L_0899FF78: L_0899FFB8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FFD4; } @@ -9533,9 +9132,7 @@ L_0899FFCC: L_0899FFD4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_0899FFEC; } @@ -9547,7 +9144,6 @@ L_0899FFE8: L_0899FFEC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(163))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0103_entry, 103u, 5u, 0x089A002Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9556,7 +9152,6 @@ L_0899FFEC: L_0899FFF8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(88))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0103_entry, 103u, 5u, 0x089A002Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0103.cpp b/profiles/vcs/generated/generated_unit_0103.cpp index d951f38..9165b0b 100644 --- a/profiles/vcs/generated/generated_unit_0103.cpp +++ b/profiles/vcs/generated/generated_unit_0103.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0103[4082] = { - 1, 0, 0, 2, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 9, - 0, 10, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 19, 0, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 27, 0, 28, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 33, 0, 34, 0, 35, 36, 0, 37, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, - 41, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0, 0, 0, 48, - 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 55, - 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, - 60, 0, 0, 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 66, 0, 67, - 0, 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, - 0, 0, 73, 0, 74, 75, 0, 76, 77, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 82, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 89, 90, 0, 91, 92, 0, 93, 0, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 97, 0, 98, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 115, 0, 116, 0, 0, 0, 117, 118, 0, 0, 0, 0, 0, 0, 0, - 119, 0, 120, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 124, 0, 0, 0, 0, 125, 126, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 139, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, - 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 148, 0, 149, 0, 150, 151, 0, 0, - 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, - 0, 0, 0, 156, 157, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, - 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, 0, - 170, 0, 0, 0, 0, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, 0, - 179, 0, 0, 180, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, 0, 185, 0, 186, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 190, 0, 191, 0, 192, 0, 193, 0, 0, 0, 0, 0, 194, - 0, 0, 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, - 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 0, - 0, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 227, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 0, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 236, 0, 237, 0, 238, 0, 0, 0, 0, - 239, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 245, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 250, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 253, - 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, - 261, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, - 0, 0, 0, 0, 267, 268, 0, 269, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 272, 0, 0, 273, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, 287, 0, 288, 0, 0, 0, - 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 294, 0, 0, 0, 0, 295, 0, - 296, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 0, 0, - 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 306, 307, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 313, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 317, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, - 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 326, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, - 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 333, 0, 334, 0, 0, 335, 0, 336, 337, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, - 0, 342, 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 348, 0, 349, 0, 0, 0, - 0, 0, 350, 0, 0, 0, 351, 0, 0, 352, 0, 353, 0, 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, - 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 364, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, 370, 0, 371, 0, 0, 0, 0, 372, 0, 0, - 0, 0, 0, 373, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, - 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 380, 0, - 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 387, 388, 0, 389, 0, 0, - 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, - 0, 0, 396, 0, 397, 398, 0, 0, 0, 0, 0, 399, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 405, - 0, 406, 407, 0, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, - 0, 426, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, - 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 432, 0, 0, - 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 437, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, - 0, 442, 0, 0, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 447, - 0, 0, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, - 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 467, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, - 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 474, 0, - 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, - 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 489, 490, 0, 0, 0, 0, 491, 0, 492, 0, 493, 0, - 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 497, 0, 0, 0, 498, 0, 499, 0, 500, 0, 501, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 510, 0, 0, 0, 0, 511, 0, 512, 0, - 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 516, 517, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, - 0, 520, 0, 521, 522, 0, 523, 0, 524, 0, 0, 0, 0, 525, 0, 526, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 530, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 536, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 537, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, - 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 549, 0, 550, - 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 554, 0, 0, 0, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, - 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, - 0, 565, 566, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 576, 577, 0, 0, - 578, 0, 0, 579, 0, 0, 580, 0, 0, 0, 581, 0, 582, 0, 583, 0, 0, 584, 0, 585, 0, 586, 0, 587, 0, 588, 0, 0, 0, 589, 0, 590, - 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 596, 0, 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, - 601, 602, 0, 0, 603, 0, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, - 0, 611, 0, 0, 612, 0, 0, 613, 0, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0103[64] = { + 0x00003086A2040549ull, 0x0000000000000000ull, 0x2201A88000000024ull, 0x08436A20800B5102ull, + 0x8504044000000011ull, 0x10002202A0441081ull, 0x00000048B1100061ull, 0x035101B440104000ull, + 0x16D1080100084000ull, 0x011229100006A202ull, 0x018A440000D44040ull, 0x00042C2800001205ull, + 0x00050480500AA000ull, 0x3544000140280520ull, 0x240280385000000Aull, 0x06098A4104822884ull, + 0x82A8812005030509ull, 0x0000000140120140ull, 0x0000000000040000ull, 0x2240000000000000ull, + 0x028000A000840910ull, 0x0100050000088050ull, 0x008100A801500204ull, 0x280088290AA40034ull, + 0x8291088001000000ull, 0x8008840522221208ull, 0x00001000052120B0ull, 0x0010140100104000ull, + 0x0000800415400424ull, 0x0002450142A00200ull, 0x0924B00A10440000ull, 0x20A5001200000000ull, + 0x4452400000022210ull, 0x5012694000000444ull, 0x00014A4415088242ull, 0x0020088441088000ull, + 0x0000001821608151ull, 0x4808004210000000ull, 0x0000200000040001ull, 0x421220012C848000ull, + 0x00004A068842A834ull, 0xA00802800004A000ull, 0x20000C0004000400ull, 0x4040000A80020000ull, + 0x0001084420400080ull, 0x8880088222002084ull, 0x0000000822200220ull, 0x0000000082220020ull, + 0x0080100800000440ull, 0x4008020100200804ull, 0x0000001041020080ull, 0x0108000000000100ull, + 0x0045500480000040ull, 0x5512200254310002ull, 0x50D01004000AA000ull, 0x0004A15A802C0A02ull, + 0x6104000001228400ull, 0x8120208A00000000ull, 0x00800402A8001484ull, 0x2801040220082A02ull, + 0x3140082011002056ull, 0x00009028A2AA5449ull, 0x0402AA9348048480ull, 0x0002000000002492ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0103[64] = { + 1u, 15u, 15u, 24u, 41u, 49u, 60u, 70u, 83u, 94u, 107u, 119u, 129u, 139u, 152u, 163u, + 179u, 195u, 201u, 202u, 205u, 214u, 221u, 231u, 246u, 254u, 267u, 276u, 282u, 291u, 301u, 313u, + 320u, 330u, 342u, 356u, 364u, 375u, 381u, 384u, 396u, 411u, 419u, 424u, 430u, 437u, 448u, 454u, + 459u, 464u, 471u, 476u, 479u, 487u, 502u, 513u, 528u, 537u, 544u, 554u, 565u, 578u, 595u, 611u, }; void recomp_unit_0103_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0103_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089A0004u; - entry_id = (entry_delta < 16328u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0103[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16328u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0103[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0103[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089A0004; @@ -790,7 +697,6 @@ LOCAL_DISPATCH: L_089A0004: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2057))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A002C; } @@ -809,7 +715,6 @@ L_089A001C: AOT_REGCACHE_SYNC_OUT(); return; L_089A0024: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A0218; } @@ -832,7 +737,6 @@ L_089A004C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -842,9 +746,7 @@ L_089A004C: } L_089A0068: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0080; } @@ -860,7 +762,6 @@ L_089A0078: } L_089A0080: aot_gpr_31 = (0x089A0088u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A0088u) goto L_089A0088; AOT_REGCACHE_SYNC_OUT(); return; L_089A0088: @@ -1074,7 +975,6 @@ L_089A00B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(928))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A0218; } @@ -1186,7 +1086,6 @@ L_089A0218: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(940), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); if (branch_taken) { @@ -1196,9 +1095,7 @@ L_089A0218: } L_089A02A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A02B8; } @@ -1214,7 +1111,6 @@ L_089A02B0: } L_089A02B8: aot_gpr_31 = (0x089A02C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A02C0u) goto L_089A02C0; AOT_REGCACHE_SYNC_OUT(); return; L_089A02C0: @@ -1245,7 +1141,6 @@ L_089A02F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A0350; } @@ -1256,7 +1151,6 @@ L_089A0308: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); if (branch_taken) { @@ -1266,9 +1160,7 @@ L_089A0308: } L_089A0324: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A033C; } @@ -1284,7 +1176,6 @@ L_089A0334: } L_089A033C: aot_gpr_31 = (0x089A0344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A0344u) goto L_089A0344; AOT_REGCACHE_SYNC_OUT(); return; L_089A0344: @@ -1292,7 +1183,6 @@ L_089A0344: goto L_089A0348; L_089A0348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A03C8; } @@ -1316,9 +1206,7 @@ L_089A0350: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A03C4; } @@ -1328,7 +1216,6 @@ L_089A0380: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(320))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(324))); if (branch_taken) { @@ -1338,9 +1225,7 @@ L_089A0380: } L_089A0398: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A03B0; } @@ -1356,7 +1241,6 @@ L_089A03A8: } L_089A03B0: aot_gpr_31 = (0x089A03B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A03B8u) goto L_089A03B8; AOT_REGCACHE_SYNC_OUT(); return; L_089A03B8: @@ -1364,7 +1248,6 @@ L_089A03B8: goto L_089A03BC; L_089A03BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A03C8; } @@ -1376,9 +1259,7 @@ L_089A03C4: L_089A03C8: aot_fpr_13 = aot_fpr_20 + ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A03F0; } @@ -1398,9 +1279,7 @@ L_089A03DC: L_089A03F0: aot_fpr_13 = aot_fpr_20 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0414; } @@ -1498,7 +1377,6 @@ L_089A0414: aot_gpr_4 = (16256u << 16u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_089A049C; @@ -1520,7 +1398,6 @@ L_089A04AC: aot_gpr_6 = (aot_gpr_6 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_089A04CC; @@ -1530,9 +1407,7 @@ L_089A04CC: aot_fpr_12 = aot_fpr_12 - aot_fpr_20; { const float fs = ctx.fpr[15]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A04EC; } @@ -1549,9 +1424,7 @@ L_089A04E4: L_089A04EC: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0504; } @@ -1565,9 +1438,7 @@ L_089A0504: aot_fpr_20 = aot_fpr_20 + aot_fpr_12; aot_fpr_13 = aot_fpr_13 + ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0534; } @@ -1588,9 +1459,7 @@ L_089A0534: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(124))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A055C; } @@ -1607,7 +1476,6 @@ L_089A055C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(944), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1633,7 +1501,6 @@ L_089A0588: aot_gpr_6 = (49024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); goto L_089A05A8; @@ -1641,7 +1508,6 @@ L_089A0588: goto L_089A05A8; L_089A05A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089A05B8; @@ -1662,9 +1528,7 @@ L_089A05B8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(924), std::bit_cast(aot_fpr_12)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(940))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A061C; } @@ -1672,7 +1536,6 @@ L_089A05B8: } L_089A05F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(ctx.fpr[26])); if (branch_taken) { @@ -1683,7 +1546,6 @@ L_089A05F4: L_089A0604: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089A0618; @@ -1712,7 +1574,6 @@ L_089A061C: aot_gpr_6 = (16329u << 16u); aot_gpr_6 = (aot_gpr_6 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = std::bit_cast(aot_gpr_6); if (branch_taken) { @@ -1749,7 +1610,6 @@ L_089A0680: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089A069C; } @@ -1877,9 +1737,7 @@ L_089A069C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0AE0; } @@ -1914,7 +1772,6 @@ L_089A0754: } L_089A077C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A0798; @@ -1945,7 +1802,6 @@ L_089A07A4: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -1955,9 +1811,7 @@ L_089A07A4: } L_089A07C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A07DC; } @@ -1973,7 +1827,6 @@ L_089A07D4: } L_089A07DC: aot_gpr_31 = (0x089A07E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A07E4u) goto L_089A07E4; AOT_REGCACHE_SYNC_OUT(); return; L_089A07E4: @@ -2002,9 +1855,7 @@ L_089A07E8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0884; } @@ -2013,7 +1864,6 @@ L_089A07E8: L_089A083C: aot_fpr_12 = ctx.fpr[28] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089A0850; @@ -2034,7 +1884,6 @@ L_089A0850: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; aot_fpr_12 = aot_fpr_13 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A08B0; } @@ -2058,7 +1907,6 @@ L_089A0884: L_089A08B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13416))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(ctx.fpr[24])) && ctx.fpr[26] == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } if (branch_taken) { @@ -2068,7 +1916,6 @@ L_089A08B0: } L_089A08C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A08E0; @@ -2103,7 +1950,6 @@ L_089A08F4: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_089A0AE0; } @@ -2115,7 +1961,6 @@ L_089A0908: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -2125,9 +1970,7 @@ L_089A0908: } L_089A0928: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0940; } @@ -2143,7 +1986,6 @@ L_089A0938: } L_089A0940: aot_gpr_31 = (0x089A0948u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A0948u) goto L_089A0948; AOT_REGCACHE_SYNC_OUT(); return; L_089A0948: @@ -2175,7 +2017,6 @@ L_089A094C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -2185,7 +2026,6 @@ L_089A094C: } L_089A0994: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -2204,7 +2044,6 @@ L_089A09A4: } L_089A09B0: aot_gpr_31 = (0x089A09B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A09B8u) goto L_089A09B8; AOT_REGCACHE_SYNC_OUT(); return; L_089A09B8: @@ -2226,7 +2065,6 @@ L_089A09D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1884))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A0AE0; } @@ -2260,9 +2098,7 @@ L_089A09E4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0AE0; } @@ -2274,7 +2110,6 @@ L_089A0A1C: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -2284,9 +2119,7 @@ L_089A0A1C: } L_089A0A3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0A54; } @@ -2302,7 +2135,6 @@ L_089A0A4C: } L_089A0A54: aot_gpr_31 = (0x089A0A5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A0A5Cu) goto L_089A0A5C; AOT_REGCACHE_SYNC_OUT(); return; L_089A0A5C: @@ -2335,7 +2167,6 @@ L_089A0A60: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -2345,7 +2176,6 @@ L_089A0A60: } L_089A0AAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -2364,7 +2194,6 @@ L_089A0ABC: } L_089A0AC8: aot_gpr_31 = (0x089A0AD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A0AD0u) goto L_089A0AD0; AOT_REGCACHE_SYNC_OUT(); return; L_089A0AD0: @@ -2382,7 +2211,6 @@ L_089A0AE4: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(924), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -2403,9 +2231,7 @@ L_089A0B0C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(924))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0B34; } @@ -2437,9 +2263,7 @@ L_089A0B34: ctx.fpr[15] = ctx.fpr[15] - ctx.fpr[17]; { const float fs = ctx.fpr[26]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[26] = std::bit_cast(0x7FC00000u); else ctx.fpr[26] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0B98; } @@ -2456,9 +2280,7 @@ L_089A0B90: L_089A0B98: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0BB0; } @@ -2519,7 +2341,6 @@ L_089A0C38: goto L_089A0C40; L_089A0C40: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089A0D18; } @@ -2537,9 +2358,7 @@ L_089A0C50: aot_gpr_4 = (17146u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0D18; } @@ -2557,9 +2376,7 @@ L_089A0C7C: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0D18; } @@ -2568,7 +2385,6 @@ L_089A0C7C: L_089A0CA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A0D18; } @@ -2580,7 +2396,6 @@ L_089A0CAC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A0D18; } @@ -2619,7 +2434,6 @@ L_089A0CCC: L_089A0D18: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089A0DCC; } @@ -2637,9 +2451,7 @@ L_089A0D2C: aot_gpr_4 = (17146u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0DCC; } @@ -2657,9 +2469,7 @@ L_089A0D58: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A0DCC; } @@ -2694,7 +2504,6 @@ L_089A0DCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A0DF8; } @@ -2712,7 +2521,6 @@ L_089A0DE4: AOT_REGCACHE_SYNC_OUT(); return; L_089A0DEC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A0DF8; } @@ -2723,7 +2531,6 @@ L_089A0DF4: goto L_089A0DF8; L_089A0DF8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(920), std::bit_cast(ctx.fpr[26])); if (branch_taken) { @@ -2758,7 +2565,6 @@ L_089A0E10: aot_gpr_4 = (16256u << 16u); ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = ctx.fpr[28] - ctx.fpr[26]; if (branch_taken) { @@ -2777,7 +2583,6 @@ L_089A0E74: L_089A0E7C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(304))); goto L_089A0E98; @@ -2797,7 +2602,6 @@ L_089A0E98: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13456))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(304))); goto L_089A0EC8; @@ -2816,7 +2620,6 @@ L_089A0EC8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(124), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A0F30; } @@ -2831,7 +2634,6 @@ L_089A0EEC: L_089A0EF8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -2859,7 +2661,6 @@ L_089A0F30: AOT_REGCACHE_SYNC_OUT(); return; L_089A0F38: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(124), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -2886,7 +2687,6 @@ L_089A0F6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(120))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(924))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(292))); goto L_089A0FEC; @@ -2896,7 +2696,6 @@ L_089A0F84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(940))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(292))); goto L_089A0FEC; @@ -2923,7 +2722,6 @@ L_089A0FB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089A0FC4; } @@ -2935,7 +2733,6 @@ L_089A0FC0: L_089A0FC4: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A0FE8; } @@ -2972,9 +2769,7 @@ L_089A1004: L_089A1010: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A102C; } @@ -2992,9 +2787,7 @@ L_089A102C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(292))); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A1048; } @@ -3008,7 +2801,6 @@ L_089A1048: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13452))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(292))); goto L_089A106C; @@ -3027,7 +2819,6 @@ L_089A106C: aot_fpr_14 = ctx.fpr[16] + aot_fpr_14; aot_fpr_20 = ctx.fpr[15] + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(120), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -3049,9 +2840,7 @@ L_089A10A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(120))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A10D0; } @@ -3070,7 +2859,6 @@ L_089A10D0: AOT_REGCACHE_SYNC_OUT(); return; L_089A10D8: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089A1124; } @@ -3085,7 +2873,6 @@ L_089A10E8: aot_gpr_4 = (16320u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15928u << 16u); if (branch_taken) { @@ -3098,9 +2885,7 @@ L_089A1100: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A1124; } @@ -3117,7 +2902,6 @@ L_089A1124: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13440))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(120))); goto L_089A1154; @@ -3136,9 +2920,7 @@ L_089A1154: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13436))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A1184; } @@ -3506,7 +3288,6 @@ L_089A1460: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); goto L_089A14A0; @@ -3577,9 +3358,7 @@ L_089A151C: } L_089A1540: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A16A0; } @@ -3648,7 +3427,6 @@ L_089A15AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A15E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0101_entry, 101u, 116u, 0x08999040u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A15E4u) goto L_089A15E4; AOT_REGCACHE_SYNC_OUT(); return; L_089A15E4: @@ -3669,7 +3447,6 @@ L_089A160C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -3686,7 +3463,6 @@ L_089A1628: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8896))); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A1654; @@ -3699,7 +3475,6 @@ L_089A1654: AOT_REGCACHE_SYNC_OUT(); return; L_089A165C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A1698; } @@ -3714,7 +3489,6 @@ L_089A1664: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A1690; @@ -3727,7 +3501,6 @@ L_089A1690: AOT_REGCACHE_SYNC_OUT(); return; L_089A1698: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A1714; } @@ -3750,7 +3523,6 @@ L_089A16C4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -3767,7 +3539,6 @@ L_089A16E0: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A170C; @@ -3808,7 +3579,6 @@ L_089A174C: } L_089A1758: aot_gpr_31 = (0x089A1760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A1760u) goto L_089A1760; AOT_REGCACHE_SYNC_OUT(); return; L_089A1760: @@ -3876,7 +3646,6 @@ L_089A17C0: AOT_REGCACHE_SYNC_OUT(); return; L_089A17F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A1A20; } @@ -4001,7 +3770,6 @@ L_089A1910: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(552), std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(964))); if (branch_taken) { @@ -4018,9 +3786,7 @@ L_089A1928: L_089A1934: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A1984; } @@ -4178,7 +3944,17 @@ L_089A1A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A1AB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-608)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4317,7 +4093,6 @@ L_089A1C18: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(163))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A1C5C; } @@ -4464,7 +4239,6 @@ L_089A1D84: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -4478,7 +4252,6 @@ L_089A1DA4: goto L_089A1DAC; L_089A1DAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17096u << 16u); if (branch_taken) { @@ -4529,7 +4302,6 @@ L_089A1DC8: AOT_REGCACHE_SYNC_OUT(); return; L_089A1E4C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(124), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -4548,9 +4320,7 @@ L_089A1E5C: L_089A1E74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A1E90; } @@ -4571,9 +4341,7 @@ L_089A1E90: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A1EB8; } @@ -4748,7 +4516,6 @@ L_089A1EF0: L_089A1F88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(161))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089A21BC; } @@ -5059,7 +4826,6 @@ L_089A21B8: L_089A21BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-13404))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A21D4; } @@ -5107,7 +4873,6 @@ L_089A21FC: L_089A2208: ctx.fpr[30] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5147,7 +4912,6 @@ L_089A2250: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A2274; } @@ -5305,7 +5069,6 @@ L_089A2340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_089A2364; } @@ -5316,7 +5079,6 @@ L_089A2350: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A237C; } @@ -5338,7 +5100,6 @@ L_089A237C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_089A23A0; } @@ -5349,7 +5110,6 @@ L_089A238C: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A2414; } @@ -5359,7 +5119,6 @@ L_089A23A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A2414; } @@ -5415,7 +5174,6 @@ L_089A2414: AOT_REGCACHE_SYNC_OUT(); return; L_089A241C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A2464; } @@ -5426,7 +5184,6 @@ L_089A2424: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15605u << 16u); if (branch_taken) { @@ -5451,7 +5208,6 @@ L_089A2458: goto L_089A245C; L_089A245C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A2494; } @@ -5460,7 +5216,6 @@ L_089A245C: L_089A2464: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13408))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15605u << 16u); if (branch_taken) { @@ -5676,7 +5431,6 @@ L_089A2574: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_089A259C; } @@ -5687,7 +5441,6 @@ L_089A2588: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A2604; } @@ -5767,7 +5520,17 @@ L_089A2604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A264C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -5870,7 +5633,6 @@ L_089A2740: L_089A274C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5932,7 +5694,6 @@ L_089A27C8: L_089A27D4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_089A27E8; @@ -5941,7 +5702,6 @@ L_089A27D4: L_089A27E8: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); goto L_089A27FC; @@ -5949,9 +5709,7 @@ L_089A27E8: goto L_089A27FC; L_089A27FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A2814; } @@ -5992,7 +5750,6 @@ L_089A2838: AOT_REGCACHE_SYNC_OUT(); return; L_089A2840: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A288C; } @@ -6001,7 +5758,6 @@ L_089A2840: L_089A2848: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_089A285C; @@ -6010,7 +5766,6 @@ L_089A2848: L_089A285C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); goto L_089A2870; @@ -6018,9 +5773,7 @@ L_089A285C: goto L_089A2870; L_089A2870: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A2888; } @@ -6202,7 +5955,6 @@ L_089A294C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(244))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(252))); goto L_089A29A8; @@ -6224,9 +5976,7 @@ L_089A29A8: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A2A00; } @@ -6247,7 +5997,6 @@ L_089A29D0: AOT_REGCACHE_SYNC_OUT(); return; L_089A29F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A2A2C; } @@ -6397,7 +6146,17 @@ L_089A2AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A2AF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), aot_gpr_16); @@ -6458,7 +6217,6 @@ L_089A2B80: } L_089A2B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A33E4; } @@ -6481,7 +6239,6 @@ L_089A2B90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2544))); goto L_089A2BFC; @@ -6545,7 +6302,6 @@ L_089A2C5C: L_089A2C78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(264))); goto L_089A2C9C; @@ -6573,7 +6329,6 @@ L_089A2CB0: ctx.gpr[19] = (aot_gpr_4 | 0u); aot_gpr_5 = (ctx.gpr[19] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089A301C; } @@ -6636,9 +6391,7 @@ L_089A2D38: goto L_089A2D68; L_089A2D68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A2D88; } @@ -6687,9 +6440,7 @@ L_089A2DB0: goto L_089A2DE0; L_089A2DE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A2E00; } @@ -6738,9 +6489,7 @@ L_089A2E28: goto L_089A2E58; L_089A2E58: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A2E78; } @@ -6823,7 +6572,6 @@ L_089A2F18: goto L_089A2F48; L_089A2F48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(188))); goto L_089A2F68; @@ -7051,7 +6799,6 @@ L_089A302C: aot_fpr_14 = std::bit_cast(ctx.gpr[7]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(176), ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (aot_gpr_29 + static_cast(16)); if (branch_taken) { @@ -7096,7 +6843,6 @@ L_089A30E0: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fpr[15] = ctx.fpr[15] + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2544))); goto L_089A3130; @@ -7138,7 +6884,6 @@ L_089A3158: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2544))); goto L_089A31A8; @@ -7180,7 +6925,6 @@ L_089A31D0: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2544))); goto L_089A3220; @@ -7480,7 +7224,17 @@ L_089A33E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A341C: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); ctx.gpr[7] = (16076u << 16u); @@ -7507,7 +7261,6 @@ L_089A341C: L_089A3480: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A34BC; } @@ -7531,7 +7284,6 @@ L_089A348C: } L_089A34B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0104_entry, 104u, 7u, 0x089A4094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7544,7 +7296,6 @@ L_089A34BC: AOT_REGCACHE_SYNC_OUT(); return; L_089A34C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0104_entry, 104u, 25u, 0x089A42CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7596,7 +7347,6 @@ L_089A3544: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3558; } @@ -7621,7 +7371,6 @@ L_089A3558: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(163))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A35B8; } @@ -7664,7 +7413,6 @@ L_089A35B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(0)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A35E4; } @@ -7673,7 +7421,6 @@ L_089A35B8: L_089A35C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089A35E4; } @@ -7683,7 +7430,6 @@ L_089A35D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(0)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A3790; } @@ -7701,7 +7447,6 @@ L_089A35EC: AOT_REGCACHE_SYNC_OUT(); return; L_089A35F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A3638; } @@ -7740,7 +7485,6 @@ L_089A3640: AOT_REGCACHE_SYNC_OUT(); return; L_089A3648: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A368C; } @@ -7775,9 +7519,7 @@ L_089A368C: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A36DC; } @@ -7796,7 +7538,6 @@ L_089A36B4: AOT_REGCACHE_SYNC_OUT(); return; L_089A36D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A36E0; } @@ -7808,9 +7549,7 @@ L_089A36DC: L_089A36E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A36FC; } @@ -7827,7 +7566,6 @@ L_089A36F4: L_089A36FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089A3730; } @@ -7839,9 +7577,7 @@ L_089A3708: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3750; } @@ -7860,9 +7596,7 @@ L_089A3730: aot_gpr_4 = (16752u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3750; } @@ -7873,7 +7607,6 @@ L_089A374C: goto L_089A3750; L_089A3750: aot_gpr_31 = (0x089A3758u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A3758u) goto L_089A3758; AOT_REGCACHE_SYNC_OUT(); return; L_089A3758: @@ -7886,7 +7619,6 @@ L_089A3758: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A3788; } @@ -7898,7 +7630,6 @@ L_089A3780: goto L_089A3788; L_089A3788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A3794; } @@ -7972,7 +7703,6 @@ L_089A37CC: L_089A382C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[30])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -7986,7 +7716,6 @@ L_089A3840: goto L_089A3848; L_089A3848: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17096u << 16u); if (branch_taken) { @@ -8031,9 +7760,7 @@ L_089A38CC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13392))); ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A38FC; } @@ -8042,9 +7769,7 @@ L_089A38CC: L_089A38E4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A38FC; } @@ -8101,7 +7826,6 @@ L_089A3988: AOT_REGCACHE_SYNC_OUT(); return; L_089A3990: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[23] + static_cast(124), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -8123,7 +7847,6 @@ L_089A39B8: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(700))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8145,9 +7868,7 @@ L_089A39E4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(120))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3A0C; } @@ -8163,7 +7884,6 @@ L_089A3A0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3A2C; } @@ -8292,9 +8012,7 @@ L_089A3B08: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3B38; } @@ -8317,9 +8035,7 @@ L_089A3B38: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(124))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3C1C; } @@ -8335,7 +8051,6 @@ L_089A3B50: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8345,7 +8060,6 @@ L_089A3B78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8360,7 +8074,6 @@ L_089A3B88: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8370,7 +8083,6 @@ L_089A3BAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1860))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -8387,7 +8099,6 @@ L_089A3BC4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8405,9 +8116,7 @@ L_089A3BF0: } L_089A3BF8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3C0C; } @@ -8423,7 +8132,6 @@ L_089A3C0C: AOT_REGCACHE_SYNC_OUT(); return; L_089A3C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8434,9 +8142,7 @@ L_089A3C1C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(124))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3D04; } @@ -8453,7 +8159,6 @@ L_089A3C38: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8463,7 +8168,6 @@ L_089A3C64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8478,7 +8182,6 @@ L_089A3C74: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3D04; } @@ -8488,7 +8191,6 @@ L_089A3C98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1860))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -8505,7 +8207,6 @@ L_089A3CB0: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8523,9 +8224,7 @@ L_089A3CDC: } L_089A3CE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A3CF8; } @@ -8564,7 +8263,6 @@ L_089A3D1C: } L_089A3D2C: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_089A3DB4; } @@ -8572,7 +8270,6 @@ L_089A3D2C: } L_089A3D34: { const bool branch_taken = static_cast(aot_gpr_16) > 0; - // nop if (branch_taken) { goto L_089A3D68; } @@ -8586,7 +8283,6 @@ L_089A3D3C: AOT_REGCACHE_SYNC_OUT(); return; L_089A3D48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A3DB4; } @@ -8602,7 +8298,6 @@ L_089A3D50: } L_089A3D58: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A3D98; } @@ -8610,7 +8305,6 @@ L_089A3D58: } L_089A3D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A3DB4; } @@ -8625,7 +8319,6 @@ L_089A3D68: AOT_REGCACHE_SYNC_OUT(); return; L_089A3D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A3DB4; } @@ -8640,7 +8333,6 @@ L_089A3D80: AOT_REGCACHE_SYNC_OUT(); return; L_089A3D90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A3DB4; } @@ -8761,7 +8453,6 @@ L_089A3E20: L_089A3E2C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8805,7 +8496,6 @@ L_089A3E84: L_089A3E88: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3EA8; } @@ -8814,7 +8504,6 @@ L_089A3E88: L_089A3E94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A3EA8; } @@ -8827,7 +8516,6 @@ L_089A3EA0: AOT_REGCACHE_SYNC_OUT(); return; L_089A3EA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0104_entry, 104u, 3u, 0x089A4054u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0104.cpp b/profiles/vcs/generated/generated_unit_0104.cpp index 7bb2a53..315f1d7 100644 --- a/profiles/vcs/generated/generated_unit_0104.cpp +++ b/profiles/vcs/generated/generated_unit_0104.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0104[4086] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 5, 0, 0, - 6, 0, 0, 0, 0, 7, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 13, 0, - 0, 0, 0, 14, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 20, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 23, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 36, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 52, 0, 53, 0, 0, 54, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 73, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, - 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 86, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, - 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 120, 121, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, - 0, 0, 127, 0, 128, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, - 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, - 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, - 0, 0, 0, 0, 145, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 149, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 158, - 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, - 0, 165, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, - 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 173, 0, 174, 175, 0, 0, 176, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, - 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 184, - 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 187, 0, 0, - 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, - 194, 0, 0, 0, 0, 195, 0, 196, 0, 197, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 0, 0, 205, 0, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, - 0, 0, 0, 0, 210, 211, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 216, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 219, 0, 220, 0, 0, 221, 0, 222, 223, 0, 224, 0, 0, 225, 0, 0, 0, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, - 230, 0, 231, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 235, 0, 236, 0, 237, 0, 238, 0, 0, 239, 0, 240, 241, 0, 242, 0, - 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 247, 248, 0, 0, - 249, 0, 250, 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 0, 0, 0, 0, 0, 0, - 259, 0, 0, 0, 260, 0, 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 265, 0, - 266, 0, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, 269, 0, 270, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 277, 0, 278, 0, 0, 0, 0, 279, 0, 0, 0, 0, - 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 282, 283, 0, 284, 0, 0, 285, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 0, 288, 0, 0, 0, - 289, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 295, 0, - 0, 0, 0, 0, 296, 0, 0, 297, 0, 298, 0, 299, 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 304, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 307, - 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 310, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 314, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 329, 0, 0, 0, 330, 0, 0, 0, 331, 332, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 336, 0, 337, 0, - 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 342, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, - 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 350, 0, 0, 0, - 0, 0, 0, 0, 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, - 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 371, - 0, 372, 0, 373, 0, 374, 0, 0, 0, 375, 0, 376, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 383, - 0, 384, 0, 0, 385, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 391, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 397, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 402, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 406, 0, 407, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 412, 0, 0, 0, 413, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, - 0, 0, 0, 0, 416, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 426, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, - 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 441, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 0, - 0, 444, 0, 0, 0, 0, 445, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, - 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 458, 459, 0, 0, 0, 0, 0, 0, 460, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 463, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 467, 0, 0, 0, 468, 0, - 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 0, 0, 473, 0, 474, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 484, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, - 0, 0, 0, 487, 0, 488, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, - 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 500, 0, 501, 0, 502, - 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 505, 0, 506, 0, 0, 507, 0, 508, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, - 0, 511, 0, 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, 517, 0, 0, 0, 518, 0, 0, 519, - 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0104[64] = { + 0x448024A121201001ull, 0x2800100002000228ull, 0x0008000129000000ull, 0x2084000400000020ull, + 0x4800000009441084ull, 0x4080000008000000ull, 0x1000000000200420ull, 0x0100800000200000ull, + 0x8800094A04080000ull, 0x0800000000021080ull, 0x8010040200402002ull, 0x000000001081A088ull, + 0x0000028040200000ull, 0x0000000000240800ull, 0x000001001A000000ull, 0x14000001020A1001ull, + 0x000000000900A001ull, 0x0824000000010000ull, 0x0000008001200000ull, 0x0008800000000000ull, + 0x2000002000C01480ull, 0x051404C000880800ull, 0x4800108880450A14ull, 0x0000011020224008ull, + 0xA041090202302100ull, 0x0221102210222204ull, 0x200220000449A022ull, 0x28000080A0000001ull, + 0x4000040500000009ull, 0x00405000000092A1ull, 0x4000113040AA1400ull, 0x025A550200400000ull, + 0x5A550A1504020404ull, 0x0155504534080802ull, 0x1440542160080851ull, 0x10492C0508580202ull, + 0x10005A9048241201ull, 0x8100580000000000ull, 0x04048A0140510402ull, 0x0000000000088810ull, + 0x0000500000004044ull, 0x0000000452410622ull, 0x0000000000000000ull, 0x0000010005000028ull, + 0x0000080180400000ull, 0x0000421018000200ull, 0x2000121200000000ull, 0xA8924A2AAAAAA940ull, + 0x2500260048118032ull, 0x0009808000000500ull, 0x20625400008A8001ull, 0x0000000121000150ull, + 0x0010800040808801ull, 0x801000040082A040ull, 0x014000004A002010ull, 0x00009044080040C2ull, + 0x8188800800202000ull, 0x000A8AA045129400ull, 0x00002C0000029208ull, 0x005002A8080000C0ull, + 0xA840000210141002ull, 0x9154044211294808ull, 0x084842002005002Aull, 0x0020055000000100ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0104[64] = { + 1u, 14u, 21u, 26u, 31u, 40u, 43u, 47u, 50u, 59u, 63u, 70u, 77u, 81u, 84u, 88u, + 96u, 101u, 105u, 108u, 110u, 117u, 127u, 140u, 147u, 159u, 171u, 182u, 188u, 194u, 203u, 215u, + 226u, 243u, 259u, 274u, 289u, 303u, 308u, 320u, 324u, 329u, 339u, 339u, 344u, 348u, 354u, 359u, + 384u, 398u, 404u, 416u, 422u, 429u, 437u, 444u, 453u, 461u, 476u, 484u, 493u, 503u, 520u, 531u, }; void recomp_unit_0104_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0104_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089A4000u; - entry_id = (entry_delta < 16344u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0104[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16344u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0104[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0104[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089A4000; @@ -745,7 +652,6 @@ L_089A4054: L_089A4060: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -773,7 +679,6 @@ L_089A4094: L_089A409C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A40DC; } @@ -815,7 +720,6 @@ L_089A40B4: L_089A40DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A4114; } @@ -825,7 +729,6 @@ L_089A40E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A4114; } @@ -841,7 +744,6 @@ L_089A40F8: AOT_REGCACHE_SYNC_OUT(); return; L_089A410C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4124; } @@ -965,7 +867,6 @@ L_089A41B0: AOT_REGCACHE_SYNC_OUT(); return; L_089A41EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A4274; } @@ -1037,7 +938,6 @@ L_089A41F4: L_089A4260: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089A41B0; } @@ -1045,7 +945,6 @@ L_089A4260: } L_089A426C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4274; } @@ -1146,7 +1045,17 @@ L_089A42CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A4314: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1180,7 +1089,6 @@ L_089A4314: ctx.gpr[18] = (aot_gpr_4 + static_cast(16)); aot_gpr_17 = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_5 | 0u); if (branch_taken) { @@ -1229,9 +1137,7 @@ L_089A4388: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A4408; } @@ -1240,9 +1146,7 @@ L_089A4388: L_089A43C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13544))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A43F4; } @@ -1274,9 +1178,7 @@ L_089A43F4: L_089A4408: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A4458; } @@ -1285,9 +1187,7 @@ L_089A4408: L_089A441C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13544))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A4448; } @@ -1322,7 +1222,6 @@ L_089A4458: L_089A4460: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A44EC; } @@ -1402,7 +1301,6 @@ L_089A446C: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(36), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4614; } @@ -1411,7 +1309,6 @@ L_089A446C: L_089A44EC: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A456C; } @@ -1488,7 +1385,6 @@ L_089A44F8: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(36), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4614; } @@ -1583,7 +1479,6 @@ L_089A45DC: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(40))); goto L_089A45F8; @@ -1791,7 +1686,17 @@ L_089A4654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A46F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-672)); aot_gpr_5 = (17036u << 16u); @@ -2012,7 +1917,6 @@ L_089A4884: L_089A488C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_089A48AC; } @@ -2086,7 +1990,6 @@ L_089A48EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4D2C; } @@ -2111,7 +2014,6 @@ L_089A491C: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A4944; } @@ -2357,7 +2259,6 @@ L_089A4A84: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A4B0C; } @@ -2433,7 +2334,6 @@ L_089A4B0C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4B34; } @@ -2449,7 +2349,6 @@ L_089A4B1C: goto L_089A4B34; L_089A4B34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4D2C; } @@ -2465,7 +2364,6 @@ L_089A4B40: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A4CA4; } @@ -2476,7 +2374,6 @@ L_089A4B5C: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A4CA4; } @@ -2717,7 +2614,6 @@ L_089A4C78: AOT_REGCACHE_SYNC_OUT(); return; L_089A4C9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4D2C; } @@ -3000,7 +2896,6 @@ L_089A4D54: AOT_REGCACHE_SYNC_OUT(); return; L_089A4E64: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A4E70; } @@ -3028,7 +2923,17 @@ L_089A4E70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A4EA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(500), ctx.gpr[19]); @@ -3081,7 +2986,6 @@ L_089A4F30: AOT_REGCACHE_SYNC_OUT(); return; L_089A4F44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4FF0; } @@ -3104,7 +3008,6 @@ L_089A4F4C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A4FF0; } @@ -3117,7 +3020,6 @@ L_089A4F64: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A4FE8; } @@ -3168,7 +3070,6 @@ L_089A4F80: } L_089A4FE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A545C; } @@ -3178,7 +3079,6 @@ L_089A4FF0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(472), aot_gpr_17); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(163))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5140; } @@ -3213,7 +3113,6 @@ L_089A5000: AOT_REGCACHE_SYNC_OUT(); return; L_089A5034: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A506C; } @@ -3226,9 +3125,7 @@ L_089A503C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_13 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A506C; } @@ -3417,7 +3314,6 @@ L_089A506C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_mem.aot_direct_store8(ctx.gpr[22] + static_cast(163), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A5430; } @@ -3610,7 +3506,6 @@ L_089A5260: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[22])); aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(472))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A529C; @@ -3856,7 +3751,6 @@ L_089A53CC: L_089A541C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5430; } @@ -3926,7 +3820,17 @@ L_089A545C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A5494: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3982,7 +3886,6 @@ L_089A552C: aot_gpr_4 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(452), static_cast(ctx.gpr[18])); if (branch_taken) { @@ -4023,7 +3926,6 @@ L_089A5598: L_089A559C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5E94; } @@ -4037,7 +3939,6 @@ L_089A55A8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5E94; } @@ -4045,7 +3946,6 @@ L_089A55A8: } L_089A55C8: aot_gpr_31 = (0x089A55D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A55D0u) goto L_089A55D0; AOT_REGCACHE_SYNC_OUT(); return; L_089A55D0: @@ -4060,7 +3960,6 @@ L_089A55D0: } L_089A55E0: aot_gpr_31 = (0x089A55E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A55E8u) goto L_089A55E8; AOT_REGCACHE_SYNC_OUT(); return; L_089A55E8: @@ -4071,7 +3970,6 @@ L_089A55E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5648; } @@ -4079,7 +3977,6 @@ L_089A55E8: } L_089A5608: aot_gpr_31 = (0x089A5610u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A5610u) goto L_089A5610; AOT_REGCACHE_SYNC_OUT(); return; L_089A5610: @@ -4087,7 +3984,6 @@ L_089A5610: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A5640; } @@ -4095,7 +3991,6 @@ L_089A5610: } L_089A5624: aot_gpr_31 = (0x089A562Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A562Cu) goto L_089A562C; AOT_REGCACHE_SYNC_OUT(); return; L_089A562C: @@ -4103,7 +3998,6 @@ L_089A562C: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A5648; } @@ -4140,7 +4034,6 @@ L_089A5658: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089A569C; } @@ -4150,7 +4043,6 @@ L_089A567C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A569C; } @@ -4160,7 +4052,6 @@ L_089A568C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A5A40; } @@ -4197,7 +4088,6 @@ L_089A56B0: L_089A56EC: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1784))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A58AC; } @@ -4208,7 +4098,6 @@ L_089A56F8: ctx.gpr[2] = (ctx.gpr[2] + static_cast(2228)); ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_089A58AC; } @@ -4242,7 +4131,6 @@ L_089A570C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_089A5744; @@ -4259,9 +4147,7 @@ L_089A5738: } L_089A5744: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A58AC; } @@ -4281,9 +4167,7 @@ L_089A5754: ctx.gpr[2] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[2]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A57A0; } @@ -4294,9 +4178,7 @@ L_089A5774: ctx.gpr[2] = (ctx.gpr[2] + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A58AC; } @@ -4415,9 +4297,7 @@ L_089A57A0: ctx.gpr[2] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(ctx.gpr[2]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A58AC; } @@ -4426,7 +4306,6 @@ L_089A57A0: L_089A5820: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(252))); goto L_089A5854; @@ -4437,9 +4316,7 @@ L_089A5834: ctx.fpr[18] = ctx.fpr[18] / aot_fpr_14; ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13592))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A5884; } @@ -4450,9 +4327,7 @@ L_089A5850: goto L_089A5854; L_089A5854: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A58AC; } @@ -4464,9 +4339,7 @@ L_089A5864: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13592))); { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A58AC; } @@ -4477,9 +4350,7 @@ L_089A5884: ctx.gpr[2] = (ctx.gpr[2] + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A58AC; } @@ -4505,9 +4376,7 @@ L_089A58C0: aot_gpr_4 = (49862u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A5A3C; } @@ -4518,7 +4387,6 @@ L_089A58D8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4533,7 +4401,6 @@ L_089A58F4: L_089A58FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089A59D4; } @@ -4544,9 +4411,7 @@ L_089A5908: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_14)) && ctx.fpr[15] == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A5954; } @@ -4556,7 +4421,6 @@ L_089A5924: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A5954; } @@ -4566,7 +4430,6 @@ L_089A5934: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A5954; } @@ -4583,9 +4446,7 @@ L_089A5954: aot_gpr_4 = (16384u << 16u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(ctx.fpr[16])) && ctx.fpr[15] == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A5984; } @@ -4594,9 +4455,7 @@ L_089A5954: L_089A5970: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1972))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_14)) && ctx.fpr[15] == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A5994; } @@ -4613,7 +4472,6 @@ L_089A5994: aot_gpr_4 = (16448u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[15])) && aot_fpr_14 == ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16294u << 16u); if (branch_taken) { @@ -4684,7 +4542,6 @@ L_089A5A14: goto L_089A5A34; L_089A5A34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A5A40; } @@ -4696,7 +4553,6 @@ L_089A5A3C: L_089A5A40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(161))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5E94; } @@ -4705,7 +4561,6 @@ L_089A5A40: L_089A5A4C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089A5A68; } @@ -4715,7 +4570,6 @@ L_089A5A58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A5E94; } @@ -4856,7 +4710,6 @@ L_089A5B00: AOT_REGCACHE_SYNC_OUT(); return; L_089A5B74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A5BF4; } @@ -4870,7 +4723,6 @@ L_089A5B7C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5BF4; } @@ -4998,7 +4850,6 @@ L_089A5C0C: AOT_REGCACHE_SYNC_OUT(); return; L_089A5C80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A5D24; } @@ -5012,7 +4863,6 @@ L_089A5C88: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5D24; } @@ -5054,7 +4904,6 @@ L_089A5CA8: AOT_REGCACHE_SYNC_OUT(); return; L_089A5CF8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089A5D1C; } @@ -5063,7 +4912,6 @@ L_089A5CF8: L_089A5D00: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); goto L_089A5D14; @@ -5071,7 +4919,6 @@ L_089A5D00: goto L_089A5D14; L_089A5D14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A5D24; } @@ -5165,7 +5012,6 @@ L_089A5D3C: AOT_REGCACHE_SYNC_OUT(); return; L_089A5DB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A5E54; } @@ -5179,7 +5025,6 @@ L_089A5DB8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5E54; } @@ -5221,7 +5066,6 @@ L_089A5DD8: AOT_REGCACHE_SYNC_OUT(); return; L_089A5E28: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089A5E4C; } @@ -5230,7 +5074,6 @@ L_089A5E28: L_089A5E30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(248))); goto L_089A5E44; @@ -5238,7 +5081,6 @@ L_089A5E30: goto L_089A5E44; L_089A5E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A5E54; } @@ -5287,7 +5129,6 @@ L_089A5E90: L_089A5E94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(452))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5EB0; } @@ -5324,7 +5165,17 @@ L_089A5EB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A5EF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); aot_gpr_5 = (16948u << 16u); @@ -5379,12 +5230,10 @@ L_089A5F84: AOT_REGCACHE_SYNC_OUT(); return; L_089A5FA0: aot_gpr_31 = (0x089A5FA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A5FA8u) goto L_089A5FA8; AOT_REGCACHE_SYNC_OUT(); return; L_089A5FA8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A5FD0; } @@ -5392,13 +5241,11 @@ L_089A5FA8: } L_089A5FB0: aot_gpr_31 = (0x089A5FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A5FB8u) goto L_089A5FB8; AOT_REGCACHE_SYNC_OUT(); return; L_089A5FB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(3152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A5FD0; } @@ -5406,7 +5253,6 @@ L_089A5FB8: } L_089A5FC4: aot_gpr_31 = (0x089A5FCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A5FCCu) goto L_089A5FCC; AOT_REGCACHE_SYNC_OUT(); return; L_089A5FCC: @@ -5433,9 +5279,7 @@ L_089A5FE4: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A6028; } @@ -5477,7 +5321,6 @@ L_089A6044: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A6168; } @@ -5518,7 +5361,6 @@ L_089A6090: AOT_REGCACHE_SYNC_OUT(); return; L_089A60A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A60C0; } @@ -5544,12 +5386,10 @@ L_089A60AC: goto L_089A60C0; L_089A60C0: aot_gpr_31 = (0x089A60C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A60C8u) goto L_089A60C8; AOT_REGCACHE_SYNC_OUT(); return; L_089A60C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A60F0; } @@ -5557,13 +5397,11 @@ L_089A60C8: } L_089A60D0: aot_gpr_31 = (0x089A60D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A60D8u) goto L_089A60D8; AOT_REGCACHE_SYNC_OUT(); return; L_089A60D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(3152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A60F0; } @@ -5571,7 +5409,6 @@ L_089A60D8: } L_089A60E4: aot_gpr_31 = (0x089A60ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A60ECu) goto L_089A60EC; AOT_REGCACHE_SYNC_OUT(); return; L_089A60EC: @@ -5599,9 +5436,7 @@ L_089A6104: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A614C; } @@ -5666,7 +5501,6 @@ L_089A6188: aot_gpr_4 = (aot_gpr_29 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089A64B8; } @@ -5694,7 +5528,6 @@ L_089A61B0: } L_089A61B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A61D8; } @@ -5702,7 +5535,6 @@ L_089A61B8: } L_089A61C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A62B0; } @@ -5710,7 +5542,6 @@ L_089A61C0: } L_089A61C8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A6388; } @@ -5718,7 +5549,6 @@ L_089A61C8: } L_089A61D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A63AC; } @@ -5726,7 +5556,6 @@ L_089A61D0: } L_089A61D8: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_089A6210; } @@ -5755,7 +5584,6 @@ L_089A6200: } L_089A6210: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089A62A8; } @@ -5766,7 +5594,6 @@ L_089A6218: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A62A8; } @@ -5780,7 +5607,6 @@ L_089A622C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A6278; } @@ -5804,7 +5630,6 @@ L_089A6274: goto L_089A6278; L_089A6278: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089A6294; } @@ -5826,7 +5651,6 @@ L_089A6294: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A622C; } @@ -5834,7 +5658,6 @@ L_089A6294: } L_089A62A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A63AC; } @@ -5842,7 +5665,6 @@ L_089A62A8: } L_089A62B0: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_089A62E8; } @@ -5871,7 +5693,6 @@ L_089A62D8: } L_089A62E8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089A6380; } @@ -5882,7 +5703,6 @@ L_089A62F0: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A6380; } @@ -5896,7 +5716,6 @@ L_089A6304: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A6350; } @@ -5920,7 +5739,6 @@ L_089A634C: goto L_089A6350; L_089A6350: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089A636C; } @@ -5942,7 +5760,6 @@ L_089A636C: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A6304; } @@ -5950,7 +5767,6 @@ L_089A636C: } L_089A6380: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A63AC; } @@ -5972,7 +5788,6 @@ L_089A63A8: goto L_089A63AC; L_089A63AC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089A64AC; } @@ -5981,7 +5796,6 @@ L_089A63AC: L_089A63B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13548))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A63D8; } @@ -5990,7 +5804,6 @@ L_089A63B4: L_089A63C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13548))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A63D8; } @@ -6028,9 +5841,7 @@ L_089A6400: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A6430; } @@ -6049,9 +5860,7 @@ L_089A6430: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A6454; } @@ -6070,9 +5879,7 @@ L_089A6454: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A6478; } @@ -6091,9 +5898,7 @@ L_089A6478: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A649C; } @@ -6114,7 +5919,6 @@ L_089A649C: goto L_089A64A4; L_089A64A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A64B0; } @@ -6331,7 +6135,6 @@ L_089A64F0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A65B0; } @@ -6376,7 +6179,6 @@ L_089A65E0: AOT_REGCACHE_SYNC_OUT(); return; L_089A65FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A66AC; } @@ -6391,7 +6193,6 @@ L_089A6604: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A66A4; } @@ -6418,7 +6219,6 @@ L_089A6640: AOT_REGCACHE_SYNC_OUT(); return; L_089A6650: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A6680; } @@ -6437,7 +6237,6 @@ L_089A6658: AOT_REGCACHE_SYNC_OUT(); return; L_089A6678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A66AC; } @@ -6463,7 +6262,6 @@ L_089A6680: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A66AC; } @@ -6481,7 +6279,6 @@ L_089A66AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A672C; } @@ -6490,7 +6287,6 @@ L_089A66AC: L_089A66BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13548))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A672C; } @@ -6515,7 +6311,6 @@ L_089A66E8: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -6540,7 +6335,6 @@ L_089A672C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A6978; } @@ -6550,7 +6344,6 @@ L_089A673C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A6978; } @@ -6698,7 +6491,6 @@ L_089A674C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A6818; } @@ -6708,7 +6500,6 @@ L_089A6808: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A6838; } @@ -6800,7 +6591,6 @@ L_089A6838: AOT_REGCACHE_SYNC_OUT(); return; L_089A68B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A6970; } @@ -6847,7 +6637,6 @@ L_089A68B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A6904u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A6904u) goto L_089A6904; AOT_REGCACHE_SYNC_OUT(); return; L_089A6904: @@ -6862,7 +6651,6 @@ L_089A6914: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A6940; } @@ -6908,7 +6696,6 @@ L_089A6964: goto L_089A6970; L_089A6970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A6B60; } @@ -6918,7 +6705,6 @@ L_089A6978: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13552))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A6B60; } @@ -7223,7 +7009,6 @@ L_089A6988: AOT_REGCACHE_SYNC_OUT(); return; L_089A6B0C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A6B60; } @@ -7270,12 +7055,10 @@ L_089A6B14: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A6B60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A6B60u) goto L_089A6B60; AOT_REGCACHE_SYNC_OUT(); return; L_089A6B60: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089A6C58; } @@ -7480,7 +7263,6 @@ L_089A6BA0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A6C7C; } @@ -7530,7 +7312,17 @@ L_089A6C80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A6CAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7587,7 +7379,6 @@ L_089A6D24: ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.gpr[20] = (2236u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (ctx.gpr[20] + static_cast(32304)); if (branch_taken) { @@ -7606,7 +7397,6 @@ L_089A6D70: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089A6EB0; } @@ -7617,7 +7407,6 @@ L_089A6D90: aot_gpr_5 = (0u + static_cast(-995)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A6DB8; } @@ -7628,7 +7417,6 @@ L_089A6DA4: aot_gpr_5 = (0u | 275u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A6EB0; } @@ -7766,9 +7554,7 @@ L_089A6DB8: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A6EB0; } @@ -7783,7 +7569,6 @@ L_089A6E84: L_089A6E90: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7853,9 +7638,7 @@ L_089A6EF4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[28] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A6F34; } @@ -7863,7 +7646,6 @@ L_089A6EF4: } L_089A6F18: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089A6F34; } @@ -7872,7 +7654,6 @@ L_089A6F18: L_089A6F20: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2092))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A6F34; } @@ -7894,7 +7675,6 @@ L_089A6F3C: AOT_REGCACHE_SYNC_OUT(); return; L_089A6F44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A6FAC; } @@ -7912,7 +7692,6 @@ L_089A6F54: AOT_REGCACHE_SYNC_OUT(); return; L_089A6F5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A6FAC; } @@ -7930,7 +7709,6 @@ L_089A6F6C: AOT_REGCACHE_SYNC_OUT(); return; L_089A6F74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A6FAC; } @@ -7948,7 +7726,6 @@ L_089A6F84: AOT_REGCACHE_SYNC_OUT(); return; L_089A6F8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A6FAC; } @@ -7958,7 +7735,6 @@ L_089A6F94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A6FAC; } @@ -7971,7 +7747,6 @@ L_089A6FA4: L_089A6FAC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(162))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A6FDC; } @@ -7980,7 +7755,6 @@ L_089A6FAC: L_089A6FB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2078))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A6FDC; } @@ -7989,7 +7763,6 @@ L_089A6FB8: L_089A6FC4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(88))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A6FDC; } @@ -7998,7 +7771,6 @@ L_089A6FC4: L_089A6FD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2057))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A6FF4; } @@ -8039,7 +7811,6 @@ L_089A6FFC: L_089A7004: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2078))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089A7040; } @@ -8058,7 +7829,6 @@ L_089A7014: ctx.gpr[6] = (ctx.gpr[20] + static_cast(112)); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[6]); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_089A7040; } @@ -8071,7 +7841,6 @@ L_089A7040: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(162))); aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A71C0; } @@ -8090,7 +7859,6 @@ L_089A7050: L_089A706C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(88))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089A70A8; } @@ -8107,7 +7875,6 @@ L_089A7078: aot_gpr_5 = (ctx.gpr[20] + static_cast(112)); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089A70A8; } @@ -8119,7 +7886,6 @@ L_089A70A4: L_089A70A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2057))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089A70E8; } @@ -8136,7 +7902,6 @@ L_089A70B4: aot_gpr_5 = (ctx.gpr[20] + static_cast(112)); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089A70E8; } @@ -8149,7 +7914,6 @@ L_089A70E0: L_089A70E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2078))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7128; } @@ -8166,7 +7930,6 @@ L_089A70F4: aot_gpr_5 = (ctx.gpr[20] + static_cast(112)); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089A7128; } @@ -8218,9 +7981,7 @@ L_089A719C: aot_gpr_4 = (aot_gpr_4 | 64053u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A71C0; } @@ -8254,7 +8015,17 @@ L_089A71CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A7200: aot_gpr_29 = (aot_gpr_29 + static_cast(-640)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -8265,7 +8036,6 @@ L_089A7200: AOT_REGCACHE_SYNC_OUT(); return; L_089A723C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A725C; } @@ -8273,14 +8043,12 @@ L_089A723C: } L_089A7244: aot_gpr_31 = (0x089A724Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A724Cu) goto L_089A724C; AOT_REGCACHE_SYNC_OUT(); return; L_089A724C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A72B0; } @@ -8360,7 +8128,6 @@ L_089A72A8: } L_089A72B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7854; } @@ -8377,7 +8144,6 @@ L_089A72C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(0)))))); ctx.gpr[6] = (0u | 3u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_089A742C; } @@ -8393,7 +8159,6 @@ L_089A72D8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089A742C; } @@ -8469,7 +8234,6 @@ L_089A7320: L_089A7360: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8657,7 +8421,6 @@ L_089A7478: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A74D0; } @@ -8668,7 +8431,6 @@ L_089A74BC: ctx.gpr[20] = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089A7534; } @@ -8735,7 +8497,6 @@ L_089A7518: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7718; } @@ -8748,7 +8509,6 @@ L_089A7534: AOT_REGCACHE_SYNC_OUT(); return; L_089A753C: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089A7664; } @@ -8855,7 +8615,6 @@ L_089A75D0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089A75FC; @@ -8936,7 +8695,6 @@ L_089A7634: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7718; } @@ -8950,7 +8708,6 @@ L_089A7664: L_089A766C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089A76E0; } @@ -9029,7 +8786,6 @@ L_089A7678: AOT_REGCACHE_SYNC_OUT(); return; L_089A76D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7718; } @@ -9097,7 +8853,6 @@ L_089A771C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7854; } @@ -9154,7 +8909,6 @@ L_089A776C: aot_fpr_20 = std::bit_cast(0u); ctx.gpr[20] = (2236u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (ctx.gpr[20] + static_cast(32304)); if (branch_taken) { @@ -9329,7 +9083,17 @@ L_089A7854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A788C: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); @@ -9359,7 +9123,6 @@ L_089A78CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(0)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A7CFC; } @@ -9375,7 +9138,6 @@ L_089A78E0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7CFC; } @@ -9409,7 +9171,6 @@ L_089A78FC: goto L_089A7928; L_089A7928: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089A7950; } @@ -9426,7 +9187,6 @@ L_089A7930: } L_089A793C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7950; } @@ -9445,7 +9205,6 @@ L_089A7950: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(0)))))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A7968; } @@ -9463,7 +9222,6 @@ L_089A7968: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(0)))))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A79C4; } @@ -9481,7 +9239,6 @@ L_089A7978: AOT_REGCACHE_SYNC_OUT(); return; L_089A7994: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089A79BC; } @@ -9489,12 +9246,10 @@ L_089A7994: } L_089A799C: aot_gpr_31 = (0x089A79A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 522u, 0x08AAE934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A79A4u) goto L_089A79A4; AOT_REGCACHE_SYNC_OUT(); return; L_089A79A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089A79BC; } @@ -9508,7 +9263,6 @@ L_089A79AC: goto L_089A79BC; L_089A79BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A79CC; } @@ -9564,7 +9318,6 @@ L_089A7A0C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -9586,7 +9339,6 @@ L_089A7A30: goto L_089A7A3C; L_089A7A3C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089A7B18; } @@ -9632,7 +9384,6 @@ L_089A7AA8: goto L_089A7AAC; L_089A7AAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7B18; } @@ -9746,7 +9497,6 @@ L_089A7B6C: goto L_089A7B8C; L_089A7B8C: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089A7BD8; } @@ -9754,7 +9504,6 @@ L_089A7B8C: } L_089A7B94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7C04; } @@ -9762,7 +9511,6 @@ L_089A7B94: } L_089A7B9C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7B94; } @@ -9790,12 +9538,10 @@ L_089A7BA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A7BD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A7BD0u) goto L_089A7BD0; AOT_REGCACHE_SYNC_OUT(); return; L_089A7BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7C04; } @@ -9823,7 +9569,6 @@ L_089A7BD8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A7C04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A7C04u) goto L_089A7C04; AOT_REGCACHE_SYNC_OUT(); return; L_089A7C04: @@ -9855,7 +9600,6 @@ L_089A7C30: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(408))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); goto L_089A7C50; @@ -9875,7 +9619,6 @@ L_089A7C50: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_089A7C70; @@ -9884,7 +9627,6 @@ L_089A7C50: L_089A7C70: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(40))); goto L_089A7C84; @@ -9961,7 +9703,6 @@ L_089A7CEC: AOT_REGCACHE_SYNC_OUT(); return; L_089A7CF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 5u, 0x089A8074u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9971,7 +9712,6 @@ L_089A7CFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(0)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 5u, 0x089A8074u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9985,7 +9725,6 @@ L_089A7D0C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 5u, 0x089A8074u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10000,7 +9739,6 @@ L_089A7D2C: goto L_089A7D38; L_089A7D38: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089A7D60; } @@ -10017,7 +9755,6 @@ L_089A7D40: } L_089A7D4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7D60; } @@ -10044,7 +9781,6 @@ L_089A7D70: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A7D98; } @@ -10055,7 +9791,6 @@ L_089A7D84: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A7ECC; } @@ -10065,7 +9800,6 @@ L_089A7D98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7EB8; } @@ -10112,7 +9846,6 @@ L_089A7DF0: goto L_089A7DFC; L_089A7DFC: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089A7E48; } @@ -10120,7 +9853,6 @@ L_089A7DFC: } L_089A7E04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7E74; } @@ -10128,7 +9860,6 @@ L_089A7E04: } L_089A7E0C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7E04; } @@ -10156,12 +9887,10 @@ L_089A7E14: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A7E40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A7E40u) goto L_089A7E40; AOT_REGCACHE_SYNC_OUT(); return; L_089A7E40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7E74; } @@ -10189,7 +9918,6 @@ L_089A7E48: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A7E74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A7E74u) goto L_089A7E74; AOT_REGCACHE_SYNC_OUT(); return; L_089A7E74: @@ -10234,7 +9962,6 @@ L_089A7EA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A7ECC; } @@ -10250,7 +9977,6 @@ L_089A7EB8: L_089A7ECC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_089A7F20; } @@ -10261,7 +9987,6 @@ L_089A7ED8: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A7F20; } @@ -10291,7 +10016,6 @@ L_089A7EEC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A7F20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A7F20u) goto L_089A7F20; AOT_REGCACHE_SYNC_OUT(); return; L_089A7F20: @@ -10376,7 +10100,6 @@ L_089A7F20: } L_089A7F90: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_089A7FD4; } @@ -10384,7 +10107,6 @@ L_089A7F90: } L_089A7F98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 2u, 0x089A8008u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10392,7 +10114,6 @@ L_089A7F98: } L_089A7FA0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A7F98; } @@ -10439,7 +10160,6 @@ L_089A7FA8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0105_entry, 105u, 2u, 0x089A8008u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0105.cpp b/profiles/vcs/generated/generated_unit_0105.cpp index 5971e2a..88ff52c 100644 --- a/profiles/vcs/generated/generated_unit_0105.cpp +++ b/profiles/vcs/generated/generated_unit_0105.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0105[4093] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, - 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, - 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 41, - 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, 0, 55, 0, 0, 0, 56, 0, 57, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 59, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 65, 66, 0, 0, 67, 0, - 68, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, - 80, 0, 0, 81, 0, 82, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 88, 0, 89, 0, 0, - 90, 0, 0, 91, 0, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 94, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, - 0, 99, 0, 100, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 105, 0, 106, 0, 0, 0, 107, 0, 108, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 113, 0, 0, 0, 114, 0, 115, 0, 116, 117, 0, 118, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, - 123, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 129, - 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, - 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 145, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, - 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 159, - 0, 160, 0, 0, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, 0, 165, 0, 166, 0, 0, 167, 0, 0, 168, 0, 0, 0, 169, 0, 170, 0, 171, - 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 181, 0, 182, 0, - 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 185, 0, 0, 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, - 190, 0, 0, 0, 0, 0, 0, 191, 0, 192, 193, 194, 0, 195, 0, 196, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 205, 0, - 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 218, - 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 224, - 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 227, 0, 0, 0, 0, 0, 0, - 0, 228, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, - 234, 0, 235, 0, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 244, - 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 249, 250, 251, 0, 252, 0, 253, 0, 254, 0, 255, - 0, 256, 0, 0, 257, 0, 0, 0, 258, 0, 0, 259, 0, 0, 0, 0, 260, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 0, 0, 0, 266, 0, - 0, 0, 267, 0, 268, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 272, 0, 273, 0, 0, 0, 0, 0, 274, 0, 275, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 280, 0, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, 285, 0, 286, - 0, 0, 287, 0, 0, 288, 0, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, - 296, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 299, 0, 300, 0, 0, 0, 0, 0, 301, 0, 302, 0, 303, 0, 304, 0, 0, 0, - 305, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 312, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 316, 317, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 0, 0, 0, - 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 332, 0, 333, 0, - 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, - 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, - 0, 0, 344, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, - 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, - 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 0, 369, 0, 370, 0, 0, 371, 0, 372, 0, 0, 0, 0, - 373, 0, 374, 0, 0, 375, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 380, 0, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 0, 0, - 390, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 392, 0, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, - 400, 401, 402, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 409, 0, 0, 0, 410, 0, - 0, 411, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, - 0, 0, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, 0, 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 425, 0, 0, 0, 426, - 0, 0, 427, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 431, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, - 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, - 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 442, 0, 443, 0, 444, 0, 0, 445, 0, 446, 0, - 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 453, 0, 454, 0, 455, 0, 0, - 0, 456, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 461, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 464, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, - 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 476, 0, 0, 477, 0, 478, 0, 0, 0, 479, 0, 0, 480, 0, 481, 0, 0, 0, 0, 482, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 0, 0, 487, 0, 0, 0, 488, - 0, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 493, 0, - 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 500, 0, 501, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 506, 0, - 0, 507, 0, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 0, 0, 0, 0, - 0, 514, 0, 515, 0, 0, 516, 0, 0, 517, 0, 0, 518, 0, 0, 519, 0, 520, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 523, 0, 0, 524, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 529, - 0, 0, 530, 0, 0, 531, 0, 532, 0, 0, 533, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 537, 0, - 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 541, 0, 0, 542, 0, 0, 543, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, - 546, 0, 547, 0, 548, 0, 549, 0, 0, 550, 0, 551, 0, 552, 0, 553, 0, 0, 554, 0, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 558, 0, - 559, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, - 0, 565, 0, 566, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 0, 0, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 0, 0, 577, - 0, 578, 0, 579, 0, 580, 0, 0, 581, 0, 582, 0, 583, 0, 584, 0, 0, 585, 0, 586, 0, 0, 587, 0, 588, 0, 0, 589, 0, 590, 0, 591, - 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, - 0, 608, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, 615, - 0, 616, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 622, 0, 0, 0, 0, - 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 626, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 630, 0, 0, 0, 631, 632, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 635, - 636, 0, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 640, 641, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, - 0, 644, 0, 645, 0, 646, 0, 0, 0, 647, 0, 648, 0, 0, 649, 0, 650, 0, 0, 651, 652, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 656, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, - 0, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 663, 0, 0, 664, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 666, 0, 0, 667, 0, 0, 668, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 671, 0, 672, 0, - 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, 678, 0, 679, 0, 0, - 0, 680, 0, 681, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, - 0, 0, 687, 688, 0, 689, 0, 0, 0, 0, 0, 690, 0, 0, 0, 691, 0, 0, 0, 692, 693, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 696, - 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 0, 0, 699, 700, 0, 701, 0, 0, 0, 702, 703, 0, 704, 0, 0, 0, 0, 0, 705, - 0, 0, 0, 0, 706, 707, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 711, 0, 0, 712, - 0, 0, 713, 0, 0, 714, 0, 715, 0, 716, 0, 717, 0, 0, 0, 0, 718, 0, 0, 719, 0, 0, 720, 0, 721, 0, 0, 0, 0, 0, 722, 0, - 0, 723, 0, 0, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 728, 0, 0, - 0, 729, 0, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 732, 0, 0, 733, 0, 0, 0, 734, 0, 0, 0, 735, 0, 0, 0, 736, 0, 737, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 739, 0, 740, 741, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 743, 0, 0, 744, 0, 0, 0, 745, 0, 746, 0, 0, 0, 747, 0, 0, 748, 0, 0, 749, 0, 0, 0, 750, 0, 0, 751, 0, 0, 752, 0, - 0, 0, 753, 0, 0, 754, 0, 0, 755, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 757, 0, 0, 758, 759, 0, 0, 0, 0, 0, 760, 0, 0, - 761, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 764, 765, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, - 0, 768, 0, 0, 769, 0, 770, 0, 0, 0, 771, 0, 0, 0, 0, 772, 0, 773, 0, 0, 774, 0, 0, 0, 0, 775, 0, 776, 0, 0, 0, 0, - 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 779, 0, 780, 0, 0, 781, 0, 0, 0, 0, 782, 0, 783, 0, 784, 0, 785, 0, 0, 0, - 786, 0, 787, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 790, 0, 791, 0, 0, 0, 792, 0, 793, 0, - 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 0, 796, 0, 797, 0, 0, 0, 798, 0, 799, 0, 0, 0, 0, 0, - 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 0, 802, 0, 803, 0, 0, 0, 804, 0, 805, 0, 0, 0, 0, 0, 0, 0, 806, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 808, 0, 809, 0, 0, 0, 810, 0, 811, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 816, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, 0, 0, 0, 819, 0, 0, 0, 820, 0, 0, 0, 821, 0, 822, 0, 0, 0, - 823, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 826, 0, 0, 827, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, - 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 831, 0, 0, 832, 0, 0, 0, 833, 0, 0, 834, 0, 0, 0, 835, 0, 836, 0, - 0, 0, 837, 0, 0, 0, 0, 838, 0, 0, 0, 839, 0, 0, 0, 840, 0, 841, 0, 0, 0, 842, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, - 844, 0, 0, 0, 845, 0, 0, 846, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 849, 0, 0, 850, 0, 0, 851, 0, 0, 0, 852, 0, 0, 853, 0, 0, 0, 854, 0, 855, 0, 0, 0, 856, 0, 0, 0, 0, 857, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0105[64] = { + 0x2000002020012005ull, 0x2000048084000022ull, 0x00002504210A4022ull, 0x0421000808000000ull, + 0x0000000002000000ull, 0x4001000048000020ull, 0x00940012A4000005ull, 0x8A290858000000A0ull, + 0x040102014C2809A0ull, 0x0008000108000000ull, 0x2008000401200000ull, 0x2412890929110469ull, + 0x2D449080A8A2424Aull, 0x9401011110808800ull, 0x00A5020008880002ull, 0x0000009080022200ull, + 0x8115504412004054ull, 0x54402AAAA8928AA2ull, 0x2042AE8140222444ull, 0x1089148148494000ull, + 0x85082040A0888000ull, 0x1400422202400100ull, 0xAAE8140288842AA5ull, 0x1282A15442AB0912ull, + 0x09145124AA522810ull, 0x0080550115415201ull, 0x1090200205261524ull, 0x5220000000888800ull, + 0x0280108880000080ull, 0x0100001490002000ull, 0x222400080000A480ull, 0x0004000A41082208ull, + 0x000204A50A511081ull, 0x04804A1009450000ull, 0x1111000010052201ull, 0x8220011245288817ull, + 0x4025490488888AA8ull, 0x52A0400291000101ull, 0x0045228A2A222814ull, 0x8522910855540211ull, + 0x4400089088844400ull, 0x4402048005488520ull, 0x0092924A05022442ull, 0x520024A490208148ull, + 0x5504AA5510A4A804ull, 0x8AA8554A24041011ull, 0xAAAAAAAAA94A552Aull, 0x0A08150290415022ull, + 0x8A18A00080042502ull, 0x14194A2A40434221ull, 0x0082508804082440ull, 0x2910083050204124ull, + 0x8458882C8409080Aull, 0x90A0043082C58900ull, 0x2201021241490AA4ull, 0x0004350051112222ull, + 0x20C8212449124512ull, 0x0A1284520805A011ull, 0x5150040515425021ull, 0x4051500405150040ull, + 0x0824104004051500ull, 0x0104880514442000ull, 0x00A2888451224801ull, 0x108A244900202091ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0105[64] = { + 1u, 8u, 15u, 26u, 31u, 32u, 37u, 47u, 59u, 72u, 75u, 80u, 99u, 119u, 130u, 139u, + 145u, 160u, 183u, 200u, 214u, 225u, 234u, 256u, 277u, 296u, 311u, 326u, 334u, 341u, 347u, 356u, + 365u, 379u, 390u, 400u, 417u, 435u, 447u, 464u, 483u, 494u, 507u, 523u, 538u, 559u, 578u, 608u, + 623u, 636u, 655u, 666u, 680u, 697u, 713u, 729u, 743u, 761u, 777u, 794u, 807u, 818u, 829u, 844u, }; void recomp_unit_0105_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0105_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089A8000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0105[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0105[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0105[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089A8000; @@ -1072,7 +979,6 @@ L_089A8008: L_089A8034: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_089A8074; } @@ -1102,7 +1008,6 @@ L_089A8040: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089A8074u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 464u, 0x08A931D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089A8074u) goto L_089A8074; AOT_REGCACHE_SYNC_OUT(); return; L_089A8074: @@ -1120,7 +1025,17 @@ L_089A8074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8094: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -1159,7 +1074,6 @@ L_089A80F4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[6] = (0u | 1u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_089A8114; } @@ -1169,7 +1083,6 @@ L_089A8104: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[6] = (0u | 2u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_089A82A8; } @@ -1202,7 +1115,6 @@ L_089A8114: aot_gpr_5 = (aot_gpr_5 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(48)); if (branch_taken) { @@ -1213,7 +1125,6 @@ L_089A8114: L_089A8168: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089A817C; @@ -1236,9 +1147,7 @@ L_089A817C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A81A8; } @@ -1284,7 +1193,6 @@ L_089A81A8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_089A81F4; @@ -1292,9 +1200,7 @@ L_089A81A8: goto L_089A81F4; L_089A81F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A8214; } @@ -1315,7 +1221,6 @@ L_089A8204: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A824C; } @@ -1376,9 +1281,7 @@ L_089A8244: L_089A824C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A8288; } @@ -1387,9 +1290,7 @@ L_089A824C: L_089A8260: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A8288; } @@ -1398,9 +1299,7 @@ L_089A8260: L_089A8274: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A82A0; } @@ -1426,7 +1325,6 @@ L_089A8288: goto L_089A82A0; L_089A82A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A838C; } @@ -1435,7 +1333,6 @@ L_089A82A0: L_089A82A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24920))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A838C; } @@ -1610,9 +1507,7 @@ L_089A838C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A83E8; } @@ -1621,9 +1516,7 @@ L_089A838C: L_089A83C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A83E8; } @@ -1746,7 +1639,17 @@ L_089A83E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8464: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1914,7 +1817,6 @@ L_089A85C0: AOT_REGCACHE_SYNC_OUT(); return; L_089A85F8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A8608; } @@ -1922,7 +1824,6 @@ L_089A85F8: } L_089A8600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8684; } @@ -1980,7 +1881,6 @@ L_089A8608: L_089A8668: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089A867C; } @@ -1988,7 +1888,6 @@ L_089A8668: } L_089A8674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8684; } @@ -1996,7 +1895,6 @@ L_089A8674: } L_089A867C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A85C0; } @@ -2041,7 +1939,6 @@ L_089A8690: AOT_REGCACHE_SYNC_OUT(); return; L_089A86C8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089A86DC; } @@ -2140,9 +2037,7 @@ L_089A871C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A8790; } @@ -2153,7 +2048,6 @@ L_089A878C: goto L_089A8790; L_089A8790: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089A87D4; } @@ -2162,9 +2056,7 @@ L_089A8790: L_089A8798: { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A87C0; } @@ -2189,7 +2081,6 @@ L_089A87C0: AOT_REGCACHE_SYNC_OUT(); return; L_089A87CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A87E4; } @@ -2207,7 +2098,6 @@ L_089A87D4: } L_089A87E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A856C; } @@ -2233,7 +2123,6 @@ L_089A87FC: AOT_REGCACHE_SYNC_OUT(); return; L_089A8814: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089A8820; } @@ -2275,7 +2164,6 @@ L_089A882C: AOT_REGCACHE_SYNC_OUT(); return; L_089A884C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A886C; } @@ -2306,7 +2194,6 @@ L_089A8868: L_089A886C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(468))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A88E8; } @@ -2314,7 +2201,6 @@ L_089A886C: } L_089A8878: { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089A88A4; } @@ -2359,7 +2245,6 @@ L_089A8880: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A88C0; } @@ -2549,9 +2434,7 @@ L_089A88E8: aot_gpr_4 = (16640u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A8980; } @@ -2612,7 +2495,17 @@ L_089A8980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A89CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (48896u << 16u); @@ -2655,7 +2548,17 @@ L_089A8A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8A60: { const std::uint32_t vfpu_address = ctx.gpr[6] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2709,11 +2612,20 @@ L_089A8A60: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8A88: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -2755,11 +2667,20 @@ L_089A8A88: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8ACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -2775,7 +2696,6 @@ L_089A8ACC: L_089A8AF4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089A8B0C; } @@ -2784,7 +2704,6 @@ L_089A8AF4: L_089A8B00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089A8B14; } @@ -2805,7 +2724,6 @@ L_089A8B18: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-8)); ctx.gpr[6] = (ctx.gpr[18] < static_cast(13) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_089A8C5C; } @@ -2817,11 +2735,20 @@ L_089A8B28: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[18]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4504))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8B40: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); @@ -2849,7 +2776,6 @@ L_089A8B60: goto L_089A8B6C; L_089A8B6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8C6C; } @@ -2895,7 +2821,6 @@ L_089A8BAC: goto L_089A8BBC; L_089A8BBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8C6C; } @@ -2936,7 +2861,6 @@ L_089A8BF4: goto L_089A8C04; L_089A8C04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8C6C; } @@ -2982,7 +2906,6 @@ L_089A8C44: goto L_089A8C54; L_089A8C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8C6C; } @@ -2995,7 +2918,6 @@ L_089A8C5C: goto L_089A8C6C; L_089A8C6C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A8C7C; } @@ -3020,7 +2942,17 @@ L_089A8C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8C9C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[9] = (0u | 0u); @@ -3035,7 +2967,6 @@ L_089A8C9C: L_089A8CB0: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(16))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_089A8CC8; } @@ -3044,7 +2975,6 @@ L_089A8CB0: L_089A8CBC: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(20))); { const bool branch_taken = ctx.gpr[10] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_089A8CE0; } @@ -3062,7 +2992,6 @@ L_089A8CC8: } L_089A8CD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A8CE8; } @@ -3081,11 +3010,20 @@ L_089A8CE8: goto L_089A8CEC; L_089A8CEC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A8CF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(292), ctx.gpr[17]); @@ -3119,7 +3057,6 @@ L_089A8D3C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A8D70; } @@ -3578,7 +3515,6 @@ L_089A8F7C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089A8F9C; } @@ -3679,9 +3615,7 @@ L_089A8F9C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A9010; } @@ -3718,7 +3652,17 @@ L_089A9018: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9038: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -3738,7 +3682,6 @@ L_089A9038: L_089A9064: ctx.gpr[18] = (0u | 2u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089A90C0; } @@ -3748,9 +3691,7 @@ L_089A9070: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A90B8; } @@ -3774,7 +3715,6 @@ L_089A9098: goto L_089A90B0; L_089A90B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A9104; } @@ -3782,7 +3722,6 @@ L_089A90B0: } L_089A90B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -3790,7 +3729,6 @@ L_089A90B8: } L_089A90C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -3798,7 +3736,6 @@ L_089A90C0: } L_089A90C8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A9104; } @@ -3808,7 +3745,6 @@ L_089A90D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A90FC; } @@ -3821,7 +3757,6 @@ L_089A90E0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9104; } @@ -3835,7 +3770,6 @@ L_089A9104: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A911C; } @@ -3852,7 +3786,6 @@ L_089A911C: AOT_REGCACHE_SYNC_OUT(); return; L_089A9124: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A916C; } @@ -3870,7 +3803,6 @@ L_089A912C: } L_089A913C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A916C; } @@ -3879,7 +3811,6 @@ L_089A913C: L_089A9144: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089A916C; } @@ -3888,7 +3819,6 @@ L_089A9144: L_089A9150: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089A919C; } @@ -3898,7 +3828,6 @@ L_089A915C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A919C; } @@ -3911,7 +3840,6 @@ L_089A916C: AOT_REGCACHE_SYNC_OUT(); return; L_089A9174: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A9194; } @@ -3924,7 +3852,6 @@ L_089A917C: AOT_REGCACHE_SYNC_OUT(); return; L_089A9184: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A91A4; } @@ -3932,7 +3859,6 @@ L_089A9184: } L_089A918C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A91D8; } @@ -3940,7 +3866,6 @@ L_089A918C: } L_089A9194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -3948,7 +3873,6 @@ L_089A9194: } L_089A919C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -3961,7 +3885,6 @@ L_089A91A4: AOT_REGCACHE_SYNC_OUT(); return; L_089A91AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A91D8; } @@ -3976,7 +3899,6 @@ L_089A91B4: aot_gpr_5 = (aot_gpr_5 & 7u); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089A91F0; } @@ -3992,7 +3914,6 @@ L_089A91D8: goto L_089A91E8; L_089A91E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4000,7 +3921,6 @@ L_089A91E8: } L_089A91F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4010,7 +3930,6 @@ L_089A91F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4020,7 +3939,6 @@ L_089A9208: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(564))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4030,7 +3948,6 @@ L_089A9218: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4059,7 +3976,6 @@ L_089A9244: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4113,7 +4029,6 @@ L_089A92A8: goto L_089A92AC; L_089A92AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4126,7 +4041,6 @@ L_089A92B4: AOT_REGCACHE_SYNC_OUT(); return; L_089A92BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A92D8; } @@ -4153,7 +4067,17 @@ L_089A92D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A92F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -4217,7 +4141,6 @@ L_089A9380: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089A93B0; } @@ -4231,7 +4154,6 @@ L_089A939C: AOT_REGCACHE_SYNC_OUT(); return; L_089A93A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A93DC; } @@ -4241,7 +4163,6 @@ L_089A93B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(680))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089A93DC; } @@ -4250,7 +4171,6 @@ L_089A93B0: L_089A93C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A93DC; } @@ -4331,7 +4251,6 @@ L_089A93F0: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(2072), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089A945C; } @@ -4341,7 +4260,6 @@ L_089A943C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A945C; } @@ -4365,7 +4283,6 @@ L_089A945C: goto L_089AAC08; L_089A9474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A94FC; } @@ -4376,9 +4293,7 @@ L_089A947C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A9498; } @@ -4439,7 +4354,17 @@ L_089A94FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9520: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4460,7 +4385,6 @@ L_089A9520: L_089A9558: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A95A4; } @@ -4474,7 +4398,6 @@ L_089A9564: ctx.gpr[6] = (ctx.gpr[6] < static_cast(1) ? 1u : 0u); ctx.gpr[6] = (ctx.gpr[6] & 255u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_089A95A4; } @@ -4505,7 +4428,17 @@ L_089A95A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A95B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -4521,7 +4454,6 @@ L_089A95B8: AOT_REGCACHE_SYNC_OUT(); return; L_089A95E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A961C; } @@ -4547,7 +4479,6 @@ L_089A9608: goto L_089A9614; L_089A9614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A97E4; } @@ -4565,7 +4496,6 @@ L_089A9624: AOT_REGCACHE_SYNC_OUT(); return; L_089A962C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A97F0; } @@ -4574,9 +4504,7 @@ L_089A962C: L_089A9634: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A97E4; } @@ -4587,7 +4515,6 @@ L_089A9648: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089A97E4; } @@ -4597,7 +4524,6 @@ L_089A965C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(564))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089A97E4; } @@ -4607,7 +4533,6 @@ L_089A966C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_5 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089A97E4; } @@ -4615,7 +4540,6 @@ L_089A966C: } L_089A967C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A96E4; } @@ -4669,7 +4593,6 @@ L_089A96D8: goto L_089A96DC; L_089A96DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A97E4; } @@ -4682,7 +4605,6 @@ L_089A96E4: AOT_REGCACHE_SYNC_OUT(); return; L_089A96EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089A96FC; } @@ -4690,7 +4612,6 @@ L_089A96EC: } L_089A96F4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089A97E4; } @@ -4704,7 +4625,6 @@ L_089A96FC: L_089A9704: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089A97C4; } @@ -4732,7 +4652,6 @@ L_089A972C: ctx.gpr[6] = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[6]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A97B4; } @@ -4772,7 +4691,6 @@ L_089A9764: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A97B4; } @@ -4811,7 +4729,6 @@ L_089A97A0: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A97C4; } @@ -4823,7 +4740,6 @@ L_089A97B4: goto L_089AA5B8; L_089A97BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A97F0; } @@ -4840,7 +4756,6 @@ L_089A97C4: AOT_REGCACHE_SYNC_OUT(); return; L_089A97DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A97F0; } @@ -4867,7 +4782,17 @@ L_089A97F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9810: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4880,7 +4805,6 @@ L_089A9810: AOT_REGCACHE_SYNC_OUT(); return; L_089A982C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089A9874; } @@ -4890,7 +4814,6 @@ L_089A9834: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089A9874; } @@ -4899,7 +4822,6 @@ L_089A9834: L_089A9844: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089A9874; } @@ -4924,7 +4846,6 @@ L_089A9864: goto L_089A986C; L_089A986C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A98D0; } @@ -4932,7 +4853,6 @@ L_089A986C: } L_089A9874: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A98EC; } @@ -4941,7 +4861,6 @@ L_089A9874: L_089A987C: ctx.gpr[17] = (0u | 250u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089A98D0; } @@ -4950,7 +4869,6 @@ L_089A987C: L_089A9888: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A98B8; } @@ -4959,7 +4877,6 @@ L_089A9888: L_089A9894: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089A98B8; } @@ -4974,7 +4891,6 @@ L_089A98A0: AOT_REGCACHE_SYNC_OUT(); return; L_089A98B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A98E0; } @@ -4989,7 +4905,6 @@ L_089A98B8: AOT_REGCACHE_SYNC_OUT(); return; L_089A98C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A98E0; } @@ -5020,7 +4935,17 @@ L_089A98EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9900: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), ctx.gpr[17]); @@ -5051,7 +4976,6 @@ L_089A9930: AOT_REGCACHE_SYNC_OUT(); return; L_089A9938: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089A9960; } @@ -5071,7 +4995,6 @@ L_089A9940: } L_089A9958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A9980; } @@ -5084,7 +5007,6 @@ L_089A9960: AOT_REGCACHE_SYNC_OUT(); return; L_089A9968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A9A68; } @@ -5260,7 +5182,6 @@ L_089A9A44: L_089A9A48: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9A68; } @@ -5269,7 +5190,6 @@ L_089A9A48: L_089A9A54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9A68; } @@ -5294,7 +5214,17 @@ L_089A9A68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9A84: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5359,7 +5289,17 @@ L_089A9ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9AF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(172), ctx.gpr[18]); @@ -5524,7 +5464,6 @@ L_089A9BD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9BF8; } @@ -5533,7 +5472,6 @@ L_089A9BD4: L_089A9BE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9BF8; } @@ -5560,7 +5498,17 @@ L_089A9BF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9C1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(436), ctx.gpr[18]); @@ -5645,7 +5593,6 @@ L_089A9CB0: AOT_REGCACHE_SYNC_OUT(); return; L_089A9CDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A9D70; } @@ -5803,7 +5750,6 @@ L_089A9D34: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A9D7C; } @@ -5822,7 +5768,6 @@ L_089A9D7C: AOT_REGCACHE_SYNC_OUT(); return; L_089A9D88: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A9E1C; } @@ -5980,7 +5925,6 @@ L_089A9DE0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A9E28; } @@ -5999,7 +5943,6 @@ L_089A9E28: AOT_REGCACHE_SYNC_OUT(); return; L_089A9E34: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089A9EC8; } @@ -6157,7 +6100,6 @@ L_089A9E8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089A9ED4; } @@ -6170,9 +6112,7 @@ L_089A9EC8: goto L_089A9ED4; L_089A9ED4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A9F24; } @@ -6180,9 +6120,7 @@ L_089A9ED4: } L_089A9EE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A9F0C; } @@ -6236,9 +6174,7 @@ L_089A9F0C: } L_089A9F24: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089A9F4C; } @@ -6302,7 +6238,6 @@ L_089A9F60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9F8C; } @@ -6311,7 +6246,6 @@ L_089A9F60: L_089A9F78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089A9F8C; } @@ -6344,7 +6278,17 @@ L_089A9F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089A9FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), aot_gpr_16); @@ -6443,7 +6387,6 @@ L_089AA06C: AOT_REGCACHE_SYNC_OUT(); return; L_089AA080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA094; } @@ -6481,7 +6424,6 @@ L_089AA0A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_fpr_20 = aot_fpr_20 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089AA0C4; @@ -6564,7 +6506,6 @@ L_089AA0C4: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[22])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(624))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AA1E8; } @@ -6579,7 +6520,6 @@ L_089AA148: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 62u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AA1A4; } @@ -6603,7 +6543,6 @@ L_089AA16C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13360))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089AA190; @@ -6614,7 +6553,6 @@ L_089AA190: aot_fpr_20 = ctx.fpr[22] - aot_fpr_13; aot_fpr_20 = aot_fpr_12 / aot_fpr_20; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA1E8; } @@ -6638,7 +6576,6 @@ L_089AA1B8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13356))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089AA1DC; @@ -6685,7 +6622,6 @@ L_089AA224: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AA248; } @@ -6694,7 +6630,6 @@ L_089AA224: L_089AA234: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AA248; } @@ -6722,7 +6657,17 @@ L_089AA248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AA270: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17]}; @@ -6789,7 +6734,6 @@ L_089AA304: goto L_089AA308; L_089AA308: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AA500; } @@ -6862,7 +6806,6 @@ L_089AA368: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089AA384; } @@ -6877,7 +6820,6 @@ L_089AA378: L_089AA384: aot_gpr_4 = (0u | 20u); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AA3E4; } @@ -6960,7 +6902,6 @@ L_089AA3D4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA4F8; } @@ -6989,7 +6930,6 @@ L_089AA3FC: } L_089AA40C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089AA45C; } @@ -7002,7 +6942,6 @@ L_089AA414: AOT_REGCACHE_SYNC_OUT(); return; L_089AA41C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AA45C; } @@ -7017,7 +6956,6 @@ L_089AA42C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 198u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AA45C; } @@ -7094,7 +7032,6 @@ L_089AA488: L_089AA4A0: aot_gpr_4 = (0u | 9u); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AA4B8; } @@ -7126,7 +7063,6 @@ L_089AA4B8: } L_089AA4C0: { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AA4D4; } @@ -7173,7 +7109,6 @@ L_089AA4D4: AOT_REGCACHE_SYNC_OUT(); return; L_089AA4F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA560; } @@ -7281,7 +7216,6 @@ L_089AA560: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AA584; } @@ -7290,7 +7224,6 @@ L_089AA560: L_089AA570: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AA584; } @@ -7321,7 +7254,17 @@ L_089AA584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AA5B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -7334,7 +7277,6 @@ L_089AA5B8: AOT_REGCACHE_SYNC_OUT(); return; L_089AA5D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AA5F0; } @@ -7364,7 +7306,6 @@ L_089AA5F8: AOT_REGCACHE_SYNC_OUT(); return; L_089AA608: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AA62C; } @@ -7382,7 +7323,6 @@ L_089AA610: AOT_REGCACHE_SYNC_OUT(); return; L_089AA62C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AA724; } @@ -7402,7 +7342,6 @@ L_089AA644: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[7] = (0u | 59u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089AA664; } @@ -7416,7 +7355,6 @@ L_089AA654: goto L_089AA664; L_089AA664: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_089AA674; } @@ -7438,7 +7376,6 @@ L_089AA674: } L_089AA684: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AA6A4; } @@ -7448,7 +7385,6 @@ L_089AA68C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 227u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AA6A4; } @@ -7480,7 +7416,6 @@ L_089AA6B4: } L_089AA6C0: { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_089AA700; } @@ -7538,7 +7473,6 @@ L_089AA724: } L_089AA748: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AA760; } @@ -7551,7 +7485,6 @@ L_089AA750: AOT_REGCACHE_SYNC_OUT(); return; L_089AA758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA7B0; } @@ -7564,7 +7497,6 @@ L_089AA760: AOT_REGCACHE_SYNC_OUT(); return; L_089AA768: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AA7B0; } @@ -7605,7 +7537,6 @@ L_089AA7B0: AOT_REGCACHE_SYNC_OUT(); return; L_089AA7BC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AA7E8; } @@ -7615,7 +7546,6 @@ L_089AA7C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(612))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AA7E8; } @@ -7624,7 +7554,6 @@ L_089AA7C4: L_089AA7D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(535)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AA7E8; } @@ -7646,7 +7575,17 @@ L_089AA7E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AA7FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), aot_gpr_16); @@ -7693,7 +7632,6 @@ L_089AA848: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA968; } @@ -7703,7 +7641,6 @@ L_089AA85C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); aot_gpr_5 = (0u | 62u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AA890; } @@ -7731,7 +7668,6 @@ L_089AA87C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AA968; } @@ -7740,7 +7676,6 @@ L_089AA87C: L_089AA890: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089AA8E8; } @@ -7788,7 +7723,6 @@ L_089AA8E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); aot_gpr_5 = (0u | 197u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AA968; } @@ -7827,7 +7761,6 @@ L_089AA93C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AAB20; } @@ -7836,7 +7769,6 @@ L_089AA93C: L_089AA94C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AAB20; } @@ -7849,7 +7781,6 @@ L_089AA958: AOT_REGCACHE_SYNC_OUT(); return; L_089AA960: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAB20; } @@ -7943,7 +7874,6 @@ L_089AA9C4: aot_mem.aot_direct_store32_block(ctx.gpr[19] + static_cast(48), aot_run_words); } aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089AA9F8; } @@ -7985,7 +7915,6 @@ L_089AAA18: L_089AAA28: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089AAA44; } @@ -7995,7 +7924,6 @@ L_089AAA34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(48)))))); aot_gpr_5 = (0u | 62u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AAA68; } @@ -8013,7 +7941,6 @@ L_089AAA44: AOT_REGCACHE_SYNC_OUT(); return; L_089AAA60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAA84; } @@ -8031,7 +7958,6 @@ L_089AAA68: AOT_REGCACHE_SYNC_OUT(); return; L_089AAA84: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089AAA98; } @@ -8089,7 +8015,6 @@ L_089AAADC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AAB20; } @@ -8098,7 +8023,6 @@ L_089AAADC: L_089AAB0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AAB20; } @@ -8123,7 +8047,17 @@ L_089AAB20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AAB3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_16); @@ -8190,7 +8124,6 @@ L_089AABB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AABF8; } @@ -8199,7 +8132,6 @@ L_089AABB4: L_089AABE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AABF8; } @@ -8207,7 +8139,6 @@ L_089AABE4: } L_089AABF0: aot_gpr_31 = (0x089AABF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089AABF8u) goto L_089AABF8; AOT_REGCACHE_SYNC_OUT(); return; L_089AABF8: @@ -8218,7 +8149,17 @@ L_089AABF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AAC08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -8241,7 +8182,6 @@ L_089AAC2C: AOT_REGCACHE_SYNC_OUT(); return; L_089AAC34: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_089AAC48; } @@ -8260,7 +8200,6 @@ L_089AAC48: goto L_089AAC54; L_089AAC54: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089AAC88; } @@ -8271,7 +8210,6 @@ L_089AAC5C: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AAC88; } @@ -8289,7 +8227,6 @@ L_089AAC70: } L_089AAC80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AACBC; } @@ -8297,7 +8234,6 @@ L_089AAC80: } L_089AAC88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAD30; } @@ -8305,7 +8241,6 @@ L_089AAC88: } L_089AAC90: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AACBC; } @@ -8314,7 +8249,6 @@ L_089AAC90: L_089AAC98: aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AACAC; } @@ -8322,7 +8256,6 @@ L_089AAC98: } L_089AACA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAD30; } @@ -8334,7 +8267,6 @@ L_089AACAC: goto L_089AA5B8; L_089AACB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAD30; } @@ -8343,7 +8275,6 @@ L_089AACB4: L_089AACBC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AACF0; } @@ -8353,9 +8284,7 @@ L_089AACC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AAD00; } @@ -8367,7 +8296,6 @@ L_089AACE0: goto L_089AA5B8; L_089AACE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAD30; } @@ -8379,7 +8307,6 @@ L_089AACF0: goto L_089AA5B8; L_089AACF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAD30; } @@ -8417,7 +8344,17 @@ L_089AAD30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AAD48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8449,7 +8386,6 @@ L_089AAD74: } L_089AAD84: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AADB0; } @@ -8458,7 +8394,6 @@ L_089AAD84: L_089AAD8C: aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AADA0; } @@ -8466,7 +8401,6 @@ L_089AAD8C: } L_089AAD98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAF40; } @@ -8478,7 +8412,6 @@ L_089AADA0: goto L_089AA5B8; L_089AADA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAF40; } @@ -8486,7 +8419,6 @@ L_089AADA8: } L_089AADB0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089AADE4; } @@ -8497,7 +8429,6 @@ L_089AADB8: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AADE4; } @@ -8510,7 +8441,6 @@ L_089AADCC: AOT_REGCACHE_SYNC_OUT(); return; L_089AADD4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AADEC; } @@ -8518,7 +8448,6 @@ L_089AADD4: } L_089AADDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAF04; } @@ -8526,7 +8455,6 @@ L_089AADDC: } L_089AADE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAF40; } @@ -8544,7 +8472,6 @@ L_089AADEC: } L_089AADFC: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089AAE6C; } @@ -8552,7 +8479,6 @@ L_089AADFC: } L_089AAE04: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089AAE44; } @@ -8582,7 +8508,6 @@ L_089AAE20: } L_089AAE28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AAE6C; } @@ -8636,7 +8561,6 @@ L_089AAE6C: goto L_089AAE74; L_089AAE74: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AAF04; } @@ -8649,7 +8573,6 @@ L_089AAE7C: AOT_REGCACHE_SYNC_OUT(); return; L_089AAE84: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AAEEC; } @@ -8662,7 +8585,6 @@ L_089AAE8C: AOT_REGCACHE_SYNC_OUT(); return; L_089AAE94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AAEEC; } @@ -8675,7 +8597,6 @@ L_089AAE9C: AOT_REGCACHE_SYNC_OUT(); return; L_089AAEA4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AAEEC; } @@ -8688,7 +8609,6 @@ L_089AAEAC: AOT_REGCACHE_SYNC_OUT(); return; L_089AAEB4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AAEEC; } @@ -8701,7 +8621,6 @@ L_089AAEBC: AOT_REGCACHE_SYNC_OUT(); return; L_089AAEC4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AAEEC; } @@ -8714,7 +8633,6 @@ L_089AAECC: AOT_REGCACHE_SYNC_OUT(); return; L_089AAED4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AAEEC; } @@ -8727,7 +8645,6 @@ L_089AAEDC: AOT_REGCACHE_SYNC_OUT(); return; L_089AAEE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AAF04; } @@ -8744,7 +8661,6 @@ L_089AAEF4: AOT_REGCACHE_SYNC_OUT(); return; L_089AAEFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAF40; } @@ -8754,7 +8670,6 @@ L_089AAF04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AAF38; } @@ -8774,7 +8689,6 @@ L_089AAF14: AOT_REGCACHE_SYNC_OUT(); return; L_089AAF30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AAF40; } @@ -8797,7 +8711,17 @@ L_089AAF40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AAF58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8816,7 +8740,6 @@ L_089AAF70: goto L_089AAF7C; L_089AAF7C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AAFA8; } @@ -8837,7 +8760,6 @@ L_089AAF84: } L_089AAFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB004; } @@ -8845,7 +8767,6 @@ L_089AAFA0: } L_089AAFA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB034; } @@ -8877,7 +8798,6 @@ L_089AAFCC: AOT_REGCACHE_SYNC_OUT(); return; L_089AAFE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB004; } @@ -8906,7 +8826,6 @@ L_089AB004: AOT_REGCACHE_SYNC_OUT(); return; L_089AB020: { const bool branch_taken = aot_gpr_2 != aot_gpr_16; - // nop if (branch_taken) { goto L_089AB034; } @@ -8930,7 +8849,17 @@ L_089AB034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB048: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -8959,7 +8888,6 @@ L_089AB07C: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(0u); if (branch_taken) { @@ -8977,9 +8905,7 @@ L_089AB0B4: } L_089AB0BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB0D0; } @@ -8991,9 +8917,7 @@ L_089AB0CC: L_089AB0D0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB0EC; } @@ -9009,9 +8933,7 @@ L_089AB0E4: } L_089AB0EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB100; } @@ -9023,7 +8945,6 @@ L_089AB0FC: L_089AB100: aot_fpr_14 = aot_fpr_14 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); goto L_089AB114; @@ -9031,9 +8952,7 @@ L_089AB100: goto L_089AB114; L_089AB114: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB138; } @@ -9042,9 +8961,7 @@ L_089AB114: L_089AB124: aot_fpr_12 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB140; } @@ -9073,7 +8990,17 @@ L_089AB144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB158: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9086,7 +9013,6 @@ L_089AB158: L_089AB178: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089AB194; } @@ -9099,7 +9025,6 @@ L_089AB184: AOT_REGCACHE_SYNC_OUT(); return; L_089AB18C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AB1AC; } @@ -9117,7 +9042,6 @@ L_089AB194: } L_089AB1A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB1C0; } @@ -9159,14 +9083,34 @@ L_089AB1D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB1E8: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-13368), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB1F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9193,7 +9137,6 @@ L_089AB218: L_089AB228: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB24C; } @@ -9203,9 +9146,7 @@ L_089AB234: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB394; } @@ -9240,7 +9181,6 @@ L_089AB28C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); ctx.gpr[6] = (aot_gpr_5 & 8192u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_089AB370; } @@ -9251,7 +9191,6 @@ L_089AB29C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.gpr[6] = (ctx.gpr[6] < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_089AB2B8; } @@ -9259,7 +9198,6 @@ L_089AB29C: } L_089AB2B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB370; } @@ -9309,7 +9247,6 @@ L_089AB308: L_089AB314: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB338; } @@ -9319,9 +9256,7 @@ L_089AB320: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AB394; } @@ -9352,7 +9287,6 @@ L_089AB354: } L_089AB370: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB394; } @@ -9364,7 +9298,6 @@ L_089AB378: aot_gpr_16 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_gpr_5 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB394; } @@ -9386,7 +9319,17 @@ L_089AB394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB3AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9396,7 +9339,6 @@ L_089AB3AC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AB3F4; } @@ -9406,7 +9348,6 @@ L_089AB3D0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB3F4; } @@ -9419,7 +9360,6 @@ L_089AB3E0: goto L_089AB4FC; L_089AB3EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB4E8; } @@ -9437,7 +9377,6 @@ L_089AB3F4: } L_089AB404: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB4E8; } @@ -9465,7 +9404,6 @@ L_089AB42C: L_089AB440: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AB48C; } @@ -9478,7 +9416,6 @@ L_089AB44C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AB48C; } @@ -9504,7 +9441,6 @@ L_089AB488: goto L_089AB48C; L_089AB48C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AB4D0; } @@ -9516,7 +9452,6 @@ L_089AB494: ctx.gpr[17] = (0u < aot_gpr_5 ? 1u : 0u); ctx.gpr[17] = (ctx.gpr[17] & 255u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AB4D0; } @@ -9542,7 +9477,6 @@ L_089AB4CC: goto L_089AB4D0; L_089AB4D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AB4E8; } @@ -9566,7 +9500,17 @@ L_089AB4E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB4FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9582,7 +9526,6 @@ L_089AB4FC: L_089AB520: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AB540; } @@ -9600,7 +9543,6 @@ L_089AB53C: goto L_089AB540; L_089AB540: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AB55C; } @@ -9618,7 +9560,6 @@ L_089AB558: goto L_089AB55C; L_089AB55C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB57C; } @@ -9658,7 +9599,17 @@ L_089AB594: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB5A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9676,7 +9627,6 @@ L_089AB5A8: } L_089AB5D4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_089AB6A4; } @@ -9687,7 +9637,6 @@ L_089AB5DC: aot_gpr_4 = (0u | 6u); ctx.gpr[6] = (ctx.gpr[6] & 14u); { const bool branch_taken = ctx.gpr[6] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AB5FC; } @@ -9705,7 +9654,6 @@ L_089AB5F0: L_089AB5FC: ctx.gpr[7] = (0u | 4u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089AB61C; } @@ -9714,7 +9662,6 @@ L_089AB5FC: L_089AB608: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AB61C; } @@ -9730,7 +9677,6 @@ L_089AB614: } L_089AB61C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB6A4; } @@ -9738,7 +9684,6 @@ L_089AB61C: } L_089AB624: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089AB6A4; } @@ -9758,7 +9703,6 @@ L_089AB62C: L_089AB640: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1784))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089AB690; } @@ -9767,7 +9711,6 @@ L_089AB640: L_089AB64C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(676))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AB690; } @@ -9775,7 +9718,6 @@ L_089AB64C: } L_089AB658: { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_089AB690; } @@ -9787,7 +9729,6 @@ L_089AB660: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(23)))))); aot_gpr_5 = (static_cast(ctx.gpr[6]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AB690; } @@ -9830,7 +9771,17 @@ L_089AB6A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB6C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -9840,7 +9791,6 @@ L_089AB6C0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = ctx.gpr[6] == aot_gpr_5; - // nop if (branch_taken) { goto L_089AB6F4; } @@ -9850,7 +9800,6 @@ L_089AB6E4: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); ctx.gpr[7] = (0u | 8u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089AB724; } @@ -9884,7 +9833,6 @@ L_089AB714: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB778; } @@ -9894,7 +9842,6 @@ L_089AB724: ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); ctx.gpr[6] = (ctx.gpr[6] & 8u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_089AB740; } @@ -9903,7 +9850,6 @@ L_089AB724: L_089AB734: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AB760; } @@ -9930,7 +9876,6 @@ L_089AB750: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AB778; } @@ -9974,7 +9919,6 @@ L_089AB778: AOT_REGCACHE_SYNC_OUT(); return; L_089AB7A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AB7B0; } @@ -10003,7 +9947,17 @@ L_089AB7B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB7C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -10038,7 +9992,6 @@ L_089AB810: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AB828; } @@ -10058,7 +10011,6 @@ L_089AB828: L_089AB838: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB850; } @@ -10079,7 +10031,6 @@ L_089AB850: L_089AB860: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB878; } @@ -10100,7 +10051,6 @@ L_089AB878: L_089AB888: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB8A0; } @@ -10123,7 +10073,17 @@ L_089AB8A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB8B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -10157,7 +10117,6 @@ L_089AB8DC: L_089AB8F4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AB8DC; } @@ -10171,7 +10130,17 @@ L_089AB900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB910: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1360))); ctx.gpr[6] = (0u | 1u); @@ -10181,7 +10150,6 @@ L_089AB910: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AB93C; } @@ -10200,11 +10168,20 @@ L_089AB93C: goto L_089AB940; L_089AB940: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AB948: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -10233,7 +10210,6 @@ L_089AB984: AOT_REGCACHE_SYNC_OUT(); return; L_089AB990: { const bool branch_taken = aot_gpr_2 != aot_gpr_16; - // nop if (branch_taken) { goto L_089ABA00; } @@ -10243,7 +10219,6 @@ L_089AB998: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AB9BC; } @@ -10254,7 +10229,6 @@ L_089AB9A8: ctx.gpr[6] = (0u | 16u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_089ABA00; } @@ -10304,7 +10278,17 @@ L_089ABA00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ABA14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -10315,7 +10299,6 @@ L_089ABA14: AOT_REGCACHE_SYNC_OUT(); return; L_089ABA30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10324,7 +10307,6 @@ L_089ABA30: L_089ABA38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2088))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10335,7 +10317,6 @@ L_089ABA44: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10360,7 +10341,6 @@ L_089ABA70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABAD8; } @@ -10377,9 +10357,7 @@ L_089ABA88: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089ABAD8; } @@ -10400,7 +10378,6 @@ L_089ABAA8: AOT_REGCACHE_SYNC_OUT(); return; L_089ABAD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10415,7 +10392,6 @@ L_089ABAE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABB48; } @@ -10432,9 +10408,7 @@ L_089ABAF8: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089ABB48; } @@ -10455,7 +10429,6 @@ L_089ABB18: AOT_REGCACHE_SYNC_OUT(); return; L_089ABB40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10470,7 +10443,6 @@ L_089ABB50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABBB8; } @@ -10487,9 +10459,7 @@ L_089ABB68: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089ABBB8; } @@ -10510,7 +10480,6 @@ L_089ABB88: AOT_REGCACHE_SYNC_OUT(); return; L_089ABBB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10525,7 +10494,6 @@ L_089ABBC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 62u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABC28; } @@ -10542,9 +10510,7 @@ L_089ABBD8: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089ABC28; } @@ -10565,7 +10531,6 @@ L_089ABBF8: AOT_REGCACHE_SYNC_OUT(); return; L_089ABC20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10580,7 +10545,6 @@ L_089ABC30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10597,9 +10561,7 @@ L_089ABC48: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089ABCD4; } @@ -10657,7 +10619,17 @@ L_089ABCD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ABCEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-640)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(612), aot_gpr_16); @@ -10674,7 +10646,6 @@ L_089ABCEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(380))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABE78; } @@ -10877,7 +10848,6 @@ L_089ABE60: AOT_REGCACHE_SYNC_OUT(); return; L_089ABE70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0106_entry, 106u, 61u, 0x089AC448u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10887,7 +10857,6 @@ L_089ABE78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(380))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ABFCC; } @@ -11090,7 +11059,6 @@ L_089ABFB4: AOT_REGCACHE_SYNC_OUT(); return; L_089ABFC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0106_entry, 106u, 61u, 0x089AC448u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11100,7 +11068,6 @@ L_089ABFCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(380))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0106_entry, 106u, 17u, 0x089AC120u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0106.cpp b/profiles/vcs/generated/generated_unit_0106.cpp index 3f513c3..dee5591 100644 --- a/profiles/vcs/generated/generated_unit_0106.cpp +++ b/profiles/vcs/generated/generated_unit_0106.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0106[4082] = { - 1, 0, 0, 0, 2, 0, 3, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 0, 14, - 0, 0, 15, 0, 0, 0, 16, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 21, 0, 22, 0, 0, 0, 23, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 32, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 35, 0, 36, 0, 0, - 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 40, 0, 0, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 44, - 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, - 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 53, 0, 54, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, 0, 0, - 0, 66, 0, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 72, - 0, 0, 73, 0, 74, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 78, 0, 79, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 83, 0, 0, 84, 0, 85, 86, 0, 0, 87, 0, 88, 0, - 89, 0, 90, 0, 0, 0, 0, 0, 91, 92, 0, 93, 0, 0, 94, 0, 95, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 99, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, - 0, 0, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 110, 111, 112, 0, 113, 0, 114, 0, 0, 115, 0, - 116, 0, 117, 0, 118, 0, 0, 119, 0, 120, 0, 121, 0, 122, 0, 0, 0, 123, 0, 124, 0, 0, 125, 0, 126, 0, 0, 127, 0, 128, 0, 129, - 0, 0, 130, 0, 131, 0, 132, 0, 0, 133, 0, 134, 0, 135, 0, 0, 0, 0, 136, 0, 0, 137, 0, 138, 0, 0, 139, 0, 140, 141, 0, 142, - 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, 146, 0, 0, 0, 0, 147, 148, 0, 149, 0, 0, 0, 150, 0, 151, 0, - 152, 0, 153, 0, 154, 0, 0, 155, 0, 0, 0, 156, 0, 157, 0, 158, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, - 161, 0, 162, 0, 163, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 166, 0, 167, 0, 0, 0, 0, 168, 0, 169, 0, - 170, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 0, 174, 175, 176, 0, 177, 0, 0, 0, 178, 0, 0, 179, 0, 180, 0, 181, - 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 0, 194, 0, 195, - 0, 0, 0, 196, 0, 0, 0, 197, 0, 198, 0, 0, 0, 199, 200, 0, 201, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 0, 0, 205, 0, 206, - 0, 0, 0, 207, 208, 0, 209, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 212, 0, 213, 0, 214, 0, 215, 0, 0, 216, 0, 217, 0, 0, 0, - 218, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, 229, 0, - 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 240, - 0, 241, 0, 242, 0, 243, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 246, 0, 247, 248, 0, 0, 249, 0, 250, 0, 0, 251, 0, 252, 0, - 253, 0, 254, 0, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 259, 0, 260, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 264, 0, 0, 0, 0, 265, 0, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, 270, - 0, 0, 271, 0, 0, 272, 0, 0, 273, 0, 274, 0, 0, 275, 0, 0, 276, 0, 0, 277, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, - 0, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, 287, 0, 288, 0, 0, 289, 0, 0, - 290, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, - 0, 297, 0, 0, 0, 298, 0, 0, 299, 0, 300, 0, 0, 0, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 0, 307, 0, 308, 0, - 0, 309, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 314, 0, 315, 0, 0, 0, 316, 0, 0, 0, 317, 0, 318, - 0, 0, 0, 0, 319, 0, 320, 0, 321, 0, 0, 0, 0, 322, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 326, 0, 327, - 0, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 0, 0, 0, 338, 0, 339, 0, 0, 340, 0, 0, 341, 0, - 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 348, 0, - 0, 0, 349, 0, 0, 0, 350, 0, 0, 0, 351, 352, 353, 0, 354, 0, 0, 0, 0, 0, 355, 0, 356, 0, 0, 357, 0, 358, 0, 0, 359, 0, - 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, - 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 371, 0, 372, 0, 0, 373, 0, 374, 0, 0, 375, 0, 0, 0, - 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 378, 0, 379, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, 383, 0, - 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 388, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 392, 0, 0, 0, 393, - 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 397, 0, 398, 0, 399, 0, 400, 0, 0, 0, 401, 0, 0, - 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 412, 0, 413, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, - 423, 0, 424, 0, 0, 425, 0, 426, 0, 0, 427, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 433, 0, 0, 0, 0, 434, - 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, - 0, 0, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, 0, 452, 0, 453, 0, 454, 455, 0, 0, 456, 0, 0, 457, - 0, 0, 458, 0, 0, 459, 0, 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, - 0, 0, 466, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, 471, 0, 0, 472, 0, 0, 0, 473, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, - 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, - 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 486, 0, - 487, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 493, 0, 494, 0, 0, 495, 0, 0, - 0, 496, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 500, 0, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, - 504, 0, 0, 505, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 508, 0, 0, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 0, 513, 0, 0, 514, - 0, 515, 516, 0, 0, 517, 0, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 523, 0, 0, 0, 524, 0, 0, - 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 530, 0, 531, 0, 532, 0, 0, 0, 533, 0, 534, 0, 0, 0, 535, 0, 536, 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, - 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, 0, 0, 0, 546, - 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 555, 0, 556, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 559, 0, 560, 561, 0, 562, 0, 0, 0, 0, 0, 563, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, 566, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 572, 0, - 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 576, 0, 577, 0, 0, 0, 0, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 0, 583, 0, 584, - 0, 585, 0, 586, 0, 0, 0, 587, 0, 0, 588, 0, 589, 0, 590, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 593, 0, 0, 594, 0, 0, - 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 598, 0, 599, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, 606, 0, 607, 0, 0, 0, 608, 0, 0, 0, - 609, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 611, 0, 612, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 615, 0, 616, 0, - 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 619, 0, 0, 620, 0, 621, 0, 622, 0, 0, 623, 0, 624, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 626, 0, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 630, 0, 631, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 0, 0, - 0, 634, 0, 0, 0, 0, 0, 0, 0, 635, 0, 636, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 639, 0, 0, 0, 640, 0, - 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 0, 645, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, - 648, 0, 0, 649, 0, 0, 650, 0, 0, 651, 0, 652, 0, 0, 0, 653, 0, 0, 0, 0, 654, 0, 655, 0, 0, 656, 0, 657, 0, 0, 0, 0, - 658, 0, 0, 659, 0, 0, 0, 660, 0, 0, 661, 0, 662, 0, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 666, 0, 667, 0, - 0, 668, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 0, 673, 0, 0, 674, 0, 675, 0, 0, 676, 0, 677, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 682, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 686, 0, 0, 0, 0, 0, 687, 0, 0, - 0, 0, 688, 0, 689, 0, 0, 0, 0, 690, 0, 0, 691, 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, - 695, 0, 0, 696, 0, 697, 0, 0, 0, 0, 698, 0, 0, 699, 700, 0, 0, 0, 0, 0, 0, 701, 0, 702, 0, 703, 0, 0, 704, 0, 0, 705, - 0, 0, 0, 706, 0, 0, 707, 0, 708, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 711, 0, 712, 0, 0, 0, 0, 713, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 716, 0, 0, 0, - 0, 0, 0, 0, 717, 0, 0, 718, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 720, 721, 0, 0, 722, 0, 723, 0, 0, 0, 0, 0, 0, 724, - 0, 0, 0, 0, 0, 0, 725, 0, 726, 0, 0, 0, 0, 0, 0, 727, 0, 0, 728, 0, 729, 0, 730, 0, 0, 0, 0, 731, 0, 732, 0, 0, - 0, 733, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 737, 0, 738, 0, 0, 739, 0, 740, 0, 741, - 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 745, 0, 0, 746, 0, 0, 0, 747, 0, 0, 0, - 748, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 751, 0, 752, 0, 753, 0, 0, 0, 754, 0, 755, 0, 0, 0, 756, 0, 757, 0, 0, 0, 0, - 0, 0, 0, 758, 0, 0, 0, 759, 0, 760, 0, 0, 0, 761, 0, 762, 0, 0, 0, 763, 0, 764, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, - 0, 766, 0, 0, 0, 767, 0, 768, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 773, 0, 0, 0, 0, 0, 774, 0, - 775, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 777, 0, 778, 0, 779, 0, 0, 0, 780, 0, 781, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, - 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 786, 0, 0, 0, - 787, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 791, 0, 0, 0, 0, 792, 0, 793, 794, 0, 795, 796, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 798, 0, 799, 0, 800, 801, 0, - 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 806, 0, - 0, 807, 0, 808, 0, 809, 0, 0, 0, 0, 0, 0, 810, 0, 0, 811, 0, 812, 0, 813, 0, 0, 0, 814, 0, 0, 0, 815, 0, 0, 0, 0, - 816, 0, 0, 817, 818, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 822, 0, 0, 0, 823, 0, 0, 824, 0, 0, 0, - 825, 0, 0, 0, 826, 0, 0, 0, 827, 828, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 832, 0, 833, 0, 0, 0, - 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 835, 0, 836, 0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 0, 838, 0, 839, 0, - 0, 840, 0, 841, 0, 0, 0, 842, 0, 0, 0, 843, 0, 0, 0, 844, 0, 845, 0, 0, 846, 0, 847, 0, 0, 0, 0, 848, 0, 0, 0, 849, - 0, 0, 0, 850, 851, 0, 0, 0, 0, 0, 0, 852, 0, 853, 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, - 856, 0, 857, 0, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, 0, 859, 0, 0, 0, 0, 0, 0, 0, 860, 0, 861, 0, 0, 0, 0, 862, - 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 865, 0, 0, 0, 866, - 0, 867, 0, 868, 0, 869, 0, 0, 0, 0, 0, 0, 0, 870, 0, 0, 0, 871, 0, 872, 0, 0, 0, 0, 873, 0, 874, 0, 875, 0, 0, 0, - 876, 0, 0, 0, 0, 0, 0, 0, 877, 0, 878, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 880, 0, 881, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 882, 0, 0, 883, 0, 0, 884, 0, 885, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 887, 0, 888, 0, 0, 0, 0, 0, - 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 891, 0, 892, 0, 0, 0, 893, 0, 0, 0, 0, 0, 0, 0, 894, 0, - 895, 0, 0, 0, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, 0, 0, 898, 0, 899, 0, 900, 0, - 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, 902, 0, 903, 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, 0, 0, 905, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 906, 0, 0, 0, 0, 907, 0, 0, 0, 908, 0, 0, 909, 0, 910, 0, 0, 0, 911, 0, 0, 0, 0, 0, 0, 0, - 912, 0, 913, 0, 0, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, 0, 916, 0, 917, 0, 0, 0, 918, 0, - 0, 0, 0, 0, 0, 0, 919, 0, 920, 0, 0, 0, 0, 0, 921, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 922, 0, 923, 0, 924, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, 0, 0, 0, 0, 0, 928, 929, 0, 0, 0, 0, 0, 0, 0, 930, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 932, 0, 933, 0, 0, 0, 934, 0, 0, 0, - 0, 0, 935, 0, 0, 0, 936, 0, 0, 0, 937, 0, 938, 0, 0, 939, 0, 940, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0106[64] = { + 0x8920040412201451ull, 0x808244028A221144ull, 0x8805144428912400ull, 0x0245220444010104ull, + 0x0840000000044890ull, 0x8A00015228000000ull, 0x5348A0000202A454ull, 0x1011144048454B05ull, + 0xA94A2A954AE22210ull, 0x51618410B4A42A54ull, 0x50B004150102A895ull, 0xA55522AAA9171111ull, + 0x14AA2258A2296288ull, 0xC0105555488AAC51ull, 0x0A0A9145529A422Aull, 0x4409252494A85000ull, + 0x4402908125282A84ull, 0xA228510A52AA8522ull, 0x10008854A2016150ull, 0x424484204942A800ull, + 0x441104814A505C44ull, 0x5201504812942848ull, 0x000000108948520Aull, 0x0021502222A84400ull, + 0x0400400015200401ull, 0x0000000080211120ull, 0x004214A540000000ull, 0x4004090085000002ull, + 0x0000480024920120ull, 0xA0122124935210A0ull, 0x8891284000000414ull, 0x4840480148010100ull, + 0x10489222254088A1ull, 0x2248152691544509ull, 0x8889451500488102ull, 0x2955480489000444ull, + 0x2029000082D42000ull, 0xA554152249002800ull, 0x009252222488548Aull, 0x508A810111490800ull, + 0x048A40A4054A9140ull, 0x04A4204444480A02ull, 0x002094890A508A49ull, 0x5292224251000000ull, + 0x2088094002240800ull, 0x92A0642908091214ull, 0x1400100042841148ull, 0x28548140814C0490ull, + 0x11208240A948010Aull, 0x2028A2880A28AA21ull, 0x0228A81141280AA2ull, 0x0002201112001001ull, + 0x404408406A103684ull, 0x12288099088A902Aull, 0x1404000000404311ull, 0x8852888A50102808ull, + 0x8501020501102818ull, 0x150A202A88800080ull, 0x0501149001440501ull, 0x5420004140452001ull, + 0x0114884002081404ull, 0xA800414045200105ull, 0x80C0200100400000ull, 0x0002944411500000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0106[64] = { + 1u, 15u, 30u, 45u, 57u, 64u, 73u, 89u, 106u, 130u, 152u, 170u, 196u, 218u, 241u, 263u, + 280u, 297u, 319u, 334u, 349u, 367u, 384u, 395u, 408u, 416u, 422u, 431u, 439u, 448u, 466u, 477u, + 487u, 504u, 525u, 541u, 557u, 568u, 585u, 603u, 617u, 634u, 648u, 665u, 678u, 688u, 706u, 717u, + 733u, 748u, 766u, 783u, 791u, 807u, 825u, 834u, 850u, 863u, 876u, 889u, 901u, 912u, 925u, 931u, }; void recomp_unit_0106_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0106_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089AC000u; - entry_id = (entry_delta < 16328u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0106[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16328u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0106[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0106[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089AC000; @@ -1294,7 +1201,6 @@ L_089AC108: AOT_REGCACHE_SYNC_OUT(); return; L_089AC118: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AC448; } @@ -1304,7 +1210,6 @@ L_089AC120: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(380))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AC274; } @@ -1510,7 +1415,6 @@ L_089AC25C: AOT_REGCACHE_SYNC_OUT(); return; L_089AC26C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AC448; } @@ -1700,7 +1604,6 @@ L_089AC388: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC3C8; } @@ -1721,7 +1624,6 @@ L_089AC3B4: AOT_REGCACHE_SYNC_OUT(); return; L_089AC3C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AC410; } @@ -1959,7 +1861,6 @@ L_089AC4EC: AOT_REGCACHE_SYNC_OUT(); return; L_089AC56C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AC5A0; } @@ -1969,7 +1870,6 @@ L_089AC574: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC610; } @@ -1978,7 +1878,6 @@ L_089AC574: L_089AC584: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC610; } @@ -1991,7 +1890,6 @@ L_089AC590: AOT_REGCACHE_SYNC_OUT(); return; L_089AC598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AC610; } @@ -2030,7 +1928,6 @@ L_089AC5A0: AOT_REGCACHE_SYNC_OUT(); return; L_089AC5E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AC618; } @@ -2040,7 +1937,6 @@ L_089AC5EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC610; } @@ -2049,7 +1945,6 @@ L_089AC5EC: L_089AC5FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC610; } @@ -2072,7 +1967,6 @@ L_089AC618: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC63C; } @@ -2081,7 +1975,6 @@ L_089AC618: L_089AC628: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC63C; } @@ -2115,7 +2008,17 @@ L_089AC644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AC664: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(180), ctx.gpr[18]); @@ -2139,7 +2042,6 @@ L_089AC664: AOT_REGCACHE_SYNC_OUT(); return; L_089AC6B4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AC6E0; } @@ -2149,7 +2051,6 @@ L_089AC6BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AC6E0; } @@ -2158,7 +2059,6 @@ L_089AC6BC: L_089AC6CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AC6E0; } @@ -2183,7 +2083,6 @@ L_089AC6E4: AOT_REGCACHE_SYNC_OUT(); return; L_089AC6F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AC7B0; } @@ -2196,7 +2095,6 @@ L_089AC6F8: AOT_REGCACHE_SYNC_OUT(); return; L_089AC700: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AC724; } @@ -2218,7 +2116,6 @@ L_089AC720: goto L_089AC724; L_089AC724: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_089AC7B0; } @@ -2227,7 +2124,6 @@ L_089AC724: L_089AC72C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC7A8; } @@ -2240,7 +2136,6 @@ L_089AC738: AOT_REGCACHE_SYNC_OUT(); return; L_089AC740: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AC76C; } @@ -2250,7 +2145,6 @@ L_089AC748: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AC76C; } @@ -2270,7 +2164,6 @@ L_089AC758: L_089AC76C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC7A8; } @@ -2284,7 +2177,6 @@ L_089AC778: aot_gpr_4 = (64u << 16u); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC7A8; } @@ -2298,7 +2190,6 @@ L_089AC798: goto L_089AC7A8; L_089AC7A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -2308,7 +2199,6 @@ L_089AC7B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -2318,7 +2208,6 @@ L_089AC7C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -2352,7 +2241,6 @@ L_089AC7F0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089AC990; } @@ -2403,7 +2291,6 @@ L_089AC858: goto L_089AC85C; L_089AC85C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC8B4; } @@ -2411,7 +2298,6 @@ L_089AC85C: } L_089AC864: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_089AC890; } @@ -2425,7 +2311,6 @@ L_089AC86C: AOT_REGCACHE_SYNC_OUT(); return; L_089AC878: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC888; } @@ -2455,7 +2340,6 @@ L_089AC890: AOT_REGCACHE_SYNC_OUT(); return; L_089AC89C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC8AC; } @@ -2481,7 +2365,6 @@ L_089AC8B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC8CC; } @@ -2498,7 +2381,6 @@ L_089AC8C4: L_089AC8CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC8E0; } @@ -2520,7 +2402,6 @@ L_089AC8E0: AOT_REGCACHE_SYNC_OUT(); return; L_089AC8EC: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC8FC; } @@ -2542,7 +2423,6 @@ L_089AC8FC: AOT_REGCACHE_SYNC_OUT(); return; L_089AC908: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC918; } @@ -2564,7 +2444,6 @@ L_089AC918: AOT_REGCACHE_SYNC_OUT(); return; L_089AC924: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC934; } @@ -2583,7 +2462,6 @@ L_089AC934: ctx.gpr[16] = (0u | 3u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC990; } @@ -2597,7 +2475,6 @@ L_089AC948: AOT_REGCACHE_SYNC_OUT(); return; L_089AC954: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089AC97C; } @@ -2606,7 +2483,6 @@ L_089AC954: L_089AC95C: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC970; } @@ -2625,7 +2501,6 @@ L_089AC970: goto L_089AC974; L_089AC974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AC990; } @@ -2636,7 +2511,6 @@ L_089AC97C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AC948; } @@ -2656,7 +2530,6 @@ L_089AC9A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC9C0; } @@ -2670,7 +2543,6 @@ L_089AC9C0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AC9D8; } @@ -2681,7 +2553,6 @@ L_089AC9D4: goto L_089AC9D8; L_089AC9D8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089AC9F0; } @@ -2691,7 +2562,6 @@ L_089AC9E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089ACA00; } @@ -2705,7 +2575,6 @@ L_089AC9F0: goto L_089AC9F8; L_089AC9F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACA2C; } @@ -2718,7 +2587,6 @@ L_089ACA00: AOT_REGCACHE_SYNC_OUT(); return; L_089ACA08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -2727,7 +2595,6 @@ L_089ACA08: L_089ACA10: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ACA3C; } @@ -2737,7 +2604,6 @@ L_089ACA1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ACA3C; } @@ -2753,7 +2619,6 @@ L_089ACA2C: } L_089ACA34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACA90; } @@ -2761,7 +2626,6 @@ L_089ACA34: } L_089ACA3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -2785,7 +2649,6 @@ L_089ACA44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ACA88; } @@ -2884,7 +2747,6 @@ L_089ACAF0: AOT_REGCACHE_SYNC_OUT(); return; L_089ACAF8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACDFC; } @@ -2934,7 +2796,6 @@ L_089ACB44: goto L_089ACB48; L_089ACB48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ACBA4; } @@ -2961,7 +2822,6 @@ L_089ACB60: } L_089ACB6C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ACB9C; } @@ -2985,7 +2845,6 @@ L_089ACB7C: } L_089ACB84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ACD2C; } @@ -3036,7 +2895,6 @@ L_089ACBB4: } L_089ACBC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACC98; } @@ -3044,7 +2902,6 @@ L_089ACBC0: } L_089ACBC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACCDC; } @@ -3060,7 +2917,6 @@ L_089ACBD0: } L_089ACBD8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACC40; } @@ -3068,7 +2924,6 @@ L_089ACBD8: } L_089ACBE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACD2C; } @@ -3082,7 +2937,6 @@ L_089ACBE8: AOT_REGCACHE_SYNC_OUT(); return; L_089ACBF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACC24; } @@ -3092,7 +2946,6 @@ L_089ACBFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACC24; } @@ -3102,7 +2955,6 @@ L_089ACC0C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACC24; } @@ -3128,7 +2980,6 @@ L_089ACC34: goto L_089ACC38; L_089ACC38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACD2C; } @@ -3142,7 +2993,6 @@ L_089ACC40: AOT_REGCACHE_SYNC_OUT(); return; L_089ACC4C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACC7C; } @@ -3152,7 +3002,6 @@ L_089ACC54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACC7C; } @@ -3162,7 +3011,6 @@ L_089ACC64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACC7C; } @@ -3188,7 +3036,6 @@ L_089ACC8C: goto L_089ACC90; L_089ACC90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACD2C; } @@ -3197,7 +3044,6 @@ L_089ACC90: L_089ACC98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACCCC; } @@ -3207,7 +3053,6 @@ L_089ACCA4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACCCC; } @@ -3217,7 +3062,6 @@ L_089ACCB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACCCC; } @@ -3237,7 +3081,6 @@ L_089ACCCC: goto L_089ACCD4; L_089ACCD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACD2C; } @@ -3251,7 +3094,6 @@ L_089ACCDC: AOT_REGCACHE_SYNC_OUT(); return; L_089ACCE8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACD18; } @@ -3261,7 +3103,6 @@ L_089ACCF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACD18; } @@ -3271,7 +3112,6 @@ L_089ACD00: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACD18; } @@ -3297,7 +3137,6 @@ L_089ACD28: goto L_089ACD2C; L_089ACD2C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089ACDB8; } @@ -3305,7 +3144,6 @@ L_089ACD2C: } L_089ACD34: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089ACD5C; } @@ -3318,7 +3156,6 @@ L_089ACD3C: AOT_REGCACHE_SYNC_OUT(); return; L_089ACD44: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACD5C; } @@ -3328,7 +3165,6 @@ L_089ACD4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ACDB0; } @@ -3355,7 +3191,6 @@ L_089ACD6C: } L_089ACD78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ACDA8; } @@ -3379,7 +3214,6 @@ L_089ACD88: } L_089ACD90: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ACDB8; } @@ -3411,7 +3245,6 @@ L_089ACDA8: } L_089ACDB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -3457,7 +3290,6 @@ L_089ACDF8: goto L_089ACDFC; L_089ACDFC: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_089ACE4C; } @@ -3470,7 +3302,6 @@ L_089ACE04: AOT_REGCACHE_SYNC_OUT(); return; L_089ACE0C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACE24; } @@ -3480,7 +3311,6 @@ L_089ACE14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ACE44; } @@ -3505,7 +3335,6 @@ L_089ACE38: } L_089ACE44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -3517,7 +3346,6 @@ L_089ACE4C: L_089ACE50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ACF38; } @@ -3525,7 +3353,6 @@ L_089ACE50: } L_089ACE5C: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_089ACF38; } @@ -3542,7 +3369,6 @@ L_089ACE64: } L_089ACE70: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089ACF38; } @@ -3555,7 +3381,6 @@ L_089ACE78: AOT_REGCACHE_SYNC_OUT(); return; L_089ACE80: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089ACF38; } @@ -3565,7 +3390,6 @@ L_089ACE88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089ACF38; } @@ -3580,7 +3404,6 @@ L_089ACEA0: aot_gpr_4 = (aot_gpr_2 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089ACEC4; } @@ -3589,7 +3412,6 @@ L_089ACEA0: L_089ACEB0: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089ACECC; } @@ -3597,7 +3419,6 @@ L_089ACEB0: } L_089ACEBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACF38; } @@ -3605,7 +3426,6 @@ L_089ACEBC: } L_089ACEC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -3622,7 +3442,6 @@ L_089ACECC: AOT_REGCACHE_SYNC_OUT(); return; L_089ACEE4: aot_gpr_31 = (0x089ACEECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089ACEECu) goto L_089ACEEC; AOT_REGCACHE_SYNC_OUT(); return; L_089ACEEC: @@ -3667,9 +3486,7 @@ L_089ACEEC: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089ACF38; } @@ -3677,7 +3494,6 @@ L_089ACEEC: } L_089ACF30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -3701,7 +3517,6 @@ L_089ACF4C: AOT_REGCACHE_SYNC_OUT(); return; L_089ACF54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089ACF70; } @@ -3720,7 +3535,6 @@ L_089ACF68: L_089ACF70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089ACFA8; } @@ -3746,7 +3560,6 @@ L_089ACF94: AOT_REGCACHE_SYNC_OUT(); return; L_089ACFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ACFCC; } @@ -3809,7 +3622,6 @@ L_089AD01C: AOT_REGCACHE_SYNC_OUT(); return; L_089AD024: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AD060; } @@ -3826,7 +3638,6 @@ L_089AD034: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD060; } @@ -3874,7 +3685,6 @@ L_089AD09C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(535), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(165))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD0C4; } @@ -3888,7 +3698,6 @@ L_089AD0B0: AOT_REGCACHE_SYNC_OUT(); return; L_089AD0BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD240; } @@ -3901,9 +3710,7 @@ L_089AD0C4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD14C; } @@ -3913,7 +3720,6 @@ L_089AD0E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD14C; } @@ -3922,7 +3728,6 @@ L_089AD0E8: L_089AD0F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089AD14C; } @@ -3932,7 +3737,6 @@ L_089AD104: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD14C; } @@ -3964,7 +3768,6 @@ L_089AD13C: AOT_REGCACHE_SYNC_OUT(); return; L_089AD144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD240; } @@ -3977,7 +3780,6 @@ L_089AD14C: AOT_REGCACHE_SYNC_OUT(); return; L_089AD154: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AD178; } @@ -3985,7 +3787,6 @@ L_089AD154: } L_089AD15C: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_089AD178; } @@ -3999,7 +3800,6 @@ L_089AD164: AOT_REGCACHE_SYNC_OUT(); return; L_089AD170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD184; } @@ -4013,7 +3813,6 @@ L_089AD178: AOT_REGCACHE_SYNC_OUT(); return; L_089AD184: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_089AD1D4; } @@ -4024,7 +3823,6 @@ L_089AD18C: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AD1B0; } @@ -4051,7 +3849,6 @@ L_089AD1B8: AOT_REGCACHE_SYNC_OUT(); return; L_089AD1CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD238; } @@ -4061,7 +3858,6 @@ L_089AD1D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD1F4; } @@ -4071,7 +3867,6 @@ L_089AD1E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AD218; } @@ -4092,7 +3887,6 @@ L_089AD1FC: AOT_REGCACHE_SYNC_OUT(); return; L_089AD210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD238; } @@ -4128,7 +3922,6 @@ L_089AD240: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD274; } @@ -4148,7 +3941,6 @@ L_089AD274: L_089AD27C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AD2BC; } @@ -4204,7 +3996,17 @@ L_089AD2BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AD2F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[18]); @@ -4230,7 +4032,6 @@ L_089AD32C: AOT_REGCACHE_SYNC_OUT(); return; L_089AD334: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AD358; } @@ -4238,7 +4039,6 @@ L_089AD334: } L_089AD33C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4293,7 +4093,6 @@ L_089AD394: aot_gpr_5 = (0u | 232u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD3BC; } @@ -4304,7 +4103,6 @@ L_089AD3A8: aot_gpr_5 = (0u | 231u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AD3C8; } @@ -4317,9 +4115,7 @@ L_089AD3BC: goto L_089AD3C8; L_089AD3C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD458; } @@ -4328,7 +4124,6 @@ L_089AD3C8: L_089AD3D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD458; } @@ -4379,7 +4174,6 @@ L_089AD42C: goto L_089AD430; L_089AD430: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD458; } @@ -4396,7 +4190,6 @@ L_089AD438: AOT_REGCACHE_SYNC_OUT(); return; L_089AD450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD464; } @@ -4409,7 +4202,6 @@ L_089AD458: goto L_089AFEFC; L_089AD464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4426,7 +4218,6 @@ L_089AD46C: } L_089AD478: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AD564; } @@ -4437,9 +4228,7 @@ L_089AD480: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD550; } @@ -4448,7 +4237,6 @@ L_089AD480: L_089AD49C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD550; } @@ -4478,7 +4266,6 @@ L_089AD4D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AD50C; } @@ -4488,7 +4275,6 @@ L_089AD4E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD50C; } @@ -4499,7 +4285,6 @@ L_089AD4F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD550; } @@ -4508,7 +4293,6 @@ L_089AD4F8: L_089AD50C: aot_gpr_4 = (0u | 130u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089AD534; } @@ -4524,7 +4308,6 @@ L_089AD518: AOT_REGCACHE_SYNC_OUT(); return; L_089AD52C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD55C; } @@ -4540,7 +4323,6 @@ L_089AD534: AOT_REGCACHE_SYNC_OUT(); return; L_089AD548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD55C; } @@ -4553,7 +4335,6 @@ L_089AD550: goto L_089AFEFC; L_089AD55C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4562,7 +4343,6 @@ L_089AD55C: L_089AD564: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AD5B0; } @@ -4602,7 +4382,6 @@ L_089AD5B0: AOT_REGCACHE_SYNC_OUT(); return; L_089AD5B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AD66C; } @@ -4615,9 +4394,7 @@ L_089AD5C0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD5F8; } @@ -4630,7 +4407,6 @@ L_089AD5E4: goto L_089AFEFC; L_089AD5F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD66C; } @@ -4657,9 +4433,7 @@ L_089AD60C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD638; } @@ -4672,7 +4446,6 @@ L_089AD624: goto L_089AFEFC; L_089AD630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD66C; } @@ -4683,7 +4456,6 @@ L_089AD638: aot_gpr_5 = (0u + static_cast(-950)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AD660; } @@ -4696,7 +4468,6 @@ L_089AD64C: goto L_089AFEFC; L_089AD658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AD66C; } @@ -4711,7 +4482,6 @@ L_089AD66C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4783,9 +4553,7 @@ L_089AD690: aot_gpr_5 = (aot_gpr_5 | 55051u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD738; } @@ -4806,7 +4574,6 @@ L_089AD738: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089AD690; } @@ -4814,7 +4581,6 @@ L_089AD738: } L_089AD74C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4827,7 +4593,6 @@ L_089AD754: AOT_REGCACHE_SYNC_OUT(); return; L_089AD75C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AD794; } @@ -4837,7 +4602,6 @@ L_089AD764: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD794; } @@ -4847,7 +4611,6 @@ L_089AD774: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AD794; } @@ -4857,7 +4620,6 @@ L_089AD784: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4868,9 +4630,7 @@ L_089AD794: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4883,7 +4643,6 @@ L_089AD7B0: AOT_REGCACHE_SYNC_OUT(); return; L_089AD7B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AD7D4; } @@ -4915,7 +4674,17 @@ L_089AD7D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AD800: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -4964,7 +4733,6 @@ L_089AD860: AOT_REGCACHE_SYNC_OUT(); return; L_089AD868: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AD920; } @@ -5045,7 +4813,6 @@ L_089AD8E8: L_089AD914: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1300), ctx.gpr[16]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ADB7C; } @@ -5055,7 +4822,6 @@ L_089AD920: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ADAC4; } @@ -5065,7 +4831,6 @@ L_089AD930: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ADAB0; } @@ -5228,7 +4993,6 @@ L_089AD97C: aot_mem.aot_direct_store32_block(ctx.gpr[17] + static_cast(48), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ADA88; } @@ -5241,7 +5005,6 @@ L_089ADA78: AOT_REGCACHE_SYNC_OUT(); return; L_089ADA80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ADAA8; } @@ -5266,7 +5029,6 @@ L_089ADA9C: AOT_REGCACHE_SYNC_OUT(); return; L_089ADAA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ADBAC; } @@ -5376,7 +5138,17 @@ L_089ADBAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ADBC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(468))); @@ -5419,7 +5191,6 @@ L_089ADC20: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089ADD14; } @@ -5434,7 +5205,6 @@ L_089ADC44: L_089ADC50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ADD14; } @@ -5503,7 +5273,6 @@ L_089ADCB8: AOT_REGCACHE_SYNC_OUT(); return; L_089ADD14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE4D4; } @@ -5533,7 +5302,6 @@ L_089ADD44: AOT_REGCACHE_SYNC_OUT(); return; L_089ADD50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089ADD64; } @@ -5758,7 +5526,6 @@ L_089ADE98: AOT_REGCACHE_SYNC_OUT(); return; L_089ADEAC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089AE158; } @@ -5767,7 +5534,6 @@ L_089ADEAC: L_089ADEB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(480))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089AE02C; } @@ -5777,7 +5543,6 @@ L_089ADEC0: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE02C; } @@ -5812,7 +5577,6 @@ L_089ADEFC: aot_gpr_5 = (aot_gpr_29 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE01C; } @@ -5826,7 +5590,6 @@ L_089ADF20: aot_gpr_4 = (aot_gpr_29 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ADF80; } @@ -5854,7 +5617,6 @@ L_089ADF6C: AOT_REGCACHE_SYNC_OUT(); return; L_089ADF78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ADFB8; } @@ -5888,7 +5650,6 @@ L_089ADFB8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (0u | 197u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ADFF8; } @@ -5923,7 +5684,6 @@ L_089AE000: AOT_REGCACHE_SYNC_OUT(); return; L_089AE014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE02C; } @@ -5933,7 +5693,6 @@ L_089AE01C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ADED0; } @@ -5943,7 +5702,6 @@ L_089AE02C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(474))); aot_gpr_4 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE0B0; } @@ -5956,7 +5714,6 @@ L_089AE03C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(474))); aot_gpr_4 = (static_cast(aot_gpr_4) < 111 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE068; } @@ -5969,7 +5726,6 @@ L_089AE058: AOT_REGCACHE_SYNC_OUT(); return; L_089AE060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE160; } @@ -5999,7 +5755,6 @@ L_089AE094: aot_gpr_5 = (0u | 18u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(181))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE160; } @@ -6017,7 +5772,6 @@ L_089AE0A4: L_089AE0B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE0D8; } @@ -6064,7 +5818,6 @@ L_089AE10C: aot_gpr_5 = (0u | 18u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(181))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE128; } @@ -6072,7 +5825,6 @@ L_089AE10C: } L_089AE120: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089AE150; } @@ -6082,7 +5834,6 @@ L_089AE128: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(474))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE148; } @@ -6105,7 +5856,6 @@ L_089AE148: AOT_REGCACHE_SYNC_OUT(); return; L_089AE150: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE160; } @@ -6142,7 +5892,6 @@ L_089AE184: L_089AE188: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE1A8; } @@ -6151,7 +5900,6 @@ L_089AE188: L_089AE194: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE1A8; } @@ -6164,7 +5912,6 @@ L_089AE1A0: AOT_REGCACHE_SYNC_OUT(); return; L_089AE1A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE4D4; } @@ -6183,7 +5930,6 @@ L_089AE1B0: L_089AE1CC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089AE288; } @@ -6214,9 +5960,7 @@ L_089AE204: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AE288; } @@ -6260,7 +6004,6 @@ L_089AE258: AOT_REGCACHE_SYNC_OUT(); return; L_089AE280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE4D4; } @@ -6320,7 +6063,6 @@ L_089AE2EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(214))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE3D0; } @@ -6362,7 +6104,6 @@ L_089AE328: aot_gpr_5 = (aot_gpr_29 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE3C8; } @@ -6371,7 +6112,6 @@ L_089AE328: L_089AE360: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE388; } @@ -6430,7 +6170,6 @@ L_089AE3C8: } L_089AE3D0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089AE3EC; } @@ -6448,7 +6187,6 @@ L_089AE3E0: goto L_089AE3EC; L_089AE3EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE4D4; } @@ -6479,9 +6217,7 @@ L_089AE3F4: L_089AE434: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AE450; } @@ -6497,7 +6233,6 @@ L_089AE448: } L_089AE450: aot_gpr_31 = (0x089AE458u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089AE458u) goto L_089AE458; AOT_REGCACHE_SYNC_OUT(); return; L_089AE458: @@ -6566,7 +6301,6 @@ L_089AE47C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(360))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE4D4; } @@ -6575,7 +6309,6 @@ L_089AE47C: L_089AE4C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(352))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE4D4; } @@ -6601,7 +6334,17 @@ L_089AE4D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AE4F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[18]); @@ -6671,7 +6414,6 @@ L_089AE584: L_089AE594: aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE604; } @@ -6679,7 +6421,6 @@ L_089AE594: } L_089AE5A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE5B0; } @@ -6687,7 +6428,6 @@ L_089AE5A0: } L_089AE5A8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE604; } @@ -6725,7 +6465,6 @@ L_089AE5D8: AOT_REGCACHE_SYNC_OUT(); return; L_089AE5E0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AE5F4; } @@ -6746,7 +6485,6 @@ L_089AE5F4: goto L_089AE5FC; L_089AE5FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE60C; } @@ -6760,7 +6498,6 @@ L_089AE60C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE65C; } @@ -6782,7 +6519,6 @@ L_089AE628: AOT_REGCACHE_SYNC_OUT(); return; L_089AE630: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AE64C; } @@ -6821,7 +6557,6 @@ L_089AE674: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AE6A4; } @@ -6831,7 +6566,6 @@ L_089AE684: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AE6A4; } @@ -6841,7 +6575,6 @@ L_089AE694: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE6B8; } @@ -6854,7 +6587,6 @@ L_089AE6A4: goto L_089AFEFC; L_089AE6B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE6C4; } @@ -6925,7 +6657,6 @@ L_089AE72C: L_089AE740: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AE758; } @@ -6970,7 +6701,17 @@ L_089AE780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AE7A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6981,7 +6722,6 @@ L_089AE7A0: AOT_REGCACHE_SYNC_OUT(); return; L_089AE7BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AE92C; } @@ -6996,7 +6736,6 @@ L_089AE7CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE818; } @@ -7007,7 +6746,6 @@ L_089AE7DC: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AE818; } @@ -7024,9 +6762,7 @@ L_089AE7F8: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AE844; } @@ -7041,7 +6777,6 @@ L_089AE820: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 197u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE860; } @@ -7054,7 +6789,6 @@ L_089AE830: goto L_089AFEFC; L_089AE83C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE8C4; } @@ -7073,7 +6807,6 @@ L_089AE84C: AOT_REGCACHE_SYNC_OUT(); return; L_089AE858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AEABC; } @@ -7090,9 +6823,7 @@ L_089AE868: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AE89C; } @@ -7105,7 +6836,6 @@ L_089AE888: goto L_089AFEFC; L_089AE894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AE8C4; } @@ -7134,7 +6864,6 @@ L_089AE8CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AE924; } @@ -7143,7 +6872,6 @@ L_089AE8CC: L_089AE8DC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AE924; } @@ -7174,7 +6902,6 @@ L_089AE904: AOT_REGCACHE_SYNC_OUT(); return; L_089AE924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AEABC; } @@ -7194,7 +6921,6 @@ L_089AE92C: L_089AE94C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AEA64; } @@ -7204,7 +6930,6 @@ L_089AE958: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089AE998; } @@ -7214,7 +6939,6 @@ L_089AE968: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089AE998; } @@ -7224,7 +6948,6 @@ L_089AE978: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089AE998; } @@ -7234,7 +6957,6 @@ L_089AE988: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); ctx.gpr[17] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089AE9DC; } @@ -7268,7 +6990,6 @@ L_089AE9C8: AOT_REGCACHE_SYNC_OUT(); return; L_089AE9D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AEA64; } @@ -7321,7 +7042,6 @@ L_089AEA2C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AEA64; } @@ -7332,7 +7052,6 @@ L_089AEA3C: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AEA64; } @@ -7364,7 +7083,6 @@ L_089AEA6C: L_089AEA80: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AEAB0; } @@ -7374,7 +7092,6 @@ L_089AEA8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AEAB0; } @@ -7387,7 +7104,6 @@ L_089AEA9C: goto L_089AFEFC; L_089AEAA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AEABC; } @@ -7411,7 +7127,17 @@ L_089AEABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AEAD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(563))); @@ -7452,7 +7178,6 @@ L_089AEB60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AEB78; } @@ -7480,7 +7205,6 @@ L_089AEB84: L_089AEB98: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089AEBDC; } @@ -7490,7 +7214,6 @@ L_089AEBA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AEBDC; } @@ -7500,7 +7223,6 @@ L_089AEBB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AEBDC; } @@ -7509,7 +7231,6 @@ L_089AEBB4: L_089AEBC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_089AEBDC; } @@ -7570,7 +7291,6 @@ L_089AEC2C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AEC54; } @@ -7583,9 +7303,7 @@ L_089AEC48: goto L_089AEC54; L_089AEC54: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AEC64; } @@ -7634,7 +7352,6 @@ L_089AEC64: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(2072), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089AED30; } @@ -7642,7 +7359,6 @@ L_089AEC64: } L_089AEC98: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_089AECCC; } @@ -7718,7 +7434,6 @@ L_089AED30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AEDD4; } @@ -7803,7 +7518,6 @@ L_089AEDD4: AOT_REGCACHE_SYNC_OUT(); return; L_089AEDDC: { const bool branch_taken = aot_gpr_2 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089AEDFC; } @@ -7828,7 +7542,6 @@ L_089AEDFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AEE20; } @@ -7842,7 +7555,6 @@ L_089AEE0C: AOT_REGCACHE_SYNC_OUT(); return; L_089AEE18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AEE78; } @@ -7906,7 +7618,17 @@ L_089AEE78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AEEB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[16]); @@ -7949,7 +7671,6 @@ L_089AEF10: L_089AEF1C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AEF4C; } @@ -7961,9 +7682,7 @@ L_089AEF28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(636))); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AEF4C; } @@ -7975,7 +7694,6 @@ L_089AEF48: L_089AEF4C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089AEF98; } @@ -7983,7 +7701,6 @@ L_089AEF4C: } L_089AEF58: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AEF98; } @@ -7996,7 +7713,6 @@ L_089AEF60: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AEF98; } @@ -8007,9 +7723,7 @@ L_089AEF7C: aot_gpr_4 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF00C; } @@ -8033,7 +7747,6 @@ L_089AEFA0: L_089AEFBC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AF004; } @@ -8046,7 +7759,6 @@ L_089AEFC8: AOT_REGCACHE_SYNC_OUT(); return; L_089AEFD0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF004; } @@ -8076,7 +7788,6 @@ L_089AEFF4: AOT_REGCACHE_SYNC_OUT(); return; L_089AF004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF300; } @@ -8110,9 +7821,7 @@ L_089AF020: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF04C; } @@ -8126,7 +7835,6 @@ L_089AF04C: AOT_REGCACHE_SYNC_OUT(); return; L_089AF058: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF0BC; } @@ -8135,7 +7843,6 @@ L_089AF058: L_089AF060: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AF0BC; } @@ -8148,7 +7855,6 @@ L_089AF06C: AOT_REGCACHE_SYNC_OUT(); return; L_089AF074: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF0BC; } @@ -8199,7 +7905,6 @@ L_089AF0E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF100; } @@ -8209,7 +7914,6 @@ L_089AF0F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF300; } @@ -8220,7 +7924,6 @@ L_089AF100: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF204; } @@ -8230,7 +7933,6 @@ L_089AF114: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AF204; } @@ -8243,7 +7945,6 @@ L_089AF124: AOT_REGCACHE_SYNC_OUT(); return; L_089AF12C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF204; } @@ -8258,7 +7959,6 @@ L_089AF13C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 114u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF164; } @@ -8273,7 +7973,6 @@ L_089AF154: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 115u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF19C; } @@ -8290,9 +7989,7 @@ L_089AF16C: aot_gpr_4 = (aot_gpr_4 | 62285u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF19C; } @@ -8317,7 +8014,6 @@ L_089AF1A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 116u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF1CC; } @@ -8332,7 +8028,6 @@ L_089AF1BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 117u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF300; } @@ -8349,9 +8044,7 @@ L_089AF1D4: aot_gpr_4 = (aot_gpr_4 | 62285u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF300; } @@ -8371,7 +8064,6 @@ L_089AF204: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF300; } @@ -8384,7 +8076,6 @@ L_089AF214: AOT_REGCACHE_SYNC_OUT(); return; L_089AF21C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF300; } @@ -8401,9 +8092,7 @@ L_089AF22C: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF300; } @@ -8424,9 +8113,7 @@ L_089AF260: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(12))); aot_fpr_12 = ctx.fpr[24] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF300; } @@ -8441,7 +8128,6 @@ L_089AF280: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 196u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF2B4; } @@ -8459,7 +8145,6 @@ L_089AF290: AOT_REGCACHE_SYNC_OUT(); return; L_089AF2AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF300; } @@ -8474,7 +8159,6 @@ L_089AF2BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 118u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF2E4; } @@ -8489,7 +8173,6 @@ L_089AF2D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 119u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF300; } @@ -8524,7 +8207,17 @@ L_089AF300: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AF330: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -8542,7 +8235,6 @@ L_089AF330: L_089AF364: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089AF380; } @@ -8552,7 +8244,6 @@ L_089AF370: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF5D4; } @@ -8562,7 +8253,6 @@ L_089AF380: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF624; } @@ -8575,9 +8265,7 @@ L_089AF390: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF3C4; } @@ -8587,7 +8275,6 @@ L_089AF3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF624; } @@ -8638,7 +8325,6 @@ L_089AF3C4: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_13)) && aot_fpr_20 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); if (branch_taken) { @@ -8649,7 +8335,6 @@ L_089AF3C4: L_089AF408: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089AF428; @@ -8679,7 +8364,6 @@ L_089AF434: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); if (branch_taken) { @@ -8690,9 +8374,7 @@ L_089AF434: L_089AF450: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF46C; } @@ -8708,7 +8390,6 @@ L_089AF464: } L_089AF46C: aot_gpr_31 = (0x089AF474u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089AF474u) goto L_089AF474; AOT_REGCACHE_SYNC_OUT(); return; L_089AF474: @@ -8720,9 +8401,7 @@ L_089AF478: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF4AC; } @@ -8744,9 +8423,7 @@ L_089AF4AC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF4D8; } @@ -8764,9 +8441,7 @@ L_089AF4D8: aot_gpr_4 = (aot_gpr_4 | 2706u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF5CC; } @@ -8775,7 +8450,6 @@ L_089AF4D8: L_089AF4F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AF5CC; } @@ -8788,7 +8462,6 @@ L_089AF504: AOT_REGCACHE_SYNC_OUT(); return; L_089AF50C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF53C; } @@ -8799,9 +8472,7 @@ L_089AF514: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF53C; } @@ -8810,7 +8481,6 @@ L_089AF514: L_089AF530: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AF59C; } @@ -8855,7 +8525,6 @@ L_089AF56C: L_089AF580: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AF59C; } @@ -8867,7 +8536,6 @@ L_089AF58C: L_089AF590: aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF5CC; } @@ -8899,7 +8567,6 @@ L_089AF5BC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -8907,7 +8574,6 @@ L_089AF5BC: } L_089AF5CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF624; } @@ -8917,7 +8583,6 @@ L_089AF5D4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF624; } @@ -8926,7 +8591,6 @@ L_089AF5D4: L_089AF5E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AF624; } @@ -8936,7 +8600,6 @@ L_089AF5F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AF624; } @@ -8946,7 +8609,6 @@ L_089AF600: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AF624; } @@ -9029,9 +8691,7 @@ L_089AF658: { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AF750; } @@ -9052,7 +8712,6 @@ L_089AF6C8: AOT_REGCACHE_SYNC_OUT(); return; L_089AF6E8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF70C; } @@ -9076,7 +8735,6 @@ L_089AF6F0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9097,7 +8755,6 @@ L_089AF70C: AOT_REGCACHE_SYNC_OUT(); return; L_089AF72C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9121,7 +8778,6 @@ L_089AF734: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9142,7 +8798,6 @@ L_089AF750: AOT_REGCACHE_SYNC_OUT(); return; L_089AF770: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF8C0; } @@ -9156,7 +8811,6 @@ L_089AF778: AOT_REGCACHE_SYNC_OUT(); return; L_089AF784: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF850; } @@ -9166,7 +8820,6 @@ L_089AF78C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF850; } @@ -9176,7 +8829,6 @@ L_089AF79C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF850; } @@ -9224,7 +8876,6 @@ L_089AF7EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF850; } @@ -9234,7 +8885,6 @@ L_089AF7FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AF850; } @@ -9257,7 +8907,6 @@ L_089AF810: AOT_REGCACHE_SYNC_OUT(); return; L_089AF82C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF850; } @@ -9281,7 +8930,6 @@ L_089AF834: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9291,7 +8939,6 @@ L_089AF850: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089AF8A4; } @@ -9312,7 +8959,6 @@ L_089AF860: AOT_REGCACHE_SYNC_OUT(); return; L_089AF880: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF8A4; } @@ -9336,7 +8982,6 @@ L_089AF888: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9360,7 +9005,6 @@ L_089AF8A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9381,7 +9025,6 @@ L_089AF8C0: AOT_REGCACHE_SYNC_OUT(); return; L_089AF8E0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AF8FC; } @@ -9420,7 +9063,17 @@ L_089AF8FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AF91C: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(216), ctx.gpr[18]); @@ -9469,7 +9122,6 @@ L_089AF97C: } L_089AF984: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089AF994; } @@ -9541,7 +9193,6 @@ L_089AF9E0: AOT_REGCACHE_SYNC_OUT(); return; L_089AF9E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AFA58; } @@ -9551,7 +9202,6 @@ L_089AF9F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFA58; } @@ -9572,7 +9222,6 @@ L_089AFA00: AOT_REGCACHE_SYNC_OUT(); return; L_089AFA20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AFA58; } @@ -9632,7 +9281,6 @@ L_089AFA60: L_089AFA90: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_089AFBD4; } @@ -9646,7 +9294,6 @@ L_089AFA9C: AOT_REGCACHE_SYNC_OUT(); return; L_089AFAA8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AFB34; } @@ -9656,7 +9303,6 @@ L_089AFAB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFB34; } @@ -9677,7 +9323,6 @@ L_089AFAC0: AOT_REGCACHE_SYNC_OUT(); return; L_089AFAE0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AFB34; } @@ -9726,7 +9371,6 @@ L_089AFB34: AOT_REGCACHE_SYNC_OUT(); return; L_089AFB40: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9736,7 +9380,6 @@ L_089AFB48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9757,7 +9400,6 @@ L_089AFB58: AOT_REGCACHE_SYNC_OUT(); return; L_089AFB78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9798,7 +9440,6 @@ L_089AFB98: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), std::bit_cast(aot_fpr_12)); ctx.gpr[20] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9822,7 +9463,6 @@ L_089AFBE8: AOT_REGCACHE_SYNC_OUT(); return; L_089AFBF0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9832,7 +9472,6 @@ L_089AFBF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9853,7 +9492,6 @@ L_089AFC08: AOT_REGCACHE_SYNC_OUT(); return; L_089AFC28: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9866,7 +9504,6 @@ L_089AFC30: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFC98; } @@ -9912,7 +9549,6 @@ L_089AFC98: aot_gpr_5 = (2u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFDFC; } @@ -9922,7 +9558,6 @@ L_089AFCAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(628)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089AFDFC; } @@ -9936,7 +9571,6 @@ L_089AFCBC: AOT_REGCACHE_SYNC_OUT(); return; L_089AFCC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AFD54; } @@ -9946,7 +9580,6 @@ L_089AFCD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFD54; } @@ -9967,7 +9600,6 @@ L_089AFCE0: AOT_REGCACHE_SYNC_OUT(); return; L_089AFD00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AFD54; } @@ -10016,7 +9648,6 @@ L_089AFD54: AOT_REGCACHE_SYNC_OUT(); return; L_089AFD60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089AFDEC; } @@ -10026,7 +9657,6 @@ L_089AFD68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089AFDEC; } @@ -10047,7 +9677,6 @@ L_089AFD78: AOT_REGCACHE_SYNC_OUT(); return; L_089AFD98: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089AFDEC; } @@ -10090,7 +9719,6 @@ L_089AFDB8: goto L_089AFDEC; L_089AFDEC: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089AFDFC; } @@ -10133,7 +9761,6 @@ L_089AFDFC: { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_089AFE80; @@ -10173,9 +9800,7 @@ L_089AFE80: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089AFED8; } @@ -10221,7 +9846,17 @@ L_089AFEDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089AFEFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-592)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(548), std::bit_cast(ctx.fpr[22])); @@ -10243,7 +9878,6 @@ L_089AFEFC: AOT_REGCACHE_SYNC_OUT(); return; L_089AFF50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0107_entry, 107u, 7u, 0x089B0074u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10258,7 +9892,6 @@ L_089AFF60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 412u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0107_entry, 107u, 7u, 0x089B0074u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0107.cpp b/profiles/vcs/generated/generated_unit_0107.cpp index 2ebb3e2..04fc906 100644 --- a/profiles/vcs/generated/generated_unit_0107.cpp +++ b/profiles/vcs/generated/generated_unit_0107.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0107[4092] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 4, 0, 5, 6, 0, 7, 0, 0, - 0, 0, 8, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 13, 14, 15, 0, 16, 0, 0, 0, 17, 0, 0, - 18, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 23, 0, 0, 0, 24, 0, 25, 0, 0, 0, 26, 0, 27, 0, 0, 0, 28, 0, 29, 0, 0, - 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 0, 41, 0, 42, 0, 0, 0, - 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 0, 47, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 52, 0, 53, - 0, 54, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 61, - 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, 0, 0, 0, 0, - 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, - 75, 0, 76, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 81, 0, 82, 83, 0, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 87, 0, 88, 89, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 93, 0, - 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 96, 0, 97, 98, 0, 99, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, - 102, 0, 0, 0, 0, 103, 0, 104, 0, 105, 106, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 110, 0, - 111, 112, 0, 0, 0, 0, 113, 0, 114, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, 118, 0, 119, 120, 0, 0, - 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 124, 0, 125, 126, 127, 0, 128, 0, 129, 0, 130, 0, 0, 0, 131, - 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, 0, 134, 0, 135, 0, 136, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 139, 0, 140, 0, 141, 0, - 142, 0, 143, 0, 0, 144, 0, 145, 0, 146, 0, 0, 147, 0, 0, 0, 148, 0, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 151, 0, - 152, 0, 153, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, - 160, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 166, - 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, - 173, 0, 174, 0, 0, 0, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 179, 0, 0, 180, 0, 0, 0, - 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 185, 186, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, - 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 198, 199, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, - 0, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 213, 0, 0, 0, - 214, 0, 215, 0, 216, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 219, 0, 220, 0, 0, 0, 0, 221, 0, 0, 222, 0, 223, 0, 0, 0, 0, - 0, 0, 224, 0, 0, 0, 225, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 229, - 0, 230, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 236, - 0, 0, 0, 237, 0, 0, 0, 238, 239, 240, 0, 241, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 245, 246, 247, 0, 248, - 0, 249, 0, 250, 0, 251, 0, 0, 0, 252, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, 258, 0, 0, 0, 259, - 0, 260, 0, 0, 0, 261, 0, 262, 0, 0, 0, 263, 0, 264, 0, 265, 0, 0, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, - 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 273, 0, 0, 0, 274, 0, 275, 0, 0, 276, 0, 0, 0, 0, 277, 0, 278, 0, - 0, 0, 279, 0, 0, 0, 280, 0, 0, 281, 282, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 285, - 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 295, 0, - 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 0, 0, 302, 0, 303, 0, 0, 0, 304, 0, 305, - 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 311, - 0, 312, 0, 313, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, 0, 317, 0, 318, 0, 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 322, 0, 0, - 0, 323, 0, 324, 0, 0, 0, 325, 0, 326, 0, 0, 0, 327, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 331, - 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0, 335, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, - 338, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 343, 344, 0, 0, 0, 345, 0, 346, 347, 0, 348, 0, 349, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 352, 0, 0, 353, 354, 0, 0, 0, 0, 355, 0, 0, 356, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, - 0, 359, 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 365, 0, 366, 0, 0, 367, 0, 0, - 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, 0, - 0, 0, 0, 376, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 382, 0, 0, 0, 0, 383, 0, 0, - 384, 0, 0, 0, 385, 0, 0, 386, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 0, 399, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, - 402, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 0, 405, 0, 406, 0, 0, 0, 407, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, - 416, 0, 417, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 421, 0, 0, 422, 0, 0, 423, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 426, 0, 427, 0, 0, 0, 428, 0, 429, 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, - 0, 434, 0, 0, 0, 0, 435, 0, 436, 0, 437, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 441, 0, 0, 442, 0, 0, - 443, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 449, - 0, 450, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 457, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 460, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, - 0, 468, 0, 0, 0, 469, 0, 0, 0, 470, 0, 471, 0, 0, 472, 0, 473, 0, 0, 0, 0, 474, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 480, 0, 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 483, - 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 487, 0, 0, 488, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 492, 0, 493, 0, 494, 0, 0, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, - 499, 0, 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, 505, 0, 0, 0, 0, 506, 0, 0, 0, - 507, 0, 0, 508, 0, 0, 509, 0, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 516, 0, 517, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, - 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 526, 0, 527, 0, 0, 528, 0, 529, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 534, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, - 0, 0, 537, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, 542, 0, 0, 543, 0, 0, 0, 544, - 0, 0, 0, 545, 0, 0, 0, 546, 0, 547, 548, 0, 0, 549, 0, 0, 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 557, - 0, 0, 0, 558, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, 562, 0, 563, 0, 564, 0, 0, 565, 0, 566, 0, 567, 0, 568, - 0, 0, 0, 569, 0, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, - 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, - 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 592, 0, 0, 593, 0, 594, 0, - 0, 595, 0, 0, 0, 596, 0, 597, 0, 0, 598, 0, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 0, 0, 605, 0, 606, 0, 0, - 607, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 611, 0, - 0, 0, 612, 0, 0, 613, 0, 0, 614, 0, 615, 0, 616, 0, 617, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, - 622, 0, 0, 623, 0, 0, 624, 0, 625, 0, 0, 626, 0, 0, 627, 0, 628, 0, 629, 0, 0, 0, 630, 0, 631, 0, 0, 632, 0, 0, 633, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 635, 0, 636, 0, 0, 637, 0, 0, 0, 638, - 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 640, 0, 641, 0, 642, 643, 0, 0, 644, 0, 0, 645, 0, 0, 646, 0, 0, 647, 0, 648, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, - 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, - 0, 661, 0, 662, 663, 0, 0, 664, 665, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, - 670, 0, 671, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 680, 0, 0, 0, 0, 681, 0, 682, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, - 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 0, 0, 689, 0, 690, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 692, 0, 0, 693, 0, 0, 694, 0, 0, 695, 0, 0, 0, 696, - 0, 697, 0, 0, 698, 0, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 708, 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, - 713, 0, 0, 714, 0, 715, 0, 716, 0, 717, 0, 718, 0, 0, 0, 719, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 0, 724, 0, 0, 725, 0, 0, 726, 0, 727, 0, 0, 728, 0, 0, 0, - 729, 0, 0, 730, 731, 0, 0, 732, 0, 0, 733, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, - 0, 736, 0, 0, 737, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 741, 0, 742, 0, 0, 743, 0, 0, 0, 744, 0, 745, 0, 746, 0, - 747, 0, 0, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 751, 0, 0, 0, 752, 0, 753, 0, 0, 0, 0, 0, 754, - 0, 755, 0, 0, 756, 0, 0, 757, 0, 758, 0, 759, 0, 760, 0, 0, 0, 0, 761, 0, 762, 0, 763, 0, 764, 0, 765, 0, 766, 0, 0, 767, - 0, 0, 0, 0, 768, 0, 769, 0, 0, 770, 0, 771, 0, 772, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 0, 776, - 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 779, 0, 0, 0, 780, 0, 0, 0, 781, 0, 0, 0, 0, 782, 0, - 783, 0, 0, 0, 0, 784, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 787, 0, 0, 0, 788, 0, 789, 0, 790, 0, 0, 0, - 791, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 794, 0, 795, 0, 796, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 799, 0, - 0, 800, 0, 801, 0, 0, 0, 0, 802, 0, 803, 0, 804, 0, 805, 0, 0, 806, 0, 807, 0, 0, 0, 0, 808, 0, 809, 0, 0, 810, 0, 0, - 0, 0, 0, 811, 0, 0, 0, 0, 0, 812, 0, 0, 813, 0, 814, 0, 0, 0, 0, 815, 0, 816, 0, 817, 0, 818, 0, 0, 0, 819, 0, 0, - 820, 0, 821, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 825, 0, 826, 0, 827, 0, 828, 0, 0, 0, 0, 829, 0, 0, - 0, 0, 0, 0, 0, 0, 830, 0, 831, 0, 0, 0, 0, 0, 0, 832, 0, 833, 0, 0, 834, 0, 835, 0, 0, 836, 0, 837, 0, 0, 0, 0, - 838, 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 841, 0, 0, 842, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 0, - 845, 0, 0, 0, 0, 0, 846, 0, 0, 0, 0, 847, 0, 848, 0, 849, 0, 0, 850, 0, 851, 0, 0, 852, 0, 0, 853, 0, 0, 0, 854, 0, - 855, 0, 856, 0, 0, 0, 857, 0, 0, 858, 0, 0, 0, 859, 0, 0, 860, 0, 861, 0, 0, 0, 0, 862, 0, 0, 863, 0, 0, 0, 0, 0, - 0, 864, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 866, 0, 0, 867, 0, 868, 0, 0, 0, 0, 869, 0, 0, - 0, 870, 0, 0, 0, 871, 0, 0, 0, 872, 0, 873, 0, 874, 0, 0, 875, 0, 0, 0, 876, 0, 877, 0, 878, 0, 879, 0, 880, 0, 881, 0, - 882, 0, 0, 0, 0, 883, 0, 0, 884, 0, 0, 885, 0, 0, 886, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 0, - 889, 0, 0, 0, 0, 0, 890, 0, 891, 0, 892, 0, 893, 0, 0, 0, 894, 0, 895, 0, 0, 0, 0, 0, 0, 0, 896, 0, 897, 0, 0, 0, - 0, 0, 0, 0, 898, 0, 0, 899, 0, 0, 900, 0, 901, 0, 0, 0, 902, 0, 0, 903, 0, 0, 904, 0, 0, 905, 0, 0, 906, 0, 907, 0, - 908, 0, 0, 909, 0, 0, 0, 910, 0, 0, 0, 911, 0, 0, 0, 0, 912, 0, 0, 0, 0, 0, 0, 913, 0, 914, 0, 915, 0, 0, 916, 0, - 917, 0, 0, 918, 0, 919, 0, 0, 920, 0, 0, 0, 0, 0, 0, 921, 0, 922, 0, 923, 0, 0, 0, 0, 0, 0, 924, 0, 925, 0, 0, 0, - 926, 0, 0, 927, 0, 0, 928, 0, 0, 0, 929, 0, 0, 0, 930, 0, 0, 0, 931, 0, 0, 0, 932, 0, 933, 0, 934, 0, 0, 935, 0, 0, - 0, 0, 0, 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, 0, 0, 938, 0, 0, 939, 0, 0, 940, 0, 0, 0, 941, 0, 0, - 0, 942, 0, 0, 0, 943, 0, 0, 0, 944, 0, 0, 0, 945, 0, 0, 946, 0, 0, 0, 947, 0, 948, 0, 949, 0, 0, 0, 0, 0, 0, 0, - 950, 0, 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, 952, 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 954, 0, 0, 0, 0, 0, 955, 0, 0, 0, 956, 0, 0, 0, 0, 957, 0, 958, 0, 959, 0, 960, 0, 0, 961, 0, 962, 0, 0, 0, 0, 963, - 0, 0, 0, 964, 0, 0, 0, 0, 965, 966, 0, 0, 967, 0, 0, 0, 0, 968, 0, 0, 969, 0, 0, 0, 970, 0, 0, 971, 0, 0, 972, 0, - 973, 0, 0, 0, 974, 0, 0, 975, 0, 0, 976, 0, 0, 0, 0, 0, 0, 977, 0, 978, 0, 979, 0, 0, 0, 980, 0, 0, 981, 0, 982, 0, - 0, 0, 0, 983, 0, 984, 0, 0, 985, 0, 0, 0, 0, 0, 0, 986, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 987, 0, 0, - 0, 0, 988, 0, 0, 0, 989, 0, 990, 0, 0, 991, 0, 992, 0, 993, 0, 994, 0, 0, 995, 0, 996, 0, 997, 0, 998, 0, 0, 0, 999, 0, - 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 1001, 0, 0, 1002, 0, 1003, 1004, 0, 0, 1005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1006, 0, 0, - 1007, 0, 1008, 0, 0, 0, 1009, 1010, 0, 0, 0, 0, 0, 0, 1011, 0, 0, 0, 0, 0, 1012, 1013, 0, 1014, 0, 0, 0, 1015, 0, 1016, 0, 0, - 0, 1017, 0, 0, 1018, 0, 0, 1019, 0, 1020, 0, 0, 0, 1021, 0, 0, 0, 1022, 0, 0, 1023, 0, 0, 0, 1024, 0, 0, 0, 1025, 0, 0, 1026, - 0, 0, 0, 1027, 0, 0, 0, 1028, 0, 0, 0, 1029, 0, 0, 1030, 0, 0, 0, 1031, 0, 1032, 0, 1033, 0, 0, 0, 0, 1034, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0107[64] = { + 0x22E222142D420001ull, 0x148AAAAA28A28AB1ull, 0xA8121022AA045154ull, 0x8020542102421022ull, + 0x5116A1020D420445ull, 0x508106A10222D420ull, 0x8ABA840835081143ull, 0x404912A554A0A824ull, + 0x8400940948012825ull, 0x1284024508048812ull, 0xAAAE2222AAAE2222ull, 0x0A42A21514814084ull, + 0x8882410280400344ull, 0x8A288A2AB8888B88ull, 0x509454022228A8A2ull, 0x51451540A0010644ull, + 0x8140A004A28AA804ull, 0x8404A28A28A28A2Aull, 0xAD18884902511100ull, 0x0420000024321200ull, + 0x000020222540A062ull, 0x2142222844402200ull, 0x0200084000A91291ull, 0x0024528112251000ull, + 0x0252524528111022ull, 0x2488454220842A28ull, 0x052880528802A005ull, 0x200100000200A510ull, + 0x44A14A2220000100ull, 0x04A4480888150800ull, 0x108A844108545420ull, 0x880294400A800A49ull, + 0x0801008014A20052ull, 0x8911022440A02000ull, 0x8082400401122688ull, 0x00455548AA554048ull, + 0x2801082010A14000ull, 0x28AAA4A25250000Aull, 0x1051552441400009ull, 0x8942000049454949ull, + 0x10002000A4935100ull, 0x2010104400488088ull, 0x000455554200A19Aull, 0xA2801082010A1400ull, + 0x00A2AA9289250000ull, 0x00028AA9220A4200ull, 0x0100149912921108ull, 0x82890411544A8852ull, + 0x94082A5095542A92ull, 0x151100A142228004ull, 0x250A550A4104A889ull, 0x2154A04522A85208ull, + 0x100A48090A528140ull, 0x048522454494A841ull, 0x55512A2221480102ull, 0x1405154102024921ull, + 0x4A81088952491490ull, 0x25444449140A8129ull, 0x0151222222490008ull, 0x852A844100011081ull, + 0x522A049149121308ull, 0x4552A94420008128ull, 0x28B040C52009A410ull, 0x0854488891122292ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0107[64] = { + 1u, 18u, 43u, 62u, 75u, 94u, 111u, 132u, 152u, 167u, 181u, 207u, 224u, 237u, 260u, 279u, + 296u, 312u, 332u, 350u, 359u, 371u, 384u, 396u, 409u, 426u, 443u, 458u, 466u, 478u, 491u, 507u, + 522u, 533u, 545u, 558u, 578u, 588u, 607u, 622u, 639u, 651u, 661u, 679u, 691u, 707u, 721u, 736u, + 755u, 777u, 791u, 811u, 830u, 845u, 864u, 882u, 898u, 917u, 936u, 950u, 964u, 983u, 1000u, 1017u, }; void recomp_unit_0107_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0107_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089B0000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0107[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0107[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0107[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089B0000; @@ -1236,7 +1143,6 @@ L_089B0000: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -1247,9 +1153,7 @@ L_089B0000: L_089B0044: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0060; } @@ -1265,7 +1169,6 @@ L_089B0058: } L_089B0060: aot_gpr_31 = (0x089B0068u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B0068u) goto L_089B0068; AOT_REGCACHE_SYNC_OUT(); return; L_089B0068: @@ -1292,7 +1195,6 @@ L_089B0074: } L_089B0088: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_089B01DC; } @@ -1343,7 +1245,6 @@ L_089B00D8: goto L_089B00DC; L_089B00DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B012C; } @@ -1359,7 +1260,6 @@ L_089B00E4: L_089B00F4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B0114; } @@ -1377,7 +1277,6 @@ L_089B0110: goto L_089B0114; L_089B0114: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B01CC; } @@ -1390,7 +1289,6 @@ L_089B011C: AOT_REGCACHE_SYNC_OUT(); return; L_089B0124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -1405,7 +1303,6 @@ L_089B012C: AOT_REGCACHE_SYNC_OUT(); return; L_089B013C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B01BC; } @@ -1420,7 +1317,6 @@ L_089B0144: AOT_REGCACHE_SYNC_OUT(); return; L_089B0154: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B01AC; } @@ -1435,7 +1331,6 @@ L_089B015C: AOT_REGCACHE_SYNC_OUT(); return; L_089B016C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B019C; } @@ -1450,7 +1345,6 @@ L_089B0174: AOT_REGCACHE_SYNC_OUT(); return; L_089B0184: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B01CC; } @@ -1463,7 +1357,6 @@ L_089B018C: AOT_REGCACHE_SYNC_OUT(); return; L_089B0194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -1476,7 +1369,6 @@ L_089B019C: AOT_REGCACHE_SYNC_OUT(); return; L_089B01A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -1489,7 +1381,6 @@ L_089B01AC: AOT_REGCACHE_SYNC_OUT(); return; L_089B01B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -1502,7 +1393,6 @@ L_089B01BC: AOT_REGCACHE_SYNC_OUT(); return; L_089B01C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -1517,7 +1407,6 @@ L_089B01CC: L_089B01DC: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B03B0; } @@ -1555,7 +1444,6 @@ L_089B0208: AOT_REGCACHE_SYNC_OUT(); return; L_089B0210: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B026C; } @@ -1570,7 +1458,6 @@ L_089B0220: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 130u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0248; } @@ -1585,7 +1472,6 @@ L_089B0238: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 131u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B026C; } @@ -1596,9 +1482,7 @@ L_089B0248: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B026C; } @@ -1615,7 +1499,6 @@ L_089B026C: AOT_REGCACHE_SYNC_OUT(); return; L_089B0274: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B02EC; } @@ -1630,7 +1513,6 @@ L_089B0284: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 197u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B02EC; } @@ -1641,9 +1523,7 @@ L_089B0294: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B03A8; } @@ -1683,7 +1563,6 @@ L_089B02EC: AOT_REGCACHE_SYNC_OUT(); return; L_089B02F4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B03A8; } @@ -1698,7 +1577,6 @@ L_089B0304: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 200u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B03A8; } @@ -1722,7 +1600,6 @@ L_089B0330: aot_gpr_5 = (0u | 232u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0358; } @@ -1733,7 +1610,6 @@ L_089B0344: aot_gpr_5 = (0u | 231u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0364; } @@ -1749,9 +1625,7 @@ L_089B0364: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B03A8; } @@ -1774,7 +1648,6 @@ L_089B0394: goto L_089B03A8; L_089B03A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -1782,7 +1655,6 @@ L_089B03A8: } L_089B03B0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089B03D4; } @@ -1805,9 +1677,7 @@ L_089B03D4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0400; } @@ -1818,7 +1688,6 @@ L_089B03FC: goto L_089B0400; L_089B0400: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089B04D0; } @@ -1828,7 +1697,6 @@ L_089B0408: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0428; } @@ -1838,7 +1706,6 @@ L_089B0418: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0484; } @@ -1849,7 +1716,6 @@ L_089B0428: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -1860,9 +1726,7 @@ L_089B0428: L_089B0444: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0460; } @@ -1878,7 +1742,6 @@ L_089B0458: } L_089B0460: aot_gpr_31 = (0x089B0468u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B0468u) goto L_089B0468; AOT_REGCACHE_SYNC_OUT(); return; L_089B0468: @@ -1901,7 +1764,6 @@ L_089B0484: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -1912,9 +1774,7 @@ L_089B0484: L_089B04A0: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B04BC; } @@ -1930,7 +1790,6 @@ L_089B04B4: } L_089B04BC: aot_gpr_31 = (0x089B04C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B04C4u) goto L_089B04C4; AOT_REGCACHE_SYNC_OUT(); return; L_089B04C4: @@ -1948,7 +1807,6 @@ L_089B04D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B0620; } @@ -1963,7 +1821,6 @@ L_089B04E0: AOT_REGCACHE_SYNC_OUT(); return; L_089B04F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0544; } @@ -1974,7 +1831,6 @@ L_089B04F8: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -1985,9 +1841,7 @@ L_089B04F8: L_089B0514: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0530; } @@ -2003,7 +1857,6 @@ L_089B0528: } L_089B0530: aot_gpr_31 = (0x089B0538u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B0538u) goto L_089B0538; AOT_REGCACHE_SYNC_OUT(); return; L_089B0538: @@ -2021,7 +1874,6 @@ L_089B0544: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0564; } @@ -2031,7 +1883,6 @@ L_089B0554: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B05C0; } @@ -2042,7 +1893,6 @@ L_089B0564: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -2053,9 +1903,7 @@ L_089B0564: L_089B0580: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B059C; } @@ -2071,7 +1919,6 @@ L_089B0594: } L_089B059C: aot_gpr_31 = (0x089B05A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B05A4u) goto L_089B05A4; AOT_REGCACHE_SYNC_OUT(); return; L_089B05A4: @@ -2094,7 +1941,6 @@ L_089B05C0: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -2105,9 +1951,7 @@ L_089B05C0: L_089B05DC: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B05F8; } @@ -2123,7 +1967,6 @@ L_089B05F0: } L_089B05F8: aot_gpr_31 = (0x089B0600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B0600u) goto L_089B0600; AOT_REGCACHE_SYNC_OUT(); return; L_089B0600: @@ -2138,7 +1981,6 @@ L_089B0604: goto L_089B0618; L_089B0618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B06D4; } @@ -2148,7 +1990,6 @@ L_089B0620: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B068C; } @@ -2159,7 +2000,6 @@ L_089B0630: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -2170,9 +2010,7 @@ L_089B0630: L_089B064C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0668; } @@ -2188,7 +2026,6 @@ L_089B0660: } L_089B0668: aot_gpr_31 = (0x089B0670u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B0670u) goto L_089B0670; AOT_REGCACHE_SYNC_OUT(); return; L_089B0670: @@ -2211,7 +2048,6 @@ L_089B068C: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(20))); if (branch_taken) { @@ -2222,9 +2058,7 @@ L_089B068C: L_089B06A8: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B06C4; } @@ -2240,7 +2074,6 @@ L_089B06BC: } L_089B06C4: aot_gpr_31 = (0x089B06CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B06CCu) goto L_089B06CC; AOT_REGCACHE_SYNC_OUT(); return; L_089B06CC: @@ -2256,7 +2089,6 @@ L_089B06D4: AOT_REGCACHE_SYNC_OUT(); return; L_089B06DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0A84; } @@ -2301,11 +2133,20 @@ L_089B0714: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4448))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B072C: { const bool branch_taken = aot_gpr_5 != 0u; aot_gpr_5 = (static_cast(aot_gpr_4) < 182 ? 1u : 0u); @@ -2328,11 +2169,20 @@ L_089B073C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4160))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B0754: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_5 = (static_cast(aot_gpr_4) < 212 ? 1u : 0u); @@ -2344,7 +2194,6 @@ L_089B0754: L_089B075C: aot_gpr_4 = (static_cast(aot_gpr_4) < 198 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B0A04; } @@ -2352,7 +2201,6 @@ L_089B075C: } L_089B0768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B09DC; } @@ -2368,7 +2216,6 @@ L_089B0770: } L_089B0778: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B09DC; } @@ -2376,7 +2223,6 @@ L_089B0778: } L_089B0780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0A04; } @@ -2401,7 +2247,6 @@ L_089B0794: } L_089B079C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089B0800; } @@ -2410,7 +2255,6 @@ L_089B079C: L_089B07A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B0800; } @@ -2420,7 +2264,6 @@ L_089B07B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B0800; } @@ -2444,7 +2287,6 @@ L_089B07D8: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13360))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13360))); goto L_089B07F8; @@ -2471,7 +2313,6 @@ L_089B0814: aot_fpr_20 = aot_fpr_12 - aot_fpr_20; aot_fpr_20 = aot_fpr_20 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0AFC; } @@ -2497,7 +2338,6 @@ L_089B0840: aot_fpr_13 = std::bit_cast(0u); aot_fpr_20 = aot_fpr_14 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089B086C; @@ -2506,7 +2346,6 @@ L_089B0840: L_089B086C: aot_fpr_20 = aot_fpr_20 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0AFC; } @@ -2556,7 +2395,6 @@ L_089B08BC: aot_fpr_13 = std::bit_cast(0u); aot_fpr_20 = aot_fpr_14 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089B08E8; @@ -2617,7 +2455,6 @@ L_089B0948: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13356))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_089B096C; @@ -2632,7 +2469,6 @@ L_089B096C: goto L_089B0980; L_089B0980: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089B09DC; } @@ -2658,7 +2494,6 @@ L_089B09A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13360))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_089B09C8; @@ -2687,7 +2522,6 @@ L_089B09F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_fpr_20 = aot_fpr_20 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0AFC; } @@ -2737,7 +2571,6 @@ L_089B0A48: goto L_089B0A4C; L_089B0A4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B0A5C; } @@ -2758,7 +2591,6 @@ L_089B0A5C: AOT_REGCACHE_SYNC_OUT(); return; L_089B0A64: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0A74; } @@ -2778,7 +2610,6 @@ L_089B0A74: goto L_089B0A7C; L_089B0A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0AFC; } @@ -2828,7 +2659,6 @@ L_089B0AC8: goto L_089B0ACC; L_089B0ACC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B0ADC; } @@ -2849,7 +2679,6 @@ L_089B0ADC: AOT_REGCACHE_SYNC_OUT(); return; L_089B0AE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0AF4; } @@ -2870,7 +2699,6 @@ L_089B0AF4: L_089B0AFC: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B0B1C; } @@ -2892,7 +2720,6 @@ L_089B0B08: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0B40; } @@ -2941,7 +2768,6 @@ L_089B0B40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B0B70; } @@ -2955,7 +2781,6 @@ L_089B0B5C: AOT_REGCACHE_SYNC_OUT(); return; L_089B0B68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0BA4; } @@ -2965,7 +2790,6 @@ L_089B0B70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0BA4; } @@ -2978,7 +2802,6 @@ L_089B0B80: AOT_REGCACHE_SYNC_OUT(); return; L_089B0B88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0BA4; } @@ -2995,7 +2818,6 @@ L_089B0BA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0BD8; } @@ -3008,7 +2830,6 @@ L_089B0BB4: AOT_REGCACHE_SYNC_OUT(); return; L_089B0BBC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0BD8; } @@ -3032,7 +2853,6 @@ L_089B0BD8: } L_089B0BE4: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B0CC4; } @@ -3055,7 +2875,6 @@ L_089B0C08: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B0CC4; } @@ -3063,7 +2882,6 @@ L_089B0C08: } L_089B0C18: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089B0CC4; } @@ -3083,9 +2901,7 @@ L_089B0C24: aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fpr[15] = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0C84; } @@ -3105,7 +2921,6 @@ L_089B0C58: AOT_REGCACHE_SYNC_OUT(); return; L_089B0C7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0CC4; } @@ -3152,9 +2967,7 @@ L_089B0CC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B0D2C; } @@ -3204,7 +3017,6 @@ L_089B0D20: goto L_089B0D24; L_089B0D24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B10B4; } @@ -3254,7 +3066,6 @@ L_089B0D70: goto L_089B0D74; L_089B0D74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B0F74; } @@ -3267,7 +3078,6 @@ L_089B0D7C: AOT_REGCACHE_SYNC_OUT(); return; L_089B0D84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B0F74; } @@ -3282,7 +3092,6 @@ L_089B0D94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 198u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0DBC; } @@ -3297,7 +3106,6 @@ L_089B0DAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 199u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0DCC; } @@ -3322,7 +3130,6 @@ L_089B0DD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 208u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0E2C; } @@ -3337,7 +3144,6 @@ L_089B0DEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 209u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0E2C; } @@ -3352,7 +3158,6 @@ L_089B0E04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 212u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0E2C; } @@ -3367,7 +3172,6 @@ L_089B0E1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 213u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0E34; } @@ -3390,7 +3194,6 @@ L_089B0E3C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0E64; } @@ -3405,7 +3208,6 @@ L_089B0E54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 195u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0EB0; } @@ -3432,7 +3234,6 @@ L_089B0E84: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 / ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089B0EA8; @@ -3455,7 +3256,6 @@ L_089B0EB8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 196u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0EF0; } @@ -3477,7 +3277,6 @@ L_089B0EDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B0F28; } @@ -3492,7 +3291,6 @@ L_089B0EF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 187u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B0F24; } @@ -3502,7 +3300,6 @@ L_089B0F08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B0F24; } @@ -3552,7 +3349,6 @@ L_089B0F40: } L_089B0F74: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089B0F98; } @@ -3578,7 +3374,6 @@ L_089B0F98: AOT_REGCACHE_SYNC_OUT(); return; L_089B0FA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B1034; } @@ -3593,7 +3388,6 @@ L_089B0FB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 175u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1034; } @@ -3608,7 +3402,6 @@ L_089B0FC8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 176u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1034; } @@ -3623,7 +3416,6 @@ L_089B0FE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 180u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1034; } @@ -3638,7 +3430,6 @@ L_089B0FF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 179u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1034; } @@ -3658,7 +3449,6 @@ L_089B1008: AOT_REGCACHE_SYNC_OUT(); return; L_089B102C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1298; } @@ -3671,7 +3461,6 @@ L_089B1034: AOT_REGCACHE_SYNC_OUT(); return; L_089B103C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B1298; } @@ -3686,7 +3475,6 @@ L_089B104C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 176u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1298; } @@ -3701,7 +3489,6 @@ L_089B1064: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 180u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1298; } @@ -3737,7 +3524,6 @@ L_089B1088: } L_089B10B4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089B1298; } @@ -3748,9 +3534,7 @@ L_089B10BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B1298; } @@ -3784,7 +3568,6 @@ L_089B10FC: AOT_REGCACHE_SYNC_OUT(); return; L_089B1104: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B1220; } @@ -3799,7 +3582,6 @@ L_089B1114: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 91u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B11B4; } @@ -3814,7 +3596,6 @@ L_089B112C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 71u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B11B4; } @@ -3829,7 +3610,6 @@ L_089B1144: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 92u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B11B4; } @@ -3844,7 +3624,6 @@ L_089B115C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 72u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B11B4; } @@ -3859,7 +3638,6 @@ L_089B1174: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B11B4; } @@ -3874,7 +3652,6 @@ L_089B118C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 175u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B11B4; } @@ -3889,7 +3666,6 @@ L_089B11A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(48)))))); aot_gpr_5 = (0u | 179u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B1220; } @@ -3920,7 +3696,6 @@ L_089B11C8: L_089B11E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089B11FC; @@ -3945,7 +3720,6 @@ L_089B1220: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1264; } @@ -3955,7 +3729,6 @@ L_089B1230: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1264; } @@ -3965,7 +3738,6 @@ L_089B1240: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B1298; } @@ -3979,7 +3751,6 @@ L_089B1250: L_089B1258: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_089B1298; } @@ -3990,9 +3761,7 @@ L_089B1264: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B128C; } @@ -4017,7 +3786,6 @@ L_089B1298: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B12EC; } @@ -4035,7 +3803,6 @@ L_089B12BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B12E8; } @@ -4048,7 +3815,6 @@ L_089B12D0: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B12E8; } @@ -4067,7 +3833,6 @@ L_089B12E8: goto L_089B12EC; L_089B12EC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089B1434; } @@ -4102,9 +3867,7 @@ L_089B1324: L_089B1330: ctx.fpr[16] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B1350; } @@ -4113,7 +3876,6 @@ L_089B1330: L_089B1344: aot_fpr_12 = aot_fpr_13 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1354; } @@ -4125,9 +3887,7 @@ L_089B1350: L_089B1354: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B1374; } @@ -4201,7 +3961,6 @@ L_089B1374: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = ctx.fpr[15] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -4225,7 +3984,6 @@ L_089B13E8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = ctx.fpr[15] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -4264,9 +4022,7 @@ L_089B143C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B165C; } @@ -4274,7 +4030,6 @@ L_089B143C: } L_089B1458: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089B165C; } @@ -4288,7 +4043,6 @@ L_089B1460: L_089B1468: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B165C; } @@ -4298,7 +4052,6 @@ L_089B1474: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B165C; } @@ -4406,7 +4159,6 @@ L_089B14B4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1534; } @@ -4416,7 +4168,6 @@ L_089B1524: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1624; } @@ -4431,7 +4182,6 @@ L_089B1534: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1594; } @@ -4441,7 +4191,6 @@ L_089B1558: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B1578; } @@ -4451,7 +4200,6 @@ L_089B1568: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B1594; } @@ -4467,7 +4215,6 @@ L_089B1578: AOT_REGCACHE_SYNC_OUT(); return; L_089B158C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B15F4; } @@ -4477,7 +4224,6 @@ L_089B1594: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B15E0; } @@ -4487,7 +4233,6 @@ L_089B15A4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B15C4; } @@ -4497,7 +4242,6 @@ L_089B15B4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B15E0; } @@ -4513,7 +4257,6 @@ L_089B15C4: AOT_REGCACHE_SYNC_OUT(); return; L_089B15D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B15F4; } @@ -4537,7 +4280,6 @@ L_089B1600: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1624; } @@ -4546,7 +4288,6 @@ L_089B1600: L_089B1610: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(448))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1624; } @@ -4567,7 +4308,6 @@ L_089B1630: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -4576,7 +4316,6 @@ L_089B1630: L_089B1640: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -4589,7 +4328,6 @@ L_089B164C: AOT_REGCACHE_SYNC_OUT(); return; L_089B1654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B16AC; } @@ -4658,7 +4396,17 @@ L_089B16AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B16E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(212), aot_gpr_16); @@ -4697,7 +4445,6 @@ L_089B1740: L_089B1748: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B1764; } @@ -4707,7 +4454,6 @@ L_089B1754: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B1914; } @@ -4716,7 +4462,6 @@ L_089B1754: L_089B1764: aot_gpr_4 = (0u | 20u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B1814; } @@ -4789,7 +4534,6 @@ L_089B17B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B17D4; } @@ -4861,7 +4605,6 @@ L_089B1804: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1BF4; } @@ -4955,7 +4698,6 @@ L_089B1888: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B18A4; } @@ -4978,7 +4720,6 @@ L_089B18A4: } L_089B18B0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B18C4; } @@ -5011,7 +4752,6 @@ L_089B18C4: } L_089B18D0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B18E4; } @@ -5059,7 +4799,6 @@ L_089B18E4: AOT_REGCACHE_SYNC_OUT(); return; L_089B190C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1BF4; } @@ -5085,7 +4824,6 @@ L_089B1924: } L_089B192C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B195C; } @@ -5115,7 +4853,6 @@ L_089B1948: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B19E8; } @@ -5127,7 +4864,6 @@ L_089B195C: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(140))); aot_gpr_4 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1998; } @@ -5156,7 +4892,6 @@ L_089B1984: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B19E8; } @@ -5169,7 +4904,6 @@ L_089B1998: AOT_REGCACHE_SYNC_OUT(); return; L_089B19A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B19CC; } @@ -5198,7 +4932,6 @@ L_089B19B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B19E8; } @@ -5247,7 +4980,6 @@ L_089B19F4: } L_089B1A00: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B1ABC; } @@ -5275,7 +5007,6 @@ L_089B1A08: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1B64; } @@ -5291,7 +5022,6 @@ L_089B1A34: } L_089B1A3C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1B10; } @@ -5318,7 +5048,6 @@ L_089B1A44: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1B64; } @@ -5375,7 +5104,6 @@ L_089B1A98: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1B64; } @@ -5433,7 +5161,6 @@ L_089B1AE8: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1B64; } @@ -5707,7 +5434,17 @@ L_089B1BF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B1C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(200), ctx.gpr[17]); @@ -5744,7 +5481,6 @@ L_089B1C84: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_089B1E38; } @@ -5799,7 +5535,6 @@ L_089B1CC0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B1CDC; } @@ -5813,7 +5548,6 @@ L_089B1CD4: L_089B1CDC: aot_gpr_4 = (0u | 20u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B1D50; } @@ -5880,7 +5614,6 @@ L_089B1CF8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089B1D48; } @@ -5911,7 +5644,6 @@ L_089B1D40: goto L_089B1D48; L_089B1D48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B20C0; } @@ -5960,7 +5692,6 @@ L_089B1D8C: L_089B1DAC: aot_gpr_4 = (0u | 9u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B1DC8; } @@ -5994,7 +5725,6 @@ L_089B1DC8: } L_089B1DD4: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B1DE8; } @@ -6046,7 +5776,6 @@ L_089B1DE8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089B1E30; } @@ -6077,7 +5806,6 @@ L_089B1E28: goto L_089B1E30; L_089B1E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B20C0; } @@ -6103,7 +5831,6 @@ L_089B1E48: } L_089B1E50: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B1E80; } @@ -6133,7 +5860,6 @@ L_089B1E6C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1F0C; } @@ -6174,7 +5900,6 @@ L_089B1EA8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1F0C; } @@ -6187,7 +5912,6 @@ L_089B1EBC: AOT_REGCACHE_SYNC_OUT(); return; L_089B1EC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B1EF0; } @@ -6216,7 +5940,6 @@ L_089B1EDC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B1F0C; } @@ -6265,7 +5988,6 @@ L_089B1F18: } L_089B1F24: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B1FEC; } @@ -6294,7 +6016,6 @@ L_089B1F2C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B209C; } @@ -6310,7 +6031,6 @@ L_089B1F5C: } L_089B1F64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2044; } @@ -6338,7 +6058,6 @@ L_089B1F6C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B209C; } @@ -6396,7 +6115,6 @@ L_089B1FC4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B209C; } @@ -6455,7 +6173,6 @@ L_089B2018: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B209C; } @@ -6585,7 +6302,17 @@ L_089B20C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B20EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -6634,7 +6361,6 @@ L_089B2178: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B21A4; } @@ -6643,7 +6369,6 @@ L_089B2178: L_089B2188: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089B21A4; } @@ -6653,7 +6378,6 @@ L_089B2194: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B21E0; } @@ -6693,7 +6417,6 @@ L_089B21D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2228; } @@ -6702,7 +6425,6 @@ L_089B21D0: L_089B21E0: aot_gpr_4 = (0u | 62u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B220C; } @@ -6730,7 +6452,6 @@ L_089B21FC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2224; } @@ -6764,7 +6485,6 @@ L_089B2224: L_089B2228: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089B2244; } @@ -6774,7 +6494,6 @@ L_089B2234: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B2250; } @@ -6892,7 +6611,6 @@ L_089B22DC: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_16 + static_cast(48), aot_run_words); } { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B2348; } @@ -6902,7 +6620,6 @@ L_089B22FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B2348; } @@ -6911,7 +6628,6 @@ L_089B22FC: L_089B230C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089B2348; } @@ -6932,7 +6648,6 @@ L_089B2318: AOT_REGCACHE_SYNC_OUT(); return; L_089B2338: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B2348; } @@ -6950,7 +6665,6 @@ L_089B2348: AOT_REGCACHE_SYNC_OUT(); return; L_089B2350: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B27E0; } @@ -6964,7 +6678,6 @@ L_089B2358: AOT_REGCACHE_SYNC_OUT(); return; L_089B2364: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089B23A8; } @@ -6984,7 +6697,6 @@ L_089B237C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B287C; } @@ -6993,7 +6705,6 @@ L_089B237C: L_089B238C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B287C; } @@ -7006,7 +6717,6 @@ L_089B2398: AOT_REGCACHE_SYNC_OUT(); return; L_089B23A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B287C; } @@ -7019,7 +6729,6 @@ L_089B23A8: AOT_REGCACHE_SYNC_OUT(); return; L_089B23B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B23C8; } @@ -7032,7 +6741,6 @@ L_089B23B8: AOT_REGCACHE_SYNC_OUT(); return; L_089B23C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B27D8; } @@ -7042,7 +6750,6 @@ L_089B23C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2440; } @@ -7077,7 +6784,6 @@ L_089B23D8: AOT_REGCACHE_SYNC_OUT(); return; L_089B2438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B27D8; } @@ -7088,7 +6794,6 @@ L_089B2440: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B24AC; } @@ -7096,7 +6801,6 @@ L_089B2440: } L_089B2454: aot_gpr_31 = (0x089B245Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B245Cu) goto L_089B245C; AOT_REGCACHE_SYNC_OUT(); return; L_089B245C: @@ -7136,7 +6840,6 @@ L_089B24AC: ctx.gpr[17] = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2660; } @@ -7158,7 +6861,6 @@ L_089B24C0: AOT_REGCACHE_SYNC_OUT(); return; L_089B24EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B2564; } @@ -7168,7 +6870,6 @@ L_089B24F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B2564; } @@ -7176,7 +6877,6 @@ L_089B24F4: } L_089B2504: aot_gpr_31 = (0x089B250Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B250Cu) goto L_089B250C; AOT_REGCACHE_SYNC_OUT(); return; L_089B250C: @@ -7221,9 +6921,7 @@ L_089B250C: aot_gpr_4 = (16480u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B2564; } @@ -7231,7 +6929,6 @@ L_089B250C: } L_089B2550: aot_gpr_31 = (0x089B2558u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2558u) goto L_089B2558; AOT_REGCACHE_SYNC_OUT(); return; L_089B2558: @@ -7243,7 +6940,6 @@ L_089B2558: L_089B2564: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B259C; } @@ -7251,7 +6947,6 @@ L_089B2564: } L_089B2570: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B2658; } @@ -7260,7 +6955,6 @@ L_089B2570: L_089B2578: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2658; } @@ -7275,7 +6969,6 @@ L_089B2584: AOT_REGCACHE_SYNC_OUT(); return; L_089B2594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2658; } @@ -7284,7 +6977,6 @@ L_089B2594: L_089B259C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B25F4; } @@ -7293,7 +6985,6 @@ L_089B259C: L_089B25A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089B25F4; } @@ -7306,7 +6997,6 @@ L_089B25B4: AOT_REGCACHE_SYNC_OUT(); return; L_089B25BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B25D4; } @@ -7314,12 +7004,10 @@ L_089B25BC: } L_089B25C4: aot_gpr_31 = (0x089B25CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B25CCu) goto L_089B25CC; AOT_REGCACHE_SYNC_OUT(); return; L_089B25CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B25F4; } @@ -7339,7 +7027,6 @@ L_089B25DC: AOT_REGCACHE_SYNC_OUT(); return; L_089B25EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2658; } @@ -7381,7 +7068,6 @@ L_089B260C: AOT_REGCACHE_SYNC_OUT(); return; L_089B2658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B27D8; } @@ -7393,7 +7079,6 @@ L_089B2660: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B26D8; } @@ -7403,7 +7088,6 @@ L_089B2678: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B26D8; } @@ -7412,7 +7096,6 @@ L_089B2678: L_089B2688: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(612))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B26D8; } @@ -7421,7 +7104,6 @@ L_089B2688: L_089B2694: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B26D8; } @@ -7434,7 +7116,6 @@ L_089B26A0: AOT_REGCACHE_SYNC_OUT(); return; L_089B26A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B26D8; } @@ -7442,12 +7123,10 @@ L_089B26A8: } L_089B26B0: aot_gpr_31 = (0x089B26B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B26B8u) goto L_089B26B8; AOT_REGCACHE_SYNC_OUT(); return; L_089B26B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B26D8; } @@ -7462,7 +7141,6 @@ L_089B26C0: AOT_REGCACHE_SYNC_OUT(); return; L_089B26D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B27D8; } @@ -7474,7 +7152,6 @@ L_089B26D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2760; } @@ -7484,7 +7161,6 @@ L_089B26F0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B2760; } @@ -7493,7 +7169,6 @@ L_089B26F0: L_089B2700: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(612))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B2760; } @@ -7502,7 +7177,6 @@ L_089B2700: L_089B270C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B2760; } @@ -7510,13 +7184,11 @@ L_089B270C: } L_089B2718: aot_gpr_31 = (0x089B2720u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2720u) goto L_089B2720; AOT_REGCACHE_SYNC_OUT(); return; L_089B2720: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089B2760; } @@ -7525,7 +7197,6 @@ L_089B2720: L_089B272C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B2760; } @@ -7533,12 +7204,10 @@ L_089B272C: } L_089B2738: aot_gpr_31 = (0x089B2740u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2740u) goto L_089B2740; AOT_REGCACHE_SYNC_OUT(); return; L_089B2740: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B2760; } @@ -7553,7 +7222,6 @@ L_089B2748: AOT_REGCACHE_SYNC_OUT(); return; L_089B2758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B27D8; } @@ -7609,7 +7277,6 @@ L_089B27D8: L_089B27E0: aot_gpr_4 = (0u | 59u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_089B27FC; } @@ -7630,7 +7297,6 @@ L_089B27FC: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7640,9 +7306,7 @@ L_089B27FC: } L_089B2820: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B2838; } @@ -7658,7 +7322,6 @@ L_089B2830: } L_089B2838: aot_gpr_31 = (0x089B2840u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2840u) goto L_089B2840; AOT_REGCACHE_SYNC_OUT(); return; L_089B2840: @@ -7678,7 +7341,6 @@ L_089B2850: L_089B285C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B287C; } @@ -7687,7 +7349,6 @@ L_089B285C: L_089B2868: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B287C; } @@ -7719,7 +7380,17 @@ L_089B287C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B28B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -7776,7 +7447,6 @@ L_089B293C: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); ctx.gpr[6] = (0u | 9u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_089B2958; } @@ -7873,7 +7543,6 @@ L_089B29B0: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(ctx.gpr[17] + static_cast(48), aot_run_words); } { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B2A34; } @@ -7886,7 +7555,6 @@ L_089B29D0: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7896,7 +7564,6 @@ L_089B29D0: } L_089B29F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089B2A10; @@ -7932,7 +7599,6 @@ L_089B2A20: AOT_REGCACHE_SYNC_OUT(); return; L_089B2A34: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B2A88; } @@ -7963,7 +7629,6 @@ L_089B2A64: AOT_REGCACHE_SYNC_OUT(); return; L_089B2A78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B2A88; } @@ -8003,7 +7668,6 @@ L_089B2AA8: goto L_089B2AB0; L_089B2AB0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B2E70; } @@ -8013,7 +7677,6 @@ L_089B2AB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2B30; } @@ -8048,7 +7711,6 @@ L_089B2AC8: AOT_REGCACHE_SYNC_OUT(); return; L_089B2B28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2E70; } @@ -8059,7 +7721,6 @@ L_089B2B30: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2B9C; } @@ -8067,7 +7728,6 @@ L_089B2B30: } L_089B2B44: aot_gpr_31 = (0x089B2B4Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2B4Cu) goto L_089B2B4C; AOT_REGCACHE_SYNC_OUT(); return; L_089B2B4C: @@ -8107,7 +7767,6 @@ L_089B2B9C: ctx.gpr[20] = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2D4C; } @@ -8129,7 +7788,6 @@ L_089B2BB0: AOT_REGCACHE_SYNC_OUT(); return; L_089B2BDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B2C54; } @@ -8139,7 +7797,6 @@ L_089B2BE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B2C54; } @@ -8147,7 +7804,6 @@ L_089B2BE4: } L_089B2BF4: aot_gpr_31 = (0x089B2BFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2BFCu) goto L_089B2BFC; AOT_REGCACHE_SYNC_OUT(); return; L_089B2BFC: @@ -8192,9 +7848,7 @@ L_089B2BFC: aot_gpr_4 = (16480u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B2C54; } @@ -8202,7 +7856,6 @@ L_089B2BFC: } L_089B2C40: aot_gpr_31 = (0x089B2C48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2C48u) goto L_089B2C48; AOT_REGCACHE_SYNC_OUT(); return; L_089B2C48: @@ -8214,7 +7867,6 @@ L_089B2C48: L_089B2C54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2C84; } @@ -8223,7 +7875,6 @@ L_089B2C54: L_089B2C60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089B2D44; } @@ -8238,7 +7889,6 @@ L_089B2C6C: AOT_REGCACHE_SYNC_OUT(); return; L_089B2C7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2D44; } @@ -8269,7 +7919,6 @@ L_089B2C9C: AOT_REGCACHE_SYNC_OUT(); return; L_089B2CA4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B2CBC; } @@ -8277,7 +7926,6 @@ L_089B2CA4: } L_089B2CAC: aot_gpr_31 = (0x089B2CB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2CB4u) goto L_089B2CB4; AOT_REGCACHE_SYNC_OUT(); return; L_089B2CB4: @@ -8302,7 +7950,6 @@ L_089B2CC4: AOT_REGCACHE_SYNC_OUT(); return; L_089B2CD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2D24; } @@ -8345,7 +7992,6 @@ L_089B2D38: AOT_REGCACHE_SYNC_OUT(); return; L_089B2D44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2E70; } @@ -8404,7 +8050,6 @@ L_089B2D94: } L_089B2D9C: aot_gpr_31 = (0x089B2DA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B2DA4u) goto L_089B2DA4; AOT_REGCACHE_SYNC_OUT(); return; L_089B2DA4: @@ -8424,7 +8069,6 @@ L_089B2DAC: AOT_REGCACHE_SYNC_OUT(); return; L_089B2DBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2E70; } @@ -8463,7 +8107,6 @@ L_089B2E20: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B2E44; } @@ -8474,7 +8117,6 @@ L_089B2E30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(22)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 71 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B2E64; } @@ -8494,7 +8136,6 @@ L_089B2E50: AOT_REGCACHE_SYNC_OUT(); return; L_089B2E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2E70; } @@ -8526,7 +8167,6 @@ L_089B2E8C: L_089B2E90: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2EB0; } @@ -8535,7 +8175,6 @@ L_089B2E90: L_089B2E9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2EB0; } @@ -8565,7 +8204,17 @@ L_089B2EB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B2EE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[17]); @@ -8587,7 +8236,6 @@ L_089B2F04: goto L_089B2F10; L_089B2F10: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B2F44; } @@ -8598,7 +8246,6 @@ L_089B2F18: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B2F44; } @@ -8614,7 +8261,6 @@ L_089B2F2C: goto L_089B2F3C; L_089B2F3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B2F80; } @@ -8622,7 +8268,6 @@ L_089B2F3C: } L_089B2F44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -8631,7 +8276,6 @@ L_089B2F44: L_089B2F4C: aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B2F80; } @@ -8641,7 +8285,6 @@ L_089B2F58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B2F70; } @@ -8649,7 +8292,6 @@ L_089B2F58: } L_089B2F68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -8662,7 +8304,6 @@ L_089B2F70: AOT_REGCACHE_SYNC_OUT(); return; L_089B2F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -8690,7 +8331,6 @@ L_089B2FA8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B2FE4; } @@ -8699,7 +8339,6 @@ L_089B2FA8: L_089B2FC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B2FE4; } @@ -8709,7 +8348,6 @@ L_089B2FCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B2FE4; } @@ -8723,9 +8361,7 @@ L_089B2FE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B3050; } @@ -8739,7 +8375,6 @@ L_089B2FFC: L_089B3004: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B302C; } @@ -8748,7 +8383,6 @@ L_089B3004: L_089B3010: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B302C; } @@ -8761,7 +8395,6 @@ L_089B301C: AOT_REGCACHE_SYNC_OUT(); return; L_089B3024: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B3050; } @@ -8785,7 +8418,6 @@ L_089B3034: } L_089B3048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B30CC; } @@ -8798,7 +8430,6 @@ L_089B3050: AOT_REGCACHE_SYNC_OUT(); return; L_089B3058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -8811,7 +8442,6 @@ L_089B3060: AOT_REGCACHE_SYNC_OUT(); return; L_089B3068: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B30A4; } @@ -8820,7 +8450,6 @@ L_089B3068: L_089B3070: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B30A4; } @@ -8831,7 +8460,6 @@ L_089B307C: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B30A4; } @@ -8839,7 +8467,6 @@ L_089B307C: } L_089B3090: aot_gpr_31 = (0x089B3098u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B3098u) goto L_089B3098; AOT_REGCACHE_SYNC_OUT(); return; L_089B3098: @@ -8884,7 +8511,6 @@ L_089B30CC: AOT_REGCACHE_SYNC_OUT(); return; L_089B30E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B3108; } @@ -8893,7 +8519,6 @@ L_089B30E8: L_089B30F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3108; } @@ -8924,7 +8549,6 @@ L_089B3108: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(92))); goto L_089B319C; @@ -8939,7 +8563,6 @@ L_089B3144: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3164; } @@ -8949,7 +8572,6 @@ L_089B3154: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3180; } @@ -8965,7 +8587,6 @@ L_089B3164: AOT_REGCACHE_SYNC_OUT(); return; L_089B3178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3194; } @@ -8981,7 +8602,6 @@ L_089B3180: AOT_REGCACHE_SYNC_OUT(); return; L_089B3194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -9005,7 +8625,6 @@ L_089B31C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3550; } @@ -9015,7 +8634,6 @@ L_089B31D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3550; } @@ -9023,7 +8641,6 @@ L_089B31D0: } L_089B31E0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B320C; } @@ -9038,7 +8655,6 @@ L_089B31F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B320C; } @@ -9076,7 +8692,6 @@ L_089B322C: goto L_089B3234; L_089B3234: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B32E8; } @@ -9085,7 +8700,6 @@ L_089B3234: L_089B323C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B32B8; } @@ -9097,7 +8711,6 @@ L_089B3248: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B32A8; } @@ -9109,7 +8722,6 @@ L_089B3260: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B32A8; } @@ -9136,7 +8748,6 @@ L_089B328C: AOT_REGCACHE_SYNC_OUT(); return; L_089B32A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3480; } @@ -9176,7 +8787,6 @@ L_089B32CC: AOT_REGCACHE_SYNC_OUT(); return; L_089B32E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3480; } @@ -9185,7 +8795,6 @@ L_089B32E0: L_089B32E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3364; } @@ -9197,7 +8806,6 @@ L_089B32F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3364; } @@ -9209,7 +8817,6 @@ L_089B330C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3354; } @@ -9236,7 +8843,6 @@ L_089B3338: AOT_REGCACHE_SYNC_OUT(); return; L_089B334C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3480; } @@ -9259,7 +8865,6 @@ L_089B3364: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3458; } @@ -9273,7 +8878,6 @@ L_089B3374: AOT_REGCACHE_SYNC_OUT(); return; L_089B3380: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089B3420; } @@ -9283,7 +8887,6 @@ L_089B3388: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3420; } @@ -9301,7 +8904,6 @@ L_089B3398: AOT_REGCACHE_SYNC_OUT(); return; L_089B33B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B33D0; } @@ -9315,7 +8917,6 @@ L_089B33BC: AOT_REGCACHE_SYNC_OUT(); return; L_089B33C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3450; } @@ -9328,7 +8929,6 @@ L_089B33D0: AOT_REGCACHE_SYNC_OUT(); return; L_089B33D8: aot_gpr_31 = (0x089B33E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B33E0u) goto L_089B33E0; AOT_REGCACHE_SYNC_OUT(); return; L_089B33E0: @@ -9353,7 +8953,6 @@ L_089B33F4: AOT_REGCACHE_SYNC_OUT(); return; L_089B3418: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3450; } @@ -9373,7 +8972,6 @@ L_089B3420: AOT_REGCACHE_SYNC_OUT(); return; L_089B343C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B3450; } @@ -9387,7 +8985,6 @@ L_089B3444: AOT_REGCACHE_SYNC_OUT(); return; L_089B3450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3480; } @@ -9415,7 +9012,6 @@ L_089B346C: L_089B3480: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -9435,7 +9031,6 @@ L_089B348C: L_089B34AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B34F0; } @@ -9444,7 +9039,6 @@ L_089B34AC: L_089B34B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B34F0; } @@ -9471,7 +9065,6 @@ L_089B34F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3548; } @@ -9483,7 +9076,6 @@ L_089B3500: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B352C; } @@ -9504,7 +9096,6 @@ L_089B352C: AOT_REGCACHE_SYNC_OUT(); return; L_089B3534: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B3548; } @@ -9518,7 +9109,6 @@ L_089B353C: AOT_REGCACHE_SYNC_OUT(); return; L_089B3548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3604; } @@ -9527,7 +9117,6 @@ L_089B3548: L_089B3550: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B35E8; } @@ -9536,7 +9125,6 @@ L_089B3550: L_089B355C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089B35E8; } @@ -9546,7 +9134,6 @@ L_089B3568: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B35E8; } @@ -9554,7 +9141,6 @@ L_089B3568: } L_089B3578: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B35A4; } @@ -9569,7 +9155,6 @@ L_089B3588: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B35A4; } @@ -9585,7 +9170,6 @@ L_089B35A4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B35DC; } @@ -9645,7 +9229,17 @@ L_089B3604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B3620: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[18]); @@ -9670,7 +9264,6 @@ L_089B364C: goto L_089B3658; L_089B3658: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B36AC; } @@ -9681,7 +9274,6 @@ L_089B3660: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B36AC; } @@ -9691,7 +9283,6 @@ L_089B3674: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B36AC; } @@ -9701,7 +9292,6 @@ L_089B3684: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B36AC; } @@ -9717,7 +9307,6 @@ L_089B3694: goto L_089B36A4; L_089B36A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B36E8; } @@ -9725,7 +9314,6 @@ L_089B36A4: } L_089B36AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -9734,7 +9322,6 @@ L_089B36AC: L_089B36B4: aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B36E8; } @@ -9744,7 +9331,6 @@ L_089B36C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B36D8; } @@ -9752,7 +9338,6 @@ L_089B36C0: } L_089B36D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -9765,7 +9350,6 @@ L_089B36D8: AOT_REGCACHE_SYNC_OUT(); return; L_089B36E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -9783,7 +9367,6 @@ L_089B36F0: AOT_REGCACHE_SYNC_OUT(); return; L_089B36F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B37A0; } @@ -9794,7 +9377,6 @@ L_089B3700: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B37A0; } @@ -9803,7 +9385,6 @@ L_089B3700: L_089B3714: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(3152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B37A0; } @@ -9835,7 +9416,6 @@ L_089B3744: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(460), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3798; } @@ -9861,7 +9441,6 @@ L_089B3780: goto L_089B3798; L_089B3798: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -9874,7 +9453,6 @@ L_089B37A0: AOT_REGCACHE_SYNC_OUT(); return; L_089B37A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B3878; } @@ -9901,7 +9479,6 @@ L_089B37C8: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2238u << 16u); if (branch_taken) { @@ -9920,9 +9497,7 @@ L_089B37F0: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B3878; } @@ -9931,7 +9506,6 @@ L_089B37F0: L_089B3810: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3878; } @@ -9940,7 +9514,6 @@ L_089B3810: L_089B381C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3878; } @@ -9948,7 +9521,6 @@ L_089B381C: } L_089B3828: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B3840; } @@ -9958,7 +9530,6 @@ L_089B3830: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(48)))))); aot_gpr_5 = (0u | 77u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3864; } @@ -9973,7 +9544,6 @@ L_089B3840: L_089B384C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B3864; } @@ -9993,7 +9563,6 @@ L_089B3864: AOT_REGCACHE_SYNC_OUT(); return; L_089B3870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -10007,7 +9576,6 @@ L_089B3878: L_089B3880: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B3900; } @@ -10017,7 +9585,6 @@ L_089B388C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B38EC; } @@ -10072,7 +9639,6 @@ L_089B38EC: AOT_REGCACHE_SYNC_OUT(); return; L_089B38F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -10086,7 +9652,6 @@ L_089B3900: AOT_REGCACHE_SYNC_OUT(); return; L_089B390C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -10139,7 +9704,6 @@ L_089B394C: AOT_REGCACHE_SYNC_OUT(); return; L_089B3968: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B398C; } @@ -10149,7 +9713,6 @@ L_089B3970: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B398C; } @@ -10164,7 +9727,6 @@ L_089B3980: L_089B398C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3CA8; } @@ -10174,7 +9736,6 @@ L_089B3998: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B39B8; } @@ -10184,7 +9745,6 @@ L_089B39A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3CA8; } @@ -10194,7 +9754,6 @@ L_089B39B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3AB4; } @@ -10270,7 +9829,6 @@ L_089B3A64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3A94; } @@ -10280,7 +9838,6 @@ L_089B3A74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3A94; } @@ -10290,7 +9847,6 @@ L_089B3A84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3AA4; } @@ -10316,7 +9872,6 @@ L_089B3AA4: L_089B3AB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089B3CA8; } @@ -10326,7 +9881,6 @@ L_089B3AC0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3CA8; } @@ -10339,7 +9893,6 @@ L_089B3AD0: AOT_REGCACHE_SYNC_OUT(); return; L_089B3AD8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B3BFC; } @@ -10363,7 +9916,6 @@ L_089B3B00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3BE8; } @@ -10374,7 +9926,6 @@ L_089B3B1C: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3BE8; } @@ -10384,7 +9935,6 @@ L_089B3B30: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3BE8; } @@ -10406,7 +9956,6 @@ L_089B3B40: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3B98; } @@ -10436,7 +9985,6 @@ L_089B3BA8: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3BFC; } @@ -10449,7 +9997,6 @@ L_089B3BBC: AOT_REGCACHE_SYNC_OUT(); return; L_089B3BC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089B3BFC; } @@ -10457,7 +10004,6 @@ L_089B3BC4: } L_089B3BCC: aot_gpr_31 = (0x089B3BD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B3BD4u) goto L_089B3BD4; AOT_REGCACHE_SYNC_OUT(); return; L_089B3BD4: @@ -10468,7 +10014,6 @@ L_089B3BD4: AOT_REGCACHE_SYNC_OUT(); return; L_089B3BE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3BFC; } @@ -10494,7 +10039,6 @@ L_089B3C0C: aot_gpr_5 = (0u | 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3C44; } @@ -10506,7 +10050,6 @@ L_089B3C20: L_089B3C24: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3C50; } @@ -10517,7 +10060,6 @@ L_089B3C30: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3C50; } @@ -10542,7 +10084,6 @@ L_089B3C50: L_089B3C60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3C78; } @@ -10563,7 +10104,6 @@ L_089B3C80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(680))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3CA8; } @@ -10572,7 +10112,6 @@ L_089B3C80: L_089B3C90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3CA8; } @@ -10598,7 +10137,6 @@ L_089B3CA8: AOT_REGCACHE_SYNC_OUT(); return; L_089B3CC4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089B3D14; } @@ -10606,7 +10144,6 @@ L_089B3CC4: } L_089B3CCC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B3D14; } @@ -10616,7 +10153,6 @@ L_089B3CD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B3D14; } @@ -10643,7 +10179,6 @@ L_089B3CF8: AOT_REGCACHE_SYNC_OUT(); return; L_089B3D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3D20; } @@ -10668,7 +10203,17 @@ L_089B3D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B3D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[18]); @@ -10692,7 +10237,6 @@ L_089B3D74: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3DB4; } @@ -10710,7 +10254,6 @@ L_089B3D88: } L_089B3D98: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3DB4; } @@ -10727,7 +10270,6 @@ L_089B3DA0: } L_089B3DAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B3DE8; } @@ -10735,7 +10277,6 @@ L_089B3DAC: } L_089B3DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 11u, 0x089B407Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10743,7 +10284,6 @@ L_089B3DB4: } L_089B3DBC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3DE8; } @@ -10752,7 +10292,6 @@ L_089B3DBC: L_089B3DC4: aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3DD8; } @@ -10760,7 +10299,6 @@ L_089B3DC4: } L_089B3DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 11u, 0x089B407Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10773,7 +10311,6 @@ L_089B3DD8: AOT_REGCACHE_SYNC_OUT(); return; L_089B3DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 11u, 0x089B407Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10827,7 +10364,6 @@ L_089B3E3C: L_089B3E40: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B3E74; } @@ -10891,7 +10427,6 @@ L_089B3EB8: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089B3ED4; } @@ -10912,7 +10447,6 @@ L_089B3EDC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 17u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089B3F10; } @@ -10920,7 +10454,6 @@ L_089B3EDC: } L_089B3EEC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B3F10; } @@ -10930,7 +10463,6 @@ L_089B3EF4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B3F10; } @@ -10939,7 +10471,6 @@ L_089B3EF4: L_089B3F04: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(565))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B3F24; } @@ -10953,7 +10484,6 @@ L_089B3F10: AOT_REGCACHE_SYNC_OUT(); return; L_089B3F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 11u, 0x089B407Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10963,7 +10493,6 @@ L_089B3F24: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); ctx.gpr[8] = (0u | 8u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 3u, 0x089B4010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10973,7 +10502,6 @@ L_089B3F34: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(563))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B3F70; } @@ -10982,7 +10510,6 @@ L_089B3F34: L_089B3F44: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 3u, 0x089B4010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10992,7 +10519,6 @@ L_089B3F50: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); ctx.gpr[9] = (0u | 16u); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 3u, 0x089B4010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11002,7 +10528,6 @@ L_089B3F60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2196))); ctx.gpr[8] = (0u | 38u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[8]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 3u, 0x089B4010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11011,7 +10536,6 @@ L_089B3F60: L_089B3F70: aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B3F8C; } @@ -11021,7 +10545,6 @@ L_089B3F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B3F9C; } @@ -11043,7 +10566,6 @@ L_089B3F9C: L_089B3FAC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 11u, 0x089B407Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0108.cpp b/profiles/vcs/generated/generated_unit_0108.cpp index 78ca233..2ba822f 100644 --- a/profiles/vcs/generated/generated_unit_0108.cpp +++ b/profiles/vcs/generated/generated_unit_0108.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0108[4096] = { - 1, 0, 2, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 8, 0, 0, 9, 0, 10, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 15, 0, - 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 25, 0, - 26, 0, 0, 27, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, - 0, 0, 43, 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, - 0, 55, 0, 0, 56, 0, 57, 0, 0, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, - 69, 0, 70, 71, 0, 0, 72, 0, 73, 0, 0, 74, 75, 0, 0, 76, 0, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, - 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 92, 0, 0, 93, 0, 0, 94, 0, 95, 96, 0, 0, 0, 97, 98, 0, - 99, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 106, 0, 107, 0, 108, 0, - 109, 0, 0, 0, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 117, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, - 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, - 0, 134, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 0, 0, 141, 0, 142, 0, 143, 0, 144, - 0, 145, 0, 146, 0, 147, 0, 148, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 152, 0, 153, 0, 0, 0, 154, 0, - 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 158, 0, 159, 0, 160, 0, 161, 0, 0, 0, 162, - 0, 163, 0, 164, 165, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 174, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, - 0, 177, 0, 178, 0, 179, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, - 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, - 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, - 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, - 0, 197, 0, 198, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, - 0, 202, 0, 203, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, - 0, 220, 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 0, 225, 0, - 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 247, 0, 0, 248, 0, 249, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 255, 0, 256, 0, 257, 0, 258, 0, 0, 0, 0, 259, 0, - 260, 0, 0, 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 265, 0, 266, 0, 267, 0, 0, - 0, 0, 0, 268, 0, 269, 0, 0, 0, 270, 0, 271, 0, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 0, 275, 0, 0, 276, - 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, - 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 285, 0, 286, - 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 289, 0, 0, 290, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, - 299, 0, 0, 300, 0, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 0, 0, 304, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 311, 0, 0, 312, 0, 313, 0, 314, 0, 315, 0, - 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, - 324, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, 0, 331, 0, 332, - 0, 0, 333, 0, 334, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 340, 0, - 0, 0, 0, 0, 341, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 347, 0, 0, 0, 0, 0, 348, 0, - 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, - 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, - 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, - 0, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, - 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, - 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, - 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, - 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, - 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 402, 0, 403, 0, 0, 0, 0, 0, 0, 0, - 404, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 407, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 410, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 419, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, - 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, - 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, - 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, - 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 442, 0, 0, 0, 443, 0, 444, 445, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 457, 0, 458, 0, 459, 0, - 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, - 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 469, 0, 0, 470, - 0, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 474, 0, 475, 0, 0, 0, 0, 476, 0, 0, 0, 477, 0, 478, 0, 479, 0, - 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 485, 0, 0, - 0, 486, 487, 0, 0, 0, 488, 0, 489, 0, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, - 0, 0, 495, 0, 0, 496, 0, 0, 497, 0, 0, 0, 498, 499, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 502, - 0, 503, 0, 504, 0, 0, 0, 505, 0, 506, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 510, 0, 0, 511, 0, 512, 0, 513, 0, - 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 519, - 0, 520, 521, 0, 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 525, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 527, 0, 0, 528, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 537, 0, 538, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, - 542, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, 0, 548, 0, 0, 0, 0, 0, 0, 549, - 0, 550, 0, 551, 0, 0, 0, 552, 0, 0, 0, 553, 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 557, 0, 0, 558, 0, 559, 0, 0, 0, 560, - 0, 561, 0, 562, 0, 563, 0, 0, 0, 564, 0, 0, 0, 565, 0, 566, 567, 0, 568, 0, 0, 569, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, - 572, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 578, 0, 579, 0, 0, 580, 581, 0, - 582, 583, 0, 0, 584, 0, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 0, 588, 0, 0, 589, 0, 0, 590, 0, 0, 591, 0, 0, - 592, 0, 0, 593, 0, 0, 594, 0, 0, 595, 0, 0, 596, 0, 0, 597, 598, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, - 0, 0, 0, 601, 0, 602, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 605, 0, 0, 606, 0, 0, 607, 0, 0, 0, 608, 609, 0, 0, - 0, 0, 0, 610, 0, 0, 0, 0, 611, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 0, - 617, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 620, 621, 0, 0, 622, 0, 0, 623, 0, 624, 0, - 0, 0, 625, 0, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, - 632, 0, 0, 633, 0, 0, 634, 0, 635, 636, 637, 0, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 640, 0, 0, 641, 0, 0, 642, 0, 643, 0, - 0, 644, 645, 0, 646, 0, 0, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 656, 0, 657, 0, - 0, 658, 0, 659, 0, 660, 0, 661, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 670, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 673, 0, 674, 0, 675, 0, 0, 676, 0, 0, 677, 0, 0, 0, 0, - 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 682, 0, 0, 683, 0, 0, 684, 0, 0, - 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 0, 0, - 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 694, 0, 695, 0, 0, 696, 0, 697, 698, - 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, - 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, - 0, 0, 706, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 709, 0, - 710, 0, 711, 0, 712, 0, 713, 0, 714, 0, 0, 715, 0, 0, 716, 0, 717, 0, 718, 0, 0, 0, 719, 0, 0, 720, 0, 721, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 724, 0, 0, - 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, - 0, 733, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 737, 0, 0, 0, 0, 738, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0108[64] = { + 0x4440020085290455ull, 0x01054129482AA811ull, 0x208000A48A014A44ull, 0x555554520422802Aull, + 0x6349AAAAAAA8994Dull, 0x949140A154A05211ull, 0xAAA012AA84000200ull, 0x456001AAAA42844Aull, + 0x1000085A8AA10042ull, 0x080004AA21244085ull, 0x0220120221001001ull, 0x0220010A04005021ull, + 0x0008500100408A0Aull, 0x10000A0800410011ull, 0x4100004444400282ull, 0x00004000020100A0ull, + 0x0011000040000110ull, 0x0882000000000000ull, 0x010AA48000202800ull, 0x2A8002A142A91000ull, + 0x1000081491204A28ull, 0x42006442A0450002ull, 0x803224890A0A8000ull, 0x4822904155250400ull, + 0x41290414A4104A41ull, 0x4829040A41482290ull, 0x4000440850000101ull, 0x0000044050001084ull, + 0x8000000440000020ull, 0x000000000000000Aull, 0x0884000200000000ull, 0x0000000440000000ull, + 0x0104480000040480ull, 0x8000000010809000ull, 0x0040440000000020ull, 0x2224000301448000ull, + 0x0000001100000000ull, 0x0C11200000101200ull, 0x0120000000124800ull, 0x9000008120000000ull, + 0x0000000808040208ull, 0xA000000000000000ull, 0x0080800034540012ull, 0x0021020020040010ull, + 0x8100081054800104ull, 0x5442821494810102ull, 0x0812894620424022ull, 0x54A4128A88013124ull, + 0x4820541688040409ull, 0x4225480008881802ull, 0x8A4A288A81444803ull, 0x6522100B02A5A22Aull, + 0x0821924924924413ull, 0x0909090831241128ull, 0x1111110452640009ull, 0x5525551652508749ull, + 0x82140008109010AAull, 0x24A09008092A8400ull, 0xD2A8000A02824020ull, 0x0200100104009002ull, + 0x0A45495542000014ull, 0x2A00000000000000ull, 0x00A0000000080420ull, 0x8420420208040100ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0108[64] = { + 1u, 16u, 34u, 48u, 69u, 99u, 119u, 134u, 155u, 169u, 183u, 192u, 202u, 212u, 220u, 230u, + 235u, 240u, 243u, 253u, 268u, 281u, 294u, 308u, 324u, 341u, 357u, 365u, 372u, 376u, 378u, 382u, + 384u, 391u, 396u, 400u, 410u, 412u, 420u, 426u, 431u, 436u, 438u, 448u, 454u, 464u, 480u, 495u, + 514u, 529u, 542u, 561u, 582u, 601u, 617u, 632u, 658u, 671u, 685u, 699u, 706u, 722u, 725u, 730u, }; void recomp_unit_0108_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0108_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089B4000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0108[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0108[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0108[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089B4000; @@ -916,7 +823,6 @@ L_089B4000: AOT_REGCACHE_SYNC_OUT(); return; L_089B4008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B407C; } @@ -924,7 +830,6 @@ L_089B4008: } L_089B4010: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B4028; } @@ -942,7 +847,6 @@ L_089B4028: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4054; } @@ -956,7 +860,6 @@ L_089B4040: AOT_REGCACHE_SYNC_OUT(); return; L_089B404C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B407C; } @@ -998,7 +901,17 @@ L_089B407C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B40A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), ctx.gpr[18]); @@ -1020,7 +933,6 @@ L_089B40D8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 130u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089B40F8; } @@ -1030,7 +942,6 @@ L_089B40E8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(48)))))); aot_gpr_6 = (0u | 131u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089B4110; } @@ -1038,7 +949,6 @@ L_089B40E8: } L_089B40F8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089B4110; } @@ -1048,7 +958,6 @@ L_089B4100: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_6 = (0u | 45u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089B4134; } @@ -1061,7 +970,6 @@ L_089B4110: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(36), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (0u | 200u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B4144; } @@ -1069,7 +977,6 @@ L_089B4110: } L_089B412C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B414C; } @@ -1082,7 +989,6 @@ L_089B4134: AOT_REGCACHE_SYNC_OUT(); return; L_089B413C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B45FC; } @@ -1095,7 +1001,6 @@ L_089B4144: AOT_REGCACHE_SYNC_OUT(); return; L_089B414C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B4180; } @@ -1144,7 +1049,6 @@ L_089B4180: AOT_REGCACHE_SYNC_OUT(); return; L_089B418C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B45FC; } @@ -1173,7 +1077,6 @@ L_089B41A0: AOT_REGCACHE_SYNC_OUT(); return; L_089B41B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B4208; } @@ -1191,9 +1094,7 @@ L_089B41C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B4208; } @@ -1236,7 +1137,6 @@ L_089B422C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B45FC; } @@ -1249,9 +1149,7 @@ L_089B4240: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B429C; } @@ -1259,7 +1157,6 @@ L_089B4240: } L_089B4264: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B4288; } @@ -1286,7 +1183,6 @@ L_089B4288: AOT_REGCACHE_SYNC_OUT(); return; L_089B4294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B45FC; } @@ -1341,7 +1237,6 @@ L_089B42F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B433C; } @@ -1354,7 +1249,6 @@ L_089B4304: AOT_REGCACHE_SYNC_OUT(); return; L_089B430C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B433C; } @@ -1377,7 +1271,6 @@ L_089B4314: AOT_REGCACHE_SYNC_OUT(); return; L_089B433C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B45F0; } @@ -1418,7 +1311,6 @@ L_089B4384: AOT_REGCACHE_SYNC_OUT(); return; L_089B4390: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B44E4; } @@ -1436,7 +1328,6 @@ L_089B4398: } L_089B43A8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089B4408; } @@ -1444,7 +1335,6 @@ L_089B43A8: } L_089B43B0: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089B43E8; } @@ -1473,7 +1363,6 @@ L_089B43C8: } L_089B43D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4408; } @@ -1538,7 +1427,6 @@ L_089B4418: L_089B4420: aot_gpr_4 = (ctx.gpr[2] < static_cast(225) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4430; } @@ -1569,7 +1457,6 @@ L_089B444C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4454: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1582,7 +1469,6 @@ L_089B445C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4464: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1595,7 +1481,6 @@ L_089B446C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4474: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1608,7 +1493,6 @@ L_089B447C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4484: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1621,7 +1505,6 @@ L_089B448C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4494: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1634,7 +1517,6 @@ L_089B449C: AOT_REGCACHE_SYNC_OUT(); return; L_089B44A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1647,7 +1529,6 @@ L_089B44AC: AOT_REGCACHE_SYNC_OUT(); return; L_089B44B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1659,7 +1540,6 @@ L_089B44BC: L_089B44C0: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1668,7 +1548,6 @@ L_089B44C0: L_089B44CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(596))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B44E0; } @@ -1676,7 +1555,6 @@ L_089B44CC: } L_089B44D8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089B44E4; } @@ -1689,7 +1567,6 @@ L_089B44E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B44F8; } @@ -1700,7 +1577,6 @@ L_089B44F4: goto L_089B44F8; L_089B44F8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B459C; } @@ -1710,7 +1586,6 @@ L_089B4500: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4538; } @@ -1721,7 +1596,6 @@ L_089B4510: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4538; } @@ -1735,7 +1609,6 @@ L_089B4524: AOT_REGCACHE_SYNC_OUT(); return; L_089B4530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4568; } @@ -1755,7 +1628,6 @@ L_089B4538: AOT_REGCACHE_SYNC_OUT(); return; L_089B4554: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B4568; } @@ -1774,7 +1646,6 @@ L_089B4568: AOT_REGCACHE_SYNC_OUT(); return; L_089B4570: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B45E8; } @@ -1795,7 +1666,6 @@ L_089B4580: AOT_REGCACHE_SYNC_OUT(); return; L_089B4594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B45E8; } @@ -1815,7 +1685,6 @@ L_089B459C: AOT_REGCACHE_SYNC_OUT(); return; L_089B45B8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B45DC; } @@ -1825,7 +1694,6 @@ L_089B45C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B45DC; } @@ -1845,7 +1713,6 @@ L_089B45DC: AOT_REGCACHE_SYNC_OUT(); return; L_089B45E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B45FC; } @@ -1874,7 +1741,17 @@ L_089B45FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B4624: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); @@ -1899,7 +1776,6 @@ L_089B4668: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B469C; } @@ -1907,12 +1783,10 @@ L_089B4668: } L_089B467C: aot_gpr_31 = (0x089B4684u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B4684u) goto L_089B4684; AOT_REGCACHE_SYNC_OUT(); return; L_089B4684: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089B46DC; } @@ -1920,12 +1794,10 @@ L_089B4684: } L_089B468C: aot_gpr_31 = (0x089B4694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B4694u) goto L_089B4694; AOT_REGCACHE_SYNC_OUT(); return; L_089B4694: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089B46DC; } @@ -1933,7 +1805,6 @@ L_089B4694: } L_089B469C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B46B0; } @@ -1942,7 +1813,6 @@ L_089B469C: L_089B46A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089B46DC; } @@ -1957,7 +1827,6 @@ L_089B46B0: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B46E4; } @@ -1965,7 +1834,6 @@ L_089B46B0: } L_089B46D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B46F4; } @@ -1973,7 +1841,6 @@ L_089B46D4: } L_089B46DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4A00; } @@ -1981,12 +1848,10 @@ L_089B46DC: } L_089B46E4: aot_gpr_31 = (0x089B46ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B46ECu) goto L_089B46EC; AOT_REGCACHE_SYNC_OUT(); return; L_089B46EC: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089B4704; } @@ -2000,7 +1865,6 @@ L_089B46F4: goto L_089B46FC; L_089B46FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4854; } @@ -2008,7 +1872,6 @@ L_089B46FC: } L_089B4704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4A00; } @@ -2017,7 +1880,6 @@ L_089B4704: L_089B470C: aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B4854; } @@ -2027,7 +1889,6 @@ L_089B4718: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B4854; } @@ -2038,7 +1899,6 @@ L_089B4728: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B4744; } @@ -2057,7 +1917,6 @@ L_089B4744: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (aot_gpr_4 & 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B476C; } @@ -2066,7 +1925,6 @@ L_089B4744: L_089B4758: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B476C; } @@ -2082,7 +1940,6 @@ L_089B4764: } L_089B476C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4A00; } @@ -2090,7 +1947,6 @@ L_089B476C: } L_089B4774: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B4854; } @@ -2114,7 +1970,6 @@ L_089B478C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4794: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B4854; } @@ -2152,7 +2007,6 @@ L_089B47D8: AOT_REGCACHE_SYNC_OUT(); return; L_089B47E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B4840; } @@ -2162,7 +2016,6 @@ L_089B47E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089B4840; } @@ -2171,7 +2024,6 @@ L_089B47E8: L_089B47F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1784))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089B4840; } @@ -2182,7 +2034,6 @@ L_089B4804: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B4840; } @@ -2213,7 +2064,6 @@ L_089B4840: } L_089B4854: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B4A00; } @@ -2226,7 +2076,6 @@ L_089B485C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4864: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B4A00; } @@ -2247,7 +2096,6 @@ L_089B487C: AOT_REGCACHE_SYNC_OUT(); return; L_089B4884: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B4A00; } @@ -2258,7 +2106,6 @@ L_089B488C: goto L_089B4890; L_089B4890: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B48AC; } @@ -2269,7 +2116,6 @@ L_089B4898: aot_gpr_5 = (0u + static_cast(-957)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B4A00; } @@ -2310,7 +2156,6 @@ L_089B48F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(64)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4908; } @@ -2344,7 +2189,6 @@ L_089B4938: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089B4994; } @@ -2353,7 +2197,6 @@ L_089B4938: L_089B4948: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4994; } @@ -2362,7 +2205,6 @@ L_089B4948: L_089B4954: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_089B4994; } @@ -2373,7 +2215,6 @@ L_089B4960: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B4994; } @@ -2383,7 +2224,6 @@ L_089B4974: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089B4994; } @@ -2396,7 +2236,6 @@ L_089B4984: AOT_REGCACHE_SYNC_OUT(); return; L_089B498C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B499C; } @@ -2404,7 +2243,6 @@ L_089B498C: } L_089B4994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B49EC; } @@ -2413,7 +2251,6 @@ L_089B4994: L_089B499C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B49EC; } @@ -2468,7 +2305,17 @@ L_089B4A00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B4A30: aot_gpr_29 = (aot_gpr_29 + static_cast(-704)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); @@ -2486,7 +2333,6 @@ L_089B4A60: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B56D0; } @@ -2496,7 +2342,6 @@ L_089B4A74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B5584; } @@ -2541,7 +2386,6 @@ L_089B4AD4: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4C24; } @@ -2554,7 +2398,6 @@ L_089B4AE4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6112))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089B4C0C; } @@ -2580,7 +2423,6 @@ L_089B4B14: AOT_REGCACHE_SYNC_OUT(); return; L_089B4B30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B4C04; } @@ -2619,7 +2461,6 @@ L_089B4B68: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6116)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4BD4; } @@ -2627,7 +2468,6 @@ L_089B4B68: } L_089B4B84: aot_gpr_31 = (0x089B4B8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B4B8Cu) goto L_089B4B8C; AOT_REGCACHE_SYNC_OUT(); return; L_089B4B8C: @@ -2675,7 +2515,6 @@ L_089B4BE4: goto L_089B4C04; L_089B4C04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4C24; } @@ -2687,7 +2526,6 @@ L_089B4C0C: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4AE4; } @@ -2695,7 +2533,6 @@ L_089B4C0C: } L_089B4C24: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089B4DA4; } @@ -2705,7 +2542,6 @@ L_089B4C2C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4DA4; } @@ -2718,7 +2554,6 @@ L_089B4C3C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4D8C; } @@ -2732,9 +2567,7 @@ L_089B4C58: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6096))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B4D8C; } @@ -2752,7 +2585,6 @@ L_089B4C80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6116)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4D00; } @@ -2760,7 +2592,6 @@ L_089B4C80: } L_089B4CB0: aot_gpr_31 = (0x089B4CB8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B4CB8u) goto L_089B4CB8; AOT_REGCACHE_SYNC_OUT(); return; L_089B4CB8: @@ -2844,7 +2675,6 @@ L_089B4D58: aot_gpr_4 = (aot_gpr_4 + static_cast(500)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1728), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4DA4; } @@ -2856,7 +2686,6 @@ L_089B4D8C: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4C3C; } @@ -2864,7 +2693,6 @@ L_089B4D8C: } L_089B4DA4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089B4DF0; } @@ -2906,7 +2734,6 @@ L_089B4DF0: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B4F14; } @@ -2918,7 +2745,6 @@ L_089B4E04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B4E24; } @@ -2926,7 +2752,6 @@ L_089B4E04: } L_089B4E1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B4EF8; } @@ -2951,9 +2776,7 @@ L_089B4E24: aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B4EF8; } @@ -2963,7 +2786,6 @@ L_089B4E58: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B4EF8; } @@ -2973,7 +2795,6 @@ L_089B4E68: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B4EF8; } @@ -2983,7 +2804,6 @@ L_089B4E78: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B4EF8; } @@ -2993,7 +2813,6 @@ L_089B4E88: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(624))); aot_gpr_5 = (static_cast(aot_gpr_5) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B4EF8; } @@ -3053,9 +2872,7 @@ L_089B4E98: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B4EF8; } @@ -3084,7 +2901,6 @@ L_089B4EF8: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B4E04; } @@ -3092,7 +2908,6 @@ L_089B4EF8: } L_089B4F14: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B535C; } @@ -3188,7 +3003,6 @@ L_089B4F64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(624))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B5010; } @@ -3237,7 +3051,6 @@ L_089B4FB8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B50C0; } @@ -3247,7 +3060,6 @@ L_089B5010: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(624))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B5078; } @@ -3296,7 +3108,6 @@ L_089B5020: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B50C0; } @@ -3615,9 +3426,7 @@ L_089B50D0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B51DC; } @@ -3640,7 +3449,6 @@ L_089B51C4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B51EC; } @@ -3695,7 +3503,6 @@ L_089B51EC: AOT_REGCACHE_SYNC_OUT(); return; L_089B522C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B52C4; } @@ -3741,7 +3548,6 @@ L_089B5254: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B52A8; } @@ -3766,7 +3572,6 @@ L_089B52B4: AOT_REGCACHE_SYNC_OUT(); return; L_089B52BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B5330; } @@ -3774,7 +3579,6 @@ L_089B52BC: } L_089B52C4: aot_gpr_31 = (0x089B52CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B52CCu) goto L_089B52CC; AOT_REGCACHE_SYNC_OUT(); return; L_089B52CC: @@ -3811,7 +3615,6 @@ L_089B5330: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(424))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B5354; } @@ -3820,7 +3623,6 @@ L_089B5330: L_089B5340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(416))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B5354; } @@ -3833,7 +3635,6 @@ L_089B534C: AOT_REGCACHE_SYNC_OUT(); return; L_089B5354: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B5378; } @@ -3841,7 +3642,6 @@ L_089B5354: } L_089B535C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089B5378; } @@ -3856,7 +3656,6 @@ L_089B5364: goto L_089B5378; L_089B5378: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089B5394; } @@ -3867,7 +3666,6 @@ L_089B5380: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B557C; } @@ -3880,7 +3678,6 @@ L_089B5394: AOT_REGCACHE_SYNC_OUT(); return; L_089B539C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B5548; } @@ -3909,7 +3706,6 @@ L_089B53DC: AOT_REGCACHE_SYNC_OUT(); return; L_089B53E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B5424; } @@ -3926,7 +3722,6 @@ L_089B53F4: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B5424; } @@ -3969,7 +3764,6 @@ L_089B5438: L_089B5454: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B5470; } @@ -3979,7 +3773,6 @@ L_089B5460: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B5488; } @@ -4002,7 +3795,6 @@ L_089B547C: AOT_REGCACHE_SYNC_OUT(); return; L_089B5488: aot_gpr_31 = (0x089B5490u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B5490u) goto L_089B5490; AOT_REGCACHE_SYNC_OUT(); return; L_089B5490: @@ -4073,7 +3865,6 @@ L_089B5548: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B5574; } @@ -4102,7 +3893,6 @@ L_089B5574: } L_089B557C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B56D0; } @@ -4113,7 +3903,6 @@ L_089B5584: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B5680; } @@ -4180,7 +3969,6 @@ L_089B55F8: AOT_REGCACHE_SYNC_OUT(); return; L_089B563C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B56D0; } @@ -4197,7 +3985,6 @@ L_089B564C: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B56D0; } @@ -4222,7 +4009,6 @@ L_089B566C: L_089B5680: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B569C; } @@ -4232,7 +4018,6 @@ L_089B568C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1716))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B56B4; } @@ -4257,7 +4042,6 @@ L_089B56B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B56D0; } @@ -4289,7 +4073,17 @@ L_089B56D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B56FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4317,7 +4111,6 @@ L_089B5728: } L_089B5740: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089B582C; } @@ -4363,7 +4156,6 @@ L_089B5770: goto L_089B5778; L_089B5778: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B57C4; } @@ -4397,7 +4189,6 @@ L_089B57B0: AOT_REGCACHE_SYNC_OUT(); return; L_089B57BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4407,7 +4198,6 @@ L_089B57C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B5800; } @@ -4430,7 +4220,6 @@ L_089B57EC: AOT_REGCACHE_SYNC_OUT(); return; L_089B57F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4453,7 +4242,6 @@ L_089B5818: AOT_REGCACHE_SYNC_OUT(); return; L_089B5824: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4462,7 +4250,6 @@ L_089B5824: L_089B582C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B587C; } @@ -4496,7 +4283,6 @@ L_089B5868: AOT_REGCACHE_SYNC_OUT(); return; L_089B5874: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4513,7 +4299,6 @@ L_089B587C: } L_089B5888: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B58D4; } @@ -4547,7 +4332,6 @@ L_089B58C0: AOT_REGCACHE_SYNC_OUT(); return; L_089B58CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4556,7 +4340,6 @@ L_089B58CC: L_089B58D4: aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B5924; } @@ -4590,7 +4373,6 @@ L_089B5910: AOT_REGCACHE_SYNC_OUT(); return; L_089B591C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4600,7 +4382,6 @@ L_089B5924: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B5960; } @@ -4623,7 +4404,6 @@ L_089B594C: AOT_REGCACHE_SYNC_OUT(); return; L_089B5958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4646,7 +4426,6 @@ L_089B5978: AOT_REGCACHE_SYNC_OUT(); return; L_089B5984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4659,7 +4438,6 @@ L_089B598C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B59D4; } @@ -4682,7 +4460,6 @@ L_089B59C0: AOT_REGCACHE_SYNC_OUT(); return; L_089B59CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B59F8; } @@ -4723,7 +4500,17 @@ L_089B5A00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B5A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-1568)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1536), ctx.gpr[19]); @@ -4749,7 +4536,6 @@ L_089B5A78: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6A70; } @@ -4848,7 +4634,6 @@ L_089B5B30: AOT_REGCACHE_SYNC_OUT(); return; L_089B5B70: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B5D04; } @@ -5029,7 +4814,6 @@ L_089B5C88: goto L_089B5CFC; L_089B5CFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B69F4; } @@ -5156,7 +4940,6 @@ L_089B5E84: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (aot_gpr_16 + aot_gpr_4); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B686C; } @@ -5229,7 +5012,6 @@ L_089B5EEC: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1492))); if (branch_taken) { @@ -5298,9 +5080,7 @@ L_089B5F88: { const float fs = aot_fpr_15; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B60AC; } @@ -5367,7 +5147,6 @@ L_089B6048: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1448), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B60C8; } @@ -5417,7 +5196,6 @@ L_089B60E0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[17] = (ctx.gpr[17] + aot_gpr_4); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089B6848; } @@ -5574,7 +5352,6 @@ L_089B6214: { const float fs = aot_fpr_15; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1496))); if (branch_taken) { @@ -5644,7 +5421,6 @@ L_089B62D8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1396), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B6358; } @@ -5674,7 +5450,6 @@ L_089B6360: aot_gpr_6 = (aot_gpr_6 & 15u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B6848; } @@ -5700,7 +5475,6 @@ L_089B6384: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[18] = (ctx.gpr[18] + aot_gpr_4); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089B6824; } @@ -5709,7 +5483,6 @@ L_089B6384: L_089B63C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1324))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_089B6824; } @@ -5781,9 +5554,7 @@ L_089B63F4: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B65D0; } @@ -5850,9 +5621,7 @@ L_089B6490: { const float fs = aot_fpr_15; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B65B4; } @@ -5919,7 +5688,6 @@ L_089B6550: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1344), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B65D0; } @@ -5943,7 +5711,6 @@ L_089B65D0: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6824; } @@ -5968,7 +5735,6 @@ L_089B65EC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (aot_gpr_16 + aot_gpr_4); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089B680C; } @@ -5977,7 +5743,6 @@ L_089B65EC: L_089B662C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1296))); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_089B680C; } @@ -6045,9 +5810,7 @@ L_089B6650: { const float fs = aot_fpr_15; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B680C; } @@ -6113,9 +5876,7 @@ L_089B66E0: { const float fs = aot_fpr_15; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B67F0; } @@ -6177,7 +5938,6 @@ L_089B679C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(ctx.fpr[26])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(ctx.fpr[24])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B680C; } @@ -6344,7 +6104,6 @@ L_089B69F4: AOT_REGCACHE_SYNC_OUT(); return; L_089B69FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B6A70; } @@ -6368,9 +6127,7 @@ L_089B6A10: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B6A58; } @@ -6383,7 +6140,6 @@ L_089B6A48: AOT_REGCACHE_SYNC_OUT(); return; L_089B6A50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B6A70; } @@ -6432,7 +6188,17 @@ L_089B6A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6ABC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_fpr_12 = std::bit_cast(0u); @@ -6444,7 +6210,17 @@ L_089B6ABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6ADC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_fpr_12 = std::bit_cast(0u); @@ -6461,7 +6237,17 @@ L_089B6ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6B10: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17]}; @@ -6665,7 +6451,17 @@ L_089B6D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6D40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6682,7 +6478,6 @@ L_089B6D40: L_089B6D5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6D70; } @@ -6702,7 +6497,6 @@ L_089B6D70: L_089B6D7C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6D90; } @@ -6725,7 +6519,17 @@ L_089B6D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6DA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -6748,7 +6552,6 @@ L_089B6DC4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6E04; } @@ -6785,7 +6588,17 @@ L_089B6E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6E14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -6843,7 +6656,6 @@ L_089B6E88: AOT_REGCACHE_SYNC_OUT(); return; L_089B6E98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B6EAC; } @@ -6859,7 +6671,6 @@ L_089B6EAC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (ctx.gpr[18] < static_cast(68) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B6E88; } @@ -6890,7 +6701,17 @@ L_089B6ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6EEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6902,7 +6723,6 @@ L_089B6EEC: L_089B6F08: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6F34; } @@ -6927,7 +6747,6 @@ L_089B6F30: L_089B6F34: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B6FB0; } @@ -6997,7 +6816,17 @@ L_089B6FB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B6FC8: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -7009,7 +6838,6 @@ L_089B6FC8: } L_089B6FD4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B6FF8; } @@ -7018,7 +6846,6 @@ L_089B6FD4: L_089B6FDC: ctx.gpr[7] = (static_cast(aot_gpr_5) < 16 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089B6FF0; } @@ -7051,7 +6878,6 @@ L_089B6FF8: L_089B7000: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(6264))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089B706C; } @@ -7074,7 +6900,6 @@ L_089B7028: aot_gpr_6 = (aot_gpr_6 & 255u); ctx.gpr[8] = (static_cast(aot_gpr_6) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089B7028; } @@ -7118,11 +6943,20 @@ L_089B7084: goto L_089B7088; L_089B7088: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -7145,7 +6979,6 @@ L_089B70A8: } L_089B70B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B715C; } @@ -7158,7 +6991,6 @@ L_089B70B8: aot_gpr_6 = (aot_gpr_16 + aot_gpr_6); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(6264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B715C; } @@ -7179,7 +7011,6 @@ L_089B70D4: L_089B70EC: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(20256))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_089B714C; } @@ -7188,7 +7019,6 @@ L_089B70EC: L_089B70F8: aot_gpr_5 = (aot_gpr_6 < static_cast(249) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B7130; } @@ -7241,7 +7071,17 @@ L_089B715C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B716C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -7274,7 +7114,6 @@ L_089B71B8: AOT_REGCACHE_SYNC_OUT(); return; L_089B71C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B71E4; } @@ -7283,7 +7122,6 @@ L_089B71C0: L_089B71C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(26368))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089B71E4; } @@ -7293,7 +7131,6 @@ L_089B71D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(26404))); aot_gpr_4 = (ctx.gpr[21] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B7200; } @@ -7338,7 +7175,17 @@ L_089B7204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B722C: ctx.gpr[9] = (aot_gpr_5 & 255u); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -7348,7 +7195,6 @@ L_089B7238: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26404))); ctx.gpr[10] = (ctx.gpr[10] < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_089B7260; } @@ -7366,7 +7212,6 @@ L_089B7248: } L_089B7258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B727C; } @@ -7394,11 +7239,20 @@ L_089B7260: goto L_089B727C; L_089B727C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7284: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.gpr[7] = (0u | 0u); @@ -7407,7 +7261,6 @@ L_089B728C: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26856))); ctx.gpr[9] = (ctx.gpr[9] < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089B72B4; } @@ -7425,7 +7278,6 @@ L_089B729C: } L_089B72AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B72C4; } @@ -7439,11 +7291,20 @@ L_089B72B4: goto L_089B72C4; L_089B72C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B72CC: ctx.gpr[8] = (aot_gpr_5 & 255u); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -7460,7 +7321,6 @@ L_089B72D8: } L_089B72E4: { const bool branch_taken = ctx.gpr[9] != aot_gpr_6; - // nop if (branch_taken) { goto L_089B72FC; } @@ -7470,7 +7330,6 @@ L_089B72EC: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26856))); ctx.gpr[10] = (ctx.gpr[7] < ctx.gpr[10] ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_089B730C; } @@ -7484,7 +7343,6 @@ L_089B72FC: goto L_089B7304; L_089B7304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B7324; } @@ -7502,7 +7360,6 @@ L_089B7314: ctx.gpr[9] = (ctx.gpr[9] + static_cast(-200)); ctx.gpr[9] = (ctx.gpr[7] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089B733C; } @@ -7531,11 +7388,20 @@ L_089B733C: goto L_089B7340; L_089B7340: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7348: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -7555,7 +7421,6 @@ L_089B7354: } L_089B735C: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089B7384; } @@ -7568,7 +7433,6 @@ L_089B7364: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6264))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B7384; } @@ -7579,11 +7443,20 @@ L_089B7380: goto L_089B7384; L_089B7384: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B738C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -7655,7 +7528,6 @@ L_089B7410: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B7404; } @@ -7761,7 +7633,17 @@ L_089B74D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B74EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -7781,7 +7663,6 @@ L_089B750C: L_089B7514: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(6264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7560; } @@ -7791,7 +7672,6 @@ L_089B7520: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(6256))); aot_gpr_5 = (aot_gpr_4 < static_cast(11) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B7560; } @@ -7803,11 +7683,20 @@ L_089B7530: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4128))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7548: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(6260))); aot_gpr_31 = (0x089B7554u); @@ -7845,7 +7734,17 @@ L_089B7574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B758C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7861,7 +7760,17 @@ L_089B75A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B75AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7877,7 +7786,17 @@ L_089B75C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B75CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7893,7 +7812,17 @@ L_089B75E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B75EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7909,7 +7838,17 @@ L_089B7600: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B760C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 + static_cast(26344)); @@ -7945,7 +7884,6 @@ L_089B7654: L_089B7658: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7790; } @@ -7954,7 +7892,6 @@ L_089B7658: L_089B7664: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26342))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B7790; } @@ -7977,7 +7914,6 @@ L_089B7688: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B7678; } @@ -8034,7 +7970,6 @@ L_089B7700: L_089B770C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7720; } @@ -8080,7 +8015,6 @@ L_089B7750: L_089B7758: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(144))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B7778; } @@ -8115,7 +8049,6 @@ L_089B7790: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(144))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B77A8; } @@ -8149,7 +8082,6 @@ L_089B77C0: L_089B77C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B77F0; } @@ -8158,7 +8090,6 @@ L_089B77C8: L_089B77D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B77E8; } @@ -8182,7 +8113,6 @@ L_089B77F0: L_089B77F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B780C; } @@ -8255,7 +8185,17 @@ L_089B7870: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B788C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -8274,7 +8214,6 @@ L_089B788C: AOT_REGCACHE_SYNC_OUT(); return; L_089B78C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B794C; } @@ -8283,9 +8222,7 @@ L_089B78C8: L_089B78D0: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(aot_fpr_12)) && ctx.fpr[20] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B794C; } @@ -8295,9 +8232,7 @@ L_089B78E4: ctx.fpr[24] = ctx.fpr[22] - ctx.fpr[24]; aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B794C; } @@ -8312,9 +8247,7 @@ L_089B78FC: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[20]) & 0x7FFFFFFFu); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B7944; } @@ -8323,9 +8256,7 @@ L_089B78FC: L_089B7928: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B7954; } @@ -8333,7 +8264,6 @@ L_089B7928: } L_089B793C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B79DC; } @@ -8375,7 +8305,6 @@ L_089B796C: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089B798C; @@ -8388,7 +8317,6 @@ L_089B798C: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -8415,7 +8343,6 @@ L_089B79BC: goto L_089B79D4; L_089B79D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B7A64; } @@ -8441,7 +8368,6 @@ L_089B79F4: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089B7A14; @@ -8454,7 +8380,6 @@ L_089B7A14: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -8481,7 +8406,6 @@ L_089B7A44: goto L_089B7A5C; L_089B7A5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B7A64; } @@ -8502,10 +8426,19 @@ L_089B7A64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7A84: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B7AD4; } @@ -8551,7 +8484,6 @@ L_089B7AD4: } L_089B7ADC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B7AF0; } @@ -8564,7 +8496,6 @@ L_089B7AE4: goto L_089B7AF0; L_089B7AF0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B7AFC; } @@ -8575,11 +8506,20 @@ L_089B7AF8: goto L_089B7AFC; L_089B7AFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7B04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(21256))); @@ -8633,7 +8573,17 @@ L_089B7B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7B80: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); @@ -8685,7 +8635,6 @@ L_089B7BE4: } L_089B7C08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B7DF4; } @@ -8712,7 +8661,6 @@ L_089B7C10: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B7C80; } @@ -8723,7 +8671,6 @@ L_089B7C64: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(121), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B7C98; } @@ -8731,7 +8678,6 @@ L_089B7C64: } L_089B7C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B7C88; } @@ -8739,7 +8685,6 @@ L_089B7C78: } L_089B7C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B7DF4; } @@ -8747,12 +8692,10 @@ L_089B7C80: } L_089B7C88: aot_gpr_31 = (0x089B7C90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 534u, 0x08AAE9A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B7C90u) goto L_089B7C90; AOT_REGCACHE_SYNC_OUT(); return; L_089B7C90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B7CA0; } @@ -8765,7 +8708,6 @@ L_089B7C98: L_089B7CA0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(6))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7CC0; } @@ -8774,7 +8716,6 @@ L_089B7CA0: L_089B7CAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7CC0; } @@ -8796,7 +8737,6 @@ L_089B7CC8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(113), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7CEC; } @@ -8805,7 +8745,6 @@ L_089B7CC8: L_089B7CD8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B7CEC; } @@ -8892,7 +8831,6 @@ L_089B7CEC: goto L_089B7EDC; L_089B7DE4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089B7DF4; } @@ -8918,7 +8856,17 @@ L_089B7DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7E14: ctx.gpr[11] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4))); ctx.gpr[2] = (0u | 0u); @@ -8981,11 +8929,20 @@ L_089B7E4C: } L_089B7ED4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7EDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9030,7 +8987,6 @@ L_089B7F48: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(236))); ctx.gpr[8] = (aot_gpr_6 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089B7FA4; } @@ -9084,7 +9040,17 @@ L_089B7FB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B7FD4: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4))); ctx.gpr[8] = (0u | 0u); diff --git a/profiles/vcs/generated/generated_unit_0109.cpp b/profiles/vcs/generated/generated_unit_0109.cpp index 66b70b7..87ae008 100644 --- a/profiles/vcs/generated/generated_unit_0109.cpp +++ b/profiles/vcs/generated/generated_unit_0109.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0109[4094] = { - 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 10, 0, 11, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 0, 20, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 33, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 53, 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 0, - 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 0, 0, 61, 62, 0, 0, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, - 66, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 89, - 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, - 0, 0, 0, 0, 93, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 0, - 105, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 107, 0, 108, 0, 109, 0, 110, 0, 0, 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 0, 113, - 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 119, - 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 122, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 127, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, - 0, 0, 136, 0, 0, 137, 0, 0, 0, 138, 0, 0, 139, 0, 140, 0, 0, 141, 0, 0, 142, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 145, - 0, 0, 146, 0, 147, 0, 0, 148, 0, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 0, 151, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, - 0, 0, 154, 0, 155, 0, 0, 156, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 159, 0, 0, 160, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 165, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 0, - 174, 0, 175, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 179, 0, 180, 0, 0, 181, 0, 182, 183, 0, 184, 0, 0, 185, 0, 186, 0, 0, - 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, 193, 0, 0, 194, 0, - 0, 195, 0, 0, 0, 0, 196, 0, 0, 197, 198, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 203, 0, 0, 0, 0, 204, - 0, 205, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 0, 213, 0, 214, - 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 219, 0, 0, 0, 220, 0, 221, 0, 0, 0, 222, 223, 224, - 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, 0, 0, 228, 229, 0, 0, 230, 0, 231, 0, 0, 232, 233, 0, 234, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 0, - 0, 241, 0, 0, 242, 0, 0, 243, 0, 0, 0, 0, 244, 0, 245, 0, 0, 0, 0, 246, 247, 0, 0, 0, 248, 249, 0, 0, 0, 250, 0, 251, - 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, - 0, 257, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 262, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, - 0, 267, 0, 268, 0, 0, 0, 269, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 273, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, 0, 280, 0, 0, 281, 0, 0, 0, 282, 0, - 0, 0, 283, 284, 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 287, 288, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 291, 0, 292, - 0, 0, 293, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 0, 0, 299, - 300, 0, 0, 301, 0, 302, 0, 0, 303, 304, 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, - 0, 309, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, 313, 0, 0, 0, 314, 0, 0, 315, 0, 0, 0, - 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, - 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 0, 333, 334, - 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 341, - 0, 0, 0, 0, 0, 0, 342, 343, 0, 0, 344, 0, 0, 345, 0, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 349, 0, 0, 0, 0, 350, 0, 351, 0, 0, 352, 0, 353, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, - 0, 0, 0, 0, 358, 0, 359, 0, 360, 0, 361, 0, 362, 0, 0, 0, 0, 363, 364, 365, 0, 366, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, - 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 373, - 0, 374, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 377, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 381, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 386, 0, 387, 0, 388, - 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 394, - 0, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 0, 0, 401, 0, 0, 402, 0, 403, 0, 0, 404, 0, 405, 0, 0, 0, 406, - 0, 0, 407, 0, 0, 408, 0, 409, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 413, 0, 0, 414, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, - 0, 418, 0, 419, 0, 420, 0, 0, 0, 421, 0, 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 425, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, - 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, - 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 435, 436, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 452, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 458, 0, 0, 459, 0, 0, 0, 0, - 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 463, 0, 0, 464, 465, 0, 466, 0, 467, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 474, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, - 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 480, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 486, 0, 487, - 0, 0, 488, 0, 489, 0, 0, 490, 0, 0, 0, 491, 0, 492, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 498, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 501, 502, 0, 503, 0, 504, 0, 505, 0, 506, 0, 507, - 0, 508, 0, 509, 0, 0, 510, 0, 511, 0, 512, 0, 0, 513, 0, 0, 514, 0, 515, 516, 0, 517, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, - 0, 522, 0, 523, 0, 524, 0, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 0, 530, 0, 531, 0, 0, 532, 0, 533, 0, 0, 534, 0, - 0, 535, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, - 0, 549, 0, 550, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 554, 0, 555, 0, 556, 0, - 557, 0, 558, 0, 0, 0, 559, 0, 560, 0, 561, 0, 0, 562, 0, 0, 563, 0, 564, 0, 565, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 569, - 0, 0, 570, 0, 0, 571, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, - 0, 578, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 582, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, - 586, 0, 587, 0, 0, 0, 588, 0, 0, 0, 0, 589, 0, 0, 590, 0, 0, 591, 592, 0, 0, 593, 0, 0, 594, 595, 0, 0, 596, 0, 0, 597, - 598, 0, 0, 599, 0, 0, 600, 601, 0, 0, 602, 0, 0, 603, 604, 0, 605, 0, 606, 0, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, - 0, 620, 621, 0, 622, 0, 0, 623, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 627, 628, 0, 629, 0, 0, 630, 0, - 0, 0, 0, 0, 0, 631, 0, 632, 633, 0, 634, 0, 635, 0, 0, 0, 636, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 640, 0, - 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 648, 0, 649, 0, 0, 0, - 0, 0, 0, 0, 0, 650, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 653, 0, 654, 0, 0, 655, 0, 0, 656, 0, 657, 0, - 658, 659, 0, 0, 0, 0, 0, 0, 0, 660, 0, 661, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 666, 667, 0, 668, - 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 672, 0, 0, 0, 673, 0, 674, 0, 0, 0, - 675, 0, 676, 0, 0, 0, 0, 677, 0, 678, 0, 0, 679, 0, 0, 0, 0, 0, 0, 680, 0, 0, 681, 0, 682, 0, 683, 0, 684, 0, 685, 0, - 686, 0, 687, 0, 688, 0, 689, 0, 0, 0, 690, 0, 691, 0, 692, 0, 0, 0, 693, 0, 0, 694, 0, 0, 695, 0, 696, 697, 0, 698, 0, 0, - 0, 0, 0, 0, 699, 0, 0, 700, 0, 0, 701, 0, 702, 703, 0, 704, 0, 705, 0, 0, 0, 706, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, - 709, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 713, 0, 714, 0, 715, 0, 0, 0, 0, 0, 0, 0, - 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 719, 0, 720, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 724, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 726, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 728, 0, 729, 0, 0, 0, 730, 731, 0, 732, 0, 733, 0, 734, 735, 0, 736, 0, 0, 0, - 0, 0, 0, 737, 0, 738, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 743, 0, 744, 0, 745, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 747, 0, 0, 748, 0, 0, 749, 0, 750, - 751, 752, 0, 0, 753, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, 0, 0, 758, 0, - 0, 759, 0, 760, 761, 762, 0, 0, 763, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 766, 0, 767, 0, 768, - 0, 769, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 776, 0, 0, 777, 0, 0, 778, 0, 779, 780, - 0, 781, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 783, 0, 0, 0, 784, 0, 0, 785, 0, 0, 786, 0, 0, 0, 0, 787, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 789, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 793, 0, 794, 0, 795, 0, 0, 0, 796, - 0, 797, 0, 798, 0, 0, 0, 799, 0, 0, 800, 0, 801, 0, 802, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804, - 0, 805, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 808, 0, 809, 0, 810, 0, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 813, 814, 0, 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 817, 818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 819, 0, 0, 820, 0, 0, 0, 821, 0, 0, 822, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 824, 0, 0, - 0, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 830, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, - 0, 0, 0, 0, 0, 833, 0, 834, 0, 835, 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, 838, 0, - 0, 0, 839, 0, 840, 0, 0, 841, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 845, 0, 0, 0, 846, 0, 847, 0, 848, 0, 849, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0109[64] = { + 0x0004348804214121ull, 0xA02A021090442041ull, 0x2000002000002A00ull, 0x4001042A00000105ull, + 0x20442A40088902AAull, 0x004010090A862102ull, 0x0214000050000001ull, 0x0004280000A00000ull, + 0x0000085000014000ull, 0xA0000010A0000280ull, 0x0010214000000830ull, 0x8882A82109004A00ull, + 0x2100244880540420ull, 0x0400112200080000ull, 0x8912522402004028ull, 0x0864289408502494ull, + 0x0006040001800080ull, 0x2969522511008500ull, 0x8688864249492020ull, 0xE2891102A2891502ull, + 0x110808A001653144ull, 0x50042020A3185092ull, 0x0A02400006041022ull, 0x448A82400308248Aull, + 0x88824024A900C84Cull, 0x1224420228004B29ull, 0x14009420000C0410ull, 0xA0510104C0A05502ull, + 0x12254A100420A4C0ull, 0x90408004206E1550ull, 0x0300009000C00042ull, 0x8A022010A8804240ull, + 0x48A522A48A522AA4ull, 0x000400041068522Aull, 0x0046044080020400ull, 0x0A20880010000010ull, + 0x02A0010011040080ull, 0x1590A00409490880ull, 0x0A10002040A21542ull, 0x00556894A1248040ull, + 0xA2AD254AAAB10022ull, 0x55554A924A52A52Aull, 0xA49525455508002Aull, 0x5002A84214280524ull, + 0x120564C993264845ull, 0x0000020410205080ull, 0x0200501000000000ull, 0x502515A04B402496ull, + 0x5251006015000555ull, 0x14484080B4414A03ull, 0x2D24545555481285ull, 0x015042412422B490ull, + 0x2205108A00044002ull, 0x0008102816AC5100ull, 0xA4A000002A100002ull, 0xA900053A4A800053ull, + 0xD248040401008022ull, 0x0800D00008491202ull, 0x8001548A8A880000ull, 0x0110150000800042ull, + 0x20000C8900062818ull, 0x8200200004010010ull, 0x480402A040040000ull, 0x2A89000001000894ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0109[64] = { + 1u, 14u, 28u, 33u, 42u, 58u, 70u, 76u, 81u, 86u, 93u, 100u, 114u, 126u, 132u, 146u, + 163u, 169u, 187u, 205u, 225u, 241u, 257u, 267u, 283u, 300u, 316u, 326u, 342u, 358u, 374u, 382u, + 395u, 418u, 430u, 438u, 445u, 453u, 468u, 481u, 498u, 522u, 549u, 570u, 586u, 609u, 616u, 620u, + 641u, 658u, 675u, 699u, 716u, 727u, 741u, 751u, 769u, 781u, 792u, 805u, 813u, 825u, 831u, 839u, }; void recomp_unit_0109_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0109_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089B8000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0109[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0109[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0109[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089B8000; @@ -1025,7 +932,6 @@ L_089B8000: ctx.gpr[8] = (ctx.gpr[8] + static_cast(1)); ctx.gpr[9] = (ctx.gpr[8] < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0108_entry, 108u, 738u, 0x089B7FFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1038,7 +944,17 @@ L_089B8014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8020: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1049,7 +965,6 @@ L_089B8020: goto L_089B8038; L_089B8038: aot_gpr_31 = (0x089B8040u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B8040u) goto L_089B8040; AOT_REGCACHE_SYNC_OUT(); return; L_089B8040: @@ -1075,7 +990,17 @@ L_089B8054: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8068: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1092,7 +1017,6 @@ L_089B808C: aot_gpr_4 = (ctx.gpr[2] << 24u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 24u)); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B80B0; } @@ -1127,7 +1051,17 @@ L_089B80B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B80C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (15488u << 16u); @@ -1160,7 +1094,6 @@ L_089B8118: aot_fpr_13 = std::bit_cast(0u); aot_gpr_16 = (aot_gpr_5 + aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); if (branch_taken) { @@ -1214,11 +1147,20 @@ L_089B817C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8190: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[2] = (aot_gpr_5 & 255u); if (branch_taken) { @@ -1232,7 +1174,6 @@ L_089B81A4: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_14; goto L_089B81D4; @@ -1240,7 +1181,6 @@ L_089B81A4: goto L_089B81C4; L_089B81C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B822C; } @@ -1260,7 +1200,6 @@ L_089B81D4: aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(ctx.gpr[2]); goto L_089B81FC; @@ -1294,11 +1233,20 @@ L_089B8224: } L_089B822C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8234: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1426,7 +1374,6 @@ L_089B8294: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B8308; } @@ -1435,7 +1382,6 @@ L_089B8294: L_089B82F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B8308; } @@ -1459,7 +1405,17 @@ L_089B8308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8320: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1490,7 +1446,6 @@ L_089B8320: AOT_REGCACHE_SYNC_OUT(); return; L_089B8384: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089B8394; } @@ -1498,7 +1453,6 @@ L_089B8384: } L_089B838C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B83A8; } @@ -1525,7 +1479,17 @@ L_089B83A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B83C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[18]); @@ -1548,7 +1512,6 @@ L_089B83C0: L_089B83F8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089B8414; } @@ -1556,7 +1519,6 @@ L_089B83F8: } L_089B8404: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1564,7 +1526,6 @@ L_089B8404: } L_089B840C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1580,7 +1541,6 @@ L_089B8414: } L_089B841C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1593,7 +1553,6 @@ L_089B8424: ctx.gpr[17] = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(6264))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1602,7 +1561,6 @@ L_089B8424: L_089B8440: aot_gpr_6 = (static_cast(ctx.gpr[18]) < 238 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1612,7 +1570,6 @@ L_089B844C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(6256))); ctx.gpr[7] = (0u | 4u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089B84B4; } @@ -1622,7 +1579,6 @@ L_089B845C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(21524))); aot_gpr_6 = (static_cast(aot_gpr_6) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B8498; } @@ -1648,7 +1604,6 @@ L_089B846C: L_089B8498: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B84AC; } @@ -1656,7 +1611,6 @@ L_089B8498: } L_089B84A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1664,7 +1618,6 @@ L_089B84A4: } L_089B84AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1694,7 +1647,6 @@ L_089B84D8: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0))); ctx.gpr[8] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089B856C; } @@ -1755,7 +1707,6 @@ L_089B855C: goto L_089B8564; L_089B8564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1775,7 +1726,6 @@ L_089B856C: L_089B8580: aot_gpr_6 = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B85B0; } @@ -1809,7 +1759,17 @@ L_089B85B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B85D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(26344))); @@ -1820,7 +1780,6 @@ L_089B85D8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(296), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(300), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B86D0; } @@ -1879,7 +1838,6 @@ L_089B8600: AOT_REGCACHE_SYNC_OUT(); return; L_089B8670: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B86C8; } @@ -1932,7 +1890,6 @@ L_089B8678: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(21344), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8A14; } @@ -1951,7 +1908,6 @@ L_089B86D0: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B87B4; } @@ -2010,7 +1966,6 @@ L_089B86E4: AOT_REGCACHE_SYNC_OUT(); return; L_089B8754: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B87AC; } @@ -2063,7 +2018,6 @@ L_089B875C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(21348), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8A14; } @@ -2082,7 +2036,6 @@ L_089B87B4: aot_gpr_4 = (aot_gpr_4 + static_cast(2)); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8898; } @@ -2141,7 +2094,6 @@ L_089B87C8: AOT_REGCACHE_SYNC_OUT(); return; L_089B8838: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B8890; } @@ -2194,7 +2146,6 @@ L_089B8840: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(21352), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8A14; } @@ -2213,7 +2164,6 @@ L_089B8898: aot_gpr_4 = (aot_gpr_4 + static_cast(3)); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B897C; } @@ -2272,7 +2222,6 @@ L_089B88AC: AOT_REGCACHE_SYNC_OUT(); return; L_089B891C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B8974; } @@ -2325,7 +2274,6 @@ L_089B8924: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(21356), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8A14; } @@ -2344,7 +2292,6 @@ L_089B897C: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8A14; } @@ -2402,7 +2349,6 @@ L_089B8990: AOT_REGCACHE_SYNC_OUT(); return; L_089B89F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B8A10; } @@ -2435,7 +2381,17 @@ L_089B8A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8A2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2460,12 +2416,10 @@ L_089B8A2C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089B8A98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 167u, 0x08A11520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B8A98u) goto L_089B8A98; AOT_REGCACHE_SYNC_OUT(); return; L_089B8A98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B8AB4; } @@ -2516,7 +2470,6 @@ L_089B8AD0: goto L_089B8B24; L_089B8B24: aot_gpr_31 = (0x089B8B2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 167u, 0x08A11520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B8B2Cu) goto L_089B8B2C; AOT_REGCACHE_SYNC_OUT(); return; L_089B8B2C: @@ -2550,9 +2503,7 @@ L_089B8B60: L_089B8B6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(21344))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B8CE0; } @@ -2561,9 +2512,7 @@ L_089B8B6C: L_089B8B80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(21344))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B8CE0; } @@ -2573,9 +2522,7 @@ L_089B8B94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(21344))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089B8BB4; } @@ -2583,7 +2530,6 @@ L_089B8B94: } L_089B8BAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8CE0; } @@ -2591,7 +2537,6 @@ L_089B8BAC: } L_089B8BB4: aot_gpr_31 = (0x089B8BBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 167u, 0x08A11520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B8BBCu) goto L_089B8BBC; AOT_REGCACHE_SYNC_OUT(); return; L_089B8BBC: @@ -2622,7 +2567,6 @@ L_089B8BEC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(112))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8CE0; } @@ -2641,7 +2585,6 @@ L_089B8C14: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B8CE0; } @@ -2655,7 +2598,6 @@ L_089B8C28: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(52), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B8CB4; } @@ -2663,12 +2605,10 @@ L_089B8C28: } L_089B8C48: aot_gpr_31 = (0x089B8C50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 167u, 0x08A11520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B8C50u) goto L_089B8C50; AOT_REGCACHE_SYNC_OUT(); return; L_089B8C50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B8C7C; } @@ -2677,8 +2617,6 @@ L_089B8C50: L_089B8C58: { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(ctx.gpr[18])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[21]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[19] + aot_gpr_4); @@ -2699,7 +2637,6 @@ L_089B8C7C: L_089B8C8C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089B8CA8; } @@ -2750,7 +2687,6 @@ L_089B8CE0: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8B24; } @@ -2796,7 +2732,17 @@ L_089B8CF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B8D4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(144))); @@ -2859,7 +2805,6 @@ L_089B8DE8: aot_gpr_6 = (aot_gpr_6 + static_cast(160)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(73))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B8E14; } @@ -2867,7 +2812,6 @@ L_089B8DE8: } L_089B8E0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8FD8; } @@ -2910,7 +2854,6 @@ L_089B8E64: ctx.gpr[2] = (ctx.gpr[2] + static_cast(160)); ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[11] == ctx.gpr[3]; - // nop if (branch_taken) { goto L_089B8E94; } @@ -2929,7 +2872,6 @@ L_089B8E94: ctx.gpr[3] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(4))); { const bool branch_taken = ctx.gpr[3] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089B8EB0; } @@ -2964,7 +2906,6 @@ L_089B8EB8: L_089B8EC4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8FD8; } @@ -2974,7 +2915,6 @@ L_089B8ED0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); aot_gpr_4 = (aot_gpr_4 < static_cast(256) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8F10; } @@ -2983,7 +2923,6 @@ L_089B8ED0: L_089B8EE0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(64))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089B8F10; } @@ -3013,7 +2952,6 @@ L_089B8F08: L_089B8F10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(68))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B8FD8; } @@ -3022,7 +2960,6 @@ L_089B8F10: L_089B8F1C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B8FB4; } @@ -3044,7 +2981,6 @@ L_089B8F34: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(80), static_cast(aot_gpr_4)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(80)))))); { const bool branch_taken = static_cast(ctx.gpr[7]) > 0; - // nop if (branch_taken) { goto L_089B8F58; } @@ -3072,7 +3008,6 @@ L_089B8F6C: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(68), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B8F9C; } @@ -3080,7 +3015,6 @@ L_089B8F6C: } L_089B8F88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B8FB4; } @@ -3099,7 +3033,6 @@ L_089B8F9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); aot_gpr_5 = (aot_gpr_4 < static_cast(20) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B8FB4; } @@ -3156,7 +3089,17 @@ L_089B8FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B901C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), aot_gpr_16); @@ -3205,7 +3148,6 @@ L_089B90A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4234))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B95B4; } @@ -3236,7 +3178,6 @@ L_089B90C8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 + static_cast(6028)); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089B9128; } @@ -3244,7 +3185,6 @@ L_089B90C8: } L_089B9120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9594; } @@ -3255,7 +3195,6 @@ L_089B9128: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9594; } @@ -3270,7 +3209,6 @@ L_089B913C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B9180; } @@ -3280,7 +3218,6 @@ L_089B9160: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089B9180; } @@ -3290,7 +3227,6 @@ L_089B9170: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B9188; } @@ -3298,7 +3234,6 @@ L_089B9170: } L_089B9180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B957C; } @@ -3307,7 +3242,6 @@ L_089B9180: L_089B9188: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9214; } @@ -3317,7 +3251,6 @@ L_089B9194: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B91C0; } @@ -3326,7 +3259,6 @@ L_089B9194: L_089B91A4: aot_gpr_4 = (ctx.gpr[20] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B91B8; } @@ -3351,7 +3283,6 @@ L_089B91B8: L_089B91C0: aot_gpr_4 = (ctx.gpr[20] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B91D4; } @@ -3370,7 +3301,6 @@ L_089B91D4: goto L_089B91D8; L_089B91D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9214; } @@ -3412,7 +3342,6 @@ L_089B9214: aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(80), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9240; } @@ -3430,7 +3359,6 @@ L_089B9234: L_089B9240: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(32))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B926C; } @@ -3444,7 +3372,6 @@ L_089B924C: AOT_REGCACHE_SYNC_OUT(); return; L_089B9258: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B926C; } @@ -3471,7 +3398,6 @@ L_089B926C: L_089B9278: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(5))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B92A4; } @@ -3522,7 +3448,6 @@ L_089B92CC: AOT_REGCACHE_SYNC_OUT(); return; L_089B92DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B92E8; } @@ -3541,7 +3466,6 @@ L_089B92E8: AOT_REGCACHE_SYNC_OUT(); return; L_089B92FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9574; } @@ -3564,7 +3488,6 @@ L_089B9320: AOT_REGCACHE_SYNC_OUT(); return; L_089B9328: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B9330; } @@ -3574,7 +3497,6 @@ L_089B9330: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089B93B0; } @@ -3583,7 +3505,6 @@ L_089B9330: L_089B9340: aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B9364; } @@ -3599,7 +3520,6 @@ L_089B934C: goto L_089B935C; L_089B935C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9374; } @@ -3620,7 +3540,6 @@ L_089B9374: AOT_REGCACHE_SYNC_OUT(); return; L_089B937C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B93A0; } @@ -3646,7 +3565,6 @@ L_089B93B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(24))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089B93FC; } @@ -3655,7 +3573,6 @@ L_089B93B0: L_089B93C0: aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B93E4; } @@ -3694,7 +3611,6 @@ L_089B93F8: L_089B93FC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(5))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B9420; } @@ -3720,7 +3636,6 @@ L_089B9420: aot_gpr_5 = (0u | 0u); aot_gpr_6 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089B9454; } @@ -3760,7 +3675,6 @@ L_089B9454: goto L_089B9458; L_089B9458: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B949C; } @@ -3771,8 +3685,6 @@ L_089B9460: aot_gpr_6 = (0u | 127u); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.gpr[28] + static_cast(7696)); aot_gpr_5 = (ctx.gpr[20] | 0u); @@ -3784,7 +3696,6 @@ L_089B9460: AOT_REGCACHE_SYNC_OUT(); return; L_089B9494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B94E0; } @@ -3794,7 +3705,6 @@ L_089B949C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26319))); aot_gpr_5 = (static_cast(aot_gpr_5) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B94CC; } @@ -3805,8 +3715,6 @@ L_089B94AC: aot_gpr_6 = (0u | 127u); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); goto L_089B94CC; @@ -3834,7 +3742,6 @@ L_089B94F0: L_089B9504: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089B9564; } @@ -3843,7 +3750,6 @@ L_089B9504: L_089B9510: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9538; } @@ -3897,7 +3803,6 @@ L_089B9564: AOT_REGCACHE_SYNC_OUT(); return; L_089B9574: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9594; } @@ -3909,7 +3814,6 @@ L_089B957C: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B913C; } @@ -3932,7 +3836,6 @@ L_089B95B4: aot_gpr_5 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9648; } @@ -3948,7 +3851,6 @@ L_089B95C8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (aot_gpr_6 + static_cast(6028)); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089B95F8; } @@ -3956,7 +3858,6 @@ L_089B95C8: } L_089B95F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9630; } @@ -3965,7 +3866,6 @@ L_089B95F0: L_089B95F8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(72))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089B9630; } @@ -3993,7 +3893,6 @@ L_089B9630: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B95C8; } @@ -4033,7 +3932,6 @@ L_089B9668: ctx.gpr[19] = (ctx.gpr[19] + static_cast(160)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(72))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B9A28; } @@ -4042,7 +3940,6 @@ L_089B9668: L_089B96B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(73))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B9A28; } @@ -4056,7 +3953,6 @@ L_089B96C4: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6264))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B96EC; } @@ -4064,7 +3960,6 @@ L_089B96C4: } L_089B96E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9A28; } @@ -4076,7 +3971,6 @@ L_089B96EC: aot_gpr_4 = (aot_gpr_4 + static_cast(6028)); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B970C; } @@ -4084,7 +3978,6 @@ L_089B96EC: } L_089B9704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9A28; } @@ -4094,7 +3987,6 @@ L_089B970C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (aot_gpr_4 < static_cast(256) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B974C; } @@ -4103,7 +3995,6 @@ L_089B970C: L_089B971C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B974C; } @@ -4112,7 +4003,6 @@ L_089B971C: L_089B9728: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(64))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089B974C; } @@ -4135,7 +4025,6 @@ L_089B974C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B9A28; } @@ -4157,7 +4046,6 @@ L_089B9764: ctx.gpr[20] = (ctx.gpr[20] + static_cast(4240)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(72))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B9A10; } @@ -4166,7 +4054,6 @@ L_089B9764: L_089B9798: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089B97CC; } @@ -4178,7 +4065,6 @@ L_089B97A4: { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089B97C4; } @@ -4186,7 +4072,6 @@ L_089B97A4: } L_089B97BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9A10; } @@ -4206,7 +4091,6 @@ L_089B97CC: L_089B97DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(13))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B980C; } @@ -4230,7 +4114,6 @@ L_089B9808: L_089B980C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(5))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9838; } @@ -4280,12 +4163,10 @@ L_089B9860: } L_089B986C: aot_gpr_31 = (0x089B9874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 167u, 0x08A11520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B9874u) goto L_089B9874; AOT_REGCACHE_SYNC_OUT(); return; L_089B9874: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089B98DC; } @@ -4312,7 +4193,6 @@ L_089B9894: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -4348,7 +4228,6 @@ L_089B98EC: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9920; } @@ -4388,7 +4267,6 @@ L_089B9920: goto L_089B9924; L_089B9924: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9974; } @@ -4397,7 +4275,6 @@ L_089B9924: L_089B992C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(13))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089B9974; } @@ -4408,8 +4285,6 @@ L_089B9938: aot_gpr_5 = (0u | 127u); { const std::int64_t product = static_cast(static_cast(ctx.gpr[21])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.gpr[28] + static_cast(7696)); aot_gpr_5 = (ctx.gpr[22] | 0u); @@ -4421,7 +4296,6 @@ L_089B9938: AOT_REGCACHE_SYNC_OUT(); return; L_089B996C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B99B8; } @@ -4431,7 +4305,6 @@ L_089B9974: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(26319))); aot_gpr_4 = (static_cast(aot_gpr_4) < 127 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B99A4; } @@ -4442,8 +4315,6 @@ L_089B9984: aot_gpr_5 = (0u | 127u); { const std::int64_t product = static_cast(static_cast(ctx.gpr[21])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[21] = (ctx.lo); goto L_089B99A4; @@ -4465,7 +4336,6 @@ L_089B99B8: L_089B99C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B99E4; } @@ -4548,7 +4418,17 @@ L_089B9A4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -4569,7 +4449,17 @@ L_089B9AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9ABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4586,7 +4476,6 @@ L_089B9ABC: AOT_REGCACHE_SYNC_OUT(); return; L_089B9AE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089B9B28; } @@ -4607,7 +4496,6 @@ L_089B9B04: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(300), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(308))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B9B30; } @@ -4615,7 +4503,6 @@ L_089B9B04: } L_089B9B20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9B88; } @@ -4623,7 +4510,6 @@ L_089B9B20: } L_089B9B28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089B9B88; } @@ -4675,7 +4561,6 @@ L_089B9B78: L_089B9B7C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B9B30; } @@ -4694,7 +4579,17 @@ L_089B9B88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9BA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4709,7 +4604,6 @@ L_089B9BC0: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(304))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(308))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_089B9C28; } @@ -4761,7 +4655,6 @@ L_089B9C18: L_089B9C1C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089B9BD0; } @@ -4791,7 +4684,17 @@ L_089B9C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9C54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4813,7 +4716,17 @@ L_089B9C68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -4833,21 +4746,49 @@ L_089B9CAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9CB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9CC0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9CC8: ctx.gpr[2] = (2204u << 16u); jump_target = aot_gpr_31; @@ -4855,12 +4796,21 @@ L_089B9CC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9CD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089B9CE4u); - // nop goto L_089B9CC8; L_089B9CE4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4869,7 +4819,17 @@ L_089B9CE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9CF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4898,7 +4858,6 @@ L_089B9D20: goto L_089B9D28; L_089B9D28: aot_gpr_31 = (0x089B9D30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089B9D30u) goto L_089B9D30; AOT_REGCACHE_SYNC_OUT(); return; L_089B9D30: @@ -4920,7 +4879,6 @@ L_089B9D48: goto L_089B9D4C; L_089B9D4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9D58; } @@ -4943,7 +4901,17 @@ L_089B9D58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4968,7 +4936,17 @@ L_089B9D88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4994,7 +4972,6 @@ L_089B9DD8: L_089B9DF0: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089B9E04; } @@ -5017,7 +4994,17 @@ L_089B9E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5032,7 +5019,6 @@ L_089B9E18: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(184), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5066,7 +5052,17 @@ L_089B9E90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9E9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5082,7 +5078,6 @@ L_089B9E9C: aot_fpr_13 = aot_fpr_14 - aot_fpr_13; aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(184), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5116,7 +5111,17 @@ L_089B9F18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9F24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5144,21 +5149,49 @@ L_089B9F5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9F6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9F74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5186,7 +5219,17 @@ L_089B9FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089B9FC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[18]); @@ -5200,7 +5243,6 @@ L_089B9FC4: AOT_REGCACHE_SYNC_OUT(); return; L_089B9FE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089BA01C; } @@ -5230,7 +5272,6 @@ L_089BA008: } L_089BA014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BA02C; } @@ -5246,12 +5287,10 @@ L_089BA01C: } L_089BA024: aot_gpr_31 = (0x089BA02Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA02Cu) goto L_089BA02C; AOT_REGCACHE_SYNC_OUT(); return; L_089BA02C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089BA06C; } @@ -5313,12 +5352,10 @@ L_089BA088: } L_089BA094: aot_gpr_31 = (0x089BA09Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA09Cu) goto L_089BA09C; AOT_REGCACHE_SYNC_OUT(); return; L_089BA09C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089BA0DC; } @@ -5385,7 +5422,6 @@ L_089BA104: AOT_REGCACHE_SYNC_OUT(); return; L_089BA10C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089BA154; } @@ -5414,7 +5450,6 @@ L_089BA138: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(196), static_cast(ctx.gpr[2])); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089BA154; } @@ -5441,7 +5476,17 @@ L_089BA158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA170: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5471,7 +5516,17 @@ L_089BA188: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA1C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(ctx.fpr[26])); @@ -5519,7 +5574,6 @@ L_089BA244: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = aot_fpr_20 + aot_fpr_14; if (branch_taken) { @@ -5589,7 +5643,17 @@ L_089BA2D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA310: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -5729,7 +5793,17 @@ L_089BA470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA4A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5774,12 +5848,21 @@ L_089BA4E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA51C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA560; } @@ -5804,7 +5887,6 @@ L_089BA540: L_089BA54C: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BA560; } @@ -5812,7 +5894,6 @@ L_089BA54C: } L_089BA558: aot_gpr_31 = (0x089BA560u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA560u) goto L_089BA560; AOT_REGCACHE_SYNC_OUT(); return; L_089BA560: @@ -5822,7 +5903,17 @@ L_089BA560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA56C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5879,7 +5970,6 @@ L_089BA5DC: goto L_089BA5E0; L_089BA5E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA5F0; } @@ -5902,7 +5992,17 @@ L_089BA5F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA604: aot_gpr_5 = (aot_gpr_5 << 16u); ctx.gpr[7] = (aot_gpr_6 << 16u); @@ -5912,7 +6012,6 @@ L_089BA604: goto L_089BA618; L_089BA618: { const bool branch_taken = ctx.gpr[7] == aot_gpr_6; - // nop if (branch_taken) { goto L_089BA644; } @@ -5920,7 +6019,6 @@ L_089BA618: } L_089BA620: { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_089BA644; } @@ -5953,11 +6051,20 @@ L_089BA644: } L_089BA654: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA65C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(9244), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), 0u); @@ -6008,11 +6115,20 @@ L_089BA6D0: } L_089BA6E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BA6EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); @@ -6075,7 +6191,6 @@ L_089BA774: L_089BA77C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24920))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA790; } @@ -6089,7 +6204,6 @@ L_089BA788: L_089BA790: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9256))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089BA914; } @@ -6107,7 +6221,6 @@ L_089BA79C: } L_089BA7AC: aot_gpr_31 = (0x089BA7B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA7B4u) goto L_089BA7B4; AOT_REGCACHE_SYNC_OUT(); return; L_089BA7B4: @@ -6115,12 +6228,10 @@ L_089BA7B4: goto L_089BA7B8; L_089BA7B8: aot_gpr_31 = (0x089BA7C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 638u, 0x089C6DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA7C0u) goto L_089BA7C0; AOT_REGCACHE_SYNC_OUT(); return; L_089BA7C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089BA7D0; } @@ -6146,7 +6257,6 @@ L_089BA7D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10856))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089BA840; } @@ -6188,7 +6298,6 @@ L_089BA850: goto L_089BA854; L_089BA854: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089BA87C; } @@ -6205,7 +6314,6 @@ L_089BA864: AOT_REGCACHE_SYNC_OUT(); return; L_089BA86C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089BA87C; } @@ -6228,7 +6336,6 @@ L_089BA884: L_089BA88C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BA8A0; } @@ -6247,7 +6354,6 @@ L_089BA8A0: L_089BA8A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10920))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089BA8E4; } @@ -6256,7 +6362,6 @@ L_089BA8A8: L_089BA8B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BA8CC; } @@ -6264,7 +6369,6 @@ L_089BA8B4: } L_089BA8C0: aot_gpr_31 = (0x089BA8C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA8C8u) goto L_089BA8C8; AOT_REGCACHE_SYNC_OUT(); return; L_089BA8C8: @@ -6272,12 +6376,10 @@ L_089BA8C8: goto L_089BA8CC; L_089BA8CC: aot_gpr_31 = (0x089BA8D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 638u, 0x089C6DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA8D4u) goto L_089BA8D4; AOT_REGCACHE_SYNC_OUT(); return; L_089BA8D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089BA8E4; } @@ -6312,7 +6414,6 @@ L_089BA904: AOT_REGCACHE_SYNC_OUT(); return; L_089BA90C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BA96C; } @@ -6321,7 +6422,6 @@ L_089BA90C: L_089BA914: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA928; } @@ -6335,7 +6435,6 @@ L_089BA920: L_089BA928: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA96C; } @@ -6347,7 +6446,6 @@ L_089BA934: goto L_089BB3E0; L_089BA93C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BA96C; } @@ -6356,7 +6454,6 @@ L_089BA93C: L_089BA944: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA958; } @@ -6370,7 +6467,6 @@ L_089BA950: L_089BA958: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BA96C; } @@ -6383,7 +6479,6 @@ L_089BA964: L_089BA96C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9258))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089BA9AC; } @@ -6392,7 +6487,6 @@ L_089BA96C: L_089BA978: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BA9AC; } @@ -6401,7 +6495,6 @@ L_089BA978: L_089BA984: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9256))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089BA9AC; } @@ -6410,7 +6503,6 @@ L_089BA984: L_089BA990: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BA9A4; } @@ -6418,7 +6510,6 @@ L_089BA990: } L_089BA99C: aot_gpr_31 = (0x089BA9A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BA9A4u) goto L_089BA9A4; AOT_REGCACHE_SYNC_OUT(); return; L_089BA9A4: @@ -6429,7 +6520,6 @@ L_089BA9A4: L_089BA9AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8360))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BA9F8; } @@ -6477,7 +6567,6 @@ L_089BA9F0: L_089BA9F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BAA0C; } @@ -6490,7 +6579,6 @@ L_089BAA04: AOT_REGCACHE_SYNC_OUT(); return; L_089BAA0C: aot_gpr_31 = (0x089BAA14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0121_entry, 121u, 123u, 0x089E8B80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BAA14u) goto L_089BAA14; AOT_REGCACHE_SYNC_OUT(); return; L_089BAA14: @@ -6514,7 +6602,17 @@ L_089BAA14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA4C: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_5 = (aot_gpr_5 << 9u); @@ -6524,42 +6622,102 @@ L_089BAA4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA60: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11224))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA68: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(11221))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA70: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(9260)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA78: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11228))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA80: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(11220))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAA88: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_gpr_5 = (16704u << 16u); @@ -6572,7 +6730,6 @@ L_089BAA88: } L_089BAA98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BAAA0; } @@ -6580,15 +6737,23 @@ L_089BAA98: } L_089BAAA0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAAA8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BAAC0; } @@ -6609,15 +6774,23 @@ L_089BAAC0: goto L_089BAAC8; L_089BAAC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAAD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BAAE8; } @@ -6639,15 +6812,23 @@ L_089BAAE8: goto L_089BAAF4; L_089BAAF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAAFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BAB14; } @@ -6669,11 +6850,20 @@ L_089BAB14: goto L_089BAB20; L_089BAB20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAB28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6692,9 +6882,7 @@ L_089BAB4C: L_089BAB54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BAB84; } @@ -6738,28 +6926,68 @@ L_089BAB98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BABAC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9256))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BABB4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BABBC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BABC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6808,7 +7036,6 @@ L_089BAC18: L_089BAC2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13164))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BAC48; } @@ -6826,7 +7053,6 @@ L_089BAC44: L_089BAC48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13160))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BAC64; } @@ -6844,7 +7070,6 @@ L_089BAC60: L_089BAC64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13152))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BAC80; } @@ -6862,7 +7087,6 @@ L_089BAC7C: L_089BAC80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13148))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BAC9C; } @@ -6880,7 +7104,6 @@ L_089BAC98: L_089BAC9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-13156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BACB8; } @@ -6897,7 +7120,6 @@ L_089BACB4: goto L_089BACB8; L_089BACB8: aot_gpr_31 = (0x089BACC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BACC0u) goto L_089BACC0; AOT_REGCACHE_SYNC_OUT(); return; L_089BACC0: @@ -6918,7 +7140,17 @@ L_089BACC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BACE4: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(10820))); jump_target = aot_gpr_31; @@ -6926,7 +7158,17 @@ L_089BACE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BACF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6992,7 +7234,6 @@ L_089BAD88: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 13 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BAD88; } @@ -7056,7 +7297,17 @@ L_089BADA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAE90: aot_gpr_5 = (2279u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -7069,14 +7320,34 @@ L_089BAE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAEB0: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(9257), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAEB8: aot_gpr_6 = (aot_gpr_6 & 65535u); aot_fpr_12 = std::bit_cast(0u); @@ -7086,9 +7357,7 @@ L_089BAEB8: ctx.gpr[7] = (ctx.gpr[7] + ctx.gpr[8]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BAFA8; } @@ -7122,7 +7391,6 @@ L_089BAF08: L_089BAF10: ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089BAFA0; } @@ -7131,7 +7399,6 @@ L_089BAF10: L_089BAF1C: ctx.gpr[10] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4634))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[10]; - // nop if (branch_taken) { goto L_089BAF34; } @@ -7159,7 +7426,6 @@ L_089BAF34: } L_089BAF58: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BAF9C; } @@ -7179,7 +7445,6 @@ L_089BAF64: L_089BAF6C: ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089BAF94; } @@ -7215,11 +7480,20 @@ L_089BAFA0: goto L_089BAFA8; L_089BAFA8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAFB0: ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (0u | 1u); @@ -7237,7 +7511,6 @@ L_089BAFC0: L_089BAFC8: ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089BAFF0; } @@ -7262,49 +7535,119 @@ L_089BAFF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BAFF8: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(11226), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB000: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(11222), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB008: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(11223), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB010: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(11224), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB018: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(10920), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB020: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(10884), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB028: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7334,7 +7677,6 @@ L_089BB060: } L_089BB068: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BB094; } @@ -7365,7 +7707,6 @@ L_089BB098: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BB098; } @@ -7400,7 +7741,6 @@ L_089BB0E4: AOT_REGCACHE_SYNC_OUT(); return; L_089BB0F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089BB100; } @@ -7408,7 +7748,6 @@ L_089BB0F0: } L_089BB0F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BB17C; } @@ -7425,7 +7764,6 @@ L_089BB104: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BB104; } @@ -7433,7 +7771,6 @@ L_089BB104: } L_089BB124: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_089BB138; } @@ -7446,7 +7783,6 @@ L_089BB12C: goto L_089BB138; L_089BB138: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089BB170; } @@ -7470,7 +7806,6 @@ L_089BB158: AOT_REGCACHE_SYNC_OUT(); return; L_089BB168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BB174; } @@ -7498,7 +7833,17 @@ L_089BB17C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB19C: aot_gpr_6 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_6 << 16u); @@ -7506,7 +7851,6 @@ L_089BB19C: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (0u | 10u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089BB1CC; } @@ -7526,7 +7870,6 @@ L_089BB1B8: L_089BB1CC: aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089BB1E8; } @@ -7540,11 +7883,20 @@ L_089BB1D8: goto L_089BB1E8; L_089BB1E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB1F0: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); @@ -7553,14 +7905,34 @@ L_089BB1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB200: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(11228), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB208: ctx.gpr[10] = (aot_gpr_6 & 255u); ctx.gpr[9] = (0u | 0u); @@ -7579,7 +7951,6 @@ L_089BB21C: L_089BB224: ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089BB24C; } @@ -7605,63 +7976,153 @@ L_089BB24C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB258: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(11220), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB260: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(10832), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB268: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(10900), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB270: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(9256), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB278: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB280: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(9252), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB288: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB290: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(20), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB298: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7671,7 +8132,6 @@ L_089BB298: AOT_REGCACHE_SYNC_OUT(); return; L_089BB2A8: aot_gpr_31 = (0x089BB2B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BB2B0u) goto L_089BB2B0; AOT_REGCACHE_SYNC_OUT(); return; L_089BB2B0: @@ -7693,11 +8153,20 @@ L_089BB2C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB2D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-13168)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089BB2E8; } @@ -7716,11 +8185,20 @@ L_089BB2E8: goto L_089BB2EC; L_089BB2EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB2F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7740,7 +8218,6 @@ L_089BB310: L_089BB31C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089BB334; } @@ -7782,7 +8259,17 @@ L_089BB354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB368: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11232))); { const bool branch_taken = aot_gpr_6 != 0u; @@ -7795,7 +8282,6 @@ L_089BB368: L_089BB374: aot_gpr_6 = (static_cast(aot_gpr_5) < 209 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089BB3D8; } @@ -7807,7 +8293,6 @@ L_089BB380: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(11221))); aot_gpr_5 = (static_cast(aot_gpr_5) < 210 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BB3D8; } @@ -7827,7 +8312,6 @@ L_089BB3A4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(11232), aot_gpr_6); aot_gpr_6 = (static_cast(aot_gpr_5) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089BB3D8; } @@ -7839,7 +8323,6 @@ L_089BB3B8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(11221))); aot_gpr_5 = (static_cast(aot_gpr_5) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BB3D8; } @@ -7851,11 +8334,20 @@ L_089BB3D0: goto L_089BB3D8; L_089BB3D8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB3E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9264))); @@ -7881,7 +8373,6 @@ L_089BB404: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(176))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089BB48C; } @@ -7917,7 +8408,6 @@ L_089BB448: } L_089BB484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BB5B0; } @@ -7939,9 +8429,7 @@ L_089BB49C: goto L_089BB4B0; L_089BB4B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BB4C0; } @@ -7949,7 +8437,6 @@ L_089BB4B0: } L_089BB4C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BB5B0; } @@ -8029,7 +8516,6 @@ L_089BB554: goto L_089BABAC; L_089BB55C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089BB594; } @@ -8040,7 +8526,6 @@ L_089BB564: goto L_089BB568; L_089BB568: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BB594; } @@ -8058,7 +8543,6 @@ L_089BB570: AOT_REGCACHE_SYNC_OUT(); return; L_089BB58C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BB5B0; } @@ -8088,14 +8572,23 @@ L_089BB5B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB5CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9292))); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BB9BC; } @@ -8118,7 +8611,6 @@ L_089BB604: aot_gpr_4 = (aot_gpr_4 + aot_gpr_16); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16928u << 16u); if (branch_taken) { @@ -8129,9 +8621,7 @@ L_089BB604: L_089BB650: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BB9B8; } @@ -8139,12 +8629,10 @@ L_089BB650: } L_089BB664: aot_gpr_31 = (0x089BB66Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BB66Cu) goto L_089BB66C; AOT_REGCACHE_SYNC_OUT(); return; L_089BB66C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089BB9B8; } @@ -8197,7 +8685,6 @@ L_089BB6DC: L_089BB6E8: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089BB700; } @@ -8247,7 +8734,6 @@ L_089BB718: AOT_REGCACHE_SYNC_OUT(); return; L_089BB75C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BB7E0; } @@ -8270,7 +8756,6 @@ L_089BB76C: L_089BB778: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089BB790; } @@ -8328,7 +8813,6 @@ L_089BB7EC: AOT_REGCACHE_SYNC_OUT(); return; L_089BB7F4: aot_gpr_31 = (0x089BB7FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BB7FCu) goto L_089BB7FC; AOT_REGCACHE_SYNC_OUT(); return; L_089BB7FC: @@ -8340,7 +8824,6 @@ L_089BB804: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BB860; } @@ -8425,7 +8908,6 @@ L_089BB8D8: L_089BB8E4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089BB8FC; } @@ -8464,7 +8946,6 @@ L_089BB930: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6864))); aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_089BB94C; } @@ -8478,7 +8959,6 @@ L_089BB940: L_089BB94C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-12184))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BB9B0; } @@ -8514,7 +8994,6 @@ L_089BB96C: AOT_REGCACHE_SYNC_OUT(); return; L_089BB9B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BB9BC; } @@ -8542,7 +9021,17 @@ L_089BB9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BB9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -8577,7 +9066,6 @@ L_089BBA4C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); ctx.gpr[7] = (ctx.gpr[7] & 8u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089BBA7C; } @@ -8585,7 +9073,6 @@ L_089BBA4C: } L_089BBA5C: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_089BBA7C; } @@ -8593,7 +9080,6 @@ L_089BBA5C: } L_089BBA64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BBB04; } @@ -8603,7 +9089,6 @@ L_089BBA6C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BBB04; } @@ -8611,7 +9096,6 @@ L_089BBA6C: } L_089BBA7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BBA9C; } @@ -8619,7 +9103,6 @@ L_089BBA7C: } L_089BBA84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BBB04; } @@ -8629,7 +9112,6 @@ L_089BBA8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BBB04; } @@ -8638,7 +9120,6 @@ L_089BBA8C: L_089BBA9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BBAB0; } @@ -8646,7 +9127,6 @@ L_089BBA9C: } L_089BBAA8: aot_gpr_31 = (0x089BBAB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BBAB0u) goto L_089BBAB0; AOT_REGCACHE_SYNC_OUT(); return; L_089BBAB0: @@ -8656,7 +9136,6 @@ L_089BBAB0: AOT_REGCACHE_SYNC_OUT(); return; L_089BBAB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089BBB04; } @@ -8696,7 +9175,17 @@ L_089BBB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BBB18: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), aot_gpr_16); @@ -8747,7 +9236,6 @@ L_089BBBA0: } L_089BBBA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BBF2C; } @@ -8759,7 +9247,6 @@ L_089BBBB0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(1252))); aot_fpr_14 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(336))); goto L_089BBC10; @@ -8796,9 +9283,7 @@ L_089BBC10: aot_fpr_20 = std::bit_cast(aot_gpr_5); aot_fpr_20 = static_cast(static_cast(std::bit_cast(aot_fpr_20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BBC34; } @@ -8814,9 +9299,7 @@ L_089BBC2C: } L_089BBC34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BBC48; } @@ -8856,7 +9339,6 @@ L_089BBC80: } L_089BBC8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16267u << 16u); if (branch_taken) { @@ -9025,9 +9507,7 @@ L_089BBE78: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BBF2C; } @@ -9040,7 +9520,6 @@ L_089BBE94: AOT_REGCACHE_SYNC_OUT(); return; L_089BBE9C: aot_gpr_31 = (0x089BBEA4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BBEA4u) goto L_089BBEA4; AOT_REGCACHE_SYNC_OUT(); return; L_089BBEA4: @@ -9062,7 +9541,6 @@ L_089BBEC8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(42), static_cast(0u)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_29 + static_cast(40)); if (branch_taken) { @@ -9085,7 +9563,6 @@ L_089BBEF8: AOT_REGCACHE_SYNC_OUT(); return; L_089BBF08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BBF2C; } @@ -9124,7 +9601,17 @@ L_089BBF2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BBF60: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[21]); @@ -9149,7 +9636,6 @@ L_089BBF60: L_089BBFC0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(38))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0110_entry, 110u, 14u, 0x089BC0E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9159,7 +9645,6 @@ L_089BBFCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(36)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0110_entry, 110u, 14u, 0x089BC0E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9172,7 +9657,6 @@ L_089BBFDC: AOT_REGCACHE_SYNC_OUT(); return; L_089BBFE4: aot_gpr_31 = (0x089BBFECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BBFECu) goto L_089BBFEC; AOT_REGCACHE_SYNC_OUT(); return; L_089BBFEC: diff --git a/profiles/vcs/generated/generated_unit_0110.cpp b/profiles/vcs/generated/generated_unit_0110.cpp index ac2db73..fd68bce 100644 --- a/profiles/vcs/generated/generated_unit_0110.cpp +++ b/profiles/vcs/generated/generated_unit_0110.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0110[4088] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5, 0, 0, 6, 0, 7, 8, 0, 0, - 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 21, 0, 22, 0, 0, 0, - 23, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, - 0, 49, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 57, 0, 58, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, - 0, 0, 62, 0, 63, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, - 0, 68, 0, 0, 69, 0, 70, 0, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 0, 0, 0, - 79, 0, 0, 0, 80, 0, 81, 82, 0, 83, 0, 84, 0, 0, 85, 0, 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, - 91, 0, 0, 0, 92, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 97, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, 101, 102, 0, 103, 0, 104, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 112, 0, 113, 0, - 0, 0, 114, 0, 0, 115, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 122, 0, 0, 123, 0, 0, 0, 124, 0, 0, 125, 0, 126, 0, 0, 127, 0, 0, 0, 0, 128, - 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 133, 134, 0, 0, 0, 0, 135, 136, 0, 0, 137, 0, - 0, 0, 138, 0, 139, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 142, 0, 0, 0, 0, 143, 0, 144, 145, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 150, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, - 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, - 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 181, 182, 0, 0, - 0, 0, 0, 0, 0, 183, 184, 0, 185, 0, 186, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 189, 0, 190, 191, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 211, 0, 212, 0, 213, 0, - 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 216, 0, 217, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, - 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, - 0, 0, 0, 224, 0, 0, 0, 225, 226, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 229, 0, 0, 0, 230, 0, 0, 231, 0, 232, 0, 0, - 233, 0, 0, 234, 0, 0, 235, 0, 236, 237, 0, 238, 0, 239, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 245, 246, 0, 247, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 252, 0, - 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 0, 258, 0, 0, 0, 259, 0, 0, 0, 260, 0, 261, 0, 0, 262, 0, 0, 263, 0, 264, 265, 0, - 266, 0, 0, 267, 0, 268, 269, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 274, 0, 0, 0, 275, 0, 0, - 276, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, - 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 282, 0, 0, 283, 0, 284, 285, 0, 286, 0, 0, 287, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, 298, 299, 0, 0, 300, 0, 0, 301, 0, 0, 302, 0, 303, 0, 0, 0, 304, 0, - 0, 0, 305, 0, 0, 306, 0, 307, 0, 0, 0, 0, 308, 0, 0, 309, 0, 310, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, - 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 319, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 325, 0, 0, 0, - 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 331, - 0, 332, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 349, - 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 352, 0, 353, 0, 354, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, - 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, - 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, - 0, 373, 374, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, - 0, 0, 0, 0, 377, 0, 378, 0, 379, 0, 380, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 384, 0, 0, 385, 0, 0, 386, 0, 387, 0, 388, - 0, 389, 390, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 395, 396, 0, 0, 397, 0, 0, 398, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, - 401, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, - 406, 0, 0, 407, 0, 0, 408, 0, 409, 0, 410, 0, 411, 0, 0, 412, 0, 0, 413, 0, 0, 0, 414, 0, 0, 415, 0, 416, 0, 0, 417, 0, - 418, 0, 419, 0, 420, 0, 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 426, 0, 427, 0, 428, 0, 0, 429, - 0, 430, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, 435, 0, 436, 0, 0, 437, 438, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 442, 0, 0, 443, 0, 444, 0, 445, - 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 455, 0, 456, 0, 0, 0, 457, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 0, 461, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 470, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 474, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 475, 0, 476, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 478, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, - 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, - 0, 0, 488, 0, 0, 0, 489, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 500, 0, 501, 0, 502, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, - 509, 0, 510, 0, 511, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 523, 0, 0, 524, - 0, 0, 525, 0, 0, 526, 0, 527, 0, 528, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 0, - 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 535, 0, 0, 536, 0, 0, 537, 0, 0, 538, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, - 0, 0, 0, 544, 0, 545, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 550, 0, 0, 0, 551, - 0, 0, 552, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 558, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 565, 0, 566, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 581, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 587, 0, 0, 588, - 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, - 592, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, - 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, 615, 0, 0, 0, 616, 0, 0, 617, 0, 618, 0, 619, 0, 0, - 0, 620, 0, 0, 0, 621, 0, 0, 622, 0, 623, 0, 0, 624, 0, 625, 0, 626, 0, 627, 0, 628, 0, 629, 630, 0, 631, 0, 632, 0, 633, 0, - 0, 0, 0, 0, 0, 0, 0, 634, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 639, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, - 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, - 647, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 649, 0, 0, 0, 650, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, - 653, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 657, 0, 658, 0, 659, 0, 0, 0, 660, - 0, 661, 0, 662, 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 667, 668, 0, 0, 0, 669, 670, 0, 671, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 673, 0, 674, 0, 675, 0, 0, 676, 0, 677, 678, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 681, 0, 682, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, - 0, 685, 0, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 690, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 694, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 698, 0, 0, 699, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 701, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, - 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 709, 0, 0, 0, 0, 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 714, - 0, 0, 715, 0, 0, 0, 716, 0, 717, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 725, 0, 726, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 729, 0, - 0, 0, 0, 0, 0, 0, 0, 730, 0, 731, 0, 732, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, - 735, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 737, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, - 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, 0, 0, 0, 0, 0, - 0, 746, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 750, 0, 0, 0, 751, 0, - 0, 0, 0, 752, 0, 0, 0, 753, 0, 0, 754, 0, 0, 0, 0, 0, 0, 755, 756, 0, 757, 0, 0, 758, 0, 0, 759, 0, 760, 761, 0, 762, - 0, 763, 0, 764, 0, 0, 765, 0, 0, 766, 0, 0, 767, 0, 0, 768, 0, 769, 770, 0, 771, 0, 772, 0, 773, 0, 0, 774, 0, 0, 775, 0, - 0, 776, 0, 0, 777, 0, 778, 779, 0, 780, 0, 781, 0, 782, 0, 0, 783, 0, 0, 0, 784, 0, 0, 785, 0, 786, 0, 787, 0, 0, 788, 0, - 789, 0, 790, 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 794, 0, 0, 795, 0, 0, 796, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 797, 0, 0, 798, 0, 0, 799, 0, 800, 0, 0, 0, 0, 0, 801, 0, 802, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0110[64] = { + 0x8404280534D00801ull, 0x0020021114504900ull, 0x5402040002A80412ull, 0xA010200540204080ull, + 0x40122A8040810142ull, 0x0922AA5248001034ull, 0x0018005140334AD1ull, 0x5054094025690405ull, + 0x84A44A90004002A4ull, 0x068600944C305042ull, 0x002A800040800000ull, 0x4080000000010010ull, + 0x0002940000028100ull, 0x1100228000002801ull, 0x301140204000A604ull, 0x15554A0834401560ull, + 0x4814148155205548ull, 0x2918218880000004ull, 0x1096282002012B49ull, 0x6928895548000800ull, + 0x1020408122484869ull, 0x00AA208002A5A408ull, 0x411290A44524C500ull, 0x4000220000000880ull, + 0x9402080410502054ull, 0x0401204004220242ull, 0xA211022000001000ull, 0x411282200092A900ull, + 0x0400002A24202004ull, 0xA924A55020000106ull, 0x8000926000920806ull, 0x4A44954924000803ull, + 0x0651402695421255ull, 0x00128044A9040280ull, 0x0062522800A28000ull, 0x0D00344001500801ull, + 0x2104010A00000340ull, 0x808080C420005010ull, 0x002A908400050800ull, 0x2500889520805001ull, + 0x04400AA491402A00ull, 0x2A20924800401001ull, 0x080200148A0102A8ull, 0x00AA4840500A8200ull, + 0x2008001000809000ull, 0x0100400080012400ull, 0x9200080200000920ull, 0x1004000901004100ull, + 0x0115400808089200ull, 0x2A454008008A0050ull, 0x41054A8055AAA522ull, 0x4024410104121040ull, + 0x1631222A8A901041ull, 0x10055200034A8800ull, 0x0062800300110222ull, 0x401001020000C890ull, + 0x0040000820020000ull, 0x1000894480402A04ull, 0x40820000AA020800ull, 0x81002A0102040A80ull, + 0x4500810202404500ull, 0x4956924AB4960488ull, 0x049200A54A912AD2ull, 0x0080000100341490ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0110[64] = { + 1u, 16u, 27u, 39u, 49u, 62u, 79u, 96u, 114u, 129u, 146u, 152u, 156u, 163u, 171u, 183u, + 203u, 222u, 233u, 250u, 266u, 281u, 296u, 314u, 319u, 332u, 342u, 350u, 364u, 373u, 389u, 401u, + 418u, 439u, 451u, 463u, 475u, 484u, 494u, 504u, 518u, 532u, 544u, 556u, 569u, 575u, 581u, 589u, + 596u, 607u, 620u, 642u, 653u, 672u, 685u, 696u, 705u, 709u, 721u, 730u, 741u, 752u, 776u, 797u, }; void recomp_unit_0110_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0110_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089BC000u; - entry_id = (entry_delta < 16352u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0110[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16352u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0110[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0110[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089BC000; @@ -1016,7 +923,6 @@ L_089BC058: L_089BC05C: aot_gpr_5 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BC074; } @@ -1033,7 +939,6 @@ L_089BC070: L_089BC074: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BC088; } @@ -1105,7 +1010,6 @@ L_089BC0FC: L_089BC120: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BC190; } @@ -1114,7 +1018,6 @@ L_089BC120: L_089BC12C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(21))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BC190; } @@ -1149,7 +1052,6 @@ L_089BC158: AOT_REGCACHE_SYNC_OUT(); return; L_089BC168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BC190; } @@ -1199,7 +1101,17 @@ L_089BC1A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BC1D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -1221,7 +1133,6 @@ L_089BC1D4: L_089BC204: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1050))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BC510; } @@ -1231,7 +1142,6 @@ L_089BC210: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); ctx.gpr[18] = (2279u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (ctx.gpr[18] + static_cast(18000)); if (branch_taken) { @@ -1261,7 +1171,6 @@ L_089BC24C: AOT_REGCACHE_SYNC_OUT(); return; L_089BC254: aot_gpr_31 = (0x089BC25Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC25Cu) goto L_089BC25C; AOT_REGCACHE_SYNC_OUT(); return; L_089BC25C: @@ -1284,7 +1193,6 @@ L_089BC264: ctx.fpr[17] = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); if (branch_taken) { @@ -1335,7 +1243,6 @@ L_089BC2F8: ctx.fpr[0] = std::bit_cast(aot_gpr_4); ctx.fpr[0] = static_cast(static_cast(std::bit_cast(ctx.fpr[0]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(24), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1348,7 +1255,6 @@ L_089BC31C: aot_gpr_4 = (17279u << 16u); { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[18] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1401,7 +1307,6 @@ L_089BC388: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(24), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1448,7 +1353,6 @@ L_089BC3FC: L_089BC404: aot_fpr_12 = ctx.fpr[19] + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(24), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1470,9 +1374,7 @@ L_089BC420: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BC4B4; } @@ -1483,9 +1385,7 @@ L_089BC440: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(24), std::bit_cast(aot_fpr_12)); { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BC478; } @@ -1533,9 +1433,7 @@ L_089BC4AC: goto L_089BC4B4; L_089BC4B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BC4D0; } @@ -1568,7 +1466,6 @@ L_089BC4F8: AOT_REGCACHE_SYNC_OUT(); return; L_089BC508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BC514; } @@ -1591,7 +1488,17 @@ L_089BC514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BC530: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(24))); @@ -1607,7 +1514,6 @@ L_089BC530: L_089BC56C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BC824; } @@ -1616,7 +1522,6 @@ L_089BC56C: L_089BC578: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(536))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BC824; } @@ -1638,7 +1543,6 @@ L_089BC590: L_089BC598: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(9252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BC5AC; } @@ -1655,7 +1559,6 @@ L_089BC5AC: AOT_REGCACHE_SYNC_OUT(); return; L_089BC5B4: aot_gpr_31 = (0x089BC5BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC5BCu) goto L_089BC5BC; AOT_REGCACHE_SYNC_OUT(); return; L_089BC5BC: @@ -1673,7 +1576,6 @@ L_089BC5C4: L_089BC5D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BC5EC; } @@ -1700,7 +1602,6 @@ L_089BC600: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-12148), static_cast(ctx.gpr[20])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BC61C; } @@ -1708,7 +1609,6 @@ L_089BC600: } L_089BC610: aot_gpr_31 = (0x089BC618u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC618u) goto L_089BC618; AOT_REGCACHE_SYNC_OUT(); return; L_089BC618: @@ -1716,7 +1616,6 @@ L_089BC618: goto L_089BC61C; L_089BC61C: aot_gpr_31 = (0x089BC624u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 629u, 0x089C6D68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC624u) goto L_089BC624; AOT_REGCACHE_SYNC_OUT(); return; L_089BC624: @@ -1736,7 +1635,6 @@ L_089BC62C: goto L_089BC638; L_089BC638: aot_gpr_31 = (0x089BC640u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC640u) goto L_089BC640; AOT_REGCACHE_SYNC_OUT(); return; L_089BC640: @@ -1745,7 +1643,6 @@ L_089BC640: L_089BC644: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BC824; } @@ -1780,7 +1677,6 @@ L_089BC680: AOT_REGCACHE_SYNC_OUT(); return; L_089BC690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BC824; } @@ -1859,7 +1755,6 @@ L_089BC740: } L_089BC74C: aot_gpr_31 = (0x089BC754u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC754u) goto L_089BC754; AOT_REGCACHE_SYNC_OUT(); return; L_089BC754: @@ -1867,12 +1762,10 @@ L_089BC754: goto L_089BC758; L_089BC758: aot_gpr_31 = (0x089BC760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 633u, 0x089C6D88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC760u) goto L_089BC760; AOT_REGCACHE_SYNC_OUT(); return; L_089BC760: { const bool branch_taken = aot_gpr_2 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089BC7D8; } @@ -1881,7 +1774,6 @@ L_089BC760: L_089BC768: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(11240))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089BC7D8; } @@ -1894,9 +1786,7 @@ L_089BC774: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BC7D8; } @@ -1930,7 +1820,6 @@ L_089BC7C8: AOT_REGCACHE_SYNC_OUT(); return; L_089BC7D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BC7F8; } @@ -1960,7 +1849,6 @@ L_089BC7F8: L_089BC808: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BC81C; } @@ -1968,7 +1856,6 @@ L_089BC808: } L_089BC814: aot_gpr_31 = (0x089BC81Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BC81Cu) goto L_089BC81C; AOT_REGCACHE_SYNC_OUT(); return; L_089BC81C: @@ -1995,7 +1882,17 @@ L_089BC824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BC858: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (2236u << 16u); @@ -2021,7 +1918,6 @@ L_089BC890: } L_089BC89C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BC8C8; } @@ -2029,7 +1925,6 @@ L_089BC89C: } L_089BC8A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BCBF8; } @@ -2038,7 +1933,6 @@ L_089BC8A4: L_089BC8AC: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089BC8C8; } @@ -2061,7 +1955,6 @@ L_089BC8C8: } L_089BC8D4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089BCBF8; } @@ -2085,7 +1978,6 @@ L_089BC8E8: goto L_089BC8FC; L_089BC8FC: { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089BC990; } @@ -2094,7 +1986,6 @@ L_089BC8FC: L_089BC904: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16672u << 16u); if (branch_taken) { @@ -2106,9 +1997,7 @@ L_089BC918: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_14 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BC938; } @@ -2126,9 +2015,7 @@ L_089BC938: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BC954; } @@ -2140,7 +2027,6 @@ L_089BC950: L_089BC954: aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_089BC968; @@ -2188,7 +2074,6 @@ L_089BC99C: aot_gpr_5 = (17174u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2202,7 +2087,6 @@ L_089BC9C4: L_089BC9C8: aot_fpr_13 = aot_fpr_15 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9520), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -2281,7 +2165,6 @@ L_089BCA78: AOT_REGCACHE_SYNC_OUT(); return; L_089BCABC: aot_gpr_31 = (0x089BCAC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BCAC4u) goto L_089BCAC4; AOT_REGCACHE_SYNC_OUT(); return; L_089BCAC4: @@ -2309,7 +2192,6 @@ L_089BCAD4: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_14 / aot_fpr_12; aot_gpr_31 = (0x089BCB10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 68u, 0x08B0C520u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BCB10u) goto L_089BCB10; AOT_REGCACHE_SYNC_OUT(); return; L_089BCB10: @@ -2396,7 +2278,17 @@ L_089BCBF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BCC20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_gpr_6 | 0u); @@ -2448,7 +2340,6 @@ L_089BCC44: AOT_REGCACHE_SYNC_OUT(); return; L_089BCCA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BCDA4; } @@ -2465,7 +2356,6 @@ L_089BCCB0: } L_089BCCBC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089BCCA8; } @@ -2505,7 +2395,6 @@ L_089BCD00: AOT_REGCACHE_SYNC_OUT(); return; L_089BCD2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BCCA8; } @@ -2542,7 +2431,6 @@ L_089BCD34: AOT_REGCACHE_SYNC_OUT(); return; L_089BCD9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BCCA8; } @@ -2556,7 +2444,17 @@ L_089BCDA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BCDB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -2585,7 +2483,6 @@ L_089BCDF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); aot_gpr_4 = (2279u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(18032)); if (branch_taken) { @@ -2600,7 +2497,6 @@ L_089BCE08: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BCE28; } @@ -2612,7 +2508,6 @@ L_089BCE24: L_089BCE28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(9252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BCF74; } @@ -2639,7 +2534,6 @@ L_089BCE3C: aot_fpr_13 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[18]; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(ctx.gpr[7]); if (branch_taken) { @@ -2691,7 +2585,6 @@ L_089BCED0: { const float fs = aot_fpr_13; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -2710,7 +2603,6 @@ L_089BCEF4: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BCF18; } @@ -2726,7 +2618,6 @@ L_089BCF18: AOT_REGCACHE_SYNC_OUT(); return; L_089BCF20: aot_gpr_31 = (0x089BCF28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BCF28u) goto L_089BCF28; AOT_REGCACHE_SYNC_OUT(); return; L_089BCF28: @@ -2756,7 +2647,6 @@ L_089BCF58: AOT_REGCACHE_SYNC_OUT(); return; L_089BCF68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BCF74; } @@ -2778,14 +2668,23 @@ L_089BCF74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BCF8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BCFE0; } @@ -2793,7 +2692,6 @@ L_089BCF8C: } L_089BCFA4: aot_gpr_31 = (0x089BCFACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BCFACu) goto L_089BCFAC; AOT_REGCACHE_SYNC_OUT(); return; L_089BCFAC: @@ -2804,7 +2702,6 @@ L_089BCFAC: AOT_REGCACHE_SYNC_OUT(); return; L_089BCFB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BCFD8; } @@ -2817,7 +2714,6 @@ L_089BCFC0: AOT_REGCACHE_SYNC_OUT(); return; L_089BCFC8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089BCFE8; } @@ -2825,7 +2721,6 @@ L_089BCFC8: } L_089BCFD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD020; } @@ -2833,7 +2728,6 @@ L_089BCFD0: } L_089BCFD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD0F8; } @@ -2841,7 +2735,6 @@ L_089BCFD8: } L_089BCFE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD0F8; } @@ -2870,7 +2763,6 @@ L_089BD00C: AOT_REGCACHE_SYNC_OUT(); return; L_089BD018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD0F8; } @@ -2883,7 +2775,6 @@ L_089BD020: AOT_REGCACHE_SYNC_OUT(); return; L_089BD028: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BD068; } @@ -2912,7 +2803,6 @@ L_089BD054: AOT_REGCACHE_SYNC_OUT(); return; L_089BD060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD0F8; } @@ -2925,7 +2815,6 @@ L_089BD068: AOT_REGCACHE_SYNC_OUT(); return; L_089BD070: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BD0B0; } @@ -2954,7 +2843,6 @@ L_089BD09C: AOT_REGCACHE_SYNC_OUT(); return; L_089BD0A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD0F8; } @@ -2966,7 +2854,6 @@ L_089BD0B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BD0F8; } @@ -3001,7 +2888,17 @@ L_089BD0F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BD108: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[20]); @@ -3031,7 +2928,6 @@ L_089BD17C: ctx.gpr[19] = (ctx.gpr[22] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(74))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089BD2DC; } @@ -3041,7 +2937,6 @@ L_089BD18C: aot_gpr_4 = (ctx.gpr[28] + ctx.gpr[21]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9536))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BD1A0; } @@ -3055,7 +2950,6 @@ L_089BD1A0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(9536), static_cast(aot_gpr_5)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(9540)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BD1D0; } @@ -3067,7 +2961,6 @@ L_089BD1B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(9540)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 51 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BD1D0; } @@ -3089,7 +2982,6 @@ L_089BD1D0: L_089BD1E0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(9540)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BD2C8; } @@ -3097,7 +2989,6 @@ L_089BD1E0: } L_089BD1EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BD2C8; } @@ -3119,7 +3010,6 @@ L_089BD200: L_089BD20C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089BD224; } @@ -3201,7 +3091,6 @@ L_089BD2C4: goto L_089BD2C8; L_089BD2C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BD2DC; } @@ -3245,7 +3134,17 @@ L_089BD2F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BD32C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9270))); @@ -3269,7 +3168,6 @@ L_089BD36C: } L_089BD378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD390; } @@ -3277,7 +3175,6 @@ L_089BD378: } L_089BD380: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD564; } @@ -3285,7 +3182,6 @@ L_089BD380: } L_089BD388: aot_gpr_31 = (0x089BD390u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD390u) goto L_089BD390; AOT_REGCACHE_SYNC_OUT(); return; L_089BD390: @@ -3295,7 +3191,6 @@ L_089BD390: AOT_REGCACHE_SYNC_OUT(); return; L_089BD398: { const bool branch_taken = aot_gpr_2 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089BD564; } @@ -3304,7 +3199,6 @@ L_089BD398: L_089BD3A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(11240))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089BD564; } @@ -3314,7 +3208,6 @@ L_089BD3AC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(9260)))))); aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089BD3CC; } @@ -3324,7 +3217,6 @@ L_089BD3BC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_6 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089BD3D4; } @@ -3332,7 +3224,6 @@ L_089BD3BC: } L_089BD3CC: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089BD548; } @@ -3347,7 +3238,6 @@ L_089BD3D4: L_089BD3E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BD3F8; } @@ -3355,7 +3245,6 @@ L_089BD3E0: } L_089BD3EC: aot_gpr_31 = (0x089BD3F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD3F4u) goto L_089BD3F4; AOT_REGCACHE_SYNC_OUT(); return; L_089BD3F4: @@ -3363,13 +3252,11 @@ L_089BD3F4: goto L_089BD3F8; L_089BD3F8: aot_gpr_31 = (0x089BD400u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0002_entry, 2u, 329u, 0x0880D548u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD400u) goto L_089BD400; AOT_REGCACHE_SYNC_OUT(); return; L_089BD400: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BD418; } @@ -3377,7 +3264,6 @@ L_089BD400: } L_089BD40C: aot_gpr_31 = (0x089BD414u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD414u) goto L_089BD414; AOT_REGCACHE_SYNC_OUT(); return; L_089BD414: @@ -3388,7 +3274,6 @@ L_089BD418: aot_gpr_4 = (aot_gpr_4 + static_cast(64)); aot_gpr_4 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BD42C; } @@ -3496,7 +3381,6 @@ L_089BD50C: L_089BD528: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BD540; } @@ -3504,7 +3388,6 @@ L_089BD528: } L_089BD534: aot_gpr_31 = (0x089BD53Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD53Cu) goto L_089BD53C; AOT_REGCACHE_SYNC_OUT(); return; L_089BD53C: @@ -3512,7 +3395,6 @@ L_089BD53C: goto L_089BD540; L_089BD540: aot_gpr_31 = (0x089BD548u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0003_entry, 3u, 151u, 0x08810A58u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD548u) goto L_089BD548; AOT_REGCACHE_SYNC_OUT(); return; L_089BD548: @@ -3524,7 +3406,6 @@ L_089BD548: goto L_089BD554; L_089BD554: aot_gpr_31 = (0x089BD55Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BD55Cu) goto L_089BD55C; AOT_REGCACHE_SYNC_OUT(); return; L_089BD55C: @@ -3552,7 +3433,17 @@ L_089BD564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BD59C: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9263))); @@ -3577,7 +3468,6 @@ L_089BD5B4: } L_089BD5C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD694; } @@ -3585,7 +3475,6 @@ L_089BD5C4: } L_089BD5CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD71C; } @@ -3616,7 +3505,6 @@ L_089BD5DC: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (ctx.gpr[8] - aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_089BD628; } @@ -3630,7 +3518,6 @@ L_089BD628: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(11222))); aot_gpr_6 = (ctx.gpr[8] - aot_gpr_6); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_089BD63C; } @@ -3642,7 +3529,6 @@ L_089BD638: L_089BD63C: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_089BD660; } @@ -3651,7 +3537,6 @@ L_089BD63C: L_089BD648: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_089BD660; } @@ -3664,7 +3549,6 @@ L_089BD654: goto L_089BD660; L_089BD660: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089BD694; } @@ -3674,7 +3558,6 @@ L_089BD668: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(11222))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089BD694; } @@ -3684,7 +3567,6 @@ L_089BD678: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7649))); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(11223))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089BD694; } @@ -3697,7 +3579,6 @@ L_089BD688: goto L_089BD694; L_089BD694: { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_089BD6B0; } @@ -3708,7 +3589,6 @@ L_089BD69C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_5 = (static_cast(aot_gpr_5) < 31 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BD6C4; } @@ -3717,7 +3597,6 @@ L_089BD69C: L_089BD6B0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(11253))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089BD6D0; } @@ -3725,7 +3604,6 @@ L_089BD6B0: } L_089BD6BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BD6E0; } @@ -3775,7 +3653,17 @@ L_089BD71C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BD72C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[16]); @@ -3847,7 +3735,6 @@ L_089BD7F8: } L_089BD808: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BD850; } @@ -3855,7 +3742,6 @@ L_089BD808: } L_089BD810: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089BD834; } @@ -3889,7 +3775,6 @@ L_089BD834: } L_089BD850: { const bool branch_taken = ctx.gpr[16] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089BD8E8; } @@ -3957,7 +3842,6 @@ L_089BD8C4: } L_089BD8E8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089BD8FC; } @@ -4094,7 +3978,17 @@ L_089BD9E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BDA30: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -4158,9 +4052,7 @@ L_089BDAD0: goto L_089BDAE4; L_089BDAE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BDAF4; } @@ -4188,7 +4080,6 @@ L_089BDAFC: L_089BDB20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BDB34; } @@ -4196,7 +4087,6 @@ L_089BDB20: } L_089BDB2C: aot_gpr_31 = (0x089BDB34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BDB34u) goto L_089BDB34; AOT_REGCACHE_SYNC_OUT(); return; L_089BDB34: @@ -4206,7 +4096,6 @@ L_089BDB34: AOT_REGCACHE_SYNC_OUT(); return; L_089BDB3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BDBF8; } @@ -4215,7 +4104,6 @@ L_089BDB3C: L_089BDB44: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(9267))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDBF8; } @@ -4224,7 +4112,6 @@ L_089BDB44: L_089BDB50: aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDBC4; } @@ -4244,7 +4131,6 @@ L_089BDB5C: aot_gpr_4 = (aot_gpr_4 + static_cast(2000)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BDBA4; } @@ -4254,7 +4140,6 @@ L_089BDB94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDBC4; } @@ -4270,7 +4155,6 @@ L_089BDBA4: goto L_089BD72C; L_089BDBBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BDBF8; } @@ -4279,7 +4163,6 @@ L_089BDBBC: L_089BDBC4: aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDBF8; } @@ -4289,7 +4172,6 @@ L_089BDBD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDBF8; } @@ -4331,7 +4213,17 @@ L_089BDC08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BDC34: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4122))); @@ -4369,7 +4261,6 @@ L_089BDC74: AOT_REGCACHE_SYNC_OUT(); return; L_089BDC84: aot_gpr_31 = (0x089BDC8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BDC8Cu) goto L_089BDC8C; AOT_REGCACHE_SYNC_OUT(); return; L_089BDC8C: @@ -4427,7 +4318,17 @@ L_089BDD08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BDD20: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -4467,7 +4368,6 @@ L_089BDD74: } L_089BDD90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BDDE0; } @@ -4483,7 +4383,6 @@ L_089BDD98: } L_089BDDA0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089BDDB4; } @@ -4594,7 +4493,6 @@ L_089BDE44: L_089BDE50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(9272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDE98; } @@ -4629,7 +4527,6 @@ L_089BDE98: L_089BDEA4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(11216))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089BDF00; } @@ -4638,7 +4535,6 @@ L_089BDEA4: L_089BDEB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(9273))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDF00; } @@ -4686,7 +4582,17 @@ L_089BDF04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BDF2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), ctx.gpr[16]); @@ -4714,7 +4620,6 @@ L_089BDF74: L_089BDF80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8360))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BDFA0; } @@ -4723,7 +4628,6 @@ L_089BDF80: L_089BDF8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BDFA8; } @@ -4731,7 +4635,6 @@ L_089BDF8C: } L_089BDF98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BDFB0; } @@ -4739,7 +4642,6 @@ L_089BDF98: } L_089BDFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF15C; } @@ -4753,7 +4655,6 @@ L_089BDFA8: L_089BDFB0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE2C4; } @@ -4762,7 +4663,6 @@ L_089BDFB0: L_089BDFBC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BE2C4; } @@ -4772,7 +4672,6 @@ L_089BDFC8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(536))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089BE2C4; } @@ -4781,7 +4680,6 @@ L_089BDFC8: L_089BDFD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BDFEC; } @@ -4794,7 +4692,6 @@ L_089BDFE4: L_089BDFEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(9252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE000; } @@ -4811,7 +4708,6 @@ L_089BE000: AOT_REGCACHE_SYNC_OUT(); return; L_089BE008: aot_gpr_31 = (0x089BE010u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE010u) goto L_089BE010; AOT_REGCACHE_SYNC_OUT(); return; L_089BE010: @@ -4822,7 +4718,6 @@ L_089BE010: L_089BE018: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE030; } @@ -4839,7 +4734,6 @@ L_089BE030: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE0D8; } @@ -4850,7 +4744,6 @@ L_089BE044: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-12117), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BE060; } @@ -4858,7 +4751,6 @@ L_089BE044: } L_089BE058: aot_gpr_31 = (0x089BE060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE060u) goto L_089BE060; AOT_REGCACHE_SYNC_OUT(); return; L_089BE060: @@ -4868,7 +4760,6 @@ L_089BE060: AOT_REGCACHE_SYNC_OUT(); return; L_089BE068: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BE2C4; } @@ -4883,7 +4774,6 @@ L_089BE070: goto L_089BE07C; L_089BE07C: aot_gpr_31 = (0x089BE084u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE084u) goto L_089BE084; AOT_REGCACHE_SYNC_OUT(); return; L_089BE084: @@ -4892,7 +4782,6 @@ L_089BE084: L_089BE088: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE2C4; } @@ -4924,7 +4813,6 @@ L_089BE0C0: AOT_REGCACHE_SYNC_OUT(); return; L_089BE0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BE2C4; } @@ -4933,7 +4821,6 @@ L_089BE0D0: L_089BE0D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-12117))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE0E8; } @@ -4995,7 +4882,6 @@ L_089BE160: } L_089BE16C: aot_gpr_31 = (0x089BE174u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE174u) goto L_089BE174; AOT_REGCACHE_SYNC_OUT(); return; L_089BE174: @@ -5006,7 +4892,6 @@ L_089BE174: L_089BE17C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089BE25C; } @@ -5016,7 +4901,6 @@ L_089BE188: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(11240))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089BE25C; } @@ -5029,9 +4913,7 @@ L_089BE198: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BE25C; } @@ -5092,7 +4974,6 @@ L_089BE244: AOT_REGCACHE_SYNC_OUT(); return; L_089BE254: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BE2A4; } @@ -5128,7 +5009,6 @@ L_089BE294: L_089BE2A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BE2B8; } @@ -5136,7 +5016,6 @@ L_089BE2A4: } L_089BE2B0: aot_gpr_31 = (0x089BE2B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE2B8u) goto L_089BE2B8; AOT_REGCACHE_SYNC_OUT(); return; L_089BE2B8: @@ -5148,7 +5027,6 @@ L_089BE2C4: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE588; } @@ -5204,7 +5082,6 @@ L_089BE32C: AOT_REGCACHE_SYNC_OUT(); return; L_089BE350: aot_gpr_31 = (0x089BE358u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE358u) goto L_089BE358; AOT_REGCACHE_SYNC_OUT(); return; L_089BE358: @@ -5364,7 +5241,6 @@ L_089BE4E0: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_5 = (static_cast(aot_gpr_5) < 481 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BE510; } @@ -5430,7 +5306,6 @@ L_089BE588: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE6B0; } @@ -5509,7 +5384,6 @@ L_089BE62C: AOT_REGCACHE_SYNC_OUT(); return; L_089BE640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BE69C; } @@ -5556,7 +5430,6 @@ L_089BE69C: L_089BE6B0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(2074))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE870; } @@ -5569,7 +5442,6 @@ L_089BE6BC: AOT_REGCACHE_SYNC_OUT(); return; L_089BE6C4: aot_gpr_31 = (0x089BE6CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE6CCu) goto L_089BE6CC; AOT_REGCACHE_SYNC_OUT(); return; L_089BE6CC: @@ -5643,7 +5515,6 @@ L_089BE774: } L_089BE780: aot_gpr_31 = (0x089BE788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE788u) goto L_089BE788; AOT_REGCACHE_SYNC_OUT(); return; L_089BE788: @@ -5654,7 +5525,6 @@ L_089BE788: L_089BE790: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089BE834; } @@ -5664,7 +5534,6 @@ L_089BE79C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(11240))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089BE834; } @@ -5674,7 +5543,6 @@ L_089BE7AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(9256))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089BE834; } @@ -5687,9 +5555,7 @@ L_089BE7BC: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BE834; } @@ -5728,7 +5594,6 @@ L_089BE824: AOT_REGCACHE_SYNC_OUT(); return; L_089BE82C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BE860; } @@ -5761,7 +5626,6 @@ L_089BE860: L_089BE870: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1050))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BE8E8; } @@ -5770,7 +5634,6 @@ L_089BE870: L_089BE87C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(3610))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BE8E8; } @@ -5779,7 +5642,6 @@ L_089BE87C: L_089BE888: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(2586))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BE8E8; } @@ -5792,7 +5654,6 @@ L_089BE894: AOT_REGCACHE_SYNC_OUT(); return; L_089BE89C: aot_gpr_31 = (0x089BE8A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BE8A4u) goto L_089BE8A4; AOT_REGCACHE_SYNC_OUT(); return; L_089BE8A4: @@ -5825,7 +5686,6 @@ L_089BE8E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9532))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -5843,7 +5703,6 @@ L_089BE900: aot_fpr_15 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -5904,7 +5763,6 @@ L_089BE9A4: L_089BE9B0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(3098))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BEC30; } @@ -5914,9 +5772,7 @@ L_089BE9BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9532))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BEC30; } @@ -5934,7 +5790,6 @@ L_089BE9D4: } L_089BE9E4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089BEBAC; } @@ -5942,7 +5797,6 @@ L_089BE9E4: } L_089BE9EC: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089BEA24; } @@ -5978,7 +5832,6 @@ L_089BEA14: } L_089BEA1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BEBAC; } @@ -5989,7 +5842,6 @@ L_089BEA24: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16576u << 16u); if (branch_taken) { @@ -6004,9 +5856,7 @@ L_089BEA40: aot_gpr_4 = (16928u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BEA6C; } @@ -6033,7 +5883,6 @@ L_089BEA7C: goto L_089BEA88; L_089BEA88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BEBAC; } @@ -6050,7 +5899,6 @@ L_089BEA90: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9526)))))); if (branch_taken) { @@ -6096,7 +5944,6 @@ L_089BEB24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9526)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 1501 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BEB44; } @@ -6108,7 +5955,6 @@ L_089BEB3C: goto L_089BEB44; L_089BEB44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BEBAC; } @@ -6121,9 +5967,7 @@ L_089BEB4C: aot_gpr_4 = (16880u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BEB78; } @@ -6139,7 +5983,6 @@ L_089BEB78: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9528), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6157,7 +6000,6 @@ L_089BEB98: L_089BEBAC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1050))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BEC30; } @@ -6166,7 +6008,6 @@ L_089BEBAC: L_089BEBB8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(3610))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BEC30; } @@ -6179,7 +6020,6 @@ L_089BEBC4: AOT_REGCACHE_SYNC_OUT(); return; L_089BEBCC: aot_gpr_31 = (0x089BEBD4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BEBD4u) goto L_089BEBD4; AOT_REGCACHE_SYNC_OUT(); return; L_089BEBD4: @@ -6214,7 +6054,6 @@ L_089BEBDC: L_089BEC30: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1050))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089BF14C; } @@ -6226,7 +6065,6 @@ L_089BEC3C: aot_gpr_4 = (aot_gpr_4 + static_cast(17968)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -6266,7 +6104,6 @@ L_089BEC90: aot_gpr_5 = (20224u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -6332,7 +6169,6 @@ L_089BED40: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(4), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -6353,7 +6189,6 @@ L_089BED7C: aot_gpr_5 = (20224u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -6487,7 +6322,6 @@ L_089BEEFC: aot_gpr_4 = (aot_gpr_4 + static_cast(18032)); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6515,7 +6349,6 @@ L_089BEF38: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17820u << 16u); if (branch_taken) { @@ -6556,7 +6389,6 @@ L_089BEF8C: aot_gpr_5 = (20224u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -6621,9 +6453,7 @@ L_089BF04C: aot_gpr_4 = (aot_gpr_4 + static_cast(18032)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF08C; } @@ -6655,7 +6485,6 @@ L_089BF08C: AOT_REGCACHE_SYNC_OUT(); return; L_089BF0B8: aot_gpr_31 = (0x089BF0C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BF0C0u) goto L_089BF0C0; AOT_REGCACHE_SYNC_OUT(); return; L_089BF0C0: @@ -6711,7 +6540,6 @@ L_089BF118: AOT_REGCACHE_SYNC_OUT(); return; L_089BF144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF15C; } @@ -6742,7 +6570,17 @@ L_089BF15C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BF18C: ctx.gpr[11] = (17279u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -6762,7 +6600,6 @@ L_089BF18C: } L_089BF1B8: { const bool branch_taken = static_cast(ctx.gpr[9]) < 0; - // nop if (branch_taken) { goto L_089BF220; } @@ -6770,7 +6607,6 @@ L_089BF1B8: } L_089BF1C0: { const bool branch_taken = static_cast(ctx.gpr[9]) > 0; - // nop if (branch_taken) { goto L_089BF1F4; } @@ -6797,7 +6633,6 @@ L_089BF1D8: } L_089BF1E4: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089BF214; } @@ -6805,7 +6640,6 @@ L_089BF1E4: } L_089BF1EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF220; } @@ -6838,7 +6672,6 @@ L_089BF214: goto L_089BF220; L_089BF220: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_089BF268; } @@ -6855,7 +6688,6 @@ L_089BF228: } L_089BF234: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_089BF268; } @@ -6863,7 +6695,6 @@ L_089BF234: } L_089BF23C: { const bool branch_taken = static_cast(ctx.gpr[8]) <= 0; - // nop if (branch_taken) { goto L_089BF25C; } @@ -6871,7 +6702,6 @@ L_089BF23C: } L_089BF244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF260; } @@ -6879,7 +6709,6 @@ L_089BF244: } L_089BF24C: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089BF260; } @@ -6887,7 +6716,6 @@ L_089BF24C: } L_089BF254: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF268; } @@ -6910,7 +6738,6 @@ L_089BF268: } L_089BF270: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089BF450; } @@ -6933,7 +6760,6 @@ L_089BF278: } L_089BF29C: { const bool branch_taken = static_cast(ctx.gpr[8]) <= 0; - // nop if (branch_taken) { goto L_089BF400; } @@ -6941,7 +6767,6 @@ L_089BF29C: } L_089BF2A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF3D4; } @@ -6958,7 +6783,6 @@ L_089BF2AC: } L_089BF2B8: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089BF350; } @@ -6966,7 +6790,6 @@ L_089BF2B8: } L_089BF2C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF400; } @@ -6976,9 +6799,7 @@ L_089BF2C8: aot_fpr_13 = ctx.fpr[17] / ctx.fpr[16]; { const float fs = aot_fpr_13; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF2F8; } @@ -7010,9 +6831,7 @@ L_089BF318: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF344; } @@ -7038,9 +6857,7 @@ L_089BF350: aot_fpr_13 = ctx.fpr[17] / ctx.fpr[16]; { const float fs = aot_fpr_13; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF380; } @@ -7072,9 +6889,7 @@ L_089BF3A0: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF3C8; } @@ -7102,7 +6917,6 @@ L_089BF3D4: ctx.gpr[9] = (ctx.gpr[9] | 16384u); ctx.fpr[19] = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 1000u); if (branch_taken) { @@ -7118,9 +6932,7 @@ L_089BF400: aot_fpr_13 = ctx.fpr[17] / ctx.fpr[16]; { const float fs = aot_fpr_13; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF430; } @@ -7159,7 +6971,6 @@ L_089BF450: } L_089BF45C: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_089BF4C0; } @@ -7167,7 +6978,6 @@ L_089BF45C: } L_089BF464: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_089BF494; } @@ -7193,7 +7003,6 @@ L_089BF47C: } L_089BF484: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BF4B4; } @@ -7201,7 +7010,6 @@ L_089BF484: } L_089BF48C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF4C0; } @@ -7234,9 +7042,7 @@ L_089BF4B4: goto L_089BF4C0; L_089BF4C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF4D4; } @@ -7247,9 +7053,7 @@ L_089BF4D0: goto L_089BF4D4; L_089BF4D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF4E8; } @@ -7260,11 +7064,20 @@ L_089BF4E4: goto L_089BF4E8; L_089BF4E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BF4F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9265))); @@ -7287,7 +7100,6 @@ L_089BF52C: goto L_089BF53C; L_089BF53C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF558; } @@ -7295,7 +7107,6 @@ L_089BF53C: } L_089BF544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7310,7 +7121,6 @@ L_089BF54C: goto L_089BF558; L_089BF558: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7333,9 +7143,7 @@ L_089BF564: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1256))); ctx.fpr[20] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7344,7 +7152,6 @@ L_089BF564: L_089BF5A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BF5B8; } @@ -7352,7 +7159,6 @@ L_089BF5A4: } L_089BF5B0: aot_gpr_31 = (0x089BF5B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BF5B8u) goto L_089BF5B8; AOT_REGCACHE_SYNC_OUT(); return; L_089BF5B8: @@ -7362,7 +7168,6 @@ L_089BF5B8: AOT_REGCACHE_SYNC_OUT(); return; L_089BF5C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7378,7 +7183,6 @@ L_089BF5C8: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BF614; } @@ -7389,7 +7193,6 @@ L_089BF5F0: aot_gpr_5 = (aot_gpr_5 + static_cast(2000)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089BF614; } @@ -7399,7 +7202,6 @@ L_089BF604: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7420,7 +7222,6 @@ L_089BF624: aot_gpr_6 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1256))); goto L_089BF684; @@ -7465,9 +7266,7 @@ L_089BF684: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fpr[26] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF6C4; } @@ -7483,9 +7282,7 @@ L_089BF6BC: } L_089BF6C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF6D8; } @@ -7525,7 +7322,6 @@ L_089BF710: } L_089BF71C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16267u << 16u); if (branch_taken) { @@ -7694,9 +7490,7 @@ L_089BF908: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7709,7 +7503,6 @@ L_089BF924: AOT_REGCACHE_SYNC_OUT(); return; L_089BF92C: aot_gpr_31 = (0x089BF934u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BF934u) goto L_089BF934; AOT_REGCACHE_SYNC_OUT(); return; L_089BF934: @@ -7731,7 +7524,6 @@ L_089BF958: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(42), static_cast(0u)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_29 + static_cast(40)); if (branch_taken) { @@ -7754,7 +7546,6 @@ L_089BF988: AOT_REGCACHE_SYNC_OUT(); return; L_089BF998: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089BF9BC; } @@ -7793,7 +7584,17 @@ L_089BF9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BF9F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-816)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(538))); @@ -7814,7 +7615,6 @@ L_089BFA2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(17968))); ctx.gpr[18] = (2279u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (2279u << 16u); if (branch_taken) { @@ -7843,7 +7643,6 @@ L_089BFA64: AOT_REGCACHE_SYNC_OUT(); return; L_089BFA6C: aot_gpr_31 = (0x089BFA74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089BFA74u) goto L_089BFA74; AOT_REGCACHE_SYNC_OUT(); return; L_089BFA74: @@ -7879,7 +7678,6 @@ L_089BFAC4: ctx.fpr[19] = aot_fpr_15 / ctx.fpr[16]; { const float fs = ctx.fpr[19]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[19] = std::bit_cast(0x7FC00000u); else ctx.fpr[19] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(17968))); if (branch_taken) { @@ -7928,7 +7726,6 @@ L_089BFB2C: aot_gpr_4 = (17382u << 16u); ctx.fpr[0] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(17968), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7941,7 +7738,6 @@ L_089BFB48: aot_gpr_4 = (17279u << 16u); { const float fs = aot_fpr_12; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[19] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7994,7 +7790,6 @@ L_089BFBB4: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(18000), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -8046,7 +7841,6 @@ L_089BFC38: { const float fs = aot_fpr_15; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(18032), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -8069,9 +7863,7 @@ L_089BFC64: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BFD0C; } @@ -8082,9 +7874,7 @@ L_089BFC84: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(17968), std::bit_cast(aot_fpr_12)); { const float fs = aot_fpr_13; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BFCBC; } @@ -8137,9 +7927,7 @@ L_089BFCF8: goto L_089BFD0C; L_089BFD0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089BFD28; } @@ -8183,7 +7971,6 @@ L_089BFD50: L_089BFD5C: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089BFD74; } @@ -8235,7 +8022,6 @@ L_089BFDA4: L_089BFDB0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089BFDC8; } @@ -8287,7 +8073,6 @@ L_089BFDF8: L_089BFE04: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089BFE1C; } @@ -8336,7 +8121,6 @@ L_089BFE50: AOT_REGCACHE_SYNC_OUT(); return; L_089BFE5C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BFE9C; } @@ -8355,7 +8139,6 @@ L_089BFE6C: AOT_REGCACHE_SYNC_OUT(); return; L_089BFE78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089BFE9C; } @@ -8374,7 +8157,6 @@ L_089BFE88: AOT_REGCACHE_SYNC_OUT(); return; L_089BFE94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089BFEE8; } @@ -8396,7 +8178,6 @@ L_089BFE9C: L_089BFEC4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BFEDC; } @@ -8432,7 +8213,6 @@ L_089BFEE8: L_089BFF10: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(1562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089BFF28; } @@ -8485,7 +8265,17 @@ L_089BFF54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089BFF80: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(536), ctx.gpr[30]); diff --git a/profiles/vcs/generated/generated_unit_0111.cpp b/profiles/vcs/generated/generated_unit_0111.cpp index 4c25bb7..e28d4e9 100644 --- a/profiles/vcs/generated/generated_unit_0111.cpp +++ b/profiles/vcs/generated/generated_unit_0111.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0111[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 8, 0, 0, - 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, 31, - 0, 0, 32, 0, 0, 33, 0, 34, 35, 0, 36, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 43, 0, 0, 0, 44, - 45, 0, 0, 46, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 58, 59, 0, 60, 61, 0, 62, 0, 0, 63, 0, 0, 0, 0, 64, 0, - 65, 0, 66, 67, 0, 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, - 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 84, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, - 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 91, 0, 0, 92, 0, 0, 93, 0, 0, 94, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 102, - 103, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, - 120, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 129, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, - 144, 0, 145, 146, 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, - 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 152, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, - 0, 0, 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 0, 173, 174, 0, 0, 0, - 175, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, - 0, 183, 0, 0, 0, 184, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 187, 188, 0, 0, 0, 0, 0, - 0, 0, 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 197, 0, 0, 198, 0, 199, - 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, - 206, 0, 207, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 211, 0, 212, - 0, 0, 0, 0, 0, 0, 213, 0, 0, 214, 0, 215, 0, 216, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, 0, 225, 0, 226, 0, 0, 0, - 227, 0, 0, 228, 0, 0, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 0, 237, 238, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 241, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, - 0, 249, 0, 0, 250, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 258, - 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, - 263, 0, 0, 0, 0, 264, 0, 0, 265, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 272, 0, 273, 0, 274, 0, 0, 0, - 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 282, 0, 0, 0, 0, 0, 283, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 288, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 291, 0, 0, 292, 0, 0, 293, 0, 0, 294, 0, 0, 295, 0, - 0, 0, 296, 0, 0, 0, 0, 297, 0, 0, 298, 0, 299, 0, 300, 0, 0, 301, 0, 302, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 305, - 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 308, 0, 309, 0, 0, 310, 0, 0, - 311, 0, 0, 312, 0, 0, 313, 0, 0, 314, 0, 0, 315, 0, 0, 0, 316, 0, 0, 317, 0, 318, 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, - 0, 322, 0, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 326, 0, 327, 0, 0, 328, 0, - 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 335, 336, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 353, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 356, 357, 0, 0, 0, 358, 0, 0, 0, 359, 0, 360, 0, 0, 0, 361, 0, 362, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, - 366, 0, 0, 0, 0, 367, 0, 0, 0, 368, 369, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 374, 375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 380, 381, 0, 382, 0, 383, 0, 0, 0, 384, 0, - 0, 0, 0, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 389, 390, 391, 0, 0, 392, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, - 0, 395, 0, 0, 396, 0, 0, 397, 0, 398, 399, 400, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, - 0, 405, 0, 0, 406, 0, 407, 408, 0, 409, 0, 410, 0, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, - 0, 0, 0, 415, 0, 0, 0, 416, 0, 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 423, 424, - 0, 425, 0, 426, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 429, 0, 430, 431, 0, 0, 432, 0, 0, 0, 433, 0, 434, 435, 0, 0, 0, 0, - 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 440, 441, 0, 442, 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 446, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 448, 449, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 452, 0, - 0, 453, 0, 454, 455, 0, 456, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 460, 0, 461, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 467, 468, 0, 469, 0, 470, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, 473, 474, 0, 0, 0, - 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 477, 0, 0, 478, 0, 479, 480, 0, 481, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, - 485, 486, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 489, 0, 0, 490, 0, 491, 492, 0, 493, 0, 494, 0, 0, 0, 495, 0, - 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 500, 501, 0, 502, 0, 503, 0, 0, 0, 504, 0, 505, 0, 0, 506, 0, 0, - 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 513, 0, 0, 514, 0, 515, - 516, 0, 517, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 0, 521, 0, 522, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, - 0, 0, 525, 0, 0, 526, 0, 0, 527, 0, 528, 529, 0, 530, 0, 531, 0, 0, 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, - 0, 0, 536, 0, 537, 538, 539, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 546, 547, - 548, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 552, 0, 0, 553, 0, 0, 554, 0, 555, 556, 557, 0, 0, - 558, 0, 0, 0, 559, 0, 560, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 563, 564, 0, 0, 565, 0, 0, 0, 566, 0, 567, 568, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 571, 0, 0, 572, 0, 573, 574, 0, 575, 0, 576, 0, 0, 0, 577, 0, 578, 0, - 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 581, 582, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 584, 0, 0, - 585, 0, 0, 586, 0, 587, 588, 0, 589, 0, 590, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 594, 0, 595, 596, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 598, 0, 0, 599, 0, 0, 600, 0, 601, 602, 0, 603, 0, 604, 0, - 0, 0, 605, 0, 606, 0, 0, 0, 0, 0, 607, 0, 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 612, - 0, 0, 613, 0, 614, 615, 0, 616, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 621, 0, 0, 622, 0, 623, 624, - 625, 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 630, 0, 0, 631, 0, 632, 633, 634, 0, 0, 635, 0, 0, - 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 639, 0, 0, 640, 0, 641, 642, 643, 0, 0, 644, 0, 0, 0, 645, 0, - 646, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 0, 649, 650, 0, 0, 651, 0, 0, 0, 652, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 655, 0, 0, 656, 0, 0, 657, 0, 0, 658, 0, 659, 660, 0, 661, 0, 662, 0, 0, 0, 663, 0, 0, 0, 664, 0, 0, 665, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 667, 668, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 0, 672, - 0, 673, 674, 0, 675, 0, 676, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, - 681, 682, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 684, 0, 0, 685, 0, 0, 686, 0, 687, 688, 0, 689, 0, 690, 0, 0, 0, 691, 0, - 0, 0, 692, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 695, 696, 0, 0, 0, 0, 0, 0, 0, 0, 697, - 0, 0, 698, 0, 0, 699, 0, 0, 700, 0, 701, 702, 0, 703, 0, 704, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 707, 0, 708, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 712, 0, 0, 713, 0, 714, 715, 0, 716, 0, 717, 0, 0, 0, 718, - 0, 0, 0, 0, 0, 719, 0, 0, 720, 0, 0, 721, 0, 0, 722, 0, 723, 724, 725, 0, 0, 726, 0, 0, 0, 727, 0, 0, 0, 0, 0, 728, - 0, 0, 729, 0, 0, 730, 0, 0, 731, 0, 732, 733, 734, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, - 0, 0, 739, 0, 0, 740, 0, 741, 742, 0, 743, 0, 744, 0, 0, 0, 745, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, 748, 0, 0, 0, 0, - 749, 0, 750, 751, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 753, 0, 0, 754, 0, 0, 755, 0, 756, 757, 0, 758, 0, 759, 0, 0, 0, - 760, 0, 0, 761, 0, 762, 0, 0, 763, 0, 764, 0, 765, 0, 766, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 768, 0, 0, 769, 0, 0, 770, - 0, 771, 772, 0, 773, 0, 774, 0, 0, 0, 775, 0, 776, 0, 777, 0, 778, 0, 779, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 781, 0, 0, - 782, 0, 0, 783, 0, 784, 785, 0, 786, 0, 787, 0, 0, 0, 788, 0, 789, 0, 0, 0, 0, 0, 790, 0, 791, 792, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 793, 0, 0, 794, 0, 0, 795, 0, 0, 796, 0, 797, 798, 0, 799, 0, 800, 0, 0, 0, 801, 0, 0, 0, 0, 0, 802, 0, - 0, 803, 0, 0, 804, 0, 0, 805, 0, 806, 807, 808, 0, 0, 809, 0, 0, 0, 810, 0, 0, 0, 0, 0, 811, 0, 0, 812, 0, 0, 813, 0, - 0, 814, 0, 815, 816, 817, 0, 0, 818, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 821, 0, 0, 822, 0, 0, 823, 0, - 824, 825, 0, 826, 0, 827, 0, 0, 0, 828, 0, 829, 0, 0, 0, 830, 0, 831, 0, 0, 832, 0, 0, 0, 0, 0, 0, 833, 0, 834, 835, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 837, 0, 0, 838, 0, 0, 839, 0, 840, 841, 0, 842, 0, 843, 0, 0, 0, 844, 0, 0, 0, - 0, 845, 0, 846, 847, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, 0, 849, 0, 0, 850, 0, 0, 851, 0, 852, 853, 0, 854, 0, 855, 0, 0, - 0, 856, 0, 857, 0, 0, 0, 0, 0, 0, 0, 858, 0, 859, 860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 862, 0, 0, - 863, 0, 0, 864, 0, 865, 866, 0, 867, 0, 868, 0, 0, 0, 869, 0, 0, 0, 0, 0, 870, 0, 0, 871, 0, 0, 872, 0, 0, 873, 0, 874, - 875, 876, 0, 0, 877, 0, 0, 0, 878, 0, 0, 0, 0, 0, 879, 0, 0, 880, 0, 0, 881, 0, 0, 882, 0, 883, 884, 885, 0, 0, 886, 0, - 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 889, 0, 0, 890, 0, 0, 891, 0, 892, 893, 894, 0, 0, 895, 0, 0, 0, 896, - 0, 0, 897, 0, 0, 898, 0, 0, 0, 899, 0, 0, 0, 0, 900, 0, 901, 902, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, 904, 0, 0, 905, - 0, 0, 906, 0, 907, 908, 0, 909, 0, 910, 0, 0, 0, 911, 912, 0, 0, 913, 0, 914, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 916, 0, - 0, 917, 0, 0, 918, 0, 0, 919, 0, 920, 921, 0, 922, 0, 923, 0, 0, 0, 924, 0, 0, 0, 0, 0, 925, 0, 926, 927, 0, 0, 0, 0, - 0, 0, 0, 0, 928, 0, 0, 929, 0, 0, 930, 0, 0, 931, 0, 932, 933, 0, 934, 0, 935, 0, 0, 0, 936, 0, 937, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 938, 0, 939, 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 941, 0, 0, 942, 0, 0, 943, 0, 0, 944, 0, 945, - 946, 0, 0, 947, 0, 948, 0, 0, 0, 949, 0, 0, 0, 0, 0, 950, 0, 0, 951, 0, 0, 952, 0, 0, 953, 0, 954, 955, 0, 956, 0, 0, - 957, 0, 0, 0, 958, 0, 0, 0, 0, 0, 959, 0, 0, 960, 0, 0, 961, 0, 0, 962, 0, 963, 964, 0, 965, 0, 0, 966, 0, 0, 0, 967, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0111[64] = { + 0x1001000529244201ull, 0x800000010A082028ull, 0x8A22040011020440ull, 0x8A082000200095A4ull, + 0x0000000004000109ull, 0x0020010008004001ull, 0x0904124D425B40A4ull, 0x0401800200000000ull, + 0x0801348020014002ull, 0x0000000224928004ull, 0x02040009A4002920ull, 0x0011249000800540ull, + 0x00A8020149000000ull, 0x0808004019005002ull, 0x0102020004081000ull, 0x4004014D20020410ull, + 0x0084000004492480ull, 0x802A400080008100ull, 0x040000491888100Cull, 0x06080222040000A2ull, + 0xA420881000021048ull, 0xA202000D248A0001ull, 0x149288000500AA40ull, 0x00040100190AAA89ull, + 0x1008002008005201ull, 0xA040200080200292ull, 0x8020032110048010ull, 0x4040080115442000ull, + 0x1240014041A00001ull, 0x842A548449249000ull, 0x22A9124925200008ull, 0x0D2210034A2000A2ull, + 0x0209000155548840ull, 0x28A8A2304022A000ull, 0x45692400D0411621ull, 0x48044E924113A490ull, + 0xD248068880128AD2ull, 0x9115A4900D13428Aull, 0x001A515A4900D000ull, 0x422B49201A115A49ull, + 0x2515A49045692403ull, 0x800D0515A4900D02ull, 0xD24822749208AD24ull, 0x344C42513A490089ull, + 0x24068004515A4900ull, 0x5692403400244569ull, 0xD24822B492003414ull, 0x44E9240227492089ull, + 0x488AD24801A26109ull, 0x4002445692406800ull, 0x8068004445692403ull, 0x8AD24801A028AD24ull, + 0x90089D2482274920ull, 0x15A4900D088515A4ull, 0x2405545692405529ull, 0x4115A49003414569ull, + 0x4920113A49044E92ull, 0x115A490068128A2Bull, 0x2400680A2B49201Aull, 0x4E924113A4904569ull, + 0x9203422489D24804ull, 0x0D045692402A62B4ull, 0xA49003400515A490ull, 0x896924112D248229ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0111[64] = { + 1u, 13u, 21u, 32u, 45u, 49u, 54u, 74u, 78u, 88u, 96u, 107u, 117u, 125u, 134u, 140u, + 151u, 160u, 168u, 179u, 189u, 200u, 213u, 227u, 241u, 249u, 259u, 269u, 279u, 289u, 306u, 322u, + 337u, 351u, 366u, 385u, 405u, 425u, 447u, 463u, 485u, 507u, 525u, 548u, 569u, 585u, 605u, 625u, + 646u, 666u, 681u, 698u, 719u, 739u, 760u, 782u, 803u, 824u, 845u, 863u, 887u, 906u, 928u, 946u, }; void recomp_unit_0111_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0111_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089C0000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0111[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0111[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0111[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089C0000; @@ -1154,7 +1061,6 @@ L_089C0024: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(74))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C040C; } @@ -1164,7 +1070,6 @@ L_089C0038: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C0060; } @@ -1173,7 +1078,6 @@ L_089C0038: L_089C0048: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(9540)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C0060; } @@ -1182,7 +1086,6 @@ L_089C0048: L_089C0054: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C0400; } @@ -1425,7 +1328,6 @@ L_089C02D4: goto L_089C02E4; L_089C02E4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089C0400; } @@ -1448,7 +1350,6 @@ L_089C02FC: L_089C0308: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089C0320; } @@ -1588,7 +1489,17 @@ L_089C0420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C0468: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-272)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -1717,7 +1628,6 @@ L_089C05D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C0614; } @@ -1726,7 +1636,6 @@ L_089C05D4: L_089C0608: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C0650; } @@ -1750,7 +1659,6 @@ L_089C061C: AOT_REGCACHE_SYNC_OUT(); return; L_089C0638: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C064C; } @@ -1761,7 +1669,6 @@ L_089C0640: goto L_089C0644; L_089C0644: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C0650; } @@ -1781,7 +1688,6 @@ L_089C0650: L_089C0658: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C068C; } @@ -1805,7 +1711,6 @@ L_089C0678: AOT_REGCACHE_SYNC_OUT(); return; L_089C0680: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C068C; } @@ -1817,7 +1722,6 @@ L_089C0688: L_089C068C: aot_gpr_4 = (ctx.gpr[19] | ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1588; } @@ -1972,7 +1876,6 @@ L_089C0804: AOT_REGCACHE_SYNC_OUT(); return; L_089C0838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2007,7 +1910,6 @@ L_089C0874: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C0944; } @@ -2024,7 +1926,6 @@ L_089C089C: } L_089C08A8: aot_gpr_31 = (0x089C08B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C08B0u) goto L_089C08B0; AOT_REGCACHE_SYNC_OUT(); return; L_089C08B0: @@ -2078,7 +1979,6 @@ L_089C0908: AOT_REGCACHE_SYNC_OUT(); return; L_089C093C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2168,7 +2068,6 @@ L_089C0A20: AOT_REGCACHE_SYNC_OUT(); return; L_089C0A2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2187,7 +2086,6 @@ L_089C0A34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C0B20; } @@ -2204,7 +2102,6 @@ L_089C0A68: } L_089C0A74: aot_gpr_31 = (0x089C0A7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C0A7Cu) goto L_089C0A7C; AOT_REGCACHE_SYNC_OUT(); return; L_089C0A7C: @@ -2262,7 +2159,6 @@ L_089C0AE4: AOT_REGCACHE_SYNC_OUT(); return; L_089C0B18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2308,7 +2204,6 @@ L_089C0B5C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C0C80; } @@ -2398,7 +2293,6 @@ L_089C0C6C: AOT_REGCACHE_SYNC_OUT(); return; L_089C0C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2426,7 +2320,6 @@ L_089C0CA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C0CD4; } @@ -2442,7 +2335,6 @@ L_089C0CCC: } L_089C0CD4: aot_gpr_31 = (0x089C0CDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C0CDCu) goto L_089C0CDC; AOT_REGCACHE_SYNC_OUT(); return; L_089C0CDC: @@ -2480,7 +2372,6 @@ L_089C0D04: } L_089C0D30: aot_gpr_31 = (0x089C0D38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C0D38u) goto L_089C0D38; AOT_REGCACHE_SYNC_OUT(); return; L_089C0D38: @@ -2502,7 +2393,6 @@ L_089C0D38: L_089C0D60: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C0D98; } @@ -2689,7 +2579,6 @@ L_089C0F74: } L_089C0F80: aot_gpr_31 = (0x089C0F88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C0F88u) goto L_089C0F88; AOT_REGCACHE_SYNC_OUT(); return; L_089C0F88: @@ -2703,7 +2592,6 @@ L_089C0F8C: AOT_REGCACHE_SYNC_OUT(); return; L_089C0F98: aot_gpr_31 = (0x089C0FA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C0FA0u) goto L_089C0FA0; AOT_REGCACHE_SYNC_OUT(); return; L_089C0FA0: @@ -2836,7 +2724,6 @@ L_089C10DC: aot_gpr_4 = (aot_gpr_4 | 0u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2849,9 +2736,7 @@ L_089C1120: aot_gpr_5 = (17327u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C117C; } @@ -2915,7 +2800,6 @@ L_089C11B8: AOT_REGCACHE_SYNC_OUT(); return; L_089C11C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2923,7 +2807,6 @@ L_089C11C4: } L_089C11CC: aot_gpr_31 = (0x089C11D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C11D4u) goto L_089C11D4; AOT_REGCACHE_SYNC_OUT(); return; L_089C11D4: @@ -2945,7 +2828,6 @@ L_089C11D4: L_089C11FC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(11244))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -2987,7 +2869,6 @@ L_089C125C: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_16) < 41 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C13A4; } @@ -3064,7 +2945,6 @@ L_089C1304: AOT_REGCACHE_SYNC_OUT(); return; L_089C1314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1394; } @@ -3154,9 +3034,7 @@ L_089C13E8: aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fpr[20] = ctx.fpr[22] - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C1418; } @@ -3171,7 +3049,6 @@ L_089C1418: aot_gpr_5 = (49568u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16800u << 16u); if (branch_taken) { @@ -3182,9 +3059,7 @@ L_089C1418: L_089C1430: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C154C; } @@ -3233,7 +3108,6 @@ L_089C14BC: aot_gpr_4 = (17184u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17224u << 16u); if (branch_taken) { @@ -3244,9 +3118,7 @@ L_089C14BC: L_089C14D4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C1544; } @@ -3263,7 +3135,6 @@ L_089C14E8: } L_089C14F4: aot_gpr_31 = (0x089C14FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C14FCu) goto L_089C14FC; AOT_REGCACHE_SYNC_OUT(); return; L_089C14FC: @@ -3291,7 +3162,6 @@ L_089C1500: AOT_REGCACHE_SYNC_OUT(); return; L_089C1544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C155C; } @@ -3325,7 +3195,6 @@ L_089C1574: AOT_REGCACHE_SYNC_OUT(); return; L_089C1580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C158C; } @@ -3355,7 +3224,17 @@ L_089C158C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C15C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(9276))); @@ -3377,7 +3256,6 @@ L_089C15E4: AOT_REGCACHE_SYNC_OUT(); return; L_089C15F4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C1700; } @@ -3390,7 +3268,6 @@ L_089C15FC: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C16F0; } @@ -3423,7 +3300,6 @@ L_089C162C: } L_089C1634: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089C16E8; } @@ -3461,9 +3337,7 @@ L_089C1668: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(10828), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2020))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_15)) && aot_fpr_12 == aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C16BC; } @@ -3478,7 +3352,6 @@ L_089C16AC: AOT_REGCACHE_SYNC_OUT(); return; L_089C16BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C16F0; } @@ -3525,7 +3398,6 @@ L_089C16F0: L_089C1700: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10820))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1C54; } @@ -3551,7 +3423,6 @@ L_089C171C: } L_089C1724: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C19FC; } @@ -3559,7 +3430,6 @@ L_089C1724: } L_089C172C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C174C; } @@ -3583,7 +3453,6 @@ L_089C173C: } L_089C1744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1A80; } @@ -3603,7 +3472,6 @@ L_089C174C: L_089C1760: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9257))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1830; } @@ -3622,7 +3490,6 @@ L_089C1770: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10816))); if (branch_taken) { @@ -3669,7 +3536,6 @@ L_089C1800: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(10816), aot_gpr_4); if (branch_taken) { @@ -3684,7 +3550,6 @@ L_089C1824: goto L_089C1830; L_089C1830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1A80; } @@ -3701,7 +3566,6 @@ L_089C1838: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10816))); if (branch_taken) { @@ -3748,7 +3612,6 @@ L_089C18CC: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(10816), aot_gpr_4); if (branch_taken) { @@ -3761,7 +3624,6 @@ L_089C18F0: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C191C; } @@ -3770,7 +3632,6 @@ L_089C18F0: L_089C1904: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9257))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C191C; } @@ -3783,7 +3644,6 @@ L_089C1910: goto L_089C191C; L_089C191C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1A80; } @@ -3799,7 +3659,6 @@ L_089C1924: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10816))); if (branch_taken) { @@ -3846,7 +3705,6 @@ L_089C19B4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(10816), aot_gpr_4); if (branch_taken) { @@ -3866,7 +3724,6 @@ L_089C19D8: AOT_REGCACHE_SYNC_OUT(); return; L_089C19F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1A80; } @@ -3877,7 +3734,6 @@ L_089C19FC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(10816), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(10825))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C1A80; } @@ -3892,9 +3748,7 @@ L_089C1A10: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C1A70; } @@ -3903,7 +3757,6 @@ L_089C1A10: L_089C1A3C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(10824))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1A80; } @@ -3917,9 +3770,7 @@ L_089C1A48: aot_gpr_4 = (aot_gpr_5 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C1A80; } @@ -3945,7 +3796,6 @@ L_089C1A80: L_089C1A94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9257))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1C54; } @@ -3964,7 +3814,6 @@ L_089C1AA4: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10812))); if (branch_taken) { @@ -4019,7 +3868,6 @@ L_089C1B48: aot_gpr_4 = (aot_gpr_4 + static_cast(-28736)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C1C54; } @@ -4032,7 +3880,6 @@ L_089C1B58: AOT_REGCACHE_SYNC_OUT(); return; L_089C1B60: aot_gpr_31 = (0x089C1B68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C1B68u) goto L_089C1B68; AOT_REGCACHE_SYNC_OUT(); return; L_089C1B68: @@ -4117,7 +3964,6 @@ L_089C1C00: AOT_REGCACHE_SYNC_OUT(); return; L_089C1C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1C60; } @@ -4139,7 +3985,17 @@ L_089C1C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C1C78: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); @@ -4177,7 +4033,6 @@ L_089C1CA0: L_089C1CD8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4204))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C1D3C; } @@ -4265,7 +4120,6 @@ L_089C1D88: L_089C1D9C: aot_gpr_5 = (static_cast(aot_gpr_4) < -1 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C1E0C; } @@ -4273,7 +4127,6 @@ L_089C1D9C: } L_089C1DA8: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089C1DD4; } @@ -4281,7 +4134,6 @@ L_089C1DA8: } L_089C1DB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1E0C; } @@ -4298,7 +4150,6 @@ L_089C1DB8: } L_089C1DC4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C1DFC; } @@ -4306,7 +4157,6 @@ L_089C1DC4: } L_089C1DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1E0C; } @@ -4364,7 +4214,6 @@ L_089C1E0C: L_089C1E54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1E68; } @@ -4383,7 +4232,6 @@ L_089C1E68: L_089C1E74: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C203C; } @@ -4392,7 +4240,6 @@ L_089C1E74: L_089C1E80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4206))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C203C; } @@ -4401,7 +4248,6 @@ L_089C1E80: L_089C1E8C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9256))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C203C; } @@ -4410,7 +4256,6 @@ L_089C1E8C: L_089C1E98: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4207))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C203C; } @@ -4433,7 +4278,6 @@ L_089C1EB0: L_089C1EC0: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1EE4; } @@ -4441,7 +4285,6 @@ L_089C1EC0: } L_089C1ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C203C; } @@ -4449,7 +4292,6 @@ L_089C1ECC: } L_089C1ED4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C1ECC; } @@ -4457,7 +4299,6 @@ L_089C1ED4: } L_089C1EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C1F6C; } @@ -4489,7 +4330,6 @@ L_089C1F04: } L_089C1F14: aot_gpr_31 = (0x089C1F1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C1F1Cu) goto L_089C1F1C; AOT_REGCACHE_SYNC_OUT(); return; L_089C1F1C: @@ -4518,7 +4358,6 @@ L_089C1F54: AOT_REGCACHE_SYNC_OUT(); return; L_089C1F64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C203C; } @@ -4533,7 +4372,6 @@ L_089C1F6C: goto L_089C1F78; L_089C1F78: aot_gpr_31 = (0x089C1F80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C1F80u) goto L_089C1F80; AOT_REGCACHE_SYNC_OUT(); return; L_089C1F80: @@ -4577,7 +4415,6 @@ L_089C1FD4: goto L_089C1FE0; L_089C1FE0: aot_gpr_31 = (0x089C1FE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C1FE8u) goto L_089C1FE8; AOT_REGCACHE_SYNC_OUT(); return; L_089C1FE8: @@ -4615,7 +4452,6 @@ L_089C202C: L_089C203C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C20CC; } @@ -4623,12 +4459,10 @@ L_089C203C: } L_089C2048: aot_gpr_31 = (0x089C2050u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2050u) goto L_089C2050; AOT_REGCACHE_SYNC_OUT(); return; L_089C2050: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C20CC; } @@ -4636,7 +4470,6 @@ L_089C2050: } L_089C2058: aot_gpr_31 = (0x089C2060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2060u) goto L_089C2060; AOT_REGCACHE_SYNC_OUT(); return; L_089C2060: @@ -4646,7 +4479,6 @@ L_089C2060: AOT_REGCACHE_SYNC_OUT(); return; L_089C2068: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C20CC; } @@ -4654,7 +4486,6 @@ L_089C2068: } L_089C2070: aot_gpr_31 = (0x089C2078u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2078u) goto L_089C2078; AOT_REGCACHE_SYNC_OUT(); return; L_089C2078: @@ -4701,7 +4532,17 @@ L_089C20CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C20E4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-160)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(132), ctx.gpr[22]); @@ -4724,7 +4565,6 @@ L_089C2134: AOT_REGCACHE_SYNC_OUT(); return; L_089C213C: aot_gpr_31 = (0x089C2144u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2144u) goto L_089C2144; AOT_REGCACHE_SYNC_OUT(); return; L_089C2144: @@ -4755,7 +4595,6 @@ L_089C2178: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-12080), aot_gpr_5); aot_gpr_5 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C2194; } @@ -4811,7 +4650,6 @@ L_089C21DC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C2228; } @@ -4825,7 +4663,6 @@ L_089C21EC: L_089C21F4: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C2228; } @@ -4843,7 +4680,6 @@ L_089C2214: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-12076))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C2228; } @@ -4861,7 +4697,6 @@ L_089C2230: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4873,11 +4708,20 @@ L_089C2240: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4080))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C2258: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); ctx.gpr[30] = (ctx.gpr[28] + static_cast(-12072)); @@ -4892,7 +4736,6 @@ L_089C2258: } L_089C2270: aot_gpr_31 = (0x089C2278u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2278u) goto L_089C2278; AOT_REGCACHE_SYNC_OUT(); return; L_089C2278: @@ -4930,7 +4773,6 @@ L_089C22B4: L_089C22C0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C22D8; } @@ -4987,7 +4829,6 @@ L_089C231C: L_089C2328: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2340; } @@ -5044,7 +4885,6 @@ L_089C2384: L_089C2390: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C23A8; } @@ -5104,7 +4944,6 @@ L_089C23F8: L_089C2404: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C241C; } @@ -5142,7 +4981,6 @@ L_089C243C: L_089C2444: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C26B0; } @@ -5184,7 +5022,6 @@ L_089C248C: } L_089C249C: aot_gpr_31 = (0x089C24A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C24A4u) goto L_089C24A4; AOT_REGCACHE_SYNC_OUT(); return; L_089C24A4: @@ -5220,7 +5057,6 @@ L_089C24D8: L_089C24E4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C24FC; } @@ -5252,7 +5088,6 @@ L_089C250C: AOT_REGCACHE_SYNC_OUT(); return; L_089C251C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C26B0; } @@ -5295,7 +5130,6 @@ L_089C2550: } L_089C2560: aot_gpr_31 = (0x089C2568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2568u) goto L_089C2568; AOT_REGCACHE_SYNC_OUT(); return; L_089C2568: @@ -5331,7 +5165,6 @@ L_089C259C: L_089C25A8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C25C0; } @@ -5395,7 +5228,6 @@ L_089C25FC: } L_089C2630: aot_gpr_31 = (0x089C2638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2638u) goto L_089C2638; AOT_REGCACHE_SYNC_OUT(); return; L_089C2638: @@ -5431,7 +5263,6 @@ L_089C266C: L_089C2678: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2690; } @@ -5463,7 +5294,6 @@ L_089C26A0: AOT_REGCACHE_SYNC_OUT(); return; L_089C26B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5480,7 +5310,6 @@ L_089C26B8: } L_089C26C4: aot_gpr_31 = (0x089C26CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C26CCu) goto L_089C26CC; AOT_REGCACHE_SYNC_OUT(); return; L_089C26CC: @@ -5519,7 +5348,6 @@ L_089C270C: L_089C2718: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2730; } @@ -5562,7 +5390,6 @@ L_089C2750: } L_089C2764: aot_gpr_31 = (0x089C276Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C276Cu) goto L_089C276C; AOT_REGCACHE_SYNC_OUT(); return; L_089C276C: @@ -5598,7 +5425,6 @@ L_089C27A0: L_089C27AC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C27C4; } @@ -5641,7 +5467,6 @@ L_089C27E4: } L_089C27F8: aot_gpr_31 = (0x089C2800u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2800u) goto L_089C2800; AOT_REGCACHE_SYNC_OUT(); return; L_089C2800: @@ -5677,7 +5502,6 @@ L_089C2834: L_089C2840: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2858; } @@ -5734,7 +5558,6 @@ L_089C289C: L_089C28A8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C28C0; } @@ -5772,7 +5595,6 @@ L_089C28E0: L_089C28E8: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C29A0; } @@ -5800,7 +5622,6 @@ L_089C2904: } L_089C2920: aot_gpr_31 = (0x089C2928u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2928u) goto L_089C2928; AOT_REGCACHE_SYNC_OUT(); return; L_089C2928: @@ -5836,7 +5657,6 @@ L_089C295C: L_089C2968: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2980; } @@ -5868,7 +5688,6 @@ L_089C2990: AOT_REGCACHE_SYNC_OUT(); return; L_089C29A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5888,7 +5707,6 @@ L_089C29A8: } L_089C29C0: aot_gpr_31 = (0x089C29C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C29C8u) goto L_089C29C8; AOT_REGCACHE_SYNC_OUT(); return; L_089C29C8: @@ -5927,7 +5745,6 @@ L_089C2A08: L_089C2A14: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2A2C; } @@ -5984,7 +5801,6 @@ L_089C2A70: L_089C2A7C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2A94; } @@ -6041,7 +5857,6 @@ L_089C2AD8: L_089C2AE4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2AFC; } @@ -6101,7 +5916,6 @@ L_089C2B4C: L_089C2B58: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2B70; } @@ -6139,7 +5953,6 @@ L_089C2B90: L_089C2B98: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C2E08; } @@ -6184,7 +5997,6 @@ L_089C2BD8: } L_089C2BE8: aot_gpr_31 = (0x089C2BF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2BF0u) goto L_089C2BF0; AOT_REGCACHE_SYNC_OUT(); return; L_089C2BF0: @@ -6222,7 +6034,6 @@ L_089C2C2C: L_089C2C38: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2C50; } @@ -6285,7 +6096,6 @@ L_089C2C88: } L_089C2CBC: aot_gpr_31 = (0x089C2CC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2CC4u) goto L_089C2CC4; AOT_REGCACHE_SYNC_OUT(); return; L_089C2CC4: @@ -6320,7 +6130,6 @@ L_089C2CF4: L_089C2D00: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2D18; } @@ -6384,7 +6193,6 @@ L_089C2D54: } L_089C2D88: aot_gpr_31 = (0x089C2D90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2D90u) goto L_089C2D90; AOT_REGCACHE_SYNC_OUT(); return; L_089C2D90: @@ -6420,7 +6228,6 @@ L_089C2DC4: L_089C2DD0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2DE8; } @@ -6452,7 +6259,6 @@ L_089C2DF8: AOT_REGCACHE_SYNC_OUT(); return; L_089C2E08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6472,7 +6278,6 @@ L_089C2E10: } L_089C2E28: aot_gpr_31 = (0x089C2E30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C2E30u) goto L_089C2E30; AOT_REGCACHE_SYNC_OUT(); return; L_089C2E30: @@ -6511,7 +6316,6 @@ L_089C2E70: L_089C2E7C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2E94; } @@ -6568,7 +6372,6 @@ L_089C2ED8: L_089C2EE4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2EFC; } @@ -6625,7 +6428,6 @@ L_089C2F40: L_089C2F4C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2F64; } @@ -6685,7 +6487,6 @@ L_089C2FB4: L_089C2FC0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C2FD8; } @@ -6723,7 +6524,6 @@ L_089C2FF8: L_089C3000: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C334C; } @@ -6769,7 +6569,6 @@ L_089C3044: } L_089C3054: aot_gpr_31 = (0x089C305Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C305Cu) goto L_089C305C; AOT_REGCACHE_SYNC_OUT(); return; L_089C305C: @@ -6807,7 +6606,6 @@ L_089C3098: L_089C30A4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C30BC; } @@ -6871,7 +6669,6 @@ L_089C30F8: } L_089C312C: aot_gpr_31 = (0x089C3134u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3134u) goto L_089C3134; AOT_REGCACHE_SYNC_OUT(); return; L_089C3134: @@ -6906,7 +6703,6 @@ L_089C3164: L_089C3170: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3188; } @@ -6970,7 +6766,6 @@ L_089C31C4: } L_089C31F8: aot_gpr_31 = (0x089C3200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3200u) goto L_089C3200; AOT_REGCACHE_SYNC_OUT(); return; L_089C3200: @@ -7006,7 +6801,6 @@ L_089C3234: L_089C3240: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3258; } @@ -7071,7 +6865,6 @@ L_089C3298: } L_089C32CC: aot_gpr_31 = (0x089C32D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C32D4u) goto L_089C32D4; AOT_REGCACHE_SYNC_OUT(); return; L_089C32D4: @@ -7107,7 +6900,6 @@ L_089C3308: L_089C3314: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C332C; } @@ -7139,7 +6931,6 @@ L_089C333C: AOT_REGCACHE_SYNC_OUT(); return; L_089C334C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7161,7 +6952,6 @@ L_089C3354: } L_089C3374: aot_gpr_31 = (0x089C337Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C337Cu) goto L_089C337C; AOT_REGCACHE_SYNC_OUT(); return; L_089C337C: @@ -7199,7 +6989,6 @@ L_089C33B8: L_089C33C4: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C33DC; } @@ -7256,7 +7045,6 @@ L_089C3420: L_089C342C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3444; } @@ -7313,7 +7101,6 @@ L_089C3488: L_089C3494: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C34AC; } @@ -7373,7 +7160,6 @@ L_089C34FC: L_089C3508: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3520; } @@ -7439,7 +7225,6 @@ L_089C356C: } L_089C3580: aot_gpr_31 = (0x089C3588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3588u) goto L_089C3588; AOT_REGCACHE_SYNC_OUT(); return; L_089C3588: @@ -7475,7 +7260,6 @@ L_089C35BC: L_089C35C8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C35E0; } @@ -7534,7 +7318,6 @@ L_089C3620: } L_089C3628: aot_gpr_31 = (0x089C3630u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3630u) goto L_089C3630; AOT_REGCACHE_SYNC_OUT(); return; L_089C3630: @@ -7570,7 +7353,6 @@ L_089C3664: L_089C3670: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3688; } @@ -7602,7 +7384,6 @@ L_089C3698: AOT_REGCACHE_SYNC_OUT(); return; L_089C36A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C3738; } @@ -7618,7 +7399,6 @@ L_089C36B0: } L_089C36B8: aot_gpr_31 = (0x089C36C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C36C0u) goto L_089C36C0; AOT_REGCACHE_SYNC_OUT(); return; L_089C36C0: @@ -7654,7 +7434,6 @@ L_089C36F4: L_089C3700: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3718; } @@ -7686,7 +7465,6 @@ L_089C3728: AOT_REGCACHE_SYNC_OUT(); return; L_089C3738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7706,7 +7484,6 @@ L_089C3740: } L_089C3758: aot_gpr_31 = (0x089C3760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3760u) goto L_089C3760; AOT_REGCACHE_SYNC_OUT(); return; L_089C3760: @@ -7744,7 +7521,6 @@ L_089C379C: L_089C37A8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C37C0; } @@ -7801,7 +7577,6 @@ L_089C3804: L_089C3810: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3828; } @@ -7858,7 +7633,6 @@ L_089C386C: L_089C3878: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3890; } @@ -7918,7 +7692,6 @@ L_089C38E0: L_089C38EC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3904; } @@ -7957,7 +7730,6 @@ L_089C392C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_089C3A84; } @@ -7989,7 +7761,6 @@ L_089C3950: } L_089C396C: aot_gpr_31 = (0x089C3974u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3974u) goto L_089C3974; AOT_REGCACHE_SYNC_OUT(); return; L_089C3974: @@ -8026,7 +7797,6 @@ L_089C39AC: L_089C39B8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C39D0; } @@ -8069,7 +7839,6 @@ L_089C39F0: } L_089C3A04: aot_gpr_31 = (0x089C3A0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3A0Cu) goto L_089C3A0C; AOT_REGCACHE_SYNC_OUT(); return; L_089C3A0C: @@ -8105,7 +7874,6 @@ L_089C3A40: L_089C3A4C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3A64; } @@ -8137,7 +7905,6 @@ L_089C3A74: AOT_REGCACHE_SYNC_OUT(); return; L_089C3A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8159,7 +7926,6 @@ L_089C3A8C: } L_089C3AAC: aot_gpr_31 = (0x089C3AB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3AB4u) goto L_089C3AB4; AOT_REGCACHE_SYNC_OUT(); return; L_089C3AB4: @@ -8198,7 +7964,6 @@ L_089C3AF4: L_089C3B00: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3B18; } @@ -8255,7 +8020,6 @@ L_089C3B5C: L_089C3B68: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3B80; } @@ -8312,7 +8076,6 @@ L_089C3BC4: L_089C3BD0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3BE8; } @@ -8372,7 +8135,6 @@ L_089C3C38: L_089C3C44: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3C5C; } @@ -8411,7 +8173,6 @@ L_089C3C7C: L_089C3C88: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C3D38; } @@ -8437,7 +8198,6 @@ L_089C3CA4: } L_089C3CB8: aot_gpr_31 = (0x089C3CC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3CC0u) goto L_089C3CC0; AOT_REGCACHE_SYNC_OUT(); return; L_089C3CC0: @@ -8472,7 +8232,6 @@ L_089C3CF0: L_089C3CFC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3D14; } @@ -8514,7 +8273,6 @@ L_089C3D38: goto L_089C3D44; L_089C3D44: aot_gpr_31 = (0x089C3D4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3D4Cu) goto L_089C3D4C; AOT_REGCACHE_SYNC_OUT(); return; L_089C3D4C: @@ -8551,7 +8309,6 @@ L_089C3D84: L_089C3D90: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3DA8; } @@ -8595,7 +8352,6 @@ L_089C3DC8: } L_089C3DE0: aot_gpr_31 = (0x089C3DE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3DE8u) goto L_089C3DE8; AOT_REGCACHE_SYNC_OUT(); return; L_089C3DE8: @@ -8631,7 +8387,6 @@ L_089C3E1C: L_089C3E28: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C3E40; } @@ -8663,7 +8418,6 @@ L_089C3E50: AOT_REGCACHE_SYNC_OUT(); return; L_089C3E60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 155u, 0x089C481Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8689,7 +8443,6 @@ L_089C3E68: } L_089C3E98: aot_gpr_31 = (0x089C3EA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C3EA0u) goto L_089C3EA0; AOT_REGCACHE_SYNC_OUT(); return; L_089C3EA0: @@ -8727,7 +8480,6 @@ L_089C3EDC: L_089C3EE8: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089C3F00; } @@ -8785,7 +8537,6 @@ L_089C3F48: L_089C3F54: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089C3F6C; } @@ -8843,7 +8594,6 @@ L_089C3FB4: L_089C3FC0: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089C3FD8; } diff --git a/profiles/vcs/generated/generated_unit_0112.cpp b/profiles/vcs/generated/generated_unit_0112.cpp index f1dcd72..4fae509 100644 --- a/profiles/vcs/generated/generated_unit_0112.cpp +++ b/profiles/vcs/generated/generated_unit_0112.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0112[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 6, 7, 8, 0, 0, 9, 0, 0, 0, 10, 0, 0, 11, - 0, 0, 12, 0, 0, 0, 13, 0, 0, 14, 15, 0, 0, 16, 0, 0, 0, 17, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 21, 0, 0, 22, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 38, 39, 0, - 40, 0, 41, 0, 0, 0, 42, 0, 43, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 46, 0, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 50, 0, 0, 51, 0, 0, 52, 0, 53, 54, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 58, 0, 0, 59, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 65, 0, 0, 66, 0, 67, 68, - 0, 69, 0, 70, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 76, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 81, 82, 0, 83, 0, 84, 0, 0, 0, 85, 0, 86, 0, - 87, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 91, 0, 0, 92, 0, 0, 0, 93, 0, 94, 95, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, 99, 0, 100, 101, 0, 102, 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 106, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 109, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 112, 0, 0, 113, - 0, 114, 115, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 121, - 122, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 0, 125, 0, 0, 126, 0, 127, 128, 0, 129, 0, 130, 0, 0, 0, 131, 0, 0, - 132, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 137, 0, 0, 138, 0, 139, 140, 0, 141, 0, 142, 0, - 0, 0, 143, 0, 0, 0, 0, 144, 0, 145, 146, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 0, 149, 0, 0, 150, 0, 151, 152, - 0, 153, 0, 154, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, 159, 0, 160, 0, 0, 161, 0, 162, 0, 0, 0, 163, 0, 0, 164, 0, 0, 165, 0, 0, 166, - 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, 0, 0, - 0, 0, 176, 0, 0, 177, 0, 0, 0, 178, 0, 0, 179, 0, 0, 180, 0, 181, 182, 183, 0, 0, 184, 0, 0, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 0, 0, - 0, 0, 189, 0, 190, 0, 0, 0, 191, 192, 0, 193, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 198, 0, 199, 0, 0, 200, 0, 0, 201, 0, 0, 202, 0, 203, 0, 204, 0, 205, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 0, 207, 0, 208, 0, 209, 0, 0, 210, 211, 0, 212, 0, 0, 213, 0, 214, 0, 215, 0, 216, 217, 0, 218, 0, 0, - 219, 0, 220, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, - 0, 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 231, 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, - 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 241, 0, 0, 242, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 247, 0, 248, 0, - 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, - 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 0, 0, - 259, 0, 0, 0, 0, 260, 0, 0, 0, 261, 262, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, - 0, 0, 266, 0, 267, 268, 0, 269, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 275, 0, 0, 0, 0, 276, 277, - 0, 278, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 285, 0, 0, 286, 0, - 0, 0, 0, 287, 0, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 294, 0, 0, 295, 0, 296, 297, 0, - 298, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 304, 0, 305, 0, 306, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 309, 0, 310, 0, 311, 312, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 318, 0, 319, 0, - 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 322, 0, 323, 324, 0, 325, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, - 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, 342, 0, 0, 343, 0, - 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, - 352, 0, 0, 353, 0, 0, 0, 354, 0, 355, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 360, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 363, 0, 364, 0, 365, 0, 0, - 0, 0, 366, 0, 0, 367, 0, 0, 368, 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 374, 0, 375, 0, 0, - 376, 0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 381, 382, 0, 383, 0, 0, 384, 0, 385, - 0, 386, 0, 387, 388, 0, 389, 0, 0, 390, 0, 391, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, - 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 404, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 408, 0, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, - 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, - 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 422, 0, 0, 0, 423, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 430, 431, 0, 0, 0, 0, 0, 0, 432, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, - 0, 0, 0, 0, 451, 0, 452, 0, 453, 0, 454, 0, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, 0, 458, 0, 459, 0, 460, 0, 461, 0, - 0, 0, 462, 0, 463, 0, 464, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 468, 0, 0, 0, - 0, 469, 0, 0, 470, 0, 0, 471, 0, 472, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 477, 0, 0, 478, - 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, - 483, 0, 484, 485, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 488, 0, 0, 0, 489, 0, 490, 0, 491, 0, 0, 492, 0, - 493, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 0, 497, 0, 498, 0, 0, 499, 0, 500, 0, 0, 0, - 0, 0, 501, 502, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, - 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, - 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 516, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 519, - 0, 0, 0, 520, 0, 521, 0, 522, 0, 0, 523, 0, 524, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 527, 0, 0, 0, - 0, 528, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, 532, 0, 0, 0, 0, 533, 534, 0, 0, 0, 0, 535, 0, - 536, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 541, 0, 542, 0, 0, 0, - 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, - 0, 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 0, 0, - 560, 0, 561, 0, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, 0, 565, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 568, 0, 0, 0, - 0, 569, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, - 585, 586, 0, 587, 0, 0, 0, 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 592, 0, 0, 0, 0, 593, 0, 0, - 0, 0, 594, 0, 0, 595, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 600, 0, 0, 0, - 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 0, 0, 0, - 608, 0, 609, 0, 0, 0, 610, 0, 611, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 614, 0, 615, 0, 616, 0, 0, 0, 617, 0, 618, 0, 0, - 0, 0, 619, 0, 620, 0, 0, 0, 0, 621, 0, 622, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 625, 0, 626, 0, 0, 0, 0, 627, 0, 0, - 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 630, 0, 631, 0, - 632, 0, 633, 0, 0, 634, 0, 0, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, - 0, 647, 0, 648, 0, 0, 0, 649, 0, 0, 650, 0, 651, 0, 0, 0, 652, 0, 653, 654, 0, 0, 655, 0, 0, 0, 0, 0, 656, 0, 657, 0, - 658, 0, 659, 0, 660, 0, 0, 661, 0, 662, 0, 0, 663, 0, 664, 0, 665, 0, 0, 666, 0, 667, 0, 0, 668, 669, 0, 0, 0, 670, 0, 671, - 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, 0, 676, 0, 0, 0, 677, 0, 678, 0, 679, 0, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 683, 0, 684, 0, 685, 0, 0, 686, 0, 0, 0, 687, 0, 688, 689, 690, 0, 0, 0, 691, - 0, 0, 692, 0, 693, 0, 0, 0, 694, 0, 0, 695, 0, 696, 697, 0, 698, 0, 699, 0, 0, 700, 0, 701, 702, 0, 703, 0, 704, 0, 0, 705, - 0, 706, 0, 0, 707, 0, 0, 0, 0, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, - 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 0, 720, 0, 0, 721, 0, 0, 0, 722, 0, 723, 0, 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, - 0, 728, 0, 729, 0, 730, 0, 0, 731, 0, 732, 0, 733, 0, 0, 0, 0, 734, 0, 735, 0, 0, 736, 737, 0, 738, 0, 0, 0, 0, 739, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 744, 0, 745, 0, 0, 746, 0, - 0, 0, 0, 747, 0, 748, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 751, 752, 0, 0, 753, 0, 754, 0, 755, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, - 0, 0, 757, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 760, 0, 761, 0, 762, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, 0, 766, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 768, 0, 769, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 771, - 0, 0, 0, 0, 772, 0, 773, 0, 774, 0, 0, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, - 0, 0, 778, 0, 0, 0, 779, 0, 780, 0, 781, 0, 0, 0, 782, 0, 783, 0, 0, 0, 784, 0, 0, 785, 0, 0, 0, 0, 0, 786, 0, 787, - 788, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 792, 0, 793, - 0, 0, 0, 0, 0, 0, 0, 794, 0, 795, 0, 796, 0, 0, 797, 0, 798, 0, 799, 0, 800, 0, 801, 0, 0, 0, 802, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 804, 0, 805, 0, 806, 0, 0, 807, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 811, 0, 0, 812, 0, 813, 0, 0, 0, 0, 814, 0, 815, - 0, 0, 0, 0, 816, 0, 817, 818, 0, 0, 819, 0, 0, 820, 0, 821, 0, 0, 0, 0, 0, 822, 0, 0, 823, 0, 0, 824, 0, 0, 0, 0, - 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 0, 829, 0, 0, 830, 0, 0, - 0, 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 834, 0, 835, 0, 0, 836, 0, 837, 0, - 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 841, 0, 842, 0, - 0, 0, 0, 843, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 846, 0, 0, 847, 0, 0, 848, 0, 0, 0, 0, 0, 0, 0, 849, 0, 0, 0, 0, 0, 850, 0, 851, 0, 0, 0, 852, 0, 853, 0, 0, 0, - 0, 854, 0, 855, 856, 0, 0, 857, 0, 858, 0, 859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 860, 0, 861, 0, 0, 0, 0, - 862, 0, 863, 0, 0, 864, 0, 865, 0, 0, 0, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 868, 0, 0, 0, 869, 0, 870, 0, 0, 0, 0, 871, 0, 872, 0, 0, 0, 0, 873, 0, 874, 875, 0, 876, 0, 877, 0, - 878, 0, 879, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 0, 882, 0, 883, 0, 0, 884, 0, 0, 885, 0, - 886, 0, 887, 0, 888, 889, 0, 890, 0, 0, 891, 0, 892, 0, 0, 0, 0, 0, 0, 893, 0, 894, 0, 0, 0, 0, 895, 0, 0, 0, 896, 0, - 0, 0, 897, 0, 898, 0, 899, 900, 0, 0, 0, 901, 0, 0, 902, 0, 903, 0, 904, 0, 905, 0, 0, 0, 906, 0, 0, 0, 0, 0, 907, 0, - 0, 0, 0, 0, 908, 0, 0, 0, 909, 0, 0, 910, 0, 0, 911, 0, 0, 912, 0, 0, 913, 0, 0, 914, 0, 915, 0, 916, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 0, 0, 920, 0, 0, 921, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0112[64] = { + 0x801A2644913A4901ull, 0x692406800488AD24ull, 0x0908AD2480688945ull, 0xD000488AD2480D00ull, + 0x01A26109515A4900ull, 0x92406800488AD248ull, 0x22B49201A0010456ull, 0xD248068456924015ull, + 0x92452C800040008Aull, 0x1040504000400122ull, 0x10800080024E9224ull, 0x1549284804004B14ull, + 0x2020800D2D52CAA0ull, 0x082002A808200288ull, 0x5480820024402828ull, 0x0010000810208004ull, + 0x8020162114001100ull, 0x49114242C24452B4ull, 0x6948000024000288ull, 0x0014548004009005ull, + 0x00AD200451100AB5ull, 0x8828800220100224ull, 0x5044A8044A800A00ull, 0x2A40200045024289ull, + 0xA58410452A805524ull, 0x0048104041001A5Aull, 0x0404100091020208ull, 0x2080084204A00902ull, + 0x8194082000491520ull, 0x0200000000080000ull, 0x0002002000002000ull, 0x1001000000200100ull, + 0x1000001001000000ull, 0x0000080080000100ull, 0x5505455040020020ull, 0x9211129211080454ull, + 0x4A88480D04040012ull, 0x1428850C14A11003ull, 0x8480D04040010010ull, 0x430A200A110034A8ull, + 0x0801001014488021ull, 0x1090942515555554ull, 0x2128050B55555556ull, 0x0A52080818014424ull, + 0x21450A1428A85145ull, 0xAAAAAA2554000001ull, 0xA3295295504D148Aull, 0x8E8954400551480Aull, + 0x2015541295A56914ull, 0x42CA152AAA144955ull, 0x4A80400000040100ull, 0x10153400000000A8ull, + 0x28A0000005404204ull, 0x40010950880A0400ull, 0xA0202005A0914544ull, 0x0065500004554A80ull, + 0x0920A4D0A1484002ull, 0x5284100824210402ull, 0x5000000004008020ull, 0x1450404900010208ull, + 0x040040A50A000A9Aull, 0x4940408556850A20ull, 0x411548D4442814B5ull, 0x480410400A924910ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0112[64] = { + 1u, 21u, 40u, 60u, 77u, 96u, 114u, 132u, 153u, 167u, 176u, 189u, 206u, 225u, 236u, 249u, + 255u, 266u, 287u, 298u, 309u, 327u, 338u, 352u, 366u, 386u, 399u, 408u, 419u, 433u, 435u, 438u, + 442u, 445u, 448u, 462u, 479u, 493u, 510u, 520u, 536u, 546u, 569u, 594u, 608u, 628u, 647u, 672u, + 692u, 715u, 740u, 747u, 757u, 767u, 778u, 794u, 809u, 825u, 838u, 843u, 854u, 868u, 886u, 908u, }; void recomp_unit_0112_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0112_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089C4000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0112[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0112[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0112[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089C4000; @@ -1121,7 +1028,6 @@ L_089C402C: L_089C4038: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C4050; } @@ -1203,7 +1109,6 @@ L_089C40B4: } L_089C40C4: aot_gpr_31 = (0x089C40CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C40CCu) goto L_089C40CC; AOT_REGCACHE_SYNC_OUT(); return; L_089C40CC: @@ -1241,7 +1146,6 @@ L_089C4108: L_089C4114: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C412C; } @@ -1305,7 +1209,6 @@ L_089C4168: } L_089C419C: aot_gpr_31 = (0x089C41A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C41A4u) goto L_089C41A4; AOT_REGCACHE_SYNC_OUT(); return; L_089C41A4: @@ -1340,7 +1243,6 @@ L_089C41D4: L_089C41E0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C41F8; } @@ -1399,7 +1301,6 @@ L_089C423C: } L_089C424C: aot_gpr_31 = (0x089C4254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C4254u) goto L_089C4254; AOT_REGCACHE_SYNC_OUT(); return; L_089C4254: @@ -1433,7 +1334,6 @@ L_089C4288: L_089C4294: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C42AC; } @@ -1498,7 +1398,6 @@ L_089C42EC: } L_089C4320: aot_gpr_31 = (0x089C4328u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C4328u) goto L_089C4328; AOT_REGCACHE_SYNC_OUT(); return; L_089C4328: @@ -1531,7 +1430,6 @@ L_089C4358: L_089C4364: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089C437C; } @@ -1596,7 +1494,6 @@ L_089C43B8: } L_089C43F0: aot_gpr_31 = (0x089C43F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C43F8u) goto L_089C43F8; AOT_REGCACHE_SYNC_OUT(); return; L_089C43F8: @@ -1632,7 +1529,6 @@ L_089C442C: L_089C4438: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089C4450; } @@ -1664,7 +1560,6 @@ L_089C4460: AOT_REGCACHE_SYNC_OUT(); return; L_089C4470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C481C; } @@ -1678,7 +1573,6 @@ L_089C4478: L_089C4480: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C481C; } @@ -1724,7 +1618,6 @@ L_089C44C4: } L_089C44D4: aot_gpr_31 = (0x089C44DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C44DCu) goto L_089C44DC; AOT_REGCACHE_SYNC_OUT(); return; L_089C44DC: @@ -1762,7 +1655,6 @@ L_089C4518: L_089C4524: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089C453C; } @@ -1826,7 +1718,6 @@ L_089C4578: } L_089C45AC: aot_gpr_31 = (0x089C45B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C45B4u) goto L_089C45B4; AOT_REGCACHE_SYNC_OUT(); return; L_089C45B4: @@ -1861,7 +1752,6 @@ L_089C45E4: L_089C45F0: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089C4608; } @@ -1921,7 +1811,6 @@ L_089C4640: } L_089C4674: aot_gpr_31 = (0x089C467Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C467Cu) goto L_089C467C; AOT_REGCACHE_SYNC_OUT(); return; L_089C467C: @@ -1957,7 +1846,6 @@ L_089C46B0: L_089C46BC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089C46D4; } @@ -1996,7 +1884,6 @@ L_089C46F4: goto L_089C4700; L_089C4700: aot_gpr_31 = (0x089C4708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C4708u) goto L_089C4708; AOT_REGCACHE_SYNC_OUT(); return; L_089C4708: @@ -2034,7 +1921,6 @@ L_089C4744: L_089C4750: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C4768; } @@ -2077,7 +1963,6 @@ L_089C4788: } L_089C479C: aot_gpr_31 = (0x089C47A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C47A4u) goto L_089C47A4; AOT_REGCACHE_SYNC_OUT(); return; L_089C47A4: @@ -2113,7 +1998,6 @@ L_089C47D8: L_089C47E4: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089C47FC; } @@ -2165,7 +2049,17 @@ L_089C481C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C4858: aot_gpr_29 = (aot_gpr_29 + static_cast(-496)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(472), ctx.gpr[18]); @@ -2188,7 +2082,6 @@ L_089C4858: L_089C489C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C48AC; } @@ -2204,7 +2097,6 @@ L_089C48AC: L_089C48B4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(142))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089C48C8; } @@ -2227,7 +2119,6 @@ L_089C48C8: L_089C48D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(332))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089C4B38; } @@ -2236,7 +2127,6 @@ L_089C48D8: L_089C48E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(56))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089C4B24; } @@ -2245,7 +2135,6 @@ L_089C48E4: L_089C48F0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(64))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C4B24; } @@ -2351,7 +2240,6 @@ L_089C49F0: L_089C4A08: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(4)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C4B20; } @@ -2376,7 +2264,6 @@ L_089C4A24: L_089C4A30: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089C4A48; } @@ -2476,7 +2363,6 @@ L_089C4B20: goto L_089C4B24; L_089C4B24: { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089C4B38; } @@ -2506,7 +2392,17 @@ L_089C4B38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C4B68: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9269))); @@ -2522,7 +2418,6 @@ L_089C4B68: L_089C4B8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10832))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C4BB4; } @@ -2541,7 +2436,6 @@ L_089C4B98: } L_089C4BAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C4F70; } @@ -2559,7 +2453,6 @@ L_089C4BB4: L_089C4BC0: aot_gpr_6 = (aot_gpr_5 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C4C38; } @@ -2592,7 +2485,6 @@ L_089C4BE0: } L_089C4BE8: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089C4C2C; } @@ -2615,7 +2507,6 @@ L_089C4BF0: } L_089C4C14: { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089C4C24; } @@ -2627,7 +2518,6 @@ L_089C4C1C: goto L_089C4C24; L_089C4C24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C4C38; } @@ -2643,7 +2533,6 @@ L_089C4C38: goto L_089C4C3C; L_089C4C3C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C4F70; } @@ -2702,7 +2591,6 @@ L_089C4C74: } L_089C4C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C4E68; } @@ -2721,7 +2609,6 @@ L_089C4C8C: aot_fpr_12 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10844))); if (branch_taken) { @@ -2755,7 +2642,6 @@ L_089C4CF4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(10844), aot_gpr_4); if (branch_taken) { @@ -2771,7 +2657,6 @@ L_089C4D0C: goto L_089C4D1C; L_089C4D1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C4E68; } @@ -2787,7 +2672,6 @@ L_089C4D24: aot_fpr_12 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10844))); if (branch_taken) { @@ -2831,7 +2715,6 @@ L_089C4D94: goto L_089C4D9C; L_089C4D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C4E68; } @@ -2847,7 +2730,6 @@ L_089C4DA4: aot_fpr_12 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10844))); if (branch_taken) { @@ -2895,7 +2777,6 @@ L_089C4E14: goto L_089C4E2C; L_089C4E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C4E68; } @@ -2908,9 +2789,7 @@ L_089C4E34: aot_gpr_4 = (aot_gpr_5 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C4E68; } @@ -2941,7 +2820,6 @@ L_089C4E74: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(10840))); if (branch_taken) { @@ -2979,7 +2857,6 @@ L_089C4EDC: AOT_REGCACHE_SYNC_OUT(); return; L_089C4EE8: aot_gpr_31 = (0x089C4EF0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C4EF0u) goto L_089C4EF0; AOT_REGCACHE_SYNC_OUT(); return; L_089C4EF0: @@ -3043,7 +2920,17 @@ L_089C4F70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C4F8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9262))); @@ -3076,7 +2963,6 @@ L_089C4FD0: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089C5070; } @@ -3111,7 +2997,6 @@ L_089C5030: } L_089C5068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3133,9 +3018,7 @@ L_089C5080: goto L_089C5094; L_089C5094: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C50A8; } @@ -3146,7 +3029,6 @@ L_089C50A4: goto L_089C50A8; L_089C50A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3188,7 +3070,6 @@ L_089C50FC: } L_089C5108: aot_gpr_31 = (0x089C5110u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C5110u) goto L_089C5110; AOT_REGCACHE_SYNC_OUT(); return; L_089C5110: @@ -3196,11 +3077,9 @@ L_089C5110: goto L_089C5114; L_089C5114: aot_gpr_31 = (0x089C511Cu); - // nop goto L_089C6DBC; L_089C511C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3217,7 +3096,6 @@ L_089C5124: } L_089C5130: { const bool branch_taken = ctx.gpr[20] == aot_gpr_5; - // nop if (branch_taken) { goto L_089C52E0; } @@ -3295,7 +3173,6 @@ L_089C51A4: goto L_089C51B8; L_089C51B8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C52D8; } @@ -3326,7 +3203,6 @@ L_089C51E0: L_089C51EC: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089C52D8; } @@ -3413,7 +3289,6 @@ L_089C52CC: AOT_REGCACHE_SYNC_OUT(); return; L_089C52D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C539C; } @@ -3422,7 +3297,6 @@ L_089C52D8: L_089C52E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C52F8; } @@ -3430,7 +3304,6 @@ L_089C52E0: } L_089C52EC: aot_gpr_31 = (0x089C52F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C52F4u) goto L_089C52F4; AOT_REGCACHE_SYNC_OUT(); return; L_089C52F4: @@ -3438,7 +3311,6 @@ L_089C52F4: goto L_089C52F8; L_089C52F8: aot_gpr_31 = (0x089C5300u); - // nop goto L_089C6DBC; L_089C5300: { const bool branch_taken = aot_gpr_2 == 0u; @@ -3501,7 +3373,6 @@ L_089C5368: L_089C539C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(9274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C5408; } @@ -3514,7 +3385,6 @@ L_089C53A8: AOT_REGCACHE_SYNC_OUT(); return; L_089C53B0: aot_gpr_31 = (0x089C53B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C53B8u) goto L_089C53B8; AOT_REGCACHE_SYNC_OUT(); return; L_089C53B8: @@ -3555,7 +3425,6 @@ L_089C5400: } L_089C5408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3566,7 +3435,6 @@ L_089C5410: goto L_089C5414; L_089C5414: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C5778; } @@ -3574,12 +3442,10 @@ L_089C5414: } L_089C541C: aot_gpr_31 = (0x089C5424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C5424u) goto L_089C5424; AOT_REGCACHE_SYNC_OUT(); return; L_089C5424: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3594,7 +3460,6 @@ L_089C542C: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3604,7 +3469,6 @@ L_089C5450: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 36u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C5778; } @@ -3614,7 +3478,6 @@ L_089C5460: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C5778; } @@ -3629,7 +3492,6 @@ L_089C5478: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(104))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3652,7 +3514,6 @@ L_089C5488: L_089C54B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C54CC; } @@ -3660,7 +3521,6 @@ L_089C54B4: } L_089C54C0: aot_gpr_31 = (0x089C54C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C54C8u) goto L_089C54C8; AOT_REGCACHE_SYNC_OUT(); return; L_089C54C8: @@ -3668,11 +3528,9 @@ L_089C54C8: goto L_089C54CC; L_089C54CC: aot_gpr_31 = (0x089C54D4u); - // nop goto L_089C6DBC; L_089C54D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3698,7 +3556,6 @@ L_089C54DC: L_089C5508: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 1000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C5724; } @@ -3775,7 +3632,6 @@ L_089C55BC: AOT_REGCACHE_SYNC_OUT(); return; L_089C55CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5624; } @@ -3923,7 +3779,6 @@ L_089C570C: AOT_REGCACHE_SYNC_OUT(); return; L_089C571C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5778; } @@ -3987,7 +3842,17 @@ L_089C5778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C57B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9268))); @@ -4003,7 +3868,6 @@ L_089C57B4: L_089C57D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C57F4; } @@ -4011,7 +3875,6 @@ L_089C57D8: } L_089C57E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5CE0; } @@ -4019,7 +3882,6 @@ L_089C57E4: } L_089C57EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5CE0; } @@ -4039,7 +3901,6 @@ L_089C57F4: L_089C5808: aot_gpr_6 = (aot_gpr_5 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C58DC; } @@ -4072,7 +3933,6 @@ L_089C5828: } L_089C5830: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089C58C8; } @@ -4095,7 +3955,6 @@ L_089C5838: } L_089C585C: { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089C586C; } @@ -4107,7 +3966,6 @@ L_089C5864: goto L_089C586C; L_089C586C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C58DC; } @@ -4116,7 +3974,6 @@ L_089C586C: L_089C5874: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089C5888; } @@ -4231,7 +4088,6 @@ L_089C5918: } L_089C5924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5B5C; } @@ -4250,7 +4106,6 @@ L_089C5930: aot_fpr_13 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(9248))); if (branch_taken) { @@ -4284,7 +4139,6 @@ L_089C5998: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(9248), aot_gpr_4); if (branch_taken) { @@ -4321,7 +4175,6 @@ L_089C59D8: aot_fpr_14 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(0u); if (branch_taken) { @@ -4356,7 +4209,6 @@ L_089C5A44: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(9248), aot_gpr_4); if (branch_taken) { @@ -4390,7 +4242,6 @@ L_089C5A7C: aot_fpr_14 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(0u); if (branch_taken) { @@ -4425,7 +4276,6 @@ L_089C5AE8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(9248), aot_gpr_4); if (branch_taken) { @@ -4459,7 +4309,6 @@ L_089C5B2C: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(9248), aot_gpr_5); if (branch_taken) { @@ -4485,9 +4334,7 @@ L_089C5B68: aot_gpr_4 = (aot_gpr_4 + static_cast(17968)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C5CD0; } @@ -4496,9 +4343,7 @@ L_089C5B68: L_089C5B84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C5CD0; } @@ -4507,7 +4352,6 @@ L_089C5B84: L_089C5B98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -4525,7 +4369,6 @@ L_089C5BAC: aot_fpr_15 = std::bit_cast(aot_gpr_6); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(9244))); if (branch_taken) { @@ -4563,7 +4406,6 @@ L_089C5C14: AOT_REGCACHE_SYNC_OUT(); return; L_089C5C20: aot_gpr_31 = (0x089C5C28u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C5C28u) goto L_089C5C28; AOT_REGCACHE_SYNC_OUT(); return; L_089C5C28: @@ -4581,7 +4423,6 @@ L_089C5C30: L_089C5C40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7720))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C5CE0; } @@ -4590,7 +4431,6 @@ L_089C5C40: L_089C5C4C: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C5CE0; } @@ -4635,7 +4475,6 @@ L_089C5CAC: AOT_REGCACHE_SYNC_OUT(); return; L_089C5CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C5CE0; } @@ -4667,7 +4506,17 @@ L_089C5CE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C5CFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[16]); @@ -5072,7 +4921,17 @@ L_089C6244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6278: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); @@ -5091,7 +4950,6 @@ L_089C6290: goto L_089C6298; L_089C6298: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C62A8; } @@ -5121,7 +4979,17 @@ L_089C62C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C62C8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); @@ -5140,7 +5008,6 @@ L_089C62E0: goto L_089C62E8; L_089C62E8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C62F8; } @@ -5170,7 +5037,17 @@ L_089C6310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6318: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -5179,7 +5056,17 @@ L_089C6318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6328: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5200,12 +5087,21 @@ L_089C634C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6360: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C63A4; } @@ -5230,7 +5126,6 @@ L_089C6384: L_089C6390: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C63A4; } @@ -5238,7 +5133,6 @@ L_089C6390: } L_089C639C: aot_gpr_31 = (0x089C63A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C63A4u) goto L_089C63A4; AOT_REGCACHE_SYNC_OUT(); return; L_089C63A4: @@ -5248,12 +5142,21 @@ L_089C63A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C63B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C6404; } @@ -5288,7 +5191,6 @@ L_089C63E4: L_089C63F0: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C6404; } @@ -5296,7 +5198,6 @@ L_089C63F0: } L_089C63FC: aot_gpr_31 = (0x089C6404u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C6404u) goto L_089C6404; AOT_REGCACHE_SYNC_OUT(); return; L_089C6404: @@ -5306,7 +5207,17 @@ L_089C6404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6410: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -5343,7 +5254,6 @@ L_089C6468: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C648C; } @@ -5365,7 +5275,6 @@ L_089C648C: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C65BC; } @@ -5413,7 +5322,6 @@ L_089C64E4: L_089C64EC: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089C6504; } @@ -5500,7 +5408,6 @@ L_089C658C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C65A8; } @@ -5508,7 +5415,6 @@ L_089C658C: } L_089C65A0: aot_gpr_31 = (0x089C65A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C65A8u) goto L_089C65A8; AOT_REGCACHE_SYNC_OUT(); return; L_089C65A8: @@ -5581,7 +5487,17 @@ L_089C6610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6640: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -5618,7 +5534,6 @@ L_089C6698: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C66BC; } @@ -5686,7 +5601,6 @@ L_089C6714: L_089C671C: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089C6734; } @@ -5785,7 +5699,6 @@ L_089C67E4: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C6800; } @@ -5793,7 +5706,6 @@ L_089C67E4: } L_089C67F8: aot_gpr_31 = (0x089C6800u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C6800u) goto L_089C6800; AOT_REGCACHE_SYNC_OUT(); return; L_089C6800: @@ -5878,7 +5790,17 @@ L_089C6890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C68C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); ctx.gpr[7] = (aot_gpr_5 + static_cast(-1)); @@ -5902,11 +5824,20 @@ L_089C68EC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-4040))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6908: { const bool branch_taken = 0u == 0u; ctx.gpr[17] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7701))); @@ -5925,7 +5856,6 @@ L_089C6910: } L_089C6918: aot_gpr_31 = (0x089C6920u); - // nop goto L_089C6D68; L_089C6920: { const bool branch_taken = 0u == 0u; @@ -5937,7 +5867,6 @@ L_089C6920: } L_089C6928: aot_gpr_31 = (0x089C6930u); - // nop goto L_089C6D78; L_089C6930: { const bool branch_taken = 0u == 0u; @@ -5949,7 +5878,6 @@ L_089C6930: } L_089C6938: aot_gpr_31 = (0x089C6940u); - // nop goto L_089C6D88; L_089C6940: { const bool branch_taken = 0u == 0u; @@ -5961,7 +5889,6 @@ L_089C6940: } L_089C6948: aot_gpr_31 = (0x089C6950u); - // nop goto L_089C6DBC; L_089C6950: { const bool branch_taken = 0u == 0u; @@ -5973,7 +5900,6 @@ L_089C6950: } L_089C6958: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C6A20; } @@ -5998,7 +5924,6 @@ L_089C6970: goto L_089C6980; L_089C6980: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089C69A8; } @@ -6007,7 +5932,6 @@ L_089C6980: L_089C6988: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_6; - // nop if (branch_taken) { goto L_089C69A8; } @@ -6079,7 +6003,6 @@ L_089C6A04: goto L_089C6A08; L_089C6A08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C6A18; } @@ -6087,7 +6010,6 @@ L_089C6A08: } L_089C6A10: aot_gpr_31 = (0x089C6A18u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C6A18u) goto L_089C6A18; AOT_REGCACHE_SYNC_OUT(); return; L_089C6A18: @@ -6100,7 +6022,6 @@ L_089C6A18: } L_089C6A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6A84; } @@ -6108,7 +6029,6 @@ L_089C6A20: } L_089C6A28: aot_gpr_31 = (0x089C6A30u); - // nop goto L_089C6E0C; L_089C6A30: { const bool branch_taken = 0u == 0u; @@ -6120,7 +6040,6 @@ L_089C6A30: } L_089C6A38: aot_gpr_31 = (0x089C6A40u); - // nop goto L_089C6EF4; L_089C6A40: { const bool branch_taken = 0u == 0u; @@ -6132,7 +6051,6 @@ L_089C6A40: } L_089C6A48: aot_gpr_31 = (0x089C6A50u); - // nop goto L_089C6F04; L_089C6A50: { const bool branch_taken = 0u == 0u; @@ -6144,7 +6062,6 @@ L_089C6A50: } L_089C6A58: aot_gpr_31 = (0x089C6A60u); - // nop goto L_089C6DFC; L_089C6A60: { const bool branch_taken = 0u == 0u; @@ -6156,7 +6073,6 @@ L_089C6A60: } L_089C6A68: aot_gpr_31 = (0x089C6A70u); - // nop goto L_089C70C8; L_089C6A70: { const bool branch_taken = 0u == 0u; @@ -6168,14 +6084,12 @@ L_089C6A70: } L_089C6A78: aot_gpr_31 = (0x089C6A80u); - // nop goto L_089C6F60; L_089C6A80: ctx.gpr[17] = (aot_gpr_2 | 0u); goto L_089C6A84; L_089C6A84: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C6B6C; } @@ -6226,7 +6140,6 @@ L_089C6AE0: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); ctx.gpr[18] = (aot_gpr_4 + ctx.gpr[18]); { const bool branch_taken = ctx.gpr[18] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089C6B6C; } @@ -6305,7 +6218,17 @@ L_089C6B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6B8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -6326,11 +6249,20 @@ L_089C6BAC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3984))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6BC4: aot_gpr_5 = (aot_gpr_4 & 255u); aot_gpr_31 = (0x089C6BD0u); @@ -6339,7 +6271,6 @@ L_089C6BC4: AOT_REGCACHE_SYNC_OUT(); return; L_089C6BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6353,7 +6284,6 @@ L_089C6BD8: AOT_REGCACHE_SYNC_OUT(); return; L_089C6BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6368,7 +6298,6 @@ L_089C6BEC: goto L_089C6D70; L_089C6C00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6382,7 +6311,6 @@ L_089C6C08: goto L_089C6D80; L_089C6C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6396,7 +6324,6 @@ L_089C6C20: goto L_089C6DB4; L_089C6C30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6411,7 +6338,6 @@ L_089C6C38: goto L_089C6DC4; L_089C6C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6419,7 +6345,6 @@ L_089C6C4C: } L_089C6C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6433,7 +6358,6 @@ L_089C6C5C: goto L_089C6E58; L_089C6C6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6448,7 +6372,6 @@ L_089C6C74: goto L_089C6EFC; L_089C6C88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6463,7 +6386,6 @@ L_089C6C90: goto L_089C6F0C; L_089C6CA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6478,7 +6400,6 @@ L_089C6CAC: goto L_089C6E04; L_089C6CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6492,7 +6413,6 @@ L_089C6CC8: goto L_089C70D0; L_089C6CD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C6CF4; } @@ -6512,7 +6432,17 @@ L_089C6CF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6D00: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(8), static_cast(0u)); aot_gpr_5 = (0u | 288u); @@ -6541,35 +6471,85 @@ L_089C6D00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6D68: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6D70: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(8), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6D78: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6D80: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6D88: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -6597,88 +6577,207 @@ L_089C6DA4: } L_089C6DAC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DB4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(19), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DBC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(24))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DC4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(24), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DCC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DD4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(16), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DDC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(17))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DE4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(17), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DEC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DF4: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(18), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6DFC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(25))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6E04: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(25), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6689,7 +6788,6 @@ L_089C6E0C: L_089C6E1C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(150))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C6E40; } @@ -6704,7 +6802,6 @@ L_089C6E30: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(150))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C6E48; } @@ -6728,14 +6825,23 @@ L_089C6E4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6E58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C6EA4; } @@ -6743,11 +6849,9 @@ L_089C6E58: } L_089C6E70: aot_gpr_31 = (0x089C6E78u); - // nop goto L_089C6F04; L_089C6E78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C6E90; } @@ -6783,7 +6887,6 @@ L_089C6E9C: L_089C6EA4: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089C6EE4; } @@ -6791,11 +6894,9 @@ L_089C6EA4: } L_089C6EB0: aot_gpr_31 = (0x089C6EB8u); - // nop goto L_089C6F04; L_089C6EB8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C6ED4; } @@ -6832,28 +6933,68 @@ L_089C6EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6EF4: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16129))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6EFC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-16129), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6F04: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-16128))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6F0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6871,7 +7012,6 @@ L_089C6F2C: goto L_089C6E58; L_089C6F38: aot_gpr_31 = (0x089C6F40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 829u, 0x0898B448u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C6F40u) goto L_089C6F40; AOT_REGCACHE_SYNC_OUT(); return; L_089C6F40: @@ -6882,28 +7022,68 @@ L_089C6F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6F50: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(26))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6F58: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(26), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6F60: jump_target = aot_gpr_31; aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(27)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C6F68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6941,7 +7121,6 @@ L_089C6FB0: AOT_REGCACHE_SYNC_OUT(); return; L_089C6FB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C6FEC; } @@ -6984,7 +7163,6 @@ L_089C6FEC: L_089C6FFC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5576))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C7010; } @@ -6999,7 +7177,6 @@ L_089C7010: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(27)))))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C7090; } @@ -7008,7 +7185,6 @@ L_089C7010: L_089C7020: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C7038; } @@ -7016,7 +7192,6 @@ L_089C7020: } L_089C702C: aot_gpr_31 = (0x089C7034u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C7034u) goto L_089C7034; AOT_REGCACHE_SYNC_OUT(); return; L_089C7034: @@ -7024,12 +7199,10 @@ L_089C7034: goto L_089C7038; L_089C7038: aot_gpr_31 = (0x089C7040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 472u, 0x088B6860u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C7040u) goto L_089C7040; AOT_REGCACHE_SYNC_OUT(); return; L_089C7040: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C7070; } @@ -7038,7 +7211,6 @@ L_089C7040: L_089C7048: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C7060; } @@ -7046,7 +7218,6 @@ L_089C7048: } L_089C7054: aot_gpr_31 = (0x089C705Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C705Cu) goto L_089C705C; AOT_REGCACHE_SYNC_OUT(); return; L_089C705C: @@ -7054,12 +7225,10 @@ L_089C705C: goto L_089C7060; L_089C7060: aot_gpr_31 = (0x089C7068u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 562u, 0x088B6F30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C7068u) goto L_089C7068; AOT_REGCACHE_SYNC_OUT(); return; L_089C7068: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C7084; } @@ -7072,7 +7241,6 @@ L_089C7070: goto L_089C70D0; L_089C707C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C7090; } @@ -7096,42 +7264,102 @@ L_089C7090: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C70A8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C70B0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(32), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C70B8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C70C0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(28), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C70C8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C70D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7141,7 +7369,6 @@ L_089C70D0: aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C7108; } @@ -7154,7 +7381,6 @@ L_089C70F4: goto L_089C6F68; L_089C7100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C7138; } @@ -7170,7 +7396,6 @@ L_089C7108: } L_089C7110: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C7138; } @@ -7183,7 +7408,6 @@ L_089C7118: L_089C7120: aot_gpr_4 = (0u | 9u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_089C7138; } @@ -7202,14 +7426,34 @@ L_089C7138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7148: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(40)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7150: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_12)); @@ -7219,49 +7463,119 @@ L_089C7150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7164: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C716C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(20), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7174: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C717C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(48), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7184: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(49), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C718C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(52)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7194: aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(77))); jump_target = aot_gpr_31; @@ -7269,27 +7583,56 @@ L_089C7194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C71A0: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(77), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C71A8: jump_target = aot_gpr_31; aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(76)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C71B0: aot_gpr_5 = (aot_gpr_5 << 24u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 24u)); aot_gpr_6 = (0u + static_cast(-2)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089C71CC; } @@ -7306,7 +7649,6 @@ L_089C71C4: L_089C71CC: aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089C71DC; } @@ -7321,7 +7663,17 @@ L_089C71DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C71E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -7331,7 +7683,17 @@ L_089C71E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C71F8: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7385,11 +7747,20 @@ L_089C71F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7220: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -7399,7 +7770,17 @@ L_089C7220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7248: { const std::uint32_t aot_run_words[14]{0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}; aot_mem.aot_direct_store32_block(ctx.gpr[28] + static_cast(9548), aot_run_words); } @@ -7419,7 +7800,17 @@ L_089C7248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C72B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], aot_gpr_31}; @@ -7429,12 +7820,10 @@ L_089C72B8: goto L_089C7458; L_089C72DC: aot_gpr_31 = (0x089C72E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 842u, 0x089CB2D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C72E4u) goto L_089C72E4; AOT_REGCACHE_SYNC_OUT(); return; L_089C72E4: aot_gpr_31 = (0x089C72ECu); - // nop goto L_089C7B40; L_089C72EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9191))); @@ -7448,7 +7837,6 @@ L_089C72F8: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9191), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9191))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C7438; } @@ -7456,11 +7844,9 @@ L_089C72F8: } L_089C730C: aot_gpr_31 = (0x089C7314u); - // nop goto L_089C7A3C; L_089C7314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C7438; } @@ -7507,7 +7893,6 @@ L_089C731C: goto L_089C73A8; L_089C73A8: aot_gpr_31 = (0x089C73B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C73B0u) goto L_089C73B0; AOT_REGCACHE_SYNC_OUT(); return; L_089C73B0: @@ -7516,7 +7901,6 @@ L_089C73B0: L_089C73B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C7438; } @@ -7524,7 +7908,6 @@ L_089C73B4: } L_089C73C0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C7438; } @@ -7532,7 +7915,6 @@ L_089C73C0: } L_089C73C8: aot_gpr_31 = (0x089C73D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C73D0u) goto L_089C73D0; AOT_REGCACHE_SYNC_OUT(); return; L_089C73D0: @@ -7588,7 +7970,17 @@ L_089C7438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7458: { const bool branch_taken = 0u == 0u; aot_gpr_2 = (0u | 1u); @@ -7599,11 +7991,20 @@ L_089C7458: } L_089C7460: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7468: aot_gpr_29 = (aot_gpr_29 + static_cast(-1152)); { const std::uint32_t aot_run_words[9]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7678,7 +8079,6 @@ L_089C74DC: ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[17] = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C754C; } @@ -7686,7 +8086,6 @@ L_089C74DC: } L_089C74EC: aot_gpr_31 = (0x089C74F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C74F4u) goto L_089C74F4; AOT_REGCACHE_SYNC_OUT(); return; L_089C74F4: @@ -7729,7 +8128,6 @@ L_089C74F4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089C7528u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C7528u) goto L_089C7528; AOT_REGCACHE_SYNC_OUT(); return; L_089C7528: @@ -7737,9 +8135,7 @@ L_089C7528: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C754C; } @@ -7771,7 +8167,6 @@ L_089C756C: ctx.fpr[22] = ctx.fpr[0] + ctx.fpr[22]; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C7598; } @@ -7780,7 +8175,6 @@ L_089C756C: L_089C757C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); goto L_089C75A0; @@ -7788,7 +8182,6 @@ L_089C757C: goto L_089C7590; L_089C7590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C75A0; } @@ -7805,7 +8198,6 @@ L_089C7598: L_089C75A0: ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x089C75ACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C75ACu) goto L_089C75AC; AOT_REGCACHE_SYNC_OUT(); return; L_089C75AC: @@ -7836,7 +8228,6 @@ L_089C75F8: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); ctx.gpr[21] = (ctx.gpr[21] + static_cast(4)); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089C7620; } @@ -7854,7 +8245,6 @@ L_089C7608: } L_089C7618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C7638; } @@ -7876,7 +8266,6 @@ L_089C7628: goto L_089C7638; L_089C7638: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C7680; } @@ -7910,7 +8299,6 @@ L_089C765C: AOT_REGCACHE_SYNC_OUT(); return; L_089C7674: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C7680; } @@ -7921,7 +8309,6 @@ L_089C767C: goto L_089C7680; L_089C7680: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089C75F8; } @@ -7982,7 +8369,6 @@ L_089C76FC: AOT_REGCACHE_SYNC_OUT(); return; L_089C771C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C7768; } @@ -7995,7 +8381,6 @@ L_089C7724: L_089C772C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C7758; } @@ -8003,7 +8388,6 @@ L_089C772C: } L_089C7738: { const bool branch_taken = aot_gpr_6 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089C7758; } @@ -8011,7 +8395,6 @@ L_089C7738: } L_089C7740: { const bool branch_taken = aot_gpr_6 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089C7758; } @@ -8062,7 +8445,6 @@ L_089C7768: AOT_REGCACHE_SYNC_OUT(); return; L_089C77B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C77C8; } @@ -8107,7 +8489,17 @@ L_089C77D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7804: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -8139,7 +8531,6 @@ L_089C784C: goto L_089C7858; L_089C7858: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_089C7874; } @@ -8185,7 +8576,6 @@ L_089C7898: L_089C789C: ctx.gpr[22] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089C7954; } @@ -8194,7 +8584,6 @@ L_089C789C: L_089C78A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089C7954; } @@ -8202,7 +8591,6 @@ L_089C78A8: } L_089C78B4: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_089C7954; } @@ -8222,7 +8610,6 @@ L_089C78BC: L_089C78D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089C7954; } @@ -8352,7 +8739,6 @@ L_089C79E4: AOT_REGCACHE_SYNC_OUT(); return; L_089C79F0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C7A14; } @@ -8387,7 +8773,17 @@ L_089C7A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7A3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], aot_gpr_31}; @@ -8432,7 +8828,6 @@ L_089C7A68: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9612), aot_gpr_4); aot_gpr_31 = (0x089C7AF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C7AF0u) goto L_089C7AF0; AOT_REGCACHE_SYNC_OUT(); return; L_089C7AF0: @@ -8454,7 +8849,6 @@ L_089C7B0C: ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C7A68; } @@ -8474,7 +8868,17 @@ L_089C7B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7B40: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -8483,7 +8887,6 @@ L_089C7B40: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C7CB8; } @@ -8498,7 +8901,6 @@ L_089C7B80: L_089C7B8C: aot_gpr_4 = (static_cast(aot_gpr_2) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C7CB8; } @@ -8528,7 +8930,6 @@ L_089C7BB8: goto L_089C7BD0; L_089C7BD0: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_089C7BE8; } @@ -8573,7 +8974,6 @@ L_089C7C0C: L_089C7C10: ctx.gpr[17] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C7C6C; } @@ -8586,7 +8986,6 @@ L_089C7C1C: AOT_REGCACHE_SYNC_OUT(); return; L_089C7C24: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C7C6C; } @@ -8631,9 +9030,7 @@ L_089C7C2C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C7C6C; } @@ -8656,7 +9053,6 @@ L_089C7C6C: } L_089C7C80: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089C7CB8; } @@ -8670,7 +9066,6 @@ L_089C7C88: AOT_REGCACHE_SYNC_OUT(); return; L_089C7C94: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089C7CB8; } @@ -8707,7 +9102,17 @@ L_089C7CB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7CE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8730,7 +9135,6 @@ L_089C7D14: goto L_089C7D24; L_089C7D24: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_089C7D40; } @@ -8775,7 +9179,6 @@ L_089C7D64: goto L_089C7D68; L_089C7D68: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089C7D88; } @@ -8788,7 +9191,6 @@ L_089C7D70: AOT_REGCACHE_SYNC_OUT(); return; L_089C7D78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C7D88; } @@ -8823,19 +9225,27 @@ L_089C7D9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089C7DD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 997u, 0x089CBF88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C7DD8u) goto L_089C7DD8; AOT_REGCACHE_SYNC_OUT(); return; L_089C7DD8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C7E00; } @@ -8858,7 +9268,6 @@ L_089C7DEC: } L_089C7DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C7E14; } @@ -8866,7 +9275,6 @@ L_089C7DF8: } L_089C7E00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C7FB0; } @@ -8882,7 +9290,6 @@ L_089C7E10: goto L_089C7E14; L_089C7E14: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C7FB0; } @@ -8896,7 +9303,6 @@ L_089C7E1C: AOT_REGCACHE_SYNC_OUT(); return; L_089C7E28: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C7E4C; } @@ -9016,7 +9422,6 @@ L_089C7EE0: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C7F10; } @@ -9038,7 +9443,6 @@ L_089C7F10: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C7F5C; } @@ -9047,7 +9451,6 @@ L_089C7F10: L_089C7F20: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C7F5C; } @@ -9056,7 +9459,6 @@ L_089C7F20: L_089C7F2C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(198))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C7F5C; } @@ -9065,7 +9467,6 @@ L_089C7F2C: L_089C7F38: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(200))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C7F5C; } @@ -9074,7 +9475,6 @@ L_089C7F38: L_089C7F44: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(202))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089C7F5C; } @@ -9099,7 +9499,6 @@ L_089C7F5C: } L_089C7F64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C7FB0; } @@ -9141,7 +9540,17 @@ L_089C7FB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C7FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0113.cpp b/profiles/vcs/generated/generated_unit_0113.cpp index 855151d..a7c40f5 100644 --- a/profiles/vcs/generated/generated_unit_0113.cpp +++ b/profiles/vcs/generated/generated_unit_0113.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0113[4067] = { - 1, 2, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 9, 0, 10, 11, 0, 0, 0, 12, 0, - 0, 13, 0, 14, 0, 15, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, 20, 0, 21, 0, 0, 0, 0, - 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 26, 0, 27, 28, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 38, 0, - 39, 0, 40, 0, 41, 0, 42, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 46, - 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, - 0, 55, 0, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 62, 0, - 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 0, 0, 79, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 86, 87, 0, 0, 88, 0, 89, 0, 0, 0, 0, - 90, 0, 91, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 99, - 0, 0, 0, 100, 0, 0, 101, 0, 102, 0, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, 0, 107, 0, 108, 0, 0, 109, 0, 0, 0, 110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, - 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, - 0, 138, 0, 139, 140, 0, 141, 0, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, - 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 169, 0, - 170, 0, 0, 171, 0, 172, 173, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 175, 0, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 181, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 184, 0, 185, - 0, 186, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 191, 0, 0, 0, 192, 0, 0, 193, 0, - 0, 194, 0, 0, 0, 0, 0, 195, 0, 196, 0, 197, 0, 198, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 208, 0, 209, 0, - 210, 0, 0, 0, 211, 0, 0, 0, 0, 212, 0, 213, 214, 0, 0, 0, 215, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 218, 0, 0, 0, 219, - 0, 220, 0, 0, 0, 0, 221, 0, 222, 223, 0, 224, 0, 225, 0, 226, 0, 0, 227, 228, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 231, - 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 236, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, - 0, 240, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, 0, - 0, 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 257, 0, 258, 0, 0, 259, 0, 260, 0, - 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 0, 267, - 0, 0, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 277, 0, 0, 0, 0, 278, 0, 279, 0, 0, 280, 0, 0, 281, 0, - 0, 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 285, 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 293, 0, 294, 0, 0, 295, 0, 296, 0, 297, 0, 298, 299, - 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, 310, 0, 311, 0, 312, 0, 313, 0, 0, 314, 0, 315, 0, - 0, 0, 316, 0, 317, 0, 318, 319, 0, 0, 320, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 323, 0, 324, 0, - 325, 0, 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 329, 0, 330, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, - 336, 0, 0, 337, 0, 338, 0, 339, 0, 0, 340, 0, 0, 0, 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 0, - 349, 0, 350, 351, 0, 0, 352, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, - 0, 0, 0, 357, 0, 358, 0, 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 363, 0, 364, 0, 0, 365, 0, - 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 372, 0, 0, - 373, 0, 374, 375, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 379, 0, 380, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, - 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 387, 0, 388, 0, 0, 0, 0, 389, 0, 390, 0, 391, 0, 392, 0, - 393, 0, 394, 395, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 399, 0, 0, 0, 0, 400, 0, 401, 0, 0, 402, 403, 0, 0, 404, 0, 405, 0, - 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 411, 412, 0, 0, 413, 0, 414, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, - 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 0, 0, 423, 0, 424, 0, - 425, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, - 0, 432, 0, 0, 433, 0, 434, 435, 0, 436, 0, 0, 0, 437, 0, 0, 438, 0, 439, 0, 440, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 0, 0, 0, 449, 0, 450, 0, - 451, 0, 452, 0, 453, 0, 454, 455, 0, 0, 456, 0, 0, 0, 457, 0, 458, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 462, 463, 0, 464, 0, 0, 0, 0, 465, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 468, 0, 469, 0, 470, 0, 471, 0, 0, 0, - 472, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 0, 475, 0, 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, - 0, 481, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, - 487, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 491, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 0, - 0, 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 501, 0, 0, 502, 0, 503, 0, 504, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, - 507, 0, 508, 0, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 0, 520, 0, 521, - 0, 522, 0, 523, 0, 524, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, - 0, 0, 537, 0, 0, 0, 538, 0, 0, 0, 0, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, - 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 547, 548, 0, 549, 0, 0, 0, 550, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, - 554, 0, 555, 0, 0, 0, 0, 0, 556, 0, 557, 0, 558, 0, 559, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, 565, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, - 568, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 572, 0, 0, 0, 573, 0, 0, 0, - 574, 0, 0, 0, 575, 0, 576, 577, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 581, 0, 582, 0, 0, 583, 0, 584, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 587, - 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 590, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, - 0, 594, 0, 0, 0, 0, 595, 0, 0, 0, 596, 597, 0, 0, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 601, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 604, 0, 605, 0, 0, 0, 0, 0, 606, 0, 607, 0, 0, 0, 0, 0, 608, 0, - 609, 0, 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 0, - 616, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 621, 0, 622, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 0, 625, 0, 626, 0, 627, 0, 0, 628, 0, 0, 629, 0, 0, 630, 0, 631, 632, - 0, 0, 633, 0, 0, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 0, 0, 639, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, - 643, 0, 0, 0, 644, 0, 0, 645, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 0, 0, 653, 0, 0, 654, 0, 655, 0, 656, - 0, 0, 0, 657, 0, 658, 0, 0, 659, 0, 0, 660, 0, 0, 0, 661, 0, 662, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, - 0, 666, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 669, 0, 0, 0, 670, 0, 0, 0, 671, 0, 672, 0, 673, 0, 0, 0, 674, 0, 675, - 0, 676, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 681, 0, 0, 0, 682, - 0, 0, 683, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 686, 0, 0, 687, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 690, 0, 0, 0, 0, - 0, 691, 0, 692, 0, 0, 0, 0, 693, 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 696, 0, 0, 0, 697, 698, 0, 699, 0, 700, 0, 701, - 0, 702, 0, 703, 0, 0, 0, 704, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 708, 0, 0, 0, 709, 0, 0, 710, - 711, 0, 0, 0, 712, 0, 0, 0, 713, 714, 0, 715, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 719, 0, 0, 0, 0, - 720, 0, 0, 0, 721, 722, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, - 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 727, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 731, 0, 0, 732, 0, 0, 733, 0, 0, 734, 735, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 737, 0, 738, 0, 0, 739, 0, 740, 0, 0, 741, 0, 0, 0, 742, 0, 0, - 743, 0, 744, 0, 745, 0, 0, 746, 0, 747, 0, 748, 0, 0, 749, 0, 0, 750, 0, 0, 751, 0, 752, 0, 0, 0, 753, 0, 754, 0, 0, 755, - 0, 0, 756, 0, 757, 0, 758, 0, 0, 759, 0, 760, 0, 761, 0, 0, 762, 0, 0, 763, 0, 0, 764, 765, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 767, 0, 768, 0, 0, 769, 0, 770, 0, 771, 0, 0, 772, 0, 773, 0, 774, 0, 0, 775, 0, - 0, 776, 0, 777, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 781, 0, 0, 782, 0, 783, - 0, 784, 0, 0, 785, 0, 786, 0, 787, 0, 0, 788, 0, 0, 789, 0, 790, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 792, 0, 0, 0, 0, 793, 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 0, 798, 0, 799, 0, 800, 0, 0, 801, 0, 0, 802, 0, 0, 803, 804, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 806, 0, 807, 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, - 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 813, 0, 814, 0, 0, 815, 0, 0, 816, - 0, 817, 0, 818, 0, 0, 819, 0, 820, 0, 821, 0, 0, 822, 0, 0, 823, 0, 0, 824, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 826, 0, 0, 0, 0, 827, 0, 828, 0, 0, 829, 0, 830, 0, 0, 0, 831, 0, 832, 0, 0, 833, 0, 0, 834, 0, 835, 0, 836, - 0, 0, 837, 0, 838, 0, 839, 0, 0, 0, 840, 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 846, 0, 0, 0, 847, 0, 848, 0, 0, 0, 0, 849, - 0, 850, 851, 0, 0, 852, 0, 853, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 856, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, 858, 0, 859, 0, 0, 0, 860, 0, 0, 861, 0, - 862, 0, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 865, 0, 0, 0, 866, 0, 867, 0, 868, 869, 0, 0, 0, 870, 0, 0, 871, 0, 872, - 0, 0, 0, 0, 0, 0, 873, 0, 874, 0, 0, 0, 875, 0, 0, 0, 876, 0, 0, 0, 877, 0, 878, 0, 879, 0, 880, 0, 0, 0, 0, 881, - 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 884, 0, 885, 0, 0, 0, - 886, 0, 887, 0, 0, 0, 0, 888, 0, 889, 890, 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 892, 0, 893, 0, - 0, 0, 894, 895, 0, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 898, 0, - 0, 0, 899, 0, 900, 0, 0, 0, 0, 901, 0, 902, 0, 903, 0, 904, 0, 905, 0, 906, 0, 907, 0, 908, 0, 909, 0, 910, 0, 0, 0, 0, - 0, 0, 911, 0, 912, 0, 913, 0, 914, 0, 915, 0, 0, 916, 0, 0, 0, 917, 0, 918, 0, 919, 0, 920, 0, 921, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 922, 0, 0, 0, 923, 0, 0, 0, 924, 0, 0, 0, 925, 0, 0, 926, 927, 0, 928, 0, 0, 0, 0, - 0, 0, 0, 0, 929, 0, 930, 0, 0, 0, 931, 0, 932, 0, 0, 0, 0, 0, 0, 0, 0, 933, 0, 934, 0, 935, 0, 0, 0, 0, 0, 0, - 936, 0, 0, 0, 0, 937, 0, 938, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, 947, 0, 0, 0, - 948, 0, 0, 0, 949, 0, 0, 950, 0, 0, 0, 951, 952, 0, 953, 0, 0, 954, 0, 0, 955, 0, 0, 0, 0, 0, 0, 956, 957, 958, 0, 959, - 960, 0, 0, 961, 0, 962, 963, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 964, 0, 0, 965, 0, 966, 967, 0, 968, 0, 0, 0, 0, 0, 969, - 0, 0, 970, 0, 0, 971, 0, 0, 972, 0, 973, 0, 0, 974, 0, 975, 0, 976, 0, 0, 0, 977, 0, 0, 0, 978, 0, 0, 0, 979, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 980, 0, 0, 0, 0, 0, 981, 0, 982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983, 0, 984, 0, 985, 0, - 986, 0, 987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 988, 0, 989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 990, 0, 0, 0, 991, 0, - 992, 0, 993, 0, 0, 0, 994, 0, 995, 0, 0, 0, 0, 0, 0, 0, 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 997, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0113[64] = { + 0x0A4208AA46A22153ull, 0x4044469000000414ull, 0xA400085554002140ull, 0x60A40182AAA02020ull, + 0x2000908001020820ull, 0x084A800002022880ull, 0xA22445050A644540ull, 0xAAAAA40044A54948ull, + 0xAAAAAA5AAAAAAAAAull, 0x000001696AAAAAAAull, 0x48940016A446AA40ull, 0x5088A28800406A82ull, + 0x910CAB428A411A11ull, 0x084210828401AA04ull, 0x5284210842108421ull, 0x2108421084210841ull, + 0x0004895049421084ull, 0x00000002D52A1504ull, 0x00212A0000040000ull, 0x510024D452A8A080ull, + 0x5001212800100105ull, 0x4800054D2AAA84A9ull, 0x210214114B4010A8ull, 0x550A84444011522Dull, + 0x410A9AAA5328544Dull, 0x1021411151248004ull, 0x50A84444011522D2ull, 0x85840000008544D5ull, + 0x02AA520115441000ull, 0x000220410228002Aull, 0x402A914021442803ull, 0x555552AAA5554AA5ull, + 0x4818B10840155044ull, 0x40000D4204045505ull, 0x294482D111810005ull, 0x2802088889000000ull, + 0x4141502100228C42ull, 0x0000502922210085ull, 0x000C5544D24A814Aull, 0xA92AAA9101000020ull, + 0xA2A22222220A8928ull, 0x0889221488900422ull, 0x9150088AAB11110Aull, 0x200008310A088B11ull, + 0x1924080008004520ull, 0x94524A9522528400ull, 0x4A95284000C92A54ull, 0x00034952A508001Aull, + 0x10A84000C92A54A1ull, 0x0019254A92881010ull, 0x00201454A928A508ull, 0x8514000800008000ull, + 0x48A08420000002A6ull, 0x85511140A46A2281ull, 0x5000168514100004ull, 0x0AAAAA145000008Cull, + 0x0B22220002AA2554ull, 0x002002A102A01450ull, 0x1400801002002002ull, 0x82D20069B8125891ull, + 0x0000A0802222A524ull, 0x0000000554000000ull, 0x440000000000A000ull, 0x0000000400010145ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0113[64] = { + 1u, 22u, 33u, 47u, 63u, 71u, 81u, 100u, 122u, 154u, 175u, 194u, 210u, 232u, 246u, 261u, + 274u, 288u, 301u, 307u, 325u, 336u, 357u, 373u, 393u, 418u, 432u, 451u, 466u, 481u, 491u, 507u, + 537u, 554u, 568u, 585u, 594u, 609u, 621u, 641u, 657u, 676u, 691u, 711u, 725u, 736u, 756u, 776u, + 792u, 810u, 826u, 843u, 850u, 862u, 882u, 894u, 911u, 929u, 941u, 948u, 970u, 983u, 988u, 992u, }; void recomp_unit_0113_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0113_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089C8000u; - entry_id = (entry_delta < 16268u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0113[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16268u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0113[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0113[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089C8000; @@ -1284,7 +1191,6 @@ L_089C80AC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C80D8; } @@ -1305,7 +1211,6 @@ L_089C80D8: AOT_REGCACHE_SYNC_OUT(); return; L_089C80E4: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089C8108; } @@ -1341,7 +1246,17 @@ L_089C8110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8128: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(36), ctx.gpr[16]); @@ -1385,7 +1300,6 @@ L_089C8128: L_089C8190: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[29] + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C81A4; } @@ -1410,12 +1324,21 @@ L_089C81A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C81B8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089C81C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C81C8u) goto L_089C81C8; AOT_REGCACHE_SYNC_OUT(); return; L_089C81C8: @@ -1426,7 +1349,17 @@ L_089C81C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C81D8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1445,9 +1378,7 @@ L_089C81F8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C8278; } @@ -1455,7 +1386,6 @@ L_089C81F8: } L_089C8218: aot_gpr_31 = (0x089C8220u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C8220u) goto L_089C8220; AOT_REGCACHE_SYNC_OUT(); return; L_089C8220: @@ -1487,12 +1417,10 @@ L_089C8234: } L_089C8268: aot_gpr_31 = (0x089C8270u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 692u, 0x08AD3B78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C8270u) goto L_089C8270; AOT_REGCACHE_SYNC_OUT(); return; L_089C8270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C82FC; } @@ -1512,7 +1440,6 @@ L_089C8280: } L_089C8288: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C82F4; } @@ -1520,7 +1447,6 @@ L_089C8288: } L_089C8290: aot_gpr_31 = (0x089C8298u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C8298u) goto L_089C8298; AOT_REGCACHE_SYNC_OUT(); return; L_089C8298: @@ -1551,7 +1477,6 @@ L_089C82AC: L_089C82E8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8280; } @@ -1578,7 +1503,17 @@ L_089C82FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8314: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1597,9 +1532,7 @@ L_089C8334: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C836C; } @@ -1607,7 +1540,6 @@ L_089C8334: } L_089C8354: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C83DC; } @@ -1615,12 +1547,10 @@ L_089C8354: } L_089C835C: aot_gpr_31 = (0x089C8364u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 692u, 0x08AD3B78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C8364u) goto L_089C8364; AOT_REGCACHE_SYNC_OUT(); return; L_089C8364: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8414; } @@ -1640,7 +1570,6 @@ L_089C8374: } L_089C837C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C83D4; } @@ -1652,7 +1581,6 @@ L_089C8384: aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(6868), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C83A0; } @@ -1676,7 +1604,6 @@ L_089C83A0: L_089C83C8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8374; } @@ -1696,7 +1623,6 @@ L_089C83DC: aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(6868), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C83F8; } @@ -1727,13 +1653,22 @@ L_089C8414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C842C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } aot_gpr_31 = (0x089C8444u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C8444u) goto L_089C8444; AOT_REGCACHE_SYNC_OUT(); return; L_089C8444: @@ -1768,7 +1703,17 @@ L_089C8460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C849C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -1784,7 +1729,17 @@ L_089C84B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C84BC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1806,9 +1761,7 @@ L_089C84F4: aot_gpr_4 = (aot_gpr_4 | 32506u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C8534; } @@ -1823,7 +1776,6 @@ L_089C851C: AOT_REGCACHE_SYNC_OUT(); return; L_089C852C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8544; } @@ -1851,7 +1803,17 @@ L_089C8544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8564: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1878,7 +1840,6 @@ L_089C85BC: } L_089C85C4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C8664; } @@ -1909,7 +1870,6 @@ L_089C85EC: ctx.gpr[23] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089C8658; } @@ -1921,7 +1881,6 @@ L_089C8618: goto L_089C87A8; L_089C8620: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C8658; } @@ -1946,7 +1905,6 @@ L_089C8638: L_089C8648: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_089C8658; } @@ -1966,7 +1924,6 @@ L_089C8658: } L_089C8664: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089C8680; } @@ -1985,7 +1942,6 @@ L_089C866C: } L_089C8680: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8778; } @@ -2001,7 +1957,6 @@ L_089C8688: goto L_089C8898; L_089C86A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C8768; } @@ -2065,7 +2020,6 @@ L_089C86FC: L_089C870C: aot_gpr_5 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C8768; } @@ -2073,7 +2027,6 @@ L_089C870C: } L_089C8718: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8768; } @@ -2082,7 +2035,6 @@ L_089C8718: L_089C8720: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(56))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_089C8738; } @@ -2091,7 +2043,6 @@ L_089C8720: L_089C872C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(56))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089C8748; } @@ -2105,7 +2056,6 @@ L_089C8738: goto L_089C8740; L_089C8740: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8768; } @@ -2114,7 +2064,6 @@ L_089C8740: L_089C8748: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), ctx.gpr[20]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8778; } @@ -2122,7 +2071,6 @@ L_089C8748: } L_089C8754: { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089C8768; } @@ -2131,7 +2079,6 @@ L_089C8754: L_089C875C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), ctx.gpr[20]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C8778; } @@ -2166,7 +2113,17 @@ L_089C8778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C87A8: aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; @@ -2378,7 +2335,6 @@ L_089C8874: } L_089C887C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C888C; } @@ -2397,11 +2353,20 @@ L_089C888C: goto L_089C8890; L_089C8890: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8898: aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; @@ -2605,7 +2570,6 @@ L_089C895C: } L_089C8964: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C8974; } @@ -2624,15 +2588,23 @@ L_089C8974: goto L_089C8978; L_089C8978: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8980: aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C8994; } @@ -2651,11 +2623,20 @@ L_089C8994: goto L_089C8998; L_089C8998: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C89A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-128)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(112), ctx.gpr[16]); @@ -2711,7 +2692,6 @@ L_089C89A0: L_089C8A18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8A3C; } @@ -2723,7 +2703,6 @@ L_089C8A24: goto L_089C8A58; L_089C8A2C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C8A44; } @@ -2756,12 +2735,21 @@ L_089C8A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8A58: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C8A7C; } @@ -2770,7 +2758,6 @@ L_089C8A58: L_089C8A68: aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C8A84; } @@ -2797,11 +2784,20 @@ L_089C8A84: goto L_089C8A88; L_089C8A88: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8A90: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2822,7 +2818,6 @@ L_089C8AC8: L_089C8AD0: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8B34; } @@ -2832,7 +2827,6 @@ L_089C8ADC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089C8B2C; } @@ -2847,7 +2841,6 @@ L_089C8AEC: L_089C8AF8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8B2C; } @@ -2875,7 +2868,6 @@ L_089C8B04: AOT_REGCACHE_SYNC_OUT(); return; L_089C8B1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C8B2C; } @@ -2915,7 +2907,17 @@ L_089C8B38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8B58: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -2923,7 +2925,6 @@ L_089C8B58: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8BA4; } @@ -2933,7 +2934,6 @@ L_089C8B8C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(4210))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C8BA4; } @@ -2985,7 +2985,6 @@ L_089C8BDC: goto L_089C8BF0; L_089C8BF0: { const bool branch_taken = aot_gpr_5 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089C8C30; } @@ -3013,7 +3012,6 @@ L_089C8C10: goto L_089C8C24; L_089C8C24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8C30; } @@ -3026,7 +3024,6 @@ L_089C8C30: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9628))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C8BBC; } @@ -3051,7 +3048,6 @@ L_089C8C58: goto L_089C8C64; L_089C8C64: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_089C8C7C; } @@ -3095,7 +3091,6 @@ L_089C8CA0: goto L_089C8CA4; L_089C8CA4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089C8CCC; } @@ -3108,7 +3103,6 @@ L_089C8CAC: AOT_REGCACHE_SYNC_OUT(); return; L_089C8CB4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C8CCC; } @@ -3117,7 +3111,6 @@ L_089C8CB4: L_089C8CBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C8CCC; } @@ -3141,7 +3134,6 @@ L_089C8CE0: aot_gpr_4 = (ctx.gpr[19] + ctx.gpr[16]); aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8D34; } @@ -3150,7 +3142,6 @@ L_089C8CE0: L_089C8CF0: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8D2C; } @@ -3169,7 +3160,6 @@ L_089C8D08: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C8D3C; } @@ -3219,7 +3209,17 @@ L_089C8D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8D68: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -3233,7 +3233,6 @@ L_089C8D68: } L_089C8D7C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C8EE4; } @@ -3245,17 +3244,25 @@ L_089C8D84: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3824))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9548))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9548), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3266,7 +3273,6 @@ L_089C8DB0: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9552), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3277,7 +3283,6 @@ L_089C8DC4: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9556), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3288,7 +3293,6 @@ L_089C8DD8: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9560), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3299,7 +3303,6 @@ L_089C8DEC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9564), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3310,7 +3313,6 @@ L_089C8E00: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9568), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3321,7 +3323,6 @@ L_089C8E14: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9572), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3332,7 +3333,6 @@ L_089C8E28: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9576), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3343,7 +3343,6 @@ L_089C8E3C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9580), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3354,7 +3353,6 @@ L_089C8E50: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9584), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3365,7 +3363,6 @@ L_089C8E64: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9588), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3376,7 +3373,6 @@ L_089C8E78: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9592), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3387,7 +3383,6 @@ L_089C8E8C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9596), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3398,7 +3393,6 @@ L_089C8EA0: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9548), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3409,7 +3403,6 @@ L_089C8EB4: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9552), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3420,7 +3413,6 @@ L_089C8EC8: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9600), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3428,7 +3420,6 @@ L_089C8EC8: } L_089C8EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3442,7 +3433,6 @@ L_089C8EE4: AOT_REGCACHE_SYNC_OUT(); return; L_089C8EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3450,7 +3440,6 @@ L_089C8EF0: } L_089C8EF8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C9060; } @@ -3462,17 +3451,25 @@ L_089C8F00: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3728))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C8F18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9548))); aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9548), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3483,7 +3480,6 @@ L_089C8F2C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9552), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3494,7 +3490,6 @@ L_089C8F40: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9556), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3505,7 +3500,6 @@ L_089C8F54: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9560), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3516,7 +3510,6 @@ L_089C8F68: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9564), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3527,7 +3520,6 @@ L_089C8F7C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9568), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3538,7 +3530,6 @@ L_089C8F90: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9572), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3549,7 +3540,6 @@ L_089C8FA4: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9576), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3560,7 +3550,6 @@ L_089C8FB8: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9580), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3571,7 +3560,6 @@ L_089C8FCC: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9584), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3582,7 +3570,6 @@ L_089C8FE0: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9588), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3593,7 +3580,6 @@ L_089C8FF4: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9592), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3604,7 +3590,6 @@ L_089C9008: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9596), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3615,7 +3600,6 @@ L_089C901C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9548), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3626,7 +3610,6 @@ L_089C9030: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9552), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3637,7 +3620,6 @@ L_089C9044: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_28 + static_cast(9600), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3645,7 +3627,6 @@ L_089C9044: } L_089C9058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C906C; } @@ -3664,18 +3645,26 @@ L_089C906C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C9078: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(8), aot_run_words); } aot_gpr_31 = (0x089C9090u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9090u) goto L_089C9090; AOT_REGCACHE_SYNC_OUT(); return; L_089C9090: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9128; } @@ -3683,7 +3672,6 @@ L_089C9090: } L_089C9098: aot_gpr_31 = (0x089C90A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C90A0u) goto L_089C90A0; AOT_REGCACHE_SYNC_OUT(); return; L_089C90A0: @@ -3719,7 +3707,6 @@ L_089C90C8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089C9108; @@ -3729,7 +3716,6 @@ L_089C9108: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089C9120; @@ -3759,21 +3745,51 @@ L_089C9130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C9144: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C914C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C9154: aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; @@ -3793,7 +3809,6 @@ L_089C9160: } L_089C9168: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C9178; } @@ -3812,11 +3827,20 @@ L_089C9178: goto L_089C917C; L_089C917C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C9184: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3881,7 +3905,17 @@ L_089C9184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089C9248: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-2480)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3899,11 +3933,9 @@ L_089C9248: } L_089C92A4: aot_gpr_31 = (0x089C92ACu); - // nop goto L_089C8B58; L_089C92AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C935C; } @@ -3920,7 +3952,6 @@ L_089C92C0: aot_gpr_4 = (aot_gpr_4 + static_cast(8192)); aot_gpr_4 = (aot_gpr_2 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C9354; } @@ -3944,7 +3975,6 @@ L_089C92D4: aot_gpr_5 = (aot_gpr_5 + static_cast(-6992)); ctx.gpr[18] = (ctx.gpr[18] + aot_gpr_5); aot_gpr_31 = (0x089C931Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 48u, 0x08960450u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C931Cu) goto L_089C931C; AOT_REGCACHE_SYNC_OUT(); return; L_089C931C: @@ -3969,14 +3999,12 @@ L_089C931C: AOT_REGCACHE_SYNC_OUT(); return; L_089C9334: aot_gpr_31 = (0x089C933Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C933Cu) goto L_089C933C; AOT_REGCACHE_SYNC_OUT(); return; L_089C933C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9364; } @@ -3984,7 +4012,6 @@ L_089C933C: } L_089C934C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C94C0; } @@ -4009,7 +4036,6 @@ L_089C935C: L_089C9364: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C939C; } @@ -4017,14 +4043,12 @@ L_089C9364: } L_089C9370: aot_gpr_31 = (0x089C9378u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9378u) goto L_089C9378; AOT_REGCACHE_SYNC_OUT(); return; L_089C9378: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C939C; } @@ -4032,12 +4056,10 @@ L_089C9378: } L_089C9388: aot_gpr_31 = (0x089C9390u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9390u) goto L_089C9390; AOT_REGCACHE_SYNC_OUT(); return; L_089C9390: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C939C; } @@ -4049,7 +4071,6 @@ L_089C9398: L_089C939C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C93B4; } @@ -4081,7 +4102,6 @@ L_089C93E0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9556))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C93F8; } @@ -4089,7 +4109,6 @@ L_089C93E0: } L_089C93F0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C94C0; } @@ -4102,7 +4121,6 @@ L_089C93F8: AOT_REGCACHE_SYNC_OUT(); return; L_089C9400: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C948C; } @@ -4114,7 +4132,6 @@ L_089C9408: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5440))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9494; } @@ -4130,9 +4147,7 @@ L_089C9420: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5432))); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C9494; } @@ -4153,7 +4168,6 @@ L_089C9450: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(5468))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9494; } @@ -4161,7 +4175,6 @@ L_089C9450: } L_089C948C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089C94C0; } @@ -4170,14 +4183,12 @@ L_089C948C: L_089C9494: ctx.gpr[20] = (0u | 1u); aot_gpr_31 = (0x089C94A0u); - // nop goto L_089C9078; L_089C94A0: aot_gpr_4 = (16928u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } aot_gpr_31 = (0x089C94B4u); - // nop goto L_089C9078; L_089C94B4: aot_gpr_4 = (17008u << 16u); @@ -4196,12 +4207,10 @@ L_089C94C0: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[28] = ctx.fpr[28] + aot_fpr_12; aot_gpr_31 = (0x089C94F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C94F0u) goto L_089C94F0; AOT_REGCACHE_SYNC_OUT(); return; L_089C94F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C955C; } @@ -4209,13 +4218,11 @@ L_089C94F0: } L_089C94F8: aot_gpr_31 = (0x089C9500u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9500u) goto L_089C9500; AOT_REGCACHE_SYNC_OUT(); return; L_089C9500: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089C955C; } @@ -4228,7 +4235,6 @@ L_089C950C: AOT_REGCACHE_SYNC_OUT(); return; L_089C9514: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C955C; } @@ -4237,7 +4243,6 @@ L_089C9514: L_089C951C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C955C; } @@ -4272,7 +4277,6 @@ L_089C9544: } L_089C954C: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C955C; } @@ -4284,12 +4288,10 @@ L_089C9554: goto L_089C955C; L_089C955C: aot_gpr_31 = (0x089C9564u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9564u) goto L_089C9564; AOT_REGCACHE_SYNC_OUT(); return; L_089C9564: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9574; } @@ -4302,7 +4304,6 @@ L_089C956C: L_089C9574: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C9588; } @@ -4322,12 +4323,10 @@ L_089C9588: L_089C958C: ctx.fpr[30] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(4256))); aot_gpr_31 = (0x089C9598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9598u) goto L_089C9598; AOT_REGCACHE_SYNC_OUT(); return; L_089C9598: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C95A8; } @@ -4352,7 +4351,6 @@ L_089C95A8: ctx.fpr[15] = std::bit_cast(ctx.gpr[19]); ctx.fpr[15] = static_cast(static_cast(std::bit_cast(ctx.fpr[15]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[28])); goto L_089C95F8; @@ -4368,7 +4366,6 @@ L_089C95F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(9612))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C9614; } @@ -4376,7 +4373,6 @@ L_089C95F8: } L_089C960C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -4384,7 +4380,6 @@ L_089C960C: } L_089C9614: aot_gpr_31 = (0x089C961Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C961Cu) goto L_089C961C; AOT_REGCACHE_SYNC_OUT(); return; L_089C961C: @@ -4411,7 +4406,6 @@ L_089C9630: goto L_089C9658; L_089C9658: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089C9680; } @@ -4422,7 +4416,6 @@ L_089C9660: goto L_089C9664; L_089C9664: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C9680; } @@ -4431,7 +4424,6 @@ L_089C9664: L_089C966C: ctx.gpr[18] = (0u | 6u); aot_gpr_31 = (0x089C9678u); - // nop goto L_089C81B8; L_089C9678: { const bool branch_taken = 0u == 0u; @@ -4445,7 +4437,6 @@ L_089C9680: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9724; } @@ -4457,7 +4448,6 @@ L_089C9690: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(130))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9714; } @@ -4465,7 +4455,6 @@ L_089C9690: } L_089C96A8: aot_gpr_31 = (0x089C96B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C96B0u) goto L_089C96B0; AOT_REGCACHE_SYNC_OUT(); return; L_089C96B0: @@ -4494,7 +4483,6 @@ L_089C96E0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(130))); aot_gpr_5 = (0u | 1000u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C9708; } @@ -4518,7 +4506,6 @@ L_089C9708: goto L_089C970C; L_089C970C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C9724; } @@ -4528,7 +4515,6 @@ L_089C9714: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C9690; } @@ -4537,7 +4523,6 @@ L_089C9714: L_089C9724: aot_gpr_4 = (0u | 9u); { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_089C9738; } @@ -4545,7 +4530,6 @@ L_089C9724: } L_089C9730: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089C984C; } @@ -4553,7 +4537,6 @@ L_089C9730: } L_089C9738: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089C97E8; } @@ -4574,9 +4557,7 @@ L_089C9750: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C97E8; } @@ -4592,7 +4573,6 @@ L_089C9788: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(16))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C97C4; } @@ -4602,7 +4582,6 @@ L_089C9798: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(20))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C97C4; } @@ -4621,7 +4600,6 @@ L_089C97A8: } L_089C97BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C97E0; } @@ -4652,7 +4630,6 @@ L_089C97E0: } L_089C97E8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089C9800; } @@ -4680,7 +4657,6 @@ L_089C9808: L_089C980C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_089C9830; } @@ -4721,7 +4697,6 @@ L_089C9838: goto L_089C984C; L_089C984C: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089C9864; } @@ -4730,7 +4705,6 @@ L_089C984C: L_089C9854: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-11832))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089C9864; } @@ -4750,7 +4724,6 @@ L_089C9864: } L_089C9870: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C98AC; } @@ -4759,7 +4732,6 @@ L_089C9870: L_089C9878: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C989C; } @@ -4767,7 +4739,6 @@ L_089C9878: } L_089C9884: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089C98A4; } @@ -4775,7 +4746,6 @@ L_089C9884: } L_089C988C: aot_gpr_31 = (0x089C9894u); - // nop goto L_089C842C; L_089C9894: { const bool branch_taken = 0u == 0u; @@ -4815,7 +4785,6 @@ L_089C98B0: } L_089C98BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9908; } @@ -4823,7 +4792,6 @@ L_089C98BC: } L_089C98C4: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089C9908; } @@ -4843,7 +4811,6 @@ L_089C98E0: aot_fpr_12 = ctx.fpr[28] + aot_fpr_12; ctx.fpr[22] = ctx.fpr[22] + aot_fpr_12; aot_gpr_31 = (0x089C98F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C98F8u) goto L_089C98F8; AOT_REGCACHE_SYNC_OUT(); return; L_089C98F8: @@ -4871,7 +4838,6 @@ L_089C9908: L_089C993C: aot_gpr_4 = (0u < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -4880,7 +4846,6 @@ L_089C993C: L_089C9948: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-11832))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089C9B5C; } @@ -4901,7 +4866,6 @@ L_089C9960: AOT_REGCACHE_SYNC_OUT(); return; L_089C9970: { const bool branch_taken = ctx.gpr[30] == aot_gpr_2; - // nop if (branch_taken) { goto L_089C9B5C; } @@ -4909,7 +4873,6 @@ L_089C9970: } L_089C9978: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089C9A34; } @@ -4926,7 +4889,6 @@ L_089C9990: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9A34; } @@ -4938,7 +4900,6 @@ L_089C99A0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(248))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9A24; } @@ -4946,7 +4907,6 @@ L_089C99A0: } L_089C99B8: aot_gpr_31 = (0x089C99C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C99C0u) goto L_089C99C0; AOT_REGCACHE_SYNC_OUT(); return; L_089C99C0: @@ -4975,7 +4935,6 @@ L_089C99F0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(248))); aot_gpr_5 = (0u | 1000u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C9A18; } @@ -4999,7 +4958,6 @@ L_089C9A18: goto L_089C9A1C; L_089C9A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C9A34; } @@ -5009,7 +4967,6 @@ L_089C9A24: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C99A0; } @@ -5018,7 +4975,6 @@ L_089C9A24: L_089C9A34: aot_gpr_4 = (0u | 9u); { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_089C9A48; } @@ -5026,7 +4982,6 @@ L_089C9A34: } L_089C9A40: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089C9B5C; } @@ -5034,7 +4989,6 @@ L_089C9A40: } L_089C9A48: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089C9AF8; } @@ -5055,9 +5009,7 @@ L_089C9A60: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C9AF8; } @@ -5073,7 +5025,6 @@ L_089C9A98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(16))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C9AD4; } @@ -5083,7 +5034,6 @@ L_089C9AA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(20))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089C9AD4; } @@ -5102,7 +5052,6 @@ L_089C9AB8: } L_089C9ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089C9AF0; } @@ -5133,7 +5082,6 @@ L_089C9AF0: } L_089C9AF8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089C9B10; } @@ -5161,7 +5109,6 @@ L_089C9B18: L_089C9B1C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_089C9B40; } @@ -5236,7 +5183,6 @@ L_089C9BC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(-1044))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089C9BE0; } @@ -5247,7 +5193,6 @@ L_089C9BDC: goto L_089C9BE0; L_089C9BE0: aot_gpr_31 = (0x089C9BE8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9BE8u) goto L_089C9BE8; AOT_REGCACHE_SYNC_OUT(); return; L_089C9BE8: @@ -5255,7 +5200,6 @@ L_089C9BE8: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -5314,7 +5258,6 @@ L_089C9C60: } L_089C9C68: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C9CB8; } @@ -5334,9 +5277,7 @@ L_089C9C80: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C9CB8; } @@ -5350,7 +5291,6 @@ L_089C9CA4: AOT_REGCACHE_SYNC_OUT(); return; L_089C9CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -5367,7 +5307,6 @@ L_089C9CB8: } L_089C9CC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9E60; } @@ -5375,7 +5314,6 @@ L_089C9CC4: } L_089C9CCC: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089C9E60; } @@ -5383,7 +5321,6 @@ L_089C9CCC: } L_089C9CD4: aot_gpr_31 = (0x089C9CDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9CDCu) goto L_089C9CDC; AOT_REGCACHE_SYNC_OUT(); return; L_089C9CDC: @@ -5402,7 +5339,6 @@ L_089C9CE4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(-170))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089C9E48; } @@ -5410,12 +5346,10 @@ L_089C9CE4: } L_089C9D04: aot_gpr_31 = (0x089C9D0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9D0Cu) goto L_089C9D0C; AOT_REGCACHE_SYNC_OUT(); return; L_089C9D0C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C9E48; } @@ -5435,7 +5369,6 @@ L_089C9D14: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_fpr_20 = static_cast(static_cast(std::bit_cast(aot_fpr_20))); aot_gpr_31 = (0x089C9D4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089C9D4Cu) goto L_089C9D4C; AOT_REGCACHE_SYNC_OUT(); return; L_089C9D4C: @@ -5466,7 +5399,6 @@ L_089C9D80: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089C9E48; } @@ -5479,7 +5411,6 @@ L_089C9D98: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1360))); aot_gpr_6 = (static_cast(aot_gpr_6) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089C9E04; } @@ -5489,7 +5420,6 @@ L_089C9DB4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1360))); aot_gpr_6 = (static_cast(aot_gpr_6) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089C9E04; } @@ -5535,9 +5465,7 @@ L_089C9DC4: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089C9E04; } @@ -5556,7 +5484,6 @@ L_089C9E04: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(-170))); aot_gpr_5 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C9E34; } @@ -5575,7 +5502,6 @@ L_089C9E34: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(2192))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089C9D98; } @@ -5589,7 +5515,6 @@ L_089C9E48: goto L_089C84BC; L_089C9E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -5600,7 +5525,6 @@ L_089C9E60: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(16))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089C9EA0; } @@ -5631,7 +5555,6 @@ L_089C9E74: AOT_REGCACHE_SYNC_OUT(); return; L_089C9E98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -5641,7 +5564,6 @@ L_089C9EA0: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA6C8; } @@ -5650,7 +5572,6 @@ L_089C9EA0: L_089C9EB0: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C9FF8; } @@ -5658,7 +5579,6 @@ L_089C9EB0: } L_089C9EBC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089C9F08; } @@ -5671,7 +5591,6 @@ L_089C9EC4: AOT_REGCACHE_SYNC_OUT(); return; L_089C9ECC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9F00; } @@ -5686,7 +5605,6 @@ L_089C9ED4: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(56), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA040; } @@ -5694,7 +5612,6 @@ L_089C9ED4: } L_089C9EF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA0EC; } @@ -5711,7 +5628,6 @@ L_089C9F00: L_089C9F08: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C9F2C; } @@ -5724,7 +5640,6 @@ L_089C9F14: AOT_REGCACHE_SYNC_OUT(); return; L_089C9F1C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C9ED4; } @@ -5741,7 +5656,6 @@ L_089C9F24: L_089C9F2C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C9F68; } @@ -5754,7 +5668,6 @@ L_089C9F38: AOT_REGCACHE_SYNC_OUT(); return; L_089C9F40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9F60; } @@ -5772,7 +5685,6 @@ L_089C9F50: AOT_REGCACHE_SYNC_OUT(); return; L_089C9F58: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C9ED4; } @@ -5789,7 +5701,6 @@ L_089C9F60: L_089C9F68: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C9FA4; } @@ -5802,7 +5713,6 @@ L_089C9F74: AOT_REGCACHE_SYNC_OUT(); return; L_089C9F7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9F9C; } @@ -5820,7 +5730,6 @@ L_089C9F8C: AOT_REGCACHE_SYNC_OUT(); return; L_089C9F94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C9ED4; } @@ -5837,7 +5746,6 @@ L_089C9F9C: L_089C9FA4: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089C9ED4; } @@ -5850,7 +5758,6 @@ L_089C9FB0: AOT_REGCACHE_SYNC_OUT(); return; L_089C9FB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9FF0; } @@ -5868,7 +5775,6 @@ L_089C9FC8: AOT_REGCACHE_SYNC_OUT(); return; L_089C9FD0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089C9FF0; } @@ -5886,7 +5792,6 @@ L_089C9FE0: AOT_REGCACHE_SYNC_OUT(); return; L_089C9FE8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C9ED4; } @@ -5929,7 +5834,6 @@ L_089CA018: AOT_REGCACHE_SYNC_OUT(); return; L_089CA030: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089C9ED4; } @@ -5945,12 +5849,10 @@ L_089CA038: } L_089CA040: aot_gpr_31 = (0x089CA048u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CA048u) goto L_089CA048; AOT_REGCACHE_SYNC_OUT(); return; L_089CA048: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089CA0EC; } @@ -5974,7 +5876,6 @@ L_089CA078: { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_20 = ctx.fpr[22] + aot_fpr_20; aot_gpr_31 = (0x089CA08Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CA08Cu) goto L_089CA08C; AOT_REGCACHE_SYNC_OUT(); return; L_089CA08C: @@ -5982,14 +5883,12 @@ L_089CA08C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[22] = ctx.fpr[22] + aot_fpr_12; aot_gpr_31 = (0x089CA0A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CA0A0u) goto L_089CA0A0; AOT_REGCACHE_SYNC_OUT(); return; L_089CA0A0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA0B4; } @@ -6000,14 +5899,12 @@ L_089CA0B0: goto L_089CA0B4; L_089CA0B4: aot_gpr_31 = (0x089CA0BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CA0BCu) goto L_089CA0BC; AOT_REGCACHE_SYNC_OUT(); return; L_089CA0BC: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA0D0; } @@ -6028,7 +5925,6 @@ L_089CA0D0: L_089CA0EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA108; } @@ -6040,7 +5936,6 @@ L_089CA0F8: goto L_089C8A90; L_089CA100: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CA130; } @@ -6057,7 +5952,6 @@ L_089CA108: AOT_REGCACHE_SYNC_OUT(); return; L_089CA120: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CA138; } @@ -6083,7 +5977,6 @@ L_089CA138: aot_gpr_4 = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA1AC; } @@ -6110,7 +6003,6 @@ L_089CA168: aot_fpr_12 = ctx.fpr[0] + aot_fpr_12; aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA1A0; } @@ -6119,7 +6011,6 @@ L_089CA168: L_089CA184: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(56))); goto L_089CA1A8; @@ -6215,7 +6106,6 @@ L_089CA1F8: goto L_089CA200; L_089CA200: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA260; } @@ -6262,16 +6152,13 @@ L_089CA208: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089CA240u); - // nop goto L_089C9078; L_089CA240: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CA260; } @@ -6300,7 +6187,6 @@ L_089CA280: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CA29C; } @@ -6315,7 +6201,6 @@ L_089CA298: goto L_089CA29C; L_089CA29C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089CA6B0; } @@ -6332,7 +6217,6 @@ L_089CA2A4: L_089CA2BC: ctx.gpr[22] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CA2E0; } @@ -6342,7 +6226,6 @@ L_089CA2C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CA2E0; } @@ -6359,7 +6242,6 @@ L_089CA2E0: goto L_089C9144; L_089CA2EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6417,7 +6299,6 @@ L_089CA2F4: L_089CA360: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(2320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6427,7 +6308,6 @@ L_089CA36C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(2318))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CA38C; } @@ -6437,7 +6317,6 @@ L_089CA37C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(2318))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6447,7 +6326,6 @@ L_089CA38C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6457,7 +6335,6 @@ L_089CA39C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6467,9 +6344,7 @@ L_089CA3AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7896))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CA43C; } @@ -6490,7 +6365,6 @@ L_089CA3C4: AOT_REGCACHE_SYNC_OUT(); return; L_089CA3EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6500,7 +6374,6 @@ L_089CA3F4: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CA43C; } @@ -6521,7 +6394,6 @@ L_089CA418: aot_gpr_5 = (ctx.gpr[29] + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2324))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_089CA42C; } @@ -6534,7 +6406,6 @@ L_089CA42C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089CA404; } @@ -6542,7 +6413,6 @@ L_089CA42C: } L_089CA43C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_089CA500; } @@ -6566,7 +6436,6 @@ L_089CA454: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(2260), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(2256), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089CA480u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CA480u) goto L_089CA480; AOT_REGCACHE_SYNC_OUT(); return; L_089CA480: @@ -6600,7 +6469,6 @@ L_089CA4B0: } L_089CA4B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA4E0; } @@ -6617,7 +6485,6 @@ L_089CA4C0: AOT_REGCACHE_SYNC_OUT(); return; L_089CA4D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA4F8; } @@ -6634,7 +6501,6 @@ L_089CA4E0: AOT_REGCACHE_SYNC_OUT(); return; L_089CA4F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA644; } @@ -6642,7 +6508,6 @@ L_089CA4F8: } L_089CA500: aot_gpr_31 = (0x089CA508u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CA508u) goto L_089CA508; AOT_REGCACHE_SYNC_OUT(); return; L_089CA508: @@ -6686,7 +6551,6 @@ L_089CA564: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(56))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CA644; } @@ -6695,7 +6559,6 @@ L_089CA564: L_089CA574: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(1032))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA5B8; } @@ -6709,7 +6572,6 @@ L_089CA580: AOT_REGCACHE_SYNC_OUT(); return; L_089CA58C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089CA5B0; } @@ -6778,11 +6640,9 @@ L_089CA5B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089CA604u); - // nop goto L_089C89A0; L_089CA604: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CA644; } @@ -6796,7 +6656,6 @@ L_089CA60C: AOT_REGCACHE_SYNC_OUT(); return; L_089CA618: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089CA63C; } @@ -6824,7 +6683,6 @@ L_089CA63C: } L_089CA644: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089CA678; } @@ -6850,7 +6708,6 @@ L_089CA664: AOT_REGCACHE_SYNC_OUT(); return; L_089CA670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA67C; } @@ -6877,7 +6734,6 @@ L_089CA688: } L_089CA698: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA6A8; } @@ -6893,7 +6749,6 @@ L_089CA6A0: } L_089CA6A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA6B8; } @@ -6911,7 +6766,6 @@ L_089CA6B8: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089C9EB0; } @@ -6945,7 +6799,17 @@ L_089CA6CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CA714: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-160)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7035,7 +6899,6 @@ L_089CA7B4: } L_089CA7BC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CA8FC; } @@ -7043,7 +6906,6 @@ L_089CA7BC: } L_089CA7C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA914; } @@ -7069,7 +6931,6 @@ L_089CA7D4: L_089CA7E0: aot_gpr_4 = (static_cast(aot_gpr_4) < 204 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA914; } @@ -7077,7 +6938,6 @@ L_089CA7E0: } L_089CA7EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA8B4; } @@ -7085,7 +6945,6 @@ L_089CA7EC: } L_089CA7F4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CA914; } @@ -7095,7 +6954,6 @@ L_089CA7FC: ctx.gpr[17] = (0u | 6u); ctx.gpr[22] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7119,7 +6977,6 @@ L_089CA814: L_089CA820: aot_gpr_4 = (static_cast(aot_gpr_4) < 246 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA914; } @@ -7129,7 +6986,6 @@ L_089CA82C: ctx.gpr[17] = (0u | 6u); ctx.gpr[22] = (0u | 4u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7137,7 +6993,6 @@ L_089CA82C: } L_089CA83C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CA7FC; } @@ -7145,7 +7000,6 @@ L_089CA83C: } L_089CA844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA914; } @@ -7157,16 +7011,24 @@ L_089CA84C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3632))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CA864: ctx.gpr[17] = (0u | 6u); ctx.gpr[22] = (ctx.gpr[17] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7176,7 +7038,6 @@ L_089CA874: ctx.gpr[17] = (0u | 6u); ctx.gpr[22] = (0u | 2u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7186,7 +7047,6 @@ L_089CA884: ctx.gpr[17] = (0u | 6u); ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7196,7 +7056,6 @@ L_089CA894: ctx.gpr[17] = (0u | 16u); ctx.gpr[22] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7206,7 +7065,6 @@ L_089CA8A4: ctx.gpr[17] = (0u | 17u); ctx.gpr[22] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7226,7 +7084,6 @@ L_089CA8C4: ctx.gpr[17] = (0u | 6u); ctx.gpr[22] = (0u | 5u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA8E4; } @@ -7238,7 +7095,6 @@ L_089CA8D4: goto L_089CA8DC; L_089CA8DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7256,7 +7112,6 @@ L_089CA8E4: } L_089CA8F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA914; } @@ -7264,7 +7119,6 @@ L_089CA8F4: } L_089CA8FC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CA914; } @@ -7274,7 +7128,6 @@ L_089CA904: ctx.gpr[22] = (0u | 35u); ctx.gpr[17] = (0u | 4u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7285,7 +7138,6 @@ L_089CA914: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CA97C; } @@ -7301,7 +7153,6 @@ L_089CA928: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CA96C; } @@ -7316,7 +7167,6 @@ L_089CA95C: ctx.gpr[22] = (aot_gpr_2 | 0u); ctx.gpr[21] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CA97C; } @@ -7326,7 +7176,6 @@ L_089CA96C: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CA928; } @@ -7335,7 +7184,6 @@ L_089CA96C: L_089CA97C: aot_gpr_4 = (0u | 9u); { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_089CA990; } @@ -7343,7 +7191,6 @@ L_089CA97C: } L_089CA988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAB24; } @@ -7409,7 +7256,6 @@ L_089CA9EC: AOT_REGCACHE_SYNC_OUT(); return; L_089CAA04: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CAAD8; } @@ -7420,7 +7266,6 @@ L_089CAA0C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_6 = (0u | 231u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089CAA30; } @@ -7430,7 +7275,6 @@ L_089CAA20: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_6 = (0u | 232u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089CAA64; } @@ -7456,7 +7300,6 @@ L_089CAA50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(52))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089CAA64; } @@ -7493,7 +7336,6 @@ L_089CAA7C: AOT_REGCACHE_SYNC_OUT(); return; L_089CAA84: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CAAD8; } @@ -7524,7 +7366,6 @@ L_089CAAAC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAAD8; } @@ -7532,7 +7373,6 @@ L_089CAAAC: } L_089CAAD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CAAF0; } @@ -7555,7 +7395,6 @@ L_089CAAE0: L_089CAAF0: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_089CAB00; } @@ -7585,7 +7424,6 @@ L_089CAB20: goto L_089CAB24; L_089CAB24: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089CAB94; } @@ -7620,7 +7458,6 @@ L_089CAB4C: AOT_REGCACHE_SYNC_OUT(); return; L_089CAB64: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CAB94; } @@ -7672,7 +7509,6 @@ L_089CABAC: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAC20; } @@ -7697,7 +7533,6 @@ L_089CAC14: AOT_REGCACHE_SYNC_OUT(); return; L_089CAC20: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089CAC38; } @@ -7729,7 +7564,17 @@ L_089CAC38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CAC6C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-128)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7754,11 +7599,20 @@ L_089CACAC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3560))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CACC8: ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x089CACD4u); @@ -7832,7 +7686,6 @@ L_089CAD3C: L_089CAD44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-11828))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CADFC; } @@ -7840,7 +7693,6 @@ L_089CAD44: } L_089CAD50: aot_gpr_31 = (0x089CAD58u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CAD58u) goto L_089CAD58; AOT_REGCACHE_SYNC_OUT(); return; L_089CAD58: @@ -7871,7 +7723,6 @@ L_089CAD74: } L_089CAD80: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089CADD0; } @@ -7879,7 +7730,6 @@ L_089CAD80: } L_089CAD88: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089CADB8; } @@ -7888,7 +7738,6 @@ L_089CAD88: L_089CAD90: ctx.gpr[16] = (0u | 19u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CADD0; } @@ -7904,7 +7753,6 @@ L_089CAD9C: } L_089CADA4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CADD0; } @@ -7913,7 +7761,6 @@ L_089CADA4: L_089CADAC: ctx.gpr[16] = (0u | 24u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CADD0; } @@ -7922,7 +7769,6 @@ L_089CADAC: L_089CADB8: ctx.gpr[16] = (0u | 4u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CADD0; } @@ -7931,7 +7777,6 @@ L_089CADB8: L_089CADC4: ctx.gpr[16] = (0u | 3u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CADD0; } @@ -7939,7 +7784,6 @@ L_089CADC4: } L_089CADD0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089CADFC; } @@ -7966,7 +7810,6 @@ L_089CADF0: L_089CADFC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAE2C; } @@ -7974,7 +7817,6 @@ L_089CADFC: } L_089CAE08: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089CAE2C; } @@ -7988,7 +7830,6 @@ L_089CAE10: L_089CAE18: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAE2C; } @@ -8081,7 +7922,6 @@ L_089CAEAC: L_089CAEB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAEE4; } @@ -8089,7 +7929,6 @@ L_089CAEB4: } L_089CAEC0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089CAEE4; } @@ -8103,7 +7942,6 @@ L_089CAEC8: L_089CAED0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAEE4; } @@ -8195,7 +8033,6 @@ L_089CAF60: L_089CAF68: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAF98; } @@ -8203,7 +8040,6 @@ L_089CAF68: } L_089CAF74: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089CAF98; } @@ -8217,7 +8053,6 @@ L_089CAF7C: L_089CAF84: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CAF98; } @@ -8309,7 +8144,6 @@ L_089CB014: L_089CB01C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB04C; } @@ -8317,7 +8151,6 @@ L_089CB01C: } L_089CB028: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089CB04C; } @@ -8331,7 +8164,6 @@ L_089CB030: L_089CB038: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB04C; } @@ -8423,7 +8255,6 @@ L_089CB0CC: AOT_REGCACHE_SYNC_OUT(); return; L_089CB0D4: aot_gpr_31 = (0x089CB0DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CB0DCu) goto L_089CB0DC; AOT_REGCACHE_SYNC_OUT(); return; L_089CB0DC: @@ -8442,7 +8273,6 @@ L_089CB0F0: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_4 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB130; } @@ -8492,7 +8322,6 @@ L_089CB164: L_089CB170: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB1A0; } @@ -8500,7 +8329,6 @@ L_089CB170: } L_089CB17C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089CB1A0; } @@ -8514,7 +8342,6 @@ L_089CB184: L_089CB18C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB1A0; } @@ -8615,7 +8442,6 @@ L_089CB228: } L_089CB234: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_089CB260; } @@ -8642,7 +8468,6 @@ L_089CB254: L_089CB260: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB290; } @@ -8650,7 +8475,6 @@ L_089CB260: } L_089CB26C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089CB290; } @@ -8664,7 +8488,6 @@ L_089CB274: L_089CB27C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB290; } @@ -8714,7 +8537,17 @@ L_089CB2B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CB2D4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-256)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8802,7 +8635,6 @@ L_089CB38C: goto L_089CB3C8; L_089CB3C8: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_089CB3E0; } @@ -8847,7 +8679,6 @@ L_089CB404: L_089CB408: ctx.gpr[16] = (ctx.gpr[17] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089CB5E8; } @@ -8860,7 +8691,6 @@ L_089CB414: AOT_REGCACHE_SYNC_OUT(); return; L_089CB41C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CB5E8; } @@ -8970,7 +8800,6 @@ L_089CB424: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(476))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CB5A0; } @@ -8981,7 +8810,6 @@ L_089CB494: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(68))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CB4DC; } @@ -8992,7 +8820,6 @@ L_089CB4A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(244))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CB524; } @@ -9011,7 +8838,6 @@ L_089CB4BC: AOT_REGCACHE_SYNC_OUT(); return; L_089CB4D4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CB524; } @@ -9019,9 +8845,7 @@ L_089CB4D4: } L_089CB4DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB598; } @@ -9035,7 +8859,6 @@ L_089CB4EC: AOT_REGCACHE_SYNC_OUT(); return; L_089CB4F8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CB598; } @@ -9055,7 +8878,6 @@ L_089CB500: AOT_REGCACHE_SYNC_OUT(); return; L_089CB51C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CB598; } @@ -9063,9 +8885,7 @@ L_089CB51C: } L_089CB524: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB568; } @@ -9073,7 +8893,6 @@ L_089CB524: } L_089CB534: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(464))); goto L_089CB558; @@ -9086,7 +8905,6 @@ L_089CB544: AOT_REGCACHE_SYNC_OUT(); return; L_089CB54C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CB568; } @@ -9099,7 +8917,6 @@ L_089CB558: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB598; } @@ -9113,7 +8930,6 @@ L_089CB568: AOT_REGCACHE_SYNC_OUT(); return; L_089CB574: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CB598; } @@ -9133,7 +8949,6 @@ L_089CB57C: AOT_REGCACHE_SYNC_OUT(); return; L_089CB598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CB5E8; } @@ -9141,9 +8956,7 @@ L_089CB598: } L_089CB5A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB5E8; } @@ -9151,9 +8964,7 @@ L_089CB5A0: } L_089CB5B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB5E8; } @@ -9163,7 +8974,6 @@ L_089CB5C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(476))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CB5E8; } @@ -9175,7 +8985,6 @@ L_089CB5D0: goto L_089C8128; L_089CB5D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CB5E8; } @@ -9238,7 +9047,6 @@ L_089CB650: goto L_089CB668; L_089CB668: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_089CB680; } @@ -9282,7 +9090,6 @@ L_089CB6A4: goto L_089CB6A8; L_089CB6A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB6F8; } @@ -9340,9 +9147,7 @@ L_089CB6B0: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB6F8; } @@ -9350,7 +9155,6 @@ L_089CB6B0: } L_089CB6F0: aot_gpr_31 = (0x089CB6F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 881u, 0x089C7DB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CB6F8u) goto L_089CB6F8; AOT_REGCACHE_SYNC_OUT(); return; L_089CB6F8: @@ -9446,7 +9250,6 @@ L_089CB7AC: goto L_089CB7B4; L_089CB7B4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CBF20; } @@ -9459,7 +9262,6 @@ L_089CB7BC: AOT_REGCACHE_SYNC_OUT(); return; L_089CB7C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CBF20; } @@ -9472,7 +9274,6 @@ L_089CB7CC: AOT_REGCACHE_SYNC_OUT(); return; L_089CB7D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CBF20; } @@ -9485,7 +9286,6 @@ L_089CB7DC: AOT_REGCACHE_SYNC_OUT(); return; L_089CB7E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CBF20; } @@ -9506,7 +9306,6 @@ L_089CB7EC: } L_089CB808: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB828; } @@ -9514,7 +9313,6 @@ L_089CB808: } L_089CB810: aot_gpr_31 = (0x089CB818u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 562u, 0x08A363C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CB818u) goto L_089CB818; AOT_REGCACHE_SYNC_OUT(); return; L_089CB818: @@ -9527,7 +9325,6 @@ L_089CB818: } L_089CB820: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CB834; } @@ -9542,7 +9339,6 @@ L_089CB834: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB864; } @@ -9555,7 +9351,6 @@ L_089CB844: AOT_REGCACHE_SYNC_OUT(); return; L_089CB84C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CB864; } @@ -9568,7 +9363,6 @@ L_089CB854: AOT_REGCACHE_SYNC_OUT(); return; L_089CB85C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CBF20; } @@ -9620,7 +9414,6 @@ L_089CB8C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(464))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB8E4; } @@ -9629,7 +9422,6 @@ L_089CB8C4: L_089CB8D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CB8E4; } @@ -9640,7 +9432,6 @@ L_089CB8E0: goto L_089CB8E4; L_089CB8E4: aot_gpr_31 = (0x089CB8ECu); - // nop goto L_089C9078; L_089CB8EC: aot_gpr_4 = (17026u << 16u); @@ -9649,9 +9440,7 @@ L_089CB8EC: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB918; } @@ -9669,7 +9458,6 @@ L_089CB918: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CB95C; } @@ -9677,7 +9465,6 @@ L_089CB918: } L_089CB928: aot_gpr_31 = (0x089CB930u); - // nop goto L_089C9078; L_089CB930: aot_gpr_4 = (16972u << 16u); @@ -9686,9 +9473,7 @@ L_089CB930: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1952))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CB95C; } @@ -9704,16 +9489,13 @@ L_089CB954: } L_089CB95C: aot_gpr_31 = (0x089CB964u); - // nop goto L_089C9078; L_089CB964: aot_gpr_4 = (16840u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CBAF0; } @@ -9724,7 +9506,6 @@ L_089CB980: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_28 + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9737,7 +9518,6 @@ L_089CB994: AOT_REGCACHE_SYNC_OUT(); return; L_089CB99C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9755,7 +9535,6 @@ L_089CB9A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9773,7 +9552,6 @@ L_089CB9D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9791,7 +9569,6 @@ L_089CBA04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9809,7 +9586,6 @@ L_089CBA34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9826,7 +9602,6 @@ L_089CBA64: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(245))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9843,7 +9618,6 @@ L_089CBA90: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(246))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9860,7 +9634,6 @@ L_089CBABC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(244))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CBB1C; } @@ -9878,7 +9651,6 @@ L_089CBAF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CBB10; } @@ -9903,7 +9675,6 @@ L_089CBB1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CBB30; } @@ -9914,7 +9685,6 @@ L_089CBB2C: goto L_089CBB30; L_089CBB30: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089CBC3C; } @@ -9923,7 +9693,6 @@ L_089CBB30: L_089CBB38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_28 + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CBC3C; } @@ -9959,7 +9728,6 @@ L_089CBB70: goto L_089CBB74; L_089CBB74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CBC3C; } @@ -9977,7 +9745,6 @@ L_089CBB80: goto L_089CBB8C; L_089CBB8C: aot_gpr_31 = (0x089CBB94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CBB94u) goto L_089CBB94; AOT_REGCACHE_SYNC_OUT(); return; L_089CBB94: @@ -9994,7 +9761,6 @@ L_089CBB98: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CBC3C; } @@ -10009,7 +9775,6 @@ L_089CBBC4: goto L_089CBBD0; L_089CBBD0: aot_gpr_31 = (0x089CBBD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CBBD8u) goto L_089CBBD8; AOT_REGCACHE_SYNC_OUT(); return; L_089CBBD8: @@ -10026,7 +9791,6 @@ L_089CBBE4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089CBC34; } @@ -10041,7 +9805,6 @@ L_089CBBFC: L_089CBC08: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CBC34; } @@ -10055,7 +9818,6 @@ L_089CBC14: AOT_REGCACHE_SYNC_OUT(); return; L_089CBC20: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CBC34; } @@ -10064,7 +9826,6 @@ L_089CBC20: L_089CBC28: ctx.gpr[20] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CBC3C; } @@ -10090,7 +9851,6 @@ L_089CBC44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CBEE8; } @@ -10100,7 +9860,6 @@ L_089CBC54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CBEE8; } @@ -10121,7 +9880,6 @@ L_089CBC64: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089CBC74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CBC74u) goto L_089CBC74; AOT_REGCACHE_SYNC_OUT(); return; L_089CBC74: @@ -10134,7 +9892,6 @@ L_089CBC74: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_gpr_31 = (0x089CBC9Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_28, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CBC9Cu) goto L_089CBC9C; AOT_REGCACHE_SYNC_OUT(); return; L_089CBC9C: @@ -10151,7 +9908,6 @@ L_089CBC9C: } L_089CBCB4: { const bool branch_taken = static_cast(ctx.gpr[21]) < 0; - // nop if (branch_taken) { goto L_089CBEE8; } @@ -10213,7 +9969,6 @@ L_089CBCBC: AOT_REGCACHE_SYNC_OUT(); return; L_089CBD68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CBEE8; } @@ -10229,7 +9984,6 @@ L_089CBD70: } L_089CBD78: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CBE3C; } @@ -10237,7 +9991,6 @@ L_089CBD78: } L_089CBD80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CBEE8; } @@ -10299,7 +10052,6 @@ L_089CBD88: AOT_REGCACHE_SYNC_OUT(); return; L_089CBE34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CBEE8; } @@ -10363,7 +10115,6 @@ L_089CBEE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CBF18; } @@ -10376,7 +10127,6 @@ L_089CBEF8: AOT_REGCACHE_SYNC_OUT(); return; L_089CBF00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089CBF18; } @@ -10436,7 +10186,17 @@ L_089CBF40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CBF88: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-144)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0114.cpp b/profiles/vcs/generated/generated_unit_0114.cpp index cfc1ea7..be2f8ec 100644 --- a/profiles/vcs/generated/generated_unit_0114.cpp +++ b/profiles/vcs/generated/generated_unit_0114.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0114[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 20, 0, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 25, 0, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 33, 0, - 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 42, - 0, 43, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, - 49, 0, 50, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, - 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 66, 0, 67, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, - 0, 71, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, - 0, 0, 79, 0, 0, 80, 0, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 88, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 0, 93, 0, 94, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 97, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 100, 0, - 101, 0, 0, 102, 0, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 0, 108, 0, 109, 0, 0, 0, 110, 0, 111, 0, - 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 115, 0, 0, 0, 116, 0, 117, 0, 118, 0, 0, 119, 0, - 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 0, 0, 0, 0, 123, 0, 124, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 129, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 132, - 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 0, 137, 0, 138, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, - 153, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 157, 0, 0, 158, 0, 159, 0, 0, 0, 0, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 163, 0, 164, 0, 165, 166, 0, 0, 0, 167, 0, 168, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 171, 0, 0, 172, 0, 0, - 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, - 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, - 0, 185, 0, 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 192, 0, 193, 0, 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 198, 0, 0, 199, 0, 0, 0, - 0, 200, 0, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 207, 0, 0, 0, 208, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, - 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, 221, 0, - 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, 0, - 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 0, - 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 240, 0, 241, 0, 242, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 0, 0, 251, 0, 252, 0, 0, 253, - 0, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 258, 0, 259, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, - 261, 262, 0, 263, 0, 264, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, - 269, 0, 270, 0, 271, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 274, 0, 275, 0, 0, 0, 276, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 278, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 282, 0, 283, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, - 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 298, 0, - 299, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 310, 0, 311, 0, 312, 0, 0, - 0, 313, 0, 0, 314, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 319, 0, 320, - 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 325, 0, 326, 0, 327, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 333, 0, 334, 0, 0, 0, - 335, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 340, 0, 341, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 345, 0, 0, 346, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, - 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, - 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, - 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, 0, 385, 0, - 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 0, 0, 0, - 396, 397, 398, 0, 399, 400, 401, 0, 402, 403, 404, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 408, 0, 0, - 0, 0, 409, 0, 0, 410, 0, 0, 411, 0, 412, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 416, 0, 417, - 418, 0, 0, 0, 419, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, - 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, - 430, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 433, 0, 434, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, - 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 0, 440, 0, 441, 442, 0, 0, 443, 0, 0, 0, 0, 0, 0, - 444, 0, 0, 445, 0, 0, 446, 447, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, - 0, 453, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 457, 0, 0, - 458, 0, 0, 0, 459, 0, 0, 460, 0, 0, 0, 0, 461, 0, 462, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, - 0, 0, 466, 0, 0, 467, 468, 0, 0, 0, 469, 0, 470, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, - 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 479, 480, 0, 0, - 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, - 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 492, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, - 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 511, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, - 0, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, - 0, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 522, 0, 0, 0, 523, 0, 524, 525, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 527, 0, 0, 0, 528, 529, 0, 0, 530, 0, 531, 0, 0, 532, 0, 0, 0, 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, - 536, 0, 0, 0, 537, 0, 538, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 542, 0, 543, 0, - 544, 0, 0, 545, 0, 0, 0, 0, 546, 0, 547, 548, 0, 0, 549, 0, 0, 550, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, - 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, - 0, 557, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 562, 0, 0, 0, 0, 0, - 0, 0, 0, 563, 0, 0, 564, 565, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 568, 0, 0, 569, 0, 0, 570, 0, 0, 571, 0, 0, 572, 0, 0, 573, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 0, 0, 578, 0, 579, 0, 0, 0, 580, 0, 0, 0, 0, 581, - 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 586, 0, 0, 587, 0, 0, - 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 0, 594, 0, 0, 0, 0, 595, 0, 596, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 601, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 604, 0, 605, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 0, 0, 608, - 0, 609, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 611, 0, 612, 0, 0, 0, 613, 0, 0, 0, 614, 615, 0, 616, 0, 617, 0, 0, - 0, 0, 0, 618, 619, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 622, 0, 623, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 626, 0, 627, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 633, - 0, 634, 0, 0, 0, 635, 0, 0, 0, 636, 637, 0, 638, 0, 639, 0, 0, 0, 0, 0, 640, 641, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 643, 0, 644, 0, 645, 0, 646, 0, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 650, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 0, - 0, 653, 0, 0, 0, 0, 0, 654, 0, 655, 0, 656, 0, 0, 0, 657, 0, 658, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 663, 0, 0, 664, - 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 0, 667, 0, 0, 668, 0, 0, 0, 0, 0, 0, 669, 670, 671, 0, 0, 0, 0, 672, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 676, - 0, 0, 0, 677, 0, 678, 0, 679, 0, 0, 680, 681, 0, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 685, 0, 686, 687, 0, 688, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, - 0, 0, 0, 696, 697, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 700, 0, 0, 701, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 0, 0, 706, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 708, 709, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, - 0, 0, 714, 0, 715, 0, 716, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 718, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0114[64] = { + 0x0042400848010901ull, 0x2108202080000212ull, 0x54000A412A800148ull, 0x000400001000C021ull, + 0x0A04002AA8000000ull, 0x10A014050000A825ull, 0x8221480422000000ull, 0x00544A248490042Aull, + 0x4200020090558056ull, 0x4A88904051448549ull, 0x900A480001543008ull, 0xA140000000200008ull, + 0x10AAA11014281000ull, 0x000002010A480141ull, 0x48015044250451AAull, 0x001502A208208024ull, + 0x0891451212500550ull, 0x0000021400001000ull, 0x5020015540000000ull, 0x000000010280A828ull, + 0x0855044221480422ull, 0x00AC00A894490920ull, 0x01451215040120ABull, 0x9009240000AA1111ull, + 0x5400024000200008ull, 0x2A84405005020015ull, 0x55102010A4801412ull, 0x10AA208915200508ull, + 0x00420048AAA94000ull, 0x0000000000000080ull, 0x2409024080000000ull, 0x0812000009024090ull, + 0x4200200000000000ull, 0x4480890020020040ull, 0x204037770AAAA802ull, 0x20048111A4028524ull, + 0x080D208121088009ull, 0x122028C902691010ull, 0x8102509122400012ull, 0x3240A05008021464ull, + 0x0820A10410000082ull, 0x0804208000910200ull, 0x0000000000000102ull, 0x0104880000000904ull, + 0x0400004002148204ull, 0x0106882420208044ull, 0x510020D104A12988ull, 0x00000024400A4D09ull, + 0x0000000000002000ull, 0x0450008A80000000ull, 0x00149249000140C8ull, 0x24A0100484528000ull, + 0x00080000A128880Aull, 0x0000000802402200ull, 0x2B11410281250200ull, 0x8205024A04AA0038ull, + 0x0002115400705622ull, 0x92AA8A8208902000ull, 0x8200900087024120ull, 0x0049000016A24CA8ull, + 0x8000850000000000ull, 0x0000000049000058ull, 0x002C400085110000ull, 0x1000405420000088ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0114[64] = { + 1u, 11u, 20u, 34u, 40u, 49u, 62u, 71u, 87u, 101u, 120u, 133u, 139u, 153u, 162u, 180u, + 192u, 209u, 213u, 222u, 230u, 245u, 261u, 278u, 292u, 299u, 313u, 328u, 344u, 357u, 358u, 365u, + 374u, 377u, 386u, 409u, 424u, 437u, 453u, 466u, 481u, 490u, 498u, 500u, 507u, 515u, 527u, 544u, + 555u, 556u, 563u, 576u, 588u, 598u, 603u, 618u, 634u, 649u, 665u, 677u, 692u, 696u, 702u, 711u, }; void recomp_unit_0114_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0114_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089CC000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0114[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0114[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0114[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089CC000; @@ -1074,7 +981,6 @@ L_089CC1B4: ctx.gpr[30] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089CC314; } @@ -1092,7 +998,6 @@ L_089CC1E0: ctx.gpr[22] = (ctx.gpr[22] + ctx.gpr[23]); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(28))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CC274; } @@ -1118,7 +1023,6 @@ L_089CC20C: AOT_REGCACHE_SYNC_OUT(); return; L_089CC218: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CC26C; } @@ -1144,7 +1048,6 @@ L_089CC220: AOT_REGCACHE_SYNC_OUT(); return; L_089CC25C: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_089CC26C; } @@ -1160,7 +1063,6 @@ L_089CC264: } L_089CC26C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089CC1F4; } @@ -1169,7 +1071,6 @@ L_089CC26C: L_089CC274: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(32))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CC300; } @@ -1195,7 +1096,6 @@ L_089CC298: AOT_REGCACHE_SYNC_OUT(); return; L_089CC2A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CC2F8; } @@ -1221,7 +1121,6 @@ L_089CC2AC: AOT_REGCACHE_SYNC_OUT(); return; L_089CC2E8: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_089CC2F8; } @@ -1237,7 +1136,6 @@ L_089CC2F0: } L_089CC2F8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089CC280; } @@ -1292,7 +1190,17 @@ L_089CC33C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CC370: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1402,7 +1310,6 @@ L_089CC46C: goto L_089CC474; L_089CC474: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CC48C; } @@ -1410,7 +1317,6 @@ L_089CC474: } L_089CC47C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CC4EC; } @@ -1418,7 +1324,6 @@ L_089CC47C: } L_089CC484: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CCB0C; } @@ -1426,7 +1331,6 @@ L_089CC484: } L_089CC48C: aot_gpr_31 = (0x089CC494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CC494u) goto L_089CC494; AOT_REGCACHE_SYNC_OUT(); return; L_089CC494: @@ -1469,7 +1373,6 @@ L_089CC494: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089CC4C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CC4C8u) goto L_089CC4C8; AOT_REGCACHE_SYNC_OUT(); return; L_089CC4C8: @@ -1477,9 +1380,7 @@ L_089CC4C8: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CC4EC; } @@ -1487,7 +1388,6 @@ L_089CC4C8: } L_089CC4E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CCB0C; } @@ -1503,7 +1403,6 @@ L_089CC4EC: AOT_REGCACHE_SYNC_OUT(); return; L_089CC500: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CC534; } @@ -1529,7 +1428,6 @@ L_089CC514: } L_089CC52C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CC93C; } @@ -1537,7 +1435,6 @@ L_089CC52C: } L_089CC534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CCB0C; } @@ -1564,7 +1461,6 @@ L_089CC53C: goto L_089CC580; L_089CC580: aot_gpr_31 = (0x089CC588u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CC588u) goto L_089CC588; AOT_REGCACHE_SYNC_OUT(); return; L_089CC588: @@ -1575,7 +1471,6 @@ L_089CC588: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CC5D4; } @@ -1583,7 +1478,6 @@ L_089CC588: } L_089CC5A8: aot_gpr_31 = (0x089CC5B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CC5B0u) goto L_089CC5B0; AOT_REGCACHE_SYNC_OUT(); return; L_089CC5B0: @@ -1603,7 +1497,6 @@ L_089CC5B0: } L_089CC5D4: aot_gpr_31 = (0x089CC5DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CC5DCu) goto L_089CC5DC; AOT_REGCACHE_SYNC_OUT(); return; L_089CC5DC: @@ -1653,7 +1546,6 @@ L_089CC664: aot_fpr_12 = ctx.fpr[0] + ctx.fpr[30]; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CC928; } @@ -1662,7 +1554,6 @@ L_089CC664: L_089CC674: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); goto L_089CC688; @@ -1698,7 +1589,6 @@ L_089CC6AC: goto L_089CC6B8; L_089CC6B8: aot_gpr_31 = (0x089CC6C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 67u, 0x089C849Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CC6C0u) goto L_089CC6C0; AOT_REGCACHE_SYNC_OUT(); return; L_089CC6C0: @@ -1731,7 +1621,6 @@ L_089CC6E4: AOT_REGCACHE_SYNC_OUT(); return; L_089CC6FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089CC70C; } @@ -1739,7 +1628,6 @@ L_089CC6FC: } L_089CC704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CC928; } @@ -1781,7 +1669,6 @@ L_089CC750: L_089CC75C: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(96))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089CC7B8; } @@ -1801,7 +1688,6 @@ L_089CC768: L_089CC77C: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_089CC794; } @@ -1810,7 +1696,6 @@ L_089CC77C: L_089CC788: ctx.gpr[9] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CC7A4; } @@ -1828,7 +1713,6 @@ L_089CC794: } L_089CC7A4: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089CC7B8; } @@ -1837,7 +1721,6 @@ L_089CC7A4: L_089CC7AC: ctx.gpr[19] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CC7C8; } @@ -1855,7 +1738,6 @@ L_089CC7B8: } L_089CC7C8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089CC7D8; } @@ -1888,7 +1770,6 @@ L_089CC804: goto L_089CC808; L_089CC808: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089CC818; } @@ -1909,7 +1790,6 @@ L_089CC818: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_089CC83C; @@ -1920,7 +1800,6 @@ L_089CC83C: goto L_089CC840; L_089CC840: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089CC928; } @@ -1928,7 +1807,6 @@ L_089CC840: } L_089CC848: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CC928; } @@ -1936,7 +1814,6 @@ L_089CC848: } L_089CC850: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CC928; } @@ -1954,7 +1831,6 @@ L_089CC858: L_089CC870: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CC920; } @@ -1987,7 +1863,6 @@ L_089CC8A4: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089CC8E4; @@ -2003,7 +1878,6 @@ L_089CC8E4: AOT_REGCACHE_SYNC_OUT(); return; L_089CC8F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CC90C; } @@ -2022,7 +1896,6 @@ L_089CC90C: AOT_REGCACHE_SYNC_OUT(); return; L_089CC918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CC928; } @@ -2038,7 +1911,6 @@ L_089CC928: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CC580; } @@ -2047,7 +1919,6 @@ L_089CC928: L_089CC93C: ctx.gpr[30] = (static_cast(aot_gpr_16) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_089CC978; } @@ -2080,7 +1951,6 @@ L_089CC960: } L_089CC970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CCB0C; } @@ -2111,7 +1981,6 @@ L_089CC998: L_089CC9B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(136))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CC9E4; } @@ -2133,7 +2002,6 @@ L_089CC9CC: AOT_REGCACHE_SYNC_OUT(); return; L_089CC9DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CCA34; } @@ -2141,7 +2009,6 @@ L_089CC9DC: } L_089CC9E4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089CCA34; } @@ -2205,7 +2072,6 @@ L_089CCA50: } L_089CCA58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CCAC4; } @@ -2247,7 +2113,6 @@ L_089CCAB8: AOT_REGCACHE_SYNC_OUT(); return; L_089CCAC4: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_089CCB0C; } @@ -2309,7 +2174,17 @@ L_089CCB0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CCB54: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2385,7 +2260,6 @@ L_089CCBE0: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[21] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089CCC54; } @@ -2393,7 +2267,6 @@ L_089CCBE0: } L_089CCBF4: aot_gpr_31 = (0x089CCBFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CCBFCu) goto L_089CCBFC; AOT_REGCACHE_SYNC_OUT(); return; L_089CCBFC: @@ -2436,7 +2309,6 @@ L_089CCBFC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089CCC30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CCC30u) goto L_089CCC30; AOT_REGCACHE_SYNC_OUT(); return; L_089CCC30: @@ -2444,9 +2316,7 @@ L_089CCC30: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CCC54; } @@ -2454,7 +2324,6 @@ L_089CCC30: } L_089CCC4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD0EC; } @@ -2470,7 +2339,6 @@ L_089CCC54: AOT_REGCACHE_SYNC_OUT(); return; L_089CCC68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CCCC4; } @@ -2494,7 +2362,6 @@ L_089CCC90: ctx.fpr[22] = ctx.fpr[0] + aot_fpr_20; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CCCBC; } @@ -2503,7 +2370,6 @@ L_089CCC90: L_089CCCA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (ctx.gpr[23] + static_cast(-7)); if (branch_taken) { @@ -2521,7 +2387,6 @@ L_089CCCB4: } L_089CCCBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD0EC; } @@ -2529,7 +2394,6 @@ L_089CCCBC: } L_089CCCC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD0EC; } @@ -2574,7 +2438,6 @@ L_089CCD00: AOT_REGCACHE_SYNC_OUT(); return; L_089CCD18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CCE14; } @@ -2596,7 +2459,6 @@ L_089CCD20: L_089CCD4C: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089CCE0C; } @@ -2610,7 +2472,6 @@ L_089CCD58: AOT_REGCACHE_SYNC_OUT(); return; L_089CCD64: aot_gpr_31 = (0x089CCD6Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CCD6Cu) goto L_089CCD6C; AOT_REGCACHE_SYNC_OUT(); return; L_089CCD6C: @@ -2655,7 +2516,6 @@ L_089CCDA4: ctx.fpr[26] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089CCE1C; @@ -2671,7 +2531,6 @@ L_089CCE04: } L_089CCE0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD0EC; } @@ -2679,7 +2538,6 @@ L_089CCE0C: } L_089CCE14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD0EC; } @@ -2726,7 +2584,6 @@ L_089CCE60: L_089CCE68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); aot_gpr_31 = (0x089CCE74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 67u, 0x089C849Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CCE74u) goto L_089CCE74; AOT_REGCACHE_SYNC_OUT(); return; L_089CCE74: @@ -2759,7 +2616,6 @@ L_089CCE98: AOT_REGCACHE_SYNC_OUT(); return; L_089CCEB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089CCEC0; } @@ -2767,7 +2623,6 @@ L_089CCEB0: } L_089CCEB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD070; } @@ -2789,7 +2644,6 @@ L_089CCEC0: L_089CCEEC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089CD070; } @@ -2816,7 +2670,6 @@ L_089CCF14: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089CCF3C; @@ -2847,7 +2700,6 @@ L_089CCF6C: aot_fpr_12 = ctx.fpr[0] + aot_fpr_20; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); goto L_089CCF84; @@ -2857,7 +2709,6 @@ L_089CCF84: ctx.fpr[28] = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CCFA4; } @@ -2870,7 +2721,6 @@ L_089CCF94: AOT_REGCACHE_SYNC_OUT(); return; L_089CCF9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD070; } @@ -2881,9 +2731,7 @@ L_089CCFA4: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CCFD0; } @@ -2896,7 +2744,6 @@ L_089CCFC0: AOT_REGCACHE_SYNC_OUT(); return; L_089CCFC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD070; } @@ -2922,7 +2769,6 @@ L_089CCFD0: AOT_REGCACHE_SYNC_OUT(); return; L_089CD010: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089CD028; } @@ -2935,7 +2781,6 @@ L_089CD018: AOT_REGCACHE_SYNC_OUT(); return; L_089CD020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD070; } @@ -2955,7 +2800,6 @@ L_089CD028: AOT_REGCACHE_SYNC_OUT(); return; L_089CD050: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CD064; } @@ -2977,7 +2821,6 @@ L_089CD070: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CCE68; } @@ -2986,7 +2829,6 @@ L_089CD070: L_089CD084: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CD0C0; } @@ -3019,7 +2861,6 @@ L_089CD0A8: } L_089CD0B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD0EC; } @@ -3075,7 +2916,17 @@ L_089CD0EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CD130: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3092,7 +2943,6 @@ L_089CD130: } L_089CD188: aot_gpr_31 = (0x089CD190u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD190u) goto L_089CD190; AOT_REGCACHE_SYNC_OUT(); return; L_089CD190: @@ -3210,7 +3060,6 @@ L_089CD278: goto L_089CD280; L_089CD280: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CD298; } @@ -3218,7 +3067,6 @@ L_089CD280: } L_089CD288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD2F8; } @@ -3226,7 +3074,6 @@ L_089CD288: } L_089CD290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD80C; } @@ -3234,7 +3081,6 @@ L_089CD290: } L_089CD298: aot_gpr_31 = (0x089CD2A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD2A0u) goto L_089CD2A0; AOT_REGCACHE_SYNC_OUT(); return; L_089CD2A0: @@ -3277,7 +3123,6 @@ L_089CD2A0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089CD2D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD2D4u) goto L_089CD2D4; AOT_REGCACHE_SYNC_OUT(); return; L_089CD2D4: @@ -3285,9 +3130,7 @@ L_089CD2D4: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CD2F8; } @@ -3295,7 +3138,6 @@ L_089CD2D4: } L_089CD2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD80C; } @@ -3311,7 +3153,6 @@ L_089CD2F8: AOT_REGCACHE_SYNC_OUT(); return; L_089CD30C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CD334; } @@ -3331,7 +3172,6 @@ L_089CD314: } L_089CD32C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD6A4; } @@ -3339,7 +3179,6 @@ L_089CD32C: } L_089CD334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD80C; } @@ -3357,7 +3196,6 @@ L_089CD33C: goto L_089CD35C; L_089CD35C: aot_gpr_31 = (0x089CD364u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD364u) goto L_089CD364; AOT_REGCACHE_SYNC_OUT(); return; L_089CD364: @@ -3367,7 +3205,6 @@ L_089CD364: aot_fpr_12 = ctx.fpr[24] + aot_fpr_12; { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } aot_gpr_31 = (0x089CD380u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD380u) goto L_089CD380; AOT_REGCACHE_SYNC_OUT(); return; L_089CD380: @@ -3414,7 +3251,6 @@ L_089CD404: aot_fpr_12 = ctx.fpr[0] + ctx.fpr[26]; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CD690; } @@ -3423,7 +3259,6 @@ L_089CD404: L_089CD414: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); goto L_089CD428; @@ -3459,7 +3294,6 @@ L_089CD44C: goto L_089CD458; L_089CD458: aot_gpr_31 = (0x089CD460u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 31u, 0x089C81D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD460u) goto L_089CD460; AOT_REGCACHE_SYNC_OUT(); return; L_089CD460: @@ -3509,7 +3343,6 @@ L_089CD4A8: AOT_REGCACHE_SYNC_OUT(); return; L_089CD4C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089CD4D0; } @@ -3517,7 +3350,6 @@ L_089CD4C0: } L_089CD4C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD690; } @@ -3559,7 +3391,6 @@ L_089CD514: L_089CD520: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(112))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089CD57C; } @@ -3579,7 +3410,6 @@ L_089CD52C: L_089CD540: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_089CD558; } @@ -3588,7 +3418,6 @@ L_089CD540: L_089CD54C: ctx.gpr[9] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD568; } @@ -3606,7 +3435,6 @@ L_089CD558: } L_089CD568: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089CD57C; } @@ -3615,7 +3443,6 @@ L_089CD568: L_089CD570: ctx.gpr[20] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD58C; } @@ -3633,7 +3460,6 @@ L_089CD57C: } L_089CD58C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089CD59C; } @@ -3666,7 +3492,6 @@ L_089CD5C8: goto L_089CD5CC; L_089CD5CC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_089CD5DC; } @@ -3687,7 +3512,6 @@ L_089CD5DC: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_089CD600; @@ -3698,7 +3522,6 @@ L_089CD600: goto L_089CD604; L_089CD604: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089CD690; } @@ -3706,7 +3529,6 @@ L_089CD604: } L_089CD60C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CD690; } @@ -3714,7 +3536,6 @@ L_089CD60C: } L_089CD614: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CD690; } @@ -3732,7 +3553,6 @@ L_089CD61C: L_089CD634: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089CD688; } @@ -3762,7 +3582,6 @@ L_089CD668: AOT_REGCACHE_SYNC_OUT(); return; L_089CD680: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD690; } @@ -3778,7 +3597,6 @@ L_089CD690: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CD35C; } @@ -3787,7 +3605,6 @@ L_089CD690: L_089CD6A4: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CD6E0; } @@ -3820,7 +3637,6 @@ L_089CD6C8: } L_089CD6D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD80C; } @@ -3889,7 +3705,6 @@ L_089CD74C: } L_089CD754: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CD7C0; } @@ -3932,7 +3747,6 @@ L_089CD7B4: L_089CD7C0: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CD80C; } @@ -3994,7 +3808,17 @@ L_089CD80C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CD854: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4014,7 +3838,6 @@ L_089CD854: L_089CD898: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089CD900; } @@ -4089,7 +3912,6 @@ L_089CD8E8: goto L_089CD8F0; L_089CD8F0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CD908; } @@ -4097,7 +3919,6 @@ L_089CD8F0: } L_089CD8F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD968; } @@ -4105,7 +3926,6 @@ L_089CD8F8: } L_089CD900: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4113,7 +3933,6 @@ L_089CD900: } L_089CD908: aot_gpr_31 = (0x089CD910u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD910u) goto L_089CD910; AOT_REGCACHE_SYNC_OUT(); return; L_089CD910: @@ -4156,7 +3975,6 @@ L_089CD910: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089CD944u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0113_entry, 113u, 281u, 0x089C9078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CD944u) goto L_089CD944; AOT_REGCACHE_SYNC_OUT(); return; L_089CD944: @@ -4164,9 +3982,7 @@ L_089CD944: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CD968; } @@ -4174,7 +3990,6 @@ L_089CD944: } L_089CD960: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4195,7 +4010,6 @@ L_089CD968: AOT_REGCACHE_SYNC_OUT(); return; L_089CD990: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CD9EC; } @@ -4219,7 +4033,6 @@ L_089CD9B8: ctx.fpr[22] = ctx.fpr[0] + aot_fpr_20; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CD9E4; } @@ -4228,7 +4041,6 @@ L_089CD9B8: L_089CD9C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); goto L_089CD9F4; @@ -4236,7 +4048,6 @@ L_089CD9C8: goto L_089CD9DC; L_089CD9DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CD9F4; } @@ -4244,7 +4055,6 @@ L_089CD9DC: } L_089CD9E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4252,7 +4062,6 @@ L_089CD9E4: } L_089CD9EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4308,7 +4117,6 @@ L_089CDA30: L_089CDA5C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CDAE8; } @@ -4322,7 +4130,6 @@ L_089CDA68: AOT_REGCACHE_SYNC_OUT(); return; L_089CDA74: aot_gpr_31 = (0x089CDA7Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CDA7Cu) goto L_089CDA7C; AOT_REGCACHE_SYNC_OUT(); return; L_089CDA7C: @@ -4375,7 +4182,6 @@ L_089CDAE0: } L_089CDAE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4383,7 +4189,6 @@ L_089CDAE8: } L_089CDAF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4408,7 +4213,6 @@ L_089CDB0C: AOT_REGCACHE_SYNC_OUT(); return; L_089CDB20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CDB68; } @@ -4430,7 +4234,6 @@ L_089CDB28: L_089CDB54: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089CDB70; } @@ -4438,7 +4241,6 @@ L_089CDB54: } L_089CDB60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4446,7 +4248,6 @@ L_089CDB60: } L_089CDB68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4488,7 +4289,6 @@ L_089CDBB4: aot_fpr_20 = ctx.fpr[0] + aot_fpr_20; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CDBDC; } @@ -4506,7 +4306,6 @@ L_089CDBCC: AOT_REGCACHE_SYNC_OUT(); return; L_089CDBD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4515,7 +4314,6 @@ L_089CDBD4: L_089CDBDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_089CDBF0; @@ -4547,7 +4345,6 @@ L_089CDC38: L_089CDC40: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(88))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CDC7C; } @@ -4555,7 +4352,6 @@ L_089CDC40: } L_089CDC4C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CDC7C; } @@ -4563,7 +4359,6 @@ L_089CDC4C: } L_089CDC54: { const bool branch_taken = aot_gpr_5 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089CDC7C; } @@ -4571,7 +4366,6 @@ L_089CDC54: } L_089CDC5C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089CDC7C; } @@ -4589,7 +4383,6 @@ L_089CDC6C: AOT_REGCACHE_SYNC_OUT(); return; L_089CDC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CDC98; } @@ -4629,7 +4422,17 @@ L_089CDC98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CDCC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -4639,7 +4442,17 @@ L_089CDCC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CDCD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5008,7 +4821,17 @@ L_089CDFEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE0B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); @@ -5036,7 +4859,17 @@ L_089CE0B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE0E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5057,7 +4890,17 @@ L_089CE0F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE118: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -5133,7 +4976,17 @@ L_089CE1BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE1DC: ctx.gpr[2] = (2205u << 16u); jump_target = aot_gpr_31; @@ -5141,12 +4994,21 @@ L_089CE1DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE1E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089CE1F8u); - // nop goto L_089CE1DC; L_089CE1F8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5155,7 +5017,17 @@ L_089CE1F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE204: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5206,7 +5078,6 @@ L_089CE25C: goto L_089CE264; L_089CE264: aot_gpr_31 = (0x089CE26Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CE26Cu) goto L_089CE26C; AOT_REGCACHE_SYNC_OUT(); return; L_089CE26C: @@ -5256,7 +5127,6 @@ L_089CE2A4: goto L_089CE2A8; L_089CE2A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CE2B4; } @@ -5281,7 +5151,17 @@ L_089CE2B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE2D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5312,7 +5192,6 @@ L_089CE308: L_089CE314: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CE328; } @@ -5335,14 +5214,34 @@ L_089CE328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE33C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 11u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE344: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -5379,7 +5278,17 @@ L_089CE380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5409,7 +5318,17 @@ L_089CE3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE3C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -5471,7 +5390,17 @@ L_089CE44C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE460: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5487,7 +5416,17 @@ L_089CE474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE480: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5536,7 +5475,17 @@ L_089CE4CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE4EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -5641,12 +5590,21 @@ L_089CE5B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089CE5E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 166u, 0x08AACBDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CE5E4u) goto L_089CE5E4; AOT_REGCACHE_SYNC_OUT(); return; L_089CE5E4: @@ -5656,7 +5614,17 @@ L_089CE5E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE5F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -5672,7 +5640,17 @@ L_089CE604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE610: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[19]); @@ -5698,7 +5676,6 @@ L_089CE610: L_089CE658: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CE680; } @@ -5796,7 +5773,6 @@ L_089CE718: AOT_REGCACHE_SYNC_OUT(); return; L_089CE728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CE744; } @@ -5827,7 +5803,17 @@ L_089CE744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE76C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -5843,7 +5829,6 @@ L_089CE76C: } L_089CE790: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089CE7B4; } @@ -5863,7 +5848,6 @@ L_089CE798: AOT_REGCACHE_SYNC_OUT(); return; L_089CE7B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CE804; } @@ -5916,7 +5900,17 @@ L_089CE804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE81C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -6024,12 +6018,21 @@ L_089CE924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE940: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089CE950u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 178u, 0x08AACCCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CE950u) goto L_089CE950; AOT_REGCACHE_SYNC_OUT(); return; L_089CE950: @@ -6039,7 +6042,17 @@ L_089CE950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE95C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[19]); @@ -6089,7 +6102,17 @@ L_089CE9C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CE9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6110,7 +6133,17 @@ L_089CEA04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEA20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6191,7 +6224,17 @@ L_089CEB20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEB2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6244,14 +6287,23 @@ L_089CEBBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEBC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089CEBE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 264u, 0x08AAD80Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CEBE0u) goto L_089CEBE0; AOT_REGCACHE_SYNC_OUT(); return; L_089CEBE0: @@ -6268,7 +6320,17 @@ L_089CEBE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEC08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6293,7 +6355,6 @@ L_089CEC24: L_089CEC3C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CEC50; } @@ -6316,14 +6377,23 @@ L_089CEC50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEC64: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(168), aot_run_words); } ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089CEC98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 271u, 0x08AAD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CEC98u) goto L_089CEC98; AOT_REGCACHE_SYNC_OUT(); return; L_089CEC98: @@ -6423,7 +6493,6 @@ L_089CED74: L_089CED88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(240))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CEE5C; } @@ -6488,7 +6557,6 @@ L_089CEDE0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089CEE20; @@ -6496,9 +6564,7 @@ L_089CEDE0: goto L_089CEE0C; L_089CEE0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CEE34; } @@ -6609,9 +6675,7 @@ L_089CEEB4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CEEF0; } @@ -6619,9 +6683,7 @@ L_089CEEB4: } L_089CEEE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CEF00; } @@ -6629,7 +6691,6 @@ L_089CEEE0: } L_089CEEF0: aot_gpr_31 = (0x089CEEF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CEEF8u) goto L_089CEEF8; AOT_REGCACHE_SYNC_OUT(); return; L_089CEEF8: @@ -6668,7 +6729,6 @@ L_089CEF28: L_089CEF2C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CEF4C; } @@ -6677,7 +6737,6 @@ L_089CEF2C: L_089CEF38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CEF4C; } @@ -6706,12 +6765,21 @@ L_089CEF4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEF78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089CEF88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 280u, 0x08AAD998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CEF88u) goto L_089CEF88; AOT_REGCACHE_SYNC_OUT(); return; L_089CEF88: @@ -6721,7 +6789,17 @@ L_089CEF88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CEF94: aot_gpr_29 = (aot_gpr_29 + static_cast(-416)); ctx.gpr[13] = (aot_gpr_5 | 0u); @@ -7199,14 +7277,34 @@ L_089CF17C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF184: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF18C: aot_gpr_4 = (2279u << 16u); aot_gpr_5 = (0u | 0u); @@ -7234,11 +7332,20 @@ L_089CF19C: } L_089CF1D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF1D8: aot_gpr_6 = (2279u << 16u); ctx.gpr[7] = (0u | 0u); @@ -7254,7 +7361,6 @@ L_089CF1E8: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_4; - // nop if (branch_taken) { goto L_089CF21C; } @@ -7263,7 +7369,6 @@ L_089CF1E8: L_089CF20C: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089CF21C; } @@ -7279,7 +7384,6 @@ L_089CF21C: ctx.gpr[7] = (static_cast(static_cast(ctx.gpr[7]) >> 16u)); aot_gpr_5 = (static_cast(ctx.gpr[7]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089CF1E8; } @@ -7287,11 +7391,20 @@ L_089CF21C: } L_089CF238: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF240: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -7313,7 +7426,6 @@ L_089CF240: L_089CF280: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CF368; } @@ -7383,7 +7495,6 @@ L_089CF2D0: AOT_REGCACHE_SYNC_OUT(); return; L_089CF33C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CF358; } @@ -7397,7 +7508,6 @@ L_089CF344: AOT_REGCACHE_SYNC_OUT(); return; L_089CF350: aot_gpr_31 = (0x089CF358u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CF358u) goto L_089CF358; AOT_REGCACHE_SYNC_OUT(); return; L_089CF358: @@ -7444,7 +7554,17 @@ L_089CF388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF3B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[7] = (2279u << 16u); @@ -7458,7 +7578,6 @@ L_089CF3B0: goto L_089CF3D4; L_089CF3D4: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089CF404; } @@ -7467,7 +7586,6 @@ L_089CF3D4: L_089CF3DC: ctx.gpr[11] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = ctx.gpr[11] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_089CF3F4; } @@ -7476,7 +7594,6 @@ L_089CF3DC: L_089CF3E8: ctx.gpr[11] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = ctx.gpr[11] == aot_gpr_4; - // nop if (branch_taken) { goto L_089CF404; } @@ -7494,7 +7611,6 @@ L_089CF3F4: } L_089CF404: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089CF43C; } @@ -7536,7 +7652,6 @@ L_089CF42C: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(1), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CF524; } @@ -7550,7 +7665,6 @@ L_089CF43C: goto L_089CF44C; L_089CF44C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CF474; } @@ -7559,7 +7673,6 @@ L_089CF44C: L_089CF454: ctx.gpr[3] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[3] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_089CF474; } @@ -7693,7 +7806,17 @@ L_089CF524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF534: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2279u << 16u); @@ -7713,7 +7836,17 @@ L_089CF558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF564: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7767,11 +7900,20 @@ L_089CF564: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF58C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7822,7 +7964,6 @@ L_089CF624: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CF6A0; } @@ -7830,13 +7971,11 @@ L_089CF624: } L_089CF640: aot_gpr_31 = (0x089CF648u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CF648u) goto L_089CF648; AOT_REGCACHE_SYNC_OUT(); return; L_089CF648: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089CF660; } @@ -7865,7 +8004,6 @@ L_089CF660: AOT_REGCACHE_SYNC_OUT(); return; L_089CF67C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089CF75C; } @@ -7890,7 +8028,6 @@ L_089CF6A0: aot_gpr_6 = (aot_gpr_5 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089CF6EC; } @@ -7975,7 +8112,6 @@ L_089CF744: } L_089CF74C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CF75C; } @@ -7988,7 +8124,6 @@ L_089CF754: L_089CF75C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CF8A0; } @@ -8001,7 +8136,6 @@ L_089CF768: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CF7E4; } @@ -8009,13 +8143,11 @@ L_089CF768: } L_089CF784: aot_gpr_31 = (0x089CF78Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CF78Cu) goto L_089CF78C; AOT_REGCACHE_SYNC_OUT(); return; L_089CF78C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089CF7A4; } @@ -8044,7 +8176,6 @@ L_089CF7A4: AOT_REGCACHE_SYNC_OUT(); return; L_089CF7C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089CF8A0; } @@ -8069,7 +8200,6 @@ L_089CF7E4: ctx.gpr[7] = (aot_gpr_6 + static_cast(4)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089CF830; } @@ -8154,7 +8284,6 @@ L_089CF888: } L_089CF890: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CF8A0; } @@ -8183,7 +8312,17 @@ L_089CF8B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF8C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -8226,7 +8365,17 @@ L_089CF8C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CF934: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8242,7 +8391,6 @@ L_089CF934: L_089CF950: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089CF96C; } @@ -8260,7 +8408,6 @@ L_089CF96C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(60), static_cast(0u)); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089CFA68; } @@ -8272,7 +8419,6 @@ L_089CF984: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CFA20; } @@ -8285,7 +8431,6 @@ L_089CF99C: AOT_REGCACHE_SYNC_OUT(); return; L_089CF9A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CFA14; } @@ -8303,7 +8448,6 @@ L_089CF9AC: } L_089CF9BC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CFA14; } @@ -8316,7 +8460,6 @@ L_089CF9C4: AOT_REGCACHE_SYNC_OUT(); return; L_089CF9CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089CF9E4; } @@ -8329,7 +8472,6 @@ L_089CF9D4: AOT_REGCACHE_SYNC_OUT(); return; L_089CF9DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CFA14; } @@ -8359,7 +8501,6 @@ L_089CF9FC: L_089CFA14: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1712), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CFA64; } @@ -8371,7 +8512,6 @@ L_089CFA20: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089CFA44; } @@ -8380,7 +8520,6 @@ L_089CFA20: L_089CFA38: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(596), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CFA64; } @@ -8393,7 +8532,6 @@ L_089CFA44: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CFA64; } @@ -8417,7 +8555,17 @@ L_089CFA68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFA7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -8452,7 +8600,17 @@ L_089CFAB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8476,7 +8634,17 @@ L_089CFAE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFAFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8489,7 +8657,6 @@ L_089CFAFC: } L_089CFB0C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CFB1C; } @@ -8497,7 +8664,6 @@ L_089CFB0C: } L_089CFB14: aot_gpr_31 = (0x089CFB1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089CFB1Cu) goto L_089CFB1C; AOT_REGCACHE_SYNC_OUT(); return; L_089CFB1C: @@ -8507,14 +8673,23 @@ L_089CFB1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFB28: ctx.gpr[2] = (0u | 0u); goto L_089CFB2C; L_089CFB2C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089CFB44; } @@ -8523,7 +8698,6 @@ L_089CFB2C: L_089CFB38: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(17))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089CFB5C; } @@ -8541,7 +8715,6 @@ L_089CFB44: } L_089CFB54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CFB64; } @@ -8549,7 +8722,6 @@ L_089CFB54: } L_089CFB5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089CFB68; } @@ -8560,11 +8732,20 @@ L_089CFB64: goto L_089CFB68; L_089CFB68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFB70: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[7] = (18804u << 16u); @@ -8593,7 +8774,6 @@ L_089CFB70: L_089CFBC0: ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(16))); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_089CFCA8; } @@ -8602,7 +8782,6 @@ L_089CFBC0: L_089CFBCC: ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(17))); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_089CFCA8; } @@ -8656,9 +8835,7 @@ L_089CFBD8: aot_fpr_12 = aot_fpr_12 + ctx.fpr[6]; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[5])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CFCA8; } @@ -8693,7 +8870,6 @@ L_089CFCBC: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), std::bit_cast(ctx.fpr[5])); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[10] == aot_gpr_5; - // nop if (branch_taken) { goto L_089CFD0C; } @@ -8718,7 +8894,17 @@ L_089CFD10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFD18: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.fpr[7] = std::bit_cast(0u); @@ -8745,7 +8931,6 @@ L_089CFD18: L_089CFD60: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(16))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_089CFE68; } @@ -8754,7 +8939,6 @@ L_089CFD60: L_089CFD6C: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(17))); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_089CFE68; } @@ -8808,9 +8992,7 @@ L_089CFD78: aot_fpr_14 = aot_fpr_14 + ctx.fpr[8]; aot_fpr_14 = std::sqrt(aot_fpr_14); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CFE68; } @@ -8818,9 +9000,7 @@ L_089CFD78: } L_089CFE40: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CFE68; } @@ -8828,9 +9008,7 @@ L_089CFE40: } L_089CFE50: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[7] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089CFE68; } @@ -8864,7 +9042,6 @@ L_089CFE7C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(ctx.fpr[15])); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[9] == aot_gpr_5; - // nop if (branch_taken) { goto L_089CFEC8; } @@ -8889,7 +9066,17 @@ L_089CFECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8900,13 +9087,11 @@ L_089CFED4: ctx.gpr[18] = (ctx.gpr[7] & 255u); ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_31 = (0x089CFF0Cu); - // nop goto L_089CFB28; L_089CFF0C: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089CFF98; } @@ -8952,7 +9137,6 @@ L_089CFF74: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(60), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089CFF98; } @@ -8960,7 +9144,6 @@ L_089CFF74: } L_089CFF88: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089CFF98; } @@ -8985,7 +9168,17 @@ L_089CFF98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089CFFB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0115.cpp b/profiles/vcs/generated/generated_unit_0115.cpp index c55f086..0b70c06 100644 --- a/profiles/vcs/generated/generated_unit_0115.cpp +++ b/profiles/vcs/generated/generated_unit_0115.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0115[4095] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 8, 0, 0, 9, 0, 0, 10, 0, - 0, 11, 0, 0, 12, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 36, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 44, 45, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 50, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 0, 0, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 58, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 63, 64, 0, 0, 0, 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, - 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 88, 0, 89, - 0, 90, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, - 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 110, 0, 0, 111, 0, 112, 0, 113, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 118, 0, 119, 0, 0, 120, - 0, 121, 0, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, - 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, - 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, - 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, - 0, 0, 157, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 160, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 170, 0, 171, 0, 172, 0, - 0, 0, 173, 0, 174, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 179, 0, 180, 0, 181, 0, 182, 0, 0, 0, - 0, 0, 0, 183, 0, 0, 0, 184, 0, 0, 185, 0, 186, 0, 187, 0, 188, 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 193, 0, 0, 0, 0, 0, 194, 0, 0, 195, 0, 196, 0, 197, 0, 0, 198, 0, 0, 0, 199, 0, 200, 0, 201, - 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 207, 0, 0, 0, 208, 0, 209, - 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 214, 0, 215, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, - 229, 0, 230, 0, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, - 0, 239, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 245, 0, 0, - 246, 0, 247, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 252, 0, 0, 0, 253, 0, - 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, - 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 0, 262, 0, 263, 0, 264, 0, 265, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, - 268, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 284, 0, 285, 0, 0, 0, 286, 287, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 0, 0, 0, 0, 0, 297, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 302, 303, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 304, 0, 305, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, - 0, 0, 0, 319, 0, 0, 320, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 330, 0, 331, 0, 332, 0, 333, 334, 0, 335, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, - 0, 0, 0, 338, 0, 339, 0, 0, 0, 340, 0, 0, 0, 341, 342, 0, 343, 0, 344, 0, 0, 0, 0, 0, 345, 346, 347, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 348, 0, 349, 350, 0, 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 358, 0, 0, 359, 0, 0, 360, 0, 0, 361, - 0, 0, 362, 0, 363, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 367, 0, 0, 0, 368, 369, 0, 370, 0, 371, 0, 0, 0, - 0, 0, 372, 373, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 379, 0, 380, 0, 0, 0, 0, - 0, 381, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 387, 0, 388, 0, 0, 0, 389, 0, 390, 0, 391, 0, 392, 393, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, - 0, 396, 0, 397, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, - 0, 0, 0, 405, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 0, 411, - 0, 0, 0, 412, 0, 0, 0, 413, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 0, - 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 0, 0, 0, 428, 429, 430, 0, 431, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, - 0, 434, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 438, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, - 0, 442, 0, 443, 444, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 449, 0, 0, 0, 450, 0, 0, 451, 452, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 458, 0, 0, 459, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 463, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, - 0, 467, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 470, 0, 0, 471, 0, 472, 0, 0, 473, 0, 474, 0, 0, 0, 0, 475, 0, 476, 0, 0, - 0, 0, 477, 0, 0, 0, 478, 479, 0, 0, 480, 0, 481, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, - 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, - 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 492, - 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 0, 495, 496, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, - 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 503, 0, 0, 0, - 504, 505, 0, 0, 506, 0, 0, 0, 507, 0, 508, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 514, 0, - 515, 0, 516, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 523, 0, 524, 0, 0, - 0, 0, 525, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 527, 528, 0, 0, 0, 0, 0, 0, 0, 0, 529, 530, 0, 0, 0, 0, 0, 0, 531, - 0, 0, 0, 0, 532, 0, 0, 0, 0, 533, 0, 534, 0, 0, 0, 0, 535, 0, 0, 536, 537, 0, 538, 0, 539, 0, 0, 0, 0, 0, 540, 0, - 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 0, 544, 545, 0, 0, 0, 546, 0, 0, 0, 0, 0, 547, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, - 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, - 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 561, - 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 565, 0, 566, 0, 567, 0, 0, 0, 568, 0, 0, 0, 0, 569, - 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 572, 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, - 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 579, - 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 586, 0, 0, 0, 0, 0, - 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 589, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, - 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 595, 0, 0, 0, 0, 0, 0, 596, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 0, 601, 0, 602, 603, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 605, 0, 0, 0, 0, 0, 0, 606, 607, 608, 0, 609, 0, 0, 610, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 614, - 615, 0, 616, 0, 0, 0, 0, 617, 0, 0, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 621, - 0, 0, 0, 0, 0, 0, 622, 623, 624, 0, 625, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 630, 631, - 0, 632, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 634, 0, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 0, 639, 640, 0, 0, 641, - 642, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, - 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 660, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 668, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, - 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 679, 0, 0, 0, 680, 0, 0, 0, 681, 0, 0, 682, - 0, 683, 0, 0, 0, 684, 685, 0, 686, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 690, 0, 0, 0, 691, 0, 0, 0, 692, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0115[64] = { + 0x120000B249440A89ull, 0x0181481000028810ull, 0x0001200208520200ull, 0x821A404201020214ull, + 0x1040004000821480ull, 0x0094024301504C04ull, 0x4810011000002020ull, 0x0000008020014154ull, + 0xA002A112A1400010ull, 0x202A8002440A2800ull, 0x5000014295408552ull, 0x1010122022021009ull, + 0x8220040010801002ull, 0x2002010008401008ull, 0x2000010040401000ull, 0x040000002000A424ull, + 0x55200000200A8000ull, 0x1029548815488154ull, 0xA2444088A8952088ull, 0x009240000A2A200Aull, + 0xAA88120505045204ull, 0x4540800D28810282ull, 0x502A902010A00850ull, 0x0200001080002003ull, + 0x0000008020010000ull, 0x0001004014000080ull, 0x080142000C510200ull, 0x0314218101202080ull, + 0x0010010002020228ull, 0x8100280002014400ull, 0x0040001004042548ull, 0x070562280856A902ull, + 0x0000810000010B40ull, 0x9249000000000800ull, 0x0A55001C1588A054ull, 0x010B545000122A02ull, + 0x8A0882088888888Aull, 0x0000000100008188ull, 0x0080000400000000ull, 0x040DC2AA02448000ull, + 0x0048111A40285242ull, 0x0014900020121191ull, 0x2852910A44005280ull, 0x49100008040214C4ull, + 0x0202324090400001ull, 0x5484451314820002ull, 0x8180608428A14505ull, 0x8232408041590A10ull, + 0x8002085082100000ull, 0x845488088A080140ull, 0x90800042108C0100ull, 0x0489000406809120ull, + 0x0010684801502412ull, 0x80402885C0829702ull, 0x994A4102E040A5C0ull, 0x8000000000008005ull, + 0x0024000000000004ull, 0x0000012000000000ull, 0x0120000009000000ull, 0x0001200000240000ull, + 0x0000900000040500ull, 0x0000024000001200ull, 0x0024000480120048ull, 0x44508962911200A0ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0115[64] = { + 1u, 17u, 27u, 35u, 48u, 56u, 70u, 77u, 85u, 98u, 110u, 126u, 137u, 145u, 152u, 157u, + 164u, 173u, 192u, 210u, 222u, 239u, 254u, 268u, 274u, 277u, 282u, 292u, 304u, 311u, 319u, 328u, + 348u, 355u, 362u, 381u, 396u, 412u, 417u, 419u, 434u, 449u, 461u, 477u, 489u, 499u, 515u, 532u, + 548u, 556u, 570u, 580u, 592u, 605u, 622u, 642u, 646u, 649u, 651u, 655u, 659u, 664u, 668u, 676u, }; void recomp_unit_0115_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0115_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089D0000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0115[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0115[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0115[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089D0000; @@ -866,7 +773,6 @@ LOCAL_DISPATCH: L_089D0000: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D002C; } @@ -910,7 +816,6 @@ L_089D0048: ctx.gpr[20] = (ctx.gpr[16] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(596))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0060; } @@ -984,7 +889,6 @@ L_089D009C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(32), ctx.gpr[16]); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(60), static_cast(0u)); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089D00F0; } @@ -1004,7 +908,6 @@ L_089D00F0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089D01E0; } @@ -1017,7 +920,6 @@ L_089D0110: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D01C0; } @@ -1027,12 +929,10 @@ L_089D012C: ctx.gpr[20] = (ctx.gpr[16] | 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1712), ctx.gpr[17]); aot_gpr_31 = (0x089D013Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D013Cu) goto L_089D013C; AOT_REGCACHE_SYNC_OUT(); return; L_089D013C: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089D01E0; } @@ -1080,7 +980,6 @@ L_089D01AC: AOT_REGCACHE_SYNC_OUT(); return; L_089D01B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D01E0; } @@ -1093,7 +992,6 @@ L_089D01C0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D01E0; } @@ -1126,7 +1024,17 @@ L_089D01E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0224: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1138,7 +1046,6 @@ L_089D0224: L_089D0244: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0258; } @@ -1172,7 +1079,17 @@ L_089D026C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0284: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1186,7 +1103,6 @@ L_089D0284: L_089D02B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0310; } @@ -1208,9 +1124,7 @@ L_089D02C0: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D0310; } @@ -1247,7 +1161,17 @@ L_089D0324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0344: aot_gpr_5 = (aot_gpr_5 << 16u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); @@ -1259,7 +1183,17 @@ L_089D0344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0360: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1281,7 +1215,17 @@ L_089D0384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0398: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1293,7 +1237,6 @@ L_089D0398: L_089D03B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(17))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D03D0; } @@ -1331,7 +1274,17 @@ L_089D03E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D03FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1343,7 +1296,6 @@ L_089D03FC: L_089D041C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0430; } @@ -1378,7 +1330,17 @@ L_089D0444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D045C: aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_4 + static_cast(3), aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load_word_right(aot_gpr_4 + static_cast(0), aot_gpr_6)); @@ -1398,7 +1360,17 @@ L_089D045C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0498: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1423,7 +1395,6 @@ L_089D04D8: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089D05D0; } @@ -1458,7 +1429,6 @@ L_089D0528: L_089D052C: ctx.gpr[17] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089D0558; } @@ -1478,7 +1448,6 @@ L_089D0538: } L_089D0550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0584; } @@ -1486,7 +1455,6 @@ L_089D0550: } L_089D0558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0614; } @@ -1535,7 +1503,6 @@ L_089D05A4: goto L_089D1074; L_089D05C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0614; } @@ -1600,7 +1567,17 @@ L_089D0614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D0634: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1616,7 +1593,6 @@ L_089D0634: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089D0690; @@ -1626,7 +1602,6 @@ L_089D0690: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(56), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -1655,7 +1630,6 @@ L_089D06A0: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D094C; } @@ -1668,7 +1642,6 @@ L_089D06D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0720; } @@ -1677,7 +1650,6 @@ L_089D06D0: L_089D06EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1712))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089D0710; } @@ -1687,7 +1659,6 @@ L_089D06F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2244))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D0860; } @@ -1695,7 +1666,6 @@ L_089D06F8: } L_089D0708: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0874; } @@ -1708,7 +1678,6 @@ L_089D0710: AOT_REGCACHE_SYNC_OUT(); return; L_089D0718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D104C; } @@ -1823,7 +1792,6 @@ L_089D0810: AOT_REGCACHE_SYNC_OUT(); return; L_089D0858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D104C; } @@ -1843,7 +1811,6 @@ L_089D0874: AOT_REGCACHE_SYNC_OUT(); return; L_089D087C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D08B4; } @@ -1852,7 +1819,6 @@ L_089D087C: L_089D0884: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D08B4; } @@ -1862,7 +1828,6 @@ L_089D0890: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0944; } @@ -1881,12 +1846,10 @@ L_089D08A0: } L_089D08B4: aot_gpr_31 = (0x089D08BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D08BCu) goto L_089D08BC; AOT_REGCACHE_SYNC_OUT(); return; L_089D08BC: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089D08FC; } @@ -1909,7 +1872,6 @@ L_089D08C4: AOT_REGCACHE_SYNC_OUT(); return; L_089D08F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0944; } @@ -1932,7 +1894,6 @@ L_089D08FC: AOT_REGCACHE_SYNC_OUT(); return; L_089D092C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D0944; } @@ -1946,7 +1907,6 @@ L_089D0934: goto L_089D0944; L_089D0944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -1959,7 +1919,6 @@ L_089D094C: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D09D4; } @@ -1969,7 +1928,6 @@ L_089D0968: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(596))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089D09C4; } @@ -1978,7 +1936,6 @@ L_089D0968: L_089D0978: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(1))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -2002,7 +1959,6 @@ L_089D0984: AOT_REGCACHE_SYNC_OUT(); return; L_089D09BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -2015,7 +1971,6 @@ L_089D09C4: AOT_REGCACHE_SYNC_OUT(); return; L_089D09CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D104C; } @@ -2029,7 +1984,6 @@ L_089D09D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -2039,7 +1993,6 @@ L_089D09F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(452))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089D0A18; } @@ -2054,7 +2007,6 @@ L_089D0A04: goto L_089D0A10; L_089D0A10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -2067,7 +2019,6 @@ L_089D0A18: AOT_REGCACHE_SYNC_OUT(); return; L_089D0A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D104C; } @@ -2078,7 +2029,6 @@ L_089D0A28: aot_gpr_5 = (2048u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0A58; } @@ -2096,12 +2046,10 @@ L_089D0A3C: AOT_REGCACHE_SYNC_OUT(); return; L_089D0A58: aot_gpr_31 = (0x089D0A60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0A60u) goto L_089D0A60; AOT_REGCACHE_SYNC_OUT(); return; L_089D0A60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D0B30; } @@ -2109,13 +2057,11 @@ L_089D0A60: } L_089D0A68: aot_gpr_31 = (0x089D0A70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0A70u) goto L_089D0A70; AOT_REGCACHE_SYNC_OUT(); return; L_089D0A70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1712))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0B30; } @@ -2123,7 +2069,6 @@ L_089D0A70: } L_089D0A7C: aot_gpr_31 = (0x089D0A84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0A84u) goto L_089D0A84; AOT_REGCACHE_SYNC_OUT(); return; L_089D0A84: @@ -2131,7 +2076,6 @@ L_089D0A84: aot_gpr_5 = (2048u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0B30; } @@ -2139,7 +2083,6 @@ L_089D0A84: } L_089D0A98: aot_gpr_31 = (0x089D0AA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0AA0u) goto L_089D0AA0; AOT_REGCACHE_SYNC_OUT(); return; L_089D0AA0: @@ -2198,9 +2141,7 @@ L_089D0AA0: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D0B30; } @@ -2208,7 +2149,6 @@ L_089D0AA0: } L_089D0AF0: aot_gpr_31 = (0x089D0AF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0AF8u) goto L_089D0AF8; AOT_REGCACHE_SYNC_OUT(); return; L_089D0AF8: @@ -2238,7 +2178,6 @@ L_089D0B30: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0EF4; } @@ -2250,9 +2189,7 @@ L_089D0B44: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D0B74; } @@ -2274,9 +2211,7 @@ L_089D0B74: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D0BA4; } @@ -2316,7 +2251,6 @@ L_089D0BB0: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(52))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0DC4; } @@ -2330,7 +2264,6 @@ L_089D0BD0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0DC4; } @@ -2341,7 +2274,6 @@ L_089D0BF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 198u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D0C5C; } @@ -2383,7 +2315,6 @@ L_089D0C30: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0DC4; } @@ -2394,7 +2325,6 @@ L_089D0C5C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 222u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D0CD4; } @@ -2439,7 +2369,6 @@ L_089D0CA8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0DC4; } @@ -2449,7 +2378,6 @@ L_089D0CD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0D58; } @@ -2517,7 +2445,6 @@ L_089D0D30: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D0DC4; } @@ -2528,7 +2455,6 @@ L_089D0D58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D0DC4; } @@ -2637,7 +2563,6 @@ L_089D0E58: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(176), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089D0E78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0E78u) goto L_089D0E78; AOT_REGCACHE_SYNC_OUT(); return; L_089D0E78: @@ -2681,7 +2606,6 @@ L_089D0EF4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0F14; } @@ -2690,7 +2614,6 @@ L_089D0EF4: L_089D0F08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(1))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1044; } @@ -2701,7 +2624,6 @@ L_089D0F14: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D0F34; } @@ -2714,7 +2636,6 @@ L_089D0F28: goto L_089D0F34; L_089D0F34: aot_gpr_31 = (0x089D0F3Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D0F3Cu) goto L_089D0F3C; AOT_REGCACHE_SYNC_OUT(); return; L_089D0F3C: @@ -2742,7 +2663,6 @@ L_089D0F3C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D0FE8; } @@ -2816,7 +2736,6 @@ L_089D0FE8: AOT_REGCACHE_SYNC_OUT(); return; L_089D103C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D104C; } @@ -2844,7 +2763,17 @@ L_089D104C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1074: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -2870,7 +2799,6 @@ L_089D1074: L_089D10D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1712))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D1118; } @@ -2883,7 +2811,6 @@ L_089D10E0: AOT_REGCACHE_SYNC_OUT(); return; L_089D10E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D1110; } @@ -2898,7 +2825,6 @@ L_089D10F8: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D130C; } @@ -2906,7 +2832,6 @@ L_089D10F8: } L_089D1108: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D1700; } @@ -2935,7 +2860,6 @@ L_089D1120: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1170; } @@ -2945,7 +2869,6 @@ L_089D113C: aot_gpr_4 = (ctx.gpr[16] | 0u); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(478)))))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_089D1160; } @@ -2954,7 +2877,6 @@ L_089D113C: L_089D114C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(452))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1168; } @@ -2978,7 +2900,6 @@ L_089D1160: } L_089D1168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D10F0; } @@ -2991,7 +2912,6 @@ L_089D1170: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D11D4; } @@ -3001,7 +2921,6 @@ L_089D118C: aot_gpr_4 = (ctx.gpr[16] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(596))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089D11B0; } @@ -3010,7 +2929,6 @@ L_089D118C: L_089D119C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089D10F0; } @@ -3018,7 +2936,6 @@ L_089D119C: } L_089D11A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D11B8; } @@ -3040,7 +2957,6 @@ L_089D11B8: L_089D11C0: aot_gpr_4 = (ctx.gpr[2] < static_cast(225) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D10F0; } @@ -3061,7 +2977,6 @@ L_089D11D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D10F0; } @@ -3083,7 +2998,6 @@ L_089D120C: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D1304; } @@ -3095,15 +3009,23 @@ L_089D121C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3488))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1234: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(376))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D1248; } @@ -3111,7 +3033,6 @@ L_089D1234: } L_089D1240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D1304; } @@ -3128,7 +3049,6 @@ L_089D1248: L_089D1250: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(368))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D1274; } @@ -3138,7 +3058,6 @@ L_089D125C: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D127C; } @@ -3178,9 +3097,7 @@ L_089D129C: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D12F4; } @@ -3212,7 +3129,6 @@ L_089D12E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(96))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089D12FC; } @@ -3220,7 +3136,6 @@ L_089D12E4: } L_089D12F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D1304; } @@ -3236,7 +3151,6 @@ L_089D12FC: } L_089D1304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D10F0; } @@ -3262,12 +3176,10 @@ L_089D1334: ctx.gpr[20] = (ctx.gpr[16] | 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1712), ctx.gpr[22]); aot_gpr_31 = (0x089D1344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D1344u) goto L_089D1344; AOT_REGCACHE_SYNC_OUT(); return; L_089D1344: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089D1430; } @@ -3275,7 +3187,6 @@ L_089D1344: } L_089D134C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089D136C; } @@ -3290,7 +3201,6 @@ L_089D1354: AOT_REGCACHE_SYNC_OUT(); return; L_089D1364: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D13C4; } @@ -3370,7 +3280,6 @@ L_089D1424: AOT_REGCACHE_SYNC_OUT(); return; L_089D1430: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3380,7 +3289,6 @@ L_089D1438: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D1468; } @@ -3397,7 +3305,6 @@ L_089D1448: AOT_REGCACHE_SYNC_OUT(); return; L_089D1460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3414,7 +3321,6 @@ L_089D1468: AOT_REGCACHE_SYNC_OUT(); return; L_089D1480: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3427,7 +3333,6 @@ L_089D1488: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D14B0; } @@ -3436,7 +3341,6 @@ L_089D1488: L_089D14A4: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(452), ctx.gpr[22]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3449,7 +3353,6 @@ L_089D14B0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1524; } @@ -3464,7 +3367,6 @@ L_089D14CC: AOT_REGCACHE_SYNC_OUT(); return; L_089D14DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D14F4; } @@ -3477,7 +3379,6 @@ L_089D14E4: AOT_REGCACHE_SYNC_OUT(); return; L_089D14EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D14FC; } @@ -3490,7 +3391,6 @@ L_089D14F4: AOT_REGCACHE_SYNC_OUT(); return; L_089D14FC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089D151C; } @@ -3507,7 +3407,6 @@ L_089D1504: AOT_REGCACHE_SYNC_OUT(); return; L_089D151C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3520,7 +3419,6 @@ L_089D1524: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3548,7 +3446,6 @@ L_089D155C: goto L_089D156C; L_089D156C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089D158C; } @@ -3557,7 +3454,6 @@ L_089D156C: L_089D1574: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(376), ctx.gpr[22]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3565,7 +3461,6 @@ L_089D1574: } L_089D1580: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D158C; } @@ -3608,7 +3503,6 @@ L_089D158C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089D15F8; } @@ -3621,7 +3515,6 @@ L_089D15BC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D15F8; } @@ -3634,7 +3527,6 @@ L_089D15D8: AOT_REGCACHE_SYNC_OUT(); return; L_089D15E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D15F8; } @@ -3664,7 +3556,6 @@ L_089D15F8: } L_089D1610: aot_gpr_31 = (0x089D1618u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D1618u) goto L_089D1618; AOT_REGCACHE_SYNC_OUT(); return; L_089D1618: @@ -3693,7 +3584,6 @@ L_089D162C: } L_089D1654: aot_gpr_31 = (0x089D165Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D165Cu) goto L_089D165C; AOT_REGCACHE_SYNC_OUT(); return; L_089D165C: @@ -3728,7 +3618,6 @@ L_089D1694: L_089D16B0: aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(36), ctx.gpr[17]); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089D16CC; } @@ -3759,7 +3648,6 @@ L_089D16D4: aot_mem.aot_direct_store8(ctx.gpr[22] + static_cast(3), static_cast(ctx.gpr[23])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1700; } @@ -3767,7 +3655,6 @@ L_089D16D4: } L_089D16F0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089D1700; } @@ -3800,7 +3687,17 @@ L_089D1704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1734: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3809,7 +3706,6 @@ L_089D1734: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1A68; } @@ -3820,7 +3716,6 @@ L_089D177C: aot_gpr_4 = (ctx.gpr[16] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1A58; } @@ -3845,9 +3740,7 @@ L_089D1790: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D1A58; } @@ -4040,9 +3933,7 @@ L_089D1A24: aot_mem.aot_direct_store8(ctx.gpr[18] + static_cast(76), static_cast(aot_gpr_4)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D1A50; } @@ -4067,7 +3958,6 @@ L_089D1A58: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D177C; } @@ -4097,7 +3987,17 @@ L_089D1A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1AA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4126,7 +4026,17 @@ L_089D1AC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1AEC: aot_gpr_5 = (18804u << 16u); aot_gpr_5 = (aot_gpr_5 | 9216u); @@ -4143,7 +4053,17 @@ L_089D1AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1B1C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), std::bit_cast(aot_fpr_13)); @@ -4154,7 +4074,17 @@ L_089D1B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1B34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -4173,7 +4103,17 @@ L_089D1B54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_5); @@ -4231,7 +4171,6 @@ L_089D1BD0: ctx.gpr[10] = (ctx.gpr[11] + ctx.gpr[3]); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_089D1C14; } @@ -4291,7 +4230,17 @@ L_089D1C44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1C64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -4356,7 +4305,6 @@ L_089D1D28: aot_gpr_6 = (aot_gpr_6 + static_cast(-2)); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089D1D40; } @@ -4382,7 +4330,17 @@ L_089D1D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1D64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4435,7 +4393,6 @@ L_089D1DE0: aot_gpr_4 = (ctx.gpr[20] + aot_gpr_4); ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089D1E34; } @@ -4459,7 +4416,6 @@ L_089D1E0C: AOT_REGCACHE_SYNC_OUT(); return; L_089D1E18: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D1E28; } @@ -4476,7 +4432,6 @@ L_089D1E20: L_089D1E28: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089D1DFC; } @@ -4504,7 +4459,17 @@ L_089D1E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1E68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4543,7 +4508,17 @@ L_089D1E90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1ED8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); aot_gpr_4 = (std::bit_cast(aot_fpr_12)); @@ -4557,11 +4532,20 @@ L_089D1ED8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1F04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -4598,7 +4582,6 @@ L_089D1F34: goto L_089D1F3C; L_089D1F3C: aot_gpr_31 = (0x089D1F44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D1F44u) goto L_089D1F44; AOT_REGCACHE_SYNC_OUT(); return; L_089D1F44: @@ -4606,7 +4589,6 @@ L_089D1F44: goto L_089D1F48; L_089D1F48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D1F58; } @@ -4629,7 +4611,17 @@ L_089D1F58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D1F6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_7 = (aot_gpr_5 | 0u); @@ -4638,7 +4630,6 @@ L_089D1F6C: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D1FC0; } @@ -4709,7 +4700,6 @@ L_089D1FE8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D2020; } @@ -4732,7 +4722,17 @@ L_089D2024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D202C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4769,7 +4769,17 @@ L_089D2040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D20A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[16]); @@ -4848,7 +4858,6 @@ L_089D212C: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D21CC; } @@ -4867,7 +4876,6 @@ L_089D21CC: L_089D21D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(214))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D21F0; } @@ -4881,7 +4889,6 @@ L_089D21E4: L_089D21F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(1931))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089D2208; } @@ -4998,7 +5005,6 @@ L_089D22C0: } L_089D22C8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D22E4; } @@ -5034,7 +5040,17 @@ L_089D22EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2304: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5055,7 +5071,6 @@ L_089D2324: } L_089D232C: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D2398; } @@ -5098,7 +5113,6 @@ L_089D2350: goto L_089D2390; L_089D2390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D2324; } @@ -5108,7 +5122,6 @@ L_089D2398: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(214), static_cast(aot_gpr_6)); ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089D23CC; } @@ -5121,7 +5134,6 @@ L_089D23A8: AOT_REGCACHE_SYNC_OUT(); return; L_089D23B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D23C0; } @@ -5140,7 +5152,6 @@ L_089D23C0: goto L_089D23C4; L_089D23C4: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_089D23A8; } @@ -5158,7 +5169,17 @@ L_089D23CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D23E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5173,7 +5194,6 @@ L_089D23E0: AOT_REGCACHE_SYNC_OUT(); return; L_089D2404: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D2520; } @@ -5183,7 +5203,6 @@ L_089D240C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(176))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(176))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5193,7 +5212,6 @@ L_089D241C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(340))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(340))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5203,7 +5221,6 @@ L_089D242C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(178))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(178))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5213,7 +5230,6 @@ L_089D243C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(180))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(180))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5223,7 +5239,6 @@ L_089D244C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(181))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(181))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5233,7 +5248,6 @@ L_089D245C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(182))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(182))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5243,7 +5257,6 @@ L_089D246C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(183))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(183))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5253,7 +5266,6 @@ L_089D247C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(345))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(345))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5263,9 +5275,7 @@ L_089D248C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(184))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D2520; } @@ -5275,9 +5285,7 @@ L_089D24A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(188))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(188))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D2520; } @@ -5304,7 +5312,6 @@ L_089D24CC: AOT_REGCACHE_SYNC_OUT(); return; L_089D24E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D2520; } @@ -5314,7 +5321,6 @@ L_089D24EC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(342))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(342))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5324,7 +5330,6 @@ L_089D24FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(344))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(344))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5334,7 +5339,6 @@ L_089D250C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(346))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(346))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D2520; } @@ -5357,7 +5361,17 @@ L_089D2520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D253C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5549,7 +5563,17 @@ L_089D26DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D273C: ctx.gpr[2] = (2205u << 16u); jump_target = aot_gpr_31; @@ -5557,12 +5581,21 @@ L_089D273C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2748: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089D2758u); - // nop goto L_089D273C; L_089D2758: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5571,7 +5604,17 @@ L_089D2758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2764: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5600,7 +5643,6 @@ L_089D2794: goto L_089D279C; L_089D279C: aot_gpr_31 = (0x089D27A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D27A4u) goto L_089D27A4; AOT_REGCACHE_SYNC_OUT(); return; L_089D27A4: @@ -5622,7 +5664,6 @@ L_089D27BC: goto L_089D27C0; L_089D27C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D27CC; } @@ -5645,7 +5686,17 @@ L_089D27CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D27E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5676,7 +5727,6 @@ L_089D2818: L_089D2824: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D2838; } @@ -5699,14 +5749,34 @@ L_089D2838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D284C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2854: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -5743,7 +5813,17 @@ L_089D2890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D28A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5773,7 +5853,17 @@ L_089D28CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D28D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -5813,7 +5903,17 @@ L_089D2920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5828,7 +5928,17 @@ L_089D2944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2950: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6051,7 +6161,6 @@ L_089D2B1C: } L_089D2B28: aot_gpr_31 = (0x089D2B30u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D2B30u) goto L_089D2B30; AOT_REGCACHE_SYNC_OUT(); return; L_089D2B30: @@ -6077,7 +6186,17 @@ L_089D2B44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2B68: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -6227,7 +6346,17 @@ L_089D2CC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -6257,7 +6386,6 @@ L_089D2D04: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D2DE8; } @@ -6275,7 +6403,6 @@ L_089D2D44: L_089D2D5C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089D2D70; } @@ -6293,7 +6420,6 @@ L_089D2D70: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_gpr_5 + static_cast(4)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089D2DA8; } @@ -6325,7 +6451,6 @@ L_089D2DA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9628))); aot_gpr_6 = (aot_gpr_5 + static_cast(4)); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_089D2DDC; } @@ -6361,7 +6486,6 @@ L_089D2DE8: AOT_REGCACHE_SYNC_OUT(); return; L_089D2DF0: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089D2E00; } @@ -6369,7 +6493,6 @@ L_089D2DF0: } L_089D2DF8: aot_gpr_31 = (0x089D2E00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 606u, 0x08A17A04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D2E00u) goto L_089D2E00; AOT_REGCACHE_SYNC_OUT(); return; L_089D2E00: @@ -6383,7 +6506,6 @@ L_089D2E08: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D2F24; } @@ -6391,7 +6513,6 @@ L_089D2E08: } L_089D2E20: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089D2E38; } @@ -6440,7 +6561,6 @@ L_089D2E5C: goto L_089D2E6C; L_089D2E6C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D2F10; } @@ -6451,7 +6571,6 @@ L_089D2E74: aot_gpr_6 = (0u | 0u); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D2F10; } @@ -6462,7 +6581,6 @@ L_089D2E88: aot_gpr_7 = (aot_gpr_5 + aot_gpr_7); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(1824))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089D2EFC; } @@ -6513,7 +6631,6 @@ L_089D2EFC: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_089D2E88; } @@ -6524,7 +6641,6 @@ L_089D2F10: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089D2E20; } @@ -6557,7 +6673,6 @@ L_089D2F4C: goto L_089D2F50; L_089D2F50: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D2F60; } @@ -6581,7 +6696,17 @@ L_089D2F60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2F78: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -6640,7 +6765,17 @@ L_089D2FE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D2FFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_6); @@ -6747,14 +6882,33 @@ L_089D30FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3118: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3120: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6799,7 +6953,6 @@ L_089D317C: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(234)))))); ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(18)))))); { const bool branch_taken = ctx.gpr[11] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089D31D0; } @@ -6813,7 +6966,6 @@ L_089D318C: ctx.gpr[9] = (aot_gpr_7 + ctx.gpr[9]); ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(16)))))); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_089D31C8; } @@ -6823,7 +6975,6 @@ L_089D31AC: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(234)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(18)))))); { const bool branch_taken = ctx.gpr[11] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089D31C8; } @@ -6840,7 +6991,6 @@ L_089D31BC: } L_089D31C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D31D8; } @@ -6872,7 +7022,17 @@ L_089D31E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D31FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6908,7 +7068,6 @@ L_089D324C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D3270; } @@ -6944,7 +7103,17 @@ L_089D3284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3298: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_fpr_13 = std::bit_cast(0u); @@ -7015,9 +7184,7 @@ L_089D333C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D3364; } @@ -7049,7 +7216,17 @@ L_089D3368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3388: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(0u); @@ -7073,7 +7250,6 @@ L_089D3388: L_089D33C0: aot_gpr_4 = (static_cast(ctx.gpr[16]) < 18 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D33DC; } @@ -7161,21 +7337,51 @@ L_089D3434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3450: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(216), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3458: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(216))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3460: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[18]); @@ -7193,7 +7399,6 @@ L_089D3460: L_089D348C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D34B4; } @@ -7231,7 +7436,17 @@ L_089D34B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D34D0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -7243,7 +7458,6 @@ L_089D34D0: ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (65535u << 16u); if (branch_taken) { @@ -7256,7 +7470,6 @@ L_089D3504: ctx.gpr[10] = (ctx.gpr[10] | 14269u); ctx.fpr[15] = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); if (branch_taken) { @@ -7272,7 +7485,6 @@ L_089D3524: goto L_089D3528; L_089D3528: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089D353C; } @@ -7295,7 +7507,6 @@ L_089D3544: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_14 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (0u | 0u); if (branch_taken) { @@ -7308,7 +7519,6 @@ L_089D355C: ctx.gpr[10] = (ctx.gpr[10] | 14269u); ctx.fpr[15] = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); if (branch_taken) { @@ -7324,7 +7534,6 @@ L_089D357C: goto L_089D3580; L_089D3580: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089D359C; } @@ -7373,7 +7582,6 @@ L_089D35D8: ctx.gpr[9] = (aot_gpr_7 | 55050u); ctx.fpr[15] = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -7386,7 +7594,6 @@ L_089D35FC: ctx.gpr[9] = (ctx.gpr[9] | 55050u); ctx.fpr[15] = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 & 255u); if (branch_taken) { @@ -7402,7 +7609,6 @@ L_089D361C: goto L_089D3620; L_089D3620: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_089D3634; } @@ -7426,7 +7632,6 @@ L_089D363C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -7439,7 +7644,6 @@ L_089D3658: ctx.gpr[9] = (ctx.gpr[9] | 14269u); aot_fpr_14 = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 & 255u); if (branch_taken) { @@ -7455,7 +7659,6 @@ L_089D3678: goto L_089D367C; L_089D367C: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_089D36A0; } @@ -7485,7 +7688,6 @@ L_089D36A0: L_089D36B8: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16)))))); { const bool branch_taken = ctx.gpr[10] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_089D36CC; } @@ -7498,7 +7700,6 @@ L_089D36C4: L_089D36CC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(18)))))); { const bool branch_taken = ctx.gpr[9] == aot_gpr_5; - // nop if (branch_taken) { goto L_089D36E0; } @@ -7511,7 +7712,6 @@ L_089D36D8: L_089D36E0: aot_gpr_5 = (ctx.gpr[8] & 65535u); { const bool branch_taken = aot_gpr_7 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D36F0; } @@ -7523,7 +7723,6 @@ L_089D36EC: L_089D36F0: aot_gpr_4 = (ctx.gpr[8] & aot_gpr_4); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_089D3700; } @@ -7534,11 +7733,20 @@ L_089D36FC: goto L_089D3700; L_089D3700: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3708: aot_gpr_4 = (aot_gpr_7 & 255u); ctx.gpr[8] = (aot_mem.aot_direct_load_word_right(aot_gpr_5 + static_cast(0), ctx.gpr[8])); @@ -7552,7 +7760,6 @@ L_089D3708: aot_mem.aot_direct_store8(ctx.gpr[9] + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_7 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D37FC; } @@ -7611,7 +7818,6 @@ L_089D373C: L_089D37FC: aot_gpr_4 = (aot_gpr_7 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D38C8; } @@ -7670,7 +7876,6 @@ L_089D3808: L_089D38C8: aot_gpr_4 = (aot_gpr_7 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3994; } @@ -7729,7 +7934,6 @@ L_089D38D4: L_089D3994: aot_gpr_4 = (aot_gpr_7 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3A60; } @@ -7788,7 +7992,6 @@ L_089D39A0: L_089D3A60: aot_gpr_4 = (aot_gpr_7 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3AD4; } @@ -7825,7 +8028,6 @@ L_089D3A6C: L_089D3AD4: aot_gpr_4 = (aot_gpr_7 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3B48; } @@ -7862,7 +8064,6 @@ L_089D3AE0: L_089D3B48: aot_gpr_4 = (aot_gpr_7 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3BB4; } @@ -7897,7 +8098,6 @@ L_089D3B54: L_089D3BB4: aot_gpr_4 = (aot_gpr_7 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3C20; } @@ -7931,11 +8131,20 @@ L_089D3BC0: goto L_089D3C20; L_089D3C20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3C28: aot_gpr_5 = (aot_gpr_5 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -7944,7 +8153,6 @@ L_089D3C28: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3CB0; } @@ -7981,7 +8189,6 @@ L_089D3C48: L_089D3CB0: aot_gpr_7 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3D24; } @@ -8018,7 +8225,6 @@ L_089D3CBC: L_089D3D24: aot_gpr_7 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3D98; } @@ -8055,7 +8261,6 @@ L_089D3D30: L_089D3D98: aot_gpr_7 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3E0C; } @@ -8092,7 +8297,6 @@ L_089D3DA4: L_089D3E0C: aot_gpr_7 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3E44; } @@ -8114,7 +8318,6 @@ L_089D3E18: L_089D3E44: aot_gpr_7 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3E7C; } @@ -8136,7 +8339,6 @@ L_089D3E50: L_089D3E7C: aot_gpr_7 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089D3EC8; } @@ -8163,7 +8365,6 @@ L_089D3E88: L_089D3EC8: aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D3F14; } @@ -8189,11 +8390,20 @@ L_089D3ED4: goto L_089D3F14; L_089D3F14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D3F1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0116.cpp b/profiles/vcs/generated/generated_unit_0116.cpp index cbd520f..8de87b2 100644 --- a/profiles/vcs/generated/generated_unit_0116.cpp +++ b/profiles/vcs/generated/generated_unit_0116.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0116[4091] = { - 1, 2, 0, 0, 0, 0, 3, 0, 4, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, - 0, 0, 9, 0, 0, 10, 0, 11, 0, 0, 0, 12, 0, 13, 0, 14, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, - 0, 19, 0, 0, 0, 20, 0, 0, 0, 21, 0, 22, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 27, 0, 0, 0, - 28, 0, 0, 29, 0, 0, 0, 0, 30, 0, 31, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, - 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 49, 0, 0, 50, 0, 0, - 51, 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 61, 0, 0, 62, 0, 63, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 73, 0, 0, 0, 74, - 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 79, 0, 0, 0, - 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 88, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 107, 0, 0, 0, 108, 0, 0, 109, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 117, 0, 118, 0, 119, - 0, 0, 0, 120, 0, 0, 121, 0, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, - 0, 0, 127, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 130, 0, 131, 0, 132, 0, 133, 0, 0, 0, 134, 0, 135, 136, 0, 0, 0, 0, 137, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 139, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, - 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 152, 0, 0, 153, 0, 154, 0, - 0, 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 158, 0, 0, 0, 159, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 163, 0, 164, 0, 0, 0, 165, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 0, 169, 0, 0, 0, 170, 0, 0, 0, 0, - 171, 0, 0, 172, 173, 0, 0, 174, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 181, 0, 0, 0, 182, 0, 183, 184, 185, 0, 0, 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 189, 0, 0, - 190, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, - 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 0, 202, 203, 0, 0, 204, 0, 205, 0, 206, 0, 0, 207, 0, 208, 0, 0, 209, 0, 0, - 210, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 214, 215, 0, 216, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, - 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, 226, 0, 0, - 0, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 234, 235, 0, 0, 0, 236, 0, - 0, 237, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 240, 0, 241, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 244, 0, 245, 0, 0, 0, - 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 249, 0, 0, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 0, - 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 269, 270, 271, 0, 272, 0, 0, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 0, 0, 274, 275, 276, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 281, 0, 0, 0, 282, 0, - 0, 283, 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 288, 289, 0, 290, 0, 0, 0, 291, - 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 295, 296, 0, 297, 0, 0, 0, 298, 0, 299, 0, 0, - 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 304, 0, 0, 0, 305, 0, 306, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, - 0, 309, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, 0, 312, 0, 313, 314, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, - 0, 318, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 326, - 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 334, - 0, 0, 0, 0, 335, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, 340, 341, 0, 342, 0, 0, 0, 0, - 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 345, 346, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 349, 350, 351, 0, 352, - 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, - 360, 0, 0, 0, 361, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, - 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 372, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 387, 388, 0, 0, - 0, 389, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, - 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, - 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 415, 0, 0, 0, 0, 416, 417, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 428, - 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, - 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 0, 448, 449, - 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 457, 0, - 0, 0, 458, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, - 0, 0, 466, 0, 0, 0, 467, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 478, - 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, - 484, 0, 0, 485, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, 495, 0, 496, 497, 0, 0, - 498, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, 0, 0, - 505, 0, 0, 506, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, - 0, 0, 513, 0, 0, 0, 0, 514, 0, 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 518, 0, 0, 0, 0, 519, - 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 523, 0, 524, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 527, 0, 0, 528, 0, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 531, 0, 532, 0, 533, 0, 0, 0, 0, 0, 534, 0, - 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 551, 0, 0, 552, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 555, - 0, 0, 556, 557, 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 0, 0, 0, 0, 564, - 0, 0, 0, 0, 0, 0, 565, 0, 0, 566, 0, 0, 567, 568, 0, 0, 0, 569, 0, 570, 0, 571, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, - 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, - 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 578, 0, 579, 0, 0, 0, 0, 580, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, - 0, 0, 583, 0, 0, 0, 584, 0, 585, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 589, 0, - 0, 0, 0, 590, 0, 591, 0, 592, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 594, 595, 0, 596, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, - 599, 0, 600, 601, 0, 602, 0, 603, 0, 604, 0, 0, 605, 0, 0, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 609, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 612, 0, 0, 613, - 0, 614, 0, 615, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 618, 619, 0, 0, 0, 0, 620, 0, 621, 0, 622, 0, - 0, 623, 0, 0, 624, 0, 625, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 627, 0, 0, 0, 0, 0, 628, 629, 0, 630, 0, 631, 0, 632, 0, 0, 0, 633, 0, 634, 0, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, - 0, 0, 0, 640, 0, 0, 0, 641, 0, 642, 0, 643, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 647, 0, 648, 0, 649, - 0, 650, 0, 651, 0, 652, 0, 0, 0, 0, 653, 0, 654, 0, 655, 0, 0, 0, 0, 656, 0, 657, 0, 658, 0, 0, 0, 0, 0, 659, 0, 0, - 0, 660, 0, 661, 0, 662, 0, 0, 663, 0, 664, 0, 665, 0, 0, 666, 667, 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, 0, 670, 0, 0, 671, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 673, 0, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 682, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, - 0, 0, 0, 687, 0, 688, 0, 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, - 0, 693, 0, 694, 0, 695, 696, 0, 0, 0, 0, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 700, 0, 0, 0, 0, 0, - 701, 702, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 705, 0, 0, 706, 707, 0, 0, 0, 0, 708, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 713, 0, 714, 0, 0, 0, 715, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 721, 722, 0, 0, - 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 0, 0, 0, 0, 727, 728, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0116[64] = { + 0x1422A8A444010343ull, 0x48A1150911422A22ull, 0x0200000040448010ull, 0x01090A2124A04084ull, + 0x8A5155010A482040ull, 0x000042021A000110ull, 0x0904820120520A00ull, 0x8084010008240801ull, + 0x0050212200040A00ull, 0x80848248A8810600ull, 0x5002C400868AA214ull, 0x5211404010001201ull, + 0x08A0288A80A22884ull, 0x21140E8804449499ull, 0x252A641148228845ull, 0x2280908A422E0111ull, + 0x1508A422464908A4ull, 0x281108A00208A021ull, 0x0080000400205028ull, 0x448822E040B81024ull, + 0x28B810208B810222ull, 0x2089A1121228B810ull, 0x8888888888889112ull, 0xB8102E040B810250ull, + 0x1000021111111110ull, 0x0000000004080000ull, 0x4004000000000800ull, 0x0048022009000002ull, + 0x0000000000012000ull, 0x0012000000000000ull, 0x0000012000000000ull, 0x0000000009000000ull, + 0x1200908231004800ull, 0x2200880220088022ull, 0x4400224401100000ull, 0x0401130802200000ull, + 0x0090000000000010ull, 0x8221200484020A00ull, 0x0000000000009002ull, 0x0000048000000120ull, + 0xC211000000484000ull, 0x2211242444424228ull, 0x8448844001108844ull, 0x0048920908844008ull, + 0x0542011135408001ull, 0x8420128402910149ull, 0x0010006800000111ull, 0x0000091041511120ull, + 0x0000400000224000ull, 0xA412440024904420ull, 0x042A32408141144Cull, 0x4421504204000008ull, + 0x222C80A841005144ull, 0x94000800841212ADull, 0x000000D25432004Aull, 0xAA088A88AA945582ull, + 0x9029952A20A8542Aull, 0x080AA44000000000ull, 0x0000000000000000ull, 0x0100048000000000ull, + 0x2008212848020210ull, 0x086480830480A06Aull, 0x0000A28010041020ull, 0x0609014034200820ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0116[64] = { + 1u, 19u, 38u, 44u, 58u, 75u, 83u, 95u, 104u, 113u, 127u, 144u, 155u, 171u, 190u, 210u, + 227u, 246u, 259u, 266u, 283u, 300u, 318u, 335u, 353u, 364u, 366u, 369u, 376u, 378u, 380u, 382u, + 384u, 395u, 405u, 413u, 421u, 424u, 435u, 438u, 442u, 450u, 466u, 479u, 491u, 505u, 520u, 527u, + 538u, 542u, 556u, 573u, 583u, 599u, 614u, 627u, 650u, 672u, 679u, 679u, 682u, 693u, 709u, 717u, }; void recomp_unit_0116_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0116_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089D4000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0116[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0116[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0116[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089D4000; @@ -908,13 +815,11 @@ L_089D4004: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); jump_target = aot_gpr_5; aot_gpr_31 = (0x089D4018u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D4018u) goto L_089D4018; AOT_REGCACHE_SYNC_OUT(); return; L_089D4018: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D4024; } @@ -937,7 +842,17 @@ L_089D4024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4040: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -995,7 +910,6 @@ L_089D40AC: goto L_089D40B4; L_089D40B4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D41A8; } @@ -1055,7 +969,6 @@ L_089D4114: goto L_089D4124; L_089D4124: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089D41A8; } @@ -1123,7 +1036,6 @@ L_089D418C: AOT_REGCACHE_SYNC_OUT(); return; L_089D41A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D41F8; } @@ -1183,7 +1095,17 @@ L_089D41F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4210: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(20), aot_gpr_16); @@ -1212,14 +1134,23 @@ L_089D4248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4258: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(4), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089D4278u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 570u, 0x0888FA44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D4278u) goto L_089D4278; AOT_REGCACHE_SYNC_OUT(); return; L_089D4278: @@ -1393,7 +1324,17 @@ L_089D43E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4418: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1424,7 +1365,6 @@ L_089D444C: L_089D4458: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D446C; } @@ -1447,7 +1387,17 @@ L_089D446C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4480: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1468,7 +1418,6 @@ L_089D44A0: AOT_REGCACHE_SYNC_OUT(); return; L_089D44A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D44C0; } @@ -1476,7 +1425,6 @@ L_089D44A8: } L_089D44B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D44D8; } @@ -1484,7 +1432,6 @@ L_089D44B0: } L_089D44B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D45A4; } @@ -1560,7 +1507,6 @@ L_089D4520: goto L_089D4564; L_089D4564: aot_gpr_31 = (0x089D456Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D456Cu) goto L_089D456C; AOT_REGCACHE_SYNC_OUT(); return; L_089D456C: @@ -1597,7 +1543,17 @@ L_089D45A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D45B8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-144)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1640,7 +1596,6 @@ L_089D462C: L_089D4644: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D46A4; } @@ -1690,7 +1645,6 @@ L_089D46A4: L_089D46BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D47DC; } @@ -1708,7 +1662,6 @@ L_089D46C8: L_089D46E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(337))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D47DC; } @@ -1719,7 +1672,6 @@ L_089D46EC: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_4 = (aot_gpr_4 < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D47DC; } @@ -1817,7 +1769,6 @@ L_089D47C8: aot_gpr_16 = (aot_gpr_16 & 255u); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D47A0; } @@ -1838,7 +1789,17 @@ L_089D47DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D47FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1882,7 +1843,6 @@ L_089D4848: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4928; } @@ -1898,7 +1858,6 @@ L_089D4884: L_089D4894: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(214))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D48D8; } @@ -1923,7 +1882,6 @@ L_089D48B4: AOT_REGCACHE_SYNC_OUT(); return; L_089D48D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D4924; } @@ -1967,7 +1925,17 @@ L_089D4928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4940: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1992,7 +1960,6 @@ L_089D495C: } L_089D496C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D498C; } @@ -2000,7 +1967,6 @@ L_089D496C: } L_089D4974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D49C8; } @@ -2015,7 +1981,6 @@ L_089D497C: L_089D498C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(372))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D49A4; } @@ -2055,7 +2020,17 @@ L_089D49C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D49DC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2072,7 +2047,6 @@ L_089D49DC: L_089D49FC: aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D4A3C; } @@ -2080,7 +2054,6 @@ L_089D49FC: } L_089D4A08: aot_gpr_31 = (0x089D4A10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 180u, 0x08945288u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D4A10u) goto L_089D4A10; AOT_REGCACHE_SYNC_OUT(); return; L_089D4A10: @@ -2102,7 +2075,6 @@ L_089D4A24: goto L_089D4A34; L_089D4A34: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089D4A68; } @@ -2122,7 +2094,6 @@ L_089D4A4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(372))); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_31 = (0x089D4A5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 518u, 0x0895B97Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D4A5Cu) goto L_089D4A5C; AOT_REGCACHE_SYNC_OUT(); return; L_089D4A5C: @@ -2145,7 +2116,17 @@ L_089D4A68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4A7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); @@ -2167,7 +2148,6 @@ L_089D4AA8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089D4ABC; } @@ -2182,7 +2162,17 @@ L_089D4ABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4AC4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -2194,7 +2184,6 @@ L_089D4AC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089D4AF8; } @@ -2202,7 +2191,6 @@ L_089D4AC4: } L_089D4AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D4B24; } @@ -2210,7 +2198,6 @@ L_089D4AF0: } L_089D4AF8: aot_gpr_31 = (0x089D4B00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D4B00u) goto L_089D4B00; AOT_REGCACHE_SYNC_OUT(); return; L_089D4B00: @@ -2232,7 +2219,17 @@ L_089D4B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D4B30: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2253,7 +2250,6 @@ L_089D4B70: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D5254; } @@ -2292,7 +2288,6 @@ L_089D4BD0: L_089D4BE4: aot_gpr_5 = (ctx.gpr[19] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4D1C; } @@ -2324,7 +2319,6 @@ L_089D4C1C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4D10; } @@ -2332,7 +2326,6 @@ L_089D4C1C: } L_089D4C2C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D4C54; } @@ -2370,7 +2363,6 @@ L_089D4C5C: goto L_089D4C7C; L_089D4C7C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4D10; } @@ -2378,7 +2370,6 @@ L_089D4C7C: } L_089D4C84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D4CAC; } @@ -2439,7 +2430,6 @@ L_089D4CEC: L_089D4D00: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(234)))))); { const bool branch_taken = aot_gpr_16 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D4D10; } @@ -2573,7 +2563,6 @@ L_089D4DE0: L_089D4DF4: aot_gpr_5 = (ctx.gpr[18] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4EC4; } @@ -2605,7 +2594,6 @@ L_089D4E2C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D4EB8; } @@ -2635,7 +2623,6 @@ L_089D4E54: L_089D4E6C: aot_gpr_6 = (static_cast(aot_gpr_6) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089D4EB8; } @@ -2665,7 +2652,6 @@ L_089D4E90: L_089D4EA8: aot_gpr_5 = (static_cast(aot_gpr_5) < 24 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4EB8; } @@ -2693,7 +2679,6 @@ L_089D4EC4: } L_089D4ECC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089D4F4C; } @@ -2710,7 +2695,6 @@ L_089D4ED4: } L_089D4EE0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D4F4C; } @@ -2719,7 +2703,6 @@ L_089D4EE0: L_089D4EE8: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(112))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089D4F48; } @@ -2788,7 +2771,6 @@ L_089D4F64: L_089D4F78: ctx.gpr[23] = (0u | 11u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089D5254; } @@ -2817,7 +2799,6 @@ L_089D4F9C: L_089D4FB0: aot_gpr_6 = (0u | 65535u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089D5254; } @@ -2885,7 +2866,6 @@ L_089D502C: L_089D5040: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(234)))))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089D5058; } @@ -2943,7 +2923,6 @@ L_089D5094: L_089D50A8: aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D5238; } @@ -2971,7 +2950,6 @@ L_089D50CC: goto L_089D50E0; L_089D50E0: { const bool branch_taken = aot_gpr_5 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_089D5214; } @@ -3005,9 +2983,7 @@ L_089D5114: aot_gpr_6 = (aot_gpr_6 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D5214; } @@ -3044,9 +3020,7 @@ L_089D5164: aot_gpr_5 = (aot_gpr_5 | 39322u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D5214; } @@ -3094,7 +3068,6 @@ L_089D51D0: AOT_REGCACHE_SYNC_OUT(); return; L_089D51EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D5254; } @@ -3111,7 +3084,6 @@ L_089D51F4: AOT_REGCACHE_SYNC_OUT(); return; L_089D520C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D5254; } @@ -3129,7 +3101,6 @@ L_089D5214: AOT_REGCACHE_SYNC_OUT(); return; L_089D5230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D5254; } @@ -3165,7 +3136,17 @@ L_089D5254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D5288: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3208,7 +3189,6 @@ L_089D5314: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -3221,7 +3201,6 @@ L_089D5330: ctx.gpr[7] = (ctx.gpr[7] | 4719u); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 255u); if (branch_taken) { @@ -3237,7 +3216,6 @@ L_089D5350: goto L_089D5354; L_089D5354: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D53A4; } @@ -3248,7 +3226,6 @@ L_089D535C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -3261,7 +3238,6 @@ L_089D5378: ctx.gpr[7] = (ctx.gpr[7] | 4719u); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 255u); if (branch_taken) { @@ -3277,7 +3253,6 @@ L_089D5398: goto L_089D539C; L_089D539C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089D53B4; } @@ -3304,7 +3279,6 @@ L_089D53CC: aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(178))); ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(178))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089D53E8; } @@ -3319,7 +3293,6 @@ L_089D53E8: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(180))); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(180))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089D5404; } @@ -3334,7 +3307,6 @@ L_089D5404: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(181))); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(181))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089D5424; } @@ -3351,7 +3323,6 @@ L_089D5424: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -3364,7 +3335,6 @@ L_089D5440: ctx.gpr[7] = (ctx.gpr[7] | 4719u); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 255u); if (branch_taken) { @@ -3380,7 +3350,6 @@ L_089D5460: goto L_089D5464; L_089D5464: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089D547C; } @@ -3408,7 +3377,6 @@ L_089D5494: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(184))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -3421,7 +3389,6 @@ L_089D54B0: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -3437,7 +3404,6 @@ L_089D54D0: goto L_089D54D4; L_089D54D4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D54EC; } @@ -3462,7 +3428,6 @@ L_089D54F4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(188))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -3475,7 +3440,6 @@ L_089D5510: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -3491,7 +3455,6 @@ L_089D5530: goto L_089D5534; L_089D5534: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D554C; } @@ -3515,7 +3478,6 @@ L_089D5554: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(214))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(214))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D5570; } @@ -3574,7 +3536,6 @@ L_089D55BC: L_089D55C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D55DC; } @@ -3602,7 +3563,6 @@ L_089D55F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(192))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(192))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D5610; } @@ -3624,7 +3584,6 @@ L_089D5620: aot_mem.aot_direct_store8(ctx.gpr[29] + static_cast(9), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[29] + static_cast(9))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D563C; } @@ -3639,7 +3598,6 @@ L_089D563C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(183))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(183))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D565C; } @@ -3655,7 +3613,6 @@ L_089D565C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(183))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D568C; } @@ -3665,7 +3622,6 @@ L_089D566C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(345))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(345))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D568C; } @@ -3681,7 +3637,6 @@ L_089D568C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(336))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(336))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D56AC; } @@ -3697,7 +3652,6 @@ L_089D56AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(337))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(337))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D56CC; } @@ -3713,7 +3667,6 @@ L_089D56CC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(338))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(338))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D56EC; } @@ -3742,13 +3695,11 @@ L_089D56FC: goto L_089D5710; L_089D5710: aot_gpr_31 = (0x089D5718u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D5718u) goto L_089D5718; AOT_REGCACHE_SYNC_OUT(); return; L_089D5718: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D5840; } @@ -3759,7 +3710,6 @@ L_089D5724: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(96))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -3772,7 +3722,6 @@ L_089D5740: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -3788,7 +3737,6 @@ L_089D5760: goto L_089D5764; L_089D5764: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D57FC; } @@ -3799,7 +3747,6 @@ L_089D576C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(100))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -3812,7 +3759,6 @@ L_089D5788: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -3828,7 +3774,6 @@ L_089D57A8: goto L_089D57AC; L_089D57AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D57FC; } @@ -3839,7 +3784,6 @@ L_089D57B4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(104))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -3852,7 +3796,6 @@ L_089D57D0: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -3868,7 +3811,6 @@ L_089D57F0: goto L_089D57F4; L_089D57F4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D5810; } @@ -3906,7 +3848,6 @@ L_089D5820: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(341)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(341)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D5840; } @@ -3922,7 +3863,6 @@ L_089D5840: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(342))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(342))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D5860; } @@ -3938,7 +3878,6 @@ L_089D5860: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(344))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(344))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D5880; } @@ -3993,7 +3932,17 @@ L_089D58A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D58F0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4023,7 +3972,6 @@ L_089D594C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089D594C; } @@ -4078,7 +4026,6 @@ L_089D5968: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (ctx.gpr[19] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5AF8; } @@ -4123,7 +4070,6 @@ L_089D5A2C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(182))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D5AF8; } @@ -4146,7 +4092,6 @@ L_089D5AC8: L_089D5AF8: aot_gpr_4 = (ctx.gpr[19] & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5B60; } @@ -4180,7 +4125,6 @@ L_089D5B04: L_089D5B60: aot_gpr_4 = (ctx.gpr[19] & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5B94; } @@ -4202,7 +4146,6 @@ L_089D5B94: aot_gpr_4 = (1024u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5BCC; } @@ -4223,7 +4166,6 @@ L_089D5BA4: L_089D5BCC: aot_gpr_4 = (ctx.gpr[19] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5C34; } @@ -4257,7 +4199,6 @@ L_089D5BD8: L_089D5C34: aot_gpr_4 = (ctx.gpr[19] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5DC4; } @@ -4365,7 +4306,6 @@ L_089D5C40: L_089D5DC4: aot_gpr_4 = (ctx.gpr[19] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5E94; } @@ -4425,7 +4365,6 @@ L_089D5DD0: L_089D5E94: aot_gpr_4 = (ctx.gpr[19] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D5F60; } @@ -4484,7 +4423,6 @@ L_089D5EA0: L_089D5F60: aot_gpr_4 = (ctx.gpr[19] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D602C; } @@ -4578,7 +4516,6 @@ L_089D6074: aot_gpr_4 = (ctx.gpr[20] << (ctx.gpr[21] & 31u)); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D609C; } @@ -4607,7 +4544,6 @@ L_089D609C: L_089D60B0: aot_gpr_4 = (ctx.gpr[19] & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D60E4; } @@ -4628,7 +4564,6 @@ L_089D60BC: L_089D60E4: aot_gpr_4 = (ctx.gpr[19] & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6104; } @@ -4646,7 +4581,6 @@ L_089D6104: aot_gpr_4 = (1u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D613C; } @@ -4668,7 +4602,6 @@ L_089D613C: aot_gpr_4 = (512u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6174; } @@ -4690,7 +4623,6 @@ L_089D6174: aot_gpr_4 = (2u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D61AC; } @@ -4712,7 +4644,6 @@ L_089D61AC: aot_gpr_4 = (4u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D61E4; } @@ -4734,7 +4665,6 @@ L_089D61E4: aot_gpr_4 = (8u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6250; } @@ -4769,7 +4699,6 @@ L_089D6250: aot_gpr_4 = (16u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6288; } @@ -4791,7 +4720,6 @@ L_089D6288: aot_gpr_4 = (32u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D62A4; } @@ -4807,7 +4735,6 @@ L_089D62A4: aot_gpr_4 = (64u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D62E8; } @@ -4832,7 +4759,6 @@ L_089D62E8: aot_gpr_4 = (128u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6354; } @@ -4867,7 +4793,6 @@ L_089D6354: aot_gpr_4 = (256u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D638C; } @@ -4890,7 +4815,6 @@ L_089D638C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(214))); aot_gpr_6 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D63B0; } @@ -4912,7 +4836,6 @@ L_089D63B0: aot_gpr_4 = (2048u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D63E8; } @@ -4947,7 +4870,17 @@ L_089D63E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D6410: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-192)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5006,7 +4939,6 @@ L_089D6410: L_089D64D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D652C; } @@ -5037,7 +4969,6 @@ L_089D64DC: AOT_REGCACHE_SYNC_OUT(); return; L_089D6524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D6544; } @@ -5060,7 +4991,6 @@ L_089D6544: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(182))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D657C; } @@ -5076,7 +5006,6 @@ L_089D6568: L_089D657C: aot_gpr_4 = (ctx.gpr[22] & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D65B4; } @@ -5098,7 +5027,6 @@ L_089D6588: L_089D65B4: aot_gpr_4 = (ctx.gpr[22] & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D65D4; } @@ -5129,7 +5057,6 @@ L_089D65E4: goto L_089D65FC; L_089D65FC: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_089D6630; } @@ -5151,7 +5078,6 @@ L_089D6604: L_089D6630: aot_gpr_4 = (ctx.gpr[22] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6714; } @@ -5254,7 +5180,6 @@ L_089D6720: L_089D679C: aot_gpr_4 = (ctx.gpr[22] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D684C; } @@ -5324,7 +5249,6 @@ L_089D6838: L_089D684C: aot_gpr_4 = (ctx.gpr[22] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D68C0; } @@ -5362,7 +5286,6 @@ L_089D68C0: ctx.gpr[19] = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(214))); aot_gpr_4 = (ctx.gpr[22] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D68E4; } @@ -5401,7 +5324,6 @@ L_089D68FC: } L_089D690C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6924; } @@ -5445,7 +5367,6 @@ L_089D6958: aot_gpr_4 = (ctx.gpr[18] << (aot_gpr_16 & 31u)); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6978; } @@ -5487,7 +5408,6 @@ L_089D6994: L_089D69A8: aot_gpr_4 = (ctx.gpr[22] & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D69C0; } @@ -5503,7 +5423,6 @@ L_089D69C0: aot_gpr_4 = (1u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D69E4; } @@ -5520,7 +5439,6 @@ L_089D69E4: aot_gpr_4 = (512u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6A08; } @@ -5537,7 +5455,6 @@ L_089D6A08: aot_gpr_4 = (2u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6A2C; } @@ -5554,7 +5471,6 @@ L_089D6A2C: aot_gpr_4 = (4u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6A50; } @@ -5571,7 +5487,6 @@ L_089D6A50: aot_gpr_4 = (8u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6A98; } @@ -5598,7 +5513,6 @@ L_089D6A98: aot_gpr_4 = (16u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6ABC; } @@ -5615,7 +5529,6 @@ L_089D6ABC: aot_gpr_4 = (32u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6AD8; } @@ -5631,7 +5544,6 @@ L_089D6AD8: aot_gpr_4 = (64u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6AFC; } @@ -5648,7 +5560,6 @@ L_089D6AFC: aot_gpr_4 = (128u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6B38; } @@ -5671,7 +5582,6 @@ L_089D6B38: aot_gpr_4 = (256u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6B5C; } @@ -5688,7 +5598,6 @@ L_089D6B5C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(176))); aot_gpr_5 = (0u | 65535u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D6DA4; } @@ -5705,7 +5614,6 @@ L_089D6B6C: L_089D6B80: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089D6CE0; } @@ -5725,7 +5633,6 @@ L_089D6B8C: L_089D6BA4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D6CE0; } @@ -5760,9 +5667,7 @@ L_089D6BD8: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D6C74; } @@ -5789,7 +5694,6 @@ L_089D6C00: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_089D6C3C; @@ -5800,9 +5704,7 @@ L_089D6C3C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D6C68; } @@ -5810,7 +5712,6 @@ L_089D6C3C: } L_089D6C58: aot_gpr_31 = (0x089D6C60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 36u, 0x08B6033Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D6C60u) goto L_089D6C60; AOT_REGCACHE_SYNC_OUT(); return; L_089D6C60: @@ -5823,7 +5724,6 @@ L_089D6C60: } L_089D6C68: aot_gpr_31 = (0x089D6C70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 26u, 0x089644F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D6C70u) goto L_089D6C70; AOT_REGCACHE_SYNC_OUT(); return; L_089D6C70: @@ -5885,7 +5785,6 @@ L_089D6CC4: AOT_REGCACHE_SYNC_OUT(); return; L_089D6CD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D6D9C; } @@ -5893,7 +5792,6 @@ L_089D6CD8: } L_089D6CE0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089D6D9C; } @@ -5913,7 +5811,6 @@ L_089D6CE8: L_089D6D00: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D6D9C; } @@ -5922,7 +5819,6 @@ L_089D6D00: L_089D6D0C: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089D6D9C; } @@ -5939,7 +5835,6 @@ L_089D6D20: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); if (branch_taken) { @@ -5949,9 +5844,7 @@ L_089D6D20: } L_089D6D40: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D6D64; } @@ -6007,7 +5900,6 @@ L_089D6D88: AOT_REGCACHE_SYNC_OUT(); return; L_089D6D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D6DE8; } @@ -6016,7 +5908,6 @@ L_089D6D9C: L_089D6DA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6DE8; } @@ -6061,7 +5952,6 @@ L_089D6DE8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(214))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D6E10; } @@ -6084,7 +5974,6 @@ L_089D6E10: aot_gpr_4 = (2048u << 16u); aot_gpr_4 = (ctx.gpr[22] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6E98; } @@ -6117,7 +6006,6 @@ L_089D6E20: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D6E94; } @@ -6151,7 +6039,17 @@ L_089D6E98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D6ED0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -6194,7 +6092,6 @@ L_089D6F40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(182))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D6F58; } @@ -6311,7 +6208,6 @@ L_089D6FAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1360))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(182))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D7054; } @@ -6355,7 +6251,6 @@ L_089D7054: aot_mem.aot_direct_store16(ctx.gpr[20] + static_cast(1916), static_cast(aot_gpr_4)); aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D7128; } @@ -6400,7 +6295,6 @@ L_089D7128: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(176))); aot_gpr_5 = (0u | 65535u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D71C4; } @@ -6418,7 +6312,6 @@ L_089D7138: L_089D7150: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089D71C4; } @@ -6500,7 +6393,6 @@ L_089D71F4: L_089D71FC: aot_gpr_4 = (aot_gpr_5 + static_cast(4)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089D7230; } @@ -6607,7 +6499,6 @@ L_089D72C4: AOT_REGCACHE_SYNC_OUT(); return; L_089D72CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D72E8; } @@ -6637,7 +6528,17 @@ L_089D72E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D730C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -6691,7 +6592,6 @@ L_089D7398: } L_089D73B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D74D4; } @@ -6699,7 +6599,6 @@ L_089D73B0: } L_089D73B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D757C; } @@ -6727,7 +6626,6 @@ L_089D73E8: ctx.gpr[8] = (ctx.gpr[29] + aot_gpr_5); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(16))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089D7420; } @@ -6737,7 +6635,6 @@ L_089D73F8: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(48)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(18)))))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089D7420; } @@ -6747,7 +6644,6 @@ L_089D7408: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(50)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(16)))))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089D7420; } @@ -6755,7 +6651,6 @@ L_089D7408: } L_089D7418: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D7430; } @@ -6773,7 +6668,6 @@ L_089D7420: } L_089D7430: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D74BC; } @@ -6796,9 +6690,7 @@ L_089D7460: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D7494; } @@ -6814,7 +6706,6 @@ L_089D7478: AOT_REGCACHE_SYNC_OUT(); return; L_089D748C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D749C; } @@ -6870,7 +6761,6 @@ L_089D74E4: aot_gpr_4 = (ctx.gpr[29] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D7568; } @@ -6879,7 +6769,6 @@ L_089D74E4: L_089D74F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D750C; } @@ -6887,7 +6776,6 @@ L_089D74F4: } L_089D7500: aot_gpr_31 = (0x089D7508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D7508u) goto L_089D7508; AOT_REGCACHE_SYNC_OUT(); return; L_089D7508: @@ -6901,7 +6789,6 @@ L_089D750C: goto L_089D7514; L_089D7514: aot_gpr_31 = (0x089D751Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D751Cu) goto L_089D751C; AOT_REGCACHE_SYNC_OUT(); return; L_089D751C: @@ -6966,7 +6853,17 @@ L_089D757C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D75AC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6986,7 +6883,6 @@ L_089D75AC: } L_089D75E8: aot_gpr_31 = (0x089D75F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D75F0u) goto L_089D75F0; AOT_REGCACHE_SYNC_OUT(); return; L_089D75F0: @@ -7000,7 +6896,6 @@ L_089D75F0: } L_089D75FC: aot_gpr_31 = (0x089D7604u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D7604u) goto L_089D7604; AOT_REGCACHE_SYNC_OUT(); return; L_089D7604: @@ -7037,7 +6932,6 @@ L_089D7618: L_089D7644: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D7670; } @@ -7059,7 +6953,6 @@ L_089D7654: } L_089D7668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D769C; } @@ -7067,7 +6960,6 @@ L_089D7668: } L_089D7670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7082,7 +6974,6 @@ L_089D7678: L_089D7684: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D7698; } @@ -7090,7 +6981,6 @@ L_089D7684: } L_089D7690: aot_gpr_31 = (0x089D7698u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 81u, 0x08824880u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D7698u) goto L_089D7698; AOT_REGCACHE_SYNC_OUT(); return; L_089D7698: @@ -7122,7 +7012,6 @@ L_089D769C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_17); ctx.gpr[20] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); { const bool branch_taken = ctx.gpr[20] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089D7720; } @@ -7132,9 +7021,7 @@ L_089D7704: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(84))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D7720; } @@ -7149,7 +7036,6 @@ L_089D7720: goto L_089D4A7C; L_089D7728: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D7764; } @@ -7157,7 +7043,6 @@ L_089D7728: } L_089D7730: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089D7764; } @@ -7167,7 +7052,6 @@ L_089D7738: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D7764; } @@ -7181,7 +7065,6 @@ L_089D7748: L_089D7750: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D7764; } @@ -7189,7 +7072,6 @@ L_089D7750: } L_089D775C: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089D7774; } @@ -7203,7 +7085,6 @@ L_089D7764: goto L_089D776C; L_089D776C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D778C; } @@ -7211,7 +7092,6 @@ L_089D776C: } L_089D7774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7221,7 +7101,6 @@ L_089D777C: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D77A4; } @@ -7231,7 +7110,6 @@ L_089D778C: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D77AC; } @@ -7247,7 +7125,6 @@ L_089D779C: } L_089D77A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7272,7 +7149,6 @@ L_089D77CC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D77FC; } @@ -7284,7 +7160,6 @@ L_089D77E4: goto L_089D4A7C; L_089D77EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D7804; } @@ -7292,7 +7167,6 @@ L_089D77EC: } L_089D77F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D7814; } @@ -7300,7 +7174,6 @@ L_089D77F4: } L_089D77FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7313,7 +7186,6 @@ L_089D7804: AOT_REGCACHE_SYNC_OUT(); return; L_089D780C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D7830; } @@ -7340,7 +7212,6 @@ L_089D7828: } L_089D7830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7376,7 +7247,6 @@ L_089D7874: aot_gpr_17 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(183))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(368))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_089D78C0; } @@ -7384,7 +7254,6 @@ L_089D7874: } L_089D7884: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D78A0; } @@ -7392,7 +7261,6 @@ L_089D7884: } L_089D788C: aot_gpr_31 = (0x089D7894u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B1FD70, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0198_entry, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D7894u) goto L_089D7894; AOT_REGCACHE_SYNC_OUT(); return; L_089D7894: @@ -7402,7 +7270,6 @@ L_089D7894: goto L_089D49DC; L_089D78A0: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_089D78BC; } @@ -7424,7 +7291,6 @@ L_089D78BC: L_089D78C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(372))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7531,7 +7397,6 @@ L_089D79B4: AOT_REGCACHE_SYNC_OUT(); return; L_089D79BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D79CC; } @@ -7557,7 +7422,17 @@ L_089D79CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D79EC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), aot_gpr_31); @@ -7675,7 +7550,17 @@ L_089D7B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7BA8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7734,7 +7619,17 @@ L_089D7C24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7C44: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7751,7 +7646,6 @@ L_089D7C44: L_089D7C6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089D7C94; } @@ -7767,7 +7661,6 @@ L_089D7C78: AOT_REGCACHE_SYNC_OUT(); return; L_089D7C8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D7CB4; } @@ -7800,7 +7693,17 @@ L_089D7CB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7CCC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7823,7 +7726,6 @@ L_089D7CF4: AOT_REGCACHE_SYNC_OUT(); return; L_089D7D04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D7D14; } @@ -7890,7 +7792,6 @@ L_089D7D68: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D7D84; } @@ -7912,7 +7813,17 @@ L_089D7D84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7D9C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7927,7 +7838,6 @@ L_089D7D9C: L_089D7DBC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D7DD4; } @@ -7954,7 +7864,17 @@ L_089D7DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7DEC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7991,7 +7911,17 @@ L_089D7E30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7E48: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(20), aot_gpr_17); @@ -8017,7 +7947,6 @@ L_089D7E70: ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[17])); aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -8031,9 +7960,7 @@ L_089D7E9C: goto L_089D7EA4; L_089D7EA4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D7EBC; } @@ -8081,7 +8008,17 @@ L_089D7F14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D7F2C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -8105,7 +8042,6 @@ L_089D7F54: AOT_REGCACHE_SYNC_OUT(); return; L_089D7F68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D7F74; } @@ -8166,7 +8102,6 @@ L_089D7FCC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D7FE8; } @@ -8188,7 +8123,17 @@ L_089D7FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0117.cpp b/profiles/vcs/generated/generated_unit_0117.cpp index 603d499..2eda03b 100644 --- a/profiles/vcs/generated/generated_unit_0117.cpp +++ b/profiles/vcs/generated/generated_unit_0117.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0117[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 25, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 31, - 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 0, 37, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 54, 0, 55, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 0, 61, 62, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 70, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 0, - 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 82, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 84, 0, 0, 0, 85, 0, 86, 0, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 93, 0, 94, 0, 0, 95, 0, 96, 0, 97, 0, 98, - 0, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 106, 0, 0, 107, 0, 0, 108, 0, 109, 0, 0, 110, 0, 111, 112, 0, 0, 0, - 0, 0, 113, 0, 0, 0, 0, 114, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 119, 0, 0, - 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 128, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, - 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 135, 136, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 0, 0, 139, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 144, 0, 145, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 151, 0, 152, 0, 153, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 158, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 162, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 167, 168, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 173, 0, 174, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 177, 0, 178, 0, 0, 0, 0, 0, 0, 179, - 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 188, 0, 0, 0, 0, - 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 194, 195, 0, 196, 0, 0, - 0, 197, 0, 0, 198, 199, 200, 0, 201, 0, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 206, 207, 0, 0, 0, 208, 0, - 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 0, - 216, 217, 0, 0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, - 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 227, 0, 228, 0, 0, 0, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 240, 0, 241, 0, 242, 243, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, - 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, - 0, 0, 0, 253, 0, 0, 0, 254, 0, 255, 256, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 265, 0, 0, 266, - 267, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 273, 0, 274, 0, 0, 0, 275, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, - 281, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, 0, 287, - 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 291, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 294, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 298, 0, 0, 299, 300, 0, 301, 0, 0, 302, 303, - 0, 304, 0, 0, 305, 306, 0, 307, 0, 0, 308, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, - 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 327, 0, 328, 0, 329, 0, 0, 0, 330, - 0, 331, 0, 332, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 337, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 340, 0, 341, 0, - 342, 0, 343, 0, 0, 0, 0, 0, 0, 0, 344, 0, 345, 0, 346, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, - 350, 0, 0, 351, 352, 353, 0, 354, 0, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 0, - 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, - 0, 364, 0, 0, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, - 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 374, 0, 375, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, - 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, - 0, 384, 0, 385, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 393, - 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 397, 0, 0, 398, 0, 399, 0, 400, 0, 0, 401, 0, - 0, 0, 402, 403, 0, 404, 0, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 415, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, - 422, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, - 0, 433, 0, 434, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 440, 0, 441, 442, 0, - 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 448, 0, - 449, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, - 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 466, 0, 0, 0, 467, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 473, 474, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, - 480, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 487, 0, 0, - 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 492, 0, 0, 0, 493, 0, 0, 0, 0, 494, 0, 0, - 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, - 500, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 507, 0, 0, 508, 0, 0, 0, 0, 0, 509, 0, - 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 512, 0, 513, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, - 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 524, 0, 0, 0, 525, 0, 526, 0, 0, 0, 527, - 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 534, 0, 535, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 539, 0, 0, 0, 0, 540, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 547, 548, 0, 0, - 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, - 0, 0, 555, 0, 0, 556, 0, 0, 557, 0, 0, 0, 558, 0, 559, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, - 0, 0, 0, 563, 0, 564, 0, 0, 565, 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 568, 569, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 576, 0, 577, 578, 0, - 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 0, 583, 0, 0, 0, - 0, 584, 0, 0, 0, 585, 0, 586, 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, - 0, 0, 590, 0, 591, 0, 0, 592, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 595, 596, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 599, 0, 600, 0, 0, 601, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 604, 605, 0, - 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, 0, 609, 0, 0, 610, 0, 0, 0, - 0, 611, 0, 0, 0, 612, 0, 613, 614, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 0, 617, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, - 0, 0, 623, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, 0, 629, 0, 0, - 0, 630, 0, 631, 0, 0, 0, 632, 633, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 636, 0, 0, 0, - 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 643, - 0, 0, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, - 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, - 0, 0, 654, 0, 0, 0, 655, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, - 0, 659, 0, 660, 0, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, - 0, 0, 0, 666, 0, 0, 0, 0, 0, 667, 0, 0, 668, 0, 0, 0, 669, 0, 670, 671, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 677, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, - 0, 0, 0, 680, 0, 681, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 684, - 0, 0, 0, 0, 0, 685, 0, 686, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 688, 0, 689, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 695, 0, 0, - 0, 696, 0, 0, 697, 0, 0, 698, 0, 699, 0, 0, 700, 0, 0, 0, 701, 0, 0, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 0, 0, 704, - 0, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 710, 0, 0, 711, 0, 0, 712, 0, 713, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 716, 0, 0, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, - 719, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, 0, 728, 0, 0, 0, 0, 729, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0117[64] = { + 0x200808401010C901ull, 0x00830480A01A1004ull, 0x2110106090140342ull, 0x80818240500D0200ull, + 0x30480A01A0900108ull, 0x9041020080004010ull, 0x85484A0842000080ull, 0xAA50A00403546000ull, + 0x1A52490080801012ull, 0x1122455524041284ull, 0x4000004006222001ull, 0x0002000001540148ull, + 0x00015000A8409800ull, 0x0000000200000000ull, 0x500000000000000Bull, 0x0000020000005200ull, + 0x000004002A001530ull, 0x0A4102AA81600000ull, 0x464449722C244401ull, 0x4085044324002511ull, + 0x0004000022910010ull, 0x0404D50500822054ull, 0x0800268884022222ull, 0x9241100000000220ull, + 0x280112008A444111ull, 0x8426400890444011ull, 0x02004CB2CB2A0200ull, 0x0144200000140000ull, + 0x8AA1000290441080ull, 0x504400008061002Aull, 0x084210B9100A5405ull, 0x10A8042208400422ull, + 0x1282000520151402ull, 0x4A950010A80A80AAull, 0x000800402002912Cull, 0x5005010000A42080ull, + 0x8804422004001121ull, 0x490042406A20901Aull, 0x8004200010081045ull, 0x0080004010000802ull, + 0x6084084211440002ull, 0x2284104502224100ull, 0x0402814021105042ull, 0x000000100010A101ull, + 0x4005150441220000ull, 0x8A22120400200110ull, 0x0042848008800108ull, 0x3440120040061808ull, + 0x4020D124110A1008ull, 0x6884A100041A2128ull, 0x200041A212840010ull, 0x6884A100020D1094ull, + 0x100041A212840010ull, 0x212102448408200Aull, 0x814820411040058Aull, 0x2000228044088140ull, + 0x8024110A08002844ull, 0x22041100080D1208ull, 0xA000006828000000ull, 0x2904420A000001A0ull, + 0x1000008882211292ull, 0x0000100000000000ull, 0x000020000A4C0000ull, 0x8554281511044000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0117[64] = { + 1u, 12u, 24u, 38u, 50u, 63u, 71u, 83u, 99u, 113u, 131u, 139u, 147u, 157u, 158u, 163u, + 167u, 176u, 189u, 209u, 224u, 231u, 246u, 259u, 267u, 281u, 295u, 312u, 318u, 331u, 342u, 359u, + 371u, 384u, 402u, 412u, 422u, 433u, 449u, 458u, 463u, 475u, 488u, 500u, 506u, 517u, 528u, 537u, + 549u, 563u, 579u, 590u, 606u, 617u, 630u, 644u, 654u, 666u, 678u, 685u, 696u, 708u, 709u, 715u, }; void recomp_unit_0117_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0117_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089D8000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0117[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0117[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0117[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089D8000; @@ -914,7 +821,6 @@ L_089D8000: L_089D8020: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D8038; } @@ -941,7 +847,17 @@ L_089D803C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8050: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -975,7 +891,17 @@ L_089D8098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D80AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1009,7 +935,17 @@ L_089D80F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8108: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1033,7 +969,6 @@ L_089D8130: AOT_REGCACHE_SYNC_OUT(); return; L_089D8144: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D8150; } @@ -1094,7 +1029,6 @@ L_089D81A8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D81C4; } @@ -1116,7 +1050,17 @@ L_089D81C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D81DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1140,7 +1084,6 @@ L_089D8204: AOT_REGCACHE_SYNC_OUT(); return; L_089D8218: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D8224; } @@ -1201,7 +1144,6 @@ L_089D827C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D8298; } @@ -1223,7 +1165,17 @@ L_089D8298: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D82B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1251,7 +1203,17 @@ L_089D82E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D82F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1279,7 +1241,6 @@ L_089D8324: AOT_REGCACHE_SYNC_OUT(); return; L_089D8340: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D834C; } @@ -1340,7 +1301,6 @@ L_089D83A4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D83C0; } @@ -1363,7 +1323,17 @@ L_089D83C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D83DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1391,7 +1361,17 @@ L_089D840C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1424,7 +1404,6 @@ L_089D845C: AOT_REGCACHE_SYNC_OUT(); return; L_089D8474: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D8480; } @@ -1485,7 +1464,6 @@ L_089D84D8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D84F4; } @@ -1508,7 +1486,17 @@ L_089D84F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8510: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1546,7 +1534,17 @@ L_089D8538: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D857C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1583,7 +1581,17 @@ L_089D85C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D85D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1634,7 +1642,17 @@ L_089D861C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8664: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1652,7 +1670,17 @@ L_089D8678: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D868C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -1686,7 +1714,6 @@ L_089D86B8: L_089D86CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D86E0; } @@ -1694,7 +1721,6 @@ L_089D86CC: } L_089D86D8: aot_gpr_31 = (0x089D86E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 694u, 0x089732F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D86E0u) goto L_089D86E0; AOT_REGCACHE_SYNC_OUT(); return; L_089D86E0: @@ -1711,7 +1737,17 @@ L_089D86E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D86FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -1746,7 +1782,6 @@ L_089D8738: AOT_REGCACHE_SYNC_OUT(); return; L_089D8748: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089D8758; } @@ -1762,7 +1797,6 @@ L_089D8750: } L_089D8758: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089D8738; } @@ -1787,7 +1821,17 @@ L_089D8764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8788: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -1813,7 +1857,6 @@ L_089D87BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(2))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D8804; } @@ -1827,7 +1870,6 @@ L_089D87D0: L_089D87D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D87FC; } @@ -1850,7 +1892,6 @@ L_089D87EC: AOT_REGCACHE_SYNC_OUT(); return; L_089D87F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D8804; } @@ -1864,7 +1905,6 @@ L_089D87FC: L_089D8804: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089D87BC; } @@ -1885,7 +1925,17 @@ L_089D8810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8830: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[7] = (aot_gpr_4 + static_cast(8)); @@ -1901,7 +1951,17 @@ L_089D8830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D885C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); @@ -1914,7 +1974,17 @@ L_089D885C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D887C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1930,7 +2000,6 @@ L_089D887C: L_089D88A0: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089D88D8; } @@ -1939,7 +2008,6 @@ L_089D88A0: L_089D88AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D88E4; } @@ -1994,7 +2062,17 @@ L_089D88F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8908: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(12), static_cast(aot_gpr_5)); @@ -2022,7 +2100,6 @@ L_089D8930: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D8990; } @@ -2098,7 +2175,17 @@ L_089D89B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D89C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2113,12 +2200,21 @@ L_089D89D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D89E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089D89F0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D89F0u) goto L_089D89F0; AOT_REGCACHE_SYNC_OUT(); return; L_089D89F0: @@ -2129,7 +2225,17 @@ L_089D89F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -2151,7 +2257,6 @@ L_089D8A00: } L_089D8A34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(ctx.fpr[16])) && aot_fpr_15 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } goto L_089D8A68; @@ -2159,7 +2264,6 @@ L_089D8A34: goto L_089D8A44; L_089D8A44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[16])) && aot_fpr_14 == ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } goto L_089D8A68; @@ -2230,7 +2334,17 @@ L_089D8AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const bool branch_taken = static_cast(aot_gpr_6) > 0; @@ -2242,7 +2356,6 @@ L_089D8B0C: } L_089D8B18: { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_089D8C2C; } @@ -2302,7 +2415,6 @@ L_089D8B20: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D8C30; } @@ -2318,7 +2430,6 @@ L_089D8B48: } L_089D8B50: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089D8BC4; } @@ -2326,7 +2437,6 @@ L_089D8B50: } L_089D8B58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D8C2C; } @@ -2490,7 +2600,6 @@ L_089D8B60: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D8C30; } @@ -2655,7 +2764,6 @@ L_089D8BC4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D8C30; } @@ -2671,7 +2779,17 @@ L_089D8C30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8C3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2691,7 +2809,17 @@ L_089D8C58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8C6C: { const bool branch_taken = static_cast(aot_gpr_6) > 0; ctx.gpr[7] = (static_cast(aot_gpr_6) < 2 ? 1u : 0u); @@ -2702,7 +2830,6 @@ L_089D8C6C: } L_089D8C74: { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_089D8E00; } @@ -2733,7 +2860,6 @@ L_089D8C7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D8E04; } @@ -2749,7 +2875,6 @@ L_089D8CB0: } L_089D8CB8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D8E00; } @@ -2856,7 +2981,17 @@ L_089D8E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D8E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { std::uint32_t aot_run_words[3]{}; @@ -2924,7 +3059,6 @@ L_089D8E0C: } L_089D8EF0: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_089D9010; } @@ -2985,7 +3119,6 @@ L_089D8EF8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D9014; } @@ -3002,7 +3135,6 @@ L_089D8F24: } L_089D8F30: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089D9010; } @@ -3168,7 +3300,6 @@ L_089D8F38: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D9014; } @@ -3334,7 +3465,6 @@ L_089D8FA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D9014; } @@ -3350,7 +3480,17 @@ L_089D9014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9020: { const bool branch_taken = static_cast(aot_gpr_6) > 0; ctx.gpr[7] = (static_cast(aot_gpr_6) < 2 ? 1u : 0u); @@ -3361,7 +3501,6 @@ L_089D9020: } L_089D9028: { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_089D9154; } @@ -3392,7 +3531,6 @@ L_089D9030: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089D9158; } @@ -3408,7 +3546,6 @@ L_089D9064: } L_089D906C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089D9154; } @@ -3491,7 +3628,17 @@ L_089D9158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9160: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3515,46 +3662,104 @@ L_089D9160: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D917C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9184: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D918C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9194: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D919C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1704))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D91A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3580,7 +3785,6 @@ L_089D91C0: L_089D91D8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D91EC; } @@ -3603,7 +3807,17 @@ L_089D91EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -3613,7 +3827,6 @@ L_089D9200: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D92AC; } @@ -3623,7 +3836,6 @@ L_089D9228: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-981)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D9248; } @@ -3633,7 +3845,6 @@ L_089D9238: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-982)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D92AC; } @@ -3653,7 +3864,6 @@ L_089D9254: aot_gpr_6 = (0u | 1u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1360))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089D926C; } @@ -3664,7 +3874,6 @@ L_089D9268: goto L_089D926C; L_089D926C: aot_gpr_31 = (0x089D9274u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_0898B428, 97u, 0x0898B428u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D9274u) goto L_089D9274; AOT_REGCACHE_SYNC_OUT(); return; L_089D9274: @@ -3694,7 +3903,6 @@ L_089D9294: goto L_089D9298; L_089D9298: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D92AC; } @@ -3708,7 +3916,6 @@ L_089D92A0: L_089D92AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2016))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D92E8; } @@ -3718,7 +3925,6 @@ L_089D92B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D92E4; } @@ -3728,7 +3934,6 @@ L_089D92C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D92E4; } @@ -3737,7 +3942,6 @@ L_089D92C8: L_089D92D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D92E8; } @@ -3750,7 +3954,6 @@ L_089D92E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D9320; } @@ -3771,7 +3974,6 @@ L_089D9310: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D9300; } @@ -3785,7 +3987,6 @@ L_089D9320: L_089D9328: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9374; } @@ -3810,9 +4011,7 @@ L_089D9334: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9374; } @@ -3827,7 +4026,6 @@ L_089D9368: L_089D9374: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1944))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9384; } @@ -3859,7 +4057,6 @@ L_089D93A8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D93DC; } @@ -3887,7 +4084,6 @@ L_089D93DC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D93F8; } @@ -3906,7 +4102,17 @@ L_089D93F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -3950,7 +4156,17 @@ L_089D9464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9474: aot_gpr_5 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); @@ -3976,7 +4192,17 @@ L_089D9474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D94C8: aot_fpr_12 = std::bit_cast(0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); @@ -3997,21 +4223,50 @@ L_089D94C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9508: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9510: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -4037,7 +4292,6 @@ L_089D9544: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089D95B0; } @@ -4050,9 +4304,7 @@ L_089D955C: aot_gpr_5 = (aot_gpr_5 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D95A8; } @@ -4060,16 +4312,13 @@ L_089D955C: } L_089D9580: aot_gpr_31 = (0x089D9588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 937u, 0x08AFFE3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D9588u) goto L_089D9588; AOT_REGCACHE_SYNC_OUT(); return; L_089D9588: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D95B8; } @@ -4109,7 +4358,17 @@ L_089D95BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D95C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4128,7 +4387,6 @@ L_089D95E8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9644; } @@ -4178,7 +4436,17 @@ L_089D9644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9668: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); aot_gpr_6 = (0u + static_cast(-3)); @@ -4188,7 +4456,17 @@ L_089D9668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D967C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4200,7 +4478,6 @@ L_089D968C: aot_gpr_4 = (ctx.gpr[2] & 255u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089D96A4; } @@ -4224,7 +4501,17 @@ L_089D96A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D96B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -4314,7 +4601,6 @@ L_089D97C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9800; } @@ -4363,7 +4649,6 @@ L_089D9820: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D9848; } @@ -4396,7 +4681,6 @@ L_089D9858: } L_089D9864: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D98A4; } @@ -4428,7 +4712,6 @@ L_089D987C: L_089D98A4: aot_gpr_4 = (0u + static_cast(-979)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D98F4; } @@ -4466,7 +4749,6 @@ L_089D98EC: L_089D98F4: aot_gpr_4 = (0u + static_cast(-976)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D9938; } @@ -4517,7 +4799,6 @@ L_089D9958: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089D99C8; } @@ -4526,7 +4807,6 @@ L_089D9958: L_089D9970: aot_gpr_4 = (0u + static_cast(-982)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_089D99C8; } @@ -4619,13 +4899,11 @@ L_089D9A44: goto L_089D9A4C; L_089D9A4C: aot_gpr_31 = (0x089D9A54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 598u, 0x0889E930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089D9A54u) goto L_089D9A54; AOT_REGCACHE_SYNC_OUT(); return; L_089D9A54: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9A64; } @@ -4642,7 +4920,6 @@ L_089D9A64: L_089D9A6C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9A7C; } @@ -4659,7 +4936,6 @@ L_089D9A7C: L_089D9A84: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9A94; } @@ -4676,7 +4952,6 @@ L_089D9A94: L_089D9A9C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9AAC; } @@ -4709,7 +4984,17 @@ L_089D9AB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089D9AE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -4773,7 +5058,6 @@ L_089D9B50: ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fpr[28] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1928))); goto L_089D9BB4; @@ -4782,7 +5066,6 @@ L_089D9B50: L_089D9BB4: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089D9BC8; @@ -4813,7 +5096,6 @@ L_089D9BE0: aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1924), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1924))); goto L_089D9C1C; @@ -4822,7 +5104,6 @@ L_089D9BE0: L_089D9C1C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089D9C30; @@ -4852,7 +5133,6 @@ L_089D9C58: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9CDC; } @@ -4882,7 +5162,6 @@ L_089D9C84: aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1920), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1920))); goto L_089D9CC0; @@ -4891,7 +5170,6 @@ L_089D9C84: L_089D9CC0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089D9CD4; @@ -4946,7 +5224,6 @@ L_089D9D14: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1920), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1920))); goto L_089D9D40; @@ -4955,7 +5232,6 @@ L_089D9D14: L_089D9D40: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089D9D54; @@ -4971,7 +5247,6 @@ L_089D9D58: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089D9D7C; @@ -5014,7 +5289,6 @@ L_089D9DD8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9E28; } @@ -5032,7 +5306,6 @@ L_089D9DF8: AOT_REGCACHE_SYNC_OUT(); return; L_089D9E00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089D9E28; } @@ -5108,7 +5381,6 @@ L_089D9E90: goto L_089D9E94; L_089D9E94: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089D9F94; } @@ -5117,9 +5389,7 @@ L_089D9E94: L_089D9E9C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F94; } @@ -5128,9 +5398,7 @@ L_089D9E9C: L_089D9EB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F94; } @@ -5139,9 +5407,7 @@ L_089D9EB0: L_089D9EC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F94; } @@ -5150,9 +5416,7 @@ L_089D9EC4: L_089D9ED8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1532))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F94; } @@ -5162,9 +5426,7 @@ L_089D9EEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(356))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F94; } @@ -5174,7 +5436,6 @@ L_089D9F04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-984)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089D9F94; } @@ -5183,9 +5444,7 @@ L_089D9F04: L_089D9F14: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F58; } @@ -5212,9 +5471,7 @@ L_089D9F28: L_089D9F58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9F84; } @@ -5245,9 +5502,7 @@ L_089D9F84: L_089D9F94: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089D9FDC; } @@ -5260,7 +5515,6 @@ L_089D9FA8: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1988), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5274,7 +5528,6 @@ L_089D9FCC: goto L_089D94C8; L_089D9FD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DA030; } @@ -5283,9 +5536,7 @@ L_089D9FD4: L_089D9FDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA030; } @@ -5294,9 +5545,7 @@ L_089D9FDC: L_089D9FF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA030; } @@ -5309,7 +5558,6 @@ L_089DA004: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1988), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5325,7 +5573,6 @@ L_089DA030: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-983)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089DA0E4; } @@ -5348,9 +5595,7 @@ L_089DA050: aot_gpr_4 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA0E4; } @@ -5392,7 +5637,6 @@ L_089DA0C4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1662))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DA0E4; } @@ -5411,7 +5655,6 @@ L_089DA0E4: L_089DA0F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(604), std::bit_cast(ctx.fpr[28])); if (branch_taken) { @@ -5431,7 +5674,6 @@ L_089DA10C: AOT_REGCACHE_SYNC_OUT(); return; L_089DA114: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DA190; } @@ -5443,9 +5685,7 @@ L_089DA11C: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA16C; } @@ -5514,9 +5754,7 @@ L_089DA190: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA208; } @@ -5535,7 +5773,6 @@ L_089DA1C8: L_089DA1D0: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DA208; } @@ -5554,7 +5791,6 @@ L_089DA1E4: L_089DA1EC: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DA208; } @@ -5581,7 +5817,6 @@ L_089DA20C: L_089DA214: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DA298; } @@ -5597,7 +5832,6 @@ L_089DA220: L_089DA230: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(604), std::bit_cast(ctx.fpr[28])); aot_gpr_31 = (0x089DA23Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DA23Cu) goto L_089DA23C; AOT_REGCACHE_SYNC_OUT(); return; L_089DA23C: @@ -5623,9 +5857,7 @@ L_089DA244: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA298; } @@ -5674,7 +5906,17 @@ L_089DA298: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DA2CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -5736,7 +5978,6 @@ L_089DA35C: { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = ctx.fpr[20] + ctx.fpr[16]; if (branch_taken) { @@ -5760,7 +6001,6 @@ L_089DA3A0: } L_089DA3C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DAB50; } @@ -5793,7 +6033,6 @@ L_089DA3F8: L_089DA400: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_15; goto L_089DA420; @@ -5834,7 +6073,6 @@ L_089DA430: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[28]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[28] = std::bit_cast(0x7FC00000u); else ctx.fpr[28] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_089DA468; @@ -5852,9 +6090,7 @@ L_089DA468: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA5A4; } @@ -5864,7 +6100,6 @@ L_089DA494: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DA5A4; } @@ -5892,7 +6127,6 @@ L_089DA4C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = ctx.fpr[26] + ctx.fpr[20]; if (branch_taken) { @@ -5902,9 +6136,7 @@ L_089DA4C8: } L_089DA4EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[30])) && aot_fpr_13 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA504; } @@ -5920,7 +6152,6 @@ L_089DA4FC: } L_089DA504: aot_gpr_31 = (0x089DA50Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DA50Cu) goto L_089DA50C; AOT_REGCACHE_SYNC_OUT(); return; L_089DA50C: @@ -5932,9 +6163,7 @@ L_089DA510: aot_gpr_4 = (aot_gpr_4 | 52196u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA53C; } @@ -5949,7 +6178,6 @@ L_089DA53C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); if (branch_taken) { @@ -5959,9 +6187,7 @@ L_089DA53C: } L_089DA554: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[30])) && aot_fpr_13 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA56C; } @@ -5977,7 +6203,6 @@ L_089DA564: } L_089DA56C: aot_gpr_31 = (0x089DA574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DA574u) goto L_089DA574; AOT_REGCACHE_SYNC_OUT(); return; L_089DA574: @@ -5989,9 +6214,7 @@ L_089DA578: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA5A4; } @@ -6042,7 +6265,6 @@ L_089DA5EC: } L_089DA5F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DA848; } @@ -6050,7 +6272,6 @@ L_089DA5F8: } L_089DA600: { const bool branch_taken = static_cast(ctx.gpr[21]) <= 0; - // nop if (branch_taken) { goto L_089DA848; } @@ -6060,7 +6281,6 @@ L_089DA608: aot_gpr_4 = (ctx.gpr[20] + static_cast(-12)); aot_gpr_5 = (aot_gpr_4 < static_cast(13) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089DA848; } @@ -6072,17 +6292,25 @@ L_089DA618: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3416))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DA630: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1932))); ctx.fpr[20] = std::bit_cast(ctx.gpr[21]); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = static_cast(static_cast(std::bit_cast(ctx.fpr[20]))); if (branch_taken) { @@ -6151,7 +6379,6 @@ L_089DA6C8: goto L_089DA6FC; L_089DA6FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DA848; } @@ -6294,7 +6521,6 @@ L_089DA870: aot_gpr_5 = (0u | 192u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089DA898; } @@ -6314,7 +6540,6 @@ L_089DA884: L_089DA898: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1932))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11376))); if (branch_taken) { @@ -6338,7 +6563,6 @@ L_089DA8AC: L_089DA8C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1932))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1980))); goto L_089DA8F8; @@ -6382,7 +6606,6 @@ L_089DA920: L_089DA938: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089DA988; } @@ -6392,7 +6615,6 @@ L_089DA944: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DAABC; } @@ -6402,7 +6624,6 @@ L_089DA954: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DAABC; } @@ -6420,7 +6641,6 @@ L_089DA964: AOT_REGCACHE_SYNC_OUT(); return; L_089DA980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DAABC; } @@ -6430,7 +6650,6 @@ L_089DA988: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DAABC; } @@ -6440,9 +6659,7 @@ L_089DA998: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1980))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11380))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DA9E4; } @@ -6462,7 +6679,6 @@ L_089DA9B0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089DA9C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DA9C8u) goto L_089DA9C8; AOT_REGCACHE_SYNC_OUT(); return; L_089DA9C8: @@ -6475,7 +6691,6 @@ L_089DA9C8: AOT_REGCACHE_SYNC_OUT(); return; L_089DA9DC: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_089DAABC; } @@ -6485,7 +6700,6 @@ L_089DA9E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-983)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089DAAA0; } @@ -6495,7 +6709,6 @@ L_089DA9F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DAAA0; } @@ -6506,7 +6719,6 @@ L_089DAA04: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-11382)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DAAA0; } @@ -6532,7 +6744,6 @@ L_089DAA38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1932))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(356), aot_gpr_4); if (branch_taken) { @@ -6544,7 +6755,6 @@ L_089DAA50: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1884))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DAA98; } @@ -6555,7 +6765,6 @@ L_089DAA60: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DAA98; } @@ -6593,7 +6802,6 @@ L_089DAAA0: AOT_REGCACHE_SYNC_OUT(); return; L_089DAABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DAB50; } @@ -6606,9 +6814,7 @@ L_089DAAC4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1980))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DAB3C; } @@ -6618,7 +6824,6 @@ L_089DAAE8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1980))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11376))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15172u << 16u); if (branch_taken) { @@ -6685,7 +6890,17 @@ L_089DAB50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DAB90: aot_gpr_29 = (aot_gpr_29 + static_cast(-608)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(580), ctx.gpr[21]); @@ -6770,7 +6985,6 @@ L_089DAC88: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DAD10; } @@ -6790,7 +7004,6 @@ L_089DACB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DAD10; } @@ -6811,7 +7024,6 @@ L_089DACC8: aot_fpr_13 = aot_fpr_14 - aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_089DACF8; @@ -6830,7 +7042,6 @@ L_089DAD10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(616)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DAEC4; } @@ -6888,9 +7099,7 @@ L_089DADA4: L_089DADB0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1620))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DADE4; } @@ -6930,7 +7139,6 @@ L_089DADFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-977)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089DAEA8; } @@ -6939,9 +7147,7 @@ L_089DADFC: L_089DAE0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DAE9C; } @@ -6976,7 +7182,6 @@ L_089DAE20: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_089DAE5C; @@ -6984,7 +7189,6 @@ L_089DAE20: goto L_089DAE5C; L_089DAE5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_089DAE6C; @@ -7004,7 +7208,6 @@ L_089DAE6C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1604), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DAEA8; } @@ -7060,7 +7263,6 @@ L_089DAF0C: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(1984), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7074,9 +7276,7 @@ L_089DAF2C: L_089DAF30: aot_fpr_12 = aot_fpr_12 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DAF30; } @@ -7095,7 +7295,6 @@ L_089DAF48: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_089DAF78; @@ -7121,7 +7320,6 @@ L_089DAF78: L_089DAFA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1328))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB114; } @@ -7231,7 +7429,6 @@ L_089DB070: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB114; } @@ -7240,7 +7437,6 @@ L_089DB070: L_089DB088: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB114; } @@ -7323,7 +7519,6 @@ L_089DB10C: L_089DB114: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB1BC; } @@ -7413,7 +7608,6 @@ L_089DB1B4: L_089DB1BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1344))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB264; } @@ -7503,7 +7697,6 @@ L_089DB25C: L_089DB264: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB310; } @@ -7594,7 +7787,6 @@ L_089DB308: L_089DB310: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1368))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB3BC; } @@ -7685,7 +7877,6 @@ L_089DB3B4: L_089DB3BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1332))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB464; } @@ -7775,7 +7966,6 @@ L_089DB45C: L_089DB464: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1364))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB50C; } @@ -7907,7 +8097,6 @@ L_089DB568: L_089DB57C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(176))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB598; } @@ -7923,7 +8112,6 @@ L_089DB588: L_089DB598: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB604; } @@ -7950,7 +8138,6 @@ L_089DB5C0: L_089DB5D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(176))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB604; } @@ -7974,7 +8161,6 @@ L_089DB5F4: AOT_REGCACHE_SYNC_OUT(); return; L_089DB604: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089DB61C; } @@ -7995,7 +8181,6 @@ L_089DB61C: goto L_089DB620; L_089DB620: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089DB534; } @@ -8025,11 +8210,20 @@ L_089DB658: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3360))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DB670: ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11452))); aot_gpr_16 = (0u | 1u); @@ -8084,7 +8278,6 @@ L_089DB6CC: goto L_089DB6D8; L_089DB6D8: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_089DB718; } @@ -8112,7 +8305,6 @@ L_089DB6FC: AOT_REGCACHE_SYNC_OUT(); return; L_089DB718: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_089DB768; } @@ -8130,9 +8322,7 @@ L_089DB720: AOT_REGCACHE_SYNC_OUT(); return; L_089DB73C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DB768; } @@ -8152,7 +8342,6 @@ L_089DB768: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); ctx.gpr[30] = (0u + static_cast(-977)); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_089DB7A4; } @@ -8172,7 +8361,6 @@ L_089DB778: AOT_REGCACHE_SYNC_OUT(); return; L_089DB79C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DBBA4; } @@ -8182,7 +8370,6 @@ L_089DB7A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-983)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089DB88C; } @@ -8219,7 +8406,6 @@ L_089DB808: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DB884; } @@ -8230,7 +8416,6 @@ L_089DB818: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-11382)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DB884; } @@ -8253,7 +8438,6 @@ L_089DB834: aot_fpr_13 = aot_fpr_15 - aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_089DB86C; @@ -8270,7 +8454,6 @@ L_089DB86C: AOT_REGCACHE_SYNC_OUT(); return; L_089DB884: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DBBA4; } @@ -8299,7 +8482,6 @@ L_089DB8B0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBBA4; } @@ -8308,7 +8490,6 @@ L_089DB8B0: L_089DB8C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1356))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBBA4; } @@ -8409,7 +8590,6 @@ L_089DB96C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11280))); { const float fs = aot_fpr_14; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11276))); goto L_089DB9A0; @@ -8417,7 +8597,6 @@ L_089DB96C: goto L_089DB9A0; L_089DB9A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089DB9B0; @@ -8436,7 +8615,6 @@ L_089DB9C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11276))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11276))); goto L_089DB9E4; @@ -8444,7 +8622,6 @@ L_089DB9C8: goto L_089DB9E4; L_089DB9E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089DB9F4; @@ -8478,7 +8655,6 @@ L_089DB9F4: aot_fpr_13 = aot_fpr_13 / aot_fpr_14; aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = ctx.fpr[28] - aot_fpr_12; if (branch_taken) { @@ -8498,7 +8674,6 @@ L_089DBA74: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11268))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_29 + static_cast(48)); if (branch_taken) { @@ -8534,9 +8709,7 @@ L_089DBA98: aot_fpr_13 = aot_fpr_13 / aot_fpr_15; ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DBAFC; } @@ -8554,7 +8727,6 @@ L_089DBAFC: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11264))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1620))); goto L_089DBB20; @@ -8590,7 +8762,6 @@ L_089DBB20: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11260))); ctx.fpr[28] = ctx.fpr[28] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); goto L_089DBB8C; @@ -8632,7 +8803,6 @@ L_089DBBC8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBBF4; } @@ -8646,7 +8816,6 @@ L_089DBBE0: AOT_REGCACHE_SYNC_OUT(); return; L_089DBBEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DBC30; } @@ -8656,7 +8825,6 @@ L_089DBBF4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-975)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089DBC10; } @@ -8665,7 +8833,6 @@ L_089DBBF4: L_089DBC04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_089DBC24; } @@ -8679,7 +8846,6 @@ L_089DBC10: AOT_REGCACHE_SYNC_OUT(); return; L_089DBC1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DBC30; } @@ -8777,7 +8943,6 @@ L_089DBC9C: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_089DBCF0; @@ -9141,7 +9306,6 @@ L_089DBE48: L_089DBE4C: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBE6C; } @@ -9150,7 +9314,6 @@ L_089DBE4C: L_089DBE58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBE6C; } @@ -9185,7 +9348,17 @@ L_089DBE6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DBEB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), ctx.gpr[20]); @@ -9236,7 +9409,6 @@ L_089DBF48: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089DBF90; } @@ -9246,7 +9418,6 @@ L_089DBF60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBF88; } @@ -9256,7 +9427,6 @@ L_089DBF70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DBFB4; } @@ -9264,7 +9434,6 @@ L_089DBF70: } L_089DBF80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DBFE8; } @@ -9272,7 +9441,6 @@ L_089DBF80: } L_089DBF88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0118_entry, 118u, 74u, 0x089DC4ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9290,7 +9458,6 @@ L_089DBF90: AOT_REGCACHE_SYNC_OUT(); return; L_089DBFAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0118_entry, 118u, 74u, 0x089DC4ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9301,7 +9468,6 @@ L_089DBFB4: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DBFE8; } @@ -9314,7 +9480,6 @@ L_089DBFC8: AOT_REGCACHE_SYNC_OUT(); return; L_089DBFD0: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089DBFE8; } @@ -9327,7 +9492,6 @@ L_089DBFD8: AOT_REGCACHE_SYNC_OUT(); return; L_089DBFE0: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[2]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0118_entry, 118u, 1u, 0x089DC004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9336,7 +9500,6 @@ L_089DBFE0: L_089DBFE8: ctx.fpr[22] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(ctx.fpr[22])) && ctx.fpr[20] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(208))); (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0118_entry, 118u, 2u, 0x089DC00Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; @@ -9344,7 +9507,6 @@ L_089DBFE8: goto L_089DBFFC; L_089DBFFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0118_entry, 118u, 14u, 0x089DC0D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0118.cpp b/profiles/vcs/generated/generated_unit_0118.cpp index 4bee0d1..19506a5 100644 --- a/profiles/vcs/generated/generated_unit_0118.cpp +++ b/profiles/vcs/generated/generated_unit_0118.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0118[4094] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 0, 6, 0, 7, - 0, 8, 0, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 12, 0, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 17, - 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 29, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, - 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, - 0, 42, 0, 0, 0, 43, 0, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 51, 0, 0, 0, 52, 0, 53, 0, 0, 54, 0, 55, 0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 0, 0, 59, 0, 60, 0, 0, - 61, 62, 0, 0, 63, 0, 0, 64, 0, 0, 65, 0, 0, 66, 0, 67, 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, 0, 71, 72, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 77, 0, 78, 0, 79, 0, 0, 0, 80, 0, 0, 81, 0, 82, 0, 83, 0, 84, 0, 0, 0, 85, - 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, - 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 93, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 115, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, - 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, - 126, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, - 130, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 139, - 0, 0, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, - 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 150, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 159, 160, 0, - 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, - 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 184, 0, 185, - 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, - 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 209, 0, 0, 0, 0, 210, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 213, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, 222, 0, 223, 0, 0, 224, - 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 227, 0, 228, 229, 0, 230, 0, 0, 231, 0, 232, 233, 0, 234, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 236, 0, 237, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 245, 0, 0, 0, - 0, 0, 0, 246, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 250, 251, 0, 0, 0, 0, 252, 0, 0, 0, - 0, 253, 0, 254, 0, 255, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 260, 0, 0, 0, 261, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, - 0, 266, 0, 0, 267, 0, 268, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, - 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 280, 281, 0, - 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, 292, 0, 0, 0, - 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 0, 304, 0, 305, 0, 306, 307, 0, - 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 314, 0, 0, 315, 0, 316, 317, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, - 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, 324, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, - 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 332, 0, 333, 0, 0, 0, 0, 0, 334, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, - 338, 0, 339, 0, 0, 0, 0, 340, 0, 341, 342, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, - 0, 0, 0, 0, 347, 348, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 352, 0, 0, - 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, 357, - 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, - 0, 363, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 368, - 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, - 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 379, 0, 380, 381, 0, 0, 0, 0, 0, - 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 386, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, - 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, - 0, 396, 397, 0, 0, 0, 0, 0, 398, 0, 0, 399, 0, 400, 401, 0, 0, 0, 0, 0, 0, 402, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, - 0, 0, 405, 0, 0, 0, 0, 0, 406, 407, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 411, 0, 0, 0, 412, - 413, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 418, 419, 0, 0, - 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, 0, 428, 0, 429, - 0, 0, 0, 0, 430, 0, 0, 431, 0, 432, 0, 433, 434, 435, 0, 436, 0, 437, 0, 0, 0, 0, 438, 0, 0, 439, 0, 440, 0, 441, 0, 442, - 0, 0, 0, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 0, 0, 0, 0, 448, 0, 0, 449, 0, 450, 0, 451, 452, 453, 0, 454, 0, 455, 0, - 0, 0, 456, 0, 0, 457, 0, 458, 0, 459, 0, 460, 0, 461, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, - 0, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 469, 0, 0, 0, - 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 473, 0, 0, 0, 474, 0, 0, 475, 0, 476, 0, 0, 477, 0, 0, 0, - 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 0, 481, 0, 482, 0, 483, 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 488, 0, 0, 489, 0, 490, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, - 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 496, 497, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, - 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 505, 0, 506, 0, 507, - 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, - 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, 517, 0, 0, 518, 0, 519, - 0, 0, 520, 0, 0, 0, 521, 0, 522, 0, 523, 0, 524, 525, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 527, 0, 0, 0, 0, 0, 0, 0, - 528, 0, 0, 529, 0, 0, 0, 0, 0, 530, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, - 0, 0, 534, 0, 0, 535, 0, 536, 537, 0, 0, 0, 0, 538, 0, 0, 539, 0, 540, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 0, - 0, 544, 0, 545, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 550, 0, 0, - 551, 0, 0, 552, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 556, 0, 557, 0, 0, 558, 0, 0, 559, - 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 563, 0, 564, 0, 0, 0, 565, 0, 0, 566, 0, 567, 0, - 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, - 574, 0, 575, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, - 582, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 585, 0, 586, 0, 0, 0, 587, 0, 588, 589, 0, 0, 0, 0, 0, 0, 590, - 0, 591, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 0, 594, 595, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 0, 599, 0, 0, 600, 0, 0, 601, 602, 0, 603, 0, 0, 604, 605, 0, 606, 0, 607, 0, 0, 0, - 608, 0, 609, 0, 0, 0, 0, 0, 610, 611, 0, 612, 0, 613, 614, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, - 0, 0, 618, 0, 0, 0, 0, 0, 619, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 625, - 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, - 0, 632, 0, 633, 0, 0, 634, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 639, 0, 640, 0, 0, 641, 0, 0, 642, 643, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 645, 0, 0, 646, 0, 647, 0, 0, 648, 0, 0, 649, 650, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 652, 0, 0, 653, 0, 0, 0, 654, 0, 0, 655, 0, 656, 0, 0, 0, 657, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 659, - 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 663, 0, 664, 0, 0, 0, - 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, - 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 673, - 0, 674, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 679, 0, 680, 0, 681, 0, 0, - 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 684, 0, 685, 0, 0, 0, 686, 0, 687, 0, 0, 0, 688, 0, 689, 0, - 0, 690, 691, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 695, 0, 0, 0, 0, 0, 696, 697, - 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 700, 0, 701, 0, 0, 0, 702, 0, 703, 0, 0, 0, - 704, 0, 705, 0, 0, 706, 707, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 709, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 0, - 0, 0, 712, 713, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 717, 0, 0, 0, 718, 0, - 719, 0, 0, 0, 720, 0, 721, 0, 0, 722, 723, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, - 727, 0, 0, 0, 0, 0, 728, 729, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 732, 0, 733, 0, 0, 0, 0, - 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 736, 0, 737, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 739, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 741, 0, 742, 0, 0, 0, 743, 0, 744, 0, 0, 0, 745, 0, 746, 0, 0, 747, 0, - 0, 748, 0, 0, 749, 750, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 754, 0, 0, 0, 0, - 0, 755, 756, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 760, 0, 761, 0, 0, 0, 0, 762, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 764, 0, 0, 765, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, - 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 770, 0, 0, 0, 0, 0, 771, 772, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, - 775, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 780, - 0, 0, 781, 0, 782, 783, 0, 0, 0, 0, 784, 0, 0, 785, 0, 786, 0, 787, 0, 0, 0, 0, 0, 788, 0, 0, 789, 0, 790, 0, 0, 0, - 0, 0, 791, 0, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 794, 795, 0, 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, 0, 0, 0, 0, 0, - 798, 0, 0, 799, 0, 0, 0, 0, 0, 800, 801, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 804, 0, - 805, 0, 0, 806, 0, 0, 807, 808, 0, 0, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 811, 0, 812, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 818, 0, 0, 0, 819, 0, 820, 0, 0, 0, 821, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0118[64] = { + 0x9415420AA8401005ull, 0x1082054882044AAAull, 0x000811A280881122ull, 0x28A4528A00000900ull, + 0x020004011892A493ull, 0x2020000A8AA45420ull, 0x1084210848010002ull, 0x0000108001482442ull, + 0x100A012802408811ull, 0x0000000010041010ull, 0x2000012102000000ull, 0x0100000028020201ull, + 0x8002420888002800ull, 0x000A000000010048ull, 0x6140002000908222ull, 0x0804000020100111ull, + 0x0802420112011120ull, 0x0000000000000000ull, 0x22200842A5014040ull, 0x0021000000000040ull, + 0x000AA04000A00100ull, 0x0040482000000104ull, 0x1420010300000542ull, 0x0B4B481095101000ull, + 0x10C120281AA822A1ull, 0x020850880212022Aull, 0x6090140302808552ull, 0x142AA10800004010ull, + 0x110000046A5552AAull, 0xA002C8202934A810ull, 0x2001060A40100084ull, 0x29001030480A0685ull, + 0x40052080A4000408ull, 0x04A40104A4010042ull, 0x1030480A06829001ull, 0x80A0690648021290ull, + 0x30480A018A400B04ull, 0xAA42BA90A5552008ull, 0x80082AA457521550ull, 0x1291480214040814ull, + 0x0A01A520086A4804ull, 0xA903208080083048ull, 0xA490020428008880ull, 0x2002060901403544ull, + 0x2900408A241521A4ull, 0x5229004192900419ull, 0x0828205542050082ull, 0x020C120281A2A201ull, + 0x80A06B0515964848ull, 0x9004052094808304ull, 0x020C94802200104Aull, 0x8088A4480020C948ull, + 0x1000A41014800808ull, 0x2A40408A90010010ull, 0xC120280651452004ull, 0x1202806514520040ull, + 0x202806514520040Cull, 0x810520020A4040C1ull, 0x090140324A28A400ull, 0xA012440021520206ull, + 0x84002085200B0480ull, 0x0140C4441482A434ull, 0x0A4010C948040609ull, 0x2288200008020880ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0118[64] = { + 1u, 18u, 35u, 48u, 61u, 76u, 90u, 100u, 109u, 121u, 125u, 130u, 136u, 145u, 150u, 161u, + 168u, 179u, 179u, 192u, 195u, 203u, 209u, 219u, 235u, 253u, 266u, 282u, 293u, 311u, 328u, 338u, + 353u, 363u, 375u, 389u, 405u, 420u, 443u, 464u, 478u, 494u, 508u, 520u, 534u, 551u, 568u, 582u, + 597u, 618u, 632u, 645u, 660u, 670u, 682u, 698u, 712u, 727u, 740u, 755u, 769u, 781u, 798u, 813u, }; void recomp_unit_0118_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0118_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089DC004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0118[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0118[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0118[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089DC004; @@ -994,7 +901,6 @@ LOCAL_DISPATCH: } L_089DC004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1008,7 +914,6 @@ L_089DC00C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089DC034; @@ -1022,7 +927,6 @@ L_089DC034: ctx.gpr[17] = (aot_gpr_16 + static_cast(2032)); { const float fs = ctx.fpr[30]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[30] = std::bit_cast(0x7FC00000u); else ctx.fpr[30] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[28]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[28] = std::bit_cast(0x7FC00000u); else ctx.fpr[28] = fs * ft; } if (branch_taken) { @@ -1035,7 +939,6 @@ L_089DC05C: aot_gpr_6 = (8u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089DC080; } @@ -1049,7 +952,6 @@ L_089DC070: goto L_089DC078; L_089DC078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC0A8; } @@ -1057,7 +959,6 @@ L_089DC078: } L_089DC080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1065,7 +966,6 @@ L_089DC080: } L_089DC088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1077,7 +977,6 @@ L_089DC090: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DC0CC; } @@ -1093,7 +992,6 @@ L_089DC0A8: AOT_REGCACHE_SYNC_OUT(); return; L_089DC0BC: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089DC13C; } @@ -1101,7 +999,6 @@ L_089DC0BC: } L_089DC0C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC180; } @@ -1109,7 +1006,6 @@ L_089DC0C4: } L_089DC0CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1126,7 +1022,6 @@ L_089DC0D4: AOT_REGCACHE_SYNC_OUT(); return; L_089DC0EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DC108; } @@ -1143,7 +1038,6 @@ L_089DC0F4: } L_089DC100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC130; } @@ -1151,7 +1045,6 @@ L_089DC100: } L_089DC108: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1175,7 +1068,6 @@ L_089DC118: } L_089DC120: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_089DC130; } @@ -1183,7 +1075,6 @@ L_089DC120: } L_089DC128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1300,9 +1191,7 @@ L_089DC1E0: L_089DC1F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC224; } @@ -1310,9 +1199,7 @@ L_089DC1F4: } L_089DC208: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC224; } @@ -1325,9 +1212,7 @@ L_089DC218: goto L_089DC224; L_089DC224: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC260; } @@ -1338,9 +1223,7 @@ L_089DC234: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC288; } @@ -1348,9 +1231,7 @@ L_089DC234: } L_089DC250: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC288; } @@ -1371,7 +1252,6 @@ L_089DC260: AOT_REGCACHE_SYNC_OUT(); return; L_089DC280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1379,7 +1259,6 @@ L_089DC280: } L_089DC288: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); goto L_089DC2A4; @@ -1387,7 +1266,6 @@ L_089DC288: goto L_089DC298; L_089DC298: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1400,7 +1278,6 @@ L_089DC2A4: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1411,9 +1288,7 @@ L_089DC2B4: aot_gpr_4 = (17530u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1510,7 +1385,6 @@ L_089DC2D0: L_089DC324: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(1264))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_089DC390; } @@ -1574,9 +1448,7 @@ L_089DC330: aot_fpr_13 = std::bit_cast(ctx.gpr[9]); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DC390; } @@ -1598,7 +1470,6 @@ L_089DC390: } L_089DC3A0: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_089DC4AC; } @@ -1615,14 +1486,12 @@ L_089DC3A8: } L_089DC3B4: aot_gpr_31 = (0x089DC3BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DC3BCu) goto L_089DC3BC; AOT_REGCACHE_SYNC_OUT(); return; L_089DC3BC: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC408; } @@ -1631,7 +1500,6 @@ L_089DC3BC: L_089DC3CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1332))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC3F8; } @@ -1639,14 +1507,12 @@ L_089DC3CC: } L_089DC3D8: aot_gpr_31 = (0x089DC3E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DC3E0u) goto L_089DC3E0; AOT_REGCACHE_SYNC_OUT(); return; L_089DC3E0: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC3F8; } @@ -1663,7 +1529,6 @@ L_089DC3F0: L_089DC3F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC408; } @@ -1791,7 +1656,17 @@ L_089DC4AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DC4E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); @@ -1822,7 +1697,6 @@ L_089DC518: } L_089DC52C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC53C; } @@ -1830,7 +1704,6 @@ L_089DC52C: } L_089DC534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC8F4; } @@ -1840,7 +1713,6 @@ L_089DC53C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089DC558; } @@ -1849,7 +1721,6 @@ L_089DC53C: L_089DC54C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089DC570; } @@ -1857,7 +1728,6 @@ L_089DC54C: } L_089DC558: aot_gpr_31 = (0x089DC560u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DC560u) goto L_089DC560; AOT_REGCACHE_SYNC_OUT(); return; L_089DC560: @@ -1870,7 +1740,6 @@ L_089DC560: } L_089DC568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC580; } @@ -1888,12 +1757,10 @@ L_089DC570: } L_089DC580: aot_gpr_31 = (0x089DC588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DC588u) goto L_089DC588; AOT_REGCACHE_SYNC_OUT(); return; L_089DC588: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089DC5F8; } @@ -1972,7 +1839,6 @@ L_089DC644: L_089DC670: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089DC764; } @@ -2052,7 +1918,6 @@ L_089DC71C: L_089DC72C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1284))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC764; } @@ -2070,7 +1935,6 @@ L_089DC738: L_089DC750: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC764; } @@ -2144,7 +2008,6 @@ L_089DC804: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC830; } @@ -2163,7 +2026,6 @@ L_089DC830: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DC85C; } @@ -2205,7 +2067,6 @@ L_089DC890: L_089DC898: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089DC8D0; } @@ -2225,7 +2086,6 @@ L_089DC8A4: AOT_REGCACHE_SYNC_OUT(); return; L_089DC8C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DC8F4; } @@ -2258,7 +2118,17 @@ L_089DC8F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DC914: aot_gpr_4 = (16102u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -2271,7 +2141,17 @@ L_089DC914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DC934: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2), static_cast(0u)); @@ -2282,7 +2162,17 @@ L_089DC934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DC94C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2359,13 +2249,22 @@ L_089DC974: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCA68: aot_gpr_5 = (15395u << 16u); aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089DCA84; @@ -2432,7 +2331,17 @@ L_089DCB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCB28: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(60)))))); aot_gpr_5 = (0u | 0u); @@ -2441,7 +2350,6 @@ L_089DCB28: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(60)))))); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089DCB70; } @@ -2457,7 +2365,6 @@ L_089DCB48: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089DCB48; } @@ -2465,11 +2372,20 @@ L_089DCB48: } L_089DCB70: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCB78: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(116))); @@ -2501,7 +2417,17 @@ L_089DCB78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCBE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2615,7 +2541,17 @@ L_089DCCC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCD00: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_fpr_12 = std::bit_cast(aot_gpr_5); @@ -2645,7 +2581,17 @@ L_089DCD1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCD44: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2773,7 +2719,17 @@ L_089DCE60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCE98: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[7] = (16281u << 16u); @@ -2807,9 +2763,7 @@ L_089DCEDC: L_089DCEE4: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DCEFC; } @@ -2869,7 +2823,17 @@ L_089DCF54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DCF78: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); ctx.gpr[7] = (aot_gpr_5 + aot_gpr_5); @@ -2944,7 +2908,6 @@ L_089DD034: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 56u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DD084; } @@ -3214,14 +3177,34 @@ L_089DD21C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD23C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(62), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD244: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3252,7 +3235,6 @@ L_089DD26C: } L_089DD278: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DD288; } @@ -3275,7 +3257,17 @@ L_089DD288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD29C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3292,11 +3284,20 @@ L_089DD29C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD2B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -3468,13 +3469,22 @@ L_089DD31C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD3C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11240))); aot_gpr_6 = (static_cast(aot_gpr_6) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089DD458; } @@ -3524,9 +3534,7 @@ L_089DD3D8: aot_gpr_6 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DD458; } @@ -3564,7 +3572,17 @@ L_089DD458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD460: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), ctx.gpr[17]); @@ -3599,7 +3617,6 @@ L_089DD49C: goto L_089DD4B8; L_089DD4B8: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_089DD608; } @@ -3607,7 +3624,6 @@ L_089DD4B8: } L_089DD4C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DD608; } @@ -3615,7 +3631,6 @@ L_089DD4C0: } L_089DD4C8: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089DD608; } @@ -3634,7 +3649,6 @@ L_089DD4D0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_089DD50C; @@ -3644,9 +3658,7 @@ L_089DD50C: ctx.gpr[7] = (16928u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DD608; } @@ -3717,9 +3729,7 @@ L_089DD524: ctx.gpr[7] = (16968u << 16u); aot_fpr_14 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DD608; } @@ -3729,7 +3739,6 @@ L_089DD598: aot_gpr_5 = (16800u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16800u << 16u); if (branch_taken) { @@ -3774,7 +3783,6 @@ L_089DD608: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089DD49C; } @@ -3782,7 +3790,6 @@ L_089DD608: } L_089DD61C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089DD684; } @@ -3790,7 +3797,6 @@ L_089DD61C: } L_089DD624: aot_gpr_31 = (0x089DD62Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD62Cu) goto L_089DD62C; AOT_REGCACHE_SYNC_OUT(); return; L_089DD62C: @@ -3838,7 +3844,17 @@ L_089DD688: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD6A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3867,7 +3883,6 @@ L_089DD6D8: } L_089DD6EC: aot_gpr_31 = (0x089DD6F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD6F4u) goto L_089DD6F4; AOT_REGCACHE_SYNC_OUT(); return; L_089DD6F4: @@ -3903,7 +3918,17 @@ L_089DD6F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD734: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3927,12 +3952,10 @@ L_089DD754: } L_089DD764: aot_gpr_31 = (0x089DD76Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 218u, 0x08A1D29Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD76Cu) goto L_089DD76C; AOT_REGCACHE_SYNC_OUT(); return; L_089DD76C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DD780; } @@ -3953,7 +3976,17 @@ L_089DD780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -3984,7 +4017,6 @@ L_089DD7C4: goto L_089DD7C8; L_089DD7C8: aot_gpr_31 = (0x089DD7D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 327u, 0x088099B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD7D0u) goto L_089DD7D0; AOT_REGCACHE_SYNC_OUT(); return; L_089DD7D0: @@ -3996,7 +4028,6 @@ L_089DD7D0: goto L_089DD7DC; L_089DD7DC: aot_gpr_31 = (0x089DD7E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD7E4u) goto L_089DD7E4; AOT_REGCACHE_SYNC_OUT(); return; L_089DD7E4: @@ -4016,13 +4047,22 @@ L_089DD7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD804: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DD820; } @@ -4030,7 +4070,6 @@ L_089DD804: } L_089DD818: aot_gpr_31 = (0x089DD820u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD820u) goto L_089DD820; AOT_REGCACHE_SYNC_OUT(); return; L_089DD820: @@ -4046,7 +4085,17 @@ L_089DD828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -4061,7 +4110,6 @@ L_089DD838: } L_089DD850: aot_gpr_31 = (0x089DD858u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD858u) goto L_089DD858; AOT_REGCACHE_SYNC_OUT(); return; L_089DD858: @@ -4071,7 +4119,6 @@ L_089DD858: AOT_REGCACHE_SYNC_OUT(); return; L_089DD860: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DD870; } @@ -4138,7 +4185,6 @@ L_089DD8C4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DD8E0; } @@ -4156,13 +4202,22 @@ L_089DD8E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DD910; } @@ -4170,7 +4225,6 @@ L_089DD8F4: } L_089DD908: aot_gpr_31 = (0x089DD910u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DD910u) goto L_089DD910; AOT_REGCACHE_SYNC_OUT(); return; L_089DD910: @@ -4186,7 +4240,17 @@ L_089DD918: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD928: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4213,7 +4277,17 @@ L_089DD954: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD968: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4247,7 +4321,6 @@ L_089DD9A0: AOT_REGCACHE_SYNC_OUT(); return; L_089DD9B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DD9D0; } @@ -4274,7 +4347,17 @@ L_089DD9D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DD9E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4302,7 +4385,6 @@ L_089DDA14: AOT_REGCACHE_SYNC_OUT(); return; L_089DDA1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DDA2C; } @@ -4322,7 +4404,17 @@ L_089DDA2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDA40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -4339,7 +4431,6 @@ L_089DDA40: } L_089DDA60: aot_gpr_31 = (0x089DDA68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDA68u) goto L_089DDA68; AOT_REGCACHE_SYNC_OUT(); return; L_089DDA68: @@ -4349,7 +4440,6 @@ L_089DDA68: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DDA88; } @@ -4410,7 +4500,6 @@ L_089DDAE0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DDAFC; } @@ -4432,7 +4521,17 @@ L_089DDAFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDB14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4485,13 +4584,22 @@ L_089DDB3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDB90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x089DDBA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDBA4u) goto L_089DDBA4; AOT_REGCACHE_SYNC_OUT(); return; L_089DDBA4: @@ -4499,7 +4607,6 @@ L_089DDBA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 41 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DDC20; } @@ -4507,7 +4614,6 @@ L_089DDBA4: } L_089DDBB8: aot_gpr_31 = (0x089DDBC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDBC0u) goto L_089DDBC0; AOT_REGCACHE_SYNC_OUT(); return; L_089DDBC0: @@ -4517,7 +4623,6 @@ L_089DDBC0: AOT_REGCACHE_SYNC_OUT(); return; L_089DDBC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089DDC18; } @@ -4525,7 +4630,6 @@ L_089DDBC8: } L_089DDBD0: aot_gpr_31 = (0x089DDBD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDBD8u) goto L_089DDBD8; AOT_REGCACHE_SYNC_OUT(); return; L_089DDBD8: @@ -4533,7 +4637,6 @@ L_089DDBD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089DDC10; } @@ -4541,7 +4644,6 @@ L_089DDBD8: } L_089DDBEC: aot_gpr_31 = (0x089DDBF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDBF4u) goto L_089DDBF4; AOT_REGCACHE_SYNC_OUT(); return; L_089DDBF4: @@ -4596,7 +4698,6 @@ L_089DDC28: goto L_089DDC34; L_089DDC34: aot_gpr_31 = (0x089DDC3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDC3Cu) goto L_089DDC3C; AOT_REGCACHE_SYNC_OUT(); return; L_089DDC3C: @@ -4613,7 +4714,6 @@ L_089DDC44: goto L_089DDC4C; L_089DDC4C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DDC70; } @@ -4621,13 +4721,11 @@ L_089DDC4C: } L_089DDC54: aot_gpr_31 = (0x089DDC5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDC5Cu) goto L_089DDC5C; AOT_REGCACHE_SYNC_OUT(); return; L_089DDC5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DDC78; } @@ -4660,7 +4758,17 @@ L_089DDC7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDC8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -4709,7 +4817,6 @@ L_089DDD14: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(-17528), static_cast(ctx.gpr[7])); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089DDD14; } @@ -4717,7 +4824,6 @@ L_089DDD14: } L_089DDD30: aot_gpr_31 = (0x089DDD38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DDD38u) goto L_089DDD38; AOT_REGCACHE_SYNC_OUT(); return; L_089DDD38: @@ -4765,7 +4871,6 @@ L_089DDD78: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); if (branch_taken) { @@ -4777,9 +4882,7 @@ L_089DDD98: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DDDC0; } @@ -4852,7 +4955,17 @@ L_089DDE20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDE54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4905,7 +5018,17 @@ L_089DDEAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDEC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4937,7 +5060,6 @@ L_089DDF0C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DDF28; } @@ -5004,7 +5126,6 @@ L_089DDF7C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DDF98; } @@ -5027,7 +5148,17 @@ L_089DDF98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DDFB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5077,7 +5208,17 @@ L_089DE010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE02C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5114,7 +5255,6 @@ L_089DE080: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); if (branch_taken) { @@ -5126,7 +5266,6 @@ L_089DE0A0: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -5190,7 +5329,17 @@ L_089DE11C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE144: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5234,7 +5383,17 @@ L_089DE18C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE1A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5278,7 +5437,17 @@ L_089DE1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE204: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5311,7 +5480,6 @@ L_089DE248: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE268; } @@ -5378,7 +5546,6 @@ L_089DE2BC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE2D8; } @@ -5401,7 +5568,17 @@ L_089DE2D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE2F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5439,7 +5616,17 @@ L_089DE334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5456,7 +5643,6 @@ L_089DE348: L_089DE370: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE388; } @@ -5487,11 +5673,20 @@ L_089DE38C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE3A4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(526))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089DE3B8; } @@ -5558,7 +5753,6 @@ L_089DE40C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089DE428; } @@ -5573,7 +5767,17 @@ L_089DE428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5664,7 +5868,6 @@ L_089DE4DC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE4F8; } @@ -5686,7 +5889,17 @@ L_089DE4F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE510: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5718,7 +5931,6 @@ L_089DE54C: AOT_REGCACHE_SYNC_OUT(); return; L_089DE554: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DE56C; } @@ -5726,7 +5938,6 @@ L_089DE554: } L_089DE55C: aot_gpr_31 = (0x089DE564u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE564u) goto L_089DE564; AOT_REGCACHE_SYNC_OUT(); return; L_089DE564: @@ -5737,7 +5948,6 @@ L_089DE564: L_089DE56C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE62C; } @@ -5745,7 +5955,6 @@ L_089DE56C: } L_089DE578: aot_gpr_31 = (0x089DE580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE580u) goto L_089DE580; AOT_REGCACHE_SYNC_OUT(); return; L_089DE580: @@ -5768,7 +5977,6 @@ L_089DE594: goto L_089DE5A0; L_089DE5A0: aot_gpr_31 = (0x089DE5A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE5A8u) goto L_089DE5A8; AOT_REGCACHE_SYNC_OUT(); return; L_089DE5A8: @@ -5787,7 +5995,6 @@ L_089DE5B4: goto L_089DE5B8; L_089DE5B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE5DC; } @@ -5817,11 +6024,9 @@ L_089DE5DC: AOT_REGCACHE_SYNC_OUT(); return; L_089DE5E8: aot_gpr_31 = (0x089DE5F0u); - // nop goto L_089DDB90; L_089DE5F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DE6B8; } @@ -5829,7 +6034,6 @@ L_089DE5F0: } L_089DE5F8: aot_gpr_31 = (0x089DE600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE600u) goto L_089DE600; AOT_REGCACHE_SYNC_OUT(); return; L_089DE600: @@ -5837,7 +6041,6 @@ L_089DE600: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089DE6B8; } @@ -5845,7 +6048,6 @@ L_089DE600: } L_089DE614: aot_gpr_31 = (0x089DE61Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE61Cu) goto L_089DE61C; AOT_REGCACHE_SYNC_OUT(); return; L_089DE61C: @@ -5855,7 +6057,6 @@ L_089DE61C: AOT_REGCACHE_SYNC_OUT(); return; L_089DE624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DE6B8; } @@ -5863,7 +6064,6 @@ L_089DE624: } L_089DE62C: aot_gpr_31 = (0x089DE634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE634u) goto L_089DE634; AOT_REGCACHE_SYNC_OUT(); return; L_089DE634: @@ -5886,7 +6086,6 @@ L_089DE648: goto L_089DE654; L_089DE654: aot_gpr_31 = (0x089DE65Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE65Cu) goto L_089DE65C; AOT_REGCACHE_SYNC_OUT(); return; L_089DE65C: @@ -5905,7 +6104,6 @@ L_089DE668: goto L_089DE66C; L_089DE66C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE68C; } @@ -5934,11 +6132,9 @@ L_089DE68C: AOT_REGCACHE_SYNC_OUT(); return; L_089DE698: aot_gpr_31 = (0x089DE6A0u); - // nop goto L_089DDB90; L_089DE6A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DE6B8; } @@ -5946,7 +6142,6 @@ L_089DE6A0: } L_089DE6A8: aot_gpr_31 = (0x089DE6B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DE6B0u) goto L_089DE6B0; AOT_REGCACHE_SYNC_OUT(); return; L_089DE6B0: @@ -5967,7 +6162,17 @@ L_089DE6B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE6D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6018,7 +6223,17 @@ L_089DE730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6044,7 +6259,17 @@ L_089DE774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE788: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6087,7 +6312,6 @@ L_089DE7D4: AOT_REGCACHE_SYNC_OUT(); return; L_089DE7E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DE7F4; } @@ -6111,7 +6335,17 @@ L_089DE7F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE80C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2236u << 16u); @@ -6127,7 +6361,6 @@ L_089DE80C: L_089DE830: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE850; } @@ -6164,7 +6397,17 @@ L_089DE85C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE870: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6197,7 +6440,6 @@ L_089DE8AC: AOT_REGCACHE_SYNC_OUT(); return; L_089DE8B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DE8C4; } @@ -6258,7 +6500,6 @@ L_089DE91C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DE938; } @@ -6280,7 +6521,17 @@ L_089DE938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DE950: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -6302,7 +6553,6 @@ L_089DE980: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); if (branch_taken) { @@ -6314,9 +6564,7 @@ L_089DE9A0: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DE9C8; } @@ -6372,12 +6620,21 @@ L_089DEA00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEA20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089DEA30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 566u, 0x08A36418u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DEA30u) goto L_089DEA30; AOT_REGCACHE_SYNC_OUT(); return; L_089DEA30: @@ -6388,7 +6645,17 @@ L_089DEA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEA40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6431,7 +6698,17 @@ L_089DEA8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEAA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6466,7 +6743,6 @@ L_089DEAEC: AOT_REGCACHE_SYNC_OUT(); return; L_089DEAF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DEB38; } @@ -6475,7 +6751,6 @@ L_089DEAF8: L_089DEB00: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089DEB38; } @@ -6509,7 +6784,6 @@ L_089DEB24: } L_089DEB2C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089DEB38; } @@ -6570,7 +6844,6 @@ L_089DEB90: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DEBAC; } @@ -6593,7 +6866,17 @@ L_089DEBAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEBC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6657,7 +6940,6 @@ L_089DEC38: } L_089DEC44: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_089DEC54; } @@ -6673,7 +6955,6 @@ L_089DEC54: ctx.gpr[7] = (aot_gpr_5 + ctx.gpr[8]); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089DEC38; } @@ -6697,7 +6978,6 @@ L_089DEC78: AOT_REGCACHE_SYNC_OUT(); return; L_089DEC88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DECA0; } @@ -6724,7 +7004,17 @@ L_089DECA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DECBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6782,7 +7072,17 @@ L_089DED14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DED2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6841,7 +7141,17 @@ L_089DED84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DED9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6884,7 +7194,6 @@ L_089DEDE8: AOT_REGCACHE_SYNC_OUT(); return; L_089DEDF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089DEE08; } @@ -6908,7 +7217,17 @@ L_089DEE08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEE20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6940,18 +7259,26 @@ L_089DEE4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEE68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); aot_gpr_31 = (0x089DEE7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DEE7Cu) goto L_089DEE7C; AOT_REGCACHE_SYNC_OUT(); return; L_089DEE7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DEEF0; } @@ -6959,7 +7286,6 @@ L_089DEE7C: } L_089DEE84: aot_gpr_31 = (0x089DEE8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DEE8Cu) goto L_089DEE8C; AOT_REGCACHE_SYNC_OUT(); return; L_089DEE8C: @@ -6969,7 +7295,6 @@ L_089DEE8C: AOT_REGCACHE_SYNC_OUT(); return; L_089DEE94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089DEEF0; } @@ -6982,7 +7307,6 @@ L_089DEE9C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9340), aot_gpr_4); aot_gpr_31 = (0x089DEEB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DEEB8u) goto L_089DEEB8; AOT_REGCACHE_SYNC_OUT(); return; L_089DEEB8: @@ -6996,7 +7320,6 @@ L_089DEEB8: AOT_REGCACHE_SYNC_OUT(); return; L_089DEED0: aot_gpr_31 = (0x089DEED8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DEED8u) goto L_089DEED8; AOT_REGCACHE_SYNC_OUT(); return; L_089DEED8: @@ -7026,7 +7349,17 @@ L_089DEEF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEF04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7063,7 +7396,6 @@ L_089DEF48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4214))); aot_gpr_4 = (ctx.gpr[2] | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DEF60; } @@ -7130,7 +7462,6 @@ L_089DEFB4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DEFD0; } @@ -7152,7 +7483,17 @@ L_089DEFD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DEFE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7254,9 +7595,7 @@ L_089DF08C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089DF0B0; } @@ -7267,7 +7606,6 @@ L_089DF0A4: goto L_089DF0A8; L_089DF0A8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089DF0B8; } @@ -7334,7 +7672,6 @@ L_089DF10C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF128; } @@ -7356,7 +7693,17 @@ L_089DF128: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF140: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7397,7 +7744,6 @@ L_089DF180: L_089DF198: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DF1AC; } @@ -7405,7 +7751,6 @@ L_089DF198: } L_089DF1A4: aot_gpr_31 = (0x089DF1ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DF1ACu) goto L_089DF1AC; AOT_REGCACHE_SYNC_OUT(); return; L_089DF1AC: @@ -7420,7 +7765,17 @@ L_089DF1AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF1CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7469,7 +7824,17 @@ L_089DF21C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF234: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -7494,7 +7859,17 @@ L_089DF268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF278: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7553,7 +7928,17 @@ L_089DF2D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF2E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7612,7 +7997,17 @@ L_089DF340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF358: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7645,7 +8040,6 @@ L_089DF39C: L_089DF3AC: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_089DF3C0; } @@ -7687,7 +8081,17 @@ L_089DF3E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF400: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7707,7 +8111,17 @@ L_089DF410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF430: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -7740,7 +8154,6 @@ L_089DF474: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); if (branch_taken) { @@ -7752,7 +8165,6 @@ L_089DF494: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -7801,7 +8213,17 @@ L_089DF4F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF514: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7829,7 +8251,6 @@ L_089DF544: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF588; } @@ -7874,7 +8295,17 @@ L_089DF5A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF5BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7889,7 +8320,6 @@ L_089DF5BC: L_089DF5DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF5F0; } @@ -7916,7 +8346,17 @@ L_089DF5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF60C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7951,7 +8391,6 @@ L_089DF64C: AOT_REGCACHE_SYNC_OUT(); return; L_089DF65C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DF68C; } @@ -7961,7 +8400,6 @@ L_089DF664: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF68C; } @@ -7975,7 +8413,6 @@ L_089DF674: L_089DF67C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089DF68C; } @@ -8036,7 +8473,6 @@ L_089DF6E4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF700; } @@ -8059,7 +8495,17 @@ L_089DF700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF71C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8094,7 +8540,6 @@ L_089DF75C: AOT_REGCACHE_SYNC_OUT(); return; L_089DF76C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DF79C; } @@ -8104,7 +8549,6 @@ L_089DF774: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF79C; } @@ -8118,7 +8562,6 @@ L_089DF784: L_089DF78C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089DF79C; } @@ -8179,7 +8622,6 @@ L_089DF7F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF810; } @@ -8202,7 +8644,17 @@ L_089DF810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF82C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8237,7 +8689,6 @@ L_089DF86C: AOT_REGCACHE_SYNC_OUT(); return; L_089DF87C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DF8AC; } @@ -8247,7 +8698,6 @@ L_089DF884: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF8AC; } @@ -8261,7 +8711,6 @@ L_089DF894: L_089DF89C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089DF8AC; } @@ -8322,7 +8771,6 @@ L_089DF904: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DF920; } @@ -8345,7 +8793,17 @@ L_089DF920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF93C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8378,7 +8836,17 @@ L_089DF970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DF988: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8428,7 +8896,17 @@ L_089DF9E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFA00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8463,7 +8941,6 @@ L_089DFA40: AOT_REGCACHE_SYNC_OUT(); return; L_089DFA50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089DFA98; } @@ -8473,7 +8950,6 @@ L_089DFA58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089DFA98; } @@ -8487,7 +8963,6 @@ L_089DFA68: L_089DFA70: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_089DFA94; } @@ -8502,7 +8977,6 @@ L_089DFA7C: L_089DFA88: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089DFA98; } @@ -8563,7 +9037,6 @@ L_089DFAF0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DFB0C; } @@ -8586,7 +9059,17 @@ L_089DFB0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFB28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8601,7 +9084,6 @@ L_089DFB28: L_089DFB48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DFB5C; } @@ -8628,7 +9110,17 @@ L_089DFB64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFB78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -8653,7 +9145,17 @@ L_089DFBAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFBBC: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7592))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -8720,7 +9222,6 @@ L_089DFC2C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089DFC48; } @@ -8735,7 +9236,17 @@ L_089DFC48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFC50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8781,7 +9292,17 @@ L_089DFCA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFCB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -8846,7 +9367,6 @@ L_089DFD2C: } L_089DFD38: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089DFD48; } @@ -8862,7 +9382,6 @@ L_089DFD48: aot_gpr_6 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089DFD2C; } @@ -8967,7 +9486,6 @@ L_089DFE10: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089DFE2C; } @@ -8991,7 +9509,17 @@ L_089DFE2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFE4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2236u << 16u); @@ -9045,7 +9573,17 @@ L_089DFEA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFEB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9082,7 +9620,6 @@ L_089DFEF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3258))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089DFF30; } @@ -9108,7 +9645,17 @@ L_089DFF30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -9158,17 +9705,25 @@ L_089DFFB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFFD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089DFFE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 484u, 0x08966FCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DFFE0u) goto L_089DFFE0; AOT_REGCACHE_SYNC_OUT(); return; L_089DFFE0: aot_gpr_31 = (0x089DFFE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 525u, 0x089672CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089DFFE8u) goto L_089DFFE8; AOT_REGCACHE_SYNC_OUT(); return; L_089DFFE8: @@ -9179,7 +9734,17 @@ L_089DFFE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089DFFF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0119.cpp b/profiles/vcs/generated/generated_unit_0119.cpp index 1e758e2..488f82e 100644 --- a/profiles/vcs/generated/generated_unit_0119.cpp +++ b/profiles/vcs/generated/generated_unit_0119.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0119[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 8, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 14, 15, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 24, 25, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 28, 0, 0, 29, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, 0, - 0, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, - 42, 0, 43, 0, 44, 45, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, - 0, 50, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 58, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 61, 0, 0, 0, 62, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 78, 0, - 0, 0, 79, 0, 80, 81, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 85, 0, 0, 0, 0, - 0, 86, 87, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, - 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, - 0, 94, 0, 0, 0, 95, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 102, 0, 103, - 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 106, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 112, 0, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 115, 0, 116, 0, 117, 0, 0, 0, 0, 118, 0, 119, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 124, 125, 0, - 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 128, 129, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, 0, 134, 135, 0, 0, 0, 0, 0, 136, 0, 0, 137, 138, 0, 0, 0, 0, 0, 0, 0, 0, - 139, 0, 140, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, 143, 144, 0, 145, 0, 0, 0, 0, 0, 0, 0, 146, 0, - 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 151, - 0, 0, 0, 0, 0, 152, 0, 0, 153, 0, 154, 155, 156, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, - 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 163, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, - 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, 176, 0, 0, 0, 177, 0, - 178, 0, 0, 0, 0, 179, 0, 180, 181, 0, 0, 182, 0, 183, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, - 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 200, 0, 0, 201, 0, 202, 0, 203, 0, 0, 0, 0, 0, 0, 0, 204, 0, 205, - 206, 0, 207, 0, 208, 0, 0, 209, 0, 210, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 220, 0, 221, 0, 0, 0, 0, 222, - 0, 0, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 0, 226, 0, 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 236, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 240, 0, 0, 0, 0, 0, 241, 242, 0, 0, 0, - 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 250, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 257, 0, 258, 0, 0, 259, 0, 0, 260, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 264, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, - 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 268, 0, 269, 0, 0, 270, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 279, 0, 0, - 0, 280, 0, 0, 0, 281, 0, 282, 0, 283, 284, 0, 0, 285, 0, 0, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 288, 0, 0, 289, 0, - 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, - 303, 0, 304, 0, 305, 0, 306, 307, 0, 0, 0, 0, 308, 0, 0, 0, 309, 0, 310, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, - 314, 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 318, 0, 319, 0, 0, 320, 0, 321, 0, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, - 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 0, 337, 338, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, 347, 0, - 0, 0, 348, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, 357, 358, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 363, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 367, - 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, - 0, 0, 371, 0, 0, 372, 0, 0, 373, 0, 0, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, - 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, - 381, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 0, 387, - 0, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 394, 0, 395, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 399, 0, 0, 0, 400, 0, 401, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 408, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 0, 0, 415, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, - 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 424, 0, 0, 425, 0, - 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, 0, 429, 430, 0, 0, 0, 431, 0, 0, 0, - 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 435, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, - 0, 438, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, - 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 450, 451, 0, 0, 0, 0, 0, 0, - 452, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 456, 457, 0, 0, 0, 0, 0, - 0, 458, 0, 459, 0, 0, 0, 0, 460, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 471, 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 0, - 0, 0, 0, 474, 0, 0, 475, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, - 0, 479, 0, 0, 480, 0, 0, 481, 0, 482, 0, 0, 0, 0, 483, 0, 484, 0, 0, 485, 0, 0, 0, 486, 0, 487, 488, 0, 489, 0, 0, 490, - 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 494, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, - 0, 503, 0, 504, 0, 505, 0, 506, 0, 0, 507, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 0, 514, 0, 515, 0, 516, 0, - 517, 0, 518, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 525, 0, 0, 526, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 532, 0, 0, 533, 0, 0, 534, 0, 0, 0, - 535, 0, 536, 0, 537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, - 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, - 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, - 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 555, 0, 0, 0, 556, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 565, 0, 566, 567, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 569, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 576, 577, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, - 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 0, 587, 0, 588, 0, 589, 0, 0, 0, 590, 0, 0, 0, 591, 0, 0, 0, 592, - 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, - 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 605, 0, 606, 0, 607, 0, 0, 608, 0, 0, 0, 609, 0, 0, - 0, 610, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 615, 0, 0, 0, 616, 0, - 0, 617, 0, 0, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 624, 0, 0, 0, 625, 0, - 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 0, 629, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, - 638, 0, 639, 0, 640, 0, 641, 0, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 650, - 0, 651, 0, 652, 0, 653, 0, 0, 654, 0, 0, 0, 655, 0, 0, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 0, 659, - 660, 0, 0, 0, 0, 661, 0, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 666, 0, 0, - 667, 0, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, - 0, 0, 673, 0, 674, 0, 675, 0, 676, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, - 680, 0, 0, 681, 0, 682, 0, 683, 0, 0, 0, 0, 684, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 690, 0, 0, 0, 0, 691, 0, 692, 0, 693, - 0, 0, 694, 0, 0, 0, 0, 695, 0, 0, 0, 696, 0, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 0, 0, 0, 0, - 704, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 708, 0, 0, 0, 709, 0, 0, 0, 710, 0, 711, - 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 713, 0, 714, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 717, 0, 718, 0, - 719, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 0, 0, 724, 0, 0, 725, 0, 0, 0, 0, 0, 0, - 726, 0, 727, 0, 728, 0, 729, 0, 730, 0, 731, 0, 0, 0, 732, 0, 733, 0, 0, 0, 734, 0, 735, 0, 736, 0, 737, 0, 738, 0, 0, 739, - 0, 740, 0, 0, 0, 741, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 743, 0, 0, 744, 0, 745, 0, 0, 746, 0, 747, 0, 748, 0, 0, - 0, 749, 0, 750, 0, 751, 0, 0, 0, 752, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 754, 0, 0, 755, 0, 0, 0, 756, 0, 0, 757, - 0, 758, 0, 759, 0, 760, 0, 761, 0, 762, 0, 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 766, 0, 767, - 0, 768, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 771, 0, 0, 772, 0, 773, 0, 0, 0, 0, 0, 774, 0, 0, - 775, 0, 776, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 780, 0, - 0, 0, 781, 0, 0, 0, 782, 0, 783, 0, 0, 0, 784, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 787, - 0, 0, 0, 788, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 790, 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 793, 0, 0, 0, 794, 0, - 795, 0, 796, 0, 797, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 799, 0, 800, 0, 0, 0, 801, 0, 0, 802, 0, 803, 0, 0, 0, 0, - 0, 804, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 0, 808, 0, 809, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 811, 0, 0, 0, 0, 812, 0, 0, 0, 813, 0, 814, 0, 0, 0, 0, - 0, 815, 0, 816, 0, 817, 0, 0, 0, 0, 818, 0, 819, 0, 820, 0, 0, 0, 0, 0, 821, 0, 822, 0, 823, 0, 824, 0, 0, 0, 0, 0, - 825, 0, 826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 828, 0, 829, 0, 0, 0, 0, 0, 0, - 0, 830, 0, 831, 0, 0, 0, 832, 0, 0, 0, 0, 0, 833, 0, 0, 834, 0, 835, 0, 0, 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, 0, - 0, 0, 838, 0, 0, 839, 0, 840, 0, 841, 0, 842, 0, 843, 0, 0, 0, 0, 0, 844, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0119[64] = { + 0x800A40105A002901ull, 0x02C1202806000416ull, 0x04240A9052002192ull, 0x2008020602105035ull, + 0x188A290020802008ull, 0x52008101030480A0ull, 0x4000010609014034ull, 0xA905052280880002ull, + 0x142A20045502A0A0ull, 0x0A01880864404400ull, 0x4058240500C83048ull, 0x01101D2080890020ull, + 0x0004081480086405ull, 0x9124A9A145041490ull, 0x0001480200104028ull, 0x80820695A02A4804ull, + 0x8520082004010000ull, 0xC40104900410A0A8ull, 0x0040900418240500ull, 0x0008200000008000ull, + 0x08325200888000A1ull, 0x004129008000A100ull, 0x489026A221112111ull, 0x409510D555555504ull, + 0x0432AAAAAAA52949ull, 0x4904040900008000ull, 0x281AA00801080094ull, 0x10100010A020C120ull, + 0x2000100420025124ull, 0x0021002289208081ull, 0x68C0009500010001ull, 0x2020002030108280ull, + 0x000020084004A248ull, 0x118900804A800100ull, 0x00000222088A8002ull, 0x1102005000200000ull, + 0x0688001103100084ull, 0x088D54004220290Aull, 0x96894292102000C8ull, 0x840222040005A014ull, + 0x0400441554AAA4AAull, 0x1250808001052240ull, 0x0040091008000815ull, 0x0202002010010002ull, + 0x00511000A0080002ull, 0xD010040080051100ull, 0x4008008010031000ull, 0x888A955540201A00ull, + 0x22540404AA888888ull, 0x44444A2244440112ull, 0x9412AA5555554444ull, 0x210821218421112Aull, + 0x4010415420021421ull, 0xA8500200050090A9ull, 0xA22A000505554884ull, 0x0245201152022820ull, + 0x2A52082295514555ull, 0xA02282AA9120822Aull, 0x4400202520A42022ull, 0x4414820890041144ull, + 0x0A5000420A450115ull, 0x0550542A0A211000ull, 0x02C0000000000005ull, 0x80282AA41105208Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0119[64] = { + 1u, 14u, 27u, 42u, 55u, 67u, 79u, 90u, 104u, 120u, 132u, 147u, 159u, 170u, 190u, 198u, + 215u, 223u, 237u, 247u, 250u, 263u, 272u, 290u, 314u, 340u, 348u, 361u, 371u, 381u, 392u, 403u, + 412u, 421u, 432u, 441u, 447u, 458u, 474u, 491u, 503u, 523u, 535u, 544u, 550u, 558u, 568u, 575u, + 593u, 610u, 626u, 651u, 667u, 680u, 694u, 712u, 726u, 749u, 768u, 781u, 795u, 810u, 825u, 830u, }; void recomp_unit_0119_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0119_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089E0000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0119[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0119[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0119[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089E0000; @@ -1057,7 +964,6 @@ L_089E0034: goto L_089E0064; L_089E0064: aot_gpr_31 = (0x089E006Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E006Cu) goto L_089E006C; AOT_REGCACHE_SYNC_OUT(); return; L_089E006C: @@ -1081,7 +987,17 @@ L_089E0078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1124,7 +1040,6 @@ L_089E00CC: goto L_089E00FC; L_089E00FC: aot_gpr_31 = (0x089E0104u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0104u) goto L_089E0104; AOT_REGCACHE_SYNC_OUT(); return; L_089E0104: @@ -1148,7 +1063,17 @@ L_089E0110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0128: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); aot_gpr_6 = (2238u << 16u); @@ -1225,7 +1150,6 @@ L_089E01C0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E01DC; } @@ -1240,7 +1164,17 @@ L_089E01DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E01E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1255,7 +1189,6 @@ L_089E01E4: L_089E0204: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E021C; } @@ -1282,7 +1215,17 @@ L_089E0220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0234: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_16); @@ -1378,7 +1321,6 @@ L_089E02E8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089E0310; } @@ -1386,7 +1328,6 @@ L_089E02E8: } L_089E0300: { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089E0310; } @@ -1455,7 +1396,6 @@ L_089E0364: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E0388; } @@ -1478,7 +1418,17 @@ L_089E0388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E03A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1521,7 +1471,17 @@ L_089E03F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E040C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1564,7 +1524,17 @@ L_089E045C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0474: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1599,7 +1569,6 @@ L_089E04B4: AOT_REGCACHE_SYNC_OUT(); return; L_089E04C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E04F0; } @@ -1609,7 +1578,6 @@ L_089E04CC: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E04F0; } @@ -1619,7 +1587,6 @@ L_089E04DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E04F0; } @@ -1680,7 +1647,6 @@ L_089E0548: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E0564; } @@ -1703,7 +1669,17 @@ L_089E0564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0580: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1726,7 +1702,17 @@ L_089E05A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E05BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1760,7 +1746,6 @@ L_089E05F8: AOT_REGCACHE_SYNC_OUT(); return; L_089E0608: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E0614; } @@ -1821,7 +1806,6 @@ L_089E066C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E0688; } @@ -1843,7 +1827,17 @@ L_089E0688: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E06A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1934,7 +1928,6 @@ L_089E0784: L_089E0794: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089E07F4; } @@ -1942,7 +1935,6 @@ L_089E0794: } L_089E07A0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089E07C8; } @@ -1959,7 +1951,6 @@ L_089E07A8: AOT_REGCACHE_SYNC_OUT(); return; L_089E07C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E07E0; } @@ -1990,7 +1981,6 @@ L_089E07EC: } L_089E07F4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089E081C; } @@ -2007,7 +1997,6 @@ L_089E07FC: AOT_REGCACHE_SYNC_OUT(); return; L_089E0814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E0834; } @@ -2028,7 +2017,6 @@ L_089E0834: goto L_089E083C; L_089E083C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089E0860; } @@ -2046,12 +2034,10 @@ L_089E0844: AOT_REGCACHE_SYNC_OUT(); return; L_089E0860: aot_gpr_31 = (0x089E0868u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0868u) goto L_089E0868; AOT_REGCACHE_SYNC_OUT(); return; L_089E0868: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E0888; } @@ -2059,7 +2045,6 @@ L_089E0868: } L_089E0870: aot_gpr_31 = (0x089E0878u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0878u) goto L_089E0878; AOT_REGCACHE_SYNC_OUT(); return; L_089E0878: @@ -2086,17 +2071,25 @@ L_089E0888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E08B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089E08C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E08C4u) goto L_089E08C4; AOT_REGCACHE_SYNC_OUT(); return; L_089E08C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E08E8; } @@ -2104,7 +2097,6 @@ L_089E08C4: } L_089E08CC: aot_gpr_31 = (0x089E08D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E08D4u) goto L_089E08D4; AOT_REGCACHE_SYNC_OUT(); return; L_089E08D4: @@ -2144,7 +2136,17 @@ L_089E0928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0938: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2187,7 +2189,17 @@ L_089E0978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E098C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2203,7 +2215,6 @@ L_089E09AC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E09C0; } @@ -2264,7 +2275,6 @@ L_089E0A18: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E0A34; } @@ -2286,7 +2296,17 @@ L_089E0A34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0A4C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8968))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -2351,7 +2371,6 @@ L_089E0AB4: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E0AD0; } @@ -2366,7 +2385,17 @@ L_089E0AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0AD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2389,7 +2418,17 @@ L_089E0AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0B14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2432,7 +2471,17 @@ L_089E0B5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0B7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); @@ -2471,7 +2520,6 @@ L_089E0BB0: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089E0BB0; } @@ -2485,7 +2533,17 @@ L_089E0BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0BE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2499,7 +2557,6 @@ L_089E0BE0: AOT_REGCACHE_SYNC_OUT(); return; L_089E0C00: aot_gpr_31 = (0x089E0C08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0C08u) goto L_089E0C08; AOT_REGCACHE_SYNC_OUT(); return; L_089E0C08: @@ -2510,7 +2567,6 @@ L_089E0C08: aot_gpr_4 = (ctx.gpr[2] + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E0C38; } @@ -2519,7 +2575,6 @@ L_089E0C08: L_089E0C28: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089E0C38; } @@ -2537,7 +2592,17 @@ L_089E0C38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0C4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2588,7 +2653,17 @@ L_089E0CAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0CC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[20]); @@ -2619,7 +2694,6 @@ L_089E0D1C: AOT_REGCACHE_SYNC_OUT(); return; L_089E0D28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E0E50; } @@ -2647,7 +2721,6 @@ L_089E0D48: goto L_089E0D60; L_089E0D60: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_089E0D78; } @@ -2692,7 +2765,6 @@ L_089E0D9C: L_089E0DA0: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089E0E38; } @@ -2705,7 +2777,6 @@ L_089E0DAC: AOT_REGCACHE_SYNC_OUT(); return; L_089E0DB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E0E38; } @@ -2714,7 +2785,6 @@ L_089E0DB4: L_089E0DBC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089E0DE0; } @@ -2723,7 +2793,6 @@ L_089E0DBC: L_089E0DC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089E0E38; } @@ -2732,7 +2801,6 @@ L_089E0DC8: L_089E0DD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_089E0E38; } @@ -2766,7 +2834,6 @@ L_089E0DFC: AOT_REGCACHE_SYNC_OUT(); return; L_089E0E0C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E0E38; } @@ -2818,7 +2885,17 @@ L_089E0E50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0E84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2868,7 +2945,17 @@ L_089E0EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0F08: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -2893,7 +2980,6 @@ L_089E0F2C: L_089E0F38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E0F4C; } @@ -2901,7 +2987,6 @@ L_089E0F38: } L_089E0F44: aot_gpr_31 = (0x089E0F4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0F4Cu) goto L_089E0F4C; AOT_REGCACHE_SYNC_OUT(); return; L_089E0F4C: @@ -2945,7 +3030,6 @@ L_089E0F54: goto L_089E0F74; L_089E0F74: aot_gpr_31 = (0x089E0F7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0F7Cu) goto L_089E0F7C; AOT_REGCACHE_SYNC_OUT(); return; L_089E0F7C: @@ -2958,7 +3042,6 @@ L_089E0F80: AOT_REGCACHE_SYNC_OUT(); return; L_089E0F88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E0FC4; } @@ -2973,7 +3056,6 @@ L_089E0F90: goto L_089E0F9C; L_089E0F9C: aot_gpr_31 = (0x089E0FA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E0FA4u) goto L_089E0FA4; AOT_REGCACHE_SYNC_OUT(); return; L_089E0FA4: @@ -3011,7 +3093,17 @@ L_089E0FC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E0FDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3044,7 +3136,17 @@ L_089E0FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1040: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -3088,7 +3190,17 @@ L_089E1094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E10AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3133,7 +3245,6 @@ L_089E10FC: AOT_REGCACHE_SYNC_OUT(); return; L_089E110C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E1150; } @@ -3155,7 +3266,6 @@ L_089E111C: AOT_REGCACHE_SYNC_OUT(); return; L_089E1134: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E1150; } @@ -3182,7 +3292,17 @@ L_089E1150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3230,7 +3350,6 @@ L_089E11C0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_6 = (0u | 30u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089E11F8; } @@ -3240,7 +3359,6 @@ L_089E11E8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_6 = (0u | 31u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089E11FC; } @@ -3301,7 +3419,6 @@ L_089E1254: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E1270; } @@ -3323,7 +3440,17 @@ L_089E1270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1288: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3432,7 +3559,17 @@ L_089E13B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E13CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3461,7 +3598,6 @@ L_089E1400: } L_089E1414: aot_gpr_31 = (0x089E141Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E141Cu) goto L_089E141C; AOT_REGCACHE_SYNC_OUT(); return; L_089E141C: @@ -3497,12 +3633,21 @@ L_089E141C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E145C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089E146Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 629u, 0x088635ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E146Cu) goto L_089E146C; AOT_REGCACHE_SYNC_OUT(); return; L_089E146C: @@ -3513,7 +3658,17 @@ L_089E146C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E147C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3571,7 +3726,17 @@ L_089E14D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E14EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3600,7 +3765,6 @@ L_089E1520: } L_089E1534: aot_gpr_31 = (0x089E153Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E153Cu) goto L_089E153C; AOT_REGCACHE_SYNC_OUT(); return; L_089E153C: @@ -3636,7 +3800,17 @@ L_089E153C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E157C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3660,7 +3834,6 @@ L_089E15A0: } L_089E15AC: aot_gpr_31 = (0x089E15B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E15B4u) goto L_089E15B4; AOT_REGCACHE_SYNC_OUT(); return; L_089E15B4: @@ -3682,7 +3855,17 @@ L_089E15C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E15D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2240u << 16u); @@ -3704,7 +3887,17 @@ L_089E1600: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1610: aot_gpr_4 = (0u | 0u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7592), static_cast(aot_gpr_4)); @@ -3713,7 +3906,17 @@ L_089E1610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1620: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u | 0u); @@ -3729,12 +3932,21 @@ L_089E1634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1640: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089E1650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 157u, 0x08890F48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E1650u) goto L_089E1650; AOT_REGCACHE_SYNC_OUT(); return; L_089E1650: @@ -3745,7 +3957,17 @@ L_089E1650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1660: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -3761,7 +3983,17 @@ L_089E1674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1684: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3771,7 +4003,6 @@ L_089E1684: AOT_REGCACHE_SYNC_OUT(); return; L_089E1694: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E16A4; } @@ -3795,7 +4026,17 @@ L_089E16A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E16B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3824,7 +4065,6 @@ L_089E16DC: L_089E16EC: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E1798; } @@ -3834,7 +4074,6 @@ L_089E16F8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(-1)); aot_gpr_5 = (ctx.gpr[17] < static_cast(33) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E1790; } @@ -3846,11 +4085,20 @@ L_089E1708: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[17]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-3320))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1720: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -3885,7 +4133,6 @@ L_089E1740: } L_089E1748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E179C; } @@ -3901,7 +4148,6 @@ L_089E1750: } L_089E1758: aot_gpr_31 = (0x089E1760u); - // nop goto L_089E17B0; L_089E1760: { const bool branch_taken = 0u == 0u; @@ -3933,7 +4179,6 @@ L_089E1778: } L_089E1780: aot_gpr_31 = (0x089E1788u); - // nop goto L_089E18E8; L_089E1788: { const bool branch_taken = 0u == 0u; @@ -3966,22 +4211,29 @@ L_089E179C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E17B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089E17C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 227u, 0x0886180Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E17C0u) goto L_089E17C0; AOT_REGCACHE_SYNC_OUT(); return; L_089E17C0: aot_gpr_31 = (0x089E17C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 228u, 0x08861814u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E17C8u) goto L_089E17C8; AOT_REGCACHE_SYNC_OUT(); return; L_089E17C8: aot_gpr_31 = (0x089E17D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 229u, 0x0886181Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E17D0u) goto L_089E17D0; AOT_REGCACHE_SYNC_OUT(); return; L_089E17D0: @@ -3991,7 +4243,17 @@ L_089E17D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E17DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4004,7 +4266,6 @@ L_089E17DC: AOT_REGCACHE_SYNC_OUT(); return; L_089E17F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E18BC; } @@ -4022,7 +4283,6 @@ L_089E180C: goto L_089E16B4; L_089E1818: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E18B4; } @@ -4035,7 +4295,6 @@ L_089E1820: goto L_089E16B4; L_089E182C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E18AC; } @@ -4049,7 +4308,6 @@ L_089E1834: AOT_REGCACHE_SYNC_OUT(); return; L_089E1840: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E189C; } @@ -4062,7 +4320,6 @@ L_089E1848: goto L_089E16B4; L_089E1854: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E1884; } @@ -4070,12 +4327,10 @@ L_089E1854: } L_089E185C: aot_gpr_31 = (0x089E1864u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 178u, 0x088614ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E1864u) goto L_089E1864; AOT_REGCACHE_SYNC_OUT(); return; L_089E1864: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E18C4; } @@ -4083,12 +4338,10 @@ L_089E1864: } L_089E186C: aot_gpr_31 = (0x089E1874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 228u, 0x08861814u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E1874u) goto L_089E1874; AOT_REGCACHE_SYNC_OUT(); return; L_089E1874: aot_gpr_31 = (0x089E187Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 229u, 0x0886181Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E187Cu) goto L_089E187C; AOT_REGCACHE_SYNC_OUT(); return; L_089E187C: @@ -4101,12 +4354,10 @@ L_089E187C: } L_089E1884: aot_gpr_31 = (0x089E188Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 228u, 0x08861814u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E188Cu) goto L_089E188C; AOT_REGCACHE_SYNC_OUT(); return; L_089E188C: aot_gpr_31 = (0x089E1894u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 229u, 0x0886181Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E1894u) goto L_089E1894; AOT_REGCACHE_SYNC_OUT(); return; L_089E1894: @@ -4119,7 +4370,6 @@ L_089E1894: } L_089E189C: aot_gpr_31 = (0x089E18A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 229u, 0x0886181Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E18A4u) goto L_089E18A4; AOT_REGCACHE_SYNC_OUT(); return; L_089E18A4: @@ -4174,7 +4424,17 @@ L_089E18D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E18E8: aot_gpr_4 = (ctx.gpr[28] + static_cast(-11160)); aot_gpr_5 = (2247u << 16u); @@ -4199,7 +4459,17 @@ L_089E18E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E193C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4244,7 +4514,6 @@ L_089E19A8: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); if (branch_taken) { @@ -4256,9 +4525,7 @@ L_089E19C8: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E19F8; } @@ -4337,7 +4604,17 @@ L_089E1A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4358,7 +4635,6 @@ L_089E1AB4: AOT_REGCACHE_SYNC_OUT(); return; L_089E1ABC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E1ACC; } @@ -4425,7 +4701,6 @@ L_089E1B20: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E1B3C; } @@ -4447,7 +4722,17 @@ L_089E1B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4473,7 +4758,17 @@ L_089E1B7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1B90: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4499,7 +4794,6 @@ L_089E1BD0: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); if (branch_taken) { @@ -4511,9 +4805,7 @@ L_089E1BF0: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E1C20; } @@ -4591,7 +4883,17 @@ L_089E1C88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1CB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4636,7 +4938,6 @@ L_089E1D1C: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); if (branch_taken) { @@ -4648,9 +4949,7 @@ L_089E1D3C: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E1D6C; } @@ -4729,7 +5028,17 @@ L_089E1DD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1E00: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[17]); @@ -4781,7 +5090,6 @@ L_089E1E40: goto L_089E1E80; L_089E1E80: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089E1EEC; } @@ -4789,7 +5097,6 @@ L_089E1E80: } L_089E1E88: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E1EEC; } @@ -4798,7 +5105,6 @@ L_089E1E88: L_089E1E90: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089E1EDC; } @@ -4855,9 +5161,7 @@ L_089E1E9C: ctx.gpr[8] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E1EDC; } @@ -4878,7 +5182,6 @@ L_089E1EDC: } L_089E1EEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E1EF8; } @@ -4941,7 +5244,6 @@ L_089E1F50: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E1F74; } @@ -4965,7 +5267,17 @@ L_089E1F74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E1F94: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4991,7 +5303,6 @@ L_089E1FD4: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); if (branch_taken) { @@ -5003,9 +5314,7 @@ L_089E1FF4: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E2024; } @@ -5083,7 +5392,17 @@ L_089E208C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E20B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -5141,7 +5460,6 @@ L_089E2120: goto L_089E215C; L_089E215C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E21F0; } @@ -5149,7 +5467,6 @@ L_089E215C: } L_089E2164: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089E21F0; } @@ -5158,7 +5475,6 @@ L_089E2164: L_089E216C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E21E0; } @@ -5203,7 +5519,6 @@ L_089E2178: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089E21E0; } @@ -5224,9 +5539,7 @@ L_089E219C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E21E0; } @@ -5235,7 +5548,6 @@ L_089E219C: L_089E21C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E21E0; } @@ -5290,21 +5602,51 @@ L_089E2204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E223C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E2244: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E224C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); @@ -5327,7 +5669,6 @@ L_089E226C: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089E2390; } @@ -5391,9 +5732,7 @@ L_089E22A4: aot_fpr_12 = std::bit_cast(ctx.gpr[7]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E2390; } @@ -5418,11 +5757,20 @@ L_089E2354: goto L_089E2390; L_089E2390: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E2398: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); @@ -5476,7 +5824,6 @@ L_089E23F0: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E2460; } @@ -5544,7 +5891,17 @@ L_089E2464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E2480: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1780)))))); ctx.gpr[2] = (aot_gpr_4 & 2u); @@ -5553,7 +5910,17 @@ L_089E2480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E2490: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -5580,7 +5947,6 @@ L_089E24CC: } L_089E24DC: aot_gpr_31 = (0x089E24E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E24E4u) goto L_089E24E4; AOT_REGCACHE_SYNC_OUT(); return; L_089E24E4: @@ -5668,7 +6034,6 @@ L_089E2578: AOT_REGCACHE_SYNC_OUT(); return; L_089E25A8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E25C0; } @@ -5681,7 +6046,6 @@ L_089E25B0: AOT_REGCACHE_SYNC_OUT(); return; L_089E25B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E25C8; } @@ -5721,9 +6085,7 @@ L_089E25EC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E2618; } @@ -5762,7 +6124,17 @@ L_089E261C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E2654: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5793,7 +6165,6 @@ L_089E2684: L_089E2690: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E26A4; } @@ -5816,7 +6187,17 @@ L_089E26A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E26B8: aot_gpr_6 = (0u | 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(2300)); @@ -5824,7 +6205,6 @@ L_089E26B8: L_089E26C0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089E26E4; } @@ -5853,15 +6233,23 @@ L_089E26E4: goto L_089E26E8; L_089E26E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E26F0: aot_gpr_4 = (aot_gpr_5 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E273C; } @@ -5870,7 +6258,6 @@ L_089E26F0: L_089E26FC: ctx.gpr[1] = (0u + static_cast(4)); { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089E2710; } @@ -5891,7 +6278,6 @@ L_089E2710: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_089E2734; @@ -5910,11 +6296,20 @@ L_089E273C: goto L_089E2740; L_089E2740: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E2748: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5930,7 +6325,6 @@ L_089E2788: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E2814; } @@ -5940,7 +6334,6 @@ L_089E27A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E280C; } @@ -5950,7 +6343,6 @@ L_089E27B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E2804; } @@ -5989,7 +6381,6 @@ L_089E27FC: } L_089E2804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3568; } @@ -5997,7 +6388,6 @@ L_089E2804: } L_089E280C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3568; } @@ -6005,7 +6395,6 @@ L_089E280C: } L_089E2814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3568; } @@ -6023,7 +6412,6 @@ L_089E281C: L_089E2828: aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -6031,7 +6419,6 @@ L_089E2828: } L_089E2834: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3258; } @@ -6047,7 +6434,6 @@ L_089E283C: } L_089E2844: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E2F80; } @@ -6055,7 +6441,6 @@ L_089E2844: } L_089E284C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -6063,7 +6448,6 @@ L_089E284C: } L_089E2854: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E2890; } @@ -6104,7 +6488,6 @@ L_089E2878: } L_089E2880: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3288; } @@ -6112,7 +6495,6 @@ L_089E2880: } L_089E2888: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -6133,7 +6515,6 @@ L_089E28A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E2F78; } @@ -6151,7 +6532,6 @@ L_089E28B8: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_089E2F78; } @@ -6244,7 +6624,6 @@ L_089E299C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x089E29BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E29BCu) goto L_089E29BC; AOT_REGCACHE_SYNC_OUT(); return; L_089E29BC: @@ -6462,7 +6841,6 @@ L_089E2BE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); aot_fpr_22 = aot_fpr_13 + aot_fpr_22; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089E2C04; @@ -6486,7 +6864,6 @@ L_089E2C04: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(200))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E2C74; } @@ -6506,7 +6883,6 @@ L_089E2C4C: goto L_089E2C74; L_089E2C74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E2DF0; } @@ -6544,7 +6920,6 @@ L_089E2CC0: AOT_REGCACHE_SYNC_OUT(); return; L_089E2CD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E2DF0; } @@ -6587,7 +6962,6 @@ L_089E2D30: AOT_REGCACHE_SYNC_OUT(); return; L_089E2D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E2DF0; } @@ -6699,7 +7073,6 @@ L_089E2E44: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E2F78; } @@ -6747,7 +7120,6 @@ L_089E2ECC: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(172), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E2F24; } @@ -6801,7 +7173,6 @@ L_089E2F54: goto L_089E2F78; L_089E2F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -6814,7 +7185,6 @@ L_089E2F80: AOT_REGCACHE_SYNC_OUT(); return; L_089E2F88: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E2FA0; } @@ -6827,7 +7197,6 @@ L_089E2F90: AOT_REGCACHE_SYNC_OUT(); return; L_089E2F98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -6856,7 +7225,6 @@ L_089E2FBC: AOT_REGCACHE_SYNC_OUT(); return; L_089E2FC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3250; } @@ -6866,7 +7234,6 @@ L_089E2FCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); ctx.gpr[18] = (0u | 24u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E305C; } @@ -6876,7 +7243,6 @@ L_089E2FDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6886,7 +7252,6 @@ L_089E2FEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 49u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6896,7 +7261,6 @@ L_089E2FFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6906,7 +7270,6 @@ L_089E300C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6916,7 +7279,6 @@ L_089E301C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6926,7 +7288,6 @@ L_089E302C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6936,7 +7297,6 @@ L_089E303C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E305C; } @@ -6946,7 +7306,6 @@ L_089E304C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E307C; } @@ -6959,7 +7318,6 @@ L_089E305C: AOT_REGCACHE_SYNC_OUT(); return; L_089E3064: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E307C; } @@ -6972,7 +7330,6 @@ L_089E306C: AOT_REGCACHE_SYNC_OUT(); return; L_089E3074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -6981,7 +7338,6 @@ L_089E3074: L_089E307C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1936))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089E30E4; } @@ -6995,7 +7351,6 @@ L_089E3088: aot_gpr_5 = (aot_gpr_6 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(64))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089E30D0; } @@ -7014,7 +7369,6 @@ L_089E30A8: AOT_REGCACHE_SYNC_OUT(); return; L_089E30C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3250; } @@ -7038,7 +7392,6 @@ L_089E30E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3250; } @@ -7048,7 +7401,6 @@ L_089E30F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3250; } @@ -7057,7 +7409,6 @@ L_089E30F4: L_089E3104: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3168; } @@ -7067,7 +7418,6 @@ L_089E3110: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E3168; } @@ -7081,9 +7431,7 @@ L_089E3120: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3250; } @@ -7093,7 +7441,6 @@ L_089E3148: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089E3250; } @@ -7113,7 +7460,6 @@ L_089E3168: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E31AC; } @@ -7122,7 +7468,6 @@ L_089E3168: L_089E3178: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E31AC; } @@ -7132,7 +7477,6 @@ L_089E3184: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089E31AC; } @@ -7147,7 +7491,6 @@ L_089E3194: AOT_REGCACHE_SYNC_OUT(); return; L_089E31A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3250; } @@ -7156,7 +7499,6 @@ L_089E31A4: L_089E31AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E3238; } @@ -7166,7 +7508,6 @@ L_089E31B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7176,7 +7517,6 @@ L_089E31C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 49u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7186,7 +7526,6 @@ L_089E31D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7196,7 +7535,6 @@ L_089E31E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7206,7 +7544,6 @@ L_089E31F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7216,7 +7553,6 @@ L_089E3208: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 44u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7226,7 +7562,6 @@ L_089E3218: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3238; } @@ -7236,7 +7571,6 @@ L_089E3228: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E3248; } @@ -7249,7 +7583,6 @@ L_089E3238: AOT_REGCACHE_SYNC_OUT(); return; L_089E3240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3250; } @@ -7262,7 +7595,6 @@ L_089E3248: AOT_REGCACHE_SYNC_OUT(); return; L_089E3250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7275,7 +7607,6 @@ L_089E3258: AOT_REGCACHE_SYNC_OUT(); return; L_089E3260: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3270; } @@ -7288,7 +7619,6 @@ L_089E3268: AOT_REGCACHE_SYNC_OUT(); return; L_089E3270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7301,7 +7631,6 @@ L_089E3278: AOT_REGCACHE_SYNC_OUT(); return; L_089E3280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7314,7 +7643,6 @@ L_089E3288: AOT_REGCACHE_SYNC_OUT(); return; L_089E3290: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E32A4; } @@ -7328,7 +7656,6 @@ L_089E3298: AOT_REGCACHE_SYNC_OUT(); return; L_089E32A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7341,7 +7668,6 @@ L_089E32AC: AOT_REGCACHE_SYNC_OUT(); return; L_089E32B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E32FC; } @@ -7349,7 +7675,6 @@ L_089E32B4: } L_089E32BC: aot_gpr_31 = (0x089E32C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E32C4u) goto L_089E32C4; AOT_REGCACHE_SYNC_OUT(); return; L_089E32C4: @@ -7383,7 +7708,6 @@ L_089E32F0: AOT_REGCACHE_SYNC_OUT(); return; L_089E32FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7396,7 +7720,6 @@ L_089E3304: AOT_REGCACHE_SYNC_OUT(); return; L_089E330C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7412,7 +7735,6 @@ L_089E3320: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E3488; } @@ -7422,7 +7744,6 @@ L_089E3330: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3488; } @@ -7444,7 +7765,6 @@ L_089E3354: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(1360))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089E3380; } @@ -7455,7 +7775,6 @@ L_089E3368: aot_gpr_6 = (aot_gpr_6 + static_cast(2228)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E3380; } @@ -7478,7 +7797,6 @@ L_089E3380: L_089E3394: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3488; } @@ -7489,7 +7807,6 @@ L_089E33A0: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3488; } @@ -7508,7 +7825,6 @@ L_089E33CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E3474; } @@ -7519,7 +7835,6 @@ L_089E33E0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089E3474; } @@ -7536,7 +7851,6 @@ L_089E3400: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E3428; } @@ -7547,7 +7861,6 @@ L_089E3414: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E3474; } @@ -7555,7 +7868,6 @@ L_089E3414: } L_089E3428: aot_gpr_31 = (0x089E3430u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E3430u) goto L_089E3430; AOT_REGCACHE_SYNC_OUT(); return; L_089E3430: @@ -7594,7 +7906,6 @@ L_089E3474: } L_089E3488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3490; } @@ -7607,7 +7918,6 @@ L_089E3490: AOT_REGCACHE_SYNC_OUT(); return; L_089E3498: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3500; } @@ -7645,7 +7955,6 @@ L_089E34D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E3500; } @@ -7658,7 +7967,6 @@ L_089E34F8: L_089E3500: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089E351C; } @@ -7695,9 +8003,7 @@ L_089E353C: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3568; } @@ -7730,7 +8036,17 @@ L_089E3568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E35A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(164), aot_gpr_16); @@ -7750,7 +8066,6 @@ L_089E35A4: } L_089E35D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E35EC; } @@ -7761,7 +8076,6 @@ L_089E35D8: aot_gpr_6 = (4u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 41u, 0x089E41ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7780,7 +8094,6 @@ L_089E35F4: L_089E35FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 70u, 0x089E4360u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7791,7 +8104,6 @@ L_089E3608: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 70u, 0x089E4360u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7818,7 +8130,6 @@ L_089E362C: } L_089E3638: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E3F9C; } @@ -7831,7 +8142,6 @@ L_089E3640: AOT_REGCACHE_SYNC_OUT(); return; L_089E3648: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3A80; } @@ -7844,7 +8154,6 @@ L_089E3650: AOT_REGCACHE_SYNC_OUT(); return; L_089E3658: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E36CC; } @@ -7861,7 +8170,6 @@ L_089E3668: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E36CC; } @@ -7895,7 +8203,6 @@ L_089E3688: } L_089E36C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E36FC; } @@ -7903,7 +8210,6 @@ L_089E36C4: } L_089E36CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 40u, 0x089E41E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7913,7 +8219,6 @@ L_089E36D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E36FC; } @@ -7928,7 +8233,6 @@ L_089E36E4: AOT_REGCACHE_SYNC_OUT(); return; L_089E36F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -7940,7 +8244,6 @@ L_089E36FC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(22)))))); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089E37C8; } @@ -7950,7 +8253,6 @@ L_089E3714: aot_gpr_4 = (17505u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (16384u << 16u); if (branch_taken) { @@ -7989,7 +8291,6 @@ L_089E3764: AOT_REGCACHE_SYNC_OUT(); return; L_089E3770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8027,7 +8328,6 @@ L_089E37B4: AOT_REGCACHE_SYNC_OUT(); return; L_089E37C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8037,7 +8337,6 @@ L_089E37C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3984; } @@ -8046,7 +8345,6 @@ L_089E37C8: L_089E37D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E390C; } @@ -8064,7 +8362,6 @@ L_089E37E4: AOT_REGCACHE_SYNC_OUT(); return; L_089E3800: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E390C; } @@ -8077,7 +8374,6 @@ L_089E3808: AOT_REGCACHE_SYNC_OUT(); return; L_089E3810: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3858; } @@ -8090,7 +8386,6 @@ L_089E3818: AOT_REGCACHE_SYNC_OUT(); return; L_089E3820: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3858; } @@ -8100,7 +8395,6 @@ L_089E3828: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3858; } @@ -8120,7 +8414,6 @@ L_089E3840: AOT_REGCACHE_SYNC_OUT(); return; L_089E3850: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8133,7 +8426,6 @@ L_089E3858: AOT_REGCACHE_SYNC_OUT(); return; L_089E3860: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E38EC; } @@ -8141,13 +8433,11 @@ L_089E3860: } L_089E3868: aot_gpr_31 = (0x089E3870u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E3870u) goto L_089E3870; AOT_REGCACHE_SYNC_OUT(); return; L_089E3870: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(2312))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089E38EC; } @@ -8178,9 +8468,7 @@ L_089E38AC: aot_gpr_4 = (17505u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E38D8; } @@ -8194,7 +8482,6 @@ L_089E38C4: AOT_REGCACHE_SYNC_OUT(); return; L_089E38D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8208,7 +8495,6 @@ L_089E38D8: AOT_REGCACHE_SYNC_OUT(); return; L_089E38E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8228,7 +8514,6 @@ L_089E38F4: AOT_REGCACHE_SYNC_OUT(); return; L_089E3904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8259,9 +8544,7 @@ L_089E393C: aot_gpr_4 = (17352u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3970; } @@ -8291,7 +8574,6 @@ L_089E3970: AOT_REGCACHE_SYNC_OUT(); return; L_089E397C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8316,7 +8598,6 @@ L_089E3994: goto L_089E2398; L_089E399C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8326,7 +8607,6 @@ L_089E39A4: aot_gpr_4 = (17505u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (16384u << 16u); if (branch_taken) { @@ -8359,7 +8639,6 @@ L_089E39D4: AOT_REGCACHE_SYNC_OUT(); return; L_089E39F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3A54; } @@ -8424,7 +8703,6 @@ L_089E3A74: AOT_REGCACHE_SYNC_OUT(); return; L_089E3A80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 40u, 0x089E41E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8470,7 +8748,6 @@ L_089E3AE8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_6 = (aot_gpr_6 & 512u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089E3B20; } @@ -8478,9 +8755,7 @@ L_089E3AE8: } L_089E3AF8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3B20; } @@ -8495,7 +8770,6 @@ L_089E3B08: AOT_REGCACHE_SYNC_OUT(); return; L_089E3B18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3CD0; } @@ -8503,9 +8777,7 @@ L_089E3B18: } L_089E3B20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3BD0; } @@ -8572,7 +8844,6 @@ L_089E3BBC: AOT_REGCACHE_SYNC_OUT(); return; L_089E3BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3CD0; } @@ -8592,9 +8863,7 @@ L_089E3BD0: } L_089E3BE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3C48; } @@ -8602,7 +8871,6 @@ L_089E3BE8: } L_089E3BF8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E3CD0; } @@ -8615,7 +8883,6 @@ L_089E3C00: AOT_REGCACHE_SYNC_OUT(); return; L_089E3C08: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E3CD0; } @@ -8641,7 +8908,6 @@ L_089E3C20: AOT_REGCACHE_SYNC_OUT(); return; L_089E3C40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3CD0; } @@ -8649,9 +8915,7 @@ L_089E3C40: } L_089E3C48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3CD0; } @@ -8672,7 +8936,6 @@ L_089E3C6C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_13)); goto L_089E3C98; @@ -8704,7 +8967,6 @@ L_089E3C98: AOT_REGCACHE_SYNC_OUT(); return; L_089E3CD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 40u, 0x089E41E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8713,7 +8975,6 @@ L_089E3CD0: L_089E3CD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(692))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E3F94; } @@ -8763,9 +9024,7 @@ L_089E3D30: L_089E3D40: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3D6C; } @@ -8780,7 +9039,6 @@ L_089E3D54: AOT_REGCACHE_SYNC_OUT(); return; L_089E3D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3F94; } @@ -8792,7 +9050,6 @@ L_089E3D6C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089E3F48; } @@ -8805,7 +9062,6 @@ L_089E3D84: AOT_REGCACHE_SYNC_OUT(); return; L_089E3D8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3DA8; } @@ -8816,7 +9072,6 @@ L_089E3D94: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089E3F48; } @@ -8839,9 +9094,7 @@ L_089E3DB8: aot_gpr_5 = (16840u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3F0C; } @@ -8854,7 +9107,6 @@ L_089E3DD0: AOT_REGCACHE_SYNC_OUT(); return; L_089E3DD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E3EDC; } @@ -8871,7 +9123,6 @@ L_089E3DE8: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E3EDC; } @@ -8932,9 +9183,7 @@ L_089E3E08: aot_fpr_12 = aot_fpr_12 + ctx.fpr[14]; aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3EDC; } @@ -8945,7 +9194,6 @@ L_089E3ED8: goto L_089E3EDC; L_089E3EDC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089E3F04; } @@ -8964,7 +9212,6 @@ L_089E3EE4: AOT_REGCACHE_SYNC_OUT(); return; L_089E3F04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3F94; } @@ -8994,7 +9241,6 @@ L_089E3F34: AOT_REGCACHE_SYNC_OUT(); return; L_089E3F40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E3F94; } @@ -9004,9 +9250,7 @@ L_089E3F48: aot_gpr_5 = (16840u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E3F94; } @@ -9036,7 +9280,6 @@ L_089E3F88: AOT_REGCACHE_SYNC_OUT(); return; L_089E3F94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 40u, 0x089E41E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9049,7 +9292,6 @@ L_089E3F9C: AOT_REGCACHE_SYNC_OUT(); return; L_089E3FA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 40u, 0x089E41E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9066,7 +9308,6 @@ L_089E3FB4: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 38u, 0x089E41CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0120.cpp b/profiles/vcs/generated/generated_unit_0120.cpp index 52e94a5..6ceda5b 100644 --- a/profiles/vcs/generated/generated_unit_0120.cpp +++ b/profiles/vcs/generated/generated_unit_0120.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0120[4093] = { - 1, 0, 0, 2, 3, 0, 0, 4, 0, 0, 5, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 10, 0, 0, 0, 0, - 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 0, - 0, 20, 0, 21, 0, 0, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 0, 27, 0, 0, 0, 28, 0, 29, 0, 30, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 32, 0, 33, 0, 34, 0, 0, 35, 0, 36, 0, 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 41, 0, 0, 42, 0, - 0, 43, 0, 44, 0, 0, 45, 0, 46, 0, 47, 0, 0, 0, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 57, 0, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 64, - 0, 65, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 78, - 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 90, 0, 91, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, - 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, - 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 109, 0, 0, 110, 0, 0, 111, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 0, 116, 0, 0, - 117, 0, 118, 0, 119, 0, 0, 120, 0, 0, 121, 0, 0, 122, 0, 0, 123, 0, 0, 0, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, - 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 134, 0, 135, 0, 136, 0, - 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 142, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 144, 0, 0, 145, 0, 146, 0, 147, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 150, 0, 151, 0, 0, 152, 0, 0, 153, 0, 0, - 0, 0, 154, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, - 0, 162, 0, 163, 0, 164, 0, 0, 0, 165, 0, 166, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, - 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 176, 0, 0, 0, 177, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, - 0, 0, 182, 0, 0, 0, 183, 0, 0, 0, 184, 185, 0, 0, 0, 0, 186, 0, 187, 188, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, - 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, 0, 0, 0, 203, 0, 204, 0, 0, 205, 0, 0, 0, 0, 206, - 0, 207, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 212, 0, 0, 0, 0, 213, 0, 214, 215, 0, - 216, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, 222, 0, 0, 223, 0, - 224, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 0, 230, - 0, 231, 0, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 235, 0, 0, 0, 0, 236, 0, 0, 237, 0, 238, 0, 0, 0, 0, 239, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 254, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 257, 0, 0, 258, 0, 259, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, - 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 265, 0, 0, 0, 266, 0, 0, - 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, - 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, - 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, - 279, 0, 0, 280, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 284, 0, 0, 0, 0, 0, 0, - 0, 285, 0, 0, 0, 0, 0, 286, 287, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, - 291, 0, 292, 0, 293, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 296, 297, 0, 0, 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 303, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 308, 0, 0, 309, 0, - 0, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, 0, 317, - 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, - 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, - 0, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 0, 336, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 340, 0, 0, 0, 341, - 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, - 0, 350, 0, 351, 352, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 360, - 361, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 377, 0, 378, 0, 0, 0, 379, 0, 380, 0, 0, 0, - 0, 0, 381, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, - 386, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, 392, 0, 0, 0, 393, - 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, - 401, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 408, 409, 0, 410, 0, 0, 0, 0, 411, 0, 0, 0, 0, 412, - 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, 0, 0, - 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 422, 423, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 426, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, 0, 434, - 0, 0, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 0, 441, 0, 442, 0, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, - 446, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 449, 450, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 456, 457, 0, 458, 0, 0, 459, 0, 0, 460, 0, 0, 461, 0, - 0, 462, 0, 0, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, - 471, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 474, 0, 0, 475, 0, 0, 476, 0, 477, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, - 0, 0, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 485, - 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 489, 0, 0, 0, 0, 0, 0, 0, 490, 491, 0, 0, 492, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, 495, 0, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 498, 0, 0, 0, 0, 0, 0, - 0, 499, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 505, 0, 0, 0, 506, 0, 507, - 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 516, 0, 0, 517, 0, 0, 518, 519, 0, 0, 0, 0, 520, 0, 0, 521, 0, 522, 0, - 0, 0, 523, 0, 0, 524, 0, 525, 0, 526, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 529, 0, 0, 0, 0, 530, 0, - 0, 531, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 537, 0, 538, 0, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 544, 0, 545, 0, 546, 0, 547, 548, 0, 549, 0, 0, - 0, 550, 0, 0, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 555, 0, 556, 0, 557, 0, 0, 558, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, - 561, 0, 0, 562, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, 566, 0, 0, 0, - 567, 0, 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 571, 0, 0, 0, 0, 572, 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, - 0, 582, 0, 583, 584, 585, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, - 589, 0, 0, 0, 0, 590, 0, 591, 0, 0, 592, 0, 0, 593, 0, 0, 0, 0, 594, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 0, 0, 602, 0, 0, 603, 0, 604, 0, 605, - 0, 606, 607, 0, 608, 0, 0, 0, 609, 0, 610, 0, 0, 611, 612, 0, 613, 0, 0, 614, 0, 615, 0, 616, 617, 0, 618, 0, 0, 0, 0, 0, - 0, 0, 0, 619, 620, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 625, 626, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 632, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 635, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, - 0, 638, 0, 0, 0, 639, 0, 0, 0, 640, 0, 641, 0, 0, 0, 0, 0, 0, 0, 642, 0, 643, 644, 0, 645, 0, 0, 0, 0, 0, 0, 0, - 646, 0, 0, 647, 0, 0, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 653, 0, 654, 0, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 657, 658, - 0, 659, 0, 0, 0, 0, 660, 0, 0, 661, 0, 0, 662, 0, 0, 0, 0, 0, 0, 663, 0, 0, 664, 665, 0, 666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 673, 0, 674, 0, - 675, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 680, 0, - 681, 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 0, 685, 686, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 688, 0, 0, 689, 0, 0, 0, 690, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 694, 0, 0, 695, 0, 0, 0, - 696, 0, 697, 698, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 700, 0, 701, 0, 0, 0, 702, 0, 703, 704, 0, 705, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 709, 0, 710, 0, 0, - 0, 0, 0, 0, 0, 711, 0, 712, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 715, 716, 0, 717, 0, - 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 720, 721, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 725, 0, 726, 0, 0, 0, 727, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 729, 0, 730, 0, 0, 731, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, - 735, 0, 0, 0, 0, 0, 736, 0, 0, 737, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 739, 0, 740, 0, 0, 0, 0, 0, 0, 741, 0, 0, 742, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 744, 0, 0, 745, 0, 746, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 749, - 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 752, 0, 753, 0, 754, 0, 755, 0, 756, 0, 757, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 759, 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, 0, 762, 0, 763, 0, 0, 0, 0, - 0, 0, 764, 0, 0, 765, 0, 766, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, - 771, 0, 0, 0, 0, 0, 0, 772, 0, 773, 774, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 777, 0, - 0, 0, 778, 0, 0, 0, 0, 0, 779, 0, 780, 0, 0, 0, 0, 781, 0, 782, 0, 0, 783, 0, 784, 785, 0, 786, 0, 0, 0, 787, 0, 788, - 0, 0, 0, 0, 0, 0, 789, 0, 790, 0, 0, 0, 0, 791, 0, 0, 792, 793, 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 0, 0, 0, 0, - 798, 0, 0, 799, 800, 0, 0, 0, 0, 801, 0, 0, 0, 802, 0, 0, 0, 803, 0, 0, 804, 0, 805, 0, 806, 807, 0, 808, 0, 809, 0, 0, - 0, 0, 0, 810, 0, 0, 0, 811, 0, 0, 812, 0, 813, 0, 814, 0, 815, 0, 0, 0, 0, 0, 816, 0, 0, 817, 818, 0, 819, 0, 0, 820, - 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 826, 0, - 827, 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 829, 0, 830, 0, 0, 831, 0, 832, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 835, 0, 0, 0, 0, 0, 0, 836, 0, 0, 837, 0, 838, 0, 839, 0, 840, 841, 0, 842, 0, 843, 0, 0, 0, 0, - 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 849, 0, 0, 850, 0, 0, 0, 851, 0, 0, 852, 0, 0, 0, - 0, 0, 0, 853, 0, 854, 0, 855, 0, 0, 0, 0, 856, 857, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, 0, 0, 0, 859, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0120[64] = { + 0x2AA028140A411499ull, 0x4A2A29504544AA8Aull, 0x90554A1084AA854Aull, 0x8AA9000041208112ull, + 0x00002AA000012910ull, 0x90042401090042A2ull, 0x2552492084200110ull, 0x55044002AAA12495ull, + 0x0000800091014020ull, 0xAAA0004424A84548ull, 0x4800042400022A2Aull, 0x0400610044400008ull, + 0x08291048442D0C44ull, 0x6862202284A14A00ull, 0x8528002148824221ull, 0x2000200085210A12ull, + 0x0441104400000000ull, 0x4200190000000090ull, 0x2241001010814A40ull, 0x0000000000000001ull, + 0x0008480102100000ull, 0x0840000000000000ull, 0x0308001900900002ull, 0x0121849542001182ull, + 0x4811024200120010ull, 0x221122088A240884ull, 0x4800812040022010ull, 0x512250048A244A00ull, + 0xA04009020000811Aull, 0x81141410022A0829ull, 0x0200428414508000ull, 0x05108A4088442109ull, + 0x842C202008204101ull, 0x0248020810404040ull, 0x8842080020205843ull, 0x0102610510A52AA8ull, + 0x022A4922492D2010ull, 0xA0820240210A4A81ull, 0x025031004C062008ull, 0x44842100A2222222ull, + 0x428022A452192480ull, 0x2D502A8114044A82ull, 0x1480002914254AA2ull, 0x01448A1000040209ull, + 0x1000093A02041008ull, 0x01010000200C24A1ull, 0x05A96516A9044800ull, 0x0908308200200118ull, + 0x01680A2204A0A4A0ull, 0x02C81242C245AA89ull, 0x4504004154450840ull, 0x12A041120080C891ull, + 0x2C01400002D1420Dull, 0x0410D002582020A0ull, 0x0208212801114800ull, 0x0004240A00000641ull, + 0xAAA04008A0001148ull, 0x028802A40A40A200ull, 0xA2D2850440420681ull, 0x2B522219054B2140ull, + 0x401140A096415488ull, 0x0AD5204004452A01ull, 0x4000800002004001ull, 0x100830A812240000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0120[64] = { + 1u, 20u, 43u, 65u, 79u, 89u, 102u, 117u, 137u, 144u, 162u, 174u, 182u, 199u, 216u, 231u, + 242u, 248u, 255u, 267u, 268u, 274u, 276u, 285u, 300u, 310u, 325u, 334u, 350u, 361u, 376u, 386u, + 401u, 413u, 422u, 435u, 453u, 471u, 486u, 499u, 514u, 531u, 550u, 567u, 578u, 589u, 599u, 619u, + 630u, 646u, 667u, 681u, 696u, 711u, 724u, 735u, 744u, 758u, 771u, 789u, 810u, 827u, 844u, 849u, }; void recomp_unit_0120_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0120_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089E4000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0120[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0120[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0120[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089E4000; @@ -1033,7 +940,6 @@ LOCAL_DISPATCH: L_089E4000: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E406C; } @@ -1045,7 +951,6 @@ L_089E400C: L_089E4010: aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E406C; } @@ -1054,7 +959,6 @@ L_089E4010: L_089E401C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E406C; } @@ -1089,7 +993,6 @@ L_089E4058: AOT_REGCACHE_SYNC_OUT(); return; L_089E4064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1107,7 +1010,6 @@ L_089E406C: AOT_REGCACHE_SYNC_OUT(); return; L_089E4088: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E40B4; } @@ -1125,7 +1027,6 @@ L_089E4090: AOT_REGCACHE_SYNC_OUT(); return; L_089E40AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1139,7 +1040,6 @@ L_089E40B4: aot_gpr_4 = (aot_gpr_6 << (aot_gpr_4 & 31u)); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1152,7 +1052,6 @@ L_089E40D4: AOT_REGCACHE_SYNC_OUT(); return; L_089E40DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4124; } @@ -1165,7 +1064,6 @@ L_089E40E4: AOT_REGCACHE_SYNC_OUT(); return; L_089E40EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4124; } @@ -1175,7 +1073,6 @@ L_089E40F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4124; } @@ -1195,7 +1092,6 @@ L_089E410C: AOT_REGCACHE_SYNC_OUT(); return; L_089E411C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1208,7 +1104,6 @@ L_089E4124: AOT_REGCACHE_SYNC_OUT(); return; L_089E412C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E41A0; } @@ -1216,13 +1111,11 @@ L_089E412C: } L_089E4134: aot_gpr_31 = (0x089E413Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E413Cu) goto L_089E413C; AOT_REGCACHE_SYNC_OUT(); return; L_089E413C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(2312))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089E41A0; } @@ -1240,7 +1133,6 @@ L_089E4148: } L_089E4158: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E4198; } @@ -1269,7 +1161,6 @@ L_089E4178: AOT_REGCACHE_SYNC_OUT(); return; L_089E4190: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1277,7 +1168,6 @@ L_089E4190: } L_089E4198: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1286,7 +1176,6 @@ L_089E4198: L_089E41A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1306,7 +1195,6 @@ L_089E41B4: AOT_REGCACHE_SYNC_OUT(); return; L_089E41C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E41E4; } @@ -1326,7 +1214,6 @@ L_089E41D4: AOT_REGCACHE_SYNC_OUT(); return; L_089E41E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1335,7 +1222,6 @@ L_089E41E4: L_089E41EC: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E4360; } @@ -1352,7 +1238,6 @@ L_089E41F8: } L_089E4204: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E4228; } @@ -1361,7 +1246,6 @@ L_089E4204: L_089E420C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4228; } @@ -1369,12 +1253,10 @@ L_089E420C: } L_089E4218: aot_gpr_31 = (0x089E4220u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E4220u) goto L_089E4220; AOT_REGCACHE_SYNC_OUT(); return; L_089E4220: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E4244; } @@ -1385,7 +1267,6 @@ L_089E4228: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E424C; } @@ -1393,7 +1274,6 @@ L_089E4228: } L_089E423C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1401,7 +1281,6 @@ L_089E423C: } L_089E4244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1420,7 +1299,6 @@ L_089E4254: L_089E425C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1431,7 +1309,6 @@ L_089E4268: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1453,7 +1330,6 @@ L_089E4290: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1461,7 +1337,6 @@ L_089E4290: } L_089E42A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E42C0; } @@ -1470,7 +1345,6 @@ L_089E42A4: L_089E42AC: aot_gpr_5 = (128u << 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E4304; } @@ -1478,7 +1352,6 @@ L_089E42AC: } L_089E42B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1491,7 +1364,6 @@ L_089E42C0: AOT_REGCACHE_SYNC_OUT(); return; L_089E42C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E42FC; } @@ -1519,7 +1391,6 @@ L_089E42F0: AOT_REGCACHE_SYNC_OUT(); return; L_089E42FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4360; } @@ -1576,7 +1447,17 @@ L_089E4360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E4378: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2288))); @@ -1592,7 +1473,6 @@ L_089E4378: L_089E43C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(2297))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E43DC; } @@ -1600,7 +1480,6 @@ L_089E43C0: } L_089E43CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E43FC; } @@ -1608,7 +1487,6 @@ L_089E43CC: } L_089E43D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E487C; } @@ -1621,7 +1499,6 @@ L_089E43DC: AOT_REGCACHE_SYNC_OUT(); return; L_089E43E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E43FC; } @@ -1640,7 +1517,6 @@ L_089E43FC: aot_gpr_5 = (2u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E44AC; } @@ -1650,7 +1526,6 @@ L_089E4410: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2292))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E4504; } @@ -1664,7 +1539,6 @@ L_089E4420: AOT_REGCACHE_SYNC_OUT(); return; L_089E442C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E44A4; } @@ -1716,7 +1590,6 @@ L_089E4494: } L_089E449C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E487C; } @@ -1724,7 +1597,6 @@ L_089E449C: } L_089E44A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E487C; } @@ -1732,7 +1604,6 @@ L_089E44A4: } L_089E44AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E487C; } @@ -1932,7 +1803,6 @@ L_089E467C: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089E47F8; } @@ -1950,7 +1820,6 @@ L_089E4694: L_089E46A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -1959,7 +1828,6 @@ L_089E46A0: L_089E46AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089E46C4; } @@ -1968,7 +1836,6 @@ L_089E46AC: L_089E46B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089E47F0; } @@ -1982,7 +1849,6 @@ L_089E46C4: AOT_REGCACHE_SYNC_OUT(); return; L_089E46D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -1995,7 +1861,6 @@ L_089E46D8: AOT_REGCACHE_SYNC_OUT(); return; L_089E46E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2004,7 +1869,6 @@ L_089E46E0: L_089E46E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(2296))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E4710; } @@ -2013,7 +1877,6 @@ L_089E46E8: L_089E46F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2026,7 +1889,6 @@ L_089E4700: AOT_REGCACHE_SYNC_OUT(); return; L_089E4708: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2035,7 +1897,6 @@ L_089E4708: L_089E4710: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2044,7 +1905,6 @@ L_089E4710: L_089E471C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(563))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2053,7 +1913,6 @@ L_089E471C: L_089E4728: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(564))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2062,7 +1921,6 @@ L_089E4728: L_089E4734: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(596))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2071,9 +1929,7 @@ L_089E4734: L_089E4740: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E47F0; } @@ -2086,7 +1942,6 @@ L_089E4754: AOT_REGCACHE_SYNC_OUT(); return; L_089E475C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2099,7 +1954,6 @@ L_089E4764: AOT_REGCACHE_SYNC_OUT(); return; L_089E476C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2112,7 +1966,6 @@ L_089E4774: AOT_REGCACHE_SYNC_OUT(); return; L_089E477C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2156,9 +2009,7 @@ L_089E4784: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E47F0; } @@ -2166,9 +2017,7 @@ L_089E4784: } L_089E47B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E47F0; } @@ -2187,7 +2036,6 @@ L_089E47C8: AOT_REGCACHE_SYNC_OUT(); return; L_089E47E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E47F0; } @@ -2199,7 +2047,6 @@ L_089E47E8: goto L_089E47F0; L_089E47F0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089E4694; } @@ -2235,7 +2082,6 @@ L_089E4814: } L_089E4838: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_089E487C; } @@ -2288,7 +2134,17 @@ L_089E487C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E48BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_gpr_5 = (15948u << 16u); @@ -2309,7 +2165,6 @@ L_089E48BC: L_089E490C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(2364))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4A0C; } @@ -2322,7 +2177,6 @@ L_089E4918: AOT_REGCACHE_SYNC_OUT(); return; L_089E4920: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E4A04; } @@ -2332,7 +2186,6 @@ L_089E4928: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8980))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2368))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E4A14; } @@ -2356,7 +2209,6 @@ L_089E494C: AOT_REGCACHE_SYNC_OUT(); return; L_089E4954: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E49F4; } @@ -2365,7 +2217,6 @@ L_089E4954: L_089E495C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E49EC; } @@ -2374,7 +2225,6 @@ L_089E495C: L_089E4968: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E49E4; } @@ -2385,7 +2235,6 @@ L_089E4974: aot_gpr_5 = (2u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E49E4; } @@ -2432,7 +2281,6 @@ L_089E49D4: } L_089E49DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2440,7 +2288,6 @@ L_089E49DC: } L_089E49E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2448,7 +2295,6 @@ L_089E49E4: } L_089E49EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2456,7 +2302,6 @@ L_089E49EC: } L_089E49F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2464,7 +2309,6 @@ L_089E49F4: } L_089E49FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2472,7 +2316,6 @@ L_089E49FC: } L_089E4A04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2480,7 +2323,6 @@ L_089E4A04: } L_089E4A0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -2648,7 +2490,6 @@ L_089E4BA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E4F40; } @@ -2669,7 +2510,6 @@ L_089E4BB8: ctx.gpr[22] = (ctx.gpr[22] + aot_gpr_4); ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089E4D84; } @@ -2703,7 +2543,6 @@ L_089E4C18: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(76))); aot_gpr_6 = (aot_gpr_6 & 2048u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089E4C2C; } @@ -2725,7 +2564,6 @@ L_089E4C2C: } L_089E4C40: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E4C4C; } @@ -2736,7 +2574,6 @@ L_089E4C48: goto L_089E4C4C; L_089E4C4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4D7C; } @@ -2764,7 +2601,6 @@ L_089E4C78: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4D7C; } @@ -2795,7 +2631,6 @@ L_089E4CB0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(20))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E4D68; } @@ -2809,7 +2644,6 @@ L_089E4CC0: AOT_REGCACHE_SYNC_OUT(); return; L_089E4CCC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4D68; } @@ -2863,7 +2697,6 @@ L_089E4CEC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(148))); if (branch_taken) { @@ -2873,7 +2706,6 @@ L_089E4CEC: } L_089E4D24: aot_gpr_31 = (0x089E4D2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E4D2Cu) goto L_089E4D2C; AOT_REGCACHE_SYNC_OUT(); return; L_089E4D2C: @@ -2884,7 +2716,6 @@ L_089E4D2C: AOT_REGCACHE_SYNC_OUT(); return; L_089E4D38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4D68; } @@ -2900,7 +2731,6 @@ L_089E4D40: AOT_REGCACHE_SYNC_OUT(); return; L_089E4D54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4D68; } @@ -2916,7 +2746,6 @@ L_089E4D68: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E4C8C; } @@ -2924,7 +2753,6 @@ L_089E4D68: } L_089E4D7C: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089E4BE8; } @@ -2934,7 +2762,6 @@ L_089E4D84: aot_gpr_4 = (ctx.gpr[22] + static_cast(12)); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089E4F2C; } @@ -2968,7 +2795,6 @@ L_089E4DC4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(76))); aot_gpr_6 = (aot_gpr_6 & 2048u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089E4DD8; } @@ -2990,7 +2816,6 @@ L_089E4DD8: } L_089E4DEC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E4DF8; } @@ -3001,7 +2826,6 @@ L_089E4DF4: goto L_089E4DF8; L_089E4DF8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4F24; } @@ -3029,7 +2853,6 @@ L_089E4E24: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4F24; } @@ -3060,7 +2883,6 @@ L_089E4E5C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(20))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E4F10; } @@ -3074,7 +2896,6 @@ L_089E4E6C: AOT_REGCACHE_SYNC_OUT(); return; L_089E4E78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4F10; } @@ -3127,9 +2948,7 @@ L_089E4E94: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E4F10; } @@ -3137,7 +2956,6 @@ L_089E4E94: } L_089E4ECC: aot_gpr_31 = (0x089E4ED4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E4ED4u) goto L_089E4ED4; AOT_REGCACHE_SYNC_OUT(); return; L_089E4ED4: @@ -3148,7 +2966,6 @@ L_089E4ED4: AOT_REGCACHE_SYNC_OUT(); return; L_089E4EE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4F10; } @@ -3164,7 +2981,6 @@ L_089E4EE8: AOT_REGCACHE_SYNC_OUT(); return; L_089E4EFC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E4F10; } @@ -3180,7 +2996,6 @@ L_089E4F10: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E4E38; } @@ -3188,7 +3003,6 @@ L_089E4F10: } L_089E4F24: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089E4D94; } @@ -3210,7 +3024,6 @@ L_089E4F40: ctx.gpr[30] = (ctx.gpr[30] + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4BA0; } @@ -3219,7 +3032,6 @@ L_089E4F40: L_089E4F54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E4F7C; } @@ -3259,7 +3071,17 @@ L_089E4F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E4FB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (std::bit_cast(aot_fpr_12)); @@ -3280,7 +3102,17 @@ L_089E4FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E4FF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_31); @@ -3314,9 +3146,7 @@ L_089E4FF4: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14), std::bit_cast(ctx.fpr[15])}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E5098; } @@ -3332,9 +3162,7 @@ L_089E5098: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E50C0; } @@ -3350,9 +3178,7 @@ L_089E50C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E50E8; } @@ -3384,7 +3210,17 @@ L_089E5110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E511C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3411,9 +3247,7 @@ L_089E511C: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E51B0; } @@ -3463,7 +3297,6 @@ L_089E51F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E525C; } @@ -3477,7 +3310,6 @@ L_089E5218: AOT_REGCACHE_SYNC_OUT(); return; L_089E5224: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089E525C; } @@ -3491,7 +3323,6 @@ L_089E522C: AOT_REGCACHE_SYNC_OUT(); return; L_089E5238: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089E525C; } @@ -3535,7 +3366,17 @@ L_089E5270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5290: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3687,7 +3528,17 @@ L_089E5464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5480: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3804,7 +3655,17 @@ L_089E55EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5604: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -3833,7 +3694,6 @@ L_089E565C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.gpr[21] = (aot_gpr_29 + static_cast(32)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (aot_gpr_29 + static_cast(36)); if (branch_taken) { @@ -3890,7 +3750,6 @@ L_089E56E4: ctx.gpr[9] = (ctx.gpr[9] < static_cast(1) ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089E571C; } @@ -3902,7 +3761,6 @@ L_089E5704: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089E5720; } @@ -3959,7 +3817,6 @@ L_089E5780: AOT_REGCACHE_SYNC_OUT(); return; L_089E5788: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E57C0; } @@ -3968,7 +3825,6 @@ L_089E5788: L_089E5790: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E57C0; } @@ -3977,7 +3833,6 @@ L_089E5790: L_089E579C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E57C0; } @@ -3988,7 +3843,6 @@ L_089E57A8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E57C0; } @@ -4033,7 +3887,17 @@ L_089E57E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5810: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4109,7 +3973,17 @@ L_089E58A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E58C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4122,7 +3996,6 @@ L_089E58D0: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_089E58F8; @@ -4152,7 +4025,17 @@ L_089E5908: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E591C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4165,7 +4048,6 @@ L_089E592C: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_089E5954; @@ -4188,7 +4070,6 @@ L_089E5954: goto L_089E5964; L_089E5964: aot_gpr_31 = (0x089E596Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 571u, 0x08B42624u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E596Cu) goto L_089E596C; AOT_REGCACHE_SYNC_OUT(); return; L_089E596C: @@ -4199,7 +4080,17 @@ L_089E596C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E597C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4217,7 +4108,17 @@ L_089E598C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E59A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4239,7 +4140,17 @@ L_089E59C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E59D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4256,7 +4167,17 @@ L_089E59E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E59F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -4287,7 +4208,17 @@ L_089E5A34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5A44: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4343,7 +4274,17 @@ L_089E5AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5ABC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -4401,7 +4342,6 @@ L_089E5B38: L_089E5B48: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089E5B6C; } @@ -4473,7 +4413,6 @@ L_089E5BC4: L_089E5BD4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089E5BF8; } @@ -4503,7 +4442,6 @@ L_089E5BF8: goto L_089E5C04; L_089E5C04: aot_gpr_31 = (0x089E5C0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E5C0Cu) goto L_089E5C0C; AOT_REGCACHE_SYNC_OUT(); return; L_089E5C0C: @@ -4530,7 +4468,17 @@ L_089E5C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5C3C: aot_gpr_4 = (0u | 46u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9664), static_cast(aot_gpr_4)); @@ -4553,7 +4501,17 @@ L_089E5C3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5C84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -4570,7 +4528,17 @@ L_089E5CA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5CAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -4612,7 +4580,6 @@ L_089E5CFC: L_089E5D00: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089E5D14; } @@ -4635,7 +4602,17 @@ L_089E5D14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4647,7 +4624,6 @@ L_089E5D2C: AOT_REGCACHE_SYNC_OUT(); return; L_089E5D44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E5D54; } @@ -4665,7 +4641,17 @@ L_089E5D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5D64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4713,7 +4699,6 @@ L_089E5DB0: } L_089E5DC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E5DE0; } @@ -4739,7 +4724,17 @@ L_089E5DE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4813,7 +4808,6 @@ L_089E5E88: } L_089E5E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E5EB8; } @@ -4844,7 +4838,17 @@ L_089E5EB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5EE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4857,7 +4861,6 @@ L_089E5EE4: L_089E5F00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_089E5F20; } @@ -4882,7 +4885,17 @@ L_089E5F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5F34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_29 | 0u); @@ -4898,7 +4911,17 @@ L_089E5F48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5F58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_29 | 0u); @@ -4914,7 +4937,17 @@ L_089E5F6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E5F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4925,7 +4958,6 @@ L_089E5F7C: L_089E5F98: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089E5FAC; } @@ -4962,7 +4994,6 @@ L_089E5FD0: AOT_REGCACHE_SYNC_OUT(); return; L_089E5FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E5FE8; } @@ -4981,7 +5012,17 @@ L_089E5FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6000: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5022,7 +5063,17 @@ L_089E6054: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E606C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5104,7 +5155,17 @@ L_089E6118: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6138: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5145,7 +5206,17 @@ L_089E618C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E61A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5168,7 +5239,6 @@ L_089E61CC: L_089E61D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(68))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_089E6204; } @@ -5240,7 +5310,17 @@ L_089E6254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6274: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5295,7 +5375,6 @@ L_089E62FC: } L_089E630C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E635C; } @@ -5319,7 +5398,6 @@ L_089E631C: } L_089E6324: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089E6348; } @@ -5327,7 +5405,6 @@ L_089E6324: } L_089E632C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E635C; } @@ -5440,7 +5517,17 @@ L_089E63E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5525,7 +5612,6 @@ L_089E64C4: goto L_089E7184; L_089E64CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E64E4; } @@ -5551,7 +5637,17 @@ L_089E64E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6500: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5563,7 +5659,6 @@ L_089E6500: goto L_089E651C; L_089E651C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E6544; } @@ -5576,7 +5671,6 @@ L_089E6524: L_089E652C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_089E6544; } @@ -5593,7 +5687,6 @@ L_089E6538: } L_089E6544: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E6560; } @@ -5618,7 +5711,17 @@ L_089E6560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6574: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5633,7 +5736,6 @@ L_089E6574: L_089E6598: aot_gpr_4 = (ctx.gpr[2] & 255u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089E65C4; } @@ -5662,7 +5764,17 @@ L_089E65C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E65DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5678,7 +5790,6 @@ L_089E65FC: aot_gpr_4 = (ctx.gpr[2] & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 81 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089E666C; } @@ -5729,7 +5840,6 @@ L_089E6668: L_089E666C: aot_gpr_5 = (static_cast(aot_gpr_4) < 80 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E66D0; } @@ -5775,7 +5885,6 @@ L_089E66B4: goto L_089E77C8; L_089E66D0: aot_gpr_31 = (0x089E66D8u); - // nop goto L_089E6870; L_089E66D8: ctx.gpr[17] = (ctx.gpr[2] | 0u); @@ -5847,7 +5956,6 @@ L_089E677C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E67B4; } @@ -5872,7 +5980,17 @@ L_089E67B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E67C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5893,7 +6011,17 @@ L_089E67E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E67F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -5912,7 +6040,6 @@ L_089E67F8: L_089E681C: ctx.gpr[9] = (0u | 61u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089E6834; } @@ -5930,7 +6057,6 @@ L_089E6828: L_089E6834: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-10992)))))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089E684C; } @@ -5961,19 +6087,38 @@ L_089E6864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6870: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6878: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089E689C; } @@ -5982,7 +6127,6 @@ L_089E6878: L_089E6888: aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089E68A4; } @@ -6024,11 +6168,20 @@ L_089E68B4: goto L_089E68DC; L_089E68DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E68E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6039,7 +6192,6 @@ L_089E68E4: L_089E68F8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089E6924; } @@ -6059,7 +6211,6 @@ L_089E6904: } L_089E691C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E6938; } @@ -6086,7 +6237,17 @@ L_089E6938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6948: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6109,7 +6270,6 @@ L_089E6970: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); ctx.gpr[17] = (ctx.gpr[17] + static_cast(-24)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_089E6968; } @@ -6129,10 +6289,19 @@ L_089E6980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E699C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E69AC; } @@ -6140,7 +6309,6 @@ L_089E699C: } L_089E69A4: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089E69B4; } @@ -6161,34 +6329,73 @@ L_089E69B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E69D0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(60))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E69D8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E69E0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E69E8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); goto L_089E69EC; L_089E69EC: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_089E6A24; } @@ -6198,7 +6405,6 @@ L_089E69F4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.gpr[8] = (ctx.gpr[8] < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089E6A24; } @@ -6228,7 +6434,6 @@ L_089E6A1C: } L_089E6A24: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_089E6A38; } @@ -6237,7 +6442,6 @@ L_089E6A24: L_089E6A2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_089E6A40; } @@ -6277,11 +6481,20 @@ L_089E6A54: goto L_089E6A68; L_089E6A68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6A70: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & 1u); @@ -6299,11 +6512,20 @@ L_089E6A80: goto L_089E6A8C; L_089E6A8C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6327,7 +6549,6 @@ L_089E6A94: L_089E6ADC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089E6B24; } @@ -6347,7 +6568,6 @@ L_089E6AF0: L_089E6B00: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089E6B24; } @@ -6378,7 +6598,17 @@ L_089E6B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6424,7 +6654,6 @@ L_089E6BAC: L_089E6BBC: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089E6BD8; } @@ -6475,7 +6704,17 @@ L_089E6C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6C30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -6540,7 +6779,17 @@ L_089E6CA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6CAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[22]); @@ -6579,7 +6828,6 @@ L_089E6D00: AOT_REGCACHE_SYNC_OUT(); return; L_089E6D14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E6D34; } @@ -6588,7 +6836,6 @@ L_089E6D14: L_089E6D1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089E6D34; } @@ -6634,7 +6881,17 @@ L_089E6D4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6672,7 +6929,17 @@ L_089E6DC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6704,7 +6971,6 @@ L_089E6E38: aot_gpr_4 = (aot_gpr_4 + static_cast(-83)); aot_gpr_5 = (aot_gpr_4 < static_cast(35) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E6F0C; } @@ -6716,11 +6982,20 @@ L_089E6E48: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-2304))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6E60: aot_gpr_4 = (ctx.gpr[18] | 0u); aot_gpr_31 = (0x089E6E6Cu); @@ -6728,7 +7003,6 @@ L_089E6E60: goto L_089E6C30; L_089E6E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E6F10; } @@ -6817,7 +7091,6 @@ L_089E6EDC: goto L_089E6EE0; L_089E6EE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E6F10; } @@ -6845,7 +7118,6 @@ L_089E6F10: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E6E38; } @@ -6871,7 +7143,17 @@ L_089E6F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E6F54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); @@ -6895,7 +7177,6 @@ L_089E6F84: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-8)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E6FB4; } @@ -6972,7 +7253,6 @@ L_089E7028: AOT_REGCACHE_SYNC_OUT(); return; L_089E7034: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E7068; } @@ -7014,12 +7294,21 @@ L_089E7068: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7084: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(71))); aot_gpr_5 = (static_cast(aot_gpr_5) < 251 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E70D4; } @@ -7029,7 +7318,6 @@ L_089E7094: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E70AC; } @@ -7037,7 +7325,6 @@ L_089E7094: } L_089E70A4: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089E70D4; } @@ -7051,7 +7338,6 @@ L_089E70AC: aot_gpr_5 = (0u | 27u); aot_gpr_4 = (aot_gpr_4 & 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E70D4; } @@ -7070,11 +7356,20 @@ L_089E70D4: goto L_089E70D8; L_089E70D8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E70E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -7090,7 +7385,6 @@ L_089E70E0: L_089E7100: aot_gpr_4 = (static_cast(aot_gpr_4) < 25 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E712C; } @@ -7100,7 +7394,6 @@ L_089E710C: aot_gpr_4 = (aot_gpr_5 >> 15u); aot_gpr_4 = (aot_gpr_4 & 511u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E7124; } @@ -7132,7 +7425,6 @@ L_089E712C: } L_089E7134: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E712C; } @@ -7143,11 +7435,20 @@ L_089E713C: goto L_089E7140; L_089E7140: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7148: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(71))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); @@ -7161,7 +7462,6 @@ L_089E7148: L_089E7158: aot_gpr_6 = (static_cast(aot_gpr_5) < 250 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089E717C; } @@ -7172,7 +7472,6 @@ L_089E7164: aot_gpr_5 = (aot_gpr_5 + static_cast(-250)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E717C; } @@ -7183,11 +7482,20 @@ L_089E7178: goto L_089E717C; L_089E717C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7184: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); @@ -7202,11 +7510,20 @@ L_089E7198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E71A4: aot_gpr_5 = (aot_gpr_5 + static_cast(-250)); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_089E71D8; } @@ -7219,7 +7536,6 @@ L_089E71B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089E71D8; } @@ -7239,11 +7555,20 @@ L_089E71D8: goto L_089E71DC; L_089E71DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E71E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -7295,7 +7620,6 @@ L_089E7258: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_4 = (ctx.gpr[18] & 63u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089E7338; } @@ -7319,7 +7643,6 @@ L_089E7270: } L_089E7278: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E7338; } @@ -7331,11 +7654,20 @@ L_089E7280: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-2160))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7298: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (ctx.gpr[18] >> 6u); @@ -7360,7 +7692,6 @@ L_089E72C8: ctx.gpr[18] = (ctx.gpr[18] & 511u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E72E8; } @@ -7368,7 +7699,6 @@ L_089E72C8: } L_089E72E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7338; } @@ -7382,7 +7712,6 @@ L_089E72E8: goto L_089E71E4; L_089E72F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E733C; } @@ -7436,7 +7765,17 @@ L_089E733C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E735C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -7456,7 +7795,6 @@ L_089E735C: L_089E7384: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_089E73DC; } @@ -7487,7 +7825,6 @@ L_089E73B8: aot_gpr_5 = (0u | 25u); aot_gpr_6 = (aot_gpr_4 & 63u); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E73F0; } @@ -7512,7 +7849,6 @@ L_089E73DC: L_089E73E4: aot_gpr_6 = (0u | 26u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089E7408; } @@ -7526,7 +7862,6 @@ L_089E73F0: goto L_089E71E4; L_089E7400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E740C; } @@ -7548,13 +7883,22 @@ L_089E740C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7424: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[7] = (aot_gpr_6 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089E7450; } @@ -7562,7 +7906,6 @@ L_089E7424: } L_089E7438: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089E7458; } @@ -7572,7 +7915,6 @@ L_089E7440: aot_gpr_6 = (aot_gpr_6 + static_cast(8)); ctx.gpr[7] = (aot_gpr_6 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089E7438; } @@ -7591,11 +7933,20 @@ L_089E7458: goto L_089E745C; L_089E745C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7464: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[20]); @@ -7621,7 +7972,6 @@ L_089E7464: goto L_089E7424; L_089E74B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E74EC; } @@ -7644,7 +7994,6 @@ L_089E74E8: goto L_089E74EC; L_089E74EC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089E751C; } @@ -7662,7 +8011,6 @@ L_089E74F4: goto L_089E77C8; L_089E7514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7534; } @@ -7691,14 +8039,23 @@ L_089E7534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7554: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[8] = (0u | 4u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_089E7570; } @@ -7718,7 +8075,17 @@ L_089E7578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7584: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -7735,7 +8102,6 @@ L_089E7584: AOT_REGCACHE_SYNC_OUT(); return; L_089E75B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E75BC; } @@ -7764,7 +8130,17 @@ L_089E75D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E75E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -7782,7 +8158,6 @@ L_089E75E8: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2)))))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_089E7640; } @@ -7795,7 +8170,6 @@ L_089E762C: goto L_089E77C8; L_089E7638: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7650; } @@ -7815,7 +8189,17 @@ L_089E7650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7660: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[18]); @@ -7872,7 +8256,17 @@ L_089E76CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E76E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7967,7 +8361,17 @@ L_089E77B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E77C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -8005,7 +8409,17 @@ L_089E7820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7830: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8022,7 +8436,6 @@ L_089E7830: goto L_089E7084; L_089E7874: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8032,7 +8445,6 @@ L_089E787C: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D58; } @@ -8070,7 +8482,6 @@ L_089E78B8: } L_089E78D4: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_089E7A00; } @@ -8078,7 +8489,6 @@ L_089E78D4: } L_089E78DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E78FC; } @@ -8094,7 +8504,6 @@ L_089E78E4: } L_089E78EC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089E79E4; } @@ -8102,7 +8511,6 @@ L_089E78EC: } L_089E78F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7A00; } @@ -8128,7 +8536,6 @@ L_089E7924: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(71))); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8136,7 +8543,6 @@ L_089E7924: } L_089E7934: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E796C; } @@ -8149,7 +8555,6 @@ L_089E793C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E796C; } @@ -8162,7 +8567,6 @@ L_089E7958: goto L_089E7148; L_089E7964: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8175,7 +8579,6 @@ L_089E796C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E799C; } @@ -8188,7 +8591,6 @@ L_089E7988: goto L_089E7148; L_089E7994: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8196,7 +8598,6 @@ L_089E7994: } L_089E799C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7A00; } @@ -8222,7 +8623,6 @@ L_089E79CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8230,7 +8630,6 @@ L_089E79CC: } L_089E79DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7A00; } @@ -8252,7 +8651,6 @@ L_089E7A00: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7A28; } @@ -8260,7 +8658,6 @@ L_089E7A00: } L_089E7A1C: { const bool branch_taken = ctx.gpr[22] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E7A28; } @@ -8276,7 +8673,6 @@ L_089E7A28: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7A78; } @@ -8287,7 +8683,6 @@ L_089E7A44: aot_gpr_5 = (ctx.gpr[20] + static_cast(2)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8301,7 +8696,6 @@ L_089E7A58: aot_gpr_5 = (0u | 20u); aot_gpr_4 = (aot_gpr_4 & 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8323,14 +8717,22 @@ L_089E7A88: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-2112))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7AA0: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_089E7ABC; } @@ -8341,7 +8743,6 @@ L_089E7AA8: aot_gpr_5 = (ctx.gpr[20] + static_cast(2)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8349,7 +8750,6 @@ L_089E7AA8: } L_089E7ABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8366,7 +8766,6 @@ L_089E7AC4: } L_089E7AD0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E7ADC; } @@ -8377,7 +8776,6 @@ L_089E7AD8: goto L_089E7ADC; L_089E7ADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8387,7 +8785,6 @@ L_089E7AE4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(68))); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8395,7 +8792,6 @@ L_089E7AE4: } L_089E7AF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8408,7 +8804,6 @@ L_089E7AFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8416,7 +8811,6 @@ L_089E7AFC: } L_089E7B18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8427,7 +8821,6 @@ L_089E7B20: aot_gpr_5 = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8436,7 +8829,6 @@ L_089E7B20: L_089E7B34: aot_gpr_4 = (ctx.gpr[22] + static_cast(1)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089E7B44; } @@ -8447,7 +8839,6 @@ L_089E7B40: goto L_089E7B44; L_089E7B44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8464,7 +8855,6 @@ L_089E7B4C: } L_089E7B58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8472,7 +8862,6 @@ L_089E7B58: } L_089E7B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8484,7 +8873,6 @@ L_089E7B68: aot_gpr_4 = (aot_gpr_4 + static_cast(5)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8493,7 +8881,6 @@ L_089E7B68: L_089E7B80: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E7B90; } @@ -8507,7 +8894,6 @@ L_089E7B90: aot_gpr_5 = (ctx.gpr[22] + static_cast(2)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8517,7 +8903,6 @@ L_089E7BA4: aot_gpr_4 = (ctx.gpr[23] + ctx.gpr[20]); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8527,7 +8912,6 @@ L_089E7BB4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8552,7 +8936,6 @@ L_089E7BD0: } L_089E7BD8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E7BE4; } @@ -8563,7 +8946,6 @@ L_089E7BE0: goto L_089E7BE4; L_089E7BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8571,7 +8953,6 @@ L_089E7BE4: } L_089E7BEC: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_089E7C0C; } @@ -8583,7 +8964,6 @@ L_089E7BF4: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8593,7 +8973,6 @@ L_089E7C0C: ctx.gpr[30] = (ctx.gpr[30] + static_cast(-1)); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_089E7C38; } @@ -8606,7 +8985,6 @@ L_089E7C1C: goto L_089E70E0; L_089E7C28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8614,7 +8992,6 @@ L_089E7C28: } L_089E7C30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7C58; } @@ -8622,7 +8999,6 @@ L_089E7C30: } L_089E7C38: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_089E7C58; } @@ -8634,7 +9010,6 @@ L_089E7C40: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8643,7 +9018,6 @@ L_089E7C40: L_089E7C58: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E7C68; } @@ -8654,7 +9028,6 @@ L_089E7C64: goto L_089E7C68; L_089E7C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8663,7 +9036,6 @@ L_089E7C68: L_089E7C70: ctx.gpr[23] = (ctx.gpr[23] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[23]) <= 0; - // nop if (branch_taken) { goto L_089E7C94; } @@ -8675,7 +9047,6 @@ L_089E7C7C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8683,7 +9054,6 @@ L_089E7C7C: } L_089E7C94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8696,7 +9066,6 @@ L_089E7C9C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8704,7 +9073,6 @@ L_089E7C9C: } L_089E7CB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8714,7 +9082,6 @@ L_089E7CC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8730,7 +9097,6 @@ L_089E7CD0: aot_gpr_4 = (ctx.gpr[23] + ctx.gpr[20]); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D2C; } @@ -8738,7 +9104,6 @@ L_089E7CD0: } L_089E7CF8: { const bool branch_taken = static_cast(ctx.gpr[23]) <= 0; - // nop if (branch_taken) { goto L_089E7D40; } @@ -8753,7 +9118,6 @@ L_089E7D00: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (aot_gpr_4 & 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E7D34; } @@ -8761,7 +9125,6 @@ L_089E7D00: } L_089E7D24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7D34; } @@ -8778,7 +9141,6 @@ L_089E7D2C: L_089E7D34: ctx.gpr[23] = (ctx.gpr[23] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[23]) > 0; - // nop if (branch_taken) { goto L_089E7D00; } @@ -8786,7 +9148,6 @@ L_089E7D34: } L_089E7D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E7D48; } @@ -8796,7 +9157,6 @@ L_089E7D48: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E788C; } @@ -8827,7 +9187,17 @@ L_089E7D68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7D98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -8864,7 +9234,6 @@ L_089E7DC8: goto L_089E7DD0; L_089E7DD0: aot_gpr_31 = (0x089E7DD8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E7DD8u) goto L_089E7DD8; AOT_REGCACHE_SYNC_OUT(); return; L_089E7DD8: @@ -8872,7 +9241,6 @@ L_089E7DD8: goto L_089E7DDC; L_089E7DDC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7DEC; } @@ -8895,7 +9263,17 @@ L_089E7DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7E00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8926,7 +9304,17 @@ L_089E7E38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7E64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8971,7 +9359,17 @@ L_089E7EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7EF8: aot_gpr_6 = (2235u << 16u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); @@ -8996,7 +9394,17 @@ L_089E7EF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7F48: ctx.gpr[2] = (2206u << 16u); jump_target = aot_gpr_31; @@ -9004,12 +9412,21 @@ L_089E7F48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7F54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089E7F64u); - // nop goto L_089E7F48; L_089E7F64: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -9018,7 +9435,17 @@ L_089E7F64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7F70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9036,7 +9463,6 @@ L_089E7F8C: goto L_089E7F94; L_089E7F94: aot_gpr_31 = (0x089E7F9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E7F9Cu) goto L_089E7F9C; AOT_REGCACHE_SYNC_OUT(); return; L_089E7F9C: @@ -9044,7 +9470,6 @@ L_089E7F9C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E7FB4; } @@ -9066,7 +9491,17 @@ L_089E7FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E7FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0121.cpp b/profiles/vcs/generated/generated_unit_0121.cpp index b33b7bf..29e1c8b 100644 --- a/profiles/vcs/generated/generated_unit_0121.cpp +++ b/profiles/vcs/generated/generated_unit_0121.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0121[4090] = { - 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 8, 0, - 9, 0, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 13, 0, 0, 14, 0, 15, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 18, - 0, 0, 0, 19, 20, 0, 0, 21, 0, 22, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 28, 0, 0, 0, 29, 30, 0, 0, 31, 0, 0, 0, 32, 0, 33, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 37, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 58, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 72, 73, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 76, 77, 78, 0, 79, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 83, 84, 0, 85, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 0, 0, 0, 0, 88, 89, 90, 0, 91, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 97, 98, - 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 105, 106, 0, 0, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, - 0, 0, 111, 0, 0, 112, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 0, 120, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 126, 0, 127, 0, 128, 0, 0, - 0, 0, 0, 129, 0, 130, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 133, 0, 0, 134, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 136, 0, 137, 0, 0, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, - 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 0, 0, - 148, 0, 0, 149, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, - 155, 0, 0, 156, 0, 157, 0, 0, 0, 158, 0, 159, 0, 160, 0, 0, 161, 0, 0, 162, 0, 163, 164, 0, 0, 0, 165, 0, 0, 166, 0, 167, - 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 172, 0, 0, 0, 173, 0, 0, - 174, 0, 0, 0, 175, 0, 0, 176, 0, 177, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 182, 0, 183, - 0, 0, 0, 184, 0, 185, 0, 186, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 191, 0, 0, 0, 192, - 0, 193, 0, 0, 0, 194, 0, 195, 0, 196, 197, 0, 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 202, 0, - 0, 203, 204, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 210, 0, 0, 0, 0, 211, 0, 0, 0, 212, 213, - 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 217, 0, 0, - 0, 0, 0, 218, 0, 0, 219, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 222, 0, 223, 0, 0, 224, 225, 0, 0, 0, 226, 0, 0, 227, 0, - 0, 0, 228, 0, 0, 229, 0, 0, 230, 0, 231, 0, 0, 232, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, 242, 0, 0, - 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, - 253, 0, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 260, 261, 0, 262, 0, 0, - 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 266, 0, 0, 0, 267, 0, 268, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 276, 277, 0, 0, 0, 0, 0, - 0, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 280, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 285, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, - 296, 0, 297, 0, 0, 0, 298, 0, 0, 0, 299, 300, 0, 301, 0, 0, 302, 0, 0, 0, 0, 0, 303, 304, 305, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, - 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 315, 0, 316, 0, 317, 0, 0, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 330, 0, 0, 331, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 338, 0, 0, - 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 345, 346, 0, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, - 350, 0, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, - 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, - 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 365, 0, 0, 366, 367, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, - 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 376, 0, 377, 0, 0, 0, - 0, 0, 0, 0, 378, 379, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, - 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, - 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, - 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, - 0, 0, 0, 400, 0, 0, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, - 406, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 0, 425, 0, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, - 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, - 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 442, - 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, - 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, - 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, - 0, 0, 459, 0, 0, 0, 460, 0, 461, 0, 462, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 472, 0, - 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, - 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, - 486, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 489, 490, 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 499, 0, - 500, 0, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, - 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, - 0, 507, 0, 508, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 512, 513, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, - 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 517, 0, 0, 0, 0, 518, 0, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, - 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 532, - 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, - 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, 547, 0, 548, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 559, 0, 560, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 569, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 577, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 582, 0, 0, - 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 588, 0, 589, 0, 0, 0, 590, 591, 0, 0, 0, 592, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 596, - 0, 0, 597, 0, 0, 598, 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 602, 0, 0, 603, 0, 0, 0, - 604, 605, 0, 606, 0, 0, 607, 0, 608, 0, 0, 609, 0, 610, 0, 611, 0, 612, 0, 0, 0, 0, 613, 0, 0, 614, 615, 0, 616, 0, 617, 0, - 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 620, 0, - 0, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, 626, 0, 0, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, - 0, 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 632, 0, 633, 0, 0, 634, 635, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 637, 0, 638, 0, 639, 0, 0, 0, 640, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 643, 0, 0, 0, 644, 645, 0, 646, 0, 0, 647, 0, 0, 648, 0, 649, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0121[64] = { + 0x850A522148800A49ull, 0x8A26290080804298ull, 0x00124000008290A0ull, 0x0012480000024000ull, + 0x0800122024204000ull, 0x0082441024404122ull, 0x81170208B8102E04ull, 0x00029048E22225C0ull, + 0x0000000004C80000ull, 0x8000000000004800ull, 0x4200000000000264ull, 0x2A10800104181480ull, + 0x1084A10090200128ull, 0x5001022909229008ull, 0x22480808A4692A29ull, 0x8A8005A8A1208691ull, + 0xC4252446448486A2ull, 0x48CA484821001008ull, 0x0000401002242524ull, 0x1008040222440001ull, + 0x2D44422110924020ull, 0x2000100028C00012ull, 0x6408320406111240ull, 0x0500000000080100ull, + 0x0805020440000000ull, 0x800222A001C12C45ull, 0x0048AA0000040002ull, 0x004800204C4152AAull, + 0x0000000428000408ull, 0x020A188009002800ull, 0x08000404800A0049ull, 0x40B2101009001400ull, + 0x8088013014905050ull, 0x50200008080A0502ull, 0x0410228805102840ull, 0x0020020408400009ull, + 0x0408800200204088ull, 0x02001200A0882002ull, 0x0800810220024005ull, 0x0800480281002200ull, + 0x812024A040024014ull, 0x5014000005249544ull, 0x02000020000A8140ull, 0x0140711111020424ull, + 0x0800020944820480ull, 0x5031048A50000001ull, 0x8000810005121080ull, 0x0005000008000088ull, + 0x01000008A0000100ull, 0x140000200000A000ull, 0xA500000440104100ull, 0x1080000000028000ull, + 0x0001100000008400ull, 0x0888004500140000ull, 0x4400000000410200ull, 0x0000008000011100ull, + 0x008080A000228000ull, 0x0021000420400000ull, 0x844010008C544000ull, 0x5642A94B121004A4ull, + 0x9110820850000040ull, 0x0000002450000000ull, 0x00024540000004CAull, 0x02002000A4B14000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0121[64] = { + 1u, 19u, 35u, 44u, 50u, 58u, 70u, 88u, 104u, 108u, 111u, 117u, 129u, 141u, 155u, 174u, + 193u, 214u, 228u, 238u, 247u, 263u, 271u, 286u, 290u, 296u, 312u, 320u, 335u, 340u, 350u, 359u, + 370u, 384u, 394u, 406u, 413u, 421u, 430u, 439u, 447u, 459u, 473u, 480u, 494u, 504u, 516u, 525u, + 530u, 535u, 540u, 549u, 553u, 557u, 565u, 570u, 574u, 581u, 586u, 597u, 618u, 628u, 632u, 642u, }; void recomp_unit_0121_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0121_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089E8000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0121[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0121[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0121[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089E8000; @@ -984,7 +891,6 @@ L_089E8110: } L_089E811C: aot_gpr_31 = (0x089E8124u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E8124u) goto L_089E8124; AOT_REGCACHE_SYNC_OUT(); return; L_089E8124: @@ -1010,7 +916,17 @@ L_089E8138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E815C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -1039,7 +955,6 @@ L_089E817C: L_089E81A0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E81B4; } @@ -1057,7 +972,6 @@ L_089E81B4: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_gpr_5 + static_cast(4)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_089E81EC; } @@ -1123,7 +1037,6 @@ L_089E821C: L_089E8230: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8244; } @@ -1147,7 +1060,17 @@ L_089E8244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E825C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -1171,7 +1094,6 @@ L_089E825C: aot_gpr_4 = (ctx.gpr[17] & 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E82C4; } @@ -1186,7 +1108,6 @@ L_089E82B8: L_089E82C4: aot_gpr_4 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8338; } @@ -1223,7 +1144,6 @@ L_089E82D0: L_089E8338: aot_gpr_4 = (ctx.gpr[17] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E83AC; } @@ -1260,7 +1180,6 @@ L_089E8344: L_089E83AC: aot_gpr_4 = (ctx.gpr[17] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E83C4; } @@ -1275,7 +1194,6 @@ L_089E83B8: L_089E83C4: aot_gpr_4 = (ctx.gpr[17] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8438; } @@ -1323,7 +1241,17 @@ L_089E8438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8454: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -1339,7 +1267,17 @@ L_089E8468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8474: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -1388,7 +1326,17 @@ L_089E84B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E84EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -1423,7 +1371,17 @@ L_089E8520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8538: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -1464,7 +1422,17 @@ L_089E8574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8590: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -1499,7 +1467,17 @@ L_089E85C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E85DC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); @@ -1509,7 +1487,6 @@ L_089E85DC: ctx.gpr[8] = (aot_gpr_7 | 14269u); aot_fpr_12 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -1522,7 +1499,6 @@ L_089E8608: ctx.gpr[8] = (ctx.gpr[8] | 14269u); aot_fpr_14 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 & 255u); if (branch_taken) { @@ -1538,7 +1514,6 @@ L_089E8628: goto L_089E862C; L_089E862C: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089E867C; } @@ -1549,7 +1524,6 @@ L_089E8634: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -1562,7 +1536,6 @@ L_089E8650: ctx.gpr[8] = (ctx.gpr[8] | 14269u); aot_fpr_14 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 & 255u); if (branch_taken) { @@ -1592,7 +1565,6 @@ L_089E868C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -1605,7 +1577,6 @@ L_089E86A4: ctx.gpr[8] = (ctx.gpr[8] | 14269u); aot_fpr_14 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 & 255u); if (branch_taken) { @@ -1636,7 +1607,6 @@ L_089E86E0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -1649,7 +1619,6 @@ L_089E86FC: ctx.gpr[8] = (ctx.gpr[8] | 14269u); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 & 255u); if (branch_taken) { @@ -1665,7 +1634,6 @@ L_089E871C: goto L_089E8720; L_089E8720: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_089E8734; } @@ -1722,7 +1690,6 @@ L_089E877C: aot_gpr_7 = (aot_gpr_7 < static_cast(1) ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089E8798; } @@ -1737,9 +1704,7 @@ L_089E8798: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(28))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E87BC; } @@ -1752,11 +1717,20 @@ L_089E87B0: goto L_089E87BC; L_089E87BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E87C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -1790,7 +1764,6 @@ L_089E87C4: ctx.gpr[17] = (aot_gpr_5 | 0u); ctx.gpr[16] = (aot_gpr_6 | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089E885C; } @@ -1808,7 +1781,6 @@ L_089E8858: L_089E885C: aot_gpr_5 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E892C; } @@ -1868,7 +1840,6 @@ L_089E8868: L_089E892C: aot_gpr_5 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E89FC; } @@ -1928,7 +1899,6 @@ L_089E8938: L_089E89FC: aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E8A18; } @@ -1946,7 +1916,6 @@ L_089E8A14: L_089E8A18: aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8AE4; } @@ -2014,7 +1983,17 @@ L_089E8AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8AF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); @@ -2024,7 +2003,6 @@ L_089E8AF8: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089E8B68; } @@ -2033,7 +2011,6 @@ L_089E8AF8: L_089E8B1C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E8B50; } @@ -2041,7 +2018,6 @@ L_089E8B1C: } L_089E8B28: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E8B50; } @@ -2068,7 +2044,6 @@ L_089E8B50: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089E8B1C; } @@ -2084,7 +2059,17 @@ L_089E8B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8B80: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -2141,7 +2126,6 @@ L_089E8BF4: L_089E8C0C: jump_target = aot_gpr_5; aot_gpr_31 = (0x089E8C14u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E8C14u) goto L_089E8C14; AOT_REGCACHE_SYNC_OUT(); return; @@ -2172,7 +2156,17 @@ L_089E8C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8C54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); @@ -2189,7 +2183,17 @@ L_089E8C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8C7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2255,7 +2259,17 @@ L_089E8CF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8D0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2273,7 +2287,6 @@ L_089E8D0C: L_089E8D30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8D44; } @@ -2281,7 +2294,6 @@ L_089E8D30: } L_089E8D3C: aot_gpr_31 = (0x089E8D44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E8D44u) goto L_089E8D44; AOT_REGCACHE_SYNC_OUT(); return; L_089E8D44: @@ -2317,7 +2329,6 @@ L_089E8D6C: L_089E8D80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8D94; } @@ -2325,7 +2336,6 @@ L_089E8D80: } L_089E8D8C: aot_gpr_31 = (0x089E8D94u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E8D94u) goto L_089E8D94; AOT_REGCACHE_SYNC_OUT(); return; L_089E8D94: @@ -2348,7 +2358,17 @@ L_089E8DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8DC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2371,7 +2391,6 @@ L_089E8DF0: goto L_089E8DF8; L_089E8DF8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E8E24; } @@ -2380,7 +2399,6 @@ L_089E8DF8: L_089E8E00: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089E8E14; } @@ -2449,7 +2467,6 @@ L_089E8E58: L_089E8E68: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089E8E7C; } @@ -2481,7 +2498,17 @@ L_089E8E8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8EAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -2499,7 +2526,6 @@ L_089E8EAC: L_089E8ECC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8F24; } @@ -2566,7 +2592,17 @@ L_089E8F28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8F3C: aot_gpr_5 = (aot_gpr_5 << 24u); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -2580,7 +2616,6 @@ L_089E8F3C: L_089E8F54: aot_gpr_7 = (aot_gpr_6 < aot_gpr_7 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089E8F9C; } @@ -2591,7 +2626,6 @@ L_089E8F60: aot_gpr_6 = (aot_gpr_7 + aot_gpr_6); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E8F8C; } @@ -2599,7 +2633,6 @@ L_089E8F60: } L_089E8F74: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E8F94; } @@ -2609,7 +2642,6 @@ L_089E8F7C: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089E8F74; } @@ -2636,11 +2668,20 @@ L_089E8F9C: goto L_089E8FA0; L_089E8FA0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E8FA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2664,7 +2705,6 @@ L_089E8FDC: } L_089E8FE4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E8FFC; } @@ -2682,7 +2722,6 @@ L_089E8FEC: } L_089E8FFC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089E901C; } @@ -2700,7 +2739,6 @@ L_089E9004: } L_089E9014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E9028; } @@ -2708,7 +2746,6 @@ L_089E9014: } L_089E901C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E910C; } @@ -2722,7 +2759,6 @@ L_089E9028: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E90D4; } @@ -2748,7 +2784,6 @@ L_089E9048: L_089E905C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E9088; } @@ -2789,7 +2824,6 @@ L_089E9098: L_089E90A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E90C8; } @@ -2798,7 +2832,6 @@ L_089E90A8: L_089E90B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E90C8; } @@ -2806,7 +2839,6 @@ L_089E90B4: } L_089E90C0: aot_gpr_31 = (0x089E90C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E90C8u) goto L_089E90C8; AOT_REGCACHE_SYNC_OUT(); return; L_089E90C8: @@ -2859,7 +2891,17 @@ L_089E910C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9130: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2887,7 +2929,6 @@ L_089E9174: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E9234; } @@ -2913,7 +2954,6 @@ L_089E9198: L_089E91AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E91DC; } @@ -2965,7 +3005,6 @@ L_089E91F8: L_089E9208: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E9228; } @@ -2974,7 +3013,6 @@ L_089E9208: L_089E9214: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E9228; } @@ -2982,7 +3020,6 @@ L_089E9214: } L_089E9220: aot_gpr_31 = (0x089E9228u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E9228u) goto L_089E9228; AOT_REGCACHE_SYNC_OUT(); return; L_089E9228: @@ -3034,7 +3071,17 @@ L_089E9264: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9290: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -3044,7 +3091,17 @@ L_089E9290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E92B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (2236u << 16u); @@ -3130,7 +3187,17 @@ L_089E9374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9384: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -3144,7 +3211,17 @@ L_089E9384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E93A8: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -3158,7 +3235,17 @@ L_089E93A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E93CC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -3172,7 +3259,17 @@ L_089E93CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E93F0: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -3186,7 +3283,17 @@ L_089E93F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9414: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (aot_gpr_4 << 6u); @@ -3200,7 +3307,17 @@ L_089E9414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9438: aot_gpr_5 = (2236u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-17072)); @@ -3209,7 +3326,6 @@ L_089E9438: L_089E9444: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089E94C8; } @@ -3218,7 +3334,6 @@ L_089E9444: L_089E9450: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_4; - // nop if (branch_taken) { goto L_089E94C8; } @@ -3227,9 +3342,7 @@ L_089E9450: L_089E945C: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E94C8; } @@ -3237,9 +3350,7 @@ L_089E945C: } L_089E9470: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E94C8; } @@ -3248,9 +3359,7 @@ L_089E9470: L_089E9480: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E94C8; } @@ -3258,9 +3367,7 @@ L_089E9480: } L_089E9494: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E94C8; } @@ -3269,9 +3376,7 @@ L_089E9494: L_089E94A4: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E94C8; } @@ -3279,9 +3384,7 @@ L_089E94A4: } L_089E94B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E94E0; } @@ -3299,7 +3402,6 @@ L_089E94C8: } L_089E94D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E94E8; } @@ -3318,11 +3420,20 @@ L_089E94E8: goto L_089E94EC; L_089E94EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E94F4: aot_gpr_5 = (2236u << 16u); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } @@ -3332,7 +3443,6 @@ L_089E94F4: L_089E9504: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089E955C; } @@ -3354,9 +3464,7 @@ L_089E9510: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; aot_fpr_13 = aot_fpr_13 + ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E955C; } @@ -3377,11 +3485,20 @@ L_089E955C: } L_089E956C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9574: aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_4 + static_cast(3), aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load_word_right(aot_gpr_4 + static_cast(0), aot_gpr_6)); @@ -3401,7 +3518,17 @@ L_089E9574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E95B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3471,7 +3598,6 @@ L_089E9650: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E9668; } @@ -3488,7 +3614,6 @@ L_089E9668: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_089E96B4; } @@ -3507,7 +3632,6 @@ L_089E9688: L_089E96A4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E96B4; } @@ -3522,7 +3646,6 @@ L_089E96B4: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_089E96F8; } @@ -3541,7 +3664,6 @@ L_089E96CC: L_089E96E8: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_089E96F8; } @@ -3580,7 +3702,17 @@ L_089E9720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E974C: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3612,7 +3744,6 @@ L_089E974C: } L_089E97E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E99C4; } @@ -3654,7 +3785,6 @@ L_089E97E8: ctx.gpr[16] = (2237u << 16u); ctx.gpr[16] = (ctx.gpr[16] + static_cast(-28736)); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089E99B4; } @@ -3664,7 +3794,6 @@ L_089E9878: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 300 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E99B4; } @@ -3677,7 +3806,6 @@ L_089E9888: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E98EC; } @@ -3697,7 +3825,6 @@ L_089E98A4: AOT_REGCACHE_SYNC_OUT(); return; L_089E98C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089E99B4; } @@ -3712,7 +3839,6 @@ L_089E98C8: ctx.gpr[1] = (static_cast(static_cast(aot_gpr_4) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(72), static_cast(ctx.gpr[1])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E99B4; } @@ -3810,7 +3936,6 @@ L_089E9994: } L_089E999C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E99B4; } @@ -3843,7 +3968,6 @@ L_089E99C4: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(30), static_cast(aot_gpr_4)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(31), static_cast(aot_gpr_5)); aot_gpr_31 = (0x089E99FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E99FCu) goto L_089E99FC; AOT_REGCACHE_SYNC_OUT(); return; L_089E99FC: @@ -3924,7 +4048,6 @@ L_089E9AAC: } L_089E9AB4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089E9ACC; } @@ -3943,7 +4066,6 @@ L_089E9ABC: L_089E9ACC: aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089E9B0C; } @@ -3971,7 +4093,6 @@ L_089E9AD8: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(68), std::bit_cast(ctx.fpr[28])); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(40), ctx.gpr[22]); { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_089E9B14; } @@ -3979,7 +4100,6 @@ L_089E9AD8: } L_089E9B04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089E9B24; } @@ -4009,7 +4129,6 @@ L_089E9B1C: L_089E9B24: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(44), ctx.gpr[19]); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089E9B40; } @@ -4034,7 +4153,6 @@ L_089E9B40: aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(54), static_cast(0u)); aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(55), static_cast(ctx.gpr[30])); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089E9B68; } @@ -4073,7 +4191,17 @@ L_089E9B78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089E9B94: aot_gpr_4 = (16656u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -4192,9 +4320,7 @@ L_089E9C28: aot_gpr_4 = (16928u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E9D2C; } @@ -4202,7 +4328,6 @@ L_089E9C28: } L_089E9C6C: aot_gpr_31 = (0x089E9C74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089E9C74u) goto L_089E9C74; AOT_REGCACHE_SYNC_OUT(); return; L_089E9C74: @@ -4258,7 +4383,6 @@ L_089E9C88: AOT_REGCACHE_SYNC_OUT(); return; L_089E9D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -4319,7 +4443,6 @@ L_089E9D9C: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E9DB0; } @@ -4341,7 +4464,6 @@ L_089E9DB0: AOT_REGCACHE_SYNC_OUT(); return; L_089E9DC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089E9E0C; } @@ -4351,9 +4473,7 @@ L_089E9DCC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E9E0C; } @@ -4364,9 +4484,7 @@ L_089E9DE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E9E0C; } @@ -4384,7 +4502,6 @@ L_089E9E00: L_089E9E0C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089E9E44; } @@ -4417,7 +4534,6 @@ L_089E9E18: AOT_REGCACHE_SYNC_OUT(); return; L_089E9E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -4510,9 +4626,7 @@ L_089E9EA8: aot_gpr_4 = (17224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089E9F28; } @@ -4537,7 +4651,6 @@ L_089E9EEC: AOT_REGCACHE_SYNC_OUT(); return; L_089E9F28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -4575,7 +4688,6 @@ L_089E9F6C: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(56), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EA038; } @@ -4600,7 +4712,6 @@ L_089E9FB0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_7 = (0u | 1u); { const bool branch_taken = aot_gpr_6 == aot_gpr_7; - // nop if (branch_taken) { goto L_089E9FD0; } @@ -4609,7 +4720,6 @@ L_089E9FB0: L_089E9FC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089E9FD4; } @@ -4620,7 +4730,6 @@ L_089E9FD0: goto L_089E9FD4; L_089E9FD4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_089EA018; } @@ -4633,7 +4742,6 @@ L_089E9FDC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EA018; } @@ -4650,7 +4758,6 @@ L_089E9FF8: AOT_REGCACHE_SYNC_OUT(); return; L_089EA010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA050; } @@ -4667,7 +4774,6 @@ L_089EA018: AOT_REGCACHE_SYNC_OUT(); return; L_089EA030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA050; } @@ -4696,7 +4802,6 @@ L_089EA038: L_089EA050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EA29C; } @@ -4705,7 +4810,6 @@ L_089EA050: L_089EA05C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(54))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EA29C; } @@ -4713,7 +4817,6 @@ L_089EA05C: } L_089EA068: aot_gpr_31 = (0x089EA070u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA070u) goto L_089EA070; AOT_REGCACHE_SYNC_OUT(); return; L_089EA070: @@ -4751,7 +4854,6 @@ L_089EA0A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EA218; } @@ -4761,7 +4863,6 @@ L_089EA0CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EA104; } @@ -4782,7 +4883,6 @@ L_089EA0DC: AOT_REGCACHE_SYNC_OUT(); return; L_089EA0FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA218; } @@ -4802,7 +4902,6 @@ L_089EA104: AOT_REGCACHE_SYNC_OUT(); return; L_089EA120: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EA1D4; } @@ -4822,7 +4921,6 @@ L_089EA128: AOT_REGCACHE_SYNC_OUT(); return; L_089EA144: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EA1D4; } @@ -4913,7 +5011,6 @@ L_089EA18C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA218; } @@ -4933,7 +5030,6 @@ L_089EA1D4: AOT_REGCACHE_SYNC_OUT(); return; L_089EA1F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EA218; } @@ -4955,9 +5051,7 @@ L_089EA1F8: L_089EA218: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EA29C; } @@ -4965,7 +5059,6 @@ L_089EA218: } L_089EA22C: aot_gpr_31 = (0x089EA234u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA234u) goto L_089EA234; AOT_REGCACHE_SYNC_OUT(); return; L_089EA234: @@ -4989,7 +5082,6 @@ L_089EA250: goto L_089EA260; L_089EA260: aot_gpr_31 = (0x089EA268u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA268u) goto L_089EA268; AOT_REGCACHE_SYNC_OUT(); return; L_089EA268: @@ -5008,7 +5100,6 @@ L_089EA28C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EA260; } @@ -5016,7 +5107,6 @@ L_089EA28C: } L_089EA29C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -5107,7 +5197,6 @@ L_089EA358: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089EA36Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA36Cu) goto L_089EA36C; AOT_REGCACHE_SYNC_OUT(); return; L_089EA36C: @@ -5175,7 +5264,6 @@ L_089EA40C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089EA41Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA41Cu) goto L_089EA41C; AOT_REGCACHE_SYNC_OUT(); return; L_089EA41C: @@ -5243,7 +5331,6 @@ L_089EA4BC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089EA4CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA4CCu) goto L_089EA4CC; AOT_REGCACHE_SYNC_OUT(); return; L_089EA4CC: @@ -5319,7 +5406,6 @@ L_089EA55C: AOT_REGCACHE_SYNC_OUT(); return; L_089EA574: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -5399,7 +5485,6 @@ L_089EA5E4: AOT_REGCACHE_SYNC_OUT(); return; L_089EA600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -5457,7 +5542,6 @@ L_089EA674: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089EA684u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EA684u) goto L_089EA684; AOT_REGCACHE_SYNC_OUT(); return; L_089EA684: @@ -5514,7 +5598,6 @@ L_089EA724: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EA674; } @@ -5571,7 +5654,6 @@ L_089EA760: AOT_REGCACHE_SYNC_OUT(); return; L_089EA77C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -5651,7 +5733,6 @@ L_089EA7EC: AOT_REGCACHE_SYNC_OUT(); return; L_089EA808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -5731,7 +5812,6 @@ L_089EA878: AOT_REGCACHE_SYNC_OUT(); return; L_089EA894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EA8A8; } @@ -5745,7 +5825,6 @@ L_089EA89C: L_089EA8A8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(633))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EA8D4; } @@ -5764,7 +5843,6 @@ L_089EA8B4: L_089EA8D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(632))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EAA44; } @@ -5775,7 +5853,6 @@ L_089EA8E0: ctx.gpr[16] = (2236u << 16u); ctx.gpr[16] = (ctx.gpr[16] + static_cast(32304)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 1u); if (branch_taken) { @@ -5786,7 +5863,6 @@ L_089EA8E0: L_089EA8FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(60))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EA9C8; } @@ -5804,7 +5880,6 @@ L_089EA908: } L_089EA918: { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089EA93C; } @@ -5812,7 +5887,6 @@ L_089EA918: } L_089EA920: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_089EA948; } @@ -5820,7 +5894,6 @@ L_089EA920: } L_089EA928: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EA960; } @@ -5895,7 +5968,6 @@ L_089EA968: AOT_REGCACHE_SYNC_OUT(); return; L_089EA9C8: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089EA9F8; } @@ -5917,7 +5989,6 @@ L_089EA9D0: AOT_REGCACHE_SYNC_OUT(); return; L_089EA9F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EAA3C; } @@ -5992,7 +6063,17 @@ L_089EAA4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EAA94: aot_gpr_29 = (aot_gpr_29 + static_cast(-576)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -6004,7 +6085,6 @@ L_089EAA94: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 48 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBA7C; } @@ -6019,7 +6099,6 @@ L_089EAAE4: ctx.gpr[17] = (ctx.gpr[17] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBA6C; } @@ -6028,7 +6107,6 @@ L_089EAAE4: L_089EAB08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EABE0; } @@ -6039,7 +6117,6 @@ L_089EAB14: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBA6C; } @@ -6050,9 +6127,7 @@ L_089EAB28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EBA6C; } @@ -6130,7 +6205,6 @@ L_089EABB8: AOT_REGCACHE_SYNC_OUT(); return; L_089EABD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA6C; } @@ -6180,7 +6254,6 @@ L_089EAC28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -6192,15 +6265,23 @@ L_089EAC44: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-1848))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EAC5C: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 3500 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EAD78; } @@ -6210,7 +6291,6 @@ L_089EAC68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EAC80; } @@ -6218,7 +6298,6 @@ L_089EAC68: } L_089EAC78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -6227,7 +6306,6 @@ L_089EAC78: L_089EAC80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EACEC; } @@ -6314,7 +6392,6 @@ L_089EAD00: AOT_REGCACHE_SYNC_OUT(); return; L_089EAD70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -6323,7 +6400,6 @@ L_089EAD70: L_089EAD78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EAF0C; } @@ -6331,14 +6407,12 @@ L_089EAD78: } L_089EAD84: aot_gpr_31 = (0x089EAD8Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EAD8Cu) goto L_089EAD8C; AOT_REGCACHE_SYNC_OUT(); return; L_089EAD8C: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EAE30; } @@ -6347,7 +6421,6 @@ L_089EAD8C: L_089EAD9C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(54))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EAE30; } @@ -6359,7 +6432,6 @@ L_089EADA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EADD0; } @@ -6369,7 +6441,6 @@ L_089EADC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EADD4; } @@ -6392,7 +6463,6 @@ L_089EADD4: AOT_REGCACHE_SYNC_OUT(); return; L_089EADF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EAE30; } @@ -6438,9 +6508,7 @@ L_089EAE44: goto L_089EAE50; L_089EAE50: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EAF0C; } @@ -6476,7 +6544,6 @@ L_089EAE68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089EAEA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EAEA0u) goto L_089EAEA0; AOT_REGCACHE_SYNC_OUT(); return; L_089EAEA0: @@ -6486,7 +6553,6 @@ L_089EAEA0: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EAF0C; } @@ -6514,7 +6580,6 @@ L_089EAEFC: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EAEBC; } @@ -6524,7 +6589,6 @@ L_089EAF0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EAFC8; } @@ -6588,7 +6652,6 @@ L_089EAF6C: AOT_REGCACHE_SYNC_OUT(); return; L_089EAFC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EB020; } @@ -6643,7 +6706,6 @@ L_089EB020: AOT_REGCACHE_SYNC_OUT(); return; L_089EB074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -6653,7 +6715,6 @@ L_089EB07C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EB13C; } @@ -6718,7 +6779,6 @@ L_089EB0E0: AOT_REGCACHE_SYNC_OUT(); return; L_089EB134: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EB194; } @@ -6773,7 +6833,6 @@ L_089EB194: AOT_REGCACHE_SYNC_OUT(); return; L_089EB1E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -6842,7 +6901,6 @@ L_089EB250: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EB550; } @@ -6852,7 +6910,6 @@ L_089EB278: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EB2FC; } @@ -6896,7 +6953,6 @@ L_089EB288: AOT_REGCACHE_SYNC_OUT(); return; L_089EB2E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EB2F4; } @@ -6931,7 +6987,6 @@ L_089EB2FC: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EB4C0; } @@ -6939,7 +6994,6 @@ L_089EB2FC: } L_089EB33C: aot_gpr_31 = (0x089EB344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB344u) goto L_089EB344; AOT_REGCACHE_SYNC_OUT(); return; L_089EB344: @@ -6995,7 +7049,6 @@ L_089EB344: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(68))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(344), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089EB3DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB3DCu) goto L_089EB3DC; AOT_REGCACHE_SYNC_OUT(); return; L_089EB3DC: @@ -7020,7 +7073,6 @@ L_089EB3F0: aot_gpr_4 = (ctx.gpr[8] | 0u); ctx.gpr[22] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089EB428u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB428u) goto L_089EB428; AOT_REGCACHE_SYNC_OUT(); return; L_089EB428: @@ -7066,7 +7118,6 @@ L_089EB4B0: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EB33C; } @@ -7122,7 +7173,6 @@ L_089EB4C0: AOT_REGCACHE_SYNC_OUT(); return; L_089EB548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EB5DC; } @@ -7151,19 +7201,16 @@ L_089EB550: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(360), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089EB580u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB580u) goto L_089EB580; AOT_REGCACHE_SYNC_OUT(); return; L_089EB580: aot_gpr_31 = (0x089EB588u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB588u) goto L_089EB588; AOT_REGCACHE_SYNC_OUT(); return; L_089EB588: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EB5DC; } @@ -7188,7 +7235,6 @@ L_089EB5CC: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EB598; } @@ -7198,7 +7244,6 @@ L_089EB5DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EB720; } @@ -7229,7 +7274,6 @@ L_089EB5EC: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EB6F8; } @@ -7251,7 +7295,6 @@ L_089EB640: ctx.fpr[24] = aot_fpr_20 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(400), std::bit_cast(ctx.fpr[24])); aot_gpr_31 = (0x089EB658u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB658u) goto L_089EB658; AOT_REGCACHE_SYNC_OUT(); return; L_089EB658: @@ -7314,7 +7357,6 @@ L_089EB6E8: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EB624; } @@ -7337,7 +7379,6 @@ L_089EB720: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EB83C; } @@ -7347,7 +7388,6 @@ L_089EB730: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (static_cast(aot_gpr_4) < 33 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EB83C; } @@ -7435,7 +7475,6 @@ L_089EB79C: AOT_REGCACHE_SYNC_OUT(); return; L_089EB83C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -7445,7 +7484,6 @@ L_089EB844: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBA48; } @@ -7467,7 +7505,6 @@ L_089EB854: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBA48; } @@ -7475,7 +7512,6 @@ L_089EB854: } L_089EB894: aot_gpr_31 = (0x089EB89Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB89Cu) goto L_089EB89C; AOT_REGCACHE_SYNC_OUT(); return; L_089EB89C: @@ -7486,7 +7522,6 @@ L_089EB89C: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(496), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089EB8BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB8BCu) goto L_089EB8BC; AOT_REGCACHE_SYNC_OUT(); return; L_089EB8BC: @@ -7497,7 +7532,6 @@ L_089EB8BC: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(500), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089EB8DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB8DCu) goto L_089EB8DC; AOT_REGCACHE_SYNC_OUT(); return; L_089EB8DC: @@ -7564,7 +7598,6 @@ L_089EB958: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(504), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089EB974u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB974u) goto L_089EB974; AOT_REGCACHE_SYNC_OUT(); return; L_089EB974: @@ -7589,7 +7622,6 @@ L_089EB988: aot_gpr_4 = (ctx.gpr[8] | 0u); ctx.gpr[22] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x089EB9C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EB9C0u) goto L_089EB9C0; AOT_REGCACHE_SYNC_OUT(); return; L_089EB9C0: @@ -7631,7 +7663,6 @@ L_089EBA38: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EB894; } @@ -7639,7 +7670,6 @@ L_089EBA38: } L_089EBA48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EBA50; } @@ -7647,7 +7677,6 @@ L_089EBA48: } L_089EBA50: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_089EBA68; } @@ -7670,7 +7699,6 @@ L_089EBA6C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 48 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EAAE4; } @@ -7696,7 +7724,17 @@ L_089EBA7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EBAB0: aot_gpr_4 = (0u | 50u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9684), static_cast(aot_gpr_4)); @@ -7711,12 +7749,21 @@ L_089EBAB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EBAD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBB1C; } @@ -7741,7 +7788,6 @@ L_089EBAFC: L_089EBB08: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EBB1C; } @@ -7749,7 +7795,6 @@ L_089EBB08: } L_089EBB14: aot_gpr_31 = (0x089EBB1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EBB1Cu) goto L_089EBB1C; AOT_REGCACHE_SYNC_OUT(); return; L_089EBB1C: @@ -7759,7 +7804,17 @@ L_089EBB1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EBB28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -7785,7 +7840,6 @@ L_089EBB50: L_089EBB64: ctx.gpr[20] = (ctx.gpr[17] + static_cast(12)); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089EBBBC; } @@ -7820,7 +7874,6 @@ L_089EBB8C: } L_089EBB98: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089EBBBC; } @@ -7829,7 +7882,6 @@ L_089EBB98: L_089EBBA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBBBC; } @@ -7837,7 +7889,6 @@ L_089EBBA0: } L_089EBBAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBBBC; } @@ -7845,7 +7896,6 @@ L_089EBBAC: } L_089EBBB4: aot_gpr_31 = (0x089EBBBCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EBBBCu) goto L_089EBBBC; AOT_REGCACHE_SYNC_OUT(); return; L_089EBBBC: @@ -7877,7 +7927,6 @@ L_089EBBE4: goto L_089EBBE8; L_089EBBE8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBBF8; } @@ -7903,7 +7952,17 @@ L_089EBBF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EBC18: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -8056,7 +8115,6 @@ L_089EBD78: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_089EBE0C; } @@ -8065,7 +8123,6 @@ L_089EBD78: L_089EBD88: aot_gpr_7 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089EBE04; } @@ -8190,7 +8247,6 @@ L_089EBE98: } L_089EBEA0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EBF40; } @@ -8293,7 +8349,6 @@ L_089EBF5C: L_089EBF68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EBF7C; } @@ -8301,7 +8356,6 @@ L_089EBF68: } L_089EBF74: aot_gpr_31 = (0x089EBF7Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EBF7Cu) goto L_089EBF7C; AOT_REGCACHE_SYNC_OUT(); return; L_089EBF7C: @@ -8325,7 +8379,17 @@ L_089EBF7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EBFB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0122.cpp b/profiles/vcs/generated/generated_unit_0122.cpp index 4e9bf5f..02efd83 100644 --- a/profiles/vcs/generated/generated_unit_0122.cpp +++ b/profiles/vcs/generated/generated_unit_0122.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0122[4075] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 19, 20, 21, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 25, 26, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, - 41, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 44, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 55, 0, 0, 56, 0, 57, - 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, - 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 71, 0, 72, 0, 73, 74, 0, 0, 0, - 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 81, 0, 0, 82, 0, 83, 0, 84, 0, 85, 0, 0, 0, - 86, 0, 0, 87, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90, 91, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 93, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 0, 0, 0, 103, 0, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 0, 110, 0, - 0, 111, 0, 0, 112, 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 0, 0, 0, 0, 118, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 122, - 0, 0, 0, 0, 123, 0, 124, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 130, - 0, 0, 0, 0, 0, 0, 131, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 135, 0, 0, 0, 136, 0, 137, 0, - 138, 0, 0, 0, 139, 0, 140, 0, 141, 0, 0, 142, 0, 0, 143, 0, 0, 144, 0, 145, 146, 0, 147, 0, 0, 0, 0, 0, 0, 0, 148, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 150, 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 153, 0, 0, 0, 154, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, - 0, 159, 0, 0, 0, 0, 0, 0, 160, 161, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 166, - 0, 167, 0, 168, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, - 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 0, 181, 0, 182, 0, 0, 0, - 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 237, - 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, - 0, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 245, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 247, 0, 0, 248, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, - 0, 252, 253, 0, 254, 0, 0, 0, 0, 255, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, 260, 0, 0, 0, 261, - 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 267, 0, 0, 268, 0, 0, 0, 269, 0, 270, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 276, - 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, - 0, 281, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 0, 0, 0, 288, - 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, - 0, 0, 0, 0, 0, 0, 293, 0, 294, 295, 0, 296, 0, 0, 0, 297, 0, 0, 0, 298, 0, 299, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 309, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 313, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 326, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 0, 0, - 0, 0, 337, 0, 0, 0, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, 343, 0, 0, 0, - 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, - 350, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 355, 0, 0, - 356, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 364, 0, 365, 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, 371, 372, - 0, 373, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 378, 0, 379, 0, 0, 380, 0, 381, 0, 382, 0, 383, 0, 0, 0, 384, - 0, 385, 0, 0, 0, 386, 0, 0, 387, 0, 388, 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 392, 0, 0, 0, 393, 0, 0, - 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 402, 0, 0, 0, 0, 0, 403, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 407, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 0, - 0, 420, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, 428, 0, 429, - 0, 430, 431, 0, 432, 0, 433, 0, 0, 0, 434, 0, 435, 0, 436, 437, 0, 438, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 443, - 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 0, 0, 0, 454, 0, - 0, 0, 455, 0, 0, 456, 0, 457, 0, 0, 458, 0, 459, 460, 0, 0, 461, 0, 0, 462, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, - 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 469, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 475, 0, 476, 0, - 477, 0, 0, 0, 0, 0, 478, 479, 0, 480, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, - 485, 0, 0, 0, 0, 486, 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 491, 0, 0, 0, 492, - 0, 493, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 495, 0, 496, 0, 0, 497, 0, 498, 0, 0, 0, 499, 0, 500, 0, 501, 0, 0, 0, 0, - 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 506, 507, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, - 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 519, - 0, 520, 0, 0, 0, 521, 522, 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 0, - 0, 528, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, - 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 536, 0, 0, 0, 537, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 0, 540, 0, - 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 0, 0, 544, 545, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 0, 0, 0, - 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, - 554, 0, 0, 0, 555, 0, 556, 557, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 566, - 0, 567, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 572, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 575, - 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 582, 0, 0, 0, 583, 0, 0, - 0, 0, 584, 585, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 0, 0, 0, 588, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 593, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, - 0, 596, 0, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 0, - 0, 0, 608, 0, 0, 0, 0, 0, 0, 609, 610, 0, 0, 611, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, - 0, 0, 0, 620, 621, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 628, 629, 0, 0, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 635, 0, 0, 636, 0, 637, 638, 0, 0, 639, 0, 0, - 640, 0, 641, 0, 0, 0, 642, 0, 0, 0, 643, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0122[64] = { + 0x0404800000091421ull, 0x2094000112000202ull, 0x888440000103422Eull, 0x8004511142091150ull, + 0xA540800001042400ull, 0x1A82902820815510ull, 0x1548A00008400022ull, 0x010C029003010049ull, + 0x000802D24AAA42A9ull, 0x9408225088001508ull, 0x405A4951511008C0ull, 0x5020422000A84000ull, + 0x9410000000002302ull, 0x14A11008222110AAull, 0x0000020000010841ull, 0x0000400000800001ull, + 0x0020000010000020ull, 0x0020000040000080ull, 0x0000400008000100ull, 0x0000040000080002ull, + 0x0000080000100002ull, 0x0004000002000004ull, 0x0008000010000020ull, 0x0000100002000020ull, + 0x8000100041200008ull, 0x00000000100AAA00ull, 0xA410200400020882ull, 0x2804020440000050ull, + 0x8911121602014484ull, 0xA0451000A2444488ull, 0x842020AA20400802ull, 0x02688B4021002010ull, + 0x0800000000800000ull, 0x28810A2000212000ull, 0x0108A4100008A100ull, 0x0002000080900000ull, + 0x0010000020000002ull, 0x1488014408490900ull, 0x0104804000010004ull, 0x3080000200000011ull, + 0x0008A84014102121ull, 0x8AA5412AC4100004ull, 0x8082289222224522ull, 0x0008144100000000ull, + 0x0021414000000018ull, 0xA904504A14108820ull, 0xA00410000022D456ull, 0x8000000040042104ull, + 0x402934A440504400ull, 0x0811000089000404ull, 0x40024AC154001000ull, 0x0A8A50828A1020A1ull, + 0x0000002200000001ull, 0x4020402001520C20ull, 0x08422462A8000080ull, 0x4052284104042006ull, + 0x4088088409062404ull, 0x88090102082010D1ull, 0x22888888881A4106ull, 0x202150002061100Cull, + 0x0080A60408955552ull, 0x1000025810225020ull, 0x001000020D100080ull, 0x0000044526914080ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0122[64] = { + 1u, 10u, 19u, 33u, 48u, 58u, 75u, 86u, 98u, 117u, 131u, 149u, 159u, 167u, 183u, 188u, + 191u, 194u, 197u, 200u, 203u, 206u, 209u, 212u, 215u, 221u, 228u, 238u, 246u, 262u, 277u, 289u, + 302u, 304u, 314u, 324u, 328u, 331u, 344u, 350u, 356u, 368u, 385u, 402u, 407u, 414u, 430u, 444u, + 450u, 465u, 473u, 485u, 502u, 505u, 516u, 528u, 541u, 554u, 567u, 584u, 596u, 614u, 625u, 632u, }; void recomp_unit_0122_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0122_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089EC000u; - entry_id = (entry_delta < 16300u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0122[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16300u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0122[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0122[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089EC000; @@ -817,9 +724,7 @@ LOCAL_DISPATCH: L_089EC000: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EC030; } @@ -828,9 +733,7 @@ L_089EC000: L_089EC014: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EC030; } @@ -844,7 +747,6 @@ L_089EC030: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_089EC0C8; } @@ -942,7 +844,17 @@ L_089EC104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC124: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -961,7 +873,6 @@ L_089EC124: aot_fpr_13 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_gpr_31 = (0x089EC164u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0121_entry, 121u, 650u, 0x089EBFB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EC164u) goto L_089EC164; AOT_REGCACHE_SYNC_OUT(); return; L_089EC164: @@ -971,7 +882,17 @@ L_089EC164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC170: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_4 = (aot_gpr_5 << 6u); @@ -980,7 +901,17 @@ L_089EC170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC180: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -999,7 +930,6 @@ L_089EC180: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), std::bit_cast(ctx.fpr[22])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC240; } @@ -1018,7 +948,6 @@ L_089EC1DC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(32))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -1028,7 +957,6 @@ L_089EC1DC: } L_089EC1F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -1044,7 +972,6 @@ L_089EC208: goto L_089EC20C; L_089EC20C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC224; } @@ -1065,7 +992,6 @@ L_089EC224: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EC1D0; } @@ -1092,7 +1018,17 @@ L_089EC244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC260: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), aot_gpr_16); @@ -1145,7 +1081,6 @@ L_089EC2FC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_089EC364; } @@ -1158,7 +1093,6 @@ L_089EC310: AOT_REGCACHE_SYNC_OUT(); return; L_089EC318: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089EC364; } @@ -1166,9 +1100,7 @@ L_089EC318: } L_089EC320: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EC340; } @@ -1183,7 +1115,6 @@ L_089EC330: L_089EC340: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC364; } @@ -1210,7 +1141,6 @@ L_089EC364: } L_089EC378: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_089EC390; } @@ -1237,7 +1167,6 @@ L_089EC3A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_gpr_5 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_089EC3B8; } @@ -1245,7 +1174,6 @@ L_089EC3A0: } L_089EC3B0: aot_gpr_31 = (0x089EC3B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 565u, 0x08AD340Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EC3B8u) goto L_089EC3B8; AOT_REGCACHE_SYNC_OUT(); return; L_089EC3B8: @@ -1278,7 +1206,17 @@ L_089EC3C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC3FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1324,7 +1262,17 @@ L_089EC448: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC460: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u + static_cast(-1)); @@ -1360,7 +1308,17 @@ L_089EC460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1385,7 +1343,6 @@ L_089EC4E0: L_089EC4E8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC4FC; } @@ -1408,7 +1365,17 @@ L_089EC4FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC510: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); @@ -1443,7 +1410,6 @@ L_089EC530: } L_089EC538: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EC528; } @@ -1484,11 +1450,20 @@ L_089EC574: goto L_089EC58C; L_089EC58C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC594: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -1505,7 +1480,6 @@ L_089EC594: L_089EC5B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC5E4; } @@ -1538,7 +1512,6 @@ L_089EC5DC: } L_089EC5E4: aot_gpr_31 = (0x089EC5ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EC5ECu) goto L_089EC5EC; AOT_REGCACHE_SYNC_OUT(); return; L_089EC5EC: @@ -1559,7 +1532,17 @@ L_089EC604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC614: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -1585,7 +1568,6 @@ L_089EC614: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -1596,9 +1578,7 @@ L_089EC614: L_089EC658: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EC6BC; } @@ -1647,9 +1627,7 @@ L_089EC66C: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EC6CC; } @@ -1657,7 +1635,6 @@ L_089EC66C: } L_089EC6B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EC700; } @@ -1676,7 +1653,6 @@ L_089EC6BC: L_089EC6CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089EC6F0; } @@ -1689,7 +1665,6 @@ L_089EC6D8: AOT_REGCACHE_SYNC_OUT(); return; L_089EC6E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089EC6F0; } @@ -1713,7 +1688,6 @@ L_089EC6F0: L_089EC700: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089EC7C8; } @@ -1722,7 +1696,6 @@ L_089EC700: L_089EC70C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089EC7C8; } @@ -1736,7 +1709,6 @@ L_089EC718: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); goto L_089EC764; @@ -1748,9 +1720,7 @@ L_089EC740: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EC790; } @@ -1813,7 +1783,17 @@ L_089EC7CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC7E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -1829,7 +1809,6 @@ L_089EC7E0: L_089EC800: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EC824; } @@ -1837,7 +1816,6 @@ L_089EC800: } L_089EC80C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EC85C; } @@ -1849,7 +1827,6 @@ L_089EC814: goto L_089EC9CC; L_089EC81C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EC9B4; } @@ -1860,7 +1837,6 @@ L_089EC824: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EC85C; } @@ -1869,7 +1845,6 @@ L_089EC824: L_089EC838: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC854; } @@ -1882,7 +1857,6 @@ L_089EC844: AOT_REGCACHE_SYNC_OUT(); return; L_089EC84C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EC85C; } @@ -1899,7 +1873,6 @@ L_089EC85C: AOT_REGCACHE_SYNC_OUT(); return; L_089EC864: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EC998; } @@ -1908,7 +1881,6 @@ L_089EC864: L_089EC86C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EC9B4; } @@ -1923,7 +1895,6 @@ L_089EC878: L_089EC884: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089EC89C; } @@ -2050,7 +2021,6 @@ L_089EC97C: AOT_REGCACHE_SYNC_OUT(); return; L_089EC990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EC9B4; } @@ -2059,7 +2029,6 @@ L_089EC990: L_089EC998: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EC9B4; } @@ -2085,7 +2054,17 @@ L_089EC9B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EC9CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2093,7 +2072,6 @@ L_089EC9CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ECA1C; } @@ -2107,7 +2085,6 @@ L_089EC9E8: L_089EC9F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ECA18; } @@ -2136,7 +2113,17 @@ L_089ECA1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ECA2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -2155,7 +2142,6 @@ L_089ECA50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ECA70; } @@ -2165,7 +2151,6 @@ L_089ECA60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089ECA80; } @@ -2177,7 +2162,6 @@ L_089ECA70: goto L_089ECBD4; L_089ECA78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089ECBB8; } @@ -2197,7 +2181,6 @@ L_089ECA90: AOT_REGCACHE_SYNC_OUT(); return; L_089ECA98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089ECBB8; } @@ -2206,7 +2189,6 @@ L_089ECA98: L_089ECAA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089ECBB8; } @@ -2221,7 +2203,6 @@ L_089ECAAC: L_089ECAB8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089ECAD0; } @@ -2357,7 +2338,17 @@ L_089ECBB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ECBD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2365,7 +2356,6 @@ L_089ECBD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ECC24; } @@ -2379,7 +2369,6 @@ L_089ECBF0: L_089ECBF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089ECC20; } @@ -2408,7 +2397,17 @@ L_089ECC24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ECC34: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (2234u << 16u); @@ -2461,7 +2460,6 @@ L_089ECCF0: AOT_REGCACHE_SYNC_OUT(); return; L_089ECCFC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089ECD74; } @@ -2469,7 +2467,6 @@ L_089ECCFC: } L_089ECD04: { const bool branch_taken = aot_gpr_16 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_089ECD1C; } @@ -2477,7 +2474,6 @@ L_089ECD04: } L_089ECD0C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089ECD1C; } @@ -2485,7 +2481,6 @@ L_089ECD0C: } L_089ECD14: { const bool branch_taken = aot_gpr_16 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_089ECD74; } @@ -2587,7 +2582,6 @@ L_089ECDDC: AOT_REGCACHE_SYNC_OUT(); return; L_089ECDE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089ECE00; } @@ -3400,7 +3394,17 @@ L_089ED8B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED8FC: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3454,46 +3458,104 @@ L_089ED8FC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED924: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED92C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED934: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED93C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED944: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1704))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089ED94C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3547,7 +3609,6 @@ L_089EDA04: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089EDA04; } @@ -3609,7 +3670,17 @@ L_089EDA88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDAB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3635,7 +3706,6 @@ L_089EDAD0: L_089EDAE8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDAFC; } @@ -3658,14 +3728,33 @@ L_089EDAFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDB10: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDB18: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3731,7 +3820,6 @@ L_089EDBC8: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 / ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_089EDBEC; @@ -3739,7 +3827,6 @@ L_089EDBC8: goto L_089EDBEC; L_089EDBEC: aot_gpr_31 = (0x089EDBF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EDBF4u) goto L_089EDBF4; AOT_REGCACHE_SYNC_OUT(); return; L_089EDBF4: @@ -3783,7 +3870,6 @@ L_089EDC40: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089EDC64; @@ -3797,7 +3883,6 @@ L_089EDC64: ctx.gpr[18] = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDC88; } @@ -3808,7 +3893,6 @@ L_089EDC84: goto L_089EDC88; L_089EDC88: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089EDCC0; } @@ -3825,7 +3909,6 @@ L_089EDC90: L_089EDCA4: ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089EDCC0; } @@ -3842,7 +3925,6 @@ L_089EDCC0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDCFC; } @@ -3858,7 +3940,6 @@ L_089EDCD0: L_089EDCE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDCFC; } @@ -3875,7 +3956,6 @@ L_089EDCFC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1316))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDD38; } @@ -3891,7 +3971,6 @@ L_089EDD0C: L_089EDD1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDD38; } @@ -3908,7 +3987,6 @@ L_089EDD38: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1324))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EDD74; } @@ -3924,7 +4002,6 @@ L_089EDD48: L_089EDD58: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089EDD74; } @@ -3962,7 +4039,17 @@ L_089EDD7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDDB0: aot_gpr_4 = (aot_gpr_6 | 0u); aot_gpr_6 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); @@ -4073,25 +4160,53 @@ L_089EDE74: goto L_089EDE84; L_089EDE84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDE8C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDE94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDE9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4113,7 +4228,17 @@ L_089EDEB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDED4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); aot_gpr_6 = (0u + static_cast(-3)); @@ -4123,7 +4248,17 @@ L_089EDED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2279u << 16u); @@ -4201,7 +4336,17 @@ L_089EDF60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDF74: aot_gpr_4 = (aot_gpr_4 + static_cast(32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -4209,9 +4354,7 @@ L_089EDF74: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EDFA0; } @@ -4230,11 +4373,20 @@ L_089EDFA0: goto L_089EDFA4; L_089EDFA4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDFAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4246,7 +4398,6 @@ L_089EDFBC: aot_gpr_4 = (ctx.gpr[2] & 255u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EDFD4; } @@ -4270,7 +4421,17 @@ L_089EDFD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EDFE4: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7612))); ctx.gpr[9] = (ctx.gpr[9] << 5u); @@ -4326,7 +4487,17 @@ L_089EDFE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EE05C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4376,7 +4547,6 @@ L_089EE05C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.gpr[30] = (aot_gpr_5 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_4); if (branch_taken) { @@ -4407,7 +4577,6 @@ L_089EE0EC: L_089EE134: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(9688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE23C; } @@ -4418,7 +4587,6 @@ L_089EE140: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EE23C; } @@ -4487,9 +4655,7 @@ L_089EE154: AOT_REGCACHE_SYNC_OUT(); return; L_089EE194: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EE23C; } @@ -4497,7 +4663,6 @@ L_089EE194: } L_089EE1A4: aot_gpr_31 = (0x089EE1ACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EE1ACu) goto L_089EE1AC; AOT_REGCACHE_SYNC_OUT(); return; L_089EE1AC: @@ -4597,7 +4762,17 @@ L_089EE24C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EE290: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4608,7 +4783,6 @@ L_089EE290: L_089EE2A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(9688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE2BC; } @@ -4616,7 +4790,6 @@ L_089EE2A8: } L_089EE2B4: aot_gpr_31 = (0x089EE2BCu); - // nop goto L_089EDB10; L_089EE2BC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); @@ -4640,7 +4813,17 @@ L_089EE2CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EE2E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(340), aot_gpr_5); @@ -4665,7 +4848,6 @@ L_089EE2E0: L_089EE350: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(9688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE5F0; } @@ -4679,7 +4861,6 @@ L_089EE35C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EE5F0; } @@ -4739,9 +4920,7 @@ L_089EE37C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EE5F0; } @@ -4953,9 +5132,7 @@ L_089EE474: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EE520; } @@ -5006,9 +5183,7 @@ L_089EE4D0: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EE52C; } @@ -5037,7 +5212,6 @@ L_089EE52C: L_089EE540: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(324))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE5CC; } @@ -5101,7 +5275,6 @@ L_089EE5CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE5F0; } @@ -5110,7 +5283,6 @@ L_089EE5CC: L_089EE5DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE5F0; } @@ -5154,7 +5326,17 @@ L_089EE608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EE640: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(216), ctx.gpr[18]); @@ -5193,7 +5375,6 @@ L_089EE698: L_089EE6BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(9688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE8BC; } @@ -5205,7 +5386,6 @@ L_089EE6C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EE8BC; } @@ -5235,9 +5415,7 @@ L_089EE6E0: AOT_REGCACHE_SYNC_OUT(); return; L_089EE700: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EE8BC; } @@ -5343,7 +5521,6 @@ L_089EE710: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_089EE784; @@ -5421,7 +5598,6 @@ L_089EE7DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2064))); aot_gpr_4 = (aot_gpr_4 < static_cast(401) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EE814; } @@ -5433,7 +5609,6 @@ L_089EE7F0: L_089EE7F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1922))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089EE8B4; } @@ -5444,7 +5619,6 @@ L_089EE800: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2064))); aot_gpr_4 = (aot_gpr_4 < static_cast(501) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EE8B4; } @@ -5556,7 +5730,17 @@ L_089EE8CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EE908: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5581,7 +5765,6 @@ L_089EE968: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(1360))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EE97C; } @@ -5592,7 +5775,6 @@ L_089EE978: goto L_089EE97C; L_089EE97C: aot_gpr_31 = (0x089EE984u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_0898B428, 97u, 0x0898B428u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EE984u) goto L_089EE984; AOT_REGCACHE_SYNC_OUT(); return; L_089EE984: @@ -5602,7 +5784,6 @@ L_089EE984: AOT_REGCACHE_SYNC_OUT(); return; L_089EE98C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EE9A0; } @@ -5627,12 +5808,10 @@ L_089EE9A0: } L_089EE9B8: aot_gpr_31 = (0x089EE9C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EE9C0u) goto L_089EE9C0; AOT_REGCACHE_SYNC_OUT(); return; L_089EE9C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089EF0B0; } @@ -5641,7 +5820,6 @@ L_089EE9C0: L_089EE9C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089EEA28; } @@ -5649,12 +5827,10 @@ L_089EE9C8: } L_089EE9D4: aot_gpr_31 = (0x089EE9DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EE9DCu) goto L_089EE9DC; AOT_REGCACHE_SYNC_OUT(); return; L_089EE9DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EEA14; } @@ -5662,14 +5838,12 @@ L_089EE9DC: } L_089EE9E4: aot_gpr_31 = (0x089EE9ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EE9ECu) goto L_089EE9EC; AOT_REGCACHE_SYNC_OUT(); return; L_089EE9EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EEA28; } @@ -5677,14 +5851,12 @@ L_089EE9EC: } L_089EE9FC: aot_gpr_31 = (0x089EEA04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EEA04u) goto L_089EEA04; AOT_REGCACHE_SYNC_OUT(); return; L_089EEA04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EEA28; } @@ -5708,7 +5880,6 @@ L_089EEA28: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EEA64; } @@ -5717,7 +5888,6 @@ L_089EEA28: L_089EEA38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EEA64; } @@ -5727,7 +5897,6 @@ L_089EEA44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1921)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EEA64; } @@ -5747,7 +5916,6 @@ L_089EEA64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EEA9C; } @@ -5757,7 +5925,6 @@ L_089EEA74: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 261u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EEA9C; } @@ -5766,7 +5933,6 @@ L_089EEA74: L_089EEA84: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2053))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EEA9C; } @@ -5781,7 +5947,6 @@ L_089EEA9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EEAB4; } @@ -5795,7 +5960,6 @@ L_089EEAB4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2053), static_cast(ctx.gpr[20])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2053))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF0A8; } @@ -5843,7 +6007,6 @@ L_089EEADC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EEB80; } @@ -6058,9 +6221,7 @@ L_089EEC10: aot_gpr_4 = (17008u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EECA0; } @@ -6078,7 +6239,6 @@ L_089EECA0: aot_gpr_4 = (16928u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16800u << 16u); if (branch_taken) { @@ -6115,7 +6275,6 @@ L_089EECD4: ctx.fpr[17] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; if (branch_taken) { @@ -6127,9 +6286,7 @@ L_089EED14: aot_gpr_4 = (16964u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EED3C; } @@ -6150,7 +6307,6 @@ L_089EED3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2048))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[21] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EED84; } @@ -6167,7 +6323,6 @@ L_089EED50: AOT_REGCACHE_SYNC_OUT(); return; L_089EED68: aot_gpr_31 = (0x089EED70u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EED70u) goto L_089EED70; AOT_REGCACHE_SYNC_OUT(); return; L_089EED70: @@ -6179,7 +6334,6 @@ L_089EED70: goto L_089EED84; L_089EED84: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089EF0A8; } @@ -6188,7 +6342,6 @@ L_089EED84: L_089EED8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF0A8; } @@ -6198,9 +6351,7 @@ L_089EED98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF0A8; } @@ -6208,14 +6359,12 @@ L_089EED98: } L_089EEDB0: aot_gpr_31 = (0x089EEDB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EEDB8u) goto L_089EEDB8; AOT_REGCACHE_SYNC_OUT(); return; L_089EEDB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); aot_gpr_5 = (aot_gpr_4 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EEE08; } @@ -6227,11 +6376,20 @@ L_089EEDC8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-1800))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EEDE0: ctx.gpr[17] = (15u << 16u); { const bool branch_taken = 0u == 0u; @@ -6270,12 +6428,10 @@ L_089EEE04: goto L_089EEE08; L_089EEE08: aot_gpr_31 = (0x089EEE10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EEE10u) goto L_089EEE10; AOT_REGCACHE_SYNC_OUT(); return; L_089EEE10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EEE28; } @@ -6289,12 +6445,10 @@ L_089EEE18: goto L_089EEE28; L_089EEE28: aot_gpr_31 = (0x089EEE30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EEE30u) goto L_089EEE30; AOT_REGCACHE_SYNC_OUT(); return; L_089EEE30: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_089EEE3C; } @@ -6305,14 +6459,12 @@ L_089EEE38: goto L_089EEE3C; L_089EEE3C: aot_gpr_31 = (0x089EEE44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EEE44u) goto L_089EEE44; AOT_REGCACHE_SYNC_OUT(); return; L_089EEE44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EF09C; } @@ -6384,7 +6536,6 @@ L_089EEE54: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EEF08; } @@ -6396,7 +6547,6 @@ L_089EEEB0: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EEF08; } @@ -6418,7 +6568,6 @@ L_089EEEC8: AOT_REGCACHE_SYNC_OUT(); return; L_089EEEF4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089EEF08; } @@ -6435,7 +6584,6 @@ L_089EEF08: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF094; } @@ -6446,7 +6594,6 @@ L_089EEF20: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF094; } @@ -6629,7 +6776,6 @@ L_089EF038: AOT_REGCACHE_SYNC_OUT(); return; L_089EF050: aot_gpr_31 = (0x089EF058u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EF058u) goto L_089EF058; AOT_REGCACHE_SYNC_OUT(); return; L_089EF058: @@ -6638,9 +6784,7 @@ L_089EF058: aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9936))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF088; } @@ -6663,7 +6807,6 @@ L_089EF088: goto L_089EF094; L_089EF094: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EF0A8; } @@ -6676,7 +6819,6 @@ L_089EF09C: goto L_089EF0A8; L_089EF0A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EF0B4; } @@ -6688,7 +6830,6 @@ L_089EF0B0: L_089EF0B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089EF0D4; } @@ -6697,7 +6838,6 @@ L_089EF0B4: L_089EF0C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1969))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089EF0D4; } @@ -6802,7 +6942,6 @@ L_089EF128: L_089EF160: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(1970))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EF1C0; } @@ -6895,7 +7034,6 @@ L_089EF1C0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EF0F8; } @@ -6908,7 +7046,6 @@ L_089EF1D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF1EC; } @@ -6938,7 +7075,17 @@ L_089EF1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EF230: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), ctx.gpr[17]); @@ -6973,7 +7120,6 @@ L_089EF270: AOT_REGCACHE_SYNC_OUT(); return; L_089EF278: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089EF29C; } @@ -6985,7 +7131,6 @@ L_089EF280: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EF29C; } @@ -6996,7 +7141,6 @@ L_089EF298: goto L_089EF29C; L_089EF29C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089EF300; } @@ -7040,7 +7184,6 @@ L_089EF2C4: } L_089EF2F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EF37C; } @@ -7091,7 +7234,6 @@ L_089EF350: AOT_REGCACHE_SYNC_OUT(); return; L_089EF364: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EF3DC; } @@ -7131,7 +7273,6 @@ L_089EF39C: AOT_REGCACHE_SYNC_OUT(); return; L_089EF3B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EF3C4; } @@ -7169,9 +7310,7 @@ L_089EF3E4: L_089EF3EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF52C; } @@ -7254,7 +7393,6 @@ L_089EF400: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089EF484; @@ -7262,7 +7400,6 @@ L_089EF400: goto L_089EF484; L_089EF484: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089EF494; @@ -7355,7 +7492,6 @@ L_089EF494: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089EF514; @@ -7364,7 +7500,6 @@ L_089EF494: L_089EF514: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089EF528; @@ -7385,7 +7520,6 @@ L_089EF52C: L_089EF544: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF5B8; } @@ -7393,7 +7527,6 @@ L_089EF544: } L_089EF550: aot_gpr_31 = (0x089EF558u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EF558u) goto L_089EF558; AOT_REGCACHE_SYNC_OUT(); return; L_089EF558: @@ -7420,9 +7553,7 @@ L_089EF560: aot_gpr_5 = (aot_gpr_5 | 23593u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF5B8; } @@ -7456,9 +7587,7 @@ L_089EF5B8: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF5F8; } @@ -7491,7 +7620,17 @@ L_089EF5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089EF61C: aot_gpr_29 = (aot_gpr_29 + static_cast(-688)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(636), aot_gpr_16); @@ -7512,7 +7651,6 @@ L_089EF61C: AOT_REGCACHE_SYNC_OUT(); return; L_089EF66C: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089EF698; } @@ -7520,7 +7658,6 @@ L_089EF66C: } L_089EF674: aot_gpr_31 = (0x089EF67Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089EF67Cu) goto L_089EF67C; AOT_REGCACHE_SYNC_OUT(); return; L_089EF67C: @@ -7532,7 +7669,6 @@ L_089EF684: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(208))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EF698; } @@ -7545,7 +7681,6 @@ L_089EF698: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EF6B4; } @@ -7592,9 +7727,7 @@ L_089EF6EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9932))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFCA8; } @@ -7625,7 +7758,6 @@ L_089EF734: aot_gpr_6 = (1024u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EF7AC; } @@ -7639,7 +7771,6 @@ L_089EF748: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EF7AC; } @@ -7649,9 +7780,7 @@ L_089EF768: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1936))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF798; } @@ -7678,7 +7807,6 @@ L_089EF798: goto L_089EF7AC; L_089EF7AC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089EF89C; } @@ -7688,7 +7816,6 @@ L_089EF7B4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(617)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089EF89C; } @@ -7697,7 +7824,6 @@ L_089EF7B4: L_089EF7C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EF89C; } @@ -7705,7 +7831,6 @@ L_089EF7C4: } L_089EF7D0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_089EF89C; } @@ -7717,9 +7842,7 @@ L_089EF7D8: aot_gpr_5 = (aot_gpr_5 | 18350u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF89C; } @@ -7729,7 +7852,6 @@ L_089EF7F8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EF828; } @@ -7743,7 +7865,6 @@ L_089EF808: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EF89C; } @@ -7762,7 +7883,6 @@ L_089EF834: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_6 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089EF860; } @@ -7816,7 +7936,6 @@ L_089EF89C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(617)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089EF9A0; } @@ -7828,9 +7947,7 @@ L_089EF8AC: aot_gpr_5 = (aot_gpr_5 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF9A0; } @@ -7840,7 +7957,6 @@ L_089EF8CC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(618)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089EF900; } @@ -7861,7 +7977,6 @@ L_089EF8DC: AOT_REGCACHE_SYNC_OUT(); return; L_089EF8F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EF9A0; } @@ -7877,7 +7992,6 @@ L_089EF900: goto L_089EF910; L_089EF910: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EF984; } @@ -7889,9 +8003,7 @@ L_089EF918: L_089EF91C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF984; } @@ -7904,9 +8016,7 @@ L_089EF930: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF984; } @@ -7916,9 +8026,7 @@ L_089EF954: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(324))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF984; } @@ -7928,9 +8036,7 @@ L_089EF96C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(328))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EF9A0; } @@ -7955,9 +8061,7 @@ L_089EF9A0: aot_gpr_4 = (aot_gpr_4 | 49808u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFC18; } @@ -7966,7 +8070,6 @@ L_089EF9A0: L_089EF9C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1312))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFC18; } @@ -8023,7 +8126,6 @@ L_089EFA20: L_089EFA38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFA50; } @@ -8042,9 +8144,7 @@ L_089EFA50: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFB30; } @@ -8064,7 +8164,6 @@ L_089EFA7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EFA9C; } @@ -8084,7 +8183,6 @@ L_089EFA9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-995)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089EFABC; } @@ -8094,7 +8192,6 @@ L_089EFAAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u | 263u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EFACC; } @@ -8114,7 +8211,6 @@ L_089EFACC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EFAE4; } @@ -8137,7 +8233,6 @@ L_089EFAF4: aot_gpr_5 = (0u | 192u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EFB30; } @@ -8184,7 +8279,6 @@ L_089EFB40: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EFBC0; } @@ -8198,9 +8292,7 @@ L_089EFB58: aot_gpr_4 = (aot_gpr_4 | 49808u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFBC0; } @@ -8230,7 +8322,6 @@ L_089EFB74: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089EFBB0; @@ -8243,7 +8334,6 @@ L_089EFBB0: AOT_REGCACHE_SYNC_OUT(); return; L_089EFBB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089EFBF4; } @@ -8254,7 +8344,6 @@ L_089EFBC0: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089EFBF4; } @@ -8286,7 +8375,6 @@ L_089EFBF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFC18; } @@ -8295,7 +8383,6 @@ L_089EFBF4: L_089EFC04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFC18; } @@ -8318,7 +8405,6 @@ L_089EFC20: AOT_REGCACHE_SYNC_OUT(); return; L_089EFC28: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089EFC48; } @@ -8336,7 +8422,6 @@ L_089EFC38: AOT_REGCACHE_SYNC_OUT(); return; L_089EFC40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089EFC50; } @@ -8350,7 +8435,6 @@ L_089EFC48: L_089EFC50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_089EFCA8; } @@ -8371,7 +8455,6 @@ L_089EFC6C: aot_gpr_4 = (aot_gpr_4 | 45613u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15248u << 16u); if (branch_taken) { @@ -8384,9 +8467,7 @@ L_089EFC88: aot_gpr_4 = (aot_gpr_4 | 11744u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFCA8; } @@ -8398,7 +8479,6 @@ L_089EFCA4: L_089EFCA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFCBC; } @@ -8406,7 +8486,6 @@ L_089EFCA8: } L_089EFCB4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089EFD90; } @@ -8420,7 +8499,6 @@ L_089EFCBC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFD90; } @@ -8438,7 +8516,6 @@ L_089EFCDC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1640))); { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u + static_cast(-972)); if (branch_taken) { @@ -8466,7 +8543,6 @@ L_089EFD30: L_089EFD38: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_089EFD90; } @@ -8487,7 +8563,6 @@ L_089EFD54: aot_gpr_4 = (aot_gpr_4 | 45613u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15248u << 16u); if (branch_taken) { @@ -8500,9 +8575,7 @@ L_089EFD70: aot_gpr_4 = (aot_gpr_4 | 11744u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFD90; } @@ -8513,7 +8586,6 @@ L_089EFD8C: goto L_089EFD90; L_089EFD90: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089EFF88; } @@ -8522,7 +8594,6 @@ L_089EFD90: L_089EFD98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1312))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFF88; } @@ -8572,9 +8643,7 @@ L_089EFDA4: aot_gpr_4 = (17352u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFF88; } @@ -8589,9 +8658,7 @@ L_089EFDF0: aot_gpr_4 = (aot_gpr_4 | 2706u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFF88; } @@ -8717,7 +8784,6 @@ L_089EFE84: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_089EFED0; @@ -8767,9 +8833,7 @@ L_089EFED0: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089EFF40; } @@ -8815,7 +8879,6 @@ L_089EFF64: L_089EFF68: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFF88; } @@ -8824,7 +8887,6 @@ L_089EFF68: L_089EFF74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089EFF88; } @@ -8839,7 +8901,6 @@ L_089EFF88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u | 173u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0123_entry, 123u, 12u, 0x089F015Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8849,7 +8910,6 @@ L_089EFF98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0123_entry, 123u, 12u, 0x089F015Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0123.cpp b/profiles/vcs/generated/generated_unit_0123.cpp index 1edc71a..bc39383 100644 --- a/profiles/vcs/generated/generated_unit_0123.cpp +++ b/profiles/vcs/generated/generated_unit_0123.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0123[4085] = { - 1, 0, 0, 0, 2, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 25, 0, 0, 26, - 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, - 0, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, - 0, 40, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, - 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 50, 51, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, - 53, 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 56, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 60, 0, 0, 0, 0, 61, 62, 0, 0, 0, 0, 63, 64, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 68, 69, 0, - 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 73, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 77, 78, - 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 0, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 86, - 87, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 91, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, - 95, 96, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 0, 99, 0, 100, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 103, - 0, 104, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 109, 0, 0, 110, 0, 111, 0, 0, - 0, 112, 0, 0, 113, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 119, 0, 120, 0, 121, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, - 0, 134, 0, 135, 0, 136, 0, 137, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 148, 0, 149, 150, 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 153, 0, 154, 0, 155, 0, 0, 0, 156, 0, 0, - 157, 0, 158, 159, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, - 163, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 166, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 170, 0, 171, 0, 172, 0, 173, 0, - 0, 0, 174, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, - 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 0, 182, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, - 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, - 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, - 214, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 222, 0, 0, 223, - 224, 0, 225, 0, 226, 227, 0, 0, 228, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, 0, 0, 234, 0, 0, - 0, 0, 235, 0, 236, 0, 0, 237, 0, 0, 238, 0, 239, 0, 0, 240, 0, 241, 0, 0, 242, 0, 243, 0, 0, 244, 0, 0, 0, 0, 245, 0, - 0, 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 255, 256, 0, 0, 0, 257, 0, 0, 0, 258, 0, - 0, 259, 0, 0, 0, 0, 260, 0, 261, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, - 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, - 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 279, 0, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 285, 0, 0, 286, 0, 0, 287, 288, 0, 289, 0, 0, - 290, 0, 0, 291, 0, 0, 292, 293, 294, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, - 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, - 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 309, 0, 0, 0, 310, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, - 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 323, 324, 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, - 337, 0, 338, 0, 339, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 353, 0, 354, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, - 0, 0, 0, 360, 0, 0, 0, 361, 362, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, - 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 377, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, - 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 0, 0, 0, 0, 382, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, - 0, 388, 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 393, 0, - 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 0, 398, - 0, 0, 399, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, - 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 414, 0, 0, 415, - 0, 416, 0, 417, 0, 418, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 422, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 438, 0, 0, - 0, 439, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 0, 443, 444, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 0, 450, 451, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 453, 0, 454, 0, 455, 456, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 459, - 460, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 470, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 472, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, - 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 485, 0, 486, 0, 0, 487, 0, 488, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, - 0, 493, 0, 494, 0, 0, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 499, 0, 0, 500, 0, 501, 0, 0, 0, 0, 502, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, - 508, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 511, 0, 0, 512, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 515, 0, 0, 0, 0, 516, 517, 0, 0, 0, 0, 518, 519, 0, 0, 0, - 0, 520, 521, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 526, 0, 527, 0, 0, 0, - 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 532, 0, 0, - 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 536, 0, 537, - 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, - 0, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 552, 553, 0, 0, 0, - 0, 554, 0, 555, 0, 0, 0, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, - 0, 0, 0, 560, 0, 0, 0, 561, 0, 0, 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 565, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 569, 0, 570, - 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 580, 0, 581, 0, 582, 0, 0, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 585, - 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 590, 0, 0, 0, 591, 0, 592, 0, - 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 600, - 0, 0, 0, 601, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, 0, 605, 0, 606, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 618, 619, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, - 623, 0, 0, 0, 624, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, - 0, 0, 632, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, - 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 638, 639, 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 643, 0, - 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 650, 0, 0, 0, 0, - 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 662, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0123[64] = { + 0x0001010000108151ull, 0x0200008000810408ull, 0x880000000A410220ull, 0x4444511090400200ull, + 0x8820009210804220ull, 0x04011861080C8888ull, 0xD10942106884C308ull, 0x44250841A2128420ull, + 0x29420106884A1083ull, 0x008AA20200800052ull, 0xAA80840041100080ull, 0x00901028021421AAull, + 0x1040080D22A441A0ull, 0x0100005455122A11ull, 0x4210842240080011ull, 0x0001080014822108ull, + 0x0500894012044088ull, 0x98A2108928000808ull, 0x4252949421488935ull, 0x4460248000A10842ull, + 0x4028220040110542ull, 0x0805060281100A04ull, 0x000011C92C920001ull, 0x0000002040810000ull, + 0x0891282840204204ull, 0x0220040082504028ull, 0x0000010010441560ull, 0x1020000002004020ull, + 0x0008000020109055ull, 0x0201082A00222881ull, 0x0801018810008000ull, 0x0080960010000000ull, + 0x0048000821000800ull, 0x2000C11008000082ull, 0x0000000000000080ull, 0x4400284201400000ull, + 0x0000002489200002ull, 0x4008001104000000ull, 0x1000280000080200ull, 0x9280000000100000ull, + 0x02120109000010AAull, 0x2904202008480424ull, 0xC50000A00008C452ull, 0x000092118216A400ull, + 0x0092480900000000ull, 0x4804022400000000ull, 0x0A20020029504155ull, 0x290490A400010A8Aull, + 0x1861800001260201ull, 0x2800012414480096ull, 0x400A2004A8010008ull, 0x1902409024080008ull, + 0x05000C888008220Aull, 0x00244020A9001000ull, 0x0000100000148000ull, 0x5122201080505440ull, + 0x00A8484888902848ull, 0x0820024050020010ull, 0x400024000C500000ull, 0x4000102002900031ull, + 0x44088C4088200104ull, 0x0880880100000810ull, 0x0080810008220004ull, 0x0011001000204000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0123[64] = { + 1u, 9u, 15u, 23u, 35u, 46u, 60u, 79u, 95u, 112u, 123u, 134u, 148u, 163u, 178u, 189u, + 198u, 210u, 224u, 246u, 259u, 271u, 283u, 296u, 300u, 313u, 323u, 332u, 337u, 346u, 358u, 365u, + 371u, 377u, 385u, 386u, 394u, 401u, 406u, 411u, 416u, 427u, 439u, 452u, 465u, 472u, 478u, 493u, + 508u, 520u, 533u, 543u, 554u, 566u, 575u, 579u, 593u, 608u, 616u, 623u, 632u, 644u, 651u, 658u, }; void recomp_unit_0123_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0123_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089F0000u; - entry_id = (entry_delta < 16340u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0123[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16340u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0123[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0123[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089F0000; @@ -850,7 +757,6 @@ L_089F0010: AOT_REGCACHE_SYNC_OUT(); return; L_089F0018: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F015C; } @@ -863,7 +769,6 @@ L_089F0020: aot_gpr_4 = (aot_gpr_4 + static_cast(90)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F015C; } @@ -1039,7 +944,17 @@ L_089F015C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F019C: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -1079,7 +994,6 @@ L_089F0224: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2053))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F02EC; } @@ -1089,9 +1003,7 @@ L_089F0240: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2040))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F02EC; } @@ -1105,7 +1017,6 @@ L_089F0258: AOT_REGCACHE_SYNC_OUT(); return; L_089F0264: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F02EC; } @@ -1195,7 +1106,6 @@ L_089F02EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(616)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F03D8; } @@ -1249,9 +1159,7 @@ L_089F0370: L_089F037C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1620))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F03B0; } @@ -1301,7 +1209,6 @@ L_089F03D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-972)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F04EC; } @@ -1322,9 +1229,7 @@ L_089F03F8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F04EC; } @@ -1397,7 +1302,6 @@ L_089F049C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089F04D4; @@ -1486,9 +1390,7 @@ L_089F056C: L_089F0580: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1944))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F05B0; } @@ -1500,9 +1402,7 @@ L_089F0594: L_089F0598: aot_fpr_12 = aot_fpr_12 + ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F0598; } @@ -1551,9 +1451,7 @@ L_089F05E8: L_089F060C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1948))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F063C; } @@ -1565,9 +1463,7 @@ L_089F0620: L_089F0624: aot_fpr_12 = aot_fpr_12 - ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F0624; } @@ -1579,7 +1475,6 @@ L_089F0638: L_089F063C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1312))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F06C0; } @@ -1661,7 +1556,6 @@ L_089F06B8: L_089F06C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1316))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0744; } @@ -1743,7 +1637,6 @@ L_089F073C: L_089F0744: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F07C8; } @@ -1825,7 +1718,6 @@ L_089F07C0: L_089F07C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1324))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F084C; } @@ -1907,7 +1799,6 @@ L_089F0844: L_089F084C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1328))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F08E0; } @@ -2005,7 +1896,6 @@ L_089F08F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0918; } @@ -2014,7 +1904,6 @@ L_089F08F4: L_089F0904: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0918; } @@ -2049,7 +1938,17 @@ L_089F0918: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F095C: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(440))); @@ -2081,7 +1980,6 @@ L_089F0984: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1969))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0B0C; } @@ -2091,7 +1989,6 @@ L_089F09A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F0B04; } @@ -2104,7 +2001,6 @@ L_089F09B4: AOT_REGCACHE_SYNC_OUT(); return; L_089F09BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F0AFC; } @@ -2112,7 +2008,6 @@ L_089F09BC: } L_089F09C4: aot_gpr_31 = (0x089F09CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F09CCu) goto L_089F09CC; AOT_REGCACHE_SYNC_OUT(); return; L_089F09CC: @@ -2166,9 +2061,7 @@ L_089F09DC: aot_gpr_4 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F0AEC; } @@ -2193,7 +2086,6 @@ L_089F0A1C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (ctx.gpr[17] | 0u); if (branch_taken) { @@ -2295,7 +2187,6 @@ L_089F0ABC: aot_fpr_12 = aot_fpr_12 - aot_fpr_20; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_089F0B1C; @@ -2371,9 +2262,7 @@ L_089F0B1C: L_089F0B20: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F0C64; } @@ -2392,7 +2281,6 @@ L_089F0B34: AOT_REGCACHE_SYNC_OUT(); return; L_089F0B48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F0B64; } @@ -2401,9 +2289,7 @@ L_089F0B48: L_089F0B50: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F0C64; } @@ -2435,7 +2321,6 @@ L_089F0B64: AOT_REGCACHE_SYNC_OUT(); return; L_089F0B8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F0C64; } @@ -2491,7 +2376,6 @@ L_089F0BDC: goto L_089F0C14; L_089F0C14: aot_gpr_31 = (0x089F0C1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F0C1Cu) goto L_089F0C1C; AOT_REGCACHE_SYNC_OUT(); return; L_089F0C1C: @@ -2510,7 +2394,6 @@ L_089F0C38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0C5C; } @@ -2519,7 +2402,6 @@ L_089F0C38: L_089F0C48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0C5C; } @@ -2542,7 +2424,6 @@ L_089F0C64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0C88; } @@ -2551,7 +2432,6 @@ L_089F0C64: L_089F0C74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0C88; } @@ -2580,7 +2460,17 @@ L_089F0C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F0CAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -2603,7 +2493,6 @@ L_089F0CD8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0D00; } @@ -2619,7 +2508,6 @@ L_089F0D00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0D2C; } @@ -2638,7 +2526,6 @@ L_089F0D10: } L_089F0D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F0D34; } @@ -2646,7 +2533,6 @@ L_089F0D24: } L_089F0D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F110C; } @@ -2656,7 +2542,6 @@ L_089F0D34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F0D60; } @@ -2665,7 +2550,6 @@ L_089F0D34: L_089F0D44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089F0D60; } @@ -2675,7 +2559,6 @@ L_089F0D50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F0D78; } @@ -2683,7 +2566,6 @@ L_089F0D50: } L_089F0D60: aot_gpr_31 = (0x089F0D68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F0D68u) goto L_089F0D68; AOT_REGCACHE_SYNC_OUT(); return; L_089F0D68: @@ -2696,7 +2578,6 @@ L_089F0D68: } L_089F0D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F0D88; } @@ -2714,12 +2595,10 @@ L_089F0D78: } L_089F0D88: aot_gpr_31 = (0x089F0D90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F0D90u) goto L_089F0D90; AOT_REGCACHE_SYNC_OUT(); return; L_089F0D90: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_089F0E00; } @@ -2798,7 +2677,6 @@ L_089F0E4C: L_089F0E78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089F0F70; } @@ -2808,7 +2686,6 @@ L_089F0E84: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F0F70; } @@ -2897,7 +2774,6 @@ L_089F0F44: L_089F0F5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F0F70; } @@ -2970,7 +2846,6 @@ L_089F100C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1038; } @@ -2989,7 +2864,6 @@ L_089F1038: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1064; } @@ -3031,7 +2905,6 @@ L_089F1098: L_089F10A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_089F10BC; } @@ -3041,7 +2914,6 @@ L_089F10AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F10E8; } @@ -3061,7 +2933,6 @@ L_089F10BC: AOT_REGCACHE_SYNC_OUT(); return; L_089F10E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F110C; } @@ -3094,7 +2965,17 @@ L_089F110C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F112C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -3124,7 +3005,6 @@ L_089F1174: L_089F1180: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(9688))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089F11C4; } @@ -3145,7 +3025,6 @@ L_089F119C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(72))); aot_gpr_6 = (aot_gpr_6 & ctx.gpr[19]); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089F11C4; } @@ -3156,7 +3035,6 @@ L_089F11B0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(617)))))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089F11C4; } @@ -3174,14 +3052,12 @@ L_089F11C4: } L_089F11D4: aot_gpr_31 = (0x089F11DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F11DCu) goto L_089F11DC; AOT_REGCACHE_SYNC_OUT(); return; L_089F11DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_4 = (ctx.gpr[2] | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F11F0; } @@ -3193,7 +3069,6 @@ L_089F11EC: L_089F11F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-9980))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F1200; } @@ -3204,7 +3079,6 @@ L_089F11FC: goto L_089F1200; L_089F1200: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_089F1210; } @@ -3212,7 +3086,6 @@ L_089F1200: } L_089F1208: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089F1214; } @@ -3229,7 +3102,6 @@ L_089F1214: L_089F1220: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(9688))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089F123C; } @@ -3239,7 +3111,6 @@ L_089F122C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(9688))); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(86)))))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_089F123C; } @@ -3263,7 +3134,6 @@ L_089F124C: AOT_REGCACHE_SYNC_OUT(); return; L_089F1258: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F12E4; } @@ -3274,7 +3144,6 @@ L_089F1260: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F12E4; } @@ -3293,7 +3162,6 @@ L_089F1274: } L_089F1288: aot_gpr_31 = (0x089F1290u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F1290u) goto L_089F1290; AOT_REGCACHE_SYNC_OUT(); return; L_089F1290: @@ -3326,7 +3194,6 @@ L_089F12B0: AOT_REGCACHE_SYNC_OUT(); return; L_089F12BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F12E4; } @@ -3335,7 +3202,6 @@ L_089F12BC: L_089F12C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9692))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F12E4; } @@ -3365,7 +3231,6 @@ L_089F12E4: L_089F12F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(9688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F13D8; } @@ -3376,7 +3241,6 @@ L_089F1304: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F132C; } @@ -3387,7 +3251,6 @@ L_089F1318: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1340; } @@ -3409,7 +3272,6 @@ L_089F1340: aot_gpr_4 = (aot_gpr_4 + static_cast(384)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(149)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_089F13D8; } @@ -3461,9 +3323,7 @@ L_089F135C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F13D8; } @@ -3478,7 +3338,6 @@ L_089F139C: L_089F13A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(9688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F13D4; } @@ -3519,7 +3378,6 @@ L_089F13E8: L_089F13F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(9688))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089F1440; } @@ -3530,7 +3388,6 @@ L_089F1404: aot_gpr_6 = (aot_gpr_6 + static_cast(384)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(149)))))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_089F1440; } @@ -3585,7 +3442,17 @@ L_089F1450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F1478: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3622,7 +3489,6 @@ L_089F14B4: AOT_REGCACHE_SYNC_OUT(); return; L_089F14CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089F14F8; } @@ -3646,7 +3512,6 @@ L_089F14F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(628)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F15EC; } @@ -3666,7 +3531,6 @@ L_089F1508: AOT_REGCACHE_SYNC_OUT(); return; L_089F1524: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089F1550; } @@ -3690,7 +3554,6 @@ L_089F1550: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(628)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F15EC; } @@ -3745,7 +3608,6 @@ L_089F15A8: AOT_REGCACHE_SYNC_OUT(); return; L_089F15C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089F15EC; } @@ -3777,7 +3639,17 @@ L_089F15EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F1600: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -3875,7 +3747,6 @@ L_089F16A0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x089F16B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F16B0u) goto L_089F16B0; AOT_REGCACHE_SYNC_OUT(); return; L_089F16B0: @@ -3916,9 +3787,7 @@ L_089F16B0: aot_gpr_4 = (50454u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F1794; } @@ -3929,9 +3798,7 @@ L_089F1740: aot_gpr_4 = (17608u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F1794; } @@ -3942,9 +3809,7 @@ L_089F175C: aot_gpr_4 = (50426u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F1794; } @@ -3955,7 +3820,6 @@ L_089F1778: aot_gpr_4 = (17658u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); goto L_089F1808; @@ -4020,7 +3884,6 @@ L_089F1808: L_089F1824: aot_fpr_12 = ctx.fpr[0] + ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_089F1838; @@ -4052,7 +3915,6 @@ L_089F1878: aot_gpr_5 = (ctx.gpr[28] + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(9688))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089F1894; } @@ -4060,7 +3922,6 @@ L_089F1878: } L_089F188C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F18AC; } @@ -4072,7 +3933,6 @@ L_089F1894: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 24u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089F1878; } @@ -4080,7 +3940,6 @@ L_089F1894: } L_089F18AC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089F18DC; } @@ -4161,7 +4020,6 @@ L_089F1950: L_089F1958: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F197C; } @@ -4193,7 +4051,17 @@ L_089F197C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F19A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-576)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -4229,7 +4097,6 @@ L_089F19E4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1A18; } @@ -4250,7 +4117,6 @@ L_089F1A20: AOT_REGCACHE_SYNC_OUT(); return; L_089F1A28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F1C00; } @@ -4262,7 +4128,6 @@ L_089F1A30: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1C00; } @@ -4321,7 +4186,6 @@ L_089F1A70: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089F1AA0; @@ -4459,7 +4323,6 @@ L_089F1B38: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089F1B64; @@ -4580,7 +4443,6 @@ L_089F1C08: AOT_REGCACHE_SYNC_OUT(); return; L_089F1C10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F1D2C; } @@ -4592,7 +4454,6 @@ L_089F1C18: aot_gpr_4 = (aot_gpr_4 + static_cast(60)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1D2C; } @@ -4601,7 +4462,6 @@ L_089F1C18: L_089F1C30: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F1D2C; } @@ -4742,7 +4602,6 @@ L_089F1D1C: } L_089F1D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F1E9C; } @@ -4752,7 +4611,6 @@ L_089F1D34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 263u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F1E9C; } @@ -4790,7 +4648,6 @@ L_089F1D84: AOT_REGCACHE_SYNC_OUT(); return; L_089F1D8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F1E9C; } @@ -4802,7 +4659,6 @@ L_089F1D94: aot_gpr_4 = (aot_gpr_4 + static_cast(40)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F1E9C; } @@ -4959,7 +4815,17 @@ L_089F1EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F1EC0: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (16537u << 16u); @@ -4975,7 +4841,17 @@ L_089F1EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F1EEC: aot_fpr_13 = aot_fpr_12 / aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -5011,7 +4887,17 @@ L_089F1EEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F1F70: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[19]); @@ -5140,7 +5026,17 @@ L_089F208C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F20CC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); jump_target = aot_gpr_31; @@ -5148,7 +5044,17 @@ L_089F20CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F20D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -5167,7 +5073,6 @@ L_089F2104: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -5214,7 +5119,6 @@ L_089F216C: goto L_089F2190; L_089F2190: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (std::bit_cast(aot_fpr_12)); goto L_089F21BC; @@ -5224,7 +5128,6 @@ L_089F21A0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1404))); goto L_089F221C; @@ -5245,7 +5148,6 @@ L_089F21BC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1404))); goto L_089F221C; @@ -5349,14 +5251,34 @@ L_089F221C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F2358: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F2360: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5386,14 +5308,34 @@ L_089F2398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F23AC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(5808), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F23B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -5401,13 +5343,10 @@ L_089F23B4: { const std::uint32_t dividend = aot_gpr_6; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_6 = (0u | 6u); aot_gpr_5 = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.gpr[7] = (ctx.hi); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089F23F8; } @@ -5417,7 +5356,6 @@ L_089F23E8: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); aot_gpr_31 = (0x089F23F8u); - // nop goto L_089F2750; L_089F23F8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5426,7 +5364,17 @@ L_089F23F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F2404: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5450,7 +5398,6 @@ L_089F2404: L_089F2454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2590; } @@ -5459,7 +5406,6 @@ L_089F2454: L_089F2460: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1920))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_089F247C; } @@ -5478,7 +5424,6 @@ L_089F246C: L_089F247C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2494; } @@ -5554,7 +5499,6 @@ L_089F2494: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2580; } @@ -5614,7 +5558,17 @@ L_089F25CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F25F8: ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(32), std::bit_cast(aot_fpr_12)); @@ -5623,7 +5577,6 @@ L_089F25F8: aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(36), aot_run_words); } aot_fpr_12 = ctx.fpr[15] - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089F2624; @@ -5643,7 +5596,17 @@ L_089F2624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F264C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); @@ -5666,7 +5629,6 @@ L_089F264C: aot_fpr_13 = aot_fpr_13 + aot_fpr_12; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089F26AC; @@ -5678,7 +5640,17 @@ L_089F26AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F26B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5764,7 +5736,17 @@ L_089F26F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F2750: aot_gpr_29 = (aot_gpr_29 + static_cast(-8576)); aot_gpr_6 = (aot_gpr_5 << 4u); @@ -5801,7 +5783,6 @@ L_089F2750: } L_089F27DC: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_089F281C; } @@ -5827,7 +5808,6 @@ L_089F27F0: } L_089F27FC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089F2814; } @@ -5835,7 +5815,6 @@ L_089F27FC: } L_089F2804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F281C; } @@ -6044,7 +6023,6 @@ L_089F29E0: } L_089F29EC: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089F2A38; } @@ -6071,7 +6049,6 @@ L_089F2A04: } L_089F2A10: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2A38; } @@ -6126,7 +6103,6 @@ L_089F2A4C: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[26] = ctx.fpr[26] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -6136,7 +6112,6 @@ L_089F2A4C: } L_089F2A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F2D94; } @@ -6157,7 +6132,6 @@ L_089F2A9C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8456), aot_gpr_5); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8452), aot_gpr_4); if (branch_taken) { @@ -6167,7 +6141,6 @@ L_089F2A9C: } L_089F2AE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F2D94; } @@ -6195,9 +6168,7 @@ L_089F2AFC: aot_gpr_6 = (ctx.gpr[7] + aot_gpr_6); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F2B44; } @@ -6206,7 +6177,6 @@ L_089F2AFC: L_089F2B28: aot_gpr_6 = (aot_gpr_4 + static_cast(-1)); { const bool branch_taken = ctx.gpr[22] != aot_gpr_6; - // nop if (branch_taken) { goto L_089F2B3C; } @@ -6285,7 +6255,6 @@ L_089F2B90: L_089F2BA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2BBC; } @@ -6357,7 +6326,6 @@ L_089F2BBC: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(52), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2C8C; } @@ -6386,7 +6354,6 @@ L_089F2C8C: L_089F2CAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F2CC4; } @@ -6518,7 +6485,6 @@ L_089F2DEC: } L_089F2DF8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089F34E8; } @@ -6526,7 +6492,6 @@ L_089F2DF8: } L_089F2E00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F2E20; } @@ -6542,7 +6507,6 @@ L_089F2E08: } L_089F2E10: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F31F4; } @@ -6550,7 +6514,6 @@ L_089F2E10: } L_089F2E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F34E8; } @@ -6583,7 +6546,6 @@ L_089F2E50: AOT_REGCACHE_SYNC_OUT(); return; L_089F2E58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F2E6C; } @@ -6642,7 +6604,6 @@ L_089F2ED4: } L_089F2EE4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F2FEC; } @@ -6676,7 +6637,6 @@ L_089F2F0C: } L_089F2F1C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F2FBC; } @@ -6684,7 +6644,6 @@ L_089F2F1C: } L_089F2F24: { const bool branch_taken = ctx.gpr[11] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F2FB0; } @@ -6695,7 +6654,6 @@ L_089F2F2C: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2244))); ctx.gpr[2] = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F2FB0; } @@ -6755,9 +6713,7 @@ L_089F2F40: ctx.gpr[2] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[2]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F2FB0; } @@ -6829,7 +6785,6 @@ L_089F2FEC: L_089F2FF4: aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F3168; } @@ -6866,7 +6821,6 @@ L_089F3044: L_089F3048: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_089F3060; } @@ -6956,9 +6910,7 @@ L_089F3060: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F30C0; } @@ -6970,9 +6922,7 @@ L_089F30BC: L_089F30C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F30D8; } @@ -6984,9 +6934,7 @@ L_089F30D4: L_089F30D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F30F0; } @@ -6998,9 +6946,7 @@ L_089F30EC: L_089F30F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3108; } @@ -7016,7 +6962,6 @@ L_089F3108: L_089F3110: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_089F3048; } @@ -7053,7 +6998,6 @@ L_089F3158: goto L_089F3168; L_089F3168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F34E8; } @@ -7108,7 +7052,6 @@ L_089F31A0: } L_089F31EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F34E8; } @@ -7156,7 +7099,6 @@ L_089F3240: goto L_089F326C; L_089F326C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_089F32C4; } @@ -7164,7 +7106,6 @@ L_089F326C: } L_089F3274: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089F32C4; } @@ -7173,7 +7114,6 @@ L_089F3274: L_089F327C: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_089F32B4; } @@ -7248,7 +7188,6 @@ L_089F330C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(56))); ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(12))); if (branch_taken) { @@ -7261,9 +7200,7 @@ L_089F334C: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8352))); aot_fpr_14 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3374; } @@ -7279,9 +7216,7 @@ L_089F3374: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8356))); aot_fpr_14 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F339C; } @@ -7297,9 +7232,7 @@ L_089F339C: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8336))); aot_fpr_14 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F33C4; } @@ -7315,9 +7248,7 @@ L_089F33C4: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8340))); aot_fpr_14 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F33EC; } @@ -7344,7 +7275,6 @@ L_089F33F0: } L_089F3404: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F3434; } @@ -7386,9 +7316,7 @@ L_089F344C: aot_fpr_12 = aot_fpr_12 / aot_fpr_14; aot_fpr_12 = aot_fpr_12 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F349C; } @@ -7396,9 +7324,7 @@ L_089F344C: } L_089F347C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F349C; } @@ -7443,7 +7369,6 @@ L_089F34AC: } L_089F34E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F34E8; } @@ -7474,7 +7399,17 @@ L_089F34E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3530: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7494,7 +7429,6 @@ L_089F3530: L_089F3560: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F377C; } @@ -7502,7 +7436,6 @@ L_089F3560: } L_089F356C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F3758; } @@ -7510,7 +7443,6 @@ L_089F356C: } L_089F3574: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F377C; } @@ -7522,7 +7454,6 @@ L_089F357C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(472))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F35B8; } @@ -7575,7 +7506,6 @@ L_089F35B8: L_089F35C8: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F3718; } @@ -7641,7 +7571,6 @@ L_089F35D4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(28), std::bit_cast(aot_fpr_13)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F3728; } @@ -7658,7 +7587,6 @@ L_089F363C: } L_089F3648: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F3718; } @@ -7722,7 +7650,6 @@ L_089F3650: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(28), std::bit_cast(aot_fpr_13)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F3728; } @@ -7788,7 +7715,6 @@ L_089F36B0: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(28), std::bit_cast(aot_fpr_13)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F3728; } @@ -7807,7 +7733,6 @@ L_089F3728: AOT_REGCACHE_SYNC_OUT(); return; L_089F3730: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F3750; } @@ -7834,7 +7759,6 @@ L_089F3738: goto L_089F3750; L_089F3750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F377C; } @@ -7882,7 +7806,17 @@ L_089F377C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3790: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (0u | 1u); @@ -7890,7 +7824,6 @@ L_089F3790: ctx.fpr[17] = std::bit_cast(std::bit_cast(aot_fpr_14) & 0x7FFFFFFFu); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); if (branch_taken) { @@ -7910,9 +7843,7 @@ L_089F37B4: } L_089F37C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F37E0; } @@ -7929,9 +7860,7 @@ L_089F37D4: } L_089F37E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F37F8; } @@ -7944,9 +7873,7 @@ L_089F37F0: L_089F37F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3818; } @@ -7964,9 +7891,7 @@ L_089F380C: L_089F3818: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3834; } @@ -7981,9 +7906,7 @@ L_089F3834: ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F385C; } @@ -8000,9 +7923,7 @@ L_089F3850: } L_089F385C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F387C; } @@ -8020,9 +7941,7 @@ L_089F386C: } L_089F387C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3898; } @@ -8036,9 +7955,7 @@ L_089F388C: L_089F3898: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F38B8; } @@ -8056,9 +7973,7 @@ L_089F38AC: L_089F38B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F38D4; } @@ -8070,11 +7985,20 @@ L_089F38CC: goto L_089F38D4; L_089F38D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F38DC: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_fpr_12 = std::bit_cast(0u); @@ -8086,7 +8010,17 @@ L_089F38DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3910: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -8172,7 +8106,17 @@ L_089F39D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F39EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -8212,9 +8156,7 @@ L_089F39EC: ctx.gpr[8] = (49024u << 16u); aot_fpr_12 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3A58; } @@ -8230,9 +8172,7 @@ L_089F3A50: } L_089F3A58: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3A6C; } @@ -8256,9 +8196,7 @@ L_089F3A6C: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3AB4; } @@ -8300,9 +8238,7 @@ L_089F3AB4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3B00; } @@ -8318,9 +8254,7 @@ L_089F3AF8: } L_089F3B00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3B14; } @@ -8344,9 +8278,7 @@ L_089F3B14: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(0), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F3B5C; } @@ -8363,7 +8295,17 @@ L_089F3B5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3B64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8429,7 +8371,17 @@ L_089F3C08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -8499,7 +8451,6 @@ L_089F3CBC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F3CE8; } @@ -8518,7 +8469,6 @@ L_089F3CE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F3D10; } @@ -8546,7 +8496,17 @@ L_089F3D10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(0u); @@ -8584,7 +8544,6 @@ L_089F3D80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F3DDC; } @@ -8675,7 +8634,17 @@ L_089F3E54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3E6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8715,7 +8684,17 @@ L_089F3EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3EDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -8774,7 +8753,17 @@ L_089F3F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F3F90: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8783,7 +8772,6 @@ L_089F3F90: ctx.gpr[17] = (aot_gpr_6 | 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); aot_gpr_31 = (0x089F3FC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 127u, 0x089D89C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F3FC0u) goto L_089F3FC0; AOT_REGCACHE_SYNC_OUT(); return; L_089F3FC0: diff --git a/profiles/vcs/generated/generated_unit_0124.cpp b/profiles/vcs/generated/generated_unit_0124.cpp index 38372e5..c8490a7 100644 --- a/profiles/vcs/generated/generated_unit_0124.cpp +++ b/profiles/vcs/generated/generated_unit_0124.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0124[4071] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 0, 10, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 22, 0, 23, 0, 24, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 30, 0, 31, 0, 32, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 38, 39, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 44, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, - 0, 0, 58, 59, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, - 71, 0, 72, 0, 73, 0, 0, 74, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 79, 0, - 80, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 83, 0, 84, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, - 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 95, 0, 96, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 102, - 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 112, 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 116, 117, 0, 118, 0, 0, 0, 119, 0, 120, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 132, 0, 133, 0, 0, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 140, 0, 141, 0, - 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 145, 0, 146, 0, 0, 147, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, - 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, - 0, 152, 0, 0, 0, 153, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 157, 0, 0, 158, 0, 159, 0, 0, 160, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 163, 0, 0, 0, 164, 0, 165, 0, 0, 0, 0, 166, 0, 167, 168, 0, 169, 0, 0, 0, - 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, - 0, 0, 0, 0, 0, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 0, 0, - 179, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, - 0, 0, 0, 186, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, - 0, 196, 0, 197, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 205, 0, 0, 0, 0, 0, 0, 206, - 0, 0, 207, 0, 208, 209, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, - 214, 0, 0, 215, 0, 216, 0, 217, 0, 218, 0, 0, 219, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 0, 226, 0, 227, 0, 228, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 231, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 0, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, 0, 0, 245, 0, 0, 246, 0, 247, 0, 248, 0, 0, 0, 0, 0, 249, - 0, 0, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 0, - 0, 258, 0, 0, 259, 0, 260, 0, 0, 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, 264, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 267, 0, - 268, 0, 269, 0, 270, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 275, 276, 0, 277, - 0, 278, 279, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, - 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 292, 0, 0, 0, 0, - 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, 302, - 0, 303, 0, 0, 304, 0, 0, 305, 0, 306, 307, 0, 0, 0, 308, 0, 309, 0, 0, 0, 0, 310, 0, 311, 0, 312, 0, 0, 313, 0, 0, 0, - 0, 314, 0, 315, 0, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 0, 319, 0, 0, 320, 0, 321, 322, 0, 0, 0, 323, 0, 324, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, - 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, 0, 334, 0, 0, 335, 0, 336, 0, 337, 338, 0, 339, 0, 340, - 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 342, 343, 0, 344, 0, 0, 345, 0, 0, 346, 0, 347, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, - 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 353, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 357, 358, 0, 0, 0, 0, - 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, 0, - 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 374, 0, 375, - 0, 0, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 380, 0, 381, 382, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 390, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 394, 0, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 397, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, - 0, 0, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, - 419, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, 0, 0, 423, 0, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 0, 431, 0, - 0, 0, 432, 433, 0, 434, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 437, 0, 438, 0, 439, 440, 0, 0, 0, 0, 0, 0, 0, 0, 441, - 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 454, 0, - 455, 0, 456, 0, 0, 457, 0, 458, 0, 0, 459, 0, 460, 0, 0, 461, 0, 462, 0, 0, 463, 0, 464, 0, 0, 465, 0, 466, 0, 0, 467, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 469, 0, 470, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 473, 0, 474, 0, 0, 0, - 0, 0, 0, 475, 0, 476, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 479, 0, 480, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 483, 0, 484, - 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 488, 0, 0, 489, 0, 490, 0, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, - 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 503, 0, 0, 504, 0, - 505, 0, 0, 0, 0, 506, 0, 507, 0, 508, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 514, 0, 515, 0, 0, - 516, 0, 517, 0, 0, 518, 0, 519, 0, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 0, 524, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 527, 0, 0, 0, 0, 528, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 532, 0, 533, 0, 0, - 0, 0, 534, 0, 0, 0, 535, 0, 536, 0, 537, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 542, 0, 543, - 0, 0, 0, 544, 0, 545, 0, 0, 0, 0, 546, 0, 547, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 551, - 0, 0, 552, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, - 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 591, - 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 593, 0, 594, 0, 0, 0, 595, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, - 598, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, - 0, 609, 0, 0, 0, 0, 610, 611, 612, 0, 613, 614, 615, 0, 616, 617, 618, 0, 619, 620, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, - 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 625, 0, 626, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 629, - 0, 0, 630, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 635, 636, 0, 0, 0, 637, 0, 0, 0, - 638, 0, 0, 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 643, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, - 0, 646, 0, 0, 0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 651, 0, 0, - 652, 0, 653, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, - 657, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 660, 0, 661, 0, 0, 0, 0, 662, 0, 0, 663, 0, 0, 0, 0, 0, 664, - 0, 0, 0, 665, 0, 666, 0, 0, 0, 0, 0, 0, 667, 0, 0, 668, 0, 0, 669, 670, 0, 0, 0, 671, 0, 672, 0, 0, 0, 0, 673, 0, - 674, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, - 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 0, 0, - 690, 0, 0, 691, 0, 0, 692, 693, 0, 0, 0, 694, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 701, - 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 708, 0, 0, 0, 709, 0, 0, 710, 0, 711, 712, 713, 0, - 0, 0, 0, 714, 0, 0, 0, 0, 715, 0, 716, 0, 0, 0, 717, 0, 0, 718, 0, 719, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 721, - 0, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 725, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 730, 0, 731, 0, 732, 0, 733, 0, 0, 734, 0, 0, 0, - 0, 0, 0, 735, 0, 0, 736, 0, 0, 0, 737, 0, 0, 0, 738, 0, 0, 0, 0, 739, 0, 740, 0, 0, 741, 0, 742, 0, 0, 743, 0, 744, - 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 751, 0, 0, 0, 0, 752, 0, 753, 754, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 757, 0, 0, 758, 0, 0, 0, 759, 0, 760, 0, 0, 761, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 763, 764, 765, 0, 766, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 770, 0, 0, 771, 0, - 0, 0, 0, 772, 0, 0, 773, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0124[64] = { + 0x31400024000C5001ull, 0x9020080004029000ull, 0x54402440020A9100ull, 0x0A81132000822001ull, + 0x0000400410020400ull, 0x0002412C1100B510ull, 0x4810229520414111ull, 0x040000000086A201ull, + 0x0048200000080002ull, 0x9041000002152200ull, 0x008008040200A028ull, 0x0408000428B0482Aull, + 0x0004004008000802ull, 0x5491200429080040ull, 0x2004000402252408ull, 0x1685148012914122ull, + 0x0500012040508002ull, 0x0408002850014029ull, 0x0120008100081000ull, 0x812124200100002Aull, + 0x040892A901500834ull, 0x02AAB40095044800ull, 0x0000220882A4AA84ull, 0x441A485230108080ull, + 0x10028056B400A815ull, 0x081800100A0006AAull, 0x12A14692A0942000ull, 0x8020214014692A0Aull, + 0x12292C40AD4A4042ull, 0x0D02020044400008ull, 0x022500122400A021ull, 0x01AA0280A9000800ull, + 0x0868101002220004ull, 0x008101180110C000ull, 0x8011005012040008ull, 0x8449201102AA8240ull, + 0x806A10AC49220000ull, 0x5222500008224900ull, 0x144854004A5294A5ull, 0x02A50088A1450A28ull, + 0x4940A88104900040ull, 0x015294A52A9112A1ull, 0xA144854428404284ull, 0x02002954A0111428ull, + 0x0004000210842108ull, 0x0000000000000000ull, 0x1204812048120400ull, 0x0000004090000048ull, + 0x0101021001000000ull, 0x2006288090200008ull, 0x100DDDC2AAAA0091ull, 0x11A4028488214908ull, + 0x1000008009200481ull, 0x0200808520810242ull, 0x428C902882429101ull, 0x2011142002010111ull, + 0x000208C902814020ull, 0x0408002082841040ull, 0x808A450874891040ull, 0x12A9204000A10220ull, + 0x00091020A5284448ull, 0x02512400101A1208ull, 0x0000000002025C08ull, 0x0000004848400000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0124[64] = { + 1u, 12u, 20u, 33u, 45u, 50u, 64u, 80u, 88u, 93u, 103u, 111u, 124u, 129u, 142u, 152u, + 170u, 179u, 190u, 196u, 207u, 223u, 239u, 253u, 268u, 285u, 297u, 314u, 330u, 350u, 359u, 371u, + 383u, 393u, 402u, 411u, 427u, 442u, 455u, 475u, 492u, 505u, 527u, 544u, 559u, 567u, 567u, 578u, + 583u, 588u, 598u, 622u, 638u, 646u, 657u, 674u, 685u, 696u, 705u, 722u, 735u, 749u, 762u, 769u, }; void recomp_unit_0124_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0124_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089F4000u; - entry_id = (entry_delta < 16284u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0124[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16284u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0124[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0124[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089F4000; @@ -970,9 +877,7 @@ L_089F4000: aot_gpr_5 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4038; } @@ -988,9 +893,7 @@ L_089F4030: } L_089F4038: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F404C; } @@ -1014,9 +917,7 @@ L_089F404C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4094; } @@ -1058,9 +959,7 @@ L_089F4094: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F40E0; } @@ -1076,9 +975,7 @@ L_089F40D8: } L_089F40E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F40F4; } @@ -1102,9 +999,7 @@ L_089F40F4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F413C; } @@ -1136,7 +1031,17 @@ L_089F4144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F4168: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1195,7 +1100,6 @@ L_089F41FC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_24)) && aot_fpr_12 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); if (branch_taken) { @@ -1205,9 +1109,7 @@ L_089F41FC: } L_089F4220: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_24)) && aot_fpr_13 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F423C; } @@ -1224,7 +1126,6 @@ L_089F4230: } L_089F423C: aot_gpr_31 = (0x089F4244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4244u) goto L_089F4244; AOT_REGCACHE_SYNC_OUT(); return; L_089F4244: @@ -1237,7 +1138,6 @@ L_089F424C: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(4), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x089F4264u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4264u) goto L_089F4264; AOT_REGCACHE_SYNC_OUT(); return; L_089F4264: @@ -1277,7 +1177,6 @@ L_089F42B4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(32))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_24)) && aot_fpr_12 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); if (branch_taken) { @@ -1287,9 +1186,7 @@ L_089F42B4: } L_089F42D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_24)) && aot_fpr_13 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F42F8; } @@ -1297,7 +1194,6 @@ L_089F42D8: } L_089F42E8: aot_gpr_31 = (0x089F42F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F42F0u) goto L_089F42F0; AOT_REGCACHE_SYNC_OUT(); return; L_089F42F0: @@ -1328,21 +1224,18 @@ L_089F4300: aot_fpr_24 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 - ctx.fpr[0]; aot_gpr_31 = (0x089F4334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4334u) goto L_089F4334; AOT_REGCACHE_SYNC_OUT(); return; L_089F4334: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = ctx.fpr[22] - aot_fpr_24; aot_gpr_31 = (0x089F4344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4344u) goto L_089F4344; AOT_REGCACHE_SYNC_OUT(); return; L_089F4344: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_089F435C; @@ -1370,7 +1263,6 @@ L_089F435C: L_089F4394: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F43A4; } @@ -1453,7 +1345,6 @@ L_089F4444: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F4488; } @@ -1487,7 +1378,17 @@ L_089F4488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F44B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -1518,9 +1419,7 @@ L_089F44B8: } L_089F4510: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_24)) && aot_fpr_13 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4528; } @@ -1536,7 +1435,6 @@ L_089F4520: } L_089F4528: aot_gpr_31 = (0x089F4530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4530u) goto L_089F4530; AOT_REGCACHE_SYNC_OUT(); return; L_089F4530: @@ -1582,7 +1480,6 @@ L_089F4588: goto L_089F458C; L_089F458C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089F46A4; } @@ -1675,7 +1572,6 @@ L_089F4600: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F4658; } @@ -1683,9 +1579,7 @@ L_089F4600: } L_089F4610: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4640; } @@ -1695,7 +1589,6 @@ L_089F4620: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); ctx.fpr[22] = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_24)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_24)); goto L_089F4638; @@ -1703,7 +1596,6 @@ L_089F4620: goto L_089F4638; L_089F4638: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F4658; } @@ -1713,7 +1605,6 @@ L_089F4640: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); ctx.fpr[22] = ctx.fpr[22] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_24 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_24)); goto L_089F4658; @@ -1732,7 +1623,6 @@ L_089F4658: L_089F4674: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F4688; } @@ -1748,7 +1638,6 @@ L_089F4680: } L_089F4688: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_089F469C; } @@ -1761,7 +1650,6 @@ L_089F4690: goto L_089F469C; L_089F469C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F46EC; } @@ -1771,7 +1659,6 @@ L_089F46A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F46EC; } @@ -1782,9 +1669,7 @@ L_089F46B4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F46EC; } @@ -1818,7 +1703,6 @@ L_089F4700: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_24)) && aot_fpr_12 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); if (branch_taken) { @@ -1828,9 +1712,7 @@ L_089F4700: } L_089F4724: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_24)) && aot_fpr_13 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F473C; } @@ -1846,7 +1728,6 @@ L_089F4734: } L_089F473C: aot_gpr_31 = (0x089F4744u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4744u) goto L_089F4744; AOT_REGCACHE_SYNC_OUT(); return; L_089F4744: @@ -1857,7 +1738,6 @@ L_089F4748: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2256))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_gpr_31 = (0x089F475Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F475Cu) goto L_089F475C; AOT_REGCACHE_SYNC_OUT(); return; L_089F475C: @@ -1937,7 +1817,17 @@ L_089F4804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F484C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9836))); @@ -2003,9 +1893,7 @@ L_089F48D8: } L_089F4924: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_24)) && aot_fpr_13 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4940; } @@ -2022,7 +1910,6 @@ L_089F4934: } L_089F4940: aot_gpr_31 = (0x089F4948u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4948u) goto L_089F4948; AOT_REGCACHE_SYNC_OUT(); return; L_089F4948: @@ -2034,7 +1921,6 @@ L_089F4950: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2256))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_gpr_31 = (0x089F4964u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4964u) goto L_089F4964; AOT_REGCACHE_SYNC_OUT(); return; L_089F4964: @@ -2055,7 +1941,6 @@ L_089F4964: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9808))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_gpr_31 = (0x089F49C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F49C0u) goto L_089F49C0; AOT_REGCACHE_SYNC_OUT(); return; L_089F49C0: @@ -2064,7 +1949,6 @@ L_089F49C0: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9804))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[14]; aot_gpr_31 = (0x089F49D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F49D8u) goto L_089F49D8; AOT_REGCACHE_SYNC_OUT(); return; L_089F49D8: @@ -2105,7 +1989,6 @@ L_089F4A14: ctx.fpr[22] = ctx.fpr[22] - aot_fpr_12; aot_gpr_4 = (aot_gpr_16 + static_cast(28)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 + static_cast(7296)); if (branch_taken) { @@ -2129,7 +2012,6 @@ L_089F4A3C: aot_fpr_13 = aot_fpr_12 / ctx.fpr[28]; aot_fpr_13 = ctx.fpr[22] / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_089F4A64; @@ -2170,7 +2052,6 @@ L_089F4AAC: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[26] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_24)); goto L_089F4ADC; @@ -2184,7 +2065,6 @@ L_089F4ADC: { const float fs = ctx.fpr[14]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = ctx.fpr[15] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089F4B04; @@ -2200,7 +2080,6 @@ L_089F4B04: } L_089F4B0C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089F4B38; } @@ -2238,7 +2117,6 @@ L_089F4B50: goto L_089F4B54; L_089F4B54: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089F4B6C; } @@ -2390,7 +2268,17 @@ L_089F4CC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F4D18: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2409,7 +2297,6 @@ L_089F4D4C: aot_gpr_4 = (ctx.gpr[18] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F4D74; } @@ -2430,7 +2317,6 @@ L_089F4D74: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F4D4C; } @@ -2483,7 +2369,6 @@ L_089F4DDC: goto L_089F4DE8; L_089F4DE8: aot_gpr_31 = (0x089F4DF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4DF0u) goto L_089F4DF0; AOT_REGCACHE_SYNC_OUT(); return; L_089F4DF0: @@ -2503,9 +2388,7 @@ L_089F4E0C: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4E64; } @@ -2514,7 +2397,6 @@ L_089F4E0C: L_089F4E28: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6888))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_089F4E64; } @@ -2529,7 +2411,6 @@ L_089F4E34: goto L_089F4E40; L_089F4E40: aot_gpr_31 = (0x089F4E48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4E48u) goto L_089F4E48; AOT_REGCACHE_SYNC_OUT(); return; L_089F4E48: @@ -2560,7 +2441,17 @@ L_089F4E64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F4E88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -2589,9 +2480,7 @@ L_089F4EC8: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F4F04; } @@ -2607,7 +2496,6 @@ L_089F4F04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F4F20; } @@ -2632,19 +2520,38 @@ L_089F4F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F4F38: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F4F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F4F64; } @@ -2653,7 +2560,6 @@ L_089F4F40: L_089F4F50: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F4F64; } @@ -2661,7 +2567,6 @@ L_089F4F50: } L_089F4F5C: aot_gpr_31 = (0x089F4F64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F4F64u) goto L_089F4F64; AOT_REGCACHE_SYNC_OUT(); return; L_089F4F64: @@ -2671,7 +2576,17 @@ L_089F4F64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F4F70: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15968))); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(6876), static_cast(0u)); @@ -2696,7 +2611,6 @@ L_089F4F9C: goto L_089F4FA8; L_089F4FA8: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_089F4FC0; } @@ -2740,7 +2654,6 @@ L_089F4FE4: goto L_089F4FE8; L_089F4FE8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F503C; } @@ -2751,7 +2664,6 @@ L_089F4FF0: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[10] + static_cast(54))); { const bool branch_taken = ctx.gpr[11] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_089F503C; } @@ -2797,11 +2709,20 @@ L_089F503C: } L_089F5050: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5058: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2828,7 +2749,6 @@ L_089F5078: L_089F5094: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(64))); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089F50E8; } @@ -2856,9 +2776,7 @@ L_089F50A0: ctx.gpr[9] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[9]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F50E8; } @@ -2890,7 +2808,17 @@ L_089F510C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5114: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -2920,9 +2848,7 @@ L_089F5140: ctx.fpr[14] = ctx.fpr[14] + ctx.fpr[18]; ctx.fpr[14] = std::sqrt(ctx.fpr[14]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5178; } @@ -3088,7 +3014,17 @@ L_089F529C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F52D4: aot_gpr_5 = (aot_gpr_5 << 6u); { const bool branch_taken = aot_gpr_6 == 0u; @@ -3115,11 +3051,20 @@ L_089F5304: goto L_089F530C; L_089F530C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5314: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(aot_fpr_24), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3152,7 +3097,6 @@ L_089F5394: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F548C; } @@ -3181,7 +3125,6 @@ L_089F53C0: L_089F53D4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5458; } @@ -3192,9 +3135,7 @@ L_089F53E0: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5458; } @@ -3209,7 +3150,6 @@ L_089F53FC: goto L_089F5408; L_089F5408: aot_gpr_31 = (0x089F5410u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F5410u) goto L_089F5410; AOT_REGCACHE_SYNC_OUT(); return; L_089F5410: @@ -3238,7 +3178,6 @@ L_089F542C: AOT_REGCACHE_SYNC_OUT(); return; L_089F5450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F548C; } @@ -3257,7 +3196,6 @@ L_089F5460: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F548C; } @@ -3271,12 +3209,10 @@ L_089F5480: AOT_REGCACHE_SYNC_OUT(); return; L_089F548C: aot_gpr_31 = (0x089F5494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F5494u) goto L_089F5494; AOT_REGCACHE_SYNC_OUT(); return; L_089F5494: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F54BC; } @@ -3361,11 +3297,20 @@ L_089F5548: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-1760))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5560: { const bool branch_taken = 0u == 0u; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); @@ -3385,7 +3330,6 @@ L_089F5568: L_089F5570: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(6884))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F55CC; } @@ -3396,8 +3340,6 @@ L_089F557C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7668))); { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[20]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = ctx.gpr[20]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_5 = (ctx.lo); @@ -3421,7 +3363,6 @@ L_089F55B0: goto L_089F55B4; L_089F55B4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F55C4; } @@ -3449,7 +3390,6 @@ L_089F55CC: goto L_089F55D4; L_089F55D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5624; } @@ -3457,7 +3397,6 @@ L_089F55D4: } L_089F55DC: aot_gpr_31 = (0x089F55E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F55E4u) goto L_089F55E4; AOT_REGCACHE_SYNC_OUT(); return; L_089F55E4: @@ -3485,7 +3424,6 @@ L_089F5608: AOT_REGCACHE_SYNC_OUT(); return; L_089F561C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F562C; } @@ -3508,7 +3446,6 @@ L_089F5634: L_089F563C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5800; } @@ -3517,7 +3454,6 @@ L_089F563C: L_089F5648: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(6884))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F5800; } @@ -3530,7 +3466,6 @@ L_089F5654: AOT_REGCACHE_SYNC_OUT(); return; L_089F565C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F5800; } @@ -3540,7 +3475,6 @@ L_089F5664: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); aot_fpr_12 = ctx.fpr[28] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_089F567C; @@ -3548,9 +3482,7 @@ L_089F5664: goto L_089F567C; L_089F567C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5800; } @@ -3560,7 +3492,6 @@ L_089F568C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_fpr_12 = ctx.fpr[26] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_089F56A4; @@ -3568,9 +3499,7 @@ L_089F568C: goto L_089F56A4; L_089F56A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5800; } @@ -3600,9 +3529,7 @@ L_089F56B4: aot_gpr_4 = (aot_gpr_4 | 39322u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5800; } @@ -3622,7 +3549,6 @@ L_089F571C: L_089F573C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; goto L_089F5750; @@ -3634,9 +3560,7 @@ L_089F5750: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5774; } @@ -3686,7 +3610,6 @@ L_089F57B8: goto L_089F57C4; L_089F57C4: aot_gpr_31 = (0x089F57CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F57CCu) goto L_089F57CC; AOT_REGCACHE_SYNC_OUT(); return; L_089F57CC: @@ -3735,7 +3658,6 @@ L_089F5810: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_6 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5834; } @@ -3758,8 +3680,6 @@ L_089F583C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7668))); { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[20]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = ctx.gpr[20]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_5 = (ctx.lo); @@ -3783,7 +3703,6 @@ L_089F5870: goto L_089F5874; L_089F5874: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F5884; } @@ -3802,7 +3721,6 @@ L_089F5884: goto L_089F5888; L_089F5888: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F590C; } @@ -3810,7 +3728,6 @@ L_089F5888: } L_089F5890: aot_gpr_31 = (0x089F5898u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F5898u) goto L_089F5898; AOT_REGCACHE_SYNC_OUT(); return; L_089F5898: @@ -3830,7 +3747,6 @@ L_089F5898: } L_089F58BC: aot_gpr_31 = (0x089F58C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F58C4u) goto L_089F58C4; AOT_REGCACHE_SYNC_OUT(); return; L_089F58C4: @@ -3853,9 +3769,7 @@ L_089F58C4: aot_gpr_4 = (49312u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F5904; } @@ -3871,7 +3785,6 @@ L_089F58F0: AOT_REGCACHE_SYNC_OUT(); return; L_089F5904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F5914; } @@ -3907,9 +3820,7 @@ L_089F5928: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F59D0; } @@ -3932,7 +3843,6 @@ L_089F596C: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F59D0; } @@ -3951,9 +3861,7 @@ L_089F5990: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F59D0; } @@ -4000,7 +3908,17 @@ L_089F59EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5A34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -4020,7 +3938,17 @@ L_089F5A50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5A5C: ctx.gpr[2] = (2236u << 16u); ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -4039,7 +3967,6 @@ L_089F5A74: } L_089F5A7C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F5AB8; } @@ -4048,7 +3975,6 @@ L_089F5A7C: L_089F5A84: ctx.gpr[8] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F5AB8; } @@ -4057,7 +3983,6 @@ L_089F5A84: L_089F5A90: ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 128 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089F5AA4; } @@ -4090,7 +4015,17 @@ L_089F5AB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5AC0: ctx.gpr[2] = (2236u << 16u); aot_gpr_6 = (aot_gpr_4 | 0u); @@ -4108,7 +4043,6 @@ L_089F5AD4: } L_089F5ADC: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089F5B04; } @@ -4117,7 +4051,6 @@ L_089F5ADC: L_089F5AE4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_089F5B04; } @@ -4140,7 +4073,17 @@ L_089F5B04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5B0C: ctx.gpr[2] = (2236u << 16u); ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -4159,7 +4102,6 @@ L_089F5B24: } L_089F5B2C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F5B68; } @@ -4168,7 +4110,6 @@ L_089F5B2C: L_089F5B34: ctx.gpr[8] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F5B68; } @@ -4177,7 +4118,6 @@ L_089F5B34: L_089F5B40: ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 256 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_089F5B54; } @@ -4210,7 +4150,17 @@ L_089F5B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5B70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4258,7 +4208,17 @@ L_089F5BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4306,7 +4266,17 @@ L_089F5C18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5C38: ctx.gpr[7] = (0u | 94u); aot_gpr_6 = (0u | 126u); @@ -4314,7 +4284,6 @@ L_089F5C38: goto L_089F5C44; L_089F5C44: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5C74; } @@ -4323,7 +4292,6 @@ L_089F5C44: L_089F5C4C: ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F5C74; } @@ -4331,7 +4299,6 @@ L_089F5C4C: } L_089F5C58: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_089F5C68; } @@ -4339,7 +4306,6 @@ L_089F5C58: } L_089F5C60: { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_089F5C6C; } @@ -4358,11 +4324,20 @@ L_089F5C6C: } L_089F5C74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5C7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(512), aot_gpr_16); @@ -4414,7 +4389,6 @@ L_089F5CC0: } L_089F5CCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F5CE4; } @@ -4429,7 +4403,6 @@ L_089F5CD4: L_089F5CE4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F5CAC; } @@ -4446,7 +4419,17 @@ L_089F5CF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5D0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -4497,7 +4480,6 @@ L_089F5D78: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), aot_gpr_4); aot_gpr_4 = (ctx.gpr[20] < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F5D68; } @@ -4518,7 +4500,17 @@ L_089F5DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5DC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4526,7 +4518,6 @@ L_089F5DC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5DEC; } @@ -4534,7 +4525,6 @@ L_089F5DC4: } L_089F5DE0: aot_gpr_31 = (0x089F5DE8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F5DE8u) goto L_089F5DE8; AOT_REGCACHE_SYNC_OUT(); return; L_089F5DE8: @@ -4549,7 +4539,17 @@ L_089F5DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5E00: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u | 0u); @@ -4577,11 +4577,20 @@ L_089F5E14: } L_089F5E34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5E3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -4598,7 +4607,6 @@ L_089F5E3C: L_089F5E68: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F5EC8; } @@ -4628,7 +4636,6 @@ L_089F5E90: aot_gpr_16 = (aot_gpr_16 & 65535u); aot_gpr_4 = (static_cast(aot_gpr_16) < 25 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F5E90; } @@ -4636,7 +4643,6 @@ L_089F5E90: } L_089F5EC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F5ED4; } @@ -4655,7 +4661,17 @@ L_089F5ED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F5EE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[21]); @@ -4699,7 +4715,6 @@ L_089F5F2C: L_089F5F60: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F5FCC; } @@ -4707,7 +4722,6 @@ L_089F5F60: } L_089F5F6C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089F5FA4; } @@ -4715,7 +4729,6 @@ L_089F5F6C: } L_089F5F74: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089F5FDC; } @@ -4733,7 +4746,6 @@ L_089F5F7C: goto L_089F5EE4; L_089F5F9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F5FE0; } @@ -4751,7 +4763,6 @@ L_089F5FA4: goto L_089F5EE4; L_089F5FC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F5FE0; } @@ -4793,7 +4804,17 @@ L_089F5FE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6008: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -4840,7 +4861,6 @@ L_089F6064: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), aot_gpr_4); aot_gpr_4 = (ctx.gpr[20] < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F6054; } @@ -4861,7 +4881,17 @@ L_089F6090: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F60B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4869,7 +4899,6 @@ L_089F60B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F60D8; } @@ -4877,7 +4906,6 @@ L_089F60B0: } L_089F60CC: aot_gpr_31 = (0x089F60D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F60D4u) goto L_089F60D4; AOT_REGCACHE_SYNC_OUT(); return; L_089F60D4: @@ -4892,7 +4920,17 @@ L_089F60D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F60EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (0u | 12u); @@ -4945,7 +4983,6 @@ L_089F6160: ctx.gpr[21] = (ctx.gpr[21] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F6150; } @@ -4969,7 +5006,6 @@ L_089F61A0: ctx.gpr[21] = (ctx.gpr[21] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F6190; } @@ -4982,7 +5018,6 @@ L_089F61C0: ctx.gpr[22] = (ctx.gpr[22] & 65535u); aot_gpr_4 = (ctx.gpr[22] < ctx.gpr[23] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F613C; } @@ -5007,7 +5042,17 @@ L_089F61DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F620C: { const std::uint32_t aot_run_words[8]{0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -5026,7 +5071,6 @@ L_089F6248: aot_gpr_6 = (aot_gpr_6 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_6) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089F6248; } @@ -5045,7 +5089,6 @@ L_089F6270: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_6) < 25 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_089F6270; } @@ -5057,7 +5100,17 @@ L_089F6290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6298: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -5086,7 +5139,6 @@ L_089F62D0: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (ctx.gpr[19] < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F62C0; } @@ -5106,7 +5158,17 @@ L_089F62FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6318: ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2448))); jump_target = aot_gpr_31; @@ -5114,7 +5176,17 @@ L_089F6318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6324: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5151,7 +5223,6 @@ L_089F6364: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089F6364; } @@ -5165,7 +5236,17 @@ L_089F6380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5180,7 +5261,6 @@ L_089F6390: L_089F63B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F63E8; } @@ -5189,7 +5269,6 @@ L_089F63B4: L_089F63C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(33))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F63E8; } @@ -5198,7 +5277,6 @@ L_089F63C0: L_089F63CC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(34))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F63E8; } @@ -5222,7 +5300,17 @@ L_089F63E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F63FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -5261,7 +5349,6 @@ L_089F6454: L_089F6460: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(33))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F648C; } @@ -5270,7 +5357,6 @@ L_089F6460: L_089F646C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(34))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F648C; } @@ -5287,7 +5373,6 @@ L_089F6488: goto L_089F648C; L_089F648C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_089F64D4; } @@ -5345,7 +5430,17 @@ L_089F64D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F64FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5360,7 +5455,6 @@ L_089F64FC: L_089F6520: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F6554; } @@ -5369,7 +5463,6 @@ L_089F6520: L_089F652C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(33))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F6554; } @@ -5378,7 +5471,6 @@ L_089F652C: L_089F6538: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(34))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F6554; } @@ -5403,7 +5495,17 @@ L_089F6554: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F656C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[20]); @@ -5445,7 +5547,6 @@ L_089F65D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7868))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F666C; } @@ -5478,7 +5579,6 @@ L_089F65F8: } L_089F6600: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089F6658; } @@ -5492,7 +5592,6 @@ L_089F6608: AOT_REGCACHE_SYNC_OUT(); return; L_089F6614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F666C; } @@ -5506,7 +5605,6 @@ L_089F661C: AOT_REGCACHE_SYNC_OUT(); return; L_089F6628: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F666C; } @@ -5520,7 +5618,6 @@ L_089F6630: AOT_REGCACHE_SYNC_OUT(); return; L_089F663C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F666C; } @@ -5534,7 +5631,6 @@ L_089F6644: AOT_REGCACHE_SYNC_OUT(); return; L_089F6650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F666C; } @@ -5548,7 +5644,6 @@ L_089F6658: AOT_REGCACHE_SYNC_OUT(); return; L_089F6664: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F666C; } @@ -5584,7 +5679,6 @@ L_089F66A8: } L_089F66B0: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_089F67C8; } @@ -5600,7 +5694,6 @@ L_089F66B8: L_089F66CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F67C0; } @@ -5615,7 +5708,6 @@ L_089F66D8: AOT_REGCACHE_SYNC_OUT(); return; L_089F66E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089F6714; } @@ -5647,7 +5739,6 @@ L_089F6714: AOT_REGCACHE_SYNC_OUT(); return; L_089F6724: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089F6748; } @@ -5702,7 +5793,6 @@ L_089F677C: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F67C0; } @@ -5724,7 +5814,6 @@ L_089F679C: aot_gpr_16 = (aot_gpr_16 & 65535u); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F678C; } @@ -5732,7 +5821,6 @@ L_089F679C: } L_089F67C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F66A8; } @@ -5773,7 +5861,17 @@ L_089F67E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6818: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(176), ctx.gpr[20]); @@ -5811,7 +5909,6 @@ L_089F6880: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089F6880; } @@ -5825,7 +5922,6 @@ L_089F689C: goto L_089F68AC; L_089F68AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F6900; } @@ -5833,7 +5929,6 @@ L_089F68AC: } L_089F68B4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_089F6900; } @@ -5873,7 +5968,6 @@ L_089F68EC: goto L_089F68F8; L_089F68F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F68AC; } @@ -5889,7 +5983,6 @@ L_089F6900: AOT_REGCACHE_SYNC_OUT(); return; L_089F6914: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_089F6BB4; } @@ -5920,7 +6013,6 @@ L_089F6940: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7868))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F69D8; } @@ -5953,7 +6045,6 @@ L_089F6964: } L_089F696C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089F69C4; } @@ -5967,7 +6058,6 @@ L_089F6974: AOT_REGCACHE_SYNC_OUT(); return; L_089F6980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F69D8; } @@ -5981,7 +6071,6 @@ L_089F6988: AOT_REGCACHE_SYNC_OUT(); return; L_089F6994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F69D8; } @@ -5995,7 +6084,6 @@ L_089F699C: AOT_REGCACHE_SYNC_OUT(); return; L_089F69A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F69D8; } @@ -6009,7 +6097,6 @@ L_089F69B0: AOT_REGCACHE_SYNC_OUT(); return; L_089F69BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F69D8; } @@ -6023,7 +6110,6 @@ L_089F69C4: AOT_REGCACHE_SYNC_OUT(); return; L_089F69D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F69D8; } @@ -6031,7 +6117,6 @@ L_089F69D0: } L_089F69D8: aot_gpr_31 = (0x089F69E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F69E0u) goto L_089F69E0; AOT_REGCACHE_SYNC_OUT(); return; L_089F69E0: @@ -6075,7 +6160,6 @@ L_089F6A38: aot_gpr_16 = (aot_gpr_16 & 65535u); aot_gpr_4 = (static_cast(aot_gpr_16) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F6A24; } @@ -6091,7 +6175,6 @@ L_089F6A58: AOT_REGCACHE_SYNC_OUT(); return; L_089F6A6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089F6A88; } @@ -6121,7 +6204,6 @@ L_089F6A98: } L_089F6AA0: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_089F6B7C; } @@ -6137,7 +6219,6 @@ L_089F6AA8: L_089F6ABC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F6B74; } @@ -6152,7 +6233,6 @@ L_089F6AC8: AOT_REGCACHE_SYNC_OUT(); return; L_089F6AD8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_089F6AFC; } @@ -6207,7 +6287,6 @@ L_089F6B30: aot_gpr_16 = (0u | 0u); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F6B74; } @@ -6229,7 +6308,6 @@ L_089F6B50: aot_gpr_16 = (aot_gpr_16 & 65535u); aot_gpr_4 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F6B40; } @@ -6237,7 +6315,6 @@ L_089F6B50: } L_089F6B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F6A98; } @@ -6255,7 +6332,6 @@ L_089F6B88: AOT_REGCACHE_SYNC_OUT(); return; L_089F6B90: aot_gpr_31 = (0x089F6B98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F6B98u) goto L_089F6B98; AOT_REGCACHE_SYNC_OUT(); return; L_089F6B98: @@ -6292,7 +6368,17 @@ L_089F6BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6BE4: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6346,11 +6432,20 @@ L_089F6BE4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6360,7 +6455,17 @@ L_089F6C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6370,7 +6475,17 @@ L_089F6C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6380,7 +6495,17 @@ L_089F6C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6390,7 +6515,17 @@ L_089F6C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6400,7 +6535,17 @@ L_089F6C5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6410,7 +6555,17 @@ L_089F6C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F6C84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6779,7 +6934,17 @@ L_089F6F98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7060: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); @@ -6807,7 +6972,17 @@ L_089F7060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6838,7 +7013,17 @@ L_089F70C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F70E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -6944,7 +7129,17 @@ L_089F71C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F71F4: ctx.gpr[2] = (2207u << 16u); jump_target = aot_gpr_31; @@ -6952,12 +7147,21 @@ L_089F71F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089F7210u); - // nop goto L_089F71F4; L_089F7210: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6966,7 +7170,17 @@ L_089F7210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F721C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7017,7 +7231,6 @@ L_089F7274: goto L_089F727C; L_089F727C: aot_gpr_31 = (0x089F7284u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F7284u) goto L_089F7284; AOT_REGCACHE_SYNC_OUT(); return; L_089F7284: @@ -7067,7 +7280,6 @@ L_089F72BC: goto L_089F72C0; L_089F72C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F72CC; } @@ -7092,7 +7304,17 @@ L_089F72CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F72F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7123,7 +7345,6 @@ L_089F7320: L_089F732C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F7340; } @@ -7146,7 +7367,17 @@ L_089F7340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7354: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -7180,14 +7411,34 @@ L_089F7388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F739C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 2u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F73A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -7224,7 +7475,17 @@ L_089F73E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F73F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7254,7 +7515,17 @@ L_089F741C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7428: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -7332,7 +7603,17 @@ L_089F74F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -7348,7 +7629,17 @@ L_089F7518: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7524: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7412,7 +7703,17 @@ L_089F759C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F75BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -7546,7 +7847,6 @@ L_089F76E4: goto L_089F76F8; L_089F76F8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F7720; } @@ -7595,7 +7895,17 @@ L_089F7740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7764: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -7617,7 +7927,6 @@ L_089F7794: goto L_089F77A8; L_089F77A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F77D0; } @@ -7666,7 +7975,17 @@ L_089F77F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7814: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -7682,7 +8001,6 @@ L_089F7814: } L_089F7838: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_089F785C; } @@ -7702,7 +8020,6 @@ L_089F7840: AOT_REGCACHE_SYNC_OUT(); return; L_089F785C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F78AC; } @@ -7755,7 +8072,17 @@ L_089F78AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F78C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -7863,7 +8190,17 @@ L_089F79CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F79E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[18]); @@ -7896,7 +8233,6 @@ L_089F7A30: L_089F7A40: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(176))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_089F7ACC; } @@ -7958,7 +8294,6 @@ L_089F7AA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F7ACC; } @@ -7967,7 +8302,6 @@ L_089F7AA8: L_089F7AB8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F7ACC; } @@ -8003,7 +8337,17 @@ L_089F7ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7AFC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -8029,7 +8373,6 @@ L_089F7B24: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F7B54; } @@ -8044,11 +8387,20 @@ L_089F7B40: goto L_089F7B54; L_089F7B54: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -8062,7 +8414,6 @@ L_089F7B5C: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F7BDC; } @@ -8075,7 +8426,6 @@ L_089F7B98: ctx.gpr[17] = (aot_gpr_16 + ctx.gpr[17]); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(176))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F7BD4; } @@ -8084,7 +8434,6 @@ L_089F7B98: L_089F7BB4: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089F7BE4; } @@ -8098,7 +8447,6 @@ L_089F7BC0: AOT_REGCACHE_SYNC_OUT(); return; L_089F7BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F7C94; } @@ -8106,7 +8454,6 @@ L_089F7BCC: } L_089F7BD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F7C94; } @@ -8114,7 +8461,6 @@ L_089F7BD4: } L_089F7BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F7C94; } @@ -8123,7 +8469,6 @@ L_089F7BDC: L_089F7BE4: aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089F7C68; } @@ -8152,7 +8497,6 @@ L_089F7C18: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F7C54; } @@ -8189,7 +8533,6 @@ L_089F7C54: AOT_REGCACHE_SYNC_OUT(); return; L_089F7C60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F7C94; } @@ -8198,7 +8541,6 @@ L_089F7C60: L_089F7C68: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089F7C94; } @@ -8206,7 +8548,6 @@ L_089F7C68: } L_089F7C74: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089F7C94; } @@ -8235,12 +8576,21 @@ L_089F7C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7CB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089F7CC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0125_entry, 125u, 66u, 0x089F89BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F7CC0u) goto L_089F7CC0; AOT_REGCACHE_SYNC_OUT(); return; L_089F7CC0: @@ -8250,7 +8600,17 @@ L_089F7CC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7CCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[17]); @@ -8281,7 +8641,6 @@ L_089F7D0C: L_089F7D24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F7D4C; } @@ -8320,7 +8679,17 @@ L_089F7D50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7D70: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -8340,7 +8709,6 @@ L_089F7D70: L_089F7DA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F7DC0; } @@ -8379,7 +8747,6 @@ L_089F7DE4: aot_gpr_4 = (aot_gpr_4 | 14269u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 0u); if (branch_taken) { @@ -8392,7 +8759,6 @@ L_089F7E0C: aot_gpr_4 = (aot_gpr_4 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] & 255u); if (branch_taken) { @@ -8408,7 +8774,6 @@ L_089F7E2C: goto L_089F7E30; L_089F7E30: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F7E44; } @@ -8434,7 +8799,17 @@ L_089F7E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F7E64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -8492,7 +8867,6 @@ L_089F7E64: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_16 = (ctx.gpr[7] | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F7F6C; } @@ -8509,7 +8883,6 @@ L_089F7F58: L_089F7F6C: aot_gpr_4 = (ctx.gpr[20] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F7F8C; } @@ -8526,7 +8899,6 @@ L_089F7F78: L_089F7F8C: aot_gpr_4 = (ctx.gpr[20] & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0125_entry, 125u, 2u, 0x089F8058u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0125.cpp b/profiles/vcs/generated/generated_unit_0125.cpp index ca9c833..9f027c9 100644 --- a/profiles/vcs/generated/generated_unit_0125.cpp +++ b/profiles/vcs/generated/generated_unit_0125.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0125[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, - 0, 0, 13, 0, 0, 0, 14, 15, 0, 0, 0, 16, 0, 0, 0, 17, 18, 0, 0, 0, 19, 0, 0, 0, 20, 21, 0, 0, 0, 22, 0, 0, - 0, 23, 24, 0, 0, 0, 25, 0, 0, 0, 26, 27, 0, 0, 0, 28, 29, 0, 0, 0, 30, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, 0, 70, 0, 71, 0, 72, 0, 73, 0, 0, 74, 0, 0, 75, 0, 0, 76, 0, 0, 0, 77, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 81, 0, 82, 0, - 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 0, 93, 94, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 0, - 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 106, 0, 0, 107, 0, 0, 108, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 0, - 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 117, 118, 0, 0, 0, 119, - 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 125, 0, 0, - 0, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, - 130, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, - 0, 0, 134, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, - 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 0, - 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 154, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, 159, 160, 0, 0, 0, 161, 0, 162, 0, - 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 168, 0, 0, 0, 169, 0, 0, 170, 0, 0, 171, 0, 0, 172, 0, 173, 0, 174, - 0, 175, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, - 185, 0, 186, 0, 187, 0, 0, 0, 0, 0, 0, 188, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, - 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, - 0, 0, 207, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, - 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, 219, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, - 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, - 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, - 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, - 249, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 259, 0, 0, - 0, 260, 0, 0, 0, 261, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 268, 0, - 0, 0, 269, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, - 0, 277, 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 281, 282, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 285, 0, 0, 0, - 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, - 291, 0, 0, 292, 0, 0, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 0, 301, 0, - 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 306, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, - 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, - 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, - 0, 0, 326, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 330, 0, 331, 0, 332, 0, 0, 0, 0, 0, 0, 333, - 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 340, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, - 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 349, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 0, 354, - 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, - 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, - 0, 0, 376, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 380, 0, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 383, - 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 388, 0, 0, 389, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, - 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, - 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, - 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 0, - 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 0, 0, 420, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 0, - 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, - 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 454, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, - 0, 0, 457, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 467, 0, 0, 0, 0, 468, 0, 469, - 0, 0, 470, 0, 471, 0, 472, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 483, 0, - 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, - 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 490, 0, 491, 0, 492, 0, 0, 493, 0, 494, 0, 495, 0, 496, 0, 0, 497, - 0, 498, 0, 499, 0, 500, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, - 505, 506, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 510, 0, 0, 0, 0, 0, - 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 522, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 0, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, - 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 0, 537, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, - 0, 0, 0, 542, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 547, 0, 0, 548, 0, 0, 549, 550, - 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 556, 0, 0, 557, 0, 0, - 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 0, 0, 562, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, - 0, 0, 0, 0, 0, 565, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 572, 573, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, - 576, 0, 0, 0, 0, 0, 0, 577, 0, 578, 579, 0, 580, 0, 581, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 583, 0, 0, 0, 584, 585, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 588, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, - 0, 0, 0, 0, 0, 591, 0, 592, 0, 593, 0, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 599, 0, 600, 0, 0, 0, 601, 0, 0, 0, - 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 604, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, 0, - 608, 0, 609, 0, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 614, - 0, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 619, 0, 620, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 621, 0, 622, 0, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 625, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, - 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, 630, 0, 0, 0, 0, 0, 631, 0, 0, 632, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 634, 0, 0, 0, 0, 0, 0, 0, 635, 0, 636, 0, 637, 0, 0, 638, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, - 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 643, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 647, 648, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 652, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 654, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0125[64] = { + 0x0000000040400001ull, 0x6008080000024488ull, 0x00B18C46231188C4ull, 0x0090000000000010ull, + 0x9000009000009000ull, 0x0000900000900000ull, 0x0000000240000000ull, 0x0090000004050000ull, + 0x0120090048024012ull, 0x0400A00000120000ull, 0x5101000489255240ull, 0x0400000000210C11ull, + 0x0901030800090000ull, 0x0064940108480810ull, 0x8C10001222400004ull, 0x0100400628811100ull, + 0x0482044408200081ull, 0x2044800204820482ull, 0x51920508000A0800ull, 0xA924540800008008ull, + 0x001028155281502Aull, 0x4814080010200102ull, 0x0000000009240022ull, 0x8228902410000000ull, + 0x000800C0024A2404ull, 0x400D108880100002ull, 0x0842108421141520ull, 0x2241000042108421ull, + 0x2222222444491122ull, 0x0222400111231112ull, 0x022250444AAA0889ull, 0x0000002224000000ull, + 0x1120000000111200ull, 0x8152802440008891ull, 0x9000000008890444ull, 0x8140122000444888ull, + 0x2224000000050444ull, 0x111208280244000Aull, 0x00910002888900A4ull, 0x4800810448209112ull, + 0x240A044481112044ull, 0x0000022200005022ull, 0x1001400800A00444ull, 0x1120200000044480ull, + 0x0000444808000001ull, 0x5228800000111200ull, 0x0040445480000400ull, 0x00000254A1110440ull, + 0x0004140000820008ull, 0x8000804041400010ull, 0x5400012A954AA402ull, 0x0080000405001203ull, + 0x0088000000080008ull, 0x0202AA8000100002ull, 0x4901081011200882ull, 0xC949004881202000ull, + 0x1004944424288108ull, 0x05340800008804A0ull, 0x2006423100105681ull, 0x11620000200282A0ull, + 0xA020050540400C84ull, 0x801908500540400Aull, 0x40092A0200520A80ull, 0x4082A02003210D40ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0125[64] = { + 1u, 4u, 13u, 33u, 36u, 42u, 46u, 48u, 53u, 63u, 68u, 83u, 90u, 98u, 110u, 120u, + 130u, 140u, 151u, 163u, 175u, 191u, 200u, 206u, 215u, 225u, 235u, 249u, 260u, 277u, 291u, 309u, + 313u, 320u, 334u, 343u, 355u, 364u, 376u, 388u, 401u, 415u, 422u, 431u, 439u, 445u, 455u, 463u, + 474u, 480u, 487u, 505u, 513u, 517u, 526u, 538u, 551u, 565u, 576u, 591u, 602u, 615u, 628u, 641u, }; void recomp_unit_0125_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0125_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089F8000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0125[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0125[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0125[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089F8000; @@ -864,7 +771,17 @@ L_089F8058: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F8078: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -914,7 +831,6 @@ L_089F810C: L_089F811C: aot_gpr_4 = (ctx.gpr[18] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8138; } @@ -929,7 +845,6 @@ L_089F8128: L_089F8138: aot_gpr_4 = (ctx.gpr[18] & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F81AC; } @@ -978,7 +893,17 @@ L_089F81AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F81CC: ctx.gpr[2] = (0u | 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -987,7 +912,6 @@ L_089F81CC: ctx.gpr[8] = (aot_gpr_5 + static_cast(4)); aot_gpr_7 = (aot_gpr_6 + static_cast(8)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_5 + static_cast(8)); if (branch_taken) { @@ -1002,7 +926,6 @@ L_089F81F8: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(0))); ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_089F8218; } @@ -1012,7 +935,6 @@ L_089F8208: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(1))); ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(1))); { const bool branch_taken = ctx.gpr[10] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_089F821C; } @@ -1025,7 +947,6 @@ L_089F821C: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(2))); ctx.gpr[11] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(2))); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_089F823C; } @@ -1035,7 +956,6 @@ L_089F822C: ctx.gpr[9] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(3))); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(3))); { const bool branch_taken = ctx.gpr[9] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_089F8240; } @@ -1048,7 +968,6 @@ L_089F8240: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F8260; } @@ -1058,7 +977,6 @@ L_089F8250: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(1))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F8264; } @@ -1071,7 +989,6 @@ L_089F8264: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(2))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F8284; } @@ -1081,7 +998,6 @@ L_089F8274: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(3))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F8288; } @@ -1094,7 +1010,6 @@ L_089F8288: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(4))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F82A8; } @@ -1104,7 +1019,6 @@ L_089F8298: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(5))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(5))); { const bool branch_taken = aot_gpr_7 == aot_gpr_4; - // nop if (branch_taken) { goto L_089F82AC; } @@ -1117,7 +1031,6 @@ L_089F82AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_089F82C0; } @@ -1130,7 +1043,6 @@ L_089F82C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F82D4; } @@ -1141,11 +1053,20 @@ L_089F82D0: goto L_089F82D4; L_089F82D4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F82DC: aot_gpr_4 = (aot_gpr_7 & 255u); ctx.gpr[8] = (aot_mem.aot_direct_load_word_right(aot_gpr_5 + static_cast(0), ctx.gpr[8])); @@ -1159,7 +1080,6 @@ L_089F82DC: aot_mem.aot_direct_store8(ctx.gpr[9] + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_7 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F83D0; } @@ -1218,7 +1138,6 @@ L_089F8310: L_089F83D0: aot_gpr_4 = (aot_gpr_7 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8430; } @@ -1250,7 +1169,6 @@ L_089F83DC: L_089F8430: aot_gpr_4 = (aot_gpr_7 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8490; } @@ -1282,7 +1200,6 @@ L_089F843C: L_089F8490: aot_gpr_4 = (aot_gpr_7 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F84F0; } @@ -1314,7 +1231,6 @@ L_089F849C: L_089F84F0: aot_gpr_4 = (aot_gpr_7 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8550; } @@ -1346,7 +1262,6 @@ L_089F84FC: L_089F8550: aot_gpr_4 = (aot_gpr_7 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F85B0; } @@ -1378,7 +1293,6 @@ L_089F855C: L_089F85B0: aot_gpr_4 = (aot_gpr_7 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8678; } @@ -1436,7 +1350,6 @@ L_089F85BC: L_089F8678: aot_gpr_4 = (aot_gpr_7 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8740; } @@ -1493,11 +1406,20 @@ L_089F8684: goto L_089F8740; L_089F8740: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F8748: aot_gpr_5 = (aot_gpr_5 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1506,7 +1428,6 @@ L_089F8748: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F87D0; } @@ -1543,7 +1464,6 @@ L_089F8768: L_089F87D0: aot_gpr_7 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F8804; } @@ -1564,7 +1484,6 @@ L_089F87DC: L_089F8804: aot_gpr_7 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F8838; } @@ -1585,7 +1504,6 @@ L_089F8810: L_089F8838: aot_gpr_7 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F886C; } @@ -1606,7 +1524,6 @@ L_089F8844: L_089F886C: aot_gpr_7 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F88A0; } @@ -1627,7 +1544,6 @@ L_089F8878: L_089F88A0: aot_gpr_7 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F88D4; } @@ -1648,7 +1564,6 @@ L_089F88AC: L_089F88D4: aot_gpr_7 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_089F8944; } @@ -1684,7 +1599,6 @@ L_089F88E0: L_089F8944: aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F89B4; } @@ -1719,11 +1633,20 @@ L_089F8950: goto L_089F89B4; L_089F89B4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F89BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -1735,7 +1658,6 @@ L_089F89BC: ctx.gpr[9] = (aot_gpr_5 >> (ctx.gpr[8] & 31u)); ctx.gpr[9] = (ctx.gpr[9] & 15u); { const bool branch_taken = aot_gpr_7 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089F8A40; } @@ -1753,7 +1675,6 @@ L_089F89E8: ctx.gpr[8] = (aot_gpr_4 + aot_gpr_5); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(176))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_089F8A38; } @@ -1762,7 +1683,6 @@ L_089F89E8: L_089F8A18: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F8A48; } @@ -1776,7 +1696,6 @@ L_089F8A24: AOT_REGCACHE_SYNC_OUT(); return; L_089F8A30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F8A60; } @@ -1784,7 +1703,6 @@ L_089F8A30: } L_089F8A38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F8A60; } @@ -1792,7 +1710,6 @@ L_089F8A38: } L_089F8A40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F8A60; } @@ -1801,7 +1718,6 @@ L_089F8A40: L_089F8A48: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F8A60; } @@ -1820,12 +1736,21 @@ L_089F8A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F8A6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x089F8A7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 196u, 0x08A823A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F8A7Cu) goto L_089F8A7C; AOT_REGCACHE_SYNC_OUT(); return; L_089F8A7C: @@ -1835,14 +1760,23 @@ L_089F8A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F8A88: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(36), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x089F8AC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 178u, 0x08AACCCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F8AC0u) goto L_089F8AC0; AOT_REGCACHE_SYNC_OUT(); return; L_089F8AC0: @@ -1879,7 +1813,6 @@ L_089F8B00: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(60))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F8B2C; } @@ -1997,9 +1930,7 @@ L_089F8BE8: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F8C4C; } @@ -2040,7 +1971,6 @@ L_089F8C4C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_089F8C8C; @@ -2049,9 +1979,7 @@ L_089F8C4C: L_089F8C8C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F8CA4; } @@ -2067,7 +1995,6 @@ L_089F8CA4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8D80; } @@ -2099,9 +2026,7 @@ L_089F8CEC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F8D6C; } @@ -2112,9 +2037,7 @@ L_089F8D10: aot_gpr_6 = (aot_gpr_6 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089F8D58; } @@ -2126,7 +2049,6 @@ L_089F8D2C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); aot_fpr_13 = aot_fpr_13 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089F8D4C; @@ -2165,7 +2087,6 @@ L_089F8D80: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F8DD8; } @@ -2216,7 +2137,17 @@ L_089F8DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F8E08: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -2394,7 +2325,6 @@ L_089F8FB8: aot_gpr_6 = (aot_gpr_17 + static_cast(213)); aot_gpr_6 = (aot_gpr_6 - aot_gpr_4); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_089F9000; } @@ -2438,7 +2368,6 @@ L_089F901C: aot_gpr_6 = (aot_gpr_6 + aot_gpr_7); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 2u)); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_089F906C; } @@ -2591,7 +2520,6 @@ L_089F9184: ctx.gpr[20] = (aot_gpr_4 + aot_gpr_5); ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 5u)); { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_089F91D8; } @@ -2637,7 +2565,6 @@ L_089F91F4: aot_gpr_6 = (aot_gpr_6 + aot_gpr_7); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 2u)); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_089F9244; } @@ -2675,7 +2602,6 @@ L_089F924C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089F924C; } @@ -2731,7 +2657,6 @@ L_089F92E0: AOT_REGCACHE_SYNC_OUT(); return; L_089F92F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F930C; } @@ -2764,7 +2689,17 @@ L_089F930C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F933C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -2798,7 +2733,6 @@ L_089F938C: } L_089F93A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F93C8; } @@ -2822,7 +2756,6 @@ L_089F93B8: L_089F93C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F93F4; } @@ -2837,7 +2770,6 @@ L_089F93D4: L_089F93E0: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_089F93FC; } @@ -2883,7 +2815,6 @@ L_089F9414: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(304), static_cast(aot_gpr_5)); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F9440; } @@ -2891,7 +2822,6 @@ L_089F9414: } L_089F9430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F9464; } @@ -2919,7 +2849,6 @@ L_089F9440: AOT_REGCACHE_SYNC_OUT(); return; L_089F945C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F95EC; } @@ -2928,7 +2857,6 @@ L_089F945C: L_089F9464: aot_gpr_4 = (ctx.gpr[21] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F95D0; } @@ -2960,7 +2888,6 @@ L_089F9480: } L_089F9488: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_089F9504; } @@ -2980,7 +2907,6 @@ L_089F9490: AOT_REGCACHE_SYNC_OUT(); return; L_089F94AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F95EC; } @@ -3022,7 +2948,6 @@ L_089F94D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F95EC; } @@ -3064,7 +2989,6 @@ L_089F9520: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F95EC; } @@ -3108,7 +3032,6 @@ L_089F9570: aot_gpr_4 = (aot_gpr_4 | 16u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(76), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F95EC; } @@ -3128,7 +3051,6 @@ L_089F95AC: AOT_REGCACHE_SYNC_OUT(); return; L_089F95C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F95EC; } @@ -3155,7 +3077,6 @@ L_089F95EC: L_089F95F8: aot_gpr_17 = (aot_gpr_17 + static_cast(80)); ctx.gpr[31] = (0x089F9604u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 622u, 0x08972DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F9604u) goto L_089F9604; AOT_REGCACHE_SYNC_OUT(); return; L_089F9604: @@ -3308,7 +3229,6 @@ L_089F966C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-30396))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F97D4; } @@ -3336,7 +3256,6 @@ L_089F9794: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_089F97BC; @@ -3369,7 +3288,6 @@ L_089F97D4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-30396))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F984C; } @@ -3398,7 +3316,6 @@ L_089F9808: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_089F9834; @@ -3487,14 +3404,23 @@ L_089F989C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089F98CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[31]}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(992), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x089F9904u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 271u, 0x08AAD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089F9904u) goto L_089F9904; AOT_REGCACHE_SYNC_OUT(); return; L_089F9904: @@ -3546,7 +3472,6 @@ L_089F998C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F9A50; } @@ -3764,7 +3689,6 @@ L_089F9B64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FADCC; } @@ -3802,7 +3726,6 @@ L_089F9B78: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_089F9BC0; @@ -3812,7 +3735,6 @@ L_089F9BC0: aot_gpr_4 = (17076u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[18] = (0u | 1u); goto L_089F9BD8; @@ -3842,7 +3764,6 @@ L_089F9C04: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F9CC4; } @@ -3871,7 +3792,6 @@ L_089F9C30: L_089F9C40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089F9CC4; } @@ -3901,7 +3821,6 @@ L_089F9C78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F9CC4; } @@ -3931,7 +3850,6 @@ L_089F9CB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FADCC; } @@ -3962,7 +3880,6 @@ L_089F9CF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(220))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089F9D40; } @@ -3992,7 +3909,6 @@ L_089F9D30: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089F9D44; } @@ -4005,7 +3921,6 @@ L_089F9D44: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FADCC; } @@ -4043,9 +3958,7 @@ L_089F9D80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(388))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9632))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FA704; } @@ -4078,7 +3991,6 @@ L_089F9DE4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FA704; } @@ -4118,7 +4030,6 @@ L_089F9E2C: } L_089F9E44: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089FA594; } @@ -4126,7 +4037,6 @@ L_089F9E44: } L_089F9E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089F9E6C; } @@ -4142,7 +4052,6 @@ L_089F9E54: } L_089F9E5C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FA3E0; } @@ -4150,7 +4059,6 @@ L_089F9E5C: } L_089F9E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FA594; } @@ -4187,7 +4095,6 @@ L_089F9E98: AOT_REGCACHE_SYNC_OUT(); return; L_089F9EB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_089FA024; } @@ -4443,7 +4350,6 @@ L_089FA100: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(209))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089FA1BC; } @@ -4517,7 +4423,6 @@ L_089FA194: AOT_REGCACHE_SYNC_OUT(); return; L_089FA1BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FA704; } @@ -4534,7 +4439,6 @@ L_089FA1C4: } L_089FA1D0: { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_089FA1E0; } @@ -4542,7 +4446,6 @@ L_089FA1D0: } L_089FA1D8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_089FA3D8; } @@ -4553,9 +4456,7 @@ L_089FA1E0: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FA2F0; } @@ -4688,7 +4589,6 @@ L_089FA31C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(209))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089FA3D8; } @@ -4762,7 +4662,6 @@ L_089FA3B0: AOT_REGCACHE_SYNC_OUT(); return; L_089FA3D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FA704; } @@ -4773,9 +4672,7 @@ L_089FA3E0: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FA4C8; } @@ -4892,7 +4789,6 @@ L_089FA4F4: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(209))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089FA58C; } @@ -4951,7 +4847,6 @@ L_089FA564: AOT_REGCACHE_SYNC_OUT(); return; L_089FA58C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FA704; } @@ -4961,7 +4856,6 @@ L_089FA594: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_089FA5AC; @@ -4971,9 +4865,7 @@ L_089FA5AC: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FA608; } @@ -5011,7 +4903,6 @@ L_089FA5F0: L_089FA608: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(132))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FA640; } @@ -5031,7 +4922,6 @@ L_089FA61C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FA704; } @@ -5061,7 +4951,6 @@ L_089FA66C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(209))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089FA704; } @@ -5170,7 +5059,6 @@ L_089FA754: L_089FA76C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FA788; } @@ -5199,9 +5087,7 @@ L_089FA7A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(388))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9632))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FADBC; } @@ -5225,7 +5111,6 @@ L_089FA7BC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(6892), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5260,7 +5145,6 @@ L_089FA818: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FADBC; } @@ -5293,7 +5177,6 @@ L_089FA860: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FADBC; } @@ -5326,7 +5209,6 @@ L_089FA8A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FADBC; } @@ -5344,7 +5226,6 @@ L_089FA8CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FADBC; } @@ -5377,7 +5258,6 @@ L_089FA914: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FADBC; } @@ -5531,7 +5411,6 @@ L_089FAA28: } L_089FAA54: { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_089FAAC0; } @@ -5590,7 +5469,6 @@ L_089FAA8C: AOT_REGCACHE_SYNC_OUT(); return; L_089FAAB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FAB1C; } @@ -5714,9 +5592,7 @@ L_089FABB4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FAC6C; } @@ -5789,9 +5665,7 @@ L_089FAC6C: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FADBC; } @@ -5923,7 +5797,6 @@ L_089FADBC: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089F9D54; } @@ -5937,7 +5810,6 @@ L_089FADD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FADF8; } @@ -5946,7 +5818,6 @@ L_089FADD4: L_089FADE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FADF8; } @@ -5976,7 +5847,17 @@ L_089FADF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FAE28: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -5999,7 +5880,6 @@ L_089FAE28: L_089FAE7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FAE98; } @@ -6015,7 +5895,6 @@ L_089FAE88: } L_089FAE90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6040,9 +5919,7 @@ L_089FAEB8: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6134,7 +6011,6 @@ L_089FAF60: } L_089FAF74: { const bool branch_taken = static_cast(aot_gpr_17) < 0; - // nop if (branch_taken) { goto L_089FAFA4; } @@ -6148,7 +6024,6 @@ L_089FAF7C: AOT_REGCACHE_SYNC_OUT(); return; L_089FAF88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FAFA4; } @@ -6156,7 +6031,6 @@ L_089FAF88: } L_089FAF90: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FAFA4; } @@ -6236,9 +6110,7 @@ L_089FB00C: aot_gpr_4 = (17274u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6248,9 +6120,7 @@ L_089FB044: aot_gpr_4 = (17312u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FB0B0; } @@ -6302,7 +6172,6 @@ L_089FB05C: AOT_REGCACHE_SYNC_OUT(); return; L_089FB0A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6312,9 +6181,7 @@ L_089FB0B0: aot_gpr_4 = (17347u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FB160; } @@ -6397,7 +6264,6 @@ L_089FB110: AOT_REGCACHE_SYNC_OUT(); return; L_089FB158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6407,9 +6273,7 @@ L_089FB160: aot_gpr_4 = (17382u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FB204; } @@ -6423,7 +6287,6 @@ L_089FB178: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FB1BC; } @@ -6438,7 +6301,6 @@ L_089FB198: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6476,7 +6338,6 @@ L_089FB1BC: AOT_REGCACHE_SYNC_OUT(); return; L_089FB1FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6491,7 +6352,6 @@ L_089FB204: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FB23C; } @@ -6508,7 +6368,6 @@ L_089FB228: } L_089FB234: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB24C; } @@ -6516,7 +6375,6 @@ L_089FB234: } L_089FB23C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6524,7 +6382,6 @@ L_089FB23C: } L_089FB244: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FB260; } @@ -6541,7 +6398,6 @@ L_089FB24C: } L_089FB258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB270; } @@ -6549,7 +6405,6 @@ L_089FB258: } L_089FB260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6557,7 +6412,6 @@ L_089FB260: } L_089FB268: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FB284; } @@ -6574,7 +6428,6 @@ L_089FB270: } L_089FB27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB294; } @@ -6582,7 +6435,6 @@ L_089FB27C: } L_089FB284: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6590,7 +6442,6 @@ L_089FB284: } L_089FB28C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FB2F8; } @@ -6599,7 +6450,6 @@ L_089FB28C: L_089FB294: aot_gpr_4 = (static_cast(aot_gpr_4) < 236 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FB2F0; } @@ -6629,7 +6479,6 @@ L_089FB2A0: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_14 = ctx.fpr[16] - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_089FB300; @@ -6645,7 +6494,6 @@ L_089FB2E8: } L_089FB2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6653,7 +6501,6 @@ L_089FB2F0: } L_089FB2F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6676,7 +6523,6 @@ L_089FB304: L_089FB324: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_089FB368; } @@ -6699,7 +6545,6 @@ L_089FB330: AOT_REGCACHE_SYNC_OUT(); return; L_089FB360: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6713,7 +6558,6 @@ L_089FB368: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FB3DC; } @@ -6784,7 +6628,17 @@ L_089FB3DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB40C: aot_gpr_4 = (48896u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -6805,7 +6659,17 @@ L_089FB40C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB44C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); @@ -6836,7 +6700,6 @@ L_089FB44C: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089FB504; } @@ -6846,7 +6709,6 @@ L_089FB4CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_089FB550; } @@ -6873,7 +6735,6 @@ L_089FB4DC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB59C; } @@ -6909,7 +6770,6 @@ L_089FB504: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB59C; } @@ -6945,7 +6805,6 @@ L_089FB550: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB59C; } @@ -6957,35 +6816,84 @@ L_089FB59C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB5A4: jump_target = ctx.gpr[31]; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB5AC: jump_target = ctx.gpr[31]; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB5B4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB5BC: jump_target = ctx.gpr[31]; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB5C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2279u << 16u); @@ -7025,7 +6933,17 @@ L_089FB61C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB62C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7079,13 +6997,22 @@ L_089FB690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB6AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[31]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FB6EC; } @@ -7114,7 +7041,17 @@ L_089FB6EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB6F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[18]); @@ -7164,7 +7101,17 @@ L_089FB760: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB77C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -7178,7 +7125,17 @@ L_089FB78C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -7198,7 +7155,6 @@ L_089FB798: L_089FB7C0: aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FB7EC; } @@ -7215,7 +7171,6 @@ L_089FB7CC: } L_089FB7D8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FB7EC; } @@ -7256,7 +7211,17 @@ L_089FB80C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB820: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -7279,7 +7244,6 @@ L_089FB83C: AOT_REGCACHE_SYNC_OUT(); return; L_089FB84C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB868; } @@ -7299,13 +7263,22 @@ L_089FB868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB874: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (0u | 288u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[31]); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_089FB8B0; } @@ -7325,7 +7298,6 @@ L_089FB898: goto L_089FB77C; L_089FB8A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FB8BC; } @@ -7343,7 +7315,17 @@ L_089FB8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB8C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7377,7 +7359,6 @@ L_089FB8F0: } L_089FB914: ctx.gpr[31] = (0x089FB91Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FB91Cu) goto L_089FB91C; AOT_REGCACHE_SYNC_OUT(); return; L_089FB91C: @@ -7404,7 +7385,17 @@ L_089FB94C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FB95C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(32), aot_gpr_4); @@ -7445,7 +7436,6 @@ L_089FB9AC: } L_089FB9C8: ctx.gpr[31] = (0x089FB9D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FB9D0u) goto L_089FB9D0; AOT_REGCACHE_SYNC_OUT(); return; L_089FB9D0: @@ -7491,7 +7481,6 @@ L_089FBA00: } L_089FBA1C: ctx.gpr[31] = (0x089FBA24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBA24u) goto L_089FBA24; AOT_REGCACHE_SYNC_OUT(); return; L_089FBA24: @@ -7507,7 +7496,6 @@ L_089FBA28: } L_089FBA30: { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_089FB9E8; } @@ -7526,7 +7514,17 @@ L_089FBA38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FBA50: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7613,7 +7611,6 @@ L_089FBAF4: } L_089FBB14: ctx.gpr[31] = (0x089FBB1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBB1Cu) goto L_089FBB1C; AOT_REGCACHE_SYNC_OUT(); return; L_089FBB1C: @@ -7626,7 +7623,6 @@ L_089FBB24: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_6 & 7u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089FBAA4; } @@ -7634,7 +7630,6 @@ L_089FBB24: } L_089FBB3C: { const bool branch_taken = aot_gpr_5 == aot_gpr_17; - // nop if (branch_taken) { goto L_089FBAA4; } @@ -7659,7 +7654,17 @@ L_089FBB44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FBB74: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7698,7 +7703,6 @@ L_089FBBD4: goto L_089FBBD8; L_089FBBD8: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_089FBBF0; } @@ -7716,7 +7720,6 @@ L_089FBBF0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089FBCA0; } @@ -7775,7 +7778,6 @@ L_089FBC58: } L_089FBC78: ctx.gpr[31] = (0x089FBC80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBC80u) goto L_089FBC80; AOT_REGCACHE_SYNC_OUT(); return; L_089FBC80: @@ -7788,7 +7790,6 @@ L_089FBC88: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089FBC08; } @@ -7796,7 +7797,6 @@ L_089FBC88: } L_089FBCA0: { const bool branch_taken = aot_gpr_5 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_089FBD98; } @@ -7835,7 +7835,6 @@ L_089FBCD4: } L_089FBCF4: ctx.gpr[31] = (0x089FBCFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBCFCu) goto L_089FBCFC; AOT_REGCACHE_SYNC_OUT(); return; L_089FBCFC: @@ -7883,7 +7882,6 @@ L_089FBD38: } L_089FBD58: ctx.gpr[31] = (0x089FBD60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBD60u) goto L_089FBD60; AOT_REGCACHE_SYNC_OUT(); return; L_089FBD60: @@ -7911,7 +7909,6 @@ L_089FBD98: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089FBE44; } @@ -7970,7 +7967,6 @@ L_089FBDFC: } L_089FBE1C: ctx.gpr[31] = (0x089FBE24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBE24u) goto L_089FBE24; AOT_REGCACHE_SYNC_OUT(); return; L_089FBE24: @@ -7983,7 +7979,6 @@ L_089FBE2C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089FBDAC; } @@ -8000,7 +7995,6 @@ L_089FBE44: } L_089FBE50: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089FBFDC; } @@ -8039,7 +8033,6 @@ L_089FBE84: } L_089FBEA4: ctx.gpr[31] = (0x089FBEACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBEACu) goto L_089FBEAC; AOT_REGCACHE_SYNC_OUT(); return; L_089FBEAC: @@ -8058,7 +8051,6 @@ L_089FBEB4: L_089FBEC0: aot_gpr_6 = (0u | 45u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_089FBF2C; } @@ -8097,7 +8089,6 @@ L_089FBEF8: } L_089FBF18: ctx.gpr[31] = (0x089FBF20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBF20u) goto L_089FBF20; AOT_REGCACHE_SYNC_OUT(); return; L_089FBF20: @@ -8112,7 +8103,6 @@ L_089FBF2C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FBFDC; } @@ -8172,7 +8162,6 @@ L_089FBF94: } L_089FBFB4: ctx.gpr[31] = (0x089FBFBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FBFBCu) goto L_089FBFBC; AOT_REGCACHE_SYNC_OUT(); return; L_089FBFBC: @@ -8185,7 +8174,6 @@ L_089FBFC4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FBF40; } @@ -8203,7 +8191,6 @@ L_089FBFDC: AOT_REGCACHE_SYNC_OUT(); return; L_089FBFF8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0126_entry, 126u, 2u, 0x089FC014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0126.cpp b/profiles/vcs/generated/generated_unit_0126.cpp index bdcaecf..adae602 100644 --- a/profiles/vcs/generated/generated_unit_0126.cpp +++ b/profiles/vcs/generated/generated_unit_0126.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0126[4096] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 8, 0, 9, - 10, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 15, 16, 0, 0, 17, 0, 18, 0, 19, 0, 20, 0, 0, - 0, 0, 0, 21, 0, 22, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, - 0, 0, 27, 0, 28, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, 0, - 34, 35, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, - 0, 0, 0, 46, 0, 47, 0, 48, 49, 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 58, 0, 0, 59, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 63, 0, 0, - 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 67, 0, 0, 0, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 73, 0, - 0, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 77, 78, 0, 0, 79, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, - 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 88, - 89, 0, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, - 0, 116, 0, 117, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 121, 0, 122, 0, 123, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 125, 0, 126, 0, 127, 0, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 132, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, - 0, 0, 0, 0, 0, 142, 0, 143, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 148, 0, - 0, 149, 0, 0, 0, 0, 150, 0, 151, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 155, 156, 0, 0, - 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 165, 0, 0, 166, 0, 167, - 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 0, 0, 0, 0, 176, 0, 177, - 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 186, 0, 0, 187, 0, 0, 0, - 0, 188, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 191, 192, 0, 0, 193, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 195, 0, - 196, 197, 0, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 204, 0, - 205, 206, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 210, 211, 0, 0, 212, 0, 213, 0, 0, 214, 0, 215, 0, 0, - 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 219, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 222, 0, 223, - 0, 224, 225, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 229, 230, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, - 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 236, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 239, 0, 240, 241, 0, 0, - 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 244, 0, 245, 0, 246, 247, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, - 0, 0, 250, 0, 251, 252, 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, 258, 0, 0, 259, 0, 0, - 0, 260, 0, 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 264, 265, 0, 0, 266, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 0, 0, 0, 268, 0, 269, 270, 0, 0, 271, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 274, 275, 0, 0, 276, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 285, - 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 292, 0, - 293, 0, 0, 0, 0, 294, 0, 0, 0, 295, 0, 0, 296, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 299, 0, - 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 304, 0, 0, 305, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, 319, 0, 320, - 0, 321, 0, 322, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, - 0, 0, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, - 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 336, 0, 337, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 340, 0, 0, - 341, 0, 0, 0, 342, 0, 343, 344, 0, 0, 0, 345, 0, 346, 0, 347, 348, 0, 349, 0, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 352, 0, - 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, 357, 358, 0, 0, 359, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, - 362, 0, 0, 363, 0, 364, 0, 365, 0, 366, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 369, 0, 0, 370, 371, 0, 0, 0, 372, - 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, - 381, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 384, 0, 385, 0, 0, 0, 386, 0, 0, 387, 0, 0, 388, 0, 0, 389, 390, 0, 0, 0, - 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, - 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 399, 0, 400, 0, 0, 0, 401, 0, 402, 0, 0, 0, 0, 403, 0, 404, 0, 0, 0, 0, - 405, 0, 406, 0, 0, 0, 407, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 413, 414, 0, 0, - 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 422, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, - 0, 426, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, - 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, - 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 440, 0, 0, 0, 0, 441, 0, 0, 0, 0, - 442, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 445, 446, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 453, - 0, 454, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 457, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, - 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, - 467, 0, 0, 0, 468, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 474, - 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, - 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, - 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, - 491, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, - 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, - 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, - 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 522, 0, 0, 0, - 0, 0, 523, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 526, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, - 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 536, 537, 0, 0, 0, 0, 0, 538, 0, - 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 0, 548, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, - 0, 0, 0, 0, 555, 0, 556, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, - 0, 560, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 569, 0, 0, 0, 570, 571, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, - 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, - 0, 0, 0, 582, 0, 0, 0, 583, 0, 0, 0, 584, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 0, - 0, 0, 0, 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 595, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 600, 0, 601, 0, - 0, 0, 0, 0, 0, 602, 603, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, 0, 606, 607, 0, 0, 0, 608, 0, 0, 0, 609, - 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 612, 0, 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 617, 618, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 631, 0, 0, 0, 0, 0, 0, 0, 0, - 632, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, - 639, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 645, 0, 646, 0, 647, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 651, 0, - 0, 652, 0, 653, 0, 654, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, 657, 0, 0, 0, 658, 0, 659, 0, 0, 0, 660, 0, 0, 0, 661, 0, - 0, 662, 0, 663, 664, 0, 0, 665, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 668, 0, 669, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, - 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 675, 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 678, 0, 0, 0, 679, 0, - 680, 681, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 695, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 702, 0, 0, 0, 0, 0, 703, 0, 0, 0, 704, 0, 0, - 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 715, - 0, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 0, 0, 0, 718, 0, 719, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, - 0, 0, 0, 724, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 729, 0, 730, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0126[64] = { + 0xA04000C400004021ull, 0x040210682A994015ull, 0xAA80802350100154ull, 0x023211A808010100ull, + 0x000200302154A808ull, 0x1226420454040188ull, 0x41240AA9A0412048ull, 0x4005501001540400ull, + 0xAA02002A80801540ull, 0x010AA02002A80800ull, 0x408821A0400AA808ull, 0x0054040135010142ull, + 0xA0AAA804A4408004ull, 0x40426A02134042AAull, 0x294D010B40422293ull, 0x21340426A0213404ull, + 0x0426A021340426A0ull, 0x084D010A26A02134ull, 0xD010A28053404268ull, 0x410092214A280402ull, + 0xAAAAAAA008268084ull, 0x00008110202A00AAull, 0x2202149081000000ull, 0x0229AA104885A8D1ull, + 0x554801108C8242A9ull, 0x5008100219245281ull, 0x800024450A145510ull, 0x0002502232800000ull, + 0x8000050248A20020ull, 0x0001041041041040ull, 0x1031002108428000ull, 0x0002900A85122000ull, + 0x1000000290055000ull, 0x8000050282144091ull, 0x0001041041041040ull, 0x1031002108428000ull, + 0x0014805405122000ull, 0x80000014802A8000ull, 0x000C024410A20488ull, 0x41A1120804800800ull, + 0x0018881100120888ull, 0x080200D0400A0440ull, 0x0024000000110006ull, 0x8005022001888110ull, + 0x1100090000000008ull, 0x0088005022001888ull, 0x0040008000000000ull, 0x0000000021000000ull, + 0x5500000800100000ull, 0x0051200188C48060ull, 0x0444480600000028ull, 0x00C0000001402890ull, + 0x0000280512008889ull, 0x0000000000000000ull, 0x0001004000000000ull, 0x4451212A44280A80ull, + 0x445044441094509Aull, 0x0000500004000103ull, 0x100440008020A020ull, 0x0400020800001000ull, + 0x2208800040002800ull, 0x0004900010000040ull, 0x001540A082040054ull, 0xA082802840000040ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0126[64] = { + 1u, 10u, 27u, 43u, 55u, 67u, 82u, 99u, 110u, 124u, 135u, 149u, 162u, 178u, 196u, 216u, + 233u, 250u, 268u, 286u, 300u, 321u, 332u, 341u, 362u, 381u, 396u, 411u, 420u, 430u, 438u, 448u, + 459u, 467u, 479u, 487u, 497u, 508u, 516u, 528u, 539u, 550u, 560u, 566u, 577u, 582u, 592u, 594u, + 596u, 602u, 615u, 624u, 632u, 643u, 643u, 645u, 662u, 680u, 686u, 694u, 698u, 705u, 710u, 722u, }; void recomp_unit_0126_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0126_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x089FC000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0126[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0126[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0126[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_089FC000; @@ -925,7 +832,17 @@ L_089FC014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FC038: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(16), ctx.gpr[17]); @@ -998,7 +915,6 @@ L_089FC0D8: } L_089FC0F4: aot_gpr_31 = (0x089FC0FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC0FCu) goto L_089FC0FC; AOT_REGCACHE_SYNC_OUT(); return; L_089FC0FC: @@ -1335,7 +1251,6 @@ L_089FC36C: } L_089FC38C: aot_gpr_31 = (0x089FC394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC394u) goto L_089FC394; AOT_REGCACHE_SYNC_OUT(); return; L_089FC394: @@ -1417,7 +1332,6 @@ L_089FC40C: } L_089FC42C: aot_gpr_31 = (0x089FC434u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC434u) goto L_089FC434; AOT_REGCACHE_SYNC_OUT(); return; L_089FC434: @@ -1431,7 +1345,6 @@ L_089FC43C: goto L_089FC448; L_089FC448: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FC138; } @@ -1439,7 +1352,6 @@ L_089FC448: } L_089FC450: aot_gpr_31 = (0x089FC458u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC458u) goto L_089FC458; AOT_REGCACHE_SYNC_OUT(); return; L_089FC458: @@ -1489,7 +1401,17 @@ L_089FC494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FC4C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(20), ctx.gpr[19]); @@ -1552,7 +1474,6 @@ L_089FC548: } L_089FC568: aot_gpr_31 = (0x089FC570u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC570u) goto L_089FC570; AOT_REGCACHE_SYNC_OUT(); return; L_089FC570: @@ -1583,7 +1504,6 @@ L_089FC5A4: aot_gpr_7 = (ctx.gpr[19] + static_cast(5)); aot_gpr_6 = (aot_gpr_6 < aot_gpr_7 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089FC5C8; } @@ -1601,7 +1521,6 @@ L_089FC5C4: L_089FC5C8: aot_gpr_5 = (0u | 92u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FC640; } @@ -1689,7 +1608,6 @@ L_089FC658: } L_089FC674: aot_gpr_31 = (0x089FC67Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC67Cu) goto L_089FC67C; AOT_REGCACHE_SYNC_OUT(); return; L_089FC67C: @@ -1714,7 +1632,6 @@ L_089FC68C: } L_089FC694: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FC9CC; } @@ -1730,7 +1647,6 @@ L_089FC69C: } L_089FC6A4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_089FC9CC; } @@ -1770,11 +1686,20 @@ L_089FC6E0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-1176))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FC6F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(40))); aot_gpr_5 = (0u | 7u); @@ -1809,7 +1734,6 @@ L_089FC728: } L_089FC748: aot_gpr_31 = (0x089FC750u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC750u) goto L_089FC750; AOT_REGCACHE_SYNC_OUT(); return; L_089FC750: @@ -1858,7 +1782,6 @@ L_089FC790: } L_089FC7B0: aot_gpr_31 = (0x089FC7B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC7B8u) goto L_089FC7B8; AOT_REGCACHE_SYNC_OUT(); return; L_089FC7B8: @@ -1907,7 +1830,6 @@ L_089FC7F8: } L_089FC818: aot_gpr_31 = (0x089FC820u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC820u) goto L_089FC820; AOT_REGCACHE_SYNC_OUT(); return; L_089FC820: @@ -1955,7 +1877,6 @@ L_089FC85C: } L_089FC87C: aot_gpr_31 = (0x089FC884u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC884u) goto L_089FC884; AOT_REGCACHE_SYNC_OUT(); return; L_089FC884: @@ -2004,7 +1925,6 @@ L_089FC8C4: } L_089FC8E4: aot_gpr_31 = (0x089FC8ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC8ECu) goto L_089FC8EC; AOT_REGCACHE_SYNC_OUT(); return; L_089FC8EC: @@ -2053,7 +1973,6 @@ L_089FC92C: } L_089FC94C: aot_gpr_31 = (0x089FC954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC954u) goto L_089FC954; AOT_REGCACHE_SYNC_OUT(); return; L_089FC954: @@ -2102,7 +2021,6 @@ L_089FC994: } L_089FC9B4: aot_gpr_31 = (0x089FC9BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FC9BCu) goto L_089FC9BC; AOT_REGCACHE_SYNC_OUT(); return; L_089FC9BC: @@ -2161,7 +2079,6 @@ L_089FCA0C: } L_089FCA2C: aot_gpr_31 = (0x089FCA34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FCA34u) goto L_089FCA34; AOT_REGCACHE_SYNC_OUT(); return; L_089FCA34: @@ -2212,7 +2129,6 @@ L_089FCA78: } L_089FCA94: aot_gpr_31 = (0x089FCA9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FCA9Cu) goto L_089FCA9C; AOT_REGCACHE_SYNC_OUT(); return; L_089FCA9C: @@ -2223,7 +2139,6 @@ L_089FCAA0: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FCACC; } @@ -2235,7 +2150,6 @@ L_089FCAB4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FCA4C; } @@ -2275,7 +2189,6 @@ L_089FCB04: goto L_089FCB18; L_089FCB18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FCB74; } @@ -2311,7 +2224,6 @@ L_089FCB40: } L_089FCB60: aot_gpr_31 = (0x089FCB68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FCB68u) goto L_089FCB68; AOT_REGCACHE_SYNC_OUT(); return; L_089FCB68: @@ -2324,7 +2236,6 @@ L_089FCB70: L_089FCB74: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_089FC5A4; } @@ -2362,7 +2273,6 @@ L_089FCBA8: } L_089FCBC8: aot_gpr_31 = (0x089FCBD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 231u, 0x08A952D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FCBD0u) goto L_089FCBD0; AOT_REGCACHE_SYNC_OUT(); return; L_089FCBD0: @@ -2404,7 +2314,17 @@ L_089FCC08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FCC3C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -2444,7 +2364,6 @@ L_089FCC74: L_089FCC7C: aot_gpr_4 = (static_cast(aot_gpr_4) < -1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FCCB4; } @@ -2459,7 +2378,6 @@ L_089FCC88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD2BC; } @@ -2467,7 +2385,6 @@ L_089FCC88: } L_089FCCAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FD304; } @@ -2483,7 +2400,6 @@ L_089FCCB4: } L_089FCCBC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FCC88; } @@ -2496,7 +2412,6 @@ L_089FCCC4: AOT_REGCACHE_SYNC_OUT(); return; L_089FCCCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FCC58; } @@ -2516,11 +2431,20 @@ L_089FCCDC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-1088))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FCCF4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; aot_gpr_5 = (0u | 91u); @@ -2555,7 +2479,6 @@ L_089FCD0C: } L_089FCD14: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FCC88; } @@ -2563,7 +2486,6 @@ L_089FCD14: } L_089FCD1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FCF94; } @@ -2710,7 +2632,6 @@ L_089FCE10: goto L_089FC038; L_089FCE1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FCCCC; } @@ -2720,7 +2641,6 @@ L_089FCE24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FCE1C; } @@ -2730,7 +2650,6 @@ L_089FCE34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_089FCE1C; } @@ -3365,7 +3284,6 @@ L_089FD278: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD2A4; } @@ -3444,7 +3362,6 @@ L_089FD304: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD354; } @@ -3459,7 +3376,6 @@ L_089FD328: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD378; } @@ -3491,7 +3407,6 @@ L_089FD364: L_089FD36C: aot_gpr_5 = (0u | 95u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FD3BC; } @@ -3514,7 +3429,6 @@ L_089FD394: ctx.gpr[16] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(6))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_089FD3B0; } @@ -3547,7 +3461,6 @@ L_089FD3BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FD408; } @@ -3624,7 +3537,17 @@ L_089FD454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD46C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3678,130 +3601,302 @@ L_089FD46C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD494: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD49C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4A4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4BC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4C4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4CC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4D4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4DC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4F4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD4FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD504: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD50C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD514: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD51C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); @@ -3816,21 +3911,50 @@ L_089FD51C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD544: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD54C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD554: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -3918,7 +4042,17 @@ L_089FD5BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD660: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); @@ -3948,7 +4082,6 @@ L_089FD690: L_089FD69C: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FD6B0; } @@ -3971,7 +4104,17 @@ L_089FD6B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD6C4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -3980,7 +4123,6 @@ L_089FD6C4: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FD740; } @@ -3990,7 +4132,6 @@ L_089FD6E4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); ctx.gpr[17] = (0u | 1u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089FD740; } @@ -3999,7 +4140,6 @@ L_089FD6E4: L_089FD6F4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(64))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FD71C; } @@ -4009,7 +4149,6 @@ L_089FD700: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_089FD71C; } @@ -4027,7 +4166,6 @@ L_089FD71C: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(64), 0u); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_089FD73C; } @@ -4063,12 +4201,21 @@ L_089FD748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD75C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x089FD76Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 769u, 0x08AFF4B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FD76Cu) goto L_089FD76C; AOT_REGCACHE_SYNC_OUT(); return; L_089FD76C: @@ -4078,7 +4225,17 @@ L_089FD76C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD778: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4224))); @@ -4096,7 +4253,6 @@ L_089FD790: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(961), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FD7B4; } @@ -4112,7 +4268,6 @@ L_089FD7A4: } L_089FD7AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FD7D4; } @@ -4120,7 +4275,6 @@ L_089FD7AC: } L_089FD7B4: aot_gpr_31 = (0x089FD7BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FD7BCu) goto L_089FD7BC; AOT_REGCACHE_SYNC_OUT(); return; L_089FD7BC: @@ -4129,7 +4283,6 @@ L_089FD7BC: L_089FD7C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD7D4; } @@ -4148,14 +4301,23 @@ L_089FD7D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD7E4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD814; } @@ -4164,7 +4326,6 @@ L_089FD7E4: L_089FD800: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD81C; } @@ -4172,7 +4333,6 @@ L_089FD800: } L_089FD80C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FD87C; } @@ -4180,7 +4340,6 @@ L_089FD80C: } L_089FD814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FD87C; } @@ -4195,7 +4354,6 @@ L_089FD824: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FD86C; } @@ -4204,7 +4362,6 @@ L_089FD824: L_089FD838: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(961))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FD868; } @@ -4251,7 +4408,17 @@ L_089FD87C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD890: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_5 = (aot_gpr_5 | 1u); @@ -4260,14 +4427,23 @@ L_089FD890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD8A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FD8E0; } @@ -4276,7 +4452,6 @@ L_089FD8A0: L_089FD8CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FD8F0; } @@ -4284,7 +4459,6 @@ L_089FD8CC: } L_089FD8D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FD8F8; } @@ -4292,11 +4466,9 @@ L_089FD8D8: } L_089FD8E0: aot_gpr_31 = (0x089FD8E8u); - // nop goto L_089FDB84; L_089FD8E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FD9CC; } @@ -4419,21 +4591,40 @@ L_089FD9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD9F0: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-9304), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FD9F8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(68), ctx.gpr[16]); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(72), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FDA28; } @@ -4451,7 +4642,6 @@ L_089FDA10: } L_089FDA20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FDB70; } @@ -4467,7 +4657,6 @@ L_089FDA28: } L_089FDA30: { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_089FDA48; } @@ -4517,7 +4706,6 @@ L_089FDA6C: goto L_089FDA80; L_089FDA80: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_089FDB64; } @@ -4527,7 +4715,6 @@ L_089FDA88: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); ctx.gpr[9] = (0u | 280u); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_089FDB64; } @@ -4537,7 +4724,6 @@ L_089FDA98: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); ctx.gpr[9] = (0u + static_cast(-962)); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_089FDB64; } @@ -4546,7 +4732,6 @@ L_089FDA98: L_089FDAA8: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(960))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_089FDB64; } @@ -4606,9 +4791,7 @@ L_089FDAB4: ctx.gpr[8] = (16840u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FDB64; } @@ -4680,7 +4863,17 @@ L_089FDB74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FDB84: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_31); @@ -4712,7 +4905,17 @@ L_089FDBB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FDBC4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-848)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4224))); @@ -4735,7 +4938,6 @@ L_089FDC14: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_5 = (0u | 280u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u + static_cast(-513)); if (branch_taken) { @@ -4755,7 +4957,6 @@ L_089FDC44: } L_089FDC54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF920; } @@ -4770,7 +4971,6 @@ L_089FDC5C: L_089FDC6C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(960))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FE688; } @@ -4800,7 +5000,6 @@ L_089FDC84: } L_089FDCA0: aot_gpr_31 = (0x089FDCA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FDCA8u) goto L_089FDCA8; AOT_REGCACHE_SYNC_OUT(); return; L_089FDCA8: @@ -5030,7 +5229,6 @@ L_089FDDC0: goto L_089FDE3C; L_089FDE3C: aot_gpr_31 = (0x089FDE44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FDE44u) goto L_089FDE44; AOT_REGCACHE_SYNC_OUT(); return; L_089FDE44: @@ -5083,7 +5281,6 @@ L_089FDEC0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FDED4; } @@ -5135,7 +5332,6 @@ L_089FDF34: L_089FDF44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(760))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FE0F0; } @@ -5153,7 +5349,6 @@ L_089FDF50: } L_089FDF60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FE0F0; } @@ -5279,7 +5474,6 @@ L_089FDFC4: AOT_REGCACHE_SYNC_OUT(); return; L_089FE030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FE0F0; } @@ -5397,7 +5591,6 @@ L_089FE0F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(752))); aot_gpr_4 = (0u | 60u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089FE110; } @@ -5412,7 +5605,6 @@ L_089FE100: L_089FE110: aot_gpr_4 = (0u | 82u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089FE688; } @@ -5461,7 +5653,6 @@ L_089FE164: AOT_REGCACHE_SYNC_OUT(); return; L_089FE17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FE688; } @@ -5482,7 +5673,6 @@ L_089FE184: } L_089FE1A0: aot_gpr_31 = (0x089FE1A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FE1A8u) goto L_089FE1A8; AOT_REGCACHE_SYNC_OUT(); return; L_089FE1A8: @@ -5712,7 +5902,6 @@ L_089FE2C0: goto L_089FE33C; L_089FE33C: aot_gpr_31 = (0x089FE344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], ctx.gpr[29], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x089FE344u) goto L_089FE344; AOT_REGCACHE_SYNC_OUT(); return; L_089FE344: @@ -5765,7 +5954,6 @@ L_089FE3C0: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FE3D4; } @@ -5817,7 +6005,6 @@ L_089FE434: L_089FE444: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(760))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FE5FC; } @@ -5835,7 +6022,6 @@ L_089FE450: } L_089FE460: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FE5FC; } @@ -5964,7 +6150,6 @@ L_089FE4D0: AOT_REGCACHE_SYNC_OUT(); return; L_089FE53C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FE5FC; } @@ -6082,7 +6267,6 @@ L_089FE5FC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(752))); aot_gpr_4 = (0u | 30u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089FE61C; } @@ -6097,7 +6281,6 @@ L_089FE60C: L_089FE61C: aot_gpr_4 = (0u | 62u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_089FE688; } @@ -6172,7 +6355,6 @@ L_089FE6A4: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_gpr_5 & 7u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FF72C; } @@ -6221,7 +6403,6 @@ L_089FE72C: aot_fpr_20 = aot_fpr_20 - ctx.fpr[30]; ctx.gpr[18] = (ctx.gpr[29] + static_cast(464)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6241,7 +6422,6 @@ L_089FE768: aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fpr[30] = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = aot_fpr_20 + ctx.fpr[26]; if (branch_taken) { @@ -6253,9 +6433,7 @@ L_089FE78C: aot_gpr_4 = (49804u << 16u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FE7B0; } @@ -6272,7 +6450,6 @@ L_089FE7A4: } L_089FE7B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17096u << 16u); if (branch_taken) { @@ -6283,7 +6460,6 @@ L_089FE7B0: L_089FE7C0: ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FE7E0; @@ -6300,7 +6476,6 @@ L_089FE7E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49992u << 16u); if (branch_taken) { @@ -6311,9 +6486,7 @@ L_089FE7E0: L_089FE7F8: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FE81C; } @@ -6331,7 +6504,6 @@ L_089FE80C: } L_089FE81C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(764), ctx.gpr[9]); if (branch_taken) { @@ -6343,7 +6515,6 @@ L_089FE82C: aot_gpr_4 = (17036u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(764), ctx.gpr[9]); if (branch_taken) { @@ -6395,7 +6566,6 @@ L_089FE890: goto L_089FE8AC; L_089FE8AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(948)))))); goto L_089FE8D0; @@ -6403,7 +6573,6 @@ L_089FE8AC: goto L_089FE8BC; L_089FE8BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FE94C; @@ -6457,7 +6626,6 @@ L_089FE928: goto L_089FE944; L_089FE944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FE8AC; } @@ -6486,7 +6654,6 @@ L_089FE978: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FE998; } @@ -6511,7 +6678,6 @@ L_089FE99C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FEA08; @@ -6525,7 +6691,6 @@ L_089FE9C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FEA08; @@ -6555,7 +6720,6 @@ L_089FEA08: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FEA50; @@ -6623,7 +6787,6 @@ L_089FEAD4: aot_gpr_6 = (aot_gpr_4 | 0u); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_089FEB20; } @@ -6650,7 +6813,6 @@ L_089FEB20: goto L_089FEB3C; L_089FEB3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FEB60; @@ -6658,7 +6820,6 @@ L_089FEB3C: goto L_089FEB4C; L_089FEB4C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FEBC8; @@ -6707,7 +6868,6 @@ L_089FEBA4: goto L_089FEBC0; L_089FEBC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FEB3C; } @@ -6724,7 +6884,6 @@ L_089FEBC8: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_fpr_15 = aot_fpr_15 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FEC0C; @@ -6824,7 +6983,6 @@ L_089FECF0: goto L_089FED0C; L_089FED0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FED30; @@ -6832,7 +6990,6 @@ L_089FED0C: goto L_089FED1C; L_089FED1C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9304))); goto L_089FED98; @@ -6881,7 +7038,6 @@ L_089FED74: goto L_089FED90; L_089FED90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FED0C; } @@ -6898,7 +7054,6 @@ L_089FED98: ctx.fpr[1] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); ctx.fpr[2] = ctx.fpr[2] - ctx.fpr[1]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[1] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_089FEDDC; @@ -6978,9 +7133,7 @@ L_089FEDDC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[30]) || std::isnan(ctx.fpr[22])) && ctx.fpr[30] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FEED8; } @@ -7291,9 +7444,7 @@ L_089FF08C: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FF0E8; } @@ -7313,7 +7464,6 @@ L_089FF0E8: goto L_089FF0F0; L_089FF0F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF72C; } @@ -7324,9 +7474,7 @@ L_089FF0F8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FF118; } @@ -7344,7 +7492,6 @@ L_089FF118: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (aot_gpr_4 < static_cast(0) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_089FF148; } @@ -7370,7 +7517,6 @@ L_089FF158: goto L_089FF15C; L_089FF15C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(948)))))); goto L_089FF180; @@ -7378,7 +7524,6 @@ L_089FF15C: goto L_089FF16C; L_089FF16C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_gpr_4 << 4u); goto L_089FF1D8; @@ -7400,7 +7545,6 @@ L_089FF180: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (aot_gpr_4 < static_cast(0) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_089FF1C0; } @@ -7423,7 +7567,6 @@ L_089FF1C0: goto L_089FF1D0; L_089FF1D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF15C; } @@ -7440,7 +7583,6 @@ L_089FF1D8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); ctx.fpr[18] = ctx.fpr[18] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(948)))))); goto L_089FF214; @@ -7519,9 +7661,7 @@ L_089FF2B8: goto L_089FF2C8; L_089FF2C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FF2E8; } @@ -7529,7 +7669,6 @@ L_089FF2C8: } L_089FF2D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (aot_gpr_5 << 4u); goto L_089FF334; @@ -7568,7 +7707,6 @@ L_089FF31C: goto L_089FF32C; L_089FF32C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF2C8; } @@ -7581,7 +7719,6 @@ L_089FF334: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fpr[24] = ctx.fpr[24] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); goto L_089FF360; @@ -7662,9 +7799,7 @@ L_089FF40C: goto L_089FF41C; L_089FF41C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FF43C; } @@ -7672,7 +7807,6 @@ L_089FF41C: } L_089FF42C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_gpr_4 << 4u); goto L_089FF488; @@ -7711,7 +7845,6 @@ L_089FF470: goto L_089FF480; L_089FF480: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF41C; } @@ -7724,7 +7857,6 @@ L_089FF488: ctx.fpr[1] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); ctx.fpr[2] = ctx.fpr[2] - ctx.fpr[1]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(768), ctx.gpr[23]); goto L_089FF4B4; @@ -8048,9 +8180,7 @@ L_089FF6C0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(772))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FF724; } @@ -8104,7 +8234,6 @@ L_089FF768: L_089FF778: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[30] + static_cast(946)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FF850; } @@ -8117,7 +8246,6 @@ L_089FF784: AOT_REGCACHE_SYNC_OUT(); return; L_089FF78C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_089FF838; } @@ -8126,7 +8254,6 @@ L_089FF78C: L_089FF794: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FF810; } @@ -8137,7 +8264,6 @@ L_089FF7A0: ctx.gpr[16] = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089FF810; } @@ -8146,7 +8272,6 @@ L_089FF7A0: L_089FF7B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FF7D8; } @@ -8156,7 +8281,6 @@ L_089FF7C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FF7D8; } @@ -8171,7 +8295,6 @@ L_089FF7D8: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(64), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FF810; } @@ -8181,7 +8304,6 @@ L_089FF7E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(80))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_089FF80C; } @@ -8204,7 +8326,6 @@ L_089FF80C: L_089FF810: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FF920; } @@ -8220,7 +8341,6 @@ L_089FF81C: AOT_REGCACHE_SYNC_OUT(); return; L_089FF830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF920; } @@ -8235,7 +8355,6 @@ L_089FF838: AOT_REGCACHE_SYNC_OUT(); return; L_089FF848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FF920; } @@ -8244,7 +8363,6 @@ L_089FF848: L_089FF850: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FF920; } @@ -8255,7 +8373,6 @@ L_089FF85C: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_089FF920; } @@ -8276,7 +8393,6 @@ L_089FF888: ctx.gpr[16] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(624)))))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_089FF920; } @@ -8378,7 +8494,17 @@ L_089FF920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FF968: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-256)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4224))); @@ -8455,7 +8581,6 @@ L_089FF9B8: ctx.fpr[26] = std::bit_cast(0u); aot_gpr_5 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[26])) && ctx.fpr[28] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[30] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -8482,7 +8607,6 @@ L_089FFA14: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FFA54; } @@ -8490,7 +8614,6 @@ L_089FFA14: } L_089FFA34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FFD70; } @@ -8538,9 +8661,7 @@ L_089FFA54: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FFCBC; } @@ -8669,7 +8790,6 @@ L_089FFB30: ctx.gpr[20] = (std::bit_cast(aot_fpr_12)); ctx.gpr[20] = (ctx.gpr[20] & 255u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(192))); if (branch_taken) { @@ -8681,9 +8801,7 @@ L_089FFB8C: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FFC34; } @@ -8731,7 +8849,6 @@ L_089FFBE8: AOT_REGCACHE_SYNC_OUT(); return; L_089FFC2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FFCBC; } @@ -8781,7 +8898,6 @@ L_089FFCBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_089FFD70; } @@ -8885,11 +9001,20 @@ L_089FFD70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FFDB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_089FFE10; } @@ -8928,7 +9053,6 @@ L_089FFDC8: } L_089FFE08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FFF8C; } @@ -8936,7 +9060,6 @@ L_089FFE08: } L_089FFE10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FFF8C; } @@ -8963,7 +9086,6 @@ L_089FFE48: aot_gpr_6 = (ctx.gpr[11] | 0u); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (0u | 0u); if (branch_taken) { @@ -8975,7 +9097,6 @@ L_089FFE64: aot_gpr_6 = (aot_gpr_6 + static_cast(20)); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_7 = (aot_gpr_7 + static_cast(20)); if (branch_taken) { @@ -8997,7 +9118,6 @@ L_089FFE7C: } L_089FFE94: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_089FFF78; } @@ -9032,7 +9152,6 @@ L_089FFEC0: goto L_089FFEC8; L_089FFEC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_089FFF78; } @@ -9101,11 +9220,20 @@ L_089FFF78: } L_089FFF8C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_089FFF94: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -9114,9 +9242,7 @@ L_089FFF94: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FFFC4; } @@ -9134,9 +9260,7 @@ L_089FFFC4: aot_gpr_5 = (16256u << 16u); ctx.fpr[14] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_089FFFFC; } @@ -9146,7 +9270,6 @@ L_089FFFDC: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0127.cpp b/profiles/vcs/generated/generated_unit_0127.cpp index 91e86a9..18b78b4 100644 --- a/profiles/vcs/generated/generated_unit_0127.cpp +++ b/profiles/vcs/generated/generated_unit_0127.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0127[4094] = { - 1, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 13, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 19, 0, 0, - 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 26, 0, - 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 35, 0, 36, 0, 37, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 40, 0, 41, 0, 0, 42, 0, 0, 0, 43, - 0, 0, 0, 44, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 0, 51, 0, 0, - 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, - 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 63, 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, - 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 73, 0, 74, 0, 75, - 0, 76, 0, 77, 0, 78, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 85, 0, - 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, - 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, - 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 125, 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 0, 0, 0, 130, 0, 131, 0, 132, 0, 0, 0, 133, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 137, 138, 0, - 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 142, 0, 143, 0, 0, 144, 0, 0, 145, 0, 146, 0, 147, - 0, 148, 0, 0, 0, 149, 0, 0, 0, 150, 0, 151, 0, 152, 0, 0, 153, 0, 154, 0, 0, 0, 155, 0, 0, 0, 0, 0, 156, 157, 0, 0, - 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 161, 0, 162, 0, 0, 163, 0, 0, 164, 0, 165, 0, 166, - 0, 167, 0, 0, 0, 168, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, - 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, - 0, 0, 183, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, - 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 192, 0, 193, 0, 194, 0, 0, 195, 0, 196, 0, 197, 0, 0, 198, 0, 199, 200, - 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 203, 0, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 207, 0, 208, 0, 209, 0, 210, 0, 0, - 211, 0, 212, 0, 213, 0, 214, 0, 0, 215, 0, 216, 0, 217, 0, 218, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, - 0, 221, 0, 222, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, 228, 0, 0, 229, - 0, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 0, 0, 235, 0, 236, 237, 0, 238, 0, 239, 0, 240, 0, 0, 0, 241, 0, 242, 243, 0, - 244, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 252, 0, 253, 0, 0, 254, 0, 0, 255, 0, 256, 0, 257, 0, 258, 0, 0, 0, 259, 0, 0, 0, - 260, 0, 261, 0, 262, 0, 0, 263, 0, 264, 0, 0, 0, 0, 0, 265, 266, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 268, 0, 0, - 0, 269, 0, 270, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 274, 275, 0, 276, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, - 280, 281, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 286, 0, 287, 0, 288, 0, 0, 289, 0, - 0, 0, 290, 0, 291, 292, 0, 293, 0, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 298, 0, 299, 0, 300, - 0, 0, 0, 0, 301, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 305, 0, 306, 0, 307, 0, 0, - 308, 0, 0, 309, 0, 310, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, - 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, 320, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 324, 0, 325, 326, 0, - 327, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 336, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, - 0, 341, 0, 342, 0, 343, 0, 0, 0, 344, 0, 0, 345, 0, 346, 0, 347, 0, 0, 348, 0, 349, 0, 0, 350, 0, 351, 0, 0, 0, 352, 0, - 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, - 0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 361, 0, 0, 0, 0, 362, 363, 0, 0, 0, 0, 364, 365, 0, 366, 0, 0, 0, 0, 0, 367, 0, - 0, 368, 0, 0, 369, 370, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, - 380, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 387, 0, 388, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 392, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, - 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 406, 0, 0, 0, 407, 0, 408, 0, 409, 0, 410, 0, 411, 0, 0, 412, 0, - 413, 0, 414, 0, 415, 416, 0, 417, 0, 418, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 422, 0, 423, 0, 0, 0, 424, 425, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, - 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, - 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 445, 0, - 446, 0, 447, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 456, 0, - 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 464, 0, 465, 466, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 469, 0, 470, 471, 0, 0, 472, 0, 473, 0, 0, 0, 474, - 475, 0, 0, 476, 0, 0, 0, 477, 478, 0, 479, 0, 0, 480, 0, 0, 0, 481, 0, 482, 0, 0, 483, 0, 484, 0, 0, 0, 0, 485, 0, 486, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 491, - 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, - 496, 0, 497, 0, 498, 0, 0, 499, 0, 0, 500, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 504, - 0, 0, 505, 0, 506, 0, 0, 0, 507, 0, 0, 0, 508, 0, 509, 0, 510, 511, 0, 0, 512, 0, 513, 0, 0, 0, 0, 514, 0, 515, 0, 516, - 0, 0, 0, 517, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 521, 0, 0, 522, 0, 0, 523, 0, 0, 524, 0, 0, 0, 0, - 525, 0, 526, 0, 0, 527, 0, 0, 528, 0, 0, 529, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, - 0, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, - 545, 0, 0, 0, 546, 0, 547, 0, 548, 549, 0, 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 553, 0, 0, - 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 0, 559, 0, 560, 0, 561, 0, 562, 563, 0, 564, 0, 565, 0, 0, 0, 0, 0, 566, 0, 567, - 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, - 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 0, - 579, 0, 580, 0, 581, 0, 582, 583, 0, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, - 0, 590, 0, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 0, 597, 0, 598, 0, 599, 0, 600, 601, 0, 602, - 0, 603, 0, 0, 0, 0, 0, 604, 0, 605, 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, - 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 615, 0, 616, 0, 617, 0, 618, 619, 0, 620, 0, 621, 0, 0, 0, 0, 0, 622, 0, 623, - 0, 624, 0, 0, 0, 625, 0, 0, 626, 627, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, 0, - 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 639, 0, 640, 641, 0, 642, 0, 643, 0, 0, 0, 0, 0, 644, 0, 645, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 654, 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, - 660, 0, 0, 0, 661, 0, 0, 662, 0, 0, 663, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 667, 0, 668, 0, 0, 669, 0, 0, 670, 0, 0, - 671, 0, 672, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 0, 676, 0, 677, 0, 0, 0, 678, 679, 0, 680, 0, 0, 681, 0, 682, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 691, 0, 0, 0, 692, 0, 693, 0, 0, 0, 694, 0, 0, 695, 0, 0, 696, 0, 0, 697, - 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, - 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 702, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 705, 0, 0, 0, 706, 0, 707, 0, 708, 0, - 709, 0, 710, 0, 0, 711, 0, 712, 0, 713, 0, 714, 715, 0, 716, 0, 717, 0, 0, 0, 0, 0, 718, 0, 719, 0, 720, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, 0, 728, 0, 729, 0, 730, 0, 731, 0, - 732, 0, 0, 0, 0, 733, 0, 734, 0, 0, 0, 0, 735, 0, 736, 0, 0, 0, 0, 737, 0, 738, 0, 0, 0, 0, 739, 0, 740, 0, 0, 0, - 0, 741, 0, 742, 0, 0, 0, 0, 743, 0, 744, 745, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, - 0, 0, 748, 0, 0, 749, 0, 750, 0, 0, 0, 0, 751, 0, 752, 0, 753, 0, 754, 0, 755, 0, 756, 0, 757, 0, 758, 0, 759, 0, 760, 0, - 0, 0, 0, 761, 0, 762, 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 0, 765, 0, 766, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, 0, 769, - 0, 770, 0, 0, 0, 0, 771, 0, 772, 773, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 776, 0, - 0, 777, 0, 778, 0, 0, 0, 0, 779, 0, 780, 0, 781, 0, 782, 0, 783, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 0, 0, 0, 789, 0, - 790, 0, 0, 0, 791, 0, 792, 0, 0, 0, 793, 0, 794, 0, 0, 0, 795, 0, 796, 0, 0, 0, 797, 0, 798, 0, 0, 0, 799, 0, 800, 801, - 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 804, 0, 0, 805, 0, 806, 0, 0, 0, 0, 807, 0, 808, - 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 815, 0, 816, 0, 0, 0, 817, 0, 818, 0, 0, 0, 819, 0, 820, 0, 0, 0, 821, - 0, 822, 0, 0, 0, 823, 0, 824, 0, 0, 0, 825, 0, 826, 0, 0, 0, 827, 0, 828, 829, 0, 0, 0, 0, 0, 830, 0, 0, 0, 0, 0, - 0, 0, 0, 831, 0, 0, 0, 0, 832, 0, 0, 833, 0, 834, 0, 0, 0, 0, 835, 0, 836, 0, 837, 0, 838, 0, 839, 0, 840, 0, 841, 0, - 842, 0, 843, 0, 844, 0, 0, 0, 845, 0, 846, 0, 0, 0, 847, 0, 848, 0, 0, 0, 849, 0, 850, 0, 0, 0, 851, 0, 852, 0, 0, 0, - 853, 0, 854, 0, 0, 0, 855, 0, 856, 857, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 0, 0, 0, 0, 859, 0, 0, 0, 0, 860, 0, 0, - 861, 0, 862, 0, 0, 0, 0, 863, 0, 864, 0, 865, 0, 866, 0, 867, 0, 868, 0, 869, 0, 870, 0, 871, 0, 872, 0, 0, 0, 873, 0, 874, - 0, 0, 0, 875, 0, 876, 0, 0, 0, 877, 0, 878, 0, 0, 0, 879, 0, 880, 0, 0, 0, 881, 0, 882, 0, 0, 0, 883, 0, 884, 885, 0, - 0, 0, 0, 0, 886, 0, 0, 0, 0, 887, 0, 0, 0, 888, 0, 0, 0, 889, 0, 890, 0, 891, 0, 892, 0, 893, 0, 894, 0, 895, 0, 896, - 0, 897, 0, 0, 0, 898, 0, 899, 0, 0, 0, 900, 0, 901, 0, 0, 0, 902, 0, 903, 0, 0, 0, 904, 0, 905, 0, 0, 0, 906, 0, 907, - 0, 0, 0, 908, 0, 909, 0, 910, 0, 911, 0, 912, 0, 913, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, - 0, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 919, 0, 0, 0, 0, 920, 0, 0, 0, 0, 921, 0, 0, 0, - 0, 0, 0, 0, 0, 922, 0, 923, 0, 0, 0, 0, 924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, 926, 0, 0, 927, 0, 0, 0, - 928, 0, 0, 0, 0, 0, 0, 0, 0, 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, 932, 0, 933, 0, 934, 935, 0, 0, 0, 0, 0, - 0, 0, 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, 0, 0, 938, 0, 0, - 939, 0, 940, 0, 0, 0, 0, 941, 0, 0, 942, 0, 943, 944, 0, 0, 0, 945, 0, 0, 946, 0, 947, 948, 0, 949, 0, 0, 0, 950, 0, 0, - 951, 0, 952, 0, 0, 953, 0, 0, 0, 954, 0, 0, 955, 0, 956, 957, 0, 958, 959, 0, 960, 0, 0, 961, 0, 0, 962, 0, 963, 964, 0, 965, - 966, 0, 0, 0, 0, 967, 968, 0, 969, 0, 0, 970, 971, 0, 972, 0, 973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, 976, 0, 0, 0, 977, 0, 0, 978, 0, 979, 0, - 0, 0, 980, 0, 0, 981, 0, 0, 982, 0, 0, 0, 983, 0, 0, 984, 0, 0, 985, 0, 986, 0, 987, 0, 0, 0, 0, 0, 0, 0, 988, 0, - 0, 989, 990, 0, 0, 0, 0, 991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 992, 993, 0, 0, 0, 994, 0, 995, 0, 996, 0, 997, 0, 998, 0, - 0, 0, 999, 1000, 0, 1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1002, 0, 0, 1003, 0, 0, 0, 1004, 0, 1005, 0, 1006, 1007, 0, 0, - 0, 1008, 0, 0, 0, 0, 0, 0, 1009, 0, 0, 0, 1010, 1011, 0, 0, 0, 0, 0, 1012, 0, 0, 0, 1013, 1014, 0, 0, 0, 0, 0, 1015, 0, - 0, 0, 1016, 1017, 0, 0, 0, 0, 1018, 0, 0, 0, 1019, 1020, 0, 1021, 0, 1022, 0, 0, 0, 0, 0, 0, 1023, 0, 0, 1024, 0, 0, 0, 1025, - 1026, 0, 0, 0, 1027, 0, 1028, 1029, 0, 1030, 1031, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0, 0, 0, 0, 0, 0, 0, 1034, - 0, 0, 1035, 0, 0, 0, 1036, 0, 0, 1037, 0, 0, 0, 1038, 0, 0, 1039, 0, 0, 0, 1040, 0, 0, 1041, 0, 0, 0, 1042, 0, 0, 1043, 0, - 1044, 0, 1045, 0, 1046, 0, 1047, 0, 1048, 0, 1049, 0, 1050, 0, 1051, 1052, 0, 0, 1053, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1054, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0127[64] = { + 0x344288A02A02D015ull, 0x0000008350848802ull, 0x0400000000082008ull, 0x2483028889484AA0ull, + 0x0804100407014210ull, 0xAA41010480040052ull, 0x555555555041056Aull, 0x0211355555555555ull, + 0xA92A200862054544ull, 0xA92A200830452A22ull, 0x0825100830452A22ull, 0xD2A5501442008144ull, + 0x0104AA552A914940ull, 0x68AB45549511020Aull, 0x1154951004100825ull, 0x410AD12A20418295ull, + 0xAA2042B44A881053ull, 0x288108A92A201110ull, 0x2414408568951108ull, 0x4529522A02089440ull, + 0x4161860221102140ull, 0x1084300000490432ull, 0x0000000001042129ull, 0x000A80001500008Aull, + 0x0111000000005540ull, 0x801082B54AA88202ull, 0x0000080808000B14ull, 0x4904A890A0084850ull, + 0x4444800101020205ull, 0x8A6921A001122288ull, 0xA0420200A14A2589ull, 0x8802249548000401ull, + 0x09248148A8535114ull, 0x2006408404022925ull, 0x20880B51200A8900ull, 0x80000210A0AD52AAull, + 0x202A0AD52AA20880ull, 0x20880A82B54AA882ull, 0x20880B22A0AD52AAull, 0x00841200A0AD52AAull, + 0x1082085000015004ull, 0x14B1491524A91491ull, 0x0009002100000100ull, 0x9245140008000040ull, + 0x5441488080001080ull, 0x5555148005415AA5ull, 0x20040D0A142850A1ull, 0x850A1428555550A4ull, + 0x4555550A42010342ull, 0xA1484020D1451451ull, 0x041A28A28A28AAAAull, 0x1451451555542908ull, + 0xA2AAAA8521008345ull, 0xAAAA221068A28A28ull, 0x40022AA8A28A28A2ull, 0x1084002000080002ull, + 0x00400201128010A0ull, 0x2400000406A08000ull, 0xB496D22522D23485ull, 0x5230000400015961ull, + 0x5546008640549124ull, 0x418831023512002Cull, 0x808016D18902B10Cull, 0x2004D55548912244ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0127[64] = { + 1u, 20u, 30u, 34u, 52u, 63u, 76u, 102u, 129u, 148u, 167u, 183u, 201u, 221u, 244u, 260u, + 280u, 301u, 317u, 335u, 353u, 368u, 380u, 387u, 396u, 404u, 422u, 430u, 446u, 457u, 475u, 492u, + 505u, 525u, 539u, 554u, 571u, 590u, 610u, 632u, 650u, 660u, 683u, 688u, 698u, 709u, 732u, 748u, + 770u, 790u, 809u, 831u, 853u, 875u, 897u, 916u, 922u, 931u, 939u, 966u, 980u, 999u, 1016u, 1035u, }; void recomp_unit_0127_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0127_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A00000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0127[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0127[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0127[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A00000; @@ -1231,20 +1138,27 @@ L_08A00000: goto L_08A00008; L_08A00008: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00010: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[14] = std::bit_cast(std::bit_cast(aot_fpr_0) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A00038; } @@ -1252,7 +1166,6 @@ L_08A00010: } L_08A00030: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0003C; } @@ -1263,20 +1176,27 @@ L_08A00038: goto L_08A0003C; L_08A0003C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00044: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[14] = std::bit_cast(std::bit_cast(aot_fpr_0) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0006C; } @@ -1292,18 +1212,26 @@ L_08A00064: } L_08A0006C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00074: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); ctx.fpr[14] = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_0 = std::bit_cast(0u); if (branch_taken) { @@ -1321,9 +1249,7 @@ L_08A00094: } L_08A0009C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_0)) && aot_fpr_12 == aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A000BC; } @@ -1333,7 +1259,6 @@ L_08A000AC: aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_0 = aot_fpr_0 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A000BC; } @@ -1341,11 +1266,20 @@ L_08A000AC: } L_08A000BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A000C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -1355,9 +1289,7 @@ L_08A000C4: goto L_08A00010; L_08A000D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_0)) && aot_fpr_20 == aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A000F0; } @@ -1382,7 +1314,17 @@ L_08A000F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00104: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1392,7 +1334,6 @@ L_08A00104: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_gpr_31 = (0x08A0012Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0012Cu) goto L_08A0012C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0012C: @@ -1404,7 +1345,6 @@ L_08A0012C: L_08A0013C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0) & 0x7FFFFFFFu); aot_gpr_31 = (0x08A00148u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A00148u) goto L_08A00148; AOT_REGCACHE_SYNC_OUT(); return; L_08A00148: @@ -1425,7 +1365,6 @@ L_08A0015C: AOT_REGCACHE_SYNC_OUT(); return; L_08A00170: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08A00180; } @@ -1455,7 +1394,17 @@ L_08A00184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0019C: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); ctx.gpr[7] = (15948u << 16u); @@ -1509,7 +1458,6 @@ L_08A0020C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0024C; } @@ -1737,7 +1685,6 @@ L_08A002E8: } L_08A00314: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A0038C; } @@ -1745,7 +1692,6 @@ L_08A00314: } L_08A0031C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A00360; } @@ -1753,7 +1699,6 @@ L_08A0031C: } L_08A00324: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0038C; } @@ -1762,7 +1707,6 @@ L_08A00324: L_08A0032C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0034C; } @@ -1786,7 +1730,6 @@ L_08A0034C: goto L_08A00358; L_08A00358: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0038C; } @@ -1795,7 +1738,6 @@ L_08A00358: L_08A00360: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(40))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0037C; } @@ -1819,9 +1761,7 @@ L_08A0037C: goto L_08A0038C; L_08A0038C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A003A4; } @@ -1840,9 +1780,7 @@ L_08A003A4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A003C4; } @@ -1855,9 +1793,7 @@ L_08A003C4: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A003E8; } @@ -1900,9 +1836,7 @@ L_08A00410: L_08A00424: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A00440; } @@ -1922,7 +1856,6 @@ L_08A00440: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(0))); goto L_08A00468; @@ -1940,7 +1873,6 @@ L_08A00468: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(42), static_cast(0u)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(0), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1964,7 +1896,6 @@ L_08A004B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48972u << 16u); if (branch_taken) { @@ -2000,7 +1931,6 @@ L_08A004EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A00518; } @@ -2009,7 +1939,6 @@ L_08A004EC: L_08A00504: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A00518; } @@ -2039,7 +1968,17 @@ L_08A00518: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00548: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2075,7 +2014,17 @@ L_08A00588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A005A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2113,7 +2062,6 @@ L_08A005D8: } L_08A005E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A005F4; } @@ -2121,7 +2069,6 @@ L_08A005E4: } L_08A005EC: aot_gpr_31 = (0x08A005F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A005F4u) goto L_08A005F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A005F4: @@ -2148,7 +2095,6 @@ L_08A00604: goto L_08A0060C; L_08A0060C: aot_gpr_31 = (0x08A00614u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A00614u) goto L_08A00614; AOT_REGCACHE_SYNC_OUT(); return; L_08A00614: @@ -2156,7 +2102,6 @@ L_08A00614: goto L_08A00618; L_08A00618: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A00628; } @@ -2180,14 +2125,23 @@ L_08A00628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00640: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.gpr[6] = (aot_gpr_5 < static_cast(20) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08A007B0; } @@ -2199,18 +2153,25 @@ L_08A00658: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-992))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00670: aot_gpr_31 = (0x08A00678u); - // nop goto L_08A007E4; L_08A00678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2218,11 +2179,9 @@ L_08A00678: } L_08A00680: aot_gpr_31 = (0x08A00688u); - // nop goto L_08A0088C; L_08A00688: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2230,11 +2189,9 @@ L_08A00688: } L_08A00690: aot_gpr_31 = (0x08A00698u); - // nop goto L_08A0098C; L_08A00698: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2242,11 +2199,9 @@ L_08A00698: } L_08A006A0: aot_gpr_31 = (0x08A006A8u); - // nop goto L_08A00A8C; L_08A006A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2254,11 +2209,9 @@ L_08A006A8: } L_08A006B0: aot_gpr_31 = (0x08A006B8u); - // nop goto L_08A00AEC; L_08A006B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2266,11 +2219,9 @@ L_08A006B8: } L_08A006C0: aot_gpr_31 = (0x08A006C8u); - // nop goto L_08A00B3C; L_08A006C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2278,11 +2229,9 @@ L_08A006C8: } L_08A006D0: aot_gpr_31 = (0x08A006D8u); - // nop goto L_08A00D24; L_08A006D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2290,11 +2239,9 @@ L_08A006D8: } L_08A006E0: aot_gpr_31 = (0x08A006E8u); - // nop goto L_08A00E68; L_08A006E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2302,11 +2249,9 @@ L_08A006E8: } L_08A006F0: aot_gpr_31 = (0x08A006F8u); - // nop goto L_08A00F58; L_08A006F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2314,11 +2259,9 @@ L_08A006F8: } L_08A00700: aot_gpr_31 = (0x08A00708u); - // nop goto L_08A00FE0; L_08A00708: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2326,11 +2269,9 @@ L_08A00708: } L_08A00710: aot_gpr_31 = (0x08A00718u); - // nop goto L_08A01030; L_08A00718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2338,11 +2279,9 @@ L_08A00718: } L_08A00720: aot_gpr_31 = (0x08A00728u); - // nop goto L_08A010B8; L_08A00728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2350,11 +2289,9 @@ L_08A00728: } L_08A00730: aot_gpr_31 = (0x08A00738u); - // nop goto L_08A01110; L_08A00738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2362,11 +2299,9 @@ L_08A00738: } L_08A00740: aot_gpr_31 = (0x08A00748u); - // nop goto L_08A01130; L_08A00748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2374,11 +2309,9 @@ L_08A00748: } L_08A00750: aot_gpr_31 = (0x08A00758u); - // nop goto L_08A011C0; L_08A00758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2386,11 +2319,9 @@ L_08A00758: } L_08A00760: aot_gpr_31 = (0x08A00768u); - // nop goto L_08A0120C; L_08A00768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2398,11 +2329,9 @@ L_08A00768: } L_08A00770: aot_gpr_31 = (0x08A00778u); - // nop goto L_08A0129C; L_08A00778: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2410,11 +2339,9 @@ L_08A00778: } L_08A00780: aot_gpr_31 = (0x08A00788u); - // nop goto L_08A012E8; L_08A00788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2422,11 +2349,9 @@ L_08A00788: } L_08A00790: aot_gpr_31 = (0x08A00798u); - // nop goto L_08A012F4; L_08A00798: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2434,11 +2359,9 @@ L_08A00798: } L_08A007A0: aot_gpr_31 = (0x08A007A8u); - // nop goto L_08A01364; L_08A007A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A007B4; } @@ -2454,7 +2377,17 @@ L_08A007B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A007C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2471,7 +2404,17 @@ L_08A007D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A007E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2559,7 +2502,17 @@ L_08A00878: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0088C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2602,7 +2555,6 @@ L_08A008D4: L_08A008E0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A008FC; } @@ -2616,7 +2568,6 @@ L_08A008EC: goto L_08A008F4; L_08A008F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0092C; } @@ -2648,7 +2599,6 @@ L_08A00914: AOT_REGCACHE_SYNC_OUT(); return; L_08A00924: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A00934; } @@ -2665,7 +2615,6 @@ L_08A0092C: L_08A00934: aot_gpr_17 = (aot_gpr_16 | 0u); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A00948; } @@ -2713,7 +2662,17 @@ L_08A00974: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0098C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2756,7 +2715,6 @@ L_08A009D4: L_08A009E0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A009FC; } @@ -2770,7 +2728,6 @@ L_08A009EC: goto L_08A009F4; L_08A009F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A00A2C; } @@ -2802,7 +2759,6 @@ L_08A00A14: AOT_REGCACHE_SYNC_OUT(); return; L_08A00A24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A00A34; } @@ -2819,7 +2775,6 @@ L_08A00A2C: L_08A00A34: aot_gpr_17 = (aot_gpr_16 | 0u); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A00A48; } @@ -2867,7 +2822,17 @@ L_08A00A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2914,7 +2879,17 @@ L_08A00AD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00AEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -2951,7 +2926,17 @@ L_08A00B20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00B3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3000,7 +2985,6 @@ L_08A00B90: AOT_REGCACHE_SYNC_OUT(); return; L_08A00BB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A00BC8; } @@ -3008,12 +2992,10 @@ L_08A00BB0: } L_08A00BB8: aot_gpr_31 = (0x08A00BC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 734u, 0x08B3AAF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A00BC0u) goto L_08A00BC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A00BC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A00BDC; } @@ -3070,7 +3052,6 @@ L_08A00BFC: AOT_REGCACHE_SYNC_OUT(); return; L_08A00C18: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A00C74; } @@ -3100,7 +3081,6 @@ L_08A00C40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(64))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A00C74; } @@ -3109,7 +3089,6 @@ L_08A00C40: L_08A00C50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A00C64; } @@ -3117,7 +3096,6 @@ L_08A00C50: } L_08A00C5C: aot_gpr_31 = (0x08A00C64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A00C64u) goto L_08A00C64; AOT_REGCACHE_SYNC_OUT(); return; L_08A00C64: @@ -3127,7 +3105,6 @@ L_08A00C64: AOT_REGCACHE_SYNC_OUT(); return; L_08A00C6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A00C88; } @@ -3144,7 +3121,6 @@ L_08A00C74: } L_08A00C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A00CAC; } @@ -3156,7 +3132,6 @@ L_08A00C88: goto L_08A00D24; L_08A00C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A00D0C; } @@ -3229,7 +3204,17 @@ L_08A00D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00D24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (ctx.gpr[28] + static_cast(7768)); @@ -3330,7 +3315,6 @@ L_08A00DC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A00DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A00E00; } @@ -3408,7 +3392,17 @@ L_08A00E50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00E68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3451,7 +3445,6 @@ L_08A00EB0: L_08A00EBC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A00ED8; } @@ -3465,7 +3458,6 @@ L_08A00EC8: goto L_08A00ED0; L_08A00ED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A00F08; } @@ -3497,7 +3489,6 @@ L_08A00EF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A00F00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A00F10; } @@ -3514,7 +3505,6 @@ L_08A00F08: L_08A00F10: aot_gpr_4 = (aot_gpr_16 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A00F24; } @@ -3555,7 +3545,17 @@ L_08A00F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00F58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -3617,7 +3617,6 @@ L_08A00FBC: AOT_REGCACHE_SYNC_OUT(); return; L_08A00FC4: aot_gpr_31 = (0x08A00FCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 493u, 0x08AB5CF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A00FCCu) goto L_08A00FCC; AOT_REGCACHE_SYNC_OUT(); return; L_08A00FCC: @@ -3629,7 +3628,17 @@ L_08A00FCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A00FE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); @@ -3642,7 +3651,6 @@ L_08A00FE0: goto L_08A00FF8; L_08A00FF8: aot_gpr_31 = (0x08A01000u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01000u) goto L_08A01000; AOT_REGCACHE_SYNC_OUT(); return; L_08A01000: @@ -3656,7 +3664,6 @@ L_08A01004: AOT_REGCACHE_SYNC_OUT(); return; L_08A01010: aot_gpr_31 = (0x08A01018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 1005u, 0x08AC3C94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01018u) goto L_08A01018; AOT_REGCACHE_SYNC_OUT(); return; L_08A01018: @@ -3669,7 +3676,17 @@ L_08A01018: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01030: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -3731,7 +3748,6 @@ L_08A01094: AOT_REGCACHE_SYNC_OUT(); return; L_08A0109C: aot_gpr_31 = (0x08A010A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 495u, 0x08AB5D1Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A010A4u) goto L_08A010A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A010A4: @@ -3743,7 +3759,17 @@ L_08A010A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A010B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -3788,12 +3814,21 @@ L_08A010FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01110: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A01120u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0197_entry, 197u, 766u, 0x08B1B3B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01120u) goto L_08A01120; AOT_REGCACHE_SYNC_OUT(); return; L_08A01120: @@ -3804,7 +3839,17 @@ L_08A01120: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01130: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3846,7 +3891,6 @@ L_08A01174: L_08A01180: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A01194; } @@ -3883,7 +3927,17 @@ L_08A011AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A011C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -3919,13 +3973,22 @@ L_08A011F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0120C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x08A01220u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 212u, 0x08AB50BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01220u) goto L_08A01220; AOT_REGCACHE_SYNC_OUT(); return; L_08A01220: @@ -3986,7 +4049,6 @@ L_08A01278: AOT_REGCACHE_SYNC_OUT(); return; L_08A01280: aot_gpr_31 = (0x08A01288u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 807u, 0x08AB6E88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01288u) goto L_08A01288; AOT_REGCACHE_SYNC_OUT(); return; L_08A01288: @@ -3998,7 +4060,17 @@ L_08A01288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0129C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -4034,7 +4106,17 @@ L_08A012D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A012E8: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(4211), static_cast(0u)); jump_target = aot_gpr_31; @@ -4042,7 +4124,17 @@ L_08A012E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A012F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -4095,7 +4187,17 @@ L_08A0134C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01364: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); @@ -4110,7 +4212,6 @@ L_08A01364: } L_08A01384: aot_gpr_31 = (0x08A0138Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0138Cu) goto L_08A0138C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0138C: @@ -4165,7 +4266,6 @@ L_08A013E8: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A013B8; } @@ -4186,14 +4286,34 @@ L_08A013F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01418: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-16128), static_cast(aot_gpr_4)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01420: aot_gpr_5 = (aot_gpr_4 + static_cast(416)); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(-416), 0u); @@ -4203,7 +4323,17 @@ L_08A01420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01434: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6900))); @@ -4232,7 +4362,17 @@ L_08A01460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01474: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(416))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), ctx.gpr[6]); @@ -4241,7 +4381,17 @@ L_08A01474: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01484: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8284))); @@ -4264,7 +4414,6 @@ L_08A014A8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-9199))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A014C0; } @@ -4278,7 +4427,6 @@ L_08A014C0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-9198))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A014D8; } @@ -4289,16 +4437,13 @@ L_08A014D4: goto L_08A014D8; L_08A014D8: aot_gpr_31 = (0x08A014E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A014E0u) goto L_08A014E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A014E0: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A01510; } @@ -4307,7 +4452,6 @@ L_08A014E0: L_08A014F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-9197))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A01510; } @@ -4316,7 +4460,6 @@ L_08A014F8: L_08A01504: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4188))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A01514; } @@ -4334,14 +4477,23 @@ L_08A01514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01528: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8976))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A015B4; } @@ -4356,7 +4508,6 @@ L_08A01540: L_08A0154C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A015B0; } @@ -4379,7 +4530,17 @@ L_08A015B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A015C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4396,12 +4557,21 @@ L_08A015DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A015F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A01614; } @@ -4418,7 +4588,6 @@ L_08A01600: } L_08A0160C: aot_gpr_31 = (0x08A01614u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01614u) goto L_08A01614; AOT_REGCACHE_SYNC_OUT(); return; L_08A01614: @@ -4428,7 +4597,17 @@ L_08A01614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01620: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4445,7 +4624,17 @@ L_08A01634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01648: ctx.gpr[7] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); @@ -4512,16 +4701,24 @@ L_08A01660: } L_08A01704: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0170C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08A01768; } @@ -4577,9 +4774,7 @@ L_08A0171C: aot_fpr_12 = std::bit_cast(ctx.gpr[6]); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A01770; } @@ -4587,7 +4782,6 @@ L_08A0171C: } L_08A01760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A017CC; } @@ -4653,9 +4847,7 @@ L_08A01770: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A017C4; } @@ -4729,9 +4921,7 @@ L_08A017CC: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A01820; } @@ -4759,14 +4949,34 @@ L_08A01828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01830: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01838: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -4820,7 +5030,17 @@ L_08A018E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01904: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -4859,7 +5079,6 @@ L_08A0193C: } L_08A0194C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A01964; } @@ -4867,7 +5086,6 @@ L_08A0194C: } L_08A01954: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A01964; } @@ -4875,7 +5093,6 @@ L_08A01954: } L_08A0195C: aot_gpr_31 = (0x08A01964u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01964u) goto L_08A01964; AOT_REGCACHE_SYNC_OUT(); return; L_08A01964: @@ -4909,7 +5126,6 @@ L_08A01980: goto L_08A01988; L_08A01988: aot_gpr_31 = (0x08A01990u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01990u) goto L_08A01990; AOT_REGCACHE_SYNC_OUT(); return; L_08A01990: @@ -4917,7 +5133,6 @@ L_08A01990: goto L_08A01994; L_08A01994: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A019A4; } @@ -4941,7 +5156,17 @@ L_08A019A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A019BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -4951,7 +5176,17 @@ L_08A019BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A019D0: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -4963,7 +5198,6 @@ L_08A019D0: aot_gpr_4 = (0u | 0u); ctx.gpr[8] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[6]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A01A20; } @@ -4972,7 +5206,6 @@ L_08A019D0: L_08A019FC: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A01A10; } @@ -5001,11 +5234,20 @@ L_08A01A20: goto L_08A01A24; L_08A01A24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01A2C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -5026,7 +5268,17 @@ L_08A01A2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01A6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -5039,7 +5291,17 @@ L_08A01A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5131,7 +5393,6 @@ L_08A01AAC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A01B38; } @@ -5165,7 +5426,17 @@ L_08A01B38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01B4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5184,7 +5455,6 @@ L_08A01B4C: } L_08A01B74: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A01B90; } @@ -5206,7 +5476,6 @@ L_08A01B7C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A01B9C; } @@ -5265,11 +5534,20 @@ L_08A01BC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01BE0: aot_gpr_5 = (ctx.gpr[6] & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A01BF8; } @@ -5290,11 +5568,20 @@ L_08A01BF8: goto L_08A01C00; L_08A01C00: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01C08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -5320,7 +5607,17 @@ L_08A01C24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01C44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -5346,7 +5643,17 @@ L_08A01C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01C80: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_16); @@ -5358,7 +5665,6 @@ L_08A01C80: { const std::uint32_t aot_run_words[6]{ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(68), aot_run_words); } { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A01D1C; } @@ -5367,7 +5673,6 @@ L_08A01C80: L_08A01CBC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_17; - // nop if (branch_taken) { goto L_08A01D0C; } @@ -5377,7 +5682,6 @@ L_08A01CC8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.gpr[6] = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = ctx.gpr[6] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A01CF8; } @@ -5415,7 +5719,6 @@ L_08A01D0C: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A01CBC; } @@ -5429,7 +5732,6 @@ L_08A01D24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); aot_gpr_4 = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A01EFC; } @@ -5518,7 +5820,6 @@ L_08A01DC0: } L_08A01DCC: aot_gpr_31 = (0x08A01DD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01DD4u) goto L_08A01DD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A01DD4: @@ -5614,7 +5915,6 @@ L_08A01E4C: } L_08A01E58: aot_gpr_31 = (0x08A01E60u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A01E60u) goto L_08A01E60; AOT_REGCACHE_SYNC_OUT(); return; L_08A01E60: @@ -5701,7 +6001,17 @@ L_08A01F00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A01F28: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_16); @@ -5714,7 +6024,6 @@ L_08A01F28: { const std::uint32_t aot_run_words[7]{ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(72), aot_run_words); } { const bool branch_taken = ctx.gpr[6] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A01F90; } @@ -5723,7 +6032,6 @@ L_08A01F28: L_08A01F6C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_17; - // nop if (branch_taken) { goto L_08A01F80; } @@ -5747,7 +6055,6 @@ L_08A01F80: } L_08A01F88: { const bool branch_taken = ctx.gpr[6] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A01F6C; } @@ -5910,7 +6217,6 @@ L_08A0208C: } L_08A02098: aot_gpr_31 = (0x08A020A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A020A0u) goto L_08A020A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A020A0: @@ -5925,7 +6231,6 @@ L_08A020A0: L_08A020BC: ctx.gpr[6] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[6] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A02120; } @@ -5934,7 +6239,6 @@ L_08A020BC: L_08A020C8: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_17; - // nop if (branch_taken) { goto L_08A02114; } @@ -5943,7 +6247,6 @@ L_08A020C8: L_08A020D4: ctx.gpr[7] = (ctx.gpr[6] + static_cast(4)); { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A02108; } @@ -5982,7 +6285,6 @@ L_08A02108: L_08A02114: ctx.gpr[6] = (ctx.gpr[6] + static_cast(4)); { const bool branch_taken = ctx.gpr[6] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A020C8; } @@ -6054,7 +6356,6 @@ L_08A0219C: L_08A021B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A02134; } @@ -6081,7 +6382,17 @@ L_08A021C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A021F4: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -6100,7 +6411,6 @@ L_08A021F4: L_08A02220: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A02244; } @@ -6142,7 +6452,6 @@ L_08A0224C: aot_gpr_4 = (0u | 0u); ctx.gpr[8] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[6]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A022A0; } @@ -6151,7 +6460,6 @@ L_08A0224C: L_08A02274: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A02298; } @@ -6169,7 +6477,6 @@ L_08A02280: } L_08A02290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A022A0; } @@ -6188,11 +6495,20 @@ L_08A022A0: goto L_08A022A4; L_08A022A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A022AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -6241,7 +6557,6 @@ L_08A022F4: } L_08A02304: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0231C; } @@ -6249,7 +6564,6 @@ L_08A02304: } L_08A0230C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0231C; } @@ -6257,7 +6571,6 @@ L_08A0230C: } L_08A02314: aot_gpr_31 = (0x08A0231Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0231Cu) goto L_08A0231C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0231C: @@ -6291,7 +6604,6 @@ L_08A02338: goto L_08A02340; L_08A02340: aot_gpr_31 = (0x08A02348u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02348u) goto L_08A02348; AOT_REGCACHE_SYNC_OUT(); return; L_08A02348: @@ -6299,7 +6611,6 @@ L_08A02348: goto L_08A0234C; L_08A0234C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0235C; } @@ -6323,14 +6634,34 @@ L_08A0235C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02374: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0237C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6373,7 +6704,17 @@ L_08A023A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A023FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -6422,7 +6763,6 @@ L_08A02444: } L_08A02454: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0246C; } @@ -6430,7 +6770,6 @@ L_08A02454: } L_08A0245C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0246C; } @@ -6438,7 +6777,6 @@ L_08A0245C: } L_08A02464: aot_gpr_31 = (0x08A0246Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0246Cu) goto L_08A0246C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0246C: @@ -6472,7 +6810,6 @@ L_08A02488: goto L_08A02490; L_08A02490: aot_gpr_31 = (0x08A02498u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02498u) goto L_08A02498; AOT_REGCACHE_SYNC_OUT(); return; L_08A02498: @@ -6480,7 +6817,6 @@ L_08A02498: goto L_08A0249C; L_08A0249C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A024AC; } @@ -6504,21 +6840,50 @@ L_08A024AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A024C4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A024CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A024D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -6567,7 +6932,6 @@ L_08A0251C: } L_08A0252C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A02544; } @@ -6575,7 +6939,6 @@ L_08A0252C: } L_08A02534: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A02544; } @@ -6583,7 +6946,6 @@ L_08A02534: } L_08A0253C: aot_gpr_31 = (0x08A02544u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02544u) goto L_08A02544; AOT_REGCACHE_SYNC_OUT(); return; L_08A02544: @@ -6617,7 +6979,6 @@ L_08A02560: goto L_08A02568; L_08A02568: aot_gpr_31 = (0x08A02570u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02570u) goto L_08A02570; AOT_REGCACHE_SYNC_OUT(); return; L_08A02570: @@ -6625,7 +6986,6 @@ L_08A02570: goto L_08A02574; L_08A02574: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A02584; } @@ -6649,21 +7009,50 @@ L_08A02584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0259C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A025A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A025AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -6712,7 +7101,6 @@ L_08A025F4: } L_08A02604: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0261C; } @@ -6720,7 +7108,6 @@ L_08A02604: } L_08A0260C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0261C; } @@ -6728,7 +7115,6 @@ L_08A0260C: } L_08A02614: aot_gpr_31 = (0x08A0261Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0261Cu) goto L_08A0261C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0261C: @@ -6762,7 +7148,6 @@ L_08A02638: goto L_08A02640; L_08A02640: aot_gpr_31 = (0x08A02648u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02648u) goto L_08A02648; AOT_REGCACHE_SYNC_OUT(); return; L_08A02648: @@ -6770,7 +7155,6 @@ L_08A02648: goto L_08A0264C; L_08A0264C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0265C; } @@ -6794,26 +7178,55 @@ L_08A0265C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02674: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 3u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0267C: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9064))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02684: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(1918))); ctx.gpr[6] = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08A026A0; } @@ -6833,11 +7246,20 @@ L_08A026A0: goto L_08A026A4; L_08A026A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A026AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -6886,7 +7308,6 @@ L_08A026F4: } L_08A02704: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0271C; } @@ -6894,7 +7315,6 @@ L_08A02704: } L_08A0270C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0271C; } @@ -6902,7 +7322,6 @@ L_08A0270C: } L_08A02714: aot_gpr_31 = (0x08A0271Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0271Cu) goto L_08A0271C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0271C: @@ -6936,7 +7355,6 @@ L_08A02738: goto L_08A02740; L_08A02740: aot_gpr_31 = (0x08A02748u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02748u) goto L_08A02748; AOT_REGCACHE_SYNC_OUT(); return; L_08A02748: @@ -6944,7 +7362,6 @@ L_08A02748: goto L_08A0274C; L_08A0274C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0275C; } @@ -6968,14 +7385,34 @@ L_08A0275C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02774: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 4u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0277C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -6994,7 +7431,6 @@ L_08A0277C: L_08A027A4: aot_gpr_17 = (aot_gpr_5 + static_cast(64)); aot_gpr_31 = (0x08A027B0u); - // nop goto L_08A02A20; L_08A027B0: { const std::uint32_t vfpu_address = aot_gpr_17 + static_cast(0); @@ -7046,7 +7482,17 @@ L_08A027C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A027DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (16585u << 16u); @@ -7078,21 +7524,50 @@ L_08A02808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02830: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02838: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02840: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -7219,7 +7694,6 @@ L_08A02930: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A0295C; } @@ -7228,7 +7702,6 @@ L_08A02930: L_08A02940: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A02954; } @@ -7299,7 +7772,6 @@ L_08A02980: } L_08A02988: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A029C0; } @@ -7370,7 +7842,6 @@ L_08A029D4: L_08A029DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A029F0; } @@ -7378,7 +7849,6 @@ L_08A029DC: } L_08A029E8: aot_gpr_31 = (0x08A029F0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A029F0u) goto L_08A029F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A029F0: @@ -7400,7 +7870,17 @@ L_08A029F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9732))); @@ -7446,7 +7926,6 @@ L_08A02A94: L_08A02AC0: ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x08A02ACCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02ACCu) goto L_08A02ACC; AOT_REGCACHE_SYNC_OUT(); return; L_08A02ACC: @@ -7472,7 +7951,6 @@ L_08A02ACC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[30] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08A02B18u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02B18u) goto L_08A02B18; AOT_REGCACHE_SYNC_OUT(); return; L_08A02B18: @@ -7507,7 +7985,6 @@ L_08A02B18: aot_gpr_5 = (0u | 0u); ctx.gpr[6] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08A02BC0; } @@ -7553,9 +8030,7 @@ L_08A02B6C: ctx.gpr[6] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[6]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A02BB0; } @@ -7569,7 +8044,6 @@ L_08A02BB0: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); ctx.gpr[6] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08A02B6C; } @@ -7577,7 +8051,6 @@ L_08A02BB0: } L_08A02BC0: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A02AC0; } @@ -7587,7 +8060,6 @@ L_08A02BC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9732))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9736))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A02BFC; } @@ -7640,7 +8112,6 @@ L_08A02C1C: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A02AC0; } @@ -7672,7 +8143,17 @@ L_08A02C30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02C7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_17); @@ -7730,7 +8211,6 @@ L_08A02CD8: } L_08A02CE8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A02D00; } @@ -7738,7 +8218,6 @@ L_08A02CE8: } L_08A02CF0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A02D00; } @@ -7746,7 +8225,6 @@ L_08A02CF0: } L_08A02CF8: aot_gpr_31 = (0x08A02D00u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02D00u) goto L_08A02D00; AOT_REGCACHE_SYNC_OUT(); return; L_08A02D00: @@ -7780,7 +8258,6 @@ L_08A02D1C: goto L_08A02D24; L_08A02D24: aot_gpr_31 = (0x08A02D2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A02D2Cu) goto L_08A02D2C; AOT_REGCACHE_SYNC_OUT(); return; L_08A02D2C: @@ -7788,7 +8265,6 @@ L_08A02D2C: goto L_08A02D30; L_08A02D30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A02D40; } @@ -7812,21 +8288,50 @@ L_08A02D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02D58: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 5u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02D60: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02D68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[6] + static_cast(20))); @@ -7852,7 +8357,6 @@ L_08A02D9C: goto L_08A03EDC; L_08A02DA8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A02DF0; } @@ -7862,7 +8366,6 @@ L_08A02DB0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A02EA8; } @@ -7910,7 +8413,6 @@ L_08A02DE0: } L_08A02DE8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A02E8C; } @@ -7942,7 +8444,6 @@ L_08A02E00: AOT_REGCACHE_SYNC_OUT(); return; L_08A02E14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A02EAC; } @@ -7958,7 +8459,6 @@ L_08A02E1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A02E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A02EAC; } @@ -7974,7 +8474,6 @@ L_08A02E38: AOT_REGCACHE_SYNC_OUT(); return; L_08A02E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A02EAC; } @@ -7990,7 +8489,6 @@ L_08A02E54: AOT_REGCACHE_SYNC_OUT(); return; L_08A02E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A02EAC; } @@ -8006,7 +8504,6 @@ L_08A02E70: AOT_REGCACHE_SYNC_OUT(); return; L_08A02E84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A02EAC; } @@ -8022,7 +8519,6 @@ L_08A02E8C: AOT_REGCACHE_SYNC_OUT(); return; L_08A02EA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A02EAC; } @@ -8045,7 +8541,17 @@ L_08A02EAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A02EC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_17, ctx.gpr[18], ctx.gpr[19]}; @@ -8067,7 +8573,6 @@ L_08A02EF4: aot_gpr_5 = (0u | 3u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A02F68; } @@ -8080,7 +8585,6 @@ L_08A02F08: goto L_08A03EDC; L_08A02F14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A02F60; } @@ -8091,7 +8595,6 @@ L_08A02F1C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A03020; } @@ -8139,7 +8642,6 @@ L_08A02F50: } L_08A02F58: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A03004; } @@ -8179,7 +8681,6 @@ L_08A02F78: AOT_REGCACHE_SYNC_OUT(); return; L_08A02F8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03024; } @@ -8195,7 +8696,6 @@ L_08A02F94: AOT_REGCACHE_SYNC_OUT(); return; L_08A02FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03024; } @@ -8211,7 +8711,6 @@ L_08A02FB0: AOT_REGCACHE_SYNC_OUT(); return; L_08A02FC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03024; } @@ -8227,7 +8726,6 @@ L_08A02FCC: AOT_REGCACHE_SYNC_OUT(); return; L_08A02FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03024; } @@ -8243,7 +8741,6 @@ L_08A02FE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A02FFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03024; } @@ -8259,7 +8756,6 @@ L_08A03004: AOT_REGCACHE_SYNC_OUT(); return; L_08A03018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03024; } @@ -8282,7 +8778,17 @@ L_08A03024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03040: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8303,7 +8809,6 @@ L_08A03064: aot_gpr_5 = (0u | 3u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A030D8; } @@ -8316,7 +8821,6 @@ L_08A03078: goto L_08A03EDC; L_08A03084: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A030D0; } @@ -8327,7 +8831,6 @@ L_08A0308C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A03178; } @@ -8375,7 +8878,6 @@ L_08A030C0: } L_08A030C8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A03160; } @@ -8414,7 +8916,6 @@ L_08A030E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A030F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0317C; } @@ -8429,7 +8930,6 @@ L_08A03100: AOT_REGCACHE_SYNC_OUT(); return; L_08A03110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0317C; } @@ -8444,7 +8944,6 @@ L_08A03118: AOT_REGCACHE_SYNC_OUT(); return; L_08A03128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0317C; } @@ -8459,7 +8958,6 @@ L_08A03130: AOT_REGCACHE_SYNC_OUT(); return; L_08A03140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0317C; } @@ -8474,7 +8972,6 @@ L_08A03148: AOT_REGCACHE_SYNC_OUT(); return; L_08A03158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0317C; } @@ -8489,7 +8986,6 @@ L_08A03160: AOT_REGCACHE_SYNC_OUT(); return; L_08A03170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0317C; } @@ -8511,7 +9007,17 @@ L_08A0317C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03194: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8532,7 +9038,6 @@ L_08A031B8: aot_gpr_5 = (0u | 3u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0322C; } @@ -8545,7 +9050,6 @@ L_08A031CC: goto L_08A03EDC; L_08A031D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A03224; } @@ -8556,7 +9060,6 @@ L_08A031E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A032CC; } @@ -8604,7 +9107,6 @@ L_08A03214: } L_08A0321C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A032B4; } @@ -8643,7 +9145,6 @@ L_08A0323C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0324C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A032D0; } @@ -8658,7 +9159,6 @@ L_08A03254: AOT_REGCACHE_SYNC_OUT(); return; L_08A03264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A032D0; } @@ -8673,7 +9173,6 @@ L_08A0326C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0327C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A032D0; } @@ -8688,7 +9187,6 @@ L_08A03284: AOT_REGCACHE_SYNC_OUT(); return; L_08A03294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A032D0; } @@ -8703,7 +9201,6 @@ L_08A0329C: AOT_REGCACHE_SYNC_OUT(); return; L_08A032AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A032D0; } @@ -8718,7 +9215,6 @@ L_08A032B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A032C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A032D0; } @@ -8740,7 +9236,17 @@ L_08A032D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A032E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8761,7 +9267,6 @@ L_08A0330C: aot_gpr_5 = (0u | 3u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A03380; } @@ -8774,7 +9279,6 @@ L_08A03320: goto L_08A03EDC; L_08A0332C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A03378; } @@ -8785,7 +9289,6 @@ L_08A03334: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A03420; } @@ -8833,7 +9336,6 @@ L_08A03368: } L_08A03370: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A03408; } @@ -8872,7 +9374,6 @@ L_08A03390: AOT_REGCACHE_SYNC_OUT(); return; L_08A033A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03424; } @@ -8887,7 +9388,6 @@ L_08A033A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A033B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03424; } @@ -8902,7 +9402,6 @@ L_08A033C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A033D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03424; } @@ -8917,7 +9416,6 @@ L_08A033D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A033E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03424; } @@ -8932,7 +9430,6 @@ L_08A033F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A03400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03424; } @@ -8947,7 +9444,6 @@ L_08A03408: AOT_REGCACHE_SYNC_OUT(); return; L_08A03418: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03424; } @@ -8969,7 +9465,17 @@ L_08A03424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0343C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8990,7 +9496,6 @@ L_08A03460: aot_gpr_5 = (0u | 3u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A034D4; } @@ -9003,7 +9508,6 @@ L_08A03474: goto L_08A03EDC; L_08A03480: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A034CC; } @@ -9014,7 +9518,6 @@ L_08A03488: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A03574; } @@ -9062,7 +9565,6 @@ L_08A034BC: } L_08A034C4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A0355C; } @@ -9101,7 +9603,6 @@ L_08A034E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A034F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03578; } @@ -9116,7 +9617,6 @@ L_08A034FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A0350C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03578; } @@ -9131,7 +9631,6 @@ L_08A03514: AOT_REGCACHE_SYNC_OUT(); return; L_08A03524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03578; } @@ -9146,7 +9645,6 @@ L_08A0352C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0353C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03578; } @@ -9161,7 +9659,6 @@ L_08A03544: AOT_REGCACHE_SYNC_OUT(); return; L_08A03554: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03578; } @@ -9176,7 +9673,6 @@ L_08A0355C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0356C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03578; } @@ -9198,13 +9694,22 @@ L_08A03578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03590: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A035FC; } @@ -9214,7 +9719,6 @@ L_08A035A4: ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(20))); ctx.gpr[7] = (0u | 3u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A035F4; } @@ -9272,7 +9776,6 @@ L_08A035E4: } L_08A035EC: { const bool branch_taken = ctx.gpr[6] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A0367C; } @@ -9380,7 +9883,6 @@ L_08A0368C: } L_08A03694: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A036A4; } @@ -9410,7 +9912,17 @@ L_08A036B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A036C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_31); @@ -9480,7 +9992,17 @@ L_08A036F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03704: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -9549,7 +10071,17 @@ L_08A03704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0374C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -9618,7 +10150,17 @@ L_08A0374C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03794: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); @@ -9676,7 +10218,6 @@ L_08A037F0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A03880; } @@ -9713,7 +10254,6 @@ L_08A03830: AOT_REGCACHE_SYNC_OUT(); return; L_08A0385C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03968; } @@ -9722,7 +10262,6 @@ L_08A0385C: L_08A03864: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A03880; } @@ -9732,7 +10271,6 @@ L_08A03870: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(48))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A038A4; } @@ -9787,9 +10325,7 @@ L_08A038A4: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A03964; } @@ -9865,9 +10401,7 @@ L_08A038D8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A03964; } @@ -9884,7 +10418,6 @@ L_08A0393C: AOT_REGCACHE_SYNC_OUT(); return; L_08A03954: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A03964; } @@ -9916,7 +10449,17 @@ L_08A03968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03988: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[8]); @@ -9985,7 +10528,6 @@ L_08A03A1C: } L_08A03A28: aot_gpr_31 = (0x08A03A30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A03A30u) goto L_08A03A30; AOT_REGCACHE_SYNC_OUT(); return; L_08A03A30: @@ -10027,7 +10569,6 @@ L_08A03A64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A03A94; } @@ -10036,7 +10577,6 @@ L_08A03A64: L_08A03A74: aot_gpr_4 = (ctx.gpr[22] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A03A88; } @@ -10092,7 +10632,6 @@ L_08A03AC4: goto L_08A03AC8; L_08A03AC8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A03B00; } @@ -10164,7 +10703,6 @@ L_08A03B2C: goto L_08A03B30; L_08A03B30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A03B40; } @@ -10172,7 +10710,6 @@ L_08A03B30: } L_08A03B38: aot_gpr_31 = (0x08A03B40u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A03B40u) goto L_08A03B40; AOT_REGCACHE_SYNC_OUT(); return; L_08A03B40: @@ -10200,7 +10737,17 @@ L_08A03B40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03B88: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -10232,7 +10779,6 @@ L_08A03BD4: ctx.gpr[8] = (aot_gpr_5 | 0u); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A03BF8; } @@ -10245,7 +10791,6 @@ L_08A03BE4: goto L_08A0170C; L_08A03BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03C88; } @@ -10338,7 +10883,17 @@ L_08A03C88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03C9C: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -10386,7 +10941,6 @@ L_08A03CE0: } L_08A03CE8: { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A03CF8; } @@ -10415,11 +10969,20 @@ L_08A03D08: goto L_08A03D0C; L_08A03D0C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -10430,7 +10993,6 @@ L_08A03D14: L_08A03D44: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A03D68; } @@ -10448,7 +11010,6 @@ L_08A03D50: } L_08A03D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03EB0; } @@ -10456,7 +11017,6 @@ L_08A03D60: } L_08A03D68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03EB0; } @@ -10561,7 +11121,6 @@ L_08A03E30: goto L_08A03E34; L_08A03E34: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A03E98; } @@ -10625,7 +11184,6 @@ L_08A03E98: goto L_08A03E9C; L_08A03E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A03EA8; } @@ -10636,7 +11194,6 @@ L_08A03EA4: goto L_08A03EA8; L_08A03EA8: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A03D74; } @@ -10660,7 +11217,17 @@ L_08A03EB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03EDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_gpr_4 | 0u); @@ -10752,7 +11319,6 @@ L_08A03F78: AOT_REGCACHE_SYNC_OUT(); return; L_08A03F80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A03FB8; } @@ -10816,7 +11382,17 @@ L_08A03FBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A03FC8: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -10828,7 +11404,6 @@ L_08A03FC8: aot_gpr_5 = (0u | 0u); ctx.gpr[8] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[6]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 3u, 0x08A0401Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10838,7 +11413,6 @@ L_08A03FF4: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 2u, 0x08A0400Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0128.cpp b/profiles/vcs/generated/generated_unit_0128.cpp index 862842a..8e5e97e 100644 --- a/profiles/vcs/generated/generated_unit_0128.cpp +++ b/profiles/vcs/generated/generated_unit_0128.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0128[4094] = { - 1, 0, 2, 0, 0, 0, 3, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, - 0, 0, 8, 0, 9, 0, 0, 0, 10, 0, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 18, 0, 0, 19, 0, 20, 0, 0, 0, 21, 0, 22, 0, 0, 23, 0, 24, 0, 25, 0, 26, 0, - 27, 0, 0, 0, 28, 0, 0, 29, 0, 0, 30, 0, 0, 31, 0, 32, 0, 0, 0, 33, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, - 0, 0, 0, 38, 39, 0, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 44, 45, 0, 0, - 46, 0, 47, 0, 0, 0, 48, 0, 49, 0, 50, 0, 0, 51, 52, 0, 0, 53, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 56, 0, 57, 58, 0, 0, 59, 0, 60, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 63, 0, 64, 0, 65, 0, 66, - 0, 67, 0, 0, 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, 71, 0, 72, 0, 0, 0, 73, 74, 0, 0, 75, 0, 0, 76, 0, 77, 0, 0, - 0, 0, 0, 0, 78, 79, 0, 0, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 84, 0, 0, - 85, 0, 86, 0, 0, 0, 87, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 94, 0, 95, 0, 0, 96, 0, 97, 0, 0, 0, 98, 0, 99, 0, 100, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, - 0, 103, 0, 0, 0, 0, 104, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 111, 0, 112, 0, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 0, 0, 124, 125, 0, 126, 0, 0, 0, 127, 128, 0, 129, 0, 0, 0, 130, 0, 0, 0, 131, - 0, 0, 0, 132, 133, 0, 134, 0, 0, 0, 135, 0, 0, 0, 136, 137, 0, 138, 0, 0, 0, 139, 0, 0, 0, 140, 141, 0, 142, 0, 0, 0, - 143, 0, 0, 0, 144, 145, 0, 146, 0, 147, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, 151, 0, 0, 0, 152, 0, 0, 153, 0, - 0, 0, 0, 154, 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, - 0, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 166, 0, 167, 0, 0, 0, 168, 0, 169, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 176, - 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 0, 184, 185, 0, 186, 0, 0, - 187, 188, 0, 189, 0, 0, 190, 0, 191, 0, 192, 193, 0, 194, 0, 0, 195, 0, 196, 197, 0, 198, 0, 0, 199, 0, 200, 201, 0, 202, 0, 0, - 203, 0, 204, 205, 0, 206, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 212, 0, 213, 0, 0, 0, 214, 0, - 0, 215, 0, 0, 0, 216, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 223, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, - 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, - 236, 0, 0, 0, 0, 237, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 245, 0, 0, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 0, 253, 254, 0, 255, 0, 0, 256, 257, 0, 258, 0, 0, 259, - 0, 260, 0, 261, 262, 0, 263, 0, 0, 264, 0, 265, 266, 0, 267, 0, 0, 268, 0, 269, 270, 0, 271, 0, 0, 272, 0, 273, 274, 0, 275, 0, - 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 281, 0, 282, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 285, 0, - 0, 0, 286, 0, 287, 0, 0, 0, 0, 288, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, 0, 0, 0, - 0, 294, 0, 295, 0, 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, - 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 306, 307, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 319, 0, - 0, 0, 320, 0, 321, 0, 0, 0, 0, 322, 0, 323, 0, 0, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 0, 330, 0, 0, - 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 0, 336, 0, 337, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 344, 0, 345, - 0, 0, 346, 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 350, 0, 0, 0, 351, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 355, 0, - 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 361, 0, 0, 362, 0, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, 0, 366, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, - 0, 370, 0, 371, 0, 0, 372, 0, 373, 0, 0, 0, 0, 374, 0, 375, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, - 380, 0, 381, 0, 0, 382, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 387, - 0, 0, 388, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 392, 0, 393, 0, 0, 0, 0, 394, 0, - 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 398, 0, 399, 0, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, 405, - 0, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, 0, - 412, 0, 0, 413, 0, 0, 414, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 418, 0, 419, 0, 0, - 0, 0, 420, 0, 0, 0, 421, 0, 0, 422, 0, 423, 0, 0, 424, 0, 425, 0, 0, 0, 0, 426, 0, 427, 0, 428, 0, 0, 0, 429, 0, 0, - 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, - 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 444, - 0, 445, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 0, 448, 0, 449, 0, 0, 450, 0, 451, 0, 0, 0, 0, 452, 0, 453, 0, 454, 0, 0, - 0, 455, 0, 0, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 462, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, - 469, 0, 0, 470, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 474, 0, 475, 0, 0, 476, 0, 477, 0, 0, 0, 0, 478, 0, 479, - 0, 480, 0, 0, 0, 481, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 484, 0, 485, 0, 486, 0, 0, 487, 488, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 0, 0, 494, 0, 0, 495, 0, - 0, 0, 0, 496, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 503, - 0, 0, 0, 0, 0, 504, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, - 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 513, 514, 0, - 0, 0, 515, 0, 0, 516, 0, 517, 518, 0, 519, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 522, 0, 0, 0, 523, 0, 0, 524, 0, 525, - 526, 0, 527, 0, 0, 0, 528, 0, 0, 0, 0, 0, 529, 530, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 0, 0, 533, 534, 0, 0, 0, 535, - 0, 0, 536, 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, 0, - 0, 542, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 547, 0, 0, 0, - 0, 0, 0, 548, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, 0, - 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 556, 0, 0, 557, 0, 0, 0, 0, 0, 558, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, - 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, - 0, 568, 0, 0, 569, 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, - 0, 576, 0, 0, 577, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 582, 0, 0, 0, 0, 0, - 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 585, 0, 0, 0, 0, 586, 0, 0, 587, 0, 588, 589, 0, 0, 590, 0, 0, 0, 0, 591, - 0, 0, 592, 0, 593, 594, 0, 0, 595, 0, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, - 0, 601, 602, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, - 0, 608, 0, 609, 610, 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, - 617, 0, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 620, 621, 0, 0, 622, 0, 0, 0, 0, 0, 623, 0, 0, 0, 624, 0, 0, 625, 0, 0, - 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 633, - 0, 0, 0, 0, 0, 634, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, - 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 0, 645, 0, 0, 646, 0, 0, 0, 0, 647, 0, 0, 648, 0, 0, - 0, 0, 649, 0, 0, 650, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 655, 0, 0, 656, 657, 0, 0, 0, 0, - 658, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 660, 0, 0, 0, 661, 0, 662, 663, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 667, 0, 668, 0, 0, 0, 0, 0, 669, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 674, 0, 0, - 0, 0, 675, 0, 676, 677, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, - 0, 0, 682, 0, 683, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 691, 0, 0, 692, 0, 693, 0, 694, 0, 695, 0, 696, 0, 697, 0, 698, 0, 699, - 0, 700, 0, 701, 0, 0, 0, 702, 0, 703, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, - 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 0, 708, 0, 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 719, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 728, 0, 729, 730, 0, 731, 0, 0, 0, 732, 0, 733, 0, 734, 0, 0, 735, 0, 0, 0, 0, 736, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 0, - 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 745, - 0, 0, 0, 746, 0, 0, 747, 0, 0, 0, 748, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 0, 0, 751, 0, 0, 0, 0, 0, 752, 0, 753, - 0, 0, 0, 754, 0, 0, 0, 755, 0, 0, 0, 756, 0, 757, 0, 758, 0, 759, 0, 0, 760, 0, 0, 761, 0, 762, 0, 763, 0, 764, 0, 765, - 0, 766, 0, 0, 767, 0, 768, 0, 0, 769, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 772, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 775, 0, 0, 776, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 781, 0, 782, 0, 783, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, - 0, 787, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 789, 0, 790, 0, 0, 0, 791, 0, 792, 0, 0, 793, 0, 0, 794, 0, 795, 0, 0, 0, - 0, 796, 0, 797, 0, 798, 0, 799, 0, 800, 0, 801, 0, 802, 0, 0, 0, 0, 803, 0, 804, 0, 805, 0, 806, 0, 807, 0, 0, 0, 0, 0, - 0, 808, 0, 0, 0, 0, 0, 809, 0, 0, 0, 0, 0, 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 0, 0, 0, 815, 0, 816, 0, 0, - 817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, 819, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 0, 0, 822, 0, 0, 823, 824, 0, 0, 0, 0, 0, 0, 825, 0, 0, 826, 0, 0, 0, 827, 0, - 828, 0, 829, 0, 0, 830, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, 0, 832, 0, 0, 833, 0, 0, 834, 0, 0, 0, 0, 0, 0, 835, - 0, 0, 836, 0, 837, 0, 0, 0, 0, 838, 839, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 841, 0, - 0, 0, 0, 0, 842, 0, 843, 0, 844, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 847, 0, 848, 0, 0, 0, 0, 0, 0, 849, 0, - 850, 0, 851, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 854, 0, 0, 0, 0, 0, 0, 855, - 0, 856, 0, 857, 0, 0, 0, 0, 0, 0, 858, 0, 859, 860, 0, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 862, 0, 0, 0, 863, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 867, 868, 0, 0, 869, - 0, 0, 870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 871, 872, 0, 0, 873, 0, 874, 0, 875, 0, 0, 0, 0, 0, 0, 0, 0, 876, - 0, 0, 0, 877, 0, 0, 0, 878, 0, 0, 0, 879, 0, 880, 0, 0, 881, 0, 0, 882, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 884, 0, - 0, 0, 0, 0, 0, 885, 0, 0, 886, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 889, 0, 0, 0, 0, 890, 0, 891, 0, - 0, 0, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 893, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 894, 0, 0, 0, 895, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 898, 0, 0, 0, 0, 0, 899, 900, 0, 901, 0, 0, 902, 0, 903, 0, 0, 904, 0, 0, 905, 0, 0, 906, 907, 908, 0, 909, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0128[64] = { + 0x04080D14300002C5ull, 0x1498A4915528A6A0ull, 0x0082654535002218ull, 0x29314922AA0514D4ull, + 0x011205452A004430ull, 0x0856AAC2049514A8ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x8009002000000000ull, 0x1622C45888B162AAull, 0x1108888848A212B1ull, 0x0095145200000208ull, + 0x2CAA880182042020ull, 0x4512292D2D2D2D4Bull, 0x2200750221450A22ull, 0x0004006102101008ull, + 0x9659555100145200ull, 0x448A24525A5A5A5Aull, 0x042400EA04428A14ull, 0x0000008018810808ull, + 0x25548A14550AA40Aull, 0xA442910014911001ull, 0x4911001250A22A14ull, 0x0A22A14A44291001ull, + 0x4291001491100125ull, 0x11001250A22A14A4ull, 0x22A14A4429100149ull, 0x910014911001250Aull, + 0x001250A22A14A442ull, 0xA14A442910014911ull, 0x4848481001950A22ull, 0x0A00012090484848ull, + 0xA46045A460484044ull, 0x089004848C123045ull, 0x0902420811200242ull, 0x0904848480904848ull, + 0x0488241212121212ull, 0x8824413484D21204ull, 0x2212209A20902026ull, 0x9048242424413441ull, + 0x2424242424242120ull, 0x004689010C920A24ull, 0x21400A0041520000ull, 0x0081003450104034ull, + 0xAAAA408008001008ull, 0x008508508000428Aull, 0x0044000A00010AAAull, 0x0080000000000000ull, + 0x084A8B4002120004ull, 0x880A004040802400ull, 0xAA92A888A0888448ull, 0x1024408010410252ull, + 0x400044000A820A00ull, 0x05542AAA14945202ull, 0x0001140128554082ull, 0x8124082544819100ull, + 0x40A8055040040614ull, 0x0002340A81400105ull, 0x8054C00498050091ull, 0x5088092041092888ull, + 0x0000122000020004ull, 0x0000000000000000ull, 0x0000000000000080ull, 0x2E494B0400000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0128[64] = { + 1u, 15u, 38u, 55u, 78u, 93u, 115u, 115u, 115u, 119u, 143u, 161u, 172u, 187u, 215u, 232u, + 240u, 260u, 286u, 302u, 309u, 331u, 346u, 363u, 380u, 395u, 412u, 430u, 445u, 462u, 480u, 496u, + 508u, 526u, 542u, 554u, 568u, 583u, 601u, 617u, 634u, 649u, 665u, 675u, 687u, 700u, 712u, 723u, + 724u, 737u, 746u, 766u, 778u, 787u, 808u, 821u, 836u, 850u, 862u, 877u, 892u, 897u, 897u, 898u, }; void recomp_unit_0128_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0128_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A04004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0128[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0128[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0128[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A04004; @@ -1082,7 +989,6 @@ LOCAL_DISPATCH: } L_08A04004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04020; } @@ -1103,11 +1009,20 @@ L_08A0401C: goto L_08A04020; L_08A04020: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A04028: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -1146,7 +1061,6 @@ L_08A04078: AOT_REGCACHE_SYNC_OUT(); return; L_08A0408C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A040AC; } @@ -1188,7 +1102,17 @@ L_08A040B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A040D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1221,7 +1145,6 @@ L_08A040EC: } L_08A04118: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04150; } @@ -1241,7 +1164,6 @@ L_08A04128: L_08A0412C: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A04140; } @@ -1267,7 +1189,6 @@ L_08A04140: } L_08A04150: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A0417C; } @@ -1285,7 +1206,6 @@ L_08A04164: AOT_REGCACHE_SYNC_OUT(); return; L_08A0416C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A04184; } @@ -1293,7 +1213,6 @@ L_08A0416C: } L_08A04174: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04210; } @@ -1311,7 +1230,6 @@ L_08A04184: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A041EC; } @@ -1320,7 +1238,6 @@ L_08A04184: L_08A04194: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A041E0; } @@ -1329,7 +1246,6 @@ L_08A04194: L_08A041A0: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A041D4; } @@ -1374,7 +1290,6 @@ L_08A041D4: L_08A041E0: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A04194; } @@ -1382,7 +1297,6 @@ L_08A041E0: } L_08A041EC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A04210; } @@ -1415,12 +1329,21 @@ L_08A04214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A04228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0426C; } @@ -1445,7 +1368,6 @@ L_08A04238: } L_08A04264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0429C; } @@ -1465,7 +1387,6 @@ L_08A04274: L_08A04278: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0428C; } @@ -1491,7 +1412,6 @@ L_08A0428C: } L_08A0429C: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08A042AC; } @@ -1521,7 +1441,17 @@ L_08A042BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A042C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1552,7 +1482,6 @@ L_08A042E0: } L_08A0430C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04344; } @@ -1572,7 +1501,6 @@ L_08A0431C: L_08A04320: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A04334; } @@ -1598,7 +1526,6 @@ L_08A04334: } L_08A04344: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A04380; } @@ -1623,7 +1550,6 @@ L_08A04368: AOT_REGCACHE_SYNC_OUT(); return; L_08A04370: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A04388; } @@ -1631,7 +1557,6 @@ L_08A04370: } L_08A04378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04414; } @@ -1649,7 +1574,6 @@ L_08A04388: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A043F0; } @@ -1658,7 +1582,6 @@ L_08A04388: L_08A04398: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A043E4; } @@ -1667,7 +1590,6 @@ L_08A04398: L_08A043A4: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A043D8; } @@ -1712,7 +1634,6 @@ L_08A043D8: L_08A043E4: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A04398; } @@ -1720,7 +1641,6 @@ L_08A043E4: } L_08A043F0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A04414; } @@ -1753,12 +1673,21 @@ L_08A04418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0442C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A04470; } @@ -1783,7 +1712,6 @@ L_08A0443C: } L_08A04468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0449C; } @@ -1800,7 +1728,6 @@ L_08A04470: L_08A04478: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0448C; } @@ -1826,7 +1753,6 @@ L_08A0448C: } L_08A0449C: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A044AC; } @@ -1859,12 +1785,21 @@ L_08A044C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A044D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A04518; } @@ -1889,7 +1824,6 @@ L_08A044E4: } L_08A04510: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04544; } @@ -1906,7 +1840,6 @@ L_08A04518: L_08A04520: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A04534; } @@ -1932,7 +1865,6 @@ L_08A04534: } L_08A04544: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A04554; } @@ -1959,7 +1891,17 @@ L_08A04560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0456C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2015,7 +1957,6 @@ L_08A045B8: goto L_08A045C0; L_08A045C0: aot_gpr_31 = (0x08A045C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A045C8u) goto L_08A045C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A045C8: @@ -2023,7 +1964,6 @@ L_08A045C8: goto L_08A045CC; L_08A045CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A045DC; } @@ -2046,7 +1986,17 @@ L_08A045DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A045F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); @@ -2247,7 +2197,17 @@ L_08A045F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A04898: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2268,7 +2228,6 @@ L_08A04898: L_08A048C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A04AE4; } @@ -2326,7 +2285,6 @@ L_08A04918: } L_08A04920: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A049F4; } @@ -2336,7 +2294,6 @@ L_08A04928: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 39u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A0493C; } @@ -2347,7 +2304,6 @@ L_08A04938: goto L_08A0493C; L_08A0493C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04A18; } @@ -2357,7 +2313,6 @@ L_08A04944: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 40u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A04958; } @@ -2368,7 +2323,6 @@ L_08A04954: goto L_08A04958; L_08A04958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04A18; } @@ -2378,7 +2332,6 @@ L_08A04960: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 43u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A04990; } @@ -2388,7 +2341,6 @@ L_08A04970: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 52u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A04990; } @@ -2398,7 +2350,6 @@ L_08A04980: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A04994; } @@ -2409,7 +2360,6 @@ L_08A04990: goto L_08A04994; L_08A04994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04A18; } @@ -2419,7 +2369,6 @@ L_08A0499C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 44u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A049BC; } @@ -2429,7 +2378,6 @@ L_08A049AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A049C0; } @@ -2440,7 +2388,6 @@ L_08A049BC: goto L_08A049C0; L_08A049C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04A18; } @@ -2450,7 +2397,6 @@ L_08A049C8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 45u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A049E8; } @@ -2460,7 +2406,6 @@ L_08A049D8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 48u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A049EC; } @@ -2471,7 +2416,6 @@ L_08A049E8: goto L_08A049EC; L_08A049EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04A18; } @@ -2481,7 +2425,6 @@ L_08A049F4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 53u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A04A14; } @@ -2491,7 +2434,6 @@ L_08A04A04: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2196))); ctx.gpr[7] = (0u | 54u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A04A18; } @@ -2502,7 +2444,6 @@ L_08A04A14: goto L_08A04A18; L_08A04A18: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A04AA0; } @@ -2510,7 +2451,6 @@ L_08A04A18: } L_08A04A20: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A04A60; } @@ -2539,7 +2479,6 @@ L_08A04A48: AOT_REGCACHE_SYNC_OUT(); return; L_08A04A58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04AA0; } @@ -2549,7 +2488,6 @@ L_08A04A60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A04A7C; } @@ -2558,7 +2496,6 @@ L_08A04A60: L_08A04A70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A04AA0; } @@ -2583,7 +2520,6 @@ L_08A04AA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_5 = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A04AD0; } @@ -2621,7 +2557,6 @@ L_08A04AE4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A048C4; } @@ -2652,7 +2587,17 @@ L_08A04B10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A04B28: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), aot_gpr_16); @@ -2682,7 +2627,6 @@ L_08A04B28: L_08A04B88: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A04B9C; } @@ -2708,7 +2652,6 @@ L_08A04B9C: } L_08A04BAC: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A04BCC; } @@ -2863,7 +2806,6 @@ L_08A04CD0: } L_08A04CD8: { const bool branch_taken = aot_gpr_6 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A04D78; } @@ -2872,7 +2814,6 @@ L_08A04CD8: L_08A04CE0: aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A04CF0; } @@ -2883,7 +2824,6 @@ L_08A04CEC: goto L_08A04CF0; L_08A04CF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04D90; } @@ -2892,7 +2832,6 @@ L_08A04CF0: L_08A04CF8: aot_gpr_6 = (0u | 40u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A04D08; } @@ -2903,7 +2842,6 @@ L_08A04D04: goto L_08A04D08; L_08A04D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04D90; } @@ -2928,7 +2866,6 @@ L_08A04D1C: } L_08A04D24: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A04D30; } @@ -2939,7 +2876,6 @@ L_08A04D2C: goto L_08A04D30; L_08A04D30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04D90; } @@ -2956,7 +2892,6 @@ L_08A04D38: } L_08A04D44: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A04D50; } @@ -2967,7 +2902,6 @@ L_08A04D4C: goto L_08A04D50; L_08A04D50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04D90; } @@ -2984,7 +2918,6 @@ L_08A04D58: } L_08A04D64: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A04D70; } @@ -2995,7 +2928,6 @@ L_08A04D6C: goto L_08A04D70; L_08A04D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04D90; } @@ -3012,7 +2944,6 @@ L_08A04D78: } L_08A04D84: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A04D90; } @@ -3023,7 +2954,6 @@ L_08A04D8C: goto L_08A04D90; L_08A04D90: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A04E4C; } @@ -3046,7 +2976,6 @@ L_08A04DA4: } L_08A04DB0: aot_gpr_31 = (0x08A04DB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 570u, 0x08A8EFB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A04DB8u) goto L_08A04DB8; AOT_REGCACHE_SYNC_OUT(); return; L_08A04DB8: @@ -3077,7 +3006,6 @@ L_08A04DD4: } L_08A04DE4: aot_gpr_31 = (0x08A04DECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 570u, 0x08A8EFB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A04DECu) goto L_08A04DEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A04DEC: @@ -3126,7 +3054,6 @@ L_08A04E30: AOT_REGCACHE_SYNC_OUT(); return; L_08A04E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A04E88; } @@ -3136,7 +3063,6 @@ L_08A04E4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A04E64; } @@ -3144,7 +3070,6 @@ L_08A04E4C: } L_08A04E5C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A04E88; } @@ -3305,7 +3230,17 @@ L_08A04F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A04FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3335,7 +3270,6 @@ L_08A04FCC: L_08A05028: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A0503C; } @@ -3361,7 +3295,6 @@ L_08A0503C: } L_08A0504C: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A050BC; } @@ -3429,7 +3362,6 @@ L_08A050AC: } L_08A050B4: { const bool branch_taken = aot_gpr_6 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A0515C; } @@ -3446,7 +3378,6 @@ L_08A050BC: L_08A050C4: aot_gpr_6 = (0u | 39u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A050D4; } @@ -3457,7 +3388,6 @@ L_08A050D0: goto L_08A050D4; L_08A050D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05174; } @@ -3466,7 +3396,6 @@ L_08A050D4: L_08A050DC: aot_gpr_6 = (0u | 40u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A050EC; } @@ -3477,7 +3406,6 @@ L_08A050E8: goto L_08A050EC; L_08A050EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05174; } @@ -3502,7 +3430,6 @@ L_08A05100: } L_08A05108: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A05114; } @@ -3513,7 +3440,6 @@ L_08A05110: goto L_08A05114; L_08A05114: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05174; } @@ -3530,7 +3456,6 @@ L_08A0511C: } L_08A05128: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A05134; } @@ -3541,7 +3466,6 @@ L_08A05130: goto L_08A05134; L_08A05134: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05174; } @@ -3558,7 +3482,6 @@ L_08A0513C: } L_08A05148: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A05154; } @@ -3569,7 +3492,6 @@ L_08A05150: goto L_08A05154; L_08A05154: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05174; } @@ -3586,7 +3508,6 @@ L_08A0515C: } L_08A05168: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A05174; } @@ -3597,7 +3518,6 @@ L_08A05170: goto L_08A05174; L_08A05174: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A05230; } @@ -3620,7 +3540,6 @@ L_08A05188: } L_08A05194: aot_gpr_31 = (0x08A0519Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 570u, 0x08A8EFB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0519Cu) goto L_08A0519C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0519C: @@ -3651,7 +3570,6 @@ L_08A051B8: } L_08A051C8: aot_gpr_31 = (0x08A051D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 570u, 0x08A8EFB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A051D0u) goto L_08A051D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A051D0: @@ -3700,7 +3618,6 @@ L_08A05214: AOT_REGCACHE_SYNC_OUT(); return; L_08A05228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0526C; } @@ -3710,7 +3627,6 @@ L_08A05230: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A05248; } @@ -3718,7 +3634,6 @@ L_08A05230: } L_08A05240: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0526C; } @@ -3875,7 +3790,17 @@ L_08A05374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A053A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); @@ -3937,7 +3862,6 @@ L_08A05438: AOT_REGCACHE_SYNC_OUT(); return; L_08A05440: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0547C; } @@ -3958,7 +3882,6 @@ L_08A05450: AOT_REGCACHE_SYNC_OUT(); return; L_08A05464: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A05474; } @@ -4008,7 +3931,6 @@ L_08A05494: AOT_REGCACHE_SYNC_OUT(); return; L_08A054A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -4018,7 +3940,6 @@ L_08A054B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(48))); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -4059,7 +3980,6 @@ L_08A054DC: } L_08A054E4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A05CBC; } @@ -4074,7 +3994,6 @@ L_08A054EC: L_08A054F8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A05544; } @@ -4256,7 +4175,6 @@ L_08A05648: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(44), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A05660; } @@ -4264,7 +4182,6 @@ L_08A05648: } L_08A05658: aot_gpr_31 = (0x08A05660u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A05660u) goto L_08A05660; AOT_REGCACHE_SYNC_OUT(); return; L_08A05660: @@ -4276,7 +4193,6 @@ L_08A05660: goto L_08A05674; L_08A05674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -4291,7 +4207,6 @@ L_08A0567C: L_08A05688: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A056D4; } @@ -4473,7 +4388,6 @@ L_08A057D8: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(56), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A057F0; } @@ -4481,7 +4395,6 @@ L_08A057D8: } L_08A057E8: aot_gpr_31 = (0x08A057F0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A057F0u) goto L_08A057F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A057F0: @@ -4493,7 +4406,6 @@ L_08A057F0: goto L_08A05804; L_08A05804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -4508,7 +4420,6 @@ L_08A0580C: L_08A05818: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A05864; } @@ -4690,7 +4601,6 @@ L_08A05968: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(68), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A05980; } @@ -4698,7 +4608,6 @@ L_08A05968: } L_08A05978: aot_gpr_31 = (0x08A05980u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A05980u) goto L_08A05980; AOT_REGCACHE_SYNC_OUT(); return; L_08A05980: @@ -4710,7 +4619,6 @@ L_08A05980: goto L_08A05994; L_08A05994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -4725,7 +4633,6 @@ L_08A0599C: L_08A059A8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A059F4; } @@ -4907,7 +4814,6 @@ L_08A05AF8: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(80), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A05B10; } @@ -4915,7 +4821,6 @@ L_08A05AF8: } L_08A05B08: aot_gpr_31 = (0x08A05B10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A05B10u) goto L_08A05B10; AOT_REGCACHE_SYNC_OUT(); return; L_08A05B10: @@ -4927,7 +4832,6 @@ L_08A05B10: goto L_08A05B24; L_08A05B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -4942,7 +4846,6 @@ L_08A05B2C: L_08A05B38: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A05B84; } @@ -5124,7 +5027,6 @@ L_08A05C88: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(92), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A05CA0; } @@ -5132,7 +5034,6 @@ L_08A05C88: } L_08A05C98: aot_gpr_31 = (0x08A05CA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A05CA0u) goto L_08A05CA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A05CA0: @@ -5144,7 +5045,6 @@ L_08A05CA0: goto L_08A05CB4; L_08A05CB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -5159,7 +5059,6 @@ L_08A05CBC: L_08A05CC8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A05D14; } @@ -5341,7 +5240,6 @@ L_08A05E18: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(104), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A05E30; } @@ -5349,7 +5247,6 @@ L_08A05E18: } L_08A05E28: aot_gpr_31 = (0x08A05E30u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A05E30u) goto L_08A05E30; AOT_REGCACHE_SYNC_OUT(); return; L_08A05E30: @@ -5361,7 +5258,6 @@ L_08A05E30: goto L_08A05E44; L_08A05E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A05E4C; } @@ -5369,7 +5265,6 @@ L_08A05E44: } L_08A05E4C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A05E60; } @@ -5403,7 +5298,17 @@ L_08A05E64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05E94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; @@ -5420,7 +5325,17 @@ L_08A05EB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05EBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5436,7 +5351,17 @@ L_08A05ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05EDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5452,7 +5377,17 @@ L_08A05EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5468,7 +5403,17 @@ L_08A05F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05F1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5484,7 +5429,17 @@ L_08A05F30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05F3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5500,7 +5455,17 @@ L_08A05F50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5517,7 +5482,17 @@ L_08A05F74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05F80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5534,7 +5509,17 @@ L_08A05F98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A05FA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -5557,7 +5542,6 @@ L_08A05FA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A05FE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0601C; } @@ -5595,7 +5579,17 @@ L_08A0601C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0603C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5611,7 +5605,17 @@ L_08A06050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0605C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5619,7 +5623,6 @@ L_08A0605C: aot_gpr_4 = (static_cast(aot_gpr_16) < 128 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0607C; } @@ -5644,7 +5647,6 @@ L_08A0608C: goto L_08A06098; L_08A06098: aot_gpr_31 = (0x08A060A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A060A0u) goto L_08A060A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A060A0: @@ -5663,7 +5665,17 @@ L_08A060AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A060BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5671,7 +5683,6 @@ L_08A060BC: aot_gpr_4 = (static_cast(aot_gpr_16) < 128 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A060DC; } @@ -5696,7 +5707,6 @@ L_08A060EC: goto L_08A060F8; L_08A060F8: aot_gpr_31 = (0x08A06100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A06100u) goto L_08A06100; AOT_REGCACHE_SYNC_OUT(); return; L_08A06100: @@ -5715,14 +5725,23 @@ L_08A0610C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0611C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 128 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A06138; } @@ -5745,14 +5764,23 @@ L_08A06148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06154: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 128 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A06170; } @@ -5775,7 +5803,17 @@ L_08A06180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0618C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5791,7 +5829,17 @@ L_08A061A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A061AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5808,7 +5856,6 @@ L_08A061AC: L_08A061D4: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08A061F0; } @@ -5834,7 +5881,17 @@ L_08A061F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06208: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5850,7 +5907,17 @@ L_08A0621C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5869,7 +5936,6 @@ L_08A06228: L_08A06258: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08A06290; } @@ -5905,7 +5971,17 @@ L_08A06290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A062A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5921,7 +5997,17 @@ L_08A062BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A062C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5939,7 +6025,17 @@ L_08A062E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A062F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_gpr_6); @@ -5974,7 +6070,17 @@ L_08A06330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0633C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5991,7 +6097,17 @@ L_08A06354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06360: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6010,7 +6126,17 @@ L_08A06380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0638C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6026,7 +6152,17 @@ L_08A063A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A063AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6042,7 +6178,17 @@ L_08A063C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A063CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6059,7 +6205,17 @@ L_08A063E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A063F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6076,7 +6232,17 @@ L_08A06408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06414: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6092,7 +6258,17 @@ L_08A06428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06434: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6108,7 +6284,17 @@ L_08A06448: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06454: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6124,7 +6310,17 @@ L_08A06468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06474: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6140,7 +6336,17 @@ L_08A06488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06494: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6157,7 +6363,17 @@ L_08A064AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A064B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); @@ -6184,7 +6400,17 @@ L_08A064E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A064EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (ctx.gpr[7] | 0u); @@ -6216,13 +6442,22 @@ L_08A06528: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06534: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0655C; } @@ -6236,7 +6471,6 @@ L_08A06548: AOT_REGCACHE_SYNC_OUT(); return; L_08A06554: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A06560; } @@ -6252,13 +6486,22 @@ L_08A06560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0656C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A06594; } @@ -6272,7 +6515,6 @@ L_08A06580: AOT_REGCACHE_SYNC_OUT(); return; L_08A0658C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A06598; } @@ -6288,14 +6530,23 @@ L_08A06598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A065A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A065CC; } @@ -6315,14 +6566,23 @@ L_08A065CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A065D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A06608; } @@ -6337,7 +6597,6 @@ L_08A065F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A06600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0660C; } @@ -6353,7 +6612,17 @@ L_08A0660C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06618: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); @@ -6385,14 +6654,23 @@ L_08A06654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06660: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A06690; } @@ -6407,7 +6685,6 @@ L_08A06678: AOT_REGCACHE_SYNC_OUT(); return; L_08A06688: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A06694; } @@ -6423,7 +6700,17 @@ L_08A06694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A066A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_6 & 255u); @@ -6450,7 +6737,17 @@ L_08A066C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A066D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); @@ -6476,14 +6773,23 @@ L_08A066F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A06734; } @@ -6498,7 +6804,6 @@ L_08A0671C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0672C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A06738; } @@ -6514,14 +6819,23 @@ L_08A06738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06744: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-32480))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0676C; } @@ -6541,7 +6855,17 @@ L_08A0676C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06778: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6557,7 +6881,17 @@ L_08A0678C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6573,7 +6907,17 @@ L_08A067AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A067B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6590,7 +6934,17 @@ L_08A067D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A067DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6607,7 +6961,17 @@ L_08A067F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6624,7 +6988,17 @@ L_08A06818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06824: aot_gpr_4 = (aot_gpr_5 & 255u); aot_gpr_5 = (2237u << 16u); @@ -6634,7 +7008,17 @@ L_08A06824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6650,7 +7034,17 @@ L_08A0684C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06858: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6666,7 +7060,17 @@ L_08A0686C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06878: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6682,7 +7086,17 @@ L_08A0688C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06898: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6698,7 +7112,17 @@ L_08A068AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A068B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6714,7 +7138,17 @@ L_08A068CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A068D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6730,7 +7164,17 @@ L_08A068EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A068F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -6746,7 +7190,17 @@ L_08A0690C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06918: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_6); @@ -6761,14 +7215,23 @@ L_08A06928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8888))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A06970; } @@ -6783,7 +7246,6 @@ L_08A06948: L_08A06954: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0696C; } @@ -6806,7 +7268,17 @@ L_08A06970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06984: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6815,7 +7287,6 @@ L_08A06984: aot_gpr_16 = (32768u << 16u); aot_gpr_5 = (aot_gpr_5 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A069B0; } @@ -6831,7 +7302,6 @@ L_08A069B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2236))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A069C8; } @@ -6856,7 +7326,17 @@ L_08A069CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A069DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6892,7 +7372,6 @@ L_08A069DC: L_08A06A48: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(301))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A06A5C; } @@ -7022,7 +7501,6 @@ L_08A06B54: AOT_REGCACHE_SYNC_OUT(); return; L_08A06B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A06BE0; } @@ -7085,7 +7563,6 @@ L_08A06BE0: aot_gpr_4 = (0u | 4u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8844), aot_gpr_4); aot_gpr_31 = (0x08A06C10u); - // nop goto L_08A07200; L_08A06C10: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8808), 0u); @@ -7114,7 +7591,6 @@ L_08A06C34: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 / aot_fpr_15; aot_gpr_31 = (0x08A06C70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 38u, 0x08AF43A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A06C70u) goto L_08A06C70; AOT_REGCACHE_SYNC_OUT(); return; L_08A06C70: @@ -7136,7 +7612,17 @@ L_08A06C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06CA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8760))); aot_gpr_5 = (4u << 16u); @@ -7148,7 +7634,17 @@ L_08A06CA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06CBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7156,7 +7652,6 @@ L_08A06CBC: goto L_08A06CC8; L_08A06CC8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A06CE0; } @@ -7169,7 +7664,6 @@ L_08A06CD0: AOT_REGCACHE_SYNC_OUT(); return; L_08A06CD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A06D08; } @@ -7177,7 +7671,6 @@ L_08A06CD8: } L_08A06CE0: aot_gpr_31 = (0x08A06CE8u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A06CE8: @@ -7187,7 +7680,6 @@ L_08A06CE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A06CF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A06D00; } @@ -7208,7 +7700,6 @@ L_08A06D00: } L_08A06D08: aot_gpr_31 = (0x08A06D10u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A06D10: @@ -7232,7 +7723,17 @@ L_08A06D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8800))); @@ -7288,7 +7789,6 @@ L_08A06DB0: goto L_08A06DC4; L_08A06DC4: aot_gpr_31 = (0x08A06DCCu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08A06DCC: @@ -7314,7 +7814,6 @@ L_08A06DE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A06E08: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A06E20; } @@ -7327,7 +7826,6 @@ L_08A06E10: AOT_REGCACHE_SYNC_OUT(); return; L_08A06E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A06E28; } @@ -7335,12 +7833,10 @@ L_08A06E18: } L_08A06E20: aot_gpr_31 = (0x08A06E28u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A06E28: aot_gpr_31 = (0x08A06E30u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08A06E30: @@ -7368,7 +7864,6 @@ L_08A06E44: aot_gpr_4 = (ctx.gpr[28] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(-8855))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A06DC4; } @@ -7376,7 +7871,6 @@ L_08A06E44: } L_08A06E88: aot_gpr_31 = (0x08A06E90u); - // nop goto L_08A076C4; L_08A06E90: aot_gpr_4 = (0u | 1u); @@ -7477,7 +7971,17 @@ L_08A06EDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A06FE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8848))); @@ -7487,7 +7991,6 @@ L_08A06FE0: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(24), aot_run_words); } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A0709C; } @@ -7514,7 +8017,6 @@ L_08A0700C: L_08A07048: rt.memory().memory_barrier(); aot_gpr_31 = (0x08A07054u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08A07054: @@ -7546,7 +8048,6 @@ L_08A07068: } L_08A0709C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A071D0; } @@ -7557,7 +8058,6 @@ L_08A070A4: goto L_08A070A8; L_08A070A8: { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A070C0; } @@ -7567,7 +8067,6 @@ L_08A070B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8804))); aot_gpr_4 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A070D0; } @@ -7575,7 +8074,6 @@ L_08A070B0: } L_08A070C0: aot_gpr_31 = (0x08A070C8u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A070C8: @@ -7589,7 +8087,6 @@ L_08A070C8: L_08A070D0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8804), 0u); aot_gpr_31 = (0x08A070DCu); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08A070DC: @@ -7615,7 +8112,6 @@ L_08A070F0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8732), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8856))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A07138; } @@ -7648,7 +8144,6 @@ L_08A07160: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8732))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A0717C; @@ -7680,7 +8175,6 @@ L_08A0719C: goto L_08A076C4; L_08A071C8: aot_gpr_31 = (0x08A071D0u); - // nop goto L_08A07260; L_08A071D0: { std::uint32_t aot_run_words[6]{}; @@ -7697,7 +8191,17 @@ L_08A071D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A071F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8848))); ctx.gpr[2] = (aot_gpr_4 + static_cast(1)); @@ -7706,12 +8210,21 @@ L_08A071F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A07210u); - // nop ctx.pc = 0x08B7320Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A07210: @@ -7721,7 +8234,17 @@ L_08A07210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0721C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7738,7 +8261,17 @@ L_08A0722C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07240: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7754,7 +8287,17 @@ L_08A07250: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07260: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7775,7 +8318,6 @@ L_08A07280: aot_gpr_16 = (aot_gpr_16 + static_cast(29232)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(301))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A07344; } @@ -7796,7 +8338,6 @@ L_08A072A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A072B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A072C8; } @@ -7829,12 +8370,10 @@ L_08A072D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A072E0: aot_gpr_31 = (0x08A072E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A072E8u) goto L_08A072E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A072E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A07308; } @@ -7851,7 +8390,6 @@ L_08A072F8: goto L_08A06984; L_08A07300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A072E0; } @@ -7865,12 +8403,10 @@ L_08A07308: AOT_REGCACHE_SYNC_OUT(); return; L_08A07314: aot_gpr_31 = (0x08A0731Cu); - // nop goto L_08A06CA0; L_08A0731C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A07344; } @@ -7899,7 +8435,17 @@ L_08A07344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0735C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -7924,7 +8470,17 @@ L_08A07374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A073A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 + static_cast(-16)); @@ -7952,7 +8508,17 @@ L_08A073CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A073D8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8848))); aot_gpr_4 = (aot_gpr_4 + static_cast(-16)); @@ -7960,7 +8526,6 @@ L_08A073D8: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A07428; } @@ -7983,11 +8548,20 @@ L_08A073F4: goto L_08A07428; L_08A07428: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -8006,7 +8580,6 @@ L_08A07448: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A074AC; } @@ -8048,7 +8621,17 @@ L_08A074AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A074BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8848))); @@ -8075,18 +8658,26 @@ L_08A074FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07508: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } aot_gpr_31 = (0x08A07528u); - // nop goto L_08A071F0; L_08A07528: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A0753C; } @@ -8094,7 +8685,6 @@ L_08A07528: } L_08A07534: aot_gpr_31 = (0x08A0753Cu); - // nop goto L_08A06FE0; L_08A0753C: ctx.gpr[18] = (aot_gpr_29 + static_cast(4)); @@ -8104,7 +8694,6 @@ L_08A0753C: goto L_08A0754C; L_08A0754C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0756C; } @@ -8113,7 +8702,6 @@ L_08A0754C: L_08A07554: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8855))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0756C; } @@ -8122,7 +8710,6 @@ L_08A07554: L_08A07560: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8854))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A075D4; } @@ -8130,7 +8717,6 @@ L_08A07560: } L_08A0756C: aot_gpr_31 = (0x08A07574u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08A07574: @@ -8148,7 +8734,6 @@ L_08A07588: AOT_REGCACHE_SYNC_OUT(); return; L_08A07590: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A075A8; } @@ -8161,7 +8746,6 @@ L_08A07598: AOT_REGCACHE_SYNC_OUT(); return; L_08A075A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A075B0; } @@ -8169,12 +8753,10 @@ L_08A075A0: } L_08A075A8: aot_gpr_31 = (0x08A075B0u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A075B0: aot_gpr_31 = (0x08A075B8u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08A075B8: @@ -8195,11 +8777,9 @@ L_08A075CC: } L_08A075D4: aot_gpr_31 = (0x08A075DCu); - // nop goto L_08A076C4; L_08A075DC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A075EC; } @@ -8207,7 +8787,6 @@ L_08A075DC: } L_08A075E4: aot_gpr_31 = (0x08A075ECu); - // nop goto L_08A06D3C; L_08A075EC: { std::uint32_t aot_run_words[5]{}; @@ -8223,7 +8802,17 @@ L_08A075EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07608: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8243,7 +8832,6 @@ L_08A07620: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(-8855), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A07644; } @@ -8251,7 +8839,6 @@ L_08A07620: } L_08A0763C: aot_gpr_31 = (0x08A07644u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A07644u) goto L_08A07644; AOT_REGCACHE_SYNC_OUT(); return; L_08A07644: @@ -8261,12 +8848,10 @@ L_08A07644: AOT_REGCACHE_SYNC_OUT(); return; L_08A0764C: aot_gpr_31 = (0x08A07654u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A07654u) goto L_08A07654; AOT_REGCACHE_SYNC_OUT(); return; L_08A07654: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A07678; } @@ -8282,7 +8867,6 @@ L_08A0765C: AOT_REGCACHE_SYNC_OUT(); return; L_08A07670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A076AC; } @@ -8291,7 +8875,6 @@ L_08A07670: L_08A07678: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8720))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A076AC; } @@ -8322,7 +8905,17 @@ L_08A076B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A076C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8345,7 +8938,6 @@ L_08A07724: aot_gpr_4 = (ctx.gpr[28] + ctx.gpr[30]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(-8855))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0782C; } @@ -8370,7 +8962,6 @@ L_08A07744: aot_gpr_4 = (aot_gpr_16 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0777C; } @@ -8379,7 +8970,6 @@ L_08A07744: L_08A07760: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0777C; } @@ -8405,7 +8995,6 @@ L_08A07784: L_08A0778C: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A07744; } @@ -8417,7 +9006,6 @@ L_08A07798: aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(-8704), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A077E4; } @@ -8445,7 +9033,6 @@ L_08A077CC: L_08A077D8: aot_gpr_4 = (aot_gpr_16 | 0u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A077B0; } @@ -8458,7 +9045,6 @@ L_08A077E4: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A07828; } @@ -8521,14 +9107,23 @@ L_08A0784C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0787C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8706))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A079B8; } @@ -8536,12 +9131,10 @@ L_08A0787C: } L_08A07894: aot_gpr_31 = (0x08A0789Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 268u, 0x08935094u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0789Cu) goto L_08A0789C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0789C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A079B8; } @@ -8549,7 +9142,6 @@ L_08A0789C: } L_08A078A4: aot_gpr_31 = (0x08A078ACu); - // nop goto L_08A06D3C; L_08A078AC: aot_gpr_4 = (2236u << 16u); @@ -8565,11 +9157,9 @@ L_08A078AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A078D0: aot_gpr_31 = (0x08A078D8u); - // nop goto L_08A06FE0; L_08A078D8: aot_gpr_31 = (0x08A078E0u); - // nop goto L_08A06D3C; L_08A078E0: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -8583,11 +9173,9 @@ L_08A078E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A078FC: aot_gpr_31 = (0x08A07904u); - // nop goto L_08A06FE0; L_08A07904: aot_gpr_31 = (0x08A0790Cu); - // nop goto L_08A06CBC; L_08A0790C: aot_gpr_4 = (0u | 0u); @@ -8611,12 +9199,10 @@ L_08A07924: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_13 = aot_fpr_13 / aot_fpr_15; aot_gpr_31 = (0x08A0795Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 38u, 0x08AF43A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0795Cu) goto L_08A0795C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0795C: aot_gpr_31 = (0x08A07964u); - // nop goto L_08A06D3C; L_08A07964: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -8630,11 +9216,9 @@ L_08A07964: AOT_REGCACHE_SYNC_OUT(); return; L_08A07980: aot_gpr_31 = (0x08A07988u); - // nop goto L_08A06FE0; L_08A07988: aot_gpr_31 = (0x08A07990u); - // nop goto L_08A06D3C; L_08A07990: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -8648,7 +9232,6 @@ L_08A07990: AOT_REGCACHE_SYNC_OUT(); return; L_08A079AC: aot_gpr_31 = (0x08A079B4u); - // nop goto L_08A06FE0; L_08A079B4: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-8706), static_cast(0u)); @@ -8661,7 +9244,17 @@ L_08A079B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A079C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8686,7 +9279,6 @@ L_08A07A04: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8812), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8720))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A07A70; } @@ -8715,7 +9307,6 @@ L_08A07A20: AOT_REGCACHE_SYNC_OUT(); return; L_08A07A44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A07A70; } @@ -8739,7 +9330,6 @@ L_08A07A70: L_08A07A74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A07AC0; } @@ -8748,7 +9338,6 @@ L_08A07A74: L_08A07A80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A07AC0; } @@ -8775,7 +9364,6 @@ L_08A07ABC: L_08A07AC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8752))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A07AD4; } @@ -8800,7 +9388,6 @@ L_08A07ADC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(7))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A07B44; } @@ -8810,7 +9397,6 @@ L_08A07B00: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8712))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A07B44; } @@ -8820,7 +9406,6 @@ L_08A07B10: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8711))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(5))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A07B44; } @@ -8830,7 +9415,6 @@ L_08A07B20: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8710))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(6))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A07B44; } @@ -8844,7 +9428,6 @@ L_08A07B30: L_08A07B38: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A07B50; } @@ -8867,14 +9450,23 @@ L_08A07B50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07B64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8820), aot_gpr_4); aot_gpr_5 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A07BA4; } @@ -8887,7 +9479,6 @@ L_08A07B7C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A07BA4; } @@ -8908,7 +9499,17 @@ L_08A07BA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07BB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8934,7 +9535,6 @@ L_08A07BE0: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A07BFC; } @@ -8952,14 +9552,23 @@ L_08A07BFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A07C0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8716))); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 31u, 0x08A086ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9212,7 +9821,6 @@ L_08A07FA4: goto L_08A07FA8; L_08A07FA8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 8u, 0x08A08128u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9221,7 +9829,6 @@ L_08A07FA8: L_08A07FB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24162))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 8u, 0x08A08128u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9266,7 +9873,6 @@ L_08A07FEC: goto L_08A07FF0; L_08A07FF0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 8u, 0x08A08128u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0129.cpp b/profiles/vcs/generated/generated_unit_0129.cpp index 47e6931..bcdbaac 100644 --- a/profiles/vcs/generated/generated_unit_0129.cpp +++ b/profiles/vcs/generated/generated_unit_0129.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0129[4094] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 13, 14, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 41, 0, 42, 0, - 43, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 48, 0, 49, 0, 50, 0, 0, 51, 0, - 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, - 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 59, 0, 0, 60, 0, 0, 0, 61, 0, 62, 0, 63, 0, - 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 70, 0, 0, 0, 0, 71, 0, 72, 0, 73, 0, 0, 74, 0, 0, 0, 75, 0, 76, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, - 0, 80, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 0, 0, 89, 0, 0, 0, - 0, 0, 90, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 95, 0, 96, 0, 0, 0, 97, 0, - 0, 98, 0, 99, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 0, 0, - 110, 0, 0, 111, 0, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 120, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 125, 0, 0, 126, 0, 127, 0, - 128, 0, 129, 0, 0, 130, 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 134, 0, 0, 135, 0, 136, 0, 0, 137, 0, 0, 138, 0, 0, 139, - 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 142, 143, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 146, 0, 0, 147, 0, 0, 0, 0, 148, 149, 0, 0, 0, 0, 0, - 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, - 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, - 0, 163, 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, - 0, 0, 0, 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 174, 175, 0, 0, 0, - 0, 176, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, - 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 204, 0, 205, 0, 206, 0, 0, 207, 0, 208, 0, 209, 0, 210, 0, 0, 211, 0, 0, 212, 213, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 215, 0, 0, 216, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 231, 232, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 254, 0, - 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, 0, 0, 0, 0, 0, 258, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, - 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 268, 0, 269, 0, 0, 0, 0, 0, 270, 0, 271, 0, 272, 0, 0, 0, 0, 273, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 0, 280, 281, 0, 0, 0, 0, 0, 0, 282, 0, - 0, 283, 0, 0, 0, 284, 0, 0, 285, 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, 288, 0, 0, 0, 0, 289, 290, 0, 0, 0, 0, 0, 291, - 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 294, 0, 0, 295, 0, 296, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, - 0, 0, 0, 299, 0, 0, 300, 0, 301, 302, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, - 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, - 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 318, 0, 0, 0, 319, 0, 320, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, - 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 328, 0, 0, 329, 330, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, - 334, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 338, 0, 339, 0, 340, 0, 341, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 344, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 347, 0, 0, 0, 348, 0, - 0, 349, 0, 0, 350, 0, 351, 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, - 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 371, - 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, - 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 384, 0, 385, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 388, 0, 389, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, - 0, 0, 392, 0, 393, 394, 0, 395, 0, 0, 0, 396, 0, 0, 397, 0, 398, 0, 0, 399, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 403, 0, 404, 0, 0, 0, 0, 0, 405, 406, 0, 0, 0, 407, 0, 408, 0, - 409, 0, 0, 410, 0, 411, 412, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 426, 0, - 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 430, 0, 0, 0, 431, 432, 0, 0, 0, 433, 434, 0, 435, - 0, 0, 0, 0, 436, 0, 437, 438, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 443, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 445, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, - 456, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, - 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, - 0, 0, 0, 0, 471, 0, 472, 0, 0, 473, 0, 474, 0, 0, 475, 0, 476, 0, 0, 477, 0, 478, 0, 0, 479, 480, 481, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, 0, 0, 0, 0, 0, - 486, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, - 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 0, 0, 497, 0, 498, 0, 0, 0, 499, 0, - 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 502, 0, 503, 0, 0, 0, 504, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 0, - 510, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 513, 0, 514, 0, 515, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, - 0, 0, 525, 0, 0, 526, 0, 527, 0, 528, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, 0, 538, 0, 0, 539, - 0, 540, 0, 541, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 545, 0, 546, 0, 547, 0, 548, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 0, - 555, 0, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 559, 0, 560, 0, - 561, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 0, 568, 0, 569, 570, - 0, 0, 571, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, 0, 579, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, - 0, 582, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 586, 0, 587, 588, 0, 0, 0, 0, 0, 0, 589, - 0, 0, 590, 0, 0, 0, 0, 0, 0, 591, 0, 592, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, - 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 600, 0, 601, 0, 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, 0, 0, 0, 0, 604, 605, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 0, - 613, 0, 0, 0, 0, 614, 615, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, 0, 0, 621, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, - 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 634, - 0, 635, 0, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 640, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0129[64] = { + 0x0000840000150021ull, 0x0000002005C92400ull, 0x0000002010001105ull, 0x000061000004A000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x2100080204000000ull, 0x4A84890154541208ull, + 0x544A400202402004ull, 0x0000000020808015ull, 0x811A254200000000ull, 0x4550082411552222ull, + 0xA808AA891555444Aull, 0x9252A22552520004ull, 0x0612040468000020ull, 0x0000000080000001ull, + 0x1000000208201010ull, 0xA000211210009120ull, 0x0808008A18412210ull, 0x2102042082111000ull, + 0x0140010200002000ull, 0x8000002820000200ull, 0x64AA548800010000ull, 0x0000489002000000ull, + 0x0488428000021121ull, 0x0400004040022861ull, 0x001410000100A002ull, 0x0200000000000800ull, + 0x200282A04A0A0090ull, 0x0828024080000000ull, 0x0100040285415000ull, 0x830A812240C50020ull, + 0x09022348050A4840ull, 0x0080041212000110ull, 0x040811A200005001ull, 0x2AC008410085642Aull, + 0x001054D24600AA00ull, 0x0200082104284200ull, 0x2000041090924000ull, 0x0002540084880001ull, + 0x048948B4801A4025ull, 0x4210826951828200ull, 0x0408001200400000ull, 0xB18D000250204000ull, + 0x00000010000080D0ull, 0x0104002401248000ull, 0x4000420928122420ull, 0x4820240010041022ull, + 0x0280440007294A50ull, 0x4504440450284003ull, 0x0150414500020020ull, 0x840550000444A921ull, + 0x92101540001112A4ull, 0x2A4840550000444Aull, 0xD221140554000111ull, 0x1084000002012244ull, + 0x0000000000000000ull, 0x81A0444240020000ull, 0x0000002840041A04ull, 0x0000000000020800ull, + 0x20180A0A00000000ull, 0x2108080000810000ull, 0x4812048021442861ull, 0x2101044292048120ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0129[64] = { + 1u, 8u, 17u, 23u, 29u, 29u, 29u, 34u, 52u, 64u, 70u, 80u, 98u, 121u, 140u, 150u, + 152u, 158u, 169u, 181u, 191u, 196u, 201u, 214u, 219u, 230u, 239u, 246u, 248u, 261u, 267u, 277u, + 292u, 307u, 315u, 325u, 342u, 357u, 366u, 375u, 384u, 402u, 418u, 423u, 436u, 441u, 449u, 461u, + 471u, 486u, 500u, 510u, 525u, 540u, 555u, 571u, 580u, 580u, 590u, 598u, 600u, 607u, 613u, 628u, }; void recomp_unit_0129_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0129_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A08000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0129[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0129[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0129[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A08000; @@ -1010,7 +917,6 @@ L_08A08194: goto L_08A08200; L_08A08200: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A08220; } @@ -1028,7 +934,6 @@ L_08A08220: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8736))); aot_gpr_4 = (static_cast(aot_gpr_4) < 513 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0833C; } @@ -1139,8 +1044,6 @@ L_08A08348: ctx.gpr[9] = (0u | 480u); ctx.gpr[10] = (ctx.gpr[18] | 0u); ctx.gpr[8] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(ctx.gpr[2])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[2] = (ctx.lo); aot_gpr_31 = (0x08A083A0u); @@ -1377,7 +1280,17 @@ L_08A086AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A086E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -1411,7 +1324,17 @@ L_08A08724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08730: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2232))); @@ -1431,7 +1354,6 @@ L_08A08748: AOT_REGCACHE_SYNC_OUT(); return; L_08A08750: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A08770; } @@ -1441,7 +1363,6 @@ L_08A08758: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A08780; } @@ -1449,7 +1370,6 @@ L_08A08758: } L_08A08768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A087AC; } @@ -1457,7 +1377,6 @@ L_08A08768: } L_08A08770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A087F8; } @@ -1465,7 +1384,6 @@ L_08A08770: } L_08A08778: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A087F8; } @@ -1479,7 +1397,6 @@ L_08A08780: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A087AC; } @@ -1495,7 +1412,6 @@ L_08A087AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A087E4; } @@ -1512,7 +1428,6 @@ L_08A087C8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2252))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A087EC; } @@ -1520,7 +1435,6 @@ L_08A087C8: } L_08A087DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A087F8; } @@ -1528,7 +1442,6 @@ L_08A087DC: } L_08A087E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A087F8; } @@ -1548,7 +1461,17 @@ L_08A087F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08808: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1560,7 +1483,6 @@ L_08A08808: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_mem.aot_direct_store16(ctx.gpr[17] + static_cast(1140), static_cast(aot_gpr_5)); aot_gpr_31 = (0x08A08834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 167u, 0x08AB4CE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A08834u) goto L_08A08834; AOT_REGCACHE_SYNC_OUT(); return; L_08A08834: @@ -1603,7 +1525,17 @@ L_08A08864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08884: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1142)))))); @@ -1626,7 +1558,6 @@ L_08A08884: L_08A088B8: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 201 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A088D8; } @@ -1640,7 +1571,6 @@ L_08A088C4: L_08A088CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1140)))))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A0895C; } @@ -1658,7 +1588,6 @@ L_08A088D8: } L_08A088E8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A0895C; } @@ -1690,7 +1619,6 @@ L_08A08900: } L_08A08908: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0895C; } @@ -1733,7 +1661,17 @@ L_08A0895C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08974: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(656))); @@ -1800,7 +1738,6 @@ L_08A08974: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(108), aot_gpr_31); aot_fpr_13 = std::sqrt(aot_fpr_13); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -1835,7 +1772,6 @@ L_08A08AA0: L_08A08AA8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(1140)))))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A08AC4; } @@ -1866,7 +1802,17 @@ L_08A08AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08AE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_16); @@ -1879,7 +1825,6 @@ L_08A08AE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A08AFC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A08B48; } @@ -1889,7 +1834,6 @@ L_08A08B04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A08B48; } @@ -1899,7 +1843,6 @@ L_08A08B14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A08B34; } @@ -1909,7 +1852,6 @@ L_08A08B24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A08B48; } @@ -1918,7 +1860,6 @@ L_08A08B24: L_08A08B34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A08B50; } @@ -1926,7 +1867,6 @@ L_08A08B34: } L_08A08B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08C60; } @@ -1934,7 +1874,6 @@ L_08A08B40: } L_08A08B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DFC; } @@ -1947,7 +1886,6 @@ L_08A08B50: AOT_REGCACHE_SYNC_OUT(); return; L_08A08B58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A08BD8; } @@ -1957,7 +1895,6 @@ L_08A08B60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A08BD8; } @@ -1977,7 +1914,6 @@ L_08A08B70: L_08A08B88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A08BD8; } @@ -2010,7 +1946,6 @@ L_08A08BAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A08BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08C58; } @@ -2023,7 +1958,6 @@ L_08A08BD8: AOT_REGCACHE_SYNC_OUT(); return; L_08A08BE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A08C50; } @@ -2033,7 +1967,6 @@ L_08A08BE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A08C50; } @@ -2042,7 +1975,6 @@ L_08A08BE8: L_08A08BF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A08C50; } @@ -2050,7 +1982,6 @@ L_08A08BF8: } L_08A08C04: aot_gpr_31 = (0x08A08C0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A08C0Cu) goto L_08A08C0C; AOT_REGCACHE_SYNC_OUT(); return; L_08A08C0C: @@ -2079,7 +2010,6 @@ L_08A08C28: AOT_REGCACHE_SYNC_OUT(); return; L_08A08C38: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A08C58; } @@ -2092,7 +2022,6 @@ L_08A08C40: AOT_REGCACHE_SYNC_OUT(); return; L_08A08C48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08C58; } @@ -2105,7 +2034,6 @@ L_08A08C50: AOT_REGCACHE_SYNC_OUT(); return; L_08A08C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DFC; } @@ -2118,7 +2046,6 @@ L_08A08C60: AOT_REGCACHE_SYNC_OUT(); return; L_08A08C68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A08C8C; } @@ -2128,7 +2055,6 @@ L_08A08C70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2232))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A08C8C; } @@ -2160,7 +2086,6 @@ L_08A08C9C: } L_08A08CA4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A08DD8; } @@ -2173,7 +2098,6 @@ L_08A08CAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A08CB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DF0; } @@ -2194,7 +2118,6 @@ L_08A08CCC: aot_gpr_5 = (256u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A08D58; } @@ -2259,9 +2182,7 @@ L_08A08D08: aot_gpr_4 = (16964u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A08D58; } @@ -2275,7 +2196,6 @@ L_08A08D44: AOT_REGCACHE_SYNC_OUT(); return; L_08A08D50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DF0; } @@ -2284,7 +2204,6 @@ L_08A08D50: L_08A08D58: aot_gpr_4 = (0u | 11u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A08D80; } @@ -2298,7 +2217,6 @@ L_08A08D64: AOT_REGCACHE_SYNC_OUT(); return; L_08A08D70: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A08D50; } @@ -2306,7 +2224,6 @@ L_08A08D70: } L_08A08D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DFC; } @@ -2314,7 +2231,6 @@ L_08A08D78: } L_08A08D80: aot_gpr_31 = (0x08A08D88u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A08D88u) goto L_08A08D88; AOT_REGCACHE_SYNC_OUT(); return; L_08A08D88: @@ -2343,7 +2259,6 @@ L_08A08DA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A08DB4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A08D50; } @@ -2351,7 +2266,6 @@ L_08A08DB4: } L_08A08DBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DFC; } @@ -2365,7 +2279,6 @@ L_08A08DC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A08DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A08DF0; } @@ -2399,7 +2312,17 @@ L_08A08DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08E14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -2455,7 +2378,17 @@ L_08A08E88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2495,7 +2428,17 @@ L_08A08EE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A08F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-3136)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(3100), ctx.gpr[19]); @@ -2677,7 +2620,6 @@ L_08A090F0: ctx.fpr[20] = std::bit_cast(aot_gpr_5); aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09114; @@ -2694,7 +2636,6 @@ L_08A09114: } L_08A09120: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09130; @@ -2703,7 +2644,6 @@ L_08A09120: L_08A09130: aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A09170; } @@ -2753,7 +2693,6 @@ L_08A0913C: L_08A09170: aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09184; @@ -2770,7 +2709,6 @@ L_08A09184: } L_08A09190: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A091A0; @@ -2781,7 +2719,6 @@ L_08A091A0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A091FC; } @@ -2829,7 +2766,6 @@ L_08A091B4: goto L_08A09AD0; L_08A091F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A09258; } @@ -2838,7 +2774,6 @@ L_08A091F4: L_08A091FC: aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09210; @@ -2857,7 +2792,6 @@ L_08A09210: } L_08A09224: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09234; @@ -2866,7 +2800,6 @@ L_08A09224: L_08A09234: aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A09258; } @@ -2899,7 +2832,6 @@ L_08A09270: ctx.gpr[17] = (ctx.lo); aot_gpr_4 = (ctx.gpr[17] < static_cast(3) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0928C; } @@ -2907,7 +2839,6 @@ L_08A09270: } L_08A09284: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A094A0; } @@ -2966,7 +2897,6 @@ L_08A092EC: aot_mem.aot_direct_store32(ctx.gpr[2] + static_cast(20), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(16))); goto L_08A09340; @@ -2991,7 +2921,6 @@ L_08A09340: L_08A09350: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(20))); goto L_08A0937C; @@ -3020,7 +2949,6 @@ L_08A0937C: L_08A09394: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(24))); goto L_08A093C4; @@ -3130,7 +3058,17 @@ L_08A094A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A094D8: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_6 = (aot_gpr_6 & 1u); @@ -3194,11 +3132,20 @@ L_08A09574: goto L_08A0958C; L_08A0958C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09594: ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<124u>(ctx.gpr[8]); @@ -3225,11 +3172,20 @@ L_08A09594: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(12), ctx.vfpu_scalar_bits_ct<33u>()); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(16), ctx.vfpu_scalar_bits_ct<65u>()); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A095FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1328)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1280), std::bit_cast(ctx.fpr[20])); @@ -3291,7 +3247,6 @@ L_08A0969C: } L_08A096A8: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08A096F8; } @@ -3299,7 +3254,6 @@ L_08A096A8: } L_08A096B0: { const bool branch_taken = static_cast(ctx.gpr[17]) > 0; - // nop if (branch_taken) { goto L_08A096DC; } @@ -3308,7 +3262,6 @@ L_08A096B0: L_08A096B8: ctx.execute_vfpu_unary_ct<3u, 52u, 4u, 0u>(); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A096F8; } @@ -3324,7 +3277,6 @@ L_08A096C4: } L_08A096CC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A096F4; } @@ -3332,7 +3284,6 @@ L_08A096CC: } L_08A096D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A096F8; } @@ -3341,7 +3292,6 @@ L_08A096D4: L_08A096DC: ctx.execute_vfpu_unary_ct<3u, 53u, 4u, 0u>(); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A096F8; } @@ -3350,7 +3300,6 @@ L_08A096DC: L_08A096E8: ctx.execute_vfpu_unary_ct<3u, 54u, 4u, 0u>(); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A096F8; } @@ -3399,7 +3348,6 @@ L_08A09764: ctx.fpr[20] = std::bit_cast(aot_gpr_5); aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09790; @@ -3416,7 +3364,6 @@ L_08A09790: } L_08A0979C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A097AC; @@ -3425,7 +3372,6 @@ L_08A0979C: L_08A097AC: aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A09800; } @@ -3458,7 +3404,6 @@ L_08A097B8: L_08A09800: aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09814; @@ -3475,7 +3420,6 @@ L_08A09814: } L_08A09820: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A09830; @@ -3486,7 +3430,6 @@ L_08A09830: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A098A4; } @@ -3518,7 +3461,6 @@ L_08A09844: goto L_08A09594; L_08A0989C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A09900; } @@ -3527,7 +3469,6 @@ L_08A0989C: L_08A098A4: aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A098B8; @@ -3546,7 +3487,6 @@ L_08A098B8: } L_08A098CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A098DC; @@ -3555,7 +3495,6 @@ L_08A098CC: L_08A098DC: aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A09900; } @@ -3588,7 +3527,6 @@ L_08A09918: aot_gpr_16 = (ctx.lo); aot_gpr_4 = (aot_gpr_16 < static_cast(3) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A09934; } @@ -3596,7 +3534,6 @@ L_08A09918: } L_08A0992C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A09A04; } @@ -3606,7 +3543,6 @@ L_08A09934: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0969C; } @@ -3689,7 +3625,17 @@ L_08A09A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09A34: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_6 = (2236u << 16u); @@ -3745,11 +3691,20 @@ L_08A09AB0: goto L_08A09AC8; L_08A09AC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09AD0: ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<124u>(ctx.gpr[8]); @@ -3830,11 +3785,20 @@ L_08A09AD0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09B2C: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::Physics) && rt.memory().direct_fastmem_enabled()) { @@ -3922,7 +3886,6 @@ L_08A09C1C: aot_gpr_16 = (aot_gpr_16 << 8u); ctx.execute_vfpu_vcmp_ct<28u, 29u, 3u, 1u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A09CA4; } @@ -3942,7 +3905,6 @@ L_08A09C4C: ctx.gpr[11] = (ctx.gpr[11] >> 8u); ctx.gpr[11] = (ctx.gpr[11] & aot_gpr_16); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_08A09CA4; } @@ -3970,7 +3932,6 @@ L_08A09C78: goto L_08A09C94; L_08A09C94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A09CBC; } @@ -4010,7 +3971,17 @@ L_08A09CC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09CF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4075,7 +4046,6 @@ L_08A09DA4: aot_gpr_16 = (aot_gpr_16 << 8u); ctx.execute_vfpu_vcmp_ct<28u, 29u, 3u, 1u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A09E68; } @@ -4095,7 +4065,6 @@ L_08A09DD4: ctx.gpr[11] = (ctx.gpr[11] >> 8u); ctx.gpr[11] = (ctx.gpr[11] & aot_gpr_16); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_08A09E68; } @@ -4118,7 +4087,6 @@ L_08A09DEC: ctx.gpr[8] = (ctx.gpr[8] & ctx.gpr[10]); ctx.gpr[8] = (ctx.gpr[8] & 15u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A09E68; } @@ -4144,7 +4112,6 @@ L_08A09E40: goto L_08A09E58; L_08A09E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A09E7C; } @@ -4180,7 +4147,17 @@ L_08A09E84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09EA8: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_5 = (2235u << 16u); @@ -4199,7 +4176,17 @@ L_08A09EA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09EE0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_6 = (2235u << 16u); @@ -4228,7 +4215,17 @@ L_08A09EE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09F14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4245,7 +4242,6 @@ L_08A09F14: AOT_REGCACHE_SYNC_OUT(); return; L_08A09F40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A09F5C; } @@ -4255,7 +4251,6 @@ L_08A09F48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(32))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(32))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A09F5C; } @@ -4275,7 +4270,17 @@ L_08A09F5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09F78: ctx.gpr[2] = (2209u << 16u); jump_target = aot_gpr_31; @@ -4283,12 +4288,21 @@ L_08A09F78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09F84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A09F94u); - // nop goto L_08A09F78; L_08A09F94: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4297,7 +4311,17 @@ L_08A09F94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09FA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4315,7 +4339,6 @@ L_08A09FBC: goto L_08A09FC4; L_08A09FC4: aot_gpr_31 = (0x08A09FCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A09FCCu) goto L_08A09FCC; AOT_REGCACHE_SYNC_OUT(); return; L_08A09FCC: @@ -4323,7 +4346,6 @@ L_08A09FCC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A09FE4; } @@ -4342,7 +4364,17 @@ L_08A09FE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A09FFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4373,7 +4405,6 @@ L_08A0A02C: L_08A0A038: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A04C; } @@ -4393,14 +4424,34 @@ L_08A0A04C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A060: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 7u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A068: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4437,7 +4488,17 @@ L_08A0A0A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A0B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4467,7 +4528,17 @@ L_08A0A0E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A0EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -4527,7 +4598,17 @@ L_08A0A164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A170: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4542,14 +4623,23 @@ L_08A0A184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A190: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A0A1A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 300u, 0x08A9A720u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A1A8u) goto L_08A0A1A8; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A1A8: @@ -4569,7 +4659,17 @@ L_08A0A1A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A1DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -4579,7 +4679,6 @@ L_08A0A1DC: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A0A200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 300u, 0x08A9A720u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A200u) goto L_08A0A200; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A200: @@ -4661,7 +4760,17 @@ L_08A0A2B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A2CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4682,7 +4791,6 @@ L_08A0A2E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0A30C; } @@ -4690,7 +4798,6 @@ L_08A0A2E8: } L_08A0A304: aot_gpr_31 = (0x08A0A30Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 608u, 0x088F2DDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A30Cu) goto L_08A0A30C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A30C: @@ -4720,7 +4827,6 @@ L_08A0A334: goto L_08A0A338; L_08A0A338: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A348; } @@ -4740,7 +4846,17 @@ L_08A0A348: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A35C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -4767,7 +4883,6 @@ L_08A0A398: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0A3DC; } @@ -4808,7 +4923,6 @@ L_08A0A3DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A0A3E4: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08A0A42C; } @@ -4848,7 +4962,6 @@ L_08A0A3F4: goto L_08A0A424; L_08A0A424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0A468; } @@ -4856,7 +4969,6 @@ L_08A0A424: } L_08A0A42C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0A4B8; } @@ -4864,7 +4976,6 @@ L_08A0A42C: } L_08A0A434: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0A468; } @@ -4880,7 +4991,6 @@ L_08A0A43C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0A468; } @@ -4893,7 +5003,6 @@ L_08A0A468: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(32))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0A4B0; } @@ -4902,7 +5011,6 @@ L_08A0A468: L_08A0A478: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A4B0; } @@ -4917,7 +5025,6 @@ L_08A0A484: goto L_08A0A490; L_08A0A490: aot_gpr_31 = (0x08A0A498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A498u) goto L_08A0A498; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A498: @@ -4926,7 +5033,6 @@ L_08A0A498: L_08A0A49C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0A4B0; } @@ -4951,7 +5057,17 @@ L_08A0A4B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A4D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -5036,7 +5152,17 @@ L_08A0A594: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A5AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5051,7 +5177,6 @@ L_08A0A5AC: aot_gpr_16 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); aot_gpr_6 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A0A638; } @@ -5083,7 +5208,6 @@ L_08A0A5E4: L_08A0A638: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A650; } @@ -5098,7 +5222,6 @@ L_08A0A644: L_08A0A650: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A670; } @@ -5114,7 +5237,6 @@ L_08A0A65C: L_08A0A670: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A690; } @@ -5137,7 +5259,17 @@ L_08A0A690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A6A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -5167,7 +5299,17 @@ L_08A0A6F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0A700: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), std::bit_cast(ctx.fpr[20])); @@ -5210,7 +5352,6 @@ L_08A0A768: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(32))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0A7B0; } @@ -5227,7 +5368,6 @@ L_08A0A77C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A7B8; } @@ -5235,7 +5375,6 @@ L_08A0A77C: } L_08A0A7A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0A808; } @@ -5243,7 +5382,6 @@ L_08A0A7A8: } L_08A0A7B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0AA90; } @@ -5252,7 +5390,6 @@ L_08A0A7B0: L_08A0A7B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0A800; } @@ -5278,7 +5415,6 @@ L_08A0A7C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A0A800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0AA90; } @@ -5313,7 +5449,6 @@ L_08A0A838: goto L_08A0A844; L_08A0A844: aot_gpr_31 = (0x08A0A84Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A84Cu) goto L_08A0A84C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A84C: @@ -5330,7 +5465,6 @@ L_08A0A850: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0A980; } @@ -5345,7 +5479,6 @@ L_08A0A87C: goto L_08A0A888; L_08A0A888: aot_gpr_31 = (0x08A0A890u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A890u) goto L_08A0A890; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A890: @@ -5366,7 +5499,6 @@ L_08A0A89C: L_08A0A8AC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A0A978; } @@ -5438,9 +5570,7 @@ L_08A0A8E8: aot_fpr_12 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[20]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0A978; } @@ -5481,7 +5611,6 @@ L_08A0A95C: goto L_08A0A960; L_08A0A960: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A0A970; @@ -5508,7 +5637,6 @@ L_08A0A980: goto L_08A0A98C; L_08A0A98C: aot_gpr_31 = (0x08A0A994u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0A994u) goto L_08A0A994; AOT_REGCACHE_SYNC_OUT(); return; L_08A0A994: @@ -5581,7 +5709,6 @@ L_08A0A9F8: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(120), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0AA90; } @@ -5628,7 +5755,17 @@ L_08A0AA90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0AACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); @@ -5685,7 +5822,6 @@ L_08A0AB54: AOT_REGCACHE_SYNC_OUT(); return; L_08A0AB70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0AB78; } @@ -5698,7 +5834,17 @@ L_08A0AB78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0AB84: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5719,7 +5865,6 @@ L_08A0AB84: AOT_REGCACHE_SYNC_OUT(); return; L_08A0ABC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0ABCC; } @@ -5732,7 +5877,6 @@ L_08A0ABCC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(32))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0ABE0; } @@ -5745,7 +5889,6 @@ L_08A0ABE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(33)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(33)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0ABF4; } @@ -5756,7 +5899,6 @@ L_08A0ABF0: goto L_08A0ABF4; L_08A0ABF4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A0AC18; } @@ -5792,7 +5934,17 @@ L_08A0AC1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0AC3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5814,7 +5966,6 @@ L_08A0AC3C: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_16 = (ctx.gpr[7] | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A0AD3C; } @@ -5868,7 +6019,6 @@ L_08A0AC90: L_08A0AD3C: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0AD54; } @@ -5883,7 +6033,6 @@ L_08A0AD48: L_08A0AD54: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0AD88; } @@ -5904,7 +6053,6 @@ L_08A0AD60: L_08A0AD88: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0ADC8; } @@ -5935,7 +6083,17 @@ L_08A0ADC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0ADE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5966,7 +6124,6 @@ L_08A0AE14: L_08A0AE28: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A0AE6C; } @@ -5982,7 +6139,6 @@ L_08A0AE34: L_08A0AE44: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(104), 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A0AE6C; } @@ -6002,7 +6158,6 @@ L_08A0AE50: AOT_REGCACHE_SYNC_OUT(); return; L_08A0AE6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0AEA4; } @@ -6017,7 +6172,6 @@ L_08A0AE74: L_08A0AE80: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0AEA4; } @@ -6040,7 +6194,17 @@ L_08A0AEA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0AEB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -6063,7 +6227,6 @@ L_08A0AEB8: L_08A0AEF8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A0AF30; } @@ -6095,7 +6258,17 @@ L_08A0AF30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0AF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -6126,7 +6299,6 @@ L_08A0AF70: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0B188; } @@ -6146,7 +6318,6 @@ L_08A0AFB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(57))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0B188; } @@ -6167,7 +6338,6 @@ L_08A0AFD4: L_08A0AFEC: aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0B0E4; } @@ -6196,7 +6366,6 @@ L_08A0B010: L_08A0B018: ctx.gpr[9] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(148))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A0B02C; } @@ -6213,7 +6382,6 @@ L_08A0B024: L_08A0B02C: ctx.gpr[9] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(150))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A0B040; } @@ -6230,7 +6398,6 @@ L_08A0B038: L_08A0B040: ctx.gpr[9] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(168))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A0B054; } @@ -6298,7 +6465,6 @@ L_08A0B0B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B0DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B188; } @@ -6333,7 +6499,6 @@ L_08A0B104: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(28), static_cast(aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0B154; } @@ -6348,7 +6513,6 @@ L_08A0B138: goto L_08A0ADE0; L_08A0B14C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B188; } @@ -6366,7 +6530,6 @@ L_08A0B154: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B170: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0B188; } @@ -6437,7 +6600,17 @@ L_08A0B1F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0B214: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(304), aot_gpr_16); @@ -6450,7 +6623,6 @@ L_08A0B214: ctx.gpr[17] = (aot_gpr_4 | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(336), aot_gpr_6); aot_gpr_31 = (0x08A0B244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0B244u) goto L_08A0B244; AOT_REGCACHE_SYNC_OUT(); return; L_08A0B244: @@ -6468,7 +6640,6 @@ L_08A0B244: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(100))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0B6B0; } @@ -6476,7 +6647,6 @@ L_08A0B244: } L_08A0B280: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6494,7 +6664,6 @@ L_08A0B288: } L_08A0B298: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6506,7 +6675,6 @@ L_08A0B2A0: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(32) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6518,11 +6686,20 @@ L_08A0B2B8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(4000))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0B2D0: aot_gpr_31 = (0x08A0B2D8u); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -6530,7 +6707,6 @@ L_08A0B2D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B2D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0B3B0; } @@ -6623,7 +6799,6 @@ L_08A0B368: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B3B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6636,7 +6811,6 @@ L_08A0B3B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B3C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0B498; } @@ -6729,7 +6903,6 @@ L_08A0B450: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6742,7 +6915,6 @@ L_08A0B4A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B4A8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0B580; } @@ -6835,7 +7007,6 @@ L_08A0B538: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6848,7 +7019,6 @@ L_08A0B588: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B590: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0B668; } @@ -6941,7 +7111,6 @@ L_08A0B620: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6954,7 +7123,6 @@ L_08A0B670: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B680; } @@ -6962,7 +7130,6 @@ L_08A0B678: } L_08A0B680: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A0B740; } @@ -6981,7 +7148,6 @@ L_08A0B688: AOT_REGCACHE_SYNC_OUT(); return; L_08A0B6A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0B740; } @@ -6991,7 +7157,6 @@ L_08A0B6B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3))); aot_gpr_6 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A0B740; } @@ -7021,7 +7186,6 @@ L_08A0B6E4: goto L_08A0B6F0; L_08A0B6F0: aot_gpr_31 = (0x08A0B6F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0B6F8u) goto L_08A0B6F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A0B6F8: @@ -7075,7 +7239,17 @@ L_08A0B740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0B764: aot_gpr_4 = (0u | 23u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9744), static_cast(aot_gpr_4)); @@ -7105,7 +7279,17 @@ L_08A0B764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0B7C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7122,7 +7306,17 @@ L_08A0B7DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0B7F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[8] = (aot_gpr_4 + static_cast(1872)); @@ -7275,7 +7469,17 @@ L_08A0B7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0B944: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -7426,7 +7630,17 @@ L_08A0BA48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BA78: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1792))); @@ -7605,9 +7819,7 @@ L_08A0BB44: aot_mem.aot_direct_store32(ctx.gpr[11] + static_cast(16), std::bit_cast(ctx.fpr[17])); aot_mem.aot_direct_store32(ctx.gpr[11] + static_cast(20), std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[8])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0BC8C; } @@ -7639,7 +7851,6 @@ L_08A0BCAC: ctx.gpr[2] = (ctx.gpr[2] >> 4u); ctx.gpr[10] = (ctx.gpr[10] - ctx.gpr[2]); { const bool branch_taken = static_cast(ctx.gpr[10]) >= 0; - // nop if (branch_taken) { goto L_08A0BCD0; } @@ -7655,7 +7866,6 @@ L_08A0BCD0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A0BCF4; @@ -7730,7 +7940,17 @@ L_08A0BD5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BDAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7754,7 +7974,6 @@ L_08A0BDE0: ctx.gpr[7] = (aot_gpr_16 + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(785))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A0BE00; } @@ -7770,7 +7989,6 @@ L_08A0BE00: aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_6) < 32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A0BE18; } @@ -7784,7 +8002,6 @@ L_08A0BE18: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_5) < 32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A0BDE0; } @@ -7792,7 +8009,6 @@ L_08A0BE18: } L_08A0BE2C: { const bool branch_taken = static_cast(ctx.gpr[17]) <= 0; - // nop if (branch_taken) { goto L_08A0BE60; } @@ -7815,7 +8031,6 @@ L_08A0BE48: AOT_REGCACHE_SYNC_OUT(); return; L_08A0BE58: aot_gpr_31 = (0x08A0BE60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0BE60u) goto L_08A0BE60; AOT_REGCACHE_SYNC_OUT(); return; L_08A0BE60: @@ -7827,7 +8042,17 @@ L_08A0BE60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BE74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7850,7 +8075,17 @@ L_08A0BE9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BEA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(aot_gpr_4)); @@ -7867,7 +8102,17 @@ L_08A0BEC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_4); @@ -7884,7 +8129,17 @@ L_08A0BEEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BEF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_4); @@ -7901,7 +8156,17 @@ L_08A0BF14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BF20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_4 | 0u); @@ -7918,7 +8183,17 @@ L_08A0BF3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7935,7 +8210,6 @@ L_08A0BF48: L_08A0BF64: ctx.gpr[17] = (aot_gpr_4 + static_cast(16)); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A0BF84; } @@ -7948,7 +8222,6 @@ L_08A0BF70: goto L_08A0BEF8; L_08A0BF7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0BFA8; } @@ -7977,7 +8250,17 @@ L_08A0BFA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0BFC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0130.cpp b/profiles/vcs/generated/generated_unit_0130.cpp index 4d23239..a1d14f6 100644 --- a/profiles/vcs/generated/generated_unit_0130.cpp +++ b/profiles/vcs/generated/generated_unit_0130.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0130[4072] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 22, 0, 23, 0, - 24, 0, 25, 0, 0, 26, 0, 27, 0, 0, 28, 0, 29, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, 39, - 0, 0, 40, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 50, 0, 51, 0, 0, 52, 0, 0, 53, 0, 0, 54, 0, 0, 55, 0, 0, 56, 0, 0, 57, 0, 0, 58, 0, - 0, 59, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, - 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, - 80, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 84, 85, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 91, 0, 92, 93, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 110, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 118, 119, 0, 0, 0, 0, - 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 125, 0, - 0, 0, 0, 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 140, 0, 141, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 146, 0, 147, - 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 150, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 153, - 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 161, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 166, 0, 167, 0, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 172, 0, 173, 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 0, 0, 184, 0, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 188, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 191, 192, 0, 193, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, - 198, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 201, 0, 202, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 205, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 211, 0, 212, 213, 0, 214, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 217, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 221, 222, 0, 223, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, - 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 231, 0, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 242, 0, 243, 0, 244, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 246, 247, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, - 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 260, 261, 0, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, - 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, - 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 0, 273, 0, 274, 275, 0, 276, 0, 277, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, - 0, 283, 0, 0, 0, 284, 0, 285, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, - 291, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 296, 0, 0, - 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, - 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 302, 0, 303, 0, 304, 305, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 309, 0, - 0, 0, 0, 310, 0, 0, 311, 0, 312, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, - 0, 324, 0, 325, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 338, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, - 0, 0, 0, 340, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, - 346, 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 355, 0, - 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, - 362, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 366, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, - 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 376, 0, 377, 0, 0, - 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, - 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 0, 390, 0, 391, 0, - 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 395, 396, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 399, 400, 0, 0, - 0, 401, 402, 0, 403, 0, 404, 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, - 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 414, 0, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, - 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, - 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 449, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 0, 0, - 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 0, 0, 459, 0, 0, - 0, 460, 0, 0, 0, 461, 0, 0, 462, 0, 463, 0, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 467, 0, - 0, 468, 0, 0, 0, 469, 470, 0, 0, 471, 0, 472, 0, 473, 0, 474, 475, 0, 476, 0, 477, 0, 0, 478, 0, 479, 0, 0, 0, 0, 0, 0, - 480, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, - 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, - 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, - 0, 494, 0, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, 500, 0, 0, 501, 0, 0, 502, 0, 0, - 503, 504, 0, 0, 0, 0, 505, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 511, 0, 0, 512, 0, 0, 513, 0, 514, 0, 515, 0, 516, 0, 0, 517, 0, 0, - 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, - 0, 0, 0, 0, 0, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 530, 0, 531, 0, 0, - 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 542, - 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 546, 0, 547, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 550, 0, 0, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, 558, 0, 559, 560, 0, 561, - 0, 562, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, - 0, 567, 568, 0, 0, 0, 0, 569, 0, 0, 0, 0, 570, 0, 571, 572, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 575, 0, 0, 0, 576, 0, 577, 0, 0, 0, 578, 0, 579, 0, 580, 0, 581, - 0, 0, 582, 583, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 590, 0, 0, 0, 0, 591, 0, 592, - 0, 0, 0, 593, 0, 0, 0, 0, 594, 0, 595, 0, 596, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 599, 0, 600, 0, 0, 0, - 601, 0, 602, 0, 603, 0, 604, 0, 605, 606, 0, 0, 0, 0, 0, 0, 0, 607, 0, 608, 0, 609, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, - 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 613, - 0, 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 620, 0, - 0, 0, 621, 0, 0, 0, 622, 0, 623, 0, 0, 0, 624, 0, 625, 0, 626, 0, 627, 0, 628, 629, 0, 0, 0, 0, 0, 0, 0, 630, 0, 631, - 0, 632, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 638, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 641, 642, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 644, 0, 0, 0, 0, 645, 0, 646, 0, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 653, 0, 0, 0, 0, 654, 0, 0, 0, 655, 0, - 0, 0, 0, 656, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 0, 662, 663, 0, - 0, 0, 0, 664, 0, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 668, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 670, - 0, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, 0, 0, 674, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 676, 0, 0, 0, 677, - 0, 678, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 682, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, - 0, 685, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 692, 0, 0, - 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, - 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 697, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0130[64] = { + 0x8420202210844005ull, 0x5442200101108800ull, 0x92400804411114A5ull, 0x4924929010924924ull, + 0x0000002044402212ull, 0x0050000048200000ull, 0x0808204101048000ull, 0x00008000D0000205ull, + 0x0835000000000214ull, 0x0054000881102120ull, 0x00200044400A000Aull, 0x0D40000000010A00ull, + 0x1500022044084802ull, 0x0800111002800280ull, 0xA8A0000000116000ull, 0x01500412A00A8002ull, + 0x0540000005610434ull, 0x0A800000020009D0ull, 0x0B401500000544A0ull, 0x0000000B40150000ull, + 0x01500000002D0054ull, 0x022B4015000084B4ull, 0x006A000001020202ull, 0x2B0000008000D540ull, + 0x0000004600040000ull, 0x0000001400028000ull, 0x0814C08101040412ull, 0x8400000480014000ull, + 0x201040080035A840ull, 0x248001030A080AA2ull, 0x01A9004080000440ull, 0x0010034841100008ull, + 0x0002006AAA900422ull, 0x0428800400A21044ull, 0x50A1428502084228ull, 0x28140A0502850280ull, + 0x140280502850A140ull, 0x311340A050A050A0ull, 0x0000288812110256ull, 0x0042081408082049ull, + 0x0808010020020200ull, 0x0045042800888841ull, 0x0482221002241084ull, 0x2140000000000201ull, + 0x0295AA624040A522ull, 0x1020201010082011ull, 0x2492482208140808ull, 0x2552448000500443ull, + 0x0000000000100004ull, 0x2D54824040100000ull, 0x012A8802D5524120ull, 0x08042082B5209544ull, + 0xAA2888000004D086ull, 0xA110000008024A0Cull, 0x082A035514441508ull, 0x4042845088000001ull, + 0x00001082A0355144ull, 0x0000020068450880ull, 0x61108848443554A1ull, 0x8841210484121048ull, + 0x800010008401000Aull, 0x240100008401000Aull, 0x0000004040000010ull, 0x0000008002000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0130[64] = { + 1u, 13u, 24u, 40u, 59u, 67u, 72u, 80u, 87u, 95u, 105u, 113u, 120u, 131u, 139u, 148u, + 160u, 172u, 181u, 194u, 201u, 211u, 226u, 234u, 245u, 249u, 253u, 265u, 271u, 283u, 297u, 306u, + 315u, 329u, 340u, 356u, 370u, 384u, 401u, 414u, 425u, 431u, 443u, 455u, 460u, 480u, 489u, 503u, + 518u, 520u, 532u, 550u, 567u, 582u, 593u, 611u, 621u, 635u, 644u, 664u, 678u, 685u, 693u, 696u, }; void recomp_unit_0130_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0130_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A0C000u; - entry_id = (entry_delta < 16288u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0130[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16288u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0130[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0130[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A0C000; @@ -874,7 +781,17 @@ L_08A0C000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C008: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -949,7 +866,17 @@ L_08A0C094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C0B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -981,7 +908,17 @@ L_08A0C0E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C0FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1040,7 +977,17 @@ L_08A0C160: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C180: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1086,7 +1033,6 @@ L_08A0C1D8: } L_08A0C1E8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0C230; } @@ -1094,7 +1040,6 @@ L_08A0C1E8: } L_08A0C1F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0C230; } @@ -1110,7 +1055,6 @@ L_08A0C1F8: } L_08A0C200: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0C230; } @@ -1124,7 +1068,6 @@ L_08A0C208: AOT_REGCACHE_SYNC_OUT(); return; L_08A0C214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0C230; } @@ -1138,7 +1081,6 @@ L_08A0C21C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0C228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0C230; } @@ -1205,7 +1147,17 @@ L_08A0C288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C2AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1295,7 +1247,17 @@ L_08A0C35C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C370: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1315,7 +1277,6 @@ L_08A0C390: AOT_REGCACHE_SYNC_OUT(); return; L_08A0C39C: aot_gpr_31 = (0x08A0C3A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0120_entry, 120u, 521u, 0x089E6870u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0C3A4u) goto L_08A0C3A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A0C3A4: @@ -1388,7 +1349,17 @@ L_08A0C424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C434: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_4); @@ -1414,7 +1385,17 @@ L_08A0C468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C478: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -1433,11 +1414,20 @@ L_08A0C478: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C494: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(252), ctx.gpr[30]); @@ -1571,7 +1561,6 @@ L_08A0C578: AOT_REGCACHE_SYNC_OUT(); return; L_08A0C5D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0C6B4; } @@ -1657,7 +1646,6 @@ L_08A0C5D8: L_08A0C63C: ctx.gpr[23] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A0C680; } @@ -1667,9 +1655,7 @@ L_08A0C648: aot_fpr_12 = std::bit_cast(ctx.gpr[22]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0C6B4; } @@ -1704,9 +1690,7 @@ L_08A0C680: aot_fpr_12 = std::bit_cast(ctx.gpr[21]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0C6B4; } @@ -1763,7 +1747,6 @@ L_08A0C6EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(197))); aot_gpr_5 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0C778; } @@ -1771,7 +1754,6 @@ L_08A0C6EC: } L_08A0C700: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0C724; } @@ -1858,7 +1840,17 @@ L_08A0C77C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0C7BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1872,7 +1864,6 @@ L_08A0C7BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A0C808: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0C8C8; } @@ -1883,7 +1874,6 @@ L_08A0C810: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0C8C8; } @@ -2018,7 +2008,6 @@ L_08A0C824: } L_08A0C8C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0C8D4; } @@ -2100,7 +2089,6 @@ L_08A0C934: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A0C950; @@ -2108,9 +2096,7 @@ L_08A0C934: goto L_08A0C950; L_08A0C950: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0C98C; } @@ -2121,7 +2107,6 @@ L_08A0C960: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A0C97C; @@ -2129,9 +2114,7 @@ L_08A0C960: goto L_08A0C97C; L_08A0C97C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0CA78; } @@ -2204,7 +2187,6 @@ L_08A0C9C8: goto L_08A0C9D0; L_08A0C9D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0CA78; } @@ -2226,7 +2208,6 @@ L_08A0C9D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A0CA04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0CA78; } @@ -2262,7 +2243,6 @@ L_08A0CA0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0CA44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0CA78; } @@ -2299,7 +2279,6 @@ L_08A0CA78: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0C914; } @@ -2333,7 +2312,17 @@ L_08A0CA98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0CAD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2348,7 +2337,6 @@ L_08A0CAD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A0CB24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0CBE0; } @@ -2359,7 +2347,6 @@ L_08A0CB2C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0CBE0; } @@ -2493,7 +2480,6 @@ L_08A0CB40: } L_08A0CBD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0CBEC; } @@ -2575,7 +2561,6 @@ L_08A0CC4C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A0CC68; @@ -2583,9 +2568,7 @@ L_08A0CC4C: goto L_08A0CC68; L_08A0CC68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0CCA4; } @@ -2596,7 +2579,6 @@ L_08A0CC78: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A0CC94; @@ -2604,9 +2586,7 @@ L_08A0CC78: goto L_08A0CC94; L_08A0CC94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0CD90; } @@ -2679,7 +2659,6 @@ L_08A0CCE0: goto L_08A0CCE8; L_08A0CCE8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0CD90; } @@ -2701,7 +2680,6 @@ L_08A0CCF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A0CD1C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0CD90; } @@ -2737,7 +2715,6 @@ L_08A0CD24: AOT_REGCACHE_SYNC_OUT(); return; L_08A0CD5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0CD90; } @@ -2774,7 +2751,6 @@ L_08A0CD90: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0CC2C; } @@ -2808,7 +2784,17 @@ L_08A0CDB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0CDEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-896)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2826,7 +2812,6 @@ L_08A0CE34: goto L_08A0CE38; L_08A0CE38: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A0CEFC; } @@ -2836,7 +2821,6 @@ L_08A0CE40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0CEF4; } @@ -2927,7 +2911,6 @@ L_08A0CEDC: } L_08A0CEEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0CF84; } @@ -3005,7 +2988,6 @@ L_08A0CF4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0CF74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D028; } @@ -3022,7 +3004,6 @@ L_08A0CF7C: L_08A0CF84: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0D028; } @@ -3103,7 +3084,6 @@ L_08A0CFE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D008: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D014; } @@ -3138,7 +3118,6 @@ L_08A0D040: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(2274))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0D060; } @@ -3295,7 +3274,6 @@ L_08A0D0E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D110: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D11C; } @@ -3310,7 +3288,6 @@ L_08A0D11C: L_08A0D120: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(816), ctx.gpr[18]); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D240; } @@ -3467,7 +3444,6 @@ L_08A0D1EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D214: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D228; } @@ -3486,7 +3462,6 @@ L_08A0D228: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0D164; } @@ -3498,7 +3473,6 @@ L_08A0D238: goto L_08A0D240; L_08A0D240: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D2E4; } @@ -3601,7 +3575,6 @@ L_08A0D2B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D2D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D2E4; } @@ -3714,7 +3687,6 @@ L_08A0D350: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D378: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D384; } @@ -3725,7 +3697,6 @@ L_08A0D380: goto L_08A0D384; L_08A0D384: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D44C; } @@ -3867,7 +3838,6 @@ L_08A0D418: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D440: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D44C; } @@ -3878,7 +3848,6 @@ L_08A0D448: goto L_08A0D44C; L_08A0D44C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D514; } @@ -4020,7 +3989,6 @@ L_08A0D4E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D508: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D514; } @@ -4031,7 +3999,6 @@ L_08A0D510: goto L_08A0D514; L_08A0D514: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D5CC; } @@ -4040,7 +4007,6 @@ L_08A0D514: L_08A0D51C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0D5CC; } @@ -4131,7 +4097,6 @@ L_08A0D590: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D5B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0D5C4; } @@ -4142,7 +4107,6 @@ L_08A0D5C0: goto L_08A0D5C4; L_08A0D5C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4150,7 +4114,6 @@ L_08A0D5C4: } L_08A0D5CC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4160,7 +4123,6 @@ L_08A0D5D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4172,9 +4134,7 @@ L_08A0D5E4: aot_gpr_4 = (aot_gpr_4 | 8192u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4186,9 +4146,7 @@ L_08A0D604: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4200,9 +4158,7 @@ L_08A0D624: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4213,9 +4169,7 @@ L_08A0D644: aot_gpr_4 = (50338u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4297,7 +4251,6 @@ L_08A0D6C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D6CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0D6D8; } @@ -4322,7 +4275,6 @@ L_08A0D6D8: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_mem.aot_direct_store32(ctx.gpr[22] + static_cast(468), aot_gpr_4); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D730; } @@ -4330,7 +4282,6 @@ L_08A0D6D8: } L_08A0D718: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A0D738; } @@ -4342,7 +4293,6 @@ L_08A0D720: goto L_08A0D77C; L_08A0D728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0D73C; } @@ -4382,7 +4332,17 @@ L_08A0D73C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0D77C: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); { const std::uint32_t aot_run_words[12]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4409,7 +4369,6 @@ L_08A0D7E0: goto L_08A0D7E4; L_08A0D7E4: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A0D7F4; } @@ -4474,7 +4433,6 @@ L_08A0D848: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0DA9C; } @@ -4654,7 +4612,6 @@ L_08A0D944: AOT_REGCACHE_SYNC_OUT(); return; L_08A0D988: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0DA80; } @@ -4744,7 +4701,6 @@ L_08A0D990: L_08A0DA04: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08A0DA48; } @@ -4754,9 +4710,7 @@ L_08A0DA10: aot_fpr_12 = std::bit_cast(ctx.gpr[30]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0DA80; } @@ -4791,9 +4745,7 @@ L_08A0DA48: aot_fpr_12 = std::bit_cast(ctx.gpr[23]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0DA80; } @@ -4838,7 +4790,6 @@ L_08A0DA9C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0D848; } @@ -4850,7 +4801,6 @@ L_08A0DAB8: L_08A0DABC: aot_gpr_4 = (ctx.gpr[21] | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0DB40; } @@ -4858,7 +4808,6 @@ L_08A0DABC: } L_08A0DAC8: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A0DAEC; } @@ -4951,7 +4900,6 @@ L_08A0DB40: L_08A0DB7C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A0DC50; } @@ -5024,7 +4972,6 @@ L_08A0DBFC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(20))); if (branch_taken) { @@ -5035,9 +4982,7 @@ L_08A0DBFC: L_08A0DC18: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0DC34; } @@ -5053,7 +4998,6 @@ L_08A0DC2C: } L_08A0DC34: aot_gpr_31 = (0x08A0DC3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A0DC3Cu) goto L_08A0DC3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A0DC3C: @@ -5096,7 +5040,17 @@ L_08A0DC54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0DC8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1806))); @@ -5106,7 +5060,6 @@ L_08A0DC8C: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0DCD0; } @@ -5131,9 +5084,7 @@ L_08A0DCD0: aot_gpr_4 = (aot_gpr_16 + ctx.gpr[18]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0DD1C; } @@ -5158,7 +5109,6 @@ L_08A0DD04: } L_08A0DD14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0DD80; } @@ -5166,7 +5116,6 @@ L_08A0DD14: } L_08A0DD1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0DD84; } @@ -5182,9 +5131,7 @@ L_08A0DD2C: aot_gpr_5 = (aot_gpr_16 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0DD6C; } @@ -5201,7 +5148,6 @@ L_08A0DD4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A0DD64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0DD80; } @@ -5235,7 +5181,17 @@ L_08A0DD84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0DDA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -5265,7 +5221,6 @@ L_08A0DDDC: L_08A0DDE8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A0DE7C; } @@ -5287,7 +5242,6 @@ L_08A0DE18: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A0DE7C; } @@ -5342,7 +5296,17 @@ L_08A0DE7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0DE98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5376,7 +5340,6 @@ L_08A0DECC: goto L_08A0DED4; L_08A0DED4: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0DF8C; } @@ -5459,7 +5422,6 @@ L_08A0DF8C: goto L_08A0DF98; L_08A0DF98: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0E050; } @@ -5492,7 +5454,6 @@ L_08A0DFD0: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - aot_fpr_14; goto L_08A0E014; @@ -5582,7 +5543,6 @@ L_08A0E084: goto L_08A0E08C; L_08A0E08C: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0E144; } @@ -5619,7 +5579,6 @@ L_08A0E0C4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -5660,7 +5619,6 @@ L_08A0E144: aot_gpr_6 = (aot_gpr_4 | 0u); aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A0E1CC; } @@ -5698,7 +5656,6 @@ L_08A0E188: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_14 - aot_fpr_12; goto L_08A0E1D4; @@ -5742,7 +5699,6 @@ L_08A0E1E8: goto L_08A0E20C; L_08A0E20C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0E224; } @@ -5766,13 +5722,22 @@ L_08A0E224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0E238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 < static_cast(35) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A0E5C0; } @@ -5784,11 +5749,20 @@ L_08A0E24C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(4776))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0E264: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); @@ -5800,7 +5774,6 @@ L_08A0E264: goto L_08A0E5D0; L_08A0E280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5815,7 +5788,6 @@ L_08A0E288: goto L_08A0E5D0; L_08A0E29C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5830,7 +5802,6 @@ L_08A0E2A4: goto L_08A0E5D0; L_08A0E2B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5845,7 +5816,6 @@ L_08A0E2C0: goto L_08A0E5D0; L_08A0E2D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5860,7 +5830,6 @@ L_08A0E2DC: goto L_08A0E5D0; L_08A0E2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5879,7 +5848,6 @@ L_08A0E2F8: goto L_08A0E5D0; L_08A0E31C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5896,7 +5864,6 @@ L_08A0E324: goto L_08A0E5D0; L_08A0E340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5911,7 +5878,6 @@ L_08A0E348: goto L_08A0E5D0; L_08A0E35C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5928,7 +5894,6 @@ L_08A0E364: goto L_08A0E5D0; L_08A0E380: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5945,7 +5910,6 @@ L_08A0E388: goto L_08A0E5D0; L_08A0E3A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5962,7 +5926,6 @@ L_08A0E3AC: goto L_08A0E5D0; L_08A0E3C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5979,7 +5942,6 @@ L_08A0E3D0: goto L_08A0E5D0; L_08A0E3EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -5998,7 +5960,6 @@ L_08A0E3F4: goto L_08A0E5D0; L_08A0E418: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6013,7 +5974,6 @@ L_08A0E420: goto L_08A0E5D0; L_08A0E434: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6028,7 +5988,6 @@ L_08A0E43C: goto L_08A0E5D0; L_08A0E450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6043,7 +6002,6 @@ L_08A0E458: goto L_08A0E5D0; L_08A0E46C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6060,7 +6018,6 @@ L_08A0E474: goto L_08A0E5D0; L_08A0E490: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6079,7 +6036,6 @@ L_08A0E498: goto L_08A0E5D0; L_08A0E4BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6098,7 +6054,6 @@ L_08A0E4C4: goto L_08A0E5D0; L_08A0E4E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6117,7 +6072,6 @@ L_08A0E4F0: goto L_08A0E5D0; L_08A0E514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6132,7 +6086,6 @@ L_08A0E51C: goto L_08A0E5D0; L_08A0E530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6149,7 +6102,6 @@ L_08A0E538: goto L_08A0E5D0; L_08A0E554: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6164,7 +6116,6 @@ L_08A0E55C: goto L_08A0E5D0; L_08A0E570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6181,7 +6132,6 @@ L_08A0E578: goto L_08A0E5D0; L_08A0E594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6198,7 +6148,6 @@ L_08A0E59C: goto L_08A0E5D0; L_08A0E5B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E5C4; } @@ -6214,12 +6163,20 @@ L_08A0E5C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0E5D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0E604; } @@ -6227,9 +6184,7 @@ L_08A0E5D0: } L_08A0E5E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0E5F4; } @@ -6242,7 +6197,6 @@ L_08A0E5F4: ctx.fpr[0] = aot_fpr_12 - aot_fpr_13; ctx.fpr[0] = ctx.fpr[0] / aot_fpr_15; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E608; } @@ -6253,14 +6207,22 @@ L_08A0E604: goto L_08A0E608; L_08A0E608: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0E610: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0E664; } @@ -6269,7 +6231,6 @@ L_08A0E610: L_08A0E618: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0E6AC; } @@ -6282,7 +6243,6 @@ L_08A0E624: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A0E6AC; } @@ -6292,7 +6252,6 @@ L_08A0E640: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0E6AC; } @@ -6312,7 +6271,6 @@ L_08A0E650: L_08A0E664: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0E6AC; } @@ -6325,7 +6283,6 @@ L_08A0E670: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A0E6AC; } @@ -6335,7 +6292,6 @@ L_08A0E68C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0E6AC; } @@ -6349,11 +6305,20 @@ L_08A0E69C: goto L_08A0E6AC; L_08A0E6AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0E6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(140), ctx.gpr[21]); @@ -6382,7 +6347,6 @@ L_08A0E6B4: L_08A0E700: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24260))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A0E874; } @@ -6391,7 +6355,6 @@ L_08A0E700: L_08A0E70C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(26341))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0E874; } @@ -6402,7 +6365,6 @@ L_08A0E718: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -6414,9 +6376,7 @@ L_08A0E734: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0E788; } @@ -6465,7 +6425,6 @@ L_08A0E76C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E7D8; } @@ -6473,7 +6432,6 @@ L_08A0E76C: } L_08A0E788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E874; } @@ -6520,7 +6478,6 @@ L_08A0E7AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E7D8; } @@ -6624,9 +6581,7 @@ L_08A0E824: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0E874; } @@ -6675,7 +6630,17 @@ L_08A0E874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0E8A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -6694,7 +6659,6 @@ L_08A0E8CC: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0E8CC; } @@ -6724,7 +6688,6 @@ L_08A0E918: aot_gpr_5 = (aot_gpr_16 + aot_gpr_5); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(25168))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A0E994; } @@ -6734,7 +6697,6 @@ L_08A0E92C: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(24276))); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(25172))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A0E994; } @@ -6744,7 +6706,6 @@ L_08A0E93C: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(24280))); ctx.gpr[10] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(25176))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A0E994; } @@ -6754,7 +6715,6 @@ L_08A0E94C: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(24281))); ctx.gpr[10] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(25177))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A0E994; } @@ -6776,7 +6736,6 @@ L_08A0E95C: goto L_08A0DDA0; L_08A0E98C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0E9A8; } @@ -6787,7 +6746,6 @@ L_08A0E994: ctx.gpr[7] = (ctx.gpr[7] & 255u); aot_gpr_5 = (static_cast(ctx.gpr[7]) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0E918; } @@ -6799,7 +6757,6 @@ L_08A0E9A8: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0E900; } @@ -6837,7 +6794,6 @@ L_08A0EA08: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0E9C8; } @@ -6860,7 +6816,6 @@ L_08A0EA30: aot_gpr_5 = (aot_gpr_29 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0EAC4; } @@ -6903,7 +6858,6 @@ L_08A0EA90: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_5 = (static_cast(ctx.gpr[18]) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0EA54; } @@ -6927,7 +6881,6 @@ L_08A0EAC4: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0EA30; } @@ -6966,7 +6919,17 @@ L_08A0EB00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0EB24: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_6 = (2232u << 16u); @@ -7014,7 +6977,6 @@ L_08A0EB24: goto L_08A0EBD8; L_08A0EBD8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A0EBF4; } @@ -7054,7 +7016,6 @@ L_08A0EC14: } L_08A0EC20: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A0EC34; } @@ -7067,7 +7028,6 @@ L_08A0EC28: goto L_08A0EC34; L_08A0EC34: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A0EC78; } @@ -7078,9 +7038,7 @@ L_08A0EC3C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0EC78; } @@ -7092,7 +7050,6 @@ L_08A0EC58: ctx.gpr[17] = (0u | 10u); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08A0EC78; @@ -7101,7 +7058,6 @@ L_08A0EC58: L_08A0EC78: aot_gpr_4 = (0u | 13u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A0EC98; } @@ -7109,9 +7065,7 @@ L_08A0EC78: } L_08A0EC84: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0EC98; } @@ -7131,7 +7085,6 @@ L_08A0EC98: } L_08A0ECA4: { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0ECB4; } @@ -7139,7 +7092,6 @@ L_08A0ECA4: } L_08A0ECAC: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A0ECC0; } @@ -7147,7 +7099,6 @@ L_08A0ECAC: } L_08A0ECB4: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A0ECC0; } @@ -7177,7 +7128,6 @@ L_08A0ECD0: goto L_08A0ECDC; L_08A0ECDC: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A0EFF4; } @@ -7197,7 +7147,6 @@ L_08A0ED00: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A0EFF4; } @@ -7212,7 +7161,6 @@ L_08A0ED10: aot_gpr_4 = (aot_gpr_4 + static_cast(-112)); aot_gpr_5 = (aot_gpr_4 < static_cast(48) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0EE84; } @@ -7224,11 +7172,20 @@ L_08A0ED34: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(4920))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0ED4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(26320))); aot_gpr_5 = (0u | 6u); @@ -7342,7 +7299,6 @@ L_08A0EE2C: } L_08A0EE48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0EE84; } @@ -7373,7 +7329,6 @@ L_08A0EE84: aot_gpr_4 = (ctx.gpr[17] + static_cast(-7)); aot_gpr_5 = (aot_gpr_4 < static_cast(18) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0EEF4; } @@ -7385,11 +7340,20 @@ L_08A0EE94: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5112))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0EEAC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_gpr_31 = (0x08A0EEB8u); @@ -7547,7 +7511,6 @@ L_08A0EFC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A0EFD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0EFF4; } @@ -7555,7 +7518,6 @@ L_08A0EFD0: } L_08A0EFD8: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A0EFF4; } @@ -7563,7 +7525,6 @@ L_08A0EFD8: } L_08A0EFE0: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A0EFF4; } @@ -7580,7 +7541,6 @@ L_08A0EFF4: ctx.gpr[18] = (ctx.gpr[18] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0EBD8; } @@ -7611,7 +7571,17 @@ L_08A0F008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F050: aot_gpr_4 = (17571u << 16u); aot_gpr_4 = (aot_gpr_4 | 57344u); @@ -7680,7 +7650,17 @@ L_08A0F050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F150: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7734,20 +7714,27 @@ L_08A0F150: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F178: aot_gpr_4 = (16268u << 16u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8348))); aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F1E0; } @@ -7756,7 +7743,6 @@ L_08A0F178: L_08A0F198: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8160))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0F1D8; } @@ -7768,7 +7754,6 @@ L_08A0F1A4: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (aot_gpr_4 < static_cast(5000) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0F1D0; } @@ -7777,7 +7762,6 @@ L_08A0F1A4: L_08A0F1BC: aot_gpr_4 = (aot_gpr_4 < static_cast(6000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F1E8; } @@ -7820,20 +7804,27 @@ L_08A0F1E8: goto L_08A0F1EC; L_08A0F1EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F1F4: aot_gpr_4 = (16268u << 16u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8348))); aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F270; } @@ -7842,7 +7833,6 @@ L_08A0F1F4: L_08A0F214: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-8160))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0F268; } @@ -7854,7 +7844,6 @@ L_08A0F220: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (aot_gpr_4 < static_cast(6000) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0F260; } @@ -7863,7 +7852,6 @@ L_08A0F220: L_08A0F238: aot_gpr_5 = (aot_gpr_4 < static_cast(11000) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0F258; } @@ -7872,7 +7860,6 @@ L_08A0F238: L_08A0F244: aot_gpr_4 = (aot_gpr_4 < static_cast(12000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F278; } @@ -7923,11 +7910,20 @@ L_08A0F278: goto L_08A0F27C; L_08A0F27C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F284: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (16268u << 16u); @@ -7936,9 +7932,7 @@ L_08A0F284: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F2CC; } @@ -7948,7 +7942,6 @@ L_08A0F2AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F2C4; } @@ -7972,7 +7965,6 @@ L_08A0F2C4: } L_08A0F2CC: aot_gpr_31 = (0x08A0F2D4u); - // nop goto L_08A0F178; L_08A0F2D4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7981,7 +7973,17 @@ L_08A0F2D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F2E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (16268u << 16u); @@ -7990,9 +7992,7 @@ L_08A0F2E0: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F328; } @@ -8002,7 +8002,6 @@ L_08A0F308: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F320; } @@ -8026,7 +8025,6 @@ L_08A0F320: } L_08A0F328: aot_gpr_31 = (0x08A0F330u); - // nop goto L_08A0F1F4; L_08A0F330: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8035,14 +8033,23 @@ L_08A0F330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F33C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 & 32767u); aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (aot_gpr_4 < static_cast(12000) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0F368; } @@ -8051,7 +8058,6 @@ L_08A0F33C: L_08A0F354: aot_gpr_4 = (aot_gpr_4 < static_cast(15384) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F370; } @@ -8078,18 +8084,37 @@ L_08A0F370: goto L_08A0F374; L_08A0F374: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F37C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F384: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 + static_cast(16)); @@ -8103,7 +8128,6 @@ L_08A0F39C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16997u << 16u); if (branch_taken) { @@ -8125,7 +8149,6 @@ L_08A0F3C8: aot_gpr_4 = (17008u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17264u << 16u); if (branch_taken) { @@ -8137,9 +8160,7 @@ L_08A0F3EC: aot_gpr_4 = (17174u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F430; } @@ -8151,7 +8172,6 @@ L_08A0F404: L_08A0F408: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17317u << 16u); if (branch_taken) { @@ -8162,9 +8182,7 @@ L_08A0F408: L_08A0F41C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F438; } @@ -8188,7 +8206,17 @@ L_08A0F43C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F448: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), aot_gpr_16); @@ -8224,7 +8252,6 @@ L_08A0F4AC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2)))))); aot_gpr_5 = (aot_gpr_5 & 64u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A0F4CC; } @@ -8234,7 +8261,6 @@ L_08A0F4BC: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(0)))))); ctx.gpr[9] = (aot_gpr_6 & 16383u); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A0F630; } @@ -8242,7 +8268,6 @@ L_08A0F4BC: } L_08A0F4CC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A0F4E4; } @@ -8252,7 +8277,6 @@ L_08A0F4D4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(0)))))); aot_gpr_6 = (aot_gpr_6 & 16383u); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A0F630; } @@ -8276,7 +8300,6 @@ L_08A0F4EC: } L_08A0F4F4: aot_gpr_31 = (0x08A0F4FCu); - // nop goto L_08A0F178; L_08A0F4FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16928))); @@ -8296,7 +8319,6 @@ L_08A0F50C: aot_gpr_5 = (aot_gpr_5 & 49152u); aot_gpr_5 = (aot_gpr_5 >> 14u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A0F630; } @@ -8304,7 +8326,6 @@ L_08A0F50C: } L_08A0F524: aot_gpr_31 = (0x08A0F52Cu); - // nop goto L_08A0F1F4; L_08A0F52C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16928))); @@ -8367,7 +8388,6 @@ L_08A0F56C: } L_08A0F5D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16640u << 16u); if (branch_taken) { @@ -8378,9 +8398,7 @@ L_08A0F5D0: L_08A0F5E0: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F628; } @@ -8396,7 +8414,6 @@ L_08A0F5F4: } L_08A0F5FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49408u << 16u); if (branch_taken) { @@ -8407,9 +8424,7 @@ L_08A0F5FC: L_08A0F60C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F628; } @@ -8433,7 +8448,6 @@ L_08A0F630: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_5 & 49152u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8443,7 +8457,6 @@ L_08A0F648: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0F668; } @@ -8453,7 +8466,6 @@ L_08A0F658: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); ctx.gpr[8] = (aot_gpr_5 & 16383u); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8461,7 +8473,6 @@ L_08A0F658: } L_08A0F668: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F680; } @@ -8471,7 +8482,6 @@ L_08A0F670: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 16383u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8493,11 +8503,9 @@ L_08A0F688: goto L_08A0F690; L_08A0F690: aot_gpr_31 = (0x08A0F698u); - // nop goto L_08A0F178; L_08A0F698: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0F6D4; } @@ -8514,7 +8522,6 @@ L_08A0F6A4: aot_gpr_4 = (aot_gpr_4 & 49152u); aot_gpr_4 = (aot_gpr_4 >> 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8522,11 +8529,9 @@ L_08A0F6A4: } L_08A0F6C4: aot_gpr_31 = (0x08A0F6CCu); - // nop goto L_08A0F1F4; L_08A0F6CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8584,7 +8589,6 @@ L_08A0F700: } L_08A0F76C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16640u << 16u); if (branch_taken) { @@ -8595,9 +8599,7 @@ L_08A0F76C: L_08A0F77C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8613,7 +8615,6 @@ L_08A0F790: } L_08A0F798: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49408u << 16u); if (branch_taken) { @@ -8624,9 +8625,7 @@ L_08A0F798: L_08A0F7A8: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F7C4; } @@ -8645,7 +8644,6 @@ L_08A0F7C4: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0F974; } @@ -8659,7 +8657,6 @@ L_08A0F7D8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); aot_gpr_6 = (aot_gpr_5 & 49152u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A0F974; } @@ -8669,7 +8666,6 @@ L_08A0F7F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0F818; } @@ -8679,7 +8675,6 @@ L_08A0F808: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0)))))); ctx.gpr[8] = (aot_gpr_5 & 16383u); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A0F974; } @@ -8687,7 +8682,6 @@ L_08A0F808: } L_08A0F818: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0F830; } @@ -8697,7 +8691,6 @@ L_08A0F820: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 16383u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A0F974; } @@ -8719,11 +8712,9 @@ L_08A0F838: goto L_08A0F840; L_08A0F840: aot_gpr_31 = (0x08A0F848u); - // nop goto L_08A0F178; L_08A0F848: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A0F884; } @@ -8740,7 +8731,6 @@ L_08A0F854: aot_gpr_4 = (aot_gpr_4 & 49152u); aot_gpr_4 = (aot_gpr_4 >> 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A0F974; } @@ -8748,11 +8738,9 @@ L_08A0F854: } L_08A0F874: aot_gpr_31 = (0x08A0F87Cu); - // nop goto L_08A0F1F4; L_08A0F87C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A0F974; } @@ -8810,7 +8798,6 @@ L_08A0F8B0: } L_08A0F91C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16576u << 16u); if (branch_taken) { @@ -8821,9 +8808,7 @@ L_08A0F91C: L_08A0F92C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F974; } @@ -8839,7 +8824,6 @@ L_08A0F940: } L_08A0F948: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49344u << 16u); if (branch_taken) { @@ -8850,9 +8834,7 @@ L_08A0F948: L_08A0F958: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0F974; } @@ -8887,7 +8869,17 @@ L_08A0F978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A0F9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-1024)); aot_gpr_5 = (16245u << 16u); @@ -8910,7 +8902,6 @@ L_08A0FA00: aot_gpr_5 = (512u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A0FA38; } @@ -8923,7 +8914,6 @@ L_08A0FA14: L_08A0FA1C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A0FA48; } @@ -8931,7 +8921,6 @@ L_08A0FA1C: } L_08A0FA28: aot_gpr_31 = (0x08A0FA30u); - // nop goto L_08A0F284; L_08A0FA30: { const bool branch_taken = 0u == 0u; @@ -8943,7 +8932,6 @@ L_08A0FA30: } L_08A0FA38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 111u, 0x08A110D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8951,7 +8939,6 @@ L_08A0FA38: } L_08A0FA40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 111u, 0x08A110D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8959,7 +8946,6 @@ L_08A0FA40: } L_08A0FA48: aot_gpr_31 = (0x08A0FA50u); - // nop goto L_08A0F2E0; L_08A0FA50: aot_gpr_5 = (ctx.gpr[2] | 0u); @@ -8986,7 +8972,6 @@ L_08A0FA78: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(2))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 7u, 0x08A101B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9092,7 +9077,6 @@ L_08A0FB18: L_08A0FB30: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); goto L_08A0FB44; @@ -9122,7 +9106,6 @@ L_08A0FB50: L_08A0FB68: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); goto L_08A0FB7C; @@ -9152,7 +9135,6 @@ L_08A0FB88: L_08A0FBA0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); goto L_08A0FBB4; @@ -9182,7 +9164,6 @@ L_08A0FBC0: L_08A0FBD8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); goto L_08A0FBEC; @@ -9192,7 +9173,6 @@ L_08A0FBEC: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); ctx.gpr[7] = (static_cast(aot_gpr_6) < 6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A0FB0C; } @@ -9208,7 +9188,6 @@ L_08A0FBFC: } L_08A0FC04: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A0FC7C; } @@ -9266,7 +9245,6 @@ L_08A0FC68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0FDF4; } @@ -9369,7 +9347,6 @@ L_08A0FCB0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 111u, 0x08A110D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9385,7 +9362,6 @@ L_08A0FCFC: } L_08A0FD04: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A0FC7C; } @@ -9443,7 +9419,6 @@ L_08A0FD68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A0FDF4; } @@ -9510,9 +9485,7 @@ L_08A0FDF4: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0FE78; } @@ -9563,9 +9536,7 @@ L_08A0FE78: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A0FF64; } @@ -9653,7 +9624,6 @@ L_08A0FF64: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 3u, 0x08A1004Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; diff --git a/profiles/vcs/generated/generated_unit_0131.cpp b/profiles/vcs/generated/generated_unit_0131.cpp index 739260a..e9f2d06 100644 --- a/profiles/vcs/generated/generated_unit_0131.cpp +++ b/profiles/vcs/generated/generated_unit_0131.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0131[4088] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, - 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, - 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, - 0, 0, 0, 53, 0, 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, - 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, - 77, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, - 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 102, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, - 0, 0, 116, 0, 117, 0, 0, 118, 0, 119, 120, 0, 0, 121, 0, 0, 0, 122, 0, 123, 0, 124, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, - 126, 0, 127, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, - 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 142, 0, 0, 0, 0, 143, - 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, - 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 154, 0, 155, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, - 158, 0, 0, 0, 0, 0, 159, 160, 0, 0, 0, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, - 0, 165, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 169, 170, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, - 175, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 0, - 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 186, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 0, - 197, 0, 0, 198, 0, 0, 0, 0, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 204, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, - 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 215, 0, - 0, 0, 216, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 222, 0, 0, 0, 223, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, - 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 228, 0, 0, 229, 0, 0, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, - 0, 0, 233, 0, 0, 234, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 239, 0, 240, 0, - 0, 0, 0, 0, 0, 241, 0, 242, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 0, 250, 0, 0, 0, 251, 0, - 252, 0, 253, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 256, 0, 257, 0, 258, 0, 0, 0, 0, 0, 0, 259, 260, 0, 0, 0, 0, 0, - 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, - 0, 265, 0, 266, 0, 267, 268, 0, 0, 0, 0, 0, 0, 0, 269, 270, 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, - 0, 279, 0, 280, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 287, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 291, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 297, - 0, 298, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 303, 0, - 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 306, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 311, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 313, 0, 0, 0, 0, 314, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 319, 0, 320, - 0, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 330, 0, 331, 0, 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, - 0, 0, 0, 338, 339, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 348, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, - 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 352, 0, 0, 353, 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, - 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 359, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 363, 0, - 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 0, - 0, 367, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, - 378, 0, 379, 380, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, 0, 0, 0, 385, - 386, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, - 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 0, 404, 0, 405, 0, - 0, 0, 0, 406, 0, 407, 0, 408, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 412, 0, 0, 413, 0, 0, 0, 414, 0, 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, - 420, 0, 0, 0, 0, 0, 421, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, - 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, 0, 0, 431, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, - 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 444, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 447, 448, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, - 0, 0, 451, 0, 0, 0, 452, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, - 0, 0, 0, 458, 459, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 464, - 465, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 469, 0, 0, 0, 0, 0, 470, 471, 0, 0, - 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, 482, 0, 0, 0, 0, 0, 0, 0, - 0, 483, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 0, 0, 487, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 494, 0, 495, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 497, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 503, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 507, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 511, 0, - 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 515, 0, 0, 0, 516, 0, 0, 517, 0, 0, - 0, 518, 0, 519, 0, 520, 0, 521, 522, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 526, 0, - 0, 0, 0, 0, 527, 528, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 531, 0, 0, 532, 0, 533, 0, 0, 0, - 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 0, 0, 537, 0, 0, 0, 0, 538, 0, 0, 0, 0, 539, 0, 540, 0, - 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 0, 545, 0, 546, 0, 0, 0, 0, 547, 0, 0, 0, 0, - 548, 0, 549, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, - 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, - 559, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 562, 0, 563, 564, 0, 0, 565, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 568, 0, - 569, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 572, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 576, - 0, 577, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 0, 580, 0, 581, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, - 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 596, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 600, 0, 0, 601, 0, 602, 0, 0, 0, - 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 607, 0, 608, 0, 609, 610, 0, 0, 0, 0, - 0, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 613, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, 617, 0, 0, 0, 618, 0, 619, - 0, 0, 0, 620, 0, 0, 621, 0, 0, 0, 622, 0, 623, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, - 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, - 0, 637, 0, 638, 0, 639, 0, 0, 0, 0, 640, 0, 641, 0, 0, 0, 0, 642, 0, 643, 644, 0, 645, 0, 0, 0, 0, 0, 646, 0, 647, 0, - 0, 648, 649, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 655, 0, 0, 656, 657, 0, 0, 0, 0, 0, - 0, 658, 0, 659, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 667, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0131[64] = { + 0x20000000000A0001ull, 0xAAA8500001000000ull, 0x082000C104001820ull, 0x1000004001048003ull, + 0x0000002020000008ull, 0x0000004001000000ull, 0x06082AAA10850000ull, 0x8200060820008200ull, + 0x9000410003082000ull, 0x0415550004100020ull, 0x0003041000410003ull, 0x0020800184100041ull, + 0x0000800208001048ull, 0x0818000100000010ull, 0x0000000020200000ull, 0x0000000100050000ull, + 0x0020000000001400ull, 0x082A269448000140ull, 0x8008088480008025ull, 0x1221104884412424ull, + 0x820208C100894842ull, 0x2905110942968142ull, 0x2AAA040004001484ull, 0x444444444446AA09ull, + 0x2000010044444444ull, 0x5420016420064901ull, 0x44820040010484A0ull, 0x2004800106054A05ull, + 0x802240100418C06Aull, 0x000202001200082Aull, 0x9004010200A42009ull, 0x0000082048020812ull, + 0xA840052100324809ull, 0x0012008002090940ull, 0x0841403500000000ull, 0x0048082008900418ull, + 0x0101908040000084ull, 0x4200020900120001ull, 0x0201404A0A000010ull, 0x8240500D48240100ull, + 0x0491200820090041ull, 0x5090041000002401ull, 0x20280689200820A8ull, 0x10040000480020C1ull, + 0x0004480209224010ull, 0x8020C40900415420ull, 0x88900418240500C4ull, 0x1120088830480A01ull, + 0x1030480A01A08008ull, 0x240104400A082240ull, 0x0900420002401000ull, 0x2444800850100400ull, + 0x14901030480A01AAull, 0x0850850850844802ull, 0x4420001009010445ull, 0x90840A414054D0A1ull, + 0x108148280409A142ull, 0x1492020801120080ull, 0x0D44000000900002ull, 0x02891448A2412888ull, + 0x0420000024010008ull, 0x505A142A40100001ull, 0x0642008000400216ull, 0x008210040142002Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0131[64] = { + 1u, 5u, 15u, 24u, 31u, 34u, 36u, 50u, 58u, 66u, 77u, 85u, 93u, 99u, 104u, 106u, + 109u, 112u, 126u, 136u, 151u, 165u, 184u, 197u, 216u, 226u, 241u, 252u, 265u, 279u, 287u, 298u, + 306u, 321u, 330u, 338u, 348u, 356u, 364u, 373u, 386u, 397u, 406u, 420u, 428u, 438u, 451u, 465u, + 478u, 490u, 501u, 508u, 518u, 534u, 548u, 559u, 577u, 592u, 603u, 611u, 628u, 634u, 648u, 658u, }; void recomp_unit_0131_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0131_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A10000u; - entry_id = (entry_delta < 16352u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0131[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16352u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0131[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0131[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A10000; @@ -860,7 +767,6 @@ L_08A10000: AOT_REGCACHE_SYNC_OUT(); return; L_08A10044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A100F4; } @@ -1030,7 +936,6 @@ L_08A10160: AOT_REGCACHE_SYNC_OUT(); return; L_08A101B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A110D4; } @@ -1041,7 +946,6 @@ L_08A101B8: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(4))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A10648; } @@ -1057,7 +961,6 @@ L_08A101CC: } L_08A101D4: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A1033C; } @@ -1065,7 +968,6 @@ L_08A101D4: } L_08A101DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A101FC; } @@ -1081,7 +983,6 @@ L_08A101E4: } L_08A101EC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A102D4; } @@ -1089,7 +990,6 @@ L_08A101EC: } L_08A101F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1033C; } @@ -1190,7 +1090,6 @@ L_08A10230: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10398; } @@ -1291,7 +1190,6 @@ L_08A1029C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10398; } @@ -1391,7 +1289,6 @@ L_08A10304: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10398; } @@ -1484,7 +1381,6 @@ L_08A10360: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A110D4; } @@ -1552,9 +1448,7 @@ L_08A103F0: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A10474; } @@ -1605,9 +1499,7 @@ L_08A10474: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A10560; } @@ -1695,9 +1587,7 @@ L_08A10560: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A10640; } @@ -1750,7 +1640,6 @@ L_08A10598: AOT_REGCACHE_SYNC_OUT(); return; L_08A10640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A110D4; } @@ -1761,7 +1650,6 @@ L_08A10648: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(6))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A10670; } @@ -1772,7 +1660,6 @@ L_08A1065C: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(8))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A110D4; } @@ -1783,7 +1670,6 @@ L_08A10670: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[6] = (aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(6))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A109A0; } @@ -1799,7 +1685,6 @@ L_08A10684: } L_08A1068C: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A108F0; } @@ -1807,7 +1692,6 @@ L_08A1068C: } L_08A10694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A106B4; } @@ -1823,7 +1707,6 @@ L_08A1069C: } L_08A106A4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A10834; } @@ -1831,7 +1714,6 @@ L_08A106A4: } L_08A106AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A108F0; } @@ -2017,7 +1899,6 @@ L_08A1073C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10CBC; } @@ -2203,7 +2084,6 @@ L_08A107FC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10CBC; } @@ -2388,7 +2268,6 @@ L_08A108B8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10CBC; } @@ -2568,7 +2447,6 @@ L_08A10968: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A110D4; } @@ -2584,7 +2462,6 @@ L_08A109A0: } L_08A109A8: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A10C0C; } @@ -2592,7 +2469,6 @@ L_08A109A8: } L_08A109B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A109D0; } @@ -2608,7 +2484,6 @@ L_08A109B8: } L_08A109C0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A10B50; } @@ -2616,7 +2491,6 @@ L_08A109C0: } L_08A109C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10C0C; } @@ -2802,7 +2676,6 @@ L_08A10A58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10CBC; } @@ -2988,7 +2861,6 @@ L_08A10B18: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10CBC; } @@ -3173,7 +3045,6 @@ L_08A10BD4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A10CBC; } @@ -3353,7 +3224,6 @@ L_08A10C84: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A110D4; } @@ -3421,7 +3291,6 @@ L_08A10CBC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_08A10DD0; } @@ -3552,9 +3421,7 @@ L_08A10DD0: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A10E54; } @@ -3605,9 +3472,7 @@ L_08A10E54: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A10F40; } @@ -3669,7 +3534,6 @@ L_08A10E74: AOT_REGCACHE_SYNC_OUT(); return; L_08A10F40: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_08A110D4; } @@ -3703,7 +3567,6 @@ L_08A10F48: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); goto L_08A11030; @@ -3756,7 +3619,6 @@ L_08A10F80: AOT_REGCACHE_SYNC_OUT(); return; L_08A11028: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A110D4; } @@ -3830,14 +3692,33 @@ L_08A110D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11118: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11120: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, aot_gpr_31}; @@ -3856,7 +3737,6 @@ L_08A11120: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9752), 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9756), 0u); aot_gpr_31 = (0x08A1116Cu); - // nop goto L_08A11118; L_08A1116C: aot_gpr_4 = (2279u << 16u); @@ -3873,13 +3753,11 @@ L_08A11178: AOT_REGCACHE_SYNC_OUT(); return; L_08A11188: aot_gpr_31 = (0x08A11190u); - // nop ctx.pc = 0x08B734D4u; AOT_REGCACHE_SYNC_OUT(); return; L_08A11190: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-8136), ctx.gpr[2]); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A111A8; } @@ -3887,7 +3765,6 @@ L_08A11190: } L_08A1119C: aot_gpr_31 = (0x08A111A4u); - // nop ctx.pc = 0x08B73504u; AOT_REGCACHE_SYNC_OUT(); return; L_08A111A4: @@ -3896,7 +3773,6 @@ L_08A111A4: L_08A111A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A111EC; } @@ -3906,7 +3782,6 @@ L_08A111B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8136))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A111CC; } @@ -3918,7 +3793,6 @@ L_08A111C4: goto L_08A111CC; L_08A111CC: aot_gpr_31 = (0x08A111D4u); - // nop ctx.pc = 0x08B7308Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A111D4: @@ -3941,14 +3815,33 @@ L_08A111EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11200: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11208: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); jump_target = aot_gpr_31; @@ -3956,7 +3849,17 @@ L_08A11208: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11214: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, aot_gpr_31}; @@ -3983,7 +3886,6 @@ L_08A1123C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7664))); aot_gpr_4 = (16128u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4011,7 +3913,6 @@ L_08A1129C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9752), aot_gpr_4); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A112CC; } @@ -4039,7 +3940,6 @@ L_08A112CC: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7713))); ctx.gpr[7] = (ctx.gpr[7] | ctx.gpr[8]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A11328; } @@ -4084,7 +3984,6 @@ L_08A11340: { const float fs = aot_fpr_14; const float ft = aot_fpr_16; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_16 = std::bit_cast(0x7FC00000u); else aot_fpr_16 = fs * ft; } aot_fpr_16 = aot_fpr_16 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_16 = aot_fpr_16 - aot_fpr_13; goto L_08A11368; @@ -4126,7 +4025,6 @@ L_08A11398: { const float fs = aot_fpr_14; const float ft = aot_fpr_16; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_16 = std::bit_cast(0x7FC00000u); else aot_fpr_16 = fs * ft; } aot_fpr_12 = aot_fpr_16 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_08A113C0; @@ -4169,14 +4067,11 @@ L_08A113F0: aot_fpr_12 = aot_fpr_12 / ctx.fpr[15]; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7676), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A11404u); - // nop goto L_08A11118; L_08A11404: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A11440; } @@ -4187,7 +4082,6 @@ L_08A11418: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7713))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A11440; } @@ -4196,7 +4090,6 @@ L_08A11418: L_08A1142C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A11440; } @@ -4209,13 +4102,11 @@ L_08A11438: L_08A11440: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7684), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A1144Cu); - // nop goto L_08A11118; L_08A1144C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9296)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1149C; } @@ -4228,7 +4119,6 @@ L_08A1145C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A11480; @@ -4251,7 +4141,6 @@ L_08A1149C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7892))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A114C4; } @@ -4280,14 +4169,23 @@ L_08A114C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A114E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6904))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(6904), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A114FC; } @@ -4295,17 +4193,25 @@ L_08A114E4: } L_08A114FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11504: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6904))); aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(6904), aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A11518; } @@ -4313,19 +4219,26 @@ L_08A11504: } L_08A11518: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11520: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7672))); aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A11544; } @@ -4344,11 +4257,20 @@ L_08A11544: goto L_08A11548; L_08A11548: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11550: aot_gpr_4 = (0u | 1u); jump_target = aot_gpr_31; @@ -4356,14 +4278,34 @@ L_08A11550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1155C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8360), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11564: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4384,7 +4326,17 @@ L_08A11580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1158C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), ctx.gpr[6]); @@ -4394,7 +4346,17 @@ L_08A1158C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A115A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4409,14 +4371,34 @@ L_08A115B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A115C0: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A115C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4429,7 +4411,6 @@ L_08A115C8: L_08A115E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A115F4; } @@ -4437,7 +4418,6 @@ L_08A115E0: } L_08A115EC: aot_gpr_31 = (0x08A115F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0055_entry, 55u, 45u, 0x088E1B80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A115F4u) goto L_08A115F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A115F4: @@ -4449,7 +4429,17 @@ L_08A115F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11608: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(24), aot_run_words); } @@ -4458,7 +4448,17 @@ L_08A11608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1161C: ctx.gpr[6] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; @@ -4490,7 +4490,17 @@ L_08A11630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11668: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); ctx.gpr[6] = (ctx.gpr[6] << 2u); @@ -4511,7 +4521,17 @@ L_08A11668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A116A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4519,7 +4539,6 @@ L_08A116A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A116CC; } @@ -4535,12 +4554,10 @@ L_08A116C4: } L_08A116CC: aot_gpr_31 = (0x08A116D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0055_entry, 55u, 42u, 0x088E1B54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A116D4u) goto L_08A116D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A116D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A116EC; } @@ -4553,7 +4570,6 @@ L_08A116DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A116E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A116F4; } @@ -4593,7 +4609,6 @@ L_08A1170C: } L_08A11724: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A11734; } @@ -4609,7 +4624,6 @@ L_08A1172C: } L_08A11734: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A11744; } @@ -4634,7 +4648,17 @@ L_08A11748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11758: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4650,7 +4674,17 @@ L_08A11768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11778: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4666,7 +4700,17 @@ L_08A11788: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4682,7 +4726,17 @@ L_08A117A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A117B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4698,7 +4752,17 @@ L_08A117C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A117D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4714,7 +4778,17 @@ L_08A117E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A117F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4730,7 +4804,17 @@ L_08A11808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11818: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4746,7 +4830,17 @@ L_08A11828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4762,7 +4856,17 @@ L_08A11848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11858: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4778,7 +4882,17 @@ L_08A11868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11878: { const std::uint32_t vfpu_address = ctx.gpr[6] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4832,11 +4946,20 @@ L_08A11878: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A118A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4855,7 +4978,6 @@ L_08A118A0: L_08A118F4: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(29704))); { const bool branch_taken = static_cast(ctx.gpr[22]) >= 0; - // nop if (branch_taken) { goto L_08A11920; } @@ -4907,7 +5029,6 @@ L_08A11948: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(aot_fpr_12)) && ctx.fpr[20] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -4918,9 +5039,7 @@ L_08A11948: L_08A11974: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A11998; } @@ -5018,7 +5137,6 @@ L_08A11A28: L_08A11A3C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A11A60; } @@ -5054,7 +5172,17 @@ L_08A11A60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11A98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5073,7 +5201,6 @@ L_08A11AC4: aot_gpr_4 = (aot_gpr_4 + static_cast(-8960)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A11B00; } @@ -5089,7 +5216,6 @@ L_08A11AE8: aot_gpr_17 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A11B08; } @@ -5097,7 +5223,6 @@ L_08A11AE8: } L_08A11AF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A11B24; } @@ -5123,7 +5248,6 @@ L_08A11B08: AOT_REGCACHE_SYNC_OUT(); return; L_08A11B24: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A11B64; } @@ -5142,7 +5266,6 @@ L_08A11B38: AOT_REGCACHE_SYNC_OUT(); return; L_08A11B40: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A11B64; } @@ -5176,7 +5299,17 @@ L_08A11B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11B80: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5205,7 +5338,6 @@ L_08A11BC8: ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_gpr_4 = (17332u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5215,9 +5347,7 @@ L_08A11BC8: } L_08A11BF4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A11C0C; } @@ -5233,7 +5363,6 @@ L_08A11C04: } L_08A11C0C: aot_gpr_31 = (0x08A11C14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A11C14u) goto L_08A11C14; AOT_REGCACHE_SYNC_OUT(); return; L_08A11C14: @@ -5245,9 +5374,7 @@ L_08A11C18: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A11C3C; } @@ -5258,9 +5385,7 @@ L_08A11C38: goto L_08A11C3C; L_08A11C3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A11C50; } @@ -5295,7 +5420,17 @@ L_08A11C68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5362,7 +5497,17 @@ L_08A11D14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5425,7 +5570,17 @@ L_08A11DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11DC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5456,7 +5611,6 @@ L_08A11E0C: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -5467,7 +5621,6 @@ L_08A11E0C: L_08A11E34: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A11E5C; @@ -5523,7 +5676,17 @@ L_08A11EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11EC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5550,7 +5713,6 @@ L_08A11EFC: L_08A11F04: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A11F2C; } @@ -5579,7 +5741,17 @@ L_08A11F2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11F44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5621,7 +5793,17 @@ L_08A11F94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A11FAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -5640,7 +5822,6 @@ L_08A11FAC: L_08A12000: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(29704))); { const bool branch_taken = static_cast(ctx.gpr[22]) >= 0; - // nop if (branch_taken) { goto L_08A1202C; } @@ -5692,7 +5873,6 @@ L_08A12054: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -5703,7 +5883,6 @@ L_08A12054: L_08A12080: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A120A8; @@ -5796,7 +5975,6 @@ L_08A1212C: L_08A12140: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12164; } @@ -5832,7 +6010,17 @@ L_08A12164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1219C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5990,7 +6178,6 @@ L_08A12280: goto L_08A12288; L_08A12288: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A12294; } @@ -6053,7 +6240,6 @@ L_08A122EC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12310; } @@ -6075,7 +6261,17 @@ L_08A12310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12328: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6129,7 +6325,17 @@ L_08A12394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A123AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6171,7 +6377,17 @@ L_08A12408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1241C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[12]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -6195,7 +6411,6 @@ L_08A12478: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -6206,9 +6421,7 @@ L_08A12478: L_08A1249C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A124C0; } @@ -6231,7 +6444,6 @@ L_08A124C0: ctx.gpr[18] = (0u | 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); { const bool branch_taken = static_cast(ctx.gpr[19]) >= 0; - // nop if (branch_taken) { goto L_08A12500; } @@ -6269,7 +6481,6 @@ L_08A12500: L_08A12544: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A12580; } @@ -6292,7 +6503,6 @@ L_08A12550: L_08A12580: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A125E4; } @@ -6410,9 +6620,7 @@ L_08A12610: ctx.gpr[10] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1266C; } @@ -6428,7 +6636,6 @@ L_08A1266C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A12610; } @@ -6436,7 +6643,6 @@ L_08A1266C: } L_08A12684: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A126E4; } @@ -6445,7 +6651,6 @@ L_08A12684: L_08A1268C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A126C0; } @@ -6464,7 +6669,6 @@ L_08A12698: AOT_REGCACHE_SYNC_OUT(); return; L_08A126B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A126E4; } @@ -6504,7 +6708,17 @@ L_08A126E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12720: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6554,7 +6768,6 @@ L_08A12778: } L_08A12780: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1278C; } @@ -6615,7 +6828,6 @@ L_08A127E4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12800; } @@ -6637,7 +6849,17 @@ L_08A12800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12818: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6685,7 +6907,17 @@ L_08A12874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1288C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6741,7 +6973,17 @@ L_08A128E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12900: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6813,7 +7055,17 @@ L_08A12990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A129A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6845,7 +7097,6 @@ L_08A129DC: } L_08A129F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12A34; } @@ -6861,7 +7112,6 @@ L_08A129F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A12A0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A12A34; } @@ -6869,7 +7119,6 @@ L_08A12A0C: } L_08A12A14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A12A34; } @@ -6897,7 +7146,17 @@ L_08A12A34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12A4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6919,7 +7178,6 @@ L_08A12A74: L_08A12A80: aot_gpr_4 = (0u | 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A12AA8; } @@ -6937,7 +7195,6 @@ L_08A12A8C: } L_08A12A9C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A12AA8; } @@ -6998,7 +7255,6 @@ L_08A12B00: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12B1C; } @@ -7020,7 +7276,17 @@ L_08A12B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12B34: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7151,7 +7417,17 @@ L_08A12BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12C10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7207,7 +7483,17 @@ L_08A12C6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12C84: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7305,7 +7591,17 @@ L_08A12D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12D58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7363,7 +7659,17 @@ L_08A12DBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12DD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7386,7 +7692,6 @@ L_08A12E08: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(310))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A12E1C; } @@ -7447,7 +7752,6 @@ L_08A12E74: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12E90; } @@ -7469,7 +7773,17 @@ L_08A12E90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7492,7 +7806,6 @@ L_08A12EDC: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A12F00; } @@ -7502,7 +7815,6 @@ L_08A12EEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A12F00; } @@ -7563,7 +7875,6 @@ L_08A12F58: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A12F74; } @@ -7585,7 +7896,17 @@ L_08A12F74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12F8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7601,7 +7922,17 @@ L_08A12F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A12FAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7641,7 +7972,17 @@ L_08A12FF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1300C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7661,12 +8002,10 @@ L_08A1303C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_gpr_17 = (0u | 0u); aot_gpr_31 = (0x08A13054u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 605u, 0x08827F00u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A13054u) goto L_08A13054; AOT_REGCACHE_SYNC_OUT(); return; L_08A13054: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A13060; } @@ -7727,7 +8066,6 @@ L_08A130B8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A130D4; } @@ -7750,7 +8088,17 @@ L_08A130D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A130F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7802,7 +8150,6 @@ L_08A1314C: AOT_REGCACHE_SYNC_OUT(); return; L_08A13164: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A13198; } @@ -7843,7 +8190,17 @@ L_08A131A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A131C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7884,7 +8241,17 @@ L_08A131F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13230: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7951,7 +8318,17 @@ L_08A132A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A132B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7983,9 +8360,7 @@ L_08A132EC: aot_gpr_5 = (aot_gpr_5 | 20224u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13350; } @@ -8037,7 +8412,17 @@ L_08A13378: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1338C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8080,7 +8465,6 @@ L_08A133D8: L_08A133E8: aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A13414; } @@ -8095,7 +8479,6 @@ L_08A133F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A13404: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A13420; } @@ -8111,7 +8494,6 @@ L_08A1340C: } L_08A13414: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A13420; } @@ -8172,7 +8554,6 @@ L_08A13478: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A13494; } @@ -8195,7 +8576,17 @@ L_08A13494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A134B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8216,7 +8607,6 @@ L_08A134D0: L_08A134DC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A134F0; } @@ -8235,7 +8625,17 @@ L_08A134F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8284,7 +8684,6 @@ L_08A1355C: goto L_08A13570; L_08A13570: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08A1358C; } @@ -8310,7 +8709,6 @@ L_08A1358C: goto L_08A135A0; L_08A135A0: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08A135BC; } @@ -8336,7 +8734,6 @@ L_08A135BC: goto L_08A135D0; L_08A135D0: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08A135EC; } @@ -8362,7 +8759,6 @@ L_08A135EC: goto L_08A13600; L_08A13600: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A13618; } @@ -8397,7 +8793,17 @@ L_08A13628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13640: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8428,7 +8834,17 @@ L_08A1366C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13690: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -8462,7 +8878,6 @@ L_08A136E8: goto L_08A136F8; L_08A136F8: { const bool branch_taken = static_cast(ctx.gpr[21]) < 0; - // nop if (branch_taken) { goto L_08A13714; } @@ -8508,7 +8923,6 @@ L_08A13738: L_08A1373C: ctx.gpr[20] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A137C8; } @@ -8521,7 +8935,6 @@ L_08A13748: AOT_REGCACHE_SYNC_OUT(); return; L_08A13750: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A137C8; } @@ -8543,7 +8956,6 @@ L_08A13758: AOT_REGCACHE_SYNC_OUT(); return; L_08A13778: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A137C8; } @@ -8568,7 +8980,6 @@ L_08A13798: AOT_REGCACHE_SYNC_OUT(); return; L_08A137A4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A137C8; } @@ -8615,7 +9026,6 @@ L_08A137F0: goto L_08A137FC; L_08A137FC: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08A13818; } @@ -8661,7 +9071,6 @@ L_08A1383C: L_08A13840: aot_gpr_4 = (ctx.gpr[20] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A138DC; } @@ -8674,7 +9083,6 @@ L_08A1384C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A138DC; } @@ -8697,7 +9105,6 @@ L_08A13868: AOT_REGCACHE_SYNC_OUT(); return; L_08A1388C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A138DC; } @@ -8722,7 +9129,6 @@ L_08A138AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A138B8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A138DC; } @@ -8769,7 +9175,17 @@ L_08A138F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1391C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8824,7 +9240,17 @@ L_08A1398C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A139A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8845,7 +9271,6 @@ L_08A139C4: L_08A139D0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A139F0; } @@ -8854,7 +9279,6 @@ L_08A139D0: L_08A139DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(448))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A139F0; } @@ -8862,7 +9286,6 @@ L_08A139DC: } L_08A139E8: aot_gpr_31 = (0x08A139F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0009_entry, 9u, 435u, 0x0882BBD0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A139F0u) goto L_08A139F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A139F0: @@ -8874,7 +9297,17 @@ L_08A139F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13A04: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -8922,7 +9355,6 @@ L_08A13A5C: ctx.fpr[24] = std::bit_cast(0u); aot_gpr_4 = (17332u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8932,9 +9364,7 @@ L_08A13A5C: } L_08A13AC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13AE0; } @@ -8950,7 +9380,6 @@ L_08A13AD8: } L_08A13AE0: aot_gpr_31 = (0x08A13AE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A13AE8u) goto L_08A13AE8; AOT_REGCACHE_SYNC_OUT(); return; L_08A13AE8: @@ -8962,7 +9391,6 @@ L_08A13AEC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); if (branch_taken) { @@ -8972,9 +9400,7 @@ L_08A13AEC: } L_08A13B0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13B2C; } @@ -8992,7 +9418,6 @@ L_08A13B1C: } L_08A13B2C: aot_gpr_31 = (0x08A13B34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A13B34u) goto L_08A13B34; AOT_REGCACHE_SYNC_OUT(); return; L_08A13B34: @@ -9004,9 +9429,7 @@ L_08A13B40: ctx.fpr[22] = ctx.fpr[20] / ctx.fpr[22]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13B64; } @@ -9023,9 +9446,7 @@ L_08A13B58: } L_08A13B64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13B7C; } @@ -9037,9 +9458,7 @@ L_08A13B74: goto L_08A13B7C; L_08A13B7C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13B98; } @@ -9056,9 +9475,7 @@ L_08A13B8C: } L_08A13B98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13BB0; } @@ -9070,9 +9487,7 @@ L_08A13BA8: goto L_08A13BB0; L_08A13BB0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13BCC; } @@ -9089,9 +9504,7 @@ L_08A13BC0: } L_08A13BCC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13BE4; } @@ -9134,7 +9547,17 @@ L_08A13C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13C40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -9215,7 +9638,17 @@ L_08A13CE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13D00: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -9254,7 +9687,6 @@ L_08A13D78: } L_08A13D84: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A13E10; } @@ -9307,7 +9739,6 @@ L_08A13DCC: goto L_08A13DD0; L_08A13DD0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A13E08; } @@ -9327,7 +9758,6 @@ L_08A13DD8: AOT_REGCACHE_SYNC_OUT(); return; L_08A13DF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A13E08; } @@ -9378,7 +9808,17 @@ L_08A13E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13E58: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -9404,7 +9844,6 @@ L_08A13E9C: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -9415,9 +9854,7 @@ L_08A13E9C: L_08A13EC4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A13EE8; } @@ -9447,7 +9884,6 @@ L_08A13EE8: } L_08A13F04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A13F14; } @@ -9505,7 +9941,17 @@ L_08A13F60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13F88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -9539,7 +9985,17 @@ L_08A13FC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A13FDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0132.cpp b/profiles/vcs/generated/generated_unit_0132.cpp index 5920821..ad5d764 100644 --- a/profiles/vcs/generated/generated_unit_0132.cpp +++ b/profiles/vcs/generated/generated_unit_0132.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0132[4082] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 6, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 0, 0, 0, 0, 15, 16, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 29, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, - 0, 34, 0, 0, 0, 35, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, - 0, 0, 0, 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, - 50, 0, 0, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, - 57, 0, 58, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, - 0, 0, 0, 74, 0, 0, 0, 75, 0, 76, 0, 0, 77, 0, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 81, 0, 0, 0, 0, 0, - 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 84, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 90, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 94, 95, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 98, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 110, 0, 111, 112, 0, 113, 114, 0, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 118, 0, 0, 0, 0, 0, 119, 0, - 0, 120, 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 123, 0, 0, 0, 124, 0, 125, 0, 126, 0, 0, 0, 127, 0, 128, 129, 0, 0, 0, 0, - 130, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 0, - 0, 0, 0, 0, 0, 137, 0, 138, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, 0, 144, - 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 150, 0, 151, 0, - 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 155, 156, 0, 157, 0, 158, 0, 0, 0, 159, 0, 160, 0, 161, 0, 0, 0, 162, 163, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, - 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 169, 0, 0, 0, 170, 0, 0, 171, 0, 172, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, - 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 183, 0, 0, - 0, 0, 184, 0, 0, 0, 185, 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 192, 193, - 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 196, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 200, 0, 0, 0, 0, 201, 0, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 207, 0, 208, - 209, 0, 0, 0, 0, 210, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 0, 215, 0, 0, 0, - 0, 0, 216, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, - 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 225, 226, 0, 227, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 233, 234, 0, 0, 0, 0, 0, - 0, 235, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 239, 240, 0, 0, 0, 241, 0, 0, 242, 0, - 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 0, - 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, - 258, 259, 0, 0, 0, 260, 0, 0, 0, 261, 0, 0, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 265, 266, 0, 0, 0, 267, 0, 0, - 0, 268, 0, 0, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 272, 273, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, - 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 282, 0, 0, 0, 0, 283, - 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 0, - 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 299, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 305, 0, 306, 307, 0, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, - 0, 0, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 312, 313, 0, 0, 0, 314, 0, 0, 315, 0, 316, 317, 0, 0, 318, 0, - 0, 319, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, - 323, 0, 324, 0, 325, 0, 326, 0, 0, 0, 0, 327, 0, 328, 0, 329, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 332, 0, 0, 333, 0, - 0, 334, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 344, 345, 0, 346, 0, - 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, - 0, 0, 0, 352, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 356, 0, 0, 0, 0, 357, 0, - 0, 0, 358, 0, 0, 0, 0, 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 362, 0, 0, 0, - 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, - 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 372, 0, 373, 0, 0, - 0, 0, 374, 0, 375, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 380, 381, 0, 0, 0, 382, 0, 0, 0, - 383, 0, 0, 0, 0, 384, 0, 385, 386, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 392, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, - 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 402, 403, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 0, 407, 0, 408, 0, 0, 0, 0, 409, 0, 0, 410, 0, 0, - 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 416, 0, 417, 0, 418, 0, 0, - 0, 0, 419, 0, 420, 0, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 427, 0, - 0, 0, 428, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 431, 432, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, - 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 438, 0, 439, 0, 0, 0, 0, 440, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 444, 445, 0, 0, 0, 446, 0, 447, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 450, - 0, 0, 451, 0, 0, 0, 452, 0, 453, 0, 454, 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, - 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 0, 460, 0, 461, 0, 0, 0, 462, 0, 463, 0, 0, 0, 0, 0, 464, 0, 465, 0, - 0, 0, 466, 0, 467, 0, 0, 0, 468, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 477, 478, 0, 479, 0, 0, 0, 0, - 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, - 487, 488, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 505, - 0, 0, 0, 0, 506, 0, 0, 507, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, - 0, 0, 511, 0, 512, 513, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 0, - 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 523, 0, 524, 0, 525, 0, 0, 0, 0, 526, 0, 0, 527, 0, - 528, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, 538, - 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, - 0, 542, 543, 0, 0, 0, 544, 0, 0, 0, 545, 546, 0, 547, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 0, 551, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 0, 557, 0, 558, 0, 0, 0, 559, 560, 0, 0, 0, - 0, 0, 561, 0, 0, 0, 0, 562, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, 0, - 568, 0, 0, 0, 0, 569, 0, 570, 0, 571, 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, 574, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 582, - 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 590, 0, 591, - 0, 0, 0, 592, 0, 593, 0, 594, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 597, 0, 598, 0, 0, 599, 0, 0, 600, 0, 601, 0, 602, 0, 603, 0, 0, 604, 0, 0, 605, 0, - 0, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, 608, 0, 609, 0, 0, 0, 0, 610, 0, 611, 0, 612, 0, 0, 613, 0, 614, 0, 615, 0, 616, - 0, 0, 617, 0, 0, 0, 0, 0, 618, 0, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 623, 0, - 0, 0, 624, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 632, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, - 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 644, 0, 645, 0, 0, 646, 0, 0, 647, 0, 0, 0, 648, - 0, 0, 0, 649, 0, 0, 0, 0, 0, 650, 0, 651, 0, 652, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 655, 0, 656, 0, 657, 0, 658, 0, - 0, 659, 0, 660, 0, 661, 0, 0, 662, 0, 0, 663, 0, 0, 664, 0, 665, 666, 0, 667, 0, 668, 0, 0, 0, 669, 0, 0, 0, 0, 670, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0132[64] = { + 0x0401030480A00009ull, 0x0011200830480A00ull, 0x2002000048021402ull, 0x480A01A224002041ull, + 0x0802000041202030ull, 0x1420003503210019ull, 0x9004441002240100ull, 0x000418240500D288ull, + 0x0350321001908020ull, 0x0000809010014200ull, 0x414090DA20012000ull, 0x000042010D151122ull, + 0x2082080000000000ull, 0x50421410850421A0ull, 0x500C545640000108ull, 0x000020000A460210ull, + 0x2888002842001200ull, 0x10C42888C42888C4ull, 0x0000000000000001ull, 0x10850421A0208208ull, + 0x5640000108504214ull, 0x48C0420A06842100ull, 0x0001200000010001ull, 0x10A2200A10800042ull, + 0x044310A22310A223ull, 0x2000000000000000ull, 0x5042141086808208ull, 0x0159000004214108ull, + 0x4D230108281A1084ull, 0x4888A8554010000Aull, 0x5884888000848202ull, 0x428000A880032010ull, + 0x0400842810801084ull, 0x11850A1428442002ull, 0x2401A048004021A1ull, 0x2428448C40A10024ull, + 0x44850A142A841024ull, 0x40242A2410058444ull, 0x0804854484346100ull, 0x240A051450514410ull, + 0x004200080B042200ull, 0x0401082305000081ull, 0x0030002100001620ull, 0x20021090C0802200ull, + 0x4855000414494234ull, 0x40001010A4410555ull, 0x18A5540044222C46ull, 0x085422A110904284ull, + 0x0000000000000040ull, 0x0000000000000000ull, 0x8450000000000004ull, 0x0000000000000002ull, + 0x0000000000000000ull, 0x0000222000000000ull, 0x0000000000002000ull, 0x0000000000000000ull, + 0xA800000000000010ull, 0x49549500000004A8ull, 0x50082904AA542842ull, 0x0045040000002204ull, + 0x0000008800100000ull, 0x8010010000900900ull, 0x55282A0889290810ull, 0x00021000422B492Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0132[64] = { + 1u, 11u, 21u, 29u, 42u, 50u, 64u, 74u, 87u, 100u, 107u, 120u, 133u, 137u, 152u, 166u, + 174u, 184u, 202u, 203u, 216u, 229u, 243u, 247u, 258u, 276u, 277u, 291u, 302u, 319u, 334u, 347u, + 358u, 368u, 383u, 396u, 411u, 428u, 443u, 458u, 474u, 483u, 493u, 501u, 511u, 528u, 542u, 561u, + 577u, 578u, 578u, 583u, 584u, 584u, 587u, 588u, 588u, 592u, 606u, 624u, 631u, 634u, 641u, 659u, }; void recomp_unit_0132_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0132_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A14000u; - entry_id = (entry_delta < 16328u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0132[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16328u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0132[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0132[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A14000; @@ -910,7 +817,6 @@ L_08A14088: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A140A4; } @@ -933,7 +839,17 @@ L_08A140A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A140C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1004,7 +920,6 @@ L_08A14158: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A14174; } @@ -1026,7 +941,17 @@ L_08A14174: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1418C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1049,7 +974,6 @@ L_08A141C0: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A14204; } @@ -1105,7 +1029,17 @@ L_08A14230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14244: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1150,7 +1084,17 @@ L_08A14278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A142C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1193,7 +1137,17 @@ L_08A14318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14334: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1229,7 +1183,6 @@ L_08A14384: AOT_REGCACHE_SYNC_OUT(); return; L_08A14394: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A143A0; } @@ -1290,7 +1243,6 @@ L_08A143F8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A14414; } @@ -1314,7 +1266,17 @@ L_08A14414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14434: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1342,7 +1304,17 @@ L_08A14460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14478: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1368,7 +1340,6 @@ L_08A144C4: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_12)) && ctx.fpr[26] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -1379,9 +1350,7 @@ L_08A144C4: L_08A144EC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14510; } @@ -1409,7 +1378,6 @@ L_08A14510: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -1420,9 +1388,7 @@ L_08A14510: L_08A14540: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14564; } @@ -1518,7 +1484,17 @@ L_08A145F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14620: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1573,12 +1549,21 @@ L_08A14690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A146A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A146B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 597u, 0x08A139A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A146B8u) goto L_08A146B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A146B8: @@ -1589,7 +1574,17 @@ L_08A146B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A146C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1612,7 +1607,6 @@ L_08A146FC: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A14738; } @@ -1630,7 +1624,6 @@ L_08A1470C: } L_08A1471C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A14738; } @@ -1639,7 +1632,6 @@ L_08A1471C: L_08A14724: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(478)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A1473C; } @@ -1708,7 +1700,6 @@ L_08A14794: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A147B0; } @@ -1730,7 +1721,17 @@ L_08A147B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A147C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1756,7 +1757,6 @@ L_08A14814: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_12)) && ctx.fpr[26] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -1767,9 +1767,7 @@ L_08A14814: L_08A1483C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14860; } @@ -1797,7 +1795,6 @@ L_08A14860: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -1808,9 +1805,7 @@ L_08A14860: L_08A14890: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A148B4; } @@ -1906,7 +1901,17 @@ L_08A14940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14970: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1936,7 +1941,17 @@ L_08A1499C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A149BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[15]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1974,7 +1989,6 @@ L_08A14A40: aot_gpr_4 = (16457u << 16u); aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(ctx.fpr[20])) && ctx.fpr[26] == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1984,7 +1998,6 @@ L_08A14A40: } L_08A14A74: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A14A90; @@ -2012,9 +2025,7 @@ L_08A14A98: L_08A14A9C: ctx.fpr[26] = ctx.fpr[26] / ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14ABC; } @@ -2030,9 +2041,7 @@ L_08A14ABC: ctx.fpr[28] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[26])) && ctx.fpr[28] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14AE0; } @@ -2050,9 +2059,7 @@ L_08A14AE0: aot_fpr_13 = ctx.fpr[28] - ctx.fpr[26]; aot_fpr_14 = ctx.fpr[26] - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14B04; } @@ -2065,9 +2072,7 @@ L_08A14AF8: goto L_08A14B04; L_08A14B04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14B20; } @@ -2080,9 +2085,7 @@ L_08A14B14: goto L_08A14B20; L_08A14B20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14B50; } @@ -2090,9 +2093,7 @@ L_08A14B20: } L_08A14B30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14B48; } @@ -2116,9 +2117,7 @@ L_08A14B48: } L_08A14B50: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14B68; } @@ -2140,7 +2139,6 @@ L_08A14B6C: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A14E88; } @@ -2408,7 +2406,6 @@ L_08A14D1C: L_08A14D20: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08A14D34; @@ -2417,7 +2414,6 @@ L_08A14D20: L_08A14D34: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08A14D48; @@ -2427,7 +2423,6 @@ L_08A14D48: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); goto L_08A14D68; @@ -2444,7 +2439,6 @@ L_08A14D60: L_08A14D68: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08A14D7C; @@ -2453,7 +2447,6 @@ L_08A14D68: L_08A14D7C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08A14D90; @@ -2463,7 +2456,6 @@ L_08A14D90: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); goto L_08A14DB0; @@ -2480,7 +2472,6 @@ L_08A14DA8: L_08A14DB0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08A14DC4; @@ -2489,7 +2480,6 @@ L_08A14DB0: L_08A14DC4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_08A14DD8; @@ -2499,7 +2489,6 @@ L_08A14DD8: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); goto L_08A14DF8; @@ -2516,7 +2505,6 @@ L_08A14DF0: L_08A14DF8: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08A14E0C; @@ -2525,7 +2513,6 @@ L_08A14DF8: L_08A14E0C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_08A14E20; @@ -2559,7 +2546,6 @@ L_08A14E20: L_08A14E78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A14E88; } @@ -2570,7 +2556,6 @@ L_08A14E84: goto L_08A14E88; L_08A14E88: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A14E98; } @@ -2603,9 +2588,7 @@ L_08A14EB0: AOT_REGCACHE_SYNC_OUT(); return; L_08A14EB8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[26])) && ctx.fpr[28] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A14ECC; } @@ -2668,7 +2651,6 @@ L_08A14F24: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A14F48; } @@ -2681,7 +2663,6 @@ L_08A14F48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A14F6C; } @@ -2690,7 +2671,6 @@ L_08A14F48: L_08A14F58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A14F6C; } @@ -2726,7 +2706,17 @@ L_08A14F6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A14FB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2778,9 +2768,7 @@ L_08A15030: } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15094; } @@ -2789,9 +2777,7 @@ L_08A15030: L_08A15064: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15094; } @@ -2800,9 +2786,7 @@ L_08A15064: L_08A15078: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15094; } @@ -2831,9 +2815,7 @@ L_08A15094: } ctx.fpr[18] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A150F4; } @@ -2841,9 +2823,7 @@ L_08A15094: } L_08A150CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A150EC; } @@ -2870,9 +2850,7 @@ L_08A150EC: L_08A150F4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15118; } @@ -2893,9 +2871,7 @@ L_08A15118: goto L_08A1511C; L_08A1511C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15154; } @@ -2903,9 +2879,7 @@ L_08A1511C: } L_08A1512C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1514C; } @@ -2932,9 +2906,7 @@ L_08A1514C: L_08A15154: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15178; } @@ -2955,9 +2927,7 @@ L_08A15178: goto L_08A1517C; L_08A1517C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A151B4; } @@ -2965,9 +2935,7 @@ L_08A1517C: } L_08A1518C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A151AC; } @@ -2994,9 +2962,7 @@ L_08A151AC: L_08A151B4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A151D8; } @@ -3020,7 +2986,6 @@ L_08A151DC: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A154E8; } @@ -3245,7 +3210,6 @@ L_08A15354: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(272))); if (branch_taken) { @@ -3267,7 +3231,6 @@ L_08A1537C: L_08A15380: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08A15394; @@ -3276,7 +3239,6 @@ L_08A15380: L_08A15394: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08A153A8; @@ -3286,7 +3248,6 @@ L_08A153A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); goto L_08A153C8; @@ -3303,7 +3264,6 @@ L_08A153C0: L_08A153C8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08A153DC; @@ -3312,7 +3272,6 @@ L_08A153C8: L_08A153DC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08A153F0; @@ -3322,7 +3281,6 @@ L_08A153F0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); goto L_08A15410; @@ -3339,7 +3297,6 @@ L_08A15408: L_08A15410: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08A15424; @@ -3348,7 +3305,6 @@ L_08A15410: L_08A15424: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_08A15438; @@ -3358,7 +3314,6 @@ L_08A15438: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); goto L_08A15458; @@ -3375,7 +3330,6 @@ L_08A15450: L_08A15458: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08A1546C; @@ -3384,7 +3338,6 @@ L_08A15458: L_08A1546C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_08A15480; @@ -3418,7 +3371,6 @@ L_08A15480: L_08A154D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A154E8; } @@ -3429,7 +3381,6 @@ L_08A154E4: goto L_08A154E8; L_08A154E8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A154F8; } @@ -3465,16 +3416,13 @@ L_08A154F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); jump_target = aot_gpr_6; aot_gpr_31 = (0x08A15520u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A15520u) goto L_08A15520; AOT_REGCACHE_SYNC_OUT(); return; L_08A15520: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15564; } @@ -3483,9 +3431,7 @@ L_08A15520: L_08A15534: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15564; } @@ -3494,9 +3440,7 @@ L_08A15534: L_08A15548: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15564; } @@ -3565,7 +3509,6 @@ L_08A155B8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A155DC; } @@ -3578,7 +3521,6 @@ L_08A155DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(200))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A15600; } @@ -3587,7 +3529,6 @@ L_08A155DC: L_08A155EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A15600; } @@ -3621,7 +3562,17 @@ L_08A15600: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A15640: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3715,9 +3666,7 @@ L_08A15718: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(ctx.fpr[20])) && aot_fpr_15 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1578C; } @@ -3726,9 +3675,7 @@ L_08A15718: L_08A1575C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(ctx.fpr[22])) && aot_fpr_15 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1578C; } @@ -3737,9 +3684,7 @@ L_08A1575C: L_08A15770: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(ctx.fpr[24])) && aot_fpr_15 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1578C; } @@ -3761,9 +3706,7 @@ L_08A1578C: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); ctx.fpr[17] = ctx.fpr[17] - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A157DC; } @@ -3771,9 +3714,7 @@ L_08A1578C: } L_08A157B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A157D4; } @@ -3800,9 +3741,7 @@ L_08A157D4: L_08A157DC: aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15800; } @@ -3823,9 +3762,7 @@ L_08A15800: goto L_08A15804; L_08A15804: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1583C; } @@ -3833,9 +3770,7 @@ L_08A15804: } L_08A15814: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15834; } @@ -3862,9 +3797,7 @@ L_08A15834: L_08A1583C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[16]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15860; } @@ -3885,9 +3818,7 @@ L_08A15860: goto L_08A15864; L_08A15864: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1589C; } @@ -3895,9 +3826,7 @@ L_08A15864: } L_08A15874: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15894; } @@ -3924,9 +3853,7 @@ L_08A15894: L_08A1589C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[17]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A158C0; } @@ -3950,7 +3877,6 @@ L_08A158C4: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A15BD0; } @@ -4175,7 +4101,6 @@ L_08A15A3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(384))); if (branch_taken) { @@ -4197,7 +4122,6 @@ L_08A15A64: L_08A15A68: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08A15A7C; @@ -4206,7 +4130,6 @@ L_08A15A68: L_08A15A7C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); goto L_08A15A90; @@ -4216,7 +4139,6 @@ L_08A15A90: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); goto L_08A15AB0; @@ -4233,7 +4155,6 @@ L_08A15AA8: L_08A15AB0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08A15AC4; @@ -4242,7 +4163,6 @@ L_08A15AB0: L_08A15AC4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); goto L_08A15AD8; @@ -4252,7 +4172,6 @@ L_08A15AD8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_08A15AF8; @@ -4269,7 +4188,6 @@ L_08A15AF0: L_08A15AF8: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_08A15B0C; @@ -4278,7 +4196,6 @@ L_08A15AF8: L_08A15B0C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); goto L_08A15B20; @@ -4288,7 +4205,6 @@ L_08A15B20: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_08A15B40; @@ -4305,7 +4221,6 @@ L_08A15B38: L_08A15B40: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); goto L_08A15B54; @@ -4314,7 +4229,6 @@ L_08A15B40: L_08A15B54: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); goto L_08A15B68; @@ -4348,7 +4262,6 @@ L_08A15B68: L_08A15BC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A15BD0; } @@ -4359,7 +4272,6 @@ L_08A15BCC: goto L_08A15BD0; L_08A15BD0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A15BE0; } @@ -4395,16 +4307,13 @@ L_08A15BE0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); jump_target = aot_gpr_6; aot_gpr_31 = (0x08A15C08u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A15C08u) goto L_08A15C08; AOT_REGCACHE_SYNC_OUT(); return; L_08A15C08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15C4C; } @@ -4413,9 +4322,7 @@ L_08A15C08: L_08A15C1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15C4C; } @@ -4424,9 +4331,7 @@ L_08A15C1C: L_08A15C30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A15C4C; } @@ -4495,7 +4400,6 @@ L_08A15CA0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A15CC4; } @@ -4530,7 +4434,6 @@ L_08A15CE8: L_08A15CEC: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A15D0C; } @@ -4539,7 +4442,6 @@ L_08A15CEC: L_08A15CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A15D0C; } @@ -4574,7 +4476,17 @@ L_08A15D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A15D50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(5))); @@ -4585,7 +4497,6 @@ L_08A15D50: ctx.gpr[7] = (aot_gpr_6 < static_cast(5) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A15DF8; } @@ -4617,7 +4528,6 @@ L_08A15D88: } L_08A15D90: { const bool branch_taken = aot_gpr_6 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A15DEC; } @@ -4628,7 +4538,6 @@ L_08A15D98: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(5))); aot_gpr_6 = (aot_gpr_6 & 17u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A15DB4; } @@ -4636,11 +4545,9 @@ L_08A15D98: } L_08A15DAC: aot_gpr_31 = (0x08A15DB4u); - // nop goto L_08A15D50; L_08A15DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A15DF8; } @@ -4688,7 +4595,17 @@ L_08A15DF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A15E04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -4714,7 +4631,6 @@ L_08A15E24: L_08A15E3C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A15E24; } @@ -4732,7 +4648,17 @@ L_08A15E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A15E5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4759,7 +4685,6 @@ L_08A15E9C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(5))); aot_gpr_5 = (aot_gpr_5 & 17u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A15EBC; } @@ -4769,7 +4694,6 @@ L_08A15EAC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(5))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A15EC8; } @@ -4807,7 +4731,6 @@ L_08A15EEC: goto L_08A15EF0; L_08A15EF0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A15F10; } @@ -4839,7 +4762,6 @@ L_08A15F10: L_08A15F34: ctx.gpr[17] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A15E9C; } @@ -4869,7 +4791,17 @@ L_08A15F44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A15F7C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); @@ -4886,11 +4818,20 @@ L_08A15F8C: goto L_08A15F94; L_08A15F94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A15F9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); @@ -4922,7 +4863,6 @@ L_08A15FE4: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A16008; } @@ -5054,7 +4994,17 @@ L_08A160E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16104: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(6))); @@ -5084,7 +5034,6 @@ L_08A16148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(16))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16174; } @@ -5118,7 +5067,6 @@ L_08A16174: } L_08A16188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A16234; } @@ -5172,7 +5120,6 @@ L_08A161E0: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(24))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(5))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16220; } @@ -5182,7 +5129,6 @@ L_08A161F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1621C; } @@ -5233,7 +5179,17 @@ L_08A16234: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16258: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -5296,7 +5252,6 @@ L_08A162C0: L_08A162E8: aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A16308; } @@ -5317,7 +5272,17 @@ L_08A16308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16314: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(64))); @@ -5365,7 +5330,6 @@ L_08A16378: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[8] = (ctx.gpr[18] < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A1638C; } @@ -5378,7 +5342,6 @@ L_08A1638C: aot_gpr_5 = (aot_gpr_5 + static_cast(24)); ctx.gpr[7] = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A16378; } @@ -5387,7 +5350,6 @@ L_08A1638C: L_08A1639C: aot_gpr_4 = (ctx.gpr[19] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A163E8; } @@ -5397,7 +5359,6 @@ L_08A163A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A163D4; } @@ -5423,7 +5384,6 @@ L_08A163D4: ctx.gpr[19] = (ctx.gpr[19] + static_cast(8)); aot_gpr_4 = (ctx.gpr[19] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A163A8; } @@ -5432,7 +5392,6 @@ L_08A163D4: L_08A163E8: aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16408; } @@ -5443,7 +5402,6 @@ L_08A163F4: ctx.gpr[19] = (ctx.gpr[19] + static_cast(8)); aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A163F4; } @@ -5468,7 +5426,17 @@ L_08A16414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5510,7 +5478,6 @@ L_08A16464: } L_08A1646C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A164DC; } @@ -5525,7 +5492,6 @@ L_08A16474: goto L_08A16DB0; L_08A16488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A164DC; } @@ -5540,7 +5506,6 @@ L_08A16490: goto L_08A16104; L_08A164A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A164DC; } @@ -5555,7 +5520,6 @@ L_08A164AC: goto L_08A16314; L_08A164C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A164DC; } @@ -5571,7 +5535,6 @@ L_08A164C8: L_08A164DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16448; } @@ -5585,12 +5548,21 @@ L_08A164E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A164F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A16518; } @@ -5617,7 +5589,6 @@ L_08A16528: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(5))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A16540; } @@ -5628,11 +5599,20 @@ L_08A1653C: goto L_08A16540; L_08A16540: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16548: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5669,7 +5649,6 @@ L_08A16594: goto L_08A164F8; L_08A165A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A165B4; } @@ -5693,7 +5672,6 @@ L_08A165B4: L_08A165C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16570; } @@ -5715,7 +5693,17 @@ L_08A165D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A165F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5749,7 +5737,6 @@ L_08A16638: goto L_08A164F8; L_08A16648: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A16654; } @@ -5793,7 +5780,6 @@ L_08A16688: goto L_08A164F8; L_08A16698: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A166A8; } @@ -5817,7 +5803,6 @@ L_08A166A8: L_08A166BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(24))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16620; } @@ -5839,7 +5824,17 @@ L_08A166C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A166EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -5861,11 +5856,20 @@ L_08A16710: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5240))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16728: aot_gpr_6 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5875,7 +5879,6 @@ L_08A16728: AOT_REGCACHE_SYNC_OUT(); return; L_08A16738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A167E8; } @@ -5890,7 +5893,6 @@ L_08A16740: AOT_REGCACHE_SYNC_OUT(); return; L_08A16750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A167E8; } @@ -5907,7 +5909,6 @@ L_08A16758: AOT_REGCACHE_SYNC_OUT(); return; L_08A16770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A167E8; } @@ -5922,7 +5923,6 @@ L_08A16778: AOT_REGCACHE_SYNC_OUT(); return; L_08A16788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A167E8; } @@ -5937,7 +5937,6 @@ L_08A16790: AOT_REGCACHE_SYNC_OUT(); return; L_08A167A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A167E8; } @@ -5955,7 +5954,6 @@ L_08A167A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A167C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A167E8; } @@ -5978,7 +5976,17 @@ L_08A167E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A167F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6001,7 +6009,6 @@ L_08A16824: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(5))); aot_gpr_6 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A16848; } @@ -6031,7 +6038,6 @@ L_08A16860: goto L_08A16864; L_08A16864: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16824; } @@ -6052,7 +6058,17 @@ L_08A1686C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1688C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6110,7 +6126,17 @@ L_08A16900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1691C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6136,7 +6162,6 @@ L_08A1691C: } L_08A16960: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A16984; } @@ -6158,7 +6183,6 @@ L_08A16984: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); aot_gpr_6 = (aot_gpr_5 < static_cast(65) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A169C0; } @@ -6197,7 +6221,17 @@ L_08A169C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A169E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6227,7 +6261,6 @@ L_08A16A24: goto L_08A16A28; L_08A16A28: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A16A80; } @@ -6268,7 +6301,17 @@ L_08A16A80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6342,7 +6385,17 @@ L_08A16B34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6390,7 +6443,17 @@ L_08A16BB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16BC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6414,7 +6477,6 @@ L_08A16BF4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(5))); aot_gpr_6 = (aot_gpr_6 & 17u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A16C14; } @@ -6431,7 +6493,6 @@ L_08A16C14: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); aot_gpr_5 = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A16C40; } @@ -6460,7 +6521,6 @@ L_08A16C40: L_08A16C4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(60))); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A16C70; } @@ -6493,7 +6553,17 @@ L_08A16C70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16C88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -6571,7 +6641,17 @@ L_08A16D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16D40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6606,7 +6686,17 @@ L_08A16D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16D90: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); @@ -6619,7 +6709,17 @@ L_08A16D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A16DB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6670,7 +6770,6 @@ L_08A16E28: goto L_08A16E2C; L_08A16E2C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A16ED4; } @@ -6680,7 +6779,6 @@ L_08A16E34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A16ED4; } @@ -6705,7 +6803,6 @@ L_08A16E68: ctx.gpr[19] = (0u < ctx.gpr[2] ? 1u : 0u); aot_gpr_4 = (ctx.gpr[18] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A16ED4; } @@ -6731,7 +6828,6 @@ L_08A16E78: } L_08A16EA8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A16EB8; } @@ -6768,7 +6864,6 @@ L_08A16EC8: goto L_08A16ED4; L_08A16ED4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A16F38; } @@ -6793,7 +6888,6 @@ L_08A16EF0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A16F24; } @@ -6847,7 +6941,6 @@ L_08A16F5C: ctx.gpr[23] = (ctx.gpr[23] + ctx.gpr[22]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A16FD8; } @@ -6857,7 +6950,6 @@ L_08A16F70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16FA4; } @@ -6868,7 +6960,6 @@ L_08A16F80: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(5))); aot_gpr_5 = (aot_gpr_5 & 17u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A16FA4; } @@ -6890,7 +6981,6 @@ L_08A16FA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16FD8; } @@ -6901,7 +6991,6 @@ L_08A16FB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(5))); aot_gpr_4 = (aot_gpr_4 & 17u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A16FD8; } @@ -6948,7 +7037,17 @@ L_08A16FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17018: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); ctx.gpr[9] = (15692u << 16u); @@ -7516,9 +7615,7 @@ L_08A17208: ctx.gpr[15] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(ctx.gpr[15]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A172D8; } @@ -7541,7 +7638,6 @@ L_08A172D8: L_08A172E8: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A172FC; @@ -7553,7 +7649,17 @@ L_08A172FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17304: aot_gpr_29 = (aot_gpr_29 + static_cast(-800)); ctx.gpr[2] = (aot_gpr_6 | 0u); @@ -8071,9 +8177,7 @@ L_08A17304: { const float fs = aot_fpr_14; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fpr[17] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A175B4; } @@ -8081,9 +8185,7 @@ L_08A17304: } L_08A17594: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A175B4; } @@ -8093,7 +8195,6 @@ L_08A175A4: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fpr[16] = ctx.fpr[16] / aot_fpr_14; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A175B4; } @@ -8210,7 +8311,17 @@ L_08A175B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17634: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); ctx.gpr[8] = (15692u << 16u); @@ -8791,7 +8902,6 @@ L_08A17810: ctx.gpr[11] = (ctx.gpr[11] + static_cast(1)); ctx.gpr[15] = (ctx.gpr[11] < static_cast(20) ? 1u : 0u); { const bool branch_taken = ctx.gpr[15] != 0u; - // nop if (branch_taken) { goto L_08A17810; } @@ -8803,14 +8913,34 @@ L_08A178EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A178F4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A178FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8823,7 +8953,6 @@ L_08A178FC: } L_08A1790C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1791C; } @@ -8831,7 +8960,6 @@ L_08A1790C: } L_08A17914: aot_gpr_31 = (0x08A1791Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1791Cu) goto L_08A1791C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1791C: @@ -8841,7 +8969,17 @@ L_08A1791C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17928: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -8881,7 +9019,6 @@ L_08A17928: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(47), static_cast(aot_gpr_5)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(48), 0u); aot_gpr_31 = (0x08A179A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A179A0u) goto L_08A179A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A179A0: @@ -8903,12 +9040,10 @@ L_08A179B0: L_08A179BC: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7716), ctx.gpr[2]); aot_gpr_31 = (0x08A179C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A179C8u) goto L_08A179C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A179C8: aot_gpr_31 = (0x08A179D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A179D0u) goto L_08A179D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A179D0: @@ -8930,7 +9065,6 @@ L_08A179E0: L_08A179EC: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7724), ctx.gpr[2]); aot_gpr_31 = (0x08A179F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 642u, 0x08AAEFE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A179F8u) goto L_08A179F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A179F8: @@ -8940,7 +9074,17 @@ L_08A179F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17A04: aot_gpr_4 = (2234u << 16u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(7488), static_cast(0u)); @@ -8950,13 +9094,22 @@ L_08A17A04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17A18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7836))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A17A34; } @@ -8964,7 +9117,6 @@ L_08A17A18: } L_08A17A2C: aot_gpr_31 = (0x08A17A34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 99u, 0x08A18A18u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A17A34u) goto L_08A17A34; AOT_REGCACHE_SYNC_OUT(); return; L_08A17A34: @@ -8972,7 +9124,6 @@ L_08A17A34: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A17A6C; } @@ -8980,17 +9131,14 @@ L_08A17A34: } L_08A17A48: aot_gpr_31 = (0x08A17A50u); - // nop goto L_08A17D2C; L_08A17A50: aot_gpr_31 = (0x08A17A58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 34u, 0x08A18294u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A17A58u) goto L_08A17A58; AOT_REGCACHE_SYNC_OUT(); return; L_08A17A58: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A17A74; } @@ -8998,7 +9146,6 @@ L_08A17A58: } L_08A17A64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A17A7C; } @@ -9006,7 +9153,6 @@ L_08A17A64: } L_08A17A6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A17A7C; } @@ -9014,7 +9160,6 @@ L_08A17A6C: } L_08A17A74: aot_gpr_31 = (0x08A17A7Cu); - // nop goto L_08A17E10; L_08A17A7C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -9023,14 +9168,22 @@ L_08A17A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17A88: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7840))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A17AAC; } @@ -9053,7 +9206,6 @@ L_08A17AB4: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A17ACC; @@ -9066,7 +9218,6 @@ L_08A17ACC: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-7840), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A17AF0; @@ -9078,7 +9229,17 @@ L_08A17AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17AF8: aot_gpr_4 = (2234u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(7488)); @@ -9087,13 +9248,22 @@ L_08A17AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_fpr_13 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(200), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), std::bit_cast(aot_fpr_13)); goto L_08A17B34; @@ -9136,7 +9306,6 @@ L_08A17B34: ctx.gpr[7] = (aot_gpr_29 + static_cast(32)); aot_gpr_6 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_29 + static_cast(16)); if (branch_taken) { @@ -9148,7 +9317,6 @@ L_08A17BA8: aot_gpr_5 = (aot_gpr_5 + static_cast(4)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 + static_cast(1)); if (branch_taken) { @@ -9158,7 +9326,6 @@ L_08A17BA8: } L_08A17BC0: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A17BD8; } @@ -9179,7 +9346,6 @@ L_08A17BC8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A17C50; } @@ -9298,7 +9464,17 @@ L_08A17C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17C9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_31); @@ -9409,7 +9585,17 @@ L_08A17D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17D2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7840))); @@ -9419,7 +9605,6 @@ L_08A17D2C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A17DFC; } @@ -9446,7 +9631,6 @@ L_08A17D5C: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_gpr_29 + static_cast(12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A17DA0; @@ -9493,14 +9677,23 @@ L_08A17DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17E10: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(20), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A17F64; } @@ -9517,7 +9710,6 @@ L_08A17E2C: L_08A17E40: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A17F64; } @@ -9531,7 +9723,6 @@ L_08A17E4C: L_08A17E54: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A17F64; } @@ -9563,7 +9754,6 @@ L_08A17E8C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A17F64; } @@ -9576,7 +9766,6 @@ L_08A17EA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A17EAC: aot_gpr_31 = (0x08A17EB4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A17EB4u) goto L_08A17EB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A17EB4: @@ -9585,7 +9774,6 @@ L_08A17EB4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A17EF0; } @@ -9609,7 +9797,6 @@ L_08A17EE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A17EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A17F0C; } @@ -9652,7 +9839,6 @@ L_08A17F20: L_08A17F2C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A17F44; } @@ -9694,7 +9880,17 @@ L_08A17F64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A17F78: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.gpr[10] = (aot_gpr_4 | 0u); @@ -9717,7 +9913,6 @@ L_08A17FB0: aot_gpr_16 = (ctx.gpr[9] + static_cast(7488)); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[10]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 33u, 0x08A18278u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0133.cpp b/profiles/vcs/generated/generated_unit_0133.cpp index 38dd2d4..7419066 100644 --- a/profiles/vcs/generated/generated_unit_0133.cpp +++ b/profiles/vcs/generated/generated_unit_0133.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0133[4093] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 4, 0, 0, 5, 0, 0, 6, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 33, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, - 39, 0, 0, 40, 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 44, 0, 0, - 0, 45, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 49, 0, 50, 51, 0, 0, 0, 0, 0, 0, 52, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 59, 0, 60, 61, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, - 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, 72, - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, - 115, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 122, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 0, 127, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 133, - 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 139, 0, 140, 0, 0, 0, 0, 0, 0, - 141, 0, 142, 0, 0, 0, 0, 143, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, - 150, 0, 0, 0, 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 156, - 0, 157, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, - 0, 0, 164, 0, 0, 165, 0, 166, 0, 0, 167, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 171, 172, 0, 0, 0, 0, 173, 0, 0, - 174, 0, 0, 0, 175, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 180, 0, 0, 0, 181, 0, 182, 183, 0, 0, 0, 0, - 0, 0, 184, 0, 0, 185, 0, 0, 0, 186, 0, 0, 187, 0, 188, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 0, - 201, 0, 0, 0, 202, 0, 203, 204, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 210, 0, 0, 211, 0, - 212, 0, 0, 0, 213, 0, 214, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, 0, 219, 0, 220, 0, 0, 0, 0, 221, - 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, 0, - 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 233, 0, 0, 0, 0, 234, - 0, 0, 0, 0, 0, 235, 0, 236, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 241, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, - 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, - 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 253, - 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 256, 0, 257, 0, 258, 0, - 259, 0, 0, 260, 0, 261, 0, 0, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, - 270, 0, 271, 272, 0, 0, 273, 0, 0, 0, 274, 0, 0, 275, 0, 276, 0, 277, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 0, 0, 282, 0, - 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, - 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, - 0, 0, 0, 300, 0, 301, 0, 302, 0, 303, 0, 0, 304, 305, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 309, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, - 0, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 317, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 320, 0, - 321, 322, 0, 323, 0, 0, 0, 324, 0, 325, 326, 327, 0, 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, 0, 330, 331, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 334, 335, 0, 336, 0, 0, 0, 337, 0, 338, 339, 340, 0, 0, 0, 341, 0, 0, 0, 0, 342, 0, - 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 346, 0, 0, 347, 0, 348, 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, - 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 358, 0, 359, 0, 0, 0, 0, 0, 360, 0, 361, 0, 362, 0, 0, 0, - 0, 363, 0, 364, 0, 0, 0, 365, 0, 366, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, - 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 375, - 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 383, 0, 0, 384, 0, 385, 386, 0, 387, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 391, 0, 0, - 0, 0, 0, 0, 392, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 397, 0, - 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 401, 0, - 402, 0, 403, 404, 0, 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 411, 0, 0, 412, 0, - 0, 413, 0, 0, 414, 0, 0, 415, 416, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 428, 0, 429, 0, 0, - 0, 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, - 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 443, 0, 444, 0, 0, 445, 0, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, - 0, 0, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 459, 0, 0, 0, 0, - 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, 0, 466, 0, 467, 0, 0, 0, 0, - 468, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, - 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 485, 0, 0, 0, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, - 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, - 0, 0, 491, 0, 0, 0, 492, 0, 493, 0, 0, 0, 494, 0, 495, 0, 0, 0, 0, 496, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, - 0, 503, 0, 0, 0, 504, 0, 505, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, - 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 0, 0, 0, 522, 523, 0, 0, 0, 0, - 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, - 529, 0, 530, 0, 531, 0, 532, 0, 533, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, - 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 540, 0, 0, 541, 0, 542, 543, 0, 544, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 0, 555, 0, 0, 0, 556, 0, 0, 557, 0, 558, 559, 0, 560, 0, 0, 0, 561, 0, 0, - 562, 0, 563, 0, 564, 0, 565, 0, 0, 0, 566, 0, 0, 567, 0, 568, 569, 0, 570, 0, 571, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, - 574, 0, 0, 0, 575, 576, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 582, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, - 588, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 590, 0, 591, 0, 592, 593, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 0, 599, - 0, 600, 0, 601, 0, 0, 0, 602, 0, 603, 604, 0, 605, 0, 606, 0, 0, 607, 0, 608, 609, 0, 610, 0, 0, 0, 611, 0, 0, 0, 0, 0, - 612, 0, 0, 613, 0, 0, 0, 0, 614, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0133[64] = { + 0x9400A004449292A1ull, 0x2050028022248080ull, 0x24A0002061002800ull, 0x81A0420620800449ull, + 0x0020206802224480ull, 0x8150400A01004000ull, 0x002AA40002280008ull, 0x2800008000080000ull, + 0x0008000000080800ull, 0x0249410820000080ull, 0x0000000000000040ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000020000ull, 0x000A000000000004ull, 0x0000000000000001ull, + 0x0000000000000000ull, 0x0000000002000000ull, 0x0A00000000000400ull, 0x050828A124920100ull, + 0x0000000010008010ull, 0x81010810000002A0ull, 0x0001088502908520ull, 0x8802842148204000ull, + 0x21A214A405281202ull, 0x008152240D148291ull, 0x0A48082000801005ull, 0x852240D14A9120D1ull, + 0x2020400141000002ull, 0x8424800004000000ull, 0x8008010C00A042A0ull, 0x8211080210000080ull, + 0x022AAA2954400010ull, 0x400508A0454AA44Dull, 0x088002A008209090ull, 0x04A08000881432A8ull, + 0x06108E8B44014288ull, 0x20A90908423A2D10ull, 0x1505410204104080ull, 0x88810101A000128Aull, + 0x2A85A42080101444ull, 0x4140000148840090ull, 0x000805924924910Dull, 0x2849144020080400ull, + 0x0288204080220214ull, 0x0A154210AAA09444ull, 0x100000210A222442ull, 0x0001200000000020ull, + 0x040A000002108000ull, 0x2108000000240000ull, 0x1000042100000000ull, 0x0018514408000010ull, + 0x000000000004A000ull, 0x111408A210000400ull, 0x0000000020018024ull, 0x0800900000000000ull, + 0x410140010C2A0000ull, 0x0856912042004355ull, 0x0000010000421000ull, 0x22D2248120000000ull, + 0x800000000215A455ull, 0x41210800901210B1ull, 0x045A568A95535101ull, 0x1004404000002309ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0133[64] = { + 1u, 18u, 29u, 39u, 53u, 64u, 73u, 83u, 87u, 90u, 99u, 100u, 100u, 100u, 101u, 104u, + 105u, 105u, 106u, 109u, 123u, 126u, 134u, 146u, 157u, 174u, 191u, 201u, 222u, 229u, 235u, 246u, + 254u, 270u, 289u, 300u, 314u, 332u, 351u, 363u, 376u, 392u, 402u, 419u, 430u, 441u, 460u, 471u, + 474u, 480u, 485u, 489u, 498u, 501u, 511u, 516u, 519u, 529u, 547u, 551u, 562u, 574u, 588u, 612u, }; void recomp_unit_0133_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0133_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A18000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0133[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0133[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0133[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A18000; @@ -796,7 +703,6 @@ L_08A18000: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(52), std::bit_cast(ctx.fpr[22])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A180F0; } @@ -809,7 +715,6 @@ L_08A18014: AOT_REGCACHE_SYNC_OUT(); return; L_08A1801C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A180F0; } @@ -829,7 +734,6 @@ L_08A18030: AOT_REGCACHE_SYNC_OUT(); return; L_08A1803C: aot_gpr_31 = (0x08A18044u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A18044u) goto L_08A18044; AOT_REGCACHE_SYNC_OUT(); return; L_08A18044: @@ -841,7 +745,6 @@ L_08A18044: L_08A18050: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A180E8; } @@ -876,7 +779,6 @@ L_08A18088: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A180B4; @@ -884,7 +786,6 @@ L_08A18088: goto L_08A180B4; L_08A180B4: aot_gpr_31 = (0x08A180BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 624u, 0x08A17B08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A180BCu) goto L_08A180BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A180BC: @@ -902,7 +803,6 @@ L_08A180BC: goto L_08A180E8; L_08A180E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A18260; } @@ -911,7 +811,6 @@ L_08A180E8: L_08A180F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A181D8; } @@ -925,7 +824,6 @@ L_08A180FC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A181D8; } @@ -947,7 +845,6 @@ L_08A1811C: L_08A1813C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A181D0; } @@ -981,7 +878,6 @@ L_08A18174: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A1819C; @@ -989,7 +885,6 @@ L_08A18174: goto L_08A1819C; L_08A1819C: aot_gpr_31 = (0x08A181A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 624u, 0x08A17B08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A181A4u) goto L_08A181A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A181A4: @@ -1007,7 +902,6 @@ L_08A181A4: goto L_08A181D0; L_08A181D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A18260; } @@ -1020,7 +914,6 @@ L_08A181D8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A18260; } @@ -1038,7 +931,6 @@ L_08A181F4: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A1822C; @@ -1046,7 +938,6 @@ L_08A181F4: goto L_08A1822C; L_08A1822C: aot_gpr_31 = (0x08A18234u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 624u, 0x08A17B08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A18234u) goto L_08A18234; AOT_REGCACHE_SYNC_OUT(); return; L_08A18234: @@ -1065,7 +956,6 @@ L_08A18234: L_08A18260: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A18274; @@ -1088,7 +978,17 @@ L_08A18278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A18294: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(168), aot_gpr_16); @@ -1099,7 +999,6 @@ L_08A18294: { const std::uint32_t aot_run_words[4]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(172), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A189E4; } @@ -1107,7 +1006,6 @@ L_08A18294: } L_08A182D4: aot_gpr_31 = (0x08A182DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A182DCu) goto L_08A182DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A182DC: @@ -1173,7 +1071,6 @@ L_08A18328: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A1835Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1835Cu) goto L_08A1835C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1835C: @@ -1234,7 +1131,6 @@ L_08A183B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2084))); ctx.fpr[20] = ctx.fpr[20] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A183D4; @@ -1278,7 +1174,6 @@ L_08A183FC: L_08A1841C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A1848C; } @@ -1319,7 +1214,6 @@ L_08A18464: ctx.fpr[20] = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fpr[20] = ctx.fpr[20] / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A1848C; @@ -1420,7 +1314,6 @@ L_08A18560: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A18584; @@ -1455,7 +1348,6 @@ L_08A185B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A185D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A189C0; } @@ -1463,7 +1355,6 @@ L_08A185D0: } L_08A185D8: aot_gpr_31 = (0x08A185E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A185E0u) goto L_08A185E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A185E0: @@ -1507,7 +1398,6 @@ L_08A1860C: AOT_REGCACHE_SYNC_OUT(); return; L_08A1864C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A189C0; } @@ -1546,7 +1436,6 @@ L_08A18664: L_08A186A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A187F4; } @@ -1559,7 +1448,6 @@ L_08A186B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A186BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A187F4; } @@ -1659,7 +1547,6 @@ L_08A1879C: AOT_REGCACHE_SYNC_OUT(); return; L_08A187EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A18974; } @@ -1677,7 +1564,6 @@ L_08A187F4: aot_gpr_4 = (16672u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1882C; @@ -1689,7 +1575,6 @@ L_08A1882C: aot_fpr_13 = aot_fpr_13 - ctx.fpr[16]; ctx.fpr[20] = aot_fpr_15 - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1884C; @@ -1785,9 +1670,7 @@ L_08A18974: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A189A0; } @@ -1808,9 +1691,7 @@ L_08A189A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A189C0; } @@ -1858,7 +1739,17 @@ L_08A189E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A18A18: aot_gpr_29 = (aot_gpr_29 + static_cast(-672)); ctx.gpr[13] = (15820u << 16u); @@ -2973,7 +2864,6 @@ L_08A19368: L_08A19374: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A193B4; } @@ -2989,7 +2879,6 @@ L_08A19380: AOT_REGCACHE_SYNC_OUT(); return; L_08A19394: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A193B4; } @@ -3004,7 +2893,6 @@ L_08A1939C: AOT_REGCACHE_SYNC_OUT(); return; L_08A193AC: aot_gpr_31 = (0x08A193B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A193B4u) goto L_08A193B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A193B4: @@ -3020,7 +2908,17 @@ L_08A193B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A193CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2234u << 16u); @@ -3046,7 +2944,17 @@ L_08A193E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19410: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -3062,7 +2970,17 @@ L_08A19410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1943C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -3080,7 +2998,17 @@ L_08A1943C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19470: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3167,7 +3095,6 @@ L_08A19470: AOT_REGCACHE_SYNC_OUT(); return; L_08A19514: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A19524; } @@ -3306,7 +3233,17 @@ L_08A19590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A195AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3327,7 +3264,17 @@ L_08A195C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A195E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3353,7 +3300,6 @@ L_08A195FC: L_08A19614: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19628; } @@ -3375,7 +3321,17 @@ L_08A19628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1963C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -3391,14 +3347,34 @@ L_08A19650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1965C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19664: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2279u << 16u); @@ -3429,7 +3405,17 @@ L_08A1969C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A196AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3472,7 +3458,17 @@ L_08A196C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19738: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3498,7 +3494,6 @@ L_08A19754: L_08A1976C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19780; } @@ -3521,7 +3516,17 @@ L_08A19780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3535,7 +3540,6 @@ L_08A197A8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A197EC; } @@ -3543,7 +3547,6 @@ L_08A197A8: } L_08A197BC: aot_gpr_31 = (0x08A197C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0026_entry, 26u, 171u, 0x0886D308u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A197C4u) goto L_08A197C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A197C4: @@ -3566,14 +3569,33 @@ L_08A197EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A197FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19804: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(496))); @@ -3589,7 +3611,6 @@ L_08A19804: L_08A19824: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(500))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1984C; } @@ -3602,7 +3623,6 @@ L_08A19830: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19868; } @@ -3616,7 +3636,6 @@ L_08A1984C: L_08A19854: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(496))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A19888; } @@ -3624,7 +3643,6 @@ L_08A19854: } L_08A19860: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A199C0; } @@ -3714,7 +3732,6 @@ L_08A19900: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19924; } @@ -3723,7 +3740,6 @@ L_08A19900: L_08A19910: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19924; } @@ -3796,7 +3812,6 @@ L_08A19994: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A199B8; } @@ -3805,7 +3820,6 @@ L_08A19994: L_08A199A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A199B8; } @@ -3818,7 +3832,6 @@ L_08A199B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A199B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A19A94; } @@ -3829,7 +3842,6 @@ L_08A199C0: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_16 + static_cast(320)); if (branch_taken) { @@ -3862,7 +3874,6 @@ L_08A199DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A19A00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A19A30; } @@ -3976,7 +3987,17 @@ L_08A19A94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(496))); @@ -4055,7 +4076,6 @@ L_08A19B40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19B64; } @@ -4064,7 +4084,6 @@ L_08A19B40: L_08A19B50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19B64; } @@ -4077,7 +4096,6 @@ L_08A19B5C: AOT_REGCACHE_SYNC_OUT(); return; L_08A19B64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A19BE8; } @@ -4133,7 +4151,6 @@ L_08A19BC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(232))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19BE8; } @@ -4142,7 +4159,6 @@ L_08A19BC4: L_08A19BD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A19BE8; } @@ -4158,7 +4174,6 @@ L_08A19BE8: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A19C04; } @@ -4219,14 +4234,34 @@ L_08A19C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19C78: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19C80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4301,7 +4336,17 @@ L_08A19CF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19D68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4354,7 +4399,17 @@ L_08A19DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4383,7 +4438,17 @@ L_08A19E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19E38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4433,7 +4498,17 @@ L_08A19E8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19EA0: aot_gpr_6 = (68u << 16u); aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); @@ -4449,7 +4524,17 @@ L_08A19EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19ECC: aot_gpr_6 = (68u << 16u); aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); @@ -4466,7 +4551,17 @@ L_08A19ECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4511,7 +4606,17 @@ L_08A19F70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19F84: aot_gpr_5 = (68u << 16u); aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); @@ -4526,7 +4631,17 @@ L_08A19F84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19FAC: aot_gpr_5 = (68u << 16u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); @@ -4536,12 +4651,21 @@ L_08A19FAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A19FD0u); - // nop goto L_08A19FFC; L_08A19FD0: ctx.gpr[2] = (ctx.gpr[2] ^ 255u); @@ -4552,7 +4676,17 @@ L_08A19FD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19FE4: aot_gpr_6 = (68u << 16u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); @@ -4563,7 +4697,17 @@ L_08A19FE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A19FFC: aot_gpr_5 = (68u << 16u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); @@ -4573,7 +4717,17 @@ L_08A19FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A010: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[23]); @@ -4605,7 +4759,6 @@ L_08A1A068: goto L_08A19FC0; L_08A1A070: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A1A144; } @@ -4618,7 +4771,6 @@ L_08A1A078: L_08A1A080: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A1A0A4; } @@ -4641,7 +4793,6 @@ L_08A1A0A4: goto L_08A19FAC; L_08A1A0AC: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_08A1A128; } @@ -4649,7 +4800,6 @@ L_08A1A0AC: } L_08A1A0B4: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A1A0C4; } @@ -4657,7 +4807,6 @@ L_08A1A0B4: } L_08A1A0BC: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A1A10C; } @@ -4669,7 +4818,6 @@ L_08A1A0C4: goto L_08A1A23C; L_08A1A0CC: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A1A108; } @@ -4694,7 +4842,6 @@ L_08A1A0E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A1A100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1A10C; } @@ -4726,12 +4873,10 @@ L_08A1A128: goto L_08A1A134; L_08A1A134: aot_gpr_31 = (0x08A1A13Cu); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A1A13C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1A068; } @@ -4744,7 +4889,6 @@ L_08A1A144: L_08A1A14C: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1A1AC; } @@ -4777,7 +4921,6 @@ L_08A1A178: AOT_REGCACHE_SYNC_OUT(); return; L_08A1A194: aot_gpr_31 = (0x08A1A19Cu); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A1A19C: @@ -4822,7 +4965,17 @@ L_08A1A1C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A1F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -4839,7 +4992,17 @@ L_08A1A210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A21C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -4855,7 +5018,17 @@ L_08A1A230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A23C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4890,7 +5063,6 @@ L_08A1A26C: AOT_REGCACHE_SYNC_OUT(); return; L_08A1A294: aot_gpr_31 = (0x08A1A29Cu); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08A1A29C: @@ -4918,7 +5090,17 @@ L_08A1A2A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A2DC: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(92), static_cast(aot_gpr_5)); @@ -4927,7 +5109,17 @@ L_08A1A2DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A2EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -4980,14 +5172,34 @@ L_08A1A334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A348: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A350: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -5043,7 +5255,6 @@ L_08A1A3BC: } L_08A1A3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1A58C; } @@ -5104,9 +5315,7 @@ L_08A1A440: aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); { const float fs = aot_fpr_15; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A48C; } @@ -5114,7 +5323,6 @@ L_08A1A440: } L_08A1A468: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = aot_fpr_15 + ctx.fpr[17]; goto L_08A1A480; @@ -5141,7 +5349,6 @@ L_08A1A484: } L_08A1A48C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = aot_fpr_15 - ctx.fpr[17]; goto L_08A1A4A4; @@ -5163,9 +5370,7 @@ L_08A1A4A8: goto L_08A1A4AC; L_08A1A4AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A4D0; } @@ -5174,7 +5379,6 @@ L_08A1A4AC: L_08A1A4BC: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_15)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1A4D0; @@ -5202,9 +5406,7 @@ L_08A1A4E8: aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); { const float fs = aot_fpr_15; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A534; } @@ -5212,7 +5414,6 @@ L_08A1A4E8: } L_08A1A510: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = aot_fpr_15 + ctx.fpr[17]; goto L_08A1A528; @@ -5239,7 +5440,6 @@ L_08A1A52C: } L_08A1A534: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = aot_fpr_15 - ctx.fpr[17]; goto L_08A1A54C; @@ -5261,9 +5461,7 @@ L_08A1A550: goto L_08A1A554; L_08A1A554: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A578; } @@ -5272,7 +5470,6 @@ L_08A1A554: L_08A1A564: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_15)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1A578; @@ -5301,7 +5498,17 @@ L_08A1A58C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A5A0: aot_gpr_6 = (0u | 0u); aot_fpr_12 = std::bit_cast(0u); @@ -5325,21 +5532,50 @@ L_08A1A5C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A5CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A5D4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A5DC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5365,11 +5601,20 @@ L_08A1A5DC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A5F4: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5423,11 +5668,20 @@ L_08A1A5F4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A61C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5451,11 +5705,20 @@ L_08A1A61C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A638: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5481,11 +5744,20 @@ L_08A1A638: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A650: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5511,11 +5783,20 @@ L_08A1A650: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A668: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -5534,11 +5815,20 @@ L_08A1A668: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A684: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -5557,18 +5847,25 @@ L_08A1A684: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A6A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A6C0; } @@ -5584,18 +5881,25 @@ L_08A1A6B8: } L_08A1A6C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A6C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A6E8; } @@ -5611,17 +5915,25 @@ L_08A1A6E0: } L_08A1A6E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A6F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1A70C; } @@ -5629,7 +5941,6 @@ L_08A1A6F0: } L_08A1A704: aot_gpr_31 = (0x08A1A70Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1A70Cu) goto L_08A1A70C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1A70C: @@ -5640,22 +5951,51 @@ L_08A1A70C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A71C: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A724: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A730: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5679,7 +6019,6 @@ L_08A1A730: } L_08A1A774: aot_gpr_31 = (0x08A1A77Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1A77Cu) goto L_08A1A77C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1A77C: @@ -5691,9 +6030,7 @@ L_08A1A780: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_fpr_14 = ctx.fpr[20] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A7C0; } @@ -5724,9 +6061,7 @@ L_08A1A7C0: goto L_08A1A7DC; L_08A1A7DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A808; } @@ -5734,9 +6069,7 @@ L_08A1A7DC: } L_08A1A7EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A808; } @@ -5753,9 +6086,7 @@ L_08A1A7FC: } L_08A1A808: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A830; } @@ -5763,9 +6094,7 @@ L_08A1A808: } L_08A1A818: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A830; } @@ -5781,7 +6110,6 @@ L_08A1A830: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A1A850; @@ -5805,7 +6133,17 @@ L_08A1A850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A87C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5824,11 +6162,20 @@ L_08A1A894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A8A8: aot_gpr_5 = (0u | 173u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1A8BC; } @@ -5847,11 +6194,20 @@ L_08A1A8BC: goto L_08A1A8C0; L_08A1A8C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A8C8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -5873,18 +6229,37 @@ L_08A1A8DC: } L_08A1A8E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A8EC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A8F4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1940))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -5912,7 +6287,6 @@ L_08A1A91C: aot_fpr_14 = aot_fpr_13 - aot_fpr_14; aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A1A948; @@ -5921,7 +6295,6 @@ L_08A1A91C: L_08A1A948: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A1A95C; @@ -5929,9 +6302,7 @@ L_08A1A948: goto L_08A1A95C; L_08A1A95C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1A978; } @@ -5944,11 +6315,20 @@ L_08A1A96C: goto L_08A1A978; L_08A1A978: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1A980: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -5976,7 +6356,6 @@ L_08A1A980: AOT_REGCACHE_SYNC_OUT(); return; L_08A1A9D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1AA00; } @@ -5986,9 +6365,7 @@ L_08A1A9E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1AA08; } @@ -6025,7 +6402,17 @@ L_08A1AA0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AA20: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10))); @@ -6095,7 +6482,6 @@ L_08A1AA84: L_08A1AA90: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1AAA0; } @@ -6110,7 +6496,17 @@ L_08A1AAA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AAA8: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -6122,11 +6518,20 @@ L_08A1AAA8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AACC: aot_fpr_14 = aot_fpr_14 - aot_fpr_13; aot_fpr_12 = aot_fpr_12 - aot_fpr_13; @@ -6152,11 +6557,20 @@ L_08A1AACC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AB28: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -6168,11 +6582,20 @@ L_08A1AB28: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AB4C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -6185,11 +6608,20 @@ L_08A1AB4C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AB74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); @@ -6197,7 +6629,6 @@ L_08A1AB74: ctx.fpr[0] = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[0])) && aot_fpr_13 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -6207,9 +6638,7 @@ L_08A1AB74: } L_08A1AB98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[0])) && aot_fpr_12 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1ABB0; } @@ -6217,7 +6646,6 @@ L_08A1AB98: } L_08A1ABA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1ABC0; } @@ -6237,19 +6665,37 @@ L_08A1ABC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ABCC: ctx.fpr[0] = std::sqrt(aot_fpr_12); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ABD8: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1ABEC; @@ -6257,15 +6703,23 @@ L_08A1ABD8: goto L_08A1ABEC; L_08A1ABEC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ABF4: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1AC08; @@ -6273,11 +6727,20 @@ L_08A1ABF4: goto L_08A1AC08; L_08A1AC08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AC10: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -6286,7 +6749,17 @@ L_08A1AC10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AC24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -6299,7 +6772,17 @@ L_08A1AC24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AC44: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6319,7 +6802,17 @@ L_08A1AC44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AC54: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6342,11 +6835,20 @@ L_08A1AC54: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AC7C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6362,11 +6864,20 @@ L_08A1AC7C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AC98: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6382,11 +6893,20 @@ L_08A1AC98: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ACB4: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6401,11 +6921,20 @@ L_08A1ACB4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ACCC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6425,14 +6954,34 @@ L_08A1ACCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ACDC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ACE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6440,7 +6989,6 @@ L_08A1ACE4: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[0])) && aot_fpr_13 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -6450,9 +6998,7 @@ L_08A1ACE4: } L_08A1AD08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[0])) && aot_fpr_12 == ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1AD30; } @@ -6467,7 +7013,6 @@ L_08A1AD18: AOT_REGCACHE_SYNC_OUT(); return; L_08A1AD28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1AD30; } @@ -6480,7 +7025,17 @@ L_08A1AD30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD3C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -6491,28 +7046,68 @@ L_08A1AD3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD54: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD5C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD64: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7792), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD6C: if (vcs::g_draw_distance_runtime_scales.world > 1.0f) { ++vcs::g_draw_distance_runtime_telemetry.far_clip_set_hits; @@ -6523,14 +7118,34 @@ L_08A1AD6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD74: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16976))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD7C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); aot_gpr_6 = (0u + static_cast(-2)); @@ -6540,7 +7155,17 @@ L_08A1AD7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AD90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -6550,7 +7175,17 @@ L_08A1AD90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -6560,28 +7195,68 @@ L_08A1ADA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADB8: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADC0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADC8: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(44), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADD0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), ctx.gpr[7]); @@ -6591,14 +7266,34 @@ L_08A1ADD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADE4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1ADEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); @@ -6611,9 +7306,7 @@ L_08A1ADEC: L_08A1AE04: aot_fpr_15 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1AE28; } @@ -6632,12 +7325,21 @@ L_08A1AE28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AE34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A1AE44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1AE44u) goto L_08A1AE44; AOT_REGCACHE_SYNC_OUT(); return; L_08A1AE44: @@ -6648,7 +7350,17 @@ L_08A1AE44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AE54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -6657,14 +7369,34 @@ L_08A1AE54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AE64: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AE6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6682,7 +7414,17 @@ L_08A1AE80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AE94: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -6785,7 +7527,17 @@ L_08A1AEF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1AF14: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -6868,7 +7620,6 @@ L_08A1AF14: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A1AFB4u); - // nop goto L_08A1AAA8; L_08A1AFB4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); @@ -6976,9 +7727,7 @@ L_08A1AFC0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1B064; } @@ -6987,9 +7736,7 @@ L_08A1AFC0: L_08A1B03C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1B064; } @@ -7325,9 +8072,7 @@ L_08A1B154: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1B1F4; } @@ -7336,9 +8081,7 @@ L_08A1B154: L_08A1B1CC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1B1F4; } @@ -7465,7 +8208,17 @@ L_08A1B1F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B280: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); @@ -7475,7 +8228,17 @@ L_08A1B280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B294: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); @@ -7485,7 +8248,17 @@ L_08A1B294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B2A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-464)); aot_gpr_5 = (2236u << 16u); @@ -7509,7 +8282,6 @@ L_08A1B2F0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1B3B0; } @@ -7545,7 +8317,6 @@ L_08A1B36C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7568))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (0u | 1u); if (branch_taken) { @@ -7594,7 +8365,6 @@ L_08A1B3B8: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1B448; } @@ -7811,7 +8581,6 @@ L_08A1B570: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(6944))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1B594; } @@ -7825,7 +8594,6 @@ L_08A1B584: goto L_08A1B594; L_08A1B594: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A1B5F0; } @@ -7852,7 +8620,6 @@ L_08A1B5AC: goto L_08A1B7BC; L_08A1B5C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1B614; } @@ -7934,7 +8701,17 @@ L_08A1B640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B674: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_31); @@ -8162,7 +8939,17 @@ L_08A1B7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B7BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), aot_gpr_16); @@ -8228,7 +9015,6 @@ L_08A1B7EC: aot_fpr_12 = std::bit_cast(ctx.gpr[10]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 0u); if (branch_taken) { @@ -8238,7 +9024,6 @@ L_08A1B7EC: } L_08A1B844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1B86C; } @@ -8255,9 +9040,7 @@ L_08A1B84C: L_08A1B854: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1B86C; } @@ -8305,7 +9088,6 @@ L_08A1B8C0: aot_gpr_16 = (aot_gpr_16 + static_cast(-20)); aot_gpr_5 = (aot_gpr_16 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1B920; } @@ -8317,14 +9099,22 @@ L_08A1B8E0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_16); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5360))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B8F8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A1B918; } @@ -8332,7 +9122,6 @@ L_08A1B8F8: } L_08A1B900: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A1B918; } @@ -8340,7 +9129,6 @@ L_08A1B900: } L_08A1B908: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1B918; } @@ -8348,7 +9136,6 @@ L_08A1B908: } L_08A1B910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1B920; } @@ -8377,7 +9164,17 @@ L_08A1B924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B938: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8400,7 +9197,17 @@ L_08A1B964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B978: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8442,7 +9249,6 @@ L_08A1B9B0: goto L_08A1B9BC; L_08A1B9BC: aot_gpr_31 = (0x08A1B9C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1B9C4u) goto L_08A1B9C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1B9C4: @@ -8450,7 +9256,6 @@ L_08A1B9C4: goto L_08A1B9C8; L_08A1B9C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1B9D8; } @@ -8473,7 +9278,17 @@ L_08A1B9D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1B9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, aot_gpr_31}; @@ -8550,7 +9365,17 @@ L_08A1BA58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BAA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -8637,7 +9462,6 @@ L_08A1BAA0: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(172), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A1BB74u); - // nop goto L_08A1B9EC; L_08A1BB74: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); @@ -8646,7 +9470,17 @@ L_08A1BB74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BB80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8694,7 +9528,6 @@ L_08A1BBC4: goto L_08A1BBD0; L_08A1BBD0: aot_gpr_31 = (0x08A1BBD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BBD8u) goto L_08A1BBD8; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BBD8: @@ -8702,7 +9535,6 @@ L_08A1BBD8: goto L_08A1BBDC; L_08A1BBDC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1BC08; } @@ -8712,7 +9544,6 @@ L_08A1BBE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2632))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1BC08; } @@ -8721,7 +9552,6 @@ L_08A1BBE4: L_08A1BBF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2624))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1BC08; } @@ -8729,7 +9559,6 @@ L_08A1BBF4: } L_08A1BC00: aot_gpr_31 = (0x08A1BC08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BC08u) goto L_08A1BC08; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BC08: @@ -8767,7 +9596,6 @@ L_08A1BC28: goto L_08A1BC34; L_08A1BC34: aot_gpr_31 = (0x08A1BC3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BC3Cu) goto L_08A1BC3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BC3C: @@ -8775,7 +9603,6 @@ L_08A1BC3C: goto L_08A1BC40; L_08A1BC40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1BC50; } @@ -8798,7 +9625,17 @@ L_08A1BC50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BC64: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); @@ -8835,7 +9672,6 @@ L_08A1BC64: aot_gpr_5 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -8848,9 +9684,7 @@ L_08A1BCFC: goto L_08A1BD00; L_08A1BD00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1BD14; } @@ -8861,7 +9695,6 @@ L_08A1BD10: goto L_08A1BD14; L_08A1BD14: aot_gpr_31 = (0x08A1BD1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BD1Cu) goto L_08A1BD1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BD1C: @@ -8915,7 +9748,6 @@ L_08A1BD7C: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A1BDAC; @@ -8924,7 +9756,6 @@ L_08A1BD7C: L_08A1BDAC: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A1BDC0; @@ -8933,9 +9764,7 @@ L_08A1BDAC: L_08A1BDC0: { const float fs = aot_fpr_12; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1BDE0; } @@ -8959,14 +9788,34 @@ L_08A1BDE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BDF8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2856)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BE00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8975,7 +9824,6 @@ L_08A1BE00: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A1BE38; } @@ -8993,7 +9841,6 @@ L_08A1BE20: } L_08A1BE30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1BE44; } @@ -9001,7 +9848,6 @@ L_08A1BE30: } L_08A1BE38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1BED8; } @@ -9045,7 +9891,6 @@ L_08A1BE60: } L_08A1BE68: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1BE8C; } @@ -9060,7 +9905,6 @@ L_08A1BE70: goto L_08A1BE7C; L_08A1BE7C: aot_gpr_31 = (0x08A1BE84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BE84u) goto L_08A1BE84; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BE84: @@ -9071,7 +9915,6 @@ L_08A1BE8C: aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(1976), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1BEA8; } @@ -9079,7 +9922,6 @@ L_08A1BE8C: } L_08A1BE9C: aot_gpr_31 = (0x08A1BEA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BEA4u) goto L_08A1BEA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BEA4: @@ -9087,12 +9929,10 @@ L_08A1BEA4: goto L_08A1BEA8; L_08A1BEA8: aot_gpr_31 = (0x08A1BEB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 557u, 0x089BAA80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BEB0u) goto L_08A1BEB0; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BEB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A1BED8; } @@ -9101,7 +9941,6 @@ L_08A1BEB0: L_08A1BEB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1BED0; } @@ -9109,7 +9948,6 @@ L_08A1BEB8: } L_08A1BEC4: aot_gpr_31 = (0x08A1BECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1BECCu) goto L_08A1BECC; AOT_REGCACHE_SYNC_OUT(); return; L_08A1BECC: @@ -9128,7 +9966,17 @@ L_08A1BED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2544))); @@ -9166,7 +10014,17 @@ L_08A1BF24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1BF34: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0134.cpp b/profiles/vcs/generated/generated_unit_0134.cpp index 17457e2..3441d71 100644 --- a/profiles/vcs/generated/generated_unit_0134.cpp +++ b/profiles/vcs/generated/generated_unit_0134.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0134[4094] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, - 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 0, 14, 0, 15, 0, 0, 0, 16, 0, 17, 18, 0, 0, 19, 0, 20, 0, - 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, - 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 58, 0, 59, 0, 60, 0, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, - 65, 0, 66, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 72, 0, 73, 0, 74, 0, 0, 0, - 0, 0, 75, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 0, 86, 0, 0, 87, - 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, - 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 105, 106, 0, 107, 0, 0, 0, 0, 108, 0, - 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, - 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 120, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, - 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 146, 147, 0, 0, 0, 148, 0, 0, 0, 0, - 0, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 152, 0, 0, 153, 154, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 156, - 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, - 165, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, - 175, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 0, 184, 0, 185, - 0, 186, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 190, 0, 191, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 197, 0, 198, 199, 200, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 0, - 0, 0, 0, 0, 0, 204, 0, 0, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 0, 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, - 216, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 220, 221, 0, 222, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 229, 0, 230, 0, 0, 231, 0, - 0, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, - 0, 239, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, 242, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, - 245, 0, 0, 0, 246, 247, 0, 248, 0, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, - 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 258, 259, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, - 261, 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 264, 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 268, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, - 0, 281, 282, 0, 283, 0, 0, 0, 284, 0, 0, 0, 285, 0, 286, 0, 287, 0, 288, 0, 0, 289, 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, - 0, 292, 0, 0, 0, 293, 294, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, - 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, 304, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 308, 0, 309, 0, 0, 0, 0, - 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 319, - 0, 0, 0, 0, 0, 0, 320, 0, 0, 321, 0, 322, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 0, - 0, 327, 0, 0, 328, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, - 0, 0, 0, 333, 0, 0, 0, 334, 0, 335, 336, 0, 0, 337, 338, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, - 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 346, - 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 350, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, - 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 355, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 359, - 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, - 365, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, - 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 377, - 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 384, 385, 0, 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 394, 0, 395, 0, 0, 396, 0, 0, - 397, 0, 398, 0, 399, 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 404, 0, 0, 405, 0, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 416, 0, - 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 419, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, - 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, - 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 434, 0, 0, 0, 435, 436, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 440, 0, 441, 442, 0, 0, 0, 0, 443, 0, 0, 0, - 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 448, 0, 449, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 0, 0, - 453, 0, 454, 0, 0, 455, 0, 456, 0, 0, 0, 457, 0, 458, 0, 0, 0, 459, 0, 460, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 462, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 469, - 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 0, 475, 0, 476, 0, - 477, 0, 478, 0, 479, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, - 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 501, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 507, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, - 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, - 0, 518, 0, 519, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, 526, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 529, 0, 0, 530, 0, 0, 0, 0, 531, 0, 532, - 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 536, 0, 537, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 0, 540, 0, - 0, 0, 0, 0, 0, 541, 0, 542, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 0, 0, 0, 558, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 562, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, - 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, - 0, 0, 572, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 577, 0, - 578, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, - 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 594, 0, 0, 0, - 0, 0, 0, 0, 0, 595, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 601, 0, 602, 0, 603, 0, 0, 0, 604, 0, 0, 605, 0, 0, - 0, 0, 0, 0, 0, 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, - 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, - 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 623, 0, 0, 624, - 0, 0, 0, 625, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 629, 0, 630, 0, 0, 0, 0, 631, 0, 632, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 635, 0, 636, 0, 0, 0, 0, 637, 0, 638, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 643, 0, 0, 0, 644, 0, 645, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0134[64] = { + 0x53452AAA90020089ull, 0x0000005400040903ull, 0x1000000000000002ull, 0x0080000040400020ull, + 0x0044000000004010ull, 0x0250140120020102ull, 0x100152A400556808ull, 0x0000B50415A2002Dull, + 0x0890820292480088ull, 0x42C2880481488012ull, 0x201100001200000Aull, 0x0108040088402004ull, + 0x0000120000020008ull, 0x0400884020042011ull, 0x08C8248084080108ull, 0x2AA88040808C8248ull, + 0xA5550015AA910045ull, 0x4243A4404010D48Aull, 0x004B4089554AAA20ull, 0x488502404A4050A0ull, + 0xA00554B140009122ull, 0x1400B14104030280ull, 0x0000000000120420ull, 0xAAA2100000000000ull, + 0x4810016222255116ull, 0x0A28020021404012ull, 0x908904000000A810ull, 0x0000005224014A40ull, + 0x4210000000000000ull, 0x821020822000E688ull, 0xA400288048248804ull, 0x02900A0540109010ull, + 0x01520140A4001014ull, 0x250502900080108Cull, 0x0010052400121415ull, 0x80108C01520140A4ull, + 0x5000101010041002ull, 0x0090000100000000ull, 0x0801000410D49310ull, 0x408A28A51400AA00ull, + 0xA000000401100C00ull, 0x0084155554808140ull, 0x0004800000000000ull, 0x4002010101002001ull, + 0x0101000100001200ull, 0x00212A00042A1000ull, 0x1408540840000000ull, 0xA80020008000012Aull, + 0x4242A042A1288000ull, 0x00000000000011A0ull, 0x0000904005400002ull, 0x8500500400010000ull, + 0x8809400082000000ull, 0x0211000120000100ull, 0x4088520150204204ull, 0x00010028000A0002ull, + 0x0020006010A04000ull, 0x2454100000101000ull, 0x0080800000400060ull, 0x000200084000A404ull, + 0x9020500104000000ull, 0x0002000001000018ull, 0x0068504000000D0Aull, 0x280044A200028100ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0134[64] = { + 1u, 21u, 29u, 31u, 35u, 39u, 49u, 65u, 81u, 94u, 109u, 116u, 124u, 128u, 137u, 149u, + 165u, 186u, 204u, 224u, 239u, 256u, 269u, 273u, 281u, 299u, 310u, 320u, 330u, 333u, 347u, 360u, + 372u, 384u, 397u, 409u, 423u, 431u, 434u, 447u, 463u, 470u, 486u, 488u, 495u, 500u, 510u, 518u, + 527u, 541u, 545u, 552u, 559u, 566u, 572u, 585u, 591u, 598u, 606u, 611u, 618u, 625u, 629u, 640u, }; void recomp_unit_0134_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0134_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A1C000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0134[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0134[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0134[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A1C000; @@ -850,7 +757,17 @@ L_08A1C01C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C044: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(ctx.fpr[20])); @@ -875,7 +792,6 @@ L_08A1C070: } L_08A1C07C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A1C104; } @@ -883,7 +799,6 @@ L_08A1C07C: } L_08A1C084: aot_gpr_31 = (0x08A1C08Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1C08Cu) goto L_08A1C08C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1C08C: @@ -908,7 +823,6 @@ L_08A1C0A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A1C0AC: aot_gpr_31 = (0x08A1C0B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 60u, 0x08934444u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1C0B4u) goto L_08A1C0B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1C0B4: @@ -919,7 +833,6 @@ L_08A1C0B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A1C0C0: aot_gpr_31 = (0x08A1C0C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 746u, 0x0887F804u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1C0C8u) goto L_08A1C0C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A1C0C8: @@ -951,12 +864,10 @@ L_08A1C0E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A1C0F0: aot_gpr_31 = (0x08A1C0F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 841u, 0x08A0787Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1C0F8u) goto L_08A1C0F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A1C0F8: aot_gpr_31 = (0x08A1C100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1C100u) goto L_08A1C100; AOT_REGCACHE_SYNC_OUT(); return; L_08A1C100: @@ -969,7 +880,6 @@ L_08A1C104: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2804), std::bit_cast(ctx.fpr[20])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2063))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1C12C; } @@ -994,7 +904,17 @@ L_08A1C12C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C148: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), std::bit_cast(ctx.fpr[20])); @@ -1019,7 +939,6 @@ L_08A1C188: AOT_REGCACHE_SYNC_OUT(); return; L_08A1C190: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1C204; } @@ -1441,7 +1360,17 @@ L_08A1C410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C438: aot_gpr_5 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); @@ -1476,7 +1405,6 @@ L_08A1C438: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_08A1C4C8; @@ -1484,7 +1412,6 @@ L_08A1C438: goto L_08A1C4C8; L_08A1C4C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A1C4D8; @@ -1507,7 +1434,17 @@ L_08A1C4D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1530,7 +1467,17 @@ L_08A1C520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C544: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); aot_gpr_6 = (aot_gpr_5 << 5u); @@ -1543,7 +1490,6 @@ L_08A1C544: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(112)))))); aot_gpr_6 = (0u | 17u); { const bool branch_taken = ctx.gpr[8] == aot_gpr_6; - // nop if (branch_taken) { goto L_08A1C5A8; } @@ -1594,7 +1540,6 @@ L_08A1C5B0: goto L_08A1C5D0; L_08A1C5D0: { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1C634; } @@ -1637,7 +1582,6 @@ L_08A1C60C: goto L_08A1C62C; L_08A1C62C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1C638; } @@ -1648,32 +1592,71 @@ L_08A1C634: goto L_08A1C638; L_08A1C638: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C640: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2641))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C648: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2480)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C650: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2068))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C658: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); aot_gpr_5 = (aot_gpr_5 << 5u); @@ -1711,7 +1694,6 @@ L_08A1C694: } L_08A1C69C: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1C6B8; } @@ -1720,7 +1702,6 @@ L_08A1C69C: L_08A1C6A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A1C6B8; } @@ -1736,11 +1717,20 @@ L_08A1C6B0: } L_08A1C6B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C6C0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); aot_gpr_5 = (aot_gpr_5 << 5u); @@ -1753,7 +1743,6 @@ L_08A1C6C0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1C708; } @@ -1763,7 +1752,6 @@ L_08A1C6F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1C708; } @@ -1782,11 +1770,20 @@ L_08A1C708: goto L_08A1C70C; L_08A1C70C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C714: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); aot_gpr_5 = (aot_gpr_5 << 5u); @@ -1799,7 +1796,6 @@ L_08A1C714: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1C75C; } @@ -1809,7 +1805,6 @@ L_08A1C744: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1C75C; } @@ -1828,25 +1823,42 @@ L_08A1C75C: goto L_08A1C760; L_08A1C760: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C768: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C770: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2644))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1C7A8; } @@ -1856,9 +1868,7 @@ L_08A1C788: aot_gpr_4 = (17279u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1C7B0; } @@ -1885,11 +1895,20 @@ L_08A1C7B0: goto L_08A1C7B4; L_08A1C7B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C7BC: ctx.gpr[7] = (0u | 0u); { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); @@ -1951,7 +1970,6 @@ L_08A1C7BC: ctx.execute_vfpu_vec3_ct<4u, 32u, 12u, 1u, 0u>(); ctx.execute_vfpu_vcmp_ct<4u, 44u, 1u, 2u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A1C87C; } @@ -1961,7 +1979,6 @@ L_08A1C80C: ctx.execute_vfpu_vec3_ct<4u, 32u, 12u, 1u, 1u>(); ctx.execute_vfpu_vcmp_ct<4u, 76u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A1C87C; } @@ -2011,7 +2028,6 @@ L_08A1C81C: ctx.execute_vfpu_vdot_ct<100u, 0u, 11u, 3u>(); ctx.execute_vfpu_vcmp_ct<4u, 12u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A1C87C; } @@ -2020,7 +2036,6 @@ L_08A1C81C: L_08A1C84C: ctx.execute_vfpu_vcmp_ct<36u, 12u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A1C87C; } @@ -2029,7 +2044,6 @@ L_08A1C84C: L_08A1C858: ctx.execute_vfpu_vcmp_ct<68u, 12u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A1C87C; } @@ -2038,24 +2052,31 @@ L_08A1C858: L_08A1C864: ctx.execute_vfpu_vcmp_ct<100u, 12u, 1u, 7u>(); { const bool branch_taken = ((ctx.vfpu_ctrl[3] >> 5u) & 1u) != 0u; - // nop if (branch_taken) { goto L_08A1C87C; } goto L_08A1C870; } L_08A1C870: - // nop ctx.gpr[2] = (ctx.gpr[7] + static_cast(1)); ctx.gpr[2] = (ctx.gpr[2] & 255u); goto L_08A1C87C; L_08A1C87C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C884: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2063,7 +2084,6 @@ L_08A1C884: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A1C8A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 611u, 0x08A1BEE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1C8A4u) goto L_08A1C8A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1C8A4: @@ -2087,11 +2107,20 @@ L_08A1C8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C8D0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2640))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1C9D8; } @@ -2101,7 +2130,6 @@ L_08A1C8DC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2840)))))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1C958; } @@ -2111,9 +2139,7 @@ L_08A1C8EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2804))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1C910; } @@ -2143,9 +2169,7 @@ L_08A1C910: goto L_08A1C93C; L_08A1C93C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1C9C4; } @@ -2162,7 +2186,6 @@ L_08A1C94C: } L_08A1C958: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A1C9C4; } @@ -2173,7 +2196,6 @@ L_08A1C960: aot_fpr_14 = std::bit_cast(0u); aot_gpr_5 = (17279u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2203,9 +2225,7 @@ L_08A1C988: goto L_08A1C9AC; L_08A1C9AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1C9C4; } @@ -2231,11 +2251,20 @@ L_08A1C9D8: goto L_08A1C9DC; L_08A1C9DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1C9E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2251,14 +2280,34 @@ L_08A1C9F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CA04: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2228)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CA0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2278,7 +2327,6 @@ L_08A1CA0C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2650), static_cast(0u)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2048), 0u); aot_gpr_31 = (0x08A1CA64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1CA64u) goto L_08A1CA64; AOT_REGCACHE_SYNC_OUT(); return; L_08A1CA64: @@ -2320,7 +2368,6 @@ L_08A1CAC0: aot_gpr_4 = (0u | 18u); aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(2848), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A1CAD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1CAD0u) goto L_08A1CAD0; AOT_REGCACHE_SYNC_OUT(); return; L_08A1CAD0: @@ -2339,7 +2386,6 @@ L_08A1CAF4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 61u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1CB58; } @@ -2385,7 +2431,6 @@ L_08A1CB6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 56u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1CBCC; } @@ -2421,7 +2466,6 @@ L_08A1CBCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1CC0C; } @@ -2461,7 +2505,17 @@ L_08A1CC0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CC44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2485,7 +2539,6 @@ L_08A1CC44: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2083), static_cast(0u)); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2084), static_cast(0u)); aot_gpr_31 = (0x08A1CCA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1CCA4u) goto L_08A1CCA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1CCA4: @@ -2527,7 +2580,6 @@ L_08A1CD00: aot_gpr_4 = (0u | 18u); aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(2848), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A1CD10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1CD10u) goto L_08A1CD10; AOT_REGCACHE_SYNC_OUT(); return; L_08A1CD10: @@ -2546,7 +2598,6 @@ L_08A1CD34: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 61u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1CD98; } @@ -2592,7 +2643,6 @@ L_08A1CDAC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 56u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1CE0C; } @@ -2628,7 +2678,6 @@ L_08A1CE0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1CE4C; } @@ -2661,7 +2710,17 @@ L_08A1CE4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CE68: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2678,11 +2737,20 @@ L_08A1CE68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CE7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2691,13 +2759,11 @@ L_08A1CE7C: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(88), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A1CE9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1CE9Cu) goto L_08A1CE9C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1CE9C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1CEDC; } @@ -2713,7 +2779,6 @@ L_08A1CEB4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -2737,7 +2802,17 @@ L_08A1CEDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CEEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2746,13 +2821,11 @@ L_08A1CEEC: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2057), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A1CF0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1CF0Cu) goto L_08A1CF0C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1CF0C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1CF4C; } @@ -2768,7 +2841,6 @@ L_08A1CF24: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -2792,7 +2864,17 @@ L_08A1CF4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CF5C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2827,7 +2909,17 @@ L_08A1CF5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1CF7C: ctx.gpr[8] = (ctx.gpr[7] | 0u); ctx.gpr[7] = (aot_gpr_5 & 255u); @@ -2835,7 +2927,6 @@ L_08A1CF7C: aot_gpr_5 = (ctx.gpr[8] & 255u); ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2640))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A1CFD4; } @@ -2848,9 +2939,7 @@ L_08A1CF98: ctx.gpr[8] = (17279u << 16u); aot_fpr_13 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1CFD4; } @@ -2860,7 +2949,6 @@ L_08A1CFBC: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1948), static_cast(0u)); ctx.gpr[8] = (0u | 2u); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A1CFDC; } @@ -2868,7 +2956,6 @@ L_08A1CFBC: } L_08A1CFCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1CFF4; } @@ -2876,7 +2963,6 @@ L_08A1CFCC: } L_08A1CFD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D000; } @@ -2884,7 +2970,6 @@ L_08A1CFD4: } L_08A1CFDC: { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A1CFF4; } @@ -2892,7 +2977,6 @@ L_08A1CFDC: } L_08A1CFE4: { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A1CFF4; } @@ -2909,11 +2993,20 @@ L_08A1CFF4: goto L_08A1D000; L_08A1D000: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D008: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2180), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (0u | 1u); @@ -2922,7 +3015,17 @@ L_08A1D008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D018: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2942,7 +3045,6 @@ L_08A1D040: aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(1976), static_cast(ctx.gpr[17])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1D064; } @@ -2951,7 +3053,6 @@ L_08A1D040: L_08A1D050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1D074; } @@ -2959,7 +3060,6 @@ L_08A1D050: } L_08A1D05C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D080; } @@ -2967,7 +3067,6 @@ L_08A1D05C: } L_08A1D064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D13C; } @@ -2975,7 +3074,6 @@ L_08A1D064: } L_08A1D06C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D13C; } @@ -2983,7 +3081,6 @@ L_08A1D06C: } L_08A1D074: aot_gpr_31 = (0x08A1D07Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D07Cu) goto L_08A1D07C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D07C: @@ -2991,12 +3088,10 @@ L_08A1D07C: goto L_08A1D080; L_08A1D080: aot_gpr_31 = (0x08A1D088u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 557u, 0x089BAA80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D088u) goto L_08A1D088; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D088: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A1D13C; } @@ -3054,7 +3149,6 @@ L_08A1D0D8: } L_08A1D0E0: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A1D13C; } @@ -3063,7 +3157,6 @@ L_08A1D0E0: L_08A1D0E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1D13C; } @@ -3071,12 +3164,10 @@ L_08A1D0E8: } L_08A1D0F4: aot_gpr_31 = (0x08A1D0FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D0FCu) goto L_08A1D0FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D0FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1D11C; } @@ -3084,14 +3175,12 @@ L_08A1D0FC: } L_08A1D104: aot_gpr_31 = (0x08A1D10Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D10Cu) goto L_08A1D10C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D10C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1D13C; } @@ -3108,7 +3197,6 @@ L_08A1D11C: } L_08A1D128: aot_gpr_31 = (0x08A1D130u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D130u) goto L_08A1D130; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D130: @@ -3130,7 +3218,17 @@ L_08A1D13C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D150: aot_gpr_6 = (17096u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_6); @@ -3145,7 +3243,17 @@ L_08A1D150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D178: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3210,7 +3318,17 @@ L_08A1D1E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D1F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3218,7 +3336,6 @@ L_08A1D1F8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1D224; } @@ -3248,7 +3365,6 @@ L_08A1D22C: } L_08A1D234: aot_gpr_31 = (0x08A1D23Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D23Cu) goto L_08A1D23C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D23C: @@ -3269,7 +3385,6 @@ L_08A1D24C: goto L_08A1D258; L_08A1D258: aot_gpr_31 = (0x08A1D260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D260u) goto L_08A1D260; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D260: @@ -3278,7 +3393,6 @@ L_08A1D260: goto L_08A1D268; L_08A1D268: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1D278; } @@ -3286,7 +3400,6 @@ L_08A1D268: } L_08A1D270: aot_gpr_31 = (0x08A1D278u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D278u) goto L_08A1D278; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D278: @@ -3308,7 +3421,17 @@ L_08A1D28C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D29C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3322,7 +3445,6 @@ L_08A1D29C: goto L_08A1D2B8; L_08A1D2B8: aot_gpr_31 = (0x08A1D2C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D2C0u) goto L_08A1D2C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D2C0: @@ -3340,7 +3462,17 @@ L_08A1D2CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D2D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3355,7 +3487,6 @@ L_08A1D2D8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1D358; } @@ -3363,7 +3494,6 @@ L_08A1D2D8: } L_08A1D314: aot_gpr_31 = (0x08A1D31Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B01E00, 191u, 504u, 0x08B01E00u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0191_entry, 191u, 504u, 0x08B01E00u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D31Cu) goto L_08A1D31C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D31C: @@ -3375,7 +3505,6 @@ L_08A1D31C: goto L_08A1D810; L_08A1D330: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A1D36C; } @@ -3402,7 +3531,6 @@ L_08A1D358: goto L_08A1D3DC; L_08A1D364: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D3C8; } @@ -3411,7 +3539,6 @@ L_08A1D364: L_08A1D36C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A1D398; } @@ -3434,7 +3561,6 @@ L_08A1D378: L_08A1D398: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A1D3C0; } @@ -3465,12 +3591,21 @@ L_08A1D3C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D3DC: aot_gpr_5 = (aot_gpr_5 << 16u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A1D3F8; } @@ -3488,7 +3623,6 @@ L_08A1D3EC: L_08A1D3F8: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1D414; } @@ -3507,7 +3641,6 @@ L_08A1D404: L_08A1D414: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1D430; } @@ -3530,7 +3663,17 @@ L_08A1D430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D43C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3552,7 +3695,6 @@ L_08A1D43C: } L_08A1D478: { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1D494; } @@ -3562,7 +3704,6 @@ L_08A1D480: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2048))); ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A1D494; } @@ -3573,7 +3714,6 @@ L_08A1D490: goto L_08A1D494; L_08A1D494: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1D568; } @@ -3582,7 +3722,6 @@ L_08A1D494: L_08A1D49C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2048), ctx.gpr[8]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1D4F4; } @@ -3590,12 +3729,10 @@ L_08A1D49C: } L_08A1D4A8: aot_gpr_31 = (0x08A1D4B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D4B0u) goto L_08A1D4B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D4B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1D4C8; } @@ -3603,7 +3740,6 @@ L_08A1D4B0: } L_08A1D4B8: aot_gpr_31 = (0x08A1D4C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D4C0u) goto L_08A1D4C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D4C0: @@ -3633,7 +3769,6 @@ L_08A1D4C8: } L_08A1D4F4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A1D544; } @@ -3647,7 +3782,6 @@ L_08A1D4FC: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A1D524; } @@ -3668,7 +3802,6 @@ L_08A1D524: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1D544; } @@ -3686,7 +3819,6 @@ L_08A1D544: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2073), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A1D568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1D568u) goto L_08A1D568; AOT_REGCACHE_SYNC_OUT(); return; L_08A1D568: @@ -3702,7 +3834,17 @@ L_08A1D568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D580: ctx.gpr[8] = (aot_gpr_6 << 16u); ctx.gpr[8] = (static_cast(static_cast(ctx.gpr[8]) >> 16u)); @@ -3717,7 +3859,6 @@ L_08A1D580: } L_08A1D598: { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A1D5B4; } @@ -3727,7 +3868,6 @@ L_08A1D5A0: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2048))); ctx.gpr[10] = (0u | 1u); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A1D5B4; } @@ -3738,7 +3878,6 @@ L_08A1D5B0: goto L_08A1D5B4; L_08A1D5B4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A1D5E8; } @@ -3770,11 +3909,20 @@ L_08A1D5BC: goto L_08A1D5E8; L_08A1D5E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D5F0: aot_gpr_6 = (0u | 17u); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2848), static_cast(aot_gpr_6)); @@ -3788,7 +3936,17 @@ L_08A1D5F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D614: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3805,11 +3963,20 @@ L_08A1D614: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D628: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3928,7 +4095,17 @@ L_08A1D7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D7C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_5 = (0u | 7u); @@ -3973,7 +4150,6 @@ L_08A1D7EC: } L_08A1D7F4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1D804; } @@ -3992,16 +4168,24 @@ L_08A1D804: goto L_08A1D808; L_08A1D808: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D810: aot_gpr_4 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1D894; } @@ -4035,7 +4219,6 @@ L_08A1D838: } L_08A1D840: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A1D874; } @@ -4044,7 +4227,6 @@ L_08A1D840: L_08A1D848: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D898; } @@ -4054,7 +4236,6 @@ L_08A1D854: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D898; } @@ -4064,7 +4245,6 @@ L_08A1D864: aot_gpr_4 = (0u | 2u); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D898; } @@ -4074,7 +4254,6 @@ L_08A1D874: aot_gpr_4 = (0u | 3u); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D898; } @@ -4084,7 +4263,6 @@ L_08A1D884: aot_gpr_4 = (0u | 4u); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1D898; } @@ -4095,11 +4273,20 @@ L_08A1D894: goto L_08A1D898; L_08A1D898: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1D8A0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(80))); aot_gpr_6 = (aot_gpr_5 << 5u); @@ -4112,7 +4299,6 @@ L_08A1D8A0: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(112)))))); aot_gpr_6 = (0u | 17u); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1D904; } @@ -4182,7 +4368,6 @@ L_08A1D938: goto L_08A1D958; L_08A1D958: { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A1DA34; } @@ -4281,11 +4466,20 @@ L_08A1DA2C: goto L_08A1DA34; L_08A1DA34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1DA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_31}; @@ -4370,7 +4564,6 @@ L_08A1DAA8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fpr[20] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4393,7 +4586,6 @@ L_08A1DACC: L_08A1DADC: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4420,7 +4612,17 @@ L_08A1DAFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1DB18: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2082))); { const bool branch_taken = aot_gpr_5 != 0u; @@ -4445,11 +4647,20 @@ L_08A1DB2C: goto L_08A1DB38; L_08A1DB38: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1DB40: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[4]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4480,7 +4691,6 @@ L_08A1DB74: L_08A1DB84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1DB98; } @@ -4615,9 +4825,7 @@ L_08A1DB98: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DCF8; } @@ -4626,9 +4834,7 @@ L_08A1DB98: L_08A1DCD0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DCF8; } @@ -4648,7 +4854,6 @@ L_08A1DCE4: L_08A1DCF8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -4658,7 +4863,6 @@ L_08A1DCF8: } L_08A1DD0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A1DD28; @@ -4699,9 +4903,7 @@ L_08A1DD3C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DD84; } @@ -4738,14 +4940,23 @@ L_08A1DD9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1DDB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2651))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1DEFC; } @@ -4766,9 +4977,7 @@ L_08A1DDE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2808))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DE08; } @@ -4796,9 +5005,7 @@ L_08A1DE08: goto L_08A1DE2C; L_08A1DE2C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DEB4; } @@ -4816,7 +5023,6 @@ L_08A1DE3C: L_08A1DE48: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2840)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A1DEB4; } @@ -4826,9 +5032,7 @@ L_08A1DE54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2808))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DE78; } @@ -4856,9 +5060,7 @@ L_08A1DE78: goto L_08A1DE9C; L_08A1DE9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1DEB4; } @@ -4892,7 +5094,6 @@ L_08A1DEE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A1DEF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1DF3C; } @@ -4903,7 +5104,6 @@ L_08A1DEFC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A1DF3C; } @@ -4938,7 +5138,17 @@ L_08A1DF3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1DF50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4959,7 +5169,6 @@ L_08A1DF78: goto L_08A1DF80; L_08A1DF80: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1DFAC; } @@ -4977,7 +5186,6 @@ L_08A1DF88: AOT_REGCACHE_SYNC_OUT(); return; L_08A1DFA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1E010; } @@ -5002,7 +5210,6 @@ L_08A1DFD0: AOT_REGCACHE_SYNC_OUT(); return; L_08A1DFDC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A1E008; } @@ -5042,7 +5249,17 @@ L_08A1E010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E030: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5066,7 +5283,6 @@ L_08A1E068: goto L_08A1E074; L_08A1E074: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1E0A0; } @@ -5084,7 +5300,6 @@ L_08A1E07C: AOT_REGCACHE_SYNC_OUT(); return; L_08A1E098: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1E130; } @@ -5144,7 +5359,6 @@ L_08A1E10C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-7524), aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 14 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1E130; } @@ -5176,7 +5390,17 @@ L_08A1E130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E15C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5200,7 +5424,6 @@ L_08A1E190: goto L_08A1E19C; L_08A1E19C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1E1C8; } @@ -5218,7 +5441,6 @@ L_08A1E1A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A1E1C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1E2A8; } @@ -5230,7 +5452,6 @@ L_08A1E1C8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-7520), aot_gpr_4); aot_gpr_5 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A1E1E8; } @@ -5261,7 +5482,6 @@ L_08A1E200: } L_08A1E208: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1E244; } @@ -5273,7 +5493,6 @@ L_08A1E210: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-7520), aot_gpr_4); aot_gpr_5 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A1E230; } @@ -5297,7 +5516,6 @@ L_08A1E230: L_08A1E244: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1E2A0; } @@ -5317,7 +5535,6 @@ L_08A1E250: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E2A8; } @@ -5359,7 +5576,17 @@ L_08A1E2A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E2D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5383,7 +5610,6 @@ L_08A1E308: goto L_08A1E314; L_08A1E314: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1E340; } @@ -5401,7 +5627,6 @@ L_08A1E31C: AOT_REGCACHE_SYNC_OUT(); return; L_08A1E338: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1E3D0; } @@ -5461,7 +5686,6 @@ L_08A1E3AC: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-7508), aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1E3D0; } @@ -5493,14 +5717,34 @@ L_08A1E3D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E3FC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-7618), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E404: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5543,9 +5787,7 @@ L_08A1E448: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1E4B0; } @@ -5557,9 +5799,7 @@ L_08A1E470: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1E4B0; } @@ -5571,9 +5811,7 @@ L_08A1E490: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1E630; } @@ -5600,7 +5838,6 @@ L_08A1E4B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A1E4F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1E624; } @@ -5638,7 +5875,6 @@ L_08A1E4F8: aot_gpr_4 = (17136u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(0u); if (branch_taken) { @@ -5664,9 +5900,7 @@ L_08A1E580: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_14 = aot_fpr_14 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1E5DC; } @@ -5698,9 +5932,7 @@ L_08A1E5DC: goto L_08A1E610; L_08A1E610: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1E624; } @@ -5728,7 +5960,6 @@ L_08A1E624: L_08A1E630: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A1E650; } @@ -5737,7 +5968,6 @@ L_08A1E630: L_08A1E63C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A1E658; } @@ -5774,7 +6004,17 @@ L_08A1E65C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5801,7 +6041,17 @@ L_08A1E688: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E6C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5829,7 +6079,6 @@ L_08A1E6EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E920; } @@ -5837,12 +6086,10 @@ L_08A1E6EC: } L_08A1E724: aot_gpr_31 = (0x08A1E72Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E72Cu) goto L_08A1E72C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E72C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1E920; } @@ -5850,7 +6097,6 @@ L_08A1E72C: } L_08A1E734: aot_gpr_31 = (0x08A1E73Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E73Cu) goto L_08A1E73C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E73C: @@ -5870,9 +6116,7 @@ L_08A1E73C: ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7652))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1E8FC; } @@ -5880,14 +6124,12 @@ L_08A1E73C: } L_08A1E768: aot_gpr_31 = (0x08A1E770u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E770u) goto L_08A1E770; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E770: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E8FC; } @@ -5895,13 +6137,11 @@ L_08A1E770: } L_08A1E780: aot_gpr_31 = (0x08A1E788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E788u) goto L_08A1E788; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E788: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A1E8FC; } @@ -5909,14 +6149,12 @@ L_08A1E788: } L_08A1E794: aot_gpr_31 = (0x08A1E79Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E79Cu) goto L_08A1E79C; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E79C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E8FC; } @@ -5924,14 +6162,12 @@ L_08A1E79C: } L_08A1E7AC: aot_gpr_31 = (0x08A1E7B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E7B4u) goto L_08A1E7B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E7B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E8FC; } @@ -5939,14 +6175,12 @@ L_08A1E7B4: } L_08A1E7C4: aot_gpr_31 = (0x08A1E7CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E7CCu) goto L_08A1E7CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E7CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E8FC; } @@ -5957,7 +6191,6 @@ L_08A1E7DC: ctx.fpr[20] = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A1E7F8; @@ -5975,7 +6208,6 @@ L_08A1E7F8: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); aot_gpr_4 = (std::bit_cast(aot_fpr_12)); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08A1E82C; } @@ -5996,14 +6228,12 @@ L_08A1E82C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2860), aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2896), aot_gpr_4); aot_gpr_31 = (0x08A1E850u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E850u) goto L_08A1E850; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E850: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A1E8F4; } @@ -6019,7 +6249,6 @@ L_08A1E860: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fpr[24] = aot_fpr_12 / aot_fpr_14; aot_gpr_31 = (0x08A1E888u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1E888u) goto L_08A1E888; AOT_REGCACHE_SYNC_OUT(); return; L_08A1E888: @@ -6053,7 +6282,6 @@ L_08A1E888: goto L_08A1E8F4; L_08A1E8F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1E918; } @@ -6073,7 +6301,6 @@ L_08A1E8FC: goto L_08A1E918; L_08A1E918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1E93C; } @@ -6106,7 +6333,17 @@ L_08A1E93C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E95C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); jump_target = aot_gpr_31; @@ -6114,77 +6351,176 @@ L_08A1E95C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E968: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E970: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E978: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E980: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2256), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E988: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2260), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E990: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5504))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E998: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-24932))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E9A0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E9A8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E9B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A1E9C8u); - // nop goto L_08A1E9DC; L_08A1E9C8: ctx.gpr[2] = (aot_gpr_16 | 0u); @@ -6195,7 +6531,17 @@ L_08A1E9C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1E9DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6252,7 +6598,6 @@ L_08A1E9DC: aot_gpr_5 = (0u | 4000u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(176), aot_gpr_5); aot_gpr_31 = (0x08A1EABCu); - // nop goto L_08A1EAC8; L_08A1EABC: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6261,7 +6606,17 @@ L_08A1EABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1EAC8: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(72), static_cast(0u)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(116), static_cast(0u)); @@ -6280,7 +6635,17 @@ L_08A1EAC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1EB00: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_31}; @@ -6316,7 +6681,6 @@ L_08A1EB60: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(36), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A1EB80u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1EB80u) goto L_08A1EB80; AOT_REGCACHE_SYNC_OUT(); return; L_08A1EB80: @@ -6327,7 +6691,6 @@ L_08A1EB80: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(40), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A1EBA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1EBA0u) goto L_08A1EBA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A1EBA0: @@ -6362,7 +6725,17 @@ L_08A1EBC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1EBF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6384,7 +6757,17 @@ L_08A1EC24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1EC30: aot_gpr_29 = (aot_gpr_29 + static_cast(-800)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6394,7 +6777,6 @@ L_08A1EC30: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(2072), static_cast(0u)); aot_gpr_31 = (0x08A1EC80u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1EC80u) goto L_08A1EC80; AOT_REGCACHE_SYNC_OUT(); return; L_08A1EC80: @@ -6413,7 +6795,6 @@ L_08A1EC80: ctx.gpr[17] = (ctx.gpr[17] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1ED4C; } @@ -6427,7 +6808,6 @@ L_08A1ECC0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1ED4C; } @@ -6459,7 +6839,6 @@ L_08A1ED30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7584))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A1ED68; } @@ -6486,7 +6865,6 @@ L_08A1ED54: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1F120; } @@ -6528,7 +6906,6 @@ L_08A1EDC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1F074; } @@ -6668,7 +7045,6 @@ L_08A1EDD4: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A1EE78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1EE78u) goto L_08A1EE78; AOT_REGCACHE_SYNC_OUT(); return; L_08A1EE78: @@ -6702,7 +7078,6 @@ L_08A1EEA8: } L_08A1EEB0: aot_gpr_31 = (0x08A1EEB8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1EEB8u) goto L_08A1EEB8; AOT_REGCACHE_SYNC_OUT(); return; L_08A1EEB8: @@ -6739,7 +7114,6 @@ L_08A1EEF0: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A1EF0C; } @@ -6896,7 +7270,6 @@ L_08A1EFEC: } L_08A1EFF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F060; } @@ -6923,7 +7296,6 @@ L_08A1F03C: aot_gpr_4 = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F054; } @@ -6931,7 +7303,6 @@ L_08A1F03C: } L_08A1F04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F060; } @@ -6940,7 +7311,6 @@ L_08A1F04C: L_08A1F054: ctx.gpr[20] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F074; } @@ -6951,7 +7321,6 @@ L_08A1F060: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1EDD4; } @@ -6959,7 +7328,6 @@ L_08A1F060: } L_08A1F074: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A1F0BC; } @@ -6967,7 +7335,6 @@ L_08A1F074: } L_08A1F07C: aot_gpr_31 = (0x08A1F084u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1F084u) goto L_08A1F084; AOT_REGCACHE_SYNC_OUT(); return; L_08A1F084: @@ -7017,7 +7384,6 @@ L_08A1F0C4: L_08A1F0D8: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(153), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A1F0E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A1F0E4u) goto L_08A1F0E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A1F0E4: @@ -7056,7 +7422,6 @@ L_08A1F120: aot_gpr_4 = (ctx.gpr[28] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(-7596))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F260; } @@ -7226,9 +7591,7 @@ L_08A1F204: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(140))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1F268; } @@ -7236,7 +7599,6 @@ L_08A1F204: } L_08A1F258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F298; } @@ -7268,9 +7630,7 @@ L_08A1F298: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(56))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1F340; } @@ -7279,7 +7639,6 @@ L_08A1F298: L_08A1F2B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(153))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F340; } @@ -7365,9 +7724,7 @@ L_08A1F340: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1F464; } @@ -7381,7 +7738,6 @@ L_08A1F388: aot_fpr_13 = aot_fpr_14 / aot_fpr_13; ctx.fpr[16] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(128))); goto L_08A1F3B8; @@ -7403,7 +7759,6 @@ L_08A1F3B8: aot_gpr_4 = (16256u << 16u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -7462,7 +7817,6 @@ L_08A1F464: { const float fs = ctx.fpr[20]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(116))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F4C0; } @@ -7499,7 +7853,6 @@ L_08A1F47C: AOT_REGCACHE_SYNC_OUT(); return; L_08A1F4B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1F574; } @@ -7508,7 +7861,6 @@ L_08A1F4B8: L_08A1F4C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(116))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F4EC; } @@ -7657,7 +8009,6 @@ L_08A1F520: L_08A1F574: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(72))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F680; } @@ -7684,7 +8035,6 @@ L_08A1F5C0: aot_gpr_4 = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F654; } @@ -7695,7 +8045,6 @@ L_08A1F5D0: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(152), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(160))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1F624; } @@ -7710,7 +8059,6 @@ L_08A1F5E4: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 2u)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1F624; } @@ -7767,7 +8115,6 @@ L_08A1F654: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(120))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1F678; } @@ -7779,7 +8126,6 @@ L_08A1F670: goto L_08A1F678; L_08A1F678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F6A4; } @@ -7820,7 +8166,6 @@ L_08A1F6A4: goto L_08A1F6B0; L_08A1F6B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F6F8; } @@ -7839,9 +8184,7 @@ L_08A1F6B8: } L_08A1F6CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1F6F8; } @@ -7859,7 +8202,6 @@ L_08A1F6DC: L_08A1F6F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1F838; } @@ -7879,7 +8221,6 @@ L_08A1F704: aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_fpr_15 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.gpr[19]); goto L_08A1F74C; @@ -7907,7 +8248,6 @@ L_08A1F74C: aot_gpr_4 = (16256u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -7982,7 +8322,6 @@ L_08A1F838: AOT_REGCACHE_SYNC_OUT(); return; L_08A1F854: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1F870; } @@ -8036,7 +8375,17 @@ L_08A1F898: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A1F8D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-688)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8060,7 +8409,6 @@ L_08A1F930: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1F9D0; } @@ -8105,7 +8453,6 @@ L_08A1F9B0: } L_08A1F9C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A1F9E8; } @@ -8257,9 +8604,7 @@ L_08A1FB08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(288))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1FCD4; } @@ -8273,7 +8618,6 @@ L_08A1FB28: AOT_REGCACHE_SYNC_OUT(); return; L_08A1FB34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1FCD4; } @@ -8319,9 +8663,7 @@ L_08A1FB3C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1FCD4; } @@ -8330,9 +8672,7 @@ L_08A1FB3C: L_08A1FB78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7416))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1FCD4; } @@ -8467,9 +8807,7 @@ L_08A1FC68: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26]) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7412))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A1FCD4; } @@ -8492,7 +8830,6 @@ L_08A1FC80: AOT_REGCACHE_SYNC_OUT(); return; L_08A1FCB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A1FCD4; } @@ -8536,7 +8873,6 @@ L_08A1FCD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(352)))))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A1FB08; } @@ -8712,7 +9048,6 @@ L_08A1FDC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7444))); aot_fpr_12 = ctx.fpr[28] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7444))); goto L_08A1FE0C; @@ -8729,7 +9064,6 @@ L_08A1FE04: L_08A1FE0C: aot_fpr_12 = ctx.fpr[28] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7444))); goto L_08A1FE28; @@ -8773,7 +9107,6 @@ L_08A1FE2C: ctx.fpr[28] = ctx.fpr[28] + aot_fpr_12; aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7432))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(608))); goto L_08A1FF20; @@ -8783,7 +9116,6 @@ L_08A1FE98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7432))); aot_fpr_12 = ctx.fpr[20] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7432))); goto L_08A1FEB8; @@ -8800,7 +9132,6 @@ L_08A1FEB0: L_08A1FEB8: aot_fpr_12 = ctx.fpr[20] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7432))); goto L_08A1FED4; @@ -8851,7 +9182,6 @@ L_08A1FF20: AOT_REGCACHE_SYNC_OUT(); return; L_08A1FF3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A1FF9C; } @@ -8878,7 +9208,6 @@ L_08A1FF84: aot_gpr_4 = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A1FFA8; } @@ -8886,7 +9215,6 @@ L_08A1FF84: } L_08A1FF94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0135_entry, 135u, 1u, 0x08A20000u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8930,7 +9258,6 @@ L_08A1FFB8: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7424))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7424))); (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0135_entry, 135u, 3u, 0x08A20028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; @@ -8938,7 +9265,6 @@ L_08A1FFB8: goto L_08A1FFEC; L_08A1FFEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0135_entry, 135u, 3u, 0x08A20028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0135.cpp b/profiles/vcs/generated/generated_unit_0135.cpp index 4775e13..3efdbbb 100644 --- a/profiles/vcs/generated/generated_unit_0135.cpp +++ b/profiles/vcs/generated/generated_unit_0135.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0135[4096] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 8, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 16, 0, 17, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, 0, - 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, - 0, 42, 0, 43, 0, 0, 0, 0, 0, 44, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 0, 0, 0, 0, 0, 55, - 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 67, 68, - 0, 69, 0, 0, 0, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 83, 0, 0, - 84, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, - 95, 0, 96, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, - 0, 105, 0, 106, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 111, 112, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 115, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 118, 0, 0, 0, 0, 0, 0, 119, - 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 129, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 133, 0, 134, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, - 136, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 150, 0, 0, 0, 151, 0, 152, 0, - 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 159, - 0, 0, 160, 161, 0, 162, 0, 0, 163, 0, 164, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 168, 0, 169, 0, 0, 170, - 0, 171, 0, 172, 0, 0, 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, - 182, 0, 0, 0, 183, 0, 184, 0, 0, 0, 185, 186, 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, 0, 0, - 0, 0, 191, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 193, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 201, - 0, 0, 0, 202, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 211, - 0, 212, 0, 0, 213, 0, 0, 214, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 218, 0, 0, 219, 0, 220, 0, 0, 0, - 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 223, 0, 224, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, - 232, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 248, 249, 0, 250, 0, 0, - 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 259, 0, 0, 0, - 260, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 264, 265, 0, 266, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 0, 274, - 0, 0, 0, 275, 0, 0, 276, 0, 0, 277, 0, 278, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, - 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 285, 0, 0, 0, 0, 0, - 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 288, 0, 289, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, - 0, 0, 295, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 312, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, - 321, 0, 322, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 326, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 0, 0, 0, 0, 332, 333, 0, 334, 0, 335, 0, 0, 336, 0, 337, 0, 0, 338, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, - 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 0, 0, 0, 0, 353, 0, 0, 354, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 359, 0, 0, 360, 0, - 361, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 366, - 0, 0, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, - 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, - 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, 0, 380, 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 0, 383, 0, - 384, 0, 0, 0, 0, 0, 385, 386, 0, 0, 0, 0, 387, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, - 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 399, - 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, - 0, 416, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 433, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 445, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 449, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 458, 0, 459, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 468, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, - 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, 0, - 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 480, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, - 487, 0, 488, 0, 489, 0, 490, 0, 0, 491, 0, 492, 0, 0, 493, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 498, - 0, 499, 0, 500, 0, 501, 0, 0, 502, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, 507, 0, 0, 0, 0, 508, 0, 509, 0, 0, 510, 0, 0, 511, 512, 0, 513, 0, - 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 523, 0, 0, 524, 0, 525, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0135[64] = { + 0x0018000414414481ull, 0x1000002020000040ull, 0x0000004000602454ull, 0x0520881000000080ull, + 0x800020840A412084ull, 0x000400002000520Aull, 0x0004001482B08200ull, 0xC18802800A000080ull, + 0x0000800000000062ull, 0x0400040100040009ull, 0x0C014091288000A0ull, 0x0400008080002000ull, + 0x0002010008000215ull, 0x030A042A10000880ull, 0x8140000852000000ull, 0xA81409200000000Aull, + 0x0229080008000000ull, 0x0040030000481085ull, 0x5144040000080800ull, 0xA000102120000008ull, + 0x0100110A9640852Cull, 0x2008000000000000ull, 0x0800080020040000ull, 0x8000C024088A0C51ull, + 0xA204000008080000ull, 0x9408109000000428ull, 0x0000950214A81092ull, 0x0000000000000000ull, + 0x2100004001001008ull, 0x04000C024088A045ull, 0x2C22840000000000ull, 0x028B08A111611422ull, + 0x80010A4891200081ull, 0x8A12284804804104ull, 0x0005402004004284ull, 0x2800000000000800ull, + 0x0080019000201A00ull, 0x0000020000000002ull, 0x1100400D29200000ull, 0x01294AC040112040ull, + 0x0802009080140020ull, 0x49204C8400A00100ull, 0x20000014C0400A01ull, 0x0020000000000001ull, + 0x4244891240400800ull, 0x84200000008A10C1ull, 0xA008400000000108ull, 0x0121200040000008ull, + 0x4004000000020000ull, 0x0000080080000900ull, 0x1100000004000000ull, 0x0000014000214042ull, + 0x0000484800090020ull, 0x00000A0802000420ull, 0x4100200200080100ull, 0x0000000000200200ull, + 0x0010048400000010ull, 0x0095248000442242ull, 0x0000000021000500ull, 0x9080000000000000ull, + 0x0044200242000000ull, 0x2824960154000000ull, 0x0000252A94124A55ull, 0xA520515559285400ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0135[64] = { + 1u, 12u, 16u, 24u, 31u, 42u, 49u, 59u, 69u, 73u, 79u, 91u, 95u, 102u, 113u, 120u, + 130u, 136u, 145u, 153u, 160u, 176u, 178u, 182u, 196u, 202u, 212u, 226u, 226u, 232u, 244u, 251u, + 269u, 281u, 295u, 304u, 307u, 315u, 317u, 327u, 341u, 349u, 361u, 370u, 372u, 384u, 394u, 400u, + 406u, 409u, 413u, 416u, 423u, 430u, 436u, 442u, 444u, 449u, 462u, 466u, 469u, 475u, 487u, 505u, }; void recomp_unit_0135_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0135_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A20000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0135[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0135[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0135[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A20000; @@ -703,7 +610,6 @@ L_08A20000: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7448))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 647u, 0x08A1FFB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -720,7 +626,6 @@ L_08A2001C: } L_08A20028: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7428))); goto L_08A20040; @@ -738,7 +643,6 @@ L_08A20040: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7424))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7424))); goto L_08A20058; @@ -746,7 +650,6 @@ L_08A20040: goto L_08A20058; L_08A20058: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7428))); goto L_08A20070; @@ -754,7 +657,6 @@ L_08A20058: goto L_08A20068; L_08A20068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A20088; } @@ -764,7 +666,6 @@ L_08A20070: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7424))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7424))); goto L_08A20088; @@ -818,7 +719,17 @@ L_08A200D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A20118: aot_gpr_29 = (aot_gpr_29 + static_cast(-2848)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -842,7 +753,6 @@ L_08A20174: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A20210; } @@ -886,7 +796,6 @@ L_08A201F0: } L_08A20208: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A20228; } @@ -1120,7 +1029,6 @@ L_08A203BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(368))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(2748), static_cast(ctx.gpr[19])); goto L_08A20408; @@ -1180,9 +1088,7 @@ L_08A20440: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(880))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A20488; } @@ -1196,7 +1102,6 @@ L_08A20458: AOT_REGCACHE_SYNC_OUT(); return; L_08A20464: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A20488; } @@ -1256,7 +1161,6 @@ L_08A204B4: goto L_08A204FC; L_08A204FC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A2050C; } @@ -1274,7 +1178,6 @@ L_08A2050C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1392))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2744))); goto L_08A207E0; @@ -1353,7 +1256,6 @@ L_08A20574: { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[28] = aot_fpr_12 - aot_fpr_13; aot_gpr_31 = (0x08A205C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A205C8u) goto L_08A205C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A205C8: @@ -1428,9 +1330,7 @@ L_08A20624: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26]) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7372))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A207DC; } @@ -1452,7 +1352,6 @@ L_08A20650: goto L_08A20654; L_08A20654: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A20664; } @@ -1460,7 +1359,6 @@ L_08A20654: } L_08A2065C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A207DC; } @@ -1470,9 +1368,7 @@ L_08A20664: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1904))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A207CC; } @@ -1486,7 +1382,6 @@ L_08A2067C: AOT_REGCACHE_SYNC_OUT(); return; L_08A20688: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A207CC; } @@ -1552,7 +1447,6 @@ L_08A206C8: { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[28] = aot_fpr_12 - aot_fpr_13; aot_gpr_31 = (0x08A2071Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2071Cu) goto L_08A2071C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2071C: @@ -1578,7 +1472,6 @@ L_08A2071C: AOT_REGCACHE_SYNC_OUT(); return; L_08A20764: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A207CC; } @@ -1601,7 +1494,6 @@ L_08A2076C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2079C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A207CC; } @@ -1682,7 +1574,6 @@ L_08A207F8: goto L_08A207FC; L_08A207FC: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08A20814; } @@ -1950,7 +1841,6 @@ L_08A209E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A20A14: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A20A74; } @@ -1977,7 +1867,6 @@ L_08A20A5C: aot_gpr_4 = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A20A80; } @@ -1985,7 +1874,6 @@ L_08A20A5C: } L_08A20A6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A20A9C; } @@ -2026,7 +1914,6 @@ L_08A20A9C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7400))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A20AC0; } @@ -2077,7 +1964,17 @@ L_08A20AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A20B34: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -2101,7 +1998,6 @@ L_08A20B7C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A20C08; } @@ -2133,7 +2029,6 @@ L_08A20BE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7584))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A20C24; } @@ -2160,7 +2055,6 @@ L_08A20C10: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A20DE4; } @@ -2184,7 +2078,6 @@ L_08A20C24: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7368))); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A20D84; } @@ -2256,7 +2149,6 @@ L_08A20D1C: aot_gpr_4 = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A20D70; } @@ -2290,7 +2182,6 @@ L_08A20D2C: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7048), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A20D84; } @@ -2301,7 +2192,6 @@ L_08A20D70: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7368))); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A20C6C; } @@ -2309,7 +2199,6 @@ L_08A20D70: } L_08A20D84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A20DCC; } @@ -2317,7 +2206,6 @@ L_08A20D84: } L_08A20D8C: aot_gpr_31 = (0x08A20D94u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A20D94u) goto L_08A20D94; AOT_REGCACHE_SYNC_OUT(); return; L_08A20D94: @@ -2431,9 +2319,7 @@ L_08A20DE4: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A20E78; } @@ -2442,7 +2328,6 @@ L_08A20DE4: L_08A20E64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7356))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A20E8C; } @@ -2450,7 +2335,6 @@ L_08A20E64: } L_08A20E70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2106C; } @@ -2511,7 +2395,6 @@ L_08A20E8C: aot_fpr_12 = ctx.fpr[22] / aot_fpr_12; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7348))); goto L_08A20EE0; @@ -2530,7 +2413,6 @@ L_08A20EE0: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -2584,9 +2466,7 @@ L_08A20F0C: ctx.fpr[22] = ctx.fpr[22] + aot_fpr_12; aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7336))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2106C; } @@ -2611,7 +2491,6 @@ L_08A20FAC: aot_fpr_12 = aot_fpr_20 / aot_fpr_12; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7336))); goto L_08A20FD0; @@ -2630,7 +2509,6 @@ L_08A20FD0: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -2717,7 +2595,6 @@ L_08A210C0: goto L_08A210CC; L_08A210CC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A21130; } @@ -2745,7 +2622,6 @@ L_08A210E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A21100: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A21158; } @@ -2780,7 +2656,6 @@ L_08A21130: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7352))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A210E4; } @@ -2839,7 +2714,17 @@ L_08A211A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A211D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-592)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2863,7 +2748,6 @@ L_08A2122C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A212F0; } @@ -2899,7 +2783,6 @@ L_08A212A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7328))); ctx.gpr[19] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (ctx.gpr[17] | 0u); if (branch_taken) { @@ -2911,7 +2794,6 @@ L_08A212C8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7584))); aot_gpr_4 = (0u | 54u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2130C; } @@ -2948,7 +2830,6 @@ L_08A212F8: ctx.gpr[7] = (ctx.gpr[7] + static_cast(-1)); aot_gpr_6 = (aot_gpr_6 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A21484; } @@ -2984,7 +2865,6 @@ L_08A2130C: L_08A21374: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A213FC; } @@ -2995,7 +2875,6 @@ L_08A21380: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7072), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A21394u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A21394u) goto L_08A21394; AOT_REGCACHE_SYNC_OUT(); return; L_08A21394: @@ -3053,7 +2932,6 @@ L_08A21408: goto L_08A2140C; L_08A2140C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21420; } @@ -3066,7 +2944,6 @@ L_08A21414: goto L_08A21420; L_08A21420: aot_gpr_31 = (0x08A21428u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A21428u) goto L_08A21428; AOT_REGCACHE_SYNC_OUT(); return; L_08A21428: @@ -3104,7 +2981,6 @@ L_08A21464: goto L_08A21468; L_08A21468: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2147C; } @@ -3131,9 +3007,7 @@ L_08A21484: L_08A2148C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A214B0; } @@ -3504,7 +3378,6 @@ L_08A21700: goto L_08A21710; L_08A21710: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A2176C; } @@ -3618,7 +3491,17 @@ L_08A217BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A217FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3642,7 +3525,6 @@ L_08A2184C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2190C; } @@ -3677,7 +3559,6 @@ L_08A218C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (0u | 1u); if (branch_taken) { @@ -3689,7 +3570,6 @@ L_08A218E4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7584))); aot_gpr_4 = (0u | 55u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A21928; } @@ -3726,7 +3606,6 @@ L_08A21914: aot_gpr_6 = (aot_gpr_6 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A21ABC; } @@ -3762,7 +3641,6 @@ L_08A21928: L_08A21990: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8068), 0u); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A219F0; } @@ -3773,7 +3651,6 @@ L_08A2199C: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7084), std::bit_cast(aot_fpr_20)); aot_gpr_31 = (0x08A219B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A219B0u) goto L_08A219B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A219B0: @@ -3818,7 +3695,6 @@ L_08A219F0: } L_08A219FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21A10; } @@ -3832,7 +3708,6 @@ L_08A21A04: L_08A21A10: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7088), std::bit_cast(aot_fpr_20)); aot_gpr_31 = (0x08A21A1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A21A1Cu) goto L_08A21A1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A21A1C: @@ -3866,7 +3741,6 @@ L_08A21A4C: } L_08A21A54: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21A68; } @@ -3879,7 +3753,6 @@ L_08A21A5C: goto L_08A21A68; L_08A21A68: aot_gpr_31 = (0x08A21A70u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A21A70u) goto L_08A21A70; AOT_REGCACHE_SYNC_OUT(); return; L_08A21A70: @@ -3913,7 +3786,6 @@ L_08A21AA0: } L_08A21AA8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21ABC; } @@ -4267,7 +4139,6 @@ L_08A21CF4: goto L_08A21D00; L_08A21D00: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A21D5C; } @@ -4295,7 +4166,6 @@ L_08A21D18: AOT_REGCACHE_SYNC_OUT(); return; L_08A21D34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A21D84; } @@ -4328,7 +4198,6 @@ L_08A21D5C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7264))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21D18; } @@ -4380,7 +4249,17 @@ L_08A21DAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A21DE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4418,7 +4297,6 @@ L_08A21DE8: ctx.gpr[17] = (aot_gpr_29 + static_cast(16)); ctx.gpr[18] = (aot_gpr_4 + static_cast(48)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -4429,9 +4307,7 @@ L_08A21DE8: L_08A21EA8: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21EC4; } @@ -4447,7 +4323,6 @@ L_08A21EBC: } L_08A21EC4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4458,9 +4333,7 @@ L_08A21EC4: L_08A21ED4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21EEC; } @@ -4471,7 +4344,6 @@ L_08A21EE8: goto L_08A21EEC; L_08A21EEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21F04; } @@ -4485,9 +4357,7 @@ L_08A21EF4: goto L_08A21F04; L_08A21F04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21F30; } @@ -4496,9 +4366,7 @@ L_08A21F04: L_08A21F14: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21F30; } @@ -4514,7 +4382,6 @@ L_08A21F28: } L_08A21F30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4525,9 +4392,7 @@ L_08A21F30: L_08A21F40: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21F58; } @@ -4538,7 +4403,6 @@ L_08A21F54: goto L_08A21F58; L_08A21F58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21F70; } @@ -4552,9 +4416,7 @@ L_08A21F60: goto L_08A21F70; L_08A21F70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21F9C; } @@ -4563,9 +4425,7 @@ L_08A21F70: L_08A21F80: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21F9C; } @@ -4581,7 +4441,6 @@ L_08A21F94: } L_08A21F9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4592,9 +4451,7 @@ L_08A21F9C: L_08A21FAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A21FC4; } @@ -4605,7 +4462,6 @@ L_08A21FC0: goto L_08A21FC4; L_08A21FC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A21FDC; } @@ -4653,7 +4509,6 @@ L_08A2201C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); if (branch_taken) { @@ -4668,9 +4523,7 @@ L_08A22054: goto L_08A22060; L_08A22060: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2207C; } @@ -4683,9 +4536,7 @@ L_08A22070: goto L_08A2207C; L_08A2207C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22098; } @@ -4730,7 +4581,6 @@ L_08A220C0: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2215C; } @@ -4784,7 +4634,6 @@ L_08A22168: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); if (branch_taken) { @@ -4804,9 +4653,7 @@ L_08A2218C: L_08A22198: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A221B4; } @@ -4818,9 +4665,7 @@ L_08A221AC: goto L_08A221B4; L_08A221B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A221D0; } @@ -4838,9 +4683,7 @@ L_08A221C4: L_08A221D0: ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[15]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A221EC; } @@ -4852,9 +4695,7 @@ L_08A221E4: goto L_08A221EC; L_08A221EC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22208; } @@ -4872,9 +4713,7 @@ L_08A221FC: L_08A22208: ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[17]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22224; } @@ -4911,7 +4750,17 @@ L_08A22238: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A22268: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5020,7 +4869,6 @@ L_08A2232C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2192), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1984), 0u); aot_gpr_31 = (0x08A223ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A223ECu) goto L_08A223EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A223EC: @@ -5051,7 +4899,6 @@ L_08A223F4: } L_08A22424: aot_gpr_31 = (0x08A2242Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2242Cu) goto L_08A2242C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2242C: @@ -5066,7 +4913,6 @@ L_08A22430: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2164), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A22490; } @@ -5092,7 +4938,6 @@ L_08A22454: L_08A22490: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4212))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A224A0; } @@ -5189,7 +5034,17 @@ L_08A22504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A225A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-1280)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5240,7 +5095,6 @@ L_08A225A4: L_08A22654: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2075))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A2266C; } @@ -5249,7 +5103,6 @@ L_08A22654: L_08A22660: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2048))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A22674; } @@ -5263,7 +5116,6 @@ L_08A2266C: L_08A22674: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2268C; } @@ -5271,7 +5123,6 @@ L_08A22674: } L_08A22680: aot_gpr_31 = (0x08A22688u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A22688u) goto L_08A22688; AOT_REGCACHE_SYNC_OUT(); return; L_08A22688: @@ -5288,7 +5139,6 @@ L_08A2268C: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A226E0; } @@ -5342,7 +5192,6 @@ L_08A22718: L_08A22734: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2279C; } @@ -5400,7 +5249,6 @@ L_08A227A4: L_08A227AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2651))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A227C0; } @@ -5414,7 +5262,6 @@ L_08A227B8: L_08A227C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A227D4; } @@ -5442,9 +5289,7 @@ L_08A227E0: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22850; } @@ -5461,9 +5306,7 @@ L_08A22814: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22850; } @@ -5471,7 +5314,6 @@ L_08A22814: } L_08A22848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2289C; } @@ -5494,7 +5336,6 @@ L_08A22850: L_08A2287C: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5544,9 +5385,7 @@ L_08A228EC: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2295C; } @@ -5563,9 +5402,7 @@ L_08A22920: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2295C; } @@ -5596,7 +5433,6 @@ L_08A2295C: L_08A22988: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5615,7 +5451,6 @@ L_08A229A8: L_08A229AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A229E0; } @@ -5628,7 +5463,6 @@ L_08A229B8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A229E0; } @@ -5642,7 +5476,6 @@ L_08A229D4: L_08A229E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2072))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A229F8; } @@ -5666,9 +5499,7 @@ L_08A22A00: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22A2C; } @@ -5689,7 +5520,6 @@ L_08A22A2C: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A22A7C; } @@ -5703,7 +5533,6 @@ L_08A22A58: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A22A7C; } @@ -5715,7 +5544,6 @@ L_08A22A78: L_08A22A7C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A22A90; } @@ -5723,7 +5551,6 @@ L_08A22A7C: } L_08A22A88: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A22C58; } @@ -5776,7 +5603,6 @@ L_08A22A90: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2071))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A22BD4; } @@ -5956,7 +5782,6 @@ L_08A22B00: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A22C2C; } @@ -6099,9 +5924,7 @@ L_08A22CD8: L_08A22CE4: aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22D00; } @@ -6119,9 +5942,7 @@ L_08A22D00: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22D1C; } @@ -6133,9 +5954,7 @@ L_08A22D18: L_08A22D1C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2820))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22DD4; } @@ -6144,7 +5963,6 @@ L_08A22D1C: L_08A22D30: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2820))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_20)) && aot_fpr_14 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(2432)); if (branch_taken) { @@ -6250,7 +6068,6 @@ L_08A22D5C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A22EB8; } @@ -6259,9 +6076,7 @@ L_08A22D5C: L_08A22DD4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2820))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A22EB8; } @@ -6270,7 +6085,6 @@ L_08A22DD4: L_08A22DE8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2816))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_20)) && aot_fpr_14 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(2432)); if (branch_taken) { @@ -6400,9 +6214,7 @@ L_08A22E20: L_08A22EB8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2812))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A232F0; } @@ -6416,7 +6228,6 @@ L_08A22ECC: ctx.gpr[20] = (aot_gpr_16 + static_cast(2416)); ctx.gpr[21] = (aot_gpr_16 + static_cast(2448)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_gpr_29 + static_cast(176)); if (branch_taken) { @@ -6508,7 +6319,6 @@ L_08A22F0C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A23044; } @@ -6554,9 +6364,7 @@ L_08A22F78: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A23044; } @@ -6571,7 +6379,6 @@ L_08A22FB4: L_08A22FC0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -6757,7 +6564,6 @@ L_08A230C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A23120; } @@ -6856,7 +6662,6 @@ L_08A2317C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_6 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A23268; } @@ -7017,7 +6822,6 @@ L_08A231AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A232E0; } @@ -7123,7 +6927,6 @@ L_08A232E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2152))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(216), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A238D0; } @@ -7132,7 +6935,6 @@ L_08A232E0: L_08A232F0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2812))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -7143,9 +6945,7 @@ L_08A232F0: L_08A23304: ctx.fpr[30] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A238D0; } @@ -7157,7 +6957,6 @@ L_08A23318: ctx.gpr[20] = (aot_gpr_16 + static_cast(2448)); ctx.gpr[18] = (aot_gpr_29 + static_cast(176)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_gpr_29 + static_cast(480)); if (branch_taken) { @@ -7203,7 +7002,6 @@ L_08A23354: AOT_REGCACHE_SYNC_OUT(); return; L_08A23398: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A23414; } @@ -7298,7 +7096,6 @@ L_08A233A0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A23440; } @@ -7331,7 +7128,6 @@ L_08A23414: L_08A23440: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A23514; } @@ -7378,9 +7174,7 @@ L_08A2344C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A23514; } @@ -7395,7 +7189,6 @@ L_08A2348C: L_08A23498: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7440,9 +7233,7 @@ L_08A234B8: L_08A23514: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2152))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A23564; } @@ -7491,7 +7282,6 @@ L_08A2358C: AOT_REGCACHE_SYNC_OUT(); return; L_08A235A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A23620; } @@ -7586,7 +7376,6 @@ L_08A235AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2364C; } @@ -7701,7 +7490,6 @@ L_08A236B4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A236F8; } @@ -7754,7 +7542,6 @@ L_08A23724: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_6 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A23810; } @@ -7915,7 +7702,6 @@ L_08A23754: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A23888; } @@ -8020,9 +7806,7 @@ L_08A23810: L_08A23888: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2152))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A238A8; } @@ -8087,7 +7871,6 @@ L_08A238D0: L_08A23904: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8110,7 +7893,6 @@ L_08A23924: L_08A23934: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_29 + static_cast(192)); if (branch_taken) { @@ -8147,7 +7929,6 @@ L_08A23958: L_08A2399C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A23A60; } @@ -8156,7 +7937,6 @@ L_08A2399C: L_08A239A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2070))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A23A60; } @@ -8165,7 +7945,6 @@ L_08A239A8: L_08A239B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A23A60; } @@ -8173,12 +7952,10 @@ L_08A239B4: } L_08A239C0: aot_gpr_31 = (0x08A239C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 518u, 0x08AAE910u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A239C8u) goto L_08A239C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A239C8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A23A60; } @@ -8187,7 +7964,6 @@ L_08A239C8: L_08A239D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A23A60; } @@ -8213,7 +7989,6 @@ L_08A239DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A23A20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A23A60; } @@ -8250,9 +8025,7 @@ L_08A23A28: L_08A23A60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2872))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A23BDC; } @@ -8449,7 +8222,6 @@ L_08A23CC8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(212), std::bit_cast(ctx.fpr[0])); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_31 = (0x08A23CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 463u, 0x08A1AE34u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23CD8u) goto L_08A23CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08A23CD8: @@ -8486,9 +8258,7 @@ L_08A23CD8: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A23E08; } @@ -8506,7 +8276,6 @@ L_08A23D70: AOT_REGCACHE_SYNC_OUT(); return; L_08A23D78: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A23E08; } @@ -8521,7 +8290,6 @@ L_08A23D80: ctx.gpr[17] = (ctx.gpr[17] + static_cast(25)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 151 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A23DA8; } @@ -8575,7 +8343,6 @@ L_08A23DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A23E00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A23E7C; } @@ -8594,7 +8361,6 @@ L_08A23E10: L_08A23E18: aot_gpr_4 = (0u | 11u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A23E7C; } @@ -8655,7 +8421,6 @@ L_08A23E84: AOT_REGCACHE_SYNC_OUT(); return; L_08A23E8C: aot_gpr_31 = (0x08A23E94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 480u, 0x08A1E998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23E94u) goto L_08A23E94; AOT_REGCACHE_SYNC_OUT(); return; L_08A23E94: @@ -8722,7 +8487,6 @@ L_08A23F38: aot_gpr_4 = (aot_gpr_4 & 15u); ctx.gpr[18] = (0u | 3u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A23F70; } @@ -8750,7 +8514,6 @@ L_08A23F6C: goto L_08A23F70; L_08A23F70: aot_gpr_31 = (0x08A23F78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 362u, 0x08A1A6F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23F78u) goto L_08A23F78; AOT_REGCACHE_SYNC_OUT(); return; L_08A23F78: @@ -8760,7 +8523,6 @@ L_08A23F78: AOT_REGCACHE_SYNC_OUT(); return; L_08A23F80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A23FB0; } @@ -8768,7 +8530,6 @@ L_08A23F80: } L_08A23F88: aot_gpr_31 = (0x08A23F90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 362u, 0x08A1A6F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23F90u) goto L_08A23F90; AOT_REGCACHE_SYNC_OUT(); return; L_08A23F90: @@ -8778,7 +8539,6 @@ L_08A23F90: AOT_REGCACHE_SYNC_OUT(); return; L_08A23F98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A23FB0; } @@ -8796,7 +8556,6 @@ L_08A23FA0: } L_08A23FB0: aot_gpr_31 = (0x08A23FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 450u, 0x08A1AD74u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23FB8u) goto L_08A23FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08A23FB8: @@ -8806,7 +8565,6 @@ L_08A23FB8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1960), std::bit_cast(aot_fpr_12)); ctx.gpr[17] = (0u | 0u); aot_gpr_31 = (0x08A23FD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23FD4u) goto L_08A23FD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A23FD4: @@ -8820,7 +8578,6 @@ L_08A23FD4: } L_08A23FE0: aot_gpr_31 = (0x08A23FE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A23FE8u) goto L_08A23FE8; AOT_REGCACHE_SYNC_OUT(); return; L_08A23FE8: diff --git a/profiles/vcs/generated/generated_unit_0136.cpp b/profiles/vcs/generated/generated_unit_0136.cpp index 01ae116..5427039 100644 --- a/profiles/vcs/generated/generated_unit_0136.cpp +++ b/profiles/vcs/generated/generated_unit_0136.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0136[4092] = { - 1, 0, 2, 0, 0, 3, 4, 0, 5, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 13, 0, 0, 0, 14, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, - 0, 21, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 29, 0, 30, 0, 0, 31, 0, 0, 32, 0, - 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 43, 0, 0, 0, 44, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 48, 0, 49, 0, 50, 0, 0, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, - 0, 0, 0, 0, 66, 0, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 0, 73, 0, - 0, 74, 0, 75, 0, 0, 76, 0, 0, 0, 0, 77, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 82, - 0, 0, 83, 0, 84, 0, 0, 85, 0, 0, 86, 0, 0, 87, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, - 0, 0, 0, 0, 96, 0, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 101, 0, - 102, 0, 0, 0, 0, 103, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 106, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 111, 0, 0, 112, 0, 113, 0, - 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 0, 0, 0, 0, 127, 128, 0, 0, 0, 129, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 137, 0, 138, 0, 0, 139, 0, 0, 0, 140, 0, - 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, - 0, 145, 0, 0, 0, 0, 146, 0, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, - 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 162, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 0, 0, - 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 184, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 196, 0, 197, 0, 198, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 204, 0, 205, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, 209, 0, 210, 0, 211, - 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, - 222, 0, 223, 0, 224, 0, 0, 0, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 0, 0, 234, 0, 235, - 0, 0, 0, 236, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, - 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, - 0, 0, 249, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 253, 0, 254, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 259, 0, 0, 260, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 263, 0, 264, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 265, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 273, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 0, 276, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 283, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, 0, - 0, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, - 293, 0, 0, 0, 0, 294, 0, 0, 295, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 302, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 307, - 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 311, 0, 312, 0, 313, 0, - 314, 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, - 0, 326, 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 338, 0, 339, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, - 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 355, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, - 358, 0, 359, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 366, 0, 367, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 374, 0, 375, 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 380, 0, 381, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 384, 0, 385, 0, 0, 0, 0, 386, 0, 387, 0, 388, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, - 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 400, 0, 0, 401, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 405, 0, 406, 0, 407, - 0, 0, 0, 0, 0, 408, 0, 409, 0, 410, 0, 0, 411, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 419, 0, 420, 0, 0, 0, 421, 0, 422, 0, 0, 0, 423, 0, 0, 0, 0, 424, 0, 0, - 0, 0, 0, 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, - 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, - 449, 0, 450, 0, 0, 0, 451, 0, 452, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, - 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 467, 0, 0, 0, 468, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 470, 0, 471, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, - 475, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 479, 0, 480, 0, 0, - 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 485, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 493, 0, 494, 0, 495, 0, 0, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, 0, 498, 0, 499, 0, 500, 0, 0, 0, 0, 0, 501, 0, - 502, 0, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 506, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, - 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, - 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, 0, 522, 0, 523, 0, 0, 0, - 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 0, 0, 529, 0, - 530, 0, 531, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 0, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, - 543, 0, 0, 0, 544, 0, 545, 0, 0, 0, 546, 0, 0, 0, 0, 547, 0, 0, 0, 548, 0, 549, 0, 550, 0, 551, 0, 0, 0, 552, 0, 553, - 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 556, 0, 557, 0, 0, 558, 0, 559, 0, 560, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, - 563, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, - 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, - 0, 0, 0, 573, 0, 574, 0, 0, 575, 0, 576, 0, 577, 0, 0, 0, 578, 0, 579, 0, 580, 0, 0, 0, 581, 0, 582, 0, 583, 0, 584, 0, - 585, 0, 586, 0, 0, 0, 587, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 591, 0, 592, 0, 593, 0, 594, 0, 0, 0, 595, 0, - 596, 0, 0, 0, 0, 597, 0, 598, 0, 0, 0, 0, 599, 0, 600, 0, 0, 601, 0, 602, 0, 603, 0, 0, 0, 604, 0, 0, 605, 0, 0, 0, - 0, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 609, 0, 0, 0, 610, 0, 0, - 0, 0, 0, 0, 0, 0, 611, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 616, 0, 617, 0, 618, 0, 0, 0, 0, 0, 619, 0, 620, 0, 0, 621, 0, 622, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 0, - 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 636, 0, 637, 0, 0, 0, 0, 0, - 638, 0, 639, 0, 0, 640, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 643, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, - 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, 0, 650, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 0, 653, - 0, 654, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 658, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 664, 0, 665, 0, 0, 0, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 0, 0, 668, 0, 669, 0, - 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 680, 0, 0, 0, 0, 0, 0, 0, 681, 0, 682, 0, 0, 0, 0, 0, 683, 0, 684, 0, 685, - 0, 0, 0, 0, 0, 686, 0, 687, 0, 688, 0, 0, 689, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 692, 0, 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 696, 0, 697, 0, 698, 0, 0, 0, 0, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 0, 704, 0, 0, 0, 0, 705, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 709, 0, 710, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 712, 0, 713, 0, 0, 0, 714, 0, 0, 0, 0, 715, 0, 0, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 718, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 721, - 0, 0, 0, 722, 0, 0, 0, 0, 0, 723, 0, 724, 0, 725, 0, 726, 0, 0, 727, 0, 0, 0, 0, 728, 0, 729, 0, 0, 0, 0, 0, 730, - 0, 731, 0, 732, 0, 0, 0, 0, 0, 0, 0, 733, 0, 734, 0, 0, 0, 0, 0, 735, 0, 736, 0, 737, 0, 738, 0, 739, 0, 0, 0, 740, - 0, 0, 741, 0, 742, 0, 0, 743, 0, 0, 0, 744, 0, 0, 745, 0, 0, 0, 0, 0, 746, 0, 0, 747, 0, 0, 0, 0, 0, 748, 0, 749, - 0, 0, 0, 0, 750, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 755, 0, - 0, 0, 0, 756, 0, 757, 0, 0, 758, 0, 759, 0, 760, 0, 0, 0, 761, 0, 762, 0, 0, 0, 763, 764, 0, 0, 0, 0, 0, 0, 765, 0, - 0, 766, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 769, 0, 0, 0, 770, 0, 0, 0, 771, 0, 772, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0136[64] = { + 0x1222102046AAA165ull, 0x1008010249504556ull, 0x8980100100002020ull, 0x800A810045490200ull, + 0x1002404008902008ull, 0x00000000080000D0ull, 0x8484484A42420000ull, 0x0500000000012494ull, + 0x540000D044500040ull, 0x0000004800000A21ull, 0x0000004852281000ull, 0x0140400002080000ull, + 0x000018C200430801ull, 0x44A8240040000220ull, 0xA2AAAA4280000884ull, 0x02AA000009400908ull, + 0x4A00484515550010ull, 0x2800A40005500000ull, 0x0000250025500100ull, 0x0004A004A85002A8ull, + 0xA2AAAA150A005500ull, 0x5002554850000108ull, 0x1280128015400044ull, 0x0128012801540000ull, + 0x0012801280154000ull, 0x4000055428015400ull, 0xA800002500255521ull, 0x0025002555001002ull, + 0x004A004AAA800800ull, 0xA004AA0020055000ull, 0x128012AA00200088ull, 0x00AA005540040000ull, + 0x0AA0055002A80154ull, 0x88941000206A1540ull, 0xAA80014800000510ull, 0x02001200400212A0ull, + 0x1101422021145500ull, 0x0400AA0000094009ull, 0x0212114554140540ull, 0x44040008004A0040ull, + 0x5000004A00488808ull, 0x0084A0A02A002005ull, 0x0020400080048010ull, 0x0020010941505015ull, + 0x1101088080010009ull, 0x4140480115454009ull, 0xA2A8845155551505ull, 0x2800104121152850ull, + 0x5515152820042402ull, 0x122A50A145521145ull, 0x0200424022800104ull, 0x1094A0A800100000ull, + 0x0880801000900200ull, 0x0080042505011101ull, 0x8280A80140040024ull, 0x2802001200400212ull, + 0x4008004250501500ull, 0xA8280A8014004002ull, 0x01101480000052A0ull, 0x0090020010955054ull, + 0x81004A0048451028ull, 0x8AA8280A8284AA08ull, 0x41080290A0904894ull, 0x0A22801240C51528ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0136[64] = { + 1u, 21u, 37u, 45u, 57u, 66u, 70u, 83u, 91u, 102u, 108u, 116u, 121u, 131u, 141u, 158u, + 169u, 185u, 194u, 203u, 216u, 236u, 249u, 261u, 271u, 281u, 293u, 308u, 320u, 332u, 344u, 356u, + 366u, 382u, 397u, 408u, 417u, 431u, 441u, 457u, 465u, 475u, 487u, 493u, 506u, 515u, 530u, 554u, + 568u, 585u, 606u, 615u, 625u, 632u, 643u, 654u, 663u, 674u, 686u, 696u, 709u, 722u, 741u, 756u, }; void recomp_unit_0136_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0136_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A24000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0136[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0136[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0136[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A24000; @@ -951,7 +858,6 @@ L_08A24000: L_08A24008: aot_gpr_4 = (ctx.gpr[19] | ctx.gpr[2]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A24018; } @@ -968,9 +874,7 @@ L_08A24018: L_08A24020: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2404C; } @@ -978,12 +882,10 @@ L_08A24020: } L_08A24034: aot_gpr_31 = (0x08A2403Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2403Cu) goto L_08A2403C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2403C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2404C; } @@ -997,7 +899,6 @@ L_08A24044: goto L_08A2404C; L_08A2404C: aot_gpr_31 = (0x08A24054u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24054u) goto L_08A24054; AOT_REGCACHE_SYNC_OUT(); return; L_08A24054: @@ -1007,7 +908,6 @@ L_08A24054: AOT_REGCACHE_SYNC_OUT(); return; L_08A2405C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A240F0; } @@ -1077,9 +977,7 @@ L_08A240E4: L_08A240F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1960))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24108; } @@ -1125,7 +1023,6 @@ L_08A24128: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1960))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1952), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A24138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0134_entry, 134u, 479u, 0x08A1E990u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24138u) goto L_08A24138; AOT_REGCACHE_SYNC_OUT(); return; L_08A24138: @@ -1134,7 +1031,6 @@ L_08A24138: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1960), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2416C; } @@ -1147,7 +1043,6 @@ L_08A24150: AOT_REGCACHE_SYNC_OUT(); return; L_08A24158: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2416C; } @@ -1161,7 +1056,6 @@ L_08A24160: L_08A2416C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2067))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A24184; } @@ -1170,7 +1064,6 @@ L_08A2416C: L_08A24178: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2068))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A241A0; } @@ -1220,7 +1113,6 @@ L_08A241F0: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2116), aot_gpr_4); ctx.gpr[5] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2112))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A24234; } @@ -1255,7 +1147,6 @@ L_08A24234: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == aot_gpr_18; - // nop if (branch_taken) { goto L_08A242E0; } @@ -1273,7 +1164,6 @@ L_08A24280: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); ctx.gpr[5] = (0u | 37u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A242E0; } @@ -1299,7 +1189,6 @@ L_08A242DC: L_08A242E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1341,7 +1230,6 @@ L_08A24324: L_08A24340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1350,7 +1238,6 @@ L_08A24340: L_08A2434C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1363,7 +1250,6 @@ L_08A24358: AOT_REGCACHE_SYNC_OUT(); return; L_08A24360: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1409,7 +1295,6 @@ L_08A243BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A243C4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1427,7 +1312,6 @@ L_08A243CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); ctx.gpr[5] = (0u | 37u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1469,7 +1353,6 @@ L_08A24434: L_08A24450: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(228))); { const bool branch_taken = aot_gpr_4 == aot_gpr_18; - // nop if (branch_taken) { goto L_08A2451C; } @@ -1546,7 +1429,6 @@ L_08A244F0: goto L_08A24510; L_08A24510: aot_gpr_31 = (0x08A24518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 438u, 0x08A1ACCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24518u) goto L_08A24518; AOT_REGCACHE_SYNC_OUT(); return; L_08A24518: @@ -1579,7 +1461,17 @@ L_08A2451C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2456C: aot_gpr_29 = (aot_gpr_29 + static_cast(-640)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(aot_fpr_24), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1663,7 +1555,6 @@ L_08A2456C: aot_gpr_17 = (ctx.gpr[6] | 0u); ctx.gpr[19] = (ctx.gpr[7] | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[13]) || std::isnan(aot_fpr_20)) && ctx.fpr[13] == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(568), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1674,9 +1565,7 @@ L_08A2456C: L_08A24644: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_24)) && aot_fpr_12 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2468C; } @@ -1691,7 +1580,6 @@ L_08A24658: L_08A24664: aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1706,7 +1594,6 @@ L_08A24678: goto L_08A24684; L_08A24684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A246B8; } @@ -1721,7 +1608,6 @@ L_08A2468C: L_08A24698: aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1736,9 +1622,7 @@ L_08A246AC: goto L_08A246B8; L_08A246B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_24)) && ctx.fpr[26] == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A246DC; } @@ -1747,9 +1631,7 @@ L_08A246B8: L_08A246C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_24)) && aot_fpr_12 == aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24708; } @@ -1764,7 +1646,6 @@ L_08A246DC: L_08A246E8: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1901,7 +1782,6 @@ L_08A24740: AOT_REGCACHE_SYNC_OUT(); return; L_08A247E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A24818; } @@ -1983,7 +1863,6 @@ L_08A24818: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08A24850u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24850u) goto L_08A24850; AOT_REGCACHE_SYNC_OUT(); return; L_08A24850: @@ -2001,9 +1880,7 @@ L_08A24858: AOT_REGCACHE_SYNC_OUT(); return; L_08A24868: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24898; } @@ -2013,7 +1890,6 @@ L_08A24878: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8896))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7664))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7664))); goto L_08A24890; @@ -2048,7 +1924,6 @@ L_08A2489C: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A248F0; } @@ -2056,7 +1931,6 @@ L_08A2489C: } L_08A248E8: aot_gpr_31 = (0x08A248F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A248F0u) goto L_08A248F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A248F0: @@ -2066,7 +1940,6 @@ L_08A248F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A248F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A24914; } @@ -2261,7 +2134,6 @@ L_08A24998: aot_gpr_18 = (aot_gpr_29 + static_cast(304)); ctx.gpr[21] = (aot_gpr_29 + static_cast(320)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_gpr_29 + static_cast(240)); if (branch_taken) { @@ -2274,9 +2146,7 @@ L_08A24A30: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24A78; } @@ -2289,9 +2159,7 @@ L_08A24A4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A24A54: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24A98; } @@ -2305,7 +2173,6 @@ L_08A24A64: AOT_REGCACHE_SYNC_OUT(); return; L_08A24A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A24A98; } @@ -2314,9 +2181,7 @@ L_08A24A70: L_08A24A78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7664))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24A98; } @@ -2441,9 +2306,7 @@ L_08A24A98: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24B64; } @@ -2549,7 +2412,6 @@ L_08A24B64: aot_fpr_22 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A24CAC; } @@ -2563,7 +2425,6 @@ L_08A24BB8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A24CAC; } @@ -2580,9 +2441,7 @@ L_08A24BE0: ctx.fpr[13] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = ctx.fpr[13]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24CAC; } @@ -2613,9 +2472,7 @@ L_08A24C00: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24C58; } @@ -2624,9 +2481,7 @@ L_08A24C00: L_08A24C2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24C44; } @@ -2671,9 +2526,7 @@ L_08A24C58: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24CAC; } @@ -2682,9 +2535,7 @@ L_08A24C58: L_08A24C84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(84))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_24)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24C9C; } @@ -2776,7 +2627,17 @@ L_08A24D24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A24D78: aot_gpr_29 = (aot_gpr_29 + static_cast(-688)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, aot_gpr_18, aot_gpr_31}; @@ -2795,7 +2656,6 @@ L_08A24D78: L_08A24DA8: aot_gpr_4 = (ctx.gpr[5] < static_cast(30) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -2807,11 +2667,20 @@ L_08A24DB4: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[5]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A24DCC: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -2822,13 +2691,11 @@ L_08A24DCC: } L_08A24DD4: aot_gpr_31 = (0x08A24DDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24DDCu) goto L_08A24DDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A24DDC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A24E84; } @@ -2838,7 +2705,6 @@ L_08A24DE8: ctx.gpr[5] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[6] = (0u | 1u); { const bool branch_taken = ctx.gpr[5] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A24E08; } @@ -2848,7 +2714,6 @@ L_08A24DF8: ctx.gpr[5] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[6] = (0u | 2u); { const bool branch_taken = ctx.gpr[5] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A24E1C; } @@ -2859,7 +2724,6 @@ L_08A24E08: ctx.gpr[5] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[5] + static_cast(86)))))); ctx.gpr[6] = (0u | 278u); { const bool branch_taken = ctx.gpr[5] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A24EC4; } @@ -2869,7 +2733,6 @@ L_08A24E1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 246u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A24EBC; } @@ -2900,7 +2763,6 @@ L_08A24E2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A24E7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A24EB4; } @@ -2911,7 +2773,6 @@ L_08A24E84: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A24EAC; } @@ -2925,7 +2786,6 @@ L_08A24E98: AOT_REGCACHE_SYNC_OUT(); return; L_08A24EA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -2965,12 +2825,10 @@ L_08A24EC4: } L_08A24ECC: aot_gpr_31 = (0x08A24ED4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24ED4u) goto L_08A24ED4; AOT_REGCACHE_SYNC_OUT(); return; L_08A24ED4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A24F20; } @@ -2978,14 +2836,12 @@ L_08A24ED4: } L_08A24EDC: aot_gpr_31 = (0x08A24EE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24EE4u) goto L_08A24EE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A24EE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A24F0C; } @@ -2993,14 +2849,12 @@ L_08A24EE4: } L_08A24EF4: aot_gpr_31 = (0x08A24EFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24EFCu) goto L_08A24EFC; AOT_REGCACHE_SYNC_OUT(); return; L_08A24EFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A24F20; } @@ -3011,7 +2865,6 @@ L_08A24F0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A24FD4; } @@ -3039,7 +2892,6 @@ L_08A24F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A24F58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A24FCC; } @@ -3109,9 +2961,7 @@ L_08A24F6C: aot_gpr_4 = (16928u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A24FDC; } @@ -3119,7 +2969,6 @@ L_08A24F6C: } L_08A24FC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A25010; } @@ -3143,7 +2992,6 @@ L_08A24FD4: } L_08A24FDC: aot_gpr_31 = (0x08A24FE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A24FE4u) goto L_08A24FE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A24FE4: @@ -3171,9 +3019,7 @@ L_08A24FE4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25050; } @@ -3197,9 +3043,7 @@ L_08A25010: aot_gpr_4 = (16416u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25048; } @@ -3207,7 +3051,6 @@ L_08A25010: } L_08A25040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3231,12 +3074,10 @@ L_08A25050: } L_08A25058: aot_gpr_31 = (0x08A25060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25060u) goto L_08A25060; AOT_REGCACHE_SYNC_OUT(); return; L_08A25060: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A250AC; } @@ -3244,14 +3085,12 @@ L_08A25060: } L_08A25068: aot_gpr_31 = (0x08A25070u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25070u) goto L_08A25070; AOT_REGCACHE_SYNC_OUT(); return; L_08A25070: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A25098; } @@ -3259,14 +3098,12 @@ L_08A25070: } L_08A25080: aot_gpr_31 = (0x08A25088u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25088u) goto L_08A25088; AOT_REGCACHE_SYNC_OUT(); return; L_08A25088: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A250AC; } @@ -3277,7 +3114,6 @@ L_08A25098: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A25160; } @@ -3305,7 +3141,6 @@ L_08A250B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A250E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25158; } @@ -3375,9 +3210,7 @@ L_08A250F8: aot_gpr_4 = (16384u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25168; } @@ -3385,7 +3218,6 @@ L_08A250F8: } L_08A25150: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A251BC; } @@ -3429,9 +3261,7 @@ L_08A25168: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A251B4; } @@ -3465,9 +3295,7 @@ L_08A251BC: aot_gpr_4 = (16872u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25220; } @@ -3475,7 +3303,6 @@ L_08A251BC: } L_08A251EC: aot_gpr_31 = (0x08A251F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A251F4u) goto L_08A251F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A251F4: @@ -3503,9 +3330,7 @@ L_08A251F4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25260; } @@ -3529,9 +3354,7 @@ L_08A25220: aot_gpr_4 = (16384u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25258; } @@ -3539,7 +3362,6 @@ L_08A25220: } L_08A25250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3583,7 +3405,6 @@ L_08A25274: AOT_REGCACHE_SYNC_OUT(); return; L_08A252A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25314; } @@ -3653,9 +3474,7 @@ L_08A252B4: aot_gpr_4 = (16960u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2531C; } @@ -3663,7 +3482,6 @@ L_08A252B4: } L_08A2530C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3679,7 +3497,6 @@ L_08A25314: } L_08A2531C: aot_gpr_31 = (0x08A25324u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25324u) goto L_08A25324; AOT_REGCACHE_SYNC_OUT(); return; L_08A25324: @@ -3707,9 +3524,7 @@ L_08A25324: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2530C; } @@ -3728,7 +3543,6 @@ L_08A25358: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A25374; } @@ -3736,7 +3550,6 @@ L_08A25358: } L_08A2536C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3772,7 +3585,6 @@ L_08A25388: AOT_REGCACHE_SYNC_OUT(); return; L_08A253B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25428; } @@ -3842,9 +3654,7 @@ L_08A253C8: aot_gpr_4 = (16920u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25430; } @@ -3852,7 +3662,6 @@ L_08A253C8: } L_08A25420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3868,7 +3677,6 @@ L_08A25428: } L_08A25430: aot_gpr_31 = (0x08A25438u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25438u) goto L_08A25438; AOT_REGCACHE_SYNC_OUT(); return; L_08A25438: @@ -3896,9 +3704,7 @@ L_08A25438: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25420; } @@ -3917,7 +3723,6 @@ L_08A2546C: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A25488; } @@ -3925,7 +3730,6 @@ L_08A2546C: } L_08A25480: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3944,7 +3748,6 @@ L_08A25490: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A254BC; } @@ -3952,7 +3755,6 @@ L_08A25490: } L_08A254A4: aot_gpr_31 = (0x08A254ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A254ACu) goto L_08A254AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A254AC: @@ -3962,7 +3764,6 @@ L_08A254AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A254B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A254C4; } @@ -3970,7 +3771,6 @@ L_08A254B4: } L_08A254BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -3986,12 +3786,10 @@ L_08A254C4: } L_08A254CC: aot_gpr_31 = (0x08A254D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A254D4u) goto L_08A254D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A254D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25520; } @@ -3999,14 +3797,12 @@ L_08A254D4: } L_08A254DC: aot_gpr_31 = (0x08A254E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A254E4u) goto L_08A254E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A254E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A2550C; } @@ -4014,14 +3810,12 @@ L_08A254E4: } L_08A254F4: aot_gpr_31 = (0x08A254FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A254FCu) goto L_08A254FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A254FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A25520; } @@ -4032,7 +3826,6 @@ L_08A2550C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A255B0; } @@ -4063,7 +3856,6 @@ L_08A25520: AOT_REGCACHE_SYNC_OUT(); return; L_08A25570: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A255A8; } @@ -4074,7 +3866,6 @@ L_08A25578: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A255A0; } @@ -4088,7 +3879,6 @@ L_08A2558C: AOT_REGCACHE_SYNC_OUT(); return; L_08A25598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4140,7 +3930,6 @@ L_08A255C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A255F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25660; } @@ -4193,9 +3982,7 @@ L_08A25618: aot_gpr_4 = (16800u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25668; } @@ -4203,7 +3990,6 @@ L_08A25618: } L_08A25658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4219,7 +4005,6 @@ L_08A25660: } L_08A25668: aot_gpr_31 = (0x08A25670u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25670u) goto L_08A25670; AOT_REGCACHE_SYNC_OUT(); return; L_08A25670: @@ -4247,9 +4032,7 @@ L_08A25670: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25658; } @@ -4285,7 +4068,6 @@ L_08A256B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A256DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25750; } @@ -4355,9 +4137,7 @@ L_08A256F0: aot_gpr_4 = (16640u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25758; } @@ -4365,7 +4145,6 @@ L_08A256F0: } L_08A25748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4381,7 +4160,6 @@ L_08A25750: } L_08A25758: aot_gpr_31 = (0x08A25760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25760u) goto L_08A25760; AOT_REGCACHE_SYNC_OUT(); return; L_08A25760: @@ -4409,9 +4187,7 @@ L_08A25760: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25748; } @@ -4447,7 +4223,6 @@ L_08A257A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A257CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25840; } @@ -4517,9 +4292,7 @@ L_08A257E0: aot_gpr_4 = (16840u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25848; } @@ -4527,7 +4300,6 @@ L_08A257E0: } L_08A25838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4543,7 +4315,6 @@ L_08A25840: } L_08A25848: aot_gpr_31 = (0x08A25850u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25850u) goto L_08A25850; AOT_REGCACHE_SYNC_OUT(); return; L_08A25850: @@ -4571,9 +4342,7 @@ L_08A25850: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25838; } @@ -4609,7 +4378,6 @@ L_08A25890: AOT_REGCACHE_SYNC_OUT(); return; L_08A258BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25930; } @@ -4679,9 +4447,7 @@ L_08A258D0: aot_gpr_4 = (16640u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25938; } @@ -4689,7 +4455,6 @@ L_08A258D0: } L_08A25928: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4705,7 +4470,6 @@ L_08A25930: } L_08A25938: aot_gpr_31 = (0x08A25940u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25940u) goto L_08A25940; AOT_REGCACHE_SYNC_OUT(); return; L_08A25940: @@ -4733,9 +4497,7 @@ L_08A25940: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25928; } @@ -4754,7 +4516,6 @@ L_08A25974: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A25990; } @@ -4762,7 +4523,6 @@ L_08A25974: } L_08A25988: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4778,12 +4538,10 @@ L_08A25990: } L_08A25998: aot_gpr_31 = (0x08A259A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A259A0u) goto L_08A259A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A259A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25A00; } @@ -4814,7 +4572,6 @@ L_08A259A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A259F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25A30; } @@ -4825,7 +4582,6 @@ L_08A25A00: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A25A28; } @@ -4839,7 +4595,6 @@ L_08A25A14: AOT_REGCACHE_SYNC_OUT(); return; L_08A25A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -4863,12 +4618,10 @@ L_08A25A30: } L_08A25A38: aot_gpr_31 = (0x08A25A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25A40u) goto L_08A25A40; AOT_REGCACHE_SYNC_OUT(); return; L_08A25A40: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25B70; } @@ -4896,7 +4649,6 @@ L_08A25A54: AOT_REGCACHE_SYNC_OUT(); return; L_08A25A80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25AF4; } @@ -4966,9 +4718,7 @@ L_08A25A94: aot_gpr_4 = (16944u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25AFC; } @@ -4976,7 +4726,6 @@ L_08A25A94: } L_08A25AEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A25B30; } @@ -4992,7 +4741,6 @@ L_08A25AF4: } L_08A25AFC: aot_gpr_31 = (0x08A25B04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25B04u) goto L_08A25B04; AOT_REGCACHE_SYNC_OUT(); return; L_08A25B04: @@ -5020,9 +4768,7 @@ L_08A25B04: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25B68; } @@ -5046,9 +4792,7 @@ L_08A25B30: aot_gpr_4 = (16448u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25B70; } @@ -5072,7 +4816,6 @@ L_08A25B68: } L_08A25B70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5080,12 +4823,10 @@ L_08A25B70: } L_08A25B78: aot_gpr_31 = (0x08A25B80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25B80u) goto L_08A25B80; AOT_REGCACHE_SYNC_OUT(); return; L_08A25B80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25C74; } @@ -5113,7 +4854,6 @@ L_08A25B94: AOT_REGCACHE_SYNC_OUT(); return; L_08A25BC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25C6C; } @@ -5183,9 +4923,7 @@ L_08A25BD4: aot_gpr_4 = (16968u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25C64; } @@ -5209,9 +4947,7 @@ L_08A25C2C: aot_gpr_4 = (16448u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25C74; } @@ -5243,7 +4979,6 @@ L_08A25C6C: } L_08A25C74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5251,12 +4986,10 @@ L_08A25C74: } L_08A25C7C: aot_gpr_31 = (0x08A25C84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25C84u) goto L_08A25C84; AOT_REGCACHE_SYNC_OUT(); return; L_08A25C84: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25DB4; } @@ -5284,7 +5017,6 @@ L_08A25C98: AOT_REGCACHE_SYNC_OUT(); return; L_08A25CC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25D38; } @@ -5354,9 +5086,7 @@ L_08A25CD8: aot_gpr_4 = (16968u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25D40; } @@ -5364,7 +5094,6 @@ L_08A25CD8: } L_08A25D30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A25D74; } @@ -5380,7 +5109,6 @@ L_08A25D38: } L_08A25D40: aot_gpr_31 = (0x08A25D48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A25D48u) goto L_08A25D48; AOT_REGCACHE_SYNC_OUT(); return; L_08A25D48: @@ -5408,9 +5136,7 @@ L_08A25D48: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25DAC; } @@ -5434,9 +5160,7 @@ L_08A25D74: aot_gpr_4 = (16384u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25DB4; } @@ -5460,7 +5184,6 @@ L_08A25DAC: } L_08A25DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5488,7 +5211,6 @@ L_08A25DC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A25DF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25E9C; } @@ -5539,9 +5261,7 @@ L_08A25E1C: aot_gpr_4 = (16996u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25E94; } @@ -5565,9 +5285,7 @@ L_08A25E54: aot_gpr_4 = (16256u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25E8C; } @@ -5575,7 +5293,6 @@ L_08A25E54: } L_08A25E84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5627,7 +5344,6 @@ L_08A25EB0: AOT_REGCACHE_SYNC_OUT(); return; L_08A25EDC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25F90; } @@ -5697,9 +5413,7 @@ L_08A25EF0: aot_gpr_4 = (16912u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25F88; } @@ -5723,9 +5437,7 @@ L_08A25F48: aot_gpr_4 = (16384u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A25F80; } @@ -5733,7 +5445,6 @@ L_08A25F48: } L_08A25F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5779,7 +5490,6 @@ L_08A25F98: AOT_REGCACHE_SYNC_OUT(); return; L_08A25FC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A25FD4; } @@ -5787,7 +5497,6 @@ L_08A25FC4: } L_08A25FCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5817,7 +5526,6 @@ L_08A25FDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A26008: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A26018; } @@ -5825,7 +5533,6 @@ L_08A26008: } L_08A26010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5855,7 +5562,6 @@ L_08A26020: AOT_REGCACHE_SYNC_OUT(); return; L_08A2604C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2605C; } @@ -5863,7 +5569,6 @@ L_08A2604C: } L_08A26054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5893,7 +5598,6 @@ L_08A26064: AOT_REGCACHE_SYNC_OUT(); return; L_08A26090: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A260A0; } @@ -5901,7 +5605,6 @@ L_08A26090: } L_08A26098: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5931,7 +5634,6 @@ L_08A260A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A260D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A260E4; } @@ -5939,7 +5641,6 @@ L_08A260D4: } L_08A260DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5969,7 +5670,6 @@ L_08A260EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A26118: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A26128; } @@ -5977,7 +5677,6 @@ L_08A26118: } L_08A26120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -5996,7 +5695,6 @@ L_08A26130: ctx.gpr[5] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[5] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2614C; } @@ -6004,7 +5702,6 @@ L_08A26130: } L_08A26144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26154; } @@ -6035,7 +5732,17 @@ L_08A26158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A26174: aot_gpr_29 = (aot_gpr_29 + static_cast(-1008)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(aot_fpr_24), aot_gpr_16, aot_gpr_17, aot_gpr_18, ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -6054,20 +5761,27 @@ L_08A261B0: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[5]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5520))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A261C8: aot_gpr_31 = (0x08A261D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A261D0u) goto L_08A261D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A261D0: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A2631C; } @@ -6077,7 +5791,6 @@ L_08A261DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A261FC; } @@ -6087,7 +5800,6 @@ L_08A261EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26210; } @@ -6098,7 +5810,6 @@ L_08A261FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A262F4; } @@ -6108,7 +5819,6 @@ L_08A26210: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); ctx.gpr[5] = (0u | 246u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A262EC; } @@ -6116,7 +5826,6 @@ L_08A26210: } L_08A26220: aot_gpr_31 = (0x08A26228u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26228u) goto L_08A26228; AOT_REGCACHE_SYNC_OUT(); return; L_08A26228: @@ -6190,7 +5899,6 @@ L_08A26228: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A2628Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2628Cu) goto L_08A2628C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2628C: @@ -6201,7 +5909,6 @@ L_08A2628C: AOT_REGCACHE_SYNC_OUT(); return; L_08A26298: aot_gpr_31 = (0x08A262A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A262A0u) goto L_08A262A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A262A0: @@ -6235,7 +5942,6 @@ L_08A262A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A262DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A262FC; } @@ -6312,7 +6018,6 @@ L_08A26330: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A26344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26344u) goto L_08A26344; AOT_REGCACHE_SYNC_OUT(); return; L_08A26344: @@ -6345,9 +6050,7 @@ L_08A26344: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A263A4; } @@ -6376,7 +6079,6 @@ L_08A26378: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A263B0; } @@ -6434,12 +6136,10 @@ L_08A263E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A26420: aot_gpr_31 = (0x08A26428u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26428u) goto L_08A26428; AOT_REGCACHE_SYNC_OUT(); return; L_08A26428: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A26474; } @@ -6447,14 +6147,12 @@ L_08A26428: } L_08A26430: aot_gpr_31 = (0x08A26438u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26438u) goto L_08A26438; AOT_REGCACHE_SYNC_OUT(); return; L_08A26438: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26460; } @@ -6462,14 +6160,12 @@ L_08A26438: } L_08A26448: aot_gpr_31 = (0x08A26450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26450u) goto L_08A26450; AOT_REGCACHE_SYNC_OUT(); return; L_08A26450: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26474; } @@ -6480,7 +6176,6 @@ L_08A26460: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A264B8; } @@ -6504,7 +6199,6 @@ L_08A26494: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A264C0; } @@ -6547,7 +6241,6 @@ L_08A264E0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A26500; } @@ -6581,7 +6274,6 @@ L_08A2650C: AOT_REGCACHE_SYNC_OUT(); return; L_08A26538: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A265AC; } @@ -6651,9 +6343,7 @@ L_08A2654C: aot_gpr_4 = (16928u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A265B4; } @@ -6661,7 +6351,6 @@ L_08A2654C: } L_08A265A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A265E8; } @@ -6677,7 +6366,6 @@ L_08A265AC: } L_08A265B4: aot_gpr_31 = (0x08A265BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A265BCu) goto L_08A265BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A265BC: @@ -6705,9 +6393,7 @@ L_08A265BC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26620; } @@ -6731,9 +6417,7 @@ L_08A265E8: aot_gpr_4 = (16416u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26628; } @@ -6767,7 +6451,6 @@ L_08A26628: AOT_REGCACHE_SYNC_OUT(); return; L_08A26648: aot_gpr_31 = (0x08A26650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26650u) goto L_08A26650; AOT_REGCACHE_SYNC_OUT(); return; L_08A26650: @@ -6789,12 +6472,10 @@ L_08A26668: } L_08A26670: aot_gpr_31 = (0x08A26678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26678u) goto L_08A26678; AOT_REGCACHE_SYNC_OUT(); return; L_08A26678: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A266C4; } @@ -6802,14 +6483,12 @@ L_08A26678: } L_08A26680: aot_gpr_31 = (0x08A26688u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26688u) goto L_08A26688; AOT_REGCACHE_SYNC_OUT(); return; L_08A26688: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A266B0; } @@ -6817,14 +6496,12 @@ L_08A26688: } L_08A26698: aot_gpr_31 = (0x08A266A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A266A0u) goto L_08A266A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A266A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A266C4; } @@ -6835,7 +6512,6 @@ L_08A266B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26744; } @@ -6863,7 +6539,6 @@ L_08A266D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A266E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A266E4u) goto L_08A266E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A266E4: @@ -6896,9 +6571,7 @@ L_08A266E4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2674C; } @@ -6927,7 +6600,6 @@ L_08A26718: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26758; } @@ -7009,7 +6681,6 @@ L_08A267E8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2680C; } @@ -7044,7 +6715,6 @@ L_08A2682C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2684C; } @@ -7078,7 +6748,6 @@ L_08A26858: AOT_REGCACHE_SYNC_OUT(); return; L_08A26884: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A268F8; } @@ -7148,9 +6817,7 @@ L_08A26898: aot_gpr_4 = (16872u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26900; } @@ -7158,7 +6825,6 @@ L_08A26898: } L_08A268F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26934; } @@ -7174,7 +6840,6 @@ L_08A268F8: } L_08A26900: aot_gpr_31 = (0x08A26908u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26908u) goto L_08A26908; AOT_REGCACHE_SYNC_OUT(); return; L_08A26908: @@ -7202,9 +6867,7 @@ L_08A26908: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[13] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2696C; } @@ -7228,9 +6891,7 @@ L_08A26934: aot_gpr_4 = (16384u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26974; } @@ -7264,7 +6925,6 @@ L_08A26974: AOT_REGCACHE_SYNC_OUT(); return; L_08A26994: aot_gpr_31 = (0x08A2699Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2699Cu) goto L_08A2699C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2699C: @@ -7306,7 +6966,6 @@ L_08A269C8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A269DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A269DCu) goto L_08A269DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A269DC: @@ -7339,9 +6998,7 @@ L_08A269DC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26A3C; } @@ -7370,7 +7027,6 @@ L_08A26A10: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26A48; } @@ -7452,7 +7108,6 @@ L_08A26AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A26B00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A26B10; } @@ -7478,7 +7133,6 @@ L_08A26B10: AOT_REGCACHE_SYNC_OUT(); return; L_08A26B30: aot_gpr_31 = (0x08A26B38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26B38u) goto L_08A26B38; AOT_REGCACHE_SYNC_OUT(); return; L_08A26B38: @@ -7500,7 +7154,6 @@ L_08A26B50: } L_08A26B58: aot_gpr_31 = (0x08A26B60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26B60u) goto L_08A26B60; AOT_REGCACHE_SYNC_OUT(); return; L_08A26B60: @@ -7542,7 +7195,6 @@ L_08A26B8C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A26BA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26BA0u) goto L_08A26BA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A26BA0: @@ -7575,9 +7227,7 @@ L_08A26BA0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26C00; } @@ -7606,7 +7256,6 @@ L_08A26BD4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26C0C; } @@ -7680,7 +7329,6 @@ L_08A26C9C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A26CC0; } @@ -7715,7 +7363,6 @@ L_08A26CE0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A26D00; } @@ -7749,7 +7396,6 @@ L_08A26D0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A26D38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A26D60; } @@ -7757,14 +7403,12 @@ L_08A26D38: } L_08A26D40: aot_gpr_31 = (0x08A26D48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26D48u) goto L_08A26D48; AOT_REGCACHE_SYNC_OUT(); return; L_08A26D48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26D80; } @@ -7772,7 +7416,6 @@ L_08A26D48: } L_08A26D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26D68; } @@ -7788,14 +7431,12 @@ L_08A26D60: } L_08A26D68: aot_gpr_31 = (0x08A26D70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26D70u) goto L_08A26D70; AOT_REGCACHE_SYNC_OUT(); return; L_08A26D70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26DB8; } @@ -7810,9 +7451,7 @@ L_08A26D80: aot_gpr_4 = (16640u << 16u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A26DB8; } @@ -7835,7 +7474,6 @@ L_08A26DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08A26DD8: aot_gpr_31 = (0x08A26DE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26DE0u) goto L_08A26DE0; AOT_REGCACHE_SYNC_OUT(); return; L_08A26DE0: @@ -7857,7 +7495,6 @@ L_08A26DF8: } L_08A26E00: aot_gpr_31 = (0x08A26E08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26E08u) goto L_08A26E08; AOT_REGCACHE_SYNC_OUT(); return; L_08A26E08: @@ -7879,14 +7516,12 @@ L_08A26E20: } L_08A26E28: aot_gpr_31 = (0x08A26E30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26E30u) goto L_08A26E30; AOT_REGCACHE_SYNC_OUT(); return; L_08A26E30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A26E70; } @@ -7894,12 +7529,10 @@ L_08A26E30: } L_08A26E40: aot_gpr_31 = (0x08A26E48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26E48u) goto L_08A26E48; AOT_REGCACHE_SYNC_OUT(); return; L_08A26E48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A26E68; } @@ -7907,12 +7540,10 @@ L_08A26E48: } L_08A26E50: aot_gpr_31 = (0x08A26E58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26E58u) goto L_08A26E58; AOT_REGCACHE_SYNC_OUT(); return; L_08A26E58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A26E78; } @@ -7920,7 +7551,6 @@ L_08A26E58: } L_08A26E60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A26EBC; } @@ -7944,14 +7574,12 @@ L_08A26E70: } L_08A26E78: aot_gpr_31 = (0x08A26E80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26E80u) goto L_08A26E80; AOT_REGCACHE_SYNC_OUT(); return; L_08A26E80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26EA8; } @@ -7959,14 +7587,12 @@ L_08A26E80: } L_08A26E90: aot_gpr_31 = (0x08A26E98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26E98u) goto L_08A26E98; AOT_REGCACHE_SYNC_OUT(); return; L_08A26E98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26EBC; } @@ -7977,7 +7603,6 @@ L_08A26EA8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A26ED4; } @@ -7995,7 +7620,6 @@ L_08A26EBC: } L_08A26ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A270A0; } @@ -8011,7 +7635,6 @@ L_08A26ED4: } L_08A26EDC: { const bool branch_taken = static_cast(aot_gpr_18) < 0; - // nop if (branch_taken) { goto L_08A26EF4; } @@ -8059,7 +7682,6 @@ L_08A26F18: goto L_08A26F2C; L_08A26F2C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A27094; } @@ -8068,7 +7690,6 @@ L_08A26F2C: L_08A26F34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A27094; } @@ -8076,12 +7697,10 @@ L_08A26F34: } L_08A26F40: aot_gpr_31 = (0x08A26F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26F48u) goto L_08A26F48; AOT_REGCACHE_SYNC_OUT(); return; L_08A26F48: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A27094; } @@ -8091,7 +7710,6 @@ L_08A26F50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A27094; } @@ -8102,7 +7720,6 @@ L_08A26F60: aot_gpr_4 = (aot_gpr_4 & 496u); ctx.gpr[5] = (0u | 48u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27094; } @@ -8172,9 +7789,7 @@ L_08A26FB0: aot_gpr_4 = (16880u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27094; } @@ -8182,7 +7797,6 @@ L_08A26FB0: } L_08A26FEC: aot_gpr_31 = (0x08A26FF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A26FF4u) goto L_08A26FF4; AOT_REGCACHE_SYNC_OUT(); return; L_08A26FF4: @@ -8199,9 +7813,7 @@ L_08A27004: ctx.fpr[13] = aot_fpr_20 + ctx.fpr[13]; ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27094; } @@ -8230,9 +7842,7 @@ L_08A27048: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27094; } @@ -8274,14 +7884,12 @@ L_08A270A0: } L_08A270A8: aot_gpr_31 = (0x08A270B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A270B0u) goto L_08A270B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A270B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A270F8; } @@ -8289,12 +7897,10 @@ L_08A270B0: } L_08A270C0: aot_gpr_31 = (0x08A270C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A270C8u) goto L_08A270C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A270C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A270F0; } @@ -8304,12 +7910,10 @@ L_08A270D0: aot_gpr_17 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); aot_gpr_18 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_31 = (0x08A270E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A270E0u) goto L_08A270E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A270E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A27100; } @@ -8317,7 +7921,6 @@ L_08A270E0: } L_08A270E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A27144; } @@ -8341,14 +7944,12 @@ L_08A270F8: } L_08A27100: aot_gpr_31 = (0x08A27108u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27108u) goto L_08A27108; AOT_REGCACHE_SYNC_OUT(); return; L_08A27108: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27130; } @@ -8356,14 +7957,12 @@ L_08A27108: } L_08A27118: aot_gpr_31 = (0x08A27120u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27120u) goto L_08A27120; AOT_REGCACHE_SYNC_OUT(); return; L_08A27120: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27144; } @@ -8374,7 +7973,6 @@ L_08A27130: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[5] = (0u | 278u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27158; } @@ -8391,7 +7989,6 @@ L_08A27144: } L_08A27150: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A273C8; } @@ -8407,7 +8004,6 @@ L_08A27158: } L_08A27160: { const bool branch_taken = static_cast(aot_gpr_18) < 0; - // nop if (branch_taken) { goto L_08A27178; } @@ -8455,7 +8051,6 @@ L_08A2719C: goto L_08A271B0; L_08A271B0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A273BC; } @@ -8464,7 +8059,6 @@ L_08A271B0: L_08A271B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A273BC; } @@ -8472,12 +8066,10 @@ L_08A271B8: } L_08A271C4: aot_gpr_31 = (0x08A271CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A271CCu) goto L_08A271CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A271CC: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A273BC; } @@ -8487,7 +8079,6 @@ L_08A271D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A273BC; } @@ -8557,9 +8148,7 @@ L_08A27220: aot_gpr_4 = (16880u << 16u); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A273BC; } @@ -8567,7 +8156,6 @@ L_08A27220: } L_08A2725C: aot_gpr_31 = (0x08A27264u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27264u) goto L_08A27264; AOT_REGCACHE_SYNC_OUT(); return; L_08A27264: @@ -8584,9 +8172,7 @@ L_08A27274: ctx.fpr[13] = aot_fpr_20 + ctx.fpr[13]; ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A273BC; } @@ -8615,9 +8201,7 @@ L_08A272B8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A273BC; } @@ -8730,7 +8314,6 @@ L_08A27350: AOT_REGCACHE_SYNC_OUT(); return; L_08A2738C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A2739C; } @@ -8800,7 +8383,6 @@ L_08A273DC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A273F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A273F0u) goto L_08A273F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A273F0: @@ -8833,9 +8415,7 @@ L_08A273F0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27450; } @@ -8864,7 +8444,6 @@ L_08A27424: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2745C; } @@ -8934,7 +8513,6 @@ L_08A274DC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A27500; } @@ -8969,7 +8547,6 @@ L_08A27520: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A27540; } @@ -8993,7 +8570,6 @@ L_08A27540: AOT_REGCACHE_SYNC_OUT(); return; L_08A27560: aot_gpr_31 = (0x08A27568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27568u) goto L_08A27568; AOT_REGCACHE_SYNC_OUT(); return; L_08A27568: @@ -9035,7 +8611,6 @@ L_08A27594: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A275A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A275A8u) goto L_08A275A8; AOT_REGCACHE_SYNC_OUT(); return; L_08A275A8: @@ -9068,9 +8643,7 @@ L_08A275A8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27608; } @@ -9099,7 +8672,6 @@ L_08A275DC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A27614; } @@ -9173,7 +8745,6 @@ L_08A27680: AOT_REGCACHE_SYNC_OUT(); return; L_08A276AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A276BC; } @@ -9199,7 +8770,6 @@ L_08A276BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A276DC: aot_gpr_31 = (0x08A276E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A276E4u) goto L_08A276E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A276E4: @@ -9241,7 +8811,6 @@ L_08A27710: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A27724u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27724u) goto L_08A27724; AOT_REGCACHE_SYNC_OUT(); return; L_08A27724: @@ -9274,9 +8843,7 @@ L_08A27724: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27784; } @@ -9305,7 +8872,6 @@ L_08A27758: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A27790; } @@ -9377,7 +8943,6 @@ L_08A277F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A27820: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A27830; } @@ -9403,7 +8968,6 @@ L_08A27830: AOT_REGCACHE_SYNC_OUT(); return; L_08A27850: aot_gpr_31 = (0x08A27858u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27858u) goto L_08A27858; AOT_REGCACHE_SYNC_OUT(); return; L_08A27858: @@ -9445,7 +9009,6 @@ L_08A27884: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A27898u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27898u) goto L_08A27898; AOT_REGCACHE_SYNC_OUT(); return; L_08A27898: @@ -9478,9 +9041,7 @@ L_08A27898: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A278F8; } @@ -9509,7 +9070,6 @@ L_08A278CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A27904; } @@ -9583,7 +9143,6 @@ L_08A27970: AOT_REGCACHE_SYNC_OUT(); return; L_08A2799C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A279AC; } @@ -9609,7 +9168,6 @@ L_08A279AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A279CC: aot_gpr_31 = (0x08A279D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A279D4u) goto L_08A279D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A279D4: @@ -9631,7 +9189,6 @@ L_08A279EC: } L_08A279F4: aot_gpr_31 = (0x08A279FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A279FCu) goto L_08A279FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A279FC: @@ -9653,13 +9210,11 @@ L_08A27A14: } L_08A27A1C: aot_gpr_31 = (0x08A27A24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27A24u) goto L_08A27A24; AOT_REGCACHE_SYNC_OUT(); return; L_08A27A24: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A27B38; } @@ -9667,7 +9222,6 @@ L_08A27A24: } L_08A27A30: aot_gpr_31 = (0x08A27A38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27A38u) goto L_08A27A38; AOT_REGCACHE_SYNC_OUT(); return; L_08A27A38: @@ -9741,7 +9295,6 @@ L_08A27A38: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A27A9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27A9Cu) goto L_08A27A9C; AOT_REGCACHE_SYNC_OUT(); return; L_08A27A9C: @@ -9752,7 +9305,6 @@ L_08A27A9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A27AA8: aot_gpr_31 = (0x08A27AB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27AB0u) goto L_08A27AB0; AOT_REGCACHE_SYNC_OUT(); return; L_08A27AB0: @@ -9774,7 +9326,6 @@ L_08A27AB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27B18; } @@ -9805,7 +9356,6 @@ L_08A27AE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A27B08: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A27B18; } @@ -9846,12 +9396,10 @@ L_08A27B38: } L_08A27B40: aot_gpr_31 = (0x08A27B48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27B48u) goto L_08A27B48; AOT_REGCACHE_SYNC_OUT(); return; L_08A27B48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A27DD4; } @@ -9879,7 +9427,6 @@ L_08A27B5C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A27B70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27B70u) goto L_08A27B70; AOT_REGCACHE_SYNC_OUT(); return; L_08A27B70: @@ -9912,9 +9459,7 @@ L_08A27B70: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[13] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[13] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27BD0; } @@ -9943,7 +9488,6 @@ L_08A27BA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A27BDC; } @@ -9992,14 +9536,12 @@ L_08A27C14: aot_fpr_12 = aot_fpr_12 + ctx.fpr[13]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A27C30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27C30u) goto L_08A27C30; AOT_REGCACHE_SYNC_OUT(); return; L_08A27C30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27C58; } @@ -10007,14 +9549,12 @@ L_08A27C30: } L_08A27C40: aot_gpr_31 = (0x08A27C48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27C48u) goto L_08A27C48; AOT_REGCACHE_SYNC_OUT(); return; L_08A27C48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27C6C; } @@ -10049,7 +9589,6 @@ L_08A27C78: AOT_REGCACHE_SYNC_OUT(); return; L_08A27CA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A27D2C; } @@ -10133,9 +9672,7 @@ L_08A27D0C: aot_gpr_4 = (16944u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27D34; } @@ -10143,7 +9680,6 @@ L_08A27D0C: } L_08A27D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A27D5C; } @@ -10159,7 +9695,6 @@ L_08A27D2C: } L_08A27D34: aot_gpr_31 = (0x08A27D3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27D3Cu) goto L_08A27D3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A27D3C: @@ -10171,9 +9706,7 @@ L_08A27D3C: L_08A27D48: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27D84; } @@ -10188,9 +9721,7 @@ L_08A27D64: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27D8C; } @@ -10224,7 +9755,6 @@ L_08A27D8C: AOT_REGCACHE_SYNC_OUT(); return; L_08A27DAC: aot_gpr_31 = (0x08A27DB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27DB4u) goto L_08A27DB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A27DB4: @@ -10254,12 +9784,10 @@ L_08A27DD4: } L_08A27DDC: aot_gpr_31 = (0x08A27DE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27DE4u) goto L_08A27DE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A27DE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0137_entry, 137u, 10u, 0x08A28084u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10367,7 +9895,6 @@ L_08A27ECC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(448))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27EF8; } @@ -10398,7 +9925,6 @@ L_08A27EF8: AOT_REGCACHE_SYNC_OUT(); return; L_08A27F0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A27F84; } @@ -10407,12 +9933,10 @@ L_08A27F0C: L_08A27F14: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7660))); aot_gpr_31 = (0x08A27F20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27F20u) goto L_08A27F20; AOT_REGCACHE_SYNC_OUT(); return; L_08A27F20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A27F5C; } @@ -10420,14 +9944,12 @@ L_08A27F20: } L_08A27F28: aot_gpr_31 = (0x08A27F30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27F30u) goto L_08A27F30; AOT_REGCACHE_SYNC_OUT(); return; L_08A27F30: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27F58; } @@ -10435,14 +9957,12 @@ L_08A27F30: } L_08A27F40: aot_gpr_31 = (0x08A27F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A27F48u) goto L_08A27F48; AOT_REGCACHE_SYNC_OUT(); return; L_08A27F48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[5] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[5]; - // nop if (branch_taken) { goto L_08A27F5C; } @@ -10456,9 +9976,7 @@ L_08A27F5C: ctx.fpr[13] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(452))); ctx.fpr[13] = ctx.fpr[13] + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[13])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A27F84; } @@ -10491,7 +10009,6 @@ L_08A27F90: AOT_REGCACHE_SYNC_OUT(); return; L_08A27FBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0137_entry, 137u, 5u, 0x08A28034u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10520,9 +10037,7 @@ L_08A27FEC: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0137_entry, 137u, 4u, 0x08A2802Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0137.cpp b/profiles/vcs/generated/generated_unit_0137.cpp index 52dbbd5..1c47f0d 100644 --- a/profiles/vcs/generated/generated_unit_0137.cpp +++ b/profiles/vcs/generated/generated_unit_0137.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0137[4085] = { - 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 9, 0, - 10, 0, 11, 0, 12, 0, 13, 0, 0, 14, 0, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 26, 0, 0, 27, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 33, 0, 0, 34, 0, - 35, 0, 36, 0, 0, 0, 37, 0, 38, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 50, 0, 0, 0, 51, - 0, 0, 0, 0, 0, 52, 0, 53, 0, 54, 0, 55, 0, 0, 56, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 61, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 64, 0, 65, 0, 66, 0, 0, 67, 0, 0, 68, 0, 69, 0, 70, 0, 71, - 0, 0, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, - 0, 0, 0, 79, 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, - 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 91, 0, 0, 92, 0, 93, 0, 94, 0, - 95, 0, 0, 96, 0, 97, 0, 98, 0, 0, 99, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 105, 0, 0, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 111, 0, 112, - 0, 113, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, 120, 0, 0, 121, 0, 122, 0, - 123, 0, 124, 0, 125, 0, 0, 126, 0, 127, 0, 128, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 132, 0, 0, 133, 0, - 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 141, - 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 0, 148, - 0, 149, 0, 150, 0, 151, 0, 0, 152, 0, 153, 0, 154, 0, 0, 155, 156, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, 159, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, - 0, 0, 167, 0, 168, 0, 169, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 178, 0, 0, 0, 0, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 0, 186, 0, 187, 0, 0, 0, 0, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 0, 0, 0, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 204, 0, 205, 0, 0, 0, 0, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 212, 0, 213, 0, 214, 0, 0, 0, 0, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 221, 0, 222, 0, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 0, 0, 0, 0, 231, 0, 232, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, - 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 239, 0, 0, 240, 241, 0, 0, 242, - 0, 0, 0, 243, 0, 0, 244, 0, 245, 0, 246, 0, 0, 247, 248, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, - 0, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 0, 258, 259, 0, - 260, 0, 261, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 265, 0, 0, 0, 266, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 272, 273, 0, 274, 0, 275, 0, 276, 0, 0, 277, 0, 0, 0, 278, - 0, 0, 0, 279, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, - 285, 0, 286, 0, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 0, - 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 299, 300, 0, 0, 301, - 0, 302, 303, 0, 0, 304, 0, 305, 306, 0, 307, 0, 308, 0, 0, 0, 309, 0, 310, 0, 311, 0, 312, 0, 0, 313, 314, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 316, 0, 0, 317, 0, 0, 0, 318, 319, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 323, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 325, 0, 326, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 331, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 333, 334, 0, 335, - 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, - 361, 0, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 364, 365, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, - 0, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, - 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 377, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, 380, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, - 0, 385, 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 390, 0, 0, 391, 0, 0, 392, 0, 0, 393, 0, 0, - 394, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 0, 403, 0, - 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, - 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 412, 0, 413, 0, 0, 414, 0, - 415, 0, 416, 0, 417, 0, 0, 418, 0, 419, 0, 420, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 425, 0, - 0, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 0, 431, 0, 432, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, - 0, 0, 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, - 448, 449, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 466, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 0, 0, - 0, 476, 0, 0, 0, 477, 478, 0, 479, 0, 0, 480, 0, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, - 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, - 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 495, 0, 496, 0, 0, 0, 497, 0, 0, 498, 0, 499, 0, 0, 500, - 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 0, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, - 0, 0, 0, 0, 513, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 519, - 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 524, 525, 0, 0, 0, 0, - 0, 0, 526, 0, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, - 530, 0, 531, 0, 532, 0, 0, 533, 534, 0, 535, 0, 0, 536, 0, 537, 0, 0, 538, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, - 542, 0, 543, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, 0, 0, 549, - 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, 0, 0, 558, 0, 559, 0, 0, 0, 0, - 0, 560, 0, 0, 561, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, - 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 0, 571, 0, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 578, 0, 579, - 0, 0, 580, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 584, 0, 0, 0, 585, 0, 586, 0, - 0, 587, 0, 0, 0, 0, 588, 0, 0, 589, 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 592, 0, 593, 0, 0, 0, 0, 594, 0, 0, 595, 0, - 0, 0, 0, 596, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 600, 0, 0, 0, 0, 601, 0, 0, 602, 0, 603, 0, - 604, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 608, - 0, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 612, 0, 0, 613, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, - 0, 617, 0, 0, 618, 0, 619, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 625, - 0, 0, 626, 0, 627, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 632, 0, - 0, 0, 0, 633, 0, 0, 0, 634, 0, 635, 0, 636, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 639, 0, 0, 0, 640, 0, 0, 0, 0, 641, - 0, 0, 642, 0, 0, 643, 0, 0, 644, 0, 0, 645, 0, 0, 646, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 650, 0, 0, 651, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 654, 0, 655, - 0, 656, 0, 657, 0, 658, 0, 659, 0, 660, 0, 0, 661, 0, 0, 662, 0, 663, 0, 0, 664, 0, 665, 0, 0, 666, 0, 667, 0, 0, 0, 668, - 0, 0, 0, 669, 0, 0, 0, 670, 0, 0, 0, 671, 0, 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 680, 0, 681, 0, 0, 682, 0, 0, 683, 0, 0, 684, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 694, 0, 695, 0, 696, 0, 697, 0, - 0, 0, 698, 0, 699, 0, 700, 0, 0, 701, 0, 702, 0, 0, 0, 703, 0, 704, 0, 0, 0, 705, 0, 0, 706, 707, 0, 0, 0, 0, 0, 708, - 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, - 0, 0, 714, 0, 715, 0, 0, 0, 716, 0, 0, 717, 0, 0, 718, 0, 719, 0, 0, 0, 720, 0, 0, 721, 0, 0, 0, 722, 0, 0, 723, 0, - 0, 724, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 727, 0, 728, 0, 729, 0, 0, 730, 0, 0, 0, 0, 0, 731, 0, 0, 0, 732, 0, 733, 0, 0, 0, 0, 734, 0, 0, 0, 735, 0, 0, - 0, 736, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 739, 0, 0, 740, 0, 0, 741, 0, 742, 0, 0, 0, - 743, 0, 744, 0, 0, 0, 745, 0, 0, 0, 0, 0, 746, 0, 747, 0, 748, 0, 749, 750, 0, 751, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 754, 0, 0, 0, 755, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, - 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 760, 0, 0, 761, 0, 762, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 764, - 0, 0, 765, 0, 0, 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, 0, 0, 769, 0, 770, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, 773, 0, 774, 0, 775, 0, 776, 0, 777, 0, 778, 0, 779, 0, 780, 0, 781, 0, 782, - 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 786, 0, 0, 0, 787, 0, 0, 0, 788, 0, 0, 0, - 789, 0, 0, 0, 790, 0, 0, 0, 791, 0, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 0, 795, 0, 0, 0, 796, 0, 0, 0, - 797, 0, 0, 0, 798, 0, 0, 799, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 804, - 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 807, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 809, - 0, 0, 810, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 814, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 817, 0, 0, 818, 0, - 819, 0, 0, 0, 820, 0, 821, 0, 822, 0, 0, 0, 0, 0, 0, 823, 0, 0, 824, 0, 0, 0, 0, 0, 0, 825, 0, 826, 0, 0, 0, 827, - 0, 0, 0, 828, 0, 0, 0, 829, 0, 0, 0, 830, 0, 0, 0, 831, 0, 0, 0, 832, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 0, 835, - 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, 0, 838, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 0, 841, 0, 0, 0, 842, 0, 0, 0, 843, - 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 846, 0, 0, 0, 847, 0, 0, 0, 848, 0, 0, 0, 849, 0, 0, 850, 0, 0, 851, 852, 0, - 0, 853, 0, 854, 0, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 0, 860, 0, 861, 0, 0, 862, 0, 863, 0, 864, 0, 865, 0, 0, 866, - 0, 867, 0, 868, 0, 869, 0, 870, 0, 871, 0, 0, 872, 0, 873, 0, 0, 874, 0, 875, 0, 876, 0, 877, 0, 878, 0, 0, 879, 0, 0, 880, - 881, 0, 0, 882, 0, 0, 0, 883, 0, 0, 0, 884, 0, 0, 0, 885, 0, 0, 0, 886, 0, 887, 0, 0, 0, 888, 0, 0, 0, 889, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 891, 0, 892, 0, 0, 893, 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 895, 896, 0, 0, 0, 897, 0, 0, 0, 898, 899, 0, 900, 0, 901, 0, 902, 0, 0, 0, 903, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0137[64] = { + 0x2122525541405505ull, 0x4A104200A4280904ull, 0x891108A004903145ull, 0xAA4A8280A8284AA0ull, + 0x0484904810508228ull, 0x01240CA954A10411ull, 0x5250510AA0A0A228ull, 0x909209024A104A95ull, + 0x2481952A94208220ull, 0x0A0A215414144500ull, 0x02AA82A005550540ull, 0x00AAA0A801554150ull, + 0xA0AAA82A00555054ull, 0x4000000000001000ull, 0x8414654899141002ull, 0x0511428561402090ull, + 0x2042005889561084ull, 0x9850A08124120485ull, 0x88089892065515A6ull, 0x0000008014400000ull, + 0x0200000020000000ull, 0xB400000005000000ull, 0x0800900088000048ull, 0x0080520008440020ull, + 0x4210001000040000ull, 0x0000000000000000ull, 0x0100000000000000ull, 0x5008C50140288000ull, + 0x0000211010820210ull, 0x2492422222544202ull, 0x1010202042410AA5ull, 0x44828A954A120408ull, + 0x0920124024115554ull, 0x4900904B00A40280ull, 0x00A8020000A08180ull, 0x021249622AAA004Aull, + 0x948A902204804811ull, 0x0900248049009044ull, 0x0C02480482480490ull, 0x2224A59520000504ull, + 0x0A0021128A800225ull, 0x108011120A240000ull, 0xB400522021400510ull, 0x4852124251480024ull, + 0x8800200552108848ull, 0xA048825220948814ull, 0x84444A8851020054ull, 0xA04009200A00C924ull, + 0x008888888A5292AAull, 0x112089250044400Aull, 0x83228A5455502900ull, 0x4891491440048808ull, + 0x2214412A00040082ull, 0x042D504514910006ull, 0x8414900110028A00ull, 0xAAAAA100020A2444ull, + 0x1111111111110014ull, 0x8008010008000291ull, 0x9000400C80148004ull, 0x8A04815148200400ull, + 0x8888888888888888ull, 0x954A554A64888888ull, 0x2228888992AA52AAull, 0x0011562300112A00ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0137[64] = { + 1u, 21u, 35u, 52u, 72u, 86u, 104u, 123u, 142u, 160u, 176u, 194u, 212u, 233u, 235u, 253u, + 269u, 285u, 302u, 324u, 328u, 330u, 336u, 343u, 351u, 356u, 356u, 357u, 369u, 377u, 394u, 408u, + 426u, 443u, 457u, 466u, 485u, 501u, 513u, 526u, 542u, 556u, 566u, 580u, 596u, 609u, 626u, 642u, + 656u, 675u, 689u, 709u, 724u, 736u, 753u, 765u, 783u, 797u, 805u, 815u, 828u, 844u, 867u, 890u, }; void recomp_unit_0137_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0137_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A28004u; - entry_id = (entry_delta < 16340u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0137[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16340u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0137[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0137[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A28004; @@ -1083,9 +990,7 @@ L_08A2800C: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2803C; } @@ -1127,7 +1032,6 @@ L_08A2803C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2805C: aot_gpr_31 = (0x08A28064u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28064u) goto L_08A28064; AOT_REGCACHE_SYNC_OUT(); return; L_08A28064: @@ -1149,7 +1053,6 @@ L_08A2807C: } L_08A28084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0136_entry, 136u, 736u, 0x08A27DD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1157,12 +1060,10 @@ L_08A28084: } L_08A2808C: aot_gpr_31 = (0x08A28094u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28094u) goto L_08A28094; AOT_REGCACHE_SYNC_OUT(); return; L_08A28094: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A283C8; } @@ -1207,7 +1108,6 @@ L_08A280D8: L_08A280E4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16468u << 16u); if (branch_taken) { @@ -1290,7 +1190,6 @@ L_08A281A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(528))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A281D4; } @@ -1321,7 +1220,6 @@ L_08A281D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A281E8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28260; } @@ -1330,12 +1228,10 @@ L_08A281E8: L_08A281F0: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7660))); aot_gpr_31 = (0x08A281FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A281FCu) goto L_08A281FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A281FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28238; } @@ -1343,14 +1239,12 @@ L_08A281FC: } L_08A28204: aot_gpr_31 = (0x08A2820Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2820Cu) goto L_08A2820C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2820C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A28234; } @@ -1358,14 +1252,12 @@ L_08A2820C: } L_08A2821C: aot_gpr_31 = (0x08A28224u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28224u) goto L_08A28224; AOT_REGCACHE_SYNC_OUT(); return; L_08A28224: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A28238; } @@ -1379,9 +1271,7 @@ L_08A28238: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(532))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28260; } @@ -1414,7 +1304,6 @@ L_08A2826C: AOT_REGCACHE_SYNC_OUT(); return; L_08A28298: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28320; } @@ -1466,9 +1355,7 @@ L_08A28300: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28328; } @@ -1476,7 +1363,6 @@ L_08A28300: } L_08A28318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A28350; } @@ -1492,7 +1378,6 @@ L_08A28320: } L_08A28328: aot_gpr_31 = (0x08A28330u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28330u) goto L_08A28330; AOT_REGCACHE_SYNC_OUT(); return; L_08A28330: @@ -1504,9 +1389,7 @@ L_08A28330: L_08A2833C: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28378; } @@ -1521,9 +1404,7 @@ L_08A28358: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28380; } @@ -1557,7 +1438,6 @@ L_08A28380: AOT_REGCACHE_SYNC_OUT(); return; L_08A283A0: aot_gpr_31 = (0x08A283A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A283A8u) goto L_08A283A8; AOT_REGCACHE_SYNC_OUT(); return; L_08A283A8: @@ -1579,7 +1459,6 @@ L_08A283C0: } L_08A283C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0136_entry, 136u, 736u, 0x08A27DD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1599,12 +1478,10 @@ L_08A283DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A283E8: aot_gpr_31 = (0x08A283F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A283F0u) goto L_08A283F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A283F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28440; } @@ -1612,14 +1489,12 @@ L_08A283F0: } L_08A283F8: aot_gpr_31 = (0x08A28400u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28400u) goto L_08A28400; AOT_REGCACHE_SYNC_OUT(); return; L_08A28400: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A28428; } @@ -1627,14 +1502,12 @@ L_08A28400: } L_08A28410: aot_gpr_31 = (0x08A28418u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28418u) goto L_08A28418; AOT_REGCACHE_SYNC_OUT(); return; L_08A28418: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A28440; } @@ -1661,7 +1534,6 @@ L_08A28440: goto L_08A28454; L_08A28454: aot_gpr_31 = (0x08A2845Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2845Cu) goto L_08A2845C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2845C: @@ -1751,7 +1623,6 @@ L_08A28504: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(580), std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(576))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A28544; } @@ -1761,9 +1632,7 @@ L_08A28514: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(580))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A285D8; } @@ -1794,7 +1663,6 @@ L_08A28544: AOT_REGCACHE_SYNC_OUT(); return; L_08A28558: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A285D8; } @@ -1803,12 +1671,10 @@ L_08A28558: L_08A28560: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7660))); aot_gpr_31 = (0x08A2856Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2856Cu) goto L_08A2856C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2856C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A285B0; } @@ -1816,7 +1682,6 @@ L_08A2856C: } L_08A28574: aot_gpr_31 = (0x08A2857Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2857Cu) goto L_08A2857C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2857C: @@ -1827,7 +1692,6 @@ L_08A2857C: L_08A28584: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A285AC; } @@ -1835,7 +1699,6 @@ L_08A28584: } L_08A28590: aot_gpr_31 = (0x08A28598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28598u) goto L_08A28598; AOT_REGCACHE_SYNC_OUT(); return; L_08A28598: @@ -1846,7 +1709,6 @@ L_08A28598: L_08A285A0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A285B0; } @@ -1860,9 +1722,7 @@ L_08A285B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(580))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A285D8; } @@ -1895,7 +1755,6 @@ L_08A285E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A28610: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28688; } @@ -1924,9 +1783,7 @@ L_08A28640: aot_gpr_4 = (16996u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28680; } @@ -1941,9 +1798,7 @@ L_08A28660: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28690; } @@ -1990,7 +1845,6 @@ L_08A286A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A286B4: aot_gpr_31 = (0x08A286BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A286BCu) goto L_08A286BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A286BC: @@ -2024,12 +1878,10 @@ L_08A286E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A286F4: aot_gpr_31 = (0x08A286FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A286FCu) goto L_08A286FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A286FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28754; } @@ -2037,7 +1889,6 @@ L_08A286FC: } L_08A28704: aot_gpr_31 = (0x08A2870Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2870Cu) goto L_08A2870C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2870C: @@ -2048,7 +1899,6 @@ L_08A2870C: L_08A28714: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A2873C; } @@ -2056,7 +1906,6 @@ L_08A28714: } L_08A28720: aot_gpr_31 = (0x08A28728u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28728u) goto L_08A28728; AOT_REGCACHE_SYNC_OUT(); return; L_08A28728: @@ -2067,7 +1916,6 @@ L_08A28728: L_08A28730: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A28754; } @@ -2176,7 +2024,6 @@ L_08A28818: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(628), std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(624))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A28858; } @@ -2186,9 +2033,7 @@ L_08A28828: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(628))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A288EC; } @@ -2219,7 +2064,6 @@ L_08A28858: AOT_REGCACHE_SYNC_OUT(); return; L_08A2886C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A288EC; } @@ -2228,12 +2072,10 @@ L_08A2886C: L_08A28874: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7660))); aot_gpr_31 = (0x08A28880u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28880u) goto L_08A28880; AOT_REGCACHE_SYNC_OUT(); return; L_08A28880: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A288C4; } @@ -2241,7 +2083,6 @@ L_08A28880: } L_08A28888: aot_gpr_31 = (0x08A28890u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28890u) goto L_08A28890; AOT_REGCACHE_SYNC_OUT(); return; L_08A28890: @@ -2252,7 +2093,6 @@ L_08A28890: L_08A28898: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A288C0; } @@ -2260,7 +2100,6 @@ L_08A28898: } L_08A288A4: aot_gpr_31 = (0x08A288ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A288ACu) goto L_08A288AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A288AC: @@ -2271,7 +2110,6 @@ L_08A288AC: L_08A288B4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A288C4; } @@ -2285,9 +2123,7 @@ L_08A288C4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(628))); aot_fpr_13 = aot_fpr_13 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A288EC; } @@ -2320,7 +2156,6 @@ L_08A288F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A28924: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2899C; } @@ -2349,9 +2184,7 @@ L_08A28954: aot_gpr_4 = (16912u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A28994; } @@ -2366,9 +2199,7 @@ L_08A28974: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A289A4; } @@ -2415,7 +2246,6 @@ L_08A289B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A289C8: aot_gpr_31 = (0x08A289D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A289D0u) goto L_08A289D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A289D0: @@ -2451,7 +2281,6 @@ L_08A289F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A28A1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28A64; } @@ -2459,7 +2288,6 @@ L_08A28A1C: } L_08A28A24: aot_gpr_31 = (0x08A28A2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28A2Cu) goto L_08A28A2C; AOT_REGCACHE_SYNC_OUT(); return; L_08A28A2C: @@ -2473,12 +2301,10 @@ L_08A28A2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A28A44: aot_gpr_31 = (0x08A28A4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 398u, 0x08A1A980u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28A4Cu) goto L_08A28A4C; AOT_REGCACHE_SYNC_OUT(); return; L_08A28A4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28A5C; } @@ -2524,7 +2350,6 @@ L_08A28A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08A28A98: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28AE0; } @@ -2532,7 +2357,6 @@ L_08A28A98: } L_08A28AA0: aot_gpr_31 = (0x08A28AA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28AA8u) goto L_08A28AA8; AOT_REGCACHE_SYNC_OUT(); return; L_08A28AA8: @@ -2546,12 +2370,10 @@ L_08A28AA8: AOT_REGCACHE_SYNC_OUT(); return; L_08A28AC0: aot_gpr_31 = (0x08A28AC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 398u, 0x08A1A980u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28AC8u) goto L_08A28AC8; AOT_REGCACHE_SYNC_OUT(); return; L_08A28AC8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28AD8; } @@ -2597,7 +2419,6 @@ L_08A28AE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A28B14: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28B5C; } @@ -2605,7 +2426,6 @@ L_08A28B14: } L_08A28B1C: aot_gpr_31 = (0x08A28B24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28B24u) goto L_08A28B24; AOT_REGCACHE_SYNC_OUT(); return; L_08A28B24: @@ -2619,12 +2439,10 @@ L_08A28B24: AOT_REGCACHE_SYNC_OUT(); return; L_08A28B3C: aot_gpr_31 = (0x08A28B44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 398u, 0x08A1A980u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28B44u) goto L_08A28B44; AOT_REGCACHE_SYNC_OUT(); return; L_08A28B44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28B54; } @@ -2670,7 +2488,6 @@ L_08A28B64: AOT_REGCACHE_SYNC_OUT(); return; L_08A28B90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28BD8; } @@ -2678,7 +2495,6 @@ L_08A28B90: } L_08A28B98: aot_gpr_31 = (0x08A28BA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28BA0u) goto L_08A28BA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A28BA0: @@ -2692,12 +2508,10 @@ L_08A28BA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A28BB8: aot_gpr_31 = (0x08A28BC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 398u, 0x08A1A980u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28BC0u) goto L_08A28BC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A28BC0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28BD0; } @@ -2743,7 +2557,6 @@ L_08A28BE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A28C0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28C54; } @@ -2751,7 +2564,6 @@ L_08A28C0C: } L_08A28C14: aot_gpr_31 = (0x08A28C1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28C1Cu) goto L_08A28C1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A28C1C: @@ -2765,12 +2577,10 @@ L_08A28C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A28C34: aot_gpr_31 = (0x08A28C3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 398u, 0x08A1A980u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28C3Cu) goto L_08A28C3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A28C3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28C4C; } @@ -2816,7 +2626,6 @@ L_08A28C5C: AOT_REGCACHE_SYNC_OUT(); return; L_08A28C88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28CD0; } @@ -2824,7 +2633,6 @@ L_08A28C88: } L_08A28C90: aot_gpr_31 = (0x08A28C98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28C98u) goto L_08A28C98; AOT_REGCACHE_SYNC_OUT(); return; L_08A28C98: @@ -2838,12 +2646,10 @@ L_08A28C98: AOT_REGCACHE_SYNC_OUT(); return; L_08A28CB0: aot_gpr_31 = (0x08A28CB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 398u, 0x08A1A980u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28CB8u) goto L_08A28CB8; AOT_REGCACHE_SYNC_OUT(); return; L_08A28CB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28CC8; } @@ -2875,7 +2681,6 @@ L_08A28CD0: } L_08A28CD8: aot_gpr_31 = (0x08A28CE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28CE0u) goto L_08A28CE0; AOT_REGCACHE_SYNC_OUT(); return; L_08A28CE0: @@ -2915,7 +2720,17 @@ L_08A28D00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A28D34: aot_gpr_29 = (aot_gpr_29 + static_cast(-1952)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2963,7 +2778,6 @@ L_08A28D34: L_08A28DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A28E34; } @@ -2988,7 +2802,6 @@ L_08A28E34: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2124), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A28E54; } @@ -3002,7 +2815,6 @@ L_08A28E54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2124))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A28E70; } @@ -3023,7 +2835,6 @@ L_08A28E70: L_08A28E74: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2016))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A28E80; } @@ -3033,7 +2844,6 @@ L_08A28E80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2059))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A28E9C; } @@ -3042,7 +2852,6 @@ L_08A28E80: L_08A28E90: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2016))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A28EBC; } @@ -3050,12 +2859,10 @@ L_08A28E90: } L_08A28E9C: aot_gpr_31 = (0x08A28EA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 514u, 0x08AAE8ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28EA4u) goto L_08A28EA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A28EA4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A28EB8; } @@ -3077,7 +2884,6 @@ L_08A28EBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A28F00; } @@ -3094,7 +2900,6 @@ L_08A28ED4: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store16(aot_gpr_2 + static_cast(154), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A28EECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28EECu) goto L_08A28EEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A28EEC: @@ -3109,7 +2914,6 @@ L_08A28F00: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7713))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -3118,7 +2922,6 @@ L_08A28F00: L_08A28F14: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2061))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -3130,7 +2933,6 @@ L_08A28F20: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2075))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A28FA0; } @@ -3145,7 +2947,6 @@ L_08A28F38: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A28F64; } @@ -3164,7 +2965,6 @@ L_08A28F64: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); ctx.gpr[6] = (0u | 3u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08A28F7C; } @@ -3175,7 +2975,6 @@ L_08A28F78: goto L_08A28F7C; L_08A28F7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A28FA0; } @@ -3196,7 +2995,6 @@ L_08A28F8C: AOT_REGCACHE_SYNC_OUT(); return; L_08A28FA0: aot_gpr_31 = (0x08A28FA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28FA8u) goto L_08A28FA8; AOT_REGCACHE_SYNC_OUT(); return; L_08A28FA8: @@ -3204,7 +3002,6 @@ L_08A28FA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A28FD4; } @@ -3212,14 +3009,12 @@ L_08A28FA8: } L_08A28FBC: aot_gpr_31 = (0x08A28FC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28FC4u) goto L_08A28FC4; AOT_REGCACHE_SYNC_OUT(); return; L_08A28FC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2232))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A28FEC; } @@ -3229,7 +3024,6 @@ L_08A28FD4: aot_gpr_4 = (0u | 11u); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(7096), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A28FE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A28FE4u) goto L_08A28FE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A28FE4: @@ -3248,7 +3042,6 @@ L_08A28FEC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A350; } @@ -3259,7 +3052,6 @@ L_08A2900C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A29034; } @@ -3270,7 +3062,6 @@ L_08A29020: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2904C; } @@ -3281,7 +3072,6 @@ L_08A29034: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2904C; } @@ -3302,7 +3092,6 @@ L_08A29054: AOT_REGCACHE_SYNC_OUT(); return; L_08A2905C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A29120; } @@ -3311,7 +3100,6 @@ L_08A2905C: L_08A29064: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(89))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29120; } @@ -3329,7 +3117,6 @@ L_08A29080: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A29120; } @@ -3340,7 +3127,6 @@ L_08A29090: goto L_08A29094; L_08A29094: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29120; } @@ -3355,9 +3141,7 @@ L_08A2909C: aot_gpr_4 = (16512u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A290DC; } @@ -3375,9 +3159,7 @@ L_08A290DC: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29120; } @@ -3391,7 +3173,6 @@ L_08A290F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A29104: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A29120; } @@ -3407,7 +3188,6 @@ L_08A2910C: L_08A29120: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2085))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29178; } @@ -3418,9 +3198,7 @@ L_08A2912C: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29154; } @@ -3439,9 +3217,7 @@ L_08A29154: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29178; } @@ -3455,7 +3231,6 @@ L_08A2916C: L_08A29178: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2085))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A291C0; } @@ -3466,9 +3241,7 @@ L_08A29184: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A291C0; } @@ -3478,9 +3251,7 @@ L_08A291A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A291C0; } @@ -3503,7 +3274,6 @@ L_08A291C0: } L_08A291D4: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A291F4; } @@ -3514,7 +3284,6 @@ L_08A291DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A291F4; } @@ -3534,7 +3303,6 @@ L_08A291F4: } L_08A29200: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2920C; } @@ -3554,7 +3322,6 @@ L_08A2920C: } L_08A29218: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A29224; } @@ -3573,7 +3340,6 @@ L_08A29224: } L_08A2922C: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A29E0C; } @@ -3583,7 +3349,6 @@ L_08A29234: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2926C; } @@ -3591,12 +3356,10 @@ L_08A29234: } L_08A29244: aot_gpr_31 = (0x08A2924Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 518u, 0x08AAE910u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2924Cu) goto L_08A2924C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2924C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2926C; } @@ -3604,13 +3367,11 @@ L_08A2924C: } L_08A29254: aot_gpr_31 = (0x08A2925Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 473u, 0x08AAE644u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2925Cu) goto L_08A2925C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2925C: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A2926C; } @@ -3637,13 +3398,11 @@ L_08A2926C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A29288u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 382u, 0x0896D754u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A29288u) goto L_08A29288; AOT_REGCACHE_SYNC_OUT(); return; L_08A29288: aot_gpr_4 = (aot_gpr_2 | ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29DE0; } @@ -3660,7 +3419,6 @@ L_08A292A0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A292C0; } @@ -3672,7 +3430,6 @@ L_08A292B0: L_08A292B4: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A29D54; } @@ -3682,7 +3439,6 @@ L_08A292C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29D54; } @@ -3707,7 +3463,6 @@ L_08A292D0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A293A0; } @@ -3717,7 +3472,6 @@ L_08A292F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2935C; } @@ -3773,7 +3527,6 @@ L_08A29300: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A29610; } @@ -3783,7 +3536,6 @@ L_08A2935C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29374; } @@ -3915,9 +3667,7 @@ L_08A293A0: aot_gpr_4 = (16752u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29610; } @@ -4052,7 +3802,6 @@ L_08A294E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A29564: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A295F8; } @@ -4136,7 +3885,6 @@ L_08A2956C: AOT_REGCACHE_SYNC_OUT(); return; L_08A295EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A295F8; } @@ -4147,7 +3895,6 @@ L_08A295F4: goto L_08A295F8; L_08A295F8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A29610; } @@ -4173,7 +3920,6 @@ L_08A29600: L_08A29610: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29670; } @@ -4211,7 +3957,6 @@ L_08A2961C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A296B4; } @@ -4221,7 +3966,6 @@ L_08A29670: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A296B4; } @@ -4256,7 +4000,6 @@ L_08A29680: L_08A296B4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A296F0; } @@ -4304,7 +4047,6 @@ L_08A296C0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A29718; } @@ -4386,7 +4128,6 @@ L_08A2974C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(176))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29770; } @@ -4425,7 +4166,6 @@ L_08A29770: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A29894; } @@ -4434,7 +4174,6 @@ L_08A29770: L_08A297A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2984C; } @@ -4442,7 +4181,6 @@ L_08A297A8: } L_08A297B4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A2984C; } @@ -4529,7 +4267,6 @@ L_08A297E0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A298D4; } @@ -4594,7 +4331,6 @@ L_08A2984C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A298D4; } @@ -4664,7 +4400,6 @@ L_08A298D4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29D28; } @@ -4675,7 +4410,6 @@ L_08A298E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A29D28; } @@ -5030,12 +4764,10 @@ L_08A29AE4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A29B40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0133_entry, 133u, 437u, 0x08A1ACB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A29B40u) goto L_08A29B40; AOT_REGCACHE_SYNC_OUT(); return; L_08A29B40: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1884), ctx.gpr[19]); goto L_08A29B58; @@ -5095,7 +4827,6 @@ L_08A29BC0: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29AE4; } @@ -5259,13 +4990,11 @@ L_08A29D4C: goto L_08A29D54; L_08A29D54: aot_gpr_31 = (0x08A29D5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 398u, 0x0896D890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A29D5Cu) goto L_08A29D5C; AOT_REGCACHE_SYNC_OUT(); return; L_08A29D5C: aot_gpr_4 = (aot_gpr_2 | ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29DBC; } @@ -5275,7 +5004,6 @@ L_08A29D68: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2648))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A29DBC; } @@ -5285,7 +5013,6 @@ L_08A29D78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A29D98; } @@ -5295,7 +5022,6 @@ L_08A29D88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A29DBC; } @@ -5305,7 +5031,6 @@ L_08A29D98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29E04; } @@ -5325,7 +5050,6 @@ L_08A29DA8: L_08A29DBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29DD4; } @@ -5348,7 +5072,6 @@ L_08A29DD4: L_08A29DE0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A29DF8; } @@ -5366,7 +5089,6 @@ L_08A29DF8: goto L_08A29E04; L_08A29E04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A29E28; } @@ -5383,7 +5105,6 @@ L_08A29E0C: } L_08A29E18: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A29E28; } @@ -5410,9 +5131,7 @@ L_08A29E44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29E7C; } @@ -5421,7 +5140,6 @@ L_08A29E44: L_08A29E5C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29E7C; } @@ -5443,9 +5161,7 @@ L_08A29E7C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29EB8; } @@ -5470,9 +5186,7 @@ L_08A29EB8: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29EF4; } @@ -5497,9 +5211,7 @@ L_08A29EF4: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29F2C; } @@ -5519,9 +5231,7 @@ L_08A29F2C: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29F68; } @@ -5530,7 +5240,6 @@ L_08A29F2C: L_08A29F48: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29F68; } @@ -5545,7 +5254,6 @@ L_08A29F54: goto L_08A29F68; L_08A29F68: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A29FFC; } @@ -5554,7 +5262,6 @@ L_08A29F68: L_08A29F70: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29FFC; } @@ -5595,7 +5302,6 @@ L_08A29FB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); aot_fpr_20 = aot_fpr_20 - aot_fpr_12; aot_gpr_31 = (0x08A29FC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 522u, 0x08AAE934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A29FC0u) goto L_08A29FC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A29FC0: @@ -5610,9 +5316,7 @@ L_08A29FC8: aot_gpr_4 = (aot_gpr_4 | 43516u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A29FFC; } @@ -5621,7 +5325,6 @@ L_08A29FC8: L_08A29FE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1992))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A29FFC; } @@ -5637,7 +5340,6 @@ L_08A29FFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2A044; } @@ -5645,12 +5347,10 @@ L_08A29FFC: } L_08A2A00C: aot_gpr_31 = (0x08A2A014u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 522u, 0x08AAE934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2A014u) goto L_08A2A014; AOT_REGCACHE_SYNC_OUT(); return; L_08A2A014: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2A03C; } @@ -5658,12 +5358,10 @@ L_08A2A014: } L_08A2A01C: aot_gpr_31 = (0x08A2A024u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2A024u) goto L_08A2A024; AOT_REGCACHE_SYNC_OUT(); return; L_08A2A024: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2A03C; } @@ -5671,12 +5369,10 @@ L_08A2A024: } L_08A2A02C: aot_gpr_31 = (0x08A2A034u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2A034u) goto L_08A2A034; AOT_REGCACHE_SYNC_OUT(); return; L_08A2A034: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2A044; } @@ -5690,7 +5386,6 @@ L_08A2A044: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2080))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2A0E4; } @@ -5700,9 +5395,7 @@ L_08A2A054: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2132))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A0A8; } @@ -5729,7 +5422,6 @@ L_08A2A078: L_08A2A09C: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2132), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A260; } @@ -5756,7 +5448,6 @@ L_08A2A0B4: L_08A2A0D8: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2132), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A260; } @@ -5765,7 +5456,6 @@ L_08A2A0D8: L_08A2A0E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2085))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A190; } @@ -5781,9 +5471,7 @@ L_08A2A0F0: ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A158; } @@ -5809,7 +5497,6 @@ L_08A2A128: L_08A2A14C: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2132), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A188; } @@ -5837,7 +5524,6 @@ L_08A2A184: goto L_08A2A188; L_08A2A188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A260; } @@ -5846,7 +5532,6 @@ L_08A2A188: L_08A2A190: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A260; } @@ -5856,9 +5541,7 @@ L_08A2A19C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2132))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A1F0; } @@ -5885,7 +5568,6 @@ L_08A2A1C0: L_08A2A1E4: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2132), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A224; } @@ -5917,9 +5599,7 @@ L_08A2A224: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A260; } @@ -5929,9 +5609,7 @@ L_08A2A240: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2128))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A260; } @@ -5977,7 +5655,6 @@ L_08A2A2A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A2D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2A31C; } @@ -5985,7 +5662,6 @@ L_08A2A2D0: } L_08A2A2D8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A2A348; } @@ -6006,7 +5682,6 @@ L_08A2A2E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A308: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2A348; } @@ -6037,7 +5712,6 @@ L_08A2A31C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A348: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -6050,7 +5724,6 @@ L_08A2A350: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A358: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -6068,7 +5741,6 @@ L_08A2A368: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A370: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6086,7 +5758,6 @@ L_08A2A388: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6097,7 +5768,6 @@ L_08A2A398: goto L_08A2A39C; L_08A2A39C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6106,7 +5776,6 @@ L_08A2A39C: L_08A2A3A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2085))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6115,7 +5784,6 @@ L_08A2A3A4: L_08A2A3B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2060))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6124,7 +5792,6 @@ L_08A2A3B0: L_08A2A3BC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(89))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6133,7 +5800,6 @@ L_08A2A3BC: L_08A2A3C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A3E8; } @@ -6151,9 +5817,7 @@ L_08A2A3E8: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A414; } @@ -6174,9 +5838,7 @@ L_08A2A414: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A43C; } @@ -6194,9 +5856,7 @@ L_08A2A43C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A46C; } @@ -6216,9 +5876,7 @@ L_08A2A46C: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A498; } @@ -6239,9 +5897,7 @@ L_08A2A498: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A4C0; } @@ -6254,7 +5910,6 @@ L_08A2A4B4: goto L_08A2A4C0; L_08A2A4C0: aot_gpr_31 = (0x08A2A4C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2A4C8u) goto L_08A2A4C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2A4C8: @@ -6266,7 +5921,6 @@ L_08A2A4D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2A50C; } @@ -6275,7 +5929,6 @@ L_08A2A4D0: L_08A2A4E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A50C; } @@ -6289,7 +5942,6 @@ L_08A2A4EC: L_08A2A4F4: aot_gpr_4 = (0u | 246u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2A50C; } @@ -6304,7 +5956,6 @@ L_08A2A50C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2079))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2A5AC; } @@ -6314,9 +5965,7 @@ L_08A2A51C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2192))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2188))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A570; } @@ -6343,7 +5992,6 @@ L_08A2A540: L_08A2A564: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2192), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6370,7 +6018,6 @@ L_08A2A57C: L_08A2A5A0: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2192), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6379,7 +6026,6 @@ L_08A2A5A0: L_08A2A5AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2085))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A65C; } @@ -6394,9 +6040,7 @@ L_08A2A5B8: ctx.fpr[24] = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2192))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A620; } @@ -6423,7 +6067,6 @@ L_08A2A5F0: L_08A2A614: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2192), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6450,7 +6093,6 @@ L_08A2A62C: L_08A2A650: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2192), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6459,7 +6101,6 @@ L_08A2A650: L_08A2A65C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2079))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6469,9 +6110,7 @@ L_08A2A668: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2192))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A6BC; } @@ -6498,7 +6137,6 @@ L_08A2A68C: L_08A2A6B0: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2192), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2A6F0; } @@ -6530,9 +6168,7 @@ L_08A2A6F0: aot_gpr_4 = (16448u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6542,9 +6178,7 @@ L_08A2A70C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2184))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2A72C; } @@ -6579,12 +6213,10 @@ L_08A2A72C: L_08A2A778: ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x08A2A784u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 518u, 0x08AAE910u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2A784u) goto L_08A2A784; AOT_REGCACHE_SYNC_OUT(); return; L_08A2A784: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2A7A4; } @@ -6592,13 +6224,11 @@ L_08A2A784: } L_08A2A78C: aot_gpr_31 = (0x08A2A794u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 473u, 0x08AAE644u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2A794u) goto L_08A2A794; AOT_REGCACHE_SYNC_OUT(); return; L_08A2A794: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A2A7A4; } @@ -6626,7 +6256,6 @@ L_08A2A7B8: L_08A2A7C0: aot_gpr_4 = (aot_gpr_2 | ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AF24; } @@ -6635,7 +6264,6 @@ L_08A2A7C0: L_08A2A7CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2648))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2AEA8; } @@ -6645,7 +6273,6 @@ L_08A2A7D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2AEA8; } @@ -6655,7 +6282,6 @@ L_08A2A7E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AEA8; } @@ -6664,7 +6290,6 @@ L_08A2A7E8: L_08A2A7F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A8B8; } @@ -6685,7 +6310,6 @@ L_08A2A818: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A870; } @@ -6715,7 +6339,6 @@ L_08A2A860: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2AB0C; } @@ -6725,7 +6348,6 @@ L_08A2A870: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2A888; } @@ -6780,7 +6402,6 @@ L_08A2A8B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2A8E8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A2AB0C; } @@ -6834,9 +6455,7 @@ L_08A2A970: aot_gpr_4 = (16752u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2AB0C; } @@ -6995,7 +6614,6 @@ L_08A2AAF4: goto L_08A2AAF8; L_08A2AAF8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A2AB0C; } @@ -7010,7 +6628,6 @@ L_08A2AB00: L_08A2AB0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AB64; } @@ -7041,7 +6658,6 @@ L_08A2AB50: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AB5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2ABA8; } @@ -7051,7 +6667,6 @@ L_08A2AB64: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A2ABA8; } @@ -7085,7 +6700,6 @@ L_08A2AB9C: L_08A2ABA8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2ABDC; } @@ -7107,7 +6721,6 @@ L_08A2ABC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2ABD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2ABFC; } @@ -7156,7 +6769,6 @@ L_08A2AC30: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2AC54; } @@ -7174,7 +6786,6 @@ L_08A2AC54: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2AD9C; } @@ -7183,7 +6794,6 @@ L_08A2AC54: L_08A2AC68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2AD54; } @@ -7191,7 +6801,6 @@ L_08A2AC68: } L_08A2AC74: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A2AD54; } @@ -7204,7 +6813,6 @@ L_08A2AC7C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AC84: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A2AD14; } @@ -7256,7 +6864,6 @@ L_08A2AD00: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AD0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2ADDC; } @@ -7287,7 +6894,6 @@ L_08A2AD40: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AD4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2ADDC; } @@ -7323,7 +6929,6 @@ L_08A2AD88: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AD94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2ADDC; } @@ -7362,9 +6967,7 @@ L_08A2ADDC: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2AE74; } @@ -7372,7 +6975,6 @@ L_08A2ADDC: } L_08A2ADF8: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A2AE74; } @@ -7386,7 +6988,6 @@ L_08A2AE00: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AE0C: aot_gpr_31 = (0x08A2AE14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2AE14u) goto L_08A2AE14; AOT_REGCACHE_SYNC_OUT(); return; L_08A2AE14: @@ -7405,7 +7006,6 @@ L_08A2AE1C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AE7C; } @@ -7416,9 +7016,7 @@ L_08A2AE48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2AE7C; } @@ -7459,13 +7057,11 @@ L_08A2AEA0: goto L_08A2AEA8; L_08A2AEA8: aot_gpr_31 = (0x08A2AEB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 398u, 0x0896D890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2AEB0u) goto L_08A2AEB0; AOT_REGCACHE_SYNC_OUT(); return; L_08A2AEB0: aot_gpr_4 = (aot_gpr_2 | ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AF00; } @@ -7475,7 +7071,6 @@ L_08A2AEBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2AF00; } @@ -7485,7 +7080,6 @@ L_08A2AECC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2648))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2AF00; } @@ -7495,7 +7089,6 @@ L_08A2AEDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[23]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AF40; } @@ -7515,7 +7108,6 @@ L_08A2AEEC: L_08A2AF00: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AF18; } @@ -7538,7 +7130,6 @@ L_08A2AF18: L_08A2AF24: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2AF3C; } @@ -7567,7 +7158,6 @@ L_08A2AF40: AOT_REGCACHE_SYNC_OUT(); return; L_08A2AF68: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2AFB0; } @@ -7589,7 +7179,6 @@ L_08A2AF70: L_08A2AF98: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2AFDC; } @@ -7623,9 +7212,7 @@ L_08A2AFDC: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2B048; } @@ -7633,12 +7220,10 @@ L_08A2AFDC: } L_08A2AFF8: aot_gpr_31 = (0x08A2B000u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 522u, 0x08AAE934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B000u) goto L_08A2B000; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B000: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2B048; } @@ -7646,12 +7231,10 @@ L_08A2B000: } L_08A2B008: aot_gpr_31 = (0x08A2B010u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B010u) goto L_08A2B010; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B010: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2B048; } @@ -7659,12 +7242,10 @@ L_08A2B010: } L_08A2B018: aot_gpr_31 = (0x08A2B020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B020u) goto L_08A2B020; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B020: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2B048; } @@ -7673,7 +7254,6 @@ L_08A2B020: L_08A2B028: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2060))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B048; } @@ -7682,7 +7262,6 @@ L_08A2B028: L_08A2B034: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B048; } @@ -7695,7 +7274,6 @@ L_08A2B040: L_08A2B048: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(2228)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B05C; } @@ -7708,7 +7286,6 @@ L_08A2B054: L_08A2B05C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -7716,7 +7293,6 @@ L_08A2B05C: } L_08A2B068: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -7726,7 +7302,6 @@ L_08A2B070: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7736,7 +7311,6 @@ L_08A2B080: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7746,7 +7320,6 @@ L_08A2B090: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7756,7 +7329,6 @@ L_08A2B0A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7766,7 +7338,6 @@ L_08A2B0B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7776,7 +7347,6 @@ L_08A2B0C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7786,7 +7356,6 @@ L_08A2B0D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B110; } @@ -7807,7 +7376,6 @@ L_08A2B0E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B108: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2B1B0; } @@ -7831,7 +7399,6 @@ L_08A2B13C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B1A4; } @@ -7841,7 +7408,6 @@ L_08A2B14C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B198; } @@ -7862,7 +7428,6 @@ L_08A2B15C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B184: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2B198; } @@ -7899,7 +7464,6 @@ L_08A2B1B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -7945,7 +7509,6 @@ L_08A2B1F4: L_08A2B224: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B238; } @@ -7953,7 +7516,6 @@ L_08A2B224: } L_08A2B230: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -7964,9 +7526,7 @@ L_08A2B238: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2B25C; } @@ -7978,7 +7538,6 @@ L_08A2B254: goto L_08A2B25C; L_08A2B25C: aot_gpr_31 = (0x08A2B264u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B264u) goto L_08A2B264; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B264: @@ -7988,7 +7547,6 @@ L_08A2B264: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B26C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2B28C; } @@ -7996,14 +7554,12 @@ L_08A2B26C: } L_08A2B274: aot_gpr_31 = (0x08A2B27Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B27Cu) goto L_08A2B27C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B27C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(3262)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -8011,7 +7567,6 @@ L_08A2B27C: } L_08A2B28C: aot_gpr_31 = (0x08A2B294u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B294u) goto L_08A2B294; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B294: @@ -8022,7 +7577,6 @@ L_08A2B294: L_08A2B29C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A2B2E4; } @@ -8037,7 +7591,6 @@ L_08A2B2B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B2D8; } @@ -8052,7 +7605,6 @@ L_08A2B2C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B2E4; } @@ -8061,7 +7613,6 @@ L_08A2B2C8: L_08A2B2D8: ctx.gpr[16] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2B2E8; } @@ -8094,7 +7645,6 @@ L_08A2B310: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B340; } @@ -8104,7 +7654,6 @@ L_08A2B330: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B3C4; } @@ -8113,7 +7662,6 @@ L_08A2B330: L_08A2B340: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B37C; } @@ -8131,7 +7679,6 @@ L_08A2B34C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B3C4; } @@ -8139,9 +7686,7 @@ L_08A2B34C: } L_08A2B37C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2B3C4; } @@ -8149,7 +7694,6 @@ L_08A2B37C: } L_08A2B38C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A2B3C4; } @@ -8159,7 +7703,6 @@ L_08A2B394: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B3B0; } @@ -8187,7 +7730,6 @@ L_08A2B3C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B508; } @@ -8196,7 +7738,6 @@ L_08A2B3C4: L_08A2B3D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7244))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -8262,7 +7803,6 @@ L_08A2B44C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B488: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2B4D4; } @@ -8297,7 +7837,6 @@ L_08A2B4BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B4CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2B4F8; } @@ -8322,7 +7861,6 @@ L_08A2B4F8: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-7244), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2B50C; } @@ -8352,7 +7890,6 @@ L_08A2B544: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B560; } @@ -8370,7 +7907,6 @@ L_08A2B554: L_08A2B560: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7243))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B574; } @@ -8384,7 +7920,6 @@ L_08A2B574: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7100))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B5CC; } @@ -8399,7 +7934,6 @@ L_08A2B58C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B5CC; } @@ -8409,9 +7943,7 @@ L_08A2B59C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2B5C4; } @@ -8424,7 +7956,6 @@ L_08A2B5B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B5BC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2B5D0; } @@ -8451,7 +7982,6 @@ L_08A2B5D8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7100), aot_gpr_4); aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2B628; } @@ -8487,7 +8017,6 @@ L_08A2B630: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B648; } @@ -8515,7 +8044,6 @@ L_08A2B674: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B844; } @@ -8533,7 +8061,6 @@ L_08A2B684: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B6C0; } @@ -8556,7 +8083,6 @@ L_08A2B6C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B6CC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2B7B8; } @@ -8568,7 +8094,6 @@ L_08A2B6D4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2B7B8; } @@ -8630,9 +8155,7 @@ L_08A2B750: aot_gpr_4 = (16512u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2B7A4; } @@ -8653,7 +8176,6 @@ L_08A2B768: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(275), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2B7B8; } @@ -8664,7 +8186,6 @@ L_08A2B7A4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B6EC; } @@ -8672,7 +8193,6 @@ L_08A2B7A4: } L_08A2B7B8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A2B844; } @@ -8680,12 +8200,10 @@ L_08A2B7B8: } L_08A2B7C0: aot_gpr_31 = (0x08A2B7C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B7C8u) goto L_08A2B7C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B7C8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2B814; } @@ -8693,7 +8211,6 @@ L_08A2B7C8: } L_08A2B7D0: aot_gpr_31 = (0x08A2B7D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B7D8u) goto L_08A2B7D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B7D8: @@ -8703,7 +8220,6 @@ L_08A2B7D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2B7E0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2B814; } @@ -8711,7 +8227,6 @@ L_08A2B7E0: } L_08A2B7E8: aot_gpr_31 = (0x08A2B7F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2B7F0u) goto L_08A2B7F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A2B7F0: @@ -8727,7 +8242,6 @@ L_08A2B7F8: L_08A2B800: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2B814; } @@ -8755,7 +8269,6 @@ L_08A2B844: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2016))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BB70; } @@ -8765,7 +8278,6 @@ L_08A2B854: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8775,7 +8287,6 @@ L_08A2B864: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8785,7 +8296,6 @@ L_08A2B874: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8795,7 +8305,6 @@ L_08A2B884: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8805,7 +8314,6 @@ L_08A2B894: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8815,7 +8323,6 @@ L_08A2B8A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8825,7 +8332,6 @@ L_08A2B8B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8835,7 +8341,6 @@ L_08A2B8C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8845,7 +8350,6 @@ L_08A2B8D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8855,7 +8359,6 @@ L_08A2B8E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8865,7 +8368,6 @@ L_08A2B8F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8875,7 +8377,6 @@ L_08A2B904: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8884,7 +8385,6 @@ L_08A2B904: L_08A2B914: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7580))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2B928; } @@ -8995,7 +8495,6 @@ L_08A2BA40: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BA4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2BABC; } @@ -9058,7 +8557,6 @@ L_08A2BABC: aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(275), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BB00; } @@ -9081,7 +8579,6 @@ L_08A2BB00: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BB58; } @@ -9112,7 +8609,6 @@ L_08A2BB58: L_08A2BB70: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4213))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BB84; } @@ -9126,7 +8622,6 @@ L_08A2BB84: ctx.gpr[18] = (0u | 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BBF0; } @@ -9139,7 +8634,6 @@ L_08A2BB94: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BB9C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2BBCC; } @@ -9150,9 +8644,7 @@ L_08A2BBA4: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2BBF0; } @@ -9172,9 +8664,7 @@ L_08A2BBCC: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2BBF0; } @@ -9188,7 +8678,6 @@ L_08A2BBF0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2075))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9198,7 +8687,6 @@ L_08A2BC00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9208,7 +8696,6 @@ L_08A2BC10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9218,7 +8705,6 @@ L_08A2BC20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9228,7 +8714,6 @@ L_08A2BC30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9238,7 +8723,6 @@ L_08A2BC40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9248,7 +8732,6 @@ L_08A2BC50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9258,7 +8741,6 @@ L_08A2BC60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9268,7 +8750,6 @@ L_08A2BC70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9278,7 +8759,6 @@ L_08A2BC80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9288,7 +8768,6 @@ L_08A2BC90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9298,7 +8777,6 @@ L_08A2BCA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9308,7 +8786,6 @@ L_08A2BCB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9318,7 +8795,6 @@ L_08A2BCC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9328,7 +8804,6 @@ L_08A2BCD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9338,7 +8813,6 @@ L_08A2BCE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9348,7 +8822,6 @@ L_08A2BCF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 42u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9358,7 +8831,6 @@ L_08A2BD00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9368,7 +8840,6 @@ L_08A2BD10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9378,7 +8849,6 @@ L_08A2BD20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9388,7 +8858,6 @@ L_08A2BD30: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9398,7 +8867,6 @@ L_08A2BD40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9408,7 +8876,6 @@ L_08A2BD50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9417,7 +8884,6 @@ L_08A2BD50: L_08A2BD60: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2BD78; } @@ -9426,7 +8892,6 @@ L_08A2BD60: L_08A2BD6C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BD7C; } @@ -9446,7 +8911,6 @@ L_08A2BD7C: } L_08A2BD88: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A2BDAC; } @@ -9455,7 +8919,6 @@ L_08A2BD88: L_08A2BD90: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2054))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BDBC; } @@ -9468,7 +8931,6 @@ L_08A2BD9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BDA4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A2BDBC; } @@ -9481,7 +8943,6 @@ L_08A2BDAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BDB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2BE90; } @@ -9498,7 +8959,6 @@ L_08A2BDBC: } L_08A2BDC8: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A2BDDC; } @@ -9507,7 +8967,6 @@ L_08A2BDC8: L_08A2BDD0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2054))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BE68; } @@ -9520,7 +8979,6 @@ L_08A2BDDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BDE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2BE10; } @@ -9534,7 +8992,6 @@ L_08A2BDEC: L_08A2BDF4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2BE10; } @@ -9547,7 +9004,6 @@ L_08A2BE00: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BE08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2BE90; } @@ -9560,7 +9016,6 @@ L_08A2BE10: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BE18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A2BE58; } @@ -9574,7 +9029,6 @@ L_08A2BE20: L_08A2BE28: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A2BE48; } @@ -9588,7 +9042,6 @@ L_08A2BE34: L_08A2BE3C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2BE58; } @@ -9601,7 +9054,6 @@ L_08A2BE48: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BE50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2BE90; } @@ -9614,7 +9066,6 @@ L_08A2BE58: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BE60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2BE90; } @@ -9623,7 +9074,6 @@ L_08A2BE60: L_08A2BE68: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BE84; } @@ -9632,7 +9082,6 @@ L_08A2BE68: L_08A2BE74: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(1964))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2BE84; } @@ -9651,7 +9100,6 @@ L_08A2BE90: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0138_entry, 138u, 235u, 0x08A2D72Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9661,7 +9109,6 @@ L_08A2BEA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BED0; } @@ -9671,7 +9118,6 @@ L_08A2BEB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BED0; } @@ -9681,7 +9127,6 @@ L_08A2BEC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BED8; } @@ -9699,7 +9144,6 @@ L_08A2BED8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BEF8; } @@ -9709,7 +9153,6 @@ L_08A2BEE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BF44; } @@ -9743,7 +9186,6 @@ L_08A2BF28: } L_08A2BF30: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BF88; } @@ -9752,7 +9194,6 @@ L_08A2BF30: L_08A2BF38: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2BF88; } @@ -9762,7 +9203,6 @@ L_08A2BF44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BF88; } @@ -9780,7 +9220,6 @@ L_08A2BF54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2BF88; } @@ -9801,7 +9240,6 @@ L_08A2BF98: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0138_entry, 138u, 20u, 0x08A2C198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9812,7 +9250,6 @@ L_08A2BFA8: goto L_08A2BFAC; L_08A2BFAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0138_entry, 138u, 20u, 0x08A2C198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9825,7 +9262,6 @@ L_08A2BFB4: AOT_REGCACHE_SYNC_OUT(); return; L_08A2BFBC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0138_entry, 138u, 20u, 0x08A2C198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9835,7 +9271,6 @@ L_08A2BFC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0138_entry, 138u, 19u, 0x08A2C194u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9853,7 +9288,6 @@ L_08A2BFD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0138_entry, 138u, 19u, 0x08A2C194u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0138.cpp b/profiles/vcs/generated/generated_unit_0138.cpp index 9a8aecb..0122d22 100644 --- a/profiles/vcs/generated/generated_unit_0138.cpp +++ b/profiles/vcs/generated/generated_unit_0138.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0138[4087] = { - 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 18, 0, 19, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, - 0, 35, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, - 0, 43, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 46, 0, 47, 0, 48, 0, 49, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 0, 67, 0, 68, 0, - 69, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, - 0, 74, 0, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, - 96, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 0, 0, 115, 0, 0, 0, - 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 125, 0, 126, - 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 130, 0, 131, 0, 0, 0, 132, 0, 0, 0, 133, - 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 137, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 141, 0, 0, 142, 0, 0, 143, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, - 0, 0, 0, 146, 0, 147, 0, 148, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 152, 0, 0, 153, 0, 154, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 158, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 161, - 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 194, 0, 0, 0, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 197, 0, 0, 198, 0, 0, 199, 0, 0, 200, 0, 201, 0, 202, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, - 0, 0, 0, 205, 0, 206, 0, 0, 0, 0, 0, 0, 207, 0, 208, 0, 209, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, - 213, 0, 214, 0, 0, 0, 215, 216, 0, 217, 0, 0, 0, 0, 218, 0, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 226, - 0, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 0, 243, 0, 244, 0, 245, 0, 246, 0, 0, 247, 0, 0, 248, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, - 0, 0, 255, 0, 0, 256, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 260, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 270, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, - 273, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 283, 284, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 289, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 306, 0, 0, 307, 0, 0, 0, 308, 0, 309, 0, 0, 310, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 314, 0, 315, 0, 316, 0, 317, 0, 0, 0, 318, 0, 0, 0, 319, 320, 0, 321, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, - 0, 324, 0, 325, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 338, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 342, - 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 357, 358, 0, - 359, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, - 364, 0, 365, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 373, 0, 0, 374, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 0, 0, 0, 378, 0, 0, 379, 0, 380, 0, 0, 0, 0, 381, 0, 382, 383, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 393, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, - 0, 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, - 0, 403, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 410, 0, 411, 0, 0, 412, 0, 413, 0, 414, 0, 415, 0, 416, 0, - 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 0, 0, 0, - 0, 0, 422, 0, 0, 423, 0, 424, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 427, 0, 0, 428, 429, 0, 430, 0, 431, 0, - 432, 0, 433, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 439, 0, 440, 0, 441, 0, - 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, - 0, 0, 0, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 472, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, - 0, 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, 0, - 489, 0, 0, 0, 0, 490, 491, 0, 492, 0, 493, 0, 494, 495, 0, 0, 0, 496, 0, 0, 497, 498, 0, 499, 0, 0, 500, 0, 501, 0, 0, 502, - 0, 503, 0, 0, 504, 0, 505, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 510, 511, 0, 512, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 515, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 518, 0, 519, 0, 520, - 0, 0, 521, 0, 522, 0, 523, 0, 524, 0, 0, 525, 0, 526, 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, - 531, 0, 532, 0, 533, 0, 0, 534, 0, 535, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 538, 0, 539, 0, 540, 0, 0, - 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, - 545, 0, 0, 0, 546, 0, 547, 0, 548, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 551, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 558, 559, 0, - 560, 0, 561, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 565, 0, 566, 567, 0, 0, 0, 0, 0, - 0, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, - 0, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, - 0, 0, 579, 0, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 588, 0, 0, - 0, 0, 0, 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 596, 0, - 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, - 0, 0, 602, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 607, 0, - 0, 0, 0, 0, 0, 608, 0, 609, 0, 610, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 616, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 619, 620, 0, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, - 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, - 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 634, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0138[64] = { + 0x002100008A088955ull, 0x4500113600200440ull, 0x2230010011400400ull, 0x088AA22222222222ull, + 0x0280080080080080ull, 0x0020020020020020ull, 0x8008004556002002ull, 0x001001001001001Aull, + 0x1001001001001001ull, 0x0100100100100100ull, 0x0800800950010010ull, 0x0080080080080080ull, + 0x1204008008008008ull, 0x0049010111400800ull, 0x88A28008B2001002ull, 0x4212600400620028ull, + 0x88892400530012A8ull, 0x1000800148888888ull, 0x0480000801900080ull, 0x0250020049250020ull, + 0x282A498008C00420ull, 0x801242C511055028ull, 0x200490A490011400ull, 0x4954445001110500ull, + 0x4008012422250400ull, 0x0511400801240889ull, 0x0010004010028011ull, 0x0200484032001002ull, + 0x0400540040100110ull, 0x0040040040040040ull, 0x010014004A242814ull, 0x0080008A222C4550ull, + 0x0020020000000000ull, 0x2002002002002002ull, 0x8410020200200200ull, 0x8010010020000040ull, + 0x688AA82000000001ull, 0x2080100D44000803ull, 0x0000801900084100ull, 0x0800A00080168521ull, + 0x1005210030004880ull, 0x01005006800800A0ull, 0x02404801554A1004ull, 0x5500A055565002A4ull, + 0x0000010004100155ull, 0x0000000000200000ull, 0x8220000000000000ull, 0x0040000400042940ull, + 0x4004004004004004ull, 0x0C00400400400400ull, 0x2800040400080004ull, 0x508A20400100000Cull, + 0x1614285294B23561ull, 0x0A142954A9003500ull, 0x080500082A100695ull, 0x6840284029004151ull, + 0x5400820406850405ull, 0x02040884080440A0ull, 0x0082014028804020ull, 0x0422808044001400ull, + 0x40000AA041002114ull, 0x00208D4014800200ull, 0x0812000020100028ull, 0x00400C5080000002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0138[64] = { + 1u, 14u, 26u, 35u, 52u, 58u, 63u, 74u, 81u, 87u, 92u, 100u, 105u, 112u, 121u, 134u, + 146u, 162u, 173u, 180u, 191u, 205u, 222u, 234u, 249u, 260u, 273u, 280u, 289u, 297u, 302u, 314u, + 328u, 330u, 336u, 343u, 348u, 359u, 370u, 377u, 389u, 399u, 408u, 422u, 442u, 450u, 451u, 454u, + 461u, 467u, 473u, 479u, 489u, 513u, 531u, 545u, 560u, 574u, 584u, 593u, 602u, 613u, 623u, 630u, }; void recomp_unit_0138_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0138_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A2C004u; - entry_id = (entry_delta < 16348u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0138[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16348u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0138[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0138[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A2C004; @@ -814,7 +721,6 @@ L_08A2C004: AOT_REGCACHE_SYNC_OUT(); return; L_08A2C00C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2C068; } @@ -856,7 +762,6 @@ L_08A2C050: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[0] - aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2C080; } @@ -888,9 +793,7 @@ L_08A2C080: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2C0D8; } @@ -922,9 +825,7 @@ L_08A2C0D8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2C12C; } @@ -960,9 +861,7 @@ L_08A2C158: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2C18C; } @@ -973,7 +872,6 @@ L_08A2C188: goto L_08A2C18C; L_08A2C18C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2C198; } @@ -985,7 +883,6 @@ L_08A2C194: L_08A2C198: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2C1EC; } @@ -995,7 +892,6 @@ L_08A2C1A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C1EC; } @@ -1013,7 +909,6 @@ L_08A2C1B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C1EC; } @@ -1031,7 +926,6 @@ L_08A2C1EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C264; } @@ -1049,7 +943,6 @@ L_08A2C1FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C25C; } @@ -1067,7 +960,6 @@ L_08A2C22C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C2D8; } @@ -1085,7 +977,6 @@ L_08A2C264: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C2D8; } @@ -1103,7 +994,6 @@ L_08A2C274: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C2D4; } @@ -1121,7 +1011,6 @@ L_08A2C2A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C2D8; } @@ -1134,7 +1023,6 @@ L_08A2C2D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1144,7 +1032,6 @@ L_08A2C2E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1154,7 +1041,6 @@ L_08A2C2F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1164,7 +1050,6 @@ L_08A2C308: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1174,7 +1059,6 @@ L_08A2C318: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1184,7 +1068,6 @@ L_08A2C328: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1194,7 +1077,6 @@ L_08A2C338: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 42u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1204,7 +1086,6 @@ L_08A2C348: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1214,7 +1095,6 @@ L_08A2C358: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1224,7 +1104,6 @@ L_08A2C368: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1234,7 +1113,6 @@ L_08A2C378: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1244,7 +1122,6 @@ L_08A2C388: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1254,7 +1131,6 @@ L_08A2C398: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3B8; } @@ -1264,7 +1140,6 @@ L_08A2C3A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C3D0; } @@ -1277,7 +1152,6 @@ L_08A2C3B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2C3C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2C3D0; } @@ -1295,7 +1169,6 @@ L_08A2C3D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C68C; } @@ -1305,7 +1178,6 @@ L_08A2C3E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C68C; } @@ -1521,7 +1393,6 @@ L_08A2C638: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -1532,7 +1403,6 @@ L_08A2C668: goto L_08A2C66C; L_08A2C66C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -1545,7 +1415,6 @@ L_08A2C674: AOT_REGCACHE_SYNC_OUT(); return; L_08A2C67C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -1563,7 +1432,6 @@ L_08A2C68C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CE80; } @@ -1582,7 +1450,6 @@ L_08A2C69C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C700; } @@ -1600,7 +1467,6 @@ L_08A2C6D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2C714; } @@ -1613,7 +1479,6 @@ L_08A2C700: AOT_REGCACHE_SYNC_OUT(); return; L_08A2C708: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A2C714; } @@ -1634,7 +1499,6 @@ L_08A2C714: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1652,7 +1516,6 @@ L_08A2C744: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1670,7 +1533,6 @@ L_08A2C774: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1688,7 +1550,6 @@ L_08A2C7A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1706,7 +1567,6 @@ L_08A2C7D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1724,7 +1584,6 @@ L_08A2C804: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1742,7 +1601,6 @@ L_08A2C834: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1760,7 +1618,6 @@ L_08A2C864: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1778,7 +1635,6 @@ L_08A2C894: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1796,7 +1652,6 @@ L_08A2C8C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1814,7 +1669,6 @@ L_08A2C8F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 42u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1832,7 +1686,6 @@ L_08A2C924: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1850,7 +1703,6 @@ L_08A2C954: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1868,7 +1720,6 @@ L_08A2C984: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1886,7 +1737,6 @@ L_08A2C9B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1904,7 +1754,6 @@ L_08A2C9E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1922,7 +1771,6 @@ L_08A2CA14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1940,7 +1788,6 @@ L_08A2CA44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1948,7 +1795,6 @@ L_08A2CA44: } L_08A2CA74: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A2CA84; } @@ -1956,7 +1802,6 @@ L_08A2CA74: } L_08A2CA7C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A2CE68; } @@ -1965,7 +1810,6 @@ L_08A2CA7C: L_08A2CA84: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2CE68; } @@ -1983,7 +1827,6 @@ L_08A2CA90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2001,7 +1844,6 @@ L_08A2CAC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2019,7 +1861,6 @@ L_08A2CAF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2037,7 +1878,6 @@ L_08A2CB20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2055,7 +1895,6 @@ L_08A2CB50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2073,7 +1912,6 @@ L_08A2CB80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2091,7 +1929,6 @@ L_08A2CBB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 42u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2109,7 +1946,6 @@ L_08A2CBE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2127,7 +1963,6 @@ L_08A2CC10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2145,7 +1980,6 @@ L_08A2CC40: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCA0; } @@ -2163,7 +1997,6 @@ L_08A2CC70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CCF4; } @@ -2214,7 +2047,6 @@ L_08A2CCF4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CE08; } @@ -2259,9 +2091,7 @@ L_08A2CD84: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2CDD0; } @@ -2273,9 +2103,7 @@ L_08A2CDA4: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2CDD0; } @@ -2303,7 +2131,6 @@ L_08A2CDDC: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(388), std::bit_cast(ctx.fpr[0])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2CE68; } @@ -2341,7 +2168,6 @@ L_08A2CE34: L_08A2CE68: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(90))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2CE78; } @@ -2352,7 +2178,6 @@ L_08A2CE74: goto L_08A2CE78; L_08A2CE78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -2362,7 +2187,6 @@ L_08A2CE80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CEC8; } @@ -2380,7 +2204,6 @@ L_08A2CE90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -2398,7 +2221,6 @@ L_08A2CEC8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CEE0; } @@ -2416,7 +2238,6 @@ L_08A2CEE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF10; } @@ -2426,7 +2247,6 @@ L_08A2CEF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF10; } @@ -2436,7 +2256,6 @@ L_08A2CF00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF18; } @@ -2462,7 +2281,6 @@ L_08A2CF18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -2472,7 +2290,6 @@ L_08A2CF48: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CF5C; } @@ -2493,7 +2310,6 @@ L_08A2CF5C: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2CFBC; } @@ -2510,7 +2326,6 @@ L_08A2CF8C: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2CFBC; } @@ -2522,7 +2337,6 @@ L_08A2CFB8: L_08A2CFBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D068; } @@ -2531,7 +2345,6 @@ L_08A2CFBC: L_08A2CFC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1988))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D068; } @@ -2542,7 +2355,6 @@ L_08A2CFD4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D010; } @@ -2553,7 +2365,6 @@ L_08A2CFE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D010; } @@ -2564,7 +2375,6 @@ L_08A2CFFC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D068; } @@ -2577,7 +2387,6 @@ L_08A2D010: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D018: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2D068; } @@ -2591,7 +2400,6 @@ L_08A2D020: L_08A2D028: aot_gpr_4 = (0u | 244u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2D068; } @@ -2609,7 +2417,6 @@ L_08A2D034: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D068; } @@ -2629,7 +2436,6 @@ L_08A2D068: } L_08A2D074: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2D3DC; } @@ -2647,7 +2453,6 @@ L_08A2D07C: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D3DC; } @@ -2656,7 +2461,6 @@ L_08A2D07C: L_08A2D0AC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2D34C; } @@ -2665,7 +2469,6 @@ L_08A2D0AC: L_08A2D0B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D0D0; } @@ -2674,7 +2477,6 @@ L_08A2D0B8: L_08A2D0C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2684,7 +2486,6 @@ L_08A2D0D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2694,7 +2495,6 @@ L_08A2D0E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2704,7 +2504,6 @@ L_08A2D0F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2714,7 +2513,6 @@ L_08A2D100: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2724,7 +2522,6 @@ L_08A2D110: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2734,7 +2531,6 @@ L_08A2D120: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2744,7 +2540,6 @@ L_08A2D130: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2754,7 +2549,6 @@ L_08A2D140: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2764,7 +2558,6 @@ L_08A2D150: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2774,7 +2567,6 @@ L_08A2D160: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2783,7 +2575,6 @@ L_08A2D160: L_08A2D170: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7580))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2D184; } @@ -2907,7 +2698,6 @@ L_08A2D290: aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(275), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D2EC; } @@ -2930,7 +2720,6 @@ L_08A2D2EC: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -2952,7 +2741,6 @@ L_08A2D318: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -2961,7 +2749,6 @@ L_08A2D344: L_08A2D34C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2081))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -2975,7 +2762,6 @@ L_08A2D358: L_08A2D364: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D37C; } @@ -2998,7 +2784,6 @@ L_08A2D37C: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3020,7 +2805,6 @@ L_08A2D3A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3029,7 +2813,6 @@ L_08A2D3D4: L_08A2D3DC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D634; } @@ -3047,7 +2830,6 @@ L_08A2D3E8: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D634; } @@ -3058,7 +2840,6 @@ L_08A2D418: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D45C; } @@ -3076,7 +2857,6 @@ L_08A2D42C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D460; } @@ -3089,7 +2869,6 @@ L_08A2D460: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D4A4; } @@ -3107,7 +2886,6 @@ L_08A2D470: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D4A4; } @@ -3119,7 +2897,6 @@ L_08A2D4A0: L_08A2D4A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2081))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3128,7 +2905,6 @@ L_08A2D4A4: L_08A2D4B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2069))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3137,7 +2913,6 @@ L_08A2D4B0: L_08A2D4BC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3145,7 +2920,6 @@ L_08A2D4BC: } L_08A2D4C8: ctx.gpr[31] = (0x08A2D4D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2D4D0u) goto L_08A2D4D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A2D4D0: @@ -3159,7 +2933,6 @@ L_08A2D4D8: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(1488), std::bit_cast(aot_fpr_12)); ctx.gpr[31] = (0x08A2D4F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2D4F0u) goto L_08A2D4F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A2D4F0: @@ -3173,7 +2946,6 @@ L_08A2D4F8: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(1492), std::bit_cast(aot_fpr_12)); ctx.gpr[31] = (0x08A2D510u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2D510u) goto L_08A2D510; AOT_REGCACHE_SYNC_OUT(); return; L_08A2D510: @@ -3188,7 +2960,6 @@ L_08A2D518: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(1496), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3201,7 +2972,6 @@ L_08A2D534: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D53C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3216,9 +2986,7 @@ L_08A2D54C: aot_gpr_4 = (16780u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3228,7 +2996,6 @@ L_08A2D564: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D584; } @@ -3238,7 +3005,6 @@ L_08A2D574: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D58C; } @@ -3252,7 +3018,6 @@ L_08A2D58C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2081))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D5A0; } @@ -3263,7 +3028,6 @@ L_08A2D59C: goto L_08A2D5A0; L_08A2D5A0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A2D62C; } @@ -3279,7 +3043,6 @@ L_08A2D5A8: L_08A2D5BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D5D4; } @@ -3302,7 +3065,6 @@ L_08A2D5D4: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D62C; } @@ -3324,7 +3086,6 @@ L_08A2D600: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D62C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3334,7 +3095,6 @@ L_08A2D634: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3352,7 +3112,6 @@ L_08A2D644: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3361,7 +3120,6 @@ L_08A2D644: L_08A2D674: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3370,7 +3128,6 @@ L_08A2D674: L_08A2D680: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2D6A0; } @@ -3383,7 +3140,6 @@ L_08A2D68C: goto L_08A2DFE0; L_08A2D698: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2D6B4; } @@ -3399,7 +3155,6 @@ L_08A2D6A0: L_08A2D6B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D6CC; } @@ -3422,7 +3177,6 @@ L_08A2D6CC: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3444,7 +3198,6 @@ L_08A2D6F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3456,7 +3209,6 @@ L_08A2D72C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2083))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D754; } @@ -3466,7 +3218,6 @@ L_08A2D744: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2084))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D84C; } @@ -3476,7 +3227,6 @@ L_08A2D754: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D79C; } @@ -3494,7 +3244,6 @@ L_08A2D764: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D84C; } @@ -3512,7 +3261,6 @@ L_08A2D79C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D7CC; } @@ -3522,7 +3270,6 @@ L_08A2D7AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D7CC; } @@ -3532,7 +3279,6 @@ L_08A2D7BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(1976)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D7FC; } @@ -3550,7 +3296,6 @@ L_08A2D7D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D7DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2D7FC; } @@ -3559,7 +3304,6 @@ L_08A2D7DC: L_08A2D7E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2084))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D7FC; } @@ -3586,7 +3330,6 @@ L_08A2D7FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(2848)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D84C; } @@ -3609,7 +3352,6 @@ L_08A2D844: L_08A2D84C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2D904; } @@ -3619,7 +3361,6 @@ L_08A2D858: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2073))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D904; } @@ -3629,7 +3370,6 @@ L_08A2D868: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(2852)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D904; } @@ -3645,7 +3385,6 @@ L_08A2D878: L_08A2D88C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D8A4; } @@ -3668,7 +3407,6 @@ L_08A2D8A4: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3690,7 +3428,6 @@ L_08A2D8D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D8FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3699,7 +3436,6 @@ L_08A2D8FC: L_08A2D904: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D9C4; } @@ -3709,7 +3445,6 @@ L_08A2D910: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2073))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D9C4; } @@ -3719,7 +3454,6 @@ L_08A2D920: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(2852)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D9C4; } @@ -3737,7 +3471,6 @@ L_08A2D930: L_08A2D94C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2D964; } @@ -3760,7 +3493,6 @@ L_08A2D964: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3782,7 +3514,6 @@ L_08A2D990: AOT_REGCACHE_SYNC_OUT(); return; L_08A2D9BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3792,7 +3523,6 @@ L_08A2D9C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2073))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D9E4; } @@ -3802,7 +3532,6 @@ L_08A2D9D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(2852)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2D9EC; } @@ -3810,7 +3539,6 @@ L_08A2D9D4: } L_08A2D9E4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A2DC24; } @@ -3822,7 +3550,6 @@ L_08A2D9EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(2083))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DA40; } @@ -3832,7 +3559,6 @@ L_08A2DA04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7096)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DA40; } @@ -3857,7 +3583,6 @@ L_08A2DA14: } L_08A2DA40: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A2DA74; } @@ -3987,7 +3712,6 @@ L_08A2DB9C: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(2068), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DBBC; } @@ -4010,7 +3734,6 @@ L_08A2DBBC: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2DC14; } @@ -4048,7 +3771,6 @@ L_08A2DC24: aot_gpr_4 = (aot_gpr_17 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2DC7C; } @@ -4078,7 +3800,6 @@ L_08A2DC7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4091,7 +3812,6 @@ L_08A2DCAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A2DCB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2DE30; } @@ -4109,7 +3829,6 @@ L_08A2DCBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4127,7 +3846,6 @@ L_08A2DCEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4145,7 +3863,6 @@ L_08A2DD1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4163,7 +3880,6 @@ L_08A2DD4C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4181,7 +3897,6 @@ L_08A2DD7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4199,7 +3914,6 @@ L_08A2DDAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE0C; } @@ -4217,7 +3931,6 @@ L_08A2DDDC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE30; } @@ -4225,7 +3938,6 @@ L_08A2DDDC: } L_08A2DE0C: ctx.gpr[31] = (0x08A2DE14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2DE14u) goto L_08A2DE14; AOT_REGCACHE_SYNC_OUT(); return; L_08A2DE14: @@ -4243,7 +3955,6 @@ L_08A2DE14: } L_08A2DE30: ctx.gpr[31] = (0x08A2DE38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2DE38u) goto L_08A2DE38; AOT_REGCACHE_SYNC_OUT(); return; L_08A2DE38: @@ -4256,7 +3967,6 @@ L_08A2DE38: L_08A2DE4C: aot_gpr_16 = (0u | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A2DE7C; } @@ -4266,7 +3976,6 @@ L_08A2DE58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DE7C; } @@ -4295,7 +4004,6 @@ L_08A2DE7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(1876))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A2DF14; } @@ -4303,7 +4011,6 @@ L_08A2DE7C: } L_08A2DEAC: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A2DF14; } @@ -4321,7 +4028,6 @@ L_08A2DEB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DF14; } @@ -4339,7 +4045,6 @@ L_08A2DEE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DFA0; } @@ -4357,7 +4062,6 @@ L_08A2DF1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A2DF24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2DFA0; } @@ -4375,7 +4079,6 @@ L_08A2DF3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DFA0; } @@ -4386,7 +4089,6 @@ L_08A2DF4C: goto L_08A2DF50; L_08A2DF50: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2DFA0; } @@ -4396,7 +4098,6 @@ L_08A2DF58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DF90; } @@ -4406,7 +4107,6 @@ L_08A2DF68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7620))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2DFA0; } @@ -4421,7 +4121,6 @@ L_08A2DF78: AOT_REGCACHE_SYNC_OUT(); return; L_08A2DF88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2DFA0; } @@ -4457,7 +4156,17 @@ L_08A2DFA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2DFE0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4514,7 +4223,6 @@ L_08A2E0A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4532,7 +4240,6 @@ L_08A2E0D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4550,7 +4257,6 @@ L_08A2E108: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4568,7 +4274,6 @@ L_08A2E138: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4586,7 +4291,6 @@ L_08A2E168: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 42u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4604,7 +4308,6 @@ L_08A2E198: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 43u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4622,7 +4325,6 @@ L_08A2E1C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4640,7 +4342,6 @@ L_08A2E1F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4658,7 +4359,6 @@ L_08A2E228: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 47u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E288; } @@ -4676,7 +4376,6 @@ L_08A2E258: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E31C; } @@ -4690,7 +4389,6 @@ L_08A2E288: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2E31C; } @@ -4714,7 +4412,6 @@ L_08A2E2D4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16329u << 16u); if (branch_taken) { @@ -4772,7 +4469,6 @@ L_08A2E31C: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2E3A4; } @@ -4884,7 +4580,6 @@ L_08A2E404: aot_gpr_4 = (ctx.gpr[19] + static_cast(-3)); aot_gpr_5 = (aot_gpr_4 < static_cast(45) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A2E950; } @@ -4896,14 +4591,22 @@ L_08A2E498: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5640))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2E4B0: ctx.gpr[31] = (0x08A2E4B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2E4B8u) goto L_08A2E4B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2E4B8: @@ -4916,7 +4619,6 @@ L_08A2E4B8: } L_08A2E4C0: ctx.gpr[31] = (0x08A2E4C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2E4C8u) goto L_08A2E4C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2E4C8: @@ -4926,7 +4628,6 @@ L_08A2E4C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A2E4D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[22])) && aot_fpr_20 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(20))); if (branch_taken) { @@ -4936,7 +4637,6 @@ L_08A2E4D0: } L_08A2E4E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A2E4FC; @@ -4990,7 +4690,6 @@ L_08A2E530: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -5000,9 +4699,7 @@ L_08A2E530: } L_08A2E56C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2E584; } @@ -5018,7 +4715,6 @@ L_08A2E57C: } L_08A2E584: ctx.gpr[31] = (0x08A2E58Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2E58Cu) goto L_08A2E58C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2E58C: @@ -5046,7 +4742,6 @@ L_08A2E5B4: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(232), std::bit_cast(ctx.fpr[22])); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2E950; } @@ -5058,7 +4753,6 @@ L_08A2E5E0: ctx.fpr[22] = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2E684; } @@ -5082,7 +4776,6 @@ L_08A2E624: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -5115,7 +4808,6 @@ L_08A2E650: L_08A2E684: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2E694; } @@ -5135,7 +4827,6 @@ L_08A2E694: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A2E7B8; } @@ -5164,7 +4855,6 @@ L_08A2E6C0: L_08A2E704: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5185,9 +4875,7 @@ L_08A2E724: L_08A2E72C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2E748; } @@ -5206,7 +4894,6 @@ L_08A2E748: goto L_08A2E74C; L_08A2E74C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2E780; } @@ -5247,7 +4934,6 @@ L_08A2E780: goto L_08A2E7B8; L_08A2E7B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2E950; } @@ -5265,7 +4951,6 @@ L_08A2E7C0: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(416), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2E950; } @@ -5283,7 +4968,6 @@ L_08A2E7F0: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(416), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2E950; } @@ -5293,7 +4977,6 @@ L_08A2E820: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2E918; } @@ -5302,7 +4985,6 @@ L_08A2E820: L_08A2E830: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2066))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A2E918; } @@ -5348,7 +5030,6 @@ L_08A2E878: L_08A2E8A4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -5363,7 +5044,6 @@ L_08A2E8B8: goto L_08A2E8C4; L_08A2E8C4: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A2E8F4; } @@ -5398,7 +5078,6 @@ L_08A2E8F4: goto L_08A2E918; L_08A2E918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2E950; } @@ -5436,7 +5115,6 @@ L_08A2E950: goto L_08A2E980; L_08A2E980: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A2E9BC; } @@ -5455,7 +5133,6 @@ L_08A2E98C: aot_gpr_4 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A2E9E4; } @@ -5463,7 +5140,6 @@ L_08A2E98C: } L_08A2E9B4: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A2E9E4; } @@ -5523,7 +5199,6 @@ L_08A2EA34: } L_08A2EA48: { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EA5C; } @@ -5548,7 +5223,6 @@ L_08A2EA5C: } L_08A2EA64: { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EA84; } @@ -5556,7 +5230,6 @@ L_08A2EA64: } L_08A2EA6C: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A2EA84; } @@ -5572,7 +5245,6 @@ L_08A2EA74: } L_08A2EA7C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EAB0; } @@ -5598,7 +5270,6 @@ L_08A2EA84: L_08A2EAB0: aot_gpr_5 = (0u | 35u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EADC; } @@ -5612,7 +5283,6 @@ L_08A2EABC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7228))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2104), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2EC54; } @@ -5621,7 +5291,6 @@ L_08A2EABC: L_08A2EADC: aot_gpr_6 = (0u | 15u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A2EB0C; } @@ -5645,7 +5314,6 @@ L_08A2EAE8: L_08A2EB0C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2065))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A2EB54; } @@ -5653,7 +5321,6 @@ L_08A2EB0C: } L_08A2EB18: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A2EB54; } @@ -5661,7 +5328,6 @@ L_08A2EB18: } L_08A2EB20: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A2EB54; } @@ -5695,7 +5361,6 @@ L_08A2EB54: L_08A2EB5C: aot_gpr_6 = (0u | 22u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A2EBB8; } @@ -5746,7 +5411,6 @@ L_08A2EB8C: } L_08A2EB94: { const bool branch_taken = ctx.gpr[18] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A2EBB8; } @@ -5767,7 +5431,6 @@ L_08A2EB9C: } L_08A2EBB8: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A2EBE4; } @@ -5782,7 +5445,6 @@ L_08A2EBC0: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2104), aot_gpr_4); aot_gpr_4 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2EC54; } @@ -5798,7 +5460,6 @@ L_08A2EBE4: } L_08A2EBEC: { const bool branch_taken = ctx.gpr[19] == aot_gpr_6; - // nop if (branch_taken) { goto L_08A2EC04; } @@ -5806,7 +5467,6 @@ L_08A2EBEC: } L_08A2EBF4: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A2EC04; } @@ -5814,7 +5474,6 @@ L_08A2EBF4: } L_08A2EBFC: { const bool branch_taken = ctx.gpr[19] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EC54; } @@ -5822,7 +5481,6 @@ L_08A2EBFC: } L_08A2EC04: { const bool branch_taken = ctx.gpr[18] == aot_gpr_6; - // nop if (branch_taken) { goto L_08A2EC24; } @@ -5830,7 +5488,6 @@ L_08A2EC04: } L_08A2EC0C: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A2EC24; } @@ -5838,7 +5495,6 @@ L_08A2EC0C: } L_08A2EC14: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A2EC24; } @@ -5846,7 +5502,6 @@ L_08A2EC14: } L_08A2EC1C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EC54; } @@ -5876,7 +5531,6 @@ L_08A2EC54: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2100), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2649))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A2ECA4; } @@ -6177,7 +5831,6 @@ L_08A2ED58: aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(275), static_cast(ctx.gpr[22])); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2069))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A2EF1C; } @@ -6187,7 +5840,6 @@ L_08A2EED8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2650))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2EF00; } @@ -6216,7 +5868,6 @@ L_08A2EF00: } L_08A2EF1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2EF30; } @@ -6265,7 +5916,17 @@ L_08A2EF4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2EF8C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-224)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[31]}; @@ -6462,7 +6123,6 @@ L_08A2F1BC: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(112)))))); ctx.gpr[8] = (0u | 8u); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A2F250; } @@ -6478,7 +6138,6 @@ L_08A2F1F0: aot_gpr_7 = (aot_gpr_7 < static_cast(1) ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A2F250; } @@ -6542,7 +6201,6 @@ L_08A2F20C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2F28C; } @@ -6614,7 +6272,6 @@ L_08A2F28C: aot_gpr_17 = (aot_gpr_5 << 16u); aot_gpr_17 = (static_cast(static_cast(aot_gpr_17) >> 16u)); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A2F310; } @@ -6642,7 +6299,6 @@ L_08A2F2AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A2F2F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2F30C; } @@ -6690,7 +6346,17 @@ L_08A2F310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2F364: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -6701,7 +6367,6 @@ L_08A2F364: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(2065), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1984))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F3D0; } @@ -6714,7 +6379,6 @@ L_08A2F39C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A2F3D0; } @@ -6724,7 +6388,6 @@ L_08A2F3B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F3D0; } @@ -6738,7 +6401,6 @@ L_08A2F3D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2048))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F438; } @@ -6757,7 +6419,6 @@ L_08A2F3E0: } L_08A2F3F4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F438; } @@ -6765,7 +6426,6 @@ L_08A2F3F4: } L_08A2F3FC: ctx.gpr[31] = (0x08A2F404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F404u) goto L_08A2F404; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F404: @@ -6773,7 +6433,6 @@ L_08A2F404: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F41C; } @@ -6784,12 +6443,10 @@ L_08A2F418: goto L_08A2F41C; L_08A2F41C: ctx.gpr[31] = (0x08A2F424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F424u) goto L_08A2F424; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F424: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A2F438; } @@ -6797,7 +6454,6 @@ L_08A2F424: } L_08A2F42C: ctx.gpr[31] = (0x08A2F434u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F434u) goto L_08A2F434; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F434: @@ -6814,7 +6470,6 @@ L_08A2F438: L_08A2F448: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F46C; } @@ -6825,7 +6480,6 @@ L_08A2F454: goto L_08A2F458; L_08A2F458: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F46C; } @@ -6834,7 +6488,6 @@ L_08A2F458: L_08A2F460: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2075))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F7FC; } @@ -6842,7 +6495,6 @@ L_08A2F460: } L_08A2F46C: ctx.gpr[31] = (0x08A2F474u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F474u) goto L_08A2F474; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F474: @@ -6856,13 +6508,11 @@ L_08A2F474: } L_08A2F480: ctx.gpr[31] = (0x08A2F488u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F488u) goto L_08A2F488; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F488: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1984), ctx.gpr[2]); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2F538; } @@ -6870,7 +6520,6 @@ L_08A2F488: } L_08A2F494: ctx.gpr[31] = (0x08A2F49Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F49Cu) goto L_08A2F49C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F49C: @@ -6878,7 +6527,6 @@ L_08A2F49C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F4E8; } @@ -6886,7 +6534,6 @@ L_08A2F49C: } L_08A2F4B0: ctx.gpr[31] = (0x08A2F4B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F4B8u) goto L_08A2F4B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F4B8: @@ -6894,7 +6541,6 @@ L_08A2F4B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F4E8; } @@ -6902,7 +6548,6 @@ L_08A2F4B8: } L_08A2F4CC: ctx.gpr[31] = (0x08A2F4D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F4D4u) goto L_08A2F4D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F4D4: @@ -6910,7 +6555,6 @@ L_08A2F4D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 56u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F4EC; } @@ -6921,7 +6565,6 @@ L_08A2F4E8: goto L_08A2F4EC; L_08A2F4EC: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A2F538; } @@ -6939,7 +6582,6 @@ L_08A2F4F4: aot_gpr_5 = (aot_gpr_16 + aot_gpr_5); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A2F538; } @@ -6955,7 +6597,6 @@ L_08A2F524: } L_08A2F52C: ctx.gpr[31] = (0x08A2F534u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F534u) goto L_08A2F534; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F534: @@ -6972,7 +6613,6 @@ L_08A2F538: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F62C; } @@ -6981,7 +6621,6 @@ L_08A2F538: L_08A2F564: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F59C; } @@ -6989,7 +6628,6 @@ L_08A2F564: } L_08A2F570: ctx.gpr[31] = (0x08A2F578u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F578u) goto L_08A2F578; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F578: @@ -7005,7 +6643,6 @@ L_08A2F580: AOT_REGCACHE_SYNC_OUT(); return; L_08A2F58C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2F62C; } @@ -7021,13 +6658,11 @@ L_08A2F594: } L_08A2F59C: ctx.gpr[31] = (0x08A2F5A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F5A4u) goto L_08A2F5A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F5A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F62C; } @@ -7035,7 +6670,6 @@ L_08A2F5A4: } L_08A2F5B0: ctx.gpr[31] = (0x08A2F5B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F5B8u) goto L_08A2F5B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F5B8: @@ -7043,7 +6677,6 @@ L_08A2F5B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F604; } @@ -7051,7 +6684,6 @@ L_08A2F5B8: } L_08A2F5CC: ctx.gpr[31] = (0x08A2F5D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F5D4u) goto L_08A2F5D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F5D4: @@ -7059,7 +6691,6 @@ L_08A2F5D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F604; } @@ -7067,7 +6698,6 @@ L_08A2F5D4: } L_08A2F5E8: ctx.gpr[31] = (0x08A2F5F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F5F0u) goto L_08A2F5F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F5F0: @@ -7075,7 +6705,6 @@ L_08A2F5F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 56u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F62C; } @@ -7083,7 +6712,6 @@ L_08A2F5F0: } L_08A2F604: ctx.gpr[31] = (0x08A2F60Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F60Cu) goto L_08A2F60C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F60C: @@ -7099,7 +6727,6 @@ L_08A2F614: AOT_REGCACHE_SYNC_OUT(); return; L_08A2F620: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2F62C; } @@ -7118,7 +6745,6 @@ L_08A2F62C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F7FC; } @@ -7129,7 +6755,6 @@ L_08A2F654: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 61u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A2F6F0; } @@ -7137,7 +6762,6 @@ L_08A2F654: } L_08A2F668: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A2F6F0; } @@ -7145,7 +6769,6 @@ L_08A2F668: } L_08A2F670: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A2F6F0; } @@ -7155,9 +6778,7 @@ L_08A2F678: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2F6F0; } @@ -7176,7 +6797,6 @@ L_08A2F690: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A2F6F0; } @@ -7184,7 +6804,6 @@ L_08A2F690: } L_08A2F6C4: ctx.gpr[31] = (0x08A2F6CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F6CCu) goto L_08A2F6CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F6CC: @@ -7213,7 +6832,6 @@ L_08A2F704: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 56u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A2F79C; } @@ -7221,7 +6839,6 @@ L_08A2F704: } L_08A2F714: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A2F79C; } @@ -7229,7 +6846,6 @@ L_08A2F714: } L_08A2F71C: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A2F764; } @@ -7239,9 +6855,7 @@ L_08A2F724: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2F764; } @@ -7262,7 +6876,6 @@ L_08A2F73C: L_08A2F764: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A2F79C; } @@ -7270,7 +6883,6 @@ L_08A2F764: } L_08A2F770: ctx.gpr[31] = (0x08A2F778u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F778u) goto L_08A2F778; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F778: @@ -7289,7 +6901,6 @@ L_08A2F79C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 63u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A2F7DC; } @@ -7297,7 +6908,6 @@ L_08A2F79C: } L_08A2F7B0: ctx.gpr[31] = (0x08A2F7B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F7B8u) goto L_08A2F7B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F7B8: @@ -7316,7 +6926,6 @@ L_08A2F7DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F7FC; } @@ -7324,7 +6933,6 @@ L_08A2F7DC: } L_08A2F7F0: ctx.gpr[31] = (0x08A2F7F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F7F8u) goto L_08A2F7F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F7F8: @@ -7332,12 +6940,10 @@ L_08A2F7F8: goto L_08A2F7FC; L_08A2F7FC: ctx.gpr[31] = (0x08A2F804u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F804u) goto L_08A2F804; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F804: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A2F86C; } @@ -7351,7 +6957,6 @@ L_08A2F80C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2F86C; } @@ -7361,9 +6966,7 @@ L_08A2F82C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1944))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2F86C; } @@ -7371,7 +6974,6 @@ L_08A2F82C: } L_08A2F844: ctx.gpr[31] = (0x08A2F84Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F84Cu) goto L_08A2F84C; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F84C: @@ -7379,7 +6981,6 @@ L_08A2F84C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A2F86C; } @@ -7387,7 +6988,6 @@ L_08A2F84C: } L_08A2F860: ctx.gpr[31] = (0x08A2F868u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A2F868u) goto L_08A2F868; AOT_REGCACHE_SYNC_OUT(); return; L_08A2F868: @@ -7408,7 +7008,17 @@ L_08A2F86C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2F88C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7485,7 +7095,17 @@ L_08A2F93C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2F94C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), aot_gpr_16); @@ -7551,7 +7171,17 @@ L_08A2F9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2F9E8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-192)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(84)))))); @@ -7660,7 +7290,6 @@ L_08A2FAC8: aot_gpr_5 = (0u | 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(64)); if (branch_taken) { @@ -7724,7 +7353,6 @@ L_08A2FAE0: goto L_08A2FF08; L_08A2FB2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2FB6C; } @@ -7790,7 +7418,17 @@ L_08A2FB7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FBA0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(84)))))); @@ -7799,7 +7437,6 @@ L_08A2FBA0: aot_gpr_4 = (aot_gpr_5 & 1u); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2FBD8; } @@ -7824,7 +7461,17 @@ L_08A2FBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FBEC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(84)))))); @@ -7833,7 +7480,6 @@ L_08A2FBEC: aot_gpr_4 = (aot_gpr_5 & 1u); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(4), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A2FC24; } @@ -7858,7 +7504,17 @@ L_08A2FC24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FC38: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-128)); ctx.gpr[3] = (ctx.gpr[9] | 0u); @@ -7880,9 +7536,7 @@ L_08A2FC64: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[15])) && aot_fpr_14 == ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2FCA0; } @@ -7893,7 +7547,6 @@ L_08A2FC7C: aot_fpr_14 = std::sqrt(aot_fpr_14); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7136))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (0u | 1u); if (branch_taken) { @@ -7903,7 +7556,6 @@ L_08A2FC7C: } L_08A2FC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2FCFC; } @@ -7977,7 +7629,6 @@ L_08A2FCB0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2FD28; } @@ -8052,9 +7703,7 @@ L_08A2FD28: aot_gpr_4 = (ctx.gpr[28] + aot_gpr_4); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-7112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A2FD6C; } @@ -8088,7 +7737,6 @@ L_08A2FD74: AOT_REGCACHE_SYNC_OUT(); return; L_08A2FD9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A2FDAC; } @@ -8113,14 +7761,23 @@ L_08A2FDB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FDC0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(36), aot_gpr_16); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(40), ctx.gpr[31]); aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[31] = (0x08A2FDD8u); - // nop goto L_08A2FBEC; L_08A2FDD8: aot_fpr_12 = std::bit_cast(0u); @@ -8159,14 +7816,34 @@ L_08A2FDD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FE10: jump_target = ctx.gpr[31]; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7148))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FE18: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-80)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[31]}; @@ -8255,7 +7932,6 @@ L_08A2FE78: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), std::bit_cast(aot_fpr_14)); aot_gpr_5 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_13)) && aot_fpr_14 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -8305,7 +7981,17 @@ L_08A2FEF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A2FF08: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-400)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -8353,7 +8039,6 @@ L_08A2FF08: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[8] | 0u); if (branch_taken) { @@ -8364,7 +8049,6 @@ L_08A2FF08: L_08A2FF80: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7156))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (0u | 0u); if (branch_taken) { @@ -8374,7 +8058,6 @@ L_08A2FF80: } L_08A2FF94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A2FFB0; } @@ -8402,9 +8085,7 @@ L_08A2FFB0: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0139_entry, 139u, 3u, 0x08A3005Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0139.cpp b/profiles/vcs/generated/generated_unit_0139.cpp index 77f9c26..c6e1997 100644 --- a/profiles/vcs/generated/generated_unit_0139.cpp +++ b/profiles/vcs/generated/generated_unit_0139.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0139[4085] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 6, 0, 0, 7, 0, 0, - 8, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 20, 0, 0, 0, 0, 21, 0, 22, 0, 23, 0, 24, 0, 0, 0, 25, 0, 26, 0, 0, 0, 27, 0, 28, 0, 29, 0, 30, 0, 0, - 0, 31, 0, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 41, 0, - 42, 0, 43, 0, 44, 0, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 60, 0, 61, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, - 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, - 0, 0, 0, 76, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 0, 86, 0, 87, 0, 88, 0, 0, - 0, 89, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, - 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 0, 0, 104, 0, 0, 0, 0, 105, 0, 0, 0, 0, - 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 112, - 0, 0, 113, 0, 0, 114, 0, 115, 116, 0, 0, 0, 117, 0, 0, 0, 118, 0, 119, 0, 120, 0, 121, 0, 0, 0, 0, 122, 123, 0, 0, 0, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 127, 0, 128, 0, 129, 0, 0, 130, 0, 0, 131, 0, 0, - 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, - 0, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, - 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 148, 0, 149, 150, 0, 0, 0, 0, 0, 151, 0, 0, 152, 0, 0, 153, 0, 154, 0, 0, - 155, 0, 0, 156, 0, 157, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 160, 0, 161, 0, 0, 162, 0, 163, 164, 0, 0, 0, 0, 0, 0, - 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 171, 0, 0, 172, 0, 0, 173, 174, 0, 0, 0, 0, 0, 175, 0, 176, 0, 177, 0, 0, 178, 0, - 0, 179, 0, 0, 180, 181, 0, 0, 0, 0, 0, 182, 0, 183, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 187, 188, 0, 0, 189, 0, 190, 0, - 191, 0, 0, 192, 0, 0, 193, 0, 0, 194, 195, 0, 0, 0, 196, 0, 197, 0, 198, 0, 0, 199, 0, 0, 200, 0, 0, 201, 202, 0, 0, 203, - 0, 204, 0, 205, 0, 0, 206, 0, 0, 207, 0, 0, 208, 209, 0, 0, 210, 0, 211, 0, 212, 0, 0, 213, 0, 0, 214, 0, 0, 0, 215, 216, - 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 219, 220, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 227, 0, 0, 228, 0, 0, 229, 0, 230, 231, 0, 232, 0, 233, 0, 234, 0, 0, 235, 0, - 0, 236, 0, 237, 238, 0, 239, 0, 240, 0, 241, 0, 0, 242, 0, 0, 243, 0, 244, 245, 0, 246, 0, 247, 0, 248, 0, 0, 249, 0, 0, 250, - 0, 251, 252, 0, 253, 0, 254, 0, 255, 0, 0, 256, 0, 0, 257, 0, 258, 259, 0, 260, 0, 261, 0, 262, 0, 0, 263, 0, 0, 264, 0, 265, - 266, 0, 267, 0, 268, 0, 269, 0, 0, 270, 0, 0, 271, 0, 0, 272, 273, 0, 274, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 276, 0, 0, 0, 0, 277, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 285, - 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 292, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 296, 0, 0, 0, 0, 0, 0, 297, - 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 301, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 303, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, - 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 316, 0, - 0, 0, 0, 317, 0, 318, 0, 0, 319, 0, 0, 320, 0, 0, 321, 0, 322, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 327, 0, 0, 0, 0, 328, 0, 329, 0, 330, 0, 331, 332, - 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, - 0, 0, 0, 0, 338, 0, 0, 0, 339, 340, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, - 350, 0, 351, 0, 352, 0, 0, 353, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 0, 357, 358, 359, 0, 360, 0, 361, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, - 0, 0, 365, 0, 0, 0, 366, 0, 367, 0, 0, 368, 0, 369, 0, 0, 370, 0, 371, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 375, 0, 376, 0, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, - 0, 383, 0, 384, 0, 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 389, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 392, 0, 0, - 0, 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 402, - 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, - 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, - 0, 0, 419, 0, 420, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, - 0, 425, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 430, 0, 431, 0, 432, 0, - 433, 0, 434, 0, 435, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, - 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 444, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 457, 0, 0, 458, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 469, 0, 0, 0, 0, - 0, 0, 470, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 477, 478, 0, 0, 0, 0, 0, 0, 0, - 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 483, 0, 0, 484, 0, - 0, 0, 485, 0, 486, 0, 487, 0, 0, 488, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, - 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, 517, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, - 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, 531, 0, 0, 0, - 532, 0, 0, 533, 0, 534, 0, 0, 0, 0, 535, 0, 536, 0, 0, 0, 537, 0, 0, 0, 0, 538, 539, 0, 0, 0, 0, 540, 0, 0, 541, 0, - 542, 0, 0, 0, 543, 0, 0, 544, 0, 545, 0, 0, 546, 0, 547, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 549, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 555, 0, 556, 0, 0, 0, 557, 0, 0, 0, - 0, 0, 558, 0, 559, 0, 560, 0, 561, 0, 562, 0, 563, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, 566, 0, 567, 0, 568, 0, 0, 0, - 0, 569, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 574, 0, 575, 0, 0, 576, 0, 577, 0, 578, - 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 0, 0, 588, 0, 589, 0, 590, 0, 0, 0, 591, 0, 0, - 0, 0, 0, 0, 592, 0, 593, 0, 594, 0, 595, 0, 0, 0, 596, 0, 597, 0, 0, 598, 0, 599, 0, 0, 0, 0, 0, 0, 0, 600, 0, 601, - 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 0, 0, - 613, 0, 614, 0, 0, 615, 0, 616, 0, 0, 0, 617, 0, 0, 0, 0, 618, 0, 0, 0, 0, 619, 0, 620, 0, 621, 0, 622, 0, 623, 0, 624, - 0, 625, 0, 626, 0, 0, 0, 0, 627, 0, 628, 0, 0, 0, 0, 629, 630, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, 0, 633, 0, - 0, 0, 0, 0, 0, 0, 0, 634, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, - 0, 0, 643, 0, 644, 0, 0, 645, 0, 646, 0, 0, 647, 0, 648, 0, 0, 649, 0, 650, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 652, 0, 0, 653, 0, 654, 0, 655, 0, 0, 0, 656, 0, 657, 0, 658, 0, 659, 0, 0, 0, 0, 660, 0, 661, 0, 0, 0, 0, 662, - 663, 0, 0, 0, 0, 0, 0, 664, 0, 665, 0, 0, 666, 0, 667, 0, 0, 668, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 672, 0, 0, 0, - 0, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 678, 0, 0, 0, 0, 0, 679, 680, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 685, 0, 686, 0, 0, 0, 0, 687, 0, 0, 688, 0, 689, 0, 690, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, - 0, 0, 0, 0, 0, 693, 0, 694, 0, 0, 0, 695, 0, 0, 696, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, - 699, 0, 0, 0, 0, 0, 0, 0, 700, 0, 701, 0, 0, 702, 0, 0, 703, 0, 0, 704, 0, 705, 0, 0, 0, 706, 0, 0, 707, 0, 0, 0, - 708, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 710, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 715, 716, 0, 0, - 717, 0, 0, 0, 718, 719, 0, 720, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 723, 724, 0, 0, 0, 725, 0, 726, 0, 727, 0, - 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 731, 0, 732, 0, - 0, 733, 0, 0, 734, 0, 0, 0, 735, 0, 736, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, - 0, 739, 0, 0, 0, 0, 740, 0, 741, 0, 0, 742, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 744, 0, 0, 0, 0, 0, 745, 0, 0, 746, 0, 747, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 750, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 754, 0, 0, 0, 755, - 0, 0, 0, 756, 0, 757, 0, 758, 0, 759, 0, 760, 0, 0, 761, 0, 0, 762, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 764, 0, 765, 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, 0, 0, 0, 0, 0, 769, 0, 770, 0, 0, 771, 0, - 772, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 0, 776, 0, 0, 777, 0, 0, 0, 0, 0, - 0, 778, 0, 779, 0, 780, 0, 781, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 799, 0, 800, - 0, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 803, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 805, 0, 806, 0, 0, 0, 807, 0, 808, 0, 0, 809, 0, 0, 0, 0, 810, 0, 0, 0, 0, 811, 0, 812, 813, - 0, 0, 0, 814, 815, 0, 0, 816, 0, 0, 0, 0, 0, 817, 0, 818, 0, 0, 0, 819, 0, 0, 820, 0, 0, 0, 0, 821, 0, 0, 822, 0, - 823, 0, 0, 0, 0, 0, 0, 824, 0, 825, 0, 0, 0, 0, 826, 0, 827, 0, 0, 0, 828, 0, 829, 0, 0, 830, 0, 831, 0, 832, 0, 0, - 0, 0, 833, 0, 0, 834, 0, 0, 0, 0, 835, 0, 836, 0, 837, 0, 0, 0, 838, 0, 839, 0, 840, 0, 0, 841, 0, 0, 842, 0, 0, 843, - 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 845, 0, 846, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, 849, 0, 0, 850, 0, - 0, 851, 0, 852, 0, 0, 853, 0, 854, 0, 0, 855, 0, 0, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 858, 0, 859, 0, 860, - 0, 0, 861, 0, 0, 0, 862, 0, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, 0, 865, 0, 866, 0, 867, 0, 0, 0, 0, - 0, 0, 0, 868, 0, 0, 0, 0, 0, 0, 0, 869, 0, 870, 0, 0, 0, 871, 0, 0, 0, 872, 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, - 0, 874, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 876, 0, 0, 0, 0, 877, 0, 0, 878, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, 0, 881, 0, 0, 882, 0, 0, 883, 0, 0, 0, 0, 0, 0, 884, 0, 0, 885, 0, 886, 0, 0, - 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 888, 0, 889, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 891, 0, 0, 892, 0, 893, 0, 0, 0, 894, 0, 0, 0, 895, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 897, 0, 0, 0, 898, 0, 0, 899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 900, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0139[64] = { + 0x2460000000A00001ull, 0x0050010005000015ull, 0x2A8A2A8420050200ull, 0xA0000000020020A2ull, + 0x0000141548480000ull, 0x0008255400000005ull, 0x0954000000000028ull, 0x4288502424204010ull, + 0x222222222A555548ull, 0x808284210842AA22ull, 0x24A92001185511A4ull, 0x106800A020915014ull, + 0x034A14292920D220ull, 0x4A8324A005100002ull, 0x992546495324A832ull, 0x00016402C495324Aull, + 0x4AB4950100000401ull, 0xA4AB495692AD255Aull, 0x01002508000D9255ull, 0x0910250081011400ull, + 0x0024203081808030ull, 0x408884080AA01205ull, 0xD50A800400214928ull, 0x14020B1012100410ull, + 0x15C2229508140900ull, 0x0085294448008000ull, 0x2222912A55528088ull, 0x04200808A0455222ull, + 0x0002224009009001ull, 0x2401021450000008ull, 0x8208025554104092ull, 0x0011081100008840ull, + 0x0488110000910220ull, 0x0A05440009102200ull, 0x01A4000011000244ull, 0x814422544A800081ull, + 0x80AAA00100AAA888ull, 0x1AA0400400400000ull, 0x1248A804100410A0ull, 0x0001529148611429ull, + 0x1508955411520889ull, 0x22A2AAAAA94A800Aull, 0x15552850A0294550ull, 0x4A01850AAAA108A5ull, + 0x002A5294AAA80280ull, 0x14925281850AA2A4ull, 0x00B0480000044014ull, 0x10AA428000000888ull, + 0x12292501100148A0ull, 0x3400020002001805ull, 0x54000420546404B1ull, 0x0000294240002512ull, + 0x8881540000010A41ull, 0x4A048A8000224AA8ull, 0x00A080AA04940005ull, 0x0140000000140000ull, + 0xA552080020014020ull, 0xD084A28002140040ull, 0x2A5142814848A098ull, 0x4A01290092545424ull, + 0x0AA00144A900494Aull, 0x0412104210222808ull, 0x0085001029024A00ull, 0x0010048800244520ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0139[64] = { + 1u, 8u, 16u, 31u, 38u, 47u, 56u, 63u, 76u, 97u, 113u, 132u, 146u, 165u, 179u, 204u, + 222u, 236u, 266u, 281u, 292u, 303u, 317u, 333u, 345u, 362u, 373u, 393u, 407u, 416u, 425u, 441u, + 449u, 459u, 470u, 479u, 494u, 511u, 519u, 532u, 549u, 569u, 592u, 613u, 634u, 652u, 673u, 682u, + 693u, 708u, 717u, 733u, 744u, 756u, 772u, 785u, 789u, 801u, 814u, 833u, 851u, 868u, 880u, 891u, }; void recomp_unit_0139_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0139_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A30000u; - entry_id = (entry_delta < 16340u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0139[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16340u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0139[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0139[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A30000; @@ -1142,7 +1049,6 @@ L_08A3005C: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(36), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A30334; } @@ -1155,7 +1061,6 @@ L_08A300D8: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A30304; } @@ -1179,7 +1084,6 @@ L_08A300F4: } L_08A30100: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A30110; } @@ -1269,7 +1173,6 @@ L_08A30110: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A30168; } @@ -1314,7 +1217,6 @@ L_08A301A0: } L_08A301D0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A30240; } @@ -1356,9 +1258,7 @@ L_08A301D8: aot_gpr_5 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A30248; } @@ -1379,7 +1279,6 @@ L_08A30224: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A302C4; } @@ -1387,7 +1286,6 @@ L_08A30224: } L_08A30240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A30334; } @@ -1410,9 +1308,7 @@ L_08A30248: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A302AC; } @@ -1423,7 +1319,6 @@ L_08A30274: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7164))); aot_fpr_12 = aot_fpr_12 / aot_fpr_14; aot_gpr_31 = (0x08A30288u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30288u) goto L_08A30288; AOT_REGCACHE_SYNC_OUT(); return; L_08A30288: @@ -1436,7 +1331,6 @@ L_08A30288: AOT_REGCACHE_SYNC_OUT(); return; L_08A3029C: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08A302B4; } @@ -1444,7 +1338,6 @@ L_08A3029C: } L_08A302A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A30334; } @@ -1452,7 +1345,6 @@ L_08A302A4: } L_08A302AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A30334; } @@ -1466,7 +1358,6 @@ L_08A302B4: goto L_08A302C4; L_08A302C4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A302F4; } @@ -1476,7 +1367,6 @@ L_08A302CC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(36)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A302F4; } @@ -1484,7 +1374,6 @@ L_08A302CC: } L_08A302DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A302EC; } @@ -1492,7 +1381,6 @@ L_08A302DC: } L_08A302E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A302F4; } @@ -1500,7 +1388,6 @@ L_08A302E4: } L_08A302EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A302F4; } @@ -1510,7 +1397,6 @@ L_08A302F4: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A300E8; } @@ -1520,7 +1406,6 @@ L_08A30304: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(36)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3031C; } @@ -1528,7 +1413,6 @@ L_08A30304: } L_08A30314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A30334; } @@ -1561,7 +1445,17 @@ L_08A30334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30364: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1629,7 +1523,6 @@ L_08A30364: aot_fpr_14 = std::bit_cast(ctx.gpr[7]); ctx.gpr[17] = (aot_gpr_5 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_6 | 0u); if (branch_taken) { @@ -1702,7 +1595,6 @@ L_08A303FC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08A306EC; } @@ -1711,7 +1603,6 @@ L_08A303FC: L_08A3044C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3046C; } @@ -1733,7 +1624,6 @@ L_08A30458: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A30478; } @@ -1747,7 +1637,6 @@ L_08A3046C: AOT_REGCACHE_SYNC_OUT(); return; L_08A30478: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A30490; } @@ -1755,12 +1644,10 @@ L_08A30478: } L_08A30480: aot_gpr_31 = (0x08A30488u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 66u, 0x08B24818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30488u) goto L_08A30488; AOT_REGCACHE_SYNC_OUT(); return; L_08A30488: aot_gpr_31 = (0x08A30490u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 66u, 0x08B24818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30490u) goto L_08A30490; AOT_REGCACHE_SYNC_OUT(); return; L_08A30490: @@ -1777,7 +1664,6 @@ L_08A30490: AOT_REGCACHE_SYNC_OUT(); return; L_08A304A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A305A8; } @@ -1807,7 +1693,6 @@ L_08A304B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A30500: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A305A0; } @@ -1854,7 +1739,6 @@ L_08A30508: { const std::uint32_t aot_run_words[3]{aot_gpr_6, ctx.gpr[7], aot_gpr_4}; aot_mem.aot_direct_store32_block(aot_gpr_5 + static_cast(0), aot_run_words); } { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A30598; } @@ -1862,17 +1746,14 @@ L_08A30508: } L_08A30588: aot_gpr_31 = (0x08A30590u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 66u, 0x08B24818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30590u) goto L_08A30590; AOT_REGCACHE_SYNC_OUT(); return; L_08A30590: aot_gpr_31 = (0x08A30598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 66u, 0x08B24818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30598u) goto L_08A30598; AOT_REGCACHE_SYNC_OUT(); return; L_08A30598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A306EC; } @@ -1880,7 +1761,6 @@ L_08A30598: } L_08A305A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A306E0; } @@ -1922,7 +1802,6 @@ L_08A305CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A3060C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A306E0; } @@ -2012,7 +1891,6 @@ L_08A30614: { const std::uint32_t aot_run_words[3]{aot_gpr_6, ctx.gpr[7], aot_gpr_5}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A306D8; } @@ -2020,17 +1898,14 @@ L_08A30614: } L_08A306C8: aot_gpr_31 = (0x08A306D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 66u, 0x08B24818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A306D0u) goto L_08A306D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A306D0: aot_gpr_31 = (0x08A306D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 66u, 0x08B24818u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A306D8u) goto L_08A306D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A306D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A306EC; } @@ -2039,7 +1914,6 @@ L_08A306D8: L_08A306E0: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[18]) > 0; - // nop if (branch_taken) { goto L_08A3044C; } @@ -2061,7 +1935,17 @@ L_08A306EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30710: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7164))); @@ -2086,7 +1970,17 @@ L_08A30738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30754: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -2102,7 +1996,17 @@ L_08A30768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30774: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -2118,7 +2022,17 @@ L_08A30788: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2129,7 +2043,6 @@ L_08A30794: AOT_REGCACHE_SYNC_OUT(); return; L_08A307B0: aot_gpr_31 = (0x08A307B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 544u, 0x08AD323Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A307B8u) goto L_08A307B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A307B8: @@ -2149,7 +2062,6 @@ L_08A307CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A307DC: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A30874; } @@ -2243,7 +2155,6 @@ L_08A30864: goto L_08A3086C; L_08A3086C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3093C; } @@ -2333,7 +2244,6 @@ L_08A30924: AOT_REGCACHE_SYNC_OUT(); return; L_08A3092C: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A30944; } @@ -2341,7 +2251,6 @@ L_08A3092C: } L_08A30934: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A309BC; } @@ -2421,7 +2330,17 @@ L_08A309C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A309DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -2430,7 +2349,6 @@ L_08A309DC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(304))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A30A70; } @@ -2439,7 +2357,6 @@ L_08A309DC: L_08A309FC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A30A50; } @@ -2454,7 +2371,6 @@ L_08A30A08: goto L_08A30A14; L_08A30A14: aot_gpr_31 = (0x08A30A1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30A1Cu) goto L_08A30A1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A30A1C: @@ -2486,7 +2402,6 @@ L_08A30A40: goto L_08A30A48; L_08A30A48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A30A58; } @@ -2529,7 +2444,17 @@ L_08A30A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30A80: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -2549,7 +2474,6 @@ L_08A30A80: L_08A30AB4: aot_gpr_4 = (ctx.gpr[2] < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A30ACC; } @@ -2576,7 +2500,6 @@ L_08A30AD4: L_08A30ADC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A30B38; } @@ -2607,7 +2530,6 @@ L_08A30B10: ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); if (branch_taken) { @@ -2684,7 +2606,6 @@ L_08A30B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A30BCC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A30BD8; } @@ -2728,7 +2649,6 @@ L_08A30C14: L_08A30C24: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A30C3C; } @@ -2773,7 +2693,6 @@ L_08A30C6C: L_08A30C74: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A30C8C; } @@ -2787,7 +2706,6 @@ L_08A30C80: AOT_REGCACHE_SYNC_OUT(); return; L_08A30C8C: aot_gpr_31 = (0x08A30C94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30C94u) goto L_08A30C94; AOT_REGCACHE_SYNC_OUT(); return; L_08A30C94: @@ -2800,7 +2718,6 @@ L_08A30C94: AOT_REGCACHE_SYNC_OUT(); return; L_08A30CA8: aot_gpr_31 = (0x08A30CB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30CB0u) goto L_08A30CB0; AOT_REGCACHE_SYNC_OUT(); return; L_08A30CB0: @@ -2813,7 +2730,6 @@ L_08A30CB0: AOT_REGCACHE_SYNC_OUT(); return; L_08A30CC4: aot_gpr_31 = (0x08A30CCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A30CCCu) goto L_08A30CCC; AOT_REGCACHE_SYNC_OUT(); return; L_08A30CCC: @@ -2845,7 +2761,17 @@ L_08A30CE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A30D04: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_20)); @@ -2888,7 +2814,6 @@ L_08A30D68: AOT_REGCACHE_SYNC_OUT(); return; L_08A30D94: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30DDC; } @@ -2937,7 +2862,6 @@ L_08A30DDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A30DE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30E2C; } @@ -2986,7 +2910,6 @@ L_08A30E2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A30E34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30E70; } @@ -3032,7 +2955,6 @@ L_08A30E70: AOT_REGCACHE_SYNC_OUT(); return; L_08A30E78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30EB8; } @@ -3079,7 +3001,6 @@ L_08A30EB8: AOT_REGCACHE_SYNC_OUT(); return; L_08A30EC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30EFC; } @@ -3125,7 +3046,6 @@ L_08A30EFC: AOT_REGCACHE_SYNC_OUT(); return; L_08A30F04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30F40; } @@ -3171,7 +3091,6 @@ L_08A30F40: AOT_REGCACHE_SYNC_OUT(); return; L_08A30F48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A30F84; } @@ -3213,7 +3132,6 @@ L_08A30F84: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fpr[26] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); if (branch_taken) { @@ -3310,7 +3228,6 @@ L_08A310A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A310A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A310DC; } @@ -3354,7 +3271,6 @@ L_08A310DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A310E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31118; } @@ -3398,7 +3314,6 @@ L_08A31118: AOT_REGCACHE_SYNC_OUT(); return; L_08A31120: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31154; } @@ -3442,7 +3357,6 @@ L_08A31154: AOT_REGCACHE_SYNC_OUT(); return; L_08A3115C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31190; } @@ -3486,7 +3400,6 @@ L_08A31190: AOT_REGCACHE_SYNC_OUT(); return; L_08A31198: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A311CC; } @@ -3530,7 +3443,6 @@ L_08A311CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A311D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31208; } @@ -3574,7 +3486,6 @@ L_08A31208: AOT_REGCACHE_SYNC_OUT(); return; L_08A31210: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31248; } @@ -3589,7 +3500,6 @@ L_08A31218: L_08A31224: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A31240; } @@ -3638,7 +3548,17 @@ L_08A3124C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3128C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -3659,7 +3579,17 @@ L_08A312A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A312B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3671,7 +3601,6 @@ L_08A312B4: ctx.gpr[17] = (ctx.gpr[7] | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); aot_gpr_31 = (0x08A312E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 258u, 0x08AAB1ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A312E0u) goto L_08A312E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A312E0: @@ -3695,7 +3624,6 @@ L_08A312E0: goto L_08A31328; L_08A31328: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A31360; } @@ -3705,7 +3633,6 @@ L_08A31330: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A31360; } @@ -3739,7 +3666,17 @@ L_08A31360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3137C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3753,7 +3690,6 @@ L_08A3137C: goto L_08A313D0; L_08A313A0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A313B4; } @@ -3778,7 +3714,17 @@ L_08A313B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A313D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3792,7 +3738,17 @@ L_08A313E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A313EC: ctx.gpr[7] = (aot_gpr_6 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -3802,7 +3758,6 @@ L_08A313EC: ctx.gpr[8] = (ctx.gpr[8] << 2u); ctx.gpr[8] = (aot_gpr_4 + ctx.gpr[8]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A3143C; } @@ -3858,7 +3813,6 @@ L_08A3147C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08A3147C; } @@ -3875,7 +3829,6 @@ L_08A31494: aot_gpr_4 = (aot_gpr_4 << 2u); aot_gpr_4 = (ctx.gpr[7] + aot_gpr_4); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A31460; } @@ -3914,11 +3867,20 @@ L_08A314D4: goto L_08A31500; L_08A31500: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31508: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -3936,7 +3898,17 @@ L_08A31524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31530: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-7028))); aot_gpr_6 = (2236u << 16u); @@ -3950,28 +3922,67 @@ L_08A31530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31554: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3155C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31564: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3156C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2279u << 16u); @@ -4008,7 +4019,17 @@ L_08A315BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A315CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1780)))))); ctx.gpr[2] = (aot_gpr_4 & 2u); @@ -4017,7 +4038,17 @@ L_08A315CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A315DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4058,7 +4089,6 @@ L_08A31620: L_08A3162C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A31640; } @@ -4081,7 +4111,17 @@ L_08A31640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31654: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -4095,7 +4135,6 @@ L_08A31654: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A316E8; } @@ -4127,7 +4166,6 @@ L_08A316BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A316C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31848; } @@ -4144,7 +4182,6 @@ L_08A316CC: goto L_08A316E0; L_08A316E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A316F0; } @@ -4152,7 +4189,6 @@ L_08A316E0: } L_08A316E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31850; } @@ -4160,7 +4196,6 @@ L_08A316E8: } L_08A316F0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A31848; } @@ -4200,7 +4235,6 @@ L_08A31728: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A31848; } @@ -4220,7 +4254,6 @@ L_08A31750: L_08A31764: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(816))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A31790; } @@ -4255,7 +4288,6 @@ L_08A317A0: goto L_08A317A4; L_08A317A4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A31850; } @@ -4323,7 +4355,6 @@ L_08A3182C: goto L_08A31848; L_08A31848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31850; } @@ -4343,7 +4374,17 @@ L_08A31850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3186C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -4354,7 +4395,6 @@ L_08A3186C: AOT_REGCACHE_SYNC_OUT(); return; L_08A31880: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3196C; } @@ -4362,13 +4402,11 @@ L_08A31880: } L_08A31888: aot_gpr_31 = (0x08A31890u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A31890u) goto L_08A31890; AOT_REGCACHE_SYNC_OUT(); return; L_08A31890: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3196C; } @@ -4376,7 +4414,6 @@ L_08A31890: } L_08A3189C: aot_gpr_31 = (0x08A318A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A318A4u) goto L_08A318A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A318A4: @@ -4416,7 +4453,6 @@ L_08A318DC: goto L_08A318E0; L_08A318E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3196C; } @@ -4424,7 +4460,6 @@ L_08A318E0: } L_08A318E8: aot_gpr_31 = (0x08A318F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A318F0u) goto L_08A318F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A318F0: @@ -4482,9 +4517,7 @@ L_08A318F0: aot_gpr_4 = (17352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3196C; } @@ -4508,7 +4541,6 @@ L_08A3193C: L_08A3196C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2296))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A31A0C; } @@ -4518,7 +4550,6 @@ L_08A31978: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A31998; } @@ -4528,7 +4559,6 @@ L_08A31988: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A31A0C; } @@ -4536,13 +4566,11 @@ L_08A31988: } L_08A31998: aot_gpr_31 = (0x08A319A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A319A0u) goto L_08A319A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A319A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A31A0C; } @@ -4550,13 +4578,11 @@ L_08A319A0: } L_08A319AC: aot_gpr_31 = (0x08A319B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A319B4u) goto L_08A319B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A319B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A31A0C; } @@ -4564,7 +4590,6 @@ L_08A319B4: } L_08A319C0: aot_gpr_31 = (0x08A319C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A319C8u) goto L_08A319C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A319C8: @@ -4572,7 +4597,6 @@ L_08A319C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A31A0C; } @@ -4601,7 +4625,17 @@ L_08A31A0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31A1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -4621,7 +4655,6 @@ L_08A31A3C: L_08A31A44: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A31A68; } @@ -4634,7 +4667,6 @@ L_08A31A50: AOT_REGCACHE_SYNC_OUT(); return; L_08A31A58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A31A78; } @@ -4642,7 +4674,6 @@ L_08A31A58: } L_08A31A60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31A84; } @@ -4654,7 +4685,6 @@ L_08A31A68: goto L_08A33164; L_08A31A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31BE8; } @@ -4673,7 +4703,6 @@ L_08A31A84: AOT_REGCACHE_SYNC_OUT(); return; L_08A31A8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A31ABC; } @@ -4682,7 +4711,6 @@ L_08A31A8C: L_08A31A94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A31ABC; } @@ -4692,7 +4720,6 @@ L_08A31AA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A31ABC; } @@ -4706,7 +4733,6 @@ L_08A31AB0: AOT_REGCACHE_SYNC_OUT(); return; L_08A31ABC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A31B38; } @@ -4716,7 +4742,6 @@ L_08A31AC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A31B14; } @@ -4726,7 +4751,6 @@ L_08A31AD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A31B14; } @@ -4736,7 +4760,6 @@ L_08A31AE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A31B14; } @@ -4746,7 +4769,6 @@ L_08A31AF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A31B14; } @@ -4756,7 +4778,6 @@ L_08A31B04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A31B38; } @@ -4792,7 +4813,6 @@ L_08A31B38: goto L_08A33164; L_08A31B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31BE8; } @@ -4800,9 +4820,7 @@ L_08A31B40: } L_08A31B48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A31B74; } @@ -4889,7 +4907,17 @@ L_08A31BE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31C00: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4926,7 +4954,6 @@ L_08A31C3C: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(0u); if (branch_taken) { @@ -4937,7 +4964,6 @@ L_08A31C3C: L_08A31C60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2316))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A31CC4; } @@ -5072,7 +5098,6 @@ L_08A31D88: L_08A31D90: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); goto L_08A31DC0; @@ -5144,14 +5169,23 @@ L_08A31E1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31E38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2308))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_6 = (aot_gpr_5 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A31E98; } @@ -5163,11 +5197,20 @@ L_08A31E50: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5832))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31E68: aot_gpr_31 = (0x08A31E70u); aot_gpr_5 = (0u | 19u); @@ -5175,7 +5218,6 @@ L_08A31E68: AOT_REGCACHE_SYNC_OUT(); return; L_08A31E70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31E98; } @@ -5188,7 +5230,6 @@ L_08A31E78: AOT_REGCACHE_SYNC_OUT(); return; L_08A31E80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31E98; } @@ -5201,7 +5242,6 @@ L_08A31E88: AOT_REGCACHE_SYNC_OUT(); return; L_08A31E90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A31E98; } @@ -5214,7 +5254,17 @@ L_08A31E98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31EA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -5245,11 +5295,20 @@ L_08A31EE4: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[18]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5864))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A31EFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(92))); aot_gpr_5 = (0u | 8u); @@ -5292,7 +5351,6 @@ L_08A31F3C: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A31F80; @@ -5350,7 +5408,6 @@ L_08A31FD0: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A32014; @@ -5406,7 +5463,6 @@ L_08A3205C: aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(1932), static_cast(aot_gpr_5)); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A320A0; @@ -5460,7 +5516,6 @@ L_08A320E8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1256), std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(1932), static_cast(aot_gpr_5)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A32124; @@ -5514,7 +5569,6 @@ L_08A3216C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1256), std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(1932), static_cast(aot_gpr_5)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A321A8; @@ -5540,7 +5594,6 @@ L_08A321B8: } L_08A321C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A321EC; } @@ -5560,7 +5613,6 @@ L_08A321C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A321E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32208; } @@ -5604,7 +5656,6 @@ L_08A32224: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1256), std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(1932), static_cast(aot_gpr_5)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A32260; @@ -5648,7 +5699,6 @@ L_08A32270: L_08A322C8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A322E0; } @@ -5689,7 +5739,17 @@ L_08A32300: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3231C: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2308))); @@ -5718,7 +5778,6 @@ L_08A32364: L_08A3236C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2312))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A32398; } @@ -5728,7 +5787,6 @@ L_08A32378: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A32390; } @@ -5741,7 +5799,6 @@ L_08A32388: AOT_REGCACHE_SYNC_OUT(); return; L_08A32390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33130; } @@ -5750,7 +5807,6 @@ L_08A32390: L_08A32398: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2332))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A323E0; } @@ -5760,7 +5816,6 @@ L_08A323A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2332))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A323E0; } @@ -5771,7 +5826,6 @@ L_08A323B4: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(572))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A323E0; } @@ -5781,7 +5835,6 @@ L_08A323C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A323E0; } @@ -5799,7 +5852,6 @@ L_08A323E0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A32454; } @@ -5809,7 +5861,6 @@ L_08A323FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[18] = (0u | 58u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A32444; } @@ -5819,7 +5870,6 @@ L_08A3240C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); ctx.gpr[19] = (0u | 57u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A3243C; } @@ -5829,7 +5879,6 @@ L_08A3241C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 54u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3245C; } @@ -5841,7 +5890,6 @@ L_08A3242C: goto L_08A31A1C; L_08A32434: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33130; } @@ -5849,7 +5897,6 @@ L_08A32434: } L_08A3243C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33130; } @@ -5869,7 +5916,6 @@ L_08A3244C: } L_08A32454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33130; } @@ -5913,7 +5959,6 @@ L_08A324B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A324BC: aot_gpr_31 = (0x08A324C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A324C4u) goto L_08A324C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A324C4: @@ -5924,7 +5969,6 @@ L_08A324C4: goto L_08A324CC; L_08A324CC: aot_gpr_31 = (0x08A324D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A324D4u) goto L_08A324D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A324D4: @@ -5995,7 +6039,6 @@ L_08A324FC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A325B8; } @@ -6013,7 +6056,6 @@ L_08A32558: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A325B8; } @@ -6031,7 +6073,6 @@ L_08A32588: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A326B4; } @@ -6042,7 +6083,6 @@ L_08A325B8: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); goto L_08A325F0; @@ -6061,7 +6101,6 @@ L_08A325DC: goto L_08A325E4; L_08A325E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A326B4; } @@ -6084,7 +6123,6 @@ L_08A325F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A32614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33130; } @@ -6121,7 +6159,6 @@ L_08A32648: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A326B4; } @@ -6159,7 +6196,6 @@ L_08A326AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A326B4: aot_gpr_31 = (0x08A326BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A326BCu) goto L_08A326BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A326BC: @@ -6175,7 +6211,6 @@ L_08A326BC: L_08A326CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A32850; } @@ -6184,7 +6219,6 @@ L_08A326CC: L_08A326D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A32850; } @@ -6193,7 +6227,6 @@ L_08A326D8: L_08A326E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A32850; } @@ -6203,7 +6236,6 @@ L_08A326F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(2312))); ctx.gpr[19] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A32714; } @@ -6217,7 +6249,6 @@ L_08A32700: AOT_REGCACHE_SYNC_OUT(); return; L_08A3270C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32850; } @@ -6242,7 +6273,6 @@ L_08A32730: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(1784))); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(1360))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A32758; } @@ -6253,7 +6283,6 @@ L_08A32740: ctx.gpr[8] = (ctx.gpr[8] + static_cast(2228)); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A32758; } @@ -6276,7 +6305,6 @@ L_08A32758: L_08A3276C: aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A327A4; } @@ -6284,14 +6312,12 @@ L_08A3276C: } L_08A32778: aot_gpr_31 = (0x08A32780u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32780u) goto L_08A32780; AOT_REGCACHE_SYNC_OUT(); return; L_08A32780: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A32850; } @@ -6305,7 +6331,6 @@ L_08A32790: AOT_REGCACHE_SYNC_OUT(); return; L_08A3279C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32850; } @@ -6324,7 +6349,6 @@ L_08A327B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A327B8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A32850; } @@ -6371,9 +6395,7 @@ L_08A327C0: aot_gpr_4 = (17352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A32850; } @@ -6389,7 +6411,6 @@ L_08A3280C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A32850; } @@ -6399,7 +6420,6 @@ L_08A3281C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2228))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A32850; } @@ -6427,7 +6447,6 @@ L_08A32850: AOT_REGCACHE_SYNC_OUT(); return; L_08A32858: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A328A0; } @@ -6437,7 +6456,6 @@ L_08A32860: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2308))); aot_gpr_5 = (aot_gpr_4 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A32898; } @@ -6449,18 +6467,26 @@ L_08A32870: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(5896))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A32888: aot_gpr_31 = (0x08A32890u); aot_gpr_4 = (aot_gpr_16 | 0u); goto L_08A33440; L_08A32890: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6468,7 +6494,6 @@ L_08A32890: } L_08A32898: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6481,7 +6506,6 @@ L_08A328A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A328A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6490,7 +6514,6 @@ L_08A328A8: L_08A328B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6500,7 +6523,6 @@ L_08A328BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6511,7 +6533,6 @@ L_08A328CC: aot_gpr_4 = (aot_gpr_4 + static_cast(384)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(149)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6524,7 +6545,6 @@ L_08A328E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A328E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6535,7 +6555,6 @@ L_08A328F0: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(612))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3293C; } @@ -6567,7 +6586,6 @@ L_08A3293C: AOT_REGCACHE_SYNC_OUT(); return; L_08A32944: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A32958; } @@ -6576,7 +6594,6 @@ L_08A32944: L_08A3294C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A32960; } @@ -6621,7 +6638,6 @@ L_08A3297C: } L_08A32984: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A32D24; } @@ -6629,7 +6645,6 @@ L_08A32984: } L_08A3298C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32DB8; } @@ -6637,7 +6652,6 @@ L_08A3298C: } L_08A32994: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32DB8; } @@ -6650,7 +6664,6 @@ L_08A3299C: AOT_REGCACHE_SYNC_OUT(); return; L_08A329A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A329BC; } @@ -6663,7 +6676,6 @@ L_08A329AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A329B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32AE0; } @@ -6688,7 +6700,6 @@ L_08A329D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A329DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32AE0; } @@ -6698,7 +6709,6 @@ L_08A329E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A32AD8; } @@ -6709,9 +6719,7 @@ L_08A329F4: aot_gpr_4 = (16416u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A32AD8; } @@ -6719,12 +6727,10 @@ L_08A329F4: } L_08A32A10: aot_gpr_31 = (0x08A32A18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32A18u) goto L_08A32A18; AOT_REGCACHE_SYNC_OUT(); return; L_08A32A18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32AD8; } @@ -6732,14 +6738,12 @@ L_08A32A18: } L_08A32A20: aot_gpr_31 = (0x08A32A28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32A28u) goto L_08A32A28; AOT_REGCACHE_SYNC_OUT(); return; L_08A32A28: aot_gpr_4 = (ctx.gpr[2] + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A32A54; } @@ -6747,7 +6751,6 @@ L_08A32A28: } L_08A32A38: aot_gpr_31 = (0x08A32A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32A40u) goto L_08A32A40; AOT_REGCACHE_SYNC_OUT(); return; L_08A32A40: @@ -6758,7 +6761,6 @@ L_08A32A40: AOT_REGCACHE_SYNC_OUT(); return; L_08A32A4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32AE0; } @@ -6770,9 +6772,7 @@ L_08A32A54: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A32AC8; } @@ -6780,7 +6780,6 @@ L_08A32A54: } L_08A32A74: aot_gpr_31 = (0x08A32A7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32A7Cu) goto L_08A32A7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32A7C: @@ -6788,7 +6787,6 @@ L_08A32A7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A32AAC; } @@ -6796,7 +6794,6 @@ L_08A32A7C: } L_08A32A90: aot_gpr_31 = (0x08A32A98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32A98u) goto L_08A32A98; AOT_REGCACHE_SYNC_OUT(); return; L_08A32A98: @@ -6804,7 +6801,6 @@ L_08A32A98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A32AC8; } @@ -6812,7 +6808,6 @@ L_08A32A98: } L_08A32AAC: aot_gpr_31 = (0x08A32AB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32AB4u) goto L_08A32AB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A32AB4: @@ -6823,7 +6818,6 @@ L_08A32AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08A32AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32AE0; } @@ -6836,7 +6830,6 @@ L_08A32AC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A32AD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32AE0; } @@ -6849,7 +6842,6 @@ L_08A32AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08A32AE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32DB8; } @@ -6857,14 +6849,12 @@ L_08A32AE0: } L_08A32AE8: aot_gpr_31 = (0x08A32AF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32AF0u) goto L_08A32AF0; AOT_REGCACHE_SYNC_OUT(); return; L_08A32AF0: aot_gpr_4 = (ctx.gpr[2] + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A32CCC; } @@ -6872,13 +6862,11 @@ L_08A32AF0: } L_08A32B00: aot_gpr_31 = (0x08A32B08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32B08u) goto L_08A32B08; AOT_REGCACHE_SYNC_OUT(); return; L_08A32B08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A32B40; } @@ -6886,14 +6874,12 @@ L_08A32B08: } L_08A32B14: aot_gpr_31 = (0x08A32B1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32B1Cu) goto L_08A32B1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32B1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A32B40; } @@ -6912,7 +6898,6 @@ L_08A32B40: aot_gpr_5 = (128u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A32D1C; } @@ -6925,7 +6910,6 @@ L_08A32B54: AOT_REGCACHE_SYNC_OUT(); return; L_08A32B5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32D1C; } @@ -6933,12 +6917,10 @@ L_08A32B5C: } L_08A32B64: aot_gpr_31 = (0x08A32B6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32B6Cu) goto L_08A32B6C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32B6C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A32BEC; } @@ -6946,12 +6928,10 @@ L_08A32B6C: } L_08A32B74: aot_gpr_31 = (0x08A32B7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32B7Cu) goto L_08A32B7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32B7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32BEC; } @@ -6959,7 +6939,6 @@ L_08A32B7C: } L_08A32B84: aot_gpr_31 = (0x08A32B8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32B8Cu) goto L_08A32B8C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32B8C: @@ -6973,7 +6952,6 @@ L_08A32B8C: goto L_08A32BA0; L_08A32BA0: aot_gpr_31 = (0x08A32BA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32BA8u) goto L_08A32BA8; AOT_REGCACHE_SYNC_OUT(); return; L_08A32BA8: @@ -6981,7 +6959,6 @@ L_08A32BA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A32BEC; } @@ -7004,7 +6981,6 @@ L_08A32BC0: AOT_REGCACHE_SYNC_OUT(); return; L_08A32BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32D1C; } @@ -7023,7 +6999,6 @@ L_08A32BF8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_29 + static_cast(80)); if (branch_taken) { @@ -7044,9 +7019,7 @@ L_08A32C24: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A32CB8; } @@ -7054,12 +7027,10 @@ L_08A32C24: } L_08A32C4C: aot_gpr_31 = (0x08A32C54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32C54u) goto L_08A32C54; AOT_REGCACHE_SYNC_OUT(); return; L_08A32C54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32CC4; } @@ -7067,7 +7038,6 @@ L_08A32C54: } L_08A32C5C: aot_gpr_31 = (0x08A32C64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32C64u) goto L_08A32C64; AOT_REGCACHE_SYNC_OUT(); return; L_08A32C64: @@ -7077,7 +7047,6 @@ L_08A32C64: AOT_REGCACHE_SYNC_OUT(); return; L_08A32C6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32CC4; } @@ -7085,13 +7054,11 @@ L_08A32C6C: } L_08A32C74: aot_gpr_31 = (0x08A32C7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32C7Cu) goto L_08A32C7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32C7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(562))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A32CC4; } @@ -7099,13 +7066,11 @@ L_08A32C7C: } L_08A32C88: aot_gpr_31 = (0x08A32C90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32C90u) goto L_08A32C90; AOT_REGCACHE_SYNC_OUT(); return; L_08A32C90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A32CC4; } @@ -7113,7 +7078,6 @@ L_08A32C90: } L_08A32C9C: aot_gpr_31 = (0x08A32CA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32CA4u) goto L_08A32CA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A32CA4: @@ -7124,7 +7088,6 @@ L_08A32CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A32CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32CC4; } @@ -7138,7 +7101,6 @@ L_08A32CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08A32CC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32D1C; } @@ -7178,7 +7140,6 @@ L_08A32D14: AOT_REGCACHE_SYNC_OUT(); return; L_08A32D1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32DB8; } @@ -7188,7 +7149,6 @@ L_08A32D24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A32DB0; } @@ -7196,12 +7156,10 @@ L_08A32D24: } L_08A32D34: aot_gpr_31 = (0x08A32D3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32D3Cu) goto L_08A32D3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32D3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A32DB0; } @@ -7209,7 +7167,6 @@ L_08A32D3C: } L_08A32D44: aot_gpr_31 = (0x08A32D4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32D4Cu) goto L_08A32D4C; AOT_REGCACHE_SYNC_OUT(); return; L_08A32D4C: @@ -7225,7 +7182,6 @@ L_08A32D4C: } L_08A32D60: aot_gpr_31 = (0x08A32D68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32D68u) goto L_08A32D68; AOT_REGCACHE_SYNC_OUT(); return; L_08A32D68: @@ -7233,7 +7189,6 @@ L_08A32D68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A32DB0; } @@ -7247,9 +7202,7 @@ L_08A32D80: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A32DB0; } @@ -7257,7 +7210,6 @@ L_08A32D80: } L_08A32D9C: aot_gpr_31 = (0x08A32DA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32DA4u) goto L_08A32DA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A32DA4: @@ -7268,7 +7220,6 @@ L_08A32DA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A32DB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A32DB8; } @@ -7277,7 +7228,6 @@ L_08A32DB0: L_08A32DB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A32DD0; } @@ -7292,7 +7242,6 @@ L_08A32DC4: L_08A32DD0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A32F0C; } @@ -7306,7 +7255,6 @@ L_08A32DDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A32DE8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A32E10; } @@ -7341,7 +7289,6 @@ L_08A32E10: aot_gpr_4 = (aot_gpr_4 & 31u); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A32ED4; } @@ -7402,7 +7349,6 @@ L_08A32E48: L_08A32EAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A32ED4; } @@ -7424,7 +7370,6 @@ L_08A32ED0: goto L_08A32ED4; L_08A32ED4: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A32F0C; } @@ -7528,7 +7473,6 @@ L_08A32F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A32F9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A33080; } @@ -7554,7 +7498,6 @@ L_08A32FC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A32FCC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A3301C; } @@ -7562,7 +7505,6 @@ L_08A32FCC: } L_08A32FD4: aot_gpr_31 = (0x08A32FDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A32FDCu) goto L_08A32FDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A32FDC: @@ -7587,7 +7529,6 @@ L_08A32FF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A33014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33070; } @@ -7597,7 +7538,6 @@ L_08A3301C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08A33038; } @@ -7651,7 +7591,6 @@ L_08A33080: AOT_REGCACHE_SYNC_OUT(); return; L_08A330A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A33100; } @@ -7665,7 +7604,6 @@ L_08A330A8: L_08A330B4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A330D4; } @@ -7679,7 +7617,6 @@ L_08A330C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A330CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A330E4; } @@ -7709,7 +7646,6 @@ L_08A330F0: goto L_08A33100; L_08A33100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33130; } @@ -7722,9 +7658,7 @@ L_08A33108: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(264))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33130; } @@ -7753,7 +7687,17 @@ L_08A33130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A33164: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -7813,7 +7757,6 @@ L_08A331F0: L_08A331F4: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(2296))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A3342C; } @@ -7834,7 +7777,6 @@ L_08A33210: goto L_08A33214; L_08A33214: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A33248; } @@ -7843,7 +7785,6 @@ L_08A33214: L_08A3321C: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(816))); { const bool branch_taken = ctx.gpr[10] != aot_gpr_16; - // nop if (branch_taken) { goto L_08A33248; } @@ -7866,7 +7807,6 @@ L_08A33228: L_08A33248: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(816))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08A33258; } @@ -7895,7 +7835,6 @@ L_08A33268: } L_08A33270: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A33294; } @@ -7944,7 +7883,6 @@ L_08A332E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A332F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3342C; } @@ -7953,7 +7891,6 @@ L_08A332F0: L_08A332F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33328; } @@ -7962,7 +7899,6 @@ L_08A332F8: L_08A33304: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(32))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A33328; } @@ -7977,7 +7913,6 @@ L_08A33310: AOT_REGCACHE_SYNC_OUT(); return; L_08A33320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3342C; } @@ -7986,7 +7921,6 @@ L_08A33320: L_08A33328: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A333A0; } @@ -8034,9 +7968,7 @@ L_08A33334: aot_gpr_4 = (16840u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A333A0; } @@ -8058,7 +7990,6 @@ L_08A33384: AOT_REGCACHE_SYNC_OUT(); return; L_08A33398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33424; } @@ -8072,7 +8003,6 @@ L_08A333A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A333AC: aot_gpr_31 = (0x08A333B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A333B4u) goto L_08A333B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A333B4: @@ -8114,7 +8044,6 @@ L_08A33418: AOT_REGCACHE_SYNC_OUT(); return; L_08A33424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3342C; } @@ -8132,7 +8061,17 @@ L_08A3342C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A33440: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -8166,7 +8105,6 @@ L_08A334A8: goto L_08A334B0; L_08A334B0: aot_gpr_31 = (0x08A334B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A334B8u) goto L_08A334B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A334B8: @@ -8190,7 +8128,6 @@ L_08A334DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(30)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A334FC; } @@ -8200,7 +8137,6 @@ L_08A334EC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(30)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3351C; } @@ -8210,7 +8146,6 @@ L_08A334FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 54u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A33514; } @@ -8222,7 +8157,6 @@ L_08A3350C: goto L_08A33164; L_08A33514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 107u, 0x08A34680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8230,12 +8164,10 @@ L_08A33514: } L_08A3351C: aot_gpr_31 = (0x08A33524u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33524u) goto L_08A33524; AOT_REGCACHE_SYNC_OUT(); return; L_08A33524: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A335EC; } @@ -8244,7 +8176,6 @@ L_08A33524: L_08A3352C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2296))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A335EC; } @@ -8253,7 +8184,6 @@ L_08A3352C: L_08A33538: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2297))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A335EC; } @@ -8263,7 +8193,6 @@ L_08A33544: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33648; } @@ -8317,9 +8246,7 @@ L_08A335C8: aot_gpr_4 = (16752u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33648; } @@ -8336,7 +8263,6 @@ L_08A335E4: L_08A335EC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2302))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33648; } @@ -8344,12 +8270,10 @@ L_08A335EC: } L_08A335F8: aot_gpr_31 = (0x08A33600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33600u) goto L_08A33600; AOT_REGCACHE_SYNC_OUT(); return; L_08A33600: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A33648; } @@ -8375,7 +8299,6 @@ L_08A33608: goto L_08A33164; L_08A33648: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 22u, 0x08A341B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8384,7 +8307,6 @@ L_08A33648: L_08A33650: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2297))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A33CE4; } @@ -8393,7 +8315,6 @@ L_08A33650: L_08A3365C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2296))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A339BC; } @@ -8411,7 +8332,6 @@ L_08A33668: AOT_REGCACHE_SYNC_OUT(); return; L_08A33684: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A339BC; } @@ -8419,12 +8339,10 @@ L_08A33684: } L_08A3368C: aot_gpr_31 = (0x08A33694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33694u) goto L_08A33694; AOT_REGCACHE_SYNC_OUT(); return; L_08A33694: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A339BC; } @@ -8445,9 +8363,7 @@ L_08A336BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A339BC; } @@ -8455,7 +8371,6 @@ L_08A336BC: } L_08A336D4: aot_gpr_31 = (0x08A336DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A336DCu) goto L_08A336DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A336DC: @@ -8483,9 +8398,7 @@ L_08A336DC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A339BC; } @@ -8493,7 +8406,6 @@ L_08A336DC: } L_08A33748: aot_gpr_31 = (0x08A33750u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33750u) goto L_08A33750; AOT_REGCACHE_SYNC_OUT(); return; L_08A33750: @@ -8547,7 +8459,6 @@ L_08A33750: aot_fpr_14 = std::bit_cast(0u); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8585,9 +8496,7 @@ L_08A33814: { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33840; } @@ -8628,9 +8537,7 @@ L_08A33874: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A339A4; } @@ -8658,7 +8565,6 @@ L_08A338D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A338D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A339BC; } @@ -8666,7 +8572,6 @@ L_08A338D8: } L_08A338E0: aot_gpr_31 = (0x08A338E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A338E8u) goto L_08A338E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A338E8: @@ -8677,7 +8582,6 @@ L_08A338E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A338F4: aot_gpr_31 = (0x08A338FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A338FCu) goto L_08A338FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A338FC: @@ -8707,7 +8611,6 @@ L_08A33918: AOT_REGCACHE_SYNC_OUT(); return; L_08A33948: aot_gpr_31 = (0x08A33950u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33950u) goto L_08A33950; AOT_REGCACHE_SYNC_OUT(); return; L_08A33950: @@ -8737,7 +8640,6 @@ L_08A33964: AOT_REGCACHE_SYNC_OUT(); return; L_08A3399C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A339BC; } @@ -8747,7 +8649,6 @@ L_08A339A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A339BC; } @@ -8761,7 +8662,6 @@ L_08A339B4: L_08A339BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2296))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A339DC; } @@ -8772,7 +8672,6 @@ L_08A339C8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(24))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33B58; } @@ -8816,7 +8715,6 @@ L_08A33A0C: L_08A33A10: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(816))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A33A3C; } @@ -8826,9 +8724,7 @@ L_08A33A1C: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(816))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(2292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33A3C; } @@ -8851,7 +8747,6 @@ L_08A33A3C: L_08A33A4C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2296))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A33AEC; } @@ -8862,7 +8757,6 @@ L_08A33A58: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(25))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A33A80; } @@ -8875,7 +8769,6 @@ L_08A33A6C: goto L_08A31654; L_08A33A78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33B50; } @@ -8886,9 +8779,7 @@ L_08A33A80: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33AB8; } @@ -8896,7 +8787,6 @@ L_08A33A80: } L_08A33A9C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33B50; } @@ -8905,9 +8795,7 @@ L_08A33A9C: L_08A33AA4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33B50; } @@ -8915,7 +8803,6 @@ L_08A33AA4: } L_08A33AB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33AD8; } @@ -8923,9 +8810,7 @@ L_08A33AB8: } L_08A33AC0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33AD8; } @@ -8933,7 +8818,6 @@ L_08A33AC0: } L_08A33AD0: aot_gpr_31 = (0x08A33AD8u); - // nop goto L_08A33164; L_08A33AD8: aot_gpr_4 = (ctx.gpr[19] | 0u); @@ -8942,7 +8826,6 @@ L_08A33AD8: goto L_08A31654; L_08A33AE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33B50; } @@ -8950,7 +8833,6 @@ L_08A33AE4: } L_08A33AEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33B50; } @@ -8961,7 +8843,6 @@ L_08A33AF4: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(24))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A33B50; } @@ -8979,9 +8860,7 @@ L_08A33B08: L_08A33B14: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33B38; } @@ -8993,7 +8872,6 @@ L_08A33B28: goto L_08A33164; L_08A33B30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33B50; } @@ -9001,9 +8879,7 @@ L_08A33B30: } L_08A33B38: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33B50; } @@ -9011,11 +8887,9 @@ L_08A33B38: } L_08A33B48: aot_gpr_31 = (0x08A33B50u); - // nop goto L_08A33164; L_08A33B50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33B64; } @@ -9029,7 +8903,6 @@ L_08A33B58: L_08A33B64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2296))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 107u, 0x08A34680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9038,7 +8911,6 @@ L_08A33B64: L_08A33B70: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A33BB4; } @@ -9053,7 +8925,6 @@ L_08A33B7C: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A33BB4; } @@ -9067,7 +8938,6 @@ L_08A33BA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A33BAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33C2C; } @@ -9076,7 +8946,6 @@ L_08A33BAC: L_08A33BB4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A33C2C; } @@ -9091,7 +8960,6 @@ L_08A33BC0: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A33C2C; } @@ -9099,13 +8967,11 @@ L_08A33BC0: } L_08A33BE4: aot_gpr_31 = (0x08A33BECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33BECu) goto L_08A33BEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A33BEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A33C2C; } @@ -9119,7 +8985,6 @@ L_08A33BF8: AOT_REGCACHE_SYNC_OUT(); return; L_08A33C04: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08A33C20; } @@ -9133,7 +8998,6 @@ L_08A33C0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A33C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A33C2C; } @@ -9148,7 +9012,6 @@ L_08A33C20: L_08A33C2C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2299))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33C6C; } @@ -9164,7 +9027,6 @@ L_08A33C38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A33C6C; } @@ -9178,12 +9040,10 @@ L_08A33C60: AOT_REGCACHE_SYNC_OUT(); return; L_08A33C6C: aot_gpr_31 = (0x08A33C74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33C74u) goto L_08A33C74; AOT_REGCACHE_SYNC_OUT(); return; L_08A33C74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 107u, 0x08A34680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9192,7 +9052,6 @@ L_08A33C74: L_08A33C7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2299))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33C98; } @@ -9206,7 +9065,6 @@ L_08A33C88: goto L_08A33C98; L_08A33C98: aot_gpr_31 = (0x08A33CA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33CA0u) goto L_08A33CA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A33CA0: @@ -9228,9 +9086,7 @@ L_08A33CA0: aot_gpr_4 = (16512u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 107u, 0x08A34680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9242,7 +9098,6 @@ L_08A33CD4: goto L_08A33164; L_08A33CDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 107u, 0x08A34680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9283,7 +9138,6 @@ L_08A33D34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33D70; } @@ -9293,7 +9147,6 @@ L_08A33D44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9306,7 +9159,6 @@ L_08A33D54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9317,7 +9169,6 @@ L_08A33D70: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33F28; } @@ -9326,9 +9177,7 @@ L_08A33D70: L_08A33D84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A33F14; } @@ -9395,7 +9244,6 @@ L_08A33DE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A33E24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A33E44; } @@ -9404,7 +9252,6 @@ L_08A33E24: L_08A33E2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A33EC0; } @@ -9413,7 +9260,6 @@ L_08A33E2C: L_08A33E38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08A33EC0; } @@ -9439,7 +9285,6 @@ L_08A33E60: AOT_REGCACHE_SYNC_OUT(); return; L_08A33E6C: aot_gpr_31 = (0x08A33E74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33E74u) goto L_08A33E74; AOT_REGCACHE_SYNC_OUT(); return; L_08A33E74: @@ -9469,7 +9314,6 @@ L_08A33E90: AOT_REGCACHE_SYNC_OUT(); return; L_08A33EC0: aot_gpr_31 = (0x08A33EC8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A33EC8u) goto L_08A33EC8; AOT_REGCACHE_SYNC_OUT(); return; L_08A33EC8: @@ -9505,7 +9349,6 @@ L_08A33F14: AOT_REGCACHE_SYNC_OUT(); return; L_08A33F20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9515,7 +9358,6 @@ L_08A33F28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9525,7 +9367,6 @@ L_08A33F38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9534,7 +9375,6 @@ L_08A33F38: L_08A33F48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2302))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9571,9 +9411,7 @@ L_08A33F54: aot_gpr_4 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 4u, 0x08A34020u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9619,9 +9457,7 @@ L_08A33FA8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 21u, 0x08A341A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0140.cpp b/profiles/vcs/generated/generated_unit_0140.cpp index ba37d0b..6919d00 100644 --- a/profiles/vcs/generated/generated_unit_0140.cpp +++ b/profiles/vcs/generated/generated_unit_0140.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0140[4094] = { - 1, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 20, 0, 0, 21, 0, 22, 0, 0, 23, 0, 0, 24, 0, 0, 25, 0, 0, 0, 26, 0, 27, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 31, 0, 0, 0, 32, 0, 33, 0, 0, 0, 34, 0, 0, - 35, 0, 36, 0, 37, 0, 38, 0, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, - 0, 0, 0, 47, 0, 48, 0, 0, 49, 0, 50, 0, 51, 0, 0, 52, 0, 53, 0, 0, 0, 54, 0, 0, 0, 55, 0, 56, 0, 57, 0, 0, - 58, 0, 59, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, 63, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, - 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 83, 84, - 0, 85, 0, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 89, 0, 0, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 0, 0, - 0, 95, 0, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, - 112, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 0, 0, 117, 0, 118, 0, 119, 0, - 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 0, 127, 0, 0, 128, - 0, 0, 129, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 132, 0, 0, 133, 0, 134, 0, 0, 135, 0, 136, 0, 137, 0, 0, 138, 0, 0, - 139, 0, 140, 0, 0, 141, 0, 142, 0, 143, 144, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 0, 0, 0, 0, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 155, 0, 0, 156, 0, 0, - 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 164, 0, 165, 0, 0, 166, 0, 167, 0, 0, 0, 168, 0, 0, 0, 169, 0, 170, - 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, - 0, 185, 0, 186, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, - 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 193, - 0, 194, 0, 195, 196, 0, 0, 197, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, - 202, 0, 203, 0, 204, 205, 0, 0, 206, 0, 0, 0, 0, 207, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, - 211, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 215, 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 219, - 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 224, - 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 235, 0, 236, 0, 237, 0, 0, 238, 0, 239, 0, 240, 0, - 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 243, 244, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 247, 0, 248, 0, 0, 0, - 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 252, 0, 253, 0, 254, 0, 0, 0, 255, 0, 256, 0, 257, 0, 0, 258, 0, 0, - 0, 0, 259, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 264, 0, 0, 265, 0, 266, 0, 0, 0, 267, - 0, 268, 0, 269, 0, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 276, 0, 277, - 0, 278, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 284, 0, 0, 285, 0, 286, 287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 291, 0, 292, 0, 293, 0, 294, 0, - 0, 295, 0, 0, 0, 0, 296, 297, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 0, 300, 0, 0, 301, 0, 302, 0, 303, 0, 304, - 0, 0, 305, 0, 0, 306, 307, 0, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 310, 0, 311, 0, 0, 312, 0, 0, 313, 0, 314, 0, 315, 0, - 316, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, - 0, 0, 0, 0, 0, 327, 0, 328, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 334, 0, 335, - 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 338, 339, 0, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, 0, 344, 0, - 0, 345, 0, 0, 346, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, 0, 357, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 359, 360, 0, 361, 0, 0, 362, 0, 0, 363, 0, 0, 364, 0, 0, 0, 0, 365, - 0, 0, 366, 0, 367, 0, 0, 368, 0, 0, 369, 0, 370, 371, 0, 0, 372, 0, 373, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, - 0, 376, 0, 377, 0, 378, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 381, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 387, 0, 0, - 0, 0, 0, 388, 0, 389, 0, 0, 390, 0, 0, 391, 0, 0, 392, 0, 393, 394, 0, 395, 0, 396, 0, 0, 0, 397, 0, 398, 0, 399, 0, 400, - 0, 0, 0, 0, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 407, 0, 0, 408, 0, 409, 0, 0, 410, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 415, 416, 417, 0, 0, 418, 0, 419, 0, 0, 420, 421, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 422, 0, 423, 0, 424, 0, 0, 425, 0, 0, 426, 0, 427, 0, 428, 0, 0, 429, 0, 430, 0, 431, 0, 432, 0, 0, 0, - 0, 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, 0, 0, 0, 0, 437, 0, 0, 0, 438, 0, - 439, 0, 440, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, 444, 0, 0, 445, 0, 446, 0, 0, 447, 0, 448, 0, 449, 0, 450, 0, - 451, 0, 0, 452, 0, 453, 0, 454, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 457, - 0, 0, 0, 458, 0, 0, 0, 459, 0, 460, 0, 0, 461, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 466, 0, 0, 467, 0, 468, 469, 470, 0, - 0, 471, 0, 472, 0, 0, 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, - 478, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 0, 0, 0, 482, 0, 0, 0, 483, 0, 484, 0, 485, 0, - 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 490, 0, 0, 491, 0, 492, 0, 0, 493, 0, 494, 0, 495, 0, 496, 0, - 497, 0, 0, 498, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 503, - 0, 0, 0, 504, 0, 0, 0, 505, 0, 506, 0, 0, 507, 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 0, 514, 515, 0, 516, 0, 517, 0, 518, 0, 519, 520, 0, 521, 0, 0, 522, 523, - 0, 524, 0, 0, 525, 526, 0, 527, 0, 528, 0, 0, 0, 529, 0, 0, 530, 0, 0, 531, 0, 0, 532, 0, 0, 533, 0, 0, 534, 0, 535, 0, - 0, 0, 0, 0, 0, 536, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 540, 0, 541, - 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 0, - 548, 0, 0, 549, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 552, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 555, 0, 556, - 0, 557, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 0, 561, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 0, - 0, 0, 0, 565, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 572, - 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 577, 578, 0, 579, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 585, 0, 586, 0, 0, 587, 0, 588, 0, 0, 0, 0, 589, 0, 0, 0, - 590, 0, 591, 0, 592, 0, 593, 0, 0, 594, 0, 595, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 598, 0, 0, 0, 599, 0, 0, 0, 600, - 0, 0, 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 0, 0, 0, 608, 0, 609, 0, 0, 610, 0, - 611, 0, 612, 0, 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 616, 0, 617, 0, 0, 618, 0, 619, 0, 620, 0, 621, 0, 0, 622, - 0, 623, 0, 624, 0, 625, 0, 626, 0, 0, 627, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 631, 0, 632, 0, 633, 0, 0, - 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 0, 0, 639, 0, 0, 0, 0, 640, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, - 653, 0, 654, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 657, 0, 0, 0, 658, 0, 659, 0, 0, 660, 0, 661, 0, 0, - 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 668, - 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, - 0, 675, 0, 0, 676, 0, 677, 678, 0, 679, 0, 0, 680, 0, 0, 681, 0, 682, 683, 0, 684, 0, 0, 0, 0, 0, 0, 0, 685, 0, 686, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 690, 0, 691, - 0, 0, 0, 692, 0, 693, 0, 694, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, 697, 0, 0, 698, 0, 0, 699, 0, 700, 701, 0, 0, 702, 0, - 703, 0, 0, 0, 704, 0, 705, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, 709, 0, 0, 710, 0, 711, 712, 0, 713, 0, 0, - 714, 0, 0, 715, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 719, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 721, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 724, 0, 725, 0, - 0, 0, 726, 0, 0, 0, 727, 728, 0, 729, 0, 730, 0, 0, 0, 0, 0, 731, 732, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, - 0, 735, 736, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 0, 740, 0, 0, 741, 0, 742, 743, 0, - 744, 0, 745, 0, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 749, 0, 750, 0, 0, 0, 0, 0, 0, 0, 751, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 754, 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, 0, 0, 757, 0, 758, 0, 0, 0, 0, 0, 0, 759, 0, 760, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, 0, 0, 763, 0, 764, 0, 765, 0, 0, 766, 0, 0, 767, 0, 0, 768, 769, 0, 0, 770, 0, - 771, 0, 0, 772, 0, 0, 0, 773, 0, 0, 0, 774, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, - 777, 0, 0, 778, 0, 0, 779, 0, 0, 780, 0, 0, 781, 0, 782, 0, 783, 0, 784, 0, 785, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 787, 0, 0, 788, 0, 0, 789, 0, 0, 790, 0, 791, 0, 792, 0, 793, 0, 0, 794, 0, 0, 0, 795, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 797, 0, 0, 798, 0, 0, 0, 0, 0, 799, 0, 0, 800, 0, 801, 0, 802, - 0, 0, 0, 0, 0, 803, 0, 0, 804, 0, 805, 0, 806, 0, 0, 0, 0, 0, 0, 807, 0, 0, 808, 0, 0, 809, 0, 0, 810, 0, 0, 0, - 811, 0, 812, 0, 813, 0, 814, 0, 0, 0, 815, 0, 0, 816, 0, 817, 0, 818, 0, 0, 0, 819, 0, 0, 0, 820, 0, 0, 821, 0, 822, 0, - 0, 0, 823, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 0, 826, 0, 0, 827, 0, 828, 0, 829, 0, - 0, 830, 0, 0, 831, 0, 0, 832, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 836, 0, 0, 837, 0, 0, 838, 0, 0, 839, 0, 840, 0, 841, 0, 842, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 844, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, 846, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, 0, - 0, 0, 0, 849, 0, 0, 850, 0, 0, 0, 0, 0, 0, 851, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 853, 0, 0, 854, 0, 855, 0, 856, 0, 857, 0, 0, 0, 858, 0, 0, 0, 859, 0, 860, 0, 861, 0, 0, 862, 0, 0, 0, 0, 0, 0, - 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, 0, 0, 865, 0, 866, - 0, 867, 0, 868, 0, 0, 0, 869, 0, 0, 0, 870, 0, 871, 0, 872, 0, 873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 874, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, 0, 877, 0, 878, - 0, 879, 0, 880, 0, 0, 0, 881, 0, 0, 0, 882, 0, 883, 0, 884, 0, 885, 0, 0, 886, 887, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, 890, 0, 0, 0, 0, - 891, 0, 0, 0, 892, 0, 893, 0, 894, 0, 895, 0, 0, 896, 0, 0, 0, 0, 0, 897, 0, 898, 0, 899, 0, 0, 0, 0, 0, 900, 0, 0, - 901, 0, 902, 0, 0, 0, 0, 903, 0, 0, 0, 904, 0, 905, 0, 906, 0, 907, 0, 0, 908, 0, 909, 0, 910, 0, 0, 0, 0, 0, 911, 0, - 0, 0, 0, 0, 912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 913, 0, 0, 0, 0, 0, 914, 0, 0, 915, 916, 0, - 917, 0, 0, 0, 0, 918, 0, 0, 0, 919, 0, 920, 0, 921, 0, 922, 0, 0, 923, 0, 0, 0, 0, 0, 0, 0, 924, 0, 925, 0, 926, 0, - 0, 0, 0, 0, 927, 0, 0, 928, 0, 929, 0, 0, 0, 0, 930, 0, 0, 0, 931, 0, 932, 0, 933, 0, 934, 0, 0, 935, 0, 936, 0, 937, - 0, 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, 0, 0, - 941, 0, 0, 0, 0, 942, 0, 0, 0, 943, 0, 944, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 948, 0, 0, 949, 0, 0, 950, 0, 0, 951, 0, 952, 0, 953, 0, 954, 0, 0, 0, 0, 0, 0, 0, 955, 0, 0, 0, - 956, 0, 0, 0, 957, 0, 0, 0, 0, 0, 0, 0, 958, 0, 0, 959, 0, 0, 960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 961, 0, 0, 0, 962, 0, 0, 0, 0, 0, 963, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 964, 0, 0, - 965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 966, 0, 967, 0, 0, 968, 0, 0, 0, 969, 0, 0, 970, 0, 0, 0, 971, 0, 972, 0, 0, - 0, 973, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, 976, 0, 0, 977, 0, 0, 0, 978, 0, 0, 979, 0, 0, 0, 980, 0, - 981, 0, 0, 0, 982, 0, 0, 983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 984, 0, 985, 0, 0, 986, 0, 0, 0, 987, 0, 0, 988, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0140[64] = { + 0x00024006002A8145ull, 0x1A2494A000191140ull, 0x8822AA5522892000ull, 0x444528252A229528ull, + 0xCA05504005542208ull, 0x2001092215514222ull, 0x0540200108222500ull, 0x92A4042154490041ull, + 0x8240A6A5254A40A4ull, 0x1024040825204900ull, 0x0000A002A2295400ull, 0x2802008000000400ull, + 0x2001000400280400ull, 0x880400042000012Aull, 0x0802A1351008509Aull, 0x884000848809A089ull, + 0x54A9204002A04888ull, 0x2545490214500D02ull, 0xA4810A4A8A490214ull, 0x552408690054004Aull, + 0x54950864AA4810C2ull, 0xA88054A055540A09ull, 0x0022A25252049890ull, 0x8492D0002D020000ull, + 0x0008022A800D3494ull, 0xAA2B492822104015ull, 0x0A524000014008A0ull, 0x154A92A00329D240ull, + 0x5529428544280210ull, 0x80089288808080A9ull, 0x012800CA74900000ull, 0x5529428454428021ull, + 0x08089288808080A9ull, 0x524922B2CB559480ull, 0x24408804A1100060ull, 0x1044488AA8806049ull, + 0x05A04088A4140248ull, 0x88A40A5510A59490ull, 0x954A40554A155088ull, 0x102A11552A8054AAull, + 0x29448045242AAA00ull, 0x2200892088122402ull, 0xA0804100501692D2ull, 0x2D2482514D24A0A8ull, + 0x5010005001240229ull, 0x69240016800E0AC4ull, 0x0009000040504845ull, 0x4C92A4400140A281ull, + 0x0115524920010889ull, 0xA904810008954920ull, 0x5222A45512481520ull, 0x0011029254880044ull, + 0x0800448011015492ull, 0x0254455200012048ull, 0xA400000000000001ull, 0xA40002004002A88Aull, + 0x090000001032A88Aull, 0x4152A88520A82551ull, 0x5404AA2164100010ull, 0x20004080A9544290ull, + 0x0102000000004A21ull, 0x0004901110154920ull, 0x2891280120020880ull, 0x244A009144894012ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0140[64] = { + 1u, 13u, 29u, 47u, 68u, 85u, 101u, 112u, 129u, 150u, 162u, 174u, 179u, 185u, 194u, 211u, + 225u, 241u, 259u, 278u, 295u, 316u, 336u, 353u, 366u, 381u, 401u, 412u, 433u, 451u, 465u, 478u, + 497u, 511u, 536u, 548u, 565u, 580u, 601u, 623u, 644u, 662u, 675u, 692u, 714u, 726u, 744u, 754u, + 771u, 787u, 803u, 823u, 836u, 849u, 863u, 867u, 879u, 891u, 912u, 927u, 941u, 948u, 961u, 973u, }; void recomp_unit_0140_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0140_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A34000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0140[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0140[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0140[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A34000; @@ -1161,7 +1068,6 @@ LOCAL_DISPATCH: } L_08A34000: aot_gpr_31 = (0x08A34008u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34008u) goto L_08A34008; AOT_REGCACHE_SYNC_OUT(); return; L_08A34008: @@ -1173,7 +1079,6 @@ L_08A34008: AOT_REGCACHE_SYNC_OUT(); return; L_08A34018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A341A8; } @@ -1184,9 +1089,7 @@ L_08A34020: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A340B8; } @@ -1194,7 +1097,6 @@ L_08A34020: } L_08A3403C: aot_gpr_31 = (0x08A34044u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34044u) goto L_08A34044; AOT_REGCACHE_SYNC_OUT(); return; L_08A34044: @@ -1205,7 +1107,6 @@ L_08A34044: goto L_08A3404C; L_08A3404C: aot_gpr_31 = (0x08A34054u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34054u) goto L_08A34054; AOT_REGCACHE_SYNC_OUT(); return; L_08A34054: @@ -1226,9 +1127,7 @@ L_08A34054: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A340B8; } @@ -1297,9 +1196,7 @@ L_08A34118: goto L_08A34120; L_08A34120: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3419C; } @@ -1344,7 +1241,6 @@ L_08A34150: AOT_REGCACHE_SYNC_OUT(); return; L_08A34194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A341A8; } @@ -1357,7 +1253,6 @@ L_08A3419C: goto L_08A341A8; L_08A341A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1366,7 +1261,6 @@ L_08A341A8: L_08A341B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2297))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34264; } @@ -1375,7 +1269,6 @@ L_08A341B0: L_08A341BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2302))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A34264; } @@ -1421,7 +1314,6 @@ L_08A341F0: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(460), aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34240; } @@ -1436,7 +1328,6 @@ L_08A34234: L_08A34240: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1451,7 +1342,6 @@ L_08A3424C: AOT_REGCACHE_SYNC_OUT(); return; L_08A3425C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1461,7 +1351,6 @@ L_08A34264: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34680; } @@ -1470,7 +1359,6 @@ L_08A34264: L_08A34274: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2296))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34288; } @@ -1488,7 +1376,6 @@ L_08A34288: AOT_REGCACHE_SYNC_OUT(); return; L_08A34290: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1497,7 +1384,6 @@ L_08A34290: L_08A34298: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A343C8; } @@ -1510,7 +1396,6 @@ L_08A342A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A342AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A343C8; } @@ -1523,7 +1408,6 @@ L_08A342B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A342BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A3436C; } @@ -1533,7 +1417,6 @@ L_08A342C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34344; } @@ -1545,7 +1428,6 @@ L_08A342D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A34314; } @@ -1555,7 +1437,6 @@ L_08A342EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34680; } @@ -1570,7 +1451,6 @@ L_08A342FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A3430C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1584,7 +1464,6 @@ L_08A34314: AOT_REGCACHE_SYNC_OUT(); return; L_08A34320: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1592,7 +1471,6 @@ L_08A34320: } L_08A34328: aot_gpr_31 = (0x08A34330u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34330u) goto L_08A34330; AOT_REGCACHE_SYNC_OUT(); return; L_08A34330: @@ -1603,7 +1481,6 @@ L_08A34330: AOT_REGCACHE_SYNC_OUT(); return; L_08A3433C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1613,7 +1490,6 @@ L_08A34344: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34680; } @@ -1628,7 +1504,6 @@ L_08A34354: AOT_REGCACHE_SYNC_OUT(); return; L_08A34364: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1647,7 +1522,6 @@ L_08A34374: AOT_REGCACHE_SYNC_OUT(); return; L_08A34380: aot_gpr_31 = (0x08A34388u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34388u) goto L_08A34388; AOT_REGCACHE_SYNC_OUT(); return; L_08A34388: @@ -1681,7 +1555,6 @@ L_08A343B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A343C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34680; } @@ -1691,7 +1564,6 @@ L_08A343C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34680; } @@ -1701,7 +1573,6 @@ L_08A343D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2196))); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34680; } @@ -1711,7 +1582,6 @@ L_08A343E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2276))); ctx.gpr[23] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A34680; } @@ -1740,7 +1610,6 @@ L_08A34424: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1751,7 +1620,6 @@ L_08A34434: aot_gpr_5 = (0u | 18u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34458; } @@ -1764,7 +1632,6 @@ L_08A34448: AOT_REGCACHE_SYNC_OUT(); return; L_08A34450: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34540; } @@ -1777,7 +1644,6 @@ L_08A34458: AOT_REGCACHE_SYNC_OUT(); return; L_08A34460: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34540; } @@ -1795,7 +1661,6 @@ L_08A34468: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A34540; } @@ -1820,7 +1685,6 @@ L_08A344B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A344B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A344FC; } @@ -1838,7 +1702,6 @@ L_08A344C8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A344FC; } @@ -1852,7 +1715,6 @@ L_08A344E4: L_08A344EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A344FC; } @@ -1863,7 +1725,6 @@ L_08A344F8: goto L_08A344FC; L_08A344FC: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08A34538; } @@ -1896,7 +1757,6 @@ L_08A34524: } L_08A34538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1906,7 +1766,6 @@ L_08A34540: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1919,7 +1778,6 @@ L_08A34550: AOT_REGCACHE_SYNC_OUT(); return; L_08A34558: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1932,7 +1790,6 @@ L_08A34560: AOT_REGCACHE_SYNC_OUT(); return; L_08A34568: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1943,7 +1800,6 @@ L_08A34570: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1953,7 +1809,6 @@ L_08A34584: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1962,7 +1817,6 @@ L_08A34584: L_08A34594: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1971,7 +1825,6 @@ L_08A34594: L_08A345A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1716))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -1982,7 +1835,6 @@ L_08A345AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -2026,9 +1878,7 @@ L_08A345C0: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3466C; } @@ -2050,7 +1900,6 @@ L_08A345F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A34620: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A3466C; } @@ -2119,7 +1968,17 @@ L_08A34680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A346B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2133,7 +1992,6 @@ L_08A346B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A346D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34770; } @@ -2141,7 +1999,6 @@ L_08A346D8: } L_08A346E0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A34770; } @@ -2179,7 +2036,6 @@ L_08A34718: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A34770; } @@ -2217,7 +2073,6 @@ L_08A34768: } L_08A34770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A349D4; } @@ -2225,7 +2080,6 @@ L_08A34770: } L_08A34778: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A347E4; } @@ -2236,7 +2090,6 @@ L_08A34780: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A347DC; } @@ -2272,7 +2125,6 @@ L_08A347C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A347D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A348E4; } @@ -2280,7 +2132,6 @@ L_08A347D4: } L_08A347DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A349D4; } @@ -2315,7 +2166,6 @@ L_08A34808: AOT_REGCACHE_SYNC_OUT(); return; L_08A34814: aot_gpr_31 = (0x08A3481Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3481Cu) goto L_08A3481C; AOT_REGCACHE_SYNC_OUT(); return; L_08A3481C: @@ -2339,7 +2189,6 @@ L_08A34838: AOT_REGCACHE_SYNC_OUT(); return; L_08A34844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A348E4; } @@ -2364,7 +2213,6 @@ L_08A34858: } L_08A34860: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A348E4; } @@ -2373,7 +2221,6 @@ L_08A34860: L_08A34868: aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34888; } @@ -2387,7 +2234,6 @@ L_08A34874: AOT_REGCACHE_SYNC_OUT(); return; L_08A34880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34894; } @@ -2406,7 +2252,6 @@ L_08A34894: AOT_REGCACHE_SYNC_OUT(); return; L_08A3489C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A348A8; } @@ -2423,7 +2268,6 @@ L_08A348A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A348B4: aot_gpr_31 = (0x08A348BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A348BCu) goto L_08A348BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A348BC: @@ -2537,7 +2381,6 @@ L_08A349A8: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A349D4; } @@ -2563,7 +2406,17 @@ L_08A349D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A349F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2332))); @@ -2575,7 +2428,6 @@ L_08A349F0: { const std::uint32_t aot_run_words[5]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(256), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A34A64; } @@ -2583,12 +2435,10 @@ L_08A349F0: } L_08A34A28: aot_gpr_31 = (0x08A34A30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34A30u) goto L_08A34A30; AOT_REGCACHE_SYNC_OUT(); return; L_08A34A30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34EBC; } @@ -2596,13 +2446,11 @@ L_08A34A30: } L_08A34A38: aot_gpr_31 = (0x08A34A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34A40u) goto L_08A34A40; AOT_REGCACHE_SYNC_OUT(); return; L_08A34A40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34A64; } @@ -2610,14 +2458,12 @@ L_08A34A40: } L_08A34A4C: aot_gpr_31 = (0x08A34A54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34A54u) goto L_08A34A54; AOT_REGCACHE_SYNC_OUT(); return; L_08A34A54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A34EBC; } @@ -2638,7 +2484,6 @@ L_08A34A74: AOT_REGCACHE_SYNC_OUT(); return; L_08A34A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34EC4; } @@ -2656,7 +2501,6 @@ L_08A34A84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A34EC4; } @@ -2664,7 +2508,6 @@ L_08A34A84: } L_08A34AB4: aot_gpr_31 = (0x08A34ABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34ABCu) goto L_08A34ABC; AOT_REGCACHE_SYNC_OUT(); return; L_08A34ABC: @@ -2713,7 +2556,6 @@ L_08A34ABC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A34B28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34B28u) goto L_08A34B28; AOT_REGCACHE_SYNC_OUT(); return; L_08A34B28: @@ -2743,9 +2585,7 @@ L_08A34B28: aot_gpr_4 = (17505u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34EB4; } @@ -2759,9 +2599,7 @@ L_08A34B9C: ctx.fpr[20] = std::bit_cast(0u); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34EB4; } @@ -2775,7 +2613,6 @@ L_08A34BC4: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -2813,9 +2650,7 @@ L_08A34C28: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34C54; } @@ -2856,9 +2691,7 @@ L_08A34C88: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34EB4; } @@ -2895,7 +2728,6 @@ L_08A34CF4: ctx.gpr[18] = (aot_gpr_2 | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A34EB4; } @@ -2908,7 +2740,6 @@ L_08A34D04: AOT_REGCACHE_SYNC_OUT(); return; L_08A34D0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A34EB4; } @@ -2958,9 +2789,7 @@ L_08A34D20: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34EB4; } @@ -3026,9 +2855,7 @@ L_08A34D88: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34E38; } @@ -3041,7 +2868,6 @@ L_08A34DC8: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3051,9 +2877,7 @@ L_08A34DC8: } L_08A34DEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34E04; } @@ -3069,7 +2893,6 @@ L_08A34DFC: } L_08A34E04: aot_gpr_31 = (0x08A34E0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34E0Cu) goto L_08A34E0C; AOT_REGCACHE_SYNC_OUT(); return; L_08A34E0C: @@ -3091,7 +2914,6 @@ L_08A34E1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A34E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34EB4; } @@ -3100,9 +2922,7 @@ L_08A34E30: L_08A34E38: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34EB4; } @@ -3115,7 +2935,6 @@ L_08A34E4C: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3125,9 +2944,7 @@ L_08A34E4C: } L_08A34E70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A34E88; } @@ -3143,7 +2960,6 @@ L_08A34E80: } L_08A34E88: aot_gpr_31 = (0x08A34E90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A34E90u) goto L_08A34E90; AOT_REGCACHE_SYNC_OUT(); return; L_08A34E90: @@ -3165,7 +2981,6 @@ L_08A34EA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A34EB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34EC4; } @@ -3193,7 +3008,17 @@ L_08A34EC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A34EEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (ctx.gpr[28] + static_cast(-6828)); @@ -3205,7 +3030,6 @@ L_08A34EEC: L_08A34F00: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A34F3C; } @@ -3215,7 +3039,6 @@ L_08A34F0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A34F3C; } @@ -3232,7 +3055,6 @@ L_08A34F1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A34F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A34F40; } @@ -3248,7 +3070,17 @@ L_08A34F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A34F4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3285,7 +3117,17 @@ L_08A34F88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A34F9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -3384,7 +3226,17 @@ L_08A35064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35098: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -3397,7 +3249,6 @@ L_08A35098: L_08A350B4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A350F0; } @@ -3411,7 +3262,6 @@ L_08A350C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A350CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A350F8; } @@ -3455,7 +3305,6 @@ L_08A35104: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3481,7 +3330,6 @@ L_08A3512C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_29 + static_cast(4)); if (branch_taken) { @@ -3524,7 +3372,17 @@ L_08A35170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35184: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3537,7 +3395,6 @@ L_08A35184: L_08A351A0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A351E0; } @@ -3551,7 +3408,6 @@ L_08A351AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A351B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A351E8; } @@ -3619,7 +3475,17 @@ L_08A35210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35224: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3632,7 +3498,6 @@ L_08A35224: L_08A35240: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A35284; } @@ -3647,7 +3512,6 @@ L_08A3524C: L_08A35258: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3528C; } @@ -3713,7 +3577,17 @@ L_08A352AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A352C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -3726,7 +3600,6 @@ L_08A352C0: L_08A352DC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A35304; } @@ -3740,7 +3613,6 @@ L_08A352E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A352F4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A3530C; } @@ -3748,7 +3620,6 @@ L_08A352F4: } L_08A352FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A35350; } @@ -3837,7 +3708,17 @@ L_08A35398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A353AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3850,7 +3731,6 @@ L_08A353AC: L_08A353C8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A353F0; } @@ -3864,7 +3744,6 @@ L_08A353D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A353E0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A353F8; } @@ -3872,7 +3751,6 @@ L_08A353E0: } L_08A353E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A35418; } @@ -3915,7 +3793,17 @@ L_08A3541C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3928,7 +3816,6 @@ L_08A35430: L_08A3544C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A35474; } @@ -3942,7 +3829,6 @@ L_08A35458: AOT_REGCACHE_SYNC_OUT(); return; L_08A35464: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A3547C; } @@ -3950,7 +3836,6 @@ L_08A35464: } L_08A3546C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A35494; } @@ -3991,7 +3876,17 @@ L_08A35498: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A354AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -4005,7 +3900,6 @@ L_08A354AC: } L_08A354C0: aot_gpr_31 = (0x08A354C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A354C8u) goto L_08A354C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A354C8: @@ -4029,7 +3923,6 @@ L_08A354DC: } L_08A354E8: aot_gpr_31 = (0x08A354F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A354F0u) goto L_08A354F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A354F0: @@ -4048,7 +3941,17 @@ L_08A35500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3550C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(1), static_cast(aot_gpr_6)); @@ -4059,14 +3962,34 @@ L_08A3550C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35524: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(9892), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3552C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9892))); @@ -4082,7 +4005,6 @@ L_08A3552C: } L_08A35548: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A356C4; } @@ -4090,7 +4012,6 @@ L_08A35548: } L_08A35550: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08A35578; } @@ -4098,7 +4019,6 @@ L_08A35550: } L_08A35558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A356C4; } @@ -4114,7 +4034,6 @@ L_08A35560: } L_08A35568: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A356C4; } @@ -4122,7 +4041,6 @@ L_08A35568: } L_08A35570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A356C4; } @@ -4150,7 +4068,6 @@ L_08A35594: L_08A3559C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A355B8; } @@ -4158,7 +4075,6 @@ L_08A3559C: } L_08A355A8: aot_gpr_31 = (0x08A355B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A355B0u) goto L_08A355B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A355B0: @@ -4175,7 +4091,6 @@ L_08A355B8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8732), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A355EC; } @@ -4190,11 +4105,9 @@ L_08A355DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A355EC: aot_gpr_31 = (0x08A355F4u); - // nop goto L_08A364E8; L_08A355F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A35630; } @@ -4205,7 +4118,6 @@ L_08A355FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9920))); ctx.gpr[16] = (ctx.lo); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A35630; } @@ -4214,7 +4126,6 @@ L_08A355FC: L_08A35610: aot_gpr_4 = (static_cast(aot_gpr_4) < 12 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3562C; } @@ -4233,7 +4144,6 @@ L_08A3562C: L_08A35630: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A356B4; } @@ -4242,7 +4152,6 @@ L_08A35630: L_08A3563C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9912))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08A356B4; } @@ -4255,7 +4164,6 @@ L_08A35648: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-11832), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9942))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A35678; } @@ -4264,7 +4172,6 @@ L_08A35648: L_08A35664: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8725))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A35678; } @@ -4272,7 +4179,6 @@ L_08A35664: } L_08A35670: aot_gpr_31 = (0x08A35678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 228u, 0x08991088u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35678u) goto L_08A35678; AOT_REGCACHE_SYNC_OUT(); return; L_08A35678: @@ -4289,12 +4195,10 @@ L_08A35684: AOT_REGCACHE_SYNC_OUT(); return; L_08A35690: aot_gpr_31 = (0x08A35698u); - // nop goto L_08A364E8; L_08A35698: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A356B4; } @@ -4309,7 +4213,6 @@ L_08A356A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A356B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A356C4; } @@ -4317,7 +4220,6 @@ L_08A356B4: } L_08A356BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A356C4; } @@ -4331,15 +4233,23 @@ L_08A356C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A356D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (0u | 60000u); { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[7] = (0u | 1000u); ctx.gpr[8] = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[18]); @@ -4352,8 +4262,6 @@ L_08A356D4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[19]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), aot_gpr_31); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = ctx.gpr[8]; const std::uint32_t divisor = ctx.gpr[7]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[7] = (ctx.lo); aot_gpr_31 = (0x08A35744u); @@ -4375,7 +4283,6 @@ L_08A35744: } L_08A35760: aot_gpr_31 = (0x08A35768u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35768u) goto L_08A35768; AOT_REGCACHE_SYNC_OUT(); return; L_08A35768: @@ -4383,7 +4290,6 @@ L_08A35768: goto L_08A3576C; L_08A3576C: aot_gpr_31 = (0x08A35774u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 689u, 0x089BB298u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35774u) goto L_08A35774; AOT_REGCACHE_SYNC_OUT(); return; L_08A35774: @@ -4401,7 +4307,6 @@ L_08A35774: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(3), static_cast(ctx.gpr[7])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A357BC; } @@ -4409,7 +4314,6 @@ L_08A35774: } L_08A357B0: aot_gpr_31 = (0x08A357B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A357B8u) goto L_08A357B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A357B8: @@ -4417,7 +4321,6 @@ L_08A357B8: goto L_08A357BC; L_08A357BC: aot_gpr_31 = (0x08A357C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 554u, 0x089BAA68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A357C4u) goto L_08A357C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A357C4: @@ -4435,7 +4338,6 @@ L_08A357D0: L_08A357DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A35908; } @@ -4452,7 +4354,6 @@ L_08A357E8: L_08A357FC: aot_gpr_4 = (0u | 9u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3581C; } @@ -4466,7 +4367,6 @@ L_08A35808: L_08A35810: aot_gpr_4 = (0u | 7u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A35834; } @@ -4480,7 +4380,6 @@ L_08A3581C: AOT_REGCACHE_SYNC_OUT(); return; L_08A35828: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08A35834; } @@ -4500,7 +4399,6 @@ L_08A35834: } L_08A35840: aot_gpr_31 = (0x08A35848u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35848u) goto L_08A35848; AOT_REGCACHE_SYNC_OUT(); return; L_08A35848: @@ -4523,7 +4421,6 @@ L_08A3584C: AOT_REGCACHE_SYNC_OUT(); return; L_08A3587C: aot_gpr_31 = (0x08A35884u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35884u) goto L_08A35884; AOT_REGCACHE_SYNC_OUT(); return; L_08A35884: @@ -4574,7 +4471,6 @@ L_08A358CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A35900: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A35A2C; } @@ -4652,7 +4548,6 @@ L_08A359A0: L_08A359AC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A359C4; } @@ -4694,7 +4589,6 @@ L_08A359EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A359F4: aot_gpr_31 = (0x08A359FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 75u, 0x08B0C580u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A359FCu) goto L_08A359FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A359FC: @@ -4736,14 +4630,34 @@ L_08A35A2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35A58: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9892))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35A60: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); @@ -4791,7 +4705,6 @@ L_08A35AC4: } L_08A35AD0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A35AE4; } @@ -4834,7 +4747,6 @@ L_08A35B18: L_08A35B24: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A35B3C; } @@ -4859,7 +4771,6 @@ L_08A35B40: AOT_REGCACHE_SYNC_OUT(); return; L_08A35B4C: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A35B60; } @@ -4897,7 +4808,6 @@ L_08A35B64: } L_08A35B94: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A35BB0; } @@ -4928,7 +4838,6 @@ L_08A35BB0: } L_08A35BBC: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A35BD8; } @@ -4959,7 +4868,6 @@ L_08A35BE0: goto L_08A35BE8; L_08A35BE8: aot_gpr_31 = (0x08A35BF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35BF0u) goto L_08A35BF0; AOT_REGCACHE_SYNC_OUT(); return; L_08A35BF0: @@ -5021,12 +4929,10 @@ L_08A35C68: goto L_08A35C78; L_08A35C78: aot_gpr_31 = (0x08A35C80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 458u, 0x088DF74Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35C80u) goto L_08A35C80; AOT_REGCACHE_SYNC_OUT(); return; L_08A35C80: aot_gpr_31 = (0x08A35C88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35C88u) goto L_08A35C88; AOT_REGCACHE_SYNC_OUT(); return; L_08A35C88: @@ -5039,7 +4945,6 @@ L_08A35C88: AOT_REGCACHE_SYNC_OUT(); return; L_08A35C9C: aot_gpr_31 = (0x08A35CA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35CA4u) goto L_08A35CA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A35CA4: @@ -5052,7 +4957,6 @@ L_08A35CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A35CB8: aot_gpr_31 = (0x08A35CC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35CC0u) goto L_08A35CC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A35CC0: @@ -5063,7 +4967,6 @@ L_08A35CC0: AOT_REGCACHE_SYNC_OUT(); return; L_08A35CCC: aot_gpr_31 = (0x08A35CD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35CD4u) goto L_08A35CD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A35CD4: @@ -5074,12 +4977,10 @@ L_08A35CD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A35CE0: aot_gpr_31 = (0x08A35CE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35CE8u) goto L_08A35CE8; AOT_REGCACHE_SYNC_OUT(); return; L_08A35CE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A35DB0; } @@ -5087,7 +4988,6 @@ L_08A35CE8: } L_08A35CF0: aot_gpr_31 = (0x08A35CF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35CF8u) goto L_08A35CF8; AOT_REGCACHE_SYNC_OUT(); return; L_08A35CF8: @@ -5103,7 +5003,6 @@ L_08A35D00: AOT_REGCACHE_SYNC_OUT(); return; L_08A35D0C: aot_gpr_31 = (0x08A35D14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35D14u) goto L_08A35D14; AOT_REGCACHE_SYNC_OUT(); return; L_08A35D14: @@ -5161,7 +5060,6 @@ L_08A35D8C: AOT_REGCACHE_SYNC_OUT(); return; L_08A35D9C: aot_gpr_31 = (0x08A35DA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35DA4u) goto L_08A35DA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A35DA4: @@ -5173,7 +5071,6 @@ L_08A35DA4: L_08A35DB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A35DCC; } @@ -5205,7 +5102,17 @@ L_08A35DCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A35DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[18]); @@ -5239,7 +5146,6 @@ L_08A35E50: L_08A35E5C: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A35E74; } @@ -5302,7 +5208,6 @@ L_08A35E9C: } L_08A35ECC: aot_gpr_31 = (0x08A35ED4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B1FD70, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0198_entry, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35ED4u) goto L_08A35ED4; AOT_REGCACHE_SYNC_OUT(); return; L_08A35ED4: @@ -5348,7 +5253,6 @@ L_08A35F14: } L_08A35F3C: aot_gpr_31 = (0x08A35F44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B1FD70, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0198_entry, 198u, 733u, 0x08B1FD70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35F44u) goto L_08A35F44; AOT_REGCACHE_SYNC_OUT(); return; L_08A35F44: @@ -5370,12 +5274,10 @@ L_08A35F58: goto L_08A35F68; L_08A35F68: aot_gpr_31 = (0x08A35F70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 458u, 0x088DF74Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35F70u) goto L_08A35F70; AOT_REGCACHE_SYNC_OUT(); return; L_08A35F70: aot_gpr_31 = (0x08A35F78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35F78u) goto L_08A35F78; AOT_REGCACHE_SYNC_OUT(); return; L_08A35F78: @@ -5395,7 +5297,6 @@ L_08A35F88: AOT_REGCACHE_SYNC_OUT(); return; L_08A35F9C: aot_gpr_31 = (0x08A35FA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35FA4u) goto L_08A35FA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A35FA4: @@ -5408,7 +5309,6 @@ L_08A35FA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A35FB8: aot_gpr_31 = (0x08A35FC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35FC0u) goto L_08A35FC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A35FC0: @@ -5419,7 +5319,6 @@ L_08A35FC0: AOT_REGCACHE_SYNC_OUT(); return; L_08A35FCC: aot_gpr_31 = (0x08A35FD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35FD4u) goto L_08A35FD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A35FD4: @@ -5430,12 +5329,10 @@ L_08A35FD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A35FE0: aot_gpr_31 = (0x08A35FE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35FE8u) goto L_08A35FE8; AOT_REGCACHE_SYNC_OUT(); return; L_08A35FE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A360B0; } @@ -5443,7 +5340,6 @@ L_08A35FE8: } L_08A35FF0: aot_gpr_31 = (0x08A35FF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A35FF8u) goto L_08A35FF8; AOT_REGCACHE_SYNC_OUT(); return; L_08A35FF8: @@ -5459,7 +5355,6 @@ L_08A36000: AOT_REGCACHE_SYNC_OUT(); return; L_08A3600C: aot_gpr_31 = (0x08A36014u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36014u) goto L_08A36014; AOT_REGCACHE_SYNC_OUT(); return; L_08A36014: @@ -5517,7 +5412,6 @@ L_08A3608C: AOT_REGCACHE_SYNC_OUT(); return; L_08A3609C: aot_gpr_31 = (0x08A360A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A360A4u) goto L_08A360A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A360A4: @@ -5529,7 +5423,6 @@ L_08A360A4: L_08A360B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A360CC; } @@ -5557,7 +5450,17 @@ L_08A360CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A360EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5596,7 +5499,6 @@ L_08A36128: L_08A36130: aot_gpr_4 = (0u | 25u); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A361A4; } @@ -5615,7 +5517,6 @@ L_08A36140: } L_08A36148: { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A361A4; } @@ -5631,7 +5532,6 @@ L_08A36150: } L_08A36158: { const bool branch_taken = ctx.gpr[7] == aot_gpr_6; - // nop if (branch_taken) { goto L_08A361A4; } @@ -5651,7 +5551,6 @@ L_08A36164: L_08A3616C: aot_gpr_4 = (0u | 32u); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A361A4; } @@ -5671,7 +5570,6 @@ L_08A3617C: L_08A36184: aot_gpr_4 = (0u | 17u); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A361A4; } @@ -5707,7 +5605,6 @@ L_08A361A4: L_08A361B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A361E4; } @@ -5716,7 +5613,6 @@ L_08A361B4: L_08A361C0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A361E4; } @@ -5725,7 +5621,6 @@ L_08A361C0: L_08A361CC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9904))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A361E4; } @@ -5741,7 +5636,6 @@ L_08A361D8: L_08A361E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9941))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A361F8; } @@ -5803,7 +5697,6 @@ L_08A36260: goto L_08A36274; L_08A36274: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A36288; } @@ -5830,7 +5723,17 @@ L_08A36288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A362AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9304))); aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -5839,7 +5742,17 @@ L_08A362AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A362BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9892))); @@ -5866,7 +5779,6 @@ L_08A362D8: L_08A362E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A36318; } @@ -5875,7 +5787,6 @@ L_08A362E8: L_08A362F4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A36318; } @@ -5884,7 +5795,6 @@ L_08A362F4: L_08A36300: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9904))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A36318; } @@ -5926,7 +5836,6 @@ L_08A3635C: ctx.gpr[16] = (aot_gpr_2 + static_cast(-1)); aot_gpr_4 = (ctx.gpr[16] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A363B8; } @@ -5958,7 +5867,6 @@ L_08A3637C: } L_08A36384: { const bool branch_taken = ctx.gpr[16] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A363AC; } @@ -5997,7 +5905,17 @@ L_08A363B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A363C8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9892))); aot_gpr_2 = (aot_gpr_4 ^ 1u); @@ -6006,14 +5924,23 @@ L_08A363C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A363D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9892))); aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3640C; } @@ -6035,7 +5962,17 @@ L_08A3640C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36418: aot_gpr_4 = (2279u << 16u); aot_gpr_5 = (0u | 0u); @@ -6050,7 +5987,6 @@ L_08A36424: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 310 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A36424; } @@ -6058,11 +5994,20 @@ L_08A36424: } L_08A36448: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36450: aot_gpr_5 = (2279u << 16u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_4); @@ -6073,7 +6018,17 @@ L_08A36450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36468: ctx.gpr[7] = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; @@ -6085,7 +6040,6 @@ L_08A36468: } L_08A36474: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A364D4; } @@ -6148,11 +6102,20 @@ L_08A364DC: goto L_08A364E0; L_08A364E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A364E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6162,7 +6125,6 @@ L_08A364E8: { const std::uint32_t aot_run_words[3]{ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3651C; } @@ -6188,7 +6150,6 @@ L_08A3651C: } L_08A36528: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3653C; } @@ -6208,7 +6169,6 @@ L_08A3653C: goto L_08A36540; L_08A36540: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A36588; } @@ -6217,7 +6177,6 @@ L_08A36540: L_08A36548: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9924))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A36588; } @@ -6247,12 +6206,10 @@ L_08A36570: goto L_08A36580; L_08A36580: aot_gpr_31 = (0x08A36588u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 460u, 0x088DF770u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36588u) goto L_08A36588; AOT_REGCACHE_SYNC_OUT(); return; L_08A36588: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A36630; } @@ -6292,7 +6249,6 @@ L_08A365C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A365D4: aot_gpr_31 = (0x08A365DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A365DCu) goto L_08A365DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A365DC: @@ -6333,7 +6289,6 @@ L_08A3661C: AOT_REGCACHE_SYNC_OUT(); return; L_08A36630: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A36678; } @@ -6364,7 +6319,6 @@ L_08A36650: AOT_REGCACHE_SYNC_OUT(); return; L_08A36664: aot_gpr_31 = (0x08A3666Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3666Cu) goto L_08A3666C; AOT_REGCACHE_SYNC_OUT(); return; L_08A3666C: @@ -6375,12 +6329,10 @@ L_08A3666C: AOT_REGCACHE_SYNC_OUT(); return; L_08A36678: aot_gpr_31 = (0x08A36680u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36680u) goto L_08A36680; AOT_REGCACHE_SYNC_OUT(); return; L_08A36680: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A36774; } @@ -6388,7 +6340,6 @@ L_08A36680: } L_08A36688: aot_gpr_31 = (0x08A36690u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36690u) goto L_08A36690; AOT_REGCACHE_SYNC_OUT(); return; L_08A36690: @@ -6415,13 +6366,11 @@ L_08A366B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A366C4: aot_gpr_31 = (0x08A366CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A366CCu) goto L_08A366CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A366CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1540))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A36704; } @@ -6429,7 +6378,6 @@ L_08A366CC: } L_08A366D8: aot_gpr_31 = (0x08A366E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A366E0u) goto L_08A366E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A366E0: @@ -6450,7 +6398,6 @@ L_08A366F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A366FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A36728; } @@ -6479,7 +6426,6 @@ L_08A3671C: AOT_REGCACHE_SYNC_OUT(); return; L_08A36728: aot_gpr_31 = (0x08A36730u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36730u) goto L_08A36730; AOT_REGCACHE_SYNC_OUT(); return; L_08A36730: @@ -6501,7 +6447,6 @@ L_08A36738: AOT_REGCACHE_SYNC_OUT(); return; L_08A3675C: aot_gpr_31 = (0x08A36764u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36764u) goto L_08A36764; AOT_REGCACHE_SYNC_OUT(); return; L_08A36764: @@ -6511,7 +6456,6 @@ L_08A36764: AOT_REGCACHE_SYNC_OUT(); return; L_08A3676C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A367D4; } @@ -6525,12 +6469,10 @@ L_08A36774: AOT_REGCACHE_SYNC_OUT(); return; L_08A36780: aot_gpr_31 = (0x08A36788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 606u, 0x08A17A04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36788u) goto L_08A36788; AOT_REGCACHE_SYNC_OUT(); return; L_08A36788: aot_gpr_31 = (0x08A36790u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36790u) goto L_08A36790; AOT_REGCACHE_SYNC_OUT(); return; L_08A36790: @@ -6540,7 +6482,6 @@ L_08A36790: AOT_REGCACHE_SYNC_OUT(); return; L_08A36798: aot_gpr_31 = (0x08A367A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A367A0u) goto L_08A367A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A367A0: @@ -6555,7 +6496,6 @@ L_08A367B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A367D4; } @@ -6563,7 +6503,6 @@ L_08A367B0: } L_08A367C4: aot_gpr_31 = (0x08A367CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A367CCu) goto L_08A367CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A367CC: @@ -6585,7 +6524,17 @@ L_08A367D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A367F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(9892))); @@ -6602,7 +6551,6 @@ L_08A367F0: } L_08A36824: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A36C98; } @@ -6610,7 +6558,6 @@ L_08A36824: } L_08A3682C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3684C; } @@ -6626,7 +6573,6 @@ L_08A36834: } L_08A3683C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A36C98; } @@ -6634,7 +6580,6 @@ L_08A3683C: } L_08A36844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A36C98; } @@ -6659,7 +6604,6 @@ L_08A36854: L_08A36868: aot_gpr_4 = (ctx.gpr[16] < static_cast(3000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A36944; } @@ -6668,7 +6612,6 @@ L_08A36868: L_08A36874: aot_gpr_4 = (ctx.gpr[16] < static_cast(11000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36944; } @@ -6700,7 +6643,6 @@ L_08A36898: L_08A368BC: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9936))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A368D8; } @@ -6715,7 +6657,6 @@ L_08A368C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A368D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A36944; } @@ -6724,7 +6665,6 @@ L_08A368D8: L_08A368E0: aot_gpr_4 = (ctx.gpr[16] < static_cast(8000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36944; } @@ -6756,7 +6696,6 @@ L_08A36904: L_08A36928: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9936))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A36944; } @@ -6772,7 +6711,6 @@ L_08A36934: L_08A36944: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8728))); { const bool branch_taken = static_cast(ctx.gpr[16]) < 0; - // nop if (branch_taken) { goto L_08A369A0; } @@ -6785,7 +6723,6 @@ L_08A36950: ctx.gpr[16] = (ctx.gpr[16] - aot_gpr_4); aot_gpr_4 = (ctx.gpr[16] < static_cast(4001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3697C; } @@ -6795,7 +6732,6 @@ L_08A3696C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A369A0; } @@ -6817,7 +6753,6 @@ L_08A36994: L_08A369A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A36B90; } @@ -6827,7 +6762,6 @@ L_08A369AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9912))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A36B90; } @@ -6865,7 +6799,6 @@ L_08A369F4: L_08A36A04: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A36A1C; } @@ -6873,7 +6806,6 @@ L_08A36A04: } L_08A36A10: aot_gpr_31 = (0x08A36A18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36A18u) goto L_08A36A18; AOT_REGCACHE_SYNC_OUT(); return; L_08A36A18: @@ -6893,7 +6825,6 @@ L_08A36A24: L_08A36A30: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A36A48; } @@ -6901,7 +6832,6 @@ L_08A36A30: } L_08A36A3C: aot_gpr_31 = (0x08A36A44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36A44u) goto L_08A36A44; AOT_REGCACHE_SYNC_OUT(); return; L_08A36A44: @@ -7025,7 +6955,6 @@ L_08A36B48: L_08A36B54: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A36B6C; } @@ -7058,7 +6987,6 @@ L_08A36B80: AOT_REGCACHE_SYNC_OUT(); return; L_08A36B90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A36C98; } @@ -7067,7 +6995,6 @@ L_08A36B90: L_08A36B98: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36C90; } @@ -7079,7 +7006,6 @@ L_08A36BA4: ctx.gpr[16] = (ctx.gpr[16] - aot_gpr_4); aot_gpr_4 = (ctx.gpr[16] < static_cast(5000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36C90; } @@ -7103,7 +7029,6 @@ L_08A36BC8: L_08A36BD4: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A36BEC; } @@ -7187,7 +7112,6 @@ L_08A36C60: AOT_REGCACHE_SYNC_OUT(); return; L_08A36C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A36C98; } @@ -7210,7 +7134,17 @@ L_08A36C98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36CD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7219,7 +7153,6 @@ L_08A36CD0: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A36D24; } @@ -7290,7 +7223,6 @@ L_08A36D4C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36D84; } @@ -7313,7 +7245,17 @@ L_08A36D88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36D90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -7338,7 +7280,6 @@ L_08A36DC8: L_08A36DD4: aot_gpr_4 = (ctx.gpr[18] & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36E18; } @@ -7353,7 +7294,6 @@ L_08A36DE0: goto L_08A36DEC; L_08A36DEC: aot_gpr_31 = (0x08A36DF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A36DF4u) goto L_08A36DF4; AOT_REGCACHE_SYNC_OUT(); return; L_08A36DF4: @@ -7366,7 +7306,6 @@ L_08A36DF8: AOT_REGCACHE_SYNC_OUT(); return; L_08A36E00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A36E18; } @@ -7427,7 +7366,17 @@ L_08A36E58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36E78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_6); @@ -7456,7 +7405,17 @@ L_08A36EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36ECC: aot_gpr_5 = (2237u << 16u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); @@ -7487,11 +7446,20 @@ L_08A36F00: goto L_08A36F1C; L_08A36F1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36F24: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4201))); @@ -7502,7 +7470,6 @@ L_08A36F24: goto L_08A36F34; L_08A36F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A36F58; } @@ -7519,11 +7486,20 @@ L_08A36F3C: goto L_08A36F58; L_08A36F58: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A36F60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); @@ -7537,7 +7513,6 @@ L_08A36F60: { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A36FBC; } @@ -7553,7 +7528,6 @@ L_08A36F98: L_08A36FA8: aot_gpr_6 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A36FC4; } @@ -7561,7 +7535,6 @@ L_08A36FA8: } L_08A36FB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3702C; } @@ -7569,7 +7542,6 @@ L_08A36FB4: } L_08A36FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3702C; } @@ -7578,7 +7550,6 @@ L_08A36FBC: L_08A36FC4: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(104))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A36FE8; } @@ -7587,7 +7558,6 @@ L_08A36FC4: L_08A36FD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A36FE8; } @@ -7610,7 +7580,6 @@ L_08A36FEC: AOT_REGCACHE_SYNC_OUT(); return; L_08A36FF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A3701C; } @@ -7633,7 +7602,6 @@ L_08A3701C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A36FEC; } @@ -7651,7 +7619,17 @@ L_08A3702C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37040: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7665,7 +7643,6 @@ L_08A37040: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A370C0; } @@ -7680,7 +7657,6 @@ L_08A37074: L_08A37080: aot_gpr_5 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A370B8; } @@ -7689,7 +7665,6 @@ L_08A37080: L_08A3708C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(104))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A370B0; } @@ -7698,7 +7673,6 @@ L_08A3708C: L_08A37098: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(11))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A370C8; } @@ -7715,7 +7689,6 @@ L_08A370A4: } L_08A370B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A370D0; } @@ -7723,7 +7696,6 @@ L_08A370B0: } L_08A370B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A370D0; } @@ -7731,7 +7703,6 @@ L_08A370B8: } L_08A370C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A370D0; } @@ -7749,7 +7720,17 @@ L_08A370D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A370E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7763,7 +7744,6 @@ L_08A370E0: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A37148; } @@ -7778,7 +7758,6 @@ L_08A37114: L_08A37120: aot_gpr_5 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A37140; } @@ -7787,7 +7766,6 @@ L_08A37120: L_08A3712C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(104))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A37150; } @@ -7795,7 +7773,6 @@ L_08A3712C: } L_08A37138: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3715C; } @@ -7803,7 +7780,6 @@ L_08A37138: } L_08A37140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3715C; } @@ -7811,7 +7787,6 @@ L_08A37140: } L_08A37148: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3715C; } @@ -7830,7 +7805,17 @@ L_08A3715C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3716C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7844,7 +7829,6 @@ L_08A3716C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A37230; } @@ -7863,7 +7847,6 @@ L_08A371A0: L_08A371BC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A37228; } @@ -7883,7 +7866,6 @@ L_08A371C8: L_08A371E0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A371FC; } @@ -7896,7 +7878,6 @@ L_08A371EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A371F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37228; } @@ -7916,7 +7897,6 @@ L_08A371FC: L_08A37214: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A37228; } @@ -7929,7 +7909,6 @@ L_08A37220: AOT_REGCACHE_SYNC_OUT(); return; L_08A37228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37308; } @@ -7948,7 +7927,6 @@ L_08A37230: L_08A3724C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A37308; } @@ -7957,7 +7935,6 @@ L_08A3724C: L_08A37258: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(104))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A37308; } @@ -7966,7 +7943,6 @@ L_08A37258: L_08A37264: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A372C4; } @@ -8003,7 +7979,6 @@ L_08A37298: L_08A372A8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A372BC; } @@ -8011,12 +7986,10 @@ L_08A372A8: } L_08A372B4: aot_gpr_31 = (0x08A372BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0124_entry, 124u, 704u, 0x089F79E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A372BCu) goto L_08A372BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A372BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A372F8; } @@ -8038,7 +8011,6 @@ L_08A372D4: L_08A372E4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A372F8; } @@ -8046,7 +8018,6 @@ L_08A372E4: } L_08A372F0: aot_gpr_31 = (0x08A372F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0168_entry, 168u, 178u, 0x08AA5240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A372F8u) goto L_08A372F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A372F8: @@ -8063,7 +8034,17 @@ L_08A37308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37318: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); @@ -8077,7 +8058,6 @@ L_08A37318: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A37370; } @@ -8093,7 +8073,6 @@ L_08A3734C: L_08A3735C: aot_gpr_6 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A37378; } @@ -8101,7 +8080,6 @@ L_08A3735C: } L_08A37368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A373C0; } @@ -8109,7 +8087,6 @@ L_08A37368: } L_08A37370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A373C0; } @@ -8118,7 +8095,6 @@ L_08A37370: L_08A37378: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(104))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A373C0; } @@ -8127,7 +8103,6 @@ L_08A37378: L_08A37384: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A373C0; } @@ -8141,7 +8116,6 @@ L_08A37390: AOT_REGCACHE_SYNC_OUT(); return; L_08A3739C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A373C0; } @@ -8167,7 +8141,17 @@ L_08A373C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A373D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8181,7 +8165,6 @@ L_08A373D0: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A37438; } @@ -8196,7 +8179,6 @@ L_08A37404: L_08A37410: aot_gpr_5 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A37430; } @@ -8205,7 +8187,6 @@ L_08A37410: L_08A3741C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(104))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A37440; } @@ -8213,7 +8194,6 @@ L_08A3741C: } L_08A37428: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37460; } @@ -8221,7 +8201,6 @@ L_08A37428: } L_08A37430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37460; } @@ -8229,7 +8208,6 @@ L_08A37430: } L_08A37438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37460; } @@ -8253,7 +8231,17 @@ L_08A37460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37470: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8301,7 +8289,17 @@ L_08A374B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A374EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); @@ -8320,7 +8318,17 @@ L_08A3750C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); @@ -8338,7 +8346,17 @@ L_08A37534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37540: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_6); @@ -8360,7 +8378,6 @@ L_08A37540: L_08A37584: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A375A0; } @@ -8374,7 +8391,6 @@ L_08A37590: goto L_08A37598; L_08A37598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A375D0; } @@ -8382,7 +8398,6 @@ L_08A37598: } L_08A375A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A375E4; } @@ -8406,7 +8421,6 @@ L_08A375B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A375C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A375D8; } @@ -8440,7 +8454,17 @@ L_08A375E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37600: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -8496,7 +8520,6 @@ L_08A37600: L_08A376E8: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A37704; } @@ -8510,7 +8533,6 @@ L_08A376F4: goto L_08A376FC; L_08A376FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37734; } @@ -8518,7 +8540,6 @@ L_08A376FC: } L_08A37704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37778; } @@ -8542,7 +8563,6 @@ L_08A3771C: AOT_REGCACHE_SYNC_OUT(); return; L_08A3772C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A3773C; } @@ -8558,7 +8578,6 @@ L_08A37734: } L_08A3773C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A37778; } @@ -8620,7 +8639,17 @@ L_08A37778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A377A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_6); @@ -8641,7 +8670,6 @@ L_08A377A4: L_08A377E8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A37804; } @@ -8663,7 +8691,6 @@ L_08A377FC: } L_08A37804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37854; } @@ -8703,7 +8730,6 @@ L_08A37834: } L_08A3783C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37854; } @@ -8712,7 +8738,6 @@ L_08A3783C: L_08A37844: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37854; } @@ -8735,7 +8760,17 @@ L_08A37854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37870: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31, aot_gpr_6}; @@ -8807,7 +8842,6 @@ L_08A37918: } L_08A37920: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37954; } @@ -8816,7 +8850,6 @@ L_08A37920: L_08A37928: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3794C; } @@ -8834,7 +8867,6 @@ L_08A37934: goto L_08A3794C; L_08A3794C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A379F8; } @@ -8842,7 +8874,6 @@ L_08A3794C: } L_08A37954: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A379F8; } @@ -8862,7 +8893,6 @@ L_08A3795C: L_08A37974: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A379F8; } @@ -8911,7 +8941,6 @@ L_08A379B4: } L_08A379BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A379D8; } @@ -8920,7 +8949,6 @@ L_08A379BC: L_08A379C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A379E0; } @@ -8928,7 +8956,6 @@ L_08A379C4: } L_08A379D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A379F8; } @@ -8936,7 +8963,6 @@ L_08A379D0: } L_08A379D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A379F8; } @@ -8965,7 +8991,17 @@ L_08A379F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37A10: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8997,7 +9033,6 @@ L_08A37A50: L_08A37A68: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37A78; } @@ -9049,7 +9084,6 @@ L_08A37AAC: } L_08A37AB4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37AF0; } @@ -9058,7 +9092,6 @@ L_08A37AB4: L_08A37ABC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37AE8; } @@ -9079,7 +9112,6 @@ L_08A37AC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A37AE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37B9C; } @@ -9087,7 +9119,6 @@ L_08A37AE8: } L_08A37AF0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A37B9C; } @@ -9107,7 +9138,6 @@ L_08A37AF8: L_08A37B10: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A37B9C; } @@ -9156,7 +9186,6 @@ L_08A37B50: } L_08A37B58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37B74; } @@ -9165,7 +9194,6 @@ L_08A37B58: L_08A37B60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A37B7C; } @@ -9173,7 +9201,6 @@ L_08A37B60: } L_08A37B6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37B9C; } @@ -9181,7 +9208,6 @@ L_08A37B6C: } L_08A37B74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37B9C; } @@ -9214,7 +9240,17 @@ L_08A37B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37BB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -9235,7 +9271,6 @@ L_08A37BB8: L_08A37BF4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A37CC4; } @@ -9260,7 +9295,6 @@ L_08A37C14: AOT_REGCACHE_SYNC_OUT(); return; L_08A37C24: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A37CC4; } @@ -9269,7 +9303,6 @@ L_08A37C24: L_08A37C2C: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(104))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A37CC4; } @@ -9325,7 +9358,17 @@ L_08A37CC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37CE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9339,7 +9382,6 @@ L_08A37CE0: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A37D48; } @@ -9354,7 +9396,6 @@ L_08A37D14: L_08A37D20: aot_gpr_5 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A37D40; } @@ -9363,7 +9404,6 @@ L_08A37D20: L_08A37D2C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(104))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A37D50; } @@ -9371,7 +9411,6 @@ L_08A37D2C: } L_08A37D38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37D70; } @@ -9379,7 +9418,6 @@ L_08A37D38: } L_08A37D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37D70; } @@ -9387,7 +9425,6 @@ L_08A37D40: } L_08A37D48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A37D70; } @@ -9411,7 +9448,17 @@ L_08A37D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37D80: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); AOT_REGCACHE_SYNC_OUT(); @@ -9424,7 +9471,6 @@ L_08A37D90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37DBC; } @@ -9439,7 +9485,6 @@ L_08A37DB0: L_08A37DBC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A37E1C; } @@ -9476,7 +9521,17 @@ L_08A37E1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37E2C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3))); @@ -9487,7 +9542,17 @@ L_08A37E2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A37E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -9547,7 +9612,6 @@ L_08A37EC0: L_08A37ED0: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A37EF4; } @@ -9619,7 +9683,6 @@ L_08A37F4C: L_08A37F5C: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A37F80; } @@ -9691,7 +9754,6 @@ L_08A37FD8: L_08A37FE8: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0141_entry, 141u, 2u, 0x08A3800Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0141.cpp b/profiles/vcs/generated/generated_unit_0141.cpp index 7fb0563..e7edde4 100644 --- a/profiles/vcs/generated/generated_unit_0141.cpp +++ b/profiles/vcs/generated/generated_unit_0141.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0141[4095] = { - 1, 0, 2, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 7, 0, 0, 0, 8, 0, 0, 9, - 0, 0, 0, 10, 0, 11, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 16, 0, 0, 0, 17, - 0, 0, 18, 0, 0, 0, 19, 0, 20, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 25, 0, - 0, 0, 26, 0, 0, 27, 0, 0, 0, 28, 0, 29, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, 0, - 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, - 0, 42, 0, 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50, 0, 51, 0, 0, 52, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 61, 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 64, 0, 65, 0, 0, 0, 66, 0, 0, 67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, 0, 70, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 73, 0, 74, 0, 0, 0, 75, 0, - 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 79, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 82, 0, 83, 0, 0, - 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 88, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 91, 0, - 92, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 0, 99, 0, 0, - 0, 100, 0, 101, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 106, 0, 0, 0, 107, 0, 0, - 108, 0, 0, 0, 109, 0, 110, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 0, 115, 0, 0, 0, - 116, 0, 0, 117, 0, 0, 0, 118, 0, 119, 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 124, - 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 127, 0, 128, 0, 0, 0, 129, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, - 0, 0, 133, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 136, 0, 137, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 140, 0, 141, 0, 0, 142, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 145, 0, 146, 0, 0, 0, 147, 0, 0, 148, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 0, 150, 0, 0, 151, 0, 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 0, 157, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 160, 0, 0, 0, 161, 0, 0, 162, 0, 0, 0, 163, 0, 164, 0, 0, 0, 165, 0, 0, 166, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, 0, 0, 169, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 172, 0, 173, 0, 0, 0, 174, - 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 178, 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, 181, 0, 182, 0, - 0, 0, 183, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 186, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 0, 0, 190, - 0, 191, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 198, 0, - 0, 0, 199, 0, 200, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 205, 0, 0, 0, 206, 0, - 0, 207, 0, 0, 0, 208, 0, 209, 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 214, 0, 0, - 0, 215, 0, 0, 216, 0, 0, 0, 217, 0, 218, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, - 223, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 231, 0, 0, 232, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 240, 0, 0, 241, 0, 0, 0, 242, 0, 0, 243, 0, 0, 0, 244, 0, 245, 0, 0, 0, 246, 0, 0, 247, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 248, 0, 249, 0, 0, 250, 0, 0, 0, 251, 0, 0, 252, 0, 0, 0, 253, 0, 254, 0, 0, 0, 255, 0, 0, 256, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 0, 259, 0, 0, 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, 263, 0, 0, 0, 264, 0, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, 0, 268, 0, 0, 0, 269, 0, 0, 270, 0, 0, 0, 271, 0, 272, 0, 0, 0, - 273, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 277, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 280, 0, 281, - 0, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, - 289, 0, 290, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 295, 0, 0, 0, 296, 0, 0, 297, - 0, 0, 0, 298, 0, 299, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 304, 0, 0, 0, 305, - 0, 0, 306, 0, 0, 0, 307, 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 313, 0, - 0, 0, 314, 0, 0, 315, 0, 0, 0, 316, 0, 317, 0, 0, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, - 0, 322, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 325, 0, 326, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, - 0, 330, 0, 0, 331, 0, 0, 0, 332, 0, 0, 333, 0, 0, 0, 334, 0, 335, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 338, 0, 339, 0, 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 343, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 347, 0, 348, 0, 0, 349, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 353, 0, 0, 0, 354, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 358, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 361, 0, 362, 0, 0, 0, 363, 0, - 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 370, 0, 371, 0, 0, - 0, 372, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, - 380, 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 385, 0, 0, 0, 386, 0, 0, 387, 0, 0, - 0, 388, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, - 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, - 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 406, 0, 407, 0, 408, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 413, 0, 414, - 415, 0, 416, 0, 417, 0, 418, 0, 0, 0, 419, 0, 420, 0, 421, 0, 422, 423, 0, 424, 0, 425, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 435, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, - 0, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 0, 466, 0, - 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 474, - 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 479, 0, 0, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 0, - 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 0, - 490, 0, 0, 491, 0, 492, 0, 493, 0, 0, 0, 0, 494, 0, 495, 0, 496, 0, 0, 0, 0, 497, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, - 0, 500, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 503, 0, 504, 0, 505, 0, 0, 0, 0, 506, 0, 507, 0, 508, 0, 0, 0, 0, 509, 0, - 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, - 0, 0, 520, 0, 521, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 525, 0, 0, 526, 0, 0, 0, 527, 0, 0, - 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, - 0, 0, 0, 532, 0, 0, 533, 0, 534, 0, 0, 0, 535, 0, 536, 0, 537, 0, 0, 0, 538, 539, 0, 0, 540, 0, 0, 0, 541, 0, 0, 0, - 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 548, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, - 552, 0, 553, 0, 0, 0, 554, 555, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 0, - 561, 0, 0, 562, 0, 0, 563, 0, 0, 564, 0, 0, 565, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 568, 569, 0, 570, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 579, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 581, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, - 0, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 591, 0, - 592, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, - 0, 0, 601, 0, 0, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 0, 607, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 610, - 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, - 0, 0, 0, 617, 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 624, 0, 0, 625, 0, 0, 626, 627, - 628, 0, 629, 0, 0, 0, 630, 0, 0, 631, 0, 632, 0, 0, 633, 634, 635, 0, 636, 0, 0, 637, 0, 0, 638, 0, 0, 639, 0, 0, 640, 641, - 642, 0, 643, 0, 0, 0, 644, 0, 0, 645, 0, 646, 0, 0, 647, 648, 649, 0, 650, 0, 0, 651, 0, 0, 652, 0, 0, 653, 0, 0, 654, 655, - 656, 0, 657, 0, 0, 0, 658, 0, 0, 659, 0, 660, 0, 0, 661, 662, 663, 0, 664, 0, 0, 665, 0, 0, 666, 0, 0, 667, 0, 0, 668, 669, - 670, 0, 671, 0, 0, 0, 672, 0, 0, 673, 0, 674, 0, 0, 675, 676, 677, 0, 678, 0, 0, 679, 0, 0, 680, 0, 0, 681, 0, 0, 682, 683, - 684, 0, 685, 0, 0, 0, 686, 0, 0, 687, 0, 688, 0, 0, 689, 690, 691, 0, 692, 0, 0, 693, 0, 0, 694, 0, 0, 695, 0, 0, 696, 697, - 698, 0, 699, 0, 0, 0, 700, 0, 0, 701, 0, 702, 0, 0, 703, 704, 705, 0, 706, 0, 0, 707, 0, 708, 0, 0, 709, 0, 0, 710, 0, 0, - 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, - 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 722, 0, 0, 0, 0, 0, 0, 723, 724, 0, 0, - 0, 0, 725, 0, 726, 0, 0, 0, 0, 0, 0, 727, 728, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 732, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 736, 0, 0, 0, 0, 737, 738, 0, 0, 739, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, 744, 745, 0, 0, 0, 746, 0, 0, 747, - 0, 748, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 751, 0, 0, 0, 752, 0, 753, 0, 0, 0, 754, 0, - 0, 755, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 758, 0, 0, 0, 759, 0, 0, 0, 0, 760, 0, 761, 0, 0, 0, 762, 0, 763, 0, 0, 0, 0, 764, 0, 765, 0, 0, 766, 0, 767, 0, - 0, 0, 0, 0, 0, 0, 0, 768, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 771, 772, 0, 773, 0, 774, 0, 0, 775, 0, 0, 0, - 0, 0, 0, 0, 776, 0, 0, 0, 777, 0, 778, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 781, 0, 0, 0, 782, - 783, 0, 784, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 787, 0, 0, 0, 788, 0, 789, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 794, 0, 0, 0, 795, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 799, 0, 0, 0, 0, 0, 800, 801, 0, 0, 0, 0, 0, 0, 802, 0, - 0, 0, 803, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 806, 0, 0, 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, 808, 0, - 0, 0, 0, 0, 0, 0, 809, 0, 810, 0, 0, 0, 811, 0, 0, 0, 812, 0, 813, 0, 0, 814, 0, 815, 0, 0, 0, 0, 816, 0, 0, 0, - 0, 0, 0, 0, 817, 0, 0, 0, 818, 0, 819, 820, 0, 0, 821, 0, 822, 823, 0, 0, 824, 0, 825, 0, 826, 0, 0, 827, 0, 0, 0, 0, - 0, 828, 0, 829, 0, 0, 830, 0, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, 832, 0, 0, 0, 833, 0, 834, 0, 0, 0, 835, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 837, 0, 838, 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 841, - 0, 842, 0, 843, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 846, 847, 0, 0, 0, 0, 0, 0, 0, 848, 0, 849, 0, 0, 0, 850, 0, - 851, 0, 0, 852, 0, 0, 853, 0, 0, 0, 854, 0, 0, 0, 0, 855, 0, 0, 0, 856, 0, 0, 0, 857, 0, 858, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 859, 0, 860, 0, 861, 0, 862, 0, 863, 0, 864, 0, 0, 0, 865, 0, 0, 866, 0, 867, 0, 0, 0, 868, 0, - 869, 0, 870, 0, 0, 0, 0, 871, 0, 0, 0, 872, 0, 0, 0, 0, 0, 873, 0, 0, 874, 0, 0, 0, 0, 0, 875, 0, 876, 0, 0, 877, - 0, 878, 0, 0, 879, 0, 0, 0, 880, 0, 0, 0, 881, 0, 0, 0, 882, 0, 0, 0, 883, 0, 0, 0, 884, 0, 0, 0, 885, 0, 886, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0141[64] = { + 0x8940122891280245ull, 0x50048A244A009144ull, 0x0122891280245122ull, 0x48A244A009144894ull, + 0x2891280245122500ull, 0x244A009144894012ull, 0x128024512250048Aull, 0xA009144894012289ull, + 0x024512250048A244ull, 0x9144894012289128ull, 0x512250048A244A00ull, 0x4894012289128024ull, + 0x250048A244A00914ull, 0x4012289128024512ull, 0x048A244A00914489ull, 0x2289128024512250ull, + 0xA244A00914489401ull, 0x9128024512250048ull, 0x4A00914489401228ull, 0x8024512250048A24ull, + 0x0914489401228912ull, 0x4512250048A244A0ull, 0x4489401228912802ull, 0x0000040A244A0091ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x1404208281000000ull, 0xA910040056921042ull, + 0x40801000106B5455ull, 0x42AA9241000A0048ull, 0x0000000042021220ull, 0x0244480008888100ull, + 0x4800080848444000ull, 0x1545409088880000ull, 0x0510400000040002ull, 0x42A1520A20A150A9ull, + 0x0000800021041001ull, 0x2250409450008100ull, 0x1131514821020040ull, 0x2022480028101001ull, + 0x05825249050442C5ull, 0x4442020040209000ull, 0x4008009800000400ull, 0x2008208148088210ull, + 0x820A554402040084ull, 0x0200024822012104ull, 0xC925CA45C9508000ull, 0xC925CA45C925CA45ull, + 0xC925CA45C925CA45ull, 0x2000400124A5CA45ull, 0x0000040020810410ull, 0x3028008000000000ull, + 0x000A400020003814ull, 0x91A80500130A0002ull, 0x000100124512000Aull, 0x12B4028052851422ull, + 0x0145008588408510ull, 0x0014500802000010ull, 0x4022404440C11010ull, 0x09534D1010A51140ull, + 0x022840001144104Aull, 0x4501888A80010000ull, 0x4522AA8002888449ull, 0x5111111294120885ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0141[64] = { + 1u, 18u, 34u, 50u, 68u, 84u, 100u, 116u, 133u, 149u, 167u, 183u, 199u, 215u, 231u, 248u, + 265u, 282u, 298u, 314u, 330u, 347u, 364u, 380u, 391u, 391u, 391u, 399u, 415u, 431u, 446u, 452u, + 462u, 471u, 484u, 490u, 510u, 516u, 528u, 542u, 552u, 571u, 580u, 586u, 597u, 611u, 621u, 642u, + 670u, 698u, 714u, 720u, 725u, 734u, 748u, 758u, 776u, 790u, 797u, 809u, 828u, 840u, 851u, 869u, }; void recomp_unit_0141_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0141_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A38004u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0141[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0141[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0141[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A38004; @@ -1113,7 +1020,6 @@ L_08A38064: L_08A38074: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38098; } @@ -1185,7 +1091,6 @@ L_08A380F0: L_08A38100: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38124; } @@ -1257,7 +1162,6 @@ L_08A3817C: L_08A3818C: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A381B0; } @@ -1329,7 +1233,6 @@ L_08A38208: L_08A38218: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A3823C; } @@ -1401,7 +1304,6 @@ L_08A38294: L_08A382A4: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A382C8; } @@ -1473,7 +1375,6 @@ L_08A38320: L_08A38330: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38354; } @@ -1545,7 +1446,6 @@ L_08A383AC: L_08A383BC: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A383E0; } @@ -1617,7 +1517,6 @@ L_08A38438: L_08A38448: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A3846C; } @@ -1689,7 +1588,6 @@ L_08A384C4: L_08A384D4: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A384F8; } @@ -1761,7 +1659,6 @@ L_08A38550: L_08A38560: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38584; } @@ -1833,7 +1730,6 @@ L_08A385DC: L_08A385EC: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38610; } @@ -1905,7 +1801,6 @@ L_08A38668: L_08A38678: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A3869C; } @@ -1977,7 +1872,6 @@ L_08A386F4: L_08A38704: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38728; } @@ -2049,7 +1943,6 @@ L_08A38780: L_08A38790: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A387B4; } @@ -2121,7 +2014,6 @@ L_08A3880C: L_08A3881C: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38840; } @@ -2193,7 +2085,6 @@ L_08A38898: L_08A388A8: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A388CC; } @@ -2265,7 +2156,6 @@ L_08A38924: L_08A38934: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38958; } @@ -2337,7 +2227,6 @@ L_08A389B0: L_08A389C0: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A389E4; } @@ -2409,7 +2298,6 @@ L_08A38A3C: L_08A38A4C: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38A70; } @@ -2481,7 +2369,6 @@ L_08A38AC8: L_08A38AD8: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38AFC; } @@ -2553,7 +2440,6 @@ L_08A38B54: L_08A38B64: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38B88; } @@ -2625,7 +2511,6 @@ L_08A38BE0: L_08A38BF0: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38C14; } @@ -2697,7 +2582,6 @@ L_08A38C6C: L_08A38C7C: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38CA0; } @@ -2769,7 +2653,6 @@ L_08A38CF8: L_08A38D08: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38D2C; } @@ -2841,7 +2724,6 @@ L_08A38D84: L_08A38D94: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38DB8; } @@ -2913,7 +2795,6 @@ L_08A38E10: L_08A38E20: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38E44; } @@ -2985,7 +2866,6 @@ L_08A38E9C: L_08A38EAC: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38ED0; } @@ -3057,7 +2937,6 @@ L_08A38F28: L_08A38F38: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38F5C; } @@ -3129,7 +3008,6 @@ L_08A38FB4: L_08A38FC4: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A38FE8; } @@ -3201,7 +3079,6 @@ L_08A39040: L_08A39050: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39074; } @@ -3273,7 +3150,6 @@ L_08A390CC: L_08A390DC: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39100; } @@ -3345,7 +3221,6 @@ L_08A39158: L_08A39168: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A3918C; } @@ -3417,7 +3292,6 @@ L_08A391E4: L_08A391F4: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39218; } @@ -3489,7 +3363,6 @@ L_08A39270: L_08A39280: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A392A4; } @@ -3561,7 +3434,6 @@ L_08A392FC: L_08A3930C: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39330; } @@ -3633,7 +3505,6 @@ L_08A39388: L_08A39398: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A393BC; } @@ -3705,7 +3576,6 @@ L_08A39414: L_08A39424: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39448; } @@ -3777,7 +3647,6 @@ L_08A394A0: L_08A394B0: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A394D4; } @@ -3849,7 +3718,6 @@ L_08A3952C: L_08A3953C: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39560; } @@ -3921,7 +3789,6 @@ L_08A395B8: L_08A395C8: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A395EC; } @@ -3993,7 +3860,6 @@ L_08A39644: L_08A39654: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39678; } @@ -4065,7 +3931,6 @@ L_08A396D0: L_08A396E0: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39704; } @@ -4137,7 +4002,6 @@ L_08A3975C: L_08A3976C: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A39790; } @@ -4172,7 +4036,17 @@ L_08A39790: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A397AC: aot_gpr_4 = (0u | 61u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9943), static_cast(aot_gpr_4)); @@ -4351,7 +4225,17 @@ L_08A397AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39A64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(300))); @@ -4398,7 +4282,17 @@ L_08A39AB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39ACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4424,7 +4318,17 @@ L_08A39AF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4443,7 +4347,17 @@ L_08A39B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39B34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -4458,11 +4372,20 @@ L_08A39B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39B54: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(168))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A39B68; } @@ -4470,7 +4393,6 @@ L_08A39B54: } L_08A39B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A39B6C; } @@ -4481,18 +4403,37 @@ L_08A39B68: goto L_08A39B6C; L_08A39B6C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39B74: jump_target = ctx.gpr[31]; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39B7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); @@ -4552,7 +4493,6 @@ L_08A39BF0: goto L_08A39BF8; L_08A39BF8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A39C04; } @@ -4571,12 +4511,10 @@ L_08A39C04: } L_08A39C0C: ctx.gpr[31] = (0x08A39C14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0081_entry, 81u, 80u, 0x0894854Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A39C14u) goto L_08A39C14; AOT_REGCACHE_SYNC_OUT(); return; L_08A39C14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A39C34; } @@ -4586,7 +4524,6 @@ L_08A39C1C: ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_18 + static_cast(42)))))); ctx.gpr[2] = (ctx.gpr[2] & 7u); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08A39C44; } @@ -4610,7 +4547,6 @@ L_08A39C34: } L_08A39C3C: { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A39C48; } @@ -4621,7 +4557,6 @@ L_08A39C44: goto L_08A39C48; L_08A39C48: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A39C58; } @@ -4629,7 +4564,6 @@ L_08A39C48: } L_08A39C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A39C5C; } @@ -4651,7 +4585,17 @@ L_08A39C5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39C74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4706,11 +4650,20 @@ L_08A39CFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39D10: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A39D48; } @@ -4731,11 +4684,20 @@ L_08A39D1C: goto L_08A39D48; L_08A39D48: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39D50: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_18); @@ -4758,7 +4720,6 @@ L_08A39D84: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(7))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A39DC0; } @@ -4767,7 +4728,6 @@ L_08A39D84: L_08A39D9C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A39DC0; } @@ -4776,7 +4736,6 @@ L_08A39D9C: L_08A39DA8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A39DC0; } @@ -4785,7 +4744,6 @@ L_08A39DA8: L_08A39DB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A39DE8; } @@ -4798,7 +4756,6 @@ L_08A39DC0: AOT_REGCACHE_SYNC_OUT(); return; L_08A39DC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A39DE8; } @@ -4811,7 +4768,6 @@ L_08A39DD0: AOT_REGCACHE_SYNC_OUT(); return; L_08A39DD8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A39DE8; } @@ -4847,7 +4803,17 @@ L_08A39DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4861,7 +4827,17 @@ L_08A39E28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4889,7 +4865,17 @@ L_08A39E68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A39E7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), ctx.gpr[21]); @@ -5012,9 +4998,7 @@ L_08A39F70: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A05C; } @@ -5043,7 +5027,6 @@ L_08A39FCC: L_08A39FDC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A3A05C; } @@ -5095,9 +5078,7 @@ L_08A39FE8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A05C; } @@ -5105,9 +5086,7 @@ L_08A39FE8: } L_08A3A03C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A05C; } @@ -5144,7 +5123,6 @@ L_08A3A05C: L_08A3A070: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3A1A0; } @@ -5223,9 +5201,7 @@ L_08A3A0B0: ctx.gpr[3] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[3]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A180; } @@ -5234,7 +5210,6 @@ L_08A3A0B0: L_08A3A0F0: ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(2228))); { const bool branch_taken = ctx.gpr[3] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3A180; } @@ -5286,9 +5261,7 @@ L_08A3A0FC: ctx.gpr[3] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(ctx.gpr[3]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A180; } @@ -5296,9 +5269,7 @@ L_08A3A0FC: } L_08A3A150: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A180; } @@ -5308,7 +5279,6 @@ L_08A3A160: ctx.gpr[3] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(468))); ctx.gpr[3] = (ctx.gpr[3] & 256u); { const bool branch_taken = ctx.gpr[3] != 0u; - // nop if (branch_taken) { goto L_08A3A180; } @@ -5345,7 +5315,6 @@ L_08A3A180: L_08A3A194: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3A1C4; } @@ -5356,7 +5325,6 @@ L_08A3A1A0: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); if (branch_taken) { @@ -5366,7 +5334,6 @@ L_08A3A1A0: } L_08A3A1BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3A1DC; } @@ -5374,7 +5341,6 @@ L_08A3A1BC: } L_08A3A1C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3A208; } @@ -5382,9 +5348,7 @@ L_08A3A1C4: } L_08A3A1CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3A1EC; } @@ -5392,7 +5356,6 @@ L_08A3A1CC: } L_08A3A1DC: ctx.gpr[31] = (0x08A3A1E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3A1E4u) goto L_08A3A1E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A3A1E4: @@ -5440,7 +5403,17 @@ L_08A3A208: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A24C: aot_gpr_4 = (16025u << 16u); aot_gpr_4 = (aot_gpr_4 | 39322u); @@ -5499,7 +5472,6 @@ L_08A3A2D4: } L_08A3A2E4: { const bool branch_taken = ctx.gpr[13] == 0u; - // nop if (branch_taken) { goto L_08A3A310; } @@ -5524,7 +5496,6 @@ L_08A3A304: goto L_08A3A310; L_08A3A310: { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_08A3A334; } @@ -5532,7 +5503,6 @@ L_08A3A310: } L_08A3A318: { const bool branch_taken = ctx.gpr[14] != 0u; - // nop if (branch_taken) { goto L_08A3A334; } @@ -5547,7 +5517,6 @@ L_08A3A320: goto L_08A3A334; L_08A3A334: { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08A3A358; } @@ -5555,7 +5524,6 @@ L_08A3A334: } L_08A3A33C: { const bool branch_taken = ctx.gpr[13] != 0u; - // nop if (branch_taken) { goto L_08A3A358; } @@ -5570,7 +5538,6 @@ L_08A3A344: goto L_08A3A358; L_08A3A358: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A3A388; } @@ -5600,7 +5567,6 @@ L_08A3A378: } L_08A3A388: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A3A3B4; } @@ -5625,7 +5591,6 @@ L_08A3A3A8: goto L_08A3A3B4; L_08A3A3B4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A3A3D8; } @@ -5633,7 +5598,6 @@ L_08A3A3B4: } L_08A3A3BC: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A3A3D8; } @@ -5648,7 +5612,6 @@ L_08A3A3C4: goto L_08A3A3D8; L_08A3A3D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3A3FC; } @@ -5656,7 +5619,6 @@ L_08A3A3D8: } L_08A3A3E0: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A3A3FC; } @@ -5671,11 +5633,20 @@ L_08A3A3E8: goto L_08A3A3FC; L_08A3A3FC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A404: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -5723,14 +5694,22 @@ L_08A3A464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A478: aot_gpr_6 = (0u | 5u); { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (aot_gpr_4 + static_cast(40)); ctx.gpr[7] = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.gpr[7] + ctx.gpr[7]); aot_gpr_5 = (ctx.gpr[7] + aot_gpr_5); @@ -5746,15 +5725,23 @@ L_08A3A478: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A4C0: ctx.gpr[7] = (0u | 5u); { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = ctx.gpr[7]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[8] = (0u | 7u); aot_gpr_6 = (aot_gpr_6 & 65535u); ctx.gpr[9] = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = ctx.gpr[7]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.gpr[9] + ctx.gpr[9]); aot_gpr_5 = (ctx.gpr[9] + aot_gpr_5); @@ -5776,7 +5763,17 @@ L_08A3A4C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A524: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5805,7 +5802,6 @@ L_08A3A540: AOT_REGCACHE_SYNC_OUT(); return; L_08A3A574: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A3A58C; } @@ -5826,7 +5822,6 @@ L_08A3A58C: L_08A3A594: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3A5E8; } @@ -5839,7 +5834,6 @@ L_08A3A5A0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3A5E8; } @@ -5864,7 +5858,6 @@ L_08A3A5D4: L_08A3A5DC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3A5F8; } @@ -5892,7 +5885,17 @@ L_08A3A5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A61C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5920,7 +5923,6 @@ L_08A3A664: aot_gpr_18 = (0u | 1u); aot_gpr_5 = (static_cast(aot_gpr_18) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3A6B4; } @@ -5932,7 +5934,6 @@ L_08A3A678: aot_gpr_6 = (aot_gpr_6 << (aot_gpr_18 & 31u)); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3A6A4; } @@ -5956,7 +5957,6 @@ L_08A3A6A4: aot_gpr_18 = (aot_gpr_18 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_18) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A3A678; } @@ -5969,7 +5969,6 @@ L_08A3A6B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A3A6BC: { const bool branch_taken = aot_gpr_18 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A3A6D8; } @@ -6036,7 +6035,17 @@ L_08A3A734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A754: ctx.gpr[7] = (ctx.gpr[7] + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 + ctx.gpr[7]); @@ -6058,15 +6067,12 @@ L_08A3A778: aot_gpr_5 = (aot_gpr_6 + aot_gpr_5); { const std::int32_t dividend = static_cast(ctx.gpr[9]); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (aot_gpr_6 & 255u); aot_gpr_5 = (ctx.hi); aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A3A7F8; } @@ -6075,7 +6081,6 @@ L_08A3A778: L_08A3A7B0: aot_gpr_5 = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A3A7D8; } @@ -6084,7 +6089,6 @@ L_08A3A7B0: L_08A3A7BC: aot_gpr_5 = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A3A81C; } @@ -6125,7 +6129,6 @@ L_08A3A7F8: } L_08A3A804: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3A81C; } @@ -6146,17 +6149,25 @@ L_08A3A81C: goto L_08A3A820; L_08A3A820: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A828: aot_gpr_4 = (aot_gpr_6 & 65535u); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); ctx.gpr[7] = (0u | 20u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A3A864; } @@ -6166,7 +6177,6 @@ L_08A3A83C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1))); aot_gpr_6 = (aot_gpr_5 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A3A8E0; } @@ -6178,11 +6188,20 @@ L_08A3A84C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6216))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A864: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 1u); @@ -6273,11 +6292,20 @@ L_08A3A8E0: goto L_08A3A8E4; L_08A3A8E4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A8EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); @@ -6314,7 +6342,6 @@ L_08A3A940: ctx.gpr[19] = (ctx.gpr[19] + aot_gpr_4); aot_gpr_4 = (aot_gpr_18 < aot_gpr_17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3A934; } @@ -6336,7 +6363,17 @@ L_08A3A958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3A97C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6364,7 +6401,6 @@ L_08A3A9C8: aot_gpr_18 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_18) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3A9FC; } @@ -6380,7 +6416,6 @@ L_08A3A9EC: aot_gpr_18 = (aot_gpr_18 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_18) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3A9DC; } @@ -6405,7 +6440,17 @@ L_08A3A9FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3AA2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6536))); @@ -6470,7 +6515,6 @@ L_08A3AAD0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AB28; } @@ -6519,7 +6563,6 @@ L_08A3AB50: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AC0C; } @@ -6528,7 +6571,6 @@ L_08A3AB50: L_08A3AB70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3AC0C; } @@ -6536,7 +6578,6 @@ L_08A3AB70: } L_08A3AB7C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A3ABF8; } @@ -6549,7 +6590,6 @@ L_08A3AB84: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AC0C; } @@ -6587,7 +6627,6 @@ L_08A3ABD0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3AC0C; } @@ -6656,7 +6695,6 @@ L_08A3AC8C: } L_08A3AC9C: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A3AD0C; } @@ -6664,12 +6702,10 @@ L_08A3AC9C: } L_08A3ACA4: ctx.gpr[31] = (0x08A3ACACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0081_entry, 81u, 80u, 0x0894854Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3ACACu) goto L_08A3ACAC; AOT_REGCACHE_SYNC_OUT(); return; L_08A3ACAC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A3AD0C; } @@ -6699,7 +6735,6 @@ L_08A3ACD0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A3AD00; } @@ -6716,7 +6751,6 @@ L_08A3ACE8: L_08A3AD00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3ACD0; } @@ -6728,7 +6762,6 @@ L_08A3AD0C: aot_gpr_4 = (aot_gpr_4 >> 12u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AD68; } @@ -6765,7 +6798,6 @@ L_08A3AD68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_18 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3AD9C; } @@ -6777,7 +6809,6 @@ L_08A3AD78: aot_gpr_4 = (aot_gpr_4 + static_cast(28)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3AD9C; } @@ -6817,7 +6848,17 @@ L_08A3ADA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3ADE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(4), 0u); @@ -6861,7 +6902,6 @@ L_08A3AE54: } L_08A3AE5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3B4D0; } @@ -6937,7 +6977,6 @@ L_08A3AEC0: goto L_08A3AEC4; L_08A3AEC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AED8; } @@ -7025,7 +7064,6 @@ L_08A3AF40: goto L_08A3AF44; L_08A3AF44: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AF58; } @@ -7113,7 +7151,6 @@ L_08A3AFC0: goto L_08A3AFC4; L_08A3AFC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3AFD8; } @@ -7201,7 +7238,6 @@ L_08A3B040: goto L_08A3B044; L_08A3B044: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B058; } @@ -7289,7 +7325,6 @@ L_08A3B0C0: goto L_08A3B0C4; L_08A3B0C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B0D8; } @@ -7377,7 +7412,6 @@ L_08A3B140: goto L_08A3B144; L_08A3B144: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B158; } @@ -7440,7 +7474,6 @@ L_08A3B1BC: aot_fpr_13 = std::bit_cast(ctx.gpr[22]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); if (branch_taken) { @@ -7473,9 +7506,7 @@ L_08A3B22C: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3B260; } @@ -7735,9 +7766,7 @@ L_08A3B3A0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3B3D8; } @@ -7756,9 +7785,7 @@ L_08A3B3D8: aot_gpr_4 = (17150u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3B3F8; } @@ -7770,9 +7797,7 @@ L_08A3B3F4: L_08A3B3F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3B414; } @@ -7791,7 +7816,6 @@ L_08A3B414: aot_gpr_4 = (17150u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); goto L_08A3B438; @@ -7847,7 +7871,6 @@ L_08A3B478: L_08A3B4BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B4D0; } @@ -7879,7 +7902,17 @@ L_08A3B4D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3B508: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[16]); @@ -7943,7 +7976,6 @@ L_08A3B574: } L_08A3B5A4: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A3B768; } @@ -7965,7 +7997,6 @@ L_08A3B5AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B5D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3B5E0; } @@ -7992,7 +8023,6 @@ L_08A3B5E4: L_08A3B5F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3B608; } @@ -8000,7 +8030,6 @@ L_08A3B5F4: } L_08A3B600: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A3B734; } @@ -8008,7 +8037,6 @@ L_08A3B600: } L_08A3B608: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A3B66C; } @@ -8047,7 +8075,6 @@ L_08A3B654: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B664: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3B694; } @@ -8120,7 +8147,6 @@ L_08A3B718: goto L_08A3B508; L_08A3B72C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3B8E4; } @@ -8134,7 +8160,6 @@ L_08A3B734: goto L_08A3A61C; L_08A3B744: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3B760; } @@ -8149,7 +8174,6 @@ L_08A3B74C: goto L_08A3B508; L_08A3B760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3B8E4; } @@ -8163,7 +8187,6 @@ L_08A3B768: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B774: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A3B7D8; } @@ -8185,7 +8208,6 @@ L_08A3B77C: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B7A0: { const bool branch_taken = ctx.gpr[30] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A3B7D4; } @@ -8207,7 +8229,6 @@ L_08A3B7A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B7CC: { const bool branch_taken = ctx.gpr[30] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A3B7D8; } @@ -8218,7 +8239,6 @@ L_08A3B7D4: goto L_08A3B7D8; L_08A3B7D8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A3B870; } @@ -8226,7 +8246,6 @@ L_08A3B7D8: } L_08A3B7E0: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A3B870; } @@ -8235,7 +8254,6 @@ L_08A3B7E0: L_08A3B7E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B870; } @@ -8249,7 +8267,6 @@ L_08A3B7F4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B82C; } @@ -8264,7 +8281,6 @@ L_08A3B814: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B824: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3B840; } @@ -8312,7 +8328,6 @@ L_08A3B870: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(144))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3B884; } @@ -8331,7 +8346,6 @@ L_08A3B88C: ctx.gpr[30] = (0u | 1u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3B8DC; } @@ -8350,7 +8364,6 @@ L_08A3B8A0: goto L_08A3B914; L_08A3B8C4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A3B8E4; } @@ -8360,7 +8373,6 @@ L_08A3B8CC: ctx.gpr[30] = (ctx.gpr[30] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3B8A0; } @@ -8393,7 +8405,17 @@ L_08A3B8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3B914: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[16]); @@ -8445,7 +8467,6 @@ L_08A3B990: AOT_REGCACHE_SYNC_OUT(); return; L_08A3B9B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3BA34; } @@ -8459,7 +8480,6 @@ L_08A3B9BC: goto L_08A3A97C; L_08A3B9CC: { const bool branch_taken = aot_gpr_18 != 0u; - // nop if (branch_taken) { goto L_08A3BA14; } @@ -8510,7 +8530,6 @@ L_08A3BA44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(96))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3BA60; } @@ -8526,7 +8545,6 @@ L_08A3BA60: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(125), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 2u, 0x08A3C010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8602,7 +8620,6 @@ L_08A3BB24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BBB0; } @@ -8612,7 +8629,6 @@ L_08A3BB34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3BBB0; } @@ -8629,7 +8645,6 @@ L_08A3BB44: L_08A3BB4C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(108))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3BBB0; } @@ -8648,7 +8663,6 @@ L_08A3BB60: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BBB0; } @@ -8672,7 +8686,6 @@ L_08A3BB94: goto L_08A3A828; L_08A3BBA4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A3BBB0; } @@ -8684,7 +8697,6 @@ L_08A3BBAC: L_08A3BBB0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(125))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BBC8; } @@ -8692,7 +8704,6 @@ L_08A3BBB0: } L_08A3BBBC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A3BBC8; } @@ -8704,7 +8715,6 @@ L_08A3BBC4: L_08A3BBC8: ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(112))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A3BD88; } @@ -8712,7 +8722,6 @@ L_08A3BBC8: } L_08A3BBD4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A3BD88; } @@ -8720,7 +8729,6 @@ L_08A3BBD4: } L_08A3BBDC: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A3BC08; } @@ -8729,7 +8737,6 @@ L_08A3BBDC: L_08A3BBE4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(114))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BC08; } @@ -8749,7 +8756,6 @@ L_08A3BBF0: } L_08A3BC08: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A3BD88; } @@ -8758,7 +8764,6 @@ L_08A3BC08: L_08A3BC10: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(114))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3BD88; } @@ -8770,7 +8775,6 @@ L_08A3BC1C: aot_gpr_5 = (aot_gpr_5 << (ctx.gpr[20] & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BD88; } @@ -8782,7 +8786,6 @@ L_08A3BC34: aot_gpr_5 = (aot_gpr_5 << (ctx.gpr[20] & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3BC64; } @@ -8792,7 +8795,6 @@ L_08A3BC4C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BCD8; } @@ -8893,7 +8895,6 @@ L_08A3BD44: goto L_08A3B914; L_08A3BD80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 25u, 0x08A3C234u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8927,7 +8928,6 @@ L_08A3BDB0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_5 = (aot_gpr_5 & 32u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3BDEC; } @@ -8944,7 +8944,6 @@ L_08A3BDC4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); aot_gpr_6 = (aot_gpr_6 & aot_gpr_5); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A3BE04; } @@ -8952,7 +8951,6 @@ L_08A3BDC4: } L_08A3BDE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3BE1C; } @@ -8975,7 +8973,6 @@ L_08A3BDFC: L_08A3BE04: aot_gpr_5 = (ctx.gpr[22] & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3BEC8; } @@ -8994,7 +8991,6 @@ L_08A3BE1C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); aot_gpr_6 = (aot_gpr_6 & aot_gpr_5); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A3BE40; } @@ -9015,7 +9011,6 @@ L_08A3BE40: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_gpr_5 = (aot_gpr_6 & aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3BEC8; } @@ -9085,7 +9080,6 @@ L_08A3BEB0: } L_08A3BEB8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3BEC8; } @@ -9099,7 +9093,6 @@ L_08A3BEC8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(1))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A3BEE4; } @@ -9112,7 +9105,6 @@ L_08A3BED8: goto L_08A3BEE4; L_08A3BEE4: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A3BF30; } @@ -9122,7 +9114,6 @@ L_08A3BEEC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_5 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A3BF30; } @@ -9130,7 +9121,6 @@ L_08A3BEEC: } L_08A3BEFC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A3BF30; } @@ -9149,7 +9139,6 @@ L_08A3BF0C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(96))); aot_gpr_6 = (0u | 255u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A3BF30; } @@ -9172,7 +9161,6 @@ L_08A3BF30: L_08A3BF48: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9188,7 +9176,6 @@ L_08A3BF54: goto L_08A3A828; L_08A3BF6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3BF80; } @@ -9201,7 +9188,6 @@ L_08A3BF74: goto L_08A3BF80; L_08A3BF80: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9210,7 +9196,6 @@ L_08A3BF80: L_08A3BF88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(114))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9220,7 +9205,6 @@ L_08A3BF94: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(13))); aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9230,7 +9214,6 @@ L_08A3BFA4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(13))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(108))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9240,7 +9223,6 @@ L_08A3BFB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9250,7 +9232,6 @@ L_08A3BFC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3BFFC; } @@ -9260,7 +9241,6 @@ L_08A3BFD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3BFFC; } diff --git a/profiles/vcs/generated/generated_unit_0142.cpp b/profiles/vcs/generated/generated_unit_0142.cpp index 2f1c37e..4112c9e 100644 --- a/profiles/vcs/generated/generated_unit_0142.cpp +++ b/profiles/vcs/generated/generated_unit_0142.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0142[4094] = { - 1, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 8, 0, 9, 10, 0, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 29, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, - 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 44, 0, 0, 45, 0, 0, 46, 0, 0, 0, 47, 0, 48, 0, 49, 50, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 54, 0, 0, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 59, 0, 0, - 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, - 0, 0, 0, 66, 0, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, - 0, 0, 73, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 0, 0, 0, 0, 79, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 86, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 91, 92, 0, 0, 0, - 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, 97, 98, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, 0, 111, 0, 0, - 0, 112, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 115, 0, 116, 117, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, - 0, 120, 0, 0, 0, 121, 0, 0, 0, 122, 0, 123, 0, 124, 0, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, - 0, 129, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 134, 0, 135, 136, 0, 0, 137, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, 141, 0, 142, 0, 143, 0, 0, 144, 0, 0, 145, 0, 0, 0, - 0, 146, 147, 0, 148, 0, 0, 149, 0, 0, 150, 0, 0, 0, 0, 151, 152, 153, 0, 0, 0, 154, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 160, 0, 0, 0, - 0, 161, 0, 0, 0, 0, 162, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, - 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, - 0, 0, 171, 0, 172, 0, 173, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 180, - 0, 181, 0, 182, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, 188, - 0, 0, 0, 189, 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 197, - 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 202, 203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 204, 205, 0, 206, 0, 0, 0, 0, 0, 207, 208, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 0, 0, 212, 213, - 0, 214, 0, 0, 0, 0, 0, 215, 216, 0, 217, 0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 0, 222, 0, 0, 0, 0, - 0, 223, 224, 0, 225, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 236, 237, 0, 238, 0, 0, 0, 239, 0, 0, - 0, 240, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 243, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 245, 0, 246, 247, 0, 248, 0, 249, 0, 250, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 253, 0, 0, 254, 0, 255, 0, 256, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 263, 0, 0, 264, 0, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 273, 0, - 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 276, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 0, 279, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 283, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 286, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, - 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 303, - 0, 0, 0, 0, 0, 0, 304, 0, 0, 305, 0, 306, 307, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 314, 0, 315, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 0, - 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, - 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, - 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 345, 0, 0, 346, 347, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 349, 350, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 367, 368, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, - 371, 0, 0, 0, 0, 372, 0, 0, 0, 0, 373, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, - 0, 0, 377, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, 0, 383, 0, 0, - 384, 0, 0, 385, 0, 0, 386, 0, 0, 0, 0, 387, 0, 388, 0, 0, 0, 389, 0, 390, 0, 0, 391, 0, 0, 392, 0, 0, 393, 0, 0, 0, - 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, - 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 419, 0, 420, - 0, 0, 0, 0, 421, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 427, 0, 428, - 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 433, 434, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, - 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 443, 0, 0, - 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 449, - 450, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, 0, - 0, 458, 459, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, 0, - 465, 0, 0, 466, 467, 0, 468, 0, 469, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, - 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 475, 0, 476, 0, 0, 477, 478, 0, 0, 479, 0, 480, 481, 0, 0, 0, 0, 0, 0, 0, - 0, 482, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 485, 0, 486, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 490, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 495, 496, 0, 0, 0, 0, 0, 0, 0, 497, 498, 0, 0, 0, 499, 0, 0, 0, - 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, - 0, 503, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, - 0, 0, 0, 517, 0, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 523, 0, 0, 0, 0, 0, - 0, 0, 524, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 528, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 530, 0, 531, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 535, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 540, 0, 0, 0, 0, 0, 541, 542, 0, 0, 0, 543, 544, 0, 545, 0, - 0, 0, 0, 546, 0, 547, 548, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 558, 0, 559, 560, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 565, 0, 0, 566, 0, 0, - 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, - 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 578, 0, 0, 0, 579, 0, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, 584, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, - 0, 591, 0, 0, 0, 592, 0, 0, 0, 593, 0, 0, 594, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 598, 599, 0, 0, - 0, 0, 0, 600, 0, 0, 601, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, - 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0142[64] = { + 0x0000A23409100891ull, 0x8000A10201010008ull, 0x0041244802003050ull, 0x004300810A010409ull, + 0x240106090140D449ull, 0x1202806808241041ull, 0xD01048208248020Cull, 0x1A80020418240500ull, + 0x2222224004011502ull, 0x22222A224009A222ull, 0x1255042009A22222ull, 0x1482040004238496ull, + 0x2021000114000A42ull, 0x8A08042AA4121154ull, 0x06804088B0068058ull, 0x0B044582C11160B0ull, + 0x22D00680202C1116ull, 0x0A90A2AD00680202ull, 0x24A0800000A80000ull, 0x2280009000000001ull, + 0x0000004145000000ull, 0x0000140000060282ull, 0x02A0000050000028ull, 0x0000000021050000ull, + 0x0000010200000400ull, 0x8850200210000000ull, 0x044AA00408841A40ull, 0x0010A40408002002ull, + 0x0000200000000000ull, 0x8008000000000020ull, 0x1002020004000002ull, 0x2060000004081000ull, + 0x6610002000008000ull, 0x05010A8028188000ull, 0x0000000001400140ull, 0x0000002000210000ull, + 0x21000C2102818800ull, 0x000000000000000Cull, 0x0000000000000000ull, 0x4000000000000000ull, + 0x124A284924801000ull, 0x0200000000810010ull, 0x4422084210115110ull, 0xA4840830A812240Cull, + 0x0011009022348050ull, 0xA080802121200000ull, 0x0A10204605490205ull, 0x01A6542080202159ull, + 0x010A40000000D222ull, 0x108000041180D240ull, 0x000020000208410Aull, 0x0009004000000000ull, + 0x0540054808212000ull, 0x420A805400540054ull, 0x0000406858C1A000ull, 0x0000000000004000ull, + 0x0400000000000000ull, 0x0000000000024000ull, 0x2680084D00104012ull, 0x0004081040100004ull, + 0x0041000200020002ull, 0x00200400120880A2ull, 0x3088922202880020ull, 0x2001004080000248ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0142[64] = { + 1u, 14u, 22u, 33u, 44u, 60u, 73u, 87u, 99u, 112u, 129u, 146u, 161u, 171u, 189u, 204u, + 223u, 240u, 257u, 265u, 271u, 276u, 283u, 290u, 294u, 297u, 304u, 318u, 326u, 327u, 330u, 335u, + 341u, 348u, 359u, 363u, 366u, 377u, 379u, 379u, 380u, 394u, 398u, 412u, 429u, 441u, 450u, 465u, + 482u, 492u, 503u, 510u, 513u, 524u, 538u, 550u, 551u, 552u, 554u, 567u, 573u, 578u, 587u, 600u, }; void recomp_unit_0142_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0142_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A3C000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0142[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0142[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0142[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A3C000; @@ -781,7 +688,6 @@ L_08A3C000: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0141_entry, 141u, 802u, 0x08A3BA7Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -790,7 +696,6 @@ L_08A3C000: L_08A3C010: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3C230; } @@ -800,7 +705,6 @@ L_08A3C01C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(13))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(108))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3C218; } @@ -815,7 +719,6 @@ L_08A3C02C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C230; } @@ -825,7 +728,6 @@ L_08A3C050: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3C06C; } @@ -834,7 +736,6 @@ L_08A3C050: L_08A3C060: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(126))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3C230; } @@ -847,7 +748,6 @@ L_08A3C06C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3C090; } @@ -942,7 +842,6 @@ L_08A3C160: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C1A0; } @@ -967,7 +866,6 @@ L_08A3C1A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A3C1B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3C210; } @@ -1036,7 +934,17 @@ L_08A3C234: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C264: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1093,7 +1001,17 @@ L_08A3C2C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C2D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1118,7 +1036,6 @@ L_08A3C30C: aot_gpr_4 = (49024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -1208,7 +1125,17 @@ L_08A3C3C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C3D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1231,7 +1158,6 @@ L_08A3C400: L_08A3C40C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C438; } @@ -1241,7 +1167,6 @@ L_08A3C418: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C430; } @@ -1316,7 +1241,6 @@ L_08A3C48C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C4A8; } @@ -1338,7 +1262,17 @@ L_08A3C4A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C4C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1361,7 +1295,6 @@ L_08A3C4E8: L_08A3C4F4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A3C598; } @@ -1384,7 +1317,6 @@ L_08A3C518: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C594; } @@ -1404,7 +1336,6 @@ L_08A3C530: L_08A3C548: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C594; } @@ -1429,7 +1360,6 @@ L_08A3C56C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C594; } @@ -1498,7 +1428,6 @@ L_08A3C5F0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C60C; } @@ -1520,7 +1449,17 @@ L_08A3C60C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C624: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1543,7 +1482,6 @@ L_08A3C64C: L_08A3C658: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A3C6FC; } @@ -1566,7 +1504,6 @@ L_08A3C67C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C6F8; } @@ -1586,7 +1523,6 @@ L_08A3C694: L_08A3C6AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C6F8; } @@ -1611,7 +1547,6 @@ L_08A3C6D0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C6F8; } @@ -1680,7 +1615,6 @@ L_08A3C754: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3C770; } @@ -1702,7 +1636,17 @@ L_08A3C770: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C788: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1760,7 +1704,17 @@ L_08A3C7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C804: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1768,7 +1722,6 @@ L_08A3C804: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A3C830; } @@ -1791,7 +1744,17 @@ L_08A3C830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C840: aot_gpr_5 = (aot_gpr_5 + static_cast(4)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0)))))); @@ -1806,7 +1769,17 @@ L_08A3C840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C868: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_gpr_5 | 0u); @@ -1825,7 +1798,6 @@ L_08A3C868: L_08A3C898: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08A3C93C; } @@ -1835,7 +1807,6 @@ L_08A3C8A4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1801)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1845,7 +1816,6 @@ L_08A3C8B4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1809)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1855,7 +1825,6 @@ L_08A3C8C4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1810)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1865,7 +1834,6 @@ L_08A3C8D4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1793)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1875,7 +1843,6 @@ L_08A3C8E4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1799)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1885,7 +1852,6 @@ L_08A3C8F4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1800)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1895,7 +1861,6 @@ L_08A3C904: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1813)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1905,7 +1870,6 @@ L_08A3C914: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(2)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1915,7 +1879,6 @@ L_08A3C924: aot_gpr_5 = (32832u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1798)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C934; } @@ -1939,7 +1902,17 @@ L_08A3C940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3C94C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[9] = (aot_gpr_5 | 0u); @@ -1957,7 +1930,6 @@ L_08A3C94C: L_08A3C978: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08A3CA5C; } @@ -1967,7 +1939,6 @@ L_08A3C984: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1801)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3C9AC; } @@ -1977,7 +1948,6 @@ L_08A3C994: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1809)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -1985,7 +1955,6 @@ L_08A3C994: } L_08A3C9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3C9B4; } @@ -2003,7 +1972,6 @@ L_08A3C9B4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1810)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2013,7 +1981,6 @@ L_08A3C9C4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1793)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2023,7 +1990,6 @@ L_08A3C9D4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1799)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2033,7 +1999,6 @@ L_08A3C9E4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1794)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2043,7 +2008,6 @@ L_08A3C9F4: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1795)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2053,7 +2017,6 @@ L_08A3CA04: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1797)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2063,7 +2026,6 @@ L_08A3CA14: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2073,7 +2035,6 @@ L_08A3CA24: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1800)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2083,7 +2044,6 @@ L_08A3CA34: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(1813)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2093,7 +2053,6 @@ L_08A3CA44: aot_gpr_5 = (32833u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(2)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3CA54; } @@ -2117,7 +2076,17 @@ L_08A3CA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CA6C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2171,11 +2140,20 @@ L_08A3CA6C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CA94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2200,7 +2178,6 @@ L_08A3CAA8: AOT_REGCACHE_SYNC_OUT(); return; L_08A3CAC0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A3CAD8; } @@ -2208,7 +2185,6 @@ L_08A3CAC0: } L_08A3CAC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3CB10; } @@ -2242,7 +2218,6 @@ L_08A3CAF0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3CB08; } @@ -2279,7 +2254,6 @@ L_08A3CB28: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3CB40; } @@ -2299,7 +2273,17 @@ L_08A3CB44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CB54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2328,7 +2312,17 @@ L_08A3CB68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CBA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2354,7 +2348,6 @@ L_08A3CBC4: L_08A3CBDC: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CBF0; } @@ -2376,7 +2369,17 @@ L_08A3CBF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CC04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -2392,14 +2395,34 @@ L_08A3CC18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CC24: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CC2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2431,7 +2454,17 @@ L_08A3CC70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CC80: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -2451,7 +2484,6 @@ L_08A3CCC0: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CD18; } @@ -2463,9 +2495,7 @@ L_08A3CCD4: aot_gpr_4 = (aot_gpr_4 | 49807u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3CD10; } @@ -2484,7 +2514,6 @@ L_08A3CCF4: } L_08A3CD08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3CD30; } @@ -2492,7 +2521,6 @@ L_08A3CD08: } L_08A3CD10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D984; } @@ -2500,7 +2528,6 @@ L_08A3CD10: } L_08A3CD18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D984; } @@ -2517,7 +2544,6 @@ L_08A3CD30: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D984; } @@ -2555,7 +2581,6 @@ L_08A3CD68: } L_08A3CD74: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A3D970; } @@ -2563,7 +2588,6 @@ L_08A3CD74: } L_08A3CD7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3CD94; } @@ -2571,7 +2595,6 @@ L_08A3CD7C: } L_08A3CD84: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3D748; } @@ -2579,7 +2602,6 @@ L_08A3CD84: } L_08A3CD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D970; } @@ -2612,7 +2634,6 @@ L_08A3CDA8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(40))); aot_gpr_5 = (aot_gpr_4 < static_cast(15) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2624,11 +2645,20 @@ L_08A3CDCC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6248))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3CDE4: { const bool branch_taken = 0u == 0u; ctx.gpr[20] = (0u | 1u); @@ -2641,7 +2671,6 @@ L_08A3CDEC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CE0C; } @@ -2651,7 +2680,6 @@ L_08A3CDFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CE10; } @@ -2662,7 +2690,6 @@ L_08A3CE0C: goto L_08A3CE10; L_08A3CE10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2677,7 +2704,6 @@ L_08A3CE18: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CE44; } @@ -2704,7 +2730,6 @@ L_08A3CE48: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CE74; } @@ -2715,7 +2740,6 @@ L_08A3CE70: goto L_08A3CE74; L_08A3CE74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2725,7 +2749,6 @@ L_08A3CE7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CEB8; } @@ -2735,7 +2758,6 @@ L_08A3CE8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3CEB8; } @@ -2746,9 +2768,7 @@ L_08A3CE9C: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3CF14; } @@ -2763,7 +2783,6 @@ L_08A3CEB8: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CEE4; } @@ -2790,7 +2809,6 @@ L_08A3CEE8: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CF14; } @@ -2801,7 +2819,6 @@ L_08A3CF10: goto L_08A3CF14; L_08A3CF14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2813,7 +2830,6 @@ L_08A3CF1C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CF38; } @@ -2824,7 +2840,6 @@ L_08A3CF34: goto L_08A3CF38; L_08A3CF38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2834,7 +2849,6 @@ L_08A3CF40: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CF60; } @@ -2844,7 +2858,6 @@ L_08A3CF50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CF7C; } @@ -2856,7 +2869,6 @@ L_08A3CF60: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CF7C; } @@ -2867,7 +2879,6 @@ L_08A3CF78: goto L_08A3CF7C; L_08A3CF7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2879,7 +2890,6 @@ L_08A3CF84: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CFA0; } @@ -2890,7 +2900,6 @@ L_08A3CF9C: goto L_08A3CFA0; L_08A3CFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2900,7 +2909,6 @@ L_08A3CFA8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CFC8; } @@ -2910,7 +2918,6 @@ L_08A3CFB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CFE4; } @@ -2922,7 +2929,6 @@ L_08A3CFC8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3CFE4; } @@ -2933,7 +2939,6 @@ L_08A3CFE0: goto L_08A3CFE4; L_08A3CFE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2945,7 +2950,6 @@ L_08A3CFEC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D008; } @@ -2956,7 +2960,6 @@ L_08A3D004: goto L_08A3D008; L_08A3D008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -2966,7 +2969,6 @@ L_08A3D010: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D030; } @@ -2976,7 +2978,6 @@ L_08A3D020: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D04C; } @@ -2988,7 +2989,6 @@ L_08A3D030: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D04C; } @@ -2999,7 +2999,6 @@ L_08A3D048: goto L_08A3D04C; L_08A3D04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -3013,7 +3012,6 @@ L_08A3D054: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D0D8; } @@ -3029,7 +3027,6 @@ L_08A3D074: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D0A4; } @@ -3056,7 +3053,6 @@ L_08A3D0A8: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D0DC; } @@ -3075,7 +3071,6 @@ L_08A3D0D8: goto L_08A3D0DC; L_08A3D0DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -3085,7 +3080,6 @@ L_08A3D0E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 19 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D104; } @@ -3095,7 +3089,6 @@ L_08A3D0F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_4 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D18C; } @@ -3109,7 +3102,6 @@ L_08A3D104: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D188; } @@ -3125,7 +3117,6 @@ L_08A3D124: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 96u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D154; } @@ -3152,7 +3143,6 @@ L_08A3D158: aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D18C; } @@ -3171,7 +3161,6 @@ L_08A3D188: goto L_08A3D18C; L_08A3D18C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -3179,7 +3168,6 @@ L_08A3D18C: } L_08A3D194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -3187,7 +3175,6 @@ L_08A3D194: } L_08A3D19C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D1A4; } @@ -3197,7 +3184,6 @@ L_08A3D1A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D1E4; } @@ -3205,7 +3191,6 @@ L_08A3D1A4: } L_08A3D1B4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3D1D0; } @@ -3229,7 +3214,6 @@ L_08A3D1D0: goto L_08A3D1DC; L_08A3D1DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D984; } @@ -3237,7 +3221,6 @@ L_08A3D1DC: } L_08A3D1E4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3D254; } @@ -3272,7 +3255,6 @@ L_08A3D1EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A3D24C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D2BC; } @@ -3280,7 +3262,6 @@ L_08A3D24C: } L_08A3D254: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A3D2BC; } @@ -3317,7 +3298,6 @@ L_08A3D2BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (0u | 0u); if (branch_taken) { @@ -3327,7 +3307,6 @@ L_08A3D2BC: } L_08A3D2D4: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3D3DC; } @@ -3336,7 +3315,6 @@ L_08A3D2D4: L_08A3D2DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3D300; } @@ -3345,7 +3323,6 @@ L_08A3D2DC: L_08A3D2E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(17))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3D300; } @@ -3354,7 +3331,6 @@ L_08A3D2E8: L_08A3D2F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D39C; } @@ -3412,7 +3388,6 @@ L_08A3D300: L_08A3D390: ctx.gpr[22] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D3DC; } @@ -3449,7 +3424,6 @@ L_08A3D39C: AOT_REGCACHE_SYNC_OUT(); return; L_08A3D3DC: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08A3D504; } @@ -3459,7 +3433,6 @@ L_08A3D3E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D468; } @@ -3507,7 +3480,6 @@ L_08A3D3F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A3D460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D504; } @@ -3517,7 +3489,6 @@ L_08A3D468: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(44))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3D504; } @@ -3525,7 +3496,6 @@ L_08A3D468: } L_08A3D478: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3D504; } @@ -3535,9 +3505,7 @@ L_08A3D480: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3D504; } @@ -3587,9 +3555,7 @@ L_08A3D504: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3D740; } @@ -3597,7 +3563,6 @@ L_08A3D504: } L_08A3D51C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3D6DC; } @@ -3609,7 +3574,6 @@ L_08A3D524: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11136))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(16))); goto L_08A3D548; @@ -3640,7 +3604,6 @@ L_08A3D548: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(52))); { const float fs = aot_fpr_14; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); if (branch_taken) { @@ -3673,7 +3636,6 @@ L_08A3D5B0: ctx.fpr[18] = static_cast(static_cast(std::bit_cast(ctx.fpr[18]))); { const float fs = aot_fpr_15; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); if (branch_taken) { @@ -3706,7 +3668,6 @@ L_08A3D614: ctx.fpr[18] = static_cast(static_cast(std::bit_cast(ctx.fpr[18]))); { const float fs = aot_fpr_15; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); if (branch_taken) { @@ -3746,7 +3707,6 @@ L_08A3D678: AOT_REGCACHE_SYNC_OUT(); return; L_08A3D6D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D740; } @@ -3754,7 +3714,6 @@ L_08A3D6D4: } L_08A3D6DC: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A3D740; } @@ -3788,7 +3747,6 @@ L_08A3D6E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A3D740: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3D970; } @@ -3798,9 +3756,7 @@ L_08A3D748: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3D970; } @@ -3992,9 +3948,7 @@ L_08A3D828: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3D970; } @@ -4069,7 +4023,6 @@ L_08A3D970: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3CD44; } @@ -4094,7 +4047,17 @@ L_08A3D984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3D9B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2279u << 16u); @@ -4125,7 +4088,17 @@ L_08A3D9EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3D9FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4165,7 +4138,17 @@ L_08A3DA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3DA48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6480))); @@ -4181,7 +4164,17 @@ L_08A3DA5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3DA6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(88))); aot_gpr_6 = (0u + static_cast(-2)); @@ -4193,7 +4186,17 @@ L_08A3DA6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3DA88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4210,7 +4213,6 @@ L_08A3DA88: AOT_REGCACHE_SYNC_OUT(); return; L_08A3DAB4: aot_gpr_31 = (0x08A3DABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3DABCu) goto L_08A3DABC; AOT_REGCACHE_SYNC_OUT(); return; L_08A3DABC: @@ -4284,7 +4286,17 @@ L_08A3DB34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3DB6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4312,7 +4324,6 @@ L_08A3DB88: L_08A3DBA8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3DBBC; } @@ -4335,7 +4346,17 @@ L_08A3DBBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3DBD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4536,9 +4557,7 @@ L_08A3DD14: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(264))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3DDFC; } @@ -4564,7 +4583,6 @@ L_08A3DDCC: } L_08A3DDFC: aot_gpr_31 = (0x08A3DE04u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3DE04u) goto L_08A3DE04; AOT_REGCACHE_SYNC_OUT(); return; L_08A3DE04: @@ -4650,7 +4668,6 @@ L_08A3DE68: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fpr[26] = aot_fpr_12 / ctx.fpr[26]; aot_gpr_31 = (0x08A3DEA4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3DEA4u) goto L_08A3DEA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A3DEA4: @@ -4661,7 +4678,6 @@ L_08A3DEA4: aot_fpr_13 = aot_fpr_14 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), std::bit_cast(aot_fpr_13)); aot_gpr_31 = (0x08A3DEC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3DEC4u) goto L_08A3DEC4; AOT_REGCACHE_SYNC_OUT(); return; L_08A3DEC4: @@ -4792,7 +4808,6 @@ L_08A3DFD8: ctx.gpr[21] = (static_cast(static_cast(ctx.gpr[21]) >> 24u)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3DD14; } @@ -4823,7 +4838,17 @@ L_08A3DFF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3E03C: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(180), ctx.gpr[21]); @@ -4870,7 +4895,6 @@ L_08A3E094: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3E0E8; } @@ -4925,7 +4949,6 @@ L_08A3E13C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); ctx.gpr[18] = (ctx.gpr[18] & 255u); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A3E150; } @@ -4947,7 +4970,6 @@ L_08A3E150: goto L_08A3E16C; L_08A3E16C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3E354; } @@ -4979,7 +5001,6 @@ L_08A3E19C: } L_08A3E1A4: aot_gpr_31 = (0x08A3E1ACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3E1ACu) goto L_08A3E1AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A3E1AC: @@ -5006,7 +5027,6 @@ L_08A3E1C0: } L_08A3E1E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3E340; } @@ -5055,7 +5075,6 @@ L_08A3E220: aot_fpr_12 = ctx.fpr[16] + ctx.fpr[17]; aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(68), std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(72), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5209,7 +5228,6 @@ L_08A3E340: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3E13C; } @@ -5238,7 +5256,17 @@ L_08A3E354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3E394: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); ctx.gpr[14] = (16076u << 16u); @@ -5282,7 +5310,6 @@ L_08A3E42C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A3E440; } @@ -5298,7 +5325,6 @@ L_08A3E440: ctx.gpr[25] = (aot_gpr_16 + ctx.gpr[25]); aot_gpr_31 = (aot_mem.aot_direct_load8(ctx.gpr[25] + static_cast(0))); { const bool branch_taken = aot_gpr_31 != 0u; - // nop if (branch_taken) { goto L_08A3E464; } @@ -5306,7 +5332,6 @@ L_08A3E440: } L_08A3E45C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3E85C; } @@ -5330,7 +5355,6 @@ L_08A3E464: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[19] = (aot_mem.aot_direct_load8(ctx.gpr[25] + static_cast(1))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A3E4AC; } @@ -5339,9 +5363,7 @@ L_08A3E464: L_08A3E480: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(aot_fpr_12)) && ctx.fpr[16] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3E4AC; } @@ -5350,9 +5372,7 @@ L_08A3E480: L_08A3E494: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(aot_fpr_12)) && ctx.fpr[16] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3E4AC; } @@ -5397,7 +5417,6 @@ L_08A3E4AC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[25] = (aot_mem.aot_direct_load8(ctx.gpr[25] + static_cast(1))); { const bool branch_taken = ctx.gpr[25] != 0u; - // nop if (branch_taken) { goto L_08A3E50C; } @@ -5406,9 +5425,7 @@ L_08A3E4AC: L_08A3E4E0: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(aot_fpr_12)) && ctx.fpr[16] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3E50C; } @@ -5417,9 +5434,7 @@ L_08A3E4E0: L_08A3E4F4: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(148))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(aot_fpr_12)) && ctx.fpr[16] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3E50C; } @@ -5832,7 +5847,6 @@ L_08A3E830: aot_gpr_5 = (aot_gpr_5 & 255u); ctx.gpr[25] = (static_cast(aot_gpr_5) < 49 ? 1u : 0u); { const bool branch_taken = ctx.gpr[25] != 0u; - // nop if (branch_taken) { goto L_08A3E42C; } @@ -5865,7 +5879,6 @@ L_08A3E880: L_08A3E88C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3E8CC; } @@ -5881,7 +5894,6 @@ L_08A3E898: AOT_REGCACHE_SYNC_OUT(); return; L_08A3E8AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3E8CC; } @@ -5896,7 +5908,6 @@ L_08A3E8B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A3E8C4: aot_gpr_31 = (0x08A3E8CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3E8CCu) goto L_08A3E8CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A3E8CC: @@ -5932,7 +5943,17 @@ L_08A3E8F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3E910: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5959,7 +5980,17 @@ L_08A3E940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3E95C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_gpr_6 = (2235u << 16u); @@ -6009,7 +6040,17 @@ L_08A3E95C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3E9E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6031,7 +6072,6 @@ L_08A3EA10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6054,7 +6094,6 @@ L_08A3EA30: AOT_REGCACHE_SYNC_OUT(); return; L_08A3EA38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6064,7 +6103,6 @@ L_08A3EA40: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(58))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(58))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6111,7 +6149,6 @@ L_08A3EA98: aot_gpr_6 = (aot_gpr_6 >> 4u); ctx.gpr[7] = (ctx.gpr[7] >> 4u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6121,9 +6158,7 @@ L_08A3EAAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(52))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6144,7 +6179,6 @@ L_08A3EAD4: aot_gpr_5 = (aot_gpr_5 >> 5u); aot_gpr_4 = (aot_gpr_4 >> 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6154,7 +6188,6 @@ L_08A3EAE8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(57))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(57))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6164,7 +6197,6 @@ L_08A3EAF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(60))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(60))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A3EB0C; } @@ -6187,7 +6219,17 @@ L_08A3EB0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EB28: ctx.gpr[2] = (2212u << 16u); jump_target = aot_gpr_31; @@ -6195,12 +6237,21 @@ L_08A3EB28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EB34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A3EB44u); - // nop goto L_08A3EB28; L_08A3EB44: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6209,7 +6260,17 @@ L_08A3EB44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EB50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6227,7 +6288,6 @@ L_08A3EB6C: goto L_08A3EB74; L_08A3EB74: aot_gpr_31 = (0x08A3EB7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3EB7Cu) goto L_08A3EB7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A3EB7C: @@ -6235,7 +6295,6 @@ L_08A3EB7C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3EB94; } @@ -6257,7 +6316,17 @@ L_08A3EB94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EBAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6288,7 +6357,6 @@ L_08A3EBDC: L_08A3EBE8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3EBFC; } @@ -6311,14 +6379,34 @@ L_08A3EBFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EC10: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 5u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EC18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -6355,7 +6443,17 @@ L_08A3EC54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EC64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6385,7 +6483,17 @@ L_08A3EC90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EC9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -6461,7 +6569,17 @@ L_08A3ED54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3ED60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -6476,7 +6594,17 @@ L_08A3ED74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3ED80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6499,7 +6627,17 @@ L_08A3ED94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EDBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -6517,7 +6655,6 @@ L_08A3EDDC: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(108), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3EE00; } @@ -6525,7 +6662,6 @@ L_08A3EDDC: } L_08A3EDF4: aot_gpr_31 = (0x08A3EDFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3EDFCu) goto L_08A3EDFC; AOT_REGCACHE_SYNC_OUT(); return; L_08A3EDFC: @@ -6576,7 +6712,6 @@ L_08A3EE4C: goto L_08A3EE58; L_08A3EE58: aot_gpr_31 = (0x08A3EE60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3EE60u) goto L_08A3EE60; AOT_REGCACHE_SYNC_OUT(); return; L_08A3EE60: @@ -6616,7 +6751,17 @@ L_08A3EE98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EEB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6664,7 +6809,6 @@ L_08A3EF0C: goto L_08A3EF10; L_08A3EF10: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3EF20; } @@ -6687,7 +6831,17 @@ L_08A3EF20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3EF34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -6709,7 +6863,6 @@ L_08A3EF54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A3EFB0; } @@ -6737,7 +6890,6 @@ L_08A3EF94: } L_08A3EFA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3F0B8; } @@ -6745,7 +6897,6 @@ L_08A3EFA8: } L_08A3EFB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A3F0CC; } @@ -6754,7 +6905,6 @@ L_08A3EFB0: L_08A3EFB8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A3F024; } @@ -6772,7 +6922,6 @@ L_08A3EFC8: goto L_08A3EFD4; L_08A3EFD4: aot_gpr_31 = (0x08A3EFDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3EFDCu) goto L_08A3EFDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A3EFDC: @@ -6787,7 +6936,6 @@ L_08A3EFE0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(656)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3F024; } @@ -6797,7 +6945,6 @@ L_08A3F004: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); aot_gpr_4 = (static_cast(aot_gpr_4) < 75 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3F024; } @@ -6822,7 +6969,6 @@ L_08A3F024: goto L_08A3F030; L_08A3F030: aot_gpr_31 = (0x08A3F038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F038u) goto L_08A3F038; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F038: @@ -6879,7 +7025,6 @@ L_08A3F03C: L_08A3F0B8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A3F0CC; } @@ -6901,7 +7046,17 @@ L_08A3F0CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3F0E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -6937,7 +7092,6 @@ L_08A3F124: goto L_08A3F130; L_08A3F130: aot_gpr_31 = (0x08A3F138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F138u) goto L_08A3F138; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F138: @@ -6976,7 +7130,17 @@ L_08A3F170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3F188: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_6); @@ -7064,7 +7228,17 @@ L_08A3F24C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3F264: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7166,7 +7340,6 @@ L_08A3F398: L_08A3F3C0: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3F434; } @@ -7203,7 +7376,6 @@ L_08A3F3CC: L_08A3F434: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3F454; } @@ -7229,7 +7401,17 @@ L_08A3F454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3F46C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -7253,7 +7435,6 @@ L_08A3F48C: goto L_08A3F498; L_08A3F498: aot_gpr_31 = (0x08A3F4A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F4A0u) goto L_08A3F4A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F4A0: @@ -7278,7 +7459,6 @@ L_08A3F4A8: goto L_08A3F4D8; L_08A3F4D8: aot_gpr_31 = (0x08A3F4E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F4E0u) goto L_08A3F4E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F4E0: @@ -7299,7 +7479,6 @@ L_08A3F4E8: goto L_08A3F508; L_08A3F508: aot_gpr_31 = (0x08A3F510u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F510u) goto L_08A3F510; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F510: @@ -7324,7 +7503,6 @@ L_08A3F518: goto L_08A3F548; L_08A3F548: aot_gpr_31 = (0x08A3F550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F550u) goto L_08A3F550; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F550: @@ -7349,7 +7527,6 @@ L_08A3F558: goto L_08A3F588; L_08A3F588: aot_gpr_31 = (0x08A3F590u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F590u) goto L_08A3F590; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F590: @@ -7371,7 +7548,6 @@ L_08A3F598: goto L_08A3F5BC; L_08A3F5BC: aot_gpr_31 = (0x08A3F5C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3F5C4u) goto L_08A3F5C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A3F5C4: @@ -7398,7 +7574,17 @@ L_08A3F5E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3F5F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7419,7 +7605,6 @@ L_08A3F5F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A3F634: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A3F640; } @@ -7432,9 +7617,7 @@ L_08A3F640: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A3F65C; } @@ -7447,7 +7630,6 @@ L_08A3F65C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(60))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(60))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A3F670; } @@ -7458,7 +7640,6 @@ L_08A3F66C: goto L_08A3F670; L_08A3F670: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3F694; } @@ -7497,7 +7678,17 @@ L_08A3F698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3F6B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7528,7 +7719,6 @@ L_08A3F6B8: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_16 = (ctx.gpr[7] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3F938; } @@ -7670,7 +7860,6 @@ L_08A3F8E8: L_08A3F938: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3FA04; } @@ -7729,7 +7918,6 @@ L_08A3F944: L_08A3FA04: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3FA38; } @@ -7760,7 +7948,17 @@ L_08A3FA38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FA50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7778,7 +7976,6 @@ L_08A3FA50: goto L_08A3FA80; L_08A3FA80: aot_gpr_31 = (0x08A3FA88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3FA88u) goto L_08A3FA88; AOT_REGCACHE_SYNC_OUT(); return; L_08A3FA88: @@ -7802,7 +7999,17 @@ L_08A3FA98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FAAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7820,7 +8027,6 @@ L_08A3FAAC: goto L_08A3FADC; L_08A3FADC: aot_gpr_31 = (0x08A3FAE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A3FAE4u) goto L_08A3FAE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A3FAE4: @@ -7844,7 +8050,17 @@ L_08A3FAF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FB08: aot_gpr_4 = (0u | 44u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(9960), static_cast(aot_gpr_4)); @@ -7867,7 +8083,17 @@ L_08A3FB08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FB50: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7921,11 +8147,20 @@ L_08A3FB50: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FB78: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7951,11 +8186,20 @@ L_08A3FB78: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FB90: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -7974,11 +8218,20 @@ L_08A3FB90: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FBAC: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -7997,11 +8250,20 @@ L_08A3FBAC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FBC8: aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_4 + static_cast(3), aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load_word_right(aot_gpr_4 + static_cast(0), aot_gpr_6)); @@ -8021,7 +8283,17 @@ L_08A3FBC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FC04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load_word_left(aot_gpr_5 + static_cast(3), aot_gpr_6)); @@ -8042,7 +8314,17 @@ L_08A3FC04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FC44: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -8125,7 +8407,6 @@ L_08A3FD04: goto L_08A3FD14; L_08A3FD14: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A3FD4C; } @@ -8161,7 +8442,6 @@ L_08A3FD4C: L_08A3FD64: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A3FDA8; } @@ -8202,7 +8482,17 @@ L_08A3FDA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FDD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[8]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8253,7 +8543,6 @@ L_08A3FE4C: goto L_08A3FE5C; L_08A3FE5C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A3FE94; } @@ -8287,7 +8576,6 @@ L_08A3FE94: L_08A3FEA4: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A3FEF4; } @@ -8318,7 +8606,6 @@ L_08A3FEDC: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A3FEF4; } @@ -8339,7 +8626,6 @@ L_08A3FEF4: L_08A3FF0C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A3FF98; } @@ -8348,7 +8634,6 @@ L_08A3FF0C: L_08A3FF18: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A3FF98; } @@ -8406,7 +8691,17 @@ L_08A3FF98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A3FFC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0143.cpp b/profiles/vcs/generated/generated_unit_0143.cpp index 911dfb5..0bfd8df 100644 --- a/profiles/vcs/generated/generated_unit_0143.cpp +++ b/profiles/vcs/generated/generated_unit_0143.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0143[4076] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 7, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, - 0, 24, 25, 0, 0, 0, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 36, 0, 0, 0, 0, 37, 0, 0, 38, 0, 39, - 0, 0, 40, 0, 41, 0, 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, 45, 0, 46, 47, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 51, 52, 0, 53, 0, 0, 0, 0, - 0, 54, 0, 0, 55, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 0, 0, 0, 64, 0, 65, 0, 0, 66, - 0, 67, 68, 0, 0, 0, 69, 0, 70, 0, 0, 71, 0, 72, 73, 0, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 77, - 0, 0, 0, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, - 83, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 96, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, - 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 110, 0, 0, 111, 0, 0, 0, 0, 0, 112, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, - 0, 0, 0, 122, 0, 123, 0, 124, 0, 125, 0, 0, 0, 0, 126, 0, 0, 0, 127, 0, 128, 0, 129, 0, 130, 0, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, - 140, 0, 0, 0, 141, 0, 0, 0, 142, 0, 143, 0, 144, 0, 0, 0, 145, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, - 0, 0, 0, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 0, 154, 0, 155, 0, 0, 0, 156, 0, 0, 0, 157, - 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 162, 0, 163, 0, 164, 0, - 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, - 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 186, - 0, 187, 0, 0, 0, 188, 0, 189, 0, 0, 190, 0, 191, 0, 192, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 197, 0, 0, 198, - 0, 199, 0, 0, 0, 200, 0, 201, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 205, 0, 206, 0, 0, 0, 0, 207, - 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 210, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, 0, 0, - 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 222, 0, 223, - 0, 0, 0, 0, 224, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 227, 0, 228, 0, 229, 0, 0, 0, 0, 0, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 235, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, - 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 261, 0, 262, 0, 0, 0, - 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 269, 0, 270, 0, - 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 282, 0, 283, 0, 0, 0, 284, 0, 0, 0, 0, - 0, 285, 0, 286, 0, 0, 287, 0, 288, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, - 0, 294, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, - 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 307, 0, 0, - 0, 308, 0, 309, 0, 310, 0, 0, 0, 0, 0, 311, 0, 312, 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, - 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 320, 321, 0, 0, 0, 322, 0, 323, 0, 0, 0, 324, 0, 325, 0, 0, 0, 326, 0, 327, 0, 0, - 0, 328, 0, 329, 0, 0, 0, 330, 0, 331, 0, 0, 332, 0, 0, 0, 333, 0, 334, 0, 0, 0, 335, 0, 336, 0, 0, 0, 0, 337, 0, 338, - 339, 0, 0, 340, 0, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, - 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, - 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 365, 366, 0, 0, 0, 0, 0, 0, - 0, 367, 0, 0, 0, 0, 368, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 0, - 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 380, 0, 381, 382, 0, 383, - 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 387, 388, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, - 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, - 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 405, 0, 0, 0, - 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 410, 0, 411, 412, - 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, - 0, 415, 0, 416, 0, 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 431, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 438, 439, 0, 0, 0, 440, 0, 0, 441, 0, 0, 0, 442, 0, 443, 0, - 444, 0, 445, 0, 446, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 450, - 0, 451, 0, 0, 452, 0, 0, 0, 0, 453, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 0, 459, 0, - 0, 0, 460, 461, 0, 462, 0, 463, 0, 0, 0, 0, 0, 464, 465, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 468, 469, 0, - 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, - 475, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, - 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, - 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, - 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 0, 0, - 0, 0, 530, 0, 0, 0, 0, 531, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 535, 0, - 536, 0, 0, 537, 0, 538, 539, 0, 0, 540, 0, 541, 0, 0, 542, 0, 543, 544, 0, 0, 0, 545, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, - 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 548, 0, 549, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 556, 0, 557, 0, 0, 0, 0, - 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 561, 0, 562, 0, 563, 0, 564, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 0, 571, 0, 572, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 578, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 584, 0, 0, 585, 0, 0, 586, 587, 0, 588, 0, 0, 589, - 0, 0, 590, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 0, 594, 0, 0, 595, 0, 0, 596, 0, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, - 0, 599, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 603, 0, 604, 0, 605, - 0, 606, 0, 607, 0, 608, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 0, 614, 615, 0, 0, 616, 617, 0, 0, 618, 0, 619, 0, 620, 0, 621, - 0, 622, 0, 623, 0, 0, 624, 0, 0, 625, 0, 0, 626, 0, 0, 627, 0, 0, 628, 0, 0, 629, 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, - 0, 632, 0, 633, 0, 634, 0, 0, 635, 0, 636, 0, 637, 0, 638, 0, 0, 639, 0, 0, 640, 0, 0, 641, 0, 0, 642, 0, 0, 643, 0, 0, - 644, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 648, 0, 649, 0, 0, 650, 0, 651, 0, 652, 0, 0, 653, 0, 0, 654, 0, 0, - 655, 0, 0, 656, 0, 0, 657, 0, 0, 658, 0, 0, 659, 0, 0, 0, 0, 0, 660, 0, 0, 661, 0, 662, 0, 663, 0, 0, 664, 665, 0, 666, - 0, 0, 0, 667, 0, 668, 0, 669, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 0, 0, 673, 0, 674, 0, 0, 675, 0, 0, 676, - 0, 0, 677, 0, 0, 678, 0, 0, 679, 0, 0, 680, 0, 0, 681, 0, 0, 682, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, 687, 688, 0, 0, 0, - 0, 0, 689, 0, 0, 690, 0, 691, 692, 0, 693, 0, 694, 0, 0, 695, 0, 696, 0, 697, 0, 698, 0, 699, 0, 700, 0, 0, 701, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, 0, 0, 704, 0, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 708, - 0, 0, 0, 709, 0, 0, 0, 710, 0, 711, 0, 712, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0143[64] = { + 0x002020402A480209ull, 0x1112444051002080ull, 0x0800000104010506ull, 0x010D2854A42A8080ull, + 0x942AAA520B480000ull, 0x5000220889086946ull, 0x1100000041050009ull, 0x0000000240000800ull, + 0x800004440A224540ull, 0x8248000200420000ull, 0x808A000840810004ull, 0x49140148095442A8ull, + 0x88A8892010511511ull, 0x800B555554422002ull, 0x945254A284155424ull, 0x0A0818A0852120A2ull, + 0x00000210A8001155ull, 0x0001060000060AA0ull, 0x0008101000200084ull, 0x0084040000420200ull, + 0x0210100001080800ull, 0x0840004005002000ull, 0x0040000415000001ull, 0x08B5555552020050ull, + 0x0004082A22100B4Aull, 0x2200400284080402ull, 0x0000080A0828282Aull, 0xA145128A28A28D00ull, + 0x0211015442211089ull, 0x0000800480000400ull, 0x0140010000000000ull, 0x0340000000002050ull, + 0xB410881014015542ull, 0x08A0A95540002D48ull, 0xD200200A10800084ull, 0x1000006A20000008ull, + 0x0001000A00004000ull, 0x4010008400800500ull, 0x5123080010820424ull, 0x45012A12A1000055ull, + 0x000000016800E0ACull, 0x8000140904800500ull, 0x5000000000202808ull, 0x0002020000140800ull, + 0x0005020014000000ull, 0x2800000000048080ull, 0x0000000010020400ull, 0x0000004100000002ull, + 0x0001400008080810ull, 0x0000011400008000ull, 0x00A0000404040880ull, 0x0004000040000001ull, + 0x5200028404800002ull, 0x0811280804234A69ull, 0xAA4040080A200082ull, 0x0148140500000400ull, + 0x801100000A014014ull, 0x02924924964A4000ull, 0xAA66556AAA000222ull, 0x2492552A4124924Aull, + 0xB2A4124924A95209ull, 0x20124924928842A8ull, 0x12AA95A41A400000ull, 0x00000A8888888A00ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0143[64] = { + 1u, 12u, 24u, 32u, 49u, 67u, 83u, 91u, 94u, 106u, 113u, 122u, 140u, 158u, 177u, 199u, + 215u, 226u, 235u, 241u, 247u, 253u, 259u, 265u, 285u, 299u, 308u, 319u, 339u, 354u, 358u, 361u, + 367u, 384u, 402u, 413u, 420u, 424u, 431u, 444u, 460u, 471u, 480u, 486u, 491u, 496u, 501u, 504u, + 507u, 513u, 517u, 524u, 527u, 536u, 553u, 565u, 573u, 582u, 599u, 622u, 644u, 667u, 685u, 702u, }; void recomp_unit_0143_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0143_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A40000u; - entry_id = (entry_delta < 16304u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0143[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16304u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0143[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0143[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A40000; @@ -936,7 +843,6 @@ L_08A40024: L_08A4004C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4006C; } @@ -945,7 +851,6 @@ L_08A4004C: L_08A40058: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40074; } @@ -953,7 +858,6 @@ L_08A40058: } L_08A40064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A400B4; } @@ -961,7 +865,6 @@ L_08A40064: } L_08A4006C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A400B4; } @@ -1047,7 +950,17 @@ L_08A400B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A400D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1116,7 +1029,6 @@ L_08A40160: goto L_08A40170; L_08A40170: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A401A8; } @@ -1150,7 +1062,6 @@ L_08A401A8: L_08A401B8: ctx.gpr[30] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A40208; } @@ -1181,7 +1092,6 @@ L_08A401F0: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A40208; } @@ -1201,7 +1111,6 @@ L_08A40208: AOT_REGCACHE_SYNC_OUT(); return; L_08A40220: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A40268; } @@ -1349,7 +1258,17 @@ L_08A402EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4031C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1358,7 +1277,6 @@ L_08A4031C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A40354; } @@ -1366,12 +1284,10 @@ L_08A4031C: } L_08A4033C: aot_gpr_31 = (0x08A40344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40344u) goto L_08A40344; AOT_REGCACHE_SYNC_OUT(); return; L_08A40344: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A40354; } @@ -1390,7 +1306,6 @@ L_08A40354: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A403C8; } @@ -1404,7 +1319,6 @@ L_08A40368: AOT_REGCACHE_SYNC_OUT(); return; L_08A40374: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A40398; } @@ -1423,7 +1337,6 @@ L_08A40388: AOT_REGCACHE_SYNC_OUT(); return; L_08A40390: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A403B4; } @@ -1434,7 +1347,6 @@ L_08A40398: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40368; } @@ -1442,7 +1354,6 @@ L_08A40398: } L_08A403AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A403C8; } @@ -1456,7 +1367,6 @@ L_08A403B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A403C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A403CC; } @@ -1477,7 +1387,17 @@ L_08A403CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A403E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[18]); @@ -1508,7 +1428,6 @@ L_08A403E0: L_08A4044C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A40464; } @@ -1516,7 +1435,6 @@ L_08A4044C: } L_08A40458: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A40464; } @@ -1527,7 +1445,6 @@ L_08A40460: goto L_08A40464; L_08A40464: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A404C4; } @@ -1545,7 +1462,6 @@ L_08A4046C: L_08A40484: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A404BC; } @@ -1553,7 +1469,6 @@ L_08A40484: } L_08A40490: aot_gpr_31 = (0x08A40498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40498u) goto L_08A40498; AOT_REGCACHE_SYNC_OUT(); return; L_08A40498: @@ -1575,7 +1490,6 @@ L_08A404AC: goto L_08A404B4; L_08A404B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A40560; } @@ -1583,7 +1497,6 @@ L_08A404B4: } L_08A404BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A406F0; } @@ -1591,7 +1504,6 @@ L_08A404BC: } L_08A404C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A406F0; } @@ -1599,7 +1511,6 @@ L_08A404C4: } L_08A404CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A404E8; } @@ -1610,7 +1521,6 @@ L_08A404D4: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A40560; } @@ -1630,7 +1540,6 @@ L_08A404F0: goto L_08A404FC; L_08A404FC: aot_gpr_31 = (0x08A40504u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40504u) goto L_08A40504; AOT_REGCACHE_SYNC_OUT(); return; L_08A40504: @@ -1645,7 +1554,6 @@ L_08A40508: AOT_REGCACHE_SYNC_OUT(); return; L_08A40518: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A40560; } @@ -1660,7 +1568,6 @@ L_08A40520: goto L_08A4052C; L_08A4052C: aot_gpr_31 = (0x08A40534u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40534u) goto L_08A40534; AOT_REGCACHE_SYNC_OUT(); return; L_08A40534: @@ -1707,7 +1614,6 @@ L_08A4058C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A405F0; } @@ -1745,7 +1651,6 @@ L_08A405F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A405F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A406F0; } @@ -1754,7 +1659,6 @@ L_08A405F8: L_08A40600: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A406F0; } @@ -1777,7 +1681,6 @@ L_08A4060C: goto L_08A40640; L_08A40640: aot_gpr_31 = (0x08A40648u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40648u) goto L_08A40648; AOT_REGCACHE_SYNC_OUT(); return; L_08A40648: @@ -1786,7 +1689,6 @@ L_08A40648: aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A40660u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40660u) goto L_08A40660; AOT_REGCACHE_SYNC_OUT(); return; L_08A40660: @@ -1795,7 +1697,6 @@ L_08A40660: aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A40678u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40678u) goto L_08A40678; AOT_REGCACHE_SYNC_OUT(); return; L_08A40678: @@ -1830,7 +1731,6 @@ L_08A406E0: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40640; } @@ -1858,7 +1758,17 @@ L_08A406F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4072C: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(132), ctx.gpr[19]); @@ -1881,7 +1791,6 @@ L_08A4072C: L_08A40778: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A40820; } @@ -1930,7 +1839,6 @@ L_08A40784: } L_08A40818: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A40844; } @@ -1938,7 +1846,6 @@ L_08A40818: } L_08A40820: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A40958; } @@ -1973,7 +1880,6 @@ L_08A40854: goto L_08A40864; L_08A40864: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A40898; } @@ -2095,7 +2001,17 @@ L_08A40958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40984: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[18]); @@ -2120,7 +2036,6 @@ L_08A40984: L_08A409CC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A40A40; } @@ -2129,7 +2044,6 @@ L_08A409CC: L_08A409D8: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A40A40; } @@ -2147,7 +2061,6 @@ L_08A409E4: L_08A409FC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A40A40; } @@ -2184,7 +2097,17 @@ L_08A40A40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40A5C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2200,11 +2123,20 @@ L_08A40A5C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40A78: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); @@ -2221,11 +2153,20 @@ L_08A40A78: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -2240,7 +2181,6 @@ L_08A40A8C: aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A40ACC; } @@ -2268,27 +2208,33 @@ L_08A40ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40AFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A40B0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 644u, 0x08872BB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B0Cu) goto L_08A40B0C; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B0C: aot_gpr_31 = (0x08A40B14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0121_entry, 121u, 237u, 0x089E92B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B14u) goto L_08A40B14; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B14: aot_gpr_31 = (0x08A40B1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 28u, 0x088802E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B1Cu) goto L_08A40B1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B1C: aot_gpr_31 = (0x08A40B24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 777u, 0x08ACE658u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B24u) goto L_08A40B24; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B24: @@ -2300,27 +2246,33 @@ L_08A40B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40B38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A40B48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 678u, 0x08872F84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B48u) goto L_08A40B48; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B48: aot_gpr_31 = (0x08A40B50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0121_entry, 121u, 478u, 0x089EAA94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B50u) goto L_08A40B50; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B50: aot_gpr_31 = (0x08A40B58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 338u, 0x08881FD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B58u) goto L_08A40B58; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B58: aot_gpr_31 = (0x08A40B60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 835u, 0x08ACEA1Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40B60u) goto L_08A40B60; AOT_REGCACHE_SYNC_OUT(); return; L_08A40B60: @@ -2330,7 +2282,17 @@ L_08A40B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40B6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -2348,7 +2310,6 @@ L_08A40B6C: L_08A40B8C: aot_gpr_4 = (static_cast(aot_gpr_5) < 54 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40BA0; } @@ -2368,7 +2329,6 @@ L_08A40BA0: aot_gpr_4 = (aot_gpr_4 + static_cast(-31073)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A40BD0; } @@ -2422,12 +2382,10 @@ L_08A40C10: goto L_08A40C20; L_08A40C20: aot_gpr_31 = (0x08A40C28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 458u, 0x088DF74Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40C28u) goto L_08A40C28; AOT_REGCACHE_SYNC_OUT(); return; L_08A40C28: { const bool branch_taken = ctx.gpr[16] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A40C58; } @@ -2451,7 +2409,6 @@ L_08A40C40: goto L_08A40C50; L_08A40C50: aot_gpr_31 = (0x08A40C58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 458u, 0x088DF74Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40C58u) goto L_08A40C58; AOT_REGCACHE_SYNC_OUT(); return; L_08A40C58: @@ -2467,7 +2424,17 @@ L_08A40C58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40C70: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2511,12 +2478,10 @@ L_08A40CBC: goto L_08A40CCC; L_08A40CCC: aot_gpr_31 = (0x08A40CD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 460u, 0x088DF770u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40CD4u) goto L_08A40CD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A40CD4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A40D04; } @@ -2540,7 +2505,6 @@ L_08A40CEC: goto L_08A40CFC; L_08A40CFC: aot_gpr_31 = (0x08A40D04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 460u, 0x088DF770u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40D04u) goto L_08A40D04; AOT_REGCACHE_SYNC_OUT(); return; L_08A40D04: @@ -2562,7 +2526,17 @@ L_08A40D04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40D34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2579,7 +2553,17 @@ L_08A40D44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40D58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 28u); @@ -2664,7 +2648,6 @@ L_08A40DA8: } L_08A40DB0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A40DC0; } @@ -2683,11 +2666,20 @@ L_08A40DC0: goto L_08A40DC4; L_08A40DC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40DCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2709,7 +2701,6 @@ L_08A40DCC: L_08A40DFC: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A40E40; } @@ -2718,7 +2709,6 @@ L_08A40DFC: L_08A40E08: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A40E38; } @@ -2742,7 +2732,6 @@ L_08A40E28: } L_08A40E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A40FAC; } @@ -2766,7 +2755,6 @@ L_08A40E40: } L_08A40E48: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A40E94; } @@ -2794,7 +2782,6 @@ L_08A40E68: AOT_REGCACHE_SYNC_OUT(); return; L_08A40E7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A40E94; } @@ -2809,7 +2796,6 @@ L_08A40E84: AOT_REGCACHE_SYNC_OUT(); return; L_08A40E94: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A40EC4; } @@ -2818,7 +2804,6 @@ L_08A40E94: L_08A40E9C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A40EC4; } @@ -2826,12 +2811,10 @@ L_08A40E9C: } L_08A40EA8: aot_gpr_31 = (0x08A40EB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40EB0u) goto L_08A40EB0; AOT_REGCACHE_SYNC_OUT(); return; L_08A40EB0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A40EC4; } @@ -2845,7 +2828,6 @@ L_08A40EB8: L_08A40EC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A40ED8; } @@ -2859,7 +2841,6 @@ L_08A40ED8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); aot_gpr_5 = (static_cast(aot_gpr_4) < 25000 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A40F40; } @@ -2867,7 +2848,6 @@ L_08A40ED8: } L_08A40EE8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A40F40; } @@ -2876,7 +2856,6 @@ L_08A40EE8: L_08A40EF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40F34; } @@ -2884,7 +2863,6 @@ L_08A40EF0: } L_08A40EFC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A40F34; } @@ -2894,7 +2872,6 @@ L_08A40F04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40F34; } @@ -2902,16 +2879,13 @@ L_08A40F04: } L_08A40F14: aot_gpr_31 = (0x08A40F1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A40F1Cu) goto L_08A40F1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A40F1C: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A40F40; } @@ -2927,7 +2901,6 @@ L_08A40F40: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(8), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40F94; } @@ -2936,7 +2909,6 @@ L_08A40F40: L_08A40F54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A40F68; } @@ -2998,7 +2970,17 @@ L_08A40FB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A40FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -3021,7 +3003,6 @@ L_08A40FEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A41010; } @@ -3037,7 +3018,6 @@ L_08A41000: } L_08A41008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A41020; } @@ -3060,7 +3040,17 @@ L_08A41020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41030: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -3084,7 +3074,6 @@ L_08A41030: } L_08A4106C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A41090; } @@ -3092,7 +3081,6 @@ L_08A4106C: } L_08A41074: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A411A4; } @@ -3101,9 +3089,7 @@ L_08A41074: L_08A4107C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A411A4; } @@ -3112,9 +3098,7 @@ L_08A4107C: L_08A41090: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A411A4; } @@ -3205,7 +3189,6 @@ L_08A410A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A41114: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A411A4; } @@ -3219,7 +3202,6 @@ L_08A4111C: goto L_08A41124; L_08A41124: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A411A4; } @@ -3229,9 +3211,7 @@ L_08A4112C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A411A4; } @@ -3285,7 +3265,17 @@ L_08A411A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A411C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3391,7 +3381,6 @@ L_08A41254: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A41290u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 633u, 0x08A17C9Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A41290u) goto L_08A41290; AOT_REGCACHE_SYNC_OUT(); return; L_08A41290: @@ -3413,7 +3402,6 @@ L_08A41290: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A412B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A412B0u) goto L_08A412B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A412B0: @@ -3470,7 +3458,6 @@ L_08A41324: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A41344u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A41344u) goto L_08A41344; AOT_REGCACHE_SYNC_OUT(); return; L_08A41344: @@ -3523,7 +3510,6 @@ L_08A413A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A413C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A413C8u) goto L_08A413C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A413C8: @@ -3576,7 +3562,6 @@ L_08A4142C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A4144Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4144Cu) goto L_08A4144C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4144C: @@ -3629,7 +3614,6 @@ L_08A414B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A414D0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A414D0u) goto L_08A414D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A414D0: @@ -3681,14 +3665,33 @@ L_08A41534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41560: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41568: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), std::bit_cast(aot_fpr_20)); @@ -3774,7 +3777,6 @@ L_08A41600: } L_08A41660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A41688; } @@ -3782,7 +3784,6 @@ L_08A41660: } L_08A41668: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A41744; } @@ -3843,7 +3844,6 @@ L_08A41688: aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[8] | 0u); if (branch_taken) { @@ -3881,7 +3881,6 @@ L_08A416D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A41710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A41744; } @@ -3916,7 +3915,17 @@ L_08A41744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41764: aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; @@ -4008,7 +4017,6 @@ L_08A417B8: } L_08A417C0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A417D0; } @@ -4027,16 +4035,24 @@ L_08A417D0: goto L_08A417D4; L_08A417D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A417DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (aot_gpr_5 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A4180C; } @@ -4048,11 +4064,20 @@ L_08A417EC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6336))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41804: { const bool branch_taken = 0u == 0u; aot_gpr_2 = (0u | 1u); @@ -4064,7 +4089,6 @@ L_08A41804: L_08A4180C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A41820; } @@ -4083,11 +4107,20 @@ L_08A41820: goto L_08A41824; L_08A41824: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4182C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -4104,7 +4137,6 @@ L_08A41850: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(138))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A41884; } @@ -4114,7 +4146,6 @@ L_08A41864: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(190))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A41884; } @@ -4140,7 +4171,6 @@ L_08A41884: } L_08A4188C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A41A34; } @@ -4152,7 +4182,6 @@ L_08A41894: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A41A34; } @@ -4165,7 +4194,6 @@ L_08A418AC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A41A8C; } @@ -4197,7 +4225,6 @@ L_08A418C8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A41904u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A41904u) goto L_08A41904; AOT_REGCACHE_SYNC_OUT(); return; L_08A41904: @@ -4319,7 +4346,6 @@ L_08A41A04: goto L_08A41A0C; L_08A41A0C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A41A2C; } @@ -4336,7 +4362,6 @@ L_08A41A14: AOT_REGCACHE_SYNC_OUT(); return; L_08A41A2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A41A8C; } @@ -4355,7 +4380,6 @@ L_08A41A34: AOT_REGCACHE_SYNC_OUT(); return; L_08A41A4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A41A8C; } @@ -4367,7 +4391,6 @@ L_08A41A54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A41A8C; } @@ -4379,7 +4402,6 @@ L_08A41A6C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A41A8C; } @@ -4404,7 +4426,17 @@ L_08A41A8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); @@ -4448,7 +4480,6 @@ L_08A41B28: goto L_08A41B2C; L_08A41B2C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = ctx.fpr[15] + ctx.fpr[30]; goto L_08A41B44; @@ -4464,7 +4495,6 @@ L_08A41B3C: } L_08A41B44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = aot_fpr_14 - ctx.fpr[30]; goto L_08A41B5C; @@ -4480,7 +4510,6 @@ L_08A41B54: } L_08A41B5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = aot_fpr_14 + ctx.fpr[30]; goto L_08A41B74; @@ -4496,7 +4525,6 @@ L_08A41B6C: } L_08A41B74: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = aot_fpr_13 - ctx.fpr[30]; goto L_08A41B8C; @@ -4512,7 +4540,6 @@ L_08A41B84: } L_08A41B8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = aot_fpr_13 + ctx.fpr[30]; goto L_08A41BA4; @@ -4543,7 +4570,6 @@ L_08A41BB0: goto L_08A41BC0; L_08A41BC0: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08A41BD8; } @@ -4588,7 +4614,6 @@ L_08A41BFC: L_08A41C00: ctx.gpr[22] = (ctx.gpr[20] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4607,9 +4632,7 @@ L_08A41C0C: L_08A41C1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4617,9 +4640,7 @@ L_08A41C1C: } L_08A41C30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4628,9 +4649,7 @@ L_08A41C30: L_08A41C40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4638,9 +4657,7 @@ L_08A41C40: } L_08A41C54: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4649,9 +4666,7 @@ L_08A41C54: L_08A41C64: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4659,9 +4674,7 @@ L_08A41C64: } L_08A41C78: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4669,12 +4682,10 @@ L_08A41C78: } L_08A41C88: aot_gpr_31 = (0x08A41C90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A41C90u) goto L_08A41C90; AOT_REGCACHE_SYNC_OUT(); return; L_08A41C90: { const bool branch_taken = ctx.gpr[20] == aot_gpr_2; - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4682,7 +4693,6 @@ L_08A41C90: } L_08A41C98: aot_gpr_31 = (0x08A41CA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A41CA0u) goto L_08A41CA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A41CA0: @@ -4693,7 +4703,6 @@ L_08A41CA0: aot_gpr_4 = (aot_gpr_5 ^ aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A41CD0; } @@ -4741,7 +4750,17 @@ L_08A41CE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41D28: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (ctx.gpr[10] & 255u); @@ -4773,7 +4792,17 @@ L_08A41D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A41D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4938,7 +4967,6 @@ L_08A41EA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A41ED8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A41FE0; } @@ -4961,7 +4989,6 @@ L_08A41EE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A41F10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A41FE0; } @@ -4972,7 +4999,6 @@ L_08A41F18: aot_gpr_4 = (17146u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); goto L_08A41F34; @@ -5048,7 +5074,17 @@ L_08A41FE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42004: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5062,12 +5098,10 @@ L_08A42004: } L_08A42018: aot_gpr_31 = (0x08A42020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A42020u) goto L_08A42020; AOT_REGCACHE_SYNC_OUT(); return; L_08A42020: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A420AC; } @@ -5075,12 +5109,10 @@ L_08A42020: } L_08A42028: aot_gpr_31 = (0x08A42030u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A42030u) goto L_08A42030; AOT_REGCACHE_SYNC_OUT(); return; L_08A42030: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A420AC; } @@ -5088,7 +5120,6 @@ L_08A42030: } L_08A42038: aot_gpr_31 = (0x08A42040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A42040u) goto L_08A42040; AOT_REGCACHE_SYNC_OUT(); return; L_08A42040: @@ -5101,7 +5132,6 @@ L_08A42040: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A420AC; } @@ -5109,7 +5139,6 @@ L_08A42040: } L_08A42068: aot_gpr_31 = (0x08A42070u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A42070u) goto L_08A42070; AOT_REGCACHE_SYNC_OUT(); return; L_08A42070: @@ -5140,13 +5169,22 @@ L_08A420AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A420BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (aot_gpr_4 + static_cast(-19)); aot_gpr_5 = (aot_gpr_4 < static_cast(17) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A420F0; } @@ -5158,11 +5196,20 @@ L_08A420D0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A420E8: { const bool branch_taken = 0u == 0u; aot_gpr_2 = (0u | 1u); @@ -5176,16 +5223,24 @@ L_08A420F0: goto L_08A420F4; L_08A420F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A420FC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A42120; } @@ -5194,7 +5249,6 @@ L_08A420FC: L_08A4210C: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A42128; } @@ -5221,11 +5275,20 @@ L_08A42128: goto L_08A4212C; L_08A4212C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42134: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2236u << 16u); @@ -5267,7 +5330,6 @@ L_08A42188: goto L_08A42190; L_08A42190: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A421BC; } @@ -5275,7 +5337,6 @@ L_08A42190: } L_08A42198: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A421DC; } @@ -5284,7 +5345,6 @@ L_08A42198: L_08A421A0: aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A421BC; } @@ -5297,7 +5357,6 @@ L_08A421AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A421B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A421DC; } @@ -5309,7 +5368,6 @@ L_08A421BC: aot_gpr_4 = (aot_gpr_4 + static_cast(1400)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A421DC; } @@ -5327,7 +5385,17 @@ L_08A421DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A421EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); @@ -5416,7 +5484,17 @@ L_08A4225C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42270: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5427,7 +5505,6 @@ L_08A42270: AOT_REGCACHE_SYNC_OUT(); return; L_08A42284: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A422F8; } @@ -5461,7 +5538,6 @@ L_08A422B4: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(245))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A422F0; } @@ -5470,7 +5546,6 @@ L_08A422B4: L_08A422E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(246))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A422F8; } @@ -5495,7 +5570,17 @@ L_08A422FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4230C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -5519,9 +5604,7 @@ L_08A4230C: } L_08A42374: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[26])) && aot_fpr_13 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4238C; } @@ -5537,7 +5620,6 @@ L_08A42384: } L_08A4238C: aot_gpr_31 = (0x08A42394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A42394u) goto L_08A42394; AOT_REGCACHE_SYNC_OUT(); return; L_08A42394: @@ -5629,9 +5711,7 @@ L_08A42438: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4248C; } @@ -5686,9 +5766,7 @@ L_08A424C0: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A42528; } @@ -5726,9 +5804,7 @@ L_08A4255C: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A426D4; } @@ -5737,9 +5813,7 @@ L_08A4255C: L_08A42588: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A426D4; } @@ -5783,9 +5857,7 @@ L_08A4259C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A426D4; } @@ -5887,7 +5959,6 @@ L_08A426C4: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A425F8; } @@ -5911,7 +5982,6 @@ L_08A426E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A426F0: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A42700; } @@ -5939,7 +6009,6 @@ L_08A42708: goto L_08A42710; L_08A42710: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A42438; } @@ -5970,13 +6039,22 @@ L_08A42718: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42760: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A4277C; } @@ -5984,7 +6062,6 @@ L_08A42760: } L_08A42774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A42784; } @@ -6001,13 +6078,22 @@ L_08A42784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A427AC; } @@ -6015,7 +6101,6 @@ L_08A42790: } L_08A427A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A427B4; } @@ -6032,7 +6117,17 @@ L_08A427B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A427C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -6041,7 +6136,6 @@ L_08A427C0: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A42814; } @@ -6112,7 +6206,6 @@ L_08A4283C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A42874; } @@ -6135,7 +6228,17 @@ L_08A42878: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42880: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6198,7 +6301,6 @@ L_08A42880: ctx.fpr[22] = std::bit_cast(aot_gpr_5); aot_gpr_5 = (ctx.gpr[16] + static_cast(-19)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (ctx.gpr[8] | 0u); if (branch_taken) { @@ -6232,7 +6334,6 @@ L_08A42928: L_08A4295C: aot_gpr_6 = (aot_gpr_5 < static_cast(19) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A42E44; } @@ -6244,11 +6345,20 @@ L_08A42968: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6456))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42980: aot_gpr_4 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; @@ -6273,7 +6383,6 @@ L_08A4298C: } L_08A429A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A42E44; } @@ -6356,7 +6465,6 @@ L_08A42A0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A42A2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A42A54; } @@ -6460,9 +6568,7 @@ L_08A42A54: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[24] = ctx.fpr[24] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A42AF8; } @@ -6502,7 +6608,6 @@ L_08A42B2C: goto L_08A41568; L_08A42B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A42E44; } @@ -6642,9 +6747,7 @@ L_08A42BC4: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A42C70; } @@ -6684,7 +6787,6 @@ L_08A42CA4: goto L_08A41568; L_08A42CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A42E44; } @@ -6760,7 +6862,6 @@ L_08A42D1C: L_08A42D3C: aot_gpr_4 = (0u | 20u); { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A42E44; } @@ -6833,9 +6934,7 @@ L_08A42D48: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fpr[24] = ctx.fpr[24] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A42DF4; } @@ -6891,7 +6990,17 @@ L_08A42E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42E70: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6949,7 +7058,6 @@ L_08A42E70: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A42F04; @@ -7039,11 +7147,20 @@ L_08A42F80: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6536))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A42F98: aot_gpr_4 = (0u | 96u); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(80), static_cast(aot_gpr_4)); @@ -7094,7 +7211,6 @@ L_08A4302C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A4304Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4304Cu) goto L_08A4304C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4304C: @@ -7105,7 +7221,6 @@ L_08A4304C: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A4306Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4306Cu) goto L_08A4306C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4306C: @@ -7131,7 +7246,6 @@ L_08A4306C: AOT_REGCACHE_SYNC_OUT(); return; L_08A430B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A432DC; } @@ -7193,7 +7307,6 @@ L_08A4313C: AOT_REGCACHE_SYNC_OUT(); return; L_08A43188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A430B8; } @@ -7203,7 +7316,6 @@ L_08A43190: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (ctx.gpr[17] < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4322C; } @@ -7258,7 +7370,6 @@ L_08A4321C: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < static_cast(10) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A431A0; } @@ -7282,7 +7393,6 @@ L_08A43248: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(112), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A43268u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43268u) goto L_08A43268; AOT_REGCACHE_SYNC_OUT(); return; L_08A43268: @@ -7293,7 +7403,6 @@ L_08A43268: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A43288u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43288u) goto L_08A43288; AOT_REGCACHE_SYNC_OUT(); return; L_08A43288: @@ -7319,7 +7428,6 @@ L_08A43288: AOT_REGCACHE_SYNC_OUT(); return; L_08A432D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A430B8; } @@ -7341,7 +7449,17 @@ L_08A432DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A43300: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7474,7 +7592,6 @@ L_08A43404: L_08A4345C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43840; } @@ -7488,7 +7605,6 @@ L_08A43468: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4366C; } @@ -7507,7 +7623,6 @@ L_08A43488: } L_08A4349C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A43664; } @@ -7551,7 +7666,6 @@ L_08A434E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A434F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43568; } @@ -7571,7 +7685,6 @@ L_08A43500: goto L_08A4350C; L_08A4350C: aot_gpr_31 = (0x08A43514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43514u) goto L_08A43514; AOT_REGCACHE_SYNC_OUT(); return; L_08A43514: @@ -7585,7 +7698,6 @@ L_08A43518: AOT_REGCACHE_SYNC_OUT(); return; L_08A43524: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A43568; } @@ -7600,7 +7712,6 @@ L_08A4352C: goto L_08A43538; L_08A43538: aot_gpr_31 = (0x08A43540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43540u) goto L_08A43540; AOT_REGCACHE_SYNC_OUT(); return; L_08A43540: @@ -7645,7 +7756,6 @@ L_08A4358C: AOT_REGCACHE_SYNC_OUT(); return; L_08A435AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43664; } @@ -7654,7 +7764,6 @@ L_08A435AC: L_08A435B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43664; } @@ -7664,7 +7773,6 @@ L_08A435C0: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (ctx.gpr[17] < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43664; } @@ -7686,7 +7794,6 @@ L_08A435EC: aot_fpr_12 = aot_fpr_20 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A43604u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43604u) goto L_08A43604; AOT_REGCACHE_SYNC_OUT(); return; L_08A43604: @@ -7695,7 +7802,6 @@ L_08A43604: aot_fpr_12 = aot_fpr_20 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A4361Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4361Cu) goto L_08A4361C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4361C: @@ -7719,7 +7825,6 @@ L_08A43654: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A435D0; } @@ -7727,7 +7832,6 @@ L_08A43654: } L_08A43664: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A436B8; } @@ -7741,7 +7845,6 @@ L_08A4366C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A436B8; } @@ -7801,7 +7904,6 @@ L_08A436EC: } L_08A436F4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A43810; } @@ -7848,7 +7950,6 @@ L_08A43728: AOT_REGCACHE_SYNC_OUT(); return; L_08A43780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A438D0; } @@ -7867,7 +7968,6 @@ L_08A43788: AOT_REGCACHE_SYNC_OUT(); return; L_08A437A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A438D0; } @@ -7891,7 +7991,6 @@ L_08A437CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A437D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A438D0; } @@ -7912,7 +8011,6 @@ L_08A437E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A43808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A438D0; } @@ -7933,7 +8031,6 @@ L_08A43810: AOT_REGCACHE_SYNC_OUT(); return; L_08A43838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A438D0; } @@ -7956,7 +8053,6 @@ L_08A43840: AOT_REGCACHE_SYNC_OUT(); return; L_08A43864: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A438D0; } @@ -8022,7 +8118,17 @@ L_08A438D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A438FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8033,12 +8139,10 @@ L_08A438FC: ctx.gpr[19] = (ctx.gpr[17] | 0u); ctx.gpr[20] = (0u | 1u); aot_gpr_31 = (0x08A43938u); - // nop goto L_08A4031C; L_08A43938: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43968; } @@ -8046,13 +8150,11 @@ L_08A43938: } L_08A43944: aot_gpr_31 = (0x08A4394Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_089474C4, 80u, 661u, 0x089474C4u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0080_entry, 80u, 661u, 0x089474C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4394Cu) goto L_08A4394C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4394C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43968; } @@ -8061,7 +8163,6 @@ L_08A4394C: L_08A43958: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(340))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A43968; } @@ -8072,7 +8173,6 @@ L_08A43964: goto L_08A43968; L_08A43968: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A439E4; } @@ -8087,7 +8187,6 @@ L_08A43970: L_08A4397C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43994; } @@ -8107,7 +8206,6 @@ L_08A43994: L_08A439A0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A439B8; } @@ -8127,7 +8225,6 @@ L_08A439B8: L_08A439C4: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A439DC; } @@ -8140,7 +8237,6 @@ L_08A439D0: goto L_08A439DC; L_08A439DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A43DD0; } @@ -8161,7 +8257,6 @@ L_08A43A04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(104))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A43A6C; } @@ -8190,7 +8285,6 @@ L_08A43A24: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(112)))))); ctx.gpr[7] = (0u | 1u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A43A7C; } @@ -8206,7 +8300,6 @@ L_08A43A64: } L_08A43A6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A43DD0; } @@ -8214,7 +8307,6 @@ L_08A43A6C: } L_08A43A74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43AB8; } @@ -8232,7 +8324,6 @@ L_08A43A84: AOT_REGCACHE_SYNC_OUT(); return; L_08A43A8C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43A98; } @@ -8253,7 +8344,6 @@ L_08A43AA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A43AA8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43AD8; } @@ -8270,7 +8360,6 @@ L_08A43AB0: L_08A43AB8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(245))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43AC8; } @@ -8282,7 +8371,6 @@ L_08A43AC4: L_08A43AC8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(246))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43AD8; } @@ -8294,7 +8382,6 @@ L_08A43AD4: L_08A43AD8: aot_gpr_4 = (ctx.gpr[21] | ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A43AFC; } @@ -8312,7 +8399,6 @@ L_08A43AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08A43AF4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43D5C; } @@ -8334,7 +8420,6 @@ L_08A43B04: L_08A43B0C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43B24; } @@ -8354,7 +8439,6 @@ L_08A43B24: L_08A43B30: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43B48; } @@ -8374,7 +8458,6 @@ L_08A43B48: L_08A43B54: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43B78; } @@ -8384,9 +8467,7 @@ L_08A43B60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A43CF4; } @@ -8401,7 +8482,6 @@ L_08A43B78: goto L_08A43B84; L_08A43B84: aot_gpr_31 = (0x08A43B8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43B8Cu) goto L_08A43B8C; AOT_REGCACHE_SYNC_OUT(); return; L_08A43B8C: @@ -8424,7 +8504,6 @@ L_08A43BA0: } L_08A43BA8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A43C54; } @@ -8438,7 +8517,6 @@ L_08A43BB0: L_08A43BB8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43BD0; } @@ -8458,7 +8536,6 @@ L_08A43BD0: L_08A43BDC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43BF4; } @@ -8478,7 +8555,6 @@ L_08A43BF4: L_08A43C00: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43C24; } @@ -8488,9 +8564,7 @@ L_08A43C0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A43CF4; } @@ -8505,7 +8579,6 @@ L_08A43C24: goto L_08A43C30; L_08A43C30: aot_gpr_31 = (0x08A43C38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43C38u) goto L_08A43C38; AOT_REGCACHE_SYNC_OUT(); return; L_08A43C38: @@ -8534,7 +8607,6 @@ L_08A43C54: L_08A43C5C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43C74; } @@ -8554,7 +8626,6 @@ L_08A43C74: L_08A43C80: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43C98; } @@ -8574,7 +8645,6 @@ L_08A43C98: L_08A43CA4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43CC8; } @@ -8584,9 +8654,7 @@ L_08A43CB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A43CF4; } @@ -8601,7 +8669,6 @@ L_08A43CC8: goto L_08A43CD4; L_08A43CD4: aot_gpr_31 = (0x08A43CDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A43CDCu) goto L_08A43CDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A43CDC: @@ -8619,7 +8686,6 @@ L_08A43CF0: goto L_08A43CF4; L_08A43CF4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43D0C; } @@ -8629,7 +8695,6 @@ L_08A43CFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A43DD0; } @@ -8647,7 +8712,6 @@ L_08A43D14: AOT_REGCACHE_SYNC_OUT(); return; L_08A43D1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43DD0; } @@ -8658,7 +8722,6 @@ L_08A43D24: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43DD0; } @@ -8694,7 +8757,6 @@ L_08A43D64: L_08A43D70: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A43D88; } @@ -8714,7 +8776,6 @@ L_08A43D88: L_08A43D94: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43DAC; } @@ -8734,7 +8795,6 @@ L_08A43DAC: L_08A43DB8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A43DD0; } @@ -8761,7 +8821,17 @@ L_08A43DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A43DF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -8785,7 +8855,6 @@ L_08A43DF4: L_08A43E58: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43E70; } @@ -8793,7 +8862,6 @@ L_08A43E58: } L_08A43E64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43E70; } @@ -8814,7 +8882,6 @@ L_08A43E70: L_08A43E88: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43EA0; } @@ -8822,7 +8889,6 @@ L_08A43E88: } L_08A43E94: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43EA0; } @@ -8833,7 +8899,6 @@ L_08A43E9C: goto L_08A43EA0; L_08A43EA0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A43EDC; } @@ -8841,7 +8906,6 @@ L_08A43EA0: } L_08A43EA8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A43EDC; } @@ -8865,7 +8929,6 @@ L_08A43EC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A43ECC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A43EF0; } @@ -8881,7 +8944,6 @@ L_08A43ED4: } L_08A43EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0144_entry, 144u, 74u, 0x08A445D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8890,7 +8952,6 @@ L_08A43EDC: L_08A43EE4: aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A43F2C; } @@ -8914,7 +8975,6 @@ L_08A43EF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A43F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0144_entry, 144u, 57u, 0x08A443BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8924,7 +8984,6 @@ L_08A43F2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0144_entry, 144u, 8u, 0x08A440FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8934,7 +8993,6 @@ L_08A43F3C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A43FAC; } @@ -8944,7 +9002,6 @@ L_08A43F4C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A43FAC; } @@ -8954,7 +9011,6 @@ L_08A43F5C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 21u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A43FAC; } @@ -8964,7 +9020,6 @@ L_08A43F6C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A43F9C; } @@ -8974,7 +9029,6 @@ L_08A43F7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A43F9C; } @@ -8984,7 +9038,6 @@ L_08A43F8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0144_entry, 144u, 8u, 0x08A440FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8997,7 +9050,6 @@ L_08A43F9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A43FA4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0144_entry, 144u, 8u, 0x08A440FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0144.cpp b/profiles/vcs/generated/generated_unit_0144.cpp index df448ad..d826d6e 100644 --- a/profiles/vcs/generated/generated_unit_0144.cpp +++ b/profiles/vcs/generated/generated_unit_0144.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0144[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, - 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 19, 0, 0, - 20, 0, 21, 0, 0, 22, 0, 23, 0, 0, 24, 0, 25, 0, 0, 26, 0, 27, 28, 0, 29, 0, 0, 0, 0, 30, 0, 31, 0, 0, 32, 0, - 33, 34, 0, 0, 0, 35, 0, 36, 0, 0, 37, 0, 38, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 43, - 0, 0, 44, 0, 45, 0, 46, 0, 0, 47, 0, 48, 49, 0, 0, 0, 50, 0, 51, 0, 0, 52, 0, 53, 54, 0, 0, 0, 0, 55, 0, 0, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, - 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, - 0, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, - 0, 0, 0, 78, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 83, 0, 84, 0, 85, 0, 0, 0, 0, 0, 86, - 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, - 0, 93, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 99, 0, 100, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 110, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, - 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, 135, - 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 144, 0, - 145, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 156, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 161, - 0, 0, 162, 0, 163, 0, 0, 164, 0, 165, 0, 166, 0, 167, 0, 0, 168, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 172, - 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 175, - 0, 0, 176, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 182, 0, - 0, 0, 0, 183, 0, 0, 0, 184, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, - 189, 0, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 196, 0, 0, - 197, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 210, 0, 211, 0, 0, - 0, 0, 212, 0, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 0, 220, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 225, 0, 226, 227, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 228, 0, 0, 229, 0, 0, 0, 230, 0, 231, 0, 232, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, - 0, 0, 237, 0, 238, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 0, 242, 0, 243, 0, 244, 0, 245, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 249, 0, 250, 0, 251, 0, 0, 252, 0, 253, 0, 0, 0, 0, 0, 0, 254, 255, 0, 256, 0, 0, - 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 260, 0, 0, 261, 0, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, - 0, 265, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, - 270, 0, 271, 0, 0, 0, 0, 0, 0, 272, 273, 274, 0, 275, 0, 0, 0, 0, 276, 0, 277, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 283, 0, 284, 285, 0, 286, 0, 0, 0, 0, - 287, 288, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 294, 0, 295, 0, 296, 0, 297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, - 300, 301, 0, 0, 0, 302, 0, 0, 303, 0, 0, 0, 0, 0, 0, 304, 305, 0, 0, 0, 306, 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, - 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 313, 0, 0, 314, 0, 315, 0, 0, 0, 0, 316, - 0, 0, 317, 0, 0, 318, 0, 319, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 324, 325, 0, - 0, 0, 0, 0, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, - 0, 0, 334, 0, 335, 0, 336, 0, 0, 337, 0, 338, 0, 0, 0, 0, 339, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 0, 0, 343, 0, 344, - 0, 0, 345, 0, 346, 0, 347, 0, 0, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 0, - 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 358, 0, 359, 0, - 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 366, 0, 367, 0, 368, 0, 0, 0, 0, 369, 0, 370, 0, 371, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 374, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, 380, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 384, 0, 385, 0, 386, 0, 387, - 0, 388, 0, 389, 0, 0, 390, 0, 0, 0, 0, 391, 0, 0, 392, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, - 0, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 399, 0, 0, 400, 0, 0, 401, 0, 0, 0, 402, 0, 403, 404, 0, 405, 0, 406, 0, 0, 0, - 407, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 411, 0, 412, 0, 0, 0, 0, 0, 0, - 0, 413, 0, 414, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 418, 0, 419, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, - 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, - 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 440, 441, 0, 442, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 446, - 0, 447, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 0, 0, 455, 0, - 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 463, - 0, 0, 0, 464, 0, 465, 0, 466, 0, 0, 0, 0, 0, 467, 468, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 0, 474, 0, 0, 0, - 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 478, 0, 479, 0, 480, 0, 481, 0, 0, - 0, 482, 0, 0, 0, 483, 484, 0, 485, 0, 0, 486, 0, 487, 0, 488, 489, 0, 490, 0, 491, 0, 0, 0, 492, 0, 0, 493, 0, 494, 0, 495, - 0, 496, 0, 497, 0, 498, 0, 0, 499, 0, 500, 0, 501, 0, 502, 0, 0, 0, 503, 0, 0, 0, 504, 505, 0, 0, 506, 0, 0, 507, 0, 0, - 0, 508, 0, 0, 0, 0, 0, 0, 509, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 514, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, 517, 0, 518, 0, 0, 0, 0, 519, 0, 520, - 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 524, 0, 525, 0, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 0, 0, - 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 534, 0, 0, 535, 0, 0, 0, 0, 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 0, 0, 541, 542, 0, 543, 544, 0, 545, 0, 546, 0, 547, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 549, 0, 550, - 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 553, 0, 0, 554, 555, 0, 0, 0, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, - 559, 0, 0, 0, 560, 0, 0, 0, 561, 0, 0, 0, 562, 0, 563, 564, 0, 0, 0, 0, 0, 565, 566, 0, 0, 567, 0, 568, 0, 569, 0, 0, - 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 572, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 575, 0, 0, 576, 0, 577, 0, 0, 578, 0, 579, - 0, 0, 580, 0, 0, 581, 0, 582, 0, 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 587, 0, 588, 0, 589, 0, 590, 0, - 591, 0, 0, 592, 0, 593, 0, 594, 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 598, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, - 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 0, 606, 0, 607, 0, 0, 0, 608, 0, 609, 0, 0, 0, 0, 0, 0, 610, 0, 0, - 0, 0, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 0, 615, 0, 616, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 619, 0, 620, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 623, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, - 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 635, 0, - 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 638, 639, 0, 640, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 642, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, - 649, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 0, 655, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 660, 0, 661, 0, 0, - 662, 0, 663, 0, 664, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 667, 0, 668, 0, 669, 0, 670, 0, 0, 0, - 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 678, 0, 679, 0, 680, 0, 681, 0, 0, 0, 0, 0, 682, 0, 683, 0, 0, 0, 0, 684, 0, 0, 685, 0, 686, 0, 0, 0, 687, - 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 695, 0, 0, 0, 696, 0, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 700, 0, 0, 0, 701, 0, 0, 0, 0, - 0, 702, 0, 703, 0, 0, 0, 0, 0, 704, 0, 705, 0, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 709, 0, 710, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 712, 0, 0, 0, 0, 713, 0, 0, 0, 714, 715, 0, 716, 0, 0, 0, 0, 717, 0, 0, 0, - 0, 0, 718, 719, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 722, 723, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 725, 0, 0, 0, 0, 0, - 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 0, 0, 729, 0, 0, - 730, 0, 0, 0, 0, 731, 0, 0, 0, 732, 0, 733, 0, 734, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, - 0, 0, 0, 0, 0, 737, 738, 0, 0, 0, 0, 739, 0, 0, 0, 740, 741, 0, 742, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 744, 745, 0, - 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 748, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, - 0, 751, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 755, 0, 0, 756, 0, 0, 0, 757, 0, 758, 0, 759, 0, 760, 0, 0, 0, 0, - 0, 0, 761, 0, 762, 0, 763, 0, 0, 764, 0, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 774, 0, 0, 0, 0, 0, 775, 0, 776, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, - 0, 0, 0, 781, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 783, 784, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 787, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0144[64] = { + 0xA001040002001401ull, 0x29004010040100AAull, 0x888434A34A1694A5ull, 0x4044800421A51A54ull, + 0x0022100628000C44ull, 0x0010000100000010ull, 0x82A280A890000001ull, 0x0915000000000004ull, + 0x008000002A40088Aull, 0x0080A00020204802ull, 0x0400008004284280ull, 0x0008800080000800ull, + 0x4000200802008000ull, 0x20800500A5440822ull, 0x0125028152001400ull, 0x8103000A00820014ull, + 0x8400002088892A94ull, 0x1120048842440224ull, 0x2112904921121141ull, 0x2808102000004000ull, + 0x3510120048121544ull, 0x8110551200000000ull, 0x2C0A544410AA2494ull, 0x0090810241024A88ull, + 0x0B42A00001542E05ull, 0x180000002A8500ABull, 0x852240A012118123ull, 0x10902AA0682202A4ull, + 0x04491054A2490A54ull, 0x0140050452800242ull, 0x344880220028A855ull, 0x5005484AAA100100ull, + 0x02A0020915A24940ull, 0x108441010116404Aull, 0x4400580108040412ull, 0x820020000202D080ull, + 0x8444444445550102ull, 0x2A82101012AA60A8ull, 0x24C4552AA915A962ull, 0xA150400054000B02ull, + 0x0080000A15251088ull, 0xAB62AA0900010000ull, 0x11106444A8000000ull, 0xA5240C212A60D111ull, + 0x040A22A9551222A4ull, 0x1414A2A820514555ull, 0x4010040000002A40ull, 0x6000202800010101ull, + 0x4000000C00042C24ull, 0x2008000800008000ull, 0x0400000044810A01ull, 0x154204152C010040ull, + 0x0050008010002401ull, 0x400090048A4282A8ull, 0x0888888800500200ull, 0x00000000A0A08A0Aull, + 0x01A0004C10B10C00ull, 0x2048000806000000ull, 0x400000000000AA21ull, 0x800D000260858860ull, + 0x0AA2480020000082ull, 0x0000400000044254ull, 0x5050050008082000ull, 0x8809820840082800ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0144[64] = { + 1u, 9u, 20u, 44u, 61u, 72u, 75u, 87u, 93u, 102u, 110u, 118u, 122u, 127u, 140u, 152u, + 162u, 176u, 189u, 206u, 212u, 228u, 237u, 257u, 270u, 287u, 300u, 317u, 334u, 353u, 365u, 382u, + 397u, 413u, 427u, 438u, 447u, 464u, 482u, 508u, 521u, 533u, 548u, 559u, 580u, 600u, 621u, 628u, + 636u, 645u, 649u, 657u, 671u, 678u, 692u, 702u, 711u, 724u, 730u, 737u, 751u, 761u, 768u, 777u, }; void recomp_unit_0144_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0144_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A44000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0144[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0144[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0144[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A44000; @@ -966,7 +873,6 @@ L_08A44000: aot_fpr_14 = std::bit_cast(0u); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1044,7 +950,6 @@ L_08A440C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A440F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A443BC; } @@ -1057,7 +962,6 @@ L_08A440FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A44104: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A44388; } @@ -1070,7 +974,6 @@ L_08A4410C: AOT_REGCACHE_SYNC_OUT(); return; L_08A44114: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A44310; } @@ -1085,7 +988,6 @@ L_08A4411C: aot_gpr_4 = (ctx.gpr[17] + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A44248; } @@ -1101,7 +1003,6 @@ L_08A44140: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A441E0; } @@ -1117,7 +1018,6 @@ L_08A44168: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A441E0; } @@ -1133,7 +1033,6 @@ L_08A44190: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A441E0; } @@ -1149,7 +1048,6 @@ L_08A441B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A44248; } @@ -1163,7 +1061,6 @@ L_08A441E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A441EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44244; } @@ -1177,7 +1074,6 @@ L_08A441F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A44200: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44244; } @@ -1191,7 +1087,6 @@ L_08A44208: AOT_REGCACHE_SYNC_OUT(); return; L_08A44214: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44244; } @@ -1205,7 +1100,6 @@ L_08A4421C: AOT_REGCACHE_SYNC_OUT(); return; L_08A44228: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44244; } @@ -1219,7 +1113,6 @@ L_08A44230: AOT_REGCACHE_SYNC_OUT(); return; L_08A4423C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A44248; } @@ -1230,7 +1123,6 @@ L_08A44244: goto L_08A44248; L_08A44248: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A44308; } @@ -1241,7 +1133,6 @@ L_08A44250: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A44308; } @@ -1261,7 +1152,6 @@ L_08A4426C: goto L_08A44278; L_08A44278: aot_gpr_31 = (0x08A44280u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A44280u) goto L_08A44280; AOT_REGCACHE_SYNC_OUT(); return; L_08A44280: @@ -1276,7 +1166,6 @@ L_08A44284: AOT_REGCACHE_SYNC_OUT(); return; L_08A44294: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A442DC; } @@ -1291,7 +1180,6 @@ L_08A4429C: goto L_08A442A8; L_08A442A8: aot_gpr_31 = (0x08A442B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A442B0u) goto L_08A442B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A442B0: @@ -1316,7 +1204,6 @@ L_08A442DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A442FC; } @@ -1339,7 +1226,6 @@ L_08A442FC: goto L_08A44308; L_08A44308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A44388; } @@ -1359,7 +1245,6 @@ L_08A44318: goto L_08A44324; L_08A44324: aot_gpr_31 = (0x08A4432Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4432Cu) goto L_08A4432C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4432C: @@ -1374,7 +1259,6 @@ L_08A44330: AOT_REGCACHE_SYNC_OUT(); return; L_08A44340: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44388; } @@ -1389,7 +1273,6 @@ L_08A44348: goto L_08A44354; L_08A44354: aot_gpr_31 = (0x08A4435Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4435Cu) goto L_08A4435C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4435C: @@ -1429,7 +1312,6 @@ L_08A44388: L_08A443BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A445D0; } @@ -1471,7 +1353,6 @@ L_08A443F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A44428; } @@ -1481,7 +1362,6 @@ L_08A44408: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 21u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A44428; } @@ -1491,7 +1371,6 @@ L_08A44418: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4442C; } @@ -1551,7 +1430,6 @@ L_08A4442C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4446C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A444C4; } @@ -1561,7 +1439,6 @@ L_08A44474: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A444C4; } @@ -1588,7 +1465,6 @@ L_08A444B0: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A44488; } @@ -1598,7 +1474,6 @@ L_08A444C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(10))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A445D0; } @@ -1729,7 +1604,17 @@ L_08A445D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A44600: aot_gpr_29 = (aot_gpr_29 + static_cast(-432)); { const std::uint32_t aot_run_words[15]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1777,7 +1662,6 @@ L_08A4468C: } L_08A44694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -1797,7 +1681,6 @@ L_08A4469C: goto L_08A446BC; L_08A446BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A446DC; } @@ -1813,7 +1696,6 @@ L_08A446C4: goto L_08A446D4; L_08A446D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -1821,7 +1703,6 @@ L_08A446D4: } L_08A446DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -1839,7 +1720,6 @@ L_08A446E4: L_08A446FC: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A447C8; } @@ -1897,7 +1777,6 @@ L_08A44708: } L_08A447C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A447EC; } @@ -1905,7 +1784,6 @@ L_08A447C0: } L_08A447C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -1915,7 +1793,6 @@ L_08A447D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A447EC; } @@ -1945,7 +1822,6 @@ L_08A4480C: ctx.gpr[30] = (aot_gpr_2 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A44858; } @@ -1955,7 +1831,6 @@ L_08A4481C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A44858; } @@ -1978,7 +1853,6 @@ L_08A4482C: L_08A44858: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A44CB4; } @@ -1991,7 +1865,6 @@ L_08A44864: AOT_REGCACHE_SYNC_OUT(); return; L_08A4486C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A44CB4; } @@ -2098,7 +1971,6 @@ L_08A44954: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A44974u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A44974u) goto L_08A44974; AOT_REGCACHE_SYNC_OUT(); return; L_08A44974: @@ -2122,7 +1994,6 @@ L_08A44974: AOT_REGCACHE_SYNC_OUT(); return; L_08A449B4: aot_gpr_31 = (0x08A449BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A449BCu) goto L_08A449BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A449BC: @@ -2133,7 +2004,6 @@ L_08A449BC: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A449DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A449DCu) goto L_08A449DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A449DC: @@ -2157,7 +2027,6 @@ L_08A449DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A44A1C: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A44BBC; } @@ -2179,7 +2048,6 @@ L_08A44A38: aot_gpr_5 = (aot_gpr_5 + static_cast(17)); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A44A68; } @@ -2187,7 +2055,6 @@ L_08A44A38: } L_08A44A4C: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A44A9C; } @@ -2198,7 +2065,6 @@ L_08A44A54: aot_gpr_4 = (aot_gpr_4 + static_cast(17)); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A44A9C; } @@ -2362,7 +2228,6 @@ L_08A44BBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(64))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A44CB4; } @@ -2496,7 +2361,6 @@ L_08A44CB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A44EC8; } @@ -2505,7 +2369,6 @@ L_08A44CB4: L_08A44CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A44EC8; } @@ -2515,7 +2378,6 @@ L_08A44D04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A44EC8; } @@ -2525,9 +2387,7 @@ L_08A44D14: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1252))); ctx.fpr[24] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2538,9 +2398,7 @@ L_08A44D2C: aot_gpr_4 = (16880u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A44D58; } @@ -2548,9 +2406,7 @@ L_08A44D2C: } L_08A44D48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A44D7C; } @@ -2563,7 +2419,6 @@ L_08A44D58: AOT_REGCACHE_SYNC_OUT(); return; L_08A44D60: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2580,7 +2435,6 @@ L_08A44D68: } L_08A44D74: { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2593,7 +2447,6 @@ L_08A44D7C: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 11u); if (branch_taken) { @@ -2630,7 +2483,6 @@ L_08A44DDC: aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(456), aot_gpr_5); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A44E30; } @@ -2654,7 +2506,6 @@ L_08A44DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A44E28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A44E64; } @@ -2679,7 +2530,6 @@ L_08A44E30: L_08A44E64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A44EA4; } @@ -2692,7 +2542,6 @@ L_08A44E70: AOT_REGCACHE_SYNC_OUT(); return; L_08A44E78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A44EA4; } @@ -2710,7 +2559,6 @@ L_08A44E80: AOT_REGCACHE_SYNC_OUT(); return; L_08A44E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2728,7 +2576,6 @@ L_08A44EA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A44EC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2737,7 +2584,6 @@ L_08A44EC0: L_08A44EC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2746,7 +2592,6 @@ L_08A44EC8: L_08A44ED4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(352))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2760,7 +2605,6 @@ L_08A44EE0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 11u); if (branch_taken) { @@ -2797,7 +2641,6 @@ L_08A44F44: aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(456), aot_gpr_5); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A44F8C; } @@ -2817,7 +2660,6 @@ L_08A44F5C: AOT_REGCACHE_SYNC_OUT(); return; L_08A44F84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A44FC0; } @@ -2849,7 +2691,6 @@ L_08A44FC4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -2868,7 +2709,6 @@ L_08A44FE0: L_08A44FFC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4502C; } @@ -2876,7 +2716,6 @@ L_08A44FFC: } L_08A45008: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45024; } @@ -2885,7 +2724,6 @@ L_08A45008: L_08A45010: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08A45034; } @@ -2893,7 +2731,6 @@ L_08A45010: } L_08A4501C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -2901,7 +2738,6 @@ L_08A4501C: } L_08A45024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -2909,7 +2745,6 @@ L_08A45024: } L_08A4502C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -2918,7 +2753,6 @@ L_08A4502C: L_08A45034: ctx.gpr[17] = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(31))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -2927,7 +2761,6 @@ L_08A45034: L_08A45040: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4507C; } @@ -2937,7 +2770,6 @@ L_08A4504C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4507C; } @@ -2947,7 +2779,6 @@ L_08A4505C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4507C; } @@ -2957,7 +2788,6 @@ L_08A4506C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A452F4; } @@ -3001,7 +2831,6 @@ L_08A45094: L_08A450E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (0u | 3u); if (branch_taken) { @@ -3017,7 +2846,6 @@ L_08A450FC: L_08A45108: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A45158; } @@ -3037,9 +2865,7 @@ L_08A45124: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A451E0; } @@ -3049,7 +2875,6 @@ L_08A45148: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A451E0; } @@ -3058,7 +2883,6 @@ L_08A45148: L_08A45158: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A452F4; } @@ -3069,7 +2893,6 @@ L_08A45164: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A452F4; } @@ -3080,7 +2903,6 @@ L_08A45178: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A452F4; } @@ -3090,7 +2912,6 @@ L_08A4518C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A452F4; } @@ -3099,7 +2920,6 @@ L_08A4518C: L_08A4519C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A451D4; } @@ -3131,7 +2951,6 @@ L_08A451E0: ctx.gpr[18] = (0u | 200u); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A45260; } @@ -3141,7 +2960,6 @@ L_08A451F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A45260; } @@ -3153,7 +2971,6 @@ L_08A45200: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45244; } @@ -3214,7 +3031,6 @@ L_08A45274: L_08A45280: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A452E0; } @@ -3223,7 +3039,6 @@ L_08A45280: L_08A4528C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A452E0; } @@ -3235,7 +3050,6 @@ L_08A45298: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A452C4; } @@ -3249,7 +3063,6 @@ L_08A452B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A452BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A452D0; } @@ -3272,7 +3085,6 @@ L_08A452E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A45274; } @@ -3302,7 +3114,17 @@ L_08A452F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A45338: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[9]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3332,7 +3154,6 @@ L_08A45394: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45408; } @@ -3356,7 +3177,6 @@ L_08A453CC: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6284))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6288))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A453F4; } @@ -3364,7 +3184,6 @@ L_08A453CC: } L_08A453EC: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A45408; } @@ -3381,7 +3200,6 @@ L_08A45408: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A45428; } @@ -3389,7 +3207,6 @@ L_08A45408: } L_08A45418: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A45430; } @@ -3397,7 +3214,6 @@ L_08A45418: } L_08A45420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45450; } @@ -3442,7 +3258,6 @@ L_08A45450: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A454A4; } @@ -3451,7 +3266,6 @@ L_08A45450: L_08A4546C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A454A4; } @@ -3485,7 +3299,6 @@ L_08A45478: L_08A454A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45584; } @@ -3497,7 +3310,6 @@ L_08A454B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_gpr_4 = (17204u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_22 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3507,9 +3319,7 @@ L_08A454B0: } L_08A454D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A454E8; } @@ -3525,7 +3335,6 @@ L_08A454E0: } L_08A454E8: aot_gpr_31 = (0x08A454F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A454F0u) goto L_08A454F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A454F0: @@ -3576,7 +3385,6 @@ L_08A454F4: L_08A45584: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A455A0; } @@ -3586,7 +3394,6 @@ L_08A45590: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A455B0; } @@ -3600,7 +3407,6 @@ L_08A455A0: goto L_08A455A8; L_08A455A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45608; } @@ -3620,7 +3426,6 @@ L_08A455B8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45608; } @@ -3630,7 +3435,6 @@ L_08A455D0: aot_gpr_4 = (ctx.gpr[17] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A45608; } @@ -3663,7 +3467,6 @@ L_08A45608: L_08A45610: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45E3C; } @@ -3672,7 +3475,6 @@ L_08A45610: L_08A4561C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08A4565C; } @@ -3681,7 +3483,6 @@ L_08A4561C: L_08A45628: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A45654; } @@ -3691,7 +3492,6 @@ L_08A45634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A45654; } @@ -3704,7 +3504,6 @@ L_08A45644: AOT_REGCACHE_SYNC_OUT(); return; L_08A4564C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4565C; } @@ -3723,7 +3522,6 @@ L_08A4565C: aot_gpr_4 = (aot_gpr_4 + static_cast(-12)); aot_gpr_5 = (aot_gpr_4 < static_cast(27) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -3735,11 +3533,20 @@ L_08A45670: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6664))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A45688: aot_gpr_4 = (ctx.gpr[16] | 0u); aot_gpr_5 = (ctx.gpr[17] | 0u); @@ -3751,7 +3558,6 @@ L_08A45698: ctx.gpr[19] = (aot_gpr_2 | 0u); ctx.gpr[20] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -3759,12 +3565,10 @@ L_08A45698: } L_08A456A8: aot_gpr_31 = (0x08A456B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A456B0u) goto L_08A456B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A456B0: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A456CC; } @@ -3799,7 +3603,6 @@ L_08A456E8: goto L_08A456EC; L_08A456EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -3811,7 +3614,6 @@ L_08A456F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_6 = (0u | 34u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A4571C; } @@ -3821,7 +3623,6 @@ L_08A4570C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1976)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45744; } @@ -3829,12 +3630,10 @@ L_08A4570C: } L_08A4571C: aot_gpr_31 = (0x08A45724u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A45724u) goto L_08A45724; AOT_REGCACHE_SYNC_OUT(); return; L_08A45724: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A45744; } @@ -3862,7 +3661,6 @@ L_08A45744: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45808; } @@ -3874,7 +3672,6 @@ L_08A45760: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A457A0; } @@ -3883,7 +3680,6 @@ L_08A45760: L_08A45778: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A457A0; } @@ -3913,7 +3709,6 @@ L_08A457BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45800; } @@ -3922,7 +3717,6 @@ L_08A457BC: L_08A457D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45800; } @@ -3941,7 +3735,6 @@ L_08A457DC: goto L_08A45800; L_08A45800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45828; } @@ -3965,7 +3758,6 @@ L_08A45828: goto L_08A4582C; L_08A4582C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -3976,7 +3768,6 @@ L_08A45834: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A458EC; } @@ -3989,7 +3780,6 @@ L_08A45848: AOT_REGCACHE_SYNC_OUT(); return; L_08A45850: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A458EC; } @@ -4057,9 +3847,7 @@ L_08A45860: aot_gpr_4 = (16640u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A458C4; } @@ -4072,7 +3860,6 @@ L_08A458B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A458BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A458E0; } @@ -4099,7 +3886,6 @@ L_08A458E0: goto L_08A458E4; L_08A458E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45904; } @@ -4118,7 +3904,6 @@ L_08A45900: goto L_08A45904; L_08A45904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -4126,12 +3911,10 @@ L_08A45904: } L_08A4590C: aot_gpr_31 = (0x08A45914u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A45914u) goto L_08A45914; AOT_REGCACHE_SYNC_OUT(); return; L_08A45914: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A45948; } @@ -4162,7 +3945,6 @@ L_08A45948: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45A20; } @@ -4175,7 +3957,6 @@ L_08A4595C: AOT_REGCACHE_SYNC_OUT(); return; L_08A45964: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A45A20; } @@ -4252,7 +4033,6 @@ L_08A45974: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4265,9 +4045,7 @@ L_08A459EC: goto L_08A459F0; L_08A459F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A45A04; } @@ -4286,7 +4064,6 @@ L_08A45A04: L_08A45A14: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45A40; } @@ -4309,7 +4086,6 @@ L_08A45A40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45A94; } @@ -4343,7 +4119,6 @@ L_08A45A70: AOT_REGCACHE_SYNC_OUT(); return; L_08A45A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -4362,7 +4137,6 @@ L_08A45A9C: L_08A45AB8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -4378,7 +4152,6 @@ L_08A45AC4: L_08A45AD4: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -4394,7 +4167,6 @@ L_08A45AE8: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(12), ctx.gpr[19]); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(16), ctx.gpr[19]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -4414,7 +4186,6 @@ L_08A45B08: AOT_REGCACHE_SYNC_OUT(); return; L_08A45B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45B1C; } @@ -4422,7 +4193,6 @@ L_08A45B14: } L_08A45B1C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A45ECC; } @@ -4436,7 +4206,6 @@ L_08A45B24: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45BDC; } @@ -4446,7 +4215,6 @@ L_08A45B44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 38u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A45B78; } @@ -4463,7 +4231,6 @@ L_08A45B54: AOT_REGCACHE_SYNC_OUT(); return; L_08A45B6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A45B78; } @@ -4484,7 +4251,6 @@ L_08A45B78: AOT_REGCACHE_SYNC_OUT(); return; L_08A45B94: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A45BDC; } @@ -4497,7 +4263,6 @@ L_08A45B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A45BA4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A45BDC; } @@ -4515,7 +4280,6 @@ L_08A45BB4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45BDC; } @@ -4532,7 +4296,6 @@ L_08A45BDC: aot_gpr_4 = (aot_gpr_4 + static_cast(-12)); aot_gpr_5 = (aot_gpr_4 < static_cast(26) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A45C40; } @@ -4544,19 +4307,26 @@ L_08A45BF0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6776))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A45C08: aot_gpr_31 = (0x08A45C10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A45C10u) goto L_08A45C10; AOT_REGCACHE_SYNC_OUT(); return; L_08A45C10: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A45C24; } @@ -4569,7 +4339,6 @@ L_08A45C18: goto L_08A45C24; L_08A45C24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45C40; } @@ -4580,7 +4349,6 @@ L_08A45C2C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9324), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45C40; } @@ -4589,7 +4357,6 @@ L_08A45C2C: L_08A45C40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A45C58; } @@ -4603,7 +4370,6 @@ L_08A45C4C: L_08A45C58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A45CCC; } @@ -4613,7 +4379,6 @@ L_08A45C64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); aot_gpr_4 = (static_cast(aot_gpr_4) < 25000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A45C7C; } @@ -4621,7 +4386,6 @@ L_08A45C64: } L_08A45C74: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A45CCC; } @@ -4630,7 +4394,6 @@ L_08A45C74: L_08A45C7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A45CC0; } @@ -4638,7 +4401,6 @@ L_08A45C7C: } L_08A45C88: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A45CC0; } @@ -4646,16 +4408,13 @@ L_08A45C88: } L_08A45C90: aot_gpr_31 = (0x08A45C98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A45C98u) goto L_08A45C98; AOT_REGCACHE_SYNC_OUT(); return; L_08A45C98: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A45CC0; } @@ -4665,7 +4424,6 @@ L_08A45CB0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45CCC; } @@ -4679,7 +4437,6 @@ L_08A45CC0: L_08A45CCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A45D04; } @@ -4689,7 +4446,6 @@ L_08A45CD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45D04; } @@ -4710,7 +4466,6 @@ L_08A45D04: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(8), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A45E08; } @@ -4739,7 +4494,6 @@ L_08A45D24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45D70; } @@ -4777,12 +4531,10 @@ L_08A45D88: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(20), aot_gpr_4); aot_gpr_31 = (0x08A45DA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A45DA0u) goto L_08A45DA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A45DA0: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A45E00; } @@ -4800,7 +4552,6 @@ L_08A45DA8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(334))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45E00; } @@ -4831,7 +4582,6 @@ L_08A45E00: } L_08A45E08: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A45E2C; } @@ -4859,7 +4609,6 @@ L_08A45E2C: goto L_08A45E34; L_08A45E34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A45ECC; } @@ -4869,7 +4618,6 @@ L_08A45E3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); ctx.gpr[20] = (0u | 1u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A45EBC; } @@ -4892,7 +4640,6 @@ L_08A45E54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45EBC; } @@ -4902,7 +4649,6 @@ L_08A45E84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A45EBC; } @@ -4930,7 +4676,6 @@ L_08A45EBC: L_08A45ECC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A45EE8; } @@ -4940,7 +4685,6 @@ L_08A45ED8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A45EF0; } @@ -4975,7 +4719,17 @@ L_08A45EF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A45F20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5008,7 +4762,6 @@ L_08A45F64: } L_08A45F6C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A45F98; } @@ -5016,7 +4769,6 @@ L_08A45F6C: } L_08A45F74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46068; } @@ -5032,7 +4784,6 @@ L_08A45F7C: } L_08A45F84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46344; } @@ -5041,7 +4792,6 @@ L_08A45F84: L_08A45F8C: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(8), 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46344; } @@ -5069,7 +4819,6 @@ L_08A45FAC: } L_08A45FB8: { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A46020; } @@ -5077,7 +4826,6 @@ L_08A45FB8: } L_08A45FC0: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08A46020; } @@ -5101,7 +4849,6 @@ L_08A45FC8: } L_08A45FF0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A46020; } @@ -5125,7 +4872,6 @@ L_08A46018: L_08A46020: aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46060; } @@ -5134,7 +4880,6 @@ L_08A46020: L_08A4602C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4605C; } @@ -5143,7 +4888,6 @@ L_08A4602C: L_08A46038: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4605C; } @@ -5158,7 +4902,6 @@ L_08A46044: AOT_REGCACHE_SYNC_OUT(); return; L_08A46054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46060; } @@ -5169,7 +4912,6 @@ L_08A4605C: goto L_08A46060; L_08A46060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46344; } @@ -5177,7 +4919,6 @@ L_08A46060: } L_08A46068: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08A4631C; } @@ -5187,7 +4928,6 @@ L_08A46070: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_4 = (static_cast(aot_gpr_4) < 40 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4631C; } @@ -5196,7 +4936,6 @@ L_08A46070: L_08A46080: ctx.gpr[20] = (0u | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A46148; } @@ -5208,7 +4947,6 @@ L_08A4608C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46148; } @@ -5226,7 +4964,6 @@ L_08A460A4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(334))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A460E4; } @@ -5239,7 +4976,6 @@ L_08A460D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A460DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A46148; } @@ -5265,7 +5001,6 @@ L_08A46104: L_08A4610C: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A46148; } @@ -5294,7 +5029,6 @@ L_08A46144: goto L_08A46148; L_08A46148: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A462B8; } @@ -5304,7 +5038,6 @@ L_08A46150: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A462B8; } @@ -5316,9 +5049,7 @@ L_08A46160: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A462B8; } @@ -5344,16 +5075,24 @@ L_08A461A0: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[19]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6880))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A461B8: aot_gpr_5 = (2234u << 16u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(7816))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46210; } @@ -5364,7 +5103,6 @@ L_08A461C8: aot_gpr_5 = (aot_gpr_5 + static_cast(7816)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46210; } @@ -5375,7 +5113,6 @@ L_08A461DC: aot_gpr_5 = (aot_gpr_5 + static_cast(7816)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46210; } @@ -5386,7 +5123,6 @@ L_08A461F0: aot_gpr_5 = (aot_gpr_5 + static_cast(7816)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46210; } @@ -5401,9 +5137,7 @@ L_08A46210: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_fpr_14 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4626C; } @@ -5415,9 +5149,7 @@ L_08A46228: aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4626C; } @@ -5440,7 +5172,6 @@ L_08A4626C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A462B0; } @@ -5455,9 +5186,7 @@ L_08A46280: aot_gpr_5 = (aot_gpr_5 | 26214u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A462B0; } @@ -5468,7 +5197,6 @@ L_08A462AC: goto L_08A462B0; L_08A462B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4631C; } @@ -5486,7 +5214,6 @@ L_08A462B8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7668))); aot_gpr_6 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A4631C; } @@ -5496,7 +5223,6 @@ L_08A462E8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A4631C; } @@ -5519,7 +5245,6 @@ L_08A4631C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4633C; } @@ -5535,7 +5260,6 @@ L_08A46338: goto L_08A4633C; L_08A4633C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46344; } @@ -5556,7 +5280,17 @@ L_08A46344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A46364: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5596,7 +5330,6 @@ L_08A463E4: goto L_08A463FC; L_08A463FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46458; } @@ -5629,12 +5362,10 @@ L_08A46420: goto L_08A46440; L_08A46440: aot_gpr_31 = (0x08A46448u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0886D4BC, 26u, 206u, 0x0886D4BCu>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0026_entry, 26u, 206u, 0x0886D4BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46448u) goto L_08A46448; AOT_REGCACHE_SYNC_OUT(); return; L_08A46448: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A46458; } @@ -5646,7 +5377,6 @@ L_08A46450: goto L_08A46458; L_08A46458: aot_gpr_31 = (0x08A46460u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46460u) goto L_08A46460; AOT_REGCACHE_SYNC_OUT(); return; L_08A46460: @@ -5659,7 +5389,6 @@ L_08A46468: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5669,7 +5398,6 @@ L_08A46478: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5679,7 +5407,6 @@ L_08A46488: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5689,7 +5416,6 @@ L_08A46498: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5699,7 +5425,6 @@ L_08A464A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5709,7 +5434,6 @@ L_08A464B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5719,7 +5443,6 @@ L_08A464C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A464E8; } @@ -5756,7 +5479,6 @@ L_08A464FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A46534; } @@ -5764,7 +5486,6 @@ L_08A464FC: } L_08A4650C: aot_gpr_31 = (0x08A46514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46514u) goto L_08A46514; AOT_REGCACHE_SYNC_OUT(); return; L_08A46514: @@ -5798,7 +5519,6 @@ L_08A46544: goto L_08A4654C; L_08A4654C: aot_gpr_31 = (0x08A46554u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46554u) goto L_08A46554; AOT_REGCACHE_SYNC_OUT(); return; L_08A46554: @@ -5825,7 +5545,6 @@ L_08A46570: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4798C; } @@ -5902,7 +5621,6 @@ L_08A46614: goto L_08A46618; L_08A46618: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4666C; } @@ -5922,7 +5640,6 @@ L_08A4662C: AOT_REGCACHE_SYNC_OUT(); return; L_08A46634: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A46648; } @@ -5933,7 +5650,6 @@ L_08A4663C: goto L_08A46640; L_08A46640: { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A4666C; } @@ -5941,14 +5657,12 @@ L_08A46640: } L_08A46648: aot_gpr_31 = (0x08A46650u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46650u) goto L_08A46650; AOT_REGCACHE_SYNC_OUT(); return; L_08A46650: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4666C; } @@ -5970,7 +5684,6 @@ L_08A4666C: AOT_REGCACHE_SYNC_OUT(); return; L_08A46674: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A466A0; } @@ -5991,7 +5704,6 @@ L_08A46684: AOT_REGCACHE_SYNC_OUT(); return; L_08A4668C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A466A0; } @@ -6045,7 +5757,6 @@ L_08A466D8: L_08A466DC: aot_gpr_4 = (0u | 55u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A4672C; } @@ -6073,7 +5784,6 @@ L_08A46704: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4672C; } @@ -6168,9 +5878,7 @@ L_08A46778: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A47964; } @@ -6190,7 +5898,6 @@ L_08A467B8: } L_08A467D0: { const bool branch_taken = ctx.gpr[19] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A467F4; } @@ -6198,7 +5905,6 @@ L_08A467D0: } L_08A467D8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4681C; } @@ -6209,7 +5915,6 @@ L_08A467E0: ctx.gpr[7] = (8192u << 16u); aot_gpr_6 = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A4681C; } @@ -6217,7 +5922,6 @@ L_08A467E0: } L_08A467F4: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A46854; } @@ -6227,7 +5931,6 @@ L_08A467FC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2236))); ctx.gpr[7] = (0u | 28u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A4681C; } @@ -6237,7 +5940,6 @@ L_08A4680C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2236))); ctx.gpr[7] = (0u | 24u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A46854; } @@ -6285,7 +5987,6 @@ L_08A46854: } L_08A46860: { const bool branch_taken = ctx.gpr[19] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A46870; } @@ -6300,7 +6001,6 @@ L_08A46870: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(52))); ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A469A4; } @@ -6308,7 +6008,6 @@ L_08A46870: } L_08A46884: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A468DC; } @@ -6364,7 +6063,6 @@ L_08A4688C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46940; } @@ -6479,9 +6177,7 @@ L_08A46940: aot_fpr_14 = std::bit_cast(ctx.gpr[7]); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4698C; } @@ -6490,7 +6186,6 @@ L_08A46940: L_08A46980: ctx.gpr[21] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A469A4; } @@ -6502,7 +6197,6 @@ L_08A4698C: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(52))); ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A46884; } @@ -6510,7 +6204,6 @@ L_08A4698C: } L_08A469A4: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A469BC; } @@ -6559,7 +6252,6 @@ L_08A469E0: goto L_08A469E4; L_08A469E4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A47964; } @@ -6691,7 +6383,6 @@ L_08A46AB8: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(952), static_cast(aot_gpr_4)); aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A46B30; } @@ -6701,7 +6392,6 @@ L_08A46AD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46B30; } @@ -6711,7 +6401,6 @@ L_08A46AE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46B30; } @@ -6721,7 +6410,6 @@ L_08A46AF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46B30; } @@ -6731,7 +6419,6 @@ L_08A46B00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46B30; } @@ -6741,7 +6428,6 @@ L_08A46B10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46B30; } @@ -6751,7 +6437,6 @@ L_08A46B20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A46B38; } @@ -6772,9 +6457,7 @@ L_08A46B3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A46B58; } @@ -6799,7 +6482,6 @@ L_08A46B64: AOT_REGCACHE_SYNC_OUT(); return; L_08A46B6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A46C1C; } @@ -6808,7 +6490,6 @@ L_08A46B6C: L_08A46B74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46C1C; } @@ -6830,7 +6511,6 @@ L_08A46B94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A46C1C; } @@ -6852,7 +6532,6 @@ L_08A46BAC: L_08A46BC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46BE8; } @@ -6866,7 +6545,6 @@ L_08A46BD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A46BE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A46C14; } @@ -6880,7 +6558,6 @@ L_08A46BE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A46BF4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A46C14; } @@ -6908,7 +6585,6 @@ L_08A46C14: } L_08A46C1C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A46C50; } @@ -6918,7 +6594,6 @@ L_08A46C24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46C50; } @@ -6928,7 +6603,6 @@ L_08A46C34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A46C50; } @@ -6952,7 +6626,6 @@ L_08A46C50: } L_08A46C60: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A46E18; } @@ -6965,7 +6638,6 @@ L_08A46C68: AOT_REGCACHE_SYNC_OUT(); return; L_08A46C70: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A46C94; } @@ -6973,7 +6645,6 @@ L_08A46C70: } L_08A46C78: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A46C94; } @@ -6982,7 +6653,6 @@ L_08A46C78: L_08A46C80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(968))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46C94; } @@ -7003,7 +6673,6 @@ L_08A46C94: AOT_REGCACHE_SYNC_OUT(); return; L_08A46C9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A46D08; } @@ -7013,7 +6682,6 @@ L_08A46CA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(3261)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46D08; } @@ -7023,7 +6691,6 @@ L_08A46CB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(960))); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A46CE8; } @@ -7066,7 +6733,6 @@ L_08A46D00: } L_08A46D08: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A46D20; } @@ -7079,7 +6745,6 @@ L_08A46D10: AOT_REGCACHE_SYNC_OUT(); return; L_08A46D18: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A46D38; } @@ -7087,7 +6752,6 @@ L_08A46D18: } L_08A46D20: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A46D94; } @@ -7097,7 +6761,6 @@ L_08A46D28: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A46D94; } @@ -7105,7 +6768,6 @@ L_08A46D28: } L_08A46D38: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A46D94; } @@ -7115,7 +6777,6 @@ L_08A46D40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(960))); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A46D74; } @@ -7186,7 +6847,6 @@ L_08A46DB4: L_08A46DBC: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A46DD0; } @@ -7212,7 +6872,6 @@ L_08A46DD0: goto L_08A46DE8; L_08A46DE8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A46E18; } @@ -7234,7 +6893,6 @@ L_08A46DF0: L_08A46E18: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4736C; } @@ -7247,7 +6905,6 @@ L_08A46E24: AOT_REGCACHE_SYNC_OUT(); return; L_08A46E2C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4736C; } @@ -7357,7 +7014,6 @@ L_08A46F20: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(192), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A46F40u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46F40u) goto L_08A46F40; AOT_REGCACHE_SYNC_OUT(); return; L_08A46F40: @@ -7384,7 +7040,6 @@ L_08A46F40: AOT_REGCACHE_SYNC_OUT(); return; L_08A46F8C: aot_gpr_31 = (0x08A46F94u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46F94u) goto L_08A46F94; AOT_REGCACHE_SYNC_OUT(); return; L_08A46F94: @@ -7395,7 +7050,6 @@ L_08A46F94: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(192), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A46FB4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A46FB4u) goto L_08A46FB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A46FB4: @@ -7424,7 +7078,6 @@ L_08A46FF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A47268; } @@ -7444,7 +7097,6 @@ L_08A47014: aot_gpr_4 = (aot_gpr_4 + static_cast(17)); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A47048; } @@ -7656,7 +7308,6 @@ L_08A471CC: L_08A471F4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_08A4725C; } @@ -7676,7 +7327,6 @@ L_08A47200: AOT_REGCACHE_SYNC_OUT(); return; L_08A47224: aot_gpr_31 = (0x08A4722Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4722Cu) goto L_08A4722C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4722C: @@ -7709,7 +7359,6 @@ L_08A47268: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(64))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4736C; } @@ -7833,7 +7482,6 @@ L_08A47368: goto L_08A4736C; L_08A4736C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4768C; } @@ -7858,7 +7506,6 @@ L_08A47380: } L_08A47388: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A4756C; } @@ -7868,9 +7515,7 @@ L_08A47390: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4768C; } @@ -7881,7 +7526,6 @@ L_08A473A8: aot_gpr_4 = (16880u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16880u << 16u); if (branch_taken) { @@ -7892,9 +7536,7 @@ L_08A473A8: L_08A473C4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A47400; } @@ -7907,7 +7549,6 @@ L_08A473D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A473E0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4768C; } @@ -7915,7 +7556,6 @@ L_08A473E0: } L_08A473E8: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A47400; } @@ -7925,7 +7565,6 @@ L_08A473F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4768C; } @@ -7939,7 +7578,6 @@ L_08A47400: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -7984,7 +7622,6 @@ L_08A47470: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A474D8; } @@ -8008,7 +7645,6 @@ L_08A4749C: AOT_REGCACHE_SYNC_OUT(); return; L_08A474D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4750C; } @@ -8058,7 +7694,6 @@ L_08A47524: AOT_REGCACHE_SYNC_OUT(); return; L_08A4753C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A47558; } @@ -8080,7 +7715,6 @@ L_08A47558: AOT_REGCACHE_SYNC_OUT(); return; L_08A47564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4768C; } @@ -8090,7 +7724,6 @@ L_08A4756C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4768C; } @@ -8099,7 +7732,6 @@ L_08A4756C: L_08A4757C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(968))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4768C; } @@ -8113,7 +7745,6 @@ L_08A47588: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -8158,7 +7789,6 @@ L_08A475F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A47658; } @@ -8180,7 +7810,6 @@ L_08A47624: AOT_REGCACHE_SYNC_OUT(); return; L_08A47650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4768C; } @@ -8206,7 +7835,6 @@ L_08A4768C: aot_gpr_4 = (0u | 4u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(8), aot_gpr_4); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4777C; } @@ -8216,7 +7844,6 @@ L_08A4769C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A476DC; } @@ -8226,7 +7853,6 @@ L_08A476AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A476DC; } @@ -8236,7 +7862,6 @@ L_08A476BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A476DC; } @@ -8246,7 +7871,6 @@ L_08A476CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4772C; } @@ -8256,7 +7880,6 @@ L_08A476DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4770C; } @@ -8273,7 +7896,6 @@ L_08A476EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A47704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A47964; } @@ -8290,7 +7912,6 @@ L_08A4770C: AOT_REGCACHE_SYNC_OUT(); return; L_08A47724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A47964; } @@ -8300,7 +7921,6 @@ L_08A4772C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4775C; } @@ -8317,7 +7937,6 @@ L_08A4773C: AOT_REGCACHE_SYNC_OUT(); return; L_08A47754: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A47964; } @@ -8334,7 +7953,6 @@ L_08A4775C: AOT_REGCACHE_SYNC_OUT(); return; L_08A47774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A47964; } @@ -8525,7 +8143,6 @@ L_08A47968: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A46590; } @@ -8564,7 +8181,6 @@ L_08A4798C: L_08A479CC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A47C74; } @@ -8577,7 +8193,6 @@ L_08A479D8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A47C74; } @@ -8586,7 +8201,6 @@ L_08A479D8: L_08A479F4: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(352))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A47A2C; } @@ -8611,7 +8225,6 @@ L_08A47A14: AOT_REGCACHE_SYNC_OUT(); return; L_08A47A24: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A47A34; } @@ -8627,7 +8240,6 @@ L_08A47A2C: } L_08A47A34: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A47C74; } @@ -8680,7 +8292,6 @@ L_08A47A3C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(8))); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(450), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A47AF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A47AF8u) goto L_08A47AF8; AOT_REGCACHE_SYNC_OUT(); return; L_08A47AF8: @@ -8796,7 +8407,6 @@ L_08A47BCC: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(449), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A47C04; } @@ -8876,7 +8486,6 @@ L_08A47C74: L_08A47CAC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0145_entry, 145u, 30u, 0x08A481F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8885,7 +8494,6 @@ L_08A47CAC: L_08A47CB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0145_entry, 145u, 30u, 0x08A481F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8895,12 +8503,10 @@ L_08A47CC4: aot_gpr_4 = (0u | 4u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(8), aot_gpr_4); aot_gpr_31 = (0x08A47CD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A47CD4u) goto L_08A47CD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A47CD4: { const bool branch_taken = ctx.gpr[20] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A47D24; } @@ -8913,7 +8519,6 @@ L_08A47CDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A47CE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A47D24; } @@ -8942,7 +8547,6 @@ L_08A47CEC: AOT_REGCACHE_SYNC_OUT(); return; L_08A47D08: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08A47D24; } @@ -8950,7 +8554,6 @@ L_08A47D08: } L_08A47D10: aot_gpr_31 = (0x08A47D18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A47D18u) goto L_08A47D18; AOT_REGCACHE_SYNC_OUT(); return; L_08A47D18: @@ -8964,7 +8567,6 @@ L_08A47D24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A47E4C; } @@ -8974,7 +8576,6 @@ L_08A47D38: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A47E4C; } @@ -9076,7 +8677,6 @@ L_08A47E4C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A47EF8; } @@ -9122,7 +8722,6 @@ L_08A47EA8: AOT_REGCACHE_SYNC_OUT(); return; L_08A47ED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A47F78; } @@ -9202,9 +8801,7 @@ L_08A47F4C: L_08A47F78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A47FA4; } @@ -9222,9 +8819,7 @@ L_08A47FA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A47FC0; } @@ -9236,7 +8831,6 @@ L_08A47FBC: L_08A47FC0: ctx.gpr[17] = (0u | 2u); aot_gpr_31 = (0x08A47FCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A47FCCu) goto L_08A47FCC; AOT_REGCACHE_SYNC_OUT(); return; L_08A47FCC: @@ -9257,7 +8851,6 @@ L_08A47FEC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0145_entry, 145u, 30u, 0x08A481F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0145.cpp b/profiles/vcs/generated/generated_unit_0145.cpp index a6ee453..281c1cb 100644 --- a/profiles/vcs/generated/generated_unit_0145.cpp +++ b/profiles/vcs/generated/generated_unit_0145.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0145[4093] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, - 22, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, 27, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, - 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 51, 0, 52, 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, - 63, 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 68, 69, 0, 0, 70, 0, 71, 0, 72, 0, 73, - 0, 74, 75, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 0, 81, 0, - 82, 0, 83, 0, 0, 0, 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 0, 94, - 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 99, 0, 100, 0, 0, 101, 0, 0, 0, 0, 0, 0, - 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, - 0, 110, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 115, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 119, 0, 120, 0, 0, 0, 121, - 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 126, 0, 127, 0, 0, 0, - 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 130, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 133, 0, 134, 0, 0, 0, - 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 0, 140, 0, 0, 0, 141, 0, 142, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, - 0, 0, 0, 145, 0, 146, 0, 147, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, - 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 155, 0, 156, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 160, - 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 0, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, - 0, 179, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, - 191, 192, 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 197, 0, - 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 200, 0, 201, 0, 202, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, - 208, 0, 0, 0, 209, 0, 210, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 214, 0, 0, 0, 0, 0, 215, 216, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 223, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, - 0, 227, 0, 228, 0, 229, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, 0, 0, 0, - 0, 0, 236, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 239, 0, 240, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 245, 246, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 253, 254, 0, 0, 0, 0, 0, 255, 0, 256, 0, 0, 0, - 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 267, 0, 0, 268, 0, 269, 0, - 0, 270, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 273, 0, 274, 0, 0, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 285, 0, 286, - 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 292, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 296, 0, 0, 0, 297, 0, 0, 298, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, - 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 309, 0, 310, 0, 311, - 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, - 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, - 0, 0, 322, 0, 0, 0, 323, 0, 324, 0, 325, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, - 330, 0, 331, 0, 0, 0, 0, 0, 0, 332, 333, 0, 334, 0, 0, 0, 0, 0, 0, 335, 0, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, - 341, 0, 0, 0, 342, 0, 343, 0, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 347, 348, 0, 0, 349, 0, 350, 0, 351, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 358, - 359, 0, 360, 0, 0, 361, 0, 0, 362, 0, 363, 0, 0, 364, 0, 365, 0, 366, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 370, 0, - 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, 0, 0, 373, 0, 374, 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, - 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 387, 0, 0, 0, 0, 388, 0, 0, 389, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 394, 0, 395, - 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, 399, 0, 0, 400, 0, 401, 402, 0, 0, 403, 0, 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, - 0, 0, 0, 407, 0, 0, 0, 408, 0, 0, 0, 409, 0, 410, 0, 0, 411, 0, 412, 413, 0, 0, 414, 0, 415, 0, 0, 416, 0, 417, 418, 0, - 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 425, - 0, 0, 0, 0, 0, 426, 0, 427, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 0, 0, 0, 434, 0, - 0, 0, 435, 436, 0, 437, 438, 0, 0, 0, 439, 0, 0, 0, 0, 0, 440, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 443, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 0, 453, 0, 0, 0, - 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, - 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 471, 0, 472, 0, 0, 473, 0, 0, 474, 0, 475, 0, 0, 476, 0, 477, - 478, 0, 0, 0, 0, 0, 479, 0, 480, 0, 0, 481, 0, 482, 483, 0, 0, 0, 0, 0, 484, 485, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, - 488, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 492, 0, 0, 0, 493, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, - 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 500, 0, 501, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, - 0, 0, 0, 0, 0, 504, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 509, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 0, 0, 523, 0, - 0, 0, 0, 0, 0, 524, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, - 532, 0, 0, 0, 533, 0, 0, 0, 534, 0, 535, 0, 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, - 539, 0, 0, 0, 540, 0, 541, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 544, 0, - 0, 0, 545, 0, 0, 546, 547, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 552, 0, 0, 553, 0, 0, 0, 0, 554, - 0, 0, 0, 555, 0, 556, 0, 557, 0, 558, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 561, 0, 0, 0, 0, 562, 0, 0, 0, - 563, 564, 0, 565, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 568, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 570, 0, 571, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 576, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 581, 0, 582, - 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 586, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 0, 590, 0, 591, 0, - 0, 0, 0, 592, 0, 0, 0, 593, 0, 594, 0, 595, 0, 596, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 599, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 600, 0, 601, 0, 602, 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 606, 0, - 607, 0, 608, 0, 609, 0, 0, 610, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 616, 0, 617, 0, 618, 0, 619, 620, - 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, - 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 632, 0, 633, 0, 0, 0, 0, 634, 0, 635, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, - 0, 0, 638, 0, 0, 639, 640, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 643, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 653, 0, 654, 0, 0, - 655, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, - 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 664, 0, - 0, 665, 0, 0, 0, 0, 0, 666, 0, 667, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 0, 0, 673, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 677, 0, 678, 0, 0, 0, 0, 0, 0, - 679, 0, 0, 680, 0, 0, 0, 0, 0, 681, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 686, 0, - 687, 0, 688, 689, 0, 0, 0, 0, 0, 690, 0, 691, 0, 0, 692, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 698, 0, - 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 701, 0, 0, 702, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 709, 0, 0, 710, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 712, 0, - 713, 0, 714, 0, 0, 715, 0, 716, 0, 0, 0, 717, 0, 718, 0, 0, 0, 0, 0, 719, 0, 720, 0, 0, 721, 0, 722, 0, 723, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0145[64] = { + 0x1120044210910089ull, 0x4225208921121141ull, 0x0004000000890004ull, 0x0442440C04820000ull, + 0x1000084100000800ull, 0x100024000000006Aull, 0xAA60402B04090240ull, 0x0084048548402096ull, + 0x0252100995040500ull, 0x5408002222102942ull, 0x150021088A440800ull, 0x0100440414441202ull, + 0x800428A84020A280ull, 0xA000055000200880ull, 0x0002090801040040ull, 0x2002428010022224ull, + 0x0002000401101222ull, 0x4400228314100008ull, 0x0120000000035081ull, 0x0004415108000080ull, + 0xA022408800450608ull, 0x0488A8240A82052Aull, 0x0000010000000000ull, 0x1418A10001080980ull, + 0x521410A024022001ull, 0x0000020001814242ull, 0x48A816AAA4815240ull, 0x0000020800000000ull, + 0xAA00202041024008ull, 0x1202902040010082ull, 0x5548160511200D44ull, 0x891248002A622251ull, + 0x111141405222A525ull, 0x0000100024015111ull, 0x8429A50AAA010521ull, 0x88041484694D2888ull, + 0x43000000001520A0ull, 0x105000680013046Cull, 0x1400000311109000ull, 0x0000800002210001ull, + 0x0001280000020000ull, 0xA525080000008A00ull, 0x2051240904B06941ull, 0x00000220222A0428ull, + 0x000011000828A100ull, 0x2005000000008800ull, 0x010952A048884000ull, 0x5000015110041511ull, + 0x10C082A884A88464ull, 0x0105001A0004C10Bull, 0x5204AA04AA008204ull, 0x5002854014012A88ull, + 0xD540000800140495ull, 0x04A85012A022AA04ull, 0x2002002000A80264ull, 0x2900200200200200ull, + 0x0200401008000085ull, 0x0001028250010000ull, 0x028202028280A000ull, 0x4400040000800609ull, + 0x4202000100414A0Dull, 0x00000800100A4202ull, 0x0000000090200810ull, 0x152828A541000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0145[64] = { + 1u, 14u, 31u, 36u, 46u, 51u, 58u, 74u, 88u, 102u, 116u, 128u, 139u, 152u, 161u, 168u, + 179u, 187u, 198u, 206u, 214u, 227u, 244u, 245u, 257u, 270u, 278u, 299u, 301u, 312u, 322u, 341u, + 359u, 378u, 387u, 407u, 426u, 435u, 449u, 458u, 463u, 467u, 478u, 496u, 506u, 514u, 519u, 532u, + 545u, 563u, 576u, 592u, 607u, 621u, 638u, 648u, 655u, 662u, 669u, 679u, 687u, 699u, 706u, 711u, }; void recomp_unit_0145_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0145_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A48000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0145[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0145[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0145[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A48000; @@ -897,7 +804,6 @@ LOCAL_DISPATCH: L_08A48000: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A48050; } @@ -917,9 +823,7 @@ L_08A4801C: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A480E0; } @@ -929,7 +833,6 @@ L_08A48040: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A480E0; } @@ -938,7 +841,6 @@ L_08A48040: L_08A48050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A481F8; } @@ -949,7 +851,6 @@ L_08A4805C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A481F8; } @@ -960,7 +861,6 @@ L_08A48070: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A481F8; } @@ -971,7 +871,6 @@ L_08A48084: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A481F8; } @@ -981,7 +880,6 @@ L_08A48098: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(532)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A480D4; } @@ -1013,7 +911,6 @@ L_08A480E0: ctx.gpr[17] = (0u | 200u); ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A48160; } @@ -1023,7 +920,6 @@ L_08A480F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A48160; } @@ -1035,7 +931,6 @@ L_08A48100: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48144; } @@ -1081,7 +976,6 @@ L_08A48160: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A481F8; } @@ -1096,7 +990,6 @@ L_08A48174: L_08A48180: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A481E4; } @@ -1106,7 +999,6 @@ L_08A4818C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A481E4; } @@ -1118,7 +1010,6 @@ L_08A4819C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A481C8; } @@ -1132,7 +1023,6 @@ L_08A481B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A481C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A481D4; } @@ -1155,7 +1045,6 @@ L_08A481E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A48174; } @@ -1165,7 +1054,6 @@ L_08A481F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A483E8; } @@ -1202,7 +1090,6 @@ L_08A48208: L_08A48240: ctx.gpr[23] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A483E8; } @@ -1212,7 +1099,6 @@ L_08A4824C: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4835C; } @@ -1299,7 +1185,6 @@ L_08A48344: ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4825C; } @@ -1308,7 +1193,6 @@ L_08A48344: L_08A4835C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(970)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4838C; } @@ -1320,9 +1204,7 @@ L_08A48368: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(268))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4838C; } @@ -1338,7 +1220,6 @@ L_08A4838C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A483E8; } @@ -1348,7 +1229,6 @@ L_08A483A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(473))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A483C4; } @@ -1357,7 +1237,6 @@ L_08A483A8: L_08A483B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(478)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A483E8; } @@ -1401,7 +1280,17 @@ L_08A483E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4842C: aot_gpr_29 = (aot_gpr_29 + static_cast(-688)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1491,7 +1380,6 @@ L_08A484AC: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -1502,9 +1390,7 @@ L_08A484AC: L_08A484F0: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4850C; } @@ -1520,7 +1406,6 @@ L_08A48504: } L_08A4850C: aot_gpr_31 = (0x08A48514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48514u) goto L_08A48514; AOT_REGCACHE_SYNC_OUT(); return; L_08A48514: @@ -1564,7 +1449,6 @@ L_08A48518: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -1617,7 +1501,6 @@ L_08A485F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); goto L_08A48624; @@ -1637,7 +1520,6 @@ L_08A48624: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(164))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(164))); goto L_08A4864C; @@ -1657,9 +1539,7 @@ L_08A4864C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A48684; } @@ -1669,9 +1549,7 @@ L_08A48668: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(164))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A48684; } @@ -1682,12 +1560,10 @@ L_08A48680: goto L_08A48684; L_08A48684: aot_gpr_31 = (0x08A4868Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4868Cu) goto L_08A4868C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4868C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A486D8; } @@ -1700,7 +1576,6 @@ L_08A48694: aot_fpr_12 = aot_fpr_13 - aot_fpr_12; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A486B8; @@ -1711,9 +1586,7 @@ L_08A486B8: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-6272), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A486D8; } @@ -1725,12 +1598,10 @@ L_08A486D4: L_08A486D8: ctx.gpr[16] = (0u | 0u); aot_gpr_31 = (0x08A486E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A486E4u) goto L_08A486E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A486E4: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A48708; } @@ -1738,7 +1609,6 @@ L_08A486E4: } L_08A486EC: aot_gpr_31 = (0x08A486F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A486F4u) goto L_08A486F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A486F4: @@ -1748,7 +1618,6 @@ L_08A486F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A486FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A48708; } @@ -1759,7 +1628,6 @@ L_08A48704: goto L_08A48708; L_08A48708: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A48934; } @@ -1768,7 +1636,6 @@ L_08A48708: L_08A48710: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48758; } @@ -1780,7 +1647,6 @@ L_08A4871C: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48758; } @@ -1802,7 +1668,6 @@ L_08A48758: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A487DC; } @@ -1832,7 +1697,6 @@ L_08A48788: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A487C8; } @@ -1859,7 +1723,6 @@ L_08A487C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4876C; } @@ -1884,7 +1747,6 @@ L_08A487DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A48820: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A48880; } @@ -1898,7 +1760,6 @@ L_08A48828: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48880; } @@ -1910,7 +1771,6 @@ L_08A48848: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48880; } @@ -1923,7 +1783,6 @@ L_08A48860: AOT_REGCACHE_SYNC_OUT(); return; L_08A48868: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A48880; } @@ -1932,7 +1791,6 @@ L_08A48868: L_08A48870: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A48880; } @@ -1944,7 +1802,6 @@ L_08A4887C: L_08A48880: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A488B0; } @@ -1966,7 +1823,6 @@ L_08A488B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48918; } @@ -1980,7 +1836,6 @@ L_08A488C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A488D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A48904; } @@ -2007,7 +1862,6 @@ L_08A48904: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A488C4; } @@ -2015,7 +1869,6 @@ L_08A48904: } L_08A48918: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A4892C; } @@ -2032,7 +1885,6 @@ L_08A48920: } L_08A4892C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4949C; } @@ -2045,7 +1897,6 @@ L_08A48934: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48F14; } @@ -2056,7 +1907,6 @@ L_08A48950: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48F14; } @@ -2066,7 +1916,6 @@ L_08A48964: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A48994; } @@ -2076,7 +1925,6 @@ L_08A48974: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A48994; } @@ -2086,7 +1934,6 @@ L_08A48984: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(860))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48E60; } @@ -2117,7 +1964,6 @@ L_08A48994: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48A2C; } @@ -2130,7 +1976,6 @@ L_08A489CC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48A2C; } @@ -2138,12 +1983,10 @@ L_08A489CC: } L_08A489E8: aot_gpr_31 = (0x08A489F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A489F0u) goto L_08A489F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A489F0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A48A2C; } @@ -2186,7 +2029,6 @@ L_08A48A2C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48A6C; } @@ -2207,7 +2049,6 @@ L_08A48A58: AOT_REGCACHE_SYNC_OUT(); return; L_08A48A64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A48A7C; } @@ -2248,7 +2089,6 @@ L_08A48A8C: L_08A48AA0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A48AB4; @@ -2281,12 +2121,10 @@ L_08A48AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08A48AE0: aot_gpr_31 = (0x08A48AE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48AE8u) goto L_08A48AE8; AOT_REGCACHE_SYNC_OUT(); return; L_08A48AE8: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A48C78; } @@ -2295,9 +2133,7 @@ L_08A48AE8: L_08A48AF0: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A48C78; } @@ -2309,7 +2145,6 @@ L_08A48B04: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-6404))); aot_fpr_13 = aot_fpr_13 / ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A48B24; @@ -2318,7 +2153,6 @@ L_08A48B04: L_08A48B24: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_gpr_31 = (0x08A48B30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48B30u) goto L_08A48B30; AOT_REGCACHE_SYNC_OUT(); return; L_08A48B30: @@ -2327,14 +2161,12 @@ L_08A48B30: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_gpr_31 = (0x08A48B48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48B48u) goto L_08A48B48; AOT_REGCACHE_SYNC_OUT(); return; L_08A48B48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A48B68; } @@ -2348,7 +2180,6 @@ L_08A48B58: goto L_08A48B68; L_08A48B68: aot_gpr_31 = (0x08A48B70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48B70u) goto L_08A48B70; AOT_REGCACHE_SYNC_OUT(); return; L_08A48B70: @@ -2357,7 +2188,6 @@ L_08A48B70: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A48C1C; } @@ -2424,7 +2254,6 @@ L_08A48BE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A48C1C: aot_gpr_31 = (0x08A48C24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48C24u) goto L_08A48C24; AOT_REGCACHE_SYNC_OUT(); return; L_08A48C24: @@ -2464,7 +2293,6 @@ L_08A48C54: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A48D90; } @@ -2473,9 +2301,7 @@ L_08A48C54: L_08A48C78: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A48D90; } @@ -2483,12 +2309,10 @@ L_08A48C78: } L_08A48C8C: aot_gpr_31 = (0x08A48C94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48C94u) goto L_08A48C94; AOT_REGCACHE_SYNC_OUT(); return; L_08A48C94: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A48CFC; } @@ -2509,7 +2333,6 @@ L_08A48CAC: L_08A48CB4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A48CC8; @@ -2591,12 +2414,10 @@ L_08A48D54: AOT_REGCACHE_SYNC_OUT(); return; L_08A48D90: aot_gpr_31 = (0x08A48D98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48D98u) goto L_08A48D98; AOT_REGCACHE_SYNC_OUT(); return; L_08A48D98: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A48DA8; } @@ -2627,7 +2448,6 @@ L_08A48DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08A48DF4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A48E18; } @@ -2686,7 +2506,6 @@ L_08A48E48: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8072), static_cast(0u)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8423), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4949C; } @@ -2760,7 +2579,6 @@ L_08A48EC4: L_08A48F08: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8423), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4949C; } @@ -2770,7 +2588,6 @@ L_08A48F14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A48F44; } @@ -2780,7 +2597,6 @@ L_08A48F24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 263u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A48F44; } @@ -2790,7 +2606,6 @@ L_08A48F34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 173u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49200; } @@ -2818,7 +2633,6 @@ L_08A48F44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A49030; } @@ -2851,7 +2665,6 @@ L_08A48F70: AOT_REGCACHE_SYNC_OUT(); return; L_08A48F9C: aot_gpr_31 = (0x08A48FA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A48FA4u) goto L_08A48FA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A48FA4: @@ -2892,7 +2705,6 @@ L_08A48FC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 263u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49004; } @@ -2912,7 +2724,6 @@ L_08A49004: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 173u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49024; } @@ -3059,7 +2870,6 @@ L_08A49150: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49170; } @@ -3077,7 +2887,6 @@ L_08A49170: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49184; } @@ -3097,7 +2906,6 @@ L_08A49184: AOT_REGCACHE_SYNC_OUT(); return; L_08A4919C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A491F8; } @@ -3107,7 +2915,6 @@ L_08A491A4: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A491F8; } @@ -3132,7 +2939,6 @@ L_08A491E8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A491B4; } @@ -3140,7 +2946,6 @@ L_08A491E8: } L_08A491F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4949C; } @@ -3151,7 +2956,6 @@ L_08A49200: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); if (branch_taken) { @@ -3162,9 +2966,7 @@ L_08A49200: L_08A4921C: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49238; } @@ -3180,7 +2982,6 @@ L_08A49230: } L_08A49238: aot_gpr_31 = (0x08A49240u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A49240u) goto L_08A49240; AOT_REGCACHE_SYNC_OUT(); return; L_08A49240: @@ -3224,7 +3025,6 @@ L_08A49244: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -3286,7 +3086,6 @@ L_08A4936C: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A493C8; } @@ -3296,7 +3095,6 @@ L_08A49380: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A493C8; } @@ -3304,12 +3102,10 @@ L_08A49380: } L_08A49390: aot_gpr_31 = (0x08A49398u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A49398u) goto L_08A49398; AOT_REGCACHE_SYNC_OUT(); return; L_08A49398: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A493B8; } @@ -3321,7 +3117,6 @@ L_08A493A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A493C8; } @@ -3357,7 +3152,6 @@ L_08A4940C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49428; } @@ -3377,7 +3171,6 @@ L_08A49428: AOT_REGCACHE_SYNC_OUT(); return; L_08A49440: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4949C; } @@ -3387,7 +3180,6 @@ L_08A49448: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4949C; } @@ -3412,7 +3204,6 @@ L_08A4948C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A49458; } @@ -3425,7 +3216,6 @@ L_08A4949C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49528; } @@ -3434,7 +3224,6 @@ L_08A4949C: L_08A494B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49528; } @@ -3444,7 +3233,6 @@ L_08A494C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(676))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A494FC; } @@ -3458,7 +3246,6 @@ L_08A494D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A49504; } @@ -3466,7 +3253,6 @@ L_08A494D4: } L_08A494F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A49528; } @@ -3487,7 +3273,6 @@ L_08A49504: AOT_REGCACHE_SYNC_OUT(); return; L_08A4950C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A49528; } @@ -3501,7 +3286,6 @@ L_08A49514: AOT_REGCACHE_SYNC_OUT(); return; L_08A49520: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A49564; } @@ -3514,7 +3298,6 @@ L_08A49528: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4956C; } @@ -3531,7 +3314,6 @@ L_08A49544: AOT_REGCACHE_SYNC_OUT(); return; L_08A4955C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A495AC; } @@ -3552,7 +3334,6 @@ L_08A4956C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A495AC; } @@ -3561,7 +3342,6 @@ L_08A4956C: L_08A49588: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A495AC; } @@ -3578,12 +3358,10 @@ L_08A49594: AOT_REGCACHE_SYNC_OUT(); return; L_08A495AC: aot_gpr_31 = (0x08A495B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A495B4u) goto L_08A495B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A495B4: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A495DC; } @@ -3593,7 +3371,6 @@ L_08A495BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A495DC; } @@ -3609,7 +3386,6 @@ L_08A495CC: L_08A495DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49720; } @@ -3704,7 +3480,6 @@ L_08A4971C: L_08A49720: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49760; } @@ -3718,7 +3493,6 @@ L_08A4972C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49760; } @@ -3755,7 +3529,6 @@ L_08A497A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A497BC; } @@ -3773,7 +3546,6 @@ L_08A497BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A497D0; } @@ -3793,7 +3565,6 @@ L_08A497D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A497E8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A49844; } @@ -3803,7 +3574,6 @@ L_08A497F0: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49844; } @@ -3828,7 +3598,6 @@ L_08A49834: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A49800; } @@ -3848,7 +3617,6 @@ L_08A49844: L_08A49868: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4995C; } @@ -3862,7 +3630,6 @@ L_08A49874: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4995C; } @@ -3870,7 +3637,6 @@ L_08A49874: } L_08A49894: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A4995C; } @@ -3881,7 +3647,6 @@ L_08A4989C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A498D0; } @@ -3893,7 +3658,6 @@ L_08A498B0: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A498D0; } @@ -3912,7 +3676,6 @@ L_08A498D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49938; } @@ -3926,7 +3689,6 @@ L_08A498E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A498F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A49924; } @@ -3943,7 +3705,6 @@ L_08A49904: aot_gpr_5 = (8192u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49924; } @@ -3952,7 +3713,6 @@ L_08A49904: L_08A49918: ctx.gpr[17] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A49938; } @@ -3963,7 +3723,6 @@ L_08A49924: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A498E4; } @@ -3971,7 +3730,6 @@ L_08A49924: } L_08A49938: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A4995C; } @@ -4013,7 +3771,17 @@ L_08A49960: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A499A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-1104)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4038,7 +3806,6 @@ L_08A499A4: L_08A49A18: ctx.gpr[30] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A49A30; } @@ -4052,7 +3819,6 @@ L_08A49A24: AOT_REGCACHE_SYNC_OUT(); return; L_08A49A30: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A4B3A0; } @@ -4060,7 +3826,6 @@ L_08A49A30: } L_08A49A38: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A49A68; } @@ -4073,7 +3838,6 @@ L_08A49A40: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49A68; } @@ -4082,7 +3846,6 @@ L_08A49A40: L_08A49A5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A49A84; } @@ -4091,12 +3854,10 @@ L_08A49A5C: L_08A49A68: ctx.gpr[16] = (0u | 0u); aot_gpr_31 = (0x08A49A74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A49A74u) goto L_08A49A74; AOT_REGCACHE_SYNC_OUT(); return; L_08A49A74: { const bool branch_taken = ctx.gpr[19] == aot_gpr_2; - // nop if (branch_taken) { goto L_08A49A8C; } @@ -4104,7 +3865,6 @@ L_08A49A74: } L_08A49A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A49AA8; } @@ -4112,7 +3872,6 @@ L_08A49A7C: } L_08A49A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B450; } @@ -4120,7 +3879,6 @@ L_08A49A84: } L_08A49A8C: aot_gpr_31 = (0x08A49A94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A49A94u) goto L_08A49A94; AOT_REGCACHE_SYNC_OUT(); return; L_08A49A94: @@ -4130,7 +3888,6 @@ L_08A49A94: AOT_REGCACHE_SYNC_OUT(); return; L_08A49A9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A49AA8; } @@ -4141,7 +3898,6 @@ L_08A49AA4: goto L_08A49AA8; L_08A49AA8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4154,7 +3910,6 @@ L_08A49AB0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4167,7 +3922,6 @@ L_08A49ACC: AOT_REGCACHE_SYNC_OUT(); return; L_08A49AD4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4177,7 +3931,6 @@ L_08A49ADC: aot_gpr_4 = (ctx.gpr[19] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4186,7 +3939,6 @@ L_08A49ADC: L_08A49AEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = ctx.gpr[21] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4281,7 +4033,6 @@ L_08A49AF8: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (15820u << 16u); if (branch_taken) { @@ -4293,9 +4044,7 @@ L_08A49B8C: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4363,9 +4112,7 @@ L_08A49BA4: aot_gpr_5 = (aot_gpr_5 | 13107u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49C38; } @@ -4384,7 +4131,6 @@ L_08A49C0C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<64u>()); aot_fpr_14 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A49C44; } @@ -4400,7 +4146,6 @@ L_08A49C44: aot_gpr_5 = (aot_gpr_5 | 4059u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16006u << 16u); if (branch_taken) { @@ -4412,9 +4157,7 @@ L_08A49C60: aot_gpr_5 = (aot_gpr_5 | 2706u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49C94; } @@ -4425,9 +4168,7 @@ L_08A49C78: aot_gpr_5 = (16192u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49CB4; } @@ -4439,9 +4180,7 @@ L_08A49C94: aot_gpr_5 = (aot_gpr_5 | 28836u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49D04; } @@ -4457,9 +4196,7 @@ L_08A49CB4: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A49CF4; } @@ -4472,7 +4209,6 @@ L_08A49CE4: AOT_REGCACHE_SYNC_OUT(); return; L_08A49CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4485,7 +4221,6 @@ L_08A49CF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A49CFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A49D1C; } @@ -4580,7 +4315,6 @@ L_08A49DC4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A49E2C; } @@ -4642,7 +4376,6 @@ L_08A49E2C: ctx.gpr[16] = (0u < ctx.gpr[16] ? 1u : 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A49E88; } @@ -4683,7 +4416,6 @@ L_08A49E88: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A49EA8; } @@ -4694,7 +4426,6 @@ L_08A49EA4: goto L_08A49EA8; L_08A49EA8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4AAD8; } @@ -4707,7 +4438,6 @@ L_08A49EB0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A4AAD8; } @@ -4716,7 +4446,6 @@ L_08A49EB0: L_08A49ECC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A49F10; } @@ -4724,7 +4453,6 @@ L_08A49ECC: } L_08A49ED8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A49EE8; } @@ -4732,7 +4460,6 @@ L_08A49ED8: } L_08A49EE0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A49F10; } @@ -4740,7 +4467,6 @@ L_08A49EE0: } L_08A49EE8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A4AAD8; } @@ -4753,7 +4479,6 @@ L_08A49EF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A49EF8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4AAD8; } @@ -4763,7 +4488,6 @@ L_08A49F00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4AAD8; } @@ -4771,7 +4495,6 @@ L_08A49F00: } L_08A49F10: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A49F24; } @@ -4821,7 +4544,6 @@ L_08A49F58: } L_08A49F64: { const bool branch_taken = ctx.gpr[16] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A4A8B4; } @@ -4829,7 +4551,6 @@ L_08A49F64: } L_08A49F6C: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A4A8B4; } @@ -4860,7 +4581,6 @@ L_08A49F74: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A49FC4; } @@ -4914,7 +4634,6 @@ L_08A49FFC: goto L_08A4A000; L_08A4A000: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A4A450; } @@ -4937,7 +4656,6 @@ L_08A4A014: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A020: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4A034; } @@ -4956,7 +4674,6 @@ L_08A4A034: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A03C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4A064; } @@ -4966,7 +4683,6 @@ L_08A4A044: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4A064; } @@ -4976,7 +4692,6 @@ L_08A4A054: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A0C0; } @@ -5008,7 +4723,6 @@ L_08A4A078: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A098: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4A3EC; } @@ -5036,7 +4750,6 @@ L_08A4A0C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A26C; } @@ -5046,7 +4759,6 @@ L_08A4A0D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A140; } @@ -5056,7 +4768,6 @@ L_08A4A0E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A140; } @@ -5066,7 +4777,6 @@ L_08A4A0F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 21u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A140; } @@ -5076,7 +4786,6 @@ L_08A4A100: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A130; } @@ -5086,7 +4795,6 @@ L_08A4A110: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A130; } @@ -5096,7 +4804,6 @@ L_08A4A120: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A26C; } @@ -5109,7 +4816,6 @@ L_08A4A130: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A138: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4A26C; } @@ -5123,7 +4829,6 @@ L_08A4A140: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -5229,7 +4934,6 @@ L_08A4A240: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4A3EC; } @@ -5242,7 +4946,6 @@ L_08A4A26C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A274: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4A39C; } @@ -5255,7 +4958,6 @@ L_08A4A27C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A284: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4A32C; } @@ -5266,7 +4968,6 @@ L_08A4A28C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A39C; } @@ -5286,7 +4987,6 @@ L_08A4A2A8: goto L_08A4A2B4; L_08A4A2B4: aot_gpr_31 = (0x08A4A2BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4A2BCu) goto L_08A4A2BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4A2BC: @@ -5300,7 +5000,6 @@ L_08A4A2C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A2CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4A2FC; } @@ -5325,7 +5024,6 @@ L_08A4A2FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A31C; } @@ -5365,7 +5063,6 @@ L_08A4A334: goto L_08A4A340; L_08A4A340: aot_gpr_31 = (0x08A4A348u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4A348u) goto L_08A4A348; AOT_REGCACHE_SYNC_OUT(); return; L_08A4A348: @@ -5379,7 +5076,6 @@ L_08A4A34C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A358: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4A39C; } @@ -5394,7 +5090,6 @@ L_08A4A360: goto L_08A4A36C; L_08A4A36C: aot_gpr_31 = (0x08A4A374u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4A374u) goto L_08A4A374; AOT_REGCACHE_SYNC_OUT(); return; L_08A4A374: @@ -5457,7 +5152,6 @@ L_08A4A3EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A41C; } @@ -5474,7 +5168,6 @@ L_08A4A3FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4A434; } @@ -5492,7 +5185,6 @@ L_08A4A41C: L_08A4A434: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A448; } @@ -5505,7 +5197,6 @@ L_08A4A440: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A448: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4A630; } @@ -5655,7 +5346,6 @@ L_08A4A598: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(200), static_cast(ctx.gpr[1])); aot_gpr_4 = (ctx.gpr[23] & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4A5D8; } @@ -5701,7 +5391,6 @@ L_08A4A5F0: L_08A4A630: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A8AC; } @@ -5712,7 +5401,6 @@ L_08A4A63C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A680; } @@ -5722,7 +5410,6 @@ L_08A4A650: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A680; } @@ -5732,7 +5419,6 @@ L_08A4A660: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 21u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A680; } @@ -5742,7 +5428,6 @@ L_08A4A670: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A684; } @@ -5811,7 +5496,6 @@ L_08A4A684: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A6E8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4A754; } @@ -5821,7 +5505,6 @@ L_08A4A6F0: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A754; } @@ -5851,7 +5534,6 @@ L_08A4A740: ctx.gpr[23] = (ctx.gpr[23] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4A700; } @@ -5861,7 +5543,6 @@ L_08A4A754: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_gpr_5 = (0u | 35u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4A8AC; } @@ -5994,7 +5675,6 @@ L_08A4A844: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A8AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4AA80; } @@ -6003,7 +5683,6 @@ L_08A4A8AC: L_08A4A8B4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AA80; } @@ -6069,7 +5748,6 @@ L_08A4A8C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A924: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4A9C0; } @@ -6079,7 +5757,6 @@ L_08A4A92C: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4A9C0; } @@ -6140,7 +5817,6 @@ L_08A4A9AC: ctx.gpr[22] = (ctx.gpr[22] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4A93C; } @@ -6148,7 +5824,6 @@ L_08A4A9AC: } L_08A4A9C0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A4AA80; } @@ -6157,7 +5832,6 @@ L_08A4A9C0: L_08A4A9C8: aot_gpr_4 = (0u | 58u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A4AA80; } @@ -6171,7 +5845,6 @@ L_08A4A9D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4A9E0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4AA20; } @@ -6186,7 +5859,6 @@ L_08A4A9E8: goto L_08A4A9F4; L_08A4A9F4: aot_gpr_31 = (0x08A4A9FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4A9FCu) goto L_08A4A9FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4A9FC: @@ -6218,7 +5890,6 @@ L_08A4AA20: goto L_08A4AA2C; L_08A4AA2C: aot_gpr_31 = (0x08A4AA34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4AA34u) goto L_08A4AA34; AOT_REGCACHE_SYNC_OUT(); return; L_08A4AA34: @@ -6238,7 +5909,6 @@ L_08A4AA50: goto L_08A4AA54; L_08A4AA54: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4AA80; } @@ -6261,7 +5931,6 @@ L_08A4AA68: L_08A4AA80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4AAD0; } @@ -6272,9 +5941,7 @@ L_08A4AA8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4AAD0; } @@ -6283,7 +5950,6 @@ L_08A4AA8C: L_08A4AAA8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A4AAD0; } @@ -6292,7 +5958,6 @@ L_08A4AAA8: L_08A4AAB4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = ctx.gpr[21] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4AAD0; } @@ -6307,7 +5972,6 @@ L_08A4AAC0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4AAD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B208; } @@ -6332,14 +5996,22 @@ L_08A4AAF4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6912))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4AB0C: aot_gpr_31 = (0x08A4AB14u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4AB14u) goto L_08A4AB14; AOT_REGCACHE_SYNC_OUT(); return; L_08A4AB14: @@ -6373,7 +6045,6 @@ L_08A4AB44: } L_08A4AB4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AC3C; } @@ -6383,7 +6054,6 @@ L_08A4AB54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(31))); aot_gpr_4 = (static_cast(aot_gpr_4) < 13 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4AC3C; } @@ -6393,7 +6063,6 @@ L_08A4AB64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(31))); aot_gpr_4 = (static_cast(aot_gpr_4) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AC3C; } @@ -6416,7 +6085,6 @@ L_08A4AB94: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AC34; } @@ -6472,7 +6140,6 @@ L_08A4AC20: ctx.gpr[16] = (ctx.gpr[16] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4ABA4; } @@ -6480,7 +6147,6 @@ L_08A4AC20: } L_08A4AC34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4AE38; } @@ -6534,7 +6200,6 @@ L_08A4ACA0: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AD3C; } @@ -6589,7 +6254,6 @@ L_08A4AD2C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4ACB0; } @@ -6653,9 +6317,7 @@ L_08A4AD3C: aot_gpr_4 = (16128u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4ADC8; } @@ -6733,7 +6395,6 @@ L_08A4AE38: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4AE94; } @@ -6743,7 +6404,6 @@ L_08A4AE4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AE94; } @@ -6753,7 +6413,6 @@ L_08A4AE5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AE94; } @@ -6762,7 +6421,6 @@ L_08A4AE5C: L_08A4AE6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2076))); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A4AE94; } @@ -6779,7 +6437,6 @@ L_08A4AE78: goto L_08A4AE94; L_08A4AE94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B208; } @@ -6787,7 +6444,6 @@ L_08A4AE94: } L_08A4AE9C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A4AEB0; } @@ -6801,7 +6457,6 @@ L_08A4AEA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4AEB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B208; } @@ -6809,7 +6464,6 @@ L_08A4AEB0: } L_08A4AEB8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A4AECC; } @@ -6826,7 +6480,6 @@ L_08A4AECC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4AFF8; } @@ -6838,9 +6491,7 @@ L_08A4AEE0: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4AFF8; } @@ -6872,7 +6523,6 @@ L_08A4AF20: goto L_08A4AF28; L_08A4AF28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4AF70; } @@ -6882,9 +6532,7 @@ L_08A4AF30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4AF70; } @@ -6929,7 +6577,6 @@ L_08A4AF90: goto L_08A4AF98; L_08A4AF98: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4B04C; } @@ -6974,7 +6621,6 @@ L_08A4AFA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4AFF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B04C; } @@ -6991,7 +6637,6 @@ L_08A4AFF8: L_08A4B008: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(478)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4B04C; } @@ -7004,7 +6649,6 @@ L_08A4B018: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4B04C; } @@ -7026,7 +6670,6 @@ L_08A4B03C: goto L_08A4B04C; L_08A4B04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B208; } @@ -7034,7 +6677,6 @@ L_08A4B04C: } L_08A4B054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B208; } @@ -7043,7 +6685,6 @@ L_08A4B054: L_08A4B05C: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(352))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4B094; } @@ -7068,7 +6709,6 @@ L_08A4B07C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B08C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4B09C; } @@ -7084,7 +6724,6 @@ L_08A4B094: } L_08A4B09C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4B208; } @@ -7096,7 +6735,6 @@ L_08A4B0A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9645))); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(658), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08A4B0BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B0BCu) goto L_08A4B0BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B0BC: @@ -7212,7 +6850,6 @@ L_08A4B190: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(662), static_cast(ctx.gpr[1])); aot_gpr_4 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4B1C8; } @@ -7268,11 +6905,20 @@ L_08A4B224: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6944))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4B23C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(672), std::bit_cast(aot_fpr_12)); @@ -7288,7 +6934,6 @@ L_08A4B23C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B398; } @@ -7296,12 +6941,10 @@ L_08A4B264: } L_08A4B26C: aot_gpr_31 = (0x08A4B274u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B274u) goto L_08A4B274; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B274: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4B288; } @@ -7324,7 +6967,6 @@ L_08A4B288: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B2A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B398; } @@ -7332,12 +6974,10 @@ L_08A4B2A4: } L_08A4B2AC: aot_gpr_31 = (0x08A4B2B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B2B4u) goto L_08A4B2B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B2B4: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4B2C8; } @@ -7366,7 +7006,6 @@ L_08A4B2E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B2F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B398; } @@ -7390,7 +7029,6 @@ L_08A4B30C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B31C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B398; } @@ -7398,12 +7036,10 @@ L_08A4B31C: } L_08A4B324: aot_gpr_31 = (0x08A4B32Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B32Cu) goto L_08A4B32C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B32C: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4B340; } @@ -7429,7 +7065,6 @@ L_08A4B340: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B398; } @@ -7450,7 +7085,6 @@ L_08A4B370: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B3F0; } @@ -7458,7 +7092,6 @@ L_08A4B398: } L_08A4B3A0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A4B3C4; } @@ -7474,7 +7107,6 @@ L_08A4B3A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B3BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B3F0; } @@ -7498,12 +7130,10 @@ L_08A4B3C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B3F0: aot_gpr_31 = (0x08A4B3F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B3F8u) goto L_08A4B3F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B3F8: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4B448; } @@ -7569,7 +7199,17 @@ L_08A4B450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4B48C: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7580,7 +7220,6 @@ L_08A4B48C: ctx.gpr[23] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[16] = (0u | 0u); aot_gpr_31 = (0x08A4B4D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B4D8u) goto L_08A4B4D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B4D8: @@ -7593,7 +7232,6 @@ L_08A4B4D8: } L_08A4B4E0: aot_gpr_31 = (0x08A4B4E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B4E8u) goto L_08A4B4E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B4E8: @@ -7603,7 +7241,6 @@ L_08A4B4E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B4F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4B4FC; } @@ -7643,7 +7280,6 @@ L_08A4B52C: goto L_08A4B534; L_08A4B534: aot_gpr_31 = (0x08A4B53Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B53Cu) goto L_08A4B53C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B53C: @@ -7666,7 +7302,6 @@ L_08A4B554: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A4B5B0; } @@ -7674,7 +7309,6 @@ L_08A4B554: } L_08A4B574: aot_gpr_31 = (0x08A4B57Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B57Cu) goto L_08A4B57C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B57C: @@ -7696,7 +7330,6 @@ L_08A4B590: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4B5CC; } @@ -7704,7 +7337,6 @@ L_08A4B590: } L_08A4B5B0: aot_gpr_31 = (0x08A4B5B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B5B8u) goto L_08A4B5B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B5B8: @@ -7717,7 +7349,6 @@ L_08A4B5B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B5CC: aot_gpr_31 = (0x08A4B5D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B5D4u) goto L_08A4B5D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B5D4: @@ -7739,7 +7370,6 @@ L_08A4B5E8: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), 0u); aot_gpr_31 = (0x08A4B608u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4B608u) goto L_08A4B608; AOT_REGCACHE_SYNC_OUT(); return; L_08A4B608: @@ -7754,7 +7384,6 @@ L_08A4B614: L_08A4B618: aot_gpr_4 = (0u | 32u); { const bool branch_taken = ctx.gpr[23] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A4B81C; } @@ -7781,7 +7410,6 @@ L_08A4B624: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4B7F4; } @@ -7794,7 +7422,6 @@ L_08A4B64C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B654: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4B7F4; } @@ -7814,7 +7441,6 @@ L_08A4B65C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7B4; } @@ -7832,7 +7458,6 @@ L_08A4B694: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7B4; } @@ -7850,7 +7475,6 @@ L_08A4B6C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7B4; } @@ -7868,7 +7492,6 @@ L_08A4B6F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 42u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7B4; } @@ -7886,7 +7509,6 @@ L_08A4B724: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 39u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7B4; } @@ -7904,7 +7526,6 @@ L_08A4B754: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7B4; } @@ -7922,7 +7543,6 @@ L_08A4B784: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4B7EC; } @@ -7985,7 +7605,6 @@ L_08A4B808: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4B940; } @@ -8044,7 +7663,6 @@ L_08A4B81C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.gpr[30] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_gpr_29 + static_cast(32)); if (branch_taken) { @@ -8094,9 +7712,7 @@ L_08A4B890: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4B8E4; } @@ -8265,7 +7881,6 @@ L_08A4B970: L_08A4B978: aot_gpr_4 = (0u | 12u); { const bool branch_taken = ctx.gpr[23] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A4B9A4; } @@ -8293,7 +7908,6 @@ L_08A4B984: AOT_REGCACHE_SYNC_OUT(); return; L_08A4B99C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BAA4; } @@ -8306,7 +7920,6 @@ L_08A4B9A4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BAA4; } @@ -8387,7 +8000,6 @@ L_08A4B9C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BA34: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4BA64; } @@ -8417,7 +8029,6 @@ L_08A4BA3C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BA5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BA7C; } @@ -8445,7 +8056,6 @@ L_08A4BA64: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BA7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BAA4; } @@ -8481,7 +8091,6 @@ L_08A4BAA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BAE4; } @@ -8498,7 +8107,6 @@ L_08A4BAC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BB24; } @@ -8511,7 +8119,6 @@ L_08A4BAE4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BB24; } @@ -8520,7 +8127,6 @@ L_08A4BAE4: L_08A4BB00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BB24; } @@ -8558,7 +8164,17 @@ L_08A4BB28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4BB5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8595,7 +8211,6 @@ L_08A4BBA8: ctx.gpr[21] = (aot_gpr_29 + static_cast(64)); ctx.gpr[22] = (aot_gpr_29 + static_cast(48)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[23] = (0u | 1u); if (branch_taken) { @@ -8605,9 +8220,7 @@ L_08A4BBA8: } L_08A4BBE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4BC00; } @@ -8623,7 +8236,6 @@ L_08A4BBF8: } L_08A4BC00: aot_gpr_31 = (0x08A4BC08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BC08u) goto L_08A4BC08; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BC08: @@ -8635,7 +8247,6 @@ L_08A4BC0C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_gpr_31 = (0x08A4BC24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BC24u) goto L_08A4BC24; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BC24: @@ -8654,7 +8265,6 @@ L_08A4BC2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BC38: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4BC58; } @@ -8666,7 +8276,6 @@ L_08A4BC40: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BCC4; } @@ -8765,7 +8374,6 @@ L_08A4BC80: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BE2C; } @@ -8790,7 +8398,6 @@ L_08A4BCE4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BDAC; } @@ -8799,7 +8406,6 @@ L_08A4BCE4: L_08A4BCF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BDAC; } @@ -8835,7 +8441,6 @@ L_08A4BD38: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BD44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BD70; } @@ -8920,7 +8525,6 @@ L_08A4BD70: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4BE10; } @@ -9066,7 +8670,6 @@ L_08A4BE54: L_08A4BE70: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4BF78; } @@ -9143,12 +8746,10 @@ L_08A4BF60: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BF78: aot_gpr_31 = (0x08A4BF80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BF80u) goto L_08A4BF80; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BF80: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0146_entry, 146u, 5u, 0x08A4C030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9161,14 +8762,12 @@ L_08A4BF88: goto L_08A4BF94; L_08A4BF94: aot_gpr_31 = (0x08A4BF9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BF9Cu) goto L_08A4BF9C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BF9C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0146_entry, 146u, 5u, 0x08A4C030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9176,7 +8775,6 @@ L_08A4BF9C: } L_08A4BFAC: aot_gpr_31 = (0x08A4BFB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BFB4u) goto L_08A4BFB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BFB4: @@ -9185,7 +8783,6 @@ L_08A4BFB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0146_entry, 146u, 4u, 0x08A4C024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9193,7 +8790,6 @@ L_08A4BFB4: } L_08A4BFCC: aot_gpr_31 = (0x08A4BFD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BFD4u) goto L_08A4BFD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BFD4: @@ -9204,7 +8800,6 @@ L_08A4BFD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4BFE0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0146_entry, 146u, 4u, 0x08A4C024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9212,7 +8807,6 @@ L_08A4BFE0: } L_08A4BFE8: aot_gpr_31 = (0x08A4BFF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4BFF0u) goto L_08A4BFF0; AOT_REGCACHE_SYNC_OUT(); return; L_08A4BFF0: diff --git a/profiles/vcs/generated/generated_unit_0146.cpp b/profiles/vcs/generated/generated_unit_0146.cpp index e74cf55..4b45966 100644 --- a/profiles/vcs/generated/generated_unit_0146.cpp +++ b/profiles/vcs/generated/generated_unit_0146.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0146[4088] = { - 1, 0, 2, 0, 3, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 8, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 20, 0, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 0, 33, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 38, 0, - 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, - 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 60, 0, 61, 0, 0, 0, 0, - 0, 0, 62, 0, 63, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, - 0, 71, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, 94, 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, - 0, 0, 0, 0, 101, 102, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, - 0, 0, 0, 108, 0, 109, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 112, 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 120, 0, 121, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 129, 0, 130, 0, 0, 131, 0, 132, 133, - 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 136, 0, 137, 138, 0, 0, 0, 0, 0, 139, 140, 0, 141, 0, 0, 142, 0, 0, 0, 0, 0, 143, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 148, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 151, - 0, 152, 0, 153, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 172, 0, 0, 0, 173, 0, 0, 0, 174, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 179, 0, - 0, 180, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 184, 0, 0, 0, 185, 0, - 186, 0, 187, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, 0, 191, 0, 192, 0, 193, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 197, 0, 0, 198, 199, 0, 0, 0, 200, 0, 0, 0, - 0, 201, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 205, 0, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 0, 209, 0, 0, 210, 0, 211, 0, 212, 0, 0, 213, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 217, 0, 218, 0, 219, 0, - 0, 220, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 241, 0, 242, 0, 243, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 252, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 255, - 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, - 0, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 261, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 270, 0, 0, 0, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 281, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 285, 0, - 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 291, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 299, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 0, 312, 0, 0, 313, 0, 0, 0, 0, - 0, 0, 0, 314, 0, 0, 315, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, - 0, 320, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 325, 326, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, - 0, 331, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 334, 0, - 0, 0, 335, 0, 336, 0, 0, 0, 0, 337, 0, 338, 339, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, - 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 350, 351, 0, 0, 352, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 358, 0, 359, - 0, 0, 0, 0, 360, 0, 361, 362, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, - 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 371, 0, 372, 0, 0, 373, 0, 0, 374, 375, 0, 0, 0, 0, 376, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 387, 0, 388, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 391, 0, 392, 0, - 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 398, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 401, 0, 0, 0, 0, 402, 0, 0, 0, 403, 0, 404, 0, 0, - 0, 0, 405, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 412, - 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, 0, 418, 0, 419, 0, 0, 0, 420, - 0, 421, 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 427, 0, 0, 0, - 0, 428, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, 432, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, - 0, 440, 0, 0, 0, 441, 0, 0, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 447, 448, 0, 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, - 451, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, - 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, - 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 466, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 477, 0, 478, 0, 0, 479, 0, 480, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, - 490, 0, 491, 0, 0, 0, 492, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 498, 0, 499, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 504, 0, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 525, 0, 526, 0, 527, 0, - 0, 0, 0, 0, 528, 0, 0, 529, 0, 530, 0, 0, 531, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, - 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, - 547, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 549, 0, 0, 550, 0, 551, 0, 0, 0, 552, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 558, 559, 0, 560, 0, 0, 561, 0, 562, 0, 0, 563, 0, 564, - 0, 565, 0, 566, 0, 0, 567, 0, 568, 569, 0, 0, 570, 0, 571, 0, 0, 572, 0, 573, 574, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, - 577, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, 582, 0, 0, - 583, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0146[64] = { + 0x0800000010001215ull, 0x000004001040A409ull, 0x00014A8001100000ull, 0x0020000000000002ull, + 0x400510A000002080ull, 0x2800000154000114ull, 0x1002008840149008ull, 0x0028000000000020ull, + 0x000044540AA008A0ull, 0x4008000002080000ull, 0x0082AA0020204102ull, 0x0900440000942020ull, + 0xA00280000A310400ull, 0x00D4482822010530ull, 0x00025080008A0000ull, 0xD292100000011400ull, + 0xA0511204825834A0ull, 0x00000004400828AAull, 0x0010028000000042ull, 0x5080151100544420ull, + 0x5444010544404202ull, 0x802A901211914200ull, 0x0A54A40A54A02952ull, 0x00840444000A00A0ull, + 0x0006A20000000200ull, 0x0000400040028000ull, 0x0000200002000020ull, 0x8000081081000041ull, + 0x0240D54800006A20ull, 0x4049550000200000ull, 0x010016AA64001000ull, 0x0010010010010010ull, + 0x0004000050000043ull, 0x092AA00000110000ull, 0x0000241205040848ull, 0x0000010060800000ull, + 0x5000000A80200040ull, 0x20100A0040009A14ull, 0x210CCA0000008040ull, 0x020004D0A2800000ull, + 0x0000040201008050ull, 0x00000010000C3250ull, 0x4004004004004004ull, 0x0000000002C00400ull, + 0x0002004054200000ull, 0x2884202401000A00ull, 0x8A4210828A880054ull, 0x1080001000040112ull, + 0x00184000010A5022ull, 0x111AAA2208000010ull, 0x4000140104820891ull, 0x1040014100008441ull, + 0x5285142000000080ull, 0x400828A000A00000ull, 0x0000094510000000ull, 0x000005140002000Aull, + 0x0040280000145100ull, 0x20000A0081209000ull, 0x54280081000A2000ull, 0x400000A000005290ull, + 0x0244100004000041ull, 0x0051490144080800ull, 0x211A534AA52C44A0ull, 0x0082081128080105ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0146[64] = { + 1u, 8u, 16u, 23u, 25u, 33u, 42u, 52u, 55u, 67u, 71u, 82u, 91u, 101u, 116u, 123u, + 134u, 152u, 161u, 166u, 180u, 194u, 209u, 230u, 239u, 245u, 249u, 252u, 259u, 273u, 282u, 294u, + 299u, 305u, 314u, 324u, 328u, 335u, 346u, 356u, 365u, 371u, 379u, 385u, 389u, 395u, 405u, 421u, + 428u, 438u, 451u, 462u, 471u, 481u, 489u, 495u, 502u, 510u, 518u, 528u, 536u, 543u, 554u, 577u, }; void recomp_unit_0146_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0146_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A4C000u; - entry_id = (entry_delta < 16352u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0146[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16352u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0146[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0146[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A4C000; @@ -760,7 +667,6 @@ LOCAL_DISPATCH: } L_08A4C000: { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A4C024; } @@ -768,7 +674,6 @@ L_08A4C000: } L_08A4C008: aot_gpr_31 = (0x08A4C010u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4C010u) goto L_08A4C010; AOT_REGCACHE_SYNC_OUT(); return; L_08A4C010: @@ -811,7 +716,17 @@ L_08A4C030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4C070: aot_gpr_29 = (aot_gpr_29 + static_cast(-1472)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -913,7 +828,6 @@ L_08A4C170: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D7DC; } @@ -963,7 +877,6 @@ L_08A4C1A8: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1388))); if (branch_taken) { @@ -1000,7 +913,6 @@ L_08A4C260: goto L_08A4C29C; L_08A4C29C: aot_gpr_31 = (0x08A4C2A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4C2A4u) goto L_08A4C2A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4C2A4: @@ -1019,7 +931,6 @@ L_08A4C2AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A4C2B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4C434; } @@ -1255,7 +1166,6 @@ L_08A4C434: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4C568; } @@ -1263,7 +1173,6 @@ L_08A4C434: } L_08A4C494: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4C568; } @@ -1274,7 +1183,6 @@ L_08A4C49C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4C4C8; } @@ -1289,7 +1197,6 @@ L_08A4C4B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4C4C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4C568; } @@ -1306,7 +1213,6 @@ L_08A4C4C8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A4C510; } @@ -1321,7 +1227,6 @@ L_08A4C4F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4C508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4C520; } @@ -1366,12 +1271,10 @@ L_08A4C520: goto L_08A4C568; L_08A4C568: aot_gpr_31 = (0x08A4C570u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4C570u) goto L_08A4C570; AOT_REGCACHE_SYNC_OUT(); return; L_08A4C570: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4C580; } @@ -1468,7 +1371,6 @@ L_08A4C580: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4C5F4; } @@ -1507,7 +1409,6 @@ L_08A4C60C: L_08A4C630: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4C7D4; } @@ -1516,7 +1417,6 @@ L_08A4C630: L_08A4C63C: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1392))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4C7D4; } @@ -1548,7 +1448,6 @@ L_08A4C650: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4C6F0; } @@ -1745,7 +1644,6 @@ L_08A4C714: AOT_REGCACHE_SYNC_OUT(); return; L_08A4C7CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4C814; } @@ -1775,7 +1673,6 @@ L_08A4C81C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1388), ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D74C; } @@ -1801,7 +1698,6 @@ L_08A4C854: AOT_REGCACHE_SYNC_OUT(); return; L_08A4C85C: { const bool branch_taken = ctx.gpr[23] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -1809,7 +1705,6 @@ L_08A4C85C: } L_08A4C864: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -1822,7 +1717,6 @@ L_08A4C86C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -1835,7 +1729,6 @@ L_08A4C888: AOT_REGCACHE_SYNC_OUT(); return; L_08A4C890: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -1845,7 +1738,6 @@ L_08A4C898: aot_gpr_4 = (ctx.gpr[18] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -1855,7 +1747,6 @@ L_08A4C8A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -1950,7 +1841,6 @@ L_08A4C8B8: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (15820u << 16u); if (branch_taken) { @@ -1962,9 +1852,7 @@ L_08A4C94C: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4CADC; } @@ -2032,9 +1920,7 @@ L_08A4C964: aot_gpr_5 = (aot_gpr_5 | 13107u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4C9F8; } @@ -2053,7 +1939,6 @@ L_08A4C9CC: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<64u>()); aot_fpr_14 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4CA04; } @@ -2069,7 +1954,6 @@ L_08A4CA04: aot_gpr_5 = (aot_gpr_5 | 4059u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16006u << 16u); if (branch_taken) { @@ -2081,9 +1965,7 @@ L_08A4CA20: aot_gpr_5 = (aot_gpr_5 | 2706u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4CA54; } @@ -2094,9 +1976,7 @@ L_08A4CA38: aot_gpr_5 = (16192u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4CA74; } @@ -2108,9 +1988,7 @@ L_08A4CA54: aot_gpr_5 = (aot_gpr_5 | 28836u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4CAC4; } @@ -2126,9 +2004,7 @@ L_08A4CA74: aot_gpr_5 = (16672u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4CAB4; } @@ -2141,7 +2017,6 @@ L_08A4CAA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CAAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -2154,7 +2029,6 @@ L_08A4CAB4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4CADC; } @@ -2204,7 +2078,6 @@ L_08A4CB14: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D0D8; } @@ -2223,7 +2096,6 @@ L_08A4CB34: } L_08A4CB48: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A4CEB8; } @@ -2232,7 +2104,6 @@ L_08A4CB48: L_08A4CB50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A4CEB8; } @@ -2286,7 +2157,6 @@ L_08A4CBB8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -2326,7 +2196,6 @@ L_08A4CC28: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1732))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4CC50; } @@ -2336,7 +2205,6 @@ L_08A4CC40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4CC54; } @@ -2349,7 +2217,6 @@ L_08A4CC54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4CCC4; } @@ -2357,7 +2224,6 @@ L_08A4CC54: } L_08A4CC64: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4CCC4; } @@ -2388,7 +2254,6 @@ L_08A4CC6C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CCBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4CCF4; } @@ -2429,7 +2294,6 @@ L_08A4CD10: L_08A4CD14: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4CD28; } @@ -2469,7 +2333,6 @@ L_08A4CD64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4CD94; } @@ -2486,7 +2349,6 @@ L_08A4CD74: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4CDAC; } @@ -2504,7 +2366,6 @@ L_08A4CD94: L_08A4CDAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4CEB0; } @@ -2530,7 +2391,6 @@ L_08A4CDC8: } L_08A4CDD0: { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A4CDDC; } @@ -2600,7 +2460,6 @@ L_08A4CDDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CE44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4CEB0; } @@ -2610,7 +2469,6 @@ L_08A4CE4C: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4CEB0; } @@ -2640,7 +2498,6 @@ L_08A4CE9C: ctx.gpr[16] = (ctx.gpr[16] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4CE5C; } @@ -2648,7 +2505,6 @@ L_08A4CE9C: } L_08A4CEB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D07C; } @@ -2657,7 +2513,6 @@ L_08A4CEB0: L_08A4CEB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D07C; } @@ -2723,7 +2578,6 @@ L_08A4CEC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CF28: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4CFC4; } @@ -2733,7 +2587,6 @@ L_08A4CF30: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4CFC4; } @@ -2794,7 +2647,6 @@ L_08A4CFB0: ctx.gpr[16] = (ctx.gpr[16] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4CF40; } @@ -2803,7 +2655,6 @@ L_08A4CFB0: L_08A4CFC4: aot_gpr_4 = (0u | 58u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A4D07C; } @@ -2817,7 +2668,6 @@ L_08A4CFD0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4CFDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4D01C; } @@ -2832,7 +2682,6 @@ L_08A4CFE4: goto L_08A4CFF0; L_08A4CFF0: aot_gpr_31 = (0x08A4CFF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4CFF8u) goto L_08A4CFF8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4CFF8: @@ -2864,7 +2713,6 @@ L_08A4D01C: goto L_08A4D028; L_08A4D028: aot_gpr_31 = (0x08A4D030u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4D030u) goto L_08A4D030; AOT_REGCACHE_SYNC_OUT(); return; L_08A4D030: @@ -2884,7 +2732,6 @@ L_08A4D04C: goto L_08A4D050; L_08A4D050: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A4D07C; } @@ -2907,7 +2754,6 @@ L_08A4D064: L_08A4D07C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D0D0; } @@ -2918,9 +2764,7 @@ L_08A4D088: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4D0D0; } @@ -2929,7 +2773,6 @@ L_08A4D088: L_08A4D0A4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A4D0D0; } @@ -2939,7 +2782,6 @@ L_08A4D0B0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A4D0D0; } @@ -2954,7 +2796,6 @@ L_08A4D0C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D590; } @@ -2983,7 +2824,6 @@ L_08A4D0F4: } L_08A4D0FC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D3F8; } @@ -2991,7 +2831,6 @@ L_08A4D0FC: } L_08A4D104: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D11C; } @@ -2999,7 +2838,6 @@ L_08A4D104: } L_08A4D10C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4D3F8; } @@ -3007,7 +2845,6 @@ L_08A4D10C: } L_08A4D114: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D590; } @@ -3058,7 +2895,6 @@ L_08A4D178: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D218; } @@ -3114,7 +2950,6 @@ L_08A4D204: ctx.gpr[16] = (ctx.gpr[16] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D188; } @@ -3178,9 +3013,7 @@ L_08A4D218: aot_gpr_4 = (16384u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4D2A4; } @@ -3258,7 +3091,6 @@ L_08A4D314: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D3F0; } @@ -3290,7 +3122,6 @@ L_08A4D348: goto L_08A4D350; L_08A4D350: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D380; } @@ -3335,7 +3166,6 @@ L_08A4D3A0: goto L_08A4D3A8; L_08A4D3A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D3F0; } @@ -3368,7 +3198,6 @@ L_08A4D3DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D3F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D590; } @@ -3388,7 +3217,6 @@ L_08A4D404: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D590; } @@ -3399,7 +3227,6 @@ L_08A4D424: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D540; } @@ -3411,9 +3238,7 @@ L_08A4D438: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4D540; } @@ -3445,7 +3270,6 @@ L_08A4D478: goto L_08A4D480; L_08A4D480: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D4C8; } @@ -3455,9 +3279,7 @@ L_08A4D488: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4D4C8; } @@ -3502,7 +3324,6 @@ L_08A4D4E8: goto L_08A4D4F0; L_08A4D4F0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D584; } @@ -3535,7 +3356,6 @@ L_08A4D524: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D584; } @@ -3552,7 +3372,6 @@ L_08A4D540: L_08A4D550: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(478)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4D584; } @@ -3565,7 +3384,6 @@ L_08A4D560: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D584; } @@ -3625,7 +3443,6 @@ L_08A4D5C4: } L_08A4D5CC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A4D71C; } @@ -3646,7 +3463,6 @@ L_08A4D5D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D5FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D744; } @@ -3655,7 +3471,6 @@ L_08A4D5FC: L_08A4D604: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1385))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D634; } @@ -3663,12 +3478,10 @@ L_08A4D604: } L_08A4D610: aot_gpr_31 = (0x08A4D618u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4D618u) goto L_08A4D618; AOT_REGCACHE_SYNC_OUT(); return; L_08A4D618: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4D62C; } @@ -3696,7 +3509,6 @@ L_08A4D634: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D744; } @@ -3705,7 +3517,6 @@ L_08A4D654: L_08A4D65C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1385))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D68C; } @@ -3713,12 +3524,10 @@ L_08A4D65C: } L_08A4D668: aot_gpr_31 = (0x08A4D670u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4D670u) goto L_08A4D670; AOT_REGCACHE_SYNC_OUT(); return; L_08A4D670: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4D684; } @@ -3751,7 +3560,6 @@ L_08A4D6A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D6B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D744; } @@ -3760,7 +3568,6 @@ L_08A4D6B4: L_08A4D6BC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1385))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4D6EC; } @@ -3768,12 +3575,10 @@ L_08A4D6BC: } L_08A4D6C8: aot_gpr_31 = (0x08A4D6D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4D6D0u) goto L_08A4D6D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A4D6D0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4D6E4; } @@ -3803,7 +3608,6 @@ L_08A4D6EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D744; } @@ -3824,7 +3628,6 @@ L_08A4D71C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4D744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4D7C8; } @@ -3862,7 +3665,6 @@ L_08A4D74C: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A4D788; @@ -3872,7 +3674,6 @@ L_08A4D788: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(8))); aot_fpr_12 = aot_fpr_13 / aot_fpr_12; aot_gpr_31 = (0x08A4D798u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 571u, 0x08A3FBACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4D798u) goto L_08A4D798; AOT_REGCACHE_SYNC_OUT(); return; L_08A4D798: @@ -3909,7 +3710,6 @@ L_08A4D7C8: ctx.gpr[23] = (ctx.gpr[23] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4C1A8; } @@ -3940,7 +3740,17 @@ L_08A4D7DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4D824: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3973,7 +3783,6 @@ L_08A4D824: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); if (branch_taken) { @@ -3983,9 +3792,7 @@ L_08A4D824: } L_08A4D8A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4D8BC; } @@ -4001,7 +3808,6 @@ L_08A4D8B4: } L_08A4D8BC: aot_gpr_31 = (0x08A4D8C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4D8C4u) goto L_08A4D8C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4D8C4: @@ -4038,9 +3844,7 @@ L_08A4D8C8: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4D944; } @@ -4257,7 +4061,6 @@ L_08A4DB60: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4DBFC; } @@ -4268,7 +4071,6 @@ L_08A4DB7C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4DBFC; } @@ -4304,7 +4106,6 @@ L_08A4DBAC: aot_mem.aot_direct_store_word_right(ctx.gpr[19] + static_cast(0), aot_gpr_4); ctx.gpr[19] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4DC8C; } @@ -4314,7 +4115,6 @@ L_08A4DBFC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); if (branch_taken) { @@ -4324,9 +4124,7 @@ L_08A4DBFC: } L_08A4DC14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4DC2C; } @@ -4342,7 +4140,6 @@ L_08A4DC24: } L_08A4DC2C: aot_gpr_31 = (0x08A4DC34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DC34u) goto L_08A4DC34; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DC34: @@ -4374,12 +4171,10 @@ L_08A4DC38: L_08A4DC8C: ctx.gpr[20] = (0u | 0u); aot_gpr_31 = (0x08A4DC98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DC98u) goto L_08A4DC98; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DC98: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4DCBC; } @@ -4387,7 +4182,6 @@ L_08A4DC98: } L_08A4DCA0: aot_gpr_31 = (0x08A4DCA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DCA8u) goto L_08A4DCA8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DCA8: @@ -4397,7 +4191,6 @@ L_08A4DCA8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4DCB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4DCBC; } @@ -4418,7 +4211,6 @@ L_08A4DCBC: L_08A4DCD8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4DDA0; } @@ -4479,12 +4271,10 @@ L_08A4DD54: AOT_REGCACHE_SYNC_OUT(); return; L_08A4DDA0: aot_gpr_31 = (0x08A4DDA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DDA8u) goto L_08A4DDA8; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DDA8: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4DDF8; } @@ -4544,7 +4334,17 @@ L_08A4DDF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4DE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4553,7 +4353,6 @@ L_08A4DE30: ctx.gpr[17] = (aot_gpr_4 | 0u); ctx.gpr[18] = (0u | 0u); aot_gpr_31 = (0x08A4DE68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DE68u) goto L_08A4DE68; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DE68: @@ -4571,12 +4370,10 @@ L_08A4DE74: L_08A4DE78: ctx.gpr[20] = (0u | 0u); aot_gpr_31 = (0x08A4DE84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DE84u) goto L_08A4DE84; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DE84: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4DEA8; } @@ -4584,7 +4381,6 @@ L_08A4DE84: } L_08A4DE8C: aot_gpr_31 = (0x08A4DE94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4DE94u) goto L_08A4DE94; AOT_REGCACHE_SYNC_OUT(); return; L_08A4DE94: @@ -4594,7 +4390,6 @@ L_08A4DE94: AOT_REGCACHE_SYNC_OUT(); return; L_08A4DE9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4DEA8; } @@ -4731,7 +4526,6 @@ L_08A4DFD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 40u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4E070; } @@ -4795,7 +4589,6 @@ L_08A4E018: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4E0C8; } @@ -4897,9 +4690,7 @@ L_08A4E0C8: aot_gpr_5 = (aot_gpr_5 | 15204u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E150; } @@ -4986,12 +4777,10 @@ L_08A4E150: AOT_REGCACHE_SYNC_OUT(); return; L_08A4E1B4: aot_gpr_31 = (0x08A4E1BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4E1BCu) goto L_08A4E1BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4E1BC: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4E22C; } @@ -5051,7 +4840,6 @@ L_08A4E22C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4E268; } @@ -5068,7 +4856,6 @@ L_08A4E248: AOT_REGCACHE_SYNC_OUT(); return; L_08A4E260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4E2A8; } @@ -5081,7 +4868,6 @@ L_08A4E268: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4E2A8; } @@ -5090,7 +4876,6 @@ L_08A4E268: L_08A4E284: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4E2A8; } @@ -5108,7 +4893,6 @@ L_08A4E290: L_08A4E2A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4E374; } @@ -5188,7 +4972,17 @@ L_08A4E378: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4E3A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-416)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5206,7 +5000,6 @@ L_08A4E3A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4E484; } @@ -5248,7 +5041,6 @@ L_08A4E454: } L_08A4E47C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4E6E0; } @@ -5291,7 +5083,6 @@ L_08A4E48C: goto L_08A4E4F0; L_08A4E4F0: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A4E508; } @@ -5380,9 +5171,7 @@ L_08A4E53C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5415,7 +5204,6 @@ L_08A4E578: AOT_REGCACHE_SYNC_OUT(); return; L_08A4E5A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5428,9 +5216,7 @@ L_08A4E5AC: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5443,9 +5229,7 @@ L_08A4E5D0: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5458,9 +5242,7 @@ L_08A4E5F4: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5473,9 +5255,7 @@ L_08A4E618: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5549,7 +5329,6 @@ L_08A4E6A4: L_08A4E6AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A4E6C8; } @@ -5618,7 +5397,6 @@ L_08A4E6F4: goto L_08A4E75C; L_08A4E75C: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A4E774; } @@ -5707,9 +5485,7 @@ L_08A4E7A8: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E930; } @@ -5742,7 +5518,6 @@ L_08A4E7E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4E810: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4E930; } @@ -5755,9 +5530,7 @@ L_08A4E818: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E930; } @@ -5770,9 +5543,7 @@ L_08A4E83C: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E930; } @@ -5785,9 +5556,7 @@ L_08A4E860: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E930; } @@ -5800,9 +5569,7 @@ L_08A4E884: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4E930; } @@ -5867,7 +5634,6 @@ L_08A4E8A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A4E910: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4E924; } @@ -5876,7 +5642,6 @@ L_08A4E910: L_08A4E918: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A4E930; } @@ -5928,7 +5693,17 @@ L_08A4E94C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4E990: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6061,7 +5836,6 @@ L_08A4EB28: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4EC70; } @@ -6200,7 +5974,6 @@ L_08A4EC54: } L_08A4EC68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4EC98; } @@ -6283,9 +6056,7 @@ L_08A4ECC4: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A4ED2C; } @@ -6330,7 +6101,6 @@ L_08A4ED60: L_08A4ED88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4EDC8; } @@ -6344,7 +6114,6 @@ L_08A4ED94: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4EDC8; } @@ -6362,7 +6131,6 @@ L_08A4EDC8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_6 = (0u | 34u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A4EDEC; } @@ -6392,7 +6160,6 @@ L_08A4EDF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4EE08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4EE5C; } @@ -6421,7 +6188,6 @@ L_08A4EE4C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (ctx.gpr[16] < static_cast(16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4EE18; } @@ -6429,12 +6195,10 @@ L_08A4EE4C: } L_08A4EE5C: aot_gpr_31 = (0x08A4EE64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4EE64u) goto L_08A4EE64; AOT_REGCACHE_SYNC_OUT(); return; L_08A4EE64: { const bool branch_taken = ctx.gpr[19] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4F0CC; } @@ -6464,17 +6228,25 @@ L_08A4EE84: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(6976))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4EE9C: aot_gpr_4 = (14621u << 16u); aot_gpr_4 = (aot_gpr_4 | 18770u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4EEE4; } @@ -6485,7 +6257,6 @@ L_08A4EEB0: aot_gpr_4 = (aot_gpr_4 | 18770u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4EEE4; } @@ -6496,7 +6267,6 @@ L_08A4EEC4: aot_gpr_4 = (aot_gpr_4 | 18770u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4EEE4; } @@ -6509,14 +6279,12 @@ L_08A4EED8: goto L_08A4EEE4; L_08A4EEE4: aot_gpr_31 = (0x08A4EEECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4EEECu) goto L_08A4EEEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4EEEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4EF10; } @@ -6524,13 +6292,11 @@ L_08A4EEEC: } L_08A4EEFC: aot_gpr_31 = (0x08A4EF04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4EF04u) goto L_08A4EF04; AOT_REGCACHE_SYNC_OUT(); return; L_08A4EF04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4EF20; } @@ -6650,7 +6416,6 @@ L_08A4F044: L_08A4F04C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A4F060; @@ -6715,7 +6480,17 @@ L_08A4F0D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A4F110: aot_gpr_29 = (aot_gpr_29 + static_cast(-1296)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6752,7 +6527,6 @@ L_08A4F194: ctx.gpr[23] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4F1D0; } @@ -6765,7 +6539,6 @@ L_08A4F1A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4F1AC: { const bool branch_taken = ctx.gpr[30] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A4F1D0; } @@ -6773,7 +6546,6 @@ L_08A4F1AC: } L_08A4F1B4: aot_gpr_31 = (0x08A4F1BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4F1BCu) goto L_08A4F1BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4F1BC: @@ -6783,7 +6555,6 @@ L_08A4F1BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A4F1C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4F1D0; } @@ -6796,7 +6567,6 @@ L_08A4F1D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4F210; } @@ -6806,7 +6576,6 @@ L_08A4F1E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4F210; } @@ -6816,7 +6585,6 @@ L_08A4F1F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A4F210; } @@ -6826,7 +6594,6 @@ L_08A4F200: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A4F8AC; } @@ -6835,7 +6602,6 @@ L_08A4F200: L_08A4F210: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4F398; } @@ -6918,7 +6684,6 @@ L_08A4F280: AOT_REGCACHE_SYNC_OUT(); return; L_08A4F2A8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A4F2F8; } @@ -6983,7 +6748,6 @@ L_08A4F2B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4F380; } @@ -6991,7 +6755,6 @@ L_08A4F2B0: } L_08A4F2F8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A4F33C; } @@ -7029,7 +6792,6 @@ L_08A4F328: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4F380; } @@ -7112,7 +6874,6 @@ L_08A4F380: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4FA44; } @@ -7120,7 +6881,6 @@ L_08A4F380: } L_08A4F398: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A4F554; } @@ -7260,7 +7020,6 @@ L_08A4F41C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A4F494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4F494u) goto L_08A4F494; AOT_REGCACHE_SYNC_OUT(); return; L_08A4F494: @@ -7408,7 +7167,6 @@ L_08A4F4F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4FA44; } @@ -7416,7 +7174,6 @@ L_08A4F4F8: } L_08A4F554: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A4F704; } @@ -7585,7 +7342,6 @@ L_08A4F5F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A4F670u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4F670u) goto L_08A4F670; AOT_REGCACHE_SYNC_OUT(); return; L_08A4F670: @@ -7705,7 +7461,6 @@ L_08A4F6AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4FA44; } @@ -7713,7 +7468,6 @@ L_08A4F6AC: } L_08A4F704: aot_gpr_31 = (0x08A4F70Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4F70Cu) goto L_08A4F70C; AOT_REGCACHE_SYNC_OUT(); return; L_08A4F70C: @@ -7876,7 +7630,6 @@ L_08A4F7A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A4F820u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4F820u) goto L_08A4F820; AOT_REGCACHE_SYNC_OUT(); return; L_08A4F820: @@ -7989,7 +7742,6 @@ L_08A4F850: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4FA44; } @@ -7997,7 +7749,6 @@ L_08A4F850: } L_08A4F8AC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A4F8D8; } @@ -8034,7 +7785,6 @@ L_08A4F8B4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4F930; } @@ -8154,7 +7904,6 @@ L_08A4F97C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4F9A4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A4F9F4; } @@ -8219,7 +7968,6 @@ L_08A4F9AC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4FA34; } @@ -8348,7 +8096,6 @@ L_08A4FA9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FACC: aot_gpr_31 = (0x08A4FAD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FAD4u) goto L_08A4FAD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FAD4: @@ -8361,7 +8108,6 @@ L_08A4FAD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FAE8: aot_gpr_31 = (0x08A4FAF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FAF0u) goto L_08A4FAF0; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FAF0: @@ -8386,7 +8132,6 @@ L_08A4FB10: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FB1C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4FB9C; } @@ -8400,7 +8145,6 @@ L_08A4FB24: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FB30: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4FBF8; } @@ -8487,7 +8231,6 @@ L_08A4FB38: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FB94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A4FBF8; } @@ -8574,7 +8317,6 @@ L_08A4FB9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FBF8: aot_gpr_31 = (0x08A4FC00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FC00u) goto L_08A4FC00; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FC00: @@ -8643,7 +8385,6 @@ L_08A4FCB0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4FCD8; } @@ -8659,7 +8400,6 @@ L_08A4FCC8: L_08A4FCD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 70u, 0x08A5050Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8694,7 +8434,6 @@ L_08A4FCE4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4FD80; } @@ -8708,7 +8447,6 @@ L_08A4FD2C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 17u, 0x08A50174u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8735,7 +8473,6 @@ L_08A4FD68: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FD78: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 17u, 0x08A50174u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8749,7 +8486,6 @@ L_08A4FD80: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A4FDAC; } @@ -8786,7 +8522,6 @@ L_08A4FDC0: } L_08A4FDD0: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 16u, 0x08A5016Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8818,7 +8553,6 @@ L_08A4FDD8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(672), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(676), std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A4FE1C; } @@ -8863,7 +8597,6 @@ L_08A4FE4C: L_08A4FE54: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A4FF4C; } @@ -8871,7 +8604,6 @@ L_08A4FE54: } L_08A4FE60: aot_gpr_31 = (0x08A4FE68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FE68u) goto L_08A4FE68; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FE68: @@ -8887,7 +8619,6 @@ L_08A4FE74: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FE7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A4FEF4; } @@ -8907,7 +8638,6 @@ L_08A4FE8C: goto L_08A4FE98; L_08A4FE98: aot_gpr_31 = (0x08A4FEA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FEA0u) goto L_08A4FEA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FEA0: @@ -8921,7 +8651,6 @@ L_08A4FEA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FEB0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A4FEF4; } @@ -8936,7 +8665,6 @@ L_08A4FEB8: goto L_08A4FEC4; L_08A4FEC4: aot_gpr_31 = (0x08A4FECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FECCu) goto L_08A4FECC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FECC: @@ -8959,7 +8687,6 @@ L_08A4FEE0: L_08A4FEF4: aot_gpr_4 = (ctx.gpr[23] & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A4FF08; } @@ -9010,7 +8737,6 @@ L_08A4FF4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A4FF6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 3u, 0x08A50024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9019,7 +8745,6 @@ L_08A4FF6C: L_08A4FF74: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 3u, 0x08A50024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9029,7 +8754,6 @@ L_08A4FF80: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (ctx.gpr[22] < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 3u, 0x08A50024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9051,7 +8775,6 @@ L_08A4FFAC: aot_fpr_12 = aot_fpr_20 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(640), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A4FFC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FFC4u) goto L_08A4FFC4; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FFC4: @@ -9060,7 +8783,6 @@ L_08A4FFC4: aot_fpr_12 = aot_fpr_20 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(644), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A4FFDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A4FFDCu) goto L_08A4FFDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A4FFDC: diff --git a/profiles/vcs/generated/generated_unit_0147.cpp b/profiles/vcs/generated/generated_unit_0147.cpp index 7a3fc1c..3f3b2c4 100644 --- a/profiles/vcs/generated/generated_unit_0147.cpp +++ b/profiles/vcs/generated/generated_unit_0147.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0147[4096] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 7, 0, 8, 0, 9, 0, 0, 0, 0, - 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 0, 24, 0, - 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 30, 0, 31, 0, 32, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 43, 0, 44, 0, 45, 0, 0, 46, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 53, 0, 54, 0, 0, 55, 0, 56, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 61, - 0, 62, 0, 0, 63, 0, 64, 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 74, 0, - 75, 0, 76, 0, 77, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, - 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, - 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, - 0, 0, 107, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 0, - 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, - 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, - 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, - 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, - 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 0, 0, - 0, 184, 0, 0, 185, 0, 186, 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 191, 0, 0, 0, 192, 0, - 0, 193, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 196, - 0, 197, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, - 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, - 218, 0, 0, 0, 0, 0, 0, 219, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, 0, 225, - 0, 0, 226, 0, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 229, 0, 230, 0, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 234, - 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 237, 0, 238, 0, 239, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 244, 0, 0, 0, 0, 0, 245, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, - 0, 252, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, - 259, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 267, 0, 0, 268, 0, 0, 269, - 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 274, 0, 275, 0, 0, 0, 276, 0, 277, 0, 278, - 0, 279, 0, 280, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 283, 0, 284, 0, 285, - 0, 286, 287, 0, 288, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 292, 293, 0, 0, 294, 295, 0, 0, 0, 296, 0, 297, 0, 0, 298, - 0, 299, 0, 0, 300, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 307, 0, 308, 0, 0, - 0, 309, 0, 310, 0, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 315, 0, 0, 316, 0, 0, 317, - 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 321, 0, 322, 0, 0, 0, 323, 324, 0, 325, 0, 0, 0, 326, 0, 327, 0, 328, 0, - 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 334, 0, 0, 335, 0, 0, 336, 0, 0, 337, 0, 0, 338, - 0, 0, 339, 0, 0, 340, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, - 0, 0, 344, 0, 345, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 352, 0, 353, - 0, 0, 0, 354, 0, 355, 0, 356, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 361, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 363, 0, 364, 0, 365, 0, 366, 367, 0, 368, 0, 369, 0, 370, 0, 371, - 0, 0, 372, 373, 0, 0, 374, 375, 0, 0, 376, 0, 377, 0, 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 0, 382, 0, 0, 0, 0, - 0, 383, 0, 0, 384, 0, 385, 0, 386, 0, 0, 0, 387, 0, 388, 0, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, - 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 399, 0, 400, 0, 0, 0, 401, - 402, 0, 403, 0, 0, 0, 404, 0, 405, 0, 406, 0, 407, 0, 0, 0, 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 410, 0, 411, 0, 0, 412, - 0, 0, 413, 0, 0, 414, 0, 0, 415, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, - 0, 420, 0, 0, 421, 0, 0, 422, 0, 423, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 425, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 429, 0, 430, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, - 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, - 0, 438, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 440, 0, 441, 0, 0, 0, 0, 442, 0, 443, 0, 444, 0, 445, 0, 446, 0, 0, 0, 0, - 447, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, 450, 0, 451, 452, 0, 453, 0, 0, 0, 454, 0, 0, 455, 456, 0, 457, 0, 458, - 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 463, 0, 464, 0, 465, 466, 0, 467, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 469, 0, 470, 471, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, - 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 479, 0, 480, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 485, 0, 0, 486, 0, 487, 0, 488, - 0, 489, 0, 490, 0, 0, 0, 0, 491, 0, 0, 492, 493, 0, 494, 0, 495, 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 504, 0, 0, 505, 0, 0, 506, 0, 0, 507, 0, 0, 508, 0, 0, 0, 509, 510, 0, 511, - 0, 512, 0, 513, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 519, 0, - 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 522, 0, 523, 0, 0, 524, 0, 525, 0, 0, 0, 0, 526, 0, 527, 0, 0, 0, 0, 528, 0, 0, - 0, 529, 530, 0, 0, 531, 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 541, 0, 0, 542, 0, 0, - 543, 0, 544, 0, 0, 545, 546, 0, 0, 547, 0, 0, 548, 0, 0, 0, 549, 550, 0, 0, 551, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 557, 558, 0, 559, 0, 0, 0, 0, - 0, 0, 0, 560, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 563, 0, 0, 0, 564, 0, 565, 0, 566, 0, 567, 0, 568, - 0, 569, 570, 0, 0, 0, 571, 572, 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 576, 0, 577, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 583, 0, 0, - 584, 0, 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, - 591, 0, 0, 592, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, - 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, - 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 606, 0, 0, 0, 607, 0, 608, 0, 0, 0, 609, 0, 610, 0, 0, 0, - 611, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, - 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 623, - 0, 0, 0, 0, 624, 0, 0, 625, 0, 626, 0, 627, 0, 0, 628, 0, 0, 629, 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, - 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 637, 0, 0, 638, 0, 0, 0, - 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 641, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 644, 0, 0, 0, 645, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 651, 0, - 652, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 660, - 0, 0, 0, 661, 0, 662, 0, 663, 0, 664, 665, 0, 666, 0, 667, 0, 668, 0, 669, 0, 0, 670, 0, 671, 672, 0, 673, 0, 0, 674, 0, 675, - 676, 0, 677, 0, 0, 678, 0, 0, 679, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 684, - 685, 0, 686, 0, 687, 0, 0, 688, 0, 689, 690, 0, 691, 0, 0, 692, 0, 0, 693, 0, 694, 695, 0, 696, 0, 0, 697, 0, 698, 0, 0, 0, - 699, 0, 0, 0, 700, 0, 701, 0, 0, 702, 0, 703, 0, 704, 0, 705, 0, 706, 707, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, - 0, 709, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, - 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 716, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, - 0, 0, 718, 0, 0, 0, 0, 719, 0, 720, 0, 0, 0, 721, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 725, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, - 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 731, 0, 732, 0, 0, 0, 733, 0, 0, - 0, 734, 0, 0, 735, 0, 0, 0, 736, 0, 0, 737, 0, 738, 0, 739, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, - 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 0, 745, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 748, 0, 0, 0, 749, 750, 751, 0, 0, 0, 752, 753, 0, 0, 0, 754, - 0, 755, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 757, 0, 0, 0, 758, 0, 759, 0, 0, 0, 760, 0, 761, 0, 0, 0, 0, - 0, 0, 0, 0, 762, 0, 763, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 765, 0, 0, 766, 0, 0, 0, 0, 767, 768, 769, 0, 770, 0, - 771, 0, 0, 772, 0, 773, 0, 774, 0, 775, 0, 0, 0, 0, 776, 0, 777, 0, 778, 0, 779, 0, 780, 0, 781, 0, 782, 0, 783, 0, 0, 784, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0147[64] = { + 0x4140800A0A828A21ull, 0x414014A028000000ull, 0x010500240AA21101ull, 0x280952A008202014ull, + 0x00A00952A40952A0ull, 0x009012554244000Aull, 0x0040400000000000ull, 0x0101000000000080ull, + 0x4000104104105108ull, 0x0001400008102808ull, 0x0100010442000000ull, 0x1000000018000000ull, + 0x4040810204480200ull, 0x0040020109000008ull, 0x0204220800000001ull, 0x4000000000040001ull, + 0x1108440542200040ull, 0x2051000020009000ull, 0x0000220002200008ull, 0x08881000008A2000ull, + 0x0202202000100010ull, 0x1284000082410108ull, 0x8400008244501152ull, 0x2100800080009052ull, + 0x2820428004442041ull, 0x84928A04A0810A81ull, 0x831000020022A440ull, 0x0800001000002000ull, + 0x0002002210002040ull, 0x0042081108008101ull, 0xA8A5100292900010ull, 0x94661456A900010Aull, + 0x924800AA2A412492ull, 0x924A14215458A904ull, 0x40800414040020A4ull, 0x211014A8A9000400ull, + 0x092494CCAAD52000ull, 0x8A904924800A5152ull, 0x1100492494421545ull, 0x2910004400001292ull, + 0x1020102210020000ull, 0xAC8B4A010AA85202ull, 0x122269005AA48100ull, 0xA921020001015204ull, + 0x002040880121590Aull, 0x5220024AB1249140ull, 0x011120A621429488ull, 0x4093126524888004ull, + 0xAA8A00480B0A0800ull, 0x20810400209522C6ull, 0x2000110902810489ull, 0x0011102088021001ull, + 0x4020900314512000ull, 0x204A4A90A4102801ull, 0x1140450412402044ull, 0x0004202144111040ull, + 0xA5A556A8A2108000ull, 0x14B49695A4100925ull, 0x081400120406AA51ull, 0x04022284040A0008ull, + 0x2282080840004440ull, 0x006208010088A912ull, 0x0A2882028C710800ull, 0x955542A95C240850ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0147[64] = { + 1u, 16u, 25u, 38u, 52u, 69u, 83u, 85u, 88u, 98u, 105u, 110u, 113u, 122u, 128u, 134u, + 137u, 148u, 155u, 160u, 168u, 174u, 184u, 197u, 206u, 218u, 235u, 246u, 249u, 255u, 264u, 279u, + 299u, 318u, 339u, 349u, 362u, 383u, 402u, 420u, 431u, 438u, 459u, 476u, 489u, 502u, 520u, 537u, + 554u, 569u, 584u, 596u, 605u, 617u, 633u, 646u, 656u, 676u, 699u, 714u, 724u, 734u, 747u, 762u, }; void recomp_unit_0147_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0147_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A50000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0147[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0147[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0147[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A50000; @@ -967,7 +874,6 @@ L_08A50014: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (ctx.gpr[22] < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0146_entry, 146u, 584u, 0x08A4FF90u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -975,7 +881,6 @@ L_08A50014: } L_08A50024: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A5008C; } @@ -985,7 +890,6 @@ L_08A5002C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A50064; } @@ -993,7 +897,6 @@ L_08A5002C: } L_08A5003C: aot_gpr_31 = (0x08A50044u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A50044u) goto L_08A50044; AOT_REGCACHE_SYNC_OUT(); return; L_08A50044: @@ -1007,7 +910,6 @@ L_08A50044: AOT_REGCACHE_SYNC_OUT(); return; L_08A5005C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5016C; } @@ -1015,7 +917,6 @@ L_08A5005C: } L_08A50064: aot_gpr_31 = (0x08A5006Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5006Cu) goto L_08A5006C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5006C: @@ -1029,7 +930,6 @@ L_08A5006C: AOT_REGCACHE_SYNC_OUT(); return; L_08A50084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5016C; } @@ -1057,7 +957,6 @@ L_08A500BC: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(686), static_cast(ctx.gpr[1])); aot_gpr_4 = (ctx.gpr[23] & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A500E0; } @@ -1115,7 +1014,6 @@ L_08A500F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5016C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50334; } @@ -1129,7 +1027,6 @@ L_08A50174: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A50200; } @@ -1167,7 +1064,6 @@ L_08A501B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A501D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50334; } @@ -1199,7 +1095,6 @@ L_08A50200: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A50310; } @@ -1209,7 +1104,6 @@ L_08A50220: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A5025C; } @@ -1234,7 +1128,6 @@ L_08A50244: AOT_REGCACHE_SYNC_OUT(); return; L_08A50254: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A50264; } @@ -1250,7 +1143,6 @@ L_08A5025C: } L_08A50264: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A50308; } @@ -1283,7 +1175,6 @@ L_08A50294: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(710), static_cast(ctx.gpr[1])); aot_gpr_4 = (ctx.gpr[23] & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A502C8; } @@ -1322,7 +1213,6 @@ L_08A502E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A50308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50334; } @@ -1360,11 +1250,20 @@ L_08A50354: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(7016))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5036C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(736), std::bit_cast(aot_fpr_12)); @@ -1380,7 +1279,6 @@ L_08A5036C: AOT_REGCACHE_SYNC_OUT(); return; L_08A50394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50504; } @@ -1388,7 +1286,6 @@ L_08A50394: } L_08A5039C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A503CC; } @@ -1397,7 +1294,6 @@ L_08A5039C: L_08A503A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A503CC; } @@ -1410,7 +1306,6 @@ L_08A503B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A503B8: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A503CC; } @@ -1434,7 +1329,6 @@ L_08A503CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A503EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50504; } @@ -1453,7 +1347,6 @@ L_08A503F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A50414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50504; } @@ -1461,7 +1354,6 @@ L_08A50414: } L_08A5041C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A5044C; } @@ -1470,7 +1362,6 @@ L_08A5041C: L_08A50424: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5044C; } @@ -1483,7 +1374,6 @@ L_08A50430: AOT_REGCACHE_SYNC_OUT(); return; L_08A50438: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A5044C; } @@ -1512,7 +1402,6 @@ L_08A50468: AOT_REGCACHE_SYNC_OUT(); return; L_08A50474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50504; } @@ -1520,7 +1409,6 @@ L_08A50474: } L_08A5047C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A504AC; } @@ -1529,7 +1417,6 @@ L_08A5047C: L_08A50484: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A504AC; } @@ -1542,7 +1429,6 @@ L_08A50490: AOT_REGCACHE_SYNC_OUT(); return; L_08A50498: { const bool branch_taken = ctx.gpr[18] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A504AC; } @@ -1568,7 +1454,6 @@ L_08A504AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A504D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50504; } @@ -1589,7 +1474,6 @@ L_08A504DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A50504: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A50564; } @@ -1665,12 +1549,10 @@ L_08A50564: AOT_REGCACHE_SYNC_OUT(); return; L_08A50578: aot_gpr_31 = (0x08A50580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A50580u) goto L_08A50580; AOT_REGCACHE_SYNC_OUT(); return; L_08A50580: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08A505D0; } @@ -1712,7 +1594,6 @@ L_08A505B0: L_08A505D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A506D8; } @@ -1811,7 +1692,17 @@ L_08A506D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5071C: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1903,7 +1794,6 @@ L_08A5080C: ctx.gpr[16] = (aot_gpr_29 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(48))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A50934; } @@ -1918,7 +1808,6 @@ L_08A50820: AOT_REGCACHE_SYNC_OUT(); return; L_08A50830: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A50934; } @@ -1930,7 +1819,6 @@ L_08A50838: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A50934; } @@ -1942,7 +1830,6 @@ L_08A50850: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A50934; } @@ -1954,7 +1841,6 @@ L_08A50868: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A50934; } @@ -1966,7 +1852,6 @@ L_08A50880: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A50934; } @@ -1978,7 +1863,6 @@ L_08A50898: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A50934; } @@ -2000,7 +1884,6 @@ L_08A508B0: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08A508F8; @@ -2009,9 +1892,7 @@ L_08A508B0: L_08A508F8: { const float fs = aot_fpr_13; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50934; } @@ -2023,9 +1904,7 @@ L_08A5090C: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50934; } @@ -2042,7 +1921,6 @@ L_08A50934: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(112)))))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5080C; } @@ -2053,9 +1931,7 @@ L_08A50950: aot_gpr_4 = (aot_gpr_4 | 40960u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50AA0; } @@ -2083,7 +1959,6 @@ L_08A5096C: AOT_REGCACHE_SYNC_OUT(); return; L_08A509B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A50AA0; } @@ -2130,7 +2005,6 @@ L_08A509C0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A50A88; } @@ -2141,7 +2015,6 @@ L_08A50A64: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & 8192u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A50A88; } @@ -2184,7 +2057,17 @@ L_08A50AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A50AE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2360,7 +2243,6 @@ L_08A50C24: L_08A50C4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2370,7 +2252,6 @@ L_08A50C58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2383,7 +2264,6 @@ L_08A50C68: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2396,7 +2276,6 @@ L_08A50C84: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2409,7 +2288,6 @@ L_08A50CA0: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2422,7 +2300,6 @@ L_08A50CBC: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2436,7 +2313,6 @@ L_08A50CD8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A50D0C; } @@ -2447,7 +2323,6 @@ L_08A50CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2472,7 +2347,6 @@ L_08A50D0C: aot_fpr_13 = ctx.fpr[15] + aot_fpr_13; aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A50D60; @@ -2481,7 +2355,6 @@ L_08A50D0C: L_08A50D60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A50D80; } @@ -2490,9 +2363,7 @@ L_08A50D60: L_08A50D6C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2532,9 +2403,7 @@ L_08A50DA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2548,9 +2417,7 @@ L_08A50DD8: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2667,9 +2534,7 @@ L_08A50E00: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2679,9 +2544,7 @@ L_08A50E8C: aot_fpr_12 = ctx.fpr[28] - aot_fpr_12; { const float fs = aot_fpr_12; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50EB4; } @@ -2709,9 +2572,7 @@ L_08A50EC8: aot_gpr_4 = (aot_gpr_4 | 40960u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A50F00; } @@ -2762,7 +2623,17 @@ L_08A50F00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A50F48: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2884,7 +2755,6 @@ L_08A51078: } L_08A51080: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A511D8; } @@ -2898,7 +2768,6 @@ L_08A51088: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A510B8; } @@ -2908,7 +2777,6 @@ L_08A510A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A511D8; } @@ -2927,7 +2795,6 @@ L_08A510CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A510F0; } @@ -2937,7 +2804,6 @@ L_08A510E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-996)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5113C; } @@ -2984,7 +2850,6 @@ L_08A510F0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A51130; @@ -2993,7 +2858,6 @@ L_08A510F0: L_08A51130: aot_fpr_12 = aot_fpr_12 / aot_fpr_13; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A51174; } @@ -3113,9 +2977,7 @@ L_08A51174: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A511D8; } @@ -3123,9 +2985,7 @@ L_08A51174: } L_08A511C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A511D8; } @@ -3142,7 +3002,6 @@ L_08A511D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(96)))))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A51054; } @@ -3154,7 +3013,6 @@ L_08A511F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A51254; } @@ -3180,7 +3038,6 @@ L_08A5120C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A512A4; } @@ -3190,7 +3047,6 @@ L_08A51254: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-996)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A512A4; } @@ -3218,9 +3074,7 @@ L_08A51264: goto L_08A512A4; L_08A512A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A51410; } @@ -3327,7 +3181,6 @@ L_08A51334: AOT_REGCACHE_SYNC_OUT(); return; L_08A51344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5135C; } @@ -3431,7 +3284,6 @@ L_08A5135C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51410; } @@ -3495,7 +3347,17 @@ L_08A51410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A51450: aot_gpr_29 = (aot_gpr_29 + static_cast(-448)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3519,7 +3381,6 @@ L_08A51494: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51A54; } @@ -3575,7 +3436,6 @@ L_08A514E4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A515F0; } @@ -3586,7 +3446,6 @@ L_08A5150C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A515F0; } @@ -3662,7 +3521,6 @@ L_08A515C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A515DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A515F0; } @@ -3678,7 +3536,6 @@ L_08A515F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51730; } @@ -3707,7 +3564,6 @@ L_08A51620: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51718; } @@ -3793,7 +3649,6 @@ L_08A516E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A516FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A51718; } @@ -3815,7 +3670,6 @@ L_08A51718: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A51604; } @@ -3824,7 +3678,6 @@ L_08A51718: L_08A51730: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A51A3C; } @@ -3879,9 +3732,7 @@ L_08A5173C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A51A3C; } @@ -3936,9 +3787,7 @@ L_08A5177C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A51A3C; } @@ -3953,7 +3802,6 @@ L_08A517BC: ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(50))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A51A3C; } @@ -4019,7 +3867,6 @@ L_08A51834: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(50))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A519A4; } @@ -4029,7 +3876,6 @@ L_08A51848: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A5192C; } @@ -4039,7 +3885,6 @@ L_08A51858: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51924; } @@ -4079,7 +3924,6 @@ L_08A51868: AOT_REGCACHE_SYNC_OUT(); return; L_08A5189C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5191C; } @@ -4090,7 +3934,6 @@ L_08A518A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(14)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5191C; } @@ -4103,7 +3946,6 @@ L_08A518B8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A51900; } @@ -4120,7 +3962,6 @@ L_08A518D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A518EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A51900; } @@ -4129,7 +3970,6 @@ L_08A518EC: L_08A518F4: ctx.gpr[21] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5191C; } @@ -4142,7 +3982,6 @@ L_08A51900: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(14)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A518B8; } @@ -4150,7 +3989,6 @@ L_08A51900: } L_08A5191C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A519A4; } @@ -4158,7 +3996,6 @@ L_08A5191C: } L_08A51924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A519A4; } @@ -4169,7 +4006,6 @@ L_08A5192C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(50))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A519A4; } @@ -4182,7 +4018,6 @@ L_08A51940: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(6))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A51988; } @@ -4199,7 +4034,6 @@ L_08A5195C: AOT_REGCACHE_SYNC_OUT(); return; L_08A51974: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A51988; } @@ -4208,7 +4042,6 @@ L_08A51974: L_08A5197C: ctx.gpr[21] = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A519A4; } @@ -4221,7 +4054,6 @@ L_08A51988: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(50))); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A51940; } @@ -4229,7 +4061,6 @@ L_08A51988: } L_08A519A4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A51A18; } @@ -4244,7 +4075,6 @@ L_08A519AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A519BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A51A18; } @@ -4259,7 +4089,6 @@ L_08A519C4: L_08A519D0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A519E8; } @@ -4293,7 +4122,6 @@ L_08A51A18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(328))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51A3C; } @@ -4302,7 +4130,6 @@ L_08A51A18: L_08A51A28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51A3C; } @@ -4315,7 +4142,6 @@ L_08A51A34: AOT_REGCACHE_SYNC_OUT(); return; L_08A51A3C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A51A54; } @@ -4347,7 +4173,17 @@ L_08A51A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A51A84: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4357,7 +4193,6 @@ L_08A51A84: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A51AE4; } @@ -4367,7 +4202,6 @@ L_08A51AD0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A51AE4; } @@ -4382,7 +4216,6 @@ L_08A51AE4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51DD8; } @@ -4400,7 +4233,6 @@ L_08A51AFC: aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A51B34; @@ -4507,7 +4339,6 @@ L_08A51B90: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A51BECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A51BECu) goto L_08A51BEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A51BEC: @@ -4646,7 +4477,6 @@ L_08A51CC4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A51D00u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A51D00u) goto L_08A51D00; AOT_REGCACHE_SYNC_OUT(); return; L_08A51D00: @@ -4714,7 +4544,6 @@ L_08A51DAC: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(625), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(625))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A51DD8; } @@ -4748,7 +4577,17 @@ L_08A51DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A51E10: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4757,13 +4596,11 @@ L_08A51E10: ctx.gpr[30] = (0u | 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); aot_gpr_31 = (0x08A51E50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 32u, 0x08A4031Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A51E50u) goto L_08A51E50; AOT_REGCACHE_SYNC_OUT(); return; L_08A51E50: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51E84; } @@ -4771,13 +4608,11 @@ L_08A51E50: } L_08A51E5C: aot_gpr_31 = (0x08A51E64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_089474C4, 80u, 661u, 0x089474C4u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0080_entry, 80u, 661u, 0x089474C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A51E64u) goto L_08A51E64; AOT_REGCACHE_SYNC_OUT(); return; L_08A51E64: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51E84; } @@ -4786,7 +4621,6 @@ L_08A51E64: L_08A51E70: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(340))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A51E84; } @@ -4794,7 +4628,6 @@ L_08A51E70: } L_08A51E7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A522F8; } @@ -4811,7 +4644,6 @@ L_08A51E84: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (0u | 194u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A51F04; } @@ -4821,7 +4653,6 @@ L_08A51EB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A51EFC; } @@ -4829,13 +4660,11 @@ L_08A51EB0: } L_08A51EC0: aot_gpr_31 = (0x08A51EC8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B01E00, 191u, 504u, 0x08B01E00u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0191_entry, 191u, 504u, 0x08B01E00u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A51EC8u) goto L_08A51EC8; AOT_REGCACHE_SYNC_OUT(); return; L_08A51EC8: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A51EF4; } @@ -4850,7 +4679,6 @@ L_08A51EDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(104))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A51F0C; } @@ -4858,7 +4686,6 @@ L_08A51EDC: } L_08A51EEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A522F8; } @@ -4866,7 +4693,6 @@ L_08A51EEC: } L_08A51EF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A522F8; } @@ -4874,7 +4700,6 @@ L_08A51EF4: } L_08A51EFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A522F8; } @@ -4882,7 +4707,6 @@ L_08A51EFC: } L_08A51F04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A522F8; } @@ -4912,7 +4736,6 @@ L_08A51F20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(112)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A51F6C; } @@ -4921,7 +4744,6 @@ L_08A51F20: L_08A51F60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(1964))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A51FB0; } @@ -4939,7 +4761,6 @@ L_08A51F74: AOT_REGCACHE_SYNC_OUT(); return; L_08A51F7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A51F88; } @@ -4993,7 +4814,6 @@ L_08A51FC4: L_08A51FC8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(246))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A51FD8; } @@ -5006,7 +4826,6 @@ L_08A51FD8: ctx.gpr[22] = (0u | 105u); ctx.gpr[23] = (0u | 106u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A51FF0; } @@ -5019,7 +4838,6 @@ L_08A51FE8: L_08A51FF0: aot_gpr_5 = (ctx.gpr[20] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A521C4; } @@ -5027,7 +4845,6 @@ L_08A51FF0: } L_08A51FFC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A5208C; } @@ -5042,7 +4859,6 @@ L_08A52004: L_08A52010: ctx.gpr[23] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A52028; } @@ -5062,7 +4878,6 @@ L_08A52028: L_08A52034: ctx.gpr[30] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A52058; } @@ -5072,9 +4887,7 @@ L_08A52040: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A52150; } @@ -5089,7 +4902,6 @@ L_08A52058: goto L_08A52064; L_08A52064: aot_gpr_31 = (0x08A5206Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5206Cu) goto L_08A5206C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5206C: @@ -5118,7 +4930,6 @@ L_08A5208C: AOT_REGCACHE_SYNC_OUT(); return; L_08A52094: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A520CC; } @@ -5136,7 +4947,6 @@ L_08A5209C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A52150; } @@ -5151,7 +4961,6 @@ L_08A520CC: L_08A520D8: ctx.gpr[22] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A520F0; } @@ -5171,7 +4980,6 @@ L_08A520F0: L_08A520FC: ctx.gpr[30] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A52120; } @@ -5181,9 +4989,7 @@ L_08A52108: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A52150; } @@ -5198,7 +5004,6 @@ L_08A52120: goto L_08A5212C; L_08A5212C: aot_gpr_31 = (0x08A52134u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52134u) goto L_08A52134; AOT_REGCACHE_SYNC_OUT(); return; L_08A52134: @@ -5217,7 +5022,6 @@ L_08A5214C: goto L_08A52150; L_08A52150: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A52168; } @@ -5227,7 +5031,6 @@ L_08A52158: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A52214; } @@ -5245,7 +5048,6 @@ L_08A52170: AOT_REGCACHE_SYNC_OUT(); return; L_08A52178: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A52214; } @@ -5256,7 +5058,6 @@ L_08A52180: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52214; } @@ -5300,7 +5101,6 @@ L_08A521CC: L_08A521D8: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A521F0; } @@ -5320,7 +5120,6 @@ L_08A521F0: L_08A521FC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A52214; } @@ -5333,7 +5132,6 @@ L_08A52208: goto L_08A52214; L_08A52214: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A52288; } @@ -5343,9 +5141,7 @@ L_08A5221C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1844))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A52288; } @@ -5362,7 +5158,6 @@ L_08A52234: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 + static_cast(272)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A52268; @@ -5383,7 +5178,6 @@ L_08A52268: AOT_REGCACHE_SYNC_OUT(); return; L_08A52288: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A522F8; } @@ -5393,9 +5187,7 @@ L_08A52290: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1848))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A522F8; } @@ -5412,7 +5204,6 @@ L_08A522A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(92))); aot_gpr_4 = (aot_gpr_4 + static_cast(272)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A522DC; @@ -5449,7 +5240,17 @@ L_08A522F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52328: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -5472,7 +5273,6 @@ L_08A52360: AOT_REGCACHE_SYNC_OUT(); return; L_08A5236C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A52394; } @@ -5480,7 +5280,6 @@ L_08A5236C: } L_08A52374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A523B0; } @@ -5495,7 +5294,6 @@ L_08A5237C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5238C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5509,7 +5307,6 @@ L_08A52394: L_08A5239C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(340))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A523B0; } @@ -5517,7 +5314,6 @@ L_08A5239C: } L_08A523A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5538,7 +5334,6 @@ L_08A523D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(104))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5568,7 +5363,6 @@ L_08A523F4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A52440; } @@ -5577,7 +5371,6 @@ L_08A523F4: L_08A52434: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(1964))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A5247C; } @@ -5595,7 +5388,6 @@ L_08A52448: AOT_REGCACHE_SYNC_OUT(); return; L_08A52450: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5245C; } @@ -5616,7 +5408,6 @@ L_08A52464: AOT_REGCACHE_SYNC_OUT(); return; L_08A5246C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5249C; } @@ -5633,7 +5424,6 @@ L_08A52474: L_08A5247C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(245))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A5248C; } @@ -5645,7 +5435,6 @@ L_08A52488: L_08A5248C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(246))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5249C; } @@ -5657,7 +5446,6 @@ L_08A52498: L_08A5249C: aot_gpr_4 = (ctx.gpr[20] | ctx.gpr[19]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52668; } @@ -5665,7 +5453,6 @@ L_08A5249C: } L_08A524A8: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A52538; } @@ -5680,7 +5467,6 @@ L_08A524B0: L_08A524BC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A524D4; } @@ -5700,7 +5486,6 @@ L_08A524D4: L_08A524E0: ctx.gpr[22] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A52504; } @@ -5710,9 +5495,7 @@ L_08A524EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A52600; } @@ -5727,7 +5510,6 @@ L_08A52504: goto L_08A52510; L_08A52510: aot_gpr_31 = (0x08A52518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52518u) goto L_08A52518; AOT_REGCACHE_SYNC_OUT(); return; L_08A52518: @@ -5757,7 +5539,6 @@ L_08A52538: AOT_REGCACHE_SYNC_OUT(); return; L_08A52544: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5257C; } @@ -5775,7 +5556,6 @@ L_08A5254C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A52600; } @@ -5790,7 +5570,6 @@ L_08A5257C: L_08A52588: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A525A0; } @@ -5810,7 +5589,6 @@ L_08A525A0: L_08A525AC: ctx.gpr[22] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A525D0; } @@ -5820,9 +5598,7 @@ L_08A525B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(36))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A52600; } @@ -5837,7 +5613,6 @@ L_08A525D0: goto L_08A525DC; L_08A525DC: aot_gpr_31 = (0x08A525E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A525E4u) goto L_08A525E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A525E4: @@ -5856,7 +5631,6 @@ L_08A525FC: goto L_08A52600; L_08A52600: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A52618; } @@ -5866,7 +5640,6 @@ L_08A52608: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5884,7 +5657,6 @@ L_08A52620: AOT_REGCACHE_SYNC_OUT(); return; L_08A52628: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5895,7 +5667,6 @@ L_08A52630: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5933,7 +5704,6 @@ L_08A52670: L_08A5267C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A52694; } @@ -5953,7 +5723,6 @@ L_08A52694: L_08A526A0: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A526B8; } @@ -5981,12 +5750,21 @@ L_08A526B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A526E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52724; } @@ -6011,7 +5789,6 @@ L_08A52704: L_08A52710: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A52724; } @@ -6019,7 +5796,6 @@ L_08A52710: } L_08A5271C: aot_gpr_31 = (0x08A52724u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52724u) goto L_08A52724; AOT_REGCACHE_SYNC_OUT(); return; L_08A52724: @@ -6029,7 +5805,17 @@ L_08A52724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52730: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_4); @@ -6124,7 +5910,17 @@ L_08A527F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52844: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -6177,7 +5973,6 @@ L_08A528B0: aot_gpr_4 = (aot_gpr_4 + static_cast(16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A528F0; } @@ -6220,7 +6015,6 @@ L_08A52904: L_08A52924: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52938; } @@ -6228,7 +6022,6 @@ L_08A52924: } L_08A52930: aot_gpr_31 = (0x08A52938u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52938u) goto L_08A52938; AOT_REGCACHE_SYNC_OUT(); return; L_08A52938: @@ -6258,7 +6051,6 @@ L_08A5295C: goto L_08A52964; L_08A52964: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A529A4; } @@ -6300,7 +6092,6 @@ L_08A529AC: goto L_08A529B8; L_08A529B8: aot_gpr_31 = (0x08A529C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A529C0u) goto L_08A529C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A529C0: @@ -6335,7 +6126,6 @@ L_08A529E8: goto L_08A529EC; L_08A529EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A529FC; } @@ -6362,7 +6152,17 @@ L_08A529FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52A20: aot_gpr_5 = (2237u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-28736)); @@ -6370,7 +6170,6 @@ L_08A52A20: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A52A64; } @@ -6379,7 +6178,6 @@ L_08A52A20: L_08A52A3C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A52A5C; } @@ -6388,7 +6186,6 @@ L_08A52A3C: L_08A52A48: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(13))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52A6C; } @@ -6423,11 +6220,20 @@ L_08A52A6C: goto L_08A52A70; L_08A52A70: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52A78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6453,7 +6259,6 @@ L_08A52AA0: goto L_08A52AAC; L_08A52AAC: aot_gpr_31 = (0x08A52AB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52AB4u) goto L_08A52AB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A52AB4: @@ -6501,7 +6306,17 @@ L_08A52AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52B08: aot_gpr_5 = (2237u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-28736)); @@ -6509,7 +6324,6 @@ L_08A52B08: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A52B30; } @@ -6530,11 +6344,20 @@ L_08A52B30: goto L_08A52B38; L_08A52B38: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52B40: aot_gpr_5 = (2237u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-28736)); @@ -6547,7 +6370,17 @@ L_08A52B40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2234u << 16u); @@ -6567,7 +6400,17 @@ L_08A52B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52BA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -6608,7 +6451,6 @@ L_08A52BE0: } L_08A52BEC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52C04; } @@ -6616,7 +6458,6 @@ L_08A52BEC: } L_08A52BF4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52C04; } @@ -6624,7 +6465,6 @@ L_08A52BF4: } L_08A52BFC: aot_gpr_31 = (0x08A52C04u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52C04u) goto L_08A52C04; AOT_REGCACHE_SYNC_OUT(); return; L_08A52C04: @@ -6656,7 +6496,6 @@ L_08A52C2C: goto L_08A52C30; L_08A52C30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52C40; } @@ -6679,7 +6518,17 @@ L_08A52C40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52C54: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), aot_gpr_5); jump_target = aot_gpr_31; @@ -6687,7 +6536,17 @@ L_08A52C54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52C60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -6699,7 +6558,6 @@ L_08A52C60: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A52CB8; } @@ -6718,7 +6576,6 @@ L_08A52C9C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A52C8C; } @@ -6735,7 +6592,17 @@ L_08A52CB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52CD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[20]); @@ -6979,7 +6846,6 @@ L_08A52E88: } L_08A52E94: aot_gpr_31 = (0x08A52E9Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A52E9Cu) goto L_08A52E9C; AOT_REGCACHE_SYNC_OUT(); return; L_08A52E9C: @@ -7027,7 +6893,17 @@ L_08A52EE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52F08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -7048,7 +6924,6 @@ L_08A52F3C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A52FDC; } @@ -7058,7 +6933,6 @@ L_08A52F4C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A52FD0; } @@ -7067,7 +6941,6 @@ L_08A52F4C: L_08A52F5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A52F88; } @@ -7105,7 +6978,6 @@ L_08A52F94: L_08A52F98: aot_gpr_5 = (ctx.gpr[18] + static_cast(4)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A52FC4; } @@ -7142,7 +7014,6 @@ L_08A52FC4: L_08A52FD0: ctx.gpr[18] = (ctx.gpr[18] + static_cast(4)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A52F4C; } @@ -7162,7 +7033,17 @@ L_08A52FDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A52FF8: aot_gpr_6 = (aot_gpr_5 | 0u); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -7176,7 +7057,6 @@ L_08A52FF8: ctx.gpr[7] = (0u | 0u); ctx.gpr[8] = (ctx.gpr[7] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A53060; } @@ -7188,7 +7068,6 @@ L_08A5302C: aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A5304C; } @@ -7196,7 +7075,6 @@ L_08A5302C: } L_08A53044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A53064; } @@ -7207,7 +7085,6 @@ L_08A5304C: ctx.gpr[7] = (ctx.gpr[7] & 255u); ctx.gpr[8] = (ctx.gpr[7] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A5302C; } @@ -7218,11 +7095,20 @@ L_08A53060: goto L_08A53064; L_08A53064: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5306C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2237u << 16u); @@ -7240,7 +7126,17 @@ L_08A5308C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53098: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -7252,7 +7148,6 @@ L_08A53098: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); ctx.gpr[7] = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A530CC; } @@ -7286,7 +7181,6 @@ L_08A530DC: } L_08A530E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A530FC; } @@ -7294,7 +7188,6 @@ L_08A530E4: } L_08A530EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A53104; } @@ -7302,7 +7195,6 @@ L_08A530EC: } L_08A530F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A53108; } @@ -7310,7 +7202,6 @@ L_08A530F4: } L_08A530FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5311C; } @@ -7334,11 +7225,20 @@ L_08A53118: goto L_08A5311C; L_08A5311C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53124: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7348,7 +7248,6 @@ L_08A53124: L_08A53134: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53148; } @@ -7364,7 +7263,6 @@ L_08A53140: } L_08A53148: aot_gpr_31 = (0x08A53150u); - // nop goto L_08A52A20; L_08A53150: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7373,7 +7271,17 @@ L_08A53150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5315C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7523,7 +7431,17 @@ L_08A532A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A532B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7541,7 +7459,6 @@ L_08A532B0: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A53330; } @@ -7564,7 +7481,6 @@ L_08A53300: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A532F4; } @@ -7582,7 +7498,17 @@ L_08A53330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53344: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7616,7 +7542,17 @@ L_08A5337C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53394: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7640,7 +7576,17 @@ L_08A533C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A533D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -7666,7 +7612,6 @@ L_08A533D0: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A534B0; } @@ -7724,7 +7669,6 @@ L_08A53484: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53434; } @@ -7763,14 +7707,34 @@ L_08A534D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A534F8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53500: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7789,7 +7753,6 @@ L_08A53500: } L_08A5352C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A53618; } @@ -7814,7 +7777,6 @@ L_08A53550: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A53590; } @@ -7823,7 +7785,6 @@ L_08A53550: L_08A53568: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A53590; } @@ -7844,7 +7805,6 @@ L_08A5357C: L_08A53590: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A535F4; } @@ -7857,7 +7817,6 @@ L_08A5359C: AOT_REGCACHE_SYNC_OUT(); return; L_08A535A4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A535F4; } @@ -7872,7 +7831,6 @@ L_08A535AC: L_08A535B8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A535CC; } @@ -7932,7 +7890,17 @@ L_08A53618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53634: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7956,7 +7924,6 @@ L_08A53658: L_08A53664: aot_gpr_4 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A53658; } @@ -7975,7 +7942,17 @@ L_08A53670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53688: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7996,7 +7973,17 @@ L_08A536A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A536B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8020,7 +8007,17 @@ L_08A536E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A536F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[18]); @@ -8030,7 +8027,6 @@ L_08A536F0: { const std::uint32_t aot_run_words[3]{ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(24), aot_run_words); } aot_gpr_31 = (0x08A53718u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 556u, 0x08AAEAFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A53718u) goto L_08A53718; AOT_REGCACHE_SYNC_OUT(); return; L_08A53718: @@ -8195,7 +8191,6 @@ L_08A53894: } L_08A5389C: aot_gpr_31 = (0x08A538A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A538A4u) goto L_08A538A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A538A4: @@ -8230,7 +8225,6 @@ L_08A538C8: goto L_08A538D4; L_08A538D4: aot_gpr_31 = (0x08A538DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A538DCu) goto L_08A538DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A538DC: @@ -8250,7 +8244,6 @@ L_08A538E8: goto L_08A538F4; L_08A538F4: aot_gpr_31 = (0x08A538FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 324u, 0x08B6A238u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A538FCu) goto L_08A538FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A538FC: @@ -8309,7 +8302,6 @@ L_08A53968: goto L_08A53974; L_08A53974: aot_gpr_31 = (0x08A5397Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5397Cu) goto L_08A5397C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5397C: @@ -8334,7 +8326,6 @@ L_08A53990: goto L_08A5399C; L_08A5399C: aot_gpr_31 = (0x08A539A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A539A4u) goto L_08A539A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A539A4: @@ -8360,7 +8351,6 @@ L_08A539BC: goto L_08A539C8; L_08A539C8: aot_gpr_31 = (0x08A539D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A539D0u) goto L_08A539D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A539D0: @@ -8427,7 +8417,6 @@ L_08A53A34: AOT_REGCACHE_SYNC_OUT(); return; L_08A53A3C: aot_gpr_31 = (0x08A53A44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 327u, 0x088099B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A53A44u) goto L_08A53A44; AOT_REGCACHE_SYNC_OUT(); return; L_08A53A44: @@ -8448,7 +8437,17 @@ L_08A53A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53A68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -8466,7 +8465,17 @@ L_08A53A84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); @@ -8487,7 +8496,6 @@ L_08A53A90: } L_08A53AC8: aot_gpr_31 = (0x08A53AD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A53AD0u) goto L_08A53AD0; AOT_REGCACHE_SYNC_OUT(); return; L_08A53AD0: @@ -8515,7 +8523,17 @@ L_08A53AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); @@ -8536,7 +8554,6 @@ L_08A53B0C: } L_08A53B44: aot_gpr_31 = (0x08A53B4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A53B4Cu) goto L_08A53B4C; AOT_REGCACHE_SYNC_OUT(); return; L_08A53B4C: @@ -8564,13 +8581,22 @@ L_08A53B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53B88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-6096))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53BB4; } @@ -8596,7 +8622,17 @@ L_08A53BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53BC4: aot_gpr_5 = (0u | 255u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); @@ -8610,7 +8646,17 @@ L_08A53BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53BE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8689,7 +8735,17 @@ L_08A53CAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53CC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8700,7 +8756,6 @@ L_08A53CC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A53CDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A53D34; } @@ -8744,7 +8799,6 @@ L_08A53D20: AOT_REGCACHE_SYNC_OUT(); return; L_08A53D2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A53F18; } @@ -8766,7 +8820,6 @@ L_08A53D4C: ctx.gpr[8] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[8]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A53ECC; } @@ -8798,7 +8851,6 @@ L_08A53D80: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_6); aot_gpr_4 = (static_cast(aot_gpr_5) < 51 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53DC4; } @@ -8883,7 +8935,6 @@ L_08A53E58: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A53E6C; } @@ -8918,7 +8969,6 @@ L_08A53E84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2100))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A53EBC; } @@ -8936,7 +8986,6 @@ L_08A53EBC: ctx.gpr[8] = (ctx.gpr[8] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[8]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53D5C; } @@ -8979,7 +9028,6 @@ L_08A53EEC: L_08A53F10: jump_target = ctx.gpr[16]; aot_gpr_31 = (0x08A53F18u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A53F18u) goto L_08A53F18; AOT_REGCACHE_SYNC_OUT(); return; @@ -8995,7 +9043,17 @@ L_08A53F18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A53F2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9035,7 +9093,6 @@ L_08A53F6C: goto L_08A53F70; L_08A53F70: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A53F94; } @@ -9049,7 +9106,6 @@ L_08A53F78: L_08A53F80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53FB8; } @@ -9065,7 +9121,6 @@ L_08A53F8C: } L_08A53F94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 3u, 0x08A54024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9073,7 +9128,6 @@ L_08A53F94: } L_08A53F9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A53FB8; } @@ -9084,7 +9138,6 @@ L_08A53FA4: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(21964)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A53FF0; } @@ -9107,22 +9160,18 @@ L_08A53FC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A53FD0: aot_gpr_31 = (0x08A53FD8u); - // nop ctx.pc = 0x08B72FD4u; AOT_REGCACHE_SYNC_OUT(); return; L_08A53FD8: aot_gpr_31 = (0x08A53FE0u); - // nop ctx.pc = 0x08B7302Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A53FE0: aot_gpr_31 = (0x08A53FE8u); - // nop ctx.pc = 0x08B73064u; AOT_REGCACHE_SYNC_OUT(); return; L_08A53FE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 1u, 0x08A54004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0148.cpp b/profiles/vcs/generated/generated_unit_0148.cpp index e7ad2c6..228e197 100644 --- a/profiles/vcs/generated/generated_unit_0148.cpp +++ b/profiles/vcs/generated/generated_unit_0148.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0148[4095] = { - 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 0, - 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, 0, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, - 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, - 0, 29, 0, 0, 0, 30, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, - 37, 0, 0, 0, 38, 0, 0, 39, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, - 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 50, 51, 0, 52, 0, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 59, 0, 0, 0, 60, 0, 0, 61, - 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, - 68, 0, 69, 0, 70, 0, 71, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 74, 0, 0, 0, 75, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, - 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 81, 82, 0, 0, 0, 0, 0, 0, 0, 83, 0, 84, 85, 0, 86, 0, 0, 0, 0, 0, - 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, - 96, 0, 0, 0, 0, 97, 98, 0, 0, 99, 100, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, - 105, 0, 0, 106, 0, 0, 107, 0, 108, 109, 110, 0, 0, 111, 0, 112, 0, 0, 113, 0, 0, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, 0, - 0, 0, 117, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 121, 0, 0, 122, 0, 123, 0, 124, 0, 0, 125, 0, 126, - 0, 127, 0, 0, 128, 0, 0, 129, 0, 0, 130, 0, 131, 132, 133, 0, 0, 134, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 138, 0, 0, 139, - 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 142, 0, 143, 0, 0, 144, 0, 145, 0, 146, 0, 0, 0, 147, 0, 0, 0, 148, 0, 149, 0, - 150, 0, 0, 0, 151, 0, 0, 0, 152, 0, 0, 153, 154, 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 161, 0, 0, 0, 162, 163, 164, 0, 165, 0, 0, 0, 0, 166, 0, - 167, 0, 0, 168, 0, 169, 0, 0, 170, 0, 0, 171, 0, 0, 172, 0, 173, 174, 0, 175, 0, 176, 0, 177, 0, 0, 178, 0, 0, 0, 179, 0, - 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 184, - 0, 185, 0, 0, 0, 0, 186, 0, 0, 0, 187, 0, 0, 0, 188, 189, 190, 0, 191, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, 195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, 199, 200, 201, 0, 202, - 0, 0, 0, 203, 0, 204, 0, 0, 0, 205, 0, 206, 0, 0, 0, 207, 0, 208, 0, 0, 209, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 0, - 213, 0, 214, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 220, 221, 222, - 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, - 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 232, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, 240, - 0, 241, 0, 0, 242, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 246, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 250, 251, 252, 0, 253, 0, 254, 0, 0, 0, 0, 255, 0, 256, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 261, 262, 263, 0, - 0, 0, 264, 265, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 272, 273, 274, 0, 0, 0, 275, 0, 0, 276, 0, - 0, 0, 0, 277, 278, 0, 0, 279, 0, 0, 0, 0, 280, 281, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, - 296, 0, 297, 0, 0, 298, 0, 0, 299, 0, 300, 0, 301, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 306, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 310, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, - 317, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 323, 0, 324, 0, 0, 0, 0, 325, 0, 0, - 0, 326, 0, 0, 327, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 332, 0, 0, 333, 0, 0, 0, 334, - 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 341, - 0, 0, 0, 342, 0, 0, 343, 0, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 351, - 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, 358, 0, 0, 0, 359, - 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 365, 0, 0, 0, 0, 0, - 0, 0, 366, 0, 367, 0, 368, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, - 0, 0, 374, 0, 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, - 0, 380, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, - 391, 0, 0, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 395, 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 400, 0, - 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 404, 0, 0, 405, 0, 406, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, 0, - 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 416, - 0, 0, 417, 0, 0, 0, 418, 0, 0, 419, 0, 420, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, - 0, 424, 0, 0, 0, 425, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 428, 0, 0, 429, 0, 430, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, - 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 0, 438, 0, 439, 0, 0, 0, 440, 0, 441, 0, 0, 0, - 442, 0, 443, 0, 444, 0, 0, 445, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 451, - 0, 0, 452, 0, 453, 0, 454, 0, 455, 0, 456, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 459, 0, 0, 0, 460, 0, 0, 461, 0, 462, - 0, 463, 0, 464, 0, 0, 0, 0, 465, 0, 0, 0, 466, 0, 0, 467, 0, 0, 0, 468, 0, 0, 469, 0, 470, 0, 0, 0, 0, 471, 0, 0, - 0, 0, 0, 472, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 475, 0, 476, 0, 0, 0, 477, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 0, - 480, 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 485, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 490, 0, 0, 491, 0, 492, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, - 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, 500, 0, 0, 501, 0, 502, 503, 0, 0, 0, 0, - 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 506, 0, 0, 0, 507, 0, 0, 0, 508, 0, 509, 0, 510, 0, 0, 0, 0, 511, - 0, 0, 0, 512, 0, 0, 513, 0, 0, 0, 514, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, - 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, 0, 0, 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 525, - 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 530, 0, 0, 531, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 533, - 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 537, 0, 0, 538, 0, 0, 539, 0, 0, - 540, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 548, 0, 549, 0, 0, 0, 550, 0, 551, 0, 0, 0, 0, 552, 0, 553, 0, 554, 0, - 555, 0, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 0, 0, 0, 561, 0, 0, 562, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 567, 568, 569, 0, - 0, 0, 570, 0, 571, 0, 572, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, - 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 576, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, - 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 589, 0, 0, 590, 0, 0, 0, 0, - 0, 591, 0, 0, 592, 0, 0, 0, 0, 593, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 598, 0, 599, 0, 0, 600, - 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 602, 0, 603, 0, 0, 0, 0, 604, 0, 605, 0, 606, 0, 0, 0, 0, 607, 0, 0, 0, - 608, 0, 0, 0, 609, 610, 611, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 0, 0, 617, 0, - 0, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, - 621, 0, 0, 0, 622, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 625, 0, 0, 626, 0, 0, 627, 0, 628, 0, 0, 0, 629, 0, 0, - 0, 630, 0, 0, 0, 631, 0, 0, 0, 632, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 634, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 637, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 0, 0, 0, 640, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 643, 644, 0, 645, 0, 0, 646, 0, 0, 0, 0, - 647, 648, 0, 649, 0, 0, 650, 0, 0, 0, 0, 651, 652, 0, 653, 0, 0, 654, 0, 0, 0, 0, 655, 0, 0, 656, 0, 0, 657, 0, 0, 0, - 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 660, 0, 661, 0, 0, 0, 662, 0, 663, 0, 664, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 670, 0, 0, 671, 672, 0, 673, 0, 674, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 676, 0, 677, 0, 0, 0, 678, - 0, 679, 0, 0, 0, 680, 0, 681, 0, 682, 0, 683, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, - 0, 686, 0, 0, 0, 0, 687, 688, 0, 689, 0, 0, 690, 0, 0, 0, 0, 691, 692, 0, 693, 0, 0, 694, 0, 0, 0, 0, 695, 0, 0, 696, - 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 699, 0, 700, 0, 701, 0, 0, 702, 0, 0, 703, 0, 0, 0, - 0, 704, 0, 705, 0, 0, 706, 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, - 711, 0, 712, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 715, 0, 716, 0, 0, 0, 717, 0, 718, 0, 0, 0, 719, 0, 720, - 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 724, 0, 0, - 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 730, 0, 0, 731, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 734, 0, 0, 0, - 0, 0, 0, 0, 735, 0, 0, 736, 0, 0, 0, 0, 737, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 740, 0, 0, 741, - 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 745, 0, 0, 0, 0, 0, 746, 0, 747, 0, 0, 748, - 0, 0, 749, 750, 0, 0, 751, 0, 0, 752, 0, 0, 753, 754, 0, 0, 0, 755, 0, 0, 756, 0, 0, 757, 758, 0, 759, 0, 0, 760, 0, 0, - 761, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 764, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 766, 0, 0, 767, 0, 0, 0, 768, 0, 0, 0, 0, 769, 0, 770, 0, 0, - 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 773, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 775, 0, 776, 0, 0, 0, 777, - 0, 0, 0, 778, 779, 0, 780, 0, 781, 0, 0, 0, 0, 0, 782, 783, 784, 0, 0, 0, 0, 0, 785, 0, 786, 787, 0, 0, 0, 0, 788, 0, - 0, 0, 789, 0, 0, 0, 0, 790, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 0, 795, - 0, 0, 0, 796, 0, 0, 0, 0, 797, 0, 798, 0, 799, 0, 0, 800, 0, 0, 801, 0, 802, 0, 803, 0, 0, 804, 0, 0, 805, 0, 0, 0, - 0, 0, 0, 0, 806, 0, 0, 0, 807, 0, 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, 810, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 814, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 0, 0, - 817, 0, 0, 818, 0, 0, 819, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, 823, 0, 0, 824, 825, 0, 0, 0, 0, - 0, 826, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 829, 0, 0, 830, 0, 0, 0, 831, 0, 0, 0, 0, 832, - 0, 833, 0, 0, 0, 0, 834, 0, 0, 0, 0, 835, 0, 836, 0, 837, 0, 838, 0, 0, 839, 0, 840, 0, 841, 0, 0, 842, 0, 0, 843, 0, - 0, 0, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, 849, - 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 860, 0, 0, 0, - 0, 0, 0, 861, 0, 0, 0, 862, 0, 0, 0, 0, 863, 0, 864, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 866, 0, 0, 0, 0, 0, 867, - 868, 0, 869, 0, 0, 0, 0, 870, 871, 0, 0, 0, 0, 0, 0, 0, 0, 872, 0, 873, 0, 0, 0, 0, 0, 0, 0, 874, 0, 0, 875, 0, - 0, 0, 0, 0, 876, 877, 0, 878, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 880, 0, 881, 0, 0, 0, 0, 0, 0, - 882, 0, 0, 0, 883, 0, 0, 0, 0, 0, 0, 884, 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 887, 0, 0, 0, 0, 0, - 0, 888, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 891, 0, 0, 0, 892, 0, 893, 0, 0, 0, 0, 0, 894, 0, 895, 0, - 896, 0, 0, 0, 0, 0, 897, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 0, 0, 0, 0, 899, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 900, 0, 0, 0, 0, 0, 0, 901, 0, 0, 0, 0, 902, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 0, 904, 0, 0, 0, 0, 0, 0, 905, - 0, 0, 0, 0, 0, 0, 906, 0, 0, 0, 0, 0, 0, 0, 907, 0, 0, 0, 0, 0, 908, 0, 909, 0, 910, 0, 0, 0, 0, 0, 911, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0148[64] = { + 0x2400001800001105ull, 0x224422AA12401000ull, 0x22140522440A0005ull, 0x17110A8080208291ull, + 0x2220104291222910ull, 0x05A0342105224455ull, 0x1208140000141008ull, 0x1144A74924009661ull, + 0x944A7492A5491084ull, 0x8091191151152A20ull, 0x44AB492942E22200ull, 0xA285C44290108010ull, + 0x14528A28B8884000ull, 0x280A2002E2212045ull, 0xA81040008042A014ull, 0x050AE220004A1052ull, + 0x2000808C71100090ull, 0x0802309848E22001ull, 0x24204024002280D0ull, 0x0000042000111525ull, + 0x0000000000210090ull, 0x5005000000001041ull, 0x8910A21221522141ull, 0x820AAA4881409102ull, + 0x000200048A448880ull, 0x1092085404800084ull, 0x2114400A04014884ull, 0x4885424910A80000ull, + 0x8840809122114912ull, 0x8229122201108A44ull, 0x8910829514522442ull, 0x2148910AA4488554ull, + 0x442A089122115028ull, 0x0D22448211148800ull, 0x4000A44885444408ull, 0x8052244280A44881ull, + 0x0420810524902020ull, 0x00290AA95428A440ull, 0x080000D471100008ull, 0x4000428400242410ull, + 0x94908A1209048280ull, 0x4451017110A85100ull, 0x2292049110000044ull, 0x80A0188100002222ull, + 0x1242584B09612000ull, 0x0002120001515020ull, 0x8A40000056500010ull, 0x909612C240080AA2ull, + 0x50000A4A12540804ull, 0xA28A200000000015ull, 0x910910102A000008ull, 0x9200509010408000ull, + 0x2592324C94120820ull, 0x2844840009000009ull, 0x4341C1588A022404ull, 0x1254950888840884ull, + 0x0284404000910910ull, 0x844840120C940849ull, 0x881102204952A842ull, 0x1555100000110002ull, + 0x480A018582405088ull, 0x04408811028080B0ull, 0x0040404150511022ull, 0x4150404081041081ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0148[64] = { + 1u, 9u, 23u, 37u, 53u, 68u, 87u, 96u, 117u, 140u, 159u, 180u, 196u, 213u, 229u, 241u, + 257u, 269u, 284u, 296u, 306u, 310u, 317u, 335u, 352u, 362u, 374u, 387u, 401u, 417u, 433u, 452u, + 472u, 489u, 504u, 518u, 534u, 546u, 564u, 575u, 585u, 601u, 618u, 630u, 641u, 658u, 668u, 679u, + 697u, 711u, 721u, 732u, 742u, 761u, 771u, 789u, 806u, 817u, 833u, 850u, 861u, 876u, 888u, 900u, }; void recomp_unit_0148_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0148_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A54004u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0148[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0148[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0148[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A54004; @@ -1103,7 +1010,17 @@ L_08A54024: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54034: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); @@ -1126,7 +1043,6 @@ L_08A54034: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A540EC; } @@ -1200,7 +1116,6 @@ L_08A54134: L_08A5415C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A541A8; } @@ -1209,7 +1124,6 @@ L_08A5415C: L_08A54168: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A541A8; } @@ -1220,7 +1134,6 @@ L_08A54174: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(22960)); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A541A8; } @@ -1245,7 +1158,6 @@ L_08A54198: } L_08A541A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5420C; } @@ -1461,7 +1373,17 @@ L_08A54340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54358: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -1471,7 +1393,6 @@ L_08A54358: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A54424; } @@ -1493,7 +1414,6 @@ L_08A54380: } L_08A543A0: aot_gpr_31 = (0x08A543A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A543A8u) goto L_08A543A8; AOT_REGCACHE_SYNC_OUT(); return; L_08A543A8: @@ -1537,7 +1457,6 @@ L_08A543E8: goto L_08A543EC; L_08A543EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A54414; } @@ -1561,7 +1480,6 @@ L_08A54414: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A54380; } @@ -1570,12 +1488,10 @@ L_08A54414: L_08A54424: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(68), 0u); aot_gpr_31 = (0x08A54430u); - // nop ctx.pc = 0x08B72FB4u; AOT_REGCACHE_SYNC_OUT(); return; L_08A54430: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A54488; } @@ -1618,7 +1534,6 @@ L_08A54474: AOT_REGCACHE_SYNC_OUT(); return; L_08A54480: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5449C; } @@ -1644,7 +1559,17 @@ L_08A5449C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A544B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -1677,7 +1602,6 @@ L_08A544F8: goto L_08A54ED4; L_08A54504: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A54584; } @@ -1685,12 +1609,10 @@ L_08A54504: } L_08A5450C: aot_gpr_31 = (0x08A54514u); - // nop ctx.pc = 0x08B72FB4u; AOT_REGCACHE_SYNC_OUT(); return; L_08A54514: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A5456C; } @@ -1733,7 +1655,6 @@ L_08A54558: AOT_REGCACHE_SYNC_OUT(); return; L_08A54564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54598; } @@ -1770,7 +1691,17 @@ L_08A54598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A545AC: { const bool branch_taken = static_cast(aot_gpr_5) >= 0; aot_gpr_6 = (aot_gpr_4 + static_cast(92)); @@ -1790,7 +1721,6 @@ L_08A545B8: aot_gpr_6 = (aot_gpr_6 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A545E0; } @@ -1809,11 +1739,20 @@ L_08A545E0: goto L_08A545E4; L_08A545E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A545EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -1833,7 +1772,6 @@ L_08A54610: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(92))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A546AC; } @@ -1850,7 +1788,6 @@ L_08A54634: AOT_REGCACHE_SYNC_OUT(); return; L_08A5464C: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_08A546AC; } @@ -1898,14 +1835,23 @@ L_08A546B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A546D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A5471C; } @@ -1939,7 +1885,6 @@ L_08A54718: L_08A5471C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3164))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A5472C; } @@ -1950,7 +1895,6 @@ L_08A54728: goto L_08A5472C; L_08A5472C: aot_gpr_31 = (0x08A54734u); - // nop goto L_08A56210; L_08A54734: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); @@ -1959,7 +1903,17 @@ L_08A54734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54740: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -1975,7 +1929,6 @@ L_08A54740: L_08A5476C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(ctx.gpr[18]) > 0; - // nop if (branch_taken) { goto L_08A547E4; } @@ -1999,7 +1952,6 @@ L_08A54784: L_08A54790: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A547A8; } @@ -2042,7 +1994,6 @@ L_08A547CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A547DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A549E0; } @@ -2090,7 +2041,6 @@ L_08A54834: L_08A54844: ctx.gpr[8] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A54878; } @@ -2099,7 +2049,6 @@ L_08A54844: L_08A54850: ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A5486C; } @@ -2107,7 +2056,6 @@ L_08A54850: } L_08A5485C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A5486C; } @@ -2132,7 +2080,6 @@ L_08A5486C: } L_08A54878: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A548F4; } @@ -2161,7 +2108,6 @@ L_08A54894: L_08A548A0: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A548B8; } @@ -2204,7 +2150,6 @@ L_08A548DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A548EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A549E0; } @@ -2239,7 +2184,6 @@ L_08A54928: AOT_REGCACHE_SYNC_OUT(); return; L_08A54930: aot_gpr_31 = (0x08A54938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 96u, 0x08B0C748u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A54938u) goto L_08A54938; AOT_REGCACHE_SYNC_OUT(); return; L_08A54938: @@ -2286,7 +2230,6 @@ L_08A54984: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_gpr_4 = (ctx.gpr[17] < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A549B4; } @@ -2346,7 +2289,17 @@ L_08A549E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2394,7 +2347,6 @@ L_08A54A5C: goto L_08A54A60; L_08A54A60: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08A54A84; } @@ -2413,7 +2365,6 @@ L_08A54A68: } L_08A54A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54A98; } @@ -2426,7 +2377,6 @@ L_08A54A84: goto L_08A54740; L_08A54A90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54AFC; } @@ -2450,7 +2400,6 @@ L_08A54AA4: L_08A54AB0: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A54AC8; } @@ -2504,7 +2453,17 @@ L_08A54AFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54B14: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -2515,7 +2474,6 @@ L_08A54B14: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[19]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_31); aot_gpr_31 = (0x08A54B40u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A54B40u) goto L_08A54B40; AOT_REGCACHE_SYNC_OUT(); return; L_08A54B40: @@ -2539,7 +2497,6 @@ L_08A54B54: L_08A54B74: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1162)))))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A54B88; } @@ -2590,7 +2547,6 @@ L_08A54BC0: goto L_08A54BC4; L_08A54BC4: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A54BE8; } @@ -2623,7 +2579,6 @@ L_08A54BE8: goto L_08A54740; L_08A54BF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54D1C; } @@ -2683,7 +2638,6 @@ L_08A54C74: goto L_08A54C78; L_08A54C78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A54CC8; } @@ -2698,7 +2652,6 @@ L_08A54C80: AOT_REGCACHE_SYNC_OUT(); return; L_08A54C90: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A54D0C; } @@ -2725,7 +2678,6 @@ L_08A54CB0: AOT_REGCACHE_SYNC_OUT(); return; L_08A54CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54D1C; } @@ -2739,7 +2691,6 @@ L_08A54CC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A54CD4: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A54D0C; } @@ -2766,7 +2717,6 @@ L_08A54CF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A54D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54D1C; } @@ -2792,7 +2742,17 @@ L_08A54D1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54D38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (0u | 0u); @@ -2871,7 +2831,17 @@ L_08A54DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54DD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); @@ -2903,7 +2873,6 @@ L_08A54DF8: } L_08A54E0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A54E48; } @@ -2944,7 +2913,17 @@ L_08A54E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54E5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2986,7 +2965,17 @@ L_08A54EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54ED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2994,7 +2983,6 @@ L_08A54ED4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(88))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A54EF8; } @@ -3006,7 +2994,6 @@ L_08A54EF0: goto L_08A54EF8; L_08A54EF8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A54F1C; } @@ -3014,13 +3001,11 @@ L_08A54EF8: } L_08A54F00: aot_gpr_31 = (0x08A54F08u); - // nop ctx.pc = 0x08B72F34u; AOT_REGCACHE_SYNC_OUT(); return; L_08A54F08: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A54F1C; } @@ -3040,13 +3025,22 @@ L_08A54F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54F34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-6096))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A54F50; } @@ -3064,7 +3058,17 @@ L_08A54F50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u | 255u); @@ -3112,7 +3116,6 @@ L_08A54FBC: goto L_08A54FC0; L_08A54FC0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A54FD0; } @@ -3120,7 +3123,6 @@ L_08A54FC0: } L_08A54FC8: aot_gpr_31 = (0x08A54FD0u); - // nop goto L_08A54F34; L_08A54FD0: aot_gpr_2 = (ctx.gpr[16] | 0u); @@ -3131,14 +3133,34 @@ L_08A54FD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54FE4: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(3172)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A54FEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -3201,7 +3223,6 @@ L_08A5507C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A55090; } @@ -3235,7 +3256,17 @@ L_08A550A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A550C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -3300,7 +3331,6 @@ L_08A55160: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A551B8; } @@ -3316,7 +3346,6 @@ L_08A5517C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A55194; } @@ -3335,7 +3364,6 @@ L_08A551A0: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A551B8; } @@ -3371,7 +3399,17 @@ L_08A551C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A551F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); @@ -3386,7 +3424,6 @@ L_08A551F0: } L_08A55214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A552BC; } @@ -3403,7 +3440,6 @@ L_08A55220: aot_gpr_4 = (aot_gpr_6 | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A55220; } @@ -3453,7 +3489,6 @@ L_08A55298: aot_mem.aot_direct_store8(ctx.gpr[7] + static_cast(0), static_cast(aot_gpr_6)); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A55298; } @@ -3473,13 +3508,22 @@ L_08A552BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A552D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A55318; } @@ -3499,7 +3543,6 @@ L_08A552F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A55304: aot_gpr_31 = (0x08A5530Cu); - // nop ctx.pc = 0x08B72F6Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A5530C: @@ -3514,26 +3557,55 @@ L_08A55318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55324: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(3184), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5532C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3184))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55334: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A55344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0197_entry, 197u, 766u, 0x08B1B3B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A55344u) goto L_08A55344; AOT_REGCACHE_SYNC_OUT(); return; L_08A55344: @@ -3544,7 +3616,17 @@ L_08A55344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55354: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3574,7 +3656,17 @@ L_08A55398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A553AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (0u | 255u); @@ -3633,7 +3725,17 @@ L_08A55444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55458: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3735,14 +3837,33 @@ L_08A55534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A555C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A555CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -3757,7 +3878,6 @@ L_08A555CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A555F4: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_08A557E8; } @@ -3811,7 +3931,6 @@ L_08A55648: } L_08A55654: aot_gpr_31 = (0x08A5565Cu); - // nop ctx.pc = 0x08B7304Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A5565C: @@ -3985,7 +4104,6 @@ L_08A5579C: goto L_08A560B0; L_08A557A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A557E8; } @@ -3993,22 +4111,18 @@ L_08A557A8: } L_08A557B0: aot_gpr_31 = (0x08A557B8u); - // nop ctx.pc = 0x08B72FD4u; AOT_REGCACHE_SYNC_OUT(); return; L_08A557B8: aot_gpr_31 = (0x08A557C0u); - // nop ctx.pc = 0x08B7302Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A557C0: aot_gpr_31 = (0x08A557C8u); - // nop ctx.pc = 0x08B73064u; AOT_REGCACHE_SYNC_OUT(); return; L_08A557C8: aot_gpr_31 = (0x08A557D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0197_entry, 197u, 766u, 0x08B1B3B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A557D0u) goto L_08A557D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A557D0: @@ -4032,7 +4146,17 @@ L_08A557E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55800: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -4083,7 +4207,6 @@ L_08A5585C: AOT_REGCACHE_SYNC_OUT(); return; L_08A55868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5599C; } @@ -4093,7 +4216,6 @@ L_08A55870: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(68))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5599C; } @@ -4176,7 +4298,6 @@ L_08A55920: L_08A55960: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A55994; } @@ -4194,7 +4315,6 @@ L_08A5596C: goto L_08A54034; L_08A5598C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5599C; } @@ -4216,7 +4336,17 @@ L_08A5599C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A559B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -4228,7 +4358,6 @@ L_08A559B0: L_08A559C8: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(92))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A55A20; } @@ -4237,7 +4366,6 @@ L_08A559C8: L_08A559D4: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A559F4; } @@ -4289,14 +4417,33 @@ L_08A55A30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55A3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55A44: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); aot_gpr_6 = (aot_gpr_5 << 4u); @@ -4307,7 +4454,6 @@ L_08A55A44: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(92))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A55A88; } @@ -4324,11 +4470,20 @@ L_08A55A6C: goto L_08A55A88; L_08A55A88: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4527,7 +4682,6 @@ L_08A55C30: AOT_REGCACHE_SYNC_OUT(); return; L_08A55C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55CA0; } @@ -4537,7 +4691,6 @@ L_08A55C44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(68))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A55CA0; } @@ -4594,7 +4747,17 @@ L_08A55CA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55CC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -4602,7 +4765,6 @@ L_08A55CC0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A55D30; } @@ -4646,7 +4808,6 @@ L_08A55D1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A55D28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55D54; } @@ -4656,7 +4817,6 @@ L_08A55D30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A55D54; } @@ -4677,7 +4837,17 @@ L_08A55D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A55D64: aot_gpr_29 = (aot_gpr_29 + static_cast(-736)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4728,7 +4898,6 @@ L_08A55DC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A55DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55FF8; } @@ -4738,7 +4907,6 @@ L_08A55DD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(68))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A55FF8; } @@ -4799,7 +4967,6 @@ L_08A55E48: AOT_REGCACHE_SYNC_OUT(); return; L_08A55E54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55FF8; } @@ -4815,7 +4982,6 @@ L_08A55E5C: goto L_08A55E6C; L_08A55E6C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A55EA0; } @@ -4830,7 +4996,6 @@ L_08A55E74: AOT_REGCACHE_SYNC_OUT(); return; L_08A55E84: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A55E94; } @@ -4838,7 +5003,6 @@ L_08A55E84: } L_08A55E8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55EA0; } @@ -4847,7 +5011,6 @@ L_08A55E8C: L_08A55E94: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A55E74; } @@ -4855,7 +5018,6 @@ L_08A55E94: } L_08A55EA0: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A55F80; } @@ -4867,7 +5029,6 @@ L_08A55EA8: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(56), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A55F1C; } @@ -4916,7 +5077,6 @@ L_08A55F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A55F14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55FF8; } @@ -4924,7 +5084,6 @@ L_08A55F14: } L_08A55F1C: aot_gpr_31 = (0x08A55F24u); - // nop ctx.pc = 0x08B72F9Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08A55F24: @@ -4973,7 +5132,6 @@ L_08A55F6C: AOT_REGCACHE_SYNC_OUT(); return; L_08A55F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55FF8; } @@ -5030,7 +5188,6 @@ L_08A55FD0: AOT_REGCACHE_SYNC_OUT(); return; L_08A55FDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A55FF8; } @@ -5056,14 +5213,33 @@ L_08A55FF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56010: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56018: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -5071,7 +5247,6 @@ L_08A56018: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A56044; } @@ -5079,11 +5254,9 @@ L_08A56018: } L_08A56034: aot_gpr_31 = (0x08A5603Cu); - // nop goto L_08A560B0; L_08A5603C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A560A0; } @@ -5093,7 +5266,6 @@ L_08A56044: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A560A0; } @@ -5143,7 +5315,17 @@ L_08A560A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A560B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5154,7 +5336,6 @@ L_08A560B0: goto L_08A560FC; L_08A560C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A560D8; } @@ -5162,7 +5343,6 @@ L_08A560C8: } L_08A560D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A560EC; } @@ -5183,7 +5363,17 @@ L_08A560EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A560FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5211,7 +5401,6 @@ L_08A56140: AOT_REGCACHE_SYNC_OUT(); return; L_08A5614C: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A561EC; } @@ -5311,7 +5500,17 @@ L_08A561F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56210: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5556,7 +5755,17 @@ L_08A56400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56418: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5583,7 +5792,6 @@ L_08A56438: L_08A56454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08A5646C; } @@ -5626,7 +5834,17 @@ L_08A5648C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A564A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5658,7 +5876,17 @@ L_08A564D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A564EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(140), ctx.gpr[16]); @@ -5679,7 +5907,6 @@ L_08A5651C: L_08A5652C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(2100))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A56540; } @@ -5702,7 +5929,6 @@ L_08A56540: AOT_REGCACHE_SYNC_OUT(); return; L_08A56550: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A56574; } @@ -5721,7 +5947,6 @@ L_08A56558: } L_08A5656C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5657C; } @@ -5737,7 +5962,6 @@ L_08A56574: } L_08A5657C: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A56598; } @@ -5746,7 +5970,6 @@ L_08A5657C: L_08A56584: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A565C4; } @@ -5774,7 +5997,6 @@ L_08A565A0: } L_08A565A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A565C4; } @@ -5799,7 +6021,6 @@ L_08A565C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A565D0: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A5669C; } @@ -5872,7 +6093,6 @@ L_08A5667C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5669C; } @@ -5931,7 +6151,17 @@ L_08A566F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56714: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2096))); @@ -5948,7 +6178,17 @@ L_08A5672C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56738: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2096))); @@ -5964,7 +6204,17 @@ L_08A5674C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56758: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5986,7 +6236,6 @@ L_08A5678C: goto L_08A567A0; L_08A567A0: aot_gpr_31 = (0x08A567A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A567A8u) goto L_08A567A8; AOT_REGCACHE_SYNC_OUT(); return; L_08A567A8: @@ -6013,7 +6262,6 @@ L_08A567BC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A567A0; } @@ -6035,10 +6283,19 @@ L_08A567FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56820: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A56840; } @@ -6059,7 +6316,6 @@ L_08A56828: L_08A56840: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A56864; } @@ -6080,7 +6336,6 @@ L_08A5684C: L_08A56864: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A56888; } @@ -6101,7 +6356,6 @@ L_08A56870: L_08A56888: aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A568A8; } @@ -6116,16 +6370,24 @@ L_08A56894: goto L_08A568A8; L_08A568A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A568B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A568F4; } @@ -6150,7 +6412,6 @@ L_08A568D4: L_08A568E0: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A568F4; } @@ -6158,7 +6419,6 @@ L_08A568E0: } L_08A568EC: aot_gpr_31 = (0x08A568F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A568F4u) goto L_08A568F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A568F4: @@ -6168,7 +6428,17 @@ L_08A568F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56900: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6203,7 +6473,6 @@ L_08A5693C: } L_08A56950: aot_gpr_31 = (0x08A56958u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A56958u) goto L_08A56958; AOT_REGCACHE_SYNC_OUT(); return; L_08A56958: @@ -6247,7 +6516,6 @@ L_08A56998: goto L_08A5699C; L_08A5699C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A569C4; } @@ -6363,7 +6631,6 @@ L_08A56AAC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A56AA0; } @@ -6372,7 +6639,6 @@ L_08A56AAC: L_08A56AC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(84))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A56BD8; } @@ -6386,7 +6652,6 @@ L_08A56AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A56AE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56BD8; } @@ -6478,7 +6743,6 @@ L_08A56BB4: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(0), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A56BB4; } @@ -6503,7 +6767,17 @@ L_08A56BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56C00: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(18)))))); @@ -6534,7 +6808,6 @@ L_08A56C44: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(23184)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A56D3C; } @@ -6561,7 +6834,6 @@ L_08A56C70: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(23744)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A56D3C; } @@ -6588,7 +6860,6 @@ L_08A56C9C: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(23908)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A56D3C; } @@ -6599,7 +6870,6 @@ L_08A56CB0: goto L_08A56CB4; L_08A56CB4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A56CDC; } @@ -6608,7 +6878,6 @@ L_08A56CB4: L_08A56CBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A56CDC; } @@ -6619,7 +6888,6 @@ L_08A56CC8: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(24592)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A56D3C; } @@ -6633,7 +6901,6 @@ L_08A56CDC: L_08A56CE8: aot_gpr_5 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A56D34; } @@ -6661,14 +6928,22 @@ L_08A56D18: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(7856))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56D34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56F30; } @@ -6676,7 +6951,6 @@ L_08A56D34: } L_08A56D3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56F30; } @@ -6698,7 +6972,6 @@ L_08A56D54: goto L_08A56738; L_08A56D5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56F30; } @@ -6788,7 +7061,6 @@ L_08A56E14: goto L_08A54D38; L_08A56E54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6797,7 +7069,6 @@ L_08A56E54: L_08A56E5C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(36))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A56E6C; } @@ -6808,7 +7079,6 @@ L_08A56E68: goto L_08A56E6C; L_08A56E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6816,7 +7086,6 @@ L_08A56E6C: } L_08A56E74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6855,7 +7124,6 @@ L_08A56E7C: L_08A56EDC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(36))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A56EF0; } @@ -6873,7 +7141,6 @@ L_08A56EF0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[7] = (0u | 5u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A56F08; } @@ -6881,7 +7148,6 @@ L_08A56EF0: } L_08A56F00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6891,7 +7157,6 @@ L_08A56F08: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(36))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A56F20; } @@ -6899,7 +7164,6 @@ L_08A56F08: } L_08A56F18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6907,7 +7171,6 @@ L_08A56F18: } L_08A56F20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6915,7 +7178,6 @@ L_08A56F20: } L_08A56F28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A56D54; } @@ -6936,7 +7198,17 @@ L_08A56F30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A56F50: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(18)))))); @@ -6966,7 +7238,6 @@ L_08A56F88: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(23184)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A57054; } @@ -6993,7 +7264,6 @@ L_08A56FB4: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(23744)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A57054; } @@ -7004,7 +7274,6 @@ L_08A56FC8: goto L_08A56FCC; L_08A56FCC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A56FF4; } @@ -7013,7 +7282,6 @@ L_08A56FCC: L_08A56FD4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A56FF4; } @@ -7024,7 +7292,6 @@ L_08A56FE0: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(24592)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A57054; } @@ -7038,7 +7305,6 @@ L_08A56FF4: L_08A57000: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A5704C; } @@ -7066,14 +7332,22 @@ L_08A57030: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(7896))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5704C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57278; } @@ -7081,7 +7355,6 @@ L_08A5704C: } L_08A57054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57278; } @@ -7090,7 +7363,6 @@ L_08A57054: L_08A5705C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(18)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5709C; } @@ -7099,7 +7371,6 @@ L_08A5705C: L_08A57068: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5709C; } @@ -7110,7 +7381,6 @@ L_08A57074: aot_gpr_5 = (2213u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(23100)); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5709C; } @@ -7135,7 +7405,6 @@ L_08A5709C: AOT_REGCACHE_SYNC_OUT(); return; L_08A570A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57104; } @@ -7163,7 +7432,6 @@ L_08A570B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A570F4: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_08A57104; } @@ -7179,7 +7447,6 @@ L_08A57104: goto L_08A56738; L_08A5710C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57278; } @@ -7237,7 +7504,6 @@ L_08A571B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A571C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57104; } @@ -7247,7 +7513,6 @@ L_08A571D0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A571E8; } @@ -7265,7 +7530,6 @@ L_08A571E8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A57200; } @@ -7273,7 +7537,6 @@ L_08A571E8: } L_08A571F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57104; } @@ -7324,7 +7587,6 @@ L_08A57268: } L_08A57270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A57104; } @@ -7344,7 +7606,17 @@ L_08A57278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57294: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7381,7 +7653,17 @@ L_08A572D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A572E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7396,7 +7678,17 @@ L_08A572F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57300: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[16]); @@ -7442,7 +7734,6 @@ L_08A57374: L_08A57394: aot_gpr_4 = (static_cast(aot_gpr_2) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A573BC; } @@ -7488,7 +7779,6 @@ L_08A573BC: L_08A573E8: aot_gpr_4 = (static_cast(aot_gpr_2) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A57454; } @@ -7549,7 +7839,6 @@ L_08A5746C: L_08A57474: aot_gpr_4 = (static_cast(aot_gpr_2) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A57490; } @@ -7573,7 +7862,6 @@ L_08A57490: L_08A5749C: aot_gpr_4 = (static_cast(aot_gpr_2) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A574B8; } @@ -7598,7 +7886,6 @@ L_08A574B8: L_08A574C8: aot_gpr_4 = (static_cast(aot_gpr_2) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A574E4; } @@ -7687,7 +7974,17 @@ L_08A57570: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A575AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7698,7 +7995,6 @@ L_08A575AC: L_08A575C0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A575F8; } @@ -7708,7 +8004,6 @@ L_08A575CC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(0))); aot_gpr_5 = (0u | 65535u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A575F8; } @@ -7735,7 +8030,17 @@ L_08A575F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5760C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -7749,7 +8054,6 @@ L_08A5760C: L_08A5762C: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A576E4; } @@ -7773,7 +8077,6 @@ L_08A57648: aot_gpr_4 = (aot_gpr_5 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5769C; } @@ -7864,7 +8167,17 @@ L_08A576E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A576FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7888,7 +8201,17 @@ L_08A57720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57730: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7918,12 +8241,21 @@ L_08A57760: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57770: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A57780u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 241u, 0x0887CD60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A57780u) goto L_08A57780; AOT_REGCACHE_SYNC_OUT(); return; L_08A57780: @@ -7934,7 +8266,17 @@ L_08A57780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -7948,7 +8290,6 @@ L_08A57790: } L_08A577A4: aot_gpr_31 = (0x08A577ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A577ACu) goto L_08A577AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A577AC: @@ -7972,7 +8313,6 @@ L_08A577C0: } L_08A577CC: aot_gpr_31 = (0x08A577D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A577D4u) goto L_08A577D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A577D4: @@ -7992,7 +8332,17 @@ L_08A577E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A577F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8029,7 +8379,17 @@ L_08A57830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57844: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8044,7 +8404,17 @@ L_08A57854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57860: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[16]); @@ -8119,7 +8489,6 @@ L_08A578E8: L_08A57904: aot_gpr_4 = (static_cast(aot_gpr_2) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5794C; } @@ -8156,7 +8525,6 @@ L_08A5794C: L_08A57954: aot_gpr_4 = (static_cast(aot_gpr_2) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A57970; } @@ -8202,7 +8570,17 @@ L_08A57994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A579BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8213,7 +8591,6 @@ L_08A579BC: L_08A579D0: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A57A08; } @@ -8223,7 +8600,6 @@ L_08A579DC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(0))); aot_gpr_5 = (0u | 65535u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A57A08; } @@ -8250,7 +8626,17 @@ L_08A57A08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57A1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -8264,7 +8650,6 @@ L_08A57A1C: } L_08A57A30: aot_gpr_31 = (0x08A57A38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A57A38u) goto L_08A57A38; AOT_REGCACHE_SYNC_OUT(); return; L_08A57A38: @@ -8287,7 +8672,6 @@ L_08A57A48: } L_08A57A54: aot_gpr_31 = (0x08A57A5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A57A5Cu) goto L_08A57A5C; AOT_REGCACHE_SYNC_OUT(); return; L_08A57A5C: @@ -8307,7 +8691,17 @@ L_08A57A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57A7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8326,7 +8720,17 @@ L_08A57A98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57AA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8345,7 +8749,17 @@ L_08A57AC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57AD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8364,14 +8778,34 @@ L_08A57AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57B00: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2236u << 16u); @@ -8398,7 +8832,17 @@ L_08A57B44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2236u << 16u); @@ -8434,49 +8878,119 @@ L_08A57BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BC4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BCC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BD4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BDC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BE4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BEC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57BF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8495,7 +9009,17 @@ L_08A57C10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57C20: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); @@ -8544,7 +9068,6 @@ L_08A57C68: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A57C84; } @@ -8559,7 +9082,17 @@ L_08A57C84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57C8C: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4188))); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8626,7 +9159,6 @@ L_08A57CFC: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A57D18; } @@ -8641,7 +9173,17 @@ L_08A57D18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57D20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8665,14 +9207,34 @@ L_08A57D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57D60: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57D68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8691,7 +9253,17 @@ L_08A57D84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57D94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8710,7 +9282,17 @@ L_08A57DB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57DC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8729,7 +9311,17 @@ L_08A57DDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57DEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8748,7 +9340,17 @@ L_08A57E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -8767,7 +9369,17 @@ L_08A57E34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57E44: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(4215), static_cast(aot_gpr_4)); @@ -8776,21 +9388,39 @@ L_08A57E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57E54: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57E5C: aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A57E7C; } @@ -8806,11 +9436,20 @@ L_08A57E74: } L_08A57E7C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57E84: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8836,11 +9475,20 @@ L_08A57E84: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57E9C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8884,11 +9532,20 @@ L_08A57E9C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57EBC: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8932,11 +9589,20 @@ L_08A57EBC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57EDC: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8990,11 +9656,20 @@ L_08A57EDC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F04: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9018,11 +9693,20 @@ L_08A57F04: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F20: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9039,11 +9723,20 @@ L_08A57F20: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F34: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9069,11 +9762,20 @@ L_08A57F34: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F4C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9099,11 +9801,20 @@ L_08A57F4C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F64: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -9122,11 +9833,20 @@ L_08A57F64: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F80: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -9145,11 +9865,20 @@ L_08A57F80: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57F9C: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -9169,18 +9898,25 @@ L_08A57F9C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57FBC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A57FDC; } @@ -9196,18 +9932,25 @@ L_08A57FD4: } L_08A57FDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A57FE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 1u, 0x08A58004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0149.cpp b/profiles/vcs/generated/generated_unit_0149.cpp index 7909245..27d6dd9 100644 --- a/profiles/vcs/generated/generated_unit_0149.cpp +++ b/profiles/vcs/generated/generated_unit_0149.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0149[4095] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 21, 22, 0, 0, 0, - 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 27, 0, 28, 29, 0, 30, 0, 31, - 0, 0, 0, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, - 41, 0, 0, 0, 42, 0, 0, 0, 43, 0, 44, 0, 45, 0, 0, 0, 46, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 57, 0, - 0, 0, 58, 0, 59, 60, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, - 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, - 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, - 82, 0, 0, 0, 0, 0, 83, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 89, 0, 90, 0, 0, 0, 91, - 0, 0, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 0, 102, 0, 103, 0, 104, 0, 105, 0, - 0, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 0, 119, - 0, 0, 120, 0, 0, 0, 0, 121, 122, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 127, 0, - 128, 0, 129, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 132, 0, 133, 0, 134, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 138, - 0, 0, 139, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, - 0, 144, 0, 145, 0, 146, 0, 147, 0, 0, 0, 148, 0, 0, 0, 0, 149, 0, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 0, 155, - 0, 0, 0, 0, 156, 0, 0, 157, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 161, 0, - 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 169, - 0, 0, 0, 0, 170, 171, 172, 0, 173, 0, 0, 174, 0, 0, 175, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, - 0, 0, 180, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, 185, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, 0, - 0, 189, 0, 0, 0, 190, 0, 0, 191, 0, 192, 193, 0, 194, 0, 0, 195, 0, 196, 0, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 0, - 208, 0, 209, 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, - 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 221, 222, 0, 223, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 226, 227, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 234, 0, 0, 235, 0, - 236, 0, 0, 0, 0, 0, 0, 237, 238, 0, 0, 239, 240, 0, 0, 0, 241, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 250, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 253, 0, - 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, 258, 0, 259, 0, 0, 260, 0, 261, 0, 0, 0, 262, 0, 0, 263, 0, 0, - 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 272, 273, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 278, 279, 0, 280, - 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 285, 0, - 286, 0, 287, 0, 0, 0, 0, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 291, 0, 292, 293, 0, 0, 0, 294, - 0, 0, 0, 295, 0, 0, 0, 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 302, 0, 303, 0, 0, 0, 304, 0, 305, 306, 0, 307, 0, 0, - 0, 308, 0, 309, 310, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 315, 0, 0, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, - 321, 0, 322, 0, 323, 0, 0, 0, 0, 0, 324, 0, 325, 0, 326, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 331, - 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, - 337, 0, 0, 338, 0, 0, 0, 0, 339, 0, 0, 340, 0, 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, 345, 0, 0, 346, 0, 347, 348, 0, 0, - 0, 349, 0, 0, 350, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 356, 0, 0, 0, 0, 0, - 0, 357, 0, 0, 358, 0, 359, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, - 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 0, 367, 0, 368, 369, 0, 0, 0, 0, 370, 0, 0, 0, 0, 371, 0, 0, 372, 0, 373, 0, 0, - 374, 0, 375, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 379, 0, 380, 0, 0, 0, 381, 0, 0, 0, 382, 0, 383, 0, 384, 0, - 0, 0, 0, 385, 0, 0, 386, 0, 387, 388, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 392, 0, 393, 394, 0, 0, 0, 395, 0, 0, 396, - 0, 397, 0, 0, 0, 0, 398, 0, 0, 399, 0, 400, 401, 0, 0, 0, 402, 0, 0, 403, 0, 404, 0, 0, 405, 0, 406, 407, 0, 0, 0, 408, - 0, 0, 409, 0, 410, 0, 0, 0, 0, 411, 0, 412, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, - 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 0, 0, 422, 0, 423, 0, 424, 0, 425, 0, 0, 0, 426, 0, - 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 430, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 434, 0, 0, 435, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 438, 0, 0, 0, 439, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 0, 442, - 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 447, 0, 448, 449, 0, 0, 0, 450, 0, 0, 451, 0, - 452, 0, 0, 453, 0, 454, 455, 0, 0, 0, 456, 0, 0, 457, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 0, 461, 0, 462, 0, 0, 463, 0, - 0, 464, 0, 465, 466, 0, 0, 0, 0, 467, 0, 0, 0, 0, 468, 0, 0, 469, 0, 470, 0, 0, 471, 0, 472, 473, 0, 0, 0, 0, 474, 0, - 0, 0, 0, 475, 0, 0, 476, 0, 477, 0, 0, 0, 478, 0, 479, 0, 0, 480, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 482, 0, 483, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 487, 0, 0, 0, 0, 488, 0, 489, 0, 0, 490, 0, 0, 0, 0, - 491, 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 0, 494, 0, 0, 495, 0, 496, 497, 0, 0, 0, 498, 0, 0, 499, 0, 500, 0, 0, 501, 0, - 502, 503, 0, 0, 0, 504, 0, 0, 505, 0, 506, 0, 0, 0, 507, 0, 0, 508, 0, 0, 0, 509, 0, 510, 0, 511, 0, 0, 0, 512, 0, 0, - 513, 0, 514, 515, 0, 0, 0, 0, 516, 0, 0, 0, 0, 517, 0, 0, 518, 0, 519, 0, 0, 520, 0, 521, 522, 0, 0, 0, 0, 523, 0, 0, - 0, 0, 524, 0, 0, 525, 0, 526, 0, 0, 0, 527, 0, 0, 528, 0, 529, 0, 0, 0, 0, 530, 0, 531, 0, 532, 0, 0, 533, 0, 0, 534, - 0, 535, 0, 536, 0, 0, 537, 0, 538, 0, 0, 539, 0, 540, 0, 541, 0, 0, 542, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 549, 0, - 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 568, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 579, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 586, 0, 0, 587, 0, 588, 0, 0, 589, 0, 590, 0, 0, 591, 0, 0, - 0, 0, 0, 592, 0, 0, 593, 0, 594, 0, 0, 595, 0, 596, 0, 597, 0, 0, 0, 0, 0, 598, 0, 0, 599, 0, 600, 0, 0, 601, 0, 602, - 0, 0, 603, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 628, 0, 0, 629, 0, 630, 0, 631, - 0, 0, 0, 632, 0, 633, 0, 634, 0, 635, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 639, 0, 0, 0, 640, 0, 0, 641, 642, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 645, 0, 0, 646, 0, 0, 0, - 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 650, 651, 0, 652, 653, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 658, 0, 0, 0, 659, 0, 0, 660, 661, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 669, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, - 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 679, - 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 683, 684, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 690, 0, 0, 0, 0, - 0, 691, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, - 0, 0, 0, 697, 0, 698, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 701, 0, 0, 702, 0, 703, 0, 0, 704, 0, 0, - 0, 0, 0, 0, 705, 0, 706, 0, 707, 0, 0, 0, 708, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 711, 0, - 0, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 714, 0, 715, 0, 0, 716, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 718, - 0, 719, 0, 0, 0, 0, 0, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 723, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 725, 0, 726, 0, 727, 0, - 0, 728, 0, 729, 0, 730, 0, 0, 731, 0, 732, 0, 733, 0, 0, 734, 0, 0, 0, 735, 0, 0, 736, 0, 0, 737, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 738, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 743, 0, 744, 0, 745, 0, 0, 746, 0, 0, 0, 747, 0, 0, 0, 0, 748, 0, - 0, 0, 0, 0, 0, 0, 749, 0, 0, 750, 0, 0, 751, 0, 0, 0, 0, 0, 752, 0, 0, 0, 753, 0, 0, 0, 754, 0, 755, 0, 756, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 760, 0, - 0, 0, 0, 761, 0, 762, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 766, 0, 0, 0, 0, 0, 767, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 780, 0, 0, 0, 781, - 0, 0, 0, 782, 0, 783, 0, 0, 0, 0, 0, 784, 0, 785, 0, 0, 786, 787, 0, 0, 0, 0, 788, 0, 789, 0, 0, 790, 791, 0, 0, 0, - 0, 792, 0, 793, 0, 0, 794, 795, 0, 0, 0, 0, 796, 0, 797, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 801, 0, 0, 0, 0, 0, 0, 0, 0, - 802, 0, 0, 803, 0, 804, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 806, 0, 807, 0, 808, 0, 809, 0, 810, 0, 0, 811, 0, 0, 0, - 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 813, 0, 814, 0, 0, 815, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 817, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0149[64] = { + 0x4042400940100805ull, 0x1A40081022081004ull, 0x48241550AD220410ull, 0x442AA04200151511ull, + 0x40200880220100B4ull, 0x0A80008402020555ull, 0x8AA0000000240241ull, 0x95551554552AAAA8ull, + 0x8455484552001584ull, 0x8AA908AA40020214ull, 0x9024140548004290ull, 0x41022A5492014970ull, + 0x1084000402852D22ull, 0x05048245044020A0ull, 0x010344005A108048ull, 0x0005198148A10840ull, + 0x4800000800084441ull, 0x2452D41041002000ull, 0x000440000400A001ull, 0xB22001000B220000ull, + 0x8D40050554002001ull, 0x0202005A2D16AA88ull, 0x5000000200024480ull, 0x2000145092115415ull, + 0x0511045234A46909ull, 0x2908692420404452ull, 0x91A523485445210Dull, 0x41048A148D291A42ull, + 0x1291148145514814ull, 0x48D2208285088A00ull, 0x434A421A4A88A469ull, 0x09428445000A5148ull, + 0x22A245234A469085ull, 0x92A148A421A5210Dull, 0x410888020084A94Aull, 0x0A20004012000001ull, + 0x0028800100480000ull, 0x0011440008028000ull, 0x080A200040002000ull, 0x4068004002000000ull, + 0x2529022008008000ull, 0x08404014A520A948ull, 0x0004802000000000ull, 0x0041001000000000ull, + 0x0000000004060402ull, 0x0008800001000200ull, 0x001222A8A9240901ull, 0x01B2200112400B22ull, + 0x0009000000000024ull, 0x0090200200008591ull, 0x0100A00020003080ull, 0x8200100000004001ull, + 0x08A0482001820820ull, 0x2521012828082082ull, 0x8412809041041150ull, 0x5480000080400502ull, + 0x008800300248952Aull, 0x5444124042254080ull, 0x0042042842082000ull, 0x0801000200200904ull, + 0x1000120050000040ull, 0x194328288A000000ull, 0x00C00800000250CAull, 0x4040941012AA4029ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0149[64] = { + 1u, 12u, 23u, 41u, 58u, 69u, 82u, 92u, 120u, 139u, 156u, 170u, 189u, 203u, 216u, 229u, + 243u, 251u, 264u, 270u, 281u, 295u, 314u, 321u, 337u, 357u, 374u, 397u, 417u, 436u, 452u, 475u, + 491u, 513u, 535u, 550u, 557u, 563u, 570u, 576u, 582u, 592u, 608u, 611u, 614u, 619u, 623u, 639u, + 654u, 658u, 668u, 675u, 680u, 691u, 705u, 719u, 728u, 742u, 757u, 766u, 773u, 779u, 792u, 802u, }; void recomp_unit_0149_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0149_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A58004u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0149[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0149[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0149[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A58004; @@ -990,11 +897,20 @@ LOCAL_DISPATCH: } L_08A58004: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5800C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1006,11 +922,20 @@ L_08A5800C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58030: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1022,11 +947,20 @@ L_08A58030: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58054: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -1039,26 +973,54 @@ L_08A58054: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5807C: jump_target = aot_gpr_31; { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58084: ctx.fpr[0] = std::sqrt(aot_fpr_12); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58090: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -1070,19 +1032,37 @@ L_08A58090: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A580BC: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A580C8: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -1091,7 +1071,17 @@ L_08A580C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A580DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -1104,7 +1094,17 @@ L_08A580DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A580FC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1124,7 +1124,17 @@ L_08A580FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5810C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1147,11 +1157,20 @@ L_08A5810C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58134: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1167,11 +1186,20 @@ L_08A58134: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58150: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1186,11 +1214,20 @@ L_08A58150: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58168: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1210,7 +1247,17 @@ L_08A58168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58178: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -1233,7 +1280,17 @@ L_08A58178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58194: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (0u + static_cast(-2)); @@ -1245,7 +1302,17 @@ L_08A58194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A581B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1266,7 +1333,6 @@ L_08A581B0: L_08A581DC: aot_gpr_6 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A581F4; } @@ -1304,7 +1370,17 @@ L_08A58214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5822C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1337,7 +1413,6 @@ L_08A58258: goto L_08A58264; L_08A58264: aot_gpr_31 = (0x08A5826Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5826Cu) goto L_08A5826C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5826C: @@ -1345,7 +1420,6 @@ L_08A5826C: goto L_08A58270; L_08A58270: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A58280; } @@ -1368,35 +1442,85 @@ L_08A58280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58294: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5829C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A582A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A582AC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A582B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1413,7 +1537,17 @@ L_08A582CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A582D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1430,14 +1564,34 @@ L_08A582F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A582FC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58304: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -1456,18 +1610,37 @@ L_08A58314: goto L_08A58324; L_08A58324: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5832C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58334: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(60))); aot_gpr_4 = (aot_gpr_5 << 5u); @@ -1476,21 +1649,51 @@ L_08A58334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58344: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(150))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5834C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58354: aot_gpr_4 = (16968u << 16u); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -1502,9 +1705,7 @@ L_08A58354: aot_fpr_12 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5839C; } @@ -1532,32 +1733,71 @@ L_08A5839C: goto L_08A583B8; L_08A583B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A583C0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A583C8: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A583D0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A583D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_5 = (16u << 16u); @@ -1567,7 +1807,17 @@ L_08A583D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A583EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 496u); @@ -1576,12 +1826,21 @@ L_08A583EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A583FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A58414; } @@ -1600,11 +1859,20 @@ L_08A58414: goto L_08A58418; L_08A58418: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58420: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -1618,7 +1886,17 @@ L_08A58420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58444: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -1632,7 +1910,17 @@ L_08A58444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58468: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 16384u); @@ -1641,7 +1929,17 @@ L_08A58468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58478: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -1656,7 +1954,17 @@ L_08A58478: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A584A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 32768u); @@ -1665,7 +1973,17 @@ L_08A584A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A584B0: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -1680,7 +1998,17 @@ L_08A584B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A584D8: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -1694,49 +2022,119 @@ L_08A584D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A584FC: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58504: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5850C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58514: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(28), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5851C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(30), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58524: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5852C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -1762,7 +2160,17 @@ L_08A58548: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58568: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[17]); @@ -1806,21 +2214,51 @@ L_08A585A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A585E0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A585E8: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(310), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A585F0: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(306), static_cast(0u)); aot_fpr_12 = std::bit_cast(0u); @@ -1830,7 +2268,17 @@ L_08A585F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58604: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1847,7 +2295,17 @@ L_08A5861C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58628: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { std::uint32_t aot_run_words[3]{}; @@ -1870,7 +2328,17 @@ L_08A5864C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58658: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -1985,28 +2453,68 @@ L_08A58658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A586D8: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(264))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A586E0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A586E8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A586F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -2015,7 +2523,17 @@ L_08A586F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58700: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -2024,70 +2542,170 @@ L_08A58700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58710: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58718: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58720: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58728: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58730: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(116))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58738: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58740: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58748: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(160)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58750: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(136))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58758: aot_gpr_5 = (aot_gpr_5 & 255u); if (aot_gpr_5 == 0u) { @@ -2105,18 +2723,37 @@ L_08A58764: } L_08A5876C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58774: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(340))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5877C: aot_gpr_5 = (aot_gpr_5 << 4u); ctx.gpr[2] = (aot_gpr_4 + aot_gpr_5); @@ -2125,42 +2762,100 @@ L_08A5877C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5878C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(176)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58794: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5879C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587A4: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587AC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); ctx.gpr[2] = (aot_gpr_4 & 32u); @@ -2169,49 +2864,119 @@ L_08A587B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587C4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(600), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587CC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(604), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587D4: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(604))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587DC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(608), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587E4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587EC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A587F4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(558))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -2224,7 +2989,6 @@ L_08A587F4: L_08A58800: ctx.gpr[7] = (0u | 65535u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A58824; } @@ -2235,7 +2999,6 @@ L_08A5880C: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A58824; } @@ -2250,14 +3013,33 @@ L_08A58824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5882C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58834: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2279,7 +3061,6 @@ L_08A58834: L_08A58868: aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A588C4; } @@ -2293,7 +3074,6 @@ L_08A58874: goto L_08A5887C; L_08A5887C: aot_gpr_31 = (0x08A58884u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A58884u) goto L_08A58884; AOT_REGCACHE_SYNC_OUT(); return; L_08A58884: @@ -2322,7 +3102,6 @@ L_08A588B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A588BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5890C; } @@ -2336,7 +3115,6 @@ L_08A588C4: goto L_08A588CC; L_08A588CC: aot_gpr_31 = (0x08A588D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A588D4u) goto L_08A588D4; AOT_REGCACHE_SYNC_OUT(); return; L_08A588D4: @@ -2391,7 +3169,17 @@ L_08A58928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58948: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2413,7 +3201,6 @@ L_08A58948: L_08A5897C: aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A589D8; } @@ -2427,7 +3214,6 @@ L_08A58988: goto L_08A58990; L_08A58990: aot_gpr_31 = (0x08A58998u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A58998u) goto L_08A58998; AOT_REGCACHE_SYNC_OUT(); return; L_08A58998: @@ -2456,7 +3242,6 @@ L_08A589C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A589D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A58A20; } @@ -2470,7 +3255,6 @@ L_08A589D8: goto L_08A589E0; L_08A589E0: aot_gpr_31 = (0x08A589E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A589E8u) goto L_08A589E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A589E8: @@ -2530,11 +3314,20 @@ L_08A58A3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58A70: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(700))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A58A84; } @@ -2546,11 +3339,20 @@ L_08A58A7C: goto L_08A58A84; L_08A58A84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(538)))))); @@ -2567,7 +3369,6 @@ L_08A58A8C: } L_08A58AAC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A58ACC; } @@ -2591,7 +3392,17 @@ L_08A58ACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58AD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2633,7 +3444,6 @@ L_08A58B18: goto L_08A58B1C; L_08A58B1C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A58BB8; } @@ -2642,7 +3452,6 @@ L_08A58B1C: L_08A58B24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(700))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A58BB8; } @@ -2651,7 +3460,6 @@ L_08A58B24: L_08A58B30: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(705))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08A58B74; } @@ -2659,7 +3467,6 @@ L_08A58B30: } L_08A58B3C: aot_gpr_31 = (0x08A58B44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A58B44u) goto L_08A58B44; AOT_REGCACHE_SYNC_OUT(); return; L_08A58B44: @@ -2671,7 +3478,6 @@ L_08A58B44: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_5 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A58B80; } @@ -2706,7 +3512,6 @@ L_08A58B80: } L_08A58B8C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A58B9C; } @@ -2728,7 +3533,6 @@ L_08A58B9C: } L_08A58BA8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A58BB8; } @@ -2747,7 +3551,17 @@ L_08A58BB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58BC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2798,7 +3612,6 @@ L_08A58C18: goto L_08A58C24; L_08A58C24: aot_gpr_31 = (0x08A58C2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A58C2Cu) goto L_08A58C2C; AOT_REGCACHE_SYNC_OUT(); return; L_08A58C2C: @@ -2812,7 +3625,6 @@ L_08A58C30: L_08A58C38: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A58C4C; } @@ -2835,14 +3647,34 @@ L_08A58C4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58C60: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1348))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58C68: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2943,7 +3775,17 @@ L_08A58D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58D38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2987,7 +3829,17 @@ L_08A58D8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58D9C: aot_fpr_13 = std::bit_cast(0u); aot_gpr_6 = (0u | 0u); @@ -3024,11 +3876,20 @@ L_08A58DCC: } L_08A58DE4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58DEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -3083,13 +3944,22 @@ L_08A58E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58E54: aot_gpr_5 = (aot_gpr_5 << 2u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1536))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A58E70; } @@ -3108,11 +3978,20 @@ L_08A58E70: goto L_08A58E74; L_08A58E74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58E7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -3222,7 +4101,6 @@ L_08A58F60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A58F84; } @@ -3231,7 +4109,6 @@ L_08A58F60: L_08A58F70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A58F84; } @@ -3256,14 +4133,23 @@ L_08A58F84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58FA0: aot_gpr_6 = (0u | 0u); goto L_08A58FA4; L_08A58FA4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1404))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A58FB4; } @@ -3284,11 +4170,20 @@ L_08A58FB4: } L_08A58FC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A58FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -3311,7 +4206,6 @@ L_08A59004: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5902C; } @@ -3327,7 +4221,6 @@ L_08A5902C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A591B4; } @@ -3338,7 +4231,6 @@ L_08A5903C: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A591B4; } @@ -3452,7 +4344,6 @@ L_08A59164: aot_fpr_12 = aot_fpr_20 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08A5917Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5917Cu) goto L_08A5917C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5917C: @@ -3468,7 +4359,6 @@ L_08A59194: aot_gpr_4 = (16128u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[21] = (0u | 1u); goto L_08A591BC; @@ -3484,7 +4374,6 @@ L_08A591AC: } L_08A591B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59240; } @@ -3495,7 +4384,6 @@ L_08A591BC: goto L_08A591C0; L_08A591C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A591D4; } @@ -3513,7 +4401,6 @@ L_08A591D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A591DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[21] = (0u | 1u); goto L_08A591EC; @@ -3522,7 +4409,6 @@ L_08A591DC: L_08A591EC: aot_gpr_4 = (ctx.gpr[21] & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A59204; } @@ -3591,7 +4477,17 @@ L_08A59240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5926C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[17]); @@ -3723,7 +4619,6 @@ L_08A592CC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A59370; } @@ -3739,7 +4634,6 @@ L_08A59348: L_08A59358: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); { const bool branch_taken = ctx.gpr[21] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A59368; } @@ -3750,7 +4644,6 @@ L_08A59364: goto L_08A59368; L_08A59368: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A59348; } @@ -3843,7 +4736,6 @@ L_08A593D8: L_08A593E8: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); { const bool branch_taken = ctx.gpr[21] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A593F8; } @@ -3854,7 +4746,6 @@ L_08A593F4: goto L_08A593F8; L_08A593F8: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A593D8; } @@ -3899,35 +4790,85 @@ L_08A59438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5946C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59474: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5947C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59484: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5948C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3939,7 +4880,6 @@ L_08A5948C: AOT_REGCACHE_SYNC_OUT(); return; L_08A594A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A594E4; } @@ -3963,9 +4903,7 @@ L_08A594AC: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A594EC; } @@ -3998,7 +4936,17 @@ L_08A594F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59500: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[7] = (0u | 2u); @@ -4013,7 +4961,6 @@ L_08A59510: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A59538; } @@ -4021,7 +4968,6 @@ L_08A59510: } L_08A59520: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A59530; } @@ -4045,7 +4991,6 @@ L_08A59530: } L_08A59538: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A59548; } @@ -4064,16 +5009,24 @@ L_08A59548: goto L_08A5954C; L_08A5954C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59554: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5956C; } @@ -4092,16 +5045,24 @@ L_08A5956C: goto L_08A59570; L_08A59570: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59578: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A59590; } @@ -4120,11 +5081,20 @@ L_08A59590: goto L_08A59594; L_08A59594: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5959C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); aot_gpr_6 = (0u + static_cast(-3)); @@ -4140,7 +5110,17 @@ L_08A5959C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A595C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(944))); @@ -4262,7 +5242,6 @@ L_08A59688: goto L_08A596F4; L_08A596F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59714; } @@ -4270,7 +5249,6 @@ L_08A596F4: } L_08A596FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59714; } @@ -4278,7 +5256,6 @@ L_08A596FC: } L_08A59704: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A59714; } @@ -4302,28 +5279,68 @@ L_08A59714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5972C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1508))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59734: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1072))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5973C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(1508)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59744: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4354,7 +5371,17 @@ L_08A59774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A59780: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4375,14 +5402,33 @@ L_08A5979C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A597AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A597B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -4405,7 +5451,6 @@ L_08A597B4: L_08A597F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A598C4; } @@ -4414,7 +5459,6 @@ L_08A597F8: L_08A59804: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A598C4; } @@ -4440,7 +5484,6 @@ L_08A59824: goto L_08A59830; L_08A59830: aot_gpr_31 = (0x08A59838u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59838u) goto L_08A59838; AOT_REGCACHE_SYNC_OUT(); return; L_08A59838: @@ -4461,7 +5504,6 @@ L_08A5984C: AOT_REGCACHE_SYNC_OUT(); return; L_08A59858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59894; } @@ -4476,7 +5518,6 @@ L_08A59860: goto L_08A5986C; L_08A5986C: aot_gpr_31 = (0x08A59874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59874u) goto L_08A59874; AOT_REGCACHE_SYNC_OUT(); return; L_08A59874: @@ -4523,7 +5564,6 @@ L_08A598C4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5993C; } @@ -4541,7 +5581,6 @@ L_08A598D4: } L_08A598E4: aot_gpr_31 = (0x08A598ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A598ECu) goto L_08A598EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A598EC: @@ -4588,7 +5627,6 @@ L_08A5993C: aot_gpr_4 = (16128u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 2u); if (branch_taken) { @@ -4601,7 +5639,6 @@ L_08A5995C: aot_gpr_5 = (48896u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (ctx.gpr[17] + static_cast(32)); if (branch_taken) { @@ -4612,9 +5649,7 @@ L_08A5995C: L_08A59978: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A59A6C; } @@ -4632,7 +5667,6 @@ L_08A5998C: L_08A59998: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A599F8; } @@ -4647,7 +5681,6 @@ L_08A599A4: goto L_08A599B0; L_08A599B0: aot_gpr_31 = (0x08A599B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A599B8u) goto L_08A599B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A599B8: @@ -4676,7 +5709,6 @@ L_08A599E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A599F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59A44; } @@ -4691,7 +5723,6 @@ L_08A599F8: goto L_08A59A04; L_08A59A04: aot_gpr_31 = (0x08A59A0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59A0Cu) goto L_08A59A0C; AOT_REGCACHE_SYNC_OUT(); return; L_08A59A0C: @@ -4750,7 +5781,6 @@ L_08A59A6C: } L_08A59A74: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A59B08; } @@ -4759,9 +5789,7 @@ L_08A59A74: L_08A59A7C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A59ACC; } @@ -4776,7 +5804,6 @@ L_08A59A90: goto L_08A59A9C; L_08A59A9C: aot_gpr_31 = (0x08A59AA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59AA4u) goto L_08A59AA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A59AA4: @@ -4797,7 +5824,6 @@ L_08A59AB8: AOT_REGCACHE_SYNC_OUT(); return; L_08A59AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59B8C; } @@ -4812,7 +5838,6 @@ L_08A59ACC: goto L_08A59AD8; L_08A59AD8: aot_gpr_31 = (0x08A59AE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59AE0u) goto L_08A59AE0; AOT_REGCACHE_SYNC_OUT(); return; L_08A59AE0: @@ -4833,7 +5858,6 @@ L_08A59AF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A59B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59B8C; } @@ -4842,9 +5866,7 @@ L_08A59B00: L_08A59B08: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A59B58; } @@ -4859,7 +5881,6 @@ L_08A59B1C: goto L_08A59B28; L_08A59B28: aot_gpr_31 = (0x08A59B30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59B30u) goto L_08A59B30; AOT_REGCACHE_SYNC_OUT(); return; L_08A59B30: @@ -4880,7 +5901,6 @@ L_08A59B44: AOT_REGCACHE_SYNC_OUT(); return; L_08A59B50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59B8C; } @@ -4895,7 +5915,6 @@ L_08A59B58: goto L_08A59B64; L_08A59B64: aot_gpr_31 = (0x08A59B6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59B6Cu) goto L_08A59B6C; AOT_REGCACHE_SYNC_OUT(); return; L_08A59B6C: @@ -4929,7 +5948,6 @@ L_08A59B94: AOT_REGCACHE_SYNC_OUT(); return; L_08A59BA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A1BC; } @@ -4939,7 +5957,6 @@ L_08A59BB0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A59CD4; } @@ -4948,7 +5965,6 @@ L_08A59BB0: L_08A59BC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A59C6C; } @@ -4960,7 +5976,6 @@ L_08A59BCC: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A59C5C; } @@ -4972,7 +5987,6 @@ L_08A59BE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A59C5C; } @@ -4990,7 +6004,6 @@ L_08A59BFC: } L_08A59C0C: aot_gpr_31 = (0x08A59C14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59C14u) goto L_08A59C14; AOT_REGCACHE_SYNC_OUT(); return; L_08A59C14: @@ -5036,7 +6049,6 @@ L_08A59C5C: AOT_REGCACHE_SYNC_OUT(); return; L_08A59C64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A1B0; } @@ -5054,7 +6066,6 @@ L_08A59C6C: } L_08A59C7C: aot_gpr_31 = (0x08A59C84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59C84u) goto L_08A59C84; AOT_REGCACHE_SYNC_OUT(); return; L_08A59C84: @@ -5106,7 +6117,6 @@ L_08A59CD4: } L_08A59CE0: { const bool branch_taken = ctx.gpr[19] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A59F3C; } @@ -5115,7 +6125,6 @@ L_08A59CE0: L_08A59CE8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A59E70; } @@ -5140,9 +6149,7 @@ L_08A59CF4: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A59D88; } @@ -5157,7 +6164,6 @@ L_08A59D30: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A59D50; } @@ -5167,7 +6173,6 @@ L_08A59D40: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A59D6C; } @@ -5183,7 +6188,6 @@ L_08A59D50: AOT_REGCACHE_SYNC_OUT(); return; L_08A59D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59D80; } @@ -5199,7 +6203,6 @@ L_08A59D6C: AOT_REGCACHE_SYNC_OUT(); return; L_08A59D80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A260; } @@ -5211,7 +6214,6 @@ L_08A59D88: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A59E60; } @@ -5223,7 +6225,6 @@ L_08A59DA0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A59E60; } @@ -5248,7 +6249,6 @@ L_08A59DC8: goto L_08A59DD4; L_08A59DD4: aot_gpr_31 = (0x08A59DDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59DDCu) goto L_08A59DDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A59DDC: @@ -5269,7 +6269,6 @@ L_08A59DF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A59DFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59E38; } @@ -5284,7 +6283,6 @@ L_08A59E04: goto L_08A59E10; L_08A59E10: aot_gpr_31 = (0x08A59E18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59E18u) goto L_08A59E18; AOT_REGCACHE_SYNC_OUT(); return; L_08A59E18: @@ -5332,7 +6330,6 @@ L_08A59E60: AOT_REGCACHE_SYNC_OUT(); return; L_08A59E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A1B0; } @@ -5356,7 +6353,6 @@ L_08A59E7C: goto L_08A59E88; L_08A59E88: aot_gpr_31 = (0x08A59E90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59E90u) goto L_08A59E90; AOT_REGCACHE_SYNC_OUT(); return; L_08A59E90: @@ -5385,7 +6381,6 @@ L_08A59EBC: AOT_REGCACHE_SYNC_OUT(); return; L_08A59EC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59F1C; } @@ -5400,7 +6395,6 @@ L_08A59ED0: goto L_08A59EDC; L_08A59EDC: aot_gpr_31 = (0x08A59EE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A59EE4u) goto L_08A59EE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A59EE4: @@ -5441,7 +6435,6 @@ L_08A59F24: AOT_REGCACHE_SYNC_OUT(); return; L_08A59F34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A1B0; } @@ -5455,7 +6448,6 @@ L_08A59F3C: AOT_REGCACHE_SYNC_OUT(); return; L_08A59F48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A5A0E8; } @@ -5480,9 +6472,7 @@ L_08A59F50: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A59FE4; } @@ -5497,7 +6487,6 @@ L_08A59F8C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A59FAC; } @@ -5507,7 +6496,6 @@ L_08A59F9C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A59FC8; } @@ -5523,7 +6511,6 @@ L_08A59FAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A59FC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A59FDC; } @@ -5539,7 +6526,6 @@ L_08A59FC8: AOT_REGCACHE_SYNC_OUT(); return; L_08A59FDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A260; } @@ -5572,7 +6558,6 @@ L_08A5A00C: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5A0D8; } @@ -5598,7 +6583,6 @@ L_08A5A034: goto L_08A5A040; L_08A5A040: aot_gpr_31 = (0x08A5A048u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A048u) goto L_08A5A048; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A048: @@ -5619,7 +6603,6 @@ L_08A5A05C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A0A4; } @@ -5634,7 +6617,6 @@ L_08A5A070: goto L_08A5A07C; L_08A5A07C: aot_gpr_31 = (0x08A5A084u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A084u) goto L_08A5A084; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A084: @@ -5688,7 +6670,6 @@ L_08A5A0D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A0E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A1B0; } @@ -5713,7 +6694,6 @@ L_08A5A0F8: goto L_08A5A104; L_08A5A104: aot_gpr_31 = (0x08A5A10Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A10Cu) goto L_08A5A10C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A10C: @@ -5742,7 +6722,6 @@ L_08A5A138: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5A198; } @@ -5757,7 +6736,6 @@ L_08A5A14C: goto L_08A5A158; L_08A5A158: aot_gpr_31 = (0x08A5A160u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A160u) goto L_08A5A160; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A160: @@ -5803,7 +6781,6 @@ L_08A5A1B0: goto L_08A5A1BC; L_08A5A1BC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A5A260; } @@ -5839,7 +6816,6 @@ L_08A5A1E8: L_08A5A1F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A5A224; } @@ -5847,12 +6823,10 @@ L_08A5A1F4: } L_08A5A200: aot_gpr_31 = (0x08A5A208u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A208u) goto L_08A5A208; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A208: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A5A224; } @@ -5861,7 +6835,6 @@ L_08A5A208: L_08A5A210: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A5A224; } @@ -5887,7 +6860,6 @@ L_08A5A230: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A238: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A5A260; } @@ -5924,7 +6896,17 @@ L_08A5A260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5A288: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(284), aot_gpr_16); @@ -5944,7 +6926,6 @@ L_08A5A2B0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_6 = (0u | 18u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A5A2D0; } @@ -5954,7 +6935,6 @@ L_08A5A2C0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_6 = (0u | 33u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A5A2FC; } @@ -5977,11 +6957,20 @@ L_08A5A2E4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(8112))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5A2FC: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -6062,7 +7051,6 @@ L_08A5A3D8: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5A368; } @@ -6147,7 +7135,6 @@ L_08A5A4C0: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5A450; } @@ -6233,7 +7220,6 @@ L_08A5A5AC: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5A540; } @@ -6251,7 +7237,6 @@ L_08A5A5C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A5A6C8; } @@ -6338,7 +7323,6 @@ L_08A5A6B8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5A638; } @@ -6358,9 +7342,7 @@ L_08A5A6D0: aot_gpr_5 = (aot_gpr_5 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5A7D8; } @@ -6467,7 +7449,17 @@ L_08A5A7DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5A7FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -6543,7 +7535,6 @@ L_08A5A8C4: } L_08A5A8D0: aot_gpr_31 = (0x08A5A8D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A8D8u) goto L_08A5A8D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A8D8: @@ -6554,7 +7545,6 @@ L_08A5A8D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A8E4: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A5A8F8; } @@ -6591,7 +7581,6 @@ L_08A5A910: } L_08A5A91C: aot_gpr_31 = (0x08A5A924u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A924u) goto L_08A5A924; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A924: @@ -6602,7 +7591,6 @@ L_08A5A924: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A930: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A5A940; } @@ -6638,7 +7626,6 @@ L_08A5A958: } L_08A5A964: aot_gpr_31 = (0x08A5A96Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5A96Cu) goto L_08A5A96C; AOT_REGCACHE_SYNC_OUT(); return; L_08A5A96C: @@ -6649,7 +7636,6 @@ L_08A5A96C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5A978: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A5A98C; } @@ -6751,9 +7737,7 @@ L_08A5A9F0: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5AAC0; } @@ -6894,7 +7878,6 @@ L_08A5AC08: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(20))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(60))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5AC4C; } @@ -6995,7 +7978,17 @@ L_08A5AD28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5AD64: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), ctx.gpr[20]); @@ -7078,7 +8071,6 @@ L_08A5AE30: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5AE58; } @@ -7113,7 +8105,6 @@ L_08A5AE64: } L_08A5AE70: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08A5AED4; } @@ -7121,7 +8112,6 @@ L_08A5AE70: } L_08A5AE78: { const bool branch_taken = static_cast(ctx.gpr[19]) > 0; - // nop if (branch_taken) { goto L_08A5AEA8; } @@ -7147,7 +8137,6 @@ L_08A5AE90: } L_08A5AE98: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5AEC8; } @@ -7155,7 +8144,6 @@ L_08A5AE98: } L_08A5AEA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5AED4; } @@ -7243,7 +8231,6 @@ L_08A5AED4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A5AF30; } @@ -7259,7 +8246,6 @@ L_08A5AF08: L_08A5AF18: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A5AF28; } @@ -7270,7 +8256,6 @@ L_08A5AF24: goto L_08A5AF28; L_08A5AF28: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A5AF08; } @@ -7298,7 +8283,6 @@ L_08A5AF30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A5AF68; } @@ -7316,7 +8300,6 @@ L_08A5AF5C: L_08A5AF68: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5B00C; } @@ -7403,7 +8386,6 @@ L_08A5AFB8: L_08A5AFC8: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A5AFD8; } @@ -7414,7 +8396,6 @@ L_08A5AFD4: goto L_08A5AFD8; L_08A5AFD8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A5AFB8; } @@ -7505,7 +8486,6 @@ L_08A5B018: ctx.gpr[19] = (static_cast(static_cast(ctx.gpr[19]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5AE24; } @@ -7575,7 +8555,6 @@ L_08A5B0D0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A5B12C; } @@ -7591,7 +8570,6 @@ L_08A5B104: L_08A5B114: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A5B124; } @@ -7602,7 +8580,6 @@ L_08A5B120: goto L_08A5B124; L_08A5B124: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A5B104; } @@ -7658,9 +8635,7 @@ L_08A5B1B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B1E0; } @@ -7701,7 +8676,6 @@ L_08A5B1E0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A5B220; @@ -7710,9 +8684,7 @@ L_08A5B1E0: L_08A5B220: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B238; } @@ -7744,7 +8716,17 @@ L_08A5B238: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5B278: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(124), aot_gpr_16); @@ -7823,7 +8805,6 @@ L_08A5B304: aot_gpr_4 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A5B33C; @@ -7895,7 +8876,6 @@ L_08A5B3B4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -7907,7 +8887,6 @@ L_08A5B3E8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); goto L_08A5B708; @@ -7917,7 +8896,6 @@ L_08A5B400: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); goto L_08A5B464; @@ -7927,7 +8905,6 @@ L_08A5B418: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1220))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); goto L_08A5B464; @@ -7937,7 +8914,6 @@ L_08A5B430: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1224))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); goto L_08A5B464; @@ -7947,7 +8923,6 @@ L_08A5B448: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); goto L_08A5B708; @@ -7967,9 +8942,7 @@ L_08A5B464: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B4B0; } @@ -7998,7 +8971,6 @@ L_08A5B498: L_08A5B4B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B598; } @@ -8016,7 +8988,6 @@ L_08A5B4BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B4D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A5B4F0; } @@ -8026,7 +8997,6 @@ L_08A5B4E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5B5C4; } @@ -8036,9 +9006,7 @@ L_08A5B4F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B550; } @@ -8048,9 +9016,7 @@ L_08A5B508: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1220))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B550; } @@ -8060,9 +9026,7 @@ L_08A5B520: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1224))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B550; } @@ -8072,9 +9036,7 @@ L_08A5B538: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B578; } @@ -8093,7 +9055,6 @@ L_08A5B550: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5B5C4; } @@ -8110,7 +9071,6 @@ L_08A5B578: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5B5C4; } @@ -8119,7 +9079,6 @@ L_08A5B590: L_08A5B598: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1492))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5B5C4; } @@ -8141,7 +9100,6 @@ L_08A5B5C4: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B700; } @@ -8155,7 +9113,6 @@ L_08A5B5D8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B5E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A5B6EC; } @@ -8184,7 +9141,6 @@ L_08A5B614: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B61C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A5B634; } @@ -8194,7 +9150,6 @@ L_08A5B624: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5B6EC; } @@ -8204,9 +9159,7 @@ L_08A5B634: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B694; } @@ -8216,9 +9169,7 @@ L_08A5B64C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1220))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B694; } @@ -8228,9 +9179,7 @@ L_08A5B664: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1224))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B694; } @@ -8240,9 +9189,7 @@ L_08A5B67C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1228))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5B6C8; } @@ -8267,7 +9214,6 @@ L_08A5B6A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B6C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5B6EC; } @@ -8293,7 +9239,6 @@ L_08A5B6EC: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5B5D8; } @@ -8301,7 +9246,6 @@ L_08A5B6EC: } L_08A5B700: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5B724; } @@ -8318,7 +9262,6 @@ L_08A5B708: goto L_08A5B724; L_08A5B724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5B75C; } @@ -8354,7 +9297,17 @@ L_08A5B75C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5B780: aot_gpr_29 = (aot_gpr_29 + static_cast(-2208)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8384,7 +9337,6 @@ L_08A5B780: L_08A5B7E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B82C; } @@ -8397,7 +9349,6 @@ L_08A5B7EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5B7F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A5B82C; } @@ -8406,7 +9357,6 @@ L_08A5B7F4: L_08A5B7FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B82C; } @@ -8414,7 +9364,6 @@ L_08A5B7FC: } L_08A5B808: aot_gpr_31 = (0x08A5B810u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5B810u) goto L_08A5B810; AOT_REGCACHE_SYNC_OUT(); return; L_08A5B810: @@ -8425,7 +9374,6 @@ L_08A5B810: L_08A5B818: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B82C; } @@ -8529,7 +9477,6 @@ L_08A5B8E0: aot_mem.aot_direct_store8(ctx.gpr[23] + static_cast(617), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(698)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A5B944; } @@ -8542,7 +9489,6 @@ L_08A5B920: aot_mem.aot_direct_store8(ctx.gpr[23] + static_cast(699), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(static_cast(aot_gpr_5) >> 24u)); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5B944; } @@ -8560,7 +9506,6 @@ L_08A5B944: L_08A5B94C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B9DC; } @@ -8570,7 +9515,6 @@ L_08A5B958: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(1378)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5B9CC; } @@ -8581,7 +9525,6 @@ L_08A5B968: aot_gpr_5 = (0u | 5u); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5B9CC; } @@ -8604,7 +9547,6 @@ L_08A5B97C: L_08A5B99C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(668))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5B9B4; } @@ -8677,7 +9619,6 @@ L_08A5BA38: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (aot_gpr_4 < static_cast(14) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0150_entry, 150u, 54u, 0x08A5C2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8689,11 +9630,20 @@ L_08A5BA50: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(8240))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5BA68: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(1280)))))); ctx.gpr[19] = (0u | 1u); @@ -8707,7 +9657,6 @@ L_08A5BA7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A5BF48; } @@ -8715,7 +9664,6 @@ L_08A5BA7C: } L_08A5BA90: aot_gpr_31 = (0x08A5BA98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5BA98u) goto L_08A5BA98; AOT_REGCACHE_SYNC_OUT(); return; L_08A5BA98: @@ -8723,7 +9671,6 @@ L_08A5BA98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A5BF48; } @@ -8744,7 +9691,6 @@ L_08A5BAAC: L_08A5BAC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1072))); goto L_08A5BC7C; @@ -8774,7 +9720,6 @@ L_08A5BB0C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5BB30; } @@ -8783,7 +9728,6 @@ L_08A5BB0C: L_08A5BB24: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(1493))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5BD68; } @@ -8823,7 +9767,6 @@ L_08A5BB58: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A5BB88; @@ -8867,7 +9810,6 @@ L_08A5BBC4: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A5BBF0; @@ -8949,7 +9891,6 @@ L_08A5BC1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5BC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5BD68; } @@ -8975,7 +9916,6 @@ L_08A5BC7C: L_08A5BCA8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(1493))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5BD68; } @@ -9003,7 +9943,6 @@ L_08A5BCB4: aot_gpr_6 = (ctx.gpr[23] + static_cast(192)); aot_gpr_5 = (ctx.gpr[23] + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A5BCF4; @@ -9086,7 +10025,6 @@ L_08A5BD70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5BD98; } @@ -9096,7 +10034,6 @@ L_08A5BD80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7892))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A5BD98; } @@ -9111,7 +10048,6 @@ L_08A5BD98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1220))); goto L_08A5BDC8; @@ -9125,7 +10061,6 @@ L_08A5BDB0: L_08A5BDB8: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5BE48; } @@ -9137,7 +10072,6 @@ L_08A5BDC4: L_08A5BDC8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1224))); goto L_08A5BDF4; @@ -9151,7 +10085,6 @@ L_08A5BDDC: L_08A5BDE4: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5BE48; } @@ -9163,7 +10096,6 @@ L_08A5BDF0: L_08A5BDF4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1228))); goto L_08A5BE20; @@ -9177,7 +10109,6 @@ L_08A5BE08: L_08A5BE10: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5BE48; } @@ -9189,9 +10120,7 @@ L_08A5BE1C: L_08A5BE20: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5BF48; } @@ -9205,7 +10134,6 @@ L_08A5BE34: L_08A5BE3C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5BF48; } @@ -9281,9 +10209,7 @@ L_08A5BE48: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5BF10; } @@ -9306,7 +10232,6 @@ L_08A5BEB0: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[23] + static_cast(16)); if (branch_taken) { @@ -9353,7 +10278,6 @@ L_08A5BF04: AOT_REGCACHE_SYNC_OUT(); return; L_08A5BF10: aot_gpr_31 = (0x08A5BF18u); - // nop goto L_08A583C0; L_08A5BF18: aot_gpr_4 = (48291u << 16u); @@ -9374,7 +10298,6 @@ L_08A5BF3C: goto L_08A58604; L_08A5BF48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0150_entry, 150u, 54u, 0x08A5C2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0150.cpp b/profiles/vcs/generated/generated_unit_0150.cpp index 53fd090..bf13fa4 100644 --- a/profiles/vcs/generated/generated_unit_0150.cpp +++ b/profiles/vcs/generated/generated_unit_0150.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0150[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, - 8, 0, 0, 9, 0, 10, 0, 0, 11, 0, 12, 0, 0, 13, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 18, - 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 23, 0, 0, 24, 0, 25, 0, 26, 0, 0, 0, 27, 0, 0, 28, 29, 0, 0, 30, 0, - 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 37, 0, 38, 0, 39, 0, 0, 0, 0, - 0, 0, 40, 0, 0, 0, 41, 0, 0, 42, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, - 0, 0, 0, 49, 0, 0, 50, 0, 0, 51, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 55, 0, 56, 0, - 57, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, - 0, 0, 0, 66, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, 0, 0, 72, 0, - 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, - 79, 0, 0, 80, 0, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 90, 0, 0, 91, 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, - 0, 96, 0, 0, 0, 97, 0, 0, 98, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, 104, 0, - 0, 0, 105, 0, 0, 106, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 110, 0, 0, 0, 111, 0, 112, 0, 113, 0, 114, 0, 0, - 115, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 122, 0, 0, 123, 0, 124, 0, 0, 125, 126, 0, 0, - 127, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 0, 0, 135, 136, 0, 137, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, - 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 146, 0, 0, 147, 0, 148, 0, 149, 0, 150, - 0, 0, 0, 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 0, 155, 0, 156, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 0, 159, 0, 160, - 0, 161, 0, 0, 162, 0, 0, 163, 0, 164, 0, 165, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 169, 0, 0, 170, - 0, 171, 172, 0, 173, 0, 0, 174, 0, 0, 0, 0, 0, 175, 0, 176, 0, 177, 0, 0, 0, 178, 0, 179, 0, 0, 180, 0, 181, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 0, - 188, 189, 0, 0, 190, 0, 191, 0, 0, 192, 0, 0, 193, 0, 0, 194, 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 203, - 0, 204, 0, 0, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, - 0, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 215, 0, 0, 0, 216, 0, 0, 217, 0, 0, 218, 0, 0, 219, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 0, 0, 0, 0, 0, 223, 224, 0, 225, 0, 226, 0, 0, 227, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 230, - 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 245, 0, 0, 246, - 0, 247, 0, 248, 0, 249, 0, 250, 0, 0, 251, 0, 0, 252, 0, 253, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, 0, 256, 0, - 257, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 261, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, - 264, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 267, 0, 0, 268, 0, 0, 269, 0, 270, 0, 0, 271, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 276, 0, 277, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 0, 0, 281, 0, 282, 0, 283, 0, - 0, 284, 0, 0, 285, 0, 286, 287, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 291, 0, - 0, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, 294, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 0, 0, - 299, 0, 0, 0, 300, 0, 0, 301, 0, 302, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, - 0, 0, 0, 306, 0, 307, 0, 308, 0, 0, 309, 310, 0, 311, 0, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 0, 0, - 0, 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, 0, 0, - 322, 0, 0, 323, 0, 0, 324, 0, 325, 0, 326, 0, 0, 327, 0, 328, 329, 0, 330, 0, 0, 331, 0, 0, 0, 332, 0, 0, 333, 0, 0, 0, - 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 0, 0, 339, 0, 0, 340, 341, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 346, 0, 0, 347, 0, 0, 348, 0, - 349, 0, 350, 0, 0, 351, 0, 0, 352, 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 355, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 358, - 0, 0, 359, 0, 360, 0, 361, 0, 0, 362, 0, 0, 363, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 367, 0, - 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 371, 0, 0, 372, 0, 373, 0, 374, 0, 0, 375, 0, 0, 376, 0, 0, 0, - 0, 377, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 380, 0, 381, 0, 0, 382, 0, 0, 383, 0, 384, 0, 385, 0, 0, 386, 0, 0, - 387, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 393, 394, 0, 0, 0, 0, 0, 0, - 0, 395, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 0, 0, - 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 404, 405, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 415, 0, 0, 416, 0, 0, - 417, 0, 418, 419, 0, 0, 420, 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 423, 0, 424, 0, 425, 0, 426, 0, 0, 0, 427, 0, 428, 0, 429, - 0, 430, 0, 0, 431, 0, 432, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 438, 0, 439, 0, - 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 444, 445, 0, 0, 0, 0, 446, 0, 0, - 0, 447, 0, 0, 448, 0, 449, 0, 0, 0, 450, 0, 451, 0, 0, 452, 0, 0, 453, 0, 454, 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 0, - 0, 458, 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 461, 0, 462, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, - 466, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, - 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, 477, 478, 0, 0, 0, 0, - 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 491, - 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, 495, 0, 0, 0, 496, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 499, 0, - 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 503, 504, 0, 505, 0, 506, 0, 0, 0, 0, 507, 0, 0, - 508, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 511, 0, 0, 512, 0, 513, 0, 514, 0, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, - 0, 0, 0, 0, 517, 0, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 521, 0, - 0, 0, 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 0, - 0, 530, 0, 0, 531, 0, 532, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, - 0, 543, 0, 0, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 0, 549, 0, 0, 550, 0, 0, 0, 551, 0, 0, 552, - 0, 553, 0, 554, 0, 0, 555, 0, 0, 0, 556, 0, 0, 557, 0, 558, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 0, 0, 0, 561, 0, 562, - 0, 563, 0, 0, 564, 0, 565, 0, 0, 566, 0, 0, 0, 567, 0, 568, 0, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 574, 0, 0, 0, 575, - 0, 576, 0, 0, 0, 0, 577, 0, 0, 578, 579, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 0, 584, 0, 0, 0, 585, 0, 0, 586, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, - 0, 0, 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 593, 0, 0, 594, 0, 0, 595, 0, 0, 0, 0, 0, 596, 0, 0, 597, - 0, 0, 598, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 601, 0, 0, 602, 0, 603, 0, 604, 0, 0, 605, 0, 0, 0, 606, 0, 0, 607, 0, - 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 615, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, - 0, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 623, 0, 0, 624, 0, 625, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, - 0, 0, 628, 0, 0, 0, 629, 0, 630, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 637, 638, 0, 0, 0, 0, 639, 0, - 640, 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 643, 0, 0, 644, 0, 645, 0, 0, 646, 0, 0, 0, 647, 0, 648, 0, 0, 649, 0, 650, 0, - 651, 0, 652, 0, 653, 654, 0, 0, 0, 655, 0, 656, 0, 0, 0, 0, 657, 0, 0, 658, 659, 0, 0, 0, 0, 0, 0, 660, 0, 0, 661, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 663, 0, 0, 664, 0, 0, 665, 0, 0, 666, 0, 667, - 0, 668, 0, 669, 0, 670, 0, 0, 671, 0, 0, 0, 672, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 0, 676, 0, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 679, 0, 0, 0, 680, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 682, - 0, 683, 0, 0, 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, 692, 0, 0, 693, 0, 0, 694, 0, 0, 0, 0, 695, - 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 698, 0, 0, 699, 0, 0, 700, 0, 0, 701, 0, 0, 702, 0, 0, 0, 703, 0, 0, 704, 0, 705, - 0, 706, 0, 0, 707, 0, 0, 0, 708, 0, 0, 709, 0, 710, 0, 0, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 0, 713, 0, 714, 0, 715, - 0, 0, 716, 0, 717, 0, 0, 718, 0, 0, 0, 719, 0, 720, 0, 0, 721, 0, 722, 0, 723, 0, 724, 0, 725, 726, 0, 0, 0, 727, 0, 728, - 0, 0, 0, 0, 729, 0, 0, 730, 731, 0, 0, 0, 0, 0, 0, 732, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 734, 0, 0, 735, 0, 0, 736, 0, 0, 0, 737, 0, 0, 738, 739, 0, 740, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 742, - 0, 0, 0, 0, 0, 743, 0, 744, 0, 0, 745, 0, 0, 746, 747, 0, 748, 0, 749, 0, 0, 0, 750, 0, 0, 751, 0, 0, 0, 752, 0, 0, - 0, 0, 753, 0, 0, 0, 754, 0, 0, 755, 0, 756, 0, 0, 0, 0, 757, 0, 758, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 760, 0, 0, 0, 761, 0, 0, 0, 762, 0, 0, 763, 0, 0, 764, 765, 0, 0, 0, 766, 0, 0, 0, 767, 0, 0, 0, - 0, 0, 768, 0, 769, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 772, 0, 773, 0, 0, 774, 0, 0, 0, 0, 775, - 0, 0, 776, 0, 777, 0, 0, 0, 778, 0, 0, 0, 0, 779, 0, 0, 0, 0, 780, 0, 781, 0, 0, 0, 782, 0, 0, 0, 0, 783, 0, 0, - 784, 0, 785, 0, 0, 0, 0, 0, 786, 0, 0, 787, 0, 0, 0, 0, 0, 0, 788, 0, 0, 789, 0, 0, 790, 0, 0, 791, 0, 0, 0, 0, - 792, 0, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 0, 795, 0, 0, 796, 0, 0, 0, 0, 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, - 799, 0, 0, 0, 800, 0, 0, 801, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 808, 0, 809, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, 0, - 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 813, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 817, 0, - 0, 0, 818, 0, 819, 0, 0, 0, 0, 0, 820, 0, 0, 0, 821, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 824, 0, - 0, 0, 825, 0, 826, 827, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 831, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 835, 0, 0, 0, - 836, 837, 0, 838, 0, 839, 0, 840, 0, 841, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 843, 0, 0, 0, 0, 844, 845, 0, 0, 846, 0, 0, - 0, 847, 0, 0, 0, 0, 848, 849, 0, 0, 850, 0, 0, 0, 851, 0, 0, 0, 0, 852, 0, 0, 0, 853, 0, 854, 0, 0, 0, 855, 0, 0, - 0, 0, 856, 857, 0, 0, 858, 0, 0, 0, 859, 0, 0, 0, 0, 860, 861, 0, 0, 862, 0, 0, 863, 0, 864, 0, 865, 0, 866, 0, 0, 0, - 867, 0, 0, 868, 0, 0, 869, 0, 870, 871, 0, 872, 0, 0, 873, 874, 0, 875, 0, 876, 0, 877, 0, 878, 0, 0, 0, 0, 0, 0, 879, 0, - 880, 0, 0, 881, 0, 882, 0, 0, 883, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 0, 0, 0, 0, 0, 885, 0, 886, 0, 0, 0, 0, 0, - 0, 887, 0, 0, 0, 888, 0, 0, 889, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 892, 0, 0, 0, 0, 0, 0, 0, 893, 0, - 894, 0, 0, 0, 0, 895, 0, 896, 0, 897, 0, 0, 898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, 0, 0, 900, 0, 0, 0, 901, 0, - 0, 902, 0, 0, 903, 0, 0, 904, 0, 0, 0, 905, 0, 0, 906, 0, 0, 0, 0, 0, 0, 0, 0, 907, 908, 0, 0, 0, 0, 909, 0, 0, - 910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 911, 0, 0, 0, 0, 912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 913, 0, 0, 0, 0, 0, 0, - 0, 0, 914, 0, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 0, 916, 0, 0, 0, 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 918, 0, 919, 0, 0, 920, 0, 0, 921, 0, 0, 0, 0, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 0, 923, 0, 924, 925, 0, 926, - 0, 0, 0, 927, 0, 0, 0, 0, 928, 0, 929, 0, 930, 0, 931, 0, 0, 0, 932, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 935, 0, 936, 0, 937, 0, 0, 0, 938, 0, 939, 0, 940, 0, 941, 0, 0, 942, 0, 0, - 0, 0, 0, 0, 943, 0, 0, 0, 0, 0, 944, 0, 945, 0, 0, 0, 0, 0, 946, 0, 0, 0, 947, 948, 0, 949, 0, 0, 0, 950, 0, 951, - 0, 0, 952, 0, 953, 0, 954, 0, 955, 0, 956, 0, 0, 0, 957, 0, 0, 0, 958, 0, 959, 0, 0, 960, 0, 961, 0, 962, 0, 963, 0, 964, - 0, 0, 0, 0, 0, 0, 965, 0, 966, 0, 967, 0, 968, 0, 0, 0, 969, 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, 0, 0, - 0, 972, 0, 0, 0, 973, 0, 974, 0, 975, 0, 976, 0, 977, 0, 0, 0, 0, 0, 0, 0, 978, 0, 979, 0, 0, 0, 0, 0, 0, 0, 980, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 981, 0, 0, 0, 982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983, 0, - 0, 0, 0, 984, 0, 985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, 0, 0, 987, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 988, 0, 0, 0, 0, 989, 990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 991, 0, 992, 0, 0, 0, 993, 0, 0, 0, 0, - 994, 0, 0, 0, 0, 0, 0, 995, 0, 0, 996, 0, 0, 0, 0, 0, 997, 0, 0, 998, 0, 0, 0, 0, 0, 999, 0, 0, 1000, 0, 1001, 0, - 0, 1002, 0, 0, 0, 0, 1003, 0, 0, 0, 0, 1004, 0, 1005, 0, 0, 1006, 0, 1007, 0, 1008, 0, 0, 0, 0, 0, 0, 1009, 0, 1010, 0, 1011, - 0, 0, 0, 1012, 0, 1013, 0, 1014, 0, 0, 0, 1015, 0, 0, 0, 0, 0, 1016, 1017, 0, 0, 1018, 0, 0, 0, 1019, 0, 0, 0, 1020, 0, 1021, - 0, 0, 1022, 0, 0, 0, 0, 0, 0, 0, 1023, 0, 1024, 0, 0, 0, 0, 0, 1025, 1026, 0, 0, 0, 1027, 0, 1028, 0, 0, 0, 0, 0, 0, - 0, 0, 1029, 0, 0, 0, 1030, 0, 0, 1031, 0, 0, 0, 1032, 0, 0, 0, 1033, 0, 0, 0, 1034, 0, 0, 0, 0, 0, 0, 0, 1035, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0150[64] = { + 0x9102A5291202A801ull, 0x0AA448034C8A9492ull, 0x5140124840924A44ull, 0x4210828844520A81ull, + 0x4021210910240428ull, 0x2200124800030202ull, 0x2A8910A445110922ull, 0x0850A14132952115ull, + 0xAA4448108404012Cull, 0x90828A92A0514550ull, 0x1150014014A2A096ull, 0x8112090200149253ull, + 0x0008808448048882ull, 0x82092B0400124922ull, 0x9050102808511492ull, 0x0494408140A0A4AAull, + 0x0A48080044A48805ull, 0x414002D254480400ull, 0x20010A9111091220ull, 0x0485014804442CA8ull, + 0xC84240901225A549ull, 0x9412212549410410ull, 0x1254941041221254ull, 0x0314122125494122ull, + 0x04940C892204200Aull, 0xA8AA0A4D25409100ull, 0x2181504051420952ull, 0x4412881212549452ull, + 0x0C82400210288241ull, 0xA048088A00520042ull, 0x2158410448411502ull, 0x4100049008952805ull, + 0x08420A522A504210ull, 0x9124924209142000ull, 0x8D54A252A028A44Aull, 0x8094892000120642ull, + 0x4895224490492210ull, 0x4012924040AA5555ull, 0x4308222000810144ull, 0x48190A3552894A81ull, + 0x2081112AA4920000ull, 0x2109050280512210ull, 0xA449249084984000ull, 0xA3552894A80A2912ull, + 0x880B224800048190ull, 0x00450A44224564A0ull, 0x84A1021411192220ull, 0x0924090521142114ull, + 0x0208049100A12221ull, 0x4402441040115408ull, 0x002200B444024414ull, 0x261102AB10810110ull, + 0x1549844C228844C2ull, 0x0501012940AACB49ull, 0x448012A140480522ull, 0x0200840121804892ull, + 0xB404049401010104ull, 0x2551500400145508ull, 0xAA944554A2C41410ull, 0x80A02AA210091540ull, + 0x0110002840044000ull, 0x5209048108A00610ull, 0xA22608A8A8152842ull, 0x20222244028C1404ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0150[64] = { + 1u, 19u, 40u, 57u, 73u, 86u, 96u, 115u, 135u, 151u, 171u, 188u, 204u, 215u, 231u, 247u, + 264u, 278u, 292u, 306u, 322u, 342u, 359u, 377u, 395u, 410u, 430u, 447u, 466u, 479u, 492u, 508u, + 522u, 538u, 553u, 576u, 590u, 608u, 628u, 640u, 662u, 676u, 690u, 706u, 729u, 743u, 760u, 776u, + 792u, 805u, 818u, 831u, 847u, 867u, 887u, 902u, 914u, 927u, 943u, 965u, 981u, 988u, 1002u, 1022u, }; void recomp_unit_0150_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0150_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A5C004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0150[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0150[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0150[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A5C004; @@ -1273,7 +1180,6 @@ L_08A5C084: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5C0A4; } @@ -1286,7 +1192,6 @@ L_08A5C098: goto L_08A5C0A4; L_08A5C0A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5C2E4; } @@ -1313,9 +1218,7 @@ L_08A5C0C8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C0F4; } @@ -1325,7 +1228,6 @@ L_08A5C0E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5C108; } @@ -1339,7 +1241,6 @@ L_08A5C0F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5C114; } @@ -1400,7 +1301,6 @@ L_08A5C150: L_08A5C160: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A5C184; } @@ -1412,7 +1312,6 @@ L_08A5C16C: L_08A5C170: aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5C184; } @@ -1439,7 +1338,6 @@ L_08A5C188: aot_mem.aot_direct_store8(aot_gpr_23 + static_cast(1280), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5C1D8; } @@ -1466,7 +1364,6 @@ L_08A5C1CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C1D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5C2E4; } @@ -1487,9 +1384,7 @@ L_08A5C1F0: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C230; } @@ -1510,7 +1405,6 @@ L_08A5C21C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5C248; } @@ -1604,7 +1498,6 @@ L_08A5C2E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5C354; } @@ -1625,9 +1518,7 @@ L_08A5C304: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C348; } @@ -1647,9 +1538,7 @@ L_08A5C330: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C354; } @@ -1662,7 +1551,6 @@ L_08A5C348: goto L_08A5C354; L_08A5C354: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A5C37C; } @@ -1672,7 +1560,6 @@ L_08A5C35C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5C37C; } @@ -1682,7 +1569,6 @@ L_08A5C36C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5C70C; } @@ -1723,9 +1609,7 @@ L_08A5C3A8: L_08A5C3C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C490; } @@ -1734,9 +1618,7 @@ L_08A5C3C0: L_08A5C3D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C490; } @@ -1745,7 +1627,6 @@ L_08A5C3D4: L_08A5C3E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5876))); if (branch_taken) { @@ -1756,9 +1637,7 @@ L_08A5C3E8: L_08A5C3FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C484; } @@ -1772,9 +1651,7 @@ L_08A5C410: L_08A5C418: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C484; } @@ -1829,7 +1706,6 @@ L_08A5C484: L_08A5C490: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(2109), static_cast(ctx.gpr[22])); goto L_08A5C548; @@ -1838,7 +1714,6 @@ L_08A5C490: L_08A5C4A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(2109), static_cast(ctx.gpr[22])); goto L_08A5C548; @@ -1853,7 +1728,6 @@ L_08A5C4B8: L_08A5C4C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15820u << 16u); if (branch_taken) { @@ -2096,7 +1970,6 @@ L_08A5C6F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5C738; } @@ -2129,7 +2002,6 @@ L_08A5C738: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C744: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5CA0C; } @@ -2155,7 +2027,6 @@ L_08A5C760: L_08A5C768: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5CA0C; } @@ -2167,7 +2038,6 @@ L_08A5C774: L_08A5C778: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5CA0C; } @@ -2193,9 +2063,7 @@ L_08A5C79C: L_08A5C7A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C810; } @@ -2209,9 +2077,7 @@ L_08A5C7B8: L_08A5C7C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C810; } @@ -2225,9 +2091,7 @@ L_08A5C7D4: L_08A5C7DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C810; } @@ -2238,9 +2102,7 @@ L_08A5C7F0: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C810; } @@ -2359,7 +2221,6 @@ L_08A5C8F8: L_08A5C900: ctx.gpr[22] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2109))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2116))); if (branch_taken) { @@ -2384,9 +2245,7 @@ L_08A5C924: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C92C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C954; } @@ -2399,9 +2258,7 @@ L_08A5C93C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C944: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5C95C; } @@ -2409,7 +2266,6 @@ L_08A5C944: } L_08A5C954: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5CA08; } @@ -2422,7 +2278,6 @@ L_08A5C95C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(309))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5C980; } @@ -2430,7 +2285,6 @@ L_08A5C95C: } L_08A5C978: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5CA0C; } @@ -2455,7 +2309,6 @@ L_08A5C994: AOT_REGCACHE_SYNC_OUT(); return; L_08A5C9A0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5CA0C; } @@ -2463,7 +2316,6 @@ L_08A5C9A0: } L_08A5C9A8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5C9C0; } @@ -2473,7 +2325,6 @@ L_08A5C9B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(309))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5C9C8; } @@ -2508,7 +2359,6 @@ L_08A5C9F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CA00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5CA0C; } @@ -2524,7 +2374,6 @@ L_08A5CA0C: L_08A5CA14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1404))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5CA48; } @@ -2536,7 +2385,6 @@ L_08A5CA20: aot_mem.aot_direct_store8(aot_gpr_23 + static_cast(617), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7893))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5CA48; } @@ -2549,7 +2397,6 @@ L_08A5CA38: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CA40: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5CA60; } @@ -2567,7 +2414,6 @@ L_08A5CA48: } L_08A5CA58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5CA74; } @@ -2581,7 +2427,6 @@ L_08A5CA60: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CA6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0151_entry, 151u, 65u, 0x08A604A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2631,7 +2476,6 @@ L_08A5CAD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CADC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5CAF4; } @@ -2651,7 +2495,6 @@ L_08A5CAF4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(304)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5CB08; } @@ -2764,9 +2607,7 @@ L_08A5CBE4: aot_gpr_4 = (aot_gpr_4 | 47299u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5CC20; } @@ -2789,7 +2630,6 @@ L_08A5CC20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5CCC0; } @@ -3003,7 +2843,6 @@ L_08A5CDE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CE00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5CDA8; } @@ -3039,7 +2878,6 @@ L_08A5CE34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5CEF4; } @@ -3049,7 +2887,6 @@ L_08A5CE44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5CEF4; } @@ -3063,9 +2900,7 @@ L_08A5CE54: L_08A5CE5C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5CEB4; } @@ -3077,9 +2912,7 @@ L_08A5CE70: aot_gpr_4 = (aot_gpr_4 | 26355u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5CEF4; } @@ -3109,9 +2942,7 @@ L_08A5CEB4: aot_gpr_4 = (aot_gpr_4 | 26355u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5CEF4; } @@ -3138,7 +2969,6 @@ L_08A5CEF4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CF00: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5D058; } @@ -3151,7 +2981,6 @@ L_08A5CF08: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CF10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5D058; } @@ -3171,7 +3000,6 @@ L_08A5CF20: L_08A5CF2C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5D058; } @@ -3186,9 +3014,7 @@ L_08A5CF40: aot_gpr_4 = (16128u << 16u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D058; } @@ -3204,9 +3030,7 @@ L_08A5CF60: aot_gpr_4 = (aot_gpr_4 | 49807u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D058; } @@ -3222,7 +3046,6 @@ L_08A5CF84: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16153u << 16u); if (branch_taken) { @@ -3242,9 +3065,7 @@ L_08A5CFA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A5CFBC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D058; } @@ -3271,9 +3092,7 @@ L_08A5CFEC: aot_gpr_4 = (16000u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D058; } @@ -3421,7 +3240,6 @@ L_08A5D15C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1076))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5D1E4; } @@ -3429,7 +3247,6 @@ L_08A5D15C: } L_08A5D16C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5D17C; } @@ -3437,7 +3254,6 @@ L_08A5D16C: } L_08A5D174: { const bool branch_taken = ctx.gpr[16] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A5D1A0; } @@ -3452,7 +3268,6 @@ L_08A5D17C: L_08A5D188: aot_gpr_4 = (static_cast(aot_gpr_2) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5D19C; } @@ -3471,7 +3286,6 @@ L_08A5D19C: goto L_08A5D1A0; L_08A5D1A0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A5D1E4; } @@ -3488,9 +3302,7 @@ L_08A5D1A8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(1216), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D1E4; } @@ -3504,9 +3316,7 @@ L_08A5D1E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D2B0; } @@ -3622,9 +3432,7 @@ L_08A5D2F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D44C; } @@ -3646,7 +3454,6 @@ L_08A5D318: L_08A5D320: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5D330; } @@ -3663,9 +3470,7 @@ L_08A5D330: L_08A5D338: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D39C; } @@ -3753,15 +3558,23 @@ L_08A5D3EC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(8296))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A5D404: aot_gpr_4 = (static_cast(ctx.gpr[16]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5D41C; } @@ -3782,7 +3595,6 @@ L_08A5D41C: goto L_08A5D424; L_08A5D424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5D444; } @@ -3791,7 +3603,6 @@ L_08A5D424: L_08A5D42C: aot_gpr_4 = (static_cast(ctx.gpr[16]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5D440; } @@ -3810,7 +3621,6 @@ L_08A5D440: goto L_08A5D444; L_08A5D444: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5D474; } @@ -3875,7 +3685,6 @@ L_08A5D4C8: ctx.gpr[16] = (aot_gpr_23 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1404))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5D500; } @@ -3903,7 +3712,6 @@ L_08A5D500: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5D4A0; } @@ -3913,9 +3721,7 @@ L_08A5D514: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D544; } @@ -3925,9 +3731,7 @@ L_08A5D52C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1220))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D664; } @@ -3937,7 +3741,6 @@ L_08A5D544: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_29 + static_cast(608)); if (branch_taken) { @@ -3964,7 +3767,6 @@ L_08A5D570: AOT_REGCACHE_SYNC_OUT(); return; L_08A5D57C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5D5A4; } @@ -3990,9 +3792,7 @@ L_08A5D598: L_08A5D5A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(616))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D5D4; } @@ -4015,9 +3815,7 @@ L_08A5D5D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1220))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D614; } @@ -4042,7 +3840,6 @@ L_08A5D600: AOT_REGCACHE_SYNC_OUT(); return; L_08A5D60C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5D634; } @@ -4068,9 +3865,7 @@ L_08A5D628: L_08A5D634: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(616))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D664; } @@ -4093,9 +3888,7 @@ L_08A5D664: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1224))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D694; } @@ -4105,9 +3898,7 @@ L_08A5D67C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1228))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D7B4; } @@ -4117,7 +3908,6 @@ L_08A5D694: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1224))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_29 + static_cast(608)); if (branch_taken) { @@ -4144,7 +3934,6 @@ L_08A5D6C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A5D6CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5D6F4; } @@ -4170,9 +3959,7 @@ L_08A5D6E8: L_08A5D6F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(616))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D724; } @@ -4195,9 +3982,7 @@ L_08A5D724: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1228))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D764; } @@ -4222,7 +4007,6 @@ L_08A5D750: AOT_REGCACHE_SYNC_OUT(); return; L_08A5D75C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5D784; } @@ -4248,9 +4032,7 @@ L_08A5D778: L_08A5D784: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(616))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D7B4; } @@ -4299,9 +4081,7 @@ L_08A5D7E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5D838; } @@ -4330,7 +4110,6 @@ L_08A5D838: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5D7E8; } @@ -4361,7 +4140,6 @@ L_08A5D878: L_08A5D884: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1404))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5D8B0; } @@ -4434,7 +4212,6 @@ L_08A5D924: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(216))); ctx.fpr[22] = aot_fpr_0 / ctx.fpr[22]; aot_gpr_31 = (0x08A5D934u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 52u, 0x08A583C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5D934u) goto L_08A5D934; AOT_REGCACHE_SYNC_OUT(); return; L_08A5D934: @@ -4455,7 +4232,6 @@ L_08A5D940: AOT_REGCACHE_SYNC_OUT(); return; L_08A5D95C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5D990; } @@ -4469,7 +4245,6 @@ L_08A5D964: L_08A5D96C: aot_gpr_4 = (0u | 12u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5D990; } @@ -4483,7 +4258,6 @@ L_08A5D978: AOT_REGCACHE_SYNC_OUT(); return; L_08A5D984: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5D990; } @@ -4525,7 +4299,6 @@ L_08A5D9B0: goto L_08A5D9C8; L_08A5D9C8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5D9D8; } @@ -4552,7 +4325,6 @@ L_08A5D9E0: goto L_08A5D9F0; L_08A5D9F0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5DA00; } @@ -4609,9 +4381,7 @@ L_08A5DA30: L_08A5DA48: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DA74; } @@ -4650,9 +4420,7 @@ L_08A5DA9C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DABC; } @@ -4668,7 +4436,6 @@ L_08A5DAB4: } L_08A5DABC: aot_gpr_31 = (0x08A5DAC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 52u, 0x08A583C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5DAC4u) goto L_08A5DAC4; AOT_REGCACHE_SYNC_OUT(); return; L_08A5DAC4: @@ -4687,9 +4454,7 @@ L_08A5DAE0: L_08A5DAE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DB74; } @@ -4708,7 +4473,6 @@ L_08A5DAF8: L_08A5DB08: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5DB1C; } @@ -4722,7 +4486,6 @@ L_08A5DB1C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1493))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5DB54; } @@ -4747,7 +4510,6 @@ L_08A5DB40: AOT_REGCACHE_SYNC_OUT(); return; L_08A5DB4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5DB74; } @@ -4784,7 +4546,6 @@ L_08A5DB74: L_08A5DB88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1493))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A5DC04; } @@ -4822,9 +4583,7 @@ L_08A5DBD4: aot_gpr_4 = (48896u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DBFC; } @@ -4839,7 +4598,6 @@ L_08A5DBEC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5DBFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5DC28; } @@ -4864,7 +4622,6 @@ L_08A5DC28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1220))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 32u); if (branch_taken) { @@ -4930,7 +4687,6 @@ L_08A5DCC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1224))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1228))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_23 + static_cast(12)); if (branch_taken) { @@ -5008,7 +4764,6 @@ L_08A5DD5C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5DD88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5DDF8; } @@ -5018,7 +4773,6 @@ L_08A5DD90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5DDF8; } @@ -5028,7 +4782,6 @@ L_08A5DDA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5DDF8; } @@ -5040,7 +4793,6 @@ L_08A5DDB0: aot_gpr_4 = (aot_gpr_4 | 47299u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2076), ctx.gpr[19]); if (branch_taken) { @@ -5082,9 +4834,7 @@ L_08A5DE08: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DE8C; } @@ -5102,9 +4852,7 @@ L_08A5DE2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5DE34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DE8C; } @@ -5114,9 +4862,7 @@ L_08A5DE44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(600))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5DE8C; } @@ -5150,9 +4896,7 @@ L_08A5DE8C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2076), ctx.gpr[19]); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(624))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E05C; } @@ -5162,7 +4906,6 @@ L_08A5DEA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2076), ctx.gpr[19]); goto L_08A5DED4; @@ -5171,7 +4914,6 @@ L_08A5DEA4: L_08A5DEBC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2076), ctx.gpr[19]); if (branch_taken) { @@ -5189,7 +4931,6 @@ L_08A5DED4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5DEDC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5E05C; } @@ -5299,7 +5040,6 @@ L_08A5DFAC: aot_fpr_12 = aot_fpr_20 / aot_fpr_12; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1200), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5311,9 +5051,7 @@ L_08A5DFE4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1516))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E028; } @@ -5323,9 +5061,7 @@ L_08A5DFFC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(600))); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E03C; } @@ -5334,9 +5070,7 @@ L_08A5DFFC: L_08A5E014: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1516))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E03C; } @@ -5424,9 +5158,7 @@ L_08A5E0B0: L_08A5E0C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E0F0; } @@ -5435,7 +5167,6 @@ L_08A5E0C8: L_08A5E0DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16243u << 16u); if (branch_taken) { @@ -5470,7 +5201,6 @@ L_08A5E0F0: L_08A5E138: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2100), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -5649,7 +5379,6 @@ L_08A5E294: L_08A5E29C: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5E2C0; } @@ -5667,7 +5396,6 @@ L_08A5E2A8: } L_08A5E2B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5E2CC; } @@ -5685,7 +5413,6 @@ L_08A5E2CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5E2D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5E2F0; } @@ -5708,7 +5435,6 @@ L_08A5E2F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1076))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5E32C; } @@ -5781,7 +5507,6 @@ L_08A5E398: L_08A5E3A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2109))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5E3D4; } @@ -5832,7 +5557,6 @@ L_08A5E3E0: L_08A5E400: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2100), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -5843,7 +5567,6 @@ L_08A5E400: L_08A5E414: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2100), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -5982,7 +5705,6 @@ L_08A5E51C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5E524: { const bool branch_taken = aot_gpr_2 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A5E57C; } @@ -6001,7 +5723,6 @@ L_08A5E534: L_08A5E53C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5E57C; } @@ -6014,7 +5735,6 @@ L_08A5E548: AOT_REGCACHE_SYNC_OUT(); return; L_08A5E550: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5E59C; } @@ -6030,9 +5750,7 @@ L_08A5E560: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E59C; } @@ -6055,7 +5773,6 @@ L_08A5E57C: L_08A5E59C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_23 + static_cast(1384))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5E624; } @@ -6084,7 +5801,6 @@ L_08A5E5C0: L_08A5E5C8: aot_gpr_4 = (0u | 178u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5E6B8; } @@ -6119,7 +5835,6 @@ L_08A5E60C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5E61C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5E6B8; } @@ -6131,7 +5846,6 @@ L_08A5E624: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[28]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } if (branch_taken) { @@ -6144,9 +5858,7 @@ L_08A5E644: aot_gpr_4 = (16192u << 16u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E6B8; } @@ -6187,9 +5899,7 @@ L_08A5E6B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7152))); ctx.fpr[28] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E6E8; } @@ -6198,9 +5908,7 @@ L_08A5E6B8: L_08A5E6D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2104))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E6E8; } @@ -6227,7 +5935,6 @@ L_08A5E704: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1392))); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6263,7 +5970,6 @@ L_08A5E73C: L_08A5E744: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5E768; } @@ -6281,7 +5987,6 @@ L_08A5E750: } L_08A5E760: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5E774; } @@ -6299,7 +6004,6 @@ L_08A5E774: AOT_REGCACHE_SYNC_OUT(); return; L_08A5E77C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5E798; } @@ -6322,7 +6026,6 @@ L_08A5E798: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1077))); ctx.gpr[16] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08A5E7D4; } @@ -6397,7 +6100,6 @@ L_08A5E848: L_08A5E854: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2109))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5E880; } @@ -6427,7 +6129,6 @@ L_08A5E878: goto L_08A5E880; L_08A5E880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5E938; } @@ -6457,7 +6158,6 @@ L_08A5E898: } L_08A5E8A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(ctx.fpr[28])) && ctx.fpr[22] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2100), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -6467,7 +6167,6 @@ L_08A5E8A4: } L_08A5E8B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2100), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -6480,7 +6179,6 @@ L_08A5E8C4: aot_gpr_4 = (16384u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15948u << 16u); if (branch_taken) { @@ -6505,7 +6203,6 @@ L_08A5E8F8: aot_gpr_4 = (49152u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15820u << 16u); if (branch_taken) { @@ -6529,7 +6226,6 @@ L_08A5E928: L_08A5E938: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_23 + static_cast(1384))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5E988; } @@ -6539,7 +6235,6 @@ L_08A5E944: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1504))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5E988; } @@ -6557,7 +6252,6 @@ L_08A5E95C: { const float fs = aot_fpr_0; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_23 + static_cast(1388), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6578,9 +6272,7 @@ L_08A5E988: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E9C4; } @@ -6602,7 +6294,6 @@ L_08A5E9AC: L_08A5E9C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2064))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5ECF0; } @@ -6611,9 +6302,7 @@ L_08A5E9C4: L_08A5E9D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5E9F8; } @@ -6622,7 +6311,6 @@ L_08A5E9D0: L_08A5E9E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16243u << 16u); if (branch_taken) { @@ -6656,9 +6344,7 @@ L_08A5E9F8: L_08A5EA3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5EA54; } @@ -6796,7 +6482,6 @@ L_08A5EB50: aot_gpr_4 = (16256u << 16u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2128))); if (branch_taken) { @@ -6832,7 +6517,6 @@ L_08A5EB8C: L_08A5EB94: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5EBB8; } @@ -6850,7 +6534,6 @@ L_08A5EBA0: } L_08A5EBB0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5EBC4; } @@ -6868,7 +6551,6 @@ L_08A5EBC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5EBCC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5EBE8; } @@ -6891,7 +6573,6 @@ L_08A5EBE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1076))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5EC24; } @@ -6964,7 +6645,6 @@ L_08A5EC90: L_08A5EC9C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2109))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5ECC8; } @@ -6974,7 +6654,6 @@ L_08A5ECA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7156))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A5ECC4; } @@ -6983,7 +6662,6 @@ L_08A5ECA8: L_08A5ECB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7156))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A5ECC8; } @@ -6994,7 +6672,6 @@ L_08A5ECC4: goto L_08A5ECC8; L_08A5ECC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5ECF0; } @@ -7051,7 +6728,6 @@ L_08A5ED38: goto L_08A5ED3C; L_08A5ED3C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A5ED5C; } @@ -7071,7 +6747,6 @@ L_08A5ED4C: L_08A5ED5C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2092))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5ED78; } @@ -7081,7 +6756,6 @@ L_08A5ED68: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5F018; } @@ -7206,7 +6880,6 @@ L_08A5EE74: aot_fpr_20 = aot_fpr_20 / aot_fpr_12; aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5EF8C; } @@ -7245,7 +6918,6 @@ L_08A5EEC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5EED8: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08A5EF14; } @@ -7304,7 +6976,6 @@ L_08A5EF38: AOT_REGCACHE_SYNC_OUT(); return; L_08A5EF4C: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08A5EFD8; } @@ -7343,9 +7014,7 @@ L_08A5EF8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1072))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5EFB0; } @@ -7365,9 +7034,7 @@ L_08A5EFB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5EFD8; } @@ -7413,7 +7080,6 @@ L_08A5F018: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5F084; } @@ -7485,7 +7151,6 @@ L_08A5F0AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); aot_gpr_4 = (16128u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7497,9 +7162,7 @@ L_08A5F0D0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1220))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5F294; } @@ -7513,7 +7176,6 @@ L_08A5F0E8: aot_gpr_4 = (aot_gpr_4 | 26214u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15523u << 16u); if (branch_taken) { @@ -7526,9 +7188,7 @@ L_08A5F110: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5F294; } @@ -7541,7 +7201,6 @@ L_08A5F12C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F134: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5F294; } @@ -7567,7 +7226,6 @@ L_08A5F154: aot_mem.aot_direct_store32(aot_gpr_23 + static_cast(1392), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_29 + static_cast(560)); if (branch_taken) { @@ -7579,9 +7237,7 @@ L_08A5F17C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1228))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5F214; } @@ -7637,7 +7293,6 @@ L_08A5F1FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F20C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5F298; } @@ -7693,7 +7348,6 @@ L_08A5F27C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F28C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5F298; } @@ -7715,7 +7369,6 @@ L_08A5F2A0: ctx.gpr[6] = (ctx.gpr[7] + ctx.gpr[6]); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[6] + static_cast(8))); if (branch_taken) { @@ -7782,9 +7435,7 @@ L_08A5F344: L_08A5F360: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5F388; } @@ -7794,7 +7445,6 @@ L_08A5F374: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1504))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5F388; } @@ -7810,7 +7460,6 @@ L_08A5F388: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F390: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5F548; } @@ -7823,7 +7472,6 @@ L_08A5F398: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F3A0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5F4E4; } @@ -7836,7 +7484,6 @@ L_08A5F3A8: aot_gpr_5 = (aot_gpr_5 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A5F468; } @@ -7867,7 +7514,6 @@ L_08A5F3E8: L_08A5F3EC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A5F460; } @@ -7898,7 +7544,6 @@ L_08A5F41C: L_08A5F420: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5F460; } @@ -7968,7 +7613,6 @@ L_08A5F48C: L_08A5F490: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A5F4DC; } @@ -7999,7 +7643,6 @@ L_08A5F4C0: L_08A5F4C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(158))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5F4DC; } @@ -8029,7 +7672,6 @@ L_08A5F4E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F4EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5F560; } @@ -8051,7 +7693,6 @@ L_08A5F504: L_08A5F510: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5F528; } @@ -8067,7 +7708,6 @@ L_08A5F524: goto L_08A5F528; L_08A5F528: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A5F53C; } @@ -8087,7 +7727,6 @@ L_08A5F53C: goto L_08A5F540; L_08A5F540: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5F560; } @@ -8100,7 +7739,6 @@ L_08A5F548: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F550: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08A5F560; } @@ -8116,9 +7754,7 @@ L_08A5F560: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5F8F4; } @@ -8132,7 +7768,6 @@ L_08A5F57C: L_08A5F584: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5F8F4; } @@ -8146,7 +7781,6 @@ L_08A5F590: L_08A5F598: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5F5EC; } @@ -8180,7 +7814,6 @@ L_08A5F5C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F5E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5F8F8; } @@ -8214,7 +7847,6 @@ L_08A5F618: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F624: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5F684; } @@ -8483,7 +8115,6 @@ L_08A5F8AC: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_23 + static_cast(1400), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -8506,7 +8137,6 @@ L_08A5F8CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F8EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5F8F8; } @@ -8524,7 +8154,6 @@ L_08A5F900: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5F93C; } @@ -8535,7 +8164,6 @@ L_08A5F910: aot_gpr_5 = (0u | 5u); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A5F93C; } @@ -8548,7 +8176,6 @@ L_08A5F924: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F92C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5F93C; } @@ -8595,9 +8222,7 @@ L_08A5F98C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FA60; } @@ -8605,7 +8230,6 @@ L_08A5F98C: } L_08A5F9B4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A5F9C4; } @@ -8613,7 +8237,6 @@ L_08A5F9B4: } L_08A5F9BC: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A5FA60; } @@ -8621,9 +8244,7 @@ L_08A5F9BC: } L_08A5F9C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FA60; } @@ -8636,7 +8257,6 @@ L_08A5F9D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A5F9DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08A5F9F8; } @@ -8650,7 +8270,6 @@ L_08A5F9E4: L_08A5F9EC: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5FA60; } @@ -8680,7 +8299,6 @@ L_08A5FA14: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FA2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5FA4C; } @@ -8697,9 +8315,7 @@ L_08A5FA34: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FA4C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FA60; } @@ -8710,7 +8326,6 @@ L_08A5FA5C: goto L_08A5FA60; L_08A5FA60: aot_gpr_31 = (0x08A5FA68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5FA68u) goto L_08A5FA68; AOT_REGCACHE_SYNC_OUT(); return; L_08A5FA68: @@ -8731,7 +8346,6 @@ L_08A5FA78: L_08A5FA80: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5FAAC; } @@ -8744,7 +8358,6 @@ L_08A5FA8C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FA94: { const bool branch_taken = aot_gpr_2 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08A5FAAC; } @@ -8757,7 +8370,6 @@ L_08A5FA9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FAA4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A5FACC; } @@ -8765,9 +8377,7 @@ L_08A5FAA4: } L_08A5FAAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FB50; } @@ -8791,7 +8401,6 @@ L_08A5FACC: L_08A5FAD4: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A5FB00; } @@ -8804,7 +8413,6 @@ L_08A5FAE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FAE8: { const bool branch_taken = aot_gpr_2 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A5FB00; } @@ -8817,7 +8425,6 @@ L_08A5FAF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FAF8: { const bool branch_taken = aot_gpr_2 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A5FB24; } @@ -8828,9 +8435,7 @@ L_08A5FB00: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FB50; } @@ -8851,7 +8456,6 @@ L_08A5FB24: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FB2C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A5FB50; } @@ -8859,9 +8463,7 @@ L_08A5FB2C: } L_08A5FB34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FB50; } @@ -8890,9 +8492,7 @@ L_08A5FB50: L_08A5FB74: aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FB98; } @@ -8900,7 +8500,6 @@ L_08A5FB74: } L_08A5FB88: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(616)))))); goto L_08A5FD2C; @@ -8933,7 +8532,6 @@ L_08A5FBB8: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(616)))))); goto L_08A5FD2C; @@ -8941,7 +8539,6 @@ L_08A5FBB8: goto L_08A5FBD8; L_08A5FBD8: aot_gpr_31 = (0x08A5FBE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 6u, 0x08A58084u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A5FBE0u) goto L_08A5FBE0; AOT_REGCACHE_SYNC_OUT(); return; L_08A5FBE0: @@ -8950,7 +8547,6 @@ L_08A5FBE0: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (17658u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -9076,7 +8672,6 @@ L_08A5FD2C: aot_mem.aot_direct_store8(aot_gpr_23 + static_cast(617), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5FD60; } @@ -9091,7 +8686,6 @@ L_08A5FD60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A5FDFC; } @@ -9153,7 +8747,6 @@ L_08A5FDE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FDF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A5FECC; } @@ -9162,7 +8755,6 @@ L_08A5FDF4: L_08A5FDFC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2108))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5FECC; } @@ -9171,9 +8763,7 @@ L_08A5FDFC: L_08A5FE08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2100))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FE30; } @@ -9182,9 +8772,7 @@ L_08A5FE08: L_08A5FE1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2104))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FE44; } @@ -9198,7 +8786,6 @@ L_08A5FE30: L_08A5FE38: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A5FECC; } @@ -9219,9 +8806,7 @@ L_08A5FE54: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FECC; } @@ -9239,9 +8824,7 @@ L_08A5FE78: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FE80: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FECC; } @@ -9259,9 +8842,7 @@ L_08A5FE98: AOT_REGCACHE_SYNC_OUT(); return; L_08A5FEA0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FECC; } @@ -9282,7 +8863,6 @@ L_08A5FEC8: L_08A5FECC: ctx.gpr[17] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(2092))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A5FEF8; } @@ -9292,7 +8872,6 @@ L_08A5FED8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A5FEF8; } @@ -9302,7 +8881,6 @@ L_08A5FEE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0151_entry, 151u, 65u, 0x08A604A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9325,7 +8903,6 @@ L_08A5FF0C: ctx.fpr[24] = std::bit_cast(aot_gpr_5); aot_gpr_4 = (aot_gpr_23 + static_cast(192)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_29 + static_cast(1728)); if (branch_taken) { @@ -9345,9 +8922,7 @@ L_08A5FF34: aot_gpr_5 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A5FF50; } diff --git a/profiles/vcs/generated/generated_unit_0151.cpp b/profiles/vcs/generated/generated_unit_0151.cpp index d3f8039..2ff2076 100644 --- a/profiles/vcs/generated/generated_unit_0151.cpp +++ b/profiles/vcs/generated/generated_unit_0151.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0151[4086] = { - 1, 0, 2, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 6, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 10, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0, 0, 21, 0, 22, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 37, 0, - 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, - 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 50, 0, 51, - 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 55, 0, 0, 56, 0, 0, - 0, 57, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, - 62, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 69, 0, 0, 70, 0, 71, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 84, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 88, - 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 0, 0, 0, 0, 94, 0, 95, 0, 96, 0, 0, 0, 0, 0, 97, - 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 0, - 0, 106, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, - 0, 0, 0, 0, 112, 0, 0, 113, 0, 0, 0, 0, 0, 0, 114, 115, 0, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 121, 0, 122, 0, 0, 123, 0, 0, 124, 0, 0, 125, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 128, 0, - 0, 0, 0, 0, 129, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 151, 0, 0, 152, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 157, 158, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 166, 0, 0, 0, 0, 167, - 168, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, - 0, 179, 0, 0, 0, 0, 180, 181, 182, 0, 183, 0, 0, 0, 184, 0, 185, 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 190, 0, - 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, - 0, 0, 0, 194, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 0, 200, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, - 0, 203, 0, 0, 204, 0, 205, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 0, - 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 235, 0, - 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 240, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, - 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 0, 252, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, - 263, 0, 0, 264, 0, 265, 0, 266, 0, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, 0, 269, 270, 0, 0, 271, 0, 0, 272, 0, 273, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, - 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, - 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, - 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 291, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, - 293, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, - 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 309, 0, 0, 0, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, - 313, 0, 0, 0, 314, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, - 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 323, - 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 326, 0, 0, 0, 0, 327, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 330, 0, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 338, 0, 339, - 0, 0, 0, 340, 0, 341, 0, 0, 342, 0, 0, 343, 0, 0, 0, 344, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, - 348, 0, 0, 0, 349, 0, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 356, 0, 0, 357, 0, - 358, 0, 0, 359, 0, 0, 360, 0, 361, 0, 0, 0, 362, 0, 363, 0, 0, 364, 0, 365, 0, 0, 366, 0, 367, 0, 0, 368, 0, 369, 0, 0, - 370, 0, 0, 371, 0, 372, 0, 0, 373, 0, 374, 0, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, - 380, 0, 0, 381, 0, 0, 0, 0, 382, 0, 0, 383, 0, 384, 0, 385, 0, 0, 0, 386, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, 393, 0, 0, - 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 0, 0, 399, 0, 400, 0, 401, 0, 0, 402, 0, 0, 0, 0, - 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 0, 0, 406, 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 416, 0, 417, 0, 0, 418, 0, 419, 0, 0, - 0, 420, 0, 421, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, 0, - 428, 0, 429, 0, 0, 0, 430, 0, 0, 431, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, - 0, 438, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 441, 0, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 446, 0, - 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 453, 0, 0, - 0, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 460, 0, 0, 0, 461, - 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 466, 0, 467, 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 471, 0, 0, 0, 0, 0, - 0, 472, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, - 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, - 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, - 0, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 505, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 511, - 0, 0, 512, 0, 513, 0, 0, 0, 514, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 517, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 524, 0, 525, 0, 0, 0, 0, 526, 0, 0, 0, 0, 527, 0, 528, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 547, 0, 0, 548, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, - 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, - 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, - 567, 0, 0, 568, 0, 569, 0, 570, 0, 571, 0, 0, 572, 0, 573, 0, 574, 0, 575, 0, 0, 576, 0, 577, 0, 578, 0, 579, 0, 0, 580, 0, - 0, 0, 0, 0, 0, 0, 581, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 592, 0, 0, 593, 0, 594, 0, 595, 0, 596, 597, 0, 0, 0, 598, 0, - 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 601, 0, 602, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, - 607, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 610, 611, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 621, 0, - 0, 622, 0, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, - 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 630, 0, 0, 631, 0, 632, 0, 0, 0, 633, - 0, 634, 0, 0, 635, 0, 0, 636, 0, 637, 0, 0, 638, 0, 0, 639, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 642, 0, 643, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 647, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 652, 0, 653, 0, 654, 0, 655, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 660, 0, - 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 663, 0, 0, 664, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, - 0, 0, 0, 0, 668, 0, 669, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0151[64] = { + 0x040221085082A225ull, 0xA224404114180814ull, 0x011084284288A200ull, 0x24404100AC040A02ull, + 0x10000445100200A2ull, 0x000A22A900280000ull, 0x8100A52080014208ull, 0x4448890282A0A80Aull, + 0x2044C0904000910Aull, 0x0402015041249294ull, 0x0010880004000080ull, 0x0008040000400000ull, + 0x0002000005548100ull, 0x2000000000012500ull, 0x848109004044C022ull, 0x2110810011010841ull, + 0x08000005522345C2ull, 0x2424800880000208ull, 0x8010200002000952ull, 0x0000040A00028000ull, + 0x0280005000000140ull, 0x0004410000054006ull, 0x0A00000142050020ull, 0x080050000020A000ull, + 0x0000040000000008ull, 0x00A001000912AA00ull, 0x1000050001000010ull, 0x20000220293210A9ull, + 0x0800000420000004ull, 0x28200020280A0000ull, 0x0488820104320000ull, 0x0042000000000000ull, + 0x1400002000010800ull, 0x200094112220C104ull, 0xA000084000000002ull, 0x0030844000000001ull, + 0xA444220000000340ull, 0x49520A1120128928ull, 0x44812529294A5149ull, 0x250120000128A909ull, + 0x124A280809515210ull, 0x2410814A29484250ull, 0x4A052122A0248A45ull, 0x89010A4828A04088ull, + 0x0480112802801004ull, 0x0080120480048012ull, 0x0901202401211082ull, 0x1088491024048024ull, + 0x02A8291491102200ull, 0x0012A10A00011400ull, 0x0005404055550040ull, 0x0000408110014A22ull, + 0x0000080402050000ull, 0x2010102800000004ull, 0x4AA552A900A00000ull, 0x00080A000000AA40ull, + 0x46A9200100800000ull, 0x2000048001281080ull, 0x520A11002082C105ull, 0x0000004040000282ull, + 0x044092928A501100ull, 0x0000000010420025ull, 0x51042AA000280028ull, 0x002000D088294001ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0151[64] = { + 1u, 16u, 31u, 44u, 57u, 67u, 77u, 89u, 106u, 119u, 134u, 139u, 142u, 150u, 155u, 168u, + 179u, 194u, 203u, 212u, 217u, 223u, 231u, 239u, 245u, 247u, 258u, 263u, 277u, 281u, 289u, 299u, + 301u, 306u, 319u, 324u, 330u, 340u, 358u, 380u, 394u, 411u, 428u, 447u, 462u, 472u, 481u, 493u, + 506u, 521u, 531u, 544u, 554u, 559u, 565u, 581u, 589u, 599u, 607u, 622u, 627u, 642u, 648u, 661u, }; void recomp_unit_0151_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0151_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A60000u; - entry_id = (entry_delta < 16344u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0151[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16344u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0151[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0151[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A60000; @@ -874,7 +781,6 @@ L_08A60034: AOT_REGCACHE_SYNC_OUT(); return; L_08A6003C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A604A8; } @@ -884,9 +790,7 @@ L_08A60044: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); aot_fpr_22 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60264; } @@ -895,9 +799,7 @@ L_08A60044: L_08A6005C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60264; } @@ -911,9 +813,7 @@ L_08A60070: L_08A60078: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60264; } @@ -922,9 +822,7 @@ L_08A60078: L_08A6008C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A600B4; } @@ -933,9 +831,7 @@ L_08A6008C: L_08A600A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60264; } @@ -955,7 +851,6 @@ L_08A600C4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -987,7 +882,6 @@ L_08A60110: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48655u << 16u); if (branch_taken) { @@ -1079,7 +973,6 @@ L_08A601E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A601F4: aot_gpr_31 = (0x08A601FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 52u, 0x08A583C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A601FCu) goto L_08A601FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A601FC: @@ -1123,7 +1016,6 @@ L_08A6024C: AOT_REGCACHE_SYNC_OUT(); return; L_08A6025C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A604A8; } @@ -1132,9 +1024,7 @@ L_08A6025C: L_08A60264: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A604A8; } @@ -1143,9 +1033,7 @@ L_08A60264: L_08A60278: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A604A8; } @@ -1159,9 +1047,7 @@ L_08A6028C: L_08A60294: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A604A8; } @@ -1170,9 +1056,7 @@ L_08A60294: L_08A602A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A602D0; } @@ -1181,9 +1065,7 @@ L_08A602A8: L_08A602BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A604A8; } @@ -1203,7 +1085,6 @@ L_08A602E0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -1235,7 +1116,6 @@ L_08A6032C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48793u << 16u); if (branch_taken) { @@ -1328,7 +1208,6 @@ L_08A60404: AOT_REGCACHE_SYNC_OUT(); return; L_08A60414: aot_gpr_31 = (0x08A6041Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 52u, 0x08A583C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6041Cu) goto L_08A6041C; AOT_REGCACHE_SYNC_OUT(); return; L_08A6041C: @@ -1409,7 +1288,17 @@ L_08A604A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A604F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1473,7 +1362,6 @@ L_08A60580: AOT_REGCACHE_SYNC_OUT(); return; L_08A6058C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A605B4; } @@ -1532,7 +1420,6 @@ L_08A6060C: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A60624; @@ -1574,7 +1461,6 @@ L_08A6067C: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A60694; @@ -1609,7 +1495,6 @@ L_08A606BC: ctx.fpr[20] = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[20] = ctx.fpr[20] / ctx.fpr[30]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[28]) ^ 0x80000000u); goto L_08A606E0; @@ -1620,9 +1505,7 @@ L_08A606E0: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A607AC; } @@ -1644,9 +1527,7 @@ L_08A6070C: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A607A0; } @@ -1666,9 +1547,7 @@ L_08A6073C: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A607A0; } @@ -1722,9 +1601,7 @@ L_08A607A0: } L_08A607AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A607E8; } @@ -1732,9 +1609,7 @@ L_08A607AC: } L_08A607BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A607D8; } @@ -1761,9 +1636,7 @@ L_08A607D8: } L_08A607E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60804; } @@ -1785,7 +1658,6 @@ L_08A60804: L_08A6080C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(848))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(848))); goto L_08A60830; @@ -1833,7 +1705,6 @@ L_08A60878: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6089C; } @@ -1851,7 +1722,6 @@ L_08A6089C: aot_gpr_4 = (aot_gpr_4 & 15u); aot_gpr_4 = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A608BC; } @@ -1904,7 +1774,6 @@ L_08A60908: L_08A60910: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6093C; } @@ -1918,7 +1787,6 @@ L_08A6091C: L_08A60924: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(156))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6093C; } @@ -1927,7 +1795,6 @@ L_08A60924: L_08A60930: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(860))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A609E8; } @@ -1936,7 +1803,6 @@ L_08A60930: L_08A6093C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A60960; } @@ -1945,7 +1811,6 @@ L_08A6093C: L_08A60948: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4209))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A60960; } @@ -1954,7 +1819,6 @@ L_08A60948: L_08A60954: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(860))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A609E8; } @@ -1983,7 +1847,6 @@ L_08A60978: } L_08A60990: aot_gpr_31 = (0x08A60998u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A60998u) goto L_08A60998; AOT_REGCACHE_SYNC_OUT(); return; L_08A60998: @@ -2006,9 +1869,7 @@ L_08A609A0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A609E8; } @@ -2057,7 +1918,17 @@ L_08A609E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A60A1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-2704)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_23, ctx.gpr[30], aot_gpr_31}; @@ -2093,7 +1964,6 @@ L_08A60AAC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1214))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A60D28; } @@ -2102,9 +1972,7 @@ L_08A60AAC: L_08A60ABC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60DF4; } @@ -2144,9 +2012,7 @@ L_08A60AD0: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1240))); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60BA8; } @@ -2292,7 +2158,6 @@ L_08A60C20: L_08A60C3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1504))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A60D20; } @@ -2305,7 +2170,6 @@ L_08A60C48: AOT_REGCACHE_SYNC_OUT(); return; L_08A60C50: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A60C68; } @@ -2318,7 +2182,6 @@ L_08A60C58: AOT_REGCACHE_SYNC_OUT(); return; L_08A60C60: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A60D20; } @@ -2413,7 +2276,6 @@ L_08A60CC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A60D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A60DF4; } @@ -2422,7 +2284,6 @@ L_08A60D20: L_08A60D28: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1277))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A60D40; } @@ -2431,7 +2292,6 @@ L_08A60D28: L_08A60D34: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1279))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A60DF4; } @@ -2604,7 +2464,6 @@ L_08A60EA0: L_08A60EAC: aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (ctx.gpr[20] | 0u); goto L_08A60F00; @@ -2631,9 +2490,7 @@ L_08A60EDC: L_08A60EE8: aot_fpr_13 = aot_fpr_13 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60F00; } @@ -2648,7 +2505,6 @@ L_08A60F00: aot_gpr_5 = (aot_gpr_5 & 64u); aot_gpr_5 = (aot_gpr_5 >> 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A60FE0; } @@ -2659,7 +2515,6 @@ L_08A60F18: aot_gpr_6 = (0u | 80u); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A60FE0; } @@ -2670,7 +2525,6 @@ L_08A60F2C: aot_gpr_6 = (0u | 64u); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A60F60; } @@ -2710,7 +2564,6 @@ L_08A60F70: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A60FA0; @@ -2721,7 +2574,6 @@ L_08A60FA0: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08A60FBC; @@ -2730,9 +2582,7 @@ L_08A60FA0: L_08A60FBC: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A60FE0; } @@ -2782,7 +2632,6 @@ L_08A6101C: goto L_08A61020; L_08A61020: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A61044; } @@ -2792,7 +2641,6 @@ L_08A61028: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A61040; } @@ -2813,7 +2661,6 @@ L_08A61044: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A61070; } @@ -2823,7 +2670,6 @@ L_08A61054: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 64u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A61070; } @@ -2920,7 +2766,6 @@ L_08A61088: ctx.gpr[17] = (aot_gpr_29 + static_cast(672)); ctx.gpr[18] = (aot_gpr_29 + static_cast(608)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_22)) && aot_fpr_12 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_gpr_29 + static_cast(624)); if (branch_taken) { @@ -2947,7 +2792,6 @@ L_08A610EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61124; } @@ -3046,7 +2890,6 @@ L_08A6118C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_23 + static_cast(86)))))); aot_gpr_5 = (0u | 152u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A61220; } @@ -3091,7 +2934,6 @@ L_08A611F4: L_08A61204: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(832))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A61218; } @@ -3104,7 +2946,6 @@ L_08A61210: AOT_REGCACHE_SYNC_OUT(); return; L_08A61218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6122C; } @@ -3182,7 +3023,6 @@ L_08A6122C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16128u << 16u); if (branch_taken) { @@ -3208,7 +3048,6 @@ L_08A61264: ctx.fpr[24] = ctx.fpr[24] + aot_fpr_14; ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[26] = std::bit_cast(0x7FC00000u); else ctx.fpr[26] = fs * ft; } if (branch_taken) { @@ -3221,9 +3060,7 @@ L_08A612B4: aot_gpr_4 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A61384; } @@ -3267,7 +3104,6 @@ L_08A612FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A6133C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61384; } @@ -3294,7 +3130,6 @@ L_08A61344: AOT_REGCACHE_SYNC_OUT(); return; L_08A61384: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A61498; } @@ -3453,12 +3288,10 @@ L_08A61508: } L_08A61538: aot_gpr_31 = (0x08A61540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A61540u) goto L_08A61540; AOT_REGCACHE_SYNC_OUT(); return; L_08A61540: { const bool branch_taken = aot_gpr_23 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A615A0; } @@ -3633,7 +3466,6 @@ L_08A615C8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -3660,7 +3492,6 @@ L_08A61614: } L_08A61640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61754; } @@ -3724,7 +3555,6 @@ L_08A61680: AOT_REGCACHE_SYNC_OUT(); return; L_08A616E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61754; } @@ -3753,7 +3583,6 @@ L_08A616EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A61734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61754; } @@ -3840,7 +3669,6 @@ L_08A61754: AOT_REGCACHE_SYNC_OUT(); return; L_08A617B0: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A61924; } @@ -3868,7 +3696,6 @@ L_08A617B8: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_22)) && aot_fpr_14 == aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } goto L_08A6180C; @@ -3962,12 +3789,10 @@ L_08A618A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A61924: aot_gpr_31 = (0x08A6192Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6192Cu) goto L_08A6192C; AOT_REGCACHE_SYNC_OUT(); return; L_08A6192C: { const bool branch_taken = aot_gpr_23 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A61AF0; } @@ -3975,7 +3800,6 @@ L_08A6192C: } L_08A61934: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A61AF0; } @@ -3983,7 +3807,6 @@ L_08A61934: } L_08A6193C: aot_gpr_31 = (0x08A61944u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A61944u) goto L_08A61944; AOT_REGCACHE_SYNC_OUT(); return; L_08A61944: @@ -4016,7 +3839,6 @@ L_08A6196C: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = ctx.fpr[24] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4064,7 +3886,6 @@ L_08A619A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A619D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61A10; } @@ -4167,9 +3988,7 @@ L_08A61A10: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(608))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A61AA8; } @@ -4206,7 +4025,6 @@ L_08A61A60: AOT_REGCACHE_SYNC_OUT(); return; L_08A61AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61AF0; } @@ -4247,7 +4065,6 @@ L_08A61AF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(744))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A61B14; } @@ -4256,7 +4073,6 @@ L_08A61AF0: L_08A61B00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(736))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A61B14; } @@ -4269,7 +4085,6 @@ L_08A61B0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A61B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61D94; } @@ -4296,7 +4111,6 @@ L_08A61B30: L_08A61B44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(627))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A61B6C; } @@ -4308,7 +4122,6 @@ L_08A61B50: L_08A61B54: aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A61D94; } @@ -4317,7 +4130,6 @@ L_08A61B54: L_08A61B60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_23 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A61D94; } @@ -4431,9 +4243,7 @@ L_08A61BA4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(608))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A61C08; } @@ -4442,9 +4252,7 @@ L_08A61BA4: L_08A61BF4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A61D74; } @@ -4533,9 +4341,7 @@ L_08A61C08: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A61D4C; } @@ -4544,9 +4350,7 @@ L_08A61C08: L_08A61C74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A61D6C; } @@ -4650,7 +4454,6 @@ L_08A61CEC: AOT_REGCACHE_SYNC_OUT(); return; L_08A61D44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61D6C; } @@ -4669,7 +4472,6 @@ L_08A61D4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A61D6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A61D94; } @@ -4716,7 +4518,6 @@ L_08A61D94: ctx.gpr[17] = (0u | 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); goto L_08A61DD4; @@ -4726,7 +4527,6 @@ L_08A61DD4: aot_gpr_4 = (17076u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2632), ctx.gpr[18]); if (branch_taken) { @@ -4787,9 +4587,7 @@ L_08A61E68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1232))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A620F0; } @@ -4810,7 +4608,6 @@ L_08A61E80: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7176), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4824,7 +4621,6 @@ L_08A61EA4: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1088)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(30))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A620F0; } @@ -4834,7 +4630,6 @@ L_08A61EBC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(30))); aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A620F0; } @@ -4844,7 +4639,6 @@ L_08A61ECC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(30))); aot_gpr_6 = (0u | 18u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A620F0; } @@ -4853,7 +4647,6 @@ L_08A61ECC: L_08A61EDC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(30))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A620F0; } @@ -4977,9 +4770,7 @@ L_08A61EE8: L_08A61FC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6202C; } @@ -5023,9 +4814,7 @@ L_08A61FD8: L_08A6202C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A620E8; } @@ -5103,7 +4892,6 @@ L_08A62094: AOT_REGCACHE_SYNC_OUT(); return; L_08A620E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A62190; } @@ -5113,7 +4901,6 @@ L_08A620F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1232))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15948u << 16u); if (branch_taken) { @@ -5125,7 +4912,6 @@ L_08A62108: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[20] << 5u); if (branch_taken) { @@ -5139,7 +4925,6 @@ L_08A62120: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1500))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A62190; } @@ -5154,7 +4939,6 @@ L_08A6213C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A62180; } @@ -5164,7 +4948,6 @@ L_08A62154: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A62180; } @@ -5174,7 +4957,6 @@ L_08A62164: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); aot_gpr_6 = (0u | 18u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A62180; } @@ -5183,7 +4965,6 @@ L_08A62164: L_08A62174: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A62190; } @@ -5328,7 +5109,6 @@ L_08A62204: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2624))); if (branch_taken) { @@ -5339,9 +5119,7 @@ L_08A62204: L_08A62298: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A623A8; } @@ -5518,7 +5296,6 @@ L_08A62398: L_08A623A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(60))); goto L_08A623D4; @@ -5527,9 +5304,7 @@ L_08A623A8: L_08A623BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A624D8; } @@ -5713,7 +5488,6 @@ L_08A624D8: L_08A624E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1544))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A626B4; } @@ -5775,7 +5549,6 @@ L_08A62550: ctx.fpr[26] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / ctx.fpr[26]; aot_gpr_31 = (0x08A62574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 2u, 0x08A5800Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A62574u) goto L_08A62574; AOT_REGCACHE_SYNC_OUT(); return; L_08A62574: @@ -5788,7 +5561,6 @@ L_08A62580: { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 / ctx.fpr[26]; aot_gpr_31 = (0x08A62590u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 3u, 0x08A58030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A62590u) goto L_08A62590; AOT_REGCACHE_SYNC_OUT(); return; L_08A62590: @@ -5855,7 +5627,6 @@ L_08A62600: L_08A6260C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1564))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A626A8; } @@ -5892,7 +5663,6 @@ L_08A62644: L_08A6264C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A6266C; } @@ -5906,7 +5676,6 @@ L_08A62658: L_08A62660: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A62694; } @@ -5931,7 +5700,6 @@ L_08A62680: AOT_REGCACHE_SYNC_OUT(); return; L_08A6268C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A626A0; } @@ -5957,7 +5725,6 @@ L_08A626A8: L_08A626B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1548))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A62734; } @@ -5970,7 +5737,6 @@ L_08A626C0: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = aot_fpr_12 / aot_fpr_14; aot_gpr_31 = (0x08A626DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 4u, 0x08A58054u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A626DCu) goto L_08A626DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A626DC: @@ -6085,7 +5851,6 @@ L_08A627C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A627E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A627F4; } @@ -6102,9 +5867,7 @@ L_08A627F4: aot_gpr_4 = (16256u << 16u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A62824; } @@ -6154,7 +5917,6 @@ L_08A62858: L_08A62860: aot_gpr_4 = (0u | 212u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6288C; } @@ -6207,7 +5969,6 @@ L_08A628CC: L_08A628D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(1077))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A62918; } @@ -6232,7 +5993,6 @@ L_08A628F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A62910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A62924; } @@ -6247,9 +6007,7 @@ L_08A62918: L_08A62924: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16156))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6294C; } @@ -6277,7 +6035,6 @@ L_08A62958: L_08A62960: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_23 + static_cast(1540))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A62A08; } @@ -6359,7 +6116,6 @@ L_08A62A08: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_23 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A62C8C; } @@ -6373,7 +6129,6 @@ L_08A62A18: AOT_REGCACHE_SYNC_OUT(); return; L_08A62A24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A62C8C; } @@ -6404,9 +6159,7 @@ L_08A62A54: ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fpr[20] = ctx.fpr[0] / ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A62C8C; } @@ -6451,7 +6204,6 @@ L_08A62AB4: AOT_REGCACHE_SYNC_OUT(); return; L_08A62AC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A62C8C; } @@ -6462,7 +6214,6 @@ L_08A62AC8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1640), std::bit_cast(aot_fpr_22)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(1648)); if (branch_taken) { @@ -6558,7 +6309,6 @@ L_08A62B98: AOT_REGCACHE_SYNC_OUT(); return; L_08A62BA4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A62BEC; } @@ -6610,9 +6360,7 @@ L_08A62C08: aot_fpr_12 = ctx.fpr[0] + aot_fpr_12; { const float fs = aot_fpr_12; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A62C8C; } @@ -6634,7 +6382,6 @@ L_08A62C30: AOT_REGCACHE_SYNC_OUT(); return; L_08A62C5C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A62C8C; } @@ -6824,7 +6571,6 @@ L_08A62E30: aot_gpr_4 = (aot_gpr_4 & 511u); aot_gpr_5 = (aot_gpr_4 < static_cast(100) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A62EE0; } @@ -6903,7 +6649,6 @@ L_08A62EC0: L_08A62EE0: aot_gpr_5 = (aot_gpr_4 < static_cast(413) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A62F90; } @@ -7081,7 +6826,6 @@ L_08A6307C: AOT_REGCACHE_SYNC_OUT(); return; L_08A63088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A630AC; } @@ -7102,7 +6846,6 @@ L_08A630A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A630AC: aot_gpr_31 = (0x08A630B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0149_entry, 149u, 47u, 0x08A5834Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A630B4u) goto L_08A630B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A630B4: @@ -7119,7 +6862,6 @@ L_08A630B4: } L_08A630CC: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A6318C; } @@ -7127,7 +6869,6 @@ L_08A630CC: } L_08A630D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A63130; } @@ -7135,7 +6876,6 @@ L_08A630D4: } L_08A630DC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6318C; } @@ -7163,7 +6903,6 @@ L_08A630E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A63128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A631A0; } @@ -7199,7 +6938,6 @@ L_08A63140: AOT_REGCACHE_SYNC_OUT(); return; L_08A63184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A631A0; } @@ -7218,7 +6956,6 @@ L_08A631A0: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A63034; } @@ -7264,7 +7001,17 @@ L_08A631D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A63218: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7288,7 +7035,6 @@ L_08A63248: AOT_REGCACHE_SYNC_OUT(); return; L_08A63250: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A63270; } @@ -7296,7 +7042,6 @@ L_08A63250: } L_08A63258: aot_gpr_31 = (0x08A63260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A63260u) goto L_08A63260; AOT_REGCACHE_SYNC_OUT(); return; L_08A63260: @@ -7307,7 +7052,6 @@ L_08A63260: goto L_08A63268; L_08A63268: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A63298; } @@ -7315,7 +7059,6 @@ L_08A63268: } L_08A63270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7329,7 +7072,6 @@ L_08A63278: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A632C0; } @@ -7341,9 +7083,7 @@ L_08A63298: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A632C8; } @@ -7351,7 +7091,6 @@ L_08A63298: } L_08A632B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7359,7 +7098,6 @@ L_08A632B8: } L_08A632C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7483,9 +7221,7 @@ L_08A63380: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6385C; } @@ -7496,9 +7232,7 @@ L_08A6339C: aot_gpr_4 = (17312u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63448; } @@ -7595,7 +7329,6 @@ L_08A633B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A63440: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7606,7 +7339,6 @@ L_08A63448: aot_gpr_4 = (17347u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (16320u << 16u); if (branch_taken) { @@ -7638,7 +7370,6 @@ L_08A63488: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A63508; } @@ -7790,7 +7521,6 @@ L_08A63508: AOT_REGCACHE_SYNC_OUT(); return; L_08A6358C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7801,9 +7531,7 @@ L_08A63594: aot_gpr_4 = (17382u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6365C; } @@ -7817,7 +7545,6 @@ L_08A635B0: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A635F4; } @@ -7832,7 +7559,6 @@ L_08A635D0: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7897,7 +7623,6 @@ L_08A635F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A63654: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7912,7 +7637,6 @@ L_08A6365C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A63694; } @@ -7929,7 +7653,6 @@ L_08A63680: } L_08A6368C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A636A4; } @@ -7937,7 +7660,6 @@ L_08A6368C: } L_08A63694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7945,7 +7667,6 @@ L_08A63694: } L_08A6369C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A636B8; } @@ -7962,7 +7683,6 @@ L_08A636A4: } L_08A636B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A636C8; } @@ -7970,7 +7690,6 @@ L_08A636B0: } L_08A636B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -7978,7 +7697,6 @@ L_08A636B8: } L_08A636C0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A636DC; } @@ -7995,7 +7713,6 @@ L_08A636C8: } L_08A636D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A636EC; } @@ -8003,7 +7720,6 @@ L_08A636D4: } L_08A636DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -8011,7 +7727,6 @@ L_08A636DC: } L_08A636E4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A63734; } @@ -8040,7 +7755,6 @@ L_08A636F8: L_08A63718: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6373C; } @@ -8048,7 +7762,6 @@ L_08A63718: } L_08A63724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A637AC; } @@ -8056,7 +7769,6 @@ L_08A63724: } L_08A6372C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -8064,7 +7776,6 @@ L_08A6372C: } L_08A63734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -8131,7 +7842,6 @@ L_08A6373C: AOT_REGCACHE_SYNC_OUT(); return; L_08A637A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -8145,7 +7855,6 @@ L_08A637AC: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6385C; } @@ -8258,7 +7967,17 @@ L_08A6385C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A63880: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), ctx.gpr[17]); @@ -8289,7 +8008,6 @@ L_08A638B4: L_08A638C0: aot_gpr_4 = (static_cast(ctx.gpr[17]) < 13 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A638E8; } @@ -8305,7 +8023,6 @@ L_08A638CC: } L_08A638D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A63B78; } @@ -8313,7 +8030,6 @@ L_08A638D4: } L_08A638DC: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A638E8; } @@ -8326,7 +8042,6 @@ L_08A638E8: aot_gpr_4 = (ctx.gpr[16] + ctx.gpr[17]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1076))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A639F4; } @@ -8349,7 +8064,6 @@ L_08A6391C: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6394C; } @@ -8367,7 +8081,6 @@ L_08A63930: AOT_REGCACHE_SYNC_OUT(); return; L_08A6394C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A639F4; } @@ -8477,9 +8190,7 @@ L_08A63A08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1232))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63A74; } @@ -8489,9 +8200,7 @@ L_08A63A20: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1236))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63A74; } @@ -8502,7 +8211,6 @@ L_08A63A38: goto L_08A63A3C; L_08A63A3C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A63B78; } @@ -8512,9 +8220,7 @@ L_08A63A44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63A74; } @@ -8524,9 +8230,7 @@ L_08A63A5C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1244))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63B78; } @@ -8549,9 +8253,7 @@ L_08A63A74: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5844))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63B78; } @@ -8561,7 +8263,6 @@ L_08A63AA0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A63AC4; } @@ -8570,9 +8271,7 @@ L_08A63AA0: L_08A63AB0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5840))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63B78; } @@ -8580,7 +8279,6 @@ L_08A63AB0: } L_08A63AC4: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A63B24; } @@ -8603,7 +8301,6 @@ L_08A63AE4: AOT_REGCACHE_SYNC_OUT(); return; L_08A63AF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A63B78; } @@ -8626,7 +8323,6 @@ L_08A63B04: AOT_REGCACHE_SYNC_OUT(); return; L_08A63B1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A63B78; } @@ -8688,7 +8384,17 @@ L_08A63B78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A63B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(300), ctx.gpr[16]); @@ -8792,7 +8498,6 @@ L_08A63C6C: } L_08A63C7C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A63C90; } @@ -8817,7 +8522,6 @@ L_08A63C84: L_08A63C90: aot_gpr_4 = (0u | 10u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A63CA4; } @@ -8825,7 +8529,6 @@ L_08A63C90: } L_08A63C9C: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A63CB0; } @@ -8878,7 +8581,6 @@ L_08A63CD8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A63D44; } @@ -8909,7 +8611,6 @@ L_08A63CE8: } L_08A63D00: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A63D14; } @@ -8984,9 +8685,7 @@ L_08A63D14: L_08A63D44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63D70; } @@ -9123,7 +8822,6 @@ L_08A63D70: AOT_REGCACHE_SYNC_OUT(); return; L_08A63E0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A63EAC; } @@ -9159,7 +8857,6 @@ L_08A63E14: AOT_REGCACHE_SYNC_OUT(); return; L_08A63E4C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A63EA4; } @@ -9194,7 +8891,6 @@ L_08A63E94: } L_08A63E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A63EE0; } @@ -9219,9 +8915,7 @@ L_08A63EAC: L_08A63EB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63EE0; } @@ -9231,9 +8925,7 @@ L_08A63EC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63EF8; } @@ -9243,7 +8935,6 @@ L_08A63EE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A63F00; } @@ -9251,7 +8942,6 @@ L_08A63EE0: } L_08A63EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A63F54; } @@ -9284,7 +8974,6 @@ L_08A63F00: AOT_REGCACHE_SYNC_OUT(); return; L_08A63F38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A63F4C; } @@ -9321,9 +9010,7 @@ L_08A63F54: AOT_REGCACHE_SYNC_OUT(); return; L_08A63F6C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(ctx.fpr[20])) && aot_fpr_22 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63F98; } @@ -9332,9 +9019,7 @@ L_08A63F6C: L_08A63F7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(196))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A63F98; } @@ -9372,7 +9057,17 @@ L_08A63F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A63FD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), ctx.gpr[16]); diff --git a/profiles/vcs/generated/generated_unit_0152.cpp b/profiles/vcs/generated/generated_unit_0152.cpp index 787b124..cf49b8e 100644 --- a/profiles/vcs/generated/generated_unit_0152.cpp +++ b/profiles/vcs/generated/generated_unit_0152.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0152[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, - 5, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 0, - 13, 0, 0, 14, 0, 0, 0, 15, 16, 0, 0, 17, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 22, 0, 23, 0, 0, 24, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 30, 0, 0, 31, 0, 32, 0, 33, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, - 0, 39, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 43, 0, 44, 45, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, - 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 63, - 0, 0, 0, 0, 64, 0, 0, 65, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 0, 68, 0, 0, 69, 0, 70, 0, 0, 0, - 0, 71, 0, 0, 0, 0, 72, 0, 0, 73, 0, 74, 75, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 79, 0, 0, - 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, 0, 87, 0, 0, 88, - 0, 89, 0, 0, 0, 0, 90, 0, 0, 91, 0, 92, 0, 93, 0, 0, 0, 0, 94, 0, 0, 95, 0, 96, 0, 0, 0, 0, 97, 0, 0, 98, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 109, 0, 0, 0, 110, 0, 111, 0, 0, 0, 112, 113, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 115, 0, 116, 0, 117, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 124, 0, 0, 0, 0, 125, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, - 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 137, 0, 0, 138, - 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, - 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, - 151, 0, 0, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 156, 0, 0, 0, 0, 157, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 158, 159, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, - 162, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 171, 0, 0, 172, 0, 0, 173, 0, 174, 175, 0, 0, 0, 176, 177, 0, - 0, 178, 0, 0, 179, 0, 180, 181, 0, 0, 0, 182, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, - 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 0, 189, 0, 0, 190, 0, 191, 192, 0, 0, 0, 193, 194, 0, 0, 195, 0, 0, - 196, 0, 197, 198, 0, 0, 0, 199, 200, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, - 213, 0, 0, 0, 214, 0, 0, 0, 215, 0, 216, 0, 217, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 222, - 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, - 0, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 0, 231, 0, 232, 0, 233, 0, 0, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, 0, 237, 0, - 238, 0, 239, 0, 240, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 245, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 248, 0, 0, 0, 0, 249, 0, 250, 0, 0, 251, 0, 252, 0, 253, - 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 259, 0, 260, 0, 0, 0, 0, - 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 265, 266, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 277, 278, 0, 0, 0, 0, 279, 280, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 0, 283, 284, 0, - 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 290, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 0, 296, 0, 297, 0, 0, 298, - 0, 0, 299, 0, 0, 300, 301, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 307, 0, - 308, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 322, 0, 0, - 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 325, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, - 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 335, 0, 0, 0, 336, 0, 337, 0, - 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 0, - 0, 345, 0, 0, 0, 0, 0, 0, 0, 346, 0, 347, 348, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 350, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 0, 0, 0, 355, 0, 356, 0, 357, 0, 358, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 361, 0, 0, 0, 362, 0, 363, 0, 364, 0, 365, - 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 370, 0, 0, 0, 371, 0, 372, 0, 373, - 0, 374, 0, 0, 375, 376, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 380, 0, 381, 0, 0, - 0, 382, 0, 383, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 0, 387, 0, 0, 0, 0, 388, 0, 0, 389, 390, 0, 391, 0, 0, - 0, 392, 0, 0, 0, 393, 0, 394, 0, 395, 0, 0, 396, 397, 0, 0, 0, 0, 0, 398, 0, 0, 0, 399, 0, 400, 0, 0, 0, 401, 402, 0, - 0, 403, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, - 0, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, - 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, - 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, 0, 422, 423, 0, 424, 0, 425, 0, 0, 0, 0, 426, 0, 427, 0, 0, 0, 428, 0, 0, 0, 429, - 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, - 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 440, 0, 441, 0, 442, 0, 443, 0, 444, 0, 445, 0, - 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 448, 0, 0, 449, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 0, 0, 0, 455, 0, - 456, 0, 0, 457, 0, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, - 466, 0, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 0, 0, 472, 0, 473, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, 0, - 477, 0, 478, 0, 0, 479, 0, 480, 0, 481, 0, 482, 0, 0, 483, 0, 484, 485, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, - 488, 0, 489, 0, 0, 0, 490, 0, 0, 0, 491, 492, 0, 493, 0, 494, 0, 0, 0, 0, 0, 495, 496, 497, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 498, 0, 499, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, - 504, 0, 0, 0, 505, 0, 0, 0, 506, 507, 0, 508, 0, 509, 0, 0, 0, 0, 0, 510, 511, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 513, 0, 514, 0, 0, 515, 0, 0, 516, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 520, 521, 0, 522, 0, 0, 523, 0, 524, - 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 527, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 530, 0, - 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, - 545, 0, 546, 0, 0, 0, 547, 548, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 562, 0, 563, 0, 564, 0, 565, 0, 0, - 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 0, 574, 0, 575, 0, 0, 576, 0, 577, 0, 0, 0, 0, - 0, 0, 578, 0, 579, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, 0, 582, 0, 583, 0, 584, 0, 0, 585, 0, 0, 0, 0, 586, 0, 0, 0, - 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 589, 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 594, 595, 0, 596, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, - 603, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 605, 606, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 608, 609, 0, 0, 610, 0, 0, - 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 615, - 0, 0, 0, 0, 0, 616, 617, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 625, 0, 0, 0, 0, 626, 0, 0, - 0, 0, 0, 627, 628, 0, 0, 629, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 631, 632, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, - 634, 635, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 641, 0, 0, 0, 0, 642, - 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 646, 0, 647, 648, 0, 649, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 653, 0, 0, - 0, 0, 0, 0, 0, 0, 654, 0, 655, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 660, 0, 661, 0, 662, 0, 0, 0, 663, 0, 664, 665, 0, 666, 0, - 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 668, 0, 0, 0, 669, 0, 670, 0, 671, 0, 672, 0, 673, 0, 0, 674, 0, 0, 675, 0, 676, 0, - 677, 0, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 682, 0, 0, 0, 683, 0, 684, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 688, 0, 0, - 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, - 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 697, 0, 0, 0, 0, 0, 698, 0, 699, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 702, 0, 0, 703, - 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, - 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, - 725, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, - 729, 0, 730, 0, 0, 731, 0, 732, 0, 0, 733, 0, 734, 0, 0, 735, 0, 736, 737, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 741, 0, 0, 742, 0, 743, 0, 0, 744, 0, 745, 0, 0, 746, 0, 747, 748, 0, 0, 0, 0, 749, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 753, 0, 754, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 758, 0, 0, - 0, 759, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 763, 0, 764, 0, 765, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0152[64] = { + 0x2444108904800801ull, 0x08005200CB244989ull, 0x810D210A20282552ull, 0xA095482081409044ull, + 0x29021A4214842090ull, 0x90A42A4290A90841ull, 0xC51803002C00B002ull, 0x0842024085500000ull, + 0x9480308421088061ull, 0x4082050409084210ull, 0x80000B0021810221ull, 0x6349440800904A01ull, + 0x26349080820218D2ull, 0x010000440210218Dull, 0x8905151111082900ull, 0x4491502482021110ull, + 0xA9425000A0080855ull, 0x40C421040A910408ull, 0x0080000420809204ull, 0x8000001062230C40ull, + 0x9482120209200400ull, 0x0200411152024264ull, 0x302204400000A480ull, 0x0042204080808920ull, + 0x2040A40951801000ull, 0xAA30004A00101A02ull, 0xA8C0080CAA300200ull, 0x2C85050A29202032ull, + 0x10208022628832A2ull, 0x0810220809002A08ull, 0x8084210A88A15A44ull, 0x42AA942055510088ull, + 0x20868AA922042AA9ull, 0x00E0AC4501234AA5ull, 0x00382B1140040168ull, 0x00000080A5A8124Aull, + 0x4200001400000400ull, 0x0000004000090480ull, 0x00A1008004000000ull, 0x1000040000000044ull, + 0x00000082040A08C5ull, 0x0004080010002000ull, 0x404A08042AD00004ull, 0x109512140A511000ull, + 0x004242002D448502ull, 0x2608608104004000ull, 0x8104020000000004ull, 0x0000000000420860ull, + 0x0418209821820410ull, 0x8420000000281043ull, 0x248000800B444010ull, 0x5A2A200000081540ull, + 0x1448240952554440ull, 0x8001084221004800ull, 0x90402A0800108080ull, 0x0008100280000010ull, + 0x0004040200000021ull, 0x0004400100100050ull, 0x0100102000040004ull, 0x008694A510008101ull, + 0x040002008694A510ull, 0x00000000A8000000ull, 0x0000000010000000ull, 0x1501204220808000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0152[64] = { + 1u, 13u, 30u, 48u, 64u, 80u, 99u, 114u, 124u, 139u, 151u, 162u, 178u, 196u, 207u, 223u, + 238u, 254u, 268u, 276u, 287u, 299u, 313u, 323u, 333u, 345u, 359u, 374u, 392u, 408u, 419u, 437u, + 456u, 477u, 498u, 513u, 526u, 531u, 536u, 541u, 545u, 555u, 559u, 572u, 587u, 601u, 611u, 616u, + 621u, 634u, 643u, 654u, 667u, 685u, 694u, 704u, 709u, 714u, 720u, 725u, 739u, 752u, 755u, 756u, }; void recomp_unit_0152_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0152_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A64000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0152[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0152[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0152[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A64000; @@ -967,7 +874,6 @@ L_08A6402C: L_08A6405C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A64080; } @@ -988,7 +894,6 @@ L_08A64068: L_08A64080: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6409C; } @@ -998,7 +903,6 @@ L_08A6408C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A640B0; } @@ -1087,7 +991,6 @@ L_08A64138: L_08A64148: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A64164; } @@ -1104,7 +1007,6 @@ L_08A64160: goto L_08A64164; L_08A64164: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A6417C; } @@ -1183,7 +1085,6 @@ L_08A641B8: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(64))); if (branch_taken) { @@ -1221,7 +1122,6 @@ L_08A64218: AOT_REGCACHE_SYNC_OUT(); return; L_08A64220: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A6424C; } @@ -1244,7 +1144,6 @@ L_08A64234: AOT_REGCACHE_SYNC_OUT(); return; L_08A6424C: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A64308; } @@ -1256,9 +1155,7 @@ L_08A64254: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64308; } @@ -1268,7 +1165,6 @@ L_08A64274: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A64308; } @@ -1276,7 +1172,6 @@ L_08A64274: } L_08A64284: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A642B4; } @@ -1285,9 +1180,7 @@ L_08A64284: L_08A6428C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645FC; } @@ -1296,9 +1189,7 @@ L_08A6428C: L_08A642A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645FC; } @@ -1313,7 +1204,6 @@ L_08A642B4: goto L_08A642C0; L_08A642C0: aot_gpr_31 = (0x08A642C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A642C8u) goto L_08A642C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A642C8: @@ -1348,9 +1238,7 @@ L_08A642FC: } L_08A64308: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645AC; } @@ -1378,9 +1266,7 @@ L_08A6433C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(88))); { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A643FC; } @@ -1399,9 +1285,7 @@ L_08A64360: aot_gpr_4 = (48896u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A643FC; } @@ -1413,7 +1297,6 @@ L_08A6437C: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(100) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A643FC; } @@ -1449,7 +1332,6 @@ L_08A643C0: AOT_REGCACHE_SYNC_OUT(); return; L_08A643C8: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A645A4; } @@ -1472,7 +1354,6 @@ L_08A643DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A643F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A645A4; } @@ -1481,9 +1362,7 @@ L_08A643F4: L_08A643FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A644EC; } @@ -1531,7 +1410,6 @@ L_08A6445C: } L_08A64468: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A64498; } @@ -1540,9 +1418,7 @@ L_08A64468: L_08A64470: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645A4; } @@ -1551,9 +1427,7 @@ L_08A64470: L_08A64484: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645A4; } @@ -1568,7 +1442,6 @@ L_08A64498: goto L_08A644A4; L_08A644A4: aot_gpr_31 = (0x08A644ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A644ACu) goto L_08A644AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A644AC: @@ -1603,7 +1476,6 @@ L_08A644E0: } L_08A644EC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A64554; } @@ -1655,7 +1527,6 @@ L_08A6454C: goto L_08A64554; L_08A64554: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A6457C; } @@ -1664,9 +1535,7 @@ L_08A64554: L_08A6455C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6457C; } @@ -1679,7 +1548,6 @@ L_08A64570: goto L_08A6457C; L_08A6457C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A645A4; } @@ -1688,9 +1556,7 @@ L_08A6457C: L_08A64584: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645A4; } @@ -1703,7 +1569,6 @@ L_08A64598: goto L_08A645A4; L_08A645A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A645FC; } @@ -1711,7 +1576,6 @@ L_08A645A4: } L_08A645AC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A645D4; } @@ -1720,9 +1584,7 @@ L_08A645AC: L_08A645B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645D4; } @@ -1735,7 +1597,6 @@ L_08A645C8: goto L_08A645D4; L_08A645D4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A645FC; } @@ -1744,9 +1605,7 @@ L_08A645D4: L_08A645DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A645FC; } @@ -1774,7 +1633,6 @@ L_08A64604: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[26] = ctx.fpr[26] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_08A64630; @@ -1800,7 +1658,6 @@ L_08A6463C: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08A64668; @@ -1826,7 +1683,6 @@ L_08A64674: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08A646A0; @@ -1843,9 +1699,7 @@ L_08A646A4: aot_gpr_4 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A646D0; } @@ -1856,9 +1710,7 @@ L_08A646CC: goto L_08A646D0; L_08A646D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A646E8; } @@ -1874,9 +1726,7 @@ L_08A646E0: } L_08A646E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A646FC; } @@ -1919,7 +1769,6 @@ L_08A64750: AOT_REGCACHE_SYNC_OUT(); return; L_08A64758: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6477C; } @@ -1972,7 +1821,6 @@ L_08A647A4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1248))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(1280), static_cast(aot_gpr_4)); if (branch_taken) { @@ -1983,7 +1831,6 @@ L_08A647A4: L_08A647C4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[20] + static_cast(16)); if (branch_taken) { @@ -1994,9 +1841,7 @@ L_08A647C4: L_08A647D8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6484C; } @@ -2005,7 +1850,6 @@ L_08A647D8: L_08A647EC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(40))); goto L_08A64818; @@ -2014,9 +1858,7 @@ L_08A647EC: L_08A64800: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6484C; } @@ -2032,9 +1874,7 @@ L_08A64818: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2053,9 +1893,7 @@ L_08A6483C: L_08A6484C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1256))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2064,7 +1902,6 @@ L_08A6484C: L_08A64860: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[20] + static_cast(16)); if (branch_taken) { @@ -2075,9 +1912,7 @@ L_08A64860: L_08A64874: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2086,7 +1921,6 @@ L_08A64874: L_08A64888: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1248))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); goto L_08A648B4; @@ -2095,9 +1929,7 @@ L_08A64888: L_08A6489C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2114,9 +1946,7 @@ L_08A648B4: ctx.fpr[16] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A648E8; } @@ -2129,7 +1959,6 @@ L_08A648DC: goto L_08A648E8; L_08A648E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6496C; } @@ -2138,7 +1967,6 @@ L_08A648E8: L_08A648F0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6496C; } @@ -2147,9 +1975,7 @@ L_08A648F0: L_08A648FC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1552))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2158,7 +1984,6 @@ L_08A648FC: L_08A64910: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1556))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_5 + static_cast(16)); if (branch_taken) { @@ -2169,9 +1994,7 @@ L_08A64910: L_08A64924: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2180,9 +2003,7 @@ L_08A64924: L_08A64938: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1560))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64960; } @@ -2191,9 +2012,7 @@ L_08A64938: L_08A6494C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1564))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6496C; } @@ -2209,9 +2028,7 @@ L_08A6496C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A649A8; } @@ -2221,7 +2038,6 @@ L_08A64988: aot_gpr_4 = (16000u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08A649A0; @@ -2240,7 +2056,6 @@ L_08A649A8: aot_gpr_4 = (16128u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15395u << 16u); if (branch_taken) { @@ -2252,9 +2067,7 @@ L_08A649C4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64A00; } @@ -2265,7 +2078,6 @@ L_08A649DC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08A649F8; @@ -2282,9 +2094,7 @@ L_08A649F8: L_08A64A00: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64A60; } @@ -2292,9 +2102,7 @@ L_08A64A00: } L_08A64A14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64A60; } @@ -2305,9 +2113,7 @@ L_08A64A24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64A60; } @@ -2318,7 +2124,6 @@ L_08A64A40: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08A64A5C; @@ -2330,9 +2135,7 @@ L_08A64A5C: L_08A64A60: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64AA4; } @@ -2347,7 +2150,6 @@ L_08A64A74: ctx.fpr[22] = aot_fpr_12 / aot_fpr_14; ctx.fpr[22] = ctx.fpr[28] - ctx.fpr[22]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08A64AA0; @@ -2358,7 +2160,6 @@ L_08A64AA0: goto L_08A64AA4; L_08A64AA4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A64AFC; } @@ -2400,9 +2201,7 @@ L_08A64B00: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64B2C; } @@ -2410,7 +2209,6 @@ L_08A64B00: } L_08A64B24: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A64B38; } @@ -2429,7 +2227,6 @@ L_08A64B38: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(24))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(24))); goto L_08A64B5C; @@ -2454,9 +2251,7 @@ L_08A64B5C: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64BA8; } @@ -2483,7 +2278,6 @@ L_08A64BA8: goto L_08A64BB8; L_08A64BB8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A64CB0; } @@ -2492,7 +2286,6 @@ L_08A64BB8: L_08A64BC0: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A64BF8; } @@ -2507,7 +2300,6 @@ L_08A64BCC: goto L_08A64BD8; L_08A64BD8: aot_gpr_31 = (0x08A64BE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A64BE0u) goto L_08A64BE0; AOT_REGCACHE_SYNC_OUT(); return; L_08A64BE0: @@ -2526,7 +2318,6 @@ L_08A64BF4: L_08A64BF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A64C30; } @@ -2541,7 +2332,6 @@ L_08A64C04: goto L_08A64C10; L_08A64C10: aot_gpr_31 = (0x08A64C18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A64C18u) goto L_08A64C18; AOT_REGCACHE_SYNC_OUT(); return; L_08A64C18: @@ -2560,7 +2350,6 @@ L_08A64C2C: L_08A64C30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); if (branch_taken) { @@ -2627,7 +2416,6 @@ L_08A64CBC: goto L_08A64CC8; L_08A64CC8: aot_gpr_31 = (0x08A64CD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A64CD0u) goto L_08A64CD0; AOT_REGCACHE_SYNC_OUT(); return; L_08A64CD0: @@ -2646,7 +2434,6 @@ L_08A64CE4: L_08A64CE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A64D20; } @@ -2661,7 +2448,6 @@ L_08A64CF4: goto L_08A64D00; L_08A64D00: aot_gpr_31 = (0x08A64D08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A64D08u) goto L_08A64D08; AOT_REGCACHE_SYNC_OUT(); return; L_08A64D08: @@ -2680,7 +2466,6 @@ L_08A64D1C: L_08A64D20: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_4 | 0u); if (branch_taken) { @@ -2752,7 +2537,17 @@ L_08A64D98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A64DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_20)); @@ -2791,7 +2586,6 @@ L_08A64E34: ctx.fpr[24] = ctx.fpr[24] / aot_fpr_12; aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A64E60; } @@ -2812,7 +2606,6 @@ L_08A64E60: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A64E80; } @@ -2828,7 +2621,6 @@ L_08A64E80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A64EA8; } @@ -2846,7 +2638,6 @@ L_08A64E90: } L_08A64EA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A64EEC; } @@ -2854,7 +2645,6 @@ L_08A64EA0: } L_08A64EA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A655B8; } @@ -2864,7 +2654,6 @@ L_08A64EB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A64EEC; } @@ -2872,16 +2661,13 @@ L_08A64EB0: } L_08A64EC0: aot_gpr_31 = (0x08A64EC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A64EC8u) goto L_08A64EC8; AOT_REGCACHE_SYNC_OUT(); return; L_08A64EC8: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64EEC; } @@ -2905,9 +2691,7 @@ L_08A64EEC: L_08A64EFC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A64F20; } @@ -2921,9 +2705,7 @@ L_08A64F10: goto L_08A64F20; L_08A64F20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A651DC; } @@ -2934,7 +2716,6 @@ L_08A64F30: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A651DC; } @@ -2946,9 +2727,7 @@ L_08A64F44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(200))); { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A651DC; } @@ -2958,9 +2737,7 @@ L_08A64F64: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A650C4; } @@ -2969,7 +2746,6 @@ L_08A64F64: L_08A64F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A64FE8; } @@ -2978,7 +2754,6 @@ L_08A64F7C: L_08A64F88: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(336))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A64FE8; } @@ -2991,7 +2766,6 @@ L_08A64F94: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A64FE8; } @@ -2999,12 +2773,10 @@ L_08A64F94: } L_08A64FB0: aot_gpr_31 = (0x08A64FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A64FB8u) goto L_08A64FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08A64FB8: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08A64FD0; } @@ -3014,7 +2786,6 @@ L_08A64FC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A64FE8; } @@ -3023,7 +2794,6 @@ L_08A64FC0: L_08A64FD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A64FE8; } @@ -3039,7 +2809,6 @@ L_08A64FE8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A650C4; } @@ -3047,12 +2816,10 @@ L_08A64FE8: } L_08A64FF8: aot_gpr_31 = (0x08A65000u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A65000u) goto L_08A65000; AOT_REGCACHE_SYNC_OUT(); return; L_08A65000: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A650C4; } @@ -3065,7 +2832,6 @@ L_08A65008: AOT_REGCACHE_SYNC_OUT(); return; L_08A65010: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A650C4; } @@ -3076,7 +2842,6 @@ L_08A65018: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A650C4; } @@ -3098,7 +2863,6 @@ L_08A6502C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[26] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08A6504Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6504Cu) goto L_08A6504C; AOT_REGCACHE_SYNC_OUT(); return; L_08A6504C: @@ -3117,9 +2881,7 @@ L_08A6504C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A650C4; } @@ -3127,7 +2889,6 @@ L_08A6504C: } L_08A65074: aot_gpr_31 = (0x08A6507Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6507Cu) goto L_08A6507C; AOT_REGCACHE_SYNC_OUT(); return; L_08A6507C: @@ -3149,9 +2910,7 @@ L_08A6507C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A650C4; } @@ -3159,7 +2918,6 @@ L_08A6507C: } L_08A650B0: aot_gpr_31 = (0x08A650B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A650B8u) goto L_08A650B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A650B8: @@ -3173,7 +2931,6 @@ L_08A650C4: aot_gpr_5 = (4096u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A650F4; } @@ -3195,7 +2952,6 @@ L_08A650E0: } L_08A650EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A65140; } @@ -3203,7 +2959,6 @@ L_08A650EC: } L_08A650F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A655B8; } @@ -3311,9 +3066,7 @@ L_08A651A0: L_08A651B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A651DC; } @@ -3321,9 +3074,7 @@ L_08A651B4: } L_08A651C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A651DC; } @@ -3337,9 +3088,7 @@ L_08A651DC: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6523C; } @@ -3349,7 +3098,6 @@ L_08A651F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6523C; } @@ -3371,7 +3119,6 @@ L_08A65208: L_08A65224: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1488))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6523C; } @@ -3412,9 +3159,7 @@ L_08A6525C: L_08A65274: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A655B8; } @@ -3455,7 +3200,6 @@ L_08A65288: aot_gpr_6 = (aot_gpr_6 | 52429u); ctx.fpr[22] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_16 + static_cast(32)); if (branch_taken) { @@ -3492,7 +3236,6 @@ L_08A652DC: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08A65318; @@ -3500,7 +3243,6 @@ L_08A652DC: goto L_08A65318; L_08A65318: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (16608u << 16u); if (branch_taken) { @@ -3549,7 +3291,6 @@ L_08A65364: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); ctx.gpr[8] = (0u | 231u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A65390; } @@ -3639,7 +3380,6 @@ L_08A65390: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08A653FC; @@ -3670,7 +3410,6 @@ L_08A653FC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08A65428; @@ -3685,9 +3424,7 @@ L_08A65428: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A655B8; } @@ -3712,7 +3449,6 @@ L_08A6546C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -3734,7 +3470,6 @@ L_08A65484: L_08A654A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A654DC; } @@ -3745,7 +3480,6 @@ L_08A654B0: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A654DC; } @@ -3768,7 +3502,6 @@ L_08A654DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A654E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A655B8; } @@ -3777,7 +3510,6 @@ L_08A654E8: L_08A654F0: aot_gpr_4 = (0u + static_cast(-10)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A65518; } @@ -3807,9 +3539,7 @@ L_08A65518: L_08A65524: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A65564; } @@ -3855,7 +3585,6 @@ L_08A65580: aot_gpr_4 = (ctx.gpr[2] + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A655B8; } @@ -3895,7 +3624,17 @@ L_08A655B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A655E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -3927,7 +3666,6 @@ L_08A65628: AOT_REGCACHE_SYNC_OUT(); return; L_08A65634: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6592C; } @@ -3966,7 +3704,6 @@ L_08A65698: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 4096u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A656F0; } @@ -3979,7 +3716,6 @@ L_08A656A8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A656F0; } @@ -3989,7 +3725,6 @@ L_08A656C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_6 = (0u + static_cast(-950)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A656F4; } @@ -4002,7 +3737,6 @@ L_08A656D4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A656F4; } @@ -4044,7 +3778,6 @@ L_08A6572C: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65870; } @@ -4056,7 +3789,6 @@ L_08A6573C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5888))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[20] << 2u); if (branch_taken) { @@ -4070,9 +3802,7 @@ L_08A6575C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1216))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A65860; } @@ -4187,7 +3917,6 @@ L_08A65830: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65860; } @@ -4200,7 +3929,6 @@ L_08A65860: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6573C; } @@ -4208,7 +3936,6 @@ L_08A65860: } L_08A65870: { const bool branch_taken = static_cast(ctx.gpr[19]) > 0; - // nop if (branch_taken) { goto L_08A65880; } @@ -4216,7 +3943,6 @@ L_08A65870: } L_08A65878: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08A65924; } @@ -4234,7 +3960,6 @@ L_08A6588C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A658B4; } @@ -4247,7 +3972,6 @@ L_08A658A8: goto L_08A66AD8; L_08A658B4: { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_08A65924; } @@ -4260,7 +3984,6 @@ L_08A658BC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A65904; } @@ -4273,7 +3996,6 @@ L_08A658D8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65924; } @@ -4283,7 +4005,6 @@ L_08A658F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65924; } @@ -4325,7 +4046,17 @@ L_08A65930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65950: aot_gpr_4 = (16255u << 16u); aot_gpr_4 = (aot_gpr_4 | 57147u); @@ -4343,14 +4074,34 @@ L_08A65950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65984: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5752))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6598C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-5752), aot_gpr_4); jump_target = aot_gpr_31; @@ -4358,7 +4109,17 @@ L_08A6598C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65998: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -4393,7 +4154,6 @@ L_08A659D4: AOT_REGCACHE_SYNC_OUT(); return; L_08A659E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A659F4; } @@ -4401,7 +4161,6 @@ L_08A659E4: } L_08A659EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A659FC; } @@ -4409,7 +4168,6 @@ L_08A659EC: } L_08A659F4: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A659D4; } @@ -4432,7 +4190,17 @@ L_08A659FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -4456,7 +4224,6 @@ L_08A65A54: ctx.gpr[17] = (ctx.gpr[19] - ctx.gpr[18]); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65A7C; } @@ -4469,7 +4236,6 @@ L_08A65A64: AOT_REGCACHE_SYNC_OUT(); return; L_08A65A6C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A65A7C; } @@ -4486,7 +4252,6 @@ L_08A65A74: L_08A65A7C: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A65A54; } @@ -4510,7 +4275,17 @@ L_08A65A8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -4534,7 +4309,6 @@ L_08A65ADC: ctx.gpr[17] = (ctx.gpr[19] - ctx.gpr[18]); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65B04; } @@ -4542,12 +4316,10 @@ L_08A65ADC: } L_08A65AEC: aot_gpr_31 = (0x08A65AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 79u, 0x08A8C7F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A65AF4u) goto L_08A65AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08A65AF4: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08A65B04; } @@ -4564,7 +4336,6 @@ L_08A65AFC: L_08A65B04: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A65ADC; } @@ -4588,7 +4359,17 @@ L_08A65B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65B34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4611,7 +4392,6 @@ L_08A65B54: L_08A65B60: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A65BEC; } @@ -4626,7 +4406,6 @@ L_08A65B74: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A65BEC; } @@ -4634,7 +4413,6 @@ L_08A65B74: } L_08A65B84: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A65BA0; } @@ -4702,7 +4480,6 @@ L_08A65BF4: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5760))); ctx.gpr[17] = (ctx.gpr[28] + static_cast(-5760)); { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A65C30; } @@ -4716,7 +4493,6 @@ L_08A65C04: goto L_08A65A24; L_08A65C14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A65C24; } @@ -4724,7 +4500,6 @@ L_08A65C14: } L_08A65C1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A65C34; } @@ -4733,7 +4508,6 @@ L_08A65C1C: L_08A65C24: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A65C04; } @@ -4755,16 +4529,24 @@ L_08A65C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65C4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A65C5Cu); - // nop goto L_08A65B34; L_08A65C5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A65C74; } @@ -4790,7 +4572,17 @@ L_08A65C78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65C84: aot_gpr_4 = (ctx.gpr[28] + static_cast(-5760)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-5756), aot_gpr_4); @@ -4799,7 +4591,17 @@ L_08A65C84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65C94: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4853,11 +4655,20 @@ L_08A65C94: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65CBC: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4883,11 +4694,20 @@ L_08A65CBC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65CD4: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -4906,11 +4726,20 @@ L_08A65CD4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65CF0: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -4929,18 +4758,25 @@ L_08A65CF0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65D0C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A65D2C; } @@ -4956,11 +4792,20 @@ L_08A65D24: } L_08A65D2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65D34: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -4972,19 +4817,37 @@ L_08A65D34: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65D60: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65D6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -4997,7 +4860,17 @@ L_08A65D6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65D8C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5012,11 +4885,20 @@ L_08A65D8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65DA4: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -5036,7 +4918,17 @@ L_08A65DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65DB4: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -5059,7 +4951,17 @@ L_08A65DB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65DD0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (0u + static_cast(-2)); @@ -5071,7 +4973,17 @@ L_08A65DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65DEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5104,7 +5016,6 @@ L_08A65E18: goto L_08A65E24; L_08A65E24: aot_gpr_31 = (0x08A65E2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A65E2Cu) goto L_08A65E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08A65E2C: @@ -5112,7 +5023,6 @@ L_08A65E2C: goto L_08A65E30; L_08A65E30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65E40; } @@ -5135,14 +5045,34 @@ L_08A65E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65E54: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65E5C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -5161,18 +5091,37 @@ L_08A65E6C: goto L_08A65E7C; L_08A65E7C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65E84: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65E8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -5182,7 +5131,17 @@ L_08A65E8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65EA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -5192,7 +5151,17 @@ L_08A65EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65EB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -5202,7 +5171,17 @@ L_08A65EB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65EC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -5212,7 +5191,17 @@ L_08A65EC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65EDC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[7] = (0u + static_cast(-497)); @@ -5225,7 +5214,17 @@ L_08A65EDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65EFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 496u); @@ -5234,7 +5233,17 @@ L_08A65EFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 512u); @@ -5243,7 +5252,17 @@ L_08A65F0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F1C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -5257,7 +5276,17 @@ L_08A65F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 4096u); @@ -5266,42 +5295,102 @@ L_08A65F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F50: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F58: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(28))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F60: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(29))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F68: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(30))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F70: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(31))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A65F78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5332,7 +5421,6 @@ L_08A65FA8: L_08A65FB0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A65FC4; } @@ -5344,7 +5432,6 @@ L_08A65FBC: goto L_08A65FC4; L_08A65FC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A65FD4; } @@ -5356,7 +5443,6 @@ L_08A65FCC: goto L_08A65FD4; L_08A65FD4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A65FE4; } @@ -5385,7 +5471,6 @@ L_08A65FF8: L_08A66000: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A66014; } @@ -5397,7 +5482,6 @@ L_08A6600C: goto L_08A66014; L_08A66014: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A66024; } @@ -5414,7 +5498,6 @@ L_08A66024: AOT_REGCACHE_SYNC_OUT(); return; L_08A6602C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A65F94; } @@ -5432,7 +5515,17 @@ L_08A66034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66048: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5449,7 +5542,6 @@ L_08A66064: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A66094; } @@ -5478,7 +5570,6 @@ L_08A6608C: } L_08A66094: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A660C8; } @@ -5486,7 +5577,6 @@ L_08A66094: } L_08A6609C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A660C8; } @@ -5525,7 +5615,17 @@ L_08A660C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A660DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5554,7 +5654,6 @@ L_08A66100: L_08A66108: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A6611C; } @@ -5566,7 +5665,6 @@ L_08A66114: goto L_08A6611C; L_08A6611C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6612C; } @@ -5579,7 +5677,6 @@ L_08A66124: L_08A6612C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A66140; } @@ -5587,7 +5684,6 @@ L_08A6612C: } L_08A66138: aot_gpr_31 = (0x08A66140u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 595u, 0x08807CB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A66140u) goto L_08A66140; AOT_REGCACHE_SYNC_OUT(); return; L_08A66140: @@ -5601,7 +5697,17 @@ L_08A66144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66154: ctx.gpr[2] = (2237u << 16u); jump_target = aot_gpr_31; @@ -5609,7 +5715,17 @@ L_08A66154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66160: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -5618,7 +5734,6 @@ L_08A66160: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A661B4; } @@ -5689,7 +5804,6 @@ L_08A661DC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A66214; } @@ -5712,7 +5826,17 @@ L_08A66218: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66220: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5823,7 +5947,6 @@ L_08A66304: L_08A6630C: ctx.gpr[19] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A6634C; } @@ -5838,7 +5961,6 @@ L_08A66318: L_08A66324: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(104), 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A6634C; } @@ -5880,7 +6002,6 @@ L_08A66360: L_08A66368: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6637C; } @@ -5906,7 +6027,17 @@ L_08A6637C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6639C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -6018,14 +6149,34 @@ L_08A66428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66488: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66490: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6049,7 +6200,6 @@ L_08A664E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A66668; } @@ -6072,7 +6222,6 @@ L_08A664F8: L_08A6651C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A6654C; } @@ -6092,7 +6241,6 @@ L_08A66528: L_08A66540: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A66668; } @@ -6205,7 +6353,17 @@ L_08A66668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6669C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; @@ -6229,7 +6387,17 @@ L_08A6669C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A666C0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6246,18 +6414,37 @@ L_08A666C0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A666D4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A666DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -6316,7 +6503,6 @@ L_08A66718: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A66800; } @@ -6340,7 +6526,6 @@ L_08A667A8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A66808; } @@ -6358,7 +6543,6 @@ L_08A667F0: } L_08A66800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A66A74; } @@ -6368,7 +6552,6 @@ L_08A66808: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(304)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6681C; } @@ -6389,7 +6572,6 @@ L_08A6682C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A66A5C; } @@ -6397,7 +6579,6 @@ L_08A6682C: } L_08A66844: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A66A5C; } @@ -6410,7 +6591,6 @@ L_08A6684C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6689C; } @@ -6423,7 +6603,6 @@ L_08A66868: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A66A5C; } @@ -6435,7 +6614,6 @@ L_08A66884: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A66A5C; } @@ -6561,7 +6739,6 @@ L_08A6689C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A66A58; } @@ -6588,9 +6765,7 @@ L_08A66934: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A66A50; } @@ -6617,9 +6792,7 @@ L_08A66970: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A66A50; } @@ -6632,7 +6805,6 @@ L_08A669AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(309))); aot_gpr_4 = (static_cast(aot_gpr_4) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A66A5C; } @@ -6705,7 +6877,6 @@ L_08A66A08: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A66A74; } @@ -6746,7 +6917,17 @@ L_08A66A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66A88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6775,7 +6956,6 @@ L_08A66AAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A66AC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A66ACC; } @@ -6788,7 +6968,17 @@ L_08A66ACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66AD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6796,7 +6986,6 @@ L_08A66AD8: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A66AF8u); - // nop goto L_08A66A88; L_08A66AF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(72))); @@ -6812,7 +7001,6 @@ L_08A66AF8: aot_gpr_5 = (aot_gpr_4 & 14u); aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A66B6C; } @@ -6822,7 +7010,6 @@ L_08A66B30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 14u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A66B6C; } @@ -6832,7 +7019,6 @@ L_08A66B40: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(558))); aot_gpr_4 = (0u | 65535u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A66B58; } @@ -6845,7 +7031,6 @@ L_08A66B50: L_08A66B58: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(558))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A66B6C; } @@ -6862,7 +7047,6 @@ L_08A66B6C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A66B90; } @@ -6870,7 +7054,6 @@ L_08A66B6C: } L_08A66B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A66BF0; } @@ -6890,7 +7073,6 @@ L_08A66B90: L_08A66BA4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(240))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_16; - // nop if (branch_taken) { goto L_08A66BC8; } @@ -6908,7 +7090,6 @@ L_08A66BB0: } L_08A66BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A66BD0; } @@ -6916,7 +7097,6 @@ L_08A66BC0: } L_08A66BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A66BF0; } @@ -6925,7 +7105,6 @@ L_08A66BC8: L_08A66BD0: aot_gpr_4 = (static_cast(aot_gpr_5) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A66BF0; } @@ -6950,7 +7129,17 @@ L_08A66BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66C04: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[7] = (1u << 16u); @@ -6958,7 +7147,6 @@ L_08A66C04: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A66C28; } @@ -6977,7 +7165,6 @@ L_08A66C28: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(310))); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A66C68; } @@ -6986,7 +7173,6 @@ L_08A66C28: L_08A66C3C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(240))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A66C60; } @@ -7004,7 +7190,6 @@ L_08A66C48: } L_08A66C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A66C68; } @@ -7023,11 +7208,20 @@ L_08A66C68: goto L_08A66C6C; L_08A66C6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66C74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7037,7 +7231,6 @@ L_08A66C74: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(268))); aot_gpr_16 = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_6 | 0u); if (branch_taken) { @@ -7081,7 +7274,17 @@ L_08A66CC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7157,7 +7360,6 @@ L_08A66D38: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -7169,7 +7371,6 @@ L_08A66D68: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08A66D80; @@ -7180,7 +7381,6 @@ L_08A66D80: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), std::bit_cast(aot_fpr_14)); goto L_08A66DB8; @@ -7190,7 +7390,6 @@ L_08A66D9C: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08A66DB4; @@ -7202,7 +7401,6 @@ L_08A66DB4: L_08A66DB8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -7214,7 +7412,6 @@ L_08A66DCC: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_08A66DE4; @@ -7240,7 +7437,17 @@ L_08A66DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66E08: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(176), aot_gpr_16); @@ -7372,7 +7579,6 @@ L_08A66EA4: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7384,7 +7590,6 @@ L_08A66EC8: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); goto L_08A66EE0; @@ -7395,7 +7600,6 @@ L_08A66EE0: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(116), std::bit_cast(aot_fpr_14)); goto L_08A66F18; @@ -7405,7 +7609,6 @@ L_08A66EFC: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); goto L_08A66F14; @@ -7417,9 +7620,7 @@ L_08A66F14: L_08A66F18: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A66F44; } @@ -7429,7 +7630,6 @@ L_08A66F2C: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); goto L_08A66F44; @@ -7444,7 +7644,17 @@ L_08A66F44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A66F58: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_31}; @@ -7571,7 +7781,6 @@ L_08A66F58: aot_fpr_20 = std::bit_cast(aot_gpr_5); aot_gpr_5 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -7583,7 +7792,6 @@ L_08A67010: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08A67028; @@ -7594,7 +7802,6 @@ L_08A67028: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), std::bit_cast(aot_fpr_14)); goto L_08A67060; @@ -7604,7 +7811,6 @@ L_08A67044: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); goto L_08A6705C; @@ -7616,7 +7822,6 @@ L_08A6705C: L_08A67060: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -7628,7 +7833,6 @@ L_08A67074: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_08A6708C; @@ -7647,7 +7851,6 @@ L_08A6709C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(112), std::bit_cast(aot_fpr_12)); goto L_08A670D0; @@ -7657,7 +7860,6 @@ L_08A670B4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); goto L_08A670CC; @@ -7670,7 +7872,6 @@ L_08A670D0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(116), std::bit_cast(aot_fpr_12)); goto L_08A67104; @@ -7680,7 +7881,6 @@ L_08A670E8: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); goto L_08A67100; @@ -7692,9 +7892,7 @@ L_08A67100: L_08A67104: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A67130; } @@ -7704,7 +7902,6 @@ L_08A67118: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[22])); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); goto L_08A67130; @@ -7724,14 +7921,34 @@ L_08A67130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6714C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67154: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -7846,13 +8063,22 @@ L_08A67154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A671D4: ctx.gpr[7] = (0u | 0u); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(310))); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A67264; } @@ -7863,7 +8089,6 @@ L_08A671E8: ctx.gpr[8] = (aot_gpr_4 + ctx.gpr[8]); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(240))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A67248; } @@ -7874,7 +8099,6 @@ L_08A671FC: ctx.gpr[8] = (aot_gpr_6 + static_cast(-1)); ctx.gpr[10] = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08A67238; } @@ -7890,7 +8114,6 @@ L_08A67210: ctx.gpr[9] = (static_cast(static_cast(ctx.gpr[9]) >> 16u)); ctx.gpr[10] = (static_cast(ctx.gpr[9]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08A67210; } @@ -7914,7 +8137,6 @@ L_08A67248: goto L_08A67258; L_08A67258: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A671E8; } @@ -7925,11 +8147,20 @@ L_08A67260: goto L_08A67264; L_08A67264: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6726C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8036,7 +8267,17 @@ L_08A67330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6734C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_gpr_4 + static_cast(16)); @@ -8131,9 +8372,7 @@ L_08A6734C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A673D4; } @@ -8141,9 +8380,7 @@ L_08A6734C: } L_08A673B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A673CC; } @@ -8167,9 +8404,7 @@ L_08A673CC: } L_08A673D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A673EC; } @@ -8192,7 +8427,17 @@ L_08A673F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A673F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8201,7 +8446,6 @@ L_08A673F8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A67448; } @@ -8211,7 +8455,6 @@ L_08A67418: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_6 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A67440; } @@ -8221,7 +8464,6 @@ L_08A67428: aot_gpr_6 = (16384u << 16u); aot_gpr_6 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A67470; } @@ -8245,7 +8487,6 @@ L_08A67440: } L_08A67448: aot_gpr_31 = (0x08A67450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0153_entry, 153u, 92u, 0x08A68C14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A67450u) goto L_08A67450; AOT_REGCACHE_SYNC_OUT(); return; L_08A67450: @@ -8268,7 +8509,6 @@ L_08A67458: L_08A67464: aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A67478; } @@ -8284,7 +8524,6 @@ L_08A67470: } L_08A67478: aot_gpr_31 = (0x08A67480u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 432u, 0x08AD2764u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A67480u) goto L_08A67480; AOT_REGCACHE_SYNC_OUT(); return; L_08A67480: @@ -8294,7 +8533,17 @@ L_08A67480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6748C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8311,7 +8560,6 @@ L_08A6748C: L_08A674A8: aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A674D8; } @@ -8321,7 +8569,6 @@ L_08A674B4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(320))); aot_gpr_5 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08A674CC; @@ -8330,7 +8577,6 @@ L_08A674B4: L_08A674CC: aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A674F0; } @@ -8344,7 +8590,6 @@ L_08A674D8: goto L_08A6669C; L_08A674E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6752C; } @@ -8373,7 +8618,17 @@ L_08A6752C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67538: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8394,7 +8649,6 @@ L_08A67560: aot_gpr_5 = (32768u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A67584; } @@ -8413,9 +8667,7 @@ L_08A67574: L_08A67584: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A675C0; } @@ -8424,9 +8676,7 @@ L_08A67584: L_08A67598: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A675C0; } @@ -8435,9 +8685,7 @@ L_08A67598: L_08A675AC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6763C; } @@ -8563,7 +8811,17 @@ L_08A6763C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67650: aot_gpr_29 = (aot_gpr_29 + static_cast(-416)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -8591,12 +8849,10 @@ L_08A6768C: } L_08A676A4: aot_gpr_31 = (0x08A676ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A676ACu) goto L_08A676AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A676AC: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08A67918; } @@ -8699,7 +8955,6 @@ L_08A67710: AOT_REGCACHE_SYNC_OUT(); return; L_08A6777C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A677B0; } @@ -8727,7 +8982,6 @@ L_08A67784: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A677CC; } @@ -8763,7 +9017,6 @@ L_08A677CC: aot_gpr_4 = (16204u << 16u); aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8774,7 +9027,6 @@ L_08A677CC: L_08A67800: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A67814; @@ -8866,9 +9118,7 @@ L_08A67814: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A678A8; } @@ -8893,7 +9143,6 @@ L_08A67884: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A678C8; } @@ -8984,7 +9233,6 @@ L_08A678C8: goto L_08A666C0; L_08A67910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A67950; } @@ -9043,7 +9291,17 @@ L_08A67950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67980: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9128,7 +9386,17 @@ L_08A679C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67A08: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -9140,7 +9408,6 @@ L_08A67A08: ctx.gpr[18] = (aot_gpr_4 + static_cast(320)); ctx.gpr[17] = (aot_gpr_4 + static_cast(112)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -9198,7 +9465,6 @@ L_08A67A94: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A67B20; } @@ -9282,7 +9548,17 @@ L_08A67B20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67B3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9313,7 +9589,6 @@ L_08A67B70: } L_08A67B80: aot_gpr_31 = (0x08A67B88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A67B88u) goto L_08A67B88; AOT_REGCACHE_SYNC_OUT(); return; L_08A67B88: @@ -9323,7 +9598,6 @@ L_08A67B88: goto L_08A67B94; L_08A67B94: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A67BBC; } @@ -9337,7 +9611,6 @@ L_08A67B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A67BA8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A67BC4; } @@ -9346,7 +9619,6 @@ L_08A67BA8: L_08A67BB0: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A67B9C; } @@ -9375,7 +9647,17 @@ L_08A67BC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67BDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9406,7 +9688,6 @@ L_08A67C10: } L_08A67C20: aot_gpr_31 = (0x08A67C28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A67C28u) goto L_08A67C28; AOT_REGCACHE_SYNC_OUT(); return; L_08A67C28: @@ -9416,7 +9697,6 @@ L_08A67C28: goto L_08A67C34; L_08A67C34: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A67C5C; } @@ -9430,7 +9710,6 @@ L_08A67C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08A67C48: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A67C64; } @@ -9439,7 +9718,6 @@ L_08A67C48: L_08A67C50: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A67C3C; } @@ -9468,7 +9746,17 @@ L_08A67C68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A67C7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(464), aot_gpr_16); @@ -9516,9 +9804,7 @@ L_08A67CA4: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A67D74; } @@ -9788,9 +10074,7 @@ L_08A67D7C: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A67FE8; } @@ -9939,7 +10223,6 @@ L_08A67E70: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A67F74; } @@ -9951,9 +10234,7 @@ L_08A67F3C: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A67F74; } @@ -9971,7 +10252,6 @@ L_08A67F74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A67FE0; } @@ -9994,7 +10274,6 @@ L_08A67F98: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A67FC0; } @@ -10003,7 +10282,6 @@ L_08A67F98: L_08A67FB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8421))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A67FE0; } @@ -10049,7 +10327,17 @@ L_08A67FF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0153.cpp b/profiles/vcs/generated/generated_unit_0153.cpp index e5a83f8..efa17a7 100644 --- a/profiles/vcs/generated/generated_unit_0153.cpp +++ b/profiles/vcs/generated/generated_unit_0153.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0153[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, - 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 25, 0, 0, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 28, 0, 29, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 32, 0, 33, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 37, 0, - 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 47, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 55, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, - 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, 0, 0, 70, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 72, 0, 0, 0, 73, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, - 0, 83, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 86, 0, 87, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 90, 91, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 97, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 119, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 121, 0, 0, - 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, 0, 0, 126, 0, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, - 0, 0, 132, 0, 0, 133, 0, 0, 134, 0, 0, 135, 136, 0, 137, 0, 0, 0, 138, 0, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 0, - 144, 0, 0, 145, 0, 0, 146, 0, 0, 147, 148, 0, 0, 149, 0, 0, 150, 0, 151, 0, 0, 0, 152, 0, 153, 0, 0, 0, 154, 0, 0, 155, - 0, 0, 0, 156, 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, - 0, 165, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 171, 0, 0, - 172, 0, 173, 0, 174, 0, 175, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 0, - 181, 0, 182, 0, 0, 0, 0, 183, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 0, 192, 0, 0, 0, - 0, 0, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 0, 201, 0, 0, 202, 0, 0, 203, 0, - 0, 204, 205, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 0, 213, 0, 0, 214, 0, 0, 215, 0, 0, 216, - 217, 0, 218, 0, 0, 0, 0, 219, 0, 220, 0, 0, 221, 0, 222, 0, 223, 0, 224, 0, 0, 0, 225, 0, 226, 0, 0, 0, 0, 227, 0, 0, - 228, 0, 0, 229, 0, 230, 0, 0, 0, 231, 0, 232, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 236, 0, 237, 238, 0, 0, - 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 242, 0, 243, 0, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, - 0, 0, 0, 250, 0, 251, 0, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, - 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, - 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 307, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 309, 310, 0, 0, 0, 0, - 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 315, 0, 0, 316, 0, 0, 317, 0, - 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 324, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, - 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 353, 0, 0, 354, 0, 355, 0, 0, 0, 356, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, - 360, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, 366, 0, 0, 367, 0, 0, - 0, 0, 0, 368, 0, 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 374, 0, 0, 0, - 375, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, - 0, 0, 384, 0, 0, 385, 386, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, - 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, 0, 395, 0, 0, 0, 0, - 396, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 401, 0, 0, 0, 0, 0, 402, 0, 403, 0, 404, - 0, 0, 0, 0, 0, 0, 405, 0, 0, 406, 0, 407, 0, 408, 0, 0, 409, 0, 0, 0, 0, 410, 0, 0, 411, 0, 412, 0, 413, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, - 0, 416, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 425, 0, - 426, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, - 431, 0, 0, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, 436, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, - 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, 0, 442, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, - 0, 446, 0, 0, 0, 447, 0, 448, 0, 449, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 452, 0, 0, 453, 0, 454, 455, 0, 0, - 456, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 0, 459, 0, 460, 0, 461, 0, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 465, 0, 466, - 0, 0, 467, 0, 0, 0, 468, 0, 0, 469, 0, 470, 0, 471, 0, 0, 472, 0, 473, 0, 0, 474, 0, 0, 0, 475, 0, 0, 476, 0, 477, 0, - 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 481, - 0, 482, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 487, 0, 0, 488, 0, - 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 495, 0, 496, - 0, 497, 0, 0, 0, 498, 0, 0, 499, 0, 500, 0, 0, 0, 501, 0, 0, 502, 0, 503, 0, 0, 0, 0, 0, 504, 0, 505, 0, 506, 0, 507, - 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 517, 0, 0, 0, 518, 0, 0, 519, 0, 520, 0, - 0, 0, 521, 0, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, - 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 526, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, - 530, 0, 531, 0, 0, 0, 532, 0, 0, 0, 533, 0, 534, 0, 535, 0, 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, - 0, 548, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, - 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, - 0, 0, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 0, 0, 561, 0, 562, 0, 0, 563, 0, 0, 0, 564, 0, 565, 0, 566, 0, 567, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 573, 0, 574, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, - 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 0, 0, 588, 0, - 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 0, 0, 0, 0, 0, 0, 0, 591, 0, 592, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 595, 0, 0, 0, 0, 596, 597, 0, - 0, 598, 0, 0, 0, 0, 599, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 602, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 606, 0, 607, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 609, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, - 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 0, 617, 0, 0, 0, 618, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 621, 622, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, - 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, - 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 632, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, 0, - 637, 0, 0, 0, 638, 0, 0, 0, 639, 0, 640, 0, 0, 641, 0, 0, 0, 642, 0, 643, 0, 644, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 648, 0, - 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 655, - 0, 0, 0, 656, 0, 657, 0, 658, 0, 0, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 665, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 669, 670, 0, 0, 0, 0, 0, 671, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 675, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 680, 0, 0, 681, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 683, 0, 684, 0, 685, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0153[64] = { + 0x8080000054080001ull, 0x0004081500800041ull, 0x0200000830100108ull, 0x4422A21050509080ull, + 0x8004012000000003ull, 0x0000000012000400ull, 0x1000000000200012ull, 0x000000005400C000ull, + 0x4002000000000000ull, 0x4A22040400609088ull, 0xA00802A200020000ull, 0xD015110240920000ull, + 0x02AAA201400A0820ull, 0x0901100000001000ull, 0x2040900440148088ull, 0x2AA45924AA914084ull, + 0x0020428891452649ull, 0x0220000000200002ull, 0x0A84205529011012ull, 0x1084202200880285ull, + 0x924AA916492AA448ull, 0x34448A2921455285ull, 0x4005552855528502ull, 0x0000010000001000ull, + 0x0000000000000840ull, 0x0000100000000000ull, 0xAA00A10208141000ull, 0x2040028022054008ull, + 0x204204201202A800ull, 0x0C02540010288505ull, 0x4920080800000002ull, 0x0000000042205050ull, + 0x0011400200848820ull, 0x0040008002220004ull, 0x00090002820A0010ull, 0x4100514800084409ull, + 0x1042054825104205ull, 0x04108064A0192025ull, 0xA831022108421005ull, 0x4400000015212A40ull, + 0x50A00A400020000Aull, 0x04B0848140004281ull, 0x349202A228209048ull, 0x52252A44A522A221ull, + 0x48A00212A0800001ull, 0xA092020000000401ull, 0x20110840AA0A4522ull, 0x8000014452290280ull, + 0x0041544504083040ull, 0x8888410010088100ull, 0x8040000114001512ull, 0x00000000AA251110ull, + 0x0000000010045008ull, 0x0440800008000150ull, 0x4000000002010000ull, 0x0000000444408404ull, + 0xA894444261820A02ull, 0x4424208210114000ull, 0x28204010410C2100ull, 0x012A251110805444ull, + 0x8A02408441010000ull, 0x000000002082A8A8ull, 0x0000250010684011ull, 0x2A10000012820A10ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0153[64] = { + 1u, 8u, 16u, 23u, 38u, 44u, 47u, 51u, 56u, 58u, 71u, 79u, 92u, 106u, 111u, 122u, + 144u, 161u, 165u, 181u, 193u, 217u, 239u, 259u, 261u, 263u, 264u, 276u, 286u, 297u, 311u, 318u, + 325u, 334u, 340u, 348u, 360u, 375u, 390u, 405u, 416u, 426u, 439u, 456u, 478u, 489u, 497u, 513u, + 525u, 538u, 548u, 558u, 568u, 573u, 580u, 583u, 590u, 608u, 619u, 630u, 646u, 656u, 665u, 675u, }; void recomp_unit_0153_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0153_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A68000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0153[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0153[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0153[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A68000; @@ -871,7 +778,6 @@ L_08A68000: aot_gpr_4 = (ctx.gpr[7] | 0u); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[15])); if (branch_taken) { @@ -884,7 +790,6 @@ L_08A6804C: aot_gpr_6 = (16448u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08A68078; @@ -892,7 +797,6 @@ L_08A6804C: goto L_08A68068; L_08A68068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A68078; } @@ -981,7 +885,17 @@ L_08A68100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68118: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -995,7 +909,6 @@ L_08A68118: aot_gpr_16 = (aot_gpr_6 | 0u); aot_gpr_6 = (ctx.gpr[7] | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[8] | 0u); if (branch_taken) { @@ -1026,9 +939,7 @@ L_08A6815C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[16] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68190; } @@ -1036,7 +947,6 @@ L_08A6815C: } L_08A68180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A681AC; } @@ -1075,7 +985,6 @@ L_08A681AC: aot_gpr_5 = (16448u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08A681C8; @@ -1098,7 +1007,6 @@ L_08A681C8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A68220; } @@ -1173,7 +1081,17 @@ L_08A68274: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6828C: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1237,7 +1155,6 @@ L_08A682E4: aot_fpr_14 = std::bit_cast(0u); ctx.gpr[19] = (aot_gpr_29 + static_cast(32)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[15])); goto L_08A6831C; @@ -1248,7 +1165,6 @@ L_08A6831C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6833C; } @@ -1262,9 +1178,7 @@ L_08A68330: L_08A6833C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5720))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68358; } @@ -1282,9 +1196,7 @@ L_08A68358: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5720))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68378; } @@ -1298,9 +1210,7 @@ L_08A68378: { const float fs = aot_fpr_20; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A683C4; } @@ -1309,9 +1219,7 @@ L_08A68378: L_08A68390: aot_fpr_13 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A683C4; } @@ -1319,9 +1227,7 @@ L_08A68390: } L_08A683A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A683BC; } @@ -1345,9 +1251,7 @@ L_08A683BC: } L_08A683C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68404; } @@ -1356,9 +1260,7 @@ L_08A683C4: L_08A683D4: aot_fpr_13 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68404; } @@ -1366,9 +1268,7 @@ L_08A683D4: } L_08A683E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68400; } @@ -1500,9 +1400,7 @@ L_08A68404: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5716))); { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A684A0; } @@ -1591,7 +1489,17 @@ L_08A684FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68528: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_31); @@ -1627,7 +1535,17 @@ L_08A68564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68570: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), aot_gpr_31); @@ -1757,7 +1675,17 @@ L_08A68604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68610: aot_gpr_29 = (aot_gpr_29 + static_cast(-592)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1866,9 +1794,7 @@ L_08A68654: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68770; } @@ -1901,9 +1827,7 @@ L_08A686F0: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6873C; } @@ -2185,9 +2109,7 @@ L_08A68778: ctx.fpr[24] = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68A9C; } @@ -2253,9 +2175,7 @@ L_08A6893C: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68958; } @@ -2313,9 +2233,7 @@ L_08A689A8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A68A94; } @@ -2325,7 +2243,6 @@ L_08A689C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A68A94; } @@ -2335,7 +2252,6 @@ L_08A689D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A68A94; } @@ -2349,7 +2265,6 @@ L_08A689E4: L_08A689EC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A68A94; } @@ -2396,7 +2311,6 @@ L_08A689F8: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A68A94; } @@ -2425,7 +2339,6 @@ L_08A68A84: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A68A44; } @@ -2464,7 +2377,17 @@ L_08A68AA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68ACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2473,12 +2396,10 @@ L_08A68ACC: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A68AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 43u, 0x08AD03B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A68AF4u) goto L_08A68AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08A68AF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A68BF8; } @@ -2508,7 +2429,6 @@ L_08A68AFC: L_08A68B44: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08A68BF0; } @@ -2527,7 +2447,6 @@ L_08A68B5C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A68B84; } @@ -2546,7 +2465,6 @@ L_08A68B84: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A68BD0; } @@ -2578,7 +2496,6 @@ L_08A68BC0: goto L_08A68BC8; L_08A68BC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A68BF0; } @@ -2618,14 +2535,23 @@ L_08A68BFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68C14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A68C2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 323u, 0x08809984u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A68C2Cu) goto L_08A68C2C; AOT_REGCACHE_SYNC_OUT(); return; L_08A68C2C: @@ -2642,7 +2568,6 @@ L_08A68C2C: } L_08A68C44: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A68CA4; } @@ -2667,7 +2592,6 @@ L_08A68C4C: } L_08A68C78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A68CA4; } @@ -2692,49 +2616,119 @@ L_08A68CA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CB4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(473))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CBC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(444))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CC4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(444), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CCC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(448))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CD4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2116))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CDC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2116), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A68CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2911,7 +2905,6 @@ L_08A68EBC: ctx.gpr[23] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A690D4; } @@ -2931,7 +2924,6 @@ L_08A68EF4: ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A690B8; } @@ -2959,7 +2951,6 @@ L_08A68F1C: } L_08A68F38: { const bool branch_taken = ctx.gpr[30] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A68FB8; } @@ -2969,7 +2960,6 @@ L_08A68F40: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3010,7 +3000,6 @@ L_08A68F6C: } L_08A68F74: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A68FAC; } @@ -3019,7 +3008,6 @@ L_08A68F74: L_08A68F7C: ctx.gpr[19] = (ctx.gpr[18] + static_cast(28)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3028,7 +3016,6 @@ L_08A68F7C: L_08A68F88: ctx.gpr[19] = (ctx.gpr[18] + static_cast(36)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3037,7 +3024,6 @@ L_08A68F88: L_08A68F94: ctx.gpr[19] = (ctx.gpr[18] + static_cast(12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3046,7 +3032,6 @@ L_08A68F94: L_08A68FA0: ctx.gpr[19] = (ctx.gpr[18] + static_cast(20)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3057,7 +3042,6 @@ L_08A68FAC: goto L_08A68FB0; L_08A68FB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3067,7 +3051,6 @@ L_08A68FB8: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3108,7 +3091,6 @@ L_08A68FE4: } L_08A68FEC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A69024; } @@ -3117,7 +3099,6 @@ L_08A68FEC: L_08A68FF4: ctx.gpr[19] = (ctx.gpr[18] + static_cast(32)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3126,7 +3107,6 @@ L_08A68FF4: L_08A69000: ctx.gpr[19] = (ctx.gpr[18] + static_cast(40)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3135,7 +3115,6 @@ L_08A69000: L_08A6900C: ctx.gpr[19] = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3144,7 +3123,6 @@ L_08A6900C: L_08A69018: ctx.gpr[19] = (ctx.gpr[18] + static_cast(20)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69028; } @@ -3162,7 +3140,6 @@ L_08A69028: L_08A69034: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69048; } @@ -3264,7 +3241,17 @@ L_08A690D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A69104: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3403,7 +3390,6 @@ L_08A69274: } L_08A69280: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69298; } @@ -3419,7 +3405,6 @@ L_08A69288: } L_08A69290: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A69324; } @@ -3432,7 +3417,6 @@ L_08A69298: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A692DC; } @@ -3443,7 +3427,6 @@ L_08A692B4: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A692DC; } @@ -3454,7 +3437,6 @@ L_08A692C8: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A692DC; } @@ -3462,7 +3444,6 @@ L_08A692C8: } L_08A692DC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A692EC; } @@ -3470,7 +3451,6 @@ L_08A692DC: } L_08A692E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69324; } @@ -3481,7 +3461,6 @@ L_08A692EC: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A69308; } @@ -3489,7 +3468,6 @@ L_08A692EC: } L_08A69300: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69324; } @@ -3500,7 +3478,6 @@ L_08A69308: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69324; } @@ -3508,7 +3485,6 @@ L_08A69308: } L_08A6931C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69324; } @@ -3584,7 +3560,6 @@ L_08A693C8: ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(ctx.gpr[7]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A69604; } @@ -3613,7 +3588,6 @@ L_08A693F0: L_08A6940C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A69490; } @@ -3623,7 +3597,6 @@ L_08A69418: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3664,7 +3637,6 @@ L_08A69444: } L_08A6944C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A69478; } @@ -3673,7 +3645,6 @@ L_08A6944C: L_08A69454: ctx.gpr[18] = (ctx.gpr[19] + static_cast(28)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3682,7 +3653,6 @@ L_08A69454: L_08A69460: ctx.gpr[18] = (ctx.gpr[19] + static_cast(36)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3691,7 +3661,6 @@ L_08A69460: L_08A6946C: ctx.gpr[18] = (ctx.gpr[19] + static_cast(12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3700,7 +3669,6 @@ L_08A6946C: L_08A69478: ctx.gpr[18] = (ctx.gpr[19] + static_cast(8)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3711,7 +3679,6 @@ L_08A69484: goto L_08A69488; L_08A69488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3721,7 +3688,6 @@ L_08A69490: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3762,7 +3728,6 @@ L_08A694BC: } L_08A694C4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A694F0; } @@ -3771,7 +3736,6 @@ L_08A694C4: L_08A694CC: ctx.gpr[18] = (ctx.gpr[19] + static_cast(32)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3780,7 +3744,6 @@ L_08A694CC: L_08A694D8: ctx.gpr[18] = (ctx.gpr[19] + static_cast(40)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3789,7 +3752,6 @@ L_08A694D8: L_08A694E4: ctx.gpr[18] = (ctx.gpr[19] + static_cast(16)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3798,7 +3760,6 @@ L_08A694E4: L_08A694F0: ctx.gpr[18] = (ctx.gpr[19] + static_cast(8)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69500; } @@ -3809,7 +3770,6 @@ L_08A694FC: goto L_08A69500; L_08A69500: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A69574; } @@ -3833,7 +3793,6 @@ L_08A6951C: L_08A69524: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69538; } @@ -3845,7 +3804,6 @@ L_08A69530: goto L_08A69538; L_08A69538: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69548; } @@ -3889,7 +3847,6 @@ L_08A69574: L_08A69580: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69594; } @@ -3976,7 +3933,6 @@ L_08A69604: } L_08A69620: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A696C8; } @@ -4000,7 +3956,6 @@ L_08A6963C: L_08A69644: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69658; } @@ -4012,7 +3967,6 @@ L_08A69650: goto L_08A69658; L_08A69658: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A69668; } @@ -4024,7 +3978,6 @@ L_08A69660: goto L_08A69668; L_08A69668: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69678; } @@ -4053,7 +4006,6 @@ L_08A6968C: L_08A69694: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A696A8; } @@ -4065,7 +4017,6 @@ L_08A696A0: goto L_08A696A8; L_08A696A8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A696B8; } @@ -4077,12 +4028,10 @@ L_08A696B0: goto L_08A696B8; L_08A696B8: aot_gpr_31 = (0x08A696C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 724u, 0x0897EBF4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A696C0u) goto L_08A696C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A696C0: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A69628; } @@ -4107,14 +4056,23 @@ L_08A696C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A696F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(16), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08A69730u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 349u, 0x08AD1B88u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A69730u) goto L_08A69730; AOT_REGCACHE_SYNC_OUT(); return; L_08A69730: @@ -4365,7 +4323,17 @@ L_08A6982C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A699B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4403,7 +4371,6 @@ L_08A69A30: AOT_REGCACHE_SYNC_OUT(); return; L_08A69A48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A69A6C; } @@ -4427,7 +4394,6 @@ L_08A69A6C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69ABC; } @@ -4440,7 +4406,6 @@ L_08A69A84: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A69ABC; } @@ -4451,7 +4416,6 @@ L_08A69AA0: aot_gpr_4 = (aot_gpr_4 & 496u); ctx.gpr[19] = (0u | 32u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A69AEC; } @@ -4459,7 +4423,6 @@ L_08A69AA0: } L_08A69AB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69BA4; } @@ -4479,7 +4442,6 @@ L_08A69ABC: goto L_08A69104; L_08A69AE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -4492,7 +4454,6 @@ L_08A69AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08A69AF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A69B74; } @@ -4502,7 +4463,6 @@ L_08A69AFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A69B74; } @@ -4519,7 +4479,6 @@ L_08A69B0C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69B48; } @@ -4532,7 +4491,6 @@ L_08A69B38: AOT_REGCACHE_SYNC_OUT(); return; L_08A69B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69B74; } @@ -4545,7 +4503,6 @@ L_08A69B48: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69B74; } @@ -4572,7 +4529,6 @@ L_08A69B74: goto L_08A69104; L_08A69B9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -4612,7 +4568,6 @@ L_08A69BD8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69D54; } @@ -4638,9 +4593,7 @@ L_08A69BF4: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A69C3C; } @@ -4653,7 +4606,6 @@ L_08A69C2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A69C34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A69D54; } @@ -4694,7 +4646,6 @@ L_08A69C70: aot_gpr_5 = (16512u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A69C94; @@ -4705,7 +4656,6 @@ L_08A69C94: ctx.gpr[22] = (std::bit_cast(aot_fpr_12)); ctx.gpr[22] = (ctx.gpr[22] & 255u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69D00; } @@ -4716,7 +4666,6 @@ L_08A69CA8: aot_fpr_13 = std::bit_cast(ctx.fpu_float_to_word_ct<2u>(aot_fpr_13)); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A69CC4; @@ -4727,7 +4676,6 @@ L_08A69CC4: ctx.gpr[22] = (std::bit_cast(aot_fpr_12)); ctx.gpr[22] = (ctx.gpr[22] & 255u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A69D00; } @@ -4738,7 +4686,6 @@ L_08A69CD8: aot_fpr_13 = std::bit_cast(ctx.fpu_float_to_word_ct<2u>(aot_fpr_13)); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A69CF4; @@ -4751,7 +4698,6 @@ L_08A69CF4: goto L_08A69D00; L_08A69D00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69D28; } @@ -4763,7 +4709,6 @@ L_08A69D08: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A69D28; } @@ -4778,7 +4723,6 @@ L_08A69D28: ctx.fpr[24] = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fpr[24] = ctx.fpr[26] / ctx.fpr[24]; { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A69D4C; } @@ -4792,7 +4736,6 @@ L_08A69D3C: goto L_08A69D4C; L_08A69D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A244; } @@ -4805,7 +4748,6 @@ L_08A69D54: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69F38; } @@ -4849,7 +4791,6 @@ L_08A69DA8: } L_08A69DB0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69DC4; } @@ -4869,7 +4810,6 @@ L_08A69DC4: ctx.gpr[22] = (ctx.gpr[22] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A69DEC; } @@ -4884,7 +4824,6 @@ L_08A69DEC: ctx.fpr[24] = ctx.fpr[26] / ctx.fpr[24]; aot_gpr_4 = (static_cast(ctx.gpr[22]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A69F30; } @@ -4954,7 +4893,6 @@ L_08A69E04: aot_fpr_14 = aot_fpr_14 - ctx.fpr[17]; ctx.fpr[28] = ctx.fpr[28] / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A69E8C; @@ -4984,7 +4922,6 @@ L_08A69E8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08A69EACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 412u, 0x08A65D60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A69EACu) goto L_08A69EAC; AOT_REGCACHE_SYNC_OUT(); return; L_08A69EAC: @@ -4995,7 +4932,6 @@ L_08A69EAC: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fpr[30] = ctx.fpr[30] / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_08A69ED4; @@ -5010,7 +4946,6 @@ L_08A69ED4: L_08A69EE0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A69EF8; } @@ -5025,9 +4960,7 @@ L_08A69EF8: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A69F18; } @@ -5045,9 +4978,7 @@ L_08A69F18: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A69F30; } @@ -5055,7 +4986,6 @@ L_08A69F18: } L_08A69F30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A244; } @@ -5068,7 +4998,6 @@ L_08A69F38: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A244; } @@ -5078,7 +5007,6 @@ L_08A69F54: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(476))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6A244; } @@ -5089,7 +5017,6 @@ L_08A69F64: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(474))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6A0C0; } @@ -5300,9 +5227,7 @@ L_08A6A05C: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A0B8; } @@ -5325,7 +5250,6 @@ L_08A6A084: goto L_08A6A0B8; L_08A6A0B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A244; } @@ -5335,7 +5259,6 @@ L_08A6A0C0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(474))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6A144; } @@ -5361,9 +5284,7 @@ L_08A6A0D0: aot_gpr_4 = (aot_gpr_4 | 29885u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A244; } @@ -5384,7 +5305,6 @@ L_08A6A108: ctx.fpr[24] = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fpr[24] = ctx.fpr[26] / ctx.fpr[24]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A244; } @@ -5394,7 +5314,6 @@ L_08A6A144: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(474))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A6A164; } @@ -5404,7 +5323,6 @@ L_08A6A154: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(474))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6A1D8; } @@ -5430,9 +5348,7 @@ L_08A6A164: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A244; } @@ -5453,7 +5369,6 @@ L_08A6A19C: ctx.fpr[24] = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fpr[24] = ctx.fpr[26] / ctx.fpr[24]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A244; } @@ -5479,9 +5394,7 @@ L_08A6A1D8: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A244; } @@ -5504,7 +5417,6 @@ L_08A6A210: goto L_08A6A244; L_08A6A244: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A6A3A0; } @@ -5593,7 +5505,6 @@ L_08A6A30C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A3A0; } @@ -5603,7 +5514,6 @@ L_08A6A328: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A3A0; } @@ -5636,7 +5546,6 @@ L_08A6A34C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A398; } @@ -5649,7 +5558,6 @@ L_08A6A38C: goto L_08A6A398; L_08A6A398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A770; } @@ -5702,7 +5610,6 @@ L_08A6A3F8: AOT_REGCACHE_SYNC_OUT(); return; L_08A6A400: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6A4A8; } @@ -5715,7 +5622,6 @@ L_08A6A408: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A468; } @@ -5724,9 +5630,7 @@ L_08A6A408: L_08A6A424: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A468; } @@ -5738,7 +5642,6 @@ L_08A6A438: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6A468; } @@ -5748,7 +5651,6 @@ L_08A6A450: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A468; } @@ -5770,7 +5672,6 @@ L_08A6A474: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -5779,7 +5680,6 @@ L_08A6A474: L_08A6A48C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -5792,7 +5692,6 @@ L_08A6A498: AOT_REGCACHE_SYNC_OUT(); return; L_08A6A4A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -5805,7 +5704,6 @@ L_08A6A4A8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A508; } @@ -5814,9 +5712,7 @@ L_08A6A4A8: L_08A6A4C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A508; } @@ -5828,7 +5724,6 @@ L_08A6A4D8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6A508; } @@ -5838,7 +5733,6 @@ L_08A6A4F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A508; } @@ -5862,7 +5756,6 @@ L_08A6A514: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A5BC; } @@ -5871,7 +5764,6 @@ L_08A6A514: L_08A6A534: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A54C; } @@ -5880,7 +5772,6 @@ L_08A6A534: L_08A6A540: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A6A57C; } @@ -5898,7 +5789,6 @@ L_08A6A550: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A6A550; } @@ -5906,7 +5796,6 @@ L_08A6A550: } L_08A6A574: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A5BC; } @@ -5915,7 +5804,6 @@ L_08A6A574: L_08A6A57C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A6A594; } @@ -5924,7 +5812,6 @@ L_08A6A57C: L_08A6A588: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A6A5BC; } @@ -5942,7 +5829,6 @@ L_08A6A598: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A6A598; } @@ -5953,7 +5839,6 @@ L_08A6A5BC: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6A3B8; } @@ -5994,9 +5879,7 @@ L_08A6A608: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(236), aot_gpr_4); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6005,9 +5888,7 @@ L_08A6A608: L_08A6A630: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6016,9 +5897,7 @@ L_08A6A630: L_08A6A644: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6027,9 +5906,7 @@ L_08A6A644: L_08A6A658: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6038,9 +5915,7 @@ L_08A6A658: L_08A6A66C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6049,9 +5924,7 @@ L_08A6A66C: L_08A6A680: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6061,7 +5934,6 @@ L_08A6A694: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6082,7 +5954,6 @@ L_08A6A6C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6A6FC; } @@ -6097,7 +5968,6 @@ L_08A6A6D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A770; } @@ -6110,7 +5980,6 @@ L_08A6A6EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A6A6F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6A770; } @@ -6123,7 +5992,6 @@ L_08A6A6FC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A724; } @@ -6141,7 +6009,6 @@ L_08A6A724: AOT_REGCACHE_SYNC_OUT(); return; L_08A6A72C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6A770; } @@ -6158,7 +6025,6 @@ L_08A6A740: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -6167,7 +6033,6 @@ L_08A6A740: L_08A6A754: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -6180,7 +6045,6 @@ L_08A6A760: AOT_REGCACHE_SYNC_OUT(); return; L_08A6A768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -6249,7 +6113,6 @@ L_08A6A7E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -6258,7 +6121,6 @@ L_08A6A7E8: L_08A6A7F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A80C; } @@ -6294,7 +6156,17 @@ L_08A6A80C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6A854: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -6321,7 +6193,6 @@ L_08A6A898: goto L_08A6A8A4; L_08A6A8A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6A900; } @@ -6341,7 +6212,6 @@ L_08A6A8AC: goto L_08A69104; L_08A6A8D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6352,7 +6222,6 @@ L_08A6A8DC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A900; } @@ -6365,7 +6234,6 @@ L_08A6A8F0: AOT_REGCACHE_SYNC_OUT(); return; L_08A6A8F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A6A924; } @@ -6386,7 +6254,6 @@ L_08A6A900: } L_08A6A91C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AA30; } @@ -6431,7 +6298,6 @@ L_08A6A938: goto L_08A69104; L_08A6A978: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6451,7 +6317,6 @@ L_08A6A980: L_08A6A99C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A9DC; } @@ -6462,7 +6327,6 @@ L_08A6A9A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6A9DC; } @@ -6473,7 +6337,6 @@ L_08A6A9BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6A9DC; } @@ -6484,7 +6347,6 @@ L_08A6A9D0: goto L_08A6A9D4; L_08A6A9D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AA30; } @@ -6581,7 +6443,6 @@ L_08A6AA74: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AA94; } @@ -6599,7 +6460,6 @@ L_08A6AA84: } L_08A6AA94: aot_gpr_31 = (0x08A6AA9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6AA9Cu) goto L_08A6AA9C; AOT_REGCACHE_SYNC_OUT(); return; L_08A6AA9C: @@ -6614,7 +6474,6 @@ L_08A6AAA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AAD0; } @@ -6628,7 +6487,6 @@ L_08A6AAC4: L_08A6AAD0: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(228))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A6AB00; } @@ -6642,7 +6500,6 @@ L_08A6AADC: AOT_REGCACHE_SYNC_OUT(); return; L_08A6AAE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6AAF4; } @@ -6654,7 +6511,6 @@ L_08A6AAF0: L_08A6AAF4: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(16))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A6AADC; } @@ -6665,7 +6521,6 @@ L_08A6AB00: aot_gpr_4 = (aot_gpr_4 & ctx.gpr[18]); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(236), aot_gpr_4); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A6AC00; } @@ -6675,7 +6530,6 @@ L_08A6AB14: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AB34; } @@ -6693,7 +6547,6 @@ L_08A6AB24: } L_08A6AB34: aot_gpr_31 = (0x08A6AB3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6AB3Cu) goto L_08A6AB3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A6AB3C: @@ -6704,7 +6557,6 @@ L_08A6AB44: ctx.gpr[20] = (0u | 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(228))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A6ABC0; } @@ -6718,7 +6570,6 @@ L_08A6AB54: AOT_REGCACHE_SYNC_OUT(); return; L_08A6AB60: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6ABB4; } @@ -6727,7 +6578,6 @@ L_08A6AB60: L_08A6AB68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8425))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AB7C; } @@ -6751,7 +6601,6 @@ L_08A6AB88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6760,7 +6609,6 @@ L_08A6AB88: L_08A6AB98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6773,7 +6621,6 @@ L_08A6ABA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A6ABAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6782,7 +6629,6 @@ L_08A6ABAC: L_08A6ABB4: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(16))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A6AB54; } @@ -6790,7 +6636,6 @@ L_08A6ABB4: } L_08A6ABC0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A6AC00; } @@ -6806,7 +6651,6 @@ L_08A6ABD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6815,7 +6659,6 @@ L_08A6ABD4: L_08A6ABE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6828,7 +6671,6 @@ L_08A6ABF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A6ABF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6884,7 +6726,6 @@ L_08A6AC00: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(264), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ACD4; } @@ -6896,7 +6737,6 @@ L_08A6AC5C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ACD4; } @@ -6909,7 +6749,6 @@ L_08A6AC74: AOT_REGCACHE_SYNC_OUT(); return; L_08A6AC7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6ACD4; } @@ -6962,7 +6801,6 @@ L_08A6ACDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6971,7 +6809,6 @@ L_08A6ACDC: L_08A6ACEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AD00; } @@ -6999,7 +6836,17 @@ L_08A6AD00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6AD28: aot_gpr_29 = (aot_gpr_29 + static_cast(-2096)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7038,7 +6885,6 @@ L_08A6ADA4: L_08A6ADC4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8428))); { const bool branch_taken = aot_gpr_16 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A6ADFC; } @@ -7047,7 +6893,6 @@ L_08A6ADC4: L_08A6ADD0: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8428))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_6; - // nop if (branch_taken) { goto L_08A6ADFC; } @@ -7059,7 +6904,6 @@ L_08A6ADDC: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A6AE04; } @@ -7067,7 +6911,6 @@ L_08A6ADDC: } L_08A6ADF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AE28; } @@ -7085,7 +6928,6 @@ L_08A6AE04: aot_gpr_6 = (16672u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6AE4C; } @@ -7094,7 +6936,6 @@ L_08A6AE04: L_08A6AE14: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1300))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6AE4C; } @@ -7112,7 +6953,6 @@ L_08A6AE28: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6AE44; } @@ -7137,7 +6977,6 @@ L_08A6AE4C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6AF54; } @@ -7145,7 +6984,6 @@ L_08A6AE4C: } L_08A6AE64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AF1C; } @@ -7153,12 +6991,10 @@ L_08A6AE64: } L_08A6AE6C: aot_gpr_31 = (0x08A6AE74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6AE74u) goto L_08A6AE74; AOT_REGCACHE_SYNC_OUT(); return; L_08A6AE74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6AF1C; } @@ -7171,7 +7007,6 @@ L_08A6AE7C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AF1C; } @@ -7182,7 +7017,6 @@ L_08A6AE98: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6AED0; } @@ -7193,7 +7027,6 @@ L_08A6AEAC: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6AED0; } @@ -7203,7 +7036,6 @@ L_08A6AEC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AF1C; } @@ -7216,7 +7048,6 @@ L_08A6AED0: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A6AEF4; @@ -7232,7 +7063,6 @@ L_08A6AEF4: aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6AF24; } @@ -7249,7 +7079,6 @@ L_08A6AF24: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AF78; } @@ -7258,7 +7087,6 @@ L_08A6AF24: L_08A6AF40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A6AF78; } @@ -7276,7 +7104,6 @@ L_08A6AF54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AF70; } @@ -7299,7 +7126,6 @@ L_08A6AF78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6AFA0; } @@ -7309,7 +7135,6 @@ L_08A6AF88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6AFA0; } @@ -7433,7 +7258,6 @@ L_08A6B018: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B080; } @@ -7448,7 +7272,6 @@ L_08A6B034: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B088; } @@ -7461,7 +7284,6 @@ L_08A6B04C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B088; } @@ -7473,7 +7295,6 @@ L_08A6B068: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B088; } @@ -7509,7 +7330,6 @@ L_08A6B0A8: goto L_08A6B0B0; L_08A6B0B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BD44; } @@ -7517,7 +7337,6 @@ L_08A6B0B0: } L_08A6B0B8: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A6BD44; } @@ -7529,7 +7348,6 @@ L_08A6B0C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B520; } @@ -7567,9 +7385,7 @@ L_08A6B0D8: ctx.fpr[24] = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6B518; } @@ -7582,7 +7398,6 @@ L_08A6B120: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B170; } @@ -7592,7 +7407,6 @@ L_08A6B13C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B438; } @@ -7623,9 +7437,7 @@ L_08A6B170: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6B2FC; } @@ -7635,9 +7447,7 @@ L_08A6B1A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6B2FC; } @@ -7709,7 +7519,6 @@ L_08A6B220: goto L_08A6B228; L_08A6B228: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6B270; } @@ -7745,7 +7554,6 @@ L_08A6B230: AOT_REGCACHE_SYNC_OUT(); return; L_08A6B268: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6B438; } @@ -7755,7 +7563,6 @@ L_08A6B270: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A6B438; } @@ -7783,7 +7590,6 @@ L_08A6B280: aot_gpr_5 = (aot_gpr_5 + static_cast(2)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(316), aot_gpr_5); aot_gpr_31 = (0x08A6B2D8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6B2D8u) goto L_08A6B2D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A6B2D8: @@ -7867,7 +7673,6 @@ L_08A6B364: goto L_08A6B36C; L_08A6B36C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6B37C; } @@ -7947,7 +7752,6 @@ L_08A6B37C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B430; } @@ -7996,7 +7800,6 @@ L_08A6B438: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B518; } @@ -8012,7 +7815,6 @@ L_08A6B448: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B510; } @@ -8123,7 +7925,6 @@ L_08A6B510: } L_08A6B518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8226,9 +8027,7 @@ L_08A6B56C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8241,7 +8040,6 @@ L_08A6B5BC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B664; } @@ -8251,7 +8049,6 @@ L_08A6B5D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8279,7 +8076,6 @@ L_08A6B5E8: aot_gpr_5 = (aot_gpr_5 + static_cast(2)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(316), aot_gpr_5); aot_gpr_31 = (0x08A6B640u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6B640u) goto L_08A6B640; AOT_REGCACHE_SYNC_OUT(); return; L_08A6B640: @@ -8380,7 +8176,6 @@ L_08A6B664: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B708; } @@ -8411,7 +8206,6 @@ L_08A6B728: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(0), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(473))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B82C; } @@ -8422,9 +8216,7 @@ L_08A6B73C: aot_gpr_4 = (16800u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6B82C; } @@ -8441,7 +8233,6 @@ L_08A6B768: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B82C; } @@ -8451,7 +8242,6 @@ L_08A6B778: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B824; } @@ -8556,7 +8346,6 @@ L_08A6B82C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); goto L_08A6B860; @@ -8566,7 +8355,6 @@ L_08A6B844: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(456))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(236))); goto L_08A6B878; @@ -8580,7 +8368,6 @@ L_08A6B860: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BB5C; } @@ -8592,7 +8379,6 @@ L_08A6B874: L_08A6B878: aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BB5C; } @@ -8664,7 +8450,6 @@ L_08A6B8EC: goto L_08A6B8F4; L_08A6B8F4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6B940; } @@ -8701,7 +8486,6 @@ L_08A6B8FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A6B938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6B970; } @@ -8711,7 +8495,6 @@ L_08A6B940: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6B970; } @@ -8732,7 +8515,6 @@ L_08A6B970: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(76))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6BA20; } @@ -8744,7 +8526,6 @@ L_08A6B984: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BA20; } @@ -8809,7 +8590,6 @@ L_08A6B9F8: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(482), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8829,7 +8609,6 @@ L_08A6BA34: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(44))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6BAB8; } @@ -8843,7 +8622,6 @@ L_08A6BA4C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BAB8; } @@ -8866,7 +8644,6 @@ L_08A6BA60: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A6BA78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6BA78u) goto L_08A6BA78; AOT_REGCACHE_SYNC_OUT(); return; L_08A6BA78: @@ -8888,7 +8665,6 @@ L_08A6BA90: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(482), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8901,7 +8677,6 @@ L_08A6BAB8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8920,7 +8695,6 @@ L_08A6BAD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A6BAEC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -8931,7 +8705,6 @@ L_08A6BAF4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(138))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6BB28; } @@ -8941,7 +8714,6 @@ L_08A6BB08: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(190))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6BB28; } @@ -8967,7 +8739,6 @@ L_08A6BB28: } L_08A6BB30: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BCEC; } @@ -9054,7 +8825,6 @@ L_08A6BBC4: goto L_08A6BBCC; L_08A6BBCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BBE0; } @@ -9112,7 +8882,6 @@ L_08A6BBE0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BC78; } @@ -9124,9 +8893,7 @@ L_08A6BC40: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6BC78; } @@ -9144,7 +8911,6 @@ L_08A6BC78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BCE4; } @@ -9168,7 +8934,6 @@ L_08A6BC9C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BCC4; } @@ -9177,7 +8942,6 @@ L_08A6BC9C: L_08A6BCB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8421))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BCE4; } @@ -9234,7 +8998,6 @@ L_08A6BD0C: goto L_08A6BD14; L_08A6BD14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BD3C; } @@ -9244,7 +9007,6 @@ L_08A6BD1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BD44; } @@ -9257,7 +9019,6 @@ L_08A6BD2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A6BD34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6BD44; } @@ -9277,7 +9038,6 @@ L_08A6BD44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BFF4; } @@ -9289,7 +9049,6 @@ L_08A6BD5C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BFF4; } @@ -9362,7 +9121,6 @@ L_08A6BD74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BE38; } @@ -9372,7 +9130,6 @@ L_08A6BE00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6BE38; } @@ -9397,9 +9154,7 @@ L_08A6BE10: L_08A6BE38: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6BE54; } @@ -9420,9 +9175,7 @@ L_08A6BE58: aot_fpr_12 = aot_fpr_14 - ctx.fpr[22]; ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6BFEC; } @@ -9440,7 +9193,6 @@ L_08A6BE70: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BEA8; } @@ -9504,7 +9256,6 @@ L_08A6BEB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BF24; } @@ -9523,7 +9274,6 @@ L_08A6BF10: AOT_REGCACHE_SYNC_OUT(); return; L_08A6BF24: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A6BFE4; } @@ -9533,9 +9283,7 @@ L_08A6BF2C: aot_fpr_12 = ctx.fpr[26] - ctx.fpr[22]; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6BFE4; } @@ -9547,7 +9295,6 @@ L_08A6BF44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6BF64; } @@ -9555,7 +9302,6 @@ L_08A6BF44: } L_08A6BF5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6BF70; } @@ -9612,7 +9358,6 @@ L_08A6BF70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6BFE4; } diff --git a/profiles/vcs/generated/generated_unit_0154.cpp b/profiles/vcs/generated/generated_unit_0154.cpp index a46fa92..8e74f66 100644 --- a/profiles/vcs/generated/generated_unit_0154.cpp +++ b/profiles/vcs/generated/generated_unit_0154.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0154[4092] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 24, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, - 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 36, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 42, 0, 0, 0, - 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 46, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, - 0, 52, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, - 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, - 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 73, - 0, 74, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, - 80, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, - 93, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 98, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, - 0, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 110, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 117, 0, 0, 0, 118, 0, 0, 0, 119, 120, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, - 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 130, 0, 0, 0, - 0, 0, 131, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, - 136, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, - 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, - 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, - 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 157, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, - 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 164, - 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 178, 179, 0, 0, 0, 0, 180, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, - 0, 0, 0, 183, 0, 184, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 0, 189, 0, 190, - 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 194, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 201, 202, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 205, 0, 206, 0, - 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 211, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 217, 0, 0, 0, 218, 219, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, - 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 228, 229, 0, 0, 0, 230, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, - 0, 0, 233, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 235, 0, 236, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 0, 0, 0, 0, 0, 241, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 247, - 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 251, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, 0, 256, - 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 260, 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 266, 267, 0, 0, 0, 268, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 277, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 280, 0, 0, 0, 281, - 0, 0, 0, 282, 0, 283, 0, 284, 0, 0, 285, 0, 286, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 289, 0, 0, - 0, 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 292, 0, 0, 293, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, 298, - 0, 0, 299, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 305, 0, 0, 306, 0, 0, - 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 309, 0, 310, 0, 311, 0, 0, 312, 0, 313, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, - 324, 0, 0, 0, 325, 0, 0, 326, 0, 327, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 332, 0, - 0, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 338, 0, - 0, 339, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, - 0, 0, 0, 347, 0, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 352, 0, - 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 362, 0, 0, 0, 0, 0, 363, 0, 0, - 0, 0, 0, 364, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 0, 370, 0, 371, - 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 0, 378, - 379, 0, 380, 0, 0, 0, 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, - 0, 0, 0, 386, 0, 0, 0, 0, 387, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, - 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, - 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 400, 0, 401, 0, 0, 0, 402, 0, 403, 0, 404, 0, 405, 0, 406, 0, 0, - 407, 0, 408, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, - 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, - 421, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 427, 0, - 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 0, 0, 431, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, - 434, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, - 439, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, - 0, 0, 0, 445, 0, 446, 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 451, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, - 0, 0, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, - 462, 0, 0, 0, 463, 0, 464, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 0, 0, 0, 469, - 470, 0, 471, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 476, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 478, 0, 0, 0, 479, 0, 480, 0, 0, 0, 481, 0, 0, 482, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 486, 487, 0, 488, 0, 0, 489, 0, 490, 0, - 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, - 0, 0, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 502, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 504, 0, 0, 0, 505, 0, 506, 0, 507, 0, 0, 508, 0, 509, 0, 0, 510, 511, 0, 0, 512, 0, 513, 0, 0, 0, 0, 514, 0, 0, - 515, 0, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 519, 0, 0, 0, 520, 0, 521, 0, 0, - 0, 522, 0, 0, 0, 523, 0, 0, 0, 524, 525, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0154[64] = { + 0x0000000000008009ull, 0x0208500000000000ull, 0x00000000002504A0ull, 0x0020A80842101504ull, + 0x0000000000000000ull, 0x4128008000000000ull, 0x4282000000000009ull, 0x00A8405014210440ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x5001000000000000ull, 0x1000000000001282ull, + 0x2021000901510404ull, 0x01090242A2080410ull, 0x2441044808220211ull, 0x2400040005404201ull, + 0x0000000800041554ull, 0x0000000000000150ull, 0x1024000000000020ull, 0x1210104411042311ull, + 0x9020104120804104ull, 0x0408041048100820ull, 0x8000010100102622ull, 0x0900200291020020ull, + 0x0208000080540000ull, 0x0000000000000000ull, 0x4000186004002040ull, 0x00000510A81020A8ull, + 0x0000000000000000ull, 0x0000205400000000ull, 0x5010800031801000ull, 0x0000000000002041ull, + 0x0000000004000000ull, 0x3180100000002054ull, 0x0000000150808000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0080000000000408ull, 0x800A80840400018Cull, 0x0000040000000000ull, + 0xA400022000000441ull, 0x8140025000001440ull, 0x4604082041181020ull, 0x8825102042408810ull, + 0x00000110220114A8ull, 0x251020548A000912ull, 0x000110220114A888ull, 0x50408A9180024500ull, + 0x9021204A40884102ull, 0x088444A040811108ull, 0x20C4000000000000ull, 0x8444A040A2808888ull, + 0x0881030810211205ull, 0x2AA2840141088102ull, 0x5109020480288205ull, 0x0206050244000A25ull, + 0x8200111104002221ull, 0x0502000041040528ull, 0x0200022080050200ull, 0x2442040581408451ull, + 0x52D1040024510400ull, 0x2000502000041040ull, 0x214CA54400311110ull, 0x0800462228C00501ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0154[64] = { + 1u, 4u, 8u, 14u, 26u, 26u, 31u, 37u, 49u, 49u, 49u, 52u, 57u, 68u, 80u, 93u, + 102u, 110u, 113u, 117u, 131u, 142u, 151u, 160u, 169u, 175u, 175u, 183u, 194u, 194u, 198u, 207u, + 210u, 211u, 220u, 225u, 225u, 225u, 228u, 239u, 240u, 248u, 257u, 269u, 282u, 292u, 307u, 319u, + 333u, 347u, 360u, 364u, 379u, 392u, 407u, 421u, 434u, 445u, 455u, 462u, 477u, 491u, 498u, 515u, }; void recomp_unit_0154_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0154_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A6C000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0154[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0154[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0154[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A6C000; @@ -702,7 +609,6 @@ LOCAL_DISPATCH: L_08A6C000: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6C3BC; } @@ -992,7 +898,6 @@ L_08A6C03C: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_15 = aot_fpr_15 / aot_fpr_12; { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A6C1B8; } @@ -1017,9 +922,7 @@ L_08A6C1CC: aot_fpr_12 = ctx.fpr[18] - aot_fpr_14; aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6C3B4; } @@ -1037,7 +940,6 @@ L_08A6C1E4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6C21C; } @@ -1062,7 +964,6 @@ L_08A6C228: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6C248; } @@ -1170,7 +1071,6 @@ L_08A6C254: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6C364; } @@ -1180,9 +1080,7 @@ L_08A6C308: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6C328; } @@ -1194,7 +1092,6 @@ L_08A6C320: goto L_08A6C328; L_08A6C328: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A6C350; } @@ -1223,7 +1120,6 @@ L_08A6C364: aot_gpr_4 = (aot_gpr_4 & 4u); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6C3AC; } @@ -1270,7 +1166,6 @@ L_08A6C3BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6C7DC; } @@ -1583,9 +1478,7 @@ L_08A6C3D4: aot_fpr_13 = ctx.fpr[24] - aot_fpr_14; ctx.fpr[0] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6C7D4; } @@ -1603,7 +1496,6 @@ L_08A6C59C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6C5D4; } @@ -1628,7 +1520,6 @@ L_08A6C5E0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6C600; } @@ -1737,7 +1628,6 @@ L_08A6C60C: aot_gpr_4 = (aot_gpr_4 & 4u); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[22]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6C718; } @@ -1747,9 +1637,7 @@ L_08A6C6C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6C6E4; } @@ -1782,7 +1670,6 @@ L_08A6C718: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6C7CC; } @@ -1792,9 +1679,7 @@ L_08A6C728: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6C790; } @@ -1805,7 +1690,6 @@ L_08A6C740: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24]) & 0x7FFFFFFFu); ctx.gpr[31] = (0x08A6C754u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, ctx.gpr[31], aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6C754u) goto L_08A6C754; AOT_REGCACHE_SYNC_OUT(); return; L_08A6C754: @@ -1818,7 +1702,6 @@ L_08A6C754: AOT_REGCACHE_SYNC_OUT(); return; L_08A6C768: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08A6C790; } @@ -1847,7 +1730,6 @@ L_08A6C770: goto L_08A6C790; L_08A6C790: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A6C7B8; } @@ -2428,9 +2310,7 @@ L_08A6C7DC: ctx.fpr[18] = aot_fpr_12 - ctx.fpr[16]; ctx.fpr[2] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6CF60; } @@ -2448,7 +2328,6 @@ L_08A6CAC0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CAF8; } @@ -2473,7 +2352,6 @@ L_08A6CB04: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CB24; } @@ -2481,7 +2359,6 @@ L_08A6CB04: } L_08A6CB1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6CB30; } @@ -2584,7 +2461,6 @@ L_08A6CB30: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CCF4; } @@ -2596,7 +2472,6 @@ L_08A6CBF0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6CCF4; } @@ -2608,9 +2483,7 @@ L_08A6CC08: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6CC40; } @@ -2644,7 +2517,6 @@ L_08A6CC50: } L_08A6CC58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CC80; } @@ -2674,7 +2546,6 @@ L_08A6CC60: L_08A6CC80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8421))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CCF4; } @@ -2704,7 +2575,6 @@ L_08A6CC8C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[31] = (0x08A6CCC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 415u, 0x08A65DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6CCC0u) goto L_08A6CCC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A6CCC0: @@ -2733,7 +2603,6 @@ L_08A6CCF4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CE00; } @@ -2745,7 +2614,6 @@ L_08A6CD10: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6CE00; } @@ -2758,9 +2626,7 @@ L_08A6CD28: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6CD64; } @@ -2794,7 +2660,6 @@ L_08A6CD74: } L_08A6CD7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CD98; } @@ -2811,7 +2676,6 @@ L_08A6CD84: L_08A6CD98: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8421))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CE00; } @@ -2856,7 +2720,6 @@ L_08A6CE00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6CE44; } @@ -2885,7 +2748,6 @@ L_08A6CE44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6CF58; } @@ -2897,7 +2759,6 @@ L_08A6CE54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6CF24; } @@ -3034,7 +2895,17 @@ L_08A6CF68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6CFA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-624)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(592), aot_gpr_16); @@ -3060,7 +2931,6 @@ L_08A6CFA8: L_08A6CFE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8428))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A6D010; } @@ -3071,7 +2941,6 @@ L_08A6CFF4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(244))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D018; } @@ -3079,7 +2948,6 @@ L_08A6CFF4: } L_08A6D008: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6D030; } @@ -3095,12 +2963,10 @@ L_08A6D010: } L_08A6D018: ctx.gpr[31] = (0x08A6D020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6D020u) goto L_08A6D020; AOT_REGCACHE_SYNC_OUT(); return; L_08A6D020: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A6D030; } @@ -3116,7 +2982,6 @@ L_08A6D030: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6D120; } @@ -3153,9 +3018,7 @@ L_08A6D048: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D118; } @@ -3424,9 +3287,7 @@ L_08A6D120: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D850; } @@ -3558,7 +3419,6 @@ L_08A6D214: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6D2D4; } @@ -3567,7 +3427,6 @@ L_08A6D214: L_08A6D2C8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6D3E4; } @@ -3580,7 +3439,6 @@ L_08A6D2D4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6D3E4; } @@ -3590,7 +3448,6 @@ L_08A6D2F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A6D3E4; } @@ -3608,7 +3465,6 @@ L_08A6D310: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6D360; } @@ -3621,7 +3477,6 @@ L_08A6D324: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_6 = (0u | 64u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A6D348; } @@ -3632,7 +3487,6 @@ L_08A6D334: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_6 = (0u | 80u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6D360; } @@ -3654,7 +3508,6 @@ L_08A6D360: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6D388; } @@ -3676,7 +3529,6 @@ L_08A6D388: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6D3B0; } @@ -3700,9 +3552,7 @@ L_08A6D3B0: aot_gpr_5 = (aot_gpr_5 | 39322u); ctx.fpr[16] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D3E4; } @@ -3718,7 +3568,6 @@ L_08A6D3D0: L_08A6D3E4: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D474; } @@ -3730,7 +3579,6 @@ L_08A6D3F0: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A6D474; } @@ -3740,9 +3588,7 @@ L_08A6D408: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(320))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D474; } @@ -3752,9 +3598,7 @@ L_08A6D420: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(324))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D474; } @@ -3767,9 +3611,7 @@ L_08A6D438: ctx.fpr[16] = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D474; } @@ -3786,7 +3628,6 @@ L_08A6D45C: L_08A6D474: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D4F0; } @@ -3796,9 +3637,7 @@ L_08A6D480: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(320))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D4F0; } @@ -3808,9 +3647,7 @@ L_08A6D498: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(324))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D4F0; } @@ -3823,9 +3660,7 @@ L_08A6D4B0: ctx.fpr[16] = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D4F0; } @@ -3847,7 +3682,6 @@ L_08A6D4D4: L_08A6D4F0: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D56C; } @@ -3857,9 +3691,7 @@ L_08A6D4FC: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(320))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D56C; } @@ -3869,9 +3701,7 @@ L_08A6D514: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(324))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D56C; } @@ -3884,9 +3714,7 @@ L_08A6D52C: ctx.fpr[16] = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D56C; } @@ -3908,7 +3736,6 @@ L_08A6D550: L_08A6D56C: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D5E8; } @@ -3918,9 +3745,7 @@ L_08A6D578: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(320))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D5E8; } @@ -3930,9 +3755,7 @@ L_08A6D590: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(324))); aot_fpr_15 = std::bit_cast(std::bit_cast(aot_fpr_15) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D5E8; } @@ -3945,9 +3768,7 @@ L_08A6D5A8: ctx.fpr[16] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D5E8; } @@ -3973,7 +3794,6 @@ L_08A6D5E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6D680; } @@ -3991,7 +3811,6 @@ L_08A6D614: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D680; } @@ -4003,7 +3822,6 @@ L_08A6D624: L_08A6D628: aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6D650; } @@ -4014,9 +3832,7 @@ L_08A6D634: aot_gpr_4 = (16128u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D680; } @@ -4095,7 +3911,6 @@ L_08A6D6A0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6D7E0; } @@ -4107,7 +3922,6 @@ L_08A6D6FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6D784; } @@ -4131,9 +3945,7 @@ L_08A6D714: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6D770; } @@ -4146,7 +3958,6 @@ L_08A6D744: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6D784; } @@ -4156,7 +3967,6 @@ L_08A6D760: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6D784; } @@ -4170,7 +3980,6 @@ L_08A6D770: AOT_REGCACHE_SYNC_OUT(); return; L_08A6D77C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6D7B4; } @@ -4224,7 +4033,6 @@ L_08A6D7B4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6D7EC; } @@ -4340,7 +4148,17 @@ L_08A6D858: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6D87C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1776)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1728), std::bit_cast(ctx.fpr[20])); @@ -4373,7 +4191,6 @@ L_08A6D8CC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6DB1C; } @@ -4573,9 +4390,7 @@ L_08A6D8E4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DA34; } @@ -4612,9 +4427,7 @@ L_08A6DA34: ctx.fpr[19] = aot_fpr_12 - ctx.fpr[16]; ctx.fpr[0] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DB14; } @@ -4629,9 +4442,7 @@ L_08A6DA68: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fpr[18] = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DA98; } @@ -4643,9 +4454,7 @@ L_08A6DA94: L_08A6DA98: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DAB0; } @@ -4727,7 +4536,6 @@ L_08A6DB1C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6DF00; } @@ -4740,7 +4548,6 @@ L_08A6DB34: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6DB74; } @@ -4759,7 +4566,6 @@ L_08A6DB50: goto L_08A6DB6C; L_08A6DB6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6DBA8; } @@ -4792,7 +4598,6 @@ L_08A6DB90: AOT_REGCACHE_SYNC_OUT(); return; L_08A6DBA0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A6DD90; } @@ -5130,9 +4935,7 @@ L_08A6DBA8: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DD98; } @@ -5140,7 +4943,6 @@ L_08A6DBA8: } L_08A6DD88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6DDB4; } @@ -5230,9 +5032,7 @@ L_08A6DDB4: ctx.fpr[17] = aot_fpr_12 - ctx.fpr[16]; ctx.fpr[2] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DEF8; } @@ -5247,9 +5047,7 @@ L_08A6DE30: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fpr[18] = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DE60; } @@ -5260,9 +5058,7 @@ L_08A6DE5C: goto L_08A6DE60; L_08A6DE60: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6DE74; } @@ -5355,7 +5151,6 @@ L_08A6DF00: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6E280; } @@ -5368,7 +5163,6 @@ L_08A6DF18: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6E110; } @@ -5695,9 +5489,7 @@ L_08A6E068: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E118; } @@ -5705,7 +5497,6 @@ L_08A6E068: } L_08A6E108: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6E134; } @@ -5795,9 +5586,7 @@ L_08A6E134: ctx.fpr[0] = aot_fpr_12 - ctx.fpr[16]; ctx.fpr[2] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E278; } @@ -5812,9 +5601,7 @@ L_08A6E1B0: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fpr[18] = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E1E0; } @@ -5825,9 +5612,7 @@ L_08A6E1DC: goto L_08A6E1E0; L_08A6E1E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E1F4; } @@ -6384,9 +6169,7 @@ L_08A6E280: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E528; } @@ -6509,9 +6292,7 @@ L_08A6E528: ctx.fpr[18] = aot_fpr_12 - ctx.fpr[16]; ctx.fpr[2] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E6C4; } @@ -6526,9 +6307,7 @@ L_08A6E5DC: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[20]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fpr[18] = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E60C; } @@ -6539,9 +6318,7 @@ L_08A6E608: goto L_08A6E60C; L_08A6E60C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6E620; } @@ -6655,7 +6432,17 @@ L_08A6E6CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A6E6FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1696)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1624), std::bit_cast(ctx.fpr[20])); @@ -6844,7 +6631,6 @@ L_08A6E8E8: } L_08A6E8F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 266u, 0x08A711E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6857,7 +6643,6 @@ L_08A6E8FC: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 240u, 0x08A71100u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6867,7 +6652,6 @@ L_08A6E918: aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(84))); ctx.gpr[7] = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 240u, 0x08A71100u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6875,7 +6659,6 @@ L_08A6E918: } L_08A6E928: { const bool branch_taken = ctx.gpr[17] == aot_gpr_19; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 240u, 0x08A71100u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6968,7 +6751,6 @@ L_08A6E990: L_08A6E998: aot_gpr_6 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 240u, 0x08A71100u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6987,7 +6769,6 @@ L_08A6E9A4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6E9E0; } @@ -7008,7 +6789,6 @@ L_08A6E9E0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EA78; } @@ -7020,7 +6800,6 @@ L_08A6E9FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EA78; } @@ -7044,7 +6823,6 @@ L_08A6EA30: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EA78; } @@ -7055,9 +6833,7 @@ L_08A6EA4C: goto L_08A6EA50; L_08A6EA50: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6EA78; } @@ -7082,7 +6858,6 @@ L_08A6EA78: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EB10; } @@ -7094,7 +6869,6 @@ L_08A6EA94: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EB10; } @@ -7118,7 +6892,6 @@ L_08A6EAC8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EB10; } @@ -7129,9 +6902,7 @@ L_08A6EAE4: goto L_08A6EAE8; L_08A6EAE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6EB10; } @@ -7156,7 +6927,6 @@ L_08A6EB10: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EB78; } @@ -7166,7 +6936,6 @@ L_08A6EB2C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_19 + static_cast(474))); aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6EB78; } @@ -7179,7 +6948,6 @@ L_08A6EB3C: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A6EB78; } @@ -7188,7 +6956,6 @@ L_08A6EB3C: L_08A6EB58: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(474))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6EB78; } @@ -7212,7 +6979,6 @@ L_08A6EB78: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ED98; } @@ -7225,7 +6991,6 @@ L_08A6EB94: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ED98; } @@ -7235,7 +7000,6 @@ L_08A6EBB0: aot_gpr_16 = (aot_gpr_19 | 0u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A6EBC8; } @@ -7252,7 +7016,6 @@ L_08A6EBC0: L_08A6EBC8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(476))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6EC1C; } @@ -7264,7 +7027,6 @@ L_08A6EBD4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A6EC1C; } @@ -7296,7 +7058,6 @@ L_08A6EC0C: goto L_08A6EC14; L_08A6EC14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6ED90; } @@ -7305,7 +7066,6 @@ L_08A6EC14: L_08A6EC1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(444))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A6EC30; } @@ -7323,7 +7083,6 @@ L_08A6EC30: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(473))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ED90; } @@ -7465,9 +7224,7 @@ L_08A6ECA0: aot_gpr_4 = (ctx.gpr[17] + static_cast(48)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6ED10; } @@ -7550,9 +7307,7 @@ L_08A6ED2C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6ED6C; } @@ -7566,7 +7321,6 @@ L_08A6ED6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ED90; } @@ -7575,7 +7329,6 @@ L_08A6ED6C: L_08A6ED7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6ED90; } @@ -7588,7 +7341,6 @@ L_08A6ED88: AOT_REGCACHE_SYNC_OUT(); return; L_08A6ED90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -7601,7 +7353,6 @@ L_08A6ED98: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EFAC; } @@ -7614,7 +7365,6 @@ L_08A6EDB4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EFAC; } @@ -7624,7 +7374,6 @@ L_08A6EDD0: aot_gpr_4 = (ctx.gpr[17] | 0u); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A6EDE8; } @@ -7641,7 +7390,6 @@ L_08A6EDE0: L_08A6EDE8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(476))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6EE3C; } @@ -7653,7 +7401,6 @@ L_08A6EDF4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A6EE3C; } @@ -7685,7 +7432,6 @@ L_08A6EE2C: goto L_08A6EE34; L_08A6EE34: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A6EFA4; } @@ -7694,7 +7440,6 @@ L_08A6EE34: L_08A6EE3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(444))); { const bool branch_taken = aot_gpr_5 != aot_gpr_19; - // nop if (branch_taken) { goto L_08A6EE50; } @@ -7712,7 +7457,6 @@ L_08A6EE50: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(473))); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EFA4; } @@ -7853,9 +7597,7 @@ L_08A6EEC0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6EF28; } @@ -7937,9 +7679,7 @@ L_08A6EF44: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6EF80; } @@ -7952,7 +7692,6 @@ L_08A6EF80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(264))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EFA4; } @@ -7961,7 +7700,6 @@ L_08A6EF80: L_08A6EF90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6EFA4; } @@ -7974,7 +7712,6 @@ L_08A6EF9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A6EFA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -7984,7 +7721,6 @@ L_08A6EFAC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_19 + static_cast(86)))))); aot_gpr_4 = (0u | 342u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6EFF8; } @@ -7997,7 +7733,6 @@ L_08A6EFBC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6EFF8; } @@ -8007,9 +7742,7 @@ L_08A6EFD8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(56))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6EFF8; } @@ -8026,7 +7759,6 @@ L_08A6EFF0: L_08A6EFF8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6F04C; } @@ -8039,7 +7771,6 @@ L_08A6F004: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F04C; } @@ -8049,9 +7780,7 @@ L_08A6F020: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(56))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F04C; } @@ -8072,7 +7801,6 @@ L_08A6F04C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_19 + static_cast(86)))))); aot_gpr_4 = (0u | 345u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6F08C; } @@ -8085,7 +7813,6 @@ L_08A6F05C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6F08C; } @@ -8094,7 +7821,6 @@ L_08A6F05C: L_08A6F078: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A6F08C; } @@ -8111,7 +7837,6 @@ L_08A6F084: L_08A6F08C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6F0D4; } @@ -8124,7 +7849,6 @@ L_08A6F098: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F0D4; } @@ -8133,7 +7857,6 @@ L_08A6F098: L_08A6F0B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A6F0D4; } @@ -8157,7 +7880,6 @@ L_08A6F0D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F140; } @@ -8166,7 +7888,6 @@ L_08A6F0D4: L_08A6F0F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(2116))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A6F10C; } @@ -8176,7 +7897,6 @@ L_08A6F0FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_19 + static_cast(304)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F140; } @@ -8187,7 +7907,6 @@ L_08A6F10C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F130; } @@ -8197,7 +7916,6 @@ L_08A6F120: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -8220,7 +7938,6 @@ L_08A6F140: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F37C; } @@ -8233,7 +7950,6 @@ L_08A6F15C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F37C; } @@ -8253,7 +7969,6 @@ L_08A6F178: AOT_REGCACHE_SYNC_OUT(); return; L_08A6F194: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A6F374; } @@ -8284,7 +7999,6 @@ L_08A6F1C8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F364; } @@ -8294,7 +8008,6 @@ L_08A6F1DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_19 + static_cast(698)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(3)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6F364; } @@ -8454,7 +8167,6 @@ L_08A6F1EC: aot_gpr_4 = (16128u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -8464,9 +8176,7 @@ L_08A6F1EC: } L_08A6F2C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F30C; } @@ -8479,7 +8189,6 @@ L_08A6F2DC: aot_gpr_4 = (aot_gpr_4 | 39322u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15651u << 16u); if (branch_taken) { @@ -8491,9 +8200,7 @@ L_08A6F2F4: aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F33C; } @@ -8501,9 +8208,7 @@ L_08A6F2F4: } L_08A6F30C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F35C; } @@ -8511,9 +8216,7 @@ L_08A6F30C: } L_08A6F31C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F35C; } @@ -8521,9 +8224,7 @@ L_08A6F31C: } L_08A6F32C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F35C; } @@ -8541,7 +8242,6 @@ L_08A6F33C: goto L_08A6F35C; L_08A6F35C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6F374; } @@ -8555,7 +8255,6 @@ L_08A6F364: goto L_08A6F374; L_08A6F374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -8568,7 +8267,6 @@ L_08A6F37C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F408; } @@ -8588,7 +8286,6 @@ L_08A6F398: AOT_REGCACHE_SYNC_OUT(); return; L_08A6F3B4: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A6F400; } @@ -8619,7 +8316,6 @@ L_08A6F3E8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F400; } @@ -8630,7 +8326,6 @@ L_08A6F3FC: goto L_08A6F400; L_08A6F400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -8643,7 +8338,6 @@ L_08A6F408: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F454; } @@ -8652,7 +8346,6 @@ L_08A6F408: L_08A6F424: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2116))); { const bool branch_taken = aot_gpr_19 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A6F440; } @@ -8662,7 +8355,6 @@ L_08A6F430: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(304)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F454; } @@ -8686,7 +8378,6 @@ L_08A6F454: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -8699,7 +8390,6 @@ L_08A6F470: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -8708,9 +8398,7 @@ L_08A6F470: L_08A6F48C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F4A4; } @@ -8726,7 +8414,6 @@ L_08A6F4A4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F504; } @@ -8739,7 +8426,6 @@ L_08A6F4C0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F504; } @@ -8749,7 +8435,6 @@ L_08A6F4DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_19 + static_cast(304)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F560; } @@ -8774,7 +8459,6 @@ L_08A6F504: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F560; } @@ -8787,7 +8471,6 @@ L_08A6F520: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F560; } @@ -8797,7 +8480,6 @@ L_08A6F53C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(304)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F560; } @@ -8816,7 +8498,6 @@ L_08A6F560: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F580; } @@ -8824,7 +8505,6 @@ L_08A6F560: } L_08A6F578: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A6F608; } @@ -8850,7 +8530,6 @@ L_08A6F5A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 32768u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A6F5C4; } @@ -8858,7 +8537,6 @@ L_08A6F5A8: } L_08A6F5BC: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08A6F5DC; } @@ -8868,7 +8546,6 @@ L_08A6F5C4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F5E4; } @@ -8876,7 +8553,6 @@ L_08A6F5C4: } L_08A6F5D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 266u, 0x08A711E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8892,12 +8568,10 @@ L_08A6F5DC: } L_08A6F5E4: ctx.gpr[31] = (0x08A6F5ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A6F5ECu) goto L_08A6F5EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A6F5EC: { const bool branch_taken = aot_gpr_19 != ctx.gpr[2]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 266u, 0x08A711E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8906,7 +8580,6 @@ L_08A6F5EC: L_08A6F5F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(2116))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 266u, 0x08A711E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8927,7 +8600,6 @@ L_08A6F608: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F654; } @@ -8939,7 +8611,6 @@ L_08A6F624: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F654; } @@ -8949,7 +8620,6 @@ L_08A6F63C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A6F654; } @@ -8957,7 +8627,6 @@ L_08A6F63C: } L_08A6F64C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 32u, 0x08A702D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8981,7 +8650,6 @@ L_08A6F654: L_08A6F67C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[21]) <= 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 266u, 0x08A711E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8994,7 +8662,6 @@ L_08A6F688: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F72C; } @@ -9007,7 +8674,6 @@ L_08A6F6A4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F72C; } @@ -9057,7 +8723,6 @@ L_08A6F6F8: } L_08A6F700: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F72C; } @@ -9112,7 +8777,6 @@ L_08A6F768: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 8u, 0x08A700A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9134,7 +8798,6 @@ L_08A6F784: goto L_08A6CFA8; L_08A6F7A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A6FB00; } @@ -9145,9 +8808,7 @@ L_08A6F7A8: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F7C8; } @@ -9163,7 +8824,6 @@ L_08A6F7C8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6FA48; } @@ -9176,7 +8836,6 @@ L_08A6F7E4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6F814; } @@ -9194,7 +8853,6 @@ L_08A6F814: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6F834; } @@ -9204,7 +8862,6 @@ L_08A6F824: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6F890; } @@ -9221,9 +8878,7 @@ L_08A6F834: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(392), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F890; } @@ -9259,7 +8914,6 @@ L_08A6F890: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6F8B0; } @@ -9269,7 +8923,6 @@ L_08A6F8A0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A6F90C; } @@ -9286,9 +8939,7 @@ L_08A6F8B0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(408), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F90C; } @@ -9344,9 +8995,7 @@ L_08A6F928: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F9E8; } @@ -9356,9 +9005,7 @@ L_08A6F948: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(320))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F9E8; } @@ -9368,9 +9015,7 @@ L_08A6F960: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(324))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6F9E8; } @@ -9409,7 +9054,6 @@ L_08A6F978: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A6F9C4; @@ -9427,7 +9071,6 @@ L_08A6F9C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A6F9E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6FB00; } @@ -9462,7 +9105,6 @@ L_08A6F9E8: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A6FA24; @@ -9480,7 +9122,6 @@ L_08A6FA24: AOT_REGCACHE_SYNC_OUT(); return; L_08A6FA40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6FB00; } @@ -9497,9 +9138,7 @@ L_08A6FA48: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(440), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FAA4; } @@ -9561,7 +9200,6 @@ L_08A6FAA4: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A6FAE4; @@ -9589,7 +9227,6 @@ L_08A6FB00: } L_08A6FB10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 8u, 0x08A700A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9599,7 +9236,6 @@ L_08A6FB18: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 8u, 0x08A700A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9623,7 +9259,6 @@ L_08A6FB3C: goto L_08A6CFA8; L_08A6FB58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 7u, 0x08A70098u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9634,9 +9269,7 @@ L_08A6FB60: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FB80; } @@ -9658,7 +9291,6 @@ L_08A6FB88: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6FFB8; } @@ -9671,7 +9303,6 @@ L_08A6FBA8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A6FBD8; } @@ -9698,7 +9329,6 @@ L_08A6FBD8: L_08A6FBE8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A6FC58; } @@ -9715,9 +9345,7 @@ L_08A6FBF4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(472), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FC50; } @@ -9751,7 +9379,6 @@ L_08A6FC40: goto L_08A6FC50; L_08A6FC50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6FCDC; } @@ -9761,7 +9388,6 @@ L_08A6FC58: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(852))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A6FC74; } @@ -9770,7 +9396,6 @@ L_08A6FC58: L_08A6FC68: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A6FCD8; } @@ -9787,9 +9412,7 @@ L_08A6FC74: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(488), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FCD0; } @@ -9823,7 +9446,6 @@ L_08A6FCC0: goto L_08A6FCD0; L_08A6FCD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6FCDC; } @@ -9856,9 +9478,7 @@ L_08A6FCF8: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FDB8; } @@ -9868,9 +9488,7 @@ L_08A6FD18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(320))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FDB8; } @@ -9880,9 +9498,7 @@ L_08A6FD30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(324))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FDB8; } @@ -9921,7 +9537,6 @@ L_08A6FD48: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A6FD94; @@ -9939,7 +9554,6 @@ L_08A6FD94: AOT_REGCACHE_SYNC_OUT(); return; L_08A6FDB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A6FE10; } @@ -9974,7 +9588,6 @@ L_08A6FDB8: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A6FDF4; @@ -10024,7 +9637,6 @@ L_08A6FE40: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6FEE0; } @@ -10044,9 +9656,7 @@ L_08A6FE54: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FED8; } @@ -10056,7 +9666,6 @@ L_08A6FE88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(30))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A6FEA0; } @@ -10092,7 +9701,6 @@ L_08A6FEB4: L_08A6FEBC: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A6FF5C; } @@ -10144,9 +9752,7 @@ L_08A6FF00: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A6FF28; } @@ -10170,7 +9776,6 @@ L_08A6FF28: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_08A6FF58; @@ -10214,7 +9819,6 @@ L_08A6FF94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 7u, 0x08A70098u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10244,9 +9848,7 @@ L_08A6FFB8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(536), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_19 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0155_entry, 155u, 2u, 0x08A70014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0155.cpp b/profiles/vcs/generated/generated_unit_0155.cpp index 3d1d486..914b852 100644 --- a/profiles/vcs/generated/generated_unit_0155.cpp +++ b/profiles/vcs/generated/generated_unit_0155.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0155[4094] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, - 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 13, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, - 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 29, 0, 30, 0, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, - 39, 0, 40, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, - 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, - 0, 53, 0, 54, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 62, - 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, 0, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, - 0, 0, 0, 82, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 85, 86, 0, 0, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, - 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, 0, 98, 0, 99, 0, 0, 100, 0, 0, 101, 0, 0, 0, 102, 0, 103, 0, 104, 0, 0, - 0, 0, 105, 0, 0, 106, 0, 0, 107, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, - 113, 114, 0, 0, 0, 0, 115, 0, 116, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 121, 0, 0, 0, - 122, 0, 0, 123, 0, 0, 0, 0, 0, 124, 0, 125, 0, 0, 126, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, - 0, 131, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 138, 0, - 0, 139, 0, 0, 0, 140, 0, 141, 0, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 0, 0, 147, 0, 148, 0, 149, 0, 0, 0, 0, 0, - 0, 150, 0, 0, 0, 151, 0, 152, 0, 0, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 0, 0, 158, 159, 0, 0, 0, 0, 160, 0, 161, - 0, 162, 0, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 172, 0, 173, 0, 0, 174, - 0, 0, 175, 0, 176, 0, 177, 0, 0, 178, 0, 179, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, - 184, 0, 0, 0, 185, 0, 186, 0, 0, 187, 0, 0, 188, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 192, 0, 193, 0, - 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 0, 0, 202, 0, 0, 0, 203, 0, 204, 0, 205, 0, 0, 206, 0, 0, - 207, 0, 208, 0, 209, 0, 0, 210, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 0, 214, 0, 0, 215, 0, 0, 0, 0, 216, 0, - 0, 0, 217, 0, 218, 0, 0, 219, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, 226, - 0, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, 237, 0, 238, 0, 239, 0, 240, - 0, 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 0, 254, 0, 255, - 0, 256, 0, 257, 0, 258, 0, 259, 0, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, - 0, 0, 0, 268, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 274, 0, 275, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 277, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, - 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 0, 286, 0, 287, 0, 288, 0, 0, 0, 0, 0, 289, 0, 290, 291, 0, 292, 0, 0, 0, 293, - 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 298, 0, 299, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, - 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 307, 308, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 311, 0, 0, 0, 0, 0, - 0, 312, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 315, 316, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 318, 0, - 0, 0, 0, 319, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, - 0, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, 330, 0, 331, 0, 0, 332, 0, 333, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 347, 0, 348, 0, 0, 349, 350, 0, 351, 0, 0, - 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, - 0, 358, 0, 359, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, - 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 369, 0, 0, - 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 372, 0, 0, 0, 373, 0, 0, 374, 0, 375, 0, 376, 0, 0, 377, - 378, 0, 379, 0, 0, 0, 380, 0, 0, 0, 381, 382, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 386, 0, - 0, 0, 387, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 393, 394, 0, 395, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 0, 0, 0, 0, 401, - 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 405, 0, 406, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 416, 417, 0, 0, 0, 418, 419, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, - 0, 423, 0, 0, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 428, 0, 0, - 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, - 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 441, 442, 0, 443, 0, 0, 0, 444, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, - 0, 0, 0, 0, 0, 447, 0, 448, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 455, 0, 0, 0, 456, 0, 457, 0, 458, 0, 0, 459, 0, 460, 0, 461, 0, 462, - 0, 0, 463, 0, 0, 464, 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, - 0, 469, 470, 0, 471, 0, 472, 0, 0, 0, 473, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, - 479, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, - 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, - 0, 0, 0, 504, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 510, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, - 0, 0, 0, 0, 527, 0, 528, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, - 532, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 535, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 538, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, 0, - 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 558, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 0, 562, 0, 0, 563, 564, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 0, 569, 0, 570, 0, 571, 0, - 572, 0, 573, 0, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 584, 0, 585, 0, 0, 0, 0, 0, - 0, 0, 586, 0, 0, 0, 587, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 0, 0, - 0, 0, 592, 593, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, - 0, 0, 597, 0, 598, 0, 599, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, - 605, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 611, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 616, 0, 0, 0, 617, - 0, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 622, - 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 626, - 0, 0, 0, 627, 0, 628, 0, 629, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, - 635, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 637, 0, 638, 0, 639, 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 642, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 646, 0, 0, 0, 0, 647, 0, 0, 0, - 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 650, 651, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 657, 0, 0, 658, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, - 0, 660, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 664, - 0, 0, 0, 665, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 669, 0, 670, 0, 0, 0, 0, - 0, 0, 0, 671, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 675, 0, 0, 0, 0, 676, 0, 677, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 684, 0, 685, 0, 0, 0, - 686, 0, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 0, 690, 0, 0, 0, 691, 0, 0, 692, 0, 0, 0, 0, 693, 0, 0, - 0, 694, 0, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 700, 0, 0, 0, 701, - 0, 0, 0, 702, 0, 0, 0, 0, 703, 0, 0, 0, 0, 704, 0, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 708, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 712, 0, 713, 0, - 714, 0, 0, 0, 715, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 718, 719, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 721, 0, 722, 0, 723, 0, 0, 724, 0, 725, 0, 726, 0, 0, 0, 0, - 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, - 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 734, 735, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, - 0, 738, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 742, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0155[64] = { + 0x20000A2288100011ull, 0x0111210242054480ull, 0x4015488481000000ull, 0x0800618504110404ull, + 0x2040000009040022ull, 0x861410100000020Aull, 0x0000241000882001ull, 0x4140041101428100ull, + 0x00C30A0808000000ull, 0x8000001208004410ull, 0x0A0845242A24A140ull, 0x0A244A0914122143ull, + 0x054554A24842808Aull, 0x95115552A18AA8A2ull, 0x5221125105210A54ull, 0x4248429525445555ull, + 0xAA49555494884494ull, 0x049554AAA55552AAull, 0x0400000000400018ull, 0x20510205004A9000ull, + 0x000068208B415110ull, 0x06041842108502A0ull, 0x081421084206040Aull, 0x01102200A5444084ull, + 0x2CA9140004848040ull, 0x2044014A88810810ull, 0x9523000122804002ull, 0x2C814814440A0C45ull, + 0x0000004486008480ull, 0x8400000000228400ull, 0x18D0410400002040ull, 0x02000222040A0000ull, + 0x0008881024000000ull, 0x4002000000002000ull, 0x0000028000000940ull, 0x001001A020005160ull, + 0xAA54540010000800ull, 0x0001045602080264ull, 0x5008820901001500ull, 0x0004820001208000ull, + 0x0000008288100000ull, 0x2000120800050080ull, 0x5020810000000048ull, 0x0000414000411000ull, + 0x0009040002804000ull, 0x0208085040002410ull, 0x0A01140004110005ull, 0x0000904000241000ull, + 0x2110005020820000ull, 0x54921000CA881500ull, 0x0A02024405AAAAA5ull, 0x110844544200010Cull, + 0x8841220088030089ull, 0x84000801A0008220ull, 0x04454081110888A8ull, 0x100D000110901202ull, + 0x1024420000880000ull, 0x0A20088884000422ull, 0x0800068400220088ull, 0x2122211115110800ull, + 0x2222210888888842ull, 0xD000009150204400ull, 0x202050040A950100ull, 0x2100022220162020ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0155[64] = { + 1u, 11u, 24u, 34u, 46u, 53u, 63u, 70u, 81u, 89u, 96u, 113u, 131u, 150u, 175u, 194u, + 217u, 241u, 268u, 272u, 284u, 298u, 312u, 325u, 338u, 352u, 365u, 378u, 396u, 404u, 410u, 420u, + 427u, 433u, 436u, 441u, 451u, 463u, 475u, 486u, 492u, 497u, 504u, 511u, 517u, 523u, 532u, 542u, + 548u, 556u, 572u, 592u, 605u, 618u, 627u, 642u, 653u, 660u, 671u, 680u, 694u, 709u, 720u, 732u, }; void recomp_unit_0155_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0155_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A70004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0155[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0155[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0155[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A70004; @@ -961,7 +868,6 @@ L_08A70014: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A70054; @@ -1010,7 +916,6 @@ L_08A70098: } L_08A700A8: { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_08A702CC; } @@ -1094,7 +999,6 @@ L_08A700F8: L_08A70120: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8421))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A70264; } @@ -1120,7 +1024,6 @@ L_08A7013C: } L_08A70144: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A70264; } @@ -1133,7 +1036,6 @@ L_08A7014C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A70264; } @@ -1142,7 +1044,6 @@ L_08A7014C: L_08A70168: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(320))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(320))); goto L_08A70188; @@ -1162,9 +1063,7 @@ L_08A70188: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70264; } @@ -1173,7 +1072,6 @@ L_08A70188: L_08A701A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(324))); goto L_08A701C4; @@ -1190,9 +1088,7 @@ L_08A701B8: } L_08A701C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70264; } @@ -1202,7 +1098,6 @@ L_08A701D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A70264; } @@ -1272,7 +1167,6 @@ L_08A70264: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A702B0; } @@ -1290,9 +1184,7 @@ L_08A70280: L_08A7028C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A702B0; } @@ -1316,7 +1208,6 @@ L_08A702B0: } L_08A702BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A702CC; } @@ -1332,7 +1223,6 @@ L_08A702C4: } L_08A702CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -1383,7 +1273,6 @@ L_08A7032C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A70510; } @@ -1418,7 +1307,6 @@ L_08A7036C: AOT_REGCACHE_SYNC_OUT(); return; L_08A70384: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A704F8; } @@ -1427,9 +1315,7 @@ L_08A70384: L_08A7038C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A703A4; } @@ -1441,9 +1327,7 @@ L_08A703A0: L_08A703A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A703BC; } @@ -1463,9 +1347,7 @@ L_08A703BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(632), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70418; } @@ -1508,9 +1390,7 @@ L_08A70418: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(632), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70470; } @@ -1620,7 +1500,6 @@ L_08A70470: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A704DC; @@ -1648,7 +1527,6 @@ L_08A704F8: } L_08A70508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A70C98; } @@ -1660,7 +1538,6 @@ L_08A70510: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A707E4; } @@ -1764,7 +1641,6 @@ L_08A705B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A705CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70784; } @@ -1773,9 +1649,7 @@ L_08A705CC: L_08A705D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A705EC; } @@ -1787,9 +1661,7 @@ L_08A705E8: L_08A705EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70604; } @@ -1809,9 +1681,7 @@ L_08A70604: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(728), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70660; } @@ -1854,9 +1724,7 @@ L_08A70660: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(728), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A706B8; } @@ -1966,7 +1834,6 @@ L_08A706B8: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A70724; @@ -2073,7 +1940,6 @@ L_08A707AC: goto L_08A707DC; L_08A707DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A70C98; } @@ -2085,7 +1951,6 @@ L_08A707E4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A70AAC; } @@ -2191,7 +2056,6 @@ L_08A70890: AOT_REGCACHE_SYNC_OUT(); return; L_08A708A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70A58; } @@ -2200,9 +2064,7 @@ L_08A708A8: L_08A708B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A708C8; } @@ -2214,9 +2076,7 @@ L_08A708C4: L_08A708C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A708E0; } @@ -2236,9 +2096,7 @@ L_08A708E0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(824), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7093C; } @@ -2281,9 +2139,7 @@ L_08A7093C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(824), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70994; } @@ -2393,7 +2249,6 @@ L_08A70994: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A70A00; @@ -2424,7 +2279,6 @@ L_08A70A24: AOT_REGCACHE_SYNC_OUT(); return; L_08A70A38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70A58; } @@ -2459,7 +2313,6 @@ L_08A70A68: AOT_REGCACHE_SYNC_OUT(); return; L_08A70A70: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A70AA4; } @@ -2487,7 +2340,6 @@ L_08A70A98: AOT_REGCACHE_SYNC_OUT(); return; L_08A70AA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A70C98; } @@ -2521,7 +2373,6 @@ L_08A70AD0: AOT_REGCACHE_SYNC_OUT(); return; L_08A70AE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70C88; } @@ -2530,9 +2381,7 @@ L_08A70AE8: L_08A70AF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70B08; } @@ -2544,7 +2393,6 @@ L_08A70B04: L_08A70B08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1620), ctx.gpr[18]); goto L_08A70B24; @@ -2746,7 +2594,6 @@ L_08A70CAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A70CB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70D20; } @@ -2759,7 +2606,6 @@ L_08A70CBC: AOT_REGCACHE_SYNC_OUT(); return; L_08A70CC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70D08; } @@ -2769,7 +2615,6 @@ L_08A70CCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A70D20; } @@ -2790,9 +2635,7 @@ L_08A70CEC: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70D20; } @@ -2807,7 +2650,6 @@ L_08A70D08: AOT_REGCACHE_SYNC_OUT(); return; L_08A70D18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -2817,7 +2659,6 @@ L_08A70D20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-939)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A70D80; } @@ -2830,7 +2671,6 @@ L_08A70D30: AOT_REGCACHE_SYNC_OUT(); return; L_08A70D38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70D80; } @@ -2853,7 +2693,6 @@ L_08A70D50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A70D80; } @@ -2872,7 +2711,6 @@ L_08A70D64: AOT_REGCACHE_SYNC_OUT(); return; L_08A70D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -2899,7 +2737,6 @@ L_08A70D94: AOT_REGCACHE_SYNC_OUT(); return; L_08A70D9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70EFC; } @@ -2912,7 +2749,6 @@ L_08A70DA4: AOT_REGCACHE_SYNC_OUT(); return; L_08A70DAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70EFC; } @@ -2925,7 +2761,6 @@ L_08A70DB4: AOT_REGCACHE_SYNC_OUT(); return; L_08A70DBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70DEC; } @@ -2933,9 +2768,7 @@ L_08A70DBC: } L_08A70DC4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70DEC; } @@ -2950,7 +2783,6 @@ L_08A70DD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A70DE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -2964,7 +2796,6 @@ L_08A70DEC: L_08A70DF4: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3028,9 +2859,7 @@ L_08A70E6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1016))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70E9C; } @@ -3045,7 +2874,6 @@ L_08A70E84: AOT_REGCACHE_SYNC_OUT(); return; L_08A70E94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A70EE8; } @@ -3073,9 +2901,7 @@ L_08A70EB4: L_08A70EC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1032))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70EE8; } @@ -3096,7 +2922,6 @@ L_08A70EE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A70EF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3109,7 +2934,6 @@ L_08A70EFC: AOT_REGCACHE_SYNC_OUT(); return; L_08A70F04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3122,7 +2946,6 @@ L_08A70F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08A70F14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3135,7 +2958,6 @@ L_08A70F1C: AOT_REGCACHE_SYNC_OUT(); return; L_08A70F24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3148,7 +2970,6 @@ L_08A70F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A70F34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A70F64; } @@ -3156,9 +2977,7 @@ L_08A70F34: } L_08A70F3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A70F64; } @@ -3173,7 +2992,6 @@ L_08A70F4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A70F5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3187,7 +3005,6 @@ L_08A70F64: L_08A70F6C: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7106C; } @@ -3251,9 +3068,7 @@ L_08A70FDC: L_08A70FE8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71014; } @@ -3268,7 +3083,6 @@ L_08A70FFC: AOT_REGCACHE_SYNC_OUT(); return; L_08A7100C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A71060; } @@ -3296,9 +3110,7 @@ L_08A7102C: L_08A7103C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1160))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71060; } @@ -3325,7 +3137,6 @@ L_08A7106C: L_08A71074: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A710DC; } @@ -3344,7 +3155,6 @@ L_08A7108C: AOT_REGCACHE_SYNC_OUT(); return; L_08A71094: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A710AC; } @@ -3357,7 +3167,6 @@ L_08A7109C: AOT_REGCACHE_SYNC_OUT(); return; L_08A710A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A710DC; } @@ -3370,7 +3179,6 @@ L_08A710AC: AOT_REGCACHE_SYNC_OUT(); return; L_08A710B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A710DC; } @@ -3378,7 +3186,6 @@ L_08A710B4: } L_08A710BC: aot_gpr_31 = (0x08A710C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 486u, 0x08A66154u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A710C4u) goto L_08A710C4; AOT_REGCACHE_SYNC_OUT(); return; L_08A710C4: @@ -3404,7 +3211,6 @@ L_08A710DC: } L_08A710E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A710F8; } @@ -3420,7 +3226,6 @@ L_08A710F0: } L_08A710F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3435,7 +3240,6 @@ L_08A71100: } // TIER2_SUPERBLOCK_V2_HOOK_END { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3448,7 +3252,6 @@ L_08A71108: AOT_REGCACHE_SYNC_OUT(); return; L_08A71110: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7113C; } @@ -3461,7 +3264,6 @@ L_08A71118: AOT_REGCACHE_SYNC_OUT(); return; L_08A71120: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A7113C; } @@ -3475,7 +3277,6 @@ L_08A71128: AOT_REGCACHE_SYNC_OUT(); return; L_08A71134: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3488,7 +3289,6 @@ L_08A7113C: AOT_REGCACHE_SYNC_OUT(); return; L_08A71144: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A71180; } @@ -3501,7 +3301,6 @@ L_08A7114C: AOT_REGCACHE_SYNC_OUT(); return; L_08A71154: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A71180; } @@ -3514,7 +3313,6 @@ L_08A7115C: AOT_REGCACHE_SYNC_OUT(); return; L_08A71164: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A71180; } @@ -3528,7 +3326,6 @@ L_08A7116C: AOT_REGCACHE_SYNC_OUT(); return; L_08A71178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3541,7 +3338,6 @@ L_08A71180: AOT_REGCACHE_SYNC_OUT(); return; L_08A71188: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A711B4; } @@ -3554,7 +3350,6 @@ L_08A71190: AOT_REGCACHE_SYNC_OUT(); return; L_08A71198: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A711B4; } @@ -3568,7 +3363,6 @@ L_08A711A0: AOT_REGCACHE_SYNC_OUT(); return; L_08A711AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3581,7 +3375,6 @@ L_08A711B4: AOT_REGCACHE_SYNC_OUT(); return; L_08A711BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3594,7 +3387,6 @@ L_08A711C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A711CC: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A711E0; } @@ -3616,7 +3408,6 @@ L_08A711E0: // TIER2_SUPERBLOCK_V2_HOOK_END aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1576))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0154_entry, 154u, 244u, 0x08A6E8A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3669,7 +3460,17 @@ L_08A71214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7125C: aot_gpr_29 = (aot_gpr_29 + static_cast(-2240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2188), aot_gpr_16); @@ -3738,7 +3539,6 @@ L_08A712EC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A71348; } @@ -3755,7 +3555,6 @@ L_08A71334: } L_08A71340: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A72334; } @@ -3772,7 +3571,6 @@ L_08A71348: L_08A71350: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A72324; } @@ -3788,7 +3586,6 @@ L_08A7135C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7138C; } @@ -3809,7 +3606,6 @@ L_08A7138C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A713D4; } @@ -3822,7 +3618,6 @@ L_08A713A8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A713DC; } @@ -3832,7 +3627,6 @@ L_08A713C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A713DC; } @@ -3853,7 +3647,6 @@ L_08A713DC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71464; } @@ -3866,7 +3659,6 @@ L_08A713F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71464; } @@ -3898,7 +3690,6 @@ L_08A71434: goto L_08A7143C; L_08A7143C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71464; } @@ -3910,7 +3701,6 @@ L_08A71444: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A71464; } @@ -3929,7 +3719,6 @@ L_08A71464: goto L_08A71468; L_08A71468: { const bool branch_taken = ctx.gpr[23] == aot_gpr_16; - // nop if (branch_taken) { goto L_08A7231C; } @@ -3939,7 +3728,6 @@ L_08A71470: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(84))); aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A7231C; } @@ -3951,7 +3739,6 @@ L_08A71480: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7231C; } @@ -3969,7 +3756,6 @@ L_08A71498: goto L_08A714B0; L_08A714B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7231C; } @@ -4063,7 +3849,6 @@ L_08A71518: goto L_08A71520; L_08A71520: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7231C; } @@ -4076,7 +3861,6 @@ L_08A71528: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7154C; } @@ -4131,7 +3915,6 @@ L_08A7159C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A71610; } @@ -4157,7 +3940,6 @@ L_08A715CC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71610; } @@ -4171,9 +3953,7 @@ L_08A715EC: aot_gpr_4 = (aot_gpr_4 | 62915u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71610; } @@ -4205,7 +3985,6 @@ L_08A7162C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A716D4; } @@ -4219,9 +3998,7 @@ L_08A7164C: aot_gpr_4 = (aot_gpr_4 | 62915u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A716D4; } @@ -4232,7 +4009,6 @@ L_08A71668: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A716CC; } @@ -4243,7 +4019,6 @@ L_08A7167C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A716CC; } @@ -4254,7 +4029,6 @@ L_08A71690: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A716CC; } @@ -4265,7 +4039,6 @@ L_08A716A4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(14))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A716CC; } @@ -4276,7 +4049,6 @@ L_08A716B8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A716D4; } @@ -4297,7 +4069,6 @@ L_08A716D4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A718F8; } @@ -4310,7 +4081,6 @@ L_08A716F0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A718F8; } @@ -4321,7 +4091,6 @@ L_08A7170C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[30] + static_cast(476))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7176C; } @@ -4334,7 +4103,6 @@ L_08A71720: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7176C; } @@ -4366,7 +4134,6 @@ L_08A7175C: goto L_08A71764; L_08A71764: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A718E0; } @@ -4375,7 +4142,6 @@ L_08A71764: L_08A7176C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(444))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A71780; } @@ -4572,7 +4338,6 @@ L_08A7186C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1176))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[30] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2180))); if (branch_taken) { @@ -4588,7 +4353,6 @@ L_08A718B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1144))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A718D8; } @@ -4597,7 +4361,6 @@ L_08A718B4: L_08A718C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1136))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A718D8; } @@ -4610,7 +4373,6 @@ L_08A718D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A718D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A718F0; } @@ -4619,7 +4381,6 @@ L_08A718D8: L_08A718E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(444))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A718F0; } @@ -4630,7 +4391,6 @@ L_08A718EC: goto L_08A718F0; L_08A718F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A71BF0; } @@ -4643,7 +4403,6 @@ L_08A718F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71B0C; } @@ -4656,7 +4415,6 @@ L_08A71914: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71B0C; } @@ -4667,7 +4425,6 @@ L_08A71930: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(476))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A71990; } @@ -4680,7 +4437,6 @@ L_08A71944: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A71990; } @@ -4712,7 +4468,6 @@ L_08A71980: goto L_08A71988; L_08A71988: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A71AF4; } @@ -4721,7 +4476,6 @@ L_08A71988: L_08A71990: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(444))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08A719A4; } @@ -4829,7 +4583,6 @@ L_08A71A3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2184))); if (branch_taken) { @@ -4915,9 +4668,7 @@ L_08A71A84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1304))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71AC8; } @@ -4930,7 +4681,6 @@ L_08A71AC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1272))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71AEC; } @@ -4939,7 +4689,6 @@ L_08A71AC8: L_08A71AD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1264))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71AEC; } @@ -4952,7 +4701,6 @@ L_08A71AE4: AOT_REGCACHE_SYNC_OUT(); return; L_08A71AEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A71B04; } @@ -4961,7 +4709,6 @@ L_08A71AEC: L_08A71AF4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(444))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08A71B04; } @@ -4972,7 +4719,6 @@ L_08A71B00: goto L_08A71B04; L_08A71B04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A71BF0; } @@ -4990,7 +4736,6 @@ L_08A71B1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 317u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A71B50; } @@ -5005,7 +4750,6 @@ L_08A71B30: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71B50; } @@ -5026,7 +4770,6 @@ L_08A71B50: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71B94; } @@ -5036,7 +4779,6 @@ L_08A71B6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(86)))))); aot_gpr_5 = (0u | 316u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A71B8C; } @@ -5046,7 +4788,6 @@ L_08A71B7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(86)))))); aot_gpr_5 = (0u | 317u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A71B94; } @@ -5067,7 +4808,6 @@ L_08A71B94: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71BC4; } @@ -5076,7 +4816,6 @@ L_08A71B94: L_08A71BB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2116))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A71BC4; } @@ -5097,7 +4836,6 @@ L_08A71BC4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71BF0; } @@ -5106,7 +4844,6 @@ L_08A71BC4: L_08A71BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2116))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A71BF0; } @@ -5117,7 +4854,6 @@ L_08A71BEC: goto L_08A71BF0; L_08A71BF0: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A7231C; } @@ -5141,7 +4877,6 @@ L_08A71BF8: L_08A71C20: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_08A7231C; } @@ -5152,7 +4887,6 @@ L_08A71C2C: aot_gpr_4 = (0u | 1u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A71C80; } @@ -5166,9 +4900,7 @@ L_08A71C40: aot_gpr_5 = (aot_gpr_29 + aot_gpr_5); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71C6C; } @@ -5182,7 +4914,6 @@ L_08A71C6C: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A71C40; } @@ -5191,7 +4922,6 @@ L_08A71C6C: L_08A71C80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8425))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71D48; } @@ -5201,7 +4931,6 @@ L_08A71C8C: ctx.gpr[30] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71E00; } @@ -5276,7 +5005,6 @@ L_08A71C9C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A71D2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A71D2Cu) goto L_08A71D2C; AOT_REGCACHE_SYNC_OUT(); return; L_08A71D2C: @@ -5284,7 +5012,6 @@ L_08A71D2C: ctx.gpr[30] = (ctx.gpr[30] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A71C9C; } @@ -5292,7 +5019,6 @@ L_08A71D2C: } L_08A71D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A71E00; } @@ -5302,7 +5028,6 @@ L_08A71D48: ctx.gpr[30] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71E00; } @@ -5378,7 +5103,6 @@ L_08A71D58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A71DECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A71DECu) goto L_08A71DEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A71DEC: @@ -5386,7 +5110,6 @@ L_08A71DEC: ctx.gpr[30] = (ctx.gpr[30] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A71D58; } @@ -5399,7 +5122,6 @@ L_08A71E00: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71F50; } @@ -5412,7 +5134,6 @@ L_08A71E1C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A71F50; } @@ -5468,9 +5189,7 @@ L_08A71E38: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1480))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71EF4; } @@ -5480,9 +5199,7 @@ L_08A71E8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1480))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71EF4; } @@ -5492,9 +5209,7 @@ L_08A71EA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1480))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A71EF4; } @@ -5504,7 +5219,6 @@ L_08A71EBC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(0u); if (branch_taken) { @@ -5525,7 +5239,6 @@ L_08A71EDC: goto L_08A71EE0; L_08A71EE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A71EF0; @@ -5577,12 +5290,10 @@ L_08A71EF4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A71F48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A71F48u) goto L_08A71F48; AOT_REGCACHE_SYNC_OUT(); return; L_08A71F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A72318; } @@ -5595,7 +5306,6 @@ L_08A71F50: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72078; } @@ -5608,7 +5318,6 @@ L_08A71F6C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72078; } @@ -5618,7 +5327,6 @@ L_08A71F88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A71FA8; } @@ -5628,7 +5336,6 @@ L_08A71F98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A72078; } @@ -5648,7 +5355,6 @@ L_08A71FA8: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A71FE8; @@ -5721,13 +5427,11 @@ L_08A71FE8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A7206Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7206Cu) goto L_08A7206C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7206C: ctx.gpr[21] = (ctx.gpr[23] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A72318; } @@ -5740,7 +5444,6 @@ L_08A72078: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72224; } @@ -5753,7 +5456,6 @@ L_08A72094: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72224; } @@ -5763,7 +5465,6 @@ L_08A720B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A720D0; } @@ -5773,7 +5474,6 @@ L_08A720C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A72224; } @@ -5814,7 +5514,6 @@ L_08A720D0: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A72138; @@ -5901,7 +5600,6 @@ L_08A72138: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A721C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A721C8u) goto L_08A721C8; AOT_REGCACHE_SYNC_OUT(); return; L_08A721C8: @@ -5917,7 +5615,6 @@ L_08A721C8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7221C; } @@ -5938,7 +5635,6 @@ L_08A721FC: AOT_REGCACHE_SYNC_OUT(); return; L_08A7221C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A72318; } @@ -5947,7 +5643,6 @@ L_08A7221C: L_08A72224: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8425))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A722A8; } @@ -6003,12 +5698,10 @@ L_08A72230: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A722A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A722A0u) goto L_08A722A0; AOT_REGCACHE_SYNC_OUT(); return; L_08A722A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A72318; } @@ -6064,7 +5757,6 @@ L_08A722A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A72318u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08A931B8, 163u, 0x08A931B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A72318u) goto L_08A72318; AOT_REGCACHE_SYNC_OUT(); return; L_08A72318: @@ -6072,7 +5764,6 @@ L_08A72318: goto L_08A7231C; L_08A7231C: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08A7135C; } @@ -6090,7 +5781,6 @@ L_08A72324: } L_08A72334: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A723A0; } @@ -6130,7 +5820,6 @@ L_08A7233C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(52), std::bit_cast(aot_fpr_13)); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A72398; } @@ -6176,7 +5865,17 @@ L_08A723A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A723D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(468), std::bit_cast(aot_fpr_20)); @@ -6259,7 +5958,6 @@ L_08A72474: } L_08A724AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7317C; } @@ -6285,7 +5983,6 @@ L_08A724BC: } L_08A724CC: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A7251C; } @@ -6293,7 +5990,6 @@ L_08A724CC: } L_08A724D4: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08A72500; } @@ -6302,7 +5998,6 @@ L_08A724D4: L_08A724DC: ctx.gpr[19] = (ctx.gpr[17] + static_cast(28)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7251C; } @@ -6318,7 +6013,6 @@ L_08A724E8: } L_08A724F0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A72518; } @@ -6326,7 +6020,6 @@ L_08A724F0: } L_08A724F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7251C; } @@ -6335,7 +6028,6 @@ L_08A724F8: L_08A72500: ctx.gpr[19] = (ctx.gpr[17] + static_cast(32)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7251C; } @@ -6344,7 +6036,6 @@ L_08A72500: L_08A7250C: ctx.gpr[19] = (ctx.gpr[17] + static_cast(12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7251C; } @@ -6356,7 +6047,6 @@ L_08A72518: L_08A7251C: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A73170; } @@ -6372,7 +6062,6 @@ L_08A72528: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7258C; } @@ -6384,7 +6073,6 @@ L_08A72550: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7258C; } @@ -6396,9 +6084,7 @@ L_08A72568: aot_gpr_5 = (aot_gpr_5 | 62915u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7258C; } @@ -6409,7 +6095,6 @@ L_08A72588: goto L_08A7258C; L_08A7258C: { const bool branch_taken = ctx.gpr[21] == aot_gpr_16; - // nop if (branch_taken) { goto L_08A73168; } @@ -6417,7 +6102,6 @@ L_08A7258C: } L_08A72594: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A73168; } @@ -6427,7 +6111,6 @@ L_08A7259C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(84))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A73168; } @@ -6439,7 +6122,6 @@ L_08A725AC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73168; } @@ -6570,7 +6252,6 @@ L_08A72664: L_08A72684: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[21]) <= 0; - // nop if (branch_taken) { goto L_08A73168; } @@ -6582,7 +6263,6 @@ L_08A72690: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72888; } @@ -6594,7 +6274,6 @@ L_08A726A8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72888; } @@ -6604,7 +6283,6 @@ L_08A726C0: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A730E4; } @@ -6624,7 +6302,6 @@ L_08A726D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A726F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A72870; } @@ -6645,7 +6322,6 @@ L_08A726FC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(32)); if (branch_taken) { @@ -6693,7 +6369,6 @@ L_08A72764: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(32)); if (branch_taken) { @@ -6812,7 +6487,6 @@ L_08A727CC: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A72854; @@ -6832,7 +6506,6 @@ L_08A72870: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A726D0; } @@ -6840,7 +6513,6 @@ L_08A72870: } L_08A72880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A730E4; } @@ -6852,7 +6524,6 @@ L_08A72888: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72BA4; } @@ -6934,7 +6605,6 @@ L_08A728A0: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72B44; } @@ -6954,7 +6624,6 @@ L_08A72920: AOT_REGCACHE_SYNC_OUT(); return; L_08A72944: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A72B34; } @@ -6975,7 +6644,6 @@ L_08A7294C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(128)); if (branch_taken) { @@ -7023,7 +6691,6 @@ L_08A729B4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(128)); if (branch_taken) { @@ -7142,7 +6809,6 @@ L_08A72A1C: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A72AA4; @@ -7179,7 +6845,6 @@ L_08A72AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08A72AF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A72B34; } @@ -7205,7 +6870,6 @@ L_08A72B34: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A72920; } @@ -7217,7 +6881,6 @@ L_08A72B44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A72B9C; } @@ -7265,7 +6928,6 @@ L_08A72B5C: goto L_08A72B9C; L_08A72B9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A730E4; } @@ -7277,7 +6939,6 @@ L_08A72BA4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72EB4; } @@ -7359,7 +7020,6 @@ L_08A72BBC: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A72E54; } @@ -7379,7 +7039,6 @@ L_08A72C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08A72C60: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A72E44; } @@ -7400,7 +7059,6 @@ L_08A72C68: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(232), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(224)); if (branch_taken) { @@ -7448,7 +7106,6 @@ L_08A72CD0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(232), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(224)); if (branch_taken) { @@ -7517,7 +7174,6 @@ L_08A72D38: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A72D7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 414u, 0x08A65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A72D7Cu) goto L_08A72D7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A72D7C: @@ -7537,7 +7193,6 @@ L_08A72D94: L_08A72D9C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08A72DB0; @@ -7575,7 +7230,6 @@ L_08A72DE8: AOT_REGCACHE_SYNC_OUT(); return; L_08A72E04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A72E44; } @@ -7601,7 +7255,6 @@ L_08A72E44: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A72C3C; } @@ -7613,7 +7266,6 @@ L_08A72E54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A72EAC; } @@ -7661,7 +7313,6 @@ L_08A72E6C: goto L_08A72EAC; L_08A72EAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A730E4; } @@ -7671,7 +7322,6 @@ L_08A72EB4: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A730E4; } @@ -7691,7 +7341,6 @@ L_08A72EC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A72EE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A730D4; } @@ -7712,7 +7361,6 @@ L_08A72EF0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(280), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(272)); if (branch_taken) { @@ -7760,7 +7408,6 @@ L_08A72F58: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(280), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(268))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(272)); if (branch_taken) { @@ -7879,7 +7526,6 @@ L_08A72FC0: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A73048; @@ -7915,7 +7561,6 @@ L_08A73078: AOT_REGCACHE_SYNC_OUT(); return; L_08A73094: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A730D4; } @@ -7941,7 +7586,6 @@ L_08A730D4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A72EC4; } @@ -7952,7 +7596,6 @@ L_08A730E4: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A73160; } @@ -7969,7 +7612,6 @@ L_08A730F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73134; } @@ -7982,7 +7624,6 @@ L_08A73124: AOT_REGCACHE_SYNC_OUT(); return; L_08A7312C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A73160; } @@ -7995,7 +7636,6 @@ L_08A73134: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73160; } @@ -8018,7 +7658,6 @@ L_08A73160: } L_08A73168: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A72528; } @@ -8053,7 +7692,17 @@ L_08A73180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A731B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -8084,7 +7733,6 @@ L_08A731D4: L_08A731E0: aot_gpr_4 = (static_cast(aot_gpr_4) < -992 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A731FC; } @@ -8100,7 +7748,6 @@ L_08A731EC: } L_08A731F4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A731EC; } @@ -8123,7 +7770,6 @@ L_08A73204: L_08A7320C: aot_gpr_4 = (static_cast(aot_gpr_4) < 191 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A731FC; } @@ -8131,7 +7777,6 @@ L_08A7320C: } L_08A73218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A731EC; } @@ -8139,7 +7784,6 @@ L_08A73218: } L_08A73220: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A731FC; } @@ -8147,7 +7791,6 @@ L_08A73220: } L_08A73228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A731EC; } @@ -8195,7 +7838,6 @@ L_08A73250: } L_08A73258: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A731EC; } @@ -8206,11 +7848,20 @@ L_08A73260: goto L_08A73264; L_08A73264: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7326C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -8243,7 +7894,6 @@ L_08A732A8: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(376))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15759u << 16u); if (branch_taken) { @@ -8257,7 +7907,6 @@ L_08A732C8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A732E8; @@ -8276,7 +7925,6 @@ L_08A732F0: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A7330C; @@ -8294,7 +7942,17 @@ L_08A73310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A73324: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -8371,9 +8029,7 @@ L_08A733AC: L_08A733BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73410; } @@ -8404,7 +8060,6 @@ L_08A733F4: L_08A73404: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A73578; } @@ -8424,7 +8079,6 @@ L_08A73420: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_gpr_4 = (16880u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -8452,7 +8106,6 @@ L_08A73470: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A73578; } @@ -8490,9 +8143,7 @@ L_08A734C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A734F0; } @@ -8588,7 +8239,17 @@ L_08A73584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A735B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -8625,7 +8286,6 @@ L_08A73600: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73620; } @@ -8664,7 +8324,6 @@ L_08A73640: aot_gpr_5 = (0u | 5u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A736C4; } @@ -8697,9 +8356,7 @@ L_08A73684: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A736C4; } @@ -8752,9 +8409,7 @@ L_08A736EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73734; } @@ -8857,7 +8512,17 @@ L_08A737D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A737F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), std::bit_cast(aot_fpr_20)); @@ -8919,7 +8584,6 @@ L_08A738A8: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A738D8; } @@ -8944,7 +8608,6 @@ L_08A738D8: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A73A8C; } @@ -8987,9 +8650,7 @@ L_08A7392C: aot_gpr_16 = (aot_gpr_16 + static_cast(292)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73980; } @@ -8998,9 +8659,7 @@ L_08A7392C: L_08A7396C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73A8C; } @@ -9035,9 +8694,7 @@ L_08A739B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73A8C; } @@ -9045,7 +8702,6 @@ L_08A739B0: } L_08A739D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08A739F0; @@ -9070,7 +8726,6 @@ L_08A73A10: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A73A8C; } @@ -9117,7 +8772,6 @@ L_08A73A8C: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A738A8; } @@ -9155,7 +8809,17 @@ L_08A73AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A73AF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -9193,7 +8857,6 @@ L_08A73B44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(86)))))); aot_gpr_5 = (0u | 227u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A73B6C; } @@ -9203,7 +8866,6 @@ L_08A73B54: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73B74; } @@ -9242,7 +8904,6 @@ L_08A73B94: aot_gpr_4 = (aot_gpr_4 + static_cast(195)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A73DF4; } @@ -9273,7 +8934,6 @@ L_08A73BC8: L_08A73BD8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73D2C; } @@ -9307,7 +8967,6 @@ L_08A73C1C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (static_cast(aot_gpr_5) < 45 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A73C70; } @@ -9367,7 +9026,6 @@ L_08A73CA4: aot_gpr_5 = (aot_gpr_5 + static_cast(195)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A73CC8; } @@ -9413,7 +9071,6 @@ L_08A73CF8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(44))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A73D7C; } @@ -9451,7 +9108,6 @@ L_08A73D58: } L_08A73D74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A73D94; } @@ -9528,7 +9184,17 @@ L_08A73E00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A73E24: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_4 = (aot_gpr_6 | 0u); @@ -9545,7 +9211,6 @@ L_08A73E24: } L_08A73E44: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A73F78; } @@ -9553,7 +9218,6 @@ L_08A73E44: } L_08A73E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A73E70; } @@ -9570,7 +9234,6 @@ L_08A73E54: } L_08A73E60: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A73EBC; } @@ -9578,7 +9241,6 @@ L_08A73E60: } L_08A73E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A73F78; } @@ -9589,7 +9251,6 @@ L_08A73E70: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16076u << 16u); if (branch_taken) { @@ -9611,7 +9272,6 @@ L_08A73E8C: goto L_08A73EB4; L_08A73EB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A73F78; } @@ -9622,9 +9282,7 @@ L_08A73EBC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73EF8; } @@ -9646,9 +9304,7 @@ L_08A73EF8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73F38; } @@ -9660,7 +9316,6 @@ L_08A73F18: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A73F38; @@ -9668,9 +9323,7 @@ L_08A73F18: goto L_08A73F38; L_08A73F38: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A73F4C; } @@ -9681,7 +9334,6 @@ L_08A73F48: goto L_08A73F4C; L_08A73F4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A73F78; } @@ -9694,7 +9346,6 @@ L_08A73F54: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(80))); aot_fpr_20 = aot_fpr_20 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A73F78; @@ -9745,7 +9396,6 @@ L_08A73FA8: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A73FE4; @@ -9754,7 +9404,6 @@ L_08A73FA8: L_08A73FE4: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08A73FF8; diff --git a/profiles/vcs/generated/generated_unit_0156.cpp b/profiles/vcs/generated/generated_unit_0156.cpp index 9cb6b79..ef089ce 100644 --- a/profiles/vcs/generated/generated_unit_0156.cpp +++ b/profiles/vcs/generated/generated_unit_0156.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0156[4085] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, - 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 0, 0, 25, - 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 0, 0, 29, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, 0, 34, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 41, 0, 0, 42, 0, - 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 48, 0, 49, 0, 0, 50, 0, 51, 0, - 0, 0, 52, 0, 53, 0, 54, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, - 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, - 0, 0, 69, 0, 0, 70, 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, - 77, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, - 0, 85, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 88, 0, 89, 0, 0, 0, 90, 0, 0, 0, 0, 91, 0, 0, 0, 0, 92, 0, 0, 0, - 93, 0, 0, 0, 94, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 0, 101, - 0, 0, 0, 102, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 105, 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, - 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 113, 0, 0, 0, 0, 114, - 0, 0, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 125, 126, 0, 127, 0, - 0, 128, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 140, 0, 141, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, - 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 152, - 0, 0, 0, 0, 153, 0, 0, 0, 154, 0, 0, 0, 155, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 158, 0, 0, 0, 159, 0, 0, 0, 0, 0, 160, 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, - 0, 165, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 0, 169, 0, 0, - 170, 0, 0, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 0, 0, 0, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 182, 0, 0, 183, 0, 184, 0, 185, 0, 0, 186, 0, 187, 0, 0, 188, 0, 0, 0, 189, 0, 0, 0, 190, 0, 0, - 0, 0, 191, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 200, 0, 201, 0, 0, 0, 202, 0, 203, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, - 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 211, 0, 212, 0, 0, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, 0, - 217, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 222, 0, 223, 0, 0, 224, 0, 225, 0, 0, 0, 0, 0, 0, - 226, 0, 227, 0, 0, 0, 0, 0, 228, 229, 0, 230, 0, 0, 0, 0, 0, 0, 231, 232, 0, 0, 0, 233, 234, 0, 0, 0, 0, 0, 235, 0, - 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, - 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, - 0, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 252, 0, 253, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 0, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 261, 262, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 264, 0, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 0, - 0, 274, 0, 275, 0, 0, 0, 276, 0, 277, 0, 278, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, - 283, 0, 0, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, - 0, 299, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 304, 305, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 310, 0, 0, 311, 0, 312, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 316, 0, 317, 0, 318, 0, 0, 0, 0, - 319, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 326, 0, 327, 0, 0, 0, 0, 328, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 334, - 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, - 0, 0, 0, 341, 0, 342, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 346, - 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 353, 0, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, - 0, 0, 0, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, - 0, 371, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 375, 0, 376, 0, 377, 0, 0, 0, 378, 0, 0, - 0, 379, 0, 0, 0, 380, 0, 0, 381, 0, 382, 0, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, 385, 386, 0, 0, 387, 0, 0, 388, 0, 0, - 0, 0, 389, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 403, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 406, 407, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, - 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, 0, 413, 0, 414, 0, 0, 0, 0, 0, 415, 0, - 0, 0, 416, 0, 417, 0, 0, 418, 0, 0, 0, 0, 0, 419, 0, 0, 0, 420, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, - 424, 0, 425, 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 429, 0, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, - 433, 0, 0, 434, 0, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 437, 0, 438, 0, 0, 439, 0, 440, 0, 441, 0, 442, 0, 0, 0, 443, 0, - 0, 444, 0, 445, 0, 0, 446, 0, 0, 447, 0, 0, 448, 0, 0, 449, 0, 0, 450, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 454, - 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 458, 0, 0, 459, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 0, 0, - 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 471, 0, 0, 472, 0, 0, 0, 473, 474, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 478, 0, 0, 0, 479, 0, 480, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 0, 483, 484, 0, 485, 0, 0, 486, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 489, 0, 490, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 493, 494, 0, 495, 0, 0, 496, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 499, - 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 505, 0, - 0, 0, 506, 507, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, 0, 0, - 0, 515, 0, 516, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 519, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 522, 523, 0, 524, 525, 0, 0, 0, 0, 526, 0, 0, 527, 0, 0, 0, 528, 0, - 0, 0, 529, 530, 0, 531, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 541, 542, 0, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 547, 548, 0, 0, 0, - 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, - 0, 552, 0, 0, 0, 553, 0, 0, 0, 554, 555, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 562, 0, 563, 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 568, 0, 0, 0, 569, 0, 0, 0, - 570, 571, 0, 572, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 581, 0, 582, 0, 583, - 0, 0, 584, 0, 585, 0, 0, 0, 586, 587, 588, 0, 589, 0, 590, 0, 591, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 596, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 601, 602, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 606, 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 609, 0, 0, 0, 610, 0, 0, 611, 0, 612, 0, 0, 613, 0, 0, 0, 0, 614, 0, 615, 0, - 0, 0, 616, 0, 0, 0, 617, 618, 0, 0, 619, 0, 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, - 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, - 629, 0, 630, 0, 0, 0, 631, 0, 0, 632, 0, 0, 0, 633, 634, 635, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, - 0, 0, 640, 641, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 644, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 654, 0, 0, 655, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 658, 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, - 0, 0, 0, 0, 663, 0, 0, 0, 0, 664, 0, 0, 665, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 669, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 671, 0, 672, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 677, 0, 678, 0, 679, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 682, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 691, 0, 0, 0, 0, 692, 0, 0, - 693, 0, 0, 694, 0, 0, 0, 695, 696, 0, 0, 0, 697, 698, 0, 0, 699, 0, 700, 0, 0, 701, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 711, - 0, 0, 0, 712, 0, 713, 0, 0, 0, 0, 714, 0, 715, 716, 0, 717, 0, 0, 718, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 723, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 0, 728, 0, 729, 0, 0, 0, 730, 0, 0, 0, 731, 0, 0, 732, 0, 0, - 0, 0, 733, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 741, 0, 742, 0, 0, 0, 743, 0, 0, 0, 744, 0, 745, 0, 0, 0, 746, - 747, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 750, 0, 0, 0, 0, 0, 0, 751, 0, 752, 0, 753, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 757, 0, 758, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 760, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 765, 0, 766, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, - 0, 769, 0, 770, 0, 0, 771, 0, 0, 0, 772, 0, 0, 0, 0, 773, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 775, 776, 0, 0, 0, 0, - 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 780, 781, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0156[64] = { + 0x0104200111102009ull, 0x8AAAA12424800000ull, 0x4A1111405402A488ull, 0x2422215452891088ull, + 0x21110A2444448444ull, 0x1084512222242221ull, 0x0410C30888428611ull, 0x0044048884400054ull, + 0x0A1100A258528001ull, 0x2200048500222110ull, 0x0008911088024428ull, 0x2088002211084822ull, + 0x068004A080100091ull, 0x22252A4000001000ull, 0x4442A28211124504ull, 0x02960A052A850488ull, + 0x22044004418C0B05ull, 0x0002820848002082ull, 0x6800908480006848ull, 0x0888555200004000ull, + 0x0108155141110A8Aull, 0x0200221100440080ull, 0x00400D000C221202ull, 0x088841110A8A8A40ull, + 0x50044420888550A0ull, 0x00044008810002A8ull, 0x000201A000100408ull, 0x4408604881112210ull, + 0x24C9052222A08142ull, 0x1000020034004084ull, 0x440680808A850200ull, 0x104A209441510004ull, + 0x4552A20944128825ull, 0x0A4924929124924Aull, 0x0000100000291008ull, 0x512259200A244B12ull, + 0x000004028912C900ull, 0x0000400000000000ull, 0x0010102C45000000ull, 0x0040008A04400088ull, + 0x180A006C4486C448ull, 0x1A40883002120200ull, 0x0808162280004020ull, 0x1140209500108400ull, + 0xA92004220004041Bull, 0x00080C2802815714ull, 0x0000000000000012ull, 0x50948885000448C0ull, + 0x22012024020214C4ull, 0x800000000424E245ull, 0x022042000085420Cull, 0x0004052000094000ull, + 0x3400521020011120ull, 0x54A0840A00000200ull, 0x0908408011400000ull, 0x5025318921108400ull, + 0xA000428000403000ull, 0x022048110024B428ull, 0x1010481424450500ull, 0x540A00058A228880ull, + 0x0000000020280000ull, 0xA804102200000828ull, 0x0C04844A02010000ull, 0x0010000001880014ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0156[64] = { + 1u, 11u, 26u, 43u, 61u, 77u, 93u, 109u, 120u, 135u, 146u, 158u, 170u, 181u, 191u, 208u, + 226u, 241u, 250u, 263u, 274u, 291u, 299u, 310u, 326u, 341u, 350u, 357u, 371u, 389u, 397u, 410u, + 424u, 444u, 465u, 471u, 491u, 502u, 503u, 511u, 519u, 537u, 549u, 559u, 570u, 584u, 599u, 601u, + 616u, 629u, 640u, 651u, 658u, 670u, 680u, 688u, 704u, 712u, 726u, 739u, 754u, 757u, 767u, 777u, }; void recomp_unit_0156_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0156_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A74000u; - entry_id = (entry_delta < 16340u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0156[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16340u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0156[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0156[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A74000; @@ -960,7 +867,17 @@ L_08A74000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7400C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(ctx.fpr[20])); @@ -981,7 +898,6 @@ L_08A74034: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(80))); ctx.fpr[20] = ctx.fpr[20] / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_08A74050; @@ -1030,7 +946,6 @@ L_08A74080: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_08A740B4; @@ -1039,7 +954,6 @@ L_08A74080: L_08A740B4: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A740C8; @@ -1058,7 +972,17 @@ L_08A740C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A740E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (0u | 0u); @@ -1100,7 +1024,6 @@ L_08A7415C: L_08A74168: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A74988; } @@ -1129,7 +1052,6 @@ L_08A74188: L_08A74194: aot_gpr_6 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A741FC; } @@ -1156,7 +1078,6 @@ L_08A741B4: } L_08A741BC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A741A0; } @@ -1164,7 +1085,6 @@ L_08A741BC: } L_08A741C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A741FC; } @@ -1188,7 +1108,6 @@ L_08A741D4: } L_08A741DC: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A741A0; } @@ -1196,7 +1115,6 @@ L_08A741DC: } L_08A741E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A741FC; } @@ -1216,7 +1134,6 @@ L_08A741FC: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A74228; } @@ -1249,7 +1166,6 @@ L_08A74234: } L_08A7423C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A74268; } @@ -1280,7 +1196,6 @@ L_08A74268: } L_08A74270: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A74268; } @@ -1330,7 +1245,6 @@ L_08A742D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7431C; } @@ -1338,7 +1252,6 @@ L_08A742D0: } L_08A742E4: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08A742F8; } @@ -1347,7 +1260,6 @@ L_08A742E4: L_08A742EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(54))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7431C; } @@ -1356,7 +1268,6 @@ L_08A742EC: L_08A742F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); if (branch_taken) { @@ -1409,7 +1320,6 @@ L_08A7434C: } L_08A7435C: { const bool branch_taken = ctx.gpr[30] != 0u; - // nop if (branch_taken) { goto L_08A74370; } @@ -1418,7 +1328,6 @@ L_08A7435C: L_08A74364: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(54))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A74378; } @@ -1426,7 +1335,6 @@ L_08A74364: } L_08A74370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A746BC; } @@ -1452,7 +1360,6 @@ L_08A74388: } L_08A74390: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A745B8; } @@ -1460,7 +1367,6 @@ L_08A74390: } L_08A74398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A746BC; } @@ -1502,7 +1408,6 @@ L_08A743D4: L_08A743E8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(220))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A744A4; } @@ -1544,7 +1449,6 @@ L_08A74428: L_08A7443C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(220))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A74458; } @@ -1594,7 +1498,6 @@ L_08A74494: goto L_08A744A4; L_08A744A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A746BC; } @@ -1636,7 +1539,6 @@ L_08A744E0: L_08A744F4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(216))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A745B0; } @@ -1678,7 +1580,6 @@ L_08A74534: L_08A74548: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(216))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A74564; } @@ -1728,7 +1629,6 @@ L_08A745A0: goto L_08A745B0; L_08A745B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A746BC; } @@ -1778,7 +1678,6 @@ L_08A74610: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(216))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A74628; } @@ -1792,7 +1691,6 @@ L_08A74628: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A745DC; } @@ -1840,7 +1738,6 @@ L_08A7468C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(216))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A746A4; } @@ -1854,7 +1751,6 @@ L_08A746A4: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A74658; } @@ -1866,9 +1762,7 @@ L_08A746B8: L_08A746BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A74844; } @@ -1892,7 +1786,6 @@ L_08A746E8: aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_22) & 0x7FFFFFFFu); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A74708; @@ -1900,7 +1793,6 @@ L_08A746E8: goto L_08A74708; L_08A74708: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A74870; } @@ -1928,7 +1820,6 @@ L_08A74718: ctx.fpr[15] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[24]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A74758; @@ -1936,7 +1827,6 @@ L_08A74718: goto L_08A74758; L_08A74758: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(ctx.fpr[26])) && aot_fpr_22 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); goto L_08A747D8; @@ -1979,7 +1869,6 @@ L_08A747A8: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(0))); goto L_08A747D8; @@ -2020,7 +1909,6 @@ L_08A74800: aot_fpr_22 = ctx.fpr[20] - aot_fpr_22; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[20])); goto L_08A7483C; @@ -2028,7 +1916,6 @@ L_08A74800: goto L_08A7483C; L_08A7483C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A74870; } @@ -2103,7 +1990,6 @@ L_08A7489C: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - aot_fpr_14; goto L_08A748D0; @@ -2128,7 +2014,6 @@ L_08A748D0: goto L_08A748E4; L_08A748E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A74944; } @@ -2141,7 +2026,6 @@ L_08A748EC: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - aot_fpr_14; goto L_08A74920; @@ -2172,9 +2056,7 @@ L_08A74934: goto L_08A74944; L_08A74944: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A74980; } @@ -2215,7 +2097,6 @@ L_08A74988: L_08A7499C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(54))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A74A14; } @@ -2234,7 +2115,6 @@ L_08A749A8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2276,7 +2156,6 @@ L_08A74A28: aot_mem.aot_direct_store8(ctx.gpr[21] + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A74CDC; } @@ -2285,7 +2164,6 @@ L_08A74A28: L_08A74A38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(54))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A74C10; } @@ -2340,7 +2218,6 @@ L_08A74AA0: L_08A74AB0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08A74B4C; } @@ -2348,7 +2225,6 @@ L_08A74AB0: } L_08A74ABC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (2232u << 16u); if (branch_taken) { @@ -2368,7 +2244,6 @@ L_08A74ACC: aot_gpr_5 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(56), aot_gpr_4); if (branch_taken) { @@ -2439,7 +2314,6 @@ L_08A74B70: goto L_08A74B84; L_08A74B84: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (17948u << 16u); if (branch_taken) { @@ -2459,7 +2333,6 @@ L_08A74B94: aot_gpr_5 = (20224u << 16u); aot_fpr_22 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(56), aot_gpr_4); if (branch_taken) { @@ -2555,7 +2428,6 @@ L_08A74C7C: } L_08A74C94: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A74CA8; } @@ -2618,7 +2490,17 @@ L_08A74CE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A74D30: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(ctx.fpr[20])); @@ -2658,7 +2540,6 @@ L_08A74D98: } L_08A74DA4: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08A74DC8; } @@ -2675,7 +2556,6 @@ L_08A74DAC: L_08A74DB4: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A74DAC; } @@ -2683,7 +2563,6 @@ L_08A74DB4: } L_08A74DC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A74E44; } @@ -2722,7 +2601,6 @@ L_08A74E08: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(209))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A74E28; } @@ -2736,7 +2614,6 @@ L_08A74E28: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_5 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A74DD4; } @@ -2784,7 +2661,6 @@ L_08A74E84: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(209))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A74EA4; } @@ -2798,7 +2674,6 @@ L_08A74EA4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_5 = (static_cast(ctx.gpr[17]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A74E50; } @@ -2810,7 +2685,6 @@ L_08A74EB4: goto L_08A74EBC; L_08A74EBC: { const bool branch_taken = static_cast(aot_gpr_16) <= 0; - // nop if (branch_taken) { goto L_08A752EC; } @@ -2845,7 +2719,6 @@ L_08A74EF8: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A74F28; } @@ -2869,7 +2742,6 @@ L_08A74F28: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(216))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A74F48; } @@ -2877,7 +2749,6 @@ L_08A74F28: } L_08A74F40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A75060; } @@ -2888,7 +2759,6 @@ L_08A74F48: aot_gpr_6 = (0u | 82u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(92)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A74F74; } @@ -2896,7 +2766,6 @@ L_08A74F48: } L_08A74F5C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A74FD0; } @@ -2904,7 +2773,6 @@ L_08A74F5C: } L_08A74F64: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A7502C; } @@ -2912,7 +2780,6 @@ L_08A74F64: } L_08A74F6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7504C; } @@ -2929,7 +2796,6 @@ L_08A74F74: } L_08A74F80: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A74FAC; } @@ -2966,7 +2832,6 @@ L_08A74FC4: goto L_08A74FC8; L_08A74FC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7504C; } @@ -2983,7 +2848,6 @@ L_08A74FD0: } L_08A74FDC: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A75008; } @@ -3020,7 +2884,6 @@ L_08A75020: goto L_08A75024; L_08A75024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7504C; } @@ -3041,9 +2904,7 @@ L_08A75048: goto L_08A7504C; L_08A7504C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A75060; } @@ -3058,7 +2919,6 @@ L_08A75060: ctx.gpr[17] = (ctx.gpr[17] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A74EF8; } @@ -3066,7 +2926,6 @@ L_08A75060: } L_08A75078: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (0u | 1u); if (branch_taken) { @@ -3141,11 +3000,20 @@ L_08A7511C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(8624))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A75134: aot_gpr_4 = (17995u << 16u); aot_gpr_4 = (aot_gpr_4 | 8192u); @@ -3158,7 +3026,6 @@ L_08A75134: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(56), aot_gpr_4); ctx.fpr[24] = ctx.fpr[24] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(72))); if (branch_taken) { @@ -3188,7 +3055,6 @@ L_08A7518C: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(72), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(72))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A751BC; } @@ -3230,7 +3096,6 @@ L_08A751C4: aot_gpr_5 = (0u | 8u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 + static_cast(-28320)); if (branch_taken) { @@ -3280,7 +3145,6 @@ L_08A75238: aot_gpr_5 = (0u | 8u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 + static_cast(-28320)); if (branch_taken) { @@ -3309,7 +3173,6 @@ L_08A7529C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A752BC; } @@ -3368,7 +3231,17 @@ L_08A752F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A75338: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (17817u << 16u); @@ -3403,7 +3276,6 @@ L_08A75384: } L_08A75390: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A75498; } @@ -3411,7 +3283,6 @@ L_08A75390: } L_08A75398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A753B0; } @@ -3419,7 +3290,6 @@ L_08A75398: } L_08A753A0: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A75424; } @@ -3427,7 +3297,6 @@ L_08A753A0: } L_08A753A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A75498; } @@ -3465,7 +3334,6 @@ L_08A753EC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(209))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7540C; } @@ -3479,7 +3347,6 @@ L_08A7540C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A753B8; } @@ -3525,7 +3392,6 @@ L_08A75460: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(209))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A75480; } @@ -3539,7 +3405,6 @@ L_08A75480: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7542C; } @@ -3559,7 +3424,6 @@ L_08A75498: goto L_08A754A0; L_08A754A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A756A0; } @@ -3567,7 +3431,6 @@ L_08A754A0: } L_08A754A8: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08A756A0; } @@ -3578,9 +3441,7 @@ L_08A754B0: ctx.fpr[20] = std::bit_cast(std::bit_cast(ctx.fpr[20]) & 0x7FFFFFFFu); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A756A0; } @@ -3607,7 +3468,6 @@ L_08A754E0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_22 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A7551C; @@ -3631,7 +3491,6 @@ L_08A75548: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(72), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A756A0; } @@ -3681,8 +3540,6 @@ L_08A755B4: { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (0u | 30u); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_4; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (0u | 25u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(56), aot_gpr_4); @@ -3728,7 +3585,6 @@ L_08A75624: L_08A75630: { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[20] - aot_fpr_13; goto L_08A75654; @@ -3799,7 +3655,17 @@ L_08A756AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A756D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -3832,7 +3698,6 @@ L_08A75718: } L_08A75724: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A75764; } @@ -3842,7 +3707,6 @@ L_08A7572C: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7576C; } @@ -3850,7 +3714,6 @@ L_08A7572C: } L_08A7573C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A75830; } @@ -3858,7 +3721,6 @@ L_08A7573C: } L_08A75744: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A75764; } @@ -3868,7 +3730,6 @@ L_08A7574C: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A75848; } @@ -3876,7 +3737,6 @@ L_08A7574C: } L_08A7575C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7590C; } @@ -3918,7 +3778,6 @@ L_08A757A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(216))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7581C; } @@ -3954,9 +3813,7 @@ L_08A757EC: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7581C; } @@ -3975,7 +3832,6 @@ L_08A7581C: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7576C; } @@ -3983,7 +3839,6 @@ L_08A7581C: } L_08A75830: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A75840; } @@ -3991,7 +3846,6 @@ L_08A75830: } L_08A75838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A75924; } @@ -4033,7 +3887,6 @@ L_08A7587C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(216))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A758F8; } @@ -4069,9 +3922,7 @@ L_08A758C8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A758F8; } @@ -4090,7 +3941,6 @@ L_08A758F8: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A75848; } @@ -4098,7 +3948,6 @@ L_08A758F8: } L_08A7590C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A7591C; } @@ -4106,7 +3955,6 @@ L_08A7590C: } L_08A75914: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A75924; } @@ -4133,7 +3981,6 @@ L_08A75924: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fpr[20] = ctx.fpr[20] / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A75960; @@ -4144,9 +3991,7 @@ L_08A75960: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A75A94; } @@ -4198,7 +4043,6 @@ L_08A759C8: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17835u << 16u); if (branch_taken) { @@ -4278,7 +4122,17 @@ L_08A75AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A75AC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (17981u << 16u); @@ -4326,7 +4180,6 @@ L_08A75B40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(96))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(176))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A75D68; } @@ -4371,7 +4224,6 @@ L_08A75B98: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A75BB8; } @@ -4410,7 +4262,6 @@ L_08A75BE8: L_08A75BF8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(72))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A75D68; } @@ -4426,7 +4277,6 @@ L_08A75C04: AOT_REGCACHE_SYNC_OUT(); return; L_08A75C18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A75D1C; } @@ -4439,7 +4289,6 @@ L_08A75C20: aot_gpr_5 = (aot_gpr_5 & 496u); aot_gpr_5 = (aot_gpr_5 >> 4u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A75C5C; } @@ -4507,7 +4356,6 @@ L_08A75C94: } L_08A75CA0: { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A75CE8; } @@ -4519,7 +4367,6 @@ L_08A75CA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A75CCC; } @@ -4555,7 +4402,6 @@ L_08A75CDC: L_08A75CE8: aot_gpr_4 = (0u | 34u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A75D08; } @@ -4636,7 +4482,17 @@ L_08A75D74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A75DA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(352))); @@ -4683,14 +4539,22 @@ L_08A75E24: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(8752))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A75E40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A761EC; } @@ -4709,7 +4573,6 @@ L_08A75E48: } L_08A75E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A75E7C; } @@ -4717,7 +4580,6 @@ L_08A75E5C: } L_08A75E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A761EC; } @@ -4758,7 +4620,6 @@ L_08A75E9C: aot_gpr_4 = (aot_gpr_4 + static_cast(-170)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_4); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A75EC4; } @@ -5033,7 +4894,6 @@ L_08A760A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A760B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A760C4; } @@ -5054,7 +4914,6 @@ L_08A760C4: } L_08A760D0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A761EC; } @@ -5062,7 +4921,6 @@ L_08A760D0: } L_08A760D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A76160; } @@ -5070,7 +4928,6 @@ L_08A760D8: } L_08A760E0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A761EC; } @@ -5090,7 +4947,6 @@ L_08A760F8: goto L_08A75338; L_08A76104: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A76154; } @@ -5151,7 +5007,6 @@ L_08A76170: goto L_08A75338; L_08A7617C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A761E4; } @@ -5220,7 +5075,17 @@ L_08A761EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7620C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); @@ -5279,7 +5144,17 @@ L_08A76254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A762B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5339,7 +5214,6 @@ L_08A76338: L_08A76348: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A7636C; } @@ -5412,7 +5286,6 @@ L_08A763C4: L_08A763D4: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A763F8; } @@ -5485,7 +5358,6 @@ L_08A76450: L_08A76460: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A76484; } @@ -5522,7 +5394,17 @@ L_08A76484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A764A8: ctx.gpr[2] = (0u | 58u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(ctx.gpr[2])); @@ -5595,7 +5477,17 @@ L_08A764A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A765B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[12]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5737,7 +5629,6 @@ L_08A76758: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A7678C; } @@ -5754,7 +5645,6 @@ L_08A76768: goto L_08A76DCC; L_08A76784: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7679C; } @@ -5789,7 +5679,17 @@ L_08A7679C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A767D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5955,7 +5855,6 @@ L_08A76924: L_08A76944: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A76A14; } @@ -6027,7 +5926,6 @@ L_08A769D8: goto L_08A769E4; L_08A769E4: aot_gpr_31 = (0x08A769ECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A769ECu) goto L_08A769EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A769EC: @@ -6042,7 +5940,6 @@ L_08A769F0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A769AC; } @@ -6064,7 +5961,17 @@ L_08A76A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A76A38: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6195,7 +6102,6 @@ L_08A76B50: AOT_REGCACHE_SYNC_OUT(); return; L_08A76B80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A76B90; } @@ -6223,7 +6129,17 @@ L_08A76B9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A76BB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_31); @@ -6328,7 +6244,17 @@ L_08A76C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A76CA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6337,7 +6263,6 @@ L_08A76CA8: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A76D40; } @@ -6359,7 +6284,6 @@ L_08A76CE0: goto L_08A7725C; L_08A76CEC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A76D30; } @@ -6412,7 +6336,6 @@ L_08A76D30: goto L_08A76D38; L_08A76D38: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A76CD4; } @@ -6432,14 +6355,34 @@ L_08A76D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A76D5C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(28), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A76D64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6449,7 +6392,6 @@ L_08A76D64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.gpr[17] = (aot_gpr_5 | 0u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A76DAC; } @@ -6465,7 +6407,6 @@ L_08A76D94: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A76D8C; } @@ -6489,7 +6430,17 @@ L_08A76DAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A76DCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6584,7 +6535,6 @@ L_08A76F1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A76F48; } @@ -6730,7 +6680,6 @@ L_08A7701C: } L_08A77028: aot_gpr_31 = (0x08A77030u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A77030u) goto L_08A77030; AOT_REGCACHE_SYNC_OUT(); return; L_08A77030: @@ -6754,7 +6703,17 @@ L_08A77044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77064: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6773,7 +6732,17 @@ L_08A77088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6791,7 +6760,17 @@ L_08A770B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A770C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6800,7 +6779,6 @@ L_08A770C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A77154; } @@ -6810,7 +6788,6 @@ L_08A770E4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A77148; } @@ -6819,7 +6796,6 @@ L_08A770E4: L_08A770F4: ctx.gpr[8] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(2))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08A77148; } @@ -6863,7 +6839,6 @@ L_08A77138: L_08A7713C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(20), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A77154; } @@ -6872,7 +6847,6 @@ L_08A7713C: L_08A77148: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A770E4; } @@ -6890,7 +6864,17 @@ L_08A77154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6959,7 +6943,6 @@ L_08A77168: aot_gpr_5 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -6982,7 +6965,6 @@ L_08A7720C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(204))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A77240; } @@ -7001,7 +6983,6 @@ L_08A77224: AOT_REGCACHE_SYNC_OUT(); return; L_08A77238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A77248; } @@ -7009,7 +6990,6 @@ L_08A77238: } L_08A77240: aot_gpr_31 = (0x08A77248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 241u, 0x0887CD60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A77248u) goto L_08A77248; AOT_REGCACHE_SYNC_OUT(); return; L_08A77248: @@ -7021,7 +7001,17 @@ L_08A77248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7725C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -7048,7 +7038,6 @@ L_08A772B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(64))); ctx.fpr[20] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (ctx.gpr[17] + static_cast(16)); if (branch_taken) { @@ -7091,7 +7080,6 @@ L_08A772E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A77338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A77394; } @@ -7100,7 +7088,6 @@ L_08A77338: L_08A77340: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A77394; } @@ -7135,7 +7122,6 @@ L_08A77394: AOT_REGCACHE_SYNC_OUT(); return; L_08A773A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A77414; } @@ -7238,9 +7224,7 @@ L_08A77440: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A774F0; } @@ -7251,9 +7235,7 @@ L_08A77474: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A774F0; } @@ -7264,7 +7246,6 @@ L_08A77490: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A774B8; } @@ -7277,7 +7258,6 @@ L_08A774A4: goto L_08A76BB4; L_08A774B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A774E8; } @@ -7328,7 +7308,17 @@ L_08A774F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77524: aot_gpr_4 = (0u | 52u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10016), static_cast(aot_gpr_4)); @@ -7357,7 +7347,17 @@ L_08A77524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77584: aot_fpr_13 = std::bit_cast(0u); aot_gpr_6 = (0u | 0u); @@ -7367,9 +7367,7 @@ L_08A7758C: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A775E8; } @@ -7378,9 +7376,7 @@ L_08A7758C: L_08A775A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A775DC; } @@ -7400,7 +7396,6 @@ L_08A775BC: } L_08A775D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A775F0; } @@ -7425,11 +7420,20 @@ L_08A775E8: } L_08A775F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A775F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8360))); @@ -7457,7 +7461,6 @@ L_08A775F8: } L_08A77658: aot_gpr_31 = (0x08A77660u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A77660u) goto L_08A77660; AOT_REGCACHE_SYNC_OUT(); return; L_08A77660: @@ -7480,7 +7483,6 @@ L_08A77670: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08A7769Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7769Cu) goto L_08A7769C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7769C: @@ -7532,7 +7534,6 @@ L_08A776EC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08A77728u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A77728u) goto L_08A77728; AOT_REGCACHE_SYNC_OUT(); return; L_08A77728: @@ -7579,9 +7580,7 @@ L_08A77780: goto L_08A7778C; L_08A7778C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A777A0; } @@ -7592,9 +7591,7 @@ L_08A7779C: goto L_08A777A0; L_08A777A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A777B4; } @@ -7610,7 +7607,6 @@ L_08A777B4: goto L_08A777C0; L_08A777C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A777F8; } @@ -7619,7 +7615,6 @@ L_08A777C0: L_08A777C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(10024))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A777F8; } @@ -7663,7 +7658,17 @@ L_08A777F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77830: ctx.gpr[10] = (0u | 0u); goto L_08A77834; @@ -7697,9 +7702,7 @@ L_08A77858: ctx.fpr[16] = std::sqrt(ctx.fpr[16]); ctx.fpr[18] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A778A4; } @@ -7739,7 +7742,6 @@ L_08A778B8: goto L_08A778F4; L_08A778F4: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_08A7790C; } @@ -7783,7 +7785,6 @@ L_08A77930: goto L_08A77934; L_08A77934: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A77A74; } @@ -7792,7 +7793,6 @@ L_08A77934: L_08A7793C: ctx.gpr[11] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(716))); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08A77A74; } @@ -7816,9 +7816,7 @@ L_08A77954: { const float fs = ctx.fpr[0]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[3] = std::bit_cast(0x7FC00000u); else ctx.fpr[3] = fs * ft; } ctx.fpr[1] = ctx.fpr[1] + ctx.fpr[3]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A77A74; } @@ -7826,9 +7824,7 @@ L_08A77954: } L_08A77980: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A77A74; } @@ -7839,9 +7835,7 @@ L_08A77990: { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } ctx.fpr[0] = ctx.fpr[2] + ctx.fpr[0]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A77A74; } @@ -7850,7 +7844,6 @@ L_08A77990: L_08A779AC: ctx.gpr[11] = (static_cast(ctx.gpr[10]) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08A779D4; } @@ -7888,9 +7881,7 @@ L_08A779E4: { const float fs = ctx.fpr[3]; const float ft = ctx.fpr[3]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[3] = std::bit_cast(0x7FC00000u); else ctx.fpr[3] = fs * ft; } ctx.fpr[2] = ctx.fpr[2] + ctx.fpr[3]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A77A28; } @@ -7914,7 +7905,6 @@ L_08A77A28: } L_08A77A40: { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A77A74; } @@ -7922,9 +7912,7 @@ L_08A77A40: } L_08A77A48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A77A68; } @@ -7934,7 +7922,6 @@ L_08A77A58: ctx.gpr[11] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(72))); ctx.gpr[11] = (ctx.gpr[11] & 496u); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_08A77A74; } @@ -7958,11 +7945,20 @@ L_08A77A74: } L_08A77A88: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77A90: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5576))); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); @@ -7985,7 +7981,6 @@ L_08A77AB8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(260))); ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); goto L_08A77AF0; @@ -8014,9 +8009,7 @@ L_08A77AF0: { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A77BF0; } @@ -8052,7 +8045,6 @@ L_08A77B44: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(612))); ctx.gpr[8] = (0u | 2u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A77B6C; } @@ -8087,7 +8079,6 @@ L_08A77B7C: goto L_08A77B80; L_08A77B80: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A77BCC; } @@ -8137,11 +8128,20 @@ L_08A77BE8: goto L_08A77BF0; L_08A77BF0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A77BF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-400)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(348), aot_gpr_16); @@ -8157,7 +8157,6 @@ L_08A77BF8: AOT_REGCACHE_SYNC_OUT(); return; L_08A77C4C: aot_gpr_31 = (0x08A77C54u); - // nop goto L_08A77830; L_08A77C54: aot_gpr_4 = (15395u << 16u); @@ -8302,7 +8301,6 @@ L_08A77DEC: } L_08A77DF4: { const bool branch_taken = ctx.gpr[22] != ctx.gpr[8]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 29u, 0x08A783C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8389,7 +8387,6 @@ L_08A77EC8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), std::bit_cast(ctx.fpr[0])); ctx.gpr[17] = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -8434,7 +8431,6 @@ L_08A77F10: ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_fpr_14 = ctx.fpr[15] - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08A77F4C; @@ -8442,7 +8438,6 @@ L_08A77F10: goto L_08A77F4C; L_08A77F4C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_08A77F5C; @@ -8477,7 +8472,6 @@ L_08A77F60: { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fpr[15] = ctx.fpr[15] + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), std::bit_cast(ctx.fpr[16])); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0157.cpp b/profiles/vcs/generated/generated_unit_0157.cpp index 165c0b5..5a20c7c 100644 --- a/profiles/vcs/generated/generated_unit_0157.cpp +++ b/profiles/vcs/generated/generated_unit_0157.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0157[4091] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, - 8, 9, 0, 10, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 42, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 64, 65, - 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, 70, 71, 0, 0, 72, 0, 0, 0, 0, 0, 73, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 76, 77, 0, 0, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 83, 84, 0, 0, 85, - 0, 0, 86, 0, 87, 88, 0, 89, 0, 0, 90, 0, 91, 0, 92, 93, 0, 94, 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 102, 103, 0, 0, - 104, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 108, 0, 0, 109, 0, 110, 111, - 0, 112, 0, 0, 113, 0, 114, 0, 115, 116, 0, 117, 0, 118, 0, 119, 0, 0, 0, 120, 0, 0, 121, 0, 122, 123, 0, 0, 124, 0, 0, 0, - 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 129, 0, 0, 130, - 0, 131, 132, 0, 133, 0, 0, 134, 0, 135, 0, 136, 137, 0, 138, 0, 139, 0, 140, 0, 0, 0, 141, 0, 0, 142, 0, 143, 144, 0, 0, 145, - 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, 150, - 0, 0, 151, 0, 152, 153, 0, 154, 0, 0, 155, 0, 156, 0, 157, 158, 0, 159, 0, 160, 0, 161, 0, 0, 0, 162, 0, 0, 163, 0, 164, 165, - 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 171, 0, 0, 172, 173, 0, 0, 174, 0, 0, 175, 0, 176, 177, 0, 178, 0, 0, - 179, 0, 180, 0, 181, 182, 0, 183, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 188, 189, 0, 0, 190, 0, 0, 0, 0, - 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 195, 196, 0, 0, 197, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, - 0, 0, 0, 0, 201, 0, 0, 202, 203, 0, 0, 204, 0, 0, 205, 0, 206, 207, 0, 208, 0, 0, 209, 0, 210, 0, 211, 212, 0, 213, 0, 214, - 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 218, 219, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, - 0, 0, 225, 0, 0, 226, 227, 0, 0, 228, 0, 0, 229, 0, 230, 231, 0, 232, 0, 0, 233, 0, 234, 0, 235, 236, 0, 237, 0, 238, 0, 239, - 0, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 242, 243, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, - 249, 0, 0, 250, 251, 0, 0, 252, 0, 0, 253, 0, 254, 255, 0, 256, 0, 0, 257, 0, 258, 0, 259, 260, 0, 261, 0, 262, 0, 263, 0, 0, - 0, 0, 0, 0, 264, 0, 0, 265, 0, 266, 267, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 275, 276, 0, 277, 0, - 0, 278, 0, 0, 279, 0, 280, 0, 0, 281, 0, 0, 282, 0, 283, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 287, 288, 0, 0, 289, 0, 0, - 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, - 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 295, 296, 0, 0, 297, 0, 0, 298, 0, 299, 300, 0, 301, 0, 0, 302, 0, 303, - 0, 304, 305, 0, 306, 0, 307, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 311, 312, 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 320, - 0, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 327, 0, 0, 328, 0, 0, 0, - 329, 0, 330, 0, 331, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 339, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 342, 0, 343, 0, 0, 0, 0, 344, 0, 345, 346, 0, 347, 0, 0, 0, 348, 0, 0, 349, - 0, 0, 350, 0, 351, 0, 0, 0, 0, 352, 353, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 357, 0, 0, 0, 358, 0, 359, 0, 0, - 0, 0, 360, 0, 361, 362, 0, 363, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, - 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 376, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 0, 0, 379, 380, - 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 382, 0, 0, 0, 0, 383, 384, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, - 387, 388, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, - 395, 0, 396, 0, 397, 0, 0, 0, 0, 0, 0, 0, 398, 399, 0, 0, 0, 0, 400, 0, 0, 401, 0, 0, 0, 0, 0, 0, 402, 0, 403, 0, - 0, 0, 0, 404, 0, 405, 0, 406, 0, 407, 0, 0, 0, 0, 408, 0, 409, 410, 0, 0, 0, 411, 0, 0, 412, 0, 413, 414, 0, 415, 0, 0, - 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 419, 0, 0, 0, 0, 420, 421, 0, 0, 0, 0, 0, 0, 0, 422, 0, - 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 425, 0, 426, 0, 0, 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, - 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 441, - 0, 442, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 449, 0, 0, - 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 452, 0, 453, 0, - 454, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 0, 459, 460, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 463, 0, 0, 464, 0, 465, 0, 466, 0, 467, - 0, 0, 468, 0, 469, 0, 0, 0, 470, 471, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 475, 476, 0, 477, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 0, 481, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, 0, 489, - 0, 0, 490, 0, 0, 491, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 500, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, - 0, 503, 504, 505, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 510, 511, 0, - 0, 512, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 519, 0, - 520, 0, 521, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, - 528, 0, 0, 529, 0, 530, 0, 531, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 536, - 0, 537, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 542, 0, 543, - 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 548, 0, 549, 550, 0, 0, 0, - 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, 553, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, - 559, 0, 560, 0, 561, 0, 0, 562, 0, 563, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 566, 567, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 0, 575, 0, 576, - 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 578, 579, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 582, 0, 0, - 583, 0, 0, 0, 0, 584, 0, 585, 0, 586, 0, 0, 0, 587, 0, 588, 589, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 594, 595, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 600, 0, 0, 0, - 601, 0, 0, 0, 0, 602, 0, 603, 0, 604, 0, 0, 0, 0, 605, 0, 0, 606, 0, 0, 0, 607, 0, 0, 0, 608, 609, 0, 0, 0, 0, 610, - 0, 0, 0, 611, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 619, 0, 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, - 0, 628, 629, 0, 0, 630, 0, 631, 0, 0, 0, 632, 0, 633, 0, 634, 0, 0, 0, 0, 635, 0, 636, 0, 0, 0, 0, 0, 637, 0, 0, 0, - 0, 0, 0, 0, 0, 638, 0, 639, 0, 640, 0, 641, 0, 0, 0, 0, 0, 0, 642, 0, 643, 0, 644, 0, 0, 0, 0, 0, 0, 645, 0, 646, - 647, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 654, - 0, 0, 0, 0, 0, 655, 0, 656, 0, 0, 0, 657, 0, 658, 0, 659, 0, 660, 0, 661, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, - 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 668, 0, 669, 0, 0, 0, 670, 0, - 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 672, 673, 674, 0, 675, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 677, 0, 678, 0, - 0, 0, 0, 0, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 0, 684, 0, 685, - 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 689, 690, 0, 0, 0, 691, 0, 692, 0, 0, 693, 0, 0, 0, 0, 694, 0, 0, 0, 695, 0, 696, 0, 0, 697, 0, 698, 0, 0, 0, 699, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 701, 0, 702, 0, 0, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 705, 0, 0, 706, 0, 0, 707, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, 711, 712, 0, 0, 0, 713, 0, 0, 0, - 714, 0, 715, 0, 716, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 720, 0, 721, 0, 722, 0, 723, 0, 724, - 0, 725, 0, 0, 0, 726, 0, 0, 727, 728, 0, 0, 729, 0, 0, 0, 0, 730, 0, 731, 0, 732, 0, 0, 0, 733, 0, 0, 0, 0, 734, 0, - 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, - 740, 0, 741, 0, 742, 743, 0, 0, 0, 744, 0, 0, 0, 745, 0, 746, 0, 747, 0, 0, 748, 0, 0, 0, 0, 749, 0, 750, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 752, 0, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 755, 0, 756, 0, 757, - 758, 0, 0, 0, 759, 0, 0, 0, 760, 0, 761, 0, 762, 0, 0, 763, 0, 0, 0, 0, 764, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 0, 767, 0, 0, 768, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 770, 0, 771, 0, 772, 773, 0, 0, 0, 774, - 0, 0, 0, 775, 0, 776, 0, 777, 0, 0, 778, 0, 0, 0, 0, 779, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, - 0, 0, 782, 0, 0, 783, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 785, 0, 786, 0, 787, 788, 0, 0, 0, 789, 0, 0, 0, 790, 0, - 791, 0, 792, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 796, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0157[64] = { + 0x4404000026000001ull, 0x00A018010200005Bull, 0x0224000004000000ull, 0x0302004802200440ull, + 0x0000080002480000ull, 0x0000A88800000080ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000888111ull, 0x08100A0408050000ull, 0x01000000004A0004ull, 0x82690042D2020000ull, + 0x990404000104D200ull, 0x34802002102AD4B4ull, 0x1348AB52D2480041ull, 0x9A455A9692400202ull, + 0xD22AD4B492001010ull, 0x2D26410100008084ull, 0x4D20080109A40AB5ull, 0xAD4B499040400010ull, + 0x1010000400426902ull, 0x00109A40AB52D264ull, 0x2AD4B49904040001ull, 0x5A40500040042690ull, + 0x200008042690D252ull, 0x21348156A5A4C820ull, 0x12A0209480454200ull, 0x004A080000040235ull, + 0x28A2261491685142ull, 0x48022402108910B4ull, 0x21030840C2103000ull, 0x5024301500815483ull, + 0x406150202D2342A8ull, 0x2221011000842888ull, 0x2A84021294005410ull, 0x3110102154000001ull, + 0x02D40B14AA500100ull, 0x9248400004492080ull, 0x0811481002404924ull, 0x510540826080502Eull, + 0x821048A908222055ull, 0x000000000008040Aull, 0x1A901010A8000000ull, 0x0311029548205608ull, + 0x28005840A5550010ull, 0x002002000025A2A1ull, 0x862242A114424060ull, 0x021540002010A028ull, + 0x1050A8A690204440ull, 0x00000081A0540AA0ull, 0x040AA8A088108420ull, 0x5040B82045210222ull, + 0x00080022A1110220ull, 0x000A1500452884A3ull, 0xAA88809511A81092ull, 0x02124001422A1322ull, + 0xA81092000A12A235ull, 0x8D40849000509511ull, 0x446A0424800284A8ull, 0x0000040000000025ull, + 0x0000000000000008ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0400000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0157[64] = { + 1u, 8u, 19u, 23u, 32u, 36u, 42u, 42u, 42u, 48u, 56u, 61u, 74u, 86u, 104u, 125u, + 146u, 166u, 179u, 198u, 215u, 225u, 246u, 264u, 278u, 293u, 315u, 329u, 339u, 360u, 375u, 387u, + 404u, 423u, 435u, 450u, 461u, 478u, 490u, 503u, 520u, 537u, 541u, 551u, 568u, 583u, 594u, 611u, + 622u, 638u, 649u, 663u, 679u, 689u, 705u, 725u, 740u, 758u, 775u, 791u, 795u, 796u, 796u, 796u, }; void recomp_unit_0157_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0157_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A78000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0157[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0157[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0157[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A78000; @@ -991,7 +898,6 @@ L_08A78000: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), std::bit_cast(ctx.fpr[17])); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), std::bit_cast(ctx.fpr[17])); if (branch_taken) { @@ -1041,7 +947,6 @@ L_08A780C8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(ctx.fpr[22])) && aot_fpr_14 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -1051,7 +956,6 @@ L_08A780C8: } L_08A780E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(ctx.fpr[22])) && ctx.fpr[16] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A78104; @@ -1098,7 +1002,6 @@ L_08A78118: { const float fs = ctx.fpr[19]; const float ft = ctx.fpr[2]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[4] = std::bit_cast(0x7FC00000u); else ctx.fpr[4] = fs * ft; } aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[0] = ctx.fpr[0] - ctx.fpr[18]; if (branch_taken) { @@ -1111,7 +1014,6 @@ L_08A78164: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), std::bit_cast(ctx.fpr[0])); goto L_08A781B0; @@ -1226,7 +1128,6 @@ L_08A78268: L_08A782C8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A78364; } @@ -1253,7 +1154,6 @@ L_08A782E4: aot_fpr_14 = aot_fpr_14 / aot_fpr_12; { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08A78318; @@ -1261,7 +1161,6 @@ L_08A782E4: goto L_08A78318; L_08A78318: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08A78328; @@ -1403,7 +1302,17 @@ L_08A78464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A784AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(192))); @@ -1486,7 +1395,6 @@ L_08A7859C: goto L_08A785AC; L_08A785AC: aot_gpr_31 = (0x08A785B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 223u, 0x08AF9350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A785B4u) goto L_08A785B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A785B4: @@ -1636,7 +1544,6 @@ L_08A785BC: ctx.fpr[19] = ctx.fpr[19] + ctx.fpr[4]; ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[18])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08A78800; @@ -1644,7 +1551,6 @@ L_08A785BC: goto L_08A78800; L_08A78800: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A78810; @@ -1652,7 +1558,6 @@ L_08A78800: goto L_08A78810; L_08A78810: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A78820; @@ -1663,7 +1568,6 @@ L_08A78820: ctx.fpr[0] = static_cast(static_cast(std::bit_cast(ctx.fpr[0]))); ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[19])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_08A7883C; @@ -1671,7 +1575,6 @@ L_08A78820: goto L_08A7883C; L_08A7883C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[2] = std::bit_cast(std::bit_cast(ctx.fpr[15])); goto L_08A7884C; @@ -1679,7 +1582,6 @@ L_08A7883C: goto L_08A7884C; L_08A7884C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[2] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A7885C; @@ -1929,7 +1831,17 @@ L_08A78AE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1950,7 +1862,6 @@ L_08A78B64: goto L_08A78B70; L_08A78B70: aot_gpr_31 = (0x08A78B78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78B78u) goto L_08A78B78; AOT_REGCACHE_SYNC_OUT(); return; L_08A78B78: @@ -1970,7 +1881,17 @@ L_08A78B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1993,7 +1914,6 @@ L_08A78BC0: goto L_08A78BCC; L_08A78BCC: aot_gpr_31 = (0x08A78BD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78BD4u) goto L_08A78BD4; AOT_REGCACHE_SYNC_OUT(); return; L_08A78BD4: @@ -2015,7 +1935,17 @@ L_08A78BE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78BFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2038,7 +1968,6 @@ L_08A78C24: goto L_08A78C30; L_08A78C30: aot_gpr_31 = (0x08A78C38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78C38u) goto L_08A78C38; AOT_REGCACHE_SYNC_OUT(); return; L_08A78C38: @@ -2060,7 +1989,17 @@ L_08A78C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78C60: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -2088,7 +2027,6 @@ L_08A78CA8: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -2100,9 +2038,7 @@ L_08A78CC8: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A78CF0; } @@ -2134,7 +2070,6 @@ L_08A78CFC: } L_08A78D08: aot_gpr_31 = (0x08A78D10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78D10u) goto L_08A78D10; AOT_REGCACHE_SYNC_OUT(); return; L_08A78D10: @@ -2156,7 +2091,6 @@ L_08A78D1C: } L_08A78D28: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A78D3C; } @@ -2164,7 +2098,6 @@ L_08A78D28: } L_08A78D30: aot_gpr_31 = (0x08A78D38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78D38u) goto L_08A78D38; AOT_REGCACHE_SYNC_OUT(); return; L_08A78D38: @@ -2178,7 +2111,6 @@ L_08A78D3C: goto L_08A78D44; L_08A78D44: aot_gpr_31 = (0x08A78D4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78D4Cu) goto L_08A78D4C; AOT_REGCACHE_SYNC_OUT(); return; L_08A78D4C: @@ -2219,7 +2151,17 @@ L_08A78D84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78DB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2242,7 +2184,6 @@ L_08A78DDC: goto L_08A78DE8; L_08A78DE8: aot_gpr_31 = (0x08A78DF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78DF0u) goto L_08A78DF0; AOT_REGCACHE_SYNC_OUT(); return; L_08A78DF0: @@ -2264,7 +2205,17 @@ L_08A78E00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2304,7 +2255,6 @@ L_08A78E64: } L_08A78E70: aot_gpr_31 = (0x08A78E78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78E78u) goto L_08A78E78; AOT_REGCACHE_SYNC_OUT(); return; L_08A78E78: @@ -2326,7 +2276,6 @@ L_08A78E84: } L_08A78E90: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A78EA4; } @@ -2334,7 +2283,6 @@ L_08A78E90: } L_08A78E98: aot_gpr_31 = (0x08A78EA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78EA0u) goto L_08A78EA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A78EA0: @@ -2348,7 +2296,6 @@ L_08A78EA4: goto L_08A78EAC; L_08A78EAC: aot_gpr_31 = (0x08A78EB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78EB4u) goto L_08A78EB4; AOT_REGCACHE_SYNC_OUT(); return; L_08A78EB4: @@ -2373,7 +2320,6 @@ L_08A78ECC: } L_08A78ED8: aot_gpr_31 = (0x08A78EE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78EE0u) goto L_08A78EE0; AOT_REGCACHE_SYNC_OUT(); return; L_08A78EE0: @@ -2405,7 +2351,17 @@ L_08A78F04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A78F24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2445,7 +2401,6 @@ L_08A78F70: } L_08A78F7C: aot_gpr_31 = (0x08A78F84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78F84u) goto L_08A78F84; AOT_REGCACHE_SYNC_OUT(); return; L_08A78F84: @@ -2467,7 +2422,6 @@ L_08A78F90: } L_08A78F9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A78FB0; } @@ -2475,7 +2429,6 @@ L_08A78F9C: } L_08A78FA4: aot_gpr_31 = (0x08A78FACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78FACu) goto L_08A78FAC; AOT_REGCACHE_SYNC_OUT(); return; L_08A78FAC: @@ -2489,7 +2442,6 @@ L_08A78FB0: goto L_08A78FB8; L_08A78FB8: aot_gpr_31 = (0x08A78FC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78FC0u) goto L_08A78FC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A78FC0: @@ -2514,7 +2466,6 @@ L_08A78FD8: } L_08A78FE4: aot_gpr_31 = (0x08A78FECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A78FECu) goto L_08A78FEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A78FEC: @@ -2546,7 +2497,17 @@ L_08A79010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79030: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2586,7 +2547,6 @@ L_08A7907C: } L_08A79088: aot_gpr_31 = (0x08A79090u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79090u) goto L_08A79090; AOT_REGCACHE_SYNC_OUT(); return; L_08A79090: @@ -2608,7 +2568,6 @@ L_08A7909C: } L_08A790A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A790BC; } @@ -2616,7 +2575,6 @@ L_08A790A8: } L_08A790B0: aot_gpr_31 = (0x08A790B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A790B8u) goto L_08A790B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A790B8: @@ -2630,7 +2588,6 @@ L_08A790BC: goto L_08A790C4; L_08A790C4: aot_gpr_31 = (0x08A790CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A790CCu) goto L_08A790CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A790CC: @@ -2655,7 +2612,6 @@ L_08A790E4: } L_08A790F0: aot_gpr_31 = (0x08A790F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A790F8u) goto L_08A790F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A790F8: @@ -2687,7 +2643,17 @@ L_08A7911C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7913C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -2714,7 +2680,6 @@ L_08A79180: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); if (branch_taken) { @@ -2726,9 +2691,7 @@ L_08A791A0: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A791C8; } @@ -2760,7 +2723,6 @@ L_08A791D4: } L_08A791E0: aot_gpr_31 = (0x08A791E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A791E8u) goto L_08A791E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A791E8: @@ -2782,7 +2744,6 @@ L_08A791F4: } L_08A79200: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A79214; } @@ -2790,7 +2751,6 @@ L_08A79200: } L_08A79208: aot_gpr_31 = (0x08A79210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79210u) goto L_08A79210; AOT_REGCACHE_SYNC_OUT(); return; L_08A79210: @@ -2804,7 +2764,6 @@ L_08A79214: goto L_08A7921C; L_08A7921C: aot_gpr_31 = (0x08A79224u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79224u) goto L_08A79224; AOT_REGCACHE_SYNC_OUT(); return; L_08A79224: @@ -2832,7 +2791,6 @@ L_08A79248: } L_08A79254: aot_gpr_31 = (0x08A7925Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7925Cu) goto L_08A7925C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7925C: @@ -2867,7 +2825,17 @@ L_08A79280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A792AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2890,7 +2858,6 @@ L_08A792D4: goto L_08A792E0; L_08A792E0: aot_gpr_31 = (0x08A792E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A792E8u) goto L_08A792E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A792E8: @@ -2912,7 +2879,17 @@ L_08A792F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79310: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -2940,7 +2917,6 @@ L_08A79358: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -2952,9 +2928,7 @@ L_08A79378: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A793A0; } @@ -2986,7 +2960,6 @@ L_08A793AC: } L_08A793B8: aot_gpr_31 = (0x08A793C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A793C0u) goto L_08A793C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A793C0: @@ -3008,7 +2981,6 @@ L_08A793CC: } L_08A793D8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A793EC; } @@ -3016,7 +2988,6 @@ L_08A793D8: } L_08A793E0: aot_gpr_31 = (0x08A793E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A793E8u) goto L_08A793E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A793E8: @@ -3030,7 +3001,6 @@ L_08A793EC: goto L_08A793F4; L_08A793F4: aot_gpr_31 = (0x08A793FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A793FCu) goto L_08A793FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A793FC: @@ -3058,7 +3028,6 @@ L_08A79420: } L_08A7942C: aot_gpr_31 = (0x08A79434u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79434u) goto L_08A79434; AOT_REGCACHE_SYNC_OUT(); return; L_08A79434: @@ -3094,7 +3063,17 @@ L_08A79458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79488: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3122,7 +3101,6 @@ L_08A794D0: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -3134,9 +3112,7 @@ L_08A794F0: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A79518; } @@ -3168,7 +3144,6 @@ L_08A79524: } L_08A79530: aot_gpr_31 = (0x08A79538u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79538u) goto L_08A79538; AOT_REGCACHE_SYNC_OUT(); return; L_08A79538: @@ -3190,7 +3165,6 @@ L_08A79544: } L_08A79550: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A79564; } @@ -3198,7 +3172,6 @@ L_08A79550: } L_08A79558: aot_gpr_31 = (0x08A79560u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79560u) goto L_08A79560; AOT_REGCACHE_SYNC_OUT(); return; L_08A79560: @@ -3212,7 +3185,6 @@ L_08A79564: goto L_08A7956C; L_08A7956C: aot_gpr_31 = (0x08A79574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79574u) goto L_08A79574; AOT_REGCACHE_SYNC_OUT(); return; L_08A79574: @@ -3240,7 +3212,6 @@ L_08A79598: } L_08A795A4: aot_gpr_31 = (0x08A795ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A795ACu) goto L_08A795AC; AOT_REGCACHE_SYNC_OUT(); return; L_08A795AC: @@ -3276,7 +3247,17 @@ L_08A795D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79600: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3304,7 +3285,6 @@ L_08A79648: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -3316,9 +3296,7 @@ L_08A79668: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A79690; } @@ -3350,7 +3328,6 @@ L_08A7969C: } L_08A796A8: aot_gpr_31 = (0x08A796B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A796B0u) goto L_08A796B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A796B0: @@ -3372,7 +3349,6 @@ L_08A796BC: } L_08A796C8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A796DC; } @@ -3380,7 +3356,6 @@ L_08A796C8: } L_08A796D0: aot_gpr_31 = (0x08A796D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A796D8u) goto L_08A796D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A796D8: @@ -3394,7 +3369,6 @@ L_08A796DC: goto L_08A796E4; L_08A796E4: aot_gpr_31 = (0x08A796ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A796ECu) goto L_08A796EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A796EC: @@ -3422,7 +3396,6 @@ L_08A79710: } L_08A7971C: aot_gpr_31 = (0x08A79724u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79724u) goto L_08A79724; AOT_REGCACHE_SYNC_OUT(); return; L_08A79724: @@ -3458,7 +3431,17 @@ L_08A79748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79778: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3503,7 +3486,6 @@ L_08A797D8: } L_08A797E4: aot_gpr_31 = (0x08A797ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A797ECu) goto L_08A797EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A797EC: @@ -3517,7 +3499,6 @@ L_08A797F0: L_08A797F8: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A79818; } @@ -3526,7 +3507,6 @@ L_08A797F8: L_08A79804: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A79818; } @@ -3534,7 +3514,6 @@ L_08A79804: } L_08A79810: aot_gpr_31 = (0x08A79818u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79818u) goto L_08A79818; AOT_REGCACHE_SYNC_OUT(); return; L_08A79818: @@ -3554,7 +3533,6 @@ L_08A79824: } L_08A79830: aot_gpr_31 = (0x08A79838u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79838u) goto L_08A79838; AOT_REGCACHE_SYNC_OUT(); return; L_08A79838: @@ -3579,7 +3557,6 @@ L_08A79850: } L_08A7985C: aot_gpr_31 = (0x08A79864u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79864u) goto L_08A79864; AOT_REGCACHE_SYNC_OUT(); return; L_08A79864: @@ -3612,7 +3589,17 @@ L_08A79888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A798AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3640,7 +3627,6 @@ L_08A798F4: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -3652,9 +3638,7 @@ L_08A79914: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7993C; } @@ -3686,7 +3670,6 @@ L_08A79948: } L_08A79954: aot_gpr_31 = (0x08A7995Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7995Cu) goto L_08A7995C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7995C: @@ -3708,7 +3691,6 @@ L_08A79968: } L_08A79974: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A79988; } @@ -3716,7 +3698,6 @@ L_08A79974: } L_08A7997C: aot_gpr_31 = (0x08A79984u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79984u) goto L_08A79984; AOT_REGCACHE_SYNC_OUT(); return; L_08A79984: @@ -3730,7 +3711,6 @@ L_08A79988: goto L_08A79990; L_08A79990: aot_gpr_31 = (0x08A79998u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79998u) goto L_08A79998; AOT_REGCACHE_SYNC_OUT(); return; L_08A79998: @@ -3758,7 +3738,6 @@ L_08A799BC: } L_08A799C8: aot_gpr_31 = (0x08A799D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A799D0u) goto L_08A799D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A799D0: @@ -3794,13 +3773,22 @@ L_08A799F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A79A40; } @@ -3808,7 +3796,6 @@ L_08A79A24: } L_08A79A38: aot_gpr_31 = (0x08A79A40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79A40u) goto L_08A79A40; AOT_REGCACHE_SYNC_OUT(); return; L_08A79A40: @@ -3824,7 +3811,17 @@ L_08A79A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79A58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3848,7 +3845,6 @@ L_08A79A7C: } L_08A79A88: aot_gpr_31 = (0x08A79A90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79A90u) goto L_08A79A90; AOT_REGCACHE_SYNC_OUT(); return; L_08A79A90: @@ -3867,7 +3863,17 @@ L_08A79A9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79AB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(472))); @@ -3889,7 +3895,6 @@ L_08A79AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08A79ADC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A79B00; } @@ -3898,7 +3903,6 @@ L_08A79ADC: L_08A79AE4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A79B00; } @@ -3908,7 +3912,6 @@ L_08A79AF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(619)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A79B10; } @@ -3941,7 +3944,17 @@ L_08A79B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79B24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -3951,11 +3964,20 @@ L_08A79B24: aot_fpr_14 = aot_fpr_14 - ctx.fpr[15]; ctx.fpr[0] = ctx.fpr[0] / aot_fpr_14; jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -4045,7 +4067,17 @@ L_08A79B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79BAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2234u << 16u); @@ -4057,7 +4089,6 @@ L_08A79BAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A79BC4: aot_gpr_31 = (0x08A79BCCu); - // nop goto L_08A79BD8; L_08A79BCC: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4066,7 +4097,17 @@ L_08A79BCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79BD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4093,7 +4134,6 @@ L_08A79C04: goto L_08A79C18; L_08A79C18: { const bool branch_taken = static_cast(ctx.gpr[10]) < 0; - // nop if (branch_taken) { goto L_08A79C30; } @@ -4137,7 +4177,6 @@ L_08A79C54: goto L_08A79C58; L_08A79C58: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A79C90; } @@ -4161,7 +4200,6 @@ L_08A79C70: L_08A79C7C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(17))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A79C90; } @@ -4209,7 +4247,6 @@ L_08A79CC4: goto L_08A79CD4; L_08A79CD4: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A79CEC; } @@ -4253,7 +4290,6 @@ L_08A79D10: goto L_08A79D14; L_08A79D14: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A79D5C; } @@ -4279,7 +4315,6 @@ L_08A79D30: L_08A79D40: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(17))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A79D5C; } @@ -4311,7 +4346,17 @@ L_08A79D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79D84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10064), 0u); @@ -4331,12 +4376,21 @@ L_08A79DA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79DB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A79DC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 435u, 0x08B11F0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79DC4u) goto L_08A79DC4; AOT_REGCACHE_SYNC_OUT(); return; L_08A79DC4: @@ -4360,7 +4414,6 @@ L_08A79DC4: aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(10042), static_cast(0u)); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(10040), static_cast(0u)); aot_gpr_31 = (0x08A79DECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0158_entry, 158u, 402u, 0x08A7E278u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79DECu) goto L_08A79DEC; AOT_REGCACHE_SYNC_OUT(); return; L_08A79DEC: @@ -4370,7 +4423,17 @@ L_08A79DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79DF8: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::World) && rt.memory().direct_fastmem_enabled()) { @@ -4501,7 +4564,6 @@ L_08A79EE0: L_08A79EF4: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_16; - // nop if (branch_taken) { goto L_08A79F28; } @@ -4530,16 +4592,13 @@ L_08A79F1C: goto L_08A79F28; L_08A79F28: aot_gpr_31 = (0x08A79F30u); - // nop goto L_08A79F5C; L_08A79F30: aot_gpr_31 = (0x08A79F38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 318u, 0x089EE290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79F38u) goto L_08A79F38; AOT_REGCACHE_SYNC_OUT(); return; L_08A79F38: aot_gpr_31 = (0x08A79F40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 259u, 0x08A9A194u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79F40u) goto L_08A79F40; AOT_REGCACHE_SYNC_OUT(); return; L_08A79F40: @@ -4553,7 +4612,17 @@ L_08A79F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A79F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); @@ -4568,7 +4637,6 @@ L_08A79F5C: AOT_REGCACHE_SYNC_OUT(); return; L_08A79F80: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A79FB4; } @@ -4576,7 +4644,6 @@ L_08A79F80: } L_08A79F88: aot_gpr_31 = (0x08A79F90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A79F90u) goto L_08A79F90; AOT_REGCACHE_SYNC_OUT(); return; L_08A79F90: @@ -4585,9 +4652,7 @@ L_08A79F90: aot_gpr_4 = (49736u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A79FB4; } @@ -4619,7 +4684,6 @@ L_08A79FD4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (aot_gpr_6 & aot_gpr_16); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A7A044; } @@ -4636,9 +4700,7 @@ L_08A79FF0: L_08A79FF8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7A01C; } @@ -4646,7 +4708,6 @@ L_08A79FF8: } L_08A7A00C: aot_gpr_31 = (0x08A7A014u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 167u, 0x08A3CC80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A014u) goto L_08A7A014; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A014: @@ -4668,9 +4729,7 @@ L_08A7A01C: L_08A7A024: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7A044; } @@ -4678,7 +4737,6 @@ L_08A7A024: } L_08A7A038: aot_gpr_31 = (0x08A7A040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 167u, 0x08A3CC80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A040u) goto L_08A7A040; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A040: @@ -4697,7 +4755,6 @@ L_08A7A044: L_08A7A054: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7A06C; } @@ -4705,7 +4762,6 @@ L_08A7A054: } L_08A7A060: aot_gpr_31 = (0x08A7A068u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A068u) goto L_08A7A068; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A068: @@ -4713,7 +4769,6 @@ L_08A7A068: goto L_08A7A06C; L_08A7A06C: aot_gpr_31 = (0x08A7A074u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0084_entry, 84u, 221u, 0x08954F80u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A074u) goto L_08A7A074; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A074: @@ -4728,7 +4783,17 @@ L_08A7A074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4741,12 +4806,10 @@ L_08A7A094: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A0B0: aot_gpr_31 = (0x08A7A0B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A0B8u) goto L_08A7A0B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A0B8: aot_gpr_31 = (0x08A7A0C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A0C0u) goto L_08A7A0C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A0C0: @@ -4771,7 +4834,6 @@ L_08A7A0D8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A134; } @@ -4798,7 +4860,6 @@ L_08A7A11C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A134; } @@ -4828,7 +4889,17 @@ L_08A7A148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A15C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -4862,7 +4933,6 @@ L_08A7A1A0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A1F4; } @@ -4889,7 +4959,6 @@ L_08A7A1E4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7A290; } @@ -4902,7 +4971,6 @@ L_08A7A1F4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7A228; } @@ -4914,7 +4982,6 @@ L_08A7A210: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A284; } @@ -4927,7 +4994,6 @@ L_08A7A228: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A230: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A7A284; } @@ -4977,7 +5043,6 @@ L_08A7A238: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A268: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7A27C; } @@ -4990,7 +5055,6 @@ L_08A7A270: goto L_08A7A664; L_08A7A27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7A290; } @@ -5025,7 +5089,17 @@ L_08A7A2A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A2C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 11u); @@ -5036,17 +5110,14 @@ L_08A7A2C8: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A2DC: aot_gpr_31 = (0x08A7A2E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A2E4u) goto L_08A7A2E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A2E4: aot_gpr_31 = (0x08A7A2ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A2ECu) goto L_08A7A2EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A2EC: aot_gpr_31 = (0x08A7A2F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 142u, 0x08945050u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A2F4u) goto L_08A7A2F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A2F4: @@ -5056,7 +5127,17 @@ L_08A7A2F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A300: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[21]); @@ -5088,12 +5169,10 @@ L_08A7A300: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A368: aot_gpr_31 = (0x08A7A370u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 318u, 0x089EE290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A370u) goto L_08A7A370; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A370: aot_gpr_31 = (0x08A7A378u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 127u, 0x08944F4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A378u) goto L_08A7A378; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A378: @@ -5147,7 +5226,6 @@ L_08A7A3E0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[7] = (0u | 2u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A7A490; } @@ -5167,7 +5245,6 @@ L_08A7A3F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7A4A4; } @@ -5185,7 +5262,6 @@ L_08A7A420: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7A474; } @@ -5199,7 +5275,6 @@ L_08A7A450: L_08A7A458: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7A474; } @@ -5212,7 +5287,6 @@ L_08A7A464: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A46C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7A4A4; } @@ -5226,7 +5300,6 @@ L_08A7A474: L_08A7A47C: aot_gpr_4 = (0u | 255u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A7A4A4; } @@ -5244,7 +5317,6 @@ L_08A7A490: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A4A4; } @@ -5255,7 +5327,6 @@ L_08A7A4A0: goto L_08A7A4A4; L_08A7A4A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7A4DC; } @@ -5268,7 +5339,6 @@ L_08A7A4AC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A4DC; } @@ -5280,7 +5350,6 @@ L_08A7A4C8: goto L_08A79AB4; L_08A7A4D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7A4DC; } @@ -5291,7 +5360,6 @@ L_08A7A4D8: goto L_08A7A4DC; L_08A7A4DC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A7A51C; } @@ -5356,7 +5424,6 @@ L_08A7A51C: L_08A7A534: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(24))); { const bool branch_taken = aot_gpr_16 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A7A558; } @@ -5370,7 +5437,6 @@ L_08A7A540: L_08A7A54C: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_16 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A7A540; } @@ -5407,13 +5473,22 @@ L_08A7A568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A5B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10080))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A62C; } @@ -5473,7 +5548,17 @@ L_08A7A62C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A638: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(92))); @@ -5494,7 +5579,17 @@ L_08A7A658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A664: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::World) && rt.memory().direct_fastmem_enabled()) { @@ -5543,7 +5638,6 @@ L_08A7A6AC: } L_08A7A6B8: aot_gpr_31 = (0x08A7A6C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A6C0u) goto L_08A7A6C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A6C0: @@ -5587,7 +5681,6 @@ L_08A7A708: goto L_08A7A70C; L_08A7A70C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7A738; } @@ -5633,7 +5726,6 @@ L_08A7A75C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A784; } @@ -5645,7 +5737,6 @@ L_08A7A774: L_08A7A778: aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7A7C0; } @@ -5677,7 +5768,6 @@ L_08A7A79C: } L_08A7A7B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7A7F8; } @@ -5685,7 +5775,6 @@ L_08A7A7B8: } L_08A7A7C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7A928; } @@ -5723,7 +5812,6 @@ L_08A7A7F8: goto L_08A7A800; L_08A7A800: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A7A818; } @@ -5736,7 +5824,6 @@ L_08A7A808: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A810: aot_gpr_31 = (0x08A7A818u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 125u, 0x08944F2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A818u) goto L_08A7A818; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A818: @@ -5746,7 +5833,6 @@ L_08A7A818: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7A8E4; } @@ -5766,7 +5852,6 @@ L_08A7A844: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 55u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A7A86C; } @@ -5817,7 +5902,6 @@ L_08A7A89C: aot_gpr_4 = (ctx.gpr[2] + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A7A8D0; } @@ -5845,7 +5929,6 @@ L_08A7A8D0: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7A880; } @@ -5864,7 +5947,6 @@ L_08A7A8E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A7A8FC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A7A90C; } @@ -5872,7 +5954,6 @@ L_08A7A8FC: } L_08A7A904: aot_gpr_31 = (0x08A7A90Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 132u, 0x08944F98u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7A90Cu) goto L_08A7A90C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7A90C: @@ -5900,7 +5981,17 @@ L_08A7A928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7A94C: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::World) && rt.memory().direct_fastmem_enabled()) { @@ -5985,12 +6076,10 @@ L_08A7A94C: AOT_REGCACHE_SYNC_OUT(); return; L_08A7AA6C: aot_gpr_31 = (0x08A7AA74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 129u, 0x08944F6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AA74u) goto L_08A7AA74; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AA74: aot_gpr_31 = (0x08A7AA7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 127u, 0x08944F4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AA7Cu) goto L_08A7AA7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AA7C: @@ -6031,7 +6120,6 @@ L_08A7AAB0: L_08A7AAD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A7AAF0; } @@ -6044,7 +6132,6 @@ L_08A7AADC: AOT_REGCACHE_SYNC_OUT(); return; L_08A7AAE4: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A7AAF0; } @@ -6070,7 +6157,6 @@ L_08A7AB0C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7ABA4; } @@ -6081,7 +6167,6 @@ L_08A7AB24: goto L_08A7AB28; L_08A7AB28: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08A7ABA4; } @@ -6089,7 +6174,6 @@ L_08A7AB28: } L_08A7AB30: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A7ABA4; } @@ -6102,7 +6186,6 @@ L_08A7AB38: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7AB80; } @@ -6114,7 +6197,6 @@ L_08A7AB54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7AB9C; } @@ -6127,7 +6209,6 @@ L_08A7AB6C: goto L_08A7A664; L_08A7AB78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7AB9C; } @@ -6135,11 +6216,9 @@ L_08A7AB78: } L_08A7AB80: aot_gpr_31 = (0x08A7AB88u); - // nop goto L_08A79AB4; L_08A7AB88: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7AB9C; } @@ -6152,7 +6231,6 @@ L_08A7AB90: goto L_08A7A664; L_08A7AB9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7AD00; } @@ -6165,7 +6243,6 @@ L_08A7ABA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7ACB0; } @@ -6183,7 +6260,6 @@ L_08A7ABD0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A7AC7C; } @@ -6203,7 +6279,6 @@ L_08A7ABE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7ACB0; } @@ -6221,7 +6296,6 @@ L_08A7AC10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7AC60; } @@ -6234,7 +6308,6 @@ L_08A7AC40: AOT_REGCACHE_SYNC_OUT(); return; L_08A7AC48: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A7AC60; } @@ -6247,7 +6320,6 @@ L_08A7AC50: AOT_REGCACHE_SYNC_OUT(); return; L_08A7AC58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7ACB0; } @@ -6261,7 +6333,6 @@ L_08A7AC60: L_08A7AC68: aot_gpr_4 = (0u | 255u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A7ACB0; } @@ -6282,7 +6353,6 @@ L_08A7AC7C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7ACB0; } @@ -6293,7 +6363,6 @@ L_08A7AC98: aot_gpr_6 = (1024u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7ACB0; } @@ -6304,7 +6373,6 @@ L_08A7ACAC: goto L_08A7ACB0; L_08A7ACB0: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A7AD00; } @@ -6355,7 +6423,6 @@ L_08A7ACB8: AOT_REGCACHE_SYNC_OUT(); return; L_08A7ACEC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7AD00; } @@ -6379,12 +6446,10 @@ L_08A7AD00: } L_08A7AD14: aot_gpr_31 = (0x08A7AD1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 142u, 0x08945050u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AD1Cu) goto L_08A7AD1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AD1C: aot_gpr_31 = (0x08A7AD24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0126_entry, 126u, 361u, 0x089FD7E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AD24u) goto L_08A7AD24; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AD24: @@ -6397,7 +6462,6 @@ L_08A7AD24: goto L_08A7AD34; L_08A7AD34: aot_gpr_31 = (0x08A7AD3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AD3Cu) goto L_08A7AD3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AD3C: @@ -6438,7 +6502,17 @@ L_08A7AD54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7ADA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6487,7 +6561,6 @@ L_08A7AE18: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7AEE8; } @@ -6517,7 +6590,6 @@ L_08A7AE58: goto L_08A7AE68; L_08A7AE68: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A7AEE8; } @@ -6527,7 +6599,6 @@ L_08A7AE70: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(56))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7AEE8; } @@ -6544,7 +6615,6 @@ L_08A7AE80: goto L_08A7AE94; L_08A7AE94: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7AEE8; } @@ -6552,7 +6622,6 @@ L_08A7AE94: } L_08A7AE9C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A7AEE8; } @@ -6622,7 +6691,6 @@ L_08A7AF14: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7AF3C; } @@ -6656,7 +6724,17 @@ L_08A7AF50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7AF74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2236u << 16u); @@ -6674,7 +6752,6 @@ L_08A7AF74: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7AFD0; } @@ -6682,12 +6759,10 @@ L_08A7AF74: } L_08A7AFB8: aot_gpr_31 = (0x08A7AFC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0200_entry, 200u, 432u, 0x08B26030u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AFC0u) goto L_08A7AFC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AFC0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A7AFD0; } @@ -6695,7 +6770,6 @@ L_08A7AFC0: } L_08A7AFC8: aot_gpr_31 = (0x08A7AFD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 663u, 0x088B7A4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7AFD0u) goto L_08A7AFD0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7AFD0: @@ -6707,7 +6781,17 @@ L_08A7AFD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7AFE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -6737,7 +6821,6 @@ L_08A7B028: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(16))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7B09C; } @@ -6750,7 +6833,6 @@ L_08A7B038: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7B070; } @@ -6763,7 +6845,6 @@ L_08A7B054: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7B09C; } @@ -6778,7 +6859,6 @@ L_08A7B070: goto L_08A7B07C; L_08A7B07C: aot_gpr_31 = (0x08A7B084u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B084u) goto L_08A7B084; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B084: @@ -6792,7 +6872,6 @@ L_08A7B088: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B094: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7B0B4; } @@ -6802,7 +6881,6 @@ L_08A7B09C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(16))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7B0BC; } @@ -6810,7 +6888,6 @@ L_08A7B09C: } L_08A7B0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7B0D8; } @@ -6834,7 +6911,6 @@ L_08A7B0BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B0D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7B11C; } @@ -6877,7 +6953,6 @@ L_08A7B0F0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7B124; } @@ -6885,7 +6960,6 @@ L_08A7B0F0: } L_08A7B114: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7B150; } @@ -6909,9 +6983,7 @@ L_08A7B12C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B17C; } @@ -6935,9 +7007,7 @@ L_08A7B158: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B17C; } @@ -6965,7 +7035,17 @@ L_08A7B180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B19C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (0u | 11u); @@ -7025,7 +7105,6 @@ L_08A7B23C: aot_mem.aot_direct_store16(ctx.gpr[17] + static_cast(84), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7B294; } @@ -7048,7 +7127,6 @@ L_08A7B26C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7B294; } @@ -7060,7 +7138,6 @@ L_08A7B27C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7B47C; } @@ -7081,7 +7158,6 @@ L_08A7B29C: goto L_08A7B2AC; L_08A7B2AC: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A7B47C; } @@ -7089,7 +7165,6 @@ L_08A7B2AC: } L_08A7B2B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7B2CC; } @@ -7105,7 +7180,6 @@ L_08A7B2BC: } L_08A7B2C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7B47C; } @@ -7118,7 +7192,6 @@ L_08A7B2CC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A7B324; } @@ -7151,7 +7224,6 @@ L_08A7B314: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7B340; } @@ -7192,7 +7264,6 @@ L_08A7B354: } L_08A7B360: aot_gpr_31 = (0x08A7B368u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B368u) goto L_08A7B368; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B368: @@ -7236,7 +7307,6 @@ L_08A7B3B0: goto L_08A7B3B4; L_08A7B3B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7B3D8; } @@ -7265,7 +7335,6 @@ L_08A7B3D8: goto L_08A7B3F0; L_08A7B3F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7B47C; } @@ -7276,9 +7345,7 @@ L_08A7B3F8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B474; } @@ -7286,9 +7353,7 @@ L_08A7B3F8: } L_08A7B414: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B474; } @@ -7299,9 +7364,7 @@ L_08A7B424: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B474; } @@ -7309,9 +7372,7 @@ L_08A7B424: } L_08A7B440: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B474; } @@ -7321,7 +7382,6 @@ L_08A7B450: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10068))); aot_gpr_5 = (static_cast(aot_gpr_4) < 149 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7B474; } @@ -7336,7 +7396,6 @@ L_08A7B460: goto L_08A7B474; L_08A7B474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7B47C; } @@ -7344,7 +7403,6 @@ L_08A7B474: } L_08A7B47C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A7B228; } @@ -7378,7 +7436,17 @@ L_08A7B494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B4CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -7443,7 +7511,6 @@ L_08A7B53C: goto L_08A7AFE4; L_08A7B54C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7B560; } @@ -7457,7 +7524,6 @@ L_08A7B554: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B560: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A7B528; } @@ -7487,14 +7553,34 @@ L_08A7B578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B5A0: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B5A8: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::World) && rt.memory().direct_fastmem_enabled()) { @@ -7504,11 +7590,20 @@ L_08A7B5A8: } // TIER2_SUPERBLOCK_V2_HOOK_END jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B5B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7519,7 +7614,6 @@ L_08A7B5B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B5C4: aot_gpr_31 = (0x08A7B5CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 670u, 0x088B7B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B5CCu) goto L_08A7B5CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B5CC: @@ -7581,9 +7675,7 @@ L_08A7B630: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B65C; } @@ -7591,7 +7683,6 @@ L_08A7B630: } L_08A7B64C: aot_gpr_31 = (0x08A7B654u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 661u, 0x088B78CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B654u) goto L_08A7B654; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B654: @@ -7613,7 +7704,17 @@ L_08A7B660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7622,12 +7723,10 @@ L_08A7B670: goto L_08A7AF74; L_08A7B680: aot_gpr_31 = (0x08A7B688u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B688u) goto L_08A7B688; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B688: aot_gpr_31 = (0x08A7B690u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B690u) goto L_08A7B690; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B690: @@ -7637,7 +7736,17 @@ L_08A7B690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B69C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-17675), static_cast(0u)); @@ -7646,7 +7755,6 @@ L_08A7B69C: aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A7B704; } @@ -7656,7 +7764,6 @@ L_08A7B6BC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(482)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A7B6F4; } @@ -7666,7 +7773,6 @@ L_08A7B6CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(483)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7B720; } @@ -7674,12 +7780,10 @@ L_08A7B6CC: } L_08A7B6DC: aot_gpr_31 = (0x08A7B6E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 666u, 0x088B7AE4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B6E4u) goto L_08A7B6E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B6E4: aot_gpr_31 = (0x08A7B6ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 670u, 0x088B7B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B6ECu) goto L_08A7B6EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B6EC: @@ -7692,7 +7796,6 @@ L_08A7B6EC: } L_08A7B6F4: aot_gpr_31 = (0x08A7B6FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 667u, 0x088B7AF4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B6FCu) goto L_08A7B6FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B6FC: @@ -7729,13 +7832,22 @@ L_08A7B724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B730: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7B754; } @@ -7743,12 +7855,10 @@ L_08A7B730: } L_08A7B744: aot_gpr_31 = (0x08A7B74Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B74Cu) goto L_08A7B74C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B74C: aot_gpr_31 = (0x08A7B754u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B754u) goto L_08A7B754; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B754: @@ -7759,7 +7869,17 @@ L_08A7B754: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B764: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7770,7 +7890,6 @@ L_08A7B764: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B778: aot_gpr_31 = (0x08A7B780u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 670u, 0x088B7B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B780u) goto L_08A7B780; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B780: @@ -7832,9 +7951,7 @@ L_08A7B7E4: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B810; } @@ -7842,7 +7959,6 @@ L_08A7B7E4: } L_08A7B800: aot_gpr_31 = (0x08A7B808u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 661u, 0x088B78CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B808u) goto L_08A7B808; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B808: @@ -7864,7 +7980,17 @@ L_08A7B814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7873,12 +7999,10 @@ L_08A7B824: goto L_08A7AF74; L_08A7B834: aot_gpr_31 = (0x08A7B83Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B83Cu) goto L_08A7B83C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B83C: aot_gpr_31 = (0x08A7B844u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B844u) goto L_08A7B844; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B844: @@ -7888,7 +8012,17 @@ L_08A7B844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B850: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7899,7 +8033,6 @@ L_08A7B850: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B864: aot_gpr_31 = (0x08A7B86Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 670u, 0x088B7B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B86Cu) goto L_08A7B86C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B86C: @@ -7961,9 +8094,7 @@ L_08A7B8D0: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B8FC; } @@ -7971,7 +8102,6 @@ L_08A7B8D0: } L_08A7B8EC: aot_gpr_31 = (0x08A7B8F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 661u, 0x088B78CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B8F4u) goto L_08A7B8F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B8F4: @@ -7993,7 +8123,17 @@ L_08A7B900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B910: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8002,12 +8142,10 @@ L_08A7B910: goto L_08A7AF74; L_08A7B920: aot_gpr_31 = (0x08A7B928u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B928u) goto L_08A7B928; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B928: aot_gpr_31 = (0x08A7B930u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B930u) goto L_08A7B930; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B930: @@ -8017,7 +8155,17 @@ L_08A7B930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B93C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8028,7 +8176,6 @@ L_08A7B93C: AOT_REGCACHE_SYNC_OUT(); return; L_08A7B950: aot_gpr_31 = (0x08A7B958u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 670u, 0x088B7B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B958u) goto L_08A7B958; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B958: @@ -8090,9 +8237,7 @@ L_08A7B9BC: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7B9E8; } @@ -8100,7 +8245,6 @@ L_08A7B9BC: } L_08A7B9D8: aot_gpr_31 = (0x08A7B9E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 661u, 0x088B78CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7B9E0u) goto L_08A7B9E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7B9E0: @@ -8122,7 +8266,17 @@ L_08A7B9EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7B9FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8131,12 +8285,10 @@ L_08A7B9FC: goto L_08A7AF74; L_08A7BA0C: aot_gpr_31 = (0x08A7BA14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7BA14u) goto L_08A7BA14; AOT_REGCACHE_SYNC_OUT(); return; L_08A7BA14: aot_gpr_31 = (0x08A7BA1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7BA1Cu) goto L_08A7BA1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7BA1C: @@ -8146,7 +8298,17 @@ L_08A7BA1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7BA28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8157,7 +8319,6 @@ L_08A7BA28: AOT_REGCACHE_SYNC_OUT(); return; L_08A7BA3C: aot_gpr_31 = (0x08A7BA44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 670u, 0x088B7B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7BA44u) goto L_08A7BA44; AOT_REGCACHE_SYNC_OUT(); return; L_08A7BA44: @@ -8219,9 +8380,7 @@ L_08A7BAA8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7BAD4; } @@ -8229,7 +8388,6 @@ L_08A7BAA8: } L_08A7BAC4: aot_gpr_31 = (0x08A7BACCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 661u, 0x088B78CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7BACCu) goto L_08A7BACC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7BACC: @@ -8251,7 +8409,17 @@ L_08A7BAD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7BAE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8260,12 +8428,10 @@ L_08A7BAE8: goto L_08A7AF74; L_08A7BAF8: aot_gpr_31 = (0x08A7BB00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 668u, 0x088B7B30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7BB00u) goto L_08A7BB00; AOT_REGCACHE_SYNC_OUT(); return; L_08A7BB00: aot_gpr_31 = (0x08A7BB08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 665u, 0x088B7AD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7BB08u) goto L_08A7BB08; AOT_REGCACHE_SYNC_OUT(); return; L_08A7BB08: @@ -8275,7 +8441,17 @@ L_08A7BB08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7BB14: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), ctx.gpr[18]); @@ -8571,8 +8747,6 @@ L_08A7BC0C: aot_gpr_4 = (0u | 480u); { const std::int64_t product = static_cast(static_cast(ctx.gpr[7])) * static_cast(static_cast(ctx.gpr[11])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[11]); ctx.gpr[9] = (0u | 64u); diff --git a/profiles/vcs/generated/generated_unit_0158.cpp b/profiles/vcs/generated/generated_unit_0158.cpp index 8a3c05f..5d5b0ca 100644 --- a/profiles/vcs/generated/generated_unit_0158.cpp +++ b/profiles/vcs/generated/generated_unit_0158.cpp @@ -8,135 +8,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0158[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, - 0, 32, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 0, 54, - 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 61, 0, - 0, 62, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 0, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 80, 0, 0, 0, 81, - 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, - 0, 0, 85, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 0, 0, 93, 0, 0, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, 99, - 0, 100, 0, 0, 101, 0, 102, 103, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, 108, 0, 0, 109, 0, 110, 0, 111, - 0, 112, 0, 113, 114, 0, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, - 122, 0, 0, 0, 0, 0, 123, 0, 124, 0, 125, 0, 0, 0, 0, 0, 126, 0, 127, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 130, 0, 0, - 0, 0, 0, 131, 0, 132, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 0, - 0, 0, 0, 139, 140, 0, 0, 0, 0, 141, 0, 0, 0, 142, 143, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 147, 0, 0, 148, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 150, 151, 0, 152, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 161, 0, 0, 0, 162, - 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 166, 0, 167, 0, 168, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 171, - 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 178, 0, 179, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 183, 0, 184, 0, - 0, 0, 185, 0, 0, 186, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 0, 189, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 0, 0, 192, - 0, 193, 0, 194, 0, 0, 0, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, 0, 0, - 0, 0, 201, 0, 0, 202, 0, 0, 0, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 0, 0, 208, 0, 209, 0, 210, 0, 211, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 0, 216, 0, 217, 0, - 218, 0, 219, 0, 220, 0, 0, 0, 221, 0, 222, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 229, 0, 0, 0, 230, 0, 231, 232, 0, 0, 0, - 0, 0, 0, 233, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 236, 0, 0, 237, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 0, 0, 241, - 0, 0, 242, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 249, 0, 0, 250, - 0, 0, 0, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 0, 0, 256, 0, 0, 0, 257, 0, 258, 0, 0, 259, 0, 0, 0, 0, 260, 0, - 0, 0, 261, 0, 262, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 267, 0, 0, 268, 0, 0, 0, 269, 0, 0, - 270, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 273, 0, 274, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 278, 0, 279, - 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 282, 0, 0, 283, 0, 0, 0, 284, 0, 0, 0, 285, 286, 0, 0, 287, 0, 0, 0, - 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 294, 0, 0, 295, 0, 0, 0, 296, 0, 297, 0, 298, 0, 299, 0, 0, 0, 0, 0, - 0, 300, 0, 301, 0, 302, 303, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 309, 310, 0, 0, 0, 311, 0, - 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 313, 314, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 0, 318, 0, 319, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 325, - 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, - 0, 330, 331, 0, 0, 0, 332, 0, 0, 0, 0, 333, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 338, - 0, 0, 339, 0, 340, 0, 341, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 0, 345, 0, 346, 0, 347, 0, 348, 349, 0, 0, - 0, 350, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 356, 0, 0, - 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 363, 0, 0, 0, 0, 364, 0, 365, 0, 0, 0, 0, 366, 0, 0, 367, 0, 0, 368, 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, - 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 375, 0, 376, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, 0, 380, 381, 0, 0, - 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, - 0, 0, 0, 389, 0, 390, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 397, - 0, 0, 0, 398, 0, 0, 399, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, 409, 0, 410, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 414, 0, 0, 0, 0, 0, 0, 0, - 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 419, 0, 420, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, - 434, 0, 435, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, - 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 0, 449, 0, - 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 457, - 0, 0, 0, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, - 0, 0, 465, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 471, 0, 0, - 0, 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 0, 477, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 484, - 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, - 0, 0, 496, 0, 0, 497, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, 0, 0, - 0, 0, 508, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 513, - 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 518, 519, 520, 0, 521, 0, 0, 0, 0, 0, 0, - 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 0, 530, 0, 0, 531, 0, - 532, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 538, 0, - 0, 0, 539, 0, 0, 0, 0, 540, 0, 541, 0, 542, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, - 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 555, 0, 556, 0, 557, 0, 558, 0, 559, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 562, 0, 563, 0, 564, 565, 0, 0, 566, 0, 567, 0, 568, 0, 569, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, - 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 0, 579, 0, - 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 581, 582, 583, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, - 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 590, 0, 591, 0, 592, 0, 0, 593, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 604, - 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 612, 0, 0, 0, 613, 614, 0, 615, 0, 616, 0, 0, 0, 0, 0, - 617, 618, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 622, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 627, 0, 0, 628, 0, - 0, 629, 630, 0, 0, 631, 0, 632, 633, 0, 0, 634, 0, 635, 636, 0, 0, 637, 0, 638, 639, 0, 0, 640, 0, 641, 642, 0, 0, 643, 0, 644, - 0, 0, 0, 645, 0, 0, 0, 646, 0, 0, 647, 648, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 651, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 654, 0, 655, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, - 0, 658, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 0, 0, 0, 663, 0, - 664, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 668, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 670, 0, 671, 0, 672, 0, - 673, 0, 674, 0, 0, 0, 0, 675, 676, 677, 0, 678, 679, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 684, 685, 0, 0, 686, 687, 0, 0, 0, 688, 0, 0, 0, - 0, 0, 689, 0, 0, 690, 0, 691, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 695, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 698, 0, 0, 0, 0, 699, 0, 0, 0, 700, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, 704, 705, 0, 0, 0, 0, - 0, 706, 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 710, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 712, 0, 0, 0, 713, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, - 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0158[64] = { + 0x0000000040501101ull, 0x0000000000000000ull, 0x0004000000080004ull, 0x0000000000000004ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x2400020000000000ull, 0x1510002000000008ull, + 0x8000000000000040ull, 0x0840000000000000ull, 0x0A02054000000280ull, 0x85090905010A1212ull, + 0x4241404284848280ull, 0x0424022402120242ull, 0x4002000889022448ull, 0x8842040811550244ull, + 0x1128229AA95024D2ull, 0x1409112822250541ull, 0x004B400098216218ull, 0x8A15102888891450ull, + 0x5140040015408888ull, 0x0888890A80A22224ull, 0x5091040015455424ull, 0x1A28010410005515ull, + 0x9889082489248908ull, 0x2245049442511550ull, 0x13112104A2242A05ull, 0x0000406A05512AAAull, + 0x00A0C08046242800ull, 0x10820020A0120C15ull, 0x3548A054A2011846ull, 0x0024140A28890006ull, + 0x3444A48450192142ull, 0x940A12284024140Aull, 0x0024000020001148ull, 0x0544000120000000ull, + 0x0000000201900100ull, 0x0200000040000001ull, 0x0085000000082540ull, 0x0005000000100000ull, + 0x4509090501054000ull, 0x9090501142424140ull, 0x2120242424140450ull, 0x9022448042402240ull, + 0x0008500002000088ull, 0x0A4AAAA404204210ull, 0x02E0811484042204ull, 0x4408801549522141ull, + 0x0214000080020A84ull, 0x02AAA90108108400ull, 0x452101088102AA6Aull, 0x055254885040B820ull, + 0x02200082A1110220ull, 0x000B400705622808ull, 0x0000101000000000ull, 0xA69A69A64C000000ull, + 0x0000040040404C88ull, 0x0000000A801A8000ull, 0x5404890342804000ull, 0x1198081001081B85ull, + 0x00000000040010A4ull, 0x0D40488400091080ull, 0x2224088800848822ull, 0x1004040100040001ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0158[64] = { + 1u, 7u, 7u, 10u, 11u, 11u, 11u, 14u, 20u, 22u, 24u, 32u, 48u, 62u, 74u, 85u, + 100u, 122u, 139u, 154u, 172u, 185u, 201u, 218u, 233u, 251u, 270u, 288u, 305u, 317u, 330u, 350u, + 363u, 382u, 398u, 405u, 411u, 416u, 419u, 427u, 430u, 443u, 458u, 472u, 485u, 491u, 508u, 522u, + 539u, 548u, 562u, 580u, 598u, 609u, 624u, 626u, 645u, 653u, 660u, 673u, 689u, 694u, 706u, 719u, }; void recomp_unit_0158_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -157,13 +52,25 @@ void recomp_unit_0158_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A7C004u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0158[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0158[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0158[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A7C004; @@ -902,7 +809,6 @@ L_08A7C004: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -912,9 +818,7 @@ L_08A7C004: } L_08A7C024: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7C054; } @@ -936,7 +840,6 @@ L_08A7C034: } L_08A7C054: ctx.gpr[31] = (0x08A7C05Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7C05Cu) goto L_08A7C05C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7C05C: @@ -1360,7 +1263,17 @@ L_08A7C30C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7C6A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-464)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(436), aot_gpr_16); @@ -1466,7 +1379,6 @@ L_08A7C7D4: } L_08A7C7E4: ctx.gpr[31] = (0x08A7C7ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7C7ECu) goto L_08A7C7EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7C7EC: @@ -1492,9 +1404,7 @@ L_08A7C7F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(40))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7C900; } @@ -1601,7 +1511,6 @@ L_08A7C81C: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(4), aot_gpr_6); aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(8), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7C9DC; } @@ -1736,7 +1645,6 @@ L_08A7C9F0: } L_08A7CA20: { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7CAA4; } @@ -1775,7 +1683,6 @@ L_08A7CA28: goto L_08A7DBBC; L_08A7CA9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7CE90; } @@ -1802,7 +1709,6 @@ L_08A7CAC8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(240), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -1818,7 +1724,6 @@ L_08A7CAF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CB14; @@ -1832,7 +1737,6 @@ L_08A7CB08: L_08A7CB14: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CB34; @@ -1846,9 +1750,7 @@ L_08A7CB28: L_08A7CB34: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7CB50; } @@ -1872,7 +1774,6 @@ L_08A7CB64: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(240), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -1888,7 +1789,6 @@ L_08A7CB8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CBB0; @@ -1902,7 +1802,6 @@ L_08A7CBA4: L_08A7CBB0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CBD0; @@ -1916,9 +1815,7 @@ L_08A7CBC4: L_08A7CBD0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7CBEC; } @@ -1942,7 +1839,6 @@ L_08A7CC00: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(240), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -1958,7 +1854,6 @@ L_08A7CC28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CC4C; @@ -1972,7 +1867,6 @@ L_08A7CC40: L_08A7CC4C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CC6C; @@ -1986,9 +1880,7 @@ L_08A7CC60: L_08A7CC6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7CC88; } @@ -2012,7 +1904,6 @@ L_08A7CC9C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(240), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -2028,7 +1919,6 @@ L_08A7CCC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(240))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CCE8; @@ -2042,7 +1932,6 @@ L_08A7CCDC: L_08A7CCE8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(244))); goto L_08A7CD08; @@ -2056,7 +1945,6 @@ L_08A7CCFC: L_08A7CD08: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(272))); goto L_08A7CD28; @@ -2183,7 +2071,6 @@ L_08A7CE1C: L_08A7CE2C: aot_gpr_4 = (aot_gpr_16 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7CE90; } @@ -2228,7 +2115,6 @@ L_08A7CE80: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (aot_gpr_16 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7CE38; } @@ -2252,7 +2138,17 @@ L_08A7CE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7CEC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), aot_gpr_16); @@ -2282,7 +2178,6 @@ L_08A7CF0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 7466u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7CF28; } @@ -2300,7 +2195,6 @@ L_08A7CF28: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7CF64; } @@ -2313,7 +2207,6 @@ L_08A7CF44: AOT_REGCACHE_SYNC_OUT(); return; L_08A7CF4C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7CF5C; } @@ -2339,7 +2232,6 @@ L_08A7CF64: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(16))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D0A8; } @@ -2352,7 +2244,6 @@ L_08A7CF74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7CFAC; } @@ -2365,7 +2256,6 @@ L_08A7CF90: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D0A8; } @@ -2389,7 +2279,6 @@ L_08A7CFC8: aot_gpr_5 = (512u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D008; } @@ -2425,7 +2314,6 @@ L_08A7D008: goto L_08A7D014; L_08A7D014: ctx.gpr[31] = (0x08A7D01Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D01Cu) goto L_08A7D01C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D01C: @@ -2440,7 +2328,6 @@ L_08A7D020: L_08A7D02C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A7D0A8; } @@ -2453,7 +2340,6 @@ L_08A7D038: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D080; } @@ -2466,7 +2352,6 @@ L_08A7D054: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D05C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7D078; } @@ -2475,7 +2360,6 @@ L_08A7D05C: L_08A7D064: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D088; } @@ -2507,7 +2391,6 @@ L_08A7D080: } L_08A7D088: ctx.gpr[31] = (0x08A7D090u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D090u) goto L_08A7D090; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D090: @@ -2548,7 +2431,6 @@ L_08A7D0B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D0D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7D14C; } @@ -2557,7 +2439,6 @@ L_08A7D0D0: L_08A7D0D8: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7D12C; } @@ -2592,7 +2473,6 @@ L_08A7D104: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D11C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7D12C; } @@ -2628,7 +2508,6 @@ L_08A7D144: L_08A7D14C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7D78C; } @@ -2663,7 +2542,6 @@ L_08A7D178: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D190: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7D78C; } @@ -2682,7 +2560,6 @@ L_08A7D1A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(16))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D6C4; } @@ -2692,7 +2569,6 @@ L_08A7D1B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(16))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D6C4; } @@ -2701,7 +2577,6 @@ L_08A7D1B4: L_08A7D1C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D464; } @@ -2714,7 +2589,6 @@ L_08A7D1D0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D464; } @@ -2722,7 +2596,6 @@ L_08A7D1D0: } L_08A7D1EC: ctx.gpr[31] = (0x08A7D1F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D1F4u) goto L_08A7D1F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D1F4: @@ -2830,7 +2703,6 @@ L_08A7D2C4: goto L_08A7D2C8; L_08A7D2C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D45C; } @@ -2859,7 +2731,6 @@ L_08A7D2DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(0)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D45C; } @@ -2874,7 +2745,6 @@ L_08A7D31C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D344; } @@ -2882,14 +2752,12 @@ L_08A7D31C: } L_08A7D32C: ctx.gpr[31] = (0x08A7D334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D334u) goto L_08A7D334; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D334: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D45C; } @@ -2898,7 +2766,6 @@ L_08A7D334: L_08A7D344: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_17 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7D3D4; } @@ -2908,7 +2775,6 @@ L_08A7D350: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D3D4; } @@ -2918,7 +2784,6 @@ L_08A7D360: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 237u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D3D4; } @@ -2938,7 +2803,6 @@ L_08A7D380: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1956))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D3D4; } @@ -2946,7 +2810,6 @@ L_08A7D380: } L_08A7D390: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A7D3C4; } @@ -2959,7 +2822,6 @@ L_08A7D398: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D3C4; } @@ -2969,7 +2831,6 @@ L_08A7D3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(380))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D3D4; } @@ -2977,7 +2838,6 @@ L_08A7D3B4: } L_08A7D3C4: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A7D440; } @@ -2985,7 +2845,6 @@ L_08A7D3C4: } L_08A7D3CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7D3E8; } @@ -3004,14 +2863,12 @@ L_08A7D3D4: } L_08A7D3E8: ctx.gpr[31] = (0x08A7D3F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D3F0u) goto L_08A7D3F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D3F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D440; } @@ -3021,7 +2878,6 @@ L_08A7D400: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 214u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D440; } @@ -3031,7 +2887,6 @@ L_08A7D410: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 250u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D440; } @@ -3041,7 +2896,6 @@ L_08A7D420: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D440; } @@ -3051,7 +2905,6 @@ L_08A7D430: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D45C; } @@ -3072,7 +2925,6 @@ L_08A7D440: } L_08A7D45C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7D60C; } @@ -3080,7 +2932,6 @@ L_08A7D45C: } L_08A7D464: ctx.gpr[31] = (0x08A7D46Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D46Cu) goto L_08A7D46C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D46C: @@ -3105,7 +2956,6 @@ L_08A7D474: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(0)))))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D60C; } @@ -3123,7 +2973,6 @@ L_08A7D4AC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D60C; } @@ -3138,7 +2987,6 @@ L_08A7D4E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D50C; } @@ -3146,14 +2994,12 @@ L_08A7D4E4: } L_08A7D4F4: ctx.gpr[31] = (0x08A7D4FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7D4FCu) goto L_08A7D4FC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7D4FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(1280)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D60C; } @@ -3162,7 +3008,6 @@ L_08A7D4FC: L_08A7D50C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_17 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7D590; } @@ -3172,7 +3017,6 @@ L_08A7D518: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D590; } @@ -3182,7 +3026,6 @@ L_08A7D528: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 237u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D590; } @@ -3202,7 +3045,6 @@ L_08A7D548: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1956))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D590; } @@ -3210,7 +3052,6 @@ L_08A7D548: } L_08A7D558: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A7D580; } @@ -3224,7 +3065,6 @@ L_08A7D560: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D590; } @@ -3232,7 +3072,6 @@ L_08A7D560: } L_08A7D580: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A7D5F0; } @@ -3260,7 +3099,6 @@ L_08A7D590: L_08A7D5A4: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D5F0; } @@ -3270,7 +3108,6 @@ L_08A7D5B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 214u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D5F0; } @@ -3280,7 +3117,6 @@ L_08A7D5C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 250u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D5F0; } @@ -3290,7 +3126,6 @@ L_08A7D5D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D5F0; } @@ -3300,7 +3135,6 @@ L_08A7D5E0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 278u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D60C; } @@ -3322,7 +3156,6 @@ L_08A7D5F0: L_08A7D60C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D66C; } @@ -3333,7 +3166,6 @@ L_08A7D618: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D66C; } @@ -3346,7 +3178,6 @@ L_08A7D62C: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D634: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7D664; } @@ -3359,7 +3190,6 @@ L_08A7D63C: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D644: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7D664; } @@ -3369,7 +3199,6 @@ L_08A7D64C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D674; } @@ -3459,7 +3288,6 @@ L_08A7D6C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D78C; } @@ -3468,7 +3296,6 @@ L_08A7D6C4: L_08A7D6D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D734; } @@ -3479,7 +3306,6 @@ L_08A7D6E0: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D734; } @@ -3492,7 +3318,6 @@ L_08A7D6F4: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D6FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7D72C; } @@ -3505,7 +3330,6 @@ L_08A7D704: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D70C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7D72C; } @@ -3515,7 +3339,6 @@ L_08A7D714: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D73C; } @@ -3638,9 +3461,7 @@ L_08A7D7A4: aot_gpr_4 = (17317u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7D7F4; } @@ -3653,9 +3474,7 @@ L_08A7D7D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D7D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7D7F4; } @@ -3676,7 +3495,6 @@ L_08A7D7F4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D84C; } @@ -3687,7 +3505,6 @@ L_08A7D810: aot_gpr_5 = (512u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D84C; } @@ -3724,7 +3541,6 @@ L_08A7D84C: L_08A7D858: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A7D9CC; } @@ -3755,7 +3571,6 @@ L_08A7D880: L_08A7D88C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D8B0; } @@ -3777,7 +3592,6 @@ L_08A7D8B0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(20))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A7D8D0; } @@ -3815,7 +3629,6 @@ L_08A7D8F0: L_08A7D8F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D98C; } @@ -3826,7 +3639,6 @@ L_08A7D900: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D98C; } @@ -3839,7 +3651,6 @@ L_08A7D914: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D91C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7D97C; } @@ -3852,7 +3663,6 @@ L_08A7D924: AOT_REGCACHE_SYNC_OUT(); return; L_08A7D92C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7D97C; } @@ -3862,7 +3672,6 @@ L_08A7D934: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(57))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7D95C; } @@ -3872,7 +3681,6 @@ L_08A7D944: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7D9A0; } @@ -3924,7 +3732,6 @@ L_08A7D98C: L_08A7D994: aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7D9C4; } @@ -3960,7 +3767,6 @@ L_08A7D9CC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(58))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7DA38; } @@ -3998,9 +3804,7 @@ L_08A7DA0C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7DB98; } @@ -4008,7 +3812,6 @@ L_08A7DA0C: } L_08A7DA28: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A7DB98; } @@ -4057,7 +3860,6 @@ L_08A7DA68: goto L_08A7DA78; L_08A7DA78: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A7DB64; } @@ -4066,7 +3868,6 @@ L_08A7DA78: L_08A7DA80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7DAA4; } @@ -4088,7 +3889,6 @@ L_08A7DAA4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(20))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A7DAC4; } @@ -4126,7 +3926,6 @@ L_08A7DAE4: L_08A7DAE8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7DB20; } @@ -4137,7 +3936,6 @@ L_08A7DAF4: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7DB20; } @@ -4150,7 +3948,6 @@ L_08A7DB08: AOT_REGCACHE_SYNC_OUT(); return; L_08A7DB10: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7DB28; } @@ -4158,7 +3955,6 @@ L_08A7DB10: } L_08A7DB18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7DB54; } @@ -4179,7 +3975,6 @@ L_08A7DB28: AOT_REGCACHE_SYNC_OUT(); return; L_08A7DB30: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7DB54; } @@ -4223,9 +4018,7 @@ L_08A7DB6C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7DB98; } @@ -4233,7 +4026,6 @@ L_08A7DB6C: } L_08A7DB88: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A7DB98; } @@ -4262,7 +4054,17 @@ L_08A7DB9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7DBBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[21]); @@ -4305,9 +4107,7 @@ L_08A7DC30: L_08A7DC38: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7DC58; } @@ -4324,9 +4124,7 @@ L_08A7DC4C: } L_08A7DC58: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7DC6C; } @@ -4376,7 +4174,6 @@ L_08A7DCC0: aot_fpr_13 = std::bit_cast(ctx.gpr[23]); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_17 = (ctx.gpr[18] << 3u); if (branch_taken) { @@ -4405,7 +4202,6 @@ L_08A7DCE0: } L_08A7DD04: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A7DCA0; } @@ -4434,7 +4230,6 @@ L_08A7DD30: aot_fpr_12 = std::bit_cast(ctx.gpr[20]); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); goto L_08A7DD54; @@ -4462,7 +4257,6 @@ L_08A7DD54: } L_08A7DD78: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A7DD14; } @@ -4507,9 +4301,7 @@ L_08A7DDC8: L_08A7DDE0: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7DE0C; } @@ -4520,7 +4312,6 @@ L_08A7DDF4: aot_gpr_4 = (std::bit_cast(aot_fpr_13)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7DE0C; } @@ -4531,9 +4322,7 @@ L_08A7DE08: goto L_08A7DE0C; L_08A7DE0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7DE34; } @@ -4544,7 +4333,6 @@ L_08A7DE1C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7DE34; } @@ -4578,7 +4366,6 @@ L_08A7DE68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7DE80; } @@ -4586,7 +4373,6 @@ L_08A7DE68: } L_08A7DE78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7E234; } @@ -4645,7 +4431,6 @@ L_08A7DEC0: L_08A7DED0: aot_gpr_4 = (0u | 50u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A7DEE4; } @@ -4653,7 +4438,6 @@ L_08A7DED0: } L_08A7DEDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7DF08; } @@ -4661,7 +4445,6 @@ L_08A7DEDC: } L_08A7DEE4: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08A7DEF8; } @@ -4681,7 +4464,6 @@ L_08A7DEF8: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7DED0; } @@ -4713,7 +4495,6 @@ L_08A7DF0C: L_08A7DF44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08A7E024; } @@ -4721,7 +4502,6 @@ L_08A7DF44: } L_08A7DF50: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = ctx.fpr[24] - ctx.fpr[26]; goto L_08A7DF70; @@ -4774,7 +4554,6 @@ L_08A7DFB4: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[7] = (std::bit_cast(aot_fpr_12)); { const bool branch_taken = aot_gpr_17 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A7DF78; } @@ -4809,7 +4588,6 @@ L_08A7E008: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A7E0B8; } @@ -4859,7 +4637,6 @@ L_08A7E054: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A7E044; } @@ -4867,7 +4644,6 @@ L_08A7E054: } L_08A7E074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7E0B8; } @@ -4910,7 +4686,6 @@ L_08A7E0AC: goto L_08A7E0B8; L_08A7E0B8: { const bool branch_taken = aot_gpr_17 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A7E200; } @@ -4919,7 +4694,6 @@ L_08A7E0B8: L_08A7E0C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08A7E198; } @@ -4927,7 +4701,6 @@ L_08A7E0C0: } L_08A7E0CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_08A7E0EC; @@ -4983,7 +4756,6 @@ L_08A7E134: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[7] = (std::bit_cast(aot_fpr_12)); { const bool branch_taken = aot_gpr_17 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08A7E0F8; } @@ -5015,7 +4787,6 @@ L_08A7E17C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7E224; } @@ -5031,7 +4802,6 @@ L_08A7E190: } L_08A7E198: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_08A7E1F4; @@ -5064,7 +4834,6 @@ L_08A7E1D0: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A7E1B4; } @@ -5072,7 +4841,6 @@ L_08A7E1D0: } L_08A7E1EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7E224; } @@ -5089,7 +4857,6 @@ L_08A7E1F4: } L_08A7E200: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_20 - ctx.fpr[22]; goto L_08A7E21C; @@ -5139,7 +4906,17 @@ L_08A7E234: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7E278: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(472), aot_gpr_16); @@ -5255,7 +5032,6 @@ L_08A7E3CC: } L_08A7E3DC: ctx.gpr[31] = (0x08A7E3E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7E3E4u) goto L_08A7E3E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7E3E4: @@ -5301,9 +5077,7 @@ L_08A7E3EC: aot_gpr_4 = (16768u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7E460; } @@ -5335,9 +5109,7 @@ L_08A7E424: aot_gpr_4 = (aot_gpr_4 | 57672u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7E460; } @@ -5384,9 +5156,7 @@ L_08A7E464: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7E504; } @@ -5489,7 +5259,6 @@ L_08A7E488: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7E57C; } @@ -5666,7 +5435,6 @@ L_08A7E5E8: } L_08A7E61C: { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A7E844; } @@ -5674,7 +5442,6 @@ L_08A7E61C: } L_08A7E624: ctx.gpr[31] = (0x08A7E62Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 39u, 0x089603D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7E62Cu) goto L_08A7E62C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7E62C: @@ -5690,9 +5457,7 @@ L_08A7E638: aot_gpr_4 = (aot_gpr_4 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7E6CC; } @@ -5731,7 +5496,6 @@ L_08A7E650: goto L_08A7DBBC; L_08A7E6C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7E83C; } @@ -5740,7 +5504,6 @@ L_08A7E6C4: L_08A7E6CC: aot_gpr_17 = (2216u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_17 = (aot_gpr_17 + static_cast(-5016)); if (branch_taken) { @@ -5811,7 +5574,6 @@ L_08A7E754: goto L_08A7DBBC; L_08A7E7C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7E83C; } @@ -5849,7 +5611,6 @@ L_08A7E7CC: goto L_08A7DBBC; L_08A7E83C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7EC20; } @@ -5875,7 +5636,6 @@ L_08A7E864: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5891,7 +5651,6 @@ L_08A7E88C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7E8B0; @@ -5905,7 +5664,6 @@ L_08A7E8A4: L_08A7E8B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(300))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7E8D0; @@ -5919,9 +5677,7 @@ L_08A7E8C4: L_08A7E8D0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7E8EC; } @@ -5944,7 +5700,6 @@ L_08A7E8FC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5960,7 +5715,6 @@ L_08A7E924: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7E948; @@ -5974,7 +5728,6 @@ L_08A7E93C: L_08A7E948: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(300))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7E968; @@ -5988,9 +5741,7 @@ L_08A7E95C: L_08A7E968: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7E984; } @@ -6013,7 +5764,6 @@ L_08A7E994: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -6029,7 +5779,6 @@ L_08A7E9BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7E9E0; @@ -6043,7 +5792,6 @@ L_08A7E9D4: L_08A7E9E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(300))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7EA00; @@ -6057,9 +5805,7 @@ L_08A7E9F4: L_08A7EA00: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7EA1C; } @@ -6082,7 +5828,6 @@ L_08A7EA2C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -6098,7 +5843,6 @@ L_08A7EA54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(256))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7EA78; @@ -6112,7 +5856,6 @@ L_08A7EA6C: L_08A7EA78: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(300))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); goto L_08A7EA98; @@ -6126,7 +5869,6 @@ L_08A7EA8C: L_08A7EA98: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(292))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(288))); goto L_08A7EAB8; @@ -6253,7 +5995,6 @@ L_08A7EBAC: L_08A7EBBC: aot_gpr_4 = (aot_gpr_16 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7EC20; } @@ -6297,7 +6038,6 @@ L_08A7EC10: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (aot_gpr_16 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7EBC8; } @@ -6325,7 +6065,17 @@ L_08A7EC20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7EC68: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::World) && rt.memory().direct_fastmem_enabled()) { @@ -6455,7 +6205,6 @@ L_08A7ED8C: } L_08A7ED98: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A7F028; } @@ -6463,7 +6212,6 @@ L_08A7ED98: } L_08A7EDA0: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A7EF24; } @@ -6471,7 +6219,6 @@ L_08A7EDA0: } L_08A7EDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7EDF0; } @@ -6487,7 +6234,6 @@ L_08A7EDB0: } L_08A7EDB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7F028; } @@ -6495,12 +6241,10 @@ L_08A7EDB8: } L_08A7EDC0: ctx.gpr[31] = (0x08A7EDC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 542u, 0x08AD3220u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7EDC8u) goto L_08A7EDC8; AOT_REGCACHE_SYNC_OUT(); return; L_08A7EDC8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7EDE8; } @@ -6509,7 +6253,6 @@ L_08A7EDC8: L_08A7EDD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7640))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7EDE8; } @@ -6523,7 +6266,6 @@ L_08A7EDDC: AOT_REGCACHE_SYNC_OUT(); return; L_08A7EDE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F028; } @@ -6536,7 +6278,6 @@ L_08A7EDF0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A7EE4C; } @@ -6570,7 +6311,6 @@ L_08A7EE38: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7EE6C; } @@ -6612,7 +6352,6 @@ L_08A7EE80: } L_08A7EE8C: ctx.gpr[31] = (0x08A7EE94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7EE94u) goto L_08A7EE94; AOT_REGCACHE_SYNC_OUT(); return; L_08A7EE94: @@ -6656,7 +6395,6 @@ L_08A7EEDC: goto L_08A7EEE0; L_08A7EEE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7EF04; } @@ -6685,7 +6423,6 @@ L_08A7EF04: goto L_08A7EF1C; L_08A7EF1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F028; } @@ -6753,7 +6490,6 @@ L_08A7EF7C: goto L_08A7EF84; L_08A7EF84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7EF94; } @@ -6761,7 +6497,6 @@ L_08A7EF84: } L_08A7EF8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F028; } @@ -6776,9 +6511,7 @@ L_08A7EF94: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F020; } @@ -6786,9 +6519,7 @@ L_08A7EF94: } L_08A7EFC0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F020; } @@ -6799,9 +6530,7 @@ L_08A7EFD0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F020; } @@ -6809,9 +6538,7 @@ L_08A7EFD0: } L_08A7EFEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F020; } @@ -6821,7 +6548,6 @@ L_08A7EFFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10068))); aot_gpr_5 = (static_cast(aot_gpr_4) < 149 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7F020; } @@ -6836,7 +6562,6 @@ L_08A7F00C: goto L_08A7F020; L_08A7F020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F028; } @@ -6844,7 +6569,6 @@ L_08A7F020: } L_08A7F028: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A7ED28; } @@ -6880,7 +6604,17 @@ L_08A7F048: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F080: // TIER2_SUPERBLOCK_V2_HOOK_BEGIN if (vcs::tier2_cluster_enabled(vcs::Tier2ClusterId::World) && rt.memory().direct_fastmem_enabled()) { @@ -7010,7 +6744,6 @@ L_08A7F1A4: } L_08A7F1B0: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08A7F480; } @@ -7018,7 +6751,6 @@ L_08A7F1B0: } L_08A7F1B8: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A7F37C; } @@ -7026,7 +6758,6 @@ L_08A7F1B8: } L_08A7F1C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F248; } @@ -7042,7 +6773,6 @@ L_08A7F1C8: } L_08A7F1D0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7F480; } @@ -7050,12 +6780,10 @@ L_08A7F1D0: } L_08A7F1D8: ctx.gpr[31] = (0x08A7F1E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 542u, 0x08AD3220u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7F1E0u) goto L_08A7F1E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A7F1E0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7F240; } @@ -7077,7 +6805,6 @@ L_08A7F1E8: } L_08A7F208: ctx.gpr[31] = (0x08A7F210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7F210u) goto L_08A7F210; AOT_REGCACHE_SYNC_OUT(); return; L_08A7F210: @@ -7104,7 +6831,6 @@ L_08A7F228: AOT_REGCACHE_SYNC_OUT(); return; L_08A7F230: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7F240; } @@ -7116,7 +6842,6 @@ L_08A7F238: goto L_08A7F240; L_08A7F240: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F480; } @@ -7129,7 +6854,6 @@ L_08A7F248: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A7F2A4; } @@ -7163,7 +6887,6 @@ L_08A7F290: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7F2C4; } @@ -7205,7 +6928,6 @@ L_08A7F2D8: } L_08A7F2E4: ctx.gpr[31] = (0x08A7F2ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7F2ECu) goto L_08A7F2EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7F2EC: @@ -7249,7 +6971,6 @@ L_08A7F334: goto L_08A7F338; L_08A7F338: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7F35C; } @@ -7278,7 +6999,6 @@ L_08A7F35C: goto L_08A7F374; L_08A7F374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F480; } @@ -7346,7 +7066,6 @@ L_08A7F3D4: goto L_08A7F3DC; L_08A7F3DC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A7F3EC; } @@ -7354,7 +7073,6 @@ L_08A7F3DC: } L_08A7F3E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F480; } @@ -7369,9 +7087,7 @@ L_08A7F3EC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F478; } @@ -7379,9 +7095,7 @@ L_08A7F3EC: } L_08A7F418: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F478; } @@ -7392,9 +7106,7 @@ L_08A7F428: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F478; } @@ -7402,9 +7114,7 @@ L_08A7F428: } L_08A7F444: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A7F478; } @@ -7414,7 +7124,6 @@ L_08A7F454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10068))); aot_gpr_5 = (static_cast(aot_gpr_4) < 149 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A7F478; } @@ -7429,7 +7138,6 @@ L_08A7F464: goto L_08A7F478; L_08A7F478: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A7F480; } @@ -7437,7 +7145,6 @@ L_08A7F478: } L_08A7F480: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A7F140; } @@ -7473,7 +7180,17 @@ L_08A7F4A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F4D8: aot_gpr_4 = (2234u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(7840)); @@ -7482,7 +7199,17 @@ L_08A7F4D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F4E8: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7536,11 +7263,20 @@ L_08A7F4E8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F510: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7549,7 +7285,6 @@ L_08A7F510: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A7F564; } @@ -7620,7 +7355,6 @@ L_08A7F58C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7F5C4; } @@ -7643,7 +7377,17 @@ L_08A7F5C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F5D0: aot_gpr_6 = (aot_gpr_5 + static_cast(32)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(14)))))); @@ -7697,7 +7441,17 @@ L_08A7F5D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F694: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7792,7 +7546,6 @@ L_08A7F78C: goto L_08A7F798; L_08A7F798: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A7F7B0; } @@ -7810,7 +7563,6 @@ L_08A7F7A4: goto L_08A7F7B0; L_08A7F7B0: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A7F7C8; } @@ -7828,7 +7580,6 @@ L_08A7F7BC: goto L_08A7F7C8; L_08A7F7C8: { const bool branch_taken = ctx.gpr[9] == ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A7F7E0; } @@ -7846,7 +7597,6 @@ L_08A7F7D4: goto L_08A7F7E0; L_08A7F7E0: { const bool branch_taken = ctx.gpr[10] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08A7F7F8; } @@ -7914,7 +7664,17 @@ L_08A7F83C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7F85C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7985,12 +7745,10 @@ L_08A7F8AC: } L_08A7F940: ctx.gpr[31] = (0x08A7F948u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7F948u) goto L_08A7F948; AOT_REGCACHE_SYNC_OUT(); return; L_08A7F948: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A7F954; } @@ -8018,7 +7776,6 @@ L_08A7F954: } L_08A7F980: ctx.gpr[31] = (0x08A7F988u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0066_entry, 66u, 696u, 0x0890EF94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7F988u) goto L_08A7F988; AOT_REGCACHE_SYNC_OUT(); return; L_08A7F988: @@ -8072,7 +7829,17 @@ L_08A7F990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8103,7 +7870,6 @@ L_08A7FA68: AOT_REGCACHE_SYNC_OUT(); return; L_08A7FA7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A7FA88; } @@ -8123,7 +7889,17 @@ L_08A7FA88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FAA4: ctx.gpr[2] = (2216u << 16u); jump_target = ctx.gpr[31]; @@ -8131,12 +7907,21 @@ L_08A7FAA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FAB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08A7FAC0u); - // nop goto L_08A7FAA4; L_08A7FAC0: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8145,7 +7930,17 @@ L_08A7FAC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8175,7 +7970,6 @@ L_08A7FAFC: goto L_08A7FB04; L_08A7FB04: ctx.gpr[31] = (0x08A7FB0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7FB0Cu) goto L_08A7FB0C; AOT_REGCACHE_SYNC_OUT(); return; L_08A7FB0C: @@ -8197,7 +7991,6 @@ L_08A7FB24: goto L_08A7FB28; L_08A7FB28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7FB34; } @@ -8217,7 +8010,17 @@ L_08A7FB34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FB50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8242,7 +8045,17 @@ L_08A7FB64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FB94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8276,7 +8089,6 @@ L_08A7FBD0: L_08A7FBD4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_17; - // nop if (branch_taken) { goto L_08A7FBE4; } @@ -8307,7 +8119,6 @@ L_08A7FBF4: L_08A7FC0C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A7FC20; } @@ -8327,7 +8138,17 @@ L_08A7FC20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FC34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8417,12 +8238,21 @@ L_08A7FD20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FD34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08A7FD44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 355u, 0x08A9AE40u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7FD44u) goto L_08A7FD44; AOT_REGCACHE_SYNC_OUT(); return; L_08A7FD44: @@ -8432,7 +8262,17 @@ L_08A7FD44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A7FD50: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(136), aot_gpr_16); @@ -8482,7 +8322,6 @@ L_08A7FDBC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A7FDEC; } @@ -8490,7 +8329,6 @@ L_08A7FDBC: } L_08A7FDDC: ctx.gpr[31] = (0x08A7FDE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7FDE4u) goto L_08A7FDE4; AOT_REGCACHE_SYNC_OUT(); return; L_08A7FDE4: @@ -8609,9 +8447,7 @@ L_08A7FEB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 3u, 0x08A8007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8640,7 +8476,6 @@ L_08A7FEE8: L_08A7FEF8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 3u, 0x08A8007Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8727,7 +8562,6 @@ L_08A7FFAC: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), std::bit_cast(aot_fpr_12)); ctx.gpr[31] = (0x08A7FFCCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A7FFCCu) goto L_08A7FFCC; AOT_REGCACHE_SYNC_OUT(); return; L_08A7FFCC: diff --git a/profiles/vcs/generated/generated_unit_0159.cpp b/profiles/vcs/generated/generated_unit_0159.cpp index 34972c0..26c7e6f 100644 --- a/profiles/vcs/generated/generated_unit_0159.cpp +++ b/profiles/vcs/generated/generated_unit_0159.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0159[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 54, 55, 0, 0, 0, 0, 56, 0, 0, 57, 58, 0, 0, 0, 59, 0, 0, - 0, 60, 61, 0, 0, 0, 62, 0, 0, 0, 63, 64, 0, 0, 0, 65, 0, 0, 0, 66, 67, 0, 0, 0, 68, 69, 0, 0, 0, 70, 71, 0, - 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, - 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, - 99, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 109, 0, 0, 0, 110, 0, 111, 0, 112, 0, 113, 0, 0, 0, 114, 0, 115, - 0, 0, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 121, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 124, 0, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 0, 130, 0, 131, 0, 132, 0, 0, 133, 0, 0, 134, 0, 0, 135, - 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 142, 0, 143, - 0, 144, 0, 0, 0, 0, 0, 145, 146, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 150, 0, 151, 0, 0, 0, 0, - 152, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 155, 0, 0, 0, 156, 157, 0, 158, 0, 159, 0, 0, 0, 0, 0, 160, 161, 162, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 165, 0, 0, 0, 0, 166, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, - 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 177, 0, 0, 178, - 0, 0, 179, 0, 180, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 0, 0, 188, - 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 194, 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, 199, 0, 200, 0, 0, 0, 201, - 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, - 0, 217, 0, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 221, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, - 227, 0, 0, 0, 0, 228, 0, 0, 229, 0, 0, 230, 0, 231, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, - 0, 236, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 240, 241, 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 244, - 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 247, 248, 0, 249, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, - 0, 0, 0, 0, 253, 254, 255, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 259, 0, 0, 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, - 0, 0, 263, 0, 0, 0, 264, 0, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 267, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, 276, 0, 0, 277, 0, - 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 0, - 285, 0, 0, 0, 286, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, - 292, 0, 293, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, - 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 302, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, - 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, - 0, 339, 0, 0, 340, 0, 0, 0, 341, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 347, - 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, - 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 366, 0, 0, 367, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, 370, 0, 0, - 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, 375, 0, 0, 0, 376, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, - 0, 378, 0, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 383, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 386, 0, - 387, 388, 0, 0, 0, 0, 0, 389, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 393, 394, 0, 395, 0, 0, 396, 0, 397, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0159[64] = { + 0x8008244480020001ull, 0x0000000000048000ull, 0x0000048002400540ull, 0x0000000120000000ull, + 0x0000000000480000ull, 0x8000000000001200ull, 0x0000000002010004ull, 0x9000000000001200ull, + 0x0100800000000000ull, 0x0000090000000000ull, 0x0000000048000000ull, 0x0000000000024000ull, + 0x4080220088024012ull, 0x63188C4623218888ull, 0x0000000000002001ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x2000000000000000ull, 0x0000000000000001ull, 0x0000000900000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000480000000ull, 0x0048000002400000ull, + 0x0000000020280048ull, 0x0000000000000000ull, 0x0000000001200000ull, 0x0000000000012000ull, + 0x0090000000000000ull, 0x0091050909004800ull, 0x020A9228A2A8A802ull, 0xB11405009254AA90ull, + 0x382B11410AA00382ull, 0x800020481030A200ull, 0x8AAA021490408048ull, 0x8A22014200088812ull, + 0x0009091100004900ull, 0x2110880100000000ull, 0x8100000000000052ull, 0x2100004010800000ull, + 0x905C081222242921ull, 0x448A41702120B810ull, 0x4822242440448244ull, 0x0008011111104444ull, + 0x0908000000000000ull, 0x0000000120091045ull, 0x0000000000090000ull, 0x4240000000000048ull, + 0x0000009004802200ull, 0x0010442204800000ull, 0x0000000120011000ull, 0x0000001200110000ull, + 0x2200000000000000ull, 0x0000000000004400ull, 0x0000000022008800ull, 0x2000000000401000ull, + 0x9000000484884512ull, 0x0240000012000000ull, 0x0009000000484844ull, 0x04C0440000000000ull, + 0x0008000121100000ull, 0x2000000044220000ull, 0x0000200800000442ull, 0x52E0418350000012ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0159[64] = { + 1u, 10u, 12u, 19u, 21u, 23u, 26u, 29u, 33u, 35u, 37u, 39u, 41u, 51u, 72u, 74u, + 74u, 74u, 75u, 76u, 78u, 78u, 78u, 80u, 84u, 89u, 89u, 91u, 93u, 95u, 106u, 124u, + 144u, 163u, 173u, 189u, 202u, 211u, 217u, 222u, 227u, 245u, 263u, 278u, 289u, 292u, 300u, 302u, + 307u, 313u, 320u, 324u, 328u, 330u, 332u, 336u, 339u, 351u, 355u, 363u, 368u, 373u, 378u, 383u, }; void recomp_unit_0159_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0159_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A80000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0159[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0159[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0159[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A80000; @@ -626,7 +533,6 @@ L_08A80098: L_08A800A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A800CC; } @@ -659,7 +565,17 @@ L_08A800CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A800FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -681,7 +597,6 @@ L_08A800FC: L_08A8013C: aot_gpr_4 = (0u | 8u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A80220; } @@ -739,7 +654,6 @@ L_08A80148: aot_gpr_6 = (ctx.gpr[17] << 5u); aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A80228; } @@ -747,7 +661,6 @@ L_08A80148: } L_08A80218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A80258; } @@ -755,7 +668,6 @@ L_08A80218: } L_08A80220: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A80CDC; } @@ -778,7 +690,6 @@ L_08A80228: L_08A80258: aot_gpr_5 = (ctx.gpr[16] & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8029C; } @@ -803,7 +714,6 @@ L_08A80264: L_08A8029C: aot_gpr_5 = (ctx.gpr[16] & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80374; } @@ -865,7 +775,6 @@ L_08A802A8: L_08A80374: aot_gpr_5 = (ctx.gpr[16] & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8044C; } @@ -927,7 +836,6 @@ L_08A80380: L_08A8044C: aot_gpr_5 = (ctx.gpr[16] & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80524; } @@ -989,7 +897,6 @@ L_08A80458: L_08A80524: aot_gpr_5 = (ctx.gpr[16] & 32u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A805FC; } @@ -1051,7 +958,6 @@ L_08A80530: L_08A805FC: aot_gpr_5 = (ctx.gpr[16] & 64u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80640; } @@ -1082,7 +988,6 @@ L_08A80640: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (ctx.gpr[16] & 128u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80724; } @@ -1141,7 +1046,6 @@ L_08A80664: L_08A80724: aot_gpr_5 = (ctx.gpr[16] & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A807F0; } @@ -1200,7 +1104,6 @@ L_08A80730: L_08A807F0: aot_gpr_5 = (ctx.gpr[16] & 512u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A808BC; } @@ -1265,7 +1168,6 @@ L_08A808BC: aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_5 = (ctx.gpr[16] & 1024u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A809A0; } @@ -1324,7 +1226,6 @@ L_08A808E0: L_08A809A0: aot_gpr_5 = (ctx.gpr[16] & 2048u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80A6C; } @@ -1383,7 +1284,6 @@ L_08A809AC: L_08A80A6C: aot_gpr_5 = (ctx.gpr[16] & 4096u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80B38; } @@ -1442,7 +1342,6 @@ L_08A80A78: L_08A80B38: aot_gpr_5 = (ctx.gpr[16] & 8192u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80C04; } @@ -1501,7 +1400,6 @@ L_08A80B44: L_08A80C04: aot_gpr_5 = (ctx.gpr[16] & 16384u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80C38; } @@ -1522,7 +1420,6 @@ L_08A80C10: L_08A80C38: aot_gpr_5 = (ctx.gpr[16] & 32768u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80C6C; } @@ -1544,7 +1441,6 @@ L_08A80C6C: aot_gpr_5 = (1u << 16u); aot_gpr_5 = (ctx.gpr[16] & aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80CA4; } @@ -1566,7 +1462,6 @@ L_08A80CA4: aot_gpr_5 = (2u << 16u); aot_gpr_5 = (ctx.gpr[16] & aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A80CDC; } @@ -1598,13 +1493,22 @@ L_08A80CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A80CF8: ctx.gpr[2] = (0u | 0u); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(48)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(48)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A80D3C; } @@ -1614,7 +1518,6 @@ L_08A80D0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(50)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(50)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A80D3C; } @@ -1624,7 +1527,6 @@ L_08A80D1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A80D3C; } @@ -1634,7 +1536,6 @@ L_08A80D2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_08A80D40; } @@ -1648,7 +1549,6 @@ L_08A80D40: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); aot_gpr_8 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); { const bool branch_taken = aot_gpr_7 != aot_gpr_8; - // nop if (branch_taken) { goto L_08A80D60; } @@ -1657,7 +1557,6 @@ L_08A80D40: L_08A80D54: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); { const bool branch_taken = aot_gpr_7 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A80D64; } @@ -1670,7 +1569,6 @@ L_08A80D64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(24))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A80D84; } @@ -1680,7 +1578,6 @@ L_08A80D74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_08A80D88; } @@ -1693,7 +1590,6 @@ L_08A80D88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(44)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(44)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A80DA8; } @@ -1703,7 +1599,6 @@ L_08A80D98: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(45)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(45)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_08A80DAC; } @@ -1716,7 +1611,6 @@ L_08A80DAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(52)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(52)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A80DCC; } @@ -1726,7 +1620,6 @@ L_08A80DBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(53)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(53)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_08A80DD0; } @@ -1739,7 +1632,6 @@ L_08A80DD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(54)))))); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(54)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_08A80DE4; } @@ -1752,7 +1644,6 @@ L_08A80DE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(55)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(55)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A80DF8; } @@ -1763,11 +1654,20 @@ L_08A80DF4: goto L_08A80DF8; L_08A80DF8: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A80E00: aot_gpr_4 = (aot_gpr_7 & 255u); aot_gpr_8 = (aot_mem.aot_direct_load_word_right(aot_gpr_5 + static_cast(0), aot_gpr_8)); @@ -1781,7 +1681,6 @@ L_08A80E00: aot_mem.aot_direct_store8(aot_gpr_9 + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_7 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A811F4; } @@ -2032,7 +1931,6 @@ L_08A80E34: L_08A811F4: aot_gpr_4 = (aot_gpr_7 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A81380; } @@ -2139,7 +2037,6 @@ L_08A81200: L_08A81380: aot_gpr_4 = (aot_gpr_7 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8167C; } @@ -2338,7 +2235,6 @@ L_08A8138C: L_08A8167C: aot_gpr_4 = (aot_gpr_7 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A81758; } @@ -2401,7 +2297,6 @@ L_08A81688: L_08A81758: aot_gpr_4 = (aot_gpr_7 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A817CC; } @@ -2438,7 +2333,6 @@ L_08A81764: L_08A817CC: aot_gpr_4 = (aot_gpr_7 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8180C; } @@ -2462,7 +2356,6 @@ L_08A817D8: L_08A8180C: aot_gpr_4 = (aot_gpr_7 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8184C; } @@ -2485,11 +2378,20 @@ L_08A81818: goto L_08A8184C; L_08A8184C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A81854: aot_gpr_5 = (aot_gpr_5 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -2498,7 +2400,6 @@ L_08A81854: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A81A54; } @@ -2629,7 +2530,6 @@ L_08A81874: L_08A81A54: aot_gpr_7 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A81B34; } @@ -2693,7 +2593,6 @@ L_08A81A60: L_08A81B34: aot_gpr_7 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A81CD0; } @@ -2804,7 +2703,6 @@ L_08A81B40: L_08A81CD0: aot_gpr_7 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A81D2C; } @@ -2835,7 +2733,6 @@ L_08A81CDC: L_08A81D2C: aot_gpr_7 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A81D60; } @@ -2856,7 +2753,6 @@ L_08A81D38: L_08A81D60: aot_gpr_7 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A81D80; } @@ -2872,7 +2768,6 @@ L_08A81D6C: L_08A81D80: aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A81DA0; } @@ -2887,11 +2782,20 @@ L_08A81D8C: goto L_08A81DA0; L_08A81DA0: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A81DA8: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(20), ctx.gpr[16]); @@ -2930,7 +2834,17 @@ L_08A81DDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A81E04: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -2952,7 +2866,6 @@ L_08A81E2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A81E34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A81EA4; } @@ -2962,7 +2875,6 @@ L_08A81E3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A81EC4; } @@ -2975,7 +2887,6 @@ L_08A81E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08A81E54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A81EA4; } @@ -2990,7 +2901,6 @@ L_08A81E64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(48)))))); aot_gpr_5 = (0u | 97u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A81EA4; } @@ -3005,7 +2915,6 @@ L_08A81E7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(48)))))); aot_gpr_5 = (0u | 187u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A81EA4; } @@ -3020,7 +2929,6 @@ L_08A81E94: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(48)))))); aot_gpr_5 = (0u | 98u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A81ECC; } @@ -3039,7 +2947,6 @@ L_08A81EB0: goto L_08A81EE4; L_08A81EBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A81ECC; } @@ -3047,7 +2954,6 @@ L_08A81EBC: } L_08A81EC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A81ECC; } @@ -3066,7 +2972,17 @@ L_08A81ECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A81EE4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-96)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -3084,7 +3000,6 @@ L_08A81EE4: L_08A81F10: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(900))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A81F2C; } @@ -3092,7 +3007,6 @@ L_08A81F10: } L_08A81F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A82150; } @@ -3113,7 +3027,6 @@ L_08A81F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08A81F34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A81FA8; } @@ -3132,7 +3045,6 @@ L_08A81F48: AOT_REGCACHE_SYNC_OUT(); return; L_08A81F50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A81F64; } @@ -3170,7 +3082,6 @@ L_08A81F7C: AOT_REGCACHE_SYNC_OUT(); return; L_08A81FA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A82150; } @@ -3184,7 +3095,6 @@ L_08A81FA8: aot_gpr_5 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A81FFC; } @@ -3285,7 +3195,6 @@ L_08A8206C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A82150; } @@ -3297,7 +3206,6 @@ L_08A82080: aot_gpr_5 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A820CC; } @@ -3413,7 +3321,17 @@ L_08A82154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A82170: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[31]); @@ -3431,14 +3349,23 @@ L_08A8218C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A82198: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x08A821B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 570u, 0x0888FA44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A821B4u) goto L_08A821B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A821B4: @@ -3494,7 +3421,17 @@ L_08A82218: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8223C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -3525,7 +3462,6 @@ L_08A82270: L_08A8227C: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A82290; } @@ -3548,7 +3484,17 @@ L_08A82290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A822A4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -3569,7 +3515,6 @@ L_08A822C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A822CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A822E4; } @@ -3577,7 +3522,6 @@ L_08A822CC: } L_08A822D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A82304; } @@ -3585,7 +3529,6 @@ L_08A822D4: } L_08A822DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A82384; } @@ -3593,7 +3536,6 @@ L_08A822DC: } L_08A822E4: ctx.gpr[31] = (0x08A822ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 544u, 0x08AD323Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A822ECu) goto L_08A822EC; AOT_REGCACHE_SYNC_OUT(); return; L_08A822EC: @@ -3681,14 +3623,33 @@ L_08A82384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A82398: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A823A0: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[16]); @@ -3730,7 +3691,17 @@ L_08A823EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A823FC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[29] + static_cast(0), ctx.gpr[31]); @@ -3750,7 +3721,17 @@ L_08A82420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8242C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(7), static_cast(aot_gpr_5)); jump_target = ctx.gpr[31]; @@ -3758,7 +3739,17 @@ L_08A8242C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A82438: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-64)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -3891,7 +3882,6 @@ L_08A824CC: aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(680), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(194))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A825AC; } @@ -3918,7 +3908,6 @@ L_08A825AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(194))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A825D0; } @@ -3939,7 +3928,6 @@ L_08A825D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(194))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A825F4; } @@ -3965,7 +3953,6 @@ L_08A825F4: L_08A82604: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(194))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A826E0; } @@ -4026,7 +4013,6 @@ L_08A82618: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(136), std::bit_cast(aot_fpr_12)); ctx.gpr[31] = (0x08A826E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0118_entry, 118u, 188u, 0x089DD2B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A826E0u) goto L_08A826E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A826E0: @@ -4091,7 +4077,17 @@ L_08A82770: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A82798: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-48)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -4103,7 +4099,6 @@ L_08A82798: ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[20] = (ctx.gpr[19] | 0u); ctx.gpr[31] = (0x08A827E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 470u, 0x0888EBACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A827E0u) goto L_08A827E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A827E0: @@ -4157,7 +4152,6 @@ L_08A82834: L_08A82848: aot_mem.aot_direct_store32(ctx.gpr[21] + static_cast(12), ctx.gpr[2]); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A82864; } @@ -4183,7 +4177,6 @@ L_08A82874: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(448))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(448))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82890; } @@ -4199,7 +4192,6 @@ L_08A82890: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(180))); aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4212,7 +4204,6 @@ L_08A828AC: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4228,7 +4219,6 @@ L_08A828CC: goto L_08A828D0; L_08A828D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A828F0; } @@ -4254,7 +4244,6 @@ L_08A828F0: L_08A828FC: aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4267,7 +4256,6 @@ L_08A82910: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4283,7 +4271,6 @@ L_08A82930: goto L_08A82934; L_08A82934: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A82954; } @@ -4309,7 +4296,6 @@ L_08A82954: L_08A82960: aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -4322,7 +4308,6 @@ L_08A82974: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -4338,7 +4323,6 @@ L_08A82994: goto L_08A82998; L_08A82998: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A829B8; } @@ -4363,7 +4347,6 @@ L_08A829B8: goto L_08A829C4; L_08A829C4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A829DC; } @@ -4373,7 +4356,6 @@ L_08A829CC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(195))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(195))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A829E8; } @@ -4388,7 +4370,6 @@ L_08A829E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(176))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(176))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82A08; } @@ -4404,7 +4385,6 @@ L_08A82A08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(194))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(194))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82A24; } @@ -4419,9 +4399,7 @@ L_08A82A24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(200))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(200))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A82A48; } @@ -4436,7 +4414,6 @@ L_08A82A48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(196))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(196))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A82AA8; } @@ -4450,7 +4427,6 @@ L_08A82A58: aot_gpr_7 = (aot_gpr_5 & 2u); aot_gpr_7 = (aot_gpr_7 >> 1u); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A82AA8; } @@ -4480,7 +4456,6 @@ L_08A82A94: aot_gpr_5 = (aot_gpr_5 & 4u); aot_gpr_5 = (aot_gpr_5 >> 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82AB4; } @@ -4495,7 +4470,6 @@ L_08A82AB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(206)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(206)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82AD4; } @@ -4511,9 +4485,7 @@ L_08A82AD4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(456))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(456))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A82AF8; } @@ -4528,7 +4500,6 @@ L_08A82AF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(207)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(207)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82B18; } @@ -4544,7 +4515,6 @@ L_08A82B18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(205)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(205)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82B38; } @@ -4560,9 +4530,7 @@ L_08A82B38: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(460))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(460))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A82B60; } @@ -4578,7 +4546,6 @@ L_08A82B60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(524))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(524))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82B80; } @@ -4594,7 +4561,6 @@ L_08A82B80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(528))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(528))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A82BA0; } @@ -4624,7 +4590,17 @@ L_08A82BA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A82BCC: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -4683,7 +4659,6 @@ L_08A82BCC: ctx.gpr[18] = (aot_gpr_6 | 0u); ctx.gpr[21] = (aot_gpr_7 | 0u); { const bool branch_taken = aot_gpr_8 == 0u; - // nop if (branch_taken) { goto L_08A82CE0; } @@ -4721,7 +4696,6 @@ L_08A82D08: aot_gpr_4 = (ctx.gpr[21] << (ctx.gpr[20] & 31u)); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A82D30; } @@ -4748,7 +4722,6 @@ L_08A82D30: L_08A82D40: aot_gpr_4 = (ctx.gpr[19] & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A82D74; } @@ -4769,7 +4742,6 @@ L_08A82D4C: L_08A82D74: aot_gpr_4 = (ctx.gpr[19] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A82E40; } @@ -4828,7 +4800,6 @@ L_08A82D80: L_08A82E40: aot_gpr_4 = (ctx.gpr[19] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A82F0C; } @@ -4887,7 +4858,6 @@ L_08A82E4C: L_08A82F0C: aot_gpr_4 = (ctx.gpr[19] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A82FD8; } @@ -4946,7 +4916,6 @@ L_08A82F18: L_08A82FD8: aot_gpr_4 = (ctx.gpr[19] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83024; } @@ -4978,7 +4947,6 @@ L_08A83024: aot_gpr_4 = (16u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8305C; } @@ -4999,7 +4967,6 @@ L_08A83034: L_08A8305C: aot_gpr_4 = (ctx.gpr[19] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83090; } @@ -5020,7 +4987,6 @@ L_08A83068: L_08A83090: aot_gpr_4 = (ctx.gpr[19] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8315C; } @@ -5079,7 +5045,6 @@ L_08A8309C: L_08A8315C: aot_gpr_4 = (ctx.gpr[19] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83230; } @@ -5161,7 +5126,6 @@ L_08A83230: aot_gpr_4 = (1u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83274; } @@ -5185,7 +5149,6 @@ L_08A83240: L_08A83274: aot_gpr_4 = (ctx.gpr[19] & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83340; } @@ -5245,7 +5208,6 @@ L_08A83340: aot_gpr_4 = (2u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83384; } @@ -5269,7 +5231,6 @@ L_08A83350: L_08A83384: aot_gpr_4 = (ctx.gpr[19] & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A834E4; } @@ -5366,7 +5327,6 @@ L_08A834E4: aot_gpr_4 = (4u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83528; } @@ -5391,7 +5351,6 @@ L_08A83528: aot_gpr_4 = (8u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8362C; } @@ -5464,7 +5423,6 @@ L_08A8362C: aot_gpr_4 = (32u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83664; } @@ -5486,7 +5444,6 @@ L_08A83664: aot_gpr_4 = (64u << 16u); aot_gpr_4 = (ctx.gpr[19] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83730; } @@ -5558,7 +5515,17 @@ L_08A83730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A83758: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-32)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -5608,7 +5575,6 @@ L_08A837F4: L_08A83804: aot_gpr_4 = (ctx.gpr[17] & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83820; } @@ -5628,7 +5594,6 @@ L_08A83828: aot_gpr_4 = (ctx.gpr[21] << (ctx.gpr[22] & 31u)); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8384C; } @@ -5646,7 +5611,6 @@ L_08A8384C: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A83828; } @@ -5655,7 +5619,6 @@ L_08A8384C: L_08A8385C: aot_gpr_4 = (ctx.gpr[17] & 2048u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8387C; } @@ -5671,7 +5634,6 @@ L_08A83868: L_08A8387C: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A838F0; } @@ -5708,7 +5670,6 @@ L_08A83888: L_08A838F0: aot_gpr_4 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83964; } @@ -5745,7 +5706,6 @@ L_08A838FC: L_08A83964: aot_gpr_4 = (ctx.gpr[17] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A839D8; } @@ -5782,7 +5742,6 @@ L_08A83970: L_08A839D8: aot_gpr_4 = (ctx.gpr[17] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83A08; } @@ -5803,7 +5762,6 @@ L_08A83A08: aot_gpr_4 = (16u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83A2C; } @@ -5819,7 +5777,6 @@ L_08A83A18: L_08A83A2C: aot_gpr_4 = (ctx.gpr[17] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83A4C; } @@ -5835,7 +5792,6 @@ L_08A83A38: L_08A83A4C: aot_gpr_4 = (ctx.gpr[17] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83AC0; } @@ -5872,7 +5828,6 @@ L_08A83A58: L_08A83AC0: aot_gpr_4 = (ctx.gpr[17] & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83BA8; } @@ -5939,7 +5894,6 @@ L_08A83BA8: aot_gpr_4 = (1u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83BDC; } @@ -5953,7 +5907,6 @@ L_08A83BB8: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(206), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(206)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A83BDC; } @@ -5965,7 +5918,6 @@ L_08A83BD8: L_08A83BDC: aot_gpr_4 = (ctx.gpr[17] & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83C50; } @@ -6003,7 +5955,6 @@ L_08A83C50: aot_gpr_4 = (2u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83C74; } @@ -6019,7 +5970,6 @@ L_08A83C60: L_08A83C74: aot_gpr_4 = (ctx.gpr[17] & 4096u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83D44; } @@ -6085,7 +6035,6 @@ L_08A83D44: aot_gpr_4 = (4u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83D68; } @@ -6102,7 +6051,6 @@ L_08A83D68: aot_gpr_4 = (8u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83DF4; } @@ -6145,7 +6093,6 @@ L_08A83DF4: aot_gpr_4 = (32u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83E18; } @@ -6162,7 +6109,6 @@ L_08A83E18: aot_gpr_4 = (64u << 16u); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A83E8C; } @@ -6212,7 +6158,17 @@ L_08A83E8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A83EB4: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-112)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -6234,7 +6190,6 @@ L_08A83EB4: L_08A83F04: aot_gpr_4 = (0u | 8u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A83F78; } @@ -6272,7 +6227,6 @@ L_08A83F10: } L_08A83F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A83F84; } @@ -6295,7 +6249,6 @@ L_08A83F84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_8 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(216))); { const bool branch_taken = aot_gpr_4 == aot_gpr_8; - // nop if (branch_taken) { goto L_08A83FA0; } @@ -6308,7 +6261,6 @@ L_08A83FA0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(232))); aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -6321,7 +6273,6 @@ L_08A83FB8: aot_gpr_8 = (aot_gpr_8 | 14269u); ctx.fpr[15] = std::bit_cast(aot_gpr_8); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -6337,7 +6288,6 @@ L_08A83FD8: goto L_08A83FDC; L_08A83FDC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A83FF0; } diff --git a/profiles/vcs/generated/generated_unit_0160.cpp b/profiles/vcs/generated/generated_unit_0160.cpp index a270ae4..7471369 100644 --- a/profiles/vcs/generated/generated_unit_0160.cpp +++ b/profiles/vcs/generated/generated_unit_0160.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0160[4096] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 6, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 10, 11, 12, 0, 13, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 20, 0, 0, 21, 0, - 22, 0, 23, 0, 24, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 30, 31, 32, 0, 33, 0, 34, 35, 0, 0, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 37, 38, 39, 0, 40, 0, 41, 42, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 44, 45, 46, 0, 47, 0, - 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 0, 0, 0, 51, 52, 53, 0, 54, 0, 55, 56, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 59, 60, 0, 61, 0, - 62, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 66, 67, 0, 68, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 78, 0, 79, 0, 80, 0, 0, - 0, 81, 0, 82, 0, 83, 0, 0, 0, 84, 0, 0, 85, 0, 86, 0, 0, 0, 87, 0, 0, 88, 0, 89, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, - 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 135, 0, 0, 0, 0, 136, 0, 0, 0, 0, - 0, 137, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, - 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, - 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, - 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, - 149, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 155, 0, - 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, - 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, - 0, 172, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 189, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 193, 194, 0, 195, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 210, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, - 215, 0, 0, 0, 216, 0, 0, 0, 217, 218, 219, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 222, 0, 223, 0, 224, - 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 227, 228, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 234, 0, 0, - 0, 235, 0, 0, 0, 236, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 241, 242, 243, - 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 246, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 254, 0, 255, 256, 257, 0, - 0, 0, 0, 0, 258, 0, 0, 259, 0, 260, 261, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 266, 0, 267, 0, 268, 0, 269, - 270, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 0, 0, 0, 275, 276, 0, 0, - 0, 0, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 281, - 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 286, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 297, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 300, 0, 301, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 305, - 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 308, 0, 0, 0, 0, - 0, 0, 309, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 313, 0, 314, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, 318, 0, 319, 0, 320, 0, 321, 0, - 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 0, 0, 0, 0, - 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 343, 0, 0, 0, 0, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, - 347, 0, 348, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, - 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 0, 356, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, - 0, 0, 368, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, - 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 378, 0, - 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 380, 381, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 386, 0, - 387, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, - 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, - 0, 0, 404, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 410, 411, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 416, 0, 417, 0, 418, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 426, - 0, 0, 0, 0, 0, 427, 428, 0, 0, 0, 0, 429, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, - 0, 437, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 444, 0, 445, 0, 446, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 0, 0, 454, - 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 461, 0, - 0, 462, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, - 0, 467, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 473, 0, 0, 474, 0, 0, 475, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, - 478, 0, 479, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 482, 0, 483, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, - 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, 0, 0, 0, 489, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, - 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 0, - 497, 0, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 505, - 0, 0, 506, 0, 0, 507, 0, 0, 508, 0, 0, 509, 0, 0, 510, 0, 0, 511, 0, 0, 512, 0, 0, 513, 0, 0, 514, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, 526, 0, 527, 0, 528, 529, 0, - 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 532, 0, 0, 533, 0, 534, 0, 535, 0, 536, 0, 0, 537, 0, 538, 0, - 539, 0, 540, 0, 541, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 544, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, - 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, - 555, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 561, 0, - 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 567, 0, 0, 0, 568, 0, 0, 0, 569, 0, - 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 575, 0, 0, 0, - 0, 576, 0, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, - 0, 0, 0, 587, 0, 0, 588, 0, 0, 589, 0, 590, 0, 591, 592, 0, 0, 593, 0, 594, 0, 595, 0, 0, 0, 596, 0, 597, 0, 0, 598, 0, - 599, 0, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 0, 610, 0, 611, 0, 612, 613, 0, - 614, 0, 615, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 0, 620, 0, 621, 0, 622, 0, 623, 624, 0, 625, 0, 626, 0, 627, 0, 0, 628, 0, - 0, 0, 629, 0, 630, 631, 0, 632, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 638, 0, - 0, 0, 639, 0, 0, 0, 0, 0, 640, 641, 0, 0, 642, 0, 643, 0, 0, 644, 0, 645, 0, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, - 0, 651, 0, 652, 0, 653, 0, 654, 0, 655, 0, 0, 656, 0, 657, 0, 658, 659, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0160[64] = { + 0x4B81052E0414B811ull, 0x835C080000600295ull, 0x800000035C0835C0ull, 0x0035C0835C0835C0ull, + 0x01A4522A2A2AE040ull, 0x40A8000000120008ull, 0x0000090000000902ull, 0x0000090000000900ull, + 0x0120000008040900ull, 0x0000800000240000ull, 0x0900000048000002ull, 0x9000000400200000ull, + 0x0844401042211090ull, 0x200040102000000Aull, 0x100020081000000Aull, 0x4400081020000005ull, + 0x0010000005008411ull, 0x0020000202880010ull, 0x0100040680040020ull, 0x0042000204000404ull, + 0x020886AA00004010ull, 0x0000140000404B00ull, 0x0000120001042002ull, 0x0000000000040000ull, + 0x110418A000100000ull, 0x3550300AA8804711ull, 0x00404D20E9200422ull, 0x0020269074900201ull, + 0x30480A01AA020100ull, 0x0020210080401108ull, 0x0111111000100000ull, 0xA08D083402208200ull, + 0x000841040A000100ull, 0x8108142055014205ull, 0x0084140408414040ull, 0x04000C3000092400ull, + 0x0005920888000485ull, 0x0008000010004000ull, 0x9014500000000000ull, 0x8800000008000924ull, + 0x0020C04040404040ull, 0x41040AA144800002ull, 0x0010080000450410ull, 0x1000042408000010ull, + 0x0000804600082000ull, 0xA400A001202AA002ull, 0x4221110000001860ull, 0x010A910004000492ull, + 0x4451004484482048ull, 0x2000000400000242ull, 0x2000800092484422ull, 0x20052284041A2025ull, + 0x9111111110400240ull, 0x0400801004924924ull, 0x6AA0428001000280ull, 0x8012805552A92004ull, + 0x0101084001042008ull, 0x4444444444220211ull, 0x0004484214404404ull, 0x0000800022000000ull, + 0x4A2A6A4820008200ull, 0x4AB54AA56A554AA9ull, 0x44004000012002B4ull, 0x800B52AA554A5304ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0160[64] = { + 1u, 22u, 37u, 51u, 71u, 91u, 98u, 103u, 107u, 113u, 116u, 121u, 125u, 137u, 143u, 149u, + 156u, 163u, 169u, 176u, 182u, 193u, 200u, 206u, 207u, 215u, 235u, 250u, 264u, 277u, 285u, 292u, + 306u, 313u, 328u, 338u, 347u, 359u, 362u, 368u, 375u, 383u, 395u, 402u, 408u, 414u, 427u, 437u, + 448u, 462u, 467u, 478u, 493u, 506u, 518u, 530u, 547u, 555u, 570u, 581u, 584u, 599u, 629u, 639u, }; void recomp_unit_0160_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0160_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A84000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0160[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0160[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0160[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A84000; @@ -834,7 +741,6 @@ LOCAL_DISPATCH: } L_08A84000: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -847,7 +753,6 @@ L_08A84010: aot_gpr_5 = (aot_gpr_5 | 4719u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -863,7 +768,6 @@ L_08A84030: goto L_08A84034; L_08A84034: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A84048; } @@ -886,7 +790,6 @@ L_08A84050: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(264))); aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -899,7 +802,6 @@ L_08A84068: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -915,7 +817,6 @@ L_08A84088: goto L_08A8408C; L_08A8408C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A840A0; } @@ -938,7 +839,6 @@ L_08A840A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(280))); aot_fpr_13 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -951,7 +851,6 @@ L_08A840C0: aot_gpr_5 = (aot_gpr_5 | 4719u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -967,7 +866,6 @@ L_08A840E0: goto L_08A840E4; L_08A840E4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A840F8; } @@ -988,7 +886,6 @@ L_08A840F8: goto L_08A84100; L_08A84100: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08A844DC; } @@ -996,7 +893,6 @@ L_08A84100: } L_08A84108: aot_gpr_31 = (0x08A84110u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A84110u) goto L_08A84110; AOT_REGCACHE_SYNC_OUT(); return; L_08A84110: @@ -1007,7 +903,6 @@ L_08A84110: AOT_REGCACHE_SYNC_OUT(); return; L_08A8411C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A844DC; } @@ -1053,7 +948,6 @@ L_08A84158: aot_gpr_6 = (0u | 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); if (branch_taken) { @@ -1066,7 +960,6 @@ L_08A841AC: aot_gpr_7 = (aot_gpr_7 | 4719u); ctx.fpr[16] = std::bit_cast(aot_gpr_7); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 255u); if (branch_taken) { @@ -1082,7 +975,6 @@ L_08A841CC: goto L_08A841D0; L_08A841D0: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A841E0; } @@ -1103,7 +995,6 @@ L_08A841E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -1116,7 +1007,6 @@ L_08A841FC: aot_gpr_7 = (aot_gpr_7 | 4719u); ctx.fpr[15] = std::bit_cast(aot_gpr_7); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 255u); if (branch_taken) { @@ -1132,7 +1022,6 @@ L_08A8421C: goto L_08A84220; L_08A84220: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A84230; } @@ -1153,7 +1042,6 @@ L_08A84234: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -1166,7 +1054,6 @@ L_08A8424C: aot_gpr_7 = (aot_gpr_7 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_7); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 & 255u); if (branch_taken) { @@ -1182,7 +1069,6 @@ L_08A8426C: goto L_08A84270; L_08A84270: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A84280; } @@ -1226,7 +1112,6 @@ L_08A84284: aot_gpr_4 = (0u | 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); if (branch_taken) { @@ -1239,7 +1124,6 @@ L_08A842FC: aot_gpr_6 = (aot_gpr_6 | 4719u); ctx.fpr[16] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -1255,7 +1139,6 @@ L_08A8431C: goto L_08A84320; L_08A84320: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A84330; } @@ -1276,7 +1159,6 @@ L_08A84334: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -1289,7 +1171,6 @@ L_08A8434C: aot_gpr_6 = (aot_gpr_6 | 4719u); ctx.fpr[15] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -1305,7 +1186,6 @@ L_08A8436C: goto L_08A84370; L_08A84370: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A84380; } @@ -1326,7 +1206,6 @@ L_08A84384: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -1339,7 +1218,6 @@ L_08A8439C: aot_gpr_6 = (aot_gpr_6 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -1355,7 +1233,6 @@ L_08A843BC: goto L_08A843C0; L_08A843C0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A843D0; } @@ -1386,7 +1263,6 @@ L_08A843D4: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 0u); if (branch_taken) { @@ -1399,7 +1275,6 @@ L_08A84418: aot_gpr_4 = (aot_gpr_4 | 4719u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_5 & 255u); if (branch_taken) { @@ -1415,7 +1290,6 @@ L_08A84438: goto L_08A8443C; L_08A8443C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8444C; } @@ -1437,7 +1311,6 @@ L_08A84454: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(28))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(28))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8446C; } @@ -1459,7 +1332,6 @@ L_08A84474: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(29))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(29))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8448C; } @@ -1481,7 +1353,6 @@ L_08A84494: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(30))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(30))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A844B0; } @@ -1504,7 +1375,6 @@ L_08A844B8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(31))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(31))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A844D4; } @@ -1544,7 +1414,17 @@ L_08A844E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8450C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1565,7 +1445,6 @@ L_08A8450C: L_08A84544: aot_gpr_4 = (0u | 8u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A845D4; } @@ -1610,7 +1489,6 @@ L_08A84550: } L_08A845CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A845F8; } @@ -1618,7 +1496,6 @@ L_08A845CC: } L_08A845D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A84C78; } @@ -1636,7 +1513,6 @@ L_08A845DC: L_08A845F8: aot_gpr_7 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84620; } @@ -1654,7 +1530,6 @@ L_08A84604: L_08A84620: aot_gpr_7 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A846A0; } @@ -1694,7 +1569,6 @@ L_08A8462C: L_08A846A0: aot_gpr_7 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84720; } @@ -1734,7 +1608,6 @@ L_08A846AC: L_08A84720: aot_gpr_7 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A847A0; } @@ -1774,7 +1647,6 @@ L_08A8472C: L_08A847A0: aot_gpr_7 = (aot_gpr_5 & 32u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84820; } @@ -1814,7 +1686,6 @@ L_08A847AC: L_08A84820: aot_gpr_7 = (aot_gpr_5 & 64u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84848; } @@ -1838,7 +1709,6 @@ L_08A84848: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_12)); aot_gpr_7 = (aot_gpr_5 & 128u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A848D4; } @@ -1875,7 +1745,6 @@ L_08A8486C: L_08A848D4: aot_gpr_7 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84948; } @@ -1912,7 +1781,6 @@ L_08A848E0: L_08A84948: aot_gpr_7 = (aot_gpr_5 & 512u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A849BC; } @@ -1963,7 +1831,6 @@ L_08A849BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(aot_fpr_12)); aot_gpr_7 = (aot_gpr_5 & 1024u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84A6C; } @@ -2000,7 +1867,6 @@ L_08A84A04: L_08A84A6C: aot_gpr_7 = (aot_gpr_5 & 2048u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84AE0; } @@ -2037,7 +1903,6 @@ L_08A84A78: L_08A84AE0: aot_gpr_7 = (aot_gpr_5 & 4096u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84B54; } @@ -2083,7 +1948,6 @@ L_08A84B54: aot_mem.aot_direct_store32_block(aot_gpr_7 + static_cast(0), aot_run_words); } aot_gpr_7 = (aot_gpr_5 & 8192u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84BF0; } @@ -2120,7 +1984,6 @@ L_08A84B88: L_08A84BF0: aot_gpr_7 = (aot_gpr_5 & 16384u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84C10; } @@ -2136,7 +1999,6 @@ L_08A84BFC: L_08A84C10: aot_gpr_7 = (aot_gpr_5 & 32768u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84C30; } @@ -2153,7 +2015,6 @@ L_08A84C30: aot_gpr_7 = (1u << 16u); aot_gpr_7 = (aot_gpr_5 & aot_gpr_7); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A84C54; } @@ -2170,7 +2031,6 @@ L_08A84C54: aot_gpr_7 = (2u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_7); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A84C78; } @@ -2196,7 +2056,17 @@ L_08A84C78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A84C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -2213,7 +2083,6 @@ L_08A84CB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(30))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A84CD8; } @@ -2223,7 +2092,6 @@ L_08A84CC8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(30))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A84D04; } @@ -2246,11 +2114,20 @@ L_08A84CEC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(8832))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A84D04: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -2285,7 +2162,6 @@ L_08A84D0C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A84E04; } @@ -2336,7 +2212,6 @@ L_08A84DF4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A84D74; } @@ -2375,7 +2250,6 @@ L_08A84E0C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A84F00; } @@ -2426,7 +2300,6 @@ L_08A84EF0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A84E70; } @@ -2467,7 +2340,6 @@ L_08A84F08: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A84FF8; } @@ -2515,7 +2387,6 @@ L_08A84FE8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A84F74; } @@ -2533,7 +2404,6 @@ L_08A85000: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8515C; } @@ -2543,9 +2413,7 @@ L_08A85010: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A85068; } @@ -2566,9 +2434,7 @@ L_08A8503C: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A85068; } @@ -2608,7 +2474,6 @@ L_08A85068: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8515C; } @@ -2663,7 +2528,6 @@ L_08A8514C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A850D0; } @@ -2683,9 +2547,7 @@ L_08A85164: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A85284; } @@ -2711,7 +2573,6 @@ L_08A85184: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8527C; } @@ -2804,7 +2665,17 @@ L_08A85288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A852A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_20)); @@ -2842,7 +2713,6 @@ L_08A85308: ctx.gpr[8] = (aot_gpr_7 + static_cast(33)); ctx.gpr[8] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A85368; } @@ -2877,7 +2747,6 @@ L_08A85368: ctx.gpr[8] = (aot_gpr_7 + static_cast(32)); ctx.gpr[8] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A853C4; } @@ -2910,7 +2779,6 @@ L_08A853C4: aot_gpr_5 = (aot_gpr_5 & 65535u); aot_gpr_6 = (static_cast(aot_gpr_5) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A85308; } @@ -2987,7 +2855,6 @@ L_08A8548C: } L_08A85494: { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08A854A4; } @@ -3038,7 +2905,17 @@ L_08A854CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A854E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[20]); @@ -3199,7 +3076,17 @@ L_08A85660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A856A4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); jump_target = aot_gpr_31; @@ -3207,7 +3094,17 @@ L_08A856A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A856B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -3322,7 +3219,17 @@ L_08A85748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85850: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (2236u << 16u); @@ -3352,9 +3259,7 @@ L_08A85894: goto L_08A8589C; L_08A8589C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A858B0; } @@ -3427,7 +3332,6 @@ L_08A85928: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A85A14; } @@ -3507,7 +3411,6 @@ L_08A859B4: goto L_08A859D0; L_08A859D0: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A859F4; } @@ -3531,7 +3434,6 @@ L_08A859E0: } L_08A859E8: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08A859F4; } @@ -3554,7 +3456,6 @@ L_08A85A04: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_4) < 33 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A8595C; } @@ -3572,7 +3473,17 @@ L_08A85A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85A28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -3597,7 +3508,6 @@ L_08A85A54: L_08A85A60: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A85A78; } @@ -3687,7 +3597,17 @@ L_08A85B00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85B24: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -3712,7 +3632,6 @@ L_08A85B50: L_08A85B5C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A85B74; } @@ -3811,7 +3730,17 @@ L_08A85C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85C44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -3828,7 +3757,6 @@ L_08A85C44: } L_08A85C64: aot_gpr_31 = (0x08A85C6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A85C6Cu) goto L_08A85C6C; AOT_REGCACHE_SYNC_OUT(); return; L_08A85C6C: @@ -3838,7 +3766,6 @@ L_08A85C6C: AOT_REGCACHE_SYNC_OUT(); return; L_08A85C74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A85C80; } @@ -3899,7 +3826,6 @@ L_08A85CD8: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A85CF4; } @@ -3921,7 +3847,17 @@ L_08A85CF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85D0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2247u << 16u); @@ -3938,7 +3874,17 @@ L_08A85D20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85D30: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -3992,11 +3938,20 @@ L_08A85D30: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85D58: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4008,11 +3963,20 @@ L_08A85D58: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85D7C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4024,11 +3988,20 @@ L_08A85D7C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85DA0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(4), static_cast(0u)); @@ -4044,7 +4017,6 @@ L_08A85DB4: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A85DB4; } @@ -4085,7 +4057,17 @@ L_08A85DD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A85E50: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[17]); @@ -4140,7 +4122,6 @@ L_08A85ED0: aot_gpr_4 = (ctx.gpr[16] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(528))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A85F24; } @@ -4183,7 +4164,6 @@ L_08A85F24: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A85ED0; } @@ -4201,7 +4181,6 @@ L_08A85F54: aot_gpr_4 = (ctx.gpr[16] + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(528))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A85F94; } @@ -4232,7 +4211,6 @@ L_08A85F64: AOT_REGCACHE_SYNC_OUT(); return; L_08A85F88: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A85F94; } @@ -4247,7 +4225,6 @@ L_08A85F94: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A85F54; } @@ -4258,7 +4235,6 @@ L_08A85FAC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A85FC8; } @@ -4275,7 +4251,6 @@ L_08A85FCC: aot_gpr_4 = (ctx.gpr[16] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(528))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A85FFC; } @@ -4287,7 +4262,6 @@ L_08A85FDC: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A85FCC; } @@ -4317,7 +4291,17 @@ L_08A85FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A86020: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4)))))); aot_gpr_7 = (aot_gpr_7 << 4u); @@ -4361,14 +4345,34 @@ L_08A86020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A86064: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8606C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -4391,7 +4395,6 @@ L_08A860A0: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A86088; } @@ -4409,7 +4412,17 @@ L_08A860B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A860CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4440,7 +4453,6 @@ L_08A86108: aot_gpr_7 = (aot_gpr_7 + aot_gpr_4); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A86138; } @@ -4459,7 +4471,6 @@ L_08A86124: } L_08A86138: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A86168; } @@ -4477,7 +4488,6 @@ L_08A86140: goto L_08A86020; L_08A86160: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A861E0; } @@ -4502,7 +4512,6 @@ L_08A86178: aot_gpr_7 = (aot_gpr_7 + aot_gpr_4); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A861A8; } @@ -4521,7 +4530,6 @@ L_08A86194: } L_08A861A8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A861E0; } @@ -4557,7 +4565,17 @@ L_08A861E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A861FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4575,7 +4593,6 @@ L_08A86218: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A86240; } @@ -4591,7 +4608,6 @@ L_08A86240: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A86218; } @@ -4609,7 +4625,17 @@ L_08A86258: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8626C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4627,7 +4653,6 @@ L_08A86288: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A862B0; } @@ -4635,7 +4660,6 @@ L_08A86288: } L_08A862A8: aot_gpr_31 = (0x08A862B0u); - // nop goto L_08A862DC; L_08A862B0: aot_gpr_4 = (ctx.gpr[17] + static_cast(1)); @@ -4643,7 +4667,6 @@ L_08A862B0: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A86288; } @@ -4661,7 +4684,17 @@ L_08A862C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A862DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[21]); @@ -4708,7 +4741,6 @@ L_08A8634C: aot_fpr_20 = std::bit_cast(aot_gpr_6); ctx.gpr[16] = (aot_gpr_4 + static_cast(-9536)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-5432), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4722,9 +4754,7 @@ L_08A86390: L_08A86394: aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86394; } @@ -4817,7 +4847,6 @@ L_08A8647C: aot_gpr_7 = (ctx.gpr[21] + ctx.gpr[17]); aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(528))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A866D0; } @@ -4847,7 +4876,6 @@ L_08A864A4: L_08A864B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(528))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A864C0; } @@ -5079,7 +5107,6 @@ L_08A865CC: AOT_REGCACHE_SYNC_OUT(); return; L_08A866B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A866D0; } @@ -5094,7 +5121,6 @@ L_08A866B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A866C8: aot_gpr_31 = (0x08A866D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A866D0u) goto L_08A866D0; AOT_REGCACHE_SYNC_OUT(); return; L_08A866D0: @@ -5119,7 +5145,6 @@ L_08A866F0: L_08A866FC: aot_gpr_6 = (static_cast(aot_gpr_5) < 15 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A8646C; } @@ -5166,7 +5191,17 @@ L_08A8672C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8676C: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(220), ctx.gpr[23]); @@ -5194,7 +5229,6 @@ L_08A867EC: ctx.gpr[8] = (ctx.gpr[23] + aot_gpr_7); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(528))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A868BC; } @@ -5205,7 +5239,6 @@ L_08A867FC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); goto L_08A86818; @@ -5217,7 +5250,6 @@ L_08A86818: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); goto L_08A86838; @@ -5229,7 +5261,6 @@ L_08A86838: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); goto L_08A86858; @@ -5241,7 +5272,6 @@ L_08A86858: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); goto L_08A86878; @@ -5253,7 +5283,6 @@ L_08A86878: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[18])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); goto L_08A86898; @@ -5265,7 +5294,6 @@ L_08A86898: ctx.fpr[19] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[17])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); goto L_08A868B8; @@ -5375,7 +5403,6 @@ L_08A8699C: goto L_08A869A4; L_08A869A4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A86C98; } @@ -5386,9 +5413,7 @@ L_08A869AC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C98; } @@ -5398,9 +5423,7 @@ L_08A869C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C98; } @@ -5410,9 +5433,7 @@ L_08A869E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C98; } @@ -5422,9 +5443,7 @@ L_08A869F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C98; } @@ -5434,9 +5453,7 @@ L_08A86A10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C98; } @@ -5446,9 +5463,7 @@ L_08A86A28: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C98; } @@ -5487,9 +5502,7 @@ L_08A86A58: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86C88; } @@ -5565,7 +5578,6 @@ L_08A86B10: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[30] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(164))); if (branch_taken) { @@ -5674,7 +5686,6 @@ L_08A86BF0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08A86C34u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A86C34u) goto L_08A86C34; AOT_REGCACHE_SYNC_OUT(); return; L_08A86C34: @@ -5710,7 +5721,6 @@ L_08A86C88: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A86A48; } @@ -5756,7 +5766,17 @@ L_08A86CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A86D04: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5767,7 +5787,6 @@ L_08A86D04: AOT_REGCACHE_SYNC_OUT(); return; L_08A86D34: { const bool branch_taken = ctx.gpr[16] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A86FCC; } @@ -5785,7 +5804,6 @@ L_08A86D44: AOT_REGCACHE_SYNC_OUT(); return; L_08A86D4C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A87308; } @@ -5863,7 +5881,6 @@ L_08A86DFC: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1856), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5877,9 +5894,7 @@ L_08A86E14: L_08A86E18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1856))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A86E30; } @@ -6101,7 +6116,6 @@ L_08A86FA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(168))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A86FC4; } @@ -6110,7 +6124,6 @@ L_08A86FA0: L_08A86FB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A86FC4; } @@ -6123,7 +6136,6 @@ L_08A86FBC: AOT_REGCACHE_SYNC_OUT(); return; L_08A86FC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A87308; } @@ -6134,7 +6146,6 @@ L_08A86FCC: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A87308; } @@ -6168,7 +6179,6 @@ L_08A86FE0: L_08A8700C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87308; } @@ -6188,7 +6198,6 @@ L_08A87034: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -6211,7 +6220,6 @@ L_08A87058: L_08A87068: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -6247,9 +6255,7 @@ L_08A87098: goto L_08A870C0; L_08A870C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A870D8; } @@ -6265,9 +6271,7 @@ L_08A870D0: } L_08A870D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A870F8; } @@ -6331,7 +6335,6 @@ L_08A87124: aot_gpr_4 = (aot_gpr_4 >> 10u); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87308; } @@ -6543,7 +6546,6 @@ L_08A872BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(344))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87308; } @@ -6552,7 +6554,6 @@ L_08A872BC: L_08A872F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87308; } @@ -6566,7 +6567,6 @@ L_08A87300: L_08A87308: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1316))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A873C8; } @@ -6655,7 +6655,6 @@ L_08A873A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(424))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A873C8; } @@ -6664,7 +6663,6 @@ L_08A873A4: L_08A873B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(416))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A873C8; } @@ -6693,7 +6691,17 @@ L_08A873C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A873F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -6713,7 +6721,17 @@ L_08A87418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87424: aot_gpr_5 = (0u + static_cast(-1)); { const std::uint32_t aot_run_words[3]{aot_gpr_5, aot_gpr_5, aot_gpr_5}; @@ -6730,7 +6748,17 @@ L_08A87424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87458: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -6839,7 +6867,17 @@ L_08A8755C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87568: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -6854,7 +6892,17 @@ L_08A87568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87590: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -6870,7 +6918,17 @@ L_08A87590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A875BC: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -6886,7 +6944,17 @@ L_08A875BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A875E8: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -6910,7 +6978,17 @@ L_08A8761C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87624: aot_gpr_5 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); @@ -6930,7 +7008,17 @@ L_08A87624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87660: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 << 16u); @@ -6946,7 +7034,6 @@ L_08A87660: aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A876F4; } @@ -6954,7 +7041,6 @@ L_08A87660: } L_08A8769C: aot_gpr_31 = (0x08A876A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A876A4u) goto L_08A876A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A876A4: @@ -6988,7 +7074,6 @@ L_08A876D4: } L_08A876DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A876EC; } @@ -7021,7 +7106,17 @@ L_08A876F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87708: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -7037,7 +7132,17 @@ L_08A87708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87734: aot_gpr_6 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; @@ -7050,7 +7155,6 @@ L_08A87734: L_08A87740: aot_gpr_6 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A87754; } @@ -7058,7 +7162,6 @@ L_08A87740: } L_08A8774C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8775C; } @@ -7070,11 +7173,20 @@ L_08A87754: goto L_08A8775C; L_08A8775C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87764: aot_gpr_5 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; @@ -7086,7 +7198,6 @@ L_08A87764: } L_08A87770: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A87780; } @@ -7106,18 +7217,36 @@ L_08A87780: goto L_08A87788; L_08A87788: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87790: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87798: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2246u << 16u); @@ -7142,7 +7271,17 @@ L_08A877C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A877D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); @@ -7165,7 +7304,17 @@ L_08A877FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8780C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7200,7 +7349,17 @@ L_08A87848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87860: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7249,7 +7408,17 @@ L_08A878C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A878E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7277,7 +7446,17 @@ L_08A87910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87924: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7305,12 +7484,21 @@ L_08A87954: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87968: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A87978u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 475u, 0x08AFB4F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87978u) goto L_08A87978; AOT_REGCACHE_SYNC_OUT(); return; L_08A87978: @@ -7321,12 +7509,21 @@ L_08A87978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87988: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A87998u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 5u, 0x08AFC0D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87998u) goto L_08A87998; AOT_REGCACHE_SYNC_OUT(); return; L_08A87998: @@ -7337,12 +7534,21 @@ L_08A87998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A879A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A879B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 6u, 0x08AFC100u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A879B8u) goto L_08A879B8; AOT_REGCACHE_SYNC_OUT(); return; L_08A879B8: @@ -7353,12 +7559,21 @@ L_08A879B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A879C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A879D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 257u, 0x08941B8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A879D8u) goto L_08A879D8; AOT_REGCACHE_SYNC_OUT(); return; L_08A879D8: @@ -7369,12 +7584,21 @@ L_08A879D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A879E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A879F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 258u, 0x08941BB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A879F8u) goto L_08A879F8; AOT_REGCACHE_SYNC_OUT(); return; L_08A879F8: @@ -7385,7 +7609,17 @@ L_08A879F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87A08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8912))); @@ -7405,7 +7639,17 @@ L_08A87A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87A38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7421,7 +7665,6 @@ L_08A87A58: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(4182), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87A70; } @@ -7440,7 +7683,17 @@ L_08A87A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87A84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -7450,7 +7703,17 @@ L_08A87A84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87A98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -7460,7 +7723,17 @@ L_08A87A98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87AAC: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(8), static_cast(0u)); jump_target = aot_gpr_31; @@ -7468,7 +7741,17 @@ L_08A87AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87AB8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(16), static_cast(0u)); @@ -7477,7 +7760,17 @@ L_08A87AB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87AC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7578,7 +7871,17 @@ L_08A87C24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87C3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7639,7 +7942,6 @@ L_08A87CB4: L_08A87CB8: ctx.gpr[19] = (ctx.gpr[19] + static_cast(4)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A87C8C; } @@ -7652,7 +7954,6 @@ L_08A87CC4: AOT_REGCACHE_SYNC_OUT(); return; L_08A87CCC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A87DA4; } @@ -7696,7 +7997,6 @@ L_08A87CF8: L_08A87D00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87D1C; } @@ -7704,7 +8004,6 @@ L_08A87D00: } L_08A87D0C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87D1C; } @@ -7712,12 +8011,10 @@ L_08A87D0C: } L_08A87D14: aot_gpr_31 = (0x08A87D1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87D1Cu) goto L_08A87D1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A87D1C: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A87D48; } @@ -7734,7 +8031,6 @@ L_08A87D24: L_08A87D2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87D48; } @@ -7742,7 +8038,6 @@ L_08A87D2C: } L_08A87D38: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87D48; } @@ -7750,7 +8045,6 @@ L_08A87D38: } L_08A87D40: aot_gpr_31 = (0x08A87D48u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87D48u) goto L_08A87D48; AOT_REGCACHE_SYNC_OUT(); return; L_08A87D48: @@ -7782,7 +8076,6 @@ L_08A87D64: goto L_08A87D6C; L_08A87D6C: aot_gpr_31 = (0x08A87D74u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87D74u) goto L_08A87D74; AOT_REGCACHE_SYNC_OUT(); return; L_08A87D74: @@ -7790,7 +8083,6 @@ L_08A87D74: goto L_08A87D78; L_08A87D78: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A87CE4; } @@ -7798,7 +8090,6 @@ L_08A87D78: } L_08A87D80: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A87DA4; } @@ -7807,7 +8098,6 @@ L_08A87D80: L_08A87D88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87DA4; } @@ -7815,7 +8105,6 @@ L_08A87D88: } L_08A87D94: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87DA4; } @@ -7823,7 +8112,6 @@ L_08A87D94: } L_08A87D9C: aot_gpr_31 = (0x08A87DA4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87DA4u) goto L_08A87DA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A87DA4: @@ -7857,7 +8145,6 @@ L_08A87DC0: goto L_08A87DC8; L_08A87DC8: aot_gpr_31 = (0x08A87DD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87DD0u) goto L_08A87DD0; AOT_REGCACHE_SYNC_OUT(); return; L_08A87DD0: @@ -7903,7 +8190,6 @@ L_08A87DF8: } L_08A87E08: aot_gpr_31 = (0x08A87E10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87E10u) goto L_08A87E10; AOT_REGCACHE_SYNC_OUT(); return; L_08A87E10: @@ -7911,7 +8197,6 @@ L_08A87E10: goto L_08A87E14; L_08A87E14: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87E24; } @@ -7941,7 +8226,17 @@ L_08A87E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87E54: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); jump_target = aot_gpr_31; @@ -7949,7 +8244,17 @@ L_08A87E54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87E60: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -7966,7 +8271,6 @@ L_08A87E60: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A87F24; } @@ -8053,7 +8357,6 @@ L_08A87F44: L_08A87F4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87F68; } @@ -8061,7 +8364,6 @@ L_08A87F4C: } L_08A87F58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87F68; } @@ -8069,12 +8371,10 @@ L_08A87F58: } L_08A87F60: aot_gpr_31 = (0x08A87F68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87F68u) goto L_08A87F68; AOT_REGCACHE_SYNC_OUT(); return; L_08A87F68: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08A87F94; } @@ -8091,7 +8391,6 @@ L_08A87F70: L_08A87F78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87F94; } @@ -8099,7 +8398,6 @@ L_08A87F78: } L_08A87F84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A87F94; } @@ -8107,7 +8405,6 @@ L_08A87F84: } L_08A87F8C: aot_gpr_31 = (0x08A87F94u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87F94u) goto L_08A87F94; AOT_REGCACHE_SYNC_OUT(); return; L_08A87F94: @@ -8139,7 +8436,6 @@ L_08A87FB0: goto L_08A87FB8; L_08A87FB8: aot_gpr_31 = (0x08A87FC0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A87FC0u) goto L_08A87FC0; AOT_REGCACHE_SYNC_OUT(); return; L_08A87FC0: @@ -8147,7 +8443,6 @@ L_08A87FC0: goto L_08A87FC4; L_08A87FC4: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A87F30; } @@ -8172,7 +8467,17 @@ L_08A87FCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A87FFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.pc = 0x08A88000u; AOT_REGCACHE_SYNC_OUT(); return; diff --git a/profiles/vcs/generated/generated_unit_0161.cpp b/profiles/vcs/generated/generated_unit_0161.cpp index b304802..9fbafb1 100644 --- a/profiles/vcs/generated/generated_unit_0161.cpp +++ b/profiles/vcs/generated/generated_unit_0161.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0161[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 14, 0, 15, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, 27, 28, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 37, - 0, 38, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 43, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 47, - 0, 0, 48, 0, 49, 50, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, - 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 57, 58, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 69, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 86, 0, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 92, 0, 0, 0, - 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 99, 0, 100, - 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 106, 0, 107, - 0, 108, 0, 109, 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 119, 0, 0, 0, 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 122, - 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 125, 0, 126, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 135, 0, - 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, - 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 144, 0, 0, 145, 0, 146, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 156, 0, 0, 157, 0, 0, 158, 0, 0, 0, 159, 0, 160, 0, 0, 0, 161, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 166, 0, 167, 168, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 174, 0, 0, - 175, 0, 176, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 181, 0, 0, - 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 184, 0, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, - 0, 0, 188, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 197, 0, 198, 199, - 0, 0, 0, 200, 0, 0, 201, 0, 202, 203, 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, 207, 0, 0, 208, 0, 0, 209, 0, 0, 210, 0, 211, - 212, 0, 213, 214, 0, 215, 0, 0, 216, 0, 0, 217, 0, 218, 219, 0, 220, 221, 222, 0, 0, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, 0, - 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 0, 237, 0, 238, 0, 239, 240, 0, 241, 242, 0, - 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 248, 0, 0, 249, 0, 250, 0, 0, 0, 251, 0, 0, 252, 0, 0, 253, - 254, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, - 0, 259, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, 0, 264, 0, 265, 0, 266, 267, 0, 268, 0, - 269, 0, 270, 271, 0, 272, 0, 273, 0, 274, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 276, 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 280, 0, 281, 0, 282, 283, 0, - 284, 0, 285, 0, 286, 287, 0, 288, 0, 289, 0, 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 293, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 297, 298, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 301, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, - 0, 308, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 311, 0, 0, 312, 0, 313, 0, 314, 0, 0, 315, 0, 316, 0, - 317, 0, 0, 318, 0, 0, 319, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 324, 0, 0, 0, 325, 0, 326, - 0, 327, 0, 328, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, - 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, - 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, 0, 343, 0, 344, 0, 345, 0, 0, 346, - 347, 0, 0, 348, 0, 0, 0, 349, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 354, 0, 0, 0, 0, 0, 355, - 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 359, 0, 0, 360, 0, 361, 0, 362, 0, 363, 0, 0, 364, 0, 0, - 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, - 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, - 373, 0, 0, 0, 0, 0, 0, 0, 374, 375, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 0, 0, 382, 383, 384, 0, 385, 0, 0, 0, 386, - 0, 387, 0, 388, 0, 0, 389, 0, 390, 0, 391, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, - 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 398, 399, 0, 0, 0, 400, 0, 0, 401, 0, 402, 0, 403, 0, 0, 404, 0, 0, - 0, 405, 0, 406, 0, 407, 0, 408, 0, 0, 409, 0, 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 414, 0, 0, 0, - 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, - 437, 0, 438, 0, 0, 0, 439, 0, 440, 0, 0, 441, 0, 0, 0, 0, 442, 0, 443, 0, 0, 444, 0, 445, 0, 446, 0, 447, 0, 0, 0, 0, - 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 451, 0, 452, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 0, 462, - 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 466, 0, 0, 0, 467, - 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, - 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 480, 0, 481, 0, 0, - 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 491, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 493, 0, 494, 495, 0, 0, 0, 496, 0, 0, 0, 497, 0, 498, 0, 499, 0, 500, - 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 502, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, - 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 510, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 513, 0, - 514, 0, 0, 0, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, - 0, 0, 521, 0, 0, 522, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 530, 0, 531, 0, 0, 0, 0, 532, 0, 0, 533, 0, 534, 535, 0, 0, 0, 536, 0, - 0, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 543, 0, 0, 0, 0, 544, 545, 0, 0, 0, - 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 555, 556, 0, 0, 0, 0, 557, 0, 0, 558, - 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 561, 0, 562, 0, 563, 564, 0, 565, 566, 567, 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 570, - 571, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 575, 0, 0, 576, 0, 577, 0, 0, 0, 578, 579, 0, 580, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, - 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 600, 0, - 0, 601, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, - 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 608, 0, 0, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, - 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 619, 0, 0, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 623, 0, 0, 624, 0, 625, 0, 0, 0, 626, 0, - 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 630, 0, 631, 0, 0, 632, - 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 638, 0, 0, 639, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 643, - 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 650, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, - 658, 0, 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 664, - 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 668, 0, 0, 669, - 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 676, 0, 0, 0, 677, 0, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, - 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 685, 0, 0, - 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 695, 0, 696, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 698, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 702, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, - 705, 0, 0, 706, 0, 707, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 0, 710, 711, 712, 0, 0, 0, 713, 0, 714, 0, 0, 715, 0, 716, 0, - 717, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 0, 0, 725, 0, 726, 0, 0, 0, 727, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0161[64] = { + 0x0210801200065001ull, 0x20402500021A8404ull, 0x8502241008B88802ull, 0x100001349105A032ull, + 0x0000810018412008ull, 0x1002000101440200ull, 0x0904548024000000ull, 0x1111108802100800ull, + 0xA244022211005110ull, 0x5088034AA2051100ull, 0x0114284880509100ull, 0x4404100551044010ull, + 0x024502200441A540ull, 0x01A5000002A28920ull, 0x2844000D28050880ull, 0x0008028440006940ull, + 0xA4948B48D20A4800ull, 0x6D4AA9552947692Dull, 0x9229280000200005ull, 0x5A92402248008021ull, + 0x6A200000405012ADull, 0x0002D41200808AB5ull, 0x52A4402220248894ull, 0x1004010AA2484849ull, + 0x9520940102848804ull, 0x2552404882282289ull, 0x2008080420000424ull, 0x8B88802000288301ull, + 0x2548C2089000A54Aull, 0x00080401150064AAull, 0x0201200001000240ull, 0x0000110010009210ull, + 0x2400002002004004ull, 0x024154110AA50945ull, 0x8A00400481488280ull, 0x000A800000000004ull, + 0x2108000000001010ull, 0x002010402A040020ull, 0xAA23480048204428ull, 0x0000000000000080ull, + 0x4082140180048222ull, 0x0041006440002AA1ull, 0x0000040800000001ull, 0x186005544690A200ull, + 0x5500002000020010ull, 0x905DA89090C20200ull, 0x4008000016298029ull, 0x0100000000000000ull, + 0x0008110404000040ull, 0x0201220002000001ull, 0x0801101242280010ull, 0x5021020048100010ull, + 0x4522024200094080ull, 0x00A2028094040408ull, 0x0000200284800290ull, 0x0044410000000000ull, + 0x0001040400000240ull, 0x8041111100804004ull, 0x2054081090204080ull, 0x2400440101008222ull, + 0x004800002AA00440ull, 0x000010410000008Aull, 0x528E222928220000ull, 0x8A28012008800005ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0161[64] = { + 1u, 11u, 23u, 38u, 53u, 61u, 68u, 77u, 87u, 101u, 117u, 130u, 142u, 156u, 169u, 182u, + 192u, 212u, 243u, 254u, 269u, 284u, 300u, 317u, 332u, 347u, 365u, 373u, 387u, 405u, 418u, 424u, + 431u, 437u, 456u, 468u, 472u, 477u, 485u, 501u, 502u, 514u, 526u, 529u, 546u, 553u, 571u, 583u, + 584u, 590u, 596u, 606u, 615u, 627u, 638u, 646u, 650u, 655u, 665u, 676u, 686u, 695u, 701u, 717u, }; void recomp_unit_0161_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0161_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A88000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0161[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0161[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0161[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A88000; @@ -922,7 +829,6 @@ L_08A88030: L_08A88038: ctx.gpr[18] = (ctx.gpr[18] + static_cast(4)); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A88030; } @@ -1006,7 +912,17 @@ L_08A880E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88108: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -1014,7 +930,6 @@ L_08A88108: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x08A88128u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0160_entry, 160u, 661u, 0x08A87FFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A88128u) goto L_08A88128; AOT_REGCACHE_SYNC_OUT(); return; L_08A88128: @@ -1027,7 +942,6 @@ L_08A88128: AOT_REGCACHE_SYNC_OUT(); return; L_08A8813C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8814C; } @@ -1056,7 +970,17 @@ L_08A88150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88164: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -1081,7 +1005,6 @@ L_08A881A0: L_08A881A8: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(28), 0u); ctx.gpr[31] = (0x08A881B4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A881B4u) goto L_08A881B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A881B4: @@ -1093,7 +1016,6 @@ L_08A881B4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (ctx.gpr[20] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A882E0; } @@ -1157,7 +1079,6 @@ L_08A88250: goto L_08A88254; L_08A88254: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A882A8; } @@ -1179,7 +1100,6 @@ L_08A8826C: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(16), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A882A8; } @@ -1200,7 +1120,6 @@ L_08A88290: L_08A882A8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A882C4; } @@ -1252,7 +1171,6 @@ L_08A882FC: L_08A88304: aot_gpr_16 = (aot_gpr_16 + static_cast(4)); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A882FC; } @@ -1269,7 +1187,6 @@ L_08A88314: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(112), ctx.gpr[20]); ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A88340; } @@ -1277,7 +1194,6 @@ L_08A88314: } L_08A88334: ctx.gpr[31] = (0x08A8833Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8833Cu) goto L_08A8833C; AOT_REGCACHE_SYNC_OUT(); return; L_08A8833C: @@ -1294,7 +1210,6 @@ L_08A88348: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_16 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8840C; } @@ -1309,7 +1224,6 @@ L_08A88360: L_08A88370: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A883F0; } @@ -1324,7 +1238,6 @@ L_08A8837C: goto L_08A88388; L_08A88388: ctx.gpr[31] = (0x08A88390u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A88390u) goto L_08A88390; AOT_REGCACHE_SYNC_OUT(); return; L_08A88390: @@ -1333,7 +1246,6 @@ L_08A88390: L_08A88394: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A883F0; } @@ -1384,7 +1296,6 @@ L_08A8840C: aot_gpr_7 = (static_cast(static_cast(aot_gpr_7) >> 2u)); ctx.gpr[8] = (aot_gpr_7 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A8846C; } @@ -1441,7 +1352,17 @@ L_08A88470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A884A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1499,7 +1420,6 @@ L_08A88548: aot_gpr_7 = (aot_gpr_5 + aot_gpr_6); ctx.gpr[3] = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); { const bool branch_taken = ctx.gpr[3] != 0u; - // nop if (branch_taken) { goto L_08A88560; } @@ -1507,7 +1427,6 @@ L_08A88548: } L_08A88558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88674; } @@ -1593,7 +1512,6 @@ L_08A885F0: ctx.gpr[15] = (static_cast(ctx.gpr[15]) < 0 ? 1u : 0u); ctx.gpr[15] = (ctx.gpr[15] & 255u); { const bool branch_taken = ctx.gpr[15] == 0u; - // nop if (branch_taken) { goto L_08A88674; } @@ -1642,14 +1560,23 @@ L_08A886B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A886C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(32), static_cast(aot_gpr_5)); ctx.gpr[31] = (0x08A886E0u); - // nop goto L_08A8A934; L_08A886E0: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1658,7 +1585,17 @@ L_08A886E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A886EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -1682,7 +1619,6 @@ L_08A8872C: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[22]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A88948; } @@ -1693,7 +1629,6 @@ L_08A88750: aot_gpr_16 = (ctx.gpr[22] | 0u); aot_gpr_5 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A88838; } @@ -1793,7 +1728,6 @@ L_08A88820: AOT_REGCACHE_SYNC_OUT(); return; L_08A88830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88940; } @@ -1919,7 +1853,6 @@ L_08A88930: AOT_REGCACHE_SYNC_OUT(); return; L_08A88940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88AE0; } @@ -1968,7 +1901,6 @@ L_08A88984: L_08A8898C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A889A4; } @@ -2121,7 +2053,6 @@ L_08A88AB4: } L_08A88AC8: ctx.gpr[31] = (0x08A88AD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A88AD0u) goto L_08A88AD0; AOT_REGCACHE_SYNC_OUT(); return; L_08A88AD0: @@ -2148,7 +2079,17 @@ L_08A88AE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88B10: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -2163,7 +2104,6 @@ L_08A88B38: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(52))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A88B80; } @@ -2175,7 +2115,6 @@ L_08A88B48: aot_gpr_6 = (aot_gpr_5 - aot_gpr_6); aot_gpr_6 = (aot_gpr_6 < static_cast(10001) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A88B78; } @@ -2185,7 +2124,6 @@ L_08A88B60: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(6)))))); aot_gpr_7 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_6 != aot_gpr_7; - // nop if (branch_taken) { goto L_08A88B88; } @@ -2193,7 +2131,6 @@ L_08A88B60: } L_08A88B70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88B88; } @@ -2201,7 +2138,6 @@ L_08A88B70: } L_08A88B78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88BB0; } @@ -2209,7 +2145,6 @@ L_08A88B78: } L_08A88B80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88BB0; } @@ -2240,7 +2175,17 @@ L_08A88BB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88BC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2269,7 +2214,6 @@ L_08A88BF8: aot_gpr_6 = (aot_gpr_6 - aot_gpr_7); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A88C28; } @@ -2277,7 +2221,6 @@ L_08A88BF8: } L_08A88C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88C58; } @@ -2285,7 +2228,6 @@ L_08A88C18: } L_08A88C20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88C94; } @@ -2300,7 +2242,6 @@ L_08A88C28: goto L_08A88C34; L_08A88C34: ctx.gpr[31] = (0x08A88C3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A88C3Cu) goto L_08A88C3C; AOT_REGCACHE_SYNC_OUT(); return; L_08A88C3C: @@ -2312,7 +2253,6 @@ L_08A88C40: aot_gpr_5 = (aot_gpr_5 | 1u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88C94; } @@ -2322,7 +2262,6 @@ L_08A88C58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(6)))))); aot_gpr_6 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A88C68; } @@ -2349,7 +2288,17 @@ L_08A88C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88CA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -2365,7 +2314,6 @@ L_08A88CA4: } L_08A88CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88CD8; } @@ -2384,7 +2332,17 @@ L_08A88CD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88CE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -2397,7 +2355,6 @@ L_08A88CE4: aot_gpr_7 = (0u | 0u); ctx.gpr[8] = (aot_gpr_7 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A88D54; } @@ -2406,7 +2363,6 @@ L_08A88CE4: L_08A88D14: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A88D2C; } @@ -2415,7 +2371,6 @@ L_08A88D14: L_08A88D20: ctx.gpr[9] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A88D44; } @@ -2433,7 +2388,6 @@ L_08A88D2C: } L_08A88D3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A88D54; } @@ -2459,7 +2413,17 @@ L_08A88D5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88D64: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -2492,7 +2456,6 @@ L_08A88DC0: L_08A88DC8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A88DE0; } @@ -2572,7 +2535,6 @@ L_08A88E6C: L_08A88E74: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A88E8C; } @@ -2652,7 +2614,6 @@ L_08A88F18: L_08A88F20: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A88F38; } @@ -2728,7 +2689,17 @@ L_08A88FA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A88FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -2794,7 +2765,6 @@ L_08A89064: } L_08A89070: ctx.gpr[31] = (0x08A89078u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89078u) goto L_08A89078; AOT_REGCACHE_SYNC_OUT(); return; L_08A89078: @@ -2845,7 +2815,6 @@ L_08A890AC: L_08A890BC: aot_gpr_4 = (ctx.gpr[22] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A890D0; } @@ -2979,7 +2948,6 @@ L_08A8916C: L_08A89174: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A89190; } @@ -2987,7 +2955,6 @@ L_08A89174: } L_08A89180: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A89190; } @@ -2995,12 +2962,10 @@ L_08A89180: } L_08A89188: ctx.gpr[31] = (0x08A89190u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89190u) goto L_08A89190; AOT_REGCACHE_SYNC_OUT(); return; L_08A89190: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A891BC; } @@ -3017,7 +2982,6 @@ L_08A89198: L_08A891A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A891BC; } @@ -3025,7 +2989,6 @@ L_08A891A0: } L_08A891AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A891BC; } @@ -3033,7 +2996,6 @@ L_08A891AC: } L_08A891B4: ctx.gpr[31] = (0x08A891BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A891BCu) goto L_08A891BC; AOT_REGCACHE_SYNC_OUT(); return; L_08A891BC: @@ -3065,7 +3027,6 @@ L_08A891D8: goto L_08A891E0; L_08A891E0: ctx.gpr[31] = (0x08A891E8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A891E8u) goto L_08A891E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A891E8: @@ -3073,7 +3034,6 @@ L_08A891E8: goto L_08A891EC; L_08A891EC: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A89158; } @@ -3084,7 +3044,6 @@ L_08A891F4: goto L_08A891F8; L_08A891F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A89208; } @@ -3092,7 +3051,6 @@ L_08A891F8: } L_08A89200: ctx.gpr[31] = (0x08A89208u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89208u) goto L_08A89208; AOT_REGCACHE_SYNC_OUT(); return; L_08A89208: @@ -3120,7 +3078,17 @@ L_08A89208: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89254: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -3147,7 +3115,6 @@ L_08A89254: } L_08A892AC: { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A892E4; } @@ -3156,7 +3123,6 @@ L_08A892AC: L_08A892B4: aot_gpr_6 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A892D4; } @@ -3215,7 +3181,6 @@ L_08A89314: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(ctx.gpr[19]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08A89394; } @@ -3321,7 +3286,6 @@ L_08A893F8: goto L_08A89400; L_08A89400: ctx.gpr[31] = (0x08A89408u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89408u) goto L_08A89408; AOT_REGCACHE_SYNC_OUT(); return; L_08A89408: @@ -3337,7 +3301,6 @@ L_08A8940C: } L_08A89414: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A89424; } @@ -3345,7 +3308,6 @@ L_08A89414: } L_08A8941C: ctx.gpr[31] = (0x08A89424u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89424u) goto L_08A89424; AOT_REGCACHE_SYNC_OUT(); return; L_08A89424: @@ -3386,7 +3348,17 @@ L_08A89458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89478: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -3421,7 +3393,6 @@ L_08A894E4: goto L_08A894EC; L_08A894EC: ctx.gpr[31] = (0x08A894F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A894F4u) goto L_08A894F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A894F4: @@ -3443,7 +3414,6 @@ L_08A89500: goto L_08A89508; L_08A89508: ctx.gpr[31] = (0x08A89510u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89510u) goto L_08A89510; AOT_REGCACHE_SYNC_OUT(); return; L_08A89510: @@ -3459,7 +3429,6 @@ L_08A89514: } L_08A8951C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8952C; } @@ -3467,7 +3436,6 @@ L_08A8951C: } L_08A89524: ctx.gpr[31] = (0x08A8952Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8952Cu) goto L_08A8952C; AOT_REGCACHE_SYNC_OUT(); return; L_08A8952C: @@ -3491,7 +3459,17 @@ L_08A8953C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8955C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); @@ -3502,7 +3480,6 @@ L_08A8955C: ctx.gpr[9] = (ctx.lo); ctx.gpr[9] = (ctx.gpr[8] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08A895B8; } @@ -3511,7 +3488,6 @@ L_08A8955C: L_08A89584: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); { const bool branch_taken = ctx.gpr[9] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A895B0; } @@ -3531,7 +3507,6 @@ L_08A89590: } L_08A895A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A895B8; } @@ -3550,11 +3525,20 @@ L_08A895B8: goto L_08A895BC; L_08A895BC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A895C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -3574,7 +3558,6 @@ L_08A895C4: } L_08A89608: { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8963C; } @@ -3583,7 +3566,6 @@ L_08A89608: L_08A89610: aot_gpr_6 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A8962C; } @@ -3787,7 +3769,6 @@ L_08A8977C: } L_08A89784: ctx.gpr[31] = (0x08A8978Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8978Cu) goto L_08A8978C; AOT_REGCACHE_SYNC_OUT(); return; L_08A8978C: @@ -3813,7 +3794,17 @@ L_08A897A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A897C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -3821,7 +3812,6 @@ L_08A897C8: aot_gpr_16 = (aot_gpr_4 | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); ctx.gpr[31] = (0x08A897F0u); - // nop goto L_08A8AE14; L_08A897F0: ctx.gpr[17] = (ctx.gpr[2] | 0u); @@ -3857,7 +3847,6 @@ L_08A8982C: L_08A8983C: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8985C; } @@ -3888,7 +3877,17 @@ L_08A89864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89880: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -3897,11 +3896,9 @@ L_08A89880: aot_gpr_16 = (aot_gpr_4 | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); ctx.gpr[31] = (0x08A898A8u); - // nop goto L_08A89998; L_08A898A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A898E8; } @@ -3940,7 +3937,6 @@ L_08A898E0: } L_08A898E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A89964; } @@ -3949,7 +3945,6 @@ L_08A898E8: L_08A898F0: aot_gpr_4 = (aot_gpr_5 + static_cast(1)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08A89924; } @@ -4023,7 +4018,17 @@ L_08A89964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8997C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4037,7 +4042,17 @@ L_08A8998C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -4054,7 +4069,6 @@ L_08A89998: L_08A899B8: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A899E0; } @@ -4067,7 +4081,6 @@ L_08A899C4: goto L_08A8955C; L_08A899D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A899E8; } @@ -4119,7 +4132,17 @@ L_08A89A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89A28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -4178,7 +4201,17 @@ L_08A89AAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89ACC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); @@ -4189,7 +4222,6 @@ L_08A89ACC: ctx.gpr[8] = (ctx.lo); ctx.gpr[8] = (aot_gpr_6 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A89B4C; } @@ -4208,7 +4240,6 @@ L_08A89B00: ctx.gpr[9] = (ctx.gpr[9] - ctx.gpr[10]); ctx.gpr[9] = (ctx.gpr[8] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08A89B3C; } @@ -4241,11 +4272,20 @@ L_08A89B3C: } L_08A89B4C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -4321,7 +4361,6 @@ L_08A89BFC: goto L_08A89C04; L_08A89C04: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A89C3C; } @@ -4338,7 +4377,6 @@ L_08A89C0C: } L_08A89C18: ctx.gpr[31] = (0x08A89C20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89C20u) goto L_08A89C20; AOT_REGCACHE_SYNC_OUT(); return; L_08A89C20: @@ -4353,7 +4391,6 @@ L_08A89C28: AOT_REGCACHE_SYNC_OUT(); return; L_08A89C34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A89D80; } @@ -4379,7 +4416,6 @@ L_08A89C3C: L_08A89C70: aot_gpr_5 = (aot_gpr_4 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A89CBC; } @@ -4422,7 +4458,6 @@ L_08A89CBC: aot_gpr_4 = (aot_gpr_7 + ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A89CE0; } @@ -4447,7 +4482,6 @@ L_08A89CD8: } L_08A89CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A89D80; } @@ -4477,7 +4511,6 @@ L_08A89D04: goto L_08A8AE70; L_08A89D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A89D38; } @@ -4523,7 +4556,6 @@ L_08A89D38: } L_08A89D60: ctx.gpr[31] = (0x08A89D68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A89D68u) goto L_08A89D68; AOT_REGCACHE_SYNC_OUT(); return; L_08A89D68: @@ -4554,7 +4586,17 @@ L_08A89D80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89DA8: aot_gpr_5 = (0u | 255u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(2), static_cast(aot_gpr_5)); @@ -4568,7 +4610,17 @@ L_08A89DA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A89DCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1696)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4678,7 +4730,6 @@ L_08A89F10: L_08A89F24: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(52))); { const bool branch_taken = ctx.gpr[20] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A89FA0; } @@ -4724,7 +4775,6 @@ L_08A89FA0: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8A008; } @@ -4805,7 +4855,17 @@ L_08A8A064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4825,7 +4885,6 @@ L_08A8A094: aot_gpr_7 = (0u | 0u); ctx.gpr[8] = (aot_gpr_7 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A8A118; } @@ -4834,7 +4893,6 @@ L_08A8A094: L_08A8A0E8: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A8A108; } @@ -4843,7 +4901,6 @@ L_08A8A0E8: L_08A8A0F4: ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A8A108; } @@ -4851,7 +4908,6 @@ L_08A8A0F4: } L_08A8A100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8A118; } @@ -4869,7 +4925,6 @@ L_08A8A108: } L_08A8A118: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A8A154; } @@ -4894,7 +4949,6 @@ L_08A8A12C: L_08A8A140: jump_target = aot_gpr_5; ctx.gpr[31] = (0x08A8A148u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8A148u) goto L_08A8A148; AOT_REGCACHE_SYNC_OUT(); return; @@ -4909,7 +4963,6 @@ L_08A8A148: } L_08A8A154: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8A1C0; } @@ -4917,7 +4970,6 @@ L_08A8A154: } L_08A8A15C: ctx.gpr[31] = (0x08A8A164u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8A164u) goto L_08A8A164; AOT_REGCACHE_SYNC_OUT(); return; L_08A8A164: @@ -4951,7 +5003,6 @@ L_08A8A190: } L_08A8A1A8: ctx.gpr[31] = (0x08A8A1B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8A1B0u) goto L_08A8A1B0; AOT_REGCACHE_SYNC_OUT(); return; L_08A8A1B0: @@ -4976,7 +5027,17 @@ L_08A8A1C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A1D8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), 0u); jump_target = ctx.gpr[31]; @@ -4984,7 +5045,17 @@ L_08A8A1D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A1E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -5003,7 +5074,6 @@ L_08A8A1E4: } L_08A8A21C: ctx.gpr[31] = (0x08A8A224u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8A224u) goto L_08A8A224; AOT_REGCACHE_SYNC_OUT(); return; L_08A8A224: @@ -5019,7 +5089,6 @@ L_08A8A23C: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(14))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8A410; } @@ -5028,7 +5097,6 @@ L_08A8A23C: L_08A8A24C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(13))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8A410; } @@ -5036,7 +5104,6 @@ L_08A8A24C: } L_08A8A258: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A8A27C; } @@ -5072,7 +5139,6 @@ L_08A8A288: aot_gpr_7 = (aot_gpr_7 < static_cast(1) ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08A8A2EC; } @@ -5107,7 +5173,6 @@ L_08A8A2EC: aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(13), static_cast(aot_gpr_5)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8A4F4; } @@ -5165,7 +5230,6 @@ L_08A8A308: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8A3C4; } @@ -5177,7 +5241,6 @@ L_08A8A3BC: goto L_08A8A3C4; L_08A8A3C4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A8A410; } @@ -5287,7 +5350,17 @@ L_08A8A4F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A514: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -5317,7 +5390,6 @@ L_08A8A548: goto L_08A8A564; L_08A8A564: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08A8A598; } @@ -5325,7 +5397,6 @@ L_08A8A564: } L_08A8A56C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A8A598; } @@ -5371,7 +5442,17 @@ L_08A8A5B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -5386,7 +5467,6 @@ L_08A8A5D4: goto L_08A8A60C; L_08A8A60C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8A6FC; } @@ -5397,7 +5477,6 @@ L_08A8A614: aot_gpr_4 = (aot_mem.aot_direct_load_word_left(ctx.gpr[19] + static_cast(3), aot_gpr_4)); aot_gpr_4 = (aot_gpr_4 & 65535u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8A6FC; } @@ -5407,7 +5486,6 @@ L_08A8A628: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(2))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10084))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8A66C; } @@ -5437,7 +5515,6 @@ L_08A8A654: L_08A8A66C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8A654; } @@ -5470,7 +5547,6 @@ L_08A8A6AC: goto L_08A8A6B8; L_08A8A6B8: ctx.gpr[31] = (0x08A8A6C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8A6C0u) goto L_08A8A6C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A8A6C0: @@ -5502,7 +5578,6 @@ L_08A8A6E4: goto L_08A8A6EC; L_08A8A6EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8A654; } @@ -5510,7 +5585,6 @@ L_08A8A6EC: } L_08A8A6F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8A6FC; } @@ -5531,7 +5605,17 @@ L_08A8A6FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A71C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -5592,7 +5676,6 @@ L_08A8A71C: aot_gpr_7 = (aot_gpr_7 < static_cast(1) ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A8A880; } @@ -5602,7 +5685,6 @@ L_08A8A804: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08A8A824; } @@ -5641,7 +5723,6 @@ L_08A8A848: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8A804; } @@ -5704,7 +5785,6 @@ L_08A8A8DC: goto L_08A8A8F8; L_08A8A8F8: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08A8A92C; } @@ -5735,7 +5815,6 @@ L_08A8A91C: goto L_08A8A924; L_08A8A924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8A8A8; } @@ -5747,7 +5826,17 @@ L_08A8A92C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A934: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -5773,7 +5862,6 @@ L_08A8A978: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8A998; } @@ -5816,7 +5904,17 @@ L_08A8A9C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8A9D8: aot_gpr_6 = (0u | 6u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_6); @@ -5831,7 +5929,17 @@ L_08A8A9D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8AA00: aot_gpr_29 = (aot_gpr_29 + static_cast(-1520)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -5942,7 +6050,6 @@ L_08A8AB50: goto L_08A8AB5C; L_08A8AB5C: ctx.gpr[31] = (0x08A8AB64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8AB64u) goto L_08A8AB64; AOT_REGCACHE_SYNC_OUT(); return; L_08A8AB64: @@ -5974,7 +6081,6 @@ L_08A8AB88: goto L_08A8AB90; L_08A8AB90: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8ABA0; } @@ -5990,7 +6096,6 @@ L_08A8AB98: } L_08A8ABA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8AD24; } @@ -6021,7 +6126,6 @@ L_08A8ABD8: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8ACF8; } @@ -6038,7 +6142,6 @@ L_08A8ABF0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8ACF8; } @@ -6057,7 +6160,6 @@ L_08A8AC10: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8ACF8; } @@ -6160,7 +6262,17 @@ L_08A8AD24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8AD44: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); ctx.gpr[8] = (ctx.gpr[9] | 0u); @@ -6180,7 +6292,6 @@ L_08A8AD5C: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); aot_gpr_6 = (ctx.gpr[9] | 0u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8ADFC; } @@ -6254,7 +6365,6 @@ L_08A8ADCC: goto L_08A8ADD0; L_08A8ADD0: { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08A8ADF0; } @@ -6275,7 +6385,6 @@ L_08A8ADD8: L_08A8ADF0: aot_gpr_6 = (aot_gpr_6 + static_cast(44)); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8AD7C; } @@ -6287,7 +6396,6 @@ L_08A8ADFC: L_08A8AE00: ctx.gpr[8] = (ctx.gpr[8] + static_cast(44)); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8AD5C; } @@ -6295,11 +6403,20 @@ L_08A8AE00: } L_08A8AE0C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8AE14: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); @@ -6322,7 +6439,6 @@ L_08A8AE3C: L_08A8AE40: aot_gpr_7 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8AE54; } @@ -6330,7 +6446,6 @@ L_08A8AE40: } L_08A8AE4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8AE68; } @@ -6351,11 +6466,20 @@ L_08A8AE64: goto L_08A8AE68; L_08A8AE68: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8AE70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6455,7 +6579,17 @@ L_08A8AEF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8AFE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-2928)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -6615,7 +6749,6 @@ L_08A8B1C0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8B0A0; } @@ -6632,7 +6765,6 @@ L_08A8B1E4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8B65C; } @@ -6678,7 +6810,6 @@ L_08A8B264: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2864))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8B5A4; } @@ -6687,7 +6818,6 @@ L_08A8B264: L_08A8B278: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(33))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8B5A4; } @@ -6772,7 +6902,6 @@ L_08A8B350: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(2864))); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8B3C0; } @@ -6781,7 +6910,6 @@ L_08A8B350: L_08A8B36C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(33))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8B3C0; } @@ -6814,7 +6942,6 @@ L_08A8B3C0: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[30] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8B3F8; } @@ -6842,7 +6969,6 @@ L_08A8B3F8: aot_gpr_5 = (aot_gpr_5 + static_cast(32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A8B528; } @@ -6855,7 +6981,6 @@ L_08A8B41C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8B440; } @@ -6863,7 +6988,6 @@ L_08A8B41C: } L_08A8B438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8B50C; } @@ -6872,7 +6996,6 @@ L_08A8B438: L_08A8B440: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(8), ctx.gpr[21]); { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08A8B4E8; } @@ -6892,7 +7015,6 @@ L_08A8B44C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8B4E8; } @@ -6952,7 +7074,6 @@ L_08A8B4E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); aot_gpr_4 = (aot_gpr_4 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8B50C; } @@ -6972,7 +7093,6 @@ L_08A8B50C: aot_gpr_5 = (aot_gpr_5 + static_cast(32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8B41C; } @@ -6986,7 +7106,6 @@ L_08A8B528: aot_gpr_6 = (ctx.gpr[20] + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(144))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A8B57C; } @@ -7035,7 +7154,6 @@ L_08A8B57C: goto L_08A8B59C; L_08A8B59C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8B24C; } @@ -7117,7 +7235,6 @@ L_08A8B624: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8B210; } @@ -7126,7 +7243,6 @@ L_08A8B624: L_08A8B65C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8B684; } @@ -7137,7 +7253,6 @@ L_08A8B668: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8B684; } @@ -7167,7 +7282,17 @@ L_08A8B684: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8B6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -7247,7 +7372,6 @@ L_08A8B7B8: ctx.gpr[13] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(0))); ctx.gpr[25] = (aot_mem.aot_direct_load8(ctx.gpr[13] + static_cast(0))); { const bool branch_taken = ctx.gpr[25] != 0u; - // nop if (branch_taken) { goto L_08A8BD0C; } @@ -7257,7 +7381,6 @@ L_08A8B7C8: ctx.gpr[25] = (aot_mem.aot_direct_load16(ctx.gpr[13] + static_cast(2))); ctx.gpr[25] = (ctx.gpr[25] & 4095u); { const bool branch_taken = ctx.gpr[25] != ctx.gpr[14]; - // nop if (branch_taken) { goto L_08A8BD0C; } @@ -7286,7 +7409,6 @@ L_08A8B7D8: L_08A8B818: ctx.gpr[8] = (aot_mem.aot_direct_load16(ctx.gpr[13] + static_cast(2))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_7; - // nop if (branch_taken) { goto L_08A8BD04; } @@ -7790,7 +7912,6 @@ L_08A8BCD8: goto L_08A8BD04; L_08A8BD04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8BD98; } @@ -7834,7 +7955,6 @@ L_08A8BD1C: ctx.gpr[13] = (ctx.gpr[13] < static_cast(1) ? 1u : 0u); ctx.gpr[13] = (ctx.gpr[13] & 255u); { const bool branch_taken = ctx.gpr[13] != 0u; - // nop if (branch_taken) { goto L_08A8B7B8; } @@ -7859,7 +7979,17 @@ L_08A8BD98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8BDB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -7901,7 +8031,6 @@ L_08A8BE44: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 25u, 0x08A8C1ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7921,7 +8050,6 @@ L_08A8BE54: } L_08A8BE6C: ctx.gpr[31] = (0x08A8BE74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8BE74u) goto L_08A8BE74; AOT_REGCACHE_SYNC_OUT(); return; L_08A8BE74: @@ -7938,7 +8066,6 @@ L_08A8BE80: AOT_REGCACHE_SYNC_OUT(); return; L_08A8BE8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8BEDC; } @@ -7982,7 +8109,6 @@ L_08A8BECC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8BEF8; } @@ -8004,7 +8130,6 @@ L_08A8BEE4: } L_08A8BEF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8BF08; } @@ -8012,7 +8137,6 @@ L_08A8BEF0: } L_08A8BEF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 25u, 0x08A8C1ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8043,7 +8167,6 @@ L_08A8BF08: aot_gpr_5 = (static_cast(aot_gpr_5) < 0 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8BF6C; } @@ -8070,7 +8193,6 @@ L_08A8BF6C: L_08A8BF94: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(6))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 25u, 0x08A8C1ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8087,7 +8209,6 @@ L_08A8BFA0: aot_gpr_4 = (aot_gpr_4 & 4095u); aot_gpr_5 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8BFD4; } @@ -8101,7 +8222,6 @@ L_08A8BFD4: aot_gpr_5 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 25u, 0x08A8C1ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8109,7 +8229,6 @@ L_08A8BFD4: } L_08A8BFE4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 24u, 0x08A8C1C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8119,7 +8238,6 @@ L_08A8BFEC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(604))); aot_gpr_7 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 14u, 0x08A8C0F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0162.cpp b/profiles/vcs/generated/generated_unit_0162.cpp index 6bec316..118896b 100644 --- a/profiles/vcs/generated/generated_unit_0162.cpp +++ b/profiles/vcs/generated/generated_unit_0162.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0162[4078] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 8, 0, - 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 33, 0, 34, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 38, 0, 0, 0, 0, 39, 0, 40, 0, 0, 41, 0, 42, 43, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 0, - 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 55, 0, 0, 56, 0, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 61, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 68, 0, 0, 0, 0, - 0, 69, 0, 0, 0, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, - 80, 0, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 86, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 89, 0, 90, 0, 0, 91, 0, 0, 0, 92, 0, 93, 0, - 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 99, 0, 0, 100, 0, 0, 0, 101, 0, 102, 0, 0, 103, 0, 0, 0, - 104, 0, 105, 0, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 109, 0, 0, 0, 110, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 114, 0, 0, - 115, 0, 0, 0, 116, 0, 117, 0, 0, 118, 0, 0, 0, 119, 0, 120, 0, 0, 121, 0, 0, 122, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, - 0, 128, 0, 0, 129, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 0, 0, 141, 0, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 150, - 0, 0, 151, 0, 152, 153, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 157, 0, 158, 0, 159, 160, 0, 0, 0, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 0, 0, 0, 165, - 166, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 172, 0, 173, 0, 174, 175, 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, - 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 180, 181, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, - 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, - 0, 0, 189, 0, 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 195, 0, 0, 0, - 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 202, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 0, 0, - 0, 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 0, 0, 210, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, - 214, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 219, 0, - 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 223, 0, 224, 225, 0, 0, 0, 226, 0, - 0, 227, 0, 0, 228, 0, 0, 229, 0, 230, 231, 0, 232, 0, 0, 0, 0, 233, 0, 0, 234, 0, 235, 236, 0, 0, 237, 0, 0, 0, 0, 0, - 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 245, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, - 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 261, 0, 0, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 265, 0, 0, 0, 0, 266, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 271, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 0, 290, 291, 0, 0, 0, 0, 0, - 0, 292, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 294, 0, 0, 295, 0, 296, 297, 298, 0, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 307, 0, 0, 0, 308, 0, 0, 309, 0, 310, - 0, 0, 311, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, - 0, 0, 0, 0, 318, 0, 0, 0, 0, 319, 0, 320, 321, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, - 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 0, 0, 0, 0, 330, 0, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, - 0, 334, 0, 335, 0, 0, 336, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 341, - 0, 342, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 0, 346, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 349, - 0, 0, 350, 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 354, 0, 355, 0, 356, - 0, 357, 0, 358, 0, 359, 0, 0, 0, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 365, - 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 373, - 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 380, 381, 0, 0, - 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 387, - 0, 0, 0, 0, 0, 0, 0, 0, 388, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, - 394, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 401, 0, 0, 0, 0, 0, 402, 403, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 407, 0, 408, 0, 0, 409, 0, 0, 0, - 0, 410, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 413, 0, 0, 414, 0, 415, 0, 416, 417, 0, 418, 0, 419, 0, 0, - 420, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 424, 0, 0, 0, 425, 0, 0, 0, 426, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 431, 0, 0, 0, 0, 0, 432, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 436, - 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, - 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 448, 0, 449, 0, 0, 450, 0, 451, 452, 0, 453, 0, 454, 0, 455, 0, 0, 0, 456, 0, 457, 0, - 458, 0, 0, 459, 0, 460, 0, 0, 461, 462, 0, 463, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, - 0, 467, 0, 0, 468, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, - 0, 0, 474, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 485, - 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, - 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 506, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 511, 0, 0, 512, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, - 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, - 521, 0, 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 525, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, - 0, 0, 528, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 537, 0, 0, 538, 0, 539, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, - 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 546, 0, 0, - 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, 558, 0, 0, 559, 0, - 560, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 564, 0, 565, 0, 0, 0, - 0, 566, 0, 0, 0, 567, 568, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 572, 573, 0, 0, 0, 0, 0, - 0, 0, 0, 574, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 578, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, - 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, - 590, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 595, 0, 0, 0, - 0, 596, 597, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, - 602, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, 0, 605, 606, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, - 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 611, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 614, 0, 615, 0, 0, 616, 0, 617, 0, 618, - 0, 619, 0, 0, 0, 620, 0, 621, 0, 0, 622, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 626, 0, 627, 0, 0, 628, 0, 0, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 635, 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 0, 0, 0, 640, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 646, 0, 0, 647, 0, 0, 0, 648, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, - 651, 0, 0, 0, 0, 652, 0, 653, 0, 654, 655, 0, 656, 657, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 661, 662, 0, - 663, 664, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 0, 0, - 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 674, 0, 0, - 0, 0, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 681, 0, 0, 682, 0, 683, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 690, 0, 691, 0, - 0, 0, 0, 0, 692, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, 0, 0, 0, - 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, - 699, 0, 0, 700, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 711, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0162[64] = { + 0x48042084420844A1ull, 0x0801804208450208ull, 0x0154281042800020ull, 0x0241694200000004ull, + 0x4101140000000000ull, 0x0868004009288004ull, 0x000400620D010088ull, 0x2802480004004000ull, + 0x5128880051040421ull, 0x28944A25128944A2ull, 0x4000402002A4A251ull, 0x4249202008440152ull, + 0x8200208401040880ull, 0x8240503510010234ull, 0x0503510041020081ull, 0x0422020810041824ull, + 0x4202848210810A44ull, 0x0410609014022008ull, 0x4690008440420821ull, 0x1004020404D21692ull, + 0x2110010401004100ull, 0x0084104240424050ull, 0x0042404084800822ull, 0x0100108000000411ull, + 0x062AAAA801048000ull, 0x0A802000104E9202ull, 0x4208410CA4480040ull, 0x0502415544005A10ull, + 0xA05024128140904Aull, 0xA050242AA880010Cull, 0x32814090940A0484ull, 0x01510300888A0004ull, + 0x12A010200306AA05ull, 0x444500052B521042ull, 0x8A00080082501080ull, 0x00100104A0210088ull, + 0x04005B2951569490ull, 0x010820A480841052ull, 0x4120002080410824ull, 0x0000000010100808ull, + 0x0200202000042084ull, 0x0081082401021048ull, 0x1040081020408412ull, 0x4090214420041505ull, + 0x2810081204294080ull, 0x1200088004001001ull, 0x4A40010000000400ull, 0x0602286214081081ull, + 0x0000280028010018ull, 0x0220104404120200ull, 0x0804024612210081ull, 0xA948481020123091ull, + 0x0282109400A084A2ull, 0x0008484402244140ull, 0x10A2500000080000ull, 0x60400000022036A1ull, + 0x090420040000000Bull, 0x2040822020820004ull, 0x0000215200020000ull, 0x00000A0000000000ull, + 0x0240821050801000ull, 0x1000020910000002ull, 0x2000201000044A00ull, 0x0000201000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0162[64] = { + 1u, 15u, 26u, 37u, 47u, 52u, 63u, 73u, 80u, 94u, 115u, 128u, 142u, 151u, 166u, 178u, + 189u, 203u, 214u, 227u, 242u, 250u, 261u, 271u, 277u, 292u, 305u, 318u, 334u, 350u, 366u, 382u, + 394u, 410u, 427u, 437u, 446u, 467u, 480u, 490u, 494u, 501u, 511u, 521u, 535u, 547u, 554u, 560u, + 574u, 581u, 590u, 602u, 619u, 633u, 644u, 651u, 663u, 671u, 680u, 686u, 688u, 697u, 703u, 710u, }; void recomp_unit_0162_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0162_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A8C000u; - entry_id = (entry_delta < 16312u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0162[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16312u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0162[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0162[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A8C000; @@ -1000,7 +907,6 @@ L_08A8C0C8: L_08A8C0EC: aot_mem.aot_direct_store32(ctx.gpr[8] + static_cast(0), ctx.gpr[7]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8C1C0; } @@ -1040,7 +946,6 @@ L_08A8C124: goto L_08A8C140; L_08A8C140: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A8C1C0; } @@ -1131,7 +1036,17 @@ L_08A8C1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8C214: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1186,7 +1101,6 @@ L_08A8C290: goto L_08A8C2AC; L_08A8C2AC: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A8C2E0; } @@ -1217,7 +1131,6 @@ L_08A8C2D0: goto L_08A8C2D8; L_08A8C2D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8C25C; } @@ -1283,7 +1196,6 @@ L_08A8C384: aot_gpr_16 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A8C3A0; } @@ -1291,7 +1203,6 @@ L_08A8C384: } L_08A8C398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8C698; } @@ -1306,7 +1217,6 @@ L_08A8C3A0: goto L_08A8C3AC; L_08A8C3AC: aot_gpr_31 = (0x08A8C3B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A8C3B4u) goto L_08A8C3B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A8C3B4: @@ -1332,7 +1242,6 @@ L_08A8C3C0: L_08A8C3D8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(13))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8C66C; } @@ -1418,7 +1327,6 @@ L_08A8C4C0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(-19848))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8C4F8; } @@ -1474,7 +1382,6 @@ L_08A8C53C: goto L_08A8C54C; L_08A8C54C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08A8C668; } @@ -1603,7 +1510,6 @@ L_08A8C640: goto L_08A8C660; L_08A8C660: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8C554; } @@ -1649,7 +1555,6 @@ L_08A8C698: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 2u)); aot_gpr_5 = (ctx.gpr[22] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8C384; } @@ -1702,7 +1607,17 @@ L_08A8C738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8C768: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10084), static_cast(aot_gpr_4)); @@ -1724,7 +1639,17 @@ L_08A8C768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8C7AC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -1757,11 +1682,20 @@ L_08A8C7C4: } L_08A8C7EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8C7F4: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] == 0u; @@ -1823,11 +1757,20 @@ L_08A8C860: } L_08A8C870: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8C878: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -1862,7 +1805,6 @@ L_08A8C8BC: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C8CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -1871,7 +1813,6 @@ L_08A8C8CC: L_08A8C8D4: aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C8F8; } @@ -1886,7 +1827,6 @@ L_08A8C8E0: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C8F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -1895,7 +1835,6 @@ L_08A8C8F0: L_08A8C8F8: aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C91C; } @@ -1910,7 +1849,6 @@ L_08A8C904: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C914: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -1919,7 +1857,6 @@ L_08A8C914: L_08A8C91C: aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C940; } @@ -1934,7 +1871,6 @@ L_08A8C928: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -1943,7 +1879,6 @@ L_08A8C938: L_08A8C940: aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C964; } @@ -1958,7 +1893,6 @@ L_08A8C94C: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C95C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -1967,7 +1901,6 @@ L_08A8C95C: L_08A8C964: aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C988; } @@ -1982,7 +1915,6 @@ L_08A8C970: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C980: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -1991,7 +1923,6 @@ L_08A8C980: L_08A8C988: aot_gpr_5 = (0u | 14u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C9AC; } @@ -2006,7 +1937,6 @@ L_08A8C994: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -2015,7 +1945,6 @@ L_08A8C9A4: L_08A8C9AC: aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C9D0; } @@ -2030,7 +1959,6 @@ L_08A8C9B8: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C9C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -2039,7 +1967,6 @@ L_08A8C9C8: L_08A8C9D0: aot_gpr_5 = (0u | 70u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8C9F4; } @@ -2054,7 +1981,6 @@ L_08A8C9DC: AOT_REGCACHE_SYNC_OUT(); return; L_08A8C9EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -2063,7 +1989,6 @@ L_08A8C9EC: L_08A8C9F4: aot_gpr_5 = (0u | 71u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8CA18; } @@ -2078,7 +2003,6 @@ L_08A8CA00: AOT_REGCACHE_SYNC_OUT(); return; L_08A8CA10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -2087,7 +2011,6 @@ L_08A8CA10: L_08A8CA18: aot_gpr_5 = (0u | 34u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8CA3C; } @@ -2102,7 +2025,6 @@ L_08A8CA24: AOT_REGCACHE_SYNC_OUT(); return; L_08A8CA34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8CA94; } @@ -2161,7 +2083,17 @@ L_08A8CA94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CAB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2248,7 +2180,17 @@ L_08A8CB6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CB94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2269,7 +2211,6 @@ L_08A8CBB4: L_08A8CBC0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A8CBE4; } @@ -2296,7 +2237,17 @@ L_08A8CBE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CBF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2339,7 +2290,17 @@ L_08A8CC48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CC60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2374,7 +2335,17 @@ L_08A8CC9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CCB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2438,7 +2409,17 @@ L_08A8CD24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CD40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2463,7 +2444,6 @@ L_08A8CD70: AOT_REGCACHE_SYNC_OUT(); return; L_08A8CD80: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A8CD90; } @@ -2530,7 +2510,6 @@ L_08A8CDE4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8CE00; } @@ -2553,7 +2532,17 @@ L_08A8CE00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CE1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2590,7 +2579,17 @@ L_08A8CE60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CE78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2613,7 +2612,6 @@ L_08A8CEA0: AOT_REGCACHE_SYNC_OUT(); return; L_08A8CEB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8CEC0; } @@ -2680,7 +2678,6 @@ L_08A8CF14: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8CF30; } @@ -2702,7 +2699,17 @@ L_08A8CF30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2742,7 +2749,17 @@ L_08A8CF8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CFA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2770,7 +2787,17 @@ L_08A8CFD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8CFE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2814,7 +2841,17 @@ L_08A8D02C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D040: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2842,7 +2879,17 @@ L_08A8D070: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D084: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2867,14 +2914,34 @@ L_08A8D0A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D0BC: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D0C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2903,7 +2970,17 @@ L_08A8D0F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D10C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2976,7 +3053,6 @@ L_08A8D19C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8D1B8; } @@ -2998,7 +3074,17 @@ L_08A8D1B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D1D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3026,7 +3112,17 @@ L_08A8D200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D214: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3054,7 +3150,17 @@ L_08A8D244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D258: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3082,7 +3188,17 @@ L_08A8D288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D29C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_16); @@ -3138,7 +3254,6 @@ L_08A8D304: L_08A8D310: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A8D328; } @@ -3225,7 +3340,17 @@ L_08A8D3A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D3C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -3270,7 +3395,17 @@ L_08A8D420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D438: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -3310,7 +3445,17 @@ L_08A8D488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D4A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3355,14 +3500,34 @@ L_08A8D4F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D510: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3389,7 +3554,17 @@ L_08A8D544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D558: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3416,7 +3591,17 @@ L_08A8D584: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D598: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3444,7 +3629,17 @@ L_08A8D5C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D5DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3478,7 +3673,17 @@ L_08A8D614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D62C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3522,7 +3727,17 @@ L_08A8D67C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D698: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3549,7 +3764,17 @@ L_08A8D6C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D6D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3583,7 +3808,17 @@ L_08A8D710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D728: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3621,7 +3856,17 @@ L_08A8D79C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3703,7 +3948,6 @@ L_08A8D7E0: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8D848; } @@ -3727,7 +3971,17 @@ L_08A8D848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D860: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3796,7 +4050,6 @@ L_08A8D8C4: AOT_REGCACHE_SYNC_OUT(); return; L_08A8D8CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8D8E8; } @@ -3806,7 +4059,6 @@ L_08A8D8D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(160))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(160))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A8D8E8; } @@ -3829,7 +4081,17 @@ L_08A8D8E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D904: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -3851,7 +4113,6 @@ L_08A8D924: L_08A8D930: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08A8D948; } @@ -3887,7 +4148,17 @@ L_08A8D958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8D970: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -3905,7 +4176,6 @@ L_08A8D970: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8D9E4; } @@ -3927,7 +4197,6 @@ L_08A8D9B4: goto L_08A8D9DC; L_08A8D9DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DA68; } @@ -3935,7 +4204,6 @@ L_08A8D9DC: } L_08A8D9E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DA8C; } @@ -3952,7 +4220,6 @@ L_08A8D9EC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DA4C; } @@ -3982,7 +4249,6 @@ L_08A8DA18: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DA7C; } @@ -4009,7 +4275,6 @@ L_08A8DA58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DA7C; } @@ -4056,14 +4321,22 @@ L_08A8DA8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8DAA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8DB2C; } @@ -4072,9 +4345,7 @@ L_08A8DAA0: L_08A8DAB8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8DB2C; } @@ -4084,9 +4355,7 @@ L_08A8DACC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8DB2C; } @@ -4095,9 +4364,7 @@ L_08A8DACC: L_08A8DAE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8DB2C; } @@ -4107,9 +4374,7 @@ L_08A8DAF8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8DB2C; } @@ -4118,9 +4383,7 @@ L_08A8DAF8: L_08A8DB10: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8DB2C; } @@ -4139,11 +4402,20 @@ L_08A8DB2C: goto L_08A8DB30; L_08A8DB30: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8DB38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -4171,7 +4443,6 @@ L_08A8DB68: } L_08A8DB78: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A8DD08; } @@ -4179,7 +4450,6 @@ L_08A8DB78: } L_08A8DB80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DBA0; } @@ -4195,7 +4465,6 @@ L_08A8DB88: } L_08A8DB90: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8DC90; } @@ -4203,7 +4472,6 @@ L_08A8DB90: } L_08A8DB98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DD08; } @@ -4215,7 +4483,6 @@ L_08A8DBA0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(24))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DC04; } @@ -4233,7 +4500,6 @@ L_08A8DBC4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8DBE8; } @@ -4241,7 +4507,6 @@ L_08A8DBC4: } L_08A8DBE0: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8DC0C; } @@ -4254,7 +4519,6 @@ L_08A8DBE8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(24))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8DBB8; } @@ -4262,7 +4526,6 @@ L_08A8DBE8: } L_08A8DC04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DD08; } @@ -4283,7 +4546,6 @@ L_08A8DC18: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(26))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DC7C; } @@ -4301,7 +4563,6 @@ L_08A8DC3C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8DC60; } @@ -4309,7 +4570,6 @@ L_08A8DC3C: } L_08A8DC58: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8DC84; } @@ -4322,7 +4582,6 @@ L_08A8DC60: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(26))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8DC30; } @@ -4330,7 +4589,6 @@ L_08A8DC60: } L_08A8DC7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DD08; } @@ -4351,7 +4609,6 @@ L_08A8DC90: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(108))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DD08; } @@ -4369,7 +4626,6 @@ L_08A8DCB4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8DCD8; } @@ -4377,7 +4633,6 @@ L_08A8DCB4: } L_08A8DCD0: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8DCFC; } @@ -4390,7 +4645,6 @@ L_08A8DCD8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(108))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8DCA8; } @@ -4398,7 +4652,6 @@ L_08A8DCD8: } L_08A8DCF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DD08; } @@ -4428,7 +4681,17 @@ L_08A8DD0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8DD20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -4459,7 +4722,6 @@ L_08A8DD5C: } L_08A8DD6C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A8DEF0; } @@ -4467,7 +4729,6 @@ L_08A8DD6C: } L_08A8DD74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DD94; } @@ -4483,7 +4744,6 @@ L_08A8DD7C: } L_08A8DD84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8DE7C; } @@ -4491,7 +4751,6 @@ L_08A8DD84: } L_08A8DD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DEF0; } @@ -4502,7 +4761,6 @@ L_08A8DD94: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(24))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DDF4; } @@ -4520,7 +4778,6 @@ L_08A8DDB4: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8DDD8; } @@ -4528,7 +4785,6 @@ L_08A8DDB4: } L_08A8DDD0: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8DDFC; } @@ -4541,7 +4797,6 @@ L_08A8DDD8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(24))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8DDA8; } @@ -4549,7 +4804,6 @@ L_08A8DDD8: } L_08A8DDF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DEF0; } @@ -4569,7 +4823,6 @@ L_08A8DE08: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(26))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DE68; } @@ -4587,7 +4840,6 @@ L_08A8DE28: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8DE4C; } @@ -4595,7 +4847,6 @@ L_08A8DE28: } L_08A8DE44: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8DE70; } @@ -4608,7 +4859,6 @@ L_08A8DE4C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(26))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8DE1C; } @@ -4616,7 +4866,6 @@ L_08A8DE4C: } L_08A8DE68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DEF0; } @@ -4636,7 +4885,6 @@ L_08A8DE7C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(108))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A8DEF0; } @@ -4654,7 +4902,6 @@ L_08A8DE9C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8DEC0; } @@ -4662,7 +4909,6 @@ L_08A8DE9C: } L_08A8DEB8: { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8DEE4; } @@ -4675,7 +4921,6 @@ L_08A8DEC0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(108))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A8DE90; } @@ -4683,7 +4928,6 @@ L_08A8DEC0: } L_08A8DEDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8DEF0; } @@ -4713,7 +4957,17 @@ L_08A8DEF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8DF08: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), aot_gpr_16); @@ -4775,7 +5029,6 @@ L_08A8DFA4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.gpr[20] = (0u | 1u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (0u | 0u); if (branch_taken) { @@ -4787,7 +5040,6 @@ L_08A8DFC0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(108))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8DFE0; } @@ -4795,7 +5047,6 @@ L_08A8DFC0: } L_08A8DFD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8E060; } @@ -4821,7 +5072,6 @@ L_08A8DFE0: goto L_08A8DAA0; L_08A8E000: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8E048; } @@ -4834,7 +5084,6 @@ L_08A8E008: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), ctx.gpr[20]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7652))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A8E034; } @@ -4850,7 +5099,6 @@ L_08A8E024: } L_08A8E02C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8E048; } @@ -4858,7 +5106,6 @@ L_08A8E02C: } L_08A8E034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8E064; } @@ -4866,7 +5113,6 @@ L_08A8E034: } L_08A8E03C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8E048; } @@ -4881,7 +5127,6 @@ L_08A8E048: ctx.gpr[20] = (ctx.gpr[20] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8DFE0; } @@ -4909,13 +5154,22 @@ L_08A8E064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E094: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_6 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[2] = (0u | 0u); if (branch_taken) { @@ -4938,7 +5192,6 @@ L_08A8E0B0: goto L_08A8E0D4; L_08A8E0D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8E180; } @@ -4960,9 +5213,7 @@ L_08A8E0E4: L_08A8E0F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8E174; } @@ -4971,9 +5222,7 @@ L_08A8E0F0: L_08A8E104: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8E174; } @@ -4983,9 +5232,7 @@ L_08A8E118: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8E174; } @@ -4994,9 +5241,7 @@ L_08A8E118: L_08A8E130: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8E174; } @@ -5005,7 +5250,6 @@ L_08A8E130: L_08A8E144: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(36))); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A8E158; } @@ -5021,7 +5265,6 @@ L_08A8E150: } L_08A8E158: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08A8E164; } @@ -5032,7 +5275,6 @@ L_08A8E160: goto L_08A8E164; L_08A8E164: { const bool branch_taken = ctx.gpr[7] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A8E174; } @@ -5040,7 +5282,6 @@ L_08A8E164: } L_08A8E16C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8E180; } @@ -5049,7 +5290,6 @@ L_08A8E16C: L_08A8E174: aot_gpr_6 = (aot_gpr_6 + static_cast(56)); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A8E0F0; } @@ -5057,11 +5297,20 @@ L_08A8E174: } L_08A8E180: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E188: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), aot_gpr_16); @@ -5075,7 +5324,6 @@ L_08A8E188: goto L_08A8DAA0; L_08A8E1C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A8E21C; } @@ -5137,7 +5385,6 @@ L_08A8E230: goto L_08A8DAA0; L_08A8E250: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8E264; } @@ -5158,7 +5405,6 @@ L_08A8E264: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8E230; } @@ -5183,7 +5429,17 @@ L_08A8E27C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E2AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), aot_gpr_16); @@ -5197,7 +5453,6 @@ L_08A8E2AC: goto L_08A8DAA0; L_08A8E2E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A8E340; } @@ -5259,7 +5514,6 @@ L_08A8E354: goto L_08A8DAA0; L_08A8E374: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8E388; } @@ -5280,7 +5534,6 @@ L_08A8E388: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8E354; } @@ -5305,7 +5558,17 @@ L_08A8E3A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E3D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5333,7 +5596,6 @@ L_08A8E410: L_08A8E41C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8E43C; } @@ -5341,7 +5603,6 @@ L_08A8E41C: } L_08A8E428: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A8E444; } @@ -5350,7 +5611,6 @@ L_08A8E428: L_08A8E430: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A8E444; } @@ -5373,7 +5633,6 @@ L_08A8E448: goto L_08A8E450; L_08A8E450: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A8E460; } @@ -5395,7 +5654,6 @@ L_08A8E460: goto L_08A8DAA0; L_08A8E470: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8E4AC; } @@ -5403,7 +5661,6 @@ L_08A8E470: } L_08A8E478: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08A8E48C; } @@ -5412,7 +5669,6 @@ L_08A8E478: L_08A8E480: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8E4A0; } @@ -5420,7 +5676,6 @@ L_08A8E480: } L_08A8E48C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08A8E4A4; } @@ -5429,7 +5684,6 @@ L_08A8E48C: L_08A8E494: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A8E4A4; } @@ -5451,7 +5705,6 @@ L_08A8E4AC: goto L_08A8E4B0; L_08A8E4B0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A8E450; } @@ -5476,7 +5729,17 @@ L_08A8E4B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E4E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5497,7 +5760,6 @@ L_08A8E504: } L_08A8E510: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A8E530; } @@ -5539,7 +5801,17 @@ L_08A8E548: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E55C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5566,7 +5838,6 @@ L_08A8E588: } L_08A8E594: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A8E5B4; } @@ -5608,7 +5879,17 @@ L_08A8E5CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E5E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -5684,7 +5965,17 @@ L_08A8E67C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E694: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5771,7 +6062,17 @@ L_08A8E750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E770: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5895,7 +6196,17 @@ L_08A8E8B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E8E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5950,7 +6261,17 @@ L_08A8E944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E960: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6005,7 +6326,17 @@ L_08A8E9C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8E9DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6060,7 +6391,17 @@ L_08A8EA3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EA58: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6072,7 +6413,17 @@ L_08A8EA58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EA74: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -6084,7 +6435,17 @@ L_08A8EA74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EA90: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); @@ -6096,7 +6457,17 @@ L_08A8EA90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EAAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(110))); @@ -6130,7 +6501,6 @@ L_08A8EAF0: goto L_08A8DAA0; L_08A8EB00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A8EB28; } @@ -6142,7 +6512,6 @@ L_08A8EB08: ctx.gpr[18] = (ctx.gpr[18] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8EAD8; } @@ -6173,7 +6542,17 @@ L_08A8EB30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EB48: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6203,7 +6582,6 @@ L_08A8EB88: AOT_REGCACHE_SYNC_OUT(); return; L_08A8EB98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8EC40; } @@ -6273,7 +6651,6 @@ L_08A8EC1C: } L_08A8EC38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8EED8; } @@ -6287,7 +6664,6 @@ L_08A8EC40: AOT_REGCACHE_SYNC_OUT(); return; L_08A8EC4C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8ECF4; } @@ -6357,7 +6733,6 @@ L_08A8ECD0: } L_08A8ECEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8EED8; } @@ -6533,7 +6908,6 @@ L_08A8EED8: AOT_REGCACHE_SYNC_OUT(); return; L_08A8EEE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8EEF8; } @@ -6566,7 +6940,17 @@ L_08A8EF00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EF1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; @@ -6586,13 +6970,22 @@ L_08A8EF30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EF4C: aot_gpr_4 = (17204u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); aot_gpr_4 = (49972u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6607,9 +7000,7 @@ L_08A8EF68: L_08A8EF70: aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8EF70; } @@ -6617,7 +7008,6 @@ L_08A8EF70: } L_08A8EF84: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17332u << 16u); if (branch_taken) { @@ -6631,9 +7021,7 @@ L_08A8EF94: L_08A8EF98: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8EF98; } @@ -6645,7 +7033,17 @@ L_08A8EFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8EFB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6659,7 +7057,6 @@ L_08A8EFC4: aot_fpr_14 = std::bit_cast(0u); aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6677,9 +7074,7 @@ L_08A8EFE8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F010; } @@ -6704,7 +7099,17 @@ L_08A8F010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F040: aot_gpr_6 = (16512u << 16u); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } @@ -6714,9 +7119,7 @@ L_08A8F040: { const float fs = ctx.fpr[16]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_14 = ctx.fpr[15] - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F074; } @@ -6752,11 +7155,20 @@ L_08A8F074: } L_08A8F0AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F0B4: ctx.gpr[8] = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(ctx.gpr[8]); @@ -6873,11 +7285,20 @@ L_08A8F0B4: ctx.gpr[8] = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[0] = std::bit_cast(ctx.gpr[8]); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F124: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6908,7 +7329,17 @@ L_08A8F150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6940,7 +7371,17 @@ L_08A8F198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F1B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6984,7 +7425,17 @@ L_08A8F200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F21C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7020,9 +7471,7 @@ L_08A8F264: L_08A8F270: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F288; } @@ -7035,7 +7484,6 @@ L_08A8F288: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8F264; } @@ -7063,7 +7511,17 @@ L_08A8F2A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F2C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7099,9 +7557,7 @@ L_08A8F310: L_08A8F31C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F334; } @@ -7114,7 +7570,6 @@ L_08A8F334: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8F310; } @@ -7142,7 +7597,17 @@ L_08A8F350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F374: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -7188,7 +7653,6 @@ L_08A8F3CC: } L_08A8F3D8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A8F404; } @@ -7218,7 +7682,6 @@ L_08A8F3F4: } L_08A8F3FC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A8F490; } @@ -7233,7 +7696,6 @@ L_08A8F404: AOT_REGCACHE_SYNC_OUT(); return; L_08A8F414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8F520; } @@ -7283,7 +7745,6 @@ L_08A8F45C: AOT_REGCACHE_SYNC_OUT(); return; L_08A8F488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8F3EC; } @@ -7343,7 +7804,6 @@ L_08A8F4E4: AOT_REGCACHE_SYNC_OUT(); return; L_08A8F518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8F3EC; } @@ -7362,7 +7822,17 @@ L_08A8F520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F538: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7384,7 +7854,17 @@ L_08A8F554: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F564: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7427,7 +7907,17 @@ L_08A8F5B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F5CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -7542,7 +8032,17 @@ L_08A8F5CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F64C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7583,7 +8083,6 @@ L_08A8F64C: AOT_REGCACHE_SYNC_OUT(); return; L_08A8F6B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A8F730; } @@ -7626,7 +8125,6 @@ L_08A8F6F0: L_08A8F700: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7636,7 +8134,6 @@ L_08A8F700: } L_08A8F714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8F728; } @@ -7679,12 +8176,21 @@ L_08A8F734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F754: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(196))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A8F800; } @@ -7763,9 +8269,7 @@ L_08A8F764: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F7F8; } @@ -7776,7 +8280,6 @@ L_08A8F7D8: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(0u); goto L_08A8F7F4; @@ -7802,7 +8305,17 @@ L_08A8F804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F80C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7878,9 +8391,7 @@ L_08A8F888: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(168))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F8C8; } @@ -7901,9 +8412,7 @@ L_08A8F8C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F8EC; } @@ -7928,7 +8437,17 @@ L_08A8F8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8F908: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(ctx.fpr[26])); @@ -7959,9 +8478,7 @@ L_08A8F95C: ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(180))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F9D8; } @@ -7980,7 +8497,6 @@ L_08A8F994: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-5256), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8F9BC; } @@ -8010,9 +8526,7 @@ L_08A8F9BC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); ctx.fpr[24] = ctx.fpr[24] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F974; } @@ -8023,9 +8537,7 @@ L_08A8F9D8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(160))); ctx.fpr[26] = ctx.fpr[26] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8F95C; } @@ -8058,7 +8570,17 @@ L_08A8F9F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8FA44: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -8073,7 +8595,6 @@ L_08A8FA44: ctx.fpr[0] = std::bit_cast(0u); aot_fpr_14 = aot_fpr_14 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7288), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -8090,7 +8611,6 @@ L_08A8FA84: goto L_08A8FA90; L_08A8FA90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8FAB4; } @@ -8098,7 +8618,6 @@ L_08A8FA90: } L_08A8FA98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A8FBA4; } @@ -8242,7 +8761,17 @@ L_08A8FBA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8FBAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -8319,9 +8848,7 @@ L_08A8FC30: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(8), std::bit_cast(aot_fpr_12)); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8FC78; } @@ -8354,9 +8881,7 @@ L_08A8FC78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(168))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8FCA4; } @@ -8377,9 +8902,7 @@ L_08A8FCA4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(184))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8FCE4; } @@ -8426,7 +8949,17 @@ L_08A8FCE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A8FD04: aot_gpr_29 = (aot_gpr_29 + static_cast(-624)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(576), aot_gpr_16); @@ -8466,7 +8999,6 @@ L_08A8FD70: L_08A8FD80: aot_gpr_4 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A8FDF0; } @@ -8476,9 +9008,7 @@ L_08A8FD8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1100))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A8FDF0; } @@ -8557,7 +9087,6 @@ L_08A8FDF0: AOT_REGCACHE_SYNC_OUT(); return; L_08A8FE24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 22u, 0x08A902F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8592,7 +9121,6 @@ L_08A8FE48: ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(176))); if (branch_taken) { @@ -8607,7 +9135,6 @@ L_08A8FE90: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(180))); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0163.cpp b/profiles/vcs/generated/generated_unit_0163.cpp index 0e5f174..9d0f25f 100644 --- a/profiles/vcs/generated/generated_unit_0163.cpp +++ b/profiles/vcs/generated/generated_unit_0163.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0163[4094] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 0, 22, 23, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 26, 0, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, 52, 0, 0, 53, 54, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, - 60, 0, 0, 0, 61, 0, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 69, 70, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 0, 73, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 78, 0, - 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 85, 0, 86, 87, 0, 88, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 101, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, - 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 109, 0, 0, 0, 110, 0, 111, 0, 0, 0, 112, 0, 0, - 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 122, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, - 125, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 136, 0, - 0, 137, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 148, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 154, 0, - 155, 156, 0, 157, 158, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, - 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 174, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 177, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 0, 0, 0, - 183, 0, 184, 0, 0, 0, 185, 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, - 196, 0, 0, 0, 0, 0, 0, 197, 0, 198, 199, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 203, 204, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 213, 0, 214, 0, 0, 0, 0, 215, - 0, 0, 0, 0, 216, 217, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 221, 222, 0, 0, 0, 0, 0, - 0, 223, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 243, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 251, 0, 252, 0, 253, 0, - 254, 255, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 261, 0, 262, 0, 0, 0, 263, 0, 264, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, - 269, 0, 0, 0, 270, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 279, 0, 280, 0, 0, 0, 281, 0, - 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 288, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, - 0, 296, 0, 0, 297, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 302, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 306, - 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, - 311, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, - 318, 0, 0, 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 0, 330, 0, 331, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, - 334, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, - 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, - 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 347, - 0, 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, - 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 358, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 366, 0, 0, 367, 368, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, - 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 376, 0, 0, 0, 377, 0, 378, 0, 379, - 0, 380, 0, 381, 0, 382, 0, 383, 0, 384, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, 388, 0, 0, 0, - 389, 0, 390, 0, 0, 0, 0, 391, 0, 392, 393, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 0, - 0, 0, 400, 0, 401, 0, 0, 0, 0, 402, 0, 403, 404, 0, 405, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 0, 409, 0, - 410, 0, 0, 0, 411, 0, 412, 0, 0, 0, 0, 413, 0, 414, 415, 0, 416, 0, 417, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, - 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 422, 0, 423, 0, 0, 424, 0, 0, 425, 0, 426, 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 429, - 0, 430, 0, 0, 431, 0, 432, 0, 0, 433, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, - 0, 439, 0, 440, 0, 441, 0, 0, 0, 442, 443, 0, 0, 444, 445, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 449, 0, 450, 0, - 0, 451, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 454, 0, 455, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, - 0, 0, 0, 459, 460, 0, 461, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, - 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, - 0, 474, 0, 0, 475, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 480, 0, 0, - 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 483, 0, 484, 485, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 488, 0, 0, 489, - 0, 490, 0, 491, 0, 0, 492, 0, 493, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, - 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 0, 503, 0, 0, 0, 0, 0, 504, 0, 505, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 508, 0, 0, 509, 0, 0, 0, 0, - 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, - 0, 514, 0, 0, 0, 515, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 522, 0, 523, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, 0, 526, 0, 527, 0, 0, 528, - 0, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 532, 0, 0, 0, 533, 0, 534, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 536, 0, - 0, 537, 0, 0, 0, 0, 538, 0, 539, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 542, 543, 0, 0, 0, 0, 544, 0, 0, 0, - 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, - 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, 0, 0, 0, 553, 0, 554, 0, 0, 0, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 557, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 562, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, - 0, 568, 569, 0, 0, 0, 570, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 0, 574, 575, 0, - 0, 576, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 582, 0, 0, 0, 0, 0, 0, - 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 587, - 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, - 0, 596, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, - 0, 601, 0, 0, 602, 0, 0, 603, 0, 0, 604, 0, 0, 0, 605, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, - 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, 0, 612, 0, 613, 0, 614, 0, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, - 617, 618, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 0, 0, 622, 623, 0, 0, 624, 0, 625, 0, 0, 626, 0, - 627, 0, 628, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 634, 0, 0, - 0, 635, 0, 0, 0, 0, 636, 0, 0, 637, 0, 638, 0, 639, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0163[64] = { + 0x3000000500400009ull, 0x8500090001100100ull, 0x6A00010000402010ull, 0x8024440442008000ull, + 0x8200004000000080ull, 0x0200001020104100ull, 0x8010408000000090ull, 0x12A0000000419640ull, + 0x0098284000110511ull, 0x0002008050400550ull, 0x0245A400000A1000ull, 0x1081000A40004080ull, + 0x50B2000000000000ull, 0x10004048228D0140ull, 0x04A9000080000404ull, 0x0008248004081009ull, + 0x0000009240800008ull, 0x0041010010403400ull, 0x0102481B4840A005ull, 0x0000000109200888ull, + 0x0000000000A00000ull, 0x0200000000000200ull, 0x0000000000000000ull, 0x0004000000000005ull, + 0x0902800300000000ull, 0x0000020000924145ull, 0x0314468110220008ull, 0x0000000100003401ull, + 0x0688403085084004ull, 0x0011220000001502ull, 0x042D554110009040ull, 0x4010000B54504081ull, + 0x4004010401451400ull, 0x4514004010401451ull, 0x4014514004010401ull, 0x0008003208080010ull, + 0x9040400080A00000ull, 0x2004010140044001ull, 0x0084001904040008ull, 0x00A28A0020080A08ull, + 0x0800088000200041ull, 0x8202000402200801ull, 0x100010140110000Cull, 0x1004002020006410ull, + 0x2800880032080800ull, 0x148012AAA8A00420ull, 0x44215A1451085685ull, 0x8254952040856851ull, + 0x5111662A2050A252ull, 0x041044582082A822ull, 0x0204812080800040ull, 0x9401694022404052ull, + 0x282482041018894Aull, 0x0210000509082000ull, 0x94440000A09448A2ull, 0x10C02942410A2224ull, + 0x2288208810200802ull, 0x280000401000C040ull, 0x6120104612224000ull, 0x8480100102902112ull, + 0x8021011000840020ull, 0x1000C49220024202ull, 0x4A650103208A9403ull, 0x20022A4230844085ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0163[64] = { + 1u, 8u, 16u, 24u, 33u, 37u, 43u, 49u, 60u, 72u, 81u, 91u, 99u, 105u, 117u, 125u, + 134u, 140u, 148u, 163u, 170u, 172u, 174u, 174u, 177u, 183u, 192u, 205u, 210u, 223u, 231u, 246u, + 259u, 269u, 282u, 293u, 300u, 307u, 315u, 323u, 334u, 340u, 348u, 356u, 364u, 373u, 389u, 410u, + 430u, 451u, 466u, 474u, 490u, 506u, 514u, 529u, 545u, 556u, 563u, 576u, 588u, 596u, 608u, 627u, }; void recomp_unit_0163_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0163_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A90000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0163[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0163[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0163[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A90000; @@ -893,7 +800,6 @@ L_08A90058: goto L_08A931B8; L_08A90080: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08A900F0; } @@ -992,7 +898,6 @@ L_08A900F4: aot_gpr_4 = (16384u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = ctx.fpr[26] + aot_fpr_12; if (branch_taken) { @@ -1010,7 +915,6 @@ L_08A90120: aot_gpr_4 = (16384u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = ctx.fpr[24] + aot_fpr_12; if (branch_taken) { @@ -1066,9 +970,7 @@ L_08A90160: aot_gpr_4 = (aot_gpr_4 | 16384u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A901E0; } @@ -1124,7 +1026,6 @@ L_08A901AC: goto L_08A901E0; L_08A901E0: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08A902A0; } @@ -1135,7 +1036,6 @@ L_08A901E8: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A902A0; } @@ -1144,7 +1044,6 @@ L_08A901E8: L_08A901FC: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17820u << 16u); if (branch_taken) { @@ -1159,7 +1058,6 @@ L_08A90210: aot_gpr_4 = (16192u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A90234; @@ -1279,7 +1177,6 @@ L_08A902A0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A902EC; } @@ -1328,7 +1225,17 @@ L_08A902F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9033C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(72))); @@ -1380,7 +1287,6 @@ L_08A903A8: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); ctx.gpr[9] = (0u | 263u); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A903C8; } @@ -1390,7 +1296,6 @@ L_08A903B8: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); ctx.gpr[9] = (0u | 279u); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A903D4; } @@ -1499,7 +1404,6 @@ L_08A90498: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(200), std::bit_cast(aot_fpr_14)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(204), std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(208), std::bit_cast(aot_fpr_15)); if (branch_taken) { @@ -1511,9 +1415,7 @@ L_08A904E4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A90520; } @@ -1538,7 +1440,6 @@ L_08A90520: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(200))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); goto L_08A90574; @@ -1548,7 +1449,6 @@ L_08A90538: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); goto L_08A90574; @@ -1624,7 +1524,17 @@ L_08A90590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A905E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2238u << 16u); @@ -1646,7 +1556,17 @@ L_08A90610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9061C: ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); ctx.gpr[10] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2))); @@ -1688,11 +1608,20 @@ L_08A9061C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9069C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(60))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(64), aot_gpr_5); @@ -1704,7 +1633,17 @@ L_08A9069C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A906B8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(60))); @@ -1715,7 +1654,17 @@ L_08A906B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A906D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[9] = (2280u << 16u); @@ -1756,7 +1705,6 @@ L_08A90724: goto L_08A90728; L_08A90728: { const bool branch_taken = static_cast(ctx.gpr[11]) <= 0; - // nop if (branch_taken) { goto L_08A9073C; } @@ -1780,7 +1728,6 @@ L_08A90740: ctx.gpr[11] = (static_cast(static_cast(ctx.gpr[11]) >> 16u)); ctx.gpr[8] = (static_cast(ctx.gpr[11]) < 32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A906FC; } @@ -1872,7 +1819,17 @@ L_08A90828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A90840: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); @@ -1881,14 +1838,23 @@ L_08A90840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A90850: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10086))); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(96), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A908B4; } @@ -1927,7 +1893,6 @@ L_08A908CC: L_08A908D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10088))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A90918; } @@ -1954,7 +1919,6 @@ L_08A908DC: } L_08A90910: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A90AD8; } @@ -1962,7 +1926,6 @@ L_08A90910: } L_08A90918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A90FCC; } @@ -1970,7 +1933,6 @@ L_08A90918: } L_08A90920: aot_gpr_31 = (0x08A90928u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A90928u) goto L_08A90928; AOT_REGCACHE_SYNC_OUT(); return; L_08A90928: @@ -2002,7 +1964,6 @@ L_08A90958: } L_08A90970: aot_gpr_31 = (0x08A90978u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A90978u) goto L_08A90978; AOT_REGCACHE_SYNC_OUT(); return; L_08A90978: @@ -2071,7 +2032,6 @@ L_08A90A30: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(8), std::bit_cast(aot_fpr_13)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A90AD8; } @@ -2079,7 +2039,6 @@ L_08A90A30: } L_08A90A44: aot_gpr_31 = (0x08A90A4Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A90A4Cu) goto L_08A90A4C; AOT_REGCACHE_SYNC_OUT(); return; L_08A90A4C: @@ -2124,7 +2083,6 @@ L_08A90A4C: L_08A90AA8: aot_gpr_4 = (ctx.gpr[2] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A90ABC; } @@ -2306,7 +2264,6 @@ L_08A90BF0: { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[18] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(52), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -2324,7 +2281,6 @@ L_08A90CD0: goto L_08A90CD4; L_08A90CD4: { const bool branch_taken = aot_gpr_17 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08A90B1C; } @@ -2333,9 +2289,7 @@ L_08A90CD4: L_08A90CDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8348))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A90CF8; } @@ -2355,9 +2309,7 @@ L_08A90CF8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A90D20; } @@ -2377,9 +2329,7 @@ L_08A90D20: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A90D48; } @@ -2400,7 +2350,6 @@ L_08A90D4C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A90F0C; } @@ -2408,7 +2357,6 @@ L_08A90D4C: } L_08A90D5C: aot_gpr_31 = (0x08A90D64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A90D64u) goto L_08A90D64; AOT_REGCACHE_SYNC_OUT(); return; L_08A90D64: @@ -2464,7 +2412,6 @@ L_08A90DB8: aot_gpr_4 = (20224u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(32), aot_gpr_5); if (branch_taken) { @@ -2551,7 +2498,6 @@ L_08A90E7C: L_08A90EC0: aot_gpr_4 = (ctx.gpr[2] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A90ED4; } @@ -2572,7 +2518,6 @@ L_08A90ED4: L_08A90EDC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A90F0C; } @@ -2622,7 +2567,6 @@ L_08A90F4C: ctx.gpr[22] = (ctx.gpr[22] + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(28))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A90FB4; } @@ -2639,9 +2583,7 @@ L_08A90F68: { const float fs = aot_fpr_14; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A90FB4; } @@ -2663,7 +2605,6 @@ L_08A90FB4: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A90F4C; } @@ -2692,14 +2633,23 @@ L_08A90FCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9100C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10088))); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A91128; } @@ -2710,9 +2660,7 @@ L_08A9105C: ctx.fpr[22] = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91128; } @@ -2779,7 +2727,6 @@ L_08A9109C: } L_08A91128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9195C; } @@ -2824,7 +2771,6 @@ L_08A91170: aot_gpr_17 = (static_cast(static_cast(aot_gpr_17) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A918E0; } @@ -2899,7 +2845,6 @@ L_08A91208: } L_08A91234: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A912C4; } @@ -2928,7 +2873,6 @@ L_08A91258: L_08A9126C: aot_fpr_15 = aot_fpr_15 / ctx.fpr[17]; { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A91280; } @@ -2947,7 +2891,6 @@ L_08A91280: goto L_08A91284; L_08A91284: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A91290; } @@ -2961,7 +2904,6 @@ L_08A91290: aot_fpr_15 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[17]; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = ctx.fpr[17] - ctx.fpr[24]; goto L_08A912B8; @@ -2986,9 +2928,7 @@ L_08A912C4: aot_gpr_6 = (16824u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A918C4; } @@ -3003,7 +2943,6 @@ L_08A912E0: aot_gpr_6 = (16800u << 16u); ctx.fpr[19] = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 + ctx.gpr[21]); if (branch_taken) { @@ -3035,7 +2974,6 @@ L_08A9132C: ctx.fpr[16] = ctx.fpr[16] / ctx.fpr[0]; ctx.fpr[16] = ctx.fpr[17] - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = ctx.fpr[16] - ctx.fpr[24]; goto L_08A91360; @@ -3459,7 +3397,6 @@ L_08A91884: ctx.gpr[8] = (static_cast(static_cast(ctx.gpr[8]) >> 16u)); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < 6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08A91884; } @@ -3476,7 +3413,6 @@ L_08A918C4: aot_gpr_17 = (static_cast(static_cast(aot_gpr_17) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A911A0; } @@ -3485,7 +3421,6 @@ L_08A918C4: L_08A918E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A91920; } @@ -3501,7 +3436,6 @@ L_08A918EC: AOT_REGCACHE_SYNC_OUT(); return; L_08A91900: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A91920; } @@ -3516,7 +3450,6 @@ L_08A91908: AOT_REGCACHE_SYNC_OUT(); return; L_08A91918: aot_gpr_31 = (0x08A91920u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A91920u) goto L_08A91920; AOT_REGCACHE_SYNC_OUT(); return; L_08A91920: @@ -3574,7 +3507,17 @@ L_08A9195C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A919A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -3605,7 +3548,6 @@ L_08A91A0C: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A91A44; @@ -3613,9 +3555,7 @@ L_08A91A0C: goto L_08A91A44; L_08A91A44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DD0; } @@ -3626,7 +3566,6 @@ L_08A91A54: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A91A70; @@ -3634,9 +3573,7 @@ L_08A91A54: goto L_08A91A70; L_08A91A70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DD0; } @@ -3668,7 +3605,6 @@ L_08A91AA4: goto L_08A91AA8; L_08A91AA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } goto L_08A91AE4; @@ -3676,7 +3612,6 @@ L_08A91AA8: goto L_08A91AB8; L_08A91AB8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A91AD0; @@ -3692,9 +3627,7 @@ L_08A91AC8: } L_08A91AD0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DD0; } @@ -3708,7 +3641,6 @@ L_08A91AE4: ctx.fpr[22] = aot_fpr_14 + ctx.fpr[17]; ctx.fpr[22] = std::sqrt(ctx.fpr[22]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (aot_gpr_17 + static_cast(16)); if (branch_taken) { @@ -3724,7 +3656,6 @@ L_08A91B00: aot_gpr_4 = (2280u << 16u); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(-19048)); if (branch_taken) { @@ -3825,9 +3756,7 @@ L_08A91C08: L_08A91C38: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91C60; } @@ -3836,7 +3765,6 @@ L_08A91C38: L_08A91C4C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(0))); goto L_08A91C94; @@ -3844,7 +3772,6 @@ L_08A91C4C: goto L_08A91C60; L_08A91C60: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08A91DC0; } @@ -3853,9 +3780,7 @@ L_08A91C60: L_08A91C68: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DC0; } @@ -3864,9 +3789,7 @@ L_08A91C68: L_08A91C7C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DC0; } @@ -3882,7 +3805,6 @@ L_08A91C94: ctx.fpr[16] = std::bit_cast(0u); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08A91CB8; @@ -3891,9 +3813,7 @@ L_08A91C94: L_08A91CB8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DC0; } @@ -3901,9 +3821,7 @@ L_08A91CB8: } L_08A91CCC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91CE4; } @@ -3925,9 +3843,7 @@ L_08A91CE8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A91DC0; } @@ -3938,7 +3854,6 @@ L_08A91D04: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(28), static_cast(ctx.gpr[19])); if (branch_taken) { @@ -4034,7 +3949,17 @@ L_08A91DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4065,12 +3990,21 @@ L_08A91E3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91E70: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (aot_gpr_4 < static_cast(35) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A91EC8; } @@ -4082,11 +4016,20 @@ L_08A91E80: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(9136))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91E98: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 0u); @@ -4140,11 +4083,20 @@ L_08A91EC8: goto L_08A91ECC; L_08A91ECC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91ED4: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_6 = (16256u << 16u); @@ -4162,11 +4114,20 @@ L_08A91EE8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(9280))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91F00: aot_gpr_4 = (16025u << 16u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7888))); @@ -4207,11 +4168,20 @@ L_08A91F38: } L_08A91F50: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91F58: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (0u | 33u); @@ -4232,7 +4202,6 @@ L_08A91F68: } L_08A91F70: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A91F80; } @@ -4251,11 +4220,20 @@ L_08A91F80: goto L_08A91F84; L_08A91F84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91F8C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -4297,11 +4275,20 @@ L_08A91F8C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A91FD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4328,7 +4315,6 @@ L_08A91FF8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -4342,9 +4328,7 @@ L_08A92028: goto L_08A92030; L_08A92030: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92048; } @@ -4356,9 +4340,7 @@ L_08A92040: goto L_08A92048; L_08A92048: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92060; } @@ -4394,7 +4376,17 @@ L_08A92088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A920A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4421,7 +4413,6 @@ L_08A920C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -4435,9 +4426,7 @@ L_08A920F8: goto L_08A92100; L_08A92100: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92118; } @@ -4449,9 +4438,7 @@ L_08A92110: goto L_08A92118; L_08A92118: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92130; } @@ -4487,7 +4474,17 @@ L_08A92158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92170: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4514,7 +4511,6 @@ L_08A92198: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -4528,9 +4524,7 @@ L_08A921C8: goto L_08A921D0; L_08A921D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A921E8; } @@ -4542,9 +4536,7 @@ L_08A921E0: goto L_08A921E8; L_08A921E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92200; } @@ -4580,7 +4572,17 @@ L_08A92228: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92240: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4607,7 +4609,6 @@ L_08A92268: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -4621,9 +4622,7 @@ L_08A92298: goto L_08A922A0; L_08A922A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A922B8; } @@ -4635,9 +4634,7 @@ L_08A922B0: goto L_08A922B8; L_08A922B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A922D0; } @@ -4673,7 +4670,17 @@ L_08A922F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92310: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[16]); @@ -4697,7 +4704,6 @@ L_08A9234C: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -4709,9 +4715,7 @@ L_08A9236C: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92394; } @@ -4826,7 +4830,17 @@ L_08A9245C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9247C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[16]); @@ -4850,7 +4864,6 @@ L_08A924B8: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -4862,9 +4875,7 @@ L_08A924D8: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92500; } @@ -4940,7 +4951,17 @@ L_08A92580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A925A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4984,7 +5005,17 @@ L_08A925F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9260C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[16]); @@ -5008,7 +5039,6 @@ L_08A92648: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -5020,9 +5050,7 @@ L_08A92668: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92690; } @@ -5108,7 +5136,17 @@ L_08A9272C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9274C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5135,7 +5173,6 @@ L_08A92774: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_15 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -5149,9 +5186,7 @@ L_08A927A4: goto L_08A927AC; L_08A927AC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A927C4; } @@ -5163,9 +5198,7 @@ L_08A927BC: goto L_08A927C4; L_08A927C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A927DC; } @@ -5200,7 +5233,17 @@ L_08A92800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92818: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[16]); @@ -5243,7 +5286,6 @@ L_08A9289C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A928EC; } @@ -5339,7 +5381,17 @@ L_08A92964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92988: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[16]); @@ -5363,7 +5415,6 @@ L_08A929C4: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -5375,9 +5426,7 @@ L_08A929E4: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92A0C; } @@ -5455,7 +5504,17 @@ L_08A92A90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92AB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[16]); @@ -5481,7 +5540,6 @@ L_08A92AF0: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); if (branch_taken) { @@ -5493,9 +5551,7 @@ L_08A92B10: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92B38; } @@ -5581,7 +5637,17 @@ L_08A92BC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[16]); @@ -5605,7 +5671,6 @@ L_08A92C2C: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); if (branch_taken) { @@ -5617,9 +5682,7 @@ L_08A92C4C: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A92C74; } @@ -5695,7 +5758,17 @@ L_08A92CF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92D14: aot_gpr_6 = (2280u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(-18832)); @@ -5714,7 +5787,6 @@ L_08A92D28: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); ctx.gpr[7] = (static_cast(aot_gpr_5) < 800 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A92D28; } @@ -5726,17 +5798,25 @@ L_08A92D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A92D6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A92D6Cu) goto L_08A92D6C; AOT_REGCACHE_SYNC_OUT(); return; L_08A92D6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A92D84; } @@ -5744,7 +5824,6 @@ L_08A92D6C: } L_08A92D74: aot_gpr_31 = (0x08A92D7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A92D7Cu) goto L_08A92D7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A92D7C: @@ -5753,12 +5832,10 @@ L_08A92D7C: goto L_08A93058; L_08A92D84: aot_gpr_31 = (0x08A92D8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A92D8Cu) goto L_08A92D8C; AOT_REGCACHE_SYNC_OUT(); return; L_08A92D8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A92DA4; } @@ -5766,7 +5843,6 @@ L_08A92D8C: } L_08A92D94: aot_gpr_31 = (0x08A92D9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A92D9Cu) goto L_08A92D9C; AOT_REGCACHE_SYNC_OUT(); return; L_08A92D9C: @@ -5780,7 +5856,17 @@ L_08A92DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92DB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5805,7 +5891,6 @@ L_08A92DDC: goto L_08A92DE8; L_08A92DE8: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A92E00; } @@ -5849,7 +5934,6 @@ L_08A92E24: goto L_08A92E28; L_08A92E28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A92E38; } @@ -5857,7 +5941,6 @@ L_08A92E28: } L_08A92E30: aot_gpr_31 = (0x08A92E38u); - // nop goto L_08A930F8; L_08A92E38: aot_gpr_4 = (ctx.gpr[18] | 0u); @@ -5889,7 +5972,6 @@ L_08A92E60: goto L_08A92E70; L_08A92E70: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08A92E88; } @@ -5933,7 +6015,6 @@ L_08A92EAC: goto L_08A92EB0; L_08A92EB0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A92EC0; } @@ -5941,7 +6022,6 @@ L_08A92EB0: } L_08A92EB8: aot_gpr_31 = (0x08A92EC0u); - // nop goto L_08A930F8; L_08A92EC0: aot_gpr_4 = (ctx.gpr[18] | 0u); @@ -5973,7 +6053,6 @@ L_08A92EE8: goto L_08A92EF8; L_08A92EF8: { const bool branch_taken = static_cast(aot_gpr_17) < 0; - // nop if (branch_taken) { goto L_08A92F10; } @@ -6017,7 +6096,6 @@ L_08A92F34: goto L_08A92F38; L_08A92F38: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A92F48; } @@ -6025,7 +6103,6 @@ L_08A92F38: } L_08A92F40: aot_gpr_31 = (0x08A92F48u); - // nop goto L_08A930F8; L_08A92F48: aot_gpr_4 = (aot_gpr_17 | 0u); @@ -6052,7 +6129,17 @@ L_08A92F5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A92F78: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_6 = (aot_gpr_6 & 14u); @@ -6060,7 +6147,6 @@ L_08A92F78: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A92FA8; } @@ -6069,7 +6155,6 @@ L_08A92F78: L_08A92F94: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A92FB0; } @@ -6077,7 +6162,6 @@ L_08A92F94: } L_08A92FA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A92FD8; } @@ -6085,7 +6169,6 @@ L_08A92FA0: } L_08A92FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A92FFC; } @@ -6094,7 +6177,6 @@ L_08A92FA8: L_08A92FB0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A92FD0; } @@ -6103,7 +6185,6 @@ L_08A92FB0: L_08A92FBC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A92FB0; } @@ -6111,7 +6192,6 @@ L_08A92FBC: } L_08A92FC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A92FD8; } @@ -6119,7 +6199,6 @@ L_08A92FC8: } L_08A92FD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A92FFC; } @@ -6128,7 +6207,6 @@ L_08A92FD0: L_08A92FD8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10092))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A92FFC; } @@ -6144,15 +6222,23 @@ L_08A92FE4: goto L_08A92FFC; L_08A92FFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93004: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A93050; } @@ -6179,7 +6265,6 @@ L_08A93024: aot_gpr_4 = (aot_gpr_6 | 0u); aot_gpr_6 = (ctx.gpr[7] | 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A93018; } @@ -6187,7 +6272,6 @@ L_08A93024: } L_08A93034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93050; } @@ -6206,11 +6290,20 @@ L_08A9303C: } L_08A93050: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93058: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 14u); @@ -6218,7 +6311,6 @@ L_08A93058: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A9308C; } @@ -6228,7 +6320,6 @@ L_08A93074: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); aot_gpr_6 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A93094; } @@ -6236,7 +6327,6 @@ L_08A93074: } L_08A93084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A930B8; } @@ -6244,7 +6334,6 @@ L_08A93084: } L_08A9308C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A930F0; } @@ -6254,7 +6343,6 @@ L_08A93094: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A930A8; } @@ -6266,7 +6354,6 @@ L_08A930A4: L_08A930A8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A93094; } @@ -6277,7 +6364,6 @@ L_08A930B4: goto L_08A930B8; L_08A930B8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A930F0; } @@ -6297,7 +6383,6 @@ L_08A930D0: ctx.gpr[7] = (aot_gpr_6 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A930D0; } @@ -6311,11 +6396,20 @@ L_08A930E0: goto L_08A930F0; L_08A930F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A930F8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -6353,7 +6447,6 @@ L_08A9312C: goto L_08A93134; L_08A93134: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A93104; } @@ -6361,16 +6454,24 @@ L_08A93134: } L_08A9313C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93144: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (0u | 0u); if (branch_taken) { @@ -6382,9 +6483,7 @@ L_08A9315C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A93190; } @@ -6394,9 +6493,7 @@ L_08A93174: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A93190; } @@ -6411,12 +6508,21 @@ L_08A93190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93198: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A931A8u); - // nop goto L_08A93144; L_08A931A8: ctx.gpr[2] = (ctx.gpr[2] < static_cast(1) ? 1u : 0u); @@ -6426,7 +6532,17 @@ L_08A931A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A931B8: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6456,7 +6572,17 @@ L_08A931B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A931D0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6486,7 +6612,17 @@ L_08A931D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A931E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (16256u << 16u); @@ -6523,7 +6659,17 @@ L_08A93218: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9325C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -6573,7 +6719,6 @@ L_08A932A0: L_08A932BC: ctx.gpr[7] = (static_cast(aot_gpr_6) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A93304; } @@ -6613,7 +6758,6 @@ L_08A93304: goto L_08A931E8; L_08A93310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93358; } @@ -6650,12 +6794,21 @@ L_08A93358: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93364: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A933B4; } @@ -6668,9 +6821,7 @@ L_08A93374: aot_fpr_14 = std::bit_cast(ctx.gpr[2]); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A933B4; } @@ -6687,7 +6838,6 @@ L_08A93398: L_08A933A0: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 24u)); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A933B4; } @@ -6695,7 +6845,6 @@ L_08A933A0: } L_08A933AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A933B8; } @@ -6706,11 +6855,20 @@ L_08A933B4: goto L_08A933B8; L_08A933B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A933C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -6740,7 +6898,6 @@ L_08A933F0: goto L_08A933FC; L_08A933FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93420; } @@ -6757,7 +6914,6 @@ L_08A93404: L_08A9340C: aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A93420; } @@ -6822,7 +6978,17 @@ L_08A93470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93488: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -6872,7 +7038,6 @@ L_08A934D4: } L_08A934EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93534; } @@ -6906,7 +7071,6 @@ L_08A93534: aot_gpr_5 = (ctx.gpr[2] << (aot_gpr_5 & 31u)); aot_gpr_6 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A93580; } @@ -6977,7 +7141,17 @@ L_08A935D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A935E4: ctx.gpr[12] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -7008,7 +7182,6 @@ L_08A9361C: ctx.gpr[14] = (ctx.gpr[8] << (ctx.gpr[14] & 31u)); ctx.gpr[13] = (static_cast(ctx.gpr[2]) < static_cast(ctx.gpr[14]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[13] != 0u; - // nop if (branch_taken) { goto L_08A9365C; } @@ -7017,7 +7190,6 @@ L_08A9361C: L_08A9362C: ctx.gpr[13] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); { const bool branch_taken = static_cast(ctx.gpr[13]) <= 0; - // nop if (branch_taken) { goto L_08A93650; } @@ -7062,7 +7234,17 @@ L_08A93674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9367C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18]}; @@ -7086,7 +7268,6 @@ L_08A936C8: ctx.gpr[9] = (ctx.gpr[20] << (aot_gpr_4 & 31u)); ctx.gpr[10] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08A936F0; } @@ -7096,7 +7277,6 @@ L_08A936D8: ctx.gpr[9] = (aot_gpr_6 | 0u); ctx.gpr[10] = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08A936F0; } @@ -7104,7 +7284,6 @@ L_08A936D8: } L_08A936E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93744; } @@ -7127,7 +7306,6 @@ L_08A936FC: L_08A93708: ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08A93724; } @@ -7161,7 +7339,6 @@ L_08A93734: } L_08A93744: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A93760; } @@ -7200,7 +7377,6 @@ L_08A93784: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[22]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A937DC; } @@ -7208,12 +7384,10 @@ L_08A93784: } L_08A93798: aot_gpr_31 = (0x08A937A0u); - // nop goto L_08A93364; L_08A937A0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08A937D8; } @@ -7273,7 +7447,17 @@ L_08A93804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9382C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); @@ -7321,7 +7505,17 @@ L_08A9388C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9389C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (0u | 1u); @@ -7354,7 +7548,6 @@ L_08A938CC: goto L_08A938DC; L_08A938DC: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A938F4; } @@ -7432,7 +7625,17 @@ L_08A93970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93998: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[19]); @@ -7461,7 +7664,6 @@ L_08A93998: } L_08A939EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93A38; } @@ -7491,7 +7693,6 @@ L_08A939F4: L_08A93A38: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A93A54; } @@ -7512,7 +7713,6 @@ L_08A93A54: L_08A93A64: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A93AF8; } @@ -7600,7 +7800,6 @@ L_08A93B10: aot_gpr_4 = (ctx.gpr[19] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A93B50; } @@ -7634,7 +7833,6 @@ L_08A93B50: } L_08A93B5C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08A93B80; } @@ -7669,7 +7867,17 @@ L_08A93B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93BB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -7709,7 +7917,17 @@ L_08A93BFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93C14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7770,13 +7988,22 @@ L_08A93CA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93CC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(7))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A93D04; } @@ -7825,7 +8052,17 @@ L_08A93D38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93D44: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7873,7 +8110,6 @@ L_08A93DA8: aot_gpr_4 = (aot_gpr_6 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08A93DA8; } @@ -7925,7 +8161,6 @@ L_08A93E04: goto L_08A93E28; L_08A93E28: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A93E44; } @@ -7934,7 +8169,6 @@ L_08A93E28: L_08A93E30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A93E4C; } @@ -7942,7 +8176,6 @@ L_08A93E30: } L_08A93E3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93E5C; } @@ -7950,7 +8183,6 @@ L_08A93E3C: } L_08A93E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A93E84; } @@ -7997,7 +8229,17 @@ L_08A93E84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93EA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -8036,7 +8278,6 @@ L_08A93ED8: AOT_REGCACHE_SYNC_OUT(); return; L_08A93EE4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A93F00; } @@ -8045,7 +8286,6 @@ L_08A93EE4: L_08A93EEC: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08A93ED8; } @@ -8079,7 +8319,17 @@ L_08A93F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93F1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -8097,7 +8347,6 @@ L_08A93F38: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(28))); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A93F5C; } @@ -8128,7 +8377,6 @@ L_08A93F74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A93F98; } @@ -8137,9 +8385,7 @@ L_08A93F74: L_08A93F84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A93FAC; } @@ -8148,7 +8394,6 @@ L_08A93F84: L_08A93F98: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A93F74; } @@ -8178,7 +8423,17 @@ L_08A93FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A93FC4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(7))); ctx.gpr[8] = (0u | 1u); @@ -8196,7 +8451,6 @@ L_08A93FC4: L_08A93FF4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 2u, 0x08A9400Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0164.cpp b/profiles/vcs/generated/generated_unit_0164.cpp index 9325abd..7ef80e8 100644 --- a/profiles/vcs/generated/generated_unit_0164.cpp +++ b/profiles/vcs/generated/generated_unit_0164.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0164[4088] = { - 1, 0, 0, 2, 0, 0, 3, 0, 4, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 0, 9, 0, 0, 10, 0, 0, 0, 11, - 0, 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 15, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 19, 0, 0, 20, 0, 0, 0, 21, 0, 22, 0, 23, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 33, - 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 48, 0, 0, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 52, 0, 53, 0, 0, 54, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, - 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, - 0, 79, 0, 80, 0, 81, 0, 0, 82, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, - 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, - 0, 0, 92, 0, 0, 0, 0, 0, 93, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 104, 0, 105, 0, 106, 0, 0, 0, - 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, 111, 0, 0, 112, 0, - 113, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 117, 0, 118, 0, 0, 0, 119, 0, 0, 120, 121, 0, 0, 0, - 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 127, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 130, 0, 131, 0, 132, 0, 0, 0, 0, 133, 0, 134, 0, 0, 0, - 0, 135, 136, 0, 0, 0, 137, 0, 0, 138, 0, 0, 0, 0, 139, 0, 140, 0, 0, 0, 141, 142, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, - 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 148, 0, 0, 0, 149, 0, 0, - 150, 0, 151, 0, 0, 152, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 157, - 0, 158, 159, 0, 0, 0, 160, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 165, 0, 0, 166, 0, - 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 170, 171, 0, 0, 172, 0, 0, 173, 0, 174, 0, 175, 0, 0, 0, 0, 176, 0, 177, - 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 181, 0, 0, 182, 0, 183, 0, 184, 0, - 185, 0, 186, 0, 187, 0, 188, 189, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, - 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, - 202, 0, 0, 0, 203, 0, 204, 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 209, 0, 0, 0, - 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, - 0, 219, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 223, 0, 0, - 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, - 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 239, 0, 0, 240, 0, 241, - 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 247, 0, - 0, 248, 0, 249, 0, 250, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 256, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 258, 0, 0, 259, 260, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 262, 0, 0, - 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 273, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 281, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 283, 0, 0, 284, 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, 312, 0, - 0, 0, 313, 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, 320, - 0, 0, 0, 321, 0, 0, 0, 322, 0, 323, 324, 0, 0, 0, 0, 0, 325, 326, 0, 0, 0, 0, 327, 0, 0, 0, 0, 328, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 331, 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, - 0, 341, 0, 342, 343, 0, 0, 344, 0, 345, 0, 346, 0, 347, 348, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 0, 361, 0, 0, 0, 362, 0, 363, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, 0, 0, 0, 369, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, - 379, 0, 0, 0, 380, 0, 381, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 386, 387, 0, 0, 0, 0, 0, 388, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 399, 0, 400, 0, 401, 0, 0, 402, 0, 0, 403, - 0, 0, 404, 0, 405, 0, 0, 406, 0, 0, 407, 0, 0, 408, 0, 409, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, - 0, 0, 0, 413, 0, 0, 414, 0, 0, 415, 0, 0, 416, 0, 417, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, 421, 0, 0, 0, - 422, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 425, 0, 0, 426, 0, 0, 427, 0, 428, - 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, - 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 438, 0, 0, 0, - 0, 439, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, - 448, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, - 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 0, 470, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 0, 0, 473, 0, - 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 478, 0, - 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 484, 0, 0, 0, 485, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, - 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, - 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 497, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 0, 0, - 0, 500, 501, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 504, 505, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, - 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 0, 0, 512, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 518, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 520, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 523, 0, - 524, 0, 525, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 530, - 531, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 0, 535, 0, 536, 0, 537, 0, 0, 0, 0, 0, 538, 539, 0, - 0, 0, 540, 0, 0, 0, 0, 0, 541, 542, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 545, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 0, - 548, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 552, 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 555, 0, 556, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 562, 0, 563, 0, 0, 564, 0, 565, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 0, 571, 0, 572, - 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 582, - 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 0, 591, 0, 592, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, - 0, 0, 595, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 599, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0164[64] = { + 0x0024520289480B49ull, 0xA014801044425449ull, 0x0002002010010020ull, 0x0008000400040004ull, + 0x002CAA2120280220ull, 0x0014108000A14108ull, 0x2000080040020810ull, 0x42000B2A21202802ull, + 0x0400050420002850ull, 0x1588810200100082ull, 0x1914402949104002ull, 0x142A42400020A808ull, + 0x2250100102314246ull, 0x49202146808110A5ull, 0x54902100A1526902ull, 0x440110C1451010D5ull, + 0x1041004810843051ull, 0x2082008208020840ull, 0x4020840104040110ull, 0x60041120A5044052ull, + 0x220641018044502Aull, 0x0000008000020001ull, 0xA012004000005040ull, 0x0024000000000000ull, + 0x0000000000000000ull, 0x4492000200000000ull, 0x0009248000000000ull, 0x0009100000000000ull, + 0x00000000100A0000ull, 0x0008002000100000ull, 0x2000000100000000ull, 0x8001000000080000ull, + 0x44444A8020820100ull, 0x0843068888888884ull, 0x0004000A00028940ull, 0x0000000002800000ull, + 0x02A06A9A40040000ull, 0x0000900000050200ull, 0x0114540000400010ull, 0x08A0000000000401ull, + 0x1110040022015000ull, 0x00A4000083444851ull, 0x92A9250002000400ull, 0x112452485004A494ull, + 0x40000040A4C00011ull, 0x1080001020220410ull, 0x0021400400800042ull, 0x1020204104000004ull, + 0x0400800042108000ull, 0x1085049204002140ull, 0x5400800140900000ull, 0x08D0000000002044ull, + 0x9000000000000040ull, 0x2000000000000050ull, 0x120A800000004042ull, 0x4200808030100106ull, + 0x0121054000506108ull, 0x0020000D48000000ull, 0x60A90809A0000080ull, 0x0080000901582304ull, + 0x0280250500124800ull, 0x0000400AA550094Aull, 0x0109110080400554ull, 0x0084028402AA0024ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0164[64] = { + 1u, 18u, 34u, 39u, 43u, 57u, 67u, 73u, 87u, 96u, 107u, 122u, 135u, 150u, 167u, 185u, + 202u, 215u, 224u, 233u, 248u, 263u, 266u, 274u, 276u, 276u, 282u, 287u, 290u, 293u, 296u, 298u, + 301u, 313u, 329u, 337u, 339u, 352u, 357u, 365u, 370u, 379u, 392u, 404u, 422u, 431u, 439u, 446u, + 453u, 459u, 471u, 479u, 486u, 489u, 492u, 500u, 510u, 522u, 528u, 540u, 551u, 562u, 576u, 588u, }; void recomp_unit_0164_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0164_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A94000u; - entry_id = (entry_delta < 16352u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0164[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16352u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0164[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0164[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A94000; @@ -773,7 +680,6 @@ LOCAL_DISPATCH: L_08A94000: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A94020; } @@ -782,7 +688,6 @@ L_08A94000: L_08A9400C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 641u, 0x08A93FF4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -801,11 +706,20 @@ L_08A94020: goto L_08A94024; L_08A94024: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9402C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -823,7 +737,6 @@ L_08A9402C: L_08A9404C: aot_gpr_6 = (static_cast(aot_gpr_6) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A940B8; } @@ -840,7 +753,6 @@ L_08A94058: L_08A94060: aot_gpr_6 = (static_cast(aot_gpr_6) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A940B8; } @@ -855,7 +767,6 @@ L_08A9406C: AOT_REGCACHE_SYNC_OUT(); return; L_08A9407C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A940C8; } @@ -867,9 +778,7 @@ L_08A94084: aot_fpr_14 = std::bit_cast(aot_gpr_6); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A940B8; } @@ -883,7 +792,6 @@ L_08A940A4: AOT_REGCACHE_SYNC_OUT(); return; L_08A940B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A940C8; } @@ -903,7 +811,17 @@ L_08A940C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A940D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -929,7 +847,6 @@ L_08A94100: L_08A9410C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A94138; } @@ -944,7 +861,6 @@ L_08A94118: AOT_REGCACHE_SYNC_OUT(); return; L_08A94128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94168; } @@ -952,7 +868,6 @@ L_08A94128: } L_08A94130: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94178; } @@ -961,7 +876,6 @@ L_08A94130: L_08A94138: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A94168; } @@ -970,9 +884,7 @@ L_08A94138: L_08A94144: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A94168; } @@ -1005,7 +917,17 @@ L_08A94178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94190: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -1023,7 +945,6 @@ L_08A94190: L_08A941BC: aot_gpr_4 = (ctx.gpr[28] + static_cast(-24464)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A941D0; } @@ -1031,7 +952,6 @@ L_08A941BC: } L_08A941C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A941FC; } @@ -1051,7 +971,6 @@ L_08A941D0: AOT_REGCACHE_SYNC_OUT(); return; L_08A941F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A941FC; } @@ -1070,7 +989,17 @@ L_08A941FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94214: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(0u); @@ -1107,7 +1036,6 @@ L_08A94240: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[8] = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A94240; } @@ -1147,7 +1075,6 @@ L_08A94294: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[8] = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08A94294; } @@ -1184,7 +1111,17 @@ L_08A942C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94308: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(10096))); aot_gpr_5 = (aot_gpr_5 << 4u); @@ -1216,7 +1153,17 @@ L_08A94308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94348: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(10098))); aot_gpr_5 = (aot_gpr_5 << 4u); @@ -1248,7 +1195,17 @@ L_08A94348: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94388: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -1290,11 +1247,20 @@ L_08A94388: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A943CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), ctx.gpr[21]); @@ -1342,7 +1308,6 @@ L_08A94424: } L_08A9444C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94538; } @@ -1367,7 +1332,6 @@ L_08A94454: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(0), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10100), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94678; } @@ -1398,7 +1362,6 @@ L_08A94494: } L_08A944A4: { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A944B4; } @@ -1406,7 +1369,6 @@ L_08A944A4: } L_08A944AC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08A944CC; } @@ -1423,7 +1385,6 @@ L_08A944B4: L_08A944BC: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9189))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A944CC; } @@ -1434,7 +1395,6 @@ L_08A944C8: goto L_08A944CC; L_08A944CC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A94520; } @@ -1490,9 +1450,7 @@ L_08A944D4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A94520; } @@ -1519,7 +1477,6 @@ L_08A94520: aot_gpr_16 = (aot_gpr_16 & 65535u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A94480; } @@ -1527,7 +1484,6 @@ L_08A94520: } L_08A94538: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A945C8; } @@ -1600,9 +1556,7 @@ L_08A9455C: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A945B0; } @@ -1629,7 +1583,6 @@ L_08A945B0: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A9455C; } @@ -1637,7 +1590,6 @@ L_08A945B0: } L_08A945C8: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A94644; } @@ -1699,7 +1651,6 @@ L_08A9462C: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94678; } @@ -1751,7 +1702,17 @@ L_08A94678: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A946AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), ctx.gpr[20]); @@ -1799,7 +1760,6 @@ L_08A94704: } L_08A9472C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94810; } @@ -1824,7 +1784,6 @@ L_08A94734: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(0), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10100), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94950; } @@ -1855,7 +1814,6 @@ L_08A94774: } L_08A94784: { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A947A4; } @@ -1872,7 +1830,6 @@ L_08A9478C: L_08A94794: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(9190))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A947A4; } @@ -1883,7 +1840,6 @@ L_08A947A0: goto L_08A947A4; L_08A947A4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A947F8; } @@ -1939,9 +1895,7 @@ L_08A947AC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A947F8; } @@ -1968,7 +1922,6 @@ L_08A947F8: aot_gpr_16 = (aot_gpr_16 & 65535u); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A94760; } @@ -1976,7 +1929,6 @@ L_08A947F8: } L_08A94810: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A948A0; } @@ -2049,9 +2001,7 @@ L_08A94834: ctx.gpr[7] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A94888; } @@ -2078,7 +2028,6 @@ L_08A94888: aot_gpr_4 = (aot_gpr_4 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A94834; } @@ -2086,7 +2035,6 @@ L_08A94888: } L_08A948A0: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08A9491C; } @@ -2148,7 +2096,6 @@ L_08A94904: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(0), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94950; } @@ -2200,7 +2147,17 @@ L_08A94950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94984: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2223,7 +2180,17 @@ L_08A94984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A949A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2257,7 +2224,6 @@ L_08A949DC: goto L_08A949E0; L_08A949E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A949F0; } @@ -2280,7 +2246,17 @@ L_08A949F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94A04: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -2335,7 +2311,6 @@ L_08A94A78: L_08A94A80: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A94AD0; } @@ -2409,7 +2384,17 @@ L_08A94AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2444,7 +2429,17 @@ L_08A94B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } @@ -2475,7 +2470,6 @@ L_08A94BA4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); aot_gpr_6 = (aot_gpr_4 & ctx.gpr[20]); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A94C24; } @@ -2484,7 +2478,6 @@ L_08A94BA4: L_08A94BB8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A94BD4; } @@ -2517,7 +2510,6 @@ L_08A94BF0: aot_gpr_4 = (ctx.gpr[2] - aot_gpr_4); aot_gpr_5 = (static_cast(ctx.gpr[22]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A94C08; } @@ -2543,7 +2535,6 @@ L_08A94C24: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_5 = (aot_gpr_6 - aot_gpr_4); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A94C40; } @@ -2551,7 +2542,6 @@ L_08A94C24: } L_08A94C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A94C80; } @@ -2584,7 +2574,6 @@ L_08A94C64: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A94BA4; } @@ -2609,7 +2598,17 @@ L_08A94C80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94CB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -2635,7 +2634,6 @@ L_08A94CD0: L_08A94CD8: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A94CF4; } @@ -2654,7 +2652,6 @@ L_08A94CE4: L_08A94CF4: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A94D14; } @@ -2662,7 +2659,6 @@ L_08A94CF4: } L_08A94D00: aot_gpr_31 = (0x08A94D08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 262u, 0x08938FD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A94D08u) goto L_08A94D08; AOT_REGCACHE_SYNC_OUT(); return; L_08A94D08: @@ -2672,7 +2668,6 @@ L_08A94D08: goto L_08A94D14; L_08A94D14: aot_gpr_31 = (0x08A94D1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 262u, 0x08938FD8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A94D1Cu) goto L_08A94D1C; AOT_REGCACHE_SYNC_OUT(); return; L_08A94D1C: @@ -2708,7 +2703,17 @@ L_08A94D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2740,7 +2745,6 @@ L_08A94D88: AOT_REGCACHE_SYNC_OUT(); return; L_08A94D98: aot_gpr_31 = (0x08A94DA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 223u, 0x08941910u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A94DA0u) goto L_08A94DA0; AOT_REGCACHE_SYNC_OUT(); return; L_08A94DA0: @@ -2755,7 +2759,17 @@ L_08A94DA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94DB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -2787,7 +2801,6 @@ L_08A94DE0: L_08A94DEC: aot_gpr_5 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A94E04; } @@ -2810,7 +2823,6 @@ L_08A94E04: L_08A94E20: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08A94E34; } @@ -2830,7 +2842,6 @@ L_08A94E34: L_08A94E38: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A94E58; } @@ -2839,7 +2850,6 @@ L_08A94E38: L_08A94E44: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A94E74; } @@ -2901,7 +2911,17 @@ L_08A94EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94EB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2918,7 +2938,6 @@ L_08A94EB4: L_08A94ED0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08A94EF8; } @@ -2927,7 +2946,6 @@ L_08A94ED0: L_08A94EDC: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A94F18; } @@ -2986,7 +3004,17 @@ L_08A94F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -3005,7 +3033,6 @@ L_08A94F50: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A94F80; } @@ -3039,7 +3066,6 @@ L_08A94F80: aot_gpr_5 = (aot_gpr_5 - aot_gpr_6); aot_gpr_6 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A94F9C; } @@ -3067,7 +3093,17 @@ L_08A94FB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A94FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3088,7 +3124,6 @@ L_08A94FE8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A95018; } @@ -3110,7 +3145,6 @@ L_08A95000: goto L_08A94B54; L_08A95010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9505C; } @@ -3122,7 +3156,6 @@ L_08A95018: aot_gpr_5 = (aot_gpr_5 - aot_gpr_6); aot_gpr_6 = (aot_gpr_5 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A95034; } @@ -3162,7 +3195,17 @@ L_08A9505C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95070: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (ctx.gpr[28] + static_cast(5824)); @@ -3180,7 +3223,17 @@ L_08A9508C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95098: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3216,7 +3269,17 @@ L_08A950D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A950F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3251,7 +3314,17 @@ L_08A9512C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95144: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3287,7 +3360,17 @@ L_08A95184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9519C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3323,7 +3406,17 @@ L_08A951DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A951F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (2236u << 16u); @@ -3342,7 +3435,17 @@ L_08A95210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95220: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3380,7 +3483,17 @@ L_08A95268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95280: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3415,7 +3528,17 @@ L_08A952BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A952D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3433,7 +3556,6 @@ L_08A952D4: L_08A952F8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A95310; } @@ -3474,7 +3596,17 @@ L_08A95338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -3494,7 +3626,6 @@ L_08A95360: L_08A95368: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08A9537C; } @@ -3502,7 +3633,6 @@ L_08A95368: } L_08A95374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A953A0; } @@ -3529,7 +3659,17 @@ L_08A953A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A953B0: { const std::uint32_t aot_run_words[3]{aot_gpr_5, aot_gpr_6, ctx.gpr[7]}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(8), aot_run_words); } @@ -3539,7 +3679,17 @@ L_08A953B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A953C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3562,7 +3712,6 @@ L_08A953F4: L_08A953F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A95438; } @@ -3574,7 +3723,6 @@ L_08A95404: goto L_08A952D4; L_08A9540C: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08A95430; } @@ -3649,7 +3797,17 @@ L_08A95480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A954A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -3665,7 +3823,6 @@ L_08A954A0: L_08A954B8: ctx.gpr[8] = (aot_gpr_6 < static_cast(32) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A954C8; } @@ -3697,7 +3854,17 @@ L_08A954F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95500: aot_gpr_5 = (2236u << 16u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(29552))); @@ -3719,7 +3886,17 @@ L_08A95500: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95544: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10160))); @@ -3767,7 +3944,6 @@ L_08A95544: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10172))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10172))); goto L_08A9559C; @@ -3808,7 +3984,17 @@ L_08A9559C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95618: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10148))); @@ -3821,7 +4007,6 @@ L_08A95618: goto L_08A95630; L_08A95630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A956C4; } @@ -3888,7 +4073,17 @@ L_08A956C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A956D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 & 255u); @@ -3906,7 +4101,6 @@ L_08A956D0: } L_08A956F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A957C8; } @@ -3972,7 +4166,17 @@ L_08A957C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A957D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (2236u << 16u); @@ -4129,7 +4333,17 @@ L_08A959E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A959F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2236u << 16u); @@ -4199,7 +4413,17 @@ L_08A95AC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95ACC: aot_gpr_5 = (14848u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(9)); @@ -4352,16 +4576,24 @@ L_08A95ACC: ctx.write_vfpu_matrix_ct<20u, 4u>(vfpu_d); ctx.eat_vfpu_prefixes(); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95BB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08A95BC0u); - // nop goto L_08A95ACC; L_08A95BC0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4370,7 +4602,17 @@ L_08A95BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95BCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[7] = (ctx.gpr[9] & 255u); @@ -4681,7 +4923,17 @@ L_08A95FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A95FFC: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4693,11 +4945,20 @@ L_08A95FFC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96020: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -4709,11 +4970,20 @@ L_08A96020: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96044: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4733,7 +5003,17 @@ L_08A9605C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4744,7 +5024,6 @@ L_08A96074: aot_gpr_16 = (aot_gpr_16 + static_cast(-3664)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_31 = (0x08A9609Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9609Cu) goto L_08A9609C; AOT_REGCACHE_SYNC_OUT(); return; L_08A9609C: @@ -4908,7 +5187,17 @@ L_08A961D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A961EC: ctx.gpr[13] = (ctx.gpr[10] | 0u); ctx.gpr[12] = (aot_gpr_4 & 255u); @@ -4924,7 +5213,6 @@ L_08A961EC: goto L_08A96218; L_08A96218: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A9623C; } @@ -4933,7 +5221,6 @@ L_08A96218: L_08A96220: ctx.gpr[13] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(54))); { const bool branch_taken = ctx.gpr[13] == 0u; - // nop if (branch_taken) { goto L_08A9623C; } @@ -4951,7 +5238,6 @@ L_08A9622C: } L_08A9623C: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08A96284; } @@ -4986,11 +5272,20 @@ L_08A96244: goto L_08A96284; L_08A96284: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9628C: ctx.gpr[12] = (ctx.gpr[11] | 0u); ctx.gpr[2] = (ctx.gpr[7] << 16u); @@ -5062,11 +5357,20 @@ L_08A962C8: goto L_08A9635C; L_08A9635C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96364: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5139,7 +5443,6 @@ L_08A96448: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A964AC; } @@ -5154,7 +5457,6 @@ L_08A96478: goto L_08A96484; L_08A96484: aot_gpr_31 = (0x08A9648Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9648Cu) goto L_08A9648C; AOT_REGCACHE_SYNC_OUT(); return; L_08A9648C: @@ -5163,7 +5465,6 @@ L_08A9648C: L_08A96490: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A964AC; } @@ -5171,12 +5472,10 @@ L_08A96490: } L_08A9649C: aot_gpr_31 = (0x08A964A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A964A4u) goto L_08A964A4; AOT_REGCACHE_SYNC_OUT(); return; L_08A964A4: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A964B4; } @@ -5198,9 +5497,7 @@ L_08A964B8: aot_gpr_5 = (aot_gpr_5 | 16384u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A964DC; } @@ -5208,7 +5505,6 @@ L_08A964B8: } L_08A964D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96610; } @@ -5216,7 +5512,6 @@ L_08A964D4: } L_08A964DC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A96524; } @@ -5236,9 +5531,7 @@ L_08A964E4: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) ^ 0x80000000u); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96610; } @@ -5249,9 +5542,7 @@ L_08A96524: aot_gpr_5 = (16802u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A965B0; } @@ -5347,7 +5638,17 @@ L_08A96610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96658: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -5377,7 +5678,6 @@ L_08A966A8: AOT_REGCACHE_SYNC_OUT(); return; L_08A966B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A966D0; } @@ -5395,7 +5695,6 @@ L_08A966B8: } L_08A966C8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A96700; } @@ -5405,7 +5704,6 @@ L_08A966D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11140)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96700; } @@ -5438,7 +5736,17 @@ L_08A96700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96728: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5480,7 +5788,6 @@ L_08A96728: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(152), std::bit_cast(aot_fpr_14)); ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[17])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(148), std::bit_cast(ctx.fpr[15])); if (branch_taken) { @@ -5490,14 +5797,12 @@ L_08A96728: } L_08A967D4: aot_gpr_31 = (0x08A967DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A967DCu) goto L_08A967DC; AOT_REGCACHE_SYNC_OUT(); return; L_08A967DC: ctx.gpr[18] = (ctx.gpr[2] ^ aot_gpr_16); ctx.gpr[18] = (ctx.gpr[18] < static_cast(1) ? 1u : 0u); { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08A96840; } @@ -5572,7 +5877,6 @@ L_08A96830: goto L_08A96838; L_08A96838: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96A28; } @@ -5585,7 +5889,6 @@ L_08A96840: { const float fs = aot_fpr_20; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5628,7 +5931,6 @@ L_08A968A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A96910; } @@ -5638,7 +5940,6 @@ L_08A968D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A96910; } @@ -5648,7 +5949,6 @@ L_08A968E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 52u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A96910; } @@ -5658,7 +5958,6 @@ L_08A968F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A96910; } @@ -5668,7 +5967,6 @@ L_08A96900: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 45u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A969DC; } @@ -5766,7 +6064,6 @@ L_08A9697C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A969DC; } @@ -5775,7 +6072,6 @@ L_08A9697C: L_08A969C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A969DC; } @@ -5829,7 +6125,17 @@ L_08A96A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96A64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5853,7 +6159,6 @@ L_08A96A64: } L_08A96AA0: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A96B3C; } @@ -5879,7 +6184,6 @@ L_08A96AC0: AOT_REGCACHE_SYNC_OUT(); return; L_08A96ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A96B3C; } @@ -5895,7 +6199,6 @@ L_08A96AD4: } L_08A96ADC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96B3C; } @@ -5921,7 +6224,6 @@ L_08A96AFC: AOT_REGCACHE_SYNC_OUT(); return; L_08A96B08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A96B3C; } @@ -5947,7 +6249,6 @@ L_08A96B28: AOT_REGCACHE_SYNC_OUT(); return; L_08A96B34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A96B3C; } @@ -5960,7 +6261,17 @@ L_08A96B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5968,7 +6279,6 @@ L_08A96B48: ctx.gpr[17] = (2280u << 16u); ctx.gpr[17] = (ctx.gpr[17] + static_cast(-9040)); aot_gpr_31 = (0x08A96B70u); - // nop goto L_08A957D4; L_08A96B70: aot_gpr_5 = (0u | 0u); @@ -5997,7 +6307,6 @@ L_08A96B8C: L_08A96B98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96C68; } @@ -6006,7 +6315,6 @@ L_08A96B98: L_08A96BA4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A96C68; } @@ -6026,7 +6334,6 @@ L_08A96BB8: L_08A96BC8: ctx.gpr[19] = (ctx.gpr[17] | 0u); { const bool branch_taken = ctx.gpr[19] == aot_gpr_16; - // nop if (branch_taken) { goto L_08A96C68; } @@ -6035,7 +6342,6 @@ L_08A96BC8: L_08A96BD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96C5C; } @@ -6045,7 +6351,6 @@ L_08A96BE0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(94))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(94))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A96C5C; } @@ -6055,7 +6360,6 @@ L_08A96BF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(88))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A96C5C; } @@ -6093,7 +6397,6 @@ L_08A96C58: L_08A96C5C: ctx.gpr[19] = (ctx.gpr[19] + static_cast(112)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_16; - // nop if (branch_taken) { goto L_08A96BD4; } @@ -6102,7 +6405,6 @@ L_08A96C5C: L_08A96C68: ctx.gpr[17] = (ctx.gpr[17] + static_cast(112)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_16; - // nop if (branch_taken) { goto L_08A96B98; } @@ -6110,7 +6412,6 @@ L_08A96C68: } L_08A96C74: aot_gpr_31 = (0x08A96C7Cu); - // nop goto L_08A959F8; L_08A96C7C: { std::uint32_t aot_run_words[5]{}; @@ -6126,7 +6427,17 @@ L_08A96C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96C98: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6165,7 +6476,6 @@ L_08A96D10: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(84))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6178,7 +6488,6 @@ L_08A96D28: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6200,9 +6509,7 @@ L_08A96D54: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6237,9 +6544,7 @@ L_08A96D90: ctx.fpr[30] = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6248,9 +6553,7 @@ L_08A96D90: L_08A96DDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6259,9 +6562,7 @@ L_08A96DDC: L_08A96DF0: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6270,9 +6571,7 @@ L_08A96DF0: L_08A96E04: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6293,9 +6592,7 @@ L_08A96E18: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fpr[15] = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6310,9 +6607,7 @@ L_08A96E5C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A96EB8; } @@ -6335,7 +6630,6 @@ L_08A96E88: AOT_REGCACHE_SYNC_OUT(); return; L_08A96EB8: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A96D10; } @@ -6367,7 +6661,17 @@ L_08A96ED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A96F08: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6406,7 +6710,6 @@ L_08A96F80: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(84))); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A97118; } @@ -6431,9 +6734,7 @@ L_08A96FB4: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6468,9 +6769,7 @@ L_08A96FF0: ctx.fpr[30] = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6479,9 +6778,7 @@ L_08A96FF0: L_08A9703C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6490,9 +6787,7 @@ L_08A9703C: L_08A97050: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6501,9 +6796,7 @@ L_08A97050: L_08A97064: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6524,9 +6817,7 @@ L_08A97078: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fpr[15] = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6541,9 +6832,7 @@ L_08A970BC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97118; } @@ -6566,7 +6855,6 @@ L_08A970E8: AOT_REGCACHE_SYNC_OUT(); return; L_08A97118: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08A96F80; } @@ -6598,7 +6886,17 @@ L_08A97134: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A97168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6610,7 +6908,6 @@ L_08A97168: L_08A97184: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A971C8; } @@ -6619,7 +6916,6 @@ L_08A97184: L_08A97190: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(98))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A971C8; } @@ -6628,7 +6924,6 @@ L_08A97190: L_08A9719C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(105))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A971C0; } @@ -6640,7 +6935,6 @@ L_08A971A8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A971C8; } @@ -6673,7 +6967,17 @@ L_08A971DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A971F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6696,7 +7000,6 @@ L_08A971F0: L_08A97250: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(54))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A973DC; } @@ -6709,7 +7012,6 @@ L_08A9725C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(44))); ctx.gpr[7] = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08A97280; } @@ -6762,7 +7064,6 @@ L_08A972BC: goto L_08A97518; L_08A972E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A973DC; } @@ -6846,7 +7147,6 @@ L_08A97334: goto L_08A97518; L_08A973D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A973DC; } @@ -6883,7 +7183,17 @@ L_08A973EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A97418: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); @@ -6942,7 +7252,17 @@ L_08A97418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A974F0: aot_gpr_4 = (2280u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(-3664)); @@ -6961,11 +7281,20 @@ L_08A974FC: } L_08A97510: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A97518: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7008,7 +7337,6 @@ L_08A97518: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[15])); aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[30] = std::bit_cast(std::bit_cast(ctx.fpr[17])); if (branch_taken) { @@ -7018,9 +7346,7 @@ L_08A97518: } L_08A975F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[18]) || std::isnan(aot_fpr_13)) && ctx.fpr[18] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97988; } @@ -7029,7 +7355,6 @@ L_08A975F4: L_08A97604: ctx.gpr[17] = (2280u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[18]) || std::isnan(aot_fpr_13)) && ctx.fpr[18] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (ctx.gpr[17] + static_cast(-9040)); if (branch_taken) { @@ -7043,9 +7368,7 @@ L_08A97618: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[18]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A976BC; } @@ -7104,7 +7427,6 @@ L_08A976CC: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08A976F0; } @@ -7137,7 +7459,6 @@ L_08A97708: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[7]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A97898; } @@ -7153,7 +7474,6 @@ L_08A97720: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); goto L_08A97774; @@ -7165,9 +7485,7 @@ L_08A97750: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97858; } @@ -7184,7 +7502,6 @@ L_08A97774: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[9]); goto L_08A97838; @@ -7196,7 +7513,6 @@ L_08A9779C: aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[9]); goto L_08A97838; @@ -7210,7 +7526,6 @@ L_08A977BC: aot_gpr_5 = (16384u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[9]); goto L_08A97838; @@ -7219,7 +7534,6 @@ L_08A977BC: L_08A977E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(aot_fpr_12)) && ctx.fpr[28] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[9]); goto L_08A97838; @@ -7228,7 +7542,6 @@ L_08A977E4: L_08A977F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_12)) && ctx.fpr[26] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[9]); goto L_08A97838; @@ -7237,7 +7550,6 @@ L_08A977F8: L_08A9780C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[9]); goto L_08A97838; @@ -7246,9 +7558,7 @@ L_08A9780C: L_08A97820: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97858; } @@ -7263,11 +7573,9 @@ L_08A97838: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[7]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_6); aot_gpr_31 = (0x08A97850u); - // nop goto L_08A96044; L_08A97850: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A978E0; } @@ -7313,7 +7621,6 @@ L_08A978A8: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A978D4; } @@ -7333,7 +7640,6 @@ L_08A978C0: L_08A978D4: aot_gpr_4 = (0u | 48u); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A97980; } @@ -7389,7 +7695,6 @@ L_08A978E0: L_08A9796C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A97988; } @@ -7439,7 +7744,17 @@ L_08A9798C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A979D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7505,7 +7820,6 @@ L_08A97A1C: goto L_08A97A74; L_08A97A74: aot_gpr_31 = (0x08A97A7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A97A7Cu) goto L_08A97A7C; AOT_REGCACHE_SYNC_OUT(); return; L_08A97A7C: @@ -7514,7 +7828,6 @@ L_08A97A7C: L_08A97A80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A97AAC; } @@ -7542,7 +7855,6 @@ L_08A97AAC: L_08A97AC0: aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A97B34; } @@ -7550,7 +7862,6 @@ L_08A97AC0: } L_08A97ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97B08; } @@ -7558,7 +7869,6 @@ L_08A97ACC: } L_08A97AD4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A97B34; } @@ -7568,9 +7878,7 @@ L_08A97ADC: aot_gpr_5 = (18082u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97AF8; } @@ -7583,7 +7891,6 @@ L_08A97AF8: aot_gpr_5 = (17168u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97B58; } @@ -7593,9 +7900,7 @@ L_08A97B08: aot_gpr_5 = (18082u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97B24; } @@ -7608,7 +7913,6 @@ L_08A97B24: aot_gpr_5 = (17168u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97B58; } @@ -7618,9 +7922,7 @@ L_08A97B34: aot_gpr_5 = (17314u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97B50; } @@ -7635,7 +7937,6 @@ L_08A97B50: goto L_08A97B58; L_08A97B58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 34u, 0x08A98300u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7647,9 +7948,7 @@ L_08A97B60: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97B8C; } @@ -7733,7 +8032,6 @@ L_08A97C38: L_08A97C44: aot_gpr_5 = (static_cast(ctx.gpr[20]) < -996 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7751,7 +8049,6 @@ L_08A97C50: ctx.fpr[15] = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7771,11 +8068,20 @@ L_08A97C88: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(9528))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A97CA0: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_5 = (0u | 205u); @@ -7787,7 +8093,6 @@ L_08A97CA0: L_08A97CA8: aot_gpr_5 = (static_cast(ctx.gpr[20]) < -950 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7803,7 +8108,6 @@ L_08A97CB4: aot_fpr_14 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[22]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7811,7 +8115,6 @@ L_08A97CB4: } L_08A97CDC: { const bool branch_taken = ctx.gpr[20] != aot_gpr_5; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7825,7 +8128,6 @@ L_08A97CE4: aot_gpr_5 = (aot_gpr_5 | 49807u); aot_fpr_12 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7859,7 +8161,6 @@ L_08A97D18: L_08A97D20: aot_gpr_5 = (static_cast(ctx.gpr[20]) < 213 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7874,7 +8175,6 @@ L_08A97D2C: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7882,7 +8182,6 @@ L_08A97D2C: } L_08A97D50: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A97D2C; } @@ -7890,7 +8189,6 @@ L_08A97D50: } L_08A97D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7907,7 +8205,6 @@ L_08A97D60: L_08A97D68: aot_gpr_5 = (static_cast(ctx.gpr[20]) < 261 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A97C50; } @@ -7915,7 +8212,6 @@ L_08A97D68: } L_08A97D74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7923,7 +8219,6 @@ L_08A97D74: } L_08A97D7C: { const bool branch_taken = ctx.gpr[20] == aot_gpr_5; - // nop if (branch_taken) { goto L_08A97C50; } @@ -7931,7 +8226,6 @@ L_08A97D7C: } L_08A97D84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7948,7 +8242,6 @@ L_08A97D8C: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97DB8; } @@ -7974,7 +8267,6 @@ L_08A97DB8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (ctx.gpr[17] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A97F14; } @@ -8006,7 +8298,6 @@ L_08A97E18: } L_08A97E20: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08A97EE0; } @@ -8038,7 +8329,6 @@ L_08A97E58: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A97EB0; } @@ -8051,9 +8341,7 @@ L_08A97E7C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97EB0; } @@ -8069,7 +8357,6 @@ L_08A97EB0: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5056))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97F14; } @@ -8078,7 +8365,6 @@ L_08A97EB0: L_08A97EC0: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5060))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97F14; } @@ -8089,7 +8375,6 @@ L_08A97ECC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); ctx.gpr[19] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11140)))))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97F14; } @@ -8105,7 +8390,6 @@ L_08A97EE0: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[22]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[22] = std::bit_cast(0x7FC00000u); else ctx.fpr[22] = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97F14; } @@ -8114,7 +8398,6 @@ L_08A97EE0: L_08A97F08: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5068))); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97F14; } @@ -8140,7 +8423,6 @@ L_08A97F14: } L_08A97F44: { const bool branch_taken = static_cast(ctx.gpr[17]) <= 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 3u, 0x08A98020u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8148,7 +8430,6 @@ L_08A97F44: } L_08A97F4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A97F64; } @@ -8156,7 +8437,6 @@ L_08A97F4C: } L_08A97F54: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A97FA4; } @@ -8164,7 +8444,6 @@ L_08A97F54: } L_08A97F5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 3u, 0x08A98020u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8177,9 +8456,7 @@ L_08A97F64: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97F9C; } @@ -8194,7 +8471,6 @@ L_08A97F88: goto L_08A97F9C; L_08A97F9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 20u, 0x08A98190u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8207,9 +8483,7 @@ L_08A97FA4: aot_gpr_4 = (aot_gpr_4 | 60293u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A97FDC; } @@ -8230,9 +8504,7 @@ L_08A97FDC: aot_gpr_4 = (aot_gpr_4 | 60293u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 2u, 0x08A98018u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0165.cpp b/profiles/vcs/generated/generated_unit_0165.cpp index 0d126a9..1f22d53 100644 --- a/profiles/vcs/generated/generated_unit_0165.cpp +++ b/profiles/vcs/generated/generated_unit_0165.cpp @@ -7,134 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0165[4061] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 0, 6, 7, 0, 8, 9, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 13, 0, 14, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 23, 0, 24, 0, 0, 25, 0, 26, 0, 27, 0, 0, 28, 0, 29, 0, 30, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 37, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, - 43, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, - 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, - 0, 0, 59, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, 0, - 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 81, 82, 0, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 0, 0, 91, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 98, - 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, 110, 0, 111, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 124, 0, 0, 125, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 132, - 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, - 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, 0, 0, 143, 0, 0, 0, 0, 144, 0, 0, 0, 0, - 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 150, 0, 0, 0, 0, 151, - 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 154, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 161, - 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, - 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 183, 0, 184, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 187, 0, 188, 0, 189, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 0, - 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 211, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 216, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 220, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 224, - 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 232, 0, 0, - 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 241, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, - 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 250, 0, 0, 0, - 0, 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 261, 0, 0, 262, 0, - 0, 0, 263, 0, 264, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 276, 0, - 0, 0, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, - 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 287, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 294, 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, - 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 305, 306, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, - 0, 315, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, - 0, 0, 324, 325, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 332, 333, 0, 334, 335, - 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, - 0, 0, 0, 0, 0, 344, 0, 345, 0, 0, 0, 0, 346, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 359, 0, - 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 363, 0, - 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 376, 0, 0, 0, 377, 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 381, 0, 382, 0, 0, 0, 0, 383, - 0, 384, 385, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, - 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, - 0, 0, 403, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 406, 0, 407, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 417, 418, 0, 0, - 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 421, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 423, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, - 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 439, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 444, - 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, - 0, 0, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, - 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 0, 462, 0, 463, 0, 0, 464, 0, 0, 0, 0, 465, 0, 0, 466, 0, 467, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 472, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 475, 476, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 479, 0, 480, 481, 0, 0, 0, 0, 0, 0, 0, 482, - 0, 483, 0, 484, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, - 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 503, 0, 504, - 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0165[64] = { + 0x0000B5080B6840A1ull, 0x0A952A4820010400ull, 0x8000000280000004ull, 0x0808814280001000ull, + 0x0848000000884845ull, 0x0855442404480848ull, 0x2002800400400421ull, 0x00A0614000084400ull, + 0x0000000000000400ull, 0x8448089010901090ull, 0xA2100080009122A8ull, 0x0000000000008000ull, + 0x8820420800000000ull, 0x0080040910208820ull, 0x0000200482108400ull, 0x0842108421050000ull, + 0x0000C21084208421ull, 0xA0000A8000400000ull, 0x000000000020000Aull, 0x0000000555500000ull, + 0x0000514002180000ull, 0x0002800080000000ull, 0x0001000055000054ull, 0x2AAA800000000000ull, + 0x0010C00000000000ull, 0x280000000000028Aull, 0x00150000C002880Aull, 0x0000000040001540ull, + 0x00000AAAA0000000ull, 0x00A2800430000000ull, 0x00C0120000000000ull, 0x8000082000000440ull, + 0x9000002411000014ull, 0x4A00001000040601ull, 0x4900004214488894ull, 0x000040082000A108ull, + 0x0000000000000404ull, 0x1000000500000100ull, 0x1224240040080002ull, 0x0080000000000082ull, + 0x5011010044B82020ull, 0x000000000000A04Aull, 0x000000AC08043000ull, 0xD810086000000000ull, + 0x42040000A000080Aull, 0x08111000080450A0ull, 0x5400008052029000ull, 0x1014480000900040ull, + 0x85021031000A8040ull, 0x0050004042940106ull, 0x8020000081002004ull, 0x0000402404200000ull, + 0x0000900008008505ull, 0x0000021031002800ull, 0x0200020500000050ull, 0x0404020028040204ull, + 0x8802800001055008ull, 0x12024120900A2100ull, 0x1484A05020400200ull, 0x80D4830021154002ull, + 0x000080000000401Aull, 0x0064028008040400ull, 0xA280144020200000ull, 0x0000000014001010ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0165[64] = { + 1u, 17u, 31u, 35u, 43u, 53u, 68u, 76u, 85u, 86u, 99u, 112u, 113u, 119u, 128u, 135u, + 145u, 156u, 162u, 165u, 173u, 180u, 183u, 191u, 199u, 202u, 208u, 218u, 223u, 231u, 238u, 242u, + 247u, 255u, 263u, 277u, 284u, 286u, 290u, 299u, 302u, 315u, 320u, 328u, 336u, 344u, 354u, 364u, + 372u, 384u, 395u, 401u, 406u, 414u, 421u, 427u, 435u, 445u, 457u, 468u, 483u, 488u, 496u, 505u, }; void recomp_unit_0165_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +51,25 @@ void recomp_unit_0165_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A98004u; - entry_id = (entry_delta < 16244u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0165[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16244u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0165[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0165[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A98004; @@ -687,7 +595,6 @@ L_08A98004: goto L_08A98018; L_08A98018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A98190; } @@ -698,7 +605,6 @@ L_08A98020: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_13)) && ctx.fpr[26] == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -709,7 +615,6 @@ L_08A98020: L_08A9803C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A9805C; @@ -745,7 +650,6 @@ L_08A98070: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -756,9 +660,7 @@ L_08A98070: L_08A98090: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A980AC; } @@ -774,7 +676,6 @@ L_08A980A4: } L_08A980AC: ctx.gpr[31] = (0x08A980B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A980B4u) goto L_08A980B4; AOT_REGCACHE_SYNC_OUT(); return; L_08A980B4: @@ -782,7 +683,6 @@ L_08A980B4: goto L_08A980B8; L_08A980B8: ctx.gpr[31] = (0x08A980C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 301u, 0x08A96020u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A980C0u) goto L_08A980C0; AOT_REGCACHE_SYNC_OUT(); return; L_08A980C0: @@ -829,9 +729,7 @@ L_08A980C0: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A98144; } @@ -856,9 +754,7 @@ L_08A98144: aot_gpr_4 = (16128u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A98190; } @@ -884,7 +780,6 @@ L_08A98190: L_08A9819C: aot_gpr_4 = (0u + static_cast(-984)); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A981D4; } @@ -892,7 +787,6 @@ L_08A9819C: } L_08A981A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A981E0; } @@ -909,7 +803,6 @@ L_08A981B0: L_08A981B8: aot_gpr_4 = (static_cast(ctx.gpr[20]) < -970 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A981D4; } @@ -917,7 +810,6 @@ L_08A981B8: } L_08A981C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A981E0; } @@ -925,7 +817,6 @@ L_08A981C4: } L_08A981CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A981E0; } @@ -934,7 +825,6 @@ L_08A981CC: L_08A981D4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A981F0; } @@ -942,7 +832,6 @@ L_08A981D4: } L_08A981E0: ctx.gpr[31] = (0x08A981E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A981E8u) goto L_08A981E8; AOT_REGCACHE_SYNC_OUT(); return; L_08A981E8: @@ -954,7 +843,6 @@ L_08A981F0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[2] = (aot_gpr_4 | 0u); if (branch_taken) { @@ -996,7 +884,6 @@ L_08A9820C: AOT_REGCACHE_SYNC_OUT(); return; L_08A98280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A98300; } @@ -1055,13 +942,22 @@ L_08A98300: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A98334: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(64), aot_run_words); } ctx.gpr[31] = (0x08A98380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 275u, 0x08A957D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A98380u) goto L_08A98380; AOT_REGCACHE_SYNC_OUT(); return; L_08A98380: @@ -1322,7 +1218,6 @@ L_08A985BC: } L_08A985C4: ctx.gpr[31] = (0x08A985CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A985CCu) goto L_08A985CC; AOT_REGCACHE_SYNC_OUT(); return; L_08A985CC: @@ -1339,7 +1234,6 @@ L_08A985DC: ctx.gpr[23] = (ctx.gpr[22] | 0u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A98750; } @@ -1357,7 +1251,6 @@ L_08A98604: ctx.gpr[19] = (aot_gpr_16 | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9873C; } @@ -1427,7 +1320,6 @@ L_08A9868C: AOT_REGCACHE_SYNC_OUT(); return; L_08A986C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9872C; } @@ -1543,7 +1435,6 @@ L_08A987BC: } L_08A987D8: ctx.gpr[31] = (0x08A987E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 281u, 0x08A959F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A987E0u) goto L_08A987E0; AOT_REGCACHE_SYNC_OUT(); return; L_08A987E0: @@ -1572,7 +1463,17 @@ L_08A987E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9882C: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[14]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -1737,7 +1638,6 @@ L_08A989EC: aot_gpr_5 = (0u | 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A98A10; } @@ -1755,7 +1655,6 @@ L_08A98A00: } L_08A98A10: ctx.gpr[31] = (0x08A98A18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A98A18u) goto L_08A98A18; AOT_REGCACHE_SYNC_OUT(); return; L_08A98A18: @@ -1887,7 +1786,17 @@ L_08A98B00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A98B40: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -1956,7 +1865,6 @@ L_08A98B40: aot_fpr_15 = aot_fpr_15 - aot_fpr_14; ctx.gpr[22] = (aot_gpr_4 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98C90; @@ -1966,7 +1874,6 @@ L_08A98C90: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08A98CA8; @@ -1975,7 +1882,6 @@ L_08A98C90: L_08A98CA8: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A98CBC; @@ -1986,7 +1892,6 @@ L_08A98CBC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-8800))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98CD8; @@ -1996,7 +1901,6 @@ L_08A98CD8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); ctx.fpr[30] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98CF0; @@ -2004,7 +1908,6 @@ L_08A98CD8: goto L_08A98CF0; L_08A98CF0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A98D00; @@ -2014,7 +1917,6 @@ L_08A98D00: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98D18; @@ -2024,7 +1926,6 @@ L_08A98D18: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(36))); ctx.fpr[28] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98D30; @@ -2032,7 +1933,6 @@ L_08A98D18: goto L_08A98D30; L_08A98D30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A98D40; @@ -2042,7 +1942,6 @@ L_08A98D40: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98D58; @@ -2053,7 +1952,6 @@ L_08A98D58: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(36))); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A98D74; @@ -2061,7 +1959,6 @@ L_08A98D58: goto L_08A98D74; L_08A98D74: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08A98D84; @@ -2070,7 +1967,6 @@ L_08A98D74: L_08A98D84: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(50))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9A14C; } @@ -2135,7 +2031,6 @@ L_08A98DE0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); goto L_08A9A12C; @@ -2144,7 +2039,6 @@ L_08A98DE0: L_08A98E2C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); goto L_08A9A12C; @@ -2153,7 +2047,6 @@ L_08A98E2C: L_08A98E40: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); goto L_08A9A12C; @@ -2162,7 +2055,6 @@ L_08A98E40: L_08A98E54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(228))); goto L_08A9A12C; @@ -2312,7 +2204,6 @@ L_08A98EB8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[31] = (0u | 2u); if (branch_taken) { @@ -2332,9 +2223,7 @@ L_08A98F4C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(212))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A98F8C; } @@ -2343,9 +2232,7 @@ L_08A98F4C: L_08A98F64: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A98F8C; } @@ -2354,9 +2241,7 @@ L_08A98F64: L_08A98F78: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A100; } @@ -2365,9 +2250,7 @@ L_08A98F78: L_08A98F8C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A98FC8; } @@ -2376,9 +2259,7 @@ L_08A98F8C: L_08A98FA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A98FC8; } @@ -2387,9 +2268,7 @@ L_08A98FA0: L_08A98FB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A100; } @@ -2398,9 +2277,7 @@ L_08A98FB4: L_08A98FC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99004; } @@ -2409,9 +2286,7 @@ L_08A98FC8: L_08A98FDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99004; } @@ -2420,9 +2295,7 @@ L_08A98FDC: L_08A98FF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A100; } @@ -2431,9 +2304,7 @@ L_08A98FF0: L_08A99004: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99040; } @@ -2442,9 +2313,7 @@ L_08A99004: L_08A99018: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99040; } @@ -2453,9 +2322,7 @@ L_08A99018: L_08A9902C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A100; } @@ -2465,9 +2332,7 @@ L_08A99040: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99080; } @@ -2476,9 +2341,7 @@ L_08A99040: L_08A99058: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99080; } @@ -2487,9 +2350,7 @@ L_08A99058: L_08A9906C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A100; } @@ -2498,7 +2359,6 @@ L_08A9906C: L_08A99080: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -2509,7 +2369,6 @@ L_08A99080: L_08A99094: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -2520,9 +2379,7 @@ L_08A99094: L_08A990A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A100; } @@ -2587,9 +2444,7 @@ L_08A9915C: { const float fs = aot_fpr_15; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9935C; } @@ -2605,7 +2460,6 @@ L_08A991A0: } L_08A991A8: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08A99354; } @@ -2629,7 +2483,6 @@ L_08A991B0: aot_gpr_6 = (ctx.gpr[11] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99354; } @@ -2645,7 +2498,6 @@ L_08A991F8: } L_08A99200: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A99258; } @@ -2653,7 +2505,6 @@ L_08A99200: } L_08A99208: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99354; } @@ -2677,7 +2528,6 @@ L_08A99210: aot_gpr_6 = (ctx.gpr[11] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99354; } @@ -2766,7 +2616,6 @@ L_08A9935C: } L_08A99364: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08A99450; } @@ -2774,7 +2623,6 @@ L_08A99364: } L_08A9936C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99450; } @@ -2790,7 +2638,6 @@ L_08A99374: } L_08A9937C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A99450; } @@ -2798,7 +2645,6 @@ L_08A9937C: } L_08A99384: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99450; } @@ -2853,7 +2699,6 @@ L_08A9938C: aot_gpr_6 = (ctx.gpr[11] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99450; } @@ -2884,9 +2729,7 @@ L_08A99468: { const float fs = ctx.fpr[16]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } aot_fpr_14 = aot_fpr_14 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A994A4; } @@ -2894,7 +2737,6 @@ L_08A99468: } L_08A9949C: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[31]; - // nop if (branch_taken) { goto L_08A994BC; } @@ -2902,9 +2744,7 @@ L_08A9949C: } L_08A994A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99580; } @@ -2912,7 +2752,6 @@ L_08A994A4: } L_08A994B4: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[25]; - // nop if (branch_taken) { goto L_08A99580; } @@ -3010,9 +2849,7 @@ L_08A995C8: { const float fs = aot_fpr_15; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A997C8; } @@ -3028,7 +2865,6 @@ L_08A9960C: } L_08A99614: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08A997C0; } @@ -3052,7 +2888,6 @@ L_08A9961C: aot_gpr_6 = (ctx.gpr[9] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A997C0; } @@ -3068,7 +2903,6 @@ L_08A99664: } L_08A9966C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A996C4; } @@ -3076,7 +2910,6 @@ L_08A9966C: } L_08A99674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A997C0; } @@ -3100,7 +2933,6 @@ L_08A9967C: aot_gpr_6 = (ctx.gpr[9] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A997C0; } @@ -3189,7 +3021,6 @@ L_08A997C8: } L_08A997D0: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08A998BC; } @@ -3197,7 +3028,6 @@ L_08A997D0: } L_08A997D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A998BC; } @@ -3213,7 +3043,6 @@ L_08A997E0: } L_08A997E8: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A998BC; } @@ -3221,7 +3050,6 @@ L_08A997E8: } L_08A997F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A998BC; } @@ -3276,7 +3104,6 @@ L_08A997F8: aot_gpr_6 = (ctx.gpr[9] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A998BC; } @@ -3307,9 +3134,7 @@ L_08A998D4: { const float fs = ctx.fpr[16]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } aot_fpr_14 = aot_fpr_14 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99910; } @@ -3317,7 +3142,6 @@ L_08A998D4: } L_08A99908: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[31]; - // nop if (branch_taken) { goto L_08A99928; } @@ -3325,9 +3149,7 @@ L_08A99908: } L_08A99910: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A999F0; } @@ -3335,7 +3157,6 @@ L_08A99910: } L_08A99920: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[25]; - // nop if (branch_taken) { goto L_08A999F0; } @@ -3480,9 +3301,7 @@ L_08A99A80: { const float fs = aot_fpr_15; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } aot_fpr_14 = aot_fpr_14 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99C80; } @@ -3498,7 +3317,6 @@ L_08A99AC4: } L_08A99ACC: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08A99C78; } @@ -3522,7 +3340,6 @@ L_08A99AD4: aot_gpr_6 = (ctx.gpr[17] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99C78; } @@ -3538,7 +3355,6 @@ L_08A99B1C: } L_08A99B24: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A99B7C; } @@ -3546,7 +3362,6 @@ L_08A99B24: } L_08A99B2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99C78; } @@ -3570,7 +3385,6 @@ L_08A99B34: aot_gpr_6 = (ctx.gpr[17] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99C78; } @@ -3659,7 +3473,6 @@ L_08A99C80: } L_08A99C88: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08A99D74; } @@ -3667,7 +3480,6 @@ L_08A99C88: } L_08A99C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99D74; } @@ -3683,7 +3495,6 @@ L_08A99C98: } L_08A99CA0: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A99D74; } @@ -3691,7 +3502,6 @@ L_08A99CA0: } L_08A99CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99D74; } @@ -3746,7 +3556,6 @@ L_08A99CB0: aot_gpr_6 = (ctx.gpr[17] + aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), std::bit_cast(aot_fpr_14)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A99D74; } @@ -3777,9 +3586,7 @@ L_08A99D8C: { const float fs = ctx.fpr[16]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } aot_fpr_14 = aot_fpr_14 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99DC8; } @@ -3787,7 +3594,6 @@ L_08A99D8C: } L_08A99DC0: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[31]; - // nop if (branch_taken) { goto L_08A99DE0; } @@ -3795,9 +3601,7 @@ L_08A99DC0: } L_08A99DC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A99EA8; } @@ -3805,7 +3609,6 @@ L_08A99DC8: } L_08A99DD8: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[25]; - // nop if (branch_taken) { goto L_08A99EA8; } @@ -3866,7 +3669,6 @@ L_08A99DE0: L_08A99EA8: aot_gpr_4 = (static_cast(ctx.gpr[3]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9A100; } @@ -3977,7 +3779,6 @@ L_08A99F98: aot_gpr_16 = (aot_gpr_4 ^ aot_gpr_5); aot_gpr_16 = (0u < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A9A000; } @@ -4012,7 +3813,6 @@ L_08A9A000: AOT_REGCACHE_SYNC_OUT(); return; L_08A9A00C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A9A064; } @@ -4158,7 +3958,17 @@ L_08A9A14C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A194: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4166,7 +3976,6 @@ L_08A9A194: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(11142)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4174,13 +3983,11 @@ L_08A9A194: } L_08A9A1E8: ctx.gpr[31] = (0x08A9A1F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9A1F0u) goto L_08A9A1F0; AOT_REGCACHE_SYNC_OUT(); return; L_08A9A1F0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4190,7 +3997,6 @@ L_08A9A1FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4204,7 +4010,6 @@ L_08A9A20C: L_08A9A214: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4214,7 +4019,6 @@ L_08A9A220: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4224,7 +4028,6 @@ L_08A9A230: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4234,7 +4037,6 @@ L_08A9A240: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4243,7 +4045,6 @@ L_08A9A240: L_08A9A250: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4253,7 +4054,6 @@ L_08A9A25C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A9A288; } @@ -4261,7 +4061,6 @@ L_08A9A25C: } L_08A9A26C: ctx.gpr[31] = (0x08A9A274u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9A274u) goto L_08A9A274; AOT_REGCACHE_SYNC_OUT(); return; L_08A9A274: @@ -4269,7 +4068,6 @@ L_08A9A274: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08A9A608; } @@ -4309,7 +4107,6 @@ L_08A9A29C: L_08A9A2E4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(48))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9A5F4; } @@ -4318,7 +4115,6 @@ L_08A9A2E4: L_08A9A2F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(50))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9A5F4; } @@ -4327,9 +4123,7 @@ L_08A9A2F0: L_08A9A2FC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A338; } @@ -4338,9 +4132,7 @@ L_08A9A2FC: L_08A9A310: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A338; } @@ -4349,9 +4141,7 @@ L_08A9A310: L_08A9A324: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(44))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A5F4; } @@ -4401,9 +4191,7 @@ L_08A9A340: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A5F4; } @@ -4413,9 +4201,7 @@ L_08A9A378: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(32))); { const float fs = aot_fpr_13; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9A3BC; } @@ -4479,7 +4265,6 @@ L_08A9A40C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[31] = (0x08A9A42Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9A42Cu) goto L_08A9A42C; AOT_REGCACHE_SYNC_OUT(); return; L_08A9A42C: @@ -4553,7 +4338,6 @@ L_08A9A42C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), std::bit_cast(aot_fpr_13)); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = aot_fpr_15; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } if (branch_taken) { @@ -4590,7 +4374,6 @@ L_08A9A524: AOT_REGCACHE_SYNC_OUT(); return; L_08A9A584: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9A5F4; } @@ -4661,7 +4444,17 @@ L_08A9A608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A650: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[31]); @@ -4682,7 +4475,6 @@ L_08A9A650: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_15) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08A9A67C; @@ -4710,7 +4502,17 @@ L_08A9A6AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A6B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -4720,7 +4522,17 @@ L_08A9A6B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A6CC: ctx.gpr[2] = (2218u << 16u); jump_target = ctx.gpr[31]; @@ -4728,12 +4540,21 @@ L_08A9A6CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A6D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08A9A6E8u); - // nop goto L_08A9A6CC; L_08A9A6E8: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4742,7 +4563,17 @@ L_08A9A6E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A6F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4760,7 +4591,17 @@ L_08A9A708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A720: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -4848,7 +4689,6 @@ L_08A9A854: goto L_08A9A858; L_08A9A858: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9A86C; } @@ -4867,7 +4707,17 @@ L_08A9A86C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9A87C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(200), aot_gpr_16); @@ -4910,7 +4760,6 @@ L_08A9A8D4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9A8FC; } @@ -4924,7 +4773,6 @@ L_08A9A8F4: L_08A9A8FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9A938; } @@ -4938,7 +4786,6 @@ L_08A9A908: L_08A9A910: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9A938; } @@ -4958,7 +4805,6 @@ L_08A9A91C: AOT_REGCACHE_SYNC_OUT(); return; L_08A9A938: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A9AA98; } @@ -5200,7 +5046,6 @@ L_08A9ABFC: goto L_08A9AC00; L_08A9AC00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9AC10; } @@ -5226,7 +5071,17 @@ L_08A9AC10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AC30: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -5249,7 +5104,6 @@ L_08A9AC30: goto L_08A9AC78; L_08A9AC78: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9AD3C; } @@ -5274,7 +5128,6 @@ L_08A9AC80: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9AD3C; } @@ -5297,7 +5150,6 @@ L_08A9ACE8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_gpr_4 = (aot_gpr_4 + static_cast(-8)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A9AD18; } @@ -5330,7 +5182,6 @@ L_08A9AD20: goto L_08A9AD34; L_08A9AD34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9AC78; } @@ -5359,7 +5210,17 @@ L_08A9AD4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AD70: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5409,7 +5270,17 @@ L_08A9ADD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9ADF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_7); @@ -5436,14 +5307,33 @@ L_08A9AE34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AE40: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AE48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(108))); @@ -5464,14 +5354,33 @@ L_08A9AE68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AE74: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AE7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); @@ -5481,7 +5390,6 @@ L_08A9AE7C: aot_gpr_7 = (aot_gpr_7 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[31]); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08A9AEF4; } @@ -5522,7 +5430,6 @@ L_08A9AEEC: } L_08A9AEF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9AF54; } @@ -5561,7 +5468,17 @@ L_08A9AF54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9AF60: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_6); @@ -5600,7 +5517,6 @@ L_08A9AFBC: AOT_REGCACHE_SYNC_OUT(); return; L_08A9AFCC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9B040; } @@ -5630,7 +5546,6 @@ L_08A9AFF4: aot_gpr_6 = (static_cast(aot_gpr_6) < 0 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08A9B040; } @@ -5653,7 +5568,6 @@ L_08A9B01C: } L_08A9B040: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9B10C; } @@ -5661,7 +5575,6 @@ L_08A9B040: } L_08A9B048: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9B108; } @@ -5680,7 +5593,6 @@ L_08A9B050: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9B108; } @@ -5690,7 +5602,6 @@ L_08A9B084: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A9B098; } @@ -5716,7 +5627,6 @@ L_08A9B0B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); aot_gpr_4 = (aot_gpr_4 + static_cast(-8)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A9B0E4; } @@ -5749,7 +5659,6 @@ L_08A9B0EC: goto L_08A9B100; L_08A9B100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9B048; } @@ -5771,7 +5680,17 @@ L_08A9B10C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B124: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -5856,7 +5775,17 @@ L_08A9B1D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B1DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), aot_gpr_5); @@ -5880,7 +5809,6 @@ L_08A9B20C: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9B40C; } @@ -6091,7 +6019,17 @@ L_08A9B440: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B470: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -6150,7 +6088,6 @@ L_08A9B4C0: goto L_08A9B530; L_08A9B530: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9B68C; } @@ -6167,7 +6104,6 @@ L_08A9B538: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9B68C; } @@ -6177,7 +6113,6 @@ L_08A9B564: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A9B578; } @@ -6203,7 +6138,6 @@ L_08A9B594: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_6 = (aot_gpr_4 + static_cast(-8)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08A9B614; } @@ -6277,7 +6211,6 @@ L_08A9B61C: goto L_08A9B684; L_08A9B684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9B530; } @@ -6297,7 +6230,17 @@ L_08A9B68C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B6A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_16); @@ -6485,7 +6428,17 @@ L_08A9B84C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B864: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -6512,7 +6465,6 @@ L_08A9B864: goto L_08A9B8C0; L_08A9B8C0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9B938; } @@ -6528,7 +6480,6 @@ L_08A9B8C8: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9B938; } @@ -6574,14 +6525,34 @@ L_08A9B938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B948: jump_target = ctx.gpr[31]; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B950: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -6601,7 +6572,17 @@ L_08A9B974: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B980: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(3)))))); @@ -6618,7 +6599,17 @@ L_08A9B998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -6635,7 +6626,17 @@ L_08A9B9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B9C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(3), static_cast(aot_gpr_5)); @@ -6654,7 +6655,17 @@ L_08A9B9E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9B9F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -6687,7 +6698,6 @@ L_08A9BA28: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9BA9C; } @@ -6737,7 +6747,6 @@ L_08A9BA9C: AOT_REGCACHE_SYNC_OUT(); return; L_08A9BAB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9BAF4; } @@ -6783,7 +6792,17 @@ L_08A9BAF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9BB08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -6811,7 +6830,6 @@ L_08A9BB3C: } L_08A9BB44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9BC00; } @@ -6819,7 +6837,6 @@ L_08A9BB44: } L_08A9BB4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9BC14; } @@ -6849,12 +6866,9 @@ L_08A9BB78: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(ctx.gpr[20]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (aot_gpr_6 - aot_gpr_7); aot_gpr_7 = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(ctx.gpr[20]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.lo); { const bool branch_taken = aot_gpr_7 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A9BBA8; } @@ -6916,7 +6930,6 @@ L_08A9BBE0: } L_08A9BC00: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08A9BC10; } @@ -6946,7 +6959,17 @@ L_08A9BC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9BC3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(192), aot_gpr_5); @@ -7055,7 +7078,6 @@ L_08A9BD70: goto L_08A9BDA0; L_08A9BDA0: { const bool branch_taken = aot_gpr_7 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A9BDCC; } @@ -7155,7 +7177,17 @@ L_08A9BEAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9BEB4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -7175,7 +7207,6 @@ L_08A9BEB4: } L_08A9BEE0: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08A9BEF8; } @@ -7242,7 +7273,17 @@ L_08A9BF6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9BF74: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); ctx.gpr[8] = (aot_gpr_7 | 0u); diff --git a/profiles/vcs/generated/generated_unit_0166.cpp b/profiles/vcs/generated/generated_unit_0166.cpp index 657e132..5c2c3a2 100644 --- a/profiles/vcs/generated/generated_unit_0166.cpp +++ b/profiles/vcs/generated/generated_unit_0166.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0166[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 23, 0, 0, - 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 36, 0, 0, 0, - 0, 37, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, - 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 46, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 55, 0, 56, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 59, 0, 60, 0, 61, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 74, - 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, - 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, - 0, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 0, 106, 0, 0, 107, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 110, 0, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 113, - 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, - 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, - 0, 0, 0, 0, 0, 0, 0, 125, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, - 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137, 138, 0, 0, 0, 0, 0, - 139, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, 145, 0, 0, - 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, - 150, 0, 0, 151, 0, 152, 0, 153, 0, 0, 154, 0, 0, 0, 155, 0, 156, 0, 0, 0, 157, 0, 158, 0, 159, 0, 0, 160, 0, 161, 0, 162, - 0, 163, 0, 0, 0, 0, 0, 0, 0, 164, 165, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, - 0, 0, 169, 0, 170, 0, 0, 171, 0, 172, 0, 0, 173, 0, 0, 174, 0, 0, 175, 0, 176, 0, 0, 177, 0, 178, 0, 0, 179, 0, 180, 0, - 0, 181, 0, 182, 0, 0, 183, 184, 0, 0, 0, 0, 0, 185, 0, 0, 0, 186, 0, 0, 0, 187, 188, 0, 0, 0, 189, 0, 190, 0, 0, 191, - 0, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, 195, 0, 0, 0, 196, 0, 197, 0, 0, 0, 198, 0, 199, 0, 0, 200, 0, 0, 0, 201, 0, - 202, 0, 0, 0, 203, 0, 204, 0, 0, 205, 0, 0, 0, 206, 0, 207, 0, 0, 0, 208, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 218, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 223, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 227, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 240, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 245, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 250, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, - 259, 260, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, - 0, 0, 267, 0, 0, 0, 0, 268, 0, 0, 0, 0, 269, 270, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 0, 277, 278, 0, 0, 279, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 282, 0, 0, 0, 283, 0, 0, 284, 0, 285, 0, 286, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, - 0, 0, 294, 0, 295, 0, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 0, 299, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, 307, 308, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 310, 0, 311, 312, 0, 0, 0, 0, 0, 0, 0, 0, 313, - 0, 314, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 317, 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, - 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, - 323, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 328, 0, 0, 0, 329, 0, 330, 0, 0, 0, 331, 0, 332, 0, 0, 0, 333, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 339, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, - 341, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 0, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 0, 350, 0, - 351, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, - 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 367, 0, 368, 0, 0, - 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 373, 0, 0, 0, 0, 0, 0, 0, 0, - 374, 0, 375, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 378, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 383, 0, 0, 384, 385, 0, 0, 0, 0, 0, 0, - 0, 386, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 0, 390, 0, - 391, 392, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 397, 398, 0, - 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, 0, 402, 0, 403, 0, 404, 0, 0, 0, 0, 405, 0, 0, 0, - 0, 0, 0, 0, 406, 0, 0, 407, 0, 408, 0, 409, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 412, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 417, 0, 0, 0, 0, 0, 0, 0, 0, - 418, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 0, 0, 422, 423, 0, 424, 0, 0, 0, 425, 426, 0, 0, 0, 0, - 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, 0, 0, 0, 0, 431, 432, 0, 433, 0, 0, 0, 0, 0, - 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 0, 438, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 441, 442, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 0, 0, 0, 0, 447, - 448, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 452, 453, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 0, - 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 465, - 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 471, - 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, 475, 476, 0, 477, 0, 0, 0, 0, 478, 0, 479, 0, 0, 0, - 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 482, 483, 0, 484, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 0, 0, 487, - 0, 0, 488, 0, 0, 0, 0, 0, 489, 490, 0, 491, 0, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, - 0, 0, 0, 0, 496, 497, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, - 0, 505, 0, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, - 0, 0, 511, 0, 0, 0, 0, 0, 512, 513, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, - 518, 0, 519, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 525, - 0, 0, 526, 0, 0, 0, 0, 0, 527, 528, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, - 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, 536, 537, 0, 0, 0, - 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 545, 0, 546, 0, 0, 0, 0, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, - 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, 0, 555, 556, 0, 0, 0, 0, 0, - 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 561, 0, 562, 0, 0, - 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 570, 0, - 0, 0, 0, 0, 0, 571, 0, 0, 572, 0, 0, 573, 0, 0, 574, 0, 575, 576, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 578, 0, - 0, 579, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 581, 0, 0, 582, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 585, 0, - 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, - 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, 0, 593, 0, 594, 0, - 595, 0, 596, 597, 0, 0, 0, 598, 0, 0, 0, 0, 599, 0, 0, 600, 0, 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 605, 0, 606, 0, 607, 608, 0, 0, 609, 0, 0, 0, 0, 610, 0, 611, - 0, 612, 613, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 618, 0, 619, 0, 620, 0, 0, 0, - 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 629, 0, 630, 0, 631, 0, 0, 632, 633, 0, 0, 0, 0, 0, 0, 634, 0, 0, - 0, 0, 0, 0, 635, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 638, 0, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 641, - 0, 0, 0, 642, 0, 643, 0, 0, 644, 645, 0, 646, 0, 647, 0, 648, 0, 649, 0, 650, 0, 0, 651, 0, 0, 652, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, 657, 0, 0, 658, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0166[64] = { + 0x0060000000000001ull, 0x0000004012010402ull, 0x4000000000000000ull, 0x2000802008081008ull, + 0x2840080000801000ull, 0x1280A42220022022ull, 0x8500100202005212ull, 0x0420010088008000ull, + 0x0200032A008001A8ull, 0x8002020100000000ull, 0x8040000000018808ull, 0x0000108080A80080ull, + 0x00080801800A0000ull, 0x0180020201420200ull, 0x0000815440400101ull, 0x2014848480521125ull, + 0x00000180A0010020ull, 0x0101000010084000ull, 0x0602005010100000ull, 0x4008200820510281ull, + 0xA0020602A95144A9ull, 0x946220CA52949294ull, 0x00A8A25144A28A28ull, 0x0000480000020000ull, + 0x0000012000000900ull, 0x9000000480000024ull, 0x0240000012000000ull, 0x0005000000480000ull, + 0x0240090024009002ull, 0x9002400900240090ull, 0x0908200020201400ull, 0x0111308404848413ull, + 0x2422A91005130908ull, 0x0424209424200000ull, 0x3210080020020020ull, 0x40301082806A0000ull, + 0x0000404108002040ull, 0x006800008A28A001ull, 0x8006090140320000ull, 0x2806809145000800ull, + 0x28A000040040C120ull, 0x0818240500C8000Aull, 0x4240020203210080ull, 0x10AA404060901403ull, + 0x00C4028420010A90ull, 0x058240500C582405ull, 0x8240500C00582405ull, 0x8240508A0A906905ull, + 0x142C120284101005ull, 0x480A0B0480A16090ull, 0x22202002002000B0ull, 0x4A00230480A00422ull, + 0x80800B0480A08115ull, 0x0010880818240500ull, 0x1202910000000001ull, 0x0000000206090154ull, + 0x2940800000000000ull, 0x4202400002048004ull, 0x4811210240834920ull, 0x5410020480000420ull, + 0xA13508010044908Dull, 0x0042048115082426ull, 0xA08A005020654105ull, 0x92120020024AAB28ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0166[64] = { + 1u, 4u, 10u, 11u, 18u, 24u, 37u, 48u, 54u, 65u, 69u, 75u, 82u, 88u, 96u, 105u, + 121u, 127u, 132u, 139u, 150u, 169u, 192u, 211u, 214u, 218u, 224u, 228u, 232u, 241u, 251u, 259u, + 274u, 291u, 301u, 309u, 320u, 326u, 337u, 347u, 359u, 369u, 381u, 391u, 406u, 418u, 434u, 448u, + 466u, 480u, 496u, 505u, 518u, 532u, 542u, 549u, 558u, 563u, 571u, 586u, 595u, 612u, 626u, 642u, }; void recomp_unit_0166_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0166_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08A9C000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0166[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0166[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0166[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08A9C000; @@ -963,7 +870,17 @@ L_08A9C170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9C198: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_8 = (aot_gpr_6 | 0u); @@ -1131,7 +1048,17 @@ L_08A9C394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9C3BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -1249,7 +1176,6 @@ L_08A9C504: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A9C534; } @@ -1342,7 +1268,6 @@ L_08A9C5BC: goto L_08A9C5DC; L_08A9C5DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9C6E8; } @@ -1455,7 +1380,6 @@ L_08A9C6B0: AOT_REGCACHE_SYNC_OUT(); return; L_08A9C6E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9C5DC; } @@ -1473,7 +1397,17 @@ L_08A9C6E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9C6FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-576)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(576), aot_gpr_5); @@ -1541,7 +1475,6 @@ L_08A9C7A0: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9C814; } @@ -1625,7 +1558,6 @@ L_08A9C85C: goto L_08A9C884; L_08A9C884: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9C894; } @@ -1757,7 +1689,6 @@ L_08A9C9FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(76))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08A9CA2C; } @@ -1953,7 +1884,6 @@ L_08A9CBB0: aot_gpr_4 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9CD58; } @@ -1979,7 +1909,6 @@ L_08A9CC4C: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9CD58; } @@ -2109,7 +2038,6 @@ L_08A9CDA4: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9CE88; } @@ -2180,7 +2108,6 @@ L_08A9CE78: goto L_08A9CE88; L_08A9CE88: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9CE98; } @@ -2192,7 +2119,6 @@ L_08A9CE90: goto L_08A9CE98; L_08A9CE98: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A9CF08; } @@ -2588,7 +2514,6 @@ L_08A9D270: AOT_REGCACHE_SYNC_OUT(); return; L_08A9D290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9D2E4; } @@ -2605,7 +2530,6 @@ L_08A9D298: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9D2E4; } @@ -2640,7 +2564,17 @@ L_08A9D2E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9D300: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[11] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -2648,7 +2582,6 @@ L_08A9D300: ctx.gpr[2] = (static_cast(ctx.gpr[10]) < 4 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[31]); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9D324; } @@ -2669,7 +2602,6 @@ L_08A9D324: ctx.gpr[2] = (static_cast(static_cast(ctx.gpr[2]) >> 1u)); ctx.gpr[2] = (static_cast(ctx.gpr[11]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A9D38C; } @@ -2679,7 +2611,6 @@ L_08A9D340: ctx.gpr[2] = (aot_gpr_8 + static_cast(-4)); ctx.gpr[2] = (static_cast(ctx.gpr[11]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9D358; } @@ -2716,12 +2647,9 @@ L_08A9D38C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[10]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_6); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[10])) * static_cast(static_cast(aot_gpr_7)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_7 = (ctx.lo); ctx.gpr[31] = (0x08A9D3B4u); - // nop goto L_08A9D3CC; L_08A9D3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); @@ -2733,7 +2661,17 @@ L_08A9D3B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9D3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -2752,7 +2690,6 @@ L_08A9D3CC: } L_08A9D3F8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08A9D414; } @@ -2783,7 +2720,6 @@ L_08A9D414: L_08A9D41C: aot_gpr_4 = (ctx.gpr[16] < static_cast(-3) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9D440; } @@ -2798,7 +2734,6 @@ L_08A9D428: AOT_REGCACHE_SYNC_OUT(); return; L_08A9D438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9D47C; } @@ -2821,7 +2756,6 @@ L_08A9D450: } L_08A9D458: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A9D474; } @@ -2835,7 +2769,6 @@ L_08A9D460: AOT_REGCACHE_SYNC_OUT(); return; L_08A9D46C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9D47C; } @@ -2851,7 +2784,6 @@ L_08A9D474: } L_08A9D47C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08A9D4A4; } @@ -2884,7 +2816,17 @@ L_08A9D4A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9D4C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2897,7 +2839,6 @@ L_08A9D4C4: aot_gpr_5 = (aot_gpr_4 & 32u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[31]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9D510; } @@ -2919,7 +2860,6 @@ L_08A9D508: L_08A9D510: aot_gpr_5 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9D550; } @@ -2951,7 +2891,6 @@ L_08A9D548: L_08A9D550: aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9D578; } @@ -2973,7 +2912,6 @@ L_08A9D570: L_08A9D578: aot_gpr_4 = (aot_gpr_4 & 192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9D59C; } @@ -3004,7 +2942,17 @@ L_08A9D59C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9D5B4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_8 = (aot_gpr_6 & 32u); @@ -3019,7 +2967,6 @@ L_08A9D5C4: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D5D8; } @@ -3032,7 +2979,6 @@ L_08A9D5D8: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(4)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D5F0; } @@ -3045,7 +2991,6 @@ L_08A9D5E8: L_08A9D5F0: aot_gpr_8 = (aot_gpr_6 & 16u); { const bool branch_taken = aot_gpr_8 == 0u; - // nop if (branch_taken) { goto L_08A9D65C; } @@ -3055,7 +3000,6 @@ L_08A9D5FC: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(10)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D614; } @@ -3069,7 +3013,6 @@ L_08A9D614: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(12)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(12)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D62C; } @@ -3083,7 +3026,6 @@ L_08A9D62C: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(18)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(18)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D644; } @@ -3097,7 +3039,6 @@ L_08A9D644: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(20)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(20)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D65C; } @@ -3110,7 +3051,6 @@ L_08A9D654: L_08A9D65C: aot_gpr_8 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_8 == 0u; - // nop if (branch_taken) { goto L_08A9D698; } @@ -3120,7 +3060,6 @@ L_08A9D668: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(14)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(14)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D680; } @@ -3134,7 +3073,6 @@ L_08A9D680: aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(16)))))); { const bool branch_taken = aot_gpr_8 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08A9D698; } @@ -3147,7 +3085,6 @@ L_08A9D690: L_08A9D698: aot_gpr_6 = (aot_gpr_6 & 128u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9D6D4; } @@ -3157,7 +3094,6 @@ L_08A9D6A4: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(6)))))); aot_gpr_8 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(6)))))); { const bool branch_taken = aot_gpr_6 == aot_gpr_8; - // nop if (branch_taken) { goto L_08A9D6BC; } @@ -3171,7 +3107,6 @@ L_08A9D6BC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8)))))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08A9D6D4; } @@ -3187,7 +3122,17 @@ L_08A9D6D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9D6DC: aot_gpr_6 = (aot_gpr_7 & 65535u); aot_gpr_7 = (aot_gpr_6 & 65535u); @@ -3214,7 +3159,6 @@ L_08A9D6DC: aot_mem.aot_direct_store8(ctx.gpr[9] + static_cast(0), static_cast(aot_gpr_7)); aot_gpr_7 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9D7AC; } @@ -3251,7 +3195,6 @@ L_08A9D744: L_08A9D7AC: aot_gpr_7 = (aot_gpr_6 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9D820; } @@ -3288,7 +3231,6 @@ L_08A9D7B8: L_08A9D820: aot_gpr_7 = (aot_gpr_6 & 16u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9D894; } @@ -3325,7 +3267,6 @@ L_08A9D82C: L_08A9D894: aot_gpr_7 = (aot_gpr_6 & 32u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9D908; } @@ -3362,7 +3303,6 @@ L_08A9D8A0: L_08A9D908: aot_gpr_7 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9D97C; } @@ -3399,7 +3339,6 @@ L_08A9D914: L_08A9D97C: aot_gpr_7 = (aot_gpr_6 & 128u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9D9F0; } @@ -3436,7 +3375,6 @@ L_08A9D988: L_08A9D9F0: aot_gpr_7 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DA64; } @@ -3473,7 +3411,6 @@ L_08A9D9FC: L_08A9DA64: aot_gpr_7 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DAD8; } @@ -3510,7 +3447,6 @@ L_08A9DA70: L_08A9DAD8: aot_gpr_7 = (aot_gpr_6 & 512u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DB4C; } @@ -3547,7 +3483,6 @@ L_08A9DAE4: L_08A9DB4C: aot_gpr_6 = (aot_gpr_6 & 256u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9DBC0; } @@ -3583,11 +3518,20 @@ L_08A9DB58: goto L_08A9DBC0; L_08A9DBC0: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9DBC8: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -3603,7 +3547,6 @@ L_08A9DBC8: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_7 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DC30; } @@ -3625,7 +3568,6 @@ L_08A9DC04: L_08A9DC30: aot_gpr_7 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DC68; } @@ -3647,7 +3589,6 @@ L_08A9DC3C: L_08A9DC68: aot_gpr_7 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DCA0; } @@ -3669,7 +3610,6 @@ L_08A9DC74: L_08A9DCA0: aot_gpr_7 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DCD8; } @@ -3691,7 +3631,6 @@ L_08A9DCAC: L_08A9DCD8: aot_gpr_7 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DD10; } @@ -3713,7 +3652,6 @@ L_08A9DCE4: L_08A9DD10: aot_gpr_7 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DD48; } @@ -3735,7 +3673,6 @@ L_08A9DD1C: L_08A9DD48: aot_gpr_7 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DD80; } @@ -3757,7 +3694,6 @@ L_08A9DD54: L_08A9DD80: aot_gpr_7 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DDB8; } @@ -3779,7 +3715,6 @@ L_08A9DD8C: L_08A9DDB8: aot_gpr_7 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08A9DDF0; } @@ -3801,7 +3736,6 @@ L_08A9DDC4: L_08A9DDF0: aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9DE28; } @@ -3822,11 +3756,20 @@ L_08A9DDFC: goto L_08A9DE28; L_08A9DE28: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9DE30: aot_gpr_4 = (17826u << 16u); aot_gpr_4 = (aot_gpr_4 | 63875u); @@ -3840,7 +3783,17 @@ L_08A9DE30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9DE54: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3853,7 +3806,17 @@ L_08A9DE54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9DE74: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[31]}; @@ -3904,7 +3867,6 @@ L_08A9DF00: L_08A9DF04: aot_gpr_5 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9DFB4; } @@ -3976,7 +3938,6 @@ L_08A9DFB0: L_08A9DFB4: aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9E044; } @@ -4036,7 +3997,6 @@ L_08A9E040: L_08A9E044: aot_gpr_5 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9E190; } @@ -4046,7 +4006,6 @@ L_08A9E050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(112))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); ctx.gpr[31] = (0x08A9E060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 621u, 0x0889EB08u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9E060u) goto L_08A9E060; AOT_REGCACHE_SYNC_OUT(); return; L_08A9E060: @@ -4062,7 +4021,6 @@ L_08A9E068: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fpr[22] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); if (branch_taken) { @@ -4072,9 +4030,7 @@ L_08A9E068: } L_08A9E090: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[22])) && aot_fpr_20 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E0AC; } @@ -4120,7 +4076,6 @@ L_08A9E0D4: L_08A9E0E8: aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.gpr[31] = (0x08A9E0F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 580u, 0x08A8F0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9E0F4u) goto L_08A9E0F4; AOT_REGCACHE_SYNC_OUT(); return; L_08A9E0F4: @@ -4176,7 +4131,6 @@ L_08A9E174: AOT_REGCACHE_SYNC_OUT(); return; L_08A9E188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9E1E8; } @@ -4185,7 +4139,6 @@ L_08A9E188: L_08A9E190: aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9E1E8; } @@ -4238,7 +4191,17 @@ L_08A9E1E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E214: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4273,7 +4236,17 @@ L_08A9E244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E274: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4294,7 +4267,6 @@ L_08A9E2AC: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -4305,9 +4277,7 @@ L_08A9E2AC: L_08A9E2D0: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E2F4; } @@ -4393,7 +4363,6 @@ L_08A9E344: goto L_08A9E34C; L_08A9E34C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9E358; } @@ -4456,7 +4425,6 @@ L_08A9E3B0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9E3D4; } @@ -4481,7 +4449,17 @@ L_08A9E3D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E3F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4504,7 +4482,17 @@ L_08A9E418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E434: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -4551,7 +4539,17 @@ L_08A9E498: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E4B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4579,7 +4577,6 @@ L_08A9E500: ctx.fpr[30] = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 1u); if (branch_taken) { @@ -4593,9 +4590,7 @@ L_08A9E534: goto L_08A9E53C; L_08A9E53C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E554; } @@ -4607,9 +4602,7 @@ L_08A9E54C: goto L_08A9E554; L_08A9E554: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E56C; } @@ -4623,7 +4616,6 @@ L_08A9E56C: ctx.gpr[18] = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08A9E5D8; } @@ -4650,7 +4642,6 @@ L_08A9E57C: AOT_REGCACHE_SYNC_OUT(); return; L_08A9E5CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9E5D8; } @@ -4690,7 +4681,6 @@ L_08A9E5D8: L_08A9E644: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(64)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A9E654; } @@ -4751,7 +4741,6 @@ L_08A9E6AC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9E6C8; } @@ -4780,7 +4769,17 @@ L_08A9E6C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E6FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4808,9 +4807,7 @@ L_08A9E72C: aot_fpr_12 = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E768; } @@ -4822,9 +4819,7 @@ L_08A9E760: goto L_08A9E768; L_08A9E768: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E780; } @@ -4836,7 +4831,6 @@ L_08A9E778: goto L_08A9E780; L_08A9E780: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[15])); goto L_08A9E79C; @@ -4860,7 +4854,6 @@ L_08A9E79C: AOT_REGCACHE_SYNC_OUT(); return; L_08A9E7BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9E7C8; } @@ -4921,7 +4914,6 @@ L_08A9E820: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9E83C; } @@ -4944,7 +4936,17 @@ L_08A9E83C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E858: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4978,9 +4980,7 @@ L_08A9E888: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[14])); aot_fpr_12 = aot_fpr_12 + ctx.fpr[2]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E8DC; } @@ -4992,9 +4992,7 @@ L_08A9E8D4: goto L_08A9E8DC; L_08A9E8DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E8F4; } @@ -5006,9 +5004,7 @@ L_08A9E8EC: goto L_08A9E8F4; L_08A9E8F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9E90C; } @@ -5038,7 +5034,6 @@ L_08A9E90C: L_08A9E94C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08A9E95C; } @@ -5099,7 +5094,6 @@ L_08A9E9B4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9E9D0; } @@ -5122,7 +5116,17 @@ L_08A9E9D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9E9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -5142,7 +5146,6 @@ L_08A9EA1C: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -5153,9 +5156,7 @@ L_08A9EA1C: L_08A9EA40: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08A9EA64; } @@ -5195,7 +5196,17 @@ L_08A9EA84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EAA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -5225,7 +5236,6 @@ L_08A9EAE4: AOT_REGCACHE_SYNC_OUT(); return; L_08A9EAF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9EB04; } @@ -5286,7 +5296,6 @@ L_08A9EB5C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9EB78; } @@ -5310,7 +5319,17 @@ L_08A9EB78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EB98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5325,7 +5344,6 @@ L_08A9EB98: L_08A9EBB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9EBD4; } @@ -5333,12 +5351,10 @@ L_08A9EBB8: } L_08A9EBC4: ctx.gpr[31] = (0x08A9EBCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 538u, 0x08AD31E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9EBCCu) goto L_08A9EBCC; AOT_REGCACHE_SYNC_OUT(); return; L_08A9EBCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08A9EBDC; } @@ -5346,7 +5362,6 @@ L_08A9EBCC: } L_08A9EBD4: ctx.gpr[31] = (0x08A9EBDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 540u, 0x08AD3204u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9EBDCu) goto L_08A9EBDC; AOT_REGCACHE_SYNC_OUT(); return; L_08A9EBDC: @@ -5358,7 +5373,17 @@ L_08A9EBDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EBF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5373,7 +5398,6 @@ L_08A9EBF0: L_08A9EC10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9EC24; } @@ -5400,7 +5424,17 @@ L_08A9EC2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EC40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -5418,7 +5452,6 @@ L_08A9EC74: ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.gpr[31] = (0x08A9EC88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9EC88u) goto L_08A9EC88; AOT_REGCACHE_SYNC_OUT(); return; L_08A9EC88: @@ -5430,7 +5463,6 @@ L_08A9EC88: AOT_REGCACHE_SYNC_OUT(); return; L_08A9EC9C: ctx.gpr[31] = (0x08A9ECA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9ECA4u) goto L_08A9ECA4; AOT_REGCACHE_SYNC_OUT(); return; L_08A9ECA4: @@ -5449,12 +5481,21 @@ L_08A9ECA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9ECC8: aot_gpr_5 = (0u | 0u); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1039))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9ECDC; } @@ -5515,7 +5556,6 @@ L_08A9ED34: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9ED50; } @@ -5530,12 +5570,21 @@ L_08A9ED50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9ED58: aot_gpr_5 = (0u | 0u); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1038))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9ED6C; } @@ -5596,7 +5645,6 @@ L_08A9EDC4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9EDE0; } @@ -5611,7 +5659,17 @@ L_08A9EDE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EDE8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); @@ -5661,7 +5719,6 @@ L_08A9EE34: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9EE50; } @@ -5676,7 +5733,17 @@ L_08A9EE50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EE58: aot_gpr_5 = (0u | 0u); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1784))); @@ -5689,7 +5756,6 @@ L_08A9EE58: aot_gpr_7 = (aot_gpr_7 | aot_gpr_8); aot_gpr_6 = (aot_gpr_6 | aot_gpr_7); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08A9EE8C; } @@ -5750,7 +5816,6 @@ L_08A9EEE4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9EF00; } @@ -5765,7 +5830,17 @@ L_08A9EF00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EF08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[31]); @@ -5799,7 +5874,6 @@ L_08A9EF38: aot_gpr_6 = (aot_gpr_8 | 0u); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9EF84; } @@ -5816,7 +5890,6 @@ L_08A9EF50: } L_08A9EF5C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08A9EF6C; } @@ -5832,7 +5905,6 @@ L_08A9EF6C: aot_gpr_6 = (aot_gpr_4 + aot_gpr_7); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08A9EF50; } @@ -5851,7 +5923,17 @@ L_08A9EF8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9EF9C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_6 = (0u < aot_gpr_5 ? 1u : 0u); @@ -5900,7 +5982,6 @@ L_08A9EFE4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F000; } @@ -5915,7 +5996,17 @@ L_08A9F000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F008: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -5952,7 +6043,17 @@ L_08A9F050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F068: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_6 = (0u < aot_gpr_5 ? 1u : 0u); @@ -6001,7 +6102,6 @@ L_08A9F0B0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F0CC; } @@ -6016,7 +6116,17 @@ L_08A9F0CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F0D4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_6 = (0u < aot_gpr_5 ? 1u : 0u); @@ -6065,7 +6175,6 @@ L_08A9F11C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F138; } @@ -6080,7 +6189,17 @@ L_08A9F138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F140: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_6 = (0u < aot_gpr_5 ? 1u : 0u); @@ -6129,7 +6248,6 @@ L_08A9F188: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F1A4; } @@ -6144,7 +6262,17 @@ L_08A9F1A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F1AC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); @@ -6194,7 +6322,6 @@ L_08A9F1F8: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F214; } @@ -6209,7 +6336,17 @@ L_08A9F214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F21C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -6269,12 +6406,21 @@ L_08A9F2B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F2D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08A9F2E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 521u, 0x0886A658u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9F2E4u) goto L_08A9F2E4; AOT_REGCACHE_SYNC_OUT(); return; L_08A9F2E4: @@ -6285,12 +6431,21 @@ L_08A9F2E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F2F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08A9F304u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 525u, 0x0886A680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9F304u) goto L_08A9F304; AOT_REGCACHE_SYNC_OUT(); return; L_08A9F304: @@ -6301,13 +6456,22 @@ L_08A9F304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F314: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[31]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_4); ctx.gpr[31] = (0x08A9F328u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 526u, 0x0886A68Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9F328u) goto L_08A9F328; AOT_REGCACHE_SYNC_OUT(); return; L_08A9F328: @@ -6364,7 +6528,6 @@ L_08A9F388: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F3A4; } @@ -6381,7 +6544,17 @@ L_08A9F3A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F3B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -6447,7 +6620,17 @@ L_08A9F420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F43C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); @@ -6497,7 +6680,6 @@ L_08A9F488: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(518))); aot_gpr_5 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9F4A4; } @@ -6512,7 +6694,17 @@ L_08A9F4A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F4AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -6589,7 +6781,6 @@ L_08A9F554: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9F570; } @@ -6612,7 +6803,17 @@ L_08A9F570: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F58C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6640,7 +6841,17 @@ L_08A9F5BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F5D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -6752,7 +6963,6 @@ L_08A9F6F0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9F768; } @@ -6811,7 +7021,6 @@ L_08A9F74C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9F768; } @@ -6834,7 +7043,17 @@ L_08A9F768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F784: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(36)))))); aot_gpr_6 = (0u + static_cast(-31)); @@ -6917,7 +7136,17 @@ L_08A9F784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F8BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6938,7 +7167,6 @@ L_08A9F8D8: L_08A9F8E0: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08A9F8F4; } @@ -6961,7 +7189,17 @@ L_08A9F8F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F908: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(38)))))); @@ -6984,7 +7222,17 @@ L_08A9F93C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F948: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[16]); @@ -7050,7 +7298,17 @@ L_08A9F9E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9F9F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7084,7 +7342,6 @@ L_08A9FA2C: } L_08A9FA38: { const bool branch_taken = aot_gpr_5 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08A9FA44; } @@ -7106,7 +7363,17 @@ L_08A9FA44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FA5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7137,7 +7404,17 @@ L_08A9FA84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FAA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7160,7 +7437,17 @@ L_08A9FAC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FAD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7191,7 +7478,17 @@ L_08A9FAF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FB14: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[16]); @@ -7253,7 +7550,6 @@ L_08A9FBA4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08A9FC00; } @@ -7277,7 +7573,6 @@ L_08A9FBE8: goto L_08A9F9F8; L_08A9FBF0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A9FC08; } @@ -7310,7 +7605,17 @@ L_08A9FC0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FC1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7338,7 +7643,17 @@ L_08A9FC48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FC58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -7369,7 +7684,17 @@ L_08A9FC80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FCAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_29 + static_cast(1)); @@ -7380,7 +7705,6 @@ L_08A9FCAC: AOT_REGCACHE_SYNC_OUT(); return; L_08A9FCC0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A9FCD0; } @@ -7404,7 +7728,17 @@ L_08A9FCD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FCE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_29 + static_cast(1)); @@ -7415,7 +7749,6 @@ L_08A9FCE0: AOT_REGCACHE_SYNC_OUT(); return; L_08A9FCF4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08A9FD04; } @@ -7439,7 +7772,17 @@ L_08A9FD08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FD14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7460,7 +7803,6 @@ L_08A9FD34: aot_gpr_6 = (0u | 192u); aot_gpr_5 = (aot_gpr_5 & 192u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08A9FD68; } @@ -7471,7 +7813,6 @@ L_08A9FD4C: aot_gpr_4 = (0u < ctx.gpr[2] ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08A9FD70; } @@ -7501,7 +7842,17 @@ L_08A9FD70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FD80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7542,7 +7893,17 @@ L_08A9FDC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FDD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(39)))))); @@ -7561,7 +7922,6 @@ L_08A9FDD8: } L_08A9FE00: ctx.gpr[31] = (0x08A9FE08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 736u, 0x0887347Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9FE08u) goto L_08A9FE08; AOT_REGCACHE_SYNC_OUT(); return; L_08A9FE08: @@ -7617,7 +7977,17 @@ L_08A9FE58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FE74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(32)))))); @@ -7633,7 +8003,6 @@ L_08A9FE74: } L_08A9FE90: ctx.gpr[31] = (0x08A9FE98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 355u, 0x08A01434u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9FE98u) goto L_08A9FE98; AOT_REGCACHE_SYNC_OUT(); return; L_08A9FE98: @@ -7662,7 +8031,17 @@ L_08A9FECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FEDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[31]}; @@ -7684,7 +8063,6 @@ L_08A9FEFC: goto L_08A9FF0C; L_08A9FF0C: ctx.gpr[31] = (0x08A9FF14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 131u, 0x0890482Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9FF14u) goto L_08A9FF14; AOT_REGCACHE_SYNC_OUT(); return; L_08A9FF14: @@ -7703,7 +8081,6 @@ L_08A9FF24: AOT_REGCACHE_SYNC_OUT(); return; L_08A9FF2C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08A9FF44; } @@ -7724,7 +8101,6 @@ L_08A9FF3C: } L_08A9FF44: ctx.gpr[31] = (0x08A9FF4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 131u, 0x0890482Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08A9FF4Cu) goto L_08A9FF4C; AOT_REGCACHE_SYNC_OUT(); return; L_08A9FF4C: @@ -7757,7 +8133,17 @@ L_08A9FF64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08A9FF94: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7776,7 +8162,6 @@ L_08A9FF94: L_08A9FFC4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0167_entry, 167u, 5u, 0x08AA0024u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7787,7 +8172,6 @@ L_08A9FFD0: ctx.gpr[19] = (0u | 128u); aot_gpr_5 = (aot_gpr_5 & 192u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0167_entry, 167u, 4u, 0x08AA001Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7802,7 +8186,6 @@ L_08A9FFE4: L_08A9FFF0: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0167_entry, 167u, 3u, 0x08AA0014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0167.cpp b/profiles/vcs/generated/generated_unit_0167.cpp index 40c1867..a5d3085 100644 --- a/profiles/vcs/generated/generated_unit_0167.cpp +++ b/profiles/vcs/generated/generated_unit_0167.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0167[4096] = { - 1, 0, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, - 0, 22, 0, 23, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 29, 0, 0, 30, 0, 31, 32, 33, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 36, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 47, 0, 48, 49, 50, 0, 0, 0, 0, - 0, 51, 0, 0, 52, 0, 53, 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, - 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 66, 0, 0, 67, 0, 0, 0, 68, 0, - 0, 0, 69, 0, 0, 0, 70, 0, 0, 71, 0, 72, 0, 0, 73, 0, 0, 0, 74, 0, 75, 76, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 0, 0, 86, 0, 0, - 87, 0, 88, 0, 0, 89, 0, 90, 0, 91, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, - 0, 0, 102, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 105, 0, 106, 0, 0, 107, 0, 0, 0, 0, 108, 109, 110, 0, 0, 0, 111, 0, 0, - 0, 0, 112, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 123, 0, 0, 0, 124, - 0, 0, 125, 0, 126, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 130, 0, 131, 0, 0, 0, 132, 133, 0, 0, 0, 0, 0, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, - 0, 0, 138, 0, 139, 0, 0, 140, 141, 0, 0, 142, 0, 0, 143, 144, 0, 0, 0, 145, 0, 0, 146, 0, 147, 0, 0, 148, 0, 149, 0, 150, - 0, 0, 0, 151, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, - 156, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 160, 0, 0, 161, 0, 0, 162, 0, 0, 0, 163, 0, - 0, 164, 0, 0, 0, 165, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 169, 0, 170, 0, 0, 0, 171, 0, 0, 0, 172, 0, 0, 0, 173, 0, 174, 0, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 178, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 183, 0, 0, 0, 184, 0, 185, 0, 0, 186, 0, 0, 0, 187, - 0, 0, 0, 188, 0, 189, 0, 0, 0, 190, 0, 191, 0, 0, 192, 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, 0, 196, 0, 0, 0, 0, 197, - 0, 0, 0, 198, 0, 199, 200, 0, 0, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, 206, 0, 207, 208, 0, 0, 0, - 209, 0, 0, 0, 210, 0, 211, 0, 0, 212, 0, 0, 213, 0, 0, 214, 0, 215, 0, 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 219, - 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 223, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 232, 0, 233, - 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 240, - 0, 0, 241, 0, 0, 242, 0, 243, 0, 244, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, 0, 250, 0, 0, 0, 251, 0, 252, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, - 256, 0, 257, 0, 258, 0, 0, 259, 0, 0, 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 263, 264, 0, 0, 265, 0, 0, 266, 0, 0, - 0, 267, 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 271, 0, 0, 272, 273, 0, 0, 274, 0, 275, 0, 0, 0, 0, 0, 0, 0, 276, 0, - 277, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 285, 0, 286, 0, - 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 0, 0, 295, 0, 296, - 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 299, 0, 300, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, - 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 308, 0, 0, 309, 0, 0, 310, 0, - 0, 311, 0, 0, 312, 0, 0, 313, 0, 314, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 318, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 0, 321, 0, 322, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 327, 0, 0, 0, 328, 0, 329, 0, 0, 330, - 0, 0, 0, 331, 0, 0, 332, 0, 0, 333, 0, 0, 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 337, 0, 338, 0, 0, 0, 0, - 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 343, 0, 344, 0, 0, 345, 0, 0, 346, 0, 0, - 0, 0, 0, 347, 0, 348, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 352, 0, 0, 353, 0, 0, 0, 354, 0, 0, - 355, 0, 0, 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 0, 361, 0, 0, 362, 0, 0, 363, - 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, - 367, 0, 368, 0, 0, 369, 0, 370, 0, 371, 0, 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 376, - 0, 377, 0, 378, 379, 0, 380, 0, 0, 381, 382, 0, 0, 0, 0, 383, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 388, 0, 389, 0, 0, 390, 0, 391, - 0, 392, 0, 0, 0, 0, 393, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 0, 399, 0, - 0, 400, 0, 401, 0, 402, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 409, 0, 410, 0, 0, 411, 0, 412, 0, 413, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 416, 0, - 417, 0, 418, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 422, 0, 0, 423, 0, 424, 0, 0, 0, 0, 425, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 427, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, - 0, 0, 0, 0, 432, 433, 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 438, 439, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 440, 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 446, 447, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 448, 449, 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 453, - 0, 0, 454, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 0, 468, 0, 469, 0, 0, 0, 470, 0, 0, 0, 471, - 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 481, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, - 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, - 0, 0, 0, 0, 489, 0, 0, 0, 490, 491, 0, 0, 492, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 497, 498, 0, - 499, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 503, 504, 505, 0, 506, 0, 507, 0, 0, 0, 0, 508, 0, 0, 0, 0, - 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, - 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, - 516, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, 0, 522, 0, 523, 0, 524, 0, 525, - 0, 0, 526, 0, 527, 0, 0, 528, 0, 529, 0, 530, 0, 531, 0, 0, 532, 0, 533, 0, 534, 0, 535, 0, 0, 536, 0, 537, 538, 0, 539, 0, - 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 545, 0, 546, 0, - 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 550, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 553, 0, 0, 0, 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 0, - 559, 0, 0, 560, 0, 0, 0, 561, 562, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 565, 0, 0, 0, 0, 0, 566, 0, - 0, 0, 567, 0, 568, 0, 0, 569, 0, 0, 0, 570, 0, 571, 0, 0, 572, 0, 0, 0, 573, 0, 574, 0, 0, 575, 0, 0, 0, 576, 0, 577, - 0, 0, 578, 0, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, - 0, 0, 585, 0, 586, 0, 587, 0, 0, 0, 588, 0, 589, 0, 590, 0, 591, 0, 0, 0, 592, 593, 0, 594, 0, 0, 595, 0, 0, 0, 596, 0, - 597, 0, 0, 0, 598, 0, 599, 0, 0, 0, 600, 0, 601, 0, 0, 0, 602, 0, 603, 0, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, - 0, 609, 0, 610, 0, 0, 0, 611, 0, 612, 0, 0, 613, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 617, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, 0, 621, 0, 622, 0, 0, 0, 623, 0, 624, 0, 0, 0, 625, 0, - 626, 0, 0, 627, 0, 628, 0, 629, 0, 0, 0, 630, 0, 631, 0, 632, 0, 633, 0, 0, 0, 634, 635, 0, 636, 0, 0, 637, 0, 0, 0, 638, - 0, 639, 0, 0, 0, 640, 0, 641, 0, 0, 0, 642, 0, 643, 0, 0, 0, 644, 0, 645, 0, 0, 646, 0, 647, 0, 0, 648, 0, 649, 0, 650, - 0, 0, 651, 0, 652, 0, 0, 0, 653, 0, 654, 0, 0, 655, 0, 656, 0, 0, 657, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, - 0, 0, 659, 0, 0, 0, 660, 0, 661, 0, 662, 0, 0, 0, 663, 0, 664, 0, 665, 0, 666, 0, 0, 0, 667, 668, 0, 669, 0, 0, 0, 670, - 0, 671, 0, 0, 0, 672, 0, 673, 0, 0, 0, 674, 0, 675, 0, 0, 676, 0, 677, 0, 0, 0, 678, 0, 679, 0, 0, 680, 0, 681, 0, 0, - 682, 0, 683, 0, 684, 0, 0, 685, 0, 686, 0, 0, 0, 687, 0, 688, 0, 0, 689, 0, 0, 690, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, - 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 695, 0, 0, 696, 0, 0, 0, 697, 0, 698, 0, 0, 0, 699, 0, 700, 0, - 0, 701, 0, 702, 0, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 0, 706, 0, 707, 0, 0, 708, 0, 709, 0, 0, 0, 710, 0, 711, 0, 0, - 712, 0, 0, 713, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 718, 0, 0, - 0, 719, 0, 720, 0, 0, 721, 0, 722, 0, 723, 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, 0, 0, 0, 728, 729, 0, 730, 0, 0, 731, 0, - 0, 0, 732, 0, 733, 0, 0, 0, 734, 0, 735, 0, 0, 736, 0, 737, 0, 0, 738, 0, 0, 0, 739, 0, 740, 0, 0, 0, 741, 0, 742, 0, - 0, 743, 0, 744, 0, 0, 0, 745, 0, 746, 0, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, - 751, 0, 752, 0, 0, 0, 753, 0, 754, 0, 755, 0, 0, 756, 0, 757, 0, 0, 758, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 760, - 0, 0, 0, 761, 0, 0, 0, 762, 763, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 766, 0, 767, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 768, 0, 769, 0, 770, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 773, 0, 0, 0, 774, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 775, 0, 0, 776, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 779, 0, 780, 781, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 782, 783, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 786, 0, 787, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 788, 0, 789, 0, 790, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 793, 0, 0, 0, 794, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 795, 0, 0, 796, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 799, 0, 800, 801, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 802, 803, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, - 0, 806, 0, 0, 807, 0, 0, 0, 808, 0, 0, 0, 0, 0, 809, 0, 0, 0, 810, 0, 0, 811, 0, 0, 0, 812, 0, 0, 0, 0, 0, 813, - 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 816, 0, 0, 0, 817, 0, 0, 0, 0, 818, 0, 0, 0, 0, 819, 0, 0, - 0, 820, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 823, 0, 0, 0, 824, 0, 825, 0, 0, 0, 0, 0, 0, 0, - 0, 826, 0, 0, 827, 0, 0, 0, 0, 828, 0, 0, 829, 0, 0, 0, 830, 0, 0, 0, 831, 0, 0, 0, 0, 0, 832, 0, 0, 833, 0, 0, - 834, 0, 0, 835, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 838, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 0, 841, 0, - 0, 0, 842, 0, 0, 0, 843, 844, 0, 0, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, 847, 0, - 848, 0, 0, 0, 0, 0, 849, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, - 852, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 854, 0, 0, 0, 855, 0, 856, 0, 0, 0, 0, 857, 0, 0, 858, 0, 0, 859, 0, 0, - 0, 860, 0, 0, 0, 0, 0, 861, 0, 862, 0, 0, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 866, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 870, 0, 0, 0, 0, 871, 0, 0, 0, 0, 0, 0, 0, 872, 0, - 0, 0, 0, 873, 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 876, 0, 0, 0, 0, 0, 877, 0, 878, 0, 879, 0, 880, 0, 0, - 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, - 0, 0, 0, 0, 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, 886, 0, 0, 0, 0, - 0, 887, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, - 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, 892, 0, 0, 893, 0, 894, 0, 895, 0, 896, 0, 897, 0, 898, 0, 0, - 0, 899, 0, 0, 0, 900, 0, 901, 0, 902, 0, 0, 0, 0, 903, 0, 904, 0, 0, 0, 905, 0, 906, 0, 907, 0, 0, 0, 0, 908, 0, 0, - 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, 910, 0, 911, 0, 912, 0, 0, 0, 0, 913, 0, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, - 0, 915, 0, 0, 0, 916, 0, 917, 0, 0, 918, 0, 0, 0, 0, 0, 0, 919, 0, 0, 920, 0, 0, 921, 0, 922, 0, 0, 0, 0, 0, 923, - 0, 0, 0, 0, 0, 0, 0, 0, 924, 925, 0, 0, 0, 0, 0, 0, 0, 0, 926, 0, 927, 0, 0, 0, 928, 0, 929, 930, 0, 931, 0, 0, - 0, 0, 932, 0, 0, 0, 0, 933, 0, 934, 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 936, 0, 0, 0, 0, 937, 0, 938, 939, 0, 0, - 0, 0, 0, 0, 0, 0, 940, 0, 0, 0, 0, 0, 0, 941, 0, 0, 0, 0, 942, 0, 943, 0, 0, 944, 0, 0, 945, 0, 0, 0, 0, 946, - 0, 947, 948, 0, 949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 952, 0, 0, 0, 953, 0, 0, 0, 954, 0, 955, 956, 0, 957, 0, 0, 0, 958, 0, 959, 960, 0, 0, 0, 0, 0, 961, 0, 0, 962, 0, 0, - 963, 0, 964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 965, 966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 967, 0, - 968, 0, 0, 969, 0, 0, 970, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 972, 0, 0, 0, 0, 0, 0, 0, 0, 973, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0167[64] = { + 0x1080800C00081AA9ull, 0x2004884A49102830ull, 0x08402000404D20E9ull, 0x000404D20E920042ull, + 0x4490900204280804ull, 0x22494A2010344A44ull, 0x02109020890086A5ull, 0x804484442384A484ull, + 0x0628885488904800ull, 0xA948C99408208004ull, 0x4492802110080288ull, 0xA4A2888A000208A2ull, + 0x848A4A2889451100ull, 0x889292511A494468ull, 0xA424040051122108ull, 0x000016A488810448ull, + 0x24C4489511228950ull, 0x52010AA540533406ull, 0x0A2A0010A28042AAull, 0x0201429249280821ull, + 0x944A0200010A1208ull, 0x24A920020B084248ull, 0x92480541224900A8ull, 0xA40422A500800808ull, + 0xA51004008002865Aull, 0x043010AA44808542ull, 0x852202154A0A9420ull, 0x0322223012041C00ull, + 0x9005030031111030ull, 0x0100040802000814ull, 0x88A2128001000404ull, 0x0106004001008888ull, + 0x0800204020008290ull, 0x0857111171111310ull, 0x1080800180040010ull, 0x5A552A94AA910409ull, + 0x0002C84152042108ull, 0x414021890900A210ull, 0x81009144A2512894ull, 0x54A5145144B15454ull, + 0x451451020102528Aull, 0xA94A28A28962A8A9ull, 0x8B1545440204A514ull, 0x1024A295294528A2ull, + 0x28A5144A5144A408ull, 0x4B15454A28810209ull, 0x2020928A5144A514ull, 0x290021888104A545ull, + 0x0D40148011801A80ull, 0x046006A00A4008C0ull, 0x2000023003500520ull, 0x2108841082244112ull, + 0x2411121201441022ull, 0x408010C444444049ull, 0x2485110120000441ull, 0x0042400000808282ull, + 0x2A82804840420420ull, 0x0880002020100001ull, 0x2AA9008040020102ull, 0x0210A810215142A2ull, + 0x2D140300829204A2ull, 0x8494204034210284ull, 0x241A2D1100440016ull, 0x80400149400C0005ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0167[64] = { + 1u, 14u, 29u, 43u, 57u, 69u, 87u, 102u, 119u, 134u, 151u, 164u, 180u, 198u, 220u, 234u, + 247u, 267u, 287u, 303u, 318u, 331u, 347u, 364u, 377u, 392u, 408u, 426u, 440u, 454u, 461u, 472u, + 481u, 489u, 509u, 516u, 540u, 553u, 567u, 585u, 609u, 626u, 651u, 671u, 692u, 712u, 732u, 751u, + 768u, 782u, 795u, 806u, 820u, 834u, 848u, 860u, 868u, 881u, 887u, 899u, 915u, 932u, 947u, 963u, }; void recomp_unit_0167_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0167_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AA0000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0167[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0167[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0167[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AA0000; @@ -1147,7 +1054,6 @@ LOCAL_DISPATCH: L_08AA0000: aot_gpr_4 = (aot_gpr_4 & 192u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AA002C; } @@ -1155,7 +1061,6 @@ L_08AA0000: } L_08AA000C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0030; } @@ -1163,7 +1068,6 @@ L_08AA000C: } L_08AA0014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0030; } @@ -1171,7 +1075,6 @@ L_08AA0014: } L_08AA001C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0030; } @@ -1179,7 +1082,6 @@ L_08AA001C: } L_08AA0024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0030; } @@ -1202,7 +1104,17 @@ L_08AA0030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA004C: aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store8(ctx.gpr[7] + static_cast(0), static_cast(0u)); @@ -1239,7 +1151,6 @@ L_08AA008C: aot_gpr_2 = (aot_gpr_2 << 16u); aot_gpr_2 = (static_cast(static_cast(aot_gpr_2) >> 16u)); { const bool branch_taken = aot_gpr_2 != ctx.gpr[3]; - // nop if (branch_taken) { goto L_08AA0114; } @@ -1253,7 +1164,6 @@ L_08AA00BC: aot_gpr_2 = (0u < aot_gpr_2 ? 1u : 0u); aot_gpr_2 = (aot_gpr_2 & 255u); { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA00F0; } @@ -1274,7 +1184,6 @@ L_08AA00F0: ctx.gpr[10] = (0u < ctx.gpr[10] ? 1u : 0u); ctx.gpr[10] = (ctx.gpr[10] & 255u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08AA0114; } @@ -1295,11 +1204,20 @@ L_08AA0114: goto L_08AA012C; L_08AA012C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0134: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -1320,7 +1238,6 @@ L_08AA0150: L_08AA0160: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA018C; } @@ -1329,7 +1246,6 @@ L_08AA0160: L_08AA016C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA018C; } @@ -1365,7 +1281,17 @@ L_08AA0198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA01AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1380,7 +1306,17 @@ L_08AA01BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA01C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -1405,7 +1341,6 @@ L_08AA01F4: L_08AA0200: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AA0218; } @@ -1503,7 +1438,17 @@ L_08AA02B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA02D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1530,7 +1475,17 @@ L_08AA0304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0318: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -1555,7 +1510,6 @@ L_08AA0344: L_08AA0350: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AA0368; } @@ -1654,7 +1608,17 @@ L_08AA0408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA042C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1680,7 +1644,17 @@ L_08AA0454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0468: ctx.gpr[7] = (aot_gpr_4 + static_cast(16)); { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); @@ -1714,7 +1688,17 @@ L_08AA0468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0484: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1787,7 +1771,6 @@ L_08AA0518: AOT_REGCACHE_SYNC_OUT(); return; L_08AA0524: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA0550; } @@ -1803,7 +1786,6 @@ L_08AA0538: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA04DC; } @@ -1834,7 +1816,17 @@ L_08AA0554: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0570: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1867,7 +1859,6 @@ L_08AA05AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA05B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA0624; } @@ -1906,7 +1897,6 @@ L_08AA05F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA0600: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA061C; } @@ -1920,7 +1910,6 @@ L_08AA0608: AOT_REGCACHE_SYNC_OUT(); return; L_08AA0614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA05AC; } @@ -1949,7 +1938,17 @@ L_08AA0628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA063C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1988,7 +1987,17 @@ L_08AA067C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0694: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2022,7 +2031,17 @@ L_08AA06D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA06E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -2073,7 +2092,6 @@ L_08AA0748: ctx.gpr[18] = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA0760; } @@ -2097,7 +2115,6 @@ L_08AA0774: ctx.gpr[19] = (ctx.gpr[17] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA07BC; } @@ -2122,7 +2139,6 @@ L_08AA07A8: ctx.gpr[19] = (ctx.gpr[17] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA0788; } @@ -2157,7 +2173,17 @@ L_08AA07D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA07FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2214,7 +2240,6 @@ L_08AA086C: L_08AA087C: aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA0898; } @@ -2222,7 +2247,6 @@ L_08AA087C: } L_08AA0888: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA08CC; } @@ -2255,7 +2279,6 @@ L_08AA08BC: ctx.gpr[17] = (ctx.gpr[20] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA0898; } @@ -2291,7 +2314,17 @@ L_08AA08E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0908: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1040), ctx.gpr[16]); @@ -2334,7 +2367,6 @@ L_08AA096C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA0988: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AA09A0; } @@ -2401,7 +2433,6 @@ L_08AA09EC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA09F4: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AA0A0C; } @@ -2418,7 +2449,6 @@ L_08AA0A0C: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA09BC; } @@ -2446,7 +2476,17 @@ L_08AA0A24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0A4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2478,7 +2518,17 @@ L_08AA0A80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -2493,7 +2543,6 @@ L_08AA0A94: AOT_REGCACHE_SYNC_OUT(); return; L_08AA0ABC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA0B1C; } @@ -2565,7 +2614,17 @@ L_08AA0B2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2625,7 +2684,6 @@ L_08AA0BC4: goto L_08AA0A4C; L_08AA0BD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0BE8; } @@ -2640,7 +2698,6 @@ L_08AA0BDC: L_08AA0BE8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AA0BFC; } @@ -2648,7 +2705,6 @@ L_08AA0BE8: } L_08AA0BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0E78; } @@ -2681,7 +2737,6 @@ L_08AA0C30: goto L_08AA0A94; L_08AA0C40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA0C60; } @@ -2695,7 +2750,6 @@ L_08AA0C48: goto L_08AA0A4C; L_08AA0C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0CB8; } @@ -2722,7 +2776,6 @@ L_08AA0C7C: goto L_08AA0A94; L_08AA0C8C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA0CAC; } @@ -2736,7 +2789,6 @@ L_08AA0C94: goto L_08AA0A4C; L_08AA0CA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0CB8; } @@ -2751,7 +2803,6 @@ L_08AA0CAC: L_08AA0CB8: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AA0CCC; } @@ -2759,7 +2810,6 @@ L_08AA0CB8: } L_08AA0CC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA0E78; } @@ -2814,7 +2864,6 @@ L_08AA0D28: goto L_08AA0A94; L_08AA0D38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA0D6C; } @@ -2867,7 +2916,6 @@ L_08AA0D80: goto L_08AA0A94; L_08AA0D90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA0DC4; } @@ -2905,7 +2953,6 @@ L_08AA0DBC: L_08AA0DC4: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA0E34; } @@ -2942,7 +2989,6 @@ L_08AA0E0C: aot_gpr_5 = (ctx.gpr[22] - ctx.gpr[20]); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA0E50; } @@ -2988,7 +3034,6 @@ L_08AA0E60: goto L_08AA0B44; L_08AA0E70: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AA0B8C; } @@ -3013,7 +3058,17 @@ L_08AA0E78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3047,7 +3102,6 @@ L_08AA0EE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA0EF4: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08AA0F0C; } @@ -3085,7 +3139,17 @@ L_08AA0F28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2232u << 16u); @@ -3104,12 +3168,21 @@ L_08AA0F5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0F6C: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AA0FA4; } @@ -3118,7 +3191,6 @@ L_08AA0F6C: L_08AA0F7C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8344)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AA0F94; } @@ -3127,7 +3199,6 @@ L_08AA0F7C: L_08AA0F88: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AA0F9C; } @@ -3154,11 +3225,20 @@ L_08AA0FA4: goto L_08AA0FA8; L_08AA0FA8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA0FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (0u | 1u); @@ -3195,7 +3275,6 @@ L_08AA1010: goto L_08AA0F6C; L_08AA1018: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA1070; } @@ -3204,7 +3283,6 @@ L_08AA1018: L_08AA1020: aot_gpr_4 = (0u | 16384u); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AA103C; } @@ -3232,7 +3310,6 @@ L_08AA1044: aot_gpr_5 = (ctx.gpr[16] >> (aot_gpr_4 & 31u)); aot_gpr_5 = (aot_gpr_5 & 15u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AA1060; } @@ -3257,7 +3334,6 @@ L_08AA1070: aot_gpr_4 = (61440u << 16u); aot_gpr_4 = (ctx.gpr[16] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA10C8; } @@ -3269,7 +3345,6 @@ L_08AA1080: goto L_08AA0F6C; L_08AA1088: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA10C8; } @@ -3284,7 +3359,6 @@ L_08AA109C: aot_gpr_5 = (ctx.gpr[16] >> (aot_gpr_4 & 31u)); aot_gpr_5 = (aot_gpr_5 & 15u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AA10B8; } @@ -3321,7 +3395,6 @@ L_08AA10D8: L_08AA10DC: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA10F4; } @@ -3360,7 +3433,17 @@ L_08AA1108: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1128: { const bool branch_taken = aot_gpr_4 == 0u; aot_gpr_2 = (0u | 0u); @@ -3375,7 +3458,6 @@ L_08AA1130: L_08AA1134: aot_gpr_6 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1144; } @@ -3387,7 +3469,6 @@ L_08AA1140: L_08AA1144: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 4u)); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA1134; } @@ -3395,11 +3476,20 @@ L_08AA1144: } L_08AA1150: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1158: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); @@ -3422,7 +3512,6 @@ L_08AA1178: } L_08AA1180: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA119C; } @@ -3431,7 +3520,6 @@ L_08AA1180: L_08AA1188: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA1214; } @@ -3488,7 +3576,6 @@ L_08AA11E4: } L_08AA11F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA120C; } @@ -3497,7 +3584,6 @@ L_08AA11F0: L_08AA11F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA12E4; } @@ -3567,7 +3653,6 @@ L_08AA1264: } L_08AA1274: aot_gpr_31 = (0x08AA127Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA127Cu) goto L_08AA127C; AOT_REGCACHE_SYNC_OUT(); return; L_08AA127C: @@ -3625,7 +3710,6 @@ L_08AA12D4: } L_08AA12E4: aot_gpr_31 = (0x08AA12ECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA12ECu) goto L_08AA12EC; AOT_REGCACHE_SYNC_OUT(); return; L_08AA12EC: @@ -3656,7 +3740,17 @@ L_08AA1314: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA132C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -3726,14 +3820,34 @@ L_08AA13A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA13B8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA13C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -3836,7 +3950,17 @@ L_08AA1460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA14A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3889,7 +4013,6 @@ L_08AA14FC: L_08AA150C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(631)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AA1564; } @@ -3952,7 +4075,17 @@ L_08AA156C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1584: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3986,7 +4119,6 @@ L_08AA15CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA15D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA16FC; } @@ -4000,7 +4132,6 @@ L_08AA15DC: L_08AA15E8: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AA1664; } @@ -4012,7 +4143,6 @@ L_08AA15F4: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA1664; } @@ -4067,7 +4197,6 @@ L_08AA1664: L_08AA1674: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AA16F0; } @@ -4079,7 +4208,6 @@ L_08AA1680: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA16F0; } @@ -4170,7 +4298,17 @@ L_08AA172C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA175C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4185,7 +4323,6 @@ L_08AA175C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA1780: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA1794; } @@ -4229,7 +4366,17 @@ L_08AA17B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA17C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(620))); @@ -4246,7 +4393,6 @@ L_08AA17C8: L_08AA17E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA1804; } @@ -4262,7 +4408,6 @@ L_08AA17F4: } L_08AA17FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA1828; } @@ -4270,7 +4415,6 @@ L_08AA17FC: } L_08AA1804: aot_gpr_31 = (0x08AA180Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA180Cu) goto L_08AA180C; AOT_REGCACHE_SYNC_OUT(); return; L_08AA180C: @@ -4302,14 +4446,34 @@ L_08AA1828: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA183C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(620))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1844: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -4342,7 +4506,17 @@ L_08AA187C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA18A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-3208))); @@ -4363,7 +4537,6 @@ L_08AA18D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(336))); aot_gpr_4 = (aot_gpr_4 & 61440u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA18F4; } @@ -4371,7 +4544,6 @@ L_08AA18D0: } L_08AA18E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA1920; } @@ -4392,7 +4564,6 @@ L_08AA18F4: goto L_08AA0F6C; L_08AA18FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA1920; } @@ -4415,7 +4586,6 @@ L_08AA1918: } L_08AA1920: aot_gpr_31 = (0x08AA1928u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA1928u) goto L_08AA1928; AOT_REGCACHE_SYNC_OUT(); return; L_08AA1928: @@ -4434,7 +4604,6 @@ L_08AA193C: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA19D0; } @@ -4443,7 +4612,6 @@ L_08AA193C: L_08AA195C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA198C; } @@ -4458,7 +4626,6 @@ L_08AA1968: L_08AA1978: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08AA1994; } @@ -4466,7 +4633,6 @@ L_08AA1978: } L_08AA1984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA19D0; } @@ -4482,7 +4648,6 @@ L_08AA198C: } L_08AA1994: aot_gpr_31 = (0x08AA199Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA199Cu) goto L_08AA199C; AOT_REGCACHE_SYNC_OUT(); return; L_08AA199C: @@ -4518,7 +4683,17 @@ L_08AA19D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA19E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[16]); @@ -4540,7 +4715,6 @@ L_08AA1A14: ctx.gpr[18] = (61440u << 16u); aot_gpr_5 = (aot_gpr_4 & ctx.gpr[18]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA1A3C; } @@ -4548,7 +4722,6 @@ L_08AA1A14: } L_08AA1A28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA1A6C; } @@ -4594,7 +4767,6 @@ L_08AA1A64: L_08AA1A6C: aot_gpr_4 = (aot_gpr_4 & 61440u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA1B2C; } @@ -4606,7 +4778,6 @@ L_08AA1A78: goto L_08AA0F6C; L_08AA1A80: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA1B2C; } @@ -4614,7 +4785,6 @@ L_08AA1A80: } L_08AA1A88: aot_gpr_31 = (0x08AA1A90u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA1A90u) goto L_08AA1A90; AOT_REGCACHE_SYNC_OUT(); return; L_08AA1A90: @@ -4633,7 +4803,6 @@ L_08AA1AA4: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA1B2C; } @@ -4648,7 +4817,6 @@ L_08AA1AC4: L_08AA1AD4: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AA1B2C; } @@ -4656,7 +4824,6 @@ L_08AA1AD4: } L_08AA1AE0: aot_gpr_31 = (0x08AA1AE8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA1AE8u) goto L_08AA1AE8; AOT_REGCACHE_SYNC_OUT(); return; L_08AA1AE8: @@ -4678,7 +4845,6 @@ L_08AA1AFC: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA1B2C; } @@ -4703,7 +4869,17 @@ L_08AA1B30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4748,7 +4924,17 @@ L_08AA1B94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1BA4: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(388))); @@ -4763,7 +4949,6 @@ L_08AA1BB4: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(389))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AA1BD4; } @@ -4773,7 +4958,6 @@ L_08AA1BC4: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2))); ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(390))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AA1C30; } @@ -4820,7 +5004,6 @@ L_08AA1C30: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(392))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA1C60; } @@ -4830,7 +5013,6 @@ L_08AA1C40: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(1))); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(393))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA1C60; } @@ -4840,7 +5022,6 @@ L_08AA1C50: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(2))); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(394))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA1CC0; } @@ -4886,11 +5067,20 @@ L_08AA1CA4: goto L_08AA1CC0; L_08AA1CC0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1CC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(353))); @@ -4910,7 +5100,6 @@ L_08AA1CC8: L_08AA1CF0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-3212))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA1D10; } @@ -4919,7 +5108,6 @@ L_08AA1CF0: L_08AA1CFC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-3211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA1D8C; } @@ -5060,7 +5248,6 @@ L_08AA1E60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(353))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5068,13 +5255,11 @@ L_08AA1E60: } L_08AA1E9C: aot_gpr_31 = (0x08AA1EA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA1EA4u) goto L_08AA1EA4; AOT_REGCACHE_SYNC_OUT(); return; L_08AA1EA4: aot_gpr_6 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5099,7 +5284,6 @@ L_08AA1EC4: goto L_08AA1ED4; L_08AA1ED4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5109,7 +5293,6 @@ L_08AA1EDC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(548))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5119,7 +5302,6 @@ L_08AA1EEC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(552))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5129,7 +5311,6 @@ L_08AA1EFC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(549))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(1))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5139,7 +5320,6 @@ L_08AA1F0C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(553))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(1))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5149,7 +5329,6 @@ L_08AA1F1C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(550))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(2))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5159,7 +5338,6 @@ L_08AA1F2C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(554))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(2))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA1FC4; } @@ -5221,7 +5399,17 @@ L_08AA1FC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA1FE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-3212))); @@ -5242,7 +5430,6 @@ L_08AA1FE0: L_08AA2010: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-3211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA2098; } @@ -5250,7 +5437,6 @@ L_08AA2010: } L_08AA201C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2110; } @@ -5353,7 +5539,6 @@ L_08AA2120: L_08AA2124: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA227C; } @@ -5403,7 +5588,6 @@ L_08AA2174: goto L_08AA2178; L_08AA2178: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA227C; } @@ -5453,7 +5637,6 @@ L_08AA21C4: goto L_08AA21C8; L_08AA21C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA227C; } @@ -5553,7 +5736,17 @@ L_08AA22BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA22DC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (0u | 0u); @@ -5574,7 +5767,6 @@ L_08AA22F0: L_08AA2300: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); { const bool branch_taken = aot_gpr_6 == aot_gpr_2; - // nop if (branch_taken) { goto L_08AA2374; } @@ -5587,7 +5779,6 @@ L_08AA230C: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AA236C; } @@ -5599,7 +5790,6 @@ L_08AA2328: ctx.gpr[7] = (0u < ctx.gpr[7] ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AA236C; } @@ -5609,7 +5799,6 @@ L_08AA2340: ctx.gpr[7] = (aot_gpr_6 | 0u); aot_gpr_6 = (0u | 1u); { const bool branch_taken = ctx.gpr[7] == aot_gpr_6; - // nop if (branch_taken) { goto L_08AA2364; } @@ -5618,7 +5807,6 @@ L_08AA2340: L_08AA2350: ctx.gpr[7] = (0u + static_cast(-939)); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA237C; } @@ -5659,7 +5847,6 @@ L_08AA2374: L_08AA237C: ctx.gpr[7] = (0u | 194u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA2390; } @@ -5676,7 +5863,6 @@ L_08AA2388: L_08AA2390: ctx.gpr[7] = (0u | 275u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA23A4; } @@ -5696,7 +5882,6 @@ L_08AA23A4: goto L_08AA23AC; L_08AA23AC: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA23D8; } @@ -5713,7 +5898,6 @@ L_08AA23B4: } L_08AA23C0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA23D0; } @@ -5738,7 +5922,6 @@ L_08AA23D0: L_08AA23D8: aot_gpr_6 = (0u | 237u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AA23EC; } @@ -5746,7 +5929,6 @@ L_08AA23D8: } L_08AA23E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA23F0; } @@ -5757,11 +5939,20 @@ L_08AA23EC: goto L_08AA23F0; L_08AA23F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA23F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5779,7 +5970,17 @@ L_08AA240C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5797,7 +5998,17 @@ L_08AA2434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2448: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5811,7 +6022,6 @@ L_08AA2448: L_08AA2464: aot_gpr_4 = (aot_gpr_2 & ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2478; } @@ -5842,13 +6052,22 @@ L_08AA2480: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2498: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(42)))))); ctx.gpr[7] = (0u | 1u); aot_gpr_6 = (aot_gpr_6 & 3u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA24B8; } @@ -5868,11 +6087,20 @@ L_08AA24B8: goto L_08AA24BC; L_08AA24BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA24C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -5911,7 +6139,6 @@ L_08AA2524: goto L_08AA2534; L_08AA2534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA25A0; } @@ -5943,7 +6170,6 @@ L_08AA256C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); aot_gpr_6 = (aot_gpr_6 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AA25A0; } @@ -5952,7 +6178,6 @@ L_08AA256C: L_08AA2580: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(624)))))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AA25A0; } @@ -5973,7 +6198,6 @@ L_08AA25A0: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[20]); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AA2524; } @@ -5995,14 +6219,34 @@ L_08AA25B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA25D8: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-3208), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA25E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); @@ -6024,7 +6268,6 @@ L_08AA25F8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA26B0; } @@ -6033,7 +6276,6 @@ L_08AA2608: L_08AA2610: aot_gpr_6 = (0u | 4u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AA2634; } @@ -6048,7 +6290,6 @@ L_08AA261C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA262C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA26B0; } @@ -6057,7 +6298,6 @@ L_08AA262C: L_08AA2634: aot_gpr_6 = (0u | 5u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AA2658; } @@ -6072,7 +6312,6 @@ L_08AA2640: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA26B0; } @@ -6081,7 +6320,6 @@ L_08AA2650: L_08AA2658: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AA267C; } @@ -6096,7 +6334,6 @@ L_08AA2664: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA26B0; } @@ -6105,7 +6342,6 @@ L_08AA2674: L_08AA267C: aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AA26A0; } @@ -6120,7 +6356,6 @@ L_08AA2688: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2698: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA26B0; } @@ -6140,7 +6375,17 @@ L_08AA26B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA26BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -6185,7 +6430,6 @@ L_08AA2718: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AA2730; } @@ -6230,7 +6474,6 @@ L_08AA2750: goto L_08AA2754; L_08AA2754: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA27C8; } @@ -6239,7 +6482,6 @@ L_08AA2754: L_08AA275C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2780; } @@ -6254,7 +6496,6 @@ L_08AA2768: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2778: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2830; } @@ -6269,7 +6510,6 @@ L_08AA2780: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2790: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA27B0; } @@ -6284,7 +6524,6 @@ L_08AA2798: AOT_REGCACHE_SYNC_OUT(); return; L_08AA27A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2830; } @@ -6299,7 +6538,6 @@ L_08AA27B0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA27C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2830; } @@ -6313,7 +6551,6 @@ L_08AA27C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA27D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA27F8; } @@ -6346,7 +6583,6 @@ L_08AA27F8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2804: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2824; } @@ -6361,7 +6597,6 @@ L_08AA280C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA281C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2830; } @@ -6375,7 +6610,6 @@ L_08AA2824: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2830: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AA2844; } @@ -6400,7 +6634,17 @@ L_08AA2844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2860: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -6432,7 +6676,6 @@ L_08AA28A0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA28B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA28D0; } @@ -6447,7 +6690,6 @@ L_08AA28B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA28C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2A34; } @@ -6462,7 +6704,6 @@ L_08AA28D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA28E0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA2900; } @@ -6477,7 +6718,6 @@ L_08AA28E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA28F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2A34; } @@ -6505,7 +6745,6 @@ L_08AA291C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AA2934; } @@ -6550,7 +6789,6 @@ L_08AA2954: goto L_08AA2958; L_08AA2958: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA29CC; } @@ -6559,7 +6797,6 @@ L_08AA2958: L_08AA2960: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2984; } @@ -6574,7 +6811,6 @@ L_08AA296C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA297C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2A34; } @@ -6589,7 +6825,6 @@ L_08AA2984: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2994: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA29B4; } @@ -6604,7 +6839,6 @@ L_08AA299C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA29AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2A34; } @@ -6619,7 +6853,6 @@ L_08AA29B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA29C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2A34; } @@ -6633,7 +6866,6 @@ L_08AA29CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA29D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA29FC; } @@ -6666,7 +6898,6 @@ L_08AA29FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2A08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2A28; } @@ -6681,7 +6912,6 @@ L_08AA2A10: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2A20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2A34; } @@ -6695,7 +6925,6 @@ L_08AA2A28: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2A34: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AA2A48; } @@ -6720,7 +6949,17 @@ L_08AA2A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2A64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6756,7 +6995,6 @@ L_08AA2AA8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AA2AC0; } @@ -6801,7 +7039,6 @@ L_08AA2AE0: goto L_08AA2AE4; L_08AA2AE4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA2B04; } @@ -6816,7 +7053,6 @@ L_08AA2AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2AFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2BC8; } @@ -6831,7 +7067,6 @@ L_08AA2B04: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA2B34; } @@ -6846,7 +7081,6 @@ L_08AA2B1C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2BC8; } @@ -6860,7 +7094,6 @@ L_08AA2B34: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2B60; } @@ -6875,7 +7108,6 @@ L_08AA2B48: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2BC8; } @@ -6889,7 +7121,6 @@ L_08AA2B60: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B6C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2B90; } @@ -6908,7 +7139,6 @@ L_08AA2B80: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2BC8; } @@ -6922,7 +7152,6 @@ L_08AA2B90: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2B9C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2BBC; } @@ -6937,7 +7166,6 @@ L_08AA2BA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2BB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2BC8; } @@ -6968,7 +7196,17 @@ L_08AA2BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -6997,7 +7235,6 @@ L_08AA2C28: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2C34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2C78; } @@ -7006,7 +7243,6 @@ L_08AA2C34: L_08AA2C3C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2C60; } @@ -7021,7 +7257,6 @@ L_08AA2C48: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2D00; } @@ -7036,7 +7271,6 @@ L_08AA2C60: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2D00; } @@ -7050,7 +7284,6 @@ L_08AA2C78: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2C84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2CC8; } @@ -7059,7 +7292,6 @@ L_08AA2C84: L_08AA2C8C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2CB0; } @@ -7074,7 +7306,6 @@ L_08AA2C98: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2CA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2D00; } @@ -7089,7 +7320,6 @@ L_08AA2CB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2D00; } @@ -7103,7 +7333,6 @@ L_08AA2CC8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2CD4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2CF4; } @@ -7118,7 +7347,6 @@ L_08AA2CDC: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2D00; } @@ -7148,7 +7376,17 @@ L_08AA2D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2D24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -7178,7 +7416,6 @@ L_08AA2D5C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2D6C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA2D8C; } @@ -7193,7 +7430,6 @@ L_08AA2D74: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2D84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2EB0; } @@ -7221,7 +7457,6 @@ L_08AA2DA8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0)))))); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AA2DC0; } @@ -7266,7 +7501,6 @@ L_08AA2DE0: goto L_08AA2DE4; L_08AA2DE4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA2E28; } @@ -7275,7 +7509,6 @@ L_08AA2DE4: L_08AA2DEC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2E10; } @@ -7290,7 +7523,6 @@ L_08AA2DF8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2EB0; } @@ -7305,7 +7537,6 @@ L_08AA2E10: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2EB0; } @@ -7319,7 +7550,6 @@ L_08AA2E28: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2E78; } @@ -7328,7 +7558,6 @@ L_08AA2E34: L_08AA2E3C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA2E60; } @@ -7343,7 +7572,6 @@ L_08AA2E48: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2EB0; } @@ -7358,7 +7586,6 @@ L_08AA2E60: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2EB0; } @@ -7372,7 +7599,6 @@ L_08AA2E78: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2EA4; } @@ -7387,7 +7613,6 @@ L_08AA2E8C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2EB0; } @@ -7417,7 +7642,17 @@ L_08AA2EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2ED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7437,7 +7672,6 @@ L_08AA2EF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2F00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2F20; } @@ -7452,7 +7686,6 @@ L_08AA2F08: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2F18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA2F48; } @@ -7471,7 +7704,6 @@ L_08AA2F28: AOT_REGCACHE_SYNC_OUT(); return; L_08AA2F34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA2F48; } @@ -7496,7 +7728,17 @@ L_08AA2F48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2F60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7511,7 +7753,6 @@ L_08AA2F7C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(3))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA2F9C; } @@ -7542,7 +7783,17 @@ L_08AA2FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA2FB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7554,7 +7805,6 @@ L_08AA2FB4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_5 = (static_cast(ctx.gpr[16]) < 240 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA2FF4; } @@ -7563,7 +7813,6 @@ L_08AA2FB4: L_08AA2FE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5840))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA3024; } @@ -7600,7 +7849,6 @@ L_08AA301C: } L_08AA3024: aot_gpr_31 = (0x08AA302Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA302Cu) goto L_08AA302C; AOT_REGCACHE_SYNC_OUT(); return; L_08AA302C: @@ -7631,7 +7879,17 @@ L_08AA3060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3070: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7643,7 +7901,6 @@ L_08AA3070: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_5 = (static_cast(ctx.gpr[16]) < 240 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA30B0; } @@ -7652,7 +7909,6 @@ L_08AA3070: L_08AA309C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5840))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA30E0; } @@ -7689,7 +7945,6 @@ L_08AA30D8: } L_08AA30E0: aot_gpr_31 = (0x08AA30E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA30E8u) goto L_08AA30E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AA30E8: @@ -7720,7 +7975,17 @@ L_08AA311C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA312C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7732,7 +7997,6 @@ L_08AA312C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_5 = (static_cast(ctx.gpr[16]) < 240 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA316C; } @@ -7741,7 +8005,6 @@ L_08AA312C: L_08AA3158: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5840))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA319C; } @@ -7778,7 +8041,6 @@ L_08AA3194: } L_08AA319C: aot_gpr_31 = (0x08AA31A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA31A4u) goto L_08AA31A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AA31A4: @@ -7809,7 +8071,17 @@ L_08AA31D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA31E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -7821,7 +8093,6 @@ L_08AA31E8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_5 = (static_cast(ctx.gpr[16]) < 240 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA3228; } @@ -7830,7 +8101,6 @@ L_08AA31E8: L_08AA3214: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5840))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA3258; } @@ -7867,7 +8137,6 @@ L_08AA3250: } L_08AA3258: aot_gpr_31 = (0x08AA3260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA3260u) goto L_08AA3260; AOT_REGCACHE_SYNC_OUT(); return; L_08AA3260: @@ -7898,7 +8167,17 @@ L_08AA3294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA32A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[22]); @@ -7993,7 +8272,6 @@ L_08AA337C: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(631), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(631)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AA3404; } @@ -8092,7 +8370,6 @@ L_08AA3448: goto L_08AA3458; L_08AA3458: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA359C; } @@ -8124,7 +8401,6 @@ L_08AA3490: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA359C; } @@ -8133,7 +8409,6 @@ L_08AA3490: L_08AA34A4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(624)))))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AA359C; } @@ -8250,7 +8525,6 @@ L_08AA359C: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AA3448; } @@ -8274,7 +8548,17 @@ L_08AA35B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA35DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -8306,7 +8590,17 @@ L_08AA3618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3628: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); @@ -8345,7 +8639,6 @@ L_08AA3680: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA36DC; } @@ -8363,7 +8656,6 @@ L_08AA36B0: ctx.gpr[20] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(99) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA36C8; } @@ -8404,7 +8696,6 @@ L_08AA36F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7868))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA3724; } @@ -8421,7 +8712,6 @@ L_08AA3704: AOT_REGCACHE_SYNC_OUT(); return; L_08AA371C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA373C; } @@ -8451,7 +8741,17 @@ L_08AA373C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA375C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-29148))); @@ -8462,15 +8762,11 @@ L_08AA375C: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(ctx.gpr[7]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (0u | 60u); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[7]); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[8] = (0u | 100u); aot_gpr_6 = (ctx.lo); aot_gpr_4 = (aot_gpr_4 + static_cast(14)); ctx.gpr[7] = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(ctx.gpr[8]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_6 = (ctx.hi); @@ -8485,7 +8781,17 @@ L_08AA37B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA37C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -8510,7 +8816,6 @@ L_08AA37D8: aot_fpr_12 = std::bit_cast(ctx.gpr[9]); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 1000u); if (branch_taken) { @@ -8543,7 +8848,6 @@ L_08AA3844: ctx.gpr[10] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(57))); ctx.gpr[7] = (ctx.lo); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08AA38EC; } @@ -8557,7 +8861,6 @@ L_08AA3858: ctx.gpr[8] = (ctx.gpr[8] + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_08AA388C; } @@ -8577,7 +8880,6 @@ L_08AA3878: L_08AA388C: ctx.gpr[8] = (static_cast(ctx.gpr[7]) < 12 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AA38E4; } @@ -8615,7 +8917,6 @@ L_08AA38C4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA38DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA38F4; } @@ -8640,7 +8941,17 @@ L_08AA38F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3900: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -8679,7 +8990,6 @@ L_08AA3974: ctx.gpr[11] = (ctx.gpr[11] & 65535u); aot_gpr_2 = (static_cast(ctx.gpr[11]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AA3974; } @@ -8703,7 +9013,6 @@ L_08AA3994: ctx.gpr[9] = (ctx.gpr[9] & 65535u); ctx.gpr[10] = (static_cast(ctx.gpr[9]) < 3 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08AA3950; } @@ -8730,7 +9039,6 @@ L_08AA3A04: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA3A04; } @@ -8783,7 +9091,17 @@ L_08AA3A78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3A9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8799,7 +9117,6 @@ L_08AA3A9C: L_08AA3AC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA3ADC; } @@ -8807,7 +9124,6 @@ L_08AA3AC0: } L_08AA3ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3AE4; } @@ -8815,7 +9131,6 @@ L_08AA3ACC: } L_08AA3AD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3B74; } @@ -8823,7 +9138,6 @@ L_08AA3AD4: } L_08AA3ADC: aot_gpr_31 = (0x08AA3AE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA3AE4u) goto L_08AA3AE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AA3AE4: @@ -8833,7 +9147,6 @@ L_08AA3AE4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA3AEC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AA3B74; } @@ -8849,7 +9162,6 @@ L_08AA3B04: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(56), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA3B24; } @@ -8882,7 +9194,6 @@ L_08AA3B40: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(74), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA3B60; } @@ -8921,14 +9232,23 @@ L_08AA3B74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3B90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(333))); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA3BD0; } @@ -8965,7 +9285,17 @@ L_08AA3BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3BE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -8993,7 +9323,6 @@ L_08AA3C14: L_08AA3C1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA3CF4; } @@ -9072,7 +9401,6 @@ L_08AA3CA4: goto L_08AA3CC8; L_08AA3CC8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AA3CE8; } @@ -9087,7 +9415,6 @@ L_08AA3CD0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA3CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3CEC; } @@ -9098,7 +9425,6 @@ L_08AA3CE8: goto L_08AA3CEC; L_08AA3CEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3D08; } @@ -9127,7 +9453,17 @@ L_08AA3D08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3D1C: ctx.gpr[8] = (0u | 0u); aot_gpr_6 = (0u | 1u); @@ -9139,7 +9475,6 @@ L_08AA3D24: ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[7]); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA3D54; } @@ -9157,7 +9492,6 @@ L_08AA3D54: ctx.gpr[8] = (ctx.gpr[8] & 65535u); ctx.gpr[7] = (static_cast(ctx.gpr[8]) < 1 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AA3D24; } @@ -9165,11 +9499,20 @@ L_08AA3D54: } L_08AA3D68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3D70: ctx.gpr[7] = (0u | 0u); goto L_08AA3D74; @@ -9182,7 +9525,6 @@ L_08AA3D74: aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(68))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA3DB4; } @@ -9202,7 +9544,6 @@ L_08AA3DB4: ctx.gpr[7] = (ctx.gpr[7] & 65535u); aot_gpr_6 = (static_cast(ctx.gpr[7]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AA3D74; } @@ -9210,11 +9551,20 @@ L_08AA3DB4: } L_08AA3DC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3DD0: ctx.gpr[7] = (aot_gpr_6 & 255u); aot_gpr_6 = (0u | 0u); @@ -9223,7 +9573,6 @@ L_08AA3DD0: L_08AA3DDC: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA3E04; } @@ -9242,7 +9591,6 @@ L_08AA3DE8: } L_08AA3DFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3E08; } @@ -9253,11 +9601,20 @@ L_08AA3E04: goto L_08AA3E08; L_08AA3E08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA3E10: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -9294,7 +9651,6 @@ L_08AA3E58: ctx.gpr[19] = (ctx.gpr[19] + static_cast(68)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA3FFC; } @@ -9319,7 +9675,6 @@ L_08AA3E90: AOT_REGCACHE_SYNC_OUT(); return; L_08AA3EA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3EAC; } @@ -9330,7 +9685,6 @@ L_08AA3EA8: goto L_08AA3EAC; L_08AA3EAC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AA3ECC; } @@ -9345,7 +9699,6 @@ L_08AA3EB4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA3EC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA3ED0; } diff --git a/profiles/vcs/generated/generated_unit_0168.cpp b/profiles/vcs/generated/generated_unit_0168.cpp index e133549..189b3b2 100644 --- a/profiles/vcs/generated/generated_unit_0168.cpp +++ b/profiles/vcs/generated/generated_unit_0168.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0168[4089] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 24, 0, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, - 0, 45, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, - 0, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 71, 0, 0, 72, 0, 0, 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, - 0, 0, 0, 0, 82, 83, 84, 0, 85, 86, 87, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, - 0, 92, 0, 0, 93, 0, 0, 94, 0, 95, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 100, 101, - 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 107, - 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 110, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, - 114, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 118, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, - 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 0, 0, 0, - 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 130, 0, 0, 131, 0, 0, 132, 133, 0, 0, 0, - 134, 0, 135, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, - 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 0, 0, 146, 0, - 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 150, 0, 0, 0, 0, 0, - 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 155, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 0, 0, 0, - 0, 162, 0, 163, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, - 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, - 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, - 172, 0, 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, 0, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 0, 0, 0, 183, 0, 184, 185, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 0, 0, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 0, 200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 203, 204, 0, 205, 0, 0, 0, 0, 0, 206, 0, 0, 207, 0, 208, 0, 0, - 209, 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 219, 0, - 0, 0, 220, 0, 0, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 0, 227, 0, 228, 0, 229, 0, 230, 0, 0, 0, 0, 231, 0, - 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 236, 237, 0, 238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, - 0, 0, 243, 0, 0, 244, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 250, 0, 0, 251, 252, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 254, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 257, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, - 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 265, 0, 0, 0, 0, 266, 267, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 270, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, - 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 285, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 297, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 300, - 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 304, 0, 0, 0, 0, 0, 0, - 305, 0, 0, 306, 0, 0, 307, 308, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, - 321, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 324, 0, 0, 325, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, - 330, 0, 0, 0, 331, 0, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 337, - 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, - 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 346, 0, 0, 347, 0, 348, 0, 0, 349, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 353, 354, 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 357, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 364, 0, 365, 366, 0, 0, - 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 371, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 377, - 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 0, 381, 0, 382, 383, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, - 0, 386, 0, 387, 0, 0, 388, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, 395, 0, 0, - 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 399, 400, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 403, 0, 404, 0, 0, 405, 0, 0, 0, 406, 0, 407, 408, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, 0, 0, 414, 0, 415, 0, 0, 416, 0, 0, 0, 417, 0, 418, 419, 0, 0, 0, 0, - 0, 420, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 423, 0, 424, 425, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 430, 0, 0, 0, 0, 431, 0, 432, 0, 0, 433, 0, 0, - 434, 0, 0, 0, 435, 0, 436, 437, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, - 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 458, 459, 0, 0, 460, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 466, 0, 0, 0, 0, 0, 467, 0, 468, 0, 469, - 0, 470, 471, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 475, 0, 0, 476, - 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 478, 479, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 487, 0, 0, 0, 0, 488, 0, 0, - 489, 0, 0, 0, 490, 0, 491, 0, 492, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 494, 0, 0, 495, 0, 0, 496, 0, 497, 498, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 500, 0, 0, 0, 501, 0, 502, 0, 503, 504, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 507, 0, 508, 0, 509, 510, - 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 519, 0, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, - 0, 0, 522, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 0, 0, 530, 0, 0, - 0, 531, 0, 532, 0, 533, 0, 534, 0, 0, 535, 0, 0, 536, 0, 0, 537, 0, 538, 539, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 543, 0, 544, 0, 545, 0, 546, 0, 0, 547, 0, 548, - 0, 549, 0, 0, 0, 0, 0, 550, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 553, 0, 554, 0, 0, 0, 555, 0, 556, - 0, 557, 0, 0, 0, 0, 0, 558, 0, 559, 0, 560, 561, 0, 0, 562, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 565, 0, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, - 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 572, 573, 0, 574, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 578, 0, 579, 0, 0, 580, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 582, 0, 583, 0, 584, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 588, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 594, 0, 0, - 595, 0, 0, 0, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, - 0, 607, 0, 0, 0, 0, 608, 0, 0, 0, 0, 609, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 0, 612, 0, 0, 0, 0, 613, 614, 0, 0, - 615, 0, 0, 0, 0, 0, 616, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, 620, - 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 630, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0168[64] = { + 0x1084210842010081ull, 0x0000000000002000ull, 0x0240902000000000ull, 0x0480000240902409ull, + 0x0108000000000002ull, 0x0402400004004001ull, 0x0222020800804040ull, 0x4008044402220222ull, + 0x8408404104004022ull, 0xAAA8048900089210ull, 0xD201429210203770ull, 0x210C080490024088ull, + 0x0A44040101052081ull, 0x0402228519204412ull, 0x0500808044508008ull, 0x104100000823240Aull, + 0x080000102000820Aull, 0x0001212120000009ull, 0x080D090400050400ull, 0x0000004880000000ull, + 0x0024009002400000ull, 0x2480082000000000ull, 0x008120912905C080ull, 0x00000A0444288000ull, + 0x2C88004842A85480ull, 0x0008016440009200ull, 0x0016440020000000ull, 0x4000020003080009ull, + 0x0080461000012208ull, 0x0408881040010202ull, 0x2400102204090409ull, 0x8089440810400102ull, + 0x800428C902840004ull, 0x0000840400000000ull, 0x2222488911120001ull, 0x0000008881112111ull, + 0x2000010040000400ull, 0x00000400000CA510ull, 0x000000000018105Aull, 0x3444000000004402ull, + 0x84A900004200A008ull, 0x2914284A10106892ull, 0x1068942041A20001ull, 0x0D1284A000400000ull, + 0x25094000820D1202ull, 0x82142400000020D1ull, 0x0000000814010000ull, 0x2400008000210020ull, + 0x4000293005002000ull, 0x94010806A8280400ull, 0x0200000000084C02ull, 0x0000095121480408ull, + 0xD4409A8800020349ull, 0x0100001000801080ull, 0x2554020C40928080ull, 0xA5520000108D24AAull, + 0x01209A82A2880882ull, 0x0000D80404820904ull, 0x0000100012850000ull, 0x2A008108050804A8ull, + 0x0000000040002AA1ull, 0x1008200000280000ull, 0x8240044130850842ull, 0x0148002401400502ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0168[64] = { + 1u, 12u, 13u, 18u, 28u, 31u, 37u, 45u, 56u, 66u, 82u, 102u, 114u, 126u, 141u, 151u, + 162u, 169u, 177u, 187u, 190u, 196u, 201u, 215u, 223u, 239u, 248u, 254u, 261u, 270u, 279u, 290u, + 301u, 313u, 316u, 330u, 340u, 344u, 352u, 359u, 367u, 378u, 396u, 410u, 420u, 434u, 445u, 449u, + 455u, 464u, 477u, 483u, 494u, 511u, 516u, 531u, 549u, 565u, 576u, 582u, 595u, 602u, 607u, 621u, }; void recomp_unit_0168_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0168_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AA4000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0168[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0168[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0168[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AA4000; @@ -815,7 +722,17 @@ L_08AA4000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA401C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -827,11 +744,20 @@ L_08AA401C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4040: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -843,11 +769,20 @@ L_08AA4040: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4064: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -857,7 +792,17 @@ L_08AA4064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4078: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -867,7 +812,17 @@ L_08AA4078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA408C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -877,7 +832,17 @@ L_08AA408C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA40A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -887,7 +852,17 @@ L_08AA40A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA40B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -897,7 +872,17 @@ L_08AA40B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA40C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -907,7 +892,17 @@ L_08AA40C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA40DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -917,7 +912,17 @@ L_08AA40DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA40F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, ctx.gpr[31]}; @@ -1286,7 +1291,17 @@ L_08AA4404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA44CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1307,7 +1322,17 @@ L_08AA44E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4500: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), ctx.gpr[19]); @@ -1735,7 +1760,6 @@ L_08AA493C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA48CC; } @@ -1761,7 +1785,17 @@ L_08AA494C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4980: ctx.gpr[2] = (2218u << 16u); jump_target = ctx.gpr[31]; @@ -1769,12 +1803,21 @@ L_08AA4980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA498C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08AA499Cu); - // nop goto L_08AA4980; L_08AA499C: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1783,7 +1826,17 @@ L_08AA499C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA49A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1823,7 +1876,6 @@ L_08AA49EC: goto L_08AA49F4; L_08AA49F4: ctx.gpr[31] = (0x08AA49FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA49FCu) goto L_08AA49FC; AOT_REGCACHE_SYNC_OUT(); return; L_08AA49FC: @@ -1859,7 +1911,6 @@ L_08AA4A24: goto L_08AA4A28; L_08AA4A28: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA4A34; } @@ -1883,7 +1934,17 @@ L_08AA4A34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4A54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -1914,7 +1975,6 @@ L_08AA4A84: L_08AA4A90: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA4AA4; } @@ -1937,14 +1997,34 @@ L_08AA4AA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4AB8: jump_target = ctx.gpr[31]; ctx.gpr[2] = (0u | 3u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4AC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -1981,7 +2061,17 @@ L_08AA4AFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -2011,7 +2101,17 @@ L_08AA4B38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -2079,7 +2179,17 @@ L_08AA4BCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4BE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -2095,7 +2205,17 @@ L_08AA4BF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4C00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[31]}; @@ -2150,7 +2270,17 @@ L_08AA4C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4C80: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -2271,7 +2401,6 @@ L_08AA4D88: goto L_08AA4D9C; L_08AA4D9C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA4DC4; } @@ -2321,7 +2450,17 @@ L_08AA4DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -2343,7 +2482,6 @@ L_08AA4E3C: goto L_08AA4E50; L_08AA4E50: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA4E78; } @@ -2392,7 +2530,17 @@ L_08AA4E9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4EBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -2408,7 +2556,6 @@ L_08AA4EBC: } L_08AA4EE0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AA4F04; } @@ -2428,7 +2575,6 @@ L_08AA4EE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA4F04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA4F54; } @@ -2481,7 +2627,17 @@ L_08AA4F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA4F6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -2589,7 +2745,17 @@ L_08AA5074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA5090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -2630,7 +2796,6 @@ L_08AA50EC: L_08AA5100: aot_gpr_4 = (aot_gpr_16 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA5174; } @@ -2667,7 +2832,6 @@ L_08AA510C: L_08AA5174: aot_gpr_4 = (aot_gpr_16 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA5194; } @@ -2683,7 +2847,6 @@ L_08AA5180: L_08AA5194: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA51B4; } @@ -2699,7 +2862,6 @@ L_08AA51A0: L_08AA51B4: aot_gpr_4 = (aot_gpr_16 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA5228; } @@ -2746,14 +2908,33 @@ L_08AA5228: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA5240: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA5248: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_17); @@ -2784,7 +2965,6 @@ L_08AA5288: L_08AA52A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA52C8; } @@ -2823,7 +3003,17 @@ L_08AA52CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA52EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[31]}; @@ -2874,7 +3064,6 @@ L_08AA537C: L_08AA538C: aot_gpr_4 = (ctx.gpr[18] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA5458; } @@ -2933,7 +3122,6 @@ L_08AA5398: L_08AA5458: aot_gpr_4 = (ctx.gpr[18] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA5490; } @@ -2955,7 +3143,6 @@ L_08AA5464: L_08AA5490: aot_gpr_4 = (ctx.gpr[18] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA54C8; } @@ -2977,7 +3164,6 @@ L_08AA549C: L_08AA54C8: aot_gpr_4 = (ctx.gpr[18] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA5594; } @@ -3046,7 +3232,17 @@ L_08AA5594: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA55AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -3056,7 +3252,6 @@ L_08AA55AC: aot_gpr_17 = (aot_gpr_5 | 0u); ctx.gpr[18] = (ctx.gpr[19] + static_cast(28)); ctx.gpr[31] = (0x08AA55DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 224u, 0x08A82798u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA55DCu) goto L_08AA55DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AA55DC: @@ -3081,7 +3276,6 @@ L_08AA55F4: aot_gpr_6 = (aot_gpr_6 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (0u | 0u); if (branch_taken) { @@ -3094,7 +3288,6 @@ L_08AA561C: aot_gpr_6 = (aot_gpr_6 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_5 & 255u); if (branch_taken) { @@ -3110,7 +3303,6 @@ L_08AA563C: goto L_08AA5640; L_08AA5640: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AA5660; } @@ -3135,7 +3327,6 @@ L_08AA5660: goto L_08AA566C; L_08AA566C: { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA5680; } @@ -3150,7 +3341,6 @@ L_08AA5680: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(553))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA569C; } @@ -3165,9 +3355,7 @@ L_08AA569C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(548))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(548))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA56C0; } @@ -3192,7 +3380,17 @@ L_08AA56C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA56DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -3306,7 +3504,6 @@ L_08AA581C: } L_08AA5828: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08AA5898; } @@ -3314,7 +3511,6 @@ L_08AA5828: } L_08AA5830: { const bool branch_taken = static_cast(ctx.gpr[19]) > 0; - // nop if (branch_taken) { goto L_08AA5864; } @@ -3325,7 +3521,6 @@ L_08AA5838: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(88))); { const float fs = aot_fpr_20; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA5898; } @@ -3341,7 +3536,6 @@ L_08AA584C: } L_08AA5854: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA588C; } @@ -3349,7 +3543,6 @@ L_08AA5854: } L_08AA585C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA5898; } @@ -3360,7 +3553,6 @@ L_08AA5864: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(88))); { const float fs = aot_fpr_20; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA5898; } @@ -3371,7 +3563,6 @@ L_08AA5878: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(88))); { const float fs = aot_fpr_20; const float ft = ctx.fpr[22]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA5898; } @@ -3439,7 +3630,6 @@ L_08AA5898: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AA58F4; } @@ -3455,7 +3645,6 @@ L_08AA58CC: L_08AA58DC: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 != aot_gpr_17; - // nop if (branch_taken) { goto L_08AA58EC; } @@ -3466,7 +3655,6 @@ L_08AA58E8: goto L_08AA58EC; L_08AA58EC: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AA58CC; } @@ -3495,7 +3683,6 @@ L_08AA58F4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AA5930; } @@ -3513,7 +3700,6 @@ L_08AA5924: L_08AA5930: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AA59CC; } @@ -3578,7 +3764,6 @@ L_08AA593C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AA59A0; } @@ -3594,7 +3779,6 @@ L_08AA5978: L_08AA5988: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 != aot_gpr_17; - // nop if (branch_taken) { goto L_08AA5998; } @@ -3605,7 +3789,6 @@ L_08AA5994: goto L_08AA5998; L_08AA5998: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AA5978; } @@ -3751,7 +3934,6 @@ L_08AA5A74: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AA5AD0; } @@ -3767,7 +3949,6 @@ L_08AA5AA8: L_08AA5AB8: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 != aot_gpr_17; - // nop if (branch_taken) { goto L_08AA5AC8; } @@ -3778,7 +3959,6 @@ L_08AA5AC4: goto L_08AA5AC8; L_08AA5AC8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AA5AA8; } @@ -3794,9 +3974,7 @@ L_08AA5AD0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA5B0C; } @@ -3837,7 +4015,6 @@ L_08AA5B0C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08AA5B4C; @@ -3846,9 +4023,7 @@ L_08AA5B0C: L_08AA5B4C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA5B64; } @@ -3880,7 +4055,17 @@ L_08AA5B64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA5BA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -3994,7 +4179,6 @@ L_08AA5CDC: aot_gpr_6 = (ctx.gpr[19] + static_cast(213)); aot_gpr_6 = (aot_gpr_6 - aot_gpr_4); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_08AA5D24; } @@ -4037,7 +4221,6 @@ L_08AA5D40: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 2u)); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_08AA5D90; } @@ -4187,7 +4370,6 @@ L_08AA5EB0: aot_gpr_16 = (aot_gpr_4 + aot_gpr_5); aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 5u)); { const bool branch_taken = static_cast(aot_gpr_16) <= 0; - // nop if (branch_taken) { goto L_08AA5F04; } @@ -4232,7 +4414,6 @@ L_08AA5F20: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[7]); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 2u)); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_08AA5F70; } @@ -4335,7 +4516,6 @@ L_08AA6008: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AA6008; } @@ -4390,7 +4570,6 @@ L_08AA609C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA60AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA60C8; } @@ -4424,7 +4603,17 @@ L_08AA60C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA60FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -4557,7 +4746,6 @@ L_08AA6270: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6334; } @@ -4586,7 +4774,6 @@ L_08AA629C: L_08AA62AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA6334; } @@ -4616,7 +4803,6 @@ L_08AA62E4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6334; } @@ -4647,7 +4833,6 @@ L_08AA6320: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6704; } @@ -4680,7 +4865,6 @@ L_08AA6360: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(192), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(220))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA6618; } @@ -4690,7 +4874,6 @@ L_08AA637C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(430))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6618; } @@ -4741,7 +4924,6 @@ L_08AA639C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-3024))); aot_gpr_4 = (16000u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -5020,7 +5202,6 @@ L_08AA660C: goto L_08AA6610; L_08AA6610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA6704; } @@ -5043,7 +5224,6 @@ L_08AA6630: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA6704; } @@ -5238,7 +5418,6 @@ L_08AA6738: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(200))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA69F4; } @@ -5320,7 +5499,6 @@ L_08AA683C: ctx.fpr[26] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / ctx.fpr[26]; ctx.gpr[31] = (0x08AA6864u); - // nop goto L_08AA401C; L_08AA6864: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(340))); @@ -5402,7 +5580,6 @@ L_08AA68FC: L_08AA6904: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(220))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA69D0; } @@ -5463,7 +5640,6 @@ L_08AA6950: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 64u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6984; } @@ -5474,7 +5650,6 @@ L_08AA6970: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_5 = (0u | 80u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA69B4; } @@ -5504,7 +5679,6 @@ L_08AA6998: AOT_REGCACHE_SYNC_OUT(); return; L_08AA69AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA69C8; } @@ -5539,7 +5713,6 @@ L_08AA69D0: L_08AA69E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(480))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA69F4; } @@ -5553,7 +5726,6 @@ L_08AA69EC: L_08AA69F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA6AB0; } @@ -5721,7 +5893,6 @@ L_08AA6AF0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(552))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6B9C; } @@ -5749,7 +5920,6 @@ L_08AA6B58: AOT_REGCACHE_SYNC_OUT(); return; L_08AA6B94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA6BA8; } @@ -5877,7 +6047,6 @@ L_08AA6C64: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(553))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA6CC0; } @@ -5905,7 +6074,6 @@ L_08AA6C7C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA6CB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA6CCC; } @@ -5936,7 +6104,6 @@ L_08AA6CE0: L_08AA6CE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA6DD0; } @@ -6095,9 +6262,7 @@ L_08AA6DFC: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fpr[22] = ctx.fpr[22] / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA7090; } @@ -6128,7 +6293,6 @@ L_08AA6E40: AOT_REGCACHE_SYNC_OUT(); return; L_08AA6E68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AA7090; } @@ -6139,7 +6303,6 @@ L_08AA6E70: aot_gpr_4 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(656)); if (branch_taken) { @@ -6318,7 +6481,6 @@ L_08AA6F54: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA6FE8; } @@ -6430,7 +6592,6 @@ L_08AA6FF4: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-3008))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_17 = (aot_gpr_16 | 0u); if (branch_taken) { @@ -6454,7 +6615,6 @@ L_08AA7034: AOT_REGCACHE_SYNC_OUT(); return; L_08AA7060: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AA7090; } @@ -6479,7 +6639,6 @@ L_08AA7090: L_08AA7094: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA70B4; } @@ -6488,7 +6647,6 @@ L_08AA7094: L_08AA70A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA70B4; } @@ -6523,7 +6681,17 @@ L_08AA70B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA70F8: ctx.gpr[7] = (aot_gpr_5 | 0u); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -6551,7 +6719,6 @@ L_08AA7128: ctx.gpr[9] = (aot_gpr_6 - ctx.gpr[9]); ctx.gpr[9] = (ctx.gpr[9] < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AA7128; } @@ -6563,7 +6730,17 @@ L_08AA714C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA7154: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -6586,7 +6763,6 @@ L_08AA716C: } L_08AA7174: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AA7184; } @@ -6644,7 +6820,6 @@ L_08AA71C0: } L_08AA71E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA7228; } @@ -6658,7 +6833,6 @@ L_08AA71F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA71FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA722C; } @@ -6673,7 +6847,6 @@ L_08AA7204: ctx.gpr[8] = (ctx.gpr[7] - ctx.gpr[8]); ctx.gpr[8] = (ctx.gpr[8] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AA7204; } @@ -6689,7 +6862,17 @@ L_08AA722C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA7238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6755,7 +6938,17 @@ L_08AA72E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA730C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -6784,7 +6977,6 @@ L_08AA7328: L_08AA734C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA7360; } @@ -6807,7 +6999,17 @@ L_08AA7360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA7374: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); jump_target = ctx.gpr[31]; @@ -6815,7 +7017,17 @@ L_08AA7374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA7380: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -6828,7 +7040,6 @@ L_08AA7380: } L_08AA7390: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA73A0; } @@ -6836,7 +7047,6 @@ L_08AA7390: } L_08AA7398: ctx.gpr[31] = (0x08AA73A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA73A0u) goto L_08AA73A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AA73A0: @@ -6846,7 +7056,17 @@ L_08AA73A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA73AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -6879,7 +7099,6 @@ L_08AA7400: L_08AA740C: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AA7424; } @@ -6922,7 +7141,6 @@ L_08AA7444: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -6932,9 +7150,7 @@ L_08AA7444: } L_08AA748C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA74A4; } @@ -6950,7 +7166,6 @@ L_08AA749C: } L_08AA74A4: ctx.gpr[31] = (0x08AA74ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA74ACu) goto L_08AA74AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AA74AC: @@ -6966,7 +7181,6 @@ L_08AA74BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); if (branch_taken) { @@ -6976,9 +7190,7 @@ L_08AA74BC: } L_08AA74D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA74F0; } @@ -6994,7 +7206,6 @@ L_08AA74E8: } L_08AA74F0: ctx.gpr[31] = (0x08AA74F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA74F8u) goto L_08AA74F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AA74F8: @@ -7117,7 +7328,17 @@ L_08AA75E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA761C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); @@ -7143,7 +7364,6 @@ L_08AA7644: L_08AA7650: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(520))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA7678; } @@ -7187,7 +7407,17 @@ L_08AA768C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA76A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7324))); @@ -7210,7 +7440,6 @@ L_08AA76C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA76D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AA770C; } @@ -7223,7 +7452,6 @@ L_08AA76D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AA76E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AA770C; } @@ -7239,7 +7467,6 @@ L_08AA76F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[2]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA771C; } @@ -7247,7 +7474,6 @@ L_08AA76F4: } L_08AA7704: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA775C; } @@ -7255,7 +7481,6 @@ L_08AA7704: } L_08AA770C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA775C; } @@ -7263,7 +7488,6 @@ L_08AA770C: } L_08AA7714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA775C; } @@ -7289,7 +7513,6 @@ L_08AA7734: goto L_08AA7740; L_08AA7740: ctx.gpr[31] = (0x08AA7748u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AA7748u) goto L_08AA7748; AOT_REGCACHE_SYNC_OUT(); return; L_08AA7748: @@ -7314,7 +7537,17 @@ L_08AA775C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA7770: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(204), aot_gpr_16); @@ -7327,7 +7560,6 @@ L_08AA7770: { const std::uint32_t aot_run_words[8]{aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(208), aot_run_words); } { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA7C2C; } @@ -7360,7 +7592,6 @@ L_08AA77D8: } L_08AA77E0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AA7C24; } @@ -7369,7 +7600,6 @@ L_08AA77E0: L_08AA77E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(568))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA787C; } @@ -7382,7 +7612,6 @@ L_08AA77F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AA77FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AA787C; } @@ -7394,7 +7623,6 @@ L_08AA7804: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA787C; } @@ -7413,9 +7641,7 @@ L_08AA782C: aot_gpr_4 = (aot_gpr_4 | 44564u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA787C; } @@ -7449,7 +7675,6 @@ L_08AA7874: AOT_REGCACHE_SYNC_OUT(); return; L_08AA787C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA7C2C; } @@ -7473,7 +7698,6 @@ L_08AA789C: goto L_08AA78A4; L_08AA78A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA78B0; } @@ -7485,7 +7709,6 @@ L_08AA78AC: L_08AA78B0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(572))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AA78E0; } @@ -7497,7 +7720,6 @@ L_08AA78BC: aot_gpr_5 = (aot_gpr_5 + static_cast(2500)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AA78E0; } @@ -7604,7 +7826,6 @@ L_08AA79AC: goto L_08AA79B0; L_08AA79B0: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AA79BC; } @@ -7743,7 +7964,6 @@ L_08AA7AB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA7B0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AA7B1C; } @@ -7756,7 +7976,6 @@ L_08AA7B14: L_08AA7B1C: aot_gpr_4 = (aot_gpr_17 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA7B68; } @@ -7871,7 +8090,6 @@ L_08AA7BE4: goto L_08AA7BEC; L_08AA7BEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA7C2C; } @@ -7880,7 +8098,6 @@ L_08AA7BEC: L_08AA7BF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(568))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA7C1C; } @@ -7891,7 +8108,6 @@ L_08AA7C00: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA7C1C; } @@ -7903,7 +8119,6 @@ L_08AA7C14: goto L_08AA7C1C; L_08AA7C1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA7C2C; } @@ -7941,7 +8156,17 @@ L_08AA7C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA7C78: aot_gpr_29 = (aot_gpr_29 + static_cast(-464)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -8029,7 +8254,6 @@ L_08AA7C78: ctx.gpr[8] = (ctx.gpr[8] | 52429u); aot_fpr_20 = std::bit_cast(ctx.gpr[8]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(360), ctx.gpr[7]); if (branch_taken) { @@ -8039,7 +8263,6 @@ L_08AA7C78: } L_08AA7D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 25u, 0x08AA81D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8141,7 +8364,6 @@ L_08AA7E04: aot_gpr_5 = (0u | 9u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA7E40; } @@ -8152,7 +8374,6 @@ L_08AA7E18: aot_gpr_5 = (0u | 10u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA7E40; } @@ -8163,7 +8384,6 @@ L_08AA7E2C: aot_gpr_5 = (0u | 11u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA7E48; } @@ -8182,7 +8402,6 @@ L_08AA7E48: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AA7E70; } @@ -8193,7 +8412,6 @@ L_08AA7E5C: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AA7E74; } @@ -8205,7 +8423,6 @@ L_08AA7E70: L_08AA7E74: aot_gpr_4 = (aot_gpr_6 | ctx.gpr[7]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 24u, 0x08AA81BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8256,9 +8473,7 @@ L_08AA7EE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(372))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1536))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA7F20; } @@ -8277,7 +8492,6 @@ L_08AA7F04: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(384), aot_gpr_6); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1232))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(372))); (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 23u, 0x08AA8184u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; @@ -8314,7 +8528,6 @@ L_08AA7F28: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA7F88; } @@ -8322,7 +8535,6 @@ L_08AA7F28: } L_08AA7F58: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AA7F88; } @@ -8395,9 +8607,7 @@ L_08AA7F94: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 21u, 0x08AA8170u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8406,7 +8616,6 @@ L_08AA7F94: L_08AA7FCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(364))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 4u, 0x08AA8034u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0169.cpp b/profiles/vcs/generated/generated_unit_0169.cpp index cb794f3..2cfefd7 100644 --- a/profiles/vcs/generated/generated_unit_0169.cpp +++ b/profiles/vcs/generated/generated_unit_0169.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0169[4093] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 5, 0, 6, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, - 10, 0, 11, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 22, - 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 36, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 50, 0, 0, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, - 54, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, - 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 66, 67, 0, 0, - 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, - 0, 0, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, 0, - 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, - 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 91, 0, 92, 0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 97, 0, 98, 0, 99, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 109, 0, 0, 0, 110, 0, 0, 0, 111, 0, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 117, 0, 0, 0, 0, 118, 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 124, 0, 0, 0, 0, - 0, 125, 0, 126, 0, 127, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 130, 131, 0, 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 137, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, - 143, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, - 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, - 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 163, 0, 164, 0, 0, 0, 165, 0, 0, - 0, 0, 166, 0, 0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 173, 0, 0, 0, 0, - 174, 175, 0, 0, 0, 0, 0, 176, 0, 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 182, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, - 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 194, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 197, 0, 0, 0, 0, 198, 199, 0, 0, 0, 0, - 0, 200, 0, 201, 0, 202, 0, 0, 0, 203, 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 208, 0, 209, 0, - 0, 0, 210, 0, 0, 0, 0, 211, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, - 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, - 0, 0, 223, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 229, 230, 0, 0, 0, 0, 0, - 231, 0, 232, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 235, 0, 0, 0, 0, 236, 237, 0, 0, 0, 0, 0, 0, 238, 0, 239, 0, 240, 0, - 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, - 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, - 0, 0, 260, 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, - 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 267, 0, 0, 268, 0, 0, 0, 269, 0, 0, 270, 0, 271, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 276, 0, 0, 0, 277, 0, 0, 278, 0, 279, 0, 280, 0, 0, 0, 281, 0, 282, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 286, 0, 287, 288, 0, 289, 0, 0, 290, 0, 0, 291, 0, 292, 293, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 296, 0, - 297, 298, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 301, 0, 0, 0, 302, 0, 303, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 0, - 0, 317, 0, 0, 0, 318, 319, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, 324, - 325, 0, 326, 0, 0, 327, 0, 0, 328, 0, 329, 0, 0, 330, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, 0, 334, 0, - 0, 335, 0, 0, 336, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, - 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, - 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 352, 0, 0, 0, 0, 0, 0, 353, 354, 0, 355, 0, 0, - 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 358, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 0, 367, 0, 368, 0, 369, 0, 370, 0, 0, 371, 0, 0, 0, 0, - 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, - 0, 0, 0, 376, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 380, 381, 0, 382, 0, 383, 0, - 0, 384, 0, 385, 0, 386, 387, 0, 0, 388, 0, 0, 389, 0, 390, 391, 0, 392, 0, 0, 393, 0, 394, 0, 0, 395, 0, 0, 0, 0, 396, 0, - 397, 0, 0, 0, 0, 398, 0, 399, 0, 400, 0, 0, 0, 0, 401, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 0, 0, 0, 0, 0, 405, 0, 0, 406, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 409, 0, 0, 410, 0, 0, 411, 0, - 0, 412, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, - 418, 0, 0, 0, 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 424, 425, - 0, 0, 426, 0, 427, 0, 0, 0, 0, 0, 428, 0, 0, 0, 429, 0, 430, 0, 431, 0, 0, 0, 432, 0, 433, 0, 434, 0, 0, 435, 0, 0, - 0, 436, 0, 0, 437, 0, 0, 0, 0, 438, 0, 0, 439, 0, 440, 441, 0, 0, 0, 442, 0, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, 0, - 0, 446, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 449, 0, 450, 0, 451, 0, 0, 452, 0, 0, 453, 0, 454, 0, 0, - 455, 0, 0, 456, 0, 457, 0, 458, 0, 0, 459, 0, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, - 464, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, - 468, 0, 0, 469, 0, 470, 471, 0, 0, 0, 0, 472, 0, 0, 0, 473, 0, 474, 0, 0, 475, 0, 0, 476, 0, 477, 0, 0, 478, 0, 479, 0, - 0, 0, 480, 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 484, 485, 0, 0, 0, 486, 0, 487, 0, 0, 0, 488, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0169[64] = { + 0x0500A035500A9405ull, 0x0020400188400044ull, 0x0014005020080040ull, 0x0210000003420400ull, + 0x0010000004030000ull, 0x0000000000000100ull, 0x0000000000000000ull, 0x0000000000000001ull, + 0x0001000000000000ull, 0x4500000081000000ull, 0x0000000000000000ull, 0x2040908940000020ull, + 0x0000000430148048ull, 0x1044220884200000ull, 0x0010000000000001ull, 0x0000000000000000ull, + 0x0810000100200000ull, 0x000000000A000000ull, 0x3084542108400000ull, 0x00000000C06108A8ull, + 0x0000000000002000ull, 0x1115000000000000ull, 0x0000000000000401ull, 0x0C21150842100000ull, + 0x000000003018422Aull, 0x0000000000000400ull, 0x2222A00000000000ull, 0x0800000000000080ull, + 0x0000004411088221ull, 0x0100000020000000ull, 0x0000000000000002ull, 0x0000000000401400ull, + 0x22A1084200000000ull, 0x0A108A8308454184ull, 0x0001000000000000ull, 0x0000000000080400ull, + 0x0000040280000000ull, 0x4210000000000000ull, 0x5418422A0C211508ull, 0x0000000000005084ull, + 0x0000004020000008ull, 0x2014000000000000ull, 0x0000000000000000ull, 0x06108A8421080000ull, + 0x00005084540C2115ull, 0x0800000800000000ull, 0x0044000000008801ull, 0x8000000022000000ull, + 0x0000000000000008ull, 0x8400028000000000ull, 0xAA52252040801044ull, 0x4A0D25A4004A8A91ull, + 0x8044114400000143ull, 0x904040E204448AA8ull, 0x4880225252012525ull, 0x2C0C00090A101220ull, + 0x0954AAA020002442ull, 0x5690010840020408ull, 0x102142A14252D26Aull, 0x2088110249400920ull, + 0x25454414CA040121ull, 0x292A40222148D212ull, 0x20100011210124A9ull, 0x1146409452928869ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0169[64] = { + 1u, 18u, 26u, 33u, 40u, 44u, 45u, 45u, 46u, 47u, 52u, 52u, 61u, 69u, 78u, 80u, + 80u, 84u, 86u, 97u, 106u, 107u, 112u, 114u, 125u, 134u, 135u, 141u, 143u, 152u, 154u, 155u, + 158u, 166u, 183u, 184u, 186u, 189u, 192u, 210u, 214u, 217u, 220u, 220u, 231u, 245u, 247u, 252u, + 255u, 256u, 260u, 276u, 297u, 308u, 325u, 343u, 356u, 372u, 384u, 405u, 418u, 436u, 455u, 468u, }; void recomp_unit_0169_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0169_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AA8004u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0169[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0169[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0169[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AA8004; @@ -661,7 +568,6 @@ LOCAL_DISPATCH: } L_08AA8004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA810C; } @@ -682,7 +588,6 @@ L_08AA800C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA802C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA810C; } @@ -699,7 +604,6 @@ L_08AA8034: } L_08AA8040: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_08AA810C; } @@ -727,7 +631,6 @@ L_08AA8050: AOT_REGCACHE_SYNC_OUT(); return; L_08AA8074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA810C; } @@ -749,7 +652,6 @@ L_08AA8084: goto L_08AA808C; L_08AA808C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA810C; } @@ -773,7 +675,6 @@ L_08AA8098: AOT_REGCACHE_SYNC_OUT(); return; L_08AA80B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA810C; } @@ -795,7 +696,6 @@ L_08AA80C0: AOT_REGCACHE_SYNC_OUT(); return; L_08AA80E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA810C; } @@ -855,7 +755,6 @@ L_08AA815C: ctx.gpr[16] = (ctx.gpr[16] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA811C; } @@ -931,7 +830,17 @@ L_08AA81D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA821C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -991,7 +900,17 @@ L_08AA821C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8250: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -1045,17 +964,25 @@ L_08AA8250: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8278: aot_gpr_4 = (18303u << 16u); aot_fpr_13 = std::bit_cast(0u); aot_gpr_4 = (aot_gpr_4 | 64000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[0] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1065,7 +992,6 @@ L_08AA8278: } L_08AA8294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA82CC; } @@ -1087,11 +1013,20 @@ L_08AA829C: goto L_08AA82CC; L_08AA82CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA82D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1127,9 +1062,7 @@ L_08AA832C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA8444; } @@ -1138,7 +1071,6 @@ L_08AA832C: L_08AA8348: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -1148,7 +1080,6 @@ L_08AA8348: } L_08AA835C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AA8444; } @@ -1182,7 +1113,6 @@ L_08AA8368: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2980))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16976))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17036u << 16u); if (branch_taken) { @@ -1245,7 +1175,17 @@ L_08AA8448: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA846C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_31); @@ -1309,7 +1249,17 @@ L_08AA84D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8524: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10212))); @@ -1434,7 +1384,17 @@ L_08AA8524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8704: ctx.fpr[16] = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[16])); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10212))); @@ -1551,7 +1511,17 @@ L_08AA8704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA88C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (0u | 1u); @@ -1565,8 +1535,6 @@ L_08AA88C4: aot_gpr_7 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(19), static_cast(aot_gpr_6)); aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.fpr[16] = aot_fpr_12 - aot_fpr_14; ctx.fpr[17] = aot_fpr_13 - aot_fpr_15; @@ -1574,8 +1542,6 @@ L_08AA88C4: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(16), static_cast(aot_gpr_6)); aot_gpr_6 = (aot_gpr_7 << 6u); aot_gpr_7 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_fpr_14 = aot_fpr_12 + aot_fpr_14; aot_fpr_15 = aot_fpr_13 + aot_fpr_15; @@ -1629,7 +1595,6 @@ L_08AA8980: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2992), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA89EC; } @@ -1637,7 +1602,6 @@ L_08AA8980: } L_08AA89E4: aot_gpr_31 = (0x08AA89ECu); - // nop goto L_08AA8BDC; L_08AA89EC: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); @@ -1647,7 +1611,17 @@ L_08AA89EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA89FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (17536u << 16u); @@ -1693,8 +1667,6 @@ L_08AA89FC: ctx.fpr[1] = aot_fpr_14 - ctx.fpr[19]; ctx.fpr[16] = ctx.fpr[18] - ctx.fpr[19]; aot_gpr_6 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_fpr_13 = aot_fpr_13 + ctx.fpr[17]; aot_gpr_4 = (static_cast(static_cast(aot_gpr_6) >> 8u)); @@ -1746,7 +1718,6 @@ L_08AA8B18: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2992), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA8B84; } @@ -1754,7 +1725,6 @@ L_08AA8B18: } L_08AA8B7C: aot_gpr_31 = (0x08AA8B84u); - // nop goto L_08AA8BDC; L_08AA8B84: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); @@ -1763,7 +1733,17 @@ L_08AA8B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8B90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1785,7 +1765,17 @@ L_08AA8BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8BC0: aot_gpr_4 = (18303u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -1797,14 +1787,23 @@ L_08AA8BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8BDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AA8C78; } @@ -1848,7 +1847,6 @@ L_08AA8C40: AOT_REGCACHE_SYNC_OUT(); return; L_08AA8C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA8C74; } @@ -1880,7 +1878,17 @@ L_08AA8C78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA8C8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[16]); @@ -1933,7 +1941,6 @@ L_08AA8C8C: L_08AA8D58: ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[2] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); if (branch_taken) { @@ -1950,9 +1957,7 @@ L_08AA8D6C: goto L_08AA8D80; L_08AA8D80: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA8DA8; } @@ -1968,9 +1973,7 @@ L_08AA8D90: goto L_08AA8DA8; L_08AA8DA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA8DCC; } @@ -1985,9 +1988,7 @@ L_08AA8DB8: goto L_08AA8DCC; L_08AA8DCC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA8DF4; } @@ -2074,15 +2075,11 @@ L_08AA8ED4: aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(28), static_cast(aot_gpr_4)); aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(44), static_cast(aot_gpr_4)); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(60), static_cast(aot_gpr_4)); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(64), static_cast(aot_gpr_5)); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(65), static_cast(aot_gpr_4)); @@ -2183,7 +2180,17 @@ L_08AA9058: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA9084: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), ctx.gpr[20]); @@ -2214,9 +2221,7 @@ L_08AA90D4: aot_gpr_4 = (aot_gpr_4 | 26214u); ctx.fpr[17] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9168; } @@ -2231,20 +2236,14 @@ L_08AA90F0: aot_gpr_4 = (std::bit_cast(ctx.fpr[17])); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[20])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[20] = (static_cast(static_cast(aot_gpr_5) >> 8u)); ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[18])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[19] = (static_cast(static_cast(aot_gpr_5) >> 8u)); ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[18] = (static_cast(static_cast(aot_gpr_5) >> 8u)); ctx.gpr[18] = (ctx.gpr[18] & 255u); @@ -2260,7 +2259,6 @@ L_08AA90F0: } L_08AA9168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9604; } @@ -2327,9 +2325,7 @@ L_08AA9170: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(aot_fpr_13)); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9298; } @@ -2338,9 +2334,7 @@ L_08AA9170: L_08AA925C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9298; } @@ -2349,9 +2343,7 @@ L_08AA925C: L_08AA9270: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9298; } @@ -2360,9 +2352,7 @@ L_08AA9270: L_08AA9284: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA92B4; } @@ -2371,7 +2361,6 @@ L_08AA9284: L_08AA9298: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AA92BC; @@ -2387,7 +2376,6 @@ L_08AA92AC: } L_08AA92B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9604; } @@ -2395,7 +2383,6 @@ L_08AA92B4: } L_08AA92BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AA92F8; @@ -2404,7 +2391,6 @@ L_08AA92BC: L_08AA92CC: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AA92F8; @@ -2413,9 +2399,7 @@ L_08AA92CC: L_08AA92E0: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9318; } @@ -2428,7 +2412,6 @@ L_08AA92F8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); goto L_08AA9320; @@ -2444,7 +2427,6 @@ L_08AA9310: } L_08AA9318: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9604; } @@ -2452,7 +2434,6 @@ L_08AA9318: } L_08AA9320: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AA935C; @@ -2461,7 +2442,6 @@ L_08AA9320: L_08AA9330: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AA935C; @@ -2470,9 +2450,7 @@ L_08AA9330: L_08AA9344: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA95CC; } @@ -2487,7 +2465,6 @@ L_08AA935C: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); if (branch_taken) { @@ -2555,15 +2532,11 @@ L_08AA9438: aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(28), static_cast(aot_gpr_4)); aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(44), static_cast(aot_gpr_4)); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(60), static_cast(aot_gpr_4)); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(64), static_cast(aot_gpr_5)); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(65), static_cast(aot_gpr_4)); @@ -2650,7 +2623,6 @@ L_08AA9438: AOT_REGCACHE_SYNC_OUT(); return; L_08AA95C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9604; } @@ -2658,7 +2630,6 @@ L_08AA95C4: } L_08AA95CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9604; } @@ -2666,7 +2637,6 @@ L_08AA95CC: } L_08AA95D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); goto L_08AA9380; @@ -2674,7 +2644,6 @@ L_08AA95D4: goto L_08AA95E4; L_08AA95E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); goto L_08AA9380; @@ -2682,7 +2651,6 @@ L_08AA95E4: goto L_08AA95F4; L_08AA95F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); goto L_08AA9380; @@ -2705,7 +2673,17 @@ L_08AA9604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA962C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[9] = (17536u << 16u); @@ -2787,9 +2765,7 @@ L_08AA962C: L_08AA9754: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9790; } @@ -2798,9 +2774,7 @@ L_08AA9754: L_08AA9768: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9790; } @@ -2809,9 +2783,7 @@ L_08AA9768: L_08AA977C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA97AC; } @@ -2820,7 +2792,6 @@ L_08AA977C: L_08AA9790: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AA97B4; @@ -2836,7 +2807,6 @@ L_08AA97A4: } L_08AA97AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9AF8; } @@ -2844,7 +2814,6 @@ L_08AA97AC: } L_08AA97B4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AA97F0; @@ -2853,7 +2822,6 @@ L_08AA97B4: L_08AA97C4: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AA97F0; @@ -2862,9 +2830,7 @@ L_08AA97C4: L_08AA97D8: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9810; } @@ -2877,7 +2843,6 @@ L_08AA97F0: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); goto L_08AA9818; @@ -2893,7 +2858,6 @@ L_08AA9808: } L_08AA9810: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9AF8; } @@ -2901,7 +2865,6 @@ L_08AA9810: } L_08AA9818: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AA9854; @@ -2910,7 +2873,6 @@ L_08AA9818: L_08AA9828: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AA9854; @@ -2919,9 +2881,7 @@ L_08AA9828: L_08AA983C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9AC0; } @@ -2936,7 +2896,6 @@ L_08AA9854: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); if (branch_taken) { @@ -3003,15 +2962,11 @@ L_08AA992C: aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(28), static_cast(aot_gpr_4)); aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(44), static_cast(aot_gpr_4)); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_mem.aot_direct_store16(ctx.gpr[22] + static_cast(60), static_cast(aot_gpr_4)); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(64), static_cast(aot_gpr_5)); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(ctx.gpr[17])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(65), static_cast(aot_gpr_4)); @@ -3098,7 +3053,6 @@ L_08AA992C: AOT_REGCACHE_SYNC_OUT(); return; L_08AA9AB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9AF8; } @@ -3106,7 +3060,6 @@ L_08AA9AB8: } L_08AA9AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AA9AF8; } @@ -3114,7 +3067,6 @@ L_08AA9AC0: } L_08AA9AC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_13)); goto L_08AA9878; @@ -3122,7 +3074,6 @@ L_08AA9AC8: goto L_08AA9AD8; L_08AA9AD8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_13)); goto L_08AA9878; @@ -3130,7 +3081,6 @@ L_08AA9AD8: goto L_08AA9AE8; L_08AA9AE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_13)); goto L_08AA9878; @@ -3153,7 +3103,17 @@ L_08AA9AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA9B20: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), ctx.gpr[17]); @@ -3208,7 +3168,6 @@ L_08AA9B20: L_08AA9BF0: ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[2] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(16))); if (branch_taken) { @@ -3225,9 +3184,7 @@ L_08AA9C04: goto L_08AA9C18; L_08AA9C18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9C40; } @@ -3243,9 +3200,7 @@ L_08AA9C28: goto L_08AA9C40; L_08AA9C40: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9C64; } @@ -3260,9 +3215,7 @@ L_08AA9C50: goto L_08AA9C64; L_08AA9C64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AA9C8C; } @@ -3350,16 +3303,12 @@ L_08AA9D78: ctx.gpr[10] = (0u | 0u); ctx.gpr[9] = (0u | 0u); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(64), static_cast(aot_gpr_4)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(64))); ctx.gpr[11] = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(65), static_cast(aot_gpr_4)); @@ -3460,7 +3409,6 @@ L_08AA9E08: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2992), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AA9F34; } @@ -3468,7 +3416,6 @@ L_08AA9E08: } L_08AA9F2C: aot_gpr_31 = (0x08AA9F34u); - // nop goto L_08AA8BDC; L_08AA9F34: { std::uint32_t aot_run_words[8]{}; @@ -3487,7 +3434,17 @@ L_08AA9F34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AA9F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3560,7 +3517,6 @@ L_08AA9F5C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), std::bit_cast(aot_fpr_14)); aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[17])); if (branch_taken) { @@ -3571,9 +3527,7 @@ L_08AA9F5C: L_08AAA088: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA0C4; } @@ -3582,9 +3536,7 @@ L_08AAA088: L_08AAA09C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA0C4; } @@ -3593,9 +3545,7 @@ L_08AAA09C: L_08AAA0B0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA0E0; } @@ -3604,7 +3554,6 @@ L_08AAA0B0: L_08AAA0C4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AAA0E8; @@ -3620,7 +3569,6 @@ L_08AAA0D8: } L_08AAA0E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA488; } @@ -3628,7 +3576,6 @@ L_08AAA0E0: } L_08AAA0E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AAA124; @@ -3637,7 +3584,6 @@ L_08AAA0E8: L_08AAA0F8: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AAA124; @@ -3646,9 +3592,7 @@ L_08AAA0F8: L_08AAA10C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA144; } @@ -3661,7 +3605,6 @@ L_08AAA124: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); goto L_08AAA14C; @@ -3677,7 +3620,6 @@ L_08AAA13C: } L_08AAA144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA488; } @@ -3685,7 +3627,6 @@ L_08AAA144: } L_08AAA14C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AAA188; @@ -3694,7 +3635,6 @@ L_08AAA14C: L_08AAA15C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AAA188; @@ -3703,9 +3643,7 @@ L_08AAA15C: L_08AAA170: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA1A8; } @@ -3718,7 +3656,6 @@ L_08AAA188: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AAA1B0; @@ -3734,7 +3671,6 @@ L_08AAA1A0: } L_08AAA1A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA488; } @@ -3742,7 +3678,6 @@ L_08AAA1A8: } L_08AAA1B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAA1F0; @@ -3751,7 +3686,6 @@ L_08AAA1B0: L_08AAA1C0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAA1F0; @@ -3760,7 +3694,6 @@ L_08AAA1C0: L_08AAA1D4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAA1F0; @@ -3768,7 +3701,6 @@ L_08AAA1D4: goto L_08AAA1E8; L_08AAA1E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA488; } @@ -3836,8 +3768,6 @@ L_08AAA2C4: ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (0u | 0u); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); ctx.gpr[10] = (std::bit_cast(aot_fpr_12)); @@ -3845,8 +3775,6 @@ L_08AAA2C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(64))); ctx.gpr[9] = (ctx.gpr[16] + ctx.gpr[9]); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(65), static_cast(aot_gpr_5)); @@ -3948,7 +3876,6 @@ L_08AAA350: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2992), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAA488; } @@ -3956,7 +3883,6 @@ L_08AAA350: } L_08AAA480: aot_gpr_31 = (0x08AAA488u); - // nop goto L_08AA8BDC; L_08AAA488: { std::uint32_t aot_run_words[7]{}; @@ -3974,7 +3900,17 @@ L_08AAA488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAA4AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.gpr[9] = (17536u << 16u); @@ -4057,9 +3993,7 @@ L_08AAA4AC: L_08AAA5D4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA610; } @@ -4068,9 +4002,7 @@ L_08AAA5D4: L_08AAA5E8: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA610; } @@ -4079,9 +4011,7 @@ L_08AAA5E8: L_08AAA5FC: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA62C; } @@ -4090,7 +4020,6 @@ L_08AAA5FC: L_08AAA610: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AAA634; @@ -4106,7 +4035,6 @@ L_08AAA624: } L_08AAA62C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA9D4; } @@ -4114,7 +4042,6 @@ L_08AAA62C: } L_08AAA634: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AAA670; @@ -4123,7 +4050,6 @@ L_08AAA634: L_08AAA644: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AAA670; @@ -4132,9 +4058,7 @@ L_08AAA644: L_08AAA658: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA690; } @@ -4147,7 +4071,6 @@ L_08AAA670: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); goto L_08AAA698; @@ -4163,7 +4086,6 @@ L_08AAA688: } L_08AAA690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA9D4; } @@ -4171,7 +4093,6 @@ L_08AAA690: } L_08AAA698: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AAA6D4; @@ -4180,7 +4101,6 @@ L_08AAA698: L_08AAA6A8: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AAA6D4; @@ -4189,9 +4109,7 @@ L_08AAA6A8: L_08AAA6BC: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAA6F4; } @@ -4204,7 +4122,6 @@ L_08AAA6D4: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AAA6FC; @@ -4220,7 +4137,6 @@ L_08AAA6EC: } L_08AAA6F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA9D4; } @@ -4228,7 +4144,6 @@ L_08AAA6F4: } L_08AAA6FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAA73C; @@ -4237,7 +4152,6 @@ L_08AAA6FC: L_08AAA70C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAA73C; @@ -4246,7 +4160,6 @@ L_08AAA70C: L_08AAA720: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAA73C; @@ -4254,7 +4167,6 @@ L_08AAA720: goto L_08AAA734; L_08AAA734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAA9D4; } @@ -4322,8 +4234,6 @@ L_08AAA810: ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (0u | 0u); aot_gpr_4 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[17])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 8u)); ctx.gpr[10] = (std::bit_cast(aot_fpr_12)); @@ -4331,8 +4241,6 @@ L_08AAA810: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(64))); ctx.gpr[9] = (ctx.gpr[16] + ctx.gpr[9]); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[18])) * static_cast(static_cast(ctx.gpr[19])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 8u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(65), static_cast(aot_gpr_5)); @@ -4434,7 +4342,6 @@ L_08AAA89C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2992), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAA9D4; } @@ -4442,7 +4349,6 @@ L_08AAA89C: } L_08AAA9CC: aot_gpr_31 = (0x08AAA9D4u); - // nop goto L_08AA8BDC; L_08AAA9D4: { std::uint32_t aot_run_words[7]{}; @@ -4460,7 +4366,17 @@ L_08AAA9D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAA9F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[15]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -4536,7 +4452,6 @@ L_08AAA9F8: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fpr[20] = std::bit_cast(std::bit_cast(ctx.fpr[17])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[18])); if (branch_taken) { @@ -4547,9 +4462,7 @@ L_08AAA9F8: L_08AAAB50: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAAB8C; } @@ -4558,9 +4471,7 @@ L_08AAAB50: L_08AAAB64: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAAB8C; } @@ -4569,9 +4480,7 @@ L_08AAAB64: L_08AAAB78: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAABA8; } @@ -4580,7 +4489,6 @@ L_08AAAB78: L_08AAAB8C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AAABB0; @@ -4596,7 +4504,6 @@ L_08AAABA0: } L_08AAABA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB1A8; } @@ -4604,7 +4511,6 @@ L_08AAABA8: } L_08AAABB0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AAABEC; @@ -4613,7 +4519,6 @@ L_08AAABB0: L_08AAABC0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); goto L_08AAABEC; @@ -4622,9 +4527,7 @@ L_08AAABC0: L_08AAABD4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAAC0C; } @@ -4637,7 +4540,6 @@ L_08AAABEC: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); goto L_08AAAC14; @@ -4653,7 +4555,6 @@ L_08AAAC04: } L_08AAAC0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB1A8; } @@ -4661,7 +4562,6 @@ L_08AAAC0C: } L_08AAAC14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AAAC50; @@ -4670,7 +4570,6 @@ L_08AAAC14: L_08AAAC24: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8740))); goto L_08AAAC50; @@ -4679,9 +4578,7 @@ L_08AAAC24: L_08AAAC38: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAAC74; } @@ -4695,7 +4592,6 @@ L_08AAAC50: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); goto L_08AAAC7C; @@ -4711,7 +4607,6 @@ L_08AAAC6C: } L_08AAAC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB1A8; } @@ -4719,7 +4614,6 @@ L_08AAAC74: } L_08AAAC7C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAACBC; @@ -4728,7 +4622,6 @@ L_08AAAC7C: L_08AAAC8C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAACBC; @@ -4737,7 +4630,6 @@ L_08AAAC8C: L_08AAACA0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2992))); goto L_08AAACBC; @@ -4745,7 +4637,6 @@ L_08AAACA0: goto L_08AAACB4; L_08AAACB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB1A8; } @@ -4852,7 +4743,6 @@ L_08AAAE04: { const float fs = ctx.fpr[3]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[3] = std::bit_cast(0x7FC00000u); else ctx.fpr[3] = fs * ft; } ctx.fpr[3] = ctx.fpr[3] + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_08AAAE30; @@ -4860,7 +4750,6 @@ L_08AAAE04: goto L_08AAAE30; L_08AAAE30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_08AAAE40; @@ -4899,7 +4788,6 @@ L_08AAAE40: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(6), static_cast(aot_gpr_6)); aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(7), static_cast(ctx.gpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_08AAAECC; @@ -4907,7 +4795,6 @@ L_08AAAE40: goto L_08AAAECC; L_08AAAECC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_08AAAEDC; @@ -4946,7 +4833,6 @@ L_08AAAEDC: aot_fpr_14 = aot_fpr_14 + ctx.fpr[16]; aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(23), static_cast(ctx.gpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_08AAAF68; @@ -4954,7 +4840,6 @@ L_08AAAEDC: goto L_08AAAF68; L_08AAAF68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_08AAAF78; @@ -5000,7 +4885,6 @@ L_08AAAF78: goto L_08AAB000; L_08AAB000: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); goto L_08AAB010; @@ -5106,7 +4990,6 @@ L_08AAB010: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2992), aot_gpr_4); aot_gpr_4 = (static_cast(aot_gpr_4) < 96 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB1A8; } @@ -5114,7 +4997,6 @@ L_08AAB010: } L_08AAB1A0: aot_gpr_31 = (0x08AAB1A8u); - // nop goto L_08AA8BDC; L_08AAB1A8: { std::uint32_t aot_run_words[15]{}; @@ -5140,7 +5022,17 @@ L_08AAB1A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB1EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5162,7 +5054,17 @@ L_08AAB20C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB21C: aot_gpr_7 = (aot_gpr_4 | 0u); ctx.gpr[8] = (aot_gpr_5 | 0u); @@ -5203,7 +5105,17 @@ L_08AAB260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB27C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -5211,7 +5123,6 @@ L_08AAB27C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAB2B8; } @@ -5220,7 +5131,6 @@ L_08AAB27C: L_08AAB298: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2935))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAB2B8; } @@ -5234,7 +5144,6 @@ L_08AAB2A4: L_08AAB2AC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AAB2E8; } @@ -5244,7 +5153,6 @@ L_08AAB2B8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2956))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAB2DC; } @@ -5253,7 +5161,6 @@ L_08AAB2B8: L_08AAB2C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2940))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAB2F0; } @@ -5261,7 +5168,6 @@ L_08AAB2C8: } L_08AAB2D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB314; } @@ -5286,7 +5192,6 @@ L_08AAB2E8: } L_08AAB2F0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAB304; } @@ -5313,7 +5218,6 @@ L_08AAB304: L_08AAB314: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AAB348; } @@ -5325,7 +5229,6 @@ L_08AAB320: goto L_08AAB5BC; L_08AAB328: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAB340; } @@ -5360,7 +5263,17 @@ L_08AAB350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB35C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), ctx.gpr[17]); @@ -5381,7 +5294,6 @@ L_08AAB35C: L_08AAB38C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB3A4; } @@ -5389,7 +5301,6 @@ L_08AAB38C: } L_08AAB398: aot_gpr_31 = (0x08AAB3A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB3A0u) goto L_08AAB3A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB3A0: @@ -5397,7 +5308,6 @@ L_08AAB3A0: goto L_08AAB3A4; L_08AAB3A4: aot_gpr_31 = (0x08AAB3ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 439u, 0x088B666Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB3ACu) goto L_08AAB3AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB3AC: @@ -5409,7 +5319,6 @@ L_08AAB3AC: L_08AAB3B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB3D0; } @@ -5417,7 +5326,6 @@ L_08AAB3B8: } L_08AAB3C4: aot_gpr_31 = (0x08AAB3CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB3CCu) goto L_08AAB3CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB3CC: @@ -5443,7 +5351,6 @@ L_08AAB3E8: L_08AAB3F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB408; } @@ -5451,7 +5358,6 @@ L_08AAB3F0: } L_08AAB3FC: aot_gpr_31 = (0x08AAB404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB404u) goto L_08AAB404; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB404: @@ -5506,7 +5412,6 @@ L_08AAB48C: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-18560), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB520; } @@ -5591,7 +5496,6 @@ L_08AAB520: } L_08AAB528: { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08AAB54C; } @@ -5664,7 +5568,17 @@ L_08AAB5A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB5BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2237u << 16u); @@ -5673,7 +5587,6 @@ L_08AAB5BC: aot_gpr_5 = (0u | 111u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AAB60C; } @@ -5691,7 +5604,6 @@ L_08AAB5DC: L_08AAB5F4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB604; } @@ -5711,7 +5623,6 @@ L_08AAB604: L_08AAB60C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2956))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AAB62C; } @@ -5744,7 +5655,17 @@ L_08AAB638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB644: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5754,7 +5675,6 @@ L_08AAB644: aot_gpr_4 = (0u | 111u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AAB688; } @@ -5763,7 +5683,6 @@ L_08AAB644: L_08AAB668: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAB6A8; } @@ -5771,7 +5690,6 @@ L_08AAB668: } L_08AAB674: aot_gpr_31 = (0x08AAB67Cu); - // nop ctx.pc = 0x08B7363Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB67C: @@ -5786,7 +5704,6 @@ L_08AAB67C: L_08AAB688: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAB6A8; } @@ -5810,7 +5727,17 @@ L_08AAB6A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB6B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2237u << 16u); @@ -5867,7 +5794,17 @@ L_08AAB728: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB734: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2237u << 16u); @@ -5876,7 +5813,6 @@ L_08AAB734: aot_gpr_6 = (0u | 111u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_7 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AAB770; } @@ -5892,7 +5828,6 @@ L_08AAB754: AOT_REGCACHE_SYNC_OUT(); return; L_08AAB768: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB784; } @@ -5913,7 +5848,17 @@ L_08AAB784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7701))); @@ -5943,9 +5888,7 @@ L_08AAB7D0: ctx.fpr[22] = std::bit_cast(aot_gpr_4); ctx.fpr[22] = static_cast(static_cast(std::bit_cast(ctx.fpr[22]))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAB7F0; } @@ -5956,7 +5899,6 @@ L_08AAB7EC: goto L_08AAB7F0; L_08AAB7F0: aot_gpr_31 = (0x08AAB7F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0033_entry, 33u, 600u, 0x0888A208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB7F8u) goto L_08AAB7F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB7F8: @@ -6015,7 +5957,17 @@ L_08AAB838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB878: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2237u << 16u); @@ -6024,7 +5976,6 @@ L_08AAB878: aot_gpr_4 = (0u | 111u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AAB8E4; } @@ -6032,12 +5983,10 @@ L_08AAB878: } L_08AAB898: aot_gpr_31 = (0x08AAB8A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 733u, 0x08B3AAE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB8A0u) goto L_08AAB8A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB8A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAB8B8; } @@ -6050,7 +5999,6 @@ L_08AAB8A8: AOT_REGCACHE_SYNC_OUT(); return; L_08AAB8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAB898; } @@ -6058,13 +6006,11 @@ L_08AAB8B0: } L_08AAB8B8: aot_gpr_31 = (0x08AAB8C0u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB8C0: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB8E4; } @@ -6072,12 +6018,10 @@ L_08AAB8C0: } L_08AAB8CC: aot_gpr_31 = (0x08AAB8D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0077_entry, 77u, 298u, 0x08939268u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB8D4u) goto L_08AAB8D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB8D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAB8E4; } @@ -6095,7 +6039,17 @@ L_08AAB8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB8F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (ctx.gpr[28] + static_cast(-2920)); @@ -6160,7 +6114,17 @@ L_08AAB990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAB9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -6182,7 +6146,6 @@ L_08AAB9A4: L_08AAB9D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAB9EC; } @@ -6190,7 +6153,6 @@ L_08AAB9D4: } L_08AAB9E0: aot_gpr_31 = (0x08AAB9E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB9E8u) goto L_08AAB9E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB9E8: @@ -6198,12 +6160,10 @@ L_08AAB9E8: goto L_08AAB9EC; L_08AAB9EC: aot_gpr_31 = (0x08AAB9F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 278u, 0x088B5BECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAB9F4u) goto L_08AAB9F4; AOT_REGCACHE_SYNC_OUT(); return; L_08AAB9F4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AABA1C; } @@ -6212,7 +6172,6 @@ L_08AAB9F4: L_08AAB9FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AABA10; } @@ -6220,7 +6179,6 @@ L_08AAB9FC: } L_08AABA08: aot_gpr_31 = (0x08AABA10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AABA10u) goto L_08AABA10; AOT_REGCACHE_SYNC_OUT(); return; L_08AABA10: @@ -6234,7 +6192,6 @@ L_08AABA18: L_08AABA1C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABA48; } @@ -6251,7 +6208,6 @@ L_08AABA28: } L_08AABA34: aot_gpr_31 = (0x08AABA3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AABA3Cu) goto L_08AABA3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AABA3C: @@ -6269,7 +6225,6 @@ L_08AABA48: AOT_REGCACHE_SYNC_OUT(); return; L_08AABA54: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AABA68; } @@ -6291,7 +6246,6 @@ L_08AABA68: AOT_REGCACHE_SYNC_OUT(); return; L_08AABA7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AABAD8; } @@ -6307,7 +6261,6 @@ L_08AABA84: AOT_REGCACHE_SYNC_OUT(); return; L_08AABA98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AABAC4; } @@ -6315,7 +6268,6 @@ L_08AABA98: } L_08AABAA0: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AABAD8; } @@ -6331,7 +6283,6 @@ L_08AABAA8: AOT_REGCACHE_SYNC_OUT(); return; L_08AABABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AABAD8; } @@ -6359,7 +6310,17 @@ L_08AABAD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABAF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6385,7 +6346,17 @@ L_08AABB24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABB30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6402,7 +6373,6 @@ L_08AABB30: AOT_REGCACHE_SYNC_OUT(); return; L_08AABB5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AABB70; } @@ -6427,7 +6397,17 @@ L_08AABB7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABB88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8356))); @@ -6446,7 +6426,17 @@ L_08AABBA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABBB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8356))); @@ -6465,7 +6455,17 @@ L_08AABBD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABBE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10224))); @@ -6482,7 +6482,17 @@ L_08AABBF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABC04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10224))); @@ -6498,7 +6508,17 @@ L_08AABC18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AABC24: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -6518,12 +6538,10 @@ L_08AABC4C: goto L_08AABC68; L_08AABC68: aot_gpr_31 = (0x08AABC70u); - // nop goto L_08AAB878; L_08AABC70: aot_gpr_4 = (ctx.gpr[18] - ctx.gpr[17]); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AABC80; } @@ -6535,7 +6553,6 @@ L_08AABC7C: L_08AABC80: aot_gpr_4 = (static_cast(aot_gpr_4) < 512 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AABC94; } @@ -6543,7 +6560,6 @@ L_08AABC80: } L_08AABC8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 54u, 0x08AAC324u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6562,7 +6578,6 @@ L_08AABCAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABCC4; } @@ -6574,7 +6589,6 @@ L_08AABCBC: goto L_08AABCC4; L_08AABCC4: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AABDF8; } @@ -6584,7 +6598,6 @@ L_08AABCCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 5u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABD78; } @@ -6592,11 +6605,9 @@ L_08AABCCC: } L_08AABCDC: aot_gpr_31 = (0x08AABCE4u); - // nop goto L_08AAB27C; L_08AABCE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AABD78; } @@ -6612,7 +6623,6 @@ L_08AABCF8: aot_gpr_4 = (2237u << 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(23248))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AABD5C; } @@ -6629,7 +6639,6 @@ L_08AABD14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AABD50; } @@ -6646,7 +6655,6 @@ L_08AABD28: } L_08AABD34: aot_gpr_31 = (0x08AABD3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AABD3Cu) goto L_08AABD3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AABD3C: @@ -6665,7 +6673,6 @@ L_08AABD50: goto L_08AABD5C; L_08AABD5C: aot_gpr_31 = (0x08AABD64u); - // nop goto L_08AAB644; L_08AABD64: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -6678,7 +6685,6 @@ L_08AABD78: aot_gpr_4 = (2237u << 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(23248))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AABDF8; } @@ -6688,7 +6694,6 @@ L_08AABD88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABDF8; } @@ -6718,7 +6723,6 @@ L_08AABDC8: goto L_08AAB35C; L_08AABDD0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AABDE4; } @@ -6741,7 +6745,6 @@ L_08AABDE4: AOT_REGCACHE_SYNC_OUT(); return; L_08AABDF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 54u, 0x08AAC324u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6759,7 +6762,6 @@ L_08AABDF8: L_08AABE04: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2936))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AABE20; } @@ -6771,7 +6773,6 @@ L_08AABE10: goto L_08AAB5BC; L_08AABE18: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AABFF4; } @@ -6780,7 +6781,6 @@ L_08AABE18: L_08AABE20: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2936))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABE38; } @@ -6825,7 +6825,6 @@ L_08AABE64: L_08AABE78: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AABF68; } @@ -6872,7 +6871,6 @@ L_08AABED4: L_08AABEF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABF40; } @@ -6881,7 +6879,6 @@ L_08AABEF8: L_08AABF04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2956))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AABF1C; } @@ -6910,7 +6907,6 @@ L_08AABF30: goto L_08AAB6B8; L_08AABF40: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AABF60; } @@ -6930,7 +6926,6 @@ L_08AABF54: AOT_REGCACHE_SYNC_OUT(); return; L_08AABF60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AABF74; } @@ -6944,7 +6939,6 @@ L_08AABF68: AOT_REGCACHE_SYNC_OUT(); return; L_08AABF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AABFCC; } @@ -6959,7 +6953,6 @@ L_08AABF7C: AOT_REGCACHE_SYNC_OUT(); return; L_08AABF8C: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08AABFA0; } @@ -7005,7 +6998,6 @@ L_08AABFCC: } L_08AABFDC: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08AABFF4; } @@ -7021,7 +7013,6 @@ L_08AABFE4: L_08AABFF4: aot_gpr_4 = (ctx.gpr[16] | ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 13u, 0x08AAC0B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0170.cpp b/profiles/vcs/generated/generated_unit_0170.cpp index cdf4d41..d585231 100644 --- a/profiles/vcs/generated/generated_unit_0170.cpp +++ b/profiles/vcs/generated/generated_unit_0170.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0170[4091] = { - 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 8, 0, 0, - 0, 0, 0, 9, 0, 10, 0, 0, 0, 11, 0, 0, 12, 13, 0, 14, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 0, 23, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, - 0, 0, 0, 27, 28, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 37, 0, 0, 38, 0, 39, 40, 0, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 48, 0, 49, 0, 50, 0, 0, 51, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, - 60, 0, 0, 0, 61, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 66, 0, 0, 67, 0, 0, 0, 0, 68, - 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, - 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 78, - 0, 0, 79, 0, 0, 80, 81, 0, 0, 82, 0, 83, 84, 0, 0, 85, 0, 86, 87, 0, 0, 88, 0, 89, 90, 0, 0, 91, 0, 92, 93, 0, - 0, 94, 0, 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 98, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 0, 0, 107, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 115, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, - 0, 0, 0, 121, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, - 131, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 135, 0, 0, 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 140, 0, 0, 0, 141, - 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 0, 0, 0, 150, 151, 152, 0, - 153, 154, 155, 0, 156, 157, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, - 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 168, 0, - 0, 0, 169, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 0, 174, 0, 0, 175, - 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, - 0, 181, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 184, 0, 0, 0, 185, 186, 187, 0, 188, 0, 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 192, 193, 194, 0, - 195, 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 200, 201, 0, 202, 0, 0, 0, 0, 203, 204, 0, 0, - 0, 0, 205, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 210, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 220, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 230, 0, - 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, - 0, 0, 251, 0, 252, 0, 253, 0, 0, 0, 254, 0, 255, 256, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 261, 0, 0, 262, 0, 263, 0, 0, 0, - 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 268, 0, - 0, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, - 0, 279, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 284, 0, 285, 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 288, 0, 0, - 289, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 294, 295, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 303, 0, 304, 305, 0, 0, - 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 311, 0, 0, 0, 0, 312, 0, 0, - 0, 313, 0, 314, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 319, 0, 320, 0, - 0, 0, 0, 321, 0, 0, 0, 322, 0, 323, 324, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 327, 0, 0, 0, - 0, 328, 0, 329, 0, 0, 0, 0, 330, 0, 0, 0, 331, 0, 332, 333, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 335, 0, 0, 336, 0, 0, 0, 0, 337, 0, 338, 0, 0, 0, 339, 0, 0, 340, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, - 0, 343, 0, 344, 0, 345, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 0, 351, 0, 0, 352, 353, 0, 0, 0, 354, - 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 356, 0, 357, 0, 0, 0, 358, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, - 0, 0, 361, 362, 0, 0, 0, 0, 363, 0, 0, 0, 364, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 367, 0, 368, 0, 369, 0, 0, - 370, 0, 0, 0, 0, 371, 0, 0, 0, 0, 372, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 0, 376, 0, 0, - 377, 0, 0, 378, 0, 379, 0, 380, 0, 0, 0, 0, 381, 0, 0, 382, 383, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 386, 0, - 387, 0, 388, 389, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, - 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 0, 0, 0, 403, 0, 404, 0, 405, 0, 0, 406, - 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 409, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, - 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 0, - 0, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 421, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 431, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 436, - 0, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 440, 441, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, 445, 0, - 0, 446, 447, 0, 448, 0, 449, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 453, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, - 0, 0, 456, 457, 0, 0, 0, 458, 0, 459, 460, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, - 463, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, - 0, 468, 0, 0, 0, 0, 0, 469, 0, 470, 471, 0, 0, 0, 0, 472, 0, 473, 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, - 476, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, - 481, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 485, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, - 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 494, 495, 0, 496, 0, 0, 0, 497, 0, - 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 501, 0, 502, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 505, - 0, 506, 507, 0, 508, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 513, 0, 514, 0, 0, 0, 515, - 0, 516, 517, 0, 518, 0, 0, 0, 519, 0, 520, 521, 0, 522, 0, 0, 0, 523, 0, 524, 525, 0, 526, 0, 0, 0, 527, 0, 528, 529, 0, 530, - 0, 0, 0, 531, 0, 532, 533, 0, 534, 0, 0, 0, 535, 0, 536, 537, 0, 538, 0, 0, 0, 539, 0, 540, 541, 0, 542, 0, 0, 0, 543, 0, - 544, 545, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 551, 0, 0, 552, 0, 0, 553, 554, 555, 0, 0, 0, 0, 556, - 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 563, 0, 564, 0, - 0, 565, 0, 566, 0, 567, 0, 568, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, - 573, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 0, 0, 580, 0, 581, 0, - 0, 0, 0, 582, 0, 583, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 587, 0, - 588, 0, 0, 0, 0, 589, 0, 590, 591, 0, 592, 0, 0, 593, 0, 594, 0, 0, 595, 0, 0, 0, 596, 0, 597, 0, 598, 0, 0, 0, 599, 0, - 600, 0, 601, 0, 0, 602, 0, 0, 603, 0, 604, 0, 605, 0, 0, 0, 0, 0, 606, 0, 607, 0, 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 614, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 617, 0, 618, 0, - 619, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 625, 0, 626, 0, 0, - 0, 627, 0, 0, 628, 0, 0, 0, 629, 0, 0, 630, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 633, 0, 0, 0, 0, - 634, 0, 635, 0, 0, 0, 0, 636, 0, 637, 0, 0, 0, 638, 0, 639, 0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 642, 0, 0, 0, 643, 0, - 0, 0, 644, 0, 645, 0, 0, 0, 0, 646, 0, 647, 0, 0, 0, 0, 648, 0, 649, 0, 0, 0, 650, 0, 0, 0, 651, 0, 0, 0, 0, 652, - 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 0, 655, 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 659, 0, 0, 0, 0, 0, 660, - 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 663, 0, 664, 0, 0, 0, 0, 665, 0, 666, 0, 0, 0, 667, 0, 0, 0, - 0, 0, 668, 0, 669, 0, 0, 670, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 674, 0, 675, 0, 0, 0, 676, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 681, 0, 0, 0, 0, 682, 0, 683, 0, 0, 0, - 0, 684, 0, 685, 0, 0, 0, 686, 0, 0, 0, 687, 0, 688, 0, 0, 0, 0, 689, 0, 690, 0, 0, 0, 0, 691, 0, 692, 0, 0, 0, 693, - 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 696, 0, 697, 0, 0, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 701, 0, 0, 0, 0, 702, - 0, 703, 0, 0, 704, 0, 705, 0, 706, 0, 0, 0, 0, 707, 708, 0, 0, 709, 0, 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 712, 0, 713, - 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 716, 0, 717, 718, 719, 0, 0, 0, 720, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 726, 0, 0, 727, - 0, 728, 0, 729, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 0, 732, 0, 733, 0, 0, 734, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 738, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 741, 0, - 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 744, 0, 0, 0, 745, 0, 0, 0, 746, 0, 747, 0, 0, 0, 0, 748, 0, 749, 0, 750, 0, - 0, 0, 751, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 754, 0, 755, 0, 756, 757, 0, 0, 0, 0, 758, - 0, 0, 0, 0, 759, 0, 0, 0, 760, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 763, 0, 764, 0, 0, 0, - 765, 0, 766, 0, 0, 767, 0, 768, 0, 0, 0, 0, 769, 0, 770, 771, 0, 0, 772, 0, 0, 773, 0, 0, 0, 774, 775, 0, 0, 0, 0, 0, - 776, 0, 0, 777, 0, 0, 0, 778, 779, 0, 780, 0, 0, 0, 781, 0, 782, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 787, 0, 0, 0, 788, 0, 0, - 0, 789, 0, 0, 790, 0, 0, 0, 791, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 0, 0, 795, 0, 0, 0, 796, 0, 797, 798, - 0, 799, 0, 0, 0, 800, 0, 0, 801, 0, 0, 0, 802, 0, 0, 803, 0, 0, 0, 804, 0, 0, 805, 0, 0, 0, 806, 0, 0, 0, 807, 0, - 0, 0, 0, 808, 0, 0, 0, 809, 0, 0, 0, 0, 810, 0, 0, 0, 811, 0, 812, 813, 0, 814, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 816, 0, 0, 817, 0, 818, 0, 819, 0, 820, 0, 0, 821, 0, 822, 0, 0, 0, 823, 0, 0, 824, 0, 0, 0, 0, - 0, 825, 826, 0, 827, 0, 0, 0, 0, 828, 0, 0, 0, 829, 830, 0, 831, 0, 0, 0, 832, 0, 0, 0, 833, 0, 834, 0, 835, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 837, 0, 838, 0, 839, 0, 840, 0, 841, 0, - 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 844, 0, 845, 0, 0, 0, 846, 0, 0, - 847, 0, 0, 0, 0, 0, 0, 0, 848, 0, 849, 850, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 859, 0, 860, - 0, 861, 0, 0, 862, 0, 0, 0, 863, 0, 0, 0, 864, 0, 0, 865, 0, 0, 866, 0, 867, 0, 868, 0, 0, 0, 0, 869, 870, 871, 0, 0, - 872, 0, 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, 874, 0, 875, 0, 0, 876, 0, 877, 0, 878, 0, 879, 0, 880, 0, 881, 0, 0, 0, - 0, 882, 0, 883, 0, 0, 884, 0, 885, 0, 886, 0, 887, 0, 888, 0, 889, 0, 0, 0, 0, 890, 0, 0, 0, 0, 891, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0170[64] = { + 0x9014B22828411111ull, 0x8009029888A24900ull, 0x12A44412006D2122ull, 0x84A100B12800AA82ull, + 0xC010080810084210ull, 0x0404C88A69A69A64ull, 0x4480100804000000ull, 0x0010080800804440ull, + 0x0111008880444041ull, 0x1088881110882002ull, 0x70AAA80489000800ull, 0x5085208108042037ull, + 0x2108210092200484ull, 0x71024B8800004012ull, 0x0000010430B88481ull, 0x0000091000000000ull, + 0x2200000000000224ull, 0x0102200000000000ull, 0x0011040094000000ull, 0x4882100000044000ull, + 0x0000200000811024ull, 0x8002800004000014ull, 0x8005008021005000ull, 0x148A100000103454ull, + 0x0000810A41020208ull, 0x0000244210842104ull, 0x020D10A12041A200ull, 0x2114240834422848ull, + 0x120106885090041Aull, 0x800A45090020D10Aull, 0x800914408C95482Aull, 0x20A084212A40510Cull, + 0x0AA1044D424190A9ull, 0x8002C80295094412ull, 0x0008821010421108ull, 0xA80816AA00400801ull, + 0x090C09565409A204ull, 0x408081010200868Cull, 0x0204081104228682ull, 0x45A1450202684081ull, + 0x8A22111685140884ull, 0x45A2D168B45A2D16ull, 0x872481100000002Bull, 0x020422AA50A14110ull, + 0x450002285050A109ull, 0x00D415254544A5A1ull, 0x28508411508A1421ull, 0x4444A28508810912ull, + 0x8242285084450A14ull, 0x2285089411428440ull, 0x8A14288A14290480ull, 0xA4426152850A2A02ull, + 0x902108400108E850ull, 0x444841000412844Aull, 0x86A0210454288920ull, 0x0624D0A515000910ull, + 0x2210084002014589ull, 0x44489122D1088912ull, 0x0914AA40082D1088ull, 0x5548000015116216ull, + 0x40002D0122900001ull, 0x0002080000080400ull, 0x38549112A1000200ull, 0x0421554A1554A101ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0170[64] = { + 1u, 19u, 34u, 52u, 69u, 79u, 102u, 108u, 115u, 126u, 138u, 153u, 169u, 181u, 195u, 207u, + 210u, 215u, 218u, 224u, 231u, 237u, 243u, 251u, 264u, 273u, 283u, 297u, 313u, 328u, 343u, 361u, + 377u, 397u, 413u, 423u, 437u, 456u, 468u, 481u, 498u, 516u, 544u, 557u, 573u, 588u, 610u, 627u, + 644u, 661u, 677u, 694u, 714u, 728u, 742u, 759u, 776u, 789u, 808u, 825u, 842u, 853u, 857u, 872u, }; void recomp_unit_0170_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0170_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AAC000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0170[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0170[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0170[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AAC000; @@ -1066,7 +973,6 @@ L_08AAC000: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_4 = (aot_gpr_4 & 5u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAC0B4; } @@ -1076,7 +982,6 @@ L_08AAC010: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAC0B4; } @@ -1086,7 +991,6 @@ L_08AAC020: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AAC0B4; } @@ -1096,7 +1000,6 @@ L_08AAC030: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-2)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AAC0B4; } @@ -1116,7 +1019,6 @@ L_08AAC058: aot_gpr_5 = (8u << 16u); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAC074; } @@ -1132,7 +1034,6 @@ L_08AAC074: aot_gpr_5 = (aot_gpr_5 + static_cast(23248)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AAC0A4; } @@ -1160,7 +1061,6 @@ L_08AAC0B0: goto L_08AAC0B4; L_08AAC0B4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AAC138; } @@ -1174,7 +1074,6 @@ L_08AAC0BC: AOT_REGCACHE_SYNC_OUT(); return; L_08AAC0C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAC138; } @@ -1224,7 +1123,6 @@ L_08AAC12C: L_08AAC138: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2956))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAC15C; } @@ -1234,7 +1132,6 @@ L_08AAC144: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < 64 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAC15C; } @@ -1267,7 +1164,6 @@ L_08AAC17C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAC190; } @@ -1287,7 +1183,6 @@ L_08AAC190: } L_08AAC19C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAC1CC; } @@ -1353,7 +1248,6 @@ L_08AAC220: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_5 = (0u | 111u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AAC254; } @@ -1368,7 +1262,6 @@ L_08AAC234: goto L_08AAC240; L_08AAC240: aot_gpr_31 = (0x08AAC248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAC248u) goto L_08AAC248; AOT_REGCACHE_SYNC_OUT(); return; L_08AAC248: @@ -1398,7 +1291,6 @@ L_08AAC258: L_08AAC284: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAC2F0; } @@ -1410,7 +1302,6 @@ L_08AAC290: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); aot_gpr_4 = (0u | 111u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AAC2E4; } @@ -1420,7 +1311,6 @@ L_08AAC2A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AAC2C8; } @@ -1430,7 +1320,6 @@ L_08AAC2B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-2)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AAC2E4; } @@ -1439,7 +1328,6 @@ L_08AAC2B8: L_08AAC2C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAC2DC; } @@ -1447,7 +1335,6 @@ L_08AAC2C8: } L_08AAC2D4: aot_gpr_31 = (0x08AAC2DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAC2DCu) goto L_08AAC2DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AAC2DC: @@ -1466,7 +1353,6 @@ L_08AAC2F0: ctx.gpr[18] = (ctx.gpr[18] + aot_gpr_4); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 6144 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAC31C; } @@ -1483,7 +1369,6 @@ L_08AAC304: AOT_REGCACHE_SYNC_OUT(); return; L_08AAC31C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 422u, 0x08AABC68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1491,17 +1376,14 @@ L_08AAC31C: } L_08AAC324: aot_gpr_31 = (0x08AAC32Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 350u, 0x08AAB790u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAC32Cu) goto L_08AAC32C; AOT_REGCACHE_SYNC_OUT(); return; L_08AAC32C: aot_gpr_31 = (0x08AAC334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 416u, 0x08AABBE0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAC334u) goto L_08AAC334; AOT_REGCACHE_SYNC_OUT(); return; L_08AAC334: aot_gpr_31 = (0x08AAC33Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 569u, 0x0880A788u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAC33Cu) goto L_08AAC33C; AOT_REGCACHE_SYNC_OUT(); return; L_08AAC33C: @@ -1521,7 +1403,6 @@ L_08AAC33C: AOT_REGCACHE_SYNC_OUT(); return; L_08AAC36C: aot_gpr_31 = (0x08AAC374u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 418u, 0x08AABC04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAC374u) goto L_08AAC374; AOT_REGCACHE_SYNC_OUT(); return; L_08AAC374: @@ -1534,7 +1415,6 @@ L_08AAC380: ctx.gpr[17] = (ctx.gpr[17] + static_cast(512)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 6144 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAC394; } @@ -1545,7 +1425,6 @@ L_08AAC390: goto L_08AAC394; L_08AAC394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 422u, 0x08AABC68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1567,7 +1446,17 @@ L_08AAC39C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC3C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -1588,7 +1477,17 @@ L_08AAC3DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC3E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -1598,7 +1497,17 @@ L_08AAC3E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC3FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -1608,7 +1517,17 @@ L_08AAC3FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -1618,7 +1537,17 @@ L_08AAC410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC424: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -1628,7 +1557,17 @@ L_08AAC424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC438: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -1638,7 +1577,17 @@ L_08AAC438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC44C: aot_fpr_12 = std::bit_cast(0u); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -1651,7 +1600,17 @@ L_08AAC44C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC470: aot_fpr_12 = std::bit_cast(0u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(8), static_cast(0u)); @@ -1663,7 +1622,17 @@ L_08AAC470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC48C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1749,7 +1718,6 @@ L_08AAC530: goto L_08AAC53C; L_08AAC53C: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AAC554; } @@ -1767,7 +1735,6 @@ L_08AAC548: goto L_08AAC554; L_08AAC554: { const bool branch_taken = ctx.gpr[9] == ctx.gpr[10]; - // nop if (branch_taken) { goto L_08AAC56C; } @@ -1785,7 +1752,6 @@ L_08AAC560: goto L_08AAC56C; L_08AAC56C: { const bool branch_taken = ctx.gpr[10] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AAC584; } @@ -1856,7 +1822,17 @@ L_08AAC5C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAC5E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_6 = (aot_gpr_4 + static_cast(232)); @@ -2243,7 +2219,6 @@ L_08AAC9CC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AAC95C; } @@ -2308,7 +2283,17 @@ L_08AACA2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACA60: ctx.gpr[2] = (2219u << 16u); jump_target = aot_gpr_31; @@ -2316,12 +2301,21 @@ L_08AACA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACA6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AACA7Cu); - // nop goto L_08AACA60; L_08AACA7C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -2330,7 +2324,17 @@ L_08AACA7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACA88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2370,7 +2374,6 @@ L_08AACACC: goto L_08AACAD4; L_08AACAD4: aot_gpr_31 = (0x08AACADCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AACADCu) goto L_08AACADC; AOT_REGCACHE_SYNC_OUT(); return; L_08AACADC: @@ -2406,7 +2409,6 @@ L_08AACB04: goto L_08AACB08; L_08AACB08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AACB14; } @@ -2430,7 +2432,17 @@ L_08AACB14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACB34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2460,7 +2472,17 @@ L_08AACB6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACB80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2486,7 +2508,6 @@ L_08AACB9C: L_08AACBB4: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AACBC8; } @@ -2509,7 +2530,17 @@ L_08AACBC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACBDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2530,7 +2561,17 @@ L_08AACBF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACC08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -2546,7 +2587,17 @@ L_08AACC1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACC28: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[7]); @@ -2617,7 +2668,17 @@ L_08AACCB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACCCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); @@ -2650,7 +2711,17 @@ L_08AACD04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACD10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -2682,7 +2753,6 @@ L_08AACD38: aot_gpr_4 = (0u | 0u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (ctx.gpr[18] + static_cast(560)); if (branch_taken) { @@ -2692,7 +2762,6 @@ L_08AACD38: } L_08AACD8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -2708,7 +2777,6 @@ L_08AACDA0: goto L_08AACDA4; L_08AACDA4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AACDB8; } @@ -2729,7 +2797,6 @@ L_08AACDC4: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(560))); aot_fpr_15 = aot_fpr_14 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (0u | 0u); if (branch_taken) { @@ -2739,7 +2806,6 @@ L_08AACDC4: } L_08AACDE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); if (branch_taken) { @@ -2755,7 +2821,6 @@ L_08AACDF4: goto L_08AACDF8; L_08AACDF8: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AACE1C; } @@ -2782,7 +2847,6 @@ L_08AACE1C: L_08AACE28: aot_fpr_15 = aot_fpr_14 - aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (0u | 0u); if (branch_taken) { @@ -2792,7 +2856,6 @@ L_08AACE28: } L_08AACE3C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); if (branch_taken) { @@ -2808,7 +2871,6 @@ L_08AACE50: goto L_08AACE54; L_08AACE54: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AACE70; } @@ -2852,7 +2914,17 @@ L_08AACE88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AACEA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2910,7 +2982,6 @@ L_08AACEA0: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_5 = (ctx.gpr[7] | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AACFA0; } @@ -2926,7 +2997,6 @@ L_08AACF90: L_08AACFA0: aot_gpr_4 = (ctx.gpr[18] & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAD008; } @@ -2966,7 +3036,6 @@ L_08AAD014: ctx.gpr[7] = (aot_gpr_5 << (aot_gpr_4 & 31u)); ctx.gpr[7] = (ctx.gpr[18] & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AAD0E4; } @@ -3026,7 +3095,6 @@ L_08AAD0E4: ctx.gpr[7] = (aot_gpr_6 << (aot_gpr_4 & 31u)); ctx.gpr[7] = (ctx.gpr[18] & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AAD1B4; } @@ -3106,7 +3174,17 @@ L_08AAD1C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD1E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3139,7 +3217,6 @@ L_08AAD1E0: ctx.gpr[18] = (aot_gpr_6 | 0u); ctx.gpr[7] = (ctx.gpr[17] & 1u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AAD270; } @@ -3147,13 +3224,11 @@ L_08AAD1E0: } L_08AAD268: aot_gpr_31 = (0x08AAD270u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 337u, 0x08A83758u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAD270u) goto L_08AAD270; AOT_REGCACHE_SYNC_OUT(); return; L_08AAD270: aot_gpr_4 = (ctx.gpr[17] & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAD2A8; } @@ -3184,7 +3259,6 @@ L_08AAD2C0: ctx.gpr[8] = (aot_gpr_5 << (aot_gpr_4 & 31u)); ctx.gpr[8] = (ctx.gpr[17] & ctx.gpr[8]); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AAD338; } @@ -3222,7 +3296,6 @@ L_08AAD338: ctx.gpr[8] = (aot_gpr_6 << (aot_gpr_4 & 31u)); ctx.gpr[8] = (ctx.gpr[17] & ctx.gpr[8]); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AAD3B0; } @@ -3280,12 +3353,21 @@ L_08AAD3C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD3DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AAD3ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 102u, 0x08A81DA8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAD3ECu) goto L_08AAD3EC; AOT_REGCACHE_SYNC_OUT(); return; L_08AAD3EC: @@ -3295,12 +3377,21 @@ L_08AAD3EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD3F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AAD408u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 106u, 0x08A81E04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAD408u) goto L_08AAD408; AOT_REGCACHE_SYNC_OUT(); return; L_08AAD408: @@ -3310,7 +3401,17 @@ L_08AAD408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD414: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(112))); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(86)))))); @@ -3337,7 +3438,6 @@ L_08AAD440: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAD4B4; } @@ -3396,7 +3496,6 @@ L_08AAD4B4: goto L_08AAD508; L_08AAD508: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAD568; } @@ -3455,7 +3554,6 @@ L_08AAD568: goto L_08AAD5BC; L_08AAD5BC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAD5FC; } @@ -3498,7 +3596,6 @@ L_08AAD5FC: goto L_08AAD630; L_08AAD630: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAD660; } @@ -3525,7 +3622,6 @@ L_08AAD660: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAD69C; } @@ -3560,11 +3656,20 @@ L_08AAD69C: goto L_08AAD6C0; L_08AAD6C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD6C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3600,7 +3705,6 @@ L_08AAD708: } L_08AAD710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAD7F0; } @@ -3694,7 +3798,6 @@ L_08AAD7CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAD7F0; } @@ -3703,7 +3806,6 @@ L_08AAD7CC: L_08AAD7DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAD7F0; } @@ -3728,14 +3830,23 @@ L_08AAD7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD80C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AAD824u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 170u, 0x08A82198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAD824u) goto L_08AAD824; AOT_REGCACHE_SYNC_OUT(); return; L_08AAD824: @@ -3750,7 +3861,17 @@ L_08AAD824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD844: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3775,7 +3896,6 @@ L_08AAD860: L_08AAD878: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAD88C; } @@ -3798,14 +3918,23 @@ L_08AAD88C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD8A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(28), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AAD8BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 195u, 0x08A82398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAD8BCu) goto L_08AAD8BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AAD8BC: @@ -3885,12 +4014,21 @@ L_08AAD984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AAD9A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0159_entry, 159u, 196u, 0x08A823A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAD9A8u) goto L_08AAD9A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AAD9A8: @@ -3900,7 +4038,17 @@ L_08AAD9A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAD9B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4085,7 +4233,6 @@ L_08AADB34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(188))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AADBD0; } @@ -4176,7 +4323,6 @@ L_08AADBD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(352))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(200))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AADC78; } @@ -4438,7 +4584,6 @@ L_08AADDA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AADDCC; } @@ -4447,7 +4592,6 @@ L_08AADDA8: L_08AADDB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AADDCC; } @@ -4477,35 +4621,72 @@ L_08AADDCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADDFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADE04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADE0C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u + static_cast(-1)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADE14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AADE38; } @@ -4514,7 +4695,6 @@ L_08AADE14: L_08AADE2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AADE40; } @@ -4561,7 +4741,17 @@ L_08AADE6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADE7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -4578,7 +4768,6 @@ L_08AADE98: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AADEB0; } @@ -4602,7 +4791,6 @@ L_08AADEB0: L_08AADEC0: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_31 = (0x08AADECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 622u, 0x08972DA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AADECCu) goto L_08AADECC; AOT_REGCACHE_SYNC_OUT(); return; L_08AADECC: @@ -4685,7 +4873,17 @@ L_08AADF0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADF20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.gpr[2] = (0u | 0u); @@ -4696,11 +4894,20 @@ L_08AADF20: goto L_08AADF30; L_08AADF30: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AADF38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -4716,7 +4923,6 @@ L_08AADF38: L_08AADF58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AADF74; } @@ -4724,7 +4930,6 @@ L_08AADF58: } L_08AADF64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAE040; } @@ -4732,7 +4937,6 @@ L_08AADF64: } L_08AADF6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAE040; } @@ -4804,7 +5008,6 @@ L_08AADFDC: L_08AADFF4: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AAE03C; } @@ -4819,7 +5022,6 @@ L_08AAE000: goto L_08AAE00C; L_08AAE00C: aot_gpr_31 = (0x08AAE014u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAE014u) goto L_08AAE014; AOT_REGCACHE_SYNC_OUT(); return; L_08AAE014: @@ -4858,11 +5060,20 @@ L_08AAE040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE058: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AAE080; } @@ -4881,7 +5092,6 @@ L_08AAE064: } L_08AAE078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAE08C; } @@ -4917,9 +5127,7 @@ L_08AAE0A8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE0DC; } @@ -4950,11 +5158,20 @@ L_08AAE0DC: goto L_08AAE0E4; L_08AAE0E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE0EC: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(58))); ctx.gpr[7] = (2236u << 16u); @@ -4970,7 +5187,6 @@ L_08AAE0EC: L_08AAE104: aot_gpr_6 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAE128; } @@ -4996,15 +5212,23 @@ L_08AAE128: goto L_08AAE138; L_08AAE138: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE140: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAE168; } @@ -5058,9 +5282,7 @@ L_08AAE184: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1960))); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE1B8; } @@ -5080,11 +5302,20 @@ L_08AAE1B8: goto L_08AAE1BC; L_08AAE1BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE1C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5159,7 +5390,17 @@ L_08AAE258: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE270: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -5196,7 +5437,17 @@ L_08AAE2BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE2CC: ctx.fpr[0] = aot_fpr_12 - aot_fpr_14; ctx.fpr[3] = ctx.fpr[17] - aot_fpr_15; @@ -5208,7 +5459,6 @@ L_08AAE2CC: ctx.fpr[0] = std::bit_cast(0u); ctx.fpr[3] = ctx.fpr[3] - ctx.fpr[4]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[2] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); if (branch_taken) { @@ -5225,9 +5475,7 @@ L_08AAE300: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fpr[16] = ctx.fpr[3] - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE394; } @@ -5242,9 +5490,7 @@ L_08AAE32C: { const float fs = ctx.fpr[19]; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fpr[16] = ctx.fpr[16] - ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE38C; } @@ -5259,9 +5505,7 @@ L_08AAE358: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE3A4; } @@ -5304,11 +5548,20 @@ L_08AAE3A4: goto L_08AAE3A8; L_08AAE3A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE3B0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10248), aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10264), aot_gpr_5); @@ -5320,7 +5573,17 @@ L_08AAE3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -5345,7 +5608,6 @@ L_08AAE3EC: } L_08AAE3F4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AAE4CC; } @@ -5392,7 +5654,6 @@ L_08AAE424: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10252), ctx.gpr[2]); aot_gpr_4 = (ctx.gpr[2] & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAE43C; } @@ -5412,7 +5673,6 @@ L_08AAE43C: L_08AAE440: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10244))); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AAE488; } @@ -5423,9 +5683,7 @@ L_08AAE44C: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE478; } @@ -5437,7 +5695,6 @@ L_08AAE468: goto L_08AAE764; L_08AAE470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAE484; } @@ -5453,7 +5710,6 @@ L_08AAE484: goto L_08AAE488; L_08AAE488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAE4CC; } @@ -5461,11 +5717,9 @@ L_08AAE488: } L_08AAE490: aot_gpr_31 = (0x08AAE498u); - // nop goto L_08AAEA14; L_08AAE498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAE4CC; } @@ -5516,7 +5770,6 @@ L_08AAE4CC: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2016))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE50C; } @@ -5570,7 +5823,17 @@ L_08AAE50C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE51C: { const bool branch_taken = aot_gpr_5 == 0u; ctx.gpr[2] = (0u | 0u); @@ -5601,9 +5864,7 @@ L_08AAE53C: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE628; } @@ -5614,9 +5875,7 @@ L_08AAE564: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE628; } @@ -5628,9 +5887,7 @@ L_08AAE580: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE628; } @@ -5641,9 +5898,7 @@ L_08AAE5A0: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE628; } @@ -5655,9 +5910,7 @@ L_08AAE5BC: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE628; } @@ -5668,9 +5921,7 @@ L_08AAE5DC: aot_fpr_13 = std::bit_cast(aot_gpr_6); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE628; } @@ -5691,7 +5942,6 @@ L_08AAE604: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[10] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08AAE624; } @@ -5721,11 +5971,20 @@ L_08AAE628: } L_08AAE63C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE644: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -5738,7 +5997,6 @@ L_08AAE654: ctx.gpr[8] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE74C; } @@ -5759,7 +6017,6 @@ L_08AAE680: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(12)))))); ctx.gpr[9] = (ctx.gpr[9] & 2u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AAE738; } @@ -5770,9 +6027,7 @@ L_08AAE690: aot_fpr_15 = std::bit_cast(ctx.gpr[9]); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE738; } @@ -5783,9 +6038,7 @@ L_08AAE6AC: aot_fpr_15 = std::bit_cast(ctx.gpr[9]); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE738; } @@ -5796,9 +6049,7 @@ L_08AAE6C8: aot_fpr_15 = std::bit_cast(ctx.gpr[9]); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE738; } @@ -5809,9 +6060,7 @@ L_08AAE6E4: aot_fpr_15 = std::bit_cast(ctx.gpr[9]); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE738; } @@ -5822,9 +6071,7 @@ L_08AAE700: aot_fpr_15 = std::bit_cast(ctx.gpr[9]); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE738; } @@ -5835,9 +6082,7 @@ L_08AAE71C: aot_fpr_15 = std::bit_cast(ctx.gpr[9]); aot_fpr_15 = static_cast(static_cast(std::bit_cast(aot_fpr_15))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAE754; } @@ -5872,7 +6117,17 @@ L_08AAE758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE764: ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15968))); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15964))); @@ -5898,7 +6153,6 @@ L_08AAE784: goto L_08AAE7A0; L_08AAE7A0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAE7B8; } @@ -5942,7 +6196,6 @@ L_08AAE7DC: goto L_08AAE7E0; L_08AAE7E0: { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08AAE808; } @@ -5952,7 +6205,6 @@ L_08AAE7E8: ctx.gpr[12] = (aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(76))); ctx.gpr[12] = (ctx.gpr[12] & 8u); { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_08AAE808; } @@ -5996,7 +6248,6 @@ L_08AAE82C: goto L_08AAE848; L_08AAE848: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAE860; } @@ -6040,7 +6291,6 @@ L_08AAE884: goto L_08AAE888; L_08AAE888: { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08AAE8B0; } @@ -6050,7 +6300,6 @@ L_08AAE890: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(76))); ctx.gpr[2] = (ctx.gpr[2] & 8u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAE8B0; } @@ -6095,16 +6344,24 @@ L_08AAE8D4: } L_08AAE8E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE8EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10256))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE904; } @@ -6123,16 +6380,24 @@ L_08AAE904: goto L_08AAE908; L_08AAE908: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE910: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10256))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE928; } @@ -6151,16 +6416,24 @@ L_08AAE928: goto L_08AAE92C; L_08AAE92C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE934: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10256))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE94C; } @@ -6179,16 +6452,24 @@ L_08AAE94C: goto L_08AAE950; L_08AAE950: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE958: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10256))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE970; } @@ -6207,16 +6488,24 @@ L_08AAE970: goto L_08AAE974; L_08AAE974: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE97C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10256))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE994; } @@ -6235,16 +6524,24 @@ L_08AAE994: goto L_08AAE998; L_08AAE998: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE9A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10252))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE9B8; } @@ -6263,16 +6560,24 @@ L_08AAE9B8: goto L_08AAE9BC; L_08AAE9BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE9C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10252))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAE9DC; } @@ -6291,16 +6596,24 @@ L_08AAE9DC: goto L_08AAE9E0; L_08AAE9E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAE9E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10256))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAEA00; } @@ -6319,18 +6632,37 @@ L_08AAEA00: goto L_08AAEA04; L_08AAEA04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEA0C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10260))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEA14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (2236u << 16u); @@ -6372,14 +6704,23 @@ L_08AAEA90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEAA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2816))); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAEAE8; } @@ -6424,7 +6765,17 @@ L_08AAEAE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEAFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2816))); @@ -6441,7 +6792,17 @@ L_08AAEB10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEB20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6451,7 +6812,6 @@ L_08AAEB20: goto L_08AAEB38; L_08AAEB38: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08AAEB54; } @@ -6498,7 +6858,6 @@ L_08AAEB78: goto L_08AAEB84; L_08AAEB84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAEBA4; } @@ -6510,7 +6869,6 @@ L_08AAEB8C: goto L_08AAF2AC; L_08AAEB94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AAEBA4; } @@ -6542,7 +6900,17 @@ L_08AAEBB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEBC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6581,7 +6949,17 @@ L_08AAEC0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEC20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6652,7 +7030,17 @@ L_08AAEC94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAECA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6672,7 +7060,6 @@ L_08AAECA4: } L_08AAECE0: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08AAECF8; } @@ -6757,7 +7144,6 @@ L_08AAED48: } L_08AAED58: aot_gpr_31 = (0x08AAED60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 340u, 0x08B552D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAED60u) goto L_08AAED60; AOT_REGCACHE_SYNC_OUT(); return; L_08AAED60: @@ -6822,7 +7208,6 @@ L_08AAEDA0: } L_08AAEDA8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAEDD0; } @@ -6842,7 +7227,6 @@ L_08AAEDB0: } L_08AAEDC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAEDD8; } @@ -6875,13 +7259,22 @@ L_08AAEDDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEE00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAEE28; } @@ -6939,7 +7332,6 @@ L_08AAEE5C: AOT_REGCACHE_SYNC_OUT(); return; L_08AAEE70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAEE80; } @@ -6966,13 +7358,22 @@ L_08AAEE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEEA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAEED0; } @@ -7023,7 +7424,6 @@ L_08AAEEF4: L_08AAEF04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAEF40; } @@ -7061,12 +7461,21 @@ L_08AAEF40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEF5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAEF80; } @@ -7126,12 +7535,21 @@ L_08AAEFBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEFC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AAEFD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0152_entry, 152u, 350u, 0x08A65984u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAEFD8u) goto L_08AAEFD8; AOT_REGCACHE_SYNC_OUT(); return; L_08AAEFD8: @@ -7142,7 +7560,17 @@ L_08AAEFD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAEFE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7158,10 +7586,19 @@ L_08AAEFF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF008: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF024; } @@ -7217,13 +7654,22 @@ L_08AAF058: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF068: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF090; } @@ -7285,7 +7731,6 @@ L_08AAF0C4: L_08AAF0D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAF0FC; } @@ -7311,12 +7756,21 @@ L_08AAF0FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF118: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF13C; } @@ -7368,7 +7822,6 @@ L_08AAF170: aot_mem.aot_direct_store16(aot_gpr_5 + static_cast(4), static_cast(aot_gpr_6)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(4)))))); { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_08AAF190; } @@ -7376,7 +7829,6 @@ L_08AAF170: } L_08AAF188: aot_gpr_31 = (0x08AAF190u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 567u, 0x08AD342Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAF190u) goto L_08AAF190; AOT_REGCACHE_SYNC_OUT(); return; L_08AAF190: @@ -7386,12 +7838,21 @@ L_08AAF190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF19C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF1C0; } @@ -7449,7 +7910,6 @@ L_08AAF1F4: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(6), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(static_cast(aot_gpr_6) >> 16u)); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AAF240; } @@ -7458,7 +7918,6 @@ L_08AAF1F4: L_08AAF21C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAF240; } @@ -7480,10 +7939,19 @@ L_08AAF240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF24C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF268; } @@ -7539,10 +8007,19 @@ L_08AAF29C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF2AC: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF2C8; } @@ -7596,7 +8073,17 @@ L_08AAF2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF304: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2816))); @@ -7613,11 +8100,9 @@ L_08AAF304: } L_08AAF324: aot_gpr_31 = (0x08AAF32Cu); - // nop goto L_08AAEB20; L_08AAF32C: aot_gpr_31 = (0x08AAF334u); - // nop goto L_08AAEAFC; L_08AAF334: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2816), aot_gpr_16); @@ -7627,7 +8112,6 @@ L_08AAF334: goto L_08AAF344; L_08AAF344: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF360; } @@ -7674,7 +8158,6 @@ L_08AAF384: goto L_08AAF390; L_08AAF390: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAF43C; } @@ -7735,7 +8218,6 @@ L_08AAF3E8: goto L_08AAF3F4; L_08AAF3F4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AAF410; } @@ -7803,7 +8285,17 @@ L_08AAF44C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF460: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[17]); @@ -7848,7 +8340,17 @@ L_08AAF4C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF4D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7860,7 +8362,6 @@ L_08AAF4D4: L_08AAF4F0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAF504; } @@ -7868,7 +8369,6 @@ L_08AAF4F0: } L_08AAF4FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAF550; } @@ -7923,7 +8423,17 @@ L_08AAF550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF568: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7951,7 +8461,17 @@ L_08AAF5A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF5B8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.gpr[2] = (0u | 0u); @@ -7961,7 +8481,17 @@ L_08AAF5B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF5CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); jump_target = aot_gpr_31; @@ -7969,7 +8499,17 @@ L_08AAF5CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF5D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7985,7 +8525,17 @@ L_08AAF5E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF5F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7997,7 +8547,6 @@ L_08AAF5F8: L_08AAF614: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(4484))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AAF678; } @@ -8020,7 +8569,6 @@ L_08AAF63C: ctx.gpr[17] = (32770u << 16u); ctx.gpr[17] = (ctx.gpr[17] + static_cast(424)); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AAF670; } @@ -8028,7 +8576,6 @@ L_08AAF63C: } L_08AAF64C: aot_gpr_31 = (0x08AAF654u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAF654u) goto L_08AAF654; AOT_REGCACHE_SYNC_OUT(); return; L_08AAF654: @@ -8041,7 +8588,6 @@ L_08AAF654: AOT_REGCACHE_SYNC_OUT(); return; L_08AAF668: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AAF64C; } @@ -8049,7 +8595,6 @@ L_08AAF668: } L_08AAF670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAF688; } @@ -8075,7 +8620,17 @@ L_08AAF688: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF6A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -8085,7 +8640,17 @@ L_08AAF6A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -8102,11 +8667,9 @@ L_08AAF6B4: } L_08AAF6D4: aot_gpr_31 = (0x08AAF6DCu); - // nop goto L_08AAF710; L_08AAF6DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AAF6E8; } @@ -8124,7 +8687,17 @@ L_08AAF6E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF6FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_5 = (0u | 255u); @@ -8134,7 +8707,17 @@ L_08AAF6FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF710: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8149,7 +8732,17 @@ L_08AAF720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF72C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8189,7 +8782,6 @@ L_08AAF770: } L_08AAF780: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AAF7E4; } @@ -8198,7 +8790,6 @@ L_08AAF780: L_08AAF788: aot_gpr_5 = (static_cast(aot_gpr_4) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AAF79C; } @@ -8217,7 +8808,6 @@ L_08AAF79C: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[17]); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAF7B8; } @@ -8225,7 +8815,6 @@ L_08AAF79C: } L_08AAF7B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAF7BC; } @@ -8243,7 +8832,6 @@ L_08AAF7BC: L_08AAF7C8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AAF7E8; } @@ -8274,7 +8862,6 @@ L_08AAF7E8: L_08AAF800: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AAF820; } @@ -8284,7 +8871,6 @@ L_08AAF80C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AAF820; } @@ -8302,7 +8888,6 @@ L_08AAF828: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AAF768; } @@ -8329,7 +8914,17 @@ L_08AAF840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF864: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8355,7 +8950,17 @@ L_08AAF898: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF8AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8398,10 +9003,19 @@ L_08AAF8E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF8F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); if (branch_taken) { @@ -8416,9 +9030,7 @@ L_08AAF904: goto L_08AAF910; L_08AAF910: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF92C; } @@ -8431,9 +9043,7 @@ L_08AAF920: goto L_08AAF92C; L_08AAF92C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF978; } @@ -8441,9 +9051,7 @@ L_08AAF92C: } L_08AAF93C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF978; } @@ -8452,9 +9060,7 @@ L_08AAF93C: L_08AAF94C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF978; } @@ -8462,9 +9068,7 @@ L_08AAF94C: } L_08AAF960: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF978; } @@ -8483,14 +9087,22 @@ L_08AAF978: goto L_08AAF97C; L_08AAF97C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAF984: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(48))); if (branch_taken) { @@ -8505,9 +9117,7 @@ L_08AAF994: goto L_08AAF9A0; L_08AAF9A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF9BC; } @@ -8520,9 +9130,7 @@ L_08AAF9B0: goto L_08AAF9BC; L_08AAF9BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAF9D8; } @@ -8535,9 +9143,7 @@ L_08AAF9CC: goto L_08AAF9D8; L_08AAF9D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFA48; } @@ -8545,9 +9151,7 @@ L_08AAF9D8: } L_08AAF9E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFA48; } @@ -8556,9 +9160,7 @@ L_08AAF9E8: L_08AAF9F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFA48; } @@ -8566,9 +9168,7 @@ L_08AAF9F8: } L_08AAFA0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFA48; } @@ -8577,9 +9177,7 @@ L_08AAFA0C: L_08AAFA1C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFA48; } @@ -8587,9 +9185,7 @@ L_08AAFA1C: } L_08AAFA30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFA48; } @@ -8608,11 +9204,20 @@ L_08AAFA48: goto L_08AAFA4C; L_08AAFA4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFA54: aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); @@ -8623,7 +9228,17 @@ L_08AAFA54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFA6C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); aot_gpr_5 = (17279u << 16u); @@ -8668,7 +9283,6 @@ L_08AAFAAC: } L_08AAFAB4: { const bool branch_taken = aot_gpr_6 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AAFAD0; } @@ -8695,7 +9309,6 @@ L_08AAFAD0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAFAEC; } @@ -8727,7 +9340,6 @@ L_08AAFB04: goto L_08AAFB08; L_08AAFB08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAFB68; } @@ -8738,7 +9350,6 @@ L_08AAFB10: aot_gpr_5 = (aot_gpr_6 + aot_gpr_5); aot_gpr_6 = (static_cast(aot_gpr_5) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AAFB34; } @@ -8759,7 +9370,6 @@ L_08AAFB34: goto L_08AAFB38; L_08AAFB38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAFB68; } @@ -8769,7 +9379,6 @@ L_08AAFB40: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); ctx.gpr[7] = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AAFB60; } @@ -8791,11 +9400,20 @@ L_08AAFB60: goto L_08AAFB68; L_08AAFB68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFB70: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[21]); @@ -8824,7 +9442,6 @@ L_08AAFB70: L_08AAFBCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAFBE8; } @@ -8832,7 +9449,6 @@ L_08AAFBCC: } L_08AAFBD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAFBF0; } @@ -8840,7 +9456,6 @@ L_08AAFBD8: } L_08AAFBE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAFE24; } @@ -8848,7 +9463,6 @@ L_08AAFBE0: } L_08AAFBE8: aot_gpr_31 = (0x08AAFBF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAFBF0u) goto L_08AAFBF0; AOT_REGCACHE_SYNC_OUT(); return; L_08AAFBF0: @@ -8858,7 +9472,6 @@ L_08AAFBF0: AOT_REGCACHE_SYNC_OUT(); return; L_08AAFBF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AAFC5C; } @@ -8901,7 +9514,6 @@ L_08AAFC50: } L_08AAFC5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAFE24; } @@ -8909,9 +9521,7 @@ L_08AAFC5C: } L_08AAFC64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[20])) && ctx.fpr[28] == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AAFC80; } @@ -8930,7 +9540,6 @@ L_08AAFC80: aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fpr[28] = ctx.fpr[28] / aot_fpr_13; { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AAFCAC; } @@ -8938,7 +9547,6 @@ L_08AAFC80: } L_08AAFCA0: aot_gpr_31 = (0x08AAFCA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAFCA8u) goto L_08AAFCA8; AOT_REGCACHE_SYNC_OUT(); return; L_08AAFCA8: @@ -8946,7 +9554,6 @@ L_08AAFCA8: goto L_08AAFCAC; L_08AAFCAC: aot_gpr_31 = (0x08AAFCB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 554u, 0x089BAA68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AAFCB4u) goto L_08AAFCB4; AOT_REGCACHE_SYNC_OUT(); return; L_08AAFCB4: @@ -9081,7 +9688,17 @@ L_08AAFE24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFE60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9091,7 +9708,6 @@ L_08AAFE60: goto L_08AAFEA0; L_08AAFE74: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AAFE84; } @@ -9118,12 +9734,21 @@ L_08AAFE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFEA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAFED0; } @@ -9146,7 +9771,6 @@ L_08AAFEBC: } L_08AAFEC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AAFEF0; } @@ -9165,7 +9789,6 @@ L_08AAFED8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AAFEF0; } @@ -9184,7 +9807,17 @@ L_08AAFEF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFF00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9193,7 +9826,6 @@ L_08AAFF00: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AAFFC0; } @@ -9217,7 +9849,6 @@ L_08AAFF34: L_08AAFF3C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AAFF50; } @@ -9229,7 +9860,6 @@ L_08AAFF48: goto L_08AAFF50; L_08AAFF50: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAFF60; } @@ -9241,7 +9871,6 @@ L_08AAFF58: goto L_08AAFF60; L_08AAFF60: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAFF70; } @@ -9270,7 +9899,6 @@ L_08AAFF84: L_08AAFF8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AAFFA0; } @@ -9282,7 +9910,6 @@ L_08AAFF98: goto L_08AAFFA0; L_08AAFFA0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AAFFB0; } @@ -9299,7 +9926,6 @@ L_08AAFFB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AAFFB8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AAFF20; } @@ -9317,7 +9943,17 @@ L_08AAFFC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AAFFD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0171.cpp b/profiles/vcs/generated/generated_unit_0171.cpp index 35cd6aa..09070db 100644 --- a/profiles/vcs/generated/generated_unit_0171.cpp +++ b/profiles/vcs/generated/generated_unit_0171.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0171[4095] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 6, 0, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, - 30, 0, 31, 0, 32, 33, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 0, 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 41, - 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, - 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 52, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 61, 0, 0, 0, 62, 0, 63, - 0, 0, 64, 0, 65, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, - 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, - 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, - 0, 0, 0, 82, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, - 88, 0, 89, 0, 0, 90, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 96, 0, 0, 97, - 98, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 0, 102, 0, 103, 104, 0, 0, 0, 0, 0, 0, - 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 109, 110, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 0, - 0, 117, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 122, 0, 0, 0, 0, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, - 133, 0, 134, 0, 135, 0, 136, 0, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, - 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, - 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, - 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, - 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, - 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, - 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 241, 0, 242, 0, 243, 0, 244, - 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, 0, 0, 259, - 0, 260, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, - 0, 270, 0, 271, 0, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 283, 0, 284, - 0, 285, 0, 286, 0, 287, 288, 0, 289, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 297, 0, - 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 308, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 311, 0, 0, 312, 0, 313, 0, 0, 0, 0, 0, 314, 0, 315, 0, 316, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, - 0, 0, 0, 319, 0, 0, 0, 320, 0, 0, 0, 0, 0, 321, 0, 0, 0, 322, 0, 0, 0, 323, 324, 0, 0, 325, 326, 0, 0, 327, 0, 0, - 0, 0, 0, 328, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, - 0, 0, 0, 333, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 337, 338, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, - 0, 0, 0, 0, 341, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, - 0, 0, 345, 0, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 348, 0, 349, 350, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, - 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, - 357, 0, 0, 0, 0, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 367, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 0, - 0, 370, 371, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 0, 0, 375, 0, 376, 0, 0, 377, 0, - 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 380, 0, 381, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 384, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 391, - 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 397, 0, 398, 0, 0, 399, 0, - 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 0, 0, 404, 0, 405, 0, 0, 406, 0, 0, 0, 0, 0, 407, 0, 0, - 408, 0, 0, 409, 0, 410, 0, 0, 411, 0, 0, 0, 412, 0, 413, 0, 414, 0, 0, 0, 0, 415, 416, 0, 417, 0, 0, 418, 0, 0, 0, 419, - 0, 420, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 423, 0, 424, 0, 0, 425, 0, 426, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, 0, 0, - 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 437, 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, 0, 440, 0, - 0, 441, 0, 0, 442, 0, 0, 443, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 446, 0, 0, 0, 447, 448, - 0, 0, 449, 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 453, 0, 454, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 457, 0, 0, 0, - 0, 458, 0, 459, 0, 0, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 465, 0, 0, - 466, 0, 467, 0, 468, 0, 0, 0, 469, 0, 470, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, 0, 475, - 0, 0, 0, 476, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 481, 0, 0, 482, 0, 483, 0, 484, 0, 485, 0, - 486, 487, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, - 0, 493, 0, 494, 0, 0, 0, 495, 0, 496, 0, 497, 0, 0, 498, 499, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 0, 0, 0, 502, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 0, 0, - 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 525, 0, - 0, 0, 526, 0, 527, 0, 528, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 532, 0, 533, 0, 534, - 0, 535, 0, 536, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, - 0, 550, 0, 0, 551, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 555, 0, 0, 0, 556, 0, 557, - 0, 0, 0, 558, 0, 559, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 567, 0, 568, 0, 0, 0, 569, 570, 0, 0, 571, - 0, 572, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 579, 0, 580, - 0, 581, 0, 582, 0, 0, 0, 0, 0, 583, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 586, 0, 0, 587, 0, 0, 0, 0, 0, 588, 0, 0, - 0, 0, 589, 0, 0, 0, 590, 0, 591, 0, 0, 0, 0, 592, 0, 593, 0, 594, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 601, 0, - 0, 602, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 0, 0, 0, 605, 0, 0, 606, 0, 607, 608, 0, 0, 0, 609, 0, 0, 610, 0, - 0, 0, 611, 0, 612, 0, 0, 0, 0, 613, 614, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 617, - 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 622, 0, 623, 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 0, 0, 628, 0, 0, 0, 629, 0, 630, - 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 635, 0, 636, 0, 0, 0, 637, 0, 0, 638, 0, 0, 639, - 0, 640, 0, 0, 641, 0, 642, 0, 0, 643, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 646, 0, 647, 0, 648, 0, 649, 0, 0, 650, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 653, 0, 0, - 0, 0, 0, 0, 654, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 0, 657, 0, 658, 0, 0, 659, 0, 0, 660, 0, 0, 661, 0, 662, 0, 663, - 0, 0, 664, 665, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 668, 669, 0, 0, 0, 0, 670, 0, 0, 671, 0, 0, 0, - 0, 0, 672, 0, 673, 0, 674, 0, 675, 0, 0, 0, 676, 0, 0, 0, 677, 0, 678, 679, 0, 0, 0, 0, 0, 680, 0, 681, 0, 682, 0, 683, - 0, 0, 684, 0, 0, 0, 0, 0, 685, 0, 686, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 693, 0, 0, 694, 0, - 695, 0, 696, 0, 697, 0, 0, 0, 698, 0, 0, 699, 0, 0, 0, 700, 0, 701, 702, 0, 0, 0, 0, 0, 0, 703, 0, 704, 705, 0, 0, 0, - 0, 0, 0, 706, 0, 0, 0, 707, 0, 708, 709, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 0, 712, 0, 713, 714, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 717, 0, 718, - 0, 0, 719, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 721, 0, 722, 0, 723, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 725, 0, 0, 0, 0, 0, 726, 0, 727, 0, 728, 0, 0, 0, 0, 0, 729, 0, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 732, 0, 0, 0, - 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 737, 0, 0, 0, 738, 0, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 0, 743, 0, - 744, 0, 0, 0, 745, 0, 746, 0, 0, 0, 747, 0, 0, 748, 0, 749, 0, 750, 0, 751, 0, 0, 0, 752, 0, 0, 753, 0, 754, 0, 755, 0, - 0, 0, 0, 756, 0, 0, 0, 757, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 760, 0, 761, 0, 0, 0, 0, 762, 0, 763, 0, 764, 0, - 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, 769, 0, 770, 0, 771, 0, 772, 0, 0, 773, 0, 0, 0, - 774, 0, 775, 0, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, 0, 778, 0, 779, 780, 0, 0, 0, 781, 0, 782, 0, 0, 0, 0, 0, 783, 0, - 784, 0, 0, 785, 0, 786, 0, 787, 0, 788, 0, 0, 0, 0, 789, 0, 790, 0, 791, 0, 0, 0, 0, 792, 0, 793, 0, 0, 0, 0, 794, 0, - 795, 0, 796, 0, 0, 797, 0, 798, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, - 0, 0, 801, 0, 0, 802, 0, 0, 0, 803, 0, 0, 0, 0, 804, 0, 805, 806, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 808, 0, 0, - 0, 0, 809, 0, 810, 811, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 0, 814, 0, 0, 0, 0, 0, - 815, 0, 0, 0, 816, 0, 0, 817, 0, 0, 0, 0, 0, 818, 0, 0, 0, 819, 0, 820, 0, 0, 0, 821, 0, 822, 0, 0, 823, 0, 0, 0, - 0, 824, 0, 825, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, 0, 0, 828, 0, 0, 0, 0, 0, 829, 0, 0, 0, 830, 0, 831, 0, - 0, 832, 0, 833, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 836, 0, 837, 0, 0, 0, 838, 0, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, - 842, 0, 843, 0, 0, 0, 844, 0, 0, 845, 0, 0, 0, 846, 0, 0, 847, 0, 848, 849, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, 0, - 0, 851, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 854, 0, 0, 855, 0, 856, 0, 0, 0, 0, - 857, 0, 0, 0, 858, 0, 0, 859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 860, 0, 861, 0, 0, 862, 0, 863, 0, 0, 0, 0, 0, 864, - 0, 865, 0, 866, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, 0, 870, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 871, 0, 872, 0, 0, 0, 0, 873, 0, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 876, - 0, 877, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 880, 0, 881, 0, 882, 0, 883, 0, 0, 0, 0, 0, 884, 0, 885, 0, 886, - 0, 0, 887, 0, 0, 888, 0, 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, - 0, 0, 892, 0, 893, 0, 0, 894, 0, 0, 0, 0, 895, 0, 896, 0, 0, 0, 897, 0, 0, 0, 0, 0, 898, 0, 0, 0, 0, 0, 899, 0, - 900, 0, 901, 0, 0, 902, 0, 0, 0, 0, 903, 0, 0, 0, 904, 0, 905, 0, 0, 0, 906, 0, 907, 0, 0, 0, 0, 0, 0, 908, 0, 0, - 909, 0, 910, 911, 0, 912, 0, 0, 0, 913, 0, 0, 0, 0, 914, 0, 0, 915, 0, 916, 917, 0, 0, 0, 0, 918, 0, 0, 919, 920, 0, 921, - 0, 922, 0, 0, 0, 0, 923, 0, 0, 0, 924, 0, 0, 0, 0, 925, 0, 0, 0, 926, 0, 0, 0, 0, 927, 0, 928, 0, 929, 0, 0, 0, - 0, 930, 0, 0, 0, 931, 0, 0, 932, 0, 0, 0, 0, 0, 933, 0, 934, 0, 935, 0, 936, 0, 0, 937, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 938, 0, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, 0, 0, 941, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 942, 0, 0, 943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 944, 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 946, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 948, 0, 949, 0, 0, 950, 0, 0, 0, 0, 951, 0, 952, 0, - 953, 0, 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 955, 0, 956, 0, 0, 0, 0, 0, 0, 0, 957, 0, 0, 958, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 959, 0, 0, 0, 0, 0, 0, 960, 0, 961, 0, 962, 0, 963, 0, 0, 0, 0, 964, 0, 0, 0, 0, 0, 0, - 965, 0, 0, 0, 0, 0, 0, 0, 966, 0, 0, 0, 967, 0, 968, 0, 969, 970, 0, 971, 0, 0, 972, 0, 0, 0, 0, 0, 973, 0, 0, 974, - 0, 0, 975, 0, 0, 976, 0, 0, 977, 0, 0, 978, 0, 0, 979, 0, 980, 0, 981, 0, 0, 0, 0, 982, 0, 0, 0, 0, 0, 0, 0, 983, - 0, 984, 0, 985, 0, 0, 986, 0, 987, 0, 0, 0, 0, 988, 0, 0, 0, 0, 0, 0, 0, 989, 0, 0, 0, 0, 990, 0, 991, 0, 992, 0, - 0, 993, 0, 0, 0, 994, 0, 995, 0, 0, 996, 0, 0, 0, 0, 997, 0, 0, 998, 0, 0, 999, 0, 0, 0, 0, 0, 1000, 0, 1001, 0, 0, - 0, 0, 1002, 0, 0, 0, 0, 1003, 0, 0, 0, 0, 1004, 0, 0, 0, 0, 1005, 0, 0, 0, 0, 1006, 0, 0, 0, 0, 1007, 0, 0, 1008, 0, - 1009, 0, 0, 1010, 0, 1011, 0, 0, 1012, 0, 1013, 0, 0, 1014, 0, 0, 0, 1015, 0, 1016, 0, 1017, 0, 0, 1018, 1019, 1020, 0, 1021, 0, 0, 1022, - 0, 0, 0, 1023, 0, 1024, 0, 1025, 0, 0, 1026, 1027, 1028, 0, 1029, 0, 0, 1030, 0, 0, 0, 1031, 0, 1032, 0, 1033, 0, 0, 1034, 1035, 1036, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0171[64] = { + 0x0000242442904081ull, 0x0880901100000001ull, 0x1084040900440148ull, 0x2002042889144935ull, + 0x80010084002A8850ull, 0x40900414A2440010ull, 0x4000008404280022ull, 0x2108420808208200ull, + 0x0350400591220A25ull, 0x5000210208182405ull, 0x5555504400402012ull, 0xAAAAAAAAAAAAAA55ull, + 0xAAAAAAAAAAAAAAAAull, 0xAAAAAAAAAAAAAAAAull, 0x8AAAAAAAAAAAAAAAull, 0xAAAA554AAAA09022ull, + 0x805555555554116Aull, 0x2662208880154148ull, 0x0A06890840020228ull, 0x0503448420010050ull, + 0x200A224110008028ull, 0x4A44010605122080ull, 0x8A12011100501448ull, 0x209444A04A211082ull, + 0x2528410289615129ull, 0x42108421084208A0ull, 0x10495144C5000292ull, 0x81212515290100CAull, + 0x1428001355244148ull, 0x155422880080CA8Aull, 0x0401128011010010ull, 0xA90010D4404040A8ull, + 0x8122020202A2848Aull, 0x00082128A2900092ull, 0xA420905298A44104ull, 0x2006A14420908A0Aull, + 0x48D2108240808880ull, 0x0001042488040614ull, 0x922A2022A2221128ull, 0x2100020025522252ull, + 0x1218088CA9250490ull, 0x08004504AA0D1154ull, 0x1A06891549014100ull, 0xA400008006890688ull, + 0x11110541004A8204ull, 0x4284411004408004ull, 0x54288488548AA451ull, 0x4146842512AA4401ull, + 0x100080A5428542A9ull, 0x0440103421034224ull, 0x5104810A128A2091ull, 0x100D22454891450Aull, + 0x829400910A410202ull, 0xA0050A002800410Aull, 0x00401024A82AA00Aull, 0x4104509420000000ull, + 0xB21A422D20514425ull, 0x0095412215088442ull, 0x0090009000900090ull, 0x0480A00550940048ull, + 0x904B510102154080ull, 0x5420214A80854924ull, 0x48421084282484A2ull, 0x72A25CA8972A2529ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0171[64] = { + 1u, 12u, 19u, 30u, 47u, 58u, 70u, 78u, 88u, 105u, 117u, 133u, 165u, 197u, 229u, 260u, + 285u, 311u, 328u, 341u, 353u, 364u, 378u, 392u, 408u, 428u, 441u, 458u, 476u, 493u, 511u, 520u, + 535u, 550u, 563u, 581u, 597u, 611u, 622u, 640u, 654u, 672u, 689u, 706u, 719u, 733u, 744u, 765u, + 784u, 801u, 815u, 832u, 851u, 865u, 877u, 891u, 900u, 922u, 938u, 946u, 959u, 975u, 993u, 1009u, }; void recomp_unit_0171_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0171_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AB0000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0171[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0171[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0171[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AB0000; @@ -1218,7 +1125,17 @@ L_08AB0000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB001C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1244,7 +1161,6 @@ L_08AB0038: L_08AB0050: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB0064; } @@ -1266,7 +1182,17 @@ L_08AB0064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0078: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1281,7 +1207,17 @@ L_08AB0088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1297,7 +1233,17 @@ L_08AB00A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB00B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(92))); @@ -1493,7 +1439,6 @@ L_08AB02C8: ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB03A8; } @@ -1518,7 +1463,6 @@ L_08AB02F0: } L_08AB0300: { const bool branch_taken = ctx.gpr[30] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AB0310; } @@ -1544,7 +1488,6 @@ L_08AB0314: L_08AB0320: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB0338; } @@ -1647,7 +1590,17 @@ L_08AB03C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB03F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -1679,28 +1632,66 @@ L_08AB042C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB043C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0444: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB044C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0454: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1741,7 +1732,17 @@ L_08AB049C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB04C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1789,7 +1790,17 @@ L_08AB0510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0548: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_4 + static_cast(72)); @@ -1799,7 +1810,6 @@ L_08AB0548: L_08AB0558: aot_gpr_6 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AB0590; } @@ -1809,7 +1819,6 @@ L_08AB0564: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.gpr[8] = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB0590; } @@ -1817,7 +1826,6 @@ L_08AB0564: } L_08AB0574: { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB0588; } @@ -1834,7 +1842,6 @@ L_08AB057C: } L_08AB0588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB05D0; } @@ -1868,7 +1875,17 @@ L_08AB05D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB05DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1881,7 +1898,6 @@ L_08AB05DC: L_08AB05F8: aot_gpr_5 = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB0654; } @@ -1891,7 +1907,6 @@ L_08AB0604: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_gpr_6 = (aot_gpr_4 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB0654; } @@ -1934,7 +1949,17 @@ L_08AB0654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0668: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1981,7 +2006,17 @@ L_08AB069C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB06F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2063,7 +2098,17 @@ L_08AB07B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB07CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(6))); @@ -2101,7 +2146,17 @@ L_08AB0808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0814: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); ctx.gpr[9] = (0u | 0u); @@ -2110,7 +2165,6 @@ L_08AB0814: goto L_08AB0824; L_08AB0824: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08AB087C; } @@ -2122,7 +2176,6 @@ L_08AB082C: ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(4))); ctx.gpr[11] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[11]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] != 0u; - // nop if (branch_taken) { goto L_08AB087C; } @@ -2132,7 +2185,6 @@ L_08AB0844: ctx.gpr[11] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(8))); ctx.gpr[11] = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[11]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08AB0860; } @@ -2141,7 +2193,6 @@ L_08AB0844: L_08AB0854: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB0870; } @@ -2171,11 +2222,20 @@ L_08AB087C: goto L_08AB0880; L_08AB0880: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0888: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2202,7 +2262,6 @@ L_08AB08B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB08D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB08E0; } @@ -2269,7 +2328,6 @@ L_08AB0934: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB0950; } @@ -2292,7 +2350,17 @@ L_08AB0950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB096C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2321,7 +2389,17 @@ L_08AB09A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB09B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2385,7 +2463,17 @@ L_08AB0A34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0A58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2405,7 +2493,6 @@ L_08AB0A88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); aot_gpr_5 = (aot_gpr_4 < static_cast(45) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB0F04; } @@ -2417,11 +2504,20 @@ L_08AB0A98: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(10008))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0AB0: aot_gpr_31 = (0x08AB0AB8u); aot_gpr_4 = (0u | 0u); @@ -3241,7 +3337,6 @@ L_08AB0EEC: goto L_08AB0EFC; L_08AB0EFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB0F04; } @@ -3268,11 +3363,20 @@ L_08AB0F14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0F30: aot_gpr_5 = (aot_gpr_4 < static_cast(54) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB1014; } @@ -3284,11 +3388,20 @@ L_08AB0F3C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(10232))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB0F54: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (ctx.gpr[28] + static_cast(-2688)); @@ -3480,11 +3593,20 @@ L_08AB1014: goto L_08AB1018; L_08AB1018: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1020: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(17) ? 1u : 0u); @@ -3501,11 +3623,20 @@ L_08AB1030: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(10448))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1048: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (0u | 3u); @@ -3644,11 +3775,20 @@ L_08AB10C8: } L_08AB10D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB10D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3694,7 +3834,17 @@ L_08AB1120: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1138: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -3709,11 +3859,20 @@ L_08AB1140: goto L_08AB1148; L_08AB1148: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1150: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3772,7 +3931,6 @@ L_08AB11D4: L_08AB11D8: aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AB11E8; } @@ -3784,7 +3942,6 @@ L_08AB11E4: L_08AB11E8: aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB1214; } @@ -3801,7 +3958,6 @@ L_08AB11F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AB120C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1224; } @@ -3829,7 +3985,17 @@ L_08AB1224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1244: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1040), aot_gpr_16); @@ -3893,7 +4059,6 @@ L_08AB12C8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB12EC; } @@ -3916,7 +4081,6 @@ L_08AB12EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB12AC; } @@ -3944,7 +4108,17 @@ L_08AB1318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1340: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1040), aot_gpr_16); @@ -4008,7 +4182,6 @@ L_08AB13C4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB13E8; } @@ -4031,7 +4204,6 @@ L_08AB13E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB13A8; } @@ -4059,7 +4231,17 @@ L_08AB1414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB143C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1040), aot_gpr_16); @@ -4139,7 +4321,17 @@ L_08AB14CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB14F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4171,7 +4363,6 @@ L_08AB1534: L_08AB1544: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AB1560; } @@ -4181,7 +4372,6 @@ L_08AB1550: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB1568; } @@ -4221,7 +4411,17 @@ L_08AB1588: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB15A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4277,7 +4477,6 @@ L_08AB1618: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB1630; } @@ -4296,7 +4495,6 @@ L_08AB1630: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(ctx.gpr[19])); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB15EC; } @@ -4324,7 +4522,17 @@ L_08AB1658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1680: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4340,7 +4548,17 @@ L_08AB1690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB16A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1036), aot_gpr_16); @@ -4369,7 +4587,6 @@ L_08AB16D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB16E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB16FC; } @@ -4400,13 +4617,22 @@ L_08AB1704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB171C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[2] = (aot_gpr_5 + static_cast(-49)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08AB1754; } @@ -4427,7 +4653,6 @@ L_08AB1740: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); aot_gpr_6 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AB176C; } @@ -4442,7 +4667,6 @@ L_08AB1754: AOT_REGCACHE_SYNC_OUT(); return; L_08AB1764: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB176C; } @@ -4455,7 +4679,17 @@ L_08AB176C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1778: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -4476,7 +4710,6 @@ L_08AB1794: L_08AB179C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(20))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB17D0; } @@ -4501,7 +4734,6 @@ L_08AB17B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB17C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB17D0; } @@ -4514,7 +4746,17 @@ L_08AB17D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB17DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); @@ -4530,7 +4772,6 @@ L_08AB17DC: L_08AB17F4: aot_gpr_6 = (static_cast(aot_gpr_6) < 37 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB1838; } @@ -4547,7 +4788,6 @@ L_08AB1800: } L_08AB180C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1858; } @@ -4556,7 +4796,6 @@ L_08AB180C: L_08AB1814: ctx.gpr[7] = (0u | 91u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AB1838; } @@ -4574,7 +4813,6 @@ L_08AB1820: } L_08AB1830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB186C; } @@ -4601,7 +4839,6 @@ L_08AB1854: goto L_08AB1858; L_08AB1858: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB18E8; } @@ -4620,7 +4857,6 @@ L_08AB186C: goto L_08AB187C; L_08AB187C: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08AB18B8; } @@ -4660,7 +4896,6 @@ L_08AB18B8: } L_08AB18CC: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AB18E0; } @@ -4673,7 +4908,6 @@ L_08AB18D4: goto L_08AB18E0; L_08AB18E0: { const bool branch_taken = ctx.gpr[9] != aot_gpr_6; - // nop if (branch_taken) { goto L_08AB187C; } @@ -4686,7 +4920,17 @@ L_08AB18E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB18F4: aot_gpr_6 = (2234u << 16u); ctx.gpr[7] = (aot_gpr_6 + static_cast(14520)); @@ -4713,7 +4957,6 @@ L_08AB191C: ctx.gpr[8] = (ctx.gpr[8] + static_cast(-97)); ctx.gpr[9] = (ctx.gpr[8] < static_cast(26) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AB1A04; } @@ -4725,11 +4968,20 @@ L_08AB192C: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[8]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(11040))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1944: aot_gpr_4 = (ctx.gpr[7] + aot_gpr_4); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); @@ -4856,11 +5108,20 @@ L_08AB1A10: goto L_08AB1A1C; L_08AB1A1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1A24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4901,7 +5162,6 @@ L_08AB1A78: L_08AB1A7C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AB1AC0; } @@ -4915,7 +5175,6 @@ L_08AB1A88: goto L_08AB18F4; L_08AB1A98: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB1AB8; } @@ -4925,7 +5184,6 @@ L_08AB1AA0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB1A7C; } @@ -4959,7 +5217,6 @@ L_08AB1AC0: L_08AB1ACC: aot_gpr_6 = (aot_gpr_4 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AB1B0C; } @@ -4971,7 +5228,6 @@ L_08AB1AD8: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB1AA0; } @@ -4982,7 +5238,6 @@ L_08AB1AF0: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB1AA0; } @@ -4999,7 +5254,6 @@ L_08AB1B04: L_08AB1B0C: aot_gpr_4 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AB1AA0; } @@ -5024,7 +5278,17 @@ L_08AB1B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1B40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_gpr_6 | 0u); @@ -5050,7 +5314,6 @@ L_08AB1B60: } L_08AB1B6C: { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB1BA8; } @@ -5063,7 +5326,6 @@ L_08AB1B74: goto L_08AB18F4; L_08AB1B80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1BB4; } @@ -5085,7 +5347,6 @@ L_08AB1B90: goto L_08AB1A24; L_08AB1BA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1BB4; } @@ -5103,13 +5364,22 @@ L_08AB1BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1BC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB1BE0; } @@ -5118,7 +5388,6 @@ L_08AB1BC0: L_08AB1BD4: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(1)))))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AB1C0C; } @@ -5143,7 +5412,6 @@ L_08AB1BFC: L_08AB1C0C: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AB1C20; } @@ -5182,7 +5450,6 @@ L_08AB1C38: L_08AB1C48: aot_gpr_6 = (aot_gpr_6 + static_cast(-1)); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AB1C68; } @@ -5199,7 +5466,6 @@ L_08AB1C54: } L_08AB1C60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1C80; } @@ -5207,7 +5473,6 @@ L_08AB1C60: } L_08AB1C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1C84; } @@ -5215,7 +5480,6 @@ L_08AB1C68: } L_08AB1C70: { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AB1C54; } @@ -5239,7 +5503,17 @@ L_08AB1C84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5274,7 +5548,6 @@ L_08AB1CD4: goto L_08AB1B40; L_08AB1CE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB1D04; } @@ -5307,7 +5580,6 @@ L_08AB1D0C: goto L_08AB2D68; L_08AB1D1C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB1D2C; } @@ -5315,7 +5587,6 @@ L_08AB1D1C: } L_08AB1D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1D3C; } @@ -5324,7 +5595,6 @@ L_08AB1D24: L_08AB1D2C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[18]) >= 0; - // nop if (branch_taken) { goto L_08AB1D0C; } @@ -5348,7 +5618,17 @@ L_08AB1D3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20]}; @@ -5368,7 +5648,6 @@ L_08AB1D8C: goto L_08AB2D68; L_08AB1D9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB1DE0; } @@ -5378,7 +5657,6 @@ L_08AB1DA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB1DD8; } @@ -5393,7 +5671,6 @@ L_08AB1DB4: goto L_08AB1B40; L_08AB1DC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB1DD8; } @@ -5417,7 +5694,6 @@ L_08AB1DD8: } L_08AB1DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1DF0; } @@ -5425,7 +5701,6 @@ L_08AB1DE0: } L_08AB1DE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB1D8C; } @@ -5446,7 +5721,17 @@ L_08AB1DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1E10: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (ctx.gpr[7] | 0u); @@ -5500,7 +5785,6 @@ L_08AB1E70: goto L_08AB2D68; L_08AB1E9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB1EB0; } @@ -5519,7 +5803,17 @@ L_08AB1EB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1EC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5545,7 +5839,6 @@ L_08AB1EE8: goto L_08AB2D68; L_08AB1F0C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB1F1C; } @@ -5569,7 +5862,17 @@ L_08AB1F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1F38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5588,7 +5891,6 @@ L_08AB1F58: aot_gpr_5 = (aot_gpr_6 - aot_gpr_16); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB1F98; } @@ -5603,7 +5905,6 @@ L_08AB1F78: AOT_REGCACHE_SYNC_OUT(); return; L_08AB1F88: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB1F98; } @@ -5632,7 +5933,17 @@ L_08AB1F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB1FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -5653,7 +5964,6 @@ L_08AB1FB0: L_08AB1FE0: aot_gpr_4 = (ctx.gpr[18] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB1FFC; } @@ -5681,7 +5991,6 @@ L_08AB1FFC: goto L_08AB2004; L_08AB2004: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AB205C; } @@ -5697,7 +6006,6 @@ L_08AB200C: L_08AB201C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AB205C; } @@ -5713,7 +6021,6 @@ L_08AB2028: AOT_REGCACHE_SYNC_OUT(); return; L_08AB203C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB2054; } @@ -5760,7 +6067,17 @@ L_08AB2064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2084: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 << 3u); @@ -5813,7 +6130,6 @@ L_08AB20E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB20FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2110; } @@ -5832,7 +6148,17 @@ L_08AB2110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB211C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5852,7 +6178,6 @@ L_08AB211C: L_08AB2150: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB2164; } @@ -5860,7 +6185,6 @@ L_08AB2150: } L_08AB215C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08AB217C; } @@ -5870,7 +6194,6 @@ L_08AB2164: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2194; } @@ -5878,7 +6201,6 @@ L_08AB2164: } L_08AB2174: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB21B4; } @@ -5909,7 +6231,6 @@ L_08AB21A0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2194; } @@ -5928,7 +6249,17 @@ L_08AB21B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB21CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(280), aot_gpr_16); @@ -5969,7 +6300,6 @@ L_08AB2238: L_08AB2248: ctx.gpr[22] = (ctx.gpr[2] + static_cast(-1)); { const bool branch_taken = static_cast(ctx.gpr[22]) >= 0; - // nop if (branch_taken) { goto L_08AB225C; } @@ -5987,7 +6317,6 @@ L_08AB225C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_5 = (aot_gpr_4 < ctx.gpr[22] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB2270; } @@ -6018,7 +6347,6 @@ L_08AB2284: AOT_REGCACHE_SYNC_OUT(); return; L_08AB2290: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB230C; } @@ -6035,7 +6363,6 @@ L_08AB2298: L_08AB22B0: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AB2304; } @@ -6081,7 +6408,6 @@ L_08AB22FC: } L_08AB2304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB23BC; } @@ -6119,7 +6445,6 @@ L_08AB233C: L_08AB2350: ctx.gpr[23] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08AB23A0; } @@ -6169,7 +6494,6 @@ L_08AB23A0: } L_08AB23B4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AB233C; } @@ -6201,7 +6525,17 @@ L_08AB23C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB23F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(272), aot_gpr_16); @@ -6242,7 +6576,6 @@ L_08AB245C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -6272,7 +6605,6 @@ L_08AB249C: ctx.gpr[17] = (ctx.gpr[18] + ctx.gpr[17]); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2524; } @@ -6288,7 +6620,6 @@ L_08AB24B0: L_08AB24C4: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AB2510; } @@ -6326,7 +6657,6 @@ L_08AB24F8: goto L_08AB211C; L_08AB2508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2528; } @@ -6337,7 +6667,6 @@ L_08AB2510: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB24B0; } @@ -6361,7 +6690,17 @@ L_08AB2528: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2548: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6414,7 +6753,17 @@ L_08AB25A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB25C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6436,7 +6785,6 @@ L_08AB25C0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB260C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB2718; } @@ -6568,7 +6916,6 @@ L_08AB26FC: L_08AB2704: aot_gpr_4 = (ctx.gpr[23] < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2654; } @@ -6576,7 +6923,6 @@ L_08AB2704: } L_08AB2710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2774; } @@ -6609,7 +6955,6 @@ L_08AB2744: AOT_REGCACHE_SYNC_OUT(); return; L_08AB2750: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB2768; } @@ -6622,7 +6967,6 @@ L_08AB2758: AOT_REGCACHE_SYNC_OUT(); return; L_08AB2760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2774; } @@ -6653,7 +6997,17 @@ L_08AB2774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB27A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-1360)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1316), aot_gpr_16); @@ -6750,7 +7104,6 @@ L_08AB2874: L_08AB287C: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB289C; } @@ -6800,7 +7153,6 @@ L_08AB28D0: L_08AB28E4: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB2908; } @@ -6824,7 +7176,6 @@ L_08AB2908: } L_08AB2910: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB2920; } @@ -6842,7 +7193,6 @@ L_08AB2920: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB2964; } @@ -6878,7 +7228,6 @@ L_08AB294C: } L_08AB2964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2988; } @@ -6886,7 +7235,6 @@ L_08AB2964: } L_08AB296C: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08AB297C; } @@ -6894,7 +7242,6 @@ L_08AB296C: } L_08AB2974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2988; } @@ -6903,7 +7250,6 @@ L_08AB2974: L_08AB297C: aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB28D0; } @@ -6950,7 +7296,17 @@ L_08AB29B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB29EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7001,7 +7357,6 @@ L_08AB2A60: L_08AB2A6C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AB2AAC; } @@ -7009,7 +7364,6 @@ L_08AB2A6C: } L_08AB2A78: { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AB2AAC; } @@ -7017,7 +7371,6 @@ L_08AB2A78: } L_08AB2A80: { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AB2AAC; } @@ -7025,7 +7378,6 @@ L_08AB2A80: } L_08AB2A88: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2B0C; } @@ -7164,7 +7516,17 @@ L_08AB2B68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7194,7 +7556,6 @@ L_08AB2BE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB2BF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB2C08; } @@ -7216,7 +7577,6 @@ L_08AB2C08: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB2C3C; } @@ -7232,7 +7592,6 @@ L_08AB2C24: goto L_08AB2C3C; L_08AB2C3C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB2C4C; } @@ -7245,7 +7604,6 @@ L_08AB2C44: L_08AB2C4C: aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB2CA8; } @@ -7261,7 +7619,6 @@ L_08AB2C58: ctx.gpr[19] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); ctx.gpr[19] = (ctx.gpr[19] & 4u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AB2C98; } @@ -7277,7 +7634,6 @@ L_08AB2C80: goto L_08AB2C98; L_08AB2C98: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AB2CA8; } @@ -7310,7 +7666,6 @@ L_08AB2CD0: aot_gpr_4 = (ctx.gpr[22] + static_cast(2)); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2CF0; } @@ -7352,7 +7707,17 @@ L_08AB2D08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2232u << 16u); @@ -7371,7 +7736,17 @@ L_08AB2D58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2D68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -7386,7 +7761,6 @@ L_08AB2D90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0)))))); aot_gpr_5 = (aot_gpr_4 < static_cast(42) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB2F88; } @@ -7398,16 +7772,24 @@ L_08AB2DA0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(11144))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2DB8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(1)))))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB2DE4; } @@ -7422,7 +7804,6 @@ L_08AB2DC8: goto L_08AB1E10; L_08AB2DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7437,7 +7818,6 @@ L_08AB2DE4: goto L_08AB1E10; L_08AB2DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7451,7 +7831,6 @@ L_08AB2E00: goto L_08AB1EC0; L_08AB2E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7470,7 +7849,6 @@ L_08AB2E18: L_08AB2E28: aot_gpr_4 = (static_cast(aot_gpr_4) < 98 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2F00; } @@ -7478,7 +7856,6 @@ L_08AB2E28: } L_08AB2E34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2E4C; } @@ -7486,7 +7863,6 @@ L_08AB2E34: } L_08AB2E3C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB2E78; } @@ -7494,7 +7870,6 @@ L_08AB2E3C: } L_08AB2E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2F00; } @@ -7509,7 +7884,6 @@ L_08AB2E4C: L_08AB2E5C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AB2E70; } @@ -7536,7 +7910,6 @@ L_08AB2E78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0)))))); aot_gpr_5 = (0u | 91u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB2E9C; } @@ -7571,7 +7944,6 @@ L_08AB2EBC: goto L_08AB1A24; L_08AB2ECC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB2EF8; } @@ -7586,7 +7958,6 @@ L_08AB2ED4: goto L_08AB1A24; L_08AB2EE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB2EF8; } @@ -7618,7 +7989,6 @@ L_08AB2F00: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB2F54; } @@ -7633,7 +8003,6 @@ L_08AB2F28: L_08AB2F38: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AB2F4C; } @@ -7657,7 +8026,6 @@ L_08AB2F4C: } L_08AB2F54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB2F88; } @@ -7674,7 +8042,6 @@ L_08AB2F5C: L_08AB2F64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(1)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB2F88; } @@ -7690,7 +8057,6 @@ L_08AB2F70: goto L_08AB2F80; L_08AB2F80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7721,7 +8087,6 @@ L_08AB2FA8: goto L_08AB1B40; L_08AB2FBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB2FC8; } @@ -7754,11 +8119,20 @@ L_08AB2FE0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(11312))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB2FF8: { const bool branch_taken = ctx.gpr[20] == 0u; aot_gpr_5 = (ctx.gpr[17] + static_cast(1)); @@ -7774,7 +8148,6 @@ L_08AB3000: goto L_08AB2D68; L_08AB300C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB301C; } @@ -7790,7 +8163,6 @@ L_08AB3014: } L_08AB301C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7805,7 +8177,6 @@ L_08AB3024: goto L_08AB1C90; L_08AB3038: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7828,7 +8199,6 @@ L_08AB3048: goto L_08AB1C90; L_08AB305C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7843,7 +8213,6 @@ L_08AB3064: goto L_08AB1D5C; L_08AB3078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB309C; } @@ -7851,7 +8220,6 @@ L_08AB3078: } L_08AB3080: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AB3094; } @@ -7889,7 +8257,17 @@ L_08AB309C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB30BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1616)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1592), ctx.gpr[19]); @@ -7917,7 +8295,6 @@ L_08AB30F0: L_08AB3108: aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB33C0; } @@ -7927,7 +8304,6 @@ L_08AB3114: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0)))))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB3160; } @@ -8016,7 +8392,6 @@ L_08AB31B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB31E8; } @@ -8026,7 +8401,6 @@ L_08AB31D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(1)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB324C; } @@ -8065,11 +8439,20 @@ L_08AB321C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(11400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3234: aot_gpr_5 = (2232u << 16u); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -8079,7 +8462,6 @@ L_08AB3234: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3244: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB33CC; } @@ -8094,7 +8476,6 @@ L_08AB324C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB325C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB33CC; } @@ -8116,7 +8497,6 @@ L_08AB3270: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3284: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3398; } @@ -8135,7 +8515,6 @@ L_08AB32A0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -8169,7 +8548,6 @@ L_08AB32E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB32F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3398; } @@ -8196,7 +8574,6 @@ L_08AB330C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3398; } @@ -8210,7 +8587,6 @@ L_08AB3328: goto L_08AB29EC; L_08AB3338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB33B4; } @@ -8236,7 +8612,6 @@ L_08AB335C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1576))); aot_gpr_5 = (aot_gpr_5 < static_cast(100) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3388; } @@ -8255,7 +8630,6 @@ L_08AB3378: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3380: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB33B4; } @@ -8284,7 +8658,6 @@ L_08AB33A4: L_08AB33B4: aot_gpr_4 = (ctx.gpr[18] < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB3114; } @@ -8314,7 +8687,17 @@ L_08AB33CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB33F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8335,7 +8718,17 @@ L_08AB3404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3424: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8361,7 +8754,6 @@ L_08AB3440: L_08AB3458: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB346C; } @@ -8384,7 +8776,17 @@ L_08AB346C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3480: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8399,7 +8801,17 @@ L_08AB3490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB349C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_6); @@ -8419,7 +8831,6 @@ L_08AB349C: } L_08AB34C8: aot_gpr_31 = (0x08AB34D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB34D0u) goto L_08AB34D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AB34D0: @@ -8444,7 +8855,6 @@ L_08AB34E4: AOT_REGCACHE_SYNC_OUT(); return; L_08AB34FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB350C; } @@ -8452,7 +8862,6 @@ L_08AB34FC: } L_08AB3504: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3520; } @@ -8479,7 +8888,17 @@ L_08AB3520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3538: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -8501,7 +8920,6 @@ L_08AB3538: } L_08AB356C: aot_gpr_31 = (0x08AB3574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB3574u) goto L_08AB3574; AOT_REGCACHE_SYNC_OUT(); return; L_08AB3574: @@ -8516,7 +8934,6 @@ L_08AB3574: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB35AC; } @@ -8538,14 +8955,34 @@ L_08AB35AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB35C0: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB35C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8567,7 +9004,6 @@ L_08AB35F4: goto L_08AB35FC; L_08AB35FC: aot_gpr_31 = (0x08AB3604u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB3604u) goto L_08AB3604; AOT_REGCACHE_SYNC_OUT(); return; L_08AB3604: @@ -8584,7 +9020,6 @@ L_08AB360C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB3694; } @@ -8600,7 +9035,6 @@ L_08AB3634: } L_08AB363C: aot_gpr_31 = (0x08AB3644u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB3644u) goto L_08AB3644; AOT_REGCACHE_SYNC_OUT(); return; L_08AB3644: @@ -8631,7 +9065,6 @@ L_08AB366C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3674: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB3688; } @@ -8666,7 +9099,17 @@ L_08AB3694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB36B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -8676,7 +9119,17 @@ L_08AB36B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB36D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8731,7 +9184,6 @@ L_08AB3774: } L_08AB3788: aot_gpr_31 = (0x08AB3790u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 27u, 0x08AB4198u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB3790u) goto L_08AB3790; AOT_REGCACHE_SYNC_OUT(); return; L_08AB3790: @@ -8741,7 +9193,17 @@ L_08AB3790: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB379C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8762,7 +9224,17 @@ L_08AB37B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB37C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8781,7 +9253,6 @@ L_08AB37E0: aot_gpr_5 = (aot_gpr_5 + static_cast(20000)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3808; } @@ -8789,7 +9260,6 @@ L_08AB37E0: } L_08AB37F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3814; } @@ -8797,7 +9267,6 @@ L_08AB37F8: } L_08AB3800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3984; } @@ -8813,7 +9282,6 @@ L_08AB3814: aot_gpr_5 = (aot_gpr_4 - aot_gpr_5); aot_gpr_5 = (aot_gpr_5 < static_cast(1001) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3984; } @@ -8823,7 +9291,6 @@ L_08AB3828: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB3888; } @@ -8843,7 +9310,6 @@ L_08AB3840: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3850: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AB3880; } @@ -8867,7 +9333,6 @@ L_08AB3874: goto L_08AB3994; L_08AB3880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB388C; } @@ -8892,7 +9357,6 @@ L_08AB38A4: ctx.gpr[8] = (aot_gpr_16 + ctx.gpr[8]); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(816))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB38CC; } @@ -8923,7 +9387,6 @@ L_08AB38D0: ctx.gpr[7] = (ctx.gpr[7] & 255u); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < 10 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB38A4; } @@ -8932,7 +9395,6 @@ L_08AB38D0: L_08AB38E4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AB38F4; } @@ -8943,7 +9405,6 @@ L_08AB38F0: goto L_08AB38F4; L_08AB38F4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB3984; } @@ -8958,7 +9419,6 @@ L_08AB3904: aot_gpr_6 = (aot_gpr_16 + aot_gpr_6); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(816))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AB3970; } @@ -8968,7 +9428,6 @@ L_08AB3918: ctx.gpr[7] = (aot_gpr_4 | 0u); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < 10 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB3960; } @@ -8979,7 +9438,6 @@ L_08AB3928: ctx.gpr[8] = (aot_gpr_16 + ctx.gpr[8]); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(816))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AB394C; } @@ -9000,7 +9458,6 @@ L_08AB394C: ctx.gpr[7] = (ctx.gpr[7] & 255u); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < 10 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB3928; } @@ -9008,7 +9465,6 @@ L_08AB394C: } L_08AB3960: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB3970; } @@ -9016,7 +9472,6 @@ L_08AB3960: } L_08AB3968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3984; } @@ -9027,7 +9482,6 @@ L_08AB3970: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_6 = (static_cast(aot_gpr_4) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB3904; } @@ -9041,11 +9495,20 @@ L_08AB3984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3994: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB39C0; } @@ -9065,7 +9528,6 @@ L_08AB39A0: } L_08AB39B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB39D0; } @@ -9073,7 +9535,6 @@ L_08AB39B8: } L_08AB39C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3B80; } @@ -9086,7 +9547,6 @@ L_08AB39C8: L_08AB39D0: ctx.gpr[8] = (static_cast(aot_gpr_5) < 4800 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB3A10; } @@ -9114,7 +9574,6 @@ L_08AB39DC: L_08AB3A10: ctx.gpr[8] = (static_cast(aot_gpr_5) < 2400 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB3A50; } @@ -9142,7 +9601,6 @@ L_08AB3A1C: L_08AB3A50: ctx.gpr[8] = (static_cast(aot_gpr_5) < 1200 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB3A90; } @@ -9170,7 +9628,6 @@ L_08AB3A5C: L_08AB3A90: ctx.gpr[8] = (static_cast(aot_gpr_5) < 550 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB3AD0; } @@ -9198,7 +9655,6 @@ L_08AB3A9C: L_08AB3AD0: ctx.gpr[8] = (static_cast(aot_gpr_5) < 180 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB3B0C; } @@ -9251,7 +9707,6 @@ L_08AB3B18: } L_08AB3B48: { const bool branch_taken = ctx.gpr[7] != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB3B5C; } @@ -9271,7 +9726,6 @@ L_08AB3B5C: goto L_08AB3B70; L_08AB3B70: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AB3B80; } @@ -9283,11 +9737,20 @@ L_08AB3B78: goto L_08AB3B80; L_08AB3B80: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3B88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[10] = (aot_gpr_6 | 0u); @@ -9307,7 +9770,6 @@ L_08AB3B88: } L_08AB3BB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3BDC; } @@ -9331,7 +9793,17 @@ L_08AB3BDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3BE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -9362,7 +9834,6 @@ L_08AB3C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB3C38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AB3C50; } @@ -9370,7 +9841,6 @@ L_08AB3C38: } L_08AB3C40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3C64; } @@ -9378,7 +9848,6 @@ L_08AB3C40: } L_08AB3C48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3C64; } @@ -9406,7 +9875,17 @@ L_08AB3C64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3C80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -9425,7 +9904,6 @@ L_08AB3CA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2328))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3CC0; } @@ -9433,7 +9911,6 @@ L_08AB3CA0: } L_08AB3CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3CC4; } @@ -9441,7 +9918,6 @@ L_08AB3CB0: } L_08AB3CB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3D48; } @@ -9458,7 +9934,6 @@ L_08AB3CC4: L_08AB3CCC: aot_gpr_4 = (aot_gpr_16 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB3D40; } @@ -9470,11 +9945,20 @@ L_08AB3CD8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_16); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(11656))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3CF0: aot_gpr_4 = (0u | 60u); { const bool branch_taken = 0u == 0u; @@ -9553,7 +10037,17 @@ L_08AB3D48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -9570,7 +10064,6 @@ L_08AB3D5C: } L_08AB3D7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3DA0; } @@ -9601,7 +10094,17 @@ L_08AB3DA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3DB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -9621,7 +10124,6 @@ L_08AB3DD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3DF8; } @@ -9629,7 +10131,6 @@ L_08AB3DD4: } L_08AB3DE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3E04; } @@ -9637,7 +10138,6 @@ L_08AB3DE8: } L_08AB3DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3E28; } @@ -9652,7 +10152,6 @@ L_08AB3E04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(32))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB3E1C; } @@ -9660,7 +10159,6 @@ L_08AB3E04: } L_08AB3E14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3E28; } @@ -9683,11 +10181,20 @@ L_08AB3E28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3E3C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3E6C; } @@ -9696,7 +10203,6 @@ L_08AB3E3C: L_08AB3E48: aot_gpr_5 = (aot_gpr_4 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB3EF8; } @@ -9708,14 +10214,22 @@ L_08AB3E54: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(11688))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB3EF8; } @@ -9798,15 +10312,23 @@ L_08AB3EEC: } L_08AB3EF8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3F00: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB3F14; } @@ -9827,15 +10349,23 @@ L_08AB3F14: goto L_08AB3F20; L_08AB3F20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3F28: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3F4C; } @@ -9870,7 +10400,6 @@ L_08AB3F4C: L_08AB3F54: aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB3F64; } @@ -9884,15 +10413,23 @@ L_08AB3F64: goto L_08AB3F68; L_08AB3F68: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3F70: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3F94; } @@ -9927,7 +10464,6 @@ L_08AB3F94: L_08AB3F9C: aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB3FAC; } @@ -9941,15 +10477,23 @@ L_08AB3FAC: goto L_08AB3FB0; L_08AB3FB0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB3FB8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB3FDC; } @@ -9984,7 +10528,6 @@ L_08AB3FDC: L_08AB3FE4: aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB3FF4; } @@ -9998,11 +10541,20 @@ L_08AB3FF4: goto L_08AB3FF8; L_08AB3FF8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0172.cpp b/profiles/vcs/generated/generated_unit_0172.cpp index 6af0094..40f3d85 100644 --- a/profiles/vcs/generated/generated_unit_0172.cpp +++ b/profiles/vcs/generated/generated_unit_0172.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0172[4094] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 12, 0, 13, 0, 14, - 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, - 19, 0, 0, 20, 0, 21, 0, 22, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 33, 0, 0, 34, 0, 0, 35, - 0, 0, 36, 0, 37, 0, 38, 0, 39, 40, 0, 41, 0, 0, 0, 42, 0, 0, 43, 0, 44, 0, 0, 45, 0, 0, 0, 46, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, - 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 57, 58, 0, 0, 0, 0, 0, 59, 60, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 71, 0, 72, 73, 0, 74, 0, 0, 75, 0, 0, 76, 0, 0, - 77, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, 0, 0, 0, 0, - 84, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 88, 0, 89, 0, 0, 0, 0, 90, 0, 91, 92, 0, 0, 93, 0, - 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 99, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 102, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 105, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 112, 0, - 113, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 119, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 140, 0, 141, 0, 0, 0, 0, 142, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 148, 0, 149, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, - 155, 0, 0, 0, 156, 0, 157, 0, 0, 0, 0, 158, 0, 159, 0, 160, 0, 0, 161, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 168, - 0, 0, 0, 0, 169, 0, 0, 0, 0, 170, 0, 171, 0, 0, 172, 173, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, - 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 180, 0, 0, 181, 0, 182, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 186, - 0, 0, 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 190, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, - 192, 0, 193, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, 0, 200, 0, 201, 202, 0, 0, 203, 0, 0, - 0, 204, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, - 210, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 214, 0, 215, 0, 216, 0, 0, 0, 217, 0, 218, - 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, - 227, 0, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 0, 233, 0, 234, 0, 235, 0, 236, 0, 237, 0, 238, 0, 239, 0, 240, 0, 0, 241, - 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 249, 0, 250, 0, 251, 0, 252, - 0, 253, 0, 254, 0, 0, 255, 0, 256, 0, 257, 0, 258, 0, 0, 259, 0, 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, - 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 0, 0, 278, 0, 279, 0, 280, 0, 0, 281, 0, - 282, 283, 0, 284, 0, 0, 285, 0, 0, 286, 0, 287, 288, 0, 289, 0, 0, 290, 0, 291, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, - 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 300, 0, 0, 301, 0, 302, 0, 0, 0, 0, 0, - 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 305, 0, 306, 0, 0, 307, 0, 0, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, - 0, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, - 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, - 0, 336, 0, 0, 337, 0, 0, 0, 0, 338, 0, 339, 340, 0, 0, 341, 0, 342, 343, 0, 0, 344, 0, 345, 346, 0, 0, 347, 0, 348, 349, 0, - 0, 350, 0, 351, 352, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 355, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, - 359, 0, 0, 360, 0, 0, 0, 361, 0, 362, 0, 363, 0, 0, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 0, 369, 0, 370, 0, 0, 0, - 371, 0, 372, 0, 373, 0, 374, 0, 0, 375, 0, 0, 0, 376, 0, 377, 378, 0, 0, 379, 0, 380, 0, 0, 0, 381, 0, 382, 383, 0, 384, 0, - 385, 0, 386, 0, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 390, 0, 0, 0, 391, 0, 392, 0, 0, 393, 0, 0, 394, 0, 395, 0, 0, 0, - 396, 0, 397, 0, 0, 0, 398, 0, 0, 399, 0, 0, 0, 400, 0, 401, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 406, - 0, 0, 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 411, 0, 412, 413, 0, 414, 0, 0, 415, 0, 416, 417, 0, 418, 0, 0, 419, - 0, 420, 0, 0, 421, 0, 0, 422, 0, 423, 0, 0, 424, 0, 0, 425, 0, 426, 0, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, - 0, 431, 0, 432, 0, 0, 0, 433, 0, 434, 0, 435, 0, 0, 436, 0, 0, 437, 0, 438, 439, 0, 440, 0, 0, 441, 0, 0, 0, 442, 0, 443, - 444, 0, 445, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 448, 0, 449, 0, 450, 451, 452, 0, 453, 0, 454, 0, 455, 0, 0, 0, - 456, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 460, 0, 0, 461, 0, 462, 0, 463, 0, 0, 464, 0, 0, 465, - 0, 466, 0, 0, 467, 0, 0, 0, 468, 0, 0, 469, 0, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, - 473, 0, 0, 474, 0, 0, 475, 0, 0, 0, 476, 0, 477, 0, 478, 0, 0, 479, 0, 0, 480, 0, 481, 0, 0, 482, 0, 0, 0, 483, 484, 0, - 0, 485, 0, 0, 0, 486, 0, 487, 488, 0, 489, 0, 490, 0, 0, 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, - 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 498, 0, 499, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, - 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, - 507, 0, 508, 0, 509, 0, 510, 0, 0, 511, 0, 512, 513, 0, 0, 514, 0, 515, 516, 0, 0, 517, 0, 518, 519, 0, 0, 520, 0, 521, 522, 0, - 523, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 527, 0, 0, 528, 0, 0, 529, - 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 538, 0, - 0, 539, 0, 540, 0, 541, 0, 0, 542, 0, 543, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 548, 0, 0, 549, - 0, 0, 550, 0, 551, 0, 0, 0, 552, 0, 553, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 0, 556, 0, 0, 557, 0, 558, 0, 0, 0, 559, - 0, 0, 560, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 564, 0, 565, 0, 566, 0, 0, 567, 0, 568, 0, 569, 0, 570, 571, 0, - 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 0, - 576, 0, 0, 577, 0, 0, 578, 0, 0, 579, 0, 580, 0, 581, 0, 0, 0, 582, 0, 583, 0, 0, 584, 0, 585, 0, 0, 586, 0, 587, 0, 588, - 0, 589, 0, 590, 0, 591, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, - 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, - 598, 0, 0, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, 0, 0, 0, 0, 609, 0, 610, - 0, 0, 611, 0, 612, 0, 613, 0, 0, 614, 0, 615, 0, 616, 0, 0, 617, 0, 0, 618, 0, 619, 0, 620, 0, 0, 0, 0, 621, 0, 0, 622, - 0, 0, 0, 623, 0, 624, 0, 0, 0, 625, 0, 626, 0, 627, 628, 0, 629, 0, 630, 0, 631, 0, 632, 0, 633, 0, 0, 0, 634, 0, 635, 0, - 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 639, 0, 640, 0, 0, 641, 0, 0, 642, 0, 0, - 0, 0, 0, 0, 0, 643, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 646, 0, 647, 0, 648, 0, 649, 0, 0, 650, 0, 651, 0, 0, 652, 0, - 653, 0, 0, 0, 654, 0, 655, 0, 656, 657, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 660, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 662, 0, 663, 0, 664, 0, 0, 0, 665, 0, 666, 0, 667, 0, 0, 0, 668, 0, 669, 0, 670, 0, 0, 0, 671, 0, 672, 0, 673, 0, 0, - 0, 0, 0, 674, 0, 675, 0, 676, 0, 0, 0, 677, 0, 678, 0, 679, 0, 0, 0, 680, 0, 681, 0, 682, 0, 0, 0, 683, 0, 684, 0, 685, - 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, 0, 0, 690, 0, 691, 0, 692, 0, 0, 0, 0, 693, 0, - 694, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 698, 0, 0, 0, 0, 0, 0, 699, 0, 700, 0, 701, 0, 0, 0, 702, 0, 703, 0, 704, 0, - 0, 0, 705, 0, 706, 707, 0, 0, 0, 0, 0, 0, 0, 708, 0, 709, 710, 0, 0, 0, 0, 0, 0, 0, 711, 0, 712, 713, 0, 0, 0, 0, - 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 716, 717, 0, - 718, 0, 0, 719, 0, 720, 721, 0, 0, 0, 722, 0, 0, 723, 0, 724, 725, 0, 0, 0, 726, 0, 0, 727, 0, 728, 729, 0, 0, 730, 0, 0, - 0, 731, 0, 732, 0, 0, 733, 0, 0, 734, 0, 735, 736, 0, 737, 0, 0, 738, 0, 739, 740, 0, 741, 0, 0, 742, 0, 743, 744, 0, 745, 0, - 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 748, 0, 749, 750, 0, 0, 0, 0, 0, 751, 0, 0, 752, 0, 753, - 754, 0, 755, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 758, 0, 0, 759, 0, 760, 0, 761, 0, 762, 0, 0, 763, 0, 764, 765, - 0, 766, 0, 767, 0, 0, 768, 0, 769, 770, 0, 771, 0, 0, 772, 0, 0, 773, 0, 774, 0, 775, 0, 776, 0, 0, 777, 0, 778, 779, 0, 780, - 0, 0, 781, 0, 782, 783, 0, 784, 0, 785, 0, 0, 786, 0, 787, 788, 0, 789, 0, 0, 790, 0, 791, 792, 0, 793, 0, 794, 0, 0, 795, 0, - 0, 796, 0, 797, 798, 0, 799, 0, 0, 800, 0, 801, 802, 0, 803, 0, 0, 804, 0, 805, 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 808, 0, 809, 0, - 0, 810, 0, 0, 811, 0, 0, 0, 812, 0, 0, 813, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 817, 0, 0, 0, 818, 0, 0, 0, 819, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, 0, 823, 0, - 0, 0, 824, 0, 825, 0, 826, 0, 0, 0, 0, 0, 0, 827, 0, 0, 828, 0, 0, 829, 0, 830, 831, 832, 0, 0, 0, 0, 833, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 836, 0, 837, 0, 0, 838, 0, 839, 0, 840, 0, 0, 841, 0, - 0, 842, 0, 0, 843, 0, 844, 845, 846, 0, 0, 0, 0, 847, 0, 0, 848, 0, 0, 849, 0, 0, 850, 0, 0, 851, 0, 852, 853, 0, 854, 0, - 0, 0, 855, 0, 0, 856, 0, 0, 857, 0, 0, 858, 0, 0, 859, 0, 860, 861, 862, 0, 0, 0, 0, 863, 0, 0, 864, 0, 0, 0, 0, 0, - 0, 865, 0, 866, 0, 867, 0, 0, 868, 0, 0, 869, 0, 870, 871, 0, 872, 0, 0, 0, 873, 0, 874, 0, 875, 0, 0, 876, 0, 0, 877, 0, - 878, 879, 0, 880, 0, 0, 0, 881, 882, 0, 883, 0, 0, 884, 0, 0, 885, 0, 886, 887, 0, 888, 0, 0, 0, 889, 0, 0, 890, 0, 0, 891, - 0, 0, 892, 0, 893, 894, 0, 895, 0, 0, 0, 896, 0, 0, 897, 0, 898, 0, 899, 0, 0, 0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 901, 0, 902, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 904, 0, 905, 0, 906, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 909, 0, 910, 0, - 911, 0, 912, 0, 913, 0, 914, 0, 915, 0, 0, 916, 0, 917, 0, 918, 0, 0, 0, 919, 0, 0, 0, 920, 0, 0, 921, 0, 922, 0, 0, 923, - 0, 0, 0, 0, 0, 924, 0, 0, 925, 0, 0, 0, 0, 926, 0, 0, 927, 0, 0, 928, 0, 0, 929, 0, 0, 930, 0, 0, 0, 931, 0, 0, - 0, 932, 0, 933, 0, 0, 934, 0, 935, 0, 0, 0, 936, 0, 0, 0, 937, 0, 938, 0, 0, 939, 0, 940, 0, 0, 941, 0, 0, 942, 0, 0, - 943, 0, 944, 0, 945, 0, 0, 0, 0, 0, 946, 947, 0, 0, 0, 948, 0, 0, 949, 0, 0, 950, 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, - 0, 0, 952, 0, 0, 953, 0, 954, 0, 955, 0, 0, 956, 0, 0, 957, 0, 0, 958, 0, 0, 959, 0, 0, 0, 0, 960, 0, 961, 0, 0, 0, - 962, 0, 963, 0, 0, 0, 0, 0, 0, 0, 0, 964, 0, 0, 0, 965, 0, 966, 967, 0, 968, 0, 969, 0, 0, 0, 970, 0, 971, 0, 0, 0, - 0, 0, 0, 0, 0, 972, 0, 0, 0, 973, 0, 974, 975, 0, 976, 977, 0, 978, 0, 0, 979, 0, 980, 0, 981, 0, 0, 982, 0, 0, 983, 0, - 984, 0, 985, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 987, 0, 0, 0, 988, 0, 0, - 989, 0, 0, 0, 990, 0, 0, 991, 0, 992, 0, 993, 0, 994, 0, 995, 0, 996, 0, 997, 0, 998, 0, 999, 1000, 0, 0, 0, 0, 0, 0, 1001, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1002, 0, 0, 0, 0, 1003, 0, 1004, 0, 0, 0, 0, 1005, 0, 0, 1006, 0, 0, 0, 0, - 0, 1007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1008, 0, 0, 0, 1009, 0, 0, 0, 1010, 0, 0, 0, 1011, 0, 0, 0, 1012, 0, 0, - 0, 1013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1014, 0, 0, 0, 0, 1015, 0, 0, 0, 1016, 0, 0, 0, 1017, 0, 0, 0, 0, - 1018, 0, 0, 0, 0, 0, 0, 0, 1019, 0, 1020, 0, 0, 0, 0, 0, 0, 0, 1021, 0, 1022, 0, 0, 0, 0, 1023, 0, 1024, 0, 0, 0, 0, - 1025, 0, 0, 1026, 0, 1027, 0, 1028, 0, 0, 0, 0, 1029, 0, 1030, 0, 0, 1031, 0, 0, 1032, 0, 0, 1033, 0, 1034, 1035, 0, 1036, 0, 0, 0, - 0, 1037, 0, 0, 1038, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1039, 0, 1040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1041, 0, 1042, 0, - 0, 0, 0, 1043, 0, 1044, 0, 0, 0, 0, 1045, 0, 0, 1046, 0, 1047, 0, 1048, 0, 0, 0, 0, 1049, 0, 1050, 0, 0, 1051, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1052, 0, 1053, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1054, 0, 1055, 0, 0, 0, 0, 1056, 0, 1057, 0, 0, 0, - 0, 1058, 0, 0, 1059, 0, 1060, 0, 1061, 0, 0, 0, 0, 1062, 0, 1063, 0, 0, 1064, 0, 0, 0, 0, 0, 0, 1065, 0, 1066, 0, 0, 0, 0, - 0, 0, 1067, 0, 1068, 0, 0, 0, 0, 1069, 0, 1070, 0, 0, 0, 0, 1071, 0, 0, 1072, 0, 1073, 0, 1074, 0, 0, 0, 0, 1075, 0, 1076, 0, - 0, 1077, 0, 0, 0, 0, 0, 0, 1078, 0, 1079, 0, 0, 0, 0, 0, 0, 1080, 0, 1081, 0, 0, 0, 0, 1082, 0, 1083, 0, 0, 0, 0, 1084, - 0, 0, 1085, 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, 0, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1090, 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 0, 0, 0, 1093, 0, 0, 0, 1094, - 0, 0, 0, 1095, 0, 0, 0, 1096, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 1099, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0172[64] = { + 0x04800050AD552289ull, 0x929050C0046010A9ull, 0x122802C028948B54ull, 0x02A0800080860C24ull, + 0x0C00124924B428A0ull, 0x885444444D0A2821ull, 0x454200040030C000ull, 0x00200400A0488011ull, + 0x0080100200400801ull, 0x0200400801002004ull, 0x0050A92004008010ull, 0x1408104A00A00401ull, + 0x850108000844A851ull, 0x8A0000101002CA10ull, 0x01140280A0082A40ull, 0x26A0824400000015ull, + 0xA2A8802122210012ull, 0x95554AA95480A110ull, 0xAAAA954AAA2802AAull, 0x821A5A4B4A8AAAAAull, + 0x5551284205214428ull, 0xAAAAAAAA80888084ull, 0x1012909A69A69A12ull, 0x5A29A25514AA8A89ull, + 0xA248A24514945125ull, 0x4922929296969248ull, 0x15752105A25A4A8Aull, 0x1001491292A48085ull, + 0x102215A262525449ull, 0x0400040500204081ull, 0x69A69A5548120002ull, 0x480812AA92401009ull, + 0x8A4145149222152Aull, 0x084400206A952214ull, 0x4002006AA94A2A49ull, 0xA0A9555108000108ull, + 0x51556A2890A92A54ull, 0x4A550A2024A82008ull, 0x0000002400208351ull, 0x2A2A2A2A00000000ull, + 0x42A2A004A8A8A8A8ull, 0x0D01A03454540A85ull, 0x6800000000000010ull, 0x5A5A5A4A2691A469ull, + 0xD2A92015A41A4002ull, 0x4AD2D2B4B4AA4B4Aull, 0x50000004001A5A5Aull, 0x4500444400448912ull, + 0x4A95008010E92054ull, 0x048749245A4921D2ull, 0x922D258B4951692Aull, 0x54004140020548B4ull, + 0x9488A95550401000ull, 0x24A5114A22492120ull, 0x142492A408248C15ull, 0x4952DA2014568805ull, + 0x81AAAA9122000805ull, 0x22222002090A1000ull, 0x0A14050108884002ull, 0x50028012169250A9ull, + 0x142801400942A428ull, 0x50A90A140A04A152ull, 0x00002854850A0502ull, 0x2100088888800A00ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0172[64] = { + 1u, 19u, 36u, 55u, 67u, 84u, 103u, 113u, 122u, 128u, 134u, 144u, 155u, 169u, 180u, 192u, + 204u, 219u, 242u, 268u, 295u, 314u, 336u, 359u, 385u, 407u, 431u, 456u, 473u, 494u, 502u, 523u, + 539u, 560u, 576u, 595u, 611u, 636u, 653u, 662u, 674u, 694u, 714u, 718u, 746u, 766u, 796u, 810u, + 824u, 842u, 865u, 892u, 907u, 924u, 943u, 962u, 984u, 1002u, 1013u, 1025u, 1043u, 1058u, 1077u, 1090u, }; void recomp_unit_0172_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0172_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AB4000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0172[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0172[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0172[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AB4000; @@ -1273,7 +1180,6 @@ LOCAL_DISPATCH: L_08AB4000: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB4050; } @@ -1291,7 +1197,6 @@ L_08AB400C: } L_08AB401C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB4048; } @@ -1308,7 +1213,6 @@ L_08AB4024: L_08AB4034: aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB4068; } @@ -1340,7 +1244,6 @@ L_08AB4050: } L_08AB4058: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB4040; } @@ -1359,11 +1262,20 @@ L_08AB4068: goto L_08AB406C; L_08AB406C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4074: ctx.gpr[6] = (0u | 0u); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -1385,7 +1297,17 @@ L_08AB4090: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4098: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1402,7 +1324,6 @@ L_08AB4098: L_08AB40DC: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(816))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AB4158; } @@ -1420,7 +1341,6 @@ L_08AB40E8: L_08AB4100: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AB4154; } @@ -1428,7 +1348,6 @@ L_08AB4100: } L_08AB410C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AB4154; } @@ -1436,7 +1355,6 @@ L_08AB410C: } L_08AB4114: aot_gpr_31 = (0x08AB411Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB411Cu) goto L_08AB411C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB411C: @@ -1491,7 +1409,17 @@ L_08AB4168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4198: aot_gpr_5 = (0u | 0u); goto L_08AB419C; @@ -1508,18 +1436,26 @@ L_08AB419C: } L_08AB41B0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB41B8: ctx.gpr[10] = (ctx.gpr[9] | 0u); ctx.gpr[9] = (ctx.gpr[8] & 255u); ctx.gpr[8] = (ctx.gpr[10] & 255u); ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08AB41DC; } @@ -1545,7 +1481,6 @@ L_08AB41DC: L_08AB41E4: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(48))); { const bool branch_taken = aot_gpr_2 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB422C; } @@ -1554,7 +1489,6 @@ L_08AB41E4: L_08AB41F0: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(52))); { const bool branch_taken = aot_gpr_2 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AB422C; } @@ -1563,7 +1497,6 @@ L_08AB41F0: L_08AB41FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[10] + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB4218; } @@ -1571,7 +1504,6 @@ L_08AB41FC: } L_08AB4208: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08AB4220; } @@ -1579,7 +1511,6 @@ L_08AB4208: } L_08AB4210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB4224; } @@ -1621,7 +1552,6 @@ L_08AB423C: goto L_08AB4248; L_08AB4248: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB426C; } @@ -1630,7 +1560,6 @@ L_08AB4248: L_08AB4250: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(48))); { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB426C; } @@ -1648,7 +1577,6 @@ L_08AB425C: } L_08AB426C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB4298; } @@ -1681,11 +1609,20 @@ L_08AB4298: goto L_08AB429C; L_08AB429C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB42A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -1700,7 +1637,6 @@ L_08AB42A4: } L_08AB42CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB435C; } @@ -1715,7 +1651,6 @@ L_08AB42D4: L_08AB42E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB4348; } @@ -1727,7 +1662,6 @@ L_08AB42F0: aot_gpr_5 = (aot_gpr_5 + static_cast(500)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[6] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB432C; } @@ -1736,7 +1670,6 @@ L_08AB42F0: L_08AB4308: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(80))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB432C; } @@ -1758,7 +1691,6 @@ L_08AB432C: aot_gpr_4 = (aot_gpr_4 + static_cast(10000)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB4348; } @@ -1793,7 +1725,17 @@ L_08AB435C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB437C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -1822,7 +1764,6 @@ L_08AB43BC: } L_08AB43D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB4500; } @@ -1852,7 +1793,6 @@ L_08AB43E4: goto L_08AB4414; L_08AB4414: { const bool branch_taken = static_cast(ctx.gpr[13]) < 0; - // nop if (branch_taken) { goto L_08AB442C; } @@ -1896,7 +1836,6 @@ L_08AB4450: goto L_08AB4454; L_08AB4454: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB44EC; } @@ -1905,7 +1844,6 @@ L_08AB4454: L_08AB445C: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AB44B0; } @@ -1914,7 +1852,6 @@ L_08AB445C: L_08AB4468: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AB44B0; } @@ -1923,7 +1860,6 @@ L_08AB4468: L_08AB4474: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AB44B0; } @@ -1932,7 +1868,6 @@ L_08AB4474: L_08AB4480: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] == ctx.gpr[10]; - // nop if (branch_taken) { goto L_08AB44B0; } @@ -1941,7 +1876,6 @@ L_08AB4480: L_08AB448C: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AB44B0; } @@ -1950,7 +1884,6 @@ L_08AB448C: L_08AB4498: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] == aot_gpr_2; - // nop if (branch_taken) { goto L_08AB44B0; } @@ -1959,7 +1892,6 @@ L_08AB4498: L_08AB44A4: ctx.gpr[24] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = ctx.gpr[24] != ctx.gpr[3]; - // nop if (branch_taken) { goto L_08AB44EC; } @@ -2004,9 +1936,7 @@ L_08AB44B0: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AB44EC; } @@ -2047,7 +1977,6 @@ L_08AB4514: goto L_08AB452C; L_08AB452C: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08AB4544; } @@ -2092,7 +2021,6 @@ L_08AB4568: L_08AB456C: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB463C; } @@ -2102,7 +2030,6 @@ L_08AB4578: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB45C8; } @@ -2112,7 +2039,6 @@ L_08AB4588: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 261u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB45C8; } @@ -2122,7 +2048,6 @@ L_08AB4598: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB45C8; } @@ -2132,7 +2057,6 @@ L_08AB45A8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 207u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB45C8; } @@ -2142,7 +2066,6 @@ L_08AB45B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 234u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB463C; } @@ -2150,12 +2073,10 @@ L_08AB45B8: } L_08AB45C8: aot_gpr_31 = (0x08AB45D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB45D0u) goto L_08AB45D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AB45D0: { const bool branch_taken = ctx.gpr[17] == aot_gpr_2; - // nop if (branch_taken) { goto L_08AB463C; } @@ -2166,7 +2087,6 @@ L_08AB45D8: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AB463C; } @@ -2176,7 +2096,6 @@ L_08AB45EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08AB463C; } @@ -2222,9 +2141,7 @@ L_08AB45FC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AB463C; } @@ -2267,7 +2184,17 @@ L_08AB4654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4688: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[19]); @@ -2301,7 +2228,6 @@ L_08AB46C4: } L_08AB46D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB46F8; } @@ -2309,7 +2235,6 @@ L_08AB46D8: } L_08AB46E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB4AD8; } @@ -2360,7 +2285,6 @@ L_08AB473C: L_08AB474C: aot_gpr_4 = (ctx.gpr[20] < static_cast(19) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB4A94; } @@ -2377,7 +2301,17 @@ L_08AB4758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4774: { const bool branch_taken = 0u == 0u; ctx.gpr[6] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); @@ -2705,7 +2639,6 @@ L_08AB4AA0: goto L_08AB4AAC; L_08AB4AAC: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AB4ABC; } @@ -2749,7 +2682,17 @@ L_08AB4AD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4B00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(0u); @@ -2784,7 +2727,6 @@ L_08AB4B28: ctx.gpr[7] = (ctx.gpr[7] & 65535u); ctx.gpr[8] = (static_cast(ctx.gpr[7]) < 200 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AB4B28; } @@ -2796,7 +2738,17 @@ L_08AB4B54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4B5C: ctx.gpr[6] = (2236u << 16u); ctx.gpr[11] = (aot_gpr_4 << 16u); @@ -2811,7 +2763,6 @@ L_08AB4B5C: goto L_08AB4B84; L_08AB4B84: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB4BB0; } @@ -2820,7 +2771,6 @@ L_08AB4B84: L_08AB4B8C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB4BB0; } @@ -2856,11 +2806,20 @@ L_08AB4BB0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4BCC: ctx.gpr[8] = (aot_gpr_4 << 16u); aot_gpr_4 = (2236u << 16u); @@ -2882,7 +2841,6 @@ L_08AB4BF0: ctx.gpr[7] = (ctx.gpr[7] + aot_gpr_4); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[7] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AB4C10; } @@ -2900,7 +2858,6 @@ L_08AB4C00: } L_08AB4C10: { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AB4C2C; } @@ -2919,7 +2876,6 @@ L_08AB4C18: } L_08AB4C2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB4CE0; } @@ -2927,7 +2883,6 @@ L_08AB4C2C: } L_08AB4C34: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AB4C58; } @@ -2936,7 +2891,6 @@ L_08AB4C34: L_08AB4C3C: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[10] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AB4C58; } @@ -3015,7 +2969,6 @@ L_08AB4CC0: aot_gpr_5 = (aot_gpr_5 & 65535u); ctx.gpr[7] = (static_cast(aot_gpr_5) < 200 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AB4CC0; } @@ -3023,11 +2976,20 @@ L_08AB4CC0: } L_08AB4CE0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4CE8: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3040,7 +3002,6 @@ L_08AB4CFC: ctx.gpr[7] = (ctx.gpr[7] + aot_gpr_5); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[7] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB4D2C; } @@ -3051,7 +3012,6 @@ L_08AB4D10: ctx.gpr[6] = (ctx.gpr[6] & 65535u); ctx.gpr[7] = (static_cast(ctx.gpr[6]) < 200 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AB4CFC; } @@ -3059,7 +3019,6 @@ L_08AB4D10: } L_08AB4D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB4D38; } @@ -3079,11 +3038,20 @@ L_08AB4D38: goto L_08AB4D3C; L_08AB4D3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4D44: aot_gpr_5 = (aot_gpr_5 << 16u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); @@ -3106,11 +3074,20 @@ L_08AB4D44: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4D70: aot_gpr_4 = (aot_gpr_4 << 16u); aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); @@ -3123,7 +3100,17 @@ L_08AB4D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4D90: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_2 = (aot_gpr_4 | 0u); @@ -3161,7 +3148,17 @@ L_08AB4DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3169,7 +3166,6 @@ L_08AB4DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2260))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB4E4C; } @@ -3178,7 +3174,6 @@ L_08AB4DFC: L_08AB4E18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB4E2C; } @@ -3186,7 +3181,6 @@ L_08AB4E18: } L_08AB4E24: aot_gpr_31 = (0x08AB4E2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB4E2Cu) goto L_08AB4E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB4E2C: @@ -3216,14 +3210,33 @@ L_08AB4E4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4E74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4E7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3240,7 +3253,6 @@ L_08AB4E7C: } L_08AB4E9C: aot_gpr_31 = (0x08AB4EA4u); - // nop goto L_08AB4E74; L_08AB4EA4: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[17], ctx.gpr[17]}; @@ -3257,14 +3269,34 @@ L_08AB4EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4EC8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2292))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4ED0: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2288))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2292))); @@ -3273,7 +3305,17 @@ L_08AB4ED0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4EE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3296,7 +3338,6 @@ L_08AB4F00: goto L_08AB4F08; L_08AB4F08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB4FA4; } @@ -3360,7 +3401,17 @@ L_08AB4FA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4FBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -3372,7 +3423,6 @@ L_08AB4FBC: AOT_REGCACHE_SYNC_OUT(); return; L_08AB4FD4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB4FE4; } @@ -3396,7 +3446,17 @@ L_08AB4FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB4FF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2284))); aot_gpr_4 = (aot_gpr_4 + static_cast(4)); @@ -3405,7 +3465,17 @@ L_08AB4FF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5004: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2284))); jump_target = aot_gpr_31; @@ -3413,7 +3483,17 @@ L_08AB5004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5010: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2284))); @@ -3471,7 +3551,17 @@ L_08AB5080: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5094: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2284))); aot_gpr_5 = (0u + static_cast(-4)); @@ -3486,16 +3576,24 @@ L_08AB5094: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB50BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AB50CCu); - // nop goto L_08AB4EC8; L_08AB50CC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB50F4; } @@ -3503,7 +3601,6 @@ L_08AB50CC: } L_08AB50D4: aot_gpr_31 = (0x08AB50DCu); - // nop goto L_08AB4EC8; L_08AB50DC: aot_gpr_31 = (0x08AB50E4u); @@ -3516,7 +3613,6 @@ L_08AB50E4: goto L_08AB50F4; L_08AB50F4: aot_gpr_31 = (0x08AB50FCu); - // nop goto L_08AB5610; L_08AB50FC: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2256), 0u); @@ -3527,7 +3623,17 @@ L_08AB50FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5110: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_gpr_4 + static_cast(-2272)); @@ -3547,11 +3653,20 @@ L_08AB5120: } L_08AB5134: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB513C: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7876), 0u); @@ -3573,7 +3688,6 @@ L_08AB515C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5168: aot_gpr_31 = (0x08AB5170u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 888u, 0x0898B7D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5170u) goto L_08AB5170; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5170: @@ -3582,7 +3696,6 @@ L_08AB5170: goto L_08AB4FBC; L_08AB5178: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB5324; } @@ -3599,7 +3712,6 @@ L_08AB518C: goto L_08AB4FBC; L_08AB5194: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB5314; } @@ -3607,7 +3719,6 @@ L_08AB5194: } L_08AB519C: aot_gpr_31 = (0x08AB51A4u); - // nop goto L_08AB5004; L_08AB51A4: aot_gpr_31 = (0x08AB51ACu); @@ -3621,7 +3732,6 @@ L_08AB51AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AB51B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB5304; } @@ -3629,7 +3739,6 @@ L_08AB51B8: } L_08AB51C0: aot_gpr_31 = (0x08AB51C8u); - // nop goto L_08AB5094; L_08AB51C8: aot_gpr_31 = (0x08AB51D0u); @@ -3641,7 +3750,6 @@ L_08AB51D0: goto L_08AB4FBC; L_08AB51D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB52F4; } @@ -3649,7 +3757,6 @@ L_08AB51D8: } L_08AB51E0: aot_gpr_31 = (0x08AB51E8u); - // nop goto L_08AB5004; L_08AB51E8: aot_gpr_31 = (0x08AB51F0u); @@ -3663,16 +3770,13 @@ L_08AB51F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB51FC: aot_gpr_31 = (0x08AB5204u); - // nop goto L_08AB5094; L_08AB5204: aot_gpr_31 = (0x08AB520Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 66u, 0x088807A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB520Cu) goto L_08AB520C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB520C: aot_gpr_31 = (0x08AB5214u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0010_entry, 10u, 62u, 0x0882C3C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5214u) goto L_08AB5214; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5214: @@ -3681,7 +3785,6 @@ L_08AB5214: goto L_08AB4FBC; L_08AB521C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB52E4; } @@ -3712,7 +3815,6 @@ L_08AB5254: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5264: aot_gpr_31 = (0x08AB526Cu); - // nop goto L_08AB5094; L_08AB526C: aot_gpr_31 = (0x08AB5274u); @@ -3720,7 +3822,6 @@ L_08AB526C: goto L_08AB4FBC; L_08AB5274: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB52D4; } @@ -3728,7 +3829,6 @@ L_08AB5274: } L_08AB527C: aot_gpr_31 = (0x08AB5284u); - // nop goto L_08AB5004; L_08AB5284: aot_gpr_31 = (0x08AB528Cu); @@ -3742,7 +3842,6 @@ L_08AB528C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5298: aot_gpr_31 = (0x08AB52A0u); - // nop goto L_08AB5094; L_08AB52A0: aot_gpr_31 = (0x08AB52A8u); @@ -3750,7 +3849,6 @@ L_08AB52A0: goto L_08AB4FBC; L_08AB52A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB52C4; } @@ -3759,7 +3857,6 @@ L_08AB52A8: L_08AB52B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5334; } @@ -3767,7 +3864,6 @@ L_08AB52B0: } L_08AB52BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB533C; } @@ -3775,7 +3871,6 @@ L_08AB52BC: } L_08AB52C4: aot_gpr_31 = (0x08AB52CCu); - // nop goto L_08AB50BC; L_08AB52CC: { const bool branch_taken = 0u == 0u; @@ -3787,7 +3882,6 @@ L_08AB52CC: } L_08AB52D4: aot_gpr_31 = (0x08AB52DCu); - // nop goto L_08AB50BC; L_08AB52DC: { const bool branch_taken = 0u == 0u; @@ -3799,7 +3893,6 @@ L_08AB52DC: } L_08AB52E4: aot_gpr_31 = (0x08AB52ECu); - // nop goto L_08AB50BC; L_08AB52EC: { const bool branch_taken = 0u == 0u; @@ -3811,7 +3904,6 @@ L_08AB52EC: } L_08AB52F4: aot_gpr_31 = (0x08AB52FCu); - // nop goto L_08AB50BC; L_08AB52FC: { const bool branch_taken = 0u == 0u; @@ -3823,7 +3915,6 @@ L_08AB52FC: } L_08AB5304: aot_gpr_31 = (0x08AB530Cu); - // nop goto L_08AB50BC; L_08AB530C: { const bool branch_taken = 0u == 0u; @@ -3835,7 +3926,6 @@ L_08AB530C: } L_08AB5314: aot_gpr_31 = (0x08AB531Cu); - // nop goto L_08AB50BC; L_08AB531C: { const bool branch_taken = 0u == 0u; @@ -3847,7 +3937,6 @@ L_08AB531C: } L_08AB5324: aot_gpr_31 = (0x08AB532Cu); - // nop goto L_08AB50BC; L_08AB532C: { const bool branch_taken = 0u == 0u; @@ -3859,7 +3948,6 @@ L_08AB532C: } L_08AB5334: aot_gpr_31 = (0x08AB533Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB533Cu) goto L_08AB533C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB533C: @@ -3879,11 +3967,9 @@ L_08AB534C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB535C: aot_gpr_31 = (0x08AB5364u); - // nop goto L_08AB5094; L_08AB5364: aot_gpr_31 = (0x08AB536Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 526u, 0x08AD3110u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB536Cu) goto L_08AB536C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB536C: @@ -3897,7 +3983,6 @@ L_08AB536C: } L_08AB5378: aot_gpr_31 = (0x08AB5380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5380u) goto L_08AB5380; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5380: @@ -3905,7 +3990,6 @@ L_08AB5380: goto L_08AB5384; L_08AB5384: aot_gpr_31 = (0x08AB538Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 708u, 0x089C70A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB538Cu) goto L_08AB538C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB538C: @@ -3925,7 +4009,6 @@ L_08AB5398: } L_08AB53A4: aot_gpr_31 = (0x08AB53ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB53ACu) goto L_08AB53AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB53AC: @@ -3933,7 +4016,6 @@ L_08AB53AC: goto L_08AB53B0; L_08AB53B0: aot_gpr_31 = (0x08AB53B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 710u, 0x089C70B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB53B8u) goto L_08AB53B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB53B8: @@ -3944,7 +4026,6 @@ L_08AB53B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB53C4: aot_gpr_31 = (0x08AB53CCu); - // nop goto L_08AB50BC; L_08AB53CC: aot_gpr_2 = (0u | 1u); @@ -3961,7 +4042,17 @@ L_08AB53D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB53E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -3979,7 +4070,6 @@ L_08AB53FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AB540C: aot_gpr_31 = (0x08AB5414u); - // nop goto L_08AB50BC; L_08AB5414: aot_gpr_2 = (0u | 1u); @@ -3990,7 +4080,17 @@ L_08AB5414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5428: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4000,7 +4100,6 @@ L_08AB5428: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5438: aot_gpr_31 = (0x08AB5440u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5440u) goto L_08AB5440; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5440: @@ -4018,14 +4117,34 @@ L_08AB5454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5460: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5468: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (32785u << 16u); @@ -4055,7 +4174,6 @@ L_08AB5498: aot_gpr_5 = (aot_gpr_5 + static_cast(402)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4063,7 +4181,6 @@ L_08AB5498: } L_08AB54AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4122,7 +4239,6 @@ L_08AB54E8: } L_08AB54F0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AB55A4; } @@ -4157,11 +4273,20 @@ L_08AB551C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12008))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB553C: aot_gpr_5 = (aot_gpr_5 + static_cast(896)); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); @@ -4190,14 +4315,22 @@ L_08AB555C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12056))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB557C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4205,7 +4338,6 @@ L_08AB557C: } L_08AB5584: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4213,7 +4345,6 @@ L_08AB5584: } L_08AB558C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4221,7 +4352,6 @@ L_08AB558C: } L_08AB5594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4229,7 +4359,6 @@ L_08AB5594: } L_08AB559C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4237,7 +4366,6 @@ L_08AB559C: } L_08AB55A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4245,7 +4373,6 @@ L_08AB55A4: } L_08AB55AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4253,7 +4380,6 @@ L_08AB55AC: } L_08AB55B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4261,7 +4387,6 @@ L_08AB55B4: } L_08AB55BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4269,7 +4394,6 @@ L_08AB55BC: } L_08AB55C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4277,7 +4401,6 @@ L_08AB55C4: } L_08AB55CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4285,7 +4408,6 @@ L_08AB55CC: } L_08AB55D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4293,7 +4415,6 @@ L_08AB55D4: } L_08AB55DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4301,7 +4422,6 @@ L_08AB55DC: } L_08AB55E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4309,7 +4429,6 @@ L_08AB55E4: } L_08AB55EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4317,7 +4436,6 @@ L_08AB55EC: } L_08AB55F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4325,7 +4443,6 @@ L_08AB55F4: } L_08AB55FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB55FC; } @@ -4338,13 +4455,22 @@ L_08AB5604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5610: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2216))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5630; } @@ -4352,7 +4478,6 @@ L_08AB5610: } L_08AB5624: aot_gpr_31 = (0x08AB562Cu); - // nop goto L_08AB4E74; L_08AB562C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2216), 0u); @@ -4360,7 +4485,6 @@ L_08AB562C: L_08AB5630: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5648; } @@ -4368,7 +4492,6 @@ L_08AB5630: } L_08AB563C: aot_gpr_31 = (0x08AB5644u); - // nop goto L_08AB4E74; L_08AB5644: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2212), 0u); @@ -4376,7 +4499,6 @@ L_08AB5644: L_08AB5648: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5660; } @@ -4384,7 +4506,6 @@ L_08AB5648: } L_08AB5654: aot_gpr_31 = (0x08AB565Cu); - // nop goto L_08AB4E74; L_08AB565C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2204), 0u); @@ -4392,7 +4513,6 @@ L_08AB565C: L_08AB5660: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5678; } @@ -4400,7 +4520,6 @@ L_08AB5660: } L_08AB566C: aot_gpr_31 = (0x08AB5674u); - // nop goto L_08AB4E74; L_08AB5674: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2208), 0u); @@ -4408,7 +4527,6 @@ L_08AB5674: L_08AB5678: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2200))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5690; } @@ -4416,7 +4534,6 @@ L_08AB5678: } L_08AB5684: aot_gpr_31 = (0x08AB568Cu); - // nop goto L_08AB4E74; L_08AB568C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2200), 0u); @@ -4428,7 +4545,17 @@ L_08AB5690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB569C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -4440,7 +4567,6 @@ L_08AB569C: L_08AB56B0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AB56C4; } @@ -4448,7 +4574,6 @@ L_08AB56B0: } L_08AB56BC: aot_gpr_31 = (0x08AB56C4u); - // nop goto L_08AB5468; L_08AB56C4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4457,7 +4582,17 @@ L_08AB56C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB56D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4479,7 +4614,6 @@ L_08AB56F0: L_08AB5700: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB5724; } @@ -4497,7 +4631,6 @@ L_08AB570C: } L_08AB571C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5744; } @@ -4505,7 +4638,6 @@ L_08AB571C: } L_08AB5724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5A88; } @@ -4530,7 +4662,6 @@ L_08AB5744: AOT_REGCACHE_SYNC_OUT(); return; L_08AB574C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB5A58; } @@ -4538,7 +4669,6 @@ L_08AB574C: } L_08AB5754: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08AB5808; } @@ -4644,11 +4774,9 @@ L_08AB57F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB57F8: aot_gpr_31 = (0x08AB5800u); - // nop goto L_08AB50BC; L_08AB5800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5A58; } @@ -4657,7 +4785,6 @@ L_08AB5800: L_08AB5808: aot_gpr_4 = (0u | 6u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB5850; } @@ -4692,7 +4819,6 @@ L_08AB5838: goto L_08AB50BC; L_08AB5848: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5A58; } @@ -4701,7 +4827,6 @@ L_08AB5848: L_08AB5850: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB58CC; } @@ -4780,7 +4905,6 @@ L_08AB58BC: L_08AB58CC: aot_gpr_4 = (0u | 8u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB590C; } @@ -4820,7 +4944,6 @@ L_08AB58FC: L_08AB590C: ctx.gpr[17] = (0u | 1u); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AB59D4; } @@ -4829,7 +4952,6 @@ L_08AB590C: L_08AB5918: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB599C; } @@ -4916,7 +5038,6 @@ L_08AB5990: } L_08AB599C: aot_gpr_31 = (0x08AB59A4u); - // nop goto L_08AB50BC; L_08AB59A4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -4951,7 +5072,6 @@ L_08AB59C4: L_08AB59D4: aot_gpr_4 = (0u | 7u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB5A58; } @@ -4969,7 +5089,6 @@ L_08AB59E0: L_08AB59EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB5A0C; } @@ -4994,7 +5113,6 @@ L_08AB5A0C: goto L_08AB53E4; L_08AB5A1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5A58; } @@ -5002,7 +5120,6 @@ L_08AB5A1C: } L_08AB5A24: aot_gpr_31 = (0x08AB5A2Cu); - // nop goto L_08AB50BC; L_08AB5A2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); @@ -5073,13 +5190,22 @@ L_08AB5A88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5AA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB5AD0; } @@ -5088,7 +5214,6 @@ L_08AB5AA0: L_08AB5AB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-27191))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5AC8; } @@ -5118,7 +5243,6 @@ L_08AB5AD4: goto L_08AB5AD8; L_08AB5AD8: aot_gpr_31 = (0x08AB5AE0u); - // nop ctx.pc = 0x08B7350Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5AE0: @@ -5127,7 +5251,6 @@ L_08AB5AE0: goto L_08AB7430; L_08AB5AE8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AB5AD8; } @@ -5153,7 +5276,17 @@ L_08AB5B08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5B1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5183,7 +5316,6 @@ L_08AB5B48: goto L_08AB782C; L_08AB5B54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5B90; } @@ -5191,7 +5323,6 @@ L_08AB5B54: } L_08AB5B5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5CB0; } @@ -5200,7 +5331,6 @@ L_08AB5B5C: L_08AB5B64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-27191))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5B84; } @@ -5213,7 +5343,6 @@ L_08AB5B70: goto L_08AB782C; L_08AB5B7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5B90; } @@ -5228,7 +5357,6 @@ L_08AB5B90: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(301))); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7364), static_cast(aot_gpr_4)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5BB8; } @@ -5243,7 +5371,6 @@ L_08AB5BA0: L_08AB5BAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(301))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB5BA0; } @@ -5273,7 +5400,6 @@ L_08AB5BF0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2236), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2236))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AB5C30; } @@ -5310,7 +5436,6 @@ L_08AB5C28: } L_08AB5C30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5CB0; } @@ -5319,7 +5444,6 @@ L_08AB5C30: L_08AB5C38: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-27191))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5C58; } @@ -5332,7 +5456,6 @@ L_08AB5C44: goto L_08AB569C; L_08AB5C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB5C64; } @@ -5384,7 +5507,6 @@ L_08AB5CA0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5CA8: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_08AB5CB0; } @@ -5402,7 +5524,17 @@ L_08AB5CB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5CC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5420,7 +5552,17 @@ L_08AB5CD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5CF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5438,7 +5580,17 @@ L_08AB5D00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5D1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 3u); @@ -5459,7 +5611,17 @@ L_08AB5D38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5D54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5490,7 +5652,17 @@ L_08AB5D88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5DA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (0u | 4u); @@ -5519,7 +5691,17 @@ L_08AB5DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5E04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -5569,7 +5751,6 @@ L_08AB5E78: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5E80: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB5E98; } @@ -5591,7 +5772,6 @@ L_08AB5E90: L_08AB5E98: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2216))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5EB0; } @@ -5599,7 +5779,6 @@ L_08AB5E98: } L_08AB5EA4: aot_gpr_31 = (0x08AB5EACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5EACu) goto L_08AB5EAC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5EAC: @@ -5608,7 +5787,6 @@ L_08AB5EAC: L_08AB5EB0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5EC8; } @@ -5616,7 +5794,6 @@ L_08AB5EB0: } L_08AB5EBC: aot_gpr_31 = (0x08AB5EC4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5EC4u) goto L_08AB5EC4; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5EC4: @@ -5625,7 +5802,6 @@ L_08AB5EC4: L_08AB5EC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5EE0; } @@ -5633,7 +5809,6 @@ L_08AB5EC8: } L_08AB5ED4: aot_gpr_31 = (0x08AB5EDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5EDCu) goto L_08AB5EDC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5EDC: @@ -5642,7 +5817,6 @@ L_08AB5EDC: L_08AB5EE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2200))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB5EF8; } @@ -5650,7 +5824,6 @@ L_08AB5EE0: } L_08AB5EEC: aot_gpr_31 = (0x08AB5EF4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB5EF4u) goto L_08AB5EF4; AOT_REGCACHE_SYNC_OUT(); return; L_08AB5EF4: @@ -5658,7 +5831,6 @@ L_08AB5EF4: goto L_08AB5EF8; L_08AB5EF8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB5F0C; } @@ -5686,7 +5858,17 @@ L_08AB5F0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -5697,7 +5879,6 @@ L_08AB5F30: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB5F64; } @@ -5726,7 +5907,6 @@ L_08AB5F7C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB5F84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB5F9C; } @@ -5747,7 +5927,6 @@ L_08AB5F94: } L_08AB5F9C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB5FB0; } @@ -5773,7 +5952,17 @@ L_08AB5FB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB5FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-736)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5799,7 +5988,6 @@ L_08AB5FF8: } L_08AB6004: aot_gpr_31 = (0x08AB600Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB600Cu) goto L_08AB600C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB600C: @@ -5810,7 +5998,6 @@ L_08AB600C: L_08AB6014: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6028; } @@ -5818,7 +6005,6 @@ L_08AB6014: } L_08AB6020: aot_gpr_31 = (0x08AB6028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6028u) goto L_08AB6028; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6028: @@ -5857,7 +6043,6 @@ L_08AB6064: L_08AB6070: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08AB6174; } @@ -5871,7 +6056,6 @@ L_08AB607C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6088: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08AB6148; } @@ -5901,7 +6085,6 @@ L_08AB60A8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB60B8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AB6134; } @@ -5924,7 +6107,6 @@ L_08AB60D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB60E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AB6134; } @@ -5945,7 +6127,6 @@ L_08AB60FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6108: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08AB6134; } @@ -5973,7 +6154,6 @@ L_08AB6134: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6140: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08AB6090; } @@ -5992,7 +6172,6 @@ L_08AB6150: AOT_REGCACHE_SYNC_OUT(); return; L_08AB615C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB616C; } @@ -6031,7 +6210,17 @@ L_08AB6178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB6194: aot_gpr_29 = (aot_gpr_29 + static_cast(-416)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(404), ctx.gpr[23]); @@ -6075,7 +6264,6 @@ L_08AB6200: L_08AB620C: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08AB6294; } @@ -6122,7 +6310,6 @@ L_08AB624C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6258: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB627C; } @@ -6136,7 +6323,6 @@ L_08AB6260: AOT_REGCACHE_SYNC_OUT(); return; L_08AB626C: { const bool branch_taken = static_cast(aot_gpr_2) > 0; - // nop if (branch_taken) { goto L_08AB6234; } @@ -6144,7 +6330,6 @@ L_08AB626C: } L_08AB6274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB628C; } @@ -6189,7 +6374,17 @@ L_08AB6298: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB62C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6248,7 +6443,17 @@ L_08AB6320: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB636C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6261,7 +6466,6 @@ L_08AB6380: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB644C; } @@ -6293,7 +6497,6 @@ L_08AB63A0: } L_08AB63A8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AB6434; } @@ -6301,7 +6504,6 @@ L_08AB63A8: } L_08AB63B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB6454; } @@ -6315,7 +6517,6 @@ L_08AB63B8: L_08AB63C0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB63D4; } @@ -6323,11 +6524,9 @@ L_08AB63C0: } L_08AB63CC: aot_gpr_31 = (0x08AB63D4u); - // nop goto L_08AB5468; L_08AB63D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB6454; } @@ -6347,7 +6546,6 @@ L_08AB63DC: } L_08AB63F4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AB6410; } @@ -6356,7 +6554,6 @@ L_08AB63F4: L_08AB63FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(1484))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6410; } @@ -6368,13 +6565,11 @@ L_08AB6408: goto L_08AB6410; L_08AB6410: aot_gpr_31 = (0x08AB6418u); - // nop ctx.pc = 0x08B730BCu; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6418: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB642C; } @@ -6382,11 +6577,9 @@ L_08AB6418: } L_08AB6424: aot_gpr_31 = (0x08AB642Cu); - // nop goto L_08AB5468; L_08AB642C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB6454; } @@ -6412,7 +6605,6 @@ L_08AB6440: } L_08AB644C: aot_gpr_31 = (0x08AB6454u); - // nop goto L_08AB5468; L_08AB6454: aot_gpr_31 = (0x08AB645Cu); @@ -6428,11 +6620,20 @@ L_08AB645C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB6470: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7364))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB648C; } @@ -6446,11 +6647,20 @@ L_08AB647C: goto L_08AB648C; L_08AB648C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB6494: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-2196), static_cast(0u)); @@ -6459,12 +6669,10 @@ L_08AB6494: goto L_08AB64A4; L_08AB64A4: aot_gpr_31 = (0x08AB64ACu); - // nop ctx.pc = 0x08B7350Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AB64AC: aot_gpr_31 = (0x08AB64B4u); - // nop goto L_08AB636C; L_08AB64B4: aot_gpr_16 = (aot_gpr_2 | 0u); @@ -6476,7 +6684,6 @@ L_08AB64B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB64C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB64D8; } @@ -6489,7 +6696,6 @@ L_08AB64C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB64D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB64B8; } @@ -6497,7 +6703,6 @@ L_08AB64D0: } L_08AB64D8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AB64A4; } @@ -6507,7 +6712,6 @@ L_08AB64E0: aot_gpr_4 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2236), aot_gpr_4); aot_gpr_31 = (0x08AB64F0u); - // nop goto L_08AB6470; L_08AB64F0: aot_gpr_31 = (0x08AB64F8u); @@ -6523,7 +6727,17 @@ L_08AB64F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB650C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6544,7 +6758,6 @@ L_08AB6534: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(301))); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7364), static_cast(aot_gpr_4)); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB655C; } @@ -6552,7 +6765,6 @@ L_08AB6534: } L_08AB654C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB6574; } @@ -6575,7 +6787,6 @@ L_08AB655C: L_08AB6568: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(301))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB655C; } @@ -6596,7 +6807,6 @@ L_08AB6594: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-2236), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2236))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AB65C8; } @@ -6651,7 +6861,6 @@ L_08AB65E4: L_08AB65EC: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_08AB6600; } @@ -6670,7 +6879,6 @@ L_08AB6600: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6610: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AB6620; } @@ -6700,7 +6908,17 @@ L_08AB6624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB663C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6722,7 +6940,17 @@ L_08AB663C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB6654: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (0u | 3u); @@ -6808,7 +7036,6 @@ L_08AB6694: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(100), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB678C; } @@ -6816,7 +7043,6 @@ L_08AB6694: } L_08AB6784: aot_gpr_31 = (0x08AB678Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB678Cu) goto L_08AB678C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB678C: @@ -6828,7 +7054,6 @@ L_08AB6794: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(104), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB67AC; } @@ -6836,7 +7061,6 @@ L_08AB6794: } L_08AB67A4: aot_gpr_31 = (0x08AB67ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB67ACu) goto L_08AB67AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB67AC: @@ -6848,7 +7072,6 @@ L_08AB67B4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(108), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB67CC; } @@ -6856,7 +7079,6 @@ L_08AB67B4: } L_08AB67C4: aot_gpr_31 = (0x08AB67CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB67CCu) goto L_08AB67CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB67CC: @@ -6868,7 +7090,6 @@ L_08AB67D4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(109), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB67EC; } @@ -6876,7 +7097,6 @@ L_08AB67D4: } L_08AB67E4: aot_gpr_31 = (0x08AB67ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB67ECu) goto L_08AB67EC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB67EC: @@ -6890,7 +7110,6 @@ L_08AB67F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(116), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6814; } @@ -6898,7 +7117,6 @@ L_08AB67F4: } L_08AB680C: aot_gpr_31 = (0x08AB6814u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6814u) goto L_08AB6814; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6814: @@ -6910,7 +7128,6 @@ L_08AB681C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(120), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6834; } @@ -6918,7 +7135,6 @@ L_08AB681C: } L_08AB682C: aot_gpr_31 = (0x08AB6834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6834u) goto L_08AB6834; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6834: @@ -6930,7 +7146,6 @@ L_08AB683C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(124), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6854; } @@ -6938,7 +7153,6 @@ L_08AB683C: } L_08AB684C: aot_gpr_31 = (0x08AB6854u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6854u) goto L_08AB6854; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6854: @@ -6950,7 +7164,6 @@ L_08AB685C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(128), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6874; } @@ -6958,7 +7171,6 @@ L_08AB685C: } L_08AB686C: aot_gpr_31 = (0x08AB6874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6874u) goto L_08AB6874; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6874: @@ -6983,7 +7195,6 @@ L_08AB6888: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(173), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB68BC; } @@ -6991,7 +7202,6 @@ L_08AB6888: } L_08AB68B4: aot_gpr_31 = (0x08AB68BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB68BCu) goto L_08AB68BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB68BC: @@ -7003,7 +7213,6 @@ L_08AB68C4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(174), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB68DC; } @@ -7011,7 +7220,6 @@ L_08AB68C4: } L_08AB68D4: aot_gpr_31 = (0x08AB68DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB68DCu) goto L_08AB68DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB68DC: @@ -7024,7 +7232,6 @@ L_08AB68E4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(176), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6900; } @@ -7032,7 +7239,6 @@ L_08AB68E4: } L_08AB68F8: aot_gpr_31 = (0x08AB6900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6900u) goto L_08AB6900; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6900: @@ -7045,7 +7251,6 @@ L_08AB6908: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(180), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6924; } @@ -7053,7 +7258,6 @@ L_08AB6908: } L_08AB691C: aot_gpr_31 = (0x08AB6924u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6924u) goto L_08AB6924; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6924: @@ -7068,7 +7272,6 @@ L_08AB692C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(172), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6950; } @@ -7076,7 +7279,6 @@ L_08AB692C: } L_08AB6948: aot_gpr_31 = (0x08AB6950u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6950u) goto L_08AB6950; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6950: @@ -7088,7 +7290,6 @@ L_08AB6958: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(184), static_cast(aot_gpr_2)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6970; } @@ -7096,7 +7297,6 @@ L_08AB6958: } L_08AB6968: aot_gpr_31 = (0x08AB6970u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6970u) goto L_08AB6970; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6970: @@ -7114,7 +7314,6 @@ L_08AB6978: goto L_08AB6988; L_08AB6988: aot_gpr_31 = (0x08AB6990u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6990u) goto L_08AB6990; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6990: @@ -7145,7 +7344,6 @@ L_08AB6994: goto L_08AB69B4; L_08AB69B4: aot_gpr_31 = (0x08AB69BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB69BCu) goto L_08AB69BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB69BC: @@ -7176,7 +7374,6 @@ L_08AB69C0: goto L_08AB69E0; L_08AB69E0: aot_gpr_31 = (0x08AB69E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB69E8u) goto L_08AB69E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB69E8: @@ -7206,7 +7403,17 @@ L_08AB69EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB6A10: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -7268,7 +7475,6 @@ L_08AB6A10: goto L_08AB6AEC; L_08AB6AEC: aot_gpr_31 = (0x08AB6AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6AF4u) goto L_08AB6AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6AF4: @@ -7288,7 +7494,6 @@ L_08AB6B00: goto L_08AB6B0C; L_08AB6B0C: aot_gpr_31 = (0x08AB6B14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6B14u) goto L_08AB6B14; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6B14: @@ -7310,7 +7515,6 @@ L_08AB6B28: goto L_08AB6B34; L_08AB6B34: aot_gpr_31 = (0x08AB6B3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6B3Cu) goto L_08AB6B3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6B3C: @@ -7332,7 +7536,6 @@ L_08AB6B50: goto L_08AB6B5C; L_08AB6B5C: aot_gpr_31 = (0x08AB6B64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6B64u) goto L_08AB6B64; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6B64: @@ -7356,7 +7559,6 @@ L_08AB6B74: } L_08AB6B84: aot_gpr_31 = (0x08AB6B8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6B8Cu) goto L_08AB6B8C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6B8C: @@ -7374,7 +7576,6 @@ L_08AB6B98: goto L_08AB6BA4; L_08AB6BA4: aot_gpr_31 = (0x08AB6BACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6BACu) goto L_08AB6BAC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6BAC: @@ -7394,7 +7595,6 @@ L_08AB6BB8: goto L_08AB6BC4; L_08AB6BC4: aot_gpr_31 = (0x08AB6BCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6BCCu) goto L_08AB6BCC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6BCC: @@ -7414,7 +7614,6 @@ L_08AB6BD8: goto L_08AB6BE4; L_08AB6BE4: aot_gpr_31 = (0x08AB6BECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6BECu) goto L_08AB6BEC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6BEC: @@ -7444,7 +7643,6 @@ L_08AB6C04: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-16130), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(174))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB6D0C; } @@ -7459,7 +7657,6 @@ L_08AB6C38: goto L_08AB6C44; L_08AB6C44: aot_gpr_31 = (0x08AB6C4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6C4Cu) goto L_08AB6C4C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6C4C: @@ -7483,7 +7680,6 @@ L_08AB6C68: goto L_08AB6C74; L_08AB6C74: aot_gpr_31 = (0x08AB6C7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6C7Cu) goto L_08AB6C7C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6C7C: @@ -7499,7 +7695,6 @@ L_08AB6C80: } L_08AB6C88: aot_gpr_31 = (0x08AB6C90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6C90u) goto L_08AB6C90; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6C90: @@ -7522,7 +7717,6 @@ L_08AB6CB4: L_08AB6CC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6CD4; } @@ -7530,7 +7724,6 @@ L_08AB6CC0: } L_08AB6CCC: aot_gpr_31 = (0x08AB6CD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6CD4u) goto L_08AB6CD4; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6CD4: @@ -7540,7 +7733,6 @@ L_08AB6CD4: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6CDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB6D04; } @@ -7555,7 +7747,6 @@ L_08AB6CE4: goto L_08AB6CF0; L_08AB6CF0: aot_gpr_31 = (0x08AB6CF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6CF8u) goto L_08AB6CF8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6CF8: @@ -7568,7 +7759,6 @@ L_08AB6CFC: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB6D2C; } @@ -7583,7 +7773,6 @@ L_08AB6D0C: goto L_08AB6D18; L_08AB6D18: aot_gpr_31 = (0x08AB6D20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6D20u) goto L_08AB6D20; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D20: @@ -7597,7 +7786,6 @@ L_08AB6D24: L_08AB6D2C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(130))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB6DA4; } @@ -7606,7 +7794,6 @@ L_08AB6D2C: L_08AB6D38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB6D4C; } @@ -7614,7 +7801,6 @@ L_08AB6D38: } L_08AB6D44: aot_gpr_31 = (0x08AB6D4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6D4Cu) goto L_08AB6D4C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D4C: @@ -7624,7 +7810,6 @@ L_08AB6D4C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB6DA4; } @@ -7639,7 +7824,6 @@ L_08AB6D5C: goto L_08AB6D68; L_08AB6D68: aot_gpr_31 = (0x08AB6D70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6D70u) goto L_08AB6D70; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D70: @@ -7659,7 +7843,6 @@ L_08AB6D7C: goto L_08AB6D88; L_08AB6D88: aot_gpr_31 = (0x08AB6D90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6D90u) goto L_08AB6D90; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D90: @@ -7672,7 +7855,6 @@ L_08AB6D94: AOT_REGCACHE_SYNC_OUT(); return; L_08AB6D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB6DE4; } @@ -7687,7 +7869,6 @@ L_08AB6DA4: goto L_08AB6DB0; L_08AB6DB0: aot_gpr_31 = (0x08AB6DB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6DB8u) goto L_08AB6DB8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6DB8: @@ -7707,7 +7888,6 @@ L_08AB6DC4: goto L_08AB6DD0; L_08AB6DD0: aot_gpr_31 = (0x08AB6DD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6DD8u) goto L_08AB6DD8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6DD8: @@ -7738,7 +7918,6 @@ L_08AB6DF8: goto L_08AB6E04; L_08AB6E04: aot_gpr_31 = (0x08AB6E0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6E0Cu) goto L_08AB6E0C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6E0C: @@ -7758,7 +7937,6 @@ L_08AB6E18: goto L_08AB6E24; L_08AB6E24: aot_gpr_31 = (0x08AB6E2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6E2Cu) goto L_08AB6E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6E2C: @@ -7778,7 +7956,6 @@ L_08AB6E38: goto L_08AB6E44; L_08AB6E44: aot_gpr_31 = (0x08AB6E4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6E4Cu) goto L_08AB6E4C; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6E4C: @@ -7818,7 +7995,17 @@ L_08AB6E50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB6E88: aot_gpr_29 = (aot_gpr_29 + static_cast(-752)); { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; @@ -7936,7 +8123,6 @@ L_08AB6FB8: } L_08AB6FE0: aot_gpr_31 = (0x08AB6FE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB6FE8u) goto L_08AB6FE8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB6FE8: @@ -7982,7 +8168,6 @@ L_08AB7034: L_08AB7040: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB7058; } @@ -8046,7 +8231,6 @@ L_08AB70C0: } L_08AB70C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB70EC; } @@ -8063,7 +8247,6 @@ L_08AB70D0: } L_08AB70DC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB7194; } @@ -8095,7 +8278,6 @@ L_08AB70F8: L_08AB7104: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB711C; } @@ -8147,7 +8329,6 @@ L_08AB714C: L_08AB7158: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB7170; } @@ -8199,7 +8380,6 @@ L_08AB71A0: L_08AB71AC: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB71C4; } @@ -8244,7 +8424,6 @@ L_08AB71E8: goto L_08AB7204; L_08AB7204: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AB7258; } @@ -8267,7 +8446,6 @@ L_08AB7214: L_08AB7220: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB7238; } @@ -8317,7 +8495,6 @@ L_08AB7260: L_08AB726C: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB7284; } @@ -8362,7 +8539,6 @@ L_08AB72A8: L_08AB72B4: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB72CC; } @@ -8405,7 +8581,6 @@ L_08AB72F0: L_08AB72FC: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AB7314; } @@ -8451,7 +8626,6 @@ L_08AB7348: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_2 | 0u); if (branch_taken) { @@ -8477,7 +8651,6 @@ L_08AB7364: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB73E8; } @@ -8513,7 +8686,6 @@ L_08AB73E8: goto L_08AB5CC4; L_08AB73F0: aot_gpr_31 = (0x08AB73F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 839u, 0x0898B4B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB73F8u) goto L_08AB73F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB73F8: @@ -8537,7 +8709,17 @@ L_08AB73F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB7430: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8587,7 +8769,6 @@ L_08AB7480: } L_08AB7488: { const bool branch_taken = ctx.gpr[6] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AB77E0; } @@ -8595,7 +8776,6 @@ L_08AB7488: } L_08AB7490: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7800; } @@ -8609,7 +8789,6 @@ L_08AB7498: L_08AB74A0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB74B4; } @@ -8617,11 +8796,9 @@ L_08AB74A0: } L_08AB74AC: aot_gpr_31 = (0x08AB74B4u); - // nop goto L_08AB5468; L_08AB74B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7800; } @@ -8631,7 +8808,6 @@ L_08AB74BC: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-2196), static_cast(0u)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AB74E8; } @@ -8641,7 +8817,6 @@ L_08AB74CC: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); ctx.gpr[7] = (0u | 2u); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AB74F0; } @@ -8650,7 +8825,6 @@ L_08AB74CC: L_08AB74DC: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1484))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AB74F0; } @@ -8663,7 +8837,6 @@ L_08AB74E8: L_08AB74F0: ctx.gpr[6] = (ctx.gpr[17] < static_cast(9) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AB77BC; } @@ -8675,15 +8848,23 @@ L_08AB74FC: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[17]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12104))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB7514: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2196))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB754C; } @@ -8694,7 +8875,6 @@ L_08AB7520: aot_gpr_5 = (32785u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(899)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB7540; } @@ -8808,7 +8988,6 @@ L_08AB75D4: L_08AB75DC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2196))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB7600; } @@ -8817,7 +8996,6 @@ L_08AB75DC: L_08AB75E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(124))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7600; } @@ -8834,7 +9012,6 @@ L_08AB75F4: } L_08AB7600: aot_gpr_31 = (0x08AB7608u); - // nop goto L_08AB50BC; L_08AB7608: { const bool branch_taken = 0u == 0u; @@ -8872,7 +9049,6 @@ L_08AB762C: L_08AB763C: aot_gpr_4 = (aot_gpr_4 + static_cast(962)); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB766C; } @@ -8910,7 +9086,6 @@ L_08AB766C: L_08AB7688: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-2293))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB76B0; } @@ -8918,11 +9093,9 @@ L_08AB7688: } L_08AB7694: aot_gpr_31 = (0x08AB769Cu); - // nop goto L_08AB6194; L_08AB769C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AB76B0; } @@ -8985,7 +9158,6 @@ L_08AB76F0: } L_08AB7700: aot_gpr_31 = (0x08AB7708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB7708u) goto L_08AB7708; AOT_REGCACHE_SYNC_OUT(); return; L_08AB7708: @@ -9043,7 +9215,6 @@ L_08AB7758: } L_08AB7768: aot_gpr_31 = (0x08AB7770u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB7770u) goto L_08AB7770; AOT_REGCACHE_SYNC_OUT(); return; L_08AB7770: @@ -9086,13 +9257,11 @@ L_08AB77B8: goto L_08AB77BC; L_08AB77BC: aot_gpr_31 = (0x08AB77C4u); - // nop ctx.pc = 0x08B730D4u; AOT_REGCACHE_SYNC_OUT(); return; L_08AB77C4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB77D8; } @@ -9100,11 +9269,9 @@ L_08AB77C4: } L_08AB77D0: aot_gpr_31 = (0x08AB77D8u); - // nop goto L_08AB5468; L_08AB77D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7800; } @@ -9153,7 +9320,17 @@ L_08AB7808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB782C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), aot_gpr_16); @@ -9188,7 +9365,6 @@ L_08AB7880: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7868))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB78DC; } @@ -9221,7 +9397,6 @@ L_08AB78A4: } L_08AB78AC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AB78D4; } @@ -9309,7 +9484,6 @@ L_08AB7930: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7960; } @@ -9326,7 +9500,6 @@ L_08AB794C: L_08AB7960: aot_gpr_4 = (ctx.gpr[17] < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7F24; } @@ -9338,11 +9511,20 @@ L_08AB796C: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[17]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12144))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB7984: aot_gpr_5 = (2236u << 16u); aot_gpr_4 = (0u | 5u); @@ -9436,7 +9618,6 @@ L_08AB7A6C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(1408), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB7AA8; } @@ -9455,7 +9636,6 @@ L_08AB7A80: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7AC8; } @@ -9501,7 +9681,6 @@ L_08AB7AEC: L_08AB7B00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7B14; } @@ -9546,7 +9725,6 @@ L_08AB7B44: L_08AB7B50: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AB7B68; } @@ -9575,7 +9753,6 @@ L_08AB7B70: L_08AB7B84: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB7BC4; } @@ -9597,7 +9774,6 @@ L_08AB7B90: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7BBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7BF0; } @@ -9646,7 +9822,6 @@ L_08AB7C14: L_08AB7C28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2216))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7C3C; } @@ -9676,7 +9851,6 @@ L_08AB7C58: L_08AB7C60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB7CA0; } @@ -9698,7 +9872,6 @@ L_08AB7C6C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7C98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7CCC; } @@ -9747,7 +9920,6 @@ L_08AB7CF0: L_08AB7D04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7D18; } @@ -9777,7 +9949,6 @@ L_08AB7D34: L_08AB7D3C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB7D6C; } @@ -9795,7 +9966,6 @@ L_08AB7D48: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7D88; } @@ -9840,7 +10010,6 @@ L_08AB7DAC: L_08AB7DC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7DD4; } @@ -9870,7 +10039,6 @@ L_08AB7DF0: L_08AB7DF8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB7E28; } @@ -9888,7 +10056,6 @@ L_08AB7E04: AOT_REGCACHE_SYNC_OUT(); return; L_08AB7E20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB7E44; } @@ -9933,7 +10100,6 @@ L_08AB7E68: L_08AB7E7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2200))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB7E90; } @@ -9991,7 +10157,6 @@ L_08AB7EB4: goto L_08AB7F24; L_08AB7F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 133u, 0x08AB8924u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0173.cpp b/profiles/vcs/generated/generated_unit_0173.cpp index 104e5a6..0bcfd89 100644 --- a/profiles/vcs/generated/generated_unit_0173.cpp +++ b/profiles/vcs/generated/generated_unit_0173.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0173[4094] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, - 0, 0, 8, 0, 9, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 13, 0, 0, 0, 0, 14, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, - 18, 0, 19, 20, 0, 21, 0, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 0, 27, 0, 0, 0, 0, 28, 0, 29, 0, 0, 0, 0, 30, 0, 0, 31, 0, 32, 0, 33, 0, 0, 0, 0, 34, 0, 35, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 0, 0, 0, 41, 0, 42, 0, 0, - 0, 0, 43, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, - 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 0, 0, 0, 60, 0, 61, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, - 69, 0, 0, 70, 0, 71, 0, 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 76, 0, 0, 0, 77, 0, 0, 78, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 86, 0, 0, 0, 87, 0, - 0, 0, 88, 0, 0, 89, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 93, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 103, - 0, 0, 0, 104, 0, 0, 105, 0, 106, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, 0, 110, - 0, 0, 0, 111, 0, 0, 0, 112, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 115, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 126, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, - 129, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, - 137, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 0, 0, 0, 0, 0, 148, 0, 149, - 0, 0, 0, 0, 0, 0, 150, 0, 151, 0, 152, 0, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 156, 0, 0, 157, 0, 0, 158, 0, 159, 0, 160, 0, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, 0, 165, 0, 0, 0, 0, 0, 166, - 0, 167, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, - 0, 0, 0, 0, 173, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 0, - 0, 0, 0, 0, 181, 0, 182, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, - 192, 0, 0, 193, 0, 194, 195, 0, 0, 196, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 200, 0, 0, 201, - 0, 202, 0, 203, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 0, 208, 0, - 0, 0, 209, 0, 210, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, - 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 237, 0, 238, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 241, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, - 0, 249, 0, 0, 250, 0, 251, 0, 252, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 259, 0, - 0, 0, 0, 0, 0, 260, 0, 261, 0, 262, 263, 0, 264, 0, 265, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 267, 0, 268, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 271, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 274, 0, 0, 275, 0, 276, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, 0, - 0, 280, 0, 0, 0, 281, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 287, 0, 0, - 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 292, 0, - 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 296, 0, 297, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, 0, 0, 0, 302, 0, 0, - 0, 303, 0, 0, 0, 304, 0, 0, 0, 305, 0, 0, 0, 306, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, - 0, 311, 312, 0, 313, 0, 0, 314, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 316, 0, 317, 0, 0, 318, 0, 0, 319, 0, 320, 321, 322, 0, - 323, 0, 0, 324, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 0, 329, 0, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 0, 0, 0, 335, 0, 0, 336, - 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 342, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 354, 0, 0, 0, - 355, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 358, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 365, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 369, 0, 370, 0, 371, 0, 0, 0, 372, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, - 380, 0, 0, 381, 0, 382, 0, 383, 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 386, 0, 387, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 391, 392, 0, 393, 0, 394, 0, 0, 0, 0, 0, 0, 395, 0, 0, - 0, 0, 396, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, 0, 402, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, - 0, 0, 407, 0, 408, 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 411, 0, 412, 0, 413, 0, 0, 0, 0, 414, 0, 415, 0, 416, 0, 417, 0, - 418, 0, 0, 0, 419, 0, 420, 0, 421, 0, 422, 0, 0, 0, 0, 423, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, - 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 439, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, - 0, 442, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, 446, 447, 0, 448, 0, 449, 0, 0, 0, 0, 450, 0, 0, 0, 0, 451, 0, 452, 0, 453, - 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 456, 0, 457, 0, 458, 0, 0, 0, 459, 0, 460, 0, 0, 461, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 468, 0, 0, 0, 0, 0, 0, 0, - 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, 472, 0, 473, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 476, 0, 0, 0, 477, 0, 478, 0, 0, 479, 0, 480, 0, 481, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, - 485, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 488, 0, 0, 489, 0, 490, 491, 0, 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, - 0, 0, 0, 494, 0, 495, 0, 496, 0, 497, 0, 0, 498, 0, 499, 0, 0, 500, 0, 501, 0, 502, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 505, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, - 0, 509, 0, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, 0, - 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, - 0, 0, 517, 0, 518, 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 0, - 0, 525, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, - 0, 536, 0, 537, 0, 538, 0, 539, 0, 540, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, - 0, 543, 0, 0, 544, 0, 545, 0, 546, 0, 547, 0, 548, 0, 0, 0, 549, 0, 550, 0, 0, 0, 551, 0, 552, 0, 0, 0, 553, 0, 554, 0, - 0, 0, 555, 0, 556, 0, 0, 0, 557, 0, 558, 0, 559, 0, 560, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 563, 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, - 0, 569, 0, 0, 0, 570, 571, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, - 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, - 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 582, - 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, - 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, - 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, - 0, 0, 597, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, - 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 0, 608, 609, 0, 0, 0, 0, 0, 0, - 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 614, 0, 0, - 0, 0, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 0, 0, 617, 618, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 622, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 0, - 0, 625, 626, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, - 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 0, 0, 0, 0, 634, 635, 0, 0, 0, 0, 0, 0, 636, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 0, 0, - 0, 640, 0, 0, 641, 0, 0, 0, 0, 0, 642, 643, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 646, - 0, 0, 647, 0, 0, 0, 648, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 653, 0, 0, - 0, 654, 655, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 657, 658, 0, 0, 659, 0, 0, 660, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 663, 664, 0, 665, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 670, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, - 673, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 677, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, - 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 687, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, - 0, 691, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 0, 0, - 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 699, 700, 0, 701, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, 0, 0, 0, - 0, 0, 705, 0, 0, 706, 0, 0, 0, 0, 0, 707, 708, 0, 709, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, - 0, 712, 0, 0, 713, 0, 0, 714, 715, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 717, 0, 718, 0, 0, 0, 0, 0, 0, 719, - 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 0, 0, 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 728, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0173[64] = { + 0x24A15214280A0211ull, 0x2854850A0140242Dull, 0x140942A428500A01ull, 0x0A140A04A1521428ull, + 0x04522800000050A9ull, 0x001148A444444440ull, 0x8880114891111111ull, 0x420A002800948888ull, + 0x0000011111110010ull, 0x0882002109020140ull, 0x00502540A0509280ull, 0x81020406822A9524ull, + 0x4048480000000250ull, 0x2001040000000250ull, 0x9480426948008201ull, 0x000284145400404Aull, + 0x40002A0002080004ull, 0x000090A800808000ull, 0x1208000040020000ull, 0x2128009400482002ull, + 0x80000552A0028200ull, 0x142056A054004100ull, 0x150A500482010000ull, 0x5001400424850422ull, + 0x2208220014048020ull, 0x7494049622222222ull, 0x9091014A00404089ull, 0x210A005000841104ull, + 0x1500000010040480ull, 0x020020008000A105ull, 0x2000100015000000ull, 0x000122A000000200ull, + 0x0010000080040000ull, 0x000002A950000001ull, 0x2056A05400000040ull, 0x002A400100100014ull, + 0x550A941440081000ull, 0x0820000000128551ull, 0x0160000000128028ull, 0xA842B42A40154001ull, + 0x000000004A2A8010ull, 0x0180000000250011ull, 0x4024A9440134A001ull, 0x012A52A8109A5201ull, + 0x600000520A080C00ull, 0x4205411410000120ull, 0x080202AAAAA49022ull, 0x0014551451451552ull, + 0x102010624014004Aull, 0x8040102010102010ull, 0x0408040102010040ull, 0x0200810080102010ull, + 0x0400401020100204ull, 0x28081001030480A0ull, 0x090140040040C120ull, 0x8182405010200206ull, + 0x90040C1202800800ull, 0x0824C106248020C4ull, 0x106200401010B200ull, 0x1001020100102011ull, + 0x10A2100420100420ull, 0x05022C1202808502ull, 0x8140419210045824ull, 0x2404000401021110ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0173[64] = { + 1u, 18u, 36u, 52u, 69u, 81u, 95u, 111u, 124u, 132u, 142u, 156u, 173u, 181u, 187u, 202u, + 214u, 221u, 228u, 233u, 244u, 255u, 269u, 280u, 293u, 303u, 323u, 337u, 348u, 355u, 363u, 368u, + 374u, 377u, 385u, 396u, 404u, 418u, 428u, 436u, 454u, 462u, 469u, 485u, 504u, 514u, 525u, 543u, + 563u, 575u, 583u, 590u, 597u, 604u, 615u, 625u, 637u, 647u, 662u, 673u, 681u, 691u, 705u, 720u, }; void recomp_unit_0173_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +50,25 @@ void recomp_unit_0173_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AB8004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0173[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0173[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0173[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AB8004; @@ -910,7 +817,6 @@ L_08AB8014: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(1408), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB8050; } @@ -929,7 +835,6 @@ L_08AB8028: AOT_REGCACHE_SYNC_OUT(); return; L_08AB8048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB8070; } @@ -975,7 +880,6 @@ L_08AB8094: L_08AB80A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2208))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB80BC; } @@ -1022,7 +926,6 @@ L_08AB80EC: L_08AB80F8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AB8110; } @@ -1051,7 +954,6 @@ L_08AB8118: L_08AB812C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB8164; } @@ -1071,7 +973,6 @@ L_08AB8138: AOT_REGCACHE_SYNC_OUT(); return; L_08AB815C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB8188; } @@ -1118,7 +1019,6 @@ L_08AB81AC: L_08AB81C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2216))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB81D4; } @@ -1150,7 +1050,6 @@ L_08AB81F0: L_08AB81F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB8230; } @@ -1170,7 +1069,6 @@ L_08AB8204: AOT_REGCACHE_SYNC_OUT(); return; L_08AB8228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB8254; } @@ -1217,7 +1115,6 @@ L_08AB8278: L_08AB828C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB82A0; } @@ -1249,7 +1146,6 @@ L_08AB82BC: L_08AB82C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB82F4; } @@ -1267,7 +1163,6 @@ L_08AB82D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB82EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB8310; } @@ -1312,7 +1207,6 @@ L_08AB8334: L_08AB8348: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2204))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB835C; } @@ -1344,7 +1238,6 @@ L_08AB8378: L_08AB8380: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB83B0; } @@ -1362,7 +1255,6 @@ L_08AB838C: AOT_REGCACHE_SYNC_OUT(); return; L_08AB83A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB83CC; } @@ -1407,7 +1299,6 @@ L_08AB83F0: L_08AB8404: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-2200))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB8418; } @@ -1472,7 +1363,6 @@ L_08AB843C: } L_08AB84B0: aot_gpr_31 = (0x08AB84B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 212u, 0x08AB50BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB84B8u) goto L_08AB84B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AB84B8: @@ -1490,7 +1380,6 @@ L_08AB84C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AB84D4: aot_gpr_31 = (0x08AB84DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 189u, 0x08AB4EC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB84DCu) goto L_08AB84DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AB84DC: @@ -1575,7 +1464,6 @@ L_08AB858C: } L_08AB8598: aot_gpr_31 = (0x08AB85A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 212u, 0x08AB50BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB85A0u) goto L_08AB85A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AB85A0: @@ -1593,7 +1481,6 @@ L_08AB85B0: AOT_REGCACHE_SYNC_OUT(); return; L_08AB85BC: aot_gpr_31 = (0x08AB85C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 189u, 0x08AB4EC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB85C4u) goto L_08AB85C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AB85C4: @@ -1691,7 +1578,6 @@ L_08AB8690: AOT_REGCACHE_SYNC_OUT(); return; L_08AB869C: aot_gpr_31 = (0x08AB86A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 189u, 0x08AB4EC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB86A4u) goto L_08AB86A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AB86A4: @@ -1765,7 +1651,6 @@ L_08AB8740: AOT_REGCACHE_SYNC_OUT(); return; L_08AB874C: aot_gpr_31 = (0x08AB8754u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 189u, 0x08AB4EC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB8754u) goto L_08AB8754; AOT_REGCACHE_SYNC_OUT(); return; L_08AB8754: @@ -1794,7 +1679,6 @@ L_08AB8760: AOT_REGCACHE_SYNC_OUT(); return; L_08AB8790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 1090u, 0x08AB7F24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1817,7 +1701,6 @@ L_08AB8798: AOT_REGCACHE_SYNC_OUT(); return; L_08AB87C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 1090u, 0x08AB7F24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1943,7 +1826,6 @@ L_08AB88A4: } L_08AB891C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 1090u, 0x08AB7F24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1965,7 +1847,17 @@ L_08AB8924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8948: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -1983,7 +1875,17 @@ L_08AB8964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8970: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2240u << 16u); @@ -2022,7 +1924,6 @@ L_08AB89C8: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB8984; } @@ -2054,7 +1955,6 @@ L_08AB89F0: } L_08AB8A20: aot_gpr_31 = (0x08AB8A28u); - // nop goto L_08AB9680; L_08AB8A28: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -2063,7 +1963,17 @@ L_08AB8A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8A34: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -2086,11 +1996,20 @@ L_08AB8A40: } L_08AB8A54: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8A5C: ctx.gpr[9] = (aot_gpr_6 & 65535u); ctx.gpr[10] = (0u | 0u); @@ -2106,7 +2025,6 @@ L_08AB8A5C: } L_08AB8A78: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB8A9C; } @@ -2144,7 +2062,6 @@ L_08AB8AA4: L_08AB8AAC: aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08AB8A9C; } @@ -2165,11 +2082,20 @@ L_08AB8AB8: } L_08AB8AD4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8ADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2208,7 +2134,6 @@ L_08AB8B24: } L_08AB8B2C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB8B40; } @@ -2241,7 +2166,6 @@ L_08AB8B48: } L_08AB8B50: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AB8B88; } @@ -2251,7 +2175,6 @@ L_08AB8B58: aot_gpr_5 = (ctx.gpr[16] + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AB8B80; } @@ -2295,7 +2218,17 @@ L_08AB8B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8BAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[11] = (2240u << 16u); @@ -2312,7 +2245,6 @@ L_08AB8BC8: ctx.gpr[10] = (ctx.gpr[2] + ctx.gpr[11]); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB8CBC; } @@ -2325,7 +2257,6 @@ L_08AB8BE4: aot_gpr_5 = (aot_gpr_5 + aot_gpr_7); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB8CBC; } @@ -2340,7 +2271,6 @@ L_08AB8C00: goto L_08AB8C14; L_08AB8C14: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AB8CB0; } @@ -2408,7 +2338,6 @@ L_08AB8CBC: ctx.gpr[3] = (ctx.gpr[3] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[3]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB8BC8; } @@ -2417,7 +2346,6 @@ L_08AB8CBC: L_08AB8CD0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-26272))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB8DF8; } @@ -2431,7 +2359,6 @@ L_08AB8CDC: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB8DF8; } @@ -2447,7 +2374,6 @@ L_08AB8CFC: goto L_08AB8D14; L_08AB8D14: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AB8DAC; } @@ -2510,7 +2436,6 @@ L_08AB8DAC: aot_mem.aot_direct_store32(aot_gpr_7 + static_cast(12), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-26272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB8DF8; } @@ -2541,13 +2466,22 @@ L_08AB8DF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8E04: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(512), aot_run_words); } aot_gpr_31 = (0x08AB8E28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB8E28u) goto L_08AB8E28; AOT_REGCACHE_SYNC_OUT(); return; L_08AB8E28: @@ -2593,7 +2527,6 @@ L_08AB8E84: goto L_08AB8E90; L_08AB8E90: aot_gpr_31 = (0x08AB8E98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB8E98u) goto L_08AB8E98; AOT_REGCACHE_SYNC_OUT(); return; L_08AB8E98: @@ -2648,7 +2581,6 @@ L_08AB8EF4: goto L_08AB8F00; L_08AB8F00: aot_gpr_31 = (0x08AB8F08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AB8F08u) goto L_08AB8F08; AOT_REGCACHE_SYNC_OUT(); return; L_08AB8F08: @@ -2676,7 +2608,17 @@ L_08AB8F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB8F3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1024), ctx.gpr[16]); @@ -2719,7 +2661,6 @@ L_08AB8F94: ctx.gpr[8] = (ctx.gpr[8] + aot_gpr_4); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB8FC0; } @@ -2798,7 +2739,17 @@ L_08AB9050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9068: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1032), ctx.gpr[18]); @@ -2880,7 +2831,17 @@ L_08AB9140: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9160: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1024), ctx.gpr[16]); @@ -3001,7 +2962,17 @@ L_08AB92D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB92E8: aot_gpr_5 = (2240u << 16u); aot_gpr_4 = (0u | 0u); @@ -3038,7 +3009,6 @@ L_08AB9338: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB92F4; } @@ -3061,7 +3031,6 @@ L_08AB935C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB935C; } @@ -3069,11 +3038,20 @@ L_08AB935C: } L_08AB938C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9394: aot_gpr_4 = (2240u << 16u); aot_gpr_5 = (0u | 0u); @@ -3091,7 +3069,6 @@ L_08AB93A0: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB93A0; } @@ -3099,11 +3076,20 @@ L_08AB93A0: } L_08AB93D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB93D8: aot_gpr_4 = (2240u << 16u); aot_gpr_7 = (0u | 0u); @@ -3140,7 +3126,6 @@ L_08AB9428: aot_gpr_7 = (static_cast(static_cast(aot_gpr_7) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_7) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB93E4; } @@ -3148,11 +3133,20 @@ L_08AB9428: } L_08AB9440: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9448: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1024), ctx.gpr[16]); @@ -3178,7 +3172,6 @@ L_08AB9480: L_08AB9488: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB94A4; } @@ -3220,7 +3213,6 @@ L_08AB94AC: aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(16), aot_run_words); } aot_gpr_4 = (0u | 7u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB9524; } @@ -3250,7 +3242,17 @@ L_08AB9524: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB953C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1040)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1024), ctx.gpr[16]); @@ -3296,7 +3298,6 @@ L_08AB9598: } L_08AB95A0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_6; - // nop if (branch_taken) { goto L_08AB95AC; } @@ -3324,7 +3325,6 @@ L_08AB95BC: ctx.gpr[8] = (ctx.gpr[8] + aot_gpr_4); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB95EC; } @@ -3364,7 +3364,6 @@ L_08AB95F4: aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(16), aot_run_words); } aot_gpr_4 = (0u | 7u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AB9668; } @@ -3394,7 +3393,17 @@ L_08AB9668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9680: aot_gpr_4 = (2238u << 16u); aot_gpr_5 = (0u | 0u); @@ -3410,7 +3419,6 @@ L_08AB968C: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AB968C; } @@ -3418,15 +3426,23 @@ L_08AB968C: } L_08AB96B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB96BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB96EC; } @@ -3434,7 +3450,6 @@ L_08AB96BC: } L_08AB96C8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB96EC; } @@ -3453,7 +3468,6 @@ L_08AB96D0: } L_08AB96E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB9708; } @@ -3461,7 +3475,6 @@ L_08AB96E4: } L_08AB96EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB986C; } @@ -3482,7 +3495,6 @@ L_08AB9708: aot_gpr_7 = (aot_gpr_5 | 0u); ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_7 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB972C; } @@ -3520,7 +3532,6 @@ L_08AB974C: ctx.gpr[3] = (aot_gpr_4 + ctx.gpr[3]); ctx.gpr[12] = (aot_mem.aot_direct_load16(ctx.gpr[3] + static_cast(0))); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AB97C4; } @@ -3529,7 +3540,6 @@ L_08AB974C: L_08AB9760: ctx.gpr[12] = (aot_mem.aot_direct_load16(ctx.gpr[3] + static_cast(2))); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AB97C4; } @@ -3538,7 +3548,6 @@ L_08AB9760: L_08AB976C: ctx.gpr[3] = (aot_mem.aot_direct_load16(ctx.gpr[3] + static_cast(4))); { const bool branch_taken = ctx.gpr[3] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AB97C4; } @@ -3601,7 +3610,6 @@ L_08AB97C4: } L_08AB97F4: { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08AB974C; } @@ -3614,7 +3622,6 @@ L_08AB97FC: ctx.gpr[8] = (0u | 0u); aot_gpr_5 = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[10]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB9840; } @@ -3630,7 +3637,6 @@ L_08AB9818: ctx.gpr[8] = (ctx.gpr[8] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[10]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB9818; } @@ -3639,7 +3645,6 @@ L_08AB9818: L_08AB9840: aot_gpr_5 = (static_cast(ctx.gpr[8]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB986C; } @@ -3653,7 +3658,6 @@ L_08AB984C: ctx.gpr[8] = (ctx.gpr[8] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[8]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB984C; } @@ -3665,7 +3669,17 @@ L_08AB986C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9874: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(512), ctx.gpr[16]); @@ -3707,11 +3721,20 @@ L_08AB98D0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12184))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB98E8: aot_gpr_6 = (0u | 48u); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(2), static_cast(aot_gpr_6)); @@ -3817,7 +3840,6 @@ L_08AB9988: goto L_08AB998C; L_08AB998C: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AB99A0; } @@ -3857,7 +3879,6 @@ L_08AB99AC: } L_08AB99CC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AB99FC; } @@ -3872,7 +3893,6 @@ L_08AB99D4: L_08AB99E0: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AB99F8; } @@ -3904,7 +3924,6 @@ L_08AB9A10: ctx.gpr[19] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB9A3C; } @@ -3917,7 +3936,6 @@ L_08AB9A20: aot_mem.aot_direct_store16(ctx.gpr[16] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB9A20; } @@ -3938,7 +3956,17 @@ L_08AB9A3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9A5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1120)); { const std::uint32_t aot_run_words[8]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -3965,7 +3993,6 @@ L_08AB9A90: } L_08AB9A9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB9C4C; } @@ -3979,7 +4006,6 @@ L_08AB9AA4: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_5 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB9AA4; } @@ -4005,7 +4031,6 @@ L_08AB9AE0: aot_gpr_4 = (ctx.gpr[16] + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AB9B9C; } @@ -4014,7 +4039,6 @@ L_08AB9AE0: L_08AB9AF4: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AB9B9C; } @@ -4023,7 +4047,6 @@ L_08AB9AF4: L_08AB9B00: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AB9B9C; } @@ -4084,7 +4107,6 @@ L_08AB9B60: } L_08AB9B94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AB9BC8; } @@ -4105,7 +4127,6 @@ L_08AB9B9C: goto L_08AB9BC8; L_08AB9BC8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB9AE0; } @@ -4123,7 +4144,6 @@ L_08AB9BE4: ctx.gpr[19] = (0u | 0u); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AB9C20; } @@ -4139,7 +4159,6 @@ L_08AB9BF8: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_5 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AB9BF8; } @@ -4148,7 +4167,6 @@ L_08AB9BF8: L_08AB9C20: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AB9C4C; } @@ -4162,7 +4180,6 @@ L_08AB9C2C: ctx.gpr[19] = (ctx.gpr[19] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AB9C2C; } @@ -4185,7 +4202,17 @@ L_08AB9C4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9C74: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1056), ctx.gpr[30]); @@ -4239,7 +4266,6 @@ L_08AB9D0C: ctx.gpr[8] = (ctx.gpr[8] + aot_gpr_7); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AB9D38; } @@ -4318,7 +4344,17 @@ L_08AB9DB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9DE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1052), ctx.gpr[22]); @@ -4413,7 +4449,17 @@ L_08AB9EF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AB9F28: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1056), ctx.gpr[30]); @@ -4550,7 +4596,17 @@ L_08ABA0D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABA104: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1052), ctx.gpr[23]); @@ -4588,7 +4644,6 @@ L_08ABA17C: L_08ABA184: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[30] == aot_gpr_4; - // nop if (branch_taken) { goto L_08ABA1A0; } @@ -4643,7 +4698,17 @@ L_08ABA1A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABA21C: aot_gpr_29 = (aot_gpr_29 + static_cast(-1072)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1056), ctx.gpr[30]); @@ -4700,7 +4765,6 @@ L_08ABA2B8: } L_08ABA2C0: { const bool branch_taken = ctx.gpr[23] != aot_gpr_6; - // nop if (branch_taken) { goto L_08ABA2CC; } @@ -4728,7 +4792,6 @@ L_08ABA2DC: ctx.gpr[8] = (ctx.gpr[8] + aot_gpr_5); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABA30C; } @@ -4783,7 +4846,17 @@ L_08ABA354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABA384: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1032), ctx.gpr[18]); @@ -4847,7 +4920,17 @@ L_08ABA434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABA450: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4881,7 +4964,6 @@ L_08ABA494: aot_gpr_7 = (aot_gpr_7 + ctx.gpr[19]); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08ABA51C; } @@ -4889,7 +4971,6 @@ L_08ABA494: } L_08ABA4AC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABA51C; } @@ -4902,7 +4983,6 @@ L_08ABA4B4: goto L_08ABA4C0; L_08ABA4C0: { const bool branch_taken = ctx.gpr[9] != ctx.gpr[10]; - // nop if (branch_taken) { goto L_08ABA4FC; } @@ -4910,7 +4990,6 @@ L_08ABA4C0: } L_08ABA4C8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABA4FC; } @@ -4929,7 +5008,6 @@ L_08ABA4D0: } L_08ABA4E4: { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08ABA4F4; } @@ -4941,7 +5019,6 @@ L_08ABA4EC: goto L_08ABA4F4; L_08ABA4F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABA4C0; } @@ -4949,7 +5026,6 @@ L_08ABA4F4: } L_08ABA4FC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABA514; } @@ -4963,7 +5039,6 @@ L_08ABA504: goto L_08ABA514; L_08ABA514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABA48C; } @@ -4971,7 +5046,6 @@ L_08ABA514: } L_08ABA51C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABA6DC; } @@ -4979,7 +5053,6 @@ L_08ABA51C: } L_08ABA524: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABA618; } @@ -4994,7 +5067,6 @@ L_08ABA52C: goto L_08ABA540; L_08ABA540: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ABA5D8; } @@ -5057,7 +5129,6 @@ L_08ABA5D8: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(12), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(-26272))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABA6DC; } @@ -5078,7 +5149,6 @@ L_08ABA5F0: goto L_08ABAB74; L_08ABA610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABA6DC; } @@ -5098,7 +5168,6 @@ L_08ABA618: goto L_08ABA640; L_08ABA640: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABA6D8; } @@ -5160,7 +5229,6 @@ L_08ABA6D8: goto L_08ABA6DC; L_08ABA6DC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08ABA47C; } @@ -5181,7 +5249,17 @@ L_08ABA6E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABA704: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5207,7 +5285,6 @@ L_08ABA73C: } L_08ABA744: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABA7F8; } @@ -5231,7 +5308,6 @@ L_08ABA754: ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[18]); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABA7C0; } @@ -5244,7 +5320,6 @@ L_08ABA77C: goto L_08ABA788; L_08ABA788: { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08ABA7C0; } @@ -5252,7 +5327,6 @@ L_08ABA788: } L_08ABA790: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ABA7C0; } @@ -5271,7 +5345,6 @@ L_08ABA798: } L_08ABA7AC: { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08ABA7B8; } @@ -5282,7 +5355,6 @@ L_08ABA7B4: goto L_08ABA7B8; L_08ABA7B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABA788; } @@ -5290,7 +5362,6 @@ L_08ABA7B8: } L_08ABA7C0: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ABA7F0; } @@ -5301,7 +5372,6 @@ L_08ABA7C8: aot_gpr_5 = (aot_gpr_5 << 16u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); { const bool branch_taken = aot_gpr_5 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08ABA7F0; } @@ -5316,7 +5386,6 @@ L_08ABA7DC: goto L_08ABA7F0; L_08ABA7F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABA73C; } @@ -5324,7 +5393,6 @@ L_08ABA7F0: } L_08ABA7F8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ABA9E4; } @@ -5360,7 +5428,6 @@ L_08ABA814: } L_08ABA840: aot_gpr_31 = (0x08ABA848u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABA848u) goto L_08ABA848; AOT_REGCACHE_SYNC_OUT(); return; L_08ABA848: @@ -5380,7 +5447,6 @@ L_08ABA858: goto L_08ABA868; L_08ABA868: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABA904; } @@ -5464,7 +5530,6 @@ L_08ABA914: goto L_08ABA944; L_08ABA944: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABA9E0; } @@ -5540,7 +5605,17 @@ L_08ABA9E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABAA04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5554,7 +5629,6 @@ L_08ABAA04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABAA40; } @@ -5562,7 +5636,6 @@ L_08ABAA04: } L_08ABAA38: aot_gpr_31 = (0x08ABAA40u); - // nop goto L_08ABA704; L_08ABAA40: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -5573,7 +5646,6 @@ L_08ABAA40: goto L_08ABAA4C; L_08ABAA4C: aot_gpr_31 = (0x08ABAA54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABAA54u) goto L_08ABAA54; AOT_REGCACHE_SYNC_OUT(); return; L_08ABAA54: @@ -5599,21 +5671,28 @@ L_08ABAA64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABAA8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08ABAA9Cu); - // nop goto L_08AB92E8; L_08ABAA9C: aot_gpr_31 = (0x08ABAAA4u); - // nop goto L_08AB9680; L_08ABAAA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABAAB8; } @@ -5621,7 +5700,6 @@ L_08ABAAA4: } L_08ABAAB0: aot_gpr_31 = (0x08ABAAB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABAAB8u) goto L_08ABAAB8; AOT_REGCACHE_SYNC_OUT(); return; L_08ABAAB8: @@ -5642,7 +5720,17 @@ L_08ABAACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABAAD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(516), ctx.gpr[17]); @@ -5652,7 +5740,6 @@ L_08ABAAD8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(44))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(520), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABAB60; } @@ -5660,7 +5747,6 @@ L_08ABAAD8: } L_08ABAAFC: aot_gpr_31 = (0x08ABAB04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABAB04u) goto L_08ABAB04; AOT_REGCACHE_SYNC_OUT(); return; L_08ABAB04: @@ -5695,7 +5781,6 @@ L_08ABAB3C: goto L_08ABAB48; L_08ABAB48: aot_gpr_31 = (0x08ABAB50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABAB50u) goto L_08ABAB50; AOT_REGCACHE_SYNC_OUT(); return; L_08ABAB50: @@ -5719,7 +5804,17 @@ L_08ABAB60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABAB74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[3] = (2238u << 16u); @@ -5739,7 +5834,6 @@ L_08ABAB90: } L_08ABAB98: { const bool branch_taken = ctx.gpr[15] == 0u; - // nop if (branch_taken) { goto L_08ABAC68; } @@ -5747,7 +5841,6 @@ L_08ABAB98: } L_08ABABA0: { const bool branch_taken = ctx.gpr[13] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ABAC50; } @@ -5756,7 +5849,6 @@ L_08ABABA0: L_08ABABA8: ctx.gpr[13] = (aot_mem.aot_direct_load32(ctx.gpr[14] + static_cast(28))); { const bool branch_taken = ctx.gpr[13] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08ABAC50; } @@ -5783,7 +5875,6 @@ L_08ABABC8: } L_08ABABD0: { const bool branch_taken = ctx.gpr[14] == 0u; - // nop if (branch_taken) { goto L_08ABAC2C; } @@ -5792,7 +5883,6 @@ L_08ABABD0: L_08ABABD8: ctx.gpr[14] = (aot_mem.aot_direct_load32(ctx.gpr[12] + static_cast(0))); { const bool branch_taken = ctx.gpr[14] == 0u; - // nop if (branch_taken) { goto L_08ABAC2C; } @@ -5921,7 +6011,17 @@ L_08ABAD18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABAD24: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_6); @@ -5972,7 +6072,6 @@ L_08ABADA4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABADCC; } @@ -5980,7 +6079,6 @@ L_08ABADA4: } L_08ABADBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABADE8; } @@ -6001,7 +6099,6 @@ L_08ABADCC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABADCC; } @@ -6040,7 +6137,6 @@ L_08ABAE18: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 49u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08ABAFD4; } @@ -6049,7 +6145,6 @@ L_08ABAE18: L_08ABAE34: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ABAFD4; } @@ -6058,7 +6153,6 @@ L_08ABAE34: L_08ABAE40: aot_gpr_4 = (ctx.gpr[30] < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6099,7 +6193,6 @@ L_08ABAE68: } L_08ABAE70: { const bool branch_taken = ctx.gpr[30] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08ABAEA0; } @@ -6107,7 +6200,6 @@ L_08ABAE70: } L_08ABAE78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6115,7 +6207,6 @@ L_08ABAE78: } L_08ABAE80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6123,7 +6214,6 @@ L_08ABAE80: } L_08ABAE88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6131,7 +6221,6 @@ L_08ABAE88: } L_08ABAE90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6139,7 +6228,6 @@ L_08ABAE90: } L_08ABAE98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6147,7 +6235,6 @@ L_08ABAE98: } L_08ABAEA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAEA8; } @@ -6189,7 +6276,6 @@ L_08ABAEF0: aot_gpr_4 = (ctx.gpr[30] + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6230,7 +6316,6 @@ L_08ABAF24: } L_08ABAF2C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08ABAFAC; } @@ -6245,7 +6330,6 @@ L_08ABAF34: AOT_REGCACHE_SYNC_OUT(); return; L_08ABAF44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6260,7 +6344,6 @@ L_08ABAF4C: AOT_REGCACHE_SYNC_OUT(); return; L_08ABAF5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6275,7 +6358,6 @@ L_08ABAF64: AOT_REGCACHE_SYNC_OUT(); return; L_08ABAF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6290,7 +6372,6 @@ L_08ABAF7C: AOT_REGCACHE_SYNC_OUT(); return; L_08ABAF8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6305,7 +6386,6 @@ L_08ABAF94: AOT_REGCACHE_SYNC_OUT(); return; L_08ABAFA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6313,7 +6393,6 @@ L_08ABAFA4: } L_08ABAFAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABAFB4; } @@ -6333,7 +6412,6 @@ L_08ABAFBC: AOT_REGCACHE_SYNC_OUT(); return; L_08ABAFCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABB008; } @@ -6356,7 +6434,6 @@ L_08ABAFD4: goto L_08ABB008; L_08ABB008: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08ABAE08; } @@ -6386,14 +6463,34 @@ L_08ABB01C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB04C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB054: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6410,7 +6507,6 @@ L_08ABB054: L_08ABB07C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08ABB098; } @@ -6442,7 +6538,17 @@ L_08ABB09C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB0B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6480,7 +6586,17 @@ L_08ABB0F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB114: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6518,7 +6634,17 @@ L_08ABB154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB174: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6558,7 +6684,17 @@ L_08ABB1B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB1DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6598,7 +6734,17 @@ L_08ABB21C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB244: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6638,7 +6784,17 @@ L_08ABB284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB2AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6678,7 +6834,17 @@ L_08ABB2EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB314: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6719,7 +6885,17 @@ L_08ABB354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB380: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6759,7 +6935,17 @@ L_08ABB3C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB3E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6800,7 +6986,17 @@ L_08ABB428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB454: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6840,7 +7036,17 @@ L_08ABB494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6910,7 +7116,6 @@ L_08ABB54C: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABB568; } @@ -6933,7 +7138,17 @@ L_08ABB568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB584: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6954,7 +7169,6 @@ L_08ABB5B4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08ABB5D0; @@ -7011,7 +7225,6 @@ L_08ABB624: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABB640; } @@ -7034,7 +7247,17 @@ L_08ABB640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB65C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7105,7 +7328,6 @@ L_08ABB6F0: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABB70C; } @@ -7128,7 +7350,17 @@ L_08ABB70C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB728: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7149,7 +7381,6 @@ L_08ABB758: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_4 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08ABB774; @@ -7206,7 +7437,6 @@ L_08ABB7C8: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABB7E4; } @@ -7229,7 +7459,17 @@ L_08ABB7E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7300,7 +7540,6 @@ L_08ABB894: aot_mem.aot_direct_store8(ctx.gpr[16] + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABB8B0; } @@ -7323,7 +7562,17 @@ L_08ABB8B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB8CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7340,7 +7589,6 @@ L_08ABB8CC: L_08ABB8F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(521))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABB920; } @@ -7349,7 +7597,6 @@ L_08ABB8F4: L_08ABB900: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = static_cast(ctx.gpr[17]) >= 0; - // nop if (branch_taken) { goto L_08ABB91C; } @@ -7381,7 +7628,17 @@ L_08ABB920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB938: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7398,7 +7655,6 @@ L_08ABB938: L_08ABB960: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(521))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABB98C; } @@ -7407,7 +7663,6 @@ L_08ABB960: L_08ABB96C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = static_cast(ctx.gpr[17]) >= 0; - // nop if (branch_taken) { goto L_08ABB988; } @@ -7439,7 +7694,17 @@ L_08ABB98C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(535))); @@ -7477,7 +7742,17 @@ L_08ABB9D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABB9F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7498,7 +7773,6 @@ L_08ABB9F0: L_08ABBA28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(29704))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08ABBA38; } @@ -7535,7 +7809,17 @@ L_08ABBA54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBA74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7560,7 +7844,6 @@ L_08ABBA9C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(20), aot_gpr_6); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08ABBAD8; } @@ -7592,12 +7875,21 @@ L_08ABBADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBAF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08ABBB04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 575u, 0x0886309Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABBB04u) goto L_08ABBB04; AOT_REGCACHE_SYNC_OUT(); return; L_08ABBB04: @@ -7608,7 +7900,17 @@ L_08ABBB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBB14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7650,7 +7952,17 @@ L_08ABBB54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBB84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7692,7 +8004,17 @@ L_08ABBBC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBBF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7730,7 +8052,17 @@ L_08ABBC2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBC54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7768,7 +8100,17 @@ L_08ABBC8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBCB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -7781,7 +8123,6 @@ L_08ABBCC8: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08ABBCE0; } @@ -7804,7 +8145,17 @@ L_08ABBCE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBCF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -7818,9 +8169,7 @@ L_08ABBD08: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ABBD2C; } @@ -7843,7 +8192,17 @@ L_08ABBD2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBD40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); @@ -7895,7 +8254,6 @@ L_08ABBD94: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABBDB0; } @@ -7906,7 +8264,6 @@ L_08ABBDAC: goto L_08ABBDB0; L_08ABBDB0: aot_gpr_31 = (0x08ABBDB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 575u, 0x0886309Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABBDB8u) goto L_08ABBDB8; AOT_REGCACHE_SYNC_OUT(); return; L_08ABBDB8: @@ -7917,7 +8274,17 @@ L_08ABBDB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBDC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); @@ -7968,7 +8335,6 @@ L_08ABBE18: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABBE34; } @@ -7979,7 +8345,6 @@ L_08ABBE30: goto L_08ABBE34; L_08ABBE34: aot_gpr_31 = (0x08ABBE3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 575u, 0x0886309Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABBE3Cu) goto L_08ABBE3C; AOT_REGCACHE_SYNC_OUT(); return; L_08ABBE3C: @@ -7990,7 +8355,17 @@ L_08ABBE3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBE4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8009,7 +8384,6 @@ L_08ABBE74: aot_mem.aot_direct_store16(ctx.gpr[16] + static_cast(518), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(518))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABBEA4; } @@ -8018,7 +8392,6 @@ L_08ABBE74: L_08ABBE88: aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABBEA0; } @@ -8049,7 +8422,17 @@ L_08ABBEA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBEBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8077,13 +8460,22 @@ L_08ABBEE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBF00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(522))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABBF24; } @@ -8104,7 +8496,17 @@ L_08ABBF24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBF34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -8124,7 +8526,17 @@ L_08ABBF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBF64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8161,7 +8573,17 @@ L_08ABBF8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABBFCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); diff --git a/profiles/vcs/generated/generated_unit_0174.cpp b/profiles/vcs/generated/generated_unit_0174.cpp index 8dde64c..d5b91e1 100644 --- a/profiles/vcs/generated/generated_unit_0174.cpp +++ b/profiles/vcs/generated/generated_unit_0174.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0174[4096] = { - 1, 2, 0, 0, 0, 3, 4, 0, 0, 0, 0, 5, 0, 6, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 18, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, - 25, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 28, 0, 29, 30, 0, 0, 0, 0, 31, 0, 0, - 32, 0, 33, 0, 34, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, 0, 39, 0, 40, 0, 0, 41, 0, 0, 42, - 0, 43, 0, 44, 0, 0, 45, 0, 0, 46, 0, 0, 47, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 52, 0, 53, 0, 54, 0, 55, 0, 0, 56, 0, 0, 57, 0, 58, 59, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 73, 0, 0, 0, - 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 84, 85, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, - 0, 0, 89, 0, 0, 90, 0, 0, 0, 91, 0, 92, 0, 0, 93, 0, 0, 0, 0, 94, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 97, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 0, 0, 102, 103, 0, 104, 0, 0, 105, 0, 106, 0, - 0, 0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, - 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 119, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 0, - 0, 0, 124, 0, 0, 0, 0, 125, 0, 126, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, - 129, 0, 0, 0, 130, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 136, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 140, - 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 143, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 0, 147, 0, 0, 148, 0, 149, - 150, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 156, 0, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 0, 160, 0, 161, 0, 0, - 0, 162, 0, 163, 0, 0, 0, 164, 0, 165, 0, 166, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 0, 173, 0, 174, 0, 0, 0, 0, 0, 0, - 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, - 181, 0, 182, 0, 183, 0, 0, 184, 0, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 192, 0, 193, 0, 0, 194, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 196, - 0, 0, 0, 197, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 212, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 216, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, - 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 0, 0, 0, 0, 232, 0, 0, 0, 233, 0, 0, 0, 234, - 0, 235, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 0, 0, - 0, 0, 245, 0, 246, 0, 0, 0, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 250, 0, 0, - 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, - 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 261, 0, 0, 0, 0, 0, 262, - 0, 263, 0, 0, 0, 264, 0, 265, 0, 0, 266, 0, 267, 268, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 272, - 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 0, 0, 0, 0, 0, 0, 276, 0, 0, 277, 0, 0, 278, 0, 0, 0, 0, 279, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 281, 0, 0, - 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 0, 285, 0, 286, 0, 287, 0, 0, 288, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 297, 0, 298, 0, 299, 0, - 300, 0, 301, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 0, 309, 0, 0, 0, - 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 313, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, 317, 0, 318, - 0, 319, 0, 0, 320, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 0, 324, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 327, - 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 333, 0, 0, - 0, 0, 334, 0, 0, 0, 0, 0, 335, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, - 0, 0, 348, 0, 0, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 0, 356, 0, 357, 0, 0, 0, 358, 359, 0, 0, 0, - 360, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, - 0, 0, 371, 372, 0, 0, 0, 373, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, - 0, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 0, 382, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, - 385, 0, 386, 0, 0, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 391, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 394, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 398, - 0, 0, 0, 399, 0, 0, 400, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 0, 0, 406, - 0, 407, 0, 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 411, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, - 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, 0, 418, 0, 0, 419, 0, 0, 0, 420, 0, 0, 421, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, - 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, - 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, - 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 440, - 0, 441, 0, 0, 442, 0, 443, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, - 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 459, - 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, - 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, 0, 473, - 0, 0, 474, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, - 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, - 0, 489, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, - 494, 0, 0, 0, 495, 0, 496, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, - 0, 0, 0, 0, 0, 502, 0, 0, 503, 0, 504, 0, 505, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 507, 0, 508, 509, 0, 0, 0, 0, - 510, 0, 0, 0, 511, 0, 512, 0, 513, 514, 515, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, - 0, 0, 518, 0, 0, 0, 519, 0, 520, 0, 521, 0, 522, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 525, 0, - 0, 526, 0, 0, 0, 527, 0, 528, 0, 0, 529, 0, 530, 0, 0, 531, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 534, - 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 0, 0, - 0, 0, 540, 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, 0, 547, - 0, 0, 0, 548, 0, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 0, 553, 0, 0, 554, 555, 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, - 0, 0, 0, 557, 0, 0, 0, 558, 0, 559, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 562, - 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, 0, 0, 568, 0, 0, 0, 569, 0, - 0, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 575, 0, 576, 0, - 577, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 0, 582, 0, 583, 0, 584, 0, 0, 585, 586, - 0, 587, 0, 0, 588, 0, 589, 0, 590, 0, 591, 0, 592, 0, 593, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, - 0, 0, 0, 599, 0, 0, 0, 0, 600, 0, 601, 0, 0, 602, 0, 603, 0, 0, 0, 0, 0, 604, 605, 0, 0, 0, 0, 0, 0, 606, 0, 0, - 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 609, 0, 610, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 613, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, 0, 618, 0, 619, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 0, 0, 0, 623, - 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, 0, 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 632, 0, 0, 633, 634, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 638, 0, 639, 0, 0, 0, 0, 640, 0, 641, 0, 0, 642, 0, 643, 0, 0, 644, - 645, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 647, 648, 0, 0, 0, 649, 0, 650, 0, 0, 651, 0, 652, 0, 0, 653, 654, 0, 0, 0, 0, - 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 659, 0, 660, 0, 661, 0, 662, 0, 663, 0, - 0, 0, 664, 0, 665, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, - 0, 670, 0, 0, 0, 671, 0, 672, 0, 673, 0, 0, 0, 674, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 677, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 0, - 0, 687, 0, 688, 0, 0, 689, 0, 0, 690, 0, 691, 0, 692, 0, 0, 693, 0, 694, 0, 0, 0, 0, 0, 695, 0, 696, 0, 0, 0, 697, 0, - 0, 0, 698, 0, 0, 699, 0, 0, 0, 700, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 0, 0, 704, 0, - 0, 0, 705, 0, 0, 706, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 711, 0, 0, 0, 712, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 715, 0, 0, 0, 0, - 0, 716, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, 0, 0, 0, 721, 0, - 0, 0, 0, 722, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 724, 0, 0, 0, 0, 0, 725, 726, 0, 0, 0, 727, 0, 0, 728, 0, 0, 729, 0, 730, 0, 731, 0, 0, 0, 0, 732, 0, 0, 733, - 734, 0, 735, 0, 736, 0, 0, 737, 0, 0, 0, 738, 0, 739, 0, 740, 0, 0, 0, 741, 0, 0, 0, 742, 0, 743, 0, 0, 0, 0, 0, 0, - 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, - 0, 0, 747, 0, 0, 748, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 752, - 0, 0, 0, 0, 0, 753, 0, 754, 0, 755, 0, 756, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, - 0, 0, 759, 0, 0, 0, 0, 760, 0, 761, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 765, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 770, 0, 771, 0, 0, 772, 0, 0, 773, 0, 774, 0, 0, 0, - 775, 0, 0, 0, 0, 0, 776, 0, 0, 777, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 780, 781, 0, 0, 0, 782, 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 0, 785, 0, 786, 0, 787, 0, 788, 0, 789, 0, - 0, 0, 790, 0, 0, 0, 0, 0, 0, 791, 0, 792, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 794, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 796, 0, 0, 797, 0, 0, 0, 0, 0, 0, - 0, 798, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, - 801, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 803, 0, 0, 0, 0, 804, 0, 805, 0, 0, 806, 0, 0, 0, 0, 807, 0, 0, 0, 808, 0, - 0, 809, 0, 810, 0, 0, 811, 0, 0, 812, 0, 813, 0, 0, 0, 814, 0, 0, 815, 0, 0, 0, 816, 0, 0, 817, 0, 818, 0, 0, 819, 0, - 0, 820, 0, 0, 0, 821, 0, 822, 0, 0, 0, 0, 823, 0, 0, 824, 0, 0, 0, 825, 0, 0, 0, 0, 826, 0, 0, 827, 0, 828, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 830, 0, 831, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, - 833, 0, 0, 0, 0, 834, 0, 0, 835, 0, 0, 836, 0, 837, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 841, - 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 844, 0, 845, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 847, 0, - 0, 0, 0, 0, 0, 848, 0, 849, 850, 0, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 853, 0, 0, 0, 854, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0174[64] = { + 0x001510900A10A863ull, 0x21A40021A0015043ull, 0x0401324A92892415ull, 0x8020040102B49548ull, + 0x1482000600A00000ull, 0x8011609014211428ull, 0x52C1202904184A24ull, 0x40244100800B8240ull, + 0x0800228410800241ull, 0xA010AA0004800091ull, 0x00402901A5226002ull, 0x20028A8A28844C00ull, + 0x2008440902A04100ull, 0x80812A0900811495ull, 0xA010221002440528ull, 0x0240480081002000ull, + 0x4120802804000448ull, 0x4082004288824884ull, 0x24000A1404441080ull, 0x8222200210900828ull, + 0x80010100A20834A2ull, 0x0432A22220421240ull, 0x12A10A8554409144ull, 0x82509412A5129002ull, + 0x0440090422400412ull, 0x0820928020080100ull, 0x5555102118A55544ull, 0x041249084108108Cull, + 0x824A201120408205ull, 0x0849249294900848ull, 0x4008112003224410ull, 0x4008002402012010ull, + 0x2240225290002402ull, 0xA092400002402240ull, 0x8241209040209112ull, 0x0200904842240904ull, + 0x0201202202200040ull, 0x0D10152082021251ull, 0x5000954402008751ull, 0x04808220810294A2ull, + 0x20192A88A0848224ull, 0x4421108480400A88ull, 0xCA8A104151048014ull, 0x1028000000225552ull, + 0x002000022060A508ull, 0xA14080420000804Aull, 0x0510810882400800ull, 0x94A14200802C8408ull, + 0x555040420CA51841ull, 0x480422A208104814ull, 0x1048820005000A00ull, 0x4900822445052A4Aull, + 0x08800A2008220824ull, 0x0000020841102202ull, 0x0288A89590A92304ull, 0x8110102440200004ull, + 0x0100228404020AA0ull, 0x1494800014010A00ull, 0x5540A46000101241ull, 0x0241000080002A04ull, + 0x442508410200000Aull, 0x290890A24A448A4Aull, 0x9100A92120282000ull, 0x882009A0440A8010ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0174[64] = { + 1u, 17u, 32u, 51u, 66u, 74u, 89u, 107u, 119u, 129u, 141u, 155u, 170u, 181u, 197u, 210u, + 217u, 227u, 240u, 251u, 263u, 276u, 291u, 310u, 328u, 339u, 348u, 371u, 385u, 399u, 416u, 428u, + 436u, 449u, 460u, 474u, 486u, 494u, 510u, 526u, 540u, 557u, 570u, 587u, 599u, 609u, 620u, 630u, + 645u, 664u, 678u, 687u, 705u, 716u, 724u, 744u, 753u, 764u, 775u, 790u, 798u, 809u, 829u, 842u, }; void recomp_unit_0174_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -153,13 +48,25 @@ void recomp_unit_0174_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08ABC000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0174[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0174[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0174[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08ABC000; @@ -1048,7 +955,6 @@ L_08ABC018: } L_08ABC02C: { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ABC03C; } @@ -1063,7 +969,6 @@ L_08ABC03C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABC018; } @@ -1078,14 +983,34 @@ L_08ABC050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC064: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC06C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1101,7 +1026,6 @@ L_08ABC06C: L_08ABC090: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8022)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08ABC0C8; } @@ -1112,7 +1036,6 @@ L_08ABC09C: aot_gpr_5 = (0u | 65533u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABC0C0; } @@ -1138,7 +1061,6 @@ L_08ABC0C0: } L_08ABC0C8: aot_gpr_31 = (0x08ABC0D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABC0D0u) goto L_08ABC0D0; AOT_REGCACHE_SYNC_OUT(); return; L_08ABC0D0: @@ -1153,7 +1075,6 @@ L_08ABC0D0: aot_gpr_16 = (aot_gpr_6 - aot_gpr_4); aot_gpr_16 = (aot_gpr_16 + static_cast(8)); { const bool branch_taken = static_cast(aot_gpr_16) > 0; - // nop if (branch_taken) { goto L_08ABC104; } @@ -1225,7 +1146,17 @@ L_08ABC180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC194: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -1279,7 +1210,6 @@ L_08ABC1F4: } L_08ABC200: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABC210; } @@ -1295,7 +1225,6 @@ L_08ABC210: aot_gpr_6 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08ABC1F4; } @@ -1330,7 +1259,6 @@ L_08ABC24C: AOT_REGCACHE_SYNC_OUT(); return; L_08ABC25C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ABC2B4; } @@ -1339,7 +1267,6 @@ L_08ABC25C: L_08ABC264: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(535))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABC298; } @@ -1353,7 +1280,6 @@ L_08ABC270: AOT_REGCACHE_SYNC_OUT(); return; L_08ABC27C: aot_gpr_31 = (0x08ABC284u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABC284u) goto L_08ABC284; AOT_REGCACHE_SYNC_OUT(); return; L_08ABC284: @@ -1385,7 +1311,6 @@ L_08ABC2B0: L_08ABC2B4: ctx.gpr[17] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08ABC24C; } @@ -1408,7 +1333,17 @@ L_08ABC2C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC2E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 + static_cast(16)); @@ -1456,7 +1391,6 @@ L_08ABC330: L_08ABC33C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ABC354; } @@ -1493,7 +1427,17 @@ L_08ABC364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC380: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1502,7 +1446,6 @@ L_08ABC380: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } aot_gpr_4 = (0u | 891u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ABC3D4; } @@ -1599,7 +1542,6 @@ L_08ABC488: aot_gpr_4 = (2236u << 16u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(29704))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08ABC4DC; } @@ -1644,20 +1586,39 @@ L_08ABC4F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC50C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC514: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(521))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABC530; } @@ -1665,7 +1626,6 @@ L_08ABC514: } L_08ABC528: aot_gpr_31 = (0x08ABC530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 575u, 0x0886309Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABC530u) goto L_08ABC530; AOT_REGCACHE_SYNC_OUT(); return; L_08ABC530: @@ -1676,13 +1636,22 @@ L_08ABC530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC540: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(521))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABC5C0; } @@ -1736,7 +1705,6 @@ L_08ABC59C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABC5B8; } @@ -1747,7 +1715,6 @@ L_08ABC5B4: goto L_08ABC5B8; L_08ABC5B8: aot_gpr_31 = (0x08ABC5C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 575u, 0x0886309Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ABC5C0u) goto L_08ABC5C0; AOT_REGCACHE_SYNC_OUT(); return; L_08ABC5C0: @@ -1758,7 +1725,17 @@ L_08ABC5C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC5D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1788,7 +1765,6 @@ L_08ABC5FC: L_08ABC608: aot_gpr_4 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABC5FC; } @@ -1839,7 +1815,17 @@ L_08ABC650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC668: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7952))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(524))); @@ -1898,7 +1884,6 @@ L_08ABC6C0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABC6DC; } @@ -1961,7 +1946,6 @@ L_08ABC724: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABC740; } @@ -1975,11 +1959,20 @@ L_08ABC740: goto L_08ABC744; L_08ABC744: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[9] = (aot_gpr_5 | 0u); @@ -2007,7 +2000,6 @@ L_08ABC77C: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); ctx.gpr[9] = (ctx.gpr[9] & 63u); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ABC800; } @@ -2029,7 +2021,6 @@ L_08ABC7B8: ctx.gpr[10] = (ctx.gpr[7] + static_cast(1)); ctx.gpr[10] = (static_cast(ctx.gpr[10]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08ABC800; } @@ -2038,7 +2029,6 @@ L_08ABC7B8: L_08ABC7C8: aot_gpr_4 = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABC7F8; } @@ -2057,7 +2047,6 @@ L_08ABC7D4: goto L_08ABC7F8; L_08ABC7F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABC818; } @@ -2078,7 +2067,17 @@ L_08ABC818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2115,7 +2114,17 @@ L_08ABC870: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC888: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2135,7 +2144,17 @@ L_08ABC8A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC8B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2197,7 +2216,17 @@ L_08ABC91C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC95C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); jump_target = aot_gpr_31; @@ -2205,7 +2234,17 @@ L_08ABC95C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC968: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_gpr_5 << 2u); @@ -2221,7 +2260,6 @@ L_08ABC968: aot_gpr_4 = (aot_gpr_4 - aot_gpr_6); ctx.gpr[2] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08ABC9AC; } @@ -2229,7 +2267,6 @@ L_08ABC968: } L_08ABC9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABC9B4; } @@ -2241,11 +2278,20 @@ L_08ABC9AC: goto L_08ABC9B4; L_08ABC9B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABC9BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[2] = (aot_gpr_5 << 2u); @@ -2266,7 +2312,6 @@ L_08ABC9D0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABC9FC; } @@ -2282,11 +2327,20 @@ L_08ABC9F4: } L_08ABC9FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCA04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2326,7 +2380,6 @@ L_08ABCA44: L_08ABCA54: aot_gpr_4 = (aot_gpr_4 & 511u); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08ABCA68; } @@ -2371,7 +2424,17 @@ L_08ABCA80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCAA0: ctx.gpr[7] = (0u | 255u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; @@ -2398,7 +2461,17 @@ L_08ABCAB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCAD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2443,7 +2516,6 @@ L_08ABCB48: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_gpr_5 & 63u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ABCB74; } @@ -2457,7 +2529,6 @@ L_08ABCB5C: goto L_08ABC8B4; L_08ABCB6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABCBBC; } @@ -2467,7 +2538,6 @@ L_08ABCB74: aot_gpr_5 = (aot_gpr_5 >> 6u); aot_gpr_5 = (aot_gpr_5 & 511u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABCBA4; } @@ -2485,7 +2555,6 @@ L_08ABCB8C: goto L_08ABC8B4; L_08ABCB9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABCBBC; } @@ -2528,7 +2597,17 @@ L_08ABCBC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCBF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2552,7 +2631,17 @@ L_08ABCC20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCC38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -2572,7 +2661,6 @@ L_08ABCC54: goto L_08ABCC8C; L_08ABCC5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABCC80; } @@ -2594,7 +2682,17 @@ L_08ABCC80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCC8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2622,7 +2720,17 @@ L_08ABCCB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCCCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2642,7 +2750,6 @@ L_08ABCCCC: L_08ABCCF4: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ABCD10; } @@ -2658,7 +2765,6 @@ L_08ABCD00: } L_08ABCD08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABCD40; } @@ -2672,7 +2778,6 @@ L_08ABCD10: L_08ABCD1C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ABCD30; } @@ -2706,7 +2811,17 @@ L_08ABCD40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCD5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -2716,7 +2831,6 @@ L_08ABCD5C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ABCDB4; } @@ -2725,7 +2839,6 @@ L_08ABCD5C: L_08ABCD80: aot_gpr_6 = (static_cast(aot_gpr_5) < 250 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ABCDAC; } @@ -2755,7 +2868,17 @@ L_08ABCDB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCDC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2780,7 +2903,17 @@ L_08ABCDDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCDFC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(52))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); @@ -2793,7 +2926,6 @@ L_08ABCDFC: } L_08ABCE0C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABCE20; } @@ -2806,11 +2938,20 @@ L_08ABCE14: goto L_08ABCE20; L_08ABCE20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCE28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -2838,7 +2979,17 @@ L_08ABCE58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCE64: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -2857,7 +3008,6 @@ L_08ABCE90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08ABCEB4; } @@ -2948,7 +3098,17 @@ L_08ABCF60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCF7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -2970,7 +3130,17 @@ L_08ABCFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCFB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -2988,7 +3158,17 @@ L_08ABCFD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABCFE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -3008,12 +3188,21 @@ L_08ABD00C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD018: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[8] = (0u | 12u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08ABD08C; } @@ -3054,11 +3243,20 @@ L_08ABD068: goto L_08ABD08C; L_08ABD08C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -3081,11 +3279,20 @@ L_08ABD0BC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12360))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD0D4: aot_gpr_4 = (0u | 11u); { const bool branch_taken = 0u == 0u; @@ -3166,7 +3373,6 @@ L_08ABD16C: goto L_08ABD018; L_08ABD17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD184; } @@ -3184,7 +3390,17 @@ L_08ABD184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD198: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -3219,7 +3435,17 @@ L_08ABD1DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD1F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3248,11 +3474,20 @@ L_08ABD230: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12392))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD248: aot_gpr_4 = (ctx.gpr[18] | 0u); aot_gpr_5 = (aot_gpr_16 | 0u); @@ -3281,7 +3516,6 @@ L_08ABD268: goto L_08ABDFCC; L_08ABD288: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD258; } @@ -3296,7 +3530,6 @@ L_08ABD290: goto L_08ABE004; L_08ABD2A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD258; } @@ -3326,7 +3559,6 @@ L_08ABD2AC: L_08ABD2E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ABD30C; } @@ -3342,7 +3574,6 @@ L_08ABD2F4: goto L_08ABDFCC; L_08ABD30C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD258; } @@ -3361,7 +3592,17 @@ L_08ABD314: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD32C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -3401,7 +3642,17 @@ L_08ABD370: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD384: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3417,7 +3668,6 @@ L_08ABD3B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.gpr[21] = (0u | 9u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08ABD3D4; } @@ -3433,7 +3683,6 @@ L_08ABD3D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ABD4C0; } @@ -3449,7 +3698,6 @@ L_08ABD3E4: goto L_08ABCA04; L_08ABD3FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ABD41C; } @@ -3463,7 +3711,6 @@ L_08ABD404: goto L_08ABCA04; L_08ABD414: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ABD474; } @@ -3554,7 +3801,17 @@ L_08ABD4C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD4FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3593,7 +3850,17 @@ L_08ABD544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD558: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3607,7 +3874,6 @@ L_08ABD574: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABD5C4; } @@ -3627,7 +3893,6 @@ L_08ABD594: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABD5C4; } @@ -3649,7 +3914,6 @@ L_08ABD5B4: } L_08ABD5BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD5D4; } @@ -3675,7 +3939,17 @@ L_08ABD5D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD5E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -3698,7 +3972,6 @@ L_08ABD608: goto L_08ABD558; L_08ABD618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD630; } @@ -3717,7 +3990,17 @@ L_08ABD630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD63C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3739,7 +4022,6 @@ L_08ABD658: } L_08ABD668: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08ABD6E4; } @@ -3747,7 +4029,6 @@ L_08ABD668: } L_08ABD670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD688; } @@ -3755,7 +4036,6 @@ L_08ABD670: } L_08ABD678: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ABD6C0; } @@ -3763,7 +4043,6 @@ L_08ABD678: } L_08ABD680: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD6E4; } @@ -3774,7 +4053,6 @@ L_08ABD688: aot_gpr_4 = (aot_gpr_4 + static_cast(250)); aot_gpr_4 = (static_cast(aot_gpr_4) < 512 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABD6A4; } @@ -3782,7 +4060,6 @@ L_08ABD688: } L_08ABD69C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD6E4; } @@ -3808,7 +4085,6 @@ L_08ABD6C0: ctx.gpr[2] = (ctx.gpr[2] + static_cast(250)); aot_gpr_4 = (static_cast(ctx.gpr[2]) < 512 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABD6DC; } @@ -3816,7 +4092,6 @@ L_08ABD6C0: } L_08ABD6D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD6E4; } @@ -3824,7 +4099,6 @@ L_08ABD6D4: } L_08ABD6DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD6F0; } @@ -3847,7 +4121,17 @@ L_08ABD6F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -3876,7 +4160,6 @@ L_08ABD730: } L_08ABD73C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABD784; } @@ -3895,7 +4178,6 @@ L_08ABD750: goto L_08ABD384; L_08ABD760: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD810; } @@ -3912,7 +4194,6 @@ L_08ABD768: } L_08ABD774: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABD7D8; } @@ -3920,7 +4201,6 @@ L_08ABD774: } L_08ABD77C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD804; } @@ -3941,7 +4221,6 @@ L_08ABD790: goto L_08ABDFCC; L_08ABD7A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD804; } @@ -3961,7 +4240,6 @@ L_08ABD7BC: goto L_08ABE004; L_08ABD7D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD804; } @@ -3982,7 +4260,6 @@ L_08ABD7E4: goto L_08ABDFCC; L_08ABD7FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD804; } @@ -4006,7 +4283,17 @@ L_08ABD810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD828: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4067,7 +4354,17 @@ L_08ABD8AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD8D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4092,7 +4389,17 @@ L_08ABD8E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD920: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -4120,7 +4427,6 @@ L_08ABD94C: aot_gpr_5 = (0u | 18u); aot_gpr_6 = (aot_gpr_4 & 63u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABD9A4; } @@ -4140,7 +4446,6 @@ L_08ABD974: goto L_08ABC888; L_08ABD99C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABD9D4; } @@ -4177,7 +4482,17 @@ L_08ABD9D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABD9EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4215,7 +4530,6 @@ L_08ABDA20: } L_08ABDA28: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABDA5C; } @@ -4281,7 +4595,17 @@ L_08ABDA80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDA94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4319,7 +4643,6 @@ L_08ABDAC8: } L_08ABDAD0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABDAF8; } @@ -4380,7 +4703,17 @@ L_08ABDB1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDB30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4395,7 +4728,6 @@ L_08ABDB4C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(11) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABDC00; } @@ -4407,11 +4739,20 @@ L_08ABDB60: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12440))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDB78: aot_gpr_4 = (0u | 2u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(0), aot_gpr_4); @@ -4496,7 +4837,17 @@ L_08ABDC08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDC24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4516,7 +4867,17 @@ L_08ABDC3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDC58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4539,7 +4900,6 @@ L_08ABDC80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABDCCC; } @@ -4554,7 +4914,6 @@ L_08ABDC90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 3u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08ABDCCC; } @@ -4619,7 +4978,17 @@ L_08ABDD18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDD2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4638,7 +5007,6 @@ L_08ABDD2C: L_08ABDD50: aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABDDCC; } @@ -4651,7 +5019,6 @@ L_08ABDD5C: goto L_08ABD4FC; L_08ABDD68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABDDD8; } @@ -4668,7 +5035,6 @@ L_08ABDD70: } L_08ABDD7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABDDCC; } @@ -4729,7 +5095,17 @@ L_08ABDDD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDDEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4785,7 +5161,6 @@ L_08ABDE44: L_08ABDE54: ctx.gpr[9] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08ABDE64; } @@ -4821,7 +5196,17 @@ L_08ABDEA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDEB0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); @@ -4833,7 +5218,17 @@ L_08ABDEB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDECC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -4928,7 +5323,17 @@ L_08ABDF94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABDFCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_6 << 24u); @@ -4949,7 +5354,17 @@ L_08ABDFF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE004: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_6 << 24u); @@ -4968,7 +5383,17 @@ L_08ABE028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE034: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -4992,7 +5417,6 @@ L_08ABE034: L_08ABE070: aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ABE118; } @@ -5000,7 +5424,6 @@ L_08ABE070: } L_08ABE07C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE204; } @@ -5017,7 +5440,6 @@ L_08ABE084: } L_08ABE090: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABE204; } @@ -5099,7 +5521,6 @@ L_08ABE134: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_gpr_5 & 63u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ABE1B8; } @@ -5166,7 +5587,6 @@ L_08ABE1F4: goto L_08ABE1FC; L_08ABE1FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE254; } @@ -5218,7 +5638,17 @@ L_08ABE254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE278: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5234,7 +5664,17 @@ L_08ABE290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE29C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5250,7 +5690,17 @@ L_08ABE2B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE2C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5266,7 +5716,17 @@ L_08ABE2D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE2E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5282,7 +5742,17 @@ L_08ABE2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5298,7 +5768,17 @@ L_08ABE320: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE32C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } @@ -5333,7 +5813,17 @@ L_08ABE364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE378: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5348,7 +5838,17 @@ L_08ABE38C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE398: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5364,7 +5864,17 @@ L_08ABE3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE3BC: aot_gpr_5 = (2220u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-3256)); @@ -5377,7 +5887,17 @@ L_08ABE3BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE3E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5495,7 +6015,6 @@ L_08ABE500: } L_08ABE510: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ABE524; } @@ -5508,7 +6027,6 @@ L_08ABE518: L_08ABE524: ctx.gpr[2] = (ctx.gpr[9] < static_cast(257) ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ABE484; } @@ -5536,7 +6054,17 @@ L_08ABE544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE564: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(8), aot_run_words); } @@ -5546,7 +6074,17 @@ L_08ABE564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE57C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -5569,7 +6107,6 @@ L_08ABE594: } L_08ABE5A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE618; } @@ -5620,7 +6157,6 @@ L_08ABE5EC: aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABE610; } @@ -5635,7 +6171,6 @@ L_08ABE600: AOT_REGCACHE_SYNC_OUT(); return; L_08ABE610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE624; } @@ -5663,7 +6198,17 @@ L_08ABE628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE63C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_6 + aot_gpr_5); @@ -5674,7 +6219,6 @@ L_08ABE63C: ctx.gpr[8] = (ctx.gpr[7] < static_cast(257) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABE6A8; } @@ -5712,7 +6256,6 @@ L_08ABE698: AOT_REGCACHE_SYNC_OUT(); return; L_08ABE6A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE6B0; } @@ -5720,7 +6263,6 @@ L_08ABE6A0: } L_08ABE6A8: aot_gpr_31 = (0x08ABE6B0u); - // nop goto L_08ABF46C; L_08ABE6B0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5729,7 +6271,17 @@ L_08ABE6B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE6BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -5751,7 +6303,6 @@ L_08ABE6BC: } L_08ABE6F0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ABE71C; } @@ -5774,7 +6325,6 @@ L_08ABE704: } L_08ABE714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE874; } @@ -5800,7 +6350,6 @@ L_08ABE730: goto L_08ABE57C; L_08ABE73C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE8D0; } @@ -5813,7 +6362,6 @@ L_08ABE744: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABE7A4; } @@ -5826,7 +6374,6 @@ L_08ABE760: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABE7A4; } @@ -5852,7 +6399,6 @@ L_08ABE7A4: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABE874; } @@ -5871,7 +6417,6 @@ L_08ABE7BC: L_08ABE7DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABE808; } @@ -5905,7 +6450,6 @@ L_08ABE824: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 - ctx.gpr[18]); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08ABE85C; } @@ -5914,7 +6458,6 @@ L_08ABE824: L_08ABE83C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(24))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABE85C; } @@ -5942,7 +6485,6 @@ L_08ABE85C: } L_08ABE874: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08ABE8A4; } @@ -6014,7 +6556,17 @@ L_08ABE8D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -6037,7 +6589,6 @@ L_08ABE90C: goto L_08ABE91C; L_08ABE91C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE958; } @@ -6045,7 +6596,6 @@ L_08ABE91C: } L_08ABE924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABE97C; } @@ -6086,7 +6636,17 @@ L_08ABE97C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABE988: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_6 & 255u); @@ -6159,11 +6719,20 @@ L_08ABE9F8: goto L_08ABEA08; L_08ABEA08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEA10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7584), 0u); @@ -6192,7 +6761,6 @@ L_08ABEA48: ctx.gpr[11] = (0u < ctx.gpr[11] ? 1u : 0u); ctx.gpr[11] = (ctx.gpr[11] & 255u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08ABEB18; } @@ -6206,7 +6774,6 @@ L_08ABEA60: goto L_08ABEA70; L_08ABEA70: { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_08ABEAE4; } @@ -6214,7 +6781,6 @@ L_08ABEA70: } L_08ABEA78: { const bool branch_taken = ctx.gpr[3] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08ABEAE4; } @@ -6226,7 +6792,6 @@ L_08ABEA80: ctx.gpr[24] = (0u < ctx.gpr[24] ? 1u : 0u); ctx.gpr[24] = (ctx.gpr[24] & 255u); { const bool branch_taken = ctx.gpr[24] == 0u; - // nop if (branch_taken) { goto L_08ABEAB0; } @@ -6249,7 +6814,6 @@ L_08ABEAB0: ctx.gpr[13] = (0u < ctx.gpr[13] ? 1u : 0u); ctx.gpr[13] = (ctx.gpr[13] & 255u); { const bool branch_taken = ctx.gpr[13] != 0u; - // nop if (branch_taken) { goto L_08ABEACC; } @@ -6257,7 +6821,6 @@ L_08ABEAB0: } L_08ABEAC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABEAE4; } @@ -6271,7 +6834,6 @@ L_08ABEACC: goto L_08ABEADC; L_08ABEADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABEA70; } @@ -6279,7 +6841,6 @@ L_08ABEADC: } L_08ABEAE4: { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_08ABEB04; } @@ -6288,7 +6849,6 @@ L_08ABEAE4: L_08ABEAEC: ctx.gpr[8] = (aot_gpr_6 < ctx.gpr[11] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABEAFC; } @@ -6308,7 +6868,6 @@ L_08ABEAFC: L_08ABEB04: ctx.gpr[11] = (ctx.gpr[2] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08ABEB18; } @@ -6324,7 +6883,6 @@ L_08ABEB18: goto L_08ABEB20; L_08ABEB20: { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08ABEA48; } @@ -6345,7 +6903,6 @@ L_08ABEB30: L_08ABEB38: aot_gpr_4 = (static_cast(ctx.gpr[2]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABEB44; } @@ -6359,7 +6916,17 @@ L_08ABEB44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEB54: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[21]); @@ -6394,7 +6961,6 @@ L_08ABEB54: goto L_08ABEBCC; L_08ABEBCC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABEDF4; } @@ -6407,7 +6973,6 @@ L_08ABEBD4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABEDF4; } @@ -6420,7 +6985,6 @@ L_08ABEBF0: ctx.gpr[19] = (ctx.gpr[17] - ctx.gpr[19]); aot_gpr_5 = (ctx.gpr[19] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABEC28; } @@ -6431,7 +6995,6 @@ L_08ABEC0C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABEC34; } @@ -6439,7 +7002,6 @@ L_08ABEC0C: } L_08ABEC20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABEC58; } @@ -6464,7 +7026,6 @@ L_08ABEC3C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABEC34; } @@ -6480,7 +7041,6 @@ L_08ABEC58: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABED0C; } @@ -6651,7 +7211,17 @@ L_08ABEDFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEE2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(7584), 0u); @@ -6679,7 +7249,6 @@ L_08ABEE64: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABEE8C; } @@ -6696,7 +7265,6 @@ L_08ABEE8C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.gpr[19] = (ctx.gpr[19] + aot_gpr_4); { const bool branch_taken = ctx.gpr[19] != aot_gpr_5; - // nop if (branch_taken) { goto L_08ABEE64; } @@ -6716,13 +7284,22 @@ L_08ABEEA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEEBC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.gpr[7] = (aot_gpr_6 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08ABEEE0; } @@ -6732,7 +7309,6 @@ L_08ABEED0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABEEE8; } @@ -6755,7 +7331,6 @@ L_08ABEEE8: ctx.gpr[8] = (aot_gpr_4 << 2u); ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[9]); { const bool branch_taken = ctx.gpr[9] == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08ABEF48; } @@ -6768,7 +7343,6 @@ L_08ABEF0C: aot_gpr_4 = (aot_gpr_6 - aot_gpr_4); ctx.gpr[10] = (ctx.gpr[10] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08ABEF3C; } @@ -6788,7 +7362,6 @@ L_08ABEF28: L_08ABEF3C: ctx.gpr[9] = (ctx.gpr[9] + static_cast(12)); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08ABEF0C; } @@ -6799,11 +7372,20 @@ L_08ABEF48: goto L_08ABEF4C; L_08ABEF4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEF54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -6858,14 +7440,33 @@ L_08ABEFC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEFD4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABEFDC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != 0u; @@ -6901,7 +7502,6 @@ L_08ABF000: ctx.gpr[9] = (0u < ctx.gpr[9] ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08ABF030; } @@ -6912,7 +7512,6 @@ L_08ABF018: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08ABF030; } @@ -6925,7 +7524,6 @@ L_08ABF030: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[8]); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ABF000; } @@ -6933,15 +7531,23 @@ L_08ABF030: } L_08ABF040: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF048: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABF05C; } @@ -6949,7 +7555,6 @@ L_08ABF048: } L_08ABF054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF108; } @@ -6973,7 +7578,6 @@ L_08ABF06C: ctx.gpr[9] = (0u < ctx.gpr[9] ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -6984,7 +7588,6 @@ L_08ABF084: ctx.gpr[8] = (0u < ctx.gpr[8] ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -6998,7 +7601,6 @@ L_08ABF098: ctx.gpr[8] = (ctx.gpr[8] + static_cast(-109)); ctx.gpr[9] = (ctx.gpr[8] < static_cast(12) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -7010,14 +7612,22 @@ L_08ABF0B8: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[8]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12704))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -7025,7 +7635,6 @@ L_08ABF0D0: } L_08ABF0D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -7033,7 +7642,6 @@ L_08ABF0D8: } L_08ABF0E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -7041,7 +7649,6 @@ L_08ABF0E0: } L_08ABF0E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -7049,7 +7656,6 @@ L_08ABF0E8: } L_08ABF0F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF0F8; } @@ -7059,7 +7665,6 @@ L_08ABF0F8: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[8]); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ABF06C; } @@ -7067,11 +7672,20 @@ L_08ABF0F8: } L_08ABF108: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF110: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 + static_cast(1023)); @@ -7088,7 +7702,6 @@ L_08ABF110: L_08ABF12C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ABF150; } @@ -7113,7 +7726,6 @@ L_08ABF150: ctx.gpr[7] = (ctx.gpr[7] - ctx.gpr[8]); ctx.gpr[7] = (ctx.gpr[7] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ABF19C; } @@ -7192,7 +7804,17 @@ L_08ABF1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF1F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.gpr[7] = (4096u << 16u); @@ -7233,11 +7855,20 @@ L_08ABF22C: goto L_08ABF260; L_08ABF260: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF268: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 + static_cast(3)); @@ -7253,7 +7884,6 @@ L_08ABF268: aot_gpr_6 = (aot_gpr_6 & ctx.gpr[8]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ABF2CC; } @@ -7281,7 +7911,17 @@ L_08ABF2CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF2D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -7292,7 +7932,17 @@ L_08ABF2D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF2F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -7306,7 +7956,6 @@ L_08ABF2F0: } L_08ABF304: aot_gpr_31 = (0x08ABF30Cu); - // nop goto L_08ABF6BC; L_08ABF30C: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); @@ -7320,10 +7969,19 @@ L_08ABF318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF324: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABF334; } @@ -7344,11 +8002,20 @@ L_08ABF334: goto L_08ABF340; L_08ABF340: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7365,7 +8032,6 @@ L_08ABF368: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(36))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ABF394; } @@ -7375,7 +8041,6 @@ L_08ABF378: aot_gpr_5 = (aot_gpr_6 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ABF394; } @@ -7384,7 +8049,6 @@ L_08ABF378: L_08ABF388: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ABF388; } @@ -7426,7 +8090,6 @@ L_08ABF3E0: L_08ABF3EC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ABF444; } @@ -7490,7 +8153,17 @@ L_08ABF454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF46C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -7515,7 +8188,6 @@ L_08ABF494: goto L_08ABF608; L_08ABF4A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ABF550; } @@ -7533,7 +8205,6 @@ L_08ABF4AC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABF4EC; } @@ -7561,7 +8232,6 @@ L_08ABF504: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABF534; } @@ -7608,7 +8278,17 @@ L_08ABF560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF578: ctx.gpr[8] = (0u + static_cast(8)); ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[8]); @@ -7655,14 +8335,23 @@ L_08ABF5A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF608: aot_gpr_6 = (0u + static_cast(8)); ctx.gpr[7] = (0u | 20u); ctx.gpr[7] = (ctx.gpr[7] - aot_gpr_6); ctx.gpr[8] = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABF624; } @@ -7675,7 +8364,6 @@ L_08ABF624: ctx.gpr[7] = (aot_gpr_5 + aot_gpr_6); ctx.gpr[7] = (ctx.gpr[7] & 63u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ABF640; } @@ -7701,7 +8389,6 @@ L_08ABF64C: } L_08ABF654: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABF6B4; } @@ -7712,7 +8399,6 @@ L_08ABF65C: ctx.gpr[8] = (ctx.gpr[8] - aot_gpr_6); ctx.gpr[8] = (ctx.gpr[8] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABF690; } @@ -7721,7 +8407,6 @@ L_08ABF65C: L_08ABF670: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ABF688; } @@ -7732,7 +8417,6 @@ L_08ABF67C: goto L_08ABF680; L_08ABF680: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF64C; } @@ -7740,7 +8424,6 @@ L_08ABF680: } L_08ABF688: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF6B4; } @@ -7749,7 +8432,6 @@ L_08ABF688: L_08ABF690: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABF6AC; } @@ -7775,16 +8457,24 @@ L_08ABF6AC: } L_08ABF6B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF6BC: ctx.gpr[2] = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABF6DC; } @@ -7794,7 +8484,6 @@ L_08ABF6CC: ctx.gpr[2] = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ABF6CC; } @@ -7802,11 +8491,20 @@ L_08ABF6CC: } L_08ABF6DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF6E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7837,7 +8535,6 @@ L_08ABF708: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABF778; } @@ -7879,7 +8576,17 @@ L_08ABF794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_gpr_4 + static_cast(8)); @@ -7888,7 +8595,6 @@ L_08ABF7B0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08ABF81C; } @@ -7898,7 +8604,6 @@ L_08ABF7D0: ctx.gpr[8] = (aot_gpr_6 - ctx.gpr[8]); aot_gpr_6 = (ctx.gpr[8] < static_cast(20) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ABF82C; } @@ -7923,7 +8628,6 @@ L_08ABF7FC: goto L_08ABF6E4; L_08ABF814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF8A4; } @@ -7935,7 +8639,6 @@ L_08ABF81C: goto L_08ABF6E4; L_08ABF824: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF8A4; } @@ -7979,7 +8682,6 @@ L_08ABF888: goto L_08ABF6E4; L_08ABF89C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABF8A4; } @@ -7993,7 +8695,17 @@ L_08ABF8A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABF8B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8057,7 +8769,6 @@ L_08ABF940: goto L_08ABF968; L_08ABF968: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABF9F0; } @@ -8082,7 +8793,6 @@ L_08ABF970: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABF9C8; } @@ -8109,7 +8819,6 @@ L_08ABF9DC: goto L_08ABFC04; L_08ABF9E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABFA30; } @@ -8119,7 +8828,6 @@ L_08ABF9F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_5 = (aot_gpr_5 & ctx.gpr[18]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABFA18; } @@ -8158,7 +8866,17 @@ L_08ABFA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFA50: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -8189,7 +8907,6 @@ L_08ABFA98: aot_gpr_6 = (ctx.gpr[17] + ctx.gpr[19]); aot_gpr_6 = (aot_gpr_6 & 63u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ABFAB4; } @@ -8202,7 +8919,6 @@ L_08ABFAA8: goto L_08ABFAB4; L_08ABFAB4: { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08ABFAE0; } @@ -8215,7 +8931,6 @@ L_08ABFABC: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ABFAE8; } @@ -8223,7 +8938,6 @@ L_08ABFABC: } L_08ABFAD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABFAF8; } @@ -8231,7 +8945,6 @@ L_08ABFAD8: } L_08ABFAE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABFBE4; } @@ -8249,7 +8962,6 @@ L_08ABFAF8: ctx.gpr[17] = (aot_gpr_5 - ctx.gpr[17]); aot_gpr_5 = (ctx.gpr[17] < static_cast(20) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABFBE4; } @@ -8321,7 +9033,6 @@ L_08ABFBC0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABFBE4; } @@ -8347,14 +9058,33 @@ L_08ABFBE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFC04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFC0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -8377,7 +9107,6 @@ L_08ABFC0C: ctx.gpr[8] = (ctx.gpr[8] & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08ABFC80; } @@ -8433,13 +9162,22 @@ L_08ABFCC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFCD4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), 0u); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ABFCF8; } @@ -8466,7 +9204,6 @@ L_08ABFCF8: } L_08ABFD04: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABFD3C; } @@ -8475,7 +9212,6 @@ L_08ABFD04: L_08ABFD0C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABFD2C; } @@ -8488,7 +9224,6 @@ L_08ABFD18: goto L_08ABFD24; L_08ABFD24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ABFD04; } @@ -8507,7 +9242,6 @@ L_08ABFD2C: L_08ABFD3C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABFD58; } @@ -8530,11 +9264,20 @@ L_08ABFD58: goto L_08ABFD64; L_08ABFD64: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFD6C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_6 != 0u; @@ -8565,7 +9308,6 @@ L_08ABFD84: } L_08ABFD94: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08ABFDB0; } @@ -8585,7 +9327,6 @@ L_08ABFD9C: L_08ABFDB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABFE34; } @@ -8595,7 +9336,6 @@ L_08ABFDBC: ctx.gpr[7] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ABFDE0; } @@ -8606,7 +9346,6 @@ L_08ABFDCC: ctx.gpr[7] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(12))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ABFDCC; } @@ -8656,11 +9395,20 @@ L_08ABFE34: goto L_08ABFE4C; L_08ABFE4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFE54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -8678,7 +9426,17 @@ L_08ABFE74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFE80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -8689,7 +9447,6 @@ L_08ABFE80: L_08ABFE94: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1836))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ABFEAC; } @@ -8706,7 +9463,6 @@ L_08ABFEA0: } L_08ABFEAC: aot_gpr_31 = (0x08ABFEB4u); - // nop ctx.pc = 0x08B73564u; AOT_REGCACHE_SYNC_OUT(); return; L_08ABFEB4: @@ -8746,7 +9502,17 @@ L_08ABFEFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFF10: aot_gpr_29 = (aot_gpr_29 + static_cast(-4128)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -8761,7 +9527,6 @@ L_08ABFF10: } L_08ABFF3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 34u, 0x08AC01F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8845,11 +9610,20 @@ L_08ABFFD4: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[8]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(12752))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ABFFEC: ctx.gpr[8] = (ctx.gpr[10] | 0u); ctx.gpr[10] = (0u | 65u); @@ -8860,7 +9634,6 @@ L_08ABFFEC: goto L_08ABFFFC; L_08ABFFFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 11u, 0x08AC0074u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0175.cpp b/profiles/vcs/generated/generated_unit_0175.cpp index 8e6d7ef..72be594 100644 --- a/profiles/vcs/generated/generated_unit_0175.cpp +++ b/profiles/vcs/generated/generated_unit_0175.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0175[4095] = { - 1, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5, 0, 6, 0, 0, 0, 7, 0, 8, 0, 0, 0, 9, 0, 10, 0, 0, 0, 11, 0, 0, - 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 20, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, - 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 42, 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 52, 0, 53, 0, 0, 54, 0, 55, 0, - 0, 56, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 61, 0, 62, 63, 0, 64, 0, 0, 65, 0, - 66, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 73, 0, 74, 75, 0, 76, 0, 0, - 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 83, 0, 0, 84, 0, 85, 0, 86, 87, 0, 88, - 0, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 97, - 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 0, 103, 0, 104, 0, 105, 0, - 0, 0, 106, 0, 0, 107, 0, 0, 0, 108, 0, 0, 109, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 111, 0, 0, 112, 0, 113, 114, - 0, 115, 0, 116, 117, 0, 118, 0, 0, 0, 119, 0, 0, 120, 0, 0, 0, 121, 0, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 124, 0, 0, 125, 0, 126, 127, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 132, 0, 0, - 0, 0, 133, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 0, 138, 0, 139, 0, 140, 0, 0, - 0, 141, 142, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, - 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, - 0, 154, 0, 0, 155, 0, 0, 156, 0, 157, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, - 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 165, 0, 0, 0, 166, 0, 0, 167, 0, 0, 168, - 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 0, 0, 0, - 0, 0, 0, 0, 175, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 0, 180, 0, 0, 181, 0, 182, 0, 183, - 0, 0, 184, 0, 0, 185, 0, 186, 187, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 190, 0, 0, 191, 0, 0, - 0, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 196, 0, 197, 0, 0, 198, 0, 0, 199, 0, 200, 201, 0, 0, 0, 0, - 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 204, 0, 205, 0, 206, 0, 0, 207, 0, 0, 0, 208, 0, 209, 0, 210, 0, - 0, 211, 0, 0, 212, 0, 0, 0, 213, 0, 214, 0, 0, 215, 0, 0, 0, 216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 0, 0, 221, 0, 222, - 0, 223, 0, 0, 224, 0, 225, 0, 0, 0, 226, 0, 227, 0, 228, 0, 0, 0, 229, 230, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, - 0, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 236, 0, 237, 0, 0, 0, 238, 239, 0, 0, 0, 0, 0, 240, 0, 0, 0, - 0, 0, 0, 0, 0, 241, 0, 0, 242, 0, 0, 243, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 0, 246, 0, 0, 247, 0, 248, 0, - 249, 0, 0, 250, 0, 0, 251, 0, 252, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 0, 257, 0, - 258, 0, 0, 259, 0, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, - 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, - 271, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 273, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 277, 0, 0, 0, 0, 0, - 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 280, 0, 281, 0, 0, 282, 0, 283, 0, 284, 0, 0, 0, 285, 0, 286, 0, - 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 291, 0, 292, 0, - 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 297, 0, 298, 0, 0, 299, 0, - 300, 0, 301, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 306, - 0, 0, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 317, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, 0, 0, 324, 0, 325, 0, 326, 0, 0, 0, 327, 0, 0, 0, 0, 0, 328, 0, 0, - 0, 0, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 331, 0, 0, 0, 0, 332, 0, 333, 0, 334, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, - 337, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 341, 0, 0, 342, 343, 0, 0, 0, 0, 0, 344, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 346, 347, 348, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 0, 353, 0, 354, 0, 355, 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 358, - 0, 0, 0, 0, 0, 359, 360, 361, 0, 362, 0, 363, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 366, 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 371, 0, 0, 372, 0, 0, - 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 376, 0, 0, 377, 378, 0, 0, 0, 0, 379, 0, 0, 0, - 380, 0, 381, 0, 382, 0, 0, 383, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 388, 0, 389, 0, - 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 395, - 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 0, 0, 0, 399, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 402, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, 407, 0, 0, 0, 0, 408, 0, 0, 0, 0, - 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 0, 414, 0, 0, 0, - 0, 0, 415, 0, 416, 0, 0, 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 419, 0, 420, 0, 0, 0, 0, 0, 0, - 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, - 0, 0, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 435, 0, 436, 0, 437, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 0, 0, - 0, 0, 444, 0, 0, 445, 0, 446, 447, 0, 448, 0, 449, 0, 0, 0, 450, 0, 451, 0, 452, 453, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 459, 0, 0, 0, 0, 460, 0, 461, 0, 462, 0, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 466, 0, 0, 467, 0, 468, 0, - 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 471, 0, 472, 0, 473, 0, 474, 0, 475, 476, 0, 477, 0, 478, 0, 0, 0, 0, - 479, 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 0, 482, 0, 483, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, - 487, 0, 488, 0, 489, 0, 490, 491, 0, 492, 0, 493, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 497, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 500, 0, 501, 0, 502, 503, 0, 0, 504, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 507, 0, 0, 0, 0, 508, 0, 0, 0, 0, - 0, 509, 0, 510, 511, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 516, - 0, 517, 0, 0, 518, 0, 519, 0, 0, 0, 520, 0, 0, 0, 521, 0, 522, 0, 0, 523, 0, 524, 0, 0, 0, 525, 0, 0, 0, 526, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, - 531, 0, 532, 0, 0, 533, 0, 0, 0, 534, 0, 535, 536, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, - 540, 541, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, - 546, 0, 0, 547, 0, 0, 0, 548, 0, 0, 549, 0, 0, 0, 550, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 557, 0, - 558, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 0, 563, - 0, 0, 564, 0, 0, 565, 0, 566, 0, 0, 0, 567, 0, 0, 568, 0, 569, 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 572, 0, 0, 0, - 0, 0, 0, 573, 0, 574, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 578, 579, 580, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 588, 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 0, 597, 0, - 0, 598, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 601, 0, 602, 0, 0, 0, 0, 0, 0, 603, 0, 0, - 604, 0, 605, 0, 0, 0, 0, 0, 0, 606, 0, 0, 607, 0, 608, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 611, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 616, 0, 617, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, 0, 621, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, - 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, - 0, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 637, 0, 0, - 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 640, 0, - 0, 641, 0, 642, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 648, - 0, 0, 0, 0, 649, 0, 0, 0, 650, 0, 651, 0, 0, 0, 652, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, 655, 0, 0, 656, 0, 657, 0, - 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, 660, 0, 661, 662, 0, 663, 0, 0, 0, 664, 0, 0, 665, 0, 0, 0, 0, 666, 0, 0, 0, 667, - 0, 668, 669, 0, 0, 0, 670, 0, 671, 0, 672, 0, 0, 673, 0, 0, 0, 674, 0, 675, 676, 0, 677, 678, 0, 679, 0, 680, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 683, 0, 684, 0, 0, 685, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 687, 0, 688, 0, 0, 689, 0, 0, 0, 690, 0, 691, 0, 692, 0, 0, 693, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 0, - 0, 0, 0, 696, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 0, 699, 700, 0, 701, 0, 0, 0, 702, 0, 703, 0, 0, 0, 704, 0, 705, 0, - 0, 0, 0, 0, 0, 706, 0, 707, 0, 708, 0, 0, 0, 709, 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, 713, 0, 0, 714, - 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, 716, 0, 717, 0, 718, 0, 719, 0, 0, 0, 0, 720, 0, 721, 0, 722, 0, 723, 0, - 0, 724, 0, 725, 0, 726, 0, 727, 728, 0, 729, 730, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 733, 0, 0, 734, 0, 735, - 736, 737, 0, 738, 0, 0, 739, 0, 0, 740, 0, 741, 0, 742, 0, 743, 0, 744, 0, 745, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, - 747, 0, 748, 0, 0, 749, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 751, 0, 752, 0, 753, 0, 754, 0, 755, 0, 756, 0, 757, 0, - 758, 0, 759, 0, 0, 760, 0, 761, 762, 0, 763, 0, 764, 0, 765, 0, 766, 0, 767, 0, 768, 0, 769, 0, 770, 0, 771, 0, 0, 0, 0, 772, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 774, 0, 0, 0, 775, 0, 0, 0, 0, 776, 0, 0, - 777, 0, 778, 0, 779, 0, 0, 780, 0, 781, 0, 0, 782, 0, 0, 783, 0, 784, 0, 785, 0, 0, 786, 0, 0, 0, 0, 0, 787, 0, 788, 0, - 789, 0, 790, 0, 791, 0, 792, 0, 793, 0, 0, 0, 0, 794, 0, 795, 0, 796, 0, 797, 0, 798, 0, 799, 0, 0, 800, 0, 0, 801, 0, 0, - 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 804, 0, 0, 0, 805, 0, 0, 806, 0, 807, 0, 808, 0, 809, 0, - 810, 0, 0, 811, 0, 812, 0, 813, 0, 814, 0, 0, 0, 815, 0, 816, 0, 817, 0, 0, 818, 0, 819, 0, 820, 0, 821, 0, 0, 822, 0, 0, - 0, 0, 823, 0, 824, 0, 825, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 0, 832, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, - 0, 0, 0, 0, 835, 0, 836, 0, 837, 0, 0, 838, 0, 839, 0, 0, 840, 0, 0, 841, 0, 842, 843, 0, 844, 0, 845, 0, 846, 0, 847, 0, - 848, 0, 849, 0, 850, 0, 851, 0, 852, 0, 853, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 860, 0, 861, 0, 0, 862, 0, 863, - 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 867, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 868, 0, 869, 0, 0, 0, 0, 870, 0, 0, 0, 0, 0, 0, 871, 872, - 873, 0, 874, 0, 875, 0, 876, 0, 877, 0, 0, 0, 0, 878, 0, 879, 0, 880, 0, 881, 0, 882, 0, 0, 883, 0, 0, 884, 0, 0, 885, 0, - 886, 0, 887, 0, 0, 0, 888, 0, 0, 0, 889, 0, 890, 891, 0, 892, 0, 0, 893, 0, 0, 0, 894, 0, 895, 896, 0, 0, 897, 0, 0, 898, - 0, 0, 899, 0, 900, 0, 901, 0, 902, 0, 0, 903, 0, 0, 904, 0, 905, 0, 0, 906, 0, 0, 907, 0, 0, 908, 0, 909, 910, 0, 0, 911, - 0, 0, 0, 912, 0, 913, 914, 0, 915, 0, 916, 0, 917, 0, 0, 918, 0, 0, 0, 919, 0, 920, 921, 0, 0, 922, 0, 923, 0, 0, 924, 0, - 925, 926, 0, 0, 927, 0, 0, 928, 0, 929, 0, 930, 0, 931, 0, 0, 932, 0, 0, 0, 933, 0, 934, 935, 0, 0, 936, 0, 0, 937, 0, 938, - 0, 939, 0, 940, 0, 0, 941, 0, 942, 0, 943, 0, 944, 0, 0, 945, 0, 0, 0, 946, 0, 947, 948, 0, 0, 949, 0, 0, 950, 0, 951, 0, - 952, 0, 953, 0, 0, 954, 0, 955, 956, 0, 0, 0, 957, 0, 0, 0, 958, 0, 959, 0, 960, 0, 0, 961, 0, 962, 963, 0, 0, 964, 0, 0, - 965, 0, 0, 0, 966, 0, 967, 968, 0, 0, 969, 0, 0, 970, 0, 971, 0, 972, 0, 973, 0, 974, 0, 0, 975, 0, 0, 0, 976, 0, 977, 978, - 0, 0, 979, 0, 0, 980, 0, 981, 0, 982, 0, 983, 0, 0, 984, 0, 0, 0, 985, 0, 986, 987, 0, 988, 0, 0, 989, 0, 0, 990, 0, 991, - 0, 992, 0, 0, 993, 0, 994, 0, 995, 0, 0, 996, 0, 997, 0, 998, 0, 999, 0, 0, 1000, 0, 0, 0, 1001, 0, 1002, 1003, 0, 1004, 0, 0, - 0, 0, 0, 0, 0, 1005, 0, 0, 0, 0, 0, 0, 0, 0, 1006, 0, 0, 1007, 0, 0, 1008, 0, 0, 0, 0, 1009, 0, 0, 1010, 0, 0, 1011, - 0, 0, 0, 1012, 0, 1013, 1014, 0, 1015, 0, 0, 1016, 0, 0, 1017, 0, 1018, 0, 1019, 0, 0, 1020, 0, 0, 1021, 0, 1022, 0, 0, 0, 0, 1023, - 0, 0, 1024, 0, 0, 1025, 0, 1026, 0, 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1028, 0, 1029, 1030, 0, 1031, 0, 0, 1032, 0, 1033, 1034, 0, - 1035, 0, 0, 1036, 0, 1037, 1038, 0, 1039, 0, 0, 1040, 0, 1041, 1042, 0, 1043, 0, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1045, 0, 0, 0, 1046, 0, 1047, 0, 0, 0, 0, 0, 0, 0, 1048, 0, 0, 0, 0, 1049, 0, 1050, 0, 1051, 0, 0, 0, 1052, 0, 0, - 1053, 0, 1054, 0, 1055, 0, 1056, 0, 1057, 0, 1058, 0, 1059, 0, 1060, 0, 0, 0, 1061, 0, 1062, 0, 1063, 0, 1064, 0, 1065, 0, 1066, 0, 1067, 0, - 1068, 0, 1069, 0, 1070, 0, 1071, 0, 1072, 0, 1073, 0, 0, 1074, 0, 1075, 0, 0, 0, 1076, 0, 0, 1077, 0, 0, 0, 0, 0, 0, 0, 1078, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0175[64] = { + 0x02602424228A28A3ull, 0x2488A41108111150ull, 0x4055290001204840ull, 0x4B52040652888840ull, + 0xB52041552D481055ull, 0x54A0408491010554ull, 0x0412245AD2041224ull, 0x2A09201422821069ull, + 0x0429204020848106ull, 0x9224208481004292ull, 0xA912049008524080ull, 0x0D254890248041A4ull, + 0xA2AA2512544A8802ull, 0x1062A248040C5452ull, 0x4900834952240920ull, 0x100880440820C149ull, + 0x5152900106109201ull, 0x4A40040554800808ull, 0x0109022088088405ull, 0x0409080081480210ull, + 0x062A1240208A8220ull, 0x0025C10041909201ull, 0x00020AE080435120ull, 0x10CA200225208C20ull, + 0x8108208855010295ull, 0x0845410440882208ull, 0x0282101410441208ull, 0x8000210220845042ull, + 0x1550055004000208ull, 0x00111000243515A4ull, 0x0AD54202528112A1ull, 0x12810AD542025281ull, + 0x086000000209AA40ull, 0x222944528840089Aull, 0x0A009A2501042080ull, 0x52A9448940120043ull, + 0x112148A490400821ull, 0x0141401002274928ull, 0x0002409000000000ull, 0x2052000A40522040ull, + 0x1480520014805205ull, 0x4220400024400200ull, 0x4022040220200000ull, 0x4800004022040220ull, + 0x524245109110820Aull, 0x0ADA25468848B442ull, 0x0452A25002254200ull, 0x922222A051458148ull, + 0xA4804DAA550AA010ull, 0x55541025040AAA4Bull, 0x21104000855555A5ull, 0x24AAA155504A9295ull, + 0x2552A2A955228040ull, 0x5569295040955554ull, 0x80400404A5555555ull, 0x492AA155C0850000ull, + 0x9A4949549344B445ull, 0xA4D12A934A689568ull, 0x269511A55268954Aull, 0xA4B44AA4D12AA4D1ull, + 0x921240202D12A952ull, 0x696802A485254968ull, 0x22A1014400816969ull, 0x4048A55555545555ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0175[64] = { + 1u, 19u, 35u, 48u, 66u, 89u, 106u, 124u, 141u, 154u, 169u, 184u, 202u, 223u, 241u, 258u, + 271u, 287u, 300u, 312u, 322u, 337u, 351u, 365u, 380u, 396u, 409u, 421u, 432u, 444u, 459u, 479u, + 498u, 509u, 527u, 540u, 558u, 573u, 588u, 592u, 604u, 618u, 626u, 633u, 641u, 658u, 681u, 696u, + 715u, 736u, 758u, 777u, 802u, 823u, 848u, 868u, 886u, 912u, 939u, 965u, 992u, 1012u, 1035u, 1053u, }; void recomp_unit_0175_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0175_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AC0000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0175[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0175[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0175[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AC0000; @@ -1250,7 +1157,6 @@ LOCAL_DISPATCH: } } L_08AC0000: - // nop goto L_08AC0004; L_08AC0004: ctx.gpr[8] = (ctx.gpr[10] | 0u); @@ -1262,7 +1168,6 @@ L_08AC0004: goto L_08AC0014; L_08AC0014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0074; } @@ -1278,7 +1183,6 @@ L_08AC001C: goto L_08AC002C; L_08AC002C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0074; } @@ -1294,7 +1198,6 @@ L_08AC0034: goto L_08AC0044; L_08AC0044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0074; } @@ -1310,7 +1213,6 @@ L_08AC004C: goto L_08AC005C; L_08AC005C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0074; } @@ -1366,7 +1268,6 @@ L_08AC00B4: ctx.gpr[7] = (ctx.gpr[7] >> 10u); ctx.gpr[7] = (ctx.gpr[7] < ctx.gpr[8] ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AC0088; } @@ -1378,7 +1279,6 @@ L_08AC00D4: L_08AC00D8: aot_gpr_6 = (aot_gpr_6 + ctx.gpr[11]); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0174_entry, 174u, 847u, 0x08ABFF78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1450,7 +1350,6 @@ L_08AC0180: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(36))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AC01CC; } @@ -1530,7 +1429,17 @@ L_08AC01F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0218: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2236u << 16u); @@ -1546,7 +1455,17 @@ L_08AC022C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2237u << 16u); @@ -1564,7 +1483,17 @@ L_08AC0254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0260: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1586,7 +1515,6 @@ L_08AC0260: L_08AC02A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC02C8; } @@ -1594,7 +1522,6 @@ L_08AC02A0: } L_08AC02AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC02D0; } @@ -1616,7 +1543,6 @@ L_08AC02C0: } L_08AC02C8: aot_gpr_31 = (0x08AC02D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC02D0u) goto L_08AC02D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC02D0: @@ -1632,7 +1558,6 @@ L_08AC02D8: aot_gpr_4 = (ctx.gpr[19] << (aot_gpr_4 & 31u)); aot_gpr_4 = (ctx.gpr[17] & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC032C; } @@ -1661,7 +1586,6 @@ L_08AC032C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC0378; } @@ -1671,7 +1595,6 @@ L_08AC033C: aot_gpr_5 = (ctx.gpr[19] << (aot_gpr_4 & 31u)); aot_gpr_5 = (ctx.gpr[17] & aot_gpr_5); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC0364; } @@ -1681,7 +1604,6 @@ L_08AC034C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AC033C; } @@ -1689,7 +1611,6 @@ L_08AC034C: } L_08AC035C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0378; } @@ -1733,14 +1654,23 @@ L_08AC0388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC03A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AC03C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC03C4u) goto L_08AC03C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC03C4: @@ -1762,7 +1692,6 @@ L_08AC03D0: } L_08AC03D8: aot_gpr_31 = (0x08AC03E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 406u, 0x08B65AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC03E0u) goto L_08AC03E0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC03E0: @@ -1786,7 +1715,6 @@ L_08AC03F8: goto L_08AC0400; L_08AC0400: aot_gpr_31 = (0x08AC0408u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 406u, 0x08B65AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0408u) goto L_08AC0408; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0408: @@ -1811,14 +1739,23 @@ L_08AC0418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AC044Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC044Cu) goto L_08AC044C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC044C: @@ -1840,7 +1777,6 @@ L_08AC0458: } L_08AC0460: aot_gpr_31 = (0x08AC0468u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 406u, 0x08B65AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0468u) goto L_08AC0468; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0468: @@ -1864,7 +1800,6 @@ L_08AC0480: goto L_08AC0488; L_08AC0488: aot_gpr_31 = (0x08AC0490u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 406u, 0x08B65AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0490u) goto L_08AC0490; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0490: @@ -1889,14 +1824,23 @@ L_08AC04A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC04B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AC04D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC04D4u) goto L_08AC04D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC04D4: @@ -1918,7 +1862,6 @@ L_08AC04E0: } L_08AC04E8: aot_gpr_31 = (0x08AC04F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 406u, 0x08B65AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC04F0u) goto L_08AC04F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC04F0: @@ -1942,7 +1885,6 @@ L_08AC0508: goto L_08AC0510; L_08AC0510: aot_gpr_31 = (0x08AC0518u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 406u, 0x08B65AB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0518u) goto L_08AC0518; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0518: @@ -1967,14 +1909,23 @@ L_08AC0528: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0540: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AC0560u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0560u) goto L_08AC0560; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0560: @@ -2020,7 +1971,17 @@ L_08AC059C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC05B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -2035,13 +1996,11 @@ L_08AC05B8: } L_08AC05D4: aot_gpr_31 = (0x08AC05DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC05DCu) goto L_08AC05DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC05DC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08AC05F0; } @@ -2049,7 +2008,6 @@ L_08AC05DC: } L_08AC05E8: aot_gpr_31 = (0x08AC05F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC05F0u) goto L_08AC05F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC05F0: @@ -2099,14 +2057,23 @@ L_08AC0630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0648: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AC0664u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0664: @@ -2118,7 +2085,6 @@ L_08AC0664: goto L_08AC0670; L_08AC0670: aot_gpr_31 = (0x08AC0678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0678u) goto L_08AC0678; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0678: @@ -2132,7 +2098,6 @@ L_08AC067C: goto L_08AC0684; L_08AC0684: aot_gpr_31 = (0x08AC068Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC068Cu) goto L_08AC068C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC068C: @@ -2185,14 +2150,23 @@ L_08AC06D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC06E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AC0700u); - // nop ctx.pc = 0x08B73224u; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0700: @@ -2204,7 +2178,6 @@ L_08AC0700: goto L_08AC070C; L_08AC070C: aot_gpr_31 = (0x08AC0714u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0714u) goto L_08AC0714; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0714: @@ -2228,7 +2201,17 @@ L_08AC0730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0744: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2243,7 +2226,6 @@ L_08AC0744: } L_08AC075C: aot_gpr_31 = (0x08AC0764u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC0764u) goto L_08AC0764; AOT_REGCACHE_SYNC_OUT(); return; L_08AC0764: @@ -2262,14 +2244,34 @@ L_08AC0774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0788: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2340,7 +2342,17 @@ L_08AC0808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0820: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2366,7 +2378,17 @@ L_08AC0848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC085C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2389,7 +2411,17 @@ L_08AC0874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0898: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2428,7 +2460,17 @@ L_08AC08D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC08E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2467,7 +2509,17 @@ L_08AC0924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0938: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2483,7 +2535,6 @@ L_08AC0960: aot_gpr_4 = (20224u << 16u); ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (2237u << 16u); if (branch_taken) { @@ -2519,7 +2570,6 @@ L_08AC099C: L_08AC09B4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; goto L_08AC09D4; @@ -2567,7 +2617,17 @@ L_08AC09FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0A1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2606,7 +2666,17 @@ L_08AC0A58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0A6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2637,7 +2707,6 @@ L_08AC0AA8: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_08AC0AD0; @@ -2712,7 +2781,17 @@ L_08AC0B20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0B38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2743,7 +2822,6 @@ L_08AC0B74: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_08AC0B9C; @@ -2818,7 +2896,17 @@ L_08AC0BEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0C04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2846,7 +2934,6 @@ L_08AC0C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC0C44: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AC0C70; } @@ -2867,7 +2954,6 @@ L_08AC0C58: AOT_REGCACHE_SYNC_OUT(); return; L_08AC0C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0CC4; } @@ -2881,7 +2967,6 @@ L_08AC0C70: L_08AC0C78: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC0CA8; } @@ -2902,7 +2987,6 @@ L_08AC0C90: AOT_REGCACHE_SYNC_OUT(); return; L_08AC0CA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0CC4; } @@ -2936,7 +3020,6 @@ L_08AC0CCC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC0CD4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AC0CFC; } @@ -2956,7 +3039,6 @@ L_08AC0CE4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC0CF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0D48; } @@ -2970,7 +3052,6 @@ L_08AC0CFC: L_08AC0D04: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC0D30; } @@ -2990,7 +3071,6 @@ L_08AC0D18: AOT_REGCACHE_SYNC_OUT(); return; L_08AC0D28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC0D48; } @@ -3025,7 +3105,17 @@ L_08AC0D4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0D68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3094,7 +3184,17 @@ L_08AC0DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0DF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3125,7 +3225,6 @@ L_08AC0E2C: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_08AC0E54; @@ -3200,7 +3299,17 @@ L_08AC0EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0EBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3281,7 +3390,17 @@ L_08AC0F3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0F54: aot_gpr_4 = (0u | 1u); aot_gpr_5 = (2237u << 16u); @@ -3292,7 +3411,17 @@ L_08AC0F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0F6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3311,7 +3440,17 @@ L_08AC0F88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0F98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3332,7 +3471,17 @@ L_08AC0FBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC0FCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3353,7 +3502,17 @@ L_08AC0FF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1000: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3414,7 +3573,17 @@ L_08AC1068: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1080: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3456,7 +3625,6 @@ L_08AC10D0: goto L_08AC10D8; L_08AC10D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC10F8; } @@ -3471,7 +3639,6 @@ L_08AC10E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC10F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC110C; } @@ -3500,7 +3667,17 @@ L_08AC110C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC112C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3559,7 +3736,17 @@ L_08AC1188: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC11A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3619,7 +3806,17 @@ L_08AC1208: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3636,7 +3833,17 @@ L_08AC123C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC124C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3656,7 +3863,17 @@ L_08AC126C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC127C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3674,7 +3891,17 @@ L_08AC1294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC12A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3700,7 +3927,17 @@ L_08AC12CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC12E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3762,7 +3999,17 @@ L_08AC1360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC137C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3804,7 +4051,17 @@ L_08AC13CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC13E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3827,14 +4084,23 @@ L_08AC1414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1424: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-7080), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC1444; } @@ -3842,7 +4108,6 @@ L_08AC1424: } L_08AC143C: aot_gpr_31 = (0x08AC1444u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1444u) goto L_08AC1444; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1444: @@ -3858,7 +4123,17 @@ L_08AC144C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC145C: aot_gpr_4 = (0u | 1u); aot_gpr_5 = (2237u << 16u); @@ -3869,7 +4144,17 @@ L_08AC145C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1474: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3939,7 +4224,17 @@ L_08AC14E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1500: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3998,7 +4293,17 @@ L_08AC1560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1578: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -4034,7 +4339,6 @@ L_08AC15BC: goto L_08AC15C0; L_08AC15C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC1638; } @@ -4062,7 +4366,6 @@ L_08AC15D4: ctx.gpr[17] = (aot_gpr_4 << 16u); ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08AC1640; } @@ -4112,7 +4415,17 @@ L_08AC1644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1658: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -4148,7 +4461,6 @@ L_08AC1698: goto L_08AC169C; L_08AC169C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AC16AC; } @@ -4213,7 +4525,17 @@ L_08AC172C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC173C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4226,7 +4548,6 @@ L_08AC173C: L_08AC1754: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC1768; } @@ -4250,7 +4571,17 @@ L_08AC1774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1784: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4273,7 +4604,6 @@ L_08AC17B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC17C4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AC17DC; } @@ -4303,7 +4633,6 @@ L_08AC17F0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC181C; } @@ -4311,7 +4640,6 @@ L_08AC17F0: } L_08AC1800: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AC1810; } @@ -4349,7 +4677,17 @@ L_08AC1824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1840: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4371,7 +4709,6 @@ L_08AC1860: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC1878; } @@ -4391,7 +4728,17 @@ L_08AC1878: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC188C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4409,7 +4756,17 @@ L_08AC189C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC18B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4438,7 +4795,17 @@ L_08AC18E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC18FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4456,7 +4823,17 @@ L_08AC190C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1924: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4474,7 +4851,17 @@ L_08AC1934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC194C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4493,7 +4880,17 @@ L_08AC195C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1978: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4511,7 +4908,17 @@ L_08AC1988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC19A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4526,7 +4933,6 @@ L_08AC19A0: } L_08AC19B8: aot_gpr_31 = (0x08AC19C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC19C0u) goto L_08AC19C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC19C0: @@ -4550,7 +4956,17 @@ L_08AC19D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC19EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -4589,7 +5005,17 @@ L_08AC1A30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1A48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4607,7 +5033,17 @@ L_08AC1A58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1A70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4622,7 +5058,6 @@ L_08AC1A70: } L_08AC1A88: aot_gpr_31 = (0x08AC1A90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1A90u) goto L_08AC1A90; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1A90: @@ -4645,7 +5080,17 @@ L_08AC1AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1AC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4660,7 +5105,6 @@ L_08AC1AC4: } L_08AC1ADC: aot_gpr_31 = (0x08AC1AE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1AE4u) goto L_08AC1AE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1AE4: @@ -4683,7 +5127,17 @@ L_08AC1B04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1B18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4698,7 +5152,6 @@ L_08AC1B18: } L_08AC1B30: aot_gpr_31 = (0x08AC1B38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1B38u) goto L_08AC1B38; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1B38: @@ -4717,7 +5170,17 @@ L_08AC1B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4735,7 +5198,17 @@ L_08AC1B74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1B84: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -4794,7 +5267,17 @@ L_08AC1C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1C24: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -4828,7 +5311,6 @@ L_08AC1C90: goto L_08AC1C98; L_08AC1C98: aot_gpr_31 = (0x08AC1CA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1CA0u) goto L_08AC1CA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1CA0: @@ -4845,7 +5327,6 @@ L_08AC1CA8: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC1D74; } @@ -4861,7 +5342,6 @@ L_08AC1CD0: } L_08AC1CD8: aot_gpr_31 = (0x08AC1CE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1CE0u) goto L_08AC1CE0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1CE0: @@ -4879,7 +5359,6 @@ L_08AC1CF0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC1D30; } @@ -4888,7 +5367,6 @@ L_08AC1CF0: L_08AC1D08: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC1D20; } @@ -4896,7 +5374,6 @@ L_08AC1D08: } L_08AC1D14: aot_gpr_31 = (0x08AC1D1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1D1Cu) goto L_08AC1D1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1D1C: @@ -4909,7 +5386,6 @@ L_08AC1D20: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1D28: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC1D68; } @@ -4930,7 +5406,6 @@ L_08AC1D40: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1D48: aot_gpr_31 = (0x08AC1D50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1D50u) goto L_08AC1D50; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1D50: @@ -5003,13 +5478,22 @@ L_08AC1DD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1E00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19664))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC1E24; } @@ -5022,7 +5506,6 @@ L_08AC1E14: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1E1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC1E30; } @@ -5042,7 +5525,17 @@ L_08AC1E30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1E40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5054,7 +5547,6 @@ L_08AC1E40: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1E5C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC1EC8; } @@ -5068,7 +5560,6 @@ L_08AC1E64: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1E70: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC1EC0; } @@ -5096,7 +5587,6 @@ L_08AC1EA4: ctx.gpr[16] = (std::bit_cast(aot_fpr_13)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC1ED0; } @@ -5128,7 +5618,6 @@ L_08AC1EC8: } L_08AC1ED0: aot_gpr_31 = (0x08AC1ED8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1ED8u) goto L_08AC1ED8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1ED8: @@ -5155,7 +5644,17 @@ L_08AC1EEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5167,7 +5666,6 @@ L_08AC1F00: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1F1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC1F88; } @@ -5181,7 +5679,6 @@ L_08AC1F24: AOT_REGCACHE_SYNC_OUT(); return; L_08AC1F30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC1F80; } @@ -5209,7 +5706,6 @@ L_08AC1F64: ctx.gpr[16] = (std::bit_cast(aot_fpr_13)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC1F90; } @@ -5241,7 +5737,6 @@ L_08AC1F88: } L_08AC1F90: aot_gpr_31 = (0x08AC1F98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC1F98u) goto L_08AC1F98; AOT_REGCACHE_SYNC_OUT(); return; L_08AC1F98: @@ -5268,7 +5763,17 @@ L_08AC1FAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC1FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5308,7 +5813,6 @@ L_08AC1FF0: L_08AC2018: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC2034; } @@ -5332,7 +5836,6 @@ L_08AC202C: } L_08AC2034: aot_gpr_31 = (0x08AC203Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC203Cu) goto L_08AC203C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC203C: @@ -5341,7 +5844,6 @@ L_08AC203C: L_08AC2040: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC20D4; } @@ -5402,7 +5904,17 @@ L_08AC20D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC20EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[16]); @@ -5415,7 +5927,6 @@ L_08AC20EC: goto L_08AC2104; L_08AC2104: aot_gpr_31 = (0x08AC210Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC210Cu) goto L_08AC210C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC210C: @@ -5424,7 +5935,6 @@ L_08AC210C: L_08AC2110: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC2158; } @@ -5460,12 +5970,21 @@ L_08AC2158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC216C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC217Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC217Cu) goto L_08AC217C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC217C: @@ -5476,7 +5995,6 @@ L_08AC217C: L_08AC2184: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC2198; } @@ -5495,12 +6013,21 @@ L_08AC2198: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC21A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC21B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC21B8u) goto L_08AC21B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC21B8: @@ -5511,7 +6038,6 @@ L_08AC21B8: L_08AC21C0: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC21D4; } @@ -5530,7 +6056,17 @@ L_08AC21D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC21E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5552,7 +6088,17 @@ L_08AC21F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC221C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5565,7 +6111,6 @@ L_08AC221C: L_08AC2234: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_12)) && ctx.fpr[0] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[16] = (0u | 1u); goto L_08AC2248; @@ -5581,7 +6126,17 @@ L_08AC2248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2260: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5594,7 +6149,6 @@ L_08AC2260: AOT_REGCACHE_SYNC_OUT(); return; L_08AC2280: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AC22EC; } @@ -5616,7 +6170,6 @@ L_08AC2294: goto L_08AC22A4; L_08AC22A4: aot_gpr_31 = (0x08AC22ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC22ACu) goto L_08AC22AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC22AC: @@ -5625,7 +6178,6 @@ L_08AC22AC: L_08AC22B0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC22E4; } @@ -5675,7 +6227,17 @@ L_08AC2304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2318: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5732,7 +6294,6 @@ L_08AC238C: L_08AC239C: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AC23C0; } @@ -5762,7 +6323,6 @@ L_08AC23C0: goto L_08AC23CC; L_08AC23CC: aot_gpr_31 = (0x08AC23D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC23D4u) goto L_08AC23D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC23D4: @@ -5783,7 +6343,6 @@ L_08AC23E4: goto L_08AC23F0; L_08AC23F0: aot_gpr_31 = (0x08AC23F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC23F8u) goto L_08AC23F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC23F8: @@ -5811,7 +6370,17 @@ L_08AC2414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC242C: aot_gpr_4 = (0u | 59u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10292), static_cast(aot_gpr_4)); @@ -5827,7 +6396,17 @@ L_08AC242C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2458: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -5849,7 +6428,6 @@ L_08AC2470: L_08AC247C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC249C; } @@ -5863,7 +6441,6 @@ L_08AC2488: AOT_REGCACHE_SYNC_OUT(); return; L_08AC2494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC24E0; } @@ -5909,7 +6486,17 @@ L_08AC24E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC24F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5926,7 +6513,6 @@ L_08AC250C: L_08AC2514: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1096))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC2548; } @@ -5941,7 +6527,6 @@ L_08AC2520: L_08AC252C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AC2544; } @@ -6016,14 +6601,33 @@ L_08AC25C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC25D8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC25E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); @@ -6078,7 +6682,17 @@ L_08AC2690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC269C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); @@ -6096,7 +6710,17 @@ L_08AC26B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC26C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -6362,12 +6986,21 @@ L_08AC2924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2958: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC2968u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 45u, 0x08AF447Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC2968u) goto L_08AC2968; AOT_REGCACHE_SYNC_OUT(); return; L_08AC2968: @@ -6377,7 +7010,17 @@ L_08AC2968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2974: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_gpr_6); @@ -6427,7 +7070,17 @@ L_08AC29E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC29F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(aot_gpr_6); @@ -6577,7 +7230,17 @@ L_08AC2B74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -6706,7 +7369,6 @@ L_08AC2CA8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AC2CF0; } @@ -6715,7 +7377,6 @@ L_08AC2CA8: L_08AC2CB8: ctx.gpr[7] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AC2CE4; } @@ -6726,7 +7387,6 @@ L_08AC2CC4: aot_mem.aot_direct_store32(ctx.gpr[7] + static_cast(0), aot_gpr_6); ctx.gpr[7] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AC2CE4; } @@ -6789,7 +7449,6 @@ L_08AC2D30: goto L_08AC2D34; L_08AC2D34: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC2D88; } @@ -6879,7 +7538,6 @@ L_08AC2DB4: } L_08AC2DC4: aot_gpr_31 = (0x08AC2DCCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC2DCCu) goto L_08AC2DCC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC2DCC: @@ -6887,7 +7545,6 @@ L_08AC2DCC: goto L_08AC2DD0; L_08AC2DD0: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AC2D98; } @@ -6898,7 +7555,6 @@ L_08AC2DD8: goto L_08AC2DDC; L_08AC2DDC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC2DEC; } @@ -6906,7 +7562,6 @@ L_08AC2DDC: } L_08AC2DE4: aot_gpr_31 = (0x08AC2DECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC2DECu) goto L_08AC2DEC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC2DEC: @@ -6930,23 +7585,30 @@ L_08AC2DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2E24: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_31 = (0x08AC2E38u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[16], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC2E38u) goto L_08AC2E38; AOT_REGCACHE_SYNC_OUT(); return; L_08AC2E38: aot_gpr_31 = (0x08AC2E40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 89u, 0x08B0C658u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC2E40u) goto L_08AC2E40; AOT_REGCACHE_SYNC_OUT(); return; L_08AC2E40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC2F60; } @@ -7057,7 +7719,6 @@ L_08AC2F0C: goto L_08AC2F18; L_08AC2F18: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC2F40; } @@ -7080,7 +7741,6 @@ L_08AC2F3C: goto L_08AC2F40; L_08AC2F40: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AC2F60; } @@ -7109,7 +7769,17 @@ L_08AC2F60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2F70: aot_gpr_6 = (0u | 0u); aot_gpr_5 = (0u | 0u); @@ -7129,23 +7799,40 @@ L_08AC2F78: } L_08AC2F94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2F9C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2FA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC2FB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 349u, 0x08871308u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC2FB4u) goto L_08AC2FB4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC2FB4: @@ -7156,12 +7843,21 @@ L_08AC2FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC2FC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC2FD4u); - // nop goto L_08AC2F9C; L_08AC2FD4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); @@ -7207,17 +7903,14 @@ L_08AC3010: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3034: aot_gpr_31 = (0x08AC303Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 624u, 0x088B74ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC303Cu) goto L_08AC303C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC303C: aot_gpr_31 = (0x08AC3044u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0080_entry, 80u, 101u, 0x08944D9Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3044u) goto L_08AC3044; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3044: aot_gpr_31 = (0x08AC304Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 549u, 0x08AAEAA0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC304Cu) goto L_08AC304C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC304C: @@ -7230,12 +7923,10 @@ L_08AC304C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3060: aot_gpr_31 = (0x08AC3068u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 315u, 0x089352E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3068u) goto L_08AC3068; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3068: aot_gpr_31 = (0x08AC3070u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 645u, 0x08A536F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3070u) goto L_08AC3070; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3070: @@ -7246,7 +7937,6 @@ L_08AC3070: L_08AC3078: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC3094; } @@ -7270,7 +7960,6 @@ L_08AC308C: } L_08AC3094: aot_gpr_31 = (0x08AC309Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC309Cu) goto L_08AC309C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC309C: @@ -7291,7 +7980,17 @@ L_08AC30AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC30B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7315,7 +8014,6 @@ L_08AC30DC: L_08AC30E8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AC3100; } @@ -7364,7 +8062,6 @@ L_08AC312C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3134: aot_gpr_31 = (0x08AC313Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 113u, 0x08A11120u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC313Cu) goto L_08AC313C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC313C: @@ -7391,7 +8088,17 @@ L_08AC314C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC3168: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7402,7 +8109,6 @@ L_08AC3168: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3180: aot_gpr_31 = (0x08AC3188u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 86u, 0x0895CC70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3188u) goto L_08AC3188; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3188: @@ -7426,7 +8132,6 @@ L_08AC31B0: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3194; } @@ -7434,12 +8139,10 @@ L_08AC31B0: } L_08AC31C8: aot_gpr_31 = (0x08AC31D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 627u, 0x0896EACCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC31D0u) goto L_08AC31D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC31D0: aot_gpr_31 = (0x08AC31D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 266u, 0x0896CEFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC31D8u) goto L_08AC31D8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC31D8: @@ -7449,33 +8152,27 @@ L_08AC31D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC31E0: aot_gpr_31 = (0x08AC31E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0024_entry, 24u, 150u, 0x08864D6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC31E8u) goto L_08AC31E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC31E8: aot_gpr_31 = (0x08AC31F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 469u, 0x08896478u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC31F0u) goto L_08AC31F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC31F0: aot_gpr_31 = (0x08AC31F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 484u, 0x08966FCCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC31F8u) goto L_08AC31F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC31F8: aot_gpr_31 = (0x08AC3200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 126u, 0x08A11200u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3200u) goto L_08AC3200; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3200: aot_gpr_31 = (0x08AC3208u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 526u, 0x08AD3110u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3208u) goto L_08AC3208; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3208: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3220; } @@ -7483,7 +8180,6 @@ L_08AC3208: } L_08AC3214: aot_gpr_31 = (0x08AC321Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC321Cu) goto L_08AC321C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC321C: @@ -7491,27 +8187,22 @@ L_08AC321C: goto L_08AC3220; L_08AC3220: aot_gpr_31 = (0x08AC3228u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0002_entry, 2u, 566u, 0x0880EA7Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3228u) goto L_08AC3228; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3228: aot_gpr_31 = (0x08AC3230u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 311u, 0x08941F28u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3230u) goto L_08AC3230; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3230: aot_gpr_31 = (0x08AC3238u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0206_entry, 206u, 526u, 0x08B3E27Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3238u) goto L_08AC3238; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3238: aot_gpr_31 = (0x08AC3240u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 392u, 0x088B9D2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3240u) goto L_08AC3240; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3240: aot_gpr_31 = (0x08AC3248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 597u, 0x088ABD90u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3248u) goto L_08AC3248; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3248: @@ -7546,7 +8237,17 @@ L_08AC3268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC327C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); @@ -7600,7 +8301,6 @@ L_08AC32F4: } L_08AC3300: aot_gpr_31 = (0x08AC3308u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 301u, 0x08AB5460u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3308u) goto L_08AC3308; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3308: @@ -7618,13 +8318,11 @@ L_08AC3310: } L_08AC331C: aot_gpr_31 = (0x08AC3324u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 219u, 0x08AB5110u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3324u) goto L_08AC3324; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3324: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC334C; } @@ -7638,12 +8336,10 @@ L_08AC3330: AOT_REGCACHE_SYNC_OUT(); return; L_08AC333C: aot_gpr_31 = (0x08AC3344u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0126_entry, 126u, 374u, 0x089FD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3344u) goto L_08AC3344; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3344: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC33DC; } @@ -7652,7 +8348,6 @@ L_08AC3344: L_08AC334C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10293))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC33A0; } @@ -7669,16 +8364,13 @@ L_08AC3358: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3370: aot_gpr_31 = (0x08AC3378u); - // nop goto L_08AC3168; L_08AC3378: aot_gpr_31 = (0x08AC3380u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3380u) goto L_08AC3380; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3380: aot_gpr_31 = (0x08AC3388u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 113u, 0x08A11120u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3388u) goto L_08AC3388; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3388: @@ -7692,7 +8384,6 @@ L_08AC3390: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3398: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC33DC; } @@ -7708,16 +8399,13 @@ L_08AC33A0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC33B4: aot_gpr_31 = (0x08AC33BCu); - // nop goto L_08AC3168; L_08AC33BC: aot_gpr_31 = (0x08AC33C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC33C4u) goto L_08AC33C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC33C4: aot_gpr_31 = (0x08AC33CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 113u, 0x08A11120u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC33CCu) goto L_08AC33CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC33CC: @@ -7757,7 +8445,17 @@ L_08AC33F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC3418: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -7789,28 +8487,23 @@ L_08AC3454: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3460: aot_gpr_31 = (0x08AC3468u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0075_entry, 75u, 589u, 0x08932C94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3468u) goto L_08AC3468; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3468: aot_gpr_31 = (0x08AC3470u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 469u, 0x08AFB424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3470u) goto L_08AC3470; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3470: aot_gpr_31 = (0x08AC3478u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0083_entry, 83u, 799u, 0x08953898u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3478u) goto L_08AC3478; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3478: aot_gpr_31 = (0x08AC3480u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 136u, 0x08AB8970u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3480u) goto L_08AC3480; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3480: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5888))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3494; } @@ -7818,7 +8511,6 @@ L_08AC3480: } L_08AC348C: aot_gpr_31 = (0x08AC3494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3494u) goto L_08AC3494; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3494: @@ -7828,14 +8520,12 @@ L_08AC3494: AOT_REGCACHE_SYNC_OUT(); return; L_08AC349C: aot_gpr_31 = (0x08AC34A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 34u, 0x08A94214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC34A4u) goto L_08AC34A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC34A4: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8420), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC34BC; } @@ -7843,7 +8533,6 @@ L_08AC34A4: } L_08AC34B4: aot_gpr_31 = (0x08AC34BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC34BCu) goto L_08AC34BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC34BC: @@ -7854,7 +8543,6 @@ L_08AC34BC: L_08AC34C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC34D8; } @@ -7862,7 +8550,6 @@ L_08AC34C4: } L_08AC34D0: aot_gpr_31 = (0x08AC34D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC34D8u) goto L_08AC34D8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC34D8: @@ -7872,7 +8559,6 @@ L_08AC34D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC34E0: aot_gpr_31 = (0x08AC34E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 293u, 0x08B41148u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC34E8u) goto L_08AC34E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC34E8: @@ -7894,7 +8580,6 @@ L_08AC34F4: } L_08AC3508: aot_gpr_31 = (0x08AC3510u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3510u) goto L_08AC3510; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3510: @@ -7929,12 +8614,10 @@ L_08AC3538: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3540: aot_gpr_31 = (0x08AC3548u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 121u, 0x08A40AFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3548u) goto L_08AC3548; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3548: aot_gpr_31 = (0x08AC3550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 741u, 0x089C7248u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3550u) goto L_08AC3550; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3550: @@ -7958,7 +8641,6 @@ L_08AC3578: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC355C; } @@ -7971,13 +8653,11 @@ L_08AC3590: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3598: aot_gpr_31 = (0x08AC35A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 503u, 0x0882766Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC35A0u) goto L_08AC35A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC35A0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC35B4; } @@ -7985,7 +8665,6 @@ L_08AC35A0: } L_08AC35AC: aot_gpr_31 = (0x08AC35B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 358u, 0x08991788u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC35B4u) goto L_08AC35B4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC35B4: @@ -7997,7 +8676,6 @@ L_08AC35B4: L_08AC35C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC35D8; } @@ -8013,42 +8691,34 @@ L_08AC35D4: goto L_08AC35D8; L_08AC35D8: aot_gpr_31 = (0x08AC35E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0160_entry, 160u, 495u, 0x08A87458u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC35E0u) goto L_08AC35E0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC35E0: aot_gpr_31 = (0x08AC35E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 113u, 0x08A11120u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC35E8u) goto L_08AC35E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC35E8: aot_gpr_31 = (0x08AC35F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 319u, 0x08AED434u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC35F0u) goto L_08AC35F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC35F0: aot_gpr_31 = (0x08AC35F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 287u, 0x089EDEE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC35F8u) goto L_08AC35F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC35F8: aot_gpr_31 = (0x08AC3600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 64u, 0x0895CA94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3600u) goto L_08AC3600; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3600: aot_gpr_31 = (0x08AC3608u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 318u, 0x08A35524u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3608u) goto L_08AC3608; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3608: aot_gpr_31 = (0x08AC3610u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 518u, 0x088F27E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3610u) goto L_08AC3610; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3610: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AC3620; } @@ -8056,47 +8726,38 @@ L_08AC3610: } L_08AC3618: aot_gpr_31 = (0x08AC3620u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 258u, 0x0896CE30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3620u) goto L_08AC3620; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3620: aot_gpr_31 = (0x08AC3628u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 582u, 0x088ABC44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3628u) goto L_08AC3628; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3628: aot_gpr_31 = (0x08AC3630u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0078_entry, 78u, 815u, 0x0893F9B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3630u) goto L_08AC3630; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3630: aot_gpr_31 = (0x08AC3638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0160_entry, 160u, 308u, 0x08A8606Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3638u) goto L_08AC3638; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3638: aot_gpr_31 = (0x08AC3640u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 159u, 0x0895D300u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3640u) goto L_08AC3640; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3640: aot_gpr_31 = (0x08AC3648u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0062_entry, 62u, 718u, 0x088FF0A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3648u) goto L_08AC3648; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3648: aot_gpr_31 = (0x08AC3650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 858u, 0x0896FD74u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3650u) goto L_08AC3650; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3650: aot_gpr_31 = (0x08AC3658u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0126_entry, 126u, 374u, 0x089FD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3658u) goto L_08AC3658; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3658: aot_gpr_31 = (0x08AC3660u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0171_entry, 171u, 50u, 0x08AB043Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3660u) goto L_08AC3660; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3660: @@ -8136,7 +8797,17 @@ L_08AC3688: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC36A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_5 = (aot_gpr_4 ^ 4u); @@ -8153,7 +8824,17 @@ L_08AC36A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC36D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_5 = (aot_gpr_4 ^ 2u); @@ -8167,7 +8848,17 @@ L_08AC36D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC36FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -8193,7 +8884,6 @@ L_08AC36FC: } L_08AC3740: aot_gpr_31 = (0x08AC3748u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3748u) goto L_08AC3748; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3748: @@ -8228,7 +8918,6 @@ L_08AC377C: goto L_08AC3780; L_08AC3780: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC3798; } @@ -8241,7 +8930,6 @@ L_08AC3788: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC37A0; } @@ -8257,7 +8945,6 @@ L_08AC37A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC37BC; } @@ -8270,17 +8957,14 @@ L_08AC37B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC37BC: aot_gpr_31 = (0x08AC37C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 315u, 0x089352E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC37C4u) goto L_08AC37C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC37C4: aot_gpr_31 = (0x08AC37CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC37CCu) goto L_08AC37CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC37CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC37E0; } @@ -8380,7 +9064,6 @@ L_08AC3864: L_08AC3870: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC38A0; } @@ -8389,7 +9072,6 @@ L_08AC3870: L_08AC387C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3890; } @@ -8397,7 +9079,6 @@ L_08AC387C: } L_08AC3888: aot_gpr_31 = (0x08AC3890u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3890u) goto L_08AC3890; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3890: @@ -8407,7 +9088,6 @@ L_08AC3890: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3898: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC3928; } @@ -8478,7 +9158,6 @@ L_08AC38FC: goto L_08AC390C; L_08AC390C: aot_gpr_31 = (0x08AC3914u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3914u) goto L_08AC3914; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3914: @@ -8491,7 +9170,6 @@ L_08AC3918: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3920: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC3C20; } @@ -8499,7 +9177,6 @@ L_08AC3920: } L_08AC3928: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AC396C; } @@ -8537,7 +9214,6 @@ L_08AC3958: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC3C20; } @@ -8552,7 +9228,6 @@ L_08AC396C: goto L_08AC3978; L_08AC3978: aot_gpr_31 = (0x08AC3980u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3980u) goto L_08AC3980; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3980: @@ -8561,7 +9236,6 @@ L_08AC3980: L_08AC3984: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3A0C; } @@ -8570,7 +9244,6 @@ L_08AC3984: L_08AC3990: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC39A4; } @@ -8578,7 +9251,6 @@ L_08AC3990: } L_08AC399C: aot_gpr_31 = (0x08AC39A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC39A4u) goto L_08AC39A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC39A4: @@ -8588,7 +9260,6 @@ L_08AC39A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC39AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC3A0C; } @@ -8627,7 +9298,6 @@ L_08AC39DC: L_08AC39E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC39FC; } @@ -8635,7 +9305,6 @@ L_08AC39E8: } L_08AC39F4: aot_gpr_31 = (0x08AC39FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC39FCu) goto L_08AC39FC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC39FC: @@ -8645,7 +9314,6 @@ L_08AC39FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3A04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC3C20; } @@ -8654,7 +9322,6 @@ L_08AC3A04: L_08AC3A0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3A20; } @@ -8662,7 +9329,6 @@ L_08AC3A0C: } L_08AC3A18: aot_gpr_31 = (0x08AC3A20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3A20u) goto L_08AC3A20; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3A20: @@ -8672,7 +9338,6 @@ L_08AC3A20: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3A28: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC3A88; } @@ -8711,7 +9376,6 @@ L_08AC3A58: L_08AC3A64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3A78; } @@ -8719,7 +9383,6 @@ L_08AC3A64: } L_08AC3A70: aot_gpr_31 = (0x08AC3A78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3A78u) goto L_08AC3A78; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3A78: @@ -8729,7 +9392,6 @@ L_08AC3A78: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3A80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC3C20; } @@ -8744,7 +9406,6 @@ L_08AC3A88: goto L_08AC3A94; L_08AC3A94: aot_gpr_31 = (0x08AC3A9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3A9Cu) goto L_08AC3A9C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3A9C: @@ -8776,7 +9437,6 @@ L_08AC3AC0: goto L_08AC3AC8; L_08AC3AC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC3B4C; } @@ -8791,7 +9451,6 @@ L_08AC3AD0: goto L_08AC3ADC; L_08AC3ADC: aot_gpr_31 = (0x08AC3AE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3AE4u) goto L_08AC3AE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3AE4: @@ -8800,7 +9459,6 @@ L_08AC3AE4: L_08AC3AE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC3B4C; } @@ -8839,7 +9497,6 @@ L_08AC3B1C: L_08AC3B28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3B3C; } @@ -8847,7 +9504,6 @@ L_08AC3B28: } L_08AC3B34: aot_gpr_31 = (0x08AC3B3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3B3Cu) goto L_08AC3B3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3B3C: @@ -8857,7 +9513,6 @@ L_08AC3B3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3B44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC3C20; } @@ -8865,7 +9520,6 @@ L_08AC3B44: } L_08AC3B4C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AC3BAC; } @@ -8904,7 +9558,6 @@ L_08AC3B7C: L_08AC3B88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3B9C; } @@ -8912,7 +9565,6 @@ L_08AC3B88: } L_08AC3B94: aot_gpr_31 = (0x08AC3B9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3B9Cu) goto L_08AC3B9C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3B9C: @@ -8922,7 +9574,6 @@ L_08AC3B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC3C20; } @@ -8985,7 +9636,6 @@ L_08AC3BFC: L_08AC3C04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3C18; } @@ -8993,7 +9643,6 @@ L_08AC3C04: } L_08AC3C10: aot_gpr_31 = (0x08AC3C18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3C18u) goto L_08AC3C18; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3C18: @@ -9004,7 +9653,6 @@ L_08AC3C18: L_08AC3C20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3C34; } @@ -9012,7 +9660,6 @@ L_08AC3C20: } L_08AC3C2C: aot_gpr_31 = (0x08AC3C34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3C34u) goto L_08AC3C34; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3C34: @@ -9022,7 +9669,6 @@ L_08AC3C34: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3C3C: aot_gpr_31 = (0x08AC3C44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 693u, 0x08936810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3C44u) goto L_08AC3C44; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3C44: @@ -9069,7 +9715,17 @@ L_08AC3C74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC3C94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -9209,7 +9865,6 @@ L_08AC3D88: } L_08AC3D94: aot_gpr_31 = (0x08AC3D9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 358u, 0x08991788u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3D9Cu) goto L_08AC3D9C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3D9C: @@ -9232,7 +9887,6 @@ L_08AC3DA4: goto L_08AC3DCC; L_08AC3DCC: aot_gpr_31 = (0x08AC3DD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3DD4u) goto L_08AC3DD4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3DD4: @@ -9246,7 +9900,6 @@ L_08AC3DD8: L_08AC3DE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3DF8; } @@ -9254,7 +9907,6 @@ L_08AC3DE0: } L_08AC3DEC: aot_gpr_31 = (0x08AC3DF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3DF4u) goto L_08AC3DF4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3DF4: @@ -9268,7 +9920,6 @@ L_08AC3DF8: L_08AC3E00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3E18; } @@ -9276,7 +9927,6 @@ L_08AC3E00: } L_08AC3E0C: aot_gpr_31 = (0x08AC3E14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3E14u) goto L_08AC3E14; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3E14: @@ -9290,7 +9940,6 @@ L_08AC3E18: L_08AC3E20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC3E38; } @@ -9298,7 +9947,6 @@ L_08AC3E20: } L_08AC3E2C: aot_gpr_31 = (0x08AC3E34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3E34u) goto L_08AC3E34; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3E34: @@ -9323,7 +9971,17 @@ L_08AC3E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC3E5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9343,7 +10001,6 @@ L_08AC3E88: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3E98: aot_gpr_31 = (0x08AC3EA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 28u, 0x08990190u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3EA0u) goto L_08AC3EA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3EA0: @@ -9367,12 +10024,10 @@ L_08AC3EC0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3ED4: aot_gpr_31 = (0x08AC3EDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 455u, 0x08966DC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3EDCu) goto L_08AC3EDC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3EDC: aot_gpr_31 = (0x08AC3EE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 373u, 0x08A92D14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3EE4u) goto L_08AC3EE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3EE4: @@ -9390,37 +10045,30 @@ L_08AC3EF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F00: aot_gpr_31 = (0x08AC3F08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0075_entry, 75u, 589u, 0x08932C94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F08u) goto L_08AC3F08; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F08: aot_gpr_31 = (0x08AC3F10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 159u, 0x0895D300u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F10u) goto L_08AC3F10; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F10: aot_gpr_31 = (0x08AC3F18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 469u, 0x08AFB424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F18u) goto L_08AC3F18; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F18: aot_gpr_31 = (0x08AC3F20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 736u, 0x089737F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F20u) goto L_08AC3F20; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F20: aot_gpr_31 = (0x08AC3F28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0206_entry, 206u, 526u, 0x08B3E27Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F28u) goto L_08AC3F28; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F28: aot_gpr_31 = (0x08AC3F30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0083_entry, 83u, 799u, 0x08953898u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F30u) goto L_08AC3F30; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F30: aot_gpr_31 = (0x08AC3F38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 136u, 0x08AB8970u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F38u) goto L_08AC3F38; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F38: @@ -9435,7 +10083,6 @@ L_08AC3F38: } L_08AC3F48: aot_gpr_31 = (0x08AC3F50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 748u, 0x08B671D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F50u) goto L_08AC3F50; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F50: @@ -9445,52 +10092,42 @@ L_08AC3F50: AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F58: aot_gpr_31 = (0x08AC3F60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 476u, 0x08ABAA8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F60u) goto L_08AC3F60; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F60: aot_gpr_31 = (0x08AC3F68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 153u, 0x08990B50u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F68u) goto L_08AC3F68; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F68: aot_gpr_31 = (0x08AC3F70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 34u, 0x08A94214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F70u) goto L_08AC3F70; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F70: aot_gpr_31 = (0x08AC3F78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 223u, 0x088919FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F78u) goto L_08AC3F78; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F78: aot_gpr_31 = (0x08AC3F80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 299u, 0x0898124Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F80u) goto L_08AC3F80; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F80: aot_gpr_31 = (0x08AC3F88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0062_entry, 62u, 775u, 0x088FF808u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F88u) goto L_08AC3F88; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F88: aot_gpr_31 = (0x08AC3F90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 286u, 0x08B41098u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F90u) goto L_08AC3F90; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F90: aot_gpr_31 = (0x08AC3F98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 518u, 0x088F27E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3F98u) goto L_08AC3F98; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3F98: aot_gpr_31 = (0x08AC3FA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 319u, 0x08AED434u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3FA0u) goto L_08AC3FA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3FA0: aot_gpr_31 = (0x08AC3FA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0045_entry, 45u, 394u, 0x088B9D3Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC3FA8u) goto L_08AC3FA8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC3FA8: diff --git a/profiles/vcs/generated/generated_unit_0176.cpp b/profiles/vcs/generated/generated_unit_0176.cpp index a6ba6a3..5b572c4 100644 --- a/profiles/vcs/generated/generated_unit_0176.cpp +++ b/profiles/vcs/generated/generated_unit_0176.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0176[4094] = { - 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 0, 0, 0, 11, 0, 0, 12, 0, 13, 14, 0, 15, - 0, 0, 16, 0, 17, 18, 0, 19, 0, 20, 0, 0, 0, 0, 0, 21, 0, 22, 0, 0, 0, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, - 28, 0, 29, 0, 0, 30, 0, 0, 0, 0, 31, 0, 32, 0, 33, 0, 34, 0, 0, 35, 0, 36, 0, 37, 0, 38, 0, 0, 0, 0, 39, 0, - 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 51, 0, - 52, 0, 53, 0, 54, 0, 55, 0, 0, 0, 0, 56, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 0, - 62, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 67, 0, 68, 0, 0, 69, 0, 0, 70, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 74, 0, 75, 0, 0, 0, 76, 0, - 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 80, 81, 0, 82, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 0, 86, 0, 87, 0, 88, - 0, 0, 89, 0, 90, 91, 0, 0, 0, 0, 92, 0, 0, 0, 93, 0, 94, 95, 0, 0, 96, 0, 0, 97, 0, 98, 0, 99, 100, 0, 101, 0, - 102, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 0, 110, 0, 0, 111, 0, 0, 112, 0, 113, 114, 0, 0, 0, 0, 0, 115, 116, 0, 0, 117, 0, 0, 0, 118, 0, - 0, 119, 0, 120, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 125, 0, 126, 0, 127, - 0, 128, 0, 0, 129, 0, 130, 131, 0, 0, 0, 132, 0, 0, 0, 133, 0, 134, 0, 0, 135, 0, 0, 136, 0, 0, 137, 0, 138, 0, 0, 139, - 0, 140, 0, 0, 0, 0, 0, 0, 141, 0, 142, 0, 143, 0, 0, 144, 0, 145, 0, 146, 0, 0, 147, 0, 148, 149, 0, 0, 0, 0, 0, 150, - 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 155, 0, - 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 161, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 165, 0, 166, 0, 0, 167, 0, - 0, 0, 0, 168, 0, 169, 0, 170, 0, 0, 171, 0, 172, 0, 0, 173, 0, 174, 0, 0, 0, 0, 175, 0, 0, 176, 0, 177, 178, 0, 0, 0, - 179, 0, 0, 0, 180, 0, 181, 0, 182, 0, 0, 183, 0, 0, 184, 0, 185, 0, 0, 186, 0, 187, 0, 188, 0, 189, 0, 0, 190, 0, 191, 192, - 0, 0, 0, 193, 0, 0, 0, 194, 0, 195, 0, 196, 0, 0, 197, 0, 0, 0, 0, 0, 198, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, - 203, 0, 204, 0, 0, 205, 0, 206, 207, 0, 0, 0, 208, 0, 0, 0, 209, 0, 210, 0, 211, 0, 0, 212, 0, 0, 213, 0, 214, 0, 0, 215, - 0, 216, 0, 217, 218, 0, 0, 0, 219, 0, 0, 0, 220, 0, 221, 0, 222, 0, 0, 223, 0, 0, 0, 0, 224, 0, 0, 225, 0, 226, 0, 0, - 227, 0, 228, 0, 229, 230, 0, 0, 0, 231, 0, 0, 0, 232, 0, 233, 0, 234, 0, 0, 235, 0, 236, 0, 0, 237, 0, 238, 0, 0, 239, 0, - 240, 0, 241, 242, 0, 0, 0, 243, 0, 0, 0, 244, 0, 245, 0, 246, 0, 0, 247, 0, 0, 0, 0, 248, 0, 249, 0, 0, 250, 0, 251, 0, - 0, 252, 0, 253, 0, 254, 255, 0, 0, 0, 256, 0, 0, 0, 257, 0, 258, 0, 259, 0, 0, 260, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, - 263, 0, 0, 264, 0, 265, 0, 0, 266, 0, 267, 0, 268, 269, 0, 0, 0, 270, 0, 0, 0, 271, 0, 272, 0, 273, 0, 0, 274, 0, 0, 0, - 0, 275, 0, 276, 0, 0, 277, 0, 278, 0, 0, 279, 0, 280, 281, 0, 0, 0, 282, 0, 0, 0, 283, 0, 284, 0, 285, 0, 0, 286, 0, 0, - 287, 0, 288, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 294, 0, - 0, 295, 0, 0, 0, 296, 0, 297, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 0, 0, 303, 0, 304, 0, 305, - 0, 306, 0, 307, 0, 0, 308, 0, 309, 0, 0, 310, 0, 0, 311, 0, 0, 312, 0, 313, 0, 0, 314, 0, 315, 0, 0, 316, 0, 317, 0, 318, - 0, 319, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 0, 0, 327, 0, 0, 328, 0, 0, 329, 0, 0, 0, 330, 0, 331, 0, - 0, 332, 0, 0, 0, 333, 0, 334, 0, 0, 335, 0, 336, 337, 0, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, 0, 0, 0, 344, - 0, 345, 0, 346, 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 353, 0, 354, 0, 0, 0, 0, 355, 0, 0, 356, 0, 357, 0, - 358, 0, 0, 359, 0, 360, 0, 361, 0, 362, 0, 363, 0, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 0, 0, - 374, 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 396, - 0, 0, 0, 0, 397, 0, 398, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 0, - 0, 0, 0, 0, 402, 0, 403, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, 409, 0, 410, - 0, 0, 411, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, 0, 0, 0, 421, 422, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 0, 425, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 427, 0, 0, 428, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 434, 0, - 0, 0, 0, 0, 435, 0, 436, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 442, 0, 443, - 0, 0, 444, 0, 445, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 449, 0, 450, 0, 0, 451, 0, - 452, 0, 0, 0, 0, 0, 453, 454, 0, 0, 0, 0, 455, 0, 456, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 0, 0, 460, 0, - 461, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 465, 0, 0, 466, 0, - 0, 0, 0, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 0, 470, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, - 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 480, 0, 481, 0, 482, 483, 0, 484, 0, 485, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, - 0, 0, 0, 0, 0, 491, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 496, 0, 0, 0, 0, - 0, 497, 0, 0, 0, 0, 0, 0, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 503, 0, 504, 0, 0, 505, 0, 506, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 509, 0, 510, 0, 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 524, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 526, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 529, 0, - 530, 0, 0, 0, 0, 531, 0, 532, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, - 0, 538, 0, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 541, 0, 542, 0, 0, 543, 0, 544, 0, 0, 0, 0, 545, 0, 546, 0, 0, 0, 0, - 547, 0, 0, 0, 548, 549, 0, 0, 0, 550, 0, 551, 0, 0, 0, 0, 552, 553, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 558, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 560, 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, - 0, 0, 0, 0, 0, 564, 0, 0, 0, 565, 0, 566, 0, 567, 0, 0, 568, 0, 569, 570, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, - 572, 0, 0, 573, 0, 574, 575, 0, 0, 576, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 580, 0, 581, 0, 582, - 583, 0, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 588, 0, 589, 0, 0, 0, 590, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 598, 0, 599, - 600, 601, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 605, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 0, 0, 0, 608, 0, 0, 609, 0, 0, 610, 0, 611, 0, 612, 0, 613, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 616, 0, 0, 0, 617, 0, 0, 618, 0, 619, 0, 0, 0, 620, 0, 621, 0, - 0, 622, 0, 623, 0, 0, 0, 624, 0, 0, 625, 0, 0, 626, 0, 627, 0, 628, 0, 0, 0, 0, 629, 0, 0, 0, 630, 0, 0, 0, 631, 0, - 0, 632, 0, 0, 633, 0, 634, 0, 0, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 0, 0, 639, 0, 640, 0, 0, 641, 0, 0, 642, 0, 0, - 0, 0, 0, 0, 0, 643, 0, 644, 0, 0, 0, 645, 0, 646, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 649, 650, 0, 0, 0, 651, 0, 652, - 0, 0, 0, 653, 0, 0, 0, 654, 0, 0, 0, 0, 0, 655, 0, 0, 656, 0, 657, 0, 0, 658, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, - 660, 0, 661, 0, 0, 0, 662, 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 667, 0, 0, 0, 668, 0, 669, 0, 0, 0, 670, 0, - 0, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 0, 0, 676, 0, 677, 0, 0, 678, 0, - 679, 680, 0, 681, 0, 682, 0, 683, 0, 0, 0, 684, 0, 0, 685, 0, 0, 686, 0, 687, 0, 688, 0, 0, 0, 689, 0, 0, 0, 690, 0, 0, - 0, 691, 0, 692, 0, 693, 0, 0, 0, 694, 0, 0, 695, 0, 0, 696, 0, 697, 0, 698, 0, 0, 0, 699, 0, 700, 0, 0, 701, 0, 702, 0, - 0, 703, 0, 0, 704, 0, 0, 0, 705, 0, 706, 0, 0, 707, 0, 708, 0, 0, 0, 709, 0, 0, 710, 0, 0, 711, 0, 712, 0, 713, 0, 0, - 0, 714, 0, 0, 715, 0, 716, 0, 0, 717, 0, 718, 0, 0, 719, 0, 0, 0, 720, 0, 0, 721, 0, 0, 722, 0, 723, 0, 724, 0, 0, 725, - 0, 726, 0, 0, 0, 727, 0, 728, 0, 729, 0, 0, 0, 730, 0, 0, 731, 0, 0, 732, 0, 733, 0, 734, 0, 0, 0, 735, 0, 0, 736, 0, - 0, 737, 0, 738, 0, 739, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 0, 742, 0, 743, 0, 0, 744, 0, 0, 0, 0, 745, 0, 746, 0, 0, - 0, 747, 0, 0, 0, 748, 0, 0, 749, 750, 0, 0, 0, 751, 0, 0, 0, 0, 0, 752, 753, 0, 754, 0, 755, 0, 0, 0, 756, 0, 0, 757, - 0, 0, 758, 0, 759, 0, 760, 0, 0, 761, 0, 762, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, 0, 766, 0, 0, 0, 767, 0, 768, 0, 0, - 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 771, 0, 0, 772, 0, 0, 773, 0, 774, 0, 775, 0, 0, 776, 0, 777, 0, - 0, 0, 778, 0, 779, 0, 0, 0, 780, 0, 781, 0, 0, 0, 782, 0, 783, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 785, 0, - 0, 0, 786, 0, 0, 787, 0, 0, 788, 0, 789, 0, 790, 0, 0, 0, 0, 0, 791, 0, 792, 0, 0, 793, 0, 794, 0, 0, 795, 796, 0, 0, - 797, 0, 798, 0, 0, 799, 0, 800, 0, 0, 801, 802, 0, 803, 0, 0, 0, 804, 0, 0, 805, 0, 0, 806, 0, 807, 0, 808, 0, 0, 0, 0, - 809, 0, 0, 810, 0, 0, 811, 0, 812, 0, 813, 0, 0, 0, 814, 0, 0, 815, 0, 816, 0, 0, 817, 0, 818, 819, 0, 0, 0, 820, 0, 0, - 821, 0, 0, 822, 0, 823, 0, 824, 0, 0, 825, 0, 0, 826, 0, 827, 828, 0, 0, 829, 0, 0, 830, 0, 831, 832, 833, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 837, 0, 838, 0, 0, 0, 839, 0, 840, 0, 0, 841, 0, 0, 842, 0, 0, 843, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 846, - 0, 0, 0, 847, 0, 0, 0, 0, 848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 849, 0, 0, 0, 0, 0, 850, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 851, 0, 0, 852, 0, 0, 853, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 856, 0, - 0, 0, 0, 0, 857, 0, 0, 0, 0, 858, 859, 860, 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 862, 0, 0, 0, 0, 0, 0, 0, 863, 0, - 0, 864, 0, 0, 0, 0, 0, 865, 866, 0, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 868, 0, 0, 869, 0, 0, 870, 0, - 0, 0, 0, 871, 0, 872, 0, 873, 874, 0, 0, 0, 0, 0, 0, 875, 0, 876, 0, 0, 0, 0, 0, 0, 0, 877, 0, 0, 878, 0, 0, 0, - 0, 0, 879, 880, 0, 0, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 882, 0, 0, 883, 0, 0, 884, 0, 0, 0, 885, 0, 886, - 0, 887, 888, 0, 0, 0, 0, 0, 0, 889, 0, 890, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 892, 0, 0, 0, 0, 0, 893, 894, 0, 0, - 0, 0, 0, 895, 0, 0, 0, 0, 0, 896, 0, 897, 0, 898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, 0, 0, 0, 0, 0, 900, 0, 0, - 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 902, 0, 0, 0, 0, 0, 903, 0, 904, 0, 905, 0, 0, 0, 0, 906, 0, 907, 0, 908, 0, 0, - 0, 0, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 911, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 912, 0, 0, 913, 0, 0, 0, 0, 914, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 916, 0, 0, 0, 0, 0, 0, 917, 0, - 0, 0, 0, 0, 918, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 920, 0, 921, 0, 922, 0, 923, 0, 0, 0, 0, 0, 0, 924, 0, 925, 0, - 0, 0, 0, 0, 0, 0, 0, 926, 0, 0, 0, 0, 927, 0, 0, 0, 928, 0, 0, 0, 0, 0, 0, 929, 0, 930, 0, 931, 0, 0, 0, 932, - 0, 0, 0, 933, 0, 934, 0, 935, 0, 0, 936, 0, 0, 0, 0, 937, 0, 0, 0, 0, 938, 0, 0, 0, 0, 939, 0, 0, 0, 940, 0, 0, - 0, 0, 0, 0, 0, 941, 0, 0, 0, 942, 0, 943, 0, 944, 0, 945, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, - 0, 948, 0, 0, 949, 0, 0, 0, 950, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, 0, 953, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 955, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 956, 0, 957, 0, 958, 0, 959, 0, 960, 0, 961, 0, 962, 0, 963, 0, 964, 0, 965, 0, - 966, 0, 967, 0, 0, 0, 968, 0, 0, 0, 969, 0, 970, 0, 0, 0, 0, 0, 0, 971, 0, 972, 0, 973, 0, 0, 0, 974, 0, 0, 975, 976, - 0, 977, 0, 978, 0, 979, 0, 0, 0, 0, 0, 0, 0, 0, 980, 0, 0, 0, 981, 0, 982, 0, 983, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 984, 0, 0, 985, 0, 0, 986, 0, 987, 0, 988, 0, 989, 0, 0, 990, 0, 991, 0, 992, 0, 993, 0, 0, 0, 994, - 0, 995, 0, 996, 0, 997, 0, 998, 0, 0, 999, 0, 0, 0, 0, 0, 0, 1000, 0, 1001, 0, 1002, 0, 0, 1003, 0, 1004, 1005, 0, 1006, 0, 0, - 0, 1007, 0, 1008, 0, 0, 0, 0, 0, 0, 0, 1009, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 0, 0, 1011, 0, 1012, 0, 1013, 0, - 1014, 0, 1015, 0, 1016, 0, 1017, 0, 0, 0, 0, 0, 1018, 1019, 0, 0, 0, 0, 0, 0, 1020, 0, 1021, 0, 1022, 0, 0, 0, 0, 0, 1023, 0, - 1024, 0, 0, 1025, 0, 0, 1026, 0, 0, 1027, 0, 0, 0, 0, 1028, 0, 0, 0, 1029, 0, 0, 1030, 0, 0, 1031, 0, 0, 1032, 0, 0, 1033, 0, - 0, 0, 0, 0, 0, 1034, 0, 0, 0, 0, 1035, 0, 1036, 1037, 0, 0, 0, 1038, 0, 0, 0, 1039, 0, 1040, 0, 1041, 0, 0, 0, 0, 0, 1042, - 0, 0, 0, 1043, 0, 1044, 0, 1045, 0, 0, 0, 1046, 0, 0, 1047, 0, 1048, 0, 1049, 0, 0, 1050, 0, 1051, 0, 0, 1052, 0, 0, 0, 0, 1053, - 0, 0, 0, 1054, 0, 0, 1055, 0, 0, 1056, 0, 0, 1057, 0, 1058, 0, 1059, 0, 1060, 0, 1061, 0, 0, 1062, 0, 1063, 0, 1064, 0, 1065, 0, 0, - 0, 0, 0, 1066, 1067, 0, 1068, 0, 0, 1069, 0, 0, 1070, 0, 0, 1071, 0, 1072, 0, 0, 0, 0, 0, 1073, 0, 1074, 1075, 0, 1076, 0, 0, 1077, - 0, 1078, 0, 1079, 0, 1080, 0, 1081, 0, 1082, 1083, 0, 1084, 0, 1085, 0, 0, 0, 0, 1086, 0, 0, 1087, 1088, 0, 1089, 0, 0, 0, 0, 0, 1090, - 0, 0, 1091, 0, 0, 0, 0, 1092, 0, 0, 1093, 0, 0, 1094, 0, 1095, 0, 1096, 0, 1097, 0, 1098, 0, 0, 0, 1099, 0, 0, 1100, 1101, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0176[64] = { + 0x554282B4B4855555ull, 0x4105555542A95425ull, 0x1252214141414855ull, 0xA924B44145480040ull, + 0x101200215A934434ull, 0xA824801A44C1A4B8ull, 0x834A9502949288D2ull, 0x0010200852000042ull, + 0x1A4294A84A88D200ull, 0x52904A88D2A94951ull, 0x2909511A949511A5ull, 0x5284A88D4A52A235ull, + 0x12A235291425446Aull, 0x508008552544694Aull, 0xA94A494AA85444A2ull, 0x855534A25124AAAAull, + 0x80554AA95215554Aull, 0x008041110A080200ull, 0x4008010000080820ull, 0x2008020040080100ull, + 0x4040015082504010ull, 0x0A110034A88480D0ull, 0x1014488021430A20ull, 0xA88480D040400100ull, + 0x428850C14A110034ull, 0x0420C2A048900101ull, 0x042B548108001010ull, 0x0A41006042002080ull, + 0x050454100296AA02ull, 0x4080110000022800ull, 0x50021800A0404000ull, 0x0A14A442910014A1ull, + 0x6042000004030A31ull, 0x010D2A20100A2100ull, 0x00014109AA404269ull, 0xA48014000050088Aull, + 0x5524280008408013ull, 0x4442A48A51488402ull, 0xA32228A024A29452ull, 0x4519114501252088ull, + 0x222A48AB4A244104ull, 0x2A48A512528A922Aull, 0x48A922A295244A52ull, 0x91582322284A222Aull, + 0x52A4880828A28A54ull, 0x3294152440414514ull, 0x234A45490A922CA5ull, 0x002401000749A4A9ull, + 0x0820010888892514ull, 0x40500E1042010920ull, 0x120281A849004182ull, 0x30480A06A248020Cull, + 0x2A15040820802A08ull, 0x4081109002008040ull, 0x8A811080502A8110ull, 0x1002AA20221084A8ull, + 0x0800040004201112ull, 0xC8A8144555555000ull, 0x8AA552400054402Aull, 0x5480080A2D2A04AAull, + 0x4924424941503055ull, 0x84A548A882A23420ull, 0x968292582A955248ull, 0x322AA48482C856AAull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0176[64] = { + 1u, 28u, 52u, 71u, 89u, 107u, 128u, 151u, 159u, 179u, 203u, 227u, 252u, 275u, 295u, 319u, + 345u, 370u, 379u, 385u, 391u, 402u, 418u, 432u, 444u, 461u, 474u, 487u, 497u, 514u, 521u, 530u, + 547u, 559u, 572u, 588u, 600u, 614u, 632u, 653u, 671u, 691u, 714u, 737u, 758u, 778u, 797u, 821u, + 837u, 851u, 864u, 879u, 895u, 909u, 918u, 933u, 948u, 956u, 977u, 995u, 1014u, 1034u, 1054u, 1078u, }; void recomp_unit_0176_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0176_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AC4000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0176[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0176[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0176[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AC4000; @@ -1274,12 +1181,10 @@ LOCAL_DISPATCH: } L_08AC4000: aot_gpr_31 = (0x08AC4008u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 536u, 0x08AD31CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4008u) goto L_08AC4008; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4008: aot_gpr_31 = (0x08AC4010u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 528u, 0x08AD312Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4010u) goto L_08AC4010; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4010: @@ -1294,17 +1199,14 @@ L_08AC4018: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4020: aot_gpr_31 = (0x08AC4028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 144u, 0x08AB4B00u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4028u) goto L_08AC4028; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4028: aot_gpr_31 = (0x08AC4030u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 969u, 0x0897FE60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4030u) goto L_08AC4030; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4030: aot_gpr_31 = (0x08AC4038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 532u, 0x08AD317Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4038u) goto L_08AC4038; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4038: @@ -1314,7 +1216,6 @@ L_08AC4038: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4040: aot_gpr_31 = (0x08AC4048u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0157_entry, 157u, 335u, 0x08A79BACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4048u) goto L_08AC4048; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4048: @@ -1328,7 +1229,6 @@ L_08AC4048: L_08AC405C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4074; } @@ -1336,7 +1236,6 @@ L_08AC405C: } L_08AC4068: aot_gpr_31 = (0x08AC4070u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4070u) goto L_08AC4070; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4070: @@ -1344,13 +1243,11 @@ L_08AC4070: goto L_08AC4074; L_08AC4074: aot_gpr_31 = (0x08AC407Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0002_entry, 2u, 284u, 0x0880CF70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC407Cu) goto L_08AC407C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC407C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4094; } @@ -1358,7 +1255,6 @@ L_08AC407C: } L_08AC4088: aot_gpr_31 = (0x08AC4090u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4090u) goto L_08AC4090; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4090: @@ -1366,12 +1262,10 @@ L_08AC4090: goto L_08AC4094; L_08AC4094: aot_gpr_31 = (0x08AC409Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0003_entry, 3u, 34u, 0x088101B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC409Cu) goto L_08AC409C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC409C: aot_gpr_31 = (0x08AC40A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 121u, 0x08A40AFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC40A4u) goto L_08AC40A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC40A4: @@ -1385,7 +1279,6 @@ L_08AC40A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC40BC: aot_gpr_31 = (0x08AC40C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 607u, 0x08B22EB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC40C4u) goto L_08AC40C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC40C4: @@ -1398,7 +1291,6 @@ L_08AC40C4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC40D8: aot_gpr_31 = (0x08AC40E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 741u, 0x089C7248u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC40E0u) goto L_08AC40E0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC40E0: @@ -1408,22 +1300,18 @@ L_08AC40E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC40E8: aot_gpr_31 = (0x08AC40F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0132_entry, 132u, 595u, 0x08A17928u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC40F0u) goto L_08AC40F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC40F0: aot_gpr_31 = (0x08AC40F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 2u, 0x08B20004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC40F8u) goto L_08AC40F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC40F8: aot_gpr_31 = (0x08AC4100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 558u, 0x089CF18Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4100u) goto L_08AC4100; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4100: aot_gpr_31 = (0x08AC4108u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 503u, 0x0882766Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4108u) goto L_08AC4108; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4108: @@ -1447,18 +1335,15 @@ L_08AC4128: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4130: aot_gpr_31 = (0x08AC4138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 358u, 0x08991788u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4138u) goto L_08AC4138; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4138: aot_gpr_31 = (0x08AC4140u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 258u, 0x0896CE30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4140u) goto L_08AC4140; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4140: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC415C; } @@ -1475,7 +1360,6 @@ L_08AC4154: goto L_08AC415C; L_08AC415C: aot_gpr_31 = (0x08AC4164u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0160_entry, 160u, 495u, 0x08A87458u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4164u) goto L_08AC4164; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4164: @@ -1488,52 +1372,42 @@ L_08AC4164: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4178: aot_gpr_31 = (0x08AC4180u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 287u, 0x089EDEE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4180u) goto L_08AC4180; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4180: aot_gpr_31 = (0x08AC4188u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 858u, 0x0896FD74u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4188u) goto L_08AC4188; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4188: aot_gpr_31 = (0x08AC4190u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 64u, 0x0895CA94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4190u) goto L_08AC4190; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4190: aot_gpr_31 = (0x08AC4198u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 318u, 0x08A35524u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4198u) goto L_08AC4198; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4198: aot_gpr_31 = (0x08AC41A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 47u, 0x08A906D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC41A0u) goto L_08AC41A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC41A0: aot_gpr_31 = (0x08AC41A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 235u, 0x0888CCD4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC41A8u) goto L_08AC41A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC41A8: aot_gpr_31 = (0x08AC41B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 582u, 0x088ABC44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC41B0u) goto L_08AC41B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC41B0: aot_gpr_31 = (0x08AC41B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0078_entry, 78u, 815u, 0x0893F9B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC41B8u) goto L_08AC41B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC41B8: aot_gpr_31 = (0x08AC41C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0160_entry, 160u, 308u, 0x08A8606Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC41C0u) goto L_08AC41C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC41C0: aot_gpr_31 = (0x08AC41C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 528u, 0x0886A6B4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC41C8u) goto L_08AC41C8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC41C8: @@ -1556,17 +1430,14 @@ L_08AC41E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC41F8: aot_gpr_31 = (0x08AC4200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0126_entry, 126u, 374u, 0x089FD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4200u) goto L_08AC4200; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4200: aot_gpr_31 = (0x08AC4208u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 905u, 0x0897F7FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4208u) goto L_08AC4208; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4208: aot_gpr_31 = (0x08AC4210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 155u, 0x08990B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4210u) goto L_08AC4210; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4210: @@ -1585,7 +1456,6 @@ L_08AC4218: L_08AC422C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC42A0; } @@ -1593,7 +1463,6 @@ L_08AC422C: } L_08AC4238: aot_gpr_31 = (0x08AC4240u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 615u, 0x088634DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4240u) goto L_08AC4240; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4240: @@ -1607,7 +1476,6 @@ L_08AC4240: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4258: aot_gpr_31 = (0x08AC4260u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 356u, 0x088697ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4260u) goto L_08AC4260; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4260: @@ -1693,7 +1561,17 @@ L_08AC42F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC4318: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), aot_gpr_16); @@ -1713,7 +1591,6 @@ L_08AC4318: L_08AC434C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4380; } @@ -1721,12 +1598,10 @@ L_08AC434C: } L_08AC4358: aot_gpr_31 = (0x08AC4360u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 615u, 0x088634DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4360u) goto L_08AC4360; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4360: aot_gpr_31 = (0x08AC4368u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 356u, 0x088697ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4368u) goto L_08AC4368; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4368: @@ -1747,7 +1622,6 @@ L_08AC4380: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(26341), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC43B0; } @@ -1770,13 +1644,11 @@ L_08AC43B0: goto L_08AC43B4; L_08AC43B4: aot_gpr_31 = (0x08AC43BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 829u, 0x0898B448u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC43BCu) goto L_08AC43BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC43BC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(300))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AC43E0; } @@ -1785,7 +1657,6 @@ L_08AC43BC: L_08AC43C8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(301))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC43E0; } @@ -1800,7 +1671,6 @@ L_08AC43D4: L_08AC43E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC43F4; } @@ -1808,7 +1678,6 @@ L_08AC43E0: } L_08AC43EC: aot_gpr_31 = (0x08AC43F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC43F4u) goto L_08AC43F4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC43F4: @@ -1825,7 +1694,6 @@ L_08AC43FC: goto L_08AC4408; L_08AC4408: aot_gpr_31 = (0x08AC4410u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4410u) goto L_08AC4410; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4410: @@ -1852,7 +1720,6 @@ L_08AC4428: } L_08AC4438: aot_gpr_31 = (0x08AC4440u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0172_entry, 172u, 212u, 0x08AB50BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4440u) goto L_08AC4440; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4440: @@ -1861,7 +1728,6 @@ L_08AC4440: L_08AC4444: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4464; } @@ -1888,7 +1754,6 @@ L_08AC446C: goto L_08AC4470; L_08AC4470: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC44C4; } @@ -1924,7 +1789,6 @@ L_08AC4494: L_08AC44C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4D90; } @@ -1965,7 +1829,6 @@ L_08AC4510: goto L_08AC4514; L_08AC4514: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC455C; } @@ -1974,7 +1837,6 @@ L_08AC4514: L_08AC451C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC455C; } @@ -1989,7 +1851,6 @@ L_08AC4528: goto L_08AC4534; L_08AC4534: aot_gpr_31 = (0x08AC453Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC453Cu) goto L_08AC453C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC453C: @@ -2001,7 +1862,6 @@ L_08AC4540: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC455C; } @@ -2013,7 +1873,6 @@ L_08AC4558: L_08AC455C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC45C8; } @@ -2023,7 +1882,6 @@ L_08AC4568: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC45C8; } @@ -2038,7 +1896,6 @@ L_08AC4578: goto L_08AC4584; L_08AC4584: aot_gpr_31 = (0x08AC458Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC458Cu) goto L_08AC458C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC458C: @@ -2055,7 +1912,6 @@ L_08AC4590: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC45C8; } @@ -2073,7 +1929,6 @@ L_08AC45BC: L_08AC45C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4604; } @@ -2085,7 +1940,6 @@ L_08AC45D4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4604; } @@ -2098,7 +1952,6 @@ L_08AC45EC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC45F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC4604; } @@ -2117,7 +1970,6 @@ L_08AC4604: goto L_08AC4610; L_08AC4610: aot_gpr_31 = (0x08AC4618u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4618u) goto L_08AC4618; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4618: @@ -2150,7 +2002,6 @@ L_08AC463C: L_08AC4644: aot_gpr_4 = (aot_gpr_4 | ctx.gpr[18]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4670; } @@ -2159,7 +2010,6 @@ L_08AC4644: L_08AC4650: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4670; } @@ -2190,7 +2040,6 @@ L_08AC4670: AOT_REGCACHE_SYNC_OUT(); return; L_08AC467C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2215,7 +2064,6 @@ L_08AC46A0: goto L_08AC46A8; L_08AC46A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC48D8; } @@ -2224,7 +2072,6 @@ L_08AC46A8: L_08AC46B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC46C4; } @@ -2232,7 +2079,6 @@ L_08AC46B0: } L_08AC46BC: aot_gpr_31 = (0x08AC46C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC46C4u) goto L_08AC46C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC46C4: @@ -2249,7 +2095,6 @@ L_08AC46CC: goto L_08AC46D8; L_08AC46D8: aot_gpr_31 = (0x08AC46E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC46E0u) goto L_08AC46E0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC46E0: @@ -2261,7 +2106,6 @@ L_08AC46E4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC47B4; } @@ -2269,7 +2113,6 @@ L_08AC46E4: } L_08AC46FC: aot_gpr_31 = (0x08AC4704u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4704: @@ -2297,9 +2140,7 @@ L_08AC4718: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC4770; } @@ -2313,7 +2154,6 @@ L_08AC4764: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4770: aot_gpr_31 = (0x08AC4778u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4778: @@ -2383,7 +2223,6 @@ L_08AC4824: goto L_08AC4830; L_08AC4830: aot_gpr_31 = (0x08AC4838u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4838u) goto L_08AC4838; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4838: @@ -2415,7 +2254,6 @@ L_08AC485C: goto L_08AC4864; L_08AC4864: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC48B0; } @@ -2424,7 +2262,6 @@ L_08AC4864: L_08AC486C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC48B0; } @@ -2445,7 +2282,6 @@ L_08AC488C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4894: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AC48C4; } @@ -2459,7 +2295,6 @@ L_08AC489C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC48A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2473,7 +2308,6 @@ L_08AC48B0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC48BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2496,7 +2330,6 @@ L_08AC48D8: goto L_08AC48E4; L_08AC48E4: aot_gpr_31 = (0x08AC48ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC48ECu) goto L_08AC48EC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC48EC: @@ -2528,7 +2361,6 @@ L_08AC4910: goto L_08AC4918; L_08AC4918: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4940; } @@ -2537,7 +2369,6 @@ L_08AC4918: L_08AC4920: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4940; } @@ -2546,7 +2377,6 @@ L_08AC4920: L_08AC492C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4954; } @@ -2554,7 +2384,6 @@ L_08AC492C: } L_08AC4938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC4D88; } @@ -2568,7 +2397,6 @@ L_08AC4940: AOT_REGCACHE_SYNC_OUT(); return; L_08AC494C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2581,7 +2409,6 @@ L_08AC4954: AOT_REGCACHE_SYNC_OUT(); return; L_08AC495C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC4D20; } @@ -2596,7 +2423,6 @@ L_08AC4964: goto L_08AC4970; L_08AC4970: aot_gpr_31 = (0x08AC4978u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4978u) goto L_08AC4978; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4978: @@ -2628,7 +2454,6 @@ L_08AC499C: goto L_08AC49A4; L_08AC49A4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC49E4; } @@ -2637,7 +2462,6 @@ L_08AC49A4: L_08AC49AC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC49E4; } @@ -2655,7 +2479,6 @@ L_08AC49B8: L_08AC49D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC49F8; } @@ -2663,7 +2486,6 @@ L_08AC49D0: } L_08AC49DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC4A00; } @@ -2677,7 +2499,6 @@ L_08AC49E4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC49F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2685,7 +2506,6 @@ L_08AC49F0: } L_08AC49F8: aot_gpr_31 = (0x08AC4A00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4A00u) goto L_08AC4A00; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4A00: @@ -2702,7 +2522,6 @@ L_08AC4A08: goto L_08AC4A14; L_08AC4A14: aot_gpr_31 = (0x08AC4A1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4A1Cu) goto L_08AC4A1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4A1C: @@ -2734,7 +2553,6 @@ L_08AC4A40: goto L_08AC4A48; L_08AC4A48: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4A70; } @@ -2743,7 +2561,6 @@ L_08AC4A48: L_08AC4A50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4A70; } @@ -2752,7 +2569,6 @@ L_08AC4A50: L_08AC4A5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4A84; } @@ -2774,7 +2590,6 @@ L_08AC4A70: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2782,7 +2597,6 @@ L_08AC4A7C: } L_08AC4A84: aot_gpr_31 = (0x08AC4A8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4A8Cu) goto L_08AC4A8C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4A8C: @@ -2814,7 +2628,6 @@ L_08AC4AB0: goto L_08AC4AB8; L_08AC4AB8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4AF4; } @@ -2823,7 +2636,6 @@ L_08AC4AB8: L_08AC4AC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4AF4; } @@ -2840,7 +2652,6 @@ L_08AC4ACC: L_08AC4AE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4B08; } @@ -2862,7 +2673,6 @@ L_08AC4AF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2870,7 +2680,6 @@ L_08AC4B00: } L_08AC4B08: aot_gpr_31 = (0x08AC4B10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4B10u) goto L_08AC4B10; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4B10: @@ -2902,7 +2711,6 @@ L_08AC4B34: goto L_08AC4B3C; L_08AC4B3C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4B6C; } @@ -2911,7 +2719,6 @@ L_08AC4B3C: L_08AC4B44: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4B6C; } @@ -2925,7 +2732,6 @@ L_08AC4B50: L_08AC4B58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4B80; } @@ -2947,7 +2753,6 @@ L_08AC4B6C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4B78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -2955,7 +2760,6 @@ L_08AC4B78: } L_08AC4B80: aot_gpr_31 = (0x08AC4B88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4B88u) goto L_08AC4B88; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4B88: @@ -2987,7 +2791,6 @@ L_08AC4BAC: goto L_08AC4BB4; L_08AC4BB4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4BF8; } @@ -2996,7 +2799,6 @@ L_08AC4BB4: L_08AC4BBC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4BF8; } @@ -3012,13 +2814,11 @@ L_08AC4BC8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4BDC: aot_gpr_31 = (0x08AC4BE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 356u, 0x088697ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4BE4u) goto L_08AC4BE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4BE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4C0C; } @@ -3040,7 +2840,6 @@ L_08AC4BF8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4C04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -3048,7 +2847,6 @@ L_08AC4C04: } L_08AC4C0C: aot_gpr_31 = (0x08AC4C14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4C14u) goto L_08AC4C14; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4C14: @@ -3080,7 +2878,6 @@ L_08AC4C38: goto L_08AC4C40; L_08AC4C40: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4C94; } @@ -3089,7 +2886,6 @@ L_08AC4C40: L_08AC4C48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4C94; } @@ -3118,7 +2914,6 @@ L_08AC4C70: L_08AC4C80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4CA8; } @@ -3140,7 +2935,6 @@ L_08AC4C94: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4CA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -3148,7 +2942,6 @@ L_08AC4CA0: } L_08AC4CA8: aot_gpr_31 = (0x08AC4CB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4CB0u) goto L_08AC4CB0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4CB0: @@ -3180,7 +2973,6 @@ L_08AC4CD4: goto L_08AC4CDC; L_08AC4CDC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4D0C; } @@ -3189,7 +2981,6 @@ L_08AC4CDC: L_08AC4CE4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4D0C; } @@ -3205,7 +2996,6 @@ L_08AC4CF0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC4D88; } @@ -3219,7 +3009,6 @@ L_08AC4D0C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4D18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -3234,7 +3023,6 @@ L_08AC4D20: goto L_08AC4D2C; L_08AC4D2C: aot_gpr_31 = (0x08AC4D34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4D34u) goto L_08AC4D34; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4D34: @@ -3266,7 +3054,6 @@ L_08AC4D58: goto L_08AC4D60; L_08AC4D60: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4D74; } @@ -3275,7 +3062,6 @@ L_08AC4D60: L_08AC4D68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(140))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4D80; } @@ -3289,7 +3075,6 @@ L_08AC4D74: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4D80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -3297,7 +3082,6 @@ L_08AC4D80: } L_08AC4D88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC4DDC; } @@ -3305,7 +3089,6 @@ L_08AC4D88: } L_08AC4D90: aot_gpr_31 = (0x08AC4D98u); - // nop ctx.pc = 0x08B73514u; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4D98: @@ -3335,7 +3118,6 @@ L_08AC4DDC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19672))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4E38; } @@ -3361,7 +3143,6 @@ L_08AC4E04: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E14: aot_gpr_31 = (0x08AC4E1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 594u, 0x08AD35D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4E1Cu) goto L_08AC4E1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E1C: @@ -3381,7 +3162,6 @@ L_08AC4E38: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-11240), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4E50; } @@ -3389,7 +3169,6 @@ L_08AC4E38: } L_08AC4E48: aot_gpr_31 = (0x08AC4E50u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4E50u) goto L_08AC4E50; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E50: @@ -3402,7 +3181,6 @@ L_08AC4E58: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7713))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC50D8; } @@ -3410,28 +3188,23 @@ L_08AC4E58: } L_08AC4E6C: aot_gpr_31 = (0x08AC4E74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0188_entry, 188u, 36u, 0x08AF431Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4E74u) goto L_08AC4E74; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E74: aot_gpr_31 = (0x08AC4E7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 154u, 0x08990B58u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4E7Cu) goto L_08AC4E7C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E7C: aot_gpr_31 = (0x08AC4E84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 156u, 0x08990B68u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4E84u) goto L_08AC4E84; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E84: aot_gpr_31 = (0x08AC4E8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 836u, 0x0898B490u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4E8Cu) goto L_08AC4E8C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4E8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4182))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4EA0; } @@ -3439,13 +3212,11 @@ L_08AC4E8C: } L_08AC4E98: aot_gpr_31 = (0x08AC4EA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 229u, 0x089419D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4EA0u) goto L_08AC4EA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4EA0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC4EB8; } @@ -3460,7 +3231,6 @@ L_08AC4EAC: L_08AC4EB8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4ECC; } @@ -3468,13 +3238,11 @@ L_08AC4EB8: } L_08AC4EC4: aot_gpr_31 = (0x08AC4ECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 19u, 0x08AFC6BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4ECCu) goto L_08AC4ECC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4ECC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4EE0; } @@ -3482,13 +3250,11 @@ L_08AC4ECC: } L_08AC4ED8: aot_gpr_31 = (0x08AC4EE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 356u, 0x088697ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4EE0u) goto L_08AC4EE0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4EE0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4F2C; } @@ -3496,52 +3262,42 @@ L_08AC4EE0: } L_08AC4EEC: aot_gpr_31 = (0x08AC4EF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 163u, 0x0895D350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4EF4u) goto L_08AC4EF4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4EF4: aot_gpr_31 = (0x08AC4EFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0171_entry, 171u, 51u, 0x08AB0444u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4EFCu) goto L_08AC4EFC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4EFC: aot_gpr_31 = (0x08AC4F04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0126_entry, 126u, 707u, 0x089FFDB0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F04u) goto L_08AC4F04; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F04: aot_gpr_31 = (0x08AC4F0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0123_entry, 123u, 211u, 0x089F112Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F0Cu) goto L_08AC4F0C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F0C: aot_gpr_31 = (0x08AC4F14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 319u, 0x08A3552Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F14u) goto L_08AC4F14; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F14: aot_gpr_31 = (0x08AC4F1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 12u, 0x08B200E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F1Cu) goto L_08AC4F1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F1C: aot_gpr_31 = (0x08AC4F24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 561u, 0x089CF1D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F24u) goto L_08AC4F24; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F24: aot_gpr_31 = (0x08AC4F2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0008_entry, 8u, 508u, 0x08827730u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F2Cu) goto L_08AC4F2C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F2C: aot_gpr_31 = (0x08AC4F34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0094_entry, 94u, 972u, 0x0897FECCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F34u) goto L_08AC4F34; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F34: aot_gpr_31 = (0x08AC4F3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0063_entry, 63u, 215u, 0x08900F14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F3Cu) goto L_08AC4F3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F3C: @@ -3553,7 +3309,6 @@ L_08AC4F3C: L_08AC4F48: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4F94; } @@ -3592,7 +3347,6 @@ L_08AC4F84: AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F94: aot_gpr_31 = (0x08AC4F9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0143_entry, 143u, 126u, 0x08A40B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4F9Cu) goto L_08AC4F9C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4F9C: @@ -3604,7 +3358,6 @@ L_08AC4F9C: goto L_08AC4FA8; L_08AC4FA8: aot_gpr_31 = (0x08AC4FB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4FB0u) goto L_08AC4FB0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4FB0: @@ -3613,7 +3366,6 @@ L_08AC4FB0: L_08AC4FB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC4FC8; } @@ -3621,27 +3373,22 @@ L_08AC4FB4: } L_08AC4FC0: aot_gpr_31 = (0x08AC4FC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 324u, 0x08AED518u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4FC8u) goto L_08AC4FC8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4FC8: aot_gpr_31 = (0x08AC4FD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0091_entry, 91u, 2u, 0x08970014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4FD0u) goto L_08AC4FD0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4FD0: aot_gpr_31 = (0x08AC4FD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 245u, 0x0888CD6Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4FD8u) goto L_08AC4FD8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4FD8: aot_gpr_31 = (0x08AC4FE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0086_entry, 86u, 98u, 0x0895CDA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4FE0u) goto L_08AC4FE0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4FE0: aot_gpr_31 = (0x08AC4FE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0160_entry, 160u, 327u, 0x08A861FCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC4FE8u) goto L_08AC4FE8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC4FE8: @@ -3649,7 +3396,6 @@ L_08AC4FE8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19672))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC5004; } @@ -3657,12 +3403,10 @@ L_08AC4FE8: } L_08AC4FFC: aot_gpr_31 = (0x08AC5004u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0083_entry, 83u, 804u, 0x089538D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5004u) goto L_08AC5004; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5004: aot_gpr_31 = (0x08AC500Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0037_entry, 37u, 93u, 0x08898CA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC500Cu) goto L_08AC500C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC500C: @@ -3673,27 +3417,22 @@ L_08AC500C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC5018: aot_gpr_31 = (0x08AC5020u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0059_entry, 59u, 523u, 0x088F286Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5020u) goto L_08AC5020; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5020: aot_gpr_31 = (0x08AC5028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 270u, 0x0896CF34u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5028u) goto L_08AC5028; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5028: aot_gpr_31 = (0x08AC5030u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0163_entry, 163u, 65u, 0x08A90850u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5030u) goto L_08AC5030; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5030: aot_gpr_31 = (0x08AC5038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0041_entry, 41u, 602u, 0x088ABDC4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5038u) goto L_08AC5038; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5038: aot_gpr_31 = (0x08AC5040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0078_entry, 78u, 818u, 0x0893F9E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5040u) goto L_08AC5040; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5040: @@ -3703,7 +3442,6 @@ L_08AC5040: AOT_REGCACHE_SYNC_OUT(); return; L_08AC5048: aot_gpr_31 = (0x08AC5050u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 433u, 0x08AAE3CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5050u) goto L_08AC5050; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5050: @@ -3711,7 +3449,6 @@ L_08AC5050: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4212))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC5070; } @@ -3725,18 +3462,15 @@ L_08AC5064: AOT_REGCACHE_SYNC_OUT(); return; L_08AC5070: aot_gpr_31 = (0x08AC5078u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 537u, 0x0896740Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5078u) goto L_08AC5078; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5078: aot_gpr_31 = (0x08AC5080u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 582u, 0x0886AA64u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5080u) goto L_08AC5080; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5080: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4211))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC50B8; } @@ -3744,22 +3478,18 @@ L_08AC5080: } L_08AC508C: aot_gpr_31 = (0x08AC5094u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 325u, 0x08981470u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5094u) goto L_08AC5094; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5094: aot_gpr_31 = (0x08AC509Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 280u, 0x08981124u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC509Cu) goto L_08AC509C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC509C: aot_gpr_31 = (0x08AC50A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 462u, 0x08A97168u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC50A4u) goto L_08AC50A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC50A4: aot_gpr_31 = (0x08AC50ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0164_entry, 164u, 470u, 0x08A971F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC50ACu) goto L_08AC50AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC50AC: @@ -3770,22 +3500,18 @@ L_08AC50AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC50B8: aot_gpr_31 = (0x08AC50C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 298u, 0x08B411BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC50C0u) goto L_08AC50C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC50C0: aot_gpr_31 = (0x08AC50C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0199_entry, 199u, 616u, 0x08B22F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC50C8u) goto L_08AC50C8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC50C8: aot_gpr_31 = (0x08AC50D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 321u, 0x08B412D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC50D0u) goto L_08AC50D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC50D0: aot_gpr_31 = (0x08AC50D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 338u, 0x08B4142Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC50D8u) goto L_08AC50D8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC50D8: @@ -3804,7 +3530,17 @@ L_08AC50D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC50FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -3814,7 +3550,17 @@ L_08AC50FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5124: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); @@ -3836,7 +3582,6 @@ L_08AC514C: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC5180; } @@ -3844,7 +3589,6 @@ L_08AC514C: } L_08AC5164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC51B8; } @@ -3866,7 +3610,6 @@ L_08AC516C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC53F4; } @@ -3876,7 +3619,6 @@ L_08AC5180: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2192))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC51A0; } @@ -3909,7 +3651,6 @@ L_08AC51A0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC53F4; } @@ -3964,11 +3705,20 @@ L_08AC5214: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(14240))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC522C: aot_fpr_13 = std::bit_cast(0u); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13)}; @@ -4086,7 +3836,6 @@ L_08AC524C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC53F4; } @@ -4113,7 +3862,6 @@ L_08AC52A0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4141,7 +3889,6 @@ L_08AC52CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4168,7 +3915,6 @@ L_08AC52F8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4196,7 +3942,6 @@ L_08AC5320: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4224,7 +3969,6 @@ L_08AC534C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4252,7 +3996,6 @@ L_08AC5378: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4279,7 +4022,6 @@ L_08AC53A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4305,7 +4047,6 @@ L_08AC53CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC524C; } @@ -4325,7 +4066,17 @@ L_08AC53F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4336,7 +4087,6 @@ L_08AC5410: aot_gpr_5 = (aot_gpr_4 < static_cast(8) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC5458; } @@ -4348,14 +4098,22 @@ L_08AC5438: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(14272))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC5464; } @@ -4379,7 +4137,17 @@ L_08AC5464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC547C: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -4388,21 +4156,49 @@ L_08AC547C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5490: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5498: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC54A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -4439,7 +4235,6 @@ L_08AC54F8: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC551C; } @@ -4507,7 +4302,6 @@ L_08AC5574: L_08AC557C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AC5594; } @@ -4606,7 +4400,6 @@ L_08AC5644: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC5660; } @@ -4614,7 +4407,6 @@ L_08AC5644: } L_08AC5658: aot_gpr_31 = (0x08AC5660u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5660u) goto L_08AC5660; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5660: @@ -4699,7 +4491,17 @@ L_08AC56F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5720: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -4736,7 +4538,6 @@ L_08AC5778: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC579C; } @@ -4758,7 +4559,6 @@ L_08AC579C: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC58CC; } @@ -4806,7 +4606,6 @@ L_08AC57F4: L_08AC57FC: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AC5814; } @@ -4893,7 +4692,6 @@ L_08AC589C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC58B8; } @@ -4901,7 +4699,6 @@ L_08AC589C: } L_08AC58B0: aot_gpr_31 = (0x08AC58B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC58B8u) goto L_08AC58B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC58B8: @@ -4974,7 +4771,17 @@ L_08AC5920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5950: ctx.gpr[2] = (2220u << 16u); jump_target = aot_gpr_31; @@ -4982,12 +4789,21 @@ L_08AC5950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC595C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC596Cu); - // nop goto L_08AC5950; L_08AC596C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -4996,7 +4812,17 @@ L_08AC596C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5978: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5014,7 +4840,6 @@ L_08AC5994: goto L_08AC599C; L_08AC599C: aot_gpr_31 = (0x08AC59A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC59A4u) goto L_08AC59A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC59A4: @@ -5022,7 +4847,6 @@ L_08AC59A4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC59BC; } @@ -5044,7 +4868,17 @@ L_08AC59BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC59D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5103,7 +4937,17 @@ L_08AC5A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5A80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -5140,7 +4984,6 @@ L_08AC5AB0: goto L_08AC5AB8; L_08AC5AB8: aot_gpr_31 = (0x08AC5AC0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5AC0u) goto L_08AC5AC0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5AC0: @@ -5148,7 +4991,6 @@ L_08AC5AC0: goto L_08AC5AC4; L_08AC5AC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC5AD4; } @@ -5171,7 +5013,17 @@ L_08AC5AD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5AE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5324,7 +5176,6 @@ L_08AC5C34: goto L_08AC5C3C; L_08AC5C3C: aot_gpr_31 = (0x08AC5C44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC5C44u) goto L_08AC5C44; AOT_REGCACHE_SYNC_OUT(); return; L_08AC5C44: @@ -5338,7 +5189,6 @@ L_08AC5C48: L_08AC5C50: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC5C64; } @@ -5367,7 +5217,17 @@ L_08AC5C64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); @@ -5396,7 +5256,17 @@ L_08AC5CB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5CC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(48))); @@ -5445,7 +5315,17 @@ L_08AC5D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5D44: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_5 + aot_gpr_5); @@ -5513,7 +5393,17 @@ L_08AC5DDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC5DF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -5583,7 +5473,6 @@ L_08AC5EB0: ctx.gpr[8] = (ctx.gpr[8] + ctx.gpr[7]); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AC5EF8; } @@ -5608,7 +5497,6 @@ L_08AC5EC4: } L_08AC5EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC5F00; } @@ -5778,7 +5666,6 @@ L_08AC6014: aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC602C; } @@ -5786,7 +5673,6 @@ L_08AC6014: } L_08AC6024: aot_gpr_31 = (0x08AC602Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC602Cu) goto L_08AC602C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC602C: @@ -5815,7 +5701,17 @@ L_08AC6044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC6068: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_5 + aot_gpr_5); @@ -5925,7 +5821,17 @@ L_08AC614C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC6170: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5961,7 +5867,6 @@ L_08AC61AC: L_08AC61B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(48))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08AC61C8; } @@ -5990,7 +5895,17 @@ L_08AC61CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC61E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -6014,7 +5929,6 @@ L_08AC6200: goto L_08AC620C; L_08AC620C: aot_gpr_31 = (0x08AC6214u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6214u) goto L_08AC6214; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6214: @@ -6038,7 +5952,17 @@ L_08AC6224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC6238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); @@ -6056,7 +5980,6 @@ L_08AC6238: L_08AC6258: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC6274; } @@ -6080,7 +6003,6 @@ L_08AC626C: } L_08AC6274: aot_gpr_31 = (0x08AC627Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC627Cu) goto L_08AC627C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC627C: @@ -6104,7 +6026,17 @@ L_08AC628C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC62A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -6116,7 +6048,6 @@ L_08AC62A0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC62B8: aot_gpr_31 = (0x08AC62C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC62C0u) goto L_08AC62C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC62C0: @@ -6159,7 +6090,17 @@ L_08AC631C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC632C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -6200,7 +6141,6 @@ L_08AC6358: AOT_REGCACHE_SYNC_OUT(); return; L_08AC63A8: aot_gpr_31 = (0x08AC63B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 63u, 0x08B0C4CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC63B0u) goto L_08AC63B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC63B0: @@ -6229,7 +6169,6 @@ L_08AC63DC: L_08AC63E8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AC6400; } @@ -6280,7 +6219,17 @@ L_08AC643C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC6458: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6290,7 +6239,17 @@ L_08AC6458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC646C: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(220), aot_gpr_16); @@ -6305,7 +6264,6 @@ L_08AC646C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC64AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC64E8; } @@ -6336,7 +6294,6 @@ L_08AC64D4: } L_08AC64E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC64F8; } @@ -6352,7 +6309,6 @@ L_08AC64E8: } L_08AC64F0: aot_gpr_31 = (0x08AC64F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC64F8u) goto L_08AC64F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC64F8: @@ -6401,7 +6357,6 @@ L_08AC654C: } L_08AC6558: aot_gpr_31 = (0x08AC6560u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6560u) goto L_08AC6560; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6560: @@ -6454,12 +6409,10 @@ L_08AC65A8: } L_08AC65B4: aot_gpr_31 = (0x08AC65BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC65BCu) goto L_08AC65BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC65BC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AC689C; } @@ -6504,7 +6457,6 @@ L_08AC6604: } L_08AC6610: aot_gpr_31 = (0x08AC6618u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6618u) goto L_08AC6618; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6618: @@ -6530,7 +6482,6 @@ L_08AC6630: } L_08AC663C: aot_gpr_31 = (0x08AC6644u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6644u) goto L_08AC6644; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6644: @@ -6542,7 +6493,6 @@ L_08AC6644: AOT_REGCACHE_SYNC_OUT(); return; L_08AC6654: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC6734; } @@ -6595,7 +6545,6 @@ L_08AC66B4: ctx.gpr[17] = (aot_gpr_5 + aot_gpr_16); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_16; - // nop if (branch_taken) { goto L_08AC6734; } @@ -6665,7 +6614,6 @@ L_08AC6734: AOT_REGCACHE_SYNC_OUT(); return; L_08AC6740: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC6820; } @@ -6718,7 +6666,6 @@ L_08AC67A0: ctx.gpr[17] = (aot_gpr_5 + aot_gpr_16); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_16; - // nop if (branch_taken) { goto L_08AC6820; } @@ -6825,7 +6772,6 @@ L_08AC686C: goto L_08AC6878; L_08AC6878: aot_gpr_31 = (0x08AC6880u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6880u) goto L_08AC6880; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6880: @@ -6833,7 +6779,6 @@ L_08AC6880: goto L_08AC6884; L_08AC6884: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC6894; } @@ -6841,12 +6786,10 @@ L_08AC6884: } L_08AC688C: aot_gpr_31 = (0x08AC6894u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6894u) goto L_08AC6894; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6894: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AC65C4; } @@ -6876,7 +6819,6 @@ L_08AC68B8: } L_08AC68C4: aot_gpr_31 = (0x08AC68CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC68CCu) goto L_08AC68CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC68CC: @@ -6913,12 +6855,10 @@ L_08AC68F4: } L_08AC6904: aot_gpr_31 = (0x08AC690Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC690Cu) goto L_08AC690C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC690C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC69BC; } @@ -6948,12 +6888,10 @@ L_08AC6930: } L_08AC693C: aot_gpr_31 = (0x08AC6944u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6944u) goto L_08AC6944; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6944: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AC6978; } @@ -6994,7 +6932,6 @@ L_08AC6978: L_08AC6984: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC69BC; } @@ -7050,12 +6987,10 @@ L_08AC69D8: } L_08AC69E4: aot_gpr_31 = (0x08AC69ECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC69ECu) goto L_08AC69EC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC69EC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6A38; } @@ -7090,7 +7025,6 @@ L_08AC6A18: } L_08AC6A24: aot_gpr_31 = (0x08AC6A2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6A2Cu) goto L_08AC6A2C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6A2C: @@ -7122,12 +7056,10 @@ L_08AC6A54: } L_08AC6A60: aot_gpr_31 = (0x08AC6A68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6A68u) goto L_08AC6A68; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6A68: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6AA4; } @@ -7184,12 +7116,10 @@ L_08AC6AC0: } L_08AC6ACC: aot_gpr_31 = (0x08AC6AD4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6AD4u) goto L_08AC6AD4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6AD4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6BE0; } @@ -7219,12 +7149,10 @@ L_08AC6AF8: } L_08AC6B04: aot_gpr_31 = (0x08AC6B0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6B0Cu) goto L_08AC6B0C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6B0C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6BE0; } @@ -7253,7 +7181,6 @@ L_08AC6B34: goto L_08AC6B44; L_08AC6B44: { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC6B6C; } @@ -7262,7 +7189,6 @@ L_08AC6B44: L_08AC6B4C: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(56))); { const bool branch_taken = aot_gpr_16 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AC6B6C; } @@ -7337,7 +7263,6 @@ L_08AC6BCC: goto L_08AC6BD0; L_08AC6BD0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC6BE0; } @@ -7345,7 +7270,6 @@ L_08AC6BD0: } L_08AC6BD8: aot_gpr_31 = (0x08AC6BE0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6BE0u) goto L_08AC6BE0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6BE0: @@ -7372,12 +7296,10 @@ L_08AC6BFC: } L_08AC6C08: aot_gpr_31 = (0x08AC6C10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6C10u) goto L_08AC6C10; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6C10: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6CAC; } @@ -7473,12 +7395,10 @@ L_08AC6CC8: } L_08AC6CD4: aot_gpr_31 = (0x08AC6CDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6CDCu) goto L_08AC6CDC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6CDC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6D78; } @@ -7574,12 +7494,10 @@ L_08AC6D94: } L_08AC6DA0: aot_gpr_31 = (0x08AC6DA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6DA8u) goto L_08AC6DA8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6DA8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AC6E34; } @@ -7630,7 +7548,6 @@ L_08AC6DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC6E00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC6E2C; } @@ -7684,12 +7601,10 @@ L_08AC6E50: } L_08AC6E5C: aot_gpr_31 = (0x08AC6E64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6E64u) goto L_08AC6E64; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6E64: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AC6EE4; } @@ -7720,12 +7635,10 @@ L_08AC6E8C: } L_08AC6E98: aot_gpr_31 = (0x08AC6EA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6EA0u) goto L_08AC6EA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6EA0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AC6EE0; } @@ -7790,12 +7703,10 @@ L_08AC6F00: } L_08AC6F0C: aot_gpr_31 = (0x08AC6F14u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6F14u) goto L_08AC6F14; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6F14: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6F64; } @@ -7810,7 +7721,6 @@ L_08AC6F1C: L_08AC6F28: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC6F40; } @@ -7818,7 +7728,6 @@ L_08AC6F28: } L_08AC6F34: aot_gpr_31 = (0x08AC6F3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC6F3Cu) goto L_08AC6F3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC6F3C: @@ -7833,7 +7742,6 @@ L_08AC6F40: L_08AC6F4C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC6F64; } @@ -7871,7 +7779,17 @@ L_08AC6F68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC6FA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -7905,7 +7823,6 @@ L_08AC6FD4: ctx.fpr[15] = std::bit_cast(std::bit_cast(ctx.fpr[16])); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(472))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(468))); if (branch_taken) { @@ -7919,9 +7836,7 @@ L_08AC7008: goto L_08AC7010; L_08AC7010: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC7028; } @@ -7934,7 +7849,6 @@ L_08AC7020: L_08AC7028: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AC7040; } @@ -7956,7 +7870,6 @@ L_08AC7040: goto L_08AC704C; L_08AC704C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[17]) || std::isnan(aot_fpr_12)) && ctx.fpr[17] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16384u << 16u); if (branch_taken) { @@ -7966,7 +7879,6 @@ L_08AC704C: } L_08AC705C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(aot_fpr_12)) && ctx.fpr[15] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16384u << 16u); if (branch_taken) { @@ -7976,7 +7888,6 @@ L_08AC705C: } L_08AC706C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_14) || std::isnan(aot_fpr_12)) && aot_fpr_14 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16384u << 16u); if (branch_taken) { @@ -7986,7 +7897,6 @@ L_08AC706C: } L_08AC707C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16384u << 16u); if (branch_taken) { @@ -8031,7 +7941,17 @@ L_08AC70D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC70EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8065,7 +7985,6 @@ L_08AC712C: ctx.gpr[7] = (16384u << 16u); aot_gpr_6 = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AC71AC; } @@ -8078,7 +7997,6 @@ L_08AC7140: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (aot_gpr_4 + static_cast(2212)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8089,7 +8007,6 @@ L_08AC7140: L_08AC7164: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08AC71A8; @@ -8099,7 +8016,6 @@ L_08AC7178: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08AC71A8; @@ -8108,9 +8024,7 @@ L_08AC7178: L_08AC7190: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC71A8; } @@ -8174,7 +8088,6 @@ L_08AC7204: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7220; } @@ -8196,7 +8109,17 @@ L_08AC7220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8219,7 +8142,6 @@ L_08AC7260: L_08AC726C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC729C; } @@ -8230,7 +8152,6 @@ L_08AC7278: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7294; } @@ -8305,7 +8226,6 @@ L_08AC72F0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC730C; } @@ -8327,7 +8247,17 @@ L_08AC730C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7324: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8350,7 +8280,6 @@ L_08AC734C: L_08AC7358: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7384; } @@ -8360,7 +8289,6 @@ L_08AC7364: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(472))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC737C; } @@ -8435,7 +8363,6 @@ L_08AC73D8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC73F4; } @@ -8457,14 +8384,22 @@ L_08AC73F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC740C: aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC742C; } @@ -8480,11 +8415,20 @@ L_08AC7424: } L_08AC742C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7434: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8538,11 +8482,20 @@ L_08AC7434: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC745C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8568,11 +8521,20 @@ L_08AC745C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7474: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8598,11 +8560,20 @@ L_08AC7474: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC748C: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -8621,11 +8592,20 @@ L_08AC748C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC74A8: aot_gpr_6 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -8648,11 +8628,20 @@ L_08AC74C0: } L_08AC74C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC74D0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -8674,11 +8663,20 @@ L_08AC74E4: } L_08AC74EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC74F4: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -8690,11 +8688,20 @@ L_08AC74F4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7518: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -8706,11 +8713,20 @@ L_08AC7518: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC753C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -8723,11 +8739,20 @@ L_08AC753C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7564: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -8741,19 +8766,37 @@ L_08AC7564: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<64u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7590: aot_fpr_0 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC759C: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -8762,7 +8805,17 @@ L_08AC759C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC75B0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8782,7 +8835,17 @@ L_08AC75B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC75C0: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8798,11 +8861,20 @@ L_08AC75C0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC75DC: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8818,11 +8890,20 @@ L_08AC75DC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC75F8: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8837,11 +8918,20 @@ L_08AC75F8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_0 = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7610: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -8861,7 +8951,17 @@ L_08AC7610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7620: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -8884,28 +8984,67 @@ L_08AC7620: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC763C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7644: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC764C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7654: { std::uint32_t aot_run_words[3]{}; aot_mem.aot_direct_load32_block(aot_gpr_5 + static_cast(0), aot_run_words); @@ -8920,14 +9059,34 @@ L_08AC7654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7670: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7678: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8970,7 +9129,17 @@ L_08AC76B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC76C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -8982,21 +9151,51 @@ L_08AC76C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC76DC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC76E4: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC76EC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_gpr_6 | aot_gpr_5); @@ -9005,7 +9204,17 @@ L_08AC76EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC76FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[2] = (aot_gpr_4 & aot_gpr_5); @@ -9014,21 +9223,51 @@ L_08AC76FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC770C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(44), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7714: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC771C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); jump_target = aot_gpr_31; @@ -9036,7 +9275,17 @@ L_08AC771C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7728: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -9046,7 +9295,17 @@ L_08AC7728: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC773C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -9056,7 +9315,17 @@ L_08AC773C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7750: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 14u); @@ -9066,7 +9335,17 @@ L_08AC7750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7764: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 14u); @@ -9075,7 +9354,17 @@ L_08AC7764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7774: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[7] = (0u + static_cast(-497)); @@ -9088,7 +9377,17 @@ L_08AC7774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7794: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.gpr[2] = (aot_gpr_4 & 496u); @@ -9097,35 +9396,85 @@ L_08AC7794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC77A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC77AC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(28)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC77B4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC77BC: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC77C4: aot_gpr_6 = (aot_gpr_5 << 4u); aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); @@ -9141,7 +9490,17 @@ L_08AC77C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC77F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = aot_fpr_14 - aot_fpr_12; @@ -9157,12 +9516,21 @@ L_08AC7804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7810: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AC7820u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC7820u) goto L_08AC7820; AOT_REGCACHE_SYNC_OUT(); return; L_08AC7820: @@ -9173,7 +9541,17 @@ L_08AC7820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7830: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[17]); @@ -9217,7 +9595,17 @@ L_08AC7868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC78A8: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -9259,11 +9647,20 @@ L_08AC78A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC78EC: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -9305,88 +9702,207 @@ L_08AC78EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7930: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7938: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(264))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7940: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7948: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7950: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(148), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7958: jump_target = aot_gpr_31; ctx.gpr[2] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(149)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7960: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(149), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7968: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(151), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7970: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7978: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7980: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(680), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7988: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_gpr_5 << 6u); @@ -9395,7 +9911,17 @@ L_08AC7988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7998: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(44)))))); ctx.gpr[2] = (aot_gpr_4 & 4u); @@ -9404,14 +9930,34 @@ L_08AC7998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC79A8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC79B0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1929)))))); aot_gpr_6 = (aot_gpr_5 << 5u); @@ -9423,21 +9969,51 @@ L_08AC79B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC79CC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC79D4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(2228)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC79DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); aot_gpr_6 = (0u | 58u); @@ -9451,7 +10027,6 @@ L_08AC79DC: L_08AC79EC: aot_gpr_6 = (0u | 57u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AC79FC; } @@ -9466,21 +10041,51 @@ L_08AC79FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A04: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2244))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A0C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A14: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); @@ -9494,7 +10099,17 @@ L_08AC7A14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); ctx.gpr[2] = (aot_gpr_4 & 256u); @@ -9503,21 +10118,51 @@ L_08AC7A38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A48: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A50: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2196), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7A58: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9543,7 +10188,6 @@ L_08AC7A58: L_08AC7A98: aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC7AB8; } @@ -9552,7 +10196,6 @@ L_08AC7A98: L_08AC7AA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(640))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08AC7AC0; } @@ -9560,7 +10203,6 @@ L_08AC7AA4: } L_08AC7AB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7AC8; } @@ -9568,7 +10210,6 @@ L_08AC7AB0: } L_08AC7AB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7B8C; } @@ -9576,7 +10217,6 @@ L_08AC7AB8: } L_08AC7AC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC7ADC; } @@ -9593,7 +10233,6 @@ L_08AC7AC8: } L_08AC7AD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7B14; } @@ -9601,7 +10240,6 @@ L_08AC7AD4: } L_08AC7ADC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7B8C; } @@ -9609,7 +10247,6 @@ L_08AC7ADC: } L_08AC7AE4: { const bool branch_taken = aot_gpr_16 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AC7B14; } @@ -9624,7 +10261,6 @@ L_08AC7AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC7AFC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AC7B0C; } @@ -9632,7 +10268,6 @@ L_08AC7AFC: } L_08AC7B04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7B14; } @@ -9640,7 +10275,6 @@ L_08AC7B04: } L_08AC7B0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7B8C; } @@ -9667,7 +10301,6 @@ L_08AC7B28: goto L_08AC7EF0; L_08AC7B44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AC7B54; } @@ -9684,7 +10317,6 @@ L_08AC7B4C: L_08AC7B54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08AC7B68; } @@ -9699,7 +10331,6 @@ L_08AC7B68: goto L_08AC7B6C; L_08AC7B6C: { const bool branch_taken = aot_gpr_16 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AC7B8C; } @@ -9714,7 +10345,6 @@ L_08AC7B74: AOT_REGCACHE_SYNC_OUT(); return; L_08AC7B84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7B8C; } @@ -9735,7 +10365,17 @@ L_08AC7B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7BAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(ctx.fpr[20])); @@ -9789,7 +10429,6 @@ L_08AC7BF8: } L_08AC7C00: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC7C10; } @@ -9797,7 +10436,6 @@ L_08AC7C00: } L_08AC7C08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7C34; } @@ -9845,21 +10483,51 @@ L_08AC7C34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7C50: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7C58: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1156))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7C60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -9879,7 +10547,6 @@ L_08AC7C78: L_08AC7C80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AC7DDC; } @@ -9888,7 +10555,6 @@ L_08AC7C80: L_08AC7C8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7CB8; } @@ -9897,7 +10563,6 @@ L_08AC7C8C: L_08AC7C98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7CB8; } @@ -9926,7 +10591,6 @@ L_08AC7CC8: L_08AC7CD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AC7DC0; } @@ -9935,7 +10599,6 @@ L_08AC7CD4: L_08AC7CE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7DC0; } @@ -9944,7 +10607,6 @@ L_08AC7CE0: L_08AC7CEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08AC7DAC; } @@ -9955,7 +10617,6 @@ L_08AC7CF8: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(456))); goto L_08AC7D34; @@ -9984,7 +10645,6 @@ L_08AC7D34: aot_gpr_6 = (64u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC7D7C; } @@ -10004,7 +10664,6 @@ L_08AC7D54: AOT_REGCACHE_SYNC_OUT(); return; L_08AC7D5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AC7DAC; } @@ -10036,7 +10695,6 @@ L_08AC7D8C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC7D94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AC7DAC; } @@ -10056,7 +10714,6 @@ L_08AC7DAC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC7DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7DE8; } @@ -10075,7 +10732,6 @@ L_08AC7DC8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC7DD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7DE8; } @@ -10098,12 +10754,21 @@ L_08AC7DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7DFC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(640))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC7E90; } @@ -10130,7 +10795,6 @@ L_08AC7E18: L_08AC7E24: aot_gpr_6 = (static_cast(aot_gpr_5) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AC7E8C; } @@ -10138,7 +10802,6 @@ L_08AC7E24: } L_08AC7E30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7E90; } @@ -10146,7 +10809,6 @@ L_08AC7E30: } L_08AC7E38: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AC7E30; } @@ -10154,7 +10816,6 @@ L_08AC7E38: } L_08AC7E40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7E8C; } @@ -10171,7 +10832,6 @@ L_08AC7E48: L_08AC7E50: aot_gpr_6 = (static_cast(aot_gpr_5) < 24 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AC7E30; } @@ -10179,7 +10839,6 @@ L_08AC7E50: } L_08AC7E5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7E8C; } @@ -10207,21 +10866,39 @@ L_08AC7E74: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_6); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(14336))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7E8C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(640), aot_gpr_5); goto L_08AC7E90; L_08AC7E90: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7E98: ctx.gpr[7] = (0u | 18u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; @@ -10234,7 +10911,6 @@ L_08AC7E98: L_08AC7EA4: ctx.gpr[7] = (0u | 17u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AC7EE4; } @@ -10263,14 +10939,22 @@ L_08AC7EC4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(14400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7EE8; } @@ -10281,11 +10965,20 @@ L_08AC7EE4: goto L_08AC7EE8; L_08AC7EE8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7EF0: aot_gpr_4 = (0u | 16u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; @@ -10321,7 +11014,6 @@ L_08AC7F0C: } L_08AC7F14: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC7F24; } @@ -10340,14 +11032,22 @@ L_08AC7F24: goto L_08AC7F28; L_08AC7F28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7F30: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AC7F58; } @@ -10358,7 +11058,6 @@ L_08AC7F38: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); ctx.gpr[7] = (ctx.gpr[7] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AC7F5C; } @@ -10378,11 +11077,20 @@ L_08AC7F58: goto L_08AC7F5C; L_08AC7F5C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC7F64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -10398,7 +11106,6 @@ L_08AC7F64: L_08AC7F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7F9C; } @@ -10414,7 +11121,6 @@ L_08AC7F88: L_08AC7F9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC7FBC; } @@ -10431,7 +11137,6 @@ L_08AC7FA8: } L_08AC7FB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC7FF4; } @@ -10439,7 +11144,6 @@ L_08AC7FB4: } L_08AC7FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0177_entry, 177u, 6u, 0x08AC8044u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10455,7 +11159,6 @@ L_08AC7FC4: } L_08AC7FCC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC7FF4; } @@ -10465,7 +11168,6 @@ L_08AC7FD4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_6 = (0u | 59u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AC7FF4; } @@ -10483,7 +11185,6 @@ L_08AC7FF0: L_08AC7FF4: aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0177_entry, 177u, 4u, 0x08AC8028u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0177.cpp b/profiles/vcs/generated/generated_unit_0177.cpp index b90327a..dc5fd97 100644 --- a/profiles/vcs/generated/generated_unit_0177.cpp +++ b/profiles/vcs/generated/generated_unit_0177.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0177[4090] = { - 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 4, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 10, 0, 0, 11, 0, 12, 0, 13, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, - 0, 26, 0, 27, 0, 28, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 32, - 0, 0, 0, 33, 0, 34, 0, 0, 0, 35, 0, 36, 0, 0, 37, 0, 0, 0, 38, 0, 0, 39, 0, 40, 0, 41, 0, 0, 0, 42, 0, 0, - 0, 43, 0, 0, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 50, 0, 51, 0, 52, 0, 0, 53, 0, 54, 0, 0, - 55, 0, 56, 0, 0, 57, 0, 58, 0, 59, 0, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 0, 0, 68, 0, - 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 0, 75, 0, 76, 0, 77, 0, 78, 0, 0, 79, 0, 0, 0, 0, 80, 0, 0, 81, 0, - 82, 0, 83, 0, 84, 0, 0, 85, 0, 86, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 89, 0, 90, 0, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 92, 0, 93, 0, 94, 0, 95, 0, 0, 0, 96, 0, 97, 0, 0, 98, 0, 99, 0, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 0, - 105, 0, 106, 0, 107, 0, 108, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 116, 0, 117, 0, 118, 0, 119, 0, 0, 0, 0, 0, - 0, 120, 0, 121, 0, 122, 0, 123, 0, 0, 0, 124, 0, 0, 125, 0, 0, 0, 126, 0, 0, 127, 0, 128, 0, 0, 0, 129, 0, 130, 0, 131, - 0, 0, 0, 0, 0, 0, 132, 0, 133, 0, 0, 0, 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 0, 0, 142, 0, - 143, 0, 144, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150, 0, 151, 0, 152, 0, 153, 0, 0, 154, - 0, 155, 0, 0, 156, 0, 157, 0, 158, 0, 0, 0, 159, 0, 0, 160, 0, 161, 0, 162, 0, 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 166, - 0, 167, 0, 0, 0, 168, 0, 169, 0, 0, 170, 0, 0, 171, 0, 172, 0, 173, 0, 174, 0, 0, 175, 0, 0, 176, 0, 0, 0, 177, 0, 178, - 0, 179, 0, 180, 0, 0, 181, 0, 182, 0, 183, 0, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 0, 187, 0, 0, 188, 0, 189, 0, 190, - 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 197, 0, 0, 198, 0, 0, 199, 0, 0, - 200, 0, 201, 0, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 211, 0, - 212, 0, 0, 213, 0, 0, 214, 0, 0, 215, 0, 216, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 0, 220, - 0, 221, 0, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 0, 0, 233, 0, 234, 0, 235, - 0, 236, 0, 237, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 240, 0, 241, 0, 0, 0, 242, 0, 243, 0, 0, 244, 0, 245, 0, 0, 0, 0, - 246, 0, 247, 0, 248, 0, 0, 0, 0, 249, 0, 250, 0, 251, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 263, 0, 0, 0, 264, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 273, 0, 274, 0, 0, 275, 0, 276, 0, 0, - 277, 0, 0, 278, 0, 0, 279, 0, 0, 0, 280, 0, 281, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, 285, 0, 0, 0, - 0, 286, 0, 287, 0, 0, 0, 0, 0, 288, 0, 289, 0, 290, 0, 0, 0, 291, 0, 0, 0, 292, 0, 293, 0, 294, 0, 0, 0, 0, 295, 0, - 296, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 300, 0, 301, 0, 302, 0, 303, 0, 0, 304, 0, - 305, 0, 0, 306, 0, 307, 0, 308, 0, 0, 0, 309, 0, 310, 0, 311, 0, 312, 0, 313, 0, 314, 0, 0, 0, 315, 0, 0, 0, 316, 0, 317, - 0, 0, 0, 318, 0, 319, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 323, 0, 324, 0, 325, 0, - 326, 0, 0, 0, 327, 0, 328, 0, 0, 0, 329, 0, 330, 0, 0, 0, 331, 0, 332, 0, 0, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, - 0, 0, 338, 0, 339, 0, 0, 0, 340, 0, 341, 0, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 345, 0, 346, 0, 347, 0, 0, 348, 0, 349, - 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 352, 0, 353, 0, 0, 0, 354, 0, 355, 0, 0, 356, 0, 357, 0, 358, 0, 359, 0, 360, 0, 361, - 0, 0, 362, 0, 363, 0, 364, 0, 365, 0, 366, 0, 0, 0, 367, 0, 0, 368, 0, 369, 0, 0, 370, 0, 371, 0, 0, 372, 0, 373, 0, 0, - 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 377, 0, 378, 0, 379, 0, 0, 380, 0, 0, 0, 381, 0, 0, 382, 0, 0, 383, 0, 384, - 0, 0, 0, 0, 0, 385, 0, 386, 0, 387, 0, 0, 0, 388, 0, 389, 0, 390, 0, 391, 0, 392, 0, 393, 0, 394, 0, 395, 0, 0, 396, 0, - 0, 0, 397, 0, 398, 0, 399, 0, 400, 0, 401, 0, 0, 402, 0, 403, 0, 0, 0, 404, 0, 405, 0, 0, 0, 406, 0, 407, 0, 408, 0, 409, - 0, 0, 410, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 0, 413, 0, 0, 414, 0, 415, 0, 0, 0, 416, 0, 417, 0, 0, 0, 418, 0, - 419, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 422, 0, 0, 423, 0, 424, 0, 425, 0, 0, 0, 426, 0, 0, 0, 427, 0, 428, 0, 0, 0, - 0, 429, 0, 430, 0, 0, 431, 0, 432, 0, 433, 0, 0, 0, 434, 0, 0, 0, 435, 0, 436, 0, 437, 0, 0, 438, 0, 439, 0, 440, 0, 0, - 0, 441, 0, 0, 0, 442, 443, 0, 444, 0, 0, 0, 445, 0, 446, 0, 0, 447, 0, 448, 0, 449, 0, 0, 0, 450, 0, 0, 0, 451, 0, 452, - 0, 453, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 0, 0, 461, 462, 0, - 463, 0, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 0, 0, 0, 472, 0, 0, 473, 0, 474, 0, 475, 0, 476, 0, 477, - 0, 0, 0, 478, 0, 479, 0, 0, 0, 480, 0, 481, 0, 0, 0, 482, 0, 0, 0, 483, 0, 484, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, - 487, 0, 488, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 0, 500, 0, 501, 0, 502, - 0, 0, 503, 0, 504, 0, 505, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, - 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 524, 0, 0, 525, 0, 526, 0, 527, 0, 528, 0, 0, - 529, 0, 530, 0, 0, 0, 531, 0, 532, 0, 0, 0, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, 0, 0, 539, 0, 540, 0, 541, 0, - 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 0, 0, 548, 0, 549, 0, 0, 550, 0, 551, 0, 552, 0, 0, 0, 553, 0, 554, 0, - 0, 0, 555, 0, 556, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, 559, 0, 560, 0, 561, 0, 562, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, - 565, 0, 0, 566, 0, 0, 0, 567, 0, 0, 568, 0, 569, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 573, 0, 574, 0, - 575, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 0, 0, 0, 585, 0, 586, 0, 587, 0, 588, 0, - 0, 589, 0, 590, 0, 0, 591, 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, - 0, 604, 0, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 0, 610, 0, 611, 0, 612, 0, 0, 0, 613, 0, 614, 0, 615, 0, 0, 0, 616, - 0, 0, 0, 0, 0, 617, 0, 618, 0, 619, 0, 620, 0, 621, 0, 0, 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 0, 0, 0, 627, 0, 628, - 0, 629, 0, 0, 0, 630, 0, 631, 0, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, - 643, 0, 644, 0, 0, 645, 0, 646, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 652, 0, 653, 0, 654, 0, 655, 0, 0, 656, 0, 657, 0, 658, - 0, 0, 659, 0, 0, 660, 0, 661, 0, 0, 662, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 664, 665, 0, 666, 0, 667, 668, 0, 669, 0, 670, - 0, 0, 0, 671, 0, 672, 0, 0, 0, 673, 0, 674, 0, 0, 0, 675, 0, 676, 0, 677, 0, 0, 678, 0, 679, 0, 0, 680, 0, 681, 0, 682, - 0, 0, 0, 683, 0, 684, 0, 685, 0, 686, 0, 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 0, 692, 0, 693, 0, 0, 694, 695, 0, 696, 0, - 697, 0, 0, 0, 698, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 0, 706, 0, 707, 0, 0, 0, 708, 0, - 709, 0, 710, 0, 0, 711, 0, 712, 0, 0, 713, 0, 714, 0, 715, 0, 0, 0, 716, 0, 717, 0, 0, 0, 718, 0, 719, 0, 0, 720, 0, 721, - 0, 722, 0, 723, 0, 724, 0, 0, 725, 0, 726, 0, 727, 0, 728, 0, 0, 729, 0, 730, 0, 731, 0, 732, 0, 0, 733, 0, 734, 735, 0, 736, - 0, 0, 0, 0, 737, 0, 738, 0, 739, 0, 0, 740, 0, 741, 0, 742, 0, 743, 0, 0, 0, 744, 0, 745, 0, 0, 0, 746, 0, 747, 0, 748, - 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 751, 0, 0, 752, 0, 753, 0, 754, 0, 755, 0, 0, 756, 0, 757, 0, - 0, 0, 758, 0, 759, 0, 760, 0, 0, 0, 761, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 763, 0, 0, 764, 0, 765, 0, 766, 0, 767, 0, - 768, 0, 0, 0, 0, 0, 769, 0, 770, 0, 771, 0, 0, 772, 0, 0, 0, 773, 0, 774, 0, 0, 0, 0, 0, 775, 0, 776, 0, 0, 0, 777, - 0, 778, 0, 0, 0, 779, 0, 780, 0, 0, 0, 0, 0, 781, 0, 782, 0, 0, 783, 0, 0, 784, 0, 0, 785, 0, 786, 0, 787, 0, 0, 0, - 0, 788, 0, 0, 789, 0, 790, 0, 791, 0, 792, 0, 793, 0, 794, 0, 0, 0, 795, 0, 0, 0, 796, 0, 0, 797, 0, 798, 0, 799, 0, 800, - 0, 0, 0, 0, 0, 801, 0, 802, 0, 803, 0, 0, 804, 0, 805, 0, 806, 0, 0, 0, 0, 0, 0, 0, 807, 0, 0, 808, 0, 0, 0, 809, - 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 0, 0, 815, 0, 816, 0, 0, 0, 817, 0, 818, 0, 0, 0, 819, 0, 0, 820, 0, 0, 821, - 0, 822, 0, 823, 0, 824, 0, 825, 0, 826, 0, 827, 0, 828, 0, 0, 829, 0, 830, 0, 0, 0, 831, 0, 832, 0, 833, 0, 0, 0, 0, 834, - 0, 0, 835, 0, 0, 0, 836, 0, 837, 0, 838, 0, 839, 0, 0, 0, 840, 0, 0, 0, 841, 0, 0, 842, 0, 0, 0, 843, 0, 0, 844, 0, - 845, 0, 846, 0, 847, 0, 0, 848, 0, 849, 0, 850, 0, 851, 0, 0, 0, 0, 0, 852, 0, 853, 0, 0, 854, 0, 0, 855, 0, 856, 0, 0, - 0, 857, 0, 858, 0, 859, 0, 0, 0, 0, 0, 860, 0, 861, 0, 862, 0, 0, 0, 863, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 865, 0, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 867, 0, 0, 868, 0, 0, 0, 869, 0, 0, 870, 0, 871, 0, 0, 0, - 872, 0, 873, 0, 874, 0, 875, 0, 0, 876, 877, 0, 0, 0, 0, 0, 0, 878, 0, 0, 879, 0, 880, 0, 881, 0, 882, 0, 0, 883, 0, 884, - 0, 0, 0, 885, 0, 886, 0, 887, 0, 0, 888, 0, 889, 0, 890, 0, 0, 0, 891, 0, 0, 0, 892, 0, 893, 0, 0, 0, 0, 894, 0, 895, - 0, 0, 0, 896, 0, 897, 0, 0, 0, 898, 0, 0, 0, 899, 0, 0, 900, 0, 0, 0, 901, 0, 0, 902, 0, 903, 0, 0, 904, 0, 905, 0, - 0, 0, 0, 0, 906, 0, 0, 907, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 909, 0, 0, 910, 0, 911, 0, 0, 912, 0, 0, 913, 0, - 0, 0, 0, 914, 0, 915, 0, 916, 0, 0, 0, 0, 917, 0, 918, 0, 919, 0, 0, 920, 0, 921, 0, 0, 922, 0, 923, 0, 0, 0, 0, 0, - 924, 0, 0, 925, 0, 0, 0, 926, 0, 927, 0, 0, 928, 0, 0, 929, 0, 0, 930, 0, 931, 0, 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 933, 0, 934, 0, 935, 0, 936, 0, 937, 0, 938, 0, 939, 0, 0, 0, 0, 940, 0, 941, 0, 942, 0, 0, 0, 0, 943, 0, 944, 0, 945, - 0, 946, 0, 947, 0, 948, 0, 949, 0, 950, 0, 951, 0, 0, 0, 952, 0, 953, 0, 954, 0, 955, 0, 956, 0, 0, 0, 957, 0, 0, 0, 958, - 0, 959, 0, 0, 960, 0, 961, 0, 0, 0, 0, 962, 0, 963, 0, 964, 0, 0, 0, 0, 965, 0, 966, 0, 967, 0, 0, 0, 968, 0, 969, 0, - 0, 0, 970, 0, 0, 0, 0, 0, 971, 0, 972, 0, 0, 0, 0, 0, 973, 0, 974, 0, 0, 975, 0, 0, 976, 0, 977, 0, 0, 978, 0, 979, - 0, 980, 0, 0, 0, 0, 981, 0, 982, 0, 0, 0, 0, 0, 983, 0, 984, 0, 0, 985, 0, 0, 986, 0, 987, 0, 0, 988, 0, 989, 0, 0, - 990, 0, 0, 0, 991, 0, 0, 0, 0, 0, 0, 992, 0, 993, 0, 0, 994, 0, 0, 0, 0, 995, 0, 996, 0, 0, 0, 0, 0, 0, 997, 0, - 0, 0, 0, 998, 0, 999, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 1001, 0, 1002, 0, 0, 1003, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1004, 0, 1005, 0, 1006, 0, 0, 0, 1007, 0, 1008, 0, 0, 0, 1009, 0, 1010, 0, 1011, 0, 0, 1012, 0, 0, 0, 1013, 0, 1014, 0, 0, 0, 0, - 0, 1015, 0, 1016, 0, 1017, 0, 0, 0, 0, 0, 1018, 0, 1019, 0, 1020, 0, 0, 1021, 0, 1022, 0, 0, 0, 0, 0, 1023, 0, 1024, 0, 1025, 0, - 0, 1026, 0, 1027, 0, 0, 1028, 0, 1029, 0, 1030, 0, 0, 1031, 0, 1032, 0, 0, 0, 1033, 0, 0, 0, 0, 0, 0, 1034, 0, 1035, 0, 0, 1036, - 0, 0, 1037, 0, 0, 0, 0, 0, 0, 1038, 0, 0, 1039, 0, 0, 0, 0, 0, 1040, 0, 1041, 0, 1042, 0, 0, 1043, 0, 0, 0, 1044, 0, 1045, - 0, 1046, 0, 0, 1047, 0, 0, 0, 1048, 0, 1049, 0, 0, 0, 1050, 0, 1051, 0, 0, 1052, 0, 1053, 0, 1054, 0, 0, 0, 1055, 0, 1056, 0, 0, - 0, 1057, 0, 0, 1058, 0, 0, 1059, 0, 0, 0, 1060, 0, 1061, 0, 0, 0, 1062, 0, 1063, 0, 1064, 0, 1065, 0, 1066, 0, 0, 0, 1067, 0, 1068, - 0, 0, 0, 0, 1069, 0, 0, 0, 1070, 0, 0, 1071, 0, 0, 0, 1072, 0, 0, 1073, 0, 0, 1074, 0, 0, 0, 0, 1075, 0, 1076, 0, 0, 0, - 1077, 0, 1078, 0, 0, 0, 1079, 0, 0, 0, 0, 1080, 0, 0, 0, 0, 1081, 0, 0, 1082, 0, 0, 1083, 0, 1084, 0, 1085, 0, 0, 0, 1086, 0, - 0, 0, 1087, 0, 0, 1088, 0, 1089, 0, 1090, 0, 0, 0, 1091, 0, 0, 1092, 0, 0, 1093, 0, 0, 0, 1094, 0, 1095, 0, 0, 1096, 0, 0, 0, - 1097, 0, 1098, 0, 0, 0, 0, 1099, 0, 1100, 0, 1101, 0, 0, 1102, 0, 0, 0, 1103, 0, 1104, 0, 0, 0, 1105, 0, 1106, 0, 0, 0, 0, 0, - 1107, 0, 0, 1108, 0, 1109, 0, 1110, 0, 0, 1111, 0, 1112, 0, 1113, 0, 1114, 0, 1115, 0, 1116, 0, 1117, 0, 1118, 0, 0, 1119, 0, 1120, 0, 0, - 1121, 0, 1122, 0, 0, 1123, 0, 0, 0, 1124, 0, 0, 1125, 0, 1126, 0, 1127, 0, 0, 1128, 0, 1129, 0, 1130, 0, 1131, 0, 0, 0, 0, 0, 1132, - 0, 1133, 0, 1134, 0, 1135, 0, 0, 0, 0, 0, 0, 1136, 0, 1137, 0, 1138, 0, 1139, 0, 1140, 0, 1141, 0, 1142, 0, 1143, 0, 1144, 0, 0, 1145, - 0, 1146, 0, 1147, 0, 0, 1148, 0, 1149, 0, 0, 1150, 0, 1151, 0, 0, 0, 1152, 0, 1153, 0, 1154, 0, 1155, 0, 1156, 0, 1157, 0, 1158, 0, 1159, - 0, 1160, 0, 1161, 0, 0, 1162, 0, 1163, 0, 0, 1164, 0, 1165, 0, 0, 1166, 0, 1167, 0, 0, 1168, 0, 1169, 0, 0, 1170, 0, 1171, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 1173, 0, 1174, - 0, 0, 1175, 0, 1176, 0, 1177, 0, 0, 1178, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1180, 0, 1181, 0, 0, 1182, 0, 1183, - 0, 0, 1184, 0, 1185, 0, 1186, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 1188, 0, 1189, 0, 1190, 0, 1191, 0, 1192, 0, 0, 0, 1193, 0, 0, 1194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 0, 1196, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 1198, 0, 0, 0, - 1199, 0, 0, 1200, 0, 1201, 0, 0, 0, 1202, 0, 1203, 0, 1204, 0, 1205, 0, 1206, 0, 1207, 0, 0, 0, 0, 0, 0, 1208, 0, 1209, 0, 0, 1210, - 0, 0, 1211, 1212, 0, 0, 0, 0, 0, 0, 1213, 0, 0, 1214, 0, 1215, 0, 1216, 0, 1217, 0, 0, 1218, 0, 1219, 0, 0, 0, 1220, 0, 0, 0, - 1221, 0, 1222, 0, 1223, 0, 0, 1224, 0, 0, 1225, 0, 0, 0, 1226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 1228, 0, 0, 0, - 0, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, 1231, 0, 0, 0, 0, 1232, 0, 0, 1233, 0, 0, - 0, 1234, 0, 1235, 0, 1236, 0, 0, 1237, 0, 0, 1238, 0, 0, 1239, 1240, 0, 1241, 0, 0, 1242, 0, 0, 1243, 0, 0, 0, 1244, 1245, 0, 1246, 0, - 0, 0, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 0, 1248, 0, 0, 0, 1249, 0, 0, 1250, 0, 0, 0, 0, 0, 0, 1251, 0, 0, - 1252, 0, 0, 1253, 0, 1254, 0, 0, 1255, 0, 1256, 0, 1257, 0, 1258, 0, 0, 1259, 0, 1260, 0, 0, 0, 1261, 0, 0, 1262, 0, 1263, 0, 1264, 0, - 1265, 0, 1266, 0, 1267, 0, 0, 1268, 0, 1269, 0, 0, 0, 1270, 0, 0, 0, 1271, 0, 1272, 0, 0, 1273, 0, 1274, 0, 0, 1275, 0, 1276, 0, 0, - 1277, 0, 1278, 0, 1279, 0, 1280, 0, 0, 0, 1281, 0, 1282, 0, 1283, 0, 1284, 0, 1285, 0, 1286, 0, 1287, 0, 0, 0, 0, 1288, 0, 0, 0, 0, - 0, 0, 1289, 0, 1290, 0, 1291, 0, 1292, 0, 0, 0, 0, 0, 0, 1293, 0, 1294, 0, 0, 0, 0, 1295, 0, 1296, 0, 0, 0, 0, 1297, 1298, 0, - 0, 1299, 0, 0, 1300, 0, 0, 0, 0, 0, 0, 1301, 0, 1302, 0, 0, 0, 0, 0, 0, 1303, 0, 1304, 0, 0, 0, 0, 0, 0, 1305, 0, 1306, - 0, 0, 1307, 0, 1308, 0, 1309, 0, 1310, 0, 1311, 0, 1312, 0, 0, 1313, 0, 1314, 0, 0, 0, 0, 1315, 0, 1316, 0, 1317, 0, 1318, 0, 0, 1319, - 0, 1320, 0, 0, 1321, 0, 1322, 0, 0, 0, 0, 0, 0, 0, 0, 1323, 0, 1324, 0, 0, 1325, 0, 1326, 0, 1327, 0, 0, 0, 1328, 0, 1329, 0, - 1330, 0, 1331, 0, 1332, 0, 1333, 0, 0, 0, 1334, 0, 1335, 0, 1336, 0, 0, 0, 1337, 0, 0, 1338, 0, 1339, 0, 0, 1340, 0, 1341, 0, 0, 0, - 1342, 0, 1343, 0, 1344, 0, 1345, 0, 0, 0, 0, 0, 0, 1346, 0, 0, 1347, 0, 1348, 0, 1349, 0, 0, 0, 1350, 0, 1351, 0, 0, 1352, 0, 0, - 1353, 0, 0, 1354, 0, 1355, 0, 0, 1356, 0, 1357, 0, 0, 1358, 1359, 0, 1360, 0, 0, 1361, 0, 1362, 0, 1363, 0, 1364, 0, 1365, 0, 1366, 0, 0, - 0, 1367, 0, 1368, 0, 1369, 0, 1370, 0, 1371, 0, 1372, 0, 1373, 0, 1374, 0, 0, 1375, 0, 1376, 0, 0, 0, 1377, 0, 1378, 0, 1379, 0, 1380, 0, - 1381, 0, 0, 0, 1382, 0, 1383, 0, 1384, 0, 1385, 0, 1386, 0, 1387, 0, 1388, 0, 1389, 0, 1390, 0, 1391, 0, 0, 1392, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0177[64] = { + 0xAAAAAB5240A22511ull, 0x22A44A28A80000AAull, 0x455552A529512AA2ull, 0x08521295484AA555ull, + 0x004804552AA528AAull, 0xA8A448AA05512108ull, 0x954A049545555140ull, 0xA24AA4A28A4A9152ull, + 0x24AA1404A912454Aull, 0x85002A494A02AAA5ull, 0x0A51428AA8AAAAAAull, 0x042084000204AA15ull, + 0x2200841100420840ull, 0x1120544929504404ull, 0x4AA2022142A22A0Aull, 0x55040128A22AA8A9ull, + 0xA551451455451451ull, 0x294A4554AAA51444ull, 0x4AAAA2A0A489504Aull, 0x45148444AA28A554ull, + 0x2A54454A14454A11ull, 0x61292122A22A5162ull, 0x28288A28AA915555ull, 0x55541454A9555555ull, + 0x54AAA1452A952AAAull, 0x482A909451528AAAull, 0x5512955554015489ull, 0x8A8A9552AAA9554Aull, + 0x555554A2A2AA2AA0ull, 0xAD6044A4A95555A5ull, 0x594AAAA8A94A8A28ull, 0xA51454A545145551ull, + 0xA8A2A950B4AA552Aull, 0x5521045452A90408ull, 0x1524A0A28A0A2541ull, 0x890152A0AA445552ull, + 0x85452AAA9228A2AAull, 0x29282A9548911544ull, 0x148902100048A82Aull, 0xA14454A8A5520655ull, + 0x4948089052912228ull, 0x00549289052950A8ull, 0x88AA8AAAA8542AAAull, 0xA52505045150A852ull, + 0x40A1281129494142ull, 0x0A254515004A1028ull, 0x9408A54A5414A82Aull, 0x28A94512A2541204ull, + 0x14248910A2AA2892ull, 0x128922A445490845ull, 0x295554A905144A85ull, 0x9555502A82A95225ull, + 0x14A5294AAAAA294Aull, 0xA5000A54A8000000ull, 0x1204200091551054ull, 0x114AA40C940AAA29ull, + 0x2424002012004495ull, 0x204880805892C92Aull, 0x294A2295548A5529ull, 0x6142815408555455ull, + 0x95429554A0502812ull, 0x14A4545551528052ull, 0x2AA9652925152055ull, 0x025555515514AAAAull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0177[64] = { + 1u, 26u, 43u, 69u, 92u, 112u, 132u, 155u, 179u, 200u, 221u, 246u, 259u, 269u, 286u, 305u, + 326u, 350u, 374u, 397u, 419u, 441u, 463u, 487u, 515u, 542u, 565u, 589u, 617u, 643u, 671u, 697u, + 722u, 749u, 768u, 788u, 810u, 835u, 857u, 872u, 896u, 914u, 933u, 959u, 980u, 998u, 1015u, 1037u, + 1057u, 1077u, 1097u, 1121u, 1146u, 1172u, 1184u, 1199u, 1221u, 1234u, 1252u, 1277u, 1299u, 1320u, 1342u, 1367u, }; void recomp_unit_0177_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0177_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AC8000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0177[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0177[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0177[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AC8000; @@ -1567,7 +1474,6 @@ L_08AC8000: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2196), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8034; } @@ -1582,7 +1488,6 @@ L_08AC8010: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8020: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8034; } @@ -1607,14 +1512,34 @@ L_08AC8044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC8054: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC805C: aot_gpr_5 = (aot_gpr_5 << 16u); ctx.gpr[7] = (ctx.gpr[6] << 16u); @@ -1622,7 +1547,6 @@ L_08AC805C: aot_gpr_5 = (static_cast(static_cast(ctx.gpr[7]) >> 16u)); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4199))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AC8098; } @@ -1631,7 +1555,6 @@ L_08AC805C: L_08AC8078: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1140)))))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AC8090; } @@ -1640,7 +1563,6 @@ L_08AC8078: L_08AC8084: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1146)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC80A0; } @@ -1667,109 +1589,258 @@ L_08AC80A0: goto L_08AC80A4; L_08AC80A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80AC: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2060))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80B4: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2236))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80BC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2240))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80C4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2240), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80CC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80D4: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2256))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80DC: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2260), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80E4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(2264), std::bit_cast(aot_fpr_12)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80EC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2274))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80F4: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(2274), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC80FC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC8104: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC810C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC8114: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC811C: ctx.gpr[29] = (ctx.gpr[29] + static_cast(-1344)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(464))); @@ -1781,7 +1852,6 @@ L_08AC811C: { const std::uint32_t aot_run_words[8]{ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(ctx.gpr[29] + static_cast(1304), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC81A4; } @@ -1794,7 +1864,6 @@ L_08AC816C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8174: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC818C; } @@ -1804,7 +1873,6 @@ L_08AC817C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC81A4; } @@ -1829,7 +1897,6 @@ L_08AC81A4: L_08AC81AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC81D4; } @@ -1839,7 +1906,6 @@ L_08AC81B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 37u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC822C; } @@ -1848,7 +1914,6 @@ L_08AC81B8: L_08AC81C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC822C; } @@ -1861,7 +1926,6 @@ L_08AC81D4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC81DC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC8214; } @@ -1871,7 +1935,6 @@ L_08AC81E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8214; } @@ -1881,7 +1944,6 @@ L_08AC81F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 51u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8214; } @@ -1891,7 +1953,6 @@ L_08AC8204: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC822C; } @@ -1904,7 +1965,6 @@ L_08AC8214: AOT_REGCACHE_SYNC_OUT(); return; L_08AC821C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC8234; } @@ -1912,7 +1972,6 @@ L_08AC821C: } L_08AC8224: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC829C; } @@ -1920,7 +1979,6 @@ L_08AC8224: } L_08AC822C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1929,7 +1987,6 @@ L_08AC822C: L_08AC8234: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8258; } @@ -1944,7 +2001,6 @@ L_08AC8240: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC82B0; } @@ -1958,7 +2014,6 @@ L_08AC8258: L_08AC8260: aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC8280; } @@ -1972,7 +2027,6 @@ L_08AC826C: L_08AC8274: aot_gpr_4 = (0u | 18u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC8288; } @@ -1991,7 +2045,6 @@ L_08AC8288: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2014,7 +2067,6 @@ L_08AC82B0: goto L_08AC8054; L_08AC82B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8380; } @@ -2031,7 +2083,6 @@ L_08AC82C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC82D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC833C; } @@ -2050,7 +2101,6 @@ L_08AC82E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC833C; } @@ -2067,7 +2117,6 @@ L_08AC8300: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8308: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC833C; } @@ -2095,7 +2144,6 @@ L_08AC8328: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8358; } @@ -2132,7 +2180,6 @@ L_08AC836C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC83D0; } @@ -2145,7 +2192,6 @@ L_08AC8380: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8388: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC83D0; } @@ -2204,11 +2250,20 @@ L_08AC83EC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(14608))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AC8404: aot_gpr_31 = (0x08AC840Cu); aot_gpr_4 = (aot_gpr_17 | 0u); @@ -2216,7 +2271,6 @@ L_08AC8404: AOT_REGCACHE_SYNC_OUT(); return; L_08AC840C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8448; } @@ -2231,7 +2285,6 @@ L_08AC841C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC845C; } @@ -2250,7 +2303,6 @@ L_08AC8434: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8440: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC845C; } @@ -2269,7 +2321,6 @@ L_08AC8454: AOT_REGCACHE_SYNC_OUT(); return; L_08AC845C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2282,7 +2333,6 @@ L_08AC8464: AOT_REGCACHE_SYNC_OUT(); return; L_08AC846C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8490; } @@ -2301,7 +2351,6 @@ L_08AC8480: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8660; } @@ -2309,14 +2358,12 @@ L_08AC8488: } L_08AC8490: aot_gpr_31 = (0x08AC8498u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8498u) goto L_08AC8498; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8498: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1752))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8660; } @@ -2361,7 +2408,6 @@ L_08AC850C: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8618; } @@ -2378,7 +2424,6 @@ L_08AC8520: L_08AC8534: aot_gpr_4 = (0u | 36u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC8558; } @@ -2388,7 +2433,6 @@ L_08AC8540: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8558; } @@ -2396,7 +2440,6 @@ L_08AC8540: } L_08AC8550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC85FC; } @@ -2417,7 +2460,6 @@ L_08AC8568: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[19] | 0u); if (branch_taken) { @@ -2432,7 +2474,6 @@ L_08AC8584: AOT_REGCACHE_SYNC_OUT(); return; L_08AC858C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC859C; } @@ -2440,7 +2481,6 @@ L_08AC858C: } L_08AC8594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC85FC; } @@ -2479,9 +2519,7 @@ L_08AC85D4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC85DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC85FC; } @@ -2503,7 +2541,6 @@ L_08AC85FC: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC8520; } @@ -2511,7 +2548,6 @@ L_08AC85FC: } L_08AC8618: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC8638; } @@ -2526,7 +2562,6 @@ L_08AC8620: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8650; } @@ -2544,7 +2579,6 @@ L_08AC8640: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8648: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2552,7 +2586,6 @@ L_08AC8648: } L_08AC8650: aot_gpr_31 = (0x08AC8658u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8658u) goto L_08AC8658; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8658: @@ -2561,7 +2594,6 @@ L_08AC8658: goto L_08AC8660; L_08AC8660: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2576,7 +2608,6 @@ L_08AC8668: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8678: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC86D8; } @@ -2594,7 +2625,6 @@ L_08AC8688: L_08AC8690: aot_gpr_4 = (aot_gpr_16 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC86D8; } @@ -2618,7 +2648,6 @@ L_08AC86A8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC86C4: aot_gpr_31 = (0x08AC86CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC86CCu) goto L_08AC86CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC86CC: @@ -2628,7 +2657,6 @@ L_08AC86CC: goto L_08AC80C4; L_08AC86D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2641,7 +2669,6 @@ L_08AC86E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC86E8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC8704; } @@ -2655,7 +2682,6 @@ L_08AC86F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC86FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2669,7 +2695,6 @@ L_08AC8704: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2684,7 +2709,6 @@ L_08AC8720: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8744; } @@ -2698,7 +2722,6 @@ L_08AC8730: AOT_REGCACHE_SYNC_OUT(); return; L_08AC873C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2712,7 +2735,6 @@ L_08AC8744: L_08AC874C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC879C; } @@ -2721,7 +2743,6 @@ L_08AC874C: L_08AC8758: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC87B4; } @@ -2729,14 +2750,12 @@ L_08AC8758: } L_08AC8764: aot_gpr_31 = (0x08AC876Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC876Cu) goto L_08AC876C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC876C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC87B4; } @@ -2744,7 +2763,6 @@ L_08AC876C: } L_08AC877C: aot_gpr_31 = (0x08AC8784u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8784u) goto L_08AC8784; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8784: @@ -2776,7 +2794,6 @@ L_08AC87A8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC87B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2788,7 +2805,6 @@ L_08AC87BC: goto L_08AC8054; L_08AC87C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC87FC; } @@ -2815,7 +2831,6 @@ L_08AC87E4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC87F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC886C; } @@ -2833,7 +2848,6 @@ L_08AC8804: L_08AC880C: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC886C; } @@ -2852,7 +2866,6 @@ L_08AC8828: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC886C; } @@ -2885,7 +2898,6 @@ L_08AC8860: AOT_REGCACHE_SYNC_OUT(); return; L_08AC886C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2899,7 +2911,6 @@ L_08AC8874: L_08AC887C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC88C4; } @@ -2911,9 +2922,7 @@ L_08AC8888: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC88C4; } @@ -2921,7 +2930,6 @@ L_08AC8888: } L_08AC88A8: aot_gpr_31 = (0x08AC88B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC88B0u) goto L_08AC88B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC88B0: @@ -2934,7 +2942,6 @@ L_08AC88B0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC88C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2947,7 +2954,6 @@ L_08AC88CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC88D4: aot_gpr_31 = (0x08AC88DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC88DCu) goto L_08AC88DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC88DC: @@ -2977,7 +2983,6 @@ L_08AC8900: L_08AC8908: aot_gpr_4 = (0u | 19u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC896C; } @@ -2985,7 +2990,6 @@ L_08AC8908: } L_08AC8914: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC896C; } @@ -2998,7 +3002,6 @@ L_08AC891C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8924: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC896C; } @@ -3016,7 +3019,6 @@ L_08AC8934: AOT_REGCACHE_SYNC_OUT(); return; L_08AC893C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC896C; } @@ -3035,7 +3037,6 @@ L_08AC8944: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8B2C; } @@ -3044,7 +3045,6 @@ L_08AC8964: L_08AC896C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8B2C; } @@ -3052,7 +3052,6 @@ L_08AC896C: } L_08AC8978: aot_gpr_31 = (0x08AC8980u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8980u) goto L_08AC8980; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8980: @@ -3069,7 +3068,6 @@ L_08AC898C: L_08AC8998: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC8B2C; } @@ -3094,9 +3092,7 @@ L_08AC89B4: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC8A04; } @@ -3104,7 +3100,6 @@ L_08AC89B4: } L_08AC89E0: aot_gpr_31 = (0x08AC89E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC89E8u) goto L_08AC89E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC89E8: @@ -3117,7 +3112,6 @@ L_08AC89E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC89FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8B2C; } @@ -3130,7 +3124,6 @@ L_08AC8A04: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8A0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8A9C; } @@ -3143,7 +3136,6 @@ L_08AC8A14: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8A1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8A3C; } @@ -3161,7 +3153,6 @@ L_08AC8A2C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8A34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8A9C; } @@ -3174,7 +3165,6 @@ L_08AC8A3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8A44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8A6C; } @@ -3194,7 +3184,6 @@ L_08AC8A5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8A9C; } @@ -3207,7 +3196,6 @@ L_08AC8A6C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8A74: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8AC0; } @@ -3227,7 +3215,6 @@ L_08AC8A8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8AC0; } @@ -3235,7 +3222,6 @@ L_08AC8A8C: } L_08AC8A9C: aot_gpr_31 = (0x08AC8AA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8AA4u) goto L_08AC8AA4; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8AA4: @@ -3248,7 +3234,6 @@ L_08AC8AA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8AB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8B2C; } @@ -3258,7 +3243,6 @@ L_08AC8AC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8B08; } @@ -3272,7 +3256,6 @@ L_08AC8AD0: L_08AC8AD8: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC8B2C; } @@ -3280,7 +3263,6 @@ L_08AC8AD8: } L_08AC8AE4: aot_gpr_31 = (0x08AC8AECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8AECu) goto L_08AC8AEC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8AEC: @@ -3293,7 +3275,6 @@ L_08AC8AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3301,7 +3282,6 @@ L_08AC8B00: } L_08AC8B08: aot_gpr_31 = (0x08AC8B10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8B10u) goto L_08AC8B10; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8B10: @@ -3314,7 +3294,6 @@ L_08AC8B10: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3322,7 +3301,6 @@ L_08AC8B24: } L_08AC8B2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3336,7 +3314,6 @@ L_08AC8B34: L_08AC8B3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8F0C; } @@ -3520,7 +3497,6 @@ L_08AC8D28: ctx.gpr[19] = (ctx.gpr[30] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC8E44; } @@ -3548,7 +3524,6 @@ L_08AC8D58: L_08AC8D60: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AC8E34; } @@ -3572,7 +3547,6 @@ L_08AC8D80: L_08AC8D8C: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC8E2C; } @@ -3582,7 +3556,6 @@ L_08AC8D98: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8E2C; } @@ -3603,9 +3576,7 @@ L_08AC8DB8: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC8E2C; } @@ -3641,7 +3612,6 @@ L_08AC8E0C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(1272))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[29] + static_cast(1276))); if (branch_taken) { @@ -3655,7 +3625,6 @@ L_08AC8E24: goto L_08AC8E2C; L_08AC8E2C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08AC8D6C; } @@ -3665,7 +3634,6 @@ L_08AC8E34: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8D38; } @@ -3675,7 +3643,6 @@ L_08AC8E44: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8D28; } @@ -3683,7 +3650,6 @@ L_08AC8E44: } L_08AC8E54: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AC8F0C; } @@ -3699,7 +3665,6 @@ L_08AC8E64: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_2) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8F00; } @@ -3707,7 +3672,6 @@ L_08AC8E64: } L_08AC8E78: aot_gpr_31 = (0x08AC8E80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8E80u) goto L_08AC8E80; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8E80: @@ -3758,7 +3722,6 @@ L_08AC8EDC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8EE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8EF8; } @@ -3771,7 +3734,6 @@ L_08AC8EEC: goto L_08AC8EF8; L_08AC8EF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC8F0C; } @@ -3785,7 +3747,6 @@ L_08AC8F00: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8F0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3793,14 +3754,12 @@ L_08AC8F0C: } L_08AC8F14: aot_gpr_31 = (0x08AC8F1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC8F1Cu) goto L_08AC8F1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC8F1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1728))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC8FE0; } @@ -3813,7 +3772,6 @@ L_08AC8F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8F34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8F74; } @@ -3826,7 +3784,6 @@ L_08AC8F3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8F44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC8F74; } @@ -3863,7 +3820,6 @@ L_08AC8F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC8FE0; } @@ -3904,7 +3860,6 @@ L_08AC8FC8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3917,7 +3872,6 @@ L_08AC8FE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC8FF0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9058; } @@ -3932,7 +3886,6 @@ L_08AC9000: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 29u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9058; } @@ -3947,7 +3900,6 @@ L_08AC9018: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9058; } @@ -3962,7 +3914,6 @@ L_08AC9030: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9058; } @@ -3982,7 +3933,6 @@ L_08AC9048: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9058: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -3995,7 +3945,6 @@ L_08AC9060: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9068: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC915C; } @@ -4003,14 +3952,12 @@ L_08AC9068: } L_08AC9070: aot_gpr_31 = (0x08AC9078u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9078u) goto L_08AC9078; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9078: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_2 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC90D8; } @@ -4025,7 +3972,6 @@ L_08AC9090: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 28u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4040,7 +3986,6 @@ L_08AC90A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4060,7 +4005,6 @@ L_08AC90C0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC90D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4073,7 +4017,6 @@ L_08AC90D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC90E0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4087,7 +4030,6 @@ L_08AC90E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC90F4: aot_gpr_31 = (0x08AC90FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 949u, 0x08AC7810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC90FCu) goto L_08AC90FC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC90FC: @@ -4116,7 +4058,6 @@ L_08AC9118: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9128: aot_gpr_31 = (0x08AC9130u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9130u) goto L_08AC9130; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9130: @@ -4128,7 +4069,6 @@ L_08AC9130: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9140: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4142,7 +4082,6 @@ L_08AC9148: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9154: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4165,7 +4104,6 @@ L_08AC916C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9174: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9188; } @@ -4179,7 +4117,6 @@ L_08AC917C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4191,7 +4128,6 @@ L_08AC9190: goto L_08AC8054; L_08AC9198: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC91CC; } @@ -4199,14 +4135,12 @@ L_08AC9198: } L_08AC91A0: aot_gpr_31 = (0x08AC91A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC91A8u) goto L_08AC91A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AC91A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC91D8; } @@ -4220,7 +4154,6 @@ L_08AC91B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC91C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC91D8; } @@ -4234,7 +4167,6 @@ L_08AC91CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC91D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4248,7 +4180,6 @@ L_08AC91E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC91EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4263,7 +4194,6 @@ L_08AC91F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9204: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9238; } @@ -4286,7 +4216,6 @@ L_08AC9218: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9294; } @@ -4300,7 +4229,6 @@ L_08AC9238: L_08AC9240: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC927C; } @@ -4327,7 +4255,6 @@ L_08AC9268: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9274: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9294; } @@ -4344,7 +4271,6 @@ L_08AC927C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9294: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4359,7 +4285,6 @@ L_08AC92A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC92BC; } @@ -4367,7 +4292,6 @@ L_08AC92A4: } L_08AC92B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4380,7 +4304,6 @@ L_08AC92BC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC92C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC95F8; } @@ -4393,7 +4316,6 @@ L_08AC92CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC92D4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC933C; } @@ -4419,7 +4341,6 @@ L_08AC92F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC933C; } @@ -4442,7 +4363,6 @@ L_08AC9318: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9320: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9334; } @@ -4456,7 +4376,6 @@ L_08AC9328: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4466,7 +4385,6 @@ L_08AC933C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(640))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC93BC; } @@ -4481,7 +4399,6 @@ L_08AC9354: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC93BC; } @@ -4499,7 +4416,6 @@ L_08AC936C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9374: aot_gpr_31 = (0x08AC937Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 949u, 0x08AC7810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC937Cu) goto L_08AC937C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC937C: @@ -4540,7 +4456,6 @@ L_08AC93A8: L_08AC93BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC95F8; } @@ -4548,14 +4463,12 @@ L_08AC93BC: } L_08AC93C8: aot_gpr_31 = (0x08AC93D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC93D0u) goto L_08AC93D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AC93D0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC95F8; } @@ -4570,7 +4483,6 @@ L_08AC93E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC95F4; } @@ -4585,7 +4497,6 @@ L_08AC9400: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC95F4; } @@ -4615,7 +4526,6 @@ L_08AC942C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9438: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9470; } @@ -4630,7 +4540,6 @@ L_08AC9448: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC9470; } @@ -4644,7 +4553,6 @@ L_08AC9458: goto L_08AC80F4; L_08AC9468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9514; } @@ -4655,7 +4563,6 @@ L_08AC9470: aot_gpr_5 = (2u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC9514; } @@ -4674,7 +4581,6 @@ L_08AC948C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9498: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC94D0; } @@ -4689,7 +4595,6 @@ L_08AC94A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC94D0; } @@ -4703,7 +4608,6 @@ L_08AC94B8: goto L_08AC80F4; L_08AC94C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9514; } @@ -4722,7 +4626,6 @@ L_08AC94D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC94E4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9514; } @@ -4737,7 +4640,6 @@ L_08AC94F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC9514; } @@ -4761,7 +4663,6 @@ L_08AC9520: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC957C; } @@ -4780,7 +4681,6 @@ L_08AC9538: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9544: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9574; } @@ -4795,7 +4695,6 @@ L_08AC9554: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC9574; } @@ -4817,7 +4716,6 @@ L_08AC9574: } L_08AC957C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC95F4; } @@ -4883,7 +4781,6 @@ L_08AC95F8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9600: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9B98; } @@ -4896,7 +4793,6 @@ L_08AC9608: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9610: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9B98; } @@ -4914,7 +4810,6 @@ L_08AC9620: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9628: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9638; } @@ -4922,7 +4817,6 @@ L_08AC9628: } L_08AC9630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4930,14 +4824,12 @@ L_08AC9630: } L_08AC9638: aot_gpr_31 = (0x08AC9640u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9640u) goto L_08AC9640; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9640: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1728))); aot_gpr_4 = (aot_gpr_2 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC9664; } @@ -4951,7 +4843,6 @@ L_08AC9650: AOT_REGCACHE_SYNC_OUT(); return; L_08AC965C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -4964,7 +4855,6 @@ L_08AC9664: AOT_REGCACHE_SYNC_OUT(); return; L_08AC966C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -4979,7 +4869,6 @@ L_08AC967C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -4994,7 +4883,6 @@ L_08AC9694: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5009,7 +4897,6 @@ L_08AC96AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 22u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5019,7 +4906,6 @@ L_08AC96BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(640))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AC97C8; } @@ -5034,9 +4920,7 @@ L_08AC96D4: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC9708; } @@ -5050,7 +4934,6 @@ L_08AC96EC: L_08AC96F4: aot_gpr_4 = (0u | 18u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9720; } @@ -5058,7 +4941,6 @@ L_08AC96F4: } L_08AC9700: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5076,7 +4958,6 @@ L_08AC9710: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5094,7 +4975,6 @@ L_08AC9728: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9730: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5107,7 +4987,6 @@ L_08AC9738: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9740: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5131,7 +5010,6 @@ L_08AC9758: L_08AC9760: aot_gpr_4 = (0u | 9u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5154,7 +5032,6 @@ L_08AC977C: goto L_08AC8054; L_08AC9788: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5196,7 +5073,6 @@ L_08AC97C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC97D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5214,7 +5090,6 @@ L_08AC97E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC97E8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5228,7 +5103,6 @@ L_08AC97F0: L_08AC97F8: aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5246,7 +5120,6 @@ L_08AC980C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9814: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5275,7 +5148,6 @@ L_08AC9834: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9840: { const bool branch_taken = aot_gpr_16 != aot_gpr_2; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5288,7 +5160,6 @@ L_08AC9848: L_08AC9850: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9880; } @@ -5311,7 +5182,6 @@ L_08AC986C: L_08AC9874: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC98B4; } @@ -5353,7 +5223,6 @@ L_08AC98BC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC98C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC98E8; } @@ -5372,7 +5241,6 @@ L_08AC98D4: L_08AC98DC: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC990C; } @@ -5391,7 +5259,6 @@ L_08AC98F0: L_08AC98F8: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9924; } @@ -5399,7 +5266,6 @@ L_08AC98F8: } L_08AC9904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9958; } @@ -5417,7 +5283,6 @@ L_08AC9914: AOT_REGCACHE_SYNC_OUT(); return; L_08AC991C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5432,7 +5297,6 @@ L_08AC992C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9958; } @@ -5451,7 +5315,6 @@ L_08AC9944: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9988; } @@ -5466,7 +5329,6 @@ L_08AC9960: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9988; } @@ -5492,7 +5354,6 @@ L_08AC9988: L_08AC9990: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC99BC; } @@ -5503,7 +5364,6 @@ L_08AC999C: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AC99BC; } @@ -5522,7 +5382,6 @@ L_08AC99BC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC99C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9B54; } @@ -5537,9 +5396,7 @@ L_08AC99D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(636))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC9B54; } @@ -5582,7 +5439,6 @@ L_08AC9A28: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9A30: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9B4C; } @@ -5601,9 +5457,7 @@ L_08AC9A40: aot_fpr_13 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC9B4C; } @@ -5621,7 +5475,6 @@ L_08AC9A70: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9A78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9ABC; } @@ -5639,7 +5492,6 @@ L_08AC9A88: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9A90: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9ABC; } @@ -5652,7 +5504,6 @@ L_08AC9A98: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9AA0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9ABC; } @@ -5676,7 +5527,6 @@ L_08AC9ABC: L_08AC9AC4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9B20; } @@ -5686,7 +5536,6 @@ L_08AC9AD0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(640))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9B20; } @@ -5699,7 +5548,6 @@ L_08AC9AE0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9AE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9B04; } @@ -5713,7 +5561,6 @@ L_08AC9AF0: L_08AC9AF8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC9B20; } @@ -5732,7 +5579,6 @@ L_08AC9B0C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9B18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9B4C; } @@ -5755,7 +5601,6 @@ L_08AC9B30: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9B38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9B4C; } @@ -5769,7 +5614,6 @@ L_08AC9B40: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9B4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5782,7 +5626,6 @@ L_08AC9B54: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9B5C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5805,7 +5648,6 @@ L_08AC9B74: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9B7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5819,7 +5661,6 @@ L_08AC9B84: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9B90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5832,7 +5673,6 @@ L_08AC9B98: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9BA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9BE4; } @@ -5851,7 +5691,6 @@ L_08AC9BB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9BBC: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08AC9BE4; } @@ -5871,7 +5710,6 @@ L_08AC9BCC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5886,7 +5724,6 @@ L_08AC9BEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9C14; } @@ -5903,7 +5740,6 @@ L_08AC9BFC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5916,7 +5752,6 @@ L_08AC9C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9C24: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9C7C; } @@ -5931,7 +5766,6 @@ L_08AC9C34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9C74; } @@ -5944,7 +5778,6 @@ L_08AC9C44: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9C4C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9C74; } @@ -5969,7 +5802,6 @@ L_08AC9C64: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9C74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5977,14 +5809,12 @@ L_08AC9C74: } L_08AC9C7C: aot_gpr_31 = (0x08AC9C84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9C84u) goto L_08AC9C84; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9C84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1728))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -5992,7 +5822,6 @@ L_08AC9C84: } L_08AC9C94: aot_gpr_31 = (0x08AC9C9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9C9Cu) goto L_08AC9C9C; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9C9C: @@ -6011,7 +5840,6 @@ L_08AC9CA8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9CB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9D30; } @@ -6024,7 +5852,6 @@ L_08AC9CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9CC0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9D30; } @@ -6042,7 +5869,6 @@ L_08AC9CD0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9CD8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9CE8; } @@ -6068,7 +5894,6 @@ L_08AC9CF0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9CF8: { const bool branch_taken = aot_gpr_2 == aot_gpr_17; - // nop if (branch_taken) { goto L_08AC9D20; } @@ -6087,7 +5912,6 @@ L_08AC9D08: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9D14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AC9D20; } @@ -6098,7 +5922,6 @@ L_08AC9D1C: goto L_08AC9D20; L_08AC9D20: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AC9DEC; } @@ -6127,7 +5950,6 @@ L_08AC9D38: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9D40: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9DE8; } @@ -6140,7 +5962,6 @@ L_08AC9D48: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9D50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9DE8; } @@ -6154,7 +5975,6 @@ L_08AC9D58: L_08AC9D60: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9DE0; } @@ -6173,7 +5993,6 @@ L_08AC9D74: L_08AC9D7C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9DE0; } @@ -6208,9 +6027,7 @@ L_08AC9DB8: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AC9DD8; } @@ -6221,7 +6038,6 @@ L_08AC9DD4: goto L_08AC9DD8; L_08AC9DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9DEC; } @@ -6240,7 +6056,6 @@ L_08AC9DE8: goto L_08AC9DEC; L_08AC9DEC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AC9E94; } @@ -6255,7 +6070,6 @@ L_08AC9DFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -6270,7 +6084,6 @@ L_08AC9E14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -6285,7 +6098,6 @@ L_08AC9E2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -6304,7 +6116,6 @@ L_08AC9E44: L_08AC9E4C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9E74; } @@ -6323,7 +6134,6 @@ L_08AC9E60: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9E6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -6343,7 +6153,6 @@ L_08AC9E7C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9E8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -6351,7 +6160,6 @@ L_08AC9E8C: } L_08AC9E94: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AC9EA4; } @@ -6364,12 +6172,10 @@ L_08AC9E9C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9EA4: aot_gpr_31 = (0x08AC9EACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9EACu) goto L_08AC9EAC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9EAC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9EF0; } @@ -6377,12 +6183,10 @@ L_08AC9EAC: } L_08AC9EB4: aot_gpr_31 = (0x08AC9EBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9EBCu) goto L_08AC9EBC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9EBC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9EF0; } @@ -6390,7 +6194,6 @@ L_08AC9EBC: } L_08AC9EC4: aot_gpr_31 = (0x08AC9ECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9ECCu) goto L_08AC9ECC; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9ECC: @@ -6401,7 +6204,6 @@ L_08AC9ECC: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9ED8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AC9EF0; } @@ -6410,7 +6212,6 @@ L_08AC9ED8: L_08AC9EE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC9EF0; } @@ -6421,7 +6222,6 @@ L_08AC9EEC: goto L_08AC9EF0; L_08AC9EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6429,14 +6229,12 @@ L_08AC9EF0: } L_08AC9EF8: aot_gpr_31 = (0x08AC9F00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AC9F00u) goto L_08AC9F00; AOT_REGCACHE_SYNC_OUT(); return; L_08AC9F00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1728))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6449,7 +6247,6 @@ L_08AC9F10: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9F18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6462,7 +6259,6 @@ L_08AC9F20: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9F28: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6477,7 +6273,6 @@ L_08AC9F38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6492,7 +6287,6 @@ L_08AC9F50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 60u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6507,7 +6301,6 @@ L_08AC9F68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 53u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6526,7 +6319,6 @@ L_08AC9F80: L_08AC9F88: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AC9FB0; } @@ -6545,7 +6337,6 @@ L_08AC9F9C: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6560,7 +6351,6 @@ L_08AC9FB8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AC9FE8; } @@ -6580,7 +6370,6 @@ L_08AC9FD0: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9FE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA090; } @@ -6599,7 +6388,6 @@ L_08AC9FF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AC9FFC: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_08ACA00C; } @@ -6626,7 +6414,6 @@ L_08ACA014: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA020: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_08ACA030; } @@ -6653,7 +6440,6 @@ L_08ACA038: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA044: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_08ACA054; } @@ -6680,7 +6466,6 @@ L_08ACA05C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA068: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_08ACA074; } @@ -6704,7 +6489,6 @@ L_08ACA07C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6718,7 +6502,6 @@ L_08ACA098: L_08ACA0A0: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA0F4; } @@ -6731,7 +6514,6 @@ L_08ACA0AC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA0B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA0F4; } @@ -6746,7 +6528,6 @@ L_08ACA0C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA0EC; } @@ -6766,7 +6547,6 @@ L_08ACA0DC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA0EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6781,7 +6561,6 @@ L_08ACA0FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA1E0; } @@ -6823,7 +6602,6 @@ L_08ACA14C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA154: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACA1E0; } @@ -6837,7 +6615,6 @@ L_08ACA15C: L_08ACA164: aot_gpr_4 = (0u | 11u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA190; } @@ -6856,7 +6633,6 @@ L_08ACA178: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA1A8; } @@ -6887,7 +6663,6 @@ L_08ACA1C0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1364))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(164))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA1E0; } @@ -6900,7 +6675,6 @@ L_08ACA1D4: goto L_08ACA1E0; L_08ACA1E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6912,7 +6686,6 @@ L_08ACA1E8: goto L_08AC8054; L_08ACA1F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA328; } @@ -6965,9 +6738,7 @@ L_08ACA24C: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA318; } @@ -6975,14 +6746,12 @@ L_08ACA24C: } L_08ACA264: aot_gpr_31 = (0x08ACA26Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACA26Cu) goto L_08ACA26C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACA26C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1744))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACA330; } @@ -6997,7 +6766,6 @@ L_08ACA284: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA2B4; } @@ -7012,9 +6780,7 @@ L_08ACA29C: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA2E8; } @@ -7044,7 +6810,6 @@ L_08ACA2D4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA2E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA304; } @@ -7070,7 +6835,6 @@ L_08ACA304: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA330; } @@ -7083,7 +6847,6 @@ L_08ACA318: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA330; } @@ -7096,7 +6859,6 @@ L_08ACA328: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7128,7 +6890,6 @@ L_08ACA364: goto L_08AC8054; L_08ACA36C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA3B8; } @@ -7181,9 +6942,7 @@ L_08ACA3C0: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA404; } @@ -7204,7 +6963,6 @@ L_08ACA3EC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA3FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA528; } @@ -7216,7 +6974,6 @@ L_08ACA404: goto L_08AC8054; L_08ACA40C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA434; } @@ -7235,7 +6992,6 @@ L_08ACA424: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACA4E0; } @@ -7243,14 +6999,12 @@ L_08ACA424: } L_08ACA434: aot_gpr_31 = (0x08ACA43Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACA43Cu) goto L_08ACA43C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACA43C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1736))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACA528; } @@ -7285,7 +7039,6 @@ L_08ACA470: } L_08ACA47C: { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA494; } @@ -7298,7 +7051,6 @@ L_08ACA484: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA48C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACA4A4; } @@ -7311,7 +7063,6 @@ L_08ACA494: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA49C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA4D8; } @@ -7330,7 +7081,6 @@ L_08ACA4AC: L_08ACA4B4: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA4D8; } @@ -7350,7 +7100,6 @@ L_08ACA4C8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA4D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA528; } @@ -7364,9 +7113,7 @@ L_08ACA4E0: L_08ACA4E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA520; } @@ -7387,7 +7134,6 @@ L_08ACA508: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA528; } @@ -7400,7 +7146,6 @@ L_08ACA520: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7436,7 +7181,6 @@ L_08ACA55C: L_08ACA56C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA60C; } @@ -7449,7 +7193,6 @@ L_08ACA578: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA580: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA60C; } @@ -7485,9 +7228,7 @@ L_08ACA5B4: aot_gpr_4 = (17352u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA604; } @@ -7524,7 +7265,6 @@ L_08ACA5F4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7539,9 +7279,7 @@ L_08ACA614: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA7B0; } @@ -7554,7 +7292,6 @@ L_08ACA62C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA634: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACA794; } @@ -7637,9 +7374,7 @@ L_08ACA6E8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA6F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA728; } @@ -7656,7 +7391,6 @@ L_08ACA708: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA710: { const bool branch_taken = aot_gpr_2 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ACA728; } @@ -7678,7 +7412,6 @@ L_08ACA728: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACA6A4; } @@ -7697,7 +7430,6 @@ L_08ACA750: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA758: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACA78C; } @@ -7728,7 +7460,6 @@ L_08ACA77C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA78C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA7A8; } @@ -7747,7 +7478,6 @@ L_08ACA79C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA7A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7755,14 +7485,12 @@ L_08ACA7A8: } L_08ACA7B0: aot_gpr_31 = (0x08ACA7B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACA7B8u) goto L_08ACA7B8; AOT_REGCACHE_SYNC_OUT(); return; L_08ACA7B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACA7FC; } @@ -7772,7 +7500,6 @@ L_08ACA7C8: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(1756), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACA7F4; } @@ -7780,7 +7507,6 @@ L_08ACA7C8: } L_08ACA7D8: aot_gpr_31 = (0x08ACA7E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACA7E0u) goto L_08ACA7E0; AOT_REGCACHE_SYNC_OUT(); return; L_08ACA7E0: @@ -7793,7 +7519,6 @@ L_08ACA7E0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA7F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7803,7 +7528,6 @@ L_08ACA7FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACA814; } @@ -7844,7 +7568,6 @@ L_08ACA840: L_08ACA850: aot_gpr_4 = (0u | 45u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA938; } @@ -7858,7 +7581,6 @@ L_08ACA85C: L_08ACA864: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA8AC; } @@ -7873,9 +7595,7 @@ L_08ACA878: aot_gpr_4 = (16512u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA8AC; } @@ -7899,9 +7619,7 @@ L_08ACA8AC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA8D8; } @@ -7910,7 +7628,6 @@ L_08ACA8AC: L_08ACA8CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACA914; } @@ -7934,9 +7651,7 @@ L_08ACA8EC: L_08ACA8F8: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_0; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAB60; } @@ -7944,7 +7659,6 @@ L_08ACA8F8: } L_08ACA90C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACAFD4; } @@ -7952,7 +7666,6 @@ L_08ACA90C: } L_08ACA914: aot_gpr_31 = (0x08ACA91Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACA91Cu) goto L_08ACA91C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACA91C: @@ -7965,7 +7678,6 @@ L_08ACA91C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACA930: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7979,7 +7691,6 @@ L_08ACA938: L_08ACA940: aot_gpr_4 = (0u | 53u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA8D8; } @@ -7993,7 +7704,6 @@ L_08ACA94C: L_08ACA954: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACA99C; } @@ -8008,9 +7718,7 @@ L_08ACA968: aot_gpr_4 = (16768u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACA99C; } @@ -8030,7 +7738,6 @@ L_08ACA98C: goto L_08ACA99C; L_08ACA99C: aot_gpr_31 = (0x08ACA9A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACA9A4u) goto L_08ACA9A4; AOT_REGCACHE_SYNC_OUT(); return; L_08ACA9A4: @@ -8047,7 +7754,6 @@ L_08ACA9B0: L_08ACA9BC: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08ACAB58; } @@ -8072,9 +7778,7 @@ L_08ACA9D8: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAA50; } @@ -8087,7 +7791,6 @@ L_08ACAA04: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACAA2C; } @@ -8100,7 +7803,6 @@ L_08ACAA14: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA1C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACAA74; } @@ -8108,7 +7810,6 @@ L_08ACAA1C: } L_08ACAA24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACAA8C; } @@ -8116,7 +7817,6 @@ L_08ACAA24: } L_08ACAA2C: aot_gpr_31 = (0x08ACAA34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACAA34u) goto L_08ACAA34; AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA34: @@ -8129,7 +7829,6 @@ L_08ACAA34: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8137,7 +7836,6 @@ L_08ACAA48: } L_08ACAA50: aot_gpr_31 = (0x08ACAA58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACAA58u) goto L_08ACAA58; AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA58: @@ -8150,7 +7848,6 @@ L_08ACAA58: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8168,7 +7865,6 @@ L_08ACAA7C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACAA2C; } @@ -8181,7 +7877,6 @@ L_08ACAA8C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAA94: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACAABC; } @@ -8201,7 +7896,6 @@ L_08ACAAAC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 65u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACAA2C; } @@ -8214,7 +7908,6 @@ L_08ACAABC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAAC4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACAAEC; } @@ -8234,7 +7927,6 @@ L_08ACAADC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACAA2C; } @@ -8244,7 +7936,6 @@ L_08ACAAEC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACAB34; } @@ -8258,7 +7949,6 @@ L_08ACAAFC: L_08ACAB04: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACAB58; } @@ -8266,7 +7956,6 @@ L_08ACAB04: } L_08ACAB10: aot_gpr_31 = (0x08ACAB18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACAB18u) goto L_08ACAB18; AOT_REGCACHE_SYNC_OUT(); return; L_08ACAB18: @@ -8279,7 +7968,6 @@ L_08ACAB18: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAB2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8287,7 +7975,6 @@ L_08ACAB2C: } L_08ACAB34: aot_gpr_31 = (0x08ACAB3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACAB3Cu) goto L_08ACAB3C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACAB3C: @@ -8300,7 +7987,6 @@ L_08ACAB3C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAB50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8308,7 +7994,6 @@ L_08ACAB50: } L_08ACAB58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACA8D8; } @@ -8318,7 +8003,6 @@ L_08ACAB60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACACAC; } @@ -8339,9 +8023,7 @@ L_08ACAB88: ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAC04; } @@ -8356,9 +8038,7 @@ L_08ACABA8: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACABE0; } @@ -8399,7 +8079,6 @@ L_08ACABF4: goto L_08ACABFC; L_08ACABFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACAC74; } @@ -8408,9 +8087,7 @@ L_08ACABFC: L_08ACAC04: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAC74; } @@ -8425,9 +8102,7 @@ L_08ACAC20: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAC58; } @@ -8499,9 +8174,7 @@ L_08ACACB4: L_08ACACC0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1332))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAD44; } @@ -8524,9 +8197,7 @@ L_08ACACDC: L_08ACACF8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1332))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAD44; } @@ -8549,9 +8220,7 @@ L_08ACAD14: L_08ACAD30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1332))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACAFC0; } @@ -8586,7 +8255,6 @@ L_08ACAD80: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAD88: aot_gpr_31 = (0x08ACAD90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACAD90u) goto L_08ACAD90; AOT_REGCACHE_SYNC_OUT(); return; L_08ACAD90: @@ -8598,7 +8266,6 @@ L_08ACAD90: AOT_REGCACHE_SYNC_OUT(); return; L_08ACADA0: aot_gpr_31 = (0x08ACADA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACADA8u) goto L_08ACADA8; AOT_REGCACHE_SYNC_OUT(); return; L_08ACADA8: @@ -8610,7 +8277,6 @@ L_08ACADA8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACADB8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACAFA8; } @@ -8624,7 +8290,6 @@ L_08ACADC0: L_08ACADC8: aot_gpr_4 = (0u | 39u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACAE34; } @@ -8634,7 +8299,6 @@ L_08ACADD4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(464))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACAE0C; } @@ -8656,7 +8320,6 @@ L_08ACADEC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAE04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8678,7 +8341,6 @@ L_08ACAE14: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAE2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8692,7 +8354,6 @@ L_08ACAE34: L_08ACAE3C: aot_gpr_4 = (0u | 40u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACAE70; } @@ -8714,7 +8375,6 @@ L_08ACAE50: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAE68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8728,7 +8388,6 @@ L_08ACAE70: L_08ACAE78: aot_gpr_4 = (0u | 43u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACAEA0; } @@ -8747,7 +8406,6 @@ L_08ACAE8C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAE98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8761,7 +8419,6 @@ L_08ACAEA0: L_08ACAEA8: aot_gpr_4 = (0u | 44u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACAF50; } @@ -8815,7 +8472,6 @@ L_08ACAF08: aot_gpr_4 = (20224u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (20224u << 16u); if (branch_taken) { @@ -8856,7 +8512,6 @@ L_08ACAF50: L_08ACAF58: aot_gpr_4 = (0u | 45u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACAF7C; } @@ -8871,7 +8526,6 @@ L_08ACAF64: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8885,7 +8539,6 @@ L_08ACAF7C: L_08ACAF84: aot_gpr_4 = (0u | 53u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8900,7 +8553,6 @@ L_08ACAF90: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8929,7 +8581,6 @@ L_08ACAFC0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACAFCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8937,14 +8588,12 @@ L_08ACAFCC: } L_08ACAFD4: aot_gpr_31 = (0x08ACAFDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACAFDCu) goto L_08ACAFDC; AOT_REGCACHE_SYNC_OUT(); return; L_08ACAFDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACB004; } @@ -8959,7 +8608,6 @@ L_08ACAFF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACB044; } @@ -8997,7 +8645,6 @@ L_08ACB034: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9010,7 +8657,6 @@ L_08ACB04C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB054: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB07C; } @@ -9030,7 +8676,6 @@ L_08ACB064: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB074: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9077,9 +8722,7 @@ L_08ACB0C8: L_08ACB0D4: { const float fs = ctx.fpr[22]; const float ft = aot_fpr_0; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACB268; } @@ -9087,14 +8730,12 @@ L_08ACB0D4: } L_08ACB0E8: aot_gpr_31 = (0x08ACB0F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACB0F0u) goto L_08ACB0F0; AOT_REGCACHE_SYNC_OUT(); return; L_08ACB0F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACB118; } @@ -9109,7 +8750,6 @@ L_08ACB108: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACB28C; } @@ -9120,7 +8760,6 @@ L_08ACB118: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACB238; } @@ -9153,7 +8792,6 @@ L_08ACB158: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB160: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACB21C; } @@ -9181,7 +8819,6 @@ L_08ACB188: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB194: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB21C; } @@ -9189,7 +8826,6 @@ L_08ACB194: } L_08ACB19C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08ACB1C0; } @@ -9233,9 +8869,7 @@ L_08ACB1E4: goto L_08AC80AC; L_08ACB1F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACB21C; } @@ -9260,7 +8894,6 @@ L_08ACB21C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB224: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB238; } @@ -9292,7 +8925,6 @@ L_08ACB250: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB28C; } @@ -9315,7 +8947,6 @@ L_08ACB280: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB28C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9329,7 +8960,6 @@ L_08ACB294: L_08ACB29C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB07C; } @@ -9337,7 +8967,6 @@ L_08ACB29C: } L_08ACB2A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB04C; } @@ -9349,7 +8978,6 @@ L_08ACB2B0: goto L_08AC8054; L_08ACB2B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBAC4; } @@ -9366,7 +8994,6 @@ L_08ACB2C8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB2D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB338; } @@ -9379,7 +9006,6 @@ L_08ACB2D8: L_08ACB2E0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB338; } @@ -9393,7 +9019,6 @@ L_08ACB2EC: L_08ACB2F4: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB338; } @@ -9401,13 +9026,11 @@ L_08ACB2F4: } L_08ACB300: aot_gpr_31 = (0x08ACB308u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACB308u) goto L_08ACB308; AOT_REGCACHE_SYNC_OUT(); return; L_08ACB308: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(2312))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08ACB338; } @@ -9417,7 +9040,6 @@ L_08ACB314: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACB338; } @@ -9431,7 +9053,6 @@ L_08ACB324: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9445,7 +9066,6 @@ L_08ACB338: L_08ACB340: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB610; } @@ -9458,7 +9078,6 @@ L_08ACB34C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB354: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB610; } @@ -9473,9 +9092,7 @@ L_08ACB364: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACB44C; } @@ -9501,9 +9118,7 @@ L_08ACB394: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACB44C; } @@ -9520,7 +9135,6 @@ L_08ACB3B8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB3C0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB404; } @@ -9537,7 +9151,6 @@ L_08ACB3D0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB3D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB608; } @@ -9560,7 +9173,6 @@ L_08ACB3F0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB3FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB608; } @@ -9602,7 +9214,6 @@ L_08ACB434: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB444: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB608; } @@ -9620,7 +9231,6 @@ L_08ACB454: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB45C: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_08ACB47C; } @@ -9638,7 +9248,6 @@ L_08ACB46C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB474: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB498; } @@ -9657,7 +9266,6 @@ L_08ACB484: L_08ACB48C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB608; } @@ -9671,7 +9279,6 @@ L_08ACB498: L_08ACB4A0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(563))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACB608; } @@ -9696,7 +9303,6 @@ L_08ACB4C0: L_08ACB4C8: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB590; } @@ -9770,7 +9376,6 @@ L_08ACB57C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB5F4; } @@ -9832,7 +9437,6 @@ L_08ACB5FC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9847,9 +9451,7 @@ L_08ACB618: aot_gpr_4 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACBAD8; } @@ -9859,7 +9461,6 @@ L_08ACB630: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACBAD8; } @@ -9871,7 +9472,6 @@ L_08ACB640: goto L_08AC80CC; L_08ACB648: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACBAD8; } @@ -9884,7 +9484,6 @@ L_08ACB650: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB658: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACBA88; } @@ -9967,9 +9566,7 @@ L_08ACB70C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB714: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACB78C; } @@ -9999,7 +9596,6 @@ L_08ACB73C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB744: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB78C; } @@ -10010,9 +9606,7 @@ L_08ACB74C: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACB78C; } @@ -10026,7 +9620,6 @@ L_08ACB768: L_08ACB770: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACB78C; } @@ -10048,7 +9641,6 @@ L_08ACB78C: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACB6C8; } @@ -10067,7 +9659,6 @@ L_08ACB7B4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB7BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB800; } @@ -10113,7 +9704,6 @@ L_08ACB800: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB808: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACBA68; } @@ -10155,7 +9745,6 @@ L_08ACB838: L_08ACB864: aot_gpr_16 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08ACBA68; } @@ -10192,7 +9781,6 @@ L_08ACB894: L_08ACB8C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[29] + static_cast(772)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACBA68; } @@ -10229,7 +9817,6 @@ L_08ACB904: AOT_REGCACHE_SYNC_OUT(); return; L_08ACB90C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACB944; } @@ -10261,7 +9848,6 @@ L_08ACB938: goto L_08ACB93C; L_08ACB93C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACB970; } @@ -10294,7 +9880,6 @@ L_08ACB96C: goto L_08ACB970; L_08ACB970: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ACBA68; } @@ -10376,7 +9961,6 @@ L_08ACBA20: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBA28: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBA68; } @@ -10417,7 +10001,6 @@ L_08ACBA68: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBA70: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBA80; } @@ -10425,7 +10008,6 @@ L_08ACBA70: } L_08ACBA78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10433,7 +10015,6 @@ L_08ACBA78: } L_08ACBA80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACBAD8; } @@ -10490,7 +10071,6 @@ L_08ACBAD8: L_08ACBAE0: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACBB30; } @@ -10504,7 +10084,6 @@ L_08ACBAEC: L_08ACBAF4: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACBB30; } @@ -10517,7 +10096,6 @@ L_08ACBB00: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBB08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBB30; } @@ -10537,7 +10115,6 @@ L_08ACBB18: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBB28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10549,7 +10126,6 @@ L_08ACBB30: goto L_08AC8054; L_08ACBB38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBB58; } @@ -10566,7 +10142,6 @@ L_08ACBB48: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBB50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBB90; } @@ -10594,7 +10169,6 @@ L_08ACBB6C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBB88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10606,7 +10180,6 @@ L_08ACBB90: goto L_08AC8054; L_08ACBB98: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBC58; } @@ -10624,7 +10197,6 @@ L_08ACBBA0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBBBC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBBE0; } @@ -10660,7 +10232,6 @@ L_08ACBBF4: L_08ACBBF8: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACBC34; } @@ -10669,7 +10240,6 @@ L_08ACBBF8: L_08ACBC04: aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACBC58; } @@ -10689,7 +10259,6 @@ L_08ACBC10: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBC2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10709,7 +10278,6 @@ L_08ACBC34: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBC50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 441u, 0x08ACD47Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10729,7 +10297,6 @@ L_08ACBC58: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10748,7 +10315,6 @@ L_08ACBC88: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBC90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBD78; } @@ -10760,7 +10326,6 @@ L_08ACBC98: goto L_08AC8054; L_08ACBCA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBD58; } @@ -10778,7 +10343,6 @@ L_08ACBCB0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBCBC: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08ACBD58; } @@ -10854,7 +10418,6 @@ L_08ACBD44: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBD50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 10u, 0x08ACC078u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10874,7 +10437,6 @@ L_08ACBD60: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBD70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10886,7 +10448,6 @@ L_08ACBD78: goto L_08AC8054; L_08ACBD80: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBE10; } @@ -10905,7 +10466,6 @@ L_08ACBD98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACBE10; } @@ -10924,7 +10484,6 @@ L_08ACBDB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACBE10; } @@ -10933,7 +10492,6 @@ L_08ACBDB8: L_08ACBDC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACBE68; } @@ -10946,7 +10504,6 @@ L_08ACBDD4: L_08ACBDDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACBE68; } @@ -10960,7 +10517,6 @@ L_08ACBDF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1300))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACBE68; } @@ -10973,7 +10529,6 @@ L_08ACBE00: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBE08: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACBE68; } @@ -10999,7 +10554,6 @@ L_08ACBE18: L_08ACBE34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACBE60; } @@ -11012,7 +10566,6 @@ L_08ACBE40: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBE48: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBE60; } @@ -11027,7 +10580,6 @@ L_08ACBE50: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBE60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 395u, 0x08ACD280u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11051,7 +10603,6 @@ L_08ACBE74: L_08ACBE80: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACBEB8; } @@ -11065,7 +10616,6 @@ L_08ACBE8C: L_08ACBE94: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACBEB4; } @@ -11079,7 +10629,6 @@ L_08ACBEA0: L_08ACBEA8: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACBEB8; } @@ -11096,7 +10645,6 @@ L_08ACBEB8: L_08ACBEC0: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACBFC8; } @@ -11104,7 +10652,6 @@ L_08ACBEC0: } L_08ACBECC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08ACBFA8; } @@ -11116,7 +10663,6 @@ L_08ACBED4: goto L_08AC8054; L_08ACBEDC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBF68; } @@ -11135,7 +10681,6 @@ L_08ACBEF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACBF68; } @@ -11152,7 +10697,6 @@ L_08ACBF0C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBF14: { const bool branch_taken = aot_gpr_2 != aot_gpr_16; - // nop if (branch_taken) { goto L_08ACBF68; } @@ -11169,7 +10713,6 @@ L_08ACBF24: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBF2C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBF50; } @@ -11187,7 +10730,6 @@ L_08ACBF3C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBF48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 9u, 0x08ACC05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11202,7 +10744,6 @@ L_08ACBF50: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBF60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 9u, 0x08ACC05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11214,7 +10755,6 @@ L_08ACBF68: goto L_08AC8054; L_08ACBF70: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACBF98; } @@ -11233,7 +10773,6 @@ L_08ACBF80: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBF90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 9u, 0x08ACC05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11246,7 +10785,6 @@ L_08ACBF98: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 9u, 0x08ACC05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11259,7 +10797,6 @@ L_08ACBFA8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBFB0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 9u, 0x08ACC05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11272,7 +10809,6 @@ L_08ACBFB8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACBFC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 9u, 0x08ACC05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11280,7 +10816,6 @@ L_08ACBFC0: } L_08ACBFC8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0178_entry, 178u, 5u, 0x08ACC034u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0178.cpp b/profiles/vcs/generated/generated_unit_0178.cpp index 7731b3a..f7522fb 100644 --- a/profiles/vcs/generated/generated_unit_0178.cpp +++ b/profiles/vcs/generated/generated_unit_0178.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0178[4094] = { - 1, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 10, 0, - 11, 0, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 0, 19, 0, 20, 0, 21, 0, 22, 0, 0, 0, 23, 0, 0, - 0, 24, 0, 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, 27, 0, 0, 28, 0, 29, 0, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 0, - 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 39, 0, 0, 40, 0, 41, 0, 42, 0, 0, 43, 0, 44, 0, - 0, 0, 0, 0, 45, 0, 0, 46, 0, 47, 0, 0, 48, 0, 49, 0, 0, 50, 0, 51, 0, 0, 52, 0, 0, 53, 0, 54, 0, 0, 55, 0, - 56, 0, 0, 57, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, 63, 0, 0, 64, 0, 0, 65, 0, 66, 0, 67, - 0, 0, 68, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 72, 0, 73, 0, 74, 0, 0, 75, 0, 76, 0, 0, 77, 0, 0, 78, 0, - 79, 0, 0, 80, 0, 81, 0, 0, 82, 0, 0, 83, 0, 0, 0, 84, 0, 85, 0, 0, 86, 0, 87, 0, 0, 88, 0, 89, 0, 0, 0, 90, - 0, 0, 91, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 95, 96, 0, 97, 0, 0, 98, 0, 99, 0, 0, 100, 0, 0, 101, 0, - 102, 0, 0, 103, 0, 104, 0, 105, 0, 106, 0, 0, 0, 0, 107, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 110, 0, 0, 111, 0, 0, 0, - 0, 112, 0, 113, 0, 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 116, 0, 0, 117, 0, 118, 0, 0, 119, 0, 0, 0, 0, 120, 0, - 121, 0, 122, 0, 123, 0, 124, 0, 0, 125, 0, 126, 0, 127, 0, 0, 128, 0, 129, 0, 0, 130, 0, 131, 0, 132, 0, 133, 0, 0, 0, 0, - 0, 134, 0, 135, 0, 136, 0, 137, 0, 0, 138, 0, 139, 0, 140, 0, 0, 141, 0, 0, 142, 0, 143, 0, 0, 144, 0, 145, 0, 0, 146, 0, - 147, 0, 0, 0, 148, 0, 0, 0, 149, 0, 150, 0, 151, 0, 152, 0, 0, 0, 0, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 156, - 0, 0, 157, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, - 164, 0, 0, 0, 165, 0, 0, 166, 0, 167, 0, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 175, 0, 0, - 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 0, 181, 0, 0, 0, 182, - 0, 0, 183, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 185, 0, 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, - 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 196, 0, 0, 197, 0, 198, 0, 199, 0, 0, - 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 203, 0, 0, 0, 0, 0, 204, 0, 0, 205, 0, 206, 0, 207, 0, 0, 0, 208, 0, - 209, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 212, 0, 0, 0, 0, 213, 0, 214, 0, 215, 0, 0, 0, 0, 216, 0, 0, 217, 0, - 218, 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 0, 222, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, 227, 0, 228, 0, 0, 0, 229, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, - 0, 0, 236, 0, 0, 0, 237, 0, 0, 238, 0, 239, 0, 0, 0, 240, 0, 241, 0, 242, 0, 243, 0, 0, 244, 245, 0, 0, 0, 0, 0, 0, - 246, 0, 247, 0, 0, 248, 0, 249, 0, 250, 0, 0, 0, 251, 0, 252, 0, 253, 0, 254, 0, 0, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, - 258, 0, 0, 259, 0, 260, 0, 261, 0, 262, 0, 0, 0, 0, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, - 0, 272, 0, 273, 0, 274, 0, 275, 0, 276, 0, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, 280, 0, 281, 0, 282, 0, 0, 283, 0, 284, - 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 292, 0, 293, 0, 0, 0, 294, 0, 295, 0, 296, 0, 0, 0, 297, 0, 0, - 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 0, 304, 0, 305, 0, 306, 0, 307, 0, 0, 308, 0, 309, 0, 0, 310, 0, 0, 0, 311, - 0, 312, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, 0, 0, 316, 0, 317, 0, 318, 0, 319, 0, 0, 0, 320, 0, 0, 0, 0, - 0, 321, 0, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 328, 0, 0, 0, 329, - 0, 330, 0, 0, 0, 331, 0, 0, 332, 0, 333, 0, 0, 334, 0, 335, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 338, 0, 0, 339, 0, 340, - 0, 341, 0, 342, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, - 352, 0, 0, 353, 0, 354, 0, 355, 0, 0, 356, 0, 357, 0, 358, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, - 361, 0, 0, 0, 362, 0, 0, 363, 0, 364, 0, 0, 365, 0, 366, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 369, 0, 370, 0, 371, 0, 0, - 372, 0, 373, 0, 374, 0, 375, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 379, 0, 380, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, - 383, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 387, 0, 388, 0, 389, 0, 0, 0, 390, 0, 391, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, - 395, 0, 0, 0, 396, 0, 0, 397, 0, 398, 0, 0, 0, 399, 0, 0, 400, 0, 0, 401, 0, 402, 0, 403, 404, 0, 0, 405, 0, 406, 0, 0, - 407, 0, 408, 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 411, 0, 412, 0, 0, 0, 0, 0, 413, 0, 414, 0, 415, 0, 416, 0, 0, 0, - 0, 0, 417, 0, 418, 0, 419, 0, 420, 0, 0, 421, 0, 422, 0, 0, 0, 0, 423, 0, 424, 0, 425, 0, 426, 0, 0, 0, 427, 0, 0, 428, - 0, 429, 0, 430, 0, 431, 0, 0, 432, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 440, 0, 441, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, - 0, 445, 0, 446, 0, 0, 447, 0, 448, 0, 449, 0, 450, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 454, 0, 455, 0, 456, 0, 457, 0, 0, - 458, 0, 459, 0, 460, 0, 461, 0, 0, 0, 0, 462, 0, 0, 463, 0, 464, 0, 0, 465, 0, 0, 466, 0, 467, 0, 468, 0, 0, 469, 0, 470, - 0, 0, 0, 471, 0, 0, 472, 0, 473, 0, 0, 474, 0, 475, 0, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 480, 0, - 481, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, - 0, 487, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 490, 0, 491, 0, 492, 0, 493, 0, 494, 0, 495, 0, 0, 496, 0, 497, 0, 498, 0, 499, - 0, 500, 0, 501, 0, 502, 0, 503, 0, 0, 504, 0, 505, 0, 506, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 510, 0, 0, - 511, 0, 512, 0, 513, 0, 0, 514, 0, 515, 0, 0, 516, 0, 0, 0, 0, 517, 0, 518, 0, 519, 0, 0, 520, 0, 0, 0, 0, 521, 0, 522, - 0, 523, 0, 524, 0, 0, 525, 0, 0, 0, 526, 0, 527, 0, 528, 0, 529, 0, 530, 0, 0, 531, 0, 532, 0, 533, 0, 534, 0, 0, 535, 0, - 536, 0, 537, 0, 0, 538, 0, 0, 0, 0, 0, 539, 0, 0, 540, 0, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 0, 0, 546, 0, 547, - 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 556, 0, 0, 557, 0, 0, 558, 0, 559, 0, 0, 560, 0, 561, 0, - 562, 563, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 570, - 0, 0, 0, 571, 572, 0, 573, 0, 574, 0, 575, 0, 576, 0, 577, 0, 578, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 0, 0, 581, 0, 0, - 582, 0, 0, 0, 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, 0, 588, 0, 0, 589, 0, 590, 591, 0, - 592, 0, 0, 593, 0, 0, 594, 0, 0, 595, 0, 596, 0, 0, 597, 0, 0, 598, 0, 0, 599, 0, 0, 600, 0, 0, 601, 0, 602, 0, 0, 603, - 0, 604, 0, 605, 0, 0, 606, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 611, 0, 0, 0, 0, 0, 612, - 0, 0, 0, 0, 0, 613, 0, 614, 0, 615, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 617, 0, 0, 618, 0, 0, 619, 0, 0, 0, 620, 0, - 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 625, 0, 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, - 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 0, 634, 0, 635, 0, 636, 0, - 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 640, 0, 0, 641, 0, 642, 0, 0, 643, 0, - 0, 644, 0, 0, 645, 0, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 0, 648, 0, 649, 0, 0, 650, 0, 0, 651, 0, 0, 652, 0, 653, 0, - 0, 654, 0, 0, 655, 0, 0, 656, 0, 657, 0, 0, 658, 0, 659, 0, 660, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 662, 0, 0, 0, 663, 0, 0, 664, 0, 665, 0, 666, 0, 667, 0, 0, 668, 0, 669, 0, 670, 0, 0, 0, 671, 0, 0, 0, - 0, 0, 672, 0, 0, 673, 0, 674, 0, 0, 0, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 0, 680, 0, 681, 0, 682, 0, 683, 0, 684, 0, - 0, 685, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 0, 690, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 692, 0, 693, 0, 0, 0, 0, - 0, 694, 0, 0, 0, 0, 695, 0, 0, 0, 696, 0, 0, 0, 697, 0, 698, 0, 0, 699, 0, 0, 0, 700, 0, 0, 701, 0, 0, 702, 0, 0, - 0, 703, 0, 0, 704, 0, 0, 705, 0, 0, 0, 706, 0, 0, 707, 0, 0, 708, 0, 0, 0, 709, 0, 0, 710, 0, 0, 711, 0, 0, 0, 0, - 0, 0, 712, 0, 0, 713, 0, 0, 714, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 718, 0, 719, 0, 720, 0, 721, 0, 722, 0, 723, 0, 0, 0, 0, 0, - 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, 0, 730, 0, 731, 0, 732, 0, 0, 733, 0, 734, 735, - 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 738, 0, 0, 739, 0, 740, 0, - 741, 0, 742, 0, 0, 0, 743, 0, 744, 0, 745, 0, 746, 0, 0, 0, 0, 0, 747, 0, 0, 748, 0, 749, 0, 0, 0, 0, 750, 0, 0, 0, - 751, 0, 752, 0, 753, 0, 754, 0, 755, 0, 0, 756, 0, 757, 0, 0, 0, 0, 758, 0, 759, 0, 760, 0, 761, 0, 0, 762, 0, 0, 0, 0, - 0, 0, 763, 0, 764, 0, 765, 0, 0, 766, 0, 767, 768, 0, 769, 0, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 0, 772, 0, 0, 0, 0, - 0, 0, 0, 773, 0, 774, 0, 775, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, - 0, 0, 0, 779, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 782, 0, 783, 0, 784, 0, 0, 785, 0, 0, - 0, 0, 0, 0, 0, 786, 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, - 0, 790, 0, 0, 0, 0, 0, 791, 0, 792, 0, 0, 0, 0, 0, 0, 793, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 795, 0, 796, 797, 0, - 0, 0, 798, 0, 799, 0, 0, 0, 800, 0, 0, 0, 801, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 803, 804, 0, 0, 0, 805, 0, - 0, 0, 0, 0, 0, 806, 807, 0, 0, 0, 808, 0, 809, 0, 0, 0, 810, 0, 811, 0, 0, 0, 812, 0, 0, 0, 813, 0, 0, 0, 814, 0, - 0, 0, 0, 0, 0, 815, 816, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 818, 819, 0, 0, 0, 820, 0, 821, 0, 0, 0, 822, 0, 823, 0, - 0, 0, 824, 0, 0, 0, 825, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, 828, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 830, 831, 0, - 0, 0, 832, 0, 833, 834, 0, 835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 0, 0, - 0, 838, 0, 839, 0, 840, 841, 0, 0, 842, 0, 0, 0, 843, 0, 0, 844, 0, 0, 0, 0, 845, 846, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, 0, - 0, 0, 849, 0, 0, 0, 0, 0, 0, 850, 0, 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 852, 0, - 853, 0, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 856, 0, 0, 0, 857, 0, 0, 858, 0, 859, 0, 860, 0, - 0, 0, 861, 0, 862, 0, 863, 0, 864, 0, 0, 865, 0, 866, 867, 0, 0, 868, 0, 869, 0, 0, 870, 0, 871, 872, 0, 0, 0, 873, 0, 0, - 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 876, 0, 0, 0, 877, 0, 0, 0, 0, 0, 878, 0, 879, 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 881, 0, 0, - 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 884, 0, 0, 0, 885, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 887, 0, 0, - 0, 888, 0, 0, 889, 0, 890, 0, 0, 891, 0, 892, 893, 0, 0, 0, 0, 0, 894, 0, 895, 0, 0, 896, 0, 897, 898, 0, 0, 0, 0, 0, - 899, 900, 0, 901, 0, 0, 902, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, 0, 0, 0, - 905, 0, 0, 906, 0, 0, 0, 0, 0, 0, 0, 907, 0, 0, 0, 0, 908, 0, 909, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, 0, 911, 0, - 912, 0, 913, 0, 0, 0, 914, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 916, 0, 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 919, 0, 920, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 921, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 923, 0, 924, 0, 0, 0, 925, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 926, 0, 0, 0, 0, - 927, 0, 928, 0, 0, 0, 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 930, 0, 0, 0, 931, 0, 0, 932, 0, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 934, 935, 0, 0, 0, 0, 0, - 0, 936, 0, 0, 0, 0, 937, 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, 939, 0, 0, 0, 940, 0, 941, 0, 942, 0, 0, 0, 0, 0, 943, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 944, 0, 0, 0, 945, 0, 0, 0, 946, 0, 947, 0, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 950, 0, 0, 0, 951, 0, 0, 952, 953, 0, 0, 0, 954, 0, 0, 0, 0, 955, - 0, 0, 0, 956, 957, 0, 0, 0, 0, 0, 0, 958, 0, 0, 959, 0, 960, 0, 0, 0, 961, 0, 0, 0, 962, 963, 0, 0, 0, 964, 0, 0, - 0, 965, 966, 0, 967, 0, 968, 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, 0, 970, 0, 971, 0, 972, 0, 973, 0, 0, 974, 0, 0, 975, 0, - 976, 977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 978, 0, 979, 0, 0, 980, 0, 0, 981, 0, 0, 0, 0, 0, 0, 0, 982, 0, 983, - 0, 0, 984, 0, 0, 985, 0, 0, 0, 0, 0, 0, 0, 986, 0, 0, 987, 0, 988, 0, 0, 989, 0, 0, 990, 0, 0, 991, 0, 0, 992, 0, - 993, 994, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 995, 0, 996, 0, 0, 997, 0, 0, 998, 0, 999, 1000, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1001, 0, 0, 0, 0, 0, 0, 0, 0, 1002, 0, 1003, 0, 0, 0, 0, 0, 0, 0, 1004, 0, 0, 0, 1005, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1006, 0, 0, 0, 1007, 0, 0, 0, 1008, 0, 0, 0, 0, 0, 0, 0, 1009, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1010, 0, 1011, 0, 0, 0, 0, 0, 0, 1012, 0, 1013, 0, 1014, 0, 0, 1015, 0, 0, 1016, 0, 1017, 1018, 0, 0, 0, 0, 0, 1019, 0, 0, - 0, 1020, 0, 0, 0, 0, 0, 1021, 0, 0, 0, 0, 0, 1022, 0, 1023, 0, 1024, 0, 1025, 0, 1026, 0, 1027, 0, 1028, 0, 1029, 0, 1030, 0, 1031, - 0, 1032, 0, 1033, 0, 1034, 0, 1035, 0, 1036, 0, 1037, 1038, 0, 0, 1039, 0, 0, 0, 0, 0, 0, 1040, 0, 0, 0, 1041, 0, 0, 1042, 0, 1043, - 0, 1044, 0, 1045, 0, 1046, 0, 0, 0, 1047, 0, 0, 1048, 0, 1049, 1050, 0, 1051, 0, 1052, 0, 0, 0, 0, 1053, 0, 1054, 0, 1055, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1056, 0, 0, 1057, 0, 0, 1058, 0, 0, 1059, 0, 0, 1060, 0, 0, 1061, 0, 0, 1062, 0, 0, 1063, 0, 0, 1064, - 0, 0, 1065, 0, 0, 1066, 0, 0, 1067, 0, 1068, 0, 0, 0, 0, 0, 0, 0, 1069, 0, 1070, 0, 1071, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1072, 0, 0, 0, 1073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 0, 0, 1075, 0, 0, 1076, 0, 0, 1077, 0, 0, 1078, 0, - 0, 1079, 0, 0, 1080, 0, 0, 1081, 0, 0, 1082, 0, 0, 1083, 0, 0, 1084, 0, 0, 1085, 0, 1086, 0, 0, 0, 0, 0, 0, 0, 1087, 0, 1088, - 0, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1090, 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092, 0, 0, 0, 1093, 0, 0, - 0, 0, 0, 1094, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 1096, 0, 1097, 0, 1098, 0, 0, 0, 1099, 0, 0, 0, 1100, 0, 0, 0, 1101, 0, 0, - 1102, 0, 1103, 1104, 1105, 0, 0, 0, 0, 0, 1106, 0, 1107, 0, 0, 0, 1108, 0, 0, 0, 1109, 0, 0, 1110, 0, 1111, 1112, 1113, 0, 0, 0, 0, - 0, 1114, 0, 0, 1115, 0, 1116, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 0, 1118, 0, 0, 0, 1119, 0, 1120, 0, 1121, 0, 0, 0, - 1122, 0, 0, 1123, 0, 1124, 1125, 1126, 0, 0, 0, 0, 0, 1127, 0, 1128, 0, 0, 0, 1129, 0, 0, 0, 1130, 0, 0, 1131, 0, 1132, 1133, 1134, 0, - 0, 0, 0, 0, 1135, 0, 0, 0, 0, 1136, 0, 0, 0, 1137, 0, 1138, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 1140, 0, 0, 0, 0, 1141, - 0, 0, 0, 1142, 0, 1143, 0, 0, 0, 1144, 0, 0, 0, 1145, 0, 1146, 0, 0, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 1148, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0178[64] = { + 0x22A95515408AA891ull, 0x52A520282AA5208Aull, 0xA92A82294A4A5290ull, 0x8A528929494AA414ull, + 0x124242A9494B2214ull, 0x0AA52A554252120Aull, 0xA05055114A5254AAull, 0x28555291200A2284ull, + 0x488242048A880009ull, 0x454828222A4A4882ull, 0x22A9541548542811ull, 0x032A8A4489084001ull, + 0xAAAA82A9450AA2A5ull, 0x22A2AAAAA54A82AAull, 0x08AA1502894AA555ull, 0xA424A5228910A052ull, + 0x020254A91024AAAAull, 0x045491552A125291ull, 0x29A9229148A8A949ull, 0x9154295415415045ull, + 0x21008000AAA8892Aull, 0xA54948552AA4554Aull, 0x0888804152412948ull, 0x250454AAAA555482ull, + 0x4AA5544AA12A1295ull, 0x5292AAAAA2AA4825ull, 0x2049555889140823ull, 0x94924A4969281111ull, + 0x449202A08290484Aull, 0x5442080824152920ull, 0x524A48124A502010ull, 0x1152A91000415292ull, + 0x44108202554AA8A4ull, 0x248944420A800000ull, 0x0004812409224892ull, 0xD2A502A805552000ull, + 0x10A4154552200040ull, 0x08505A5409542955ull, 0x25408028084020A8ull, 0x6809028280000520ull, + 0x4445146046041114ull, 0x6046044451460460ull, 0x0061226A040800B4ull, 0x40000A0408100000ull, + 0x234A695454884041ull, 0x2004141100400004ull, 0x210000008A000001ull, 0x0200104B06941A52ull, + 0x0088044540850809ull, 0x1140110028400000ull, 0x0000004508000000ull, 0x82A2204206101220ull, + 0x84644200002A2200ull, 0x4954405623114818ull, 0x49252024A024A003ull, 0x0880A01001A4A003ull, + 0x20D2540A00808880ull, 0xA4409AAAAAAAA082ull, 0x92492480150AD22Aull, 0x4924008800540524ull, + 0x22005002A0292492ull, 0x0E91141D2222A048ull, 0x7488A0E915101052ull, 0x2010A2288410A210ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0178[64] = { + 1u, 24u, 45u, 68u, 91u, 112u, 134u, 157u, 176u, 190u, 209u, 230u, 246u, 272u, 298u, 321u, + 341u, 361u, 383u, 407u, 429u, 445u, 471u, 487u, 511u, 536u, 562u, 582u, 604u, 621u, 637u, 654u, + 672u, 691u, 703u, 717u, 736u, 751u, 773u, 786u, 798u, 815u, 832u, 847u, 853u, 874u, 882u, 888u, + 905u, 918u, 926u, 930u, 944u, 956u, 976u, 993u, 1006u, 1020u, 1044u, 1065u, 1079u, 1094u, 1114u, 1135u, }; void recomp_unit_0178_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0178_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08ACC000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0178[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0178[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0178[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08ACC000; @@ -1340,7 +1247,6 @@ L_08ACC01C: goto L_08ACDF58; L_08ACC02C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC05C; } @@ -1353,7 +1259,6 @@ L_08ACC034: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC03C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC05C; } @@ -1384,7 +1289,6 @@ L_08ACC05C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -1397,7 +1301,6 @@ L_08ACC080: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC088: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC480; } @@ -1417,7 +1320,6 @@ L_08ACC0A0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC0A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC0B8; } @@ -1435,7 +1337,6 @@ L_08ACC0B8: L_08ACC0C0: aot_gpr_4 = (0u | 14u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACC0D4; } @@ -1459,7 +1360,6 @@ L_08ACC0E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2072))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACC478; } @@ -1467,9 +1367,7 @@ L_08ACC0E4: } L_08ACC0F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC280; } @@ -1491,9 +1389,7 @@ L_08ACC11C: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC238; } @@ -1502,7 +1398,6 @@ L_08ACC11C: L_08ACC134: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACC1F8; } @@ -1516,7 +1411,6 @@ L_08ACC140: L_08ACC148: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACC1F8; } @@ -1529,7 +1423,6 @@ L_08ACC154: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC15C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC1F8; } @@ -1542,7 +1435,6 @@ L_08ACC164: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC16C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC1DC; } @@ -1552,9 +1444,7 @@ L_08ACC174: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC1B4; } @@ -1562,7 +1452,6 @@ L_08ACC174: } L_08ACC18C: aot_gpr_31 = (0x08ACC194u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACC194u) goto L_08ACC194; AOT_REGCACHE_SYNC_OUT(); return; L_08ACC194: @@ -1571,9 +1460,7 @@ L_08ACC194: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC1C8; } @@ -1587,7 +1474,6 @@ L_08ACC1B4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC1C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1601,7 +1487,6 @@ L_08ACC1C8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1620,7 +1505,6 @@ L_08ACC1E4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC1F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1630,9 +1514,7 @@ L_08ACC1F8: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC224; } @@ -1646,7 +1528,6 @@ L_08ACC210: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC21C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1660,7 +1541,6 @@ L_08ACC224: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1669,7 +1549,6 @@ L_08ACC230: L_08ACC238: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(676))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACC26C; } @@ -1683,7 +1562,6 @@ L_08ACC244: L_08ACC24C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACC26C; } @@ -1697,7 +1575,6 @@ L_08ACC258: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1711,7 +1588,6 @@ L_08ACC26C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1732,7 +1608,6 @@ L_08ACC294: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACC310; } @@ -1756,7 +1631,6 @@ L_08ACC2BC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC2C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACC310; } @@ -1770,7 +1644,6 @@ L_08ACC2CC: L_08ACC2D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACC2EC; } @@ -1810,9 +1683,7 @@ L_08ACC310: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC33C; } @@ -1826,7 +1697,6 @@ L_08ACC328: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC358; } @@ -1856,7 +1726,6 @@ L_08ACC358: L_08ACC360: aot_gpr_4 = (0u | 14u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACC444; } @@ -1881,7 +1750,6 @@ L_08ACC380: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC38C: aot_gpr_31 = (0x08ACC394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACC394u) goto L_08ACC394; AOT_REGCACHE_SYNC_OUT(); return; L_08ACC394: @@ -1978,7 +1846,6 @@ L_08ACC444: L_08ACC44C: aot_gpr_4 = (0u | 13u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACC478; } @@ -1992,7 +1859,6 @@ L_08ACC458: L_08ACC460: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACC478; } @@ -2006,7 +1872,6 @@ L_08ACC46C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC478: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC48C; } @@ -2019,7 +1884,6 @@ L_08ACC480: goto L_08ACD4BC; L_08ACC48C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -2032,7 +1896,6 @@ L_08ACC494: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC49C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC5C8; } @@ -2089,9 +1952,7 @@ L_08ACC50C: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC558; } @@ -2119,7 +1980,6 @@ L_08ACC544: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC5C0; } @@ -2146,7 +2006,6 @@ L_08ACC578: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC580: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC5C0; } @@ -2165,7 +2024,6 @@ L_08ACC590: L_08ACC598: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACC5C0; } @@ -2189,7 +2047,6 @@ L_08ACC5B4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC5C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC5D4; } @@ -2202,7 +2059,6 @@ L_08ACC5C8: goto L_08ACD4BC; L_08ACC5D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -2215,7 +2071,6 @@ L_08ACC5DC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC5E4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACCAB8; } @@ -2239,7 +2094,6 @@ L_08ACC604: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC60C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACCACC; } @@ -2310,9 +2164,7 @@ L_08ACC678: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC680: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC6A0; } @@ -2331,7 +2183,6 @@ L_08ACC6A0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC6A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC6D0; } @@ -2346,9 +2197,7 @@ L_08ACC6B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(636))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC6F4; } @@ -2364,9 +2213,7 @@ L_08ACC6D8: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC71C; } @@ -2396,14 +2243,12 @@ L_08ACC708: } L_08ACC71C: aot_gpr_31 = (0x08ACC724u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACC724u) goto L_08ACC724; AOT_REGCACHE_SYNC_OUT(); return; L_08ACC724: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1744))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACC96C; } @@ -2411,9 +2256,7 @@ L_08ACC724: } L_08ACC734: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC96C; } @@ -2474,7 +2317,6 @@ L_08ACC7B0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC7B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACC7D0; } @@ -2548,7 +2390,6 @@ L_08ACC84C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC85C: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08ACC964; } @@ -2563,7 +2404,6 @@ L_08ACC86C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACC904; } @@ -2635,9 +2475,7 @@ L_08ACC904: aot_gpr_4 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC94C; } @@ -2647,7 +2485,6 @@ L_08ACC91C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACC94C; } @@ -2667,7 +2504,6 @@ L_08ACC938: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACC964; } @@ -2687,7 +2523,6 @@ L_08ACC958: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC964: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCA88; } @@ -2702,7 +2537,6 @@ L_08ACC974: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACCA88; } @@ -2712,7 +2546,6 @@ L_08ACC984: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACCA88; } @@ -2722,9 +2555,7 @@ L_08ACC994: aot_gpr_4 = (16544u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACC9E0; } @@ -2752,7 +2583,6 @@ L_08ACC9CC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC9D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCA88; } @@ -2765,9 +2595,7 @@ L_08ACC9E0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACC9E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCA50; } @@ -2780,9 +2608,7 @@ L_08ACC9F8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCA00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCA50; } @@ -2793,9 +2619,7 @@ L_08ACCA10: aot_gpr_4 = (49024u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCA80; } @@ -2816,7 +2640,6 @@ L_08ACCA34: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCA48: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08ACCA80; } @@ -2843,7 +2666,6 @@ L_08ACCA6C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCA78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCA88; } @@ -2875,7 +2697,6 @@ L_08ACCAA8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCAB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCACC; } @@ -2893,7 +2714,6 @@ L_08ACCAC0: goto L_08ACCACC; L_08ACCACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -2906,7 +2726,6 @@ L_08ACCAD4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCADC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACCC1C; } @@ -2964,7 +2783,6 @@ L_08ACCB4C: L_08ACCB60: aot_gpr_4 = (0u | 3u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACCBE4; } @@ -3003,9 +2821,7 @@ L_08ACCBA4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCBAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCBE4; } @@ -3023,7 +2839,6 @@ L_08ACCBC4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCBCC: { const bool branch_taken = aot_gpr_2 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ACCBE4; } @@ -3045,7 +2860,6 @@ L_08ACCBE4: ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACCB4C; } @@ -3053,7 +2867,6 @@ L_08ACCBE4: } L_08ACCC00: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08ACCC14; } @@ -3067,7 +2880,6 @@ L_08ACCC08: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCC14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCC34; } @@ -3086,7 +2898,6 @@ L_08ACCC24: goto L_08ACD698; L_08ACCC34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -3099,7 +2910,6 @@ L_08ACCC3C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCC44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACCCCC; } @@ -3110,7 +2920,6 @@ L_08ACCC4C: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACCC78; } @@ -3136,7 +2945,6 @@ L_08ACCC78: L_08ACCC80: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACCCD4; } @@ -3149,7 +2957,6 @@ L_08ACCC8C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCC94: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACCCD4; } @@ -3176,7 +2983,6 @@ L_08ACCCBC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCCC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCCD4; } @@ -3189,7 +2995,6 @@ L_08ACCCCC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCCD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -3202,7 +3007,6 @@ L_08ACCCDC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCCE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD220; } @@ -3220,7 +3024,6 @@ L_08ACCCF4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCCFC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACCD8C; } @@ -3238,7 +3041,6 @@ L_08ACCD0C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCD14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACCD8C; } @@ -3253,9 +3055,7 @@ L_08ACCD24: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCD8C; } @@ -3274,7 +3074,6 @@ L_08ACCD44: L_08ACCD4C: aot_gpr_4 = (static_cast(aot_gpr_2) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACCD7C; } @@ -3293,7 +3092,6 @@ L_08ACCD60: L_08ACCD68: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACCD9C; } @@ -3301,7 +3099,6 @@ L_08ACCD68: } L_08ACCD74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCDB4; } @@ -3314,7 +3111,6 @@ L_08ACCD7C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCD84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -3327,7 +3123,6 @@ L_08ACCD8C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCD94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -3345,7 +3140,6 @@ L_08ACCDA4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCDAC: { const bool branch_taken = aot_gpr_2 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACCDDC; } @@ -3365,7 +3159,6 @@ L_08ACCDC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACCE08; } @@ -3373,7 +3166,6 @@ L_08ACCDC4: } L_08ACCDD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACCE18; } @@ -3398,7 +3190,6 @@ L_08ACCDF4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCE00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -3411,7 +3202,6 @@ L_08ACCE08: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCE10: { const bool branch_taken = aot_gpr_2 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACCECC; } @@ -3430,7 +3220,6 @@ L_08ACCE20: L_08ACCE28: aot_gpr_4 = (0u | 10u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACCE4C; } @@ -3448,7 +3237,6 @@ L_08ACCE3C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCE44: { const bool branch_taken = aot_gpr_2 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACCECC; } @@ -3488,9 +3276,7 @@ L_08ACCE84: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCF18; } @@ -3503,7 +3289,6 @@ L_08ACCEA0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCEA8: aot_gpr_31 = (0x08ACCEB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 949u, 0x08AC7810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACCEB0u) goto L_08ACCEB0; AOT_REGCACHE_SYNC_OUT(); return; L_08ACCEB0: @@ -3516,7 +3301,6 @@ L_08ACCEB0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCEC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD218; } @@ -3556,7 +3340,6 @@ L_08ACCF04: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCF10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -3567,9 +3350,7 @@ L_08ACCF18: aot_gpr_4 = (aot_gpr_4 | 57671u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACCF84; } @@ -3598,7 +3379,6 @@ L_08ACCF50: L_08ACCF60: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACCF7C; } @@ -3613,7 +3393,6 @@ L_08ACCF6C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCF7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD218; } @@ -3676,7 +3455,6 @@ L_08ACCFE8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACCFF4: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08ACD094; } @@ -3694,7 +3472,6 @@ L_08ACD004: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD00C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD094; } @@ -3712,7 +3489,6 @@ L_08ACD01C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD024: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD054; } @@ -3731,7 +3507,6 @@ L_08ACD034: L_08ACD03C: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACD054; } @@ -3768,7 +3543,6 @@ L_08ACD080: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD08C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD218; } @@ -3776,7 +3550,6 @@ L_08ACD08C: } L_08ACD094: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08ACD218; } @@ -3790,7 +3563,6 @@ L_08ACD09C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD0A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD0E4; } @@ -3813,9 +3585,7 @@ L_08ACD0C4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACD218; } @@ -3893,7 +3663,6 @@ L_08ACD16C: L_08ACD174: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACD1D0; } @@ -3911,7 +3680,6 @@ L_08ACD188: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD190: { const bool branch_taken = aot_gpr_2 != aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD1D0; } @@ -3942,7 +3710,6 @@ L_08ACD1BC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD1C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD218; } @@ -3983,7 +3750,6 @@ L_08ACD20C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD218: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD234; } @@ -4002,14 +3768,12 @@ L_08ACD22C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD234: aot_gpr_31 = (0x08ACD23Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACD23Cu) goto L_08ACD23C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACD23C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1728))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACD278; } @@ -4022,7 +3786,6 @@ L_08ACD24C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD254: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACD278; } @@ -4043,7 +3806,6 @@ L_08ACD26C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD280; } @@ -4053,7 +3815,6 @@ L_08ACD280: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD2B4; } @@ -4062,7 +3823,6 @@ L_08ACD280: L_08ACD290: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -4070,14 +3830,12 @@ L_08ACD290: } L_08ACD29C: aot_gpr_31 = (0x08ACD2A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACD2A4u) goto L_08ACD2A4; AOT_REGCACHE_SYNC_OUT(); return; L_08ACD2A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -4092,7 +3850,6 @@ L_08ACD2B4: L_08ACD2C0: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACD2E0; } @@ -4105,7 +3862,6 @@ L_08ACD2CC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD2D4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACD2E0; } @@ -4131,7 +3887,6 @@ L_08ACD2EC: L_08ACD2F4: aot_gpr_4 = (0u | 8u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACD3C8; } @@ -4146,7 +3901,6 @@ L_08ACD308: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACD3C8; } @@ -4170,7 +3924,6 @@ L_08ACD330: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD338: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD3C8; } @@ -4199,7 +3952,6 @@ L_08ACD360: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD368: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD3C8; } @@ -4228,7 +3980,6 @@ L_08ACD390: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD398: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACD3C8; } @@ -4245,7 +3996,6 @@ L_08ACD3A0: } L_08ACD3AC: aot_gpr_31 = (0x08ACD3B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACD3B4u) goto L_08ACD3B4; AOT_REGCACHE_SYNC_OUT(); return; L_08ACD3B4: @@ -4258,7 +4008,6 @@ L_08ACD3B4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD3C8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ACD47C; } @@ -4271,14 +4020,12 @@ L_08ACD3D0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD3D8: aot_gpr_31 = (0x08ACD3E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACD3E0u) goto L_08ACD3E0; AOT_REGCACHE_SYNC_OUT(); return; L_08ACD3E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); aot_gpr_4 = (aot_gpr_2 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD3FC; } @@ -4287,7 +4034,6 @@ L_08ACD3E0: L_08ACD3F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1756))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD40C; } @@ -4295,7 +4041,6 @@ L_08ACD3F0: } L_08ACD3FC: aot_gpr_31 = (0x08ACD404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 929u, 0x08AC76DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACD404u) goto L_08ACD404; AOT_REGCACHE_SYNC_OUT(); return; L_08ACD404: @@ -4304,7 +4049,6 @@ L_08ACD404: goto L_08ACD40C; L_08ACD40C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08ACD454; } @@ -4342,7 +4086,6 @@ L_08ACD43C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD44C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD46C; } @@ -4355,7 +4098,6 @@ L_08ACD454: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD45C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD46C; } @@ -4399,7 +4141,17 @@ L_08ACD47C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACD4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -4434,7 +4186,6 @@ L_08ACD4F4: } L_08ACD504: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACD530; } @@ -4443,7 +4194,6 @@ L_08ACD504: L_08ACD50C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD528; } @@ -4451,7 +4201,6 @@ L_08ACD50C: } L_08ACD518: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08ACD538; } @@ -4459,7 +4208,6 @@ L_08ACD518: } L_08ACD520: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD5AC; } @@ -4467,7 +4215,6 @@ L_08ACD520: } L_08ACD528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD680; } @@ -4475,7 +4222,6 @@ L_08ACD528: } L_08ACD530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD680; } @@ -4494,7 +4240,6 @@ L_08ACD538: L_08ACD548: aot_gpr_4 = (static_cast(ctx.gpr[18]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD574; } @@ -4507,7 +4252,6 @@ L_08ACD554: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD55C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD580; } @@ -4515,7 +4259,6 @@ L_08ACD55C: } L_08ACD564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD590; } @@ -4523,7 +4266,6 @@ L_08ACD564: } L_08ACD56C: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACD554; } @@ -4545,7 +4287,6 @@ L_08ACD580: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD588: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD598; } @@ -4553,7 +4294,6 @@ L_08ACD588: } L_08ACD590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD574; } @@ -4573,7 +4313,6 @@ L_08ACD598: L_08ACD5AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(640))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACD5C0; } @@ -4581,7 +4320,6 @@ L_08ACD5AC: } L_08ACD5B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD5E0; } @@ -4596,7 +4334,6 @@ L_08ACD5C0: L_08ACD5CC: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACD5E8; } @@ -4604,7 +4341,6 @@ L_08ACD5CC: } L_08ACD5D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD680; } @@ -4612,7 +4348,6 @@ L_08ACD5D8: } L_08ACD5E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD680; } @@ -4645,7 +4380,6 @@ L_08ACD5FC: L_08ACD60C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACD620; } @@ -4672,7 +4406,6 @@ L_08ACD62C: L_08ACD634: aot_gpr_4 = (static_cast(ctx.gpr[16]) < 55 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACD680; } @@ -4684,11 +4417,20 @@ L_08ACD640: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[16]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(14824))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACD658: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2240), 0u); aot_gpr_31 = (0x08ACD664u); @@ -4703,7 +4445,6 @@ L_08ACD664: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD680; } @@ -4730,7 +4471,17 @@ L_08ACD680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACD698: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -4750,7 +4501,6 @@ L_08ACD6BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACD738; } @@ -4760,7 +4510,6 @@ L_08ACD6CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACD738; } @@ -4770,7 +4519,6 @@ L_08ACD6DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 32u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACD738; } @@ -4793,7 +4541,6 @@ L_08ACD704: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD730; } @@ -4808,7 +4555,6 @@ L_08ACD71C: goto L_08ACD728; L_08ACD728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD750; } @@ -4816,7 +4562,6 @@ L_08ACD728: } L_08ACD730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4824,7 +4569,6 @@ L_08ACD730: } L_08ACD738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4832,7 +4576,6 @@ L_08ACD738: } L_08ACD740: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4840,7 +4583,6 @@ L_08ACD740: } L_08ACD748: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD774; } @@ -4848,7 +4590,6 @@ L_08ACD748: } L_08ACD750: { const bool branch_taken = aot_gpr_17 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACD76C; } @@ -4865,7 +4606,6 @@ L_08ACD758: } L_08ACD764: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD79C; } @@ -4873,7 +4613,6 @@ L_08ACD764: } L_08ACD76C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4881,7 +4620,6 @@ L_08ACD76C: } L_08ACD774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4913,7 +4651,6 @@ L_08ACD78C: } L_08ACD794: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACD7B0; } @@ -4922,7 +4659,6 @@ L_08ACD794: L_08ACD79C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08ACD7B8; } @@ -4930,7 +4666,6 @@ L_08ACD79C: } L_08ACD7A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD964; } @@ -4938,7 +4673,6 @@ L_08ACD7A8: } L_08ACD7B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4960,14 +4694,22 @@ L_08ACD7C8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(15048))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACD7E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -4976,7 +4718,6 @@ L_08ACD7E0: L_08ACD7E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1156))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD808; } @@ -4991,7 +4732,6 @@ L_08ACD7F4: goto L_08ACD800; L_08ACD800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -4999,7 +4739,6 @@ L_08ACD800: } L_08ACD808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5008,7 +4747,6 @@ L_08ACD808: L_08ACD810: aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACD800; } @@ -5016,7 +4754,6 @@ L_08ACD810: } L_08ACD81C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5025,7 +4762,6 @@ L_08ACD81C: L_08ACD824: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD84C; } @@ -5036,7 +4772,6 @@ L_08ACD830: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD854; } @@ -5044,7 +4779,6 @@ L_08ACD830: } L_08ACD844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD884; } @@ -5052,7 +4786,6 @@ L_08ACD844: } L_08ACD84C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5077,7 +4810,6 @@ L_08ACD860: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD874: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD884; } @@ -5085,7 +4817,6 @@ L_08ACD874: } L_08ACD87C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5093,7 +4824,6 @@ L_08ACD87C: } L_08ACD884: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5102,7 +4832,6 @@ L_08ACD884: L_08ACD88C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD8B0; } @@ -5112,7 +4841,6 @@ L_08ACD898: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACD8B8; } @@ -5120,7 +4848,6 @@ L_08ACD898: } L_08ACD8A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD8C0; } @@ -5128,7 +4855,6 @@ L_08ACD8A8: } L_08ACD8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5141,7 +4867,6 @@ L_08ACD8B8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD8C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5150,7 +4875,6 @@ L_08ACD8C0: L_08ACD8C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(676))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD8DC; } @@ -5158,7 +4882,6 @@ L_08ACD8C8: } L_08ACD8D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5166,7 +4889,6 @@ L_08ACD8D4: } L_08ACD8DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5174,7 +4896,6 @@ L_08ACD8DC: } L_08ACD8E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5183,7 +4904,6 @@ L_08ACD8E4: L_08ACD8EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD900; } @@ -5191,7 +4911,6 @@ L_08ACD8EC: } L_08ACD8F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5199,7 +4918,6 @@ L_08ACD8F8: } L_08ACD900: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5208,7 +4926,6 @@ L_08ACD900: L_08ACD908: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACD954; } @@ -5245,7 +4962,6 @@ L_08ACD944: } L_08ACD94C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD9C4; } @@ -5253,7 +4969,6 @@ L_08ACD94C: } L_08ACD954: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5261,7 +4976,6 @@ L_08ACD954: } L_08ACD95C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5287,7 +5001,6 @@ L_08ACD974: } L_08ACD97C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5295,7 +5008,6 @@ L_08ACD97C: } L_08ACD984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5308,7 +5020,6 @@ L_08ACD98C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD994: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD9A4; } @@ -5316,7 +5027,6 @@ L_08ACD994: } L_08ACD99C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACD914; } @@ -5324,7 +5034,6 @@ L_08ACD99C: } L_08ACD9A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5337,7 +5046,6 @@ L_08ACD9AC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD9B4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACD9C4; } @@ -5354,7 +5062,6 @@ L_08ACD9BC: L_08ACD9C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08ACDA00; } @@ -5368,7 +5075,6 @@ L_08ACD9D0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD9DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACD9F8; } @@ -5382,7 +5088,6 @@ L_08ACD9E4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACD9F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA00; } @@ -5412,11 +5117,20 @@ L_08ACDA14: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(15232))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACDA2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(92))); aot_gpr_5 = (aot_gpr_17 | 0u); @@ -5431,7 +5145,6 @@ L_08ACDA2C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDA48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5441,7 +5154,6 @@ L_08ACDA50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2244))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACDA6C; } @@ -5465,7 +5177,6 @@ L_08ACDA7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACDAA8; } @@ -5476,7 +5187,6 @@ L_08ACDA8C: goto L_08ACDA90; L_08ACDA90: { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08ACDAA8; } @@ -5489,7 +5199,6 @@ L_08ACDA98: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDAA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACDAB0; } @@ -5497,7 +5206,6 @@ L_08ACDAA0: } L_08ACDAA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDAC0; } @@ -5510,7 +5218,6 @@ L_08ACDAB0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDAB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDF40; } @@ -5540,7 +5247,6 @@ L_08ACDAD8: L_08ACDAF4: aot_gpr_4 = (0u | 31u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACDB10; } @@ -5560,7 +5266,6 @@ L_08ACDB10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACDB74; } @@ -5570,7 +5275,6 @@ L_08ACDB20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACDB74; } @@ -5583,7 +5287,6 @@ L_08ACDB30: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACDB60; } @@ -5597,7 +5300,6 @@ L_08ACDB4C: L_08ACDB54: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDB74; } @@ -5611,7 +5313,6 @@ L_08ACDB60: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDB6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDB78; } @@ -5622,7 +5323,6 @@ L_08ACDB74: goto L_08ACDB78; L_08ACDB78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -5637,7 +5337,6 @@ L_08ACDB80: L_08ACDB8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDBA4; } @@ -5651,7 +5350,6 @@ L_08ACDB98: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDBA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -5666,7 +5364,6 @@ L_08ACDBAC: L_08ACDBB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDBD0; } @@ -5695,7 +5392,6 @@ L_08ACDBDC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDBE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -5714,7 +5410,6 @@ L_08ACDBFC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDC04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -5731,7 +5426,6 @@ L_08ACDC18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDC94; } @@ -5740,7 +5434,6 @@ L_08ACDC18: L_08ACDC2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1728))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACDC94; } @@ -5752,7 +5445,6 @@ L_08ACDC38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDC94; } @@ -5790,7 +5482,6 @@ L_08ACDC7C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACDC50; } @@ -5798,7 +5489,6 @@ L_08ACDC7C: } L_08ACDC94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -5817,7 +5507,6 @@ L_08ACDCA4: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDCD0; } @@ -5832,7 +5521,6 @@ L_08ACDCC4: L_08ACDCD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1716))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDCE8; } @@ -5863,7 +5551,6 @@ L_08ACDCF8: L_08ACDD14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDD2C; } @@ -5896,7 +5583,6 @@ L_08ACDD40: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDD48: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACDE34; } @@ -5916,7 +5602,6 @@ L_08ACDD50: L_08ACDD68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDE34; } @@ -5941,7 +5626,6 @@ L_08ACDD8C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDE34; } @@ -5985,7 +5669,6 @@ L_08ACDDE8: goto L_08ACDDF0; L_08ACDDF0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDE34; } @@ -6028,7 +5711,6 @@ L_08ACDE34: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDE50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACDE64; } @@ -6042,7 +5724,6 @@ L_08ACDE58: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDE64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -6051,7 +5732,6 @@ L_08ACDE64: L_08ACDE6C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDE84; } @@ -6081,7 +5761,6 @@ L_08ACDE90: L_08ACDEAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDEC4; } @@ -6095,7 +5774,6 @@ L_08ACDEB8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDEC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -6110,7 +5788,6 @@ L_08ACDECC: L_08ACDED8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDEF0; } @@ -6124,7 +5801,6 @@ L_08ACDEE4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDEF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -6139,7 +5815,6 @@ L_08ACDEF8: L_08ACDF04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACDF1C; } @@ -6164,7 +5839,6 @@ L_08ACDF24: AOT_REGCACHE_SYNC_OUT(); return; L_08ACDF30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -6172,7 +5846,6 @@ L_08ACDF30: } L_08ACDF38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDA48; } @@ -6191,7 +5864,17 @@ L_08ACDF40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACDF58: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), ctx.gpr[18]); @@ -6216,7 +5899,6 @@ L_08ACDF90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACDFB4; } @@ -6231,7 +5913,6 @@ L_08ACDFA0: goto L_08ACDFAC; L_08ACDFAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACDFC4; } @@ -6239,7 +5920,6 @@ L_08ACDFAC: } L_08ACDFB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6247,7 +5927,6 @@ L_08ACDFB4: } L_08ACDFBC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACDFD8; } @@ -6256,7 +5935,6 @@ L_08ACDFBC: L_08ACDFC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACDFE0; } @@ -6264,7 +5942,6 @@ L_08ACDFC4: } L_08ACDFD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE070; } @@ -6272,7 +5949,6 @@ L_08ACDFD0: } L_08ACDFD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6294,11 +5970,20 @@ L_08ACDFF0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(15432))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE008: aot_gpr_4 = (aot_gpr_17 + static_cast(656)); aot_gpr_31 = (0x08ACE014u); @@ -6307,7 +5992,6 @@ L_08ACE008: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE014: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACE034; } @@ -6317,7 +6001,6 @@ L_08ACE01C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACE03C; } @@ -6325,7 +6008,6 @@ L_08ACE01C: } L_08ACE02C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE044; } @@ -6333,7 +6015,6 @@ L_08ACE02C: } L_08ACE034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6346,7 +6027,6 @@ L_08ACE03C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE070; } @@ -6360,7 +6040,6 @@ L_08ACE04C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE058: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACE068; } @@ -6368,7 +6047,6 @@ L_08ACE058: } L_08ACE060: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE070; } @@ -6376,7 +6054,6 @@ L_08ACE060: } L_08ACE068: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6413,11 +6090,20 @@ L_08ACE0A4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(15616))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE0BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 | 16384u); @@ -6514,9 +6200,7 @@ L_08ACE0F8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2060))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE164; } @@ -6524,7 +6208,6 @@ L_08ACE0F8: } L_08ACE15C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3C8; } @@ -6532,7 +6215,6 @@ L_08ACE15C: } L_08ACE164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6577,7 +6259,6 @@ L_08ACE1A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACE1C0; } @@ -6591,7 +6272,6 @@ L_08ACE1B8: L_08ACE1C0: aot_gpr_4 = (0u | 39u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE1E8; } @@ -6612,7 +6292,6 @@ L_08ACE1DC: L_08ACE1E8: aot_gpr_4 = (0u | 40u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE210; } @@ -6633,7 +6312,6 @@ L_08ACE204: L_08ACE210: aot_gpr_4 = (0u | 43u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE238; } @@ -6654,7 +6332,6 @@ L_08ACE22C: L_08ACE238: aot_gpr_4 = (0u | 44u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE260; } @@ -6675,7 +6352,6 @@ L_08ACE254: L_08ACE260: aot_gpr_4 = (0u | 45u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE294; } @@ -6699,7 +6375,6 @@ L_08ACE288: L_08ACE294: aot_gpr_4 = (0u | 53u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE2C8; } @@ -6783,9 +6458,7 @@ L_08ACE2C8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2060))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE38C; } @@ -6834,7 +6507,6 @@ L_08ACE358: } L_08ACE360: { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACE39C; } @@ -6847,9 +6519,7 @@ L_08ACE368: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1332))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE394; } @@ -6857,7 +6527,6 @@ L_08ACE368: } L_08ACE38C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3C8; } @@ -6865,7 +6534,6 @@ L_08ACE38C: } L_08ACE394: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6873,7 +6541,6 @@ L_08ACE394: } L_08ACE39C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3FC; } @@ -6902,7 +6569,6 @@ L_08ACE3A4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE3C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE3C8; } @@ -6916,7 +6582,6 @@ L_08ACE3C8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE3D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACE3E4; } @@ -6933,7 +6598,6 @@ L_08ACE3DC: L_08ACE3E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACE3F8; } @@ -6961,7 +6625,17 @@ L_08ACE3FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE418: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[20]); @@ -6987,7 +6661,6 @@ L_08ACE454: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACE478; } @@ -7002,7 +6675,6 @@ L_08ACE464: goto L_08ACE470; L_08ACE470: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE488; } @@ -7010,7 +6682,6 @@ L_08ACE470: } L_08ACE478: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7018,7 +6689,6 @@ L_08ACE478: } L_08ACE480: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACE4A0; } @@ -7036,7 +6706,6 @@ L_08ACE488: } L_08ACE498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE558; } @@ -7044,7 +6713,6 @@ L_08ACE498: } L_08ACE4A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7052,7 +6720,6 @@ L_08ACE4A0: } L_08ACE4A8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ACE558; } @@ -7068,7 +6735,17 @@ L_08ACE4B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE4C8: aot_gpr_4 = (aot_gpr_17 + static_cast(656)); aot_gpr_31 = (0x08ACE4D4u); @@ -7077,7 +6754,6 @@ L_08ACE4C8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE4D4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACE4F0; } @@ -7086,9 +6762,7 @@ L_08ACE4D4: L_08ACE4DC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2060))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE508; } @@ -7098,7 +6772,6 @@ L_08ACE4F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACE510; } @@ -7106,7 +6779,6 @@ L_08ACE4F0: } L_08ACE500: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE518; } @@ -7114,7 +6786,6 @@ L_08ACE500: } L_08ACE508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7127,7 +6798,6 @@ L_08ACE510: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE518: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE558; } @@ -7141,7 +6811,6 @@ L_08ACE520: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE52C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACE548; } @@ -7150,9 +6819,7 @@ L_08ACE52C: L_08ACE534: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2112))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE550; } @@ -7160,7 +6827,6 @@ L_08ACE534: } L_08ACE548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE558; } @@ -7168,7 +6834,6 @@ L_08ACE548: } L_08ACE550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7197,7 +6862,6 @@ L_08ACE56C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE588: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACE598; } @@ -7214,7 +6878,6 @@ L_08ACE590: L_08ACE598: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08ACE5AC; } @@ -7230,7 +6893,6 @@ L_08ACE5AC: goto L_08ACE5B0; L_08ACE5B0: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7242,11 +6904,20 @@ L_08ACE5B8: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[19]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16000))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE5D0: aot_gpr_31 = (0x08ACE5D8u); aot_gpr_4 = (aot_gpr_17 | 0u); @@ -7279,7 +6950,6 @@ L_08ACE5EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACE614; } @@ -7292,7 +6962,6 @@ L_08ACE60C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACE614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7315,7 +6984,6 @@ L_08ACE61C: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(2112), std::bit_cast(aot_fpr_20)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE634; } @@ -7337,7 +7005,17 @@ L_08ACE634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE658: aot_gpr_5 = (2236u << 16u); aot_fpr_12 = std::bit_cast(0u); @@ -7361,11 +7039,20 @@ L_08ACE66C: } L_08ACE68C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE694: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19]}; @@ -7391,7 +7078,6 @@ L_08ACE6BC: } L_08ACE6D8: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08ACE6E8; } @@ -7408,7 +7094,6 @@ L_08ACE6E0: L_08ACE6E8: ctx.gpr[6] = (0u | 100u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08ACE77C; } @@ -7481,7 +7166,6 @@ L_08ACE728: aot_gpr_2 = (0u | 1u); aot_mem.aot_direct_store8(ctx.gpr[7] + static_cast(12), static_cast(aot_gpr_2)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACE7A4; } @@ -7527,11 +7211,20 @@ L_08ACE7A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACE7C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-760))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACEA10; } @@ -7543,7 +7236,6 @@ L_08ACE7CC: ctx.fpr[4] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10320))); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[18] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7564,9 +7256,7 @@ L_08ACE7F4: goto L_08ACE7F8; L_08ACE7F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE810; } @@ -7582,9 +7272,7 @@ L_08ACE808: } L_08ACE810: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[5] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE830; } @@ -7592,9 +7280,7 @@ L_08ACE810: } L_08ACE820: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[4] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEA10; } @@ -7617,7 +7303,6 @@ L_08ACE848: ctx.fpr[6] = ctx.fpr[4] - ctx.fpr[5]; aot_fpr_12 = aot_fpr_12 / ctx.fpr[6]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08ACE864; @@ -7628,9 +7313,7 @@ L_08ACE864: goto L_08ACE868; L_08ACE868: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[4] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE898; } @@ -7641,7 +7324,6 @@ L_08ACE878: ctx.fpr[4] = ctx.fpr[4] - ctx.fpr[5]; aot_fpr_12 = aot_fpr_12 / ctx.fpr[4]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[18])); goto L_08ACE894; @@ -7652,7 +7334,6 @@ L_08ACE894: goto L_08ACE898; L_08ACE898: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[1])); goto L_08ACE8B0; @@ -7668,9 +7349,7 @@ L_08ACE8A8: } L_08ACE8B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] <= ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE8C8; } @@ -7686,9 +7365,7 @@ L_08ACE8C0: } L_08ACE8C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE8E8; } @@ -7696,9 +7373,7 @@ L_08ACE8C8: } L_08ACE8D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE948; } @@ -7706,9 +7381,7 @@ L_08ACE8D8: } L_08ACE8E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE918; } @@ -7719,7 +7392,6 @@ L_08ACE8F8: ctx.fpr[3] = ctx.fpr[1] - aot_fpr_12; aot_fpr_13 = aot_fpr_13 / ctx.fpr[3]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08ACE914; @@ -7730,9 +7402,7 @@ L_08ACE914: goto L_08ACE918; L_08ACE918: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[1] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE948; } @@ -7743,7 +7413,6 @@ L_08ACE928: aot_fpr_12 = ctx.fpr[1] - aot_fpr_12; aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[18])); goto L_08ACE944; @@ -7754,7 +7423,6 @@ L_08ACE944: goto L_08ACE948; L_08ACE948: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] < aot_fpr_0)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); goto L_08ACE960; @@ -7770,9 +7438,7 @@ L_08ACE958: } L_08ACE960: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[2] <= aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE978; } @@ -7788,9 +7454,7 @@ L_08ACE970: } L_08ACE978: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE998; } @@ -7798,9 +7462,7 @@ L_08ACE978: } L_08ACE988: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEA10; } @@ -7808,9 +7470,7 @@ L_08ACE988: } L_08ACE998: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE9C8; } @@ -7821,7 +7481,6 @@ L_08ACE9A8: ctx.fpr[14] = aot_fpr_0 - aot_fpr_12; aot_fpr_13 = aot_fpr_13 / ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08ACE9C4; @@ -7832,9 +7491,7 @@ L_08ACE9C4: goto L_08ACE9C8; L_08ACE9C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACE9F8; } @@ -7845,7 +7502,6 @@ L_08ACE9D8: aot_fpr_12 = aot_fpr_0 - aot_fpr_12; aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[18])); goto L_08ACE9F4; @@ -7856,9 +7512,7 @@ L_08ACE9F4: goto L_08ACE9F8; L_08ACE9F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEA10; } @@ -7877,11 +7531,20 @@ L_08ACEA10: goto L_08ACEA14; L_08ACEA14: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACEA1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-688)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7903,7 +7566,6 @@ L_08ACEA4C: ctx.gpr[18] = (ctx.gpr[18] + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACEA98; } @@ -7916,7 +7578,6 @@ L_08ACEA68: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACEA98; } @@ -7929,7 +7590,6 @@ L_08ACEA84: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEA8C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACEA98; } @@ -7941,7 +7601,6 @@ L_08ACEA94: L_08ACEA98: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF82C; } @@ -7965,9 +7624,7 @@ L_08ACEAB4: L_08ACEAC0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEAD8; } @@ -8056,9 +7713,7 @@ L_08ACEAD8: aot_gpr_4 = (50454u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEBA4; } @@ -8069,9 +7724,7 @@ L_08ACEB50: aot_gpr_4 = (17608u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEBA4; } @@ -8082,9 +7735,7 @@ L_08ACEB6C: aot_gpr_4 = (50426u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACEBA4; } @@ -8095,7 +7746,6 @@ L_08ACEB88: aot_gpr_4 = (17658u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_2 = (0u | 1u); if (branch_taken) { @@ -8133,7 +7783,6 @@ L_08ACEBAC: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEBF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACF7BC; } @@ -8165,7 +7814,6 @@ L_08ACEC38: aot_gpr_4 = (0u | 57u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACEDF4; } @@ -8175,7 +7823,6 @@ L_08ACEC4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACEDF4; } @@ -8184,7 +7831,6 @@ L_08ACEC4C: L_08ACEC5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08ACEDF4; } @@ -8197,7 +7843,6 @@ L_08ACEC68: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEC70: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACED08; } @@ -8207,7 +7852,6 @@ L_08ACEC78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & 8192u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACED08; } @@ -8220,7 +7864,6 @@ L_08ACEC88: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEC90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACED08; } @@ -8240,7 +7883,6 @@ L_08ACECA0: goto L_08ACECAC; L_08ACECAC: aot_gpr_31 = (0x08ACECB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACECB4u) goto L_08ACECB4; AOT_REGCACHE_SYNC_OUT(); return; L_08ACECB4: @@ -8254,7 +7896,6 @@ L_08ACECB8: AOT_REGCACHE_SYNC_OUT(); return; L_08ACECC4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08ACED08; } @@ -8269,7 +7910,6 @@ L_08ACECCC: goto L_08ACECD8; L_08ACECD8: aot_gpr_31 = (0x08ACECE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACECE0u) goto L_08ACECE0; AOT_REGCACHE_SYNC_OUT(); return; L_08ACECE0: @@ -8348,7 +7988,6 @@ L_08ACED80: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACEDB0; } @@ -8365,7 +8004,6 @@ L_08ACED90: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACEDC8; } @@ -8407,7 +8045,6 @@ L_08ACEDC8: L_08ACEDF4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF564; } @@ -8473,7 +8110,6 @@ L_08ACEE00: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEE64: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACEEF4; } @@ -8483,7 +8119,6 @@ L_08ACEE6C: ctx.gpr[20] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACEEF4; } @@ -8540,7 +8175,6 @@ L_08ACEEE0: ctx.gpr[20] = (ctx.gpr[20] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACEE7C; } @@ -8550,7 +8184,6 @@ L_08ACEEF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACEFB0; } @@ -8564,7 +8197,6 @@ L_08ACEF04: AOT_REGCACHE_SYNC_OUT(); return; L_08ACEF10: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACEF50; } @@ -8579,7 +8211,6 @@ L_08ACEF18: goto L_08ACEF24; L_08ACEF24: aot_gpr_31 = (0x08ACEF2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACEF2Cu) goto L_08ACEF2C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACEF2C: @@ -8611,7 +8242,6 @@ L_08ACEF50: goto L_08ACEF5C; L_08ACEF5C: aot_gpr_31 = (0x08ACEF64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACEF64u) goto L_08ACEF64; AOT_REGCACHE_SYNC_OUT(); return; L_08ACEF64: @@ -8631,7 +8261,6 @@ L_08ACEF80: goto L_08ACEF84; L_08ACEF84: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ACEFB0; } @@ -8675,7 +8304,6 @@ L_08ACEFB0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF564; } @@ -8688,7 +8316,6 @@ L_08ACEFE4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF288; } @@ -8697,7 +8324,6 @@ L_08ACEFE4: L_08ACF000: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF040; } @@ -8711,7 +8337,6 @@ L_08ACF00C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF040; } @@ -8722,7 +8347,6 @@ L_08ACF02C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF564; } @@ -8730,7 +8354,6 @@ L_08ACF02C: } L_08ACF040: aot_gpr_31 = (0x08ACF048u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF048u) goto L_08ACF048; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF048: @@ -8802,7 +8425,6 @@ L_08ACF0CC: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF16C; } @@ -8858,7 +8480,6 @@ L_08ACF158: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACF0DC; } @@ -8866,7 +8487,6 @@ L_08ACF158: } L_08ACF16C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF564; } @@ -8890,7 +8510,6 @@ L_08ACF1A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 33u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF1E0; } @@ -8911,7 +8530,6 @@ L_08ACF1B0: AOT_REGCACHE_SYNC_OUT(); return; L_08ACF1D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF564; } @@ -8921,7 +8539,6 @@ L_08ACF1E0: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF280; } @@ -8977,7 +8594,6 @@ L_08ACF26C: ctx.gpr[19] = (ctx.gpr[19] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACF1F0; } @@ -8985,7 +8601,6 @@ L_08ACF26C: } L_08ACF280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF564; } @@ -8995,7 +8610,6 @@ L_08ACF288: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (ctx.gpr[19] < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF324; } @@ -9050,7 +8664,6 @@ L_08ACF314: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (ctx.gpr[19] < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACF298; } @@ -9114,9 +8727,7 @@ L_08ACF398: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACF4B8; } @@ -9148,7 +8759,6 @@ L_08ACF3D4: goto L_08ACF3DC; L_08ACF3DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF424; } @@ -9158,9 +8768,7 @@ L_08ACF3E4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ACF424; } @@ -9205,7 +8813,6 @@ L_08ACF444: goto L_08ACF44C; L_08ACF44C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACF4A4; } @@ -9270,7 +8877,6 @@ L_08ACF4B8: L_08ACF4C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(478)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF50C; } @@ -9283,7 +8889,6 @@ L_08ACF4D8: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACF50C; } @@ -9313,7 +8918,6 @@ L_08ACF510: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF564; } @@ -9330,7 +8934,6 @@ L_08ACF52C: } L_08ACF538: { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACF564; } @@ -9340,7 +8943,6 @@ L_08ACF540: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF560; } @@ -9350,7 +8952,6 @@ L_08ACF550: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF564; } @@ -9373,7 +8974,6 @@ L_08ACF574: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF790; } @@ -9384,7 +8984,6 @@ L_08ACF584: goto L_08ACF588; L_08ACF588: { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACF790; } @@ -9392,7 +8991,6 @@ L_08ACF588: } L_08ACF590: aot_gpr_31 = (0x08ACF598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF598u) goto L_08ACF598; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF598: @@ -9437,7 +9035,6 @@ L_08ACF5D0: } L_08ACF5D8: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08ACF73C; } @@ -9452,7 +9049,6 @@ L_08ACF5E0: L_08ACF5EC: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ACF604; } @@ -9494,7 +9090,6 @@ L_08ACF604: AOT_REGCACHE_SYNC_OUT(); return; L_08ACF634: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF790; } @@ -9503,7 +9098,6 @@ L_08ACF634: L_08ACF63C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACF654; } @@ -9527,7 +9121,6 @@ L_08ACF654: AOT_REGCACHE_SYNC_OUT(); return; L_08ACF674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF790; } @@ -9536,7 +9129,6 @@ L_08ACF674: L_08ACF67C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACF694; } @@ -9566,7 +9158,6 @@ L_08ACF6B4: AOT_REGCACHE_SYNC_OUT(); return; L_08ACF6C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF790; } @@ -9575,7 +9166,6 @@ L_08ACF6C0: L_08ACF6C8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ACF6E0; } @@ -9595,7 +9185,6 @@ L_08ACF6E0: L_08ACF6EC: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ACF704; } @@ -9637,7 +9226,6 @@ L_08ACF704: AOT_REGCACHE_SYNC_OUT(); return; L_08ACF734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF790; } @@ -9652,7 +9240,6 @@ L_08ACF73C: L_08ACF748: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ACF760; } @@ -9717,7 +9304,6 @@ L_08ACF7BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 30u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF7EC; } @@ -9727,7 +9313,6 @@ L_08ACF7DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACF81C; } @@ -9767,7 +9352,6 @@ L_08ACF7EC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08ACF81Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 302u, 0x089EE05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF81Cu) goto L_08ACF81C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF81C: @@ -9791,7 +9375,6 @@ L_08ACF82C: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACEA4C; } @@ -9812,7 +9395,17 @@ L_08ACF83C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACF85C: { const std::uint32_t vfpu_address = ctx.gpr[6] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9866,18 +9459,37 @@ L_08ACF85C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACF884: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACF88C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9890,7 +9502,6 @@ L_08ACF88C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACF8A8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08ACF8DC; } @@ -9904,7 +9515,6 @@ L_08ACF8B0: L_08ACF8B8: aot_gpr_17 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08ACF8DC; } @@ -9913,7 +9523,6 @@ L_08ACF8B8: L_08ACF8C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF8D8; } @@ -9921,7 +9530,6 @@ L_08ACF8C4: } L_08ACF8D0: aot_gpr_31 = (0x08ACF8D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0089_entry, 89u, 282u, 0x089694D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF8D8u) goto L_08ACF8D8; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF8D8: @@ -9940,12 +9548,21 @@ L_08ACF8DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACF8F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACF934; } @@ -9957,7 +9574,6 @@ L_08ACF904: aot_gpr_5 = (aot_gpr_5 >> 1u); ctx.gpr[6] = (aot_gpr_5 < static_cast(8) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08ACF9AC; } @@ -9969,11 +9585,20 @@ L_08ACF91C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16184))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACF934: { const bool branch_taken = 0u == 0u; aot_gpr_2 = (0u | 0u); @@ -9992,12 +9617,10 @@ L_08ACF93C: } L_08ACF944: aot_gpr_31 = (0x08ACF94Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0142_entry, 142u, 138u, 0x08A3CA94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF94Cu) goto L_08ACF94C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF94C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF9B0; } @@ -10005,12 +9628,10 @@ L_08ACF94C: } L_08ACF954: aot_gpr_31 = (0x08ACF95Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 608u, 0x08AFEB48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF95Cu) goto L_08ACF95C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF95C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF9B0; } @@ -10018,12 +9639,10 @@ L_08ACF95C: } L_08ACF964: aot_gpr_31 = (0x08ACF96Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0064_entry, 64u, 241u, 0x089051ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF96Cu) goto L_08ACF96C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF96C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF9B0; } @@ -10031,12 +9650,10 @@ L_08ACF96C: } L_08ACF974: aot_gpr_31 = (0x08ACF97Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0009_entry, 9u, 332u, 0x0882B404u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF97Cu) goto L_08ACF97C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF9B0; } @@ -10044,12 +9661,10 @@ L_08ACF97C: } L_08ACF984: aot_gpr_31 = (0x08ACF98Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 858u, 0x08AAFE60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF98Cu) goto L_08ACF98C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF98C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF9B0; } @@ -10057,12 +9672,10 @@ L_08ACF98C: } L_08ACF994: aot_gpr_31 = (0x08ACF99Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 639u, 0x0887EFDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACF99Cu) goto L_08ACF99C; AOT_REGCACHE_SYNC_OUT(); return; L_08ACF99C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACF9B0; } @@ -10086,7 +9699,17 @@ L_08ACF9B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACF9BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -10157,7 +9780,6 @@ L_08ACFA24: goto L_08ACFA30; L_08ACFA30: aot_gpr_31 = (0x08ACFA38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACFA38u) goto L_08ACFA38; AOT_REGCACHE_SYNC_OUT(); return; L_08ACFA38: @@ -10165,7 +9787,6 @@ L_08ACFA38: goto L_08ACFA3C; L_08ACFA3C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACFA4C; } @@ -10188,21 +9809,51 @@ L_08ACFA4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFA60: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFA68: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFA70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -10223,7 +9874,6 @@ L_08ACFA70: L_08ACFA9C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(24))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10232,7 +9882,6 @@ L_08ACFA9C: L_08ACFAA8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(26))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10241,7 +9890,6 @@ L_08ACFAA8: L_08ACFAB4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(28))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10250,7 +9898,6 @@ L_08ACFAB4: L_08ACFAC0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(210))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10259,7 +9906,6 @@ L_08ACFAC0: L_08ACFACC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(212))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10268,7 +9914,6 @@ L_08ACFACC: L_08ACFAD8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(214))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10277,7 +9922,6 @@ L_08ACFAD8: L_08ACFAE4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(216))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10286,7 +9930,6 @@ L_08ACFAE4: L_08ACFAF0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(218))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10295,7 +9938,6 @@ L_08ACFAF0: L_08ACFAFC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(220))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10304,7 +9946,6 @@ L_08ACFAFC: L_08ACFB08: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(222))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFB20; } @@ -10376,7 +10017,17 @@ L_08ACFB8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFB9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -10397,7 +10048,6 @@ L_08ACFB9C: L_08ACFBC8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(24))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10406,7 +10056,6 @@ L_08ACFBC8: L_08ACFBD4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(26))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10415,7 +10064,6 @@ L_08ACFBD4: L_08ACFBE0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(28))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10424,7 +10072,6 @@ L_08ACFBE0: L_08ACFBEC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(210))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10433,7 +10080,6 @@ L_08ACFBEC: L_08ACFBF8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(212))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10442,7 +10088,6 @@ L_08ACFBF8: L_08ACFC04: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(214))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10451,7 +10096,6 @@ L_08ACFC04: L_08ACFC10: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(216))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10460,7 +10104,6 @@ L_08ACFC10: L_08ACFC1C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(218))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10469,7 +10112,6 @@ L_08ACFC1C: L_08ACFC28: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(220))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10478,7 +10120,6 @@ L_08ACFC28: L_08ACFC34: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(222))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ACFC4C; } @@ -10539,14 +10180,34 @@ L_08ACFC84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFCB0: jump_target = aot_gpr_31; aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(88)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFCB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -10597,7 +10258,6 @@ L_08ACFD18: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ACFD44; } @@ -10605,7 +10265,6 @@ L_08ACFD18: } L_08ACFD34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACFD54; } @@ -10613,7 +10272,6 @@ L_08ACFD34: } L_08ACFD3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACFE18; } @@ -10629,7 +10287,6 @@ L_08ACFD54: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACFDB0; } @@ -10674,7 +10331,6 @@ L_08ACFD90: AOT_REGCACHE_SYNC_OUT(); return; L_08ACFDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACFE04; } @@ -10684,7 +10340,6 @@ L_08ACFDB0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACFE04; } @@ -10750,7 +10405,17 @@ L_08ACFE18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFE30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -10769,7 +10434,6 @@ L_08ACFE50: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08ACFE70; } @@ -10777,7 +10441,6 @@ L_08ACFE50: } L_08ACFE60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACFEBC; } @@ -10785,7 +10448,6 @@ L_08ACFE60: } L_08ACFE68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACFF3C; } @@ -10830,7 +10492,6 @@ L_08ACFE9C: AOT_REGCACHE_SYNC_OUT(); return; L_08ACFEB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ACFF10; } @@ -10840,7 +10501,6 @@ L_08ACFEBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ACFF10; } @@ -10917,7 +10577,17 @@ L_08ACFF3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFF50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); @@ -10949,14 +10619,12 @@ L_08ACFF7C: goto L_08ACFF8C; L_08ACFF8C: aot_gpr_31 = (0x08ACFF94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 460u, 0x088DF770u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACFF94u) goto L_08ACFF94; AOT_REGCACHE_SYNC_OUT(); return; L_08ACFF94: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(80), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ACFFBC; } @@ -10966,7 +10634,6 @@ L_08ACFFA4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ACFFBC; } @@ -10974,7 +10641,6 @@ L_08ACFFA4: } L_08ACFFB4: aot_gpr_31 = (0x08ACFFBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ACFFBCu) goto L_08ACFFBC; AOT_REGCACHE_SYNC_OUT(); return; L_08ACFFBC: @@ -10986,7 +10652,17 @@ L_08ACFFBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ACFFD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -10995,7 +10671,6 @@ L_08ACFFD0: { const std::uint32_t aot_run_words[3]{aot_gpr_17, ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 3u, 0x08AD000Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -11005,7 +10680,6 @@ L_08ACFFF4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 3u, 0x08AD000Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0179.cpp b/profiles/vcs/generated/generated_unit_0179.cpp index 899c15d..4658dda 100644 --- a/profiles/vcs/generated/generated_unit_0179.cpp +++ b/profiles/vcs/generated/generated_unit_0179.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0179[4095] = { - 1, 2, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 7, 0, 8, 0, 9, 0, 0, 0, 10, 0, 11, 0, 12, 0, 13, - 0, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 0, 26, 0, 0, 0, 0, 27, - 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 0, 37, 0, 0, - 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, - 58, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, - 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 0, 0, 79, 0, 0, - 0, 0, 80, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 0, 86, 0, 0, 87, 0, 0, 88, 0, 0, 89, 0, 0, - 90, 0, 0, 91, 0, 92, 0, 93, 0, 0, 94, 0, 0, 95, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 99, 0, 100, 0, 101, 0, 0, 102, - 0, 0, 103, 0, 0, 0, 0, 104, 0, 105, 0, 106, 0, 107, 0, 0, 0, 0, 108, 0, 0, 109, 0, 110, 0, 111, 112, 0, 0, 0, 113, 0, - 0, 114, 0, 115, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 0, 121, 0, 0, 122, 0, 0, 123, - 0, 0, 124, 0, 0, 125, 0, 0, 126, 0, 127, 128, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, - 0, 134, 0, 135, 0, 0, 0, 136, 0, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 144, - 0, 0, 145, 0, 0, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 155, - 0, 0, 0, 156, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, - 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 163, 0, 0, 0, 164, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, - 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, - 0, 184, 0, 0, 0, 185, 0, 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, - 191, 0, 192, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 0, 206, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 210, - 0, 211, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, - 225, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 229, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 234, 0, 0, 0, 0, 235, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 240, 0, 0, 0, 0, 0, - 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 247, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, - 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 258, 0, 0, 259, 0, 260, 0, 261, - 0, 262, 0, 263, 0, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 268, 0, 0, 269, 0, 0, 0, 270, 0, 0, 271, 0, 272, 0, - 273, 0, 274, 0, 275, 0, 0, 276, 0, 0, 277, 0, 0, 278, 0, 0, 279, 0, 0, 280, 281, 0, 0, 282, 0, 0, 283, 0, 284, 0, 0, 0, - 285, 0, 286, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 294, 0, 0, 0, - 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 309, 0, 0, 0, 310, 0, 0, 311, 0, 312, 0, 313, 0, 314, 0, 315, 0, 0, 316, 0, 0, - 317, 0, 0, 318, 0, 0, 319, 0, 0, 320, 0, 0, 321, 0, 0, 0, 322, 0, 0, 323, 0, 324, 0, 325, 0, 326, 0, 327, 0, 0, 328, 0, - 0, 329, 0, 0, 330, 0, 0, 331, 0, 0, 332, 333, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 338, 0, 339, 0, - 340, 0, 341, 0, 342, 0, 343, 0, 344, 345, 0, 346, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, - 0, 0, 357, 0, 0, 358, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 0, 0, 366, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 369, 0, 0, 0, 0, 370, 0, 371, 0, 372, 0, - 373, 0, 374, 0, 0, 0, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 0, 0, 382, 0, - 0, 0, 383, 0, 384, 0, 385, 0, 386, 0, 0, 0, 387, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, - 0, 0, 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, 0, 397, 0, 0, 398, 0, 0, 0, 399, 0, 400, 0, 401, 0, 402, 0, 403, - 0, 0, 0, 404, 0, 405, 0, 406, 0, 407, 0, 408, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 411, 0, 0, 0, 0, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, - 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 422, 0, 423, 0, 0, 0, 0, 424, 0, 425, 0, - 426, 0, 0, 0, 0, 427, 0, 428, 0, 429, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 435, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 439, 0, 440, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, - 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 455, 0, 456, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, - 0, 0, 0, 0, 464, 465, 466, 0, 467, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 469, 470, 471, 0, 472, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, - 0, 0, 0, 480, 481, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 485, 486, 487, 0, 488, 0, 0, 0, 0, 0, - 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 494, 0, 0, 0, 0, 0, 0, 0, - 495, 0, 0, 0, 0, 0, 0, 496, 497, 498, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, - 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 510, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, 523, 0, 524, 0, 0, - 0, 525, 0, 0, 526, 0, 0, 0, 527, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 532, - 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 0, 537, 0, 0, 538, 0, 0, 0, 539, 0, - 0, 540, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, - 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 553, 0, 0, - 554, 0, 0, 0, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 0, - 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 564, 0, - 0, 0, 0, 565, 0, 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, - 571, 0, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 575, 0, 0, 0, 576, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 579, 0, - 0, 0, 0, 580, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 584, 0, 0, 585, 0, 0, 0, 0, 586, 0, 0, 587, 0, - 0, 0, 0, 588, 0, 0, 589, 0, 590, 0, 591, 0, 0, 0, 0, 592, 0, 0, 593, 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 0, 0, 0, - 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 601, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, - 605, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 608, 0, 0, 609, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 613, - 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, - 621, 0, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 0, 0, 628, 0, 0, - 629, 0, 0, 0, 0, 630, 0, 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, 0, - 637, 0, 0, 0, 0, 638, 0, 0, 639, 0, 0, 0, 640, 0, 0, 641, 0, 0, 0, 0, 642, 0, 0, 643, 0, 0, 0, 644, 0, 0, 645, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 646, 647, 0, 0, 648, 0, 0, 0, 649, 0, 0, 0, 650, 0, 0, 0, 0, 0, 651, 0, - 0, 652, 0, 653, 0, 654, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 658, 659, 660, 0, - 0, 0, 661, 0, 0, 662, 0, 0, 663, 0, 664, 665, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 0, 0, 669, 0, 0, 670, - 0, 0, 671, 0, 672, 673, 0, 674, 0, 0, 0, 0, 675, 0, 0, 0, 676, 0, 0, 0, 677, 678, 679, 0, 680, 0, 0, 681, 0, 682, 683, 0, - 684, 0, 0, 0, 0, 0, 685, 0, 686, 687, 0, 688, 0, 0, 0, 689, 0, 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, - 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, - 697, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 702, 703, 0, - 0, 704, 0, 705, 0, 0, 0, 0, 706, 0, 0, 0, 707, 708, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 712, 0, - 0, 0, 713, 0, 714, 0, 0, 715, 0, 0, 0, 0, 0, 716, 0, 717, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 0, 0, 0, 725, 0, 0, 726, 0, - 0, 0, 727, 0, 728, 0, 0, 729, 0, 0, 730, 731, 0, 0, 0, 732, 0, 733, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, - 0, 735, 0, 0, 736, 0, 737, 0, 738, 0, 739, 0, 740, 0, 741, 0, 742, 0, 743, 0, 0, 0, 744, 0, 0, 0, 745, 0, 0, 0, 0, 0, - 0, 0, 746, 0, 0, 747, 0, 748, 0, 0, 749, 0, 750, 0, 0, 0, 0, 0, 751, 0, 752, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 754, - 755, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 758, 0, 0, 759, 0, 0, 760, 0, 0, 0, 761, 0, 0, 0, 762, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0179[64] = { + 0x12051050AA2A888Bull, 0x8421020000002004ull, 0x2108408010842040ull, 0x0000400004210810ull, + 0x04002000000A8000ull, 0x2A81084000001010ull, 0x22AA095510AAA281ull, 0x954924A924924924ull, + 0x9249102A46A42A84ull, 0x8095548AA2042D24ull, 0x02101028A1055544ull, 0x0090401020D11004ull, + 0x0000240010004820ull, 0x40202A2222222100ull, 0x0002885044020A45ull, 0x9100020001600000ull, + 0x0010008000000502ull, 0x5550008000100080ull, 0x000001084100000Bull, 0x0040000800C22400ull, + 0x2901202404400000ull, 0xA914108410900480ull, 0x149924955224924Aull, 0x0000200004004085ull, + 0x4014809012022000ull, 0x25548A0842084802ull, 0x52824C924AA91249ull, 0x0000010400408B55ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0080000000000000ull, 0x22AA08A454200040ull, + 0x4210AA8554290000ull, 0x0000000000041154ull, 0x2800000000400001ull, 0x00008AA8AA894444ull, + 0x000000010A000000ull, 0x1400000000011400ull, 0x50A8400000200002ull, 0x08282A00020142A1ull, + 0x00100000004102AAull, 0x4000000002052200ull, 0x0400A0002A000020ull, 0x0B81017020200500ull, + 0x1008014001002800ull, 0x0140250205C080B8ull, 0x4000050810040B81ull, 0x1020A44000800500ull, + 0x2C40180088002400ull, 0x4488888088880912ull, 0x2042048120489122ull, 0x4201084021080481ull, + 0x4848908902240908ull, 0x0914854848484848ull, 0x8448484912122412ull, 0x2121212128840884ull, + 0x4890912121121121ull, 0x711000AA41113000ull, 0x697110B492802D24ull, 0x1210000440288B41ull, + 0x4902310A62020089ull, 0x485010280042A094ull, 0x0445555201028C94ull, 0x44498005811414A4ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0179[64] = { + 1u, 21u, 28u, 38u, 44u, 49u, 58u, 80u, 103u, 124u, 145u, 161u, 172u, 178u, 191u, 204u, + 211u, 216u, 225u, 232u, 239u, 248u, 262u, 285u, 291u, 301u, 317u, 340u, 351u, 351u, 351u, 352u, + 367u, 383u, 389u, 393u, 410u, 413u, 418u, 426u, 439u, 447u, 453u, 460u, 473u, 480u, 495u, 506u, + 515u, 525u, 540u, 554u, 565u, 580u, 597u, 614u, 629u, 646u, 661u, 684u, 697u, 713u, 727u, 746u, }; void recomp_unit_0179_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0179_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AD0000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0179[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0179[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0179[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AD0000; @@ -934,18 +841,15 @@ LOCAL_DISPATCH: } } L_08AD0000: - // nop goto L_08AD0004; L_08AD0004: aot_gpr_31 = (0x08AD000Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD000Cu) goto L_08AD000C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD000C: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(64), 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AD00F0; } @@ -955,7 +859,6 @@ L_08AD001C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0054; } @@ -980,7 +883,6 @@ L_08AD0044: AOT_REGCACHE_SYNC_OUT(); return; L_08AD004C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD0098; } @@ -990,7 +892,6 @@ L_08AD0054: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0098; } @@ -1008,7 +909,6 @@ L_08AD006C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD0074: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD0090; } @@ -1047,7 +947,6 @@ L_08AD00B0: goto L_08AD00C0; L_08AD00C0: aot_gpr_31 = (0x08AD00C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0054_entry, 54u, 460u, 0x088DF770u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD00C8u) goto L_08AD00C8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD00C8: @@ -1057,7 +956,6 @@ L_08AD00C8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD00F0; } @@ -1081,7 +979,17 @@ L_08AD00F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0108: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -1161,7 +1069,6 @@ L_08AD01A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_13)); goto L_08AD01C0; @@ -1170,7 +1077,6 @@ L_08AD01A4: L_08AD01C0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_13)); goto L_08AD01D4; @@ -1179,7 +1085,6 @@ L_08AD01C0: L_08AD01D4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_12)); goto L_08AD01E8; @@ -1188,7 +1093,6 @@ L_08AD01D4: L_08AD01E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_12)); goto L_08AD01FC; @@ -1220,7 +1124,6 @@ L_08AD0218: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_13)); goto L_08AD0234; @@ -1229,7 +1132,6 @@ L_08AD0218: L_08AD0234: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_13)); goto L_08AD0248; @@ -1238,7 +1140,6 @@ L_08AD0234: L_08AD0248: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_12)); goto L_08AD025C; @@ -1247,7 +1148,6 @@ L_08AD0248: L_08AD025C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_12)); goto L_08AD0270; @@ -1283,7 +1183,6 @@ L_08AD029C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_13)); goto L_08AD02B8; @@ -1292,7 +1191,6 @@ L_08AD029C: L_08AD02B8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_13)); goto L_08AD02CC; @@ -1301,7 +1199,6 @@ L_08AD02B8: L_08AD02CC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_12)); goto L_08AD02E0; @@ -1310,7 +1207,6 @@ L_08AD02CC: L_08AD02E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_12)); goto L_08AD02F4; @@ -1342,7 +1238,6 @@ L_08AD0310: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_13)); goto L_08AD032C; @@ -1351,7 +1246,6 @@ L_08AD0310: L_08AD032C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_13)); goto L_08AD0340; @@ -1360,7 +1254,6 @@ L_08AD032C: L_08AD0340: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_12)); goto L_08AD0354; @@ -1369,7 +1262,6 @@ L_08AD0340: L_08AD0354: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), std::bit_cast(aot_fpr_12)); goto L_08AD0368; @@ -1405,7 +1297,17 @@ L_08AD0368: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD03B8: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (aot_gpr_6 << 2u); @@ -1533,11 +1435,20 @@ L_08AD043C: goto L_08AD0444; L_08AD0444: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD044C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1607,7 +1518,6 @@ L_08AD04E8: aot_fpr_12 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_20; const float ft = aot_fpr_20; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08AD0510; @@ -1628,7 +1538,17 @@ L_08AD0510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0530: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -1731,13 +1651,22 @@ L_08AD0530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0598: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD05E4; } @@ -1748,7 +1677,6 @@ L_08AD05AC: aot_gpr_6 = (8u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD05E4; } @@ -1761,7 +1689,6 @@ L_08AD05C0: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD05EC; } @@ -1785,7 +1712,6 @@ L_08AD05E4: } L_08AD05EC: aot_gpr_31 = (0x08AD05F4u); - // nop goto L_08AD0530; L_08AD05F4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1794,7 +1720,17 @@ L_08AD05F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0600: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 14u); @@ -1802,7 +1738,6 @@ L_08AD0600: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD0624; } @@ -1824,45 +1759,89 @@ L_08AD0624: goto L_08AD0634; L_08AD0634: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD063C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0644: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD064C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0654: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD065C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD0690; } @@ -1872,7 +1851,6 @@ L_08AD0670: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AD0698; } @@ -1885,7 +1863,6 @@ L_08AD0680: AOT_REGCACHE_SYNC_OUT(); return; L_08AD0688: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD06A0; } @@ -1893,7 +1870,6 @@ L_08AD0688: } L_08AD0690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD06A0; } @@ -1911,7 +1887,17 @@ L_08AD06A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD06AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1923,7 +1909,6 @@ L_08AD06AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD06C4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD06D4; } @@ -1931,7 +1916,6 @@ L_08AD06C4: } L_08AD06CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD06E4; } @@ -1955,13 +1939,22 @@ L_08AD06E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD06F4: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(22))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -1970,7 +1963,6 @@ L_08AD06F4: L_08AD0708: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(24))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -1979,7 +1971,6 @@ L_08AD0708: L_08AD0714: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(26))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -1988,7 +1979,6 @@ L_08AD0714: L_08AD0720: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(28))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -1997,7 +1987,6 @@ L_08AD0720: L_08AD072C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(210))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2006,7 +1995,6 @@ L_08AD072C: L_08AD0738: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(212))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2015,7 +2003,6 @@ L_08AD0738: L_08AD0744: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(214))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2024,7 +2011,6 @@ L_08AD0744: L_08AD0750: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(216))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2033,7 +2019,6 @@ L_08AD0750: L_08AD075C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(218))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2042,7 +2027,6 @@ L_08AD075C: L_08AD0768: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(220))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2051,7 +2035,6 @@ L_08AD0768: L_08AD0774: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(222))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD078C; } @@ -2076,7 +2059,6 @@ L_08AD078C: } L_08AD0794: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AD082C; } @@ -2085,7 +2067,6 @@ L_08AD0794: L_08AD079C: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(78))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2094,7 +2075,6 @@ L_08AD079C: L_08AD07A8: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(80))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2103,7 +2083,6 @@ L_08AD07A8: L_08AD07B4: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(82))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2112,7 +2091,6 @@ L_08AD07B4: L_08AD07C0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(130))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2145,7 +2123,6 @@ L_08AD07E0: } L_08AD07E8: { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2154,7 +2131,6 @@ L_08AD07E8: L_08AD07F0: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(304))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2163,7 +2139,6 @@ L_08AD07F0: L_08AD07FC: ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(244))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2264,7 +2239,6 @@ L_08AD0884: goto L_08AD088C; L_08AD088C: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2277,7 +2251,6 @@ L_08AD0894: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AD08C0; } @@ -2287,7 +2260,6 @@ L_08AD08B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(482)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD0824; } @@ -2296,7 +2268,6 @@ L_08AD08B0: L_08AD08C0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2305,7 +2276,6 @@ L_08AD08C0: L_08AD08CC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2314,7 +2284,6 @@ L_08AD08CC: L_08AD08D8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(6))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2323,7 +2292,6 @@ L_08AD08D8: L_08AD08E4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2332,7 +2300,6 @@ L_08AD08E4: L_08AD08F0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2341,7 +2308,6 @@ L_08AD08F0: L_08AD08FC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2350,7 +2316,6 @@ L_08AD08FC: L_08AD0908: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(14))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0920; } @@ -2359,7 +2324,6 @@ L_08AD0908: L_08AD0914: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD0928; } @@ -2378,17 +2342,25 @@ L_08AD0928: goto L_08AD092C; L_08AD092C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0934: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD0984; } @@ -2401,7 +2373,6 @@ L_08AD0948: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD097C; } @@ -2411,7 +2382,6 @@ L_08AD0964: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AD098C; } @@ -2419,7 +2389,6 @@ L_08AD0964: } L_08AD0974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD09C8; } @@ -2427,7 +2396,6 @@ L_08AD0974: } L_08AD097C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD09D0; } @@ -2435,7 +2403,6 @@ L_08AD097C: } L_08AD0984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD09D0; } @@ -2454,7 +2421,6 @@ L_08AD098C: L_08AD099C: aot_gpr_6 = (aot_gpr_6 + static_cast(-21846)); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AD09B8; } @@ -2463,13 +2429,11 @@ L_08AD099C: L_08AD09A8: jump_target = aot_gpr_5; aot_gpr_31 = (0x08AD09B0u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD09B0u) goto L_08AD09B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD09B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD09C0; } @@ -2477,12 +2441,10 @@ L_08AD09B0: } L_08AD09B8: aot_gpr_31 = (0x08AD09C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0085_entry, 85u, 528u, 0x0895BBA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD09C0u) goto L_08AD09C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD09C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD09D0; } @@ -2500,7 +2462,17 @@ L_08AD09D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD09DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -2517,7 +2489,6 @@ L_08AD09DC: L_08AD09FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD0A38; } @@ -2527,7 +2498,6 @@ L_08AD0A08: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AD0A30; } @@ -2535,12 +2505,10 @@ L_08AD0A08: } L_08AD0A18: aot_gpr_31 = (0x08AD0A20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0018_entry, 18u, 271u, 0x0884D5D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD0A20u) goto L_08AD0A20; AOT_REGCACHE_SYNC_OUT(); return; L_08AD0A20: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD0A48; } @@ -2548,7 +2516,6 @@ L_08AD0A20: } L_08AD0A28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD0AD0; } @@ -2556,7 +2523,6 @@ L_08AD0A28: } L_08AD0A30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD0AD0; } @@ -2564,7 +2530,6 @@ L_08AD0A30: } L_08AD0A38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD0AD0; } @@ -2572,7 +2537,6 @@ L_08AD0A38: } L_08AD0A40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD0AD0; } @@ -2600,7 +2564,6 @@ L_08AD0A60: AOT_REGCACHE_SYNC_OUT(); return; L_08AD0A74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD0AD0; } @@ -2610,7 +2573,6 @@ L_08AD0A7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD0AB0; } @@ -2652,7 +2614,17 @@ L_08AD0AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0AE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_4 = (aot_gpr_4 << 2u); @@ -2666,7 +2638,17 @@ L_08AD0AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2721,9 +2703,7 @@ L_08AD0B74: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD0C70; } @@ -2737,7 +2717,6 @@ L_08AD0B90: aot_gpr_4 = (15048u << 16u); aot_gpr_4 = (aot_gpr_4 | 62915u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -2882,7 +2861,6 @@ L_08AD0D20: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(210))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2892,7 +2870,6 @@ L_08AD0D34: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(212))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2902,7 +2879,6 @@ L_08AD0D44: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(214))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2912,7 +2888,6 @@ L_08AD0D54: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(216))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2922,7 +2897,6 @@ L_08AD0D64: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(218))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2932,7 +2906,6 @@ L_08AD0D74: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(220))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2942,7 +2915,6 @@ L_08AD0D84: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(222))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD0DA4; } @@ -2968,7 +2940,6 @@ L_08AD0DA4: } L_08AD0DAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD0DD4; } @@ -3020,7 +2991,6 @@ L_08AD0E08: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD0E2C; } @@ -3029,7 +2999,6 @@ L_08AD0E08: L_08AD0E18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD0E2C; } @@ -3053,7 +3022,17 @@ L_08AD0E2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3081,7 +3060,6 @@ L_08AD0E78: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD0EAC; } @@ -3107,14 +3085,33 @@ L_08AD0EAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0EBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD0EC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3162,7 +3159,6 @@ L_08AD0EC4: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_13)) && aot_fpr_20 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -3240,7 +3236,6 @@ L_08AD0FE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD1004; } @@ -3249,7 +3244,6 @@ L_08AD0FE0: L_08AD0FF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD1004; } @@ -3274,14 +3268,33 @@ L_08AD1004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD1020: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD1028: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(48)); @@ -3325,9 +3338,7 @@ L_08AD1028: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD11F8; } @@ -3344,9 +3355,7 @@ L_08AD109C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD11F0; } @@ -3385,9 +3394,7 @@ L_08AD10D0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD11E8; } @@ -3404,9 +3411,7 @@ L_08AD111C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD11E0; } @@ -3445,9 +3450,7 @@ L_08AD1150: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD11D8; } @@ -3464,9 +3467,7 @@ L_08AD119C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD1200; } @@ -3529,7 +3530,17 @@ L_08AD1204: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD120C: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3683,7 +3694,6 @@ L_08AD12A0: L_08AD1328: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD1344; } @@ -3732,7 +3742,17 @@ L_08AD135C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD138C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3905,7 +3925,6 @@ L_08AD155C: ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD1738; } @@ -3924,7 +3943,6 @@ L_08AD1588: ctx.gpr[18] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD171C; } @@ -3951,7 +3969,6 @@ L_08AD15B0: } L_08AD15C8: { const bool branch_taken = ctx.gpr[22] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AD1654; } @@ -3961,7 +3978,6 @@ L_08AD15D0: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_6 = (aot_gpr_5 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4002,7 +4018,6 @@ L_08AD15FC: } L_08AD1604: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AD1648; } @@ -4011,7 +4026,6 @@ L_08AD1604: L_08AD160C: ctx.gpr[17] = (aot_gpr_4 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4020,7 +4034,6 @@ L_08AD160C: L_08AD1618: ctx.gpr[17] = (aot_gpr_4 + static_cast(28)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4029,7 +4042,6 @@ L_08AD1618: L_08AD1624: ctx.gpr[17] = (aot_gpr_4 + static_cast(36)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4038,7 +4050,6 @@ L_08AD1624: L_08AD1630: ctx.gpr[17] = (aot_gpr_4 + static_cast(12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4047,7 +4058,6 @@ L_08AD1630: L_08AD163C: ctx.gpr[17] = (aot_gpr_4 + static_cast(20)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4056,7 +4066,6 @@ L_08AD163C: L_08AD1648: ctx.gpr[17] = (aot_gpr_4 + static_cast(48)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4066,7 +4075,6 @@ L_08AD1654: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_6 = (aot_gpr_5 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4107,7 +4115,6 @@ L_08AD1680: } L_08AD1688: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AD16CC; } @@ -4116,7 +4123,6 @@ L_08AD1688: L_08AD1690: ctx.gpr[17] = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4125,7 +4131,6 @@ L_08AD1690: L_08AD169C: ctx.gpr[17] = (aot_gpr_4 + static_cast(32)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4134,7 +4139,6 @@ L_08AD169C: L_08AD16A8: ctx.gpr[17] = (aot_gpr_4 + static_cast(40)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4143,7 +4147,6 @@ L_08AD16A8: L_08AD16B4: ctx.gpr[17] = (aot_gpr_4 + static_cast(16)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4152,7 +4155,6 @@ L_08AD16B4: L_08AD16C0: ctx.gpr[17] = (aot_gpr_4 + static_cast(24)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD16D0; } @@ -4170,7 +4172,6 @@ L_08AD16D0: L_08AD16DC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD16F0; } @@ -4237,7 +4238,17 @@ L_08AD1738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD1768: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4410,7 +4421,6 @@ L_08AD1938: ctx.gpr[21] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD1B58; } @@ -4429,7 +4439,6 @@ L_08AD1964: ctx.gpr[19] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD1B3C; } @@ -4456,7 +4465,6 @@ L_08AD198C: } L_08AD19A4: { const bool branch_taken = ctx.gpr[22] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD1A30; } @@ -4466,7 +4474,6 @@ L_08AD19AC: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_6 = (aot_gpr_5 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4507,7 +4514,6 @@ L_08AD19D8: } L_08AD19E0: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AD1A24; } @@ -4516,7 +4522,6 @@ L_08AD19E0: L_08AD19E8: ctx.gpr[17] = (aot_gpr_4 | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4525,7 +4530,6 @@ L_08AD19E8: L_08AD19F4: ctx.gpr[17] = (aot_gpr_4 + static_cast(28)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4534,7 +4538,6 @@ L_08AD19F4: L_08AD1A00: ctx.gpr[17] = (aot_gpr_4 + static_cast(36)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4543,7 +4546,6 @@ L_08AD1A00: L_08AD1A0C: ctx.gpr[17] = (aot_gpr_4 + static_cast(12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4552,7 +4554,6 @@ L_08AD1A0C: L_08AD1A18: ctx.gpr[17] = (aot_gpr_4 + static_cast(20)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4561,7 +4562,6 @@ L_08AD1A18: L_08AD1A24: ctx.gpr[17] = (aot_gpr_4 + static_cast(48)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4571,7 +4571,6 @@ L_08AD1A30: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_6 = (aot_gpr_5 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4612,7 +4611,6 @@ L_08AD1A5C: } L_08AD1A64: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AD1AA8; } @@ -4621,7 +4619,6 @@ L_08AD1A64: L_08AD1A6C: ctx.gpr[17] = (aot_gpr_4 + static_cast(4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4630,7 +4627,6 @@ L_08AD1A6C: L_08AD1A78: ctx.gpr[17] = (aot_gpr_4 + static_cast(32)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4639,7 +4635,6 @@ L_08AD1A78: L_08AD1A84: ctx.gpr[17] = (aot_gpr_4 + static_cast(40)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4648,7 +4643,6 @@ L_08AD1A84: L_08AD1A90: ctx.gpr[17] = (aot_gpr_4 + static_cast(16)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4657,7 +4651,6 @@ L_08AD1A90: L_08AD1A9C: ctx.gpr[17] = (aot_gpr_4 + static_cast(24)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1AAC; } @@ -4669,7 +4662,6 @@ L_08AD1AA8: L_08AD1AAC: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AD1B2C; } @@ -4703,7 +4695,6 @@ L_08AD1ADC: L_08AD1AE4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AD1AF8; } @@ -4715,7 +4706,6 @@ L_08AD1AF0: goto L_08AD1AF8; L_08AD1AF8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD1B08; } @@ -4727,7 +4717,6 @@ L_08AD1B00: goto L_08AD1B08; L_08AD1B08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD1B18; } @@ -4735,12 +4724,10 @@ L_08AD1B08: } L_08AD1B10: aot_gpr_31 = (0x08AD1B18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0000_entry, 0u, 595u, 0x08807CB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD1B18u) goto L_08AD1B18; AOT_REGCACHE_SYNC_OUT(); return; L_08AD1B18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1B24; } @@ -4751,7 +4738,6 @@ L_08AD1B20: goto L_08AD1B24; L_08AD1B24: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AD1AB8; } @@ -4799,14 +4785,23 @@ L_08AD1B58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD1B88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AD1BA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 783u, 0x08AAF864u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD1BA0u) goto L_08AD1BA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD1BA0: @@ -5016,7 +5011,6 @@ L_08AD1BA0: aot_gpr_4 = (aot_gpr_4 & ctx.gpr[14]); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(76), aot_gpr_4); aot_gpr_31 = (0x08AD1EDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD1EDCu) goto L_08AD1EDC; AOT_REGCACHE_SYNC_OUT(); return; L_08AD1EDC: @@ -5038,7 +5032,17 @@ L_08AD1EDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD1F18: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5068,7 +5072,6 @@ L_08AD1F54: } L_08AD1F68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD1F88; } @@ -5076,7 +5079,6 @@ L_08AD1F68: } L_08AD1F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2740; } @@ -5091,7 +5093,6 @@ L_08AD1F78: L_08AD1F88: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(17))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD1F9C; } @@ -5106,7 +5107,6 @@ L_08AD1F9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD1FCC; } @@ -5118,7 +5118,6 @@ L_08AD1FAC: aot_gpr_4 = (aot_gpr_4 >> 1u); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5134,7 +5133,6 @@ L_08AD1FC4: } L_08AD1FCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2740; } @@ -5150,7 +5148,6 @@ L_08AD1FD4: } L_08AD1FDC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2740; } @@ -5160,7 +5157,6 @@ L_08AD1FE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD204C; } @@ -5183,7 +5179,6 @@ L_08AD1FF4: aot_fpr_13 = std::sqrt(aot_fpr_13); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30400))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AD2040; @@ -5196,7 +5191,6 @@ L_08AD2040: goto L_08AD0B08; L_08AD204C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2740; } @@ -5207,7 +5201,6 @@ L_08AD2054: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(78))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2088; } @@ -5229,7 +5222,6 @@ L_08AD2078: goto L_08AD065C; L_08AD2080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5240,7 +5232,6 @@ L_08AD2088: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(80))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD20BC; } @@ -5262,7 +5253,6 @@ L_08AD20AC: goto L_08AD065C; L_08AD20B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5273,7 +5263,6 @@ L_08AD20BC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(82))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD20F8; } @@ -5284,7 +5273,6 @@ L_08AD20D0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(130))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD20F8; } @@ -5295,7 +5283,6 @@ L_08AD20E4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(132))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2120; } @@ -5305,7 +5292,6 @@ L_08AD20F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(482)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5322,7 +5308,6 @@ L_08AD2110: goto L_08AD065C; L_08AD2118: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5332,7 +5317,6 @@ L_08AD2120: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 345u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD22F4; } @@ -5355,7 +5339,6 @@ L_08AD2130: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08AD2148u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD2148u) goto L_08AD2148; AOT_REGCACHE_SYNC_OUT(); return; L_08AD2148: @@ -5483,7 +5466,6 @@ L_08AD2258: AOT_REGCACHE_SYNC_OUT(); return; L_08AD22EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5555,7 +5537,6 @@ L_08AD235C: goto L_08AD2364; L_08AD2364: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD237C; } @@ -5567,7 +5548,6 @@ L_08AD236C: goto L_08AD0E44; L_08AD2374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5577,7 +5557,6 @@ L_08AD237C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(482)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD23AC; } @@ -5599,7 +5578,6 @@ L_08AD239C: goto L_08AD065C; L_08AD23A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5609,7 +5587,6 @@ L_08AD23AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 342u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD246C; } @@ -5766,7 +5743,6 @@ L_08AD23BC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5777,7 +5753,6 @@ L_08AD246C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(304))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2530; } @@ -5934,7 +5909,6 @@ L_08AD2480: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -5944,7 +5918,6 @@ L_08AD2530: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 344u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD25F0; } @@ -6101,7 +6074,6 @@ L_08AD2540: AOT_REGCACHE_SYNC_OUT(); return; L_08AD25E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -6112,7 +6084,6 @@ L_08AD25F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(244))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD26B8; } @@ -6163,9 +6134,7 @@ L_08AD2604: aot_gpr_5 = (16968u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD26B8; } @@ -6215,7 +6184,6 @@ L_08AD26B8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(2))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD26DC; } @@ -6228,7 +6196,6 @@ L_08AD26CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD26D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2740; } @@ -6239,7 +6206,6 @@ L_08AD26DC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2700; } @@ -6252,7 +6218,6 @@ L_08AD26F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AD26F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2740; } @@ -6263,7 +6228,6 @@ L_08AD2700: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(6))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2724; } @@ -6276,7 +6240,6 @@ L_08AD2714: AOT_REGCACHE_SYNC_OUT(); return; L_08AD271C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2740; } @@ -6287,7 +6250,6 @@ L_08AD2724: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD2740; } @@ -6314,7 +6276,17 @@ L_08AD2740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD2764: aot_gpr_29 = (aot_gpr_29 + static_cast(-560)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6338,7 +6310,6 @@ L_08AD27A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD27AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD281C; } @@ -6357,7 +6328,6 @@ L_08AD27B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD27CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD281C; } @@ -6369,7 +6339,6 @@ L_08AD27D4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2814; } @@ -6397,7 +6366,6 @@ L_08AD27EC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2804: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2824; } @@ -6405,7 +6373,6 @@ L_08AD2804: } L_08AD280C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD29F8; } @@ -6444,9 +6411,7 @@ L_08AD2840: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8620))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD2948; } @@ -6551,7 +6516,6 @@ L_08AD2924: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2948; } @@ -6560,7 +6524,6 @@ L_08AD2924: L_08AD2934: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2948; } @@ -6578,7 +6541,6 @@ L_08AD2948: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD2FD4; } @@ -6634,7 +6596,6 @@ L_08AD29F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2FD4; } @@ -6660,12 +6621,10 @@ L_08AD2A14: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[26])); aot_gpr_31 = (0x08AD2A64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD2A64u) goto L_08AD2A64; AOT_REGCACHE_SYNC_OUT(); return; L_08AD2A64: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2B54; } @@ -6673,7 +6632,6 @@ L_08AD2A64: } L_08AD2A6C: aot_gpr_31 = (0x08AD2A74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD2A74u) goto L_08AD2A74; AOT_REGCACHE_SYNC_OUT(); return; L_08AD2A74: @@ -6697,7 +6655,6 @@ L_08AD2A74: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2AB4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2AE8; } @@ -6746,7 +6703,6 @@ L_08AD2AE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2B20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2B54; } @@ -6782,7 +6738,6 @@ L_08AD2B54: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -6795,7 +6750,6 @@ L_08AD2B74: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -6811,7 +6765,6 @@ L_08AD2B94: goto L_08AD2B98; L_08AD2B98: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2CCC; } @@ -6823,7 +6776,6 @@ L_08AD2BA0: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -6836,7 +6788,6 @@ L_08AD2BC0: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -6852,7 +6803,6 @@ L_08AD2BE0: goto L_08AD2BE4; L_08AD2BE4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2CCC; } @@ -6879,7 +6829,6 @@ L_08AD2BEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2C2C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2C60; } @@ -6928,7 +6877,6 @@ L_08AD2C60: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2C98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2CCC; } @@ -6965,7 +6913,6 @@ L_08AD2CCC: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -6978,7 +6925,6 @@ L_08AD2CF0: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -6994,7 +6940,6 @@ L_08AD2D10: goto L_08AD2D14; L_08AD2D14: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2DE0; } @@ -7006,7 +6951,6 @@ L_08AD2D1C: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7019,7 +6963,6 @@ L_08AD2D3C: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7035,7 +6978,6 @@ L_08AD2D5C: goto L_08AD2D60; L_08AD2D60: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD2D84; } @@ -7077,7 +7019,6 @@ L_08AD2D84: AOT_REGCACHE_SYNC_OUT(); return; L_08AD2DA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD2DB4; } @@ -7105,7 +7046,6 @@ L_08AD2DB4: goto L_08AD2DD8; L_08AD2DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2EA0; } @@ -7117,7 +7057,6 @@ L_08AD2DE0: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -7130,7 +7069,6 @@ L_08AD2E00: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -7146,7 +7084,6 @@ L_08AD2E20: goto L_08AD2E24; L_08AD2E24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2E48; } @@ -7170,7 +7107,6 @@ L_08AD2E2C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD2EA0; } @@ -7184,9 +7120,7 @@ L_08AD2E48: aot_fpr_12 = ctx.fpr[26] - aot_fpr_12; aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD2E8C; } @@ -7236,7 +7170,6 @@ L_08AD2E8C: goto L_08AD2EA0; L_08AD2EA0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AD2FBC; } @@ -7276,9 +7209,7 @@ L_08AD2EA8: aot_gpr_4 = (aot_gpr_4 | 1153u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD2F20; } @@ -7368,7 +7299,6 @@ L_08AD2F98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(440))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2FBC; } @@ -7377,7 +7307,6 @@ L_08AD2F98: L_08AD2FA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(432))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD2FBC; } @@ -7406,7 +7335,6 @@ L_08AD2FD4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD30AC; } @@ -7475,7 +7403,6 @@ L_08AD307C: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); ctx.gpr[2] = (ctx.gpr[2] + aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD30B0; } @@ -7501,12 +7428,21 @@ L_08AD30B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD30D8: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(40)))))); ctx.gpr[7] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AD30EC; } @@ -7521,7 +7457,17 @@ L_08AD30EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD30F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7535,7 +7481,17 @@ L_08AD3104: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3110: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7549,7 +7505,17 @@ L_08AD3120: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD312C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7580,7 +7546,17 @@ L_08AD316C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD317C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7611,7 +7587,17 @@ L_08AD31BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD31CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7625,7 +7611,17 @@ L_08AD31DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD31E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7639,7 +7635,17 @@ L_08AD31F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3204: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7653,7 +7659,17 @@ L_08AD3214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3220: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7667,7 +7683,17 @@ L_08AD3230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD323C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7681,7 +7707,17 @@ L_08AD324C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3258: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -7699,7 +7735,17 @@ L_08AD3274: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3280: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7717,7 +7763,17 @@ L_08AD329C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD32A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7736,7 +7792,17 @@ L_08AD32C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD32D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -7754,7 +7820,17 @@ L_08AD32F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3300: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -7772,7 +7848,17 @@ L_08AD331C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3328: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7805,7 +7891,17 @@ L_08AD3360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3374: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7838,7 +7934,17 @@ L_08AD33AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD33C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7871,7 +7977,17 @@ L_08AD33F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD340C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7887,7 +8003,17 @@ L_08AD3420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD342C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7912,7 +8038,17 @@ L_08AD3454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3464: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7937,7 +8073,17 @@ L_08AD348C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD349C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-664))); @@ -7953,7 +8099,17 @@ L_08AD34B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD34BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7968,7 +8124,17 @@ L_08AD34CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD34D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -7984,7 +8150,17 @@ L_08AD34EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD34F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8000,7 +8176,17 @@ L_08AD350C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8016,7 +8202,17 @@ L_08AD352C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3538: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8031,7 +8227,17 @@ L_08AD354C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3558: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8047,7 +8253,17 @@ L_08AD356C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8063,21 +8279,49 @@ L_08AD358C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3598: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD35A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD35A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8093,14 +8337,33 @@ L_08AD35BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD35C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD35D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8114,7 +8377,17 @@ L_08AD35E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD35EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-664))); @@ -8131,7 +8404,17 @@ L_08AD3604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3610: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_4 & 255u); @@ -8148,7 +8431,17 @@ L_08AD3628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3634: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8163,7 +8456,17 @@ L_08AD3644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8179,7 +8482,17 @@ L_08AD3664: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8194,7 +8507,17 @@ L_08AD3680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD368C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-664))); jump_target = aot_gpr_31; @@ -8202,7 +8525,17 @@ L_08AD368C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3698: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8218,7 +8551,17 @@ L_08AD36AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD36B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8240,7 +8583,17 @@ L_08AD36D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD36E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(15)); @@ -8256,7 +8609,17 @@ L_08AD36FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3708: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8272,7 +8635,17 @@ L_08AD371C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD372C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8291,12 +8664,21 @@ L_08AD3748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD375C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AD376Cu); - // nop goto L_08AD34D8; L_08AD376C: aot_gpr_31 = (0x08AD3774u); @@ -8309,7 +8691,17 @@ L_08AD3774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3780: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8325,7 +8717,17 @@ L_08AD3794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD37A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8341,7 +8743,17 @@ L_08AD37B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD37C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8357,7 +8769,17 @@ L_08AD37D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD37E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8373,7 +8795,17 @@ L_08AD37F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8395,7 +8827,17 @@ L_08AD3820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3830: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8417,7 +8859,17 @@ L_08AD3850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3860: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(15)); @@ -8433,7 +8885,17 @@ L_08AD3874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3880: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(15)); @@ -8449,7 +8911,17 @@ L_08AD3894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD38A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8464,7 +8936,17 @@ L_08AD38B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD38BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8480,7 +8962,17 @@ L_08AD38D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD38DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8495,7 +8987,17 @@ L_08AD38EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD38F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (2237u << 16u); @@ -8507,7 +9009,6 @@ L_08AD38F8: { const std::uint32_t aot_run_words[5]{ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(20), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD3934; } @@ -8556,7 +9057,6 @@ L_08AD3978: } L_08AD3984: aot_gpr_31 = (0x08AD398Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD398Cu) goto L_08AD398C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD398C: @@ -8615,7 +9115,6 @@ L_08AD39F8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3B3C; } @@ -8629,7 +9128,6 @@ L_08AD3A08: L_08AD3A14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD3A2C; } @@ -8637,7 +9135,6 @@ L_08AD3A14: } L_08AD3A20: aot_gpr_31 = (0x08AD3A28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3A28u) goto L_08AD3A28; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3A28: @@ -8663,7 +9160,6 @@ L_08AD3A34: AOT_REGCACHE_SYNC_OUT(); return; L_08AD3A5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD3A7C; } @@ -8672,7 +9168,6 @@ L_08AD3A5C: L_08AD3A64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3A7C; } @@ -8686,7 +9181,6 @@ L_08AD3A70: L_08AD3A7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD3A94; } @@ -8694,7 +9188,6 @@ L_08AD3A7C: } L_08AD3A88: aot_gpr_31 = (0x08AD3A90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3A90u) goto L_08AD3A90; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3A90: @@ -8702,7 +9195,6 @@ L_08AD3A90: goto L_08AD3A94; L_08AD3A94: aot_gpr_31 = (0x08AD3A9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 247u, 0x08A54F5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3A9Cu) goto L_08AD3A9C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3A9C: @@ -8742,7 +9234,6 @@ L_08AD3AD4: goto L_08AD3AD8; L_08AD3AD8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3B3C; } @@ -8751,7 +9242,6 @@ L_08AD3AD8: L_08AD3AE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD3AF8; } @@ -8759,7 +9249,6 @@ L_08AD3AE0: } L_08AD3AEC: aot_gpr_31 = (0x08AD3AF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3AF4u) goto L_08AD3AF4; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3AF4: @@ -8784,7 +9273,6 @@ L_08AD3B00: } L_08AD3B18: aot_gpr_31 = (0x08AD3B20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3B20u) goto L_08AD3B20; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3B20: @@ -8831,12 +9319,21 @@ L_08AD3B54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3B78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AD3B88u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3B88u) goto L_08AD3B88; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3B88: @@ -8861,7 +9358,17 @@ L_08AD3B88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3BD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8877,7 +9384,17 @@ L_08AD3BE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8892,7 +9409,17 @@ L_08AD3C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3C0C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-664))); aot_gpr_4 = (aot_gpr_4 & 255u); @@ -8901,7 +9428,17 @@ L_08AD3C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3C1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -8911,7 +9448,17 @@ L_08AD3C1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3C44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8979,7 +9526,17 @@ L_08AD3CB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3CC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9002,7 +9559,6 @@ L_08AD3CE0: L_08AD3CEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3D08; } @@ -9040,7 +9596,6 @@ L_08AD3D1C: goto L_08AD3D34; L_08AD3D34: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3D44; } @@ -9063,7 +9618,17 @@ L_08AD3D44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3D58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9099,7 +9664,17 @@ L_08AD3D94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3DB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9142,7 +9717,6 @@ L_08AD3DF8: goto L_08AD3E08; L_08AD3E08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3E2C; } @@ -9192,7 +9766,17 @@ L_08AD3E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3E60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8360))); @@ -9202,7 +9786,6 @@ L_08AD3E60: aot_gpr_4 = (aot_gpr_5 | aot_gpr_6); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD3E98; } @@ -9211,7 +9794,6 @@ L_08AD3E60: L_08AD3E84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD3EA0; } @@ -9219,7 +9801,6 @@ L_08AD3E84: } L_08AD3E90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD3EA8; } @@ -9227,7 +9808,6 @@ L_08AD3E90: } L_08AD3E98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD3ED8; } @@ -9235,7 +9815,6 @@ L_08AD3E98: } L_08AD3EA0: aot_gpr_31 = (0x08AD3EA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD3EA8u) goto L_08AD3EA8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD3EA8: @@ -9273,7 +9852,17 @@ L_08AD3ED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3EE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(24), 0u); @@ -9292,14 +9881,34 @@ L_08AD3F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3F14: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3F1C: aot_gpr_5 = (0u | 1u); jump_target = aot_gpr_31; @@ -9307,14 +9916,34 @@ L_08AD3F1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3F28: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3F30: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(152))); aot_gpr_4 = (aot_gpr_5 << 4u); @@ -9325,7 +9954,17 @@ L_08AD3F30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3F48: { const bool branch_taken = static_cast(aot_gpr_5) < 0; aot_gpr_6 = (0u | 0u); @@ -9351,7 +9990,6 @@ L_08AD3F60: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AD3F80; } @@ -9366,7 +10004,17 @@ L_08AD3F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD3F88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -9392,7 +10040,6 @@ L_08AD3FBC: L_08AD3FC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0180_entry, 180u, 2u, 0x08AD4014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9407,7 +10054,6 @@ L_08AD3FD8: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0180_entry, 180u, 2u, 0x08AD4014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9417,7 +10063,6 @@ L_08AD3FE8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 131u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0180_entry, 180u, 2u, 0x08AD4014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0180.cpp b/profiles/vcs/generated/generated_unit_0180.cpp index 942a316..13f090a 100644 --- a/profiles/vcs/generated/generated_unit_0180.cpp +++ b/profiles/vcs/generated/generated_unit_0180.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0180[4095] = { - 1, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 9, 0, 0, 10, 0, 11, 12, 0, 0, 13, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 17, - 0, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 0, 28, 0, 0, 29, 0, 30, 0, 0, 31, 0, 0, 32, 0, 0, 0, 33, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 41, 0, 0, 42, 43, 0, - 0, 0, 0, 0, 0, 0, 44, 0, 0, 45, 46, 0, 0, 0, 47, 0, 0, 0, 48, 0, 49, 50, 0, 51, 0, 0, 0, 0, 0, 0, 52, 53, - 0, 54, 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 58, 0, 59, 0, 0, 0, 60, 0, 0, 61, 0, 62, 0, 0, 0, 63, 0, 0, 64, - 0, 65, 0, 0, 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, - 74, 0, 0, 75, 0, 76, 0, 0, 0, 77, 0, 0, 78, 0, 0, 0, 79, 0, 0, 80, 0, 81, 0, 82, 0, 0, 0, 0, 0, 83, 0, 84, - 0, 0, 0, 85, 0, 86, 0, 0, 87, 0, 88, 0, 0, 0, 89, 0, 90, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 95, 0, 96, 0, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 0, 105, 0, 106, - 0, 0, 0, 107, 0, 0, 108, 0, 109, 0, 110, 0, 0, 0, 111, 0, 0, 112, 0, 113, 0, 114, 0, 0, 115, 0, 116, 117, 0, 0, 118, 0, - 0, 119, 0, 0, 120, 0, 121, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, - 126, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 130, 0, 0, 131, 0, 132, 0, 0, 0, 133, 0, 0, 134, 0, - 0, 135, 0, 0, 136, 0, 0, 137, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, - 0, 142, 0, 0, 0, 143, 0, 0, 144, 145, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 148, 0, 0, 149, 0, 0, 150, 0, - 151, 0, 0, 0, 152, 0, 0, 153, 0, 0, 154, 0, 155, 0, 156, 0, 157, 0, 0, 158, 0, 159, 0, 0, 0, 160, 0, 0, 161, 0, 0, 162, - 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 165, 0, 0, 0, 0, 0, 166, 167, 0, 0, 0, 168, 0, 0, 169, 170, 0, 0, 171, 0, 172, 0, 0, 0, 173, 0, 0, 0, 174, - 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 178, 0, 0, 0, 0, 0, 179, 0, 180, 0, 0, 181, 0, 182, 0, 183, 0, 184, 185, 0, 0, 0, - 0, 186, 0, 187, 0, 0, 188, 0, 189, 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 192, 0, 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, - 0, 196, 0, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 0, 0, 202, 0, 203, 0, 0, 204, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 207, - 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 0, 214, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, - 0, 221, 0, 0, 222, 0, 0, 223, 0, 0, 224, 0, 0, 0, 225, 0, 226, 0, 227, 0, 0, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 230, - 0, 231, 0, 232, 233, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 238, 239, 0, 240, 0, 241, 242, 0, 243, 0, 0, 244, 0, 245, 0, 246, 0, 247, 0, 0, 0, 248, 0, 249, 0, 0, 250, 0, 251, 252, - 0, 0, 253, 0, 0, 0, 254, 0, 0, 255, 0, 0, 256, 0, 257, 0, 258, 0, 259, 0, 0, 260, 0, 0, 0, 261, 0, 0, 262, 0, 0, 0, - 263, 0, 0, 0, 264, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 270, 0, - 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 0, 273, 0, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, - 0, 0, 277, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 282, - 0, 0, 283, 0, 0, 0, 284, 0, 285, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 291, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 0, 298, 0, 299, 300, 0, 301, 0, 0, - 0, 302, 0, 0, 303, 0, 304, 0, 0, 305, 0, 0, 306, 0, 307, 0, 308, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 0, 311, - 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 0, 316, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, - 0, 319, 0, 0, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 325, 0, 0, 326, 0, 0, - 0, 327, 0, 0, 0, 328, 329, 0, 330, 0, 0, 0, 331, 0, 0, 332, 0, 333, 0, 0, 334, 0, 0, 335, 0, 336, 0, 337, 0, 0, 338, 0, - 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 344, 0, 0, 345, 0, 0, - 346, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, 350, 0, 0, 351, 0, 352, 0, 0, 353, - 0, 0, 0, 354, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 358, 0, 0, 359, 0, 0, 0, 360, 0, 361, 0, 0, 362, 0, 0, 363, 0, - 364, 0, 0, 365, 0, 0, 0, 366, 0, 367, 0, 368, 0, 0, 0, 369, 0, 0, 370, 0, 0, 0, 371, 0, 372, 0, 0, 373, 0, 0, 374, 0, - 375, 0, 0, 376, 0, 0, 0, 377, 0, 378, 379, 0, 380, 381, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 383, 0, 0, 0, 384, 0, 385, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 389, 0, 0, 0, 390, - 0, 0, 391, 0, 0, 392, 0, 393, 0, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 397, 0, 398, 0, 399, 0, 0, 400, 0, 401, 0, 402, 0, - 0, 0, 403, 0, 0, 404, 0, 405, 0, 0, 406, 0, 0, 407, 0, 408, 0, 0, 409, 0, 410, 0, 411, 0, 412, 0, 0, 413, 0, 414, 415, 0, - 416, 0, 0, 0, 417, 0, 0, 418, 0, 419, 0, 420, 0, 421, 0, 0, 422, 0, 423, 0, 424, 0, 425, 0, 0, 0, 426, 0, 0, 427, 0, 428, - 0, 429, 0, 0, 0, 430, 0, 0, 0, 431, 0, 0, 432, 0, 0, 433, 0, 0, 434, 0, 435, 0, 0, 436, 0, 437, 438, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 0, 0, 0, 443, 0, 444, 0, - 0, 0, 445, 0, 446, 0, 447, 0, 448, 0, 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 452, 0, 0, 453, 0, 0, 0, 0, 0, - 454, 455, 0, 0, 456, 457, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 463, 0, 0, 464, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 468, - 0, 0, 469, 0, 0, 470, 0, 0, 471, 0, 0, 472, 0, 0, 473, 0, 0, 474, 0, 0, 475, 0, 0, 476, 0, 0, 477, 0, 0, 0, 478, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 0, 0, - 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 0, 488, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 491, - 0, 0, 0, 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 499, 0, 500, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 504, 0, 0, 0, 505, 506, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 0, 0, 512, 0, 0, - 0, 513, 0, 0, 0, 514, 0, 0, 515, 0, 516, 0, 517, 0, 0, 518, 519, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 521, 0, 0, - 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 524, 525, 0, 0, 526, 0, 0, 0, 527, 0, 0, 0, 528, 529, 0, - 530, 0, 0, 0, 531, 0, 0, 532, 0, 533, 0, 0, 534, 0, 0, 535, 0, 536, 0, 537, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, - 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, - 0, 0, 0, 547, 0, 548, 0, 549, 0, 0, 550, 0, 0, 551, 0, 552, 0, 0, 553, 0, 554, 0, 0, 555, 0, 556, 0, 0, 0, 0, 0, 557, - 0, 0, 558, 0, 0, 559, 0, 0, 560, 0, 0, 561, 0, 0, 562, 0, 0, 563, 0, 564, 0, 565, 0, 0, 0, 0, 0, 0, 0, 566, 0, 567, - 0, 0, 0, 568, 0, 0, 0, 569, 0, 570, 0, 571, 0, 572, 0, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 576, 0, - 577, 0, 578, 0, 0, 579, 0, 0, 580, 0, 581, 0, 0, 0, 0, 582, 0, 0, 583, 0, 584, 0, 585, 0, 0, 586, 0, 587, 0, 588, 0, 0, - 589, 0, 590, 591, 0, 0, 592, 0, 593, 0, 594, 0, 0, 595, 0, 0, 596, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 0, 599, 0, - 600, 0, 601, 0, 0, 602, 0, 0, 603, 0, 604, 0, 605, 0, 0, 606, 0, 0, 607, 0, 608, 609, 0, 0, 610, 0, 611, 0, 0, 612, 0, 0, - 613, 0, 0, 614, 0, 615, 0, 616, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 620, 621, 0, 0, 622, 0, 0, 0, 0, 623, - 0, 624, 0, 625, 0, 626, 0, 627, 0, 0, 0, 628, 0, 629, 0, 0, 630, 0, 0, 631, 0, 0, 0, 632, 0, 0, 633, 0, 0, 634, 0, 0, - 0, 635, 0, 636, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 640, 0, 0, 0, 0, - 641, 0, 0, 0, 0, 0, 642, 0, 0, 643, 644, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 647, 0, 648, 0, 0, 0, 0, 0, 649, 0, - 650, 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 656, 657, 0, 0, 0, 658, 0, 659, 0, 0, 660, - 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 0, 663, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 667, 0, 0, 0, - 668, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 676, 0, 677, 0, 0, 0, 678, 0, 0, 0, 0, 679, - 0, 680, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 683, 0, 0, 0, 0, 684, 685, 0, 686, 0, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, - 690, 0, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 693, 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 696, 0, 697, 0, 0, 698, 0, 0, - 699, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 701, 0, 702, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 705, 706, 0, 0, - 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, - 0, 0, 711, 0, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 715, 0, 0, 0, 0, 716, 0, 717, 0, 718, 0, 0, 719, 0, - 720, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 724, 0, 0, 725, 0, 726, 727, 0, 728, 0, 729, 0, 0, 0, 730, - 0, 0, 731, 0, 732, 0, 0, 733, 0, 734, 735, 0, 736, 0, 737, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 740, - 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 0, 744, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, - 0, 0, 746, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 0, 0, 751, 0, - 0, 0, 0, 0, 752, 0, 753, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 755, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 757, 0, - 0, 0, 0, 758, 759, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 761, 0, 0, 762, 0, 763, 0, 764, 0, 0, 0, 765, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 768, 0, 0, 0, 769, 0, 0, 0, 0, 0, 770, 0, 0, 0, - 0, 0, 0, 0, 771, 0, 0, 0, 772, 0, 773, 0, 774, 0, 775, 776, 0, 0, 777, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 779, 0, - 0, 0, 0, 780, 781, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 783, 0, 0, 784, 0, 0, 785, 0, 0, 0, 786, 0, 0, 787, 0, - 0, 788, 0, 0, 789, 0, 790, 0, 0, 791, 792, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 795, 0, 0, - 0, 796, 0, 0, 0, 797, 0, 0, 0, 798, 0, 0, 0, 0, 0, 799, 0, 800, 0, 801, 0, 0, 802, 803, 0, 0, 0, 0, 0, 0, 0, 804, - 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 807, 0, 0, 0, 0, 808, 0, 0, 0, 809, 0, 0, 810, - 0, 811, 0, 0, 0, 812, 0, 0, 813, 0, 814, 0, 815, 0, 816, 0, 0, 817, 0, 818, 0, 0, 0, 0, 0, 819, 0, 0, 0, 820, 0, 0, - 0, 821, 0, 0, 822, 0, 0, 823, 0, 0, 824, 0, 825, 0, 0, 826, 0, 827, 0, 828, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 831, 0, 0, 832, 0, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 835, 0, 836, 0, 837, 0, - 0, 0, 838, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, 842, 0, 843, 0, 0, 0, 0, 0, 844, 0, 0, 0, 845, 0, 0, 0, 846, 0, 0, - 847, 0, 0, 848, 0, 0, 849, 0, 850, 0, 0, 851, 0, 852, 0, 853, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, - 0, 856, 0, 0, 0, 0, 857, 0, 0, 0, 858, 0, 859, 0, 0, 0, 0, 0, 860, 0, 861, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, 864, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 866, 0, 0, 867, 0, 0, 868, 0, - 869, 0, 870, 0, 871, 0, 0, 872, 0, 0, 873, 0, 874, 0, 0, 875, 0, 876, 0, 877, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 879, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, 0, 881, 0, 882, 0, 0, 883, 0, 0, 884, 0, - 885, 0, 0, 0, 0, 0, 886, 887, 0, 888, 0, 889, 0, 890, 0, 0, 0, 0, 891, 0, 892, 0, 0, 0, 893, 0, 0, 0, 0, 0, 0, 894, - 0, 895, 0, 0, 0, 0, 896, 0, 897, 0, 898, 0, 899, 0, 0, 0, 0, 0, 900, 0, 901, 0, 0, 0, 0, 902, 0, 903, 0, 0, 0, 0, - 904, 0, 0, 0, 0, 0, 0, 905, 0, 0, 906, 0, 0, 907, 0, 908, 0, 0, 0, 0, 909, 0, 910, 0, 0, 0, 0, 911, 0, 912, 913, 0, - 914, 0, 0, 915, 0, 916, 0, 917, 0, 918, 0, 919, 0, 920, 0, 921, 922, 0, 0, 0, 0, 0, 0, 0, 923, 0, 0, 924, 0, 0, 925, 0, - 926, 0, 0, 0, 0, 927, 0, 928, 0, 0, 0, 0, 929, 0, 930, 931, 0, 0, 932, 0, 0, 933, 0, 934, 0, 935, 0, 0, 936, 0, 937, 0, - 938, 0, 0, 0, 0, 0, 0, 939, 0, 940, 941, 0, 0, 0, 942, 0, 0, 943, 0, 0, 944, 0, 0, 0, 945, 0, 946, 0, 0, 0, 0, 947, - 948, 0, 949, 0, 0, 0, 0, 950, 0, 0, 951, 0, 0, 0, 0, 952, 0, 953, 0, 954, 0, 0, 955, 0, 956, 0, 957, 0, 0, 958, 0, 959, - 0, 0, 960, 0, 0, 961, 0, 0, 0, 0, 962, 0, 963, 0, 964, 0, 965, 0, 0, 966, 0, 0, 0, 967, 0, 0, 968, 0, 0, 969, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 972, 0, 0, 0, 973, 0, 0, 0, 974, 0, 975, 0, 976, 0, 0, 977, 0, 978, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 979, 0, 980, 0, 0, 981, 0, 0, 982, 0, 0, 0, 983, 984, 0, 0, 0, 0, 985, 0, 986, 0, 0, 0, 0, 987, 0, 0, 0, 0, 0, 0, - 0, 0, 988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 989, 0, 990, 0, 991, 0, 0, 0, 0, 992, 0, 0, 0, 993, 0, 0, 0, 994, 0, 0, - 995, 0, 0, 0, 0, 0, 996, 0, 0, 0, 997, 0, 998, 0, 0, 0, 0, 0, 0, 999, 0, 1000, 0, 0, 1001, 0, 0, 1002, 0, 1003, 0, 0, - 0, 1004, 0, 0, 1005, 0, 0, 0, 1006, 0, 0, 1007, 0, 1008, 0, 0, 0, 0, 1009, 0, 0, 0, 0, 0, 0, 0, 0, 1010, 0, 0, 0, 1011, - 0, 1012, 0, 1013, 0, 0, 1014, 0, 0, 0, 0, 0, 0, 0, 1015, 0, 0, 0, 0, 1016, 0, 0, 1017, 0, 0, 1018, 0, 0, 1019, 0, 1020, 0, - 1021, 0, 0, 1022, 0, 1023, 0, 1024, 0, 1025, 0, 0, 0, 0, 1026, 0, 1027, 0, 1028, 0, 0, 0, 0, 1029, 0, 0, 0, 0, 0, 0, 0, 1030, - 1031, 0, 0, 1032, 0, 0, 0, 1033, 0, 1034, 0, 0, 0, 1035, 0, 1036, 1037, 0, 0, 1038, 0, 0, 0, 1039, 0, 1040, 0, 0, 0, 1041, 0, 0, - 1042, 0, 0, 1043, 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, 1045, 0, 0, 0, 1046, 0, 0, 0, 0, 1047, 0, 0, 0, 0, 1048, 0, 0, 0, - 1049, 0, 1050, 0, 0, 0, 1051, 0, 0, 1052, 0, 0, 1053, 0, 0, 1054, 0, 0, 1055, 0, 0, 0, 1056, 0, 0, 1057, 0, 0, 1058, 0, 0, 0, - 1059, 0, 0, 0, 0, 1060, 0, 1061, 0, 1062, 0, 0, 0, 1063, 0, 0, 1064, 0, 0, 1065, 0, 0, 0, 1066, 1067, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1069, 0, 0, 0, 1070, 0, 1071, 0, 0, 0, 0, 1072, 0, 0, 0, 0, 1073, 0, - 1074, 0, 1075, 0, 1076, 0, 1077, 0, 1078, 0, 1079, 0, 1080, 0, 1081, 0, 0, 0, 0, 1082, 0, 0, 0, 0, 1083, 0, 1084, 0, 0, 1085, 0, 0, - 1086, 0, 1087, 0, 0, 1088, 0, 1089, 0, 1090, 0, 1091, 0, 1092, 0, 1093, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 1095, 0, 1096, 0, 0, 1097, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0180[64] = { + 0x9253486900008091ull, 0x14494A8084040554ull, 0xC0B4464064904910ull, 0x080100329148A452ull, + 0xA0A9122911001080ull, 0x002A848800054528ull, 0x4D2A4548A20888A0ull, 0x48A4228102044152ull, + 0x4911032280082192ull, 0x0000040292295491ull, 0x1AA5049488A64608ull, 0x944222124512094Aull, + 0x4248248884002000ull, 0x8905449222110080ull, 0xD28AA5AC8041101Aull, 0x4440825112255244ull, + 0x8040888421084440ull, 0x2D15115084024544ull, 0x0424888890095252ull, 0x4A92916226201222ull, + 0x9485002124444480ull, 0x49448A894944A228ull, 0x88814A2000203689ull, 0x6954A4A454AA48A4ull, + 0x06949222A4552A91ull, 0x0491115450150010ull, 0xC211250050004033ull, 0x0000040044924924ull, + 0x8422810812400900ull, 0x0221510200444210ull, 0x2101952222AA0310ull, 0x804A929162262010ull, + 0x8294A4A809222084ull, 0x48412A88A02A4924ull, 0x5041254D2A548525ull, 0x84D044A925349525ull, + 0x090000AA248928AAull, 0x9462911141484641ull, 0x00200C911900A500ull, 0x5416142284508002ull, + 0x3102281125222221ull, 0x4A84848482200040ull, 0x8200D6948AD2A005ull, 0x4440802410248004ull, + 0x08A9041840884050ull, 0x4084D51010444080ull, 0x2400165248921018ull, 0x9109000880CA8222ull, + 0x401A9492220A5522ull, 0x2220A91454884800ull, 0x021414420401A949ull, 0x801A949549102400ull, + 0x81142AC149440000ull, 0x6850A4810A141542ull, 0x52A4D0A14901AAA9ull, 0xA54A848585124681ull, + 0x0040040024895424ull, 0x021431250052A220ull, 0x2928144122215004ull, 0x5248404A88042912ull, + 0x2289A289808542A9ull, 0x1244924510844209ull, 0x42144010018922A1ull, 0x4A10AAA525085555ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0180[64] = { + 1u, 18u, 35u, 54u, 70u, 85u, 99u, 119u, 135u, 151u, 165u, 186u, 205u, 216u, 231u, 253u, + 271u, 283u, 302u, 319u, 339u, 354u, 375u, 391u, 416u, 439u, 454u, 469u, 480u, 492u, 504u, 522u, + 540u, 558u, 577u, 600u, 624u, 641u, 661u, 674u, 690u, 707u, 720u, 741u, 752u, 766u, 780u, 796u, + 811u, 831u, 847u, 863u, 880u, 895u, 914u, 938u, 960u, 972u, 988u, 1004u, 1021u, 1042u, 1059u, 1074u, }; void recomp_unit_0180_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0180_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AD4004u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0180[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0180[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0180[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AD4004; @@ -1278,7 +1185,6 @@ L_08AD4004: L_08AD4014: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 758u, 0x08AD3FC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1299,7 +1205,17 @@ L_08AD4020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4040: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -1328,7 +1244,6 @@ L_08AD4084: goto L_08AD4090; L_08AD4090: aot_gpr_31 = (0x08AD4098u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4098u) goto L_08AD4098; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4098: @@ -1339,7 +1254,6 @@ L_08AD409C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD40DC; } @@ -1354,7 +1268,6 @@ L_08AD40B0: goto L_08AD40BC; L_08AD40BC: aot_gpr_31 = (0x08AD40C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD40C4u) goto L_08AD40C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AD40C4: @@ -1368,7 +1281,6 @@ L_08AD40C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD40D4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD411C; } @@ -1383,7 +1295,6 @@ L_08AD40DC: L_08AD40E8: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AD4114; } @@ -1392,7 +1303,6 @@ L_08AD40E8: L_08AD40F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4114; } @@ -1417,7 +1327,6 @@ L_08AD410C: } L_08AD4114: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD43C4; } @@ -1425,7 +1334,6 @@ L_08AD4114: } L_08AD411C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD43C4; } @@ -1433,7 +1341,6 @@ L_08AD411C: } L_08AD4124: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD416C; } @@ -1487,7 +1394,6 @@ L_08AD4180: AOT_REGCACHE_SYNC_OUT(); return; L_08AD41A0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD41C4; } @@ -1495,7 +1401,6 @@ L_08AD41A0: } L_08AD41A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4214; } @@ -1508,7 +1413,6 @@ L_08AD41B0: goto L_08AD4C38; L_08AD41BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD43C4; } @@ -1564,7 +1468,6 @@ L_08AD4214: L_08AD4224: aot_gpr_4 = (ctx.gpr[2] < static_cast(17) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD423C; } @@ -1644,7 +1547,6 @@ L_08AD42BC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_5 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD42D8; } @@ -1652,7 +1554,6 @@ L_08AD42BC: } L_08AD42CC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD42D8; } @@ -1663,7 +1564,6 @@ L_08AD42D4: goto L_08AD42D8; L_08AD42D8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AD4300; } @@ -1684,7 +1584,6 @@ L_08AD42FC: goto L_08AD4300; L_08AD4300: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AD431C; } @@ -1708,7 +1607,6 @@ L_08AD431C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4340; } @@ -1732,7 +1630,6 @@ L_08AD4340: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4364; } @@ -1756,7 +1653,6 @@ L_08AD4364: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4388; } @@ -1816,7 +1712,17 @@ L_08AD43C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD43F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -1828,7 +1734,6 @@ L_08AD43F0: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD44A8; } @@ -1839,7 +1744,6 @@ L_08AD4420: aot_gpr_5 = (aot_gpr_17 + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(32))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08AD4498; } @@ -1873,7 +1777,6 @@ L_08AD4474: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(629)))))); ctx.gpr[6] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AD4490; } @@ -1887,7 +1790,6 @@ L_08AD4484: AOT_REGCACHE_SYNC_OUT(); return; L_08AD4490: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD44A8; } @@ -1897,7 +1799,6 @@ L_08AD4498: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD4420; } @@ -1913,7 +1814,6 @@ L_08AD44B4: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4500; } @@ -1938,7 +1838,6 @@ L_08AD44D0: } L_08AD44D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD44F8; } @@ -1954,7 +1853,6 @@ L_08AD44E0: goto L_08AD44F8; L_08AD44F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4768; } @@ -1981,7 +1879,6 @@ L_08AD4518: goto L_08AD6EB4; L_08AD4524: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD4544; } @@ -1997,7 +1894,6 @@ L_08AD452C: goto L_08AD453C; L_08AD453C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4620; } @@ -2005,7 +1901,6 @@ L_08AD453C: } L_08AD4544: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4768; } @@ -2028,7 +1923,6 @@ L_08AD454C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4618; } @@ -2045,7 +1939,6 @@ L_08AD4590: L_08AD45A0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD45C8; } @@ -2061,7 +1954,6 @@ L_08AD45AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD45C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD45D0; } @@ -2074,7 +1966,6 @@ L_08AD45C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD45D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4618; } @@ -2096,7 +1987,6 @@ L_08AD45D8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4590; } @@ -2114,7 +2004,6 @@ L_08AD4620: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4680; } @@ -2156,7 +2045,6 @@ L_08AD4668: AOT_REGCACHE_SYNC_OUT(); return; L_08AD4678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4708; } @@ -2166,7 +2054,6 @@ L_08AD4680: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD46AC; } @@ -2184,7 +2071,6 @@ L_08AD469C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD46A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4708; } @@ -2194,7 +2080,6 @@ L_08AD46AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD46D8; } @@ -2212,7 +2097,6 @@ L_08AD46C8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD46D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4708; } @@ -2227,7 +2111,6 @@ L_08AD46D8: goto L_08AD46E4; L_08AD46E4: aot_gpr_31 = (0x08AD46ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD46ECu) goto L_08AD46EC; AOT_REGCACHE_SYNC_OUT(); return; L_08AD46EC: @@ -2263,7 +2146,6 @@ L_08AD4714: } L_08AD471C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD473C; } @@ -2307,7 +2189,17 @@ L_08AD4768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4784: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2318,14 +2210,12 @@ L_08AD4784: goto L_08AD47A0; L_08AD47A0: aot_gpr_31 = (0x08AD47A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 639u, 0x08AD38A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD47A8u) goto L_08AD47A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD47A8: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD47A0; } @@ -2349,7 +2239,6 @@ L_08AD47CC: goto L_08AD4E34; L_08AD47D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD4824; } @@ -2373,7 +2262,6 @@ L_08AD47F0: L_08AD47FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4824; } @@ -2417,7 +2305,17 @@ L_08AD4838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4850: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -2431,14 +2329,12 @@ L_08AD4850: goto L_08AD4880; L_08AD4880: aot_gpr_31 = (0x08AD4888u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 639u, 0x08AD38A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4888u) goto L_08AD4888; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4888: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4880; } @@ -2488,7 +2384,6 @@ L_08AD48D4: L_08AD48E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4980; } @@ -2511,7 +2406,6 @@ L_08AD4904: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4958; } @@ -2542,7 +2436,6 @@ L_08AD4934: goto L_08AD6E34; L_08AD493C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD4950; } @@ -2555,7 +2448,6 @@ L_08AD4944: goto L_08AD43F0; L_08AD4950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4980; } @@ -2565,7 +2457,6 @@ L_08AD4958: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4980; } @@ -2603,7 +2494,17 @@ L_08AD4988: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD49AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-576)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(568), ctx.gpr[30]); @@ -2672,7 +2573,6 @@ L_08AD4A4C: } L_08AD4A58: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AD4BA8; } @@ -2682,7 +2582,6 @@ L_08AD4A60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4BA8; } @@ -2705,7 +2604,6 @@ L_08AD4A80: goto L_08AD4D20; L_08AD4A8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD4AC4; } @@ -2714,7 +2612,6 @@ L_08AD4A8C: L_08AD4A94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4AAC; } @@ -2754,7 +2651,6 @@ L_08AD4ACC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD4AD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD4BA8; } @@ -2762,7 +2658,6 @@ L_08AD4AD8: } L_08AD4AE0: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08AD4AF4; } @@ -2786,7 +2681,6 @@ L_08AD4AF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD4B08: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08AD4B24; } @@ -2800,7 +2694,6 @@ L_08AD4B10: AOT_REGCACHE_SYNC_OUT(); return; L_08AD4B1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD4BA8; } @@ -2826,7 +2719,6 @@ L_08AD4B30: L_08AD4B48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD4B88; } @@ -2840,7 +2732,6 @@ L_08AD4B54: goto L_08AD66D8; L_08AD4B64: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD4B88; } @@ -2878,7 +2769,6 @@ L_08AD4BA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(520))); aot_gpr_16 = (ctx.gpr[23] | 0u); { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD4A2C; } @@ -2913,7 +2803,6 @@ L_08AD4BDC: } L_08AD4BEC: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08AD4C00; } @@ -2922,7 +2811,6 @@ L_08AD4BEC: L_08AD4BF4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(516))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4A10; } @@ -2949,7 +2837,17 @@ L_08AD4C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4C38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -2987,7 +2885,6 @@ L_08AD4C90: ctx.gpr[19] = (ctx.gpr[20] | 0u); ctx.gpr[21] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(30)))))); { const bool branch_taken = ctx.gpr[21] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD4CB8; } @@ -3019,7 +2916,6 @@ L_08AD4CB8: L_08AD4CD0: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD4CFC; } @@ -3055,7 +2951,17 @@ L_08AD4CFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4D20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3071,7 +2977,6 @@ L_08AD4D44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.gpr[6] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AD4E10; } @@ -3098,7 +3003,6 @@ L_08AD4D78: ctx.gpr[18] = (ctx.gpr[19] | 0u); ctx.gpr[20] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(30)))))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD4DCC; } @@ -3113,7 +3017,6 @@ L_08AD4D88: L_08AD4D94: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4DCC; } @@ -3122,7 +3025,6 @@ L_08AD4D94: L_08AD4DA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD4DCC; } @@ -3136,7 +3038,6 @@ L_08AD4DAC: goto L_08AD4E34; L_08AD4DBC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD4DCC; } @@ -3164,7 +3065,6 @@ L_08AD4DCC: L_08AD4DE4: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD4E10; } @@ -3178,7 +3078,6 @@ L_08AD4DF0: goto L_08AD4E34; L_08AD4E00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD4E10; } @@ -3210,12 +3109,21 @@ L_08AD4E14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AD4E44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 750u, 0x08AD3F30u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4E44u) goto L_08AD4E44; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4E44: @@ -3228,7 +3136,17 @@ L_08AD4E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4E5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3263,7 +3181,6 @@ L_08AD4E90: } L_08AD4E98: aot_gpr_31 = (0x08AD4EA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4EA0u) goto L_08AD4EA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4EA0: @@ -3277,7 +3194,6 @@ L_08AD4EA4: L_08AD4EAC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4EC0; } @@ -3285,7 +3201,6 @@ L_08AD4EAC: } L_08AD4EB8: aot_gpr_31 = (0x08AD4EC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4EC0u) goto L_08AD4EC0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4EC0: @@ -3306,13 +3221,11 @@ L_08AD4ED0: goto L_08AD4FFC; L_08AD4EE0: aot_gpr_31 = (0x08AD4EE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0158_entry, 158u, 11u, 0x08A7C6A8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4EE8u) goto L_08AD4EE8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4EE8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4F1C; } @@ -3335,7 +3248,6 @@ L_08AD4F0C: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4F00; } @@ -3355,7 +3267,6 @@ L_08AD4F28: goto L_08AD4F34; L_08AD4F34: aot_gpr_31 = (0x08AD4F3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD4F3Cu) goto L_08AD4F3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD4F3C: @@ -3364,7 +3275,6 @@ L_08AD4F3C: goto L_08AD4F44; L_08AD4F44: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4F58; } @@ -3385,7 +3295,6 @@ L_08AD4F58: L_08AD4F68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD4FA8; } @@ -3432,7 +3341,17 @@ L_08AD4FA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4FC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3457,7 +3376,17 @@ L_08AD4FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD4FFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3527,7 +3456,6 @@ L_08AD50B0: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD501C; } @@ -3547,7 +3475,17 @@ L_08AD50C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD50DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -3573,7 +3511,6 @@ L_08AD510C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD512C; } @@ -3581,7 +3518,6 @@ L_08AD510C: } L_08AD511C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD513C; } @@ -3589,7 +3525,6 @@ L_08AD511C: } L_08AD5124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD52D8; } @@ -3677,7 +3612,6 @@ L_08AD51C4: goto L_08AD51CC; L_08AD51CC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD51E4; } @@ -3695,7 +3629,6 @@ L_08AD51D4: } L_08AD51E4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD5280; } @@ -3713,7 +3646,6 @@ L_08AD51F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 129u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5280; } @@ -3726,7 +3658,6 @@ L_08AD5208: goto L_08AD4E34; L_08AD5214: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD5274; } @@ -3757,7 +3688,6 @@ L_08AD5234: } L_08AD523C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5280; } @@ -3793,7 +3723,6 @@ L_08AD5280: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD52D8; } @@ -3819,7 +3748,6 @@ L_08AD52B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30)))))); ctx.gpr[6] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AD52D8; } @@ -3847,7 +3775,17 @@ L_08AD52D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD52EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3862,7 +3800,6 @@ L_08AD5308: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD5328; } @@ -3926,7 +3863,6 @@ L_08AD5388: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD542C; } @@ -3944,7 +3880,6 @@ L_08AD53A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 3u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD542C; } @@ -3957,7 +3892,6 @@ L_08AD53B4: goto L_08AD4E34; L_08AD53C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD5420; } @@ -3988,7 +3922,6 @@ L_08AD53E0: } L_08AD53E8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD542C; } @@ -4024,7 +3957,6 @@ L_08AD542C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD5484; } @@ -4050,7 +3982,6 @@ L_08AD545C: aot_gpr_16 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(30)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_16 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD5484; } @@ -4078,7 +4009,17 @@ L_08AD5484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5498: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(185))); @@ -4107,7 +4048,6 @@ L_08AD54CC: ctx.gpr[18] = (aot_gpr_17 + static_cast(164)); ctx.gpr[18] = (ctx.gpr[18] - 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD5634; } @@ -4116,7 +4056,6 @@ L_08AD54CC: L_08AD54E0: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); { const bool branch_taken = static_cast(ctx.gpr[20]) >= 0; - // nop if (branch_taken) { goto L_08AD54F4; } @@ -4140,7 +4079,6 @@ L_08AD5500: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_16); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD5518; } @@ -4158,7 +4096,6 @@ L_08AD5518: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5540; } @@ -4168,7 +4105,6 @@ L_08AD5528: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5564; } @@ -4176,7 +4112,6 @@ L_08AD5528: } L_08AD5538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD55B0; } @@ -4213,7 +4148,6 @@ L_08AD5570: goto L_08AD6E34; L_08AD557C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD55A8; } @@ -4250,7 +4184,6 @@ L_08AD55B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD55E4; } @@ -4287,7 +4220,6 @@ L_08AD55F0: goto L_08AD6EB4; L_08AD55FC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD5628; } @@ -4317,7 +4249,6 @@ L_08AD5628: goto L_08AD562C; L_08AD562C: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD54E0; } @@ -4341,7 +4272,17 @@ L_08AD5638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5658: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -4366,7 +4307,6 @@ L_08AD5698: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_17); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD56B0; } @@ -4402,7 +4342,6 @@ L_08AD56C4: ctx.gpr[21] = (ctx.lo); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD5720; } @@ -4427,7 +4366,6 @@ L_08AD56F0: L_08AD5700: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08AD57F8; } @@ -4450,7 +4388,6 @@ L_08AD5720: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD577C; } @@ -4481,7 +4418,6 @@ L_08AD5750: goto L_08AD6E34; L_08AD5758: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD5774; } @@ -4502,7 +4438,6 @@ L_08AD576C: } L_08AD5774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD57F8; } @@ -4512,7 +4447,6 @@ L_08AD577C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD57A0; } @@ -4547,7 +4481,6 @@ L_08AD57AC: } L_08AD57B8: aot_gpr_31 = (0x08AD57C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD57C0u) goto L_08AD57C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD57C0: @@ -4570,7 +4503,6 @@ L_08AD57D4: goto L_08AD6EB4; L_08AD57DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD57F8; } @@ -4594,7 +4526,6 @@ L_08AD57F8: goto L_08AD57FC; L_08AD57FC: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AD5698; } @@ -4604,7 +4535,6 @@ L_08AD5804: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD5828; } @@ -4613,7 +4543,6 @@ L_08AD5804: L_08AD5814: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD5838; } @@ -4621,7 +4550,6 @@ L_08AD5814: } L_08AD5820: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5838; } @@ -4633,7 +4561,6 @@ L_08AD5828: goto L_08AD5DE8; L_08AD5830: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD5854; } @@ -4646,7 +4573,6 @@ L_08AD5838: goto L_08AD5498; L_08AD5844: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD585C; } @@ -4700,7 +4626,6 @@ L_08AD5888: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_17); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD58C0; } @@ -4724,7 +4649,6 @@ L_08AD58A8: L_08AD58B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD58D4; } @@ -4741,7 +4665,6 @@ L_08AD58C0: } L_08AD58CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD58E8; } @@ -4780,7 +4703,17 @@ L_08AD58EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5914: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); @@ -4817,7 +4750,6 @@ L_08AD5954: aot_gpr_4 = (aot_gpr_4 + aot_gpr_17); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[21] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AD597C; } @@ -4862,7 +4794,6 @@ L_08AD59A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 131u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5A04; } @@ -4887,7 +4818,6 @@ L_08AD59C4: L_08AD59D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5A04; } @@ -4941,7 +4871,17 @@ L_08AD5A18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5A3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[20]); @@ -4976,7 +4916,6 @@ L_08AD5A7C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_17; - // nop if (branch_taken) { goto L_08AD5AAC; } @@ -4984,7 +4923,6 @@ L_08AD5A7C: } L_08AD5AA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD5AC4; } @@ -5030,7 +4968,6 @@ L_08AD5AFC: L_08AD5B00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD5B24; } @@ -5049,7 +4986,6 @@ L_08AD5B18: L_08AD5B24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD5B48; } @@ -5068,7 +5004,6 @@ L_08AD5B3C: L_08AD5B48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD5B6C; } @@ -5113,7 +5048,17 @@ L_08AD5B7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5BAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5198,7 +5143,6 @@ L_08AD5C74: L_08AD5C90: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_22) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[18] - ctx.gpr[20]); if (branch_taken) { @@ -5211,9 +5155,7 @@ L_08AD5CA4: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD5CC8; } @@ -5221,7 +5163,6 @@ L_08AD5CA4: } L_08AD5CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD5D3C; } @@ -5282,7 +5223,6 @@ L_08AD5D4C: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 50 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5C74; } @@ -5306,7 +5246,17 @@ L_08AD5D5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[6] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -5352,7 +5302,17 @@ L_08AD5DD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5DE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5387,7 +5347,6 @@ L_08AD5E28: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD5E58; } @@ -5395,7 +5354,6 @@ L_08AD5E28: } L_08AD5E48: { const bool branch_taken = ctx.gpr[18] == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD5E14; } @@ -5426,7 +5384,6 @@ L_08AD5E68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 131u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD5E14; } @@ -5463,7 +5420,6 @@ L_08AD5EA4: goto L_08AD4E34; L_08AD5EAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD5E14; } @@ -5492,7 +5448,17 @@ L_08AD5EC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5EE4: aot_gpr_4 = (aot_gpr_4 + static_cast(32)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -5502,7 +5468,17 @@ L_08AD5EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD5EF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5558,7 +5534,6 @@ L_08AD5F68: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD600C; } @@ -5576,7 +5551,6 @@ L_08AD5F84: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 130u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD600C; } @@ -5589,7 +5563,6 @@ L_08AD5F94: goto L_08AD4E34; L_08AD5FA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD6000; } @@ -5620,7 +5593,6 @@ L_08AD5FC0: } L_08AD5FC8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD600C; } @@ -5664,7 +5636,17 @@ L_08AD600C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6020: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -5702,7 +5684,17 @@ L_08AD6064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6070: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5725,7 +5717,6 @@ L_08AD6098: L_08AD60A0: aot_gpr_4 = (ctx.gpr[2] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD60CC; } @@ -5738,7 +5729,6 @@ L_08AD60AC: goto L_08AD5658; L_08AD60B8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD60D4; } @@ -5752,7 +5742,6 @@ L_08AD60C0: AOT_REGCACHE_SYNC_OUT(); return; L_08AD60CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD60E8; } @@ -5766,7 +5755,6 @@ L_08AD60D4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD60E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD6098; } @@ -5785,7 +5773,17 @@ L_08AD60E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6100: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); jump_target = aot_gpr_31; @@ -5793,7 +5791,17 @@ L_08AD6100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD610C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); jump_target = aot_gpr_31; @@ -5801,7 +5809,17 @@ L_08AD610C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6118: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); jump_target = aot_gpr_31; @@ -5809,7 +5827,17 @@ L_08AD6118: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6124: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); jump_target = aot_gpr_31; @@ -5817,7 +5845,17 @@ L_08AD6124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6130: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); jump_target = aot_gpr_31; @@ -5825,7 +5863,17 @@ L_08AD6130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD613C: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); jump_target = aot_gpr_31; @@ -5833,21 +5881,50 @@ L_08AD613C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6148: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(172)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6150: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6158: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -5862,14 +5939,12 @@ L_08AD6158: } L_08AD6178: aot_gpr_31 = (0x08AD6180u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6180u) goto L_08AD6180; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6180: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD61A8; } @@ -5887,7 +5962,6 @@ L_08AD6190: } L_08AD61A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD62C4; } @@ -5895,7 +5969,6 @@ L_08AD61A0: } L_08AD61A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD62C4; } @@ -5903,7 +5976,6 @@ L_08AD61A8: } L_08AD61B0: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AD62C4; } @@ -5912,7 +5984,6 @@ L_08AD61B0: L_08AD61B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7652))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08AD62C4; } @@ -5943,12 +6014,10 @@ L_08AD61F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AD61FC: aot_gpr_31 = (0x08AD6204u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 844u, 0x0898B4F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6204u) goto L_08AD6204; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6204: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08AD6278; } @@ -5957,7 +6026,6 @@ L_08AD6204: L_08AD620C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(184))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6278; } @@ -5966,7 +6034,6 @@ L_08AD620C: L_08AD6218: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19681))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6278; } @@ -5988,7 +6055,6 @@ L_08AD622C: L_08AD6240: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5856))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6254; } @@ -5996,7 +6062,6 @@ L_08AD6240: } L_08AD624C: aot_gpr_31 = (0x08AD6254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 399u, 0x08B65A54u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6254u) goto L_08AD6254; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6254: @@ -6007,7 +6072,6 @@ L_08AD6254: L_08AD625C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7652))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD6278; } @@ -6015,7 +6079,6 @@ L_08AD625C: } L_08AD6268: aot_gpr_31 = (0x08AD6270u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 339u, 0x08935474u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6270u) goto L_08AD6270; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6270: @@ -6032,7 +6095,6 @@ L_08AD6278: goto L_08AD6284; L_08AD6284: aot_gpr_31 = (0x08AD628Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD628Cu) goto L_08AD628C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD628C: @@ -6051,7 +6113,6 @@ L_08AD629C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD62A4: aot_gpr_31 = (0x08AD62ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD62ACu) goto L_08AD62AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AD62AC: @@ -6079,7 +6140,17 @@ L_08AD62C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD62DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5864))); @@ -6094,7 +6165,6 @@ L_08AD62DC: } L_08AD62F4: aot_gpr_31 = (0x08AD62FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD62FCu) goto L_08AD62FC; AOT_REGCACHE_SYNC_OUT(); return; L_08AD62FC: @@ -6104,7 +6174,6 @@ L_08AD62FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD6304: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD6318; } @@ -6122,7 +6191,6 @@ L_08AD630C: L_08AD6318: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-508))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD632C; } @@ -6134,7 +6202,6 @@ L_08AD6324: goto L_08AD632C; L_08AD632C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD63AC; } @@ -6143,7 +6210,6 @@ L_08AD632C: L_08AD6334: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD63AC; } @@ -6158,7 +6224,6 @@ L_08AD6340: goto L_08AD634C; L_08AD634C: aot_gpr_31 = (0x08AD6354u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6354u) goto L_08AD6354; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6354: @@ -6167,7 +6232,6 @@ L_08AD6354: L_08AD6358: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD63AC; } @@ -6181,7 +6245,6 @@ L_08AD6364: L_08AD636C: aot_gpr_4 = (ctx.gpr[2] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD63AC; } @@ -6190,7 +6253,6 @@ L_08AD636C: L_08AD6378: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7640))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD63AC; } @@ -6199,7 +6261,6 @@ L_08AD6378: L_08AD6384: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD63AC; } @@ -6227,7 +6288,17 @@ L_08AD63AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD63BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -6240,7 +6311,6 @@ L_08AD63BC: goto L_08AD63D4; L_08AD63D4: aot_gpr_31 = (0x08AD63DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD63DCu) goto L_08AD63DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AD63DC: @@ -6249,7 +6319,6 @@ L_08AD63DC: L_08AD63E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6408; } @@ -6260,7 +6329,6 @@ L_08AD63EC: aot_gpr_16 = (aot_gpr_16 + static_cast(-6992)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6410; } @@ -6268,7 +6336,6 @@ L_08AD63EC: } L_08AD6400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD6438; } @@ -6276,7 +6343,6 @@ L_08AD6400: } L_08AD6408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD6450; } @@ -6301,7 +6367,6 @@ L_08AD6420: AOT_REGCACHE_SYNC_OUT(); return; L_08AD6430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD6450; } @@ -6327,7 +6392,17 @@ L_08AD6450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6460: aot_gpr_4 = (aot_gpr_4 + static_cast(32)); ctx.gpr[2] = (0u + static_cast(-1)); @@ -6336,7 +6411,6 @@ L_08AD6460: L_08AD646C: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[6] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AD6490; } @@ -6354,7 +6428,6 @@ L_08AD6478: } L_08AD6488: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD6498; } @@ -6370,11 +6443,20 @@ L_08AD6490: } L_08AD6498: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD64A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6406,7 +6488,6 @@ L_08AD64F0: ctx.gpr[7] = (aot_gpr_16 + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(32))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD651C; } @@ -6427,7 +6508,6 @@ L_08AD6504: L_08AD651C: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AD652C; } @@ -6440,7 +6520,6 @@ L_08AD652C: ctx.gpr[6] = (ctx.gpr[6] + static_cast(1)); ctx.gpr[7] = (static_cast(ctx.gpr[6]) < 20 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AD64F0; } @@ -6487,7 +6566,6 @@ L_08AD6584: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 131u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD65C8; } @@ -6512,7 +6590,6 @@ L_08AD65A4: L_08AD65B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD65C8; } @@ -6543,7 +6620,6 @@ L_08AD65DC: ctx.gpr[21] = (ctx.gpr[21] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6564; } @@ -6551,7 +6627,6 @@ L_08AD65DC: } L_08AD65EC: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD6624; } @@ -6584,7 +6659,6 @@ L_08AD6624: L_08AD662C: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD6640; } @@ -6640,7 +6714,6 @@ L_08AD6684: L_08AD6694: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(629)))))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD66AC; } @@ -6672,7 +6745,17 @@ L_08AD66B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD66D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -6727,7 +6810,6 @@ L_08AD675C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_5 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD6788; } @@ -6752,7 +6834,6 @@ L_08AD6788: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_gpr_5 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD67B4; } @@ -6785,7 +6866,6 @@ L_08AD67C8: goto L_08AD67CC; L_08AD67CC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AD67F4; } @@ -6821,7 +6901,6 @@ L_08AD67F4: } L_08AD67FC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD6818; } @@ -6838,7 +6917,6 @@ L_08AD6818: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_17) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD68B8; } @@ -6864,7 +6942,6 @@ L_08AD6848: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD6878; } @@ -6877,7 +6954,6 @@ L_08AD6858: goto L_08AD64A0; L_08AD6864: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD68B0; } @@ -6895,7 +6971,6 @@ L_08AD686C: L_08AD6878: aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD68B0; } @@ -6922,7 +6997,6 @@ L_08AD6894: goto L_08AD68B0; L_08AD68B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD68E4; } @@ -6972,7 +7046,17 @@ L_08AD68F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD691C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -7074,7 +7158,6 @@ L_08AD69E0: } L_08AD69E8: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD6A38; } @@ -7089,7 +7172,6 @@ L_08AD69F0: goto L_08AD69FC; L_08AD69FC: aot_gpr_31 = (0x08AD6A04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6A04u) goto L_08AD6A04; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6A04: @@ -7107,7 +7189,6 @@ L_08AD6A0C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD6ABC; } @@ -7120,7 +7201,6 @@ L_08AD6A38: AOT_REGCACHE_SYNC_OUT(); return; L_08AD6A40: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD6A68; } @@ -7129,7 +7209,6 @@ L_08AD6A40: L_08AD6A48: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6A60; } @@ -7137,7 +7216,6 @@ L_08AD6A48: } L_08AD6A54: aot_gpr_31 = (0x08AD6A5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6A5Cu) goto L_08AD6A5C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6A5C: @@ -7168,7 +7246,6 @@ L_08AD6A80: AOT_REGCACHE_SYNC_OUT(); return; L_08AD6A8C: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD6AC0; } @@ -7177,7 +7254,6 @@ L_08AD6A8C: L_08AD6A94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6AAC; } @@ -7185,7 +7261,6 @@ L_08AD6A94: } L_08AD6AA0: aot_gpr_31 = (0x08AD6AA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6AA8u) goto L_08AD6AA8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6AA8: @@ -7198,7 +7273,6 @@ L_08AD6AAC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD6AB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD6AC0; } @@ -7224,7 +7298,17 @@ L_08AD6AC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6AE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7240,7 +7324,17 @@ L_08AD6B00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, ctx.gpr[18]}; @@ -7281,7 +7375,17 @@ L_08AD6B58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6B74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7297,7 +7401,17 @@ L_08AD6B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, ctx.gpr[18]}; @@ -7327,7 +7441,6 @@ L_08AD6BDC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD6C14; } @@ -7337,7 +7450,6 @@ L_08AD6BEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); ctx.gpr[6] = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AD6C14; } @@ -7349,7 +7461,6 @@ L_08AD6BFC: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[6]); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD6C1C; } @@ -7422,7 +7533,17 @@ L_08AD6C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6CAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -7434,7 +7555,6 @@ L_08AD6CAC: L_08AD6CC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6CD8; } @@ -7442,7 +7562,6 @@ L_08AD6CC4: } L_08AD6CD0: aot_gpr_31 = (0x08AD6CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6CD8u) goto L_08AD6CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6CD8: @@ -7458,7 +7577,17 @@ L_08AD6CE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6CF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, ctx.gpr[18]}; @@ -7489,7 +7618,6 @@ L_08AD6D3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD6DAC; } @@ -7499,7 +7627,6 @@ L_08AD6D4C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); ctx.gpr[6] = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AD6DAC; } @@ -7511,7 +7638,6 @@ L_08AD6D5C: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[6]); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD6DAC; } @@ -7556,7 +7682,6 @@ L_08AD6DAC: } L_08AD6DB4: aot_gpr_31 = (0x08AD6DBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD6DBCu) goto L_08AD6DBC; AOT_REGCACHE_SYNC_OUT(); return; L_08AD6DBC: @@ -7611,13 +7736,22 @@ L_08AD6E14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6E34: ctx.gpr[11] = (aot_gpr_4 + static_cast(164)); ctx.gpr[11] = (ctx.gpr[11] - 0u); ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(164))); { const bool branch_taken = ctx.gpr[2] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AD6EA8; } @@ -7631,7 +7765,6 @@ L_08AD6E48: L_08AD6E54: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); { const bool branch_taken = ctx.gpr[10] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AD6E9C; } @@ -7641,7 +7774,6 @@ L_08AD6E60: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (static_cast(ctx.gpr[10]) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AD6E9C; } @@ -7664,7 +7796,6 @@ L_08AD6E7C: L_08AD6E88: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(30)))))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD6E9C; } @@ -7681,7 +7812,6 @@ L_08AD6E94: L_08AD6E9C: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AD6E54; } @@ -7692,11 +7822,20 @@ L_08AD6EA8: goto L_08AD6EAC; L_08AD6EAC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6EB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -7720,7 +7859,6 @@ L_08AD6EB4: L_08AD6EEC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AD6F50; } @@ -7730,7 +7868,6 @@ L_08AD6EF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD6F50; } @@ -7765,7 +7902,6 @@ L_08AD6F28: AOT_REGCACHE_SYNC_OUT(); return; L_08AD6F40: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08AD6F50; } @@ -7782,7 +7918,6 @@ L_08AD6F48: L_08AD6F50: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AD6EEC; } @@ -7806,7 +7941,17 @@ L_08AD6F60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6F80: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_gpr_5 + ctx.gpr[6]); @@ -7815,7 +7960,17 @@ L_08AD6F80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD6F90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[22]); @@ -7853,7 +8008,6 @@ L_08AD6FE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD7000; } @@ -7862,7 +8016,6 @@ L_08AD6FE4: L_08AD6FF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(80))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD7008; } @@ -7870,7 +8023,6 @@ L_08AD6FF4: } L_08AD7000: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD70C8; } @@ -7902,7 +8054,6 @@ L_08AD7024: } L_08AD702C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD70C8; } @@ -7910,13 +8061,11 @@ L_08AD702C: } L_08AD7034: aot_gpr_31 = (0x08AD703Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD703Cu) goto L_08AD703C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD703C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1328))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD7050; } @@ -7924,7 +8073,6 @@ L_08AD703C: } L_08AD7048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD70C8; } @@ -7960,7 +8108,6 @@ L_08AD7078: L_08AD7088: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD70C8; } @@ -7985,7 +8132,6 @@ L_08AD70AC: L_08AD70B4: aot_gpr_4 = (ctx.gpr[2] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD70C8; } @@ -8001,7 +8147,6 @@ L_08AD70C0: } L_08AD70C8: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08AD6FD0; } @@ -8027,7 +8172,17 @@ L_08AD70D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD70FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[22]); @@ -8065,7 +8220,6 @@ L_08AD7150: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD718C; } @@ -8074,7 +8228,6 @@ L_08AD7150: L_08AD7160: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD718C; } @@ -8087,7 +8240,6 @@ L_08AD716C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7174: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD7194; } @@ -8097,7 +8249,6 @@ L_08AD717C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD7194; } @@ -8105,7 +8256,6 @@ L_08AD717C: } L_08AD718C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7238; } @@ -8137,7 +8287,6 @@ L_08AD71B0: } L_08AD71B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD7238; } @@ -8173,7 +8322,6 @@ L_08AD71E8: L_08AD71F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(28)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD7238; } @@ -8198,7 +8346,6 @@ L_08AD721C: L_08AD7224: aot_gpr_4 = (ctx.gpr[2] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD7238; } @@ -8214,7 +8361,6 @@ L_08AD7230: } L_08AD7238: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08AD713C; } @@ -8240,7 +8386,17 @@ L_08AD7244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD726C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -8269,7 +8425,6 @@ L_08AD729C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); aot_gpr_5 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD72B4; } @@ -8277,7 +8432,6 @@ L_08AD729C: } L_08AD72AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD72CC; } @@ -8296,7 +8450,6 @@ L_08AD72B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD72CC: { const bool branch_taken = aot_gpr_17 != 0u; - // nop if (branch_taken) { goto L_08AD7288; } @@ -8314,7 +8467,17 @@ L_08AD72D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD72E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[22]); @@ -8358,7 +8521,6 @@ L_08AD7354: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(12))); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD73C8; } @@ -8389,7 +8551,6 @@ L_08AD7384: goto L_08AD6E34; L_08AD738C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD73C8; } @@ -8414,7 +8575,6 @@ L_08AD73AC: L_08AD73B4: aot_gpr_4 = (ctx.gpr[2] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD73C8; } @@ -8455,7 +8615,17 @@ L_08AD73D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD7400: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -8501,7 +8671,6 @@ L_08AD7470: AOT_REGCACHE_SYNC_OUT(); return; L_08AD747C: { const bool branch_taken = aot_gpr_17 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AD74CC; } @@ -8529,7 +8698,6 @@ L_08AD74A0: AOT_REGCACHE_SYNC_OUT(); return; L_08AD74A8: { const bool branch_taken = aot_gpr_16 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AD74B8; } @@ -8563,7 +8731,6 @@ L_08AD74D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD7508; } @@ -8576,7 +8743,6 @@ L_08AD74E4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD7524; } @@ -8584,7 +8750,6 @@ L_08AD74E4: } L_08AD7500: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7570; } @@ -8599,7 +8764,6 @@ L_08AD7508: goto L_08AD4040; L_08AD751C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD78AC; } @@ -8607,12 +8771,10 @@ L_08AD751C: } L_08AD7524: aot_gpr_31 = (0x08AD752Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 79u, 0x08A8C7F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD752Cu) goto L_08AD752C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD752C: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AD7554; } @@ -8624,7 +8786,6 @@ L_08AD7534: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD7524; } @@ -8632,7 +8793,6 @@ L_08AD7534: } L_08AD754C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7570; } @@ -8647,7 +8807,6 @@ L_08AD7554: goto L_08AD4040; L_08AD7568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD78AC; } @@ -8736,7 +8895,6 @@ L_08AD75F8: goto L_08AD75FC; L_08AD75FC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AD7638; } @@ -8745,7 +8903,6 @@ L_08AD75FC: L_08AD7604: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD7638; } @@ -8758,7 +8915,6 @@ L_08AD7610: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7618: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD7638; } @@ -8771,7 +8927,6 @@ L_08AD7620: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7628: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD7638; } @@ -8815,7 +8970,6 @@ L_08AD7664: L_08AD7670: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(28)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AD7728; } @@ -8869,7 +9023,6 @@ L_08AD76BC: L_08AD76C0: aot_gpr_16 = (aot_gpr_17 | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AD7720; } @@ -8878,7 +9031,6 @@ L_08AD76C0: L_08AD76CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD7720; } @@ -8891,7 +9043,6 @@ L_08AD76D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD76E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD7720; } @@ -8910,7 +9061,6 @@ L_08AD76F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD76FC: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AD7720; } @@ -8955,7 +9105,6 @@ L_08AD773C: L_08AD7748: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AD7800; } @@ -8965,7 +9114,6 @@ L_08AD7754: aot_gpr_16 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(30)))))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD77EC; } @@ -9026,7 +9174,6 @@ L_08AD77AC: goto L_08AD77C0; L_08AD77C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD77EC; } @@ -9049,7 +9196,6 @@ L_08AD77DC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD77E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD77F8; } @@ -9062,7 +9208,6 @@ L_08AD77EC: goto L_08AD43F0; L_08AD77F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD780C; } @@ -9098,7 +9243,6 @@ L_08AD7834: AOT_REGCACHE_SYNC_OUT(); return; L_08AD783C: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08AD7860; } @@ -9165,7 +9309,17 @@ L_08AD78AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD78DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[6] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -9193,7 +9347,6 @@ L_08AD7928: ctx.gpr[21] = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(70))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(120))); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD7948; } @@ -9201,7 +9354,6 @@ L_08AD7928: } L_08AD7938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7A78; } @@ -9209,7 +9361,6 @@ L_08AD7938: } L_08AD7940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7E64; } @@ -9238,7 +9389,6 @@ L_08AD795C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_17); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_16 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AD798C; } @@ -9246,7 +9396,6 @@ L_08AD795C: } L_08AD7984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD79A4; } @@ -9284,7 +9433,6 @@ L_08AD79B8: goto L_08AD79CC; L_08AD79CC: aot_gpr_31 = (0x08AD79D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD79D4u) goto L_08AD79D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AD79D4: @@ -9304,7 +9452,6 @@ L_08AD79E8: aot_gpr_4 = (ctx.gpr[18] + ctx.gpr[19]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(124))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD7A3C; } @@ -9320,7 +9467,6 @@ L_08AD7A0C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AD7A44; } @@ -9328,7 +9474,6 @@ L_08AD7A0C: } L_08AD7A34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7A58; } @@ -9336,7 +9481,6 @@ L_08AD7A34: } L_08AD7A3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD79CC; } @@ -9353,7 +9497,6 @@ L_08AD7A58: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD79CC; } @@ -9368,7 +9511,6 @@ L_08AD7A68: L_08AD7A78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-472))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AD7C10; } @@ -9386,7 +9528,6 @@ L_08AD7A9C: ctx.gpr[6] = (ctx.gpr[18] + ctx.gpr[21]); ctx.gpr[6] = (aot_mem.aot_direct_load8(ctx.gpr[6] + static_cast(124))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AD7AB4; } @@ -9394,7 +9535,6 @@ L_08AD7A9C: } L_08AD7AAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7AF8; } @@ -9429,7 +9569,6 @@ L_08AD7AD8: L_08AD7AE4: ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[6] + static_cast(28)))))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AD7AF8; } @@ -9437,7 +9576,6 @@ L_08AD7AE4: } L_08AD7AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7B08; } @@ -9456,7 +9594,6 @@ L_08AD7AF8: L_08AD7B08: aot_gpr_4 = (0u | 16u); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD7B24; } @@ -9466,7 +9603,6 @@ L_08AD7B14: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(116))); aot_gpr_4 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD7C18; } @@ -9479,7 +9615,6 @@ L_08AD7B24: goto L_08AD7B30; L_08AD7B30: aot_gpr_31 = (0x08AD7B38u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD7B38u) goto L_08AD7B38; AOT_REGCACHE_SYNC_OUT(); return; L_08AD7B38: @@ -9499,7 +9634,6 @@ L_08AD7B4C: aot_gpr_5 = (ctx.gpr[18] + aot_gpr_4); ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(124))); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AD7B88; } @@ -9525,7 +9659,6 @@ L_08AD7B80: } L_08AD7B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7B30; } @@ -9544,7 +9677,6 @@ L_08AD7B9C: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AD7C18; } @@ -9560,7 +9692,6 @@ L_08AD7BBC: L_08AD7BD0: ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(116))); { const bool branch_taken = ctx.gpr[6] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AD7BFC; } @@ -9578,7 +9709,6 @@ L_08AD7BE8: goto L_08AD6020; L_08AD7BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7C04; } @@ -9608,7 +9738,6 @@ L_08AD7C18: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7C20: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD7C3C; } @@ -9628,7 +9757,6 @@ L_08AD7C3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7C44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD7C60; } @@ -9667,7 +9795,6 @@ L_08AD7C90: ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(50))); ctx.gpr[11] = (aot_mem.aot_direct_load16(ctx.gpr[7] + static_cast(48))); { const bool branch_taken = ctx.gpr[10] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AD7CA8; } @@ -9689,7 +9816,6 @@ L_08AD7CA8: } L_08AD7CB8: { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AD7CC4; } @@ -9707,7 +9833,6 @@ L_08AD7CD0: ctx.gpr[8] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(28))); ctx.gpr[9] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(26))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AD7CE8; } @@ -9730,7 +9855,6 @@ L_08AD7CE8: L_08AD7CF8: ctx.gpr[30] = (ctx.gpr[21] | ctx.gpr[30]); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD7D10; } @@ -9739,7 +9863,6 @@ L_08AD7CF8: L_08AD7D04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(144))); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD7E64; } @@ -9758,7 +9881,6 @@ L_08AD7D28: aot_gpr_16 = (aot_gpr_16 << (ctx.gpr[19] & 31u)); aot_gpr_4 = (aot_gpr_16 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD7D84; } @@ -9768,7 +9890,6 @@ L_08AD7D3C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(140))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_16); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD7D84; } @@ -9800,7 +9921,6 @@ L_08AD7D74: } L_08AD7D84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD7DDC; } @@ -9810,7 +9930,6 @@ L_08AD7D8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(140))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_16); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD7DDC; } @@ -9845,7 +9964,6 @@ L_08AD7DCC: L_08AD7DDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AD7E50; } @@ -9854,7 +9972,6 @@ L_08AD7DDC: L_08AD7DE8: aot_gpr_5 = (aot_gpr_16 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD7E20; } @@ -9864,7 +9981,6 @@ L_08AD7DF4: ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(144))); ctx.gpr[6] = (ctx.gpr[6] & aot_gpr_16); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08AD7E20; } @@ -9879,7 +9995,6 @@ L_08AD7E04: goto L_08AD4040; L_08AD7E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7E50; } @@ -9887,7 +10002,6 @@ L_08AD7E18: } L_08AD7E20: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD7E50; } @@ -9897,7 +10011,6 @@ L_08AD7E28: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(144))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_16); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD7E50; } @@ -9945,7 +10058,17 @@ L_08AD7E64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD7E94: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -9970,7 +10093,6 @@ L_08AD7EBC: } L_08AD7ECC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AD7F14; } @@ -9992,12 +10114,10 @@ L_08AD7EE8: goto L_08AD4040; L_08AD7EFC: aot_gpr_31 = (0x08AD7F04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD7F04u) goto L_08AD7F04; AOT_REGCACHE_SYNC_OUT(); return; L_08AD7F04: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD7F24; } @@ -10005,7 +10125,6 @@ L_08AD7F04: } L_08AD7F0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7F6C; } @@ -10013,7 +10132,6 @@ L_08AD7F0C: } L_08AD7F14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0181_entry, 181u, 72u, 0x08AD8364u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10021,7 +10139,6 @@ L_08AD7F14: } L_08AD7F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0181_entry, 181u, 72u, 0x08AD8364u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10029,7 +10146,6 @@ L_08AD7F1C: } L_08AD7F24: aot_gpr_31 = (0x08AD7F2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD7F2Cu) goto L_08AD7F2C; AOT_REGCACHE_SYNC_OUT(); return; L_08AD7F2C: @@ -10039,7 +10155,6 @@ L_08AD7F2C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7F34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD7F6C; } @@ -10061,7 +10176,6 @@ L_08AD7F50: goto L_08AD4040; L_08AD7F64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD7F98; } @@ -10079,7 +10193,6 @@ L_08AD7F78: goto L_08AD4E34; L_08AD7F84: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD7F98; } @@ -10092,12 +10205,10 @@ L_08AD7F8C: goto L_08AD5EF8; L_08AD7F98: aot_gpr_31 = (0x08AD7FA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD7FA0u) goto L_08AD7FA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD7FA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD7FF0; } @@ -10105,7 +10216,6 @@ L_08AD7FA0: } L_08AD7FA8: aot_gpr_31 = (0x08AD7FB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD7FB0u) goto L_08AD7FB0; AOT_REGCACHE_SYNC_OUT(); return; L_08AD7FB0: @@ -10115,7 +10225,6 @@ L_08AD7FB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AD7FB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD7FF0; } @@ -10137,7 +10246,6 @@ L_08AD7FD4: goto L_08AD4040; L_08AD7FE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0181_entry, 181u, 4u, 0x08AD801Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0181.cpp b/profiles/vcs/generated/generated_unit_0181.cpp index a6e8aec..45246fd 100644 --- a/profiles/vcs/generated/generated_unit_0181.cpp +++ b/profiles/vcs/generated/generated_unit_0181.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0181[4095] = { - 1, 0, 2, 0, 3, 0, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 0, 0, 0, - 12, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, - 0, 0, 0, 26, 0, 27, 0, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 36, 0, 0, - 37, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 42, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 46, 0, 0, - 47, 0, 0, 48, 0, 49, 0, 50, 0, 0, 0, 0, 51, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, - 0, 0, 56, 0, 57, 0, 0, 58, 0, 59, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 64, 0, 65, 0, 0, - 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, - 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, - 0, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, - 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 87, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, - 90, 0, 0, 0, 91, 0, 0, 92, 0, 93, 0, 0, 0, 94, 0, 95, 0, 96, 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 0, 100, - 0, 101, 102, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, - 108, 0, 0, 109, 110, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 114, 0, 0, 0, 0, 0, 0, 0, 115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, - 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, - 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 134, 135, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 138, - 0, 0, 0, 0, 139, 0, 140, 0, 0, 0, 0, 0, 141, 0, 142, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 146, 0, 147, 0, - 148, 0, 149, 0, 0, 150, 0, 151, 0, 152, 0, 153, 0, 0, 0, 154, 0, 155, 0, 0, 156, 0, 157, 0, 158, 0, 0, 0, 159, 0, 0, 0, - 0, 0, 0, 160, 0, 0, 0, 161, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, 165, 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, - 0, 0, 0, 0, 168, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 171, 0, 172, 0, 0, 0, 0, 0, 173, 0, 174, 0, 0, 0, 175, - 0, 176, 0, 177, 0, 178, 0, 179, 0, 0, 180, 0, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, 185, 0, 0, 0, 0, 186, 0, 0, 0, 0, - 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 189, 0, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 194, 0, - 195, 0, 196, 0, 197, 0, 198, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 0, 0, - 0, 204, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 208, 209, 0, 0, 210, 0, 0, 0, 0, 0, 0, - 211, 0, 0, 0, 212, 0, 0, 213, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, 0, 0, 218, 0, 219, 0, - 0, 0, 220, 0, 221, 0, 222, 0, 223, 0, 224, 0, 0, 225, 0, 226, 0, 227, 0, 228, 0, 0, 0, 229, 0, 230, 0, 0, 231, 0, 232, 0, - 233, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 236, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 239, 0, 240, - 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 244, 0, 0, 0, 0, 245, 0, 246, 0, 0, 0, 0, 0, 247, - 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 0, 256, 0, 0, 257, 0, 258, 0, 0, - 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 0, 265, 0, 266, 0, 0, 0, 0, 0, - 267, 0, 268, 0, 0, 0, 0, 0, 269, 0, 270, 0, 0, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 0, 276, 0, 277, 0, 0, 0, 278, - 0, 0, 279, 0, 280, 0, 281, 0, 0, 282, 0, 283, 0, 0, 284, 0, 285, 0, 0, 0, 286, 0, 0, 287, 0, 288, 0, 289, 0, 0, 290, 0, - 291, 0, 292, 0, 0, 0, 293, 0, 0, 0, 0, 0, 294, 0, 295, 0, 296, 0, 297, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 300, 0, 301, - 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, 311, 0, 0, 0, 312, 0, 313, - 0, 0, 314, 0, 315, 0, 316, 0, 0, 317, 0, 318, 319, 0, 0, 0, 320, 0, 321, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 324, 0, 0, - 325, 0, 326, 0, 0, 0, 327, 0, 328, 0, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, 0, 0, 0, 0, 334, - 0, 335, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 338, 0, 339, 340, 0, 341, 0, 342, 0, 343, 0, 0, 344, 0, 345, 0, 0, 0, 0, 346, - 0, 0, 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 0, 351, 0, 352, 0, 353, 0, 354, 0, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 357, - 358, 0, 0, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 362, 0, 0, 363, 0, 364, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, - 368, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 0, 371, 372, 0, 373, 0, 0, 0, 374, 0, 375, 0, 0, 0, 0, 376, 0, 377, 378, 0, - 379, 0, 0, 380, 0, 381, 0, 382, 383, 0, 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 0, 0, 387, 0, 0, 0, 388, 0, 0, 389, 0, - 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 394, 0, 395, 396, 0, 0, 397, 0, 0, 398, 0, 399, - 0, 400, 0, 0, 401, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 405, 0, 406, 0, 407, 0, 408, 0, 0, 409, 0, - 410, 0, 0, 0, 0, 411, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 414, 0, - 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 417, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 421, - 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, - 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 429, 430, - 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 435, - 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 443, 444, 0, 445, 0, 446, - 0, 0, 0, 447, 0, 0, 448, 0, 449, 0, 450, 0, 0, 451, 452, 0, 453, 454, 0, 455, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 464, 0, 0, 0, 0, 0, 465, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 468, 469, 0, 0, 470, 0, 471, 0, 472, 0, 0, 0, - 473, 0, 474, 0, 475, 0, 476, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, - 0, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, - 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, 490, - 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 493, 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, - 499, 0, 0, 0, 0, 500, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 503, 0, 504, 0, 0, 0, 0, 0, 505, 0, 506, 0, 0, 507, - 0, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 510, 511, 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, - 518, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, - 0, 0, 0, 0, 524, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, - 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 0, 0, 534, 0, 535, 0, 0, 0, 536, 537, 0, 0, 0, 538, 0, - 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 546, 0, - 0, 547, 0, 0, 0, 0, 548, 549, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, - 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 561, - 0, 0, 0, 0, 562, 0, 563, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 565, 0, 566, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 568, - 0, 0, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 0, 0, 573, 0, 574, 0, 0, 0, - 575, 0, 0, 0, 0, 0, 576, 0, 0, 0, 577, 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 0, - 0, 0, 0, 581, 0, 582, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 587, 0, 588, - 0, 589, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 596, 0, - 597, 0, 598, 0, 0, 0, 0, 0, 0, 0, 599, 0, 600, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, - 0, 604, 0, 605, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 608, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 611, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 0, 0, 0, 0, 614, 615, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 617, 0, 618, 619, 0, 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 623, 0, 0, 0, 0, 624, 0, 0, 0, - 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 627, 0, 0, 0, 0, 628, 0, 0, 629, 630, 0, 0, 0, 0, 631, 0, - 632, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 635, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 637, - 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 640, 0, 0, 641, 0, 642, 0, 643, 0, 0, 0, 0, 0, 0, 644, 0, - 0, 645, 646, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 649, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 653, 0, 654, 655, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, - 664, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 667, - 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 673, - 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 677, 0, 678, 0, 0, 0, 0, 0, 0, 0, - 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 681, 0, 0, 0, 682, 683, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 685, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 686, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 689, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, 692, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 694, 0, 0, 695, 0, 696, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 698, 0, 0, 699, 0, 700, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 710, 0, 0, 711, 0, 712, 0, 713, 0, 0, 714, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 718, - 0, 719, 0, 720, 721, 0, 722, 0, 723, 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, 0, 728, 0, 729, 0, 0, 730, 0, 0, 0, 0, 731, 0, - 0, 0, 0, 0, 0, 0, 0, 732, 0, 733, 0, 0, 734, 0, 735, 0, 736, 0, 737, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, - 0, 0, 0, 740, 0, 741, 0, 0, 742, 0, 743, 0, 744, 0, 745, 0, 746, 0, 0, 747, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, - 0, 749, 0, 750, 0, 0, 751, 0, 752, 0, 753, 0, 754, 0, 0, 755, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 758, - 0, 0, 759, 0, 760, 761, 0, 762, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, - 766, 767, 768, 0, 769, 0, 0, 770, 0, 771, 772, 0, 0, 0, 773, 0, 0, 0, 774, 0, 775, 0, 776, 0, 0, 777, 0, 0, 0, 0, 0, 0, - 778, 0, 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 782, 0, 783, - 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, - 0, 788, 789, 790, 0, 791, 0, 0, 792, 0, 793, 794, 0, 0, 0, 795, 0, 0, 0, 796, 0, 797, 0, 798, 0, 0, 799, 0, 0, 0, 0, 0, - 0, 800, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, - 0, 804, 0, 805, 0, 806, 0, 807, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 809, 0, 0, 0, 810, 0, 0, 811, 0, 0, 0, 0, - 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 813, 0, 814, 0, 815, 0, 0, 816, 0, 0, 0, 0, 0, 0, 817, 818, 819, 0, 820, 0, 0, - 821, 0, 822, 823, 0, 0, 0, 824, 0, 0, 0, 825, 0, 826, 0, 827, 0, 0, 828, 0, 829, 0, 830, 0, 831, 0, 0, 0, 832, 0, 833, 0, - 834, 0, 835, 0, 0, 836, 0, 0, 0, 0, 0, 0, 837, 838, 839, 0, 840, 0, 0, 841, 0, 842, 843, 0, 0, 0, 844, 0, 0, 0, 845, 0, - 846, 0, 847, 0, 848, 0, 849, 0, 0, 850, 0, 851, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 854, 0, 855, 856, 0, 857, - 0, 0, 858, 0, 859, 0, 0, 0, 860, 0, 861, 0, 862, 0, 0, 0, 863, 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, 865, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 866, 0, 867, 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 870, 0, 871, 0, 872, 0, 873, 874, - 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 876, 877, 878, 0, 879, 0, 880, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 882, 0, - 883, 0, 884, 0, 885, 0, 0, 0, 886, 0, 887, 0, 888, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, - 0, 891, 0, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 893, 0, 0, 0, 0, 894, 0, 0, 895, 0, 896, 0, 897, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 899, 0, 0, 0, 900, 901, 902, 0, 0, 0, 903, 0, 0, 904, 0, 905, - 0, 0, 906, 0, 0, 0, 907, 0, 0, 0, 908, 0, 0, 0, 909, 910, 911, 0, 0, 0, 912, 0, 913, 0, 914, 0, 915, 0, 916, 0, 917, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 918, 0, 919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 920, 0, 0, 0, 921, 0, 0, 0, 0, 922, 0, 923, 0, 924, 0, 925, 0, 0, 926, 0, 0, 927, 0, 928, 929, 0, 930, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, 932, 0, 0, 0, 933, 0, 934, 0, 0, 0, 0, 0, 0, 0, 0, 935, 0, 936, 0, 0, - 937, 0, 938, 939, 0, 940, 941, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, 943, 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 945, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, 947, 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 949, 950, 0, 0, 0, 951, 0, 952, 0, 953, 0, 954, 0, 955, 0, 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 957, - 0, 958, 0, 959, 960, 0, 961, 0, 0, 0, 962, 0, 963, 964, 0, 965, 0, 966, 0, 0, 0, 967, 0, 968, 0, 0, 969, 0, 0, 970, 971, 0, - 972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 973, 0, 974, 0, 0, 0, 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0181[64] = { + 0x5552A9250842AA95ull, 0x2495082921255528ull, 0x28A0A294480450A9ull, 0x80888002028A1044ull, + 0x08A4221040202088ull, 0x10880906920AA291ull, 0x0488000080C20419ull, 0x4111020220055400ull, + 0x54505050808B1050ull, 0x1130428811528AA5ull, 0x0854A4AA8A0A0A10ull, 0x08880A5545050508ull, + 0x5050509102620482ull, 0xA0848811528AA554ull, 0x292AA28282848804ull, 0x8A5545050509102Aull, + 0xA14550454A914A54ull, 0x30451A54A2911155ull, 0x852AD0A284815145ull, 0x1514A209848AA550ull, + 0x488521A968516111ull, 0x4AA42052A4D0A280ull, 0x81244102404000A1ull, 0xC141002020000140ull, + 0x0900902081081002ull, 0x040B6548AC020200ull, 0x0020820008210200ull, 0x10A0145515340904ull, + 0xA081200840000108ull, 0x0840020000024444ull, 0x8156024094148421ull, 0x4020220920000800ull, + 0x4628A04441020150ull, 0x008008C252490410ull, 0x4000200000000120ull, 0x81144050A4104004ull, + 0x0480244114500110ull, 0x0002004AA80500A8ull, 0x8401140544420000ull, 0x00B01400A002424Aull, + 0x432140201084085Aull, 0x40A9020480406009ull, 0x0050D14000B00016ull, 0x8100020102A02140ull, + 0x014404018A100808ull, 0x8040030024062801ull, 0x0003480000000000ull, 0x50000D2000000D20ull, + 0xA492A42004082900ull, 0x042552804255515Aull, 0xA010954A01095528ull, 0x02544697020402B4ull, + 0x04022001A8000209ull, 0x8004001204A88D2Eull, 0x2E04A808091002AAull, 0x446970255154A88Dull, + 0x08411514B4801A55ull, 0x408AE040D50820A0ull, 0xA908000A40011515ull, 0x5551C444A4711000ull, + 0x2D255088000A0000ull, 0x800C046D28051200ull, 0x802AA8C000011400ull, 0x4008140164A2B45Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0181[64] = { + 1u, 26u, 47u, 66u, 78u, 90u, 108u, 119u, 131u, 148u, 168u, 187u, 204u, 220u, 241u, 259u, + 279u, 302u, 325u, 347u, 368u, 390u, 410u, 422u, 431u, 441u, 457u, 464u, 482u, 491u, 499u, 516u, + 524u, 539u, 552u, 556u, 569u, 581u, 593u, 604u, 617u, 632u, 645u, 658u, 668u, 679u, 690u, 694u, + 704u, 719u, 740u, 759u, 778u, 788u, 804u, 821u, 846u, 866u, 883u, 898u, 918u, 931u, 946u, 958u, }; void recomp_unit_0181_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0181_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AD8000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0181[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0181[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0181[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AD8000; @@ -1154,7 +1061,6 @@ L_08AD8000: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8008: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD801C; } @@ -1168,12 +1074,10 @@ L_08AD8010: AOT_REGCACHE_SYNC_OUT(); return; L_08AD801C: aot_gpr_31 = (0x08AD8024u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD8024u) goto L_08AD8024; AOT_REGCACHE_SYNC_OUT(); return; L_08AD8024: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD8088; } @@ -1181,7 +1085,6 @@ L_08AD8024: } L_08AD802C: aot_gpr_31 = (0x08AD8034u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD8034u) goto L_08AD8034; AOT_REGCACHE_SYNC_OUT(); return; L_08AD8034: @@ -1191,7 +1094,6 @@ L_08AD8034: AOT_REGCACHE_SYNC_OUT(); return; L_08AD803C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD8088; } @@ -1223,7 +1125,6 @@ L_08AD806C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8080: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD80D0; } @@ -1262,7 +1163,6 @@ L_08AD80B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD80BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD80D0; } @@ -1276,12 +1176,10 @@ L_08AD80C4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD80D0: aot_gpr_31 = (0x08AD80D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD80D8u) goto L_08AD80D8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD80D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD8114; } @@ -1289,7 +1187,6 @@ L_08AD80D8: } L_08AD80E0: aot_gpr_31 = (0x08AD80E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD80E8u) goto L_08AD80E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AD80E8: @@ -1299,7 +1196,6 @@ L_08AD80E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD80F0: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_08AD8114; } @@ -1315,7 +1211,6 @@ L_08AD80F8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD810C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8120; } @@ -1329,12 +1224,10 @@ L_08AD8114: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8120: aot_gpr_31 = (0x08AD8128u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD8128u) goto L_08AD8128; AOT_REGCACHE_SYNC_OUT(); return; L_08AD8128: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD81D0; } @@ -1342,7 +1235,6 @@ L_08AD8128: } L_08AD8130: aot_gpr_31 = (0x08AD8138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD8138u) goto L_08AD8138; AOT_REGCACHE_SYNC_OUT(); return; L_08AD8138: @@ -1352,7 +1244,6 @@ L_08AD8138: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8140: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD81D0; } @@ -1381,7 +1272,6 @@ L_08AD8160: L_08AD8174: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-11816))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD81F4; } @@ -1398,7 +1288,6 @@ L_08AD8180: } L_08AD818C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD81C8; } @@ -1423,7 +1312,6 @@ L_08AD81AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD81C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD81F4; } @@ -1431,7 +1319,6 @@ L_08AD81C0: } L_08AD81C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD81F4; } @@ -1458,7 +1345,6 @@ L_08AD81E8: L_08AD81F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD8214; } @@ -1467,7 +1353,6 @@ L_08AD81F4: L_08AD8200: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-408))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AD821C; } @@ -1475,7 +1360,6 @@ L_08AD8200: } L_08AD820C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD835C; } @@ -1483,7 +1367,6 @@ L_08AD820C: } L_08AD8214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8364; } @@ -1494,7 +1377,6 @@ L_08AD821C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD8364; } @@ -1526,7 +1408,6 @@ L_08AD8248: L_08AD826C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08AD82BC; } @@ -1536,7 +1417,6 @@ L_08AD8278: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); ctx.gpr[10] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08AD82BC; } @@ -1544,7 +1424,6 @@ L_08AD8278: } L_08AD8288: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD829C; } @@ -1553,7 +1432,6 @@ L_08AD8288: L_08AD8290: ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(18))); { const bool branch_taken = static_cast(ctx.gpr[10]) > 0; - // nop if (branch_taken) { goto L_08AD82B4; } @@ -1561,7 +1439,6 @@ L_08AD8290: } L_08AD829C: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08AD82BC; } @@ -1571,7 +1448,6 @@ L_08AD82A4: ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(18))); ctx.gpr[11] = (aot_mem.aot_direct_load16(ctx.gpr[9] + static_cast(16))); { const bool branch_taken = ctx.gpr[10] == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08AD82BC; } @@ -1607,7 +1483,6 @@ L_08AD82DC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD82EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD834C; } @@ -1636,7 +1511,6 @@ L_08AD8318: aot_gpr_5 = (ctx.gpr[17] << (aot_gpr_5 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD834C; } @@ -1683,7 +1557,17 @@ L_08AD8364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD8384: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -1735,7 +1619,6 @@ L_08AD83FC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AD84D4; } @@ -1745,7 +1628,6 @@ L_08AD840C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(16))); aot_gpr_6 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AD84D4; } @@ -1757,7 +1639,6 @@ L_08AD841C: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD84D4; } @@ -1921,7 +1802,6 @@ L_08AD854C: L_08AD8564: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD85AC; } @@ -1936,7 +1816,6 @@ L_08AD8570: goto L_08AD857C; L_08AD857C: aot_gpr_31 = (0x08AD8584u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD8584u) goto L_08AD8584; AOT_REGCACHE_SYNC_OUT(); return; L_08AD8584: @@ -1988,7 +1867,6 @@ L_08AD85DC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(12))); ctx.gpr[9] = (ctx.gpr[9] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AD860C; } @@ -2007,7 +1885,6 @@ L_08AD85F0: L_08AD8600: aot_gpr_6 = (ctx.gpr[7] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AD8610; } @@ -2022,7 +1899,6 @@ L_08AD8610: aot_gpr_6 = (aot_gpr_6 << 2u); aot_gpr_6 = (aot_gpr_4 + aot_gpr_6); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AD85CC; } @@ -2064,7 +1940,17 @@ L_08AD865C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD867C: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(476), aot_gpr_16); @@ -2129,7 +2015,6 @@ L_08AD8728: } L_08AD8730: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2174,9 +2059,7 @@ L_08AD8784: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22]) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD8BAC; } @@ -2203,9 +2086,7 @@ L_08AD87C0: goto L_08AD87D0; L_08AD87D0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD8818; } @@ -2262,7 +2143,6 @@ L_08AD8840: goto L_08AD8844; L_08AD8844: { const bool branch_taken = ctx.gpr[19] == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD8914; } @@ -2298,7 +2178,6 @@ L_08AD887C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8890: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8900; } @@ -2315,7 +2194,6 @@ L_08AD8898: AOT_REGCACHE_SYNC_OUT(); return; L_08AD88B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD88F8; } @@ -2332,7 +2210,6 @@ L_08AD88B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD88D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD88F0; } @@ -2350,7 +2227,6 @@ L_08AD88D8: } L_08AD88E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8908; } @@ -2358,7 +2234,6 @@ L_08AD88E8: } L_08AD88F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2366,7 +2241,6 @@ L_08AD88F0: } L_08AD88F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2374,7 +2248,6 @@ L_08AD88F8: } L_08AD8900: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2383,7 +2256,6 @@ L_08AD8900: L_08AD8908: ctx.gpr[19] = (ctx.gpr[20] + ctx.gpr[19]); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD884C; } @@ -2400,7 +2272,6 @@ L_08AD891C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8924: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD8960; } @@ -2421,7 +2292,6 @@ L_08AD893C: L_08AD8944: aot_gpr_4 = (ctx.gpr[2] < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD8958; } @@ -2429,7 +2299,6 @@ L_08AD8944: } L_08AD8950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD891C; } @@ -2437,7 +2306,6 @@ L_08AD8950: } L_08AD8958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2445,9 +2313,7 @@ L_08AD8958: } L_08AD8960: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD89A4; } @@ -2505,7 +2371,6 @@ L_08AD89D0: L_08AD89D4: ctx.gpr[19] = (ctx.gpr[23] | 0u); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD8AA8; } @@ -2541,7 +2406,6 @@ L_08AD8A10: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8A24: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8A94; } @@ -2558,7 +2422,6 @@ L_08AD8A2C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8A44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8A8C; } @@ -2575,7 +2438,6 @@ L_08AD8A4C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8A64: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8A84; } @@ -2593,7 +2455,6 @@ L_08AD8A6C: } L_08AD8A7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8A9C; } @@ -2601,7 +2462,6 @@ L_08AD8A7C: } L_08AD8A84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2609,7 +2469,6 @@ L_08AD8A84: } L_08AD8A8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2617,7 +2476,6 @@ L_08AD8A8C: } L_08AD8A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2626,7 +2484,6 @@ L_08AD8A94: L_08AD8A9C: ctx.gpr[19] = (ctx.gpr[19] - ctx.gpr[20]); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD89E0; } @@ -2640,7 +2497,6 @@ L_08AD8AA8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8AB4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8AD0; } @@ -2649,7 +2505,6 @@ L_08AD8AB4: L_08AD8ABC: ctx.gpr[19] = (ctx.gpr[23] | 0u); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD8AD8; } @@ -2657,7 +2512,6 @@ L_08AD8ABC: } L_08AD8AC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8BA4; } @@ -2665,7 +2519,6 @@ L_08AD8AC8: } L_08AD8AD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2702,7 +2555,6 @@ L_08AD8B0C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8B20: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8B90; } @@ -2719,7 +2571,6 @@ L_08AD8B28: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8B40: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8B88; } @@ -2736,7 +2587,6 @@ L_08AD8B48: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8B60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8B80; } @@ -2754,7 +2604,6 @@ L_08AD8B68: } L_08AD8B78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8B98; } @@ -2762,7 +2611,6 @@ L_08AD8B78: } L_08AD8B80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2770,7 +2618,6 @@ L_08AD8B80: } L_08AD8B88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2778,7 +2625,6 @@ L_08AD8B88: } L_08AD8B90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2787,7 +2633,6 @@ L_08AD8B90: L_08AD8B98: ctx.gpr[19] = (ctx.gpr[19] - ctx.gpr[20]); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AD8AD8; } @@ -2795,7 +2640,6 @@ L_08AD8B98: } L_08AD8BA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8FE4; } @@ -2823,9 +2667,7 @@ L_08AD8BCC: goto L_08AD8BDC; L_08AD8BDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AD8C28; } @@ -2925,7 +2767,6 @@ L_08AD8C9C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8CB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8D20; } @@ -2942,7 +2783,6 @@ L_08AD8CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8CD0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8D18; } @@ -2959,7 +2799,6 @@ L_08AD8CD8: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8CF0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8D10; } @@ -2977,7 +2816,6 @@ L_08AD8CF8: } L_08AD8D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8D28; } @@ -2985,7 +2823,6 @@ L_08AD8D08: } L_08AD8D10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -2993,7 +2830,6 @@ L_08AD8D10: } L_08AD8D18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3001,7 +2837,6 @@ L_08AD8D18: } L_08AD8D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3027,7 +2862,6 @@ L_08AD8D3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8D44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD8D80; } @@ -3048,7 +2882,6 @@ L_08AD8D5C: L_08AD8D64: aot_gpr_4 = (ctx.gpr[2] < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD8D78; } @@ -3056,7 +2889,6 @@ L_08AD8D64: } L_08AD8D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8D3C; } @@ -3064,7 +2896,6 @@ L_08AD8D70: } L_08AD8D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3072,7 +2903,6 @@ L_08AD8D78: } L_08AD8D80: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(456))); if (branch_taken) { @@ -3176,7 +3006,6 @@ L_08AD8E48: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8E5C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8ECC; } @@ -3193,7 +3022,6 @@ L_08AD8E64: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8E7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8EC4; } @@ -3210,7 +3038,6 @@ L_08AD8E84: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8E9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8EBC; } @@ -3228,7 +3055,6 @@ L_08AD8EA4: } L_08AD8EB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8ED4; } @@ -3236,7 +3062,6 @@ L_08AD8EB4: } L_08AD8EBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3244,7 +3069,6 @@ L_08AD8EBC: } L_08AD8EC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3252,7 +3076,6 @@ L_08AD8EC4: } L_08AD8ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3275,7 +3098,6 @@ L_08AD8EE0: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8EEC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8F0C; } @@ -3293,7 +3115,6 @@ L_08AD8EF4: } L_08AD8F04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8FE4; } @@ -3301,7 +3122,6 @@ L_08AD8F04: } L_08AD8F0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3341,7 +3161,6 @@ L_08AD8F4C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8F60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8FD0; } @@ -3358,7 +3177,6 @@ L_08AD8F68: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8F80: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8FC8; } @@ -3375,7 +3193,6 @@ L_08AD8F88: AOT_REGCACHE_SYNC_OUT(); return; L_08AD8FA0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD8FC0; } @@ -3393,7 +3210,6 @@ L_08AD8FA8: } L_08AD8FB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8FD8; } @@ -3401,7 +3217,6 @@ L_08AD8FB8: } L_08AD8FC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3409,7 +3224,6 @@ L_08AD8FC0: } L_08AD8FC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3417,7 +3231,6 @@ L_08AD8FC8: } L_08AD8FD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -3441,7 +3254,6 @@ L_08AD8FEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(444))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD902C; } @@ -3455,7 +3267,6 @@ L_08AD8FFC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9008: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD9018; } @@ -3463,7 +3274,6 @@ L_08AD9008: } L_08AD9010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD902C; } @@ -3477,7 +3287,6 @@ L_08AD9018: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9024: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD8FE4; } @@ -3498,7 +3307,6 @@ L_08AD9040: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(444))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD9080; } @@ -3512,7 +3320,6 @@ L_08AD9050: AOT_REGCACHE_SYNC_OUT(); return; L_08AD905C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD906C; } @@ -3520,7 +3327,6 @@ L_08AD905C: } L_08AD9064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9080; } @@ -3534,7 +3340,6 @@ L_08AD906C: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9038; } @@ -3549,7 +3354,6 @@ L_08AD9088: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(444))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD933C; } @@ -3573,7 +3377,6 @@ L_08AD90B0: } L_08AD90B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD91C0; } @@ -3581,7 +3384,6 @@ L_08AD90B8: } L_08AD90C0: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08AD90D8; } @@ -3625,7 +3427,6 @@ L_08AD90FC: goto L_08AD9100; L_08AD9100: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AD9118; } @@ -3638,7 +3439,6 @@ L_08AD9108: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9110: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AD9120; } @@ -3663,7 +3463,6 @@ L_08AD9130: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 131u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD91AC; } @@ -3682,7 +3481,6 @@ L_08AD9140: L_08AD9150: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AD9164; } @@ -3690,7 +3488,6 @@ L_08AD9150: } L_08AD915C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9174; } @@ -3708,7 +3505,6 @@ L_08AD9164: } L_08AD9174: { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD9188; } @@ -3767,7 +3563,6 @@ L_08AD91C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(444))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD933C; } @@ -3791,7 +3586,6 @@ L_08AD91F0: L_08AD91F4: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(96))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AD9208; } @@ -3799,7 +3593,6 @@ L_08AD91F4: } L_08AD9200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9220; } @@ -3809,7 +3602,6 @@ L_08AD9208: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(224))); ctx.gpr[9] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08AD9220; } @@ -3831,7 +3623,6 @@ L_08AD9220: } L_08AD9230: { const bool branch_taken = ctx.gpr[22] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AD9240; } @@ -3839,7 +3630,6 @@ L_08AD9230: } L_08AD9238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD933C; } @@ -3874,7 +3664,6 @@ L_08AD9268: } L_08AD927C: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08AD9294; } @@ -3918,7 +3707,6 @@ L_08AD92B8: goto L_08AD92BC; L_08AD92BC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AD92E8; } @@ -3931,7 +3719,6 @@ L_08AD92C4: AOT_REGCACHE_SYNC_OUT(); return; L_08AD92CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD92E8; } @@ -3940,7 +3727,6 @@ L_08AD92CC: L_08AD92D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AD92E8; } @@ -3985,7 +3771,6 @@ L_08AD9318: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9320: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD9334; } @@ -3999,7 +3784,6 @@ L_08AD9328: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD91C0; } @@ -4018,7 +3802,6 @@ L_08AD934C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(444))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -4027,7 +3810,6 @@ L_08AD934C: L_08AD935C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(452))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD961C; } @@ -4066,7 +3848,6 @@ L_08AD93A4: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(32))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD93BC; } @@ -4074,7 +3855,6 @@ L_08AD93A4: } L_08AD93B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD94C8; } @@ -4083,7 +3863,6 @@ L_08AD93B4: L_08AD93BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(356))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD93D0; } @@ -4091,7 +3870,6 @@ L_08AD93BC: } L_08AD93C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD94C8; } @@ -4121,7 +3899,6 @@ L_08AD93F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(9))); aot_gpr_4 = (aot_gpr_4 & 131u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD94C8; } @@ -4159,7 +3936,6 @@ L_08AD9434: goto L_08AD9438; L_08AD9438: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08AD9450; } @@ -4203,7 +3979,6 @@ L_08AD9474: goto L_08AD9478; L_08AD9478: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD94A0; } @@ -4212,7 +3987,6 @@ L_08AD9478: L_08AD9480: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AD94A0; } @@ -4220,12 +3994,10 @@ L_08AD9480: } L_08AD948C: aot_gpr_31 = (0x08AD9494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 50u, 0x08AD0530u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AD9494u) goto L_08AD9494; AOT_REGCACHE_SYNC_OUT(); return; L_08AD9494: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD94A0; } @@ -4248,7 +4020,6 @@ L_08AD94A0: L_08AD94B4: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[30]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD94C8; } @@ -4273,7 +4044,6 @@ L_08AD94DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(436))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AD94F8; } @@ -4305,7 +4075,6 @@ L_08AD94F8: } L_08AD951C: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08AD9534; } @@ -4350,7 +4119,6 @@ L_08AD9558: L_08AD955C: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AD95B4; } @@ -4359,7 +4127,6 @@ L_08AD955C: L_08AD9568: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AD95B4; } @@ -4372,7 +4139,6 @@ L_08AD9574: AOT_REGCACHE_SYNC_OUT(); return; L_08AD957C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD95B4; } @@ -4386,7 +4152,6 @@ L_08AD9584: AOT_REGCACHE_SYNC_OUT(); return; L_08AD9590: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AD95B4; } @@ -4436,7 +4201,6 @@ L_08AD95DC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD95E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AD9600; } @@ -4450,7 +4214,6 @@ L_08AD95EC: AOT_REGCACHE_SYNC_OUT(); return; L_08AD95F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9614; } @@ -4461,7 +4224,6 @@ L_08AD9600: aot_gpr_5 = (aot_gpr_29 + ctx.gpr[22]); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(356), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD938C; } @@ -4469,7 +4231,6 @@ L_08AD9600: } L_08AD9614: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9344; } @@ -4497,7 +4258,17 @@ L_08AD961C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9658: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), 0u); @@ -4515,7 +4286,17 @@ L_08AD9678: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9684: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4542,7 +4323,6 @@ L_08AD96B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD96FC; } @@ -4551,7 +4331,6 @@ L_08AD96B8: L_08AD96C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD96FC; } @@ -4589,14 +4368,34 @@ L_08AD96FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9718: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9720: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4721,7 +4520,6 @@ L_08AD9860: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD98B0; } @@ -4795,7 +4593,17 @@ L_08AD98EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9924: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-30640))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); @@ -4804,7 +4612,6 @@ L_08AD9924: ctx.gpr[2] = (ctx.gpr[2] + aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD99C0; } @@ -4830,7 +4637,6 @@ L_08AD9968: goto L_08AD996C; L_08AD996C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD99C0; } @@ -4838,7 +4644,6 @@ L_08AD996C: } L_08AD9974: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD99A8; } @@ -4869,7 +4674,6 @@ L_08AD9998: goto L_08AD99A0; L_08AD99A0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD99C0; } @@ -4878,7 +4682,6 @@ L_08AD99A0: L_08AD99A8: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD99B8; } @@ -4889,7 +4692,6 @@ L_08AD99B4: goto L_08AD99B8; L_08AD99B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD99C4; } @@ -4900,11 +4702,20 @@ L_08AD99C0: goto L_08AD99C4; L_08AD99C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD99CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4963,7 +4774,17 @@ L_08AD9A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9A6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5003,7 +4824,17 @@ L_08AD9ABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9AD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5035,7 +4866,6 @@ L_08AD9B08: L_08AD9B20: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AD9B50; } @@ -5048,7 +4878,6 @@ L_08AD9B2C: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AD9B50; } @@ -5056,7 +4885,6 @@ L_08AD9B2C: } L_08AD9B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AD9B54; } @@ -5068,7 +4896,6 @@ L_08AD9B50: L_08AD9B54: ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AD9B90; } @@ -5076,7 +4903,6 @@ L_08AD9B54: } L_08AD9B60: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AD9B70; } @@ -5084,7 +4910,6 @@ L_08AD9B60: } L_08AD9B68: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08AD9B88; } @@ -5094,7 +4919,6 @@ L_08AD9B70: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AD9BB0; } @@ -5118,7 +4942,6 @@ L_08AD9B88: } L_08AD9B90: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AD9BB0; } @@ -5128,7 +4951,6 @@ L_08AD9B98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_6 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AD9BB0; } @@ -5151,7 +4973,6 @@ L_08AD9BB0: aot_gpr_5 = (aot_gpr_5 & 15u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD9BDC; } @@ -5187,7 +5008,17 @@ L_08AD9BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9C0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5222,7 +5053,17 @@ L_08AD9C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9C78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5247,7 +5088,6 @@ L_08AD9C8C: L_08AD9CB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD9D08; } @@ -5260,7 +5100,6 @@ L_08AD9CC0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD9D08; } @@ -5285,7 +5124,6 @@ L_08AD9CF4: L_08AD9CFC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AD9D18; } @@ -5305,12 +5143,21 @@ L_08AD9D18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9D28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AD9D38u); - // nop goto L_08AD9C78; L_08AD9D38: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5319,7 +5166,17 @@ L_08AD9D38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9D44: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[10] = (17278u << 16u); @@ -5368,7 +5225,6 @@ L_08AD9DD8: ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(15)))))); ctx.gpr[7] = (ctx.gpr[7] & 32u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AD9E00; } @@ -5401,7 +5257,6 @@ L_08AD9E14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(15)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AD9E3C; } @@ -5425,7 +5280,6 @@ L_08AD9E3C: goto L_08AD9E48; L_08AD9E48: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD9E70; } @@ -5486,7 +5340,6 @@ L_08AD9EA4: aot_gpr_5 = (ctx.gpr[7] - aot_gpr_5); aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AD9EC8; } @@ -5497,7 +5350,6 @@ L_08AD9EC4: goto L_08AD9EC8; L_08AD9EC8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AD9ED8; } @@ -5505,7 +5357,6 @@ L_08AD9EC8: } L_08AD9ED0: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08AD9EE0; } @@ -5547,7 +5398,17 @@ L_08AD9EFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AD9F2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5635,7 +5496,6 @@ L_08AD9FF8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA010: { const bool branch_taken = ctx.gpr[19] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08ADA020; } @@ -5661,7 +5521,17 @@ L_08ADA020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADA044: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5678,7 +5548,6 @@ L_08ADA060: aot_gpr_5 = (0u | 0u); ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ADA198; } @@ -5694,7 +5563,6 @@ L_08ADA088: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0))); ctx.gpr[10] = (static_cast(ctx.gpr[10]) < 21 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08ADA184; } @@ -5725,7 +5593,6 @@ L_08ADA0BC: ctx.gpr[3] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[3] = (ctx.gpr[3] & ctx.gpr[11]); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08ADA0D4; } @@ -5743,7 +5610,6 @@ L_08ADA0D4: ctx.gpr[3] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.gpr[11] = (ctx.gpr[3] & ctx.gpr[11]); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08ADA0E8; } @@ -5756,7 +5622,6 @@ L_08ADA0E8: ctx.gpr[10] = (aot_mem.aot_direct_load8(ctx.gpr[10] + static_cast(1))); ctx.gpr[11] = (ctx.gpr[10] < static_cast(8) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08ADA184; } @@ -5768,11 +5633,20 @@ L_08ADA0F8: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[10]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16384))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADA110: aot_gpr_4 = (ctx.gpr[2] ^ 1u); aot_gpr_5 = (ctx.gpr[2] ^ 5u); @@ -5872,7 +5746,17 @@ L_08ADA19C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADA1AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -5955,7 +5839,17 @@ L_08ADA220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADA2B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -6004,7 +5898,6 @@ L_08ADA338: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADA368; } @@ -6016,7 +5909,6 @@ L_08ADA350: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADA37C; } @@ -6033,7 +5925,6 @@ L_08ADA368: } L_08ADA374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADA458; } @@ -6049,7 +5940,6 @@ L_08ADA37C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA390: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADA598; } @@ -6063,7 +5953,6 @@ L_08ADA398: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADA3D0; } @@ -6078,7 +5967,6 @@ L_08ADA3B8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA3C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADA3E0; } @@ -6125,7 +6013,6 @@ L_08ADA410: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(43)))))); aot_gpr_4 = (aot_gpr_4 & 240u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADA450; } @@ -6147,7 +6034,6 @@ L_08ADA420: goto L_08ADA450; L_08ADA450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADA480; } @@ -6157,7 +6043,6 @@ L_08ADA458: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ADA470; } @@ -6192,7 +6077,6 @@ L_08ADA498: L_08ADA4A8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(41))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ADA540; } @@ -6206,9 +6090,7 @@ L_08ADA4B4: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ADA540; } @@ -6217,7 +6099,6 @@ L_08ADA4B4: L_08ADA4DC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08ADA540; } @@ -6239,7 +6120,6 @@ L_08ADA4E8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA50C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADA51C; } @@ -6266,7 +6146,6 @@ L_08ADA51C: goto L_08ADA5C4; L_08ADA540: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08ADA584; } @@ -6288,7 +6167,6 @@ L_08ADA548: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA56C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADA57C; } @@ -6308,7 +6186,6 @@ L_08ADA57C: goto L_08ADA584; L_08ADA584: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADA598; } @@ -6337,7 +6214,17 @@ L_08ADA598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADA5C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-656)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(620), ctx.gpr[20]); @@ -6386,7 +6273,6 @@ L_08ADA658: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(43)))))); aot_gpr_4 = (aot_gpr_4 & 240u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADA680; } @@ -6402,7 +6288,6 @@ L_08ADA668: goto L_08ADA678; L_08ADA678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADA6B0; } @@ -6431,7 +6316,6 @@ L_08ADA688: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA6A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADA704; } @@ -6470,7 +6354,6 @@ L_08ADA6E8: } L_08ADA6FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADAAD0; } @@ -6509,7 +6392,6 @@ L_08ADA724: L_08ADA738: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08ADA7A8; } @@ -6566,7 +6448,6 @@ L_08ADA7B0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADA7D4; } @@ -6600,7 +6481,6 @@ L_08ADA7DC: AOT_REGCACHE_SYNC_OUT(); return; L_08ADA804: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADA810; } @@ -6611,7 +6491,6 @@ L_08ADA80C: goto L_08ADA810; L_08ADA810: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08ADA8F8; } @@ -6622,7 +6501,6 @@ L_08ADA818: aot_gpr_4 = (ctx.gpr[21] + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADA8F8; } @@ -6643,7 +6521,6 @@ L_08ADA848: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(13))); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(13))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08ADA8E4; } @@ -6654,7 +6531,6 @@ L_08ADA85C: aot_gpr_5 = (0u | 0u); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADA8D4; } @@ -6669,7 +6545,6 @@ L_08ADA870: ctx.gpr[7] = (ctx.gpr[8] + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ADA8B8; } @@ -6684,7 +6559,6 @@ L_08ADA894: ctx.gpr[7] = (ctx.gpr[8] + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(1))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ADA8C0; } @@ -6692,7 +6566,6 @@ L_08ADA894: } L_08ADA8B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADA8D4; } @@ -6703,7 +6576,6 @@ L_08ADA8C0: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ADA870; } @@ -6712,7 +6584,6 @@ L_08ADA8C0: L_08ADA8D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(13))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ADA8E4; } @@ -6726,7 +6597,6 @@ L_08ADA8E4: aot_gpr_4 = (ctx.gpr[21] + static_cast(-1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADA82C; } @@ -6734,7 +6604,6 @@ L_08ADA8E4: } L_08ADA8F8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08ADAABC; } @@ -6756,7 +6625,6 @@ L_08ADA90C: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADAAB0; } @@ -6789,7 +6657,6 @@ L_08ADA958: L_08ADA97C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08ADAAA0; } @@ -6821,7 +6688,6 @@ L_08ADA9A4: L_08ADA9C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08ADA9D4; } @@ -6856,7 +6722,6 @@ L_08ADA9DC: L_08ADA9F8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(12))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08ADAA08; } @@ -6889,7 +6754,6 @@ L_08ADAA10: aot_gpr_5 = (aot_gpr_6 + aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADAA54; } @@ -6925,7 +6789,6 @@ L_08ADAA5C: goto L_08ADAA98; L_08ADAA98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADAAB0; } @@ -6943,7 +6806,6 @@ L_08ADAAA0: } L_08ADAAB0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08ADAABC; } @@ -6957,7 +6819,6 @@ L_08ADAABC: ctx.gpr[23] = (ctx.gpr[23] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADA70C; } @@ -6965,7 +6826,6 @@ L_08ADAABC: } L_08ADAAD0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08ADAB20; } @@ -6987,7 +6847,6 @@ L_08ADAAD8: aot_mem.aot_direct_store8(ctx.gpr[20] + static_cast(43), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADAB34; } @@ -6995,7 +6854,6 @@ L_08ADAAD8: } L_08ADAB18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADAC50; } @@ -7036,7 +6894,6 @@ L_08ADAB54: } L_08ADAB5C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADAB80; } @@ -7135,9 +6992,7 @@ L_08ADAC2C: L_08ADAC50: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ADAC6C; } @@ -7155,7 +7010,6 @@ L_08ADAC6C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADACD8; } @@ -7202,7 +7056,6 @@ L_08ADACC8: } L_08ADACD8: aot_gpr_31 = (0x08ADACE0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADACE0u) goto L_08ADACE0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADACE0: @@ -7226,9 +7079,7 @@ L_08ADAD00: aot_gpr_6 = (aot_gpr_29 + aot_gpr_6); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ADAD34; } @@ -7246,7 +7097,6 @@ L_08ADAD34: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ADAD00; } @@ -7314,7 +7164,17 @@ L_08ADADA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADADD8: aot_gpr_5 = (0u | 255u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(2), static_cast(aot_gpr_5)); @@ -7328,7 +7188,17 @@ L_08ADADD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADADFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7384,7 +7254,6 @@ L_08ADAEAC: } L_08ADAEB8: aot_gpr_31 = (0x08ADAEC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADAEC0u) goto L_08ADAEC0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADAEC0: @@ -7424,7 +7293,6 @@ L_08ADAF14: } L_08ADAF20: aot_gpr_31 = (0x08ADAF28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADAF28u) goto L_08ADAF28; AOT_REGCACHE_SYNC_OUT(); return; L_08ADAF28: @@ -7548,7 +7416,17 @@ L_08ADB04C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADB068: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7575,7 +7453,6 @@ L_08ADB094: L_08ADB0A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB0BC; } @@ -7583,7 +7460,6 @@ L_08ADB0A8: } L_08ADB0B4: aot_gpr_31 = (0x08ADB0BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB0BCu) goto L_08ADB0BC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB0BC: @@ -7638,7 +7514,6 @@ L_08ADB0FC: goto L_08ADB104; L_08ADB104: aot_gpr_31 = (0x08ADB10Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB10Cu) goto L_08ADB10C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB10C: @@ -7672,7 +7547,6 @@ L_08ADB120: } L_08ADB130: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB148; } @@ -7680,7 +7554,6 @@ L_08ADB130: } L_08ADB138: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB148; } @@ -7688,12 +7561,10 @@ L_08ADB138: } L_08ADB140: aot_gpr_31 = (0x08ADB148u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB148u) goto L_08ADB148; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB148: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADB1B8; } @@ -7701,7 +7572,6 @@ L_08ADB148: } L_08ADB150: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADB1B8; } @@ -7710,7 +7580,6 @@ L_08ADB150: L_08ADB158: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(184))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB19C; } @@ -7737,7 +7606,6 @@ L_08ADB178: goto L_08ADB19C; L_08ADB19C: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADB1B8; } @@ -7746,7 +7614,6 @@ L_08ADB19C: L_08ADB1A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB1B8; } @@ -7754,12 +7621,10 @@ L_08ADB1A4: } L_08ADB1B0: aot_gpr_31 = (0x08ADB1B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB1B8u) goto L_08ADB1B8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB1B8: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ADB228; } @@ -7767,7 +7632,6 @@ L_08ADB1B8: } L_08ADB1C0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ADB228; } @@ -7776,7 +7640,6 @@ L_08ADB1C0: L_08ADB1C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(168))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB20C; } @@ -7803,7 +7666,6 @@ L_08ADB1E8: goto L_08ADB20C; L_08ADB20C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ADB228; } @@ -7812,7 +7674,6 @@ L_08ADB20C: L_08ADB214: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB228; } @@ -7820,12 +7681,10 @@ L_08ADB214: } L_08ADB220: aot_gpr_31 = (0x08ADB228u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB228u) goto L_08ADB228; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB228: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADB2A0; } @@ -7833,7 +7692,6 @@ L_08ADB228: } L_08ADB230: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADB2A0; } @@ -7841,7 +7699,6 @@ L_08ADB230: } L_08ADB238: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADB2A0; } @@ -7850,7 +7707,6 @@ L_08ADB238: L_08ADB240: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB284; } @@ -7877,7 +7733,6 @@ L_08ADB260: goto L_08ADB284; L_08ADB284: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADB2A0; } @@ -7886,7 +7741,6 @@ L_08ADB284: L_08ADB28C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB2A0; } @@ -7894,7 +7748,6 @@ L_08ADB28C: } L_08ADB298: aot_gpr_31 = (0x08ADB2A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB2A0u) goto L_08ADB2A0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB2A0: @@ -7916,7 +7769,6 @@ L_08ADB2A8: L_08ADB2B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(108))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB2F4; } @@ -7958,7 +7810,6 @@ L_08ADB2FC: goto L_08ADB308; L_08ADB308: aot_gpr_31 = (0x08ADB310u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB310u) goto L_08ADB310; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB310: @@ -7966,7 +7817,6 @@ L_08ADB310: goto L_08ADB314; L_08ADB314: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB324; } @@ -7993,7 +7843,17 @@ L_08ADB324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADB348: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8028,7 +7888,6 @@ L_08ADB384: goto L_08ADB388; L_08ADB388: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB474; } @@ -8043,7 +7902,6 @@ L_08ADB390: goto L_08ADB39C; L_08ADB39C: aot_gpr_31 = (0x08ADB3A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB3A4u) goto L_08ADB3A4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB3A4: @@ -8075,7 +7933,6 @@ L_08ADB3C8: goto L_08ADB3D0; L_08ADB3D0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADB474; } @@ -8084,7 +7941,6 @@ L_08ADB3D0: L_08ADB3D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB474; } @@ -8097,7 +7953,6 @@ L_08ADB3E4: aot_gpr_4 = (aot_gpr_4 ^ 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB474; } @@ -8106,7 +7961,6 @@ L_08ADB3E4: L_08ADB400: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB474; } @@ -8118,7 +7972,6 @@ L_08ADB40C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB474; } @@ -8140,9 +7993,7 @@ L_08ADB424: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ADB47C; } @@ -8150,7 +8001,6 @@ L_08ADB424: } L_08ADB46C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB480; } @@ -8158,7 +8008,6 @@ L_08ADB46C: } L_08ADB474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB4B4; } @@ -8191,7 +8040,17 @@ L_08ADB4B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADB4C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8226,7 +8085,6 @@ L_08ADB508: goto L_08ADB50C; L_08ADB50C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB60C; } @@ -8241,7 +8099,6 @@ L_08ADB514: goto L_08ADB520; L_08ADB520: aot_gpr_31 = (0x08ADB528u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB528u) goto L_08ADB528; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB528: @@ -8273,7 +8130,6 @@ L_08ADB54C: goto L_08ADB554; L_08ADB554: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADB60C; } @@ -8282,7 +8138,6 @@ L_08ADB554: L_08ADB55C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB60C; } @@ -8295,7 +8150,6 @@ L_08ADB568: aot_gpr_4 = (aot_gpr_4 ^ 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB60C; } @@ -8304,7 +8158,6 @@ L_08ADB568: L_08ADB584: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB60C; } @@ -8324,7 +8177,6 @@ L_08ADB590: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ADB604; } @@ -8343,7 +8195,6 @@ L_08ADB5C8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(236), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB614; } @@ -8351,7 +8202,6 @@ L_08ADB5C8: } L_08ADB5FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB61C; } @@ -8359,7 +8209,6 @@ L_08ADB5FC: } L_08ADB604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB91C; } @@ -8367,7 +8216,6 @@ L_08ADB604: } L_08ADB60C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB91C; } @@ -8375,7 +8223,6 @@ L_08ADB60C: } L_08ADB614: aot_gpr_31 = (0x08ADB61Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB61Cu) goto L_08ADB61C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB61C: @@ -8410,7 +8257,6 @@ L_08ADB650: L_08ADB660: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[2]); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADB68C; } @@ -8437,7 +8283,6 @@ L_08ADB68C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADB650; } @@ -8483,7 +8328,6 @@ L_08ADB6E8: goto L_08ADB6EC; L_08ADB6EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB778; } @@ -8498,7 +8342,6 @@ L_08ADB6F4: goto L_08ADB700; L_08ADB700: aot_gpr_31 = (0x08ADB708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB708u) goto L_08ADB708; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB708: @@ -8530,7 +8373,6 @@ L_08ADB72C: goto L_08ADB734; L_08ADB734: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADB778; } @@ -8539,7 +8381,6 @@ L_08ADB734: L_08ADB73C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(233))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB778; } @@ -8557,7 +8398,6 @@ L_08ADB750: AOT_REGCACHE_SYNC_OUT(); return; L_08ADB758: aot_gpr_31 = (0x08ADB760u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0092_entry, 92u, 308u, 0x089754A4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB760u) goto L_08ADB760; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB760: @@ -8572,7 +8412,6 @@ L_08ADB760: } L_08ADB770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB788; } @@ -8580,7 +8419,6 @@ L_08ADB770: } L_08ADB778: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB91C; } @@ -8621,7 +8459,6 @@ L_08ADB7B4: goto L_08ADB7B8; L_08ADB7B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB808; } @@ -8636,7 +8473,6 @@ L_08ADB7C0: goto L_08ADB7CC; L_08ADB7CC: aot_gpr_31 = (0x08ADB7D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB7D4u) goto L_08ADB7D4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB7D4: @@ -8668,7 +8504,6 @@ L_08ADB7F8: goto L_08ADB800; L_08ADB800: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB810; } @@ -8676,7 +8511,6 @@ L_08ADB800: } L_08ADB808: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB91C; } @@ -8695,7 +8529,6 @@ L_08ADB818: goto L_08ADB824; L_08ADB824: aot_gpr_31 = (0x08ADB82Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB82Cu) goto L_08ADB82C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB82C: @@ -8712,7 +8545,6 @@ L_08ADB830: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB890; } @@ -8727,7 +8559,6 @@ L_08ADB85C: goto L_08ADB868; L_08ADB868: aot_gpr_31 = (0x08ADB870u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB870u) goto L_08ADB870; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB870: @@ -8761,7 +8592,6 @@ L_08ADB890: AOT_REGCACHE_SYNC_OUT(); return; L_08ADB8A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADB8B0; } @@ -8776,7 +8606,6 @@ L_08ADB8B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(33))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADB914; } @@ -8788,7 +8617,6 @@ L_08ADB8C0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB914; } @@ -8836,7 +8664,17 @@ L_08ADB91C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADB934: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8854,7 +8692,6 @@ L_08ADB94C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(140), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB970; } @@ -8870,7 +8707,6 @@ L_08ADB960: } L_08ADB968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADB9CC; } @@ -8878,7 +8714,6 @@ L_08ADB968: } L_08ADB970: aot_gpr_31 = (0x08ADB978u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB978u) goto L_08ADB978; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB978: @@ -8918,7 +8753,6 @@ L_08ADB9B8: goto L_08ADB9BC; L_08ADB9BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADB9CC; } @@ -8937,7 +8771,17 @@ L_08ADB9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADB9DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8945,22 +8789,18 @@ L_08ADB9DC: aot_gpr_16 = (aot_gpr_4 | 0u); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(141), static_cast(0u)); aot_gpr_31 = (0x08ADB9F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0182_entry, 182u, 984u, 0x08ADFDB4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADB9F8u) goto L_08ADB9F8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADB9F8: aot_gpr_31 = (0x08ADBA00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 600u, 0x08AD3634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBA00u) goto L_08ADBA00; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBA00: aot_gpr_31 = (0x08ADBA08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 575u, 0x08AD34BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBA08u) goto L_08ADBA08; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBA08: aot_gpr_31 = (0x08ADBA10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 604u, 0x08AD3670u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBA10u) goto L_08ADBA10; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBA10: @@ -8988,7 +8828,17 @@ L_08ADBA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADBA40: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -9052,7 +8902,6 @@ L_08ADBAE0: } L_08ADBAEC: aot_gpr_31 = (0x08ADBAF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBAF4u) goto L_08ADBAF4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBAF4: @@ -9106,7 +8955,6 @@ L_08ADBB58: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADBC8C; } @@ -9123,7 +8971,6 @@ L_08ADBB68: } L_08ADBB74: aot_gpr_31 = (0x08ADBB7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBB7Cu) goto L_08ADBB7C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBB7C: @@ -9169,7 +9016,6 @@ L_08ADBBC0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADBBD8; } @@ -9187,7 +9033,6 @@ L_08ADBBD8: goto L_08ADBBE0; L_08ADBBE0: aot_gpr_31 = (0x08ADBBE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBBE8u) goto L_08ADBBE8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBBE8: @@ -9196,7 +9041,6 @@ L_08ADBBE8: goto L_08ADBBF0; L_08ADBBF0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADBC4C; } @@ -9226,7 +9070,6 @@ L_08ADBBF8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADBC44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADBC8C; } @@ -9271,7 +9114,6 @@ L_08ADBC9C: goto L_08ADBCB0; L_08ADBCB0: aot_gpr_31 = (0x08ADBCB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBCB8u) goto L_08ADBCB8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBCB8: @@ -9280,7 +9122,6 @@ L_08ADBCB8: goto L_08ADBCC0; L_08ADBCC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADBD74; } @@ -9295,7 +9136,6 @@ L_08ADBCC8: L_08ADBCD4: aot_gpr_16 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08ADBCEC; } @@ -9303,7 +9143,6 @@ L_08ADBCD4: } L_08ADBCE0: aot_gpr_31 = (0x08ADBCE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBCE8u) goto L_08ADBCE8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBCE8: @@ -9326,7 +9165,6 @@ L_08ADBCF4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADBD6C; } @@ -9335,7 +9173,6 @@ L_08ADBCF4: L_08ADBD24: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADBD40; } @@ -9349,7 +9186,6 @@ L_08ADBD30: goto L_08ADBD40; L_08ADBD40: aot_gpr_31 = (0x08ADBD48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBD48u) goto L_08ADBD48; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBD48: @@ -9361,7 +9197,6 @@ L_08ADBD48: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ADBD24; } @@ -9378,7 +9213,6 @@ L_08ADBD6C: L_08ADBD74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADBD8C; } @@ -9386,7 +9220,6 @@ L_08ADBD74: } L_08ADBD80: aot_gpr_31 = (0x08ADBD88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBD88u) goto L_08ADBD88; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBD88: @@ -9394,7 +9227,6 @@ L_08ADBD88: goto L_08ADBD8C; L_08ADBD8C: aot_gpr_31 = (0x08ADBD94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 598u, 0x08A53344u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBD94u) goto L_08ADBD94; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBD94: @@ -9440,7 +9272,17 @@ L_08ADBDCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADBDFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -9457,7 +9299,6 @@ L_08ADBDFC: } L_08ADBE28: aot_gpr_31 = (0x08ADBE30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBE30u) goto L_08ADBE30; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBE30: @@ -9522,7 +9363,6 @@ L_08ADBEBC: goto L_08ADBEC4; L_08ADBEC4: aot_gpr_31 = (0x08ADBECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBECCu) goto L_08ADBECC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBECC: @@ -9539,7 +9379,6 @@ L_08ADBED4: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_5 = (ctx.gpr[18] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADBF74; } @@ -9547,7 +9386,6 @@ L_08ADBED4: } L_08ADBEFC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADBF10; } @@ -9555,7 +9393,6 @@ L_08ADBEFC: } L_08ADBF04: aot_gpr_31 = (0x08ADBF0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBF0Cu) goto L_08ADBF0C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBF0C: @@ -9570,7 +9407,6 @@ L_08ADBF18: ctx.gpr[19] = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADBF34; } @@ -9578,7 +9414,6 @@ L_08ADBF18: } L_08ADBF28: aot_gpr_31 = (0x08ADBF30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADBF30u) goto L_08ADBF30; AOT_REGCACHE_SYNC_OUT(); return; L_08ADBF30: @@ -9591,7 +9426,6 @@ L_08ADBF34: AOT_REGCACHE_SYNC_OUT(); return; L_08ADBF3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADBF68; } @@ -9634,7 +9468,6 @@ L_08ADBF74: goto L_08ADBF78; L_08ADBF78: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADBFB0; } @@ -9648,9 +9481,7 @@ L_08ADBF80: aot_gpr_4 = (16672u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08ADBFB0; } @@ -9674,7 +9505,17 @@ L_08ADBFB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADBFCC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_5); diff --git a/profiles/vcs/generated/generated_unit_0182.cpp b/profiles/vcs/generated/generated_unit_0182.cpp index 655b276..c9e430a 100644 --- a/profiles/vcs/generated/generated_unit_0182.cpp +++ b/profiles/vcs/generated/generated_unit_0182.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0182[4092] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, - 13, 0, 0, 14, 0, 15, 0, 0, 16, 0, 0, 0, 17, 0, 0, 18, 0, 19, 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 22, 0, 0, 23, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 27, 0, 0, 28, 0, 29, 30, 0, 0, 0, 31, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 38, 39, 0, 40, 0, 41, 0, 0, 42, 0, 0, - 43, 0, 0, 44, 0, 45, 0, 46, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 55, 0, 0, 0, 56, 0, 57, 0, 0, 0, 58, 0, 0, 0, 59, 0, 60, 0, 0, 61, 0, 0, 62, 0, 0, 63, 0, 64, 0, 65, 66, - 0, 67, 0, 68, 0, 0, 0, 69, 0, 0, 0, 70, 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, - 74, 0, 0, 75, 0, 0, 76, 0, 77, 0, 78, 0, 79, 0, 0, 0, 0, 80, 0, 81, 0, 82, 0, 83, 0, 0, 84, 0, 0, 85, 0, 86, - 0, 87, 0, 88, 0, 0, 0, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 93, - 0, 0, 0, 0, 0, 94, 0, 0, 95, 96, 0, 97, 0, 98, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 103, 0, 0, 0, 0, 0, 104, 0, 0, 105, 106, 0, 107, 0, 108, 0, 109, 110, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112, 0, 113, 0, 0, 0, 0, 114, 0, 115, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 120, 0, - 121, 0, 122, 0, 0, 0, 123, 0, 124, 0, 0, 0, 125, 0, 0, 126, 0, 127, 0, 0, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, - 134, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 136, 0, 137, 0, 138, 0, 0, 139, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, - 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 0, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 0, 159, 0, 0, 160, 161, 0, 162, 0, 163, 0, 0, 164, 0, 165, 166, 0, 0, - 0, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 170, 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 0, - 182, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 185, 0, 0, 0, 0, 186, - 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 0, 192, 0, 0, 0, 0, - 0, 0, 0, 193, 0, 194, 195, 0, 196, 0, 197, 0, 0, 198, 0, 199, 200, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, - 204, 0, 0, 0, 205, 206, 0, 207, 0, 208, 0, 0, 0, 0, 0, 209, 210, 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 214, 0, 0, 0, - 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 218, 0, 219, 0, 220, 0, 0, 221, 0, 222, 223, 0, 224, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 0, 227, 0, 0, 228, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 0, 232, 233, 0, 0, 234, 235, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 0, 239, 240, 0, 241, 0, 242, 0, 0, 243, 0, 244, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 247, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, 253, 0, 0, 254, 0, 0, 255, - 0, 0, 0, 256, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 263, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 272, 0, 273, 0, 274, 0, 275, 0, 0, 0, 0, 276, 0, 277, - 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 282, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, 286, 0, 287, 288, 0, 289, 0, 0, 0, - 0, 0, 0, 0, 290, 0, 291, 0, 292, 0, 0, 0, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 297, - 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 303, 304, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 308, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 311, 0, 312, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 315, 316, - 0, 0, 317, 318, 319, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, 0, 322, 0, 0, 0, 323, 0, 0, 0, 324, 325, 0, 326, - 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 0, 332, 0, 0, 0, 333, 0, 334, 335, 0, 336, 0, 0, 0, 337, 0, 338, 339, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 341, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 345, 0, 346, 0, 0, 0, 347, 0, 348, 0, 0, 0, 0, 349, - 0, 350, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, 356, 0, 0, 357, 0, - 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 362, 0, 0, 0, - 0, 0, 0, 363, 364, 0, 0, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 369, 0, 370, - 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 375, 0, 0, - 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 0, 0, 0, 0, 383, 0, 384, 0, 385, 0, 386, 0, 387, 0, 388, 0, 0, - 0, 389, 0, 390, 391, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, - 397, 0, 0, 398, 399, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 404, 405, 0, 406, 0, 0, 0, 0, 407, 0, 0, 0, 0, - 0, 0, 408, 0, 409, 410, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 414, 0, 0, 0, 0, 0, 415, 416, 417, 0, 418, 0, 0, 0, 419, 0, 420, 0, 421, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 424, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, - 430, 0, 431, 0, 0, 0, 0, 0, 432, 0, 433, 0, 0, 0, 434, 0, 435, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 437, 438, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 441, 0, 442, 443, 0, 0, 0, - 0, 0, 444, 445, 0, 0, 446, 0, 447, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 451, 452, 0, 453, 0, 0, 454, - 0, 455, 0, 0, 456, 0, 457, 0, 458, 0, 0, 0, 0, 459, 0, 0, 460, 0, 461, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 0, 0, 465, 466, 467, 0, 0, 0, 468, 0, 469, 0, 0, 0, 0, 470, 0, 471, 0, - 0, 0, 472, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, 0, 0, 477, 0, 478, 479, 0, 0, 0, - 480, 0, 0, 481, 0, 482, 483, 0, 0, 484, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 487, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 490, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 0, 495, 0, 496, 0, 497, 0, - 0, 0, 498, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 504, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, - 0, 509, 0, 510, 0, 0, 511, 0, 512, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 0, - 0, 0, 0, 0, 518, 0, 0, 0, 519, 0, 520, 0, 0, 521, 0, 0, 0, 522, 0, 0, 523, 0, 524, 0, 525, 0, 526, 0, 0, 527, 0, 0, - 528, 0, 529, 0, 530, 0, 0, 531, 0, 0, 0, 532, 0, 533, 534, 0, 535, 0, 0, 536, 0, 0, 0, 537, 0, 538, 539, 0, 540, 0, 0, 541, - 0, 0, 0, 542, 0, 543, 544, 0, 545, 0, 0, 546, 0, 0, 0, 547, 0, 548, 549, 0, 550, 0, 0, 551, 0, 0, 552, 0, 553, 0, 554, 0, - 0, 555, 0, 556, 557, 0, 0, 0, 558, 0, 0, 0, 559, 0, 560, 0, 561, 0, 0, 562, 0, 563, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 568, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, - 0, 571, 0, 572, 573, 0, 574, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, 0, 0, 0, 0, 577, 0, 0, 578, 0, 579, 580, 0, 581, 0, 582, - 0, 583, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 587, 0, 588, 589, 0, 590, 0, 0, 591, 0, 0, - 0, 592, 0, 0, 0, 0, 593, 0, 0, 594, 0, 595, 596, 0, 0, 0, 597, 0, 0, 0, 598, 0, 599, 600, 0, 0, 0, 0, 0, 601, 0, 0, - 602, 0, 603, 604, 0, 0, 605, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 608, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 0, - 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 612, 613, 0, 0, 614, 0, 615, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 617, 0, 0, 618, 0, 619, 620, 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 630, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, - 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, - 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 0, 0, 646, 0, 0, - 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 649, - 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 654, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 658, 0, 0, 0, 659, 660, 0, 661, 0, 0, 0, 0, 0, 0, 0, - 662, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 667, - 0, 668, 0, 0, 0, 669, 0, 0, 0, 670, 671, 0, 672, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 676, 677, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, - 0, 680, 0, 0, 0, 681, 0, 0, 0, 682, 683, 0, 684, 685, 0, 0, 0, 0, 686, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 689, 690, 0, - 691, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 696, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 699, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, - 702, 0, 0, 0, 0, 0, 703, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 705, 0, 0, 706, 0, 707, 708, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 712, 713, 0, 714, 0, 715, 0, 0, 716, 0, 717, 0, - 718, 0, 0, 719, 0, 0, 0, 0, 0, 0, 720, 0, 0, 721, 0, 0, 0, 722, 0, 0, 0, 723, 724, 0, 725, 0, 726, 0, 0, 0, 0, 0, - 727, 728, 729, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 732, 733, 0, 0, 0, 0, 734, 0, 0, 0, 735, 0, 0, 0, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 739, 0, 740, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 743, 0, - 0, 0, 744, 745, 0, 746, 747, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 750, 0, 0, 0, 751, 752, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 755, 0, 756, 0, 757, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 0, 760, 0, 0, 0, 0, 761, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, - 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 767, 0, 0, 0, - 768, 0, 769, 0, 770, 771, 0, 772, 0, 773, 0, 774, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, - 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 779, 0, 0, 780, 0, 0, 0, 781, 0, 782, 0, 783, 0, - 0, 0, 0, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 0, 0, 0, 789, 0, 0, 0, 790, 791, 0, 792, 0, 793, 0, 0, 0, 0, 0, 794, - 795, 796, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 801, 0, 802, 803, 0, 804, 0, 0, 0, 0, 0, - 805, 0, 806, 0, 0, 0, 807, 0, 0, 0, 808, 809, 0, 810, 811, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 815, 0, 0, 816, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 818, 0, 819, 0, 820, - 0, 0, 0, 821, 0, 0, 822, 0, 823, 0, 0, 824, 0, 0, 825, 0, 826, 0, 827, 0, 0, 0, 828, 0, 829, 830, 0, 0, 0, 831, 0, 0, - 0, 0, 0, 832, 0, 833, 0, 0, 0, 834, 0, 0, 0, 835, 836, 0, 837, 0, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, - 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 843, 0, 0, 0, 844, 0, 0, 0, - 845, 846, 0, 847, 848, 0, 0, 0, 0, 0, 0, 849, 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, - 0, 0, 0, 852, 0, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 0, 855, 0, 0, 856, 0, 857, 858, 0, 859, - 0, 0, 0, 0, 0, 860, 0, 861, 0, 0, 0, 862, 0, 0, 0, 863, 864, 0, 865, 866, 0, 0, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, - 0, 0, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, 870, 871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 872, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 873, 0, 874, 0, 0, 0, 875, 0, 0, 0, 876, - 877, 0, 878, 0, 879, 0, 0, 0, 0, 0, 880, 881, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 884, 0, 0, 885, 0, 0, - 0, 0, 0, 0, 0, 0, 886, 0, 0, 887, 0, 0, 0, 888, 0, 889, 0, 890, 0, 891, 0, 892, 0, 893, 0, 894, 0, 0, 895, 0, 0, 896, - 0, 0, 897, 0, 0, 898, 0, 0, 0, 899, 0, 900, 0, 901, 0, 902, 0, 903, 0, 904, 0, 0, 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 906, 0, 907, 0, 908, 0, 909, 0, 0, 910, 0, 911, 0, 912, 913, 0, 914, 0, 0, 0, 915, 0, 916, 917, 0, 918, 0, 0, 0, 919, - 0, 920, 921, 0, 922, 0, 0, 0, 923, 0, 924, 0, 925, 926, 0, 927, 0, 928, 0, 0, 929, 0, 930, 931, 0, 932, 0, 0, 0, 933, 0, 934, - 0, 935, 0, 936, 0, 937, 0, 938, 0, 939, 0, 940, 0, 0, 0, 941, 0, 0, 0, 0, 0, 942, 0, 0, 943, 0, 944, 0, 945, 0, 946, 0, - 947, 0, 948, 0, 949, 0, 950, 0, 0, 951, 0, 952, 0, 953, 0, 0, 954, 0, 955, 0, 956, 0, 0, 0, 957, 0, 958, 0, 0, 0, 959, 0, - 960, 0, 961, 0, 962, 0, 963, 0, 964, 0, 0, 0, 965, 0, 966, 0, 0, 0, 967, 0, 0, 0, 968, 0, 0, 0, 969, 0, 970, 0, 0, 0, - 0, 971, 0, 972, 0, 0, 0, 0, 973, 0, 974, 0, 0, 0, 975, 0, 976, 0, 0, 0, 0, 0, 977, 978, 0, 0, 979, 0, 0, 0, 980, 0, - 0, 0, 981, 0, 982, 0, 983, 0, 0, 0, 0, 0, 0, 984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 985, 0, 986, 0, 987, 0, 988, 0, 989, - 0, 990, 0, 991, 0, 992, 0, 993, 0, 0, 0, 0, 994, 0, 995, 0, 996, 0, 997, 0, 998, 0, 999, 0, 0, 1000, 0, 1001, 0, 0, 1002, 0, - 1003, 0, 1004, 0, 0, 1005, 0, 1006, 0, 1007, 0, 0, 1008, 0, 1009, 0, 1010, 0, 0, 1011, 0, 0, 0, 1012, 0, 0, 1013, 0, 0, 1014, 0, 1015, - 0, 1016, 0, 1017, 0, 1018, 0, 0, 1019, 0, 0, 1020, 0, 1021, 0, 1022, 0, 0, 0, 1023, 0, 1024, 0, 1025, 0, 1026, 0, 0, 1027, 0, 1028, 0, - 1029, 0, 1030, 0, 1031, 0, 0, 1032, 0, 1033, 0, 0, 0, 0, 0, 0, 0, 0, 1034, 0, 0, 0, 0, 0, 1035, 0, 0, 1036, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0182[64] = { + 0x1224422808000809ull, 0x11A4280894129129ull, 0x108955A925692502ull, 0x4002188AD49288A2ull, + 0x8802050AA4AA1549ull, 0x010D590441026B20ull, 0xAAA2914554015428ull, 0x1040AAAAAAACAA01ull, + 0x2029520834AC8220ull, 0x8440002110888830ull, 0x1205A56809102440ull, 0x0B4AD0021A0382B1ull, + 0x0002073402925000ull, 0x928140910000B4ADull, 0x0001210034028908ull, 0x40800502A1554428ull, + 0x8215015016A21000ull, 0x0250080600050502ull, 0xB114041CD00A9400ull, 0x008D168840904040ull, + 0x48A0A00685144122ull, 0xA044211810408801ull, 0x2AA82AAA28000540ull, 0x085A05592480811Aull, + 0x00AA8B82002020B4ull, 0x3009450505040488ull, 0x9690034C1A200080ull, 0x50A38420000D2152ull, + 0x909122691A444014ull, 0xA840005454900401ull, 0x040D000000000000ull, 0x255225102045054Aull, + 0x5496896896896895ull, 0x4006880008A9511Aull, 0x25A4008AAD20505Aull, 0x0114024D20D11A42ull, + 0x0420A1690034D002ull, 0x0900020800002000ull, 0x2200400214009000ull, 0x2050204004010001ull, + 0xA000000000000020ull, 0x0162280900228080ull, 0x1010162284880101ull, 0x6224362240021880ull, + 0x8010901000C05003ull, 0x52B4020100D20441ull, 0x0443480705622409ull, 0x0010106C45051201ull, + 0x4028490015400831ull, 0x10002AB510801001ull, 0x82B11550544A0010ull, 0x05A4000010200083ull, + 0xA810910020206C45ull, 0x0101622823454948ull, 0x8008081B11411001ull, 0x040D88A0B4840048ull, + 0x88A0000010062004ull, 0x92AAA24025001C15ull, 0x8B45A954004AAA24ull, 0x55208AAAA2D2B516ull, + 0x1444515545152A55ull, 0xAA80205444C1450Aull, 0xA48952A54A5550AAull, 0x0904029552A8A92Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0182[64] = { + 1u, 13u, 32u, 55u, 74u, 94u, 112u, 134u, 157u, 175u, 187u, 204u, 225u, 238u, 256u, 267u, + 283u, 298u, 309u, 327u, 341u, 358u, 371u, 389u, 408u, 424u, 439u, 455u, 472u, 491u, 505u, 509u, + 528u, 555u, 571u, 592u, 610u, 626u, 631u, 639u, 647u, 650u, 662u, 675u, 691u, 702u, 718u, 736u, + 750u, 764u, 777u, 795u, 805u, 821u, 839u, 852u, 868u, 877u, 897u, 920u, 947u, 971u, 990u, 1016u, }; void recomp_unit_0182_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0182_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08ADC000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0182[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0182[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0182[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08ADC000; @@ -1246,7 +1153,17 @@ L_08ADC02C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC06C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1262,7 +1179,6 @@ L_08ADC06C: } L_08ADC08C: aot_gpr_31 = (0x08ADC094u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC094u) goto L_08ADC094; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC094: @@ -1284,7 +1200,17 @@ L_08ADC0A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC0B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1299,7 +1225,17 @@ L_08ADC0C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC0D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1314,12 +1250,21 @@ L_08ADC0E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC0F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_08ADC10C; } @@ -1345,12 +1290,21 @@ L_08ADC114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC120: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) >= 0; - // nop if (branch_taken) { goto L_08ADC13C; } @@ -1376,7 +1330,17 @@ L_08ADC144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC150: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1391,7 +1355,6 @@ L_08ADC150: } L_08ADC168: aot_gpr_31 = (0x08ADC170u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC170u) goto L_08ADC170; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC170: @@ -1408,7 +1371,17 @@ L_08ADC17C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC18C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1424,7 +1397,6 @@ L_08ADC18C: } L_08ADC1AC: aot_gpr_31 = (0x08ADC1B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC1B4u) goto L_08ADC1B4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC1B4: @@ -1471,7 +1443,17 @@ L_08ADC1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC204: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1486,7 +1468,6 @@ L_08ADC204: } L_08ADC220: aot_gpr_31 = (0x08ADC228u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC228u) goto L_08ADC228; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC228: @@ -1498,7 +1479,6 @@ L_08ADC228: L_08ADC234: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08ADC268; } @@ -1513,7 +1493,6 @@ L_08ADC240: goto L_08ADC24C; L_08ADC24C: aot_gpr_31 = (0x08ADC254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC254u) goto L_08ADC254; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC254: @@ -1526,7 +1505,6 @@ L_08ADC258: AOT_REGCACHE_SYNC_OUT(); return; L_08ADC260: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADC2B8; } @@ -1576,7 +1554,6 @@ L_08ADC2A8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADC2B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADC3B0; } @@ -1605,7 +1582,6 @@ L_08ADC2DC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADC344; } @@ -1730,7 +1706,17 @@ L_08ADC3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC3C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1749,7 +1735,6 @@ L_08ADC3C4: } L_08ADC3F8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08ADC428; } @@ -1796,7 +1781,6 @@ L_08ADC444: AOT_REGCACHE_SYNC_OUT(); return; L_08ADC44C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADC4A8; } @@ -1804,7 +1788,6 @@ L_08ADC44C: } L_08ADC454: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08ADC484; } @@ -1863,7 +1846,17 @@ L_08ADC4A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC4C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1877,7 +1870,6 @@ L_08ADC4EC: ctx.gpr[18] = (ctx.gpr[2] | 0u); ctx.gpr[17] = (0u | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADC524; } @@ -1897,7 +1889,6 @@ L_08ADC4FC: L_08ADC514: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ADC524; } @@ -1908,7 +1899,6 @@ L_08ADC520: goto L_08ADC524; L_08ADC524: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08ADC538; } @@ -1941,7 +1931,17 @@ L_08ADC544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC560: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1953,7 +1953,6 @@ L_08ADC578: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_16 = (0u | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08ADC5B0; } @@ -1973,7 +1972,6 @@ L_08ADC588: L_08ADC5A0: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ADC5B0; } @@ -1984,7 +1982,6 @@ L_08ADC5AC: goto L_08ADC5B0; L_08ADC5B0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08ADC5C8; } @@ -1997,7 +1994,6 @@ L_08ADC5B8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADC5C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADC5CC; } @@ -2018,7 +2014,17 @@ L_08ADC5CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC5E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -2054,7 +2060,6 @@ L_08ADC628: goto L_08ADC630; L_08ADC630: aot_gpr_31 = (0x08ADC638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC638u) goto L_08ADC638; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC638: @@ -2071,7 +2076,6 @@ L_08ADC640: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADC6E4; } @@ -2087,7 +2091,6 @@ L_08ADC668: } L_08ADC670: aot_gpr_31 = (0x08ADC678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADC678u) goto L_08ADC678; AOT_REGCACHE_SYNC_OUT(); return; L_08ADC678: @@ -2107,7 +2110,6 @@ L_08ADC688: goto L_08ADC560; L_08ADC698: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADC6B0; } @@ -2130,7 +2132,6 @@ L_08ADC6B0: goto L_08ADC560; L_08ADC6BC: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08ADC6D4; } @@ -2156,7 +2157,6 @@ L_08ADC6D4: } L_08ADC6DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADC628; } @@ -2164,7 +2164,6 @@ L_08ADC6DC: } L_08ADC6E4: { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_08ADC6FC; } @@ -2172,7 +2171,6 @@ L_08ADC6E4: } L_08ADC6EC: { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_08ADC6FC; } @@ -2205,32 +2203,71 @@ L_08ADC700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC724: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 1u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC72C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(20), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC734: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC73C: aot_gpr_6 = (aot_gpr_5 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08ADC74C; } @@ -2245,98 +2282,238 @@ L_08ADC74C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC754: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC75C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(28), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC764: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC76C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(32), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC774: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC77C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(40), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC784: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC78C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(44), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC794: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(44))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC79C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(57), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC7A4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(57))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC7AC: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(58), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC7B4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(58))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC7BC: aot_gpr_4 = (aot_gpr_5 & 65535u); aot_gpr_4 = (aot_gpr_4 & 15u); @@ -2348,7 +2525,17 @@ L_08ADC7BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC7D8: aot_gpr_4 = (aot_gpr_5 & 65535u); ctx.gpr[2] = (aot_gpr_4 << 2u); @@ -2359,7 +2546,17 @@ L_08ADC7D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC7F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2373,7 +2570,6 @@ L_08ADC814: ctx.gpr[18] = (ctx.gpr[2] | 0u); ctx.gpr[17] = (0u | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADC84C; } @@ -2393,7 +2589,6 @@ L_08ADC824: L_08ADC83C: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08ADC84C; } @@ -2404,7 +2599,6 @@ L_08ADC848: goto L_08ADC84C; L_08ADC84C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08ADC870; } @@ -2422,7 +2616,6 @@ L_08ADC85C: goto L_08ADC7BC; L_08ADC868: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADC874; } @@ -2444,7 +2637,17 @@ L_08ADC874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC88C: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -2460,7 +2663,6 @@ L_08ADC88C: L_08ADC8A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08ADC8B8; } @@ -2468,7 +2670,6 @@ L_08ADC8A4: } L_08ADC8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADC8CC; } @@ -2489,11 +2690,20 @@ L_08ADC8C0: goto L_08ADC8CC; L_08ADC8CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC8D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2514,7 +2724,6 @@ L_08ADC8F4: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADC914; } @@ -2529,7 +2738,6 @@ L_08ADC914: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10336))); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(18), static_cast(aot_gpr_5)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADC94C; } @@ -2539,7 +2747,6 @@ L_08ADC92C: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADC94C; } @@ -2587,7 +2794,17 @@ L_08ADC980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC994: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2625,7 +2842,17 @@ L_08ADC9E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADC9FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2653,7 +2880,17 @@ L_08ADCA28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCA34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2681,7 +2918,17 @@ L_08ADCA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCA6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2697,7 +2944,6 @@ L_08ADCA6C: } L_08ADCA8C: aot_gpr_31 = (0x08ADCA94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCA94u) goto L_08ADCA94; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCA94: @@ -2710,7 +2956,6 @@ L_08ADCA98: AOT_REGCACHE_SYNC_OUT(); return; L_08ADCAA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADCB6C; } @@ -2719,7 +2964,6 @@ L_08ADCAA0: L_08ADCAA8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADCAC0; } @@ -2727,7 +2971,6 @@ L_08ADCAA8: } L_08ADCAB4: aot_gpr_31 = (0x08ADCABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCABCu) goto L_08ADCABC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCABC: @@ -2813,7 +3056,6 @@ L_08ADCB44: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADCB6C; } @@ -2842,7 +3084,17 @@ L_08ADCB70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCB84: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2859,7 +3111,6 @@ L_08ADCB84: } L_08ADCBB0: aot_gpr_31 = (0x08ADCBB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCBB8u) goto L_08ADCBB8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCBB8: @@ -2872,7 +3123,6 @@ L_08ADCBBC: AOT_REGCACHE_SYNC_OUT(); return; L_08ADCBC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADCCA4; } @@ -2881,7 +3131,6 @@ L_08ADCBC4: L_08ADCBCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADCBE4; } @@ -2889,7 +3138,6 @@ L_08ADCBCC: } L_08ADCBD8: aot_gpr_31 = (0x08ADCBE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCBE0u) goto L_08ADCBE0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCBE0: @@ -2917,7 +3165,6 @@ L_08ADCBEC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADCCA4; } @@ -2930,7 +3177,6 @@ L_08ADCC30: L_08ADCC38: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADCC5C; } @@ -2939,7 +3185,6 @@ L_08ADCC38: L_08ADCC44: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(2)))))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08ADCC5C; } @@ -2986,7 +3231,6 @@ L_08ADCC90: L_08ADCC94: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADCCA8; } @@ -3012,7 +3256,17 @@ L_08ADCCA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCCC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -3029,7 +3283,6 @@ L_08ADCCC4: } L_08ADCD00: aot_gpr_31 = (0x08ADCD08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCD08u) goto L_08ADCD08; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCD08: @@ -3042,7 +3295,6 @@ L_08ADCD0C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADCD14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADCE70; } @@ -3051,7 +3303,6 @@ L_08ADCD14: L_08ADCD1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADCD34; } @@ -3059,7 +3310,6 @@ L_08ADCD1C: } L_08ADCD28: aot_gpr_31 = (0x08ADCD30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCD30u) goto L_08ADCD30; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCD30: @@ -3102,7 +3352,6 @@ L_08ADCD80: L_08ADCD90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADCE3C; } @@ -3116,7 +3365,6 @@ L_08ADCD9C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); jump_target = aot_gpr_5; aot_gpr_31 = (0x08ADCDB8u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCDB8u) goto L_08ADCDB8; AOT_REGCACHE_SYNC_OUT(); return; @@ -3151,7 +3399,6 @@ L_08ADCDDC: L_08ADCDE4: ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADCE3C; } @@ -3181,7 +3428,6 @@ L_08ADCE0C: L_08ADCE20: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(206)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08ADCE3C; } @@ -3242,7 +3488,17 @@ L_08ADCE74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCEA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3257,7 +3513,17 @@ L_08ADCEB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCEC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3274,7 +3540,6 @@ L_08ADCEC0: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADCFA8; } @@ -3323,7 +3588,6 @@ L_08ADCF40: } L_08ADCF48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADCF60; } @@ -3331,12 +3595,10 @@ L_08ADCF48: } L_08ADCF50: aot_gpr_31 = (0x08ADCF58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 542u, 0x0888F890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADCF58u) goto L_08ADCF58; AOT_REGCACHE_SYNC_OUT(); return; L_08ADCF58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADCF7C; } @@ -3347,7 +3609,6 @@ L_08ADCF60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADCF84; } @@ -3355,7 +3616,6 @@ L_08ADCF60: } L_08ADCF74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADCFA0; } @@ -3363,7 +3623,6 @@ L_08ADCF74: } L_08ADCF7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADCFDC; } @@ -3383,7 +3642,6 @@ L_08ADCF84: AOT_REGCACHE_SYNC_OUT(); return; L_08ADCFA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADCFDC; } @@ -3418,7 +3676,17 @@ L_08ADCFDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADCFF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3472,7 +3740,6 @@ L_08ADD064: goto L_08ADD068; L_08ADD068: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD0A0; } @@ -3486,7 +3753,6 @@ L_08ADD070: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADD0A0; } @@ -3494,12 +3760,10 @@ L_08ADD070: } L_08ADD090: aot_gpr_31 = (0x08ADD098u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 542u, 0x0888F890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD098u) goto L_08ADD098; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD098: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADD0C8; } @@ -3513,7 +3777,6 @@ L_08ADD0A0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADD0D0; } @@ -3521,7 +3784,6 @@ L_08ADD0A0: } L_08ADD0C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADD128; } @@ -3540,7 +3802,6 @@ L_08ADD0D0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADD184; } @@ -3559,7 +3820,6 @@ L_08ADD0E4: AOT_REGCACHE_SYNC_OUT(); return; L_08ADD0FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADD184; } @@ -3579,7 +3839,6 @@ L_08ADD104: AOT_REGCACHE_SYNC_OUT(); return; L_08ADD120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADD184; } @@ -3598,7 +3857,6 @@ L_08ADD128: AOT_REGCACHE_SYNC_OUT(); return; L_08ADD140: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADD184; } @@ -3640,7 +3898,17 @@ L_08ADD188: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD1AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3656,7 +3924,6 @@ L_08ADD1AC: } L_08ADD1D0: aot_gpr_31 = (0x08ADD1D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD1D8u) goto L_08ADD1D8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD1D8: @@ -3682,7 +3949,6 @@ L_08ADD1E4: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADD28C; } @@ -3695,7 +3961,6 @@ L_08ADD228: L_08ADD230: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADD244; } @@ -3766,7 +4031,17 @@ L_08ADD290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD2A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_31); @@ -3833,7 +4108,6 @@ L_08ADD318: ctx.gpr[7] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[7]) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08ADD3CC; } @@ -3895,7 +4169,6 @@ L_08ADD3A4: goto L_08ADD3A8; L_08ADD3A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD3C8; } @@ -3913,7 +4186,6 @@ L_08ADD3B0: } L_08ADD3C0: aot_gpr_31 = (0x08ADD3C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD3C8u) goto L_08ADD3C8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD3C8: @@ -3927,7 +4199,17 @@ L_08ADD3CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD3DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3961,7 +4243,6 @@ L_08ADD420: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD450; } @@ -3979,7 +4260,6 @@ L_08ADD438: } L_08ADD448: aot_gpr_31 = (0x08ADD450u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD450u) goto L_08ADD450; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD450: @@ -3990,14 +4270,33 @@ L_08ADD450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD460: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD468: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4009,7 +4308,6 @@ L_08ADD468: goto L_08ADD47C; L_08ADD47C: aot_gpr_31 = (0x08ADD484u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD484u) goto L_08ADD484; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD484: @@ -4030,14 +4328,34 @@ L_08ADD488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD4B4: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-5472))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD4BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -4052,14 +4370,12 @@ L_08ADD4BC: } L_08ADD4D4: aot_gpr_31 = (0x08ADD4DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD4DCu) goto L_08ADD4DC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD4DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD4F8; } @@ -4068,7 +4384,6 @@ L_08ADD4DC: L_08ADD4EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(9))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADD500; } @@ -4076,7 +4391,6 @@ L_08ADD4EC: } L_08ADD4F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADD674; } @@ -4099,7 +4413,6 @@ L_08ADD52C: aot_gpr_6 = (aot_gpr_16 + aot_gpr_4); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(264))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADD590; } @@ -4110,7 +4423,6 @@ L_08ADD53C: aot_fpr_16 = aot_fpr_12 / aot_fpr_13; { const float fs = aot_fpr_16; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_16 = std::bit_cast(0x7FC00000u); else aot_fpr_16 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(256))); if (branch_taken) { @@ -4157,7 +4469,6 @@ L_08ADD5A0: aot_gpr_5 = (aot_gpr_4 - ctx.gpr[8]); aot_gpr_5 = (aot_gpr_5 < static_cast(102) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ADD5C8; } @@ -4174,7 +4485,6 @@ L_08ADD5C8: aot_gpr_5 = (aot_gpr_4 - ctx.gpr[9]); aot_gpr_5 = (aot_gpr_5 < static_cast(1001) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ADD674; } @@ -4195,7 +4505,6 @@ L_08ADD5D8: } L_08ADD5F4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADD618; } @@ -4257,60 +4566,128 @@ L_08ADD674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD684: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD68C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD694: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(64), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD69C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(68), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD6A4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(80), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD6AC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08ADD6CCu); - // nop goto L_08ADC774; L_08ADD6CC: { const bool branch_taken = static_cast(ctx.gpr[2]) <= 0; - // nop if (branch_taken) { goto L_08ADD70C; } @@ -4322,7 +4699,6 @@ L_08ADD6D4: goto L_08ADD684; L_08ADD6DC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADD70C; } @@ -4334,7 +4710,6 @@ L_08ADD6E4: goto L_08ADD68C; L_08ADD6EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADD70C; } @@ -4344,7 +4719,6 @@ L_08ADD6F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(10))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ADD70C; } @@ -4369,7 +4743,17 @@ L_08ADD710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD720: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); @@ -4377,7 +4761,6 @@ L_08ADD720: aot_gpr_6 = (aot_gpr_6 & 255u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(16), aot_gpr_5); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADD75C; } @@ -4400,7 +4783,17 @@ L_08ADD75C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD768: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); jump_target = aot_gpr_31; @@ -4408,11 +4801,20 @@ L_08ADD768: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD774: aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08ADD78C; } @@ -4432,25 +4834,54 @@ L_08ADD78C: goto L_08ADD790; L_08ADD790: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD798: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(8), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD7A0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(8))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD7A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4464,7 +4895,6 @@ L_08ADD7A8: goto L_08ADD7C4; L_08ADD7C4: aot_gpr_31 = (0x08ADD7CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD7CCu) goto L_08ADD7CC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD7CC: @@ -4484,7 +4914,17 @@ L_08ADD7D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD7EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4498,7 +4938,6 @@ L_08ADD7EC: goto L_08ADD808; L_08ADD808: aot_gpr_31 = (0x08ADD810u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD810u) goto L_08ADD810; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD810: @@ -4519,7 +4958,17 @@ L_08ADD81C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD834: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_6 = (0u | 1u); @@ -4532,7 +4981,17 @@ L_08ADD834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADD854: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4565,7 +5024,6 @@ L_08ADD8A0: goto L_08ADD8A4; L_08ADD8A4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD8C4; } @@ -4575,7 +5033,6 @@ L_08ADD8AC: ctx.gpr[22] = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD8CC; } @@ -4583,7 +5040,6 @@ L_08ADD8AC: } L_08ADD8BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADD8D4; } @@ -4599,7 +5055,6 @@ L_08ADD8C4: } L_08ADD8CC: aot_gpr_31 = (0x08ADD8D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADD8D4u) goto L_08ADD8D4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADD8D4: @@ -4634,7 +5089,6 @@ L_08ADD90C: L_08ADD91C: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(20))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08ADD9C0; } @@ -4648,7 +5102,6 @@ L_08ADD928: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADD9C0; } @@ -4667,7 +5120,6 @@ L_08ADD948: AOT_REGCACHE_SYNC_OUT(); return; L_08ADD960: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08ADD9A8; } @@ -4686,7 +5138,6 @@ L_08ADD968: AOT_REGCACHE_SYNC_OUT(); return; L_08ADD980: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08ADD9A8; } @@ -4705,7 +5156,6 @@ L_08ADD988: AOT_REGCACHE_SYNC_OUT(); return; L_08ADD9A0: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08ADD9C0; } @@ -4715,7 +5165,6 @@ L_08ADD9A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(612))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08ADD9C0; } @@ -4740,7 +5189,6 @@ L_08ADD9CC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADD91C; } @@ -4766,7 +5214,17 @@ L_08ADD9F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADDA1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -4791,7 +5249,6 @@ L_08ADDA54: goto L_08ADDA64; L_08ADDA64: aot_gpr_31 = (0x08ADDA6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDA6Cu) goto L_08ADDA6C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDA6C: @@ -4803,7 +5260,6 @@ L_08ADDA70: aot_gpr_5 = (aot_gpr_5 | 1u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADDD00; } @@ -4821,7 +5277,6 @@ L_08ADDA8C: goto L_08ADDA98; L_08ADDA98: aot_gpr_31 = (0x08ADDAA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDAA0u) goto L_08ADDAA0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDAA0: @@ -4838,7 +5293,6 @@ L_08ADDAA4: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADDB04; } @@ -4853,7 +5307,6 @@ L_08ADDAD0: goto L_08ADDADC; L_08ADDADC: aot_gpr_31 = (0x08ADDAE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDAE4u) goto L_08ADDAE4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDAE4: @@ -4880,7 +5333,6 @@ L_08ADDAFC: L_08ADDB04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADDB18; } @@ -4888,7 +5340,6 @@ L_08ADDB04: } L_08ADDB10: aot_gpr_31 = (0x08ADDB18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDB18u) goto L_08ADDB18; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDB18: @@ -4901,7 +5352,6 @@ L_08ADDB20: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADDC80; } @@ -4916,7 +5366,6 @@ L_08ADDB34: goto L_08ADDB40; L_08ADDB40: aot_gpr_31 = (0x08ADDB48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDB48u) goto L_08ADDB48; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDB48: @@ -4976,7 +5425,6 @@ L_08ADDBC4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADDC70; } @@ -4984,7 +5432,6 @@ L_08ADDBC4: } L_08ADDBD4: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08ADDC6C; } @@ -5003,7 +5450,6 @@ L_08ADDBDC: } L_08ADDBF0: aot_gpr_31 = (0x08ADDBF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDBF8u) goto L_08ADDBF8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDBF8: @@ -5018,7 +5464,6 @@ L_08ADDBF8: } L_08ADDC08: aot_gpr_31 = (0x08ADDC10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDC10u) goto L_08ADDC10; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDC10: @@ -5059,7 +5504,6 @@ L_08ADDC58: AOT_REGCACHE_SYNC_OUT(); return; L_08ADDC64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADDC80; } @@ -5072,7 +5516,6 @@ L_08ADDC70: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADDB34; } @@ -5087,7 +5530,6 @@ L_08ADDC80: goto L_08ADDC8C; L_08ADDC8C: aot_gpr_31 = (0x08ADDC94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADDC94u) goto L_08ADDC94; AOT_REGCACHE_SYNC_OUT(); return; L_08ADDC94: @@ -5162,7 +5604,17 @@ L_08ADDD00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADDD28: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5218,7 +5670,6 @@ L_08ADDD88: goto L_08ADDD90; L_08ADDD90: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08ADDEC8; } @@ -5354,7 +5805,17 @@ L_08ADDECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADDEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5362,7 +5823,6 @@ L_08ADDEE8: aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADDF20; } @@ -5382,7 +5842,6 @@ L_08ADDF0C: goto L_08ADDF18; L_08ADDF18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADDF40; } @@ -5419,7 +5878,17 @@ L_08ADDF48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADDF58: aot_gpr_6 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(304), static_cast(aot_gpr_6)); @@ -5438,11 +5907,20 @@ L_08ADDF58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADDF74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5502,7 +5980,6 @@ L_08ADDFD8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADDFE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADE0F8; } @@ -5683,7 +6160,6 @@ L_08ADE0F8: goto L_08ADE104; L_08ADE104: aot_gpr_31 = (0x08ADE10Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE10Cu) goto L_08ADE10C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE10C: @@ -5715,7 +6191,6 @@ L_08ADE130: goto L_08ADE138; L_08ADE138: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE15C; } @@ -5724,7 +6199,6 @@ L_08ADE138: L_08ADE140: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE154; } @@ -5732,7 +6206,6 @@ L_08ADE140: } L_08ADE14C: aot_gpr_31 = (0x08ADE154u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE154u) goto L_08ADE154; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE154: @@ -5748,7 +6221,17 @@ L_08ADE15C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADE16C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -5773,7 +6256,6 @@ L_08ADE1AC: goto L_08ADE1BC; L_08ADE1BC: aot_gpr_31 = (0x08ADE1C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE1C4u) goto L_08ADE1C4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE1C4: @@ -5791,7 +6273,6 @@ L_08ADE1C8: ctx.gpr[19] = (0u | 0u); aot_gpr_4 = (ctx.gpr[19] < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE3E0; } @@ -5806,7 +6287,6 @@ L_08ADE1F8: goto L_08ADE204; L_08ADE204: aot_gpr_31 = (0x08ADE20Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE20Cu) goto L_08ADE20C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE20C: @@ -5823,7 +6303,6 @@ L_08ADE218: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ADE238; } @@ -5831,7 +6310,6 @@ L_08ADE218: } L_08ADE230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADE3D0; } @@ -5844,7 +6322,6 @@ L_08ADE238: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(25000) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE3D0; } @@ -5859,7 +6336,6 @@ L_08ADE254: goto L_08ADE260; L_08ADE260: aot_gpr_31 = (0x08ADE268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE268u) goto L_08ADE268; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE268: @@ -5885,7 +6361,6 @@ L_08ADE27C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADE284: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADE2C8; } @@ -5909,7 +6384,6 @@ L_08ADE29C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_4) < 301 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE3D0; } @@ -5924,7 +6398,6 @@ L_08ADE2C8: goto L_08ADE2D4; L_08ADE2D4: aot_gpr_31 = (0x08ADE2DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE2DCu) goto L_08ADE2DC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE2DC: @@ -5953,7 +6426,6 @@ L_08ADE304: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(24)))))); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(16), static_cast(aot_gpr_4)); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08ADE374; } @@ -5968,7 +6440,6 @@ L_08ADE318: goto L_08ADE324; L_08ADE324: aot_gpr_31 = (0x08ADE32Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE32Cu) goto L_08ADE32C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE32C: @@ -5991,7 +6462,6 @@ L_08ADE340: goto L_08ADE350; L_08ADE350: aot_gpr_31 = (0x08ADE358u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE358u) goto L_08ADE358; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE358: @@ -6003,7 +6473,6 @@ L_08ADE35C: aot_gpr_5 = (aot_gpr_5 | 1u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADE3E0; } @@ -6018,7 +6487,6 @@ L_08ADE374: goto L_08ADE380; L_08ADE380: aot_gpr_31 = (0x08ADE388u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE388u) goto L_08ADE388; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE388: @@ -6027,7 +6495,6 @@ L_08ADE388: L_08ADE38C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE3D0; } @@ -6051,7 +6518,6 @@ L_08ADE3A4: goto L_08ADCA34; L_08ADE3C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADE3E0; } @@ -6061,7 +6527,6 @@ L_08ADE3D0: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (ctx.gpr[19] < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE1F8; } @@ -6083,7 +6548,17 @@ L_08ADE3E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADE404: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6099,7 +6574,6 @@ L_08ADE404: } L_08ADE430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADE8FC; } @@ -6117,7 +6591,6 @@ L_08ADE43C: goto L_08ADE448; L_08ADE448: aot_gpr_31 = (0x08ADE450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE450u) goto L_08ADE450; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE450: @@ -6134,7 +6607,6 @@ L_08ADE454: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (ctx.gpr[20] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE8FC; } @@ -6149,7 +6621,6 @@ L_08ADE480: goto L_08ADE48C; L_08ADE48C: aot_gpr_31 = (0x08ADE494u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE494u) goto L_08ADE494; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE494: @@ -6170,7 +6641,6 @@ L_08ADE4A0: AOT_REGCACHE_SYNC_OUT(); return; L_08ADE4B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADE8F4; } @@ -6182,7 +6652,6 @@ L_08ADE4BC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ADE4E8; } @@ -6243,7 +6712,6 @@ L_08ADE534: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE5A4; } @@ -6272,7 +6740,6 @@ L_08ADE5A4: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE5EC; } @@ -6300,7 +6767,6 @@ L_08ADE5EC: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE63C; } @@ -6322,7 +6788,6 @@ L_08ADE63C: aot_gpr_4 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE670; } @@ -6370,13 +6835,11 @@ L_08ADE6E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_31 = (0x08ADE6F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE6F4u) goto L_08ADE6F4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE6F4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), ctx.gpr[2]); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08ADE7F4; } @@ -6398,7 +6861,6 @@ L_08ADE700: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADE7F4; } @@ -6414,7 +6876,6 @@ L_08ADE740: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE7D8; } @@ -6459,7 +6920,6 @@ L_08ADE7B4: AOT_REGCACHE_SYNC_OUT(); return; L_08ADE7D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADE7F4; } @@ -6485,7 +6945,6 @@ L_08ADE7F4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADE6E4; } @@ -6573,7 +7032,17 @@ L_08ADE8FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADE91C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6589,7 +7058,6 @@ L_08ADE91C: } L_08ADE93C: aot_gpr_31 = (0x08ADE944u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADE944u) goto L_08ADE944; AOT_REGCACHE_SYNC_OUT(); return; L_08ADE944: @@ -6610,7 +7078,6 @@ L_08ADE954: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADEA68; } @@ -6715,7 +7182,6 @@ L_08ADEA4C: L_08ADEA5C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), ctx.gpr[17]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADEB30; } @@ -6824,7 +7290,17 @@ L_08ADEB30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADEB44: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6990,7 +7466,6 @@ L_08ADEC90: L_08ADECB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADED80; } @@ -7062,7 +7537,6 @@ L_08ADED44: goto L_08ADED50; L_08ADED50: aot_gpr_31 = (0x08ADED58u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADED58u) goto L_08ADED58; AOT_REGCACHE_SYNC_OUT(); return; L_08ADED58: @@ -7077,7 +7551,6 @@ L_08ADED5C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADED18; } @@ -7099,7 +7572,17 @@ L_08ADED80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADEDA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7115,7 +7598,6 @@ L_08ADEDA4: } L_08ADEDC8: aot_gpr_31 = (0x08ADEDD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADEDD0u) goto L_08ADEDD0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADEDD0: @@ -7128,7 +7610,6 @@ L_08ADEDD4: AOT_REGCACHE_SYNC_OUT(); return; L_08ADEDDC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADEEE8; } @@ -7143,7 +7624,6 @@ L_08ADEDE4: goto L_08ADEDF0; L_08ADEDF0: aot_gpr_31 = (0x08ADEDF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADEDF8u) goto L_08ADEDF8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADEDF8: @@ -7255,7 +7735,6 @@ L_08ADEEC4: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(4), aot_gpr_4); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08ADEEE8; } @@ -7280,7 +7759,17 @@ L_08ADEEE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADEF00: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7297,7 +7786,6 @@ L_08ADEF00: L_08ADEF24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADEF40; } @@ -7311,7 +7799,6 @@ L_08ADEF30: goto L_08ADEB44; L_08ADEF40: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08ADF014; } @@ -7422,7 +7909,17 @@ L_08ADF014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADF02C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7438,7 +7935,6 @@ L_08ADF02C: } L_08ADF058: aot_gpr_31 = (0x08ADF060u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF060u) goto L_08ADF060; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF060: @@ -7462,7 +7958,6 @@ L_08ADF070: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADF0F8; } @@ -7471,7 +7966,6 @@ L_08ADF070: L_08ADF0A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADF0CC; } @@ -7480,7 +7974,6 @@ L_08ADF0A0: L_08ADF0AC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08ADF0CC; } @@ -7491,7 +7984,6 @@ L_08ADF0B8: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); ctx.gpr[20] = (ctx.gpr[20] & 65535u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADF0F8; } @@ -7511,7 +8003,6 @@ L_08ADF0D4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADF0A0; } @@ -7519,7 +8010,6 @@ L_08ADF0D4: } L_08ADF0F8: { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08ADF070; } @@ -7544,7 +8034,17 @@ L_08ADF100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADF130: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7596,7 +8096,6 @@ L_08ADF190: goto L_08ADF194; L_08ADF194: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADF1B4; } @@ -7604,12 +8103,10 @@ L_08ADF194: } L_08ADF19C: aot_gpr_31 = (0x08ADF1A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0034_entry, 34u, 542u, 0x0888F890u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF1A4u) goto L_08ADF1A4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF1A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADF1B4; } @@ -7617,7 +8114,6 @@ L_08ADF1A4: } L_08ADF1AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADF1F0; } @@ -7655,7 +8151,17 @@ L_08ADF1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADF210: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7674,7 +8180,6 @@ L_08ADF210: } L_08ADF244: aot_gpr_31 = (0x08ADF24Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF24Cu) goto L_08ADF24C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF24C: @@ -7687,7 +8192,6 @@ L_08ADF258: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(233))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADF2A0; } @@ -7695,12 +8199,10 @@ L_08ADF258: } L_08ADF268: aot_gpr_31 = (0x08ADF270u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 459u, 0x08A52A20u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF270u) goto L_08ADF270; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF270: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADF298; } @@ -7720,7 +8222,6 @@ L_08ADF278: } L_08ADF290: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADF2DC; } @@ -7728,7 +8229,6 @@ L_08ADF290: } L_08ADF298: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADF354; } @@ -7736,7 +8236,6 @@ L_08ADF298: } L_08ADF2A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADF354; } @@ -7840,7 +8339,17 @@ L_08ADF354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADF370: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -7857,7 +8366,6 @@ L_08ADF370: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08ADF4F4; } @@ -7874,7 +8382,6 @@ L_08ADF3C8: } L_08ADF3D4: aot_gpr_31 = (0x08ADF3DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF3DCu) goto L_08ADF3DC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF3DC: @@ -7882,7 +8389,6 @@ L_08ADF3DC: goto L_08ADF3E0; L_08ADF3E0: aot_gpr_31 = (0x08ADF3E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 559u, 0x08A5306Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF3E8u) goto L_08ADF3E8; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF3E8: @@ -7977,7 +8483,6 @@ L_08ADF4A0: L_08ADF4B0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADF4EC; } @@ -7988,7 +8493,6 @@ L_08ADF4BC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADF4EC; } @@ -8008,7 +8512,6 @@ L_08ADF4D0: AOT_REGCACHE_SYNC_OUT(); return; L_08ADF4EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADF848; } @@ -8016,7 +8519,6 @@ L_08ADF4EC: } L_08ADF4F4: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08ADF848; } @@ -8026,7 +8528,6 @@ L_08ADF4FC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(4)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08ADF848; } @@ -8043,7 +8544,6 @@ L_08ADF50C: } L_08ADF518: aot_gpr_31 = (0x08ADF520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF520u) goto L_08ADF520; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF520: @@ -8059,7 +8559,6 @@ L_08ADF52C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADF538: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADF848; } @@ -8081,7 +8580,6 @@ L_08ADF548: } L_08ADF558: aot_gpr_31 = (0x08ADF560u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF560u) goto L_08ADF560; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF560: @@ -8279,7 +8777,6 @@ L_08ADF6FC: L_08ADF70C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08ADF75C; } @@ -8313,7 +8810,6 @@ L_08ADF748: L_08ADF75C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADF774; } @@ -8321,7 +8817,6 @@ L_08ADF75C: } L_08ADF768: aot_gpr_31 = (0x08ADF770u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF770u) goto L_08ADF770; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF770: @@ -8329,7 +8824,6 @@ L_08ADF770: goto L_08ADF774; L_08ADF774: aot_gpr_31 = (0x08ADF77Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 559u, 0x08A5306Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADF77Cu) goto L_08ADF77C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADF77C: @@ -8441,7 +8935,17 @@ L_08ADF848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADF870: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_31); @@ -8580,7 +9084,17 @@ L_08ADF998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADF9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8643,12 +9157,21 @@ L_08ADFA08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADFA14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08ADFA24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 528u, 0x08AD312Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFA24u) goto L_08ADFA24; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFA24: @@ -8658,7 +9181,6 @@ L_08ADFA24: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFA2C: aot_gpr_31 = (0x08ADFA34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 532u, 0x08AD317Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFA34u) goto L_08ADFA34; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFA34: @@ -8668,7 +9190,6 @@ L_08ADFA34: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFA3C: aot_gpr_31 = (0x08ADFA44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 536u, 0x08AD31CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFA44u) goto L_08ADFA44; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFA44: @@ -8683,7 +9204,17 @@ L_08ADFA4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADFA58: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8703,7 +9234,6 @@ L_08ADFA88: goto L_08ADFA90; L_08ADFA90: aot_gpr_31 = (0x08ADFA98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFA98u) goto L_08ADFA98; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFA98: @@ -8713,7 +9243,6 @@ L_08ADFA98: L_08ADFAA0: aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADFB20; } @@ -8721,7 +9250,6 @@ L_08ADFAA0: } L_08ADFAAC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFAC0; } @@ -8729,7 +9257,6 @@ L_08ADFAAC: } L_08ADFAB4: aot_gpr_31 = (0x08ADFABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFABCu) goto L_08ADFABC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFABC: @@ -8744,7 +9271,6 @@ L_08ADFAC8: aot_mem.aot_direct_store32(ctx.gpr[2] + static_cast(4), ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFAE4; } @@ -8752,7 +9278,6 @@ L_08ADFAC8: } L_08ADFAD8: aot_gpr_31 = (0x08ADFAE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFAE0u) goto L_08ADFAE0; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFAE0: @@ -8767,7 +9292,6 @@ L_08ADFAEC: aot_mem.aot_direct_store32(ctx.gpr[2] + static_cast(8), ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFB08; } @@ -8775,7 +9299,6 @@ L_08ADFAEC: } L_08ADFAFC: aot_gpr_31 = (0x08ADFB04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB04u) goto L_08ADFB04; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB04: @@ -8798,7 +9321,6 @@ L_08ADFB10: } L_08ADFB20: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFB34; } @@ -8806,7 +9328,6 @@ L_08ADFB20: } L_08ADFB28: aot_gpr_31 = (0x08ADFB30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB30u) goto L_08ADFB30; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB30: @@ -8814,7 +9335,6 @@ L_08ADFB30: goto L_08ADFB34; L_08ADFB34: aot_gpr_31 = (0x08ADFB3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 27u, 0x089EC260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB3Cu) goto L_08ADFB3C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB3C: @@ -8825,7 +9345,6 @@ L_08ADFB3C: L_08ADFB44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFB5C; } @@ -8833,7 +9352,6 @@ L_08ADFB44: } L_08ADFB50: aot_gpr_31 = (0x08ADFB58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB58u) goto L_08ADFB58; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB58: @@ -8841,7 +9359,6 @@ L_08ADFB58: goto L_08ADFB5C; L_08ADFB5C: aot_gpr_31 = (0x08ADFB64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0122_entry, 122u, 27u, 0x089EC260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB64u) goto L_08ADFB64; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB64: @@ -8853,7 +9370,6 @@ L_08ADFB64: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB74: aot_gpr_31 = (0x08ADFB7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 528u, 0x08AD312Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB7Cu) goto L_08ADFB7C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB7C: @@ -8863,7 +9379,6 @@ L_08ADFB7C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB84: aot_gpr_31 = (0x08ADFB8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 532u, 0x08AD317Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB8Cu) goto L_08ADFB8C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB8C: @@ -8873,7 +9388,6 @@ L_08ADFB8C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB94: aot_gpr_31 = (0x08ADFB9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 536u, 0x08AD31CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFB9Cu) goto L_08ADFB9C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFB9C: @@ -8889,7 +9403,6 @@ L_08ADFBAC: aot_gpr_4 = (ctx.gpr[2] + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -8901,11 +9414,20 @@ L_08ADFBBC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16480))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADFBD4: ctx.gpr[17] = (0u | 0u); aot_gpr_31 = (0x08ADFBE0u); @@ -8937,7 +9459,6 @@ L_08ADFBF8: goto L_08ADFC00; L_08ADFC00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADFC18; } @@ -8950,7 +9471,6 @@ L_08ADFC08: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFC10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFC78; } @@ -8988,7 +9508,6 @@ L_08ADFC40: goto L_08ADFC48; L_08ADFC48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADFC68; } @@ -9003,7 +9522,6 @@ L_08ADFC50: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFC60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFC78; } @@ -9018,7 +9536,6 @@ L_08ADFC68: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFC78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9031,7 +9548,6 @@ L_08ADFC80: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFC88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9044,7 +9560,6 @@ L_08ADFC90: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9059,7 +9574,6 @@ L_08ADFCA0: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFCB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9088,7 +9602,6 @@ L_08ADFCD8: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFCE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9104,7 +9617,6 @@ L_08ADFCF0: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFD04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9120,7 +9632,6 @@ L_08ADFD0C: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFD20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFD38; } @@ -9135,7 +9646,6 @@ L_08ADFD28: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFD38: aot_gpr_31 = (0x08ADFD40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 645u, 0x08AD38F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFD40u) goto L_08ADFD40; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFD40: @@ -9144,7 +9654,6 @@ L_08ADFD40: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(36))); aot_gpr_5 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08ADFD5C; } @@ -9177,7 +9686,6 @@ L_08ADFD78: } L_08ADFD88: aot_gpr_31 = (0x08ADFD90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0139_entry, 139u, 69u, 0x08A30794u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFD90u) goto L_08ADFD90; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFD90: @@ -9199,14 +9707,23 @@ L_08ADFD98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADFDB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5844))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFDE4; } @@ -9214,7 +9731,6 @@ L_08ADFDB4: } L_08ADFDDC: aot_gpr_31 = (0x08ADFDE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 339u, 0x08B6572Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFDE4u) goto L_08ADFDE4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFDE4: @@ -9224,22 +9740,18 @@ L_08ADFDE4: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFDEC: aot_gpr_31 = (0x08ADFDF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 696u, 0x08AD3BF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFDF4u) goto L_08ADFDF4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFDF4: aot_gpr_31 = (0x08ADFDFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 544u, 0x08AD323Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFDFCu) goto L_08ADFDFC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFDFC: aot_gpr_31 = (0x08ADFE04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 639u, 0x08AD38A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFE04u) goto L_08ADFE04; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFE04: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADFDFC; } @@ -9247,12 +9759,10 @@ L_08ADFE04: } L_08ADFE0C: aot_gpr_31 = (0x08ADFE14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 643u, 0x08AD38DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFE14u) goto L_08ADFE14; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFE14: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADFE0C; } @@ -9272,7 +9782,6 @@ L_08ADFE30: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFE38: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADFF3C; } @@ -9285,7 +9794,6 @@ L_08ADFE40: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFE48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08ADFF3C; } @@ -9299,7 +9807,6 @@ L_08ADFE50: L_08ADFE58: aot_gpr_4 = (ctx.gpr[2] & 64u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08ADFF3C; } @@ -9313,7 +9820,6 @@ L_08ADFE64: L_08ADFE6C: aot_gpr_4 = (ctx.gpr[2] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADFE80; } @@ -9332,7 +9838,6 @@ L_08ADFE80: L_08ADFE88: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADFE9C; } @@ -9351,7 +9856,6 @@ L_08ADFE9C: L_08ADFEA4: aot_gpr_4 = (ctx.gpr[2] & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08ADFEB8; } @@ -9399,12 +9903,10 @@ L_08ADFEE8: } L_08ADFEF4: aot_gpr_31 = (0x08ADFEFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 639u, 0x08AD38A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFEFCu) goto L_08ADFEFC; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFEFC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADFEF4; } @@ -9412,7 +9914,6 @@ L_08ADFEFC: } L_08ADFF04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08ADFF3C; } @@ -9434,7 +9935,6 @@ L_08ADFF14: L_08ADFF20: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08ADFF3C; } @@ -9442,12 +9942,10 @@ L_08ADFF20: } L_08ADFF2C: aot_gpr_31 = (0x08ADFF34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 643u, 0x08AD38DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF34u) goto L_08ADFF34; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08ADFF2C; } @@ -9465,12 +9963,10 @@ L_08ADFF3C: } L_08ADFF4C: aot_gpr_31 = (0x08ADFF54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 327u, 0x088099B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF54u) goto L_08ADFF54; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF54: aot_gpr_31 = (0x08ADFF5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 696u, 0x08AD3BF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF5Cu) goto L_08ADFF5C; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF5C: @@ -9486,22 +9982,18 @@ L_08ADFF64: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF70: aot_gpr_31 = (0x08ADFF78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 575u, 0x08AD34BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF78u) goto L_08ADFF78; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF78: aot_gpr_31 = (0x08ADFF80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 600u, 0x08AD3634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF80u) goto L_08ADFF80; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF80: aot_gpr_31 = (0x08ADFF88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 696u, 0x08AD3BF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF88u) goto L_08ADFF88; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF88: aot_gpr_31 = (0x08ADFF90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 544u, 0x08AD323Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFF90u) goto L_08ADFF90; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF90: @@ -9512,7 +10004,6 @@ L_08ADFF90: AOT_REGCACHE_SYNC_OUT(); return; L_08ADFF9C: aot_gpr_31 = (0x08ADFFA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 746u, 0x0887F804u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08ADFFA4u) goto L_08ADFFA4; AOT_REGCACHE_SYNC_OUT(); return; L_08ADFFA4: @@ -9531,7 +10022,17 @@ L_08ADFFA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADFFC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9548,7 +10049,17 @@ L_08ADFFE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08ADFFEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); diff --git a/profiles/vcs/generated/generated_unit_0183.cpp b/profiles/vcs/generated/generated_unit_0183.cpp index d6a8e4f..8d441ba 100644 --- a/profiles/vcs/generated/generated_unit_0183.cpp +++ b/profiles/vcs/generated/generated_unit_0183.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0183[4091] = { - 1, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 9, 0, - 0, 10, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 17, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 25, 26, 0, 27, 0, 0, 0, - 28, 0, 29, 0, 0, 0, 30, 0, 0, 0, 0, 31, 32, 0, 0, 0, 0, 33, 34, 0, 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, 37, 0, - 0, 38, 0, 39, 40, 0, 41, 0, 0, 42, 0, 0, 43, 0, 44, 45, 46, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 49, 50, 0, 0, - 51, 0, 0, 52, 0, 53, 0, 54, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 59, - 60, 0, 61, 0, 0, 0, 62, 0, 63, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 67, 68, 0, 69, 0, 0, 0, 70, 0, - 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 74, 75, 0, 76, 0, 0, 77, 0, 0, 0, 78, 0, 0, 79, 0, 0, - 0, 80, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 83, 0, 0, 84, 85, 0, 86, 0, 0, 87, 0, 0, 0, 88, 0, 0, - 89, 0, 0, 0, 90, 0, 91, 0, 0, 0, 92, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 96, 0, 0, 0, - 97, 0, 0, 98, 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, - 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 117, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 120, 0, 0, 121, 0, 122, 0, 123, 0, 0, 0, 124, 0, 0, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 128, 129, 0, 0, - 130, 0, 131, 0, 132, 0, 133, 0, 0, 0, 134, 0, 135, 0, 136, 0, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 0, 143, 0, - 144, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 148, 0, 0, 149, 0, 0, 0, 0, 150, 0, 151, 0, 0, 152, 0, 153, 0, - 0, 154, 0, 0, 0, 0, 0, 0, 155, 156, 0, 157, 0, 158, 0, 159, 0, 0, 160, 0, 0, 0, 0, 161, 0, 162, 0, 163, 0, 164, 0, 0, - 165, 0, 0, 0, 0, 166, 0, 167, 0, 168, 0, 169, 0, 0, 0, 0, 170, 0, 171, 0, 172, 0, 0, 173, 0, 174, 175, 0, 176, 0, 177, 0, - 0, 178, 0, 0, 0, 0, 0, 179, 0, 180, 0, 0, 181, 0, 0, 0, 182, 0, 183, 0, 184, 0, 185, 0, 0, 0, 186, 187, 0, 188, 0, 0, - 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 192, 0, - 193, 194, 0, 195, 0, 196, 0, 0, 197, 0, 198, 0, 199, 0, 200, 0, 0, 201, 0, 0, 202, 0, 0, 203, 0, 204, 0, 205, 206, 0, 207, 0, - 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 210, 0, 211, 0, 0, 212, 0, 213, 0, 214, 0, 0, 215, 0, 216, 0, 217, 0, 218, 0, 0, - 0, 219, 0, 220, 0, 221, 0, 222, 0, 0, 0, 0, 223, 0, 224, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, 227, 0, 228, 0, 229, 0, 230, - 0, 231, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 237, 0, 238, 0, 239, 0, 240, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 0, 0, 246, - 0, 0, 0, 247, 0, 248, 0, 0, 0, 249, 0, 0, 0, 250, 0, 251, 0, 0, 0, 252, 0, 253, 0, 0, 0, 254, 0, 0, 0, 255, 0, 256, - 0, 0, 0, 257, 0, 258, 0, 0, 0, 259, 0, 260, 0, 0, 0, 261, 0, 0, 0, 262, 0, 263, 0, 0, 0, 264, 0, 0, 0, 265, 0, 266, - 0, 0, 267, 0, 0, 0, 268, 0, 0, 0, 269, 0, 270, 0, 271, 0, 0, 272, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 276, 0, 277, - 0, 278, 0, 279, 0, 0, 0, 280, 0, 281, 0, 0, 0, 282, 0, 0, 0, 283, 0, 284, 0, 285, 0, 0, 286, 0, 0, 0, 287, 0, 288, 0, - 0, 0, 289, 0, 0, 290, 0, 291, 0, 292, 0, 293, 0, 0, 0, 294, 0, 295, 0, 0, 0, 296, 0, 0, 0, 297, 0, 0, 0, 298, 0, 299, - 0, 0, 0, 300, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 0, 0, 0, 304, 0, 305, 0, 0, 0, 306, 0, 0, 307, 0, 308, 0, 309, 0, - 310, 0, 0, 0, 311, 0, 0, 0, 312, 0, 313, 0, 0, 0, 314, 0, 315, 0, 0, 0, 316, 0, 0, 0, 317, 0, 318, 0, 0, 0, 319, 0, - 320, 0, 0, 0, 321, 0, 322, 0, 0, 323, 0, 324, 0, 0, 0, 325, 0, 326, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, 330, 0, 331, - 0, 332, 0, 0, 333, 0, 0, 0, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 336, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 339, - 0, 0, 0, 340, 0, 341, 0, 0, 342, 0, 343, 0, 0, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 0, 0, 349, 0, 350, 0, 0, 0, - 351, 0, 352, 0, 0, 353, 0, 354, 0, 0, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 0, 0, 0, 360, 0, 361, 0, 0, 0, 362, 0, 363, - 0, 0, 364, 0, 365, 0, 0, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 0, 0, 371, 0, 372, 0, 0, 0, 373, 0, 374, 0, 375, 0, - 0, 376, 0, 377, 0, 0, 0, 378, 0, 379, 0, 380, 0, 0, 0, 381, 0, 382, 0, 0, 0, 383, 0, 0, 384, 0, 385, 0, 386, 0, 387, 0, - 0, 0, 388, 0, 389, 0, 0, 0, 390, 0, 391, 0, 0, 0, 392, 0, 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, - 398, 0, 0, 399, 0, 400, 0, 0, 0, 401, 0, 402, 0, 403, 0, 0, 0, 404, 0, 405, 0, 0, 406, 0, 0, 0, 407, 408, 0, 409, 410, 0, - 411, 0, 0, 0, 412, 0, 413, 0, 0, 414, 0, 415, 0, 0, 0, 416, 0, 417, 0, 418, 0, 0, 0, 419, 0, 420, 0, 0, 421, 0, 0, 0, - 422, 0, 0, 0, 423, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 426, 0, 427, 0, 428, 0, 0, 429, 0, 430, 0, 0, 0, 431, 0, 0, 0, - 432, 0, 0, 0, 433, 0, 0, 0, 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, - 442, 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 447, 0, 448, 0, 0, 449, 0, 450, 0, 0, 0, 451, 0, 0, - 0, 452, 0, 0, 0, 453, 0, 0, 0, 454, 0, 455, 0, 456, 0, 0, 0, 457, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, - 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 465, 0, 0, 0, - 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, - 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 478, 0, 479, 480, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, - 0, 483, 0, 0, 0, 484, 0, 485, 0, 486, 0, 0, 487, 0, 488, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, - 0, 0, 0, 492, 0, 493, 0, 0, 494, 0, 495, 0, 0, 0, 0, 0, 496, 497, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 500, 0, 0, - 0, 501, 0, 502, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 510, - 0, 0, 0, 511, 0, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 521, 0, 522, - 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 525, 0, 526, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 531, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, - 546, 0, 547, 0, 548, 549, 0, 550, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 556, 0, 0, 557, 0, 558, 0, 559, 0, 560, 0, - 0, 561, 0, 0, 562, 0, 563, 564, 0, 565, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, - 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 0, 579, 0, 580, 0, 0, 581, 0, 0, 582, 0, 583, 0, 584, 0, 585, 0, - 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, - 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 594, 0, 595, 0, 0, 596, 0, 597, 0, - 0, 598, 0, 599, 0, 600, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 0, 0, 610, 611, - 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 614, 0, 615, 0, 0, 0, 0, 616, 0, 0, 0, 617, 0, - 618, 0, 619, 0, 620, 0, 621, 622, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 627, 0, 628, 0, 629, 0, 0, 630, 0, 0, 0, 0, 0, 631, 632, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 635, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, - 639, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 644, 0, 645, 0, 0, 646, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 650, 0, - 651, 0, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 656, 0, 657, 0, 0, 0, 0, 658, 0, 659, 0, 0, 0, 0, 660, - 0, 0, 0, 661, 662, 0, 0, 663, 0, 664, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 668, 669, 0, 670, 0, - 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 673, 0, 674, 0, 675, 0, 676, 0, 677, 0, 678, - 0, 679, 0, 0, 0, 0, 680, 0, 0, 681, 0, 0, 682, 0, 683, 0, 684, 0, 0, 685, 0, 686, 0, 0, 0, 0, 0, 687, 0, 688, 0, 0, - 0, 689, 0, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 692, 0, 693, 0, 0, 0, 694, 0, 695, 0, 0, 0, 696, 0, 0, 0, 697, - 0, 0, 698, 699, 0, 0, 700, 0, 701, 0, 702, 0, 0, 0, 703, 0, 0, 0, 704, 0, 0, 0, 0, 0, 705, 706, 0, 707, 0, 708, 0, 0, - 0, 709, 0, 0, 710, 0, 0, 711, 0, 712, 0, 713, 0, 0, 714, 0, 715, 0, 0, 0, 0, 0, 716, 0, 717, 0, 0, 0, 718, 0, 0, 719, - 0, 720, 0, 0, 721, 0, 722, 0, 0, 0, 723, 0, 0, 724, 0, 725, 0, 0, 726, 0, 727, 0, 0, 0, 728, 0, 0, 729, 0, 0, 730, 0, - 731, 0, 732, 0, 0, 733, 0, 734, 0, 0, 0, 0, 0, 735, 0, 736, 0, 0, 0, 737, 0, 0, 738, 0, 0, 739, 0, 0, 0, 0, 0, 0, - 0, 740, 0, 741, 0, 0, 0, 742, 0, 743, 0, 0, 0, 744, 0, 0, 0, 745, 0, 0, 746, 747, 0, 0, 748, 0, 749, 0, 0, 750, 0, 0, - 0, 751, 0, 0, 0, 752, 0, 0, 0, 0, 0, 753, 754, 0, 755, 0, 756, 0, 0, 0, 757, 0, 0, 758, 0, 0, 759, 0, 760, 0, 761, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 763, 0, 0, 0, 0, 764, - 0, 0, 765, 0, 0, 766, 0, 767, 0, 0, 0, 768, 0, 769, 0, 770, 0, 771, 0, 0, 772, 0, 0, 773, 0, 774, 775, 0, 776, 0, 0, 777, - 0, 778, 0, 779, 0, 780, 0, 0, 781, 0, 0, 782, 0, 783, 784, 0, 785, 0, 0, 786, 0, 787, 0, 788, 0, 789, 0, 0, 790, 0, 0, 791, - 0, 792, 793, 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 799, 0, 0, 800, 0, 801, 802, 0, 803, 0, 0, 804, 0, 805, 0, 806, - 0, 807, 0, 0, 808, 0, 0, 809, 0, 810, 811, 0, 812, 0, 0, 813, 0, 814, 0, 0, 815, 0, 816, 0, 0, 0, 817, 0, 0, 818, 0, 0, - 819, 0, 820, 0, 0, 0, 821, 0, 0, 822, 0, 0, 823, 0, 824, 0, 0, 825, 0, 826, 0, 0, 827, 0, 0, 828, 0, 829, 830, 0, 831, 0, - 0, 832, 0, 833, 0, 0, 834, 0, 0, 835, 0, 836, 837, 0, 838, 0, 0, 839, 0, 840, 0, 0, 841, 0, 0, 842, 0, 843, 844, 0, 845, 0, - 0, 846, 0, 847, 0, 0, 848, 0, 0, 849, 0, 850, 851, 0, 852, 0, 0, 0, 0, 0, 0, 853, 0, 0, 854, 0, 0, 0, 855, 0, 0, 856, - 0, 0, 857, 0, 858, 0, 859, 0, 0, 0, 860, 0, 861, 0, 0, 0, 0, 0, 862, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 864, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 866, 0, 867, 0, - 868, 869, 0, 0, 0, 0, 870, 0, 0, 871, 0, 0, 872, 0, 873, 0, 874, 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 876, 0, 0, - 0, 0, 0, 877, 0, 878, 0, 0, 879, 0, 880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 881, 0, 0, 882, 0, 0, 883, 0, 884, 0, 0, 0, - 0, 885, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 889, 0, 0, 0, - 890, 0, 0, 0, 0, 0, 891, 0, 0, 0, 892, 0, 893, 0, 894, 0, 0, 0, 0, 0, 0, 0, 895, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 897, 0, 898, 0, 0, 899, 0, 0, 0, 0, 900, 0, 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, - 902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 904, 0, 905, 0, 906, 0, 0, 0, 0, 0, - 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 910, - 911, 912, 0, 913, 0, 0, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, 916, 0, 0, 917, - 0, 0, 0, 0, 0, 0, 0, 918, 0, 0, 0, 0, 919, 0, 0, 0, 0, 0, 0, 920, 0, 0, 0, 0, 0, 0, 0, 0, 921, 0, 0, 0, - 0, 922, 0, 923, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 924, 0, 0, 925, 0, 0, 926, 927, 0, 0, 0, 0, 928, 0, 0, 929, 0, - 0, 930, 0, 0, 931, 0, 0, 0, 0, 0, 0, 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 934, 935, 0, 0, - 0, 0, 0, 0, 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, 0, 938, 0, 0, 0, 0, 0, 0, 0, 939, 0, 0, 0, 0, 0, 0, - 0, 0, 940, 0, 0, 941, 0, 942, 0, 0, 0, 943, 0, 0, 0, 0, 0, 0, 944, 0, 0, 0, 0, 0, 0, 945, 0, 0, 946, 0, 0, 947, - 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 951, - 0, 0, 0, 0, 0, 0, 952, 0, 0, 953, 0, 0, 0, 954, 0, 0, 955, 0, 956, 0, 0, 0, 0, 0, 0, 957, 0, 958, 0, 959, 0, 0, - 0, 960, 0, 0, 0, 961, 0, 962, 0, 963, 0, 0, 964, 0, 965, 0, 966, 0, 967, 0, 968, 0, 0, 969, 0, 970, 0, 971, 972, 0, 973, 0, - 974, 0, 975, 0, 0, 0, 0, 0, 0, 976, 0, 977, 0, 978, 0, 979, 0, 980, 981, 0, 0, 0, 982, 0, 0, 0, 0, 0, 0, 0, 983, 0, - 0, 0, 0, 0, 0, 984, 0, 985, 0, 0, 986, 0, 987, 0, 0, 0, 988, 0, 0, 0, 989, 0, 990, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 991, 0, 0, 0, 992, 0, 993, 0, 994, 0, 0, 995, 0, 0, 0, 0, 0, 0, 0, 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 997, 0, 0, 0, 998, 0, 0, 0, 999, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 1001, 0, 0, - 1002, 0, 0, 0, 1003, 0, 0, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1005, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1006, 0, 0, 0, 0, 0, 0, 1007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1009, 0, 0, 0, 0, 0, 0, 1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1011, 0, 1012, 0, 0, 0, 0, 1013, 0, 0, 0, 1014, 0, 1015, 0, 1016, 0, 1017, 1018, 0, 1019, 0, 0, 0, 0, 1020, 0, 0, 0, 1021, 0, 0, - 0, 1022, 0, 0, 0, 0, 1023, 0, 1024, 0, 1025, 0, 1026, 0, 1027, 0, 0, 0, 1028, 0, 1029, 0, 1030, 0, 0, 0, 1031, 0, 1032, 0, 1033, 1034, - 0, 0, 0, 1035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1036, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0183[64] = { + 0x0001411252414013ull, 0x16805A0000025500ull, 0x3221D25A48861845ull, 0x45A20945890022A9ull, + 0x2259200A244B2401ull, 0x55502A8912802451ull, 0x100082200A000804ull, 0x3400001002454909ull, + 0x528488254AAA5455ull, 0x56950AA12A84AB02ull, 0x480000142C551282ull, 0x2A952A805A92552Bull, + 0x0551424AAA4250AAull, 0xA228A22882208820ull, 0xA88A5444A2288A28ull, 0xA2228AA4512A228Aull, + 0x45114511548A2288ull, 0x90441112A88A8A51ull, 0xA28AA8A514554528ull, 0x55228A8A54515514ull, + 0x6C4A2A2945114514ull, 0x114AA411128A8A51ull, 0x2294444511115511ull, 0x0000000222222A22ull, + 0x0410410410410400ull, 0x1203410100045041ull, 0x214305284400D2A2ull, 0x880408004004050Aull, + 0x01009504A0555548ull, 0x5555484028118008ull, 0x55240440000402B5ull, 0x0080800040200AD2ull, + 0x0004100202000104ull, 0x1020808255250880ull, 0x0084042A52880401ull, 0x44290100C5541000ull, + 0x304A8844000040D5ull, 0x0410020200010080ull, 0x48800A5000842201ull, 0x5A404298850A5221ull, + 0x28295242AAA40008ull, 0x2B04454C88A28092ull, 0x4914A45291414A92ull, 0x2532228A0248A0A5ull, + 0x8500000054915822ull, 0x92A9692A9692A8A4ull, 0x24529692A9692A96ull, 0x5A4A5A4A5A4A5245ull, + 0x800C145491205A4Aull, 0x1000000000000000ull, 0x5000000000000000ull, 0x1490052820415243ull, + 0x0040544112020202ull, 0x0542000102109404ull, 0x9400020B82002001ull, 0x4864800A10081080ull, + 0x0202801030800812ull, 0x8000A001920408A4ull, 0x5A9552A22A052240ull, 0x005114A04046AA05ull, + 0x2010111000080951ull, 0x0004080004000411ull, 0x2216A88500408008ull, 0x04000008D4545542ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0183[64] = { + 1u, 15u, 28u, 51u, 71u, 89u, 109u, 117u, 130u, 154u, 178u, 193u, 219u, 241u, 257u, 278u, + 300u, 320u, 340u, 364u, 388u, 411u, 432u, 452u, 462u, 471u, 483u, 501u, 511u, 529u, 546u, 561u, + 571u, 577u, 591u, 604u, 618u, 633u, 639u, 651u, 671u, 689u, 709u, 731u, 751u, 765u, 792u, 819u, + 846u, 865u, 866u, 868u, 885u, 896u, 907u, 918u, 930u, 940u, 952u, 974u, 991u, 1002u, 1008u, 1022u, }; void recomp_unit_0183_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0183_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AE0000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0183[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0183[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0183[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AE0000; @@ -1217,7 +1124,17 @@ L_08AE0004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE0010: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31, aot_gpr_6}; @@ -1233,7 +1150,6 @@ L_08AE0010: } L_08AE0038: aot_gpr_31 = (0x08AE0040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0040u) goto L_08AE0040; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0040: @@ -1259,7 +1175,6 @@ L_08AE0064: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0070: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE00A0; } @@ -1297,14 +1212,33 @@ L_08AE00A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE00B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE00C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -1330,7 +1264,6 @@ L_08AE00C0: } L_08AE0120: aot_gpr_31 = (0x08AE0128u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 413u, 0x08B65B0Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0128u) goto L_08AE0128; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0128: @@ -1373,7 +1306,6 @@ L_08AE0144: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(38), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE01B0; } @@ -1381,7 +1313,6 @@ L_08AE0144: } L_08AE01A4: aot_gpr_31 = (0x08AE01ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE01ACu) goto L_08AE01AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AE01AC: @@ -1389,7 +1320,6 @@ L_08AE01AC: goto L_08AE01B0; L_08AE01B0: aot_gpr_31 = (0x08AE01B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 247u, 0x08A54F5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE01B8u) goto L_08AE01B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AE01B8: @@ -1401,7 +1331,6 @@ L_08AE01B8: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(36), static_cast(aot_gpr_6)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE01E8; } @@ -1409,7 +1338,6 @@ L_08AE01B8: } L_08AE01DC: aot_gpr_31 = (0x08AE01E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE01E4u) goto L_08AE01E4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE01E4: @@ -1417,7 +1345,6 @@ L_08AE01E4: goto L_08AE01E8; L_08AE01E8: aot_gpr_31 = (0x08AE01F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0148_entry, 148u, 247u, 0x08A54F5Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE01F0u) goto L_08AE01F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE01F0: @@ -1458,7 +1385,6 @@ L_08AE0230: aot_gpr_5 = (aot_gpr_5 + aot_gpr_4); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08AE0248; } @@ -1472,7 +1398,6 @@ L_08AE0248: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_gpr_5 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE0230; } @@ -1482,7 +1407,6 @@ L_08AE025C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); aot_gpr_4 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0298; } @@ -1589,7 +1513,6 @@ L_08AE0300: } L_08AE030C: aot_gpr_31 = (0x08AE0314u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0314u) goto L_08AE0314; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0314: @@ -1688,7 +1611,6 @@ L_08AE03C4: } L_08AE03D4: aot_gpr_31 = (0x08AE03DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE03DCu) goto L_08AE03DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AE03DC: @@ -1696,7 +1618,6 @@ L_08AE03DC: goto L_08AE03E0; L_08AE03E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0400; } @@ -1714,7 +1635,6 @@ L_08AE03E8: } L_08AE03F8: aot_gpr_31 = (0x08AE0400u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0400u) goto L_08AE0400; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0400: @@ -1769,7 +1689,6 @@ L_08AE0458: L_08AE0468: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AE048C; } @@ -1842,7 +1761,6 @@ L_08AE04E4: L_08AE04F4: ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08AE0518; } @@ -1914,7 +1832,6 @@ L_08AE0570: L_08AE0580: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AE05A4; } @@ -1937,12 +1854,10 @@ L_08AE059C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE05A4: aot_gpr_31 = (0x08AE05ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 963u, 0x08A37E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE05ACu) goto L_08AE05AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AE05AC: aot_gpr_31 = (0x08AE05B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 241u, 0x0887CD60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE05B4u) goto L_08AE05B4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE05B4: @@ -1962,12 +1877,10 @@ L_08AE05D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AE05D8: aot_gpr_31 = (0x08AE05E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 530u, 0x0886A6D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE05E0u) goto L_08AE05E0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE05E0: aot_gpr_31 = (0x08AE05E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 318u, 0x08A35524u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE05E8u) goto L_08AE05E8; AOT_REGCACHE_SYNC_OUT(); return; L_08AE05E8: @@ -2018,7 +1931,6 @@ L_08AE062C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0664: aot_gpr_31 = (0x08AE066Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 540u, 0x08AD3204u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE066Cu) goto L_08AE066C; AOT_REGCACHE_SYNC_OUT(); return; L_08AE066C: @@ -2063,7 +1975,6 @@ L_08AE06BC: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE0720; } @@ -2073,7 +1984,6 @@ L_08AE06F0: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AE070C; } @@ -2089,7 +1999,6 @@ L_08AE070C: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE06F0; } @@ -2154,7 +2063,17 @@ L_08AE0764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE0790: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -2190,12 +2109,10 @@ L_08AE07F0: L_08AE07F4: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(142), static_cast(0u)); aot_gpr_31 = (0x08AE0800u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0800u) goto L_08AE0800; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0800: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE0818; } @@ -2203,7 +2120,6 @@ L_08AE0800: } L_08AE0808: aot_gpr_31 = (0x08AE0810u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0810u) goto L_08AE0810; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0810: @@ -2219,7 +2135,6 @@ L_08AE0818: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0828: aot_gpr_31 = (0x08AE0830u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0027_entry, 27u, 42u, 0x088703ECu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0830u) goto L_08AE0830; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0830: @@ -2230,7 +2145,6 @@ L_08AE0830: L_08AE0838: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-4784), static_cast(ctx.gpr[17])); aot_gpr_31 = (0x08AE0844u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0121_entry, 121u, 116u, 0x089E8AF8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0844u) goto L_08AE0844; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0844: @@ -2261,17 +2175,14 @@ L_08AE0864: L_08AE086C: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(-4784), static_cast(0u)); aot_gpr_31 = (0x08AE0878u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0025_entry, 25u, 530u, 0x0886A6D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0878u) goto L_08AE0878; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0878: aot_gpr_31 = (0x08AE0880u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0140_entry, 140u, 318u, 0x08A35524u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0880u) goto L_08AE0880; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0880: aot_gpr_31 = (0x08AE0888u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 241u, 0x0887CD60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0888u) goto L_08AE0888; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0888: @@ -2286,7 +2197,6 @@ L_08AE0894: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE08DC; } @@ -2296,7 +2206,6 @@ L_08AE08AC: aot_gpr_5 = (aot_gpr_4 | 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AE08C8; } @@ -2312,7 +2221,6 @@ L_08AE08C8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE08AC; } @@ -2326,7 +2234,6 @@ L_08AE08DC: L_08AE08E4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0924; } @@ -2340,7 +2247,6 @@ L_08AE08F0: L_08AE08F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0920; } @@ -2379,7 +2285,6 @@ L_08AE0934: L_08AE093C: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10340))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AE0974; } @@ -2398,7 +2303,6 @@ L_08AE0948: } L_08AE095C: aot_gpr_31 = (0x08AE0964u); - // nop ctx.pc = 0x08B7363Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0964: @@ -2411,13 +2315,11 @@ L_08AE0964: } L_08AE096C: aot_gpr_31 = (0x08AE0974u); - // nop ctx.pc = 0x08B7368Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0974: ctx.gpr[20] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10344))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AE09AC; } @@ -2436,7 +2338,6 @@ L_08AE0980: } L_08AE0994: aot_gpr_31 = (0x08AE099Cu); - // nop ctx.pc = 0x08B7363Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AE099C: @@ -2449,7 +2350,6 @@ L_08AE099C: } L_08AE09A4: aot_gpr_31 = (0x08AE09ACu); - // nop ctx.pc = 0x08B7368Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AE09AC: @@ -2473,7 +2373,6 @@ L_08AE09C8: L_08AE09D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5872))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE09E8; } @@ -2481,7 +2380,6 @@ L_08AE09D0: } L_08AE09DC: aot_gpr_31 = (0x08AE09E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE09E4u) goto L_08AE09E4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE09E4: @@ -2489,7 +2387,6 @@ L_08AE09E4: goto L_08AE09E8; L_08AE09E8: aot_gpr_31 = (0x08AE09F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0147_entry, 147u, 497u, 0x08A52C60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE09F0u) goto L_08AE09F0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE09F0: @@ -2500,7 +2397,6 @@ L_08AE09F0: L_08AE09F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0A48; } @@ -2512,7 +2408,6 @@ L_08AE0A04: aot_gpr_5 = (aot_gpr_5 ^ 1u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE0A48; } @@ -2520,7 +2415,6 @@ L_08AE0A04: } L_08AE0A1C: aot_gpr_31 = (0x08AE0A24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0161_entry, 161u, 74u, 0x08A886C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0A24u) goto L_08AE0A24; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0A24: @@ -2546,7 +2440,6 @@ L_08AE0A40: } L_08AE0A48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0A6C; } @@ -2614,7 +2507,6 @@ L_08AE0A90: L_08AE0AEC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08AE0B04; } @@ -2622,7 +2514,6 @@ L_08AE0AEC: } L_08AE0AF8: aot_gpr_31 = (0x08AE0B00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0B00u) goto L_08AE0B00; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0B00: @@ -2647,7 +2538,6 @@ L_08AE0B14: goto L_08AE0B20; L_08AE0B20: aot_gpr_31 = (0x08AE0B28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0B28u) goto L_08AE0B28; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0B28: @@ -2656,7 +2546,6 @@ L_08AE0B28: goto L_08AE0B30; L_08AE0B30: aot_gpr_31 = (0x08AE0B38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 271u, 0x08AB9680u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0B38u) goto L_08AE0B38; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0B38: @@ -2717,7 +2606,6 @@ L_08AE0B9C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0BA4: aot_gpr_31 = (0x08AE0BACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0010_entry, 10u, 62u, 0x0882C3C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0BACu) goto L_08AE0BAC; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0BAC: @@ -2728,7 +2616,6 @@ L_08AE0BAC: L_08AE0BB4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE0C0C; } @@ -2752,17 +2639,14 @@ L_08AE0BD0: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0BDC: aot_gpr_31 = (0x08AE0BE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 575u, 0x08AD34BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0BE4u) goto L_08AE0BE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0BE4: aot_gpr_31 = (0x08AE0BECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 600u, 0x08AD3634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0BECu) goto L_08AE0BEC; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0BEC: aot_gpr_31 = (0x08AE0BF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 604u, 0x08AD3670u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0BF4u) goto L_08AE0BF4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0BF4: @@ -2803,7 +2687,6 @@ L_08AE0C30: L_08AE0C38: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE0C64; } @@ -2830,7 +2713,6 @@ L_08AE0C64: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0C6C: aot_gpr_31 = (0x08AE0C74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 538u, 0x08AD31E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0C74u) goto L_08AE0C74; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0C74: @@ -2840,7 +2722,6 @@ L_08AE0C74: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0C7C: aot_gpr_31 = (0x08AE0C84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 519u, 0x0896E260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0C84u) goto L_08AE0C84; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0C84: @@ -2877,7 +2758,6 @@ L_08AE0CC0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(-24260), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(140))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE0CD8; } @@ -2916,21 +2796,29 @@ L_08AE0CE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE0D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AE0D2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ADC754, 182u, 141u, 0x08ADC754u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0182_entry, 182u, 141u, 0x08ADC754u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE0D2Cu) goto L_08AE0D2C; AOT_REGCACHE_SYNC_OUT(); return; L_08AE0D2C: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -2942,16 +2830,24 @@ L_08AE0D3C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16520))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE0D54: aot_gpr_16 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); aot_gpr_4 = (aot_gpr_16 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -2963,11 +2859,20 @@ L_08AE0D64: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_16); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16568))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE0D7C: aot_gpr_4 = (0u | 228u); aot_gpr_5 = (0u | 5u); @@ -2977,7 +2882,6 @@ L_08AE0D7C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0D8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -2999,7 +2903,6 @@ L_08AE0DA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0DB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -3014,7 +2917,6 @@ L_08AE0DBC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -3036,7 +2938,6 @@ L_08AE0DE4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -3051,7 +2952,6 @@ L_08AE0DFC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0E0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -3066,7 +2966,6 @@ L_08AE0E14: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0E24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -3088,7 +2987,6 @@ L_08AE0E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0E74; } @@ -3110,7 +3008,6 @@ L_08AE0E64: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0E74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3119,7 +3016,6 @@ L_08AE0E74: L_08AE0E7C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE0EA8; } @@ -3141,7 +3037,6 @@ L_08AE0E98: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0EA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3149,7 +3044,6 @@ L_08AE0EA8: } L_08AE0EB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3166,7 +3060,6 @@ L_08AE0EB8: } L_08AE0EC4: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08AE0F44; } @@ -3188,7 +3081,6 @@ L_08AE0EDC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0EEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0F44; } @@ -3204,7 +3096,6 @@ L_08AE0EF4: } L_08AE0EFC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE0F24; } @@ -3212,7 +3103,6 @@ L_08AE0EFC: } L_08AE0F04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0F44; } @@ -3227,7 +3117,6 @@ L_08AE0F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0F1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE0F44; } @@ -3249,7 +3138,6 @@ L_08AE0F34: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0F44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3257,7 +3145,6 @@ L_08AE0F44: } L_08AE0F4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3266,7 +3153,6 @@ L_08AE0F4C: L_08AE0F54: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE0F70; } @@ -3281,7 +3167,6 @@ L_08AE0F60: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3291,7 +3176,6 @@ L_08AE0F78: aot_gpr_16 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); aot_gpr_4 = (aot_gpr_16 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1044; } @@ -3324,7 +3208,6 @@ L_08AE0F9C: } L_08AE0FA4: { const bool branch_taken = aot_gpr_16 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AE1024; } @@ -3339,7 +3222,6 @@ L_08AE0FAC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0FBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1044; } @@ -3368,7 +3250,6 @@ L_08AE0FE4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE0FF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1044; } @@ -3390,7 +3271,6 @@ L_08AE100C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE101C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1044; } @@ -3412,7 +3292,6 @@ L_08AE1034: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1044: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3422,7 +3301,6 @@ L_08AE104C: aot_gpr_16 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); aot_gpr_4 = (aot_gpr_16 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1110; } @@ -3455,7 +3333,6 @@ L_08AE1070: } L_08AE1078: { const bool branch_taken = aot_gpr_16 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AE1100; } @@ -3477,7 +3354,6 @@ L_08AE1090: AOT_REGCACHE_SYNC_OUT(); return; L_08AE10A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1110; } @@ -3492,7 +3368,6 @@ L_08AE10A8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE10B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1110; } @@ -3514,7 +3389,6 @@ L_08AE10D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AE10E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1110; } @@ -3529,7 +3403,6 @@ L_08AE10E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE10F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1110; } @@ -3544,7 +3417,6 @@ L_08AE1100: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3561,7 +3433,6 @@ L_08AE1118: } L_08AE1124: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08AE116C; } @@ -3576,7 +3447,6 @@ L_08AE112C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE113C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE116C; } @@ -3584,7 +3454,6 @@ L_08AE113C: } L_08AE1144: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE116C; } @@ -3606,7 +3475,6 @@ L_08AE115C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE116C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3614,7 +3482,6 @@ L_08AE116C: } L_08AE1174: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3622,7 +3489,6 @@ L_08AE1174: } L_08AE117C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3631,7 +3497,6 @@ L_08AE117C: L_08AE1184: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE11A0; } @@ -3652,21 +3517,29 @@ L_08AE11A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE11B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AE11C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ADC754, 182u, 141u, 0x08ADC754u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0182_entry, 182u, 141u, 0x08ADC754u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE11C8u) goto L_08AE11C8; AOT_REGCACHE_SYNC_OUT(); return; L_08AE11C8: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_gpr_4 < static_cast(12) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -3678,15 +3551,23 @@ L_08AE11D8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(16600))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE11F0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE120C; } @@ -3701,7 +3582,6 @@ L_08AE11FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE120C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -3718,7 +3598,6 @@ L_08AE1214: } L_08AE1220: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE1280; } @@ -3733,7 +3612,6 @@ L_08AE1228: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1280; } @@ -3749,7 +3627,6 @@ L_08AE1240: } L_08AE1248: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE1270; } @@ -3757,7 +3634,6 @@ L_08AE1248: } L_08AE1250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1280; } @@ -3772,7 +3648,6 @@ L_08AE1258: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1268: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1280; } @@ -3787,7 +3662,6 @@ L_08AE1270: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1280: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -3804,7 +3678,6 @@ L_08AE1288: } L_08AE1294: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE12F4; } @@ -3819,7 +3692,6 @@ L_08AE129C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE12AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE12F4; } @@ -3835,7 +3707,6 @@ L_08AE12B4: } L_08AE12BC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE12E4; } @@ -3843,7 +3714,6 @@ L_08AE12BC: } L_08AE12C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE12F4; } @@ -3858,7 +3728,6 @@ L_08AE12CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE12DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE12F4; } @@ -3873,7 +3742,6 @@ L_08AE12E4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE12F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -3890,7 +3758,6 @@ L_08AE12FC: } L_08AE1308: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE1368; } @@ -3905,7 +3772,6 @@ L_08AE1310: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1320: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1368; } @@ -3921,7 +3787,6 @@ L_08AE1328: } L_08AE1330: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE1358; } @@ -3929,7 +3794,6 @@ L_08AE1330: } L_08AE1338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1368; } @@ -3944,7 +3808,6 @@ L_08AE1340: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1350: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1368; } @@ -3959,7 +3822,6 @@ L_08AE1358: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -3967,7 +3829,6 @@ L_08AE1368: } L_08AE1370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -3982,7 +3843,6 @@ L_08AE1378: goto L_08AE1384; L_08AE1384: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE13BC; } @@ -3997,7 +3857,6 @@ L_08AE138C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE139C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE13BC; } @@ -4005,7 +3864,6 @@ L_08AE139C: } L_08AE13A4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE13BC; } @@ -4020,7 +3878,6 @@ L_08AE13AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE13BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -4030,7 +3887,6 @@ L_08AE13C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE1478; } @@ -4063,7 +3919,6 @@ L_08AE13E8: } L_08AE13F0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AE1468; } @@ -4078,7 +3933,6 @@ L_08AE13F8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1408: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1478; } @@ -4093,7 +3947,6 @@ L_08AE1410: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1420: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1478; } @@ -4108,7 +3961,6 @@ L_08AE1428: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1478; } @@ -4130,7 +3982,6 @@ L_08AE1450: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1460: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1478; } @@ -4145,7 +3996,6 @@ L_08AE1468: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1478: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -4160,7 +4010,6 @@ L_08AE1480: goto L_08AE148C; L_08AE148C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE14C4; } @@ -4175,7 +4024,6 @@ L_08AE1494: AOT_REGCACHE_SYNC_OUT(); return; L_08AE14A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE14C4; } @@ -4183,7 +4031,6 @@ L_08AE14A4: } L_08AE14AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE14C4; } @@ -4198,7 +4045,6 @@ L_08AE14B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE14C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -4207,7 +4053,6 @@ L_08AE14C4: L_08AE14CC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE14EC; } @@ -4225,7 +4070,6 @@ L_08AE14E8: goto L_08AE14EC; L_08AE14EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE14F8; } @@ -4236,7 +4080,6 @@ L_08AE14F4: goto L_08AE14F8; L_08AE14F8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE1510; } @@ -4251,7 +4094,6 @@ L_08AE1500: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1510: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -4266,7 +4108,6 @@ L_08AE1518: goto L_08AE1524; L_08AE1524: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE155C; } @@ -4281,7 +4122,6 @@ L_08AE152C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE153C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE155C; } @@ -4289,7 +4129,6 @@ L_08AE153C: } L_08AE1544: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE155C; } @@ -4304,7 +4143,6 @@ L_08AE154C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE155C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -4313,7 +4151,6 @@ L_08AE155C: L_08AE1564: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE1580; } @@ -4334,14 +4171,23 @@ L_08AE1580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1590: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AE15A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ADC754, 182u, 141u, 0x08ADC754u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0182_entry, 182u, 141u, 0x08ADC754u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE15A8u) goto L_08AE15A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AE15A8: @@ -4355,7 +4201,6 @@ L_08AE15A8: } L_08AE15B4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AE1774; } @@ -4363,7 +4208,6 @@ L_08AE15B4: } L_08AE15BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE16D0; } @@ -4371,7 +4215,6 @@ L_08AE15BC: } L_08AE15C4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE1774; } @@ -4388,7 +4231,6 @@ L_08AE15CC: } L_08AE15D8: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08AE16C8; } @@ -4424,7 +4266,6 @@ L_08AE1610: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE16C8; } @@ -4440,7 +4281,6 @@ L_08AE1628: } L_08AE1630: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE1688; } @@ -4448,7 +4288,6 @@ L_08AE1630: } L_08AE1638: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE16C8; } @@ -4484,7 +4323,6 @@ L_08AE1670: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1680: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE16C8; } @@ -4520,7 +4358,6 @@ L_08AE16B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE16C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1774; } @@ -4537,7 +4374,6 @@ L_08AE16D0: } L_08AE16DC: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08AE1774; } @@ -4573,7 +4409,6 @@ L_08AE1714: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1774; } @@ -4581,7 +4416,6 @@ L_08AE1724: } L_08AE172C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1774; } @@ -4623,7 +4457,17 @@ L_08AE1774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1784: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4780,7 +4624,17 @@ L_08AE1938: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1948: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -4817,7 +4671,6 @@ L_08AE19A0: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE19C4; } @@ -4839,7 +4692,6 @@ L_08AE19C4: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE1AF4; } @@ -4887,7 +4739,6 @@ L_08AE1A1C: L_08AE1A24: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AE1A3C; } @@ -4974,7 +4825,6 @@ L_08AE1AC4: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1AE0; } @@ -4982,7 +4832,6 @@ L_08AE1AC4: } L_08AE1AD8: aot_gpr_31 = (0x08AE1AE0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE1AE0u) goto L_08AE1AE0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE1AE0: @@ -5055,7 +4904,17 @@ L_08AE1B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1B78: aot_gpr_29 = (aot_gpr_29 + static_cast(-1056)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1028), aot_gpr_16); @@ -5106,7 +4965,6 @@ L_08AE1BFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7868))); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE1C58; } @@ -5139,7 +4997,6 @@ L_08AE1C20: } L_08AE1C28: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AE1C50; } @@ -5203,7 +5060,6 @@ L_08AE1C74: L_08AE1C7C: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AE1CA8; } @@ -5220,7 +5076,6 @@ L_08AE1C88: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1CA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1CB0; } @@ -5252,7 +5107,17 @@ L_08AE1CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1CE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5348,7 +5213,6 @@ L_08AE1DAC: } L_08AE1DB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1DD0; } @@ -5356,7 +5220,6 @@ L_08AE1DB8: } L_08AE1DC0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1DD0; } @@ -5364,12 +5227,10 @@ L_08AE1DC0: } L_08AE1DC8: aot_gpr_31 = (0x08AE1DD0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE1DD0u) goto L_08AE1DD0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE1DD0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AE1DF0; } @@ -5385,7 +5246,6 @@ L_08AE1DD8: } L_08AE1DE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1DF0; } @@ -5393,7 +5253,6 @@ L_08AE1DE0: } L_08AE1DE8: aot_gpr_31 = (0x08AE1DF0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE1DF0u) goto L_08AE1DF0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE1DF0: @@ -5420,7 +5279,6 @@ L_08AE1E00: goto L_08AE1E08; L_08AE1E08: aot_gpr_31 = (0x08AE1E10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE1E10u) goto L_08AE1E10; AOT_REGCACHE_SYNC_OUT(); return; L_08AE1E10: @@ -5428,7 +5286,6 @@ L_08AE1E10: goto L_08AE1E14; L_08AE1E14: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE1E24; } @@ -5455,7 +5312,17 @@ L_08AE1E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1E48: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5500,7 +5367,6 @@ L_08AE1EA8: L_08AE1EC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE1EE8; } @@ -5524,7 +5390,6 @@ L_08AE1EE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE1EF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE1F24; } @@ -5559,7 +5424,6 @@ L_08AE1F1C: goto L_08AE1F24; L_08AE1F24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE1F54; } @@ -5597,7 +5461,17 @@ L_08AE1F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE1F78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5663,7 +5537,17 @@ L_08AE2008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE2020: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5729,7 +5613,17 @@ L_08AE20B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE20C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5763,7 +5657,6 @@ L_08AE212C: ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(32))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AE2148; } @@ -5771,7 +5664,6 @@ L_08AE212C: } L_08AE2140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE21F0; } @@ -5780,7 +5672,6 @@ L_08AE2140: L_08AE2148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7688))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE2168; } @@ -5804,7 +5695,6 @@ L_08AE2168: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2170: { const bool branch_taken = ctx.gpr[2] != aot_gpr_16; - // nop if (branch_taken) { goto L_08AE21BC; } @@ -5813,7 +5703,6 @@ L_08AE2170: L_08AE2178: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(48))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AE21BC; } @@ -5891,7 +5780,17 @@ L_08AE2200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE2228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -5927,7 +5826,6 @@ L_08AE2264: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2270: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE228C; } @@ -5936,7 +5834,6 @@ L_08AE2270: L_08AE2278: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE2294; } @@ -5944,7 +5841,6 @@ L_08AE2278: } L_08AE2284: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE22C8; } @@ -5990,7 +5886,17 @@ L_08AE22C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE22DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6042,7 +5948,6 @@ L_08AE2350: } L_08AE2358: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE2368; } @@ -6085,7 +5990,17 @@ L_08AE237C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE23A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6096,7 +6011,6 @@ L_08AE23A0: L_08AE23C0: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AE2418; } @@ -6104,7 +6018,6 @@ L_08AE23C0: } L_08AE23CC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AE2400; } @@ -6129,7 +6042,6 @@ L_08AE23E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE23F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2408; } @@ -6176,7 +6088,17 @@ L_08AE241C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE2438: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6203,7 +6125,6 @@ L_08AE2488: aot_gpr_4 = (ctx.gpr[19] + ctx.gpr[17]); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AE24C4; } @@ -6228,7 +6149,6 @@ L_08AE24AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE24BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE24CC; } @@ -6295,7 +6215,17 @@ L_08AE251C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE2540: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6361,7 +6291,17 @@ L_08AE25D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE25E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6392,7 +6332,17 @@ L_08AE2624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE2634: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -6409,7 +6359,17 @@ L_08AE2648: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE265C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -6579,7 +6539,6 @@ L_08AE2790: } L_08AE279C: aot_gpr_31 = (0x08AE27A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE27A4u) goto L_08AE27A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE27A4: @@ -6604,7 +6563,17 @@ L_08AE27B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE27D8: aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; @@ -6616,7 +6585,6 @@ L_08AE27D8: } L_08AE27E4: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AE27F0; } @@ -6627,11 +6595,20 @@ L_08AE27EC: goto L_08AE27F0; L_08AE27F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE27F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6641,7 +6618,17 @@ L_08AE27F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE280C: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(164), ctx.gpr[17]); @@ -6669,7 +6656,6 @@ L_08AE2854: AOT_REGCACHE_SYNC_OUT(); return; L_08AE285C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE287C; } @@ -6677,7 +6663,6 @@ L_08AE285C: } L_08AE2864: aot_gpr_31 = (0x08AE286Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE286Cu) goto L_08AE286C; AOT_REGCACHE_SYNC_OUT(); return; L_08AE286C: @@ -6723,7 +6708,6 @@ L_08AE28A4: } L_08AE28B0: aot_gpr_31 = (0x08AE28B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE28B8u) goto L_08AE28B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AE28B8: @@ -6745,7 +6729,6 @@ L_08AE28C0: } L_08AE28CC: aot_gpr_31 = (0x08AE28D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE28D4u) goto L_08AE28D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE28D4: @@ -6818,7 +6801,6 @@ L_08AE295C: ctx.gpr[18] = (aot_gpr_5 + ctx.gpr[18]); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_08AE2998; } @@ -6888,7 +6870,6 @@ L_08AE29E0: goto L_08AE29E4; L_08AE29E4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE29F4; } @@ -6923,12 +6904,10 @@ L_08AE2A10: } L_08AE2A1C: aot_gpr_31 = (0x08AE2A24u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2A24u) goto L_08AE2A24; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2A24: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08AE2A60; } @@ -6945,7 +6924,6 @@ L_08AE2A2C: } L_08AE2A38: aot_gpr_31 = (0x08AE2A40u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2A40u) goto L_08AE2A40; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2A40: @@ -6993,7 +6971,6 @@ L_08AE2A84: } L_08AE2A90: aot_gpr_31 = (0x08AE2A98u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2A98u) goto L_08AE2A98; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2A98: @@ -7052,7 +7029,6 @@ L_08AE2AEC: } L_08AE2AF8: aot_gpr_31 = (0x08AE2B00u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2B00u) goto L_08AE2B00; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2B00: @@ -7074,7 +7050,6 @@ L_08AE2B08: } L_08AE2B14: aot_gpr_31 = (0x08AE2B1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2B1Cu) goto L_08AE2B1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2B1C: @@ -7149,7 +7124,6 @@ L_08AE2BA4: ctx.gpr[18] = (aot_gpr_5 + ctx.gpr[18]); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_08AE2BE0; } @@ -7220,7 +7194,6 @@ L_08AE2C2C: goto L_08AE2C30; L_08AE2C30: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2C40; } @@ -7255,7 +7228,6 @@ L_08AE2C5C: } L_08AE2C68: aot_gpr_31 = (0x08AE2C70u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2C70u) goto L_08AE2C70; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2C70: @@ -7296,7 +7268,6 @@ L_08AE2C78: goto L_08AE2CE0; L_08AE2CE0: aot_gpr_31 = (0x08AE2CE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2CE8u) goto L_08AE2CE8; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2CE8: @@ -7324,7 +7295,6 @@ L_08AE2D08: } L_08AE2D14: aot_gpr_31 = (0x08AE2D1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2D1Cu) goto L_08AE2D1C; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2D1C: @@ -7352,7 +7322,6 @@ L_08AE2D34: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2D3C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2D70; } @@ -7367,7 +7336,6 @@ L_08AE2D44: L_08AE2D50: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2D68; } @@ -7383,7 +7351,6 @@ L_08AE2D64: goto L_08AE2D68; L_08AE2D68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7413,7 +7380,6 @@ L_08AE2D84: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2D8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2DC0; } @@ -7428,7 +7394,6 @@ L_08AE2D94: L_08AE2DA0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2DB8; } @@ -7444,7 +7409,6 @@ L_08AE2DB4: goto L_08AE2DB8; L_08AE2DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7474,7 +7438,6 @@ L_08AE2DD4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2DDC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2E10; } @@ -7489,7 +7452,6 @@ L_08AE2DE4: L_08AE2DF0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2E08; } @@ -7505,7 +7467,6 @@ L_08AE2E04: goto L_08AE2E08; L_08AE2E08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7535,7 +7496,6 @@ L_08AE2E24: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2E2C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2E60; } @@ -7550,7 +7510,6 @@ L_08AE2E34: L_08AE2E40: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2E58; } @@ -7566,7 +7525,6 @@ L_08AE2E54: goto L_08AE2E58; L_08AE2E58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7596,7 +7554,6 @@ L_08AE2E74: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2E7C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2EB0; } @@ -7611,7 +7568,6 @@ L_08AE2E84: L_08AE2E90: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2EA8; } @@ -7627,7 +7583,6 @@ L_08AE2EA4: goto L_08AE2EA8; L_08AE2EA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7656,7 +7611,6 @@ L_08AE2EC4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2ED0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7686,7 +7640,6 @@ L_08AE2EF4: } L_08AE2F00: aot_gpr_31 = (0x08AE2F08u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2F08u) goto L_08AE2F08; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2F08: @@ -7713,7 +7666,6 @@ L_08AE2F24: } L_08AE2F30: aot_gpr_31 = (0x08AE2F38u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE2F38u) goto L_08AE2F38; AOT_REGCACHE_SYNC_OUT(); return; L_08AE2F38: @@ -7724,7 +7676,6 @@ L_08AE2F38: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2F44: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2F78; } @@ -7739,7 +7690,6 @@ L_08AE2F4C: L_08AE2F58: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2F70; } @@ -7755,7 +7705,6 @@ L_08AE2F6C: goto L_08AE2F70; L_08AE2F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7769,7 +7718,6 @@ L_08AE2F78: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2F84: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2FB8; } @@ -7784,7 +7732,6 @@ L_08AE2F8C: L_08AE2F98: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2FB0; } @@ -7800,7 +7747,6 @@ L_08AE2FAC: goto L_08AE2FB0; L_08AE2FB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7814,7 +7760,6 @@ L_08AE2FB8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE2FC4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE2FF8; } @@ -7829,7 +7774,6 @@ L_08AE2FCC: L_08AE2FD8: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE2FF0; } @@ -7845,7 +7789,6 @@ L_08AE2FEC: goto L_08AE2FF0; L_08AE2FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7859,7 +7802,6 @@ L_08AE2FF8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3004: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7874,7 +7816,6 @@ L_08AE300C: L_08AE3018: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE3030; } @@ -7890,7 +7831,6 @@ L_08AE302C: goto L_08AE3030; L_08AE3030: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AE3060; } @@ -7937,12 +7877,10 @@ L_08AE307C: } L_08AE3088: aot_gpr_31 = (0x08AE3090u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE3090u) goto L_08AE3090; AOT_REGCACHE_SYNC_OUT(); return; L_08AE3090: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AE2CE0; } @@ -7960,7 +7898,6 @@ L_08AE3098: } L_08AE30A8: aot_gpr_31 = (0x08AE30B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE30B0u) goto L_08AE30B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE30B0: @@ -7994,7 +7931,17 @@ L_08AE30CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE30FC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4)))))); aot_gpr_6 = (0u + static_cast(-2)); @@ -8060,7 +8007,17 @@ L_08AE30FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE31F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8162,7 +8119,6 @@ L_08AE3318: L_08AE3324: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3338; } @@ -8190,7 +8146,17 @@ L_08AE3340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3358: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8210,7 +8176,6 @@ L_08AE3374: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3394; } @@ -8224,7 +8189,6 @@ L_08AE338C: L_08AE3394: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE33A8; } @@ -8259,7 +8223,6 @@ L_08AE33D0: L_08AE33DC: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE33F0; } @@ -8282,7 +8245,17 @@ L_08AE33F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3404: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8290,7 +8263,6 @@ L_08AE3404: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08AE3424u); - // nop goto L_08AE3BD8; L_08AE3424: aot_gpr_4 = (ctx.gpr[17] + static_cast(48)); @@ -8318,7 +8290,17 @@ L_08AE3424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3444: aot_gpr_5 = (aot_gpr_5 + static_cast(12)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -8331,11 +8313,20 @@ L_08AE3444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3464: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AE3498; } @@ -8345,7 +8336,6 @@ L_08AE3470: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(84)))))); aot_gpr_6 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AE3498; } @@ -8368,7 +8358,6 @@ L_08AE3480: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE34A8; } @@ -8381,18 +8370,37 @@ L_08AE3498: goto L_08AE34A8; L_08AE34A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE34B0: jump_target = aot_gpr_31; aot_fpr_0 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE34B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(85)))))); @@ -8462,7 +8470,6 @@ L_08AE34D8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3530; } @@ -8483,7 +8490,6 @@ L_08AE3508: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3528: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3530; } @@ -8496,7 +8502,17 @@ L_08AE3530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE353C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8513,7 +8529,17 @@ L_08AE3550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3564: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(84)))))); aot_gpr_5 = (aot_gpr_5 | 1u); @@ -8525,7 +8551,17 @@ L_08AE3564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3580: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(0), static_cast(0u)); @@ -8560,7 +8596,6 @@ L_08AE35C4: goto L_08AE35D8; L_08AE35D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE368C; } @@ -8613,7 +8648,6 @@ L_08AE3634: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_4); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[14]) || std::isnan(ctx.fpr[15])) && ctx.fpr[14] == ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -8625,7 +8659,6 @@ L_08AE3664: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -8641,7 +8674,6 @@ L_08AE3680: goto L_08AE3684; L_08AE3684: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE36F0; } @@ -8743,9 +8775,7 @@ L_08AE374C: L_08AE3770: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3964))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_0 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE3870; } @@ -8768,7 +8798,6 @@ L_08AE378C: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AE3810; } @@ -8808,7 +8837,6 @@ L_08AE37EC: L_08AE37F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3810; } @@ -8877,7 +8905,17 @@ L_08AE3874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3890: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4)))))); @@ -8889,7 +8927,6 @@ L_08AE3890: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE3964; } @@ -8928,7 +8965,6 @@ L_08AE38E4: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[17] = (0u | 1u); goto L_08AE3908; @@ -8937,7 +8973,6 @@ L_08AE38E4: L_08AE3908: aot_gpr_4 = (ctx.gpr[17] & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3964; } @@ -9012,14 +9047,34 @@ L_08AE3980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE39B4: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE39BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[18]); @@ -9048,7 +9103,6 @@ L_08AE39FC: ctx.gpr[19] = (0u | 1u); aot_gpr_4 = (aot_gpr_4 >> 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AE3A34; } @@ -9064,7 +9118,6 @@ L_08AE3A24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(36)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3A48; } @@ -9073,7 +9126,6 @@ L_08AE3A24: L_08AE3A34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE3A64; } @@ -9081,7 +9133,6 @@ L_08AE3A34: } L_08AE3A40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3B58; } @@ -9102,7 +9153,6 @@ L_08AE3A48: } L_08AE3A64: { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AE3A40; } @@ -9122,7 +9172,6 @@ L_08AE3A74: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3A84: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_0)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); if (branch_taken) { @@ -9137,7 +9186,6 @@ L_08AE3A94: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3A9C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE3AB8; } @@ -9151,7 +9199,6 @@ L_08AE3AA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3AB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE3AD0; } @@ -9172,7 +9219,6 @@ L_08AE3AC0: } L_08AE3AC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3AF8; } @@ -9194,7 +9240,6 @@ L_08AE3ADC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3AE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE3AF0; } @@ -9205,7 +9250,6 @@ L_08AE3AEC: goto L_08AE3AF0; L_08AE3AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3B58; } @@ -9218,7 +9262,6 @@ L_08AE3AF8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3B00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE3B2C; } @@ -9231,7 +9274,6 @@ L_08AE3B08: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE3B34; } @@ -9239,7 +9281,6 @@ L_08AE3B08: } L_08AE3B24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3B48; } @@ -9260,7 +9301,6 @@ L_08AE3B34: AOT_REGCACHE_SYNC_OUT(); return; L_08AE3B3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE3B48; } @@ -9291,7 +9331,17 @@ L_08AE3B58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3B78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9299,7 +9349,6 @@ L_08AE3B78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3B9C; } @@ -9313,7 +9362,6 @@ L_08AE3B94: L_08AE3B9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3BB0; } @@ -9339,14 +9387,34 @@ L_08AE3BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3BD0: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3BD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(84)))))); @@ -9356,7 +9424,6 @@ L_08AE3BD8: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(100), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3C18; } @@ -9374,7 +9441,6 @@ L_08AE3C00: } L_08AE3C10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3CA0; } @@ -9382,7 +9448,6 @@ L_08AE3C10: } L_08AE3C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE3D10; } @@ -9391,7 +9456,6 @@ L_08AE3C18: L_08AE3C20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3C90; } @@ -9416,7 +9480,6 @@ L_08AE3C2C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(84)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3C90; } @@ -9487,7 +9550,6 @@ L_08AE3CA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(84)))))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3CF4; } @@ -9554,7 +9616,17 @@ L_08AE3D10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3D28: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); @@ -9664,11 +9736,20 @@ L_08AE3E3C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3E58: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -9722,14 +9803,22 @@ L_08AE3E58: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3E80: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3EC4; } @@ -9740,7 +9829,6 @@ L_08AE3E88: aot_gpr_6 = (0u | 80u); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AE3EB4; } @@ -9750,7 +9838,6 @@ L_08AE3E9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE3EBC; } @@ -9785,11 +9872,20 @@ L_08AE3EC4: goto L_08AE3EC8; L_08AE3EC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9805,7 +9901,6 @@ L_08AE3EE4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AE3F04; } @@ -9815,7 +9910,6 @@ L_08AE3EF4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AE3F78; } @@ -9826,7 +9920,6 @@ L_08AE3F04: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE3F20; } @@ -9842,7 +9935,6 @@ L_08AE3F18: } L_08AE3F20: aot_gpr_31 = (0x08AE3F28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE3F28u) goto L_08AE3F28; AOT_REGCACHE_SYNC_OUT(); return; L_08AE3F28: @@ -9862,7 +9954,6 @@ L_08AE3F38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(256))); aot_gpr_4 = (aot_gpr_4 < static_cast(51) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE3F50; } @@ -9888,7 +9979,6 @@ L_08AE3F58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(264))); aot_gpr_4 = (aot_gpr_4 < static_cast(51) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE3F70; } @@ -9921,7 +10011,17 @@ L_08AE3F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3F8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -9992,7 +10092,17 @@ L_08AE3F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE3FE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0184.cpp b/profiles/vcs/generated/generated_unit_0184.cpp index 58494e3..e80cb66 100644 --- a/profiles/vcs/generated/generated_unit_0184.cpp +++ b/profiles/vcs/generated/generated_unit_0184.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0184[4091] = { - 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 7, 0, 8, 0, 9, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 16, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 24, 0, 25, 0, 26, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 30, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 46, 47, 0, 0, 0, 0, 0, 0, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, 52, 0, 53, 0, 0, 0, 54, 0, - 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 61, 0, 0, 0, 0, 0, 62, 63, 0, - 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 76, 0, 77, - 0, 78, 0, 79, 80, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 0, 88, 0, 89, 0, 90, 91, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, - 0, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 96, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 100, 0, - 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, - 106, 107, 0, 0, 0, 0, 0, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 111, 0, 0, 0, 0, 0, 112, 113, 0, 0, 114, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 118, 0, 0, 119, 0, 0, 120, 0, 121, 0, 0, 0, 122, 0, 123, 0, 124, 0, 0, 0, 125, 0, 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, - 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 0, 130, 131, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, - 0, 134, 0, 0, 0, 135, 0, 136, 137, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 0, 0, - 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 150, 151, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, - 0, 0, 155, 0, 0, 0, 0, 0, 156, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, 0, 0, 167, 0, 168, 0, 169, 0, - 0, 170, 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 174, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 175, 0, 0, 0, 176, 0, 177, 0, 178, 179, 0, 0, 0, 0, 0, 0, 0, 180, 181, 0, 0, 0, 182, 183, 0, 0, 0, - 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, - 192, 0, 193, 194, 0, 0, 0, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 0, 199, 200, 0, - 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 0, 204, 0, 205, 206, 0, 0, 0, - 0, 0, 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 211, 212, 0, 0, 0, 0, 0, 0, - 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, - 218, 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 221, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 0, - 0, 0, 225, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 0, - 0, 0, 232, 233, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 242, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, - 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 247, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, - 0, 0, 254, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 262, 263, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 267, 0, 0, 268, 0, 269, 270, - 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 274, 0, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 282, 0, 0, 0, 0, - 0, 0, 283, 0, 284, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 287, 288, 0, 0, 0, 0, 0, 289, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 294, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 0, 0, 0, - 0, 0, 0, 0, 299, 0, 300, 301, 0, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 305, 0, 0, 0, 0, - 0, 0, 0, 306, 307, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 311, 312, 0, 0, 0, - 0, 0, 0, 0, 0, 313, 0, 314, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, 317, 318, 0, 0, 0, 0, 0, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 0, 0, 328, 0, 0, 0, 0, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 334, - 0, 0, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 340, 0, - 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 343, 0, 344, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 0, 348, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, - 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 358, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, - 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 363, 0, 0, 364, 0, 0, 365, 366, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 368, - 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 0, 0, 0, 371, 372, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 374, 0, 0, 375, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 383, 0, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 0, 387, 0, 388, - 0, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, - 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 399, 0, 0, 400, 0, 0, 0, 401, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 403, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 406, 0, 0, 0, 0, 0, 407, 408, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 413, - 0, 0, 414, 415, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 422, 0, 423, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, - 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 432, 433, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 436, 0, - 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 439, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, - 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 448, 0, - 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, - 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 455, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, - 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, - 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 469, 0, 0, 0, 470, 0, 0, 0, 471, 0, 0, 472, - 0, 0, 0, 473, 0, 474, 0, 475, 0, 476, 477, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 479, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, - 481, 0, 0, 0, 0, 0, 482, 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 487, - 0, 0, 488, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 495, 0, 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, - 498, 0, 499, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 0, 0, 506, 0, 0, 0, 507, 0, 508, 509, 0, 510, 0, 0, 0, 0, - 0, 511, 0, 512, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 517, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 520, 0, 0, 0, 521, 0, 0, 522, - 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 526, 0, 0, 527, 0, 0, 528, 0, 0, 0, - 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 531, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 0, - 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 542, 0, 0, 543, 0, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, - 0, 549, 0, 0, 0, 550, 0, 0, 551, 0, 0, 552, 0, 0, 0, 553, 0, 0, 554, 0, 0, 555, 0, 0, 556, 0, 0, 557, 0, 0, 0, 0, - 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 563, 564, 0, 565, 0, 0, 0, 0, 0, 0, 566, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 570, 0, 0, 571, 0, 0, 0, 572, 0, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 578, 0, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, 0, 582, 0, 0, - 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 587, 588, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 592, 0, 0, 0, 0, 0, 593, 594, 0, 0, 0, 0, - 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 599, 0, - 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, - 0, 0, 0, 605, 0, 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 609, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 0, - 0, 0, 612, 613, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 616, 0, 0, 0, 617, 0, 0, 618, 0, - 0, 619, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, - 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 0, 0, 0, 631, 0, 0, 0, 0, 632, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 636, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, - 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 645, 0, 0, 646, 0, 647, 0, 648, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, - 0, 0, 653, 0, 0, 0, 0, 654, 0, 655, 0, 0, 656, 0, 657, 658, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, - 0, 0, 661, 0, 0, 0, 0, 0, 662, 0, 0, 663, 664, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 668, 0, 0, 669, 0, 670, 671, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, - 0, 674, 0, 0, 675, 0, 0, 0, 0, 0, 676, 677, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, - 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 684, 0, 685, 0, 0, 0, 0, - 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, 690, 0, 691, 0, 0, 0, 0, 0, 692, 0, 0, - 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 0, 695, 0, 696, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, - 0, 699, 0, 0, 700, 0, 701, 0, 702, 0, 703, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, - 0, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, - 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 714, 0, 0, 715, 0, 0, 0, 716, 0, 0, 717, 0, 0, 718, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 721, 0, 0, 0, 0, 722, 723, 0, 0, 724, 0, 725, 0, 0, 726, 727, 0, 0, 0, 0, 0, 0, 728, 729, 0, 0, 0, 0, 0, 0, 0, - 0, 730, 0, 731, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 733, 0, 0, 0, 0, 0, 734, 735, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 739, 0, 740, 0, 0, 0, 741, 0, 0, 0, - 742, 743, 0, 0, 0, 744, 0, 745, 0, 746, 0, 0, 747, 0, 0, 748, 0, 749, 0, 0, 0, 0, 0, 750, 0, 751, 0, 752, 753, 0, 0, 754, - 0, 755, 756, 0, 0, 0, 757, 0, 758, 0, 759, 0, 0, 0, 760, 0, 761, 0, 762, 0, 0, 0, 0, 0, 763, 0, 764, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0184[64] = { + 0x120002040A940921ull, 0x54A04000A004C820ull, 0x1004024808040800ull, 0x0010100090004090ull, + 0x4524010081904024ull, 0x0002401060901445ull, 0xA509004012008010ull, 0x281A82400402A05Aull, + 0x501200204804C120ull, 0x0040900098240503ull, 0x4004182405115149ull, 0x1024040C120281A2ull, + 0x4000830480A01A40ull, 0x54A8008020210000ull, 0x18C06A2004800106ull, 0x0120020802401004ull, + 0x1A0900206090140Dull, 0x01042401030480A0ull, 0x1202806424022211ull, 0x0812008204A4010Cull, + 0x0408240040852002ull, 0x0348080021200204ull, 0x06090140D2401020ull, 0x418084140D002401ull, + 0x0900420048080900ull, 0x18900418084140D0ull, 0x00401200830480A0ull, 0x9014030900102024ull, + 0x0200548444802060ull, 0x1004802000200540ull, 0xA019240105112008ull, 0x0041111200830480ull, + 0x88A10A10A10A1089ull, 0x20C1202806248020ull, 0x000A004C82012000ull, 0x1200804080054A04ull, + 0x4140350000000000ull, 0x0041080240041808ull, 0x2008000240400200ull, 0x2041800009001001ull, + 0x4001200204001200ull, 0x202806A891120020ull, 0x40000824890040C1ull, 0x0B444AAD0A149000ull, + 0x912008004284004Aull, 0x0888900412448020ull, 0x4010491200855202ull, 0x0000900209248922ull, + 0x0400120081602020ull, 0x2451400200824890ull, 0x0C12028061200820ull, 0x2400844040812002ull, + 0x4890040C12028068ull, 0x2115520204480082ull, 0x0002400102508900ull, 0x8020855200808020ull, + 0x400419048020D284ull, 0x40040C1202806902ull, 0x20A824010A404082ull, 0x8020455240042920ull, + 0x0040480201010004ull, 0x018194C240082489ull, 0x114048001030480Aull, 0x050545469A8292A3ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0184[64] = { + 1u, 14u, 27u, 35u, 42u, 55u, 67u, 78u, 94u, 106u, 118u, 134u, 148u, 160u, 170u, 184u, + 192u, 207u, 218u, 232u, 244u, 254u, 264u, 277u, 290u, 299u, 313u, 323u, 335u, 347u, 355u, 369u, + 380u, 397u, 410u, 419u, 430u, 437u, 446u, 452u, 460u, 467u, 481u, 492u, 511u, 523u, 535u, 549u, + 561u, 570u, 583u, 595u, 605u, 619u, 633u, 642u, 653u, 667u, 680u, 693u, 707u, 714u, 730u, 742u, }; void recomp_unit_0184_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0184_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AE4000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0184[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0184[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0184[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AE4000; @@ -970,7 +877,6 @@ L_08AE402C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE4048: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AE4088; } @@ -989,7 +895,6 @@ L_08AE405C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE4064: { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AE4088; } @@ -1021,7 +926,17 @@ L_08AE4088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE40A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -1055,7 +970,6 @@ L_08AE40F0: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -1067,9 +981,7 @@ L_08AE4114: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE413C; } @@ -1109,7 +1021,6 @@ L_08AE4148: } L_08AE4174: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE41B8; } @@ -1155,9 +1066,7 @@ L_08AE417C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE41E8; } @@ -1186,7 +1095,6 @@ L_08AE41B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE41D4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE41F0; } @@ -1259,7 +1167,17 @@ L_08AE4248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE426C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1310,7 +1228,17 @@ L_08AE42C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE42F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1339,7 +1267,17 @@ L_08AE431C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4338: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1402,7 +1340,17 @@ L_08AE43B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE43D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1436,7 +1384,6 @@ L_08AE4414: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_17 = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -1448,9 +1395,7 @@ L_08AE4438: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE4460; } @@ -1491,7 +1436,17 @@ L_08AE447C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE44A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1514,7 +1469,6 @@ L_08AE44C8: L_08AE44D4: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE4508; } @@ -1604,7 +1558,6 @@ L_08AE455C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE4578; } @@ -1626,7 +1579,17 @@ L_08AE4578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4590: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1663,7 +1626,6 @@ L_08AE45C4: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AE4610; @@ -1687,7 +1649,17 @@ L_08AE4610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE463C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1724,7 +1696,17 @@ L_08AE4670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4698: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1774,7 +1756,6 @@ L_08AE46E8: } L_08AE46F4: { const bool branch_taken = ctx.gpr[6] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AE4710; } @@ -1790,7 +1771,6 @@ L_08AE46FC: } L_08AE4704: { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE4710; } @@ -1801,7 +1781,6 @@ L_08AE470C: goto L_08AE4710; L_08AE4710: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE4744; } @@ -1814,7 +1793,6 @@ L_08AE4718: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AE473C; } @@ -1845,7 +1823,17 @@ L_08AE4744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4768: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1881,7 +1869,6 @@ L_08AE47A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE47BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE47CC; } @@ -1948,7 +1935,6 @@ L_08AE4820: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE483C; } @@ -1960,7 +1946,6 @@ L_08AE4838: L_08AE483C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE486C; } @@ -1984,7 +1969,6 @@ L_08AE4848: L_08AE486C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE4878; } @@ -2004,7 +1988,17 @@ L_08AE4878: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4894: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2042,7 +2036,6 @@ L_08AE48D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AE48F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE4900; } @@ -2109,7 +2102,6 @@ L_08AE4954: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE4970; } @@ -2121,7 +2113,6 @@ L_08AE496C: L_08AE4970: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE49B0; } @@ -2146,7 +2137,6 @@ L_08AE497C: L_08AE49B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE49BC; } @@ -2166,7 +2156,17 @@ L_08AE49BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE49D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2189,7 +2189,6 @@ L_08AE4A00: L_08AE4A0C: aot_gpr_5 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE4A40; } @@ -2279,7 +2278,6 @@ L_08AE4A94: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE4AB0; } @@ -2301,7 +2299,17 @@ L_08AE4AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4AC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2327,7 +2335,6 @@ L_08AE4B04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE4B1C; } @@ -2394,7 +2401,6 @@ L_08AE4B70: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE4B8C; } @@ -2417,7 +2423,17 @@ L_08AE4B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4BA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2446,7 +2462,17 @@ L_08AE4BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2468,7 +2494,6 @@ L_08AE4C18: AOT_REGCACHE_SYNC_OUT(); return; L_08AE4C24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE4C30; } @@ -2529,7 +2554,6 @@ L_08AE4C88: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE4CA4; } @@ -2551,7 +2575,17 @@ L_08AE4CA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4CBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2615,7 +2649,17 @@ L_08AE4D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2641,7 +2685,6 @@ L_08AE4D9C: aot_gpr_16 = (aot_gpr_16 + aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE4DDC; } @@ -2654,7 +2697,6 @@ L_08AE4DCC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE4DD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE4E08; } @@ -2663,7 +2705,6 @@ L_08AE4DD4: L_08AE4DDC: aot_gpr_5 = (static_cast(aot_gpr_4) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE4DF8; } @@ -2676,7 +2717,6 @@ L_08AE4DE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AE4DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE4E08; } @@ -2704,7 +2744,17 @@ L_08AE4E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4E20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -2737,7 +2787,6 @@ L_08AE4E68: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(20))); aot_fpr_22 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2747,9 +2796,7 @@ L_08AE4E68: } L_08AE4E94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE4EAC; } @@ -2765,7 +2812,6 @@ L_08AE4EA4: } L_08AE4EAC: aot_gpr_31 = (0x08AE4EB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE4EB4u) goto L_08AE4EB4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE4EB4: @@ -2777,9 +2823,7 @@ L_08AE4EB8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_22 = aot_fpr_22 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE4EDC; } @@ -2790,9 +2834,7 @@ L_08AE4ED8: goto L_08AE4EDC; L_08AE4EDC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE4EF0; } @@ -2827,7 +2869,17 @@ L_08AE4F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4F30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2873,7 +2925,17 @@ L_08AE4F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE4FA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2901,9 +2963,7 @@ L_08AE4FE0: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE5008; } @@ -2970,7 +3030,6 @@ L_08AE505C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5078; } @@ -2993,7 +3052,17 @@ L_08AE5078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5094: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3025,7 +3094,6 @@ L_08AE50CC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE50E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE50F0; } @@ -3086,7 +3154,6 @@ L_08AE5148: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5164; } @@ -3109,7 +3176,17 @@ L_08AE5164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5180: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3150,7 +3227,17 @@ L_08AE51C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE51E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3178,7 +3265,17 @@ L_08AE5210: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5224: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3194,7 +3291,17 @@ L_08AE5234: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5244: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3285,7 +3392,6 @@ L_08AE52F0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(ctx.gpr[6]) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE530C; } @@ -3303,7 +3409,17 @@ L_08AE530C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5320: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3331,7 +3447,6 @@ L_08AE5354: L_08AE535C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5384; } @@ -3360,7 +3475,17 @@ L_08AE5384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE539C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3403,7 +3528,17 @@ L_08AE53EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5404: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3452,7 +3587,17 @@ L_08AE545C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5478: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3497,7 +3642,17 @@ L_08AE54CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE54E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3520,7 +3675,17 @@ L_08AE5508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5524: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3592,7 +3757,6 @@ L_08AE55CC: goto L_08AE55D8; L_08AE55D8: { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08AE5614; } @@ -3629,7 +3793,17 @@ L_08AE5614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5630: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3652,7 +3826,6 @@ L_08AE5658: L_08AE5664: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(310))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE5678; } @@ -3719,7 +3892,6 @@ L_08AE56CC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE56E8; } @@ -3741,7 +3913,17 @@ L_08AE56E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5700: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3780,9 +3962,7 @@ L_08AE5734: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE5768; } @@ -3851,7 +4031,6 @@ L_08AE57BC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(ctx.gpr[6]) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE57E0; } @@ -3873,7 +4052,17 @@ L_08AE57E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE57F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3908,7 +4097,17 @@ L_08AE582C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE584C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3951,7 +4150,17 @@ L_08AE58A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE58B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3988,9 +4197,7 @@ L_08AE58EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE5918; } @@ -4059,7 +4266,6 @@ L_08AE596C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(ctx.gpr[6]) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5990; } @@ -4081,7 +4287,17 @@ L_08AE5990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE59A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4166,7 +4382,6 @@ L_08AE5A48: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5A64; } @@ -4188,7 +4403,17 @@ L_08AE5A64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5A7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4225,7 +4450,17 @@ L_08AE5AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5AD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4272,7 +4507,17 @@ L_08AE5B34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5B50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4360,7 +4605,6 @@ L_08AE5BFC: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5C18; } @@ -4383,7 +4627,17 @@ L_08AE5C18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5C34: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(276), aot_gpr_16); @@ -4417,7 +4671,6 @@ L_08AE5C78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(8))); aot_gpr_4 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE5C9C; } @@ -4440,7 +4693,6 @@ L_08AE5C9C: goto L_08AE5CA8; L_08AE5CA8: aot_gpr_31 = (0x08AE5CB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE5CB0u) goto L_08AE5CB0; AOT_REGCACHE_SYNC_OUT(); return; L_08AE5CB0: @@ -4480,7 +4732,6 @@ L_08AE5CE4: goto L_08AE5D18; L_08AE5D18: aot_gpr_31 = (0x08AE5D20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE5D20u) goto L_08AE5D20; AOT_REGCACHE_SYNC_OUT(); return; L_08AE5D20: @@ -4524,7 +4775,17 @@ L_08AE5D54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5D94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4571,7 +4832,17 @@ L_08AE5DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4628,7 +4899,17 @@ L_08AE5E68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5E80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4657,7 +4938,6 @@ L_08AE5EB4: L_08AE5EC0: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AE5ED0; } @@ -4718,7 +4998,6 @@ L_08AE5F28: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE5F44; } @@ -4740,7 +5019,17 @@ L_08AE5F44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4799,7 +5088,17 @@ L_08AE5FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE5FD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -4849,7 +5148,6 @@ L_08AE6030: goto L_08AE6044; L_08AE6044: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AE6060; } @@ -4875,7 +5173,6 @@ L_08AE6060: goto L_08AE6074; L_08AE6074: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AE6090; } @@ -4901,7 +5198,6 @@ L_08AE6090: goto L_08AE60A4; L_08AE60A4: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AE60C0; } @@ -4927,7 +5223,6 @@ L_08AE60C0: goto L_08AE60D4; L_08AE60D4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE60EC; } @@ -4962,7 +5257,17 @@ L_08AE60FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6114: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4995,7 +5300,6 @@ L_08AE6154: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE6168; } @@ -5056,7 +5360,6 @@ L_08AE61C0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE61DC; } @@ -5078,7 +5381,17 @@ L_08AE61DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE61F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_16); @@ -5112,7 +5425,6 @@ L_08AE6240: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[2] | 0u); if (branch_taken) { @@ -5124,9 +5436,7 @@ L_08AE6264: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE628C; } @@ -5166,7 +5476,6 @@ L_08AE6298: } L_08AE62C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE6308; } @@ -5212,9 +5521,7 @@ L_08AE62CC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE6338; } @@ -5231,7 +5538,6 @@ L_08AE6308: AOT_REGCACHE_SYNC_OUT(); return; L_08AE6324: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE6340; } @@ -5304,7 +5610,17 @@ L_08AE6398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE63BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5462,7 +5778,6 @@ L_08AE64A0: goto L_08AE64A8; L_08AE64A8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE64B4; } @@ -5525,7 +5840,6 @@ L_08AE650C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE6530; } @@ -5547,7 +5861,17 @@ L_08AE6530: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6548: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(ctx.fpr[20]), std::bit_cast(aot_fpr_22), aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5577,7 +5901,6 @@ L_08AE6584: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -5588,9 +5911,7 @@ L_08AE6584: L_08AE65AC: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE65D8; } @@ -5647,7 +5968,17 @@ L_08AE6624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6658: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5687,7 +6018,17 @@ L_08AE6684: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE66CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5725,7 +6066,17 @@ L_08AE6700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6730: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5787,9 +6138,7 @@ L_08AE676C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE67C0; } @@ -5821,7 +6170,17 @@ L_08AE67D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE67F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5872,7 +6231,17 @@ L_08AE6868: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6884: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5923,7 +6292,17 @@ L_08AE68F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6914: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5966,7 +6345,6 @@ L_08AE6960: L_08AE6970: aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE699C; } @@ -5981,7 +6359,6 @@ L_08AE697C: AOT_REGCACHE_SYNC_OUT(); return; L_08AE698C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE69A8; } @@ -5997,7 +6374,6 @@ L_08AE6994: } L_08AE699C: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AE69A8; } @@ -6058,7 +6434,6 @@ L_08AE6A00: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE6A1C; } @@ -6081,7 +6456,17 @@ L_08AE6A1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6A38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6137,7 +6522,17 @@ L_08AE6A94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6AAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6180,7 +6575,6 @@ L_08AE6B30: L_08AE6B3C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[20] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AE6C64; } @@ -6233,7 +6627,6 @@ L_08AE6B88: goto L_08AE6B8C; L_08AE6B8C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6246,7 +6639,6 @@ L_08AE6B94: AOT_REGCACHE_SYNC_OUT(); return; L_08AE6B9C: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AE6BB8; } @@ -6260,7 +6652,6 @@ L_08AE6BA4: L_08AE6BAC: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6270,7 +6661,6 @@ L_08AE6BB8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6286,7 +6676,6 @@ L_08AE6BC8: goto L_08AE6BD8; L_08AE6BD8: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6297,7 +6686,6 @@ L_08AE6BE0: goto L_08AE6BE4; L_08AE6BE4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6317,7 +6705,6 @@ L_08AE6BEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE6C04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6341,7 +6728,6 @@ L_08AE6C18: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(5436), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE6C5C; } @@ -6391,7 +6777,17 @@ L_08AE6C78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6CAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6436,7 +6832,17 @@ L_08AE6CFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6492,7 +6898,17 @@ L_08AE6D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6550,7 +6966,17 @@ L_08AE6DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6E04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6578,7 +7004,6 @@ L_08AE6E30: AOT_REGCACHE_SYNC_OUT(); return; L_08AE6E38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE6E48; } @@ -6598,7 +7023,17 @@ L_08AE6E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6E5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6654,7 +7089,17 @@ L_08AE6EB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6677,7 +7122,6 @@ L_08AE6F04: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE6F3C; } @@ -6714,7 +7158,6 @@ L_08AE6F2C: L_08AE6F3C: ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE6F6C; } @@ -6756,7 +7199,17 @@ L_08AE6F6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE6F84: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6847,7 +7300,6 @@ L_08AE7014: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + aot_fpr_13; goto L_08AE7034; @@ -6859,9 +7311,7 @@ L_08AE7034: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE7058; } @@ -6889,7 +7339,17 @@ L_08AE7060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE707C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6929,7 +7389,17 @@ L_08AE70B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE70E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6985,7 +7455,17 @@ L_08AE7144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE715C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7012,9 +7492,7 @@ L_08AE7184: aot_fpr_12 = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE71C0; } @@ -7026,9 +7504,7 @@ L_08AE71B8: goto L_08AE71C0; L_08AE71C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE71D8; } @@ -7040,7 +7516,6 @@ L_08AE71D0: goto L_08AE71D8; L_08AE71D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08AE71F4; @@ -7075,7 +7550,17 @@ L_08AE7214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE722C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7099,7 +7584,6 @@ L_08AE7260: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(615)))))); aot_gpr_5 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE7278; } @@ -7160,7 +7644,6 @@ L_08AE72D0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE72EC; } @@ -7182,7 +7665,17 @@ L_08AE72EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7304: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7226,7 +7719,17 @@ L_08AE735C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7378: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7254,7 +7757,17 @@ L_08AE73A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE73BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7284,7 +7797,6 @@ L_08AE73F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE740C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE7418; } @@ -7345,7 +7857,6 @@ L_08AE7470: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE748C; } @@ -7368,7 +7879,17 @@ L_08AE748C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE74A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7424,7 +7945,17 @@ L_08AE7504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE751C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7465,7 +7996,17 @@ L_08AE7568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7584: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -7480,7 +8021,6 @@ L_08AE7584: L_08AE75A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE75C0; } @@ -7493,7 +8033,6 @@ L_08AE75B0: AOT_REGCACHE_SYNC_OUT(); return; L_08AE75B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE75E0; } @@ -7525,7 +8064,17 @@ L_08AE75E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE75F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7589,7 +8138,17 @@ L_08AE7664: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7680: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7720,7 +8279,17 @@ L_08AE773C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE775C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7736,7 +8305,6 @@ L_08AE775C: L_08AE7784: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE7798; } @@ -7744,7 +8312,6 @@ L_08AE7784: } L_08AE7790: aot_gpr_31 = (0x08AE7798u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE7798u) goto L_08AE7798; AOT_REGCACHE_SYNC_OUT(); return; L_08AE7798: @@ -7754,7 +8321,6 @@ L_08AE7798: AOT_REGCACHE_SYNC_OUT(); return; L_08AE77A0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE77BC; } @@ -7781,7 +8347,17 @@ L_08AE77BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE77D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7805,7 +8381,6 @@ L_08AE7808: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE7824; } @@ -7822,7 +8397,6 @@ L_08AE781C: L_08AE7824: ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE7838; } @@ -7852,7 +8426,17 @@ L_08AE783C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7854: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7908,7 +8492,17 @@ L_08AE78B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE78C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7949,7 +8543,6 @@ L_08AE7920: AOT_REGCACHE_SYNC_OUT(); return; L_08AE792C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE7938; } @@ -8010,7 +8603,6 @@ L_08AE7990: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE79AC; } @@ -8033,7 +8625,17 @@ L_08AE79AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE79C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8076,7 +8678,17 @@ L_08AE7A1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7A38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8108,7 +8720,17 @@ L_08AE7A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7A80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8164,7 +8786,17 @@ L_08AE7ADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7AF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8185,7 +8817,6 @@ L_08AE7B14: L_08AE7B20: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE7B34; } @@ -8204,7 +8835,17 @@ L_08AE7B34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8271,7 +8912,17 @@ L_08AE7BB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7BD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8311,7 +8962,17 @@ L_08AE7C08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7C40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8336,7 +8997,17 @@ L_08AE7C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7C84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8370,7 +9041,17 @@ L_08AE7CB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8426,7 +9107,17 @@ L_08AE7D34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7D4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8450,7 +9141,6 @@ L_08AE7D84: aot_gpr_17 = (0u | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(596))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE7D9C; } @@ -8462,7 +9152,6 @@ L_08AE7D98: L_08AE7D9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE7DC0; } @@ -8476,7 +9165,6 @@ L_08AE7DA8: L_08AE7DB0: aot_gpr_4 = (ctx.gpr[2] < static_cast(225) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE7DC0; } @@ -8490,9 +9178,7 @@ L_08AE7DC0: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE7DE0; } @@ -8553,7 +9239,6 @@ L_08AE7E38: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE7E54; } @@ -8576,7 +9261,17 @@ L_08AE7E54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE7E70: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -8613,7 +9308,6 @@ L_08AE7EB8: } L_08AE7ED8: { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE7F1C; } @@ -8629,7 +9323,6 @@ L_08AE7EF0: ctx.gpr[8] = (aot_gpr_4 + ctx.gpr[7]); ctx.gpr[8] = (aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(1076))); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AE7F04; } @@ -8642,7 +9335,6 @@ L_08AE7F04: ctx.gpr[7] = (ctx.gpr[7] + static_cast(1)); ctx.gpr[8] = (ctx.gpr[7] < static_cast(2) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AE7EF0; } @@ -8650,7 +9342,6 @@ L_08AE7F04: } L_08AE7F14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE7FC8; } @@ -8658,7 +9349,6 @@ L_08AE7F14: } L_08AE7F1C: { const bool branch_taken = aot_gpr_5 != aot_gpr_17; - // nop if (branch_taken) { goto L_08AE7F30; } @@ -8676,7 +9366,6 @@ L_08AE7F24: L_08AE7F30: ctx.gpr[6] = (0u | 3u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE7F44; } @@ -8725,7 +9414,6 @@ L_08AE7F70: AOT_REGCACHE_SYNC_OUT(); return; L_08AE7F7C: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AE7F88; } @@ -8738,7 +9426,6 @@ L_08AE7F88: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (aot_gpr_17 < static_cast(4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE7F70; } diff --git a/profiles/vcs/generated/generated_unit_0185.cpp b/profiles/vcs/generated/generated_unit_0185.cpp index c0b5385..8c758ba 100644 --- a/profiles/vcs/generated/generated_unit_0185.cpp +++ b/profiles/vcs/generated/generated_unit_0185.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0185[4090] = { - 1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, - 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 34, - 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 52, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 56, 0, 57, 0, 0, 58, 0, 0, - 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, - 68, 0, 0, 0, 69, 0, 70, 0, 71, 0, 72, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, - 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 0, 0, 83, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 93, 94, 0, 95, 0, 96, 0, 0, 0, 97, - 98, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, - 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 0, 108, 0, 0, 0, 109, 0, 0, - 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 117, - 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 121, 0, 0, 122, 123, 0, 124, 0, 125, 0, 126, 0, 0, 0, - 127, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 131, 0, 0, 132, 0, 133, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 136, 0, 137, 138, 0, - 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 0, 0, 144, 0, 145, 146, 0, 147, 0, 0, 0, 0, 0, 148, 0, 149, 0, 0, 150, 151, 0, 152, - 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 156, 0, - 0, 0, 157, 0, 0, 0, 158, 0, 159, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 0, - 0, 0, 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 169, 0, 0, - 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 172, 0, 0, 173, 174, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 178, 0, 0, 0, 179, 0, 180, 181, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, - 0, 0, 0, 0, 184, 0, 0, 185, 0, 0, 0, 0, 0, 186, 187, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 190, - 0, 0, 191, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, - 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 207, 0, 0, - 0, 0, 0, 208, 0, 0, 209, 0, 0, 0, 0, 210, 0, 211, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, - 215, 0, 216, 0, 217, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, - 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 222, 0, 0, 0, 0, 223, 0, 224, 0, 0, 0, 0, 225, 0, 226, 227, 0, 228, 0, 0, - 0, 0, 0, 229, 0, 230, 231, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 239, 0, 0, 0, 240, 0, 0, - 0, 0, 241, 0, 0, 0, 242, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 0, 0, 246, 0, 247, - 248, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 253, 254, 0, 0, - 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 257, 0, 0, 0, 0, 258, 259, 0, 0, 0, 0, 0, 0, 0, 0, 260, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, 264, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 268, 0, 0, 0, 0, 269, 270, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 273, - 0, 0, 274, 0, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, - 0, 280, 281, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 285, 0, 0, 0, 0, 0, 286, 287, - 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 290, 0, 0, 0, 0, 291, 292, 0, 0, 0, 0, 0, 0, 0, - 0, 293, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 0, 0, 297, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 302, 303, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, - 0, 306, 0, 0, 307, 0, 0, 0, 0, 0, 308, 309, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, - 0, 312, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, - 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 321, 0, 322, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 0, 325, - 0, 326, 327, 0, 328, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 331, 332, 0, 333, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 338, 0, 0, 339, 0, 340, 0, 0, 341, - 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 350, 0, 0, 0, 0, 351, 0, 0, 0, 0, - 352, 0, 0, 0, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, 0, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 360, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 363, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, 371, 0, 372, 373, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 375, 0, 0, 0, 376, 0, - 377, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 0, 0, 383, 0, 0, 384, 0, 0, 0, 385, 0, 386, - 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 399, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, - 405, 0, 0, 406, 0, 407, 0, 0, 0, 0, 408, 0, 409, 0, 0, 0, 0, 410, 0, 411, 412, 0, 413, 0, 414, 0, 415, 0, 416, 0, 417, 0, - 0, 0, 0, 418, 0, 0, 0, 419, 0, 420, 421, 0, 422, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 425, 426, 0, 427, 0, 0, 0, 0, 428, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, 0, 432, - 0, 0, 0, 0, 433, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, 438, 0, - 0, 439, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 445, 0, - 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 453, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 458, 0, 0, 0, 0, 459, 460, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 462, 0, 0, 0, - 0, 0, 0, 0, 463, 0, 0, 464, 0, 0, 0, 0, 0, 465, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, - 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, - 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 478, 0, - 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, 0, 0, 0, - 0, 483, 0, 484, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 490, 0, - 491, 0, 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 494, 0, 495, 0, 0, 0, 0, 496, 0, 497, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, - 0, 500, 0, 501, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 505, 0, 0, 0, 0, 506, 0, 507, 0, 0, 0, 0, 508, 0, 509, - 0, 0, 0, 0, 510, 0, 511, 0, 0, 0, 0, 512, 0, 513, 0, 0, 0, 0, 514, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, - 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 0, 0, 525, 526, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 543, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 0, 0, 549, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 551, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, - 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 561, 0, 0, 0, 562, 0, 0, 563, 0, 0, 564, 0, 0, 0, 565, 0, 566, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 572, 0, 0, 0, 0, 0, 573, - 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, - 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, - 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 588, - 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 592, 0, 0, 0, 0, 593, 0, 0, - 594, 0, 0, 595, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 600, 0, - 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 604, - 0, 0, 605, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 609, 0, 0, 610, 0, 0, 0, - 0, 0, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 617, 0, 0, 618, 0, 619, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 622, 0, 623, 0, 624, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, - 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 636, 0, 0, 637, 0, 638, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 652, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 655, 0, - 0, 656, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 660, 0, 0, 661, 0, 0, 0, 0, 0, 0, - 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 665, 0, 0, 0, 0, 0, 666, 667, 0, 0, 0, 0, 0, 668, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 669, 0, 0, 670, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, - 0, 0, 675, 0, 0, 0, 0, 0, 676, 677, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 685, 0, 686, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 688, - 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, 692, 0, 693, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, - 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 701, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, - 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 708, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 710, 0, 0, 0, 0, 0, 711, 0, 712, 0, 713, 0, 714, 0, 0, 715, 0, 0, 0, 716, - 0, 717, 0, 718, 0, 0, 0, 0, 0, 0, 719, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 723, 0, 724, 0, 0, 725, 0, 0, 0, - 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 0, 0, 728, 0, 729, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 733, 0, 0, 0, 734, 0, 0, 735, 0, 0, 736, - 0, 0, 0, 737, 0, 738, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 740, 0, 0, 741, 0, 742, 0, 743, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0185[64] = { + 0x1200820480201825ull, 0x1049120082240400ull, 0xA404142210000240ull, 0x0824890041024010ull, + 0x25090010A4041120ull, 0x2020004020402805ull, 0x208900429010A551ull, 0x8AD2224002080140ull, + 0x2224002030480A01ull, 0x156480818240500Dull, 0x6850A48002000041ull, 0x48020010B282D155ull, + 0x0004021024004144ull, 0x0432404028100080ull, 0x9010609014034490ull, 0x014028480890010Cull, + 0x4408284822400408ull, 0x2D0A142010000815ull, 0x2240412401000868ull, 0x30480A01A1200844ull, + 0x020C120280612008ull, 0x1200830480A01848ull, 0x01848020C1202806ull, 0x028061200830480Aull, + 0x4000202240020C12ull, 0x850A900400004020ull, 0x9492001000859416ull, 0x0842240024002022ull, + 0x0040000802108421ull, 0x0010401200800009ull, 0x44406A2000000480ull, 0x00401448A2451209ull, + 0x9008210000012008ull, 0x2004000004100800ull, 0x85941688555A1429ull, 0x4808211082402000ull, + 0x0900041244802112ull, 0x140309004020A420ull, 0x0900100240106090ull, 0x0240008248900408ull, + 0x142850A14208848Aull, 0x00442850A142850Aull, 0x0830480A01104802ull, 0x0000004000112020ull, + 0x1008008004002001ull, 0x0028922204440880ull, 0x2204400800001220ull, 0x0009100014491102ull, + 0x0824004082400400ull, 0x8848008104424004ull, 0x4802088921201020ull, 0x1290010480820004ull, + 0x022A8129001022A8ull, 0x4000120080002401ull, 0x0081094800800900ull, 0x0409010002488108ull, + 0x0248021240400090ull, 0x80A0124010609014ull, 0x0480080012008304ull, 0x042A404081054000ull, + 0x800D000202008900ull, 0x8954110200502008ull, 0x0402A05012A0540Aull, 0x02A4202892280000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0185[64] = { + 1u, 13u, 24u, 35u, 46u, 59u, 68u, 84u, 98u, 110u, 127u, 139u, 157u, 166u, 176u, 191u, + 203u, 215u, 229u, 241u, 255u, 267u, 280u, 293u, 306u, 316u, 326u, 342u, 352u, 360u, 367u, 377u, + 392u, 400u, 405u, 429u, 439u, 451u, 463u, 473u, 483u, 500u, 516u, 528u, 533u, 539u, 551u, 559u, + 570u, 578u, 589u, 601u, 611u, 626u, 633u, 642u, 652u, 662u, 675u, 684u, 695u, 704u, 717u, 732u, }; void recomp_unit_0185_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0185_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AE8000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0185[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0185[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0185[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AE8000; @@ -937,7 +844,6 @@ L_08AE8014: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8030; } @@ -962,7 +868,17 @@ L_08AE8030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8054: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1007,7 +923,17 @@ L_08AE80A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE80BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1062,7 +988,6 @@ L_08AE8128: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8164; } @@ -1071,7 +996,6 @@ L_08AE8128: L_08AE8148: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE8164; } @@ -1096,7 +1020,17 @@ L_08AE8164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE817C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1152,7 +1086,17 @@ L_08AE81D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE81F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1188,7 +1132,6 @@ L_08AE8224: aot_gpr_5 = (16585u << 16u); aot_gpr_5 = (aot_gpr_5 | 4059u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -1199,9 +1142,7 @@ L_08AE8224: L_08AE8270: aot_fpr_14 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE8270; } @@ -1209,9 +1150,7 @@ L_08AE8270: } L_08AE8284: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE82A8; } @@ -1220,9 +1159,7 @@ L_08AE8284: L_08AE8294: aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE8294; } @@ -1246,7 +1183,17 @@ L_08AE82B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE82C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1278,7 +1225,17 @@ L_08AE82FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1323,7 +1280,17 @@ L_08AE8360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8378: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1379,7 +1346,17 @@ L_08AE83D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE83EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1418,7 +1395,17 @@ L_08AE8430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8448: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1450,7 +1437,17 @@ L_08AE847C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8490: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1483,7 +1480,6 @@ L_08AE84CC: } L_08AE84E0: { const bool branch_taken = aot_gpr_4 != aot_gpr_17; - // nop if (branch_taken) { goto L_08AE84F4; } @@ -1501,7 +1497,6 @@ L_08AE84E8: L_08AE84F4: ctx.gpr[6] = (0u | 3u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE8508; } @@ -1527,7 +1522,6 @@ L_08AE8508: AOT_REGCACHE_SYNC_OUT(); return; L_08AE852C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE8558; } @@ -1561,7 +1555,17 @@ L_08AE8558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8574: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1593,7 +1597,17 @@ L_08AE8598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE85D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1615,7 +1629,6 @@ L_08AE8600: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE8628; } @@ -1633,7 +1646,6 @@ L_08AE8618: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE863C; } @@ -1642,7 +1654,6 @@ L_08AE8620: L_08AE8628: aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE863C; } @@ -1662,7 +1673,17 @@ L_08AE863C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1694,7 +1715,17 @@ L_08AE8684: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8698: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1749,7 +1780,6 @@ L_08AE86F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8718: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE874C; } @@ -1784,7 +1814,17 @@ L_08AE874C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8764: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1815,7 +1855,6 @@ L_08AE87B4: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_17 = (0u | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AE8800; } @@ -1824,7 +1863,6 @@ L_08AE87B4: L_08AE87C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(688))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8800; } @@ -1832,7 +1870,6 @@ L_08AE87C4: } L_08AE87D0: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AE87DC; } @@ -1848,7 +1885,6 @@ L_08AE87DC: AOT_REGCACHE_SYNC_OUT(); return; L_08AE87E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE8800; } @@ -1858,7 +1894,6 @@ L_08AE87EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(688))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE8800; } @@ -1919,7 +1954,6 @@ L_08AE8858: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8874; } @@ -1943,7 +1977,17 @@ L_08AE8874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8894: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1975,7 +2019,6 @@ L_08AE88E4: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AE890C; } @@ -1984,7 +2027,6 @@ L_08AE88E4: L_08AE88F4: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(688))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AE890C; } @@ -1992,7 +2034,6 @@ L_08AE88F4: } L_08AE8900: { const bool branch_taken = aot_gpr_17 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE890C; } @@ -2053,7 +2094,6 @@ L_08AE8964: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8980; } @@ -2076,7 +2116,17 @@ L_08AE8980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE899C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2099,7 +2149,6 @@ L_08AE89BC: L_08AE89C8: aot_gpr_5 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE89E0; } @@ -2110,7 +2159,6 @@ L_08AE89D4: goto L_08AE89D8; L_08AE89D8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AE89E8; } @@ -2148,7 +2196,17 @@ L_08AE8A00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8A18: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -2191,7 +2249,6 @@ L_08AE8A9C: L_08AE8AA8: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AE8B7C; } @@ -2244,7 +2301,6 @@ L_08AE8AF4: goto L_08AE8AF8; L_08AE8AF8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE8B74; } @@ -2257,7 +2313,6 @@ L_08AE8B00: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8B08: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AE8B20; } @@ -2270,7 +2325,6 @@ L_08AE8B10: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8B18: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08AE8B74; } @@ -2286,7 +2340,6 @@ L_08AE8B20: goto L_08AE8B30; L_08AE8B30: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AE8B74; } @@ -2297,7 +2350,6 @@ L_08AE8B38: goto L_08AE8B3C; L_08AE8B3C: { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AE8B74; } @@ -2317,7 +2369,6 @@ L_08AE8B44: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8B5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE8B74; } @@ -2368,7 +2419,17 @@ L_08AE8B90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8BC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2424,7 +2485,17 @@ L_08AE8C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8C38: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2449,7 +2520,6 @@ L_08AE8C74: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8D74; } @@ -2597,7 +2667,17 @@ L_08AE8D74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8D98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2618,7 +2698,6 @@ L_08AE8DB8: L_08AE8DC4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8DD4; } @@ -2636,7 +2715,17 @@ L_08AE8DD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8DE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2658,7 +2747,6 @@ L_08AE8E10: L_08AE8E1C: aot_gpr_4 = (0u | 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE8E44; } @@ -2676,7 +2764,6 @@ L_08AE8E28: } L_08AE8E38: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE8E44; } @@ -2737,7 +2824,6 @@ L_08AE8E9C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8EB8; } @@ -2759,7 +2845,17 @@ L_08AE8EB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2774,7 +2870,6 @@ L_08AE8ED0: L_08AE8EF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE8F08; } @@ -2801,7 +2896,17 @@ L_08AE8F0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE8F20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -2839,7 +2944,6 @@ L_08AE8F6C: aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(236), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE900C; } @@ -2861,7 +2965,6 @@ L_08AE8F98: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8FAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE900C; } @@ -2881,7 +2984,6 @@ L_08AE8FB4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE8FD8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AE900C; } @@ -2917,7 +3019,17 @@ L_08AE900C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9028: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -2953,7 +3065,6 @@ L_08AE9074: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(236), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE9110; } @@ -2975,7 +3086,6 @@ L_08AE9098: AOT_REGCACHE_SYNC_OUT(); return; L_08AE90AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AE9110; } @@ -2987,7 +3097,6 @@ L_08AE90B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_5 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE9110; } @@ -3022,7 +3131,6 @@ L_08AE90F8: goto L_08AE9100; L_08AE9100: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE9110; } @@ -3047,7 +3155,17 @@ L_08AE9110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE912C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3087,7 +3205,6 @@ L_08AE9194: goto L_08AE91A8; L_08AE91A8: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08AE91C4; } @@ -3132,7 +3249,6 @@ L_08AE91E8: goto L_08AE91EC; L_08AE91EC: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AE9218; } @@ -3149,7 +3265,6 @@ L_08AE91F4: AOT_REGCACHE_SYNC_OUT(); return; L_08AE920C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE9218; } @@ -3189,7 +3304,17 @@ L_08AE922C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9260: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3227,7 +3352,17 @@ L_08AE92A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE92B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3249,7 +3384,6 @@ L_08AE92E4: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AE9318; } @@ -3260,7 +3394,6 @@ L_08AE92F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1653)))))); ctx.gpr[6] = (aot_gpr_4 & 7u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08AE9318; } @@ -3281,7 +3414,17 @@ L_08AE9318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE932C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3313,7 +3456,6 @@ L_08AE9360: } L_08AE9374: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE9380; } @@ -3374,7 +3516,6 @@ L_08AE93D8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE93F4; } @@ -3396,7 +3537,17 @@ L_08AE93F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE940C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3420,7 +3571,6 @@ L_08AE9440: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[6] = (0u | 6u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE9458; } @@ -3481,7 +3631,6 @@ L_08AE94B0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE94CC; } @@ -3503,7 +3652,17 @@ L_08AE94CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE94E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3527,7 +3686,6 @@ L_08AE9518: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[6] = (0u | 5u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE9530; } @@ -3588,7 +3746,6 @@ L_08AE9588: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE95A4; } @@ -3610,7 +3767,17 @@ L_08AE95A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE95BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3634,7 +3801,6 @@ L_08AE95F0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); ctx.gpr[6] = (0u | 4u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AE9608; } @@ -3695,7 +3861,6 @@ L_08AE9660: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE967C; } @@ -3717,7 +3882,17 @@ L_08AE967C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9694: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3741,7 +3916,6 @@ L_08AE96C8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(1060)))))); aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE96E0; } @@ -3802,7 +3976,6 @@ L_08AE9738: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE9754; } @@ -3824,7 +3997,17 @@ L_08AE9754: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE976C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3848,7 +4031,6 @@ L_08AE97A0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(615)))))); aot_gpr_5 = (aot_gpr_5 & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AE97B8; } @@ -3909,7 +4091,6 @@ L_08AE9810: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AE982C; } @@ -3931,7 +4112,17 @@ L_08AE982C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9844: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4014,7 +4205,17 @@ L_08AE9914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9938: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4053,7 +4254,6 @@ L_08AE99B0: } L_08AE99BC: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08AE9A48; } @@ -4106,7 +4306,6 @@ L_08AE9A04: goto L_08AE9A08; L_08AE9A08: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AE9A40; } @@ -4126,7 +4325,6 @@ L_08AE9A10: AOT_REGCACHE_SYNC_OUT(); return; L_08AE9A28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AE9A40; } @@ -4177,7 +4375,17 @@ L_08AE9A5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -4200,7 +4408,6 @@ L_08AE9AC4: L_08AE9AD0: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08AE9B04; } @@ -4255,7 +4462,17 @@ L_08AE9B14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9B34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4289,7 +4506,6 @@ L_08AE9B74: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(636), std::bit_cast(aot_fpr_20)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AE9C8C; } @@ -4305,7 +4521,6 @@ L_08AE9BB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_17 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AE9C64; } @@ -4413,7 +4628,17 @@ L_08AE9C8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9CD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4473,7 +4698,17 @@ L_08AE9D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4521,7 +4756,17 @@ L_08AE9DB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AE9DD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4569,7 +4814,6 @@ L_08AE9E28: ctx.fpr[24] = std::bit_cast(0u); aot_gpr_4 = (17332u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4579,9 +4823,7 @@ L_08AE9E28: } L_08AE9E94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9EAC; } @@ -4597,7 +4839,6 @@ L_08AE9EA4: } L_08AE9EAC: aot_gpr_31 = (0x08AE9EB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE9EB4u) goto L_08AE9EB4; AOT_REGCACHE_SYNC_OUT(); return; L_08AE9EB4: @@ -4609,7 +4850,6 @@ L_08AE9EB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(40))); if (branch_taken) { @@ -4619,9 +4859,7 @@ L_08AE9EB8: } L_08AE9ED8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9EF8; } @@ -4639,7 +4877,6 @@ L_08AE9EE8: } L_08AE9EF8: aot_gpr_31 = (0x08AE9F00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AE9F00u) goto L_08AE9F00; AOT_REGCACHE_SYNC_OUT(); return; L_08AE9F00: @@ -4651,9 +4888,7 @@ L_08AE9F0C: ctx.fpr[22] = aot_fpr_20 / ctx.fpr[22]; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9F30; } @@ -4670,9 +4905,7 @@ L_08AE9F24: } L_08AE9F30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9F48; } @@ -4684,9 +4917,7 @@ L_08AE9F40: goto L_08AE9F48; L_08AE9F48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9F64; } @@ -4703,9 +4934,7 @@ L_08AE9F58: } L_08AE9F64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9F7C; } @@ -4717,9 +4946,7 @@ L_08AE9F74: goto L_08AE9F7C; L_08AE9F7C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9F98; } @@ -4736,9 +4963,7 @@ L_08AE9F8C: } L_08AE9F98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AE9FB0; } @@ -4781,7 +5006,17 @@ L_08AE9FD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA00C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4862,7 +5097,17 @@ L_08AEA0B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA0CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -4924,7 +5169,17 @@ L_08AEA150: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA168: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4968,7 +5223,6 @@ L_08AEA1F4: L_08AEA200: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[21] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AEA2E8; } @@ -5021,7 +5275,6 @@ L_08AEA24C: goto L_08AEA250; L_08AEA250: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AEA2E0; } @@ -5034,7 +5287,6 @@ L_08AEA258: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA260: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AEA278; } @@ -5047,7 +5299,6 @@ L_08AEA268: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA270: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08AEA2E0; } @@ -5056,9 +5307,7 @@ L_08AEA270: L_08AEA278: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AEA2E0; } @@ -5074,7 +5323,6 @@ L_08AEA28C: goto L_08AEA29C; L_08AEA29C: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AEA2E0; } @@ -5085,7 +5333,6 @@ L_08AEA2A4: goto L_08AEA2A8; L_08AEA2A8: { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AEA2E0; } @@ -5105,7 +5352,6 @@ L_08AEA2B0: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA2C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEA2E0; } @@ -5157,7 +5403,17 @@ L_08AEA2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA334: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5220,7 +5476,17 @@ L_08AEA3B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA3CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5247,7 +5513,6 @@ L_08AEA3F8: L_08AEA404: aot_gpr_4 = (0u | 3u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AEA420; } @@ -5268,7 +5533,17 @@ L_08AEA420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA434: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5324,7 +5599,17 @@ L_08AEA490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA4A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5355,7 +5640,6 @@ L_08AEA4EC: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -5366,7 +5650,6 @@ L_08AEA4EC: L_08AEA514: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AEA53C; @@ -5406,7 +5689,17 @@ L_08AEA554: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5430,7 +5723,6 @@ L_08AEA5AC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(618)))))); aot_gpr_5 = (aot_gpr_5 & 32u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AEA5C4; } @@ -5491,7 +5783,6 @@ L_08AEA61C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEA638; } @@ -5513,7 +5804,17 @@ L_08AEA638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5550,7 +5851,17 @@ L_08AEA684: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA6B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5595,7 +5906,17 @@ L_08AEA70C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA728: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5651,7 +5972,17 @@ L_08AEA784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA79C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5687,7 +6018,6 @@ L_08AEA804: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA80C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[20] = (0u | 1u); goto L_08AEA81C; @@ -5696,7 +6026,6 @@ L_08AEA80C: L_08AEA81C: aot_gpr_4 = (ctx.gpr[20] & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5714,7 +6043,6 @@ L_08AEA83C: aot_gpr_4 = (aot_gpr_17 + static_cast(-5)); aot_gpr_5 = (aot_gpr_4 < static_cast(13) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5726,11 +6054,20 @@ L_08AEA84C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17064))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEA864: aot_gpr_4 = (ctx.gpr[18] | 0u); aot_gpr_5 = (0u | 18u); @@ -5741,7 +6078,6 @@ L_08AEA864: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA878: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5757,7 +6093,6 @@ L_08AEA880: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5773,7 +6108,6 @@ L_08AEA89C: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5789,7 +6123,6 @@ L_08AEA8B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA8CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5805,7 +6138,6 @@ L_08AEA8D4: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA8E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5821,7 +6153,6 @@ L_08AEA8F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5837,7 +6168,6 @@ L_08AEA90C: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA920: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5853,7 +6183,6 @@ L_08AEA928: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA93C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5869,7 +6198,6 @@ L_08AEA944: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5885,7 +6213,6 @@ L_08AEA960: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5901,7 +6228,6 @@ L_08AEA97C: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA990: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5917,7 +6243,6 @@ L_08AEA998: AOT_REGCACHE_SYNC_OUT(); return; L_08AEA9AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEA9C8; } @@ -5935,7 +6260,6 @@ L_08AEA9C8: aot_gpr_17 = (aot_gpr_17 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_17) < 18 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AEA804; } @@ -5959,7 +6283,17 @@ L_08AEA9D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEAA04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5984,7 +6318,6 @@ L_08AEAA38: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[6] + static_cast(619)))))); ctx.gpr[7] = (aot_gpr_5 & 2u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AEAA60; } @@ -6048,7 +6381,6 @@ L_08AEAAB8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEAAD4; } @@ -6070,7 +6402,17 @@ L_08AEAAD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEAAEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6239,7 +6581,17 @@ L_08AEACCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEACF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6403,7 +6755,17 @@ L_08AEAE30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEAE8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6567,7 +6929,17 @@ L_08AEAFCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB028: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6610,7 +6982,17 @@ L_08AEB07C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB098: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6653,7 +7035,17 @@ L_08AEB0EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB108: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6713,7 +7105,17 @@ L_08AEB180: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB19C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6773,7 +7175,17 @@ L_08AEB214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB230: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6802,7 +7214,6 @@ L_08AEB260: L_08AEB274: aot_gpr_4 = (ctx.gpr[2] & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEB2AC; } @@ -6811,7 +7222,6 @@ L_08AEB274: L_08AEB280: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEB2AC; } @@ -6844,7 +7254,17 @@ L_08AEB2AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB2C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6947,7 +7367,17 @@ L_08AEB344: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB35C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6975,7 +7405,17 @@ L_08AEB388: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB3A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7003,7 +7443,6 @@ L_08AEB3DC: L_08AEB3E4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEB41C; } @@ -7060,7 +7499,17 @@ L_08AEB434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB450: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7088,7 +7537,6 @@ L_08AEB48C: L_08AEB494: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEB4CC; } @@ -7145,7 +7593,17 @@ L_08AEB4E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB500: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7189,7 +7647,17 @@ L_08AEB534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB57C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7233,7 +7701,17 @@ L_08AEB5B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB5F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7273,7 +7751,17 @@ L_08AEB62C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB65C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7326,7 +7814,17 @@ L_08AEB6C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB6DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7352,7 +7850,6 @@ L_08AEB720: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); if (branch_taken) { @@ -7362,9 +7859,7 @@ L_08AEB720: } L_08AEB73C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AEB758; } @@ -7406,7 +7901,17 @@ L_08AEB764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB7A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7435,7 +7940,17 @@ L_08AEB7CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB7E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7476,7 +7991,17 @@ L_08AEB81C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB858: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7509,7 +8034,17 @@ L_08AEB890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB8A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7586,7 +8121,6 @@ L_08AEB93C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEB958; } @@ -7608,7 +8142,17 @@ L_08AEB958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEB970: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7685,7 +8229,6 @@ L_08AEBA08: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEBA24; } @@ -7707,7 +8250,17 @@ L_08AEBA24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7748,7 +8301,17 @@ L_08AEBA70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBAAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7788,7 +8351,6 @@ L_08AEBAE8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEBB48; } @@ -7796,7 +8358,6 @@ L_08AEBAE8: } L_08AEBB38: { const bool branch_taken = aot_gpr_4 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08AEBB48; } @@ -7804,7 +8365,6 @@ L_08AEBB38: } L_08AEBB40: { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AEBB7C; } @@ -7843,7 +8403,17 @@ L_08AEBB7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBB98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7858,7 +8428,6 @@ L_08AEBB98: L_08AEBBB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEBBCC; } @@ -7885,7 +8454,17 @@ L_08AEBBD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBBE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -7941,7 +8520,17 @@ L_08AEBC64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBC84: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7978,7 +8567,6 @@ L_08AEBCCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AEBD0C; } @@ -7988,7 +8576,6 @@ L_08AEBCFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AEBD58; } @@ -8019,7 +8606,6 @@ L_08AEBD34: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBD50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8053,7 +8639,6 @@ L_08AEBDA0: aot_gpr_17 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_4 = (aot_gpr_17 < static_cast(23) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8065,14 +8650,22 @@ L_08AEBDB0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_17); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17120))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBDC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8085,7 +8678,6 @@ L_08AEBDD0: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBDD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8106,7 +8698,6 @@ L_08AEBDEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBDFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8114,7 +8705,6 @@ L_08AEBDFC: } L_08AEBE04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8143,7 +8733,6 @@ L_08AEBE0C: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBE28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8151,7 +8740,6 @@ L_08AEBE28: } L_08AEBE30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8180,7 +8768,6 @@ L_08AEBE38: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBE54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8188,7 +8775,6 @@ L_08AEBE54: } L_08AEBE5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8197,7 +8783,6 @@ L_08AEBE5C: L_08AEBE64: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEBE98; } @@ -8227,7 +8812,6 @@ L_08AEBE70: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBE90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEB4; } @@ -8256,7 +8840,6 @@ L_08AEBE98: AOT_REGCACHE_SYNC_OUT(); return; L_08AEBEB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8264,7 +8847,6 @@ L_08AEBEB4: } L_08AEBEBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEBEC4; } @@ -8286,7 +8868,17 @@ L_08AEBEC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEBEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8352,7 +8944,6 @@ L_08AEBF94: aot_fpr_20 = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -8363,7 +8954,6 @@ L_08AEBF94: L_08AEBFB4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (0u + static_cast(-497)); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0186.cpp b/profiles/vcs/generated/generated_unit_0186.cpp index 6781738..fc5e74b 100644 --- a/profiles/vcs/generated/generated_unit_0186.cpp +++ b/profiles/vcs/generated/generated_unit_0186.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0186[4093] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 5, 0, 0, 6, - 0, 0, 0, 0, 7, 0, 8, 0, 9, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 0, 13, 14, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, - 17, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 20, 21, 0, 0, 0, 0, 22, 0, 23, 0, 24, 0, 0, 0, 25, 0, 0, 26, 0, 0, 0, - 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 0, 0, 39, - 0, 0, 40, 0, 0, 0, 41, 0, 42, 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 46, 0, 47, 48, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 0, 50, 0, 0, 51, 52, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 58, 0, 59, 0, 0, 60, 0, 0, 0, 0, 61, 0, 0, 62, 0, 63, 0, 0, 64, 0, 65, 0, 0, 66, 0, 67, 0, - 68, 0, 69, 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 77, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 81, 0, 82, 0, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, - 89, 0, 90, 0, 91, 0, 92, 0, 0, 93, 0, 0, 94, 0, 0, 95, 0, 96, 0, 0, 97, 0, 98, 0, 99, 0, 0, 100, 0, 101, 0, 0, - 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 0, 0, 0, 0, 113, 114, 0, 0, 0, - 115, 116, 0, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 0, 121, 0, 0, 122, 0, 0, 123, 124, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, - 127, 0, 0, 0, 128, 129, 130, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 142, 0, 143, 0, 0, - 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 149, 0, 0, 150, 0, 0, 151, 0, - 152, 153, 0, 154, 0, 0, 0, 155, 156, 0, 0, 0, 157, 0, 0, 0, 0, 158, 159, 0, 0, 160, 0, 0, 161, 0, 162, 163, 0, 164, 0, 0, - 0, 165, 166, 0, 167, 0, 168, 0, 0, 0, 169, 0, 0, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 174, 0, 175, 0, 176, 0, 0, - 0, 177, 0, 0, 0, 178, 0, 179, 180, 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, 0, 184, 0, 0, 0, 185, 0, 0, 186, 0, 187, 0, 188, - 0, 189, 0, 0, 0, 190, 0, 0, 191, 192, 0, 193, 0, 0, 0, 194, 0, 0, 0, 195, 0, 196, 0, 0, 0, 197, 0, 0, 198, 0, 199, 0, - 200, 0, 201, 0, 0, 0, 202, 0, 0, 0, 203, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, - 211, 0, 212, 0, 213, 0, 0, 0, 214, 0, 0, 0, 215, 216, 0, 217, 0, 0, 0, 218, 0, 0, 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, - 222, 0, 223, 0, 224, 0, 225, 0, 0, 0, 226, 0, 0, 227, 228, 0, 229, 0, 0, 0, 230, 0, 0, 0, 231, 0, 232, 0, 0, 0, 233, 0, - 0, 234, 0, 235, 0, 236, 0, 237, 0, 0, 0, 238, 0, 0, 0, 239, 240, 0, 241, 0, 0, 0, 242, 0, 0, 0, 243, 0, 244, 0, 0, 0, - 245, 0, 0, 246, 0, 247, 0, 248, 0, 249, 0, 0, 0, 250, 0, 0, 0, 251, 252, 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 0, 260, 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, - 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 266, 0, 0, 267, 0, 0, 0, 268, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 273, 0, 0, 0, 274, 0, 0, 0, 275, 0, 0, 0, 0, 0, - 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, - 0, 0, 0, 0, 0, 0, 280, 0, 281, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, 0, 0, 285, 0, 0, 286, 0, 0, 0, 0, - 0, 287, 0, 288, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 294, 0, 295, 0, 296, 0, 0, 297, 298, - 299, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, - 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, 0, - 0, 0, 307, 0, 0, 308, 0, 309, 0, 310, 0, 311, 0, 0, 312, 0, 313, 0, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 316, 0, 317, 318, 0, 0, 0, 0, 319, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, - 0, 0, 323, 0, 0, 0, 324, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, - 332, 0, 333, 334, 0, 0, 0, 0, 335, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 338, 0, 0, 339, 0, 340, 0, 0, 0, 0, 341, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 343, 0, 344, 0, 345, 0, 0, 0, 346, 0, 0, 347, - 0, 348, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 351, 0, 352, 0, 353, 0, 0, 354, 0, 355, 0, 356, 0, 0, 357, 0, 358, 0, 359, 0, - 360, 0, 361, 0, 362, 0, 363, 0, 364, 0, 0, 0, 0, 365, 0, 0, 366, 0, 367, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 370, 0, 0, - 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 373, 374, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, - 0, 376, 0, 0, 377, 0, 378, 379, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, - 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, - 0, 0, 388, 0, 389, 0, 0, 0, 0, 390, 391, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, - 394, 0, 0, 0, 0, 395, 0, 396, 0, 397, 0, 398, 0, 399, 0, 400, 0, 0, 401, 0, 0, 402, 0, 0, 403, 404, 0, 0, 405, 0, 0, 406, - 0, 0, 407, 0, 0, 408, 409, 0, 0, 410, 0, 0, 411, 0, 0, 412, 0, 0, 413, 414, 0, 0, 415, 0, 0, 416, 0, 0, 417, 0, 0, 418, - 419, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 422, 0, 0, 423, 424, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 427, 0, 0, 0, - 428, 429, 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, - 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, - 0, 448, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 457, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 0, 463, 0, 0, 0, 0, 464, 0, 0, 465, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, - 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 0, 0, 481, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 488, 0, 0, 489, 0, 0, 0, 0, 490, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, - 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, - 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, 505, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 511, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, - 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, - 519, 0, 520, 0, 0, 0, 0, 0, 521, 0, 0, 522, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, - 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 531, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 541, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, - 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, - 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 550, 0, - 551, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, - 0, 0, 554, 0, 555, 0, 556, 0, 557, 558, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 561, 0, 562, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, - 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 0, 0, 572, 0, 573, 0, 574, 0, 575, 0, 576, - 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 584, 0, 585, 0, 586, 0, 587, 0, 588, 0, 589, 0, 0, 590, 0, 591, 0, - 592, 0, 0, 593, 0, 594, 0, 0, 0, 0, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, 0, 601, 0, 602, 0, 603, 0, 604, 0, 0, - 605, 0, 606, 0, 607, 0, 608, 0, 0, 609, 0, 610, 0, 611, 0, 612, 0, 0, 613, 0, 614, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 617, 0, 0, 618, 0, 619, 620, 0, 0, 0, 0, 621, 0, 0, 622, 0, 623, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, - 0, 626, 0, 627, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 630, 631, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 635, 0, 636, 637, 638, 0, 0, 0, 0, 0, 639, 0, 0, 640, 0, 641, 642, 0, 0, - 643, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 647, 0, 0, 648, 0, 0, 649, 0, 650, 651, 652, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, 655, 656, 0, 0, 657, 0, 0, 0, 0, - 0, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 662, - 0, 0, 663, 0, 664, 665, 666, 0, 0, 0, 0, 0, 667, 0, 0, 668, 0, 669, 670, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, - 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 676, 0, 0, 677, 0, - 678, 679, 680, 0, 0, 0, 0, 0, 681, 0, 0, 682, 0, 683, 684, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 687, 0, - 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 689, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 692, 0, 0, - 693, 0, 694, 695, 696, 0, 0, 0, 0, 0, 697, 0, 0, 698, 0, 699, 700, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 706, - 0, 0, 707, 0, 708, 709, 710, 0, 0, 0, 0, 0, 711, 0, 0, 712, 0, 713, 714, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, - 720, 0, 0, 721, 0, 722, 723, 724, 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 727, 728, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 730, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 733, 0, 0, 734, 0, 0, 735, 0, 736, 737, 738, 0, 0, 0, 0, 0, 739, 0, 0, 740, 0, 741, 742, 0, 0, 743, 0, 0, 0, 0, 0, 0, - 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 0, 748, 0, 0, 749, 0, 750, 751, 752, 0, 0, 0, 0, 0, 753, 0, 0, 754, 0, 755, 756, 0, 0, 757, 0, 0, 0, 0, 0, - 0, 0, 758, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 762, - 0, 0, 763, 0, 764, 765, 766, 0, 0, 0, 0, 0, 767, 0, 0, 768, 0, 769, 770, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 775, - 0, 0, 0, 0, 0, 0, 776, 0, 777, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 780, 0, 0, - 781, 0, 782, 783, 784, 0, 0, 0, 0, 0, 785, 0, 0, 786, 0, 787, 788, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 794, 0, - 0, 795, 0, 796, 797, 798, 0, 0, 0, 0, 0, 799, 0, 0, 800, 0, 801, 802, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 807, 0, - 0, 808, 0, 0, 809, 0, 810, 811, 812, 0, 0, 0, 0, 0, 813, 0, 0, 814, 0, 815, 816, 0, 0, 817, 0, 0, 0, 0, 0, 0, 0, 818, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, - 0, 0, 822, 0, 0, 823, 0, 824, 825, 826, 0, 0, 0, 0, 0, 827, 0, 0, 828, 0, 829, 830, 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, - 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 835, 0, 0, 836, 0, 0, 837, 0, 838, 839, 840, 0, 0, 0, 0, 0, 841, 0, 0, 842, 0, 843, 844, 0, 0, 845, 0, 0, 0, 0, 0, 0, - 0, 846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 848, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 849, 0, 0, 850, 0, 0, 851, 0, 852, 853, 854, 0, 0, 0, 0, 0, 855, 0, 0, 856, 0, 857, 858, 0, 0, 859, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0186[64] = { + 0x5031255094800011ull, 0x8AA89155122A1891ull, 0x10000B2103424544ull, 0x529484A408000020ull, + 0x22200001000104A5ull, 0x295292555552A804ull, 0x24324AA3182AA955ull, 0x0100044000008071ull, + 0x2824280200024000ull, 0x2D26118B49841042ull, 0xA91445A22A914456ull, 0x48A22C4552288B22ull, + 0x451164552288B115ull, 0x009622A9144588AAull, 0x0200041080000000ull, 0x0200041080000448ull, + 0x0444200080200C48ull, 0x092803402A000008ull, 0x20000101CAA802AAull, 0x00894AA424040404ull, + 0x80000080000421A0ull, 0x4290A10D409A5044ull, 0x54A9509291520000ull, 0x0406200121452155ull, + 0x40000108241108D2ull, 0x9324AAA110002614ull, 0x12419241924C9264ull, 0x010A04200040142Bull, + 0x091000122128042Aull, 0x0042200024424000ull, 0x1205400048A42480ull, 0x8000000420000500ull, + 0x0800010100062400ull, 0x0100061200400100ull, 0x0100002000080001ull, 0xA000040404001848ull, + 0x0000088000080000ull, 0x2000220005000100ull, 0x2200290544001010ull, 0x0010100000000008ull, + 0x0110408000150004ull, 0x8000150010080020ull, 0x5000802010080002ull, 0x05400B5440000041ull, + 0x4000000000041000ull, 0x52AAAAAAAA8AA840ull, 0x0234AA552AAAA829ull, 0x1030480A01348690ull, + 0x008041013483A480ull, 0x9002010809A41D24ull, 0x4900201020269074ull, 0x2400888042026907ull, + 0x900201000809A41Dull, 0x2004020020269074ull, 0x00201000404D20E9ull, 0x0040200202690749ull, + 0x9002010404D20E92ull, 0x8008040020269074ull, 0x0809A41D24008140ull, 0x1013483A48010080ull, + 0x809A41D240080400ull, 0x013483A480100800ull, 0x0269074900201001ull, 0x13483A4801008002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0186[64] = { + 1u, 17u, 40u, 55u, 68u, 78u, 102u, 127u, 135u, 144u, 165u, 189u, 211u, 234u, 255u, 259u, + 266u, 276u, 287u, 302u, 316u, 323u, 342u, 360u, 376u, 388u, 407u, 428u, 440u, 453u, 461u, 474u, + 479u, 486u, 493u, 497u, 506u, 509u, 515u, 526u, 529u, 537u, 544u, 551u, 563u, 566u, 592u, 617u, + 633u, 647u, 663u, 678u, 693u, 707u, 720u, 733u, 747u, 763u, 776u, 791u, 805u, 819u, 832u, 846u, }; void recomp_unit_0186_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0186_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AEC000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0186[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0186[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0186[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AEC000; @@ -1056,7 +963,6 @@ L_08AEC010: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(520), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC068; } @@ -1088,7 +994,6 @@ L_08AEC07C: AOT_REGCACHE_SYNC_OUT(); return; L_08AEC090: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC3BC; } @@ -1100,7 +1005,6 @@ L_08AEC098: goto L_08AECC3C; L_08AEC0A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC0F0; } @@ -1115,7 +1019,6 @@ L_08AEC0A8: L_08AEC0B4: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AEC0D4; } @@ -1150,7 +1053,6 @@ L_08AEC0F0: goto L_08AECCC0; L_08AEC0F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC144; } @@ -1166,7 +1068,6 @@ L_08AEC100: L_08AEC110: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AEC130; } @@ -1199,7 +1100,6 @@ L_08AEC144: goto L_08AECD48; L_08AEC14C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC190; } @@ -1246,7 +1146,6 @@ L_08AEC190: goto L_08AECB2C; L_08AEC198: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC1DC; } @@ -1293,7 +1192,6 @@ L_08AEC1DC: goto L_08AECBB4; L_08AEC1E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC228; } @@ -1373,7 +1271,6 @@ L_08AEC264: ctx.fpr[24] = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(aot_fpr_12)) && ctx.fpr[24] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -1384,9 +1281,7 @@ L_08AEC264: L_08AEC280: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AEC2A4; } @@ -1482,7 +1377,6 @@ L_08AEC36C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(615), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC394; } @@ -1515,7 +1409,6 @@ L_08AEC3A8: L_08AEC3BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC41C; } @@ -1529,7 +1422,6 @@ L_08AEC3C8: L_08AEC3D0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AEC400; } @@ -1543,7 +1435,6 @@ L_08AEC3DC: L_08AEC3E4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC41C; } @@ -1556,7 +1447,6 @@ L_08AEC3F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AEC3F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC41C; } @@ -1570,7 +1460,6 @@ L_08AEC400: L_08AEC408: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC41C; } @@ -1584,7 +1473,6 @@ L_08AEC414: L_08AEC41C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[23] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC440; } @@ -1622,7 +1510,17 @@ L_08AEC440: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEC480: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1640,7 +1538,6 @@ L_08AEC4D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5436))); aot_gpr_4 = (static_cast(aot_gpr_4) < 30 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC844; } @@ -1650,7 +1547,6 @@ L_08AEC4E4: aot_gpr_16 = (0u + static_cast(-1)); ctx.gpr[19] = (0u | 0u); aot_gpr_31 = (0x08AEC4F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEC4F4u) goto L_08AEC4F4; AOT_REGCACHE_SYNC_OUT(); return; L_08AEC4F4: @@ -1682,7 +1578,6 @@ L_08AEC52C: } L_08AEC534: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC694; } @@ -1696,7 +1591,6 @@ L_08AEC53C: L_08AEC544: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AEC570; } @@ -1704,7 +1598,6 @@ L_08AEC544: } L_08AEC550: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AEC570; } @@ -1716,7 +1609,6 @@ L_08AEC558: goto L_08AECC3C; L_08AEC560: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC570; } @@ -1728,7 +1620,6 @@ L_08AEC568: goto L_08AEC570; L_08AEC570: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AEC670; } @@ -1740,7 +1631,6 @@ L_08AEC578: goto L_08AECAA8; L_08AEC580: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AEC598; } @@ -1752,7 +1642,6 @@ L_08AEC588: goto L_08AECC3C; L_08AEC590: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC66C; } @@ -1787,7 +1676,6 @@ L_08AEC5B0: } L_08AEC5BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC5E0; } @@ -1796,7 +1684,6 @@ L_08AEC5BC: L_08AEC5C4: aot_gpr_16 = (ctx.gpr[18] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC670; } @@ -1812,7 +1699,6 @@ L_08AEC5D0: } L_08AEC5D8: { const bool branch_taken = aot_gpr_16 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08AEC5C4; } @@ -1821,7 +1707,6 @@ L_08AEC5D8: L_08AEC5E0: aot_gpr_16 = (ctx.gpr[18] | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC670; } @@ -1838,7 +1723,6 @@ L_08AEC5EC: L_08AEC5F4: aot_gpr_4 = (static_cast(aot_gpr_16) < -962 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AEC5E0; } @@ -1846,7 +1730,6 @@ L_08AEC5F4: } L_08AEC600: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC5C4; } @@ -1854,7 +1737,6 @@ L_08AEC600: } L_08AEC608: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC5C4; } @@ -1862,7 +1744,6 @@ L_08AEC608: } L_08AEC610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC670; } @@ -1887,7 +1768,6 @@ L_08AEC620: } L_08AEC62C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AEC5E0; } @@ -1895,7 +1775,6 @@ L_08AEC62C: } L_08AEC634: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC5C4; } @@ -1903,7 +1782,6 @@ L_08AEC634: } L_08AEC63C: { const bool branch_taken = aot_gpr_16 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08AEC5E0; } @@ -1911,7 +1789,6 @@ L_08AEC63C: } L_08AEC644: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC5C4; } @@ -1931,11 +1808,20 @@ L_08AEC654: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17216))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEC66C: aot_gpr_16 = (ctx.gpr[18] | 0u); goto L_08AEC670; @@ -1943,7 +1829,6 @@ L_08AEC670: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AEC684; } @@ -1956,7 +1841,6 @@ L_08AEC684: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); ctx.gpr[19] = (ctx.gpr[19] & 65535u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC52C; } @@ -1964,7 +1848,6 @@ L_08AEC684: } L_08AEC694: { const bool branch_taken = aot_gpr_16 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AEC844; } @@ -1976,7 +1859,6 @@ L_08AEC69C: goto L_08AECC3C; L_08AEC6A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC6E8; } @@ -2175,7 +2057,17 @@ L_08AEC844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEC884: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2199,7 +2091,6 @@ L_08AEC8B4: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEC904; } @@ -2208,7 +2099,6 @@ L_08AEC8B4: L_08AEC8C8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08AEC904; } @@ -2227,7 +2117,6 @@ L_08AEC8D4: AOT_REGCACHE_SYNC_OUT(); return; L_08AEC8EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC904; } @@ -2265,14 +2154,23 @@ L_08AEC918: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEC930: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_gpr_16 = (aot_gpr_5 | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x08AEC948u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0162_entry, 162u, 79u, 0x08A8C7F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEC948u) goto L_08AEC948; AOT_REGCACHE_SYNC_OUT(); return; L_08AEC948: @@ -2292,7 +2190,6 @@ L_08AEC95C: L_08AEC960: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC98C; } @@ -2301,7 +2198,6 @@ L_08AEC960: L_08AEC96C: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08AEC98C; } @@ -2309,7 +2205,6 @@ L_08AEC96C: } L_08AEC978: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AEC984; } @@ -2320,7 +2215,6 @@ L_08AEC980: goto L_08AEC984; L_08AEC984: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEC9A0; } @@ -2347,13 +2241,22 @@ L_08AEC9A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEC9B0: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); ctx.gpr[8] = (0u | 0u); aot_gpr_6 = (static_cast(ctx.gpr[8]) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECA04; } @@ -2365,7 +2268,6 @@ L_08AEC9C4: L_08AEC9C8: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AEC9F4; } @@ -2374,7 +2276,6 @@ L_08AEC9C8: L_08AEC9D4: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(8))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AEC9F4; } @@ -2382,7 +2283,6 @@ L_08AEC9D4: } L_08AEC9E0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AEC9EC; } @@ -2393,7 +2293,6 @@ L_08AEC9E8: goto L_08AEC9EC; L_08AEC9EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECA08; } @@ -2414,18 +2313,37 @@ L_08AECA04: goto L_08AECA08; L_08AECA08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECA10: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8672), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECA18: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2444,7 +2362,6 @@ L_08AECA28: goto L_08AECA38; L_08AECA38: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECA6C; } @@ -2454,7 +2371,6 @@ L_08AECA40: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AECA64; } @@ -2471,7 +2387,6 @@ L_08AECA50: } L_08AECA5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECA84; } @@ -2511,7 +2426,6 @@ L_08AECA84: } L_08AECA94: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AECA64; } @@ -2522,11 +2436,20 @@ L_08AECA9C: goto L_08AECAA0; L_08AECAA0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECAA8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2545,7 +2468,6 @@ L_08AECAB8: goto L_08AECAC8; L_08AECAC8: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECAFC; } @@ -2555,7 +2477,6 @@ L_08AECAD0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AECAF4; } @@ -2572,7 +2493,6 @@ L_08AECAE0: } L_08AECAEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECB14; } @@ -2603,7 +2523,6 @@ L_08AECB04: L_08AECB14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AECAF4; } @@ -2614,11 +2533,20 @@ L_08AECB20: goto L_08AECB24; L_08AECB24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECB2C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2637,7 +2565,6 @@ L_08AECB3C: goto L_08AECB4C; L_08AECB4C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECB80; } @@ -2647,7 +2574,6 @@ L_08AECB54: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AECB78; } @@ -2664,7 +2590,6 @@ L_08AECB64: } L_08AECB70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECB98; } @@ -2696,7 +2621,6 @@ L_08AECB98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AECB78; } @@ -2707,11 +2631,20 @@ L_08AECBA8: goto L_08AECBAC; L_08AECBAC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECBB4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2730,7 +2663,6 @@ L_08AECBC4: goto L_08AECBD4; L_08AECBD4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECC08; } @@ -2740,7 +2672,6 @@ L_08AECBDC: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AECC00; } @@ -2757,7 +2688,6 @@ L_08AECBEC: } L_08AECBF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECC20; } @@ -2789,7 +2719,6 @@ L_08AECC20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AECC00; } @@ -2800,11 +2729,20 @@ L_08AECC30: goto L_08AECC34; L_08AECC34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECC3C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2823,7 +2761,6 @@ L_08AECC4C: goto L_08AECC5C; L_08AECC5C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECC90; } @@ -2833,7 +2770,6 @@ L_08AECC64: ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = ctx.gpr[7] != aot_gpr_6; - // nop if (branch_taken) { goto L_08AECC88; } @@ -2850,7 +2786,6 @@ L_08AECC74: } L_08AECC80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECCA8; } @@ -2881,7 +2816,6 @@ L_08AECC98: L_08AECCA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08AECC88; } @@ -2892,11 +2826,20 @@ L_08AECCB4: goto L_08AECCB8; L_08AECCB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECCC0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -2915,7 +2858,6 @@ L_08AECCD0: goto L_08AECCE0; L_08AECCE0: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECD14; } @@ -2925,7 +2867,6 @@ L_08AECCE8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AECD0C; } @@ -2942,7 +2883,6 @@ L_08AECCF8: } L_08AECD04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECD2C; } @@ -2974,7 +2914,6 @@ L_08AECD2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AECD0C; } @@ -2985,11 +2924,20 @@ L_08AECD3C: goto L_08AECD40; L_08AECD40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECD48: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); @@ -3008,7 +2956,6 @@ L_08AECD58: goto L_08AECD68; L_08AECD68: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AECD9C; } @@ -3018,7 +2965,6 @@ L_08AECD70: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(16))); ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AECD94; } @@ -3035,7 +2981,6 @@ L_08AECD80: } L_08AECD8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AECDB4; } @@ -3067,7 +3012,6 @@ L_08AECDB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(84))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AECD94; } @@ -3078,11 +3022,20 @@ L_08AECDC4: goto L_08AECDC8; L_08AECDC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECDD0: ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); jump_target = aot_gpr_31; @@ -3090,7 +3043,17 @@ L_08AECDD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AECDDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -3161,7 +3124,6 @@ L_08AECEA8: ctx.fpr[16] = ctx.fpr[16] + ctx.fpr[17]; ctx.fpr[16] = ctx.fpr[16] + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_6 + static_cast(48)); if (branch_taken) { @@ -3177,9 +3139,7 @@ L_08AECEE4: ctx.fpr[18] = aot_fpr_13 + ctx.fpr[18]; ctx.fpr[16] = ctx.fpr[16] - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AECF18; } @@ -3233,7 +3193,6 @@ L_08AECF7C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AED028; } @@ -3260,7 +3219,6 @@ L_08AECFA8: aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; aot_fpr_14 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] + static_cast(48)); if (branch_taken) { @@ -3276,9 +3234,7 @@ L_08AECFE4: ctx.fpr[16] = aot_fpr_20 + ctx.fpr[16]; aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AED018; } @@ -3323,7 +3279,17 @@ L_08AED02C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED054: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3347,7 +3313,6 @@ L_08AED07C: aot_fpr_20 = std::sqrt(aot_fpr_20); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AED1A4; } @@ -3387,9 +3352,7 @@ L_08AED0E8: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AED1A4; } @@ -3471,7 +3434,6 @@ L_08AED164: goto L_08AED16C; L_08AED16C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AED1A4; } @@ -3493,7 +3455,6 @@ L_08AED174: AOT_REGCACHE_SYNC_OUT(); return; L_08AED198: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AED1A4; } @@ -3510,9 +3471,7 @@ L_08AED1A4: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AED1D4; } @@ -3520,7 +3479,6 @@ L_08AED1A4: } L_08AED1CC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AED26C; } @@ -3529,7 +3487,6 @@ L_08AED1CC: L_08AED1D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10357))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AED264; } @@ -3538,7 +3495,6 @@ L_08AED1D4: L_08AED1E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(46))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AED20C; } @@ -3548,7 +3504,6 @@ L_08AED1EC: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(28))); goto L_08AED214; @@ -3556,7 +3511,6 @@ L_08AED1EC: goto L_08AED204; L_08AED204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AED21C; } @@ -3572,7 +3526,6 @@ L_08AED20C: } L_08AED214: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AED254; } @@ -3580,7 +3533,6 @@ L_08AED214: } L_08AED21C: aot_gpr_31 = (0x08AED224u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AED224u) goto L_08AED224; AOT_REGCACHE_SYNC_OUT(); return; L_08AED224: @@ -3591,9 +3543,7 @@ L_08AED224: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AED25C; } @@ -3634,7 +3584,6 @@ L_08AED264: L_08AED26C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(46))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AED27C; } @@ -3661,7 +3610,17 @@ L_08AED280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED2A0: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14), std::bit_cast(ctx.fpr[15])}; @@ -3685,7 +3644,17 @@ L_08AED2A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED2F4: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(44), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10352))); @@ -3695,7 +3664,17 @@ L_08AED2F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED308: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3718,7 +3697,17 @@ L_08AED328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3735,7 +3724,6 @@ L_08AED348: L_08AED368: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10357))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08AED388; } @@ -3746,7 +3734,6 @@ L_08AED374: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AED3AC; } @@ -3755,7 +3742,6 @@ L_08AED374: L_08AED388: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(44))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AED3AC; } @@ -3767,7 +3753,6 @@ L_08AED394: goto L_08AED054; L_08AED39C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AED3AC; } @@ -3794,7 +3779,6 @@ L_08AED3B8: L_08AED3C0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AED41C; } @@ -3804,7 +3788,6 @@ L_08AED3CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AED420; } @@ -3824,7 +3807,6 @@ L_08AED3DC: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(614), static_cast(aot_gpr_5)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AED420; } @@ -3853,7 +3835,17 @@ L_08AED420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED434: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10348), 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10352), 0u); @@ -3863,7 +3855,17 @@ L_08AED434: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED448: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -3930,18 +3932,26 @@ L_08AED508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x08AED530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 39u, 0x089603D4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AED530u) goto L_08AED530; AOT_REGCACHE_SYNC_OUT(); return; L_08AED530: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AED580; } @@ -3956,7 +3966,6 @@ L_08AED538: goto L_08AED544; L_08AED544: aot_gpr_31 = (0x08AED54Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AED54Cu) goto L_08AED54C; AOT_REGCACHE_SYNC_OUT(); return; L_08AED54C: @@ -3965,7 +3974,6 @@ L_08AED54C: L_08AED550: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(19))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AED580; } @@ -3978,7 +3986,6 @@ L_08AED55C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10356))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AED588; } @@ -3986,7 +3993,6 @@ L_08AED55C: } L_08AED578: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AED58C; } @@ -3994,7 +4000,6 @@ L_08AED578: } L_08AED580: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AED5E4; } @@ -4039,7 +4044,6 @@ L_08AED5BC: L_08AED5D0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10357))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AED5E4; } @@ -4061,7 +4065,17 @@ L_08AED5E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AED5F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4078,7 +4092,6 @@ L_08AED5F8: L_08AED644: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AED660; } @@ -4086,7 +4099,6 @@ L_08AED644: } L_08AED650: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AED734; } @@ -4094,7 +4106,6 @@ L_08AED650: } L_08AED658: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -4104,7 +4115,6 @@ L_08AED660: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AED690; } @@ -4118,7 +4128,6 @@ L_08AED670: AOT_REGCACHE_SYNC_OUT(); return; L_08AED67C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AED690; } @@ -4160,7 +4169,6 @@ L_08AED6B8: L_08AED6C0: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[19]) >= 0; - // nop if (branch_taken) { goto L_08AED6D4; } @@ -4168,7 +4176,6 @@ L_08AED6C0: } L_08AED6CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -4185,7 +4192,6 @@ L_08AED6DC: goto L_08AECDDC; L_08AED6E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AED720; } @@ -4198,7 +4204,6 @@ L_08AED6F0: AOT_REGCACHE_SYNC_OUT(); return; L_08AED6F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AED718; } @@ -4210,7 +4215,6 @@ L_08AED700: goto L_08AECA18; L_08AED708: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AED774; } @@ -4218,7 +4222,6 @@ L_08AED708: } L_08AED710: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AED82C; } @@ -4226,7 +4229,6 @@ L_08AED710: } L_08AED718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -4237,7 +4239,6 @@ L_08AED720: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(36), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -4250,7 +4251,6 @@ L_08AED734: goto L_08AECDDC; L_08AED740: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AED760; } @@ -4276,7 +4276,6 @@ L_08AED760: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(36), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -4323,7 +4322,6 @@ L_08AED7C8: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_16 + static_cast(48)); if (branch_taken) { @@ -4336,9 +4334,7 @@ L_08AED7E8: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AED818; } @@ -4394,7 +4390,6 @@ L_08AED850: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AED874; } @@ -4413,7 +4408,6 @@ L_08AED874: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -4424,9 +4418,7 @@ L_08AED874: L_08AED88C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AED910; } @@ -4461,7 +4453,6 @@ L_08AED8F8: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(16), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AED928; } @@ -4489,7 +4480,6 @@ L_08AED924: L_08AED928: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEDB28; } @@ -4527,7 +4517,6 @@ L_08AED980: aot_gpr_4 = (aot_gpr_4 + static_cast(-4)); aot_gpr_5 = (aot_gpr_4 < static_cast(6) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AEDAD8; } @@ -4567,7 +4556,6 @@ L_08AED9AC: } L_08AED9B4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AEDA98; } @@ -4791,7 +4779,6 @@ L_08AEDB14: } L_08AEDB28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -4861,7 +4848,6 @@ L_08AEDBA8: AOT_REGCACHE_SYNC_OUT(); return; L_08AEDBC4: aot_gpr_31 = (0x08AEDBCCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEDBCCu) goto L_08AEDBCC; AOT_REGCACHE_SYNC_OUT(); return; L_08AEDBCC: @@ -4881,7 +4867,6 @@ L_08AEDBE0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(29))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEDC0C; } @@ -4893,7 +4878,6 @@ L_08AEDC04: goto L_08AEDC0C; L_08AEDC0C: aot_gpr_31 = (0x08AEDC14u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEDC14u) goto L_08AEDC14; AOT_REGCACHE_SYNC_OUT(); return; L_08AEDC14: @@ -4913,7 +4897,6 @@ L_08AEDC28: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(30))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEDC54; } @@ -4926,7 +4909,6 @@ L_08AEDC4C: L_08AEDC54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(20))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AEDD38; } @@ -5008,7 +4990,6 @@ L_08AEDCEC: aot_gpr_4 = (0u + static_cast(-1)); aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(897), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEDE1C; } @@ -5017,7 +4998,6 @@ L_08AEDCEC: L_08AEDD38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(24))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AEDE1C; } @@ -5118,7 +5098,6 @@ L_08AEDE34: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(44))); aot_gpr_4 = (static_cast(aot_gpr_4) < -1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEDE54; } @@ -5137,7 +5116,6 @@ L_08AEDE5C: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(36), ctx.gpr[2]); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(44))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AEDE78; } @@ -5171,21 +5149,49 @@ L_08AEDE78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEDEB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEDEC0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEDEC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5264,7 +5270,17 @@ L_08AEDF74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEDF88: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_gpr_6 << 4u); @@ -5312,7 +5328,6 @@ L_08AEDFFC: L_08AEE028: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25556))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEE080; } @@ -5322,7 +5337,6 @@ L_08AEE034: aot_gpr_5 = (ctx.gpr[18] | 0u); aot_gpr_4 = (aot_gpr_5 + static_cast(32)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AEE080; } @@ -5404,7 +5418,17 @@ L_08AEE0EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE120: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5437,7 +5461,6 @@ L_08AEE158: L_08AEE184: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25556))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEE1E0; } @@ -5448,7 +5471,6 @@ L_08AEE190: aot_gpr_4 = (aot_gpr_16 << 4u); aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AEE1E0; } @@ -5535,7 +5557,17 @@ L_08AEE24C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE294: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5571,7 +5603,6 @@ L_08AEE2E0: L_08AEE30C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-25556))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEE368; } @@ -5582,7 +5613,6 @@ L_08AEE318: ctx.gpr[17] = (ctx.gpr[17] << 4u); ctx.gpr[17] = (aot_gpr_4 + ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AEE368; } @@ -5712,7 +5742,17 @@ L_08AEE44C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE49C: aot_gpr_6 = (16256u << 16u); aot_fpr_13 = std::bit_cast(0u); @@ -5764,11 +5804,20 @@ L_08AEE520: goto L_08AEE560; L_08AEE560: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE568: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5833,7 +5882,17 @@ L_08AEE5F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE610: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5877,7 +5936,6 @@ L_08AEE668: AOT_REGCACHE_SYNC_OUT(); return; L_08AEE678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEE6A0; } @@ -5906,7 +5964,6 @@ L_08AEE6A0: goto L_08AEE49C; L_08AEE6AC: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08AEE6E4; } @@ -5945,7 +6002,17 @@ L_08AEE6F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE70C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load_word_right(aot_gpr_6 + static_cast(1), ctx.gpr[8])); @@ -5981,7 +6048,17 @@ L_08AEE70C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(88))); @@ -6032,7 +6109,6 @@ L_08AEE808: } L_08AEE840: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEE89C; } @@ -6089,7 +6165,17 @@ L_08AEE8B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE8D0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(88), 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(92), 0u); @@ -6098,7 +6184,17 @@ L_08AEE8D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEE8E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(88))); @@ -6164,7 +6260,6 @@ L_08AEE970: } L_08AEE9A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEE9FC; } @@ -6254,7 +6349,17 @@ L_08AEEA70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEA94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6311,7 +6416,17 @@ L_08AEEB00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEB18: aot_gpr_5 = (aot_gpr_5 << 16u); aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); @@ -6329,8 +6444,6 @@ L_08AEEB18: ctx.gpr[9] = (ctx.lo); aot_gpr_6 = (aot_gpr_6 + ctx.gpr[9]); ctx.gpr[9] = (ctx.hi); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(ctx.gpr[8])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_5 = (aot_gpr_5 + ctx.gpr[9]); ctx.gpr[8] = (ctx.lo); @@ -6346,7 +6459,6 @@ L_08AEEB78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(391))); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AEEBA0; } @@ -6362,7 +6474,6 @@ L_08AEEB88: } L_08AEEB90: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEEBA0; } @@ -6381,11 +6492,20 @@ L_08AEEBA0: goto L_08AEEBA4; L_08AEEBA4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEBAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -6448,7 +6568,17 @@ L_08AEEC30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEC48: aot_gpr_6 = (aot_gpr_6 << 16u); aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 16u)); @@ -6504,11 +6634,20 @@ L_08AEEC48: aot_fpr_12 = aot_fpr_13 + aot_fpr_12; aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(4), std::bit_cast(aot_fpr_12)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEECF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6517,7 +6656,6 @@ L_08AEECF8: aot_gpr_5 = (aot_gpr_16 < static_cast(170) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AEED44; } @@ -6528,7 +6666,6 @@ L_08AEED18: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_gpr_5 < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AEED3C; } @@ -6536,7 +6673,6 @@ L_08AEED18: } L_08AEED2C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AEED4C; } @@ -6544,7 +6680,6 @@ L_08AEED2C: } L_08AEED34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE00; } @@ -6626,7 +6761,6 @@ L_08AEED84: } L_08AEED8C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AEEDBC; } @@ -6634,7 +6768,6 @@ L_08AEED8C: } L_08AEED94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE00; } @@ -6642,12 +6775,10 @@ L_08AEED94: } L_08AEED9C: aot_gpr_31 = (0x08AEEDA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEDA4u) goto L_08AEEDA4; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEDA4: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08AEEDB4; } @@ -6655,7 +6786,6 @@ L_08AEEDA4: } L_08AEEDAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE00; } @@ -6671,12 +6801,10 @@ L_08AEEDB4: } L_08AEEDBC: aot_gpr_31 = (0x08AEEDC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEDC4u) goto L_08AEEDC4; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEDC4: { const bool branch_taken = static_cast(ctx.gpr[2]) > 0; - // nop if (branch_taken) { goto L_08AEEDD4; } @@ -6684,7 +6812,6 @@ L_08AEEDC4: } L_08AEEDCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE00; } @@ -6700,13 +6827,11 @@ L_08AEEDD4: } L_08AEEDDC: aot_gpr_31 = (0x08AEEDE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEDE4u) goto L_08AEEDE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEDE4: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEEDF8; } @@ -6714,7 +6839,6 @@ L_08AEEDE4: } L_08AEEDF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE00; } @@ -6751,19 +6875,26 @@ L_08AEEE14: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(17720))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEE2C: aot_gpr_31 = (0x08AEEE34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEE34u) goto L_08AEEE34; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEE34: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08AEEE44; } @@ -6787,12 +6918,10 @@ L_08AEEE44: } L_08AEEE4C: aot_gpr_31 = (0x08AEEE54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEE54u) goto L_08AEEE54; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEE54: { const bool branch_taken = static_cast(ctx.gpr[2]) > 0; - // nop if (branch_taken) { goto L_08AEEE64; } @@ -6800,7 +6929,6 @@ L_08AEEE54: } L_08AEEE5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE3C; } @@ -6816,13 +6944,11 @@ L_08AEEE64: } L_08AEEE6C: aot_gpr_31 = (0x08AEEE74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEE74u) goto L_08AEEE74; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEE74: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEEE88; } @@ -6830,7 +6956,6 @@ L_08AEEE74: } L_08AEEE80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE3C; } @@ -6846,13 +6971,11 @@ L_08AEEE88: } L_08AEEE90: aot_gpr_31 = (0x08AEEE98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEE98u) goto L_08AEEE98; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEE98: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEEEAC; } @@ -6860,7 +6983,6 @@ L_08AEEE98: } L_08AEEEA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE3C; } @@ -6876,13 +6998,11 @@ L_08AEEEAC: } L_08AEEEB4: aot_gpr_31 = (0x08AEEEBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 359u, 0x08A01484u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEEEBCu) goto L_08AEEEBC; AOT_REGCACHE_SYNC_OUT(); return; L_08AEEEBC: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEEED0; } @@ -6890,7 +7010,6 @@ L_08AEEEBC: } L_08AEEEC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AEEE3C; } @@ -6907,7 +7026,17 @@ L_08AEEED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEEE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -7024,7 +7153,6 @@ L_08AEEFB8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEEFD4; } @@ -7047,7 +7175,17 @@ L_08AEEFD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEEFF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7072,7 +7210,6 @@ L_08AEF01C: L_08AEF028: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF040; } @@ -7158,7 +7295,17 @@ L_08AEF0B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF0DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7183,7 +7330,6 @@ L_08AEF108: L_08AEF114: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF12C; } @@ -7268,7 +7414,17 @@ L_08AEF1A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF1C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7293,7 +7449,6 @@ L_08AEF1F0: L_08AEF1FC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF214; } @@ -7380,7 +7535,17 @@ L_08AEF290: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF2B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7405,7 +7570,6 @@ L_08AEF2E0: L_08AEF2EC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF304; } @@ -7490,12 +7654,21 @@ L_08AEF378: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF39C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AEF3ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 231u, 0x08AB92E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AEF3ACu) goto L_08AEF3AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AEF3AC: @@ -7506,7 +7679,17 @@ L_08AEF3AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF3BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7531,7 +7714,6 @@ L_08AEF3E8: L_08AEF3F4: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF40C; } @@ -7624,7 +7806,17 @@ L_08AEF4A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF4C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7649,7 +7841,6 @@ L_08AEF4F0: L_08AEF4FC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF514; } @@ -7741,7 +7932,17 @@ L_08AEF5A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF5C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7766,7 +7967,6 @@ L_08AEF5F4: L_08AEF600: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF618; } @@ -7860,7 +8060,17 @@ L_08AEF6B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF6D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -7885,7 +8095,6 @@ L_08AEF700: L_08AEF70C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF724; } @@ -7977,7 +8186,17 @@ L_08AEF7B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF7D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8002,7 +8221,6 @@ L_08AEF804: L_08AEF810: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF828; } @@ -8088,7 +8306,17 @@ L_08AEF8A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF8C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8113,7 +8341,6 @@ L_08AEF8F0: L_08AEF8FC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEF914; } @@ -8206,7 +8433,17 @@ L_08AEF9A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEF9CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8229,7 +8466,6 @@ L_08AEF9FC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(512), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AEFA20; } @@ -8253,7 +8489,17 @@ L_08AEFA20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEFA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8278,7 +8524,6 @@ L_08AEFA68: L_08AEFA74: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEFA8C; } @@ -8370,7 +8615,17 @@ L_08AEFB1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEFB40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8395,7 +8650,6 @@ L_08AEFB6C: L_08AEFB78: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEFB90; } @@ -8489,7 +8743,17 @@ L_08AEFC28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEFC4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8514,7 +8778,6 @@ L_08AEFC78: L_08AEFC84: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEFC9C; } @@ -8606,7 +8869,17 @@ L_08AEFD2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEFD50: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8631,7 +8904,6 @@ L_08AEFD7C: L_08AEFD88: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEFDA0; } @@ -8723,7 +8995,17 @@ L_08AEFE30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEFE54: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8748,7 +9030,6 @@ L_08AEFE80: L_08AEFE8C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEFEA4; } @@ -8842,7 +9123,17 @@ L_08AEFF3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AEFF60: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -8867,7 +9158,6 @@ L_08AEFF8C: L_08AEFF98: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AEFFB0; } diff --git a/profiles/vcs/generated/generated_unit_0187.cpp b/profiles/vcs/generated/generated_unit_0187.cpp index feaef6c..0e2bf3d 100644 --- a/profiles/vcs/generated/generated_unit_0187.cpp +++ b/profiles/vcs/generated/generated_unit_0187.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0187[4096] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 8, 9, 10, 0, 0, 0, 0, 0, 11, 0, 0, 12, 0, 13, 14, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 23, 24, 0, 25, 0, 0, 0, 0, 26, 0, 0, - 27, 0, 28, 29, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, - 33, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 41, - 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 0, - 0, 54, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, - 59, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, - 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 0, 73, 0, 0, 0, - 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, 78, 79, 80, 0, 0, 0, 0, 0, 81, 0, 0, 82, - 0, 83, 84, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 0, 0, 91, 0, 92, 93, 94, 0, 0, 0, 0, 0, 95, 0, - 0, 96, 0, 97, 98, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, - 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 105, 0, 106, 107, 108, 0, 0, 0, 0, - 109, 0, 0, 110, 0, 111, 112, 0, 0, 113, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 117, 118, 119, 0, 0, 0, 0, 120, 0, 0, 121, 0, - 122, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, - 0, 0, 0, 0, 128, 0, 0, 129, 0, 0, 130, 0, 131, 132, 133, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 136, 137, 0, 0, 138, 0, 139, - 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 142, 0, 0, 143, 0, 144, 145, 146, 0, 0, 0, 0, 0, 147, 0, - 0, 148, 0, 149, 150, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 161, 0, 162, - 163, 164, 0, 0, 0, 0, 0, 165, 0, 0, 166, 0, 167, 168, 0, 0, 169, 0, 0, 170, 0, 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, - 0, 0, 173, 0, 0, 0, 0, 174, 0, 175, 176, 0, 177, 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, 183, - 0, 0, 184, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 196, 0, 197, 198, 199, 0, - 0, 0, 0, 0, 200, 0, 0, 201, 0, 202, 203, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 205, 0, 0, 0, 206, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 209, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 213, 0, - 0, 214, 0, 215, 216, 217, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 220, 221, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, - 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 232, 233, 234, - 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 237, 238, 0, 0, 239, 0, 0, 240, 0, 241, 242, 0, 0, 0, 0, 243, 0, 0, 244, 0, 245, 246, - 0, 247, 0, 248, 0, 0, 249, 0, 250, 251, 0, 252, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 255, 0, 0, 256, 0, 257, - 258, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 263, 0, 264, 0, 0, 265, 0, 0, 266, 0, 0, - 267, 0, 268, 269, 0, 270, 0, 0, 0, 0, 271, 0, 0, 272, 0, 273, 274, 0, 0, 275, 0, 0, 276, 0, 277, 278, 0, 0, 0, 0, 279, 0, - 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, 283, 0, 284, 0, 0, 285, 0, 0, 286, 0, 0, 287, 0, 288, 289, - 0, 290, 0, 0, 0, 0, 291, 0, 0, 292, 0, 293, 294, 0, 0, 295, 0, 0, 296, 0, 297, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, - 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 304, 305, 306, 0, 0, 0, 0, 0, 307, - 0, 0, 308, 0, 309, 310, 0, 0, 311, 0, 0, 0, 0, 0, 312, 0, 0, 313, 0, 314, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 317, 0, - 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 0, 0, 322, 0, 0, 323, 0, 324, 325, 326, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 329, 330, 0, 0, 331, 0, 0, 0, 0, 0, - 332, 0, 0, 333, 0, 334, 0, 335, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 343, 0, 344, 345, 346, 0, 0, 0, 0, 0, - 347, 0, 0, 348, 0, 349, 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, 0, 357, 0, 358, 359, 360, 0, 0, 0, 0, 0, 361, 0, 0, 362, - 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 371, 0, 372, 373, 374, 0, 0, 0, 0, 0, 375, 0, - 0, 376, 0, 377, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 0, 0, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, 385, 0, 386, 387, 0, 388, 0, 0, 0, 389, 0, 0, - 390, 0, 391, 392, 0, 0, 393, 0, 0, 394, 0, 395, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, - 398, 0, 0, 399, 0, 0, 400, 0, 401, 402, 403, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 406, 407, 0, 0, 408, 0, 0, 409, 0, 410, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 414, 415, 0, 416, 0, 0, 417, 0, 0, 418, - 0, 0, 419, 0, 420, 421, 0, 422, 0, 0, 0, 0, 423, 0, 0, 424, 0, 425, 426, 0, 0, 427, 0, 0, 428, 0, 429, 430, 0, 0, 0, 0, - 431, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 435, 0, 436, 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, - 440, 441, 0, 442, 0, 0, 0, 0, 443, 0, 0, 444, 0, 445, 446, 0, 0, 447, 0, 0, 448, 0, 449, 450, 0, 0, 0, 0, 451, 0, 0, 0, - 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 455, 456, 0, 0, 0, 0, 0, 0, 0, 457, 0, - 0, 0, 0, 0, 0, 0, 458, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 463, 0, 464, 465, 0, 0, 0, 0, 466, 0, 0, 467, 0, 468, 469, 0, 0, 470, 0, 0, 0, - 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 0, 474, 0, 475, 476, 477, 0, 0, 0, 0, 0, 478, - 0, 0, 479, 0, 480, 481, 0, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, - 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 0, 489, 0, 490, 491, 492, 0, 0, 0, 0, 0, 493, 0, 0, - 494, 0, 495, 496, 0, 0, 497, 0, 0, 0, 0, 0, 0, 498, 0, 0, 499, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 0, 505, 0, 506, - 0, 507, 0, 508, 0, 509, 510, 0, 511, 0, 512, 0, 513, 0, 514, 0, 515, 0, 516, 0, 517, 0, 0, 518, 0, 519, 0, 520, 0, 521, 0, 522, - 0, 523, 0, 0, 524, 0, 0, 525, 0, 526, 0, 527, 0, 528, 0, 529, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, 0, 0, 536, 0, 537, 538, 0, 539, 0, 0, 0, 0, 540, 0, - 0, 541, 0, 542, 543, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, - 547, 0, 548, 0, 0, 0, 549, 0, 0, 550, 0, 0, 551, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 555, - 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 563, 0, 564, 0, - 565, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 567, 0, 568, 0, 0, 0, 569, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 571, - 0, 572, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, - 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, - 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 585, 0, 0, 586, 587, 0, 588, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 594, 0, - 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 597, 0, 598, 599, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 601, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 605, 0, 0, 0, 0, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 609, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 612, 0, 0, 613, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 618, 0, 619, - 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 0, 0, 625, 0, - 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 628, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 634, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 637, 0, 0, 638, 0, 639, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 643, - 0, 644, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 648, 0, 649, 0, 0, 0, 0, - 650, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 654, - 0, 0, 0, 655, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, 0, 659, 660, 0, 661, 0, 0, 0, 0, - 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, - 665, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, - 0, 670, 0, 671, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 675, 0, 0, 0, 676, 0, 0, - 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, - 0, 0, 683, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 688, 0, 689, 0, - 0, 0, 0, 690, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 693, 0, 694, 0, 0, 0, 0, 695, 0, 0, - 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 698, 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, - 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, - 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 711, 0, 712, 0, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 717, 0, 0, 718, 719, 0, 0, 0, 0, - 0, 720, 0, 721, 0, 722, 0, 723, 0, 724, 725, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 728, 0, 0, 0, 0, 0, 0, 0, - 729, 0, 0, 0, 0, 0, 0, 0, 730, 0, 731, 0, 0, 732, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, - 0, 735, 0, 736, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 739, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 741, 0, 0, - 0, 0, 0, 742, 743, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, 746, 0, 747, 0, 0, 0, 748, 0, - 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 751, 0, 752, 0, 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 758, 0, 759, 0, 0, - 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 0, 0, 0, 0, 762, 763, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 770, 0, 0, 0, - 0, 0, 771, 772, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 0, 776, 0, 0, 0, 0, 777, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 781, 0, 0, 0, - 0, 0, 0, 0, 782, 0, 783, 0, 784, 0, 785, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 0, - 0, 789, 0, 0, 790, 0, 0, 0, 0, 0, 791, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 794, 0, 0, 0, 795, 0, 0, - 0, 796, 0, 0, 0, 797, 0, 0, 0, 798, 0, 0, 0, 799, 0, 0, 0, 800, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 802, 0, 0, 803, 0, 804, 0, 0, 0, 0, 0, 805, 0, 806, 0, 807, 808, 0, 0, 0, 0, 0, 0, 809, 0, 810, 0, 0, 0, 0, 0, - 0, 0, 811, 0, 0, 812, 0, 0, 0, 0, 0, 813, 814, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, - 0, 817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, - 821, 0, 0, 822, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 826, 0, 0, 0, 0, 0, 827, 828, 0, - 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 831, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 833, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 837, 0, 0, 0, 838, 0, 0, 0, - 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 841, 0, 0, 842, 0, 0, 0, 0, 0, 843, 0, 844, - 0, 0, 0, 0, 0, 845, 0, 846, 0, 0, 0, 0, 847, 0, 0, 0, 0, 848, 0, 0, 0, 0, 849, 0, 850, 0, 0, 851, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 854, 0, 855, 0, 0, 0, 0, 856, - 0, 0, 0, 0, 857, 0, 0, 0, 0, 858, 0, 859, 0, 0, 860, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 0, 862, 0, 0, 0, 0, 0, - 0, 0, 863, 0, 0, 0, 864, 0, 0, 865, 866, 0, 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, - 0, 0, 0, 869, 0, 0, 870, 0, 871, 872, 0, 0, 0, 0, 0, 0, 873, 0, 0, 874, 0, 875, 876, 0, 0, 0, 0, 877, 0, 0, 0, 0, - 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, - 0, 881, 0, 0, 882, 0, 883, 884, 0, 0, 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, 890, 0, 891, 892, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0187[64] = { + 0x2690749002010011ull, 0x2169240004020020ull, 0x902112454000044Dull, 0x4010000200804840ull, + 0x4800808000000100ull, 0x6000202124004042ull, 0x1240040424800808ull, 0x0400202690749002ull, + 0x1000809A41D24008ull, 0x487492690E920020ull, 0xA690749010041013ull, 0x0101029A41D24040ull, + 0x08293483A4808490ull, 0x85240454888A9684ull, 0x0000269074910000ull, 0x4880004011000144ull, + 0x8000A2000013483Aull, 0xD21A4D20E9202008ull, 0x24B40209A4408B4Aull, 0xD24B40204349A42Dull, + 0x83A4800204349A42ull, 0x0008020140AA4134ull, 0x080502A904D20E92ull, 0x0102026907490020ull, + 0x0400202690749002ull, 0x1000809A41D24008ull, 0x01020A4D22D24020ull, 0x92D0081052690749ull, + 0x492D00810D2690B4ull, 0x4069000810D2690Bull, 0x13486900201000C0ull, 0x0110213483A48008ull, + 0xA555204D20E92002ull, 0x0805AA92AA95556Aull, 0x4000089A42D24800ull, 0x8080484090211245ull, + 0x8082282152008000ull, 0x10008450108A0212ull, 0x4500800201016410ull, 0x108A0200805A0802ull, + 0xA401042900410A40ull, 0x410A401042900410ull, 0x900410A401042900ull, 0xA01000410A401042ull, + 0x080040100B410048ull, 0x2280810A40080405ull, 0x5200821480211404ull, 0x80A1000821480208ull, + 0x0142001040140100ull, 0x0C820200108A0201ull, 0x40042501014016AAull, 0x452008182405008Aull, + 0x2810210002129010ull, 0x120281100100C120ull, 0x110014001094040Cull, 0x22200C1202804550ull, + 0x0503505200222222ull, 0x4010200280081824ull, 0x4101401060901409ull, 0xA090100411040500ull, + 0x85002020094210A0ull, 0x0800864404404A10ull, 0x0101000808690348ull, 0xD2010200010100D2ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0187[64] = { + 1u, 16u, 27u, 42u, 49u, 54u, 64u, 74u, 88u, 102u, 122u, 140u, 155u, 173u, 193u, 205u, + 214u, 227u, 247u, 267u, 290u, 308u, 321u, 340u, 354u, 368u, 382u, 398u, 419u, 440u, 458u, 471u, + 486u, 507u, 533u, 547u, 561u, 572u, 584u, 595u, 607u, 620u, 632u, 644u, 655u, 665u, 677u, 690u, + 701u, 709u, 720u, 735u, 749u, 760u, 771u, 782u, 796u, 811u, 821u, 834u, 845u, 857u, 869u, 881u, }; void recomp_unit_0187_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0187_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AF0000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0187[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0187[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0187[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AF0000; @@ -1104,7 +1011,17 @@ L_08AF0040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0064: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -1129,7 +1046,6 @@ L_08AF0090: L_08AF009C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF00B4; } @@ -1224,7 +1140,17 @@ L_08AF0144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0168: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1261,7 +1187,6 @@ L_08AF01B4: L_08AF01C0: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AF01D8; } @@ -1349,7 +1274,6 @@ L_08AF0228: } L_08AF0278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF0298; } @@ -1376,7 +1300,6 @@ L_08AF0288: L_08AF0298: aot_gpr_6 = (static_cast(aot_gpr_5) < 64 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AF02B0; } @@ -1467,7 +1390,17 @@ L_08AF0338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF035C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1507,7 +1440,17 @@ L_08AF0384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF03D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -1575,7 +1518,17 @@ L_08AF0420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF049C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1628,7 +1581,17 @@ L_08AF0504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0518: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1681,7 +1644,17 @@ L_08AF0580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0594: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1707,7 +1680,6 @@ L_08AF05B4: aot_gpr_5 = (17392u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(16), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -1727,7 +1699,17 @@ L_08AF05F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF060C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1780,7 +1762,17 @@ L_08AF0674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0688: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1833,7 +1825,17 @@ L_08AF06F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0704: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -1858,7 +1860,6 @@ L_08AF0730: L_08AF073C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF0754; } @@ -1951,7 +1952,17 @@ L_08AF07E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF080C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -1976,7 +1987,6 @@ L_08AF0838: L_08AF0844: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF085C; } @@ -2069,7 +2079,17 @@ L_08AF08F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0914: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -2095,7 +2115,6 @@ L_08AF0944: L_08AF0950: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AF0968; } @@ -2162,7 +2181,6 @@ L_08AF09B0: L_08AF09BC: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AF09D4; } @@ -2248,7 +2266,17 @@ L_08AF0A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0A70: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -2270,7 +2298,6 @@ L_08AF0A90: L_08AF0A9C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF0AB4; } @@ -2339,7 +2366,17 @@ L_08AF0AFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0B18: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -2361,7 +2398,6 @@ L_08AF0B38: L_08AF0B44: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF0B5C; } @@ -2430,7 +2466,17 @@ L_08AF0BA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0BC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2483,7 +2529,17 @@ L_08AF0C28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0C3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -2505,7 +2561,6 @@ L_08AF0C5C: L_08AF0C68: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF0C80; } @@ -2566,7 +2621,6 @@ L_08AF0CC0: } L_08AF0CCC: aot_gpr_31 = (0x08AF0CD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF0CD4u) goto L_08AF0CD4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF0CD4: @@ -2592,13 +2646,22 @@ L_08AF0CEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0D08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF0D28; } @@ -2606,7 +2669,6 @@ L_08AF0D08: } L_08AF0D1C: aot_gpr_31 = (0x08AF0D24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF0D24u) goto L_08AF0D24; AOT_REGCACHE_SYNC_OUT(); return; L_08AF0D24: @@ -2628,7 +2690,6 @@ L_08AF0D30: } L_08AF0D3C: aot_gpr_31 = (0x08AF0D44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF0D44u) goto L_08AF0D44; AOT_REGCACHE_SYNC_OUT(); return; L_08AF0D44: @@ -2650,18 +2711,26 @@ L_08AF0D5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0D6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AF0D7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 238u, 0x08AB9394u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF0D7Cu) goto L_08AF0D7C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF0D7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF0D90; } @@ -2669,7 +2738,6 @@ L_08AF0D7C: } L_08AF0D88: aot_gpr_31 = (0x08AF0D90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF0D90u) goto L_08AF0D90; AOT_REGCACHE_SYNC_OUT(); return; L_08AF0D90: @@ -2685,7 +2753,17 @@ L_08AF0D98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0DA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2700,7 +2778,6 @@ L_08AF0DA8: L_08AF0DC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF0DE0; } @@ -2728,7 +2805,17 @@ L_08AF0DE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0DFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2766,7 +2853,6 @@ L_08AF0E50: L_08AF0E5C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AF0E74; } @@ -2844,7 +2930,6 @@ L_08AF0F08: aot_gpr_16 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7986))); aot_gpr_4 = (static_cast(aot_gpr_16) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF0F20; } @@ -2900,7 +2985,17 @@ L_08AF0F70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF0F98: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2938,7 +3033,6 @@ L_08AF0FEC: L_08AF0FF8: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AF1010; } @@ -3016,7 +3110,6 @@ L_08AF10A4: aot_gpr_16 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7986))); aot_gpr_4 = (static_cast(aot_gpr_16) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF10BC; } @@ -3072,7 +3165,17 @@ L_08AF110C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1134: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -3094,7 +3197,6 @@ L_08AF1154: L_08AF1160: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF1178; } @@ -3155,7 +3257,6 @@ L_08AF11B8: } L_08AF11C4: aot_gpr_31 = (0x08AF11CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF11CCu) goto L_08AF11CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF11CC: @@ -3172,7 +3273,6 @@ L_08AF11D0: L_08AF11E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF11FC; } @@ -3180,7 +3280,6 @@ L_08AF11E4: } L_08AF11F0: aot_gpr_31 = (0x08AF11F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF11F8u) goto L_08AF11F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF11F8: @@ -3188,12 +3287,10 @@ L_08AF11F8: goto L_08AF11FC; L_08AF11FC: aot_gpr_31 = (0x08AF1204u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 556u, 0x089BAA78u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1204u) goto L_08AF1204; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1204: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08AF123C; } @@ -3202,7 +3299,6 @@ L_08AF1204: L_08AF120C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF1224; } @@ -3210,7 +3306,6 @@ L_08AF120C: } L_08AF1218: aot_gpr_31 = (0x08AF1220u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1220u) goto L_08AF1220; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1220: @@ -3242,12 +3337,21 @@ L_08AF123C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1258: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AF1268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0173_entry, 173u, 241u, 0x08AB93D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1268u) goto L_08AF1268; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1268: @@ -3259,7 +3363,6 @@ L_08AF1268: goto L_08AF1274; L_08AF1274: aot_gpr_31 = (0x08AF127Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF127Cu) goto L_08AF127C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF127C: @@ -3281,7 +3384,17 @@ L_08AF128C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF12A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3290,7 +3403,6 @@ L_08AF12A4: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF12D4; } @@ -3298,7 +3410,6 @@ L_08AF12A4: } L_08AF12C8: aot_gpr_31 = (0x08AF12D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF12D0u) goto L_08AF12D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF12D0: @@ -3327,7 +3438,6 @@ L_08AF12E8: L_08AF12F4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF130C; } @@ -3388,7 +3498,6 @@ L_08AF134C: } L_08AF1358: aot_gpr_31 = (0x08AF1360u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1360u) goto L_08AF1360; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1360: @@ -3416,7 +3525,17 @@ L_08AF1378: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1394: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3425,7 +3544,6 @@ L_08AF1394: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF13C4; } @@ -3433,7 +3551,6 @@ L_08AF1394: } L_08AF13B8: aot_gpr_31 = (0x08AF13C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF13C0u) goto L_08AF13C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF13C0: @@ -3462,7 +3579,6 @@ L_08AF13D8: L_08AF13E4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF13FC; } @@ -3523,7 +3639,6 @@ L_08AF143C: } L_08AF1448: aot_gpr_31 = (0x08AF1450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1450u) goto L_08AF1450; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1450: @@ -3551,7 +3666,17 @@ L_08AF1468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1484: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[20]); @@ -3580,7 +3705,6 @@ L_08AF14BC: L_08AF14C8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF14E0; } @@ -3642,7 +3766,6 @@ L_08AF1520: L_08AF1538: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF154C; } @@ -3650,7 +3773,6 @@ L_08AF1538: } L_08AF1544: aot_gpr_31 = (0x08AF154Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF154Cu) goto L_08AF154C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF154C: @@ -3660,7 +3782,6 @@ L_08AF154C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF1554: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AF1580; } @@ -3678,7 +3799,6 @@ L_08AF155C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF1578: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF15A4; } @@ -3713,7 +3833,17 @@ L_08AF15A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF15CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[20]); @@ -3742,7 +3872,6 @@ L_08AF1604: L_08AF1610: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF1628; } @@ -3804,7 +3933,6 @@ L_08AF1668: L_08AF1680: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF1694; } @@ -3812,7 +3940,6 @@ L_08AF1680: } L_08AF168C: aot_gpr_31 = (0x08AF1694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1694u) goto L_08AF1694; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1694: @@ -3822,7 +3949,6 @@ L_08AF1694: AOT_REGCACHE_SYNC_OUT(); return; L_08AF169C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AF16C8; } @@ -3840,7 +3966,6 @@ L_08AF16A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AF16C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF16EC; } @@ -3875,7 +4000,17 @@ L_08AF16EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1714: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -3900,7 +4035,6 @@ L_08AF1740: L_08AF174C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF1764; } @@ -3987,7 +4121,17 @@ L_08AF17E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1804: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -4012,7 +4156,6 @@ L_08AF1830: L_08AF183C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF1854; } @@ -4105,7 +4248,17 @@ L_08AF18E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF190C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -4130,7 +4283,6 @@ L_08AF1938: L_08AF1944: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF195C; } @@ -4223,7 +4375,17 @@ L_08AF19F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1A14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4248,7 +4410,6 @@ L_08AF1A38: L_08AF1A44: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AF1A5C; } @@ -4308,7 +4469,6 @@ L_08AF1A98: } L_08AF1AA4: aot_gpr_31 = (0x08AF1AACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1AACu) goto L_08AF1AAC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1AAC: @@ -4334,7 +4494,17 @@ L_08AF1AC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1AE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -4356,7 +4526,6 @@ L_08AF1B00: L_08AF1B0C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF1B24; } @@ -4417,7 +4586,6 @@ L_08AF1B64: } L_08AF1B70: aot_gpr_31 = (0x08AF1B78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1B78u) goto L_08AF1B78; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1B78: @@ -4443,7 +4611,17 @@ L_08AF1B90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1BAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4452,7 +4630,6 @@ L_08AF1BAC: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF1BDC; } @@ -4460,7 +4637,6 @@ L_08AF1BAC: } L_08AF1BD0: aot_gpr_31 = (0x08AF1BD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1BD8u) goto L_08AF1BD8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1BD8: @@ -4489,7 +4665,6 @@ L_08AF1BF0: L_08AF1BFC: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF1C14; } @@ -4550,7 +4725,6 @@ L_08AF1C54: } L_08AF1C60: aot_gpr_31 = (0x08AF1C68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1C68u) goto L_08AF1C68; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1C68: @@ -4578,7 +4752,17 @@ L_08AF1C80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1C9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4587,7 +4771,6 @@ L_08AF1C9C: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF1CCC; } @@ -4595,7 +4778,6 @@ L_08AF1C9C: } L_08AF1CC0: aot_gpr_31 = (0x08AF1CC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1CC8u) goto L_08AF1CC8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1CC8: @@ -4624,7 +4806,6 @@ L_08AF1CE0: L_08AF1CEC: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF1D04; } @@ -4685,7 +4866,6 @@ L_08AF1D44: } L_08AF1D50: aot_gpr_31 = (0x08AF1D58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF1D58u) goto L_08AF1D58; AOT_REGCACHE_SYNC_OUT(); return; L_08AF1D58: @@ -4713,7 +4893,17 @@ L_08AF1D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1D8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4780,14 +4970,11 @@ L_08AF1E1C: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); ctx.gpr[8] = (static_cast(aot_gpr_16) < static_cast(aot_gpr_5) ? 1u : 0u); ctx.gpr[9] = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(aot_gpr_6); const std::int32_t divisor = static_cast(ctx.gpr[7]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_6 = (ctx.gpr[9] + static_cast(48)); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_6)); aot_gpr_6 = (ctx.lo); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AF1E1C; } @@ -4809,7 +4996,17 @@ L_08AF1E50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1E74: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[17]); @@ -4888,7 +5085,17 @@ L_08AF1EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF1F0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -4915,7 +5122,6 @@ L_08AF1F3C: L_08AF1F48: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AF1F60; } @@ -4970,7 +5176,6 @@ L_08AF1FA0: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(29704), 0u); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF1FD0; } @@ -4983,7 +5188,6 @@ L_08AF1FB4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(29704), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF1FB4; } @@ -5012,7 +5216,17 @@ L_08AF1FE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2004: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-9752))); @@ -5040,7 +5254,6 @@ L_08AF2034: L_08AF2040: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08AF2058; } @@ -5119,7 +5332,6 @@ L_08AF20C0: } L_08AF20C8: aot_gpr_31 = (0x08AF20D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF20D0u) goto L_08AF20D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF20D0: @@ -5145,7 +5357,6 @@ L_08AF20E8: goto L_08AF20F4; L_08AF20F4: aot_gpr_31 = (0x08AF20FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF20FCu) goto L_08AF20FC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF20FC: @@ -5162,7 +5373,6 @@ L_08AF2104: } L_08AF210C: aot_gpr_31 = (0x08AF2114u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2114u) goto L_08AF2114; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2114: @@ -5175,7 +5385,6 @@ L_08AF2118: AOT_REGCACHE_SYNC_OUT(); return; L_08AF2120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF21C8; } @@ -5191,7 +5400,6 @@ L_08AF2128: } L_08AF2130: aot_gpr_31 = (0x08AF2138u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2138u) goto L_08AF2138; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2138: @@ -5217,7 +5425,6 @@ L_08AF2150: goto L_08AF215C; L_08AF215C: aot_gpr_31 = (0x08AF2164u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2164u) goto L_08AF2164; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2164: @@ -5226,7 +5433,6 @@ L_08AF2164: goto L_08AF216C; L_08AF216C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF217C; } @@ -5234,7 +5440,6 @@ L_08AF216C: } L_08AF2174: aot_gpr_31 = (0x08AF217Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF217Cu) goto L_08AF217C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF217C: @@ -5257,7 +5462,6 @@ L_08AF2190: goto L_08AF219C; L_08AF219C: aot_gpr_31 = (0x08AF21A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF21A4u) goto L_08AF21A4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF21A4: @@ -5274,7 +5478,6 @@ L_08AF21AC: } L_08AF21B4: aot_gpr_31 = (0x08AF21BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF21BCu) goto L_08AF21BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF21BC: @@ -5301,7 +5504,17 @@ L_08AF21C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF21EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5338,7 +5551,6 @@ L_08AF2238: L_08AF2244: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AF225C; } @@ -5425,7 +5637,6 @@ L_08AF22AC: } L_08AF22F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF2318; } @@ -5452,7 +5663,6 @@ L_08AF2308: L_08AF2318: aot_gpr_6 = (static_cast(aot_gpr_5) < 64 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AF2330; } @@ -5543,7 +5753,17 @@ L_08AF23B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF23DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5575,7 +5795,17 @@ L_08AF23FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF243C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5600,7 +5830,6 @@ L_08AF2464: } L_08AF2470: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF24AC; } @@ -5608,7 +5837,6 @@ L_08AF2470: } L_08AF2478: aot_gpr_31 = (0x08AF2480u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2480u) goto L_08AF2480; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2480: @@ -5633,7 +5861,6 @@ L_08AF2494: } L_08AF24AC: aot_gpr_31 = (0x08AF24B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF24B4u) goto L_08AF24B4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF24B4: @@ -5656,7 +5883,17 @@ L_08AF24C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF24DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5670,7 +5907,6 @@ L_08AF24DC: AOT_REGCACHE_SYNC_OUT(); return; L_08AF24FC: aot_gpr_31 = (0x08AF2504u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2504u) goto L_08AF2504; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2504: @@ -5688,7 +5924,17 @@ L_08AF2510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2524: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5702,7 +5948,6 @@ L_08AF2524: AOT_REGCACHE_SYNC_OUT(); return; L_08AF2544: aot_gpr_31 = (0x08AF254Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF254Cu) goto L_08AF254C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF254C: @@ -5721,7 +5966,17 @@ L_08AF255C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2570: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5735,7 +5990,6 @@ L_08AF2570: AOT_REGCACHE_SYNC_OUT(); return; L_08AF2590: aot_gpr_31 = (0x08AF2598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2598u) goto L_08AF2598; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2598: @@ -5754,7 +6008,17 @@ L_08AF25A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF25BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -5776,7 +6040,6 @@ L_08AF25F0: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); if (branch_taken) { @@ -5788,9 +6051,7 @@ L_08AF2610: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF2638; } @@ -5836,7 +6097,17 @@ L_08AF2660: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2684: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -5862,7 +6133,6 @@ L_08AF26BC: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[14])); aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); if (branch_taken) { @@ -5876,7 +6146,6 @@ L_08AF26E0: goto L_08AF26E8; L_08AF26E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_08AF2704; @@ -5904,7 +6173,6 @@ L_08AF272C: ctx.fpr[26] = aot_fpr_20 - ctx.fpr[26]; aot_fpr_12 = aot_fpr_22 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -5914,7 +6182,6 @@ L_08AF272C: } L_08AF2744: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF2750; } @@ -5925,7 +6192,6 @@ L_08AF274C: goto L_08AF2750; L_08AF2750: aot_gpr_31 = (0x08AF2758u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2758u) goto L_08AF2758; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2758: @@ -5956,7 +6222,17 @@ L_08AF277C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF27A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5970,7 +6246,6 @@ L_08AF27A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AF27C4: aot_gpr_31 = (0x08AF27CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF27CCu) goto L_08AF27CC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF27CC: @@ -5989,7 +6264,17 @@ L_08AF27DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF27F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6035,7 +6320,17 @@ L_08AF2840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2858: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6081,7 +6376,17 @@ L_08AF28A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF28C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6127,7 +6432,17 @@ L_08AF2910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2928: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6173,7 +6488,17 @@ L_08AF2978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2990: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6219,7 +6544,17 @@ L_08AF29E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF29F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6265,7 +6600,17 @@ L_08AF2A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2A60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6311,7 +6656,17 @@ L_08AF2AB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2AC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6357,7 +6712,17 @@ L_08AF2B18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2B30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6403,7 +6768,17 @@ L_08AF2B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -6429,7 +6804,6 @@ L_08AF2BD0: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[14])); aot_fpr_22 = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(16))); if (branch_taken) { @@ -6443,7 +6817,6 @@ L_08AF2BF4: goto L_08AF2BFC; L_08AF2BFC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(aot_fpr_22)); goto L_08AF2C18; @@ -6471,7 +6844,6 @@ L_08AF2C40: ctx.fpr[26] = aot_fpr_20 - ctx.fpr[26]; aot_fpr_12 = aot_fpr_22 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -6481,7 +6853,6 @@ L_08AF2C40: } L_08AF2C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF2C64; } @@ -6492,7 +6863,6 @@ L_08AF2C60: goto L_08AF2C64; L_08AF2C64: aot_gpr_31 = (0x08AF2C6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2C6Cu) goto L_08AF2C6C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2C6C: @@ -6523,7 +6893,17 @@ L_08AF2C90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2CB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -6578,7 +6958,17 @@ L_08AF2D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2D4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6626,7 +7016,17 @@ L_08AF2DA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6640,7 +7040,6 @@ L_08AF2DBC: AOT_REGCACHE_SYNC_OUT(); return; L_08AF2DDC: aot_gpr_31 = (0x08AF2DE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2DE4u) goto L_08AF2DE4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2DE4: @@ -6659,7 +7058,17 @@ L_08AF2DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2E08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6673,7 +7082,6 @@ L_08AF2E08: AOT_REGCACHE_SYNC_OUT(); return; L_08AF2E28: aot_gpr_31 = (0x08AF2E30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF2E30u) goto L_08AF2E30; AOT_REGCACHE_SYNC_OUT(); return; L_08AF2E30: @@ -6692,7 +7100,17 @@ L_08AF2E40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2E54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6738,7 +7156,17 @@ L_08AF2EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2EBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6784,7 +7212,17 @@ L_08AF2F0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2F24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6830,7 +7268,17 @@ L_08AF2F74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF2F8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -6885,7 +7333,17 @@ L_08AF2FFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3020: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6901,7 +7359,6 @@ L_08AF3020: AOT_REGCACHE_SYNC_OUT(); return; L_08AF3048: aot_gpr_31 = (0x08AF3050u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3050u) goto L_08AF3050; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3050: @@ -6930,7 +7387,17 @@ L_08AF3078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3090: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -6985,7 +7452,17 @@ L_08AF3100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3124: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6999,7 +7476,6 @@ L_08AF3124: AOT_REGCACHE_SYNC_OUT(); return; L_08AF3144: aot_gpr_31 = (0x08AF314Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF314Cu) goto L_08AF314C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF314C: @@ -7018,7 +7494,17 @@ L_08AF315C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3170: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, aot_gpr_31}; @@ -7037,7 +7523,6 @@ L_08AF31A4: aot_gpr_4 = (49864u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(aot_fpr_12)) && aot_fpr_22 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); if (branch_taken) { @@ -7049,9 +7534,7 @@ L_08AF31C4: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF31EC; } @@ -7078,7 +7561,6 @@ L_08AF31EC: goto L_08AF3204; L_08AF3204: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AF3224; } @@ -7094,7 +7576,6 @@ L_08AF320C: } L_08AF3214: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF3224; } @@ -7113,7 +7594,6 @@ L_08AF3224: goto L_08AF3228; L_08AF3228: aot_gpr_31 = (0x08AF3230u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3230u) goto L_08AF3230; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3230: @@ -7152,7 +7632,17 @@ L_08AF3260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3280: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7166,7 +7656,6 @@ L_08AF3280: AOT_REGCACHE_SYNC_OUT(); return; L_08AF32A0: aot_gpr_31 = (0x08AF32A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF32A8u) goto L_08AF32A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF32A8: @@ -7184,7 +7673,17 @@ L_08AF32B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF32C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7270,7 +7769,6 @@ L_08AF3374: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF3390; } @@ -7293,7 +7791,17 @@ L_08AF3390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF33AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7338,7 +7846,17 @@ L_08AF33F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3410: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7376,7 +7894,17 @@ L_08AF3450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3464: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -7462,7 +7990,6 @@ L_08AF3520: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF353C; } @@ -7487,7 +8014,17 @@ L_08AF353C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3560: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7560,7 +8097,6 @@ L_08AF35F0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF360C; } @@ -7583,7 +8119,17 @@ L_08AF360C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3628: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7597,7 +8143,6 @@ L_08AF3628: AOT_REGCACHE_SYNC_OUT(); return; L_08AF3648: aot_gpr_31 = (0x08AF3650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3650u) goto L_08AF3650; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3650: @@ -7615,7 +8160,17 @@ L_08AF365C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3670: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7633,7 +8188,6 @@ L_08AF3670: AOT_REGCACHE_SYNC_OUT(); return; L_08AF36A8: aot_gpr_31 = (0x08AF36B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF36B0u) goto L_08AF36B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF36B0: @@ -7669,7 +8223,6 @@ L_08AF36F0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AF3728; } @@ -7677,12 +8230,10 @@ L_08AF36F0: } L_08AF3710: aot_gpr_31 = (0x08AF3718u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0067_entry, 67u, 195u, 0x08910B38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3718u) goto L_08AF3718; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3718: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AF3728; } @@ -7700,7 +8251,6 @@ L_08AF3728: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF36E0; } @@ -7758,7 +8308,6 @@ L_08AF3790: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF37AC; } @@ -7784,7 +8333,17 @@ L_08AF37AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF37D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7800,7 +8359,17 @@ L_08AF37E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF37F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7816,7 +8385,17 @@ L_08AF3804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3814: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7832,7 +8411,17 @@ L_08AF3824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3834: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7848,7 +8437,17 @@ L_08AF3844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3854: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -7886,7 +8485,6 @@ L_08AF3898: AOT_REGCACHE_SYNC_OUT(); return; L_08AF38B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AF38C0; } @@ -7953,7 +8551,6 @@ L_08AF3914: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF3930; } @@ -7976,7 +8573,17 @@ L_08AF3930: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF394C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7994,7 +8601,6 @@ L_08AF394C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF397C: aot_gpr_31 = (0x08AF3984u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3984u) goto L_08AF3984; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3984: @@ -8026,7 +8632,17 @@ L_08AF39B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF39D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8042,7 +8658,6 @@ L_08AF39D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF39F8: aot_gpr_31 = (0x08AF3A00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3A00u) goto L_08AF3A00; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3A00: @@ -8101,7 +8716,6 @@ L_08AF3A5C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF3A78; } @@ -8123,7 +8737,17 @@ L_08AF3A78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8139,7 +8763,6 @@ L_08AF3A90: AOT_REGCACHE_SYNC_OUT(); return; L_08AF3AB8: aot_gpr_31 = (0x08AF3AC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3AC0u) goto L_08AF3AC0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3AC0: @@ -8166,7 +8789,17 @@ L_08AF3AE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3AF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8182,7 +8815,6 @@ L_08AF3AF8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF3B20: aot_gpr_31 = (0x08AF3B28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3B28u) goto L_08AF3B28; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3B28: @@ -8209,12 +8841,21 @@ L_08AF3B48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08AF3B70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0005_entry, 5u, 69u, 0x088188D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF3B70u) goto L_08AF3B70; AOT_REGCACHE_SYNC_OUT(); return; L_08AF3B70: @@ -8227,7 +8868,17 @@ L_08AF3B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3B88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8255,7 +8906,6 @@ L_08AF3BB0: L_08AF3BD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF3BFC; } @@ -8272,7 +8922,6 @@ L_08AF3BDC: AOT_REGCACHE_SYNC_OUT(); return; L_08AF3BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF3C14; } @@ -8307,7 +8956,17 @@ L_08AF3C1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3C30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8339,7 +8998,17 @@ L_08AF3C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8398,7 +9067,17 @@ L_08AF3CE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3CFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8430,7 +9109,17 @@ L_08AF3D2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3D38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -8450,7 +9139,17 @@ L_08AF3D58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3D68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8493,7 +9192,17 @@ L_08AF3DA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -8523,7 +9232,6 @@ L_08AF3DEC: L_08AF3E0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF3E20; } @@ -8591,7 +9299,17 @@ L_08AF3E6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3E8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8674,7 +9392,17 @@ L_08AF3F40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF3F60: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); diff --git a/profiles/vcs/generated/generated_unit_0188.cpp b/profiles/vcs/generated/generated_unit_0188.cpp index c800694..01bdedc 100644 --- a/profiles/vcs/generated/generated_unit_0188.cpp +++ b/profiles/vcs/generated/generated_unit_0188.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0188[4088] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 7, 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 15, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 22, 0, 23, 24, 0, 0, 0, 0, 25, 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, - 34, 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 50, 0, 0, 51, 52, 0, 53, 0, 0, 0, 0, 0, - 0, 54, 0, 55, 0, 0, 56, 57, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 61, 62, 0, 0, 0, 63, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, - 68, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, - 74, 0, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 103, 0, 0, 104, 0, 105, 0, 0, 106, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, 0, 0, 110, 0, 0, 111, 0, - 0, 112, 0, 0, 0, 113, 0, 0, 114, 0, 115, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 125, 0, 0, 126, 0, 0, 127, 0, 0, 128, 0, 0, 129, 0, 0, 0, 130, 0, 0, 131, 0, 132, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, - 135, 0, 0, 136, 0, 0, 137, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 142, 0, 0, 143, 0, 0, 0, 0, 144, - 0, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 0, 152, - 0, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 158, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, 161, 0, 0, 162, - 0, 0, 163, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 165, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 168, 0, 0, 169, 0, 170, - 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 0, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, - 0, 0, 178, 0, 179, 0, 180, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, - 0, 184, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, - 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, - 0, 201, 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 208, 0, 0, 0, - 209, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 215, 0, 0, 0, 216, 0, 0, 217, 0, - 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 224, 0, 225, 0, - 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 236, 0, 0, 237, 0, 0, 238, 0, 0, 239, 0, 0, 0, 240, - 0, 0, 0, 241, 0, 242, 243, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 0, 251, 0, 252, 0, - 253, 0, 254, 0, 0, 255, 256, 0, 0, 0, 0, 0, 257, 0, 258, 0, 259, 0, 260, 0, 261, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 263, 0, 0, 264, 0, 265, 0, 266, 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 271, 0, 272, 0, 0, 0, - 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 275, 0, 276, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, - 279, 0, 0, 0, 280, 281, 0, 0, 0, 282, 0, 283, 0, 284, 0, 285, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 288, 0, 289, 0, 290, 0, - 0, 0, 0, 0, 291, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 294, 0, 295, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 298, 0, 0, - 0, 0, 0, 299, 0, 0, 0, 300, 0, 301, 0, 302, 0, 0, 303, 0, 304, 0, 305, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 0, 309, 0, - 0, 0, 310, 0, 311, 0, 312, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 317, 0, 318, 0, 0, 319, 0, - 0, 320, 0, 321, 322, 323, 0, 0, 324, 0, 0, 0, 0, 0, 325, 0, 326, 0, 0, 0, 0, 327, 0, 328, 0, 0, 0, 0, 329, 0, 330, 0, - 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 334, 0, 0, 0, 0, 335, 0, 336, 0, 0, 0, 0, 337, 0, 338, 0, 0, 0, 0, 339, - 0, 340, 0, 0, 0, 0, 341, 0, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, 0, 348, 0, 0, 349, 0, 0, 350, 0, 351, 352, 353, 0, 0, 354, 0, 0, 0, - 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 359, 0, 360, 0, 0, 361, 0, 0, 362, 0, 363, - 364, 365, 0, 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 370, - 0, 371, 372, 0, 373, 0, 0, 374, 0, 0, 375, 0, 376, 377, 378, 0, 0, 379, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 382, 0, 383, 0, - 0, 384, 0, 385, 0, 0, 386, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 392, 0, - 393, 0, 0, 394, 0, 0, 395, 0, 396, 397, 398, 0, 0, 399, 0, 0, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 0, 403, 0, 0, - 404, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, - 0, 407, 0, 408, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 412, 0, 413, 0, 414, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 417, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, 421, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 426, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, - 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, - 441, 0, 0, 442, 0, 0, 443, 0, 0, 0, 0, 444, 0, 0, 445, 0, 0, 446, 0, 0, 0, 0, 447, 0, 0, 448, 0, 0, 0, 449, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 452, 0, 453, 454, 0, 0, 0, - 0, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, 0, 460, 0, 0, 461, 0, 462, 463, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 467, 0, 0, 468, 0, 469, 0, 0, 0, 0, 0, 470, 471, 0, 0, 0, - 0, 472, 0, 473, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 476, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, - 0, 0, 484, 0, 485, 486, 487, 0, 488, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 491, 0, 492, 0, 0, 0, 493, 0, 494, 0, 495, 0, - 496, 0, 0, 0, 497, 0, 0, 0, 0, 0, 498, 0, 499, 0, 500, 0, 0, 0, 501, 0, 502, 0, 503, 0, 504, 0, 0, 0, 505, 0, 0, 0, - 0, 0, 506, 0, 507, 0, 508, 0, 0, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 516, 0, - 0, 0, 517, 0, 518, 0, 519, 0, 520, 0, 0, 0, 521, 0, 0, 0, 0, 0, 522, 0, 523, 0, 524, 0, 0, 0, 525, 0, 526, 0, 527, 0, - 528, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 532, 0, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 538, 0, 0, 0, 0, - 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 541, 0, 0, 0, 542, 0, 543, 544, 545, 0, 546, 0, 0, 0, 547, - 0, 0, 0, 0, 0, 548, 0, 549, 0, 550, 0, 0, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 0, 555, 0, 0, 0, 0, 0, 556, 0, 557, - 0, 558, 0, 0, 0, 559, 0, 560, 0, 561, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 565, 0, 566, 0, 0, 0, 567, 0, 568, - 0, 569, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 573, 0, 574, 0, 0, 0, 575, 0, 576, 0, 577, 0, 578, 0, 0, 0, 579, - 0, 0, 0, 0, 0, 580, 0, 581, 0, 582, 0, 0, 0, 583, 0, 584, 0, 585, 0, 586, 0, 0, 0, 587, 0, 0, 0, 0, 0, 588, 0, 589, - 0, 590, 0, 0, 0, 591, 0, 592, 0, 593, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 0, 596, 0, 597, 0, 598, 0, 0, 0, 599, 0, 600, - 0, 601, 0, 602, 0, 0, 0, 603, 0, 0, 0, 0, 0, 604, 0, 605, 0, 606, 0, 0, 0, 607, 0, 608, 0, 609, 0, 610, 0, 0, 611, 0, - 0, 0, 0, 0, 612, 0, 613, 0, 614, 0, 0, 0, 615, 0, 616, 0, 617, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 0, 620, 0, 621, 0, - 622, 0, 0, 0, 623, 0, 624, 0, 625, 0, 626, 0, 0, 0, 627, 0, 0, 0, 0, 0, 628, 0, 629, 0, 630, 0, 0, 0, 631, 0, 632, 0, - 633, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 0, 636, 0, 637, 0, 638, 0, 0, 0, 639, 0, 640, 0, 641, 0, 642, 0, 0, 0, 643, 0, - 0, 0, 0, 0, 644, 0, 645, 0, 646, 0, 0, 0, 647, 0, 648, 0, 649, 0, 650, 0, 0, 0, 651, 0, 0, 0, 0, 0, 652, 0, 653, 0, - 654, 0, 0, 0, 655, 0, 656, 0, 657, 0, 658, 0, 0, 0, 659, 0, 0, 0, 0, 0, 660, 0, 661, 0, 662, 0, 0, 0, 663, 0, 664, 0, - 665, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 0, 668, 0, 669, 0, 670, 0, 0, 0, 671, 0, 672, 0, 673, 0, 674, 0, 0, 0, 675, 0, - 0, 0, 0, 0, 676, 0, 677, 0, 678, 0, 0, 0, 679, 0, 680, 0, 681, 0, 682, 0, 0, 0, 683, 0, 0, 0, 0, 0, 684, 0, 685, 0, - 686, 0, 0, 0, 687, 0, 688, 0, 689, 0, 690, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 692, 0, 693, 0, 694, 0, 0, 695, 0, 696, 0, - 697, 0, 698, 0, 699, 700, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 703, 0, 0, 0, 704, 0, - 705, 706, 707, 0, 708, 0, 0, 0, 709, 0, 0, 0, 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 713, 0, 714, 0, 715, 0, 716, 0, 0, 717, - 0, 0, 0, 0, 0, 718, 0, 719, 0, 720, 0, 0, 0, 721, 0, 722, 0, 723, 0, 724, 0, 0, 0, 725, 0, 0, 0, 0, 0, 726, 0, 727, - 0, 728, 0, 0, 0, 729, 0, 730, 0, 731, 0, 732, 0, 0, 733, 0, 0, 0, 0, 0, 734, 0, 735, 0, 736, 0, 0, 0, 737, 0, 738, 0, - 739, 0, 740, 0, 0, 741, 0, 0, 0, 0, 0, 742, 0, 743, 0, 744, 0, 0, 0, 745, 0, 746, 0, 747, 0, 748, 0, 0, 749, 0, 0, 0, - 0, 0, 750, 0, 751, 0, 752, 0, 0, 0, 753, 0, 754, 0, 755, 0, 756, 0, 0, 0, 757, 0, 0, 0, 0, 0, 758, 0, 759, 0, 760, 0, - 0, 0, 761, 0, 762, 0, 763, 0, 764, 0, 0, 765, 0, 0, 0, 0, 0, 766, 0, 767, 0, 768, 0, 0, 0, 769, 0, 770, 0, 771, 0, 772, - 0, 0, 0, 773, 0, 0, 0, 0, 0, 774, 0, 775, 0, 776, 0, 0, 0, 777, 0, 778, 0, 779, 0, 780, 0, 0, 0, 781, 0, 0, 0, 0, - 0, 782, 0, 783, 0, 784, 0, 0, 0, 785, 0, 786, 0, 787, 0, 788, 0, 0, 0, 789, 0, 0, 0, 0, 0, 790, 0, 791, 0, 792, 0, 0, - 0, 793, 0, 794, 0, 795, 0, 796, 0, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 799, 0, 800, 0, 0, 0, 801, 0, 802, 0, 803, 0, 804, - 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 806, 0, 807, 0, 808, 0, 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 814, 0, 0, 0, 0, 0, - 815, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 817, 0, 0, 818, 0, 819, 820, 821, 0, 822, 0, 0, 0, 823, 0, 0, 0, - 0, 0, 824, 0, 825, 0, 826, 0, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 832, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 834, 0, 0, 0, 0, 0, 835, 0, 0, 0, 836, 0, 837, 838, 839, 0, 840, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 843, 0, - 844, 0, 0, 0, 845, 0, 846, 0, 847, 0, 848, 0, 0, 0, 849, 0, 0, 0, 0, 0, 850, 0, 851, 0, 852, 0, 0, 0, 853, 0, 854, 0, - 855, 0, 856, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, 858, 0, 859, 0, 860, 0, 0, 861, 0, 862, 0, 863, 0, 864, 0, 865, 866, 0, 0, - 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, 0, 868, 0, 0, 0, 869, 0, 0, 0, 0, 0, 870, 0, 0, 0, 871, 0, 872, 0, 0, 0, 873, - 0, 874, 0, 0, 0, 875, 0, 876, 0, 0, 0, 877, 0, 878, 0, 0, 0, 0, 879, 0, 880, 0, 0, 0, 881, 0, 882, 0, 0, 0, 883, 0, - 884, 0, 0, 0, 885, 0, 886, 0, 0, 0, 887, 0, 888, 0, 0, 0, 889, 0, 890, 0, 0, 0, 891, 0, 892, 0, 0, 0, 893, 0, 894, 0, - 0, 0, 895, 0, 896, 0, 0, 0, 897, 0, 898, 0, 0, 0, 899, 0, 900, 0, 0, 0, 901, 0, 902, 0, 0, 0, 903, 0, 904, 0, 0, 0, - 905, 0, 906, 0, 0, 0, 907, 0, 908, 0, 0, 0, 909, 0, 910, 0, 0, 0, 911, 0, 912, 0, 0, 0, 913, 0, 914, 0, 0, 0, 915, 0, - 916, 0, 0, 0, 917, 0, 918, 0, 0, 0, 919, 0, 920, 0, 0, 0, 921, 0, 922, 0, 0, 0, 923, 0, 924, 0, 0, 0, 925, 0, 926, 0, - 0, 0, 927, 0, 928, 0, 0, 0, 929, 0, 930, 0, 0, 0, 931, 0, 932, 0, 0, 0, 933, 0, 934, 0, 0, 0, 935, 0, 936, 0, 0, 0, - 937, 0, 938, 0, 0, 0, 939, 0, 940, 0, 0, 0, 0, 941, 0, 942, 0, 0, 0, 943, 0, 944, 0, 0, 0, 945, 0, 946, 0, 0, 0, 0, - 947, 0, 948, 0, 0, 0, 0, 949, 0, 950, 0, 0, 0, 0, 951, 0, 952, 0, 0, 0, 953, 0, 954, 0, 0, 0, 955, 0, 956, 0, 0, 0, - 957, 0, 958, 0, 0, 0, 959, 0, 960, 0, 0, 0, 961, 0, 962, 0, 0, 0, 963, 0, 964, 0, 0, 0, 965, 0, 966, 0, 0, 0, 967, 0, - 968, 0, 0, 0, 969, 0, 970, 0, 0, 0, 971, 0, 972, 0, 0, 0, 0, 973, 0, 0, 0, 0, 0, 974, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0188[64] = { + 0x00821A4040100401ull, 0x400040201A402020ull, 0x281200800D21A420ull, 0x0100090000002085ull, + 0x0592809080950000ull, 0x40824000231410CAull, 0x8850022140100921ull, 0x000110A0110A0000ull, + 0x0000000000002008ull, 0x0000200000000000ull, 0x0000000000000000ull, 0x0000000010000000ull, + 0x0000000000000000ull, 0x0000100022000000ull, 0x0280000102280000ull, 0x0000000000000000ull, + 0x1000000000000000ull, 0x8924252249201252ull, 0x2129124900004840ull, 0x9248012484924449ull, + 0xA508820492129248ull, 0x8010085402508508ull, 0x4820A00400809082ull, 0x1111122222222080ull, + 0x5084244448911111ull, 0x8925208102050908ull, 0x009550655490A568ull, 0x12150002151052A4ull, + 0x221508505502AA31ull, 0x4B4040D44A854A88ull, 0x850A142850A1413Aull, 0x13A4B40000102142ull, + 0x80402413A4B40204ull, 0x6808094A54827496ull, 0x0100008120A82749ull, 0x080589240095454Aull, + 0x8428202010800000ull, 0x2242484909212424ull, 0x069510901A080800ull, 0x2028510A18294220ull, + 0x5454117441004200ull, 0x5411545411545411ull, 0x0D54A82154541154ull, 0xA08AA2A08BA20802ull, + 0x8AA2A08AA2A08AA2ull, 0xA2A08AA2A08AA2A0ull, 0x504551504AA2A08Aull, 0x4551504551504551ull, + 0x5150455150455150ull, 0x5045515045515045ull, 0x4410083552A08551ull, 0xA08AA2A095454117ull, + 0x12A8A82551504AA2ull, 0xAA2A095454115454ull, 0x2A08AA2A08AA2A08ull, 0x06AA5410AA2A08AAull, + 0x0106AA5411748201ull, 0x515045515045D104ull, 0x8A2088083552A085ull, 0x51451451451428A2ull, + 0x4514514514514514ull, 0x1451451451451451ull, 0x145142850A28A145ull, 0x0082145145145145ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0188[64] = { + 1u, 11u, 20u, 34u, 41u, 54u, 68u, 81u, 89u, 91u, 92u, 92u, 93u, 93u, 96u, 102u, + 102u, 103u, 122u, 135u, 153u, 171u, 184u, 195u, 209u, 226u, 241u, 263u, 279u, 299u, 320u, 340u, + 355u, 371u, 393u, 407u, 425u, 433u, 450u, 464u, 480u, 496u, 517u, 539u, 558u, 580u, 601u, 622u, + 644u, 665u, 686u, 705u, 728u, 750u, 773u, 793u, 815u, 834u, 855u, 874u, 895u, 916u, 937u, 957u, }; void recomp_unit_0188_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0188_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AF4000u; - entry_id = (entry_delta < 16352u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0188[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16352u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0188[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0188[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AF4000; @@ -1175,7 +1082,17 @@ L_08AF4028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4050: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1203,7 +1120,6 @@ L_08AF4078: L_08AF4098: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF40AC; } @@ -1241,7 +1157,17 @@ L_08AF40C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF40DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -1327,7 +1253,17 @@ L_08AF4194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF41B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[18]); @@ -1441,7 +1377,17 @@ L_08AF429C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF42C4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); jump_target = aot_gpr_31; @@ -1449,7 +1395,17 @@ L_08AF42C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF42D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1470,7 +1426,6 @@ L_08AF42EC: L_08AF42F4: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF4308; } @@ -1493,7 +1448,17 @@ L_08AF4308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF431C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10368), 0u); @@ -1534,7 +1499,17 @@ L_08AF4334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF43A0: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(448), std::bit_cast(aot_fpr_12)); jump_target = aot_gpr_31; @@ -1542,7 +1517,17 @@ L_08AF43A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF43AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -1586,7 +1571,6 @@ L_08AF43E0: goto L_08AF445C; L_08AF4440: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF4450; } @@ -1594,7 +1578,6 @@ L_08AF4440: } L_08AF4448: aot_gpr_31 = (0x08AF4450u); - // nop goto L_08AF447C; L_08AF4450: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1603,7 +1586,17 @@ L_08AF4450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF445C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10368))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10372))); @@ -1616,13 +1609,22 @@ L_08AF445C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF447C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10368))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AF44C4; } @@ -1656,11 +1658,20 @@ L_08AF44C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF44D0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AF44E0; } @@ -1671,11 +1682,20 @@ L_08AF44DC: goto L_08AF44E0; L_08AF44E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF44E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1687,7 +1707,6 @@ L_08AF44E8: goto L_08AF44D0; L_08AF4504: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF451C; } @@ -1714,7 +1733,17 @@ L_08AF451C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4530: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1729,7 +1758,6 @@ L_08AF4530: } L_08AF4548: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF4564; } @@ -1753,7 +1781,17 @@ L_08AF4564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4574: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -1835,7 +1873,17 @@ L_08AF462C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1868,7 +1916,17 @@ L_08AF4694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF46A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1902,7 +1960,17 @@ L_08AF46EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF46FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(448))); @@ -1943,7 +2011,17 @@ L_08AF4760: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4770: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1975,7 +2053,17 @@ L_08AF47B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF47C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { std::uint32_t aot_run_words[3]{}; @@ -2119,7 +2207,17 @@ L_08AF4834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF49B4: ctx.fpr[16] = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[16])); ctx.gpr[10] = (2238u << 16u); @@ -2235,7 +2333,17 @@ L_08AF49B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4B70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2365,7 +2473,17 @@ L_08AF4B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4D64: ctx.gpr[10] = (0u | 0u); ctx.gpr[8] = (static_cast(ctx.gpr[10]) < static_cast(aot_gpr_4) ? 1u : 0u); @@ -2440,11 +2558,20 @@ L_08AF4DB0: } L_08AF4E4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4E54: ctx.gpr[8] = (0u | 0u); aot_gpr_6 = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_4) ? 1u : 0u); @@ -2495,11 +2622,20 @@ L_08AF4E80: } L_08AF4EDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF4EE4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -2635,13 +2771,22 @@ L_08AF4EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF50F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF5118; } @@ -2655,7 +2800,6 @@ L_08AF5104: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5124; } @@ -2674,7 +2818,17 @@ L_08AF5124: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5130: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2714,7 +2868,6 @@ L_08AF5184: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AF51A8; } @@ -2728,7 +2881,6 @@ L_08AF5194: AOT_REGCACHE_SYNC_OUT(); return; L_08AF51A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF51B4; } @@ -2774,7 +2926,17 @@ L_08AF51EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF51FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -2799,7 +2961,17 @@ L_08AF522C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(448))); @@ -2848,7 +3020,6 @@ L_08AF52B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3))); aot_gpr_5 = (0u | 255u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AF52D4; } @@ -2862,7 +3033,6 @@ L_08AF52C0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF52CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF52E0; } @@ -2908,7 +3078,17 @@ L_08AF5318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5328: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2966,7 +3146,17 @@ L_08AF5394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF53A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -3007,7 +3197,6 @@ L_08AF53FC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(3))); aot_gpr_4 = (0u | 255u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AF5444; } @@ -3016,7 +3205,6 @@ L_08AF53FC: L_08AF540C: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(3))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AF5444; } @@ -3025,7 +3213,6 @@ L_08AF540C: L_08AF5418: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(3))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AF5444; } @@ -3034,7 +3221,6 @@ L_08AF5418: L_08AF5424: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(3))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AF5444; } @@ -3048,7 +3234,6 @@ L_08AF5430: AOT_REGCACHE_SYNC_OUT(); return; L_08AF543C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5450; } @@ -3100,7 +3285,17 @@ L_08AF5488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF54A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); @@ -3117,7 +3312,6 @@ L_08AF54BC: aot_gpr_6 = (aot_gpr_5 + aot_gpr_4); aot_gpr_6 = (aot_gpr_2 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AF54E8; } @@ -3128,7 +3322,6 @@ L_08AF54CC: aot_gpr_6 = (aot_gpr_6 | aot_gpr_4); aot_gpr_6 = (aot_gpr_6 & 3u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AF54FC; } @@ -3136,7 +3329,6 @@ L_08AF54CC: } L_08AF54E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5528; } @@ -3150,7 +3342,6 @@ L_08AF54E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF54F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5558; } @@ -3179,7 +3370,6 @@ L_08AF550C: } L_08AF5520: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5558; } @@ -3209,7 +3399,6 @@ L_08AF553C: } L_08AF5550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5558; } @@ -3222,7 +3411,17 @@ L_08AF5558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5564: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_6, aot_gpr_5, ctx.gpr[7]}; @@ -3239,7 +3438,6 @@ L_08AF5564: } L_08AF5588: aot_gpr_31 = (0x08AF5590u); - // nop goto L_08AF571C; L_08AF5590: aot_gpr_31 = (0x08AF5598u); @@ -3254,7 +3452,17 @@ L_08AF5598: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF55AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3281,7 +3489,6 @@ L_08AF55D0: } L_08AF55FC: aot_gpr_31 = (0x08AF5604u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5604u) goto L_08AF5604; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5604: @@ -3321,7 +3528,17 @@ L_08AF563C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF565C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -3351,7 +3568,6 @@ L_08AF5688: } L_08AF56B4: aot_gpr_31 = (0x08AF56BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF56BCu) goto L_08AF56BC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF56BC: @@ -3393,7 +3609,17 @@ L_08AF56F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF571C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -3557,7 +3783,17 @@ L_08AF58B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF58C8: ctx.gpr[7] = (2280u << 16u); aot_gpr_4 = (aot_gpr_4 << 5u); @@ -3578,11 +3814,20 @@ L_08AF58DC: } L_08AF58F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF58F8: ctx.gpr[7] = (2280u << 16u); ctx.gpr[8] = (aot_gpr_4 << 5u); @@ -3619,11 +3864,20 @@ L_08AF592C: } L_08AF5940: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5948: ctx.gpr[7] = (2280u << 16u); aot_gpr_4 = (aot_gpr_4 << 5u); @@ -3635,7 +3889,17 @@ L_08AF5948: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5964: ctx.gpr[7] = (2280u << 16u); aot_gpr_4 = (aot_gpr_4 << 5u); @@ -3647,7 +3911,17 @@ L_08AF5964: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5980: ctx.gpr[7] = (2280u << 16u); aot_gpr_4 = (aot_gpr_4 << 5u); @@ -3659,7 +3933,17 @@ L_08AF5980: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF599C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -3683,7 +3967,6 @@ L_08AF59B4: } L_08AF59C0: { const bool branch_taken = aot_gpr_6 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AF59D4; } @@ -3701,7 +3984,6 @@ L_08AF59C8: L_08AF59D4: ctx.gpr[7] = (ctx.gpr[7] & 8u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AF59EC; } @@ -3720,7 +4002,6 @@ L_08AF59EC: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(852))); ctx.gpr[9] = (0u | 2u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08AF5A14; } @@ -3730,7 +4011,6 @@ L_08AF59FC: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(236))); ctx.gpr[7] = (ctx.gpr[7] & 256u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08AF5A14; } @@ -3757,7 +4037,6 @@ L_08AF5A18: } L_08AF5A20: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AF5A34; } @@ -3770,11 +4049,20 @@ L_08AF5A28: goto L_08AF5A34; L_08AF5A34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5A3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(aot_gpr_5) < 205 ? 1u : 0u); @@ -3796,7 +4084,6 @@ L_08AF5A50: L_08AF5A5C: aot_gpr_4 = (static_cast(aot_gpr_5) < 174 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF5AC8; } @@ -3833,7 +4120,6 @@ L_08AF5A80: L_08AF5A88: aot_gpr_5 = (static_cast(aot_gpr_5) < 208 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AF5A68; } @@ -3855,7 +4141,6 @@ L_08AF5A98: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5AB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5AD0; } @@ -3863,7 +4148,6 @@ L_08AF5AB0: } L_08AF5AB8: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AF5A68; } @@ -3892,7 +4176,17 @@ L_08AF5AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5ADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[16]); @@ -3919,7 +4213,6 @@ L_08AF5B08: } L_08AF5B14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF5B38; } @@ -3927,7 +4220,6 @@ L_08AF5B14: } L_08AF5B1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5B70; } @@ -3936,7 +4228,6 @@ L_08AF5B1C: L_08AF5B24: ctx.gpr[17] = (0u | 8u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AF5BD0; } @@ -3944,7 +4235,6 @@ L_08AF5B24: } L_08AF5B30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D98; } @@ -3956,7 +4246,6 @@ L_08AF5B38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF5B60; } @@ -3966,7 +4255,6 @@ L_08AF5B50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AF5B68; } @@ -3974,7 +4262,6 @@ L_08AF5B50: } L_08AF5B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D98; } @@ -4020,9 +4307,7 @@ L_08AF5B84: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF5BC8; } @@ -4038,7 +4323,6 @@ L_08AF5BC0: } L_08AF5BC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D98; } @@ -4074,7 +4358,6 @@ L_08AF5C00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AF5C14; } @@ -4092,7 +4375,6 @@ L_08AF5C14: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5C24: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AF5D40; } @@ -4105,7 +4387,6 @@ L_08AF5C2C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5C34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF5D40; } @@ -4131,7 +4412,6 @@ L_08AF5C44: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5C60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF5C70; } @@ -4147,7 +4427,6 @@ L_08AF5C68: } L_08AF5C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D40; } @@ -4166,7 +4445,6 @@ L_08AF5C78: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5C90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF5D40; } @@ -4177,7 +4455,6 @@ L_08AF5C98: aot_gpr_5 = (0u | 4u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AF5CC8; } @@ -4194,7 +4471,6 @@ L_08AF5CAC: goto L_08AF5CC0; L_08AF5CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D0C; } @@ -4231,7 +4507,6 @@ L_08AF5CF4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF5D24; } @@ -4241,7 +4516,6 @@ L_08AF5D0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF5D2C; } @@ -4249,7 +4523,6 @@ L_08AF5D0C: } L_08AF5D1C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D38; } @@ -4279,7 +4552,6 @@ L_08AF5D38: } L_08AF5D40: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08AF5D64; } @@ -4296,7 +4568,6 @@ L_08AF5D48: goto L_08AF5D5C; L_08AF5D5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D90; } @@ -4313,7 +4584,6 @@ L_08AF5D64: L_08AF5D6C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AF5D88; } @@ -4323,7 +4593,6 @@ L_08AF5D78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(8))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AF5D90; } @@ -4339,7 +4608,6 @@ L_08AF5D88: } L_08AF5D90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF5D98; } @@ -4362,7 +4630,17 @@ L_08AF5D9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -4375,7 +4653,6 @@ L_08AF5DB8: goto L_08AF5DD8; L_08AF5DD8: aot_gpr_31 = (0x08AF5DE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5DE0u) goto L_08AF5DE0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5DE0: @@ -4398,7 +4675,6 @@ L_08AF5DEC: L_08AF5DF8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF5E10; } @@ -4432,7 +4708,6 @@ L_08AF5E20: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E38: aot_gpr_31 = (0x08AF5E40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5E40u) goto L_08AF5E40; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E40: @@ -4445,7 +4720,6 @@ L_08AF5E40: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E54: aot_gpr_31 = (0x08AF5E5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5E5Cu) goto L_08AF5E5C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E5C: @@ -4458,7 +4732,6 @@ L_08AF5E5C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E70: aot_gpr_31 = (0x08AF5E78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5E78u) goto L_08AF5E78; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E78: @@ -4471,7 +4744,6 @@ L_08AF5E78: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E8C: aot_gpr_31 = (0x08AF5E94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5E94u) goto L_08AF5E94; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5E94: @@ -4484,7 +4756,6 @@ L_08AF5E94: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5EA8: aot_gpr_31 = (0x08AF5EB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5EB0u) goto L_08AF5EB0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5EB0: @@ -4497,7 +4768,6 @@ L_08AF5EB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5EC4: aot_gpr_31 = (0x08AF5ECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5ECCu) goto L_08AF5ECC; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5ECC: @@ -4510,7 +4780,6 @@ L_08AF5ECC: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5EE0: aot_gpr_31 = (0x08AF5EE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5EE8u) goto L_08AF5EE8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5EE8: @@ -4523,7 +4792,6 @@ L_08AF5EE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5EFC: aot_gpr_31 = (0x08AF5F04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5F04u) goto L_08AF5F04; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5F04: @@ -4536,7 +4804,6 @@ L_08AF5F04: AOT_REGCACHE_SYNC_OUT(); return; L_08AF5F18: aot_gpr_31 = (0x08AF5F20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5F20u) goto L_08AF5F20; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5F20: @@ -4561,7 +4828,17 @@ L_08AF5F34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF5F50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -4588,7 +4865,6 @@ L_08AF5F50: goto L_08AF5FA8; L_08AF5FA8: aot_gpr_31 = (0x08AF5FB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF5FB0u) goto L_08AF5FB0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF5FB0: @@ -4611,7 +4887,6 @@ L_08AF5FBC: L_08AF5FC8: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF5FE0; } @@ -4657,7 +4932,17 @@ L_08AF6008: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF6024: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -4670,7 +4955,6 @@ L_08AF6024: goto L_08AF6048; L_08AF6048: aot_gpr_31 = (0x08AF6050u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF6050u) goto L_08AF6050; AOT_REGCACHE_SYNC_OUT(); return; L_08AF6050: @@ -4693,7 +4977,6 @@ L_08AF605C: L_08AF6068: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF6080; } @@ -4747,7 +5030,17 @@ L_08AF60B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF60D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -4760,7 +5053,6 @@ L_08AF60D8: goto L_08AF60FC; L_08AF60FC: aot_gpr_31 = (0x08AF6104u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF6104u) goto L_08AF6104; AOT_REGCACHE_SYNC_OUT(); return; L_08AF6104: @@ -4783,7 +5075,6 @@ L_08AF6110: L_08AF611C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF6134; } @@ -4828,7 +5119,6 @@ L_08AF6168: AOT_REGCACHE_SYNC_OUT(); return; L_08AF6170: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF61AC; } @@ -4848,7 +5138,6 @@ L_08AF6184: L_08AF618C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF61AC; } @@ -4856,7 +5145,6 @@ L_08AF618C: } L_08AF6198: aot_gpr_31 = (0x08AF61A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF61A0u) goto L_08AF61A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AF61A0: @@ -4880,7 +5168,17 @@ L_08AF61AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF61CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -4893,7 +5191,6 @@ L_08AF61CC: goto L_08AF61EC; L_08AF61EC: aot_gpr_31 = (0x08AF61F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF61F4u) goto L_08AF61F4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF61F4: @@ -4916,7 +5213,6 @@ L_08AF6200: L_08AF620C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AF6224; } @@ -4950,7 +5246,6 @@ L_08AF6234: AOT_REGCACHE_SYNC_OUT(); return; L_08AF624C: aot_gpr_31 = (0x08AF6254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF6254u) goto L_08AF6254; AOT_REGCACHE_SYNC_OUT(); return; L_08AF6254: @@ -4988,7 +5283,17 @@ L_08AF6280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF629C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -5030,11 +5335,20 @@ L_08AF629C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF62E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[16]); @@ -5047,7 +5361,6 @@ L_08AF62E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF6304: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF6320; } @@ -5065,7 +5378,6 @@ L_08AF6318: goto L_08AF6320; L_08AF6320: aot_gpr_31 = (0x08AF6328u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 544u, 0x08AD323Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF6328u) goto L_08AF6328; AOT_REGCACHE_SYNC_OUT(); return; L_08AF6328: @@ -5087,7 +5399,6 @@ L_08AF6340: AOT_REGCACHE_SYNC_OUT(); return; L_08AF6348: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AF6494; } @@ -5116,7 +5427,6 @@ L_08AF635C: L_08AF6388: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08AF6494; } @@ -5149,7 +5459,6 @@ L_08AF63BC: goto L_08AF63C0; L_08AF63C0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF6494; } @@ -5267,14 +5576,23 @@ L_08AF6494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF64B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF64D4; } @@ -5282,7 +5600,6 @@ L_08AF64B4: } L_08AF64CC: aot_gpr_31 = (0x08AF64D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF64D4u) goto L_08AF64D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF64D4: @@ -5415,7 +5732,17 @@ L_08AF65E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF65F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -5452,7 +5779,6 @@ L_08AF664C: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AF6670; } @@ -5474,7 +5800,6 @@ L_08AF6670: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < ctx.gpr[7] ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AF67A0; } @@ -5522,7 +5847,6 @@ L_08AF66C8: L_08AF66D0: ctx.gpr[20] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08AF66E8; } @@ -5607,7 +5931,6 @@ L_08AF6770: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF678C; } @@ -5615,7 +5938,6 @@ L_08AF6770: } L_08AF6784: aot_gpr_31 = (0x08AF678Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF678Cu) goto L_08AF678C; AOT_REGCACHE_SYNC_OUT(); return; L_08AF678C: @@ -5687,7 +6009,17 @@ L_08AF67F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF6824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -5697,7 +6029,17 @@ L_08AF6824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF6838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5746,7 +6088,6 @@ L_08AF6894: goto L_08AF6898; L_08AF6898: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF68D0; } @@ -5808,7 +6149,6 @@ L_08AF68F0: goto L_08AF68F8; L_08AF68F8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6930; } @@ -5870,7 +6210,6 @@ L_08AF6950: goto L_08AF6958; L_08AF6958: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6990; } @@ -5932,7 +6271,6 @@ L_08AF69B0: goto L_08AF69B8; L_08AF69B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF69F0; } @@ -5994,7 +6332,6 @@ L_08AF6A10: goto L_08AF6A18; L_08AF6A18: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6A50; } @@ -6056,7 +6393,6 @@ L_08AF6A70: goto L_08AF6A78; L_08AF6A78: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6AB4; } @@ -6118,7 +6454,6 @@ L_08AF6AD0: goto L_08AF6AD8; L_08AF6AD8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF6AE8; } @@ -6148,7 +6483,17 @@ L_08AF6AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF6B04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6197,7 +6542,6 @@ L_08AF6B60: goto L_08AF6B64; L_08AF6B64: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6B9C; } @@ -6259,7 +6603,6 @@ L_08AF6BBC: goto L_08AF6BC4; L_08AF6BC4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6BFC; } @@ -6321,7 +6664,6 @@ L_08AF6C1C: goto L_08AF6C24; L_08AF6C24: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6C5C; } @@ -6383,7 +6725,6 @@ L_08AF6C7C: goto L_08AF6C84; L_08AF6C84: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6CBC; } @@ -6445,7 +6786,6 @@ L_08AF6CDC: goto L_08AF6CE4; L_08AF6CE4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6D1C; } @@ -6507,7 +6847,6 @@ L_08AF6D3C: goto L_08AF6D44; L_08AF6D44: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6D7C; } @@ -6569,7 +6908,6 @@ L_08AF6D9C: goto L_08AF6DA4; L_08AF6DA4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6DDC; } @@ -6631,7 +6969,6 @@ L_08AF6DFC: goto L_08AF6E04; L_08AF6E04: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6E3C; } @@ -6693,7 +7030,6 @@ L_08AF6E5C: goto L_08AF6E64; L_08AF6E64: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6E98; } @@ -6754,7 +7090,6 @@ L_08AF6EB8: goto L_08AF6EC0; L_08AF6EC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6EF8; } @@ -6816,7 +7151,6 @@ L_08AF6F18: goto L_08AF6F20; L_08AF6F20: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6F58; } @@ -6878,7 +7212,6 @@ L_08AF6F78: goto L_08AF6F80; L_08AF6F80: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF6FB8; } @@ -6940,7 +7273,6 @@ L_08AF6FD8: goto L_08AF6FE0; L_08AF6FE0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7018; } @@ -7002,7 +7334,6 @@ L_08AF7038: goto L_08AF7040; L_08AF7040: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7078; } @@ -7064,7 +7395,6 @@ L_08AF7098: goto L_08AF70A0; L_08AF70A0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF70D8; } @@ -7126,7 +7456,6 @@ L_08AF70F8: goto L_08AF7100; L_08AF7100: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7138; } @@ -7188,7 +7517,6 @@ L_08AF7158: goto L_08AF7160; L_08AF7160: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7198; } @@ -7250,7 +7578,6 @@ L_08AF71B8: goto L_08AF71C0; L_08AF71C0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF71F8; } @@ -7312,7 +7639,6 @@ L_08AF7218: goto L_08AF7220; L_08AF7220: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF725C; } @@ -7374,7 +7700,6 @@ L_08AF7278: goto L_08AF7280; L_08AF7280: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF7290; } @@ -7404,7 +7729,17 @@ L_08AF7294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF72AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7452,7 +7787,6 @@ L_08AF7304: goto L_08AF7308; L_08AF7308: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7340; } @@ -7514,7 +7848,6 @@ L_08AF7360: goto L_08AF7368; L_08AF7368: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF739C; } @@ -7575,7 +7908,6 @@ L_08AF73BC: goto L_08AF73C4; L_08AF73C4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF73FC; } @@ -7637,7 +7969,6 @@ L_08AF741C: goto L_08AF7424; L_08AF7424: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7458; } @@ -7698,7 +8029,6 @@ L_08AF7478: goto L_08AF7480; L_08AF7480: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF74B4; } @@ -7759,7 +8089,6 @@ L_08AF74D4: goto L_08AF74DC; L_08AF74DC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7510; } @@ -7820,7 +8149,6 @@ L_08AF7530: goto L_08AF7538; L_08AF7538: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7570; } @@ -7882,7 +8210,6 @@ L_08AF7590: goto L_08AF7598; L_08AF7598: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF75CC; } @@ -7943,7 +8270,6 @@ L_08AF75EC: goto L_08AF75F4; L_08AF75F4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF762C; } @@ -8005,7 +8331,6 @@ L_08AF764C: goto L_08AF7654; L_08AF7654: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF768C; } @@ -8067,7 +8392,6 @@ L_08AF76AC: goto L_08AF76B4; L_08AF76B4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF76EC; } @@ -8129,7 +8453,6 @@ L_08AF770C: goto L_08AF7714; L_08AF7714: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF774C; } @@ -8191,7 +8514,6 @@ L_08AF776C: goto L_08AF7774; L_08AF7774: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF77B0; } @@ -8253,7 +8575,6 @@ L_08AF77CC: goto L_08AF77D4; L_08AF77D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF77E4; } @@ -8283,7 +8604,17 @@ L_08AF77E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF7800: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8330,7 +8661,6 @@ L_08AF7854: goto L_08AF7858; L_08AF7858: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7890; } @@ -8391,7 +8721,6 @@ L_08AF78AC: goto L_08AF78B4; L_08AF78B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF78C4; } @@ -8421,7 +8750,17 @@ L_08AF78C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF78E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8470,7 +8809,6 @@ L_08AF793C: goto L_08AF7940; L_08AF7940: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7978; } @@ -8532,7 +8870,6 @@ L_08AF7998: goto L_08AF79A0; L_08AF79A0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF79D8; } @@ -8594,7 +8931,6 @@ L_08AF79F8: goto L_08AF7A00; L_08AF7A00: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF7A3C; } @@ -8656,7 +8992,6 @@ L_08AF7A58: goto L_08AF7A60; L_08AF7A60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF7A70; } @@ -8686,7 +9021,17 @@ L_08AF7A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF7A8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_6 = (0u | 1u); @@ -8715,11 +9060,20 @@ L_08AF7ABC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30248))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF7AD4: aot_gpr_5 = (ctx.gpr[28] + static_cast(760)); aot_gpr_6 = (aot_gpr_29 + static_cast(1)); @@ -8729,7 +9083,6 @@ L_08AF7AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7AE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8744,7 +9097,6 @@ L_08AF7AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7AFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8759,7 +9111,6 @@ L_08AF7B04: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7B14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8774,7 +9125,6 @@ L_08AF7B1C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7B2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8790,7 +9140,6 @@ L_08AF7B34: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8805,7 +9154,6 @@ L_08AF7B50: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8820,7 +9168,6 @@ L_08AF7B68: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7B78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8835,7 +9182,6 @@ L_08AF7B80: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7B90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8850,7 +9196,6 @@ L_08AF7B98: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7BA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8865,7 +9210,6 @@ L_08AF7BB0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8880,7 +9224,6 @@ L_08AF7BC8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7BD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8895,7 +9238,6 @@ L_08AF7BE0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8910,7 +9252,6 @@ L_08AF7BF8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8925,7 +9266,6 @@ L_08AF7C10: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8940,7 +9280,6 @@ L_08AF7C28: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8955,7 +9294,6 @@ L_08AF7C40: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8970,7 +9308,6 @@ L_08AF7C58: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8985,7 +9322,6 @@ L_08AF7C70: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9000,7 +9336,6 @@ L_08AF7C88: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7C98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9015,7 +9350,6 @@ L_08AF7CA0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9030,7 +9364,6 @@ L_08AF7CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7CC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9045,7 +9378,6 @@ L_08AF7CD0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9060,7 +9392,6 @@ L_08AF7CE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7CF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9075,7 +9406,6 @@ L_08AF7D00: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7D10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9090,7 +9420,6 @@ L_08AF7D18: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7D28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9105,7 +9434,6 @@ L_08AF7D30: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7D40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9120,7 +9448,6 @@ L_08AF7D48: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9135,7 +9462,6 @@ L_08AF7D60: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9150,7 +9476,6 @@ L_08AF7D78: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7D88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9165,7 +9490,6 @@ L_08AF7D90: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7DA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9180,7 +9504,6 @@ L_08AF7DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9195,7 +9518,6 @@ L_08AF7DC0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7DD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9210,7 +9532,6 @@ L_08AF7DD8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7DE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9225,7 +9546,6 @@ L_08AF7DF0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9240,7 +9560,6 @@ L_08AF7E08: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9256,7 +9575,6 @@ L_08AF7E20: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9271,7 +9589,6 @@ L_08AF7E3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9286,7 +9603,6 @@ L_08AF7E54: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9302,7 +9618,6 @@ L_08AF7E6C: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9318,7 +9633,6 @@ L_08AF7E88: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7E9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9334,7 +9648,6 @@ L_08AF7EA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7EB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9349,7 +9662,6 @@ L_08AF7EC0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7ED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9364,7 +9676,6 @@ L_08AF7ED8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7EE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9379,7 +9690,6 @@ L_08AF7EF0: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9394,7 +9704,6 @@ L_08AF7F08: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9409,7 +9718,6 @@ L_08AF7F20: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9424,7 +9732,6 @@ L_08AF7F38: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9439,7 +9746,6 @@ L_08AF7F50: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9454,7 +9760,6 @@ L_08AF7F68: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9469,7 +9774,6 @@ L_08AF7F80: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7F90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9484,7 +9788,6 @@ L_08AF7F98: AOT_REGCACHE_SYNC_OUT(); return; L_08AF7FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08AF80D8, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem, ctx.pc, ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0189_entry, 189u, 15u, 0x08AF80D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0189.cpp b/profiles/vcs/generated/generated_unit_0189.cpp index 7e0b2ae..f8ef55d 100644 --- a/profiles/vcs/generated/generated_unit_0189.cpp +++ b/profiles/vcs/generated/generated_unit_0189.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0189[4096] = { - 1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 13, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, - 22, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, - 0, 29, 0, 0, 0, 30, 0, 31, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 38, 0, - 0, 0, 0, 39, 0, 0, 0, 40, 0, 41, 42, 0, 43, 0, 0, 0, 44, 0, 0, 45, 0, 0, 0, 0, 46, 0, 0, 0, 47, 0, 48, 49, - 0, 0, 0, 50, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, 54, 0, 55, 56, 0, 57, 58, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 62, 0, 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, - 0, 67, 0, 0, 68, 0, 0, 0, 69, 0, 70, 0, 71, 0, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, - 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 0, 0, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 0, 86, 0, 0, 87, - 88, 0, 0, 0, 0, 89, 0, 0, 90, 91, 0, 0, 0, 0, 92, 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, 0, 0, 96, 97, 0, 0, 0, - 0, 98, 0, 0, 99, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 105, 106, 0, 0, 0, 107, - 0, 0, 108, 0, 0, 0, 109, 110, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 0, 113, 114, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 118, 0, 0, 0, 0, - 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 128, 0, 0, 0, 0, 0, 0, 129, 0, 0, - 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 133, 134, 0, 135, 0, 0, 136, 137, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, - 141, 0, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, - 154, 0, 0, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 159, 0, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 163, 164, 0, 0, 165, 0, 0, 166, 0, 0, 0, 0, 167, - 168, 0, 0, 0, 0, 169, 170, 0, 0, 0, 0, 171, 172, 0, 0, 0, 0, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, - 0, 176, 0, 177, 0, 0, 0, 0, 178, 0, 179, 0, 180, 0, 181, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 194, 0, 0, 195, 0, 196, 0, - 197, 0, 0, 198, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 208, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, - 213, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 218, 0, 0, 0, - 219, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, - 0, 0, 0, 0, 225, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, - 232, 0, 233, 0, 234, 0, 0, 235, 0, 0, 0, 236, 0, 0, 237, 0, 238, 0, 0, 239, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, - 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, - 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 247, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 252, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 267, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 276, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, - 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 283, 0, - 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 290, 291, 0, 292, 0, 0, 0, 0, 0, 293, 0, 294, 0, 295, 0, - 296, 0, 297, 0, 298, 0, 299, 0, 300, 0, 301, 0, 0, 0, 302, 0, 303, 0, 304, 0, 305, 0, 306, 0, 307, 0, 0, 0, 308, 0, 0, 0, - 0, 309, 0, 0, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 313, 314, 315, 0, 0, 0, 316, 317, 0, 0, 318, 0, - 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 0, 0, 328, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 333, 0, 334, - 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 343, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 345, 0, 346, 0, 347, 0, 348, 0, 0, 349, 0, 350, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, - 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 359, 0, 0, - 0, 0, 360, 0, 361, 0, 362, 0, 0, 0, 0, 363, 0, 364, 365, 0, 0, 0, 0, 366, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, - 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, - 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, - 0, 380, 0, 0, 0, 0, 381, 382, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, - 385, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 388, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 393, 0, 394, 0, 0, 0, 395, 0, 0, 0, - 0, 396, 0, 0, 0, 397, 0, 0, 0, 0, 398, 0, 0, 0, 0, 399, 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, 402, 0, 0, - 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, - 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 411, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, 0, 416, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 421, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 425, 0, 426, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, - 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, - 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 446, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 453, 0, 0, 0, 0, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 0, 458, 0, 459, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 462, 0, 0, 0, 463, 0, 464, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, - 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 474, 0, 0, 0, 475, 0, - 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 479, 0, 480, 0, 0, 481, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 483, 0, 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 486, 0, 0, 0, - 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, - 0, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, - 497, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 502, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, - 0, 0, 505, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 509, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 514, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, - 524, 0, 525, 0, 526, 0, 527, 0, 528, 0, 0, 529, 0, 530, 0, 531, 0, 532, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 535, - 0, 0, 536, 0, 0, 537, 0, 538, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 541, 0, 542, 0, 0, 0, 0, 543, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, - 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, - 0, 0, 570, 0, 571, 0, 572, 0, 573, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 577, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0189[64] = { + 0x1045490028848425ull, 0x1222104149000009ull, 0xD10916884A4848A2ull, 0x80112840015B44A8ull, + 0x92AA2C0A40229512ull, 0x8C902232190C4321ull, 0x08410000041848C4ull, 0x0000000100400001ull, + 0x0CB04108206AA020ull, 0x0100141140000240ull, 0x0000000000000000ull, 0x0404800000040000ull, + 0x0004092110810020ull, 0x8006186184990842ull, 0x021000000002550Aull, 0x0480108008400420ull, + 0x008000A952800000ull, 0x0044004400001020ull, 0x1800211108110022ull, 0x0000005040142011ull, + 0x4001004000005000ull, 0x0820000412094895ull, 0x8400800000890802ull, 0x8281040008114000ull, + 0x0022420041040000ull, 0x4045002020052800ull, 0x5416AA4248012001ull, 0x4C70904211554555ull, + 0x00100000AAA00001ull, 0x0000000000000000ull, 0x0000000000000000ull, 0xA0A0012480000000ull, + 0x00802A4000001004ull, 0x10114AA0002A0000ull, 0x4088685422424101ull, 0x4828000000004004ull, + 0x000020C224240010ull, 0x0000000000000000ull, 0x0000004920000000ull, 0x2110842211450A10ull, + 0x0408040010800084ull, 0x2A00000400000C02ull, 0x1000008100211020ull, 0x14002002042A0000ull, + 0x0005000800101000ull, 0x0100014002000404ull, 0x01014000A0010001ull, 0x00A9000200606280ull, + 0x0020128800000200ull, 0x0000008000000000ull, 0x0000000000200000ull, 0x0000000000000000ull, + 0x4500000228000200ull, 0x1042820025440002ull, 0x0010402840105001ull, 0x0010002510000000ull, + 0x4140008408504000ull, 0x020000004100A100ull, 0x2055000100022000ull, 0x214048A4840AA955ull, + 0x0040084004240400ull, 0x040004200010A001ull, 0x08004010010A0010ull, 0x9080115414050002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0189[64] = { + 1u, 17u, 29u, 50u, 67u, 88u, 108u, 119u, 122u, 138u, 146u, 146u, 150u, 159u, 176u, 185u, + 193u, 202u, 208u, 219u, 227u, 232u, 245u, 253u, 262u, 269u, 279u, 296u, 319u, 327u, 327u, 327u, + 335u, 342u, 353u, 369u, 375u, 384u, 384u, 388u, 403u, 410u, 417u, 424u, 432u, 437u, 443u, 450u, + 461u, 467u, 468u, 469u, 469u, 476u, 487u, 496u, 501u, 510u, 516u, 524u, 544u, 551u, 558u, 565u, }; void recomp_unit_0189_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0189_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AF8000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0189[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0189[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0189[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AF8000; @@ -767,7 +674,6 @@ L_08AF8014: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.gpr[17] = (aot_gpr_4 + ctx.gpr[17]); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AF80A0; } @@ -839,7 +745,6 @@ L_08AF80A0: L_08AF80AC: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF80D8; } @@ -852,7 +757,6 @@ L_08AF80B8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF80C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF80D8; } @@ -878,7 +782,17 @@ L_08AF80D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF80F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -892,7 +806,17 @@ L_08AF8100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF810C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -1021,7 +945,6 @@ L_08AF821C: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08AF8264; } @@ -1030,7 +953,6 @@ L_08AF821C: L_08AF822C: aot_gpr_7 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08AF8258; } @@ -1041,7 +963,6 @@ L_08AF8238: aot_mem.aot_direct_store32(aot_gpr_7 + static_cast(0), aot_gpr_6); aot_gpr_7 = (aot_gpr_6 | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08AF8258; } @@ -1104,7 +1025,6 @@ L_08AF82A4: goto L_08AF82A8; L_08AF82A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF82FC; } @@ -1194,7 +1114,6 @@ L_08AF8328: } L_08AF8338: aot_gpr_31 = (0x08AF8340u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF8340u) goto L_08AF8340; AOT_REGCACHE_SYNC_OUT(); return; L_08AF8340: @@ -1202,7 +1121,6 @@ L_08AF8340: goto L_08AF8344; L_08AF8344: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AF830C; } @@ -1213,7 +1131,6 @@ L_08AF834C: goto L_08AF8350; L_08AF8350: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF8360; } @@ -1221,7 +1138,6 @@ L_08AF8350: } L_08AF8358: aot_gpr_31 = (0x08AF8360u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF8360u) goto L_08AF8360; AOT_REGCACHE_SYNC_OUT(); return; L_08AF8360: @@ -1245,17 +1161,25 @@ L_08AF8360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8398: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_31 = (0x08AF83ACu); - // nop goto L_08AF85B4; L_08AF83AC: aot_gpr_31 = (0x08AF83B4u); - // nop goto L_08AF8E04; L_08AF83B4: ctx.gpr[16] = (0u | 0u); @@ -1362,7 +1286,6 @@ L_08AF8478: goto L_08AF8484; L_08AF8484: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF84AC; } @@ -1385,7 +1308,6 @@ L_08AF84A8: goto L_08AF84AC; L_08AF84AC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AF84CC; } @@ -1408,7 +1330,6 @@ L_08AF84C4: AOT_REGCACHE_SYNC_OUT(); return; L_08AF84CC: aot_gpr_31 = (0x08AF84D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF84D4u) goto L_08AF84D4; AOT_REGCACHE_SYNC_OUT(); return; L_08AF84D4: @@ -1424,7 +1345,6 @@ L_08AF84DC: L_08AF84E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1364))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF8500; } @@ -1535,7 +1455,17 @@ L_08AF85A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF85B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1630,7 +1560,17 @@ L_08AF8650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8668: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[19]); @@ -1663,7 +1603,6 @@ L_08AF86C0: aot_gpr_4 = (17608u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50426u << 16u); if (branch_taken) { @@ -1674,7 +1613,6 @@ L_08AF86C0: L_08AF86D8: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17658u << 16u); if (branch_taken) { @@ -1685,7 +1623,6 @@ L_08AF86D8: L_08AF86EC: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17664u << 16u); if (branch_taken) { @@ -1715,7 +1652,6 @@ L_08AF8700: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4108))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AF8844; } @@ -1783,7 +1719,6 @@ L_08AF8814: aot_fpr_12 = aot_fpr_12 - aot_fpr_20; aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -1793,7 +1728,6 @@ L_08AF8814: } L_08AF8834: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF8858; } @@ -1831,7 +1765,6 @@ L_08AF8858: aot_gpr_5 = (aot_gpr_5 | 16253u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -1843,7 +1776,6 @@ L_08AF8874: aot_gpr_5 = (50004u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (49884u << 16u); if (branch_taken) { @@ -1854,7 +1786,6 @@ L_08AF8874: L_08AF888C: aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (50342u << 16u); if (branch_taken) { @@ -1866,7 +1797,6 @@ L_08AF88A0: aot_gpr_5 = (aot_gpr_5 | 16384u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (50357u << 16u); if (branch_taken) { @@ -1878,9 +1808,7 @@ L_08AF88B8: aot_gpr_5 = (aot_gpr_5 | 24576u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF88D4; } @@ -1891,7 +1819,6 @@ L_08AF88D0: goto L_08AF88D4; L_08AF88D4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF88E8; } @@ -1927,7 +1854,17 @@ L_08AF88EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8918: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1324))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -1958,7 +1895,6 @@ L_08AF8924: aot_gpr_5 = (aot_gpr_5 + ctx.gpr[8]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(4108))); { const bool branch_taken = aot_gpr_5 != aot_gpr_7; - // nop if (branch_taken) { goto L_08AF8990; } @@ -1992,11 +1928,20 @@ L_08AF8990: goto L_08AF89A8; L_08AF89A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF89B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), ctx.gpr[16]); @@ -2226,7 +2171,17 @@ L_08AF89E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8B48: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (14851u << 16u); @@ -2303,7 +2258,6 @@ L_08AF8C14: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08AF8C40u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF8C40u) goto L_08AF8C40; AOT_REGCACHE_SYNC_OUT(); return; L_08AF8C40: @@ -2378,7 +2332,6 @@ L_08AF8CC8: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08AF8D04u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF8D04u) goto L_08AF8D04; AOT_REGCACHE_SYNC_OUT(); return; L_08AF8D04: @@ -2417,7 +2370,6 @@ L_08AF8D4C: L_08AF8D50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1280))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF8D68; } @@ -2432,9 +2384,7 @@ L_08AF8D5C: L_08AF8D68: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1412))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF8D80; } @@ -2446,9 +2396,7 @@ L_08AF8D7C: L_08AF8D80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1416))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF8D98; } @@ -2460,9 +2408,7 @@ L_08AF8D94: L_08AF8D98: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1404))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF8DB0; } @@ -2474,9 +2420,7 @@ L_08AF8DAC: L_08AF8DB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1408))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF8DC8; } @@ -2505,27 +2449,54 @@ L_08AF8DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8DFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8E04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10376))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF8E38; } @@ -2533,15 +2504,12 @@ L_08AF8E0C: } L_08AF8E20: aot_gpr_31 = (0x08AF8E28u); - // nop goto L_08AF94C0; L_08AF8E28: aot_gpr_31 = (0x08AF8E30u); - // nop goto L_08AF976C; L_08AF8E30: aot_gpr_31 = (0x08AF8E38u); - // nop goto L_08AF9B84; L_08AF8E38: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -2550,7 +2518,17 @@ L_08AF8E38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[16])); @@ -2593,7 +2571,6 @@ L_08AF8E44: L_08AF8ED0: { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[5]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[5] = std::bit_cast(0x7FC00000u); else ctx.fpr[5] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[19] < ctx.fpr[5])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[5] = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08AF8EE4; @@ -2609,7 +2586,6 @@ L_08AF8EE4: ctx.fpr[4] = std::sqrt(ctx.fpr[4]); ctx.fpr[4] = ctx.fpr[4] - ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[4] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[4] = std::bit_cast(std::bit_cast(ctx.fpr[2])); goto L_08AF8F14; @@ -2618,7 +2594,6 @@ L_08AF8EE4: L_08AF8F14: { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[4]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[4] = std::bit_cast(0x7FC00000u); else ctx.fpr[4] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[4] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[4] = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08AF8F28; @@ -2634,7 +2609,6 @@ L_08AF8F28: ctx.fpr[3] = std::sqrt(ctx.fpr[3]); ctx.fpr[3] = ctx.fpr[3] - ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[2])); goto L_08AF8F58; @@ -2643,7 +2617,6 @@ L_08AF8F28: L_08AF8F58: { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[3]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[3] = std::bit_cast(0x7FC00000u); else ctx.fpr[3] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[3] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[3] = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08AF8F6C; @@ -2659,7 +2632,6 @@ L_08AF8F6C: ctx.fpr[0] = std::sqrt(ctx.fpr[0]); ctx.fpr[17] = ctx.fpr[0] - ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[2])); goto L_08AF8F9C; @@ -2668,7 +2640,6 @@ L_08AF8F6C: L_08AF8F9C: { const float fs = ctx.fpr[18]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[19])); goto L_08AF8FB0; @@ -2694,7 +2665,17 @@ L_08AF8FDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF8FE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), ctx.gpr[16]); @@ -2729,7 +2710,6 @@ L_08AF8FE8: AOT_REGCACHE_SYNC_OUT(); return; L_08AF905C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AF9078; } @@ -2754,7 +2734,6 @@ L_08AF9070: } L_08AF9078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF9114; } @@ -2824,7 +2803,17 @@ L_08AF9114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF9130: aot_gpr_4 = (17046u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); @@ -2936,7 +2925,6 @@ L_08AF9250: ctx.fpr[16] = std::bit_cast(ctx.gpr[9]); ctx.gpr[9] = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[8]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08AF9310; } @@ -2988,9 +2976,7 @@ L_08AF92B4: { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fpr[17] = ctx.fpr[0] + ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF92F0; } @@ -3003,7 +2989,6 @@ L_08AF92F0: ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); ctx.gpr[10] = (static_cast(aot_gpr_7) < static_cast(ctx.gpr[9]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08AF92A0; } @@ -3026,7 +3011,6 @@ L_08AF9310: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fpr[16] = ctx.fpr[16] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AF9334; @@ -3035,7 +3019,6 @@ L_08AF9310: L_08AF9334: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08AF9348; @@ -3043,18 +3026,26 @@ L_08AF9334: goto L_08AF9348; L_08AF9348: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF9350: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8456))); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF9498; } @@ -3071,7 +3062,6 @@ L_08AF9378: AOT_REGCACHE_SYNC_OUT(); return; L_08AF9390: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AF9498; } @@ -3120,7 +3110,6 @@ L_08AF9398: AOT_REGCACHE_SYNC_OUT(); return; L_08AF9430: aot_gpr_31 = (0x08AF9438u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF9438u) goto L_08AF9438; AOT_REGCACHE_SYNC_OUT(); return; L_08AF9438: @@ -3166,7 +3155,17 @@ L_08AF9498: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF94C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], aot_gpr_31}; @@ -3189,12 +3188,10 @@ L_08AF94C0: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.gpr[16] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_gpr_31 = (0x08AF94F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF94F8u) goto L_08AF94F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF94F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AF9750; } @@ -3202,12 +3199,10 @@ L_08AF94F8: } L_08AF9500: aot_gpr_31 = (0x08AF9508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF9508u) goto L_08AF9508; AOT_REGCACHE_SYNC_OUT(); return; L_08AF9508: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AF9750; } @@ -3216,7 +3211,6 @@ L_08AF9508: L_08AF9510: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF952C; } @@ -3226,7 +3220,6 @@ L_08AF951C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AF9750; } @@ -3243,7 +3236,6 @@ L_08AF952C: } L_08AF9538: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF9750; } @@ -3268,7 +3260,6 @@ L_08AF954C: L_08AF9564: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7396))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AF9588; } @@ -3317,9 +3308,7 @@ L_08AF9588: aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF9740; } @@ -3331,7 +3320,6 @@ L_08AF95D4: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(5001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF9750; } @@ -3343,7 +3331,6 @@ L_08AF95EC: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(1001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF9738; } @@ -3378,7 +3365,6 @@ L_08AF962C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_20 + aot_fpr_12; aot_gpr_31 = (0x08AF9640u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF9640u) goto L_08AF9640; AOT_REGCACHE_SYNC_OUT(); return; L_08AF9640: @@ -3467,7 +3453,6 @@ L_08AF96FC: AOT_REGCACHE_SYNC_OUT(); return; L_08AF9738: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF9750; } @@ -3504,7 +3489,17 @@ L_08AF9750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF976C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(124), ctx.gpr[16]); @@ -3519,7 +3514,6 @@ L_08AF976C: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(2), static_cast(0u)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(3), static_cast(0u)); aot_gpr_31 = (0x08AF97A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF97A8u) goto L_08AF97A8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF97A8: @@ -3553,7 +3547,6 @@ L_08AF97C0: goto L_08AF97DC; L_08AF97DC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF97FC; } @@ -3602,9 +3595,7 @@ L_08AF97FC: aot_fpr_14 = aot_fpr_14 + ctx.fpr[15]; aot_fpr_13 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF99C8; } @@ -3616,7 +3607,6 @@ L_08AF9848: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(5001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF99D8; } @@ -3628,7 +3618,6 @@ L_08AF9860: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(4001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF99C0; } @@ -3664,7 +3653,6 @@ L_08AF98A4: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_20 + aot_fpr_12; aot_gpr_31 = (0x08AF98B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF98B8u) goto L_08AF98B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AF98B8: @@ -3710,7 +3698,6 @@ L_08AF98D4: goto L_08AF8918; L_08AF992C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AF99C0; } @@ -3770,7 +3757,6 @@ L_08AF9994: AOT_REGCACHE_SYNC_OUT(); return; L_08AF99C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF99D8; } @@ -3808,14 +3794,34 @@ L_08AF99D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF99F8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1332))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF9A00: aot_gpr_6 = (17056u << 16u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -3876,7 +3882,6 @@ L_08AF9A84: aot_gpr_6 = (aot_gpr_6 - aot_gpr_5); aot_gpr_7 = (static_cast(aot_gpr_7) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08AF9AAC; } @@ -3885,7 +3890,6 @@ L_08AF9A84: L_08AF9A98: aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AF9ABC; } @@ -3909,7 +3913,6 @@ L_08AF9AAC: } L_08AF9AB4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AF9AC4; } @@ -3928,11 +3931,20 @@ L_08AF9AC4: goto L_08AF9AC8; L_08AF9AC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF9AD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -3946,7 +3958,6 @@ L_08AF9AD0: } L_08AF9AE8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AF9B70; } @@ -3954,7 +3965,6 @@ L_08AF9AE8: } L_08AF9AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF9B08; } @@ -3970,7 +3980,6 @@ L_08AF9AF8: } L_08AF9B00: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AF9B70; } @@ -4007,7 +4016,6 @@ L_08AF9B28: } L_08AF9B38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF9B70; } @@ -4054,7 +4062,17 @@ L_08AF9B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF9B84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8816))); aot_gpr_4 = (aot_gpr_4 + static_cast(10956)); @@ -4081,7 +4099,6 @@ L_08AF9B98: L_08AF9BB0: aot_gpr_5 = (aot_gpr_7 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AF9BD8; } @@ -4092,7 +4109,6 @@ L_08AF9BBC: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); ctx.gpr[9] = (static_cast(aot_gpr_5) < 193 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08AF9BD4; } @@ -4108,7 +4124,6 @@ L_08AF9BD8: aot_gpr_5 = (aot_gpr_6 + static_cast(-10000)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AF9BEC; } @@ -4120,7 +4135,6 @@ L_08AF9BE8: L_08AF9BEC: ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(72))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08AF9B98; } @@ -4128,11 +4142,20 @@ L_08AF9BEC: } L_08AF9BF8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AF9C00: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4148,7 +4171,6 @@ L_08AF9C00: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1332))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AF9C5C; } @@ -4160,12 +4182,10 @@ L_08AF9C54: goto L_08AF9C5C; L_08AF9C5C: aot_gpr_31 = (0x08AF9C64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 866u, 0x08AC36D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AF9C64u) goto L_08AF9C64; AOT_REGCACHE_SYNC_OUT(); return; L_08AF9C64: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AF9C74; } @@ -4173,7 +4193,6 @@ L_08AF9C64: } L_08AF9C6C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFA0B4; } @@ -4181,7 +4200,6 @@ L_08AF9C6C: } L_08AF9C74: aot_gpr_31 = (0x08AF9C7Cu); - // nop goto L_08AF8B48; L_08AF9C7C: aot_gpr_4 = (0u | 255u); @@ -4410,9 +4428,7 @@ L_08AF9FA0: aot_gpr_4 = (16752u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF9FDC; } @@ -4420,7 +4436,6 @@ L_08AF9FA0: } L_08AF9FD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF9FFC; } @@ -4430,9 +4445,7 @@ L_08AF9FDC: aot_gpr_4 = (17008u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AF9FFC; } @@ -4440,7 +4453,6 @@ L_08AF9FDC: } L_08AF9FF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AF9FFC; } @@ -4502,11 +4514,9 @@ L_08AFA098: AOT_REGCACHE_SYNC_OUT(); return; L_08AFA0A4: aot_gpr_31 = (0x08AFA0ACu); - // nop goto L_08AF8E0C; L_08AFA0AC: aot_gpr_31 = (0x08AFA0B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFA0B4u) goto L_08AFA0B4; AOT_REGCACHE_SYNC_OUT(); return; L_08AFA0B4: @@ -4526,7 +4536,17 @@ L_08AFA0B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFA0DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4539,12 +4559,10 @@ L_08AFA0DC: ctx.gpr[18] = (0u | 0u); ctx.gpr[19] = (0u | 0u); aot_gpr_31 = (0x08AFA144u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 866u, 0x08AC36D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFA144u) goto L_08AFA144; AOT_REGCACHE_SYNC_OUT(); return; L_08AFA144: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AFA19C; } @@ -4552,7 +4570,6 @@ L_08AFA144: } L_08AFA14C: aot_gpr_31 = (0x08AFA154u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFA154u) goto L_08AFA154; AOT_REGCACHE_SYNC_OUT(); return; L_08AFA154: @@ -4579,7 +4596,6 @@ L_08AFA154: } L_08AFA194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFA1F0; } @@ -4587,7 +4603,6 @@ L_08AFA194: } L_08AFA19C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFAFDC; } @@ -4595,13 +4610,11 @@ L_08AFA19C: } L_08AFA1A4: aot_gpr_31 = (0x08AFA1ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFA1ACu) goto L_08AFA1AC; AOT_REGCACHE_SYNC_OUT(); return; L_08AFA1AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AFA1D0; } @@ -4609,14 +4622,12 @@ L_08AFA1AC: } L_08AFA1B8: aot_gpr_31 = (0x08AFA1C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFA1C0u) goto L_08AFA1C0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFA1C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFA1F0; } @@ -4648,9 +4659,7 @@ L_08AFA200: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA2B8; } @@ -4660,7 +4669,6 @@ L_08AFA220: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); ctx.fpr[16] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); goto L_08AFA244; @@ -4678,7 +4686,6 @@ L_08AFA238: L_08AFA244: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); goto L_08AFA264; @@ -4695,9 +4702,7 @@ L_08AFA258: } L_08AFA264: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA298; } @@ -4706,9 +4711,7 @@ L_08AFA264: L_08AFA274: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA290; } @@ -4733,9 +4736,7 @@ L_08AFA290: L_08AFA298: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA2B4; } @@ -4755,7 +4756,6 @@ L_08AFA2B4: L_08AFA2B8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[16] = std::bit_cast(0u); if (branch_taken) { @@ -4778,9 +4778,7 @@ L_08AFA2DC: aot_gpr_4 = (17008u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA308; } @@ -4847,7 +4845,6 @@ L_08AFA338: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(35))); aot_gpr_4 = (static_cast(aot_gpr_4) < 200 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFA3D4; } @@ -4861,9 +4858,7 @@ L_08AFA3D4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1288))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA3F8; } @@ -4882,9 +4877,7 @@ L_08AFA3F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1284))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFA4B4; } @@ -4918,7 +4911,6 @@ L_08AFA448: L_08AFA454: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = aot_fpr_13 - aot_fpr_14; goto L_08AFA474; @@ -4944,7 +4936,6 @@ L_08AFA484: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_5 = (aot_gpr_4 < static_cast(256) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFA49C; } @@ -5124,7 +5115,6 @@ L_08AFA698: aot_fpr_14 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_14)); ctx.gpr[23] = (std::bit_cast(aot_fpr_14)); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AFA724; } @@ -5139,7 +5129,6 @@ L_08AFA710: goto L_08AFA724; L_08AFA724: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFA740; } @@ -5154,7 +5143,6 @@ L_08AFA72C: goto L_08AFA740; L_08AFA740: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08AFA758; } @@ -5168,7 +5156,6 @@ L_08AFA748: goto L_08AFA758; L_08AFA758: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AFA770; } @@ -5378,9 +5365,7 @@ L_08AFA92C: aot_fpr_12 = aot_fpr_12 + ctx.fpr[19]; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(140))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFAF54; } @@ -5460,7 +5445,6 @@ L_08AFA9E4: goto L_08AFA9EC; L_08AFA9EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFAF54; } @@ -5472,9 +5456,7 @@ L_08AFA9F4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1320))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFAF54; } @@ -5528,7 +5510,6 @@ L_08AFAA80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(12))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFAF24; } @@ -5553,9 +5534,7 @@ L_08AFAA9C: aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(140))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFAF24; } @@ -5633,7 +5612,6 @@ L_08AFAB44: goto L_08AFAB4C; L_08AFAB4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFAF1C; } @@ -5642,9 +5620,7 @@ L_08AFAB4C: L_08AFAB54: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFAEC0; } @@ -5657,7 +5633,6 @@ L_08AFAB68: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4108))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFAC30; } @@ -5673,9 +5648,7 @@ L_08AFAB84: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFABF0; } @@ -5698,7 +5671,6 @@ L_08AFABB4: goto L_08AF8FE8; L_08AFABE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFAC30; } @@ -5749,9 +5721,7 @@ L_08AFAC50: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFACC8; } @@ -5774,7 +5744,6 @@ L_08AFAC8C: goto L_08AF8FE8; L_08AFACC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFAD08; } @@ -5825,9 +5794,7 @@ L_08AFAD28: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFADA0; } @@ -5850,7 +5817,6 @@ L_08AFAD64: goto L_08AF8FE8; L_08AFAD98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFADE0; } @@ -5902,7 +5868,6 @@ L_08AFAE00: aot_fpr_12 = ctx.fpr[15] + aot_fpr_12; ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08AFAE7C; @@ -5925,7 +5890,6 @@ L_08AFAE40: goto L_08AF8FE8; L_08AFAE74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFAF1C; } @@ -5950,7 +5914,6 @@ L_08AFAE7C: goto L_08AF8E44; L_08AFAEB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFAF1C; } @@ -5963,7 +5926,6 @@ L_08AFAEC0: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(80), aot_run_words); } aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1282))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFAF1C; } @@ -6065,11 +6027,9 @@ L_08AFAFC0: AOT_REGCACHE_SYNC_OUT(); return; L_08AFAFCC: aot_gpr_31 = (0x08AFAFD4u); - // nop goto L_08AF9350; L_08AFAFD4: aot_gpr_31 = (0x08AFAFDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0038_entry, 38u, 579u, 0x0889E7C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFAFDCu) goto L_08AFAFDC; AOT_REGCACHE_SYNC_OUT(); return; L_08AFAFDC: @@ -6097,7 +6057,17 @@ L_08AFAFDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB024: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[11]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -6125,7 +6095,6 @@ L_08AFB08C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8456))); aot_gpr_4 = (static_cast(aot_gpr_4) < 508 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFB0A4; } @@ -6133,7 +6102,6 @@ L_08AFB08C: } L_08AFB09C: aot_gpr_31 = (0x08AFB0A4u); - // nop goto L_08AF9350; L_08AFB0A4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1360))); @@ -6381,7 +6349,17 @@ L_08AFB254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB424: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (0u | 4u); @@ -6468,14 +6446,34 @@ L_08AFB484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB4E0: jump_target = aot_gpr_31; aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(10284), static_cast(aot_gpr_4)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB4E8: aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(10284), static_cast(aot_gpr_4)); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(8344), static_cast(aot_gpr_4)); @@ -6484,7 +6482,17 @@ L_08AFB4E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB4F8: aot_gpr_4 = (0u + static_cast(-1)); jump_target = aot_gpr_31; @@ -6492,14 +6500,23 @@ L_08AFB4F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB504: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(80), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFB560; } @@ -6515,7 +6532,6 @@ L_08AFB548: goto L_08AFB558; L_08AFB558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFB788; } @@ -6523,7 +6539,6 @@ L_08AFB558: } L_08AFB560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFB794; } @@ -6532,7 +6547,6 @@ L_08AFB560: L_08AFB568: aot_gpr_4 = (static_cast(aot_gpr_4) < 18 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFB788; } @@ -6573,7 +6587,6 @@ L_08AFB5A4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFB5C4; } @@ -6639,7 +6652,6 @@ L_08AFB600: goto L_08AFB630; L_08AFB630: aot_gpr_31 = (0x08AFB638u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFB638u) goto L_08AFB638; AOT_REGCACHE_SYNC_OUT(); return; L_08AFB638: @@ -6677,7 +6689,6 @@ L_08AFB678: } L_08AFB68C: aot_gpr_31 = (0x08AFB694u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFB694u) goto L_08AFB694; AOT_REGCACHE_SYNC_OUT(); return; L_08AFB694: @@ -6752,7 +6763,6 @@ L_08AFB770: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFB630; } @@ -6760,7 +6770,6 @@ L_08AFB770: } L_08AFB780: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFB794; } @@ -6793,7 +6802,17 @@ L_08AFB794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFB7D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_4 = (0u | 255u); @@ -6836,7 +6855,6 @@ L_08AFB838: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFB858; } @@ -6907,7 +6925,6 @@ L_08AFB89C: goto L_08AFB8D8; L_08AFB8D8: aot_gpr_31 = (0x08AFB8E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFB8E0u) goto L_08AFB8E0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFB8E0: @@ -6945,7 +6962,6 @@ L_08AFB920: } L_08AFB934: aot_gpr_31 = (0x08AFB93Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFB93Cu) goto L_08AFB93C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFB93C: @@ -7002,7 +7018,6 @@ L_08AFB978: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(ctx.fpr[15])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFBA34; } @@ -7037,7 +7052,6 @@ L_08AFBA34: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFB8D8; } @@ -7065,18 +7079,26 @@ L_08AFBA44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFBA80: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(120), aot_run_words); } aot_gpr_31 = (0x08AFBAC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBAC0u) goto L_08AFBAC0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBAC0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AFBB10; } @@ -7084,12 +7106,10 @@ L_08AFBAC0: } L_08AFBAC8: aot_gpr_31 = (0x08AFBAD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBAD0u) goto L_08AFBAD0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBAD0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AFBB10; } @@ -7100,9 +7120,7 @@ L_08AFBAD8: ctx.fpr[24] = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFBB10; } @@ -7116,7 +7134,6 @@ L_08AFBAF4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFBB00: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AFBB18; } @@ -7124,7 +7141,6 @@ L_08AFBB00: } L_08AFBB08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFBB4C; } @@ -7132,7 +7148,6 @@ L_08AFBB08: } L_08AFBB10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFBF04; } @@ -7140,13 +7155,11 @@ L_08AFBB10: } L_08AFBB18: aot_gpr_31 = (0x08AFBB20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBB20u) goto L_08AFBB20; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBB20: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFBB4C; } @@ -7154,12 +7167,10 @@ L_08AFBB20: } L_08AFBB2C: aot_gpr_31 = (0x08AFBB34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 289u, 0x08B01038u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBB34u) goto L_08AFBB34; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBB34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08AFBB4C; } @@ -7172,7 +7183,6 @@ L_08AFBB3C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFBB44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFBF04; } @@ -7183,7 +7193,6 @@ L_08AFBB4C: aot_gpr_4 = (15820u << 16u); aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7205,7 +7214,6 @@ L_08AFBB68: L_08AFBB7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1544))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFBBB8; } @@ -7214,7 +7222,6 @@ L_08AFBB7C: L_08AFBB88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1556))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AFBBAC; } @@ -7222,7 +7229,6 @@ L_08AFBB88: } L_08AFBB94: aot_gpr_31 = (0x08AFBB9Cu); - // nop goto L_08AFB504; L_08AFBB9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1556))); @@ -7245,9 +7251,7 @@ L_08AFBBB8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFBBE0; } @@ -7255,12 +7259,10 @@ L_08AFBBB8: } L_08AFBBD8: aot_gpr_31 = (0x08AFBBE0u); - // nop goto L_08AFB7D0; L_08AFBBE0: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7896))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16544u << 16u); if (branch_taken) { @@ -7379,7 +7381,6 @@ L_08AFBD00: AOT_REGCACHE_SYNC_OUT(); return; L_08AFBD34: aot_gpr_31 = (0x08AFBD3Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBD3Cu) goto L_08AFBD3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBD3C: @@ -7468,7 +7469,6 @@ L_08AFBE10: AOT_REGCACHE_SYNC_OUT(); return; L_08AFBE44: aot_gpr_31 = (0x08AFBE4Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBE4Cu) goto L_08AFBE4C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBE4C: @@ -7529,7 +7529,6 @@ L_08AFBEEC: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFBC48; } @@ -7557,25 +7556,42 @@ L_08AFBF04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFBF40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFBF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(32), aot_run_words); } aot_gpr_31 = (0x08AFBF68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBF68u) goto L_08AFBF68; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBF68: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08AFBF90; } @@ -7587,7 +7603,6 @@ L_08AFBF70: { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.hi); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFBF98; } @@ -7595,7 +7610,6 @@ L_08AFBF70: } L_08AFBF88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 4u, 0x08AFC0B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7603,7 +7617,6 @@ L_08AFBF88: } L_08AFBF90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 4u, 0x08AFC0B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7611,14 +7624,12 @@ L_08AFBF90: } L_08AFBF98: aot_gpr_31 = (0x08AFBFA0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBFA0u) goto L_08AFBFA0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBFA0: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 5u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 4u, 0x08AFC0B8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7654,7 +7665,6 @@ L_08AFBFDC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = aot_fpr_20 + aot_fpr_12; aot_gpr_31 = (0x08AFBFF0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFBFF0u) goto L_08AFBFF0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFBFF0: diff --git a/profiles/vcs/generated/generated_unit_0190.cpp b/profiles/vcs/generated/generated_unit_0190.cpp index c8c16b3..cfb61bb 100644 --- a/profiles/vcs/generated/generated_unit_0190.cpp +++ b/profiles/vcs/generated/generated_unit_0190.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0190[4090] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 14, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 23, 0, 0, 0, 24, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 28, 29, 0, 0, 30, 0, 0, 0, 31, 0, 0, 32, 33, 34, 0, - 35, 0, 36, 0, 0, 0, 37, 0, 0, 38, 39, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 45, 0, 46, - 0, 47, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, 61, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 64, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 68, 0, 0, 69, 0, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, 0, 0, 73, 0, 0, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 78, 0, 79, - 0, 80, 0, 0, 81, 82, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0, 0, - 0, 0, 0, 0, 89, 0, 90, 0, 0, 91, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 94, 0, 95, 96, 0, 97, 0, 98, 0, 99, 0, 100, - 0, 0, 101, 0, 102, 0, 103, 0, 104, 0, 0, 0, 105, 0, 106, 0, 107, 0, 0, 108, 0, 109, 0, 0, 0, 110, 0, 111, 0, 112, 0, 113, - 0, 0, 114, 0, 115, 0, 116, 0, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 123, 0, 124, - 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 127, 128, 0, 129, 0, 130, 0, 0, 131, 0, 0, 132, 0, 133, 0, 134, 0, 0, - 135, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 140, - 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 146, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, - 0, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 152, 153, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, 0, 0, 0, 158, 0, 159, 0, - 160, 0, 0, 161, 0, 162, 0, 163, 164, 0, 165, 0, 0, 166, 0, 167, 0, 168, 0, 169, 0, 0, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, - 0, 175, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 178, 179, 0, 0, 180, 0, 181, 0, 182, 0, 0, 183, 0, 184, 0, 185, 186, 0, 187, - 0, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 203, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 0, - 0, 207, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, - 0, 0, 0, 214, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, - 218, 0, 0, 0, 0, 0, 219, 0, 220, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 227, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 231, 0, 0, 0, 232, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 242, 0, 0, 243, 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, - 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 0, 249, 0, 250, 0, 0, 0, 0, 251, 0, 252, 0, 0, 253, 0, 0, 254, 0, 0, 255, 0, 0, - 256, 0, 0, 257, 0, 0, 258, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 261, 0, 262, 0, - 263, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 268, 0, 0, 269, 0, 0, 270, 0, 0, 271, 0, 0, 272, 0, 273, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, - 0, 277, 0, 0, 278, 0, 0, 0, 0, 279, 0, 0, 280, 0, 281, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 284, 0, 285, 0, - 0, 286, 0, 0, 287, 0, 288, 0, 0, 0, 289, 290, 0, 291, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, 0, 0, 295, 296, 0, 297, 0, - 298, 0, 299, 0, 300, 0, 301, 0, 0, 0, 0, 0, 302, 0, 303, 0, 0, 304, 0, 0, 305, 0, 306, 0, 307, 0, 308, 309, 0, 0, 0, 0, - 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 312, 0, 313, 0, 314, 0, 0, 0, 315, 0, 0, 0, 0, 316, 0, 0, - 0, 0, 317, 0, 0, 0, 318, 0, 319, 0, 320, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 323, 0, 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, - 0, 335, 0, 336, 0, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, 0, 341, 0, 342, 0, - 0, 343, 0, 344, 0, 345, 0, 346, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 357, 0, 0, 0, 358, 0, 0, 359, 0, - 360, 0, 0, 0, 361, 0, 362, 0, 363, 0, 0, 364, 0, 365, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 370, - 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, 0, - 0, 374, 375, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 377, 0, 378, 0, 379, 0, 0, 0, 380, 0, 381, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 384, 0, 385, 0, 0, 0, 386, 0, 0, 0, - 387, 0, 388, 0, 0, 389, 0, 0, 0, 390, 0, 391, 0, 392, 0, 393, 0, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 397, 0, 398, 0, 0, - 399, 0, 0, 0, 400, 0, 401, 0, 402, 0, 0, 0, 0, 0, 403, 0, 404, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 407, 0, 0, 0, 0, 0, 408, 0, 409, 0, 410, 0, 0, 411, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 0, 414, 0, 415, 0, - 416, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 421, 0, 422, 0, 423, 0, 0, 0, 0, - 424, 0, 425, 0, 426, 0, 427, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, - 0, 0, 0, 0, 0, 0, 0, 432, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, 0, 437, 0, 0, 0, - 438, 0, 439, 0, 0, 440, 0, 441, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 446, - 0, 447, 0, 0, 448, 0, 449, 0, 0, 450, 0, 451, 0, 452, 0, 453, 0, 454, 0, 0, 455, 0, 456, 0, 0, 457, 0, 0, 458, 0, 0, 459, - 0, 0, 460, 461, 0, 462, 0, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 467, 0, 468, 0, 469, 0, 470, 0, 471, 472, 0, 473, 0, - 0, 0, 474, 0, 475, 476, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 0, 480, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, 486, - 0, 0, 487, 0, 0, 0, 488, 0, 489, 0, 0, 0, 490, 0, 0, 491, 0, 0, 492, 0, 493, 0, 0, 0, 494, 0, 495, 0, 0, 496, 0, 0, - 497, 0, 498, 0, 499, 0, 0, 500, 0, 501, 0, 502, 0, 503, 0, 504, 0, 505, 0, 0, 506, 0, 507, 0, 508, 0, 0, 0, 0, 509, 0, 510, - 0, 0, 511, 0, 0, 0, 0, 512, 0, 0, 513, 0, 514, 0, 0, 0, 515, 0, 516, 0, 517, 0, 518, 0, 519, 0, 520, 0, 521, 0, 522, 0, - 523, 0, 524, 0, 525, 0, 526, 0, 527, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 532, 0, - 533, 0, 0, 0, 534, 0, 0, 535, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 0, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, - 0, 546, 0, 547, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, 554, 0, 555, 0, 0, 556, 0, 557, 558, 0, 559, 0, 560, 0, 0, - 0, 0, 0, 0, 561, 0, 0, 562, 0, 563, 0, 0, 564, 0, 0, 565, 0, 0, 566, 0, 567, 0, 0, 568, 0, 569, 0, 570, 0, 571, 0, 572, - 0, 0, 573, 0, 574, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, - 0, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, - 582, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, - 587, 0, 588, 0, 589, 0, 0, 0, 0, 0, 590, 0, 591, 0, 592, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, 0, - 595, 0, 0, 0, 0, 596, 0, 0, 597, 0, 598, 0, 0, 599, 0, 0, 0, 600, 0, 0, 601, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, - 0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 607, 0, 608, 0, 0, 0, 0, 609, 0, 610, 0, 0, 0, 611, 0, 612, - 0, 613, 0, 614, 615, 616, 0, 0, 0, 617, 0, 0, 0, 618, 0, 619, 0, 0, 620, 0, 0, 0, 621, 0, 0, 622, 0, 0, 623, 0, 0, 0, - 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 630, 0, 631, 0, 0, 0, 0, 632, 0, 633, - 0, 0, 0, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 638, 0, 0, - 0, 0, 0, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, - 646, 0, 0, 0, 0, 0, 0, 647, 0, 648, 0, 649, 0, 650, 0, 651, 0, 0, 0, 0, 0, 652, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, - 0, 654, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 660, 0, 661, 0, 0, 662, 0, 663, - 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 666, 0, 667, 0, 0, 668, 0, 669, 0, 0, 0, 0, 670, 0, 0, 0, 0, - 0, 0, 0, 0, 671, 0, 0, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 0, 677, 0, 0, 0, 678, 0, 0, 679, 0, 680, 0, 681, 0, 682, - 0, 683, 0, 0, 0, 684, 0, 0, 685, 0, 686, 0, 0, 0, 687, 0, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 0, 0, 0, 0, 0, 693, - 0, 0, 0, 0, 694, 0, 0, 695, 0, 696, 0, 0, 0, 697, 0, 698, 0, 699, 0, 700, 0, 0, 0, 701, 0, 0, 702, 0, 703, 0, 704, 0, - 705, 0, 706, 0, 0, 0, 707, 0, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 0, 0, 0, 0, 714, 0, 0, 0, 0, 715, 0, - 0, 716, 0, 717, 0, 0, 0, 718, 0, 719, 0, 720, 0, 721, 0, 0, 0, 722, 0, 0, 723, 0, 724, 0, 725, 0, 726, 0, 727, 0, 0, 0, - 728, 0, 0, 729, 0, 730, 0, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 733, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 740, 0, 0, 741, 0, 742, 743, 0, 0, 744, 0, 0, - 0, 745, 0, 0, 0, 0, 746, 747, 0, 0, 0, 748, 0, 749, 0, 750, 0, 0, 751, 0, 752, 0, 0, 753, 0, 754, 0, 0, 755, 0, 756, 0, - 0, 757, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, 0, 762, 0, 0, 763, 0, 764, - 765, 0, 766, 0, 0, 767, 0, 768, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, - 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 774, 0, 0, 775, 0, 776, 0, 777, 0, 778, 0, 0, 779, 0, 0, 0, 780, - 0, 0, 0, 781, 0, 0, 0, 0, 782, 0, 783, 0, 784, 0, 785, 0, 0, 786, 0, 787, 0, 788, 0, 0, 789, 0, 790, 0, 0, 0, 791, 0, - 792, 0, 0, 0, 793, 0, 0, 794, 0, 795, 0, 796, 0, 797, 0, 798, 0, 0, 0, 799, 0, 800, 0, 0, 0, 801, 0, 0, 0, 0, 0, 802, - 0, 803, 0, 804, 0, 0, 0, 805, 0, 806, 0, 807, 0, 808, 0, 809, 0, 810, 0, 811, 0, 812, 813, 0, 0, 0, 0, 0, 0, 0, 814, 0, - 815, 0, 816, 0, 817, 0, 818, 0, 819, 0, 820, 0, 821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, - 0, 0, 823, 0, 824, 0, 825, 0, 0, 0, 826, 0, 827, 828, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 830, 0, 831, 0, 0, 832, 0, 833, - 0, 0, 834, 0, 0, 835, 0, 836, 0, 837, 0, 0, 838, 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, 840, 0, 841, 0, 0, 842, 0, 843, 0, - 0, 844, 0, 0, 845, 0, 846, 0, 847, 0, 0, 848, 0, 0, 0, 0, 849, 0, 850, 0, 0, 0, 851, 0, 0, 852, 0, 853, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 860, 0, 861, 0, 862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 863, 0, 864, 0, 0, 865, 0, 866, 867, 0, 0, 0, 0, 868, 0, 0, 0, 0, 0, 869, 0, 0, 0, 870, 0, - 0, 871, 0, 872, 0, 0, 873, 0, 0, 0, 874, 875, 0, 0, 876, 0, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, - 0, 0, 879, 0, 0, 880, 0, 881, 0, 882, 0, 0, 0, 883, 0, 0, 0, 884, 0, 885, 0, 0, 0, 886, 887, 0, 888, 0, 0, 0, 889, 0, - 890, 0, 891, 0, 0, 0, 0, 0, 892, 0, 893, 0, 0, 894, 0, 0, 0, 895, 0, 896, 0, 897, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, - 0, 899, 0, 900, 0, 0, 901, 0, 902, 0, 0, 903, 0, 904, 0, 905, 0, 906, 0, 907, 0, 0, 0, 0, 0, 908, 0, 0, 909, 0, 0, 910, - 0, 0, 0, 911, 0, 0, 912, 0, 0, 913, 0, 914, 0, 915, 0, 0, 0, 0, 0, 916, 0, 917, 0, 0, 918, 0, 0, 0, 0, 0, 919, 0, - 920, 0, 0, 0, 0, 921, 0, 0, 0, 0, 0, 0, 0, 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 923, 0, 0, 924, 0, 925, 0, 0, - 0, 0, 926, 0, 927, 0, 928, 929, 0, 0, 0, 0, 930, 0, 0, 0, 0, 931, 0, 0, 0, 932, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, - 934, 0, 0, 0, 935, 0, 0, 936, 0, 0, 0, 0, 0, 0, 0, 937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, - 939, 0, 940, 0, 0, 0, 0, 941, 942, 0, 0, 0, 0, 0, 0, 943, 0, 944, 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, 0, 947, - 0, 0, 0, 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, 950, 0, 0, 0, 0, 951, 0, 0, 952, 0, 0, 0, 953, - 0, 0, 0, 954, 0, 955, 0, 0, 0, 0, 956, 0, 0, 0, 0, 957, 0, 0, 0, 0, 0, 0, 958, 959, 0, 960, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0190[64] = { + 0x0020400008000009ull, 0x00000000C0000201ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x2084420000000000ull, 0x0000000000084201ull, 0x0000800000000000ull, 0x7226880889110000ull, + 0x0808520AA9202E45ull, 0x49044A8085505080ull, 0x121202B2A2A93001ull, 0xAA295154AAD11250ull, + 0x2A4AD040A2055454ull, 0x0001800288810011ull, 0x5145181248250040ull, 0xB52A602AAA8AA5A9ull, + 0x2020550000200554ull, 0x08AA000000404000ull, 0x0000001820422812ull, 0x0100C14108200000ull, + 0x4450000000115010ull, 0x0200090000100800ull, 0x2494282249249220ull, 0x0004480554000149ull, + 0x5040D21280215249ull, 0x0D52505559142C52ull, 0x0000254421150801ull, 0xAAA1008010012500ull, + 0x040D55AA5240088Aull, 0xD010A95148A02000ull, 0x0000020620400100ull, 0x2A14AA2511502A2Aull, + 0x50512A08000D4151ull, 0x880402550A810A81ull, 0x804444A515004180ull, 0x5AAA492C9252AA52ull, + 0xA8000002002A4934ull, 0xA152AA9525149144ull, 0x4809215555551484ull, 0x2B4AAAAAAAA2A491ull, + 0x04100094AA949290ull, 0x0408104108100404ull, 0x8412252102405415ull, 0x1244A23AA2850814ull, + 0xA142400801004020ull, 0x0800555022040110ull, 0x000000120120AA81ull, 0x0852A010A5440110ull, + 0x82AA4522AA455510ull, 0x420AAA45548AA290ull, 0x2122042915522A8Aull, 0x5294A8C226948101ull, + 0x101020A5A4811022ull, 0x452A550889549004ull, 0x406AAA8A8228AA91ull, 0xA508345404001555ull, + 0x0A450952528052A4ull, 0x00000000002AAAA0ull, 0x40044C4A4410D280ull, 0x102A2505458A22A4ull, + 0x41282A48920AA94Aull, 0x00A210D429004021ull, 0xA00A818502008091ull, 0x02C0842889090040ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0190[64] = { + 1u, 6u, 10u, 10u, 10u, 15u, 19u, 20u, 35u, 54u, 70u, 89u, 114u, 135u, 144u, 160u, + 188u, 200u, 207u, 216u, 224u, 233u, 238u, 256u, 268u, 286u, 310u, 322u, 335u, 355u, 371u, 377u, + 399u, 416u, 432u, 447u, 474u, 487u, 511u, 533u, 561u, 578u, 587u, 604u, 624u, 634u, 646u, 656u, + 671u, 694u, 716u, 736u, 757u, 772u, 792u, 815u, 834u, 854u, 863u, 879u, 899u, 920u, 934u, 948u, }; void recomp_unit_0190_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0190_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08AFC000u; - entry_id = (entry_delta < 16360u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0190[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16360u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0190[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0190[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08AFC000; @@ -1203,7 +1110,17 @@ L_08AFC0B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFC0D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8344)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); @@ -1219,7 +1136,17 @@ L_08AFC0D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFC100: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(10424)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(10426)))))); @@ -1233,7 +1160,17 @@ L_08AFC100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFC124: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_13 = std::bit_cast(aot_gpr_6); @@ -1508,7 +1445,6 @@ L_08AFC17C: aot_gpr_4 = (16784u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08AFC4B8; } @@ -1523,9 +1459,7 @@ L_08AFC4A4: goto L_08AFC4B8; L_08AFC4B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFC4DC; } @@ -1546,7 +1480,6 @@ L_08AFC4DC: aot_gpr_4 = (16768u << 16u); ctx.fpr[17] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_13; goto L_08AFC500; @@ -1683,7 +1616,17 @@ L_08AFC54C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFC6BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(7650))); @@ -1713,7 +1656,6 @@ L_08AFC6BC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_31); ctx.fpr[22] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -1744,7 +1686,6 @@ L_08AFC750: L_08AFC760: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(10284)))))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AFC7C4; } @@ -1786,7 +1727,6 @@ L_08AFC7AC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFC7C8; } @@ -1836,7 +1776,6 @@ L_08AFC7F4: goto L_08AFC7F8; L_08AFC7F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFC854; } @@ -1874,7 +1813,6 @@ L_08AFC828: goto L_08AFC82C; L_08AFC82C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFC854; } @@ -1893,7 +1831,6 @@ L_08AFC834: L_08AFC854: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8352)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AFC9A4; } @@ -1902,7 +1839,6 @@ L_08AFC854: L_08AFC860: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(8344)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AFC9A4; } @@ -1910,12 +1846,10 @@ L_08AFC860: } L_08AFC86C: aot_gpr_31 = (0x08AFC874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFC874u) goto L_08AFC874; AOT_REGCACHE_SYNC_OUT(); return; L_08AFC874: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFC9A4; } @@ -1923,12 +1857,10 @@ L_08AFC874: } L_08AFC87C: aot_gpr_31 = (0x08AFC884u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFC884u) goto L_08AFC884; AOT_REGCACHE_SYNC_OUT(); return; L_08AFC884: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFC9A4; } @@ -1938,9 +1870,7 @@ L_08AFC88C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-23440))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFC9A4; } @@ -1949,7 +1879,6 @@ L_08AFC88C: L_08AFC8A4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(10404))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFC960; } @@ -1957,7 +1886,6 @@ L_08AFC8A4: } L_08AFC8B0: aot_gpr_31 = (0x08AFC8B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFC8B8u) goto L_08AFC8B8; AOT_REGCACHE_SYNC_OUT(); return; L_08AFC8B8: @@ -2006,7 +1934,6 @@ L_08AFC91C: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(51) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFC9AC; } @@ -2023,7 +1950,6 @@ L_08AFC938: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(8592), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(8592))); { const bool branch_taken = ctx.gpr[20] == aot_gpr_4; - // nop if (branch_taken) { goto L_08AFC958; } @@ -2035,7 +1961,6 @@ L_08AFC950: goto L_08AFC958; L_08AFC958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFC9AC; } @@ -2043,7 +1968,6 @@ L_08AFC958: } L_08AFC960: aot_gpr_31 = (0x08AFC968u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFC968u) goto L_08AFC968; AOT_REGCACHE_SYNC_OUT(); return; L_08AFC968: @@ -2051,7 +1975,6 @@ L_08AFC968: aot_gpr_4 = (aot_gpr_4 & 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < 200 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFC99C; } @@ -2086,7 +2009,6 @@ L_08AFC9A4: L_08AFC9AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10416))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFCA34; } @@ -2096,7 +2018,6 @@ L_08AFC9B8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFCA34; } @@ -2160,7 +2081,6 @@ L_08AFCA34: L_08AFCA40: aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCA74; } @@ -2176,7 +2096,6 @@ L_08AFCA4C: } L_08AFCA54: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCA64; } @@ -2202,7 +2121,6 @@ L_08AFCA64: } L_08AFCA74: { const bool branch_taken = aot_gpr_6 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08AFCA84; } @@ -2210,7 +2128,6 @@ L_08AFCA74: } L_08AFCA7C: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCA90; } @@ -2238,7 +2155,6 @@ L_08AFCA94: } L_08AFCA9C: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCB58; } @@ -2277,7 +2193,6 @@ L_08AFCAD0: L_08AFCAE4: ctx.gpr[7] = (0u | 5u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AFCB40; } @@ -2289,9 +2204,7 @@ L_08AFCAF0: ctx.gpr[7] = (ctx.gpr[7] | 52429u); aot_fpr_14 = std::bit_cast(ctx.gpr[7]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFCB18; } @@ -2327,9 +2240,7 @@ L_08AFCB30: goto L_08AFCB40; L_08AFCB40: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFCB5C; } @@ -2364,7 +2275,6 @@ L_08AFCB64: } L_08AFCB6C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCB7C; } @@ -2385,7 +2295,6 @@ L_08AFCB7C: goto L_08AFCB88; L_08AFCB88: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AFCBB0; } @@ -2401,7 +2310,6 @@ L_08AFCB90: } L_08AFCB98: { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCBB0; } @@ -2415,7 +2323,6 @@ L_08AFCBA0: goto L_08AFCBB0; L_08AFCBB0: { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AFCBC0; } @@ -2436,7 +2343,6 @@ L_08AFCBC0: goto L_08AFCBCC; L_08AFCBCC: { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AFCBE4; } @@ -2458,7 +2364,6 @@ L_08AFCBE4: } L_08AFCBEC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCBFC; } @@ -2487,7 +2392,6 @@ L_08AFCC08: } L_08AFCC10: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCC28; } @@ -2501,7 +2405,6 @@ L_08AFCC18: goto L_08AFCC28; L_08AFCC28: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AFCCB8; } @@ -2509,7 +2412,6 @@ L_08AFCC28: } L_08AFCC30: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AFCC48; } @@ -2525,7 +2427,6 @@ L_08AFCC38: } L_08AFCC40: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCCB8; } @@ -2536,9 +2437,7 @@ L_08AFCC48: aot_gpr_5 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFCCB0; } @@ -2556,7 +2455,6 @@ L_08AFCC64: } L_08AFCC74: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AFCCB0; } @@ -2567,7 +2465,6 @@ L_08AFCC7C: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08AFCC98; @@ -2606,7 +2503,6 @@ L_08AFCCBC: } L_08AFCCC4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCCD8; } @@ -2636,7 +2532,6 @@ L_08AFCCE4: } L_08AFCCEC: { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCD00; } @@ -2649,7 +2544,6 @@ L_08AFCCF4: goto L_08AFCD00; L_08AFCD00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (2234u << 16u); if (branch_taken) { @@ -2667,7 +2561,6 @@ L_08AFCD10: aot_fpr_14 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08AFCD40; @@ -2678,7 +2571,6 @@ L_08AFCD40: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9268), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AFCD5C; @@ -2686,7 +2578,6 @@ L_08AFCD40: goto L_08AFCD5C; L_08AFCD5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08AFCD6C; @@ -2696,7 +2587,6 @@ L_08AFCD6C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9268), std::bit_cast(aot_fpr_13)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-24896))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFCDBC; } @@ -2704,7 +2594,6 @@ L_08AFCD6C: } L_08AFCD7C: aot_gpr_31 = (0x08AFCD84u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFCD84u) goto L_08AFCD84; AOT_REGCACHE_SYNC_OUT(); return; L_08AFCD84: @@ -2746,7 +2635,6 @@ L_08AFCDC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7648))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(8348), std::bit_cast(aot_fpr_15)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_08AFCE18; @@ -2779,7 +2667,6 @@ L_08AFCE40: L_08AFCE48: aot_gpr_5 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFCE6C; } @@ -2800,7 +2687,6 @@ L_08AFCE54: L_08AFCE6C: aot_gpr_5 = (static_cast(aot_gpr_4) < 7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFCE84; } @@ -2818,7 +2704,6 @@ L_08AFCE78: L_08AFCE84: aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFCEAC; } @@ -2842,9 +2727,7 @@ L_08AFCEAC: goto L_08AFCEB0; L_08AFCEB0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFCEC8; } @@ -2860,7 +2743,6 @@ L_08AFCEC0: } L_08AFCEC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9748), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -2878,7 +2760,6 @@ L_08AFCED8: } L_08AFCEE0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(9748), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -2916,7 +2797,6 @@ L_08AFCF0C: } L_08AFCF14: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -2927,7 +2807,6 @@ L_08AFCF1C: goto L_08AFCF20; L_08AFCF20: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -2942,7 +2821,6 @@ L_08AFCF28: goto L_08AFCF34; L_08AFCF34: aot_gpr_31 = (0x08AFCF3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFCF3Cu) goto L_08AFCF3C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFCF3C: @@ -2951,7 +2829,6 @@ L_08AFCF3C: goto L_08AFCF44; L_08AFCF44: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -2961,7 +2838,6 @@ L_08AFCF4C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -2969,7 +2845,6 @@ L_08AFCF4C: } L_08AFCF5C: aot_gpr_31 = (0x08AFCF64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFCF64u) goto L_08AFCF64; AOT_REGCACHE_SYNC_OUT(); return; L_08AFCF64: @@ -2985,7 +2860,6 @@ L_08AFCF6C: goto L_08AFCF74; L_08AFCF74: aot_gpr_31 = (0x08AFCF7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFCF7Cu) goto L_08AFCF7C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFCF7C: @@ -2995,7 +2869,6 @@ L_08AFCF7C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFCF84: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -3003,7 +2876,6 @@ L_08AFCF84: } L_08AFCF8C: aot_gpr_31 = (0x08AFCF94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFCF94u) goto L_08AFCF94; AOT_REGCACHE_SYNC_OUT(); return; L_08AFCF94: @@ -3012,9 +2884,7 @@ L_08AFCF94: aot_gpr_4 = (16624u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -3034,7 +2904,6 @@ L_08AFCFB8: } L_08AFCFC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFCFD4; } @@ -3042,7 +2911,6 @@ L_08AFCFC4: } L_08AFCFCC: aot_gpr_31 = (0x08AFCFD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 566u, 0x08AFBF40u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFCFD4u) goto L_08AFCFD4; AOT_REGCACHE_SYNC_OUT(); return; L_08AFCFD4: @@ -3062,7 +2930,6 @@ L_08AFCFE0: } L_08AFCFE8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFD028; } @@ -3073,7 +2940,6 @@ L_08AFCFF0: goto L_08AFCFF4; L_08AFCFF4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFD028; } @@ -3088,7 +2954,6 @@ L_08AFCFFC: goto L_08AFD008; L_08AFD008: aot_gpr_31 = (0x08AFD010u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD010u) goto L_08AFD010; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD010: @@ -3097,7 +2962,6 @@ L_08AFD010: goto L_08AFD018; L_08AFD018: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFD028; } @@ -3105,7 +2969,6 @@ L_08AFD018: } L_08AFD020: aot_gpr_31 = (0x08AFD028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0189_entry, 189u, 567u, 0x08AFBF48u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD028u) goto L_08AFD028; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD028: @@ -3126,18 +2989,26 @@ L_08AFD028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD054: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(112), aot_run_words); } aot_gpr_31 = (0x08AFD0A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 538u, 0x08AAE9C4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD0A0u) goto L_08AFD0A0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD0A0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFD1D4; } @@ -3145,12 +3016,10 @@ L_08AFD0A0: } L_08AFD0A8: aot_gpr_31 = (0x08AFD0B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 542u, 0x08AAE9E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD0B0u) goto L_08AFD0B0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD0B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFD1D4; } @@ -3161,9 +3030,7 @@ L_08AFD0B8: ctx.fpr[22] = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(11240))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD1D4; } @@ -3212,9 +3079,7 @@ L_08AFD138: aot_gpr_4 = (16352u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD1C4; } @@ -3255,7 +3120,6 @@ L_08AFD158: } L_08AFD1C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFD720; } @@ -3263,7 +3127,6 @@ L_08AFD1C4: } L_08AFD1CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFD720; } @@ -3271,7 +3134,6 @@ L_08AFD1CC: } L_08AFD1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFD720; } @@ -3309,9 +3171,7 @@ L_08AFD210: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[20]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD234; } @@ -3327,9 +3187,7 @@ L_08AFD22C: } L_08AFD234: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD258; } @@ -3351,9 +3209,7 @@ L_08AFD258: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD28C; } @@ -3503,7 +3359,6 @@ L_08AFD354: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16448u << 16u); if (branch_taken) { @@ -3514,9 +3369,7 @@ L_08AFD354: L_08AFD36C: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD430; } @@ -3526,9 +3379,7 @@ L_08AFD380: aot_gpr_4 = (16320u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFD3A0; } @@ -3546,7 +3397,6 @@ L_08AFD3A0: aot_gpr_4 = (16416u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), std::bit_cast(ctx.fpr[24])); goto L_08AFD3BC; @@ -3605,7 +3455,6 @@ L_08AFD410: goto L_08AFD430; L_08AFD430: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFD614; } @@ -3613,14 +3462,12 @@ L_08AFD430: } L_08AFD438: aot_gpr_31 = (0x08AFD440u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD440u) goto L_08AFD440; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD440: aot_gpr_4 = (aot_gpr_2 & 65535u); aot_gpr_4 = (aot_gpr_4 & 3840u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFD614; } @@ -3666,7 +3513,6 @@ L_08AFD450: } L_08AFD4D0: aot_gpr_31 = (0x08AFD4D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD4D8u) goto L_08AFD4D8; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD4D8: @@ -3787,7 +3633,6 @@ L_08AFD614: L_08AFD624: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(8452))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFD718; } @@ -3853,7 +3698,6 @@ L_08AFD694: AOT_REGCACHE_SYNC_OUT(); return; L_08AFD6AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFD6D0; } @@ -3869,7 +3713,6 @@ L_08AFD6B4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFD6C8: aot_gpr_31 = (0x08AFD6D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFD6D0u) goto L_08AFD6D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFD6D0: @@ -3937,35 +3780,85 @@ L_08AFD720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD768: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD770: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD778: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(4))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD780: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(6))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD788: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(0), static_cast(aot_gpr_5)); @@ -4005,7 +3898,6 @@ L_08AFD7C8: aot_gpr_2 = (aot_gpr_2 + static_cast(-448)); aot_gpr_6 = (aot_gpr_2 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AFD80C; } @@ -4014,7 +3906,6 @@ L_08AFD7C8: L_08AFD800: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFD840; } @@ -4023,7 +3914,6 @@ L_08AFD800: L_08AFD80C: aot_gpr_2 = (ctx.gpr[16] | 0u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08AFD830; } @@ -4032,7 +3922,6 @@ L_08AFD80C: L_08AFD818: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFD838; } @@ -4041,7 +3930,6 @@ L_08AFD818: L_08AFD824: aot_gpr_2 = (aot_gpr_2 + static_cast(14)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AFD818; } @@ -4057,7 +3945,6 @@ L_08AFD830: } L_08AFD838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFD840; } @@ -4075,7 +3962,17 @@ L_08AFD840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD854: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4095,7 +3992,6 @@ L_08AFD87C: L_08AFD884: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFD8B8; } @@ -4106,7 +4002,6 @@ L_08AFD890: aot_gpr_2 = (aot_gpr_2 + ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08AFD8B0; } @@ -4123,7 +4018,6 @@ L_08AFD8A4: } L_08AFD8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFD8BC; } @@ -4146,7 +4040,17 @@ L_08AFD8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD8D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4157,7 +4061,6 @@ L_08AFD8D8: goto L_08AFD8F0; L_08AFD8F0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFD934; } @@ -4166,7 +4069,6 @@ L_08AFD8F0: L_08AFD8F8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFD934; } @@ -4179,7 +4081,6 @@ L_08AFD904: goto L_08AFD788; L_08AFD910: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFD92C; } @@ -4216,14 +4117,34 @@ L_08AFD934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD948: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(16), static_cast(aot_gpr_5)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD950: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (static_cast(aot_gpr_4) < 97 ? 1u : 0u); @@ -4237,7 +4158,6 @@ L_08AFD950: L_08AFD960: aot_gpr_6 = (static_cast(aot_gpr_4) < 123 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08AFD988; } @@ -4264,7 +4184,6 @@ L_08AFD978: } L_08AFD980: { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08AFD990; } @@ -4276,11 +4195,20 @@ L_08AFD988: goto L_08AFD990; L_08AFD990: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFD998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4291,7 +4219,6 @@ L_08AFD998: goto L_08AFD9B0; L_08AFD9B0: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFD9E8; } @@ -4300,7 +4227,6 @@ L_08AFD9B0: L_08AFD9B8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFD9E8; } @@ -4313,7 +4239,6 @@ L_08AFD9C4: goto L_08AFD788; L_08AFD9D0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFD9E0; } @@ -4350,7 +4275,17 @@ L_08AFD9EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDA00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -4370,7 +4305,6 @@ L_08AFDA2C: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(ctx.gpr[16]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.hi); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AFDA48; } @@ -4396,7 +4330,17 @@ L_08AFDA50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDA60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4413,7 +4357,17 @@ L_08AFDA74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDA88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4426,7 +4380,6 @@ L_08AFDA88: } L_08AFDA98: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AFDAA8; } @@ -4434,7 +4387,6 @@ L_08AFDA98: } L_08AFDAA0: aot_gpr_31 = (0x08AFDAA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFDAA8u) goto L_08AFDAA8; AOT_REGCACHE_SYNC_OUT(); return; L_08AFDAA8: @@ -4444,7 +4396,17 @@ L_08AFDAA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDAB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[16]); @@ -4537,7 +4499,17 @@ L_08AFDB9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDBC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4558,7 +4530,6 @@ L_08AFDBDC: AOT_REGCACHE_SYNC_OUT(); return; L_08AFDBE4: aot_gpr_31 = (0x08AFDBECu); - // nop ctx.pc = 0x08B731A4u; AOT_REGCACHE_SYNC_OUT(); return; L_08AFDBEC: @@ -4596,7 +4567,17 @@ L_08AFDC1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDC2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4634,7 +4615,6 @@ L_08AFDC70: L_08AFDC78: aot_gpr_4 = (ctx.gpr[18] | aot_gpr_2); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFDC9C; } @@ -4642,7 +4622,6 @@ L_08AFDC78: } L_08AFDC84: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AFDC9C; } @@ -4666,7 +4645,6 @@ L_08AFDC9C: goto L_08AFDCA0; L_08AFDCA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFDCCC; } @@ -4674,7 +4652,6 @@ L_08AFDCA0: } L_08AFDCA8: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08AFDCC8; } @@ -4682,7 +4659,6 @@ L_08AFDCA8: } L_08AFDCB0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08AFDCC8; } @@ -4718,7 +4694,17 @@ L_08AFDCCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDCE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-2080)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(2068), ctx.gpr[21]); @@ -4749,7 +4735,6 @@ L_08AFDD34: aot_gpr_4 = (aot_gpr_4 & aot_gpr_6); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFDD5C; } @@ -4773,7 +4758,6 @@ L_08AFDD5C: L_08AFDD6C: aot_gpr_4 = (static_cast(aot_gpr_2) < 2048 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFDD80; } @@ -4796,7 +4780,6 @@ L_08AFDD80: AOT_REGCACHE_SYNC_OUT(); return; L_08AFDD90: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFDDA0; } @@ -4818,7 +4801,6 @@ L_08AFDDA0: AOT_REGCACHE_SYNC_OUT(); return; L_08AFDDAC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFDDBC; } @@ -4848,7 +4830,6 @@ L_08AFDDD0: aot_gpr_4 = (aot_gpr_4 & aot_gpr_6); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFDDF8; } @@ -4881,7 +4862,17 @@ L_08AFDDFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDE20: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4906,7 +4897,6 @@ L_08AFDE58: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_gpr_4 = (aot_gpr_4 & 16384u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFDE84; } @@ -4939,7 +4929,17 @@ L_08AFDE88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFDEA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4965,7 +4965,6 @@ L_08AFDEA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFDF04: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFDF14; } @@ -4973,7 +4972,6 @@ L_08AFDF04: } L_08AFDF0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE444; } @@ -4988,7 +4986,6 @@ L_08AFDF14: AOT_REGCACHE_SYNC_OUT(); return; L_08AFDF24: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFDF34; } @@ -4996,7 +4993,6 @@ L_08AFDF24: } L_08AFDF2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE444; } @@ -5013,7 +5009,6 @@ L_08AFDF34: goto L_08AFDCE8; L_08AFDF50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFDF60; } @@ -5021,7 +5016,6 @@ L_08AFDF50: } L_08AFDF58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE444; } @@ -5055,7 +5049,6 @@ L_08AFDF80: L_08AFDF88: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFDFB4; } @@ -5100,7 +5093,6 @@ L_08AFDFBC: } L_08AFDFC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE414; } @@ -5218,7 +5210,6 @@ L_08AFE08C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE0A4: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFE0B4; } @@ -5226,7 +5217,6 @@ L_08AFE0A4: } L_08AFE0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE408; } @@ -5235,7 +5225,6 @@ L_08AFE0AC: L_08AFE0B4: ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08AFE100; } @@ -5245,7 +5234,6 @@ L_08AFE0C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(328))); aot_gpr_5 = (static_cast(aot_gpr_4) < 8193 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFE0D8; } @@ -5253,7 +5241,6 @@ L_08AFE0C0: } L_08AFE0D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE3F0; } @@ -5270,7 +5257,6 @@ L_08AFE0D8: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE0F0: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFE100; } @@ -5296,7 +5282,6 @@ L_08AFE100: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE11C: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFE12C; } @@ -5304,7 +5289,6 @@ L_08AFE11C: } L_08AFE124: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE3E4; } @@ -5333,7 +5317,6 @@ L_08AFE140: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE15C: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFE190; } @@ -5341,7 +5324,6 @@ L_08AFE15C: } L_08AFE164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE3DC; } @@ -5357,7 +5339,6 @@ L_08AFE16C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE180: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08AFE190; } @@ -5365,7 +5346,6 @@ L_08AFE180: } L_08AFE188: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE3DC; } @@ -5373,7 +5353,6 @@ L_08AFE188: } L_08AFE190: aot_gpr_31 = (0x08AFE198u); - // nop ctx.pc = 0x08B7347Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AFE198: @@ -5410,7 +5389,6 @@ L_08AFE1EC: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(12), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE220; } @@ -5457,7 +5435,6 @@ L_08AFE238: } L_08AFE260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE38C; } @@ -5465,7 +5442,6 @@ L_08AFE260: } L_08AFE268: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE280; } @@ -5497,7 +5473,6 @@ L_08AFE294: L_08AFE29C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE2B8; } @@ -5546,7 +5521,6 @@ L_08AFE2FC: L_08AFE304: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(336))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AFE318; } @@ -5563,7 +5537,6 @@ L_08AFE310: L_08AFE318: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AFE344; } @@ -5576,7 +5549,6 @@ L_08AFE324: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE32C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFE33C; } @@ -5601,7 +5573,6 @@ L_08AFE33C: L_08AFE344: aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFE358; } @@ -5618,7 +5589,6 @@ L_08AFE350: L_08AFE358: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE370; } @@ -5647,7 +5617,6 @@ L_08AFE388: goto L_08AFE38C; L_08AFE38C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE3A0; } @@ -5674,7 +5643,6 @@ L_08AFE3AC: L_08AFE3B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE3CC; } @@ -5710,7 +5678,6 @@ L_08AFE3EC: goto L_08AFE3F0; L_08AFE3F0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08AFE408; } @@ -5746,7 +5713,6 @@ L_08AFE420: L_08AFE42C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE444; } @@ -5787,7 +5753,17 @@ L_08AFE454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE484: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[10] = (0u + static_cast(-1)); @@ -5813,7 +5789,6 @@ L_08AFE484: goto L_08AFE4EC; L_08AFE4EC: aot_gpr_31 = (0x08AFE4F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFE4F4u) goto L_08AFE4F4; AOT_REGCACHE_SYNC_OUT(); return; L_08AFE4F4: @@ -5824,7 +5799,6 @@ L_08AFE4F4: L_08AFE4FC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE520; } @@ -5848,7 +5822,6 @@ L_08AFE520: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(20104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE550; } @@ -5862,7 +5835,6 @@ L_08AFE530: L_08AFE53C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFE580; } @@ -5870,7 +5842,6 @@ L_08AFE53C: } L_08AFE548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE7BC; } @@ -5880,7 +5851,6 @@ L_08AFE550: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(20108))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFE580; } @@ -5888,7 +5858,6 @@ L_08AFE550: } L_08AFE560: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AFE574; } @@ -5915,7 +5884,6 @@ L_08AFE580: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE588: { const bool branch_taken = aot_gpr_2 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AFE5AC; } @@ -5929,7 +5897,6 @@ L_08AFE590: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE59C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08AFE5AC; } @@ -5950,7 +5917,6 @@ L_08AFE5AC: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE5B4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AFE5C4; } @@ -5967,7 +5933,6 @@ L_08AFE5BC: L_08AFE5C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AFE678; } @@ -5980,7 +5945,6 @@ L_08AFE5D0: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE5D8: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08AFE678; } @@ -5996,7 +5960,6 @@ L_08AFE5E0: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE5F4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFE658; } @@ -6019,7 +5982,6 @@ L_08AFE608: L_08AFE61C: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFE630; } @@ -6027,7 +5989,6 @@ L_08AFE61C: } L_08AFE628: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE874; } @@ -6042,7 +6003,6 @@ L_08AFE630: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE640: { const bool branch_taken = ctx.gpr[23] != 0u; - // nop if (branch_taken) { goto L_08AFE650; } @@ -6068,7 +6028,6 @@ L_08AFE658: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE660: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFE690; } @@ -6081,7 +6040,6 @@ L_08AFE668: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE690; } @@ -6094,7 +6052,6 @@ L_08AFE678: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE680: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFE690; } @@ -6112,7 +6069,6 @@ L_08AFE690: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE698: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08AFE77C; } @@ -6129,7 +6085,6 @@ L_08AFE6A0: L_08AFE6B4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFE744; } @@ -6155,7 +6110,6 @@ L_08AFE6CC: L_08AFE6EC: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFE700; } @@ -6163,7 +6117,6 @@ L_08AFE6EC: } L_08AFE6F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE874; } @@ -6179,7 +6132,6 @@ L_08AFE700: L_08AFE710: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08AFE794; } @@ -6204,7 +6156,6 @@ L_08AFE734: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE73C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE794; } @@ -6214,7 +6165,6 @@ L_08AFE744: aot_gpr_5 = (32866u << 16u); aot_gpr_5 = (aot_gpr_5 + static_cast(-32767)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFE75C; } @@ -6235,7 +6185,6 @@ L_08AFE75C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE764: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFE794; } @@ -6248,7 +6197,6 @@ L_08AFE76C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE794; } @@ -6261,7 +6209,6 @@ L_08AFE77C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE784: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFE794; } @@ -6279,7 +6226,6 @@ L_08AFE794: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE79C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFE7AC; } @@ -6292,12 +6238,10 @@ L_08AFE7A4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE7AC: aot_gpr_31 = (0x08AFE7B4u); - // nop ctx.pc = 0x08B7348Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08AFE7B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE4EC; } @@ -6316,7 +6260,6 @@ L_08AFE7C4: L_08AFE7CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE7E0; } @@ -6337,7 +6280,6 @@ L_08AFE7E4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE7EC: { const bool branch_taken = static_cast(aot_gpr_2) <= 0; - // nop if (branch_taken) { goto L_08AFE864; } @@ -6356,7 +6298,6 @@ L_08AFE7F4: L_08AFE810: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE824; } @@ -6373,7 +6314,6 @@ L_08AFE81C: L_08AFE824: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08AFE850; } @@ -6404,7 +6344,6 @@ L_08AFE850: AOT_REGCACHE_SYNC_OUT(); return; L_08AFE85C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFE89C; } @@ -6431,7 +6370,6 @@ L_08AFE874: L_08AFE87C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFE890; } @@ -6468,7 +6406,17 @@ L_08AFE89C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE8D0: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6494,11 +6442,20 @@ L_08AFE8D0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE8E8: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6542,11 +6499,20 @@ L_08AFE8E8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE908: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6590,11 +6556,20 @@ L_08AFE908: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE928: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6648,11 +6623,20 @@ L_08AFE928: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE950: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6676,11 +6660,20 @@ L_08AFE950: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE96C: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6697,11 +6690,20 @@ L_08AFE96C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE980: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6727,11 +6729,20 @@ L_08AFE980: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE998: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6757,11 +6768,20 @@ L_08AFE998: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE9B0: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -6780,11 +6800,20 @@ L_08AFE9B0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE9CC: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<28u>(aot_gpr_6); @@ -6803,18 +6832,25 @@ L_08AFE9CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFE9E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFEA08; } @@ -6830,18 +6866,25 @@ L_08AFEA00: } L_08AFEA08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEA10: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFEA30; } @@ -6857,11 +6900,20 @@ L_08AFEA28: } L_08AFEA30: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEA38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6870,7 +6922,6 @@ L_08AFEA38: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFEA80; } @@ -6899,7 +6950,6 @@ L_08AFEA80: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFEAFC; } @@ -6912,7 +6962,6 @@ L_08AFEA94: goto L_08AFEF7C; L_08AFEAA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFEAE8; } @@ -6951,7 +7000,6 @@ L_08AFEAE8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFEA94; } @@ -6965,7 +7013,6 @@ L_08AFEAFC: AOT_REGCACHE_SYNC_OUT(); return; L_08AFEB08: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08AFEB2C; } @@ -6995,14 +7042,34 @@ L_08AFEB2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEB40: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEB48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7012,7 +7079,6 @@ L_08AFEB48: goto L_08AFEBA4; L_08AFEB5C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFEB7C; } @@ -7046,7 +7112,6 @@ L_08AFEB7C: } L_08AFEB84: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AFEB90; } @@ -7066,12 +7131,21 @@ L_08AFEB94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEBA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFEBBC; } @@ -7104,7 +7178,17 @@ L_08AFEBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEBE4: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(7), static_cast(aot_gpr_5)); jump_target = aot_gpr_31; @@ -7112,7 +7196,17 @@ L_08AFEBE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEBF0: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -7124,11 +7218,20 @@ L_08AFEBF0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEC14: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -7140,11 +7243,20 @@ L_08AFEC14: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEC38: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -7157,11 +7269,20 @@ L_08AFEC38: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<0u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEC60: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -7175,11 +7296,20 @@ L_08AFEC60: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<64u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEC8C: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -7191,23 +7321,40 @@ L_08AFEC8C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFECB8: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFECC4: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AFECD8; @@ -7215,15 +7362,23 @@ L_08AFECC4: goto L_08AFECD8; L_08AFECD8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFECE0: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08AFECF4; @@ -7231,11 +7386,20 @@ L_08AFECE0: goto L_08AFECF4; L_08AFECF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFECFC: { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_13), std::bit_cast(aot_fpr_14)}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -7244,7 +7408,17 @@ L_08AFECFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED10: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7264,7 +7438,17 @@ L_08AFED10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED20: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7287,11 +7471,20 @@ L_08AFED20: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED48: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7307,11 +7500,20 @@ L_08AFED48: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED64: { const std::uint32_t vfpu_address = aot_gpr_5 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7331,7 +7533,17 @@ L_08AFED64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED74: aot_gpr_5 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<1u>(aot_gpr_5); @@ -7354,42 +7566,102 @@ L_08AFED74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED90: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFED98: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(16)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEDA0: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(32)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEDA8: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEDB0: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(48)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEDB8: aot_gpr_4 = (16968u << 16u); aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); @@ -7401,9 +7673,7 @@ L_08AFEDB8: aot_fpr_12 = std::bit_cast(aot_gpr_5); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFEE00; } @@ -7431,32 +7701,71 @@ L_08AFEE00: goto L_08AFEE1C; L_08AFEE1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEE24: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEE2C: jump_target = aot_gpr_31; aot_gpr_2 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEE34: jump_target = aot_gpr_31; aot_gpr_2 = (aot_gpr_4 + static_cast(320)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEE3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -7473,7 +7782,17 @@ L_08AFEE54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEE60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { std::uint32_t aot_run_words[3]{}; @@ -7496,7 +7815,17 @@ L_08AFEE84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEE90: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { std::uint32_t aot_run_words[3]{}; @@ -7611,7 +7940,17 @@ L_08AFEE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEF10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(636))); aot_gpr_2 = (aot_gpr_4 & aot_gpr_5); @@ -7620,7 +7959,17 @@ L_08AFEF10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEF20: aot_fpr_12 = std::bit_cast(0u); { const std::uint32_t aot_run_words[7]{0u, std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12), std::bit_cast(aot_fpr_12)}; @@ -7630,7 +7979,17 @@ L_08AFEF20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEF48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7643,7 +8002,6 @@ L_08AFEF48: } L_08AFEF58: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AFEF68; } @@ -7651,7 +8009,6 @@ L_08AFEF58: } L_08AFEF60: aot_gpr_31 = (0x08AFEF68u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFEF68u) goto L_08AFEF68; AOT_REGCACHE_SYNC_OUT(); return; L_08AFEF68: @@ -7661,14 +8018,33 @@ L_08AFEF68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEF74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEF7C: aot_gpr_4 = (aot_gpr_4 + static_cast(904)); aot_gpr_5 = (aot_gpr_5 << 2u); @@ -7678,7 +8054,17 @@ L_08AFEF7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEF90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7710,7 +8096,6 @@ L_08AFEFBC: L_08AFEFC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(904))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFEFD8; } @@ -7733,7 +8118,17 @@ L_08AFEFD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFEFEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7765,7 +8160,6 @@ L_08AFF020: } L_08AFF028: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AFF06C; } @@ -7779,7 +8173,6 @@ L_08AFF030: goto L_08AFF038; L_08AFF038: aot_gpr_31 = (0x08AFF040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF040u) goto L_08AFF040; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF040: @@ -7801,7 +8194,6 @@ L_08AFF058: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF064: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -7815,7 +8207,6 @@ L_08AFF06C: goto L_08AFF074; L_08AFF074: aot_gpr_31 = (0x08AFF07Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF07Cu) goto L_08AFF07C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF07C: @@ -7837,7 +8228,6 @@ L_08AFF094: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF0A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -7856,7 +8246,6 @@ L_08AFF0A8: L_08AFF0B8: ctx.gpr[7] = (0u | 11u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AFF1AC; } @@ -7864,7 +8253,6 @@ L_08AFF0B8: } L_08AFF0C4: { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AFF124; } @@ -7878,7 +8266,6 @@ L_08AFF0CC: goto L_08AFF0D4; L_08AFF0D4: aot_gpr_31 = (0x08AFF0DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF0DCu) goto L_08AFF0DC; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF0DC: @@ -7912,7 +8299,6 @@ L_08AFF110: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF11C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -7922,7 +8308,6 @@ L_08AFF124: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF170; } @@ -7936,7 +8321,6 @@ L_08AFF134: goto L_08AFF13C; L_08AFF13C: aot_gpr_31 = (0x08AFF144u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF144u) goto L_08AFF144; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF144: @@ -7958,7 +8342,6 @@ L_08AFF15C: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -7972,7 +8355,6 @@ L_08AFF170: goto L_08AFF178; L_08AFF178: aot_gpr_31 = (0x08AFF180u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF180u) goto L_08AFF180; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF180: @@ -7994,7 +8376,6 @@ L_08AFF198: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF1A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -8002,7 +8383,6 @@ L_08AFF1A4: } L_08AFF1AC: { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08AFF20C; } @@ -8016,7 +8396,6 @@ L_08AFF1B4: goto L_08AFF1BC; L_08AFF1BC: aot_gpr_31 = (0x08AFF1C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF1C4u) goto L_08AFF1C4; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF1C4: @@ -8050,7 +8429,6 @@ L_08AFF1F8: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -8060,7 +8438,6 @@ L_08AFF20C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF258; } @@ -8074,7 +8451,6 @@ L_08AFF21C: goto L_08AFF224; L_08AFF224: aot_gpr_31 = (0x08AFF22Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF22Cu) goto L_08AFF22C; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF22C: @@ -8096,7 +8472,6 @@ L_08AFF244: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF28C; } @@ -8110,7 +8485,6 @@ L_08AFF258: goto L_08AFF260; L_08AFF260: aot_gpr_31 = (0x08AFF268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF268u) goto L_08AFF268; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF268: @@ -8157,7 +8531,17 @@ L_08AFF2A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF2C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8172,7 +8556,17 @@ L_08AFF2D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF2E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -8188,7 +8582,17 @@ L_08AFF2F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF300: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8209,7 +8613,6 @@ L_08AFF320: aot_mem.aot_direct_store16(ctx.gpr[16] + static_cast(558), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(96))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08AFF350; } @@ -8234,7 +8637,6 @@ L_08AFF350: goto L_08AFF35C; L_08AFF35C: aot_gpr_31 = (0x08AFF364u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF364u) goto L_08AFF364; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF364: @@ -8279,7 +8681,6 @@ L_08AFF39C: } L_08AFF3AC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08AFF3BC; } @@ -8293,7 +8694,6 @@ L_08AFF3B4: L_08AFF3BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(368))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF3D0; } @@ -8301,13 +8701,11 @@ L_08AFF3BC: } L_08AFF3C8: aot_gpr_31 = (0x08AFF3D0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF3D0u) goto L_08AFF3D0; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF3D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(372))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF3E4; } @@ -8315,13 +8713,11 @@ L_08AFF3D0: } L_08AFF3DC: aot_gpr_31 = (0x08AFF3E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF3E4u) goto L_08AFF3E4; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF3E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(596))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF3F8; } @@ -8329,7 +8725,6 @@ L_08AFF3E4: } L_08AFF3F0: aot_gpr_31 = (0x08AFF3F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 649u, 0x089CF934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08AFF3F8u) goto L_08AFF3F8; AOT_REGCACHE_SYNC_OUT(); return; L_08AFF3F8: @@ -8342,7 +8737,6 @@ L_08AFF404: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF430; } @@ -8361,7 +8755,6 @@ L_08AFF430: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF45C; } @@ -8408,7 +8801,6 @@ L_08AFF480: L_08AFF488: aot_gpr_4 = (ctx.gpr[17] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF49C; } @@ -8431,7 +8823,17 @@ L_08AFF49C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF4B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8466,7 +8868,17 @@ L_08AFF4F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF508: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(562))); @@ -8482,7 +8894,6 @@ L_08AFF508: L_08AFF530: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(564))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFF550; } @@ -8497,7 +8908,6 @@ L_08AFF53C: goto L_08AFF548; L_08AFF548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF58C; } @@ -8542,7 +8952,6 @@ L_08AFF57C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFF5A8; } @@ -8561,7 +8970,6 @@ L_08AFF58C: } L_08AFF5A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF68C; } @@ -8627,7 +9035,6 @@ L_08AFF600: aot_gpr_4 = (aot_gpr_2 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AFF62C; } @@ -8648,7 +9055,6 @@ L_08AFF61C: } L_08AFF624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF664; } @@ -8684,7 +9090,6 @@ L_08AFF654: aot_gpr_4 = (aot_gpr_2 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AFF684; } @@ -8696,7 +9101,6 @@ L_08AFF664: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFF5B8; } @@ -8704,7 +9108,6 @@ L_08AFF664: } L_08AFF67C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF68C; } @@ -8722,7 +9125,6 @@ L_08AFF68C: ctx.gpr[16] = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(612))); aot_gpr_4 = (ctx.gpr[16] < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF6D4; } @@ -8754,7 +9156,6 @@ L_08AFF6AC: } L_08AFF6B4: { const bool branch_taken = ctx.gpr[16] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08AFF6CC; } @@ -8802,56 +9203,132 @@ L_08AFF6D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF6F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF700: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF708: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF710: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF718: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF720: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF728: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF730: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(128), std::bit_cast(ctx.fpr[20])); @@ -8895,7 +9372,6 @@ L_08AFF788: } L_08AFF790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF8EC; } @@ -8944,7 +9420,6 @@ L_08AFF7CC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08AFF838; } @@ -8952,7 +9427,6 @@ L_08AFF7CC: } L_08AFF7E0: { const bool branch_taken = ctx.gpr[16] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AFF7FC; } @@ -8966,7 +9440,6 @@ L_08AFF7E8: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF7F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -8975,7 +9448,6 @@ L_08AFF7F4: L_08AFF7FC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AFF81C; } @@ -8989,7 +9461,6 @@ L_08AFF808: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -8997,7 +9468,6 @@ L_08AFF814: } L_08AFF81C: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -9011,7 +9481,6 @@ L_08AFF824: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF830: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -9045,7 +9514,6 @@ L_08AFF838: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF85C: { const bool branch_taken = ctx.gpr[16] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08AFF878; } @@ -9059,7 +9527,6 @@ L_08AFF864: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF870: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -9068,7 +9535,6 @@ L_08AFF870: L_08AFF878: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[16] != aot_gpr_4; - // nop if (branch_taken) { goto L_08AFF898; } @@ -9082,7 +9548,6 @@ L_08AFF884: AOT_REGCACHE_SYNC_OUT(); return; L_08AFF890: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -9090,7 +9555,6 @@ L_08AFF890: } L_08AFF898: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08AFF8AC; } @@ -9122,7 +9586,6 @@ L_08AFF8C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF8EC; } @@ -9131,7 +9594,6 @@ L_08AFF8C8: L_08AFF8D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFF8EC; } @@ -9159,63 +9621,150 @@ L_08AFF8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF914: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF91C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF924: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF92C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF934: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF93C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF944: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF94C: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFF954: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -9309,7 +9858,6 @@ L_08AFF954: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFA1C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFFA38; } @@ -9318,7 +9866,6 @@ L_08AFFA1C: L_08AFFA24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[16]; - // nop if (branch_taken) { goto L_08AFFA38; } @@ -9347,7 +9894,17 @@ L_08AFFA3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFA50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9370,7 +9927,6 @@ L_08AFFA68: L_08AFFA78: aot_gpr_4 = (aot_gpr_4 + static_cast(-8)); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08AFFAAC; } @@ -9387,7 +9943,6 @@ L_08AFFA84: L_08AFFA8C: aot_gpr_5 = (static_cast(aot_gpr_4) < 255 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08AFFAAC; } @@ -9397,7 +9952,6 @@ L_08AFFA98: aot_gpr_4 = (aot_gpr_4 + static_cast(16)); aot_gpr_5 = (static_cast(aot_gpr_4) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFFAAC; } @@ -9420,7 +9974,17 @@ L_08AFFAB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFAC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -9480,7 +10044,6 @@ L_08AFFB34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 63u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFFB60; } @@ -9503,7 +10066,6 @@ L_08AFFB5C: goto L_08AFFB60; L_08AFFB60: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AFFBF0; } @@ -9513,7 +10075,6 @@ L_08AFFB68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08AFFBD4; } @@ -9526,7 +10087,6 @@ L_08AFFB78: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFB80: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFFBA8; } @@ -9545,7 +10105,6 @@ L_08AFFB88: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFBA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFFBC4; } @@ -9570,7 +10129,6 @@ L_08AFFBC4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFBCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFFBF0; } @@ -9608,7 +10166,6 @@ L_08AFFC0C: goto L_08AFEF7C; L_08AFFC18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFFD00; } @@ -9650,7 +10207,6 @@ L_08AFFC4C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFFC70; } @@ -9682,7 +10238,6 @@ L_08AFFC8C: L_08AFFC98: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08AFFD00; } @@ -9695,7 +10250,6 @@ L_08AFFCA4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFCAC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFFCD4; } @@ -9714,7 +10268,6 @@ L_08AFFCB4: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFCCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFFCF8; } @@ -9745,7 +10298,6 @@ L_08AFFD00: ctx.gpr[19] = (ctx.gpr[19] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFFC0C; } @@ -9767,7 +10319,17 @@ L_08AFFD14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFD38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9778,7 +10340,6 @@ L_08AFFD38: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08AFFD98; } @@ -9791,7 +10352,6 @@ L_08AFFD60: goto L_08AFEF7C; L_08AFFD6C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08AFFD90; } @@ -9802,7 +10362,6 @@ L_08AFFD74: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08AFFD60; } @@ -9810,7 +10369,6 @@ L_08AFFD74: } L_08AFFD88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08AFFD98; } @@ -9839,7 +10397,17 @@ L_08AFFD9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFDB0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -9859,11 +10427,20 @@ L_08AFFDC4: goto L_08AFFDD4; L_08AFFDD4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFDDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -9903,7 +10480,17 @@ L_08AFFE1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFE3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -9932,7 +10519,6 @@ L_08AFFE64: AOT_REGCACHE_SYNC_OUT(); return; L_08AFFE80: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08AFFEA0; } @@ -9941,9 +10527,7 @@ L_08AFFE80: L_08AFFE88: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08AFFEA0; } @@ -9966,21 +10550,51 @@ L_08AFFEA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFEBC: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFEC4: jump_target = aot_gpr_31; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFECC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); @@ -9995,14 +10609,33 @@ L_08AFFECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFEF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08AFFEFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -10024,7 +10657,6 @@ L_08AFFF18: aot_gpr_5 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -10051,7 +10683,6 @@ L_08AFFF4C: L_08AFFF60: ctx.gpr[7] = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08AFFF7C; } @@ -10075,7 +10706,6 @@ L_08AFFF7C: goto L_08AFFF8C; L_08AFFF8C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08AFFFDC; } @@ -10086,7 +10716,6 @@ L_08AFFF94: ctx.gpr[7] = (0u | 4u); aot_gpr_5 = (aot_gpr_5 & 7u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08AFFFDC; } @@ -10097,7 +10726,6 @@ L_08AFFFA8: ctx.gpr[7] = (aot_gpr_4 & aot_gpr_5); aot_gpr_5 = (aot_gpr_6 & aot_gpr_5); { const bool branch_taken = ctx.gpr[7] == aot_gpr_5; - // nop if (branch_taken) { goto L_08AFFFDC; } @@ -10118,7 +10746,6 @@ L_08AFFFD8: goto L_08AFFFDC; L_08AFFFDC: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 2u, 0x08B00004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0191.cpp b/profiles/vcs/generated/generated_unit_0191.cpp index b5de1aa..7378fcd 100644 --- a/profiles/vcs/generated/generated_unit_0191.cpp +++ b/profiles/vcs/generated/generated_unit_0191.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0191[4092] = { - 1, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 16, 0, 0, 17, 0, 18, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 21, 0, 22, 23, - 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 27, 0, 0, 28, 0, 29, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 34, 0, 35, 0, 36, 0, 0, 0, 37, 0, 38, 39, 0, 0, 0, 0, - 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, 43, 0, 44, 0, 45, 0, 46, 0, 0, 47, 0, 0, 0, 48, - 0, 49, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 52, 0, 0, 53, 0, 54, 0, 55, 0, 56, 0, 0, 57, 0, 0, 58, 0, 59, 0, 60, - 0, 61, 0, 62, 0, 63, 0, 64, 65, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 70, 0, 0, - 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 75, 0, 76, 0, 77, 0, 0, 0, 0, 78, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, 0, 0, 0, 81, 0, 82, 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 0, - 0, 86, 0, 0, 0, 87, 0, 0, 88, 0, 0, 89, 0, 90, 91, 0, 92, 0, 93, 0, 0, 0, 94, 0, 95, 0, 96, 0, 0, 0, 97, 0, - 98, 0, 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, - 0, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 108, 0, 109, 0, 110, 0, 0, 111, 0, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, - 0, 0, 115, 0, 0, 116, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 121, 0, 122, 0, 0, 0, 123, 0, 124, 0, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 130, 0, 0, 131, 0, 0, 132, 133, - 0, 0, 134, 0, 135, 0, 0, 0, 136, 0, 0, 137, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 142, 0, 0, - 0, 143, 0, 0, 0, 144, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 0, 148, 0, 149, 0, 150, 0, 0, 0, 151, 0, 0, 152, 0, 0, 153, - 0, 154, 0, 155, 0, 0, 156, 0, 157, 0, 0, 158, 0, 0, 0, 159, 0, 160, 0, 0, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 0, - 166, 0, 0, 0, 0, 0, 167, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, - 0, 171, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 175, 0, 176, 177, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 179, 0, 0, 180, 0, 181, 0, 0, 182, 0, 0, 183, 0, 0, 0, 0, 184, 0, 185, 186, 0, 0, 0, 0, 0, 187, 0, 188, 0, 0, 189, - 0, 190, 0, 191, 192, 0, 193, 0, 0, 194, 0, 0, 195, 0, 196, 197, 0, 198, 0, 0, 0, 199, 0, 0, 200, 0, 201, 202, 0, 0, 203, 0, - 0, 0, 204, 0, 0, 205, 0, 206, 207, 0, 0, 208, 0, 209, 0, 0, 210, 0, 211, 0, 0, 0, 212, 0, 213, 0, 214, 0, 0, 0, 0, 0, - 0, 215, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, - 0, 218, 0, 0, 0, 219, 0, 220, 0, 221, 0, 0, 0, 222, 0, 0, 0, 223, 0, 224, 0, 225, 0, 0, 0, 226, 0, 227, 228, 0, 229, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 231, 232, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, - 0, 235, 0, 236, 237, 0, 238, 0, 0, 0, 239, 0, 0, 240, 0, 0, 241, 0, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 0, 247, 0, - 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 258, 0, 259, 0, 0, 0, 260, 0, 261, 0, 262, 0, 0, - 263, 264, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 267, 0, 268, 0, 269, 0, 0, 0, 0, 270, 0, 271, 0, 272, - 0, 273, 0, 274, 0, 275, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 0, - 0, 0, 0, 285, 0, 286, 0, 287, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 292, 0, 293, 0, 294, - 295, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 0, 305, 0, 0, - 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 0, 311, 0, 312, 0, 0, 313, 0, 0, 0, 314, 0, 0, 315, 0, 316, 0, 317, 0, 0, 318, 0, - 319, 320, 0, 0, 0, 0, 321, 0, 0, 322, 0, 323, 0, 324, 0, 325, 326, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, - 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, - 0, 0, 0, 0, 0, 0, 334, 0, 335, 0, 336, 0, 337, 338, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 0, 0, 0, 0, 0, 0, 0, 341, 0, 342, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 345, 0, 346, 0, 0, 0, 0, 347, 0, 0, - 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 353, 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 359, - 360, 0, 0, 0, 361, 0, 0, 0, 0, 362, 0, 0, 363, 0, 0, 0, 364, 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 368, 0, - 369, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 374, 375, 0, 0, 0, 376, 0, 0, 0, - 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 383, 384, 0, 0, 0, 0, 385, 0, 0, 386, - 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, - 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 396, 397, 0, 398, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 399, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 403, 0, 404, 0, 405, 0, - 0, 0, 0, 406, 0, 407, 408, 0, 0, 0, 409, 0, 0, 0, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 0, 0, 415, 0, 416, 0, 417, 418, - 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 423, 424, 0, 0, 425, 426, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, - 0, 0, 429, 0, 0, 430, 0, 431, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 0, - 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, 0, 0, 0, - 444, 0, 0, 0, 445, 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, 448, 0, 449, 0, 450, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 0, 453, - 0, 454, 0, 0, 0, 0, 0, 455, 0, 456, 0, 0, 0, 457, 0, 0, 458, 0, 459, 0, 460, 0, 461, 0, 462, 0, 463, 0, 0, 464, 0, 0, - 465, 0, 466, 0, 467, 0, 468, 0, 469, 0, 0, 470, 0, 471, 0, 472, 473, 0, 474, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 0, 477, 0, - 478, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 481, 0, 482, 0, 483, 0, 0, 484, 0, 0, 485, 0, 0, 486, - 0, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 0, 490, 0, 491, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, 0, 0, 494, 0, - 0, 495, 0, 496, 0, 0, 497, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, 500, 501, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, - 504, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 509, - 0, 510, 0, 511, 0, 512, 513, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, - 0, 517, 0, 518, 0, 519, 0, 0, 0, 520, 0, 521, 522, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 524, 0, 0, 0, 525, 0, 526, 0, 527, 528, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 530, 0, 0, 531, 0, 532, 0, 533, - 0, 0, 0, 534, 0, 0, 535, 0, 0, 536, 0, 0, 0, 0, 537, 0, 538, 0, 0, 0, 539, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 545, 0, 546, 0, 0, 0, 547, 0, 0, 0, 0, 548, 549, 0, - 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 0, 554, 0, 555, 0, 0, 556, 0, 0, 0, 0, - 0, 557, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 0, 0, 0, 560, 561, 0, 0, 562, 563, 0, 0, 0, 564, 0, 565, 0, 0, 0, - 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 568, 0, 0, 569, 0, 0, 570, 0, 0, 571, 0, 572, 0, 573, 0, 574, 0, 575, 0, - 576, 0, 0, 577, 0, 0, 578, 0, 0, 579, 0, 580, 0, 581, 0, 582, 0, 583, 0, 0, 584, 0, 585, 0, 586, 0, 0, 587, 0, 588, 0, 0, - 0, 589, 0, 0, 590, 0, 0, 0, 0, 591, 0, 0, 0, 592, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 0, 0, - 0, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 599, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 601, - 0, 0, 0, 602, 0, 0, 0, 603, 0, 604, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 616, - 617, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 619, 0, 620, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 624, 0, 0, 0, 0, 0, 625, 0, 0, 0, - 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, - 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, - 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, - 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 0, 0, 645, 0, 646, 0, 0, 0, 647, 0, 648, 0, 649, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 652, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 655, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, - 0, 0, 659, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 664, 0, 665, 0, 0, 666, 0, 667, 0, 0, - 0, 0, 668, 0, 669, 0, 670, 0, 0, 0, 671, 0, 0, 672, 0, 673, 0, 674, 0, 0, 675, 676, 0, 677, 0, 0, 0, 678, 0, 0, 679, 0, - 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 682, 0, 683, 684, 0, 0, 0, 685, 0, 0, 686, 0, 687, 0, 0, 0, 0, 688, 0, 0, 0, - 0, 689, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, 0, 692, 0, 693, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 698, - 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 702, 0, 703, 0, 704, 0, 705, 0, 0, 706, 0, 0, 0, 707, 0, - 0, 708, 0, 0, 709, 0, 710, 711, 0, 0, 0, 712, 0, 0, 713, 0, 714, 0, 0, 0, 0, 715, 0, 716, 0, 0, 717, 0, 718, 719, 0, 0, - 0, 720, 0, 0, 721, 0, 722, 0, 0, 723, 0, 724, 725, 0, 0, 0, 726, 0, 0, 727, 0, 728, 0, 0, 729, 0, 730, 731, 0, 0, 0, 732, - 0, 0, 733, 0, 734, 0, 735, 0, 0, 0, 736, 0, 0, 737, 0, 738, 739, 0, 0, 0, 740, 0, 0, 741, 0, 742, 0, 0, 743, 0, 744, 745, - 0, 0, 0, 746, 0, 0, 747, 0, 748, 0, 0, 749, 0, 750, 751, 0, 0, 0, 752, 0, 0, 753, 0, 754, 0, 0, 755, 0, 756, 0, 0, 757, - 0, 758, 759, 0, 0, 0, 760, 0, 0, 761, 0, 762, 0, 0, 763, 0, 764, 765, 0, 0, 0, 766, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 768, 0, 769, 0, 770, 0, 771, 0, 0, 0, 0, 772, 0, 773, 0, 0, 774, 0, 775, 0, 0, 0, 0, 0, 776, - 0, 0, 0, 0, 0, 0, 777, 0, 0, 778, 779, 0, 780, 0, 0, 781, 0, 782, 0, 0, 783, 0, 784, 0, 0, 785, 0, 0, 786, 0, 0, 787, - 0, 0, 0, 788, 0, 0, 789, 0, 790, 791, 0, 0, 0, 792, 0, 0, 793, 0, 794, 0, 0, 795, 0, 796, 797, 0, 0, 0, 798, 0, 0, 799, - 0, 800, 0, 0, 0, 0, 801, 0, 0, 802, 0, 0, 803, 0, 804, 0, 805, 0, 0, 0, 806, 0, 0, 807, 0, 808, 809, 0, 0, 0, 810, 0, - 0, 811, 0, 812, 0, 0, 0, 813, 0, 0, 814, 0, 815, 816, 0, 0, 0, 817, 0, 0, 818, 0, 819, 0, 820, 0, 821, 0, 0, 822, 0, 823, - 824, 0, 0, 0, 825, 0, 0, 826, 0, 827, 0, 0, 828, 0, 829, 830, 0, 0, 0, 831, 0, 0, 832, 0, 833, 0, 0, 834, 0, 835, 836, 0, - 0, 0, 837, 0, 0, 838, 0, 839, 0, 840, 0, 0, 0, 841, 0, 0, 842, 0, 843, 844, 0, 0, 0, 845, 0, 0, 846, 0, 847, 0, 0, 0, - 848, 0, 0, 849, 0, 850, 851, 0, 0, 0, 852, 0, 0, 853, 0, 854, 0, 855, 0, 856, 0, 0, 857, 0, 858, 859, 0, 0, 0, 860, 0, 0, - 861, 0, 862, 0, 0, 863, 0, 864, 865, 0, 0, 0, 866, 0, 0, 867, 0, 868, 0, 0, 869, 0, 870, 871, 0, 0, 0, 872, 0, 0, 873, 0, - 874, 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, 0, 878, 0, 879, 880, 0, - 0, 881, 0, 0, 882, 0, 883, 0, 0, 884, 0, 0, 885, 0, 886, 0, 887, 0, 888, 0, 0, 0, 889, 0, 0, 890, 0, 891, 0, 892, 0, 893, - 0, 894, 0, 0, 0, 895, 0, 0, 896, 0, 897, 0, 898, 0, 899, 0, 900, 0, 0, 0, 901, 0, 0, 902, 0, 903, 0, 904, 0, 905, 0, 906, - 0, 0, 0, 907, 0, 0, 908, 0, 909, 0, 910, 0, 0, 911, 0, 0, 912, 0, 913, 0, 914, 0, 915, 0, 0, 0, 916, 0, 0, 917, 0, 918, - 0, 919, 0, 920, 0, 921, 0, 0, 0, 922, 0, 0, 923, 0, 924, 0, 925, 0, 926, 0, 927, 0, 0, 0, 928, 0, 0, 929, 0, 930, 0, 931, - 0, 932, 0, 933, 0, 0, 0, 934, 0, 0, 935, 936, 0, 0, 937, 0, 0, 938, 0, 0, 939, 0, 0, 940, 0, 0, 941, 0, 942, 0, 943, 0, - 0, 944, 0, 0, 945, 0, 946, 0, 0, 947, 0, 0, 948, 0, 0, 0, 949, 950, 0, 951, 952, 0, 0, 953, 0, 954, 0, 0, 0, 955, 0, 0, - 0, 956, 0, 957, 0, 0, 0, 0, 958, 0, 0, 0, 0, 959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 960, 0, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, 0, 0, 0, 0, - 0, 964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 965, 0, 0, 0, 0, 0, 0, 0, 966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 967, - 0, 968, 0, 0, 0, 969, 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 973, 0, 0, 974, 0, 0, 0, 975, 0, 0, 976, 0, 0, 977, 0, 0, 0, 0, 978, 0, 979, 0, 0, 980, 981, 0, 0, 0, 0, 0, 0, 0, - 982, 0, 0, 983, 0, 0, 984, 0, 985, 0, 986, 0, 987, 0, 0, 988, 0, 0, 0, 0, 0, 989, 0, 990, 0, 0, 0, 991, 0, 0, 992, 993, - 0, 994, 0, 0, 995, 0, 0, 0, 996, 0, 0, 997, 0, 0, 0, 0, 0, 998, 0, 0, 999, 0, 0, 1000, 0, 0, 0, 0, 1001, 0, 0, 0, - 0, 1002, 0, 0, 0, 1003, 0, 0, 1004, 0, 0, 1005, 0, 1006, 0, 0, 1007, 0, 0, 1008, 0, 0, 1009, 0, 0, 0, 0, 1010, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0191[64] = { + 0x0220080C08824023ull, 0xD142908001400000ull, 0x280000004A510020ull, 0x895488020D151000ull, + 0x288089AAA92A90A2ull, 0x4454500042A50104ull, 0x20044AA145456922ull, 0x008502244912A204ull, + 0x24904914C9AA9450ull, 0x2AA2894A922A24A2ull, 0x0041A85210100241ull, 0x4D22D25A941A1252ull, + 0x20000012054529A4ull, 0x0400B4005A2A22A2ull, 0x2A2D55554AA9245Aull, 0x1112AAAAA854400Bull, + 0x25554805A92041A8ull, 0x4405AA434A912955ull, 0x8000B54020020404ull, 0x0045400421508280ull, + 0x5121121190101015ull, 0x90D1211211A40501ull, 0x02C04104A0282002ull, 0xD455446855001050ull, + 0x100B342000020002ull, 0x00012000000002A4ull, 0x0854040120020008ull, 0x25552282828A8311ull, + 0x925500114A05A955ull, 0x2016414A44105214ull, 0x0400056AA0408101ull, 0xA9101A8800041A2Aull, + 0x6116081002914248ull, 0x1466108209484101ull, 0x2952AA4955492404ull, 0x8042100212222212ull, + 0x8255550000800A88ull, 0x1050020000034201ull, 0x0000100004080010ull, 0x0000008000000200ull, + 0x4000200402020200ull, 0x5451080540100080ull, 0x8004040050015400ull, 0x48B2A4542940A034ull, + 0xA844A48210A46904ull, 0x34A148D244AA0814ull, 0xD291A4548D291A52ull, 0x01234A4694A46948ull, + 0x9252964082942A80ull, 0x4691524291A52348ull, 0x6948D291A552348Aull, 0x234AA469148D22A4ull, + 0x6900102148D291A5ull, 0xAA915522AA455252ull, 0xA915522AA4552548ull, 0x229B125254924C8Aull, + 0x000204000000210Aull, 0x0000000000000000ull, 0x0000000208000040ull, 0x0000000000000000ull, + 0x8000000000008080ull, 0x00001000200000A2ull, 0xC8A0954901942489ull, 0x0849292210920912ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0191[64] = { + 1u, 13u, 24u, 33u, 49u, 71u, 86u, 106u, 121u, 143u, 166u, 179u, 204u, 218u, 235u, 263u, + 285u, 306u, 330u, 341u, 353u, 369u, 387u, 399u, 419u, 429u, 435u, 444u, 465u, 487u, 504u, 517u, + 534u, 550u, 566u, 589u, 602u, 617u, 626u, 630u, 632u, 638u, 650u, 659u, 680u, 699u, 720u, 746u, + 768u, 788u, 811u, 837u, 861u, 881u, 907u, 932u, 956u, 962u, 962u, 965u, 965u, 968u, 973u, 994u, }; void recomp_unit_0191_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0191_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B00000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0191[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0191[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0191[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B00000; @@ -1192,7 +1099,17 @@ L_08B00004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00014: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); @@ -1212,7 +1129,17 @@ L_08B00038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00044: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7656))); @@ -1238,7 +1165,6 @@ L_08B0006C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0008C; } @@ -1259,7 +1185,17 @@ L_08B0008C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B000AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); @@ -1348,7 +1284,6 @@ L_08B000E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B00158: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0019C; } @@ -1377,7 +1312,6 @@ L_08B0019C: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B001F8; } @@ -1391,7 +1325,6 @@ L_08B001B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B001BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B001E0; } @@ -1402,7 +1335,6 @@ L_08B001C4: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B001B0; } @@ -1410,7 +1342,6 @@ L_08B001C4: } L_08B001D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B001F8; } @@ -1447,7 +1378,17 @@ L_08B001FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00214: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); @@ -1469,7 +1410,6 @@ L_08B00240: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B00278; } @@ -1490,7 +1430,6 @@ L_08B00258: goto L_08B000AC; L_08B00264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0036C; } @@ -1567,7 +1506,6 @@ L_08B00278: AOT_REGCACHE_SYNC_OUT(); return; L_08B002EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00330; } @@ -1608,7 +1546,6 @@ L_08B00340: AOT_REGCACHE_SYNC_OUT(); return; L_08B00348: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B00368; } @@ -1645,7 +1582,17 @@ L_08B0036C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00384: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); @@ -1665,7 +1612,6 @@ L_08B003AC: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00414; } @@ -1679,7 +1625,6 @@ L_08B003BC: AOT_REGCACHE_SYNC_OUT(); return; L_08B003C8: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B00404; } @@ -1692,7 +1637,6 @@ L_08B003D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B003D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B003EC; } @@ -1713,7 +1657,6 @@ L_08B003EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B003FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00508; } @@ -1723,7 +1666,6 @@ L_08B00404: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B003BC; } @@ -1731,7 +1673,6 @@ L_08B00404: } L_08B00414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00508; } @@ -1742,7 +1683,6 @@ L_08B0041C: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00508; } @@ -1756,7 +1696,6 @@ L_08B00430: AOT_REGCACHE_SYNC_OUT(); return; L_08B0043C: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B004F4; } @@ -1769,7 +1708,6 @@ L_08B00444: AOT_REGCACHE_SYNC_OUT(); return; L_08B0044C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B00460; } @@ -1792,7 +1730,6 @@ L_08B00460: } L_08B0046C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B0049C; } @@ -1816,7 +1753,6 @@ L_08B0047C: } L_08B00484: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0049C; } @@ -1844,7 +1780,6 @@ L_08B0049C: L_08B004A0: aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B004DC; } @@ -1876,7 +1811,6 @@ L_08B004DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B004EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00508; } @@ -1887,7 +1821,6 @@ L_08B004F4: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B00430; } @@ -1906,7 +1839,17 @@ L_08B00508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00520: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1937,7 +1880,6 @@ L_08B00548: } L_08B00554: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00564; } @@ -1960,7 +1902,17 @@ L_08B00564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00578: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -1980,7 +1932,6 @@ L_08B00578: AOT_REGCACHE_SYNC_OUT(); return; L_08B005B0: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B0069C; } @@ -1990,7 +1941,6 @@ L_08B005B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 207u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B00648; } @@ -2003,7 +1953,6 @@ L_08B005C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B005D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B00648; } @@ -2013,7 +1962,6 @@ L_08B005D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00638; } @@ -2071,7 +2019,6 @@ L_08B00638: AOT_REGCACHE_SYNC_OUT(); return; L_08B00640: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0069C; } @@ -2081,7 +2028,6 @@ L_08B00648: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0069C; } @@ -2094,7 +2040,6 @@ L_08B00658: AOT_REGCACHE_SYNC_OUT(); return; L_08B00660: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B0069C; } @@ -2109,7 +2054,6 @@ L_08B00668: AOT_REGCACHE_SYNC_OUT(); return; L_08B00678: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B00694; } @@ -2135,7 +2079,6 @@ L_08B0069C: AOT_REGCACHE_SYNC_OUT(); return; L_08B006A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B006B8; } @@ -2179,7 +2122,17 @@ L_08B006F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00708: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); @@ -2196,7 +2149,6 @@ L_08B00724: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B00744; } @@ -2259,7 +2211,6 @@ L_08B00794: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B007C0; } @@ -2294,7 +2245,17 @@ L_08B007C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B007DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2308,7 +2269,6 @@ L_08B007DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B00810: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B00830; } @@ -2340,7 +2300,6 @@ L_08B00830: AOT_REGCACHE_SYNC_OUT(); return; L_08B0083C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00A24; } @@ -2364,7 +2323,6 @@ L_08B0084C: } L_08B00854: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B00860; } @@ -2385,7 +2343,6 @@ L_08B00860: L_08B0086C: ctx.gpr[7] = (0u + static_cast(-989)); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B0087C; } @@ -2397,7 +2354,6 @@ L_08B00878: L_08B0087C: aot_gpr_4 = (aot_gpr_4 | aot_gpr_6); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B008AC; } @@ -2405,7 +2361,6 @@ L_08B0087C: } L_08B00888: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B008AC; } @@ -2479,7 +2434,6 @@ L_08B00904: } L_08B00914: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B009D4; } @@ -2488,7 +2442,6 @@ L_08B00914: L_08B0091C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00954; } @@ -2497,7 +2450,6 @@ L_08B0091C: L_08B00928: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B00954; } @@ -2517,7 +2469,6 @@ L_08B00944: AOT_REGCACHE_SYNC_OUT(); return; L_08B0094C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B009D4; } @@ -2555,7 +2506,6 @@ L_08B0097C: AOT_REGCACHE_SYNC_OUT(); return; L_08B00984: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B009C4; } @@ -2564,7 +2514,6 @@ L_08B00984: L_08B0098C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B009A0; } @@ -2572,7 +2521,6 @@ L_08B0098C: } L_08B00998: { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B009C4; } @@ -2581,7 +2529,6 @@ L_08B00998: L_08B009A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[23] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B009C4; } @@ -2603,7 +2550,6 @@ L_08B009C4: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[22]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B00964; } @@ -2628,7 +2574,6 @@ L_08B009E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B009EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B00A18; } @@ -2672,7 +2617,17 @@ L_08B00A24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00A50: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2692,7 +2647,6 @@ L_08B00A70: ctx.gpr[18] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00AAC; } @@ -2706,7 +2660,6 @@ L_08B00A84: AOT_REGCACHE_SYNC_OUT(); return; L_08B00A90: { const bool branch_taken = ctx.gpr[2] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B00AB4; } @@ -2717,7 +2670,6 @@ L_08B00A98: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B00A84; } @@ -2755,7 +2707,17 @@ L_08B00AC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00AD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); @@ -2781,7 +2743,6 @@ L_08B00B04: AOT_REGCACHE_SYNC_OUT(); return; L_08B00B10: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B00B30; } @@ -2796,7 +2757,6 @@ L_08B00B18: L_08B00B24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B00B4C; } @@ -2807,7 +2767,6 @@ L_08B00B30: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B00B04; } @@ -2837,10 +2796,19 @@ L_08B00B50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00B68: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B00B84; } @@ -2849,7 +2817,6 @@ L_08B00B68: L_08B00B70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B00B8C; } @@ -2876,15 +2843,23 @@ L_08B00B8C: goto L_08B00B90; L_08B00B90: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00B98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00BB8; } @@ -2893,7 +2868,6 @@ L_08B00B98: L_08B00BA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B00BB8; } @@ -2912,22 +2886,29 @@ L_08B00BB8: goto L_08B00BBC; L_08B00BBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00BC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B00BD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 22u, 0x089401B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00BD4u) goto L_08B00BD4; AOT_REGCACHE_SYNC_OUT(); return; L_08B00BD4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00BE8; } @@ -2951,18 +2932,26 @@ L_08B00BEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00BF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B00C08u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0079_entry, 79u, 22u, 0x089401B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00C08u) goto L_08B00C08; AOT_REGCACHE_SYNC_OUT(); return; L_08B00C08: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00C1C; } @@ -2986,14 +2975,34 @@ L_08B00C20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00C2C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00C34: ctx.gpr[7] = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] == 0u; @@ -3005,7 +3014,6 @@ L_08B00C34: } L_08B00C40: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B00C68; } @@ -3023,7 +3031,6 @@ L_08B00C48: } L_08B00C58: { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B00C68; } @@ -3069,7 +3076,17 @@ L_08B00C84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(48)); @@ -3127,7 +3144,6 @@ L_08B00C90: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B00D04; } @@ -3137,7 +3153,6 @@ L_08B00CF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B00D24; } @@ -3145,9 +3160,7 @@ L_08B00CF4: } L_08B00D04: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B00D1C; } @@ -3171,9 +3184,7 @@ L_08B00D1C: } L_08B00D24: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B00D54; } @@ -3181,9 +3192,7 @@ L_08B00D24: } L_08B00D34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B00D4C; } @@ -3207,9 +3216,7 @@ L_08B00D4C: } L_08B00D54: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B00D6C; } @@ -3232,7 +3239,17 @@ L_08B00D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00D78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_4 + static_cast(32)); @@ -3254,9 +3271,7 @@ L_08B00D78: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B00DB0; } @@ -3279,7 +3294,17 @@ L_08B00DB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); @@ -3300,7 +3325,6 @@ L_08B00DBC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48972u << 16u); if (branch_taken) { @@ -3313,9 +3337,7 @@ L_08B00DE8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B00E0C; } @@ -3338,7 +3360,17 @@ L_08B00E10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00E18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (static_cast(aot_gpr_4) < 195 ? 1u : 0u); @@ -3368,7 +3400,6 @@ L_08B00E34: L_08B00E40: aot_gpr_4 = (static_cast(aot_gpr_4) < -992 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00E5C; } @@ -3384,7 +3415,6 @@ L_08B00E4C: } L_08B00E54: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B00E4C; } @@ -3407,7 +3437,6 @@ L_08B00E64: L_08B00E6C: aot_gpr_4 = (static_cast(aot_gpr_4) < 191 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00E5C; } @@ -3415,7 +3444,6 @@ L_08B00E6C: } L_08B00E78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00E4C; } @@ -3423,7 +3451,6 @@ L_08B00E78: } L_08B00E80: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00E5C; } @@ -3431,7 +3458,6 @@ L_08B00E80: } L_08B00E88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00E4C; } @@ -3487,7 +3513,6 @@ L_08B00EB8: } L_08B00EC0: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B00E4C; } @@ -3498,11 +3523,20 @@ L_08B00EC8: goto L_08B00ECC; L_08B00ECC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00ED4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (static_cast(aot_gpr_4) < 226 ? 1u : 0u); @@ -3515,7 +3549,6 @@ L_08B00ED4: } L_08B00EE4: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B00F00; } @@ -3532,7 +3565,6 @@ L_08B00EEC: L_08B00EF4: aot_gpr_4 = (static_cast(aot_gpr_4) < 228 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00EEC; } @@ -3543,11 +3575,20 @@ L_08B00F00: goto L_08B00F04; L_08B00F04: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B00F0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); @@ -3569,7 +3610,6 @@ L_08B00F38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B00F58; } @@ -3577,7 +3617,6 @@ L_08B00F38: } L_08B00F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00F8C; } @@ -3596,7 +3635,6 @@ L_08B00F58: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B00F8C; } @@ -3604,12 +3642,10 @@ L_08B00F58: } L_08B00F6C: aot_gpr_31 = (0x08B00F74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00F74u) goto L_08B00F74; AOT_REGCACHE_SYNC_OUT(); return; L_08B00F74: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B00F8C; } @@ -3617,12 +3653,10 @@ L_08B00F74: } L_08B00F7C: aot_gpr_31 = (0x08B00F84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00F84u) goto L_08B00F84; AOT_REGCACHE_SYNC_OUT(); return; L_08B00F84: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B00FA4; } @@ -3630,12 +3664,10 @@ L_08B00F84: } L_08B00F8C: aot_gpr_31 = (0x08B00F94u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00F94u) goto L_08B00F94; AOT_REGCACHE_SYNC_OUT(); return; L_08B00F94: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B00FAC; } @@ -3643,7 +3675,6 @@ L_08B00F94: } L_08B00F9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B00FD0; } @@ -3659,12 +3690,10 @@ L_08B00FA4: } L_08B00FAC: aot_gpr_31 = (0x08B00FB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00FB4u) goto L_08B00FB4; AOT_REGCACHE_SYNC_OUT(); return; L_08B00FB4: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B00FD0; } @@ -3672,13 +3701,11 @@ L_08B00FB4: } L_08B00FBC: aot_gpr_31 = (0x08B00FC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B00FC4u) goto L_08B00FC4; AOT_REGCACHE_SYNC_OUT(); return; L_08B00FC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B01014; } @@ -3688,7 +3715,6 @@ L_08B00FD0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0100C; } @@ -3698,7 +3724,6 @@ L_08B00FE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0100C; } @@ -3709,9 +3734,7 @@ L_08B00FF0: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0101C; } @@ -3749,7 +3772,17 @@ L_08B01020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01038: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(208))); @@ -3757,7 +3790,6 @@ L_08B01038: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0107C; } @@ -3766,7 +3798,6 @@ L_08B01038: L_08B01054: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(556)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0106C; } @@ -3775,7 +3806,6 @@ L_08B01054: L_08B01060: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(557)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B01074; } @@ -3802,11 +3832,20 @@ L_08B0107C: goto L_08B01080; L_08B01080: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01088: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3841,7 +3880,6 @@ L_08B010B8: } L_08B010C0: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B010E0; } @@ -3860,7 +3898,6 @@ L_08B010D0: goto L_08B010D8; L_08B010D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B010F4; } @@ -3877,7 +3914,6 @@ L_08B010E0: L_08B010E8: aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B01108; } @@ -3886,7 +3922,6 @@ L_08B010E8: L_08B010F4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B01110; } @@ -3894,7 +3929,6 @@ L_08B010F4: } L_08B01100: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01180; } @@ -3915,7 +3949,6 @@ L_08B01110: AOT_REGCACHE_SYNC_OUT(); return; L_08B01118: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B01180; } @@ -3924,7 +3957,6 @@ L_08B01118: L_08B01120: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B01180; } @@ -3938,7 +3970,6 @@ L_08B0112C: L_08B01134: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B01150; } @@ -3948,7 +3979,6 @@ L_08B01140: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(680))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B01164; } @@ -3963,7 +3993,6 @@ L_08B01150: goto L_08B0115C; L_08B0115C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01180; } @@ -3980,7 +4009,6 @@ L_08B01164: L_08B0116C: aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B01180; } @@ -4009,7 +4037,17 @@ L_08B01184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01198: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(680))); { const bool branch_taken = aot_gpr_4 == 0u; @@ -4029,7 +4067,6 @@ L_08B011A4: } L_08B011AC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B011BC; } @@ -4048,11 +4085,20 @@ L_08B011BC: goto L_08B011C0; L_08B011C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B011C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(32)); @@ -4072,7 +4118,6 @@ L_08B011C8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B01244; } @@ -4082,7 +4127,6 @@ L_08B011E8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B01244; } @@ -4092,7 +4136,6 @@ L_08B011F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B01244; } @@ -4104,7 +4147,6 @@ L_08B01208: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (48588u << 16u); if (branch_taken) { @@ -4117,9 +4159,7 @@ L_08B01228: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B012A8; } @@ -4143,9 +4183,7 @@ L_08B01244: aot_gpr_5 = (aot_gpr_5 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B012A0; } @@ -4166,9 +4204,7 @@ L_08B01274: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B012B0; } @@ -4207,7 +4243,17 @@ L_08B012B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B012BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -4248,7 +4294,6 @@ L_08B012FC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0133C; } @@ -4263,9 +4308,7 @@ L_08B01324: aot_gpr_4 = (16384u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01358; } @@ -4310,7 +4353,6 @@ L_08B01374: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B013C8; } @@ -4334,9 +4376,7 @@ L_08B01388: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B013C0; } @@ -4362,7 +4402,6 @@ L_08B013C8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B01408; } @@ -4386,7 +4425,6 @@ L_08B013D8: } L_08B01400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01500; } @@ -4406,9 +4444,7 @@ L_08B01410: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01500; } @@ -4428,9 +4464,7 @@ L_08B01430: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B014F8; } @@ -4442,7 +4476,6 @@ L_08B01450: aot_gpr_4 = (15605u << 16u); aot_gpr_4 = (aot_gpr_4 | 49807u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4464,9 +4497,7 @@ L_08B0147C: goto L_08B01480; L_08B01480: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B014F8; } @@ -4475,7 +4506,6 @@ L_08B01480: L_08B01490: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); goto L_08B014B0; @@ -4492,9 +4522,7 @@ L_08B014A4: } L_08B014B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B014F8; } @@ -4503,7 +4531,6 @@ L_08B014B0: L_08B014C0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); goto L_08B014E0; @@ -4520,9 +4547,7 @@ L_08B014D4: } L_08B014E0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B014F8; } @@ -4558,9 +4583,7 @@ L_08B01500: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01528; } @@ -4568,7 +4591,6 @@ L_08B01500: } L_08B01520: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B01554; } @@ -4580,7 +4602,6 @@ L_08B01528: aot_gpr_4 = (15605u << 16u); aot_gpr_4 = (aot_gpr_4 | 49807u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4610,9 +4631,7 @@ L_08B0155C: goto L_08B01560; L_08B01560: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B015D0; } @@ -4621,7 +4640,6 @@ L_08B01560: L_08B01570: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(116))); goto L_08B01590; @@ -4638,9 +4656,7 @@ L_08B01584: } L_08B01590: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B015D0; } @@ -4649,7 +4665,6 @@ L_08B01590: L_08B015A0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(120))); goto L_08B015C0; @@ -4666,9 +4681,7 @@ L_08B015B4: } L_08B015C0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B015D8; } @@ -4697,7 +4710,17 @@ L_08B015DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B015F0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(558))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -4725,9 +4748,7 @@ L_08B01604: aot_fpr_12 = std::bit_cast(ctx.gpr[7]); { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01654; } @@ -4747,7 +4768,6 @@ L_08B01634: } L_08B0164C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B016DC; } @@ -4765,7 +4785,6 @@ L_08B01654: goto L_08B01674; L_08B01674: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B01688; } @@ -4784,9 +4803,7 @@ L_08B01688: ctx.fpr[16] = ctx.fpr[15] / aot_fpr_14; { const float fs = ctx.fpr[16]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B016B8; } @@ -4819,11 +4836,20 @@ L_08B016D8: goto L_08B016DC; L_08B016DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B016E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 + static_cast(32)); @@ -4850,9 +4876,7 @@ L_08B01718: aot_gpr_4 = (16752u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01768; } @@ -4876,9 +4900,7 @@ L_08B01730: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0178C; } @@ -4911,9 +4933,7 @@ L_08B01770: L_08B01778: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01794; } @@ -4938,7 +4958,17 @@ L_08B01798: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B017A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); aot_gpr_6 = (0u | 6u); @@ -4975,7 +5005,6 @@ L_08B017C8: } L_08B017D0: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B017F0; } @@ -4985,7 +5014,6 @@ L_08B017D8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 170u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B017F8; } @@ -5012,11 +5040,20 @@ L_08B017F8: goto L_08B017FC; L_08B017FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01804: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(284), ctx.gpr[19]); @@ -5086,7 +5123,6 @@ L_08B01844: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); if (branch_taken) { @@ -5097,7 +5133,6 @@ L_08B01844: L_08B01894: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B018B4; @@ -5168,7 +5203,6 @@ L_08B018F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01A80; } @@ -5177,7 +5211,6 @@ L_08B018F0: L_08B01908: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01A80; } @@ -5190,7 +5223,6 @@ L_08B01914: AOT_REGCACHE_SYNC_OUT(); return; L_08B0191C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01A80; } @@ -5284,9 +5316,7 @@ L_08B01924: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B019C0; } @@ -5417,7 +5447,17 @@ L_08B01A80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01AA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); @@ -5438,7 +5478,6 @@ L_08B01AC8: goto L_08B021B0; L_08B01AD0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B01B24; } @@ -5449,7 +5488,6 @@ L_08B01AD8: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B01B24; } @@ -5476,7 +5514,6 @@ L_08B01B10: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(629)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B01B24; } @@ -5498,21 +5535,50 @@ L_08B01B24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01B3C: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(856))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01B44: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01B4C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); ctx.gpr[7] = (aot_gpr_5 & 255u); @@ -5525,7 +5591,6 @@ L_08B01B4C: } L_08B01B5C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B01B9C; } @@ -5545,7 +5610,6 @@ L_08B01B64: } L_08B01B7C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B01B9C; } @@ -5561,11 +5625,20 @@ L_08B01B84: goto L_08B01B9C; L_08B01B9C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01BA4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (static_cast(aot_gpr_4) < 218 ? 1u : 0u); @@ -5603,7 +5676,6 @@ L_08B01BC8: } L_08B01BD0: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B01C3C; } @@ -5635,7 +5707,6 @@ L_08B01BE8: L_08B01BF4: aot_gpr_4 = (static_cast(aot_gpr_4) < 220 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01BD8; } @@ -5643,7 +5714,6 @@ L_08B01BF4: } L_08B01C00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01C3C; } @@ -5651,7 +5721,6 @@ L_08B01C00: } L_08B01C08: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01BD8; } @@ -5659,7 +5728,6 @@ L_08B01C08: } L_08B01C10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01C3C; } @@ -5674,7 +5742,6 @@ L_08B01C18: L_08B01C20: aot_gpr_4 = (static_cast(aot_gpr_4) < 247 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01BD8; } @@ -5682,7 +5749,6 @@ L_08B01C20: } L_08B01C2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B01C3C; } @@ -5690,7 +5756,6 @@ L_08B01C2C: } L_08B01C34: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01BD8; } @@ -5701,11 +5766,20 @@ L_08B01C3C: goto L_08B01C40; L_08B01C40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01C48: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5713,7 +5787,6 @@ L_08B01C48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(368))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01C6C; } @@ -5721,13 +5794,11 @@ L_08B01C48: } L_08B01C64: aot_gpr_31 = (0x08B01C6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0129_entry, 129u, 609u, 0x08A0BDACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B01C6Cu) goto L_08B01C6C; AOT_REGCACHE_SYNC_OUT(); return; L_08B01C6C: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(372))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B01C80; } @@ -5746,7 +5817,17 @@ L_08B01C80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01C90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5783,13 +5864,11 @@ L_08B01CC8: } L_08B01CD0: aot_gpr_31 = (0x08B01CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0114_entry, 114u, 649u, 0x089CF934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B01CD8u) goto L_08B01CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08B01CD8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B01D10; } @@ -5804,7 +5883,6 @@ L_08B01CE4: L_08B01CF0: aot_gpr_4 = (ctx.gpr[2] < static_cast(225) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B01D08; } @@ -5832,7 +5910,17 @@ L_08B01D10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01D24: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; @@ -5844,7 +5932,6 @@ L_08B01D24: } L_08B01D30: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B01DA0; } @@ -5854,9 +5941,7 @@ L_08B01D38: aot_gpr_4 = (17036u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01D8C; } @@ -5866,9 +5951,7 @@ L_08B01D50: aot_gpr_4 = (17056u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01D84; } @@ -5876,9 +5959,7 @@ L_08B01D50: } L_08B01D68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01D98; } @@ -5922,9 +6003,7 @@ L_08B01DA0: aot_gpr_4 = (17056u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01DC4; } @@ -5944,11 +6023,20 @@ L_08B01DC4: goto L_08B01DC8; L_08B01DC8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01DD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(20))); @@ -5968,7 +6056,17 @@ L_08B01DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01E00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); aot_gpr_5 = (256u << 16u); @@ -5977,7 +6075,6 @@ L_08B01E00: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B01E8C; } @@ -5990,7 +6087,6 @@ L_08B01E20: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B01E84; } @@ -6003,7 +6099,6 @@ L_08B01E3C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B01E7C; } @@ -6016,7 +6111,6 @@ L_08B01E58: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B01E94; } @@ -6059,18 +6153,36 @@ L_08B01E94: goto L_08B01E98; L_08B01E98: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01EA0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B01EA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), std::bit_cast(aot_fpr_20)); @@ -6116,7 +6228,6 @@ L_08B01F04: } L_08B01F0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B02064; } @@ -6175,7 +6286,6 @@ L_08B01F48: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; if (branch_taken) { @@ -6185,9 +6295,7 @@ L_08B01F48: } L_08B01F8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[22])) && aot_fpr_13 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01FA4; } @@ -6203,7 +6311,6 @@ L_08B01F9C: } L_08B01FA4: aot_gpr_31 = (0x08B01FACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B01FACu) goto L_08B01FAC; AOT_REGCACHE_SYNC_OUT(); return; L_08B01FAC: @@ -6225,9 +6332,7 @@ L_08B01FB0: } L_08B01FD0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B01FF4; } @@ -6249,7 +6354,6 @@ L_08B01FEC: } L_08B01FF4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B0200C; } @@ -6293,7 +6397,6 @@ L_08B02040: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02064; } @@ -6302,7 +6405,6 @@ L_08B02040: L_08B02050: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02064; } @@ -6331,7 +6433,17 @@ L_08B02064: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B02090: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(352))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); @@ -6351,7 +6463,6 @@ L_08B020AC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B020C8; } @@ -6366,12 +6477,21 @@ L_08B020C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B020D0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(619)))))); aot_gpr_6 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B020F4; } @@ -6393,11 +6513,20 @@ L_08B020F4: goto L_08B020F8; L_08B020F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B02100: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6406,7 +6535,6 @@ L_08B02100: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02138; } @@ -6428,7 +6556,6 @@ L_08B02138: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0219C; } @@ -6442,7 +6569,6 @@ L_08B0214C: AOT_REGCACHE_SYNC_OUT(); return; L_08B02158: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B02184; } @@ -6471,7 +6597,6 @@ L_08B02184: ctx.gpr[17] = (ctx.gpr[17] & 65535u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0214C; } @@ -6489,7 +6614,17 @@ L_08B0219C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B021B0: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); aot_gpr_6 = (0u | 0u); @@ -6507,7 +6642,6 @@ L_08B021C4: L_08B021C8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B021D8; } @@ -6528,11 +6662,20 @@ L_08B021D8: } L_08B021E8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B021F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6576,7 +6719,6 @@ L_08B02234: L_08B02240: aot_gpr_4 = (static_cast(aot_gpr_4) < -1000 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6593,7 +6735,6 @@ L_08B0224C: } L_08B02258: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0224C; } @@ -6601,7 +6742,6 @@ L_08B02258: } L_08B02260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6617,7 +6757,6 @@ L_08B02268: } L_08B02270: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0224C; } @@ -6625,7 +6764,6 @@ L_08B02270: } L_08B02278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6652,7 +6790,6 @@ L_08B0228C: L_08B02298: aot_gpr_4 = (static_cast(aot_gpr_4) < -943 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0224C; } @@ -6660,7 +6797,6 @@ L_08B02298: } L_08B022A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6668,7 +6804,6 @@ L_08B022A4: } L_08B022AC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0224C; } @@ -6676,7 +6811,6 @@ L_08B022AC: } L_08B022B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6691,7 +6825,6 @@ L_08B022BC: L_08B022C4: aot_gpr_4 = (static_cast(aot_gpr_4) < 233 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B022E0; } @@ -6699,7 +6832,6 @@ L_08B022C4: } L_08B022D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6707,7 +6839,6 @@ L_08B022D0: } L_08B022D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B022EC; } @@ -6724,7 +6855,6 @@ L_08B022E0: } L_08B022EC: aot_gpr_31 = (0x08B022F4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B022F4u) goto L_08B022F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B022F4: @@ -6736,7 +6866,6 @@ L_08B022F4: L_08B02304: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B02370; } @@ -6763,7 +6892,6 @@ L_08B02334: aot_gpr_6 = (aot_gpr_6 + static_cast(644)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(25)))))); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_08B02370; } @@ -6802,7 +6930,17 @@ L_08B02370: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B02384: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); @@ -6824,7 +6962,6 @@ L_08B023B0: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B024C8; } @@ -6835,7 +6972,6 @@ L_08B023C4: aot_gpr_5 = (0u | 64u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B024C8; } @@ -6848,9 +6984,7 @@ L_08B023D8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B024C0; } @@ -6860,7 +6994,6 @@ L_08B023FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B024B8; } @@ -6870,7 +7003,6 @@ L_08B0240C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B024B8; } @@ -6883,7 +7015,6 @@ L_08B0241C: AOT_REGCACHE_SYNC_OUT(); return; L_08B02424: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B024B0; } @@ -6907,7 +7038,6 @@ L_08B0242C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] + static_cast(48)); if (branch_taken) { @@ -6940,7 +7070,6 @@ L_08B0245C: } L_08B024A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B024E4; } @@ -6948,7 +7077,6 @@ L_08B024A0: } L_08B024A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -6956,7 +7084,6 @@ L_08B024A8: } L_08B024B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -6964,7 +7091,6 @@ L_08B024B0: } L_08B024B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -6972,7 +7098,6 @@ L_08B024B8: } L_08B024C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -6980,7 +7105,6 @@ L_08B024C0: } L_08B024C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -6988,7 +7112,6 @@ L_08B024C8: } L_08B024D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -7005,7 +7128,6 @@ L_08B024E4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(1914))); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -7037,7 +7159,6 @@ L_08B02524: AOT_REGCACHE_SYNC_OUT(); return; L_08B02538: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B025D8; } @@ -7068,9 +7189,7 @@ L_08B02544: { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B025D8; } @@ -7092,7 +7211,6 @@ L_08B025A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B025D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B025F0; } @@ -7123,7 +7241,17 @@ L_08B025F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B02610: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(268), ctx.gpr[19]); @@ -7247,9 +7375,7 @@ L_08B026B0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B02888; } @@ -7334,9 +7460,7 @@ L_08B02724: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B02888; } @@ -7423,9 +7547,7 @@ L_08B0279C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B02888; } @@ -7437,7 +7559,6 @@ L_08B02824: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16025u << 16u); if (branch_taken) { @@ -7495,7 +7616,6 @@ L_08B02888: aot_fpr_13 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); goto L_08B028F8; @@ -7561,9 +7681,7 @@ L_08B028F8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B02AA8; } @@ -7629,7 +7747,6 @@ L_08B02978: } L_08B02980: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B029AC; } @@ -7699,7 +7816,6 @@ L_08B029E8: } L_08B029F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02A40; } @@ -7724,7 +7840,6 @@ L_08B029F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B02A28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B02AA8; } @@ -7732,7 +7847,6 @@ L_08B02A28: } L_08B02A30: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B02A78; } @@ -7740,7 +7854,6 @@ L_08B02A30: } L_08B02A38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B02AA8; } @@ -7765,7 +7878,6 @@ L_08B02A40: AOT_REGCACHE_SYNC_OUT(); return; L_08B02A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B02AA8; } @@ -7803,7 +7915,17 @@ L_08B02AA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B02AC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); @@ -7834,7 +7956,6 @@ L_08B02AFC: } L_08B02B08: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B02B14; } @@ -7858,7 +7979,6 @@ L_08B02B14: AOT_REGCACHE_SYNC_OUT(); return; L_08B02B34: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B03064; } @@ -7878,7 +7998,6 @@ L_08B02B3C: AOT_REGCACHE_SYNC_OUT(); return; L_08B02B58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B03064; } @@ -7891,7 +8010,6 @@ L_08B02B60: goto L_08B01088; L_08B02B6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B02F5C; } @@ -7910,7 +8028,6 @@ L_08B02B74: } L_08B02B88: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B02E90; } @@ -7918,7 +8035,6 @@ L_08B02B88: } L_08B02B90: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B02E54; } @@ -7928,7 +8044,6 @@ L_08B02B98: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02E18; } @@ -7950,7 +8065,6 @@ L_08B02BB4: AOT_REGCACHE_SYNC_OUT(); return; L_08B02BBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B02BD4; } @@ -7959,7 +8073,6 @@ L_08B02BBC: L_08B02BC4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B02BD4; } @@ -7970,7 +8083,6 @@ L_08B02BD0: goto L_08B02BD4; L_08B02BD4: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B02C20; } @@ -7980,7 +8092,6 @@ L_08B02BDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B02D10; } @@ -7989,7 +8100,6 @@ L_08B02BDC: L_08B02BEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02D10; } @@ -7999,7 +8109,6 @@ L_08B02BF8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02D10; } @@ -8011,7 +8120,6 @@ L_08B02C08: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B02D10; } @@ -8026,7 +8134,6 @@ L_08B02C20: goto L_08B02C2C; L_08B02C2C: aot_gpr_31 = (0x08B02C34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02C34u) goto L_08B02C34; AOT_REGCACHE_SYNC_OUT(); return; L_08B02C34: @@ -8063,7 +8170,6 @@ L_08B02C70: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02CC8; } @@ -8080,7 +8186,6 @@ L_08B02C84: L_08B02C9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02CC8; } @@ -8089,7 +8194,6 @@ L_08B02C9C: L_08B02CA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B02CC8; } @@ -8110,7 +8214,6 @@ L_08B02CC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B02D08; } @@ -8131,7 +8234,6 @@ L_08B02CEC: AOT_REGCACHE_SYNC_OUT(); return; L_08B02CF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B02D08; } @@ -8145,7 +8247,6 @@ L_08B02CFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B02D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03494; } @@ -8158,7 +8259,6 @@ L_08B02D10: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02D84; } @@ -8177,7 +8277,6 @@ L_08B02D2C: AOT_REGCACHE_SYNC_OUT(); return; L_08B02D44: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B02DDC; } @@ -8189,7 +8288,6 @@ L_08B02D4C: goto L_08B01038; L_08B02D54: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B02DDC; } @@ -8198,7 +8296,6 @@ L_08B02D54: L_08B02D5C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02DDC; } @@ -8208,7 +8305,6 @@ L_08B02D68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B02DDC; } @@ -8217,7 +8313,6 @@ L_08B02D68: L_08B02D78: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02DDC; } @@ -8232,7 +8327,6 @@ L_08B02D84: goto L_08B02D90; L_08B02D90: aot_gpr_31 = (0x08B02D98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02D98u) goto L_08B02D98; AOT_REGCACHE_SYNC_OUT(); return; L_08B02D98: @@ -8266,7 +8360,6 @@ L_08B02DC0: AOT_REGCACHE_SYNC_OUT(); return; L_08B02DD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03494; } @@ -8281,7 +8374,6 @@ L_08B02DDC: goto L_08B02DE8; L_08B02DE8: aot_gpr_31 = (0x08B02DF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02DF0u) goto L_08B02DF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B02DF0: @@ -8302,7 +8394,6 @@ L_08B02E04: AOT_REGCACHE_SYNC_OUT(); return; L_08B02E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0301C; } @@ -8317,7 +8408,6 @@ L_08B02E18: goto L_08B02E24; L_08B02E24: aot_gpr_31 = (0x08B02E2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02E2Cu) goto L_08B02E2C; AOT_REGCACHE_SYNC_OUT(); return; L_08B02E2C: @@ -8338,7 +8428,6 @@ L_08B02E40: AOT_REGCACHE_SYNC_OUT(); return; L_08B02E4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0301C; } @@ -8353,7 +8442,6 @@ L_08B02E54: goto L_08B02E60; L_08B02E60: aot_gpr_31 = (0x08B02E68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02E68u) goto L_08B02E68; AOT_REGCACHE_SYNC_OUT(); return; L_08B02E68: @@ -8374,7 +8462,6 @@ L_08B02E7C: AOT_REGCACHE_SYNC_OUT(); return; L_08B02E88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0301C; } @@ -8382,7 +8469,6 @@ L_08B02E88: } L_08B02E90: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B02F20; } @@ -8392,7 +8478,6 @@ L_08B02E98: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B02EE4; } @@ -8407,7 +8492,6 @@ L_08B02EA8: goto L_08B02EB4; L_08B02EB4: aot_gpr_31 = (0x08B02EBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02EBCu) goto L_08B02EBC; AOT_REGCACHE_SYNC_OUT(); return; L_08B02EBC: @@ -8428,7 +8512,6 @@ L_08B02ED0: AOT_REGCACHE_SYNC_OUT(); return; L_08B02EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0301C; } @@ -8443,7 +8526,6 @@ L_08B02EE4: goto L_08B02EF0; L_08B02EF0: aot_gpr_31 = (0x08B02EF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02EF8u) goto L_08B02EF8; AOT_REGCACHE_SYNC_OUT(); return; L_08B02EF8: @@ -8464,7 +8546,6 @@ L_08B02F0C: AOT_REGCACHE_SYNC_OUT(); return; L_08B02F18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0301C; } @@ -8479,7 +8560,6 @@ L_08B02F20: goto L_08B02F2C; L_08B02F2C: aot_gpr_31 = (0x08B02F34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02F34u) goto L_08B02F34; AOT_REGCACHE_SYNC_OUT(); return; L_08B02F34: @@ -8500,7 +8580,6 @@ L_08B02F48: AOT_REGCACHE_SYNC_OUT(); return; L_08B02F54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0301C; } @@ -8517,7 +8596,6 @@ L_08B02F5C: } L_08B02F68: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B02FAC; } @@ -8532,7 +8610,6 @@ L_08B02F70: goto L_08B02F7C; L_08B02F7C: aot_gpr_31 = (0x08B02F84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02F84u) goto L_08B02F84; AOT_REGCACHE_SYNC_OUT(); return; L_08B02F84: @@ -8553,7 +8630,6 @@ L_08B02F98: AOT_REGCACHE_SYNC_OUT(); return; L_08B02FA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B02FE0; } @@ -8568,7 +8644,6 @@ L_08B02FAC: goto L_08B02FB8; L_08B02FB8: aot_gpr_31 = (0x08B02FC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B02FC0u) goto L_08B02FC0; AOT_REGCACHE_SYNC_OUT(); return; L_08B02FC0: @@ -8612,7 +8687,6 @@ L_08B0301C: AOT_REGCACHE_SYNC_OUT(); return; L_08B03024: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B03050; } @@ -8633,7 +8707,6 @@ L_08B03034: AOT_REGCACHE_SYNC_OUT(); return; L_08B03048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03494; } @@ -8647,7 +8720,6 @@ L_08B03050: AOT_REGCACHE_SYNC_OUT(); return; L_08B0305C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03494; } @@ -8659,7 +8731,6 @@ L_08B03064: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B030C4; } @@ -8679,7 +8750,6 @@ L_08B0307C: L_08B03098: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B030C4; } @@ -8690,7 +8760,6 @@ L_08B030A4: goto L_08B030A8; L_08B030A8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B030D8; } @@ -8707,7 +8776,6 @@ L_08B030B0: } L_08B030BC: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B030D8; } @@ -8721,7 +8789,6 @@ L_08B030C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B030D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03494; } @@ -8730,7 +8797,6 @@ L_08B030D0: L_08B030D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B031A4; } @@ -8739,7 +8805,6 @@ L_08B030D8: L_08B030E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B031A4; } @@ -8748,7 +8813,6 @@ L_08B030E4: L_08B030F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B031A4; } @@ -8758,7 +8822,6 @@ L_08B030FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B03148; } @@ -8773,7 +8836,6 @@ L_08B0310C: goto L_08B03118; L_08B03118: aot_gpr_31 = (0x08B03120u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03120u) goto L_08B03120; AOT_REGCACHE_SYNC_OUT(); return; L_08B03120: @@ -8794,7 +8856,6 @@ L_08B03134: AOT_REGCACHE_SYNC_OUT(); return; L_08B03140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0317C; } @@ -8809,7 +8870,6 @@ L_08B03148: goto L_08B03154; L_08B03154: aot_gpr_31 = (0x08B0315Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0315Cu) goto L_08B0315C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0315C: @@ -8861,7 +8921,6 @@ L_08B031A4: } L_08B031B0: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B0331C; } @@ -8869,7 +8928,6 @@ L_08B031B0: } L_08B031B8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B032E0; } @@ -8879,7 +8937,6 @@ L_08B031C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0320C; } @@ -8894,7 +8951,6 @@ L_08B031D0: goto L_08B031DC; L_08B031DC: aot_gpr_31 = (0x08B031E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B031E4u) goto L_08B031E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B031E4: @@ -8915,7 +8971,6 @@ L_08B031F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B03204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -8925,7 +8980,6 @@ L_08B0320C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B03258; } @@ -8940,7 +8994,6 @@ L_08B0321C: goto L_08B03228; L_08B03228: aot_gpr_31 = (0x08B03230u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03230u) goto L_08B03230; AOT_REGCACHE_SYNC_OUT(); return; L_08B03230: @@ -8961,7 +9014,6 @@ L_08B03244: AOT_REGCACHE_SYNC_OUT(); return; L_08B03250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -8973,7 +9025,6 @@ L_08B03258: goto L_08B02090; L_08B03260: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B032A4; } @@ -8988,7 +9039,6 @@ L_08B03268: goto L_08B03274; L_08B03274: aot_gpr_31 = (0x08B0327Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0327Cu) goto L_08B0327C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0327C: @@ -9009,7 +9059,6 @@ L_08B03290: AOT_REGCACHE_SYNC_OUT(); return; L_08B0329C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9024,7 +9073,6 @@ L_08B032A4: goto L_08B032B0; L_08B032B0: aot_gpr_31 = (0x08B032B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B032B8u) goto L_08B032B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B032B8: @@ -9045,7 +9093,6 @@ L_08B032CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B032D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9060,7 +9107,6 @@ L_08B032E0: goto L_08B032EC; L_08B032EC: aot_gpr_31 = (0x08B032F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B032F4u) goto L_08B032F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B032F4: @@ -9081,7 +9127,6 @@ L_08B03308: AOT_REGCACHE_SYNC_OUT(); return; L_08B03314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9089,7 +9134,6 @@ L_08B03314: } L_08B0331C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B03444; } @@ -9099,7 +9143,6 @@ L_08B03324: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B03370; } @@ -9114,7 +9157,6 @@ L_08B03334: goto L_08B03340; L_08B03340: aot_gpr_31 = (0x08B03348u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03348u) goto L_08B03348; AOT_REGCACHE_SYNC_OUT(); return; L_08B03348: @@ -9135,7 +9177,6 @@ L_08B0335C: AOT_REGCACHE_SYNC_OUT(); return; L_08B03368: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9145,7 +9186,6 @@ L_08B03370: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B033BC; } @@ -9160,7 +9200,6 @@ L_08B03380: goto L_08B0338C; L_08B0338C: aot_gpr_31 = (0x08B03394u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03394u) goto L_08B03394; AOT_REGCACHE_SYNC_OUT(); return; L_08B03394: @@ -9181,7 +9220,6 @@ L_08B033A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B033B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9193,7 +9231,6 @@ L_08B033BC: goto L_08B02090; L_08B033C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B03408; } @@ -9208,7 +9245,6 @@ L_08B033CC: goto L_08B033D8; L_08B033D8: aot_gpr_31 = (0x08B033E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B033E0u) goto L_08B033E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B033E0: @@ -9229,7 +9265,6 @@ L_08B033F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B03400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9244,7 +9279,6 @@ L_08B03408: goto L_08B03414; L_08B03414: aot_gpr_31 = (0x08B0341Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0341Cu) goto L_08B0341C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0341C: @@ -9265,7 +9299,6 @@ L_08B03430: AOT_REGCACHE_SYNC_OUT(); return; L_08B0343C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03478; } @@ -9280,7 +9313,6 @@ L_08B03444: goto L_08B03450; L_08B03450: aot_gpr_31 = (0x08B03458u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03458u) goto L_08B03458; AOT_REGCACHE_SYNC_OUT(); return; L_08B03458: @@ -9326,7 +9358,17 @@ L_08B03494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B034B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9356,7 +9398,6 @@ L_08B034E0: } L_08B034EC: { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B034F8; } @@ -9377,7 +9418,6 @@ L_08B034F8: L_08B03504: ctx.gpr[8] = (0u | 11u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B03620; } @@ -9385,7 +9425,6 @@ L_08B03504: } L_08B03510: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B035E4; } @@ -9394,7 +9433,6 @@ L_08B03510: L_08B03518: aot_gpr_4 = (aot_gpr_6 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B035A8; } @@ -9403,7 +9441,6 @@ L_08B03518: L_08B03524: aot_gpr_4 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0356C; } @@ -9419,7 +9456,6 @@ L_08B03530: } L_08B03538: aot_gpr_31 = (0x08B03540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03540u) goto L_08B03540; AOT_REGCACHE_SYNC_OUT(); return; L_08B03540: @@ -9441,7 +9477,6 @@ L_08B03558: AOT_REGCACHE_SYNC_OUT(); return; L_08B03564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03804; } @@ -9457,7 +9492,6 @@ L_08B0356C: } L_08B03574: aot_gpr_31 = (0x08B0357Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0357Cu) goto L_08B0357C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0357C: @@ -9479,7 +9513,6 @@ L_08B03594: AOT_REGCACHE_SYNC_OUT(); return; L_08B035A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03804; } @@ -9495,7 +9528,6 @@ L_08B035A8: } L_08B035B0: aot_gpr_31 = (0x08B035B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B035B8u) goto L_08B035B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B035B8: @@ -9517,7 +9549,6 @@ L_08B035D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B035DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03804; } @@ -9533,7 +9564,6 @@ L_08B035E4: } L_08B035EC: aot_gpr_31 = (0x08B035F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B035F4u) goto L_08B035F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B035F4: @@ -9555,7 +9585,6 @@ L_08B0360C: AOT_REGCACHE_SYNC_OUT(); return; L_08B03618: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03804; } @@ -9563,7 +9592,6 @@ L_08B03618: } L_08B03620: { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B036F4; } @@ -9572,7 +9600,6 @@ L_08B03620: L_08B03628: aot_gpr_4 = (aot_gpr_6 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B036B8; } @@ -9581,7 +9608,6 @@ L_08B03628: L_08B03634: aot_gpr_4 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0367C; } @@ -9597,7 +9623,6 @@ L_08B03640: } L_08B03648: aot_gpr_31 = (0x08B03650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03650u) goto L_08B03650; AOT_REGCACHE_SYNC_OUT(); return; L_08B03650: @@ -9635,7 +9660,6 @@ L_08B0367C: } L_08B03684: aot_gpr_31 = (0x08B0368Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0368Cu) goto L_08B0368C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0368C: @@ -9673,7 +9697,6 @@ L_08B036B8: } L_08B036C0: aot_gpr_31 = (0x08B036C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B036C8u) goto L_08B036C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B036C8: @@ -9711,7 +9734,6 @@ L_08B036F4: } L_08B036FC: aot_gpr_31 = (0x08B03704u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B03704u) goto L_08B03704; AOT_REGCACHE_SYNC_OUT(); return; L_08B03704: @@ -9746,7 +9768,6 @@ L_08B0372C: L_08B03738: aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B037CC; } @@ -9755,7 +9776,6 @@ L_08B03738: L_08B03744: aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B03798; } @@ -9786,7 +9806,6 @@ L_08B03768: } L_08B03770: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B037CC; } @@ -9834,7 +9853,6 @@ L_08B037B0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); ctx.gpr[7] = (0u | 18u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B037C4; } @@ -9845,7 +9863,6 @@ L_08B037C0: goto L_08B037C4; L_08B037C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B037D0; } @@ -9857,7 +9874,6 @@ L_08B037CC: L_08B037D0: aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B03804; } @@ -9865,7 +9881,6 @@ L_08B037D0: } L_08B037DC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B03804; } @@ -9875,7 +9890,6 @@ L_08B037E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B03804; } @@ -9913,7 +9927,17 @@ L_08B03820: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B03834: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[22]); @@ -10200,7 +10224,6 @@ L_08B03C1C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[17] = (0u | 1u); goto L_08B03C3C; @@ -10323,7 +10346,17 @@ L_08B03D74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B03DB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(140), aot_gpr_16); @@ -10360,7 +10393,6 @@ L_08B03E0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B03E34; } @@ -10369,7 +10401,6 @@ L_08B03E0C: L_08B03E1C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B03E34; } @@ -10378,7 +10409,6 @@ L_08B03E1C: L_08B03E28: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B03E50; } @@ -10397,7 +10427,6 @@ L_08B03E34: } L_08B03E48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B03E60; } @@ -10455,7 +10484,6 @@ L_08B03EA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B03EA8: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B03F70; } @@ -10478,7 +10506,6 @@ L_08B03EBC: AOT_REGCACHE_SYNC_OUT(); return; L_08B03ED4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B03EFC; } @@ -10494,7 +10521,6 @@ L_08B03EDC: L_08B03EEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B03EFC; } @@ -10505,7 +10531,6 @@ L_08B03EF8: goto L_08B03EFC; L_08B03EFC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B03F70; } @@ -10548,7 +10573,6 @@ L_08B03F2C: L_08B03F44: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(128))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B03F70; } @@ -10572,7 +10596,6 @@ L_08B03F70: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B03E8C; } @@ -10601,7 +10624,6 @@ L_08B03FA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B03FAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B03FEC; } @@ -10610,7 +10632,6 @@ L_08B03FAC: L_08B03FB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B03FEC; } @@ -10619,7 +10640,6 @@ L_08B03FB4: L_08B03FC0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B03FEC; } @@ -10628,7 +10648,6 @@ L_08B03FC0: L_08B03FCC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08B03FEC; } diff --git a/profiles/vcs/generated/generated_unit_0192.cpp b/profiles/vcs/generated/generated_unit_0192.cpp index 32294a2..8c447c5 100644 --- a/profiles/vcs/generated/generated_unit_0192.cpp +++ b/profiles/vcs/generated/generated_unit_0192.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0192[4093] = { - 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, - 0, 15, 0, 16, 0, 17, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 0, 0, 0, 0, 22, 0, - 0, 0, 0, 0, 0, 23, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 32, 0, 0, 33, 0, 34, - 0, 35, 0, 0, 0, 0, 36, 0, 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, - 0, 45, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 0, 0, 57, 58, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 61, 0, 0, 62, 0, 63, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, - 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, - 0, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 0, 79, 0, 80, 0, 0, 0, 81, 0, 82, 0, 83, 0, - 84, 0, 85, 0, 86, 0, 87, 0, 0, 0, 0, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 95, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 100, 0, 101, 0, 102, 0, 0, 0, 0, 103, 0, 104, 0, 105, 0, 0, 0, 0, 106, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 110, - 0, 111, 0, 0, 0, 0, 112, 0, 113, 0, 114, 0, 115, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 118, 0, 119, 0, 120, 0, 0, - 0, 0, 0, 0, 121, 0, 0, 122, 0, 123, 0, 0, 0, 124, 0, 0, 0, 0, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, - 132, 0, 133, 0, 134, 0, 135, 136, 0, 137, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, - 0, 142, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, - 0, 0, 0, 149, 0, 0, 0, 150, 0, 0, 151, 0, 0, 0, 0, 152, 0, 153, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 155, 0, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 0, 0, 160, 0, 0, 161, - 0, 0, 0, 162, 0, 0, 163, 0, 164, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 168, 0, 169, 0, 170, - 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 172, 0, 0, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 179, 0, 180, 0, 181, 0, - 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, 189, 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, - 0, 192, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 195, 0, 196, 0, 0, 197, 0, 198, 0, 199, 0, 0, 200, 0, 0, 201, 0, 202, 0, 203, - 0, 204, 0, 205, 0, 206, 0, 0, 0, 0, 0, 207, 0, 208, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, 0, 219, 0, 220, 0, 0, 221, 0, 0, 0, - 222, 0, 223, 0, 0, 0, 224, 0, 225, 0, 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 228, 0, 229, 0, 0, 0, 230, 0, 231, 0, - 232, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 235, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 0, 239, 0, 240, - 0, 241, 0, 0, 0, 242, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 246, 0, 247, 0, 248, 0, 0, 249, 0, 250, 0, - 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 257, 0, - 0, 258, 0, 0, 259, 0, 260, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 269, 0, 270, 271, 0, 272, 0, 0, 273, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, - 276, 0, 277, 0, 278, 279, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 290, 0, 291, 0, 292, - 0, 293, 0, 294, 295, 0, 0, 296, 0, 0, 0, 297, 0, 0, 298, 0, 0, 299, 0, 0, 0, 300, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, - 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 311, 0, 0, 0, 0, 312, 0, 313, 0, 0, 314, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 322, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, - 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 0, 0, - 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 348, 0, 0, - 0, 349, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, - 0, 363, 364, 0, 0, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 371, - 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, - 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 376, 0, - 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 378, 379, 0, 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 381, 382, 0, 0, 383, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 385, 0, 0, 386, 0, 387, 0, 388, 0, 0, 389, 0, 390, 0, 0, 391, 0, - 392, 393, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 399, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, - 403, 0, 404, 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 0, 408, 0, 0, 409, 0, 410, 0, 0, 0, 411, 0, 0, - 412, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 418, 0, 419, 0, 0, 0, 0, 420, 0, 0, 0, 421, - 0, 0, 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, 427, 0, 428, 0, 0, 0, 429, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 0, 431, 0, 432, 0, 0, 433, 0, 434, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, - 0, 0, 0, 440, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, - 0, 449, 0, 0, 0, 450, 0, 0, 451, 0, 452, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, - 0, 457, 0, 458, 0, 0, 459, 0, 460, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, - 0, 467, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, 472, 0, 0, 473, 0, 0, 474, 0, 0, 0, 0, 0, 475, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 477, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 479, 0, 480, 0, 481, 0, 0, 482, 0, 483, 0, 484, 0, 485, 486, 0, 0, 0, 0, 0, 0, 487, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 489, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 492, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, - 0, 0, 0, 494, 0, 0, 0, 495, 0, 0, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 500, 0, - 0, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 510, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 512, 0, - 0, 0, 0, 513, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 0, 519, - 0, 0, 0, 520, 0, 0, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 0, 0, 524, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 527, 0, 0, 0, 528, 0, 529, 0, 0, 0, 0, 530, 0, 0, 0, 531, 0, 0, 0, 0, 532, 0, 0, 533, 534, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, - 0, 539, 0, 540, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 0, - 0, 546, 0, 547, 0, 0, 0, 0, 548, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 551, 0, 552, 553, 0, 0, 0, 554, 0, 0, 0, 555, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, - 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 574, 0, 0, 0, 0, 0, 575, 0, 0, 0, 576, 0, 0, - 0, 0, 577, 0, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 0, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, - 583, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 0, 586, 587, 0, 588, 0, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, - 0, 0, 0, 0, 592, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 595, 0, 0, 0, 0, 0, 596, 0, 0, 0, 597, 0, 0, - 0, 0, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 602, 0, 603, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, - 0, 607, 608, 0, 0, 609, 0, 0, 0, 0, 610, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 0, - 0, 620, 0, 0, 0, 621, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, - 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 627, 0, 0, 0, 0, 628, 0, 0, 0, 629, 0, 630, - 0, 631, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 636, 0, 637, 0, 0, 0, - 0, 0, 0, 0, 0, 638, 0, 0, 639, 0, 640, 0, 0, 0, 641, 0, 0, 0, 642, 0, 643, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 0, - 646, 0, 0, 647, 0, 0, 648, 0, 649, 0, 0, 0, 0, 650, 0, 651, 0, 652, 0, 0, 0, 0, 653, 0, 0, 654, 0, 0, 0, 0, 655, 0, - 656, 0, 657, 0, 0, 0, 0, 658, 659, 0, 660, 0, 661, 0, 0, 662, 0, 0, 0, 663, 0, 664, 0, 665, 0, 0, 0, 666, 0, 0, 667, 0, - 668, 0, 0, 669, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 672, 0, 0, 0, 673, 0, 674, 0, 675, 0, 0, 0, 676, 0, - 0, 0, 677, 0, 678, 0, 679, 0, 0, 680, 0, 0, 0, 681, 0, 682, 0, 683, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 0, 0, 686, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 688, 0, 0, 0, 689, 0, 690, 0, 691, 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, - 694, 0, 0, 695, 0, 0, 0, 696, 0, 697, 0, 0, 698, 0, 699, 0, 0, 0, 0, 700, 0, 701, 0, 0, 702, 0, 0, 0, 0, 0, 0, 703, - 0, 0, 0, 0, 0, 0, 704, 0, 0, 705, 0, 706, 0, 707, 0, 708, 0, 0, 0, 0, 709, 0, 0, 710, 0, 711, 0, 0, 0, 0, 0, 0, - 0, 0, 712, 0, 0, 0, 0, 0, 0, 713, 0, 714, 0, 0, 0, 715, 0, 0, 0, 716, 0, 717, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, - 0, 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 722, 0, 723, 0, 0, 0, 724, 0, 0, 725, 0, 0, 726, 0, 727, 0, 0, 728, 0, 0, 729, - 0, 0, 0, 730, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 733, 0, 734, 0, 735, 0, 0, 736, 0, - 0, 0, 0, 0, 0, 737, 0, 738, 0, 739, 0, 0, 740, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 742, 0, 0, 0, 743, 744, 0, 0, 0, - 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 747, 0, 748, 0, 749, 0, 0, 0, 750, 0, 0, 0, 751, 0, - 752, 0, 0, 0, 753, 0, 0, 754, 0, 755, 0, 756, 0, 0, 0, 757, 0, 758, 0, 0, 0, 759, 0, 0, 0, 760, 0, 761, 0, 0, 762, 0, - 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 767, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, - 769, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 0, 0, 0, 0, 772, 773, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 775, 0, 0, 0, 776, 0, 0, 0, 777, 0, 778, 0, 0, 0, 779, 0, 0, 780, 0, 781, 0, 0, 782, 0, 783, 0, 0, 784, 0, 0, - 0, 0, 0, 0, 785, 0, 786, 0, 0, 0, 787, 0, 0, 788, 0, 789, 0, 0, 790, 0, 791, 0, 792, 0, 793, 0, 0, 794, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 796, 0, 797, 0, 0, 0, 0, 798, 0, 799, 0, 0, 800, 0, 801, 0, 0, - 0, 0, 802, 0, 0, 0, 0, 803, 0, 0, 804, 0, 0, 0, 805, 0, 0, 806, 0, 0, 0, 807, 0, 0, 0, 0, 808, 0, 0, 0, 809, 0, - 810, 0, 0, 811, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 813, 0, 0, 814, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 817, 818, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 820, 0, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 822, 0, 0, 0, 823, 0, 824, - 0, 0, 0, 0, 825, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 828, 0, 0, 0, 829, 0, 830, 0, 0, 0, 831, 0, 0, 0, - 0, 832, 0, 0, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 0, 835, 0, 836, 0, 0, 0, 837, 0, 0, 838, 0, 839, 0, 840, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0192[64] = { + 0x040A488010A40445ull, 0x044902A04280242Aull, 0xAA805442A5000040ull, 0x802822001400222Aull, + 0x0050000888A95030ull, 0x5452055440000820ull, 0x0824040003555055ull, 0x2A811542A0542A15ull, + 0x1010A2D5AAA82290ull, 0x5012848841050412ull, 0xA840154891408000ull, 0x082A115555554410ull, + 0x0202A82AA92A5242ull, 0x12912800A0000020ull, 0xA220A20951444145ull, 0x4849020852A220A2ull, + 0x1052D440212420D2ull, 0xA9542040020820B5ull, 0x105286AA5562489Aull, 0x000004000A284080ull, + 0x4800000400004080ull, 0x0001001015554001ull, 0x2844104002002800ull, 0x0002001001422082ull, + 0x8000120000009400ull, 0x2000000881421506ull, 0x0000000260000001ull, 0x04C0000000001300ull, + 0x000402034A54A000ull, 0x2204000090002800ull, 0x8854891122940445ull, 0x9112294044522444ull, + 0x0222152244488548ull, 0x4124448A4488914Aull, 0x81AA550020800000ull, 0x4000000041004C00ull, + 0x0000908844221088ull, 0x8500020001000008ull, 0x8442210850000000ull, 0x32110A2100610908ull, + 0x8000800020200000ull, 0x4469110A0885010Aull, 0x0102000880022100ull, 0x2000088004004440ull, + 0x2209502000000000ull, 0x4422C11108421044ull, 0x0140020822088110ull, 0x0081142620200228ull, + 0x0000001000000000ull, 0x0000008000000010ull, 0x8000042210440000ull, 0x15005012A2180202ull, + 0x4242A14910544520ull, 0x4545002948A89585ull, 0x209511004052A254ull, 0x0290AA4081285289ull, + 0x92922A2022288A04ull, 0x188412A04A840048ull, 0x4A228A9144548008ull, 0x00580A0120244050ull, + 0x0954A45025291444ull, 0x4422448429429000ull, 0xA208120030A24049ull, 0x1522888211444090ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0192[64] = { + 1u, 15u, 30u, 45u, 57u, 70u, 84u, 100u, 121u, 142u, 157u, 171u, 192u, 212u, 222u, 241u, + 258u, 276u, 293u, 317u, 324u, 329u, 340u, 349u, 357u, 363u, 374u, 378u, 384u, 396u, 403u, 422u, + 440u, 457u, 476u, 488u, 494u, 505u, 511u, 520u, 535u, 539u, 556u, 563u, 570u, 577u, 592u, 602u, + 614u, 615u, 617u, 624u, 638u, 656u, 677u, 694u, 712u, 730u, 745u, 763u, 775u, 795u, 810u, 825u, }; void recomp_unit_0192_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0192_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B04000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0192[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0192[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0192[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B04000; @@ -1043,7 +950,6 @@ L_08B04028: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(1728), aot_gpr_5); aot_gpr_5 = (aot_gpr_6 & ctx.gpr[18]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B0409C; } @@ -1057,7 +963,6 @@ L_08B04048: AOT_REGCACHE_SYNC_OUT(); return; L_08B04054: aot_gpr_31 = (0x08B0405Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0405Cu) goto L_08B0405C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0405C: @@ -1094,7 +999,6 @@ L_08B0409C: L_08B040AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B041E8; } @@ -1103,7 +1007,6 @@ L_08B040AC: L_08B040B8: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(124))); { const bool branch_taken = static_cast(ctx.gpr[16]) <= 0; - // nop if (branch_taken) { goto L_08B041E8; } @@ -1111,7 +1014,6 @@ L_08B040B8: } L_08B040C4: aot_gpr_31 = (0x08B040CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B040CCu) goto L_08B040CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B040CC: @@ -1147,7 +1049,6 @@ L_08B04104: } L_08B0410C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B041E8; } @@ -1179,7 +1080,6 @@ L_08B04134: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B041A4; } @@ -1187,7 +1087,6 @@ L_08B04134: } L_08B0415C: aot_gpr_31 = (0x08B04164u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04164u) goto L_08B04164; AOT_REGCACHE_SYNC_OUT(); return; L_08B04164: @@ -1221,7 +1120,6 @@ L_08B04194: } L_08B0419C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B041D8; } @@ -1234,7 +1132,6 @@ L_08B041A4: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1728), aot_gpr_4); aot_gpr_4 = (aot_gpr_5 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B041CC; } @@ -1279,7 +1176,17 @@ L_08B041E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B04218: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -1303,7 +1210,6 @@ L_08B04218: AOT_REGCACHE_SYNC_OUT(); return; L_08B04260: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B04514; } @@ -1312,7 +1218,6 @@ L_08B04260: L_08B04268: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04298; } @@ -1325,7 +1230,6 @@ L_08B04274: AOT_REGCACHE_SYNC_OUT(); return; L_08B0427C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B04298; } @@ -1342,7 +1246,6 @@ L_08B04298: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0446C; } @@ -1350,12 +1253,10 @@ L_08B04298: } L_08B042A8: aot_gpr_31 = (0x08B042B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B042B0u) goto L_08B042B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B042B0: { const bool branch_taken = ctx.gpr[16] != aot_gpr_2; - // nop if (branch_taken) { goto L_08B0446C; } @@ -1418,7 +1319,6 @@ L_08B042FC: } L_08B04304: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B04430; } @@ -1426,7 +1326,6 @@ L_08B04304: } L_08B0430C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0446C; } @@ -1470,7 +1369,6 @@ L_08B04334: } L_08B04368: aot_gpr_31 = (0x08B04370u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04370u) goto L_08B04370; AOT_REGCACHE_SYNC_OUT(); return; L_08B04370: @@ -1484,7 +1382,6 @@ L_08B04370: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2238u << 16u); if (branch_taken) { @@ -1523,7 +1420,6 @@ L_08B043D4: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2238u << 16u); if (branch_taken) { @@ -1579,7 +1475,6 @@ L_08B04440: AOT_REGCACHE_SYNC_OUT(); return; L_08B0444C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0445C; } @@ -1587,7 +1482,6 @@ L_08B0444C: } L_08B04454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0446C; } @@ -1604,7 +1498,6 @@ L_08B0446C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0448C; } @@ -1656,7 +1549,6 @@ L_08B0448C: AOT_REGCACHE_SYNC_OUT(); return; L_08B044D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04514; } @@ -1693,7 +1585,17 @@ L_08B04514: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0452C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(615)))))); @@ -1728,7 +1630,6 @@ L_08B04578: } L_08B04588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B045D0; } @@ -1736,7 +1637,6 @@ L_08B04588: } L_08B04590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -1744,7 +1644,6 @@ L_08B04590: } L_08B04598: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B045D0; } @@ -1752,7 +1651,6 @@ L_08B04598: } L_08B045A0: aot_gpr_31 = (0x08B045A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 223u, 0x0899103Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B045A8u) goto L_08B045A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B045A8: @@ -1760,7 +1658,6 @@ L_08B045A8: aot_gpr_5 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 & 496u); if (branch_taken) { @@ -1775,7 +1672,6 @@ L_08B045C4: goto L_08B045D0; L_08B045D0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B04618; } @@ -1785,7 +1681,6 @@ L_08B045D8: aot_gpr_5 = (16384u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04618; } @@ -1793,12 +1688,10 @@ L_08B045D8: } L_08B045E8: aot_gpr_31 = (0x08B045F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B045F0u) goto L_08B045F0; AOT_REGCACHE_SYNC_OUT(); return; L_08B045F0: { const bool branch_taken = ctx.gpr[17] == aot_gpr_2; - // nop if (branch_taken) { goto L_08B04618; } @@ -1806,12 +1699,10 @@ L_08B045F0: } L_08B045F8: aot_gpr_31 = (0x08B04600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04600u) goto L_08B04600; AOT_REGCACHE_SYNC_OUT(); return; L_08B04600: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08B04638; } @@ -1819,12 +1710,10 @@ L_08B04600: } L_08B04608: aot_gpr_31 = (0x08B04610u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04610u) goto L_08B04610; AOT_REGCACHE_SYNC_OUT(); return; L_08B04610: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B04638; } @@ -1834,9 +1723,7 @@ L_08B04618: aot_gpr_4 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B04640; } @@ -1844,7 +1731,6 @@ L_08B04618: } L_08B04630: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B046C8; } @@ -1852,7 +1738,6 @@ L_08B04630: } L_08B04638: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -1860,7 +1745,6 @@ L_08B04638: } L_08B04640: aot_gpr_31 = (0x08B04648u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04648u) goto L_08B04648; AOT_REGCACHE_SYNC_OUT(); return; L_08B04648: @@ -1871,12 +1755,10 @@ L_08B04648: goto L_08B04650; L_08B04650: aot_gpr_31 = (0x08B04658u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04658u) goto L_08B04658; AOT_REGCACHE_SYNC_OUT(); return; L_08B04658: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08B046C8; } @@ -1934,13 +1816,22 @@ L_08B046D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B046EC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_6 = (8192u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B04708; } @@ -1948,7 +1839,6 @@ L_08B046EC: } L_08B04700: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B047A8; } @@ -1956,7 +1846,6 @@ L_08B04700: } L_08B04708: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -1967,7 +1856,6 @@ L_08B04710: aot_gpr_5 = (1024u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0472C; } @@ -1983,7 +1871,6 @@ L_08B04724: } L_08B0472C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -1994,7 +1881,6 @@ L_08B04734: aot_gpr_6 = (2048u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B04750; } @@ -2002,7 +1888,6 @@ L_08B04734: } L_08B04748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B047A8; } @@ -2010,7 +1895,6 @@ L_08B04748: } L_08B04750: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2023,7 +1907,6 @@ L_08B04758: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0477C; } @@ -2039,7 +1922,6 @@ L_08B04774: } L_08B0477C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2050,7 +1932,6 @@ L_08B04784: aot_gpr_6 = (4096u << 16u); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B047A0; } @@ -2058,7 +1939,6 @@ L_08B04784: } L_08B04798: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B047A8; } @@ -2066,7 +1946,6 @@ L_08B04798: } L_08B047A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2074,7 +1953,6 @@ L_08B047A0: } L_08B047A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B047DC; } @@ -2084,7 +1962,6 @@ L_08B047B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B047DC; } @@ -2095,9 +1972,7 @@ L_08B047C0: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B047EC; } @@ -2113,7 +1988,6 @@ L_08B047DC: } L_08B047E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04978; } @@ -2121,7 +1995,6 @@ L_08B047E4: } L_08B047EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2134,7 +2007,6 @@ L_08B047F4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04978; } @@ -2151,7 +2023,6 @@ L_08B04810: } L_08B0481C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B04978; } @@ -2173,11 +2044,20 @@ L_08B04834: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(30720))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0484C: { const bool branch_taken = 0u == 0u; ctx.gpr[20] = (0u | 10u); @@ -2217,7 +2097,6 @@ L_08B0486C: AOT_REGCACHE_SYNC_OUT(); return; L_08B04874: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B04880; } @@ -2228,7 +2107,6 @@ L_08B0487C: goto L_08B04880; L_08B04880: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04888; } @@ -2241,7 +2119,6 @@ L_08B04888: AOT_REGCACHE_SYNC_OUT(); return; L_08B04890: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B0489C; } @@ -2252,7 +2129,6 @@ L_08B04898: goto L_08B0489C; L_08B0489C: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B04978; } @@ -2262,7 +2138,6 @@ L_08B048A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B04978; } @@ -2270,7 +2145,6 @@ L_08B048A4: } L_08B048B4: aot_gpr_31 = (0x08B048BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B048BCu) goto L_08B048BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B048BC: @@ -2289,7 +2163,6 @@ L_08B048D0: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04978; } @@ -2309,7 +2182,6 @@ L_08B048F0: L_08B04904: aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B04948; } @@ -2337,7 +2209,6 @@ L_08B04928: AOT_REGCACHE_SYNC_OUT(); return; L_08B04940: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04978; } @@ -2366,9 +2237,7 @@ L_08B04960: L_08B04978: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2387,7 +2256,6 @@ L_08B0498C: L_08B0499C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04A3C; } @@ -2406,7 +2274,6 @@ L_08B049A8: } L_08B049BC: { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B04A3C; } @@ -2415,7 +2282,6 @@ L_08B049BC: L_08B049C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B04A3C; } @@ -2429,7 +2295,6 @@ L_08B049D0: aot_gpr_5 = (0u | 35000u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04A3C; } @@ -2466,7 +2331,6 @@ L_08B04A3C: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(688), ctx.gpr[17]); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04B48; } @@ -2474,7 +2338,6 @@ L_08B04A3C: } L_08B04A58: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B04B48; } @@ -2490,7 +2353,6 @@ L_08B04A60: L_08B04A70: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B04A98; } @@ -2500,7 +2362,6 @@ L_08B04A7C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(60))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B04A98; } @@ -2518,7 +2379,6 @@ L_08B04A98: AOT_REGCACHE_SYNC_OUT(); return; L_08B04AA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B04B40; } @@ -2537,7 +2397,6 @@ L_08B04AB0: ctx.gpr[19] = (aot_gpr_2 | 0u); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B04AD8; @@ -2553,7 +2412,6 @@ L_08B04AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B04AEC: { const bool branch_taken = ctx.gpr[22] == aot_gpr_2; - // nop if (branch_taken) { goto L_08B04B10; } @@ -2605,7 +2463,6 @@ L_08B04B40: goto L_08B04B48; L_08B04B48: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B04BB0; } @@ -2613,7 +2470,6 @@ L_08B04B48: } L_08B04B50: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B04BB0; } @@ -2621,12 +2477,10 @@ L_08B04B50: } L_08B04B58: aot_gpr_31 = (0x08B04B60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04B60u) goto L_08B04B60; AOT_REGCACHE_SYNC_OUT(); return; L_08B04B60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B04BB0; } @@ -2634,12 +2488,10 @@ L_08B04B60: } L_08B04B68: aot_gpr_31 = (0x08B04B70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04B70u) goto L_08B04B70; AOT_REGCACHE_SYNC_OUT(); return; L_08B04B70: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08B04BB0; } @@ -2647,12 +2499,10 @@ L_08B04B70: } L_08B04B78: aot_gpr_31 = (0x08B04B80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04B80u) goto L_08B04B80; AOT_REGCACHE_SYNC_OUT(); return; L_08B04B80: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B04BB0; } @@ -2660,12 +2510,10 @@ L_08B04B80: } L_08B04B88: aot_gpr_31 = (0x08B04B90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04B90u) goto L_08B04B90; AOT_REGCACHE_SYNC_OUT(); return; L_08B04B90: { const bool branch_taken = aot_gpr_2 != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08B04BB0; } @@ -2673,14 +2521,12 @@ L_08B04B90: } L_08B04B98: aot_gpr_31 = (0x08B04BA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04BA0u) goto L_08B04BA0; AOT_REGCACHE_SYNC_OUT(); return; L_08B04BA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_2 + static_cast(86)))))); aot_gpr_5 = (0u | 275u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B04BCC; } @@ -2689,9 +2535,7 @@ L_08B04BA0: L_08B04BB0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B04BD4; } @@ -2699,7 +2543,6 @@ L_08B04BB0: } L_08B04BC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04C54; } @@ -2707,7 +2550,6 @@ L_08B04BC4: } L_08B04BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2726,9 +2568,7 @@ L_08B04BEC: aot_gpr_4 = (17274u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2737,9 +2577,7 @@ L_08B04BEC: L_08B04C04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(636))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2748,7 +2586,6 @@ L_08B04C04: L_08B04C18: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2771,7 +2608,6 @@ L_08B04C30: L_08B04C38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1840))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2784,7 +2620,6 @@ L_08B04C44: AOT_REGCACHE_SYNC_OUT(); return; L_08B04C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2802,7 +2637,6 @@ L_08B04C54: L_08B04C60: aot_gpr_4 = (0u | 32u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04C8C; } @@ -2834,7 +2668,6 @@ L_08B04C7C: } L_08B04C84: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B04CC4; } @@ -2842,7 +2675,6 @@ L_08B04C84: } L_08B04C8C: aot_gpr_31 = (0x08B04C94u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04C94u) goto L_08B04C94; AOT_REGCACHE_SYNC_OUT(); return; L_08B04C94: @@ -2872,7 +2704,6 @@ L_08B04CB4: AOT_REGCACHE_SYNC_OUT(); return; L_08B04CBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04CE4; } @@ -2910,7 +2741,17 @@ L_08B04CE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B04D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-1280)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1240), ctx.gpr[16]); @@ -2959,7 +2800,6 @@ L_08B04D7C: } L_08B04DAC: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B04E20; } @@ -2968,7 +2808,6 @@ L_08B04DAC: L_08B04DB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -2978,7 +2817,6 @@ L_08B04DC0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04DE4; } @@ -2992,7 +2830,6 @@ L_08B04DD0: AOT_REGCACHE_SYNC_OUT(); return; L_08B04DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3001,7 +2838,6 @@ L_08B04DDC: L_08B04DE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B04E08; } @@ -3016,7 +2852,6 @@ L_08B04DF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B04E00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3031,7 +2866,6 @@ L_08B04E08: AOT_REGCACHE_SYNC_OUT(); return; L_08B04E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3043,7 +2877,6 @@ L_08B04E20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04EBC; } @@ -3053,7 +2886,6 @@ L_08B04E38: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2276))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04EBC; } @@ -3063,7 +2895,6 @@ L_08B04E48: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(612))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04EBC; } @@ -3071,14 +2902,12 @@ L_08B04E48: } L_08B04E58: aot_gpr_31 = (0x08B04E60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04E60u) goto L_08B04E60; AOT_REGCACHE_SYNC_OUT(); return; L_08B04E60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(1156))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B04EBC; } @@ -3086,12 +2915,10 @@ L_08B04E60: } L_08B04E70: aot_gpr_31 = (0x08B04E78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04E78u) goto L_08B04E78; AOT_REGCACHE_SYNC_OUT(); return; L_08B04E78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B04EBC; } @@ -3100,7 +2927,6 @@ L_08B04E78: L_08B04E80: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04EA4; } @@ -3127,7 +2953,6 @@ L_08B04EA4: AOT_REGCACHE_SYNC_OUT(); return; L_08B04EB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3139,7 +2964,6 @@ L_08B04EBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04F1C; } @@ -3149,7 +2973,6 @@ L_08B04ED4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2276))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04F1C; } @@ -3159,7 +2982,6 @@ L_08B04EE4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(612))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04F1C; } @@ -3167,12 +2989,10 @@ L_08B04EE4: } L_08B04EF4: aot_gpr_31 = (0x08B04EFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04EFCu) goto L_08B04EFC; AOT_REGCACHE_SYNC_OUT(); return; L_08B04EFC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B04F1C; } @@ -3187,7 +3007,6 @@ L_08B04F04: AOT_REGCACHE_SYNC_OUT(); return; L_08B04F14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3199,7 +3018,6 @@ L_08B04F1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(23)))))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3209,7 +3027,6 @@ L_08B04F34: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2276))); aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3219,7 +3036,6 @@ L_08B04F44: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(612))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3227,12 +3043,10 @@ L_08B04F44: } L_08B04F54: aot_gpr_31 = (0x08B04F5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04F5Cu) goto L_08B04F5C; AOT_REGCACHE_SYNC_OUT(); return; L_08B04F5C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B04FA4; } @@ -3246,7 +3060,6 @@ L_08B04F64: AOT_REGCACHE_SYNC_OUT(); return; L_08B04F70: aot_gpr_31 = (0x08B04F78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B04F78u) goto L_08B04F78; AOT_REGCACHE_SYNC_OUT(); return; L_08B04F78: @@ -3272,7 +3085,6 @@ L_08B04FA4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04FF8; } @@ -3287,7 +3099,6 @@ L_08B04FC0: L_08B04FCC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B04FF8; } @@ -3304,7 +3115,6 @@ L_08B04FD8: L_08B04FEC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B04FD8; } @@ -3325,7 +3135,6 @@ L_08B05004: goto L_08B05010; L_08B05010: aot_gpr_31 = (0x08B05018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B05018u) goto L_08B05018; AOT_REGCACHE_SYNC_OUT(); return; L_08B05018: @@ -3363,9 +3172,7 @@ L_08B05054: L_08B05060: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B050D8; } @@ -3378,7 +3185,6 @@ L_08B05074: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[22] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -3388,9 +3194,7 @@ L_08B05074: } L_08B05098: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B050B0; } @@ -3406,7 +3210,6 @@ L_08B050A8: } L_08B050B0: aot_gpr_31 = (0x08B050B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B050B8u) goto L_08B050B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B050B8: @@ -3425,7 +3228,6 @@ L_08B050C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B050D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0511C; } @@ -3435,7 +3237,6 @@ L_08B050D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); if (branch_taken) { @@ -3445,9 +3246,7 @@ L_08B050D8: } L_08B050F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B05108; } @@ -3463,7 +3262,6 @@ L_08B05100: } L_08B05108: aot_gpr_31 = (0x08B05110u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B05110u) goto L_08B05110; AOT_REGCACHE_SYNC_OUT(); return; L_08B05110: @@ -3480,7 +3278,6 @@ L_08B0511C: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_gpr_4 = (ctx.gpr[17] < static_cast(49) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B05540; } @@ -3496,7 +3293,17 @@ L_08B05134: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0514C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1204), std::bit_cast(ctx.fpr[26])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1200), std::bit_cast(ctx.fpr[28])); @@ -3545,7 +3352,6 @@ L_08B051B4: } L_08B051C8: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08B05210; } @@ -3553,7 +3359,6 @@ L_08B051C8: } L_08B051D0: { const bool branch_taken = static_cast(ctx.gpr[19]) > 0; - // nop if (branch_taken) { goto L_08B051FC; } @@ -3578,7 +3383,6 @@ L_08B051E0: } L_08B051EC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0520C; } @@ -3586,7 +3390,6 @@ L_08B051EC: } L_08B051F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B05210; } @@ -3614,7 +3417,6 @@ L_08B0520C: L_08B05210: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B0522C; } @@ -3624,7 +3426,6 @@ L_08B0521C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B05244; } @@ -3633,7 +3434,6 @@ L_08B0521C: L_08B0522C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(1493))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05244; } @@ -3648,7 +3448,6 @@ L_08B05244: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B05258; } @@ -3659,7 +3458,6 @@ L_08B05254: goto L_08B05258; L_08B05258: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B058A4; } @@ -3667,7 +3465,6 @@ L_08B05258: } L_08B05260: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08B052A8; } @@ -3675,7 +3472,6 @@ L_08B05260: } L_08B05268: { const bool branch_taken = static_cast(ctx.gpr[19]) > 0; - // nop if (branch_taken) { goto L_08B05294; } @@ -3700,7 +3496,6 @@ L_08B05278: } L_08B05284: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B052A4; } @@ -3708,7 +3503,6 @@ L_08B05284: } L_08B0528C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B052A8; } @@ -3743,7 +3537,6 @@ L_08B052A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B052BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B052D0; } @@ -3757,7 +3550,6 @@ L_08B052C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B052D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B058A4; } @@ -3809,7 +3601,6 @@ L_08B05338: } L_08B0534C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B05260; } @@ -3888,7 +3679,6 @@ L_08B053A8: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); ctx.gpr[22] = (std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08B0541Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0541Cu) goto L_08B0541C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0541C: @@ -4028,7 +3818,6 @@ L_08B05500: AOT_REGCACHE_SYNC_OUT(); return; L_08B05538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B058A4; } @@ -4044,7 +3833,6 @@ L_08B05540: } L_08B05548: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08B058A4; } @@ -4052,7 +3840,6 @@ L_08B05548: } L_08B05550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B05570; } @@ -4068,7 +3855,6 @@ L_08B05558: } L_08B05560: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05760; } @@ -4076,7 +3862,6 @@ L_08B05560: } L_08B05568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B058A4; } @@ -4111,9 +3896,7 @@ L_08B05590: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0562C; } @@ -4219,9 +4002,7 @@ L_08B05634: aot_gpr_5 = (aot_gpr_5 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B056F4; } @@ -4292,7 +4073,6 @@ L_08B056D8: AOT_REGCACHE_SYNC_OUT(); return; L_08B056EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B05758; } @@ -4343,7 +4123,6 @@ L_08B05744: AOT_REGCACHE_SYNC_OUT(); return; L_08B05758: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B058A4; } @@ -4367,7 +4146,6 @@ L_08B05760: aot_gpr_5 = (aot_gpr_5 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 | 0u); if (branch_taken) { @@ -4476,7 +4254,6 @@ L_08B057C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B05828: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B058A4; } @@ -4564,7 +4341,6 @@ L_08B0583C: L_08B058A4: aot_gpr_4 = (0u | 46u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B05928; } @@ -4595,7 +4371,6 @@ L_08B058B0: goto L_08B058FC; L_08B058FC: aot_gpr_31 = (0x08B05904u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B05904u) goto L_08B05904; AOT_REGCACHE_SYNC_OUT(); return; L_08B05904: @@ -4612,7 +4387,6 @@ L_08B05908: AOT_REGCACHE_SYNC_OUT(); return; L_08B05920: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0598C; } @@ -4620,7 +4394,6 @@ L_08B05920: } L_08B05928: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0598C; } @@ -4629,9 +4402,7 @@ L_08B05928: L_08B05930: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B05960; } @@ -4647,7 +4418,6 @@ L_08B05944: AOT_REGCACHE_SYNC_OUT(); return; L_08B05958: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0597C; } @@ -4730,7 +4500,6 @@ L_08B0598C: L_08B059F4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_2); { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B05A78; } @@ -4803,7 +4572,6 @@ L_08B05A74: L_08B05A78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05B24; } @@ -4916,7 +4684,6 @@ L_08B05B20: L_08B05B24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05BDC; } @@ -5032,7 +4799,6 @@ L_08B05BD8: L_08B05BDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B05CC8; } @@ -5082,7 +4848,6 @@ L_08B05C34: L_08B05C3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B05C58; } @@ -5202,7 +4967,6 @@ L_08B05CC8: AOT_REGCACHE_SYNC_OUT(); return; L_08B05D2C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B05D70; } @@ -5277,7 +5041,17 @@ L_08B05D7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B05DC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5292,7 +5066,6 @@ L_08B05DE4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(aot_gpr_2) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5306,7 +5079,6 @@ L_08B05DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B05E00: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B05F44; } @@ -5316,7 +5088,6 @@ L_08B05E08: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05F44; } @@ -5326,7 +5097,6 @@ L_08B05E18: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05F44; } @@ -5347,7 +5117,6 @@ L_08B05E28: AOT_REGCACHE_SYNC_OUT(); return; L_08B05E48: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B05F44; } @@ -5361,7 +5130,6 @@ L_08B05E50: AOT_REGCACHE_SYNC_OUT(); return; L_08B05E5C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B05EBC; } @@ -5371,7 +5139,6 @@ L_08B05E64: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B05EBC; } @@ -5437,7 +5204,6 @@ L_08B05ED8: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5447,7 +5213,6 @@ L_08B05EEC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5497,7 +5262,6 @@ L_08B05F44: AOT_REGCACHE_SYNC_OUT(); return; L_08B05F50: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B06094; } @@ -5507,7 +5271,6 @@ L_08B05F58: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B06094; } @@ -5517,7 +5280,6 @@ L_08B05F68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B06094; } @@ -5538,7 +5300,6 @@ L_08B05F78: AOT_REGCACHE_SYNC_OUT(); return; L_08B05F98: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B06094; } @@ -5552,7 +5313,6 @@ L_08B05FA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B05FAC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0600C; } @@ -5562,7 +5322,6 @@ L_08B05FB4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0600C; } @@ -5628,7 +5387,6 @@ L_08B06028: aot_gpr_5 = (1u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5638,7 +5396,6 @@ L_08B0603C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5704,7 +5461,6 @@ L_08B060B0: aot_gpr_5 = (2u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5714,7 +5470,6 @@ L_08B060C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5724,7 +5479,6 @@ L_08B060D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(564))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5745,7 +5499,6 @@ L_08B060E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B06104: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5759,7 +5512,6 @@ L_08B0610C: AOT_REGCACHE_SYNC_OUT(); return; L_08B06118: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B06178; } @@ -5769,7 +5521,6 @@ L_08B06120: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B06178; } @@ -5819,7 +5570,6 @@ L_08B06178: AOT_REGCACHE_SYNC_OUT(); return; L_08B06184: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5829,7 +5579,6 @@ L_08B0618C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(563))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B061E0; } @@ -5879,7 +5628,17 @@ L_08B061E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B061F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-1728)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(356))); @@ -5911,9 +5670,7 @@ L_08B0625C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7676))); ctx.fpr[24] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B062A8; } @@ -5938,7 +5695,6 @@ L_08B06274: } L_08B062A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B062E0; } @@ -5946,7 +5702,6 @@ L_08B062A0: } L_08B062A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0193_entry, 193u, 235u, 0x08B08D2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5954,7 +5709,6 @@ L_08B062A8: } L_08B062B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0193_entry, 193u, 235u, 0x08B08D2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -5963,7 +5717,6 @@ L_08B062B0: L_08B062B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B062E0; } @@ -5976,7 +5729,6 @@ L_08B062C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B062CC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B062E0; } @@ -6079,7 +5831,6 @@ L_08B06338: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_4 = (ctx.gpr[30] < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0193_entry, 193u, 153u, 0x08B08844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6095,7 +5846,17 @@ L_08B06360: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B06378: { const std::uint32_t vfpu_address = ctx.gpr[23] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6459,7 +6220,6 @@ L_08B065A4: ctx.fpr[26] = aot_fpr_12 / ctx.fpr[26]; aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B065FC; } @@ -6633,7 +6393,6 @@ L_08B06740: aot_gpr_5 = (0u | 192u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B067F4; } @@ -6650,9 +6409,7 @@ L_08B06758: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B067F4; } @@ -6668,9 +6425,7 @@ L_08B06780: AOT_REGCACHE_SYNC_OUT(); return; L_08B06794: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B067F4; } @@ -6841,7 +6596,6 @@ L_08B06874: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(116), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0193_entry, 193u, 153u, 0x08B08844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6895,9 +6649,7 @@ L_08B06920: aot_gpr_4 = (aot_gpr_4 | 16374u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B069A0; } @@ -6934,7 +6686,6 @@ L_08B0696C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B069A0; } @@ -6954,7 +6705,6 @@ L_08B0698C: goto L_08B069A0; L_08B069A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1616), std::bit_cast(aot_fpr_12)); goto L_08B069CC; @@ -6962,7 +6712,6 @@ L_08B069A0: goto L_08B069B0; L_08B069B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[24])) && ctx.fpr[28] == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1616), std::bit_cast(aot_fpr_12)); goto L_08B069CC; @@ -6987,7 +6736,6 @@ L_08B069D4: goto L_08B069D8; L_08B069D8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); if (branch_taken) { @@ -6997,9 +6745,7 @@ L_08B069D8: } L_08B069E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06A20; } @@ -7017,7 +6763,6 @@ L_08B069F8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[30] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B06B68; } @@ -7036,9 +6781,7 @@ L_08B06A20: } L_08B06A34: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06A7C; } @@ -7060,7 +6803,6 @@ L_08B06A44: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[30] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B06B68; } @@ -7068,9 +6810,7 @@ L_08B06A44: } L_08B06A7C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06AC4; } @@ -7092,7 +6832,6 @@ L_08B06A8C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[30] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B06B68; } @@ -7103,9 +6842,7 @@ L_08B06AC4: aot_gpr_4 = (aot_gpr_4 | 52196u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06B18; } @@ -7127,7 +6864,6 @@ L_08B06AE0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[30] / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B06B68; } @@ -7135,9 +6871,7 @@ L_08B06AE0: } L_08B06B18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06B68; } @@ -7145,9 +6879,7 @@ L_08B06B18: } L_08B06B28: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06B68; } @@ -7250,7 +6982,6 @@ L_08B06BAC: { const float fs = ctx.fpr[26]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[28] = std::bit_cast(0x7FC00000u); else ctx.fpr[28] = fs * ft; } aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B06C94; } @@ -7350,7 +7081,6 @@ L_08B06C94: aot_gpr_4 = (aot_gpr_4 | 16374u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1628))); if (branch_taken) { @@ -7418,7 +7148,6 @@ L_08B06D18: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B06DBC; } @@ -7427,9 +7156,7 @@ L_08B06D18: L_08B06D30: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06DBC; } @@ -7438,9 +7165,7 @@ L_08B06D30: L_08B06D44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06DBC; } @@ -7449,9 +7174,7 @@ L_08B06D44: L_08B06D58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1528))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06DBC; } @@ -7460,9 +7183,7 @@ L_08B06D58: L_08B06D6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1532))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[30])) && aot_fpr_12 == ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06DBC; } @@ -7472,7 +7193,6 @@ L_08B06D80: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_6 = (0u | 278u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B06DB8; } @@ -7492,9 +7212,7 @@ L_08B06DA0: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06DBC; } @@ -7505,7 +7223,6 @@ L_08B06DB8: goto L_08B06DBC; L_08B06DBC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B06DD4; } @@ -7513,9 +7230,7 @@ L_08B06DBC: } L_08B06DC4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06F14; } @@ -7552,7 +7267,6 @@ L_08B06E10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B06E3C; } @@ -7591,9 +7305,7 @@ L_08B06E4C: goto L_08B06E64; L_08B06E64: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06F88; } @@ -7603,9 +7315,7 @@ L_08B06E74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06F88; } @@ -7615,7 +7325,6 @@ L_08B06E8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); goto L_08B06EE0; @@ -7632,7 +7341,6 @@ L_08B06EA4: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[30] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08B06ED8; @@ -7655,7 +7363,6 @@ L_08B06EE0: { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[30] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08B06F0C; @@ -7671,9 +7378,7 @@ L_08B06F0C: } L_08B06F14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B06F84; } @@ -7705,7 +7410,6 @@ L_08B06F24: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16632u << 16u); if (branch_taken) { @@ -7719,7 +7423,6 @@ L_08B06F54: { const float fs = ctx.fpr[26]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[22] = ctx.fpr[22] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08B06F74; @@ -7741,7 +7444,6 @@ L_08B06F84: L_08B06F88: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B06FA8; } @@ -7760,7 +7462,6 @@ L_08B06F94: } L_08B06FA8: { const bool branch_taken = ctx.gpr[30] != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B06FC0; } @@ -7790,7 +7491,6 @@ L_08B06FC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-983)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B07090; } @@ -8248,7 +7948,6 @@ L_08B07258: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B072FC; } @@ -8257,7 +7956,6 @@ L_08B07258: L_08B07270: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08B07284; @@ -8265,9 +7963,7 @@ L_08B07270: goto L_08B07284; L_08B07284: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B072A8; } @@ -8276,7 +7972,6 @@ L_08B07284: L_08B07294: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08B072A8; @@ -8314,7 +8009,6 @@ L_08B072A8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B07350; } @@ -8389,9 +8083,7 @@ L_08B07390: aot_gpr_4 = (aot_gpr_4 | 16374u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B073E8; } @@ -8399,7 +8091,6 @@ L_08B07390: } L_08B073B0: aot_gpr_31 = (0x08B073B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B073B8u) goto L_08B073B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B073B8: @@ -8417,7 +8108,6 @@ L_08B073B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B073E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B07414; } @@ -8511,7 +8201,6 @@ L_08B07498: L_08B074A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1644))); if (branch_taken) { @@ -8532,9 +8221,7 @@ L_08B074BC: L_08B074C4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B07520; } @@ -8570,9 +8257,7 @@ L_08B07500: L_08B07508: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B07520; } @@ -8629,7 +8314,6 @@ L_08B0756C: AOT_REGCACHE_SYNC_OUT(); return; L_08B07578: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0758C; } @@ -8642,7 +8326,6 @@ L_08B07580: goto L_08B0758C; L_08B0758C: aot_gpr_31 = (0x08B07594u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07594u) goto L_08B07594; AOT_REGCACHE_SYNC_OUT(); return; L_08B07594: @@ -8834,7 +8517,6 @@ L_08B07724: AOT_REGCACHE_SYNC_OUT(); return; L_08B07730: { const bool branch_taken = aot_gpr_2 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B07760; } @@ -8843,9 +8525,7 @@ L_08B07730: L_08B07738: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1724))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B07760; } @@ -8853,7 +8533,6 @@ L_08B07738: } L_08B0774C: aot_gpr_31 = (0x08B07754u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 644u, 0x08AFEDB8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07754u) goto L_08B07754; AOT_REGCACHE_SYNC_OUT(); return; L_08B07754: @@ -8879,9 +8558,7 @@ L_08B0777C: { const float fs = aot_fpr_20; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B077A4; } @@ -8894,7 +8571,6 @@ L_08B07798: goto L_08B077A4; L_08B077A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B077DC; } @@ -8907,7 +8583,6 @@ L_08B077AC: AOT_REGCACHE_SYNC_OUT(); return; L_08B077B4: { const bool branch_taken = aot_gpr_2 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B077DC; } @@ -8916,9 +8591,7 @@ L_08B077B4: L_08B077BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1988))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B077DC; } @@ -8931,7 +8604,6 @@ L_08B077D0: goto L_08B077DC; L_08B077DC: aot_gpr_31 = (0x08B077E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B077E4u) goto L_08B077E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B077E4: @@ -8951,9 +8623,7 @@ L_08B07808: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(208))); { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B078A4; } @@ -8973,9 +8643,7 @@ L_08B0782C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0783C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B078A4; } @@ -8983,7 +8651,6 @@ L_08B0783C: } L_08B0784C: aot_gpr_31 = (0x08B07854u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07854u) goto L_08B07854; AOT_REGCACHE_SYNC_OUT(); return; L_08B07854: @@ -9048,7 +8715,6 @@ L_08B078D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B078DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0193_entry, 193u, 153u, 0x08B08844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9164,7 +8830,6 @@ L_08B079B0: L_08B079C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(640))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); goto L_08B079F0; @@ -9172,7 +8837,6 @@ L_08B079C8: goto L_08B079DC; L_08B079DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(752), std::bit_cast(ctx.fpr[24])); goto L_08B07A0C; @@ -9240,7 +8904,6 @@ L_08B07A68: AOT_REGCACHE_SYNC_OUT(); return; L_08B07A78: aot_gpr_31 = (0x08B07A80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07A80u) goto L_08B07A80; AOT_REGCACHE_SYNC_OUT(); return; L_08B07A80: @@ -9366,7 +9029,6 @@ L_08B07B80: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(1640), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -9388,9 +9050,7 @@ L_08B07BAC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B07BD0; } @@ -9434,7 +9094,6 @@ L_08B07C18: AOT_REGCACHE_SYNC_OUT(); return; L_08B07C28: aot_gpr_31 = (0x08B07C30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07C30u) goto L_08B07C30; AOT_REGCACHE_SYNC_OUT(); return; L_08B07C30: @@ -9452,7 +9111,6 @@ L_08B07C40: AOT_REGCACHE_SYNC_OUT(); return; L_08B07C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B07FE0; } @@ -9538,7 +9196,6 @@ L_08B07CD8: L_08B07CE0: aot_gpr_4 = (0u + static_cast(-983)); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B07DB8; } @@ -9638,7 +9295,6 @@ L_08B07DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B07DC4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(640), std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -9655,7 +9311,6 @@ L_08B07DD4: goto L_08B07DE8; L_08B07DE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(ctx.fpr[26])) && ctx.fpr[22] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); goto L_08B07E74; @@ -9700,7 +9355,6 @@ L_08B07E38: AOT_REGCACHE_SYNC_OUT(); return; L_08B07E44: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1652))); if (branch_taken) { @@ -9772,7 +9426,6 @@ L_08B07EE4: AOT_REGCACHE_SYNC_OUT(); return; L_08B07EF4: aot_gpr_31 = (0x08B07EFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07EFCu) goto L_08B07EFC; AOT_REGCACHE_SYNC_OUT(); return; L_08B07EFC: @@ -9808,7 +9461,6 @@ L_08B07F38: AOT_REGCACHE_SYNC_OUT(); return; L_08B07F48: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1652))); if (branch_taken) { @@ -9860,7 +9512,6 @@ L_08B07FAC: AOT_REGCACHE_SYNC_OUT(); return; L_08B07FBC: aot_gpr_31 = (0x08B07FC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B07FC4u) goto L_08B07FC4; AOT_REGCACHE_SYNC_OUT(); return; L_08B07FC4: @@ -9889,7 +9540,6 @@ L_08B07FE8: L_08B07FF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[21] = (aot_gpr_29 + static_cast(48)); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0193.cpp b/profiles/vcs/generated/generated_unit_0193.cpp index 6535a70..4d1d729 100644 --- a/profiles/vcs/generated/generated_unit_0193.cpp +++ b/profiles/vcs/generated/generated_unit_0193.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0193[4094] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, - 8, 0, 0, 0, 0, 9, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 16, 0, - 0, 0, 0, 17, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 20, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 27, 0, 28, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 32, 0, 33, 0, 34, - 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 0, 0, 41, 0, 42, 0, 43, - 0, 0, 0, 44, 0, 0, 0, 45, 0, 46, 0, 47, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 53, 0, 0, 0, 54, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 59, 0, 0, 0, 0, 60, 0, 61, 0, 62, 0, - 0, 0, 0, 63, 0, 0, 0, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 69, 0, 70, 0, 0, 0, 71, 0, - 72, 0, 73, 0, 0, 74, 0, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 79, 0, 80, 0, 81, 0, - 0, 0, 0, 82, 0, 0, 0, 83, 0, 84, 0, 85, 0, 86, 0, 0, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 0, 0, 0, - 93, 0, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, - 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, 104, 0, 0, 105, 0, 106, 0, 0, 0, 107, 0, 0, 0, 108, 0, 109, - 0, 110, 0, 0, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 113, 0, 114, 0, 0, 0, 115, 0, 116, 0, 117, 0, 0, 0, 118, 0, 0, 0, - 119, 0, 120, 0, 121, 0, 0, 122, 0, 0, 0, 123, 0, 124, 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, 127, 0, 0, 0, 128, 0, 129, 0, - 0, 0, 130, 0, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, - 138, 0, 139, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 142, 0, 143, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 147, 0, - 148, 0, 0, 0, 149, 0, 150, 0, 151, 0, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 156, 0, 0, 0, 0, - 157, 0, 0, 158, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 0, 161, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 164, 0, 165, 0, 166, 0, - 167, 0, 0, 0, 168, 0, 0, 169, 0, 170, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 174, 0, 175, 0, 176, 177, 0, 0, 0, 0, 0, 178, - 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 0, 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 191, 0, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 198, 0, 0, - 199, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 203, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, - 0, 207, 0, 208, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 214, 0, 0, - 0, 215, 0, 0, 0, 216, 0, 0, 0, 217, 0, 0, 218, 0, 0, 219, 0, 220, 0, 0, 0, 221, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, - 0, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 0, 0, 227, 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 232, - 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, - 242, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, - 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, - 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 260, 0, 261, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 264, 0, 0, - 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 268, 269, 0, 0, 0, 0, 0, 0, 270, 0, 271, 272, 0, 0, - 0, 0, 0, 0, 273, 0, 274, 275, 0, 0, 0, 0, 0, 0, 276, 0, 277, 278, 0, 0, 0, 0, 0, 0, 279, 0, 280, 281, 0, 0, 0, 0, - 0, 0, 282, 0, 283, 284, 0, 0, 0, 0, 0, 0, 285, 0, 286, 287, 0, 0, 0, 0, 0, 0, 288, 0, 289, 290, 0, 0, 0, 0, 0, 0, - 291, 0, 292, 293, 0, 0, 0, 0, 0, 0, 294, 0, 295, 296, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, - 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 308, 0, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, - 314, 0, 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 0, 0, 0, 318, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 322, 0, 323, - 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 328, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 333, 0, 334, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, - 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 359, 360, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 363, 0, 0, 364, 0, - 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 369, 0, 370, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 0, 376, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, - 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 389, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 393, 394, 0, 0, 0, - 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 397, 0, 0, 398, 0, 399, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, - 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 404, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 410, - 0, 411, 0, 0, 0, 412, 0, 0, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 418, - 0, 0, 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, - 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 428, 0, 0, 429, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 432, 0, 0, 0, 433, 0, - 434, 0, 435, 0, 436, 0, 437, 0, 438, 0, 439, 0, 0, 440, 0, 441, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 0, 445, 0, - 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, 0, 454, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 457, 0, 458, 0, 459, 0, 0, 460, 0, 461, 0, 0, 462, 0, 0, - 463, 0, 0, 0, 464, 0, 0, 0, 0, 465, 0, 466, 0, 0, 0, 0, 467, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, - 0, 0, 471, 0, 0, 472, 0, 0, 473, 0, 0, 0, 474, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 477, 0, 0, - 478, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 0, 482, 0, 0, 0, 0, 483, 0, 484, 0, - 0, 485, 0, 486, 0, 487, 0, 0, 488, 0, 489, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 493, 0, 0, 0, 0, - 494, 0, 0, 0, 495, 0, 0, 496, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 503, 504, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, - 0, 507, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 509, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, - 512, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 518, 0, 519, 0, - 0, 0, 0, 520, 0, 521, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 525, 0, 0, - 0, 526, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, 0, 536, 0, 0, - 0, 537, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 540, 0, 541, 0, 0, 0, 0, 0, 0, 0, 542, 0, 543, 544, 0, 0, 0, 0, 0, 0, - 545, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 549, 0, 0, 550, 0, 0, 551, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, - 554, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, - 0, 561, 0, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 567, 0, - 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 571, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 0, 578, - 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, - 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 584, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 588, 589, 0, 0, 590, 0, 591, 0, 0, 0, 0, 592, 0, 0, - 593, 0, 594, 0, 595, 0, 596, 0, 0, 0, 0, 597, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 600, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 602, 0, 0, 603, 0, 0, 0, 604, 0, 0, 0, 605, 0, 606, 0, 0, 0, 0, 607, 0, - 608, 0, 0, 0, 609, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 613, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, - 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 624, 0, 0, 0, - 0, 625, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, 0, 628, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 632, 0, 0, 0, - 0, 0, 633, 0, 0, 0, 634, 0, 0, 0, 635, 0, 0, 636, 637, 0, 0, 0, 638, 639, 0, 0, 0, 0, 0, 0, 640, 641, 0, 642, 0, 0, - 0, 643, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 0, 649, 650, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, - 0, 0, 0, 0, 658, 0, 0, 659, 0, 660, 0, 661, 0, 662, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 668, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 673, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 687, 688, 0, 0, 0, 0, 0, 0, 0, - 689, 0, 0, 0, 0, 0, 0, 690, 0, 691, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 693, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, - 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, - 0, 0, 0, 701, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 0, 704, 0, 705, 0, 706, 0, 0, 0, 0, 707, 0, 708, 0, 709, 710, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0193[64] = { + 0x54501421280A4101ull, 0xA910A8A028894088ull, 0x01490A88A8A02920ull, 0x4544150854244545ull, + 0x0AAA2A8854209125ull, 0xA229144228204411ull, 0x5105289511514422ull, 0x4422A225401052A4ull, + 0x5490890909211151ull, 0x2092090083548A91ull, 0x2449209008248240ull, 0x2808448A4888A021ull, + 0xA4888A0211229222ull, 0x0000000010000448ull, 0x0008088921084100ull, 0x4011200848021200ull, + 0x340D008420468842ull, 0x0340D0340D0340D0ull, 0x000040000402340Dull, 0x0200101001020400ull, + 0x0808824400001002ull, 0x12000040B4028291ull, 0x0002402000024800ull, 0x0000200000840114ull, + 0x0000000002011500ull, 0x0020000400280800ull, 0x0120400000020000ull, 0x0320808200000102ull, + 0x0B00205048100010ull, 0x0254000040000800ull, 0x0000022000048020ull, 0x0012124080000004ull, + 0x0404A42818A00120ull, 0xC000202002054008ull, 0xA004004888888822ull, 0x4450990000800020ull, + 0x544444444444A555ull, 0x02450A11252A4200ull, 0x5090011124009124ull, 0x020021910881252Aull, + 0x2023091000000000ull, 0x511280210200C042ull, 0x0051000622010228ull, 0x034050A222402201ull, + 0x101088914824A811ull, 0x4800090000000222ull, 0x88A0144200300002ull, 0x0100000000000402ull, + 0x0000000000040001ull, 0x10408855214C2122ull, 0x2081081142889040ull, 0x1444480440202002ull, + 0x2C0C64441220680Aull, 0x0000000006222112ull, 0x0010800010000000ull, 0x1000080002000000ull, + 0x01122A9020000000ull, 0x0000090000000000ull, 0x0000000000402202ull, 0x0020500802002600ull, + 0x0004044000010100ull, 0x0001028101880100ull, 0x0000040440000101ull, 0x350A812840001001ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0193[64] = { + 1u, 17u, 35u, 52u, 72u, 93u, 110u, 130u, 148u, 167u, 185u, 199u, 215u, 233u, 237u, 247u, + 257u, 273u, 291u, 300u, 306u, 314u, 327u, 333u, 339u, 344u, 349u, 353u, 361u, 371u, 377u, 382u, + 389u, 402u, 411u, 424u, 434u, 455u, 471u, 485u, 500u, 507u, 520u, 531u, 545u, 561u, 568u, 579u, + 582u, 584u, 601u, 614u, 625u, 643u, 651u, 654u, 657u, 666u, 668u, 672u, 680u, 685u, 693u, 698u, }; void recomp_unit_0193_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0193_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B08004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0193[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0193[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0193[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B08004; @@ -1114,7 +1021,6 @@ L_08B08200: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.gpr[18] = (aot_gpr_29 + static_cast(992)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[16] = (aot_gpr_29 + static_cast(1008)); if (branch_taken) { @@ -1138,7 +1044,6 @@ L_08B08224: goto L_08B08230; L_08B08230: aot_gpr_31 = (0x08B08238u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B08238u) goto L_08B08238; AOT_REGCACHE_SYNC_OUT(); return; L_08B08238: @@ -1201,9 +1106,7 @@ L_08B082A8: L_08B082B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B082D0; } @@ -1225,7 +1128,6 @@ L_08B082D0: goto L_08B082DC; L_08B082DC: aot_gpr_31 = (0x08B082E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B082E4u) goto L_08B082E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B082E4: @@ -1278,7 +1180,6 @@ L_08B0833C: L_08B0834C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-9979))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B08458; } @@ -1287,9 +1188,7 @@ L_08B0834C: L_08B08358: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1616))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[26])) && aot_fpr_20 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08390; } @@ -1318,9 +1217,7 @@ L_08B0837C: L_08B08390: aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1620))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(ctx.fpr[26])) && aot_fpr_22 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B083CC; } @@ -1349,9 +1246,7 @@ L_08B083B4: goto L_08B083CC; L_08B083CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[26])) && ctx.fpr[28] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08504; } @@ -1379,7 +1274,6 @@ L_08B083EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B083FC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0840C; } @@ -1403,9 +1297,7 @@ L_08B08418: AOT_REGCACHE_SYNC_OUT(); return; L_08B08424: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08504; } @@ -1432,7 +1324,6 @@ L_08B08440: L_08B08458: aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1616))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[26])) && aot_fpr_20 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1620))); if (branch_taken) { @@ -1462,9 +1353,7 @@ L_08B0847C: goto L_08B08490; L_08B08490: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(ctx.fpr[26])) && aot_fpr_22 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B084B8; } @@ -1489,9 +1378,7 @@ L_08B084B0: goto L_08B084B8; L_08B084B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[28]) || std::isnan(ctx.fpr[26])) && ctx.fpr[28] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08504; } @@ -1512,7 +1399,6 @@ L_08B084D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B084D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B084E8; } @@ -1538,7 +1424,6 @@ L_08B08504: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(617)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B08558; } @@ -1550,7 +1435,6 @@ L_08B08514: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_gpr_31 = (0x08B0852Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 625u, 0x08AFEC38u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0852Cu) goto L_08B0852C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0852C: @@ -1607,7 +1491,6 @@ L_08B0859C: AOT_REGCACHE_SYNC_OUT(); return; L_08B085AC: aot_gpr_31 = (0x08B085B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B085B4u) goto L_08B085B4; AOT_REGCACHE_SYNC_OUT(); return; L_08B085B4: @@ -1676,7 +1559,6 @@ L_08B0862C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0863C: aot_gpr_31 = (0x08B08644u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B08644u) goto L_08B08644; AOT_REGCACHE_SYNC_OUT(); return; L_08B08644: @@ -1767,7 +1649,6 @@ L_08B086E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B086F4: aot_gpr_31 = (0x08B086FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B086FCu) goto L_08B086FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B086FC: @@ -1801,7 +1682,6 @@ L_08B08728: AOT_REGCACHE_SYNC_OUT(); return; L_08B08734: aot_gpr_31 = (0x08B0873Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0873Cu) goto L_08B0873C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0873C: @@ -1890,7 +1770,6 @@ L_08B087EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B087FC: aot_gpr_31 = (0x08B08804u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0190_entry, 190u, 648u, 0x08AFEE24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B08804u) goto L_08B08804; AOT_REGCACHE_SYNC_OUT(); return; L_08B08804: @@ -2007,7 +1886,6 @@ L_08B088E0: } L_08B088EC: { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B08914; } @@ -2036,7 +1914,6 @@ L_08B08904: L_08B08914: aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B08940; } @@ -2073,7 +1950,6 @@ L_08B08940: } L_08B0894C: { const bool branch_taken = ctx.gpr[30] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B08968; } @@ -2096,9 +1972,7 @@ L_08B08968: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B089C8; } @@ -2149,9 +2023,7 @@ L_08B089E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08A40; } @@ -2202,9 +2074,7 @@ L_08B08A58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(356))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08AB8; } @@ -2279,9 +2149,7 @@ L_08B08AF8: L_08B08B04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08BBC; } @@ -2364,9 +2232,7 @@ L_08B08BAC: L_08B08BBC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(68))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08C74; } @@ -2449,9 +2315,7 @@ L_08B08C64: L_08B08C74: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B08D2C; } @@ -2556,7 +2420,17 @@ L_08B08D2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B08D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(144), ctx.gpr[18]); @@ -2612,11 +2486,20 @@ L_08B08E24: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31072))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B08E3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1728))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); @@ -2866,7 +2749,6 @@ L_08B0901C: aot_gpr_5 = (0u | 65535u); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B09040; } @@ -2884,7 +2766,6 @@ L_08B09030: } L_08B09040: aot_gpr_31 = (0x08B09048u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B09048u) goto L_08B09048; AOT_REGCACHE_SYNC_OUT(); return; L_08B09048: @@ -2914,7 +2795,6 @@ L_08B09078: ctx.gpr[23] = (aot_gpr_4 | 0u); aot_gpr_5 = (static_cast(ctx.gpr[30]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B09248; } @@ -2940,7 +2820,6 @@ L_08B090A0: goto L_08B092BC; L_08B090C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B090D0; } @@ -2960,7 +2839,6 @@ L_08B090D0: goto L_08B092BC; L_08B090EC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B090F8; } @@ -2980,7 +2858,6 @@ L_08B090F8: goto L_08B092BC; L_08B09114: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09120; } @@ -3000,7 +2877,6 @@ L_08B09120: goto L_08B092BC; L_08B0913C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09148; } @@ -3020,7 +2896,6 @@ L_08B09148: goto L_08B092BC; L_08B09164: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09170; } @@ -3040,7 +2915,6 @@ L_08B09170: goto L_08B092BC; L_08B0918C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09198; } @@ -3060,7 +2934,6 @@ L_08B09198: goto L_08B092BC; L_08B091B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B091C0; } @@ -3080,7 +2953,6 @@ L_08B091C0: goto L_08B092BC; L_08B091DC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B091E8; } @@ -3100,7 +2972,6 @@ L_08B091E8: goto L_08B092BC; L_08B09204: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09210; } @@ -3120,7 +2991,6 @@ L_08B09210: goto L_08B092BC; L_08B0922C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09238; } @@ -3181,7 +3051,17 @@ L_08B0926C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B092BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-704)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(664), ctx.gpr[16]); @@ -3219,11 +3099,20 @@ L_08B0932C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31104))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B09348: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1732))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_12)); @@ -3242,7 +3131,6 @@ L_08B09348: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09434; } @@ -3282,7 +3170,6 @@ L_08B09364: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09434; } @@ -3307,7 +3194,6 @@ L_08B09394: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09434; } @@ -3348,7 +3234,6 @@ L_08B093B4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09434; } @@ -3373,7 +3258,6 @@ L_08B093E8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09434; } @@ -3511,7 +3395,6 @@ L_08B0948C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B09CF0; } @@ -3532,7 +3415,6 @@ L_08B094A8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B09CE8; } @@ -3542,7 +3424,6 @@ L_08B094C0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(84))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B09CE8; } @@ -3603,7 +3484,6 @@ L_08B09528: goto L_08B09540; L_08B09540: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B09574; } @@ -3634,7 +3514,6 @@ L_08B09574: goto L_08B09578; L_08B09578: { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_08B0982C; } @@ -3647,7 +3526,6 @@ L_08B09580: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0982C; } @@ -3689,7 +3567,6 @@ L_08B0959C: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fpr[14] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -3776,7 +3653,6 @@ L_08B09698: L_08B096BC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B09824; } @@ -3815,7 +3691,6 @@ L_08B096C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0970C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B09824; } @@ -3825,7 +3700,6 @@ L_08B09714: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B09760; } @@ -3849,7 +3723,6 @@ L_08B0974C: ctx.gpr[21] = (ctx.gpr[21] & 255u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B09724; } @@ -3931,7 +3804,6 @@ L_08B097B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B09824: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09CE8; } @@ -3939,7 +3811,6 @@ L_08B09824: } L_08B0982C: { const bool branch_taken = static_cast(ctx.gpr[20]) <= 0; - // nop if (branch_taken) { goto L_08B09CE8; } @@ -3949,7 +3820,6 @@ L_08B09834: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(86)))))); aot_gpr_5 = (0u | 345u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B09CE8; } @@ -4099,9 +3969,7 @@ L_08B09868: ctx.fpr[16] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[15]; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B09958; } @@ -4113,9 +3981,7 @@ L_08B09930: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1736))); { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B09958; } @@ -4123,7 +3989,6 @@ L_08B09930: } L_08B09950: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09C7C; } @@ -4372,9 +4237,7 @@ L_08B09AE4: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B09BA0; } @@ -4460,7 +4323,6 @@ L_08B09B88: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(1640), std::bit_cast(aot_fpr_12)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B09BE4; } @@ -4472,9 +4334,7 @@ L_08B09BA0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B09BE4; } @@ -4484,9 +4344,7 @@ L_08B09BC0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(1640))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B09BE4; } @@ -4509,7 +4367,6 @@ L_08B09BE8: aot_fpr_12 = aot_fpr_12 / ctx.fpr[14]; ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(208))); goto L_08B09C14; @@ -4529,7 +4386,6 @@ L_08B09C14: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(276), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(280), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -4569,7 +4425,6 @@ L_08B09C7C: ctx.gpr[23] = (static_cast(static_cast(ctx.gpr[23]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[23]) < static_cast(ctx.gpr[20]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B09868; } @@ -4577,7 +4432,6 @@ L_08B09C7C: } L_08B09C94: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B09CE4; } @@ -4590,7 +4444,6 @@ L_08B09C9C: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B09CE4; } @@ -4615,7 +4468,6 @@ L_08B09CE4: goto L_08B09CE8; L_08B09CE8: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B0949C; } @@ -4644,7 +4496,17 @@ L_08B09CF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B09D30: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4692,7 +4554,6 @@ L_08B09DCC: } L_08B09DD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0A318; } @@ -4701,7 +4562,6 @@ L_08B09DD4: L_08B09DDC: ctx.gpr[9] = (0u + static_cast(-972)); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B09E18; } @@ -4742,7 +4602,6 @@ L_08B09E18: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B09E98; } @@ -4751,7 +4610,6 @@ L_08B09E18: L_08B09E40: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B09E98; } @@ -4848,7 +4706,6 @@ L_08B09F0C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), std::bit_cast(ctx.fpr[26])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(72), std::bit_cast(aot_fpr_20)); aot_gpr_31 = (0x08B09F80u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B09F80u) goto L_08B09F80; AOT_REGCACHE_SYNC_OUT(); return; L_08B09F80: @@ -4943,7 +4800,6 @@ L_08B09FD4: L_08B0A018: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(172))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B0A0B8; } @@ -4967,7 +4823,6 @@ L_08B0A024: AOT_REGCACHE_SYNC_OUT(); return; L_08B0A058: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0A070; } @@ -4998,7 +4853,6 @@ L_08B0A074: AOT_REGCACHE_SYNC_OUT(); return; L_08B0A090: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0A0B8; } @@ -5007,9 +4861,7 @@ L_08B0A090: L_08B0A098: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0A0B8; } @@ -5022,7 +4874,6 @@ L_08B0A0AC: goto L_08B0A0B8; L_08B0A0B8: { const bool branch_taken = static_cast(ctx.gpr[18]) <= 0; - // nop if (branch_taken) { goto L_08B0A300; } @@ -5079,7 +4930,6 @@ L_08B0A110: AOT_REGCACHE_SYNC_OUT(); return; L_08B0A13C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0A200; } @@ -5151,7 +5001,6 @@ L_08B0A1FC: goto L_08B0A200; L_08B0A200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0A2F8; } @@ -5161,7 +5010,6 @@ L_08B0A208: aot_gpr_4 = (ctx.gpr[19] + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(33) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0A290; } @@ -5173,11 +5021,20 @@ L_08B0A218: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31136))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0A230: aot_gpr_4 = (0u | 10u); aot_gpr_5 = (aot_gpr_4 | 0u); @@ -5253,7 +5110,6 @@ L_08B0A29C: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(141), static_cast(aot_gpr_5)); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(142), static_cast(aot_gpr_6)); if (branch_taken) { @@ -5314,7 +5170,17 @@ L_08B0A318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0A360: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -5338,7 +5204,6 @@ L_08B0A360: L_08B0A3A4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B0A3B4; } @@ -5350,7 +5215,6 @@ L_08B0A3B0: L_08B0A3B4: aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0A7B8; } @@ -5369,7 +5233,6 @@ L_08B0A3C0: } L_08B0A3D4: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A7B8; } @@ -5379,7 +5242,6 @@ L_08B0A3DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0A414; } @@ -5413,7 +5275,6 @@ L_08B0A404: } L_08B0A40C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A440; } @@ -5421,12 +5282,10 @@ L_08B0A40C: } L_08B0A414: aot_gpr_31 = (0x08B0A41Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0A41Cu) goto L_08B0A41C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0A41C: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08B0A440; } @@ -5434,7 +5293,6 @@ L_08B0A41C: } L_08B0A424: aot_gpr_31 = (0x08B0A42Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0A42Cu) goto L_08B0A42C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0A42C: @@ -5445,7 +5303,6 @@ L_08B0A42C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0A438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0A7B8; } @@ -5454,7 +5311,6 @@ L_08B0A438: L_08B0A440: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0A5CC; } @@ -5464,7 +5320,6 @@ L_08B0A44C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); ctx.gpr[21] = (0u | 2u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B0A5CC; } @@ -5474,7 +5329,6 @@ L_08B0A45C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 7u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5484,7 +5338,6 @@ L_08B0A46C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5494,7 +5347,6 @@ L_08B0A47C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5504,7 +5356,6 @@ L_08B0A48C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 10u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5514,7 +5365,6 @@ L_08B0A49C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5524,7 +5374,6 @@ L_08B0A4AC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 12u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5534,7 +5383,6 @@ L_08B0A4BC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 13u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5544,7 +5392,6 @@ L_08B0A4CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_6 = (0u | 14u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B0A4EC; } @@ -5554,7 +5401,6 @@ L_08B0A4DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A5CC; } @@ -5562,12 +5408,10 @@ L_08B0A4DC: } L_08B0A4EC: aot_gpr_31 = (0x08B0A4F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0A4F4u) goto L_08B0A4F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0A4F4: { const bool branch_taken = ctx.gpr[17] != aot_gpr_2; - // nop if (branch_taken) { goto L_08B0A5CC; } @@ -5634,7 +5478,6 @@ L_08B0A564: L_08B0A56C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B0A5B0; } @@ -5670,7 +5513,6 @@ L_08B0A5B0: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0A53C; } @@ -5678,7 +5520,6 @@ L_08B0A5B0: } L_08B0A5C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0A7B8; } @@ -5707,9 +5548,7 @@ L_08B0A5E8: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_20 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0A678; } @@ -5718,7 +5557,6 @@ L_08B0A5E8: L_08B0A60C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B0A678; } @@ -5727,7 +5565,6 @@ L_08B0A60C: L_08B0A618: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0A7B8; } @@ -5737,7 +5574,6 @@ L_08B0A624: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A7B8; } @@ -5746,7 +5582,6 @@ L_08B0A624: L_08B0A634: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B0A66C; } @@ -5777,7 +5612,6 @@ L_08B0A66C: L_08B0A678: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0A6E0; } @@ -5787,7 +5621,6 @@ L_08B0A684: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A6E0; } @@ -5797,7 +5630,6 @@ L_08B0A694: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A6E0; } @@ -5875,7 +5707,6 @@ L_08B0A724: L_08B0A72C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2276))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B0A7A4; } @@ -5933,7 +5764,6 @@ L_08B0A7A4: ctx.gpr[20] = (ctx.gpr[20] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0A6FC; } @@ -5958,7 +5788,17 @@ L_08B0A7B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0A7E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-560)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6002,7 +5842,6 @@ L_08B0A7E8: aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[14])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08B0A894; @@ -6012,7 +5851,6 @@ L_08B0A894: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7532), static_cast(aot_gpr_5)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7532))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0A8B0; } @@ -6067,7 +5905,6 @@ L_08B0A8F8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(72))); aot_gpr_5 = (aot_gpr_5 & 496u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0A91C; } @@ -6119,9 +5956,7 @@ L_08B0A940: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0A9C8; } @@ -6134,7 +5969,6 @@ L_08B0A968: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[24] = ctx.fpr[24] / aot_fpr_13; { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0A9C8; } @@ -6169,7 +6003,6 @@ L_08B0A9C0: L_08B0A9C8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7533))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0AA18; } @@ -6177,7 +6010,6 @@ L_08B0A9C8: } L_08B0A9D4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(480))); if (branch_taken) { @@ -6187,7 +6019,6 @@ L_08B0A9D4: } L_08B0A9E4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B0ABE8; @@ -6204,7 +6035,6 @@ L_08B0A9F4: L_08B0A9FC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B0ABE8; @@ -6220,7 +6050,6 @@ L_08B0AA10: } L_08B0AA18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[30]) || std::isnan(ctx.fpr[28])) && ctx.fpr[30] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B0ABE8; @@ -6233,7 +6062,6 @@ L_08B0AA28: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); aot_fpr_22 = aot_fpr_22 / aot_fpr_12; { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0AB68; } @@ -6246,9 +6074,7 @@ L_08B0AA44: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0AB68; } @@ -6268,7 +6094,6 @@ L_08B0AA78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0AAC4; } @@ -6291,7 +6116,6 @@ L_08B0AA8C: ctx.fpr[14] = ctx.fpr[14] + ctx.fpr[15]; aot_fpr_20 = aot_fpr_20 / ctx.fpr[14]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0AB68; } @@ -6301,7 +6125,6 @@ L_08B0AAC4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0AADC; } @@ -6323,7 +6146,6 @@ L_08B0AADC: aot_gpr_4 = (16230u << 16u); aot_gpr_4 = (aot_gpr_4 | 26214u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6340,7 +6162,6 @@ L_08B0AB04: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_20 = aot_fpr_20 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0AB68; } @@ -6350,7 +6171,6 @@ L_08B0AB28: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0AB5C; } @@ -6365,7 +6185,6 @@ L_08B0AB38: { const float fs = aot_fpr_20; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } aot_fpr_20 = aot_fpr_20 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0AB68; } @@ -6378,9 +6197,7 @@ L_08B0AB5C: goto L_08B0AB68; L_08B0AB68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0ABBC; } @@ -6388,9 +6205,7 @@ L_08B0AB68: } L_08B0AB78: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0ABA0; } @@ -6398,7 +6213,6 @@ L_08B0AB78: } L_08B0AB88: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B0ABE8; @@ -6415,7 +6229,6 @@ L_08B0AB98: L_08B0ABA0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B0ABE8; @@ -6435,7 +6248,6 @@ L_08B0ABBC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = aot_fpr_22; const float ft = aot_fpr_22; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B0ABE8; @@ -6453,9 +6265,7 @@ L_08B0ABE8: { const float fs = ctx.fpr[26]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[14] = std::bit_cast(0x7FC00000u); else ctx.fpr[14] = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0AD08; } @@ -6465,7 +6275,6 @@ L_08B0AC04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0AC84; } @@ -6476,7 +6285,6 @@ L_08B0AC14: aot_gpr_4 = (aot_gpr_4 | 39322u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1680))); if (branch_taken) { @@ -6494,7 +6302,6 @@ L_08B0AC30: } L_08B0AC38: { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B0AC4C; } @@ -6508,7 +6315,6 @@ L_08B0AC40: L_08B0AC4C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7533))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0AC7C; } @@ -6518,9 +6324,7 @@ L_08B0AC58: ctx.fpr[14] = std::bit_cast(std::bit_cast(aot_fpr_22) & 0x7FFFFFFFu); { const float fs = ctx.fpr[26]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0AC7C; } @@ -6562,7 +6366,6 @@ L_08B0ACA0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0ACF4; } @@ -6572,7 +6375,6 @@ L_08B0ACB0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0ACD4; } @@ -6583,7 +6385,6 @@ L_08B0ACC0: aot_gpr_5 = (0u | 192u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0ACF4; } @@ -6608,9 +6409,7 @@ L_08B0ACF4: goto L_08B0AD08; L_08B0AD08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_22) || std::isnan(ctx.fpr[28])) && aot_fpr_22 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0AD28; } @@ -6618,9 +6417,7 @@ L_08B0AD08: } L_08B0AD18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(ctx.fpr[28])) && ctx.fpr[24] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B004; } @@ -6707,7 +6504,6 @@ L_08B0AD28: ctx.fpr[24] = std::bit_cast(aot_gpr_5); ctx.gpr[20] = (aot_gpr_29 + static_cast(80)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_29 + static_cast(96)); if (branch_taken) { @@ -6718,7 +6514,6 @@ L_08B0AD28: L_08B0ADA4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7532))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0ADFC; } @@ -6768,7 +6563,6 @@ L_08B0ADB0: L_08B0ADF0: aot_gpr_4 = (0u | 1u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0AE58; } @@ -6777,7 +6571,6 @@ L_08B0ADF0: L_08B0ADFC: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7533))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0AE58; } @@ -6872,7 +6665,6 @@ L_08B0AE58: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0AE9C; } @@ -6895,9 +6687,7 @@ L_08B0AE88: goto L_08B0AE9C; L_08B0AE9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0AEB4; } @@ -6946,7 +6736,6 @@ L_08B0AEB4: goto L_08B0AED8; L_08B0AED8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0AEF0; } @@ -6967,7 +6756,6 @@ L_08B0AEE0: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0AF2C; } @@ -6975,9 +6763,7 @@ L_08B0AEE0: } L_08B0AEF0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0AF08; } @@ -7221,7 +7007,17 @@ L_08B0B004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0B04C: aot_gpr_29 = (aot_gpr_29 + static_cast(-480)); { const std::uint32_t aot_run_words[15]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -7270,7 +7066,6 @@ L_08B0B04C: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[14])); ctx.fpr[16] = std::bit_cast(std::bit_cast(ctx.fpr[15])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_20)) && aot_fpr_13 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (0u | 1u); goto L_08B0B108; @@ -7280,7 +7075,6 @@ L_08B0B108: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(7534), static_cast(aot_gpr_6)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7534))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B0B124; } @@ -7298,7 +7092,6 @@ L_08B0B118: L_08B0B124: aot_gpr_6 = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[30]) || std::isnan(ctx.fpr[28])) && ctx.fpr[30] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (0u | 1u); goto L_08B0B138; @@ -7319,7 +7112,6 @@ L_08B0B14C: L_08B0B150: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B0B164; } @@ -7355,7 +7147,6 @@ L_08B0B184: } L_08B0B18C: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B0B19C; } @@ -7394,9 +7185,7 @@ L_08B0B19C: goto L_08B0B1B0; L_08B0B1B0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[28])) && aot_fpr_12 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B234; } @@ -7449,7 +7238,6 @@ L_08B0B21C: L_08B0B234: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7535))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0B284; } @@ -7457,7 +7245,6 @@ L_08B0B234: } L_08B0B240: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[30])); if (branch_taken) { @@ -7467,7 +7254,6 @@ L_08B0B240: } L_08B0B250: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[24]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_08B0B43C; @@ -7484,7 +7270,6 @@ L_08B0B260: L_08B0B268: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26]) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[24]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_08B0B43C; @@ -7500,7 +7285,6 @@ L_08B0B27C: } L_08B0B284: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[17]) || std::isnan(ctx.fpr[28])) && ctx.fpr[17] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[24]; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } goto L_08B0B43C; @@ -7513,7 +7297,6 @@ L_08B0B294: aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fpr[24] = ctx.fpr[24] / aot_fpr_12; { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0B3BC; } @@ -7522,7 +7305,6 @@ L_08B0B294: L_08B0B2B0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(604))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B0B2C4; @@ -7533,9 +7315,7 @@ L_08B0B2C4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B3BC; } @@ -7557,7 +7337,6 @@ L_08B0B2F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0B338; } @@ -7575,7 +7354,6 @@ L_08B0B308: aot_fpr_13 = aot_fpr_13 + ctx.fpr[14]; aot_fpr_22 = aot_fpr_22 / aot_fpr_13; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0B3BC; } @@ -7587,9 +7365,7 @@ L_08B0B338: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(188))); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B37C; } @@ -7604,7 +7380,6 @@ L_08B0B358: { const float fs = aot_fpr_22; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } aot_fpr_22 = aot_fpr_22 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0B3BC; } @@ -7614,7 +7389,6 @@ L_08B0B37C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0B3B0; } @@ -7629,7 +7403,6 @@ L_08B0B38C: { const float fs = aot_fpr_22; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_22 = std::bit_cast(0x7FC00000u); else aot_fpr_22 = fs * ft; } aot_fpr_22 = aot_fpr_22 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0B3BC; } @@ -7642,9 +7415,7 @@ L_08B0B3B0: goto L_08B0B3BC; L_08B0B3BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B410; } @@ -7652,9 +7423,7 @@ L_08B0B3BC: } L_08B0B3CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B3F4; } @@ -7662,9 +7431,7 @@ L_08B0B3CC: } L_08B0B3DC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B438; } @@ -7681,9 +7448,7 @@ L_08B0B3EC: L_08B0B3F4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_22) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B438; } @@ -7703,9 +7468,7 @@ L_08B0B410: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B438; } @@ -7723,9 +7486,7 @@ L_08B0B43C: { const float fs = ctx.fpr[26]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_13 = aot_fpr_13 + ctx.fpr[14]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B4F8; } @@ -7735,7 +7496,6 @@ L_08B0B458: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0B4BC; } @@ -7754,9 +7514,7 @@ L_08B0B474: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B4B8; } @@ -7766,7 +7524,6 @@ L_08B0B48C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u | 179u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0B4BC; } @@ -7776,7 +7533,6 @@ L_08B0B49C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(86)))))); aot_gpr_5 = (0u | 178u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0B4BC; } @@ -7825,7 +7581,6 @@ L_08B0B4EC: goto L_08B0B4F0; L_08B0B4F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0B548; } @@ -7833,9 +7588,7 @@ L_08B0B4F0: } L_08B0B4F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B548; } @@ -7857,9 +7610,7 @@ L_08B0B514: L_08B0B524: { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B548; } @@ -7873,7 +7624,6 @@ L_08B0B538: goto L_08B0B548; L_08B0B548: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(ctx.fpr[28])) && ctx.fpr[24] == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[22] = (ctx.gpr[20] | 0u); if (branch_taken) { @@ -7883,9 +7633,7 @@ L_08B0B548: } L_08B0B558: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(ctx.fpr[28])) && aot_fpr_20 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0B7B0; } @@ -8154,7 +7902,6 @@ L_08B0B674: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_4 = (0u | 1u); { const bool branch_taken = ctx.gpr[22] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B0B6D4; } @@ -8165,7 +7912,6 @@ L_08B0B6C0: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7536))); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0B768; } @@ -8361,7 +8107,17 @@ L_08B0B7B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0B7F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-672)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8387,7 +8143,6 @@ L_08B0B7F4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(576), aot_gpr_5); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(568), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(572), aot_gpr_6); if (branch_taken) { @@ -8400,7 +8155,6 @@ L_08B0B878: aot_fpr_22 = std::bit_cast(0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -8416,7 +8170,6 @@ L_08B0B894: AOT_REGCACHE_SYNC_OUT(); return; L_08B0B8A0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0BF34; } @@ -8429,7 +8182,6 @@ L_08B0B8A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0B8B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0BF34; } @@ -8439,7 +8191,6 @@ L_08B0B8B8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(533)))))); ctx.gpr[23] = (0u | 1u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B0B8E4; } @@ -8448,7 +8199,6 @@ L_08B0B8B8: L_08B0B8C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B0BF34; } @@ -8458,7 +8208,6 @@ L_08B0B8D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0BF34; } @@ -8607,7 +8356,6 @@ L_08B0B9B0: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.gpr[30] = (aot_gpr_29 + static_cast(16)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(560), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -8639,9 +8387,7 @@ L_08B0BA08: AOT_REGCACHE_SYNC_OUT(); return; L_08B0BA28: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0BA5C; } @@ -8839,9 +8585,7 @@ L_08B0BA5C: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(104), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0BB2C; } @@ -8918,7 +8662,6 @@ L_08B0BB90: aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[23] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(572))); if (branch_taken) { @@ -8936,7 +8679,6 @@ L_08B0BBBC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); goto L_08B0BD64; @@ -9132,9 +8874,7 @@ L_08B0BD84: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0BF34; } @@ -9150,9 +8890,7 @@ L_08B0BDA8: { const float fs = aot_fpr_12; const float ft = ctx.fpr[30]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0BF34; } @@ -9340,7 +9078,17 @@ L_08B0BF34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0BF7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2234u << 16u); @@ -9361,14 +9109,23 @@ L_08B0BF98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0BFA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1968))); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B0BFEC; } @@ -9376,7 +9133,6 @@ L_08B0BFA4: } L_08B0BFC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0BFF4; } @@ -9397,7 +9153,6 @@ L_08B0BFD0: AOT_REGCACHE_SYNC_OUT(); return; L_08B0BFE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0BFF8; } @@ -9405,7 +9160,6 @@ L_08B0BFE4: } L_08B0BFEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 7u, 0x08B0C048u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9416,7 +9170,6 @@ L_08B0BFF4: goto L_08B0BFF8; L_08B0BFF8: aot_gpr_31 = (0x08B0C000u); - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0175_entry, 175u, 681u, 0x08AC2E24u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0194.cpp b/profiles/vcs/generated/generated_unit_0194.cpp index 163e0a4..c322139 100644 --- a/profiles/vcs/generated/generated_unit_0194.cpp +++ b/profiles/vcs/generated/generated_unit_0194.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0194[4094] = { - 1, 0, 2, 0, 3, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 12, 0, 0, 13, 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 0, 22, 0, 0, - 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 0, 26, 0, 0, 0, 0, 27, 0, 0, 28, 0, 29, 0, 0, 30, 0, 31, 0, 0, 32, 0, 33, 0, 34, 0, 0, 0, 35, 0, 36, - 0, 37, 0, 0, 0, 38, 0, 39, 0, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 0, 0, - 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 59, 0, 0, 60, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65, 0, 66, 0, 67, 0, 68, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 71, 0, 72, 0, 0, 0, 73, 0, 74, 0, 0, - 75, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, 81, - 0, 82, 0, 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 0, 99, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 106, 0, 0, 107, 0, 108, 0, 109, 0, 0, 0, 110, 0, 0, 0, 0, 0, 111, 0, 0, 112, - 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 117, 0, 0, 118, 0, 119, 0, 120, 121, 0, 122, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 127, 0, 0, - 0, 0, 128, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, - 133, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, 138, 0, 0, 0, 0, 139, 0, - 140, 141, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 150, 0, 0, 151, 0, 0, 152, 0, 0, 0, 0, 0, 0, 153, - 0, 154, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, 0, 159, 0, 0, - 160, 0, 161, 0, 0, 162, 0, 163, 0, 0, 164, 0, 165, 0, 166, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, 0, 0, 170, 171, - 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 174, 0, 175, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, - 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, 181, 0, 182, 0, 183, 0, 0, 184, 0, 185, 0, 186, 0, 0, 187, 188, 0, 0, 0, 0, 0, 189, - 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, 192, 0, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 197, - 0, 198, 0, 0, 199, 0, 200, 0, 0, 201, 0, 202, 0, 203, 0, 204, 0, 0, 205, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, - 0, 0, 0, 208, 0, 0, 209, 0, 210, 0, 0, 211, 0, 212, 0, 213, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, - 0, 216, 0, 217, 0, 218, 0, 219, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 224, 0, - 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 229, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, 237, 0, 238, 0, 0, 239, 0, 0, 0, 240, - 241, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 0, 0, 248, 0, 249, - 0, 250, 0, 0, 251, 0, 0, 0, 252, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 257, 0, 0, - 258, 0, 259, 0, 0, 0, 260, 0, 261, 0, 262, 0, 0, 263, 0, 0, 0, 264, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 267, - 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 273, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 275, 0, 276, 277, 0, 0, 278, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, - 0, 285, 0, 286, 0, 287, 0, 0, 288, 0, 0, 289, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, - 294, 0, 0, 295, 0, 296, 0, 0, 0, 297, 0, 298, 0, 299, 0, 0, 300, 0, 0, 0, 301, 302, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 308, 0, 0, 0, 309, 0, 0, 310, - 0, 0, 0, 311, 0, 312, 0, 0, 313, 0, 314, 0, 315, 0, 0, 316, 0, 0, 317, 0, 318, 0, 319, 0, 0, 320, 0, 0, 0, 0, 0, 321, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 323, 0, 0, 324, 0, 325, 0, 326, 0, 0, 327, 0, 0, 328, 0, 0, 329, 0, - 0, 330, 0, 0, 331, 0, 0, 332, 0, 333, 0, 0, 334, 0, 335, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 339, 0, 340, 0, - 341, 0, 342, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 344, 0, 345, 0, 0, 0, 346, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 0, 0, 349, 0, 0, 0, 350, 0, 351, 0, 0, 0, 0, 352, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 0, 356, - 0, 357, 0, 0, 0, 0, 358, 359, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 362, 0, 363, 0, 0, 0, 0, 364, - 365, 0, 0, 0, 0, 366, 0, 367, 0, 0, 0, 0, 0, 368, 369, 0, 0, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 372, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, - 0, 377, 0, 0, 0, 0, 0, 378, 0, 379, 0, 380, 0, 0, 381, 0, 382, 0, 0, 383, 0, 0, 384, 0, 0, 385, 386, 0, 387, 0, 388, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 391, 0, 0, 0, 0, 392, - 0, 0, 393, 0, 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 0, 399, 0, 400, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 403, 0, 404, 0, - 0, 405, 0, 406, 0, 0, 0, 407, 0, 408, 409, 0, 0, 0, 410, 0, 0, 411, 0, 412, 0, 413, 0, 0, 414, 0, 0, 415, 0, 416, 417, 0, - 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 0, 0, 0, 0, 424, 425, 0, 0, 426, 0, 0, 427, 0, 0, - 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 430, 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 434, 0, 435, - 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, 438, 0, 439, 0, 0, 440, 0, 441, 0, 0, 0, 442, 0, 443, 0, 444, 0, 445, 0, 0, - 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 452, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 456, 0, 0, 0, 457, 0, 458, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 460, 0, 0, 461, 0, 462, 463, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 468, 0, 469, 0, 470, 0, 471, 0, 472, 0, 473, 0, 474, - 0, 475, 0, 476, 0, 477, 0, 478, 0, 479, 0, 480, 0, 481, 0, 0, 0, 482, 0, 0, 483, 0, 484, 0, 485, 0, 0, 486, 0, 0, 487, 0, - 0, 488, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 493, 494, 0, 0, 0, 495, 0, - 0, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 505, 0, 506, 0, 507, 0, 508, 0, 509, 0, 510, 0, 511, 0, 512, 0, 0, 513, - 0, 514, 0, 0, 0, 0, 515, 0, 516, 0, 0, 517, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 520, 0, 0, 0, 521, 0, 522, 0, 0, 0, - 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 527, 0, 528, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 537, 0, 538, - 0, 0, 539, 0, 540, 0, 0, 0, 0, 541, 0, 542, 0, 0, 543, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 547, 0, 548, 0, - 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, - 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 0, 559, 0, 560, 0, 561, 0, 562, 0, 0, 0, 0, 563, 0, 564, - 0, 565, 0, 566, 0, 0, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, 573, 574, 0, 0, 575, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 0, 578, 0, 579, 0, 580, 0, 581, 0, 582, 583, 0, 584, 0, 0, 0, 0, 0, 0, - 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 0, 588, 0, 589, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, - 0, 592, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 595, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 601, 0, 0, 0, 0, 602, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 605, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 610, 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, - 0, 613, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 616, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 619, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, - 626, 0, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, 0, 0, 629, 0, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, - 638, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 642, 0, 0, - 643, 0, 0, 644, 0, 0, 645, 0, 0, 646, 0, 0, 647, 0, 0, 648, 0, 649, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 651, 0, 652, 0, 0, 0, 0, 653, 0, 654, 0, 0, 0, 0, 655, 0, 656, 657, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 659, 0, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 663, 0, 664, 0, 0, 665, 0, 0, 0, 0, 0, - 666, 0, 0, 0, 0, 0, 667, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, - 0, 671, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 674, 0, 675, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 677, - 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, 683, 0, 0, 684, - 0, 685, 0, 686, 0, 687, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 691, 0, - 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 0, 0, 695, 0, 696, 0, 0, 0, 0, 0, 0, 697, 0, 698, 0, 699, 0, 700, 0, - 701, 0, 0, 702, 0, 703, 0, 0, 0, 704, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 0, - 0, 0, 708, 0, 0, 0, 0, 709, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 714, 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 722, 0, 0, 0, 723, 724, 0, 0, 725, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 727, 728, 0, 0, 0, 0, 729, 0, 730, 0, 0, 0, - 0, 731, 0, 0, 0, 732, 0, 0, 0, 733, 0, 0, 0, 734, 0, 735, 0, 736, 0, 737, 0, 738, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, - 0, 740, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 743, 0, 0, 0, 0, 0, 744, 0, 0, 0, 745, 0, 746, 0, - 0, 747, 0, 748, 0, 749, 0, 750, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, - 754, 0, 0, 0, 755, 0, 0, 0, 0, 0, 756, 0, 0, 757, 0, 0, 0, 758, 0, 759, 0, 0, 0, 0, 0, 0, 760, 0, 761, 0, 762, 0, - 763, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 767, 0, 768, - 0, 769, 0, 770, 0, 771, 0, 772, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 775, 776, 0, 0, 777, 0, - 0, 0, 778, 0, 0, 0, 0, 0, 0, 779, 780, 0, 0, 0, 0, 781, 0, 782, 0, 0, 0, 0, 783, 0, 0, 0, 784, 0, 0, 0, 785, 0, - 0, 0, 786, 0, 787, 0, 788, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, - 791, 0, 792, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 795, 0, 796, 0, - 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 799, 0, 0, 0, 0, 0, 800, 0, 801, 0, 0, 0, 0, - 0, 802, 0, 0, 0, 0, 0, 0, 0, 803, 0, 804, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 807, - 0, 0, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 809, 0, 810, 0, 0, 811, 0, 812, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, - 0, 0, 0, 0, 819, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, 823, 0, 824, 0, 825, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 826, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 829, 0, 830, 0, 0, 831, 0, 832, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 835, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 837, 0, 838, 0, 839, 0, 0, 840, 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 843, - 0, 844, 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 846, 0, 0, 0, 847, 0, - 0, 0, 0, 0, 848, 0, 0, 849, 0, 850, 0, 851, 0, 0, 852, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 854, 0, 0, 0, 855, 0, 0, 0, 0, 0, 856, 0, 0, 0, 857, 0, 858, 0, 0, 859, 0, 860, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 0, 0, 0, 0, 862, 0, 863, 0, 864, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 866, 0, 0, 0, 867, 0, 0, 0, 0, 0, 868, 0, 0, 0, 869, 0, 870, 0, 0, 0, 871, - 0, 872, 0, 873, 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, - 876, 0, 0, 0, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, 879, 0, 880, 0, 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 882, 0, 883, 0, 884, 0, 885, 0, 886, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 889, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 891, 0, 0, 0, 892, 0, 0, 0, 0, 0, 893, 0, 894, 0, 0, 0, 895, 0, 0, - 0, 896, 0, 897, 0, 0, 898, 0, 899, 0, 0, 0, 900, 0, 901, 0, 902, 0, 903, 0, 0, 0, 904, 0, 905, 0, 0, 906, 0, 0, 0, 0, - 0, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 909, 0, 910, 0, 911, 0, 0, 912, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 913, 0, 914, 0, 915, 0, 916, 0, 0, 0, 917, 0, 918, 0, 919, 0, 920, 0, 0, 0, 921, 0, 922, 0, 0, 923, 0, 924, - 0, 925, 0, 926, 0, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, 0, 0, 928, 0, 929, 0, 0, 0, 0, 0, 0, 0, 0, 930, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0194[64] = { + 0x20152A0200848895ull, 0x000010102A004500ull, 0x009554A2A2A5290Aull, 0x0300880005000054ull, + 0x0028054800801004ull, 0x904400A128A41154ull, 0x0080802001554822ull, 0x0152040048440804ull, + 0x0002000290454810ull, 0x2208020805A92008ull, 0x4224201105080044ull, 0x8124442001091013ull, + 0xC22254A52900400Aull, 0x832A544891290080ull, 0x040CAA52A0892900ull, 0x4A0024AA4002A948ull, + 0x89514A4020C10410ull, 0x29008312A2948041ull, 0x1060484481062545ull, 0x4804192A5290089Aull, + 0x9128024008312A29ull, 0x492A420082549528ull, 0x0431440558215292ull, 0x851010C288086144ull, + 0x48200208009060A1ull, 0x8440200056494A82ull, 0x692A468A52429554ull, 0x24C0501020200080ull, + 0x2A8A5110A1222108ull, 0x5110110044024540ull, 0x00008100034A0000ull, 0x49522AAAAAA82010ull, + 0x089089084620102Aull, 0x1444294295554480ull, 0xAAAA254004021002ull, 0x1008400852214A14ull, + 0xA154282000204010ull, 0x02D5540009A8550Aull, 0x0401504208006922ull, 0x0024000043004010ull, + 0x120054824124120Aull, 0x0554824124120A00ull, 0x2080020908000480ull, 0x008D0A14000A9249ull, + 0x8002014104A22220ull, 0x94411010820A0842ull, 0x550289044042082Aull, 0x04002A841000A229ull, + 0x1430226200155580ull, 0x51044042082AA222ull, 0x540A2411010820AAull, 0x4C4002AAB0008005ull, + 0x0400015444428604ull, 0x0A08800150400015ull, 0x002A500882010A02ull, 0x054A011040214040ull, + 0x01140800A5400880ull, 0x44000012810014A8ull, 0x0A51044000014A90ull, 0x8A20880000254100ull, + 0x002A80411000004Aull, 0x2282280084105540ull, 0x04A880020945514Aull, 0x2014100AA5154550ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0194[64] = { + 1u, 17u, 25u, 47u, 56u, 65u, 82u, 94u, 105u, 115u, 128u, 140u, 154u, 172u, 190u, 208u, + 225u, 241u, 258u, 275u, 294u, 311u, 330u, 349u, 365u, 377u, 393u, 418u, 428u, 446u, 459u, 466u, + 488u, 503u, 523u, 539u, 553u, 565u, 585u, 598u, 605u, 620u, 635u, 643u, 659u, 671u, 685u, 701u, + 714u, 731u, 747u, 763u, 778u, 791u, 802u, 814u, 826u, 837u, 848u, 861u, 872u, 882u, 896u, 913u, }; void recomp_unit_0194_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0194_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B0C000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0194[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0194[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0194[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B0C000; @@ -1107,12 +1014,10 @@ L_08B0C000: goto L_08B0C008; L_08B0C008: aot_gpr_31 = (0x08B0C010u); - // nop goto L_08B0C48C; L_08B0C010: aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0C048; } @@ -1153,7 +1058,17 @@ L_08B0C048: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C05C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -1234,7 +1149,17 @@ L_08B0C128: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C138: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1278,7 +1203,17 @@ L_08B0C190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C1B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[22]); @@ -1305,7 +1240,6 @@ L_08B0C1B0: } L_08B0C204: aot_gpr_31 = (0x08B0C20Cu); - // nop goto L_08B0C4A0; L_08B0C20C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1968))); @@ -1322,7 +1256,6 @@ L_08B0C220: AOT_REGCACHE_SYNC_OUT(); return; L_08B0C22C: aot_gpr_31 = (0x08B0C234u); - // nop goto L_08B0C5FC; L_08B0C234: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -1332,7 +1265,6 @@ L_08B0C234: AOT_REGCACHE_SYNC_OUT(); return; L_08B0C240: aot_gpr_31 = (0x08B0C248u); - // nop goto L_08B0C638; L_08B0C248: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -1342,7 +1274,6 @@ L_08B0C248: AOT_REGCACHE_SYNC_OUT(); return; L_08B0C254: aot_gpr_31 = (0x08B0C25Cu); - // nop goto L_08B0C7D0; L_08B0C25C: aot_gpr_31 = (0x08B0C264u); @@ -1357,7 +1288,6 @@ L_08B0C264: AOT_REGCACHE_SYNC_OUT(); return; L_08B0C274: aot_gpr_31 = (0x08B0C27Cu); - // nop goto L_08B0C838; L_08B0C27C: aot_gpr_31 = (0x08B0C284u); @@ -1372,7 +1302,6 @@ L_08B0C284: AOT_REGCACHE_SYNC_OUT(); return; L_08B0C294: aot_gpr_31 = (0x08B0C29Cu); - // nop goto L_08B0C87C; L_08B0C29C: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -1382,11 +1311,9 @@ L_08B0C29C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0C2A8: aot_gpr_31 = (0x08B0C2B0u); - // nop goto L_08B0C4A0; L_08B0C2B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0C2DC; } @@ -1394,7 +1321,6 @@ L_08B0C2B0: } L_08B0C2B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0C2C8; } @@ -1402,7 +1328,6 @@ L_08B0C2B8: } L_08B0C2C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0C45C; } @@ -1410,12 +1335,10 @@ L_08B0C2C0: } L_08B0C2C8: aot_gpr_31 = (0x08B0C2D0u); - // nop goto L_08B0C4A0; L_08B0C2D0: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B0C3E4; } @@ -1436,7 +1359,6 @@ L_08B0C2DC: goto L_08B0C4A0; L_08B0C308: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0C360; } @@ -1444,7 +1366,6 @@ L_08B0C308: } L_08B0C310: aot_gpr_31 = (0x08B0C318u); - // nop goto L_08B0C554; L_08B0C318: aot_gpr_4 = (16384u << 16u); @@ -1472,7 +1393,6 @@ L_08B0C318: } L_08B0C360: aot_gpr_31 = (0x08B0C368u); - // nop goto L_08B0C554; L_08B0C368: aot_gpr_4 = (16448u << 16u); @@ -1571,7 +1491,17 @@ L_08B0C45C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C48C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1968))); jump_target = aot_gpr_31; @@ -1579,21 +1509,51 @@ L_08B0C48C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C498: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(1972), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C4A0: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1972))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C4A8: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); ctx.gpr[6] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); @@ -1607,14 +1567,34 @@ L_08B0C4A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C4CC: jump_target = aot_gpr_31; aot_gpr_2 = (ctx.gpr[28] + static_cast(10440)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C4D4: { std::uint32_t aot_run_words[3]{}; aot_mem.aot_direct_load32_block(aot_gpr_4 + static_cast(0), aot_run_words); @@ -1635,28 +1615,68 @@ L_08B0C4D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C508: jump_target = aot_gpr_31; aot_gpr_2 = (ctx.gpr[28] + static_cast(10448)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C510: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(1976), static_cast(aot_gpr_4)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C518: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1976))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C520: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1679,19 +1699,38 @@ L_08B0C548: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C554: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1980))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C55C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B0C56Cu); - // nop goto L_08B0C748; L_08B0C56C: aot_gpr_31 = (0x08B0C574u); @@ -1705,13 +1744,22 @@ L_08B0C574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C580: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_31 = (0x08B0C594u); - // nop goto L_08B0C554; L_08B0C594: aot_gpr_31 = (0x08B0C59Cu); @@ -1732,7 +1780,17 @@ L_08B0C59C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C5C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1755,14 +1813,34 @@ L_08B0C5F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C5FC: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(1984))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C604: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1785,42 +1863,102 @@ L_08B0C62C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C638: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1988))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C640: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(1992), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C648: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1992))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C650: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(1996), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C658: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1996))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C660: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -1862,7 +2000,17 @@ L_08B0C6BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C6DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -1901,12 +2049,21 @@ L_08B0C72C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C748: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B0C758u); - // nop goto L_08B0C4A0; L_08B0C758: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(1968))); @@ -1923,7 +2080,17 @@ L_08B0C76C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C778: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(2000), static_cast(aot_gpr_4)); @@ -1955,21 +2122,51 @@ L_08B0C7C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C7D0: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(2000))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C7D8: jump_target = aot_gpr_31; aot_gpr_2 = (ctx.gpr[28] + static_cast(10464)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C7E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(2001), static_cast(aot_gpr_4)); @@ -2001,21 +2198,51 @@ L_08B0C82C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C838: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(2001))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C840: jump_target = aot_gpr_31; aot_gpr_2 = (ctx.gpr[28] + static_cast(10468)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C848: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2038,14 +2265,34 @@ L_08B0C870: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C87C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(2004))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C884: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2087,7 +2334,17 @@ L_08B0C8C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C90C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31, ctx.gpr[6]}; @@ -2154,7 +2411,17 @@ L_08B0C98C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0C9A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -2221,7 +2488,6 @@ L_08B0CA4C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0CA60: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0CA80; } @@ -2258,7 +2524,17 @@ L_08B0CA90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CAB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2270,7 +2546,6 @@ L_08B0CAB4: L_08B0CAC8: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0CB00; } @@ -2296,7 +2571,6 @@ L_08B0CAE4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0CAF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0CB04; } @@ -2312,7 +2586,17 @@ L_08B0CB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CB10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2348,7 +2632,17 @@ L_08B0CB4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CB60: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -2432,7 +2726,17 @@ L_08B0CC0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CC38: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2444,7 +2748,6 @@ L_08B0CC38: L_08B0CC60: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B0CCB0; } @@ -2548,7 +2851,17 @@ L_08B0CCFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CD1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2561,7 +2874,6 @@ L_08B0CD1C: L_08B0CD40: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0CDCC; } @@ -2575,7 +2887,6 @@ L_08B0CD4C: L_08B0CD54: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0CDB0; } @@ -2619,7 +2930,6 @@ L_08B0CD98: } L_08B0CDA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0CDE0; } @@ -2674,7 +2984,17 @@ L_08B0CDE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CDFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2686,7 +3006,6 @@ L_08B0CDFC: L_08B0CE20: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B0CEAC; } @@ -2723,7 +3042,6 @@ L_08B0CE5C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); if (branch_taken) { @@ -2804,7 +3122,17 @@ L_08B0CECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0CEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2817,7 +3145,6 @@ L_08B0CEE8: L_08B0CF0C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0CF34; } @@ -2831,7 +3158,6 @@ L_08B0CF18: L_08B0CF20: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0CF3C; } @@ -2839,7 +3165,6 @@ L_08B0CF20: } L_08B0CF2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0CF94; } @@ -2903,7 +3228,6 @@ L_08B0CF94: L_08B0CF9C: aot_gpr_4 = (static_cast(aot_gpr_2) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0CFEC; } @@ -2932,7 +3256,6 @@ L_08B0CFB4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0CFE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0D058; } @@ -2996,7 +3319,17 @@ L_08B0D05C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D074: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3009,7 +3342,6 @@ L_08B0D074: L_08B0D098: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0D0D8; } @@ -3023,7 +3355,6 @@ L_08B0D0A4: L_08B0D0AC: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0D0E0; } @@ -3086,7 +3417,17 @@ L_08B0D100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D118: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3099,7 +3440,6 @@ L_08B0D118: L_08B0D13C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0D17C; } @@ -3113,7 +3453,6 @@ L_08B0D148: L_08B0D150: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0D184; } @@ -3176,7 +3515,17 @@ L_08B0D1A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D1BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3189,7 +3538,6 @@ L_08B0D1BC: L_08B0D1E0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0D220; } @@ -3203,7 +3551,6 @@ L_08B0D1EC: L_08B0D1F4: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0D228; } @@ -3266,7 +3613,17 @@ L_08B0D248: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D260: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3279,7 +3636,6 @@ L_08B0D260: L_08B0D27C: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0D2D8; } @@ -3306,7 +3662,6 @@ L_08B0D298: L_08B0D2AC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0D2D4; } @@ -3340,7 +3695,17 @@ L_08B0D2D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D2F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3352,7 +3717,6 @@ L_08B0D2F0: goto L_08B0D304; L_08B0D304: aot_gpr_31 = (0x08B0D30Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0D30Cu) goto L_08B0D30C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0D30C: @@ -3372,7 +3736,17 @@ L_08B0D31C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D32C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3385,7 +3759,6 @@ L_08B0D32C: L_08B0D350: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0D38C; } @@ -3399,7 +3772,6 @@ L_08B0D35C: L_08B0D364: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0D394; } @@ -3460,7 +3832,17 @@ L_08B0D3B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D3C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3473,7 +3855,6 @@ L_08B0D3C8: L_08B0D3EC: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B0D42C; } @@ -3487,7 +3868,6 @@ L_08B0D3F8: L_08B0D400: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0D434; } @@ -3550,7 +3930,17 @@ L_08B0D454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D46C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3607,7 +3997,6 @@ L_08B0D4E0: L_08B0D4F0: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B0D514; } @@ -3639,7 +4028,6 @@ L_08B0D514: } L_08B0D520: aot_gpr_31 = (0x08B0D528u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0D528u) goto L_08B0D528; AOT_REGCACHE_SYNC_OUT(); return; L_08B0D528: @@ -3663,7 +4051,6 @@ L_08B0D53C: } L_08B0D548: aot_gpr_31 = (0x08B0D550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0D550u) goto L_08B0D550; AOT_REGCACHE_SYNC_OUT(); return; L_08B0D550: @@ -3689,7 +4076,17 @@ L_08B0D564: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D57C: aot_gpr_4 = (0u | 51u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10472), static_cast(aot_gpr_4)); @@ -3704,13 +4101,22 @@ L_08B0D57C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D5A4: aot_gpr_4 = (0u | 254u); aot_mem.aot_direct_store8(ctx.gpr[7] + static_cast(0), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 11 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0D5E0; } @@ -3749,7 +4155,6 @@ L_08B0D5D4: L_08B0D5E0: aot_gpr_4 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0D630; } @@ -3776,7 +4181,6 @@ L_08B0D5F8: L_08B0D604: aot_gpr_4 = (0u | 6u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B0D61C; } @@ -3806,7 +4210,6 @@ L_08B0D624: } L_08B0D630: { const bool branch_taken = static_cast(aot_gpr_5) > 0; - // nop if (branch_taken) { goto L_08B0D654; } @@ -3814,7 +4217,6 @@ L_08B0D630: } L_08B0D638: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08B0D66C; } @@ -3848,11 +4250,20 @@ L_08B0D66C: goto L_08B0D670; L_08B0D670: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D678: { const bool branch_taken = 0u == 0u; aot_gpr_2 = (0u | 0u); @@ -3863,11 +4274,20 @@ L_08B0D678: } L_08B0D680: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D688: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3882,7 +4302,6 @@ L_08B0D6A8: aot_gpr_4 = (aot_gpr_2 | 0u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0D6C0; } @@ -3917,7 +4336,17 @@ L_08B0D6D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D6E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3932,7 +4361,6 @@ L_08B0D708: aot_gpr_4 = (aot_gpr_2 & 255u); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0D720; } @@ -3968,7 +4396,17 @@ L_08B0D738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3983,7 +4421,6 @@ L_08B0D76C: aot_gpr_4 = (aot_gpr_2 & 255u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0D784; } @@ -4019,7 +4456,17 @@ L_08B0D79C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4034,7 +4481,6 @@ L_08B0D7D0: aot_gpr_4 = (aot_gpr_2 & 255u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0D7E8; } @@ -4070,7 +4516,17 @@ L_08B0D800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D814: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(5), static_cast(0u)); aot_gpr_5 = (0u | 0u); @@ -4081,7 +4537,6 @@ L_08B0D81C: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); ctx.gpr[6] = (static_cast(aot_gpr_5) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08B0D81C; } @@ -4096,7 +4551,6 @@ L_08B0D838: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); ctx.gpr[6] = (static_cast(aot_gpr_5) < 6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08B0D838; } @@ -4109,7 +4563,17 @@ L_08B0D850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D85C: aot_gpr_5 = (aot_gpr_5 << 1u); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4126,7 +4590,17 @@ L_08B0D85C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D88C: aot_gpr_5 = (aot_gpr_5 << 1u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -4137,7 +4611,17 @@ L_08B0D88C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D8A4: aot_gpr_5 = (aot_gpr_5 << 2u); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4154,7 +4638,17 @@ L_08B0D8A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D8D4: aot_gpr_5 = (aot_gpr_5 << 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); @@ -4165,7 +4659,17 @@ L_08B0D8D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D8EC: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); jump_target = aot_gpr_31; @@ -4173,7 +4677,17 @@ L_08B0D8EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D8F8: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); jump_target = aot_gpr_31; @@ -4181,14 +4695,23 @@ L_08B0D8F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D904: ctx.gpr[7] = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_gpr_5 + ctx.gpr[7]); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(10), static_cast(ctx.gpr[6])); ctx.gpr[7] = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(4))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B0D938; } @@ -4204,7 +4727,6 @@ L_08B0D91C: } L_08B0D924: { const bool branch_taken = ctx.gpr[6] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0D938; } @@ -4217,11 +4739,20 @@ L_08B0D92C: goto L_08B0D938; L_08B0D938: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D940: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); jump_target = aot_gpr_31; @@ -4229,11 +4760,20 @@ L_08B0D940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D94C: ctx.gpr[6] = (aot_gpr_5 < static_cast(251) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] != 0u; - // nop if (branch_taken) { goto L_08B0D964; } @@ -4253,18 +4793,37 @@ L_08B0D964: goto L_08B0D968; L_08B0D968: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D970: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(5))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0D978: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17]}; @@ -4303,9 +4862,7 @@ L_08B0D9D8: L_08B0D9E8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(2176))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0DAF4; } @@ -4354,7 +4911,6 @@ L_08B0DA20: } L_08B0DA28: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B0DA8C; } @@ -4367,7 +4923,6 @@ L_08B0DA30: goto L_08B0D74C; L_08B0DA3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0DAEC; } @@ -4376,9 +4931,7 @@ L_08B0DA3C: L_08B0DA44: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(2180))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0DA64; } @@ -4396,7 +4949,6 @@ L_08B0DA64: goto L_08B0D688; L_08B0DA70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0DAEC; } @@ -4409,7 +4961,6 @@ L_08B0DA78: goto L_08B0D688; L_08B0DA84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0DAEC; } @@ -4434,9 +4985,7 @@ L_08B0DAA4: goto L_08B0DAA8; L_08B0DAA8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0DAE0; } @@ -4453,7 +5002,6 @@ L_08B0DAB8: } L_08B0DAC4: { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B0DAD4; } @@ -4461,7 +5009,6 @@ L_08B0DAC4: } L_08B0DACC: { const bool branch_taken = aot_gpr_16 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B0DAE0; } @@ -4504,7 +5051,17 @@ L_08B0DAF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DB1C: aot_gpr_5 = (aot_gpr_5 + static_cast(-12)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4523,7 +5080,17 @@ L_08B0DB1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DB54: aot_gpr_5 = (aot_gpr_5 + static_cast(-12)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -4536,7 +5103,17 @@ L_08B0DB54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DB74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4554,7 +5131,6 @@ L_08B0DB90: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_5 = (static_cast(ctx.gpr[17]) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B0DB90; } @@ -4572,7 +5148,6 @@ L_08B0DBB8: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_5 = (static_cast(ctx.gpr[17]) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B0DBB8; } @@ -4597,7 +5172,6 @@ L_08B0DBF4: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0DBDC; } @@ -4622,7 +5196,17 @@ L_08B0DC20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DC34: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(446))); ctx.fpr[0] = std::bit_cast(aot_gpr_4); @@ -4631,7 +5215,17 @@ L_08B0DC34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DC44: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); aot_gpr_5 = (aot_gpr_5 & 1u); @@ -4658,11 +5252,20 @@ L_08B0DC60: goto L_08B0DC74; L_08B0DC74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DC7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4675,7 +5278,6 @@ L_08B0DC90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0DCEC; } @@ -4685,7 +5287,6 @@ L_08B0DCA0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0DD28; } @@ -4693,13 +5294,11 @@ L_08B0DCA0: } L_08B0DCB0: aot_gpr_31 = (0x08B0DCB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0DCB8u) goto L_08B0DCB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B0DCB8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0DCEC; } @@ -4707,14 +5306,12 @@ L_08B0DCB8: } L_08B0DCC4: aot_gpr_31 = (0x08B0DCCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0DCCCu) goto L_08B0DCCC; AOT_REGCACHE_SYNC_OUT(); return; L_08B0DCCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0DCEC; } @@ -4722,12 +5319,10 @@ L_08B0DCCC: } L_08B0DCDC: aot_gpr_31 = (0x08B0DCE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0DCE4u) goto L_08B0DCE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0DCE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0DD28; } @@ -4752,7 +5347,6 @@ L_08B0DCF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0DD18: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0DD28; } @@ -4770,7 +5364,17 @@ L_08B0DD28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DD38: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); jump_target = aot_gpr_31; @@ -4778,7 +5382,17 @@ L_08B0DD38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DD44: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(533)))))); @@ -4798,7 +5412,6 @@ L_08B0DD68: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0DDF8; } @@ -4812,7 +5425,6 @@ L_08B0DD78: aot_fpr_14 = aot_fpr_14 - aot_fpr_12; aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); goto L_08B0DDA0; @@ -4820,9 +5432,7 @@ L_08B0DD78: goto L_08B0DDA0; L_08B0DDA0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0DDE0; } @@ -4834,7 +5444,6 @@ L_08B0DDB0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(452))); aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B0DDD0; @@ -4842,9 +5451,7 @@ L_08B0DDB0: goto L_08B0DDD0; L_08B0DDD0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0DDF0; } @@ -4900,7 +5507,6 @@ L_08B0DDF8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0DE44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0DE58; } @@ -4944,7 +5550,17 @@ L_08B0DE64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DEA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4982,7 +5598,17 @@ L_08B0DEBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0DF10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4992,7 +5618,6 @@ L_08B0DF10: aot_gpr_5 = (aot_gpr_4 & 4u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B0DF54; } @@ -5004,7 +5629,6 @@ L_08B0DF34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 246u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0DFA4; } @@ -5020,7 +5644,6 @@ L_08B0DF4C: } L_08B0DF54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E078; } @@ -5076,7 +5699,6 @@ L_08B0DF84: } L_08B0DF8C: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0E078; } @@ -5089,7 +5711,6 @@ L_08B0DF94: AOT_REGCACHE_SYNC_OUT(); return; L_08B0DF9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E078; } @@ -5102,14 +5723,12 @@ L_08B0DFA4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0DFAC: aot_gpr_31 = (0x08B0DFB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0DFB4u) goto L_08B0DFB4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0DFB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0DFD0; } @@ -5123,7 +5742,6 @@ L_08B0DFC4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0DFD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E078; } @@ -5154,7 +5772,6 @@ L_08B0DFF8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E078; } @@ -5225,7 +5842,17 @@ L_08B0E078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E08C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5248,7 +5875,17 @@ L_08B0E0AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E0BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5271,7 +5908,17 @@ L_08B0E0DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E0EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5280,7 +5927,6 @@ L_08B0E0EC: { const std::uint32_t aot_run_words[6]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0E184; } @@ -5344,7 +5990,6 @@ L_08B0E158: } L_08B0E160: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0E184; } @@ -5352,7 +5997,6 @@ L_08B0E160: } L_08B0E168: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E184; } @@ -5366,7 +6010,6 @@ L_08B0E170: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E184; } @@ -5395,7 +6038,6 @@ L_08B0E1A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E1AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0E230; } @@ -5425,7 +6067,6 @@ L_08B0E1D8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E1E8: aot_gpr_31 = (0x08B0E1F0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E1F0u) goto L_08B0E1F0; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E1F0: @@ -5454,7 +6095,6 @@ L_08B0E230: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0E1A0; } @@ -5476,7 +6116,17 @@ L_08B0E244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E268: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5485,7 +6135,6 @@ L_08B0E268: { const std::uint32_t aot_run_words[6]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0E310; } @@ -5493,12 +6142,10 @@ L_08B0E268: } L_08B0E298: aot_gpr_31 = (0x08B0E2A0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_0890D44C, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0066_entry, 66u, 315u, 0x0890D44Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E2A0u) goto L_08B0E2A0; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E2A0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0E310; } @@ -5562,7 +6209,6 @@ L_08B0E2E4: } L_08B0E2EC: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0E310; } @@ -5570,7 +6216,6 @@ L_08B0E2EC: } L_08B0E2F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E310; } @@ -5584,7 +6229,6 @@ L_08B0E2FC: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E308: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E310; } @@ -5613,7 +6257,6 @@ L_08B0E32C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E338: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0E3B8; } @@ -5642,7 +6285,6 @@ L_08B0E364: AOT_REGCACHE_SYNC_OUT(); return; L_08B0E370: aot_gpr_31 = (0x08B0E378u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E378u) goto L_08B0E378; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E378: @@ -5671,7 +6313,6 @@ L_08B0E3B8: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0E32C; } @@ -5693,7 +6334,17 @@ L_08B0E3CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E3F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5730,7 +6381,17 @@ L_08B0E438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E454: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -5747,7 +6408,6 @@ L_08B0E454: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_5 = (aot_gpr_4 < static_cast(7) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0E55C; } @@ -5759,14 +6419,22 @@ L_08B0E494: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31400))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E4AC: aot_gpr_31 = (0x08B0E4B4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E4B4u) goto L_08B0E4B4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E4B4: @@ -5774,7 +6442,6 @@ L_08B0E4B4: aot_gpr_4 = (aot_gpr_4 & 2u); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0E4D0; } @@ -5798,7 +6465,6 @@ L_08B0E4D0: } L_08B0E4D8: aot_gpr_31 = (0x08B0E4E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E4E0u) goto L_08B0E4E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E4E0: @@ -5806,7 +6472,6 @@ L_08B0E4E0: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0E4FC; } @@ -5830,7 +6495,6 @@ L_08B0E4FC: } L_08B0E504: aot_gpr_31 = (0x08B0E50Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E50Cu) goto L_08B0E50C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E50C: @@ -5838,7 +6502,6 @@ L_08B0E50C: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0E528; } @@ -5862,7 +6525,6 @@ L_08B0E528: } L_08B0E530: aot_gpr_31 = (0x08B0E538u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E538u) goto L_08B0E538; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E538: @@ -5870,7 +6532,6 @@ L_08B0E538: aot_gpr_4 = (aot_gpr_4 & 7u); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0E554; } @@ -5902,7 +6563,17 @@ L_08B0E560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E56C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); aot_gpr_5 = (aot_gpr_4 + aot_gpr_4); @@ -5918,7 +6589,6 @@ L_08B0E56C: aot_gpr_4 = (aot_gpr_4 + static_cast(-2)); aot_gpr_5 = (aot_gpr_4 < static_cast(5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B0E5D0; } @@ -5958,7 +6628,6 @@ L_08B0E5C0: } L_08B0E5C8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B0E5D8; } @@ -5977,11 +6646,20 @@ L_08B0E5D8: goto L_08B0E5DC; L_08B0E5DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E5E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -5997,7 +6675,6 @@ L_08B0E604: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(533)))))); ctx.gpr[6] = (0u | 2u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B0E620; } @@ -6039,7 +6716,6 @@ L_08B0E638: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2320))); ctx.gpr[6] = (aot_gpr_5 < static_cast(7) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08B0E760; } @@ -6051,11 +6727,20 @@ L_08B0E66C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31432))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E684: aot_gpr_4 = (16704u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); @@ -6171,7 +6856,17 @@ L_08B0E764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0E778: aot_gpr_29 = (aot_gpr_29 + static_cast(-192)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -6241,12 +6936,10 @@ L_08B0E7D4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08B0E804u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E804u) goto L_08B0E804; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E804: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0E860; } @@ -6256,9 +6949,7 @@ L_08B0E80C: aot_gpr_4 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E830; } @@ -6277,9 +6968,7 @@ L_08B0E830: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E854; } @@ -6307,9 +6996,7 @@ L_08B0E860: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E884; } @@ -6328,9 +7015,7 @@ L_08B0E884: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E8A8; } @@ -6351,7 +7036,6 @@ L_08B0E8A8: goto L_08B0E8B0; L_08B0E8B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0E9D0; } @@ -6368,7 +7052,6 @@ L_08B0E8B8: aot_gpr_5 = (0u | 2u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0E9D0; } @@ -6420,12 +7103,10 @@ L_08B0E8F0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08B0E924u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E924u) goto L_08B0E924; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E924: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0E980; } @@ -6435,9 +7116,7 @@ L_08B0E92C: aot_gpr_4 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E950; } @@ -6456,9 +7135,7 @@ L_08B0E950: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E974; } @@ -6486,9 +7163,7 @@ L_08B0E980: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E9A4; } @@ -6507,9 +7182,7 @@ L_08B0E9A4: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0E9C8; } @@ -6530,12 +7203,10 @@ L_08B0E9C8: goto L_08B0E9D0; L_08B0E9D0: aot_gpr_31 = (0x08B0E9D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E9D8u) goto L_08B0E9D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E9D8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0EA8C; } @@ -6543,7 +7214,6 @@ L_08B0E9D8: } L_08B0E9E0: aot_gpr_31 = (0x08B0E9E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0E9E8u) goto L_08B0E9E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B0E9E8: @@ -6565,9 +7235,7 @@ L_08B0E9E8: aot_gpr_4 = (aot_gpr_4 | 23593u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0EA8C; } @@ -6621,9 +7289,7 @@ L_08B0EA28: aot_gpr_4 = (16880u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0EA8C; } @@ -6656,7 +7322,17 @@ L_08B0EA8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0EAA4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); ctx.gpr[6] = (aot_gpr_5 + aot_gpr_5); @@ -6671,7 +7347,6 @@ L_08B0EAA4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2320))); ctx.gpr[6] = (aot_gpr_5 < static_cast(7) ? 1u : 0u); { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08B0EB44; } @@ -6683,11 +7358,20 @@ L_08B0EADC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31464))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0EAF4: aot_gpr_5 = (0u | 8u); { const bool branch_taken = 0u == 0u; @@ -6748,11 +7432,20 @@ L_08B0EB3C: goto L_08B0EB44; L_08B0EB44: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0EB4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -6773,7 +7466,6 @@ L_08B0EB4C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0EB88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0EBC8; } @@ -6784,7 +7476,6 @@ L_08B0EB90: aot_gpr_5 = (0u | 6u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EBC8; } @@ -6792,7 +7483,6 @@ L_08B0EB90: } L_08B0EBA4: aot_gpr_31 = (0x08B0EBACu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0EBACu) goto L_08B0EBAC; AOT_REGCACHE_SYNC_OUT(); return; L_08B0EBAC: @@ -6800,7 +7490,6 @@ L_08B0EBAC: aot_gpr_4 = (aot_gpr_4 & 3u); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0EBC8; } @@ -6825,7 +7514,17 @@ L_08B0EBCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0EBDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(613)))))); @@ -6837,7 +7536,6 @@ L_08B0EBDC: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(496), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0EC68; } @@ -6847,7 +7545,6 @@ L_08B0EC14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EC54; } @@ -6857,7 +7554,6 @@ L_08B0EC24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EC54; } @@ -6867,7 +7563,6 @@ L_08B0EC34: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EC54; } @@ -6877,7 +7572,6 @@ L_08B0EC44: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EC68; } @@ -6898,7 +7592,6 @@ L_08B0EC68: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (aot_gpr_4 < static_cast(14) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 24u, 0x08B10148u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6910,14 +7603,22 @@ L_08B0EC80: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31496))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0EC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 24u, 0x08B10148u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6932,7 +7633,6 @@ L_08B0ECA0: aot_gpr_4 = (aot_gpr_4 & 63u); aot_gpr_5 = (aot_gpr_5 & 63u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B0ED18; } @@ -6957,7 +7657,6 @@ L_08B0ECC4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0ECFC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0ED18; } @@ -6987,11 +7686,20 @@ L_08B0ED2C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(31552))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B0ED44: aot_gpr_31 = (0x08B0ED4Cu); aot_gpr_4 = (aot_gpr_29 + static_cast(80)); @@ -7035,9 +7743,7 @@ L_08B0ED90: goto L_08B0DC34; L_08B0EDB0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0EDD8; } @@ -7049,7 +7755,6 @@ L_08B0EDC0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0EDFC; } @@ -7064,7 +7769,6 @@ L_08B0EDD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0EDE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0EDFC; } @@ -7081,7 +7785,6 @@ L_08B0EDFC: goto L_08B0DC7C; L_08B0EE04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 24u, 0x08B10148u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7130,9 +7833,7 @@ L_08B0EE58: goto L_08B0DC44; L_08B0EE78: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0EEE8; } @@ -7144,7 +7845,6 @@ L_08B0EE88: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0EEE8; } @@ -7165,7 +7865,6 @@ L_08B0EEAC: AOT_REGCACHE_SYNC_OUT(); return; L_08B0EEBC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0EEE0; } @@ -7182,7 +7881,6 @@ L_08B0EEC4: goto L_08B0EEE0; L_08B0EEE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0F124; } @@ -7190,12 +7888,10 @@ L_08B0EEE0: } L_08B0EEE8: aot_gpr_31 = (0x08B0EEF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0EEF0u) goto L_08B0EEF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B0EEF0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0EF9C; } @@ -7203,7 +7899,6 @@ L_08B0EEF0: } L_08B0EEF8: aot_gpr_31 = (0x08B0EF00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0EF00u) goto L_08B0EF00; AOT_REGCACHE_SYNC_OUT(); return; L_08B0EF00: @@ -7214,7 +7909,6 @@ L_08B0EF00: AOT_REGCACHE_SYNC_OUT(); return; L_08B0EF0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0EF9C; } @@ -7224,7 +7918,6 @@ L_08B0EF14: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(534)))))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EF9C; } @@ -7234,7 +7927,6 @@ L_08B0EF24: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(534)))))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B0EF9C; } @@ -7242,7 +7934,6 @@ L_08B0EF24: } L_08B0EF34: aot_gpr_31 = (0x08B0EF3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0EF3Cu) goto L_08B0EF3C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0EF3C: @@ -7264,9 +7955,7 @@ L_08B0EF3C: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0EF88; } @@ -7293,12 +7982,10 @@ L_08B0EF88: goto L_08B0EF9C; L_08B0EF9C: aot_gpr_31 = (0x08B0EFA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0EFA4u) goto L_08B0EFA4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0EFA4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F01C; } @@ -7306,7 +7993,6 @@ L_08B0EFA4: } L_08B0EFAC: aot_gpr_31 = (0x08B0EFB4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0EFB4u) goto L_08B0EFB4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0EFB4: @@ -7328,9 +8014,7 @@ L_08B0EFB4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F01C; } @@ -7360,7 +8044,6 @@ L_08B0F01C: goto L_08B0F020; L_08B0F020: aot_gpr_31 = (0x08B0F028u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F028u) goto L_08B0F028; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F028: @@ -7371,7 +8054,6 @@ L_08B0F028: goto L_08B0F030; L_08B0F030: aot_gpr_31 = (0x08B0F038u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F038u) goto L_08B0F038; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F038: @@ -7387,7 +8069,6 @@ L_08B0F040: goto L_08B0F048; L_08B0F048: aot_gpr_31 = (0x08B0F050u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F050u) goto L_08B0F050; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F050: @@ -7409,9 +8090,7 @@ L_08B0F050: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F124; } @@ -7421,7 +8100,6 @@ L_08B0F084: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(664))); aot_gpr_4 = (static_cast(aot_gpr_4) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F124; } @@ -7433,7 +8111,6 @@ L_08B0F094: L_08B0F098: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F124; } @@ -7456,7 +8133,6 @@ L_08B0F0B4: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (static_cast(aot_gpr_4) < 10001 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F124; } @@ -7468,9 +8144,7 @@ L_08B0F0D0: L_08B0F0D4: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F124; } @@ -7492,7 +8166,6 @@ L_08B0F104: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F124; } @@ -7508,7 +8181,6 @@ L_08B0F124: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F13C; } @@ -7524,7 +8196,6 @@ L_08B0F13C: goto L_08B0DC7C; L_08B0F144: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -7573,9 +8244,7 @@ L_08B0F198: goto L_08B0DC34; L_08B0F1B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F1E0; } @@ -7587,7 +8256,6 @@ L_08B0F1C8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F204; } @@ -7602,7 +8270,6 @@ L_08B0F1E0: AOT_REGCACHE_SYNC_OUT(); return; L_08B0F1F0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F204; } @@ -7619,7 +8286,6 @@ L_08B0F204: goto L_08B0DC7C; L_08B0F20C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -7668,9 +8334,7 @@ L_08B0F260: goto L_08B0DC44; L_08B0F280: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F2F0; } @@ -7682,7 +8346,6 @@ L_08B0F290: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F2F0; } @@ -7703,7 +8366,6 @@ L_08B0F2B4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0F2C4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0F2E8; } @@ -7720,7 +8382,6 @@ L_08B0F2CC: goto L_08B0F2E8; L_08B0F2E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0F478; } @@ -7728,12 +8389,10 @@ L_08B0F2E8: } L_08B0F2F0: aot_gpr_31 = (0x08B0F2F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F2F8u) goto L_08B0F2F8; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F2F8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F370; } @@ -7741,7 +8400,6 @@ L_08B0F2F8: } L_08B0F300: aot_gpr_31 = (0x08B0F308u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F308u) goto L_08B0F308; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F308: @@ -7763,9 +8421,7 @@ L_08B0F308: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F370; } @@ -7795,7 +8451,6 @@ L_08B0F370: goto L_08B0F374; L_08B0F374: aot_gpr_31 = (0x08B0F37Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F37Cu) goto L_08B0F37C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F37C: @@ -7806,7 +8461,6 @@ L_08B0F37C: goto L_08B0F384; L_08B0F384: aot_gpr_31 = (0x08B0F38Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F38Cu) goto L_08B0F38C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F38C: @@ -7822,7 +8476,6 @@ L_08B0F394: goto L_08B0F39C; L_08B0F39C: aot_gpr_31 = (0x08B0F3A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0F3A4u) goto L_08B0F3A4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0F3A4: @@ -7844,9 +8497,7 @@ L_08B0F3A4: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F478; } @@ -7856,7 +8507,6 @@ L_08B0F3D8: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(664))); aot_gpr_4 = (static_cast(aot_gpr_4) < 101 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F478; } @@ -7868,7 +8518,6 @@ L_08B0F3E8: L_08B0F3EC: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F478; } @@ -7891,7 +8540,6 @@ L_08B0F408: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (static_cast(aot_gpr_4) < 10001 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F478; } @@ -7903,9 +8551,7 @@ L_08B0F424: L_08B0F428: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F478; } @@ -7927,7 +8573,6 @@ L_08B0F458: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F478; } @@ -7943,7 +8588,6 @@ L_08B0F478: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F490; } @@ -7959,7 +8603,6 @@ L_08B0F490: goto L_08B0DC7C; L_08B0F498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -7981,9 +8624,7 @@ L_08B0F4A0: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F500; } @@ -7995,7 +8636,6 @@ L_08B0F4E8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F508; } @@ -8007,7 +8647,6 @@ L_08B0F500: goto L_08B0F508; L_08B0F508: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8029,9 +8668,7 @@ L_08B0F510: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F570; } @@ -8043,7 +8680,6 @@ L_08B0F558: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F578; } @@ -8055,7 +8691,6 @@ L_08B0F570: goto L_08B0F578; L_08B0F578: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8076,7 +8711,6 @@ L_08B0F580: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F5CC; } @@ -8086,7 +8720,6 @@ L_08B0F5BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F5EC; } @@ -8096,9 +8729,7 @@ L_08B0F5CC: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F5EC; } @@ -8112,7 +8743,6 @@ L_08B0F5EC: aot_gpr_4 = (16448u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(446))); goto L_08B0F640; @@ -8126,7 +8756,6 @@ L_08B0F604: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(534), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F6CC; } @@ -8154,9 +8783,7 @@ L_08B0F640: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F6CC; } @@ -8168,7 +8795,6 @@ L_08B0F664: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F6CC; } @@ -8178,7 +8804,6 @@ L_08B0F67C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F6CC; } @@ -8209,7 +8834,6 @@ L_08B0F68C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0F6B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F6C4; } @@ -8230,7 +8854,6 @@ L_08B0F6C4: goto L_08B0F6CC; L_08B0F6CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8251,7 +8874,6 @@ L_08B0F6D4: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(446))); goto L_08B0F754; @@ -8265,7 +8887,6 @@ L_08B0F718: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(534), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F7E0; } @@ -8293,9 +8914,7 @@ L_08B0F754: aot_fpr_13 = std::bit_cast(aot_gpr_5); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F7E0; } @@ -8307,7 +8926,6 @@ L_08B0F778: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F7E0; } @@ -8317,7 +8935,6 @@ L_08B0F790: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0F7E0; } @@ -8348,7 +8965,6 @@ L_08B0F7A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B0F7C4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F7D8; } @@ -8369,7 +8985,6 @@ L_08B0F7D8: goto L_08B0F7E0; L_08B0F7E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8386,9 +9001,7 @@ L_08B0F7E8: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0F97C; } @@ -8398,7 +9011,6 @@ L_08B0F81C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F8D0; } @@ -8431,7 +9043,6 @@ L_08B0F82C: AOT_REGCACHE_SYNC_OUT(); return; L_08B0F858: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F874; } @@ -8467,7 +9078,6 @@ L_08B0F87C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(535), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F8C8; } @@ -8484,7 +9094,6 @@ L_08B0F8AC: goto L_08B0F8C8; L_08B0F8C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0F97C; } @@ -8494,7 +9103,6 @@ L_08B0F8D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F97C; } @@ -8527,7 +9135,6 @@ L_08B0F8E0: AOT_REGCACHE_SYNC_OUT(); return; L_08B0F90C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0F928; } @@ -8563,7 +9170,6 @@ L_08B0F930: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(535), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0F97C; } @@ -8580,7 +9186,6 @@ L_08B0F960: goto L_08B0F97C; L_08B0F97C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8589,7 +9194,6 @@ L_08B0F97C: L_08B0F984: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FA1C; } @@ -8621,9 +9225,7 @@ L_08B0F990: goto L_08B0DC34; L_08B0F9E8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FA10; } @@ -8635,7 +9237,6 @@ L_08B0F9F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FA24; } @@ -8656,7 +9257,6 @@ L_08B0FA1C: goto L_08B0FA24; L_08B0FA24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8665,7 +9265,6 @@ L_08B0FA24: L_08B0FA2C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FB38; } @@ -8701,9 +9300,7 @@ L_08B0FA40: goto L_08B0DC44; L_08B0FA98: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FAD8; } @@ -8715,7 +9312,6 @@ L_08B0FAA8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0FAD8; } @@ -8730,7 +9326,6 @@ L_08B0FAC0: AOT_REGCACHE_SYNC_OUT(); return; L_08B0FAD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0FB40; } @@ -8744,7 +9339,6 @@ L_08B0FAD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B0FAE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0FB40; } @@ -8769,9 +9363,7 @@ L_08B0FAEC: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FB40; } @@ -8795,7 +9387,6 @@ L_08B0FB38: goto L_08B0FB40; L_08B0FB40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8804,7 +9395,6 @@ L_08B0FB40: L_08B0FB48: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FBFC; } @@ -8836,9 +9426,7 @@ L_08B0FB54: goto L_08B0DC34; L_08B0FBAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FBD4; } @@ -8850,7 +9438,6 @@ L_08B0FBBC: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FC04; } @@ -8865,7 +9452,6 @@ L_08B0FBD4: AOT_REGCACHE_SYNC_OUT(); return; L_08B0FBE4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0FC04; } @@ -8887,7 +9473,6 @@ L_08B0FBFC: goto L_08B0FC04; L_08B0FC04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8896,7 +9481,6 @@ L_08B0FC04: L_08B0FC0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FCC4; } @@ -8928,9 +9512,7 @@ L_08B0FC18: goto L_08B0DC44; L_08B0FC70: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FCCC; } @@ -8942,7 +9524,6 @@ L_08B0FC80: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0FCCC; } @@ -8962,7 +9543,6 @@ L_08B0FC98: AOT_REGCACHE_SYNC_OUT(); return; L_08B0FCBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0FCCC; } @@ -8974,7 +9554,6 @@ L_08B0FCC4: goto L_08B0FCCC; L_08B0FCCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -8995,9 +9574,7 @@ L_08B0FCD4: aot_gpr_4 = (16320u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FD20; } @@ -9013,7 +9590,6 @@ L_08B0FD20: goto L_08B0DC7C; L_08B0FD28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9060,9 +9636,7 @@ L_08B0FD7C: aot_gpr_4 = (16720u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FDC4; } @@ -9082,9 +9656,7 @@ L_08B0FDC4: aot_gpr_4 = (17036u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FE40; } @@ -9092,14 +9664,12 @@ L_08B0FDC4: } L_08B0FDDC: aot_gpr_31 = (0x08B0FDE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FDE4u) goto L_08B0FDE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FDE4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0FE40; } @@ -9109,7 +9679,6 @@ L_08B0FDF4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FE58; } @@ -9117,13 +9686,11 @@ L_08B0FDF4: } L_08B0FE04: aot_gpr_31 = (0x08B0FE0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FE0Cu) goto L_08B0FE0C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FE0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FE40; } @@ -9131,14 +9698,12 @@ L_08B0FE0C: } L_08B0FE18: aot_gpr_31 = (0x08B0FE20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FE20u) goto L_08B0FE20; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FE20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_2 + static_cast(2318)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B0FE40; } @@ -9146,12 +9711,10 @@ L_08B0FE20: } L_08B0FE30: aot_gpr_31 = (0x08B0FE38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FE38u) goto L_08B0FE38; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FE38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0FE58; } @@ -9169,7 +9732,6 @@ L_08B0FE48: goto L_08B0FE58; L_08B0FE58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9202,7 +9764,6 @@ L_08B0FE84: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B0FEBC; @@ -9212,12 +9773,10 @@ L_08B0FEBC: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_fpr_20 = aot_fpr_20 / aot_fpr_12; aot_gpr_31 = (0x08B0FECCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FECCu) goto L_08B0FECC; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FECC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B0FF10; } @@ -9225,7 +9784,6 @@ L_08B0FECC: } L_08B0FED4: aot_gpr_31 = (0x08B0FEDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FEDCu) goto L_08B0FEDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FEDC: @@ -9242,9 +9800,7 @@ L_08B0FEE8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_13 = ctx.fpr[22] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B0FF18; } @@ -9260,7 +9816,6 @@ L_08B0FF18: goto L_08B0DC7C; L_08B0FF20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9270,7 +9825,6 @@ L_08B0FF28: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0FF40; } @@ -9286,7 +9840,6 @@ L_08B0FF40: goto L_08B0DC7C; L_08B0FF48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9296,7 +9849,6 @@ L_08B0FF50: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9304,13 +9856,11 @@ L_08B0FF50: } L_08B0FF60: aot_gpr_31 = (0x08B0FF68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FF68u) goto L_08B0FF68; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FF68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9318,12 +9868,10 @@ L_08B0FF68: } L_08B0FF74: aot_gpr_31 = (0x08B0FF7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 526u, 0x08AAE958u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B0FF7Cu) goto L_08B0FF7C; AOT_REGCACHE_SYNC_OUT(); return; L_08B0FF7C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B0EE04; } @@ -9341,7 +9889,6 @@ L_08B0FF8C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B0FFB0; @@ -9351,9 +9898,7 @@ L_08B0FFB0: aot_gpr_4 = (16736u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 2u, 0x08B1000Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9371,7 +9916,6 @@ L_08B0FFD0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B0FFF4; diff --git a/profiles/vcs/generated/generated_unit_0195.cpp b/profiles/vcs/generated/generated_unit_0195.cpp index 41e5e10..a9d8888 100644 --- a/profiles/vcs/generated/generated_unit_0195.cpp +++ b/profiles/vcs/generated/generated_unit_0195.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0195[4089] = { - 1, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 6, 0, 7, 0, 0, 0, 8, 0, 9, 0, 10, 0, - 11, 12, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 15, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, - 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 26, 0, 0, 27, 0, 28, 0, 29, - 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 36, - 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 42, 0, 0, 43, 0, 0, 44, 0, 0, 0, 45, 0, 0, - 0, 0, 0, 46, 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 51, 52, 0, 0, 53, - 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, - 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 0, 75, 0, 76, 0, 0, 0, 0, - 0, 0, 0, 77, 0, 0, 0, 0, 78, 0, 0, 79, 0, 0, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, - 0, 0, 0, 98, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, - 0, 103, 0, 104, 0, 105, 0, 0, 106, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, - 0, 112, 0, 0, 0, 0, 0, 113, 0, 0, 0, 114, 0, 115, 0, 0, 116, 0, 117, 0, 0, 118, 0, 119, 120, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 121, 0, 0, 0, 122, 0, 123, 0, 0, 0, 0, 124, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 127, 0, 128, 0, 0, 129, 0, - 130, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, 135, 0, 136, 0, 0, 137, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, 140, 0, 141, 0, 142, - 0, 0, 143, 0, 144, 0, 0, 145, 0, 146, 0, 0, 147, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 152, 0, 153, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 155, 0, 0, 0, 156, 0, 157, - 0, 0, 0, 0, 158, 0, 159, 160, 0, 0, 161, 0, 0, 162, 0, 163, 0, 0, 0, 164, 0, 165, 166, 0, 167, 0, 0, 0, 168, 0, 169, 0, - 170, 0, 171, 0, 0, 172, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, - 180, 0, 181, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 183, 0, 0, 184, 0, 185, 0, 0, 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 188, - 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 0, 194, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 196, 0, 197, 0, 0, 0, 0, 198, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 201, 0, - 202, 0, 0, 203, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, 206, 0, 207, 0, 208, 0, 0, 209, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, - 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 214, 0, 215, 0, 0, 216, 0, 217, 0, 0, 218, 0, 0, 219, 0, 0, 220, - 0, 221, 0, 0, 222, 223, 0, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, - 0, 227, 0, 0, 228, 0, 229, 0, 0, 230, 0, 0, 231, 0, 0, 0, 232, 0, 0, 0, 233, 0, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, - 237, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 243, - 0, 244, 0, 245, 0, 0, 0, 246, 0, 247, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 250, 0, 0, 251, 0, 0, 252, 253, 0, 0, 0, 0, - 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 0, 0, 0, 0, 257, 0, 0, 0, 258, 0, 259, 0, 0, 260, - 261, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 265, 0, 266, 0, 0, 267, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 270, 0, - 0, 0, 0, 271, 0, 0, 0, 272, 0, 273, 0, 0, 0, 0, 274, 0, 0, 275, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 0, - 0, 0, 0, 0, 0, 279, 280, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 0, 284, 0, 285, 0, 286, 0, - 0, 287, 0, 288, 0, 289, 0, 0, 0, 0, 290, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, - 0, 294, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 299, 0, 300, 0, 301, 0, 302, 0, 0, - 303, 0, 304, 0, 0, 305, 0, 0, 0, 306, 0, 0, 307, 0, 0, 308, 0, 0, 309, 0, 310, 0, 0, 311, 0, 312, 0, 0, 313, 0, 0, 0, - 0, 0, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 318, 0, 319, 0, 320, 0, 321, 0, 0, 0, 322, - 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 325, 0, 326, 0, 327, 0, 328, 329, 0, 330, 0, 0, 331, 332, 0, 0, 0, - 0, 333, 0, 334, 0, 335, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 342, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 343, 344, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, - 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 349, 0, 0, 0, 350, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, - 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 359, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 363, 0, 364, 0, 365, 0, 366, 0, 367, 0, 368, 0, 369, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, - 372, 0, 373, 374, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 381, 0, 382, 0, - 383, 384, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 387, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 0, 390, 0, 391, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 397, - 398, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 401, 0, 0, 0, 0, 402, 0, 403, 404, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, - 406, 0, 407, 0, 0, 0, 0, 408, 0, 409, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, 414, 0, 415, 416, - 0, 417, 0, 418, 0, 0, 0, 0, 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 423, - 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 0, 431, 0, 432, 433, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, - 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 438, 0, 439, 0, 0, 440, 0, 0, 441, 0, 442, - 0, 443, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 449, 0, 0, 0, 450, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 454, 0, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, - 458, 0, 459, 0, 0, 0, 460, 0, 461, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 464, 0, 0, 465, - 0, 466, 0, 0, 0, 467, 0, 468, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 473, 0, 474, 0, 0, 0, 0, 0, - 475, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, - 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 485, 0, - 0, 0, 486, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 490, 0, 491, 0, 0, 0, 0, 492, 0, 493, 0, 494, 0, 0, 0, 495, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, - 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 503, 504, 0, 0, 0, - 0, 505, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 510, 0, 511, 512, 0, 0, 0, - 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 520, 0, 521, 0, 522, 0, 0, 0, 0, 0, 523, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, - 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 535, 0, 0, 0, 0, 536, 0, 537, 0, - 538, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 0, 541, 0, 542, 0, 543, 0, 0, 0, 0, 544, 0, 545, 0, 0, 0, 0, 546, 0, 547, 0, - 548, 0, 0, 0, 0, 549, 0, 550, 0, 0, 0, 0, 551, 0, 552, 0, 553, 0, 0, 0, 0, 554, 0, 555, 0, 0, 0, 0, 556, 0, 557, 0, - 558, 0, 0, 0, 0, 559, 0, 560, 0, 0, 0, 0, 561, 0, 562, 0, 563, 0, 0, 0, 0, 564, 0, 565, 0, 0, 0, 0, 566, 0, 567, 0, - 568, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 0, 0, 574, 0, 575, 0, 0, 0, 0, 576, 0, 577, 0, - 578, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 0, 581, 0, 582, 0, 583, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 0, 586, 0, 587, 0, - 588, 0, 0, 0, 0, 589, 0, 590, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 595, 0, 596, 597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 600, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 602, 0, 603, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 608, 0, 609, 0, 0, 610, 0, 0, 0, 0, 0, - 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 615, 0, 616, 617, 0, 0, 0, 0, - 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 622, 0, 0, - 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 626, 0, 627, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 630, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, 633, 0, 634, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, - 0, 0, 0, 0, 0, 638, 0, 639, 0, 640, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 643, 0, 0, 644, 0, 0, - 0, 0, 0, 645, 0, 0, 646, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, - 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 652, 0, 0, 0, 0, 653, 0, 654, 0, 655, 0, 656, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 658, 0, 0, 0, 0, 659, 0, 660, 661, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, - 663, 0, 664, 0, 0, 0, 0, 665, 0, 666, 667, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 670, 0, 0, 0, 0, 671, 0, 672, 673, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 0, 0, 677, 0, 678, 679, 0, 680, 0, 681, 0, 0, 0, 0, 682, - 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, - 686, 0, 0, 0, 0, 687, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 690, 0, 691, 692, 0, 0, 0, 693, 0, 0, 0, 0, 694, 0, 695, 0, 696, 0, 697, 0, 698, 0, 699, 0, 700, 701, 0, 0, 0, 702, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 0, 709, 0, 710, 0, 711, 712, 0, 0, 0, - 713, 0, 0, 0, 0, 0, 0, 0, 714, 0, 0, 0, 715, 0, 716, 717, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 720, - 0, 721, 0, 0, 0, 722, 0, 0, 0, 723, 0, 724, 0, 725, 0, 726, 0, 727, 0, 728, 0, 0, 729, 0, 730, 0, 731, 0, 0, 0, 732, 0, - 733, 0, 734, 0, 735, 736, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 740, 741, 0, - 742, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 744, 0, 745, 746, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 749, 0, - 750, 0, 0, 751, 0, 0, 0, 752, 0, 753, 754, 0, 0, 0, 755, 0, 0, 756, 0, 757, 758, 0, 759, 0, 0, 0, 0, 0, 0, 0, 760, 0, - 761, 762, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 765, 0, 766, 0, 767, 0, 0, 0, 0, 0, 0, 768, 0, 769, 0, 0, - 770, 0, 771, 0, 772, 0, 773, 0, 774, 775, 0, 0, 0, 776, 0, 0, 0, 0, 777, 0, 778, 0, 0, 0, 779, 0, 780, 0, 781, 0, 0, 782, - 0, 783, 0, 0, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 789, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 792, 0, 0, - 793, 0, 794, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 796, 0, 797, 0, 798, 0, 0, 799, 0, 800, 801, 0, 802, 0, 803, 0, - 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 805, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0195[64] = { + 0x4082944354548029ull, 0x92120042A9442888ull, 0x98841028224C4488ull, 0x102A208204121048ull, + 0x00AA89080A554444ull, 0x0500824010500140ull, 0x8000484840002400ull, 0x01A528828028852Aull, + 0xA8252A554A244288ull, 0x0150400008021294ull, 0x5168A4D0A2800000ull, 0x2011010040011025ull, + 0x1084481090452205ull, 0x0825442940818520ull, 0x2000813292529101ull, 0x8848010924911252ull, + 0x944280080C91128Aull, 0x111242884444A215ull, 0x1400242A55080260ull, 0x129492252A940052ull, + 0x196A90108AA80510ull, 0x804001004410202Aull, 0x0200830000000000ull, 0x8000280004600004ull, + 0x0028005002804088ull, 0x0010002D0080D554ull, 0x0008040354005020ull, 0xA140000000154284ull, + 0xD0A0168500B42805ull, 0x808000000040030Aull, 0x0806850180009040ull, 0x00422112A4A88008ull, + 0x9040414524214491ull, 0x111020150520A8A2ull, 0x0000A01448000201ull, 0x1A41408040062A14ull, + 0x000000081A142042ull, 0x82A8100000408140ull, 0x0000000000000000ull, 0x0040000800002000ull, + 0x0040000080001000ull, 0x0000000000000000ull, 0x0408000000000000ull, 0x50A150A150A10002ull, + 0x50A150A150A150A1ull, 0x50A150A150A150A1ull, 0x0010034002A001A1ull, 0x0004008014042200ull, + 0x0080100204AA0000ull, 0x204081020D400000ull, 0x2800008500020810ull, 0x80000100008AA000ull, + 0x8000214824200AA0ull, 0x00B4280001542840ull, 0x85685002D0A01685ull, 0x000000A120040001ull, + 0x0000400000000000ull, 0x0000000000000000ull, 0x1AAAA40046AAA11Aull, 0x454AAA22A002D101ull, + 0x5002D10168040435ull, 0x2815400B405A4689ull, 0x22046AA295142355ull, 0x0100000856950205ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0195[64] = { + 1u, 20u, 37u, 54u, 67u, 85u, 95u, 103u, 121u, 143u, 154u, 170u, 180u, 195u, 211u, 227u, + 244u, 261u, 279u, 294u, 314u, 333u, 343u, 347u, 354u, 363u, 377u, 387u, 398u, 417u, 424u, 435u, + 449u, 466u, 482u, 490u, 505u, 514u, 524u, 524u, 527u, 530u, 530u, 532u, 548u, 568u, 588u, 599u, + 606u, 614u, 623u, 631u, 638u, 650u, 663u, 683u, 689u, 690u, 690u, 713u, 733u, 750u, 770u, 793u, }; void recomp_unit_0195_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0195_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B10000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0195[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0195[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0195[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B10000; @@ -977,9 +884,7 @@ LOCAL_DISPATCH: } } L_08B10000: - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10098; } @@ -1006,7 +911,6 @@ L_08B10014: L_08B1003C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B10058; } @@ -1014,7 +918,6 @@ L_08B1003C: } L_08B10048: aot_gpr_31 = (0x08B10050u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 575u, 0x08B0E56Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10050u) goto L_08B10050; AOT_REGCACHE_SYNC_OUT(); return; L_08B10050: @@ -1029,7 +932,6 @@ L_08B10058: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B10078; } @@ -1037,7 +939,6 @@ L_08B10058: } L_08B10068: aot_gpr_31 = (0x08B10070u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 650u, 0x08B0EB4Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10070u) goto L_08B10070; AOT_REGCACHE_SYNC_OUT(); return; L_08B10070: @@ -1050,7 +951,6 @@ L_08B10070: } L_08B10078: aot_gpr_31 = (0x08B10080u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 555u, 0x08B0E454u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10080u) goto L_08B10080; AOT_REGCACHE_SYNC_OUT(); return; L_08B10080: @@ -1071,7 +971,6 @@ L_08B10098: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1012C; } @@ -1085,7 +984,6 @@ L_08B100A8: L_08B100B0: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B100DC; } @@ -1093,7 +991,6 @@ L_08B100B0: } L_08B100BC: aot_gpr_31 = (0x08B100C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 575u, 0x08B0E56Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B100C4u) goto L_08B100C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B100C4: @@ -1130,7 +1027,6 @@ L_08B1010C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1012C; } @@ -1144,7 +1040,6 @@ L_08B1011C: goto L_08B1012C; L_08B1012C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 685u, 0x08B0EE04u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1171,7 +1066,6 @@ L_08B10148: goto L_08B10158; L_08B10158: aot_gpr_31 = (0x08B10160u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10160u) goto L_08B10160; AOT_REGCACHE_SYNC_OUT(); return; L_08B10160: @@ -1183,7 +1077,6 @@ L_08B10160: goto L_08B1016C; L_08B1016C: aot_gpr_31 = (0x08B10174u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 530u, 0x08AAE97Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10174u) goto L_08B10174; AOT_REGCACHE_SYNC_OUT(); return; L_08B10174: @@ -1213,9 +1106,7 @@ L_08B10198: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B101D0; } @@ -1231,7 +1122,6 @@ L_08B101D0: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B10368; } @@ -1240,7 +1130,6 @@ L_08B101D0: L_08B101E4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(534)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B10368; } @@ -1249,7 +1138,6 @@ L_08B101E4: L_08B101F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B10368; } @@ -1259,7 +1147,6 @@ L_08B101FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B10368; } @@ -1269,7 +1156,6 @@ L_08B1020C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B10368; } @@ -1278,7 +1164,6 @@ L_08B1020C: L_08B1021C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(535)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B10368; } @@ -1296,7 +1181,6 @@ L_08B10238: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B10368; } @@ -1308,7 +1192,6 @@ L_08B10248: L_08B1024C: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B10274; } @@ -1317,7 +1200,6 @@ L_08B1024C: L_08B10258: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B10368; } @@ -1327,7 +1209,6 @@ L_08B10264: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(532)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B10368; } @@ -1339,7 +1220,6 @@ L_08B10274: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(501) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B10294; } @@ -1354,9 +1234,7 @@ L_08B10294: aot_gpr_4 = (aot_gpr_4 | 56970u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10368; } @@ -1368,7 +1246,6 @@ L_08B102B0: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(2001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B10368; } @@ -1387,7 +1264,6 @@ L_08B102DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B102FC; } @@ -1399,7 +1275,6 @@ L_08B102EC: L_08B102F0: aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1030C; } @@ -1426,7 +1301,6 @@ L_08B10318: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(504), aot_gpr_4); aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B10350; } @@ -1464,7 +1338,6 @@ L_08B10368: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B10408; } @@ -1476,7 +1349,6 @@ L_08B10384: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(30001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B10408; } @@ -1488,7 +1360,6 @@ L_08B1039C: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(30001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B10408; } @@ -1498,7 +1369,6 @@ L_08B103B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B10408; } @@ -1511,7 +1381,6 @@ L_08B103C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B103CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B10408; } @@ -1539,7 +1408,6 @@ L_08B10408: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1046C; } @@ -1549,7 +1417,6 @@ L_08B10418: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B10438; } @@ -1559,7 +1426,6 @@ L_08B10428: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1046C; } @@ -1567,12 +1433,10 @@ L_08B10428: } L_08B10438: aot_gpr_31 = (0x08B10440u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10440u) goto L_08B10440; AOT_REGCACHE_SYNC_OUT(); return; L_08B10440: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B1046C; } @@ -1580,7 +1444,6 @@ L_08B10440: } L_08B10448: aot_gpr_31 = (0x08B10450u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10450u) goto L_08B10450; AOT_REGCACHE_SYNC_OUT(); return; L_08B10450: @@ -1591,7 +1454,6 @@ L_08B10450: L_08B10458: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B1046C; } @@ -1607,9 +1469,7 @@ L_08B1046C: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B104A0; } @@ -1625,7 +1485,6 @@ L_08B1048C: L_08B104A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(534)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1068C; } @@ -1643,7 +1502,6 @@ L_08B104AC: } L_08B104BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1068C; } @@ -1651,12 +1509,10 @@ L_08B104BC: } L_08B104C4: aot_gpr_31 = (0x08B104CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B104CCu) goto L_08B104CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B104CC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B1068C; } @@ -1664,7 +1520,6 @@ L_08B104CC: } L_08B104D4: aot_gpr_31 = (0x08B104DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B104DCu) goto L_08B104DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B104DC: @@ -1696,9 +1551,7 @@ L_08B104DC: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1068C; } @@ -1706,7 +1559,6 @@ L_08B104DC: } L_08B10518: aot_gpr_31 = (0x08B10520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10520u) goto L_08B10520; AOT_REGCACHE_SYNC_OUT(); return; L_08B10520: @@ -1727,9 +1579,7 @@ L_08B10520: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1068C; } @@ -1737,7 +1587,6 @@ L_08B10520: } L_08B10550: aot_gpr_31 = (0x08B10558u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10558u) goto L_08B10558; AOT_REGCACHE_SYNC_OUT(); return; L_08B10558: @@ -1757,9 +1606,7 @@ L_08B10570: { const float fs = aot_fpr_14; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = ctx.fpr[20] + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1068C; } @@ -1789,7 +1636,6 @@ L_08B105BC: aot_fpr_12 = ctx.fpr[16] + aot_fpr_13; ctx.fpr[24] = std::sqrt(aot_fpr_12); aot_gpr_31 = (0x08B105E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B105E0u) goto L_08B105E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B105E0: @@ -1811,9 +1657,7 @@ L_08B105E8: aot_fpr_14 = ctx.fpr[17] + aot_fpr_14; { const float fs = aot_fpr_13; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1068C; } @@ -1867,9 +1711,7 @@ L_08B10634: aot_gpr_4 = (16704u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1068C; } @@ -1885,7 +1727,6 @@ L_08B10678: L_08B1068C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1073C; } @@ -1896,7 +1737,6 @@ L_08B10698: aot_gpr_5 = (0u | 9u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1073C; } @@ -1950,9 +1790,7 @@ L_08B106B8: aot_gpr_4 = (16752u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1073C; } @@ -1960,12 +1798,10 @@ L_08B106B8: } L_08B106FC: aot_gpr_31 = (0x08B10704u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10704u) goto L_08B10704; AOT_REGCACHE_SYNC_OUT(); return; L_08B10704: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B10728; } @@ -1973,7 +1809,6 @@ L_08B10704: } L_08B1070C: aot_gpr_31 = (0x08B10714u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10714u) goto L_08B10714; AOT_REGCACHE_SYNC_OUT(); return; L_08B10714: @@ -1984,7 +1819,6 @@ L_08B10714: AOT_REGCACHE_SYNC_OUT(); return; L_08B10720: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B1073C; } @@ -2001,7 +1835,6 @@ L_08B1073C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B10784; } @@ -2009,7 +1842,6 @@ L_08B1073C: } L_08B1074C: aot_gpr_31 = (0x08B10754u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, aot_gpr_2, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10754u) goto L_08B10754; AOT_REGCACHE_SYNC_OUT(); return; L_08B10754: @@ -2022,7 +1854,6 @@ L_08B10754: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_5 = (0u | 173u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B10784; } @@ -2052,7 +1883,6 @@ L_08B1079C: goto L_08B107AC; L_08B107AC: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B107D4; } @@ -2069,7 +1899,6 @@ L_08B107B4: } L_08B107C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B107D4; } @@ -2100,7 +1929,6 @@ L_08B107E0: ctx.fpr[16] = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B1080C; @@ -2108,9 +1936,7 @@ L_08B107E0: goto L_08B1080C; L_08B1080C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10824; } @@ -2127,9 +1953,7 @@ L_08B1081C: L_08B10824: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10848; } @@ -2154,7 +1978,6 @@ L_08B10854: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B10944; } @@ -2162,13 +1985,11 @@ L_08B10854: } L_08B10864: aot_gpr_31 = (0x08B1086Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1086Cu) goto L_08B1086C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1086C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(2320))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B10944; } @@ -2176,12 +1997,10 @@ L_08B1086C: } L_08B10878: aot_gpr_31 = (0x08B10880u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10880u) goto L_08B10880; AOT_REGCACHE_SYNC_OUT(); return; L_08B10880: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B108C0; } @@ -2189,7 +2008,6 @@ L_08B10880: } L_08B10888: aot_gpr_31 = (0x08B10890u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B10890u) goto L_08B10890; AOT_REGCACHE_SYNC_OUT(); return; L_08B10890: @@ -2200,7 +2018,6 @@ L_08B10890: L_08B10898: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B108C0; } @@ -2208,7 +2025,6 @@ L_08B10898: } L_08B108A4: aot_gpr_31 = (0x08B108ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B108ACu) goto L_08B108AC; AOT_REGCACHE_SYNC_OUT(); return; L_08B108AC: @@ -2219,7 +2035,6 @@ L_08B108AC: L_08B108B4: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B108EC; } @@ -2233,7 +2048,6 @@ L_08B108C0: L_08B108C8: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B10944; } @@ -2253,7 +2067,6 @@ L_08B108D4: } L_08B108EC: aot_gpr_31 = (0x08B108F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B108F4u) goto L_08B108F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B108F4: @@ -2264,7 +2077,6 @@ L_08B108F4: L_08B108FC: aot_gpr_4 = (0u | 4u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B10944; } @@ -2278,7 +2090,6 @@ L_08B10908: L_08B10910: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B10930; } @@ -2292,7 +2103,6 @@ L_08B1091C: L_08B10924: aot_gpr_4 = (0u | 2u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B10944; } @@ -2322,7 +2132,17 @@ L_08B10944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1096C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(320))); @@ -2340,9 +2160,7 @@ L_08B1096C: ctx.gpr[6] = (ctx.gpr[6] | 52429u); ctx.fpr[16] = std::bit_cast(ctx.gpr[6]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B109D8; } @@ -2362,7 +2180,6 @@ L_08B109B8: } L_08B109D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B10CDC; } @@ -2370,7 +2187,6 @@ L_08B109D0: } L_08B109D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B10CDC; } @@ -2411,7 +2227,6 @@ L_08B109E0: goto L_08B10A5C; L_08B10A5C: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08B10A74; } @@ -2456,7 +2271,6 @@ L_08B10A98: L_08B10A9C: ctx.gpr[15] = (aot_gpr_16 | 0u); { const bool branch_taken = ctx.gpr[15] == 0u; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2465,7 +2279,6 @@ L_08B10A9C: L_08B10AA8: ctx.gpr[25] = (aot_mem.aot_direct_load32(ctx.gpr[15] + static_cast(852))); { const bool branch_taken = ctx.gpr[25] == 0u; - // nop if (branch_taken) { goto L_08B10ABC; } @@ -2473,7 +2286,6 @@ L_08B10AA8: } L_08B10AB4: { const bool branch_taken = ctx.gpr[25] != ctx.gpr[14]; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2489,7 +2301,6 @@ L_08B10ABC: goto L_08B10ACC; L_08B10ACC: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[12]; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2500,7 +2311,6 @@ L_08B10AD4: goto L_08B10AD8; L_08B10AD8: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[3]; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2510,7 +2320,6 @@ L_08B10AE0: ctx.gpr[17] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[15] + static_cast(613)))))); ctx.gpr[18] = (ctx.gpr[17] & 1u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2534,7 +2343,6 @@ L_08B10AF8: } L_08B10B00: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2554,7 +2362,6 @@ L_08B10B14: ctx.fpr[2] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); ctx.fpr[0] = ctx.fpr[0] - ctx.fpr[2]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(ctx.fpr[0]) ^ 0x80000000u); goto L_08B10B30; @@ -2562,9 +2369,7 @@ L_08B10B14: goto L_08B10B30; L_08B10B30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2582,9 +2387,7 @@ L_08B10B40: ctx.fpr[0] = ctx.fpr[1] + ctx.fpr[5]; ctx.fpr[0] = std::sqrt(ctx.fpr[0]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2598,9 +2401,7 @@ L_08B10B78: ctx.fpr[5] = ctx.fpr[5] + ctx.fpr[6]; ctx.fpr[5] = std::sqrt(ctx.fpr[5]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[5] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2612,9 +2413,7 @@ L_08B10BA0: ctx.fpr[5] = ctx.fpr[5] + ctx.fpr[6]; ctx.fpr[0] = ctx.fpr[5] / ctx.fpr[0]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2622,7 +2421,6 @@ L_08B10BA0: } L_08B10BC0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (ctx.gpr[15] + static_cast(16)); if (branch_taken) { @@ -2637,7 +2435,6 @@ L_08B10BD0: { const float fs = aot_fpr_12; const float ft = ctx.fpr[5]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[5] = std::bit_cast(0x7FC00000u); else ctx.fpr[5] = fs * ft; } ctx.fpr[0] = ctx.fpr[0] + ctx.fpr[5]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[1]; const float ft = ctx.fpr[4]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[0] = std::bit_cast(0x7FC00000u); else ctx.fpr[0] = fs * ft; } goto L_08B10C58; @@ -2646,7 +2443,6 @@ L_08B10BD0: L_08B10BF4: aot_gpr_16 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[15] + static_cast(534)))))); { const bool branch_taken = aot_gpr_16 == ctx.gpr[10]; - // nop if (branch_taken) { goto L_08B10C48; } @@ -2654,7 +2450,6 @@ L_08B10BF4: } L_08B10C00: { const bool branch_taken = aot_gpr_16 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B10C48; } @@ -2665,9 +2460,7 @@ L_08B10C08: { const float fs = ctx.fpr[3]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[2] = std::bit_cast(0x7FC00000u); else ctx.fpr[2] = fs * ft; } ctx.fpr[0] = ctx.fpr[0] - ctx.fpr[2]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10C34; } @@ -2706,9 +2499,7 @@ L_08B10C58: { const float fs = ctx.fpr[2]; const float ft = ctx.fpr[3]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[2] = std::bit_cast(0x7FC00000u); else ctx.fpr[2] = fs * ft; } ctx.fpr[0] = ctx.fpr[0] + ctx.fpr[2]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2717,7 +2508,6 @@ L_08B10C58: L_08B10C70: ctx.gpr[25] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[15] + static_cast(534)))))); { const bool branch_taken = ctx.gpr[25] == ctx.gpr[3]; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2739,9 +2529,7 @@ L_08B10C90: { const float fs = ctx.fpr[2]; const float ft = ctx.fpr[3]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[2] = std::bit_cast(0x7FC00000u); else ctx.fpr[2] = fs * ft; } ctx.fpr[0] = ctx.fpr[0] + ctx.fpr[2]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2750,7 +2538,6 @@ L_08B10C90: L_08B10CAC: ctx.gpr[25] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[15] + static_cast(534)))))); { const bool branch_taken = ctx.gpr[25] == ctx.gpr[3]; - // nop if (branch_taken) { goto L_08B10CC8; } @@ -2785,7 +2572,17 @@ L_08B10CDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B10CF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2817,7 +2614,6 @@ L_08B10D28: aot_gpr_4 = (aot_gpr_2 & aot_gpr_4); aot_gpr_5 = (43008u << 16u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B10D40; } @@ -2840,7 +2636,17 @@ L_08B10D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B10D5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2852,7 +2658,6 @@ L_08B10D5C: goto L_08B10CF0; L_08B10D78: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B10DC8; } @@ -2866,7 +2671,6 @@ L_08B10D80: AOT_REGCACHE_SYNC_OUT(); return; L_08B10D8C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B10DC0; } @@ -2889,7 +2693,6 @@ L_08B10DA8: AOT_REGCACHE_SYNC_OUT(); return; L_08B10DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B10DEC; } @@ -2929,7 +2732,17 @@ L_08B10DEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B10E00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2955,7 +2768,6 @@ L_08B10E30: AOT_REGCACHE_SYNC_OUT(); return; L_08B10E3C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B10E58; } @@ -2969,7 +2781,6 @@ L_08B10E44: AOT_REGCACHE_SYNC_OUT(); return; L_08B10E50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B10EA0; } @@ -2995,7 +2806,6 @@ L_08B10E70: AOT_REGCACHE_SYNC_OUT(); return; L_08B10E7C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B10E94; } @@ -3030,7 +2840,17 @@ L_08B10EA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B10EBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[6] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(3)))))); @@ -3063,7 +2883,6 @@ L_08B10F04: AOT_REGCACHE_SYNC_OUT(); return; L_08B10F10: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B10F5C; } @@ -3137,7 +2956,17 @@ L_08B10F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B10FA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -3154,7 +2983,6 @@ L_08B10FA0: L_08B10FCC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B1101C; } @@ -3205,7 +3033,6 @@ L_08B1100C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1105C; } @@ -3279,7 +3106,17 @@ L_08B1106C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1108C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -3296,7 +3133,6 @@ L_08B1108C: AOT_REGCACHE_SYNC_OUT(); return; L_08B110BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B110F0; } @@ -3368,7 +3204,6 @@ L_08B11124: AOT_REGCACHE_SYNC_OUT(); return; L_08B11134: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11178; } @@ -3423,7 +3258,6 @@ L_08B1118C: AOT_REGCACHE_SYNC_OUT(); return; L_08B1119C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11218; } @@ -3440,7 +3274,6 @@ L_08B111A4: L_08B111B8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B11218; } @@ -3473,9 +3306,7 @@ L_08B111F0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B11218; } @@ -3507,7 +3338,17 @@ L_08B11224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1124C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -3519,7 +3360,6 @@ L_08B1124C: goto L_08B11260; L_08B11260: aot_gpr_31 = (0x08B11268u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B11268u) goto L_08B11268; AOT_REGCACHE_SYNC_OUT(); return; L_08B11268: @@ -3542,7 +3382,6 @@ L_08B11278: } L_08B11284: aot_gpr_31 = (0x08B1128Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1128Cu) goto L_08B1128C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1128C: @@ -3564,7 +3403,17 @@ L_08B112A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B112B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -3585,7 +3434,6 @@ L_08B112B4: } L_08B112E8: aot_gpr_31 = (0x08B112F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B112F0u) goto L_08B112F0; AOT_REGCACHE_SYNC_OUT(); return; L_08B112F0: @@ -3604,7 +3452,6 @@ L_08B11304: AOT_REGCACHE_SYNC_OUT(); return; L_08B11310: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11350; } @@ -3641,7 +3488,6 @@ L_08B11350: AOT_REGCACHE_SYNC_OUT(); return; L_08B1135C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B113F0; } @@ -3654,7 +3500,6 @@ L_08B11364: AOT_REGCACHE_SYNC_OUT(); return; L_08B1136C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B113E4; } @@ -3668,7 +3513,6 @@ L_08B11374: AOT_REGCACHE_SYNC_OUT(); return; L_08B11380: { const bool branch_taken = aot_gpr_2 != aot_gpr_16; - // nop if (branch_taken) { goto L_08B113D0; } @@ -3707,7 +3551,6 @@ L_08B113BC: AOT_REGCACHE_SYNC_OUT(); return; L_08B113C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B113DC; } @@ -3748,7 +3591,17 @@ L_08B113F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11410: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); aot_gpr_2 = (0u | 0u); @@ -3759,11 +3612,20 @@ L_08B11410: goto L_08B11420; L_08B11420: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11428: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3778,7 +3640,6 @@ L_08B11428: AOT_REGCACHE_SYNC_OUT(); return; L_08B1144C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B1145C; } @@ -3786,7 +3647,6 @@ L_08B1144C: } L_08B11454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1147C; } @@ -3821,7 +3681,17 @@ L_08B1147C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11490: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); @@ -3838,7 +3708,6 @@ L_08B11490: L_08B114B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B114CC; } @@ -3854,7 +3723,6 @@ L_08B114BC: } L_08B114C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B114F0; } @@ -3862,7 +3730,6 @@ L_08B114C4: } L_08B114CC: aot_gpr_31 = (0x08B114D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B114D4u) goto L_08B114D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B114D4: @@ -3894,21 +3761,51 @@ L_08B114F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11504: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(64))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1150C: jump_target = aot_gpr_31; aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(60))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11514: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -3947,7 +3844,17 @@ L_08B11568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11578: { const std::uint32_t vfpu_address = ctx.gpr[6] + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -4001,11 +3908,20 @@ L_08B11578: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B115A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4038,7 +3954,6 @@ L_08B115D8: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -4109,7 +4024,17 @@ L_08B116A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B116BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4140,7 +4065,6 @@ L_08B116E4: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16256u << 16u); if (branch_taken) { @@ -4184,7 +4108,17 @@ L_08B11758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11768: aot_fpr_12 = aot_fpr_12 - ctx.fpr[16]; aot_fpr_13 = aot_fpr_13 - ctx.fpr[17]; @@ -4200,7 +4134,6 @@ L_08B11768: ctx.fpr[16] = std::bit_cast(0u); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08B117AC; @@ -4212,7 +4145,17 @@ L_08B117AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B117B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-8744))); @@ -4229,7 +4172,6 @@ L_08B117B4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); ctx.fpr[22] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(std::bit_cast(aot_fpr_15)); if (branch_taken) { @@ -4239,9 +4181,7 @@ L_08B117B4: } L_08B117FC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B11838; } @@ -4249,9 +4189,7 @@ L_08B117FC: } L_08B1180C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B11838; } @@ -4262,9 +4200,7 @@ L_08B1181C: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B11930; } @@ -4283,7 +4219,6 @@ L_08B11838: goto L_08B11768; L_08B1185C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11928; } @@ -4304,7 +4239,6 @@ L_08B11864: goto L_08B11768; L_08B11890: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11920; } @@ -4327,7 +4261,6 @@ L_08B11898: goto L_08B11768; L_08B118CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11918; } @@ -4350,7 +4283,6 @@ L_08B118D4: goto L_08B11768; L_08B11908: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11938; } @@ -4414,7 +4346,17 @@ L_08B1193C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1195C: aot_fpr_12 = ctx.fpr[16] - aot_fpr_12; aot_fpr_13 = ctx.fpr[17] - aot_fpr_13; @@ -4422,9 +4364,7 @@ L_08B1195C: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B11988; } @@ -4443,11 +4383,20 @@ L_08B11988: goto L_08B1198C; L_08B1198C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11994: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10544))); @@ -4501,7 +4450,6 @@ L_08B11A14: goto L_08B115A0; L_08B11A30: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11A70; } @@ -4517,7 +4465,6 @@ L_08B11A38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); if (branch_taken) { @@ -4591,9 +4538,7 @@ L_08B11ACC: { const float fs = aot_fpr_13; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B11D0C; } @@ -4608,7 +4553,6 @@ L_08B11B08: goto L_08B11E3C; L_08B11B1C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11B48; } @@ -4623,7 +4567,6 @@ L_08B11B24: goto L_08B11E3C; L_08B11B38: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11B50; } @@ -4631,7 +4574,6 @@ L_08B11B38: } L_08B11B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B11D0C; } @@ -4769,7 +4711,6 @@ L_08B11B50: goto L_08B116BC; L_08B11BD8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11C00; } @@ -4784,7 +4725,6 @@ L_08B11BE0: goto L_08B11E3C; L_08B11BF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11C00; } @@ -4795,7 +4735,6 @@ L_08B11BFC: goto L_08B11C00; L_08B11C00: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B11C54; } @@ -4813,7 +4752,6 @@ L_08B11C08: goto L_08B116BC; L_08B11C2C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11C54; } @@ -4828,7 +4766,6 @@ L_08B11C34: goto L_08B11E3C; L_08B11C48: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11C54; } @@ -4839,7 +4776,6 @@ L_08B11C50: goto L_08B11C54; L_08B11C54: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B11CA8; } @@ -4857,7 +4793,6 @@ L_08B11C5C: goto L_08B116BC; L_08B11C80: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11CA8; } @@ -4872,7 +4807,6 @@ L_08B11C88: goto L_08B11E3C; L_08B11C9C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11CA8; } @@ -4883,7 +4817,6 @@ L_08B11CA4: goto L_08B11CA8; L_08B11CA8: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B11CFC; } @@ -4901,7 +4834,6 @@ L_08B11CB0: goto L_08B116BC; L_08B11CD4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11CFC; } @@ -4916,7 +4848,6 @@ L_08B11CDC: goto L_08B11E3C; L_08B11CF0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B11CFC; } @@ -4927,7 +4858,6 @@ L_08B11CF8: goto L_08B11CFC; L_08B11CFC: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B11D0C; } @@ -4975,7 +4905,17 @@ L_08B11D24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11D58: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (0u | 0u); @@ -5068,7 +5008,6 @@ L_08B11E18: aot_gpr_4 = (17274u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08B11E30; @@ -5081,7 +5020,17 @@ L_08B11E30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11E3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(120))); @@ -5119,7 +5068,6 @@ L_08B11E80: goto L_08B1195C; L_08B11EA0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B11EC4; } @@ -5163,7 +5111,17 @@ L_08B11EC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11EEC: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10540), aot_gpr_4); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10536), aot_gpr_5); @@ -5176,7 +5134,17 @@ L_08B11EEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B11F0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10544), 0u); @@ -5184,7 +5152,6 @@ L_08B11F0C: { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B11F54; } @@ -5194,7 +5161,6 @@ L_08B11F3C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(2326)))))); aot_gpr_16 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B11F5C; } @@ -5202,7 +5168,6 @@ L_08B11F3C: } L_08B11F4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B11F68; } @@ -5210,7 +5175,6 @@ L_08B11F4C: } L_08B11F54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12200; } @@ -5224,7 +5188,6 @@ L_08B11F5C: L_08B11F68: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(2326)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B12028; } @@ -5236,7 +5199,6 @@ L_08B11F74: goto L_08B11F7C; L_08B11F7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B12028; } @@ -5245,7 +5207,6 @@ L_08B11F7C: L_08B11F84: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(2326)))))); { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B12028; } @@ -5434,7 +5395,6 @@ L_08B120F0: goto L_08B120FC; L_08B120FC: { const bool branch_taken = ctx.gpr[18] != aot_gpr_16; - // nop if (branch_taken) { goto L_08B12040; } @@ -5470,7 +5430,6 @@ L_08B1212C: goto L_08B12134; L_08B12134: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B121E0; } @@ -5480,9 +5439,7 @@ L_08B1213C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(124))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(124))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B121E0; } @@ -5569,7 +5526,6 @@ L_08B121F0: ctx.gpr[17] = (ctx.gpr[17] + static_cast(1)); aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B1211C; } @@ -5591,7 +5547,17 @@ L_08B12200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B12224: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -5647,7 +5613,6 @@ L_08B12290: goto L_08B1195C; L_08B122B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B1232C; } @@ -5676,7 +5641,6 @@ L_08B122BC: goto L_08B1195C; L_08B12308: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B1232C; } @@ -5741,7 +5705,17 @@ L_08B12348: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B12378: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10544))); @@ -5776,7 +5750,6 @@ L_08B1239C: goto L_08B115A0; L_08B123B8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B12464; } @@ -5786,7 +5759,6 @@ L_08B123C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[22] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); goto L_08B123EC; @@ -5835,9 +5807,7 @@ L_08B12418: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(124))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[20]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B12450; } @@ -5852,7 +5822,6 @@ L_08B12434: goto L_08B11E3C; L_08B12448: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B1246C; } @@ -5894,7 +5863,17 @@ L_08B12470: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1248C: aot_gpr_29 = (aot_gpr_29 + static_cast(-832)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -5937,7 +5916,6 @@ L_08B1248C: goto L_08B115A0; L_08B12518: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B125DC; } @@ -5948,9 +5926,7 @@ L_08B12520: aot_gpr_4 = (49942u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B125D4; } @@ -5961,9 +5937,7 @@ L_08B1253C: aot_gpr_4 = (17302u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B125CC; } @@ -6208,7 +6182,6 @@ L_08B125FC: aot_gpr_2 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_2); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[11] = (0u | 1u); goto L_08B12734; @@ -6299,7 +6272,6 @@ L_08B12734: aot_gpr_2 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_2); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[11] = (0u | 1u); goto L_08B1278C; @@ -6376,7 +6348,6 @@ L_08B1278C: aot_gpr_2 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_2); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[11] = (0u | 1u); goto L_08B127D8; @@ -6467,7 +6438,6 @@ L_08B127D8: aot_gpr_2 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_2); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[11] = (0u | 1u); goto L_08B12830; @@ -6544,7 +6514,6 @@ L_08B12830: aot_gpr_2 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_2); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[11] = (0u | 1u); goto L_08B1287C; @@ -6636,7 +6605,6 @@ L_08B1287C: ctx.gpr[11] = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(ctx.gpr[11]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[10] = (0u | 1u); goto L_08B128D8; @@ -7361,7 +7329,6 @@ L_08B12B04: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(138))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B12B5C; } @@ -7376,7 +7343,6 @@ L_08B12B40: goto L_08B12ED0; L_08B12B54: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12B78; } @@ -7387,7 +7353,6 @@ L_08B12B5C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(139))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12B80; } @@ -7395,7 +7360,6 @@ L_08B12B5C: } L_08B12B70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12B9C; } @@ -7418,7 +7382,6 @@ L_08B12B80: goto L_08B12ED0; L_08B12B94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12BB8; } @@ -7429,7 +7392,6 @@ L_08B12B9C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(140))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12BC0; } @@ -7437,7 +7399,6 @@ L_08B12B9C: } L_08B12BB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12BDC; } @@ -7460,7 +7421,6 @@ L_08B12BC0: goto L_08B12ED0; L_08B12BD4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12BF8; } @@ -7471,7 +7431,6 @@ L_08B12BDC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(141))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12C00; } @@ -7479,7 +7438,6 @@ L_08B12BDC: } L_08B12BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12C1C; } @@ -7502,7 +7460,6 @@ L_08B12C00: goto L_08B12ED0; L_08B12C14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12C38; } @@ -7513,7 +7470,6 @@ L_08B12C1C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(138))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12C40; } @@ -7521,7 +7477,6 @@ L_08B12C1C: } L_08B12C30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12C5C; } @@ -7544,7 +7499,6 @@ L_08B12C40: goto L_08B12ED0; L_08B12C54: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12C78; } @@ -7555,7 +7509,6 @@ L_08B12C5C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(139))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12C80; } @@ -7563,7 +7516,6 @@ L_08B12C5C: } L_08B12C70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12C9C; } @@ -7586,7 +7538,6 @@ L_08B12C80: goto L_08B12ED0; L_08B12C94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12CB8; } @@ -7597,7 +7548,6 @@ L_08B12C9C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(140))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12CC0; } @@ -7605,7 +7555,6 @@ L_08B12C9C: } L_08B12CB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12CDC; } @@ -7628,7 +7577,6 @@ L_08B12CC0: goto L_08B12ED0; L_08B12CD4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12CF8; } @@ -7639,7 +7587,6 @@ L_08B12CDC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(141))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12D00; } @@ -7647,7 +7594,6 @@ L_08B12CDC: } L_08B12CF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12D1C; } @@ -7670,7 +7616,6 @@ L_08B12D00: goto L_08B12ED0; L_08B12D14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12D38; } @@ -7681,7 +7626,6 @@ L_08B12D1C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(140))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12D40; } @@ -7689,7 +7633,6 @@ L_08B12D1C: } L_08B12D30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12D5C; } @@ -7712,7 +7655,6 @@ L_08B12D40: goto L_08B12ED0; L_08B12D54: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12D78; } @@ -7723,7 +7665,6 @@ L_08B12D5C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(139))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12D80; } @@ -7731,7 +7672,6 @@ L_08B12D5C: } L_08B12D70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12D9C; } @@ -7754,7 +7694,6 @@ L_08B12D80: goto L_08B12ED0; L_08B12D94: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12DB8; } @@ -7765,7 +7704,6 @@ L_08B12D9C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(141))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12DC0; } @@ -7773,7 +7711,6 @@ L_08B12D9C: } L_08B12DB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B12DDC; } @@ -7796,7 +7733,6 @@ L_08B12DC0: goto L_08B12ED0; L_08B12DD4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12DF8; } @@ -7807,7 +7743,6 @@ L_08B12DDC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(138))); aot_gpr_4 = (aot_gpr_4 ^ aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B12E00; } @@ -7838,7 +7773,6 @@ L_08B12E00: goto L_08B12ED0; L_08B12E14: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B12E5C; } @@ -7858,9 +7792,7 @@ L_08B12E20: aot_fpr_15 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B12E98; } @@ -7893,9 +7825,7 @@ L_08B12E64: aot_fpr_15 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_15; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B12EA0; } @@ -7930,7 +7860,17 @@ L_08B12EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B12ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-352)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(316), ctx.gpr[18]); @@ -7954,7 +7894,6 @@ L_08B12F24: aot_gpr_4 = (aot_gpr_16 + ctx.gpr[28]); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(10512))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B12F68; } @@ -8117,7 +8056,6 @@ L_08B12FC8: goto L_08B115A0; L_08B13044: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13054; } @@ -8138,7 +8076,6 @@ L_08B13054: L_08B1305C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(10512))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13084; } @@ -8281,7 +8218,6 @@ L_08B130DC: goto L_08B115A0; L_08B13158: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13168; } @@ -8302,7 +8238,6 @@ L_08B1316C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10520))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10520))); goto L_08B13184; @@ -8313,7 +8248,6 @@ L_08B13184: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10520), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10520))); goto L_08B131A0; @@ -8324,7 +8258,6 @@ L_08B131A0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10524))); goto L_08B131BC; @@ -8335,7 +8268,6 @@ L_08B131BC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10524), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10524))); goto L_08B131D8; @@ -8346,7 +8278,6 @@ L_08B131D8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10528))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10528))); goto L_08B131F4; @@ -8357,7 +8288,6 @@ L_08B131F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10528), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10528))); goto L_08B13210; @@ -8368,7 +8298,6 @@ L_08B13210: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10532))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10532))); goto L_08B1322C; @@ -8378,7 +8307,6 @@ L_08B1322C: ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10532), std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(10532))); goto L_08B13244; @@ -8438,7 +8366,6 @@ L_08B1329C: goto L_08B117B4; L_08B132EC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B1334C; } @@ -8464,7 +8391,6 @@ L_08B132F4: goto L_08B1195C; L_08B13334: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13344; } @@ -8516,7 +8442,17 @@ L_08B1335C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B133A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(228), ctx.gpr[22]); @@ -8554,7 +8490,6 @@ L_08B13414: goto L_08B1341C; L_08B1341C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B136FC; } @@ -8578,7 +8513,6 @@ L_08B1342C: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_fpr_12 = std::sqrt(aot_fpr_12); aot_gpr_31 = (0x08B13454u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, ctx.gpr[3], aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B13454u) goto L_08B13454; AOT_REGCACHE_SYNC_OUT(); return; L_08B13454: @@ -8599,7 +8533,6 @@ L_08B13474: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -8656,9 +8589,7 @@ L_08B134FC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(124))); aot_fpr_12 = aot_fpr_12 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B136E8; } @@ -8673,7 +8604,6 @@ L_08B13518: goto L_08B11E3C; L_08B1352C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13558; } @@ -8688,7 +8618,6 @@ L_08B13534: goto L_08B11E3C; L_08B13548: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13560; } @@ -8696,7 +8625,6 @@ L_08B13548: } L_08B13550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B136E8; } @@ -8769,7 +8697,6 @@ L_08B13560: goto L_08B116BC; L_08B135AC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B135D4; } @@ -8784,7 +8711,6 @@ L_08B135B4: goto L_08B11E3C; L_08B135C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B135D4; } @@ -8795,7 +8721,6 @@ L_08B135D0: goto L_08B135D4; L_08B135D4: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B13628; } @@ -8813,7 +8738,6 @@ L_08B135DC: goto L_08B116BC; L_08B13600: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13628; } @@ -8828,7 +8752,6 @@ L_08B13608: goto L_08B11E3C; L_08B1361C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13628; } @@ -8839,7 +8762,6 @@ L_08B13624: goto L_08B13628; L_08B13628: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B1367C; } @@ -8857,7 +8779,6 @@ L_08B13630: goto L_08B116BC; L_08B13654: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B1367C; } @@ -8872,7 +8793,6 @@ L_08B1365C: goto L_08B11E3C; L_08B13670: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B1367C; } @@ -8883,7 +8803,6 @@ L_08B13678: goto L_08B1367C; L_08B1367C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B136D8; } @@ -8903,7 +8822,6 @@ L_08B13684: goto L_08B115A0; L_08B136B0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B136D8; } @@ -8918,7 +8836,6 @@ L_08B136B8: goto L_08B11E3C; L_08B136CC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B136D8; } @@ -8929,7 +8846,6 @@ L_08B136D4: goto L_08B136D8; L_08B136D8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B136E8; } @@ -8982,7 +8898,17 @@ L_08B13700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13748: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -9085,9 +9011,7 @@ L_08B1379C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(172), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B13A0C; } @@ -9173,9 +9097,7 @@ L_08B138B8: { const float fs = aot_fpr_15; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = ctx.fpr[17] + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B13A0C; } @@ -9200,7 +9122,17 @@ L_08B13A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13A20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9210,7 +9142,6 @@ L_08B13A20: goto L_08B13B00; L_08B13A34: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13A64; } @@ -9222,7 +9153,6 @@ L_08B13A3C: goto L_08B13B44; L_08B13A44: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13A5C; } @@ -9234,7 +9164,6 @@ L_08B13A4C: goto L_08B13D8C; L_08B13A54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13A64; } @@ -9259,7 +9188,17 @@ L_08B13A68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13A78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9272,7 +9211,6 @@ L_08B13A78: aot_gpr_5 = (aot_gpr_5 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B13AEC; } @@ -9281,7 +9219,6 @@ L_08B13A78: L_08B13AA8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B13AEC; } @@ -9289,12 +9226,10 @@ L_08B13AA8: } L_08B13AB4: aot_gpr_31 = (0x08B13ABCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 58u, 0x08AD0600u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B13ABCu) goto L_08B13ABC; AOT_REGCACHE_SYNC_OUT(); return; L_08B13ABC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13AEC; } @@ -9317,7 +9252,6 @@ L_08B13AD4: AOT_REGCACHE_SYNC_OUT(); return; L_08B13ADC: { const bool branch_taken = aot_gpr_16 == aot_gpr_2; - // nop if (branch_taken) { goto L_08B13AEC; } @@ -9342,7 +9276,17 @@ L_08B13AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13B00: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -9351,7 +9295,6 @@ L_08B13B00: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B13B38; } @@ -9361,7 +9304,6 @@ L_08B13B20: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B13B38; } @@ -9380,11 +9322,20 @@ L_08B13B38: goto L_08B13B3C; L_08B13B3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13B44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9397,7 +9348,6 @@ L_08B13B44: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13C10; } @@ -9410,7 +9360,6 @@ L_08B13B74: AOT_REGCACHE_SYNC_OUT(); return; L_08B13B7C: { const bool branch_taken = ctx.gpr[17] == aot_gpr_2; - // nop if (branch_taken) { goto L_08B13BAC; } @@ -9420,7 +9369,6 @@ L_08B13B84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 41u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B13BAC; } @@ -9430,7 +9378,6 @@ L_08B13B94: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (static_cast(aot_gpr_4) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B13BE0; } @@ -9454,7 +9401,6 @@ L_08B13BAC: } L_08B13BB4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13BE0; } @@ -9467,7 +9413,6 @@ L_08B13BBC: AOT_REGCACHE_SYNC_OUT(); return; L_08B13BC4: { const bool branch_taken = ctx.gpr[17] == aot_gpr_2; - // nop if (branch_taken) { goto L_08B13BD8; } @@ -9510,7 +9455,6 @@ L_08B13BF8: AOT_REGCACHE_SYNC_OUT(); return; L_08B13C00: { const bool branch_taken = aot_gpr_16 != aot_gpr_2; - // nop if (branch_taken) { goto L_08B13C10; } @@ -9539,7 +9483,17 @@ L_08B13C14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13C28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -9548,7 +9502,6 @@ L_08B13C28: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B13C74; } @@ -9563,7 +9516,6 @@ L_08B13C48: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13C74; } @@ -9582,11 +9534,20 @@ L_08B13C74: goto L_08B13C78; L_08B13C78: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13C80: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -9595,7 +9556,6 @@ L_08B13C80: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B13CB8; } @@ -9605,7 +9565,6 @@ L_08B13CA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B13CB8; } @@ -9624,11 +9583,20 @@ L_08B13CB8: goto L_08B13CBC; L_08B13CBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13CC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9640,7 +9608,6 @@ L_08B13CC4: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13D24; } @@ -9653,7 +9620,6 @@ L_08B13CF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B13CF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13D24; } @@ -9662,7 +9628,6 @@ L_08B13CF8: L_08B13D00: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B13D24; } @@ -9672,7 +9637,6 @@ L_08B13D0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B13D24; } @@ -9697,11 +9661,20 @@ L_08B13D28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13D38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13D4C; } @@ -9720,11 +9693,20 @@ L_08B13D4C: goto L_08B13D50; L_08B13D50: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13D58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -9733,7 +9715,6 @@ L_08B13D58: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13D80; } @@ -9752,11 +9733,20 @@ L_08B13D80: goto L_08B13D84; L_08B13D84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13D8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9768,7 +9758,6 @@ L_08B13D8C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13E20; } @@ -9781,7 +9770,6 @@ L_08B13DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B13DC0: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B13E20; } @@ -9799,7 +9787,6 @@ L_08B13DD0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13E20; } @@ -9818,7 +9805,6 @@ L_08B13DF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B13E00: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13E18; } @@ -9831,7 +9817,6 @@ L_08B13E08: AOT_REGCACHE_SYNC_OUT(); return; L_08B13E10: { const bool branch_taken = aot_gpr_16 != aot_gpr_2; - // nop if (branch_taken) { goto L_08B13E20; } @@ -9856,7 +9841,17 @@ L_08B13E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9866,7 +9861,6 @@ L_08B13E34: goto L_08B13B44; L_08B13E48: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13EAC; } @@ -9876,7 +9870,6 @@ L_08B13E50: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2208))); { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B13EA4; } @@ -9888,7 +9881,6 @@ L_08B13E60: goto L_08B13D8C; L_08B13E68: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B13E9C; } @@ -9897,7 +9889,6 @@ L_08B13E68: L_08B13E70: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B13E94; } @@ -9905,14 +9896,12 @@ L_08B13E70: } L_08B13E7C: aot_gpr_31 = (0x08B13E84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B13E84u) goto L_08B13E84; AOT_REGCACHE_SYNC_OUT(); return; L_08B13E84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(3332))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B13EB4; } @@ -9961,7 +9950,17 @@ L_08B13EB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13EC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_4); @@ -10003,7 +10002,17 @@ L_08B13F08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13F24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -10039,7 +10048,6 @@ L_08B13F50: goto L_08B13F5C; L_08B13F5C: aot_gpr_31 = (0x08B13F64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, ctx.gpr[6], ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B13F64u) goto L_08B13F64; AOT_REGCACHE_SYNC_OUT(); return; L_08B13F64: @@ -10047,7 +10055,6 @@ L_08B13F64: goto L_08B13F68; L_08B13F68: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B13F78; } @@ -10070,7 +10077,17 @@ L_08B13F78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B13F8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.gpr[6] = (aot_gpr_5 + static_cast(48)); @@ -10090,9 +10107,7 @@ L_08B13F8C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_31); aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0196_entry, 196u, 13u, 0x08B141D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0196.cpp b/profiles/vcs/generated/generated_unit_0196.cpp index 8d5f3d4..f2908da 100644 --- a/profiles/vcs/generated/generated_unit_0196.cpp +++ b/profiles/vcs/generated/generated_unit_0196.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0196[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 9, 0, 10, 0, 0, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 21, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 28, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 34, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, 0, 0, - 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 50, 0, - 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 55, 56, 0, - 0, 0, 0, 0, 57, 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, - 0, 71, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 74, 0, 75, 76, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 87, 0, 0, 88, 0, 0, 89, 0, 90, 0, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 92, 93, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, - 0, 0, 0, 0, 0, 97, 0, 98, 0, 99, 0, 100, 0, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, - 109, 0, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, - 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 0, 122, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, - 0, 130, 0, 0, 131, 0, 0, 132, 133, 0, 134, 0, 0, 135, 0, 0, 136, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, - 140, 0, 0, 0, 0, 0, 141, 0, 142, 0, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 0, 146, 147, 0, 0, 148, 0, 149, 0, 0, 0, 150, - 0, 0, 151, 0, 152, 0, 0, 153, 0, 154, 0, 0, 155, 0, 156, 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 0, 162, 0, 0, 163, 164, - 0, 165, 0, 0, 166, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 169, 170, 0, 171, 0, 0, 0, 172, 0, 0, 0, 0, 173, 0, 0, 0, - 174, 0, 0, 0, 175, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 0, 181, 182, 0, 183, - 0, 0, 184, 0, 185, 0, 0, 186, 0, 0, 187, 0, 188, 0, 0, 0, 189, 0, 0, 0, 0, 190, 0, 0, 0, 191, 0, 192, 0, 0, 0, 193, - 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 196, 0, 0, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 200, 0, 201, 0, 0, 0, 0, - 0, 202, 0, 203, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 206, 0, 0, 0, 207, 0, 208, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, - 211, 0, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 218, 0, 0, 0, 219, 0, 220, 0, 221, 0, 222, 223, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 228, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 232, 0, 233, 0, 0, 234, 0, 235, 236, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 241, 0, 242, 0, - 0, 0, 0, 243, 0, 244, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 248, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, - 0, 0, 250, 0, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 255, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 256, 257, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, 263, - 0, 0, 0, 264, 265, 0, 266, 0, 267, 0, 0, 0, 0, 0, 268, 269, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 272, 273, - 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 0, 281, 0, - 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 289, 0, - 0, 290, 0, 0, 291, 0, 0, 0, 292, 0, 0, 293, 0, 0, 294, 0, 0, 0, 295, 0, 0, 296, 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, 301, 0, 0, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 308, 0, 309, 0, 0, 0, 0, 0, 0, 310, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 315, 0, 0, - 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 0, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 332, 0, 0, 333, - 0, 334, 0, 0, 0, 335, 0, 0, 336, 0, 0, 337, 0, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 340, 0, 0, 341, 0, 342, 0, 343, 0, 0, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 349, 350, 0, 0, 0, 0, 0, 0, 0, - 0, 351, 0, 0, 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, - 0, 0, 357, 0, 358, 0, 0, 0, 359, 0, 0, 360, 0, 361, 0, 362, 0, 363, 0, 0, 364, 0, 0, 0, 365, 0, 0, 0, 366, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 370, 371, 0, 0, 372, 0, 373, 0, - 374, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 0, 379, 0, 0, 380, 0, 381, 0, - 382, 0, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 386, 0, 0, 0, 387, 388, 0, 0, 0, 389, 0, 0, 0, 0, 390, 0, 0, 391, - 0, 392, 0, 393, 0, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, 0, 397, 0, 0, 0, 398, 399, 0, 0, 0, 400, 0, 0, 0, 0, 401, - 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 408, 0, 409, 0, - 0, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 417, - 418, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, 0, 422, 0, 0, 423, 0, 424, 0, 425, 0, 426, 0, 427, 0, - 0, 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 430, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 435, 436, 0, 0, 0, 437, 0, 0, 438, 0, 439, 0, 0, 440, 0, 441, 442, 0, 0, 0, - 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 446, 0, 0, 0, 447, 0, 448, 0, 0, 0, 449, 0, - 0, 450, 0, 451, 0, 452, 0, 453, 0, 0, 0, 454, 0, 0, 455, 0, 456, 457, 0, 458, 0, 459, 460, 0, 461, 0, 0, 0, 0, 0, 0, 0, - 462, 0, 0, 0, 0, 0, 0, 0, 463, 464, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 0, - 468, 0, 0, 0, 469, 0, 0, 470, 0, 471, 0, 472, 0, 0, 473, 0, 474, 0, 0, 0, 475, 0, 0, 476, 0, 0, 0, 477, 0, 0, 478, 0, - 479, 480, 0, 0, 481, 482, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 485, 0, 0, - 486, 487, 0, 0, 0, 488, 0, 0, 489, 0, 490, 0, 0, 491, 0, 492, 493, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 0, 497, 498, 0, 0, 0, 499, 0, 0, 500, 0, 0, 501, 0, 0, 0, 502, 0, 0, 0, 503, - 0, 0, 504, 0, 505, 0, 0, 506, 507, 0, 508, 0, 0, 509, 0, 0, 0, 510, 0, 0, 0, 0, 511, 0, 512, 0, 513, 0, 0, 514, 515, 0, - 0, 516, 0, 517, 518, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 0, 522, 0, 523, 0, 0, 524, 0, - 0, 0, 525, 0, 526, 0, 527, 0, 0, 0, 0, 0, 528, 529, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, - 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, 0, 536, 0, 0, 537, 0, 0, 0, 0, 538, 0, 0, - 539, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 547, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, - 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 553, 0, 554, 0, 0, 555, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 559, 0, 0, 560, 0, 561, 0, 562, 0, 563, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, - 566, 567, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 571, 0, 572, 0, - 573, 0, 0, 574, 0, 0, 575, 0, 576, 0, 0, 577, 578, 0, 0, 579, 0, 580, 0, 0, 581, 0, 0, 582, 0, 583, 0, 0, 584, 585, 0, 0, - 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 588, 0, 0, 589, 590, 0, 0, 0, 591, 0, 0, 0, - 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 595, 596, 0, 0, 597, 0, 0, 598, 0, - 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 601, 0, 0, 602, 603, 0, 0, 604, 0, - 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 608, 0, 0, 609, 610, - 0, 0, 611, 0, 612, 0, 613, 0, 614, 0, 615, 0, 0, 0, 0, 0, 616, 0, 617, 0, 618, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, - 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 624, 0, 625, 626, 0, 627, 0, 0, 0, 0, 0, 628, 0, - 629, 0, 0, 630, 0, 0, 631, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, - 635, 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 640, 0, 0, 0, 0, 641, - 0, 0, 642, 0, 0, 643, 644, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 647, 0, 0, 0, 648, - 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 650, 0, 0, 651, 0, 0, 652, 0, 653, 0, 0, 654, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 0, 657, 0, 0, 658, 0, 0, 0, 659, 0, 0, 660, 0, 661, 0, 0, 662, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 663, 0, 0, 0, 664, 0, 0, 0, 665, 0, 0, 0, 666, 0, 0, 667, 0, 668, 0, 0, 669, 0, 670, 0, 0, 671, 0, 0, - 0, 0, 0, 0, 672, 0, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 676, 0, 677, 0, 678, 0, 0, 679, 0, 680, 0, 0, 0, 0, 0, 0, - 681, 0, 0, 0, 682, 0, 683, 0, 0, 0, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, - 0, 688, 0, 689, 0, 0, 0, 690, 0, 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 693, 0, 694, 0, 695, 0, 696, 0, 697, 0, - 0, 698, 0, 699, 0, 700, 0, 0, 0, 0, 701, 0, 702, 0, 0, 703, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 706, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, 0, 708, 0, 0, 0, 0, 0, 709, 0, - 0, 0, 710, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 715, 0, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, - 718, 0, 0, 0, 719, 0, 0, 720, 0, 721, 0, 0, 0, 0, 722, 0, 723, 0, 0, 724, 0, 0, 0, 725, 0, 0, 0, 726, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 731, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 733, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 737, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 738, 0, 0, 739, 0, 0, 740, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 743, 0, 0, 0, - 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 745, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, - 0, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 753, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 755, 0, 0, 0, 0, 0, 756, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, - 758, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 760, 0, 0, 0, 0, 761, 0, 762, 0, 0, 763, 0, 764, 765, 0, 0, 0, 0, 766, 0, - 0, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 768, 0, 0, 0, 0, 769, 0, 0, 770, 0, 771, 0, 772, 0, 773, 0, 774, 0, 775, 776, 777, - 0, 778, 0, 779, 780, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 783, 0, 0, 0, 0, 784, 0, 0, 785, - 0, 786, 0, 787, 0, 788, 0, 789, 0, 790, 791, 792, 0, 793, 0, 794, 795, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 797, - 0, 0, 0, 798, 0, 0, 0, 0, 799, 0, 0, 800, 0, 801, 0, 802, 0, 803, 0, 804, 0, 805, 806, 807, 0, 808, 0, 809, 810, 0, 0, 0, - 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 813, 0, 0, 0, 0, 814, 0, 0, 815, 0, 816, 0, 817, 0, 818, 0, 819, - 0, 820, 821, 822, 0, 823, 0, 824, 825, 0, 0, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 828, 0, 0, 0, 0, 829, - 0, 830, 0, 0, 831, 0, 832, 833, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, 0, 836, 0, 0, 0, 0, 837, 0, 838, - 0, 0, 839, 0, 840, 841, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 844, 0, 0, 0, 0, 845, 0, 846, 0, 0, - 847, 0, 848, 849, 0, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 851, 0, 852, 0, 853, 0, 0, 854, 0, 0, 0, 0, 0, 855, 0, 0, - 0, 856, 0, 857, 0, 858, 0, 0, 0, 859, 0, 0, 0, 860, 0, 861, 0, 862, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, - 865, 0, 0, 0, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 867, 0, 868, 0, 0, 869, 0, 0, 0, 0, 870, 0, 0, 871, 0, 0, 872, 0, - 0, 0, 873, 0, 0, 0, 874, 0, 0, 0, 0, 875, 0, 876, 0, 0, 877, 878, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 880, 0, 881, - 0, 0, 882, 0, 0, 883, 0, 884, 885, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 888, 0, 0, 0, 0, - 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 890, 0, 891, 0, 0, 892, 0, 0, 893, 0, 0, 894, 0, 0, 0, 895, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0196[64] = { + 0x0000000000800501ull, 0x0241000094880480ull, 0x0000000000000000ull, 0x0000022880020492ull, + 0x00A9102080902A02ull, 0x0000100A02409012ull, 0x6040A00148208008ull, 0x020008A800C400D0ull, + 0x0E34810221080000ull, 0x05492A0600010020ull, 0x20108AA050000860ull, 0x0042002950280004ull, + 0xAAA5290842004040ull, 0x8A6851410A112592ull, 0x108B0892C9555294ull, 0x8A211494B108A111ull, + 0x0494450A0A884510ull, 0x0D51501000008111ull, 0xD2A4908009008000ull, 0x081500685040A800ull, + 0x0000083001410214ull, 0xD001C1588A020002ull, 0x5224042850122222ull, 0x0104444810A44912ull, + 0x2900480081480210ull, 0x0900102900090010ull, 0x9200101000020520ull, 0x00800CA900088922ull, + 0x4800428201808080ull, 0x530281001112A914ull, 0x908C511152122003ull, 0x540244848462888Aull, + 0x554A8041808202AAull, 0x1A52328001060210ull, 0x016B48AA45128008ull, 0x48914A9128010301ull, + 0x0081A52328001033ull, 0x6542259488923280ull, 0x200430544A50101Aull, 0x0048010121292001ull, + 0x1089500101212924ull, 0x50900403212A9200ull, 0x1194001032929949ull, 0x4CA0004049940008ull, + 0x41550554CA000404ull, 0x010200C941688040ull, 0x8820206484402091ull, 0x04A4488008252440ull, + 0x0295489025291110ull, 0x5540888A40205051ull, 0x414000008404942Aull, 0x0220A00000420204ull, + 0x0200080008894291ull, 0x09010100404A0800ull, 0x0000481010802920ull, 0x8808110440000000ull, + 0x434A110102208800ull, 0x9088041AEAA90880ull, 0x1AEAA9088041AEAAull, 0x844041AEAA908804ull, + 0x28440434A11010D2ull, 0x1022A22A2095010Dull, 0xA043284449094081ull, 0x1124A001088041A4ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0196[64] = { + 1u, 5u, 15u, 15u, 24u, 37u, 46u, 57u, 68u, 80u, 92u, 104u, 114u, 130u, 151u, 174u, + 194u, 211u, 224u, 237u, 250u, 259u, 274u, 290u, 305u, 316u, 325u, 334u, 347u, 357u, 374u, 392u, + 410u, 428u, 443u, 462u, 479u, 495u, 516u, 532u, 543u, 558u, 573u, 592u, 605u, 622u, 635u, 649u, + 663u, 681u, 698u, 710u, 718u, 729u, 738u, 747u, 754u, 767u, 786u, 811u, 830u, 847u, 865u, 882u, }; void recomp_unit_0196_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0196_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B14000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0196[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0196[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0196[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B14000; @@ -1072,7 +979,6 @@ L_08B14000: aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; aot_gpr_5 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -1164,7 +1070,6 @@ L_08B1405C: { const float fs = ctx.fpr[17]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -1250,7 +1155,17 @@ L_08B141D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B141E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3292))); @@ -1332,7 +1247,17 @@ L_08B14304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B14310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -1350,7 +1275,6 @@ L_08B14328: aot_gpr_2 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(6012))); ctx.gpr[11] = (static_cast(ctx.gpr[11]) < static_cast(aot_gpr_2) ? 1u : 0u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08B1437C; } @@ -1384,7 +1308,6 @@ L_08B1437C: } L_08B1438C: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B1431C; } @@ -1398,7 +1321,17 @@ L_08B14394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B143A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -1434,7 +1367,6 @@ L_08B14404: aot_gpr_5 = (ctx.gpr[3] & aot_gpr_5); aot_gpr_4 = (aot_gpr_2 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B1442C; } @@ -1442,7 +1374,6 @@ L_08B14404: } L_08B14424: { const bool branch_taken = aot_gpr_5 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B144D4; } @@ -1465,7 +1396,6 @@ L_08B14434: L_08B14450: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B144CC; } @@ -1500,7 +1430,6 @@ L_08B14494: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B144CC; } @@ -1510,7 +1439,6 @@ L_08B144B0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(468))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B144CC; } @@ -1524,7 +1452,6 @@ L_08B144C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B144CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1458C; } @@ -1550,7 +1477,6 @@ L_08B144DC: L_08B14504: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B1453C; } @@ -1590,7 +1516,6 @@ L_08B1453C: L_08B14558: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B1458C; } @@ -1629,7 +1554,17 @@ L_08B1458C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B145B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), std::bit_cast(aot_fpr_20)); @@ -1663,7 +1598,6 @@ L_08B1460C: aot_gpr_4 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1478C; } @@ -1673,7 +1607,6 @@ L_08B1463C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); if (branch_taken) { @@ -1685,7 +1618,6 @@ L_08B14654: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] | 0u); if (branch_taken) { @@ -1770,7 +1702,6 @@ L_08B146F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(6008))); jump_target = aot_gpr_5; aot_gpr_31 = (0x08B14710u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B14710u) goto L_08B14710; AOT_REGCACHE_SYNC_OUT(); return; @@ -1792,9 +1723,7 @@ L_08B1471C: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B14758; } @@ -1821,7 +1750,6 @@ L_08B1475C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1463C; } @@ -1829,7 +1757,6 @@ L_08B1475C: } L_08B1478C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B1479C; } @@ -1837,7 +1764,6 @@ L_08B1478C: } L_08B14794: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B147AC; } @@ -1874,7 +1800,17 @@ L_08B147AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B147E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), std::bit_cast(aot_fpr_20)); @@ -1908,7 +1844,6 @@ L_08B147E4: L_08B1484C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); if (branch_taken) { @@ -1919,7 +1854,6 @@ L_08B1484C: L_08B14860: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); goto L_08B148EC; @@ -1938,7 +1872,6 @@ L_08B14884: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B148D4; } @@ -1951,7 +1884,6 @@ L_08B148A0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(6004))); aot_gpr_6 = (static_cast(aot_gpr_6) < static_cast(ctx.gpr[7]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B148D0; } @@ -2002,7 +1934,6 @@ L_08B148EC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B1484C; } @@ -2026,7 +1957,17 @@ L_08B14914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B14940: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -2071,7 +2012,6 @@ L_08B149A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B149AC: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B149E0; } @@ -2080,7 +2020,6 @@ L_08B149AC: L_08B149B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2076))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B149E0; } @@ -2089,7 +2028,6 @@ L_08B149B4: L_08B149C0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B149D8; } @@ -2098,7 +2036,6 @@ L_08B149C0: L_08B149CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(3332))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B149E0; } @@ -2146,7 +2083,17 @@ L_08B14A18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B14A2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -2181,7 +2128,6 @@ L_08B14A78: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B14ABC; } @@ -2246,7 +2192,17 @@ L_08B14AF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B14B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -2281,7 +2237,6 @@ L_08B14B54: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B14B8C; } @@ -2341,7 +2296,17 @@ L_08B14BC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B14BD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[18]); @@ -2375,9 +2340,7 @@ L_08B14C38: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_20 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_2 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B14D6C; } @@ -2415,7 +2378,6 @@ L_08B14C8C: L_08B14CA0: aot_gpr_6 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B14CD4; } @@ -2423,7 +2385,6 @@ L_08B14CA0: } L_08B14CAC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B14CC0; } @@ -2432,7 +2393,6 @@ L_08B14CAC: L_08B14CB4: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2076))); { const bool branch_taken = ctx.gpr[16] == aot_gpr_6; - // nop if (branch_taken) { goto L_08B14CD4; } @@ -2440,7 +2400,6 @@ L_08B14CB4: } L_08B14CC0: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2449,7 +2408,6 @@ L_08B14CC0: L_08B14CC8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(3332))); { const bool branch_taken = ctx.gpr[16] != aot_gpr_6; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2457,7 +2415,6 @@ L_08B14CC8: } L_08B14CD4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B14CF4; } @@ -2465,7 +2422,6 @@ L_08B14CD4: } L_08B14CDC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2473,7 +2429,6 @@ L_08B14CDC: } L_08B14CE4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2481,7 +2436,6 @@ L_08B14CE4: } L_08B14CEC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2501,7 +2455,6 @@ L_08B14CFC: L_08B14D04: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2510,7 +2463,6 @@ L_08B14D04: L_08B14D10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2530,7 +2482,6 @@ L_08B14D20: L_08B14D28: aot_gpr_5 = (aot_gpr_4 & ctx.gpr[20]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2539,7 +2490,6 @@ L_08B14D28: L_08B14D34: aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B14D50; } @@ -2592,7 +2542,6 @@ L_08B14D80: goto L_08B14D98; L_08B14D98: { const bool branch_taken = static_cast(ctx.gpr[17]) < 0; - // nop if (branch_taken) { goto L_08B14DB0; } @@ -2637,7 +2586,6 @@ L_08B14DD4: L_08B14DD8: ctx.gpr[16] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2645,7 +2593,6 @@ L_08B14DD8: } L_08B14DE4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2664,7 +2611,6 @@ L_08B14DEC: L_08B14DFC: ctx.gpr[7] = (0u | 58u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B14E30; } @@ -2672,7 +2618,6 @@ L_08B14DFC: } L_08B14E08: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B14E1C; } @@ -2681,7 +2626,6 @@ L_08B14E08: L_08B14E10: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B14E30; } @@ -2689,7 +2633,6 @@ L_08B14E10: } L_08B14E1C: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2698,7 +2641,6 @@ L_08B14E1C: L_08B14E24: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(3332))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2722,7 +2664,6 @@ L_08B14E38: } L_08B14E40: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2730,7 +2671,6 @@ L_08B14E40: } L_08B14E48: { const bool branch_taken = aot_gpr_5 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2750,7 +2690,6 @@ L_08B14E58: L_08B14E60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2759,7 +2698,6 @@ L_08B14E60: L_08B14E6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2779,7 +2717,6 @@ L_08B14E7C: L_08B14E84: aot_gpr_5 = (aot_gpr_4 & ctx.gpr[22]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2788,7 +2725,6 @@ L_08B14E84: L_08B14E90: aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B14EAC; } @@ -2817,7 +2753,6 @@ L_08B14EC0: goto L_08B14EC4; L_08B14EC4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B150C8; } @@ -2898,7 +2833,6 @@ L_08B14F60: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 58u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B14F9C; } @@ -2909,7 +2843,6 @@ L_08B14F70: goto L_08B14F74; L_08B14F74: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B14F88; } @@ -2918,7 +2851,6 @@ L_08B14F74: L_08B14F7C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2076))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_6; - // nop if (branch_taken) { goto L_08B14F9C; } @@ -2926,7 +2858,6 @@ L_08B14F7C: } L_08B14F88: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B150B8; } @@ -2935,7 +2866,6 @@ L_08B14F88: L_08B14F90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(3332))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B150B8; } @@ -2944,7 +2874,6 @@ L_08B14F90: L_08B14F9C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-1040))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1505C; } @@ -2976,7 +2905,6 @@ L_08B14FD4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 45u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B150B8; } @@ -3008,7 +2936,6 @@ L_08B15010: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 48u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B150B8; } @@ -3040,7 +2967,6 @@ L_08B1504C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 46u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B150B8; } @@ -3053,7 +2979,6 @@ L_08B1505C: AOT_REGCACHE_SYNC_OUT(); return; L_08B15064: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B150B8; } @@ -3065,7 +2990,6 @@ L_08B1506C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B150A8; } @@ -3086,7 +3010,6 @@ L_08B1508C: AOT_REGCACHE_SYNC_OUT(); return; L_08B150A0: { const bool branch_taken = ctx.gpr[16] == aot_gpr_2; - // nop if (branch_taken) { goto L_08B150B8; } @@ -3103,7 +3026,6 @@ L_08B150B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(9628))); ctx.gpr[19] = (ctx.gpr[19] + static_cast(4)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B14EF0; } @@ -3122,7 +3044,6 @@ L_08B150D0: L_08B150DC: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B15110; } @@ -3134,7 +3055,6 @@ L_08B150E8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B15110; } @@ -3195,7 +3115,17 @@ L_08B1513C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15190: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[17]); @@ -3220,7 +3150,6 @@ L_08B151C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B151E0; } @@ -3289,7 +3218,6 @@ L_08B1523C: L_08B15260: aot_gpr_4 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B15490; } @@ -3318,7 +3246,6 @@ L_08B1529C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2076))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B152C8; } @@ -3349,7 +3276,6 @@ L_08B152C8: } L_08B152D4: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B15424; } @@ -3357,7 +3283,6 @@ L_08B152D4: } L_08B152DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B152F8; } @@ -3366,7 +3291,6 @@ L_08B152DC: L_08B152E4: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B15394; } @@ -3374,7 +3298,6 @@ L_08B152E4: } L_08B152F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B15424; } @@ -3395,7 +3318,6 @@ L_08B152FC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B15358; } @@ -3450,7 +3372,6 @@ L_08B15378: goto L_08B1538C; L_08B1538C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B15424; } @@ -3562,7 +3483,6 @@ L_08B15460: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1529C; } @@ -3584,7 +3504,17 @@ L_08B15494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B154AC: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (2280u << 16u); @@ -3604,7 +3534,17 @@ L_08B154AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15504: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (std::bit_cast(aot_fpr_12)); @@ -3625,7 +3565,17 @@ L_08B15504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15544: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -3634,7 +3584,6 @@ L_08B15544: aot_gpr_6 = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B15598; } @@ -3705,7 +3654,6 @@ L_08B155C0: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B155F8; } @@ -3728,7 +3676,17 @@ L_08B155FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15604: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3744,7 +3702,17 @@ L_08B15614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15624: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3767,7 +3735,17 @@ L_08B15644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -3775,11 +3753,9 @@ L_08B15650: ctx.gpr[16] = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B15670u); - // nop goto L_08B15624; L_08B15670: { const bool branch_taken = static_cast(aot_gpr_2) >= 0; - // nop if (branch_taken) { goto L_08B15694; } @@ -3795,7 +3771,6 @@ L_08B15678: AOT_REGCACHE_SYNC_OUT(); return; L_08B1568C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B15694; } @@ -3813,7 +3788,17 @@ L_08B15694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B156A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -3821,7 +3806,6 @@ L_08B156A8: ctx.gpr[16] = (aot_gpr_5 | 0u); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B156C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B156C8u) goto L_08B156C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B156C8: @@ -3845,7 +3829,6 @@ L_08B156E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B156F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B15748; } @@ -3912,7 +3895,17 @@ L_08B1575C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15770: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -3961,7 +3954,17 @@ L_08B157C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B157E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4023,7 +4026,17 @@ L_08B15860: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1587C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4082,7 +4095,17 @@ L_08B158F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15910: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4144,7 +4167,17 @@ L_08B15994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B159B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4203,7 +4236,17 @@ L_08B15A28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15A44: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -4248,7 +4291,6 @@ L_08B15AB0: L_08B15AE4: aot_gpr_4 = (ctx.gpr[19] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B15B9C; } @@ -4262,7 +4304,6 @@ L_08B15AF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B15AFC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B15B94; } @@ -4278,7 +4319,6 @@ L_08B15B04: L_08B15B14: ctx.gpr[21] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08B15B94; } @@ -4342,9 +4382,7 @@ L_08B15B4C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B15B94; } @@ -4400,7 +4438,17 @@ L_08B15BAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15BDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[10]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4409,7 +4457,6 @@ L_08B15BDC: ctx.gpr[18] = (aot_gpr_4 | 0u); ctx.gpr[30] = (0u + static_cast(-1)); aot_gpr_31 = (0x08B15C1Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806634, 0u, 302u, 0x08806634u>(ctx, &aot_mem, ctx.pc, aot_gpr_2, aot_gpr_4, aot_gpr_5, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 302u, 0x08806634u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B15C1Cu) goto L_08B15C1C; AOT_REGCACHE_SYNC_OUT(); return; L_08B15C1C: @@ -4429,7 +4476,6 @@ L_08B15C3C: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.gpr[17] = (aot_gpr_29 + static_cast(32)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (ctx.gpr[18] | 0u); if (branch_taken) { @@ -4448,7 +4494,6 @@ L_08B15C60: aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(32), aot_run_words); } aot_gpr_4 = (static_cast(ctx.gpr[16]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B15CA4; } @@ -4505,7 +4550,6 @@ L_08B15CB8: L_08B15CEC: aot_gpr_4 = (ctx.gpr[17] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B15E00; } @@ -4520,7 +4564,6 @@ L_08B15CF8: AOT_REGCACHE_SYNC_OUT(); return; L_08B15D08: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B15DF8; } @@ -4536,7 +4579,6 @@ L_08B15D10: L_08B15D20: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B15DF8; } @@ -4544,7 +4586,6 @@ L_08B15D20: } L_08B15D2C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B15D44; } @@ -4559,7 +4600,6 @@ L_08B15D34: AOT_REGCACHE_SYNC_OUT(); return; L_08B15D3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B15DF8; } @@ -4614,9 +4654,7 @@ L_08B15D70: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B15DF8; } @@ -4627,9 +4665,7 @@ L_08B15DA0: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B15DF8; } @@ -4648,9 +4684,7 @@ L_08B15DC4: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) & 0x7FFFFFFFu); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B15DF8; } @@ -4702,7 +4736,17 @@ L_08B15E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4716,7 +4760,17 @@ L_08B15E44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15E50: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -4731,7 +4785,6 @@ L_08B15E50: L_08B15E64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B15E80; } @@ -4802,7 +4855,17 @@ L_08B15ECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15EDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -4817,7 +4880,6 @@ L_08B15EDC: L_08B15EF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B15F0C; } @@ -4888,7 +4950,17 @@ L_08B15F58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15F68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4903,7 +4975,17 @@ L_08B15F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15F88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4918,12 +5000,21 @@ L_08B15F9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15FA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B15FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0195_entry, 195u, 239u, 0x08B10FA0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B15FB8u) goto L_08B15FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B15FB8: @@ -4933,7 +5024,17 @@ L_08B15FB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B15FC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4946,7 +5047,6 @@ L_08B15FC4: AOT_REGCACHE_SYNC_OUT(); return; L_08B15FE8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16014; } @@ -4954,7 +5054,6 @@ L_08B15FE8: } L_08B15FF0: aot_gpr_31 = (0x08B15FF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B15FF8u) goto L_08B15FF8; AOT_REGCACHE_SYNC_OUT(); return; L_08B15FF8: @@ -4971,7 +5070,6 @@ L_08B16004: goto L_08B1600C; L_08B1600C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16044; } @@ -4987,7 +5085,6 @@ L_08B16014: } L_08B1601C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B16044; } @@ -5042,7 +5139,17 @@ L_08B16080: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16098: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5055,7 +5162,6 @@ L_08B16098: AOT_REGCACHE_SYNC_OUT(); return; L_08B160BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B160E8; } @@ -5063,7 +5169,6 @@ L_08B160BC: } L_08B160C4: aot_gpr_31 = (0x08B160CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B160CCu) goto L_08B160CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B160CC: @@ -5080,7 +5185,6 @@ L_08B160D8: goto L_08B160E0; L_08B160E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16110; } @@ -5096,7 +5200,6 @@ L_08B160E8: } L_08B160F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B16110; } @@ -5148,7 +5251,17 @@ L_08B16148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16160: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5165,7 +5278,6 @@ L_08B16160: goto L_08B15604; L_08B1619C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B161B4; } @@ -5189,7 +5301,6 @@ L_08B161B4: L_08B161C4: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B161EC; } @@ -5231,7 +5342,17 @@ L_08B161F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1620C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5265,7 +5386,6 @@ L_08B16250: AOT_REGCACHE_SYNC_OUT(); return; L_08B16260: { const bool branch_taken = aot_gpr_2 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B1628C; } @@ -5281,7 +5401,6 @@ L_08B16268: L_08B16278: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B1629C; } @@ -5289,7 +5408,6 @@ L_08B16278: } L_08B16284: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16320; } @@ -5315,7 +5433,6 @@ L_08B1629C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(112))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B16320; } @@ -5330,7 +5447,6 @@ L_08B162AC: goto L_08B162B8; L_08B162B8: aot_gpr_31 = (0x08B162C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B162C0u) goto L_08B162C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B162C0: @@ -5344,7 +5460,6 @@ L_08B162C4: goto L_08B162CC; L_08B162CC: aot_gpr_31 = (0x08B162D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B162D4u) goto L_08B162D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B162D4: @@ -5393,7 +5508,17 @@ L_08B16324: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16340: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5406,7 +5531,6 @@ L_08B16340: goto L_08B15604; L_08B1636C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B163A4; } @@ -5427,7 +5551,6 @@ L_08B16380: L_08B16390: aot_gpr_4 = (static_cast(aot_gpr_2) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B163AC; } @@ -5435,7 +5558,6 @@ L_08B16390: } L_08B1639C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B163C0; } @@ -5469,7 +5591,6 @@ L_08B163C0: L_08B163D0: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B16410; } @@ -5479,7 +5600,6 @@ L_08B163DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(112))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B16410; } @@ -5494,7 +5614,6 @@ L_08B163EC: goto L_08B163F8; L_08B163F8: aot_gpr_31 = (0x08B16400u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B16400u) goto L_08B16400; AOT_REGCACHE_SYNC_OUT(); return; L_08B16400: @@ -5523,7 +5642,17 @@ L_08B16414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16430: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5540,7 +5669,6 @@ L_08B16430: goto L_08B15604; L_08B1646C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16484; } @@ -5564,7 +5692,6 @@ L_08B16484: L_08B16494: ctx.gpr[19] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B164BC; } @@ -5606,7 +5733,17 @@ L_08B164C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B164DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5623,7 +5760,6 @@ L_08B164DC: goto L_08B15604; L_08B1651C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16534; } @@ -5647,7 +5783,6 @@ L_08B16534: L_08B16544: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B1660C; } @@ -5703,7 +5838,6 @@ L_08B1659C: goto L_08B165A0; L_08B165A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1660C; } @@ -5787,7 +5921,17 @@ L_08B16610: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16630: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5799,7 +5943,6 @@ L_08B16630: goto L_08B15604; L_08B16650: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B16690; } @@ -5813,7 +5956,6 @@ L_08B16658: AOT_REGCACHE_SYNC_OUT(); return; L_08B16664: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16698; } @@ -5833,7 +5975,6 @@ L_08B16678: goto L_08B156A8; L_08B16688: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B166B0; } @@ -5870,7 +6011,17 @@ L_08B166B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B166C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5907,7 +6058,6 @@ L_08B16700: L_08B16734: aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B16780; } @@ -5921,7 +6071,6 @@ L_08B16740: AOT_REGCACHE_SYNC_OUT(); return; L_08B1674C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16774; } @@ -5964,7 +6113,17 @@ L_08B16780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B167A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6000,7 +6159,6 @@ L_08B167D8: L_08B16808: aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B16860; } @@ -6009,7 +6167,6 @@ L_08B16808: L_08B16814: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(52))); { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B16854; } @@ -6023,7 +6180,6 @@ L_08B16820: AOT_REGCACHE_SYNC_OUT(); return; L_08B1682C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16854; } @@ -6066,7 +6222,17 @@ L_08B16860: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16880: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[7]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -6079,7 +6245,6 @@ L_08B16880: AOT_REGCACHE_SYNC_OUT(); return; L_08B168B0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B168C0; } @@ -6133,7 +6298,6 @@ L_08B168F0: L_08B16924: aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B16980; } @@ -6160,7 +6324,6 @@ L_08B16944: AOT_REGCACHE_SYNC_OUT(); return; L_08B1694C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B16974; } @@ -6207,7 +6370,17 @@ L_08B16984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B169A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6236,7 +6409,6 @@ L_08B169DC: goto L_08B15604; L_08B169F0: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B16A20; } @@ -6244,7 +6416,6 @@ L_08B169F0: } L_08B169F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16A30; } @@ -6286,7 +6457,6 @@ L_08B16A30: AOT_REGCACHE_SYNC_OUT(); return; L_08B16A3C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16A64; } @@ -6306,7 +6476,6 @@ L_08B16A50: AOT_REGCACHE_SYNC_OUT(); return; L_08B16A5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16A70; } @@ -6335,7 +6504,17 @@ L_08B16A74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6352,7 +6531,6 @@ L_08B16A90: goto L_08B15604; L_08B16AC8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16AE0; } @@ -6387,7 +6565,17 @@ L_08B16AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6404,7 +6592,6 @@ L_08B16B0C: goto L_08B15604; L_08B16B48: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16B60; } @@ -6445,7 +6632,17 @@ L_08B16B78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16B98: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6462,7 +6659,6 @@ L_08B16B98: goto L_08B15604; L_08B16BD4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16BEC; } @@ -6504,7 +6700,17 @@ L_08B16C08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16C28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6521,7 +6727,6 @@ L_08B16C28: goto L_08B15604; L_08B16C64: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B16C7C; } @@ -6557,7 +6762,6 @@ L_08B16C90: goto L_08B16C98; L_08B16C98: aot_gpr_31 = (0x08B16CA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B16CA0u) goto L_08B16CA0; AOT_REGCACHE_SYNC_OUT(); return; L_08B16CA0: @@ -6575,7 +6779,6 @@ L_08B16CA8: AOT_REGCACHE_SYNC_OUT(); return; L_08B16CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16CF8; } @@ -6589,7 +6792,6 @@ L_08B16CC8: goto L_08B16CD0; L_08B16CD0: aot_gpr_31 = (0x08B16CD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B16CD8u) goto L_08B16CD8; AOT_REGCACHE_SYNC_OUT(); return; L_08B16CD8: @@ -6620,7 +6822,17 @@ L_08B16CF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16D18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6640,7 +6852,6 @@ L_08B16D3C: goto L_08B16D4C; L_08B16D4C: aot_gpr_31 = (0x08B16D54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B16D54u) goto L_08B16D54; AOT_REGCACHE_SYNC_OUT(); return; L_08B16D54: @@ -6713,7 +6924,17 @@ L_08B16DC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6749,7 +6970,17 @@ L_08B16E1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16E34: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), ctx.gpr[16], aot_gpr_31}; @@ -6777,7 +7008,6 @@ L_08B16E68: L_08B16E7C: aot_gpr_4 = (static_cast(aot_gpr_2) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B16E98; } @@ -6816,7 +7046,17 @@ L_08B16EB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16ED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6834,14 +7074,23 @@ L_08B16EEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } ctx.gpr[16] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B16F18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B16F18u) goto L_08B16F18; AOT_REGCACHE_SYNC_OUT(); return; L_08B16F18: @@ -6857,7 +7106,6 @@ L_08B16F18: L_08B16F28: aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B16F48; } @@ -6871,7 +7119,6 @@ L_08B16F34: AOT_REGCACHE_SYNC_OUT(); return; L_08B16F40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B16F54; } @@ -6896,7 +7143,17 @@ L_08B16F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B16F6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6919,7 +7176,6 @@ L_08B16F9C: L_08B16FAC: ctx.gpr[19] = (aot_gpr_2 | 0u); aot_gpr_31 = (0x08B16FB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B16FB8u) goto L_08B16FB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B16FB8: @@ -6932,7 +7188,6 @@ L_08B16FB8: L_08B16FC8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B17054; } @@ -6940,7 +7195,6 @@ L_08B16FC8: } L_08B16FD4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B17030; } @@ -6949,7 +7203,6 @@ L_08B16FD4: L_08B16FDC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B17030; } @@ -6965,7 +7218,6 @@ L_08B16FE8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B17030; } @@ -6975,7 +7227,6 @@ L_08B17010: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 59u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B17030; } @@ -6985,7 +7236,6 @@ L_08B17020: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 61u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17068; } @@ -7073,7 +7323,6 @@ L_08B170C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B170C8: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B170E4; } @@ -7143,7 +7392,17 @@ L_08B17138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17154: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7166,7 +7425,6 @@ L_08B17178: goto L_08B17184; L_08B17184: aot_gpr_31 = (0x08B1718Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08806DC0, 0u, 425u, 0x08806DC0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0000_entry, 0u, 425u, 0x08806DC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1718Cu) goto L_08B1718C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1718C: @@ -7177,7 +7435,17 @@ L_08B1718C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1719C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7193,7 +7461,17 @@ L_08B171AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B171BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7209,7 +7487,6 @@ L_08B171BC: } L_08B171D8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B171F0; } @@ -7244,7 +7521,6 @@ L_08B171F8: } L_08B17204: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B17228; } @@ -7283,7 +7559,17 @@ L_08B1723C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17248: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7329,7 +7615,6 @@ L_08B1727C: AOT_REGCACHE_SYNC_OUT(); return; L_08B172D8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B172F8; } @@ -7364,7 +7649,17 @@ L_08B17308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17324: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7410,7 +7705,6 @@ L_08B17358: AOT_REGCACHE_SYNC_OUT(); return; L_08B173B4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B173D4; } @@ -7445,7 +7739,17 @@ L_08B173E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17400: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7456,7 +7760,6 @@ L_08B17400: L_08B17410: aot_gpr_4 = (0u < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B17438; } @@ -7496,7 +7799,17 @@ L_08B1744C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1745C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7524,7 +7837,17 @@ L_08B1746C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B174AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -7535,7 +7858,6 @@ L_08B174AC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_6); ctx.gpr[20] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B174E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B174E4u) goto L_08B174E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B174E4: @@ -7569,7 +7891,6 @@ L_08B1752C: AOT_REGCACHE_SYNC_OUT(); return; L_08B17544: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B17578; } @@ -7578,7 +7899,6 @@ L_08B17544: L_08B1754C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B17578; } @@ -7623,7 +7943,6 @@ L_08B17578: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); jump_target = aot_gpr_6; aot_gpr_31 = (0x08B175A0u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B175A0u) goto L_08B175A0; AOT_REGCACHE_SYNC_OUT(); return; @@ -7642,7 +7961,17 @@ L_08B175A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B175C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7650,7 +7979,6 @@ L_08B175C0: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_6); ctx.gpr[17] = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B175E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B175E0u) goto L_08B175E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B175E0: @@ -7678,7 +8006,6 @@ L_08B175EC: L_08B17614: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B17634; } @@ -7687,12 +8014,10 @@ L_08B17614: L_08B17620: aot_fpr_12 = aot_fpr_13 / aot_fpr_12; aot_gpr_31 = (0x08B1762Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 785u, 0x08AAF8ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1762Cu) goto L_08B1762C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1762C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1765C; } @@ -7723,7 +8048,17 @@ L_08B1765C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17670: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7805,7 +8140,6 @@ L_08B17778: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B177A0; } @@ -7840,7 +8174,17 @@ L_08B177B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B177CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7878,7 +8222,6 @@ L_08B1782C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B17854; } @@ -7913,7 +8256,17 @@ L_08B17864: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17880: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7938,7 +8291,6 @@ L_08B178B0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B178E0; } @@ -7978,7 +8330,17 @@ L_08B178E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B178F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8003,7 +8365,6 @@ L_08B1792C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1798C; } @@ -8079,7 +8440,17 @@ L_08B17990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B179A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8104,7 +8475,6 @@ L_08B179DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17A3C; } @@ -8180,7 +8550,17 @@ L_08B17A40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17A58: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8205,7 +8585,6 @@ L_08B17A8C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17AEC; } @@ -8281,7 +8660,17 @@ L_08B17AF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8306,7 +8695,6 @@ L_08B17B3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17B9C; } @@ -8382,7 +8770,17 @@ L_08B17BA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17BB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8407,7 +8805,6 @@ L_08B17BE8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17C18; } @@ -8447,7 +8844,17 @@ L_08B17C1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17C30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8472,7 +8879,6 @@ L_08B17C60: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17C90; } @@ -8512,7 +8918,17 @@ L_08B17C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17CA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8537,7 +8953,6 @@ L_08B17CD8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17D08; } @@ -8577,7 +8992,17 @@ L_08B17D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17D20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8589,7 +9014,6 @@ L_08B17D20: goto L_08B15624; L_08B17D40: aot_gpr_31 = (0x08B17D48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B17D48u) goto L_08B17D48; AOT_REGCACHE_SYNC_OUT(); return; L_08B17D48: @@ -8616,7 +9040,17 @@ L_08B17D5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8625,7 +9059,6 @@ L_08B17D74: goto L_08B15624; L_08B17D84: aot_gpr_31 = (0x08B17D8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B17D8Cu) goto L_08B17D8C; AOT_REGCACHE_SYNC_OUT(); return; L_08B17D8C: @@ -8641,7 +9074,17 @@ L_08B17D94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17DA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -8650,7 +9093,6 @@ L_08B17DA4: goto L_08B15624; L_08B17DB4: aot_gpr_31 = (0x08B17DBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B17DBCu) goto L_08B17DBC; AOT_REGCACHE_SYNC_OUT(); return; L_08B17DBC: @@ -8666,7 +9108,17 @@ L_08B17DC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17DD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8697,7 +9149,17 @@ L_08B17E00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17E1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8708,7 +9170,6 @@ L_08B17E1C: goto L_08B15604; L_08B17E38: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B17EB4; } @@ -8730,7 +9191,6 @@ L_08B17E4C: L_08B17E60: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B17EB4; } @@ -8793,7 +9253,17 @@ L_08B17EC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17ED8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), ctx.gpr[16], aot_gpr_31}; @@ -8804,7 +9274,6 @@ L_08B17ED8: goto L_08B15604; L_08B17EF4: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B17F20; } @@ -8842,7 +9311,17 @@ L_08B17F20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B17F38: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8867,7 +9346,6 @@ L_08B17F6C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B17FBC; } @@ -8906,7 +9384,6 @@ L_08B17FBC: L_08B17FC8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0197_entry, 197u, 3u, 0x08B18018u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0197.cpp b/profiles/vcs/generated/generated_unit_0197.cpp index 3555139..5df42f3 100644 --- a/profiles/vcs/generated/generated_unit_0197.cpp +++ b/profiles/vcs/generated/generated_unit_0197.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0197[4096] = { - 1, 0, 0, 0, 2, 0, 3, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 13, 0, 14, 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 20, 21, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 25, - 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 34, 0, 0, 35, 0, 36, 0, 0, 37, 0, 38, 39, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, - 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 50, 0, 0, 51, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 54, 0, 0, 55, 0, 0, 0, 56, 0, 57, 0, 58, 0, 0, 59, 60, 0, - 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 64, 0, 65, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 68, - 0, 69, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, - 0, 0, 76, 0, 0, 0, 77, 0, 78, 0, 0, 0, 79, 0, 80, 0, 0, 81, 0, 0, 82, 83, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, - 0, 85, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 88, 0, 0, 89, 0, 0, 0, 0, 90, 0, 0, 91, 0, 92, 93, 0, 0, 0, 94, 0, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 97, 0, 98, 0, 0, 99, 0, 100, 0, 0, 101, 0, 102, 0, 103, 0, 104, - 0, 0, 105, 0, 106, 0, 107, 0, 0, 108, 0, 0, 109, 0, 110, 0, 0, 0, 0, 0, 0, 111, 112, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 118, 119, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, - 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, - 0, 0, 134, 135, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, - 0, 141, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 146, 0, 0, 147, 0, 0, 0, 148, 0, 0, 0, - 149, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 153, 0, 154, 0, 0, 155, 156, 0, 0, 157, 0, 0, 158, 0, 0, 159, 0, 0, 0, 160, 0, 0, 0, 161, 0, 0, 0, 162, 0, 163, - 0, 0, 164, 165, 0, 166, 0, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, 170, 0, 0, 171, 172, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 175, 0, 0, 176, 177, 0, 0, 178, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 186, 187, 0, 0, 0, - 188, 0, 0, 0, 189, 190, 0, 191, 0, 192, 0, 0, 0, 0, 0, 193, 194, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 197, - 0, 0, 198, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 201, 0, 202, 0, 203, 0, 0, 204, 0, 205, 206, 0, 0, 0, 0, 0, 0, 207, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 210, 0, 211, 0, 0, 212, 0, 213, 0, 0, 214, 0, 215, 0, 0, 216, 0, 217, 0, - 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 0, 224, 225, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 0, 0, 0, 232, - 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 236, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 241, 0, 242, 0, 243, 0, 0, 0, 244, 0, - 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 250, 0, 251, 0, 0, 252, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 255, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 264, 0, 265, 0, 0, 0, 266, 0, 0, 267, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 270, 0, 0, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 274, 0, 0, 275, 0, - 276, 0, 277, 0, 0, 278, 0, 0, 279, 0, 280, 0, 281, 0, 0, 282, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, - 0, 0, 285, 0, 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, - 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 294, 295, 0, 0, 0, 0, 296, 297, 0, 298, 0, - 0, 0, 299, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 305, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 0, 308, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 311, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 314, 0, 315, 0, - 316, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, 0, 319, 0, 0, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 322, 0, 323, 0, 0, 0, 324, - 0, 0, 325, 0, 0, 326, 0, 0, 327, 0, 328, 0, 329, 0, 0, 330, 0, 0, 331, 0, 0, 332, 0, 0, 333, 0, 334, 0, 335, 0, 0, 0, - 0, 336, 0, 0, 0, 0, 337, 0, 0, 338, 0, 339, 0, 0, 0, 0, 340, 0, 0, 0, 0, 341, 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, - 0, 0, 344, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 350, 0, - 351, 0, 0, 0, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 0, 0, 0, 357, 0, 358, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, - 360, 0, 361, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 364, 0, 365, 0, 366, 0, 0, 367, 0, 368, 0, 0, 0, 369, 0, 370, - 0, 371, 0, 372, 0, 0, 373, 0, 0, 0, 374, 0, 0, 0, 0, 375, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 380, 0, 381, 382, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 0, 0, 387, 0, - 388, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, 0, 0, 392, 393, 0, 394, 0, 395, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 397, - 0, 0, 0, 398, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, - 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, - 0, 408, 0, 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, - 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 416, 0, 0, 417, 0, 418, 0, 0, 0, 0, - 419, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 426, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, - 430, 0, 431, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 434, 0, 0, 0, 435, 0, 0, 436, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, - 0, 0, 441, 0, 0, 0, 0, 442, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, 0, 0, 445, 0, 446, 447, 0, 0, 0, 0, 0, 448, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 450, 0, 451, 0, 452, 0, 0, 453, 0, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, - 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, 460, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 463, - 0, 464, 0, 465, 0, 0, 466, 0, 0, 0, 0, 467, 0, 468, 469, 0, 0, 470, 0, 0, 471, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 473, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, - 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 488, 0, 0, 0, 489, 0, 490, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 493, - 0, 494, 0, 495, 0, 496, 0, 0, 497, 0, 0, 498, 0, 499, 0, 500, 0, 501, 0, 502, 0, 0, 503, 0, 0, 504, 0, 505, 0, 0, 0, 0, - 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, - 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 512, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, - 0, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, 520, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 522, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, - 0, 0, 0, 527, 0, 0, 528, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 533, 0, 534, 0, 535, 0, 0, 536, 0, - 537, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 542, - 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 547, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 550, - 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 553, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 561, 0, 0, 562, 0, 0, 563, 0, 0, 0, 0, 564, 0, 0, 565, 0, 566, 567, 0, 0, 0, 568, 0, 0, 569, 0, 570, 0, 0, 571, 0, - 572, 573, 0, 0, 0, 574, 0, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 581, 0, - 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 584, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 588, - 0, 0, 0, 0, 589, 0, 0, 590, 0, 0, 591, 0, 0, 592, 0, 593, 594, 0, 0, 0, 595, 0, 0, 596, 0, 597, 0, 0, 598, 0, 599, 600, - 0, 0, 0, 601, 0, 0, 602, 0, 603, 0, 0, 0, 604, 0, 605, 0, 606, 0, 607, 0, 0, 0, 0, 608, 0, 0, 609, 0, 610, 611, 0, 0, - 0, 612, 0, 0, 613, 0, 614, 0, 0, 615, 0, 616, 617, 0, 0, 0, 618, 0, 0, 619, 0, 620, 0, 0, 0, 0, 621, 0, 0, 622, 0, 623, - 624, 0, 0, 0, 625, 0, 0, 626, 0, 627, 0, 0, 628, 0, 629, 630, 0, 0, 0, 631, 0, 0, 632, 0, 633, 0, 0, 0, 0, 634, 0, 635, - 0, 0, 0, 636, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 639, 0, 0, 0, 640, 0, 641, 0, 0, 0, 0, 0, 0, 642, - 0, 0, 0, 0, 643, 0, 644, 0, 645, 0, 646, 0, 0, 0, 647, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 650, 0, 651, 0, 0, 0, - 652, 0, 653, 0, 0, 654, 0, 655, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 658, 0, 0, 0, 659, 0, 0, - 0, 660, 0, 0, 0, 0, 661, 0, 662, 0, 0, 0, 0, 663, 0, 664, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, - 0, 0, 668, 0, 669, 670, 0, 0, 0, 671, 0, 0, 672, 0, 673, 0, 0, 674, 0, 675, 676, 0, 0, 0, 677, 0, 0, 678, 0, 679, 0, 0, - 0, 680, 0, 0, 0, 681, 0, 682, 0, 683, 0, 0, 684, 0, 0, 685, 0, 686, 687, 0, 0, 0, 688, 0, 0, 689, 0, 690, 0, 0, 691, 0, - 692, 693, 0, 0, 0, 694, 0, 0, 695, 0, 696, 0, 0, 0, 697, 0, 698, 0, 0, 699, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 701, 0, 702, 0, 0, 0, 703, 0, 0, 0, 704, 0, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 707, 0, 708, 0, 0, 709, 0, 0, - 0, 0, 710, 0, 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 713, 0, 0, 714, 0, 715, 716, 0, 0, 0, 717, 0, 0, 718, 0, 719, 0, 0, - 720, 0, 721, 722, 0, 0, 0, 723, 0, 0, 724, 0, 725, 0, 0, 0, 726, 0, 0, 727, 0, 0, 0, 728, 0, 729, 0, 730, 0, 0, 0, 731, - 0, 0, 732, 0, 733, 734, 0, 0, 0, 735, 0, 0, 736, 0, 737, 0, 0, 738, 0, 739, 740, 0, 0, 0, 741, 0, 0, 742, 0, 743, 0, 0, - 0, 744, 0, 745, 0, 0, 0, 0, 746, 0, 747, 0, 748, 0, 0, 749, 0, 0, 750, 0, 751, 0, 752, 0, 0, 753, 0, 754, 0, 0, 755, 0, - 756, 0, 757, 0, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, - 0, 0, 763, 0, 0, 0, 764, 0, 765, 0, 0, 0, 0, 766, 0, 0, 0, 0, 767, 0, 768, 0, 769, 770, 0, 0, 771, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 0, 773, 0, 0, 774, 0, 0, 775, 0, 776, 0, 0, 777, - 0, 0, 0, 778, 0, 779, 0, 0, 0, 780, 0, 0, 0, 781, 0, 782, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 784, 0, 0, 785, 0, 786, 0, 787, 0, 0, 0, 788, 0, 789, 0, 0, 790, 0, 0, 791, 0, 792, 0, 793, 0, 0, - 0, 794, 0, 0, 795, 0, 796, 0, 797, 0, 0, 0, 798, 0, 799, 0, 0, 0, 800, 0, 0, 801, 0, 0, 802, 0, 803, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 805, 0, 806, 807, 0, 0, 0, 0, 0, 0, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 815, 0, 0, 816, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, - 0, 0, 0, 818, 0, 819, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 823, 0, 0, 824, 0, 0, - 0, 0, 0, 0, 825, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, 0, 0, 828, 0, 0, 0, 0, 0, 0, 829, 0, 0, 830, 0, 0, 0, 0, - 0, 0, 831, 0, 0, 832, 0, 0, 0, 0, 0, 0, 833, 0, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 835, 0, 0, 836, 0, 0, 0, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, 0, 0, 845, - 0, 0, 0, 846, 0, 0, 0, 0, 0, 0, 0, 847, 0, 0, 848, 0, 0, 0, 849, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, - 0, 852, 0, 853, 0, 854, 0, 855, 0, 856, 0, 857, 0, 858, 0, 859, 0, 0, 0, 0, 860, 861, 862, 0, 863, 864, 865, 0, 866, 867, 868, 0, - 869, 870, 0, 0, 0, 0, 0, 0, 0, 0, 871, 0, 0, 0, 0, 0, 0, 872, 0, 0, 0, 0, 873, 0, 0, 874, 0, 0, 875, 0, 876, 0, - 0, 0, 0, 877, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 880, 0, 881, 882, 0, 0, 0, 883, 0, 0, 0, 884, 0, 0, 0, - 0, 0, 0, 885, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 888, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 890, 0, 0, 0, 891, 0, 0, 0, 0, 892, 0, 0, 0, 0, 893, 0, 0, 894, 0, 0, 0, 0, 0, 0, 895, 0, 0, 0, 0, - 0, 896, 0, 0, 897, 0, 898, 899, 0, 0, 0, 0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, - 902, 0, 0, 0, 903, 0, 0, 904, 0, 905, 906, 0, 0, 907, 0, 0, 0, 0, 0, 0, 908, 0, 0, 909, 0, 0, 910, 911, 0, 0, 0, 912, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0197[64] = { + 0x010A9484094020D1ull, 0x8444844488898890ull, 0x2448912484081A52ull, 0x9094220865449020ull, + 0x0832514404124046ull, 0xAA52848046909422ull, 0x010C149020605254ull, 0x8080A02020202949ull, + 0x11221482084A020Cull, 0xA222499400080881ull, 0x011328001032912Cull, 0xA00382B11A805201ull, + 0x5294A50040D2A884ull, 0x82408910650A8002ull, 0x4548082900082020ull, 0x1228912801200218ull, + 0x4A244A0091448940ull, 0x4000908440409525ull, 0x0008A04458688208ull, 0x5110320210502000ull, + 0x152495248A421085ull, 0x5002421484210A42ull, 0xA295410504142AA1ull, 0x0020D1000428844Aull, + 0x8085621548102000ull, 0x1005404220004088ull, 0x0A48204081000222ull, 0x2410000052012241ull, + 0x0400881002450105ull, 0x2509510020D10484ull, 0x0052684A88010688ull, 0x2084444401111101ull, + 0x0A4AA92A90054424ull, 0x0840000240001401ull, 0x0002108422000421ull, 0x0000000000000104ull, + 0x5000000008000000ull, 0x4AA0000100081048ull, 0x0010420882002805ull, 0x04208810A0000102ull, + 0x0000001000004080ull, 0x4A46909200040800ull, 0x8101452051104523ull, 0x34855148D291A490ull, + 0xA148D291A4291A52ull, 0x1481455081441048ull, 0x8820A142228004A5ull, 0x4A4692A2291A5234ull, + 0x250A111400294523ull, 0x8A89148D291A4214ull, 0x4A54950A291A5234ull, 0x04D4214488040425ull, + 0x0080A22894920000ull, 0x052451522A4A2A40ull, 0x0413554000203500ull, 0x0000000008000428ull, + 0x2408000000000000ull, 0x0000902409024090ull, 0x0000000000008120ull, 0x9002002004042002ull, + 0x7770AAAA80244808ull, 0x111A402852420403ull, 0x0812108800920048ull, 0x8C902691010080D2ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0197[64] = { + 1u, 17u, 34u, 52u, 69u, 85u, 105u, 121u, 134u, 149u, 164u, 180u, 198u, 218u, 233u, 245u, + 259u, 276u, 290u, 304u, 316u, 336u, 351u, 371u, 384u, 398u, 408u, 419u, 430u, 441u, 457u, 473u, + 486u, 506u, 513u, 522u, 524u, 527u, 537u, 547u, 556u, 559u, 572u, 589u, 612u, 636u, 652u, 668u, + 692u, 710u, 732u, 756u, 772u, 784u, 804u, 818u, 822u, 825u, 835u, 838u, 846u, 869u, 885u, 896u, }; void recomp_unit_0197_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0197_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B18000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0197[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0197[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0197[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B18000; @@ -1114,7 +1021,17 @@ L_08B1801C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18034: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1126,7 +1043,6 @@ L_08B18034: AOT_REGCACHE_SYNC_OUT(); return; L_08B18058: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1822C; } @@ -1159,7 +1075,6 @@ L_08B18088: L_08B1809C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B180C4; } @@ -1167,7 +1082,6 @@ L_08B1809C: } L_08B180A8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B180C4; } @@ -1176,7 +1090,6 @@ L_08B180A8: L_08B180B0: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B180E0; } @@ -1203,7 +1116,6 @@ L_08B180CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B18110; } @@ -1274,7 +1186,6 @@ L_08B1816C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(178))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B18204; } @@ -1305,7 +1216,6 @@ L_08B181A8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B18204; } @@ -1336,7 +1246,6 @@ L_08B181E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B18204; } @@ -1344,7 +1253,6 @@ L_08B181E8: } L_08B181FC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B18218; } @@ -1358,7 +1266,6 @@ L_08B18204: AOT_REGCACHE_SYNC_OUT(); return; L_08B18210: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18224; } @@ -1395,7 +1302,17 @@ L_08B18230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1824C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1489,7 +1406,17 @@ L_08B182F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18314: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1502,7 +1429,6 @@ L_08B18314: L_08B18330: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_31 = (0x08B1833Cu); - // nop goto L_08B1824C; L_08B1833C: aot_gpr_4 = (ctx.gpr[2] | 0u); @@ -1554,7 +1480,17 @@ L_08B18378: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1838C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1579,7 +1515,6 @@ L_08B183B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B18404; } @@ -1587,7 +1522,6 @@ L_08B183B4: } L_08B183C8: aot_gpr_31 = (0x08B183D0u); - // nop goto L_08B1824C; L_08B183D0: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -1611,7 +1545,6 @@ L_08B183F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B183FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18408; } @@ -1628,7 +1561,17 @@ L_08B18408: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18418: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1641,12 +1584,10 @@ L_08B18418: L_08B18438: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_31 = (0x08B18444u); - // nop goto L_08B1824C; L_08B18444: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B184A0; } @@ -1667,9 +1608,7 @@ L_08B18468: aot_gpr_4 = (17056u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B184B8; } @@ -1733,7 +1672,17 @@ L_08B184D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B184EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1758,7 +1707,6 @@ L_08B18514: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B18564; } @@ -1766,7 +1714,6 @@ L_08B18514: } L_08B18528: aot_gpr_31 = (0x08B18530u); - // nop goto L_08B1824C; L_08B18530: aot_gpr_4 = (aot_gpr_16 | 0u); @@ -1790,7 +1737,6 @@ L_08B18550: AOT_REGCACHE_SYNC_OUT(); return; L_08B1855C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18568; } @@ -1807,14 +1753,23 @@ L_08B18568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18578: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B1859Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1859Cu) goto L_08B1859C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1859C: @@ -1839,7 +1794,6 @@ L_08B185A8: } L_08B185BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18618; } @@ -1893,7 +1847,6 @@ L_08B18608: AOT_REGCACHE_SYNC_OUT(); return; L_08B18610: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18638; } @@ -1943,14 +1896,23 @@ L_08B18658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18674: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B18690u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18690u) goto L_08B18690; AOT_REGCACHE_SYNC_OUT(); return; L_08B18690: @@ -2000,14 +1962,23 @@ L_08B186CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B186E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B18700u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18700u) goto L_08B18700; AOT_REGCACHE_SYNC_OUT(); return; L_08B18700: @@ -2022,7 +1993,6 @@ L_08B18700: L_08B1870C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B18734; } @@ -2030,7 +2000,6 @@ L_08B1870C: } L_08B18718: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B187BC; } @@ -2104,7 +2073,6 @@ L_08B18794: AOT_REGCACHE_SYNC_OUT(); return; L_08B187B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B187FC; } @@ -2158,7 +2126,17 @@ L_08B1880C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2190,14 +2168,23 @@ L_08B18858: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1886C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B18884u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18884u) goto L_08B18884; AOT_REGCACHE_SYNC_OUT(); return; L_08B18884: @@ -2231,12 +2218,21 @@ L_08B188B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B188C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B188D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B188D4u) goto L_08B188D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B188D4: @@ -2253,12 +2249,21 @@ L_08B188E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B188F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B18900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18900u) goto L_08B18900; AOT_REGCACHE_SYNC_OUT(); return; L_08B18900: @@ -2272,12 +2277,21 @@ L_08B18900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1891C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1892Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1892Cu) goto L_08B1892C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1892C: @@ -2292,7 +2306,17 @@ L_08B1892C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1894C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2310,7 +2334,6 @@ L_08B1894C: AOT_REGCACHE_SYNC_OUT(); return; L_08B18988: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B189A0; } @@ -2334,7 +2357,6 @@ L_08B189A0: L_08B189AC: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B18A44; } @@ -2389,7 +2411,6 @@ L_08B18A08: goto L_08B18A0C; L_08B18A0C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B18A44; } @@ -2398,7 +2419,6 @@ L_08B18A0C: L_08B18A14: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(112))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B18A44; } @@ -2408,7 +2428,6 @@ L_08B18A20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(60))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B18A44; } @@ -2451,7 +2470,17 @@ L_08B18A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18A70: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2469,7 +2498,6 @@ L_08B18A70: AOT_REGCACHE_SYNC_OUT(); return; L_08B18AAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B18AC4; } @@ -2512,14 +2540,23 @@ L_08B18AE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18B00: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(36), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B18B24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18B24u) goto L_08B18B24; AOT_REGCACHE_SYNC_OUT(); return; L_08B18B24: @@ -2530,7 +2567,6 @@ L_08B18B24: AOT_REGCACHE_SYNC_OUT(); return; L_08B18B30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B18B64; } @@ -2551,7 +2587,6 @@ L_08B18B38: goto L_08B18B5C; L_08B18B5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18B9C; } @@ -2644,7 +2679,6 @@ L_08B18BF4: L_08B18BFC: aot_gpr_4 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B18C34; } @@ -2669,7 +2703,6 @@ L_08B18C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08B18C2C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B18C3C; } @@ -2685,7 +2718,6 @@ L_08B18C34: } L_08B18C3C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B18C58; } @@ -2722,7 +2754,17 @@ L_08B18C5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18C78: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2736,7 +2778,6 @@ L_08B18C78: AOT_REGCACHE_SYNC_OUT(); return; L_08B18CA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B18CBC; } @@ -2764,7 +2805,6 @@ L_08B18CBC: AOT_REGCACHE_SYNC_OUT(); return; L_08B18CC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B18CE4; } @@ -2788,7 +2828,6 @@ L_08B18CE4: AOT_REGCACHE_SYNC_OUT(); return; L_08B18CF0: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B18D44; } @@ -2814,7 +2853,6 @@ L_08B18D04: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08B18D4C; } @@ -2846,7 +2884,6 @@ L_08B18D4C: AOT_REGCACHE_SYNC_OUT(); return; L_08B18D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B18D74; } @@ -2874,12 +2911,21 @@ L_08B18D78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18D90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B18DA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18DA0u) goto L_08B18DA0; AOT_REGCACHE_SYNC_OUT(); return; L_08B18DA0: @@ -2896,20 +2942,28 @@ L_08B18DAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B18DD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18DD8u) goto L_08B18DD8; AOT_REGCACHE_SYNC_OUT(); return; L_08B18DD8: ctx.gpr[17] = (0u | 1u); aot_gpr_31 = (0x08B18DE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18DE4u) goto L_08B18DE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B18DE4: @@ -2934,7 +2988,17 @@ L_08B18DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18E14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2996,7 +3060,17 @@ L_08B18E94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18EAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3015,7 +3089,6 @@ L_08B18ECC: AOT_REGCACHE_SYNC_OUT(); return; L_08B18ED8: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B18F0C; } @@ -3023,7 +3096,6 @@ L_08B18ED8: } L_08B18EE0: aot_gpr_31 = (0x08B18EE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B18EE8u) goto L_08B18EE8; AOT_REGCACHE_SYNC_OUT(); return; L_08B18EE8: @@ -3059,7 +3131,17 @@ L_08B18F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B18F24: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -3117,7 +3199,6 @@ L_08B18FA0: L_08B18FB0: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B18FD4; } @@ -3189,7 +3270,6 @@ L_08B1902C: L_08B1903C: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B19060; } @@ -3261,7 +3341,6 @@ L_08B190B8: L_08B190C8: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B190EC; } @@ -3293,7 +3372,6 @@ L_08B190EC: } L_08B190F8: aot_gpr_31 = (0x08B19100u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19100u) goto L_08B19100; AOT_REGCACHE_SYNC_OUT(); return; L_08B19100: @@ -3317,7 +3395,6 @@ L_08B19114: } L_08B19120: aot_gpr_31 = (0x08B19128u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19128u) goto L_08B19128; AOT_REGCACHE_SYNC_OUT(); return; L_08B19128: @@ -3344,7 +3421,17 @@ L_08B1913C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19158: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[4]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3369,7 +3456,6 @@ L_08B19188: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B197B8; } @@ -3404,7 +3490,6 @@ L_08B191BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19350; } @@ -3415,7 +3500,6 @@ L_08B191F8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(900))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B19224; } @@ -3427,7 +3511,6 @@ L_08B1920C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(616)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19350; } @@ -3439,7 +3522,6 @@ L_08B19224: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19258; } @@ -3454,7 +3536,6 @@ L_08B1923C: AOT_REGCACHE_SYNC_OUT(); return; L_08B1924C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B19258; } @@ -3468,7 +3549,6 @@ L_08B19258: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B19270; } @@ -3479,7 +3559,6 @@ L_08B1926C: goto L_08B19270; L_08B19270: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B192BC; } @@ -3496,7 +3575,6 @@ L_08B19288: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B192B4; } @@ -3516,7 +3594,6 @@ L_08B19298: AOT_REGCACHE_SYNC_OUT(); return; L_08B192B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B19350; } @@ -3555,7 +3632,6 @@ L_08B192CC: aot_gpr_4 = (aot_gpr_4 >> 4u); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B19350; } @@ -3572,7 +3648,6 @@ L_08B19334: goto L_08B19350; L_08B19350: aot_gpr_31 = (0x08B19358u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0001_entry, 1u, 327u, 0x088099B0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19358u) goto L_08B19358; AOT_REGCACHE_SYNC_OUT(); return; L_08B19358: @@ -3598,9 +3673,7 @@ L_08B19384: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B193B4; } @@ -3663,7 +3736,6 @@ L_08B193F0: } L_08B193F8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1946C; } @@ -3671,7 +3743,6 @@ L_08B193F8: } L_08B19400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B19590; } @@ -3717,7 +3788,6 @@ L_08B19458: AOT_REGCACHE_SYNC_OUT(); return; L_08B19464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B195C4; } @@ -3802,7 +3872,6 @@ L_08B194E0: goto L_08B194E8; L_08B194E8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B19524; } @@ -3832,7 +3901,6 @@ L_08B19518: AOT_REGCACHE_SYNC_OUT(); return; L_08B19524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B195C4; } @@ -3878,7 +3946,6 @@ L_08B1957C: AOT_REGCACHE_SYNC_OUT(); return; L_08B19588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B195C4; } @@ -3917,7 +3984,6 @@ L_08B195C4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store8(aot_gpr_5 + static_cast(1926), static_cast(aot_gpr_4)); aot_gpr_31 = (0x08B195F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B195F0u) goto L_08B195F0; AOT_REGCACHE_SYNC_OUT(); return; L_08B195F0: @@ -3927,7 +3993,6 @@ L_08B195F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B195F8: aot_gpr_31 = (0x08B19600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19600u) goto L_08B19600; AOT_REGCACHE_SYNC_OUT(); return; L_08B19600: @@ -3935,7 +4000,6 @@ L_08B19600: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B196C8; } @@ -3943,7 +4007,6 @@ L_08B19600: } L_08B19614: aot_gpr_31 = (0x08B1961Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1961Cu) goto L_08B1961C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1961C: @@ -3953,7 +4016,6 @@ L_08B1961C: AOT_REGCACHE_SYNC_OUT(); return; L_08B19624: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B196C8; } @@ -3961,7 +4023,6 @@ L_08B19624: } L_08B1962C: aot_gpr_31 = (0x08B19634u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19634u) goto L_08B19634; AOT_REGCACHE_SYNC_OUT(); return; L_08B19634: @@ -3969,7 +4030,6 @@ L_08B19634: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B196B8; } @@ -3977,7 +4037,6 @@ L_08B19634: } L_08B19648: aot_gpr_31 = (0x08B19650u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19650u) goto L_08B19650; AOT_REGCACHE_SYNC_OUT(); return; L_08B19650: @@ -3997,7 +4056,6 @@ L_08B19668: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B196C8; } @@ -4005,7 +4063,6 @@ L_08B19668: } L_08B19680: aot_gpr_31 = (0x08B19688u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19688u) goto L_08B19688; AOT_REGCACHE_SYNC_OUT(); return; L_08B19688: @@ -4025,7 +4082,6 @@ L_08B196A0: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B196C8; } @@ -4033,7 +4089,6 @@ L_08B196A0: } L_08B196B8: aot_gpr_31 = (0x08B196C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B196C0u) goto L_08B196C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B196C0: @@ -4054,7 +4109,6 @@ L_08B196D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B196DC: aot_gpr_31 = (0x08B196E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B196E4u) goto L_08B196E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B196E4: @@ -4066,7 +4120,6 @@ L_08B196E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B196F4: aot_gpr_31 = (0x08B196FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0097_entry, 97u, 844u, 0x0898B4F0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B196FCu) goto L_08B196FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B196FC: @@ -4076,7 +4129,6 @@ L_08B196FC: AOT_REGCACHE_SYNC_OUT(); return; L_08B19704: aot_gpr_31 = (0x08B1970Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1970Cu) goto L_08B1970C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1970C: @@ -4168,7 +4220,17 @@ L_08B197BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B197D4: aot_gpr_4 = (0u | 41u); aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(10548), static_cast(aot_gpr_4)); @@ -4197,7 +4259,17 @@ L_08B197D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19834: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(8), aot_run_words); } @@ -4208,7 +4280,17 @@ L_08B19834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19850: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4237,7 +4319,6 @@ L_08B19878: goto L_08B19880; L_08B19880: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19890; } @@ -4268,7 +4349,6 @@ L_08B198B4: goto L_08B198B8; L_08B198B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B198C8; } @@ -4291,7 +4371,17 @@ L_08B198C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B198DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4334,7 +4424,17 @@ L_08B1991C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19938: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -4389,21 +4489,50 @@ L_08B19998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B199B8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B199C0: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1704))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B199C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4479,7 +4608,17 @@ L_08B19A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19A98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4511,7 +4650,6 @@ L_08B19ACC: L_08B19AD8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19AEC; } @@ -4534,7 +4672,17 @@ L_08B19AEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19B00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (16256u << 16u); @@ -4551,12 +4699,21 @@ L_08B19B18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19B24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B19B34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0011_entry, 11u, 395u, 0x08831BF8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19B34u) goto L_08B19B34; AOT_REGCACHE_SYNC_OUT(); return; L_08B19B34: @@ -4566,7 +4723,17 @@ L_08B19B34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19B40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -4610,7 +4777,6 @@ L_08B19B78: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1940), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B19BD0; @@ -4620,7 +4786,6 @@ L_08B19BD0: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B19BE8; @@ -4635,7 +4800,6 @@ L_08B19BE8: L_08B19BF4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(154))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19C08; } @@ -4658,7 +4822,17 @@ L_08B19C08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19C20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -4675,7 +4849,6 @@ L_08B19C20: } L_08B19C40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B19C58; } @@ -4695,7 +4868,17 @@ L_08B19C58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19C64: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[8]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4770,7 +4953,6 @@ L_08B19D08: L_08B19D1C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1328))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19DE8; } @@ -4835,9 +5017,7 @@ L_08B19D74: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B19DB0; } @@ -4845,9 +5025,7 @@ L_08B19D74: } L_08B19DA0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B19DC0; } @@ -4855,7 +5033,6 @@ L_08B19DA0: } L_08B19DB0: aot_gpr_31 = (0x08B19DB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19DB8u) goto L_08B19DB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B19DB8: @@ -4954,9 +5131,7 @@ L_08B19E40: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(112))); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) & 0x7FFFFFFFu); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B19E7C; } @@ -4964,9 +5139,7 @@ L_08B19E40: } L_08B19E6C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B19E8C; } @@ -4974,7 +5147,6 @@ L_08B19E6C: } L_08B19E7C: aot_gpr_31 = (0x08B19E84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B19E84u) goto L_08B19E84; AOT_REGCACHE_SYNC_OUT(); return; L_08B19E84: @@ -5013,7 +5185,6 @@ L_08B19EB4: L_08B19EB8: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19ED8; } @@ -5022,7 +5193,6 @@ L_08B19EB8: L_08B19EC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B19ED8; } @@ -5050,7 +5220,17 @@ L_08B19ED8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5143,7 +5323,17 @@ L_08B19FC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B19FDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1316))); @@ -5167,7 +5357,6 @@ L_08B19FF4: L_08B1A008: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1A028; } @@ -5189,21 +5378,51 @@ L_08B1A028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A038: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1924))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A040: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1920))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A048: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5223,7 +5442,6 @@ L_08B1A048: L_08B1A070: aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B1A0B4; } @@ -5237,7 +5455,6 @@ L_08B1A07C: goto L_08B1A084; L_08B1A084: aot_gpr_31 = (0x08B1A08Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1A08Cu) goto L_08B1A08C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1A08C: @@ -5258,7 +5475,6 @@ L_08B1A0A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1A0AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1A0E4; } @@ -5272,7 +5488,6 @@ L_08B1A0B4: goto L_08B1A0BC; L_08B1A0BC: aot_gpr_31 = (0x08B1A0C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1A0C4u) goto L_08B1A0C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1A0C4: @@ -5321,14 +5536,33 @@ L_08B1A100: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A128: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A130: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -5351,7 +5585,6 @@ L_08B1A130: L_08B1A178: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(3192))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1A4F0; } @@ -5422,7 +5655,6 @@ L_08B1A184: aot_gpr_4 = (16256u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(aot_fpr_14)) && aot_fpr_15 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_16 + static_cast(16)); if (branch_taken) { @@ -5433,9 +5665,7 @@ L_08B1A184: L_08B1A1D8: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1528))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(aot_fpr_14)) && aot_fpr_15 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A288; } @@ -5444,7 +5674,6 @@ L_08B1A1D8: L_08B1A1EC: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1524))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3176))); if (branch_taken) { @@ -5455,9 +5684,7 @@ L_08B1A1EC: L_08B1A200: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1532))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A274; } @@ -5466,9 +5693,7 @@ L_08B1A200: L_08B1A214: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A274; } @@ -5487,7 +5712,6 @@ L_08B1A228: ctx.fpr[17] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[16]; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[16] = std::bit_cast(0x7FC00000u); else ctx.fpr[16] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_15)); goto L_08B1A264; @@ -5517,9 +5741,7 @@ L_08B1A274: L_08B1A288: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1556))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(aot_fpr_14)) && aot_fpr_15 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A320; } @@ -5528,9 +5750,7 @@ L_08B1A288: L_08B1A29C: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1564))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(aot_fpr_14)) && aot_fpr_15 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A320; } @@ -5539,7 +5759,6 @@ L_08B1A29C: L_08B1A2B0: aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3176))); if (branch_taken) { @@ -5562,7 +5781,6 @@ L_08B1A2C4: ctx.fpr[18] = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[17]; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[17] = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08B1A308; @@ -5914,9 +6132,7 @@ L_08B1A4F0: L_08B1A4F8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A530; } @@ -5925,7 +6141,6 @@ L_08B1A4F8: L_08B1A50C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1A530; } @@ -5947,7 +6162,6 @@ L_08B1A530: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1A54C; } @@ -5973,7 +6187,17 @@ L_08B1A54C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A580: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); { const std::uint32_t aot_run_words[4]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -6017,7 +6241,6 @@ L_08B1A5D4: AOT_REGCACHE_SYNC_OUT(); return; L_08B1A5DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1A92C; } @@ -6044,7 +6267,6 @@ L_08B1A5F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1A600: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1A634; } @@ -6095,9 +6317,7 @@ L_08B1A634: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1940))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A77C; } @@ -6107,9 +6327,7 @@ L_08B1A664: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1920))); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A77C; } @@ -6140,9 +6358,7 @@ L_08B1A68C: L_08B1A6A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A720; } @@ -6154,7 +6370,6 @@ L_08B1A6B8: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B1A720; } @@ -6179,7 +6394,6 @@ L_08B1A6D0: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B1A704; @@ -6256,7 +6470,6 @@ L_08B1A720: AOT_REGCACHE_SYNC_OUT(); return; L_08B1A774: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1A890; } @@ -6265,9 +6478,7 @@ L_08B1A774: L_08B1A77C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1940))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A890; } @@ -6278,9 +6489,7 @@ L_08B1A790: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_14) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A890; } @@ -6311,9 +6520,7 @@ L_08B1A7BC: L_08B1A7D4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(608))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1A838; } @@ -6338,7 +6545,6 @@ L_08B1A7E8: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B1A81C; @@ -6472,7 +6678,17 @@ L_08B1A92C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1A948: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(72))); @@ -6495,7 +6711,6 @@ L_08B1A948: L_08B1A984: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1AA50; } @@ -6504,7 +6719,6 @@ L_08B1A984: L_08B1A990: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(620)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B1AA50; } @@ -6530,7 +6744,6 @@ L_08B1A9B0: goto L_08B1A9BC; L_08B1A9BC: aot_gpr_31 = (0x08B1A9C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1A9C4u) goto L_08B1A9C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1A9C4: @@ -6551,7 +6764,6 @@ L_08B1A9D8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1A9E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1AA20; } @@ -6566,7 +6778,6 @@ L_08B1A9EC: goto L_08B1A9F8; L_08B1A9F8: aot_gpr_31 = (0x08B1AA00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AA00u) goto L_08B1AA00; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AA00: @@ -6613,7 +6824,6 @@ L_08B1AA50: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1AAC0; } @@ -6631,7 +6841,6 @@ L_08B1AA60: } L_08B1AA70: aot_gpr_31 = (0x08B1AA78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AA78u) goto L_08B1AA78; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AA78: @@ -6664,7 +6873,6 @@ L_08B1AAA8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AAB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -6676,7 +6884,6 @@ L_08B1AAC0: aot_gpr_4 = (16128u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 2u); if (branch_taken) { @@ -6689,7 +6896,6 @@ L_08B1AAE0: aot_gpr_5 = (48896u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (ctx.gpr[17] + static_cast(32)); if (branch_taken) { @@ -6700,9 +6906,7 @@ L_08B1AAE0: L_08B1AAFC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1ABB8; } @@ -6720,7 +6924,6 @@ L_08B1AB10: L_08B1AB1C: aot_gpr_4 = (0u | 4u); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B1AB64; } @@ -6735,7 +6938,6 @@ L_08B1AB28: goto L_08B1AB34; L_08B1AB34: aot_gpr_31 = (0x08B1AB3Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AB3Cu) goto L_08B1AB3C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AB3C: @@ -6756,7 +6958,6 @@ L_08B1AB50: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AB5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1AB98; } @@ -6771,7 +6972,6 @@ L_08B1AB64: goto L_08B1AB70; L_08B1AB70: aot_gpr_31 = (0x08B1AB78u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AB78u) goto L_08B1AB78; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AB78: @@ -6804,7 +7004,6 @@ L_08B1ABA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1ABB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -6820,7 +7019,6 @@ L_08B1ABB8: } L_08B1ABC0: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B1AC54; } @@ -6829,9 +7027,7 @@ L_08B1ABC0: L_08B1ABC8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1AC18; } @@ -6846,7 +7042,6 @@ L_08B1ABDC: goto L_08B1ABE8; L_08B1ABE8: aot_gpr_31 = (0x08B1ABF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1ABF0u) goto L_08B1ABF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1ABF0: @@ -6867,7 +7062,6 @@ L_08B1AC04: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AC10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1ACD8; } @@ -6882,7 +7076,6 @@ L_08B1AC18: goto L_08B1AC24; L_08B1AC24: aot_gpr_31 = (0x08B1AC2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AC2Cu) goto L_08B1AC2C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AC2C: @@ -6903,7 +7096,6 @@ L_08B1AC40: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AC4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1ACD8; } @@ -6912,9 +7104,7 @@ L_08B1AC4C: L_08B1AC54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1ACA4; } @@ -6929,7 +7119,6 @@ L_08B1AC68: goto L_08B1AC74; L_08B1AC74: aot_gpr_31 = (0x08B1AC7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AC7Cu) goto L_08B1AC7C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AC7C: @@ -6950,7 +7139,6 @@ L_08B1AC90: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AC9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1ACD8; } @@ -6965,7 +7153,6 @@ L_08B1ACA4: goto L_08B1ACB0; L_08B1ACB0: aot_gpr_31 = (0x08B1ACB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1ACB8u) goto L_08B1ACB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B1ACB8: @@ -6999,7 +7186,6 @@ L_08B1ACE0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1ACF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -7009,7 +7195,6 @@ L_08B1ACFC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 20u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1AE08; } @@ -7018,7 +7203,6 @@ L_08B1ACFC: L_08B1AD0C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1ADA8; } @@ -7030,7 +7214,6 @@ L_08B1AD18: aot_gpr_4 = (aot_gpr_4 + static_cast(2228)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1AD98; } @@ -7042,7 +7225,6 @@ L_08B1AD30: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1AD98; } @@ -7060,7 +7242,6 @@ L_08B1AD48: } L_08B1AD58: aot_gpr_31 = (0x08B1AD60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AD60u) goto L_08B1AD60; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AD60: @@ -7096,7 +7277,6 @@ L_08B1AD98: AOT_REGCACHE_SYNC_OUT(); return; L_08B1ADA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -7114,7 +7294,6 @@ L_08B1ADA8: } L_08B1ADB8: aot_gpr_31 = (0x08B1ADC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1ADC0u) goto L_08B1ADC0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1ADC0: @@ -7147,7 +7326,6 @@ L_08B1ADF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AE00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -7164,7 +7342,6 @@ L_08B1AE08: } L_08B1AE14: { const bool branch_taken = ctx.gpr[19] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1B040; } @@ -7173,7 +7350,6 @@ L_08B1AE14: L_08B1AE1C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(900))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B1AFA4; } @@ -7198,9 +7374,7 @@ L_08B1AE28: aot_gpr_5 = (aot_gpr_5 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1AEBC; } @@ -7215,7 +7389,6 @@ L_08B1AE64: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1AE84; } @@ -7225,7 +7398,6 @@ L_08B1AE74: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1AEA0; } @@ -7241,7 +7413,6 @@ L_08B1AE84: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AE98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1AEB4; } @@ -7257,7 +7428,6 @@ L_08B1AEA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AEB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B328; } @@ -7269,7 +7439,6 @@ L_08B1AEBC: aot_gpr_5 = (aot_gpr_5 + static_cast(2228)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B1AF94; } @@ -7281,7 +7450,6 @@ L_08B1AED4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & aot_gpr_6); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B1AF94; } @@ -7306,7 +7474,6 @@ L_08B1AEFC: goto L_08B1AF08; L_08B1AF08: aot_gpr_31 = (0x08B1AF10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AF10u) goto L_08B1AF10; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AF10: @@ -7327,7 +7494,6 @@ L_08B1AF24: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AF30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1AF6C; } @@ -7342,7 +7508,6 @@ L_08B1AF38: goto L_08B1AF44; L_08B1AF44: aot_gpr_31 = (0x08B1AF4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AF4Cu) goto L_08B1AF4C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AF4C: @@ -7390,7 +7555,6 @@ L_08B1AF94: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AF9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -7414,7 +7578,6 @@ L_08B1AFB0: goto L_08B1AFBC; L_08B1AFBC: aot_gpr_31 = (0x08B1AFC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1AFC4u) goto L_08B1AFC4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1AFC4: @@ -7435,7 +7598,6 @@ L_08B1AFD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1AFE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B020; } @@ -7450,7 +7612,6 @@ L_08B1AFEC: goto L_08B1AFF8; L_08B1AFF8: aot_gpr_31 = (0x08B1B000u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1B000u) goto L_08B1B000; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B000: @@ -7483,7 +7644,6 @@ L_08B1B028: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B038: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -7497,7 +7657,6 @@ L_08B1B040: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B04C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1B1EC; } @@ -7522,9 +7681,7 @@ L_08B1B054: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1B0E8; } @@ -7539,7 +7696,6 @@ L_08B1B090: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1B0B0; } @@ -7549,7 +7705,6 @@ L_08B1B0A0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(2274))); aot_gpr_5 = (0u | 11u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1B0CC; } @@ -7565,7 +7720,6 @@ L_08B1B0B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B0C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B0E0; } @@ -7581,7 +7735,6 @@ L_08B1B0CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B0E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B328; } @@ -7614,7 +7767,6 @@ L_08B1B110: aot_gpr_5 = (4u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1B1DC; } @@ -7640,7 +7792,6 @@ L_08B1B138: goto L_08B1B144; L_08B1B144: aot_gpr_31 = (0x08B1B14Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1B14Cu) goto L_08B1B14C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B14C: @@ -7661,7 +7812,6 @@ L_08B1B160: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B16C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B1A8; } @@ -7676,7 +7826,6 @@ L_08B1B174: goto L_08B1B180; L_08B1B180: aot_gpr_31 = (0x08B1B188u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1B188u) goto L_08B1B188; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B188: @@ -7730,7 +7879,6 @@ L_08B1B1DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B1E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B284; } @@ -7755,7 +7903,6 @@ L_08B1B1FC: goto L_08B1B208; L_08B1B208: aot_gpr_31 = (0x08B1B210u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1B210u) goto L_08B1B210; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B210: @@ -7776,7 +7923,6 @@ L_08B1B224: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B230: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B26C; } @@ -7791,7 +7937,6 @@ L_08B1B238: goto L_08B1B244; L_08B1B244: aot_gpr_31 = (0x08B1B24Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1B24Cu) goto L_08B1B24C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B24C: @@ -7824,7 +7969,6 @@ L_08B1B274: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B284: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B1B328; } @@ -7860,7 +8004,6 @@ L_08B1B2B0: L_08B1B2BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B1B2EC; } @@ -7868,12 +8011,10 @@ L_08B1B2BC: } L_08B1B2C8: aot_gpr_31 = (0x08B1B2D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1B2D0u) goto L_08B1B2D0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B2D0: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B1B2EC; } @@ -7882,7 +8023,6 @@ L_08B1B2D0: L_08B1B2D8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B1B2EC; } @@ -7908,7 +8048,6 @@ L_08B1B2F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B300: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1B328; } @@ -7943,7 +8082,17 @@ L_08B1B328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B348: aot_gpr_4 = (16254u << 16u); aot_gpr_4 = (aot_gpr_4 | 47186u); @@ -7957,7 +8106,17 @@ L_08B1B348: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B36C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7971,7 +8130,17 @@ L_08B1B37C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B388: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7993,13 +8162,22 @@ L_08B1B3A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B3B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(3232))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1B3DC; } @@ -8025,7 +8203,17 @@ L_08B1B3DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B3E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -8066,7 +8254,6 @@ L_08B1B450: L_08B1B45C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B1B470; } @@ -8074,7 +8261,6 @@ L_08B1B45C: } L_08B1B468: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B4A4; } @@ -8083,7 +8269,6 @@ L_08B1B468: L_08B1B470: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B1B494; } @@ -8097,7 +8282,6 @@ L_08B1B47C: goto L_08B1B4DC; L_08B1B48C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B4A4; } @@ -8139,7 +8323,17 @@ L_08B1B4BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B4DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), ctx.gpr[17]); @@ -8171,7 +8365,6 @@ L_08B1B524: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B52C: aot_gpr_31 = (0x08B1B534u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B534: @@ -8186,13 +8379,11 @@ L_08B1B534: } L_08B1B544: aot_gpr_31 = (0x08B1B54Cu); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08B1B54C: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1B574; } @@ -8206,7 +8397,6 @@ L_08B1B558: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B564: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B1B56C; } @@ -8214,7 +8404,6 @@ L_08B1B564: } L_08B1B56C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1B544; } @@ -8230,7 +8419,6 @@ L_08B1B574: L_08B1B584: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[19]) >= 0; - // nop if (branch_taken) { goto L_08B1B598; } @@ -8243,7 +8431,6 @@ L_08B1B590: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B598: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08B1B574; } @@ -8280,7 +8467,6 @@ L_08B1B5C8: L_08B1B5D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B1B5B8; } @@ -8310,7 +8496,6 @@ L_08B1B5E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B620: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B1B630; } @@ -8342,7 +8527,17 @@ L_08B1B634: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B654: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_4); @@ -8378,7 +8573,6 @@ L_08B1B6A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1B6A8: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B1B6C0; } @@ -8410,7 +8604,17 @@ L_08B1B6C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B6D0: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); aot_gpr_6 = (aot_gpr_6 & 65535u); @@ -8444,7 +8648,17 @@ L_08B1B70C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B714: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -8454,7 +8668,17 @@ L_08B1B714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1B728: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -8823,7 +9047,17 @@ L_08B1BA3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BB04: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(aot_fpr_12)); @@ -8851,7 +9085,17 @@ L_08B1BB04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BB34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8872,7 +9116,17 @@ L_08B1BB48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BB68: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -8948,7 +9202,17 @@ L_08B1BC0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BC2C: ctx.gpr[2] = (2226u << 16u); jump_target = aot_gpr_31; @@ -8956,12 +9220,21 @@ L_08B1BC2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BC38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1BC48u); - // nop goto L_08B1BC2C; L_08B1BC48: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8970,7 +9243,17 @@ L_08B1BC48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BC54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9021,7 +9304,6 @@ L_08B1BCAC: goto L_08B1BCB4; L_08B1BCB4: aot_gpr_31 = (0x08B1BCBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1BCBCu) goto L_08B1BCBC; AOT_REGCACHE_SYNC_OUT(); return; L_08B1BCBC: @@ -9071,7 +9353,6 @@ L_08B1BCF4: goto L_08B1BCF8; L_08B1BCF8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1BD04; } @@ -9096,7 +9377,17 @@ L_08B1BD04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BD28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9127,7 +9418,6 @@ L_08B1BD58: L_08B1BD64: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1BD78; } @@ -9150,14 +9440,34 @@ L_08B1BD78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BD8C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 4u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BD94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -9194,7 +9504,17 @@ L_08B1BDD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BDE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -9224,7 +9544,17 @@ L_08B1BE0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BE18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -9286,7 +9616,17 @@ L_08B1BE9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BEB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -9302,7 +9642,17 @@ L_08B1BEC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -9352,7 +9702,17 @@ L_08B1BF1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1BF3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[17]); diff --git a/profiles/vcs/generated/generated_unit_0198.cpp b/profiles/vcs/generated/generated_unit_0198.cpp index 2a9d398..71fcf84 100644 --- a/profiles/vcs/generated/generated_unit_0198.cpp +++ b/profiles/vcs/generated/generated_unit_0198.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0198[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 4, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 13, - 0, 14, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 19, 20, 0, 0, 0, 21, 0, 22, - 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, - 27, 0, 28, 0, 0, 0, 0, 0, 0, 29, 0, 0, 30, 0, 0, 31, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, - 38, 0, 39, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, - 0, 0, 0, 43, 0, 0, 0, 0, 44, 0, 45, 0, 46, 0, 0, 47, 48, 0, 49, 0, 0, 50, 51, 0, 52, 0, 0, 53, 54, 0, 55, 0, - 0, 56, 57, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 0, - 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 64, 0, 0, 65, 0, 0, 66, 0, 0, 0, 0, - 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 69, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, - 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, 78, 0, 79, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 87, 0, - 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 91, 92, 0, 93, 0, 0, 0, 0, 94, 0, 0, - 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 99, 0, 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 103, 0, 0, - 104, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 0, 108, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 115, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 118, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 0, 124, 0, 0, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 129, 0, 0, 0, 0, 130, 131, 0, 0, 0, 132, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 135, 136, 0, 0, 0, 0, 137, 138, 0, 0, 139, - 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 142, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 0, - 148, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, 151, 152, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 0, 155, 0, 156, 0, - 0, 157, 0, 0, 0, 0, 158, 0, 0, 0, 159, 0, 160, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 0, 0, 0, 164, 0, 165, - 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 0, 0, 173, 0, - 174, 175, 0, 0, 176, 0, 0, 177, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, - 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 193, 0, 0, 194, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 200, 0, 0, 201, 202, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 0, 205, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, - 210, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 214, 215, 0, 0, 0, 216, 0, 0, 0, 0, 217, 0, 0, - 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 0, 220, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, - 226, 227, 0, 0, 0, 228, 0, 229, 230, 0, 231, 0, 232, 0, 233, 0, 234, 235, 0, 0, 0, 0, 236, 0, 237, 238, 0, 239, 0, 0, 0, 0, - 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 243, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 0, 0, 0, 250, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 253, 0, 254, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 257, 258, 0, 0, 0, 259, 0, 0, 260, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 267, 0, 268, 269, 0, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, - 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, 0, 284, 285, 0, 0, 0, 0, 286, 0, 287, 0, 0, - 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 297, 0, 0, 0, 0, 298, 0, 299, 0, 0, 300, 0, 301, 302, 0, 303, 0, 304, 0, 305, 0, 0, 306, 0, 307, 308, 0, 309, 0, 0, 0, - 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 312, 0, 313, 314, 0, 315, 0, 316, 0, 0, 317, 0, 0, 318, 0, 319, 0, - 320, 0, 321, 0, 0, 322, 0, 323, 0, 324, 0, 325, 0, 0, 326, 0, 327, 0, 328, 0, 329, 0, 0, 330, 0, 331, 332, 0, 333, 0, 0, 0, - 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, - 0, 0, 337, 0, 0, 338, 339, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, - 0, 348, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 354, 355, - 0, 0, 356, 0, 357, 0, 358, 359, 0, 360, 0, 361, 0, 362, 0, 363, 364, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, - 0, 0, 368, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 373, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, - 0, 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 380, 0, 381, 382, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, - 384, 0, 0, 0, 0, 0, 385, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 391, 0, 0, 0, 0, 0, 392, 393, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, - 401, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 0, 0, 0, - 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 412, 0, 0, 0, 413, 0, 0, 0, 414, 0, 0, 0, 415, 0, - 416, 417, 418, 0, 419, 420, 0, 0, 0, 0, 0, 421, 0, 0, 422, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 426, - 0, 427, 0, 428, 0, 429, 0, 0, 0, 0, 430, 431, 432, 0, 433, 434, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, - 0, 0, 437, 0, 0, 438, 0, 0, 439, 0, 440, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 0, 445, - 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, - 452, 0, 0, 453, 454, 0, 0, 0, 455, 0, 0, 0, 0, 456, 0, 0, 457, 0, 0, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, - 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, - 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 0, 0, 0, 466, 467, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, - 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 0, 474, 0, 0, 475, 0, 0, 476, 0, 477, 0, 0, 0, - 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, - 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 0, 0, 0, - 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 490, 0, 0, - 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, - 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 505, 0, 0, 506, 0, 0, - 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 512, - 0, 0, 0, 513, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, - 519, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, - 525, 0, 0, 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, 0, 0, - 531, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, 0, 536, 537, 0, 0, 0, 538, 0, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, - 0, 0, 0, 544, 545, 546, 0, 547, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 551, 552, 0, 553, 0, 0, - 554, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 557, 0, 0, 558, 0, 0, 0, 559, 0, 0, 0, 560, 0, 561, 562, 563, 0, 0, 0, 564, 0, - 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 568, 0, 0, - 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 572, 573, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 576, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, - 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, 589, 0, 0, 0, 0, 590, 0, 0, 0, 591, 0, 592, - 0, 0, 593, 0, 594, 0, 595, 0, 596, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 0, 599, 0, 600, 0, 601, 0, 0, 0, 602, 0, 0, 0, - 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 612, 0, 0, 613, 0, 614, - 615, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, 621, 0, 622, - 0, 623, 0, 624, 0, 625, 626, 0, 0, 627, 0, 628, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 630, 0, 631, 0, 632, 0, 633, 0, 634, - 0, 635, 0, 636, 637, 0, 0, 638, 0, 639, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 642, 0, 643, 0, 0, 0, 0, 644, 0, 0, - 645, 0, 0, 646, 0, 647, 0, 648, 0, 0, 0, 649, 0, 0, 650, 0, 651, 0, 652, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 658, 0, - 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 662, 0, 663, 0, 0, 664, - 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 0, 669, 0, 670, 0, 671, 0, 0, 0, 0, 672, 673, 674, 0, 675, - 676, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 679, 0, 680, 0, 681, 0, 0, 0, 0, 682, 0, 0, 0, 0, - 0, 0, 683, 0, 0, 0, 0, 0, 684, 0, 0, 685, 0, 686, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, 0, 0, 0, 690, 0, 691, 0, 692, - 0, 0, 693, 0, 0, 0, 0, 694, 0, 695, 0, 696, 0, 0, 697, 0, 0, 0, 0, 698, 0, 699, 0, 700, 0, 0, 701, 0, 702, 0, 703, 0, - 0, 0, 704, 0, 705, 0, 706, 707, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, 0, 711, 712, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 714, 0, 715, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 718, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 721, 0, 722, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 725, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 727, - 0, 0, 0, 0, 0, 728, 729, 0, 0, 0, 0, 0, 730, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 733, 0, 0, 0, 0, - 0, 734, 0, 0, 735, 0, 736, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0198[64] = { + 0x8489120000909101ull, 0x02804010A3240812ull, 0x0820800004119205ull, 0x5965950810004105ull, + 0x0924040210400046ull, 0x0400000000000001ull, 0x2001048800000009ull, 0x080000000010A410ull, + 0x2160200C48428040ull, 0x0005121124449111ull, 0x4048020000008001ull, 0x2444444100040008ull, + 0x9861004011861040ull, 0x50841A2128420D10ull, 0x42106884A1083442ull, 0x0000000000400293ull, + 0x0020000040080000ull, 0x8000000848202080ull, 0x4000032080800200ull, 0x04900C8201000080ull, + 0x211A404120080108ull, 0x0B4355A352021920ull, 0x0000490022208401ull, 0x0002021400000A82ull, + 0x0108D2021000AA46ull, 0x1000401004001004ull, 0x2862080108900000ull, 0x4040020004000004ull, + 0x0088808000000000ull, 0x5256900416956942ull, 0x1008000416954AA5ull, 0x0900400840248064ull, + 0x8085AAD4D2021202ull, 0x080800400A404014ull, 0x041A401010000000ull, 0x001010C120280541ull, + 0x0440408110102420ull, 0x4444410020800102ull, 0x2040DC2AA0244837ull, 0x10048111A4028524ull, + 0x8104200104212119ull, 0x149088100908C040ull, 0x0841050108200002ull, 0x8000002424800002ull, + 0x2440442010248484ull, 0x0488204880824410ull, 0x0244040910409101ull, 0x1002420042349101ull, + 0x474448912E0408B8ull, 0x0020340921000102ull, 0x0000090048800000ull, 0x0920090048000000ull, + 0x11508554A2120002ull, 0xA8850101A6AA9401ull, 0x2160069AAA801A6Aull, 0x40A08000801548A9ull, + 0xB855404895001010ull, 0xA854290408541081ull, 0x0CA004D454A84A84ull, 0x0000002400023480ull, + 0x821A00000A800000ull, 0x000001520A003060ull, 0x0000000000000000ull, 0x4000000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0198[64] = { + 1u, 14u, 27u, 38u, 56u, 67u, 69u, 76u, 82u, 95u, 110u, 116u, 126u, 140u, 157u, 174u, + 180u, 183u, 190u, 197u, 206u, 218u, 240u, 249u, 257u, 272u, 278u, 288u, 293u, 297u, 320u, 337u, + 348u, 368u, 377u, 384u, 396u, 406u, 416u, 437u, 452u, 465u, 478u, 487u, 494u, 507u, 519u, 531u, + 544u, 565u, 575u, 580u, 587u, 603u, 623u, 645u, 659u, 676u, 693u, 713u, 720u, 728u, 738u, 738u, }; void recomp_unit_0198_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0198_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B1C004u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0198[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0198[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0198[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B1C004; @@ -924,12 +831,21 @@ L_08B1C004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C024: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1C034u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 166u, 0x08AACBDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1C034u) goto L_08B1C034; AOT_REGCACHE_SYNC_OUT(); return; L_08B1C034: @@ -939,7 +855,17 @@ L_08B1C034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C040: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -955,7 +881,17 @@ L_08B1C054: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C060: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[19]); @@ -981,7 +917,6 @@ L_08B1C060: L_08B1C0A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1C0D0; } @@ -1080,7 +1015,6 @@ L_08B1C168: AOT_REGCACHE_SYNC_OUT(); return; L_08B1C178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1C194; } @@ -1111,7 +1045,17 @@ L_08B1C194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C1BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_5); @@ -1127,7 +1071,6 @@ L_08B1C1BC: } L_08B1C1E0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B1C204; } @@ -1147,7 +1090,6 @@ L_08B1C1E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B1C204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1C254; } @@ -1201,7 +1143,17 @@ L_08B1C254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C26C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), aot_gpr_6); @@ -1309,7 +1261,17 @@ L_08B1C374: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C390: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1331,7 +1293,6 @@ L_08B1C3AC: L_08B1C3B4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C3C4; } @@ -1348,7 +1309,6 @@ L_08B1C3C4: L_08B1C3CC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C3DC; } @@ -1365,7 +1325,6 @@ L_08B1C3DC: L_08B1C3E4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C3F4; } @@ -1382,7 +1341,6 @@ L_08B1C3F4: L_08B1C3FC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C40C; } @@ -1399,7 +1357,17 @@ L_08B1C40C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C41C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[19]); @@ -1449,7 +1417,17 @@ L_08B1C488: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C4AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1464,7 +1442,6 @@ L_08B1C4AC: L_08B1C4CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1C4E4; } @@ -1473,7 +1450,6 @@ L_08B1C4CC: L_08B1C4D8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C4F0; } @@ -1496,7 +1472,17 @@ L_08B1C4F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1577,7 +1563,17 @@ L_08B1C604: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C610: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1630,14 +1626,23 @@ L_08B1C6A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C6AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B1C6C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 264u, 0x08AAD80Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1C6C4u) goto L_08B1C6C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1C6C4: @@ -1657,7 +1662,17 @@ L_08B1C6C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C6F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1682,7 +1697,6 @@ L_08B1C714: L_08B1C72C: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C740; } @@ -1705,7 +1719,17 @@ L_08B1C740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1C754: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[12]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -1747,7 +1771,6 @@ L_08B1C7F0: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3248))); ctx.gpr[22] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(224))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B1C81C; @@ -1760,7 +1783,6 @@ L_08B1C81C: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 / ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08B1C840; @@ -1768,7 +1790,6 @@ L_08B1C81C: goto L_08B1C840; L_08B1C840: aot_gpr_31 = (0x08B1C848u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B61B60, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], ctx.gpr[3], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_29, aot_gpr_31, aot_fpr_12); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0215_entry, 215u, 341u, 0x08B61B60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1C848u) goto L_08B1C848; AOT_REGCACHE_SYNC_OUT(); return; L_08B1C848: @@ -1797,7 +1818,6 @@ L_08B1C87C: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 256 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1C890; } @@ -1814,7 +1834,6 @@ L_08B1C890: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B1C8B8; @@ -1828,7 +1847,6 @@ L_08B1C8B8: ctx.gpr[19] = (std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C8DC; } @@ -1839,7 +1857,6 @@ L_08B1C8D8: goto L_08B1C8DC; L_08B1C8DC: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B1C914; } @@ -1856,7 +1873,6 @@ L_08B1C8E4: L_08B1C8F8: ctx.gpr[22] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B1C914; } @@ -1873,7 +1889,6 @@ L_08B1C914: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C94C; } @@ -1905,7 +1920,6 @@ L_08B1C94C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(228))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1C984; } @@ -1937,7 +1951,6 @@ L_08B1C984: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), 0u); ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(236))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B1C9C4; } @@ -1954,7 +1967,6 @@ L_08B1C994: L_08B1C9A8: ctx.gpr[20] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B1C9C4; } @@ -1993,14 +2005,23 @@ L_08B1C9CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1CA04: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[11]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(160), aot_run_words); } aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_31 = (0x08B1CA40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 271u, 0x08AAD8A0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1CA40u) goto L_08B1CA40; AOT_REGCACHE_SYNC_OUT(); return; L_08B1CA40: @@ -2051,7 +2072,6 @@ L_08B1CAA8: L_08B1CAD0: aot_gpr_5 = (0u + static_cast(-971)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1CB9C; } @@ -2063,9 +2083,7 @@ L_08B1CADC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1CB9C; } @@ -2109,7 +2127,6 @@ L_08B1CB4C: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_14 = ctx.fpr[16] - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B1CB84; @@ -2128,7 +2145,6 @@ L_08B1CB9C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-995)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1CBF8; } @@ -2138,7 +2154,6 @@ L_08B1CBAC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 263u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1CBF8; } @@ -2148,7 +2163,6 @@ L_08B1CBBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-964)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1CBF8; } @@ -2158,7 +2172,6 @@ L_08B1CBCC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 260u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1CBF8; } @@ -2168,7 +2181,6 @@ L_08B1CBDC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_4 = (0u | 261u); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B1CBF8; } @@ -2177,7 +2189,6 @@ L_08B1CBDC: L_08B1CBEC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B1CC1C; } @@ -2209,9 +2220,7 @@ L_08B1CC1C: L_08B1CC34: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(384))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1CC64; } @@ -2223,9 +2232,7 @@ L_08B1CC48: L_08B1CC4C: aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1CC4C; } @@ -2238,7 +2245,6 @@ L_08B1CC64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-978)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B1CC9C; } @@ -2275,9 +2281,7 @@ L_08B1CC9C: L_08B1CCC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(388))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1CCF4; } @@ -2289,9 +2293,7 @@ L_08B1CCD8: L_08B1CCDC: aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1CCDC; } @@ -2303,7 +2305,6 @@ L_08B1CCF0: L_08B1CCF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1CD78; } @@ -2385,7 +2386,6 @@ L_08B1CD70: L_08B1CD78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(228))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1CDFC; } @@ -2467,7 +2467,6 @@ L_08B1CDF4: L_08B1CDFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(232))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1CE80; } @@ -2632,7 +2631,6 @@ L_08B1CF04: L_08B1CF08: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1CF28; } @@ -2641,7 +2639,6 @@ L_08B1CF08: L_08B1CF14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1CF28; } @@ -2672,7 +2669,17 @@ L_08B1CF28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1CF5C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -2738,7 +2745,17 @@ L_08B1CF5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D050: aot_gpr_6 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_6); @@ -2765,7 +2782,17 @@ L_08B1D050: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D07C: { const std::uint32_t vfpu_address = aot_gpr_4 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -2822,7 +2849,17 @@ L_08B1D07C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D0D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), ctx.gpr[18]); @@ -2859,7 +2896,6 @@ L_08B1D138: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); if (branch_taken) { @@ -2871,7 +2907,6 @@ L_08B1D158: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(24))); goto L_08B1D190; @@ -2938,7 +2973,17 @@ L_08B1D200: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D228: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_16); @@ -2962,7 +3007,6 @@ L_08B1D260: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); if (branch_taken) { @@ -2974,9 +3018,7 @@ L_08B1D280: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1D2A8; } @@ -3041,7 +3083,17 @@ L_08B1D2FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D320: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -3069,7 +3121,6 @@ L_08B1D364: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(16)); if (branch_taken) { @@ -3081,9 +3132,7 @@ L_08B1D388: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1D3B0; } @@ -3129,7 +3178,6 @@ L_08B1D3D4: L_08B1D3E0: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B1D3EC; } @@ -3184,7 +3232,17 @@ L_08B1D424: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D450: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3217,7 +3275,17 @@ L_08B1D484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D49C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3238,7 +3306,6 @@ L_08B1D4BC: goto L_08B1D4C8; L_08B1D4C8: aot_gpr_31 = (0x08B1D4D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D4D0u) goto L_08B1D4D0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D4D0: @@ -3260,7 +3327,17 @@ L_08B1D4E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D4F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3275,7 +3352,6 @@ L_08B1D4F8: L_08B1D518: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(29704))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1D530; } @@ -3302,7 +3378,17 @@ L_08B1D534: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D548: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3325,7 +3411,6 @@ L_08B1D568: } L_08B1D574: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1D588; } @@ -3333,7 +3418,6 @@ L_08B1D574: } L_08B1D57C: aot_gpr_31 = (0x08B1D584u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D584u) goto L_08B1D584; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D584: @@ -3343,7 +3427,6 @@ L_08B1D588: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(11240), 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1D5A4; } @@ -3351,7 +3434,6 @@ L_08B1D588: } L_08B1D598: aot_gpr_31 = (0x08B1D5A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D5A0u) goto L_08B1D5A0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D5A0: @@ -3364,7 +3446,6 @@ L_08B1D5A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B1D5AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1D5F0; } @@ -3372,7 +3453,6 @@ L_08B1D5AC: } L_08B1D5B4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1D5C8; } @@ -3380,7 +3460,6 @@ L_08B1D5B4: } L_08B1D5BC: aot_gpr_31 = (0x08B1D5C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D5C4u) goto L_08B1D5C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D5C4: @@ -3391,7 +3470,6 @@ L_08B1D5C8: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(11240), aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1D5E8; } @@ -3399,7 +3477,6 @@ L_08B1D5C8: } L_08B1D5DC: aot_gpr_31 = (0x08B1D5E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D5E4u) goto L_08B1D5E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D5E4: @@ -3419,7 +3496,17 @@ L_08B1D5F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D604: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3454,12 +3541,21 @@ L_08B1D640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D658: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1D668u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0030_entry, 30u, 241u, 0x0887CD60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D668u) goto L_08B1D668; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D668: @@ -3470,7 +3566,17 @@ L_08B1D668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D678: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3515,7 +3621,6 @@ L_08B1D6BC: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(12))); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_15)) && aot_fpr_12 == aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(16), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3527,7 +3632,6 @@ L_08B1D708: aot_gpr_4 = (50042u << 16u); aot_fpr_15 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -3590,7 +3694,17 @@ L_08B1D794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D7A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_16); @@ -3618,7 +3732,6 @@ L_08B1D7C8: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B1D874; } @@ -3643,7 +3756,6 @@ L_08B1D81C: AOT_REGCACHE_SYNC_OUT(); return; L_08B1D828: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B1D838; } @@ -3656,7 +3768,6 @@ L_08B1D830: AOT_REGCACHE_SYNC_OUT(); return; L_08B1D838: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1D874; } @@ -3675,7 +3786,6 @@ L_08B1D840: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B1D80C; } @@ -3690,7 +3800,17 @@ L_08B1D874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D888: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3711,7 +3831,6 @@ L_08B1D8A8: goto L_08B1D8B4; L_08B1D8B4: aot_gpr_31 = (0x08B1D8BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1D8BCu) goto L_08B1D8BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B1D8BC: @@ -3733,7 +3852,17 @@ L_08B1D8D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D8E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3784,7 +3913,17 @@ L_08B1D934: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D96C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -3835,7 +3974,17 @@ L_08B1D9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1D9F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[19]); @@ -3893,7 +4042,6 @@ L_08B1DA84: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), std::bit_cast(aot_fpr_12)); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_14)) && ctx.fpr[22] == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -3905,9 +4053,7 @@ L_08B1DAB0: aot_gpr_4 = (50042u << 16u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1DADC; } @@ -3933,7 +4079,6 @@ L_08B1DADC: AOT_REGCACHE_SYNC_OUT(); return; L_08B1DAF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1DB0C; } @@ -4006,7 +4151,17 @@ L_08B1DB6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1DBA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -4091,12 +4246,21 @@ L_08B1DCA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1DCC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1DCD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0076_entry, 76u, 693u, 0x08936810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DCD0u) goto L_08B1DCD0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DCD0: @@ -4107,7 +4271,17 @@ L_08B1DCD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1DCE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4161,7 +4335,6 @@ L_08B1DD3C: AOT_REGCACHE_SYNC_OUT(); return; L_08B1DD44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1DD74; } @@ -4207,7 +4380,17 @@ L_08B1DD74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1DD8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4224,7 +4407,6 @@ L_08B1DD8C: L_08B1DDB4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1DDCC; } @@ -4232,7 +4414,6 @@ L_08B1DDB4: } L_08B1DDC0: aot_gpr_31 = (0x08B1DDC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DDC8u) goto L_08B1DDC8; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DDC8: @@ -4240,12 +4421,10 @@ L_08B1DDC8: goto L_08B1DDCC; L_08B1DDCC: aot_gpr_31 = (0x08B1DDD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0109_entry, 109u, 553u, 0x089BAA60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DDD4u) goto L_08B1DDD4; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DDD4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1DDE8; } @@ -4254,7 +4433,6 @@ L_08B1DDD4: L_08B1DDDC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1DE74; } @@ -4269,7 +4447,6 @@ L_08B1DDE8: goto L_08B1DDF4; L_08B1DDF4: aot_gpr_31 = (0x08B1DDFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DDFCu) goto L_08B1DDFC; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DDFC: @@ -4290,7 +4467,6 @@ L_08B1DE0C: goto L_08B1DE18; L_08B1DE18: aot_gpr_31 = (0x08B1DE20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DE20u) goto L_08B1DE20; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DE20: @@ -4311,7 +4487,6 @@ L_08B1DE30: goto L_08B1DE3C; L_08B1DE3C: aot_gpr_31 = (0x08B1DE44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DE44u) goto L_08B1DE44; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DE44: @@ -4326,7 +4501,6 @@ L_08B1DE4C: L_08B1DE54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1DE6C; } @@ -4334,7 +4508,6 @@ L_08B1DE54: } L_08B1DE60: aot_gpr_31 = (0x08B1DE68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1DE68u) goto L_08B1DE68; AOT_REGCACHE_SYNC_OUT(); return; L_08B1DE68: @@ -4358,7 +4531,17 @@ L_08B1DE74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1DE8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), aot_gpr_16); @@ -4386,7 +4569,6 @@ L_08B1DED0: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (aot_gpr_29 + static_cast(16)); if (branch_taken) { @@ -4398,9 +4580,7 @@ L_08B1DEF4: aot_gpr_4 = (50042u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1DF1C; } @@ -4446,7 +4626,6 @@ L_08B1DF40: L_08B1DF4C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B1DF58; } @@ -4501,7 +4680,17 @@ L_08B1DF90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1DFBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4534,7 +4723,17 @@ L_08B1DFF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E008: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4561,7 +4760,17 @@ L_08B1E034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E048: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4584,7 +4793,6 @@ L_08B1E068: } L_08B1E074: aot_gpr_31 = (0x08B1E07Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E07Cu) goto L_08B1E07C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E07C: @@ -4601,7 +4809,6 @@ L_08B1E080: } L_08B1E08C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1E0A0; } @@ -4609,7 +4816,6 @@ L_08B1E08C: } L_08B1E094: aot_gpr_31 = (0x08B1E09Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E09Cu) goto L_08B1E09C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E09C: @@ -4622,7 +4828,6 @@ L_08B1E0A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1E0A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1E0CC; } @@ -4630,7 +4835,6 @@ L_08B1E0A8: } L_08B1E0B0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1E0C4; } @@ -4638,7 +4842,6 @@ L_08B1E0B0: } L_08B1E0B8: aot_gpr_31 = (0x08B1E0C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E0C0u) goto L_08B1E0C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E0C0: @@ -4658,7 +4861,17 @@ L_08B1E0CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E0E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4673,7 +4886,6 @@ L_08B1E0E0: L_08B1E100: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1E114; } @@ -4681,7 +4893,6 @@ L_08B1E100: } L_08B1E10C: aot_gpr_31 = (0x08B1E114u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E114u) goto L_08B1E114; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E114: @@ -4698,7 +4909,17 @@ L_08B1E114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E13C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4713,7 +4934,6 @@ L_08B1E13C: L_08B1E15C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1E170; } @@ -4721,7 +4941,6 @@ L_08B1E15C: } L_08B1E168: aot_gpr_31 = (0x08B1E170u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E170u) goto L_08B1E170; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E170: @@ -4739,7 +4958,17 @@ L_08B1E170: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E19C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(52), aot_gpr_16); @@ -4819,7 +5048,17 @@ L_08B1E274: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E294: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4842,7 +5081,6 @@ L_08B1E2BC: goto L_08B1E2C8; L_08B1E2C8: aot_gpr_31 = (0x08B1E2D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E2D0u) goto L_08B1E2D0; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E2D0: @@ -4870,7 +5108,17 @@ L_08B1E2EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E304: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5848))); @@ -4885,7 +5133,6 @@ L_08B1E304: } L_08B1E31C: aot_gpr_31 = (0x08B1E324u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E324u) goto L_08B1E324; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E324: @@ -4945,7 +5192,6 @@ L_08B1E384: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1E3A0; } @@ -4963,7 +5209,17 @@ L_08B1E3A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E3B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4996,7 +5252,17 @@ L_08B1E3D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E418: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -5012,7 +5278,17 @@ L_08B1E42C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E438: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5053,7 +5329,17 @@ L_08B1E484: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E4A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -5094,7 +5380,17 @@ L_08B1E4EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E508: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5136,7 +5432,17 @@ L_08B1E560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -5158,9 +5464,7 @@ L_08B1E5A4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1E618; } @@ -5170,7 +5474,6 @@ L_08B1E5BC: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(40))); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(40))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B1E618; } @@ -5180,7 +5483,6 @@ L_08B1E5CC: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(41))); ctx.gpr[7] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(41))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B1E618; } @@ -5219,7 +5521,6 @@ L_08B1E608: goto L_08B1E60C; L_08B1E60C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1E618; } @@ -5241,7 +5542,17 @@ L_08B1E618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E630: ctx.gpr[2] = (2226u << 16u); jump_target = aot_gpr_31; @@ -5249,12 +5560,21 @@ L_08B1E630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E63C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1E64Cu); - // nop goto L_08B1E630; L_08B1E64C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -5263,7 +5583,17 @@ L_08B1E64C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E658: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5292,7 +5622,6 @@ L_08B1E688: goto L_08B1E690; L_08B1E690: aot_gpr_31 = (0x08B1E698u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0165_entry, 165u, 295u, 0x08A9A6CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1E698u) goto L_08B1E698; AOT_REGCACHE_SYNC_OUT(); return; L_08B1E698: @@ -5314,7 +5643,6 @@ L_08B1E6B0: goto L_08B1E6B4; L_08B1E6B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1E6C0; } @@ -5337,7 +5665,17 @@ L_08B1E6C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E6DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5368,7 +5706,6 @@ L_08B1E70C: L_08B1E718: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1E72C; } @@ -5391,14 +5728,34 @@ L_08B1E72C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E740: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 12u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E748: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (0u | 0u); @@ -5435,7 +5792,17 @@ L_08B1E784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5465,7 +5832,17 @@ L_08B1E7C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E7CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -5505,7 +5882,17 @@ L_08B1E814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); @@ -5520,7 +5907,17 @@ L_08B1E838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E844: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5547,7 +5944,17 @@ L_08B1E86C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E884: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_15), std::bit_cast(aot_fpr_14), std::bit_cast(aot_fpr_13)}; @@ -5657,7 +6064,17 @@ L_08B1E970: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1E994: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5698,7 +6115,6 @@ L_08B1E9D4: L_08B1E9E0: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1E9F4; } @@ -5721,7 +6137,17 @@ L_08B1E9F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EA08: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), aot_gpr_6); @@ -5821,7 +6247,17 @@ L_08B1EAF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EB08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[18]); @@ -5859,7 +6295,6 @@ L_08B1EB60: L_08B1EB6C: aot_gpr_4 = (ctx.gpr[17] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1EB8C; } @@ -5875,7 +6310,6 @@ L_08B1EB78: L_08B1EB8C: aot_gpr_4 = (ctx.gpr[17] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1EC00; } @@ -5912,7 +6346,6 @@ L_08B1EB98: L_08B1EC00: aot_gpr_4 = (ctx.gpr[17] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1EC20; } @@ -5928,7 +6361,6 @@ L_08B1EC0C: L_08B1EC20: aot_gpr_4 = (ctx.gpr[17] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1EC40; } @@ -5944,7 +6376,6 @@ L_08B1EC2C: L_08B1EC40: aot_gpr_4 = (ctx.gpr[17] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1EC58; } @@ -5970,7 +6401,17 @@ L_08B1EC58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EC74: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_5); @@ -5999,7 +6440,17 @@ L_08B1ECAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1ECBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -6040,7 +6491,17 @@ L_08B1ECF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1ED14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -6075,7 +6536,17 @@ L_08B1ED48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1ED60: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -6116,7 +6587,17 @@ L_08B1ED9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EDB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -6151,7 +6632,17 @@ L_08B1EDEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EE04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -6192,7 +6683,17 @@ L_08B1EE40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EE5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -6228,7 +6729,17 @@ L_08B1EE90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EEAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -6269,7 +6780,17 @@ L_08B1EEE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EF04: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); @@ -6332,7 +6853,17 @@ L_08B1EF68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1EF7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18]}; @@ -6371,7 +6902,6 @@ L_08B1EFC8: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -6384,7 +6914,6 @@ L_08B1EFF4: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_14 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -6415,7 +6944,6 @@ L_08B1F030: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(36))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 0u); if (branch_taken) { @@ -6428,7 +6956,6 @@ L_08B1F04C: aot_gpr_5 = (aot_gpr_5 | 14269u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_4 & 255u); if (branch_taken) { @@ -6444,7 +6971,6 @@ L_08B1F06C: goto L_08B1F070; L_08B1F070: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1F084; } @@ -6459,7 +6985,6 @@ L_08B1F084: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(40))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(40))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1F0A0; } @@ -6474,7 +6999,6 @@ L_08B1F0A0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(41))); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(41))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1F0BC; } @@ -6520,7 +7044,6 @@ L_08B1F0EC: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F108; } @@ -6545,7 +7068,17 @@ L_08B1F108: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F124: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[17]); @@ -6575,7 +7108,6 @@ L_08B1F164: L_08B1F178: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1F190; } @@ -6584,7 +7116,6 @@ L_08B1F178: L_08B1F184: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(18))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F1B4; } @@ -6625,7 +7156,17 @@ L_08B1F1B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F1D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31, ctx.gpr[7]}; @@ -6657,7 +7198,6 @@ L_08B1F1D8: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_16 = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B1F270; } @@ -6673,7 +7213,6 @@ L_08B1F260: L_08B1F270: aot_gpr_4 = (ctx.gpr[18] & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F2A4; } @@ -6694,7 +7233,6 @@ L_08B1F27C: L_08B1F2A4: aot_gpr_4 = (ctx.gpr[18] & 4u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F370; } @@ -6753,7 +7291,6 @@ L_08B1F2B0: L_08B1F370: aot_gpr_4 = (ctx.gpr[18] & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F3A4; } @@ -6774,7 +7311,6 @@ L_08B1F37C: L_08B1F3A4: aot_gpr_4 = (ctx.gpr[18] & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F3D8; } @@ -6795,7 +7331,6 @@ L_08B1F3B0: L_08B1F3D8: aot_gpr_4 = (ctx.gpr[18] & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F3F0; } @@ -6820,7 +7355,17 @@ L_08B1F3F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F408: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -6835,7 +7380,6 @@ L_08B1F408: L_08B1F448: aot_gpr_4 = (0u | 9u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B1F468; } @@ -6846,7 +7390,6 @@ L_08B1F454: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(305))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B1F49C; } @@ -6861,7 +7404,6 @@ L_08B1F468: AOT_REGCACHE_SYNC_OUT(); return; L_08B1F478: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1F494; } @@ -6870,7 +7412,6 @@ L_08B1F478: L_08B1F480: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4203))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1F4A4; } @@ -6878,7 +7419,6 @@ L_08B1F480: } L_08B1F48C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1F4C0; } @@ -6886,7 +7426,6 @@ L_08B1F48C: } L_08B1F494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1F834; } @@ -6894,7 +7433,6 @@ L_08B1F494: } L_08B1F49C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1F834; } @@ -6908,9 +7446,7 @@ L_08B1F4A4: L_08B1F4AC: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1F4DC; } @@ -6937,7 +7473,6 @@ L_08B1F4D4: } L_08B1F4DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B1F834; } @@ -6993,7 +7528,6 @@ L_08B1F540: } L_08B1F548: aot_gpr_31 = (0x08B1F550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F550u) goto L_08B1F550; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F550: @@ -7010,7 +7544,6 @@ L_08B1F558: } L_08B1F560: aot_gpr_31 = (0x08B1F568u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F568u) goto L_08B1F568; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F568: @@ -7027,7 +7560,6 @@ L_08B1F56C: } L_08B1F578: aot_gpr_31 = (0x08B1F580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F580u) goto L_08B1F580; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F580: @@ -7078,7 +7610,6 @@ L_08B1F5E0: aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(9))); aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B1F668; } @@ -7094,7 +7625,6 @@ L_08B1F5F0: } L_08B1F5F8: aot_gpr_31 = (0x08B1F600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F600u) goto L_08B1F600; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F600: @@ -7111,7 +7641,6 @@ L_08B1F608: } L_08B1F610: aot_gpr_31 = (0x08B1F618u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F618u) goto L_08B1F618; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F618: @@ -7128,7 +7657,6 @@ L_08B1F61C: } L_08B1F628: aot_gpr_31 = (0x08B1F630u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F630u) goto L_08B1F630; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F630: @@ -7166,7 +7694,6 @@ L_08B1F668: } L_08B1F670: aot_gpr_31 = (0x08B1F678u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F678u) goto L_08B1F678; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F678: @@ -7183,7 +7710,6 @@ L_08B1F680: } L_08B1F688: aot_gpr_31 = (0x08B1F690u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F690u) goto L_08B1F690; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F690: @@ -7200,7 +7726,6 @@ L_08B1F694: } L_08B1F6A0: aot_gpr_31 = (0x08B1F6A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F6A8u) goto L_08B1F6A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F6A8: @@ -7225,7 +7750,6 @@ L_08B1F6D8: goto L_08B1F6DC; L_08B1F6DC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B1F834; } @@ -7279,7 +7803,6 @@ L_08B1F730: AOT_REGCACHE_SYNC_OUT(); return; L_08B1F73C: aot_gpr_31 = (0x08B1F744u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B0C05C, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], aot_gpr_16, ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0194_entry, 194u, 8u, 0x08B0C05Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F744u) goto L_08B1F744; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F744: @@ -7335,7 +7858,6 @@ L_08B1F7C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B1F7D8: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B1F7FC; } @@ -7392,21 +7914,49 @@ L_08B1F834: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F864: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F86C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F874: ctx.gpr[2] = (2226u << 16u); jump_target = aot_gpr_31; @@ -7414,12 +7964,21 @@ L_08B1F874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F880: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1F890u); - // nop goto L_08B1F874; L_08B1F890: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7428,7 +7987,17 @@ L_08B1F890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7457,7 +8026,6 @@ L_08B1F8CC: goto L_08B1F8D4; L_08B1F8D4: aot_gpr_31 = (0x08B1F8DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F8DCu) goto L_08B1F8DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F8DC: @@ -7479,7 +8047,6 @@ L_08B1F8F4: goto L_08B1F8F8; L_08B1F8F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F904; } @@ -7502,7 +8069,17 @@ L_08B1F904: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F920: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7517,7 +8094,6 @@ L_08B1F934: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(36), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1F954; } @@ -7525,7 +8101,6 @@ L_08B1F934: } L_08B1F94C: aot_gpr_31 = (0x08B1F954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F954u) goto L_08B1F954; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F954: @@ -7542,7 +8117,17 @@ L_08B1F95C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F970: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7568,7 +8153,6 @@ L_08B1F98C: L_08B1F9A4: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B1F9B8; } @@ -7591,27 +8175,54 @@ L_08B1F9B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F9CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F9D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1F9DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1F9F8; } @@ -7619,7 +8230,6 @@ L_08B1F9DC: } L_08B1F9F0: aot_gpr_31 = (0x08B1F9F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1F9F8u) goto L_08B1F9F8; AOT_REGCACHE_SYNC_OUT(); return; L_08B1F9F8: @@ -7634,13 +8244,22 @@ L_08B1FA00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FA0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1FA28; } @@ -7648,7 +8267,6 @@ L_08B1FA0C: } L_08B1FA20: aot_gpr_31 = (0x08B1FA28u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1FA28u) goto L_08B1FA28; AOT_REGCACHE_SYNC_OUT(); return; L_08B1FA28: @@ -7663,13 +8281,22 @@ L_08B1FA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FA3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5880))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1FA58; } @@ -7677,7 +8304,6 @@ L_08B1FA3C: } L_08B1FA50: aot_gpr_31 = (0x08B1FA58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 656u, 0x08B66B84u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1FA58u) goto L_08B1FA58; AOT_REGCACHE_SYNC_OUT(); return; L_08B1FA58: @@ -7692,31 +8318,57 @@ L_08B1FA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FA6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FA74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FA7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B1FA8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 605u, 0x08AC646Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B1FA8Cu) goto L_08B1FA8C; AOT_REGCACHE_SYNC_OUT(); return; L_08B1FA8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B1FA9C; } @@ -7740,7 +8392,17 @@ L_08B1FAA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FAAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -7765,7 +8427,6 @@ L_08B1FAD8: L_08B1FAE0: ctx.gpr[7] = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B1FAF0; } @@ -7792,7 +8453,6 @@ L_08B1FAF0: L_08B1FB20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(16)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B1FB34; } @@ -7817,7 +8477,17 @@ L_08B1FB38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FB48: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_31); @@ -7856,7 +8526,17 @@ L_08B1FB8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FB98: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[10]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -7971,7 +8651,6 @@ L_08B1FC70: AOT_REGCACHE_SYNC_OUT(); return; L_08B1FCC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B1FCD4; } @@ -7983,7 +8662,6 @@ L_08B1FCD0: L_08B1FCD4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B1FCE8; @@ -7993,7 +8671,6 @@ L_08B1FCE8: aot_gpr_4 = (49862u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16261u << 16u); if (branch_taken) { @@ -8005,9 +8682,7 @@ L_08B1FD00: aot_gpr_4 = (49992u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B1FD34; } @@ -8050,14 +8725,34 @@ L_08B1FD38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FD68: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10576), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FD70: ctx.gpr[7] = (aot_gpr_4 << 7u); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -8085,11 +8780,20 @@ L_08B1FD94: goto L_08B1FD9C; L_08B1FD9C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FDA4: aot_fpr_12 = std::bit_cast(0u); aot_gpr_4 = (2238u << 16u); @@ -8215,14 +8919,34 @@ L_08B1FDA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B1FFFC: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0199.cpp b/profiles/vcs/generated/generated_unit_0199.cpp index 2468f9e..a291aef 100644 --- a/profiles/vcs/generated/generated_unit_0199.cpp +++ b/profiles/vcs/generated/generated_unit_0199.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0199[4089] = { - 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 6, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 21, 0, - 0, 22, 0, 0, 0, 23, 0, 0, 24, 0, 25, 0, 0, 0, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 31, 0, 0, 32, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 41, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 44, 0, 45, 0, 0, 0, 0, - 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 56, 0, 57, 0, 0, 58, 0, 0, 0, - 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 65, 0, 0, - 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, 69, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 72, 0, 0, 0, 73, 0, 0, 74, - 0, 0, 0, 0, 75, 0, 76, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 81, 0, 82, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 96, 0, 0, 0, 97, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 102, 0, 103, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 106, 0, 0, 107, 0, 0, 0, 108, 0, 109, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 111, 0, 0, 0, 112, 0, 113, 0, 0, 0, 114, 0, 0, 115, 0, 0, 116, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 122, - 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, - 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, 0, 0, 0, - 0, 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 134, 0, 0, 135, 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 138, - 0, 139, 0, 140, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 0, 0, 0, 147, - 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 150, 0, 151, 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 155, 0, 156, 0, 0, 157, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 159, 0, 160, 0, 0, 161, 0, 162, 0, 163, 0, - 164, 0, 165, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 0, - 0, 0, 171, 0, 0, 172, 0, 0, 173, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 178, 0, 0, 179, 0, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 183, 0, 184, 0, 0, 0, 185, 0, 186, 0, 0, 0, 187, 0, - 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 191, - 0, 192, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 0, 0, 0, 195, 0, 196, 197, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 200, 0, 201, 202, 0, 203, 204, 0, 0, 0, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 0, 0, 207, 0, 208, 209, 0, - 210, 0, 0, 0, 0, 211, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, - 0, 218, 0, 0, 0, 0, 219, 0, 220, 0, 221, 0, 0, 222, 0, 0, 0, 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, 227, 0, 0, 0, 0, - 0, 228, 0, 0, 229, 0, 0, 230, 0, 0, 231, 0, 232, 0, 233, 0, 234, 0, 235, 0, 0, 0, 0, 0, 0, 236, 0, 0, 237, 0, 238, 0, - 239, 0, 0, 0, 0, 240, 241, 0, 242, 0, 243, 244, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 248, 0, 0, 0, 249, - 0, 250, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 0, 0, 0, 0, 0, 258, - 0, 0, 259, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, 264, 0, 0, 0, - 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 0, 0, 271, 0, 0, 0, 272, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 275, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 279, 0, 0, 0, 0, 0, 0, 0, 280, 281, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 285, - 0, 286, 0, 287, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, - 297, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 303, 0, 0, 0, - 0, 0, 0, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 308, 0, 0, 309, 0, 0, 0, 0, 310, 0, - 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 0, 0, 313, 0, 314, 0, 0, 0, 0, 315, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 318, 319, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 322, - 0, 0, 0, 323, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 326, 0, 327, 0, 328, 0, 329, 0, 330, 0, 331, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 332, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 340, 0, 341, 0, 342, 0, 343, 0, - 344, 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 348, 0, 349, 0, 350, 0, 351, 0, 352, 0, 0, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, - 0, 358, 0, 359, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 363, 0, 364, 0, 365, 0, 0, 366, 0, 0, 0, 0, - 367, 0, 368, 0, 0, 0, 369, 0, 370, 0, 371, 0, 0, 0, 0, 0, 372, 0, 373, 0, 0, 374, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, - 377, 0, 378, 0, 0, 0, 379, 0, 380, 0, 381, 0, 0, 0, 382, 0, 0, 383, 0, 384, 0, 385, 0, 386, 0, 0, 387, 0, 0, 0, 388, 0, - 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 396, 0, 0, 0, 397, 0, 0, 0, 398, 0, 0, 399, 0, 400, 0, 0, 0, 401, 0, - 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, - 407, 0, 408, 0, 0, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 413, - 0, 414, 0, 415, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 418, 0, 419, 0, 0, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 0, 422, 0, - 423, 0, 0, 424, 0, 425, 0, 426, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 429, 0, 0, 430, 0, 0, 431, 0, 0, 0, 0, - 0, 0, 432, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 437, 0, 438, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 441, - 0, 0, 0, 442, 0, 443, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, 448, 0, 0, 0, 449, 0, - 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 453, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 457, 0, 0, 0, 458, 0, 459, - 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 0, 0, 463, 0, 0, 464, 0, 0, 465, 0, 0, 466, 0, 467, 0, 0, 468, - 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 475, 0, - 0, 0, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, - 0, 0, 0, 481, 0, 0, 0, 482, 0, 483, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, - 0, 0, 0, 0, 489, 0, 0, 490, 0, 0, 491, 0, 0, 0, 0, 0, 492, 0, 0, 493, 0, 0, 494, 0, 0, 0, 495, 0, 496, 0, 0, 0, - 0, 497, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 500, 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, 0, 0, 0, 503, 0, 0, - 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 510, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 0, 0, 520, - 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 523, 0, 0, 524, 0, 0, 0, 0, 525, 0, 526, 0, 0, 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, - 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, - 0, 0, 0, 536, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 540, 0, 541, 0, 0, 542, 0, 543, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 547, 0, 548, - 0, 0, 0, 549, 0, 550, 0, 0, 551, 0, 552, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 555, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, - 0, 0, 558, 0, 559, 0, 560, 0, 561, 0, 0, 562, 0, 0, 0, 563, 0, 0, 0, 564, 0, 0, 565, 0, 566, 0, 0, 0, 0, 0, 0, 0, - 567, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 570, 0, 571, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 574, 0, 0, - 0, 0, 0, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 580, 0, 0, 581, 0, 0, 582, 0, - 0, 0, 0, 0, 0, 0, 583, 0, 0, 584, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 0, 587, 0, 588, 0, 589, 0, 590, 0, 0, 0, 591, - 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 594, 0, 595, 0, 0, 596, 0, 597, 0, 0, 598, 0, 599, 0, 0, 600, 0, 0, - 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 609, 0, 0, 0, 0, - 0, 610, 0, 611, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 614, 0, 615, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 618, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 626, 0, 627, 0, 628, 629, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, - 0, 0, 0, 635, 636, 637, 0, 0, 638, 0, 0, 639, 0, 640, 641, 0, 0, 642, 0, 0, 643, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 646, 0, 0, 0, 0, 647, 0, 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 649, 0, 650, 0, 651, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 656, 0, 657, 0, 658, 0, - 659, 0, 0, 660, 0, 0, 661, 0, 0, 662, 0, 0, 663, 0, 664, 0, 665, 0, 666, 0, 0, 667, 0, 0, 668, 0, 0, 669, 670, 0, 0, 671, - 0, 0, 672, 0, 673, 0, 0, 674, 0, 0, 675, 0, 0, 676, 677, 0, 0, 0, 678, 679, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 684, 0, 0, 685, 0, 0, 0, - 686, 0, 0, 0, 0, 687, 0, 0, 688, 0, 689, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, 0, 692, 0, 0, 0, 0, 0, 0, 693, 0, - 694, 0, 0, 0, 695, 0, 0, 0, 696, 0, 0, 697, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, - 0, 0, 702, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 0, 709, 0, 710, 0, 711, 0, 712, 0, 713, 0, 714, 715, 0, 716, 0, 717, - 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 724, 0, 725, 0, 0, 0, 726, 0, 0, 0, 727, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 730, 0, 731, 0, 0, 0, 732, 0, 0, - 733, 0, 0, 734, 0, 0, 0, 0, 735, 0, 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 738, 0, 739, 0, - 0, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, - 744, 0, 0, 0, 745, 0, 0, 746, 0, 0, 0, 0, 0, 747, 0, 0, 748, 0, 749, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 751, 0, 752, 0, 753, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 757, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 760, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 0, 0, 767, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0199[64] = { + 0x021000420094A803ull, 0x0282452244095508ull, 0x0A90540120062249ull, 0x1284014004282412ull, + 0x0000000000000006ull, 0x91408492280A0200ull, 0x0000004100801050ull, 0x00B1100042110128ull, + 0x00B640000288A808ull, 0x4041245100002289ull, 0x0008000281000A00ull, 0x0840000408000020ull, + 0x8422805A8492A210ull, 0x54A8000025449510ull, 0x0000452402810425ull, 0x0000000000909220ull, + 0xA002000145144000ull, 0x68240DA0881A0902ull, 0x0AA42542120A04A1ull, 0x89408D6152055492ull, + 0x8140401200000142ull, 0x0000092010481204ull, 0x8040000044440800ull, 0xA020860200240120ull, + 0x004090000001424Aull, 0x1204088302010000ull, 0x022148204240A050ull, 0x0AAA8048810B4000ull, + 0xAA8AAA45555548A0ull, 0x40A505450955008Aull, 0x0010280444AA4545ull, 0x0602040845222904ull, + 0x4141488A81000A85ull, 0x00000104092202A9ull, 0x45088228888A9004ull, 0x94922480A2251444ull, + 0x4408200100000820ull, 0x48204A88102040A0ull, 0x2060900A14490490ull, 0x0142400000410481ull, + 0x0000082090250481ull, 0x0800A40824842848ull, 0xA24094A000014048ull, 0x0148895481205528ull, + 0x492029202480AA01ull, 0x252950028AA05240ull, 0x0820100008021422ull, 0x402000000128408Aull, + 0x0000002004020000ull, 0x0100446A000A9000ull, 0x0052693808001000ull, 0x0000000000028480ull, + 0x5410040000200AA0ull, 0x004C649499255249ull, 0x4092052112002210ull, 0x0000000020002911ull, + 0x2000100000000000ull, 0x00080002AD555554ull, 0x0040004010000800ull, 0x229000000000A228ull, + 0x5000011050400509ull, 0x21028A8001052091ull, 0x0400400000452000ull, 0x0100800000200800ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0199[64] = { + 1u, 13u, 30u, 46u, 59u, 61u, 75u, 81u, 93u, 106u, 119u, 125u, 130u, 148u, 164u, 176u, + 182u, 192u, 210u, 228u, 250u, 259u, 268u, 275u, 286u, 295u, 304u, 317u, 332u, 358u, 377u, 393u, + 407u, 423u, 434u, 450u, 469u, 476u, 489u, 504u, 513u, 523u, 536u, 549u, 567u, 583u, 601u, 610u, + 619u, 622u, 633u, 645u, 649u, 659u, 681u, 694u, 700u, 702u, 720u, 724u, 733u, 744u, 758u, 764u, }; void recomp_unit_0199_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0199_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B20000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0199[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0199[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0199[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B20000; @@ -951,7 +858,6 @@ L_08B20004: ctx.gpr[17] = (ctx.gpr[17] + static_cast(12592)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); aot_gpr_31 = (0x08B2002Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2002Cu) goto L_08B2002C; AOT_REGCACHE_SYNC_OUT(); return; L_08B2002C: @@ -1035,7 +941,17 @@ L_08B200D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B200E4: ctx.gpr[11] = (2280u << 16u); ctx.gpr[11] = (ctx.gpr[11] + static_cast(20144)); @@ -1059,7 +975,6 @@ L_08B2010C: goto L_08B20120; L_08B20120: { const bool branch_taken = static_cast(ctx.gpr[12]) <= 0; - // nop if (branch_taken) { goto L_08B201C4; } @@ -1067,7 +982,6 @@ L_08B20120: } L_08B20128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20140; } @@ -1075,7 +989,6 @@ L_08B20128: } L_08B20130: { const bool branch_taken = ctx.gpr[12] != 0u; - // nop if (branch_taken) { goto L_08B201A8; } @@ -1083,7 +996,6 @@ L_08B20130: } L_08B20138: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B201C4; } @@ -1092,7 +1004,6 @@ L_08B20138: L_08B20140: ctx.gpr[12] = (ctx.gpr[3] & 128u); { const bool branch_taken = ctx.gpr[12] != 0u; - // nop if (branch_taken) { goto L_08B201A0; } @@ -1105,7 +1016,6 @@ L_08B2014C: aot_mem.aot_direct_store8(ctx.gpr[11] + static_cast(406), static_cast(ctx.gpr[12])); ctx.gpr[12] = (static_cast(ctx.gpr[3]) < 4 ? 1u : 0u); { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_08B20178; } @@ -1124,7 +1034,6 @@ L_08B20168: L_08B20178: ctx.gpr[3] = (static_cast(ctx.gpr[3]) < 9 ? 1u : 0u); { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08B20194; } @@ -1147,7 +1056,6 @@ L_08B20194: goto L_08B201A0; L_08B201A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B201C4; } @@ -1157,7 +1065,6 @@ L_08B201A8: ctx.gpr[12] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(396))); ctx.gpr[12] = (ctx.gpr[12] < ctx.gpr[9] ? 1u : 0u); { const bool branch_taken = ctx.gpr[12] == 0u; - // nop if (branch_taken) { goto L_08B201C4; } @@ -1182,11 +1089,20 @@ L_08B201C4: } L_08B201DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B201E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1225,7 +1141,6 @@ L_08B20234: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < 32 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B20584; } @@ -1245,7 +1160,6 @@ L_08B20248: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(406)))))); aot_gpr_4 = (aot_gpr_4 & 127u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B20574; } @@ -1254,7 +1168,6 @@ L_08B20248: L_08B20274: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(404)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B20574; } @@ -1278,7 +1191,6 @@ L_08B20280: } L_08B202A8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B20354; } @@ -1286,7 +1198,6 @@ L_08B202A8: } L_08B202B0: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B20310; } @@ -1320,7 +1231,6 @@ L_08B202DC: } L_08B202E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B20354; } @@ -1427,7 +1337,6 @@ L_08B203C8: aot_gpr_5 = (0u | 0u); aot_gpr_4 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B20524; } @@ -1444,7 +1353,6 @@ L_08B203DC: L_08B203E4: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(404)))))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B20408; } @@ -1455,7 +1363,6 @@ L_08B203F0: ctx.gpr[9] = (0u | 2u); ctx.gpr[8] = (ctx.gpr[8] & 127u); { const bool branch_taken = ctx.gpr[8] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B20408; } @@ -1535,7 +1442,6 @@ L_08B20408: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B203DC; } @@ -1554,7 +1460,6 @@ L_08B20524: AOT_REGCACHE_SYNC_OUT(); return; L_08B20544: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B20574; } @@ -1573,7 +1478,6 @@ L_08B2054C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2056C: aot_gpr_31 = (0x08B20574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0186_entry, 186u, 535u, 0x08AEE8D0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B20574u) goto L_08B20574; AOT_REGCACHE_SYNC_OUT(); return; L_08B20574: @@ -1616,7 +1520,17 @@ L_08B205A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B205BC: ctx.gpr[8] = (2280u << 16u); ctx.gpr[9] = (0u | 1u); @@ -1628,7 +1542,6 @@ L_08B205BC: goto L_08B205D8; L_08B205D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B20610; } @@ -1638,7 +1551,6 @@ L_08B205E0: ctx.gpr[12] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[10] + static_cast(406)))))); ctx.gpr[12] = (ctx.gpr[12] & 127u); { const bool branch_taken = ctx.gpr[12] != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B205FC; } @@ -1647,7 +1559,6 @@ L_08B205E0: L_08B205F0: ctx.gpr[12] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(384))); { const bool branch_taken = ctx.gpr[12] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B20610; } @@ -1666,7 +1577,6 @@ L_08B205FC: } L_08B20610: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2082C; } @@ -1678,7 +1588,6 @@ L_08B20618: aot_gpr_4 = (aot_gpr_4 ^ 3u); aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B2065C; } @@ -1710,7 +1619,6 @@ L_08B2065C: aot_gpr_4 = (ctx.gpr[2] - aot_gpr_6); aot_gpr_4 = (aot_gpr_4 < static_cast(101) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2080C; } @@ -1764,7 +1672,6 @@ L_08B20698: aot_fpr_15 = std::bit_cast(0u); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -1791,9 +1698,7 @@ L_08B20720: ctx.fpr[18] = ctx.fpr[18] + ctx.fpr[19]; ctx.fpr[18] = std::sqrt(ctx.fpr[18]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B20750; } @@ -1819,7 +1724,6 @@ L_08B20750: L_08B20764: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_15)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B20778; @@ -1855,7 +1759,6 @@ L_08B207C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[10] + static_cast(404)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B207D4; } @@ -1866,7 +1769,6 @@ L_08B207D0: goto L_08B207D4; L_08B207D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B208D4; } @@ -1909,7 +1811,6 @@ L_08B2080C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B208D4; } @@ -1921,7 +1822,6 @@ L_08B2082C: goto L_08B20834; L_08B20834: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B2085C; } @@ -1931,7 +1831,6 @@ L_08B2083C: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(406)))))); ctx.gpr[11] = (ctx.gpr[11] & 127u); { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08B2085C; } @@ -1949,7 +1848,6 @@ L_08B2084C: } L_08B2085C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B208D0; } @@ -1987,7 +1885,6 @@ L_08B20864: aot_mem.aot_direct_store32(ctx.gpr[8] + static_cast(388), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B208C4; } @@ -2007,7 +1904,6 @@ L_08B208C4: goto L_08B208C8; L_08B208C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B208D4; } @@ -2018,11 +1914,20 @@ L_08B208D0: goto L_08B208D4; L_08B208D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B208DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -2042,16 +1947,24 @@ L_08B20900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2090C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B2091Cu); - // nop goto L_08B209D8; L_08B2091C: aot_gpr_31 = (0x08B20924u); - // nop goto L_08B20A2C; L_08B20924: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(3648), ctx.gpr[2]); @@ -2061,7 +1974,17 @@ L_08B20924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20934: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3648))); aot_gpr_5 = (2u << 16u); @@ -2071,12 +1994,8 @@ L_08B20934: aot_gpr_5 = (0u + static_cast(2836)); aot_gpr_6 = (ctx.hi); ctx.gpr[7] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[2] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[7])) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); ctx.gpr[2] = (ctx.gpr[2] - aot_gpr_4); @@ -2095,16 +2014,24 @@ L_08B20980: goto L_08B20990; L_08B20990: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20998: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B209A8u); - // nop goto L_08B20934; L_08B209A8: aot_fpr_12 = std::bit_cast(ctx.gpr[2]); @@ -2130,7 +2057,17 @@ L_08B209C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B209D8: aot_gpr_5 = (2236u << 16u); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(12784), aot_gpr_4); @@ -2164,7 +2101,17 @@ L_08B20A24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20A2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3652))); @@ -2311,7 +2258,17 @@ L_08B20B88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20BD8: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -2320,7 +2277,17 @@ L_08B20BD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20BEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2342,7 +2309,17 @@ L_08B20C10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20C24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2355,7 +2332,6 @@ L_08B20C24: } L_08B20C34: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B20C44; } @@ -2363,7 +2339,6 @@ L_08B20C34: } L_08B20C3C: aot_gpr_31 = (0x08B20C44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B20C44u) goto L_08B20C44; AOT_REGCACHE_SYNC_OUT(); return; L_08B20C44: @@ -2373,7 +2348,17 @@ L_08B20C44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20C50: ctx.gpr[7] = (0u | 0u); aot_gpr_6 = (0u | 0u); @@ -2382,7 +2367,6 @@ L_08B20C50: L_08B20C5C: ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B20C84; } @@ -2401,7 +2385,6 @@ L_08B20C68: } L_08B20C7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20C8C; } @@ -2420,11 +2403,20 @@ L_08B20C8C: goto L_08B20C90; L_08B20C90: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20C98: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(68), aot_gpr_16); @@ -2439,7 +2431,6 @@ L_08B20C98: AOT_REGCACHE_SYNC_OUT(); return; L_08B20CBC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B20D20; } @@ -2449,7 +2440,6 @@ L_08B20CC4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B20D20; } @@ -2460,7 +2450,6 @@ L_08B20CD4: aot_gpr_5 = (32u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B20D20; } @@ -2471,7 +2460,6 @@ L_08B20CE8: aot_gpr_5 = (64u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B20D20; } @@ -2482,7 +2470,6 @@ L_08B20CFC: aot_gpr_5 = (512u << 16u); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B20D20; } @@ -2492,7 +2479,6 @@ L_08B20D10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B20D28; } @@ -2500,7 +2486,6 @@ L_08B20D10: } L_08B20D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20E28; } @@ -2513,7 +2498,6 @@ L_08B20D28: L_08B20D30: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B20D48; } @@ -2522,7 +2506,6 @@ L_08B20D30: L_08B20D3C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B20D60; } @@ -2540,7 +2523,6 @@ L_08B20D48: } L_08B20D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20D68; } @@ -2548,7 +2530,6 @@ L_08B20D58: } L_08B20D60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20E28; } @@ -2557,7 +2538,6 @@ L_08B20D60: L_08B20D68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1300))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B20DF8; } @@ -2601,7 +2581,6 @@ L_08B20D74: AOT_REGCACHE_SYNC_OUT(); return; L_08B20DCC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B20DF0; } @@ -2614,7 +2593,6 @@ L_08B20DD4: L_08B20DDC: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B20E00; } @@ -2622,7 +2600,6 @@ L_08B20DDC: } L_08B20DE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20E28; } @@ -2630,7 +2607,6 @@ L_08B20DE8: } L_08B20DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20E28; } @@ -2638,7 +2614,6 @@ L_08B20DF0: } L_08B20DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20E28; } @@ -2678,7 +2653,17 @@ L_08B20E28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20E40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -2691,7 +2676,6 @@ L_08B20E40: AOT_REGCACHE_SYNC_OUT(); return; L_08B20E5C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B20EA8; } @@ -2712,7 +2696,6 @@ L_08B20E64: L_08B20E88: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B20EA8; } @@ -2736,7 +2719,17 @@ L_08B20EA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B20EB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.fpr[5] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); @@ -2771,7 +2764,6 @@ L_08B20F14: L_08B20F24: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(0))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B21050; } @@ -2780,7 +2772,6 @@ L_08B20F24: L_08B20F30: ctx.gpr[12] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(2276))); { const bool branch_taken = ctx.gpr[12] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B21050; } @@ -2789,9 +2780,7 @@ L_08B20F30: L_08B20F3C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[6])) && aot_fpr_13 == ctx.fpr[6])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21050; } @@ -2859,9 +2848,7 @@ L_08B20F5C: ctx.fpr[11] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(8))); ctx.fpr[10] = ctx.fpr[10] - ctx.fpr[11]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[10] < ctx.fpr[21])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21050; } @@ -2869,9 +2856,7 @@ L_08B20F5C: } L_08B21038: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[7])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21050; } @@ -2909,7 +2894,6 @@ L_08B21068: goto L_08B21078; L_08B21078: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B20F14; } @@ -2955,7 +2939,17 @@ L_08B210F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B210FC: aot_gpr_6 = (0u | 0u); aot_gpr_5 = (0u | 0u); @@ -2967,7 +2961,6 @@ L_08B21104: ctx.gpr[7] = (aot_gpr_4 + ctx.gpr[7]); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B2112C; } @@ -2984,7 +2977,6 @@ L_08B2112C: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); ctx.gpr[7] = (static_cast(aot_gpr_5) < 20 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B21104; } @@ -2996,7 +2988,17 @@ L_08B21144: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2114C: aot_gpr_6 = (0u | 0u); goto L_08B21150; @@ -3007,7 +3009,6 @@ L_08B21150: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B2117C; } @@ -3017,7 +3018,6 @@ L_08B2116C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_5 = (aot_gpr_5 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B2119C; } @@ -3029,7 +3029,6 @@ L_08B2117C: aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_6) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B21150; } @@ -3048,11 +3047,20 @@ L_08B2119C: goto L_08B211A0; L_08B211A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B211A8: aot_gpr_6 = (0u | 0u); goto L_08B211AC; @@ -3063,7 +3071,6 @@ L_08B211AC: aot_gpr_5 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B211D4; } @@ -3072,7 +3079,6 @@ L_08B211AC: L_08B211C8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B211F4; } @@ -3084,7 +3090,6 @@ L_08B211D4: aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_6) < 20 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B211AC; } @@ -3103,11 +3108,20 @@ L_08B211F4: goto L_08B211F8; L_08B211F8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2280u << 16u); @@ -3127,7 +3141,17 @@ L_08B2121C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21228: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3700))); @@ -3156,7 +3180,6 @@ L_08B2124C: L_08B21264: aot_gpr_4 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2124C; } @@ -3174,7 +3197,17 @@ L_08B21270: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21284: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u | 2u); @@ -3188,7 +3221,6 @@ L_08B21284: } L_08B21298: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B212A8; } @@ -3196,7 +3228,6 @@ L_08B21298: } L_08B212A0: aot_gpr_31 = (0x08B212A8u); - // nop goto L_08B21228; L_08B212A8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -3205,7 +3236,17 @@ L_08B212A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B212B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); @@ -3232,7 +3273,6 @@ L_08B212D4: goto L_08B212DC; L_08B212DC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B212EC; } @@ -3258,7 +3298,17 @@ L_08B21304: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21310: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -3283,7 +3333,6 @@ L_08B21328: goto L_08B21330; L_08B21330: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B21340; } @@ -3295,11 +3344,20 @@ L_08B21338: goto L_08B21340; L_08B21340: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21348: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3307,7 +3365,6 @@ L_08B21348: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21378; } @@ -3316,7 +3373,6 @@ L_08B21348: L_08B21364: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B21380; } @@ -3324,7 +3380,6 @@ L_08B21364: } L_08B21370: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B213A8; } @@ -3343,7 +3398,6 @@ L_08B21380: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B21398; } @@ -3354,7 +3408,6 @@ L_08B21394: rt.unsupported(0x08B21394u, 0x0000000Du, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B21398: aot_gpr_31 = (0x08B213A0u); - // nop goto L_08B212B4; L_08B213A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); @@ -3371,7 +3424,17 @@ L_08B213AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B213BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3379,7 +3442,6 @@ L_08B213BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B213E0; } @@ -3387,12 +3449,10 @@ L_08B213BC: } L_08B213D8: aot_gpr_31 = (0x08B213E0u); - // nop goto L_08B212B4; L_08B213E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B213FC; } @@ -3419,14 +3479,34 @@ L_08B21404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21418: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3696))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21420: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -3495,7 +3575,6 @@ L_08B214B8: goto L_08B214D8; L_08B214D8: { const bool branch_taken = ctx.gpr[10] != aot_gpr_6; - // nop if (branch_taken) { goto L_08B214FC; } @@ -3517,7 +3596,6 @@ L_08B214E0: L_08B214FC: ctx.gpr[11] = (0u | 5u); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08B21570; } @@ -3539,7 +3617,6 @@ L_08B21508: L_08B21524: ctx.gpr[10] = (ctx.gpr[10] & 15u); { const bool branch_taken = ctx.gpr[10] != aot_gpr_6; - // nop if (branch_taken) { goto L_08B2154C; } @@ -3561,7 +3638,6 @@ L_08B21530: L_08B2154C: ctx.gpr[11] = (0u | 5u); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08B21570; } @@ -3661,7 +3737,6 @@ L_08B21658: ctx.gpr[2] = (ctx.gpr[2] + static_cast(1)); ctx.gpr[15] = (ctx.gpr[7] < ctx.gpr[2] ? 1u : 0u); { const bool branch_taken = ctx.gpr[15] == 0u; - // nop if (branch_taken) { goto L_08B215A0; } @@ -3712,7 +3787,6 @@ L_08B216D8: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_4); aot_gpr_4 = (aot_gpr_6 + static_cast(29552)); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B21714; } @@ -3733,7 +3807,17 @@ L_08B21714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21720: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -3808,7 +3892,17 @@ L_08B217BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B217D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3696))); @@ -3831,7 +3925,6 @@ L_08B217F4: } L_08B217FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21964; } @@ -3839,7 +3932,6 @@ L_08B217FC: } L_08B21804: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21984; } @@ -3848,7 +3940,6 @@ L_08B21804: L_08B2180C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21964; } @@ -3868,7 +3959,6 @@ L_08B21824: aot_gpr_4 = (aot_gpr_4 + static_cast(29232)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(301))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B218B0; } @@ -3998,7 +4088,17 @@ L_08B21984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2199C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1780)))))); ctx.gpr[2] = (aot_gpr_4 & 2u); @@ -4007,7 +4107,17 @@ L_08B2199C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B219AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4032,7 +4142,6 @@ L_08B219C8: L_08B219E4: aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21A3C; } @@ -4054,7 +4163,6 @@ L_08B219F0: } L_08B21A10: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B219F0; } @@ -4113,7 +4221,17 @@ L_08B21A64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21A78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4139,7 +4257,6 @@ L_08B21A94: L_08B21AAC: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21AC0; } @@ -4162,12 +4279,21 @@ L_08B21AC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21AD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1152))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B21B40; } @@ -4230,9 +4356,7 @@ L_08B21AE4: aot_gpr_4 = (16880u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21B40; } @@ -4255,7 +4379,17 @@ L_08B21B44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21B4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4271,7 +4405,6 @@ L_08B21B60: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B21BE4; } @@ -4281,7 +4414,6 @@ L_08B21B7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 58u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B21BDC; } @@ -4290,7 +4422,6 @@ L_08B21B7C: L_08B21B8C: aot_gpr_5 = (0u | 57u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B21BD4; } @@ -4321,7 +4452,6 @@ L_08B21BC4: goto L_08B21BCC; L_08B21BCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21C1C; } @@ -4329,7 +4459,6 @@ L_08B21BCC: } L_08B21BD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4337,7 +4466,6 @@ L_08B21BD4: } L_08B21BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4345,7 +4473,6 @@ L_08B21BDC: } L_08B21BE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4359,9 +4486,7 @@ L_08B21BEC: aot_fpr_12 = std::sqrt(aot_fpr_12); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21C1C; } @@ -4383,7 +4508,6 @@ L_08B21C1C: L_08B21C2C: aot_gpr_4 = (static_cast(aot_gpr_4) < 6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B21C88; } @@ -4391,7 +4515,6 @@ L_08B21C2C: } L_08B21C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21C80; } @@ -4399,7 +4522,6 @@ L_08B21C38: } L_08B21C40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21C88; } @@ -4412,7 +4534,6 @@ L_08B21C48: AOT_REGCACHE_SYNC_OUT(); return; L_08B21C50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21C70; } @@ -4430,7 +4551,6 @@ L_08B21C60: AOT_REGCACHE_SYNC_OUT(); return; L_08B21C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21C78; } @@ -4443,7 +4563,6 @@ L_08B21C70: AOT_REGCACHE_SYNC_OUT(); return; L_08B21C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21C88; } @@ -4465,7 +4584,6 @@ L_08B21C88: L_08B21C98: aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4473,7 +4591,6 @@ L_08B21C98: } L_08B21CA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21CBC; } @@ -4481,7 +4598,6 @@ L_08B21CA4: } L_08B21CAC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B21CEC; } @@ -4489,7 +4605,6 @@ L_08B21CAC: } L_08B21CB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4502,7 +4617,6 @@ L_08B21CBC: AOT_REGCACHE_SYNC_OUT(); return; L_08B21CC4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B21CDC; } @@ -4512,7 +4626,6 @@ L_08B21CCC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B21CE4; } @@ -4524,7 +4637,6 @@ L_08B21CDC: goto L_08B21D1C; L_08B21CE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4537,7 +4649,6 @@ L_08B21CEC: AOT_REGCACHE_SYNC_OUT(); return; L_08B21CF4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21D04; } @@ -4549,7 +4660,6 @@ L_08B21CFC: goto L_08B22C00; L_08B21D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21D0C; } @@ -4563,7 +4673,17 @@ L_08B21D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B21D1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4574,7 +4694,6 @@ L_08B21D1C: AOT_REGCACHE_SYNC_OUT(); return; L_08B21D40: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4587,7 +4706,6 @@ L_08B21D48: AOT_REGCACHE_SYNC_OUT(); return; L_08B21D50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4601,7 +4719,6 @@ L_08B21D58: L_08B21D60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4612,7 +4729,6 @@ L_08B21D6C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4632,7 +4748,6 @@ L_08B21D88: AOT_REGCACHE_SYNC_OUT(); return; L_08B21D98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4649,7 +4764,6 @@ L_08B21DA8: aot_gpr_4 = (aot_gpr_4 & 14u); aot_gpr_4 = (aot_gpr_4 >> 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4668,7 +4782,6 @@ L_08B21DC8: AOT_REGCACHE_SYNC_OUT(); return; L_08B21DD4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21E4C; } @@ -4686,7 +4799,6 @@ L_08B21DDC: AOT_REGCACHE_SYNC_OUT(); return; L_08B21DF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21E20; } @@ -4706,7 +4818,6 @@ L_08B21E08: AOT_REGCACHE_SYNC_OUT(); return; L_08B21E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B21E44; } @@ -4732,7 +4843,6 @@ L_08B21E38: AOT_REGCACHE_SYNC_OUT(); return; L_08B21E44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -4745,7 +4855,6 @@ L_08B21E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08B21E54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4754,7 +4863,6 @@ L_08B21E54: L_08B21E5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4764,7 +4872,6 @@ L_08B21E68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4774,7 +4881,6 @@ L_08B21E78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4804,7 +4910,6 @@ L_08B21E88: goto L_08B20EB8; L_08B21EAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B21F34; } @@ -4815,9 +4920,7 @@ L_08B21EB4: aot_gpr_4 = (16840u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21F34; } @@ -4843,9 +4946,7 @@ L_08B21ED0: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B21F34; } @@ -4868,7 +4969,6 @@ L_08B21F20: AOT_REGCACHE_SYNC_OUT(); return; L_08B21F2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4878,7 +4978,6 @@ L_08B21F34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != aot_gpr_16; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4888,7 +4987,6 @@ L_08B21F44: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4897,7 +4995,6 @@ L_08B21F44: L_08B21F54: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4905,13 +5002,11 @@ L_08B21F54: } L_08B21F60: aot_gpr_31 = (0x08B21F68u); - // nop goto L_08B20934; L_08B21F68: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -4962,7 +5057,6 @@ L_08B21FC4: aot_gpr_6 = (aot_gpr_6 + static_cast(2228)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B22008; } @@ -4977,7 +5071,6 @@ L_08B21FE8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(1152))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B22008; } @@ -4996,7 +5089,6 @@ L_08B22008: aot_gpr_5 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B21F8C; } @@ -5004,7 +5096,6 @@ L_08B22008: } L_08B2201C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -5028,7 +5119,6 @@ L_08B2202C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(532), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_gpr_5 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2207C; } @@ -5050,7 +5140,6 @@ L_08B2207C: AOT_REGCACHE_SYNC_OUT(); return; L_08B22084: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5060,7 +5149,6 @@ L_08B2208C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5085,7 +5173,6 @@ L_08B220AC: goto L_08B220B8; L_08B220B8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5097,14 +5184,22 @@ L_08B220C0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-32040))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B220D8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5133,7 +5228,6 @@ L_08B220F8: L_08B22100: aot_gpr_4 = (static_cast(aot_gpr_4) < 128 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5141,7 +5235,6 @@ L_08B22100: } L_08B2210C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22AB0; } @@ -5149,7 +5242,6 @@ L_08B2210C: } L_08B22114: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22B38; } @@ -5157,7 +5249,6 @@ L_08B22114: } L_08B2211C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5188,7 +5279,6 @@ L_08B22144: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2304), 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B22230; } @@ -5330,7 +5420,6 @@ L_08B22208: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22374; } @@ -5339,7 +5428,6 @@ L_08B22208: L_08B22230: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B22330; } @@ -5352,7 +5440,6 @@ L_08B2223C: AOT_REGCACHE_SYNC_OUT(); return; L_08B22244: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B22374; } @@ -5362,7 +5449,6 @@ L_08B2224C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22294; } @@ -5372,7 +5458,6 @@ L_08B2225C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22294; } @@ -5382,7 +5467,6 @@ L_08B2226C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(563))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22294; } @@ -5397,7 +5481,6 @@ L_08B2227C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2228C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22374; } @@ -5407,7 +5490,6 @@ L_08B22294: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B222E8; } @@ -5419,7 +5501,6 @@ L_08B222A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B222E8; } @@ -5429,7 +5510,6 @@ L_08B222BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B222E8; } @@ -5445,7 +5525,6 @@ L_08B222CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B222E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22374; } @@ -5455,7 +5534,6 @@ L_08B222E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22374; } @@ -5465,7 +5543,6 @@ L_08B222F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22374; } @@ -5475,7 +5552,6 @@ L_08B22308: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2196))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22374; } @@ -5490,7 +5566,6 @@ L_08B22318: AOT_REGCACHE_SYNC_OUT(); return; L_08B22328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22374; } @@ -5500,7 +5575,6 @@ L_08B22330: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22374; } @@ -5508,7 +5582,6 @@ L_08B22330: } L_08B22340: aot_gpr_31 = (0x08B22348u); - // nop goto L_08B20934; L_08B22348: aot_gpr_4 = (ctx.gpr[2] & 65535u); @@ -5536,7 +5609,6 @@ L_08B22364: AOT_REGCACHE_SYNC_OUT(); return; L_08B22374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5566,7 +5638,6 @@ L_08B2237C: L_08B2239C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B224B4; } @@ -5575,7 +5646,6 @@ L_08B2239C: L_08B223A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2296))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B223C4; } @@ -5585,7 +5655,6 @@ L_08B223B4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2228))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B224CC; } @@ -5613,7 +5682,6 @@ L_08B223DC: goto L_08B21AD4; L_08B223E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B223FC; } @@ -5735,7 +5803,6 @@ L_08B22480: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2296), ctx.gpr[17]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B224CC; } @@ -5754,9 +5821,7 @@ L_08B224CC: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B225A4; } @@ -5766,7 +5831,6 @@ L_08B224E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2288))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1712))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2251C; } @@ -5784,7 +5848,6 @@ L_08B224F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B22514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B225A4; } @@ -5795,9 +5858,7 @@ L_08B2251C: aot_gpr_4 = (16528u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B225A4; } @@ -5818,9 +5879,7 @@ L_08B22554: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2259C; } @@ -5831,9 +5890,7 @@ L_08B22570: aot_gpr_4 = (16528u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B225A4; } @@ -5843,7 +5900,6 @@ L_08B2258C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2296))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B225A4; } @@ -5855,7 +5911,6 @@ L_08B2259C: goto L_08B225A4; L_08B225A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -5864,7 +5919,6 @@ L_08B225A4: L_08B225AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B225EC; } @@ -5875,9 +5929,7 @@ L_08B225B8: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B225EC; } @@ -5889,7 +5941,6 @@ L_08B225D4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B225F8; } @@ -5950,7 +6001,6 @@ L_08B22658: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2296))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2268C; } @@ -6023,7 +6073,6 @@ L_08B226D8: L_08B226F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2271C; } @@ -6034,9 +6083,7 @@ L_08B22700: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B22728; } @@ -6162,7 +6209,6 @@ L_08B227E0: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B22800; @@ -6173,7 +6219,6 @@ L_08B22800: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2256))); goto L_08B22828; @@ -6198,7 +6243,6 @@ L_08B22828: goto L_08B22840; L_08B22840: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -6207,7 +6251,6 @@ L_08B22840: L_08B22848: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B22870; } @@ -6218,9 +6261,7 @@ L_08B22854: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2287C; } @@ -6345,7 +6386,6 @@ L_08B22934: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B22A9C; } @@ -6377,7 +6417,6 @@ L_08B22974: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22AA8; } @@ -6482,7 +6521,6 @@ L_08B22A40: AOT_REGCACHE_SYNC_OUT(); return; L_08B22A94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22AA8; } @@ -6496,7 +6534,6 @@ L_08B22A9C: AOT_REGCACHE_SYNC_OUT(); return; L_08B22AA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -6505,7 +6542,6 @@ L_08B22AA8: L_08B22AB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2288))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B22AD8; } @@ -6516,9 +6552,7 @@ L_08B22ABC: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B22AE4; } @@ -6537,7 +6571,6 @@ L_08B22AE4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2296))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22AFC; } @@ -6551,7 +6584,6 @@ L_08B22AFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2296))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22B14; } @@ -6568,7 +6600,6 @@ L_08B22B14: goto L_08B211A8; L_08B22B20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B22B30; } @@ -6580,7 +6611,6 @@ L_08B22B28: goto L_08B22B30; L_08B22B30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22BE0; } @@ -6599,7 +6629,6 @@ L_08B22B38: L_08B22B54: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2296))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B22B7C; } @@ -6617,7 +6646,6 @@ L_08B22B60: L_08B22B7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22BD8; } @@ -6630,7 +6658,6 @@ L_08B22B88: AOT_REGCACHE_SYNC_OUT(); return; L_08B22B90: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B22BD8; } @@ -6638,7 +6665,6 @@ L_08B22B90: } L_08B22B98: aot_gpr_31 = (0x08B22BA0u); - // nop goto L_08B20934; L_08B22BA0: aot_gpr_4 = (ctx.gpr[2] & 65535u); @@ -6689,7 +6715,17 @@ L_08B22BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B22C00: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -6715,7 +6751,6 @@ L_08B22C24: } L_08B22C2C: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B22CB4; } @@ -6723,7 +6758,6 @@ L_08B22C2C: } L_08B22C34: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22CAC; } @@ -6754,7 +6788,6 @@ L_08B22C3C: L_08B22C5C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B22CAC; } @@ -6801,7 +6834,6 @@ L_08B22CA0: goto L_08B22CAC; L_08B22CAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22E30; } @@ -6832,7 +6864,6 @@ L_08B22CB4: L_08B22CD4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B22D30; } @@ -6841,7 +6872,6 @@ L_08B22CD4: L_08B22CE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2300))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B22D30; } @@ -6884,7 +6914,6 @@ L_08B22D18: L_08B22D24: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2300), ctx.gpr[17]); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22D38; } @@ -6899,9 +6928,7 @@ L_08B22D38: aot_gpr_4 = (16544u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B22D64; } @@ -6918,7 +6945,6 @@ L_08B22D5C: goto L_08B22D64; L_08B22D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22CAC; } @@ -6928,7 +6954,6 @@ L_08B22D6C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2300))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B22D84; } @@ -6965,7 +6990,6 @@ L_08B22D84: AOT_REGCACHE_SYNC_OUT(); return; L_08B22DB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B22DC0; } @@ -6983,7 +7007,6 @@ L_08B22DC0: AOT_REGCACHE_SYNC_OUT(); return; L_08B22DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22CAC; } @@ -6997,7 +7020,6 @@ L_08B22DD4: AOT_REGCACHE_SYNC_OUT(); return; L_08B22DE0: aot_gpr_31 = (0x08B22DE8u); - // nop goto L_08B20934; L_08B22DE8: aot_gpr_4 = (ctx.gpr[2] & 65535u); @@ -7033,7 +7055,6 @@ L_08B22E14: AOT_REGCACHE_SYNC_OUT(); return; L_08B22E28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B22CAC; } @@ -7051,7 +7072,17 @@ L_08B22E30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B22E44: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -7105,11 +7136,20 @@ L_08B22E44: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B22E6C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -7151,11 +7191,20 @@ L_08B22E6C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B22EB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store16(ctx.gpr[28] + static_cast(10580), static_cast(0u)); @@ -7193,7 +7242,6 @@ L_08B22EEC: } L_08B22F04: { const bool branch_taken = ctx.gpr[11] != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B22F38; } @@ -7203,7 +7251,6 @@ L_08B22F0C: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(10580)))))); ctx.gpr[2] = (static_cast(ctx.gpr[11]) < 300 ? 1u : 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B22F38; } @@ -7231,7 +7278,6 @@ L_08B22F38: } L_08B22F4C: aot_gpr_31 = (0x08B22F54u); - // nop goto L_08B2331C; L_08B22F54: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -7240,7 +7286,17 @@ L_08B22F54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B22F60: aot_gpr_29 = (aot_gpr_29 + static_cast(-512)); { const std::uint32_t aot_run_words[15]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7280,7 +7336,6 @@ L_08B22FD4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(256), std::bit_cast(aot_fpr_12)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(260), std::bit_cast(aot_fpr_13)); aot_gpr_31 = (0x08B22FF8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B22FF8u) goto L_08B22FF8; AOT_REGCACHE_SYNC_OUT(); return; L_08B22FF8: @@ -7371,7 +7426,6 @@ L_08B23094: { const float fs = ctx.fpr[26]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] + ctx.gpr[22]); if (branch_taken) { @@ -7382,7 +7436,6 @@ L_08B23094: L_08B23130: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B23198; } @@ -7398,7 +7451,6 @@ L_08B2313C: } L_08B23144: aot_gpr_31 = (0x08B2314Cu); - // nop goto L_08B20934; L_08B2314C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7800))); @@ -7414,7 +7466,6 @@ L_08B2314C: aot_gpr_5 = (aot_gpr_5 & 100u); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B23198; } @@ -7427,7 +7478,6 @@ L_08B23184: AOT_REGCACHE_SYNC_OUT(); return; L_08B2318C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B23198; } @@ -7570,9 +7620,7 @@ L_08B23230: aot_gpr_4 = (aot_gpr_4 | 51200u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B23290; } @@ -7608,7 +7656,6 @@ L_08B2326C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08B2328Cu); - // nop goto L_08B23774; L_08B2328C: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(32), static_cast(0u)); @@ -7641,7 +7688,6 @@ L_08B232B4: L_08B232B8: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B232D8; } @@ -7650,7 +7696,6 @@ L_08B232B8: L_08B232C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B232D8; } @@ -7685,7 +7730,17 @@ L_08B232D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2331C: aot_gpr_4 = (2281u << 16u); aot_gpr_5 = (0u | 0u); @@ -7704,11 +7759,20 @@ L_08B23328: } L_08B2333C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B23344: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(292), ctx.gpr[20]); @@ -7766,7 +7830,6 @@ L_08B23414: } L_08B2341C: aot_gpr_31 = (0x08B23424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B23424u) goto L_08B23424; AOT_REGCACHE_SYNC_OUT(); return; L_08B23424: @@ -7876,7 +7939,6 @@ L_08B234F0: } L_08B234F8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B23530; } @@ -7924,12 +7986,10 @@ L_08B23530: goto L_08B23538; L_08B23538: aot_gpr_31 = (0x08B23540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B23540u) goto L_08B23540; AOT_REGCACHE_SYNC_OUT(); return; L_08B23540: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B23590; } @@ -7976,7 +8036,6 @@ L_08B2357C: AOT_REGCACHE_SYNC_OUT(); return; L_08B23588: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B235CC; } @@ -8082,7 +8141,6 @@ L_08B23634: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(1260), aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(2288), ctx.gpr[19]); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B23670; } @@ -8098,7 +8156,6 @@ L_08B23670: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(260))); ctx.gpr[17] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B23694; } @@ -8122,7 +8179,6 @@ L_08B23694: goto L_08B236A0; L_08B236A0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B236D0; } @@ -8181,7 +8237,6 @@ L_08B23710: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B23734; } @@ -8190,7 +8245,6 @@ L_08B23710: L_08B23720: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B23734; } @@ -8224,7 +8278,17 @@ L_08B23734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B23774: aot_gpr_29 = (aot_gpr_29 + static_cast(-736)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8457,7 +8521,6 @@ L_08B238B0: aot_gpr_4 = (16000u << 16u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (ctx.gpr[19] | 0u); if (branch_taken) { @@ -8485,7 +8548,6 @@ L_08B238F4: goto L_08B23908; L_08B23908: aot_gpr_31 = (0x08B23910u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B23910u) goto L_08B23910; AOT_REGCACHE_SYNC_OUT(); return; L_08B23910: @@ -8495,7 +8557,6 @@ L_08B23910: AOT_REGCACHE_SYNC_OUT(); return; L_08B23918: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B23928; } @@ -8511,7 +8572,6 @@ L_08B23920: } L_08B23928: aot_gpr_31 = (0x08B23930u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B23930u) goto L_08B23930; AOT_REGCACHE_SYNC_OUT(); return; L_08B23930: @@ -8521,7 +8581,6 @@ L_08B23930: AOT_REGCACHE_SYNC_OUT(); return; L_08B23938: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B23948; } @@ -8537,7 +8596,6 @@ L_08B23940: } L_08B23948: aot_gpr_31 = (0x08B23950u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B23950u) goto L_08B23950; AOT_REGCACHE_SYNC_OUT(); return; L_08B23950: @@ -8547,7 +8605,6 @@ L_08B23950: AOT_REGCACHE_SYNC_OUT(); return; L_08B23958: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B23968; } @@ -8698,7 +8755,6 @@ L_08B23AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B23B0C: aot_gpr_31 = (0x08B23B14u); - // nop goto L_08B20934; L_08B23B14: aot_gpr_4 = (ctx.gpr[2] & 65535u); @@ -8816,7 +8872,6 @@ L_08B23B3C: L_08B23BD0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(240)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B23BE4; } @@ -8824,7 +8879,6 @@ L_08B23BD0: } L_08B23BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B23BF4; } @@ -8937,7 +8991,6 @@ L_08B23CA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B23CF0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B23D1C; } @@ -8945,13 +8998,11 @@ L_08B23CF0: } L_08B23CF8: aot_gpr_31 = (0x08B23D00u); - // nop goto L_08B20934; L_08B23D00: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B23D1C; } @@ -8966,9 +9017,7 @@ L_08B23D1C: aot_gpr_4 = (aot_gpr_16 + static_cast(32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B23DBC; } @@ -9042,9 +9091,7 @@ L_08B23D60: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B23DA4; } @@ -9074,7 +9121,6 @@ L_08B23DAC: } L_08B23DBC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B23DE0; } @@ -9199,7 +9245,6 @@ L_08B23EE8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(196), std::bit_cast(ctx.fpr[24])); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(200), std::bit_cast(aot_fpr_12)); aot_gpr_31 = (0x08B23F2Cu); - // nop goto L_08B20934; L_08B23F2C: aot_gpr_4 = (ctx.gpr[2] & 65535u); diff --git a/profiles/vcs/generated/generated_unit_0200.cpp b/profiles/vcs/generated/generated_unit_0200.cpp index 1cfb50d..eace71c 100644 --- a/profiles/vcs/generated/generated_unit_0200.cpp +++ b/profiles/vcs/generated/generated_unit_0200.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0200[4087] = { - 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 8, 9, 0, 0, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 13, 0, 0, 14, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, - 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, - 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 44, - 0, 0, 45, 0, 0, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 0, 53, 0, 0, 0, - 0, 54, 0, 0, 55, 0, 0, 0, 56, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 61, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, - 0, 73, 0, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, 0, - 0, 78, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 83, 84, 0, 0, 85, 0, 0, 86, 0, 0, 87, - 0, 88, 89, 0, 0, 90, 0, 0, 91, 0, 0, 92, 0, 93, 94, 0, 95, 0, 96, 97, 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 0, 0, 105, 0, 0, 106, 0, 107, 0, 0, 108, 0, 109, 110, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 0, 0, 115, 0, 116, 0, 0, 0, 117, 0, 0, 118, 0, 119, 120, 0, 0, 121, 0, 122, - 0, 0, 123, 0, 124, 0, 125, 0, 0, 126, 0, 127, 128, 0, 129, 0, 130, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, - 0, 0, 0, 134, 0, 0, 135, 0, 0, 136, 0, 137, 138, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 142, 143, 0, 144, 0, 145, 146, 0, 147, - 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 152, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, 156, 0, 157, 0, 0, 158, 0, 159, - 0, 0, 160, 0, 161, 162, 0, 0, 0, 0, 0, 0, 163, 0, 0, 164, 0, 0, 165, 0, 0, 166, 0, 0, 0, 167, 0, 168, 0, 0, 0, 169, - 0, 0, 170, 0, 171, 172, 0, 0, 173, 0, 0, 0, 174, 175, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, - 178, 0, 0, 179, 0, 0, 0, 0, 180, 0, 181, 0, 182, 183, 0, 184, 0, 0, 0, 0, 185, 0, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, - 188, 0, 189, 190, 0, 0, 0, 0, 191, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 0, 0, 0, 0, 0, 0, - 197, 0, 198, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 202, 0, 0, 0, 203, 0, 0, 0, 0, 0, 204, - 0, 0, 205, 0, 0, 0, 0, 206, 0, 0, 207, 0, 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, - 0, 0, 211, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 215, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, - 0, 0, 0, 0, 218, 0, 219, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, - 227, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 233, 0, 0, - 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 236, 0, 0, 0, 237, 238, 0, 239, 0, 240, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, - 0, 243, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 249, - 0, 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, - 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 258, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, - 0, 0, 262, 0, 263, 0, 0, 0, 0, 0, 0, 264, 265, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 267, 0, 0, 268, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 271, 0, 0, 272, 0, 0, 273, 0, 0, 274, 0, 275, 276, 0, 277, 0, 0, 278, 0, 279, 280, 0, - 281, 0, 282, 0, 0, 283, 0, 284, 285, 0, 0, 0, 0, 286, 287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 290, 0, 291, 0, 0, 292, - 0, 0, 293, 0, 294, 0, 295, 0, 0, 296, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 0, 0, 299, 0, 300, 0, 0, 301, 0, 0, 302, 0, 0, 303, 0, 304, 305, 0, 306, 307, 0, 308, 0, 0, 0, 309, 0, 0, - 310, 0, 0, 311, 0, 0, 0, 0, 312, 0, 0, 313, 0, 314, 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 317, 0, 318, 319, 0, 0, 320, - 0, 0, 321, 0, 322, 323, 0, 0, 324, 0, 325, 0, 0, 326, 0, 0, 0, 327, 0, 0, 328, 0, 329, 330, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 332, 0, 333, 334, 0, 0, 335, 0, 0, 336, 0, 337, 338, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 345, 0, 0, 346, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, - 349, 0, 0, 0, 350, 0, 0, 0, 351, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 356, 0, 0, 0, - 357, 0, 0, 358, 0, 0, 0, 359, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 363, 0, 0, 0, 364, 0, 0, 365, 0, 0, - 0, 366, 0, 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 372, 0, 0, 0, 373, 0, 0, 374, - 0, 0, 0, 375, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 0, 0, 381, 0, 0, 382, 0, 0, - 0, 383, 0, 0, 0, 384, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 0, 387, 0, 0, 0, 388, 389, 0, 0, 390, 0, 391, 392, 0, 0, - 0, 0, 0, 0, 393, 0, 0, 0, 394, 0, 395, 396, 0, 0, 397, 398, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 402, 0, 403, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 407, 0, 0, 0, 408, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, - 0, 0, 413, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 417, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, - 420, 0, 0, 421, 0, 0, 0, 0, 422, 0, 423, 0, 424, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 427, 428, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 435, 0, 0, 436, 0, 437, 0, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 444, 445, 0, 0, 0, 0, - 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, - 450, 451, 0, 0, 452, 0, 0, 453, 0, 0, 454, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 459, 0, 460, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 464, 0, 465, - 466, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, - 0, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 483, 0, 0, 484, 0, 0, 0, 0, 0, - 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, 495, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, - 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 0, 504, 0, 0, 0, 505, 0, 0, 0, - 506, 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, - 0, 0, 510, 0, 0, 511, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, - 0, 0, 514, 0, 0, 0, 0, 515, 0, 0, 0, 516, 0, 0, 517, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 519, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, - 0, 523, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 526, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 527, 0, 0, 0, 0, 528, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 531, - 0, 532, 0, 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, 0, 534, 0, 535, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 0, - 541, 0, 0, 0, 0, 0, 542, 0, 0, 0, 543, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 549, 0, 550, 0, 551, 0, 552, 0, 553, 0, - 0, 554, 0, 0, 0, 0, 0, 0, 555, 556, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, - 0, 559, 0, 0, 560, 0, 561, 0, 562, 563, 0, 564, 0, 0, 0, 0, 565, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, - 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 573, 0, 0, 574, 575, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 580, 0, 581, 0, 582, 0, 583, 0, 0, 0, - 0, 0, 584, 585, 0, 0, 586, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, 589, 0, 590, 0, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 0, - 0, 0, 0, 0, 0, 594, 0, 0, 595, 0, 0, 0, 0, 0, 596, 597, 0, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 599, 0, 0, 600, 0, 0, 601, 0, 602, 0, 0, 603, 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 606, 0, 607, 0, 0, 0, - 0, 0, 0, 0, 608, 0, 0, 0, 609, 0, 610, 0, 611, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 613, 0, 614, 615, 0, 0, 0, 616, - 0, 617, 0, 0, 0, 0, 0, 0, 0, 618, 0, 0, 619, 0, 0, 0, 0, 0, 620, 621, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 623, - 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 627, 0, 0, 628, 0, 629, - 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 633, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, - 0, 0, 0, 636, 0, 637, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 640, 0, 641, 642, 0, 0, 0, 643, 0, 644, - 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 646, 0, 0, 0, 0, 0, 647, 648, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 650, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 654, 0, - 0, 655, 0, 656, 0, 657, 658, 0, 0, 659, 0, 0, 0, 660, 0, 0, 661, 0, 0, 662, 0, 0, 663, 0, 664, 0, 0, 0, 665, 0, 0, 666, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 670, 0, 671, 0, 672, 0, 0, 673, 0, 0, 674, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 677, 0, 678, 679, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 682, 0, 0, 683, 0, 0, 0, 684, 0, 0, 685, 0, 686, 0, 687, 688, 0, 689, 0, 690, 0, 691, 692, 0, 0, 0, 0, 0, 0, - 693, 0, 694, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, 0, 0, 697, 698, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 701, 0, 0, 702, 0, 703, 0, 704, 705, 0, 706, 0, 0, 0, 707, 0, 708, 709, 0, 0, 0, - 0, 0, 0, 710, 0, 711, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, 0, 0, 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 718, 0, 0, 719, 0, 720, 0, 0, 721, 0, 722, 723, 0, 0, 0, 0, 0, 0, 724, 0, 725, - 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 727, 0, 0, 0, 0, 0, 728, 729, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 731, 0, 0, 732, 0, 0, 0, 733, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 736, 0, 0, - 737, 0, 738, 0, 739, 0, 740, 0, 0, 0, 0, 741, 0, 742, 743, 0, 744, 0, 0, 0, 0, 0, 745, 0, 0, 746, 0, 0, 0, 747, 0, 748, - 0, 749, 0, 0, 0, 750, 0, 0, 0, 751, 0, 752, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 754, 0, 0, 0, 0, 0, 755, 756, 0, 0, - 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 762, 0, 0, 0, 0, 0, 763, 0, 0, 764, 0, 765, 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, - 769, 0, 0, 770, 0, 0, 0, 0, 0, 771, 0, 0, 772, 0, 0, 773, 0, 0, 0, 774, 0, 775, 0, 776, 777, 0, 0, 0, 0, 0, 0, 778, - 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 782, 783, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 786, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 789, 790, - 0, 791, 0, 0, 0, 0, 0, 792, 0, 0, 0, 793, 0, 794, 0, 795, 796, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 0, 0, 799, 0, 800, - 0, 801, 802, 803, 0, 0, 0, 804, 805, 0, 0, 0, 806, 807, 0, 0, 0, 0, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 809, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 811, 0, 0, 812, 0, 813, 0, 814, 815, 0, 816, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0200[64] = { + 0x0984920000000111ull, 0x0000001000052610ull, 0x0002000800008000ull, 0x1000400010008000ull, + 0x0010000828008002ull, 0x8080800224004002ull, 0x12889144A4008404ull, 0x0000548090112112ull, + 0x2022001400000140ull, 0x926880A240400212ull, 0x00080100202D6926ull, 0xA691449206948901ull, + 0xB5A49A48080B5A54ull, 0xA549048020040080ull, 0x021031348A249034ull, 0x0150150D00D0B509ull, + 0x041014848224040Dull, 0x042A855008248224ull, 0x086B109021208901ull, 0xA001224084811202ull, + 0x0904181482240820ull, 0x950861A569692501ull, 0x22DA494400001254ull, 0x40D225349A206909ull, + 0x11121210800A6934ull, 0x2444888911111111ull, 0x2444448891111222ull, 0x0010CD1034C42122ull, + 0x4440820002808004ull, 0x8000102000000800ull, 0x2000908008000014ull, 0x081008C002011509ull, + 0x0040514800091000ull, 0x400004030C800140ull, 0xA44020002A092493ull, 0x0044208840000121ull, + 0x0491090000044408ull, 0x0280000200440001ull, 0xA000000400220000ull, 0x4002420000000000ull, + 0x200000A111281040ull, 0x1008488480000224ull, 0x0140000A88002000ull, 0x8080048400000000ull, + 0x0904040001014082ull, 0x5552400800001441ull, 0x20090B5240008302ull, 0x0406420401200040ull, + 0x288A904C15490010ull, 0x14284A480040C120ull, 0x804C12028D101510ull, 0x80140A04A4800404ull, + 0x00130480A34400A8ull, 0x9149226A48001012ull, 0x002A4A8001420000ull, 0x0356A448004010D0ull, + 0x1A2D490010182405ull, 0xA069490040C12028ull, 0x2400411200830480ull, 0x30480A22A2416855ull, + 0x48A9048008024010ull, 0x1030108281A89209ull, 0xA209A882D0092000ull, 0x005A92008008318Eull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0200[64] = { + 1u, 11u, 18u, 21u, 25u, 31u, 39u, 54u, 66u, 73u, 88u, 102u, 123u, 148u, 160u, 178u, + 197u, 211u, 227u, 243u, 256u, 269u, 293u, 310u, 332u, 349u, 366u, 383u, 400u, 409u, 413u, 420u, + 432u, 441u, 450u, 466u, 475u, 485u, 491u, 496u, 500u, 510u, 520u, 527u, 532u, 541u, 554u, 568u, + 577u, 594u, 608u, 624u, 636u, 650u, 667u, 677u, 693u, 710u, 726u, 737u, 757u, 769u, 785u, 801u, }; void recomp_unit_0200_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0200_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B24000u; - entry_id = (entry_delta < 16348u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0200[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16348u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0200[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0200[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B24000; @@ -1054,7 +961,6 @@ L_08B24020: L_08B240A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(240)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B24110; } @@ -1069,7 +975,6 @@ L_08B240B0: L_08B240BC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B240E0; } @@ -1121,7 +1026,6 @@ L_08B24124: L_08B24128: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B24148; } @@ -1130,7 +1034,6 @@ L_08B24128: L_08B24134: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(224))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B24148; } @@ -1166,7 +1069,17 @@ L_08B24148: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24190: aot_gpr_29 = (aot_gpr_29 + static_cast(-544)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16928))); @@ -1532,7 +1445,6 @@ L_08B2443C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2446C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B24504; } @@ -1663,7 +1575,17 @@ L_08B24504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24538: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1726,7 +1648,17 @@ L_08B245BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B245DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1741,7 +1673,6 @@ L_08B245DC: L_08B245FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B24628; } @@ -1773,7 +1704,17 @@ L_08B24628: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2463C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -1794,7 +1735,6 @@ L_08B2463C: L_08B24668: aot_gpr_5 = (static_cast(aot_gpr_5) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B246A0; } @@ -1811,7 +1751,6 @@ L_08B24674: L_08B2467C: ctx.gpr[7] = (0u | 7u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B24674; } @@ -1826,7 +1765,6 @@ L_08B24688: AOT_REGCACHE_SYNC_OUT(); return; L_08B24698: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B246B0; } @@ -1846,7 +1784,17 @@ L_08B246B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B246BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1869,7 +1817,6 @@ L_08B246CC: } L_08B246DC: aot_gpr_31 = (0x08B246E4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B246E4u) goto L_08B246E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B246E4: @@ -1879,7 +1826,17 @@ L_08B246E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B246F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1902,7 +1859,17 @@ L_08B24710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24720: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1925,7 +1892,17 @@ L_08B24740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24750: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -1946,7 +1923,17 @@ L_08B24770: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2477C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -1967,21 +1954,50 @@ L_08B2479C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B247A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B247B0: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 2u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B247B8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4)))))); aot_gpr_6 = (0u + static_cast(-3)); @@ -2010,14 +2026,34 @@ L_08B247B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24818: jump_target = aot_gpr_31; ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(3960))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24820: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_16); @@ -2049,7 +2085,6 @@ L_08B24820: AOT_REGCACHE_SYNC_OUT(); return; L_08B24888: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B248C4; } @@ -2089,7 +2124,17 @@ L_08B248C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B248D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2126,7 +2171,17 @@ L_08B24910: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24924: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -2168,7 +2223,6 @@ L_08B24984: } L_08B24994: aot_gpr_31 = (0x08B2499Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2499Cu) goto L_08B2499C; AOT_REGCACHE_SYNC_OUT(); return; L_08B2499C: @@ -2203,7 +2257,6 @@ L_08B249BC: goto L_08B249CC; L_08B249CC: aot_gpr_31 = (0x08B249D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B249D4u) goto L_08B249D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B249D4: @@ -2259,7 +2312,6 @@ L_08B24A20: goto L_08B24A2C; L_08B24A2C: aot_gpr_31 = (0x08B24A34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24A34u) goto L_08B24A34; AOT_REGCACHE_SYNC_OUT(); return; L_08B24A34: @@ -2273,7 +2325,6 @@ L_08B24A38: goto L_08B24A40; L_08B24A40: aot_gpr_31 = (0x08B24A48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24A48u) goto L_08B24A48; AOT_REGCACHE_SYNC_OUT(); return; L_08B24A48: @@ -2326,7 +2377,17 @@ L_08B24AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24ACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -2385,7 +2446,6 @@ L_08B24B50: goto L_08B24B5C; L_08B24B5C: aot_gpr_31 = (0x08B24B64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24B64u) goto L_08B24B64; AOT_REGCACHE_SYNC_OUT(); return; L_08B24B64: @@ -2421,7 +2481,6 @@ L_08B24B84: L_08B24B90: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B24BF4; } @@ -2445,7 +2504,6 @@ L_08B24BA8: } L_08B24BB8: aot_gpr_31 = (0x08B24BC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24BC0u) goto L_08B24BC0; AOT_REGCACHE_SYNC_OUT(); return; L_08B24BC0: @@ -2464,7 +2522,6 @@ L_08B24BD0: goto L_08B24BDC; L_08B24BDC: aot_gpr_31 = (0x08B24BE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24BE4u) goto L_08B24BE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B24BE4: @@ -2497,7 +2554,6 @@ L_08B24C08: AOT_REGCACHE_SYNC_OUT(); return; L_08B24C10: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B24C8C; } @@ -2512,7 +2568,6 @@ L_08B24C18: goto L_08B24C24; L_08B24C24: aot_gpr_31 = (0x08B24C2Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24C2Cu) goto L_08B24C2C; AOT_REGCACHE_SYNC_OUT(); return; L_08B24C2C: @@ -2526,7 +2581,6 @@ L_08B24C30: goto L_08B24C38; L_08B24C38: aot_gpr_31 = (0x08B24C40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24C40u) goto L_08B24C40; AOT_REGCACHE_SYNC_OUT(); return; L_08B24C40: @@ -2602,7 +2656,6 @@ L_08B24CC8: goto L_08B24CD4; L_08B24CD4: aot_gpr_31 = (0x08B24CDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24CDCu) goto L_08B24CDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B24CDC: @@ -2616,7 +2669,6 @@ L_08B24CE0: goto L_08B24CE8; L_08B24CE8: aot_gpr_31 = (0x08B24CF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24CF0u) goto L_08B24CF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B24CF0: @@ -2669,7 +2721,17 @@ L_08B24D48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_16); @@ -2686,7 +2748,6 @@ L_08B24D74: L_08B24D9C: aot_gpr_4 = (0u | 5u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B24DE0; } @@ -2710,7 +2771,6 @@ L_08B24DC0: L_08B24DCC: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B24DE8; } @@ -2718,7 +2778,6 @@ L_08B24DCC: } L_08B24DD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B24DFC; } @@ -2751,7 +2810,6 @@ L_08B24DFC: goto L_08B24E08; L_08B24E08: aot_gpr_31 = (0x08B24E10u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24E10u) goto L_08B24E10; AOT_REGCACHE_SYNC_OUT(); return; L_08B24E10: @@ -2787,7 +2845,6 @@ L_08B24E30: L_08B24E3C: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B24EA0; } @@ -2811,7 +2868,6 @@ L_08B24E54: } L_08B24E64: aot_gpr_31 = (0x08B24E6Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24E6Cu) goto L_08B24E6C; AOT_REGCACHE_SYNC_OUT(); return; L_08B24E6C: @@ -2830,7 +2886,6 @@ L_08B24E7C: goto L_08B24E88; L_08B24E88: aot_gpr_31 = (0x08B24E90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24E90u) goto L_08B24E90; AOT_REGCACHE_SYNC_OUT(); return; L_08B24E90: @@ -2866,7 +2921,17 @@ L_08B24EB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B24ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2880,7 +2945,6 @@ L_08B24EE4: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); if (branch_taken) { @@ -2906,7 +2970,6 @@ L_08B24F0C: goto L_08B24F20; L_08B24F20: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B24F34; } @@ -2914,7 +2977,6 @@ L_08B24F20: } L_08B24F28: aot_gpr_31 = (0x08B24F30u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24F30u) goto L_08B24F30; AOT_REGCACHE_SYNC_OUT(); return; L_08B24F30: @@ -2938,7 +3000,6 @@ L_08B24F3C: } L_08B24F50: aot_gpr_31 = (0x08B24F58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24F58u) goto L_08B24F58; AOT_REGCACHE_SYNC_OUT(); return; L_08B24F58: @@ -2953,7 +3014,6 @@ L_08B24F5C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B24F8C; } @@ -2961,7 +3021,6 @@ L_08B24F5C: } L_08B24F80: aot_gpr_31 = (0x08B24F88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24F88u) goto L_08B24F88; AOT_REGCACHE_SYNC_OUT(); return; L_08B24F88: @@ -2980,7 +3039,6 @@ L_08B24F8C: } L_08B24FA0: aot_gpr_31 = (0x08B24FA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24FA8u) goto L_08B24FA8; AOT_REGCACHE_SYNC_OUT(); return; L_08B24FA8: @@ -3003,7 +3061,6 @@ L_08B24FB0: } L_08B24FD0: aot_gpr_31 = (0x08B24FD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B24FD8u) goto L_08B24FD8; AOT_REGCACHE_SYNC_OUT(); return; L_08B24FD8: @@ -3018,7 +3075,6 @@ L_08B24FE0: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_5)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2500C; } @@ -3026,7 +3082,6 @@ L_08B24FE0: } L_08B25000: aot_gpr_31 = (0x08B25008u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25008u) goto L_08B25008; AOT_REGCACHE_SYNC_OUT(); return; L_08B25008: @@ -3043,7 +3098,17 @@ L_08B2500C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25028: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -3058,7 +3123,6 @@ L_08B25028: L_08B25048: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B250D0; } @@ -3068,7 +3132,6 @@ L_08B25054: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B250D0; } @@ -3086,7 +3149,6 @@ L_08B25064: L_08B2507C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B250D0; } @@ -3111,7 +3173,6 @@ L_08B2509C: } L_08B250A8: aot_gpr_31 = (0x08B250B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B250B0u) goto L_08B250B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B250B0: @@ -3148,7 +3209,17 @@ L_08B250D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B250E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3163,7 +3234,6 @@ L_08B250E8: L_08B25108: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B251E8; } @@ -3173,7 +3243,6 @@ L_08B25114: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B251E8; } @@ -3191,7 +3260,6 @@ L_08B25124: L_08B2513C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B251E8; } @@ -3237,7 +3305,6 @@ L_08B25190: } L_08B25198: aot_gpr_31 = (0x08B251A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B251A0u) goto L_08B251A0; AOT_REGCACHE_SYNC_OUT(); return; L_08B251A0: @@ -3265,7 +3332,6 @@ L_08B251BC: } L_08B251C4: aot_gpr_31 = (0x08B251CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B251CCu) goto L_08B251CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B251CC: @@ -3292,7 +3358,17 @@ L_08B251E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25200: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3307,7 +3383,6 @@ L_08B25200: L_08B25220: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B252EC; } @@ -3317,7 +3392,6 @@ L_08B2522C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B252EC; } @@ -3335,7 +3409,6 @@ L_08B2523C: L_08B25254: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B252EC; } @@ -3354,7 +3427,6 @@ L_08B25274: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); if (branch_taken) { @@ -3382,7 +3454,6 @@ L_08B252B0: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_6 = (ctx.gpr[17] < static_cast(17) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B252C4; } @@ -3393,7 +3464,6 @@ L_08B252C0: goto L_08B252C4; L_08B252C4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B252D8; } @@ -3401,7 +3471,6 @@ L_08B252C4: } L_08B252CC: aot_gpr_31 = (0x08B252D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B252D4u) goto L_08B252D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B252D4: @@ -3427,7 +3496,17 @@ L_08B252EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25304: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3442,7 +3521,6 @@ L_08B25304: L_08B25324: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B25414; } @@ -3452,7 +3530,6 @@ L_08B25330: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25414; } @@ -3471,7 +3548,6 @@ L_08B25340: L_08B2535C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B25414; } @@ -3490,7 +3566,6 @@ L_08B2537C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_08B253A4; @@ -3530,7 +3605,6 @@ L_08B253C0: aot_gpr_16 = (aot_gpr_4 + aot_gpr_16); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B253FC; } @@ -3538,7 +3612,6 @@ L_08B253C0: } L_08B253F4: aot_gpr_31 = (0x08B253FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B253FCu) goto L_08B253FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B253FC: @@ -3562,7 +3635,17 @@ L_08B25414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2542C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (ctx.gpr[28] + static_cast(4096)); @@ -3575,7 +3658,6 @@ L_08B2542C: L_08B25448: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B254B0; } @@ -3585,7 +3667,6 @@ L_08B25454: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_16 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B254B0; } @@ -3603,7 +3684,6 @@ L_08B25464: L_08B2547C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B254AC; } @@ -3611,7 +3691,6 @@ L_08B2547C: } L_08B25488: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B254AC; } @@ -3645,7 +3724,17 @@ L_08B254B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B254C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3670,7 +3759,17 @@ L_08B254EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25500: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3684,7 +3783,6 @@ L_08B25500: AOT_REGCACHE_SYNC_OUT(); return; L_08B25520: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B25588; } @@ -3699,7 +3797,6 @@ L_08B25528: L_08B25534: aot_gpr_4 = (0u < ctx.gpr[2] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B25560; } @@ -3714,7 +3811,6 @@ L_08B25540: goto L_08B2554C; L_08B2554C: aot_gpr_31 = (0x08B25554u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25554u) goto L_08B25554; AOT_REGCACHE_SYNC_OUT(); return; L_08B25554: @@ -3737,7 +3833,6 @@ L_08B25560: goto L_08B2556C; L_08B2556C: aot_gpr_31 = (0x08B25574u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25574u) goto L_08B25574; AOT_REGCACHE_SYNC_OUT(); return; L_08B25574: @@ -3764,7 +3859,6 @@ L_08B25588: goto L_08B25594; L_08B25594: aot_gpr_31 = (0x08B2559Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2559Cu) goto L_08B2559C; AOT_REGCACHE_SYNC_OUT(); return; L_08B2559C: @@ -3793,7 +3887,17 @@ L_08B255B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B255CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5892))); @@ -3807,7 +3911,6 @@ L_08B255CC: } L_08B255E0: aot_gpr_31 = (0x08B255E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B255E8u) goto L_08B255E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B255E8: @@ -3831,7 +3934,6 @@ L_08B255FC: } L_08B25608: aot_gpr_31 = (0x08B25610u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25610u) goto L_08B25610; AOT_REGCACHE_SYNC_OUT(); return; L_08B25610: @@ -3851,7 +3953,17 @@ L_08B25624: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25630: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_6 = (2246u << 16u); @@ -3911,7 +4023,6 @@ L_08B256B8: goto L_08B256C4; L_08B256C4: aot_gpr_31 = (0x08B256CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B256CCu) goto L_08B256CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B256CC: @@ -3927,7 +4038,6 @@ L_08B256D8: goto L_08B256DC; L_08B256DC: aot_gpr_31 = (0x08B256E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B256E4u) goto L_08B256E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B256E4: @@ -3943,7 +4053,6 @@ L_08B256E4: L_08B256F4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B25BBC; } @@ -3952,7 +4061,6 @@ L_08B256F4: L_08B25700: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = aot_gpr_5 != aot_gpr_16; - // nop if (branch_taken) { goto L_08B257A8; } @@ -3963,7 +4071,6 @@ L_08B2570C: aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(132))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B257A8; } @@ -3978,7 +4085,6 @@ L_08B25720: goto L_08B2572C; L_08B2572C: aot_gpr_31 = (0x08B25734u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25734u) goto L_08B25734; AOT_REGCACHE_SYNC_OUT(); return; L_08B25734: @@ -4015,7 +4121,6 @@ L_08B25754: goto L_08B25764; L_08B25764: aot_gpr_31 = (0x08B2576Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2576Cu) goto L_08B2576C; AOT_REGCACHE_SYNC_OUT(); return; L_08B2576C: @@ -4036,7 +4141,6 @@ L_08B2577C: goto L_08B25788; L_08B25788: aot_gpr_31 = (0x08B25790u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25790u) goto L_08B25790; AOT_REGCACHE_SYNC_OUT(); return; L_08B25790: @@ -4059,7 +4163,6 @@ L_08B257A0: L_08B257A8: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B257C4; } @@ -4069,7 +4172,6 @@ L_08B257B4: aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(56))); aot_gpr_6 = (0u | 16u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B2584C; } @@ -4084,7 +4186,6 @@ L_08B257C4: goto L_08B257D0; L_08B257D0: aot_gpr_31 = (0x08B257D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B257D8u) goto L_08B257D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B257D8: @@ -4121,7 +4222,6 @@ L_08B257F8: goto L_08B25808; L_08B25808: aot_gpr_31 = (0x08B25810u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25810u) goto L_08B25810; AOT_REGCACHE_SYNC_OUT(); return; L_08B25810: @@ -4142,7 +4242,6 @@ L_08B25820: goto L_08B2582C; L_08B2582C: aot_gpr_31 = (0x08B25834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25834u) goto L_08B25834; AOT_REGCACHE_SYNC_OUT(); return; L_08B25834: @@ -4207,9 +4306,7 @@ L_08B2584C: L_08B2587C: { const float fs = ctx.fpr[0]; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25BBC; } @@ -4240,7 +4337,6 @@ L_08B258B0: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(158))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B258D0; } @@ -4259,7 +4355,6 @@ L_08B258D0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 331u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4269,7 +4364,6 @@ L_08B258E0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 332u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4279,7 +4373,6 @@ L_08B258F0: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 333u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4289,7 +4382,6 @@ L_08B25900: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 334u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4299,7 +4391,6 @@ L_08B25910: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 335u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4309,7 +4400,6 @@ L_08B25920: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 336u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4319,7 +4409,6 @@ L_08B25930: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 337u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4329,7 +4418,6 @@ L_08B25940: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 338u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4339,7 +4427,6 @@ L_08B25950: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 339u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4349,7 +4436,6 @@ L_08B25960: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 340u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25980; } @@ -4359,7 +4445,6 @@ L_08B25970: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 341u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2598C; } @@ -4378,7 +4463,6 @@ L_08B2598C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 342u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B259BC; } @@ -4388,7 +4472,6 @@ L_08B2599C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 343u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B259BC; } @@ -4398,7 +4481,6 @@ L_08B259AC: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 344u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B259C8; } @@ -4417,7 +4499,6 @@ L_08B259C8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 346u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B259E8; } @@ -4427,7 +4508,6 @@ L_08B259D8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 347u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B259F4; } @@ -4446,7 +4526,6 @@ L_08B259F4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 349u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A24; } @@ -4456,7 +4535,6 @@ L_08B25A04: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 350u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A24; } @@ -4466,7 +4544,6 @@ L_08B25A14: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 351u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A30; } @@ -4485,7 +4562,6 @@ L_08B25A30: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 353u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A70; } @@ -4495,7 +4571,6 @@ L_08B25A40: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 354u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A70; } @@ -4505,7 +4580,6 @@ L_08B25A50: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 355u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A70; } @@ -4515,7 +4589,6 @@ L_08B25A60: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 356u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A7C; } @@ -4534,7 +4607,6 @@ L_08B25A7C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 352u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25A9C; } @@ -4544,7 +4616,6 @@ L_08B25A8C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 348u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B25AA8; } @@ -4563,7 +4634,6 @@ L_08B25AA8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 359u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25AE8; } @@ -4573,7 +4643,6 @@ L_08B25AB8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 360u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25AE8; } @@ -4583,7 +4652,6 @@ L_08B25AC8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 361u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25AE8; } @@ -4593,7 +4661,6 @@ L_08B25AD8: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 362u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B25AF4; } @@ -4612,7 +4679,6 @@ L_08B25AF4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 357u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B25B14; } @@ -4622,7 +4688,6 @@ L_08B25B04: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_5 = (0u | 358u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B25B20; } @@ -4642,7 +4707,6 @@ L_08B25B20: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(152))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B25B48; } @@ -4653,7 +4717,6 @@ L_08B25B34: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(52))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(154))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B25B58; } @@ -4681,7 +4744,6 @@ L_08B25B5C: goto L_08B25B68; L_08B25B68: aot_gpr_31 = (0x08B25B70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25B70u) goto L_08B25B70; AOT_REGCACHE_SYNC_OUT(); return; L_08B25B70: @@ -4718,7 +4780,6 @@ L_08B25B90: goto L_08B25BA0; L_08B25BA0: aot_gpr_31 = (0x08B25BA8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 358u, 0x08B65844u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B25BA8u) goto L_08B25BA8; AOT_REGCACHE_SYNC_OUT(); return; L_08B25BA8: @@ -4765,7 +4826,17 @@ L_08B25BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25C08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_fpr_12 = std::bit_cast(0u); @@ -4812,7 +4883,17 @@ L_08B25C5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25C64: ctx.gpr[9] = (2236u << 16u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(32304)); @@ -4827,7 +4908,6 @@ L_08B25C64: ctx.gpr[10] = (16816u << 16u); ctx.fpr[17] = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); if (branch_taken) { @@ -4839,9 +4919,7 @@ L_08B25CA4: ctx.gpr[10] = (49584u << 16u); ctx.fpr[19] = std::bit_cast(ctx.gpr[10]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25E08; } @@ -4852,9 +4930,7 @@ L_08B25CBC: ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(4))); aot_fpr_16 = aot_fpr_16 - ctx.fpr[0]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25E08; } @@ -4862,9 +4938,7 @@ L_08B25CBC: } L_08B25CD8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_16 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25E08; } @@ -4874,7 +4948,6 @@ L_08B25CE8: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7908))); ctx.gpr[10] = (static_cast(ctx.gpr[10]) < 32 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B25E08; } @@ -4891,7 +4964,6 @@ L_08B25CF8: ctx.fpr[18] = aot_fpr_16 + ctx.fpr[19]; ctx.fpr[18] = std::sqrt(ctx.fpr[18]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (aot_gpr_4 | 0u); if (branch_taken) { @@ -4945,9 +5017,7 @@ L_08B25D2C: aot_gpr_5 = (16772u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25DB0; } @@ -4994,11 +5064,20 @@ L_08B25DFC: goto L_08B25E08; L_08B25E08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B25E10: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7908))); @@ -5040,7 +5119,6 @@ L_08B25E9C: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(48))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B25FD0; } @@ -5049,7 +5127,6 @@ L_08B25E9C: L_08B25EB0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(48))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B25FD0; } @@ -5094,9 +5171,7 @@ L_08B25EBC: aot_gpr_6 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_6); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25FD0; } @@ -5105,7 +5180,6 @@ L_08B25EBC: L_08B25EF4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(48))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B25F0C; } @@ -5123,7 +5197,6 @@ L_08B25F00: L_08B25F0C: aot_fpr_12 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; goto L_08B25F28; @@ -5143,9 +5216,7 @@ L_08B25F28: goto L_08B25F30; L_08B25F30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[28])) && aot_fpr_13 == ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25FD0; } @@ -5171,7 +5242,6 @@ L_08B25F40: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(48))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B25F9C; } @@ -5204,7 +5274,6 @@ L_08B25F64: aot_fpr_13 = aot_fpr_13 - ctx.fpr[24]; { const float fs = aot_fpr_13; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[28])); goto L_08B25F98; @@ -5215,9 +5284,7 @@ L_08B25F98: goto L_08B25F9C; L_08B25F9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B25FD0; } @@ -5242,7 +5309,6 @@ L_08B25FD0: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B25E9C; } @@ -5272,12 +5338,21 @@ L_08B25FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26030: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B26040u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 658u, 0x088B7894u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B26040u) goto L_08B26040; AOT_REGCACHE_SYNC_OUT(); return; L_08B26040: @@ -5287,7 +5362,17 @@ L_08B26040: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2604C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), ctx.gpr[18]); @@ -5314,7 +5399,6 @@ L_08B2608C: AOT_REGCACHE_SYNC_OUT(); return; L_08B26098: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B260B8; } @@ -5332,7 +5416,6 @@ L_08B260A0: } L_08B260B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B260D8; } @@ -5373,7 +5456,6 @@ L_08B260D8: AOT_REGCACHE_SYNC_OUT(); return; L_08B26118: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B26180; } @@ -5453,7 +5535,17 @@ L_08B26184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B261A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-416)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -5466,7 +5558,6 @@ L_08B261A8: goto L_08B261F8; L_08B261F8: aot_gpr_31 = (0x08B26200u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B26200u) goto L_08B26200; AOT_REGCACHE_SYNC_OUT(); return; L_08B26200: @@ -5475,7 +5566,6 @@ L_08B26200: L_08B26204: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2626C; } @@ -5525,7 +5615,6 @@ L_08B2624C: } L_08B26264: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B26C60; } @@ -5533,7 +5622,6 @@ L_08B26264: } L_08B2626C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B26C60; } @@ -5576,7 +5664,6 @@ L_08B262D8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(49))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B26C40; } @@ -5585,7 +5672,6 @@ L_08B262D8: L_08B262E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(49))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B262FC; } @@ -5605,9 +5691,7 @@ L_08B262FC: L_08B26300: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[26]) || std::isnan(aot_fpr_12)) && ctx.fpr[26] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26C38; } @@ -5616,7 +5700,6 @@ L_08B26300: L_08B26314: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(48))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B26854; } @@ -5683,9 +5766,7 @@ L_08B26320: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2638C; } @@ -5712,9 +5793,7 @@ L_08B2639C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B263C8; } @@ -5779,7 +5858,6 @@ L_08B26438: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(296))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2684C; } @@ -5838,7 +5916,6 @@ L_08B264C0: L_08B264D0: aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B26830; } @@ -5855,7 +5932,6 @@ L_08B264E8: aot_gpr_6 = (aot_gpr_6 & 15u); aot_gpr_4 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B26818; } @@ -5877,7 +5953,6 @@ L_08B26500: { const float fs = aot_fpr_13; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[15] = std::bit_cast(0x7FC00000u); else ctx.fpr[15] = fs * ft; } aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_16)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (static_cast(static_cast(ctx.gpr[18]) >> 16u)); if (branch_taken) { @@ -5887,9 +5962,7 @@ L_08B26500: } L_08B26548: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26818; } @@ -5904,9 +5977,7 @@ L_08B26558: aot_fpr_13 = aot_fpr_14 + aot_fpr_13; aot_fpr_12 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26818; } @@ -5967,9 +6038,7 @@ L_08B265E4: aot_fpr_16 = aot_fpr_16 + ctx.fpr[18]; aot_fpr_14 = aot_fpr_16 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26818; } @@ -5977,9 +6046,7 @@ L_08B265E4: } L_08B26644: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26818; } @@ -5996,9 +6063,7 @@ L_08B26654: aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; aot_fpr_13 = aot_fpr_12 - aot_fpr_16; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26818; } @@ -6036,7 +6101,6 @@ L_08B26688: AOT_REGCACHE_SYNC_OUT(); return; L_08B266F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B26818; } @@ -6136,7 +6200,6 @@ L_08B26818: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B264E8; } @@ -6149,7 +6212,6 @@ L_08B26830: ctx.gpr[21] = (static_cast(static_cast(ctx.gpr[21]) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B264A0; } @@ -6157,7 +6219,6 @@ L_08B26830: } L_08B2684C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B26C38; } @@ -6166,7 +6227,6 @@ L_08B2684C: L_08B26854: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B26880; } @@ -6176,7 +6236,6 @@ L_08B26860: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(48))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B26880; } @@ -6186,7 +6245,6 @@ L_08B26870: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(48))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B26C38; } @@ -6212,7 +6270,6 @@ L_08B26880: goto L_08B2604C; L_08B26894: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B26C38; } @@ -6266,7 +6323,6 @@ L_08B26914: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(284))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B26C38; } @@ -6347,7 +6403,6 @@ L_08B269CC: aot_gpr_6 = (aot_gpr_6 & 15u); aot_gpr_4 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B26C04; } @@ -6368,9 +6423,7 @@ L_08B269F0: aot_fpr_13 = aot_fpr_13 + ctx.fpr[15]; aot_fpr_13 = std::sqrt(aot_fpr_13); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26C04; } @@ -6388,9 +6441,7 @@ L_08B26A34: aot_gpr_4 = (16816u << 16u); ctx.fpr[17] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26C04; } @@ -6398,7 +6449,6 @@ L_08B26A34: } L_08B26A6C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = ctx.fpr[20] - ctx.fpr[30]; goto L_08B26A84; @@ -6440,7 +6490,6 @@ L_08B26A8C: AOT_REGCACHE_SYNC_OUT(); return; L_08B26AD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B26BFC; } @@ -6544,7 +6593,6 @@ L_08B26C04: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_16) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B269CC; } @@ -6557,7 +6605,6 @@ L_08B26C1C: ctx.gpr[21] = (static_cast(static_cast(ctx.gpr[21]) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(ctx.gpr[21]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2697C; } @@ -6565,7 +6612,6 @@ L_08B26C1C: } L_08B26C38: aot_gpr_31 = (0x08B26C40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0169_entry, 169u, 59u, 0x08AA8BDCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B26C40u) goto L_08B26C40; AOT_REGCACHE_SYNC_OUT(); return; L_08B26C40: @@ -6607,7 +6653,17 @@ L_08B26C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26CA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (ctx.gpr[28] + static_cast(10204)); @@ -6635,13 +6691,22 @@ L_08B26CE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26CEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1360))); aot_gpr_5 = (aot_gpr_5 + static_cast(-8)); aot_gpr_6 = (aot_gpr_5 < static_cast(8) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B26D28; } @@ -6653,11 +6718,20 @@ L_08B26D00: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31368))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26D18: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(468))); aot_gpr_5 = (aot_gpr_5 | 32768u); @@ -6670,11 +6744,20 @@ L_08B26D18: } L_08B26D28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26D30: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); @@ -6745,7 +6828,17 @@ L_08B26D30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26D8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6769,7 +6862,6 @@ L_08B26DB8: L_08B26DC4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B26DE8; } @@ -6782,7 +6874,6 @@ L_08B26DD0: AOT_REGCACHE_SYNC_OUT(); return; L_08B26DD8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B26E20; } @@ -6790,7 +6881,6 @@ L_08B26DD8: } L_08B26DE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B26DF0; } @@ -6812,7 +6902,6 @@ L_08B26DF0: L_08B26DF8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B26E20; } @@ -6844,7 +6933,17 @@ L_08B26E24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26E3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6877,7 +6976,6 @@ L_08B26E84: AOT_REGCACHE_SYNC_OUT(); return; L_08B26E90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B26EA0; } @@ -6896,7 +6994,6 @@ L_08B26EA0: goto L_08B26EA4; L_08B26EA4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B26EC0; } @@ -6918,7 +7015,6 @@ L_08B26EAC: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B26ECC; } @@ -6969,7 +7065,17 @@ L_08B26EF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B26F18: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -7014,7 +7120,6 @@ L_08B26F88: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -7025,9 +7130,7 @@ L_08B26F88: L_08B26FA4: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B26FC8; } @@ -7070,7 +7173,17 @@ L_08B26FE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27010: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7095,7 +7208,6 @@ L_08B27040: L_08B2704C: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B270CC; } @@ -7108,7 +7220,6 @@ L_08B27058: AOT_REGCACHE_SYNC_OUT(); return; L_08B27060: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B27098; } @@ -7158,7 +7269,6 @@ L_08B27098: L_08B270B0: aot_gpr_6 = (0u | 57u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_6; - // nop if (branch_taken) { goto L_08B270C4; } @@ -7233,7 +7343,6 @@ L_08B27120: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2713C; } @@ -7256,7 +7365,17 @@ L_08B2713C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27158: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7287,7 +7406,6 @@ L_08B27198: AOT_REGCACHE_SYNC_OUT(); return; L_08B271A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B271D4; } @@ -7333,7 +7451,6 @@ L_08B271D4: goto L_08B271E8; L_08B271E8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B27230; } @@ -7455,7 +7572,6 @@ L_08B272B0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B272CC; } @@ -7467,7 +7583,6 @@ L_08B272C8: L_08B272CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B272FC; } @@ -7491,7 +7606,6 @@ L_08B272D8: L_08B272FC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27308; } @@ -7512,7 +7626,17 @@ L_08B27308: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27328: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7543,7 +7667,6 @@ L_08B27368: AOT_REGCACHE_SYNC_OUT(); return; L_08B27374: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B273AC; } @@ -7593,7 +7716,6 @@ L_08B273AC: goto L_08B273C8; L_08B273C8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B2741C; } @@ -7721,7 +7843,6 @@ L_08B274A8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B274C4; } @@ -7733,7 +7854,6 @@ L_08B274C0: L_08B274C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(28))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27504; } @@ -7758,7 +7878,6 @@ L_08B274D0: L_08B27504: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27510; } @@ -7779,7 +7898,17 @@ L_08B27510: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27530: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7811,7 +7940,6 @@ L_08B27578: AOT_REGCACHE_SYNC_OUT(); return; L_08B27584: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B27594; } @@ -7838,7 +7966,6 @@ L_08B275A4: ctx.gpr[21] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7996))); ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B2771C; } @@ -7847,7 +7974,6 @@ L_08B275A4: L_08B275B4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2771C; } @@ -7862,7 +7988,6 @@ L_08B275C0: L_08B275CC: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08B27644; } @@ -7877,7 +8002,6 @@ L_08B275E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B27644; } @@ -7986,7 +8110,6 @@ L_08B276B8: } L_08B276C4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B276B8; } @@ -7994,7 +8117,6 @@ L_08B276C4: } L_08B276CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B27718; } @@ -8054,7 +8176,17 @@ L_08B27730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27758: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8092,7 +8224,6 @@ L_08B277A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B277B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B277C4; } @@ -8111,7 +8242,6 @@ L_08B277C4: goto L_08B277C8; L_08B277C8: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B277E0; } @@ -8119,7 +8249,6 @@ L_08B277C8: } L_08B277D0: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B277E0; } @@ -8186,7 +8315,6 @@ L_08B27834: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27850; } @@ -8210,7 +8338,17 @@ L_08B27850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27870: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8240,7 +8378,6 @@ L_08B278AC: AOT_REGCACHE_SYNC_OUT(); return; L_08B278B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B278C8; } @@ -8259,7 +8396,6 @@ L_08B278C8: goto L_08B278CC; L_08B278CC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B278EC; } @@ -8269,7 +8405,6 @@ L_08B278D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B278EC; } @@ -8336,7 +8471,6 @@ L_08B27940: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2795C; } @@ -8359,7 +8493,17 @@ L_08B2795C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27978: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8387,7 +8531,6 @@ L_08B279AC: AOT_REGCACHE_SYNC_OUT(); return; L_08B279B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B279D4; } @@ -8396,7 +8539,6 @@ L_08B279B8: L_08B279C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B279D4; } @@ -8463,7 +8605,6 @@ L_08B27A28: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27A44; } @@ -8485,7 +8626,17 @@ L_08B27A44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27A5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8525,7 +8676,17 @@ L_08B27AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27AB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8550,7 +8711,6 @@ L_08B27AE8: L_08B27AF4: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B27B84; } @@ -8563,7 +8723,6 @@ L_08B27B00: AOT_REGCACHE_SYNC_OUT(); return; L_08B27B08: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B27B40; } @@ -8598,7 +8757,6 @@ L_08B27B34: goto L_08B27B38; L_08B27B38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B27B94; } @@ -8619,7 +8777,6 @@ L_08B27B40: L_08B27B58: ctx.gpr[7] = (0u | 57u); { const bool branch_taken = aot_gpr_6 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B27B74; } @@ -8629,7 +8786,6 @@ L_08B27B64: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(2196))); ctx.gpr[7] = (0u | 38u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B27B7C; } @@ -8704,7 +8860,6 @@ L_08B27BD8: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27BF4; } @@ -8727,7 +8882,17 @@ L_08B27BF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27C10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8764,7 +8929,17 @@ L_08B27C44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -8829,7 +9004,6 @@ L_08B27CEC: AOT_REGCACHE_SYNC_OUT(); return; L_08B27CF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B27D24; } @@ -8838,7 +9012,6 @@ L_08B27CF8: L_08B27D00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27D24; } @@ -8861,7 +9034,6 @@ L_08B27D0C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B27D30; } @@ -8898,7 +9070,6 @@ L_08B27D3C: AOT_REGCACHE_SYNC_OUT(); return; L_08B27D4C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B27D5C; } @@ -8967,7 +9138,6 @@ L_08B27DB0: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_6) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27DD4; } @@ -8990,7 +9160,17 @@ L_08B27DD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27DF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -9049,7 +9229,6 @@ L_08B27E78: goto L_08B27E7C; L_08B27E7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B27ECC; } @@ -9059,7 +9238,6 @@ L_08B27E84: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); if (branch_taken) { @@ -9069,9 +9247,7 @@ L_08B27E84: } L_08B27E9C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B27EB4; } @@ -9087,7 +9263,6 @@ L_08B27EAC: } L_08B27EB4: aot_gpr_31 = (0x08B27EBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B27EBCu) goto L_08B27EBC; AOT_REGCACHE_SYNC_OUT(); return; L_08B27EBC: @@ -9096,7 +9271,6 @@ L_08B27EBC: L_08B27EC0: ctx.fpr[22] = ctx.fpr[22] / ctx.fpr[24]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B27F0C; } @@ -9106,7 +9280,6 @@ L_08B27ECC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(16))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(20))); if (branch_taken) { @@ -9116,9 +9289,7 @@ L_08B27ECC: } L_08B27EE4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[20])) && aot_fpr_13 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B27EFC; } @@ -9134,7 +9305,6 @@ L_08B27EF4: } L_08B27EFC: aot_gpr_31 = (0x08B27F04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 28u, 0x08964540u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B27F04u) goto L_08B27F04; AOT_REGCACHE_SYNC_OUT(); return; L_08B27F04: @@ -9145,9 +9315,7 @@ L_08B27F08: goto L_08B27F0C; L_08B27F0C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B27F20; } @@ -9158,9 +9326,7 @@ L_08B27F1C: goto L_08B27F20; L_08B27F20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B27F34; } @@ -9197,7 +9363,17 @@ L_08B27F4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B27F7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9225,7 +9401,6 @@ L_08B27FB0: AOT_REGCACHE_SYNC_OUT(); return; L_08B27FBC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B27FCC; } diff --git a/profiles/vcs/generated/generated_unit_0201.cpp b/profiles/vcs/generated/generated_unit_0201.cpp index b2cc434..489f804 100644 --- a/profiles/vcs/generated/generated_unit_0201.cpp +++ b/profiles/vcs/generated/generated_unit_0201.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0201[4096] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, - 6, 0, 0, 0, 7, 0, 8, 0, 0, 9, 0, 10, 0, 0, 0, 11, 0, 12, 0, 0, 13, 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, 16, - 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 23, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, - 35, 0, 0, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 0, 42, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 46, 0, 0, 47, 48, 0, 0, 0, 49, 0, 50, 0, 51, 0, - 0, 52, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, - 61, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 64, 0, 65, 0, 66, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 69, 0, 70, 0, 71, - 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, 76, 0, - 0, 77, 0, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 82, 0, 83, 0, 0, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, - 87, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 92, 0, - 0, 93, 0, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 100, 101, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, - 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 106, 0, 0, 107, 0, 0, 108, 0, 0, 109, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 113, 0, 0, 114, 0, 115, 0, 0, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 0, 133, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 135, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, 0, 0, 138, 0, 0, - 139, 0, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 142, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 150, 0, 151, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, 155, 0, 0, 156, 0, 157, 0, 158, 0, 0, 159, 0, 160, 0, 161, 0, - 162, 0, 0, 0, 0, 0, 163, 0, 164, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 173, 0, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, - 0, 0, 0, 179, 0, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 184, 0, 0, 0, 0, 185, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, - 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 0, 0, 0, - 0, 0, 195, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 200, 0, 0, 0, 0, 201, 0, - 0, 202, 203, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 208, 209, - 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 213, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, - 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 218, 0, 0, 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, - 222, 0, 0, 0, 0, 223, 0, 0, 0, 0, 224, 0, 225, 0, 0, 0, 0, 226, 0, 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 229, 0, 0, - 0, 0, 230, 0, 231, 0, 0, 0, 232, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 236, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 242, 0, 0, 0, 0, - 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, 252, 253, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 0, - 0, 0, 0, 0, 0, 0, 256, 0, 0, 257, 0, 0, 0, 0, 0, 258, 259, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, 262, - 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 266, 267, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 272, 273, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 279, 0, 280, 0, - 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 283, 0, 284, 285, 0, 286, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 290, 0, 291, 0, 0, - 0, 292, 0, 0, 0, 293, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, - 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 304, 0, 305, 306, 0, 0, 0, 0, 307, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 309, 0, 0, 310, 0, 311, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 316, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 318, 0, 0, 319, 0, 320, 0, 0, 0, 0, 321, 0, 322, 0, - 0, 0, 0, 0, 323, 0, 324, 0, 325, 0, 326, 0, 0, 327, 0, 0, 328, 0, 0, 0, 329, 0, 330, 0, 331, 0, 0, 0, 332, 0, 0, 0, - 333, 0, 0, 334, 0, 0, 0, 0, 0, 335, 0, 336, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, - 341, 0, 0, 0, 342, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 346, 0, 347, 0, 0, 0, 0, - 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, - 0, 0, 0, 352, 353, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, - 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 0, 0, 373, 374, 0, - 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 377, 0, 0, 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 0, - 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 0, 384, 0, 0, 0, 385, 0, 0, 386, 0, 0, 0, - 387, 0, 388, 0, 389, 0, 390, 391, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, - 0, 0, 0, 396, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, 0, 401, 0, - 0, 0, 402, 0, 0, 0, 0, 403, 404, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 408, 0, - 0, 0, 0, 0, 409, 410, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, - 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 420, 0, - 0, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 425, 0, - 0, 0, 426, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 430, 0, 431, 0, 432, 0, 0, - 0, 433, 0, 434, 0, 435, 0, 0, 436, 0, 437, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, - 0, 0, 441, 0, 442, 0, 443, 0, 0, 444, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 447, 0, 0, 448, 0, 0, 0, 0, 0, 449, 0, 0, 450, 451, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 453, 0, 0, 454, 0, 0, 0, 0, 0, 455, 0, 0, 456, 0, 457, 458, 0, 0, 0, 0, 0, 459, 0, 0, 460, 0, 461, 0, 462, 0, 0, 0, - 0, 0, 463, 0, 0, 464, 0, 465, 0, 466, 0, 467, 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, - 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, 0, 0, 0, 0, - 0, 0, 478, 0, 479, 480, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 484, 0, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, 489, 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 491, 0, 0, 0, 0, - 0, 0, 0, 492, 0, 0, 493, 0, 0, 0, 0, 0, 494, 495, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, - 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 504, 0, 0, 505, 0, 0, 0, 0, 506, 0, 0, 507, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, 515, 0, 0, 0, 516, 0, 0, 0, 0, 0, 517, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 522, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, - 0, 0, 0, 0, 0, 0, 525, 0, 0, 526, 0, 0, 0, 0, 0, 527, 528, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 530, 0, - 0, 0, 531, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 535, 0, 536, 0, 537, 538, - 0, 0, 539, 0, 0, 0, 0, 540, 0, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, - 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 547, 0, 0, 548, 0, 549, - 550, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, 0, 555, 556, 0, 0, - 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 562, 0, 0, 563, 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 567, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 571, 0, 0, 572, 0, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 0, 0, 0, 582, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, 0, 0, 586, 0, 587, 0, 0, 0, 588, - 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 593, 0, 0, - 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 597, 0, 598, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 600, 0, 0, 601, 0, 0, 0, 602, 0, 603, 0, 0, 604, 0, 0, 605, 0, 606, 0, 607, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, - 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 0, 612, 0, 0, 613, 0, 0, 614, 0, 0, 0, 0, 0, 615, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 617, 0, 0, 0, 618, 0, 0, 0, 619, 0, 620, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 624, 0, 0, 0, 0, 625, 0, 0, 0, 626, 0, 0, 627, 0, 628, 0, 629, 630, - 0, 0, 0, 0, 0, 0, 631, 0, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 634, 0, 0, 0, 0, 0, 635, 636, 0, 0, 0, 0, 0, - 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, 0, 639, 0, 0, 0, 0, 640, 0, 0, 0, 641, 0, 642, 643, 0, 0, 0, 0, 0, - 0, 644, 0, 645, 0, 0, 0, 0, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 0, 648, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 0, 653, 0, 654, 0, 0, 0, 655, 0, 656, 657, 0, 0, 0, 0, 0, 0, 0, 0, 658, - 0, 659, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 661, 0, 0, 0, 0, 0, 662, 663, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 667, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, 670, 671, 0, 0, 0, - 0, 0, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, 0, 0, 0, 0, 0, 676, 677, 0, 0, 0, 0, 0, 0, - 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 680, 0, 0, 0, 681, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 683, - 0, 684, 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 687, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, 0, 0, 0, 690, 691, - 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, 699, 0, 0, - 700, 0, 0, 701, 0, 702, 0, 0, 0, 0, 0, 703, 0, 704, 0, 0, 705, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707, - 0, 0, 708, 0, 0, 709, 0, 0, 710, 0, 711, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 714, - 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 723, 0, - 0, 724, 0, 725, 0, 0, 0, 0, 726, 0, 727, 0, 0, 0, 0, 728, 0, 729, 730, 0, 731, 0, 0, 732, 0, 0, 733, 0, 0, 0, 734, 0, - 0, 0, 0, 0, 0, 0, 735, 0, 736, 0, 0, 0, 737, 0, 738, 0, 739, 0, 0, 0, 740, 0, 741, 742, 0, 0, 743, 0, 0, 0, 744, 0, - 0, 745, 0, 0, 746, 0, 0, 0, 0, 0, 747, 0, 748, 0, 0, 0, 0, 0, 749, 0, 0, 0, 750, 0, 0, 751, 0, 0, 0, 0, 752, 0, - 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 754, 0, 755, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 759, 0, 0, 0, 0, 0, 0, 760, 0, 0, 761, 0, 762, 0, 0, 0, - 763, 0, 764, 0, 0, 0, 0, 765, 0, 766, 767, 0, 768, 0, 0, 769, 0, 770, 0, 0, 0, 0, 771, 0, 0, 0, 0, 772, 0, 0, 0, 0, - 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, - 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 779, 0, 0, 0, 780, 0, 781, 0, 0, 782, 0, 783, 0, 0, - 784, 785, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 787, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 789, 0, 0, 0, 0, 0, 790, 791, 0, - 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 795, - 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 797, 0, 0, 798, 0, 799, 800, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 802, - 0, 803, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 806, 807, 0, 808, 0, 0, 0, 0, 0, 0, 0, 809, - 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 813, 0, 0, 814, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 817, 0, 0, 0, 818, 0, 819, 0, - 820, 0, 821, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, 824, 0, 0, 825, 0, 826, 0, 0, 827, 0, 828, 0, 829, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0201[64] = { + 0x83128A5112001041ull, 0x40041120080C1202ull, 0x004440C120281A02ull, 0x0155202A54652412ull, + 0x49001020A9415281ull, 0x4800808915054922ull, 0x022C041000088242ull, 0x2052401040924802ull, + 0x04010A4041112008ull, 0x2091200084480820ull, 0x022C041004825441ull, 0x0412814154A92008ull, + 0x0804822401020240ull, 0x4010490042A02048ull, 0x424020C409004002ull, 0x22224010C1202806ull, + 0x2142142142112008ull, 0x0000000090041114ull, 0x0020C0420A01A800ull, 0x90098240500D0812ull, + 0x6090140300240040ull, 0x5240010080000020ull, 0x414141222A24B428ull, 0x0001000021A10424ull, + 0x50A4800088121290ull, 0x14048A0911512550ull, 0x240100010A101091ull, 0x001200830480A018ull, + 0x6090140309001008ull, 0x1222400412448020ull, 0x44800818240500D5ull, 0x00901030480A0184ull, + 0x4202401044448021ull, 0x1000952A2A480104ull, 0x0010641200810254ull, 0x80102AA41520D209ull, + 0x00080A340A80A804ull, 0x802030480A01A112ull, 0x2085090900414844ull, 0x5034024010444480ull, + 0xD490008440418240ull, 0xA480204040808084ull, 0x8000200830480A01ull, 0x4088448010000200ull, + 0x1008051200800900ull, 0x8A28004010509004ull, 0x0004152224010404ull, 0x4124480201152512ull, + 0xD488448008288900ull, 0x0688480206090140ull, 0x8068A2400830480Aull, 0x1A042240040C1202ull, + 0x81089001030480A0ull, 0x00890040C1202806ull, 0x8021282924041000ull, 0x0010A48082001524ull, + 0x4496850A48004200ull, 0x4244141244D15140ull, 0x1481200200042840ull, 0x2002400408429685ull, + 0x6090140329448010ull, 0x8043490080900020ull, 0x0041008080B02102ull, 0xA949010551200809ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0201[64] = { + 1u, 17u, 28u, 41u, 61u, 77u, 93u, 104u, 117u, 128u, 139u, 153u, 169u, 179u, 191u, 202u, + 216u, 230u, 237u, 248u, 263u, 274u, 281u, 300u, 309u, 323u, 341u, 352u, 363u, 375u, 387u, 402u, + 414u, 426u, 441u, 453u, 471u, 484u, 498u, 512u, 525u, 539u, 550u, 560u, 568u, 577u, 589u, 600u, + 616u, 631u, 644u, 659u, 672u, 684u, 696u, 708u, 720u, 735u, 753u, 763u, 777u, 792u, 803u, 813u, }; void recomp_unit_0201_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0201_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B28000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0201[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0201[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0201[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B28000; @@ -1006,7 +913,6 @@ L_08B28000: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_12 / aot_fpr_14; aot_gpr_31 = (0x08B28018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 785u, 0x08AAF8ACu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B28018u) goto L_08B28018; AOT_REGCACHE_SYNC_OUT(); return; L_08B28018: @@ -1022,7 +928,17 @@ L_08B28018: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28030: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1061,7 +977,6 @@ L_08B28080: AOT_REGCACHE_SYNC_OUT(); return; L_08B28090: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B280C4; } @@ -1070,7 +985,6 @@ L_08B28090: L_08B28098: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B280C4; } @@ -1167,7 +1081,6 @@ L_08B28130: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2814C; } @@ -1191,7 +1104,17 @@ L_08B2814C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2816C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1231,7 +1154,17 @@ L_08B281B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B281C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1259,9 +1192,7 @@ L_08B28204: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1252))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2822C; } @@ -1328,7 +1259,6 @@ L_08B28280: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(521), static_cast(aot_gpr_4)); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2829C; } @@ -1351,7 +1281,17 @@ L_08B2829C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B282B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1367,7 +1307,17 @@ L_08B282C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B282D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1411,7 +1361,6 @@ L_08B28334: AOT_REGCACHE_SYNC_OUT(); return; L_08B28340: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B28358; } @@ -1420,7 +1369,6 @@ L_08B28340: L_08B28348: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28358; } @@ -1433,7 +1381,6 @@ L_08B28358: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(476))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B28494; } @@ -1446,7 +1393,6 @@ L_08B28368: AOT_REGCACHE_SYNC_OUT(); return; L_08B28370: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B283C8; } @@ -1455,7 +1401,6 @@ L_08B28370: L_08B28378: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B283C8; } @@ -1468,7 +1413,6 @@ L_08B28384: AOT_REGCACHE_SYNC_OUT(); return; L_08B2838C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B283C8; } @@ -1493,7 +1437,6 @@ L_08B283B4: AOT_REGCACHE_SYNC_OUT(); return; L_08B283C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B28494; } @@ -1501,7 +1444,6 @@ L_08B283C0: } L_08B283C8: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B28494; } @@ -1514,7 +1456,6 @@ L_08B283D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B283D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B28494; } @@ -1543,7 +1484,6 @@ L_08B28400: AOT_REGCACHE_SYNC_OUT(); return; L_08B2841C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B28460; } @@ -1576,7 +1516,6 @@ L_08B28440: AOT_REGCACHE_SYNC_OUT(); return; L_08B28458: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B28494; } @@ -1621,7 +1560,17 @@ L_08B28494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B284B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1662,7 +1611,6 @@ L_08B28504: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B2859C; } @@ -1677,7 +1625,6 @@ L_08B28514: L_08B28520: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(776))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28560; } @@ -1710,7 +1657,6 @@ L_08B28548: AOT_REGCACHE_SYNC_OUT(); return; L_08B28560: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2859C; } @@ -1724,7 +1670,6 @@ L_08B28570: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2858C; } @@ -1761,7 +1706,17 @@ L_08B2859C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B285BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -1803,7 +1758,6 @@ L_08B28604: L_08B28618: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2863C; } @@ -1826,7 +1780,6 @@ L_08B28624: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2864C; } @@ -1905,7 +1858,6 @@ L_08B28690: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + aot_fpr_20; goto L_08B286A8; @@ -1917,9 +1869,7 @@ L_08B286A8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B286CC; } @@ -1930,7 +1880,6 @@ L_08B286C8: goto L_08B286CC; L_08B286CC: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B286E4; } @@ -1958,7 +1907,17 @@ L_08B286E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28704: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1981,7 +1940,6 @@ L_08B2872C: L_08B28738: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28778; } @@ -1996,7 +1954,6 @@ L_08B28744: L_08B28750: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28778; } @@ -2025,7 +1982,17 @@ L_08B28778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28790: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2048,7 +2015,6 @@ L_08B287B8: L_08B287C4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B287F4; } @@ -2082,7 +2048,17 @@ L_08B287F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2880C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2129,7 +2105,17 @@ L_08B28860: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28878: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2161,7 +2147,17 @@ L_08B288AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B288C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -2205,7 +2201,17 @@ L_08B28914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2892C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2239,7 +2245,17 @@ L_08B28968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2897C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -2289,7 +2305,6 @@ L_08B289DC: L_08B289F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28A18; } @@ -2312,7 +2327,6 @@ L_08B28A00: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B28A28; } @@ -2342,7 +2356,6 @@ L_08B28A28: AOT_REGCACHE_SYNC_OUT(); return; L_08B28A30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B28A5C; } @@ -2351,7 +2364,6 @@ L_08B28A30: L_08B28A38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28A5C; } @@ -2374,7 +2386,6 @@ L_08B28A44: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B28A68; } @@ -2443,7 +2454,6 @@ L_08B28A90: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + aot_fpr_20; goto L_08B28AA8; @@ -2455,9 +2465,7 @@ L_08B28AA8: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B28ACC; } @@ -2468,7 +2476,6 @@ L_08B28AC8: goto L_08B28ACC; L_08B28ACC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B28AE4; } @@ -2498,7 +2505,17 @@ L_08B28AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2534,7 +2551,6 @@ L_08B28B4C: AOT_REGCACHE_SYNC_OUT(); return; L_08B28B54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B28BA0; } @@ -2543,7 +2559,6 @@ L_08B28B54: L_08B28B5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B28BA0; } @@ -2561,7 +2576,6 @@ L_08B28B70: AOT_REGCACHE_SYNC_OUT(); return; L_08B28B78: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B28BD0; } @@ -2580,7 +2594,6 @@ L_08B28B80: AOT_REGCACHE_SYNC_OUT(); return; L_08B28B98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B28BD0; } @@ -2598,7 +2611,6 @@ L_08B28BA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B28BBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B28BD0; } @@ -2622,7 +2634,17 @@ L_08B28BD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28BE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2669,7 +2691,17 @@ L_08B28C44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28C60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2727,7 +2759,17 @@ L_08B28CC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28CEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2771,7 +2813,6 @@ L_08B28D34: } L_08B28D54: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B28D64; } @@ -2791,7 +2832,17 @@ L_08B28D64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28D78: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2830,7 +2881,17 @@ L_08B28DB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28DD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2870,7 +2931,17 @@ L_08B28E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28E38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2929,7 +3000,17 @@ L_08B28E9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28EB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -3020,7 +3101,6 @@ L_08B28F60: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(521), static_cast(aot_gpr_5)); aot_gpr_5 = (static_cast(ctx.gpr[6]) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B28F7C; } @@ -3038,7 +3118,17 @@ L_08B28F7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B28F90: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3097,7 +3187,17 @@ L_08B28FF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2900C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_17); @@ -3147,7 +3247,6 @@ L_08B29064: goto L_08B29078; L_08B29078: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08B29094; } @@ -3173,7 +3272,6 @@ L_08B29094: goto L_08B290A8; L_08B290A8: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08B290C4; } @@ -3199,7 +3297,6 @@ L_08B290C4: goto L_08B290D8; L_08B290D8: { const bool branch_taken = ctx.gpr[6] == 0u; - // nop if (branch_taken) { goto L_08B290F4; } @@ -3225,7 +3322,6 @@ L_08B290F4: goto L_08B29108; L_08B29108: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B29120; } @@ -3260,7 +3356,17 @@ L_08B29130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29148: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3418,7 +3524,6 @@ L_08B2922C: goto L_08B29234; L_08B29234: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B29240; } @@ -3481,7 +3586,6 @@ L_08B29298: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B292BC; } @@ -3503,7 +3607,17 @@ L_08B292BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B292D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -3530,7 +3644,6 @@ L_08B29310: ctx.gpr[6] = (128u << 16u); aot_gpr_5 = (aot_gpr_5 & ctx.gpr[6]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2934C; } @@ -3549,7 +3662,6 @@ L_08B2932C: AOT_REGCACHE_SYNC_OUT(); return; L_08B29340: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2934C; } @@ -3610,7 +3722,6 @@ L_08B293A4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B293C0; } @@ -3622,7 +3733,6 @@ L_08B293BC: L_08B293C0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B293F0; } @@ -3646,7 +3756,6 @@ L_08B293CC: L_08B293F0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(7728))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B293FC; } @@ -3666,7 +3775,17 @@ L_08B293FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29418: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -3697,7 +3816,6 @@ L_08B29454: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B29484; } @@ -3758,7 +3876,6 @@ L_08B294DC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B294F8; } @@ -3781,7 +3898,17 @@ L_08B294F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29514: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3893,7 +4020,6 @@ L_08B29630: goto L_08B29634; L_08B29634: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -3908,7 +4034,6 @@ L_08B2963C: L_08B29648: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7980))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B29754; } @@ -3918,7 +4043,6 @@ L_08B29654: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B29754; } @@ -3931,7 +4055,6 @@ L_08B29664: AOT_REGCACHE_SYNC_OUT(); return; L_08B2966C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -3951,7 +4074,6 @@ L_08B29684: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -3960,7 +4082,6 @@ L_08B29684: L_08B29694: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -3980,7 +4101,6 @@ L_08B296A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B296B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -3997,7 +4117,6 @@ L_08B296C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B296D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -4007,9 +4126,7 @@ L_08B296E0: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B29754; } @@ -4017,9 +4134,7 @@ L_08B296E0: } L_08B296F8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B29754; } @@ -4045,7 +4160,6 @@ L_08B29728: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B29754; } @@ -4104,7 +4218,17 @@ L_08B29774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B297C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -4200,7 +4324,6 @@ L_08B298BC: L_08B298C8: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B29A6C; } @@ -4255,7 +4378,6 @@ L_08B29918: goto L_08B29920; L_08B29920: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4270,7 +4392,6 @@ L_08B29928: L_08B29934: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7980))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4280,7 +4401,6 @@ L_08B29940: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4293,7 +4413,6 @@ L_08B29950: AOT_REGCACHE_SYNC_OUT(); return; L_08B29958: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4313,7 +4432,6 @@ L_08B29970: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4322,7 +4440,6 @@ L_08B29970: L_08B29980: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4349,7 +4466,6 @@ L_08B299AC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4358,7 +4474,6 @@ L_08B299AC: L_08B299BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4388,7 +4503,6 @@ L_08B299C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B299E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4396,9 +4510,7 @@ L_08B299E8: } L_08B299F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B29A64; } @@ -4406,9 +4518,7 @@ L_08B299F0: } L_08B29A00: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B29A64; } @@ -4436,7 +4546,6 @@ L_08B29A30: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B29A64; } @@ -4489,7 +4598,17 @@ L_08B29A80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29AC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4514,7 +4633,6 @@ L_08B29AF4: ctx.gpr[6] = (128u << 16u); aot_gpr_5 = (aot_gpr_5 & ctx.gpr[6]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B29B10; } @@ -4575,7 +4693,6 @@ L_08B29B68: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B29B84; } @@ -4597,7 +4714,17 @@ L_08B29B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4629,7 +4756,6 @@ L_08B29BD0: aot_fpr_14 = std::bit_cast(aot_gpr_5); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B29C0C; @@ -4651,7 +4777,17 @@ L_08B29C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29C30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -4676,7 +4812,6 @@ L_08B29C6C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[2] + static_cast(86)))))); ctx.gpr[6] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B29C84; } @@ -4737,7 +4872,6 @@ L_08B29CDC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B29CF8; } @@ -4760,7 +4894,17 @@ L_08B29CF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4816,7 +4960,17 @@ L_08B29D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29D88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -4859,7 +5013,6 @@ L_08B29DD4: L_08B29DE4: aot_gpr_5 = (0u | 50u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B29E10; } @@ -4874,7 +5027,6 @@ L_08B29DF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B29E00: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B29E1C; } @@ -4890,7 +5042,6 @@ L_08B29E08: } L_08B29E10: { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B29E1C; } @@ -4951,7 +5102,6 @@ L_08B29E74: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B29E90; } @@ -4974,7 +5124,17 @@ L_08B29E90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29EAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5005,7 +5165,6 @@ L_08B29EF8: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(676))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B29F20; } @@ -5016,7 +5175,6 @@ L_08B29F08: ctx.gpr[6] = (512u << 16u); aot_gpr_5 = (aot_gpr_5 & ctx.gpr[6]); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B29F20; } @@ -5077,7 +5235,6 @@ L_08B29F78: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B29F94; } @@ -5100,7 +5257,17 @@ L_08B29F94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B29FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5139,7 +5306,17 @@ L_08B2A000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A014: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5197,7 +5374,17 @@ L_08B2A078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5260,7 +5447,17 @@ L_08B2A108: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A120: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5282,7 +5479,6 @@ L_08B2A14C: L_08B2A158: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08B2A240; } @@ -5295,7 +5491,6 @@ L_08B2A164: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A16C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2A208; } @@ -5305,7 +5500,6 @@ L_08B2A174: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2276))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2A208; } @@ -5318,7 +5512,6 @@ L_08B2A184: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A18C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2A1B0; } @@ -5327,7 +5520,6 @@ L_08B2A18C: L_08B2A194: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2A1B0; } @@ -5340,7 +5532,6 @@ L_08B2A1A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A1A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2A208; } @@ -5384,7 +5575,6 @@ L_08B2A208: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A210: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2A240; } @@ -5393,7 +5583,6 @@ L_08B2A210: L_08B2A218: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2A240; } @@ -5423,7 +5612,17 @@ L_08B2A240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A25C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5479,7 +5678,17 @@ L_08B2A2B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A2D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -5532,7 +5741,6 @@ L_08B2A33C: ctx.gpr[6] = (ctx.gpr[8] | 0u); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[6] + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2A388; } @@ -5549,7 +5757,6 @@ L_08B2A354: } L_08B2A360: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B2A370; } @@ -5565,7 +5772,6 @@ L_08B2A370: ctx.gpr[6] = (aot_gpr_4 + ctx.gpr[7]); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[6] + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B2A354; } @@ -5579,7 +5785,6 @@ L_08B2A388: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A394: aot_gpr_31 = (0x08B2A39Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 127u, 0x08A11208u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2A39Cu) goto L_08B2A39C; AOT_REGCACHE_SYNC_OUT(); return; L_08B2A39C: @@ -5589,7 +5794,6 @@ L_08B2A39C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A3A4: aot_gpr_31 = (0x08B2A3ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2A3ACu) goto L_08B2A3AC; AOT_REGCACHE_SYNC_OUT(); return; L_08B2A3AC: @@ -5611,7 +5815,17 @@ L_08B2A3B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A3D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5661,9 +5875,7 @@ L_08B2A43C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2A464; } @@ -5690,9 +5902,7 @@ L_08B2A46C: aot_gpr_4 = (17096u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2A490; } @@ -5711,9 +5921,7 @@ L_08B2A490: goto L_08B2A494; L_08B2A494: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2A4AC; } @@ -5742,7 +5950,17 @@ L_08B2A4AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A4CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5780,7 +5998,6 @@ L_08B2A520: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A534: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2A540; } @@ -5841,7 +6058,6 @@ L_08B2A598: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2A5B4; } @@ -5865,7 +6081,17 @@ L_08B2A5B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5923,7 +6149,17 @@ L_08B2A640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A658: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5947,7 +6183,6 @@ L_08B2A68C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2A6DC; } @@ -5972,7 +6207,6 @@ L_08B2A6AC: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A6C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2A6DC; } @@ -5999,7 +6233,17 @@ L_08B2A6DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A6F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6057,7 +6301,17 @@ L_08B2A758: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A770: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6085,7 +6339,6 @@ L_08B2A7A4: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2A7D0; } @@ -6152,7 +6405,6 @@ L_08B2A824: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2A840; } @@ -6174,7 +6426,17 @@ L_08B2A840: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A858: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6202,7 +6464,17 @@ L_08B2A888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6230,7 +6502,6 @@ L_08B2A8DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A8E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2A8F8; } @@ -6276,7 +6547,17 @@ L_08B2A91C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A93C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6299,7 +6580,17 @@ L_08B2A95C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A978: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6322,7 +6613,17 @@ L_08B2A998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2A9B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6349,7 +6650,6 @@ L_08B2A9E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2A9F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2AA00; } @@ -6410,7 +6710,6 @@ L_08B2AA58: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2AA74; } @@ -6432,7 +6731,17 @@ L_08B2AA74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AA8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6470,7 +6779,17 @@ L_08B2AAB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AAFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6509,7 +6828,17 @@ L_08B2AB24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AB70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6564,7 +6893,17 @@ L_08B2ABDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2ABF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6602,7 +6941,17 @@ L_08B2AC2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AC5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6625,7 +6974,6 @@ L_08B2AC90: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2ACCC; } @@ -6675,7 +7023,17 @@ L_08B2ACF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AD08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6699,7 +7057,6 @@ L_08B2AD3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); ctx.gpr[6] = (0u | 15u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2AD58; } @@ -6723,7 +7080,17 @@ L_08B2AD58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AD70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6750,9 +7117,7 @@ L_08B2AD98: aot_fpr_12 = std::bit_cast(aot_run_words[2]); } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2ADD4; } @@ -6764,9 +7129,7 @@ L_08B2ADCC: goto L_08B2ADD4; L_08B2ADD4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2ADEC; } @@ -6778,7 +7141,6 @@ L_08B2ADE4: goto L_08B2ADEC; L_08B2ADEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[16] = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B2AE08; @@ -6813,7 +7175,17 @@ L_08B2AE28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AE40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6857,7 +7229,6 @@ L_08B2AE94: AOT_REGCACHE_SYNC_OUT(); return; L_08B2AEA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2AEB0; } @@ -6881,7 +7252,17 @@ L_08B2AEB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AEC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6911,7 +7292,6 @@ L_08B2AF10: AOT_REGCACHE_SYNC_OUT(); return; L_08B2AF20: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2AF48; } @@ -6964,7 +7344,17 @@ L_08B2AF60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AF84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7020,7 +7410,17 @@ L_08B2AFE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2AFF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7076,7 +7476,17 @@ L_08B2B054: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B06C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7108,7 +7518,6 @@ L_08B2B0B8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2228))); ctx.gpr[6] = (0u | 55u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2B0F8; } @@ -7118,7 +7527,6 @@ L_08B2B0CC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2196))); ctx.gpr[6] = (0u | 16u); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2B0F8; } @@ -7127,7 +7535,6 @@ L_08B2B0CC: L_08B2B0DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1152))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B2B0F0; } @@ -7202,7 +7609,6 @@ L_08B2B14C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B168; } @@ -7225,7 +7631,17 @@ L_08B2B168: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B184: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7249,7 +7665,6 @@ L_08B2B1B8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2228))); ctx.gpr[6] = (0u | 55u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2B1E4; } @@ -7259,7 +7674,6 @@ L_08B2B1CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B2B1E4; } @@ -7326,7 +7740,6 @@ L_08B2B238: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B254; } @@ -7348,7 +7761,17 @@ L_08B2B254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B26C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7376,7 +7799,6 @@ L_08B2B2A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B2B2B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2B2D8; } @@ -7394,7 +7816,6 @@ L_08B2B2BC: } L_08B2B2CC: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B2B2D8; } @@ -7455,7 +7876,6 @@ L_08B2B330: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B34C; } @@ -7478,7 +7898,17 @@ L_08B2B34C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B368: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7510,7 +7940,6 @@ L_08B2B3B4: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2B3F0; } @@ -7523,7 +7952,6 @@ L_08B2B3C8: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B2B3F0; } @@ -7531,7 +7959,6 @@ L_08B2B3C8: } L_08B2B3E4: { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2B3F0; } @@ -7592,7 +8019,6 @@ L_08B2B448: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B464; } @@ -7615,7 +8041,17 @@ L_08B2B464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B480: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7647,7 +8083,6 @@ L_08B2B4CC: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(2076))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2B508; } @@ -7660,7 +8095,6 @@ L_08B2B4E0: ctx.gpr[7] = (ctx.gpr[7] < static_cast(1) ? 1u : 0u); ctx.gpr[7] = (ctx.gpr[7] & 255u); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B2B508; } @@ -7668,7 +8102,6 @@ L_08B2B4E0: } L_08B2B4FC: { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2B508; } @@ -7729,7 +8162,6 @@ L_08B2B560: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B57C; } @@ -7752,7 +8184,17 @@ L_08B2B57C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B598: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7817,7 +8259,17 @@ L_08B2B630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B648: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7838,7 +8290,6 @@ L_08B2B668: L_08B2B674: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2B6C0; } @@ -7847,7 +8298,6 @@ L_08B2B674: L_08B2B680: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B6C0; } @@ -7869,7 +8319,6 @@ L_08B2B694: AOT_REGCACHE_SYNC_OUT(); return; L_08B2B6AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2B6C0; } @@ -7889,7 +8338,17 @@ L_08B2B6C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B6D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7911,7 +8370,6 @@ L_08B2B6FC: L_08B2B708: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2B764; } @@ -7920,7 +8378,6 @@ L_08B2B708: L_08B2B714: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B764; } @@ -7933,7 +8390,6 @@ L_08B2B720: AOT_REGCACHE_SYNC_OUT(); return; L_08B2B728: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2B764; } @@ -7967,7 +8423,17 @@ L_08B2B764: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B77C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7988,7 +8454,6 @@ L_08B2B79C: L_08B2B7A8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2B7BC; } @@ -8007,7 +8472,17 @@ L_08B2B7BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2B7D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -8057,7 +8532,6 @@ L_08B2B86C: L_08B2B878: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B2BA34; } @@ -8110,7 +8584,6 @@ L_08B2B8C4: goto L_08B2B8C8; L_08B2B8C8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8125,7 +8598,6 @@ L_08B2B8D0: L_08B2B8DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7980))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8135,7 +8607,6 @@ L_08B2B8E8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1360))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8157,7 +8628,6 @@ L_08B2B8F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2B918: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8167,7 +8637,6 @@ L_08B2B920: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8196,7 +8665,6 @@ L_08B2B940: } L_08B2B950: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8227,7 +8695,6 @@ L_08B2B968: L_08B2B978: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8236,7 +8703,6 @@ L_08B2B978: L_08B2B984: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8256,7 +8722,6 @@ L_08B2B990: AOT_REGCACHE_SYNC_OUT(); return; L_08B2B9A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8266,9 +8731,7 @@ L_08B2B9B0: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8276,9 +8739,7 @@ L_08B2B9B0: } L_08B2B9C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8306,7 +8767,6 @@ L_08B2B9F8: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2BA2C; } @@ -8358,7 +8818,17 @@ L_08B2BA48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BA84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8398,7 +8868,6 @@ L_08B2BADC: goto L_08B2BAE8; L_08B2BAE8: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; - // nop if (branch_taken) { goto L_08B2BB00; } @@ -8442,7 +8911,6 @@ L_08B2BB24: goto L_08B2BB28; L_08B2BB28: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B2BB44; } @@ -8451,7 +8919,6 @@ L_08B2BB28: L_08B2BB30: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(676))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2BB44; } @@ -8494,7 +8961,17 @@ L_08B2BB6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BB88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8543,7 +9020,17 @@ L_08B2BBF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BC10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8571,7 +9058,6 @@ L_08B2BC48: AOT_REGCACHE_SYNC_OUT(); return; L_08B2BC58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2BC84; } @@ -8580,7 +9066,6 @@ L_08B2BC58: L_08B2BC60: ctx.gpr[18] = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B2BC84; } @@ -8594,7 +9079,6 @@ L_08B2BC6C: L_08B2BC74: aot_gpr_4 = (0u | 2u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B2BC84; } @@ -8655,7 +9139,6 @@ L_08B2BCDC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2BCF8; } @@ -8678,7 +9161,17 @@ L_08B2BCF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BD14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -8707,7 +9200,6 @@ L_08B2BD5C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(1914))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2BDD8; } @@ -8720,9 +9212,7 @@ L_08B2BD7C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2BDC4; } @@ -8745,7 +9235,6 @@ L_08B2BDAC: AOT_REGCACHE_SYNC_OUT(); return; L_08B2BDB8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2BDC4; } @@ -8759,7 +9248,6 @@ L_08B2BDC4: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[20] + static_cast(1914))); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2BD7C; } @@ -8817,7 +9305,6 @@ L_08B2BE34: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2BE54; } @@ -8849,7 +9336,17 @@ L_08B2BE5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BE7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -8884,7 +9381,17 @@ L_08B2BEC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BED8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8918,7 +9425,17 @@ L_08B2BF0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BF2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8954,7 +9471,6 @@ L_08B2BF70: AOT_REGCACHE_SYNC_OUT(); return; L_08B2BF78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2BF88; } @@ -8978,7 +9494,17 @@ L_08B2BF88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2BFA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9004,7 +9530,6 @@ L_08B2BFCC: AOT_REGCACHE_SYNC_OUT(); return; L_08B2BFD8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0202_entry, 202u, 2u, 0x08B2C014u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0202.cpp b/profiles/vcs/generated/generated_unit_0202.cpp index 1249f07..a0abaa1 100644 --- a/profiles/vcs/generated/generated_unit_0202.cpp +++ b/profiles/vcs/generated/generated_unit_0202.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0202[4086] = { - 1, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, - 7, 0, 0, 8, 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, - 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 0, - 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 25, - 0, 0, 0, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, - 0, 0, 0, 0, 33, 34, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, - 48, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 0, - 0, 54, 55, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, - 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, - 76, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, - 0, 0, 83, 0, 0, 84, 0, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0, 0, 89, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 92, 0, 0, 93, 0, 94, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, - 0, 0, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 0, 0, 0, 108, 109, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 120, 121, 0, 122, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 128, 0, 0, 0, 0, 0, 129, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 131, 0, 0, 0, 132, 0, 0, 0, 133, 0, 0, 134, 0, 135, 136, 0, 137, 0, - 138, 0, 0, 0, 139, 140, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, - 0, 145, 146, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, 0, 150, 0, 0, - 0, 151, 0, 0, 152, 0, 153, 154, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, - 0, 0, 0, 159, 160, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 164, 0, 0, 0, - 0, 0, 165, 166, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 0, 0, 0, 0, 171, - 172, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 0, 178, - 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 182, 0, 183, 0, 184, 0, 185, 0, 0, 0, - 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 188, 0, 0, 0, 189, 0, 0, 0, 190, 0, 191, 0, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 194, 0, 195, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, - 0, 198, 0, 0, 0, 199, 0, 0, 0, 200, 0, 201, 0, 0, 202, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 0, 207, 208, 0, - 0, 0, 0, 0, 209, 0, 210, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 212, 0, 0, 0, 0, 0, 213, 214, 0, 0, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 220, 0, 221, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 0, - 224, 0, 225, 226, 0, 227, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 0, 0, 0, 230, 0, 231, 232, 0, 233, 234, 0, 0, 0, 0, 0, 0, - 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, 239, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, 0, 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 250, 251, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 255, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 0, 262, 0, 0, 0, 263, 0, 0, - 264, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 266, 0, 267, 0, 0, 0, 0, 0, 268, 0, 0, 269, 0, 0, 270, 0, 0, 0, 0, 271, 0, - 0, 272, 0, 0, 0, 0, 0, 273, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, 279, 0, 0, 280, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 286, 0, 287, 0, - 0, 0, 0, 288, 0, 0, 289, 0, 0, 290, 0, 0, 291, 0, 0, 0, 292, 0, 293, 0, 0, 294, 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, - 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, - 0, 0, 302, 0, 0, 0, 303, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 308, - 0, 0, 0, 309, 0, 0, 310, 0, 0, 311, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, - 315, 0, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 321, 0, - 322, 0, 0, 323, 0, 324, 0, 325, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 329, 0, 0, 0, 0, 0, 0, 0, - 330, 0, 0, 331, 0, 0, 0, 0, 0, 332, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 336, 0, - 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 343, 344, - 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 347, 0, 0, 0, 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, - 0, 350, 0, 351, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 0, 0, 0, 0, 0, - 0, 0, 362, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 0, 0, 367, 0, 368, 0, 0, 369, - 0, 370, 0, 0, 0, 371, 0, 372, 0, 373, 0, 374, 0, 0, 375, 0, 0, 376, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, - 0, 0, 0, 0, 0, 380, 0, 381, 0, 0, 0, 0, 382, 0, 0, 383, 0, 384, 0, 0, 0, 385, 0, 0, 0, 0, 386, 0, 0, 0, 0, 387, - 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 396, 397, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 0, 0, - 0, 400, 0, 0, 401, 0, 0, 0, 0, 0, 402, 403, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, - 406, 0, 0, 0, 407, 0, 0, 0, 0, 0, 408, 0, 0, 409, 0, 0, 0, 0, 410, 0, 411, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, - 0, 413, 0, 0, 0, 414, 0, 415, 0, 416, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 420, - 0, 0, 0, 0, 421, 422, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, 0, 0, - 0, 427, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 430, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 434, - 0, 435, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 438, 0, 439, 440, 0, 441, 0, 0, 442, 0, 0, 443, 0, 0, 0, 444, 0, 445, 0, - 446, 0, 0, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 454, 0, - 0, 455, 0, 0, 0, 0, 0, 456, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 460, 0, 0, 0, 0, 461, 0, 0, 0, 0, - 0, 462, 0, 0, 0, 0, 463, 0, 464, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 471, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 476, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 479, 0, 480, 0, 481, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 484, - 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 487, 488, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 500, 0, 0, 501, 0, 502, 0, 0, 0, 0, 503, 0, 504, 0, 0, 0, 0, 505, 0, - 506, 507, 0, 508, 0, 0, 0, 509, 0, 510, 0, 511, 0, 0, 0, 512, 0, 0, 513, 0, 0, 0, 0, 0, 514, 0, 515, 0, 0, 0, 0, 0, - 516, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, 0, 0, 0, 0, 521, 0, 522, 523, 0, 0, 0, 0, 524, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 527, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 530, 0, 0, 0, 0, - 531, 532, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 536, 0, 0, 0, 0, 0, 537, 538, 0, - 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, - 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 547, 0, 548, 0, 549, 0, 550, 0, - 0, 0, 0, 0, 0, 551, 0, 552, 0, 0, 553, 554, 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 557, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 566, 0, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, - 570, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 575, 0, - 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, 581, 0, 0, - 0, 0, 0, 0, 582, 0, 0, 0, 0, 583, 584, 0, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 588, 0, 0, 589, 0, 0, 590, 0, 591, 0, 0, 0, 0, 592, 0, 593, 0, 0, 0, 0, 594, 0, 595, 596, 0, 597, 0, 0, 0, 598, - 0, 599, 0, 600, 0, 0, 0, 601, 0, 0, 602, 0, 603, 0, 604, 0, 0, 0, 0, 0, 605, 0, 606, 0, 0, 0, 0, 0, 607, 0, 0, 0, - 608, 0, 0, 609, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 613, 614, 0, 0, 0, 0, 615, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 618, 0, 0, 0, 0, - 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 621, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 623, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, - 0, 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 633, - 0, 0, 634, 0, 635, 0, 636, 0, 0, 0, 0, 637, 0, 638, 0, 0, 0, 0, 639, 0, 640, 641, 0, 642, 0, 0, 0, 643, 0, 644, 0, 645, - 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 648, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 652, 0, 0, 0, - 0, 0, 653, 0, 0, 654, 0, 0, 0, 0, 655, 656, 0, 657, 0, 658, 0, 0, 659, 0, 0, 660, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 665, 0, 0, - 0, 0, 666, 0, 0, 667, 0, 0, 0, 0, 0, 0, 668, 0, 0, 669, 670, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 673, 0, 0, 674, 0, 0, 675, 0, 676, 0, 0, 677, 0, 678, 0, 679, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, - 0, 681, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 685, 0, - 686, 687, 0, 0, 0, 0, 0, 0, 688, 0, 689, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, 0, 0, 0, 0, 692, 693, 0, 0, 0, - 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, 697, 0, 698, 699, 0, 0, 0, 0, 0, 0, - 700, 0, 701, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 710, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, - 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, - 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 721, 0, 0, 0, 722, 0, 723, 0, 724, 725, 0, 0, 0, 0, 0, 0, 726, 0, - 727, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 0, 0, 730, 731, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 733, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 740, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, - 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 744, 0, 0, 0, 0, 0, 745, 0, 0, 0, 746, 0, 0, 747, 0, 0, 0, 0, - 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 752, 0, 0, - 0, 0, 753, 754, 0, 0, 755, 0, 0, 0, 756, 0, 0, 0, 757, 0, 758, 0, 759, 0, 0, 0, 760, 0, 761, 0, 762, 0, 763, 764, 0, 0, - 0, 0, 0, 0, 0, 0, 765, 0, 766, 0, 0, 0, 0, 0, 0, 767, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 769, 770, 0, 771, 0, - 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 775, 0, 0, 0, 776, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0202[64] = { + 0x12028629090010A1ull, 0x900404010900040Cull, 0x12000830480A0188ull, 0x0400004800202100ull, + 0x0901402102401010ull, 0x0041002822240106ull, 0x2008101200208889ull, 0x224010A404112811ull, + 0x044044A401040000ull, 0x00418240500C2401ull, 0x20B0210280680048ull, 0x5A44480041240480ull, + 0x2240040609014031ull, 0x11200818240500D2ull, 0x888900418240500Cull, 0x8288900415448020ull, + 0x62514A2240021480ull, 0x0120000101824050ull, 0x0368122D0A152000ull, 0x124480200030480Aull, + 0x0022448000432404ull, 0x4248290122482100ull, 0x0092240004008282ull, 0x2425124852208400ull, + 0x9004124480200828ull, 0x4480104912008248ull, 0x48020609014030A9ull, 0x01848020C1202806ull, + 0x028041200830480Aull, 0xA0124AA294490104ull, 0x04214480842290A0ull, 0x20020C1202806090ull, + 0x90040AA204142411ull, 0x0000010609014030ull, 0x5125A14292000402ull, 0x0848828245048911ull, + 0x0082080200004342ull, 0xA01A920041010212ull, 0x02000090042C0840ull, 0x0804000001000048ull, + 0x05048A8B42852400ull, 0x9004000086841091ull, 0x6090140309004000ull, 0x5509000820224010ull, + 0x1200801200808CA0ull, 0x2020004802024010ull, 0x2401042848480201ull, 0x0008040000010610ull, + 0x1050548A8B428524ull, 0x0900400008684109ull, 0x8401200081048008ull, 0x8000200000100814ull, + 0x11404888A8B42854ull, 0x2400400008A4AC24ull, 0x0415292008119024ull, 0x1824050340480082ull, + 0x0818240503448008ull, 0x1000480081000480ull, 0x40D4480208092008ull, 0x1010024001060901ull, + 0x0910480204110900ull, 0x3545444C22009002ull, 0x1120200858108140ull, 0x0020010000004000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0202[64] = { + 1u, 16u, 26u, 38u, 44u, 54u, 65u, 76u, 90u, 99u, 111u, 124u, 138u, 151u, 165u, 179u, + 193u, 209u, 218u, 235u, 247u, 258u, 272u, 282u, 297u, 309u, 322u, 337u, 350u, 362u, 380u, 394u, + 406u, 421u, 430u, 446u, 462u, 471u, 485u, 494u, 499u, 516u, 528u, 539u, 551u, 562u, 570u, 582u, + 588u, 608u, 619u, 628u, 634u, 653u, 666u, 681u, 694u, 707u, 714u, 727u, 737u, 748u, 765u, 777u, }; void recomp_unit_0202_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0202_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B2C000u; - entry_id = (entry_delta < 16344u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0202[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16344u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0202[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0202[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B2C000; @@ -972,7 +879,17 @@ L_08B2C01C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C030: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1002,7 +919,6 @@ L_08B2C06C: L_08B2C080: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(4))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2C094; } @@ -1077,7 +993,6 @@ L_08B2C0F0: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2C10C; } @@ -1100,7 +1015,17 @@ L_08B2C10C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C128: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1157,7 +1082,17 @@ L_08B2C1A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C1C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1180,7 +1115,6 @@ L_08B2C1FC: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2C220; } @@ -1190,7 +1124,6 @@ L_08B2C20C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_5 = (aot_gpr_5 & 256u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2C220; } @@ -1251,7 +1184,6 @@ L_08B2C278: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2C294; } @@ -1273,7 +1205,17 @@ L_08B2C294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C2AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1332,7 +1274,17 @@ L_08B2C334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C354: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -1463,7 +1415,17 @@ L_08B2C410: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C430: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1489,7 +1451,6 @@ L_08B2C464: ctx.gpr[7] = (128u << 16u); ctx.gpr[7] = (aot_gpr_5 & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B2C494; } @@ -1554,7 +1515,6 @@ L_08B2C4EC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2C508; } @@ -1576,7 +1536,17 @@ L_08B2C508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C520: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1626,7 +1596,6 @@ L_08B2C574: AOT_REGCACHE_SYNC_OUT(); return; L_08B2C58C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2C5C0; } @@ -1661,7 +1630,17 @@ L_08B2C5C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C5D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1719,7 +1698,17 @@ L_08B2C63C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C654: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -1764,7 +1753,17 @@ L_08B2C6B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C6CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1787,7 +1786,6 @@ L_08B2C700: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2C734; } @@ -1805,7 +1803,6 @@ L_08B2C710: AOT_REGCACHE_SYNC_OUT(); return; L_08B2C72C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2C750; } @@ -1836,7 +1833,17 @@ L_08B2C750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C768: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1868,7 +1875,17 @@ L_08B2C79C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C7B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -1933,7 +1950,17 @@ L_08B2C848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C860: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2006,7 +2033,17 @@ L_08B2C8E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C900: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2030,7 +2067,6 @@ L_08B2C934: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2196))); ctx.gpr[6] = (0u | 38u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2C94C; } @@ -2091,7 +2127,6 @@ L_08B2C9A4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2C9C0; } @@ -2113,7 +2148,17 @@ L_08B2C9C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2C9D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -2154,7 +2199,6 @@ L_08B2CA18: AOT_REGCACHE_SYNC_OUT(); return; L_08B2CA4C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2CA58; } @@ -2215,7 +2259,6 @@ L_08B2CAB4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2CAD4; } @@ -2245,7 +2288,17 @@ L_08B2CADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CAF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2305,7 +2358,17 @@ L_08B2CB60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CB78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2336,7 +2399,6 @@ L_08B2CBC8: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_17 = (0u | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B2CC14; } @@ -2345,7 +2407,6 @@ L_08B2CBC8: L_08B2CBD8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1864))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2CC14; } @@ -2353,7 +2414,6 @@ L_08B2CBD8: } L_08B2CBE4: { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B2CBF0; } @@ -2369,7 +2429,6 @@ L_08B2CBF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2CBF8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2CC14; } @@ -2379,7 +2438,6 @@ L_08B2CC00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1864))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2CC14; } @@ -2440,7 +2498,6 @@ L_08B2CC6C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2CC88; } @@ -2464,7 +2521,17 @@ L_08B2CC88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CCA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -2495,7 +2562,6 @@ L_08B2CCF4: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08B2CD1C; } @@ -2504,7 +2570,6 @@ L_08B2CCF4: L_08B2CD04: aot_gpr_17 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(1864))); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08B2CD1C; } @@ -2512,7 +2577,6 @@ L_08B2CD04: } L_08B2CD10: { const bool branch_taken = aot_gpr_17 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2CD1C; } @@ -2573,7 +2637,6 @@ L_08B2CD74: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2CD90; } @@ -2596,7 +2659,17 @@ L_08B2CD90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CDAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2619,7 +2692,6 @@ L_08B2CDE0: aot_gpr_5 = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2CE0C; } @@ -2631,7 +2703,6 @@ L_08B2CDF0: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2CE0C; } @@ -2692,7 +2763,6 @@ L_08B2CE64: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2CE80; } @@ -2714,7 +2784,17 @@ L_08B2CE80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CE98: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2772,7 +2852,17 @@ L_08B2CEFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CF14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2795,7 +2885,6 @@ L_08B2CF48: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2CF68; } @@ -2803,12 +2892,10 @@ L_08B2CF48: } L_08B2CF58: aot_gpr_31 = (0x08B2CF60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0065_entry, 65u, 912u, 0x0890BA20u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2CF60u) goto L_08B2CF60; AOT_REGCACHE_SYNC_OUT(); return; L_08B2CF60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2CF70; } @@ -2816,7 +2903,6 @@ L_08B2CF60: } L_08B2CF68: aot_gpr_31 = (0x08B2CF70u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0065_entry, 65u, 925u, 0x0890BB1Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2CF70u) goto L_08B2CF70; AOT_REGCACHE_SYNC_OUT(); return; L_08B2CF70: @@ -2832,7 +2918,17 @@ L_08B2CF70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CF88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -2888,7 +2984,17 @@ L_08B2CFE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2CFFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2920,7 +3026,17 @@ L_08B2D030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D044: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -2956,7 +3072,6 @@ L_08B2D094: AOT_REGCACHE_SYNC_OUT(); return; L_08B2D0A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2D0D8; } @@ -2965,7 +3080,6 @@ L_08B2D0A4: L_08B2D0AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D0D8; } @@ -3062,7 +3176,6 @@ L_08B2D144: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D160; } @@ -3086,7 +3199,17 @@ L_08B2D160: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D180: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[13]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(aot_fpr_30), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3194,7 +3317,6 @@ L_08B2D288: goto L_08B2D28C; L_08B2D28C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D2D8; } @@ -3204,7 +3326,6 @@ L_08B2D294: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2D2B0; } @@ -3213,7 +3334,6 @@ L_08B2D294: L_08B2D2A4: ctx.gpr[6] = (aot_mem.aot_direct_load32(aot_gpr_17 + static_cast(20))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2D2D8; } @@ -3231,7 +3351,6 @@ L_08B2D2B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2D2CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2D2D8; } @@ -3302,7 +3421,6 @@ L_08B2D338: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D354; } @@ -3334,7 +3452,17 @@ L_08B2D354: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D394: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3390,7 +3518,17 @@ L_08B2D3F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D408: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3411,7 +3549,6 @@ L_08B2D428: L_08B2D434: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D444; } @@ -3429,7 +3566,17 @@ L_08B2D444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D458: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -3460,7 +3607,6 @@ L_08B2D4A8: L_08B2D4B8: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B2D624; } @@ -3492,7 +3638,6 @@ L_08B2D4D4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[19] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D534; } @@ -3558,7 +3703,6 @@ L_08B2D580: aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(72), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B2D5B4; } @@ -3567,7 +3711,6 @@ L_08B2D580: L_08B2D5A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == aot_gpr_17; - // nop if (branch_taken) { goto L_08B2D5B4; } @@ -3609,7 +3752,6 @@ L_08B2D5E4: L_08B2D5F8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D63C; } @@ -3626,7 +3768,6 @@ L_08B2D604: AOT_REGCACHE_SYNC_OUT(); return; L_08B2D61C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2D63C; } @@ -3659,7 +3800,17 @@ L_08B2D63C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D668: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -3690,7 +3841,6 @@ L_08B2D6B4: L_08B2D6C4: aot_gpr_17 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08B2D814; } @@ -3721,7 +3871,6 @@ L_08B2D6DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D73C; } @@ -3758,7 +3907,6 @@ L_08B2D754: aot_mem.aot_direct_store8(aot_gpr_17 + static_cast(312), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08B2D778; } @@ -3772,7 +3920,6 @@ L_08B2D764: AOT_REGCACHE_SYNC_OUT(); return; L_08B2D770: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2D78C; } @@ -3833,7 +3980,6 @@ L_08B2D7D4: L_08B2D7E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2D82C; } @@ -3850,7 +3996,6 @@ L_08B2D7F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B2D80C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2D82C; } @@ -3882,7 +4027,17 @@ L_08B2D82C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D854: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3938,7 +4093,17 @@ L_08B2D8B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D8C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -3994,7 +4159,17 @@ L_08B2D924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D93C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4050,7 +4225,17 @@ L_08B2D998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2D9B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -4078,7 +4263,6 @@ L_08B2D9E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2D9F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2DA34; } @@ -4087,7 +4271,6 @@ L_08B2D9F8: L_08B2DA00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2DA34; } @@ -4095,12 +4278,10 @@ L_08B2DA00: } L_08B2DA0C: aot_gpr_31 = (0x08B2DA14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0191_entry, 191u, 456u, 0x08B01BA4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2DA14u) goto L_08B2DA14; AOT_REGCACHE_SYNC_OUT(); return; L_08B2DA14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2DA34; } @@ -4111,7 +4292,6 @@ L_08B2DA1C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B2DA34; } @@ -4172,7 +4352,6 @@ L_08B2DA8C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2DAA8; } @@ -4195,7 +4374,17 @@ L_08B2DAA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DAC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4217,7 +4406,6 @@ L_08B2DAEC: L_08B2DAF8: aot_gpr_4 = (0u | 0u); { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2DB08; } @@ -4278,7 +4466,6 @@ L_08B2DB60: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2DB7C; } @@ -4300,7 +4487,17 @@ L_08B2DB7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DB94: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4324,7 +4521,6 @@ L_08B2DBC8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2236))); ctx.gpr[6] = (0u | 12u); { const bool branch_taken = aot_gpr_5 != ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2DBE0; } @@ -4385,7 +4581,6 @@ L_08B2DC38: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2DC54; } @@ -4407,7 +4602,17 @@ L_08B2DC54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DC6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4452,7 +4657,6 @@ L_08B2DCB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2DCDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2DD08; } @@ -4483,7 +4687,17 @@ L_08B2DD08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DD20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4504,7 +4718,6 @@ L_08B2DD40: L_08B2DD4C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2DE68; } @@ -4522,7 +4735,6 @@ L_08B2DD58: } L_08B2DD68: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B2DE68; } @@ -4551,7 +4763,6 @@ L_08B2DD84: } L_08B2DD94: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2DDA4; } @@ -4613,7 +4824,6 @@ L_08B2DDFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B2DE14: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2DE30; } @@ -4663,7 +4873,17 @@ L_08B2DE68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DE7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4685,7 +4905,6 @@ L_08B2DEA8: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2DED4; } @@ -4693,7 +4912,6 @@ L_08B2DEA8: } L_08B2DEB8: aot_gpr_31 = (0x08B2DEC0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0127_entry, 127u, 371u, 0x08A01528u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B2DEC0u) goto L_08B2DEC0; AOT_REGCACHE_SYNC_OUT(); return; L_08B2DEC0: @@ -4713,7 +4931,17 @@ L_08B2DED4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DEE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4738,7 +4966,6 @@ L_08B2DF1C: ctx.gpr[6] = (1u << 16u); aot_gpr_5 = (aot_gpr_5 & ctx.gpr[6]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2DF38; } @@ -4799,7 +5026,6 @@ L_08B2DF90: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2DFAC; } @@ -4821,7 +5047,17 @@ L_08B2DFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2DFC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -4857,7 +5093,6 @@ L_08B2E010: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(236), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_17 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2E0AC; } @@ -4879,7 +5114,6 @@ L_08B2E034: AOT_REGCACHE_SYNC_OUT(); return; L_08B2E048: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2E0AC; } @@ -4891,7 +5125,6 @@ L_08B2E050: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_5 = (aot_gpr_4 & 2048u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2E0AC; } @@ -4926,7 +5159,6 @@ L_08B2E094: goto L_08B2E09C; L_08B2E09C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E0AC; } @@ -4951,7 +5183,17 @@ L_08B2E0AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E0C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -4975,7 +5217,6 @@ L_08B2E0FC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(468))); aot_gpr_5 = (aot_gpr_5 & 8192u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2E114; } @@ -5036,7 +5277,6 @@ L_08B2E16C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2E188; } @@ -5058,7 +5298,17 @@ L_08B2E188: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E1A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(aot_fpr_30), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5170,7 +5420,6 @@ L_08B2E2BC: goto L_08B2E2C0; L_08B2E2C0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5185,7 +5434,6 @@ L_08B2E2C8: L_08B2E2D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7980))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5195,7 +5443,6 @@ L_08B2E2E0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5208,7 +5455,6 @@ L_08B2E2F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2E2F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5228,7 +5474,6 @@ L_08B2E310: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5247,7 +5492,6 @@ L_08B2E32C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(464))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5256,7 +5500,6 @@ L_08B2E32C: L_08B2E33C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1340))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5286,7 +5529,6 @@ L_08B2E368: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5295,7 +5537,6 @@ L_08B2E368: L_08B2E378: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5312,7 +5553,6 @@ L_08B2E384: AOT_REGCACHE_SYNC_OUT(); return; L_08B2E39C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5322,9 +5562,7 @@ L_08B2E3A4: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2E418; } @@ -5332,9 +5570,7 @@ L_08B2E3A4: } L_08B2E3BC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_30)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2E418; } @@ -5360,7 +5596,6 @@ L_08B2E3EC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2E418; } @@ -5419,7 +5654,17 @@ L_08B2E438: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E484: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5454,7 +5699,17 @@ L_08B2E4C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E4DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5520,7 +5775,17 @@ L_08B2E560: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E578: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5548,7 +5813,6 @@ L_08B2E5B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2E5BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2E5CC; } @@ -5617,7 +5881,6 @@ L_08B2E62C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2E64C; } @@ -5646,7 +5909,17 @@ L_08B2E654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E668: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5690,7 +5963,17 @@ L_08B2E69C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E6E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -5734,7 +6017,17 @@ L_08B2E718: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E760: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(aot_fpr_30), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -5847,7 +6140,6 @@ L_08B2E880: goto L_08B2E884; L_08B2E884: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5857,7 +6149,6 @@ L_08B2E88C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5870,7 +6161,6 @@ L_08B2E89C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2E8A4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5880,7 +6170,6 @@ L_08B2E8AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5889,7 +6178,6 @@ L_08B2E8AC: L_08B2E8BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5906,7 +6194,6 @@ L_08B2E8C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2E8E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5916,9 +6203,7 @@ L_08B2E8E8: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5926,9 +6211,7 @@ L_08B2E8E8: } L_08B2E900: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_30)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2E95C; } @@ -5954,7 +6237,6 @@ L_08B2E930: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2E95C; } @@ -6013,7 +6295,17 @@ L_08B2E97C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2E9C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6054,7 +6346,17 @@ L_08B2E9FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EA38: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6078,7 +6380,6 @@ L_08B2EA6C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(460))); aot_gpr_5 = (aot_gpr_5 & 8192u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2EA84; } @@ -6139,7 +6440,6 @@ L_08B2EADC: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2EAF8; } @@ -6161,7 +6461,17 @@ L_08B2EAF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EB10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6211,7 +6521,17 @@ L_08B2EB74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EB8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -6236,7 +6556,6 @@ L_08B2EBCC: aot_gpr_4 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(29704), aot_gpr_4); { const bool branch_taken = aot_gpr_17 == 0u; - // nop if (branch_taken) { goto L_08B2EC2C; } @@ -6249,7 +6568,6 @@ L_08B2EBE0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2EBE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2EC2C; } @@ -6267,7 +6585,6 @@ L_08B2EBF8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2EC2C; } @@ -6309,7 +6626,17 @@ L_08B2EC3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EC5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6346,7 +6673,17 @@ L_08B2EC90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2ECBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6380,7 +6717,17 @@ L_08B2ECF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2ED10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6414,7 +6761,17 @@ L_08B2ED44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2ED64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6455,7 +6812,17 @@ L_08B2ED98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EDD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -6486,7 +6853,17 @@ L_08B2EE00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EE24: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6510,7 +6887,6 @@ L_08B2EE58: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2EEA8; } @@ -6535,7 +6911,6 @@ L_08B2EE78: AOT_REGCACHE_SYNC_OUT(); return; L_08B2EE8C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B2EEA8; } @@ -6562,7 +6937,17 @@ L_08B2EEA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EEC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6621,7 +7006,17 @@ L_08B2EF28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2EF40: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(aot_fpr_30), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6734,7 +7129,6 @@ L_08B2F060: goto L_08B2F064; L_08B2F064: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6744,7 +7138,6 @@ L_08B2F06C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(76))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6757,7 +7150,6 @@ L_08B2F07C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2F084: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6767,7 +7159,6 @@ L_08B2F08C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[30]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6776,7 +7167,6 @@ L_08B2F08C: L_08B2F09C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2236))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6789,7 +7179,6 @@ L_08B2F0A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2F0B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6806,7 +7195,6 @@ L_08B2F0B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2F0D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6816,9 +7204,7 @@ L_08B2F0D8: aot_gpr_4 = (aot_gpr_16 + static_cast(48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6826,9 +7212,7 @@ L_08B2F0D8: } L_08B2F0F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_30)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6854,7 +7238,6 @@ L_08B2F120: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(456), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[21] + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2F14C; } @@ -6913,7 +7296,17 @@ L_08B2F16C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F1B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -6947,7 +7340,17 @@ L_08B2F1EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F20C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -6990,7 +7393,17 @@ L_08B2F260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F27C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[6]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7021,7 +7434,6 @@ L_08B2F2C0: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -7032,7 +7444,6 @@ L_08B2F2C0: L_08B2F2E8: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B2F310; @@ -7074,7 +7485,17 @@ L_08B2F32C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F350: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[16]{std::bit_cast(ctx.fpr[20]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(aot_fpr_30), aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -7123,7 +7544,6 @@ L_08B2F3FC: } L_08B2F408: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B2F534; } @@ -7176,7 +7596,6 @@ L_08B2F450: goto L_08B2F454; L_08B2F454: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B2F52C; } @@ -7186,7 +7605,6 @@ L_08B2F45C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2276))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2F52C; } @@ -7199,7 +7617,6 @@ L_08B2F46C: AOT_REGCACHE_SYNC_OUT(); return; L_08B2F474: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2F52C; } @@ -7219,7 +7636,6 @@ L_08B2F48C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(460))); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2F52C; } @@ -7229,7 +7645,6 @@ L_08B2F49C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(24))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B2F4B8; } @@ -7238,7 +7653,6 @@ L_08B2F49C: L_08B2F4AC: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2F52C; } @@ -7257,7 +7671,6 @@ L_08B2F4B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2F4D8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B2F52C; } @@ -7367,7 +7780,17 @@ L_08B2F56C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F5B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7392,7 +7815,6 @@ L_08B2F5F4: aot_gpr_5 = (0u + static_cast(-1)); aot_mem.aot_direct_store32(aot_gpr_17 + static_cast(29704), aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2F640; } @@ -7401,7 +7823,6 @@ L_08B2F5F4: L_08B2F608: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2076))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2F640; } @@ -7414,7 +7835,6 @@ L_08B2F614: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B2F640; } @@ -7450,7 +7870,17 @@ L_08B2F650: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F66C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7477,7 +7907,6 @@ L_08B2F6A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B2F6AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2F6E8; } @@ -7531,7 +7960,17 @@ L_08B2F704: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F71C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7557,9 +7996,7 @@ L_08B2F758: aot_fpr_13 = std::bit_cast(aot_gpr_4); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2F780; } @@ -7626,7 +8063,6 @@ L_08B2F7D4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2F7F0; } @@ -7649,7 +8085,17 @@ L_08B2F7F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F80C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7673,7 +8119,6 @@ L_08B2F848: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1360))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2F860; } @@ -7740,7 +8185,6 @@ L_08B2F8B4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2F8D0; } @@ -7763,7 +8207,17 @@ L_08B2F8D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F8EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7814,7 +8268,17 @@ L_08B2F960: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2F97C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -7865,7 +8329,17 @@ L_08B2F9F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FA0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7887,7 +8361,6 @@ L_08B2FA34: L_08B2FA40: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2FA6C; } @@ -7916,7 +8389,17 @@ L_08B2FA6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FA84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -7947,7 +8430,6 @@ L_08B2FAB8: } L_08B2FAC8: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B2FAD8; } @@ -8014,7 +8496,6 @@ L_08B2FB2C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2FB48; } @@ -8036,7 +8517,17 @@ L_08B2FB48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FB60: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -8086,7 +8577,17 @@ L_08B2FBD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FBF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], aot_gpr_31}; @@ -8146,7 +8647,17 @@ L_08B2FC68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FC84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8202,7 +8713,17 @@ L_08B2FCEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FD04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, aot_gpr_17, aot_gpr_31}; @@ -8255,9 +8776,7 @@ L_08B2FD64: L_08B2FD74: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B2FDF0; } @@ -8269,7 +8788,6 @@ L_08B2FD88: L_08B2FD8C: aot_gpr_4 = (static_cast(aot_gpr_4) < 3 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2FDF0; } @@ -8301,7 +8819,6 @@ L_08B2FDB8: goto L_08B2FDC0; L_08B2FDC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B2FDF0; } @@ -8311,7 +8828,6 @@ L_08B2FDC8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(2228))); ctx.gpr[6] = (0u | 45u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[6]; - // nop if (branch_taken) { goto L_08B2FDF0; } @@ -8324,7 +8840,6 @@ L_08B2FDD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B2FDE0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B2FDF0; } @@ -8393,7 +8908,6 @@ L_08B2FE50: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B2FE70; } @@ -8422,7 +8936,17 @@ L_08B2FE78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B2FE8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, aot_gpr_17, ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0203.cpp b/profiles/vcs/generated/generated_unit_0203.cpp index 21ac9b5..a249cd3 100644 --- a/profiles/vcs/generated/generated_unit_0203.cpp +++ b/profiles/vcs/generated/generated_unit_0203.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0203[4093] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, 0, 0, 16, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 30, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, - 44, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 50, 0, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64, 0, 0, 65, 0, 0, 0, 66, 0, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, - 0, 0, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, - 76, 0, 0, 0, 77, 0, 0, 0, 78, 0, 79, 0, 0, 0, 80, 0, 0, 0, 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 90, 0, 0, 91, 0, 92, 0, 93, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, - 99, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 0, 0, 105, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 111, 0, 0, 112, 0, 0, 0, 113, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 117, 0, 0, 118, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, - 123, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, 137, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 0, 0, 147, 0, 0, 148, 0, 149, 0, 0, 0, 150, 0, 0, - 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 160, 0, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 163, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 0, 0, 0, 166, 167, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 169, 0, 0, 0, - 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, - 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 179, 0, 0, 0, - 180, 0, 0, 181, 0, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 185, 0, 0, 0, 186, 0, 0, - 187, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 191, 0, 0, 0, 192, 0, 0, 193, 0, 194, - 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 198, 0, 0, 0, 199, - 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 204, 0, 0, 0, 205, 0, 0, 206, - 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 214, 215, 0, 216, 0, 217, 0, 218, - 219, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 222, 0, 223, 0, 0, 0, 224, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 227, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 235, 0, - 236, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, - 0, 241, 0, 242, 0, 243, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, - 254, 0, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 259, 0, 260, 0, 0, - 0, 261, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 265, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 271, 0, 0, 0, - 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 276, 0, 277, 0, 278, 0, 279, 0, 280, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, 0, - 285, 286, 0, 287, 0, 0, 288, 289, 0, 290, 0, 0, 291, 0, 292, 0, 293, 0, 0, 294, 0, 295, 0, 296, 0, 0, 297, 0, 298, 0, 299, 0, - 0, 0, 300, 301, 0, 302, 0, 0, 0, 303, 304, 0, 0, 305, 0, 0, 306, 0, 0, 307, 0, 0, 0, 308, 309, 0, 310, 0, 0, 0, 311, 0, - 0, 0, 312, 0, 0, 313, 0, 0, 314, 0, 0, 315, 316, 0, 317, 0, 0, 318, 0, 0, 319, 0, 0, 0, 320, 0, 321, 0, 0, 322, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 324, 0, 0, 325, 326, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, - 330, 0, 0, 331, 0, 332, 0, 0, 333, 0, 0, 334, 0, 0, 335, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, - 0, 0, 0, 0, 342, 0, 0, 343, 0, 344, 0, 345, 0, 346, 0, 347, 0, 348, 0, 349, 0, 0, 350, 0, 351, 0, 0, 352, 353, 0, 354, 0, - 0, 355, 356, 0, 357, 0, 0, 358, 0, 359, 0, 360, 0, 0, 361, 362, 0, 363, 0, 0, 364, 0, 365, 0, 366, 0, 0, 0, 367, 368, 0, 369, - 0, 0, 0, 370, 371, 0, 0, 372, 0, 0, 373, 0, 0, 374, 0, 0, 0, 375, 376, 0, 377, 0, 0, 0, 378, 0, 0, 0, 379, 0, 0, 380, - 0, 0, 381, 0, 0, 382, 383, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 0, 387, 388, 0, 389, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 393, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 396, 0, 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, - 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, 0, 404, 0, 405, 0, 0, 406, 0, 0, 0, 0, 407, 0, 0, 408, - 0, 0, 0, 0, 0, 409, 0, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 416, 0, 417, 0, 418, 0, 419, 0, 420, 0, 421, - 0, 422, 0, 0, 423, 0, 424, 0, 0, 425, 426, 0, 427, 0, 0, 428, 429, 0, 430, 0, 0, 431, 0, 432, 0, 433, 0, 0, 434, 0, 435, 0, - 436, 0, 0, 437, 0, 438, 0, 439, 0, 0, 0, 440, 441, 0, 442, 0, 0, 0, 443, 444, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, 0, 0, - 448, 449, 0, 450, 0, 0, 0, 451, 0, 0, 0, 452, 0, 0, 453, 0, 0, 454, 0, 0, 455, 456, 0, 457, 0, 0, 458, 0, 0, 459, 0, 0, - 0, 460, 461, 0, 462, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 465, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 469, 0, 0, 470, - 0, 0, 471, 0, 472, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, 475, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 479, - 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, - 0, 0, 0, 0, 0, 489, 0, 0, 490, 491, 0, 492, 0, 493, 0, 0, 494, 0, 0, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 497, 0, 498, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 500, 0, 0, 501, 0, 0, 502, 0, 0, 0, 503, 0, 0, 504, 0, 505, 0, 0, 506, 0, 507, 0, 508, 0, 0, 509, 0, 0, 510, 0, 0, 511, - 512, 0, 0, 0, 513, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 517, 0, 0, 0, 518, 0, 0, 0, 519, 0, - 0, 0, 520, 0, 521, 0, 0, 0, 522, 0, 0, 0, 523, 0, 524, 0, 0, 0, 525, 0, 0, 526, 0, 0, 527, 0, 0, 528, 0, 529, 0, 530, - 0, 531, 0, 0, 0, 532, 0, 533, 534, 0, 535, 0, 0, 0, 536, 0, 537, 538, 0, 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 541, 0, 0, 542, 0, 0, 543, 0, 0, 544, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 0, - 548, 0, 549, 0, 550, 0, 551, 0, 0, 552, 0, 0, 553, 0, 554, 0, 0, 555, 0, 0, 556, 0, 557, 558, 0, 0, 0, 0, 0, 559, 0, 560, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, - 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 568, 0, 569, 0, 570, 0, 571, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 0, 0, 0, 0, 574, - 0, 575, 0, 0, 0, 576, 0, 0, 0, 577, 578, 0, 0, 0, 579, 0, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 0, 582, 0, 583, 0, - 0, 0, 0, 584, 0, 0, 585, 586, 0, 0, 587, 0, 0, 588, 0, 0, 589, 590, 0, 591, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 594, 0, 0, 595, 596, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, - 601, 0, 0, 602, 0, 603, 0, 604, 0, 0, 605, 0, 0, 0, 0, 606, 0, 0, 607, 0, 0, 0, 0, 0, 608, 0, 609, 0, 0, 0, 0, 0, - 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 613, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, - 617, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, - 0, 622, 0, 623, 0, 624, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, - 0, 628, 0, 629, 0, 0, 0, 0, 0, 0, 630, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 633, 0, 634, 0, 635, 0, 636, 0, - 637, 0, 0, 0, 638, 0, 639, 0, 640, 0, 641, 0, 0, 0, 0, 0, 0, 0, 642, 0, 643, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 646, - 0, 647, 0, 648, 0, 649, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 652, 0, 0, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, - 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 660, 0, 661, 0, 0, 0, 0, 662, 0, 663, 0, 664, 0, 0, 665, - 0, 666, 0, 667, 0, 668, 0, 0, 0, 669, 0, 670, 0, 0, 0, 671, 0, 672, 0, 0, 0, 673, 0, 674, 0, 0, 0, 675, 0, 676, 0, 0, - 0, 677, 0, 678, 0, 0, 0, 0, 679, 0, 680, 0, 0, 0, 681, 0, 682, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 684, 0, 0, - 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 0, 0, 692, 0, 0, 0, - 0, 693, 0, 694, 0, 0, 0, 695, 0, 0, 0, 0, 696, 0, 697, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, - 700, 0, 701, 0, 0, 702, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, - 0, 0, 705, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 707, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 710, 0, 711, - 712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 714, 0, 715, 0, 716, 0, 0, - 0, 0, 0, 0, 717, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 721, 0, 0, 0, 0, 722, 0, 723, 0, 0, 0, 0, 0, 0, - 724, 0, 725, 726, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 728, 0, 729, 0, 730, 0, 0, 0, 731, 0, 732, 0, 733, 0, 0, 0, 734, - 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, - 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 741, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, 744, 0, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 747, 0, 748, 0, 749, 0, 0, 0, 0, 750, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 757, 0, 758, 0, 0, 0, 0, 759, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 763, 0, 764, 0, 0, 0, 765, - 0, 766, 0, 0, 0, 0, 767, 0, 768, 769, 0, 0, 770, 0, 0, 771, 0, 0, 0, 0, 772, 0, 0, 773, 0, 774, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 778, 0, 779, 0, - 0, 0, 0, 780, 0, 0, 0, 0, 0, 781, 782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 786, 0, - 0, 0, 787, 0, 788, 0, 0, 0, 0, 789, 0, 790, 0, 791, 0, 0, 792, 0, 0, 793, 0, 0, 794, 0, 795, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 796, 797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 799, 0, 800, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 801, 802, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 807, 0, 808, 0, - 0, 0, 809, 0, 810, 0, 0, 0, 0, 811, 0, 812, 813, 0, 0, 814, 0, 0, 815, 0, 0, 816, 0, 817, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 821, 0, 822, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0203[64] = { + 0x0002401008008005ull, 0x0020912008244802ull, 0x1044008008844411ull, 0x0020412002002211ull, + 0x0040822120020412ull, 0x0200012008104424ull, 0x8020922401044448ull, 0x0104451140080144ull, + 0x5492008008080024ull, 0x8008201524802080ull, 0x0082489004085104ull, 0x0024010920208092ull, + 0x1240104808004802ull, 0x2292448021202080ull, 0x8248900411112008ull, 0x4010609014031200ull, + 0x2240104912008002ull, 0x89004100A4480209ull, 0x2024010491200824ull, 0x11408011AB500000ull, + 0x5408014080114080ull, 0x0448422A02102005ull, 0x29002211400A0022ull, 0x1400845005001102ull, + 0x2955521000020002ull, 0x4589262C54A952CBull, 0x6420000025125924ull, 0x1048492922100000ull, + 0x594AAA9048000200ull, 0x91162498B152CA96ull, 0x00021000022C4964ull, 0x9094900290124908ull, + 0xAAA42400020020A0ull, 0x124C58A952A59652ull, 0x8400009624B2488Bull, 0x9404921492420000ull, + 0x801200010020A090ull, 0x00400000A2212B20ull, 0x444281119254A449ull, 0x001B45A2A9245114ull, + 0xA0D2525540092490ull, 0x4008000020020400ull, 0x5044462282215510ull, 0x00C84000004B24C8ull, + 0x050484A912210000ull, 0x0000021002008001ull, 0x0200000200000000ull, 0x8008006A10204081ull, + 0x9054055155200C0Aull, 0x950A44222909082Aull, 0x2101450A28A28A2Aull, 0x4004508A11550108ull, + 0xA803020408000225ull, 0x000080302A002001ull, 0x8A8A820D02842000ull, 0x8102040810000010ull, + 0x0401854010015400ull, 0x0030A80100120000ull, 0x029093428A080001ull, 0x0040060854010010ull, + 0x01492A1448001000ull, 0x000000000A020018ull, 0x50800010002010C0ull, 0x1500400400A49A14ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0203[64] = { + 1u, 8u, 19u, 30u, 39u, 49u, 58u, 71u, 83u, 94u, 105u, 117u, 128u, 138u, 151u, 164u, + 176u, 187u, 200u, 212u, 225u, 236u, 249u, 261u, 272u, 285u, 312u, 327u, 339u, 355u, 381u, 393u, + 409u, 422u, 448u, 466u, 480u, 489u, 500u, 520u, 541u, 561u, 566u, 584u, 597u, 610u, 615u, 617u, + 628u, 647u, 666u, 685u, 700u, 712u, 720u, 735u, 742u, 753u, 761u, 775u, 784u, 796u, 801u, 809u, }; void recomp_unit_0203_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0203_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B30000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0203[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0203[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0203[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B30000; @@ -1044,7 +951,17 @@ L_08B3006C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30090: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1086,7 +1003,17 @@ L_08B300C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30104: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1131,7 +1058,17 @@ L_08B30154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3016C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1176,7 +1113,17 @@ L_08B301BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B301D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1258,7 +1205,17 @@ L_08B3026C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3029C: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1340,7 +1297,17 @@ L_08B30334: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30364: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1383,7 +1350,17 @@ L_08B303B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B303D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1426,7 +1403,17 @@ L_08B30428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30444: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1486,7 +1473,17 @@ L_08B304BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B304D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1546,7 +1543,17 @@ L_08B30550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3056C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1589,7 +1596,17 @@ L_08B305A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B305E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1647,7 +1664,17 @@ L_08B30648: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30660: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1703,7 +1730,17 @@ L_08B306BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B306D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1726,7 +1763,6 @@ L_08B30708: aot_gpr_16 = (ctx.gpr[2] | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3074C; } @@ -1769,7 +1805,6 @@ L_08B3074C: goto L_08B30778; L_08B30778: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B30790; } @@ -1793,7 +1828,6 @@ L_08B30790: goto L_08B307A0; L_08B307A0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B307B8; } @@ -1828,7 +1862,17 @@ L_08B307C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B307E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1868,7 +1912,17 @@ L_08B30814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3084C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1896,7 +1950,17 @@ L_08B3086C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3089C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1918,7 +1982,6 @@ L_08B308C4: L_08B308D0: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B3091C; } @@ -1927,7 +1990,6 @@ L_08B308D0: L_08B308DC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3091C; } @@ -1940,7 +2002,6 @@ L_08B308E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B308F0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3091C; } @@ -1970,7 +2031,17 @@ L_08B3091C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30934: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1992,7 +2063,6 @@ L_08B3095C: L_08B30968: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B309B4; } @@ -2001,7 +2071,6 @@ L_08B30968: L_08B30974: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B309B4; } @@ -2014,7 +2083,6 @@ L_08B30980: AOT_REGCACHE_SYNC_OUT(); return; L_08B30988: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B309B4; } @@ -2044,7 +2112,17 @@ L_08B309B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B309CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2080,7 +2158,6 @@ L_08B30A20: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1784))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(676))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B30A38; } @@ -2088,7 +2165,6 @@ L_08B30A20: } L_08B30A30: aot_gpr_31 = (0x08B30A38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0031_entry, 31u, 452u, 0x08882930u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B30A38u) goto L_08B30A38; AOT_REGCACHE_SYNC_OUT(); return; L_08B30A38: @@ -2116,7 +2192,17 @@ L_08B30A4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30A68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2172,7 +2258,17 @@ L_08B30AC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30ADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2194,7 +2290,6 @@ L_08B30B04: L_08B30B10: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B30B3C; } @@ -2223,7 +2318,17 @@ L_08B30B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2256,7 +2361,17 @@ L_08B30B8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30BA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2294,7 +2409,17 @@ L_08B30BD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30C04: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2333,7 +2458,17 @@ L_08B30C38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2361,7 +2496,17 @@ L_08B30C98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30CB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2383,7 +2528,6 @@ L_08B30CD8: L_08B30CE4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B30D1C; } @@ -2415,7 +2559,17 @@ L_08B30D1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30D34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2442,7 +2596,17 @@ L_08B30D60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30D74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2516,7 +2680,17 @@ L_08B30DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30E0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2574,7 +2748,17 @@ L_08B30E70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30E88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2630,7 +2814,17 @@ L_08B30EE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2653,7 +2847,6 @@ L_08B30F30: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1712))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B30F44; } @@ -2714,7 +2907,6 @@ L_08B30F9C: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(518))); aot_gpr_4 = (static_cast(aot_gpr_4) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B30FB8; } @@ -2736,7 +2928,17 @@ L_08B30FB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B30FD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2776,7 +2978,17 @@ L_08B31004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3103C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2832,7 +3044,17 @@ L_08B31098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B310B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2888,7 +3110,17 @@ L_08B3110C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B31124: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2925,7 +3157,6 @@ L_08B31168: } L_08B31174: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B311A0; } @@ -2940,7 +3171,6 @@ L_08B3117C: aot_gpr_4 = (aot_gpr_5 | aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(476), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B311A0; } @@ -2959,7 +3189,17 @@ L_08B311A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B311B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3015,7 +3255,17 @@ L_08B31214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3122C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3071,7 +3321,17 @@ L_08B31288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B312A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -3105,7 +3365,17 @@ L_08B312D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B312F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -3122,7 +3392,6 @@ L_08B312F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B31350: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B31360; } @@ -3141,7 +3410,6 @@ L_08B31360: goto L_08B31364; L_08B31364: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B314F0; } @@ -3149,7 +3417,6 @@ L_08B31364: } L_08B3136C: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B31380; } @@ -3167,7 +3434,6 @@ L_08B31380: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B313E0; } @@ -3199,7 +3465,6 @@ L_08B313BC: AOT_REGCACHE_SYNC_OUT(); return; L_08B313D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31804; } @@ -3209,7 +3474,6 @@ L_08B313E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31440; } @@ -3241,7 +3505,6 @@ L_08B3141C: AOT_REGCACHE_SYNC_OUT(); return; L_08B31438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31804; } @@ -3251,7 +3514,6 @@ L_08B31440: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B314A0; } @@ -3283,7 +3545,6 @@ L_08B3147C: AOT_REGCACHE_SYNC_OUT(); return; L_08B31498: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31804; } @@ -3315,7 +3576,6 @@ L_08B314CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B314E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31804; } @@ -3388,7 +3648,6 @@ L_08B31584: AOT_REGCACHE_SYNC_OUT(); return; L_08B3158C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B31798; } @@ -3398,7 +3657,6 @@ L_08B31594: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2192))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B31680; } @@ -3409,7 +3667,6 @@ L_08B315A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2196))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31680; } @@ -3420,7 +3677,6 @@ L_08B315B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B31680; } @@ -3456,7 +3712,6 @@ L_08B31604: aot_fpr_12 = ctx.fpr[0] + ctx.fpr[26]; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(112))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B31678; } @@ -3479,7 +3734,6 @@ L_08B31614: AOT_REGCACHE_SYNC_OUT(); return; L_08B31644: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B31678; } @@ -3508,13 +3762,11 @@ L_08B3164C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); jump_target = aot_gpr_6; aot_gpr_31 = (0x08B31678u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B31678u) goto L_08B31678; AOT_REGCACHE_SYNC_OUT(); return; L_08B31678: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B317F0; } @@ -3524,7 +3776,6 @@ L_08B31680: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B317F0; } @@ -3535,7 +3786,6 @@ L_08B31690: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B317F0; } @@ -3545,7 +3795,6 @@ L_08B316A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(680))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B316E0; } @@ -3592,7 +3841,6 @@ L_08B316B4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B316F4; } @@ -3643,7 +3891,6 @@ L_08B31720: aot_fpr_12 = ctx.fpr[0] + ctx.fpr[26]; aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(160))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B31790; } @@ -3666,7 +3913,6 @@ L_08B31730: AOT_REGCACHE_SYNC_OUT(); return; L_08B31760: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B31790; } @@ -3700,7 +3946,6 @@ L_08B31768: AOT_REGCACHE_SYNC_OUT(); return; L_08B31790: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B317F0; } @@ -3710,7 +3955,6 @@ L_08B31798: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1784))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(676))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B317F0; } @@ -3721,7 +3965,6 @@ L_08B317A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(236))); aot_gpr_4 = (aot_gpr_4 & ctx.gpr[21]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B317F0; } @@ -3781,7 +4024,17 @@ L_08B31804: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B31844: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -3858,7 +4111,6 @@ L_08B318D0: } L_08B318D8: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B31994; } @@ -3867,7 +4119,6 @@ L_08B318D8: L_08B318E0: aot_gpr_6 = (0u | 119u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B3190C; } @@ -3875,7 +4126,6 @@ L_08B318E0: } L_08B318EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -3884,7 +4134,6 @@ L_08B318EC: L_08B318F4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31904; } @@ -3895,7 +4144,6 @@ L_08B31900: goto L_08B31904; L_08B31904: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -3904,7 +4152,6 @@ L_08B31904: L_08B3190C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3191C; } @@ -3915,7 +4162,6 @@ L_08B31918: goto L_08B3191C; L_08B3191C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -3924,7 +4170,6 @@ L_08B3191C: L_08B31924: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31938; } @@ -3936,7 +4181,6 @@ L_08B31930: goto L_08B31938; L_08B31938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -3945,7 +4189,6 @@ L_08B31938: L_08B31940: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31954; } @@ -3957,7 +4200,6 @@ L_08B3194C: goto L_08B31954; L_08B31954: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -3966,7 +4208,6 @@ L_08B31954: L_08B3195C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31970; } @@ -3978,7 +4219,6 @@ L_08B31968: goto L_08B31970; L_08B31970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -3988,7 +4228,6 @@ L_08B31978: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); aot_gpr_4 = (0u | 16u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B3198C; } @@ -3999,7 +4238,6 @@ L_08B31988: goto L_08B3198C; L_08B3198C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B319A8; } @@ -4009,7 +4247,6 @@ L_08B31994: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B319A8; } @@ -4021,7 +4258,6 @@ L_08B319A4: L_08B319A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B319E8; } @@ -4036,7 +4272,6 @@ L_08B319B4: L_08B319C0: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B319E0; } @@ -4064,7 +4299,6 @@ L_08B319E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B31A08; } @@ -4074,7 +4308,6 @@ L_08B319F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(29704))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31A38; } @@ -4089,7 +4322,6 @@ L_08B31A08: L_08B31A14: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B31A30; } @@ -4167,7 +4399,6 @@ L_08B31A74: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -4178,9 +4409,7 @@ L_08B31A74: L_08B31AD4: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B31AF8; } @@ -4264,7 +4493,6 @@ L_08B31B64: L_08B31B74: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B31B8C; } @@ -4309,7 +4537,6 @@ L_08B31BB8: L_08B31BCC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B31BF0; } @@ -4344,7 +4571,17 @@ L_08B31BF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B31C24: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -4428,7 +4665,6 @@ L_08B31CBC: } L_08B31CC4: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B31D7C; } @@ -4437,7 +4673,6 @@ L_08B31CC4: L_08B31CCC: aot_gpr_6 = (0u | 119u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B31CF8; } @@ -4445,7 +4680,6 @@ L_08B31CCC: } L_08B31CD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4454,7 +4688,6 @@ L_08B31CD8: L_08B31CE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31CF0; } @@ -4465,7 +4698,6 @@ L_08B31CEC: goto L_08B31CF0; L_08B31CF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4474,7 +4706,6 @@ L_08B31CF0: L_08B31CF8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31D08; } @@ -4485,7 +4716,6 @@ L_08B31D04: goto L_08B31D08; L_08B31D08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4494,7 +4724,6 @@ L_08B31D08: L_08B31D10: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31D24; } @@ -4506,7 +4735,6 @@ L_08B31D1C: goto L_08B31D24; L_08B31D24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4515,7 +4743,6 @@ L_08B31D24: L_08B31D2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31D3C; } @@ -4526,7 +4753,6 @@ L_08B31D38: goto L_08B31D3C; L_08B31D3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4535,7 +4761,6 @@ L_08B31D3C: L_08B31D44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31D58; } @@ -4547,7 +4772,6 @@ L_08B31D50: goto L_08B31D58; L_08B31D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4557,7 +4781,6 @@ L_08B31D60: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (0u | 16u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B31D74; } @@ -4568,7 +4791,6 @@ L_08B31D70: goto L_08B31D74; L_08B31D74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4578,7 +4800,6 @@ L_08B31D7C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B31D90; } @@ -4590,7 +4811,6 @@ L_08B31D8C: L_08B31D90: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31DD0; } @@ -4605,7 +4825,6 @@ L_08B31D9C: L_08B31DA8: ctx.gpr[23] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08B31DC8; } @@ -4623,7 +4842,6 @@ L_08B31DC4: goto L_08B31DC8; L_08B31DC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31E4C; } @@ -4633,7 +4851,6 @@ L_08B31DD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B31DF0; } @@ -4643,7 +4860,6 @@ L_08B31DE0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B31E20; } @@ -4658,7 +4874,6 @@ L_08B31DF0: L_08B31DFC: ctx.gpr[23] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08B31E18; } @@ -4675,7 +4890,6 @@ L_08B31E14: goto L_08B31E18; L_08B31E18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B31E4C; } @@ -4690,7 +4904,6 @@ L_08B31E20: L_08B31E2C: ctx.gpr[23] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08B31E4C; } @@ -4708,7 +4921,6 @@ L_08B31E48: goto L_08B31E4C; L_08B31E4C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B3201C; } @@ -4740,7 +4952,6 @@ L_08B31E64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B31EC4; } @@ -4841,7 +5052,6 @@ L_08B31F50: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(72), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B31F84; } @@ -4850,7 +5060,6 @@ L_08B31F50: L_08B31F70: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B31F84; } @@ -4908,7 +5117,6 @@ L_08B31FDC: L_08B31FF0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32034; } @@ -4925,7 +5133,6 @@ L_08B31FFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B32014: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32034; } @@ -4959,7 +5166,17 @@ L_08B32034: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32064: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -5042,7 +5259,6 @@ L_08B320F4: } L_08B320FC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B321B8; } @@ -5051,7 +5267,6 @@ L_08B320FC: L_08B32104: aot_gpr_6 = (0u | 119u); { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B32130; } @@ -5059,7 +5274,6 @@ L_08B32104: } L_08B32110: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5068,7 +5282,6 @@ L_08B32110: L_08B32118: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B32128; } @@ -5079,7 +5292,6 @@ L_08B32124: goto L_08B32128; L_08B32128: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5088,7 +5300,6 @@ L_08B32128: L_08B32130: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B32140; } @@ -5099,7 +5310,6 @@ L_08B3213C: goto L_08B32140; L_08B32140: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5108,7 +5318,6 @@ L_08B32140: L_08B32148: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3215C; } @@ -5120,7 +5329,6 @@ L_08B32154: goto L_08B3215C; L_08B3215C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5129,7 +5337,6 @@ L_08B3215C: L_08B32164: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B32178; } @@ -5141,7 +5348,6 @@ L_08B32170: goto L_08B32178; L_08B32178: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5150,7 +5356,6 @@ L_08B32178: L_08B32180: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B32194; } @@ -5162,7 +5367,6 @@ L_08B3218C: goto L_08B32194; L_08B32194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5172,7 +5376,6 @@ L_08B3219C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (0u | 16u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B321B0; } @@ -5183,7 +5386,6 @@ L_08B321AC: goto L_08B321B0; L_08B321B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5193,7 +5395,6 @@ L_08B321B8: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_4 = (0u | 17u); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B321CC; } @@ -5205,7 +5406,6 @@ L_08B321C8: L_08B321CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3220C; } @@ -5220,7 +5420,6 @@ L_08B321D8: L_08B321E4: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B32204; } @@ -5238,7 +5437,6 @@ L_08B32200: goto L_08B32204; L_08B32204: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32288; } @@ -5248,7 +5446,6 @@ L_08B3220C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B3222C; } @@ -5258,7 +5455,6 @@ L_08B3221C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(4))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3225C; } @@ -5273,7 +5469,6 @@ L_08B3222C: L_08B32238: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B32254; } @@ -5290,7 +5485,6 @@ L_08B32250: goto L_08B32254; L_08B32254: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32288; } @@ -5305,7 +5499,6 @@ L_08B3225C: L_08B32268: ctx.gpr[22] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B32288; } @@ -5323,7 +5516,6 @@ L_08B32284: goto L_08B32288; L_08B32288: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08B3243C; } @@ -5354,7 +5546,6 @@ L_08B3229C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B322FC; } @@ -5438,7 +5629,6 @@ L_08B32364: L_08B32370: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08B32390; } @@ -5452,7 +5642,6 @@ L_08B3237C: AOT_REGCACHE_SYNC_OUT(); return; L_08B32388: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B323A4; } @@ -5517,7 +5706,6 @@ L_08B323FC: L_08B32410: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32454; } @@ -5534,7 +5722,6 @@ L_08B3241C: AOT_REGCACHE_SYNC_OUT(); return; L_08B32434: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32454; } @@ -5567,7 +5754,17 @@ L_08B32454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32480: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], aot_gpr_31}; @@ -5599,7 +5796,6 @@ L_08B324D0: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_20 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(aot_fpr_12)) && ctx.fpr[22] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[17] = (0u | 6u); if (branch_taken) { @@ -5611,9 +5807,7 @@ L_08B324FC: aot_gpr_4 = (50042u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32524; } @@ -5635,7 +5829,6 @@ L_08B32524: AOT_REGCACHE_SYNC_OUT(); return; L_08B3252C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B32810; } @@ -5644,7 +5837,6 @@ L_08B3252C: L_08B32534: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32810; } @@ -5655,7 +5847,6 @@ L_08B32540: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32564; } @@ -5671,7 +5862,6 @@ L_08B32564: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(900))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B32600; } @@ -5728,7 +5918,6 @@ L_08B325D8: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3260C; } @@ -5743,7 +5932,6 @@ L_08B32600: L_08B3260C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32810; } @@ -5770,7 +5958,6 @@ L_08B32628: } L_08B32634: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32670; } @@ -5779,7 +5966,6 @@ L_08B32634: L_08B3263C: aot_gpr_4 = (0u | 3u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32680; } @@ -5795,7 +5981,6 @@ L_08B32648: } L_08B32650: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3267C; } @@ -5804,7 +5989,6 @@ L_08B32650: L_08B32658: aot_gpr_4 = (0u | 4u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32680; } @@ -5813,7 +5997,6 @@ L_08B32658: L_08B32664: aot_gpr_4 = (0u | 2u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32680; } @@ -5822,7 +6005,6 @@ L_08B32664: L_08B32670: aot_gpr_4 = (0u | 5u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32680; } @@ -5835,7 +6017,6 @@ L_08B32680: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(2228))); aot_gpr_6 = (0u | 63u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B326C4; } @@ -5865,7 +6046,6 @@ L_08B326A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B326BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B32810; } @@ -5876,7 +6056,6 @@ L_08B326C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_5 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B32738; } @@ -5886,7 +6065,6 @@ L_08B326D8: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); aot_gpr_6 = (0u | 10u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B32708; } @@ -5896,7 +6074,6 @@ L_08B326E8: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); aot_gpr_6 = (0u | 8u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B32708; } @@ -5906,7 +6083,6 @@ L_08B326F8: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); aot_gpr_6 = (0u | 20u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B32710; } @@ -5924,7 +6100,6 @@ L_08B32710: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); aot_gpr_6 = (0u | 11u); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B32730; } @@ -5934,7 +6109,6 @@ L_08B32720: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(2274))); aot_gpr_6 = (0u | 9u); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B327D0; } @@ -5961,7 +6135,6 @@ L_08B32738: L_08B32748: aot_gpr_6 = (static_cast(aot_gpr_5) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B327D0; } @@ -5970,7 +6143,6 @@ L_08B32748: L_08B32754: aot_gpr_4 = (static_cast(aot_gpr_5) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B327CC; } @@ -5979,7 +6151,6 @@ L_08B32754: L_08B32760: aot_gpr_4 = (0u | 4u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B327D0; } @@ -5995,7 +6166,6 @@ L_08B3276C: } L_08B32774: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B327A8; } @@ -6003,7 +6173,6 @@ L_08B32774: } L_08B3277C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B327D0; } @@ -6013,7 +6182,6 @@ L_08B32784: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B3279C; } @@ -6032,7 +6200,6 @@ L_08B3279C: goto L_08B327A0; L_08B327A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B327D0; } @@ -6042,7 +6209,6 @@ L_08B327A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1152))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(565))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B327C0; } @@ -6061,7 +6227,6 @@ L_08B327C0: goto L_08B327C4; L_08B327C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B327D0; } @@ -6146,7 +6311,6 @@ L_08B32880: AOT_REGCACHE_SYNC_OUT(); return; L_08B32888: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B328A4; } @@ -6188,7 +6352,6 @@ L_08B328C4: goto L_08B328D0; L_08B328D0: aot_gpr_31 = (0x08B328D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B328D8u) goto L_08B328D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B328D8: @@ -6251,7 +6414,17 @@ L_08B32944: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32974: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -6309,7 +6482,6 @@ L_08B32A10: goto L_08B32A20; L_08B32A20: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B32AB8; } @@ -6325,7 +6497,6 @@ L_08B32A28: } L_08B32A30: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32AB8; } @@ -6366,7 +6537,6 @@ L_08B32A64: AOT_REGCACHE_SYNC_OUT(); return; L_08B32A7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B32AA8; } @@ -6395,7 +6565,6 @@ L_08B32AA8: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); ctx.gpr[22] = (ctx.gpr[22] & 65535u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32A20; } @@ -6430,7 +6599,6 @@ L_08B32AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B32AF0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B32B1C; } @@ -6481,7 +6649,6 @@ L_08B32B40: goto L_08B32B44; L_08B32B44: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B32CE8; } @@ -6515,7 +6682,6 @@ L_08B32B58: aot_gpr_4 = (49864u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (50042u << 16u); if (branch_taken) { @@ -6526,9 +6692,7 @@ L_08B32B58: L_08B32BB8: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32BDC; } @@ -6622,7 +6786,6 @@ L_08B32C70: aot_mem.aot_direct_store8(ctx.gpr[22] + static_cast(312), static_cast(ctx.gpr[2])); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32C8C; } @@ -6660,7 +6823,6 @@ L_08B32CA8: L_08B32CBC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(522))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B32CE0; } @@ -6677,7 +6839,6 @@ L_08B32CC8: AOT_REGCACHE_SYNC_OUT(); return; L_08B32CE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B32D00; } @@ -6714,7 +6875,17 @@ L_08B32D00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32D3C: { const std::uint32_t vfpu_address = aot_gpr_6 + static_cast(0); std::uint32_t vfpu_words[4]{}; @@ -6768,11 +6939,20 @@ L_08B32D3C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32D64: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); aot_gpr_5 = (std::bit_cast(aot_fpr_13)); @@ -6784,11 +6964,20 @@ L_08B32D64: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<32u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32D90: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-3208))); aot_mem.aot_direct_store8(aot_gpr_6 + static_cast(6), static_cast(aot_gpr_4)); @@ -6798,7 +6987,17 @@ L_08B32D90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32DA4: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); aot_fpr_12 = std::bit_cast(0u); @@ -6838,7 +7037,17 @@ L_08B32DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B32E84: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -6872,9 +7081,7 @@ L_08B32EE4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32F8C; } @@ -6885,9 +7092,7 @@ L_08B32F00: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32F8C; } @@ -6898,9 +7103,7 @@ L_08B32F1C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32F8C; } @@ -6911,9 +7114,7 @@ L_08B32F38: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32F8C; } @@ -6924,9 +7125,7 @@ L_08B32F54: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B32F8C; } @@ -6945,7 +7144,6 @@ L_08B32F70: } L_08B32F84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B33028; } @@ -7016,7 +7214,6 @@ L_08B32FCC: AOT_REGCACHE_SYNC_OUT(); return; L_08B32FFC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B3300C; } @@ -7037,7 +7234,6 @@ L_08B3300C: ctx.gpr[21] = (static_cast(static_cast(ctx.gpr[21]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B32F98; } @@ -7063,7 +7259,17 @@ L_08B3302C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33054: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(62))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -7083,7 +7289,6 @@ L_08B33060: } L_08B33068: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B33078; } @@ -7095,11 +7300,20 @@ L_08B33070: goto L_08B33078; L_08B33078: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33080: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(62))); aot_gpr_6 = (0u | 1u); @@ -7112,7 +7326,6 @@ L_08B33080: } L_08B33090: { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B330A0; } @@ -7124,11 +7337,20 @@ L_08B33098: goto L_08B330A0; L_08B330A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B330A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(62))); @@ -7167,7 +7389,6 @@ L_08B330F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B330FC: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B3310C; } @@ -7180,7 +7401,6 @@ L_08B33104: AOT_REGCACHE_SYNC_OUT(); return; L_08B3310C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B330D0; } @@ -7199,11 +7419,20 @@ L_08B33114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3312C: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(24))); if (branch_taken) { @@ -7223,9 +7452,7 @@ L_08B33140: L_08B3314C: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3316C; } @@ -7246,9 +7473,7 @@ L_08B3316C: goto L_08B33174; L_08B33174: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33194; } @@ -7267,9 +7492,7 @@ L_08B33184: L_08B33194: ctx.fpr[0] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B331B8; } @@ -7292,11 +7515,20 @@ L_08B331B8: goto L_08B331C4; L_08B331C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B331CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7307,7 +7539,6 @@ L_08B331CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B331E0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B33204; } @@ -7315,13 +7546,11 @@ L_08B331E0: } L_08B331E8: aot_gpr_31 = (0x08B331F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B331F0u) goto L_08B331F0; AOT_REGCACHE_SYNC_OUT(); return; L_08B331F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3320C; } @@ -7329,7 +7558,6 @@ L_08B331F0: } L_08B331FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B33284; } @@ -7345,14 +7573,12 @@ L_08B33204: } L_08B3320C: aot_gpr_31 = (0x08B33214u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B33214u) goto L_08B33214; AOT_REGCACHE_SYNC_OUT(); return; L_08B33214: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33284; } @@ -7360,14 +7586,12 @@ L_08B33214: } L_08B33224: aot_gpr_31 = (0x08B3322Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3322Cu) goto L_08B3322C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3322C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33284; } @@ -7375,14 +7599,12 @@ L_08B3322C: } L_08B3323C: aot_gpr_31 = (0x08B33244u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B33244u) goto L_08B33244; AOT_REGCACHE_SYNC_OUT(); return; L_08B33244: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33284; } @@ -7390,14 +7612,12 @@ L_08B33244: } L_08B33254: aot_gpr_31 = (0x08B3325Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3325Cu) goto L_08B3325C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3325C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33284; } @@ -7405,14 +7625,12 @@ L_08B3325C: } L_08B3326C: aot_gpr_31 = (0x08B33274u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B33274u) goto L_08B33274; AOT_REGCACHE_SYNC_OUT(); return; L_08B33274: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B33358; } @@ -7420,7 +7638,6 @@ L_08B33274: } L_08B33284: aot_gpr_31 = (0x08B3328Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3328Cu) goto L_08B3328C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3328C: @@ -7428,7 +7645,6 @@ L_08B3328C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_5 = (0u | 55u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B33350; } @@ -7436,14 +7652,12 @@ L_08B3328C: } L_08B332A0: aot_gpr_31 = (0x08B332A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B332A8u) goto L_08B332A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B332A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2196))); aot_gpr_5 = (0u | 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33350; } @@ -7451,7 +7665,6 @@ L_08B332A8: } L_08B332B8: aot_gpr_31 = (0x08B332C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B332C0u) goto L_08B332C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B332C0: @@ -7460,9 +7673,7 @@ L_08B332C0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33348; } @@ -7471,9 +7682,7 @@ L_08B332C0: L_08B332E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33348; } @@ -7483,9 +7692,7 @@ L_08B332F4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33348; } @@ -7494,9 +7701,7 @@ L_08B332F4: L_08B3330C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33348; } @@ -7508,7 +7713,6 @@ L_08B33320: aot_gpr_4 = (15395u << 16u); aot_gpr_4 = (aot_gpr_4 | 55050u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -7550,9 +7754,7 @@ L_08B33358: } L_08B33360: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33400; } @@ -7561,9 +7763,7 @@ L_08B33360: L_08B33370: ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3338C; } @@ -7579,9 +7779,7 @@ L_08B33384: } L_08B3338C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33400; } @@ -7590,9 +7788,7 @@ L_08B3338C: L_08B3339C: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B333B8; } @@ -7608,9 +7804,7 @@ L_08B333B0: } L_08B333B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33400; } @@ -7626,9 +7820,7 @@ L_08B333C8: aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; aot_fpr_12 = aot_fpr_12 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33408; } @@ -7663,7 +7855,17 @@ L_08B33414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33424: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -7691,7 +7893,6 @@ L_08B3346C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); goto L_08B334C4; @@ -7702,7 +7903,6 @@ L_08B33488: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); goto L_08B334C4; @@ -7713,9 +7913,7 @@ L_08B334A4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_12 = aot_fpr_12 + aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B334F4; } @@ -7742,7 +7940,6 @@ L_08B334C4: } L_08B334EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B33590; } @@ -7813,7 +8010,6 @@ L_08B33534: AOT_REGCACHE_SYNC_OUT(); return; L_08B33564: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B33574; } @@ -7834,7 +8030,6 @@ L_08B33574: ctx.gpr[20] = (static_cast(static_cast(ctx.gpr[20]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B33500; } @@ -7860,7 +8055,17 @@ L_08B33594: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B335BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(116), aot_gpr_16); @@ -7898,7 +8103,6 @@ L_08B33634: ctx.gpr[17] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B33680; } @@ -7913,7 +8117,6 @@ L_08B33648: goto L_08B33710; L_08B3365C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B33688; } @@ -7926,7 +8129,6 @@ L_08B33664: ctx.gpr[17] = (static_cast(static_cast(ctx.gpr[17]) >> 16u)); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B33648; } @@ -7956,7 +8158,17 @@ L_08B3368C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B336A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{std::bit_cast(aot_fpr_20), aot_gpr_16, aot_gpr_31}; @@ -7975,7 +8187,6 @@ L_08B336BC: } L_08B336C4: aot_gpr_31 = (0x08B336CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B336CCu) goto L_08B336CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B336CC: @@ -7986,7 +8197,6 @@ L_08B336CC: goto L_08B33424; L_08B336DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B336FC; } @@ -7994,7 +8204,6 @@ L_08B336DC: } L_08B336E4: aot_gpr_31 = (0x08B336ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B336ECu) goto L_08B336EC; AOT_REGCACHE_SYNC_OUT(); return; L_08B336EC: @@ -8015,7 +8224,17 @@ L_08B336FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33710: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); @@ -8048,9 +8267,7 @@ L_08B33770: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33830; } @@ -8061,9 +8278,7 @@ L_08B3378C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33830; } @@ -8074,9 +8289,7 @@ L_08B337A8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_fpr_13 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33830; } @@ -8087,9 +8300,7 @@ L_08B337C4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33830; } @@ -8100,9 +8311,7 @@ L_08B337E0: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B33830; } @@ -8127,7 +8336,6 @@ L_08B337FC: } L_08B33828: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B338BC; } @@ -8196,7 +8404,6 @@ L_08B33870: AOT_REGCACHE_SYNC_OUT(); return; L_08B33898: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B338A8; } @@ -8241,7 +8448,17 @@ L_08B338C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B338E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); @@ -8327,7 +8544,6 @@ L_08B33980: AOT_REGCACHE_SYNC_OUT(); return; L_08B339AC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B339BC; } @@ -8373,7 +8589,17 @@ L_08B339D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); @@ -8451,7 +8677,6 @@ L_08B33AA0: L_08B33AA4: ctx.gpr[20] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B33B8C; } @@ -8460,7 +8685,6 @@ L_08B33AA4: L_08B33AB0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33B8C; } @@ -8471,7 +8695,6 @@ L_08B33ABC: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33B8C; } @@ -8484,7 +8707,6 @@ L_08B33AD0: goto L_08B33710; L_08B33ADC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B33B8C; } @@ -8558,7 +8780,6 @@ L_08B33B40: AOT_REGCACHE_SYNC_OUT(); return; L_08B33B68: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B33B78; } @@ -8617,7 +8838,17 @@ L_08B33BA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33BD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); @@ -8704,7 +8935,6 @@ L_08B33CAC: L_08B33CB4: ctx.gpr[19] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B33E30; } @@ -8713,7 +8943,6 @@ L_08B33CB4: L_08B33CC0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(180))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B33E30; } @@ -8726,7 +8955,6 @@ L_08B33CCC: goto L_08B33710; L_08B33CD8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B33E30; } @@ -8802,7 +9030,6 @@ L_08B33D44: AOT_REGCACHE_SYNC_OUT(); return; L_08B33D64: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B33E1C; } @@ -8915,7 +9142,6 @@ L_08B33E1C: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B33D10; } @@ -8958,7 +9184,17 @@ L_08B33E54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B33E90: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15976))); @@ -9035,7 +9271,6 @@ L_08B33F2C: L_08B33F30: ctx.gpr[20] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 1u, 0x08B34004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9044,7 +9279,6 @@ L_08B33F30: L_08B33F3C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 1u, 0x08B34004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9057,7 +9291,6 @@ L_08B33F48: goto L_08B33710; L_08B33F54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 1u, 0x08B34004u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9131,7 +9364,6 @@ L_08B33FB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B33FE0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B33FF0; } diff --git a/profiles/vcs/generated/generated_unit_0204.cpp b/profiles/vcs/generated/generated_unit_0204.cpp index 0691ad4..872d5f4 100644 --- a/profiles/vcs/generated/generated_unit_0204.cpp +++ b/profiles/vcs/generated/generated_unit_0204.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0204[4094] = { - 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, 10, 0, 11, 12, 0, 13, 0, 0, - 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 18, 0, 19, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 27, 0, 0, 0, 28, 0, 29, 0, 0, 0, - 0, 30, 0, 31, 32, 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 35, 0, 36, 37, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, - 0, 46, 0, 47, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 52, 0, 53, 0, 54, 0, 0, 55, 0, 56, 0, 0, - 0, 0, 0, 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 0, 66, - 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 70, 71, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 79, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, - 0, 82, 83, 0, 0, 84, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 89, 0, 0, 90, 91, 0, 92, - 0, 93, 0, 94, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 98, 0, 0, 99, 100, 0, 101, 0, 102, 103, 0, 0, - 104, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 109, 0, 0, 110, 111, 0, 112, 0, 113, 0, 114, 0, - 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 0, 0, 118, 0, 0, 119, 120, 0, 121, 0, 122, 123, 0, 124, 0, 125, 0, 0, 0, - 0, 0, 126, 0, 0, 0, 127, 0, 0, 128, 129, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 134, - 0, 135, 0, 0, 0, 136, 137, 0, 138, 0, 0, 0, 0, 139, 0, 140, 0, 0, 0, 141, 0, 0, 142, 143, 0, 0, 0, 144, 0, 0, 0, 145, - 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, 0, 0, 0, 149, 0, 0, 0, 150, 0, 151, 0, 152, 0, 153, 0, 0, 0, - 154, 155, 0, 156, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 161, - 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, 0, 0, 165, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, - 168, 0, 0, 0, 0, 169, 0, 170, 0, 171, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 174, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 175, 0, 0, 0, 176, 0, 0, 177, 0, 0, 178, 0, 0, 179, 0, 0, 180, 0, 0, 181, 0, 0, 182, 0, 0, 183, 0, 0, - 184, 0, 0, 185, 0, 0, 186, 0, 187, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 193, 0, 194, 0, 0, 0, 195, 0, 196, 0, 0, 0, 0, 197, 0, 198, 199, 0, 0, 200, 0, 0, 0, 0, 0, 201, 0, 202, 0, 0, - 0, 203, 0, 0, 0, 204, 0, 0, 0, 205, 0, 0, 206, 0, 0, 0, 207, 0, 208, 0, 0, 0, 0, 209, 0, 0, 210, 0, 0, 211, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 0, 0, 213, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 216, 0, 0, 217, 0, 0, 0, 218, 0, - 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 222, 0, - 223, 0, 0, 224, 0, 225, 226, 0, 0, 0, 0, 227, 0, 228, 0, 0, 229, 0, 0, 0, 230, 0, 231, 232, 0, 0, 0, 0, 0, 0, 233, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 236, 0, 0, 0, 237, - 0, 238, 0, 0, 0, 0, 239, 0, 240, 241, 0, 0, 242, 0, 0, 243, 0, 0, 244, 0, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 247, 0, - 248, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, - 0, 258, 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, 261, 0, 262, 0, 263, 0, 0, 264, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 267, 0, - 0, 0, 268, 269, 0, 0, 0, 270, 0, 0, 271, 0, 272, 0, 0, 273, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 279, 0, 0, 0, 0, 280, 0, 281, 0, 0, 282, - 0, 283, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, - 0, 0, 287, 0, 0, 288, 0, 289, 0, 290, 0, 0, 291, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, - 294, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, - 300, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, - 304, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 306, 0, 307, 0, 308, 0, 309, 0, 310, 0, 311, 0, 312, 313, 0, 314, 0, 0, - 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, - 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 324, 0, 325, 0, 326, 327, 0, 328, 0, - 0, 0, 0, 0, 0, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 0, 0, 340, 0, - 0, 0, 341, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 0, 347, 0, 348, - 0, 349, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, 0, 0, 0, 0, - 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 360, 0, 361, 0, 362, 0, 363, 0, 0, 364, 0, 0, 0, - 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, 371, 0, 0, - 0, 372, 0, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 379, 0, 380, 0, 0, 0, 381, 0, 0, 0, 382, - 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 386, 0, 387, 0, 388, 0, 0, 389, 0, 0, - 0, 390, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 395, 0, 396, 0, - 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 400, 0, 401, 0, 402, 0, 403, 0, 404, 0, 0, 405, 0, 0, 0, 406, 0, 407, - 0, 408, 0, 409, 0, 410, 0, 411, 0, 412, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, 0, - 0, 0, 0, 418, 0, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, 0, 422, 0, 423, 0, 424, 0, 0, 425, 0, 0, - 0, 426, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 432, 0, - 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 0, - 438, 0, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 444, 0, 0, 445, 0, 0, 0, 446, - 0, 0, 447, 0, 0, 0, 448, 0, 0, 449, 0, 0, 0, 450, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 454, 0, 0, 0, 455, 0, - 0, 456, 0, 0, 0, 457, 0, 0, 458, 0, 0, 459, 0, 0, 460, 0, 0, 0, 461, 0, 0, 462, 0, 0, 463, 0, 0, 464, 0, 0, 0, 465, - 0, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 469, 0, 0, 470, 0, 0, 471, 0, 0, 472, 0, 0, 0, 473, 0, 0, 474, 0, 475, - 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 478, 479, 0, 480, 0, 481, 0, 0, 482, 0, 483, 0, 484, 0, 0, - 485, 0, 0, 486, 0, 0, 0, 487, 488, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 491, 0, 0, 492, 0, 0, 493, 0, 0, 0, 494, 0, 495, - 0, 0, 496, 0, 497, 0, 498, 0, 0, 499, 0, 0, 500, 0, 0, 0, 0, 501, 0, 502, 0, 0, 503, 0, 504, 0, 505, 0, 0, 506, 0, 0, - 507, 0, 0, 0, 508, 509, 0, 0, 0, 0, 0, 0, 510, 0, 511, 0, 512, 0, 0, 513, 0, 0, 514, 0, 0, 0, 515, 0, 516, 0, 0, 517, - 0, 518, 0, 519, 0, 0, 520, 0, 0, 521, 0, 0, 0, 522, 0, 523, 0, 0, 524, 0, 525, 0, 526, 0, 0, 527, 0, 0, 528, 0, 0, 0, - 529, 0, 530, 0, 0, 531, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 534, 0, 535, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 0, 540, 0, 0, 0, 0, 541, 0, 0, 542, - 0, 0, 0, 0, 543, 0, 0, 544, 0, 0, 0, 0, 545, 0, 0, 546, 0, 0, 0, 0, 547, 0, 0, 548, 0, 0, 0, 0, 549, 0, 0, 550, - 0, 0, 0, 551, 0, 0, 552, 0, 0, 0, 553, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 0, 0, 558, 0, 0, 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, 561, 0, 0, 562, 0, 0, - 563, 0, 0, 564, 0, 0, 565, 0, 0, 0, 566, 0, 0, 567, 0, 0, 568, 0, 0, 569, 0, 0, 0, 570, 0, 0, 0, 571, 0, 0, 572, 0, - 0, 0, 0, 0, 573, 0, 0, 574, 0, 0, 575, 0, 0, 576, 0, 0, 577, 0, 0, 0, 578, 0, 0, 579, 0, 580, 0, 581, 582, 0, 0, 0, - 0, 0, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 586, 0, 587, 0, 588, 0, 0, 589, 0, 0, 0, 590, 0, 591, - 0, 592, 0, 0, 593, 0, 594, 0, 0, 0, 0, 595, 0, 596, 0, 0, 0, 0, 597, 0, 598, 0, 0, 599, 0, 0, 0, 600, 0, 601, 0, 0, - 602, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 606, - 0, 0, 0, 0, 0, 0, 607, 608, 0, 609, 0, 0, 0, 0, 610, 0, 0, 611, 0, 0, 612, 0, 0, 613, 0, 614, 0, 615, 0, 0, 0, 616, - 0, 0, 617, 0, 618, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 621, 0, 622, 0, 0, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 0, - 625, 0, 0, 626, 0, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, 632, - 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, - 0, 649, 0, 650, 0, 651, 0, 652, 0, 653, 0, 654, 0, 655, 0, 656, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 658, 0, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, - 0, 0, 664, 0, 0, 665, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 668, 0, 0, 0, 669, 0, 0, 0, 670, 0, 671, 0, - 672, 0, 673, 0, 0, 0, 674, 0, 0, 675, 0, 0, 0, 676, 0, 0, 677, 0, 0, 0, 0, 0, 678, 0, 0, 0, 679, 0, 0, 0, 680, 0, - 0, 0, 681, 0, 0, 0, 682, 0, 0, 0, 683, 0, 0, 684, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 688, 0, 0, 0, 0, 0, 689, 0, - 690, 0, 0, 0, 0, 691, 0, 0, 692, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 695, - 0, 0, 0, 0, 0, 696, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 0, 709, - 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 712, 0, 713, 0, 714, 0, 715, 0, 0, 0, - 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 722, 0, 723, 0, 724, 0, 0, 0, - 0, 0, 0, 0, 0, 725, 0, 726, 0, 0, 727, 0, 0, 0, 728, 0, 0, 0, 729, 0, 0, 0, 0, 730, 0, 0, 0, 0, 731, 0, 0, 0, - 0, 0, 732, 0, 733, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 735, 0, 736, 0, 737, 0, 738, 0, 0, 739, 0, 0, 0, 0, 740, 0, 0, - 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 743, 0, 744, 0, 745, 0, 746, 0, 0, 747, 0, 0, 0, 748, 0, 0, - 0, 749, 0, 0, 750, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 754, 0, 755, - 0, 756, 0, 757, 0, 758, 0, 0, 759, 0, 760, 0, 0, 0, 0, 0, 761, 0, 762, 0, 763, 0, 764, 0, 765, 0, 766, 0, 767, 0, 768, 0, - 769, 0, 770, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772, 0, 773, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 775, 0, 776, - 0, 0, 777, 0, 778, 0, 0, 0, 0, 779, 0, 780, 0, 781, 0, 782, 0, 0, 783, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 0, 0, 0, - 0, 789, 0, 0, 0, 0, 0, 790, 0, 791, 0, 792, 0, 0, 793, 0, 794, 0, 0, 0, 795, 0, 796, 0, 0, 0, 797, 0, 798, 0, 0, 0, - 799, 0, 800, 0, 801, 0, 0, 0, 0, 0, 0, 0, 0, 802, 803, 0, 804, 0, 805, 0, 806, 0, 0, 807, 0, 808, 0, 0, 0, 0, 0, 809, - 0, 810, 0, 811, 0, 812, 0, 813, 0, 814, 0, 815, 0, 816, 0, 817, 0, 818, 0, 819, 0, 820, 0, 821, 0, 822, 0, 823, 0, 824, 0, 825, - 0, 0, 0, 0, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 0, 832, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 834, 0, 835, - 0, 0, 836, 0, 837, 0, 0, 838, 0, 839, 0, 0, 840, 0, 841, 0, 0, 842, 0, 843, 0, 0, 844, 0, 845, 0, 0, 846, 847, 0, 0, 848, - 0, 0, 849, 0, 850, 0, 0, 0, 851, 0, 852, 0, 0, 0, 853, 0, 854, 0, 0, 0, 855, 0, 856, 0, 0, 0, 857, 858, 0, 859, 0, 860, - 0, 861, 0, 862, 863, 0, 0, 864, 0, 865, 0, 0, 866, 0, 867, 0, 868, 0, 0, 869, 0, 0, 870, 0, 871, 872, 0, 873, 0, 0, 0, 874, - 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 877, 878, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 879, 880, 0, 0, 0, 881, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 884, 0, 0, 0, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 889, 0, 890, 0, 0, 891, 0, 892, 0, 0, 893, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 895, 0, - 896, 0, 897, 0, 0, 0, 898, 0, 0, 0, 0, 899, 0, 900, 0, 0, 0, 0, 901, 0, 902, 0, 903, 0, 904, 0, 905, 0, 0, 0, 906, 0, - 0, 0, 0, 907, 0, 908, 0, 0, 0, 0, 909, 0, 910, 0, 911, 0, 912, 0, 0, 0, 913, 0, 0, 0, 0, 914, 0, 915, 0, 0, 0, 0, - 916, 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 918, 0, 919, 0, 0, 920, 0, 0, 0, 921, 0, 0, 922, 0, 0, 0, 0, 0, 0, - 0, 923, 0, 0, 0, 0, 924, 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, 926, 0, 927, 0, 928, 0, 929, 0, 930, 931, 0, 932, 0, 933, 0, - 934, 0, 935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 936, 0, 0, 0, 0, 0, 0, 0, 937, 0, 938, 0, 939, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0204[64] = { + 0x2D0A2820000800C1ull, 0x800C10A802002005ull, 0x0086829A14510000ull, 0x2951414A1428A004ull, + 0xB000000102410250ull, 0x0001158000000812ull, 0x4011502080000000ull, 0x3592804AB2500926ull, + 0x15AC940255928049ull, 0x88C8A162A0244644ull, 0x9024080B15446004ull, 0x0800508400000004ull, + 0x2492491004400AA1ull, 0x0004084000100549ull, 0x2485122228268514ull, 0x4801000844840A40ull, + 0x8A01000040D12869ull, 0x0120521141249342ull, 0x444950A240800020ull, 0x943401001002948Cull, + 0x000052A408008102ull, 0x0828200508000000ull, 0x2D55420108000841ull, 0x5AAA820104000410ull, + 0xAA02102445555540ull, 0x12A808A80420244Aull, 0x88AAAA022A010809ull, 0x5402101225404204ull, + 0x122282AAA2555404ull, 0x5402101225448108ull, 0x1109000000000004ull, 0x4489224489111111ull, + 0xA449224489244922ull, 0xA24A81892A562002ull, 0x94495031254A1254ull, 0x001509251254A24Aull, + 0x9091000000020000ull, 0x2000244890909090ull, 0x4889244924122280ull, 0xA25444081A912490ull, + 0x8102001128942852ull, 0x104521148A9242C0ull, 0xAAAAAAAAA0841209ull, 0x000000000010AAAAull, + 0x5112022404240424ull, 0x0000A44444412245ull, 0x8400212141200800ull, 0x15500002AAAAAAA0ull, + 0x108444A015200155ull, 0x22554008212A8214ull, 0x5555052AA8010812ull, 0x1554AA14A0814015ull, + 0x8295601514514A82ull, 0xA082AAA0AAAAAAAAull, 0xAC514514994A5294ull, 0x000000088B49529Aull, + 0x0000000000000000ull, 0x0C00000020000000ull, 0x0000000023000000ull, 0x0040000000000080ull, + 0x94A0800000440082ull, 0x4554284540004000ull, 0x0244A0090A115428ull, 0x2A02000556AA8042ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0204[64] = { + 1u, 14u, 25u, 39u, 57u, 67u, 75u, 82u, 104u, 126u, 146u, 162u, 168u, 184u, 193u, 212u, + 223u, 238u, 255u, 268u, 283u, 293u, 300u, 315u, 329u, 349u, 365u, 383u, 397u, 418u, 433u, 438u, + 456u, 476u, 496u, 518u, 537u, 543u, 556u, 573u, 592u, 607u, 625u, 649u, 658u, 672u, 686u, 696u, + 716u, 732u, 749u, 769u, 789u, 810u, 836u, 861u, 876u, 876u, 879u, 882u, 884u, 894u, 907u, 923u, }; void recomp_unit_0204_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0204_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B34004u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0204[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0204[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0204[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B34004; @@ -1144,7 +1051,17 @@ L_08B34020: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34050: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); @@ -1220,7 +1137,6 @@ L_08B340EC: goto L_08B340F0; L_08B340F0: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B341B4; } @@ -1234,7 +1150,6 @@ L_08B340F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B34104: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B341B4; } @@ -1308,7 +1223,6 @@ L_08B34168: goto L_08B356F8; L_08B34190: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B341A0; } @@ -1367,7 +1281,17 @@ L_08B341D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34200: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[22]); @@ -1399,7 +1323,6 @@ L_08B34244: goto L_08B34254; L_08B34254: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08B3426C; } @@ -1444,7 +1367,6 @@ L_08B34290: L_08B34294: aot_gpr_4 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B342CC; } @@ -1452,7 +1374,6 @@ L_08B34294: } L_08B342A0: { const bool branch_taken = aot_gpr_5 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B342CC; } @@ -1479,7 +1400,6 @@ L_08B342A8: goto L_08B35604; L_08B342C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B342CC; } @@ -1517,7 +1437,17 @@ L_08B342E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3430C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[19]); @@ -1537,7 +1467,6 @@ L_08B3430C: } L_08B34338: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08B34350; } @@ -1587,7 +1516,6 @@ L_08B34374: goto L_08B34388; L_08B34388: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B3441C; } @@ -1601,7 +1529,6 @@ L_08B34390: AOT_REGCACHE_SYNC_OUT(); return; L_08B3439C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3441C; } @@ -1628,7 +1555,6 @@ L_08B343A4: goto L_08B35604; L_08B343BC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B3441C; } @@ -1638,7 +1564,6 @@ L_08B343C4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3441C; } @@ -1651,7 +1576,6 @@ L_08B343D4: AOT_REGCACHE_SYNC_OUT(); return; L_08B343DC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3441C; } @@ -1665,7 +1589,6 @@ L_08B343E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B343F0: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B34414; } @@ -1685,7 +1608,6 @@ L_08B343F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B34414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B34428; } @@ -1714,7 +1636,17 @@ L_08B34428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34444: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1726,7 +1658,6 @@ L_08B34444: L_08B3445C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B34508; } @@ -1780,7 +1711,6 @@ L_08B344F4: goto L_08B344F8; L_08B344F8: aot_gpr_31 = (0x08B34500u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0022_entry, 22u, 936u, 0x0885FF14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B34500u) goto L_08B34500; AOT_REGCACHE_SYNC_OUT(); return; L_08B34500: @@ -1791,7 +1721,6 @@ L_08B34500: L_08B34508: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B345B4; } @@ -1845,7 +1774,6 @@ L_08B345A0: goto L_08B345A4; L_08B345A4: aot_gpr_31 = (0x08B345ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0022_entry, 22u, 936u, 0x0885FF14u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B345ACu) goto L_08B345AC; AOT_REGCACHE_SYNC_OUT(); return; L_08B345AC: @@ -1861,7 +1789,17 @@ L_08B345B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B345C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (49097u << 16u); @@ -1935,7 +1873,17 @@ L_08B345C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34680: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1972,7 +1920,17 @@ L_08B346C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B346D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -1992,7 +1950,6 @@ L_08B346D4: L_08B346FC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(76))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3470C; } @@ -2013,7 +1970,6 @@ L_08B3470C: L_08B34718: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(74))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B34790; } @@ -2034,7 +1990,6 @@ L_08B34730: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3475C; } @@ -2073,7 +2028,6 @@ L_08B34778: AOT_REGCACHE_SYNC_OUT(); return; L_08B34780: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B347F8; } @@ -2102,7 +2056,6 @@ L_08B3479C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B347C8; } @@ -2141,7 +2094,6 @@ L_08B347E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B347EC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B347F8; } @@ -2153,7 +2105,6 @@ L_08B347F4: L_08B347F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B348E4; } @@ -2162,7 +2113,6 @@ L_08B347F8: L_08B34804: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(75))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3487C; } @@ -2183,7 +2133,6 @@ L_08B3481C: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B34848; } @@ -2222,7 +2171,6 @@ L_08B34864: AOT_REGCACHE_SYNC_OUT(); return; L_08B3486C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B348E4; } @@ -2251,7 +2199,6 @@ L_08B34888: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B348B4; } @@ -2290,7 +2237,6 @@ L_08B348D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B348D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B348E4; } @@ -2301,7 +2247,6 @@ L_08B348E0: goto L_08B348E4; L_08B348E4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B348F4; } @@ -2324,12 +2269,21 @@ L_08B348F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3490C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B34928; } @@ -2366,7 +2320,6 @@ L_08B3493C: L_08B3494C: ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B34988; } @@ -2380,7 +2333,6 @@ L_08B34958: aot_gpr_5 = (aot_gpr_5 << (aot_gpr_6 & 31u)); aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B34980; } @@ -2417,11 +2369,20 @@ L_08B34998: goto L_08B3499C; L_08B3499C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B349A4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(60))); aot_gpr_5 = (0u | 4u); @@ -2437,12 +2398,21 @@ L_08B349B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B349C0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_6 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B349DC; } @@ -2479,7 +2449,6 @@ L_08B349F0: L_08B34A00: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B34A74; } @@ -2496,7 +2465,6 @@ L_08B34A0C: aot_gpr_4 = (0u | 0u); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B34A6C; } @@ -2509,7 +2477,6 @@ L_08B34A3C: ctx.gpr[8] = (ctx.gpr[7] << (aot_gpr_4 & 31u)); ctx.gpr[8] = (aot_gpr_5 & ctx.gpr[8]); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B34A64; } @@ -2519,7 +2486,6 @@ L_08B34A4C: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); ctx.gpr[8] = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B34A3C; } @@ -2527,7 +2493,6 @@ L_08B34A4C: } L_08B34A5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B34A6C; } @@ -2564,11 +2529,20 @@ L_08B34A84: goto L_08B34A88; L_08B34A88: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34A90: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (19224u << 16u); @@ -2595,7 +2569,6 @@ L_08B34AB0: L_08B34ACC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B34AF4; } @@ -2613,7 +2586,6 @@ L_08B34AD8: L_08B34AF4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B34B8C; } @@ -2622,7 +2594,6 @@ L_08B34AF4: L_08B34B00: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B34B8C; } @@ -2675,7 +2646,6 @@ L_08B34B0C: L_08B34B8C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_15)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08B34BA0; @@ -2684,7 +2654,6 @@ L_08B34B8C: L_08B34BA0: ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[0] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B34BB4; @@ -2696,7 +2665,17 @@ L_08B34BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34BBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[18]); @@ -2746,7 +2725,6 @@ L_08B34C20: AOT_REGCACHE_SYNC_OUT(); return; L_08B34C28: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B34D24; } @@ -2761,7 +2739,6 @@ L_08B34C30: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B34C5C; @@ -2769,9 +2746,7 @@ L_08B34C30: goto L_08B34C5C; L_08B34C5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B34D24; } @@ -2785,7 +2760,6 @@ L_08B34C6C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B34C94; @@ -2793,9 +2767,7 @@ L_08B34C6C: goto L_08B34C94; L_08B34C94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B34D24; } @@ -2804,7 +2776,6 @@ L_08B34C94: L_08B34CA4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B34CEC; } @@ -2885,7 +2856,6 @@ L_08B34D1C: goto L_08B34D24; L_08B34D24: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B34C04; } @@ -2908,7 +2878,17 @@ L_08B34D2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34D54: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.gpr[7] = (aot_gpr_5 | 0u); @@ -2964,7 +2944,6 @@ L_08B34DCC: goto L_08B34E0C; L_08B34E0C: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08B34E24; } @@ -3009,7 +2988,6 @@ L_08B34E48: L_08B34E4C: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B34F4C; } @@ -3036,7 +3014,6 @@ L_08B34E58: goto L_08B35604; L_08B34E70: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B34F4C; } @@ -3046,7 +3023,6 @@ L_08B34E78: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B34E98; } @@ -3056,7 +3032,6 @@ L_08B34E88: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(618)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B34F4C; } @@ -3129,7 +3104,6 @@ L_08B34F1C: AOT_REGCACHE_SYNC_OUT(); return; L_08B34F28: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B34F4C; } @@ -3204,7 +3178,17 @@ L_08B34F90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B34FC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3221,7 +3205,6 @@ L_08B34FC4: L_08B34FF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3501C; } @@ -3234,7 +3217,6 @@ L_08B34FFC: L_08B35004: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3501C; } @@ -3242,7 +3224,6 @@ L_08B35004: } L_08B35010: aot_gpr_31 = (0x08B35018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0035_entry, 35u, 224u, 0x08891A2Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B35018u) goto L_08B35018; AOT_REGCACHE_SYNC_OUT(); return; L_08B35018: @@ -3266,7 +3247,6 @@ L_08B35030: L_08B35038: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3505C; } @@ -3307,7 +3287,17 @@ L_08B35060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3507C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[20]); @@ -3342,7 +3332,6 @@ L_08B350C4: goto L_08B350E8; L_08B350E8: { const bool branch_taken = static_cast(ctx.gpr[18]) < 0; - // nop if (branch_taken) { goto L_08B35100; } @@ -3387,7 +3376,6 @@ L_08B35124: L_08B35128: aot_gpr_16 = (ctx.gpr[17] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B351D8; } @@ -3396,7 +3384,6 @@ L_08B35128: L_08B35134: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B35164; } @@ -3405,7 +3392,6 @@ L_08B35134: L_08B35140: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[30]; - // nop if (branch_taken) { goto L_08B35164; } @@ -3414,7 +3400,6 @@ L_08B35140: L_08B3514C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B35164; } @@ -3423,7 +3408,6 @@ L_08B3514C: L_08B35158: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B351D8; } @@ -3450,7 +3434,6 @@ L_08B35164: goto L_08B35604; L_08B3517C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B351D8; } @@ -3460,7 +3443,6 @@ L_08B35184: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == ctx.gpr[21]; - // nop if (branch_taken) { goto L_08B351A8; } @@ -3469,9 +3451,7 @@ L_08B35184: L_08B35194: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B351D8; } @@ -3485,7 +3465,6 @@ L_08B351A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B351B4: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B351D8; } @@ -3532,7 +3511,17 @@ L_08B351E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B35218: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); @@ -3610,7 +3599,6 @@ L_08B352BC: L_08B352C4: ctx.gpr[21] = (ctx.gpr[30] | 0u); { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08B35424; } @@ -3643,7 +3631,6 @@ L_08B352FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B35424; } @@ -3656,7 +3643,6 @@ L_08B35310: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B35424; } @@ -3670,7 +3656,6 @@ L_08B35320: AOT_REGCACHE_SYNC_OUT(); return; L_08B3532C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B35424; } @@ -3761,7 +3746,6 @@ L_08B353A4: goto L_08B356F8; L_08B353CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B353D8; } @@ -3783,7 +3767,6 @@ L_08B353D8: } L_08B353EC: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B35424; } @@ -3797,7 +3780,6 @@ L_08B353F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B35400: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08B35424; } @@ -3847,7 +3829,17 @@ L_08B35440: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B35470: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(80), aot_gpr_16); @@ -3866,7 +3858,6 @@ L_08B3548C: AOT_REGCACHE_SYNC_OUT(); return; L_08B35498: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B35584; } @@ -3874,7 +3865,6 @@ L_08B35498: } L_08B354A0: aot_gpr_31 = (0x08B354A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B354A8u) goto L_08B354A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B354A8: @@ -3885,7 +3875,6 @@ L_08B354A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B354B4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B35584; } @@ -3993,9 +3982,7 @@ L_08B354BC: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3558C; } @@ -4014,7 +4001,6 @@ L_08B35570: } L_08B35584: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B355F0; } @@ -4044,7 +4030,6 @@ L_08B355B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B355D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B355F0; } @@ -4072,14 +4057,22 @@ L_08B355F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B35604: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B356E4; } @@ -4088,9 +4081,7 @@ L_08B35604: L_08B3561C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B356DC; } @@ -4110,9 +4101,7 @@ L_08B35630: { const float fs = aot_fpr_13; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[17] = std::bit_cast(0x7FC00000u); else ctx.fpr[17] = fs * ft; } aot_fpr_15 = aot_fpr_15 + ctx.fpr[17]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B356D4; } @@ -4121,9 +4110,7 @@ L_08B35630: L_08B35670: ctx.fpr[16] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B356CC; } @@ -4136,9 +4123,7 @@ L_08B35684: { const float fs = aot_fpr_13; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_14 = aot_fpr_14 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B356C4; } @@ -4147,9 +4132,7 @@ L_08B35684: L_08B356A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B356EC; } @@ -4208,19 +4191,26 @@ L_08B356EC: goto L_08B356F0; L_08B356F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B356F8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(56))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B357E8; } @@ -4230,9 +4220,7 @@ L_08B35714: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(96))); aot_fpr_14 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B357E0; } @@ -4252,9 +4240,7 @@ L_08B3572C: { const float fs = aot_fpr_14; const float ft = ctx.fpr[18]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[18] = std::bit_cast(0x7FC00000u); else ctx.fpr[18] = fs * ft; } ctx.fpr[16] = ctx.fpr[16] + ctx.fpr[18]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B357D8; } @@ -4264,9 +4250,7 @@ L_08B3576C: ctx.fpr[17] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(128))); ctx.fpr[17] = ctx.fpr[17] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B357D0; } @@ -4279,9 +4263,7 @@ L_08B35784: { const float fs = aot_fpr_14; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_15 = aot_fpr_15 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B357C8; } @@ -4291,9 +4273,7 @@ L_08B357A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(132))); aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B357F0; } @@ -4352,11 +4332,20 @@ L_08B357F0: goto L_08B357F4; L_08B357F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B357FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4373,7 +4362,6 @@ L_08B357FC: } L_08B3581C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3582C; } @@ -4381,7 +4369,6 @@ L_08B3581C: } L_08B35824: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B3584C; } @@ -4389,7 +4376,6 @@ L_08B35824: } L_08B3582C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B359A0; } @@ -4405,7 +4391,6 @@ L_08B35834: } L_08B3583C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3582C; } @@ -4413,7 +4398,6 @@ L_08B3583C: } L_08B35844: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35910; } @@ -4426,7 +4410,6 @@ L_08B3584C: AOT_REGCACHE_SYNC_OUT(); return; L_08B35854: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B35864; } @@ -4438,7 +4421,6 @@ L_08B3585C: goto L_08B35864; L_08B35864: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3582C; } @@ -4474,7 +4456,6 @@ L_08B35898: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B358B4; @@ -4483,7 +4464,6 @@ L_08B35898: L_08B358B4: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4513,7 +4493,6 @@ L_08B358F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B358F8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B35908; } @@ -4525,7 +4504,6 @@ L_08B35900: goto L_08B35908; L_08B35908: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3582C; } @@ -4561,7 +4539,6 @@ L_08B35938: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B35958; @@ -4570,7 +4547,6 @@ L_08B35938: L_08B35958: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4596,7 +4572,6 @@ L_08B35990: goto L_08B34444; L_08B35998: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3582C; } @@ -4610,7 +4585,17 @@ L_08B359A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B359B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -4625,7 +4610,6 @@ L_08B359B0: goto L_08B359D0; L_08B359D0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B359D8; } @@ -4633,7 +4617,6 @@ L_08B359D0: } L_08B359D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35A78; } @@ -4641,7 +4624,6 @@ L_08B359D8: } L_08B359E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B359D8; } @@ -4677,7 +4659,6 @@ L_08B35A10: { const float fs = aot_fpr_14; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B35A30; @@ -4686,7 +4667,6 @@ L_08B35A10: L_08B35A30: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4712,7 +4692,6 @@ L_08B35A68: goto L_08B34444; L_08B35A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B359D8; } @@ -4726,7 +4705,17 @@ L_08B35A78: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B35A88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4743,7 +4732,6 @@ L_08B35A88: } L_08B35AA8: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B35AB8; } @@ -4751,7 +4739,6 @@ L_08B35AA8: } L_08B35AB0: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B35AD8; } @@ -4759,7 +4746,6 @@ L_08B35AB0: } L_08B35AB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35BFC; } @@ -4775,7 +4761,6 @@ L_08B35AC0: } L_08B35AC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B35AB8; } @@ -4783,7 +4768,6 @@ L_08B35AC8: } L_08B35AD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35B6C; } @@ -4791,7 +4775,6 @@ L_08B35AD0: } L_08B35AD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35AB8; } @@ -4827,7 +4810,6 @@ L_08B35B0C: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B35B28; @@ -4836,7 +4818,6 @@ L_08B35B0C: L_08B35B28: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4861,7 +4842,6 @@ L_08B35B5C: goto L_08B34444; L_08B35B64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35AB8; } @@ -4897,7 +4877,6 @@ L_08B35B94: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B35BB4; @@ -4906,7 +4885,6 @@ L_08B35B94: L_08B35BB4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4932,7 +4910,6 @@ L_08B35BEC: goto L_08B34444; L_08B35BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35AB8; } @@ -4946,7 +4923,17 @@ L_08B35BFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B35C0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -4963,7 +4950,6 @@ L_08B35C0C: } L_08B35C2C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B35C3C; } @@ -4971,7 +4957,6 @@ L_08B35C2C: } L_08B35C34: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B35C5C; } @@ -4979,7 +4964,6 @@ L_08B35C34: } L_08B35C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35DFC; } @@ -4995,7 +4979,6 @@ L_08B35C44: } L_08B35C4C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B35C3C; } @@ -5003,7 +4986,6 @@ L_08B35C4C: } L_08B35C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35D6C; } @@ -5012,7 +4994,6 @@ L_08B35C54: L_08B35C5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B35CC0; } @@ -5027,7 +5008,6 @@ L_08B35C68: AOT_REGCACHE_SYNC_OUT(); return; L_08B35C78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B35CC0; } @@ -5039,7 +5019,6 @@ L_08B35C80: goto L_08B34050; L_08B35C88: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B35CC0; } @@ -5052,7 +5031,6 @@ L_08B35C90: AOT_REGCACHE_SYNC_OUT(); return; L_08B35C98: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B35CC0; } @@ -5073,7 +5051,6 @@ L_08B35CA8: goto L_08B35CC0; L_08B35CC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35C3C; } @@ -5109,7 +5086,6 @@ L_08B35CF4: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B35D10; @@ -5118,7 +5094,6 @@ L_08B35CF4: L_08B35D10: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5154,7 +5129,6 @@ L_08B35D5C: goto L_08B34444; L_08B35D64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35C3C; } @@ -5190,7 +5164,6 @@ L_08B35D94: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B35DB4; @@ -5199,7 +5172,6 @@ L_08B35D94: L_08B35DB4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5225,7 +5197,6 @@ L_08B35DEC: goto L_08B34444; L_08B35DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B35C3C; } @@ -5239,7 +5210,17 @@ L_08B35DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B35E0C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); ctx.gpr[7] = (aot_gpr_5 + static_cast(48)); @@ -5286,7 +5267,6 @@ L_08B35E0C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(618)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B35ED0; } @@ -5302,7 +5282,6 @@ L_08B35ED0: ctx.gpr[7] = (1024u << 16u); ctx.gpr[7] = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B35EF4; } @@ -5318,7 +5297,6 @@ L_08B35EF4: ctx.gpr[7] = (2048u << 16u); ctx.gpr[7] = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B35F14; } @@ -5334,7 +5312,6 @@ L_08B35F14: ctx.gpr[7] = (4u << 16u); ctx.gpr[7] = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B35F34; } @@ -5350,7 +5327,6 @@ L_08B35F34: ctx.gpr[7] = (4096u << 16u); ctx.gpr[7] = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = ctx.gpr[7] == 0u; - // nop if (branch_taken) { goto L_08B35F54; } @@ -5366,7 +5342,6 @@ L_08B35F54: ctx.gpr[7] = (8192u << 16u); aot_gpr_6 = (aot_gpr_6 & ctx.gpr[7]); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B35F70; } @@ -5381,7 +5356,6 @@ L_08B35F70: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(617)))))); aot_gpr_6 = (aot_gpr_6 & 8u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B35F8C; } @@ -5396,7 +5370,6 @@ L_08B35F8C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(615)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B35FA8; } @@ -5411,7 +5384,6 @@ L_08B35FA8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(236))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B35FC4; } @@ -5425,7 +5397,6 @@ L_08B35FB8: L_08B35FC4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(852))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B36030; } @@ -5435,7 +5406,6 @@ L_08B35FD0: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(616)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B35FEC; } @@ -5450,7 +5420,6 @@ L_08B35FEC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1653)))))); aot_gpr_6 = (aot_gpr_6 & 7u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B36008; } @@ -5465,7 +5434,6 @@ L_08B36008: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1653)))))); aot_gpr_6 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B36024; } @@ -5488,7 +5456,6 @@ L_08B36024: L_08B36030: ctx.gpr[7] = (0u | 6u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B36064; } @@ -5498,7 +5465,6 @@ L_08B3603C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(616)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B36058; } @@ -5521,7 +5487,6 @@ L_08B36058: L_08B36064: ctx.gpr[7] = (0u | 9u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B360D0; } @@ -5531,7 +5496,6 @@ L_08B36070: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(616)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B3608C; } @@ -5546,7 +5510,6 @@ L_08B3608C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1653)))))); aot_gpr_6 = (aot_gpr_6 & 7u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B360A8; } @@ -5561,7 +5524,6 @@ L_08B360A8: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(1653)))))); aot_gpr_6 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B360C4; } @@ -5584,7 +5546,6 @@ L_08B360C4: L_08B360D0: ctx.gpr[7] = (0u | 8u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B36100; } @@ -5594,7 +5555,6 @@ L_08B360DC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(616)))))); aot_gpr_6 = (aot_gpr_6 & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B360F8; } @@ -5611,11 +5571,20 @@ L_08B360F8: goto L_08B36100; L_08B36100: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36108: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5634,7 +5603,6 @@ L_08B36138: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_gpr_4 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3614C; } @@ -5650,7 +5618,6 @@ L_08B3614C: AOT_REGCACHE_SYNC_OUT(); return; L_08B36154: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B36770; } @@ -5669,7 +5636,6 @@ L_08B36168: AOT_REGCACHE_SYNC_OUT(); return; L_08B36170: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B361C0; } @@ -5684,7 +5650,6 @@ L_08B36178: L_08B36184: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B361A4; } @@ -5720,7 +5685,6 @@ L_08B361C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B361C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3620C; } @@ -5766,7 +5730,6 @@ L_08B3620C: AOT_REGCACHE_SYNC_OUT(); return; L_08B36214: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3625C; } @@ -5813,7 +5776,6 @@ L_08B3625C: AOT_REGCACHE_SYNC_OUT(); return; L_08B36264: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B362B4; } @@ -5828,7 +5790,6 @@ L_08B3626C: L_08B36278: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B36298; } @@ -5864,7 +5825,6 @@ L_08B362B4: AOT_REGCACHE_SYNC_OUT(); return; L_08B362BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B36300; } @@ -5910,7 +5870,6 @@ L_08B36300: AOT_REGCACHE_SYNC_OUT(); return; L_08B36308: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3634C; } @@ -5956,7 +5915,6 @@ L_08B3634C: AOT_REGCACHE_SYNC_OUT(); return; L_08B36354: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B36398; } @@ -6087,7 +6045,6 @@ L_08B36448: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); aot_gpr_5 = (aot_gpr_4 & 32768u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B364D4; } @@ -6102,7 +6059,6 @@ L_08B364C4: L_08B364D4: aot_gpr_5 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B364F4; } @@ -6118,7 +6074,6 @@ L_08B364E0: L_08B364F4: aot_gpr_5 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36514; } @@ -6134,7 +6089,6 @@ L_08B36500: L_08B36514: aot_gpr_5 = (aot_gpr_4 & 4u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36534; } @@ -6150,7 +6104,6 @@ L_08B36520: L_08B36534: aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36554; } @@ -6166,7 +6119,6 @@ L_08B36540: L_08B36554: aot_gpr_5 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36574; } @@ -6182,7 +6134,6 @@ L_08B36560: L_08B36574: aot_gpr_5 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36590; } @@ -6197,7 +6148,6 @@ L_08B36580: L_08B36590: aot_gpr_5 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B365AC; } @@ -6254,7 +6204,6 @@ L_08B365F8: goto L_08B36620; L_08B36620: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B36690; } @@ -6279,7 +6228,6 @@ L_08B36638: L_08B36648: aot_gpr_6 = (aot_gpr_5 & 512u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B3666C; } @@ -6296,7 +6244,6 @@ L_08B36654: L_08B3666C: aot_gpr_5 = (aot_gpr_5 & 1024u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36684; } @@ -6319,7 +6266,6 @@ L_08B36684: L_08B36690: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B366C4; } @@ -6352,7 +6298,6 @@ L_08B366B8: L_08B366C4: aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B36738; } @@ -6377,7 +6322,6 @@ L_08B366E0: L_08B366F0: aot_gpr_6 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B36714; } @@ -6394,7 +6338,6 @@ L_08B366FC: L_08B36714: aot_gpr_4 = (aot_gpr_4 & 1024u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3672C; } @@ -6417,7 +6360,6 @@ L_08B3672C: L_08B36738: aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B36768; } @@ -6467,7 +6409,17 @@ L_08B36774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36790: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -6484,7 +6436,6 @@ L_08B367AC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); aot_gpr_5 = (0u | 10u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B367D4; } @@ -6500,7 +6451,6 @@ L_08B367BC: goto L_08B367CC; L_08B367CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6508,7 +6458,6 @@ L_08B367CC: } L_08B367D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6517,7 +6466,6 @@ L_08B367D4: L_08B367DC: aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6527,7 +6475,6 @@ L_08B367E8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(62))); aot_gpr_5 = (0u | 7u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6535,12 +6482,10 @@ L_08B367E8: } L_08B367F8: aot_gpr_31 = (0x08B36800u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B36800u) goto L_08B36800; AOT_REGCACHE_SYNC_OUT(); return; L_08B36800: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6549,7 +6494,6 @@ L_08B36800: L_08B36808: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(78))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6557,7 +6501,6 @@ L_08B36808: } L_08B36814: aot_gpr_31 = (0x08B3681Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3681Cu) goto L_08B3681C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3681C: @@ -6570,7 +6513,6 @@ L_08B3681C: AOT_REGCACHE_SYNC_OUT(); return; L_08B36830: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3684C; } @@ -6585,13 +6527,11 @@ L_08B36838: goto L_08B3684C; L_08B3684C: aot_gpr_31 = (0x08B36854u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B36854u) goto L_08B36854; AOT_REGCACHE_SYNC_OUT(); return; L_08B36854: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6606,7 +6546,6 @@ L_08B36860: AOT_REGCACHE_SYNC_OUT(); return; L_08B36870: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B36884; } @@ -6621,7 +6560,6 @@ L_08B36884: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(86)))))); aot_gpr_5 = (0u | 244u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6649,9 +6587,7 @@ L_08B36894: aot_fpr_12 = std::bit_cast(aot_gpr_5); aot_fpr_14 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B36920; } @@ -6662,9 +6598,7 @@ L_08B368C8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_fpr_13 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B36920; } @@ -6675,9 +6609,7 @@ L_08B368E4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_13 = aot_fpr_13 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B36920; } @@ -6688,9 +6620,7 @@ L_08B36900: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B36920; } @@ -6701,7 +6631,6 @@ L_08B3691C: goto L_08B36920; L_08B36920: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3693C; } @@ -6717,7 +6646,6 @@ L_08B36928: L_08B3693C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(64))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36954; } @@ -6726,7 +6654,6 @@ L_08B3693C: L_08B36948: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(62))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36968; } @@ -6735,7 +6662,6 @@ L_08B36948: L_08B36954: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(77))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B36970; } @@ -6743,7 +6669,6 @@ L_08B36954: } L_08B36960: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36A4C; } @@ -6751,7 +6676,6 @@ L_08B36960: } L_08B36968: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6761,7 +6685,6 @@ L_08B36970: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(62))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B369F4; } @@ -6770,7 +6693,6 @@ L_08B36970: L_08B36980: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B369B8; } @@ -6778,14 +6700,12 @@ L_08B36980: } L_08B3698C: aot_gpr_31 = (0x08B36994u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B36994u) goto L_08B36994; AOT_REGCACHE_SYNC_OUT(); return; L_08B36994: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1300))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B369B8; } @@ -6801,7 +6721,6 @@ L_08B369A4: L_08B369B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36A4C; } @@ -6809,14 +6728,12 @@ L_08B369B8: } L_08B369C4: aot_gpr_31 = (0x08B369CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B369CCu) goto L_08B369CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B369CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1300))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B36A4C; } @@ -6838,7 +6755,6 @@ L_08B369F4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(62))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B36A4C; } @@ -6847,7 +6763,6 @@ L_08B369F4: L_08B36A04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36A28; } @@ -6864,7 +6779,6 @@ L_08B36A10: L_08B36A28: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36A4C; } @@ -6883,7 +6797,6 @@ L_08B36A4C: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(30) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6895,18 +6808,26 @@ L_08B36A60: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31328))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36A78: aot_gpr_31 = (0x08B36A80u); aot_gpr_4 = (aot_gpr_16 | 0u); goto L_08B36F88; L_08B36A80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6918,7 +6839,6 @@ L_08B36A88: goto L_08B37FC8; L_08B36A90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6931,7 +6851,6 @@ L_08B36A98: AOT_REGCACHE_SYNC_OUT(); return; L_08B36AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6944,7 +6863,6 @@ L_08B36AA8: AOT_REGCACHE_SYNC_OUT(); return; L_08B36AB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6956,7 +6874,6 @@ L_08B36AB8: goto L_08B357FC; L_08B36AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6969,7 +6886,6 @@ L_08B36AC8: AOT_REGCACHE_SYNC_OUT(); return; L_08B36AD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6982,7 +6898,6 @@ L_08B36AD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B36AE0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -6995,7 +6910,6 @@ L_08B36AE8: AOT_REGCACHE_SYNC_OUT(); return; L_08B36AF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -7007,7 +6921,6 @@ L_08B36AF8: goto L_08B359B0; L_08B36B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -7019,7 +6932,6 @@ L_08B36B08: goto L_08B35A88; L_08B36B10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -7032,7 +6944,6 @@ L_08B36B18: AOT_REGCACHE_SYNC_OUT(); return; L_08B36B20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -7045,7 +6956,6 @@ L_08B36B28: AOT_REGCACHE_SYNC_OUT(); return; L_08B36B30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36B40; } @@ -7067,7 +6977,17 @@ L_08B36B40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36B54: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -7229,7 +7149,6 @@ L_08B36CF4: } L_08B36CFC: aot_gpr_31 = (0x08B36D04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B36D04u) goto L_08B36D04; AOT_REGCACHE_SYNC_OUT(); return; L_08B36D04: @@ -7323,7 +7242,6 @@ L_08B36DAC: } L_08B36DB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36E7C; } @@ -7358,9 +7276,7 @@ L_08B36DC0: ctx.fpr[0] = std::bit_cast(0u); ctx.fpr[16] = ctx.fpr[19] + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B36E7C; } @@ -7374,9 +7290,7 @@ L_08B36E30: aot_fpr_12 = aot_fpr_12 + aot_fpr_15; aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B36E64; } @@ -7401,7 +7315,6 @@ L_08B36E64: goto L_08B36E7C; L_08B36E7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B36E98; } @@ -7417,7 +7330,6 @@ L_08B36E84: L_08B36E98: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B36EB8; } @@ -7450,7 +7362,17 @@ L_08B36EB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36EEC: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(61))); aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); @@ -7472,7 +7394,17 @@ L_08B36F00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36F18: { const bool branch_taken = static_cast(aot_gpr_5) < 0; aot_gpr_6 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); @@ -7489,7 +7421,6 @@ L_08B36F20: goto L_08B36F28; L_08B36F28: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08B36F40; } @@ -7497,7 +7428,6 @@ L_08B36F28: } L_08B36F30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36F48; } @@ -7505,7 +7435,6 @@ L_08B36F30: } L_08B36F38: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36F48; } @@ -7517,7 +7446,6 @@ L_08B36F40: goto L_08B36F48; L_08B36F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36F80; } @@ -7531,7 +7459,6 @@ L_08B36F50: goto L_08B36F58; L_08B36F58: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08B36F78; } @@ -7539,7 +7466,6 @@ L_08B36F58: } L_08B36F60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36F78; } @@ -7547,7 +7473,6 @@ L_08B36F60: } L_08B36F68: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B36F78; } @@ -7559,7 +7484,6 @@ L_08B36F70: goto L_08B36F78; L_08B36F78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B36F80; } @@ -7567,11 +7491,20 @@ L_08B36F78: } L_08B36F80: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B36F88: aot_gpr_29 = (aot_gpr_29 + static_cast(-784)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(744), aot_gpr_16); @@ -7584,7 +7517,6 @@ L_08B36F88: { const std::uint32_t aot_run_words[9]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(748), aot_run_words); } { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B371BC; } @@ -7616,7 +7548,6 @@ L_08B36FE4: } L_08B36FEC: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B37F50; } @@ -7631,7 +7562,6 @@ L_08B36FF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B37004: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37140; } @@ -7639,7 +7569,6 @@ L_08B37004: } L_08B3700C: aot_gpr_31 = (0x08B37014u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37014u) goto L_08B37014; AOT_REGCACHE_SYNC_OUT(); return; L_08B37014: @@ -7649,7 +7578,6 @@ L_08B37014: AOT_REGCACHE_SYNC_OUT(); return; L_08B3701C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37114; } @@ -7668,7 +7596,6 @@ L_08B37024: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(172))); aot_gpr_4 = (static_cast(aot_gpr_4) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B370AC; } @@ -7677,7 +7604,6 @@ L_08B37024: L_08B37058: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17330))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B370AC; } @@ -7685,7 +7611,6 @@ L_08B37058: } L_08B37064: aot_gpr_31 = (0x08B3706Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3706Cu) goto L_08B3706C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3706C: @@ -7700,9 +7625,7 @@ L_08B37074: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B370E0; } @@ -7710,13 +7633,11 @@ L_08B37074: } L_08B37098: aot_gpr_31 = (0x08B370A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B370A0u) goto L_08B370A0; AOT_REGCACHE_SYNC_OUT(); return; L_08B370A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B370E0; } @@ -7766,7 +7687,6 @@ L_08B370F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B3710C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37140; } @@ -7791,12 +7711,10 @@ L_08B37128: AOT_REGCACHE_SYNC_OUT(); return; L_08B37140: aot_gpr_31 = (0x08B37148u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37148u) goto L_08B37148; AOT_REGCACHE_SYNC_OUT(); return; L_08B37148: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B371BC; } @@ -7804,7 +7722,6 @@ L_08B37148: } L_08B37150: aot_gpr_31 = (0x08B37158u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37158u) goto L_08B37158; AOT_REGCACHE_SYNC_OUT(); return; L_08B37158: @@ -7825,9 +7742,7 @@ L_08B37178: aot_gpr_4 = (17024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B371BC; } @@ -7849,7 +7764,6 @@ L_08B37190: AOT_REGCACHE_SYNC_OUT(); return; L_08B371BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37F8C; } @@ -7857,12 +7771,10 @@ L_08B371BC: } L_08B371C4: aot_gpr_31 = (0x08B371CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B371CCu) goto L_08B371CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B371CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B371E8; } @@ -7870,7 +7782,6 @@ L_08B371CC: } L_08B371D4: aot_gpr_31 = (0x08B371DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B371DCu) goto L_08B371DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B371DC: @@ -7909,7 +7820,6 @@ L_08B37214: { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B37230; @@ -7918,7 +7828,6 @@ L_08B37214: L_08B37230: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -7942,7 +7851,6 @@ L_08B37244: AOT_REGCACHE_SYNC_OUT(); return; L_08B37270: aot_gpr_31 = (0x08B37278u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0099_entry, 99u, 232u, 0x089910C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37278u) goto L_08B37278; AOT_REGCACHE_SYNC_OUT(); return; L_08B37278: @@ -7951,7 +7859,6 @@ L_08B37278: goto L_08B34444; L_08B37280: aot_gpr_31 = (0x08B37288u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37288u) goto L_08B37288; AOT_REGCACHE_SYNC_OUT(); return; L_08B37288: @@ -7962,7 +7869,6 @@ L_08B37288: goto L_08B37290; L_08B37290: aot_gpr_31 = (0x08B37298u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37298u) goto L_08B37298; AOT_REGCACHE_SYNC_OUT(); return; L_08B37298: @@ -7976,7 +7882,6 @@ L_08B37298: } L_08B372A4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B37304; } @@ -7988,11 +7893,20 @@ L_08B372AC: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31088))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B372C4: aot_gpr_31 = (0x08B372CCu); ctx.fpr[20] = std::bit_cast(0u); @@ -8069,7 +7983,6 @@ L_08B37314: AOT_REGCACHE_SYNC_OUT(); return; L_08B3733C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B371BC; } @@ -8103,7 +8016,6 @@ L_08B37378: L_08B37380: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B373EC; } @@ -8187,7 +8099,6 @@ L_08B37408: AOT_REGCACHE_SYNC_OUT(); return; L_08B37420: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37CEC; } @@ -8195,13 +8106,11 @@ L_08B37420: } L_08B37428: aot_gpr_31 = (0x08B37430u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37430u) goto L_08B37430; AOT_REGCACHE_SYNC_OUT(); return; L_08B37430: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B37484; } @@ -8209,14 +8118,12 @@ L_08B37430: } L_08B3743C: aot_gpr_31 = (0x08B37444u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37444u) goto L_08B37444; AOT_REGCACHE_SYNC_OUT(); return; L_08B37444: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B37484; } @@ -8224,14 +8131,12 @@ L_08B37444: } L_08B37454: aot_gpr_31 = (0x08B3745Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3745Cu) goto L_08B3745C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3745C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B37484; } @@ -8239,14 +8144,12 @@ L_08B3745C: } L_08B3746C: aot_gpr_31 = (0x08B37474u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37474u) goto L_08B37474; AOT_REGCACHE_SYNC_OUT(); return; L_08B37474: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B37CEC; } @@ -8254,7 +8157,6 @@ L_08B37474: } L_08B37484: aot_gpr_31 = (0x08B3748Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3748Cu) goto L_08B3748C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3748C: @@ -8269,9 +8171,7 @@ L_08B37494: aot_gpr_4 = (aot_gpr_4 | 20972u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B374BC; } @@ -8282,7 +8182,6 @@ L_08B374B8: goto L_08B374BC; L_08B374BC: aot_gpr_31 = (0x08B374C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B374C4u) goto L_08B374C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B374C4: @@ -8306,7 +8205,6 @@ L_08B374D4: } L_08B374E0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B375C0; } @@ -8318,11 +8216,20 @@ L_08B374E8: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31048))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B37500: aot_gpr_31 = (0x08B37508u); ctx.fpr[20] = std::bit_cast(0u); @@ -8340,7 +8247,6 @@ L_08B37510: AOT_REGCACHE_SYNC_OUT(); return; L_08B37518: aot_gpr_31 = (0x08B37520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37520u) goto L_08B37520; AOT_REGCACHE_SYNC_OUT(); return; L_08B37520: @@ -8350,7 +8256,6 @@ L_08B37520: AOT_REGCACHE_SYNC_OUT(); return; L_08B37528: aot_gpr_31 = (0x08B37530u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37530u) goto L_08B37530; AOT_REGCACHE_SYNC_OUT(); return; L_08B37530: @@ -8360,7 +8265,6 @@ L_08B37530: AOT_REGCACHE_SYNC_OUT(); return; L_08B37538: aot_gpr_31 = (0x08B37540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37540u) goto L_08B37540; AOT_REGCACHE_SYNC_OUT(); return; L_08B37540: @@ -8370,7 +8274,6 @@ L_08B37540: AOT_REGCACHE_SYNC_OUT(); return; L_08B37548: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B375C0; } @@ -8393,7 +8296,6 @@ L_08B37560: AOT_REGCACHE_SYNC_OUT(); return; L_08B37568: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B375C0; } @@ -8422,7 +8324,6 @@ L_08B37580: AOT_REGCACHE_SYNC_OUT(); return; L_08B37598: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B375C0; } @@ -8445,7 +8346,6 @@ L_08B375B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B375B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B375C0; } @@ -8453,7 +8353,6 @@ L_08B375B8: } L_08B375C0: aot_gpr_31 = (0x08B375C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B375C8u) goto L_08B375C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B375C8: @@ -8469,9 +8368,7 @@ L_08B375E0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(40))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B37674; } @@ -8479,7 +8376,6 @@ L_08B375E0: } L_08B375F8: aot_gpr_31 = (0x08B37600u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37600u) goto L_08B37600; AOT_REGCACHE_SYNC_OUT(); return; L_08B37600: @@ -8555,7 +8451,6 @@ L_08B37674: L_08B37680: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B376D4; } @@ -8563,14 +8458,12 @@ L_08B37680: } L_08B3768C: aot_gpr_31 = (0x08B37694u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37694u) goto L_08B37694; AOT_REGCACHE_SYNC_OUT(); return; L_08B37694: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B376D4; } @@ -8578,14 +8471,12 @@ L_08B37694: } L_08B376A4: aot_gpr_31 = (0x08B376ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B376ACu) goto L_08B376AC; AOT_REGCACHE_SYNC_OUT(); return; L_08B376AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B376D4; } @@ -8593,14 +8484,12 @@ L_08B376AC: } L_08B376BC: aot_gpr_31 = (0x08B376C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B376C4u) goto L_08B376C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B376C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B376F0; } @@ -8608,14 +8497,12 @@ L_08B376C4: } L_08B376D4: aot_gpr_31 = (0x08B376DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B376DCu) goto L_08B376DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B376DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(616)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B376F0; } @@ -8626,7 +8513,6 @@ L_08B376EC: goto L_08B376F0; L_08B376F0: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B37CD8; } @@ -8634,7 +8520,6 @@ L_08B376F0: } L_08B376F8: aot_gpr_31 = (0x08B37700u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37700u) goto L_08B37700; AOT_REGCACHE_SYNC_OUT(); return; L_08B37700: @@ -8653,7 +8538,6 @@ L_08B37710: L_08B37714: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B37750; } @@ -8661,13 +8545,11 @@ L_08B37714: } L_08B37720: aot_gpr_31 = (0x08B37728u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37728u) goto L_08B37728; AOT_REGCACHE_SYNC_OUT(); return; L_08B37728: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(896)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B37750; } @@ -8675,7 +8557,6 @@ L_08B37728: } L_08B37734: aot_gpr_31 = (0x08B3773Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3773Cu) goto L_08B3773C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3773C: @@ -8695,7 +8576,6 @@ L_08B37744: L_08B37750: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 10 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B37764; } @@ -8714,7 +8594,6 @@ L_08B37764: goto L_08B37768; L_08B37768: aot_gpr_31 = (0x08B37770u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37770u) goto L_08B37770; AOT_REGCACHE_SYNC_OUT(); return; L_08B37770: @@ -9023,7 +8902,6 @@ L_08B37790: aot_gpr_4 = (0u | 1u); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B37A78; } @@ -9110,9 +8988,7 @@ L_08B37978: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B379F0; } @@ -9202,9 +9078,7 @@ L_08B379F0: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B37A68; } @@ -9217,7 +9091,6 @@ L_08B37A68: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B37978; } @@ -9326,7 +9199,6 @@ L_08B37A78: ctx.gpr[21] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[21]) < 200 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B37CD8; } @@ -9463,7 +9335,6 @@ L_08B37B20: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[24] = std::bit_cast(aot_gpr_4); aot_gpr_31 = (0x08B37BDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20998, 199u, 113u, 0x08B20998u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 113u, 0x08B20998u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37BDCu) goto L_08B37BDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B37BDC: @@ -9585,7 +9456,6 @@ L_08B37CC0: } L_08B37CD8: aot_gpr_31 = (0x08B37CE0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37CE0u) goto L_08B37CE0; AOT_REGCACHE_SYNC_OUT(); return; L_08B37CE0: @@ -9595,7 +9465,6 @@ L_08B37CE0: goto L_08B35470; L_08B37CEC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B37E34; } @@ -9604,7 +9473,6 @@ L_08B37CEC: L_08B37CF4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17330))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B37DD4; } @@ -9650,7 +9518,6 @@ L_08B37D3C: AOT_REGCACHE_SYNC_OUT(); return; L_08B37D7C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37DB8; } @@ -9658,14 +9525,12 @@ L_08B37D7C: } L_08B37D84: aot_gpr_31 = (0x08B37D8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37D8Cu) goto L_08B37D8C; AOT_REGCACHE_SYNC_OUT(); return; L_08B37D8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B37DB8; } @@ -9681,7 +9546,6 @@ L_08B37D9C: AOT_REGCACHE_SYNC_OUT(); return; L_08B37DB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37DCC; } @@ -9697,7 +9561,6 @@ L_08B37DB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B37DCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37E84; } @@ -9705,12 +9568,10 @@ L_08B37DCC: } L_08B37DD4: aot_gpr_31 = (0x08B37DDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37DDCu) goto L_08B37DDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B37DDC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37E18; } @@ -9718,14 +9579,12 @@ L_08B37DDC: } L_08B37DE4: aot_gpr_31 = (0x08B37DECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37DECu) goto L_08B37DEC; AOT_REGCACHE_SYNC_OUT(); return; L_08B37DEC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B37E18; } @@ -9741,7 +9600,6 @@ L_08B37DFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B37E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37E84; } @@ -9757,7 +9615,6 @@ L_08B37E18: AOT_REGCACHE_SYNC_OUT(); return; L_08B37E2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37E84; } @@ -9765,7 +9622,6 @@ L_08B37E2C: } L_08B37E34: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B37E84; } @@ -9773,14 +9629,12 @@ L_08B37E34: } L_08B37E3C: aot_gpr_31 = (0x08B37E44u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37E44u) goto L_08B37E44; AOT_REGCACHE_SYNC_OUT(); return; L_08B37E44: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B37E70; } @@ -9796,7 +9650,6 @@ L_08B37E54: AOT_REGCACHE_SYNC_OUT(); return; L_08B37E68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B37E84; } @@ -9830,7 +9683,6 @@ L_08B37E90: AOT_REGCACHE_SYNC_OUT(); return; L_08B37EB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B371BC; } @@ -9866,7 +9718,6 @@ L_08B37EE8: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B37F08; @@ -9875,7 +9726,6 @@ L_08B37EE8: L_08B37F08: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -9901,7 +9751,6 @@ L_08B37F40: goto L_08B34444; L_08B37F48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B371BC; } @@ -9909,12 +9758,10 @@ L_08B37F48: } L_08B37F50: aot_gpr_31 = (0x08B37F58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37F58u) goto L_08B37F58; AOT_REGCACHE_SYNC_OUT(); return; L_08B37F58: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37F6C; } @@ -9922,7 +9769,6 @@ L_08B37F58: } L_08B37F60: aot_gpr_31 = (0x08B37F68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B37F68u) goto L_08B37F68; AOT_REGCACHE_SYNC_OUT(); return; L_08B37F68: @@ -9935,7 +9781,6 @@ L_08B37F6C: AOT_REGCACHE_SYNC_OUT(); return; L_08B37F74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B37F84; } @@ -9947,7 +9792,6 @@ L_08B37F7C: goto L_08B37F84; L_08B37F84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B371BC; } @@ -9975,7 +9819,17 @@ L_08B37F8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B37FC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(170))); @@ -9994,7 +9848,6 @@ L_08B37FE8: goto L_08B34444; L_08B37FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0205_entry, 205u, 192u, 0x08B38920u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0205.cpp b/profiles/vcs/generated/generated_unit_0205.cpp index c2bd165..8f5a2ea 100644 --- a/profiles/vcs/generated/generated_unit_0205.cpp +++ b/profiles/vcs/generated/generated_unit_0205.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0205[4096] = { - 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 21, 0, 0, 0, 22, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 0, 33, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, - 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 41, 0, 42, 43, 0, 44, 0, 0, 0, 45, 0, 0, 0, 46, - 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 50, 0, 51, 0, 0, 0, 52, 0, 53, 0, 0, 0, 54, 0, 0, 55, 0, 0, 0, 56, - 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 0, 61, 0, 62, 0, 0, 0, 63, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 67, 0, 68, 0, 69, 0, 0, 70, 0, 71, 0, 0, 72, 0, 73, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 0, 76, 0, 0, 0, 77, 0, 78, 0, 0, 0, 79, 0, 80, 0, 0, 0, 0, 81, - 0, 82, 0, 0, 0, 0, 83, 0, 84, 0, 0, 85, 0, 0, 0, 0, 86, 0, 87, 0, 0, 88, 0, 0, 0, 89, 0, 90, 0, 0, 91, 0, - 0, 0, 92, 0, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 0, 104, 0, - 105, 106, 0, 107, 0, 0, 108, 0, 0, 109, 0, 110, 111, 112, 0, 0, 113, 0, 0, 0, 0, 0, 114, 0, 115, 0, 0, 116, 0, 117, 118, 0, - 119, 0, 0, 120, 0, 0, 121, 0, 122, 123, 124, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 127, 0, 128, 0, 0, 0, 129, 0, 130, 0, 131, - 0, 132, 0, 133, 0, 0, 134, 0, 135, 136, 0, 137, 0, 0, 138, 0, 0, 139, 0, 140, 141, 142, 0, 0, 143, 0, 0, 0, 0, 0, 144, 0, - 145, 0, 0, 146, 0, 147, 148, 0, 149, 0, 0, 150, 0, 0, 151, 0, 152, 153, 154, 0, 0, 155, 0, 0, 0, 0, 0, 156, 0, 157, 0, 0, - 158, 0, 159, 160, 0, 161, 0, 0, 162, 0, 0, 163, 0, 164, 165, 166, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 169, 0, 0, 0, 0, - 170, 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 0, 0, 0, 0, 175, 0, 176, 0, 0, 177, 0, 0, 0, 178, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, - 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 195, 0, 196, 0, 197, - 0, 198, 0, 199, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 208, 0, 209, 0, - 0, 0, 0, 210, 0, 0, 211, 0, 0, 0, 212, 0, 213, 0, 214, 0, 0, 0, 0, 215, 0, 216, 0, 217, 0, 0, 0, 218, 0, 0, 0, 0, - 0, 0, 219, 0, 220, 0, 0, 221, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 227, 0, - 0, 0, 0, 228, 0, 229, 0, 0, 230, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, - 235, 0, 236, 237, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 240, 241, 0, 242, 0, 243, 0, 244, 0, 0, 245, 0, 0, 246, 0, 247, - 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 250, 0, 251, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 257, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 260, 0, 261, 0, 262, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 270, 0, 271, 0, 0, 272, 0, 273, 0, 274, 0, 275, - 0, 0, 276, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, 0, 0, 286, 0, 287, 0, 288, - 0, 0, 0, 289, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 294, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 296, 297, - 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 301, 302, 0, 303, 0, 0, 0, 0, 304, 0, 0, 305, 0, 0, 306, - 0, 0, 0, 0, 0, 307, 308, 0, 309, 0, 0, 0, 310, 0, 0, 311, 0, 0, 312, 0, 0, 0, 0, 0, 313, 314, 0, 315, 0, 0, 0, 0, - 0, 0, 316, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, 0, 321, 0, 0, 322, 0, 0, 0, 323, 0, 0, - 0, 324, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 329, 0, 0, 0, 330, - 0, 331, 0, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 339, 0, 0, 0, 340, 0, 341, 0, - 342, 0, 343, 0, 344, 0, 345, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 348, 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 351, - 0, 0, 352, 0, 353, 0, 354, 0, 0, 0, 355, 0, 356, 0, 357, 0, 358, 0, 0, 359, 0, 360, 0, 361, 0, 362, 0, 0, 363, 0, 0, 364, - 0, 0, 0, 365, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 0, - 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 374, 0, 375, 0, 376, 0, 377, 0, 378, 0, 0, 379, 0, 0, - 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 383, 0, 384, 0, 0, 385, 0, 0, 386, 0, 0, 387, 0, 0, 0, 388, 0, 0, 389, - 0, 390, 0, 0, 391, 0, 0, 392, 0, 0, 393, 394, 0, 0, 395, 0, 396, 0, 397, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 0, 400, 0, - 401, 0, 402, 0, 0, 0, 0, 0, 403, 0, 0, 404, 0, 0, 405, 0, 0, 406, 0, 0, 407, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 409, - 0, 0, 0, 0, 410, 0, 411, 0, 0, 0, 412, 0, 0, 0, 413, 0, 0, 414, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 0, - 0, 0, 0, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 0, 0, 0, 420, 0, 421, 0, 0, 422, 0, 0, 423, 0, 0, 424, 0, 0, 425, 0, - 0, 426, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, - 432, 0, 433, 0, 0, 434, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 437, 0, 438, 0, 0, 439, 0, 0, 0, 0, 0, 0, 0, 440, - 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 443, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 448, 0, 449, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 452, 0, 453, 0, 0, 0, 0, 454, 0, 455, 0, 0, 456, 0, 0, 0, 457, 0, - 0, 0, 458, 0, 0, 0, 459, 0, 460, 0, 0, 0, 0, 0, 461, 0, 0, 462, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 465, 0, - 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 470, 0, 471, 0, 472, 0, 0, 473, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 477, 0, - 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 480, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 482, 0, - 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 487, 0, 0, 488, 0, 489, 490, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 497, 0, 498, 0, 499, 0, 0, 0, 0, 500, 0, 501, 0, 502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 506, - 0, 0, 0, 0, 507, 0, 508, 0, 0, 0, 0, 0, 509, 0, 510, 0, 0, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 0, 513, 0, 514, 0, - 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, - 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 524, 0, 525, 0, 526, 0, 527, - 0, 528, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, - 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, 538, 0, 0, 0, 0, 539, - 0, 0, 540, 0, 541, 0, 542, 0, 543, 0, 544, 0, 545, 0, 546, 0, 547, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 550, 0, 0, - 551, 0, 0, 552, 0, 0, 0, 553, 0, 0, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, - 0, 558, 0, 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, 0, 561, 562, 0, 563, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 565, 566, 0, 567, - 0, 568, 0, 569, 0, 0, 570, 0, 0, 571, 0, 572, 0, 0, 573, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 577, 0, - 0, 578, 0, 0, 0, 579, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, - 584, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 587, 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 0, 592, 0, 593, 0, 594, 595, 0, 596, 0, 597, 0, 0, 598, 0, 0, 0, 599, 0, 600, 0, 0, 601, 0, 0, 0, 602, 0, - 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 0, 612, 0, 0, 613, - 0, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 617, 0, 618, 0, 0, 0, 619, 0, 0, 0, 620, 0, 0, 621, 0, 0, - 0, 0, 0, 0, 622, 0, 0, 623, 0, 624, 0, 0, 625, 0, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 627, 0, 0, 628, 0, 0, 0, - 0, 0, 0, 0, 0, 629, 0, 630, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, 633, 0, 0, 634, 0, 0, 0, 635, 0, 636, - 0, 0, 637, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 0, 645, 0, 0, 646, 0, - 0, 647, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, - 652, 0, 0, 653, 0, 654, 655, 0, 656, 0, 0, 657, 0, 0, 658, 0, 659, 660, 661, 0, 0, 662, 0, 0, 0, 0, 0, 663, 0, 664, 0, 665, - 0, 666, 0, 0, 0, 0, 0, 0, 0, 667, 0, 668, 0, 669, 0, 670, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, - 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, - 0, 679, 0, 680, 0, 681, 0, 682, 0, 683, 0, 0, 684, 0, 0, 0, 685, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, - 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, 0, - 0, 0, 692, 0, 693, 0, 0, 0, 694, 0, 695, 0, 0, 696, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 700, 0, 0, 0, 0, - 0, 0, 701, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 703, 704, 0, 705, 0, 706, 0, 707, 0, 0, 708, 0, 0, 709, 0, 710, 0, 0, - 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 713, 0, 714, 0, 715, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 718, - 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 720, 0, 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 724, - 0, 725, 0, 726, 0, 727, 728, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 0, 0, 0, 732, 0, 0, 733, 0, 734, 0, 735, 0, - 0, 0, 0, 0, 736, 737, 0, 0, 0, 738, 0, 739, 0, 740, 0, 741, 0, 0, 0, 0, 742, 0, 0, 743, 0, 744, 745, 0, 746, 0, 747, 0, - 0, 0, 748, 749, 0, 0, 0, 750, 0, 0, 0, 0, 0, 751, 0, 0, 752, 0, 0, 753, 754, 0, 0, 755, 0, 0, 756, 0, 757, 758, 0, 0, - 0, 759, 0, 0, 760, 0, 0, 761, 0, 0, 762, 0, 0, 763, 0, 764, 0, 765, 0, 766, 0, 0, 0, 0, 767, 0, 0, 0, 768, 0, 0, 0, - 769, 0, 0, 0, 770, 0, 771, 0, 772, 0, 773, 0, 774, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 777, 0, 0, 0, 0, 0, - 778, 0, 0, 779, 0, 0, 0, 0, 0, 780, 0, 0, 781, 0, 0, 0, 782, 0, 0, 783, 0, 784, 0, 0, 785, 0, 786, 0, 0, 787, 0, 788, - 0, 0, 789, 0, 790, 0, 791, 0, 792, 0, 793, 0, 794, 0, 795, 0, 796, 0, 797, 0, 798, 0, 799, 0, 800, 0, 801, 0, 802, 0, 803, 0, - 804, 0, 805, 0, 806, 0, 807, 0, 808, 0, 809, 0, 810, 0, 811, 0, 812, 0, 813, 814, 0, 0, 0, 815, 0, 0, 0, 816, 0, 0, 0, 0, - 0, 0, 0, 0, 817, 0, 818, 0, 819, 0, 0, 0, 0, 820, 821, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, - 0, 824, 0, 0, 825, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 0, 831, 0, 832, 0, 833, 0, 834, 0, 0, 0, 835, 0, 836, 0, 837, 0, - 838, 0, 839, 0, 840, 0, 0, 841, 0, 842, 0, 843, 0, 844, 0, 845, 0, 846, 0, 847, 0, 848, 0, 849, 0, 850, 0, 851, 0, 852, 0, 853, - 0, 854, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 857, 0, 0, 0, 0, 858, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 859, 0, 860, 0, 0, 861, 0, 0, 862, 0, 863, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 865, 0, 866, 0, 0, 867, 0, 868, 0, 869, 0, 870, 0, 0, 871, 0, 872, 0, 873, 0, 874, 0, 0, 875, - 0, 876, 0, 0, 0, 877, 0, 878, 0, 879, 0, 880, 0, 881, 0, 882, 0, 883, 0, 0, 884, 0, 885, 0, 886, 0, 887, 0, 0, 888, 0, 889, - 0, 890, 0, 891, 0, 892, 0, 893, 0, 0, 894, 0, 895, 0, 896, 0, 897, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 899, 0, 0, 900, 0, 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 902, 0, 903, 0, 0, 904, 0, 0, - 905, 0, 906, 0, 0, 907, 0, 0, 908, 0, 909, 0, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 911, 0, 0, - 0, 912, 0, 913, 0, 0, 914, 0, 0, 0, 915, 0, 916, 0, 917, 0, 0, 0, 918, 0, 919, 0, 920, 0, 0, 921, 922, 0, 923, 0, 924, 0, - 925, 0, 0, 0, 926, 0, 927, 928, 0, 0, 0, 0, 0, 0, 0, 929, 0, 0, 930, 0, 931, 0, 932, 0, 0, 933, 0, 934, 0, 935, 0, 936, - 0, 937, 0, 938, 0, 939, 0, 0, 0, 0, 940, 0, 941, 0, 942, 0, 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, 944, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, 946, 0, 0, 0, 947, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, - 950, 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, 953, - 954, 0, 0, 0, 0, 955, 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 957, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 958, 0, 0, 959, 0, 0, 0, 0, 0, 0, 0, 960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 961, 0, 0, 962, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 963, 0, 0, 0, 964, 0, 0, 0, 0, 0, 0, 965, 0, 0, 0, 966, 0, 0, 0, 0, 0, 967, 0, - 0, 0, 0, 968, 0, 0, 969, 0, 0, 970, 0, 971, 0, 972, 0, 0, 0, 0, 0, 0, 973, 0, 0, 974, 0, 975, 976, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 978, 0, 0, 0, 979, 0, 0, 0, 0, 0, 980, 0, 981, 982, 0, 0, 0, - 983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 984, 0, 0, 985, 0, 0, 0, 986, 0, 987, 0, 0, 0, 0, 0, 0, 988, 0, 0, 0, 989, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 990, 0, 0, 991, 0, 0, 0, 0, 0, 0, 992, 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, 0, 0, 994, - 0, 0, 995, 0, 996, 0, 0, 997, 0, 998, 999, 0, 0, 0, 0, 1000, 0, 0, 0, 1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1002, 0, 0, 0, 0, 1003, 0, 0, 0, 0, 1004, 0, 0, 1005, 0, 0, 0, 0, 0, 0, 0, 1006, 0, 0, - 0, 0, 1007, 0, 0, 0, 0, 0, 0, 1008, 0, 0, 1009, 1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1011, 0, 0, 0, 1012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1013, 0, - 0, 0, 1014, 0, 0, 0, 0, 0, 0, 1015, 0, 0, 0, 1016, 0, 0, 0, 0, 1017, 0, 1018, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1020, 0, 0, 0, 0, 0, 0, 1021, 0, 0, 0, 1022, 0, 0, 1023, 0, 0, 1024, 0, 0, 0, 0, 0, 1025, - 0, 1026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1027, 0, 0, 0, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1029, 0, 0, 0, 0, 0, 0, 1030, 0, 0, 0, 0, 1031, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0, 0, 0, 0, 1034, 0, 0, 0, 0, 0, 0, 1035, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1036, 0, 0, 1037, 0, 0, 0, 0, 1038, 0, 0, 0, 0, 0, 1039, 0, 0, 0, 0, 1040, 0, 0, 0, 0, 1041, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1043, 0, 0, 0, 0, 0, 1044, 0, 1045, - 0, 1046, 0, 1047, 0, 0, 0, 0, 1048, 0, 1049, 0, 1050, 0, 1051, 0, 0, 0, 0, 1052, 1053, 0, 0, 0, 0, 1054, 0, 0, 0, 1055, 0, 1056, - 0, 0, 0, 1057, 0, 0, 0, 1058, 0, 0, 0, 0, 0, 1059, 0, 0, 0, 0, 1060, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1061, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0205[64] = { + 0x1000915410955555ull, 0x409112AA08504211ull, 0x8914544288B54008ull, 0xA52A8020004228AAull, + 0x4A25094285145400ull, 0x69413A4B4AA8AAA4ull, 0x413A4B4AA8A82749ull, 0x0904E92D28274969ull, + 0xAAA0108091284285ull, 0x8040144AAA004155ull, 0x08A8544852200080ull, 0x0920412850244494ull, + 0x1012A084A4AB042Dull, 0xAA55555500205402ull, 0xA910504002820014ull, 0x92160842C10850A8ull, + 0x224A01140B049160ull, 0x5155421289010812ull, 0x92A95454A0504255ull, 0x2555008150084048ull, + 0x42854C929124A112ull, 0x2102445080924905ull, 0x02A0220249250890ull, 0x0085401080950425ull, + 0x44A1428A00000820ull, 0x0952048250064144ull, 0x4048201050002040ull, 0x8015A48000120002ull, + 0xA0102000A8554002ull, 0x0282805050505050ull, 0x0100802AAA800804ull, 0x2811555485224001ull, + 0xB042C09204204889ull, 0x4021012254084A4Aull, 0x44A256A80080A845ull, 0x2445102492AAA820ull, + 0xA25002A012041290ull, 0x0402102249554204ull, 0x8404AA02A8274969ull, 0x100512AA80101500ull, + 0x0911251448002020ull, 0x8404A821292AC084ull, 0x5484826A81081500ull, 0x3499208C5690AA30ull, + 0x04809551110AA492ull, 0x55555554A5291209ull, 0x80026150088D5555ull, 0xAAAAAA9554555552ull, + 0x0205250010900202ull, 0xA552AAA2954AA500ull, 0x25001090020154AAull, 0x5654544A20020525ull, + 0x0480542AAA5480D1ull, 0x8200010180031080ull, 0x4802024010000061ull, 0x06902A4841102200ull, + 0x440A24011A088200ull, 0x0008869484040900ull, 0x0000320420242100ull, 0x0054220440008800ull, + 0x0021000282488100ull, 0x0204200000A10200ull, 0xA080040021082120ull, 0x80042088A218550Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0205[64] = { + 1u, 21u, 38u, 57u, 74u, 92u, 119u, 145u, 170u, 188u, 205u, 219u, 235u, 255u, 276u, 289u, + 307u, 324u, 342u, 365u, 380u, 401u, 417u, 432u, 446u, 458u, 474u, 483u, 494u, 507u, 521u, 533u, + 551u, 568u, 584u, 603u, 622u, 637u, 652u, 674u, 688u, 701u, 719u, 736u, 759u, 778u, 804u, 824u, + 854u, 865u, 890u, 905u, 925u, 945u, 954u, 963u, 977u, 990u, 1002u, 1011u, 1020u, 1029u, 1036u, 1046u, }; void recomp_unit_0205_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0205_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B38000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0205[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0205[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0205[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B38000; @@ -1234,7 +1141,6 @@ LOCAL_DISPATCH: } L_08B38000: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 938u, 0x08B37FF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1266,7 +1172,6 @@ L_08B38018: } L_08B38020: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B388E4; } @@ -1284,7 +1189,6 @@ L_08B38030: AOT_REGCACHE_SYNC_OUT(); return; L_08B38038: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38184; } @@ -1292,7 +1196,6 @@ L_08B38038: } L_08B38040: aot_gpr_31 = (0x08B38048u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38048u) goto L_08B38048; AOT_REGCACHE_SYNC_OUT(); return; L_08B38048: @@ -1303,7 +1206,6 @@ L_08B38048: L_08B38050: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B38090; } @@ -1328,7 +1230,6 @@ L_08B38070: AOT_REGCACHE_SYNC_OUT(); return; L_08B38088: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38184; } @@ -1336,7 +1237,6 @@ L_08B38088: } L_08B38090: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B38158; } @@ -1344,14 +1244,12 @@ L_08B38090: } L_08B38098: aot_gpr_31 = (0x08B380A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B380A0u) goto L_08B380A0; AOT_REGCACHE_SYNC_OUT(); return; L_08B380A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(1653)))))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38158; } @@ -1360,7 +1258,6 @@ L_08B380A0: L_08B380B0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17331))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B380F0; } @@ -1379,7 +1276,6 @@ L_08B380BC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(172))); aot_gpr_4 = (static_cast(aot_gpr_4) < 500 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38124; } @@ -1429,7 +1325,6 @@ L_08B38138: AOT_REGCACHE_SYNC_OUT(); return; L_08B38150: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38184; } @@ -1454,7 +1349,6 @@ L_08B3816C: AOT_REGCACHE_SYNC_OUT(); return; L_08B38184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 938u, 0x08B37FF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1462,12 +1356,10 @@ L_08B38184: } L_08B3818C: aot_gpr_31 = (0x08B38194u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38194u) goto L_08B38194; AOT_REGCACHE_SYNC_OUT(); return; L_08B38194: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B381B0; } @@ -1475,7 +1367,6 @@ L_08B38194: } L_08B3819C: aot_gpr_31 = (0x08B381A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B381A4u) goto L_08B381A4; AOT_REGCACHE_SYNC_OUT(); return; L_08B381A4: @@ -1514,7 +1405,6 @@ L_08B381DC: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_13 = aot_fpr_14 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B381F8; @@ -1523,7 +1413,6 @@ L_08B381DC: L_08B381F8: aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -1547,12 +1436,10 @@ L_08B3820C: AOT_REGCACHE_SYNC_OUT(); return; L_08B38238: aot_gpr_31 = (0x08B38240u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38240u) goto L_08B38240; AOT_REGCACHE_SYNC_OUT(); return; L_08B38240: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38254; } @@ -1575,7 +1462,6 @@ L_08B3825C: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3827C; } @@ -1590,7 +1476,6 @@ L_08B3826C: AOT_REGCACHE_SYNC_OUT(); return; L_08B3827C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 938u, 0x08B37FF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1601,7 +1486,6 @@ L_08B38284: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3884C; } @@ -1611,7 +1495,6 @@ L_08B38298: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B382D0; } @@ -1624,7 +1507,6 @@ L_08B382A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B382B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B382D0; } @@ -1639,7 +1521,6 @@ L_08B382B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B382C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3884C; } @@ -1658,7 +1539,6 @@ L_08B382D0: L_08B382E0: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38344; } @@ -1673,7 +1553,6 @@ L_08B382EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B382FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38344; } @@ -1689,7 +1568,6 @@ L_08B38304: } L_08B3830C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38334; } @@ -1697,7 +1575,6 @@ L_08B3830C: } L_08B38314: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38344; } @@ -1712,7 +1589,6 @@ L_08B3831C: AOT_REGCACHE_SYNC_OUT(); return; L_08B3832C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38344; } @@ -1730,7 +1606,6 @@ L_08B38344: aot_mem.aot_direct_store8(aot_gpr_16 + static_cast(62), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17331))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B383BC; } @@ -1769,12 +1644,10 @@ L_08B38394: goto L_08B383BC; L_08B383BC: aot_gpr_31 = (0x08B383C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B383C4u) goto L_08B383C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B383C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B384F8; } @@ -1782,13 +1655,11 @@ L_08B383C4: } L_08B383CC: aot_gpr_31 = (0x08B383D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B383D4u) goto L_08B383D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B383D4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B384F8; } @@ -1796,13 +1667,11 @@ L_08B383D4: } L_08B383E0: aot_gpr_31 = (0x08B383E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B383E8u) goto L_08B383E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B383E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38438; } @@ -1810,7 +1679,6 @@ L_08B383E8: } L_08B383F4: aot_gpr_31 = (0x08B383FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B383FCu) goto L_08B383FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B383FC: @@ -1852,7 +1720,6 @@ L_08B38438: } L_08B38448: { const bool branch_taken = static_cast(aot_gpr_5) < 0; - // nop if (branch_taken) { goto L_08B38460; } @@ -1902,7 +1769,6 @@ L_08B38484: goto L_08B38498; L_08B38498: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B384C8; } @@ -1911,7 +1777,6 @@ L_08B38498: L_08B384A0: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(852))); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B384C8; } @@ -1922,7 +1787,6 @@ L_08B384AC: ctx.gpr[8] = (0u | 80u); ctx.gpr[7] = (ctx.gpr[7] & 496u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B384C8; } @@ -1945,7 +1809,6 @@ L_08B384D4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B384EC; } @@ -1953,7 +1816,6 @@ L_08B384D4: } L_08B384E4: aot_gpr_31 = (0x08B384ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 564u, 0x0896E500u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B384ECu) goto L_08B384EC; AOT_REGCACHE_SYNC_OUT(); return; L_08B384EC: @@ -1974,7 +1836,6 @@ L_08B384F8: L_08B38508: aot_gpr_4 = (static_cast(aot_gpr_16) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B387E0; } @@ -1982,7 +1843,6 @@ L_08B38508: } L_08B38514: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38534; } @@ -1998,7 +1858,6 @@ L_08B3851C: } L_08B38524: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38774; } @@ -2006,7 +1865,6 @@ L_08B38524: } L_08B3852C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B387E0; } @@ -2027,7 +1885,6 @@ L_08B3853C: goto L_08B3854C; L_08B3854C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3864C; } @@ -2035,7 +1892,6 @@ L_08B3854C: } L_08B38554: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3856C; } @@ -2043,7 +1899,6 @@ L_08B38554: } L_08B3855C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B385E0; } @@ -2051,7 +1906,6 @@ L_08B3855C: } L_08B38564: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3864C; } @@ -2066,7 +1920,6 @@ L_08B3856C: goto L_08B38578; L_08B38578: aot_gpr_31 = (0x08B38580u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38580u) goto L_08B38580; AOT_REGCACHE_SYNC_OUT(); return; L_08B38580: @@ -2089,7 +1942,6 @@ L_08B3858C: L_08B38598: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B385B0; } @@ -2123,7 +1975,6 @@ L_08B385C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B385D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3864C; } @@ -2138,7 +1989,6 @@ L_08B385E0: goto L_08B385EC; L_08B385EC: aot_gpr_31 = (0x08B385F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B385F4u) goto L_08B385F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B385F4: @@ -2161,7 +2011,6 @@ L_08B38600: L_08B3860C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B38624; } @@ -2195,7 +2044,6 @@ L_08B38634: AOT_REGCACHE_SYNC_OUT(); return; L_08B3864C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B387E0; } @@ -2216,7 +2064,6 @@ L_08B3865C: goto L_08B3866C; L_08B3866C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3876C; } @@ -2224,7 +2071,6 @@ L_08B3866C: } L_08B38674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3868C; } @@ -2232,7 +2078,6 @@ L_08B38674: } L_08B3867C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38700; } @@ -2240,7 +2085,6 @@ L_08B3867C: } L_08B38684: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3876C; } @@ -2255,7 +2099,6 @@ L_08B3868C: goto L_08B38698; L_08B38698: aot_gpr_31 = (0x08B386A0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B386A0u) goto L_08B386A0; AOT_REGCACHE_SYNC_OUT(); return; L_08B386A0: @@ -2278,7 +2121,6 @@ L_08B386AC: L_08B386B8: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B386D0; } @@ -2312,7 +2154,6 @@ L_08B386E0: AOT_REGCACHE_SYNC_OUT(); return; L_08B386F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3876C; } @@ -2327,7 +2168,6 @@ L_08B38700: goto L_08B3870C; L_08B3870C: aot_gpr_31 = (0x08B38714u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38714u) goto L_08B38714; AOT_REGCACHE_SYNC_OUT(); return; L_08B38714: @@ -2350,7 +2190,6 @@ L_08B38720: L_08B3872C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B38744; } @@ -2384,7 +2223,6 @@ L_08B38754: AOT_REGCACHE_SYNC_OUT(); return; L_08B3876C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B387E0; } @@ -2399,7 +2237,6 @@ L_08B38774: goto L_08B38780; L_08B38780: aot_gpr_31 = (0x08B38788u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38788u) goto L_08B38788; AOT_REGCACHE_SYNC_OUT(); return; L_08B38788: @@ -2422,7 +2259,6 @@ L_08B38794: L_08B387A0: ctx.gpr[18] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B387B8; } @@ -2457,7 +2293,6 @@ L_08B387C8: L_08B387E0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-17331))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38808; } @@ -2473,7 +2308,6 @@ L_08B387EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B38800: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3881C; } @@ -2509,7 +2343,6 @@ L_08B38838: goto L_08B3884C; L_08B3884C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 938u, 0x08B37FF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2545,7 +2378,6 @@ L_08B3887C: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B3889C; @@ -2554,7 +2386,6 @@ L_08B3887C: L_08B3889C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -2581,7 +2412,6 @@ L_08B388D4: AOT_REGCACHE_SYNC_OUT(); return; L_08B388DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 938u, 0x08B37FF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2589,12 +2419,10 @@ L_08B388DC: } L_08B388E4: aot_gpr_31 = (0x08B388ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B388ECu) goto L_08B388EC; AOT_REGCACHE_SYNC_OUT(); return; L_08B388EC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38900; } @@ -2602,7 +2430,6 @@ L_08B388EC: } L_08B388F4: aot_gpr_31 = (0x08B388FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B388FCu) goto L_08B388FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B388FC: @@ -2615,7 +2442,6 @@ L_08B38900: AOT_REGCACHE_SYNC_OUT(); return; L_08B38908: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38918; } @@ -2627,7 +2453,6 @@ L_08B38910: goto L_08B38918; L_08B38918: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0204_entry, 204u, 938u, 0x08B37FF0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -2646,7 +2471,17 @@ L_08B38920: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B38938: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -2666,7 +2501,6 @@ L_08B38938: } L_08B38964: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2674,7 +2508,6 @@ L_08B38964: } L_08B3896C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B38C54; } @@ -2682,7 +2515,6 @@ L_08B3896C: } L_08B38974: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B389A8; } @@ -2698,7 +2530,6 @@ L_08B3897C: } L_08B38984: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2776,9 +2607,7 @@ L_08B38A1C: { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38A8C; } @@ -2788,7 +2617,6 @@ L_08B38A54: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2802,7 +2630,6 @@ L_08B38A64: AOT_REGCACHE_SYNC_OUT(); return; L_08B38A70: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2822,7 +2649,6 @@ L_08B38A78: L_08B38A8C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2837,7 +2663,6 @@ L_08B38A98: AOT_REGCACHE_SYNC_OUT(); return; L_08B38AA8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2845,7 +2670,6 @@ L_08B38AA8: } L_08B38AB0: aot_gpr_31 = (0x08B38AB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38AB8u) goto L_08B38AB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B38AB8: @@ -2858,7 +2682,6 @@ L_08B38AB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B38ACC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -2887,7 +2710,6 @@ L_08B38AEC: goto L_08B38B08; L_08B38B08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38D38; } @@ -2896,7 +2718,6 @@ L_08B38B08: L_08B38B10: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B38B28; } @@ -2938,7 +2759,6 @@ L_08B38B54: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B38B70; @@ -2959,7 +2779,6 @@ L_08B38B78: AOT_REGCACHE_SYNC_OUT(); return; L_08B38B8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B38BA0; } @@ -2978,9 +2797,7 @@ L_08B38BA0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(140))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38C44; } @@ -2999,7 +2816,6 @@ L_08B38BB8: L_08B38BD4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(63))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B38C40; } @@ -3008,7 +2824,6 @@ L_08B38BD4: L_08B38BE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B38C08; } @@ -3068,7 +2883,6 @@ L_08B38C44: AOT_REGCACHE_SYNC_OUT(); return; L_08B38C4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -3076,13 +2890,11 @@ L_08B38C4C: } L_08B38C54: aot_gpr_31 = (0x08B38C5Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38C5Cu) goto L_08B38C5C; AOT_REGCACHE_SYNC_OUT(); return; L_08B38C5C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B38CBC; } @@ -3091,7 +2903,6 @@ L_08B38C5C: L_08B38C68: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B38CBC; } @@ -3099,7 +2910,6 @@ L_08B38C68: } L_08B38C74: aot_gpr_31 = (0x08B38C7Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38C7Cu) goto L_08B38C7C; AOT_REGCACHE_SYNC_OUT(); return; L_08B38C7C: @@ -3120,9 +2930,7 @@ L_08B38C9C: aot_gpr_4 = (17024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38CBC; } @@ -3134,7 +2942,6 @@ L_08B38CB4: goto L_08B38CBC; L_08B38CBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -3151,7 +2958,6 @@ L_08B38CD0: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B38CF0; @@ -3160,7 +2966,6 @@ L_08B38CD0: L_08B38CF0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3187,7 +2992,6 @@ L_08B38D28: AOT_REGCACHE_SYNC_OUT(); return; L_08B38D30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38B08; } @@ -3207,7 +3011,17 @@ L_08B38D38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B38D54: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -3226,7 +3040,6 @@ L_08B38D54: } L_08B38D80: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3234,7 +3047,6 @@ L_08B38D80: } L_08B38D88: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B391C8; } @@ -3242,7 +3054,6 @@ L_08B38D88: } L_08B38D90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B38DC0; } @@ -3258,7 +3069,6 @@ L_08B38D98: } L_08B38DA0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3266,12 +3076,10 @@ L_08B38DA0: } L_08B38DA8: aot_gpr_31 = (0x08B38DB0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38DB0u) goto L_08B38DB0; AOT_REGCACHE_SYNC_OUT(); return; L_08B38DB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B392B8; } @@ -3279,7 +3087,6 @@ L_08B38DB0: } L_08B38DB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B392F0; } @@ -3287,12 +3094,10 @@ L_08B38DB8: } L_08B38DC0: aot_gpr_31 = (0x08B38DC8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38DC8u) goto L_08B38DC8; AOT_REGCACHE_SYNC_OUT(); return; L_08B38DC8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38E08; } @@ -3300,7 +3105,6 @@ L_08B38DC8: } L_08B38DD0: aot_gpr_31 = (0x08B38DD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38DD8u) goto L_08B38DD8; AOT_REGCACHE_SYNC_OUT(); return; L_08B38DD8: @@ -3311,7 +3115,6 @@ L_08B38DD8: AOT_REGCACHE_SYNC_OUT(); return; L_08B38DE4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B38E08; } @@ -3319,7 +3122,6 @@ L_08B38DE4: } L_08B38DEC: aot_gpr_31 = (0x08B38DF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38DF4u) goto L_08B38DF4; AOT_REGCACHE_SYNC_OUT(); return; L_08B38DF4: @@ -3352,7 +3154,6 @@ L_08B38E10: { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B38E44; @@ -3362,9 +3163,7 @@ L_08B38E44: aot_gpr_4 = (16928u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38ED0; } @@ -3386,7 +3185,6 @@ L_08B38E64: { const float fs = aot_fpr_12; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = aot_fpr_14 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B38E98; @@ -3396,9 +3194,7 @@ L_08B38E98: aot_gpr_4 = (16928u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38ED0; } @@ -3413,9 +3209,7 @@ L_08B38EB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(72))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38EE0; } @@ -3434,7 +3228,6 @@ L_08B38ED0: L_08B38EE0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3442,12 +3235,10 @@ L_08B38EE0: } L_08B38EEC: aot_gpr_31 = (0x08B38EF4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38EF4u) goto L_08B38EF4; AOT_REGCACHE_SYNC_OUT(); return; L_08B38EF4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3462,7 +3253,6 @@ L_08B38EFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B38F0C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3470,7 +3260,6 @@ L_08B38F0C: } L_08B38F14: aot_gpr_31 = (0x08B38F1Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B38F1Cu) goto L_08B38F1C; AOT_REGCACHE_SYNC_OUT(); return; L_08B38F1C: @@ -3483,7 +3272,6 @@ L_08B38F1C: AOT_REGCACHE_SYNC_OUT(); return; L_08B38F30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3505,7 +3293,6 @@ L_08B38F4C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1280)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B38F7C; } @@ -3515,9 +3302,7 @@ L_08B38F60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1400))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38F7C; } @@ -3528,7 +3313,6 @@ L_08B38F78: goto L_08B38F7C; L_08B38F7C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39064; } @@ -3539,7 +3323,6 @@ L_08B38F84: aot_gpr_5 = (0u | 8u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B38FD0; } @@ -3550,7 +3333,6 @@ L_08B38F98: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1280)))))); aot_gpr_5 = (aot_gpr_5 & 8u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B38FC8; } @@ -3560,9 +3342,7 @@ L_08B38FAC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1400))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B38FC8; } @@ -3573,7 +3353,6 @@ L_08B38FC4: goto L_08B38FC8; L_08B38FC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39064; } @@ -3584,7 +3363,6 @@ L_08B38FD0: aot_gpr_5 = (0u | 9u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B39020; } @@ -3599,7 +3377,6 @@ L_08B38FE4: L_08B38FF0: aot_gpr_4 = (ctx.gpr[2] < static_cast(226) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39018; } @@ -3609,9 +3386,7 @@ L_08B38FFC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1752))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39018; } @@ -3622,7 +3397,6 @@ L_08B39014: goto L_08B39018; L_08B39018: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39064; } @@ -3632,7 +3406,6 @@ L_08B39020: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B39064; } @@ -3647,7 +3420,6 @@ L_08B39030: L_08B3903C: aot_gpr_4 = (ctx.gpr[2] < static_cast(226) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39064; } @@ -3657,9 +3429,7 @@ L_08B39048: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(1752))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39064; } @@ -3670,7 +3440,6 @@ L_08B39060: goto L_08B39064; L_08B39064: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3683,7 +3452,6 @@ L_08B3906C: aot_gpr_4 = (aot_gpr_4 & 496u); aot_gpr_4 = (aot_gpr_4 >> 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3715,7 +3483,6 @@ L_08B390A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B390C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39380; } @@ -3724,7 +3491,6 @@ L_08B390C4: L_08B390CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B390E4; } @@ -3766,7 +3532,6 @@ L_08B39110: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B3912C; @@ -3775,7 +3540,6 @@ L_08B39110: L_08B3912C: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -3797,7 +3561,6 @@ L_08B39140: L_08B39160: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B391B8; } @@ -3843,7 +3606,6 @@ L_08B391B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B391C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -3851,12 +3613,10 @@ L_08B391C0: } L_08B391C8: aot_gpr_31 = (0x08B391D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0023_entry, 23u, 617u, 0x088634F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B391D0u) goto L_08B391D0; AOT_REGCACHE_SYNC_OUT(); return; L_08B391D0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B392B0; } @@ -3864,7 +3624,6 @@ L_08B391D0: } L_08B391D8: aot_gpr_31 = (0x08B391E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B391E0u) goto L_08B391E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B391E0: @@ -3876,7 +3635,6 @@ L_08B391E0: AOT_REGCACHE_SYNC_OUT(); return; L_08B391F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B39200; } @@ -3888,12 +3646,10 @@ L_08B391F8: goto L_08B39200; L_08B39200: aot_gpr_31 = (0x08B39208u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39208u) goto L_08B39208; AOT_REGCACHE_SYNC_OUT(); return; L_08B39208: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B392B0; } @@ -3901,7 +3657,6 @@ L_08B39208: } L_08B39210: aot_gpr_31 = (0x08B39218u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39218u) goto L_08B39218; AOT_REGCACHE_SYNC_OUT(); return; L_08B39218: @@ -3922,9 +3677,7 @@ L_08B39238: aot_gpr_4 = (17024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B392B0; } @@ -3932,7 +3685,6 @@ L_08B39238: } L_08B39250: aot_gpr_31 = (0x08B39258u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39258u) goto L_08B39258; AOT_REGCACHE_SYNC_OUT(); return; L_08B39258: @@ -3940,9 +3692,7 @@ L_08B39258: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B392B0; } @@ -3950,7 +3700,6 @@ L_08B39258: } L_08B39274: aot_gpr_31 = (0x08B3927Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3927Cu) goto L_08B3927C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3927C: @@ -3961,7 +3710,6 @@ L_08B3927C: AOT_REGCACHE_SYNC_OUT(); return; L_08B39288: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B392B0; } @@ -3969,14 +3717,12 @@ L_08B39288: } L_08B39290: aot_gpr_31 = (0x08B39298u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39298u) goto L_08B39298; AOT_REGCACHE_SYNC_OUT(); return; L_08B39298: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[2] + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B392B0; } @@ -3996,7 +3742,6 @@ L_08B392B0: } L_08B392B8: aot_gpr_31 = (0x08B392C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B392C0u) goto L_08B392C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B392C0: @@ -4007,7 +3752,6 @@ L_08B392C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B392CC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B392F0; } @@ -4015,7 +3759,6 @@ L_08B392CC: } L_08B392D4: aot_gpr_31 = (0x08B392DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B392DCu) goto L_08B392DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B392DC: @@ -4062,7 +3805,6 @@ L_08B39318: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B39338; @@ -4071,7 +3813,6 @@ L_08B39318: L_08B39338: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4098,7 +3839,6 @@ L_08B39370: AOT_REGCACHE_SYNC_OUT(); return; L_08B39378: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B390C4; } @@ -4118,7 +3858,17 @@ L_08B39380: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3939C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -4136,7 +3886,6 @@ L_08B3939C: } L_08B393C0: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B39590; } @@ -4144,7 +3893,6 @@ L_08B393C0: } L_08B393C8: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B396E4; } @@ -4152,7 +3900,6 @@ L_08B393C8: } L_08B393D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39404; } @@ -4168,7 +3915,6 @@ L_08B393D8: } L_08B393E0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4196,7 +3942,6 @@ L_08B393F4: L_08B39404: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4206,7 +3951,6 @@ L_08B39410: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39484; } @@ -4222,7 +3966,6 @@ L_08B39420: AOT_REGCACHE_SYNC_OUT(); return; L_08B39434: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B39484; } @@ -4231,7 +3974,6 @@ L_08B39434: L_08B3943C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39460; } @@ -4240,7 +3982,6 @@ L_08B3943C: L_08B39448: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39460; } @@ -4270,7 +4011,6 @@ L_08B39470: AOT_REGCACHE_SYNC_OUT(); return; L_08B3947C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B394AC; } @@ -4279,7 +4019,6 @@ L_08B3947C: L_08B39484: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B394A8; } @@ -4288,7 +4027,6 @@ L_08B39484: L_08B39490: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B394A8; } @@ -4306,7 +4044,6 @@ L_08B394A8: L_08B394AC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4314,12 +4051,10 @@ L_08B394AC: } L_08B394B8: aot_gpr_31 = (0x08B394C0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B394C0u) goto L_08B394C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B394C0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4330,7 +4065,6 @@ L_08B394C8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B39590; } @@ -4338,7 +4072,6 @@ L_08B394C8: } L_08B394DC: aot_gpr_31 = (0x08B394E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B394E4u) goto L_08B394E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B394E4: @@ -4351,7 +4084,6 @@ L_08B394E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B394F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4359,16 +4091,13 @@ L_08B394F8: } L_08B39500: aot_gpr_31 = (0x08B39508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39508u) goto L_08B39508; AOT_REGCACHE_SYNC_OUT(); return; L_08B39508: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(1252))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39590; } @@ -4377,7 +4106,6 @@ L_08B39508: L_08B39520: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39544; } @@ -4386,7 +4114,6 @@ L_08B39520: L_08B3952C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39544; } @@ -4407,7 +4134,6 @@ L_08B39544: L_08B39550: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3957C; } @@ -4435,7 +4161,6 @@ L_08B3957C: goto L_08B39590; L_08B39590: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B397C8; } @@ -4471,7 +4196,6 @@ L_08B395C4: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B395E0; @@ -4480,7 +4204,6 @@ L_08B395C4: L_08B395E0: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4495,7 +4218,6 @@ L_08B395F4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(171))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B396B4; } @@ -4504,7 +4226,6 @@ L_08B395F4: L_08B39610: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B396B4; } @@ -4514,7 +4235,6 @@ L_08B3961C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B396B4; } @@ -4530,7 +4250,6 @@ L_08B3962C: AOT_REGCACHE_SYNC_OUT(); return; L_08B39640: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B396B4; } @@ -4539,7 +4258,6 @@ L_08B39640: L_08B39648: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3966C; } @@ -4548,7 +4266,6 @@ L_08B39648: L_08B39654: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3966C; } @@ -4569,7 +4286,6 @@ L_08B3966C: L_08B39678: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B396A4; } @@ -4612,7 +4328,6 @@ L_08B396D4: AOT_REGCACHE_SYNC_OUT(); return; L_08B396DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4625,7 +4340,6 @@ L_08B396E4: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(171))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B39748; } @@ -4633,7 +4347,6 @@ L_08B396E4: } L_08B39700: aot_gpr_31 = (0x08B39708u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39708u) goto L_08B39708; AOT_REGCACHE_SYNC_OUT(); return; L_08B39708: @@ -4654,9 +4367,7 @@ L_08B39728: aot_gpr_4 = (17096u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39748; } @@ -4668,7 +4379,6 @@ L_08B39740: goto L_08B39748; L_08B39748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4685,7 +4395,6 @@ L_08B3975C: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B3977C; @@ -4694,7 +4403,6 @@ L_08B3975C: L_08B3977C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -4722,7 +4430,6 @@ L_08B397B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B397C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39590; } @@ -4740,7 +4447,17 @@ L_08B397C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B397DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(180), aot_gpr_16); @@ -4763,11 +4480,20 @@ L_08B39814: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-31008))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3982C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -4776,8 +4502,6 @@ L_08B3982C: { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(ctx.gpr[18])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.gpr[19] + static_cast(1)); aot_gpr_5 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(ctx.gpr[18])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (static_cast(static_cast(aot_gpr_5) >> 3u)); aot_gpr_4 = (aot_gpr_4 >> 29u); @@ -4790,7 +4514,6 @@ L_08B3982C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 3u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39970; } @@ -4798,7 +4521,6 @@ L_08B3982C: } L_08B39884: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_08B3989C; } @@ -4857,7 +4579,6 @@ L_08B398D4: L_08B398DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39908; } @@ -4867,7 +4588,6 @@ L_08B398E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(852))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B39908; } @@ -4929,7 +4649,6 @@ L_08B39948: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 3u)); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B39884; } @@ -4937,7 +4656,6 @@ L_08B39948: } L_08B39970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39CFC; } @@ -4946,7 +4664,6 @@ L_08B39970: L_08B39978: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B399D0; } @@ -4974,9 +4691,7 @@ L_08B399A8: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B399D8; } @@ -4997,7 +4712,6 @@ L_08B399D0: goto L_08B399D8; L_08B399D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39CFC; } @@ -5021,7 +4735,6 @@ L_08B399EC: aot_fpr_12 = std::bit_cast(0u); aot_fpr_13 = ctx.fpr[15] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B39A18; @@ -5032,7 +4745,6 @@ L_08B39A18: aot_gpr_4 = (aot_gpr_4 | 55676u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5060,7 +4772,6 @@ L_08B39A34: AOT_REGCACHE_SYNC_OUT(); return; L_08B39A70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39AB4; } @@ -5102,9 +4813,7 @@ L_08B39AB4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(140))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39C38; } @@ -5149,7 +4858,6 @@ L_08B39B04: ctx.fpr[16] = static_cast(static_cast(std::bit_cast(ctx.fpr[16]))); aot_fpr_12 = aot_fpr_12 + ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(aot_fpr_12)); goto L_08B39B50; @@ -5192,7 +4900,6 @@ L_08B39B9C: L_08B39BA8: ctx.gpr[19] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B39BC0; } @@ -5252,7 +4959,6 @@ L_08B39C04: AOT_REGCACHE_SYNC_OUT(); return; L_08B39C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39C48; } @@ -5269,7 +4975,6 @@ L_08B39C48: AOT_REGCACHE_SYNC_OUT(); return; L_08B39C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39CFC; } @@ -5280,7 +4985,6 @@ L_08B39C58: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39C74; } @@ -5292,7 +4996,6 @@ L_08B39C6C: goto L_08B39C74; L_08B39C74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39CFC; } @@ -5310,7 +5013,6 @@ L_08B39C7C: aot_fpr_13 = aot_fpr_14 + aot_fpr_13; aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B39CB4; @@ -5321,7 +5023,6 @@ L_08B39CB4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -5351,7 +5052,6 @@ L_08B39CFC: aot_gpr_5 = (0u | 23u); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B39E08; } @@ -5366,9 +5066,7 @@ L_08B39D18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39E08; } @@ -5383,9 +5081,7 @@ L_08B39D38: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39E08; } @@ -5400,9 +5096,7 @@ L_08B39D58: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39E08; } @@ -5417,9 +5111,7 @@ L_08B39D78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(116))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39E08; } @@ -5437,9 +5129,7 @@ L_08B39D98: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39E08; } @@ -5454,9 +5144,7 @@ L_08B39DC4: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(96))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39E08; } @@ -5464,7 +5152,6 @@ L_08B39DC4: } L_08B39DDC: aot_gpr_31 = (0x08B39DE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B39DE4u) goto L_08B39DE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B39DE4: @@ -5495,7 +5182,17 @@ L_08B39E08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B39E2C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -5508,7 +5205,6 @@ L_08B39E2C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(92), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5548,7 +5244,6 @@ L_08B39E74: } L_08B39E7C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B3A208; } @@ -5612,9 +5307,7 @@ L_08B39F00: { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B39F44; } @@ -5623,7 +5316,6 @@ L_08B39F00: L_08B39F38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B39F7C; } @@ -5633,7 +5325,6 @@ L_08B39F44: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); aot_gpr_4 = (aot_gpr_4 & 31u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5647,7 +5338,6 @@ L_08B39F54: AOT_REGCACHE_SYNC_OUT(); return; L_08B39F60: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5667,7 +5357,6 @@ L_08B39F68: L_08B39F7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5680,7 +5369,6 @@ L_08B39F88: AOT_REGCACHE_SYNC_OUT(); return; L_08B39F90: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5693,7 +5381,6 @@ L_08B39F98: AOT_REGCACHE_SYNC_OUT(); return; L_08B39FA0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5706,7 +5393,6 @@ L_08B39FA8: AOT_REGCACHE_SYNC_OUT(); return; L_08B39FB0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5735,7 +5421,6 @@ L_08B39FD0: goto L_08B39FEC; L_08B39FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A23C; } @@ -5744,7 +5429,6 @@ L_08B39FEC: L_08B39FF4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A00C; } @@ -5786,7 +5470,6 @@ L_08B3A038: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B3A054; @@ -5795,7 +5478,6 @@ L_08B3A038: L_08B3A054: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -5816,7 +5498,6 @@ L_08B3A068: L_08B3A084: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(63))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3A0F0; } @@ -5825,7 +5506,6 @@ L_08B3A084: L_08B3A090: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A0B8; } @@ -5882,7 +5562,6 @@ L_08B3A0F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A0FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5890,13 +5569,11 @@ L_08B3A0FC: } L_08B3A104: aot_gpr_31 = (0x08B3A10Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A10Cu) goto L_08B3A10C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A10C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B3A170; } @@ -5905,7 +5582,6 @@ L_08B3A10C: L_08B3A118: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A170; } @@ -5913,7 +5589,6 @@ L_08B3A118: } L_08B3A124: aot_gpr_31 = (0x08B3A12Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A12Cu) goto L_08B3A12C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A12C: @@ -5935,9 +5610,7 @@ L_08B3A14C: aot_gpr_4 = (aot_gpr_4 | 32768u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A170; } @@ -5949,7 +5622,6 @@ L_08B3A168: goto L_08B3A170; L_08B3A170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -5985,7 +5657,6 @@ L_08B3A1A0: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B3A1C0; @@ -5994,7 +5665,6 @@ L_08B3A1A0: L_08B3A1C0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6021,7 +5691,6 @@ L_08B3A1F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A200: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -6031,7 +5700,6 @@ L_08B3A208: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(61))); aot_gpr_5 = (0u | 12u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3A234; } @@ -6042,7 +5710,6 @@ L_08B3A218: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A234; } @@ -6054,7 +5721,6 @@ L_08B3A22C: goto L_08B3A234; L_08B3A234: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B39FEC; } @@ -6075,7 +5741,17 @@ L_08B3A23C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3A25C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), aot_gpr_16); @@ -6095,7 +5771,6 @@ L_08B3A25C: } L_08B3A28C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3A3C0; } @@ -6109,7 +5784,6 @@ L_08B3A294: goto L_08B3A29C; L_08B3A29C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A2D4; } @@ -6128,7 +5802,6 @@ L_08B3A2A8: } L_08B3A2B0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A3C0; } @@ -6176,7 +5849,6 @@ L_08B3A2F8: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16675u << 16u); if (branch_taken) { @@ -6188,9 +5860,7 @@ L_08B3A314: aot_gpr_4 = (aot_gpr_4 | 55051u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A34C; } @@ -6198,12 +5868,10 @@ L_08B3A314: } L_08B3A32C: aot_gpr_31 = (0x08B3A334u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A334u) goto L_08B3A334; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A334: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B3A34C; } @@ -6216,7 +5884,6 @@ L_08B3A33C: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A344: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3A388; } @@ -6224,12 +5891,10 @@ L_08B3A344: } L_08B3A34C: aot_gpr_31 = (0x08B3A354u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A354u) goto L_08B3A354; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A354: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3A394; } @@ -6237,7 +5902,6 @@ L_08B3A354: } L_08B3A35C: aot_gpr_31 = (0x08B3A364u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A364u) goto L_08B3A364; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A364: @@ -6255,7 +5919,6 @@ L_08B3A370: L_08B3A37C: aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3A394; } @@ -6275,9 +5938,7 @@ L_08B3A394: aot_gpr_4 = (aot_gpr_4 | 8192u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A3C0; } @@ -6292,7 +5953,6 @@ L_08B3A3B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A3C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A730; } @@ -6328,7 +5988,6 @@ L_08B3A3F4: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B3A410; @@ -6342,7 +6001,6 @@ L_08B3A410: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A41C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B3A430; } @@ -6361,9 +6019,7 @@ L_08B3A430: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(140))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A494; } @@ -6404,7 +6060,6 @@ L_08B3A494: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A49C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A3C0; } @@ -6421,7 +6076,6 @@ L_08B3A4A4: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A4FC; } @@ -6463,7 +6117,6 @@ L_08B3A508: aot_gpr_4 = (aot_gpr_4 | 57671u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (17096u << 16u); if (branch_taken) { @@ -6474,9 +6127,7 @@ L_08B3A508: L_08B3A524: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A6B4; } @@ -6484,12 +6135,10 @@ L_08B3A524: } L_08B3A538: aot_gpr_31 = (0x08B3A540u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A540u) goto L_08B3A540; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A540: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3A6B4; } @@ -6497,12 +6146,10 @@ L_08B3A540: } L_08B3A548: aot_gpr_31 = (0x08B3A550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A550u) goto L_08B3A550; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A550: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3A67C; } @@ -6522,7 +6169,6 @@ L_08B3A560: L_08B3A56C: aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3A67C; } @@ -6531,7 +6177,6 @@ L_08B3A56C: L_08B3A578: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A6B4; } @@ -6572,9 +6217,7 @@ L_08B3A5C4: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_13 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A674; } @@ -6586,7 +6229,6 @@ L_08B3A5E8: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < static_cast(18001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3A674; } @@ -6601,7 +6243,6 @@ L_08B3A600: goto L_08B3A60C; L_08B3A60C: aot_gpr_31 = (0x08B3A614u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A614u) goto L_08B3A614; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A614: @@ -6624,7 +6265,6 @@ L_08B3A620: L_08B3A62C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B3A644; } @@ -6662,7 +6302,6 @@ L_08B3A66C: goto L_08B3A674; L_08B3A674: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A6B4; } @@ -6686,7 +6325,6 @@ L_08B3A684: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A6A4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3A6B4; } @@ -6698,7 +6336,6 @@ L_08B3A6AC: goto L_08B3A6B4; L_08B3A6B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A3C0; } @@ -6715,7 +6352,6 @@ L_08B3A6C8: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B3A6E8; @@ -6724,7 +6360,6 @@ L_08B3A6C8: L_08B3A6E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -6751,7 +6386,6 @@ L_08B3A720: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A728: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A3C0; } @@ -6772,7 +6406,17 @@ L_08B3A730: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3A750: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(84), aot_gpr_16); @@ -6792,7 +6436,6 @@ L_08B3A750: } L_08B3A77C: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -6800,7 +6443,6 @@ L_08B3A77C: } L_08B3A784: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B3A94C; } @@ -6808,7 +6450,6 @@ L_08B3A784: } L_08B3A78C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A7C0; } @@ -6824,7 +6465,6 @@ L_08B3A794: } L_08B3A79C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -6902,9 +6542,7 @@ L_08B3A834: { const float fs = ctx.fpr[24]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[22] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -6913,7 +6551,6 @@ L_08B3A834: L_08B3A86C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -6928,7 +6565,6 @@ L_08B3A878: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A888: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -6942,7 +6578,6 @@ L_08B3A890: goto L_08B3A8A0; L_08B3A8A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AA30; } @@ -6951,7 +6586,6 @@ L_08B3A8A0: L_08B3A8A8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A8C0; } @@ -6993,7 +6627,6 @@ L_08B3A8EC: { const float fs = ctx.fpr[15]; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B3A908; @@ -7002,7 +6635,6 @@ L_08B3A8EC: L_08B3A908: aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7030,7 +6662,6 @@ L_08B3A93C: AOT_REGCACHE_SYNC_OUT(); return; L_08B3A944: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -7038,13 +6669,11 @@ L_08B3A944: } L_08B3A94C: aot_gpr_31 = (0x08B3A954u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A954u) goto L_08B3A954; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A954: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B3A9B4; } @@ -7053,7 +6682,6 @@ L_08B3A954: L_08B3A960: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(164))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3A9B4; } @@ -7061,7 +6689,6 @@ L_08B3A960: } L_08B3A96C: aot_gpr_31 = (0x08B3A974u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3A974u) goto L_08B3A974; AOT_REGCACHE_SYNC_OUT(); return; L_08B3A974: @@ -7082,9 +6709,7 @@ L_08B3A994: aot_gpr_4 = (17024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3A9B4; } @@ -7096,7 +6721,6 @@ L_08B3A9AC: goto L_08B3A9B4; L_08B3A9B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -7113,7 +6737,6 @@ L_08B3A9C8: { const float fs = aot_fpr_14; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); goto L_08B3A9E8; @@ -7122,7 +6745,6 @@ L_08B3A9C8: L_08B3A9E8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(144))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_13)) && aot_fpr_12 == aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(140), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -7149,7 +6771,6 @@ L_08B3AA20: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AA28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3A8A0; } @@ -7169,13 +6790,22 @@ L_08B3AA30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AA4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(4476))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08B3AA8C; } @@ -7225,7 +6855,17 @@ L_08B3AA98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AAA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(4476))); @@ -7242,7 +6882,17 @@ L_08B3AABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AAC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(4476))); @@ -7258,28 +6908,57 @@ L_08B3AADC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AAE8: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4488))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AAF0: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4489))); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AAF8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (9u << 16u); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AB78; } @@ -7297,7 +6976,6 @@ L_08B3AB14: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AB24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3AB3C; } @@ -7321,7 +6999,6 @@ L_08B3AB3C: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(4488), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-19661))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3AB8C; } @@ -7330,7 +7007,6 @@ L_08B3AB3C: L_08B3AB50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5868))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3AB68; } @@ -7338,7 +7014,6 @@ L_08B3AB50: } L_08B3AB5C: aot_gpr_31 = (0x08B3AB64u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3AB64u) goto L_08B3AB64; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AB64: @@ -7351,7 +7026,6 @@ L_08B3AB68: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AB70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AB8C; } @@ -7361,7 +7035,6 @@ L_08B3AB78: aot_gpr_4 = (6u << 16u); aot_gpr_4 = (aot_gpr_5 & aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AB8C; } @@ -7378,7 +7051,17 @@ L_08B3AB8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AB9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 & 2u); @@ -7394,7 +7077,6 @@ L_08B3AB9C: L_08B3ABB4: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AC04; } @@ -7403,7 +7085,6 @@ L_08B3ABB4: L_08B3ABC0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4488))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3ABD0; } @@ -7415,7 +7096,6 @@ L_08B3ABCC: L_08B3ABD0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AC04; } @@ -7430,7 +7110,6 @@ L_08B3ABDC: goto L_08B3ABE8; L_08B3ABE8: aot_gpr_31 = (0x08B3ABF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 452u, 0x08B65D8Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3ABF0u) goto L_08B3ABF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B3ABF0: @@ -7445,7 +7124,6 @@ L_08B3ABF4: L_08B3AC04: aot_gpr_4 = (aot_gpr_16 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AC1C; } @@ -7463,7 +7141,6 @@ L_08B3AC10: L_08B3AC1C: aot_gpr_4 = (aot_gpr_16 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3AC4C; } @@ -7472,7 +7149,6 @@ L_08B3AC1C: L_08B3AC28: aot_gpr_4 = (aot_gpr_16 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AC4C; } @@ -7480,12 +7156,10 @@ L_08B3AC28: } L_08B3AC34: aot_gpr_31 = (0x08B3AC3Cu); - // nop ctx.pc = 0x08B73104u; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AC3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3AC4C; } @@ -7493,7 +7167,6 @@ L_08B3AC3C: } L_08B3AC44: aot_gpr_31 = (0x08B3AC4Cu); - // nop ctx.pc = 0x08B730FCu; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AC4C: @@ -7505,12 +7178,21 @@ L_08B3AC4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AC60: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B3AC70u); - // nop ctx.pc = 0x08B735F4u; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AC70: @@ -7521,7 +7203,17 @@ L_08B3AC70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AC80: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7556,7 +7248,17 @@ L_08B3ACB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3ACBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (2228u << 16u); @@ -7571,7 +7273,6 @@ L_08B3ACBC: L_08B3ACDC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3AE48; } @@ -7589,7 +7290,6 @@ L_08B3ACE8: L_08B3AD00: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3AE38; } @@ -7607,7 +7307,6 @@ L_08B3AD0C: L_08B3AD24: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3AE20; } @@ -7623,7 +7322,6 @@ L_08B3AD30: L_08B3AD40: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3AE00; } @@ -7637,7 +7335,6 @@ L_08B3AD4C: L_08B3AD54: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3ADD8; } @@ -7651,7 +7348,6 @@ L_08B3AD60: L_08B3AD68: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3ADA8; } @@ -7659,12 +7355,10 @@ L_08B3AD68: } L_08B3AD74: aot_gpr_31 = (0x08B3AD7Cu); - // nop goto L_08B3AA4C; L_08B3AD7C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B3AD98; } @@ -7677,7 +7371,6 @@ L_08B3AD88: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AD90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AD88; } @@ -7685,7 +7378,6 @@ L_08B3AD90: } L_08B3AD98: aot_gpr_31 = (0x08B3ADA0u); - // nop goto L_08B3AC80; L_08B3ADA0: { const bool branch_taken = 0u == 0u; @@ -7821,12 +7513,21 @@ L_08B3AE4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AE5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B3AE6Cu); - // nop ctx.pc = 0x08B7347Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AE6C: @@ -7843,7 +7544,6 @@ L_08B3AE6C: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AE90: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B3AEA0; } @@ -7851,7 +7551,6 @@ L_08B3AE90: } L_08B3AE98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AEB8; } @@ -7875,7 +7574,17 @@ L_08B3AEB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3AEC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -7893,13 +7602,11 @@ L_08B3AEC4: goto L_08B3AEFC; L_08B3AEFC: aot_gpr_31 = (0x08B3AF04u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AF04: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3AF40; } @@ -7907,7 +7614,6 @@ L_08B3AF04: } L_08B3AF10: aot_gpr_31 = (0x08B3AF18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3AF18u) goto L_08B3AF18; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AF18: @@ -7922,7 +7628,6 @@ L_08B3AF20: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AF28: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B3AF38; } @@ -7930,7 +7635,6 @@ L_08B3AF28: } L_08B3AF30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B004; } @@ -7943,11 +7647,9 @@ L_08B3AF38: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AF40: aot_gpr_31 = (0x08B3AF48u); - // nop goto L_08B3AAA4; L_08B3AF48: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B3AF58; } @@ -7955,7 +7657,6 @@ L_08B3AF48: } L_08B3AF50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AF30; } @@ -7970,7 +7671,6 @@ L_08B3AF58: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AF68: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08B3AF78; } @@ -7978,7 +7678,6 @@ L_08B3AF68: } L_08B3AF70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AF30; } @@ -7986,7 +7685,6 @@ L_08B3AF70: } L_08B3AF78: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B3AF9C; } @@ -7994,7 +7692,6 @@ L_08B3AF78: } L_08B3AF80: { const bool branch_taken = ctx.gpr[2] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B3AF9C; } @@ -8002,13 +7699,11 @@ L_08B3AF80: } L_08B3AF88: aot_gpr_31 = (0x08B3AF90u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AF90: aot_gpr_4 = (ctx.gpr[2] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3AFCC; } @@ -8016,7 +7711,6 @@ L_08B3AF90: } L_08B3AF9C: aot_gpr_31 = (0x08B3AFA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3AFA4u) goto L_08B3AFA4; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AFA4: @@ -8031,7 +7725,6 @@ L_08B3AFAC: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AFB4: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B3AFC4; } @@ -8039,7 +7732,6 @@ L_08B3AFB4: } L_08B3AFBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AF30; } @@ -8052,7 +7744,6 @@ L_08B3AFC4: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AFCC: aot_gpr_31 = (0x08B3AFD4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3AFD4u) goto L_08B3AFD4; AOT_REGCACHE_SYNC_OUT(); return; L_08B3AFD4: @@ -8067,7 +7758,6 @@ L_08B3AFDC: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AFE4: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B3AFF4; } @@ -8075,7 +7765,6 @@ L_08B3AFE4: } L_08B3AFEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AF30; } @@ -8088,7 +7777,6 @@ L_08B3AFF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B3AFFC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3AEFC; } @@ -8109,7 +7797,17 @@ L_08B3B004: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B024: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -8125,7 +7823,6 @@ L_08B3B024: L_08B3B050: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3B0B4; } @@ -8151,7 +7848,6 @@ L_08B3B070: aot_gpr_4 = (aot_gpr_4 & aot_gpr_6); aot_gpr_4 = (aot_gpr_4 | aot_gpr_5); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3B0C0; } @@ -8159,7 +7855,6 @@ L_08B3B070: } L_08B3B0A0: aot_gpr_31 = (0x08B3B0A8u); - // nop goto L_08B3AAC8; L_08B3B0A8: ctx.gpr[3] = (ctx.gpr[17] | 0u); @@ -8197,7 +7892,17 @@ L_08B3B0C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B0E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -8216,13 +7921,11 @@ L_08B3B0E4: goto L_08B3B120; L_08B3B120: aot_gpr_31 = (0x08B3B128u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B128: aot_gpr_4 = (ctx.gpr[2] & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3B168; } @@ -8230,7 +7933,6 @@ L_08B3B128: } L_08B3B134: aot_gpr_31 = (0x08B3B13Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3B13Cu) goto L_08B3B13C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B13C: @@ -8246,7 +7948,6 @@ L_08B3B144: L_08B3B14C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[21]) >= 0; - // nop if (branch_taken) { goto L_08B3B160; } @@ -8267,12 +7968,10 @@ L_08B3B160: AOT_REGCACHE_SYNC_OUT(); return; L_08B3B168: aot_gpr_31 = (0x08B3B170u); - // nop goto L_08B3AAA4; L_08B3B170: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[21]) >= 0; - // nop if (branch_taken) { goto L_08B3B184; } @@ -8280,7 +7979,6 @@ L_08B3B170: } L_08B3B17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B158; } @@ -8299,7 +7997,6 @@ L_08B3B194: goto L_08B3AAC8; L_08B3B19C: { const bool branch_taken = static_cast(ctx.gpr[21]) < 0; - // nop if (branch_taken) { goto L_08B3B1AC; } @@ -8307,7 +8004,6 @@ L_08B3B19C: } L_08B3B1A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B158; } @@ -8315,7 +8011,6 @@ L_08B3B1A4: } L_08B3B1AC: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B3B1D0; } @@ -8323,7 +8018,6 @@ L_08B3B1AC: } L_08B3B1B4: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B3B1D0; } @@ -8331,13 +8025,11 @@ L_08B3B1B4: } L_08B3B1BC: aot_gpr_31 = (0x08B3B1C4u); - // nop ctx.pc = 0x08B73114u; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B1C4: aot_gpr_4 = (ctx.gpr[2] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3B204; } @@ -8345,7 +8037,6 @@ L_08B3B1C4: } L_08B3B1D0: aot_gpr_31 = (0x08B3B1D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3B1D8u) goto L_08B3B1D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B1D8: @@ -8361,7 +8052,6 @@ L_08B3B1E0: L_08B3B1E8: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[21]) >= 0; - // nop if (branch_taken) { goto L_08B3B1FC; } @@ -8369,7 +8059,6 @@ L_08B3B1E8: } L_08B3B1F4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B158; } @@ -8382,7 +8071,6 @@ L_08B3B1FC: AOT_REGCACHE_SYNC_OUT(); return; L_08B3B204: aot_gpr_31 = (0x08B3B20Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0128_entry, 128u, 751u, 0x08A07260u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3B20Cu) goto L_08B3B20C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B20C: @@ -8398,7 +8086,6 @@ L_08B3B214: L_08B3B21C: ctx.gpr[21] = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(ctx.gpr[21]) >= 0; - // nop if (branch_taken) { goto L_08B3B230; } @@ -8406,7 +8093,6 @@ L_08B3B21C: } L_08B3B228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B158; } @@ -8419,7 +8105,6 @@ L_08B3B230: AOT_REGCACHE_SYNC_OUT(); return; L_08B3B238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B120; } @@ -8441,7 +8126,17 @@ L_08B3B240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B264: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19]}; @@ -8457,7 +8152,6 @@ L_08B3B264: L_08B3B290: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B3B314; } @@ -8483,7 +8177,6 @@ L_08B3B2B0: aot_gpr_4 = (aot_gpr_6 & aot_gpr_4); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[7]); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3B300; } @@ -8491,12 +8184,10 @@ L_08B3B2B0: } L_08B3B2E0: aot_gpr_31 = (0x08B3B2E8u); - // nop goto L_08B3AAC8; L_08B3B2E8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08B3B320; } @@ -8513,7 +8204,6 @@ L_08B3B2F4: } L_08B3B300: aot_gpr_31 = (0x08B3B308u); - // nop goto L_08B3AAC8; L_08B3B308: ctx.gpr[3] = (ctx.gpr[17] | 0u); @@ -8551,7 +8241,17 @@ L_08B3B328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B344: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -8604,7 +8304,6 @@ L_08B3B398: } L_08B3B3A8: aot_gpr_31 = (0x08B3B3B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 340u, 0x08B552D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3B3B0u) goto L_08B3B3B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B3B0: @@ -8671,7 +8370,6 @@ L_08B3B3F0: } L_08B3B3F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3B418; } @@ -8681,7 +8379,6 @@ L_08B3B400: ctx.gpr[17] = (ctx.gpr[17] + static_cast(8)); ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B3B374; } @@ -8713,7 +8410,17 @@ L_08B3B41C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B43C: ctx.gpr[7] = (0u | 10u); aot_gpr_6 = (0u | 13u); @@ -8721,7 +8428,6 @@ L_08B3B43C: goto L_08B3B448; L_08B3B448: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B3B458; } @@ -8729,7 +8435,6 @@ L_08B3B448: } L_08B3B450: { const bool branch_taken = ctx.gpr[8] != aot_gpr_6; - // nop if (branch_taken) { goto L_08B3B464; } @@ -8746,7 +8451,6 @@ L_08B3B458: } L_08B3B464: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B3B474; } @@ -8754,7 +8458,6 @@ L_08B3B464: } L_08B3B46C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3B47C; } @@ -8770,7 +8473,6 @@ L_08B3B474: } L_08B3B47C: { const bool branch_taken = ctx.gpr[8] == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B3B4A8; } @@ -8778,7 +8480,6 @@ L_08B3B47C: } L_08B3B484: { const bool branch_taken = ctx.gpr[8] == aot_gpr_6; - // nop if (branch_taken) { goto L_08B3B4A8; } @@ -8786,7 +8487,6 @@ L_08B3B484: } L_08B3B48C: { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B3B4A8; } @@ -8809,11 +8509,20 @@ L_08B3B4A8: goto L_08B3B4B0; L_08B3B4B0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B4B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8860,7 +8569,6 @@ L_08B3B530: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3B51C; } @@ -8881,9 +8589,7 @@ L_08B3B544: aot_fpr_20 = aot_fpr_20 + aot_fpr_12; ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3B580; } @@ -8907,7 +8613,17 @@ L_08B3B580: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B5A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_5 << 6u); @@ -8932,9 +8648,7 @@ L_08B3B5E4: aot_gpr_4 = (16800u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3B600; } @@ -8946,9 +8660,7 @@ L_08B3B5FC: L_08B3B600: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B3B618; } @@ -9006,7 +8718,17 @@ L_08B3B618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -9041,7 +8763,17 @@ L_08B3B6A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B6C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9060,7 +8792,6 @@ L_08B3B6C4: L_08B3B6EC: aot_gpr_4 = (static_cast(aot_gpr_16) < 390 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3B78C; } @@ -9199,14 +8930,23 @@ L_08B3B7E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B824: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(158))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3B86C; } @@ -9223,7 +8963,6 @@ L_08B3B84C: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[0]) || std::isnan(aot_fpr_12)) && ctx.fpr[0] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_16 = (0u | 1u); goto L_08B3B864; @@ -9248,7 +8987,17 @@ L_08B3B870: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B880: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (17530u << 16u); @@ -9257,7 +9006,6 @@ L_08B3B880: aot_gpr_4 = (20224u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_13 - aot_fpr_12; goto L_08B3B8B4; @@ -9280,11 +9028,20 @@ L_08B3B8B4: goto L_08B3B8C4; L_08B3B8C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B8CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -9335,7 +9092,17 @@ L_08B3B92C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B948: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (0u | 1u); @@ -9344,7 +9111,6 @@ L_08B3B948: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3B9BC; } @@ -9378,7 +9144,6 @@ L_08B3B990: goto L_08B3B99C; L_08B3B99C: aot_gpr_31 = (0x08B3B9A4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3B9A4u) goto L_08B3B9A4; AOT_REGCACHE_SYNC_OUT(); return; L_08B3B9A4: @@ -9400,7 +9165,17 @@ L_08B3B9BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3B9CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); @@ -9445,7 +9220,6 @@ L_08B3BA34: L_08B3BA48: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3BB3C; } @@ -9637,7 +9411,6 @@ L_08B3BB88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(80))); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08B3BBB4; } @@ -9663,12 +9436,10 @@ L_08B3BBB4: } L_08B3BBC8: aot_gpr_31 = (0x08B3BBD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3BBD0u) goto L_08B3BBD0; AOT_REGCACHE_SYNC_OUT(); return; L_08B3BBD0: aot_gpr_31 = (0x08B3BBD8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 128u, 0x08A11214u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3BBD8u) goto L_08B3BBD8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3BBD8: @@ -9696,7 +9467,17 @@ L_08B3BBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3BC20: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(158))); @@ -9741,7 +9522,6 @@ L_08B3BC64: AOT_REGCACHE_SYNC_OUT(); return; L_08B3BC7C: aot_gpr_31 = (0x08B3BC84u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3BC84u) goto L_08B3BC84; AOT_REGCACHE_SYNC_OUT(); return; L_08B3BC84: @@ -9774,7 +9554,17 @@ L_08B3BCC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3BCD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(184), aot_gpr_16); @@ -9813,7 +9603,6 @@ L_08B3BD40: AOT_REGCACHE_SYNC_OUT(); return; L_08B3BD54: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3BE60; } @@ -9861,7 +9650,6 @@ L_08B3BDC8: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3BE4C; } @@ -9948,7 +9736,17 @@ L_08B3BE74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3BEA8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(60))); @@ -9980,7 +9778,6 @@ L_08B3BEDC: } L_08B3BEF4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3BF0C; } @@ -9988,12 +9785,10 @@ L_08B3BEF4: } L_08B3BEFC: aot_gpr_31 = (0x08B3BF04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3BF04u) goto L_08B3BF04; AOT_REGCACHE_SYNC_OUT(); return; L_08B3BF04: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3BF28; } @@ -10012,7 +9807,6 @@ L_08B3BF0C: } L_08B3BF20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3BF30; } @@ -10020,7 +9814,6 @@ L_08B3BF20: } L_08B3BF28: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0206_entry, 206u, 2u, 0x08B3C010u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -10050,7 +9843,6 @@ L_08B3BF50: aot_gpr_5 = (aot_gpr_4 + ctx.gpr[17]); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B3BF7C; } @@ -10070,7 +9862,6 @@ L_08B3BF7C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[19]); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1650)))))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3BF9C; } diff --git a/profiles/vcs/generated/generated_unit_0206.cpp b/profiles/vcs/generated/generated_unit_0206.cpp index ec96170..b2eca35 100644 --- a/profiles/vcs/generated/generated_unit_0206.cpp +++ b/profiles/vcs/generated/generated_unit_0206.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0206[4096] = { - 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 0, 10, 0, 0, 11, 0, - 0, 0, 0, 12, 13, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, - 19, 0, 20, 21, 0, 22, 0, 0, 23, 0, 24, 25, 0, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 29, 0, - 30, 31, 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, - 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 44, 45, - 0, 46, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, - 0, 51, 0, 52, 0, 0, 53, 0, 54, 0, 55, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 0, 60, 0, 61, 0, 0, 0, 0, 62, 0, 63, 0, 64, 0, 0, 0, - 0, 65, 0, 66, 0, 67, 0, 0, 68, 0, 0, 69, 0, 70, 0, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 74, 0, 0, 75, 0, 0, 76, - 0, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 0, 0, 84, 0, 0, 85, 0, 86, 0, 0, 0, 87, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, - 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 96, 0, 0, 0, 97, 0, 0, 0, 0, 98, 0, 99, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, - 102, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, - 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 110, 0, 111, 0, 0, 0, 112, 0, 0, 0, 113, 0, 114, 0, 0, 115, 0, - 0, 116, 0, 117, 0, 118, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 0, 121, 0, 0, 0, 122, 0, 0, 0, 123, 0, 124, 0, 0, 125, - 0, 0, 126, 0, 127, 0, 128, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 132, 0, 0, 133, 0, 0, 134, 0, 135, 0, 136, 137, 0, - 0, 0, 138, 0, 0, 0, 139, 0, 140, 0, 0, 141, 0, 0, 142, 0, 143, 0, 144, 145, 0, 0, 0, 146, 0, 0, 0, 147, 0, 148, 0, 0, - 149, 0, 0, 150, 0, 151, 0, 152, 153, 0, 0, 0, 154, 0, 0, 0, 155, 0, 156, 0, 0, 157, 0, 0, 158, 0, 159, 0, 160, 161, 0, 0, - 0, 162, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 0, 166, 0, 167, 0, 168, 169, 0, 0, 0, 170, 0, 0, 0, 171, 0, 172, 0, 0, 173, - 0, 0, 174, 0, 175, 0, 176, 0, 177, 0, 0, 0, 178, 0, 0, 0, 179, 0, 180, 0, 0, 181, 0, 0, 182, 0, 183, 0, 184, 0, 185, 0, - 186, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, 191, 192, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 196, 0, - 197, 0, 198, 0, 0, 0, 199, 200, 0, 201, 0, 0, 0, 0, 0, 202, 0, 203, 0, 204, 0, 0, 205, 0, 206, 0, 0, 0, 0, 207, 0, 0, - 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 210, 0, 0, 0, 211, 0, 0, 212, 0, 0, 213, 0, 0, 214, 0, 0, 215, 0, 216, 0, 0, - 0, 217, 0, 218, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, 0, 0, 225, 0, 226, 0, 0, 0, 0, 0, 227, 228, 0, 229, 0, 0, - 230, 0, 0, 0, 0, 231, 0, 0, 0, 232, 0, 0, 233, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 237, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, - 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 249, 0, 250, 0, 0, - 0, 251, 0, 252, 0, 0, 0, 253, 0, 254, 0, 0, 0, 255, 0, 0, 0, 256, 0, 0, 257, 0, 258, 0, 0, 259, 0, 0, 0, 260, 0, 261, - 0, 0, 262, 0, 0, 0, 263, 0, 264, 0, 0, 265, 0, 0, 0, 266, 0, 267, 0, 0, 268, 0, 0, 0, 269, 0, 270, 0, 0, 271, 0, 0, - 0, 272, 0, 273, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 277, 0, 278, 0, 279, 0, 0, 280, 0, 0, 0, 0, 281, 0, 282, 0, 283, - 0, 284, 0, 0, 0, 285, 0, 0, 0, 0, 286, 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 291, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 296, 0, 297, 0, 0, 298, 0, - 299, 0, 0, 0, 0, 300, 0, 0, 0, 301, 0, 0, 0, 0, 0, 302, 0, 303, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 309, - 0, 310, 0, 311, 0, 312, 313, 0, 0, 0, 314, 0, 315, 0, 0, 0, 0, 316, 0, 317, 0, 0, 318, 0, 0, 319, 0, 0, 0, 0, 320, 0, - 0, 0, 0, 321, 0, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 330, 0, 0, 331, 0, 0, 332, - 0, 0, 333, 0, 334, 335, 0, 336, 0, 0, 337, 0, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 343, 0, 344, 0, - 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 349, 0, 0, 350, - 0, 0, 0, 351, 0, 352, 0, 353, 0, 0, 0, 354, 0, 355, 0, 356, 0, 0, 357, 0, 0, 358, 0, 359, 0, 360, 0, 0, 361, 0, 0, 362, - 0, 363, 0, 0, 364, 0, 0, 365, 0, 0, 366, 0, 367, 0, 368, 0, 369, 0, 370, 0, 0, 0, 0, 371, 0, 372, 0, 0, 0, 373, 0, 0, - 374, 0, 0, 0, 0, 375, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 0, 0, 379, 0, 0, 0, 380, 0, 381, 0, 0, 382, 0, 383, 0, 0, - 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, 386, 0, 0, 0, 0, 387, 388, 0, 0, 389, 0, 0, 0, 0, 0, 390, 0, 391, 0, 392, 0, 393, - 394, 0, 395, 0, 396, 0, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 400, 0, 0, 401, 0, 0, 0, 402, 0, 403, 0, 404, 0, 405, 0, 0, 0, 0, 406, 0, 407, 0, 408, 0, 409, 0, 410, 0, 411, 0, 412, 0, - 0, 413, 0, 414, 0, 0, 0, 415, 0, 0, 0, 0, 416, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, 421, 0, 0, 0, 422, 0, 423, - 0, 424, 0, 0, 425, 0, 0, 426, 0, 427, 0, 428, 0, 429, 0, 430, 431, 0, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 434, - 0, 0, 0, 0, 0, 0, 435, 0, 0, 436, 0, 0, 437, 0, 0, 438, 0, 439, 440, 0, 0, 0, 441, 0, 0, 0, 442, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 447, 0, 448, 0, 0, 0, 0, 449, 0, 0, 450, - 0, 0, 0, 451, 0, 452, 0, 0, 453, 0, 0, 0, 454, 0, 455, 0, 456, 0, 0, 0, 457, 0, 458, 0, 459, 0, 0, 460, 0, 0, 461, 0, - 462, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 465, 0, 466, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, 0, - 0, 0, 469, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 473, 0, - 474, 0, 0, 475, 0, 476, 0, 477, 0, 478, 0, 0, 0, 479, 0, 0, 480, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 487, - 0, 0, 488, 0, 0, 489, 0, 490, 0, 0, 491, 0, 492, 0, 0, 0, 0, 493, 0, 0, 0, 0, 494, 0, 495, 0, 0, 496, 0, 0, 497, 0, - 0, 498, 0, 499, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, - 0, 0, 0, 505, 0, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, - 0, 0, 511, 0, 0, 0, 0, 0, 512, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 516, 517, 0, 518, 0, 519, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 0, 0, 0, 522, 0, 0, 0, 0, 523, 0, 0, 524, 0, 0, 525, 0, 0, 0, 526, - 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, 530, 531, 0, 0, - 0, 532, 0, 533, 534, 0, 0, 0, 535, 0, 536, 0, 0, 0, 537, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 540, 0, 0, 0, 0, 0, - 0, 0, 0, 541, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 546, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 548, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, - 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 555, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 558, 0, 559, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 562, 0, 563, 564, 0, 0, 0, 0, 0, 0, - 0, 565, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, 0, 568, 0, 569, 0, 570, 0, 0, 571, 0, 572, 573, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 574, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 579, 0, 580, 0, 0, - 0, 0, 581, 582, 0, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, 0, 587, 0, 0, - 588, 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 595, 0, 596, 597, 0, 0, 0, 0, 0, 0, - 0, 598, 0, 0, 599, 0, 0, 0, 0, 600, 0, 0, 0, 601, 0, 602, 0, 603, 0, 0, 604, 0, 605, 606, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 0, 0, 0, 608, 0, 0, 0, 0, 609, 0, 610, 0, 0, 611, 0, 612, 0, 0, 0, 0, 0, 613, 614, 0, 0, 0, 0, 615, 0, - 616, 0, 0, 0, 0, 617, 0, 0, 0, 618, 0, 619, 0, 0, 0, 0, 620, 0, 621, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 623, 0, 0, 624, 0, 0, 0, 625, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, 0, 628, 0, 629, 0, 630, 0, - 631, 0, 0, 0, 0, 632, 633, 634, 0, 635, 636, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 639, - 0, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 646, - 0, 647, 0, 0, 648, 0, 0, 0, 0, 649, 0, 650, 0, 0, 0, 651, 0, 0, 0, 652, 0, 0, 653, 654, 0, 0, 0, 655, 0, 0, 0, 0, - 0, 656, 657, 0, 0, 658, 659, 0, 0, 0, 660, 0, 661, 0, 662, 0, 663, 0, 664, 0, 665, 666, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 671, - 0, 0, 0, 0, 0, 0, 672, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, 676, 0, 0, 677, 0, - 678, 679, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 683, 684, 0, 0, 685, 686, 0, 687, 0, 688, 0, 0, 0, 0, 689, 690, 0, 691, 0, 692, 0, 693, 0, 694, 0, 695, - 696, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, 702, 0, 0, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, 708, 709, 0, 710, 0, 711, - 0, 0, 712, 0, 713, 0, 714, 0, 715, 0, 716, 0, 717, 0, 718, 0, 719, 0, 720, 0, 721, 0, 722, 723, 0, 0, 724, 0, 0, 725, 0, 726, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 730, 0, - 0, 0, 731, 0, 732, 0, 733, 0, 0, 734, 0, 0, 0, 0, 735, 0, 0, 0, 736, 0, 0, 0, 737, 0, 738, 0, 0, 739, 0, 0, 0, 0, - 0, 0, 0, 740, 0, 0, 0, 741, 0, 742, 0, 743, 0, 744, 0, 745, 0, 746, 0, 747, 0, 748, 0, 749, 750, 0, 751, 0, 752, 0, 753, 754, - 0, 755, 0, 756, 0, 757, 758, 0, 759, 0, 760, 0, 761, 762, 0, 763, 0, 0, 764, 0, 765, 766, 0, 767, 0, 768, 0, 769, 770, 0, 771, 0, - 0, 772, 0, 773, 774, 0, 775, 0, 776, 0, 777, 778, 0, 0, 0, 0, 0, 779, 0, 780, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, - 0, 783, 0, 784, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 786, 787, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 789, 0, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 793, 0, 0, 794, 0, 0, 795, 0, 796, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 799, 0, 0, 0, - 800, 0, 0, 0, 801, 0, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 804, - 0, 805, 0, 0, 0, 806, 0, 0, 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 808, 0, 809, 0, 0, 810, 0, - 811, 812, 0, 0, 813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, 815, 0, - 816, 817, 0, 818, 0, 0, 0, 819, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 822, 0, 0, - 823, 824, 0, 0, 0, 825, 0, 826, 0, 827, 0, 828, 0, 829, 0, 830, 831, 0, 832, 833, 0, 834, 0, 835, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, 838, 0, 0, 839, - 0, 840, 0, 0, 0, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 0, 0, 0, 843, 0, 0, 0, 844, 0, 0, 0, 845, 0, 846, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 848, 0, 0, 0, 849, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, - 0, 0, 852, 0, 853, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, 856, 857, 0, 858, 0, 0, 0, 859, 0, 860, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 861, 0, 862, 863, 0, 0, 0, 864, 865, 0, 866, 0, 867, 0, 868, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 871, 0, 0, 0, 872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, 0, 874, 0, 0, 875, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 879, 0, 0, 880, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 881, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 884, 0, 0, 885, 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 889, 0, 0, 890, 0, 0, 891, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0206[64] = { + 0x4A10440088001011ull, 0x40908D2D10108458ull, 0xD084042108284243ull, 0x0000854A081000A2ull, + 0x9228A92A150A8090ull, 0x040000004522AA48ull, 0x015422080400540Aull, 0x0000000210111101ull, + 0x9444112A4A229000ull, 0x288D49446A4A2154ull, 0x9446A4A2352511A9ull, 0x512C148955251154ull, + 0x29248940214A82C5ull, 0x2C148200800A040Aull, 0x0020A48000409221ull, 0x8000000002020000ull, + 0xA252228A29110808ull, 0x0000004A25128944ull, 0x0000000000400000ull, 0xA84A820000000000ull, + 0x4AA0050050821422ull, 0x900A0020000A8221ull, 0x00408148424A146Aull, 0x5440B4B492110102ull, + 0x92A4A8A894810002ull, 0x294448A122855492ull, 0x00040155AA098610ull, 0xA2A2508A55542A89ull, + 0x044692408405AA92ull, 0x4951512890A81090ull, 0x4041002409148005ull, 0x80800880201522A9ull, + 0x0484028A494214A4ull, 0x2B48050480108068ull, 0x0000000489210A00ull, 0x0001451A34001000ull, + 0x0080004805000000ull, 0x0001000000000000ull, 0x0000020000000000ull, 0x1020220100000300ull, + 0x0500808020001001ull, 0x00D2A21203410100ull, 0x2200850C28802844ull, 0x0341010004004051ull, + 0x4305284400D2A212ull, 0x5501224004050A21ull, 0x00200208808206E1ull, 0x08C88A1288001800ull, + 0xC004001000B55466ull, 0x004012034C8000C0ull, 0xAD551555AAB0ACC0ull, 0x40480800A4D55554ull, + 0xD5AAAA8809444254ull, 0x802A0D5A5AB4B56Aull, 0x000020520021804Aull, 0x8400009110820292ull, + 0x410000134A000122ull, 0x00ADAAA32800048Bull, 0x5110820292000080ull, 0x51680054800A2800ull, + 0x0000108002AC6800ull, 0x0110000090400022ull, 0x0000110002410000ull, 0x9220001000804820ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0206[64] = { + 1u, 12u, 30u, 46u, 57u, 77u, 89u, 102u, 109u, 126u, 149u, 174u, 197u, 217u, 230u, 241u, + 244u, 262u, 275u, 276u, 284u, 299u, 310u, 326u, 345u, 363u, 384u, 400u, 424u, 443u, 462u, 474u, + 488u, 505u, 520u, 528u, 539u, 544u, 545u, 546u, 553u, 560u, 574u, 588u, 598u, 616u, 631u, 643u, + 656u, 672u, 683u, 712u, 731u, 755u, 783u, 793u, 805u, 816u, 836u, 847u, 861u, 871u, 878u, 883u, }; void recomp_unit_0206_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0206_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B3C000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0206[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0206[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0206[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B3C000; @@ -1087,7 +994,17 @@ L_08B3C010: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3C030: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[18]); @@ -1172,7 +1089,6 @@ L_08B3C10C: goto L_08B3C110; L_08B3C110: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B3C200; } @@ -1224,7 +1140,6 @@ L_08B3C170: } L_08B3C180: aot_gpr_31 = (0x08B3C188u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3C188u) goto L_08B3C188; AOT_REGCACHE_SYNC_OUT(); return; L_08B3C188: @@ -1246,7 +1161,6 @@ L_08B3C194: } L_08B3C1A0: aot_gpr_31 = (0x08B3C1A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3C1A8u) goto L_08B3C1A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3C1A8: @@ -1326,7 +1240,6 @@ L_08B3C238: AOT_REGCACHE_SYNC_OUT(); return; L_08B3C24C: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08B3C2F8; } @@ -1440,7 +1353,17 @@ L_08B3C31C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3C350: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1457,7 +1380,6 @@ L_08B3C36C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(22), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(157))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3C38C; } @@ -1465,7 +1387,6 @@ L_08B3C36C: } L_08B3C384: aot_gpr_31 = (0x08B3C38Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 604u, 0x08AD3670u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3C38Cu) goto L_08B3C38C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3C38C: @@ -1480,7 +1401,6 @@ L_08B3C398: goto L_08B3C3BC; L_08B3C3A0: aot_gpr_31 = (0x08B3C3A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3C3A8u) goto L_08B3C3A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3C3A8: @@ -1495,7 +1415,17 @@ L_08B3C3A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3C3BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-1472)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(1440), ctx.gpr[18]); @@ -1619,7 +1549,6 @@ L_08B3C4AC: } L_08B3C4B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3C4F0; } @@ -1641,7 +1570,6 @@ L_08B3C4D4: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B3C4F0; } @@ -1676,7 +1604,6 @@ L_08B3C50C: L_08B3C518: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B3C52C; } @@ -1684,7 +1611,6 @@ L_08B3C518: } L_08B3C524: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3C568; } @@ -1697,7 +1623,6 @@ L_08B3C52C: AOT_REGCACHE_SYNC_OUT(); return; L_08B3C534: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3C544; } @@ -1815,7 +1740,6 @@ L_08B3C628: AOT_REGCACHE_SYNC_OUT(); return; L_08B3C630: aot_gpr_31 = (0x08B3C638u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3C638u) goto L_08B3C638; AOT_REGCACHE_SYNC_OUT(); return; L_08B3C638: @@ -1881,7 +1805,6 @@ L_08B3C6D0: goto L_08B3C030; L_08B3C6D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D54C; } @@ -2064,7 +1987,6 @@ L_08B3C884: } L_08B3C88C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3C8A0; } @@ -2083,7 +2005,6 @@ L_08B3C8A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1316))); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3D3BC; } @@ -2095,11 +2016,20 @@ L_08B3C8B0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30928))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3C8C8: aot_gpr_4 = (ctx.gpr[21] | 0u); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); @@ -2156,7 +2086,6 @@ L_08B3C908: } L_08B3C910: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3C920; } @@ -2223,7 +2152,6 @@ L_08B3C964: } L_08B3C96C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3C978; } @@ -2288,7 +2216,6 @@ L_08B3C9B8: } L_08B3C9C0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3C9CC; } @@ -2353,7 +2280,6 @@ L_08B3CA0C: } L_08B3CA14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3CA20; } @@ -2418,7 +2344,6 @@ L_08B3CA60: } L_08B3CA68: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3CA74; } @@ -2483,7 +2408,6 @@ L_08B3CAB4: } L_08B3CABC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3CAC8; } @@ -2614,7 +2538,6 @@ L_08B3CB60: } L_08B3CB68: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3CB78; } @@ -2626,7 +2549,6 @@ L_08B3CB70: goto L_08B3CB78; L_08B3CB78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D3BC; } @@ -2635,7 +2557,6 @@ L_08B3CB78: L_08B3CB80: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(1320))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3CBCC; } @@ -2651,7 +2572,6 @@ L_08B3CB8C: L_08B3CB9C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(1060))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3CBB0; } @@ -2754,7 +2674,6 @@ L_08B3CC24: AOT_REGCACHE_SYNC_OUT(); return; L_08B3CC3C: aot_gpr_31 = (0x08B3CC44u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3CC44u) goto L_08B3CC44; AOT_REGCACHE_SYNC_OUT(); return; L_08B3CC44: @@ -2765,7 +2684,6 @@ L_08B3CC44: L_08B3CC4C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3CC74; } @@ -2773,7 +2691,6 @@ L_08B3CC4C: } L_08B3CC58: aot_gpr_31 = (0x08B3CC60u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3CC60u) goto L_08B3CC60; AOT_REGCACHE_SYNC_OUT(); return; L_08B3CC60: @@ -2792,7 +2709,6 @@ L_08B3CC60: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3CC98; } @@ -2824,7 +2740,6 @@ L_08B3CC74: goto L_08B3CC98; L_08B3CC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D3BC; } @@ -2955,7 +2870,6 @@ L_08B3CDA4: L_08B3CDBC: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08B3CCF4; } @@ -2963,7 +2877,6 @@ L_08B3CDBC: } L_08B3CDC8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D3BC; } @@ -2989,7 +2902,6 @@ L_08B3CDEC: L_08B3CDF4: aot_gpr_4 = (ctx.gpr[16] < ctx.gpr[2] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3CE3C; } @@ -3000,7 +2912,6 @@ L_08B3CE00: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1180)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 97 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B3CE30; } @@ -3010,7 +2921,6 @@ L_08B3CE14: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1180)))))); aot_gpr_5 = (static_cast(aot_gpr_5) < 123 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3CE30; } @@ -3077,7 +2987,6 @@ L_08B3CEA8: AOT_REGCACHE_SYNC_OUT(); return; L_08B3CEB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D3BC; } @@ -3560,7 +3469,6 @@ L_08B3D3D8: } L_08B3D3EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D53C; } @@ -3572,7 +3480,6 @@ L_08B3D3F4: goto L_08B3C030; L_08B3D3FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D54C; } @@ -3594,7 +3501,6 @@ L_08B3D414: AOT_REGCACHE_SYNC_OUT(); return; L_08B3D428: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B3D444; } @@ -3617,7 +3523,6 @@ L_08B3D444: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3252))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3D500; } @@ -3652,7 +3557,6 @@ L_08B3D478: AOT_REGCACHE_SYNC_OUT(); return; L_08B3D4A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D4F8; } @@ -3678,12 +3582,10 @@ L_08B3D4D4: goto L_08B3D4DC; L_08B3D4DC: aot_gpr_31 = (0x08B3D4E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 607u, 0x08AD3698u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D4E4u) goto L_08B3D4E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D4E4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3D4F8; } @@ -3700,7 +3602,6 @@ L_08B3D4EC: } L_08B3D4F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3D524; } @@ -3711,7 +3612,6 @@ L_08B3D500: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[16]); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(3252))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08B3D524; } @@ -3769,7 +3669,17 @@ L_08B3D54C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3D594: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); @@ -3784,7 +3694,6 @@ L_08B3D594: } L_08B3D5C4: aot_gpr_31 = (0x08B3D5CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D5CCu) goto L_08B3D5CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D5CC: @@ -3818,7 +3727,6 @@ L_08B3D5FC: } L_08B3D604: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3DAA0; } @@ -3851,7 +3759,6 @@ L_08B3D630: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[18]); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(6676))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3D678; } @@ -3951,7 +3858,6 @@ L_08B3D704: aot_gpr_4 = (aot_gpr_5 + aot_gpr_4); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(7740))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3D750; } @@ -3996,7 +3902,6 @@ L_08B3D764: L_08B3D770: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(17))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3D7BC; } @@ -4005,7 +3910,6 @@ L_08B3D770: L_08B3D77C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5836))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3D794; } @@ -4013,7 +3917,6 @@ L_08B3D77C: } L_08B3D788: aot_gpr_31 = (0x08B3D790u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D790u) goto L_08B3D790; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D790: @@ -4035,7 +3938,6 @@ L_08B3D79C: } L_08B3D7A8: aot_gpr_31 = (0x08B3D7B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D7B0u) goto L_08B3D7B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D7B0: @@ -4053,7 +3955,6 @@ L_08B3D7BC: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(112), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(158))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3D7F8; } @@ -4145,7 +4046,6 @@ L_08B3D87C: } L_08B3D88C: aot_gpr_31 = (0x08B3D894u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 340u, 0x08B552D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D894u) goto L_08B3D894; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D894: @@ -4210,7 +4110,6 @@ L_08B3D8D4: } L_08B3D8DC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3D8FC; } @@ -4230,7 +4129,6 @@ L_08B3D8F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B3D8FC: aot_gpr_31 = (0x08B3D904u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 538u, 0x08AD31E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D904u) goto L_08B3D904; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D904: @@ -4248,7 +4146,6 @@ L_08B3D910: L_08B3D91C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(157))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3DA28; } @@ -4256,17 +4153,14 @@ L_08B3D91C: } L_08B3D928: aot_gpr_31 = (0x08B3D930u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 528u, 0x08AD312Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D930u) goto L_08B3D930; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D930: aot_gpr_31 = (0x08B3D938u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 532u, 0x08AD317Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D938u) goto L_08B3D938; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D938: aot_gpr_31 = (0x08B3D940u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0179_entry, 179u, 536u, 0x08AD31CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3D940u) goto L_08B3D940; AOT_REGCACHE_SYNC_OUT(); return; L_08B3D940: @@ -4325,7 +4219,6 @@ L_08B3D99C: L_08B3D9AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(100))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B3D9E0; } @@ -4353,7 +4246,6 @@ L_08B3D9D8: L_08B3D9E0: aot_gpr_4 = (ctx.gpr[21] & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3D9F4; } @@ -4422,7 +4314,6 @@ L_08B3DA4C: } L_08B3DA64: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3DA80; } @@ -4458,7 +4349,6 @@ L_08B3DA90: AOT_REGCACHE_SYNC_OUT(); return; L_08B3DA98: aot_gpr_31 = (0x08B3DAA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3DAA0u) goto L_08B3DAA0; AOT_REGCACHE_SYNC_OUT(); return; L_08B3DAA0: @@ -4478,7 +4368,17 @@ L_08B3DAA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3DAC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4489,7 +4389,6 @@ L_08B3DAC8: { const std::uint32_t aot_run_words[6]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(8), aot_run_words); } { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B3DB50; } @@ -4498,7 +4397,6 @@ L_08B3DAC8: L_08B3DB00: ctx.gpr[17] = (0u | 2u); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B3DB48; } @@ -4516,7 +4414,6 @@ L_08B3DB0C: } L_08B3DB1C: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B3DC3C; } @@ -4545,7 +4442,6 @@ L_08B3DB34: } L_08B3DB48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3DF74; } @@ -4553,7 +4449,6 @@ L_08B3DB48: } L_08B3DB50: aot_gpr_31 = (0x08B3DB58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 163u, 0x08A114E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3DB58u) goto L_08B3DB58; AOT_REGCACHE_SYNC_OUT(); return; L_08B3DB58: @@ -4563,12 +4458,10 @@ L_08B3DB58: AOT_REGCACHE_SYNC_OUT(); return; L_08B3DB60: aot_gpr_31 = (0x08B3DB68u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0131_entry, 131u, 165u, 0x08A11504u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3DB68u) goto L_08B3DB68; AOT_REGCACHE_SYNC_OUT(); return; L_08B3DB68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3DF74; } @@ -4576,7 +4469,6 @@ L_08B3DB68: } L_08B3DB70: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B3DB8C; } @@ -4585,7 +4477,6 @@ L_08B3DB70: L_08B3DB78: aot_gpr_4 = (static_cast(aot_gpr_4) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3DB9C; } @@ -4593,7 +4484,6 @@ L_08B3DB78: } L_08B3DB84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3DC3C; } @@ -4646,7 +4536,6 @@ L_08B3DBC4: } L_08B3DBD4: aot_gpr_31 = (0x08B3DBDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 340u, 0x08B552D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3DBDCu) goto L_08B3DBDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B3DBDC: @@ -4711,7 +4600,6 @@ L_08B3DC1C: } L_08B3DC24: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3DC34; } @@ -4770,7 +4658,6 @@ L_08B3DC7C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(3964))); aot_gpr_6 = (aot_gpr_6 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B3DD1C; } @@ -4794,7 +4681,6 @@ L_08B3DCA4: L_08B3DCB0: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B3DCC8; } @@ -4865,7 +4751,6 @@ L_08B3DD30: } L_08B3DD4C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B3DD5C; } @@ -4890,7 +4775,6 @@ L_08B3DD5C: L_08B3DD70: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(158))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3DF74; } @@ -4932,7 +4816,6 @@ L_08B3DDA0: } L_08B3DDB0: aot_gpr_31 = (0x08B3DDB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 340u, 0x08B552D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3DDB8u) goto L_08B3DDB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3DDB8: @@ -5016,7 +4899,6 @@ L_08B3DE08: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(112)))))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B3DF74; } @@ -5025,7 +4907,6 @@ L_08B3DE08: L_08B3DE3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(28))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B3DF74; } @@ -5040,7 +4921,6 @@ L_08B3DE50: aot_gpr_4 = (ctx.gpr[18] + static_cast(1000)); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3DE88; } @@ -5049,7 +4929,6 @@ L_08B3DE50: L_08B3DE60: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(159))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3DE88; } @@ -5068,7 +4947,6 @@ L_08B3DE6C: L_08B3DE88: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(140))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3DF40; } @@ -5083,7 +4961,6 @@ L_08B3DE94: aot_fpr_14 = std::bit_cast(aot_gpr_6); { const float fs = aot_fpr_15; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_15 = std::bit_cast(0x7FC00000u); else aot_fpr_15 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(136))); if (branch_taken) { @@ -5132,7 +5009,6 @@ L_08B3DF00: } L_08B3DF0C: aot_gpr_31 = (0x08B3DF14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 351u, 0x08B657E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3DF14u) goto L_08B3DF14; AOT_REGCACHE_SYNC_OUT(); return; L_08B3DF14: @@ -5167,7 +5043,6 @@ L_08B3DF40: AOT_REGCACHE_SYNC_OUT(); return; L_08B3DF48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3DF74; } @@ -5202,7 +5077,17 @@ L_08B3DF74: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3DF9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5226,7 +5111,17 @@ L_08B3DFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3DFDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -5244,7 +5139,6 @@ L_08B3DFDC: L_08B3DFFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3E01C; } @@ -5253,7 +5147,6 @@ L_08B3DFFC: L_08B3E008: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3E014; } @@ -5261,7 +5154,6 @@ L_08B3E008: } L_08B3E014: aot_gpr_31 = (0x08B3E01Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3E01Cu) goto L_08B3E01C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3E01C: @@ -5283,7 +5175,17 @@ L_08B3E030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E044: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_6 = (aot_gpr_4 + static_cast(4)); @@ -5293,10 +5195,19 @@ L_08B3E044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E058: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3E06C; } @@ -5310,7 +5221,6 @@ L_08B3E060: L_08B3E06C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B3E078; } @@ -5323,14 +5233,34 @@ L_08B3E078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E084: jump_target = aot_gpr_31; ctx.gpr[2] = (aot_gpr_4 + static_cast(4)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E08C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.gpr[2] = (0u | 0u); @@ -5341,11 +5271,20 @@ L_08B3E08C: goto L_08B3E09C; L_08B3E09C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E0A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5354,7 +5293,6 @@ L_08B3E0A4: { const std::uint32_t aot_run_words[3]{ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(4), aot_run_words); } { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3E118; } @@ -5393,7 +5331,6 @@ L_08B3E0E8: } L_08B3E10C: aot_gpr_31 = (0x08B3E114u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3E114u) goto L_08B3E114; AOT_REGCACHE_SYNC_OUT(); return; L_08B3E114: @@ -5415,7 +5352,17 @@ L_08B3E118: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E13C: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), 0u); @@ -5425,7 +5372,17 @@ L_08B3E13C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E150: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5541,7 +5498,17 @@ L_08B3E22C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E240: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -5551,7 +5518,17 @@ L_08B3E240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E254: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); jump_target = aot_gpr_31; @@ -5559,7 +5536,17 @@ L_08B3E254: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E260: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); jump_target = aot_gpr_31; @@ -5567,7 +5554,17 @@ L_08B3E260: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E26C: aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(0), static_cast(0u)); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(4), 0u); @@ -5576,7 +5573,17 @@ L_08B3E26C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E27C: aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(10584), 0u); jump_target = aot_gpr_31; @@ -5584,7 +5591,17 @@ L_08B3E27C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E288: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -5645,7 +5662,6 @@ L_08B3E330: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); if (branch_taken) { @@ -5666,7 +5682,6 @@ L_08B3E370: goto L_08B3E374; L_08B3E374: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(8), std::bit_cast(ctx.fpr[16])); if (branch_taken) { @@ -5687,7 +5702,6 @@ L_08B3E38C: goto L_08B3E390; L_08B3E390: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(12), std::bit_cast(ctx.fpr[16])); if (branch_taken) { @@ -5705,7 +5719,6 @@ L_08B3E3A0: } L_08B3E3A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(16), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -5769,7 +5782,17 @@ L_08B3E460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E468: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (2281u << 16u); @@ -5789,7 +5812,17 @@ L_08B3E48C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E498: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -5831,11 +5864,20 @@ L_08B3E498: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E4DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_4 = (aot_gpr_5 & 65535u); @@ -5972,7 +6014,17 @@ L_08B3E4DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E5C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_4 = (aot_gpr_5 & 65535u); @@ -6082,7 +6134,17 @@ L_08B3E5C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E6A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); @@ -6146,7 +6208,6 @@ L_08B3E724: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B3E7F0; } @@ -6161,7 +6222,6 @@ L_08B3E780: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3E7B4; } @@ -6171,7 +6231,6 @@ L_08B3E7A4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(4)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3E7F0; } @@ -6228,7 +6287,17 @@ L_08B3E800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E830: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6295,7 +6364,17 @@ L_08B3E89C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E8BC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(4)))))); aot_gpr_6 = (2235u << 16u); @@ -6309,14 +6388,33 @@ L_08B3E8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E8E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3E8E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[17]); @@ -6353,7 +6451,6 @@ L_08B3E940: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3E964; } @@ -6421,7 +6518,6 @@ L_08B3E9BC: L_08B3E9C4: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B3E9DC; } @@ -6520,7 +6616,6 @@ L_08B3EA8C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3EAA8; } @@ -6528,7 +6623,6 @@ L_08B3EA8C: } L_08B3EAA0: aot_gpr_31 = (0x08B3EAA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3EAA8u) goto L_08B3EAA8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3EAA8: @@ -6613,7 +6707,17 @@ L_08B3EB38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3EB68: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[17]); @@ -6650,7 +6754,6 @@ L_08B3EBC0: aot_gpr_5 = (aot_gpr_5 - ctx.gpr[19]); aot_gpr_5 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3EBE4; } @@ -6672,7 +6775,6 @@ L_08B3EBE4: aot_gpr_5 = (aot_gpr_5 + static_cast(-1)); aot_gpr_5 = (aot_gpr_5 < aot_gpr_7 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B3ED14; } @@ -6720,7 +6822,6 @@ L_08B3EC3C: L_08B3EC44: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B3EC5C; } @@ -6807,7 +6908,6 @@ L_08B3ECE4: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(0), static_cast(0u)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3ED00; } @@ -6815,7 +6915,6 @@ L_08B3ECE4: } L_08B3ECF8: aot_gpr_31 = (0x08B3ED00u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3ED00u) goto L_08B3ED00; AOT_REGCACHE_SYNC_OUT(); return; L_08B3ED00: @@ -6888,7 +6987,17 @@ L_08B3ED68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3ED98: ctx.gpr[2] = (2228u << 16u); jump_target = aot_gpr_31; @@ -6896,12 +7005,21 @@ L_08B3ED98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3EDA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B3EDB4u); - // nop goto L_08B3ED98; L_08B3EDB4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -6910,7 +7028,17 @@ L_08B3EDB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3EDC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6939,7 +7067,6 @@ L_08B3EDF0: goto L_08B3EDF8; L_08B3EDF8: aot_gpr_31 = (0x08B3EE00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3EE00u) goto L_08B3EE00; AOT_REGCACHE_SYNC_OUT(); return; L_08B3EE00: @@ -6961,7 +7088,6 @@ L_08B3EE18: goto L_08B3EE1C; L_08B3EE1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3EE28; } @@ -6984,7 +7110,17 @@ L_08B3EE28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3EE44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7036,7 +7172,17 @@ L_08B3EEA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3EED4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -7092,7 +7238,6 @@ L_08B3EF6C: goto L_08B3EF7C; L_08B3EF7C: { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B3EFA4; } @@ -7101,7 +7246,6 @@ L_08B3EF7C: L_08B3EF84: aot_gpr_7 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(28))); { const bool branch_taken = ctx.gpr[21] == aot_gpr_7; - // nop if (branch_taken) { goto L_08B3EFA4; } @@ -7228,7 +7372,6 @@ L_08B3F040: goto L_08B3F048; L_08B3F048: aot_gpr_31 = (0x08B3F050u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F050u) goto L_08B3F050; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F050: @@ -7236,7 +7379,6 @@ L_08B3F050: goto L_08B3F054; L_08B3F054: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B3F028; } @@ -7262,7 +7404,17 @@ L_08B3F05C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F090: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[20]); @@ -7337,7 +7489,6 @@ L_08B3F11C: L_08B3F15C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F16C; } @@ -7355,7 +7506,6 @@ L_08B3F16C: goto L_08B3F178; L_08B3F178: aot_gpr_31 = (0x08B3F180u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F180u) goto L_08B3F180; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F180: @@ -7493,7 +7643,6 @@ L_08B3F26C: goto L_08B3F274; L_08B3F274: aot_gpr_31 = (0x08B3F27Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F27Cu) goto L_08B3F27C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F27C: @@ -7525,7 +7674,6 @@ L_08B3F290: } L_08B3F298: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F2A8; } @@ -7533,12 +7681,10 @@ L_08B3F298: } L_08B3F2A0: aot_gpr_31 = (0x08B3F2A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F2A8u) goto L_08B3F2A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F2A8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B3F318; } @@ -7586,7 +7732,6 @@ L_08B3F2D8: goto L_08B3F2E0; L_08B3F2E0: aot_gpr_31 = (0x08B3F2E8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F2E8u) goto L_08B3F2E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F2E8: @@ -7594,7 +7739,6 @@ L_08B3F2E8: goto L_08B3F2EC; L_08B3F2EC: { const bool branch_taken = ctx.gpr[17] != ctx.gpr[16]; - // nop if (branch_taken) { goto L_08B3F2C0; } @@ -7602,7 +7746,6 @@ L_08B3F2EC: } L_08B3F2F4: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B3F318; } @@ -7611,7 +7754,6 @@ L_08B3F2F4: L_08B3F2FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(212))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F318; } @@ -7619,7 +7761,6 @@ L_08B3F2FC: } L_08B3F308: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F318; } @@ -7627,12 +7768,10 @@ L_08B3F308: } L_08B3F310: aot_gpr_31 = (0x08B3F318u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F318u) goto L_08B3F318; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F318: { const bool branch_taken = ctx.gpr[23] == 0u; - // nop if (branch_taken) { goto L_08B3F338; } @@ -7648,7 +7787,6 @@ L_08B3F320: } L_08B3F328: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F338; } @@ -7656,7 +7794,6 @@ L_08B3F328: } L_08B3F330: aot_gpr_31 = (0x08B3F338u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F338u) goto L_08B3F338; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F338: @@ -7681,7 +7818,6 @@ L_08B3F348: goto L_08B3F350; L_08B3F350: aot_gpr_31 = (0x08B3F358u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F358u) goto L_08B3F358; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F358: @@ -7696,7 +7832,6 @@ L_08B3F35C: L_08B3F368: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F37C; } @@ -7726,7 +7861,17 @@ L_08B3F37C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F3AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -7747,7 +7892,17 @@ L_08B3F3CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F3D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(272))); @@ -7756,7 +7911,6 @@ L_08B3F3D8: aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B3F408; } @@ -7778,7 +7932,6 @@ L_08B3F408: goto L_08B3F410; L_08B3F410: aot_gpr_31 = (0x08B3F418u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 571u, 0x08AC61E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F418u) goto L_08B3F418; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F418: @@ -7788,13 +7941,22 @@ L_08B3F418: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F424: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(273))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08B3F448; } @@ -7818,7 +7980,6 @@ L_08B3F448: goto L_08B3F458; L_08B3F458: aot_gpr_31 = (0x08B3F460u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0176_entry, 176u, 571u, 0x08AC61E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F460u) goto L_08B3F460; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F460: @@ -7828,7 +7989,17 @@ L_08B3F460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F46C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -7868,7 +8039,6 @@ L_08B3F4A4: } L_08B3F4AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3F504; } @@ -7884,7 +8054,6 @@ L_08B3F4B4: } L_08B3F4BC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3F578; } @@ -7892,7 +8061,6 @@ L_08B3F4BC: } L_08B3F4C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3F5AC; } @@ -7900,7 +8068,6 @@ L_08B3F4C4: } L_08B3F4CC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3F4E0; } @@ -7908,7 +8075,6 @@ L_08B3F4CC: } L_08B3F4D4: aot_gpr_31 = (0x08B3F4DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F4DCu) goto L_08B3F4DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F4DC: @@ -7916,12 +8082,10 @@ L_08B3F4DC: goto L_08B3F4E0; L_08B3F4E0: aot_gpr_31 = (0x08B3F4E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 646u, 0x089C6DFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F4E8u) goto L_08B3F4E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F4E8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3F4F8; } @@ -7940,7 +8104,6 @@ L_08B3F4F8: goto L_08B3F4FC; L_08B3F4FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3F5AC; } @@ -7948,7 +8111,6 @@ L_08B3F4FC: } L_08B3F504: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3F518; } @@ -7956,7 +8118,6 @@ L_08B3F504: } L_08B3F50C: aot_gpr_31 = (0x08B3F514u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F514u) goto L_08B3F514; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F514: @@ -7964,12 +8125,10 @@ L_08B3F514: goto L_08B3F518; L_08B3F518: aot_gpr_31 = (0x08B3F520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 646u, 0x089C6DFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F520u) goto L_08B3F520; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F520: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3F530; } @@ -7988,7 +8147,6 @@ L_08B3F530: goto L_08B3F534; L_08B3F534: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3F5AC; } @@ -7997,7 +8155,6 @@ L_08B3F534: L_08B3F53C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3F554; } @@ -8005,7 +8162,6 @@ L_08B3F53C: } L_08B3F548: aot_gpr_31 = (0x08B3F550u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F550u) goto L_08B3F550; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F550: @@ -8013,12 +8169,10 @@ L_08B3F550: goto L_08B3F554; L_08B3F554: aot_gpr_31 = (0x08B3F55Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 646u, 0x089C6DFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F55Cu) goto L_08B3F55C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F55C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3F56C; } @@ -8037,7 +8191,6 @@ L_08B3F56C: goto L_08B3F570; L_08B3F570: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B3F5AC; } @@ -8046,7 +8199,6 @@ L_08B3F570: L_08B3F578: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3F590; } @@ -8054,7 +8206,6 @@ L_08B3F578: } L_08B3F584: aot_gpr_31 = (0x08B3F58Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F58Cu) goto L_08B3F58C; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F58C: @@ -8062,12 +8213,10 @@ L_08B3F58C: goto L_08B3F590; L_08B3F590: aot_gpr_31 = (0x08B3F598u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 646u, 0x089C6DFCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F598u) goto L_08B3F598; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F598: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B3F5A8; } @@ -8097,21 +8246,49 @@ L_08B3F5AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F5C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F5CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F5D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8122,7 +8299,6 @@ L_08B3F5D4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[19]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_31 = (0x08B3F5FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0170_entry, 170u, 640u, 0x08AAEFC8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F5FCu) goto L_08B3F5FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F5FC: @@ -8210,7 +8386,17 @@ L_08B3F698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3F6B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); @@ -8351,7 +8537,6 @@ L_08B3F804: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B3F878; } @@ -8360,7 +8545,6 @@ L_08B3F804: L_08B3F814: aot_gpr_7 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B3F86C; } @@ -8461,7 +8645,6 @@ L_08B3F900: goto L_08B3F904; L_08B3F904: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3F984; } @@ -8564,7 +8747,6 @@ L_08B3F9AC: goto L_08B3F9B4; L_08B3F9B4: aot_gpr_31 = (0x08B3F9BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F9BCu) goto L_08B3F9BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F9BC: @@ -8572,7 +8754,6 @@ L_08B3F9BC: goto L_08B3F9C0; L_08B3F9C0: { const bool branch_taken = ctx.gpr[21] != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B3F994; } @@ -8583,7 +8764,6 @@ L_08B3F9C8: goto L_08B3F9CC; L_08B3F9CC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3F9DC; } @@ -8591,7 +8771,6 @@ L_08B3F9CC: } L_08B3F9D4: aot_gpr_31 = (0x08B3F9DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3F9DCu) goto L_08B3F9DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B3F9DC: @@ -8617,7 +8796,17 @@ L_08B3F9DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3FA1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -8748,7 +8937,6 @@ L_08B3FB34: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = aot_gpr_7 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B3FB88; } @@ -8756,7 +8944,6 @@ L_08B3FB34: } L_08B3FB44: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B3FB7C; } @@ -8831,7 +9018,6 @@ L_08B3FBD4: goto L_08B3FBD8; L_08B3FBD8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B3FC38; } @@ -8904,7 +9090,6 @@ L_08B3FC4C: } L_08B3FC54: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B3FC64; } @@ -8912,7 +9097,6 @@ L_08B3FC54: } L_08B3FC5C: aot_gpr_31 = (0x08B3FC64u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B3FC64u) goto L_08B3FC64; AOT_REGCACHE_SYNC_OUT(); return; L_08B3FC64: @@ -8936,7 +9120,17 @@ L_08B3FC64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3FC9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -8946,7 +9140,17 @@ L_08B3FC9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B3FCB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-768)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(728), ctx.gpr[18]); @@ -9198,7 +9402,6 @@ L_08B3FF90: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(124))); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(273))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B3FFE4; } @@ -9208,7 +9411,6 @@ L_08B3FFD4: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(ctx.gpr[23]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0207_entry, 207u, 19u, 0x08B40180u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0207.cpp b/profiles/vcs/generated/generated_unit_0207.cpp index 0f80cf4..c1074c5 100644 --- a/profiles/vcs/generated/generated_unit_0207.cpp +++ b/profiles/vcs/generated/generated_unit_0207.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0207[4086] = { - 1, 0, 2, 0, 3, 4, 0, 5, 0, 6, 0, 0, 7, 0, 8, 0, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, - 19, 0, 0, 0, 20, 0, 0, 21, 0, 22, 23, 0, 24, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 29, 0, 0, 30, 0, 0, 0, 0, 31, 0, 32, 0, - 33, 0, 34, 0, 0, 0, 35, 0, 36, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 40, 0, 41, 0, 0, 0, 42, 0, - 0, 0, 43, 0, 0, 44, 45, 0, 0, 0, 46, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, - 0, 52, 0, 0, 53, 0, 54, 0, 0, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 0, 0, 0, 58, 0, 59, 0, 0, 0, 60, 0, 61, 0, - 0, 0, 62, 0, 0, 0, 63, 0, 0, 64, 65, 0, 0, 0, 66, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, - 0, 0, 71, 0, 0, 72, 0, 0, 73, 0, 74, 0, 75, 0, 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 79, 0, 80, 0, 81, 82, 0, 0, - 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 86, 0, 87, 0, 0, 0, 0, 0, 0, 88, 0, 89, 0, 0, 0, 0, 90, 0, 0, 91, 0, 0, - 92, 0, 93, 0, 94, 0, 95, 96, 0, 0, 0, 97, 0, 0, 98, 0, 0, 99, 0, 100, 0, 101, 0, 102, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 104, 0, 0, 0, 105, 0, 106, 0, 0, 0, 107, 0, 0, 0, 108, 0, 0, 109, 110, 0, 0, 0, 111, 0, 112, 0, 0, 0, 113, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 115, 0, 0, 116, 0, 0, 117, 0, 118, 119, 0, 0, 120, 0, 0, 121, 0, 122, 123, 0, 0, 0, 124, 0, 0, - 125, 0, 0, 126, 0, 127, 0, 128, 0, 129, 130, 0, 0, 0, 131, 0, 0, 132, 0, 0, 133, 0, 134, 0, 135, 0, 136, 137, 0, 0, 0, 138, - 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 141, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, - 0, 144, 0, 0, 145, 0, 0, 146, 0, 147, 0, 0, 148, 0, 149, 0, 150, 0, 0, 0, 151, 0, 0, 152, 0, 0, 153, 0, 154, 0, 155, 0, - 0, 0, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 158, 0, 0, 159, 0, 160, 0, 161, 0, 162, 163, 0, 0, 164, 0, 0, 165, 0, 166, 167, - 0, 0, 168, 0, 0, 169, 0, 170, 171, 0, 0, 0, 172, 0, 0, 173, 0, 0, 174, 0, 175, 0, 176, 0, 177, 0, 0, 178, 0, 0, 179, 0, - 180, 0, 181, 0, 0, 0, 182, 0, 0, 183, 0, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 196, 0, 197, 0, - 198, 0, 0, 0, 199, 0, 0, 200, 0, 0, 201, 0, 202, 0, 203, 0, 0, 0, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, 207, - 0, 0, 208, 0, 209, 0, 210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 213, 0, 0, 0, 214, 0, 215, 0, 0, 0, 216, 0, 0, 0, - 217, 0, 0, 218, 219, 0, 0, 0, 220, 0, 221, 0, 0, 0, 222, 0, 0, 0, 223, 0, 0, 0, 0, 0, 224, 0, 0, 225, 0, 0, 226, 0, - 227, 228, 0, 0, 229, 0, 0, 230, 0, 231, 232, 0, 0, 0, 233, 0, 0, 234, 0, 0, 235, 0, 236, 0, 237, 0, 238, 239, 0, 0, 0, 240, - 0, 0, 241, 0, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 248, 0, 249, - 0, 0, 250, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 253, 0, 0, 0, 254, 0, 0, 255, 256, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, - 0, 0, 259, 0, 0, 260, 0, 0, 261, 0, 262, 0, 0, 263, 0, 264, 0, 265, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 0, 0, 272, 273, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, - 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 288, 0, - 0, 0, 0, 289, 0, 290, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 295, 296, 0, 0, 0, 0, 297, 0, 298, 0, 0, 0, 0, 0, 299, 0, 300, 301, 0, 0, 302, 0, 0, 0, 303, - 0, 0, 0, 304, 0, 305, 0, 0, 306, 0, 0, 307, 0, 0, 0, 0, 308, 309, 0, 310, 0, 311, 0, 312, 0, 0, 0, 0, 0, 313, 0, 0, - 314, 0, 315, 316, 0, 317, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 325, 0, 326, 0, 0, 0, 0, 327, 0, 328, 329, 0, 330, 0, 331, - 0, 0, 0, 332, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 335, 0, 0, 336, 0, 0, 0, - 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, - 0, 341, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 344, 0, 0, 0, 345, 0, 346, 0, 0, 0, 0, 347, 0, 348, - 349, 0, 0, 350, 0, 351, 0, 352, 0, 0, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 0, 359, 0, 0, 0, 0, 360, 0, 361, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, 370, 0, 0, 0, 0, 371, 372, 0, 0, - 0, 0, 0, 373, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 379, 0, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 382, 0, 0, 0, 0, - 0, 383, 0, 0, 0, 384, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 398, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 402, 0, 403, - 0, 404, 0, 405, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 408, 0, 0, 409, 0, 410, 0, 411, 0, 0, 0, 412, - 0, 413, 0, 414, 0, 0, 0, 415, 0, 0, 0, 416, 0, 0, 417, 0, 0, 418, 0, 0, 0, 419, 0, 420, 0, 0, 421, 0, 422, 0, 423, 0, - 424, 0, 425, 0, 426, 0, 427, 0, 0, 0, 428, 0, 0, 0, 429, 430, 0, 0, 431, 432, 0, 433, 0, 0, 0, 434, 435, 0, 436, 0, 0, 0, - 437, 438, 0, 439, 0, 0, 0, 440, 441, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, - 0, 0, 0, 447, 0, 0, 0, 448, 0, 449, 0, 0, 0, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 459, 0, - 0, 0, 0, 460, 0, 0, 0, 461, 0, 462, 0, 463, 0, 0, 0, 0, 0, 0, 0, 464, 465, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, - 0, 0, 467, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 474, 0, - 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 477, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, - 491, 0, 492, 0, 493, 494, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 496, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 500, 0, 0, - 0, 501, 0, 502, 0, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 505, 506, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 508, 0, 509, 510, 0, - 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, - 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 517, 0, 0, 0, 0, 518, 0, 0, 0, 519, 0, 0, 0, 0, 0, 520, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 522, 0, 523, 0, 0, 524, 0, 0, 0, 0, 0, 525, 0, - 0, 526, 527, 0, 0, 0, 528, 0, 529, 530, 0, 0, 0, 531, 0, 532, 0, 533, 0, 534, 0, 535, 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, - 0, 0, 0, 0, 538, 0, 0, 0, 539, 0, 540, 0, 0, 0, 541, 0, 542, 0, 543, 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 547, 0, - 0, 0, 548, 0, 549, 0, 550, 0, 0, 551, 552, 0, 0, 0, 553, 0, 554, 0, 555, 0, 556, 0, 557, 0, 0, 0, 0, 558, 0, 559, 0, 560, - 0, 0, 0, 561, 0, 562, 0, 0, 0, 0, 563, 0, 0, 0, 0, 564, 0, 565, 0, 566, 0, 567, 0, 0, 0, 0, 568, 0, 569, 570, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 572, 0, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 575, 0, 576, 0, 0, 0, 577, 0, 578, - 0, 0, 0, 0, 579, 0, 580, 581, 0, 582, 0, 0, 583, 584, 0, 0, 0, 0, 585, 0, 586, 0, 0, 0, 0, 0, 587, 0, 588, 0, 589, 0, - 590, 0, 591, 0, 0, 592, 0, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, 0, 595, 0, 596, 0, 597, 0, 0, 0, 598, 0, 0, 0, - 0, 599, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 601, 0, 0, 602, 0, 603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, 605, 0, - 606, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 609, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 612, 0, 0, 613, 0, 614, 0, 0, 0, 615, 0, 0, 0, 0, - 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, - 0, 0, 618, 0, 0, 0, 0, 619, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 622, 0, 0, 0, 623, 0, 624, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, - 627, 0, 628, 0, 0, 0, 629, 0, 630, 0, 631, 0, 632, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, - 636, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 642, 0, 643, 0, - 644, 0, 0, 645, 0, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 651, 0, 0, 0, 0, 652, 0, 653, 654, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, 0, 657, - 0, 658, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 664, 0, - 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 671, 0, 672, 0, 0, 0, 673, 0, 0, 0, 674, 0, 0, - 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 680, 0, 0, - 0, 0, 0, 681, 0, 682, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 686, 0, 0, - 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 688, 0, 0, 689, 0, 0, 690, 0, 0, 691, 0, 692, 0, 693, 694, 0, 0, 0, 0, 0, 0, 0, - 695, 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, 0, - 0, 0, 0, 699, 0, 0, 0, 0, 700, 0, 701, 702, 0, 0, 703, 0, 0, 0, 0, 704, 0, 0, 0, 705, 0, 706, 707, 0, 708, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 715, 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, - 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 0, 0, 721, 0, 0, 0, 722, - 0, 0, 0, 723, 0, 0, 0, 724, 0, 0, 0, 725, 0, 0, 0, 726, 0, 0, 0, 727, 0, 0, 0, 728, 0, 0, 0, 729, 0, 0, 0, 730, - 0, 0, 0, 731, 0, 732, 0, 733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 735, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 737, 0, 0, 738, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 741, 0, 0, 742, 743, 0, - 0, 744, 0, 0, 0, 0, 745, 0, 0, 0, 0, 746, 0, 747, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 752, 0, 0, 0, - 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 755, 0, 0, 0, 0, 756, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 758, 0, - 0, 0, 759, 0, 0, 0, 0, 760, 0, 0, 0, 761, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 769, 0, 770, 0, 771, - 772, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, 0, 777, - 778, 0, 0, 0, 0, 0, 779, 0, 0, 0, 780, 0, 0, 0, 781, 0, 782, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 785, 0, 786, 0, 0, 0, - 0, 787, 0, 0, 0, 0, 788, 0, 0, 789, 0, 0, 0, 0, 790, 0, 0, 0, 0, 791, 0, 0, 792, 0, 0, 0, 793, 0, 0, 0, 0, 794, - 795, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 0, 798, 0, 0, 0, 799, 0, 800, 0, 801, 0, 0, 0, 0, - 0, 802, 803, 0, 0, 0, 804, 805, 0, 0, 0, 0, 806, 0, 0, 0, 0, 807, 0, 0, 808, 0, 0, 0, 0, 809, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 812, 0, 813, 0, 0, 0, - 814, 0, 0, 0, 0, 0, 0, 0, 815, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, 0, 819, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0207[64] = { + 0x00140010400A52B5ull, 0x0000569108001440ull, 0x4514054550914001ull, 0x5140545244111464ull, + 0x3549152441114644ull, 0x80AA48D524281524ull, 0x2349A482228C88A2ull, 0x202A00028D5246A9ull, + 0xD26A922054915292ull, 0x05155245495491A4ull, 0x90A0549152440500ull, 0x4904451911450154ull, + 0xA2002AA48D524693ull, 0x4006A52442322284ull, 0x0000080005980024ull, 0xA000009200024000ull, + 0x4200004020100020ull, 0x89A0A18400050428ull, 0x0045022D20AB0928ull, 0x12400028AD0A2810ull, + 0xA145020248000802ull, 0x0040A50A000AA8A9ull, 0x8000002830D00C04ull, 0x000000000A000000ull, + 0x000000A20A20A000ull, 0x410000000820A024ull, 0x4102000400080000ull, 0x8A92001AA0220100ull, + 0x162CC45554A2488Aull, 0x210042888108158Bull, 0x5400244000010000ull, 0x5084811408180A88ull, + 0x0800904200488402ull, 0x21250435042A1002ull, 0x100400016821A20Aull, 0x4128800082215002ull, + 0x5115451010AAA346ull, 0x342A8428A8554654ull, 0x541432D0A2882A00ull, 0x48029102115400A5ull, + 0x08A4100000224011ull, 0x2888108420000002ull, 0x4080354540001000ull, 0x5100200000004085ull, + 0x0004000100002209ull, 0x00004006884D0840ull, 0x2000000241080200ull, 0x0000800000400000ull, + 0x0020000A22288100ull, 0x2104202821010000ull, 0x2000012101A92410ull, 0x0000400016884D08ull, + 0x0001080002100001ull, 0x8884000108000084ull, 0x028000A888888888ull, 0x6410100004840000ull, + 0x1081000004006842ull, 0x0800288440884404ull, 0x0100000000000000ull, 0x80420805AA810010ull, + 0x1440000000054441ull, 0x0A88200584484242ull, 0x14084000021210C6ull, 0x0024000004000301ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0207[64] = { + 1u, 15u, 26u, 43u, 62u, 83u, 104u, 125u, 144u, 168u, 191u, 208u, 227u, 250u, 268u, 276u, + 283u, 289u, 304u, 322u, 337u, 349u, 365u, 376u, 378u, 386u, 394u, 399u, 413u, 437u, 453u, 460u, + 475u, 485u, 501u, 514u, 526u, 548u, 571u, 590u, 606u, 616u, 625u, 636u, 644u, 650u, 661u, 667u, + 669u, 678u, 687u, 699u, 710u, 715u, 723u, 736u, 744u, 753u, 764u, 765u, 778u, 787u, 802u, 814u, }; void recomp_unit_0207_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0207_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B40000u; - entry_id = (entry_delta < 16344u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0207[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16344u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0207[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0207[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B40000; @@ -992,7 +899,6 @@ LOCAL_DISPATCH: } L_08B40000: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B40014; } @@ -1029,7 +935,6 @@ L_08B40030: L_08B40038: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B400C8; } @@ -1117,7 +1022,6 @@ L_08B40118: AOT_REGCACHE_SYNC_OUT(); return; L_08B40128: aot_gpr_31 = (0x08B40130u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 63u, 0x08B0C4CCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40130u) goto L_08B40130; AOT_REGCACHE_SYNC_OUT(); return; L_08B40130: @@ -1164,7 +1068,6 @@ L_08B40190: goto L_08B4019C; L_08B4019C: aot_gpr_31 = (0x08B401A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B401A4u) goto L_08B401A4; AOT_REGCACHE_SYNC_OUT(); return; L_08B401A4: @@ -1172,7 +1075,6 @@ L_08B401A4: goto L_08B401A8; L_08B401A8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B401B8; } @@ -1180,7 +1082,6 @@ L_08B401A8: } L_08B401B0: aot_gpr_31 = (0x08B401B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B401B8u) goto L_08B401B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B401B8: @@ -1208,7 +1109,17 @@ L_08B401B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B40200: aot_gpr_29 = (aot_gpr_29 + static_cast(-224)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(208), ctx.gpr[22]); @@ -1223,7 +1134,6 @@ L_08B40200: AOT_REGCACHE_SYNC_OUT(); return; L_08B40238: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B40278; } @@ -1255,7 +1165,6 @@ L_08B4025C: } L_08B40270: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B40288; } @@ -1271,7 +1180,6 @@ L_08B40278: } L_08B40280: aot_gpr_31 = (0x08B40288u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40288u) goto L_08B40288; AOT_REGCACHE_SYNC_OUT(); return; L_08B40288: @@ -1330,7 +1238,6 @@ L_08B402E8: ctx.gpr[18] = (aot_gpr_5 + ctx.gpr[18]); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B40368; } @@ -1417,7 +1324,6 @@ L_08B40384: } L_08B40390: aot_gpr_31 = (0x08B40398u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40398u) goto L_08B40398; AOT_REGCACHE_SYNC_OUT(); return; L_08B40398: @@ -1476,7 +1382,6 @@ L_08B403F8: ctx.gpr[18] = (aot_gpr_5 + ctx.gpr[18]); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B40478; } @@ -1563,12 +1468,10 @@ L_08B40494: } L_08B404A0: aot_gpr_31 = (0x08B404A8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B404A8u) goto L_08B404A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B404A8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B404F4; } @@ -1598,12 +1501,10 @@ L_08B404CC: } L_08B404D8: aot_gpr_31 = (0x08B404E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B404E0u) goto L_08B404E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B404E0: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B404F4; } @@ -1642,7 +1543,6 @@ L_08B40514: } L_08B40520: aot_gpr_31 = (0x08B40528u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40528u) goto L_08B40528; AOT_REGCACHE_SYNC_OUT(); return; L_08B40528: @@ -1692,12 +1592,10 @@ L_08B40574: } L_08B40580: aot_gpr_31 = (0x08B40588u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40588u) goto L_08B40588; AOT_REGCACHE_SYNC_OUT(); return; L_08B40588: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B4059C; } @@ -1735,12 +1633,10 @@ L_08B405B8: } L_08B405C4: aot_gpr_31 = (0x08B405CCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B405CCu) goto L_08B405CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B405CC: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B4069C; } @@ -1786,7 +1682,6 @@ L_08B4061C: ctx.gpr[17] = (aot_gpr_5 + aot_gpr_16); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B4069C; } @@ -1858,7 +1753,6 @@ L_08B4069C: L_08B406A8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B406C0; } @@ -1866,7 +1760,6 @@ L_08B406A8: } L_08B406B4: aot_gpr_31 = (0x08B406BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B406BCu) goto L_08B406BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B406BC: @@ -1881,7 +1774,6 @@ L_08B406C0: L_08B406CC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B406E4; } @@ -1889,7 +1781,6 @@ L_08B406CC: } L_08B406D8: aot_gpr_31 = (0x08B406E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B406E0u) goto L_08B406E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B406E0: @@ -1919,12 +1810,10 @@ L_08B40700: } L_08B4070C: aot_gpr_31 = (0x08B40714u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40714u) goto L_08B40714; AOT_REGCACHE_SYNC_OUT(); return; L_08B40714: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B40728; } @@ -1962,12 +1851,10 @@ L_08B40744: } L_08B40750: aot_gpr_31 = (0x08B40758u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40758u) goto L_08B40758; AOT_REGCACHE_SYNC_OUT(); return; L_08B40758: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B4076C; } @@ -2065,13 +1952,11 @@ L_08B40810: } L_08B4081C: aot_gpr_31 = (0x08B40824u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40824u) goto L_08B40824; AOT_REGCACHE_SYNC_OUT(); return; L_08B40824: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(60))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40838; } @@ -2079,12 +1964,10 @@ L_08B40824: } L_08B40830: aot_gpr_31 = (0x08B40838u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40838u) goto L_08B40838; AOT_REGCACHE_SYNC_OUT(); return; L_08B40838: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B4054C; } @@ -2114,7 +1997,6 @@ L_08B4085C: } L_08B40868: aot_gpr_31 = (0x08B40870u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40870u) goto L_08B40870; AOT_REGCACHE_SYNC_OUT(); return; L_08B40870: @@ -2158,12 +2040,10 @@ L_08B408B0: } L_08B408BC: aot_gpr_31 = (0x08B408C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B408C4u) goto L_08B408C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B408C4: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B408D8; } @@ -2186,7 +2066,6 @@ L_08B408D8: L_08B408E4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B408FC; } @@ -2194,7 +2073,6 @@ L_08B408E4: } L_08B408F0: aot_gpr_31 = (0x08B408F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B408F8u) goto L_08B408F8; AOT_REGCACHE_SYNC_OUT(); return; L_08B408F8: @@ -2209,7 +2087,6 @@ L_08B408FC: L_08B40908: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40920; } @@ -2217,7 +2094,6 @@ L_08B40908: } L_08B40914: aot_gpr_31 = (0x08B4091Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4091Cu) goto L_08B4091C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4091C: @@ -2247,12 +2123,10 @@ L_08B4093C: } L_08B40948: aot_gpr_31 = (0x08B40950u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40950u) goto L_08B40950; AOT_REGCACHE_SYNC_OUT(); return; L_08B40950: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B40988; } @@ -2266,7 +2140,6 @@ L_08B40958: L_08B40960: aot_gpr_4 = (ctx.gpr[2] < static_cast(9) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40980; } @@ -2280,7 +2153,6 @@ L_08B4096C: AOT_REGCACHE_SYNC_OUT(); return; L_08B40978: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B40988; } @@ -2318,12 +2190,10 @@ L_08B409A4: } L_08B409B0: aot_gpr_31 = (0x08B409B8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B409B8u) goto L_08B409B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B409B8: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B409D0; } @@ -2342,7 +2212,6 @@ L_08B409D0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(264))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(268))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B40A28; } @@ -2415,12 +2284,10 @@ L_08B40A64: } L_08B40A70: aot_gpr_31 = (0x08B40A78u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40A78u) goto L_08B40A78; AOT_REGCACHE_SYNC_OUT(); return; L_08B40A78: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B40894; } @@ -2450,7 +2317,6 @@ L_08B40A9C: } L_08B40AA8: aot_gpr_31 = (0x08B40AB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40AB0u) goto L_08B40AB0; AOT_REGCACHE_SYNC_OUT(); return; L_08B40AB0: @@ -2500,12 +2366,10 @@ L_08B40AFC: } L_08B40B08: aot_gpr_31 = (0x08B40B10u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40B10u) goto L_08B40B10; AOT_REGCACHE_SYNC_OUT(); return; L_08B40B10: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B40BE0; } @@ -2551,7 +2415,6 @@ L_08B40B60: ctx.gpr[17] = (aot_gpr_5 + aot_gpr_16); aot_gpr_16 = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[17] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B40BE0; } @@ -2623,7 +2486,6 @@ L_08B40BE0: L_08B40BEC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40C04; } @@ -2631,7 +2493,6 @@ L_08B40BEC: } L_08B40BF8: aot_gpr_31 = (0x08B40C00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40C00u) goto L_08B40C00; AOT_REGCACHE_SYNC_OUT(); return; L_08B40C00: @@ -2646,7 +2507,6 @@ L_08B40C04: L_08B40C10: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40C28; } @@ -2654,7 +2514,6 @@ L_08B40C10: } L_08B40C1C: aot_gpr_31 = (0x08B40C24u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 937u, 0x08B577E8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40C24u) goto L_08B40C24; AOT_REGCACHE_SYNC_OUT(); return; L_08B40C24: @@ -2684,12 +2543,10 @@ L_08B40C44: } L_08B40C50: aot_gpr_31 = (0x08B40C58u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40C58u) goto L_08B40C58; AOT_REGCACHE_SYNC_OUT(); return; L_08B40C58: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B40C6C; } @@ -2727,7 +2584,6 @@ L_08B40C88: } L_08B40C94: aot_gpr_31 = (0x08B40C9Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40C9Cu) goto L_08B40C9C; AOT_REGCACHE_SYNC_OUT(); return; L_08B40C9C: @@ -2771,7 +2627,6 @@ L_08B40CE4: goto L_08B40CF4; L_08B40CF4: { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B40D1C; } @@ -2780,7 +2635,6 @@ L_08B40CF4: L_08B40CFC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(252))); { const bool branch_taken = aot_gpr_16 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B40D1C; } @@ -2809,7 +2663,6 @@ L_08B40D24: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(252))); ctx.gpr[17] = (aot_gpr_4 | 0u); { const bool branch_taken = aot_gpr_16 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B40D78; } @@ -2876,13 +2729,11 @@ L_08B40D94: } L_08B40DA0: aot_gpr_31 = (0x08B40DA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40DA8u) goto L_08B40DA8; AOT_REGCACHE_SYNC_OUT(); return; L_08B40DA8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(144))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40DBC; } @@ -2890,12 +2741,10 @@ L_08B40DA8: } L_08B40DB4: aot_gpr_31 = (0x08B40DBCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B40DBCu) goto L_08B40DBC; AOT_REGCACHE_SYNC_OUT(); return; L_08B40DBC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B40AD4; } @@ -2923,7 +2772,17 @@ L_08B40DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B40DF8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(852))); ctx.gpr[7] = (0u | 13u); @@ -2965,7 +2824,6 @@ L_08B40E4C: L_08B40E50: aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B40E60; } @@ -2980,7 +2838,17 @@ L_08B40E60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B40E68: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2)))))); @@ -3022,11 +2890,20 @@ L_08B40E68: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B40EAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(88), std::bit_cast(aot_fpr_20)); @@ -3097,7 +2974,6 @@ L_08B40F44: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); ctx.gpr[21] = (ctx.gpr[21] + aot_gpr_4); { const bool branch_taken = ctx.gpr[21] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B40FFC; } @@ -3180,9 +3056,7 @@ L_08B40F9C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B40FFC; } @@ -3224,7 +3098,17 @@ L_08B41014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41050: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -3236,11 +3120,20 @@ L_08B41050: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41074: aot_gpr_4 = (std::bit_cast(aot_fpr_12)); ctx.set_vfpu_scalar_bits_ct<0u>(aot_gpr_4); @@ -3252,11 +3145,20 @@ L_08B41074: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<1u>()); ctx.fpr[0] = std::bit_cast(aot_gpr_4); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41098: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -3324,11 +3226,20 @@ L_08B41128: } L_08B41140: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41148: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); @@ -3373,11 +3284,20 @@ L_08B411A0: } L_08B411B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B411BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5884))); @@ -3390,7 +3310,6 @@ L_08B411BC: goto L_08B411D4; L_08B411D4: aot_gpr_31 = (0x08B411DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 683u, 0x08B66DBCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B411DCu) goto L_08B411DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B411DC: @@ -3399,7 +3318,6 @@ L_08B411DC: L_08B411E0: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(18))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B41214; } @@ -3409,7 +3327,6 @@ L_08B411EC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B41214; } @@ -3419,7 +3336,6 @@ L_08B411FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5436))); aot_gpr_4 = (static_cast(aot_gpr_4) < 30 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B41220; } @@ -3427,7 +3343,6 @@ L_08B411FC: } L_08B4120C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B412A4; } @@ -3445,7 +3360,6 @@ L_08B41214: L_08B41220: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5464))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B41280; } @@ -3456,7 +3370,6 @@ L_08B4122C: aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(5464), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5464))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B412A4; } @@ -3467,17 +3380,14 @@ L_08B41240: goto L_08B41244; L_08B41244: aot_gpr_31 = (0x08B4124Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 536u, 0x08B46A94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4124Cu) goto L_08B4124C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4124C: aot_gpr_31 = (0x08B41254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 536u, 0x08B46A94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B41254u) goto L_08B41254; AOT_REGCACHE_SYNC_OUT(); return; L_08B41254: aot_gpr_31 = (0x08B4125Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 536u, 0x08B46A94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4125Cu) goto L_08B4125C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4125C: @@ -3486,7 +3396,6 @@ L_08B4125C: aot_gpr_16 = (static_cast(static_cast(aot_gpr_16) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_16) < 100 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B41244; } @@ -3503,7 +3412,6 @@ L_08B41274: } L_08B41280: aot_gpr_31 = (0x08B41288u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 536u, 0x08B46A94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B41288u) goto L_08B41288; AOT_REGCACHE_SYNC_OUT(); return; L_08B41288: @@ -3511,14 +3419,12 @@ L_08B41288: goto L_08B4128C; L_08B4128C: aot_gpr_31 = (0x08B41294u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 536u, 0x08B46A94u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B41294u) goto L_08B41294; AOT_REGCACHE_SYNC_OUT(); return; L_08B41294: aot_gpr_16 = (aot_gpr_16 + static_cast(1)); aot_gpr_4 = (static_cast(aot_gpr_16) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4128C; } @@ -3531,7 +3437,6 @@ L_08B412A4: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_gpr_5 = (aot_gpr_6 & aot_gpr_5); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B412C8; } @@ -3539,7 +3444,6 @@ L_08B412A4: } L_08B412C0: aot_gpr_31 = (0x08B412C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 217u, 0x08B453F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B412C8u) goto L_08B412C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B412C8: @@ -3550,7 +3454,17 @@ L_08B412C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B412D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[21]); @@ -3580,7 +3494,6 @@ L_08B41310: goto L_08B4132C; L_08B4132C: { const bool branch_taken = static_cast(ctx.gpr[19]) < 0; - // nop if (branch_taken) { goto L_08B41344; } @@ -3624,7 +3537,6 @@ L_08B41368: goto L_08B4136C; L_08B4136C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B413F0; } @@ -3639,7 +3551,6 @@ L_08B4137C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B413F0; } @@ -3676,9 +3587,7 @@ L_08B41394: aot_fpr_12 = aot_fpr_12 + aot_fpr_14; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B413F0; } @@ -3723,7 +3632,17 @@ L_08B41404: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4142C: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7764))); @@ -3732,7 +3651,6 @@ L_08B4142C: { const std::uint32_t aot_run_words[10]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(36), aot_run_words); } { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B415D8; } @@ -3747,7 +3665,6 @@ L_08B4146C: L_08B41478: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 8 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B415D8; } @@ -3778,7 +3695,6 @@ L_08B414A4: goto L_08B414C0; L_08B414C0: { const bool branch_taken = static_cast(ctx.gpr[20]) < 0; - // nop if (branch_taken) { goto L_08B414D8; } @@ -3823,7 +3739,6 @@ L_08B414FC: L_08B41500: ctx.gpr[17] = (ctx.gpr[19] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B4158C; } @@ -3835,7 +3750,6 @@ L_08B4150C: goto L_08B4223C; L_08B41514: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B4158C; } @@ -3845,7 +3759,6 @@ L_08B4151C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4158C; } @@ -3858,7 +3771,6 @@ L_08B4152C: AOT_REGCACHE_SYNC_OUT(); return; L_08B41534: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4158C; } @@ -3871,7 +3783,6 @@ L_08B4153C: AOT_REGCACHE_SYNC_OUT(); return; L_08B41544: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B4158C; } @@ -3916,9 +3827,7 @@ L_08B4154C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4158C; } @@ -3941,7 +3850,6 @@ L_08B4158C: } L_08B415A0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08B415D8; } @@ -3955,7 +3863,6 @@ L_08B415A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B415B4: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { goto L_08B415D8; } @@ -3992,7 +3899,17 @@ L_08B415D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41608: aot_gpr_5 = (0u | 1u); aot_mem.aot_direct_store8(aot_gpr_4 + static_cast(533), static_cast(aot_gpr_5)); @@ -4005,7 +3922,17 @@ L_08B41608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41628: aot_gpr_4 = (0u | 0u); goto L_08B4162C; @@ -4018,7 +3945,6 @@ L_08B4162C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4162C; } @@ -4026,11 +3952,20 @@ L_08B4162C: } L_08B41650: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41658: aot_gpr_6 = (0u | 0u); goto L_08B4165C; @@ -4039,7 +3974,6 @@ L_08B4165C: aot_gpr_5 = (ctx.gpr[28] + aot_gpr_5); ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(10592))); { const bool branch_taken = ctx.gpr[7] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B41674; } @@ -4054,7 +3988,6 @@ L_08B41674: aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_6) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4165C; } @@ -4062,11 +3995,20 @@ L_08B41674: } L_08B4168C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41694: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4131,7 +4073,6 @@ L_08B416FC: ctx.gpr[9] = (0u | 0u); ctx.gpr[10] = (static_cast(ctx.gpr[9]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B41864; } @@ -4189,7 +4130,6 @@ L_08B4176C: ctx.fpr[19] = ctx.fpr[19] + ctx.fpr[0]; ctx.fpr[19] = std::sqrt(ctx.fpr[19]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (ctx.gpr[3] | 0u); if (branch_taken) { @@ -4207,7 +4147,6 @@ L_08B4183C: ctx.gpr[9] = (static_cast(static_cast(ctx.gpr[9]) >> 16u)); ctx.gpr[10] = (static_cast(ctx.gpr[9]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08B4176C; } @@ -4221,7 +4160,6 @@ L_08B41854: goto L_08B41864; L_08B41864: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_08B4193C; } @@ -4231,7 +4169,6 @@ L_08B4186C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(20))); if (branch_taken) { @@ -4241,9 +4178,7 @@ L_08B4186C: } L_08B41884: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_14)) && aot_fpr_13 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4189C; } @@ -4278,9 +4213,7 @@ L_08B4189C: { const float fs = aot_fpr_13; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B41914; } @@ -4328,7 +4261,17 @@ L_08B41954: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4196C: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(64), static_cast(0u)); @@ -4410,9 +4353,7 @@ L_08B419F8: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B41B7C; } @@ -4598,7 +4539,17 @@ L_08B41B90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41BC4: aot_gpr_6 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_6 != 0u; @@ -4625,7 +4576,6 @@ L_08B41BDC: } L_08B41BE4: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B41C1C; } @@ -4651,7 +4601,6 @@ L_08B41BFC: } L_08B41C04: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B41C54; } @@ -4703,7 +4652,6 @@ L_08B41C44: } L_08B41C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41D28; } @@ -4726,7 +4674,6 @@ L_08B41C68: } L_08B41C70: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B41C98; } @@ -4734,7 +4681,6 @@ L_08B41C70: } L_08B41C78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41CD4; } @@ -4750,7 +4696,6 @@ L_08B41C80: } L_08B41C88: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B41D0C; } @@ -4758,7 +4703,6 @@ L_08B41C88: } L_08B41C90: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41D28; } @@ -4801,7 +4745,6 @@ L_08B41CC8: goto L_08B41CCC; L_08B41CCC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41D28; } @@ -4822,7 +4765,6 @@ L_08B41CE4: goto L_08B41CE8; L_08B41CE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41D28; } @@ -4843,7 +4785,6 @@ L_08B41D00: goto L_08B41D04; L_08B41D04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41D28; } @@ -4864,7 +4805,6 @@ L_08B41D1C: goto L_08B41D20; L_08B41D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41D28; } @@ -4872,11 +4812,20 @@ L_08B41D20: } L_08B41D28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41D30: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4908,7 +4857,6 @@ L_08B41D7C: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B41DA4; } @@ -4926,7 +4874,6 @@ L_08B41D8C: } L_08B41D9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41DA4; } @@ -4944,7 +4891,17 @@ L_08B41DA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4992,7 +4949,17 @@ L_08B41DF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41E40: ctx.gpr[8] = (aot_gpr_5 | 0u); ctx.gpr[7] = (aot_gpr_6 | 0u); @@ -5034,7 +5001,17 @@ L_08B41EA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41EB4: ctx.gpr[9] = (aot_gpr_5 << 5u); aot_gpr_6 = (aot_gpr_5 + ctx.gpr[9]); @@ -5056,7 +5033,6 @@ L_08B41EB4: } L_08B41EE8: { const bool branch_taken = ctx.gpr[11] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B41EF8; } @@ -5064,7 +5040,6 @@ L_08B41EE8: } L_08B41EF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B41F0C; } @@ -5129,7 +5104,17 @@ L_08B41F50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B41F6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -5151,7 +5136,6 @@ L_08B41F90: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(534)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B41FF8; } @@ -5177,7 +5161,6 @@ L_08B41FC8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B41FF0; } @@ -5192,7 +5175,6 @@ L_08B41FDC: goto L_08B41FF0; L_08B41FF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42130; } @@ -5211,9 +5193,7 @@ L_08B42004: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[0] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4203C; } @@ -5260,7 +5240,6 @@ L_08B42084: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B42130; } @@ -5344,14 +5323,34 @@ L_08B42130: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42144: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4214C: ctx.gpr[9] = (0u | 0u); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); @@ -5361,7 +5360,6 @@ L_08B42154: ctx.gpr[7] = (ctx.gpr[28] + ctx.gpr[7]); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(10592))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B42188; } @@ -5373,7 +5371,6 @@ L_08B42168: ctx.gpr[9] = (static_cast(static_cast(ctx.gpr[9]) >> 16u)); aot_gpr_5 = (static_cast(ctx.gpr[9]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B42154; } @@ -5381,7 +5378,6 @@ L_08B42168: } L_08B42180: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42190; } @@ -5403,7 +5399,6 @@ L_08B42194: ctx.gpr[7] = (ctx.gpr[28] + ctx.gpr[7]); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(10592))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B421C8; } @@ -5415,7 +5410,6 @@ L_08B421A8: ctx.gpr[9] = (static_cast(static_cast(ctx.gpr[9]) >> 16u)); aot_gpr_5 = (static_cast(ctx.gpr[9]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B42194; } @@ -5423,7 +5417,6 @@ L_08B421A8: } L_08B421C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B421D4; } @@ -5448,7 +5441,6 @@ L_08B421E0: ctx.gpr[7] = (ctx.gpr[28] + ctx.gpr[7]); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(10592))); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B4220C; } @@ -5458,7 +5450,6 @@ L_08B421F4: ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(10600))); ctx.gpr[10] = (ctx.gpr[7] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B4220C; } @@ -5474,7 +5465,6 @@ L_08B4220C: ctx.gpr[9] = (static_cast(static_cast(ctx.gpr[9]) >> 16u)); ctx.gpr[7] = (static_cast(ctx.gpr[9]) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B421E0; } @@ -5488,11 +5478,20 @@ L_08B42224: goto L_08B42234; L_08B42234: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4223C: aot_gpr_5 = (0u | 0u); goto L_08B42240; @@ -5501,7 +5500,6 @@ L_08B42240: aot_gpr_6 = (ctx.gpr[28] + aot_gpr_6); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(10592))); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B42274; } @@ -5513,7 +5511,6 @@ L_08B42254: aot_gpr_5 = (static_cast(static_cast(aot_gpr_5) >> 16u)); aot_gpr_6 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B42240; } @@ -5532,11 +5529,20 @@ L_08B42274: goto L_08B42278; L_08B42278: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42280: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2280u << 16u); @@ -5591,7 +5597,6 @@ L_08B42304: aot_gpr_6 = (aot_gpr_6 | 0u); ctx.gpr[7] = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[7] != 0u; - // nop if (branch_taken) { goto L_08B42340; } @@ -5599,7 +5604,6 @@ L_08B42304: } L_08B42330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42354; } @@ -5643,7 +5647,17 @@ L_08B42364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4237C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -5689,7 +5703,6 @@ L_08B423E0: L_08B423F8: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B42408; } @@ -5723,7 +5736,6 @@ L_08B42424: aot_gpr_16 = (ctx.gpr[19] + static_cast(-1)); ctx.gpr[19] = (aot_gpr_16 | 0u); { const bool branch_taken = static_cast(ctx.gpr[19]) <= 0; - // nop if (branch_taken) { goto L_08B4244C; } @@ -5731,7 +5743,6 @@ L_08B42424: } L_08B42434: { const bool branch_taken = ctx.gpr[18] == aot_gpr_5; - // nop if (branch_taken) { goto L_08B423CC; } @@ -5744,7 +5755,6 @@ L_08B4243C: AOT_REGCACHE_SYNC_OUT(); return; L_08B42444: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B423CC; } @@ -5752,7 +5762,6 @@ L_08B42444: } L_08B4244C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42550; } @@ -5760,7 +5769,6 @@ L_08B4244C: } L_08B42454: aot_gpr_31 = (0x08B4245Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4245Cu) goto L_08B4245C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4245C: @@ -5785,7 +5793,6 @@ L_08B42490: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[21] + static_cast(46))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B424C8; } @@ -5793,14 +5800,12 @@ L_08B42490: } L_08B424A0: aot_gpr_31 = (0x08B424A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0208_entry, 208u, 133u, 0x08B44F70u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B424A8u) goto L_08B424A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B424A8: ctx.gpr[18] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 191u); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B424C0; } @@ -5830,7 +5835,6 @@ L_08B424D0: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(28))); aot_gpr_5 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B424F8; } @@ -5863,7 +5867,6 @@ L_08B424F8: } L_08B42508: { const bool branch_taken = aot_gpr_16 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B42528; } @@ -5893,7 +5896,6 @@ L_08B42528: } L_08B42538: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B42490; } @@ -5906,7 +5908,6 @@ L_08B42540: AOT_REGCACHE_SYNC_OUT(); return; L_08B42548: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B42490; } @@ -5914,7 +5915,6 @@ L_08B42548: } L_08B42550: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B42574; } @@ -5933,7 +5933,6 @@ L_08B42558: } L_08B4256C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4258C; } @@ -5955,7 +5954,6 @@ L_08B4257C: goto L_08B4258C; L_08B4258C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B425CC; } @@ -5966,7 +5964,6 @@ L_08B42594: aot_gpr_6 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B425C4; } @@ -5975,9 +5972,7 @@ L_08B42594: L_08B425A8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B425E8; } @@ -6010,9 +6005,7 @@ L_08B425CC: L_08B425D4: aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B425F0; } @@ -6048,21 +6041,51 @@ L_08B425F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42624: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(ctx.gpr[28] + static_cast(5504), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4262C: jump_target = aot_gpr_31; aot_mem.aot_direct_store8(ctx.gpr[28] + static_cast(5508), static_cast(aot_gpr_4)); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42634: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-15972))); ctx.gpr[2] = (0u | 0u); @@ -6083,7 +6106,6 @@ L_08B4264C: goto L_08B4265C; L_08B4265C: { const bool branch_taken = static_cast(ctx.gpr[7]) < 0; - // nop if (branch_taken) { goto L_08B42674; } @@ -6127,7 +6149,6 @@ L_08B42698: goto L_08B4269C; L_08B4269C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B426B4; } @@ -6136,7 +6157,6 @@ L_08B4269C: L_08B426A4: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B426B4; } @@ -6158,11 +6178,20 @@ L_08B426B4: } L_08B426C8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B426D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_16); @@ -6174,7 +6203,6 @@ L_08B426D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B426E8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B42700; } @@ -6187,7 +6215,6 @@ L_08B426F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B426F8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B42714; } @@ -6218,12 +6245,9 @@ L_08B4271C: { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_5; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (0u | 3u); aot_gpr_5 = (ctx.hi); - // nop - // nop { const std::int32_t dividend = static_cast(ctx.gpr[2]); const std::int32_t divisor = static_cast(aot_gpr_4); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.hi); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B42750; } @@ -6231,7 +6255,6 @@ L_08B4271C: } L_08B42748: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42844; } @@ -6248,9 +6271,7 @@ L_08B42758: goto L_08B42760; L_08B42760: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B42800; } @@ -6259,9 +6280,7 @@ L_08B42760: L_08B42770: aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B42844; } @@ -6272,7 +6291,6 @@ L_08B42784: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16179u << 16u); if (branch_taken) { @@ -6282,9 +6300,7 @@ L_08B42784: } L_08B427A0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B42844; } @@ -6298,7 +6314,6 @@ L_08B427B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B427BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42844; } @@ -6312,7 +6327,6 @@ L_08B427C4: aot_gpr_16 = (aot_gpr_16 + static_cast(384)); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B427EC; @@ -6326,7 +6340,6 @@ L_08B427EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B427F8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42844; } @@ -6334,7 +6347,6 @@ L_08B427F8: } L_08B42800: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15692u << 16u); if (branch_taken) { @@ -6350,7 +6362,6 @@ L_08B42810: aot_gpr_16 = (aot_gpr_16 + static_cast(384)); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B42838; @@ -6370,7 +6381,17 @@ L_08B42844: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42854: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), ctx.gpr[18]); @@ -6413,7 +6434,6 @@ L_08B428C8: } L_08B428D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B429EC; } @@ -6423,7 +6443,6 @@ L_08B428DC: aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(84))); aot_gpr_6 = (aot_mem.aot_direct_load16(ctx.gpr[28] + static_cast(-25492))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B429EC; } @@ -6435,7 +6454,6 @@ L_08B428EC: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B429EC; } @@ -6510,9 +6528,7 @@ L_08B42904: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B429EC; } @@ -6521,9 +6537,7 @@ L_08B42904: L_08B42974: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B429EC; } @@ -6532,9 +6546,7 @@ L_08B42974: L_08B42988: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B429EC; } @@ -6543,9 +6555,7 @@ L_08B42988: L_08B4299C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B429EC; } @@ -6556,7 +6566,6 @@ L_08B429B0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B429CC; @@ -6564,9 +6573,7 @@ L_08B429B0: goto L_08B429CC; L_08B429CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B429EC; } @@ -6581,7 +6588,6 @@ L_08B429DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B429EC: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B428C8; } @@ -6609,7 +6615,17 @@ L_08B429F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42A30: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(533)))))); @@ -6632,12 +6648,10 @@ L_08B42A30: } L_08B42A78: aot_gpr_31 = (0x08B42A80u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B42A80u) goto L_08B42A80; AOT_REGCACHE_SYNC_OUT(); return; L_08B42A80: { const bool branch_taken = aot_gpr_16 == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B42AA0; } @@ -6661,7 +6675,6 @@ L_08B42A98: } L_08B42AA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42D88; } @@ -6669,7 +6682,6 @@ L_08B42AA0: } L_08B42AA8: { const bool branch_taken = aot_gpr_16 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B42B00; } @@ -6696,7 +6708,6 @@ L_08B42ADC: aot_gpr_4 = (16256u << 16u); ctx.fpr[22] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_12 = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6714,7 +6725,6 @@ L_08B42AF8: } L_08B42B00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42D88; } @@ -6732,9 +6742,7 @@ L_08B42B1C: ctx.fpr[24] = aot_fpr_13 + aot_fpr_14; ctx.fpr[24] = std::sqrt(ctx.fpr[24]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B42BF8; } @@ -6769,7 +6777,6 @@ L_08B42B38: aot_fpr_13 = aot_fpr_13 - ctx.fpr[16]; aot_fpr_13 = aot_fpr_13 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); if (branch_taken) { @@ -6786,7 +6793,6 @@ L_08B42BB4: ctx.fpr[15] = std::sqrt(ctx.fpr[15]); aot_gpr_4 = (16128u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[15]) || std::isnan(ctx.fpr[22])) && ctx.fpr[15] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -6798,7 +6804,6 @@ L_08B42BE0: aot_fpr_12 = aot_fpr_13 / ctx.fpr[15]; aot_fpr_14 = aot_fpr_14 / ctx.fpr[15]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42C00; } @@ -6806,7 +6811,6 @@ L_08B42BE0: } L_08B42BF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42D88; } @@ -6814,7 +6818,6 @@ L_08B42BF0: } L_08B42BF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B42D88; } @@ -6830,7 +6833,6 @@ L_08B42C0C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(24))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_16 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); if (branch_taken) { @@ -6863,7 +6865,6 @@ L_08B42C34: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B42C80; @@ -6887,7 +6888,6 @@ L_08B42C80: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B42CC8; @@ -6928,7 +6928,6 @@ L_08B42D18: L_08B42D2C: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[28])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[24]; const float ft = ctx.fpr[26]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[28] = std::bit_cast(0x7FC00000u); else ctx.fpr[28] = fs * ft; } if (branch_taken) { @@ -6953,7 +6952,6 @@ L_08B42D4C: L_08B42D58: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B42D6C; @@ -6961,9 +6959,7 @@ L_08B42D58: goto L_08B42D6C; L_08B42D6C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B42D88; } @@ -6996,7 +6992,17 @@ L_08B42D88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B42DB8: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(244), aot_gpr_16); @@ -7050,7 +7056,6 @@ L_08B42E60: aot_gpr_5 = (0u < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B43084; } @@ -7059,7 +7064,6 @@ L_08B42E60: L_08B42E78: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(216))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B43084; } @@ -7134,9 +7138,7 @@ L_08B42E84: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43084; } @@ -7208,9 +7210,7 @@ L_08B42EF4: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43084; } @@ -7282,9 +7282,7 @@ L_08B42F58: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43084; } @@ -7356,7 +7354,6 @@ L_08B42FBC: aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(52))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (aot_gpr_4 + static_cast(48)); if (branch_taken) { @@ -7369,7 +7366,6 @@ L_08B43020: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B4303C; @@ -7377,9 +7373,7 @@ L_08B43020: goto L_08B4303C; L_08B4303C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43084; } @@ -7387,7 +7381,6 @@ L_08B4303C: } L_08B4304C: { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B43084; } @@ -7397,7 +7390,6 @@ L_08B43054: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(616)))))); aot_gpr_5 = (aot_gpr_5 & 128u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B43074; } @@ -7407,7 +7399,6 @@ L_08B43064: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(616)))))); aot_gpr_5 = (aot_gpr_5 & 128u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B43084; } @@ -7421,7 +7412,6 @@ L_08B43074: goto L_08B42A30; L_08B43084: { const bool branch_taken = aot_gpr_16 != 0u; - // nop if (branch_taken) { goto L_08B42E4C; } @@ -7452,7 +7442,17 @@ L_08B4308C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B430D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), ctx.gpr[20]); @@ -7504,7 +7504,6 @@ L_08B43174: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B43368; } @@ -7512,7 +7511,6 @@ L_08B43174: } L_08B4318C: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B43368; } @@ -7524,9 +7522,7 @@ L_08B43194: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43368; } @@ -7535,9 +7531,7 @@ L_08B43194: L_08B431B4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43368; } @@ -7547,9 +7541,7 @@ L_08B431C8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(4))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43368; } @@ -7558,9 +7550,7 @@ L_08B431C8: L_08B431E0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43368; } @@ -7571,7 +7561,6 @@ L_08B431F4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[23] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B43210; @@ -7581,9 +7570,7 @@ L_08B43210: aot_gpr_4 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43368; } @@ -7592,7 +7579,6 @@ L_08B43210: L_08B43228: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(1328))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B43368; } @@ -7601,7 +7587,6 @@ L_08B43228: L_08B43234: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(2120))); { const bool branch_taken = aot_gpr_4 == aot_gpr_16; - // nop if (branch_taken) { goto L_08B43368; } @@ -7616,12 +7601,10 @@ L_08B43240: goto L_08B4324C; L_08B4324C: aot_gpr_31 = (0x08B43254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B43254u) goto L_08B43254; AOT_REGCACHE_SYNC_OUT(); return; L_08B43254: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B43368; } @@ -7644,7 +7627,6 @@ L_08B43260: L_08B43280: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7685,7 +7667,6 @@ L_08B432F4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B4330C; @@ -7694,7 +7675,6 @@ L_08B432F4: L_08B4330C: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); { const float fs = ctx.fpr[22]; const float ft = ctx.fpr[28]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_20 = std::bit_cast(0x7FC00000u); else aot_fpr_20 = fs * ft; } if (branch_taken) { @@ -7719,7 +7699,6 @@ L_08B4332C: L_08B43338: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B4334C; @@ -7727,9 +7706,7 @@ L_08B43338: goto L_08B4334C; L_08B4334C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43368; } @@ -7745,7 +7722,6 @@ L_08B43364: goto L_08B43368; L_08B43368: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B43160; } @@ -7776,7 +7752,17 @@ L_08B43370: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B433B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); @@ -7828,7 +7814,6 @@ L_08B43450: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(10))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B434AC; } @@ -7863,7 +7848,6 @@ L_08B434AC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B43508; } @@ -7898,7 +7882,6 @@ L_08B43508: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(14))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4356C; } @@ -7935,7 +7918,6 @@ L_08B4356C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(16))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B435C8; } @@ -7970,7 +7952,6 @@ L_08B435C8: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(22))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -7980,7 +7961,6 @@ L_08B435DC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(24))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -7990,7 +7970,6 @@ L_08B435EC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(26))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8000,7 +7979,6 @@ L_08B435FC: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(28))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8010,7 +7988,6 @@ L_08B4360C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(210))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8020,7 +7997,6 @@ L_08B4361C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(212))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8030,7 +8006,6 @@ L_08B4362C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(214))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8040,7 +8015,6 @@ L_08B4363C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(216))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8050,7 +8024,6 @@ L_08B4364C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(218))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8060,7 +8033,6 @@ L_08B4365C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(220))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8070,7 +8042,6 @@ L_08B4366C: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(104))); aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(222))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4368C; } @@ -8096,7 +8067,6 @@ L_08B4368C: } L_08B43694: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B436DC; } @@ -8126,7 +8096,6 @@ L_08B4369C: } L_08B436DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B43838; } @@ -8174,7 +8143,6 @@ L_08B436E4: L_08B43748: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8214,7 +8182,6 @@ L_08B437B0: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = ctx.fpr[24]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B437D0; @@ -8224,7 +8191,6 @@ L_08B437D0: ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13)); { const float fs = ctx.fpr[24]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), std::bit_cast(aot_fpr_13)); if (branch_taken) { @@ -8250,7 +8216,6 @@ L_08B437F8: L_08B43804: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B43818; @@ -8259,9 +8224,7 @@ L_08B43804: L_08B43818: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(48))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43838; } @@ -8294,7 +8257,17 @@ L_08B43838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B43868: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), ctx.gpr[19]); @@ -8344,7 +8317,6 @@ L_08B438F0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B439AC; } @@ -8356,9 +8328,7 @@ L_08B43908: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B439AC; } @@ -8366,9 +8336,7 @@ L_08B43908: } L_08B43928: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B439AC; } @@ -8377,9 +8345,7 @@ L_08B43928: L_08B43938: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B439AC; } @@ -8387,9 +8353,7 @@ L_08B43938: } L_08B4394C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B439AC; } @@ -8400,7 +8364,6 @@ L_08B4395C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B43978; @@ -8408,9 +8371,7 @@ L_08B4395C: goto L_08B43978; L_08B43978: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B439AC; } @@ -8419,9 +8380,7 @@ L_08B43978: L_08B43988: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(40))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B439AC; } @@ -8435,7 +8394,6 @@ L_08B4399C: goto L_08B433B8; L_08B439AC: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B438DC; } @@ -8462,7 +8420,17 @@ L_08B439B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B439EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-16928))); @@ -8522,9 +8490,7 @@ L_08B439EC: aot_fpr_13 = std::sqrt(aot_fpr_13); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(aot_fpr_12)) && aot_fpr_13 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43B74; } @@ -8540,9 +8506,7 @@ L_08B43AE0: aot_fpr_12 = ctx.fpr[19] + ctx.fpr[0]; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[2])) && aot_fpr_12 == ctx.fpr[2])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43B6C; } @@ -8558,9 +8522,7 @@ L_08B43B10: { const float fs = aot_fpr_12; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fpr[16] = aot_fpr_12 - ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] <= ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43B64; } @@ -8571,9 +8533,7 @@ L_08B43B40: aot_gpr_4 = (aot_gpr_4 | 7864u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43B7C; } @@ -8620,7 +8580,17 @@ L_08B43B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B43B88: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(ctx.fpr[22])); @@ -8637,7 +8607,6 @@ L_08B43BAC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B43BC4; @@ -8646,7 +8615,6 @@ L_08B43BAC: L_08B43BC4: aot_fpr_12 = aot_fpr_12 - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B43BD8; @@ -8683,12 +8651,21 @@ L_08B43C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B43C18: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(86)))))); aot_gpr_5 = (0u | 234u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B43C38; } @@ -8710,11 +8687,20 @@ L_08B43C38: goto L_08B43C40; L_08B43C40: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B43C48: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store8(ctx.gpr[9] + static_cast(0), static_cast(0u)); @@ -8754,7 +8740,6 @@ L_08B43CD8: ctx.fpr[22] = ctx.fpr[22] / aot_fpr_12; aot_fpr_20 = aot_fpr_20 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B43CF0; } @@ -8775,7 +8760,6 @@ L_08B43CF0: L_08B43D04: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8799,7 +8783,6 @@ L_08B43D24: L_08B43D38: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8816,7 +8799,6 @@ L_08B43D58: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(532)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B43D80; } @@ -8855,9 +8837,7 @@ L_08B43D88: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5304))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43DE4; } @@ -8867,7 +8847,6 @@ L_08B43DB4: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5308))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_08B43DCC; @@ -8875,9 +8854,7 @@ L_08B43DB4: goto L_08B43DCC; L_08B43DCC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43DE4; } @@ -8895,9 +8872,7 @@ L_08B43DEC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43E08; } @@ -8908,9 +8883,7 @@ L_08B43E04: goto L_08B43E08; L_08B43E08: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43E1C; } @@ -8930,7 +8903,6 @@ L_08B43E1C: L_08B43E30: ctx.fpr[28] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8988,7 +8960,6 @@ L_08B43E64: aot_fpr_12 = aot_fpr_12 - ctx.fpr[22]; aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(0), std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(0), std::bit_cast(ctx.fpr[24])); goto L_08B43F00; @@ -8997,9 +8968,7 @@ L_08B43E64: L_08B43EB8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5312))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B43EF0; } @@ -9010,7 +8979,6 @@ L_08B43ECC: aot_fpr_12 = aot_fpr_12 / aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5324))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5324))); goto L_08B43EE8; @@ -9040,7 +9008,6 @@ L_08B43F00: ctx.fpr[24] = ctx.fpr[24] / aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5328))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5328))); goto L_08B43F20; @@ -9073,7 +9040,17 @@ L_08B43F24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B43F68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.fpr[18] = std::bit_cast(std::bit_cast(ctx.fpr[15])); @@ -9094,7 +9071,6 @@ L_08B43F68: aot_gpr_5 = (ctx.gpr[9] | 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[18])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (ctx.gpr[8] | 0u); if (branch_taken) { diff --git a/profiles/vcs/generated/generated_unit_0208.cpp b/profiles/vcs/generated/generated_unit_0208.cpp index 75cf06c..ca173bc 100644 --- a/profiles/vcs/generated/generated_unit_0208.cpp +++ b/profiles/vcs/generated/generated_unit_0208.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0208[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 5, 0, - 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 17, 0, 18, 0, 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 31, 32, 0, 0, 33, 0, 0, 0, 34, 0, 35, 0, 0, 0, 36, 0, 0, 0, 0, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, - 0, 44, 0, 0, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 0, 0, 0, 52, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 66, - 0, 67, 0, 0, 0, 0, 68, 69, 0, 0, 0, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 77, 0, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 83, 0, 84, 0, 0, 0, 85, 0, 86, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 94, 0, 95, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 103, - 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 107, 0, 108, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 115, 116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 123, 0, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 0, 0, 129, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, - 0, 0, 134, 0, 135, 0, 136, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 138, 0, 139, 0, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, - 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, 0, 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, - 0, 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, - 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, - 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 0, 0, 0, 192, 0, 0, - 0, 0, 0, 0, 0, 193, 0, 194, 195, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 198, 0, 199, 0, 200, 0, - 201, 202, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 206, 0, 0, 0, 207, 0, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, - 212, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 217, 0, - 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, - 234, 0, 0, 0, 235, 0, 0, 236, 0, 237, 0, 0, 238, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 240, 0, 0, 0, 241, 0, 242, 0, - 243, 0, 244, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 0, 253, 0, 0, 254, 0, 0, - 0, 0, 255, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 260, 0, 0, 261, 0, 0, 0, - 0, 0, 262, 0, 0, 0, 263, 0, 264, 0, 265, 0, 266, 0, 267, 0, 0, 0, 0, 0, 268, 0, 269, 0, 270, 0, 271, 0, 272, 0, 273, 0, - 274, 0, 0, 0, 0, 275, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 0, 279, 0, 280, 0, 0, 281, - 0, 0, 0, 282, 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, 285, 0, 286, 0, 287, 0, 288, 289, 0, 0, 0, 0, 0, 0, 0, 290, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 295, 0, 0, 296, 0, 297, 0, - 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 301, 0, 0, 0, 302, 0, 303, 0, 304, - 0, 305, 0, 306, 0, 0, 0, 307, 0, 308, 0, 309, 0, 0, 310, 0, 311, 0, 0, 0, 0, 0, 0, 312, 0, 313, 0, 314, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, 321, 0, 0, 0, 322, 0, 0, 0, 323, 0, 0, 0, - 324, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, 0, 330, - 0, 0, 0, 331, 0, 0, 332, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 335, 0, 336, 0, 337, 0, 0, 0, 338, 0, 0, 339, 340, 0, - 0, 341, 0, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 345, 0, 346, 347, 0, 348, 0, 0, 0, 0, 0, 349, 0, 0, - 0, 350, 0, 351, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, 0, 0, 0, 356, 357, 0, 0, 0, 0, 358, 0, 0, 0, 359, - 360, 0, 361, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 366, 0, 367, 368, 0, 0, 0, 0, 0, 369, 0, 370, 0, 371, 0, 372, 0, 373, 0, 374, 0, 375, 0, 0, 376, 0, 377, 0, 0, 0, 0, 0, - 0, 378, 0, 379, 0, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 382, 0, 0, 0, 383, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 385, - 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 389, 0, 390, 0, 0, 0, 391, 0, 392, 0, - 393, 0, 0, 394, 0, 395, 0, 396, 0, 397, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 400, 0, 401, 0, 0, 402, 0, 0, 403, 0, 404, 0, - 0, 0, 0, 405, 0, 0, 0, 406, 0, 0, 407, 0, 0, 408, 0, 409, 410, 0, 411, 0, 412, 0, 413, 0, 414, 0, 415, 0, 0, 416, 0, 417, - 0, 0, 0, 0, 0, 0, 418, 0, 419, 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, 0, 0, 425, 0, 426, 0, 0, 0, 0, 0, - 0, 427, 0, 428, 0, 0, 0, 0, 429, 0, 0, 430, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 432, 0, 433, 0, 434, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 438, 0, 439, 0, 0, 0, 0, 0, 0, 440, - 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 446, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 453, 0, 0, 454, - 0, 455, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 462, - 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 467, 0, 468, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 469, 0, 470, 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, - 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 478, 0, 0, 0, 0, 479, 0, 480, 0, 481, 0, 0, 0, 0, 0, 482, 0, 0, - 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 486, 0, 0, 0, 0, 487, - 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 489, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 493, 0, - 0, 0, 0, 0, 0, 0, 494, 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 499, 0, 0, 0, 0, 500, 0, 0, - 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 503, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 511, 0, 512, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 514, 0, - 515, 0, 0, 516, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 520, 0, 521, 0, 0, 0, 522, 0, 523, - 0, 0, 0, 524, 0, 525, 0, 526, 0, 0, 0, 0, 527, 0, 528, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 532, 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, - 0, 0, 0, 541, 0, 0, 542, 0, 0, 543, 0, 0, 544, 0, 545, 0, 546, 0, 547, 0, 0, 0, 548, 0, 0, 549, 0, 0, 0, 0, 0, 550, - 0, 0, 0, 0, 551, 0, 552, 0, 553, 0, 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 558, 0, 559, 0, - 0, 560, 0, 0, 0, 0, 0, 561, 0, 562, 0, 563, 0, 564, 0, 0, 565, 0, 0, 566, 0, 0, 0, 0, 567, 0, 0, 0, 568, 0, 569, 0, - 570, 0, 571, 0, 0, 0, 572, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 575, 0, 576, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 579, 0, 580, 0, 581, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 584, 0, - 0, 0, 0, 585, 0, 0, 586, 0, 587, 0, 588, 0, 589, 0, 590, 0, 0, 591, 0, 0, 0, 592, 0, 593, 0, 594, 0, 595, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 598, 0, 0, 599, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 601, 0, 0, 602, 0, 603, 0, 604, 0, 605, 0, 0, 606, 607, 0, 608, 0, 609, 0, 610, 0, 611, 612, 0, 613, 0, 614, 0, 0, 0, 615, 0, - 0, 616, 0, 0, 617, 618, 0, 0, 619, 0, 0, 0, 620, 0, 0, 0, 621, 0, 622, 0, 623, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 625, 0, 626, 0, 0, 0, 627, 0, 628, 0, 0, 629, 0, 0, 630, 0, 631, 0, 632, 0, 0, 633, 634, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 637, 0, 638, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 644, 0, 645, 0, 0, 0, - 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 649, 0, 650, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 652, 0, 653, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, - 0, 0, 0, 0, 0, 0, 656, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 659, 0, 0, 0, 0, 0, 660, 0, 661, 0, 0, - 0, 0, 0, 0, 0, 662, 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 665, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, - 671, 0, 672, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 678, 0, 0, 679, 0, 680, 0, 681, 0, 0, 0, 0, 682, 0, 683, 0, 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, - 0, 0, 687, 0, 688, 0, 689, 0, 0, 690, 0, 0, 0, 0, 691, 0, 692, 0, 693, 0, 694, 0, 0, 0, 0, 695, 0, 696, 697, 0, 698, 0, - 0, 699, 0, 0, 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, 705, 0, 706, 0, 707, 0, 0, 0, 708, 0, 709, 0, 0, 0, 710, 0, 711, - 0, 712, 0, 0, 0, 713, 0, 0, 714, 0, 0, 715, 716, 0, 0, 717, 0, 0, 0, 718, 0, 0, 0, 719, 0, 720, 0, 721, 0, 0, 722, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 724, 0, 0, 0, 725, 0, 726, 0, 0, 727, 0, 0, 728, 0, 0, 729, 0, 0, - 730, 0, 731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 733, 0, 0, 0, 734, 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 741, 0, 742, 0, - 0, 0, 743, 0, 0, 0, 744, 0, 0, 0, 745, 0, 0, 746, 0, 0, 747, 0, 0, 748, 749, 0, 0, 750, 0, 0, 751, 0, 752, 0, 0, 0, - 753, 0, 0, 0, 754, 0, 0, 0, 755, 0, 0, 756, 0, 0, 757, 0, 0, 758, 0, 759, 0, 760, 0, 0, 761, 762, 0, 763, 0, 0, 0, 764, - 0, 0, 0, 765, 0, 0, 0, 766, 0, 0, 767, 0, 0, 768, 0, 0, 769, 0, 770, 0, 771, 0, 0, 772, 773, 0, 774, 0, 0, 0, 775, 0, - 0, 0, 776, 0, 0, 0, 777, 0, 0, 778, 0, 0, 779, 0, 0, 780, 0, 781, 0, 782, 0, 0, 783, 784, 0, 785, 0, 0, 0, 786, 0, 0, - 0, 787, 0, 0, 0, 788, 0, 0, 789, 0, 0, 790, 0, 0, 791, 0, 792, 0, 793, 0, 0, 794, 795, 0, 796, 0, 0, 797, 0, 0, 798, 0, - 0, 0, 799, 800, 0, 0, 801, 0, 0, 802, 803, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 805, 0, 806, 807, 0, 808, 0, 809, 0, 810, 811, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 813, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 814, 0, 815, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 817, 0, 0, 818, 0, 0, 0, 0, - 0, 819, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, - 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 824, 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, 826, 0, - 0, 0, 827, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 830, 0, 0, - 0, 0, 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 0, 0, 834, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0208[64] = { + 0x0000004148800201ull, 0x002A851004004924ull, 0x08A2620015558004ull, 0x0000010010800002ull, + 0x0000009211000020ull, 0x400140A810044810ull, 0x9092105100000000ull, 0x14014401000018C2ull, + 0x4000010000020004ull, 0x290910402828A200ull, 0x8204140108020000ull, 0x00015280008000A0ull, + 0x0080020064000108ull, 0x0000000010000440ull, 0x00001000800D0800ull, 0x554A405412008019ull, + 0xAAAAAAAA02155555ull, 0x21552001AA810AAAull, 0x00210023550021A0ull, 0x4101082104040A22ull, + 0x048AAAA4000848A0ull, 0x24AAA81551041291ull, 0x5550554412812204ull, 0x406A8248940A00A1ull, + 0xA8A0042052814800ull, 0x010014000A814A8Aull, 0xA005021111150010ull, 0x20B4801A64550448ull, + 0x00026085886050AAull, 0x8411210A052AAA0Dull, 0x525282A95150000Aull, 0x02100940A555A488ull, + 0x0A84090A05200200ull, 0x41000802814A0800ull, 0x9042210000414200ull, 0x01500540A802A00Aull, + 0x20A84802202A0150ull, 0x8480000000000804ull, 0x2142224044808480ull, 0x0000884008002442ull, + 0x410A200000002000ull, 0x080550A8A2804A09ull, 0x0000002008020120ull, 0x8245524880102100ull, + 0x51092A8254028950ull, 0xAA00040005800145ull, 0x0AA2554848001000ull, 0x0000148001000200ull, + 0x00951132456AB2A9ull, 0x009500200CA928A0ull, 0x2820400814802810ull, 0x2824014040081480ull, + 0x40022000441200A0ull, 0x0000002800180025ull, 0x5A1542544802A152ull, 0x4A889922A28AAAA2ull, + 0x0018900524945000ull, 0x5010200000880001ull, 0x8B2A491114992444ull, 0x22CA924445952488ull, + 0xD5A4064C49654922ull, 0x0920280004200000ull, 0x480A000108000022ull, 0x1008400421000204ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0208[64] = { + 1u, 8u, 21u, 37u, 41u, 47u, 58u, 67u, 78u, 82u, 96u, 104u, 112u, 119u, 122u, 128u, + 145u, 173u, 193u, 206u, 218u, 234u, 255u, 274u, 291u, 305u, 318u, 331u, 350u, 366u, 386u, 405u, + 423u, 435u, 445u, 455u, 469u, 483u, 488u, 501u, 509u, 515u, 532u, 537u, 551u, 570u, 582u, 596u, + 601u, 625u, 640u, 651u, 662u, 671u, 678u, 699u, 723u, 736u, 743u, 765u, 787u, 812u, 819u, 827u, }; void recomp_unit_0208_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0208_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B44000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0208[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0208[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0208[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B44000; @@ -1029,9 +936,7 @@ L_08B44024: { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44080; } @@ -1041,7 +946,6 @@ L_08B4405C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); aot_gpr_5 = (0u | 18u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B44078; } @@ -1073,7 +977,17 @@ L_08B44080: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B44098: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.fpr[16] = std::bit_cast(0u); @@ -1100,7 +1014,6 @@ L_08B44098: aot_fpr_20 = std::bit_cast(aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_31); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (0u | 19u); if (branch_taken) { @@ -1111,7 +1024,6 @@ L_08B44098: L_08B44108: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B44120; } @@ -1138,7 +1050,6 @@ L_08B44120: L_08B4412C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(533)))))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B441BC; } @@ -1154,9 +1065,7 @@ L_08B44138: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B442EC; } @@ -1170,9 +1079,7 @@ L_08B44168: ctx.fpr[16] = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B442EC; } @@ -1182,7 +1089,6 @@ L_08B44190: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B442EC; } @@ -1206,12 +1112,10 @@ L_08B441A8: } L_08B441BC: aot_gpr_31 = (0x08B441C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B441C4u) goto L_08B441C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B441C4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4423C; } @@ -1219,7 +1123,6 @@ L_08B441C4: } L_08B441CC: aot_gpr_31 = (0x08B441D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B441D4u) goto L_08B441D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B441D4: @@ -1241,9 +1144,7 @@ L_08B441D4: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4423C; } @@ -1273,7 +1174,6 @@ L_08B4423C: goto L_08B44240; L_08B44240: aot_gpr_31 = (0x08B44248u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B44248u) goto L_08B44248; AOT_REGCACHE_SYNC_OUT(); return; L_08B44248: @@ -1284,7 +1184,6 @@ L_08B44248: goto L_08B44250; L_08B44250: aot_gpr_31 = (0x08B44258u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B44258u) goto L_08B44258; AOT_REGCACHE_SYNC_OUT(); return; L_08B44258: @@ -1300,7 +1199,6 @@ L_08B44260: goto L_08B44268; L_08B44268: aot_gpr_31 = (0x08B44270u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B44270u) goto L_08B44270; AOT_REGCACHE_SYNC_OUT(); return; L_08B44270: @@ -1322,9 +1220,7 @@ L_08B44270: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B442EC; } @@ -1334,7 +1230,6 @@ L_08B442A4: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(664))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2501 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B442EC; } @@ -1346,7 +1241,6 @@ L_08B442B4: L_08B442B8: aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B442EC; } @@ -1354,9 +1248,7 @@ L_08B442B8: } L_08B442C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_22 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B442EC; } @@ -1386,7 +1278,17 @@ L_08B442EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B44304: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); { const std::uint32_t aot_run_words[12]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -1399,7 +1301,6 @@ L_08B44304: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), std::bit_cast(aot_fpr_20)); aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(0), static_cast(0u)); aot_gpr_31 = (0x08B4435Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4435Cu) goto L_08B4435C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4435C: @@ -1418,7 +1319,6 @@ L_08B4435C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08B44370u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 34u, 0x08960350u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B44370u) goto L_08B44370; AOT_REGCACHE_SYNC_OUT(); return; L_08B44370: @@ -1593,7 +1493,6 @@ L_08B44414: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_20)) && aot_fpr_12 == aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); goto L_08B44470; @@ -1608,9 +1507,7 @@ L_08B44460: L_08B44470: ctx.fpr[24] = ctx.fpr[24] / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44490; } @@ -1725,9 +1622,7 @@ L_08B4449C: { const float fs = aot_fpr_12; const float ft = ctx.fpr[24]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[24] = std::bit_cast(0x7FC00000u); else ctx.fpr[24] = fs * ft; } ctx.fpr[24] = aot_fpr_13 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44538; } @@ -1738,7 +1633,6 @@ L_08B44510: aot_gpr_4 = (16256u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_22)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_22 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B4452C; @@ -1755,7 +1649,6 @@ L_08B4452C: } L_08B44538: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (48588u << 16u); if (branch_taken) { @@ -1771,7 +1664,6 @@ L_08B44548: aot_gpr_4 = (16256u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); goto L_08B44570; @@ -1782,7 +1674,6 @@ L_08B44570: aot_gpr_4 = (aot_gpr_4 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(0), std::bit_cast(aot_fpr_12)); if (branch_taken) { @@ -1796,7 +1687,6 @@ L_08B4458C: goto L_08B44594; L_08B44594: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B445C0; } @@ -1807,7 +1697,6 @@ L_08B4459C: aot_gpr_4 = (49024u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B445B8; @@ -1838,7 +1727,17 @@ L_08B445C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B445F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); ctx.gpr[8] = (aot_gpr_4 + static_cast(16)); @@ -1864,7 +1763,6 @@ L_08B445F8: ctx.gpr[18] = (aot_gpr_6 | 0u); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[14])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_13) || std::isnan(ctx.fpr[24])) && aot_fpr_13 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (ctx.gpr[7] | 0u); if (branch_taken) { @@ -1876,7 +1774,6 @@ L_08B44680: aot_fpr_20 = aot_fpr_20 / aot_fpr_13; aot_fpr_22 = aot_fpr_22 / aot_fpr_13; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B44698; } @@ -1898,7 +1795,6 @@ L_08B44698: L_08B446B0: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1920,7 +1816,6 @@ L_08B446D0: L_08B446DC: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -1941,9 +1836,7 @@ L_08B446FC: L_08B44704: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4471C; } @@ -1954,9 +1847,7 @@ L_08B44718: goto L_08B4471C; L_08B4471C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44730; } @@ -2002,7 +1893,6 @@ L_08B44730: ctx.fpr[15] = static_cast(static_cast(std::bit_cast(ctx.fpr[15]))); aot_fpr_13 = ctx.fpr[15] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(535)))))); goto L_08B447C0; @@ -2016,9 +1906,7 @@ L_08B44780: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(0), std::bit_cast(ctx.fpr[14])); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B447B8; } @@ -2046,7 +1934,6 @@ L_08B447C0: aot_gpr_5 = (16256u << 16u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[14] <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2092,7 +1979,17 @@ L_08B44808: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B44844: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[14]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[30]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], aot_gpr_31}; @@ -2154,7 +2051,6 @@ L_08B448A0: aot_gpr_4 = (17008u << 16u); ctx.fpr[28] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_20 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B448F8; @@ -2169,9 +2065,7 @@ L_08B448F8: aot_fpr_12 = aot_fpr_12 + aot_fpr_13; aot_fpr_12 = std::sqrt(aot_fpr_12); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[26])) && aot_fpr_12 == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44934; } @@ -2181,7 +2075,6 @@ L_08B44924: ctx.fpr[24] = ctx.fpr[24] / aot_fpr_12; aot_fpr_22 = aot_fpr_22 / aot_fpr_12; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4493C; } @@ -2233,7 +2126,6 @@ L_08B44998: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_22 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[24] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); if (branch_taken) { @@ -2256,7 +2148,6 @@ L_08B449C0: L_08B449CC: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -2311,7 +2202,6 @@ L_08B449F4: aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fpr[28] = aot_fpr_13 - ctx.fpr[28]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(535)))))); goto L_08B44A80; @@ -2325,9 +2215,7 @@ L_08B44A44: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(0), std::bit_cast(aot_fpr_12)); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44AC8; } @@ -2352,7 +2240,6 @@ L_08B44A80: aot_gpr_5 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[28] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -2383,7 +2270,6 @@ L_08B44AC8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 219u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B44B1C; } @@ -2393,7 +2279,6 @@ L_08B44AE4: aot_gpr_4 = (16928u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15897u << 16u); if (branch_taken) { @@ -2405,9 +2290,7 @@ L_08B44AFC: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44B1C; } @@ -2441,7 +2324,17 @@ L_08B44B1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B44B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(560))); @@ -2534,7 +2427,6 @@ L_08B44C20: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B44C74; } @@ -2737,9 +2629,7 @@ L_08B44D70: L_08B44E2C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B44E48; } @@ -2803,7 +2693,6 @@ L_08B44EB0: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B44F0C; } @@ -2839,7 +2728,17 @@ L_08B44F10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B44F3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (2280u << 16u); @@ -2860,13 +2759,22 @@ L_08B44F64: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B44F70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(0), aot_run_words); } aot_gpr_31 = (0x08B44F88u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B44F88u) goto L_08B44F88; AOT_REGCACHE_SYNC_OUT(); return; L_08B44F88: @@ -2876,7 +2784,6 @@ L_08B44F88: AOT_REGCACHE_SYNC_OUT(); return; L_08B44F90: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45010; } @@ -2890,7 +2797,6 @@ L_08B44F98: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45010; } @@ -2904,7 +2810,6 @@ L_08B44FB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B44FC4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45010; } @@ -2921,7 +2826,6 @@ L_08B44FCC: } L_08B44FD8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45010; } @@ -2934,7 +2838,6 @@ L_08B44FE0: AOT_REGCACHE_SYNC_OUT(); return; L_08B44FE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45000; } @@ -2947,7 +2850,6 @@ L_08B44FF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B44FF8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45008; } @@ -2955,7 +2857,6 @@ L_08B44FF8: } L_08B45000: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45010; } @@ -2971,7 +2872,6 @@ L_08B45008: } L_08B45010: aot_gpr_31 = (0x08B45018u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B45018u) goto L_08B45018; AOT_REGCACHE_SYNC_OUT(); return; L_08B45018: @@ -2994,7 +2894,6 @@ L_08B45028: AOT_REGCACHE_SYNC_OUT(); return; L_08B45030: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45094; } @@ -3007,7 +2906,6 @@ L_08B45038: AOT_REGCACHE_SYNC_OUT(); return; L_08B45040: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45094; } @@ -3015,7 +2913,6 @@ L_08B45040: } L_08B45048: aot_gpr_31 = (0x08B45050u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B45050u) goto L_08B45050; AOT_REGCACHE_SYNC_OUT(); return; L_08B45050: @@ -3034,7 +2931,6 @@ L_08B45064: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4508C; } @@ -3058,7 +2954,6 @@ L_08B4508C: } L_08B45094: aot_gpr_31 = (0x08B4509Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4509Cu) goto L_08B4509C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4509C: @@ -3081,7 +2976,6 @@ L_08B450AC: AOT_REGCACHE_SYNC_OUT(); return; L_08B450B4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B450CC; } @@ -3094,7 +2988,6 @@ L_08B450BC: AOT_REGCACHE_SYNC_OUT(); return; L_08B450C4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B450EC; } @@ -3102,7 +2995,6 @@ L_08B450C4: } L_08B450CC: aot_gpr_31 = (0x08B450D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B450D4u) goto L_08B450D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B450D4: @@ -3171,7 +3063,6 @@ L_08B4511C: goto L_08B45124; L_08B45124: aot_gpr_31 = (0x08B4512Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4512Cu) goto L_08B4512C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4512C: @@ -3205,7 +3096,6 @@ L_08B4515C: } L_08B45164: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45174; } @@ -3243,7 +3133,6 @@ L_08B45180: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4521C; } @@ -3257,7 +3146,6 @@ L_08B451B4: AOT_REGCACHE_SYNC_OUT(); return; L_08B451C0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4521C; } @@ -3270,7 +3158,6 @@ L_08B451C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B451D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4521C; } @@ -3278,7 +3165,6 @@ L_08B451D0: } L_08B451D8: aot_gpr_31 = (0x08B451E0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B451E0u) goto L_08B451E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B451E0: @@ -3297,7 +3183,6 @@ L_08B451F4: aot_gpr_4 = (aot_gpr_4 | 0u); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4521C; } @@ -3326,7 +3211,17 @@ L_08B45220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B45234: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_4 << 5u); @@ -3343,7 +3238,6 @@ L_08B45234: AOT_REGCACHE_SYNC_OUT(); return; L_08B45260: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45278; } @@ -3356,7 +3250,6 @@ L_08B45268: AOT_REGCACHE_SYNC_OUT(); return; L_08B45270: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45280; } @@ -3381,7 +3274,17 @@ L_08B45284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B45294: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3422,7 +3325,6 @@ L_08B45304: aot_gpr_6 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(2))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B4532C; } @@ -3440,7 +3342,6 @@ L_08B45314: } L_08B45324: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4532C; } @@ -3460,7 +3361,17 @@ L_08B4532C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B45348: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), aot_gpr_16); @@ -3493,7 +3404,6 @@ L_08B45394: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fpr[15] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16457u << 16u); if (branch_taken) { @@ -3532,14 +3442,23 @@ L_08B453E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B453F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(80), aot_run_words); } { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B454BC; } @@ -3547,14 +3466,12 @@ L_08B453F8: } L_08B45414: aot_gpr_31 = (0x08B4541Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_compact_generated_leaf<&vcs_compact_leaf_08960424, 87u, 0x08960424u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4541Cu) goto L_08B4541C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4541C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(2320))); aot_gpr_4 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B454B4; } @@ -3563,7 +3480,6 @@ L_08B4541C: L_08B4542C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B454AC; } @@ -3574,7 +3490,6 @@ L_08B45438: aot_gpr_4 = (aot_gpr_4 + static_cast(32304)); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2052))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B454A4; } @@ -3598,7 +3513,6 @@ L_08B4544C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4549C; } @@ -3613,7 +3527,6 @@ L_08B45488: goto L_08B45494; L_08B45494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B455DC; } @@ -3621,7 +3534,6 @@ L_08B45494: } L_08B4549C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3629,7 +3541,6 @@ L_08B4549C: } L_08B454A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3637,7 +3548,6 @@ L_08B454A4: } L_08B454AC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3645,7 +3555,6 @@ L_08B454AC: } L_08B454B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3653,7 +3562,6 @@ L_08B454B4: } L_08B454BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3661,7 +3569,6 @@ L_08B454BC: } L_08B454C4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B455DC; } @@ -3677,7 +3584,6 @@ L_08B454CC: L_08B454DC: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B455C4; } @@ -3702,7 +3608,6 @@ L_08B45500: L_08B45510: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B455BC; } @@ -3716,7 +3621,6 @@ L_08B4551C: L_08B45524: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B455BC; } @@ -3728,7 +3632,6 @@ L_08B45530: aot_gpr_4 = (aot_gpr_4 + static_cast(30000)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B455BC; } @@ -3757,7 +3660,6 @@ L_08B45570: AOT_REGCACHE_SYNC_OUT(); return; L_08B45578: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B455BC; } @@ -3770,7 +3672,6 @@ L_08B45580: AOT_REGCACHE_SYNC_OUT(); return; L_08B45588: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B455BC; } @@ -3799,7 +3700,6 @@ L_08B45590: AOT_REGCACHE_SYNC_OUT(); return; L_08B455AC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B455BC; } @@ -3811,7 +3711,6 @@ L_08B455B4: goto L_08B455BC; L_08B455BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B455DC; } @@ -3824,7 +3723,6 @@ L_08B455C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B455CC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B455DC; } @@ -3838,7 +3736,6 @@ L_08B455D4: L_08B455DC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5456))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3847,7 +3744,6 @@ L_08B455DC: L_08B455E8: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4181))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -3858,7 +3754,6 @@ L_08B455F4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(14864))); aot_gpr_4 = (aot_gpr_4 < static_cast(3) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B456E8; } @@ -3884,7 +3779,6 @@ L_08B45624: L_08B45634: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B456E0; } @@ -3897,7 +3791,6 @@ L_08B45640: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B456E0; } @@ -3911,7 +3804,6 @@ L_08B4565C: L_08B45664: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B456E0; } @@ -3940,7 +3832,6 @@ L_08B45698: AOT_REGCACHE_SYNC_OUT(); return; L_08B456A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B456E0; } @@ -3953,7 +3844,6 @@ L_08B456A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B456B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B456E0; } @@ -3981,7 +3871,6 @@ L_08B456B8: AOT_REGCACHE_SYNC_OUT(); return; L_08B456D0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B456E0; } @@ -3993,7 +3882,6 @@ L_08B456D8: goto L_08B456E0; L_08B456E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -4006,7 +3894,6 @@ L_08B456E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B456F0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45700; } @@ -4029,14 +3916,34 @@ L_08B45700: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B45714: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4571C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); @@ -4074,7 +3981,6 @@ L_08B45768: L_08B45770: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B457D4; } @@ -4084,7 +3990,6 @@ L_08B4577C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B457CC; } @@ -4099,7 +4004,6 @@ L_08B4578C: L_08B45798: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B457CC; } @@ -4127,7 +4031,6 @@ L_08B457A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B457BC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B457CC; } @@ -4167,7 +4070,17 @@ L_08B457D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B457F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4192,7 +4105,6 @@ L_08B4582C: AOT_REGCACHE_SYNC_OUT(); return; L_08B45838: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B4585C; } @@ -4212,7 +4124,6 @@ L_08B45840: AOT_REGCACHE_SYNC_OUT(); return; L_08B4585C: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B45894; } @@ -4226,7 +4137,6 @@ L_08B45864: AOT_REGCACHE_SYNC_OUT(); return; L_08B45870: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B45894; } @@ -4256,7 +4166,17 @@ L_08B45894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B458A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[8]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; @@ -4267,7 +4187,6 @@ L_08B458A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B458D4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45D8C; } @@ -4277,7 +4196,6 @@ L_08B458DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B45D8C; } @@ -4290,7 +4208,6 @@ L_08B458EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B458F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45D8C; } @@ -4303,7 +4220,6 @@ L_08B458FC: AOT_REGCACHE_SYNC_OUT(); return; L_08B45904: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45D8C; } @@ -4313,7 +4229,6 @@ L_08B4590C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(615)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45964; } @@ -4326,7 +4241,6 @@ L_08B4591C: AOT_REGCACHE_SYNC_OUT(); return; L_08B45924: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45964; } @@ -4340,7 +4254,6 @@ L_08B4592C: AOT_REGCACHE_SYNC_OUT(); return; L_08B45938: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B4595C; } @@ -4360,7 +4273,6 @@ L_08B45940: AOT_REGCACHE_SYNC_OUT(); return; L_08B4595C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -4469,7 +4381,6 @@ L_08B45A40: AOT_REGCACHE_SYNC_OUT(); return; L_08B45A48: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45AA4; } @@ -4479,7 +4390,6 @@ L_08B45A50: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 3u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B45AA4; } @@ -4489,7 +4399,6 @@ L_08B45A60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 227u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B45AA4; } @@ -4499,7 +4408,6 @@ L_08B45A70: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(86)))))); aot_gpr_5 = (0u | 194u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B45AA4; } @@ -4509,7 +4417,6 @@ L_08B45A80: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(616)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B45AA4; } @@ -4520,7 +4427,6 @@ L_08B45A90: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45AC0; } @@ -4564,9 +4470,7 @@ L_08B45AC8: aot_gpr_4 = (aot_gpr_4 | 26214u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B45AFC; } @@ -4580,7 +4484,6 @@ L_08B45AFC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(614)))))); aot_gpr_4 = (aot_gpr_4 & 128u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45B18; } @@ -4593,9 +4496,7 @@ L_08B45B0C: goto L_08B45B18; L_08B45B18: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B45D8C; } @@ -4618,12 +4519,10 @@ L_08B45B28: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08B45B40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 454u, 0x0896DBC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B45B40u) goto L_08B45B40; AOT_REGCACHE_SYNC_OUT(); return; L_08B45B40: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45D8C; } @@ -4636,7 +4535,6 @@ L_08B45B48: AOT_REGCACHE_SYNC_OUT(); return; L_08B45B50: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45B68; } @@ -4673,7 +4571,6 @@ L_08B45B78: goto L_08B45B84; L_08B45B84: aot_gpr_31 = (0x08B45B8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B45B8Cu) goto L_08B45B8C; AOT_REGCACHE_SYNC_OUT(); return; L_08B45B8C: @@ -4690,7 +4587,6 @@ L_08B45B90: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45D3C; } @@ -4705,7 +4601,6 @@ L_08B45BBC: goto L_08B45BC8; L_08B45BC8: aot_gpr_31 = (0x08B45BD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 459u, 0x08B65DE8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B45BD0u) goto L_08B45BD0; AOT_REGCACHE_SYNC_OUT(); return; L_08B45BD0: @@ -4734,7 +4629,6 @@ L_08B45BF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B45C04: { const bool branch_taken = ctx.gpr[20] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B45C14; } @@ -4742,7 +4636,6 @@ L_08B45C04: } L_08B45C0C: { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B45C1C; } @@ -4750,7 +4643,6 @@ L_08B45C0C: } L_08B45C14: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45D34; } @@ -4766,7 +4658,6 @@ L_08B45C1C: AOT_REGCACHE_SYNC_OUT(); return; L_08B45C30: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45D34; } @@ -4884,7 +4775,6 @@ L_08B45D0C: AOT_REGCACHE_SYNC_OUT(); return; L_08B45D24: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45D34; } @@ -4908,7 +4798,6 @@ L_08B45D34: } L_08B45D3C: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B45D84; } @@ -4920,7 +4809,6 @@ L_08B45D44: goto L_08B457F8; L_08B45D4C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45D84; } @@ -4934,7 +4822,6 @@ L_08B45D54: AOT_REGCACHE_SYNC_OUT(); return; L_08B45D60: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B45D84; } @@ -4954,7 +4841,6 @@ L_08B45D68: AOT_REGCACHE_SYNC_OUT(); return; L_08B45D84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -4965,7 +4851,6 @@ L_08B45D8C: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B45DD0; } @@ -4976,7 +4861,6 @@ L_08B45DA0: aot_gpr_5 = (0u | 48u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -4985,7 +4869,6 @@ L_08B45DA0: L_08B45DB4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45DD0; } @@ -4995,7 +4878,6 @@ L_08B45DC0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(532)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5007,7 +4889,6 @@ L_08B45DD0: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(5001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5018,7 +4899,6 @@ L_08B45DE8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5031,7 +4911,6 @@ L_08B45DFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B45E04: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5079,9 +4958,7 @@ L_08B45E0C: aot_gpr_4 = (16816u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5094,7 +4971,6 @@ L_08B45E50: AOT_REGCACHE_SYNC_OUT(); return; L_08B45E58: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5104,7 +4980,6 @@ L_08B45E60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5117,7 +4992,6 @@ L_08B45E70: AOT_REGCACHE_SYNC_OUT(); return; L_08B45E78: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5131,7 +5005,6 @@ L_08B45E80: AOT_REGCACHE_SYNC_OUT(); return; L_08B45E8C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5144,7 +5017,6 @@ L_08B45E94: AOT_REGCACHE_SYNC_OUT(); return; L_08B45E9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5167,12 +5039,10 @@ L_08B45EA4: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08B45EBCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 454u, 0x0896DBC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B45EBCu) goto L_08B45EBC; AOT_REGCACHE_SYNC_OUT(); return; L_08B45EBC: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5181,7 +5051,6 @@ L_08B45EBC: L_08B45EC4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45F68; } @@ -5200,7 +5069,6 @@ L_08B45ED8: L_08B45EE4: aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[2]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45F48; } @@ -5219,7 +5087,6 @@ L_08B45EF8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(100))); aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B45F40; } @@ -5235,7 +5102,6 @@ L_08B45F0C: L_08B45F1C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B45F40; } @@ -5249,7 +5115,6 @@ L_08B45F28: AOT_REGCACHE_SYNC_OUT(); return; L_08B45F34: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B45F40; } @@ -5268,7 +5133,6 @@ L_08B45F40: } L_08B45F48: { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B45F60; } @@ -5280,7 +5144,6 @@ L_08B45F50: goto L_08B457F8; L_08B45F58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5288,7 +5151,6 @@ L_08B45F58: } L_08B45F60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B45FA0; } @@ -5302,7 +5164,6 @@ L_08B45F68: AOT_REGCACHE_SYNC_OUT(); return; L_08B45F74: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B45F98; } @@ -5322,7 +5183,6 @@ L_08B45F7C: AOT_REGCACHE_SYNC_OUT(); return; L_08B45F98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5331,7 +5191,6 @@ L_08B45F98: L_08B45FA0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4608C; } @@ -5346,7 +5205,6 @@ L_08B45FAC: aot_gpr_5 = (aot_gpr_5 & 255u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B46184; } @@ -5357,7 +5215,6 @@ L_08B45FD0: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B46184; } @@ -5404,9 +5261,7 @@ L_08B45FE4: aot_gpr_4 = (16937u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B46084; } @@ -5430,9 +5285,7 @@ L_08B46024: aot_gpr_4 = (aot_gpr_4 | 46871u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B46084; } @@ -5446,7 +5299,6 @@ L_08B46054: AOT_REGCACHE_SYNC_OUT(); return; L_08B46060: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B46084; } @@ -5466,7 +5318,6 @@ L_08B46068: AOT_REGCACHE_SYNC_OUT(); return; L_08B46084: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5477,7 +5328,6 @@ L_08B4608C: aot_gpr_5 = (0u | 80u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B46184; } @@ -5486,7 +5336,6 @@ L_08B4608C: L_08B460A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(660))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5499,7 +5348,6 @@ L_08B460AC: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5510,7 +5358,6 @@ L_08B460C8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5523,7 +5370,6 @@ L_08B460DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B460E4: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5570,9 +5416,7 @@ L_08B460EC: aot_gpr_4 = (16937u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B46184; } @@ -5595,12 +5439,10 @@ L_08B4612C: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08B46144u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0090_entry, 90u, 454u, 0x0896DBC0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B46144u) goto L_08B46144; AOT_REGCACHE_SYNC_OUT(); return; L_08B46144: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5614,7 +5456,6 @@ L_08B4614C: AOT_REGCACHE_SYNC_OUT(); return; L_08B46158: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B4617C; } @@ -5634,7 +5475,6 @@ L_08B46160: AOT_REGCACHE_SYNC_OUT(); return; L_08B4617C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46184; } @@ -5657,7 +5497,17 @@ L_08B46184: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B461AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), std::bit_cast(aot_fpr_20)); @@ -5683,11 +5533,20 @@ L_08B461E0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30808))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B461F8: aot_gpr_4 = (15948u << 16u); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(12), static_cast(0u)); @@ -5699,7 +5558,6 @@ L_08B461F8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46238; } @@ -5714,7 +5572,6 @@ L_08B46224: goto L_08B46238; L_08B46238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5761,9 +5618,7 @@ L_08B46258: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B462B4; } @@ -5791,7 +5646,6 @@ L_08B462C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46304; } @@ -5803,7 +5657,6 @@ L_08B462D8: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(612))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B46304; } @@ -5812,7 +5665,6 @@ L_08B462D8: L_08B462F0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_16 + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B46304; } @@ -5824,7 +5676,6 @@ L_08B462FC: goto L_08B46304; L_08B46304: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5840,7 +5691,6 @@ L_08B4630C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4633C; } @@ -5852,7 +5702,6 @@ L_08B46334: goto L_08B4633C; L_08B4633C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5868,7 +5717,6 @@ L_08B46344: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46374; } @@ -5880,7 +5728,6 @@ L_08B4636C: goto L_08B46374; L_08B46374: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5893,7 +5740,6 @@ L_08B4637C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B463A0; } @@ -5905,7 +5751,6 @@ L_08B46398: goto L_08B463A0; L_08B463A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5921,7 +5766,6 @@ L_08B463A8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B463D8; } @@ -5933,7 +5777,6 @@ L_08B463D0: goto L_08B463D8; L_08B463D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5951,7 +5794,6 @@ L_08B463E0: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46418; } @@ -5963,7 +5805,6 @@ L_08B46410: goto L_08B46418; L_08B46418: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -5978,7 +5819,6 @@ L_08B46420: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4644C; } @@ -5990,7 +5830,6 @@ L_08B46444: goto L_08B4644C; L_08B4644C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -6026,7 +5865,6 @@ L_08B46484: aot_gpr_4 = (aot_gpr_4 + static_cast(-1000)); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B464B8; } @@ -6042,7 +5880,6 @@ L_08B464B8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B464D4; } @@ -6054,7 +5891,6 @@ L_08B464CC: goto L_08B464D4; L_08B464D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B464F4; } @@ -6093,7 +5929,17 @@ L_08B46508: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4652C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(64), ctx.gpr[19]); @@ -6258,7 +6104,6 @@ L_08B466C4: } L_08B466D8: aot_gpr_31 = (0x08B466E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B466E0u) goto L_08B466E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B466E0: @@ -6389,7 +6234,17 @@ L_08B467BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B46834: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6460,11 +6315,20 @@ L_08B468E0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30768))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B468F8: aot_gpr_31 = (0x08B46900u); aot_gpr_4 = (aot_gpr_29 + static_cast(16)); @@ -6487,7 +6351,6 @@ L_08B4690C: AOT_REGCACHE_SYNC_OUT(); return; L_08B46924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4698C; } @@ -6496,7 +6359,6 @@ L_08B46924: L_08B4692C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4695C; } @@ -6516,7 +6378,6 @@ L_08B46938: AOT_REGCACHE_SYNC_OUT(); return; L_08B4695C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4698C; } @@ -6554,7 +6415,6 @@ L_08B4698C: } L_08B46994: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B46A6C; } @@ -6570,7 +6430,6 @@ L_08B4699C: AOT_REGCACHE_SYNC_OUT(); return; L_08B469B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46A6C; } @@ -6586,7 +6445,6 @@ L_08B469B8: } L_08B469C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46A6C; } @@ -6671,7 +6529,17 @@ L_08B46A6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B46A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-1152)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(aot_fpr_22), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[26]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_31}; @@ -6696,7 +6564,6 @@ L_08B46A94: aot_gpr_5 = (aot_gpr_5 + static_cast(-6992)); ctx.gpr[17] = (ctx.gpr[17] + aot_gpr_5); aot_gpr_31 = (0x08B46B20u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 48u, 0x08960450u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B46B20u) goto L_08B46B20; AOT_REGCACHE_SYNC_OUT(); return; L_08B46B20: @@ -6715,7 +6582,6 @@ L_08B46B20: const std::uint32_t vfpu_words[4]{std::bit_cast(vfpu_value[0]), std::bit_cast(vfpu_value[1]), std::bit_cast(vfpu_value[2]), std::bit_cast(vfpu_value[3])}; aot_mem.aot_direct_store32_block(vfpu_address, vfpu_words); } aot_gpr_31 = (0x08B46B34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 22u, 0x08960240u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B46B34u) goto L_08B46B34; AOT_REGCACHE_SYNC_OUT(); return; L_08B46B34: @@ -6758,7 +6624,6 @@ L_08B46B7C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(4210))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B46BC0; } @@ -6773,7 +6638,6 @@ L_08B46B8C: L_08B46B98: aot_gpr_4 = (static_cast(ctx.gpr[2]) < 21 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46BB8; } @@ -6782,7 +6646,6 @@ L_08B46B98: L_08B46BA4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5508))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46BC8; } @@ -6790,7 +6653,6 @@ L_08B46BA4: } L_08B46BB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46C20; } @@ -6798,7 +6660,6 @@ L_08B46BB0: } L_08B46BB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6806,7 +6667,6 @@ L_08B46BB8: } L_08B46BC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6831,7 +6691,6 @@ L_08B46BE4: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46C18; } @@ -6858,7 +6717,6 @@ L_08B46C10: } L_08B46C18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6874,7 +6732,6 @@ L_08B46C2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5504))); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B46BFC; } @@ -6882,7 +6739,6 @@ L_08B46C2C: } L_08B46C3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6909,7 +6765,6 @@ L_08B46C68: goto L_08B46C70; L_08B46C70: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46CA4; } @@ -6927,7 +6782,6 @@ L_08B46C84: aot_gpr_4 = (ctx.gpr[2] - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46CAC; } @@ -6935,7 +6789,6 @@ L_08B46C84: } L_08B46C9C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6943,7 +6796,6 @@ L_08B46C9C: } L_08B46CA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -6983,7 +6835,6 @@ L_08B46CE0: AOT_REGCACHE_SYNC_OUT(); return; L_08B46CF0: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B46D00; } @@ -6991,7 +6842,6 @@ L_08B46CF0: } L_08B46CF8: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08B46D08; } @@ -6999,7 +6849,6 @@ L_08B46CF8: } L_08B46D00: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46D60; } @@ -7057,9 +6906,7 @@ L_08B46D20: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5288))); { const float fs = aot_fpr_13; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B46D60; } @@ -7090,9 +6937,7 @@ L_08B46D68: { const float fs = aot_fpr_12; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[16]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B46DEC; } @@ -7116,7 +6961,6 @@ L_08B46DA8: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B46DF4; } @@ -7124,7 +6968,6 @@ L_08B46DA8: } L_08B46DE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7132,7 +6975,6 @@ L_08B46DE4: } L_08B46DEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7140,7 +6982,6 @@ L_08B46DEC: } L_08B46DF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46E6C; } @@ -7157,9 +6998,7 @@ L_08B46DFC: { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = ctx.fpr[14]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B46EB0; } @@ -7183,7 +7022,6 @@ L_08B46E30: aot_gpr_4 = (aot_gpr_4 + aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B46EA8; } @@ -7200,7 +7038,6 @@ L_08B46E78: aot_gpr_4 = (aot_gpr_4 + static_cast(8192)); aot_gpr_4 = (ctx.gpr[2] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B46EA0; } @@ -7209,7 +7046,6 @@ L_08B46E78: L_08B46E8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B46EB8; } @@ -7225,7 +7061,6 @@ L_08B46E98: } L_08B46EA0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7233,7 +7068,6 @@ L_08B46EA0: } L_08B46EA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7241,7 +7075,6 @@ L_08B46EA8: } L_08B46EB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7257,7 +7090,6 @@ L_08B46EC4: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B46EE4; } @@ -7265,7 +7097,6 @@ L_08B46EC4: } L_08B46ED4: { const bool branch_taken = static_cast(ctx.gpr[17]) >= 0; - // nop if (branch_taken) { goto L_08B47154; } @@ -7281,7 +7112,6 @@ L_08B46EDC: } L_08B46EE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7301,7 +7131,6 @@ L_08B46EEC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(32))); aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47058; } @@ -7322,7 +7151,6 @@ L_08B46F24: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2314))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B47058; } @@ -7343,7 +7171,6 @@ L_08B46F60: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2313))); aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B47058; } @@ -7352,7 +7179,6 @@ L_08B46F60: L_08B46F9C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(-1044))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47058; } @@ -7360,7 +7186,6 @@ L_08B46F9C: } L_08B46FA8: aot_gpr_31 = (0x08B46FB0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B46FB0u) goto L_08B46FB0; AOT_REGCACHE_SYNC_OUT(); return; L_08B46FB0: @@ -7416,7 +7241,6 @@ L_08B47014: } L_08B4701C: { const bool branch_taken = aot_gpr_5 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B47054; } @@ -7425,7 +7249,6 @@ L_08B4701C: L_08B47024: aot_gpr_4 = (static_cast(aot_gpr_4) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47034; } @@ -7436,7 +7259,6 @@ L_08B47030: goto L_08B47034; L_08B47034: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47058; } @@ -7471,7 +7293,6 @@ L_08B47054: goto L_08B47058; L_08B47058: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B47090; } @@ -7479,13 +7300,11 @@ L_08B47058: } L_08B47060: aot_gpr_31 = (0x08B47068u); - // nop goto L_08B44F70; L_08B47068: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 191u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B47084; } @@ -7522,7 +7341,6 @@ L_08B470A0: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B470C8; } @@ -7548,7 +7366,6 @@ L_08B470C0: } L_08B470C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7557,7 +7374,6 @@ L_08B470C8: L_08B470D0: aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4711C; } @@ -7585,7 +7401,6 @@ L_08B470DC: } L_08B47114: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47094; } @@ -7595,7 +7410,6 @@ L_08B4711C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4714C; } @@ -7603,12 +7417,10 @@ L_08B4711C: } L_08B4712C: aot_gpr_31 = (0x08B47134u); - // nop goto L_08B44F70; L_08B47134: aot_gpr_4 = (0u | 191u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B4714C; } @@ -7621,7 +7433,6 @@ L_08B47140: goto L_08B4714C; L_08B4714C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B46ED4; } @@ -7635,7 +7446,6 @@ L_08B47154: L_08B4715C: aot_gpr_4 = (ctx.gpr[2] & 2u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B471C0; } @@ -7652,9 +7462,7 @@ L_08B4716C: aot_gpr_4 = (aot_gpr_4 | 26214u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B471C8; } @@ -7679,7 +7487,6 @@ L_08B47194: } L_08B471C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -7687,13 +7494,11 @@ L_08B471C0: } L_08B471C8: aot_gpr_31 = (0x08B471D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B471D0u) goto L_08B471D0; AOT_REGCACHE_SYNC_OUT(); return; L_08B471D0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B473F4; } @@ -7710,9 +7515,7 @@ L_08B471DC: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[14] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[14])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B472B8; } @@ -7766,7 +7569,6 @@ L_08B4725C: } L_08B47268: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B473EC; } @@ -7807,9 +7609,7 @@ L_08B472B8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B47378; } @@ -7862,7 +7662,6 @@ L_08B4731C: } L_08B47328: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B473EC; } @@ -7939,7 +7738,6 @@ L_08B473A0: L_08B473C8: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B473EC; } @@ -7955,7 +7753,6 @@ L_08B473D4: goto L_08B473EC; L_08B473EC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47468; } @@ -8002,7 +7799,6 @@ L_08B4741C: L_08B47444: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B47468; } @@ -8045,7 +7841,6 @@ L_08B474B4: aot_gpr_4 = (ctx.gpr[2] | 0u); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B47500; } @@ -8080,7 +7875,6 @@ L_08B474F8: } L_08B47500: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8089,7 +7883,6 @@ L_08B47500: L_08B47508: ctx.gpr[7] = (0u | 24u); { const bool branch_taken = aot_gpr_6 != ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B47550; } @@ -8109,7 +7902,6 @@ L_08B47514: aot_gpr_6 = (aot_gpr_6 + static_cast(2288)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(32))); { const bool branch_taken = static_cast(aot_gpr_6) <= 0; - // nop if (branch_taken) { goto L_08B47550; } @@ -8138,7 +7930,6 @@ L_08B47550: AOT_REGCACHE_SYNC_OUT(); return; L_08B4758C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8183,7 +7974,6 @@ L_08B47604: goto L_08B4571C; L_08B47610: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4763C; } @@ -8191,7 +7981,6 @@ L_08B47610: } L_08B47618: aot_gpr_31 = (0x08B47620u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B47620u) goto L_08B47620; AOT_REGCACHE_SYNC_OUT(); return; L_08B47620: @@ -8205,7 +7994,6 @@ L_08B47620: goto L_08B47634; L_08B47634: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8213,7 +8001,6 @@ L_08B47634: } L_08B4763C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8229,7 +8016,6 @@ L_08B47644: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B476C0; } @@ -8238,7 +8024,6 @@ L_08B47644: L_08B4766C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5481))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B47690; } @@ -8264,7 +8049,6 @@ L_08B47688: } L_08B47690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8273,7 +8057,6 @@ L_08B47690: L_08B47698: aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B476EC; } @@ -8289,7 +8072,6 @@ L_08B476A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B476B8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B476D0; } @@ -8303,7 +8085,6 @@ L_08B476C0: goto L_08B476C8; L_08B476C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47868; } @@ -8319,7 +8100,6 @@ L_08B476D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B476E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8354,7 +8134,6 @@ L_08B47714: AOT_REGCACHE_SYNC_OUT(); return; L_08B4771C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B4772C; } @@ -8362,7 +8141,6 @@ L_08B4771C: } L_08B47724: { const bool branch_taken = static_cast(ctx.gpr[21]) > 0; - // nop if (branch_taken) { goto L_08B476F0; } @@ -8370,7 +8148,6 @@ L_08B47724: } L_08B4772C: { const bool branch_taken = ctx.gpr[21] != 0u; - // nop if (branch_taken) { goto L_08B4773C; } @@ -8378,7 +8155,6 @@ L_08B4772C: } L_08B47734: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8386,7 +8162,6 @@ L_08B47734: } L_08B4773C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B476C0; } @@ -8406,7 +8181,6 @@ L_08B4774C: AOT_REGCACHE_SYNC_OUT(); return; L_08B4775C: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B47868; } @@ -8421,7 +8195,6 @@ L_08B47764: AOT_REGCACHE_SYNC_OUT(); return; L_08B47774: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B477AC; } @@ -8429,13 +8202,11 @@ L_08B47774: } L_08B4777C: aot_gpr_31 = (0x08B47784u); - // nop goto L_08B44F70; L_08B47784: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u | 191u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B477A0; } @@ -8472,7 +8243,6 @@ L_08B477BC: ctx.gpr[17] = (ctx.gpr[2] | 0u); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B477E4; } @@ -8498,7 +8268,6 @@ L_08B477DC: } L_08B477E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8507,7 +8276,6 @@ L_08B477E4: L_08B477EC: aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47838; } @@ -8535,7 +8303,6 @@ L_08B477F8: } L_08B47830: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B477B0; } @@ -8545,7 +8312,6 @@ L_08B47838: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47868; } @@ -8553,12 +8319,10 @@ L_08B47838: } L_08B47848: aot_gpr_31 = (0x08B47850u); - // nop goto L_08B44F70; L_08B47850: aot_gpr_4 = (0u | 191u); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B47868; } @@ -8607,7 +8371,6 @@ L_08B47888: L_08B478B0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(386)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8617,7 +8380,6 @@ L_08B478BC: aot_gpr_4 = (0u | 1u); aot_gpr_4 = (ctx.gpr[19] | aot_gpr_4); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8726,7 +8488,6 @@ L_08B479D0: goto L_08B479F0; L_08B479F0: { const bool branch_taken = ctx.gpr[21] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8752,7 +8513,6 @@ L_08B47A18: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_5 = (0u | 6u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47A70; } @@ -8785,7 +8545,6 @@ L_08B47A4C: L_08B47A50: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B47CA8; } @@ -8825,7 +8584,6 @@ L_08B47A90: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_5 = (0u | 8u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47AEC; } @@ -8834,7 +8592,6 @@ L_08B47A90: L_08B47AA0: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47ACC; } @@ -8857,7 +8614,6 @@ L_08B47AB8: } L_08B47AC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47AE4; } @@ -8865,7 +8621,6 @@ L_08B47AC4: } L_08B47ACC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8882,7 +8637,6 @@ L_08B47AE0: goto L_08B47AE4; L_08B47AE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47CA8; } @@ -8908,7 +8662,6 @@ L_08B47B0C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47B68; } @@ -8917,7 +8670,6 @@ L_08B47B0C: L_08B47B1C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47B48; } @@ -8940,7 +8692,6 @@ L_08B47B34: } L_08B47B40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47B60; } @@ -8948,7 +8699,6 @@ L_08B47B40: } L_08B47B48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8965,7 +8715,6 @@ L_08B47B5C: goto L_08B47B60; L_08B47B60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47CA8; } @@ -8991,7 +8740,6 @@ L_08B47B88: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47BE4; } @@ -9000,7 +8748,6 @@ L_08B47B88: L_08B47B98: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47BC4; } @@ -9023,7 +8770,6 @@ L_08B47BB0: } L_08B47BBC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47BDC; } @@ -9031,7 +8777,6 @@ L_08B47BBC: } L_08B47BC4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9048,7 +8793,6 @@ L_08B47BD8: goto L_08B47BDC; L_08B47BDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47CA8; } @@ -9074,7 +8818,6 @@ L_08B47C04: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B47C60; } @@ -9083,7 +8826,6 @@ L_08B47C04: L_08B47C14: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47C40; } @@ -9106,7 +8848,6 @@ L_08B47C2C: } L_08B47C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47C58; } @@ -9114,7 +8855,6 @@ L_08B47C38: } L_08B47C40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0209_entry, 209u, 247u, 0x08B496F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -9131,7 +8871,6 @@ L_08B47C54: goto L_08B47C58; L_08B47C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47CA8; } @@ -9165,7 +8904,6 @@ L_08B47C88: L_08B47C8C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B47CA8; } @@ -9205,7 +8943,6 @@ L_08B47CC8: } L_08B47CD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47F74; } @@ -9232,7 +8969,6 @@ L_08B47CE8: } L_08B47CF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B47F74; } @@ -9263,7 +8999,6 @@ L_08B47CFC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47DAC; } @@ -9324,7 +9059,6 @@ L_08B47DD4: L_08B47DE0: aot_gpr_4 = (0u | 193u); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B47E04; } @@ -9370,7 +9104,6 @@ L_08B47E14: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(2320))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B47EC4; } @@ -9497,7 +9230,6 @@ L_08B47F88: aot_mem.aot_direct_store8(ctx.gpr[22] + static_cast(535), static_cast(aot_gpr_5)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B47FF0; } diff --git a/profiles/vcs/generated/generated_unit_0209.cpp b/profiles/vcs/generated/generated_unit_0209.cpp index 2114949..2d2dbd4 100644 --- a/profiles/vcs/generated/generated_unit_0209.cpp +++ b/profiles/vcs/generated/generated_unit_0209.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0209[4089] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 10, 0, - 0, 11, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 0, 0, 0, 0, 18, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 40, 0, 41, 0, 42, 0, - 0, 0, 0, 0, 0, 43, 0, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 47, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 0, 0, 0, 0, 0, 0, 52, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 0, 55, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, - 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 64, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, - 67, 0, 68, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, 78, 0, 79, 0, 80, 0, 0, 0, - 81, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, 84, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 90, 0, 0, 91, 0, 92, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 0, 0, 95, 0, 96, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 103, 0, 104, 0, 0, 0, 0, 0, - 0, 105, 0, 106, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 109, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 112, 0, 0, 113, 114, 0, 0, 0, 115, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 118, 0, 119, 0, 120, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 122, 0, 123, 0, 0, 0, 0, 0, 0, 124, 0, 125, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, - 0, 0, 0, 129, 0, 0, 0, 130, 0, 0, 0, 131, 0, 132, 0, 0, 0, 133, 0, 0, 0, 134, 0, 0, 0, 135, 0, 136, 0, 137, 0, 138, - 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 143, 0, 0, 144, 0, 145, - 0, 0, 146, 0, 147, 148, 0, 149, 0, 0, 0, 0, 150, 0, 0, 0, 151, 0, 0, 0, 0, 0, 152, 0, 153, 0, 0, 0, 154, 155, 0, 0, - 0, 156, 157, 0, 0, 0, 158, 0, 0, 159, 0, 0, 160, 0, 161, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 164, 0, 165, - 0, 0, 0, 166, 0, 0, 167, 0, 168, 0, 169, 0, 170, 171, 0, 172, 0, 0, 0, 0, 173, 0, 0, 174, 175, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 176, 0, 0, 0, 177, 0, 0, 0, 178, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 182, 0, 0, 0, - 183, 184, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, - 0, 0, 190, 0, 0, 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 0, 0, 0, 198, 0, 0, 0, 199, 0, 0, 0, 200, - 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 207, 0, 0, 0, 208, 0, 209, - 0, 0, 0, 0, 210, 0, 0, 0, 211, 0, 0, 0, 212, 0, 213, 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 216, 0, 217, 0, 0, 0, 218, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 220, 0, 221, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 223, 0, 224, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 226, 0, 0, 227, 0, 0, 228, 0, 0, 0, 229, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 233, 0, 0, 234, 0, 0, 0, 235, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 0, 0, 238, 0, 0, 239, 0, 0, 240, 0, 241, 0, 0, 242, 0, 243, 0, 244, 0, 245, 0, 0, 246, 0, 247, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 252, 0, 0, 0, 0, 0, - 253, 0, 254, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, - 0, 260, 0, 0, 261, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 0, - 0, 0, 267, 0, 268, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 270, 0, 0, 0, 0, 271, 0, 0, 0, 272, 0, 0, 273, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, - 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, 0, 281, 0, 0, 282, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, - 288, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 299, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, - 0, 305, 0, 0, 0, 306, 0, 0, 307, 0, 0, 0, 308, 0, 0, 0, 0, 309, 0, 0, 0, 0, 310, 0, 0, 0, 0, 311, 0, 312, 0, 0, - 0, 313, 0, 314, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 316, 0, 0, 0, 317, 0, 318, 0, 0, 0, 319, 0, 320, 0, 0, 0, 321, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 324, 0, 325, 0, 0, 0, 326, 0, 327, 0, 0, 0, 328, 0, 0, 0, 329, 0, - 0, 330, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 0, 333, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, - 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 340, 0, 341, 0, 342, 0, 343, 0, 0, - 0, 0, 344, 0, 345, 0, 346, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 348, 0, 0, 0, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 351, - 0, 0, 352, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 358, 0, 0, 359, 0, 360, 0, 0, 0, 361, 0, 0, 362, 0, 0, 0, 363, 0, - 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 368, - 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 373, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 377, 0, 0, 378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, - 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 0, 0, 382, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 386, 0, 0, 387, 0, 0, 0, 388, 0, 389, 0, 390, 0, 0, 0, 0, 391, 0, 0, - 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, - 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, - 0, 0, 407, 0, 0, 408, 0, 409, 0, 410, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, - 0, 0, 414, 415, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 419, 0, 420, 0, 421, 0, - 422, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 427, 0, 428, 0, 429, 0, 0, 0, 430, - 0, 0, 0, 431, 0, 0, 0, 432, 0, 0, 433, 434, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 436, 0, 0, 0, 0, 0, 437, 0, 0, 0, - 0, 0, 438, 0, 439, 0, 440, 0, 441, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 445, 0, 446, - 0, 447, 0, 448, 0, 0, 0, 449, 0, 0, 0, 450, 0, 0, 0, 451, 0, 0, 452, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 455, 0, - 0, 0, 0, 456, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 461, 0, 0, 462, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 0, 0, - 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 0, 0, 0, 472, 0, 0, 0, 473, 474, 0, 0, 0, - 0, 0, 475, 0, 0, 0, 476, 0, 477, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 480, 0, 0, 0, 0, 481, 0, 0, 0, 0, 482, 0, 0, - 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, - 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 490, 0, 0, 0, 491, 0, 0, 0, 0, 492, 493, 0, 0, 0, 0, - 494, 495, 0, 496, 0, 0, 497, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, - 502, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 504, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, - 508, 0, 509, 0, 510, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 514, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 518, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 519, 520, 0, 0, 521, 522, 0, 0, 0, 523, 0, 524, 0, 525, 0, 526, 0, 0, 527, 0, 0, 0, 0, 528, - 0, 529, 0, 0, 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 533, 534, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 536, 537, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 540, 0, 541, 0, 0, 542, 0, 543, 0, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 548, 0, 0, 0, - 0, 0, 549, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 552, 0, 0, 0, 0, 0, 553, 554, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 558, - 0, 559, 0, 0, 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 562, 563, 0, 0, 0, 0, 564, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 567, 0, 568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 571, 0, 0, 0, 0, - 0, 0, 572, 573, 0, 0, 0, 574, 0, 575, 0, 0, 0, 576, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 0, 0, 0, 581, 582, 0, 583, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 585, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, - 0, 0, 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 591, 0, 592, 0, 593, 0, 0, 594, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 0, 0, 598, 0, - 599, 0, 0, 600, 0, 601, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 603, 0, 604, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 608, 0, 0, 0, 609, 0, 0, 610, 0, 0, - 0, 0, 611, 0, 0, 0, 0, 0, 0, 612, 613, 0, 0, 0, 0, 0, 614, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 618, 0, 0, 619, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 622, 0, 0, 623, 624, 0, 0, - 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, 629, 0, 0, 630, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 632, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 635, 0, 0, - 0, 0, 0, 0, 636, 0, 0, 0, 0, 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, - 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 647, 0, - 0, 648, 0, 0, 0, 0, 0, 649, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0209[64] = { + 0x440200C400006021ull, 0x0000000000000012ull, 0x00A4300822000000ull, 0x40000C00000A5028ull, + 0x000000000000000Aull, 0x4100000000010880ull, 0x0000000000001002ull, 0x0000000000000000ull, + 0x800002A054100000ull, 0x0204622040500062ull, 0x12081205042A8141ull, 0x1548000000800100ull, + 0x00002A420A094841ull, 0x0540000140A010A4ull, 0x0A8151900015028Aull, 0x4004800050290000ull, + 0xA4200884AA222888ull, 0xA2025246314110B4ull, 0x110228880190B548ull, 0x8885554410410413ull, + 0x8A055110A2214442ull, 0x2449081400022A00ull, 0x2954A48800912120ull, 0x0500000500001000ull, + 0x0889011202120215ull, 0x0100080009108814ull, 0x0202904420010008ull, 0x0800080000000200ull, + 0x0002081041040041ull, 0x2210204401008080ull, 0x8A28840A28421122ull, 0x20204A0244514408ull, + 0x824220542A808902ull, 0x448A490040100804ull, 0x0008000288010102ull, 0x0000040002408000ull, + 0x0042108040094080ull, 0x0A01041021513002ull, 0x0000080042041012ull, 0x0290000000000000ull, + 0x5410440C02004AA4ull, 0x10440C888AA08111ull, 0x4444888AA0811154ull, 0x0080000000008418ull, + 0x1200109000848000ull, 0x2108854418844002ull, 0x0200802008000002ull, 0x0282084B0C220804ull, + 0x010000551020A081ull, 0x1402000000004A00ull, 0x0302005284AA3300ull, 0x0000152810020C08ull, + 0xAA18281414080002ull, 0x0005408010C08012ull, 0x0000628C0A040000ull, 0x400860400B028100ull, + 0x404002000812A0A0ull, 0x0000000000000229ull, 0x2003060424540850ull, 0x0000000012800000ull, + 0x00C0000432400080ull, 0x2800030000104A00ull, 0x0001400102001210ull, 0x0100018244284000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0209[64] = { + 1u, 11u, 13u, 21u, 30u, 32u, 37u, 39u, 39u, 47u, 59u, 74u, 81u, 94u, 105u, 121u, + 129u, 146u, 166u, 183u, 201u, 219u, 231u, 248u, 253u, 267u, 276u, 285u, 288u, 296u, 305u, 322u, + 336u, 352u, 364u, 371u, 375u, 384u, 397u, 404u, 407u, 422u, 438u, 456u, 461u, 469u, 483u, 488u, + 502u, 513u, 519u, 535u, 545u, 559u, 569u, 578u, 589u, 599u, 603u, 617u, 620u, 628u, 636u, 643u, }; void recomp_unit_0209_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0209_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B48000u; - entry_id = (entry_delta < 16356u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0209[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16356u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0209[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0209[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B48000; @@ -861,7 +768,6 @@ L_08B48038: aot_fpr_12 = aot_fpr_12 - aot_fpr_13; aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(535)))))); goto L_08B4809C; @@ -905,7 +811,6 @@ L_08B480E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 244u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B48104; } @@ -919,7 +824,6 @@ L_08B480F8: L_08B48104: aot_mem.aot_direct_store16(aot_gpr_29 + static_cast(344), static_cast(ctx.gpr[20])); aot_gpr_31 = (0x08B48110u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B48110u) goto L_08B48110; AOT_REGCACHE_SYNC_OUT(); return; L_08B48110: @@ -1005,9 +909,7 @@ L_08B48110: aot_fpr_13 = std::sqrt(aot_fpr_13); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B48274; } @@ -1027,7 +929,6 @@ L_08B48274: aot_fpr_14 = aot_fpr_12 / aot_fpr_13; aot_fpr_15 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_15 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); goto L_08B4828C; @@ -1040,7 +941,6 @@ L_08B4828C: aot_fpr_15 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_15 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); goto L_08B482B0; @@ -1054,7 +954,6 @@ L_08B482B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(40))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B482D4; } @@ -1085,7 +984,6 @@ L_08B482DC: aot_gpr_5 = (0u | 1u); aot_gpr_4 = (aot_gpr_4 & 15u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B48338; } @@ -1093,7 +991,6 @@ L_08B482DC: } L_08B4830C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48330; } @@ -1113,7 +1010,6 @@ L_08B48314: AOT_REGCACHE_SYNC_OUT(); return; L_08B48330: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -1128,7 +1024,6 @@ L_08B48338: goto L_08B48344; L_08B48344: aot_gpr_31 = (0x08B4834Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4834Cu) goto L_08B4834C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4834C: @@ -1154,7 +1049,6 @@ L_08B4834C: aot_gpr_4 = (aot_gpr_4 + aot_gpr_6); aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_7; - // nop if (branch_taken) { goto L_08B48344; } @@ -1182,7 +1076,6 @@ L_08B483AC: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B48404; } @@ -1356,7 +1249,6 @@ L_08B4840C: aot_fpr_12 = std::sqrt(aot_fpr_12); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(64))); goto L_08B4852C; @@ -1778,7 +1670,6 @@ L_08B48630: ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.gpr[17] = (0u | 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B488A4; } @@ -1798,7 +1689,6 @@ L_08B48850: AOT_REGCACHE_SYNC_OUT(); return; L_08B48868: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B4889C; } @@ -1806,7 +1696,6 @@ L_08B48868: } L_08B48870: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48894; } @@ -1826,7 +1715,6 @@ L_08B48878: AOT_REGCACHE_SYNC_OUT(); return; L_08B48894: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -1878,7 +1766,6 @@ L_08B488A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B488FC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B48918; } @@ -1913,7 +1800,6 @@ L_08B48918: AOT_REGCACHE_SYNC_OUT(); return; L_08B48950: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B489B8; } @@ -1925,7 +1811,6 @@ L_08B48958: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_fpr_12 = aot_fpr_12 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B48978; @@ -1936,7 +1821,6 @@ L_08B48978: aot_fpr_14 = std::bit_cast(0u); aot_fpr_13 = ctx.fpr[20] - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B48994; @@ -1944,9 +1828,7 @@ L_08B48978: goto L_08B48994; L_08B48994: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B489B8; } @@ -1984,9 +1866,7 @@ L_08B489C8: aot_gpr_4 = (aot_gpr_4 | 27432u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[20]) || std::isnan(aot_fpr_12)) && ctx.fpr[20] == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B48A18; } @@ -1997,7 +1877,6 @@ L_08B489E4: aot_fpr_13 = std::bit_cast(0u); aot_fpr_12 = ctx.fpr[20] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B48A00; @@ -2007,9 +1886,7 @@ L_08B48A00: aot_gpr_4 = (16608u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B48A44; } @@ -2017,7 +1894,6 @@ L_08B48A00: } L_08B48A18: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48A3C; } @@ -2037,7 +1913,6 @@ L_08B48A20: AOT_REGCACHE_SYNC_OUT(); return; L_08B48A3C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -2050,7 +1925,6 @@ L_08B48A44: AOT_REGCACHE_SYNC_OUT(); return; L_08B48A4C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B48A68; } @@ -2294,7 +2168,6 @@ L_08B48B5C: L_08B48BCC: aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B48BF0; } @@ -2302,7 +2175,6 @@ L_08B48BCC: } L_08B48BD8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B48C64; } @@ -2318,7 +2190,6 @@ L_08B48BE0: } L_08B48BE8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B48C64; } @@ -2328,7 +2199,6 @@ L_08B48BF0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(533)))))); aot_gpr_5 = (0u | 1u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B48C18; } @@ -2361,7 +2231,6 @@ L_08B48C2C: AOT_REGCACHE_SYNC_OUT(); return; L_08B48C38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B48C98; } @@ -2387,7 +2256,6 @@ L_08B48C4C: } L_08B48C64: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B48C84; } @@ -2425,7 +2293,6 @@ L_08B48CA4: AOT_REGCACHE_SYNC_OUT(); return; L_08B48CAC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B48E50; } @@ -2501,7 +2368,6 @@ L_08B48D14: L_08B48D1C: { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2236u << 16u); if (branch_taken) { @@ -2516,9 +2382,7 @@ L_08B48D30: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B48D80; } @@ -2526,7 +2390,6 @@ L_08B48D30: } L_08B48D54: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48D78; } @@ -2546,7 +2409,6 @@ L_08B48D5C: AOT_REGCACHE_SYNC_OUT(); return; L_08B48D78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -2599,9 +2461,7 @@ L_08B48D80: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B48DE0; } @@ -2609,7 +2469,6 @@ L_08B48D80: } L_08B48DD8: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B48E0C; } @@ -2617,7 +2476,6 @@ L_08B48DD8: } L_08B48DE0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48E04; } @@ -2637,7 +2495,6 @@ L_08B48DE8: AOT_REGCACHE_SYNC_OUT(); return; L_08B48E04: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -2647,7 +2504,6 @@ L_08B48E0C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u | 248u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B48E48; } @@ -2655,7 +2511,6 @@ L_08B48E0C: } L_08B48E1C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48E40; } @@ -2675,7 +2530,6 @@ L_08B48E24: AOT_REGCACHE_SYNC_OUT(); return; L_08B48E40: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -2683,7 +2537,6 @@ L_08B48E40: } L_08B48E48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B48EE4; } @@ -2752,9 +2605,7 @@ L_08B48E9C: goto L_08B48EA0; L_08B48EA0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B48EE4; } @@ -2762,7 +2613,6 @@ L_08B48EA0: } L_08B48EB0: { const bool branch_taken = ctx.gpr[16] != 0u; - // nop if (branch_taken) { goto L_08B48EE4; } @@ -2770,7 +2620,6 @@ L_08B48EB0: } L_08B48EB8: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48EDC; } @@ -2790,7 +2639,6 @@ L_08B48EC0: AOT_REGCACHE_SYNC_OUT(); return; L_08B48EDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -2835,7 +2683,6 @@ L_08B48F40: goto L_08B48F4C; L_08B48F4C: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B48F70; } @@ -2855,7 +2702,6 @@ L_08B48F54: AOT_REGCACHE_SYNC_OUT(); return; L_08B48F70: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -2884,7 +2730,6 @@ L_08B48F78: L_08B48FBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(386)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B494C0; } @@ -2900,9 +2745,7 @@ L_08B48FC8: ctx.fpr[16] = std::bit_cast(0u); aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B494C0; } @@ -2941,7 +2784,6 @@ L_08B49034: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B49064; } @@ -2951,7 +2793,6 @@ L_08B49044: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B49064; } @@ -2961,7 +2802,6 @@ L_08B49054: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 23u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B49074; } @@ -2974,7 +2814,6 @@ L_08B49064: AOT_REGCACHE_SYNC_OUT(); return; L_08B4906C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B491F4; } @@ -2988,7 +2827,6 @@ L_08B49074: L_08B4907C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B491F4; } @@ -3020,7 +2858,6 @@ L_08B490AC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08B490D4; @@ -3031,7 +2868,6 @@ L_08B490D4: ctx.gpr[18] = (ctx.gpr[18] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < static_cast(ctx.gpr[16]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4909C; } @@ -3045,7 +2881,6 @@ L_08B490E8: AOT_REGCACHE_SYNC_OUT(); return; L_08B490F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B49174; } @@ -3060,7 +2895,6 @@ L_08B490FC: goto L_08B49108; L_08B49108: aot_gpr_31 = (0x08B49110u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 313u, 0x08B65564u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B49110u) goto L_08B49110; AOT_REGCACHE_SYNC_OUT(); return; L_08B49110: @@ -3101,7 +2935,6 @@ L_08B49140: AOT_REGCACHE_SYNC_OUT(); return; L_08B49158: { const bool branch_taken = ctx.gpr[2] != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B49174; } @@ -3122,7 +2955,6 @@ L_08B49174: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B49188; } @@ -3135,7 +2967,6 @@ L_08B49188: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B491F4; } @@ -3155,7 +2986,6 @@ L_08B491A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B491B0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B491E4; } @@ -3181,7 +3011,6 @@ L_08B491E4: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(ctx.gpr[17]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B49198; } @@ -3205,7 +3034,6 @@ L_08B491FC: L_08B4920C: aot_gpr_4 = (static_cast(aot_gpr_4) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B49230; } @@ -3221,7 +3049,6 @@ L_08B49218: } L_08B49220: { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B49230; } @@ -3240,7 +3067,6 @@ L_08B49230: goto L_08B49234; L_08B49234: aot_gpr_31 = (0x08B4923Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4923Cu) goto L_08B4923C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4923C: @@ -3255,7 +3081,6 @@ L_08B4923C: L_08B49250: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(5480))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4928C; } @@ -3281,7 +3106,6 @@ L_08B4928C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 13u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B492AC; } @@ -3291,7 +3115,6 @@ L_08B4929C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B492B4; } @@ -3305,7 +3128,6 @@ L_08B492B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[22] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-1000)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B492E0; } @@ -3332,7 +3154,6 @@ L_08B492F0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(44))); aot_gpr_5 = (0u | 24u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B494EC; } @@ -3344,7 +3165,6 @@ L_08B49300: L_08B49304: aot_gpr_5 = (0u | 204u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B494EC; } @@ -3407,7 +3227,6 @@ L_08B49388: } L_08B49398: { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B494B8; } @@ -3415,7 +3234,6 @@ L_08B49398: } L_08B493A0: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B493C8; } @@ -3423,7 +3241,6 @@ L_08B493A0: } L_08B493A8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B49404; } @@ -3439,7 +3256,6 @@ L_08B493B0: } L_08B493B8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4947C; } @@ -3447,7 +3263,6 @@ L_08B493B8: } L_08B493C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B494B8; } @@ -3479,7 +3294,6 @@ L_08B493EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B493FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B494B8; } @@ -3511,7 +3325,6 @@ L_08B49428: AOT_REGCACHE_SYNC_OUT(); return; L_08B49438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B494B8; } @@ -3543,7 +3356,6 @@ L_08B49464: AOT_REGCACHE_SYNC_OUT(); return; L_08B49474: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B494B8; } @@ -3575,7 +3387,6 @@ L_08B494A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B494B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B494B8; } @@ -3583,7 +3394,6 @@ L_08B494B0: } L_08B494B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B494EC; } @@ -3591,7 +3401,6 @@ L_08B494B8: } L_08B494C0: { const bool branch_taken = ctx.gpr[22] == 0u; - // nop if (branch_taken) { goto L_08B494E4; } @@ -3611,7 +3420,6 @@ L_08B494C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B494E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -3632,9 +3440,7 @@ L_08B494FC: { const float fs = aot_fpr_12; const float ft = ctx.fpr[0]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } aot_fpr_12 = ctx.fpr[20] + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4969C; } @@ -3647,7 +3453,6 @@ L_08B49524: AOT_REGCACHE_SYNC_OUT(); return; L_08B4952C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4969C; } @@ -3657,7 +3462,6 @@ L_08B49534: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[22] + static_cast(613)))))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4969C; } @@ -3715,7 +3519,6 @@ L_08B49544: AOT_REGCACHE_SYNC_OUT(); return; L_08B49588: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4969C; } @@ -3736,7 +3539,6 @@ L_08B495AC: ctx.gpr[16] = (0u | 0u); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B49634; } @@ -3751,7 +3553,6 @@ L_08B495C0: L_08B495CC: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B49620; } @@ -3778,7 +3579,6 @@ L_08B495F4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(464), aot_gpr_4); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B49620; } @@ -3795,7 +3595,6 @@ L_08B49620: ctx.gpr[16] = (ctx.gpr[16] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B495C0; } @@ -3804,7 +3603,6 @@ L_08B49620: L_08B49634: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4969C; } @@ -3835,7 +3633,6 @@ L_08B4965C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(900))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(1336))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4969C; } @@ -3851,7 +3648,6 @@ L_08B4968C: L_08B4969C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -3860,7 +3656,6 @@ L_08B4969C: L_08B496A8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[22] + static_cast(852))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B496D8; } @@ -3874,7 +3669,6 @@ L_08B496B4: L_08B496BC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -3887,7 +3681,6 @@ L_08B496C8: AOT_REGCACHE_SYNC_OUT(); return; L_08B496D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -3901,7 +3694,6 @@ L_08B496D8: L_08B496E0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B496F4; } @@ -3934,7 +3726,17 @@ L_08B496F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B49730: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); @@ -4134,7 +3936,6 @@ L_08B498EC: } L_08B49908: aot_gpr_31 = (0x08B49910u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B49910u) goto L_08B49910; AOT_REGCACHE_SYNC_OUT(); return; L_08B49910: @@ -4299,7 +4100,6 @@ L_08B49AB0: goto L_08B49ABC; L_08B49ABC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B49AE4; } @@ -4338,7 +4138,17 @@ L_08B49AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B49B24: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); @@ -4409,7 +4219,6 @@ L_08B49C00: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4436,9 +4245,7 @@ L_08B49C18: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(132))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4448,9 +4255,7 @@ L_08B49C48: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(124))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4460,9 +4265,7 @@ L_08B49C60: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(128))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4472,9 +4275,7 @@ L_08B49C78: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(36))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(120))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4485,7 +4286,6 @@ L_08B49C90: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(8))); aot_fpr_12 = aot_fpr_12 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B49CAC; @@ -4495,9 +4295,7 @@ L_08B49CAC: aot_gpr_5 = (16512u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4585,7 +4383,6 @@ L_08B49CC4: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); ctx.fpr[20] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16968u << 16u); if (branch_taken) { @@ -4599,9 +4396,7 @@ L_08B49D1C: { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4630,7 +4425,6 @@ L_08B49D3C: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B49D60; @@ -4663,9 +4457,7 @@ L_08B49D98: ctx.fpr[16] = std::bit_cast(aot_gpr_4); ctx.fpr[16] = aot_fpr_14 + ctx.fpr[16]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -4678,7 +4470,6 @@ L_08B49DB4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A1B8; } @@ -4689,7 +4480,6 @@ L_08B49DD0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 31u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4699,7 +4489,6 @@ L_08B49DE4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 48u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4707,9 +4496,7 @@ L_08B49DE4: } L_08B49DF4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B49F58; } @@ -4719,7 +4506,6 @@ L_08B49E04: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(86)))))); aot_gpr_5 = (0u + static_cast(-943)); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B49E8C; } @@ -4779,7 +4565,6 @@ L_08B49E74: AOT_REGCACHE_SYNC_OUT(); return; L_08B49E84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4790,9 +4575,7 @@ L_08B49E8C: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B49EEC; } @@ -4801,9 +4584,7 @@ L_08B49E8C: L_08B49EA8: aot_fpr_12 = aot_fpr_14 + aot_fpr_15; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B49ED4; } @@ -4818,7 +4599,6 @@ L_08B49EBC: AOT_REGCACHE_SYNC_OUT(); return; L_08B49ECC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4833,7 +4613,6 @@ L_08B49ED4: AOT_REGCACHE_SYNC_OUT(); return; L_08B49EE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4841,9 +4620,7 @@ L_08B49EE4: } L_08B49EEC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4853,7 +4630,6 @@ L_08B49EFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4864,9 +4640,7 @@ L_08B49F0C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B49F40; } @@ -4881,7 +4655,6 @@ L_08B49F28: AOT_REGCACHE_SYNC_OUT(); return; L_08B49F38: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4896,7 +4669,6 @@ L_08B49F40: AOT_REGCACHE_SYNC_OUT(); return; L_08B49F50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -4906,7 +4678,6 @@ L_08B49F58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(72))); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4A064; } @@ -4916,7 +4687,6 @@ L_08B49F68: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2228))); aot_gpr_5 = (0u | 9u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A064; } @@ -4925,7 +4695,6 @@ L_08B49F68: L_08B49F78: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2276))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B4A064; } @@ -4958,7 +4727,6 @@ L_08B49FB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(2256))); aot_fpr_12 = ctx.fpr[20] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B49FD4; @@ -4970,9 +4738,7 @@ L_08B49FD4: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A004; } @@ -4989,9 +4755,7 @@ L_08B4A004: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A02C; } @@ -5000,7 +4764,6 @@ L_08B4A004: L_08B4A020: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(700))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A05C; } @@ -5026,7 +4789,6 @@ L_08B4A03C: AOT_REGCACHE_SYNC_OUT(); return; L_08B4A05C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5039,7 +4801,6 @@ L_08B4A064: AOT_REGCACHE_SYNC_OUT(); return; L_08B4A06C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5048,9 +4809,7 @@ L_08B4A06C: L_08B4A074: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(136))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5063,7 +4822,6 @@ L_08B4A088: AOT_REGCACHE_SYNC_OUT(); return; L_08B4A090: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5074,9 +4832,7 @@ L_08B4A098: aot_gpr_4 = (16256u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5086,7 +4842,6 @@ L_08B4A0B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(456))); aot_gpr_4 = (aot_gpr_4 & 16u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5097,7 +4852,6 @@ L_08B4A0C4: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(7660))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5133,7 +4887,6 @@ L_08B4A108: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A1A0; } @@ -5148,7 +4901,6 @@ L_08B4A12C: aot_gpr_4 = (aot_gpr_4 + static_cast(1396)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[23]; - // nop if (branch_taken) { goto L_08B4A1A0; } @@ -5164,7 +4916,6 @@ L_08B4A150: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 19u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A1A0; } @@ -5180,7 +4931,6 @@ L_08B4A178: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (0u | 25u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A1AC; } @@ -5211,9 +4961,7 @@ L_08B4A1C4: goto L_08B4A1CC; L_08B4A1CC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A27C; } @@ -5222,7 +4970,6 @@ L_08B4A1CC: L_08B4A1DC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A204; } @@ -5232,7 +4979,6 @@ L_08B4A1E8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(532)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A204; } @@ -5241,7 +4987,6 @@ L_08B4A1E8: L_08B4A1F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(532)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[22]; - // nop if (branch_taken) { goto L_08B4A27C; } @@ -5252,7 +4997,6 @@ L_08B4A204: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = ctx.fpr[24] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08B4A220; @@ -5264,7 +5008,6 @@ L_08B4A220: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); { const float fs = aot_fpr_12; const float ft = aot_fpr_13; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[21] + static_cast(0))); goto L_08B4A240; @@ -5279,7 +5022,6 @@ L_08B4A240: aot_fpr_12 = std::bit_cast(aot_gpr_6); aot_gpr_4 = (aot_gpr_4 | 2u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store8(ctx.gpr[18] + static_cast(538), static_cast(aot_gpr_4)); if (branch_taken) { @@ -5295,7 +5037,6 @@ L_08B4A26C: goto L_08B4A27C; L_08B4A27C: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B49BEC; } @@ -5326,7 +5067,17 @@ L_08B4A284: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4A2CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -5345,7 +5096,6 @@ L_08B4A2CC: ctx.gpr[16] = (aot_gpr_4 | 0u); ctx.gpr[17] = (aot_gpr_5 | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[22])) && aot_fpr_12 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[18] = (aot_gpr_6 | 0u); if (branch_taken) { @@ -5386,9 +5136,7 @@ L_08B4A364: { const float fs = aot_fpr_14; const float ft = ctx.fpr[17]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } aot_fpr_12 = aot_fpr_12 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A438; } @@ -5431,9 +5179,7 @@ L_08B4A3A8: aot_fpr_15 = aot_fpr_15 + ctx.fpr[16]; aot_fpr_15 = std::sqrt(aot_fpr_15); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_15) || std::isnan(ctx.fpr[22])) && aot_fpr_15 == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A440; } @@ -5454,7 +5200,6 @@ L_08B4A41C: } L_08B4A438: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A678; } @@ -5492,7 +5237,6 @@ L_08B4A478: L_08B4A49C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[24])); goto L_08B4A4B0; @@ -5501,7 +5245,6 @@ L_08B4A49C: L_08B4A4B0: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16320u << 16u); if (branch_taken) { @@ -5512,7 +5255,6 @@ L_08B4A4B0: L_08B4A4C4: aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (15948u << 16u); if (branch_taken) { @@ -5529,7 +5271,6 @@ L_08B4A4D8: aot_fpr_14 = std::bit_cast(aot_gpr_4); { const float fs = aot_fpr_13; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_13 = std::bit_cast(0x7FC00000u); else aot_fpr_13 = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B4A504; @@ -5544,7 +5285,6 @@ L_08B4A504: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(538), static_cast(aot_gpr_4)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); goto L_08B4A530; @@ -5556,7 +5296,6 @@ L_08B4A530: L_08B4A534: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4A558; } @@ -5564,7 +5303,6 @@ L_08B4A534: } L_08B4A540: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16128u << 16u); if (branch_taken) { @@ -5574,7 +5312,6 @@ L_08B4A540: } L_08B4A550: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A678; } @@ -5582,7 +5319,6 @@ L_08B4A550: } L_08B4A558: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4A678; } @@ -5591,9 +5327,7 @@ L_08B4A558: L_08B4A560: aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A678; } @@ -5606,7 +5340,6 @@ L_08B4A574: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4A678; } @@ -5618,7 +5351,6 @@ L_08B4A590: aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); aot_gpr_4 = (aot_gpr_4 < static_cast(15001) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4A678; } @@ -5650,7 +5382,6 @@ L_08B4A5C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B4A5E4: { const bool branch_taken = ctx.gpr[16] == ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B4A678; } @@ -5660,9 +5391,7 @@ L_08B4A5EC: aot_gpr_4 = (48896u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A678; } @@ -5683,7 +5412,6 @@ L_08B4A610: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const float fs = ctx.fpr[20]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[20] = std::bit_cast(0x7FC00000u); else ctx.fpr[20] = fs * ft; } ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[20])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[20] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); goto L_08B4A630; @@ -5695,7 +5423,6 @@ L_08B4A630: aot_gpr_5 = (0u | 32u); aot_gpr_4 = (aot_gpr_4 & 496u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4A664; } @@ -5738,7 +5465,17 @@ L_08B4A678: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4A6AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(86)))))); @@ -5920,7 +5657,6 @@ L_08B4A88C: ctx.fpr[23] = std::bit_cast(std::bit_cast(ctx.fpr[4])); ctx.fpr[27] = ctx.fpr[27] - ctx.fpr[25]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[27] <= aot_fpr_15)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[25] = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -5930,9 +5666,7 @@ L_08B4A88C: } L_08B4A8A8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[7] < ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A8F8; } @@ -5942,9 +5676,7 @@ L_08B4A8B8: ctx.fpr[23] = aot_fpr_15 - ctx.fpr[27]; ctx.fpr[23] = ctx.fpr[23] / ctx.fpr[7]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[23] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A8F0; } @@ -5954,7 +5686,6 @@ L_08B4A8D0: ctx.fpr[27] = ctx.fpr[8] / ctx.fpr[7]; ctx.fpr[27] = ctx.fpr[23] - ctx.fpr[27]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[27] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[1]; const float ft = ctx.fpr[6]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[31] = std::bit_cast(0x7FC00000u); else ctx.fpr[31] = fs * ft; } goto L_08B4A9AC; @@ -5986,9 +5717,7 @@ L_08B4A8F8: } L_08B4A900: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[27] < ctx.fpr[9])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A96C; } @@ -5996,9 +5725,7 @@ L_08B4A900: } L_08B4A910: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[7] <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A964; } @@ -6009,9 +5736,7 @@ L_08B4A920: ctx.fpr[23] = std::bit_cast(std::bit_cast(ctx.fpr[23]) ^ 0x80000000u); ctx.fpr[23] = ctx.fpr[23] / ctx.fpr[7]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[23] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A95C; } @@ -6021,7 +5746,6 @@ L_08B4A93C: ctx.fpr[27] = ctx.fpr[8] / ctx.fpr[7]; ctx.fpr[27] = ctx.fpr[23] + ctx.fpr[27]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[27] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[1]; const float ft = ctx.fpr[6]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[31] = std::bit_cast(0x7FC00000u); else ctx.fpr[31] = fs * ft; } goto L_08B4A9AC; @@ -6053,9 +5777,7 @@ L_08B4A964: } L_08B4A96C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[7] <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4A98C; } @@ -6073,7 +5795,6 @@ L_08B4A97C: } L_08B4A98C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[7] < ctx.fpr[4])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[1]; const float ft = ctx.fpr[6]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) ctx.fpr[31] = std::bit_cast(0x7FC00000u); else ctx.fpr[31] = fs * ft; } goto L_08B4A9AC; @@ -6092,7 +5813,6 @@ L_08B4A9AC: ctx.fpr[29] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fpr[31] = ctx.fpr[31] + ctx.fpr[27]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[31] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[27] = std::bit_cast(std::bit_cast(ctx.fpr[4])); if (branch_taken) { @@ -6102,9 +5822,7 @@ L_08B4A9AC: } L_08B4A9C8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[10] < ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AA18; } @@ -6114,9 +5832,7 @@ L_08B4A9D8: ctx.fpr[27] = aot_fpr_14 - ctx.fpr[31]; ctx.fpr[27] = ctx.fpr[27] / ctx.fpr[10]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[27] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AA10; } @@ -6126,9 +5842,7 @@ L_08B4A9F0: ctx.fpr[31] = ctx.fpr[11] / ctx.fpr[10]; ctx.fpr[31] = ctx.fpr[27] - ctx.fpr[31]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[31] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AAC8; } @@ -6160,9 +5874,7 @@ L_08B4AA18: } L_08B4AA20: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[31] < ctx.fpr[21])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AA8C; } @@ -6170,9 +5882,7 @@ L_08B4AA20: } L_08B4AA30: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[10] <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AA84; } @@ -6183,9 +5893,7 @@ L_08B4AA40: ctx.fpr[27] = std::bit_cast(std::bit_cast(ctx.fpr[27]) ^ 0x80000000u); ctx.fpr[27] = ctx.fpr[27] / ctx.fpr[10]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[27] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AA7C; } @@ -6195,9 +5903,7 @@ L_08B4AA5C: ctx.fpr[31] = ctx.fpr[11] / ctx.fpr[10]; ctx.fpr[31] = ctx.fpr[27] + ctx.fpr[31]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[31] < ctx.fpr[0])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AAC8; } @@ -6229,9 +5935,7 @@ L_08B4AA84: } L_08B4AA8C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[10] <= ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AAAC; } @@ -6241,7 +5945,6 @@ L_08B4AA9C: ctx.fpr[29] = aot_fpr_14 - ctx.fpr[31]; ctx.fpr[29] = ctx.fpr[29] / ctx.fpr[10]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4AAC8; } @@ -6249,9 +5952,7 @@ L_08B4AA9C: } L_08B4AAAC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[10] < ctx.fpr[4])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AAC8; } @@ -6264,7 +5965,6 @@ L_08B4AABC: goto L_08B4AAC8; L_08B4AAC8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[23] <= ctx.fpr[27])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[27] = std::bit_cast(std::bit_cast(ctx.fpr[23])); goto L_08B4AAD8; @@ -6272,9 +5972,7 @@ L_08B4AAC8: goto L_08B4AAD8; L_08B4AAD8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[25] <= ctx.fpr[27])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AB10; } @@ -6282,9 +5980,7 @@ L_08B4AAD8: } L_08B4AAE8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[29] <= ctx.fpr[27])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AB10; } @@ -6293,7 +5989,6 @@ L_08B4AAE8: L_08B4AAF8: ctx.fpr[23] = std::bit_cast(std::bit_cast(ctx.fpr[27])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[23] <= ctx.fpr[2])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[23] = std::bit_cast(std::bit_cast(ctx.fpr[2])); goto L_08B4AB0C; @@ -6308,7 +6003,6 @@ L_08B4AB10: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 16u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 4 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4A7D0; } @@ -6323,7 +6017,17 @@ L_08B4AB28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4AB3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(320))); @@ -6350,7 +6054,6 @@ L_08B4AB3C: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[30] = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B4ABDC; @@ -6502,9 +6205,7 @@ L_08B4AD48: goto L_08B4AD5C; L_08B4AD5C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[22]) || std::isnan(ctx.fpr[22])) && ctx.fpr[22] == ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AD70; } @@ -6537,7 +6238,6 @@ L_08B4AD88: } L_08B4AD98: aot_gpr_31 = (0x08B4ADA0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0036_entry, 36u, 274u, 0x088954BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4ADA0u) goto L_08B4ADA0; AOT_REGCACHE_SYNC_OUT(); return; L_08B4ADA0: @@ -6553,9 +6253,7 @@ L_08B4ADA8: goto L_08B4ADBC; L_08B4ADBC: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[24])) && aot_fpr_12 == ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4ADE0; } @@ -6564,9 +6262,7 @@ L_08B4ADBC: L_08B4ADCC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(ctx.fpr[20])) && aot_fpr_12 == ctx.fpr[20])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AF8C; } @@ -6587,7 +6283,6 @@ L_08B4ADF4: ctx.gpr[23] = (ctx.gpr[18] | 0u); aot_gpr_4 = (static_cast(ctx.gpr[20]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4AF44; } @@ -6701,7 +6396,6 @@ L_08B4AF44: ctx.gpr[22] = (ctx.gpr[22] + static_cast(1)); aot_gpr_4 = (static_cast(ctx.gpr[21]) < static_cast(ctx.gpr[22]) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4ADF4; } @@ -6710,9 +6404,7 @@ L_08B4AF44: L_08B4AF54: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AF6C; } @@ -6724,9 +6416,7 @@ L_08B4AF68: L_08B4AF6C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4AF84; } @@ -6770,7 +6460,6 @@ L_08B4AFC4: ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[24] = std::bit_cast(std::bit_cast(ctx.fpr[24]) ^ 0x80000000u); goto L_08B4AFDC; @@ -6786,7 +6475,6 @@ L_08B4AFE4: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[20]) ^ 0x80000000u); goto L_08B4B000; @@ -6797,7 +6485,6 @@ L_08B4B000: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16329u << 16u); if (branch_taken) { @@ -6809,9 +6496,7 @@ L_08B4B01C: aot_gpr_4 = (aot_gpr_4 | 4059u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4B03C; } @@ -6829,7 +6514,6 @@ L_08B4B03C: aot_fpr_13 = ctx.fpr[24] - aot_fpr_12; aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4B054; @@ -6840,9 +6524,7 @@ L_08B4B054: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4B088; } @@ -6850,9 +6532,7 @@ L_08B4B054: } L_08B4B070: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4B090; } @@ -6907,7 +6587,17 @@ L_08B4B098: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4B0E0: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(560))); @@ -7039,7 +6729,6 @@ L_08B4B234: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(60), aot_gpr_6); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(5)))))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B4B24C; } @@ -7051,7 +6740,6 @@ L_08B4B244: goto L_08B4B24C; L_08B4B24C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4B25C; } @@ -7079,7 +6767,6 @@ L_08B4B268: goto L_08B4B27C; L_08B4B27C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4B4E4; } @@ -7096,7 +6783,6 @@ L_08B4B284: } L_08B4B290: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B3A8; } @@ -7124,7 +6810,6 @@ L_08B4B2C4: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 16u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B3A8; } @@ -7154,7 +6839,6 @@ L_08B4B30C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 32u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B3A8; } @@ -7169,7 +6853,6 @@ L_08B4B32C: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B38C; } @@ -7186,7 +6869,6 @@ L_08B4B344: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B38C; } @@ -7199,7 +6881,6 @@ L_08B4B370: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B3A8; } @@ -7207,7 +6888,6 @@ L_08B4B370: } L_08B4B38C: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4B3A8; } @@ -7216,7 +6896,6 @@ L_08B4B38C: L_08B4B394: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(56))); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B4E4; } @@ -7224,7 +6903,6 @@ L_08B4B394: } L_08B4B3A0: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B4B4E4; } @@ -7232,7 +6910,6 @@ L_08B4B3A0: } L_08B4B3A8: aot_gpr_31 = (0x08B4B3B0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4B3B0u) goto L_08B4B3B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B4B3B0: @@ -7304,7 +6981,6 @@ L_08B4B470: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4B4D0; } @@ -7339,7 +7015,6 @@ L_08B4B4B4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 56u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4B4D0; } @@ -7361,7 +7036,6 @@ L_08B4B4D0: } L_08B4B4E4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4B69C; } @@ -7381,7 +7055,6 @@ L_08B4B4F4: } L_08B4B4FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4B69C; } @@ -7390,7 +7063,6 @@ L_08B4B4FC: L_08B4B504: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[22] == aot_gpr_6; - // nop if (branch_taken) { goto L_08B4B5C0; } @@ -7418,7 +7090,6 @@ L_08B4B53C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 32u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B5C0; } @@ -7432,7 +7103,6 @@ L_08B4B55C: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B5B8; } @@ -7449,7 +7119,6 @@ L_08B4B570: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B5B8; } @@ -7462,7 +7131,6 @@ L_08B4B59C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(8)))))); aot_gpr_6 = (aot_gpr_6 & 64u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B5C0; } @@ -7470,7 +7138,6 @@ L_08B4B59C: } L_08B4B5B8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B4B69C; } @@ -7478,7 +7145,6 @@ L_08B4B5B8: } L_08B4B5C0: aot_gpr_31 = (0x08B4B5C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4B5C8u) goto L_08B4B5C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B4B5C8: @@ -7526,7 +7192,6 @@ L_08B4B648: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 56u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4B68C; } @@ -7547,7 +7212,6 @@ L_08B4B66C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(2)))))); aot_gpr_4 = (aot_gpr_4 & 7u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4B68C; } @@ -7578,7 +7242,6 @@ L_08B4B6A4: ctx.gpr[17] = (0u | 0u); aot_gpr_6 = (static_cast(ctx.gpr[17]) < static_cast(ctx.gpr[23]) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B4B834; } @@ -7626,7 +7289,6 @@ L_08B4B720: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2)))))); aot_gpr_5 = (aot_gpr_5 & 56u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4B764; } @@ -7647,7 +7309,6 @@ L_08B4B744: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(2)))))); aot_gpr_5 = (aot_gpr_5 & 7u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B4B764; } @@ -7658,7 +7319,6 @@ L_08B4B760: goto L_08B4B764; L_08B4B764: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4B81C; } @@ -7686,7 +7346,6 @@ L_08B4B798: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 32u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4B81C; } @@ -7700,7 +7359,6 @@ L_08B4B7B8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4B814; } @@ -7717,7 +7375,6 @@ L_08B4B7CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4B814; } @@ -7730,7 +7387,6 @@ L_08B4B7F8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 64u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4B81C; } @@ -7738,7 +7394,6 @@ L_08B4B7F8: } L_08B4B814: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4B834; } @@ -7756,7 +7411,6 @@ L_08B4B81C: goto L_08B4B834; L_08B4B834: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B4B844; } @@ -7836,7 +7490,6 @@ L_08B4B8D8: goto L_08B4B8F8; L_08B4B8F8: { const bool branch_taken = static_cast(ctx.gpr[16]) >= 0; - // nop if (branch_taken) { goto L_08B4B90C; } @@ -7853,14 +7506,12 @@ L_08B4B900: } L_08B4B90C: aot_gpr_31 = (0x08B4B914u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4B914u) goto L_08B4B914; AOT_REGCACHE_SYNC_OUT(); return; L_08B4B914: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1536u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4BA74; } @@ -7923,9 +7574,7 @@ L_08B4B924: aot_gpr_4 = (17220u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4BA74; } @@ -7933,7 +7582,6 @@ L_08B4B924: } L_08B4BA10: aot_gpr_31 = (0x08B4BA18u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4BA18u) goto L_08B4BA18; AOT_REGCACHE_SYNC_OUT(); return; L_08B4BA18: @@ -7967,7 +7615,6 @@ L_08B4BA48: } L_08B4BA50: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4BA68; } @@ -8017,7 +7664,6 @@ L_08B4BAA8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4BAC4; } @@ -8045,7 +7691,17 @@ L_08B4BAC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4BAF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(560))); @@ -8178,7 +7834,6 @@ L_08B4BC58: L_08B4BC64: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(60)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B4BD2C; } @@ -8192,7 +7847,6 @@ L_08B4BC74: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B4BD2C; } @@ -8260,7 +7914,6 @@ L_08B4BD24: L_08B4BD2C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(60)))))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B4BDF4; } @@ -8272,7 +7925,6 @@ L_08B4BD38: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_4 + ctx.gpr[20]); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B4BDF4; } @@ -8350,7 +8002,6 @@ L_08B4BDF4: L_08B4BE10: ctx.fpr[20] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[20] < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -8405,7 +8056,6 @@ L_08B4BE80: ctx.gpr[16] = (aot_gpr_4 << 16u); ctx.gpr[16] = (static_cast(static_cast(ctx.gpr[16]) >> 16u)); { const bool branch_taken = ctx.gpr[16] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4BEC0; } @@ -8413,7 +8063,6 @@ L_08B4BE80: } L_08B4BEB8: { const bool branch_taken = ctx.gpr[30] == 0u; - // nop if (branch_taken) { goto L_08B4BF84; } @@ -8455,7 +8104,6 @@ L_08B4BEC0: L_08B4BF38: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + ctx.fpr[22]; goto L_08B4BF4C; @@ -8469,7 +8117,6 @@ L_08B4BF4C: L_08B4BF54: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B4BF68; @@ -8477,9 +8124,7 @@ L_08B4BF54: goto L_08B4BF68; L_08B4BF68: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4BF84; } diff --git a/profiles/vcs/generated/generated_unit_0210.cpp b/profiles/vcs/generated/generated_unit_0210.cpp index 614cb3d..020fd5f 100644 --- a/profiles/vcs/generated/generated_unit_0210.cpp +++ b/profiles/vcs/generated/generated_unit_0210.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0210[4069] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 12, 0, 13, 0, 0, 0, 14, 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 17, 0, 0, 18, 19, 0, 20, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 24, 25, 0, - 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 29, 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 37, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 42, 0, 0, 0, 43, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 56, 0, 0, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 64, 0, 0, 0, 0, - 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 72, 0, 73, 0, 74, 0, 0, - 0, 75, 0, 0, 76, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 78, 79, 0, 0, 0, 0, 0, 80, 81, 82, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 87, 0, 0, 0, 0, 0, 88, 0, 89, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 0, 0, 0, 93, 0, 94, 0, 95, 0, 0, 96, 0, 97, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 0, 101, 0, 0, 0, 0, 0, 102, 0, 103, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 106, - 0, 0, 0, 0, 0, 107, 0, 108, 0, 109, 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 114, - 0, 115, 0, 116, 0, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 122, 0, 123, 0, 124, 0, 125, 0, 0, - 0, 0, 0, 0, 126, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 133, 0, 134, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 0, 0, 0, 140, 0, 0, 141, 0, 142, 0, - 0, 143, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, - 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 150, 0, 0, 151, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 154, 0, - 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 157, 0, 158, 0, 0, 159, 0, 160, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 163, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 166, 0, 167, 0, 0, 168, 0, 169, 0, - 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 172, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, - 175, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 179, 0, 180, 0, 181, - 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, 0, 186, 0, 0, - 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 194, 0, 0, 0, 0, - 0, 0, 195, 0, 196, 0, 0, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 201, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 0, 0, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 210, 0, 211, 0, 212, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 215, 0, 0, 216, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 0, 0, 225, 226, 0, 0, - 0, 0, 0, 227, 0, 228, 0, 0, 0, 0, 229, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 235, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, - 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, - 0, 246, 0, 0, 247, 0, 0, 248, 0, 0, 0, 0, 249, 0, 0, 250, 0, 0, 0, 251, 0, 0, 0, 0, 252, 253, 0, 254, 0, 0, 255, 0, - 0, 0, 0, 0, 256, 257, 0, 0, 0, 258, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 261, 0, 262, 0, 0, 0, - 0, 263, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 266, 0, 267, 0, 268, 0, 0, 269, 0, 270, 0, 0, - 0, 0, 0, 271, 0, 272, 273, 0, 274, 0, 0, 275, 0, 276, 0, 0, 277, 0, 278, 0, 279, 280, 0, 281, 0, 0, 282, 0, 283, 0, 0, 284, - 285, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 0, 291, 0, 0, - 0, 0, 292, 0, 0, 293, 0, 0, 294, 0, 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, - 299, 0, 300, 0, 0, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, - 0, 0, 305, 0, 0, 306, 0, 0, 0, 307, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 309, 0, 310, 0, 0, 0, 0, 311, 0, 312, 0, 0, - 0, 0, 0, 0, 0, 313, 314, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, - 0, 0, 324, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, 329, 0, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, - 0, 333, 0, 0, 0, 0, 0, 0, 334, 335, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, - 342, 0, 0, 0, 343, 0, 344, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 350, 0, 351, 0, 0, 352, 0, 0, 0, - 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 355, 356, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, - 0, 360, 0, 0, 0, 361, 0, 0, 0, 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 365, 0, 366, 0, 0, 0, - 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 370, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, - 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, - 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, 377, 0, 0, 0, 378, 379, 0, 0, 0, 380, 0, 0, 0, 0, 381, 0, 0, 0, - 382, 0, 0, 0, 0, 383, 0, 0, 384, 0, 0, 0, 0, 385, 0, 0, 0, 386, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, - 389, 0, 0, 0, 0, 390, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 392, 0, 0, 0, 393, 0, 394, 0, 0, 0, 395, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 401, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 404, 405, 0, 0, 406, 0, 0, 0, 0, 0, 407, 0, 0, 0, 408, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 410, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 412, 413, 0, 0, 0, 414, 0, 0, 0, 0, - 415, 0, 0, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419, 0, 0, 0, 0, - 0, 0, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 426, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 431, 0, 0, 0, 0, 0, 0, 432, 433, 0, 0, 434, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 0, 437, 0, 0, 438, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 448, 0, 0, - 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 452, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, 455, 0, 456, 0, 457, 0, 0, 0, 458, 0, 459, 0, 0, 0, 460, 0, 0, 0, - 0, 461, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 465, 0, 466, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, - 469, 0, 470, 0, 0, 0, 0, 471, 0, 0, 0, 472, 0, 0, 473, 0, 0, 0, 0, 474, 475, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, - 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481, 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 487, 0, 0, 0, 488, 0, 489, 0, 0, 0, 0, 490, 0, 0, - 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, - 0, 0, 495, 0, 0, 0, 496, 0, 0, 0, 0, 0, 497, 0, 0, 498, 0, 0, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 501, 0, 0, 0, 0, 0, 502, 503, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 506, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 511, - 0, 512, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 516, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 519, 520, 0, 0, 0, 521, 0, 0, 522, 0, 0, - 523, 0, 0, 524, 0, 0, 0, 0, 525, 0, 526, 0, 0, 0, 527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528, 0, 529, 0, 0, - 530, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 532, 0, 0, 0, 533, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 535, 0, 536, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 539, 0, 0, 0, 0, 0, 0, 0, 540, 0, - 0, 0, 0, 0, 0, 541, 0, 0, 0, 542, 543, 0, 0, 0, 0, 0, 0, 544, 0, 545, 0, 0, 0, 0, 0, 0, 546, 0, 547, 0, 548, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 551, 0, - 0, 552, 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, 555, 0, 0, 0, 0, 0, 0, 0, 556, 0, 557, 0, 0, 0, 0, 0, 558, 0, 559, - 0, 0, 560, 0, 561, 0, 562, 563, 0, 0, 0, 0, 0, 0, 0, 564, 0, 565, 0, 566, 0, 0, 567, 0, 0, 0, 568, 0, 0, 569, 0, 0, - 0, 0, 0, 0, 0, 570, 0, 571, 0, 572, 0, 573, 0, 574, 0, 0, 0, 0, 575, 576, 577, 0, 578, 579, 0, 0, 0, 0, 0, 0, 580, 0, - 0, 0, 0, 0, 581, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0210[64] = { + 0x8000008010250009ull, 0x604122C810A28888ull, 0x0200128000200030ull, 0x8020083004800100ull, + 0x0148808022400000ull, 0x2000091400008A89ull, 0x0000200409400880ull, 0x038302122A0428A0ull, + 0x0000000000000040ull, 0x0054140000088000ull, 0x00000280014A8280ull, 0x8100D2A0A0001505ull, + 0x000000000000006Aull, 0x2A82000040000080ull, 0xA040280000280050ull, 0x5204800000014100ull, + 0x500A48010090020Aull, 0x52A0004A00A95002ull, 0xA8080A0140009401ull, 0x0AAA080828202080ull, + 0x0AAAA0A012A01414ull, 0x0910000000000080ull, 0x8000080000080000ull, 0x0000001000100400ull, + 0x0009142830880000ull, 0x0010001050054010ull, 0x1020200004000400ull, 0x141006304B089092ull, + 0x94B5296829540006ull, 0x1084412422121021ull, 0x2850422420021085ull, 0x0404100020000860ull, + 0x2422210420A80000ull, 0x00812302A0000000ull, 0x1008445108000900ull, 0x2041301212840000ull, + 0x0402209114400622ull, 0x4000000000000004ull, 0x108C600000000080ull, 0x000000A102122121ull, + 0x0000000000091144ull, 0x0000000000000000ull, 0x0080020000000000ull, 0x4413400000220800ull, + 0x0002028108C08300ull, 0x0030800408000000ull, 0x0000000024000040ull, 0x24400004981402A0ull, + 0x0000000005000000ull, 0x0080005000540000ull, 0x0001400128000000ull, 0x5102001211454222ull, + 0x1018488502040000ull, 0x0050000000042404ull, 0x4010080421442842ull, 0x0013044000109044ull, + 0x8104008000110400ull, 0x246400200500002Aull, 0x0000000528004509ull, 0x0000000000000422ull, + 0x4050006800000000ull, 0x48100000540A0620ull, 0x244A80D4A0A02A02ull, 0x0000001040DC2AA0ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0210[64] = { + 1u, 9u, 26u, 33u, 41u, 49u, 60u, 67u, 83u, 84u, 91u, 100u, 115u, 119u, 126u, 135u, + 143u, 155u, 170u, 182u, 195u, 213u, 217u, 220u, 223u, 233u, 241u, 246u, 263u, 285u, 299u, 313u, + 320u, 331u, 339u, 349u, 360u, 373u, 375u, 382u, 392u, 398u, 398u, 400u, 409u, 419u, 424u, 427u, + 439u, 441u, 447u, 452u, 467u, 477u, 483u, 495u, 505u, 512u, 523u, 532u, 535u, 541u, 552u, 570u, }; void recomp_unit_0210_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0210_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B4C000u; - entry_id = (entry_delta < 16276u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0210[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16276u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0210[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0210[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B4C000; @@ -778,7 +685,6 @@ L_08B4C00C: goto L_08B4C040; L_08B4C040: { const bool branch_taken = static_cast(aot_gpr_16) >= 0; - // nop if (branch_taken) { goto L_08B4C054; } @@ -839,7 +745,6 @@ L_08B4C09C: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(160), std::bit_cast(ctx.fpr[15])); if (branch_taken) { @@ -851,7 +756,6 @@ L_08B4C0FC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4C1C0; } @@ -861,7 +765,6 @@ L_08B4C10C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4C1C0; } @@ -871,7 +774,6 @@ L_08B4C11C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 15u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4C1C0; } @@ -881,7 +783,6 @@ L_08B4C12C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(533)))))); aot_gpr_5 = (0u | 17u); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4C1C0; } @@ -889,14 +790,12 @@ L_08B4C12C: } L_08B4C13C: aot_gpr_31 = (0x08B4C144u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4C144u) goto L_08B4C144; AOT_REGCACHE_SYNC_OUT(); return; L_08B4C144: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1536u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4C1C0; } @@ -904,7 +803,6 @@ L_08B4C144: } L_08B4C154: aot_gpr_31 = (0x08B4C15Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4C15Cu) goto L_08B4C15C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4C15C: @@ -942,7 +840,6 @@ L_08B4C198: goto L_08B4C19C; L_08B4C19C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C1B4; } @@ -993,7 +890,6 @@ L_08B4C1F8: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C214; } @@ -1025,7 +921,17 @@ L_08B4C214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4C254: aot_gpr_29 = (aot_gpr_29 + static_cast(-272)); ctx.gpr[7] = (aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(560))); @@ -1137,7 +1043,6 @@ L_08B4C320: L_08B4C35C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(48)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B4C394; } @@ -1153,7 +1058,6 @@ L_08B4C368: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[17] + static_cast(0)))))); aot_gpr_5 = (ctx.lo); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B4C394; } @@ -1168,7 +1072,6 @@ L_08B4C394: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(444)))))); aot_gpr_4 = (static_cast(aot_gpr_4) < 1 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C49C; } @@ -1259,7 +1162,6 @@ L_08B4C3FC: L_08B4C458: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B4C474; } @@ -1305,7 +1207,6 @@ L_08B4C4BC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4C500; } @@ -1314,7 +1215,6 @@ L_08B4C4BC: L_08B4C4CC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(444)))))); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B4C500; } @@ -1342,7 +1242,6 @@ L_08B4C4E0: L_08B4C500: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(444)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C52C; } @@ -1352,7 +1251,6 @@ L_08B4C50C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[19] + static_cast(0)))))); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(ctx.gpr[18] + static_cast(0)))))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B4C52C; } @@ -1408,7 +1306,6 @@ L_08B4C53C: } L_08B4C588: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C5A0; } @@ -1427,7 +1324,6 @@ L_08B4C590: L_08B4C5A0: aot_gpr_4 = (0u | 25u); { const bool branch_taken = ctx.gpr[21] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B4C61C; } @@ -1498,7 +1394,6 @@ L_08B4C62C: goto L_08B4C658; L_08B4C658: { const bool branch_taken = static_cast(ctx.gpr[17]) >= 0; - // nop if (branch_taken) { goto L_08B4C66C; } @@ -1559,7 +1454,6 @@ L_08B4C6B4: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(212), std::bit_cast(ctx.fpr[15])); if (branch_taken) { @@ -1569,14 +1463,12 @@ L_08B4C6B4: } L_08B4C714: aot_gpr_31 = (0x08B4C71Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4C71Cu) goto L_08B4C71C; AOT_REGCACHE_SYNC_OUT(); return; L_08B4C71C: aot_gpr_4 = (ctx.gpr[2] & 65535u); aot_gpr_4 = (aot_gpr_4 & 1536u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4C790; } @@ -1584,7 +1476,6 @@ L_08B4C71C: } L_08B4C72C: aot_gpr_31 = (0x08B4C734u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B20934, 199u, 110u, 0x08B20934u>(ctx, &aot_mem, ctx.pc, ctx.hi, ctx.lo, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[28], aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0199_entry, 199u, 110u, 0x08B20934u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4C734u) goto L_08B4C734; AOT_REGCACHE_SYNC_OUT(); return; L_08B4C734: @@ -1618,7 +1509,6 @@ L_08B4C764: } L_08B4C76C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C784; } @@ -1668,7 +1558,6 @@ L_08B4C7C4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4C7E0; } @@ -1700,7 +1589,17 @@ L_08B4C7E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4C818: aot_gpr_29 = (aot_gpr_29 + static_cast(-304)); { const std::uint32_t aot_run_words[13]{std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[24]), aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], aot_gpr_31}; @@ -1841,7 +1740,6 @@ L_08B4C9B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B4C9C8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4CA60; } @@ -1877,7 +1775,6 @@ L_08B4C9D8: AOT_REGCACHE_SYNC_OUT(); return; L_08B4CA1C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4CA4C; } @@ -1894,7 +1791,6 @@ L_08B4CA24: AOT_REGCACHE_SYNC_OUT(); return; L_08B4CA3C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4CA60; } @@ -1952,7 +1848,6 @@ L_08B4CA60: AOT_REGCACHE_SYNC_OUT(); return; L_08B4CA9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B4CBB0; } @@ -2035,7 +1930,6 @@ L_08B4CB30: AOT_REGCACHE_SYNC_OUT(); return; L_08B4CB74: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4CBA4; } @@ -2087,7 +1981,6 @@ L_08B4CBBC: aot_mem.aot_direct_store32(ctx.gpr[18] + static_cast(676), std::bit_cast(aot_fpr_13)); aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[24])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B4CBE0; @@ -2098,9 +1991,7 @@ L_08B4CBE0: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4CC0C; } @@ -2108,7 +1999,6 @@ L_08B4CBE0: } L_08B4CBFC: aot_gpr_31 = (0x08B4CC04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 36u, 0x08B6033Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4CC04u) goto L_08B4CC04; AOT_REGCACHE_SYNC_OUT(); return; L_08B4CC04: @@ -2121,7 +2011,6 @@ L_08B4CC04: } L_08B4CC0C: aot_gpr_31 = (0x08B4CC14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0088_entry, 88u, 26u, 0x089644F8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4CC14u) goto L_08B4CC14; AOT_REGCACHE_SYNC_OUT(); return; L_08B4CC14: @@ -2301,7 +2190,17 @@ L_08B4CD1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4CD78: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(120), ctx.gpr[20]); @@ -2330,11 +2229,20 @@ L_08B4CDC4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-30704))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4CDDC: aot_gpr_31 = (0x08B4CDE4u); aot_gpr_4 = (aot_gpr_29 + static_cast(32)); @@ -2342,12 +2250,10 @@ L_08B4CDDC: AOT_REGCACHE_SYNC_OUT(); return; L_08B4CDE4: aot_gpr_31 = (0x08B4CDECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4CDECu) goto L_08B4CDEC; AOT_REGCACHE_SYNC_OUT(); return; L_08B4CDEC: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4D0C4; } @@ -2360,7 +2266,6 @@ L_08B4CDF4: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4D00C; } @@ -2368,7 +2273,6 @@ L_08B4CDF4: } L_08B4CE10: aot_gpr_31 = (0x08B4CE18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4CE18u) goto L_08B4CE18; AOT_REGCACHE_SYNC_OUT(); return; L_08B4CE18: @@ -2398,9 +2302,7 @@ L_08B4CE18: aot_gpr_4 = (16128u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4D00C; } @@ -2408,7 +2310,6 @@ L_08B4CE18: } L_08B4CE4C: aot_gpr_31 = (0x08B4CE54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4CE54u) goto L_08B4CE54; AOT_REGCACHE_SYNC_OUT(); return; L_08B4CE54: @@ -2433,7 +2334,6 @@ L_08B4CE54: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4CEF4; } @@ -2496,7 +2396,6 @@ L_08B4CF20: goto L_08B4CF38; L_08B4CF38: aot_gpr_31 = (0x08B4CF40u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4CF40u) goto L_08B4CF40; AOT_REGCACHE_SYNC_OUT(); return; L_08B4CF40: @@ -2555,9 +2454,7 @@ L_08B4CF40: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; aot_fpr_13 = std::sqrt(aot_fpr_13); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4D004; } @@ -2566,7 +2463,6 @@ L_08B4CF40: L_08B4CFBC: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(534)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4D004; } @@ -2579,7 +2475,6 @@ L_08B4CFC8: aot_gpr_4 = (aot_gpr_4 >> 22u); aot_gpr_4 = (aot_gpr_4 & 2u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4CFF0; } @@ -2605,7 +2500,6 @@ L_08B4CFF8: goto L_08B4D004; L_08B4D004: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0C4; } @@ -2683,7 +2577,6 @@ L_08B4D0B8: goto L_08B4D0C4; L_08B4D0C4: aot_gpr_31 = (0x08B4D0CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0087_entry, 87u, 28u, 0x089602C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4D0CCu) goto L_08B4D0CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B4D0CC: @@ -2700,7 +2593,6 @@ L_08B4D0CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D0F0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D4EC; } @@ -2709,7 +2601,6 @@ L_08B4D0F0: L_08B4D0F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4D130; } @@ -2731,7 +2622,6 @@ L_08B4D104: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D130: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -2773,7 +2663,6 @@ L_08B4D15C: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -2782,7 +2671,6 @@ L_08B4D184: L_08B4D18C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4D1D4; } @@ -2808,7 +2696,6 @@ L_08B4D198: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D1D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -2850,7 +2737,6 @@ L_08B4D200: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D228: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -2859,7 +2745,6 @@ L_08B4D228: L_08B4D230: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(440))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4D278; } @@ -2885,7 +2770,6 @@ L_08B4D23C: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D278: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -2905,7 +2789,6 @@ L_08B4D280: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D2A4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -2946,7 +2829,6 @@ L_08B4D2EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D2F4: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4D31C; } @@ -2972,7 +2854,6 @@ L_08B4D31C: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4D354; } @@ -3002,7 +2883,6 @@ L_08B4D354: goto L_08B4D51C; L_08B4D36C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3014,7 +2894,6 @@ L_08B4D374: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4D3AC; } @@ -3044,7 +2923,6 @@ L_08B4D3AC: goto L_08B4D51C; L_08B4D3C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3056,7 +2934,6 @@ L_08B4D3CC: goto L_08B4DF74; L_08B4D3D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3068,7 +2945,6 @@ L_08B4D3DC: goto L_08B4E61C; L_08B4D3E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3103,7 +2979,6 @@ L_08B4D410: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D428: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3123,7 +2998,6 @@ L_08B4D430: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D454: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3154,7 +3028,6 @@ L_08B4D470: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D494: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3171,7 +3044,6 @@ L_08B4D49C: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D4B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3183,7 +3055,6 @@ L_08B4D4BC: goto L_08B4EADC; L_08B4D4C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3196,7 +3067,6 @@ L_08B4D4CC: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D4D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3204,7 +3074,6 @@ L_08B4D4D4: } L_08B4D4DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3212,7 +3081,6 @@ L_08B4D4DC: } L_08B4D4E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4D0F0; } @@ -3237,7 +3105,17 @@ L_08B4D4EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4D51C: aot_gpr_29 = (aot_gpr_29 + static_cast(-288)); ctx.gpr[9] = (aot_gpr_4 + static_cast(16)); @@ -3471,7 +3349,6 @@ L_08B4D790: } L_08B4D84C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[30]; const float ft = aot_fpr_12; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B4D874; @@ -3480,9 +3357,7 @@ L_08B4D84C: L_08B4D85C: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5356))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4D894; } @@ -3495,9 +3370,7 @@ L_08B4D874: aot_fpr_12 = aot_fpr_13 / aot_fpr_12; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5360))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4D894; } @@ -3519,7 +3392,6 @@ L_08B4D894: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D8A8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4D978; } @@ -3582,7 +3454,6 @@ L_08B4D910: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D938: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4DF2C; } @@ -3611,7 +3482,6 @@ L_08B4D948: AOT_REGCACHE_SYNC_OUT(); return; L_08B4D970: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4DF2C; } @@ -3746,7 +3616,6 @@ L_08B4DAD4: L_08B4DAF0: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -3768,7 +3637,6 @@ L_08B4DB10: L_08B4DB1C: ctx.fpr[26] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -3785,7 +3653,6 @@ L_08B4DB3C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(532)))))); aot_gpr_5 = (0u | 2u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4DB64; } @@ -3817,7 +3684,6 @@ L_08B4DB78: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(188))); if (branch_taken) { @@ -3830,9 +3696,7 @@ L_08B4DB90: goto L_08B4DB94; L_08B4DB94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4DBA8; } @@ -3857,9 +3721,7 @@ L_08B4DBA8: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5372))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4DC08; } @@ -3869,9 +3731,7 @@ L_08B4DBD0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5376))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4DBF0; } @@ -3884,9 +3744,7 @@ L_08B4DBE8: L_08B4DBF0: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5376))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4DC08; } @@ -3935,7 +3793,6 @@ L_08B4DC08: } L_08B4DC48: { const bool branch_taken = static_cast(aot_gpr_16) < 0; - // nop if (branch_taken) { goto L_08B4DCA0; } @@ -3943,7 +3800,6 @@ L_08B4DC48: } L_08B4DC50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4DC60; } @@ -3951,7 +3807,6 @@ L_08B4DC50: } L_08B4DC58: { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B4DCA0; } @@ -3960,7 +3815,6 @@ L_08B4DC58: L_08B4DC60: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(535)))))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4DC8C; } @@ -3977,7 +3831,6 @@ L_08B4DC74: ctx.fpr[24] = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fpr[24] = ctx.fpr[0] / ctx.fpr[24]; { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4DC98; } @@ -3993,7 +3846,6 @@ L_08B4DC94: goto L_08B4DC98; L_08B4DC98: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4DCA0; } @@ -4010,7 +3862,6 @@ L_08B4DCA0: } L_08B4DCAC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4DCDC; } @@ -4024,7 +3875,6 @@ L_08B4DCB4: AOT_REGCACHE_SYNC_OUT(); return; L_08B4DCC0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4DCD4; } @@ -4040,7 +3890,6 @@ L_08B4DCD0: goto L_08B4DCD4; L_08B4DCD4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4DCDC; } @@ -4054,7 +3903,6 @@ L_08B4DCDC: AOT_REGCACHE_SYNC_OUT(); return; L_08B4DCE8: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4DD00; } @@ -4090,7 +3938,6 @@ L_08B4DD14: L_08B4DD30: ctx.fpr[22] = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4121,7 +3968,6 @@ L_08B4DD64: L_08B4DD74: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4144,7 +3990,6 @@ L_08B4DDA0: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_gpr_4 = (16256u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_4); if (branch_taken) { @@ -4169,7 +4014,6 @@ L_08B4DDC8: L_08B4DDDC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5384))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[30] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); if (branch_taken) { @@ -4203,7 +4047,6 @@ L_08B4DE08: L_08B4DE1C: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[30])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B4DE30; @@ -4212,7 +4055,6 @@ L_08B4DE1C: L_08B4DE30: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[24])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B4DE44; @@ -4228,7 +4070,6 @@ L_08B4DE44: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), std::bit_cast(ctx.fpr[28])); ctx.fpr[15] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5388))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_13 = aot_fpr_14 - aot_fpr_12; if (branch_taken) { @@ -4239,9 +4080,7 @@ L_08B4DE44: L_08B4DE74: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5392))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4DE94; } @@ -4258,7 +4097,6 @@ L_08B4DE88: } L_08B4DE94: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[28])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_mem.aot_direct_store32(ctx.gpr[19] + static_cast(0), std::bit_cast(ctx.fpr[28])); goto L_08B4DEF4; @@ -4267,7 +4105,6 @@ L_08B4DE94: L_08B4DEA4: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5396))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5404))); goto L_08B4DED8; @@ -4277,7 +4114,6 @@ L_08B4DEB8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5400))); aot_fpr_13 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08B4DED0; @@ -4294,7 +4130,6 @@ L_08B4DED0: L_08B4DED8: aot_fpr_13 = aot_fpr_13 / aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[26] < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[26])); goto L_08B4DEEC; @@ -4314,7 +4149,6 @@ L_08B4DEF4: ctx.fpr[28] = ctx.fpr[28] / aot_fpr_12; aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5348))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[28] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[28] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5348))); goto L_08B4DF14; @@ -4355,7 +4189,17 @@ L_08B4DF2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4DF74: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_gpr_5 = (15969u << 16u); @@ -4387,7 +4231,6 @@ L_08B4DFC8: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_gpr_16 + static_cast(48)); if (branch_taken) { @@ -4418,7 +4261,6 @@ L_08B4DFE8: ctx.fpr[28] = std::bit_cast(aot_gpr_4); aot_gpr_4 = (aot_gpr_29 + static_cast(80)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[17] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -4428,7 +4270,6 @@ L_08B4DFE8: } L_08B4E04C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4E0C4; } @@ -4436,7 +4277,6 @@ L_08B4E04C: } L_08B4E054: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4E5F8; } @@ -4446,9 +4286,7 @@ L_08B4E05C: aot_gpr_5 = (17046u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E088; } @@ -4469,9 +4307,7 @@ L_08B4E088: aot_gpr_5 = (16672u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E0B4; } @@ -4496,9 +4332,7 @@ L_08B4E0B4: goto L_08B4E0C4; L_08B4E0C4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[24]) || std::isnan(ctx.fpr[26])) && ctx.fpr[24] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E0E8; } @@ -4561,9 +4395,7 @@ L_08B4E0F4: ctx.fpr[16] = ctx.fpr[18] + ctx.fpr[19]; ctx.fpr[16] = std::sqrt(ctx.fpr[16]); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(ctx.fpr[16]) || std::isnan(ctx.fpr[26])) && ctx.fpr[16] == ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E17C; } @@ -4599,7 +4431,6 @@ L_08B4E1A0: goto L_08B4E1A4; L_08B4E1A4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[18] <= ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { { const float fs = ctx.fpr[18]; const float ft = aot_fpr_14; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_12 = std::bit_cast(0x7FC00000u); else aot_fpr_12 = fs * ft; } goto L_08B4E1C0; @@ -4676,7 +4507,6 @@ L_08B4E22C: L_08B4E26C: ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4E280; @@ -4684,9 +4514,7 @@ L_08B4E26C: goto L_08B4E280; L_08B4E280: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E298; } @@ -4702,7 +4530,6 @@ L_08B4E290: } L_08B4E298: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_5 = (16320u << 16u); if (branch_taken) { @@ -4759,9 +4586,7 @@ L_08B4E2F0: aot_gpr_4 = (16640u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E364; } @@ -4770,9 +4595,7 @@ L_08B4E2F0: L_08B4E348: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1860))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E364; } @@ -4795,7 +4618,6 @@ L_08B4E364: L_08B4E370: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -4814,7 +4636,6 @@ L_08B4E390: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(1860))); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_fpr_20 = aot_fpr_20 + aot_fpr_12; if (branch_taken) { @@ -4835,7 +4656,6 @@ L_08B4E3C0: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_08B4E3D8; @@ -4846,9 +4666,7 @@ L_08B4E3D8: aot_gpr_4 = (aot_gpr_4 | 52429u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E424; } @@ -4856,9 +4674,7 @@ L_08B4E3D8: } L_08B4E3F4: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E414; } @@ -4897,7 +4713,6 @@ L_08B4E428: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4E458; @@ -4905,9 +4720,7 @@ L_08B4E428: goto L_08B4E458; L_08B4E458: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E470; } @@ -4923,9 +4736,7 @@ L_08B4E468: } L_08B4E470: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E490; } @@ -5144,7 +4955,17 @@ L_08B4E5F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4E61C: aot_gpr_29 = (aot_gpr_29 + static_cast(-176)); aot_gpr_5 = (aot_gpr_4 + static_cast(48)); @@ -5177,7 +4998,6 @@ L_08B4E61C: ctx.fpr[22] = std::bit_cast(0u); aot_gpr_5 = (16544u << 16u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.fpr[26] = std::bit_cast(aot_gpr_5); if (branch_taken) { @@ -5190,9 +5010,7 @@ L_08B4E6B4: goto L_08B4E6B8; L_08B4E6B8: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E6CC; } @@ -5211,7 +5029,6 @@ L_08B4E6CC: L_08B4E6DC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 + ctx.fpr[24]; goto L_08B4E6F0; @@ -5219,9 +5036,7 @@ L_08B4E6DC: goto L_08B4E6F0; L_08B4E6F0: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E714; } @@ -5230,9 +5045,7 @@ L_08B4E6F0: L_08B4E700: aot_fpr_12 = aot_fpr_12 - ctx.fpr[24]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[24])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E700; } @@ -5247,9 +5060,7 @@ L_08B4E714: L_08B4E720: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E744; } @@ -5273,7 +5084,6 @@ L_08B4E744: L_08B4E750: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4E764; @@ -5284,9 +5094,7 @@ L_08B4E764: aot_gpr_4 = (aot_gpr_4 | 52429u); ctx.fpr[15] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E79C; } @@ -5295,7 +5103,6 @@ L_08B4E764: L_08B4E780: aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4E794; @@ -5330,7 +5137,6 @@ L_08B4E79C: { const float fs = aot_fpr_14; const float ft = ctx.fpr[15]; if ((std::isinf(fs) && ft == 0.0f) || (std::isinf(ft) && fs == 0.0f)) aot_fpr_14 = std::bit_cast(0x7FC00000u); else aot_fpr_14 = fs * ft; } ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[15] < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.fpr[15] = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4E808; @@ -5338,9 +5144,7 @@ L_08B4E79C: goto L_08B4E808; L_08B4E808: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= ctx.fpr[15])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E820; } @@ -5356,9 +5160,7 @@ L_08B4E818: } L_08B4E820: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4E840; } @@ -5704,7 +5506,17 @@ L_08B4EAA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4EADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_16); @@ -5732,7 +5544,6 @@ L_08B4EB2C: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(440))); if (branch_taken) { @@ -5771,7 +5582,6 @@ L_08B4EB54: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B4EBC0; } @@ -5827,7 +5637,6 @@ L_08B4EBF8: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B4EC20; @@ -5840,9 +5649,7 @@ L_08B4EC24: aot_gpr_5 = (16968u << 16u); aot_fpr_12 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4EC5C; } @@ -5853,7 +5660,6 @@ L_08B4EC3C: aot_gpr_5 = (16840u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B4EC58; @@ -5881,9 +5687,7 @@ L_08B4EC80: aot_gpr_4 = (17254u << 16u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4ECA4; } @@ -5908,7 +5712,17 @@ L_08B4ECA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4ECC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-800)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -5959,7 +5773,6 @@ L_08B4ED6C: aot_fpr_12 = std::bit_cast(aot_gpr_4); aot_fpr_12 = static_cast(static_cast(std::bit_cast(aot_fpr_12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(76))); goto L_08B4EDD4; @@ -5984,7 +5797,6 @@ L_08B4ED88: aot_gpr_4 = (aot_gpr_4 | 55050u); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(76))); goto L_08B4EDD4; @@ -6011,8 +5823,6 @@ L_08B4EDD4: aot_gpr_4 = (ctx.gpr[7] + aot_gpr_4); { const std::uint32_t dividend = aot_gpr_5; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_5 = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } aot_gpr_4 = (ctx.hi); aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); @@ -6185,7 +5995,6 @@ L_08B4EF24: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1956))); aot_fpr_12 = aot_fpr_14 + aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_13)); goto L_08B4EF48; @@ -6204,7 +6013,6 @@ L_08B4EF50: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1956))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B4EF6C; @@ -6366,7 +6174,6 @@ L_08B4EFF4: AOT_REGCACHE_SYNC_OUT(); return; L_08B4F060: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4F340; } @@ -6536,7 +6343,6 @@ L_08B4F068: AOT_REGCACHE_SYNC_OUT(); return; L_08B4F148: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4F158; } @@ -6567,7 +6373,6 @@ L_08B4F158: AOT_REGCACHE_SYNC_OUT(); return; L_08B4F190: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4F1DC; } @@ -6740,7 +6545,6 @@ L_08B4F1DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B4F26C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4F280; } @@ -6826,9 +6630,7 @@ L_08B4F2C0: goto L_08B4F304; L_08B4F304: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[24] <= ctx.fpr[26])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F324; } @@ -6853,7 +6655,6 @@ L_08B4F324: goto L_08B4F338; L_08B4F338: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4F348; } @@ -6867,7 +6668,6 @@ L_08B4F348: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(533)))))); aot_gpr_5 = (0u | 36u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B4F360; } @@ -6887,7 +6687,6 @@ L_08B4F360: L_08B4F370: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -6911,7 +6710,6 @@ L_08B4F390: aot_fpr_12 = aot_fpr_14 + aot_fpr_12; aot_fpr_12 = ctx.fpr[15] - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1936), std::bit_cast(ctx.fpr[22])); if (branch_taken) { @@ -6961,7 +6759,6 @@ L_08B4F3F8: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1936), std::bit_cast(aot_fpr_13)); aot_fpr_12 = aot_fpr_13 - ctx.fpr[26]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[16])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08B4F448; @@ -6972,7 +6769,6 @@ L_08B4F448: aot_gpr_4 = (aot_gpr_4 | 39322u); aot_fpr_14 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_14)); goto L_08B4F464; @@ -6983,7 +6779,6 @@ L_08B4F464: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1936), std::bit_cast(aot_fpr_13)); aot_fpr_13 = ctx.fpr[15] - aot_fpr_20; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -6998,9 +6793,7 @@ L_08B4F480: L_08B4F488: aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F488; } @@ -7008,7 +6801,6 @@ L_08B4F488: } L_08B4F49C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (49152u << 16u); if (branch_taken) { @@ -7024,9 +6816,7 @@ L_08B4F4AC: L_08B4F4B8: aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F4B8; } @@ -7041,7 +6831,6 @@ L_08B4F4D0: aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[16])); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1924), std::bit_cast(aot_fpr_14)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1924))); goto L_08B4F4F0; @@ -7051,7 +6840,6 @@ L_08B4F4F0: aot_gpr_4 = (49024u << 16u); ctx.fpr[17] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[17] <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_08B4F508; @@ -7063,9 +6851,7 @@ L_08B4F508: aot_gpr_4 = (17008u << 16u); ctx.fpr[18] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[18])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F534; } @@ -7074,7 +6860,6 @@ L_08B4F508: L_08B4F528: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(720))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4F548; } @@ -7180,7 +6965,6 @@ L_08B4F548: aot_fpr_14 = static_cast(static_cast(std::bit_cast(aot_fpr_14))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(537))); goto L_08B4F5D8; @@ -7188,7 +6972,6 @@ L_08B4F548: goto L_08B4F5D0; L_08B4F5D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4F604; } @@ -7210,9 +6993,7 @@ L_08B4F5D8: L_08B4F604: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F708; } @@ -7221,7 +7002,6 @@ L_08B4F604: L_08B4F618: aot_fpr_20 = aot_fpr_20 - ctx.fpr[15]; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7236,9 +7016,7 @@ L_08B4F62C: L_08B4F634: aot_fpr_20 = aot_fpr_20 + aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 < ctx.fpr[28])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F634; } @@ -7246,7 +7024,6 @@ L_08B4F634: } L_08B4F648: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (16585u << 16u); if (branch_taken) { @@ -7261,9 +7038,7 @@ L_08B4F658: L_08B4F660: aot_fpr_20 = aot_fpr_20 - aot_fpr_13; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_20 <= ctx.fpr[30])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F660; } @@ -7272,7 +7047,6 @@ L_08B4F660: L_08B4F674: aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20)); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_20) ^ 0x80000000u); goto L_08B4F688; @@ -7285,7 +7059,6 @@ L_08B4F688: aot_fpr_14 = aot_fpr_13 / aot_fpr_14; aot_fpr_14 = ctx.fpr[16] - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B4F6AC; @@ -7298,7 +7071,6 @@ L_08B4F6AC: aot_gpr_4 = (aot_gpr_4 | 4059u); ctx.fpr[19] = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[19])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(1928), std::bit_cast(aot_fpr_14)); if (branch_taken) { @@ -7330,9 +7102,7 @@ L_08B4F6D0: aot_gpr_4 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F708; } @@ -7346,9 +7116,7 @@ L_08B4F6F8: goto L_08B4F708; L_08B4F708: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F73C; } @@ -7358,7 +7126,6 @@ L_08B4F718: aot_fpr_14 = std::bit_cast(std::bit_cast(ctx.fpr[16])); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_14 = std::bit_cast(std::bit_cast(aot_fpr_12)); goto L_08B4F730; @@ -7372,9 +7139,7 @@ L_08B4F730: L_08B4F73C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[22])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4F7C4; } @@ -7412,7 +7177,6 @@ L_08B4F750: aot_fpr_14 = std::bit_cast(aot_gpr_4); aot_fpr_12 = aot_fpr_12 / aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[16] < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[16])); goto L_08B4F798; @@ -7420,7 +7184,6 @@ L_08B4F750: goto L_08B4F798; L_08B4F798: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((ctx.fpr[22] <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[22])); goto L_08B4F7A8; @@ -7430,7 +7193,6 @@ L_08B4F7A8: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); goto L_08B4F7C0; @@ -7442,7 +7204,6 @@ L_08B4F7C0: L_08B4F7C4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[20] + static_cast(1968))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4F828; } @@ -7515,7 +7276,6 @@ L_08B4F828: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[16])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(1928))); goto L_08B4F840; @@ -7523,7 +7283,6 @@ L_08B4F828: goto L_08B4F840; L_08B4F840: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[17])) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[17])); goto L_08B4F850; @@ -7555,7 +7314,17 @@ L_08B4F850: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4F89C: aot_gpr_29 = (aot_gpr_29 + static_cast(-336)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(316), ctx.gpr[17]); @@ -7598,7 +7367,6 @@ L_08B4F8E0: ctx.gpr[19] = (0u | 0u); ctx.gpr[18] = (0u | 0u); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4F904; } @@ -7622,7 +7390,6 @@ L_08B4F904: } L_08B4F90C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4F9E8; } @@ -7652,7 +7419,6 @@ L_08B4F914: AOT_REGCACHE_SYNC_OUT(); return; L_08B4F960: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4F9D8; } @@ -7669,7 +7435,6 @@ L_08B4F968: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(8)))))); aot_gpr_4 = (aot_gpr_4 & 256u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4F9D8; } @@ -7694,7 +7459,6 @@ L_08B4F994: L_08B4F9C8: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_29 + static_cast(176)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4F9D8; } @@ -7716,7 +7480,6 @@ L_08B4F9D8: L_08B4F9E8: aot_gpr_4 = (static_cast(ctx.gpr[19]) < 5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4FE98; } @@ -7787,7 +7550,6 @@ L_08B4FA38: AOT_REGCACHE_SYNC_OUT(); return; L_08B4FA6C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4FA80; } @@ -7865,7 +7627,6 @@ L_08B4FA88: aot_fpr_12 = std::sqrt(aot_fpr_12); aot_fpr_14 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_14)) && aot_fpr_12 == aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(80))); goto L_08B4FB14; @@ -8030,7 +7791,6 @@ L_08B4FB28: AOT_REGCACHE_SYNC_OUT(); return; L_08B4FC8C: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4FC98; } @@ -8058,7 +7818,6 @@ L_08B4FC98: AOT_REGCACHE_SYNC_OUT(); return; L_08B4FCD0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B4FD28; } @@ -8070,7 +7829,6 @@ L_08B4FCD8: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(104))); aot_fpr_13 = aot_fpr_13 - aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_13 = std::bit_cast(std::bit_cast(aot_fpr_13) ^ 0x80000000u); goto L_08B4FCF8; @@ -8081,7 +7839,6 @@ L_08B4FCF8: aot_fpr_14 = std::bit_cast(0u); aot_fpr_12 = aot_fpr_20 - aot_fpr_12; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_12) ^ 0x80000000u); goto L_08B4FD14; @@ -8089,9 +7846,7 @@ L_08B4FCF8: goto L_08B4FD14; L_08B4FD14: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4FD28; } @@ -8105,9 +7860,7 @@ L_08B4FD28: aot_gpr_4 = (aot_gpr_4 | 27432u); aot_fpr_12 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_20) || std::isnan(aot_fpr_12)) && aot_fpr_20 == aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B4FD70; } @@ -8115,7 +7868,6 @@ L_08B4FD28: } L_08B4FD44: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B4FD68; } @@ -8214,7 +7966,6 @@ L_08B4FDEC: L_08B4FDF8: aot_gpr_4 = (static_cast(aot_gpr_16) < 194 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B4FE5C; } @@ -8233,7 +7984,6 @@ L_08B4FE04: AOT_REGCACHE_SYNC_OUT(); return; L_08B4FE24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4FE5C; } @@ -8241,7 +7991,6 @@ L_08B4FE24: } L_08B4FE2C: { const bool branch_taken = aot_gpr_16 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B4FE5C; } @@ -8260,7 +8009,6 @@ L_08B4FE34: AOT_REGCACHE_SYNC_OUT(); return; L_08B4FE54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B4FE5C; } @@ -8272,7 +8020,6 @@ L_08B4FE5C: aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(618), static_cast(aot_gpr_4)); aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[28] + static_cast(-7080))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4FE90; } @@ -8286,7 +8033,6 @@ L_08B4FE74: L_08B4FE7C: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4FE90; } @@ -8323,21 +8069,49 @@ L_08B4FE9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4FEBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4FEC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4FECC: ctx.gpr[2] = (2229u << 16u); jump_target = aot_gpr_31; @@ -8345,12 +8119,21 @@ L_08B4FECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4FED8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B4FEE8u); - // nop goto L_08B4FECC; L_08B4FEE8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); @@ -8359,7 +8142,17 @@ L_08B4FEE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4FEF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8388,7 +8181,6 @@ L_08B4FF24: goto L_08B4FF2C; L_08B4FF2C: aot_gpr_31 = (0x08B4FF34u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0095_entry, 95u, 115u, 0x08980688u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B4FF34u) goto L_08B4FF34; AOT_REGCACHE_SYNC_OUT(); return; L_08B4FF34: @@ -8410,7 +8202,6 @@ L_08B4FF4C: goto L_08B4FF50; L_08B4FF50: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B4FF5C; } @@ -8433,7 +8224,17 @@ L_08B4FF5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B4FF78: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; diff --git a/profiles/vcs/generated/generated_unit_0211.cpp b/profiles/vcs/generated/generated_unit_0211.cpp index 288bd0a..6c816d4 100644 --- a/profiles/vcs/generated/generated_unit_0211.cpp +++ b/profiles/vcs/generated/generated_unit_0211.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0211[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 13, 0, 0, 0, 0, 14, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 21, 0, 22, 0, 0, 23, 0, 24, 0, 0, - 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 27, 0, 0, 28, 0, 29, 0, 30, 0, 31, 0, 0, 0, 32, 0, 0, - 33, 0, 34, 0, 35, 0, 0, 36, 0, 0, 37, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 39, 0, 40, 0, 41, 0, 0, 42, 0, - 43, 0, 44, 0, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 0, 49, 0, 50, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 54, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 58, 0, 0, 59, 0, 60, - 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 72, 0, 73, - 0, 0, 74, 0, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 0, 80, 0, 0, 81, 0, 82, 0, 0, 83, 0, 84, 0, 0, 85, 0, 86, - 87, 0, 88, 0, 0, 89, 0, 0, 90, 0, 91, 92, 0, 93, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 0, 0, 96, 0, 97, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 0, 0, 103, 0, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, 106, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 109, 0, 0, 0, 110, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 113, 0, 114, 0, 115, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 117, 118, 0, 119, 0, 0, 0, 120, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 122, 0, 123, 124, 0, 0, 0, 125, 126, 0, 127, 0, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 133, 0, 0, 134, 135, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 139, 0, 140, 0, 0, 0, - 0, 0, 0, 141, 0, 142, 0, 143, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 149, 150, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 155, 156, 0, 157, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 0, 160, 161, 0, 162, 0, 0, 163, 0, 164, 0, 165, 166, 0, 167, 0, 168, 0, 169, 0, 170, 171, 0, 172, 0, 173, 0, 0, 174, - 0, 175, 176, 0, 177, 0, 178, 0, 0, 179, 0, 0, 0, 180, 0, 181, 182, 0, 183, 0, 184, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, - 0, 186, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 189, 0, 190, 0, 0, 0, 0, 0, - 0, 191, 0, 192, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 200, 0, 0, 0, 0, 0, 0, 0, 201, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 0, 0, 205, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 209, 0, 0, 210, 0, 211, 0, 0, 212, 0, 0, 213, - 0, 214, 0, 215, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 219, 0, 220, 0, 221, 0, 0, 0, - 222, 223, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 225, 0, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 231, 0, 0, 232, 0, 0, 0, 0, 233, 0, 234, 0, 235, 236, 0, 0, 0, 0, 237, 0, 238, 0, 239, 0, - 0, 0, 0, 0, 0, 240, 0, 241, 0, 242, 243, 0, 0, 0, 0, 0, 0, 244, 0, 245, 246, 0, 247, 0, 0, 248, 0, 249, 0, 0, 250, 0, - 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 254, 0, 0, 255, 256, 0, 0, 257, 0, 0, 258, 259, 0, - 0, 0, 0, 260, 0, 0, 0, 261, 0, 262, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 264, 0, 0, 0, 0, 265, 0, 0, 0, 266, 0, 267, - 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 273, 0, 0, 0, 274, 0, - 0, 0, 0, 275, 0, 0, 276, 0, 277, 0, 0, 0, 278, 0, 0, 0, 0, 279, 0, 0, 0, 0, 280, 0, 0, 281, 0, 282, 0, 0, 0, 0, - 0, 283, 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 286, 0, 287, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, - 291, 0, 292, 0, 0, 0, 293, 0, 0, 294, 0, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 298, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, - 300, 0, 301, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 304, 0, 305, 0, 306, 0, 0, 307, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 309, 0, 310, 0, 0, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 313, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 316, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 317, 0, 0, 0, 318, 0, 319, 0, 0, 320, 0, 321, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 327, 0, 328, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 331, 0, - 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 334, 0, 335, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, - 0, 0, 340, 341, 0, 0, 0, 342, 0, 0, 343, 0, 344, 345, 0, 346, 0, 347, 0, 0, 348, 0, 349, 0, 350, 0, 0, 0, 0, 0, 0, 0, - 0, 351, 0, 0, 0, 352, 0, 353, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 355, 0, 0, 356, 0, 357, 0, 358, 0, 0, 359, 0, 0, 360, - 0, 361, 0, 362, 0, 363, 0, 364, 0, 0, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, - 370, 0, 371, 0, 0, 372, 0, 0, 373, 0, 374, 375, 0, 376, 0, 0, 0, 377, 0, 378, 379, 0, 380, 0, 0, 381, 0, 382, 0, 383, 384, 0, - 385, 0, 386, 0, 0, 387, 0, 388, 389, 0, 390, 0, 0, 391, 0, 0, 392, 0, 393, 394, 0, 395, 0, 0, 0, 0, 396, 0, 397, 0, 398, 0, - 399, 400, 0, 401, 0, 402, 0, 0, 403, 0, 404, 405, 0, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 408, 0, 409, 0, 410, 0, - 0, 0, 0, 0, 0, 411, 0, 412, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, 417, 0, 0, 0, - 418, 0, 0, 419, 420, 421, 0, 422, 0, 423, 0, 0, 0, 424, 0, 0, 425, 426, 427, 0, 428, 0, 429, 0, 430, 0, 0, 0, 431, 0, 0, 432, - 433, 434, 0, 435, 0, 436, 0, 0, 0, 437, 0, 0, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 441, 0, 442, 0, 0, 0, 0, 443, 0, - 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 445, 0, 446, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, 449, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, 451, 0, 452, 0, 0, 0, 0, 0, 0, 0, 453, 0, 454, 0, 0, 0, - 0, 0, 0, 0, 0, 455, 456, 0, 457, 0, 0, 0, 0, 0, 0, 458, 0, 459, 0, 0, 460, 0, 0, 461, 0, 0, 462, 0, 463, 464, 0, 465, - 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 468, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 471, 0, 472, - 0, 473, 0, 474, 475, 0, 0, 0, 0, 476, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, 0, 479, 0, 480, 0, 481, 482, 0, 0, 0, 0, 0, - 0, 483, 0, 484, 485, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 488, 0, 489, 0, 0, 0, 0, 0, 0, 490, 0, 0, - 0, 0, 0, 0, 0, 0, 491, 0, 0, 492, 0, 493, 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, - 497, 0, 498, 0, 0, 499, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 501, 0, 0, 0, 0, 0, 0, 0, 502, 0, 503, 0, 504, 0, 0, 0, - 0, 0, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506, 0, 507, 0, 0, 508, 0, 0, 0, - 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 512, 0, 513, 0, 0, 0, 514, 0, 515, 0, 516, 0, 0, 517, 518, 0, 0, 519, 0, 0, 0, 520, 0, 0, 521, 522, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 527, 0, 528, 0, 529, 0, 0, - 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 0, 533, 0, 534, 0, - 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 537, 0, 538, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 0, 541, 0, 542, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 544, 0, 0, 545, 0, 546, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 549, 0, 550, 0, 0, 551, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 553, 0, 554, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 558, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, - 0, 0, 561, 0, 562, 0, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, 567, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, 569, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 573, 0, 574, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 577, 0, 578, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, 580, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, - 0, 0, 0, 0, 584, 0, 585, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 0, 0, 588, 0, - 589, 0, 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 592, 0, 593, 0, 594, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 596, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, 0, 0, - 0, 0, 600, 0, 601, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 0, 0, 0, 0, 604, 0, 605, 0, - 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, 0, 0, 608, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, - 0, 0, 616, 0, 617, 0, 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 0, 620, 0, 621, 0, 0, - 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 624, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, 0, 628, 0, 0, 629, 0, 0, 0, 0, 0, 630, 0, 0, 0, 631, 0, 0, 632, 0, - 633, 0, 0, 634, 0, 0, 0, 0, 0, 0, 635, 0, 0, 636, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 638, 0, 639, 0, 0, 640, 0, 0, 0, 0, 641, 0, 0, 642, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 645, 0, 0, 0, 646, 0, 0, 0, 647, 0, 0, 648, 0, 0, 0, 0, 649, 0, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 653, 0, 654, 0, 0, 655, 0, 0, 656, 0, 0, - 657, 0, 0, 0, 658, 0, 0, 0, 659, 0, 0, 660, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, - 0, 0, 0, 0, 664, 0, 0, 0, 665, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, - 0, 0, 668, 0, 669, 0, 0, 0, 0, 0, 670, 0, 671, 672, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, 0, 0, - 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, - 680, 0, 681, 0, 0, 682, 683, 0, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, 0, 687, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 690, 0, 0, 0, 691, 0, 692, 0, 0, 693, - 694, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 699, 0, 0, 0, 700, 0, 0, - 0, 0, 0, 701, 702, 0, 0, 703, 0, 704, 705, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 707, 0, 0, 708, 0, 0, 0, 709, - 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 712, 713, 0, 0, 714, 0, 715, 716, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 718, 0, 0, - 719, 0, 0, 0, 0, 0, 0, 720, 0, 721, 0, 722, 723, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 0, 727, 0, - 0, 0, 728, 0, 0, 0, 729, 0, 0, 730, 0, 0, 0, 731, 0, 0, 0, 732, 0, 0, 0, 733, 734, 0, 0, 735, 0, 736, 0, 0, 0, 737, - 738, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 741, 0, 0, 742, 0, 0, 743, 0, 0, 0, 744, 0, 0, 0, - 745, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 748, 0, 749, 0, - 0, 0, 0, 0, 0, 750, 0, 751, 0, 0, 0, 0, 0, 752, 0, 753, 754, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 756, 0, 0, - 0, 0, 0, 757, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 760, 0, 761, 0, 0, 0, 0, 0, 762, 0, 763, 764, 0, 0, 0, 0, 765, 0, 0, 0, - 0, 0, 0, 766, 0, 0, 0, 767, 0, 0, 768, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, 0, 0, 773, 0, 774, 775, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 0, 0, - 777, 0, 0, 778, 0, 0, 779, 0, 0, 0, 780, 0, 0, 0, 781, 0, 0, 0, 782, 0, 0, 783, 0, 0, 0, 784, 0, 0, 0, 785, 0, 0, - 786, 0, 0, 0, 787, 0, 0, 0, 788, 0, 0, 789, 0, 0, 0, 790, 791, 0, 0, 0, 792, 0, 793, 794, 0, 0, 0, 0, 0, 795, 0, 0, - 0, 0, 0, 0, 0, 0, 796, 0, 0, 797, 0, 0, 798, 0, 0, 0, 799, 0, 0, 0, 800, 0, 0, 0, 801, 0, 0, 0, 802, 0, 0, 803, - 0, 804, 0, 0, 805, 0, 806, 807, 0, 0, 0, 0, 0, 808, 0, 0, 0, 0, 0, 0, 0, 0, 809, 0, 0, 810, 0, 0, 811, 0, 0, 0, - 812, 0, 0, 0, 813, 0, 0, 0, 0, 814, 0, 0, 0, 0, 815, 0, 816, 0, 0, 0, 817, 0, 818, 819, 0, 0, 0, 0, 0, 820, 0, 0, - 0, 0, 0, 0, 0, 0, 821, 0, 0, 822, 0, 0, 823, 0, 0, 0, 824, 0, 0, 0, 825, 0, 0, 0, 0, 826, 0, 0, 0, 0, 827, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 829, 0, 830, 0, 831, 0, 0, 0, 832, 0, 833, 0, 0, 0, 834, 835, 0, 0, 0, 0, 0, - 836, 0, 0, 0, 0, 0, 837, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 840, 0, 0, 841, 0, 0, 0, 0, 842, - 0, 0, 843, 0, 844, 0, 0, 845, 0, 0, 0, 846, 0, 0, 0, 0, 847, 0, 848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 849, 0, 0, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 852, 0, 853, 0, 854, 0, 855, 0, 856, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 858, 0, 0, 0, 0, 859, 0, 860, 0, 0, 861, - 862, 0, 0, 0, 0, 0, 863, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 865, 0, 866, 0, 867, 0, 868, 0, 869, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 871, 0, 0, 0, 0, 872, 0, 873, 0, 0, 874, - 875, 0, 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, 0, 0, 878, 0, 879, 0, 880, 0, 881, 0, 882, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 0, 0, 885, 0, 886, 0, 0, 887, 888, - 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, 891, 0, 892, 0, 893, 0, 894, 0, 895, 0, 896, 0, 897, 0, 0, - 0, 0, 0, 0, 0, 0, 898, 0, 0, 899, 0, 0, 0, 0, 0, 0, 900, 0, 0, 901, 0, 0, 0, 902, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 903, 0, 0, 0, 0, 904, 0, 0, 905, 0, 0, 0, 906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 907, 908, 0, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, 0, 0, 910, 0, 0, 0, 0, 911, 0, 912, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0211[64] = { + 0x0040010004082A01ull, 0x296AAC2402040010ull, 0x4A82049522A92004ull, 0xA420551015090115ull, + 0xA5292AA4AA02AAAAull, 0x4052400014142D25ull, 0x2A40028A000A2210ull, 0x000558D000516800ull, + 0x15402CC000200001ull, 0x01301200050002A8ull, 0x95AAD4B40022D208ull, 0x051000820815A256ull, + 0x80A051000900080Aull, 0x9290809480009000ull, 0x000000831542002Aull, 0x543509200401002Aull, + 0x64CC04104A5A06A0ull, 0x44521040A2108288ull, 0x2108A4220A421148ull, 0x12A1004510254245ull, + 0x0240040004402288ull, 0x4141500050154A20ull, 0x0152B48C88086A02ull, 0xA02108AA92A404A2ull, + 0x542D25A56A5A2D25ull, 0x141084A054802D2Bull, 0x42A4822B915722B9ull, 0x2800025000000004ull, + 0xB492816014058000ull, 0x06A02A1AA0201502ull, 0x50080A402052005Aull, 0x1280002015012025ull, + 0xC899514001001008ull, 0x508020102A201201ull, 0x0008A10001284004ull, 0x004A100094200152ull, + 0x8A10005480022840ull, 0x54009440008A1000ull, 0x420002508008A100ull, 0x2001284002A40011ull, + 0x00A9000450800094ull, 0x2880011420011420ull, 0x4882404004201801ull, 0x0089094000022409ull, + 0x0004001008488A00ull, 0x2008891124A40000ull, 0x2404341408000510ull, 0x0490106510210001ull, + 0x2222404194408400ull, 0x20834C8889010698ull, 0x8A62224449011A81ull, 0x5400004111244041ull, + 0x000000282041A0A0ull, 0x0000448810D05020ull, 0x22244449010D0502ull, 0x9111124020D18911ull, + 0x20D14211124020D2ull, 0x0628A90042111240ull, 0x0005089484880241ull, 0x942001000AA88041ull, + 0x9420004002AA2041ull, 0xCA10008005544021ull, 0x008902402AAA2020ull, 0xA100830000002242ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0211[64] = { + 1u, 9u, 25u, 43u, 61u, 87u, 103u, 116u, 130u, 141u, 152u, 175u, 191u, 202u, 214u, 225u, + 240u, 260u, 275u, 291u, 308u, 317u, 332u, 351u, 370u, 399u, 418u, 444u, 450u, 466u, 483u, 497u, + 509u, 523u, 535u, 544u, 556u, 568u, 579u, 589u, 600u, 611u, 622u, 633u, 644u, 652u, 664u, 676u, + 688u, 701u, 719u, 738u, 750u, 759u, 770u, 786u, 804u, 821u, 836u, 849u, 862u, 875u, 889u, 903u, }; void recomp_unit_0211_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0211_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B50000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0211[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0211[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0211[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B50000; @@ -1092,7 +999,6 @@ L_08B50000: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(240), std::bit_cast(aot_fpr_12)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5002C; } @@ -1100,7 +1006,6 @@ L_08B50000: } L_08B50024: aot_gpr_31 = (0x08B5002Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5002Cu) goto L_08B5002C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5002C: @@ -1198,7 +1103,17 @@ L_08B50110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50148: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -1275,7 +1190,6 @@ L_08B501C4: goto L_08B501CC; L_08B501CC: aot_gpr_31 = (0x08B501D4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B501D4u) goto L_08B501D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B501D4: @@ -1289,7 +1203,6 @@ L_08B501D8: L_08B501E0: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B501F4; } @@ -1312,7 +1225,17 @@ L_08B501F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50208: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(252))); @@ -1339,7 +1262,6 @@ L_08B50234: L_08B50240: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B50254; } @@ -1347,7 +1269,6 @@ L_08B50240: } L_08B5024C: aot_gpr_31 = (0x08B50254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50254u) goto L_08B50254; AOT_REGCACHE_SYNC_OUT(); return; L_08B50254: @@ -1357,7 +1278,6 @@ L_08B50254: AOT_REGCACHE_SYNC_OUT(); return; L_08B5025C: { const bool branch_taken = aot_gpr_2 == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B502A8; } @@ -1418,7 +1338,17 @@ L_08B502A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B502C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); @@ -1433,7 +1363,6 @@ L_08B502C4: } L_08B502DC: aot_gpr_31 = (0x08B502E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B502E4u) goto L_08B502E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B502E4: @@ -1444,7 +1373,6 @@ L_08B502E4: L_08B502EC: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B50310; } @@ -1471,7 +1399,17 @@ L_08B50310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50320: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(36))); @@ -1492,7 +1430,17 @@ L_08B50340: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5034C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1533,28 +1481,65 @@ L_08B50390: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B503A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B503A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B503B0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B503B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1592,7 +1577,6 @@ L_08B503FC: AOT_REGCACHE_SYNC_OUT(); return; L_08B50404: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B5042C; } @@ -1605,7 +1589,6 @@ L_08B5040C: AOT_REGCACHE_SYNC_OUT(); return; L_08B50414: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B50424; } @@ -1618,7 +1601,6 @@ L_08B5041C: AOT_REGCACHE_SYNC_OUT(); return; L_08B50424: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B50550; } @@ -1644,7 +1626,6 @@ L_08B50444: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B504D4; } @@ -1657,7 +1638,6 @@ L_08B50464: AOT_REGCACHE_SYNC_OUT(); return; L_08B5046C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B504D4; } @@ -1670,7 +1650,6 @@ L_08B50474: L_08B5047C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(252))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B50548; } @@ -1709,7 +1688,6 @@ L_08B504C0: goto L_08B50A0C; L_08B504CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B50548; } @@ -1718,7 +1696,6 @@ L_08B504CC: L_08B504D4: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(253))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B50548; } @@ -1740,7 +1717,6 @@ L_08B504E8: } L_08B504F4: aot_gpr_31 = (0x08B504FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B504FCu) goto L_08B504FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B504FC: @@ -1748,7 +1724,6 @@ L_08B504FC: goto L_08B50500; L_08B50500: aot_gpr_31 = (0x08B50508u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50508u) goto L_08B50508; AOT_REGCACHE_SYNC_OUT(); return; L_08B50508: @@ -1768,7 +1743,6 @@ L_08B50514: } L_08B50520: aot_gpr_31 = (0x08B50528u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50528u) goto L_08B50528; AOT_REGCACHE_SYNC_OUT(); return; L_08B50528: @@ -1776,7 +1750,6 @@ L_08B50528: goto L_08B5052C; L_08B5052C: aot_gpr_31 = (0x08B50534u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50534u) goto L_08B50534; AOT_REGCACHE_SYNC_OUT(); return; L_08B50534: @@ -1804,14 +1777,33 @@ L_08B50550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50568: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50570: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -1941,7 +1933,6 @@ L_08B5068C: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); ctx.gpr[8] = (0u | 1u); { const bool branch_taken = ctx.gpr[7] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B506E4; } @@ -1949,7 +1940,6 @@ L_08B5068C: } L_08B5069C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B506D8; } @@ -2022,7 +2012,6 @@ L_08B50734: goto L_08B50738; L_08B50738: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5079C; } @@ -2094,7 +2083,6 @@ L_08B507B0: } L_08B507B8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B507C8; } @@ -2102,7 +2090,6 @@ L_08B507B8: } L_08B507C0: aot_gpr_31 = (0x08B507C8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B507C8u) goto L_08B507C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B507C8: @@ -2126,7 +2113,17 @@ L_08B507C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50800: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[16]); @@ -2214,7 +2211,6 @@ L_08B508D8: goto L_08B508E0; L_08B508E0: aot_gpr_31 = (0x08B508E8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B508E8u) goto L_08B508E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B508E8: @@ -2228,7 +2224,6 @@ L_08B508F0: aot_gpr_5 = (ctx.lo); aot_gpr_5 = (ctx.gpr[17] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B509E0; } @@ -2242,7 +2237,6 @@ L_08B5090C: goto L_08B50914; L_08B50914: aot_gpr_31 = (0x08B5091Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5091Cu) goto L_08B5091C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5091C: @@ -2342,7 +2336,17 @@ L_08B509E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50A0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -2364,7 +2368,6 @@ L_08B50A24: goto L_08B50A30; L_08B50A30: aot_gpr_31 = (0x08B50A38u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50A38u) goto L_08B50A38; AOT_REGCACHE_SYNC_OUT(); return; L_08B50A38: @@ -2383,7 +2386,17 @@ L_08B50A44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50A54: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2404,7 +2417,6 @@ L_08B50A54: } L_08B50A88: aot_gpr_31 = (0x08B50A90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50A90u) goto L_08B50A90; AOT_REGCACHE_SYNC_OUT(); return; L_08B50A90: @@ -2412,7 +2424,6 @@ L_08B50A90: goto L_08B50A94; L_08B50A94: aot_gpr_31 = (0x08B50A9Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 712u, 0x089C70C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50A9Cu) goto L_08B50A9C; AOT_REGCACHE_SYNC_OUT(); return; L_08B50A9C: @@ -2426,7 +2437,6 @@ L_08B50A9C: } L_08B50AA8: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B50ABC; } @@ -2434,7 +2444,6 @@ L_08B50AA8: } L_08B50AB0: aot_gpr_31 = (0x08B50AB8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50AB8u) goto L_08B50AB8; AOT_REGCACHE_SYNC_OUT(); return; L_08B50AB8: @@ -2455,7 +2464,6 @@ L_08B50AC4: } L_08B50ACC: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B50AE0; } @@ -2463,7 +2471,6 @@ L_08B50ACC: } L_08B50AD4: aot_gpr_31 = (0x08B50ADCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50ADCu) goto L_08B50ADC; AOT_REGCACHE_SYNC_OUT(); return; L_08B50ADC: @@ -2471,12 +2478,10 @@ L_08B50ADC: goto L_08B50AE0; L_08B50AE0: aot_gpr_31 = (0x08B50AE8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 712u, 0x089C70C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50AE8u) goto L_08B50AE8; AOT_REGCACHE_SYNC_OUT(); return; L_08B50AE8: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B50B10; } @@ -2485,7 +2490,6 @@ L_08B50AE8: L_08B50AF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B50B08; } @@ -2493,7 +2497,6 @@ L_08B50AF0: } L_08B50AFC: aot_gpr_31 = (0x08B50B04u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50B04u) goto L_08B50B04; AOT_REGCACHE_SYNC_OUT(); return; L_08B50B04: @@ -2556,7 +2559,17 @@ L_08B50B50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50B6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2576,7 +2589,17 @@ L_08B50B84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50B9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (0u | 20u); @@ -2622,7 +2645,6 @@ L_08B50BE8: AOT_REGCACHE_SYNC_OUT(); return; L_08B50C04: aot_gpr_31 = (0x08B50C0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50C0Cu) goto L_08B50C0C; AOT_REGCACHE_SYNC_OUT(); return; L_08B50C0C: @@ -2661,7 +2683,17 @@ L_08B50C60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50C6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (0u | 20u); @@ -2707,7 +2739,6 @@ L_08B50CB8: AOT_REGCACHE_SYNC_OUT(); return; L_08B50CD4: aot_gpr_31 = (0x08B50CDCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50CDCu) goto L_08B50CDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B50CDC: @@ -2746,7 +2777,17 @@ L_08B50D30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50D3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -2777,7 +2818,6 @@ L_08B50D7C: AOT_REGCACHE_SYNC_OUT(); return; L_08B50D88: aot_gpr_31 = (0x08B50D90u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50D90u) goto L_08B50D90; AOT_REGCACHE_SYNC_OUT(); return; L_08B50D90: @@ -2800,7 +2840,6 @@ L_08B50DBC: aot_gpr_4 = (std::bit_cast(aot_fpr_13)); aot_gpr_5 = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[18]) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B50DE4; } @@ -2813,7 +2852,6 @@ L_08B50DD0: goto L_08B50B9C; L_08B50DDC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B50DFC; } @@ -2822,7 +2860,6 @@ L_08B50DDC: L_08B50DE4: aot_gpr_5 = (static_cast(ctx.gpr[18]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B50DFC; } @@ -2845,7 +2882,6 @@ L_08B50E04: AOT_REGCACHE_SYNC_OUT(); return; L_08B50E0C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B50E58; } @@ -2863,7 +2899,6 @@ L_08B50E14: aot_gpr_6 = (aot_gpr_6 + static_cast(-1)); aot_gpr_5 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B50E84; } @@ -2892,7 +2927,6 @@ L_08B50E60: AOT_REGCACHE_SYNC_OUT(); return; L_08B50E68: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B50E84; } @@ -2924,7 +2958,17 @@ L_08B50E84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B50E9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-240)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); @@ -2960,7 +3004,6 @@ L_08B50F04: AOT_REGCACHE_SYNC_OUT(); return; L_08B50F0C: aot_gpr_31 = (0x08B50F14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50F14u) goto L_08B50F14; AOT_REGCACHE_SYNC_OUT(); return; L_08B50F14: @@ -3008,7 +3051,6 @@ L_08B50F68: L_08B50F94: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(216))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B513C0; } @@ -3017,7 +3059,6 @@ L_08B50F94: L_08B50FA0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(152))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[30]; - // nop if (branch_taken) { goto L_08B513C0; } @@ -3028,7 +3069,6 @@ L_08B50FAC: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B50FD4; } @@ -3041,7 +3081,6 @@ L_08B50FC0: AOT_REGCACHE_SYNC_OUT(); return; L_08B50FC8: aot_gpr_31 = (0x08B50FD0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50FD0u) goto L_08B50FD0; AOT_REGCACHE_SYNC_OUT(); return; L_08B50FD0: @@ -3058,7 +3097,6 @@ L_08B50FD4: goto L_08B50FE8; L_08B50FE8: aot_gpr_31 = (0x08B50FF0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B50FF0u) goto L_08B50FF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B50FF0: @@ -3072,7 +3110,6 @@ L_08B50FF8: aot_gpr_5 = (ctx.lo); aot_gpr_5 = (ctx.gpr[16] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B51028; } @@ -3085,7 +3122,6 @@ L_08B51014: AOT_REGCACHE_SYNC_OUT(); return; L_08B5101C: aot_gpr_31 = (0x08B51024u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51024u) goto L_08B51024; AOT_REGCACHE_SYNC_OUT(); return; L_08B51024: @@ -3106,7 +3142,6 @@ L_08B51028: } L_08B51044: aot_gpr_31 = (0x08B5104Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5104Cu) goto L_08B5104C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5104C: @@ -3125,7 +3160,6 @@ L_08B51058: AOT_REGCACHE_SYNC_OUT(); return; L_08B51064: aot_gpr_31 = (0x08B5106Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 96u, 0x08B0C748u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5106Cu) goto L_08B5106C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5106C: @@ -3172,7 +3206,6 @@ L_08B510C8: L_08B510CC: ctx.gpr[9] = (static_cast(aot_gpr_6) < 2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08B510DC; } @@ -3184,7 +3217,6 @@ L_08B510D8: L_08B510DC: aot_gpr_6 = (static_cast(ctx.gpr[7]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B51324; } @@ -3222,7 +3254,6 @@ L_08B5110C: AOT_REGCACHE_SYNC_OUT(); return; L_08B5111C: aot_gpr_31 = (0x08B51124u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51124u) goto L_08B51124; AOT_REGCACHE_SYNC_OUT(); return; L_08B51124: @@ -3236,9 +3267,7 @@ L_08B51124: L_08B5113C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B51244; } @@ -3262,7 +3291,6 @@ L_08B51164: AOT_REGCACHE_SYNC_OUT(); return; L_08B51174: aot_gpr_31 = (0x08B5117Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5117Cu) goto L_08B5117C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5117C: @@ -3278,9 +3306,7 @@ L_08B51198: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_fpr_13 = static_cast(static_cast(std::bit_cast(aot_fpr_13))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B511F8; } @@ -3303,7 +3329,6 @@ L_08B511C4: AOT_REGCACHE_SYNC_OUT(); return; L_08B511D0: aot_gpr_31 = (0x08B511D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B511D8u) goto L_08B511D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B511D8: @@ -3339,7 +3364,6 @@ L_08B5120C: AOT_REGCACHE_SYNC_OUT(); return; L_08B51218: aot_gpr_31 = (0x08B51220u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51220u) goto L_08B51220; AOT_REGCACHE_SYNC_OUT(); return; L_08B51220: @@ -3376,7 +3400,6 @@ L_08B51258: AOT_REGCACHE_SYNC_OUT(); return; L_08B51264: aot_gpr_31 = (0x08B5126Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5126Cu) goto L_08B5126C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5126C: @@ -3389,9 +3412,7 @@ L_08B5126C: goto L_08B51284; L_08B51284: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B512E0; } @@ -3414,7 +3435,6 @@ L_08B512A8: AOT_REGCACHE_SYNC_OUT(); return; L_08B512B4: aot_gpr_31 = (0x08B512BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B512BCu) goto L_08B512BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B512BC: @@ -3451,7 +3471,6 @@ L_08B512F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B51300: aot_gpr_31 = (0x08B51308u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51308u) goto L_08B51308; AOT_REGCACHE_SYNC_OUT(); return; L_08B51308: @@ -3470,7 +3489,6 @@ L_08B51324: aot_gpr_6 = (ctx.lo); aot_gpr_6 = (ctx.gpr[18] < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B51354; } @@ -3483,7 +3501,6 @@ L_08B51338: AOT_REGCACHE_SYNC_OUT(); return; L_08B51340: aot_gpr_31 = (0x08B51348u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51348u) goto L_08B51348; AOT_REGCACHE_SYNC_OUT(); return; L_08B51348: @@ -3513,7 +3530,6 @@ L_08B51370: AOT_REGCACHE_SYNC_OUT(); return; L_08B51380: aot_gpr_31 = (0x08B51388u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51388u) goto L_08B51388; AOT_REGCACHE_SYNC_OUT(); return; L_08B51388: @@ -3532,7 +3548,6 @@ L_08B51398: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(ctx.gpr[20]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B51458; } @@ -3543,7 +3558,6 @@ L_08B513C0: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B513F0; } @@ -3556,7 +3570,6 @@ L_08B513D4: AOT_REGCACHE_SYNC_OUT(); return; L_08B513DC: aot_gpr_31 = (0x08B513E4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B513E4u) goto L_08B513E4; AOT_REGCACHE_SYNC_OUT(); return; L_08B513E4: @@ -3586,7 +3599,6 @@ L_08B5140C: AOT_REGCACHE_SYNC_OUT(); return; L_08B5141C: aot_gpr_31 = (0x08B51424u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51424u) goto L_08B51424; AOT_REGCACHE_SYNC_OUT(); return; L_08B51424: @@ -3639,7 +3651,17 @@ L_08B51468: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B514A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(204))); @@ -3679,7 +3701,17 @@ L_08B514E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B51514: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3699,10 +3731,19 @@ L_08B5152C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B51538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B51540; } @@ -3710,18 +3751,36 @@ L_08B51538: } L_08B51540: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B51548: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B51550: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); @@ -3738,7 +3797,6 @@ L_08B51550: } L_08B51570: aot_gpr_31 = (0x08B51578u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51578u) goto L_08B51578; AOT_REGCACHE_SYNC_OUT(); return; L_08B51578: @@ -3784,7 +3842,6 @@ L_08B515C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B515D8: aot_gpr_31 = (0x08B515E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B515E0u) goto L_08B515E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B515E0: @@ -3801,7 +3858,6 @@ L_08B515E0: L_08B515F8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B5162C; } @@ -3823,7 +3879,6 @@ L_08B51604: } L_08B51624: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B51634; } @@ -3831,7 +3886,6 @@ L_08B51624: } L_08B5162C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B51638; } @@ -3852,7 +3906,17 @@ L_08B51638: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5164C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -3877,7 +3941,6 @@ L_08B5166C: L_08B5167C: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(92)))))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B5168C; } @@ -3890,7 +3953,6 @@ L_08B5168C: aot_gpr_4 = (aot_gpr_4 & 255u); aot_gpr_4 = (aot_gpr_4 | ctx.gpr[17]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B517C0; } @@ -3899,7 +3961,6 @@ L_08B5168C: L_08B5169C: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5896))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B516B4; } @@ -3907,7 +3968,6 @@ L_08B5169C: } L_08B516A8: aot_gpr_31 = (0x08B516B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B516B0u) goto L_08B516B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B516B0: @@ -3920,7 +3980,6 @@ L_08B516B4: AOT_REGCACHE_SYNC_OUT(); return; L_08B516BC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B517C0; } @@ -3935,7 +3994,6 @@ L_08B516C4: goto L_08B516D0; L_08B516D0: aot_gpr_31 = (0x08B516D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B516D8u) goto L_08B516D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B516D8: @@ -3966,7 +4024,6 @@ L_08B51704: AOT_REGCACHE_SYNC_OUT(); return; L_08B51714: aot_gpr_31 = (0x08B5171Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5171Cu) goto L_08B5171C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5171C: @@ -3988,7 +4045,6 @@ L_08B51728: L_08B51748: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5175C; } @@ -3996,7 +4052,6 @@ L_08B51748: } L_08B51754: aot_gpr_31 = (0x08B5175Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5175Cu) goto L_08B5175C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5175C: @@ -4007,7 +4062,6 @@ L_08B5175C: L_08B51764: aot_gpr_4 = (0u | 1u); { const bool branch_taken = aot_gpr_2 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B517C0; } @@ -4024,7 +4078,6 @@ L_08B51770: } L_08B5177C: aot_gpr_31 = (0x08B51784u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51784u) goto L_08B51784; AOT_REGCACHE_SYNC_OUT(); return; L_08B51784: @@ -4068,7 +4121,17 @@ L_08B517C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B517D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4077,7 +4140,6 @@ L_08B517D4: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B51800; } @@ -4085,7 +4147,6 @@ L_08B517D4: } L_08B517F4: aot_gpr_31 = (0x08B517FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B517FCu) goto L_08B517FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B517FC: @@ -4093,13 +4154,11 @@ L_08B517FC: goto L_08B51800; L_08B51800: aot_gpr_31 = (0x08B51808u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 712u, 0x089C70C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51808u) goto L_08B51808; AOT_REGCACHE_SYNC_OUT(); return; L_08B51808: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(248))); { const bool branch_taken = aot_gpr_2 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B519BC; } @@ -4108,7 +4167,6 @@ L_08B51808: L_08B51814: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5182C; } @@ -4116,7 +4174,6 @@ L_08B51814: } L_08B51820: aot_gpr_31 = (0x08B51828u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51828u) goto L_08B51828; AOT_REGCACHE_SYNC_OUT(); return; L_08B51828: @@ -4124,14 +4181,12 @@ L_08B51828: goto L_08B5182C; L_08B5182C: aot_gpr_31 = (0x08B51834u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 712u, 0x089C70C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51834u) goto L_08B51834; AOT_REGCACHE_SYNC_OUT(); return; L_08B51834: aot_mem.aot_direct_store32(ctx.gpr[16] + static_cast(248), aot_gpr_2); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B51850; } @@ -4139,7 +4194,6 @@ L_08B51834: } L_08B51844: aot_gpr_31 = (0x08B5184Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5184Cu) goto L_08B5184C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5184C: @@ -4147,7 +4201,6 @@ L_08B5184C: goto L_08B51850; L_08B51850: aot_gpr_31 = (0x08B51858u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 712u, 0x089C70C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51858u) goto L_08B51858; AOT_REGCACHE_SYNC_OUT(); return; L_08B51858: @@ -4169,7 +4222,6 @@ L_08B51864: } L_08B5186C: aot_gpr_31 = (0x08B51874u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51874u) goto L_08B51874; AOT_REGCACHE_SYNC_OUT(); return; L_08B51874: @@ -4188,7 +4240,6 @@ L_08B51880: L_08B51888: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[28] + static_cast(5876))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B518A0; } @@ -4196,7 +4247,6 @@ L_08B51888: } L_08B51894: aot_gpr_31 = (0x08B5189Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5189Cu) goto L_08B5189C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5189C: @@ -4204,7 +4254,6 @@ L_08B5189C: goto L_08B518A0; L_08B518A0: aot_gpr_31 = (0x08B518A8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B518A8u) goto L_08B518A8; AOT_REGCACHE_SYNC_OUT(); return; L_08B518A8: @@ -4224,7 +4273,6 @@ L_08B518B4: } L_08B518C0: aot_gpr_31 = (0x08B518C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B518C8u) goto L_08B518C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B518C8: @@ -4232,7 +4280,6 @@ L_08B518C8: goto L_08B518CC; L_08B518CC: aot_gpr_31 = (0x08B518D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0112_entry, 112u, 679u, 0x089C6F60u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B518D4u) goto L_08B518D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B518D4: @@ -4245,7 +4292,6 @@ L_08B518D4: AOT_REGCACHE_SYNC_OUT(); return; L_08B518E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B519BC; } @@ -4253,7 +4299,6 @@ L_08B518E8: } L_08B518F0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B51904; } @@ -4261,7 +4306,6 @@ L_08B518F0: } L_08B518F8: aot_gpr_31 = (0x08B51900u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51900u) goto L_08B51900; AOT_REGCACHE_SYNC_OUT(); return; L_08B51900: @@ -4269,12 +4313,10 @@ L_08B51900: goto L_08B51904; L_08B51904: aot_gpr_31 = (0x08B5190Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0044_entry, 44u, 472u, 0x088B6860u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5190Cu) goto L_08B5190C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5190C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B519BC; } @@ -4291,7 +4333,6 @@ L_08B51914: } L_08B51920: aot_gpr_31 = (0x08B51928u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51928u) goto L_08B51928; AOT_REGCACHE_SYNC_OUT(); return; L_08B51928: @@ -4312,7 +4353,6 @@ L_08B51934: aot_gpr_5 = (ctx.lo); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B51994; } @@ -4327,7 +4367,6 @@ L_08B5195C: goto L_08B51968; L_08B51968: aot_gpr_31 = (0x08B51970u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51970u) goto L_08B51970; AOT_REGCACHE_SYNC_OUT(); return; L_08B51970: @@ -4375,7 +4414,17 @@ L_08B519BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B519D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(252))); @@ -4420,7 +4469,6 @@ L_08B51A10: goto L_08B51A14; L_08B51A14: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B51A50; } @@ -4458,7 +4506,6 @@ L_08B51A44: goto L_08B51A48; L_08B51A48: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B51A94; } @@ -4504,7 +4551,6 @@ L_08B51A80: goto L_08B51A84; L_08B51A84: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B51A94; } @@ -4522,14 +4568,23 @@ L_08B51A94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B51AA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(256))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08B51AC8; } @@ -4555,7 +4610,6 @@ L_08B51AC8: } L_08B51AD4: aot_gpr_31 = (0x08B51ADCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 466u, 0x08B65E44u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51ADCu) goto L_08B51ADC; AOT_REGCACHE_SYNC_OUT(); return; L_08B51ADC: @@ -4579,7 +4633,17 @@ L_08B51AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B51B08: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(212), ctx.gpr[16]); @@ -4682,7 +4746,6 @@ L_08B51C3C: goto L_08B51C40; L_08B51C40: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B51C70; } @@ -4701,7 +4764,6 @@ L_08B51C48: AOT_REGCACHE_SYNC_OUT(); return; L_08B51C68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B51C98; } @@ -4734,7 +4796,6 @@ L_08B51CA0: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(ctx.gpr[23]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_4 = (ctx.lo); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B51D28; } @@ -4761,7 +4822,6 @@ L_08B51CD0: L_08B51CDC: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B51CF4; } @@ -4796,7 +4856,6 @@ L_08B51D04: AOT_REGCACHE_SYNC_OUT(); return; L_08B51D20: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B52030; } @@ -4816,7 +4875,6 @@ L_08B51D30: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (ctx.gpr[18] < aot_gpr_4 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B52030; } @@ -4834,7 +4892,6 @@ L_08B51D54: goto L_08B51D74; L_08B51D74: { const bool branch_taken = ctx.gpr[22] != 0u; - // nop if (branch_taken) { goto L_08B51D90; } @@ -4847,7 +4904,6 @@ L_08B51D7C: AOT_REGCACHE_SYNC_OUT(); return; L_08B51D84: aot_gpr_31 = (0x08B51D8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51D8Cu) goto L_08B51D8C; AOT_REGCACHE_SYNC_OUT(); return; L_08B51D8C: @@ -4864,7 +4920,6 @@ L_08B51D90: goto L_08B51DA4; L_08B51DA4: aot_gpr_31 = (0x08B51DACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51DACu) goto L_08B51DAC; AOT_REGCACHE_SYNC_OUT(); return; L_08B51DAC: @@ -4879,7 +4934,6 @@ L_08B51DB4: aot_gpr_5 = (ctx.lo); aot_gpr_5 = (ctx.gpr[17] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B51DE8; } @@ -4892,7 +4946,6 @@ L_08B51DD4: AOT_REGCACHE_SYNC_OUT(); return; L_08B51DDC: aot_gpr_31 = (0x08B51DE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51DE4u) goto L_08B51DE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B51DE4: @@ -4913,7 +4966,6 @@ L_08B51DE8: } L_08B51E04: aot_gpr_31 = (0x08B51E0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 34u, 0x08B68290u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51E0Cu) goto L_08B51E0C; AOT_REGCACHE_SYNC_OUT(); return; L_08B51E0C: @@ -4949,7 +5001,6 @@ L_08B51E44: AOT_REGCACHE_SYNC_OUT(); return; L_08B51E50: aot_gpr_31 = (0x08B51E58u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51E58u) goto L_08B51E58; AOT_REGCACHE_SYNC_OUT(); return; L_08B51E58: @@ -4984,7 +5035,6 @@ L_08B51E98: AOT_REGCACHE_SYNC_OUT(); return; L_08B51EA4: aot_gpr_31 = (0x08B51EACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51EACu) goto L_08B51EAC; AOT_REGCACHE_SYNC_OUT(); return; L_08B51EAC: @@ -5019,7 +5069,6 @@ L_08B51EF0: AOT_REGCACHE_SYNC_OUT(); return; L_08B51EF8: aot_gpr_31 = (0x08B51F00u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51F00u) goto L_08B51F00; AOT_REGCACHE_SYNC_OUT(); return; L_08B51F00: @@ -5029,7 +5078,6 @@ L_08B51F00: L_08B51F08: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B51F34; } @@ -5048,7 +5096,6 @@ L_08B51F14: L_08B51F34: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(216))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B51F60; } @@ -5108,7 +5155,6 @@ L_08B51F94: AOT_REGCACHE_SYNC_OUT(); return; L_08B51FDC: aot_gpr_31 = (0x08B51FE4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0194_entry, 194u, 96u, 0x08B0C748u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B51FE4u) goto L_08B51FE4; AOT_REGCACHE_SYNC_OUT(); return; L_08B51FE4: @@ -5161,7 +5207,17 @@ L_08B52030: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B52060: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(208))); @@ -5176,7 +5232,6 @@ L_08B52060: aot_gpr_4 = (ctx.lo); aot_gpr_4 = (aot_gpr_4 < static_cast(2) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B520B8; } @@ -5199,7 +5254,6 @@ L_08B520A0: } L_08B520B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B520D0; } @@ -5207,7 +5261,6 @@ L_08B520B0: } L_08B520B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B52A54; } @@ -5216,7 +5269,6 @@ L_08B520B8: L_08B520C0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(64)))))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B520D0; } @@ -5285,7 +5337,6 @@ L_08B52130: aot_gpr_6 = (ctx.lo); aot_gpr_6 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B52174; } @@ -5300,7 +5351,6 @@ L_08B52154: AOT_REGCACHE_SYNC_OUT(); return; L_08B52164: aot_gpr_31 = (0x08B5216Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5216Cu) goto L_08B5216C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5216C: @@ -5329,7 +5379,6 @@ L_08B52190: ctx.gpr[7] = (ctx.lo); ctx.gpr[7] = (ctx.gpr[7] + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == ctx.gpr[7]; - // nop if (branch_taken) { goto L_08B525E8; } @@ -5359,7 +5408,6 @@ L_08B521DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B521F0: aot_gpr_31 = (0x08B521F8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B521F8u) goto L_08B521F8; AOT_REGCACHE_SYNC_OUT(); return; L_08B521F8: @@ -5399,7 +5447,6 @@ L_08B52238: AOT_REGCACHE_SYNC_OUT(); return; L_08B5224C: aot_gpr_31 = (0x08B52254u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52254u) goto L_08B52254; AOT_REGCACHE_SYNC_OUT(); return; L_08B52254: @@ -5439,7 +5486,6 @@ L_08B522A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B522B4: aot_gpr_31 = (0x08B522BCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B522BCu) goto L_08B522BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B522BC: @@ -5474,7 +5520,6 @@ L_08B52304: AOT_REGCACHE_SYNC_OUT(); return; L_08B52310: aot_gpr_31 = (0x08B52318u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52318u) goto L_08B52318; AOT_REGCACHE_SYNC_OUT(); return; L_08B52318: @@ -5510,7 +5555,6 @@ L_08B52354: AOT_REGCACHE_SYNC_OUT(); return; L_08B52368: aot_gpr_31 = (0x08B52370u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52370u) goto L_08B52370; AOT_REGCACHE_SYNC_OUT(); return; L_08B52370: @@ -5547,7 +5591,6 @@ L_08B523B0: AOT_REGCACHE_SYNC_OUT(); return; L_08B523C4: aot_gpr_31 = (0x08B523CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B523CCu) goto L_08B523CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B523CC: @@ -5587,7 +5630,6 @@ L_08B52418: AOT_REGCACHE_SYNC_OUT(); return; L_08B5242C: aot_gpr_31 = (0x08B52434u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52434u) goto L_08B52434; AOT_REGCACHE_SYNC_OUT(); return; L_08B52434: @@ -5622,7 +5664,6 @@ L_08B5247C: AOT_REGCACHE_SYNC_OUT(); return; L_08B52488: aot_gpr_31 = (0x08B52490u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52490u) goto L_08B52490; AOT_REGCACHE_SYNC_OUT(); return; L_08B52490: @@ -5657,7 +5698,6 @@ L_08B524D0: AOT_REGCACHE_SYNC_OUT(); return; L_08B524E4: aot_gpr_31 = (0x08B524ECu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B524ECu) goto L_08B524EC; AOT_REGCACHE_SYNC_OUT(); return; L_08B524EC: @@ -5693,7 +5733,6 @@ L_08B52530: AOT_REGCACHE_SYNC_OUT(); return; L_08B52544: aot_gpr_31 = (0x08B5254Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5254Cu) goto L_08B5254C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5254C: @@ -5732,7 +5771,6 @@ L_08B52598: AOT_REGCACHE_SYNC_OUT(); return; L_08B525A8: aot_gpr_31 = (0x08B525B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B525B0u) goto L_08B525B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B525B0: @@ -5759,7 +5797,6 @@ L_08B525BC: } L_08B525E8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B52A2C; } @@ -5767,7 +5804,6 @@ L_08B525E8: } L_08B525F0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B52A2C; } @@ -5797,7 +5833,6 @@ L_08B52620: AOT_REGCACHE_SYNC_OUT(); return; L_08B52634: aot_gpr_31 = (0x08B5263Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5263Cu) goto L_08B5263C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5263C: @@ -5834,7 +5869,6 @@ L_08B5267C: AOT_REGCACHE_SYNC_OUT(); return; L_08B52690: aot_gpr_31 = (0x08B52698u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52698u) goto L_08B52698; AOT_REGCACHE_SYNC_OUT(); return; L_08B52698: @@ -5874,7 +5908,6 @@ L_08B526E4: AOT_REGCACHE_SYNC_OUT(); return; L_08B526F8: aot_gpr_31 = (0x08B52700u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52700u) goto L_08B52700; AOT_REGCACHE_SYNC_OUT(); return; L_08B52700: @@ -5909,7 +5942,6 @@ L_08B52748: AOT_REGCACHE_SYNC_OUT(); return; L_08B52754: aot_gpr_31 = (0x08B5275Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5275Cu) goto L_08B5275C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5275C: @@ -5945,7 +5977,6 @@ L_08B52798: AOT_REGCACHE_SYNC_OUT(); return; L_08B527AC: aot_gpr_31 = (0x08B527B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B527B4u) goto L_08B527B4; AOT_REGCACHE_SYNC_OUT(); return; L_08B527B4: @@ -5982,7 +6013,6 @@ L_08B527F4: AOT_REGCACHE_SYNC_OUT(); return; L_08B52808: aot_gpr_31 = (0x08B52810u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52810u) goto L_08B52810; AOT_REGCACHE_SYNC_OUT(); return; L_08B52810: @@ -6022,7 +6052,6 @@ L_08B5285C: AOT_REGCACHE_SYNC_OUT(); return; L_08B52870: aot_gpr_31 = (0x08B52878u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52878u) goto L_08B52878; AOT_REGCACHE_SYNC_OUT(); return; L_08B52878: @@ -6057,7 +6086,6 @@ L_08B528C0: AOT_REGCACHE_SYNC_OUT(); return; L_08B528CC: aot_gpr_31 = (0x08B528D4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B528D4u) goto L_08B528D4; AOT_REGCACHE_SYNC_OUT(); return; L_08B528D4: @@ -6092,7 +6120,6 @@ L_08B52914: AOT_REGCACHE_SYNC_OUT(); return; L_08B52928: aot_gpr_31 = (0x08B52930u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52930u) goto L_08B52930; AOT_REGCACHE_SYNC_OUT(); return; L_08B52930: @@ -6128,7 +6155,6 @@ L_08B52974: AOT_REGCACHE_SYNC_OUT(); return; L_08B52988: aot_gpr_31 = (0x08B52990u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B52990u) goto L_08B52990; AOT_REGCACHE_SYNC_OUT(); return; L_08B52990: @@ -6167,7 +6193,6 @@ L_08B529DC: AOT_REGCACHE_SYNC_OUT(); return; L_08B529EC: aot_gpr_31 = (0x08B529F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B529F4u) goto L_08B529F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B529F4: @@ -6204,7 +6229,6 @@ L_08B52A30: aot_gpr_6 = (ctx.lo); aot_gpr_6 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B52124; } @@ -6222,7 +6246,17 @@ L_08B52A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B52A68: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[7]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -6285,7 +6319,6 @@ L_08B52AEC: AOT_REGCACHE_SYNC_OUT(); return; L_08B52AF8: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B52C2C; } @@ -6302,7 +6335,6 @@ L_08B52B0C: aot_gpr_4 = (20224u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08B52B34; @@ -6349,7 +6381,6 @@ L_08B52B44: AOT_REGCACHE_SYNC_OUT(); return; L_08B52B98: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B52C24; } @@ -6364,7 +6395,6 @@ L_08B52BA0: L_08B52BAC: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08B52BCC; @@ -6407,7 +6437,6 @@ L_08B52BDC: goto L_08B52C24; L_08B52C24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B52D48; } @@ -6514,7 +6543,6 @@ L_08B52D48: AOT_REGCACHE_SYNC_OUT(); return; L_08B52D54: { const bool branch_taken = aot_gpr_2 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B52DCC; } @@ -6529,7 +6557,6 @@ L_08B52D5C: L_08B52D68: ctx.gpr[16] = (0u < aot_gpr_2 ? 1u : 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B52DCC; } @@ -6602,7 +6629,17 @@ L_08B52DCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B52DF4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6621,7 +6658,6 @@ L_08B52E10: AOT_REGCACHE_SYNC_OUT(); return; L_08B52E20: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B52EB0; } @@ -6644,7 +6680,6 @@ L_08B52E28: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B52E90; } @@ -6662,7 +6697,6 @@ L_08B52E6C: AOT_REGCACHE_SYNC_OUT(); return; L_08B52E88: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B52EA8; } @@ -6700,7 +6734,17 @@ L_08B52EB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B52EC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6713,7 +6757,6 @@ L_08B52EC8: L_08B52EE8: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B52F88; } @@ -6722,7 +6765,6 @@ L_08B52EE8: L_08B52EF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B52F88; } @@ -6752,7 +6794,6 @@ L_08B52F40: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B52F70; } @@ -6805,7 +6846,17 @@ L_08B52F98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B52FB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6818,7 +6869,6 @@ L_08B52FB0: L_08B52FD0: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B53070; } @@ -6827,7 +6877,6 @@ L_08B52FD0: L_08B52FDC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B53070; } @@ -6857,7 +6906,6 @@ L_08B53028: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B53058; } @@ -6910,7 +6958,17 @@ L_08B53080: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53098: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -6923,7 +6981,6 @@ L_08B53098: L_08B530B8: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B53124; } @@ -6956,7 +7013,6 @@ L_08B530F4: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B53110; } @@ -6995,7 +7051,17 @@ L_08B53128: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53140: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7008,7 +7074,6 @@ L_08B53140: L_08B53160: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B531C0; } @@ -7038,7 +7103,6 @@ L_08B5318C: L_08B5319C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(206)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B531AC; } @@ -7077,7 +7141,17 @@ L_08B531C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B531DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -7090,7 +7164,6 @@ L_08B531DC: L_08B531F4: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B53224; } @@ -7141,7 +7214,17 @@ L_08B53230: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53240: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7154,7 +7237,6 @@ L_08B53240: L_08B53260: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B532EC; } @@ -7204,7 +7286,6 @@ L_08B532C4: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(194))); aot_gpr_5 = (0u | 5u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B532D8; } @@ -7250,7 +7331,17 @@ L_08B53300: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53318: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7270,7 +7361,6 @@ L_08B53338: L_08B53348: aot_fpr_20 = std::bit_cast(std::bit_cast(ctx.fpr[0])); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B5343C; } @@ -7300,9 +7390,7 @@ L_08B53380: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(456))); aot_fpr_13 = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = ((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B533F0; } @@ -7328,7 +7416,6 @@ L_08B53398: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B533F8; } @@ -7336,7 +7423,6 @@ L_08B53398: } L_08B533E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5341C; } @@ -7362,7 +7448,6 @@ L_08B533F8: AOT_REGCACHE_SYNC_OUT(); return; L_08B53414: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53434; } @@ -7401,7 +7486,17 @@ L_08B53440: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53458: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7422,7 +7517,6 @@ L_08B53474: AOT_REGCACHE_SYNC_OUT(); return; L_08B5348C: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B53558; } @@ -7460,7 +7554,6 @@ L_08B53494: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B53538; } @@ -7478,7 +7571,6 @@ L_08B53514: AOT_REGCACHE_SYNC_OUT(); return; L_08B53530: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53550; } @@ -7516,7 +7608,17 @@ L_08B5355C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53570: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7543,7 +7645,6 @@ L_08B535A8: aot_fpr_12 = std::bit_cast(ctx.fpu_float_to_word_ct<1u>(ctx.fpr[0])); aot_gpr_4 = (std::bit_cast(aot_fpr_12)); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B53648; } @@ -7568,7 +7669,6 @@ L_08B535B8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(100))); aot_gpr_5 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(52))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B53628; } @@ -7586,7 +7686,6 @@ L_08B53604: AOT_REGCACHE_SYNC_OUT(); return; L_08B53620: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53640; } @@ -7624,7 +7723,17 @@ L_08B5364C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53660: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7637,7 +7746,6 @@ L_08B53660: L_08B53680: ctx.gpr[18] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B53758; } @@ -7667,7 +7775,6 @@ L_08B536B8: ctx.gpr[17] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(205)))))); aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B53740; } @@ -7696,7 +7803,6 @@ L_08B536E4: L_08B536F4: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(206)))))); { const bool branch_taken = static_cast(aot_gpr_4) < 0; - // nop if (branch_taken) { goto L_08B53740; } @@ -7765,7 +7871,17 @@ L_08B5375C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53774: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7779,7 +7895,6 @@ L_08B53774: L_08B53798: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B53818; } @@ -7809,7 +7924,6 @@ L_08B537D0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(205)))))); aot_gpr_5 = (0u + static_cast(-1)); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B53804; } @@ -7830,7 +7944,6 @@ L_08B537F0: AOT_REGCACHE_SYNC_OUT(); return; L_08B537FC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53810; } @@ -7866,7 +7979,17 @@ L_08B5381C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53834: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7880,7 +8003,6 @@ L_08B53834: L_08B53858: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B538D8; } @@ -7911,7 +8033,6 @@ L_08B53890: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B538C0; } @@ -7927,7 +8048,6 @@ L_08B538A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B538B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B538D0; } @@ -7964,7 +8084,17 @@ L_08B538DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B538F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -7978,7 +8108,6 @@ L_08B538F4: L_08B53918: ctx.gpr[17] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B539D4; } @@ -8009,7 +8138,6 @@ L_08B53950: aot_gpr_4 = (aot_gpr_4 & 1u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B539BC; } @@ -8051,7 +8179,6 @@ L_08B539AC: AOT_REGCACHE_SYNC_OUT(); return; L_08B539B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B539CC; } @@ -8095,7 +8222,17 @@ L_08B539E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8107,7 +8244,6 @@ L_08B53A00: L_08B53A18: ctx.gpr[16] = (aot_gpr_2 | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B53B00; } @@ -8123,7 +8259,6 @@ L_08B53A24: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B53AC8; } @@ -8133,7 +8268,6 @@ L_08B53A4C: ctx.gpr[16] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(104))); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(900))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B53A68; } @@ -8150,7 +8284,6 @@ L_08B53A68: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B53AC0; } @@ -8164,7 +8297,6 @@ L_08B53A7C: AOT_REGCACHE_SYNC_OUT(); return; L_08B53A88: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B53AAC; } @@ -8188,7 +8320,6 @@ L_08B53AAC: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[16] + static_cast(565))); aot_gpr_4 = (static_cast(ctx.gpr[17]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B53A7C; } @@ -8196,7 +8327,6 @@ L_08B53AAC: } L_08B53AC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53B00; } @@ -8232,7 +8362,17 @@ L_08B53B00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53B18: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8252,7 +8392,6 @@ L_08B53B3C: AOT_REGCACHE_SYNC_OUT(); return; L_08B53B4C: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B53B64; } @@ -8268,7 +8407,6 @@ L_08B53B54: } L_08B53B5C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53BFC; } @@ -8327,7 +8465,6 @@ L_08B53BD4: AOT_REGCACHE_SYNC_OUT(); return; L_08B53BE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53BFC; } @@ -8355,7 +8492,17 @@ L_08B53C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53C18: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8374,7 +8521,6 @@ L_08B53C34: AOT_REGCACHE_SYNC_OUT(); return; L_08B53C44: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B53C5C; } @@ -8390,7 +8536,6 @@ L_08B53C4C: } L_08B53C54: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53CFC; } @@ -8451,7 +8596,6 @@ L_08B53CD4: AOT_REGCACHE_SYNC_OUT(); return; L_08B53CE8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53CFC; } @@ -8478,7 +8622,17 @@ L_08B53D00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53D14: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8498,7 +8652,6 @@ L_08B53D38: AOT_REGCACHE_SYNC_OUT(); return; L_08B53D48: { const bool branch_taken = aot_gpr_2 != ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B53D60; } @@ -8514,7 +8667,6 @@ L_08B53D50: } L_08B53D58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53DF8; } @@ -8573,7 +8725,6 @@ L_08B53DD0: AOT_REGCACHE_SYNC_OUT(); return; L_08B53DE4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53DF8; } @@ -8601,7 +8752,17 @@ L_08B53DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53E14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -8633,7 +8794,6 @@ L_08B53E4C: AOT_REGCACHE_SYNC_OUT(); return; L_08B53E54: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B53E6C; } @@ -8647,7 +8807,6 @@ L_08B53E5C: goto L_08B53E64; L_08B53E64: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B53FA0; } @@ -8670,7 +8829,6 @@ L_08B53E74: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B53FA0; } @@ -8687,7 +8845,6 @@ L_08B53EA4: aot_gpr_4 = (20224u << 16u); aot_fpr_20 = std::bit_cast(aot_gpr_4); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08B53ECC; @@ -8724,7 +8881,6 @@ L_08B53EDC: L_08B53F04: aot_fpr_12 = std::bit_cast(std::bit_cast(ctx.fpr[0])); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_20)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_12 = aot_fpr_12 - aot_fpr_20; goto L_08B53F24; @@ -8790,7 +8946,17 @@ L_08B53FA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B53FBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -8812,7 +8978,6 @@ L_08B53FE0: goto L_08B53FF4; L_08B53FF4: aot_gpr_31 = (0x08B53FFCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 333u, 0x08B656D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B53FFCu) goto L_08B53FFC; AOT_REGCACHE_SYNC_OUT(); return; L_08B53FFC: diff --git a/profiles/vcs/generated/generated_unit_0212.cpp b/profiles/vcs/generated/generated_unit_0212.cpp index 18d7c73..e04b2ae 100644 --- a/profiles/vcs/generated/generated_unit_0212.cpp +++ b/profiles/vcs/generated/generated_unit_0212.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0212[4096] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 0, 5, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 12, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, 0, - 0, 16, 0, 17, 0, 0, 18, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 24, 0, 0, 0, - 0, 25, 0, 0, 0, 0, 26, 0, 0, 27, 0, 28, 0, 0, 29, 0, 30, 0, 0, 31, 32, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 42, 43, 0, 0, - 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 50, 0, 0, 0, - 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 54, 0, 0, 55, 0, 0, 56, 0, 57, 0, 0, 0, 58, 0, 0, 0, - 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, - 0, 0, 0, 65, 0, 0, 0, 66, 0, 67, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 75, 0, 0, 76, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 80, 0, 0, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 83, 84, 0, 0, 0, 85, 0, 0, 86, 0, 87, 0, 88, 0, 0, 89, 90, 0, 0, 0, - 91, 0, 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, 97, 0, 98, 0, 0, 0, 99, 0, - 0, 0, 100, 0, 0, 101, 0, 102, 0, 0, 103, 104, 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 107, 0, 108, 0, 0, 109, 0, 0, 110, - 0, 111, 0, 112, 0, 0, 113, 0, 0, 114, 0, 115, 0, 116, 0, 117, 0, 0, 118, 0, 119, 0, 120, 0, 121, 0, 0, 122, 0, 123, 0, 124, - 0, 0, 125, 0, 0, 126, 0, 127, 0, 128, 0, 129, 0, 0, 130, 0, 131, 0, 132, 0, 133, 0, 0, 134, 0, 135, 0, 136, 0, 137, 0, 0, - 138, 0, 139, 0, 140, 0, 0, 141, 0, 0, 142, 0, 143, 0, 144, 0, 0, 145, 0, 0, 146, 0, 147, 0, 148, 0, 149, 0, 0, 150, 0, 151, - 0, 152, 0, 153, 0, 0, 154, 0, 155, 0, 156, 0, 0, 157, 0, 0, 158, 0, 159, 0, 160, 0, 0, 161, 0, 0, 162, 0, 163, 0, 164, 0, - 165, 0, 0, 166, 0, 167, 0, 168, 0, 169, 0, 0, 170, 0, 171, 0, 172, 0, 0, 173, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, - 0, 0, 176, 0, 0, 0, 177, 0, 0, 0, 178, 179, 0, 0, 0, 180, 181, 182, 0, 0, 0, 183, 0, 184, 0, 0, 0, 185, 0, 0, 0, 186, - 0, 0, 0, 0, 0, 187, 0, 0, 0, 188, 0, 0, 189, 0, 0, 190, 0, 191, 0, 0, 192, 0, 193, 0, 0, 194, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 196, 0, 197, 198, 0, 199, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 0, 202, 0, 203, 0, 0, - 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 207, 0, 208, 0, 0, 0, 209, 0, 210, 0, 0, 0, 211, 0, 0, 212, 213, 0, 214, 0, 215, - 0, 216, 0, 217, 0, 218, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 222, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 0, 0, 0, 227, 0, 0, 228, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 231, 0, 232, 0, 233, 0, 0, 234, 0, 0, 235, 0, 236, 237, 0, 0, 238, 0, 239, 0, 240, 241, 242, 0, 0, 0, 243, 0, 0, 0, - 0, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, 249, 0, 250, 0, 251, 0, 252, 0, 253, 0, 254, 0, 255, 0, 256, 0, 257, 0, 258, 0, - 259, 0, 260, 0, 0, 0, 0, 0, 0, 0, 261, 0, 262, 0, 263, 0, 0, 0, 0, 264, 0, 265, 0, 266, 0, 267, 0, 268, 0, 269, 0, 0, - 0, 0, 0, 270, 0, 271, 0, 272, 0, 273, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, - 0, 277, 0, 0, 278, 0, 0, 279, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 282, 0, 0, 0, 0, 0, 283, 284, 0, 285, 0, 0, - 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 288, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 291, 0, 0, 292, 0, 293, 294, 0, - 295, 0, 0, 0, 296, 297, 0, 0, 0, 0, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 0, 303, 0, 304, 0, 305, 0, 0, 0, 0, 0, 0, - 0, 306, 0, 0, 307, 0, 308, 309, 0, 310, 0, 0, 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 316, 0, 317, 0, 318, 0, - 319, 0, 320, 0, 0, 0, 321, 0, 0, 322, 0, 323, 324, 0, 325, 0, 326, 327, 0, 0, 0, 328, 0, 329, 0, 330, 0, 331, 0, 332, 0, 333, - 0, 334, 0, 335, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 338, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 342, 0, 343, 0, 0, 344, 345, 0, 346, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 350, 0, 351, 0, - 0, 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, 357, 0, 0, 358, 0, 0, 0, 0, - 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 361, 362, 0, 0, 0, 363, 364, 0, 0, 365, 0, 366, 0, 367, 0, 0, 368, 0, 0, - 369, 0, 0, 370, 0, 371, 0, 372, 373, 0, 0, 374, 0, 375, 376, 0, 377, 0, 378, 0, 0, 379, 0, 0, 380, 0, 0, 381, 0, 382, 0, 0, - 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, 388, 0, 0, 389, 0, - 390, 0, 391, 392, 0, 0, 393, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 395, 0, 396, 0, 0, 0, 0, 397, 0, 0, 398, 0, 399, 0, 0, - 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 403, 0, - 0, 404, 0, 405, 0, 406, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, 410, 0, - 0, 411, 0, 0, 0, 412, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 417, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, - 423, 0, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, 0, 0, 428, 0, - 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 430, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 432, 0, 433, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 0, 435, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 0, 0, 0, - 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 0, 0, 443, 444, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, 0, - 0, 0, 449, 0, 0, 450, 0, 451, 0, 452, 453, 0, 0, 0, 454, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 457, - 0, 0, 0, 458, 0, 0, 0, 459, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 0, 0, 462, 0, 463, 0, 464, 0, 0, 0, 465, 0, 0, 0, - 466, 0, 0, 467, 0, 0, 468, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 471, 0, 472, 0, 0, 473, 0, 0, 0, 0, - 474, 0, 475, 476, 0, 0, 477, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, 480, 0, 481, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, 484, - 485, 0, 0, 0, 0, 486, 0, 487, 0, 488, 0, 0, 0, 0, 489, 0, 490, 0, 0, 491, 0, 0, 492, 0, 493, 494, 495, 0, 0, 0, 0, 0, - 0, 0, 496, 0, 0, 497, 0, 0, 498, 0, 0, 499, 0, 0, 0, 0, 500, 0, 501, 502, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 505, - 0, 0, 506, 0, 507, 508, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 511, 0, 512, 0, 513, 514, 0, 0, 0, 0, 515, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 519, 520, 0, 0, 521, 0, 0, 522, 0, 523, 0, 524, 0, 525, 0, 0, 526, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 528, 0, 0, 529, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 532, 0, 533, 534, 0, 0, 0, 535, 0, 0, 0, - 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 538, 0, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 541, 0, - 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, 545, 0, 546, 547, 0, 0, 548, 0, 0, 549, 0, 550, 0, 0, 0, 0, 551, 0, - 552, 0, 553, 0, 0, 554, 0, 0, 0, 0, 555, 0, 556, 0, 557, 0, 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 559, 0, 560, 0, 0, - 561, 562, 0, 563, 0, 564, 0, 0, 0, 0, 0, 0, 565, 0, 566, 567, 0, 0, 568, 0, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, - 0, 0, 0, 0, 571, 0, 572, 0, 0, 573, 0, 0, 574, 0, 0, 0, 0, 575, 0, 0, 0, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 578, 0, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, 0, 582, 0, 0, 0, 0, 0, - 0, 0, 0, 583, 0, 584, 0, 0, 0, 585, 0, 0, 586, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 588, 0, 0, - 0, 0, 0, 589, 0, 590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 0, 593, 0, - 0, 594, 0, 0, 0, 595, 0, 0, 596, 0, 0, 0, 597, 0, 0, 0, 0, 598, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, - 601, 0, 0, 0, 602, 0, 603, 0, 604, 605, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 0, - 611, 0, 0, 0, 0, 0, 0, 612, 613, 614, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 621, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 624, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, 628, 0, 629, 0, 0, 0, - 0, 630, 0, 631, 0, 0, 0, 0, 0, 632, 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 0, 638, 0, 639, 0, 640, 0, 0, 641, 0, 0, - 642, 0, 0, 643, 0, 0, 0, 0, 0, 644, 0, 645, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 648, 0, 0, 0, 649, 0, 0, 650, 0, - 0, 0, 0, 651, 652, 0, 653, 0, 654, 0, 655, 656, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 658, 0, 659, 0, 0, 660, 0, - 0, 0, 661, 0, 0, 662, 0, 0, 0, 0, 0, 663, 664, 0, 0, 665, 0, 0, 666, 0, 667, 0, 668, 669, 0, 0, 0, 670, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 671, 0, 672, 0, 0, 673, 0, 0, 674, 0, 0, 675, 0, 0, 676, 0, 0, 0, 0, 0, 0, 677, 0, 0, 678, 679, 0, - 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 682, 683, 0, 0, 0, 0, 684, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 686, - 0, 0, 687, 0, 0, 688, 0, 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 692, 0, 0, 693, 0, 0, 0, 694, - 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 700, 0, 0, 0, 0, - 701, 0, 0, 0, 702, 0, 703, 0, 704, 0, 705, 0, 0, 706, 0, 0, 0, 0, 0, 0, 707, 708, 0, 0, 0, 709, 0, 0, 710, 0, 711, 0, - 712, 0, 0, 0, 0, 0, 0, 713, 714, 0, 715, 0, 0, 716, 0, 717, 0, 718, 0, 719, 0, 0, 720, 0, 721, 0, 0, 0, 722, 0, 723, 0, - 0, 0, 0, 0, 724, 0, 725, 0, 726, 0, 727, 0, 0, 0, 0, 728, 0, 0, 729, 0, 0, 0, 0, 0, 730, 0, 0, 731, 0, 0, 0, 0, - 732, 0, 0, 0, 0, 0, 0, 733, 0, 734, 0, 735, 736, 0, 0, 0, 0, 0, 0, 737, 0, 0, 738, 0, 739, 0, 740, 0, 741, 0, 742, 743, - 0, 0, 0, 0, 744, 0, 745, 0, 746, 0, 0, 0, 0, 747, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 750, 0, 751, 0, 752, - 0, 753, 0, 754, 755, 0, 0, 0, 0, 756, 757, 0, 758, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 760, 0, 761, 0, 762, 763, 0, - 0, 0, 0, 0, 0, 764, 0, 0, 765, 0, 766, 0, 767, 768, 0, 0, 0, 0, 0, 769, 0, 770, 0, 0, 0, 0, 771, 772, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 773, 0, 0, 774, 0, 775, 0, 776, 777, 0, 0, 0, 0, 0, 778, 779, 0, 0, 0, 0, 0, 780, 0, 0, 0, 781, 0, - 0, 0, 782, 783, 0, 0, 0, 784, 0, 0, 785, 0, 0, 786, 0, 0, 0, 0, 0, 0, 787, 0, 788, 0, 789, 0, 0, 790, 0, 0, 791, 0, - 792, 793, 0, 794, 0, 795, 0, 796, 0, 797, 0, 0, 798, 0, 0, 799, 0, 800, 0, 0, 0, 0, 0, 801, 0, 0, 0, 0, 0, 802, 0, 0, - 803, 804, 0, 805, 0, 0, 806, 0, 0, 807, 0, 0, 0, 808, 0, 809, 0, 0, 810, 0, 0, 0, 0, 811, 0, 812, 0, 0, 0, 0, 0, 813, - 0, 0, 0, 814, 0, 815, 0, 816, 0, 0, 817, 818, 0, 819, 0, 0, 820, 0, 0, 821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 822, 0, 0, 0, 823, 0, 0, 824, 0, 0, 825, 826, 0, 0, 827, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 829, 0, 0, 0, 830, 0, 0, - 831, 0, 0, 0, 832, 0, 833, 0, 0, 0, 834, 0, 835, 0, 0, 836, 0, 837, 0, 0, 0, 0, 838, 0, 0, 0, 839, 840, 0, 0, 0, 841, - 0, 0, 842, 0, 0, 843, 0, 0, 844, 0, 845, 0, 846, 0, 847, 0, 848, 0, 849, 0, 0, 850, 0, 851, 852, 0, 853, 0, 854, 855, 0, 0, - 856, 0, 0, 857, 0, 0, 858, 0, 0, 859, 0, 0, 0, 860, 0, 0, 861, 0, 0, 0, 0, 862, 0, 863, 0, 0, 0, 0, 0, 864, 0, 0, - 0, 865, 0, 866, 0, 867, 0, 0, 868, 869, 0, 870, 0, 0, 871, 0, 0, 0, 872, 873, 0, 0, 874, 0, 0, 875, 0, 876, 877, 0, 0, 0, - 878, 0, 879, 0, 880, 0, 881, 0, 882, 883, 0, 0, 0, 884, 0, 0, 885, 0, 0, 0, 0, 0, 886, 0, 0, 0, 0, 887, 0, 0, 888, 0, - 0, 0, 0, 889, 0, 890, 891, 0, 0, 892, 893, 0, 0, 0, 894, 895, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, 0, 899, 0, 0, 0, 0, 0, 0, 900, 0, 0, 0, 901, 0, 902, - 0, 903, 904, 0, 0, 905, 0, 906, 0, 907, 0, 908, 0, 0, 0, 0, 909, 0, 0, 0, 0, 0, 0, 910, 911, 0, 0, 912, 0, 913, 914, 0, - 0, 915, 0, 0, 0, 0, 916, 0, 0, 0, 917, 918, 0, 0, 0, 0, 919, 0, 920, 0, 921, 0, 922, 0, 0, 923, 0, 924, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 925, 0, 926, 0, 0, 927, 0, 0, 0, 0, 0, 0, 928, 0, 0, 929, 0, 0, 930, 0, 0, 931, 0, 0, 0, 932, 0, - 0, 0, 0, 0, 0, 933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, 0, 0, 0, 935, 0, 0, 0, 936, 0, 0, 937, 0, 0, 0, 0, 938, - 0, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 940, 941, 0, 0, 942, 943, 0, 0, 944, 0, 0, 945, 0, 0, 946, 0, 947, - 0, 948, 0, 949, 0, 950, 0, 0, 0, 0, 0, 0, 0, 951, 0, 0, 952, 0, 953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 954, 0, 955, 0, 956, 957, 0, 958, 0, 959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 960, 0, 961, 0, 0, 962, 0, 0, 963, 0, 964, - 0, 965, 0, 0, 966, 0, 0, 967, 968, 0, 969, 0, 970, 971, 0, 972, 0, 0, 973, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, - 976, 977, 0, 978, 0, 979, 980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, 983, - 0, 984, 0, 985, 0, 0, 986, 0, 987, 0, 988, 0, 0, 989, 0, 990, 0, 0, 0, 0, 0, 0, 0, 0, 0, 991, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, 994, 0, 995, 0, 996, 0, 0, 997, 0, 998, 999, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1000, 0, 1001, 0, 0, 1002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1003, 0, 0, 0, 0, 1004, 0, 1005, 0, - 1006, 0, 1007, 0, 1008, 0, 1009, 0, 1010, 0, 0, 0, 0, 0, 1011, 0, 0, 0, 1012, 0, 0, 0, 0, 1013, 0, 0, 0, 0, 1014, 0, 0, 0, - 0, 1015, 0, 0, 0, 0, 1016, 0, 0, 0, 0, 0, 1017, 0, 1018, 0, 0, 1019, 1020, 1021, 0, 0, 0, 0, 1022, 0, 0, 1023, 0, 0, 0, 0, - 0, 1024, 0, 1025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1027, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1029, 0, - 0, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1031, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0, 1034, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 1037, 0, 0, 0, 0, 1038, 0, 0, 0, - 0, 0, 0, 1039, 0, 0, 1040, 0, 0, 0, 0, 1041, 0, 1042, 0, 0, 1043, 0, 1044, 0, 0, 1045, 1046, 0, 1047, 0, 0, 0, 1048, 0, 1049, 0, - 0, 0, 1050, 0, 0, 1051, 0, 0, 0, 1052, 0, 0, 0, 0, 0, 0, 0, 0, 1053, 0, 1054, 0, 0, 1055, 0, 1056, 0, 0, 0, 1057, 0, 1058, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0212[64] = { + 0x00002440A4000801ull, 0x1142114A48044508ull, 0x32228A4804194A42ull, 0x1149102111289008ull, + 0x0100128810402488ull, 0x2081010092220208ull, 0x4528250119523401ull, 0xA954AA4A92A10CA4ull, + 0xA55254952A954AA4ull, 0x804952A95495254Aull, 0x0252922088A38C44ull, 0xAC8A29282812B480ull, + 0x00210000880200AAull, 0x8044850000000000ull, 0x5555555411D4D254ull, 0x201082A82AA85405ull, + 0x69010D082C144092ull, 0x555062D202AAA831ull, 0x2054408AAAA35A45ull, 0x5800000800000565ull, + 0x254C640109202214ull, 0x48214810292569A9ull, 0x48004010290A024Dull, 0x80520122500400AAull, + 0x0210800200000800ull, 0x0501088041200121ull, 0x000B14090A005200ull, 0x900146A440010010ull, + 0x0944044911504888ull, 0x074942A18234844Dull, 0x10D50234844D0924ull, 0x0402552600400500ull, + 0x4401204211A80520ull, 0x2840542542935102ull, 0x004212501024D02Bull, 0x0440002000508000ull, + 0x4020802820011228ull, 0x0155035120121122ull, 0x6009240010222381ull, 0x254AAA0A16108000ull, + 0x4884000000002A09ull, 0x08D498244A020D58ull, 0x81043208640924A0ull, 0x0C00244889022124ull, + 0x514AA58152302551ull, 0xD5481A8109048550ull, 0x6A02161AA9006150ull, 0x441835200C283520ull, + 0x208292AB4950248Cull, 0x00092CA88284A24Bull, 0x8C42945122104C91ull, 0x20A1224935A55524ull, + 0x484123551A4C4B2Aull, 0xA20420004004C668ull, 0x0A550C4269810AA6ull, 0x84888020449204A0ull, + 0x0005202AA4998004ull, 0x4014B592A4A00AD4ull, 0x0200A54A9004006Bull, 0x508009401A548008ull, + 0x090E504210844155ull, 0x400010001000400Aull, 0x108802000A008802ull, 0xA294022451652848ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0212[64] = { + 1u, 9u, 25u, 44u, 59u, 70u, 81u, 100u, 125u, 152u, 176u, 195u, 216u, 225u, 231u, 259u, + 277u, 295u, 319u, 342u, 352u, 369u, 390u, 404u, 418u, 423u, 434u, 446u, 458u, 474u, 496u, 516u, + 528u, 542u, 561u, 577u, 583u, 594u, 611u, 625u, 642u, 651u, 671u, 687u, 701u, 724u, 744u, 764u, + 782u, 803u, 822u, 842u, 865u, 889u, 903u, 925u, 939u, 954u, 976u, 992u, 1006u, 1024u, 1030u, 1039u, }; void recomp_unit_0212_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0212_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B54000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0212[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0212[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0212[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B54000; @@ -1288,7 +1195,17 @@ L_08B5407C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54098: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_31); @@ -1299,7 +1216,6 @@ L_08B54098: L_08B540A8: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B54138; } @@ -1343,7 +1259,6 @@ L_08B5410C: AOT_REGCACHE_SYNC_OUT(); return; L_08B54120: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B54138; } @@ -1364,7 +1279,17 @@ L_08B54138: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54148: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1378,7 +1303,6 @@ L_08B54148: L_08B5416C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5418C; } @@ -1387,7 +1311,6 @@ L_08B5416C: L_08B54178: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B541A0; } @@ -1434,7 +1357,6 @@ L_08B541C4: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B54240; } @@ -1465,7 +1387,6 @@ L_08B54204: aot_gpr_4 = (0u < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5422C; } @@ -1479,7 +1400,6 @@ L_08B54218: AOT_REGCACHE_SYNC_OUT(); return; L_08B54224: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B54238; } @@ -1521,7 +1441,17 @@ L_08B54250: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54268: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1535,7 +1465,6 @@ L_08B54268: L_08B5428C: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B542AC; } @@ -1544,7 +1473,6 @@ L_08B5428C: L_08B54298: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(96))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B542C4; } @@ -1608,7 +1536,17 @@ L_08B542F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5430C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -1622,7 +1560,6 @@ L_08B5430C: L_08B54330: ctx.gpr[17] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[17] != 0u; - // nop if (branch_taken) { goto L_08B54354; } @@ -1637,7 +1574,6 @@ L_08B5433C: AOT_REGCACHE_SYNC_OUT(); return; L_08B5434C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B54394; } @@ -1685,7 +1621,17 @@ L_08B54394: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B543B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1696,7 +1642,6 @@ L_08B543B0: L_08B543C0: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B543E0; } @@ -1705,7 +1650,6 @@ L_08B543C0: L_08B543CC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(104))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B543E0; } @@ -1723,7 +1667,17 @@ L_08B543E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B543F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1743,7 +1697,6 @@ L_08B5440C: L_08B5441C: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B54458; } @@ -1752,7 +1705,6 @@ L_08B5441C: L_08B54428: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B54458; } @@ -1794,7 +1746,17 @@ L_08B54458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54470: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1813,7 +1775,6 @@ L_08B5448C: AOT_REGCACHE_SYNC_OUT(); return; L_08B5449C: { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B5450C; } @@ -1822,7 +1783,6 @@ L_08B5449C: L_08B544A4: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B5450C; } @@ -1846,9 +1806,7 @@ L_08B544B0: aot_gpr_5 = (aot_gpr_5 | 13107u); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B5450C; } @@ -1892,7 +1850,17 @@ L_08B5450C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54524: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[4]{std::bit_cast(aot_fpr_20), aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -1919,7 +1887,6 @@ L_08B54554: L_08B54564: aot_fpr_12 = std::bit_cast(std::bit_cast(aot_fpr_0)); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B545C0; } @@ -1928,7 +1895,6 @@ L_08B54564: L_08B54570: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(104))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B545C0; } @@ -1949,9 +1915,7 @@ L_08B5457C: aot_gpr_5 = (ctx.vfpu_scalar_bits_ct<28u>()); aot_fpr_13 = std::bit_cast(aot_gpr_5); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_20)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); - // nop if (branch_taken) { goto L_08B545C0; } @@ -1993,7 +1957,17 @@ L_08B545C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B545DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2006,7 +1980,6 @@ L_08B545DC: L_08B545F4: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B54660; } @@ -2022,7 +1995,6 @@ L_08B54600: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B54630; } @@ -2084,7 +2056,17 @@ L_08B54670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54680: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], aot_gpr_31}; @@ -2097,7 +2079,6 @@ L_08B54680: AOT_REGCACHE_SYNC_OUT(); return; L_08B546A0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B546D4; } @@ -2123,7 +2104,6 @@ L_08B546B4: } L_08B546CC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B546F8; } @@ -2153,7 +2133,6 @@ L_08B546F8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(84))); aot_gpr_5 = (0u | 4u); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B5471C; } @@ -2167,7 +2146,6 @@ L_08B54708: AOT_REGCACHE_SYNC_OUT(); return; L_08B54714: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B54728; } @@ -2194,7 +2172,17 @@ L_08B5472C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54740: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -2206,7 +2194,6 @@ L_08B54740: goto L_08B54754; L_08B54754: aot_gpr_31 = (0x08B5475Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5475Cu) goto L_08B5475C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5475C: @@ -2228,7 +2215,6 @@ L_08B54770: goto L_08B5477C; L_08B5477C: aot_gpr_31 = (0x08B54784u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54784u) goto L_08B54784; AOT_REGCACHE_SYNC_OUT(); return; L_08B54784: @@ -2250,7 +2236,6 @@ L_08B54798: goto L_08B547A4; L_08B547A4: aot_gpr_31 = (0x08B547ACu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B547ACu) goto L_08B547AC; AOT_REGCACHE_SYNC_OUT(); return; L_08B547AC: @@ -2271,7 +2256,6 @@ L_08B547BC: goto L_08B547C8; L_08B547C8: aot_gpr_31 = (0x08B547D0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B547D0u) goto L_08B547D0; AOT_REGCACHE_SYNC_OUT(); return; L_08B547D0: @@ -2292,7 +2276,6 @@ L_08B547E0: goto L_08B547EC; L_08B547EC: aot_gpr_31 = (0x08B547F4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B547F4u) goto L_08B547F4; AOT_REGCACHE_SYNC_OUT(); return; L_08B547F4: @@ -2314,7 +2297,6 @@ L_08B54808: goto L_08B54814; L_08B54814: aot_gpr_31 = (0x08B5481Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5481Cu) goto L_08B5481C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5481C: @@ -2335,7 +2317,6 @@ L_08B5482C: goto L_08B54838; L_08B54838: aot_gpr_31 = (0x08B54840u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54840u) goto L_08B54840; AOT_REGCACHE_SYNC_OUT(); return; L_08B54840: @@ -2356,7 +2337,6 @@ L_08B54850: goto L_08B5485C; L_08B5485C: aot_gpr_31 = (0x08B54864u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54864u) goto L_08B54864; AOT_REGCACHE_SYNC_OUT(); return; L_08B54864: @@ -2377,7 +2357,6 @@ L_08B54874: goto L_08B54880; L_08B54880: aot_gpr_31 = (0x08B54888u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54888u) goto L_08B54888; AOT_REGCACHE_SYNC_OUT(); return; L_08B54888: @@ -2399,7 +2378,6 @@ L_08B5489C: goto L_08B548A8; L_08B548A8: aot_gpr_31 = (0x08B548B0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B548B0u) goto L_08B548B0; AOT_REGCACHE_SYNC_OUT(); return; L_08B548B0: @@ -2421,7 +2399,6 @@ L_08B548C4: goto L_08B548D0; L_08B548D0: aot_gpr_31 = (0x08B548D8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B548D8u) goto L_08B548D8; AOT_REGCACHE_SYNC_OUT(); return; L_08B548D8: @@ -2442,7 +2419,6 @@ L_08B548E8: goto L_08B548F4; L_08B548F4: aot_gpr_31 = (0x08B548FCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B548FCu) goto L_08B548FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B548FC: @@ -2463,7 +2439,6 @@ L_08B5490C: goto L_08B54918; L_08B54918: aot_gpr_31 = (0x08B54920u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54920u) goto L_08B54920; AOT_REGCACHE_SYNC_OUT(); return; L_08B54920: @@ -2485,7 +2460,6 @@ L_08B54934: goto L_08B54940; L_08B54940: aot_gpr_31 = (0x08B54948u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54948u) goto L_08B54948; AOT_REGCACHE_SYNC_OUT(); return; L_08B54948: @@ -2507,7 +2481,6 @@ L_08B5495C: goto L_08B54968; L_08B54968: aot_gpr_31 = (0x08B54970u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54970u) goto L_08B54970; AOT_REGCACHE_SYNC_OUT(); return; L_08B54970: @@ -2528,7 +2501,6 @@ L_08B54980: goto L_08B5498C; L_08B5498C: aot_gpr_31 = (0x08B54994u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54994u) goto L_08B54994; AOT_REGCACHE_SYNC_OUT(); return; L_08B54994: @@ -2551,7 +2523,6 @@ L_08B549A4: } L_08B549B0: aot_gpr_31 = (0x08B549B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 755u, 0x08B67230u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B549B8u) goto L_08B549B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B549B8: @@ -2571,7 +2542,17 @@ L_08B549CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B549D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[3] = (519u << 16u); @@ -2665,7 +2646,17 @@ L_08B54A7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54A94: ctx.gpr[3] = (0u << 16u); ctx.gpr[14] = (ctx.gpr[3] + static_cast(0)); @@ -2814,7 +2805,6 @@ L_08B54BA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B54BAC: { const bool branch_taken = static_cast(ctx.gpr[2]) < 0; - // nop if (branch_taken) { goto L_08B54C14; } @@ -2828,7 +2818,6 @@ L_08B54BB4: goto L_08B57728; L_08B54BC4: aot_gpr_31 = (0x08B54BCCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 61u, 0x08B60628u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54BCCu) goto L_08B54BCC; AOT_REGCACHE_SYNC_OUT(); return; L_08B54BCC: @@ -2844,7 +2833,6 @@ L_08B54BCC: L_08B54BDC: aot_gpr_4 = (aot_gpr_6 + static_cast(0)); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B54BFC; } @@ -2864,11 +2852,9 @@ L_08B54BF4: goto L_08B57808; L_08B54BFC: aot_gpr_31 = (0x08B54C04u); - // nop goto L_08B57728; L_08B54C04: aot_gpr_31 = (0x08B54C0Cu); - // nop ctx.pc = 0x00000000u; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54C0Cu) goto L_08B54C0C; AOT_REGCACHE_SYNC_OUT(); return; @@ -2894,7 +2880,17 @@ L_08B54C1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54C44: aot_gpr_4 = (ctx.gpr[21] + static_cast(616)); ctx.gpr[12] = (ctx.gpr[21] + static_cast(708)); @@ -2996,7 +2992,6 @@ L_08B54DBC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(-29556))); jump_target = aot_gpr_4; aot_gpr_31 = (0x08B54DC8u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54DC8u) goto L_08B54DC8; AOT_REGCACHE_SYNC_OUT(); return; @@ -3008,7 +3003,17 @@ L_08B54DC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54DD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[3] = (0u + static_cast(1)); @@ -3035,7 +3040,6 @@ L_08B54DFC: } L_08B54E08: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B54ED0; } @@ -3097,7 +3101,6 @@ L_08B54E48: } L_08B54E50: { const bool branch_taken = aot_gpr_4 == ctx.gpr[11]; - // nop if (branch_taken) { goto L_08B54E88; } @@ -3126,10 +3129,19 @@ L_08B54E70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54E88: aot_gpr_31 = (0x08B54E90u); - // nop ctx.pc = 0x08B7358Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B54E90: @@ -3143,7 +3155,6 @@ L_08B54E98: goto L_08B54EA0; L_08B54EA0: aot_gpr_31 = (0x08B54EA8u); - // nop ctx.pc = 0x08B7357Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B54EA8: @@ -3151,7 +3162,6 @@ L_08B54EA8: goto L_08B54E60; L_08B54EB0: aot_gpr_31 = (0x08B54EB8u); - // nop ctx.pc = 0x08B73584u; AOT_REGCACHE_SYNC_OUT(); return; L_08B54EB8: @@ -3170,7 +3180,6 @@ L_08B54EC8: goto L_08B54E3C; L_08B54ED0: aot_gpr_31 = (0x08B54ED8u); - // nop ctx.pc = 0x08B7358Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B54ED8: @@ -3178,7 +3187,6 @@ L_08B54ED8: goto L_08B54E10; L_08B54EE0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B54E10; } @@ -3186,7 +3194,6 @@ L_08B54EE0: } L_08B54EE8: aot_gpr_31 = (0x08B54EF0u); - // nop ctx.pc = 0x08B7357Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B54EF0: @@ -3194,7 +3201,6 @@ L_08B54EF0: goto L_08B54E10; L_08B54EF8: aot_gpr_31 = (0x08B54F00u); - // nop ctx.pc = 0x08B73584u; AOT_REGCACHE_SYNC_OUT(); return; L_08B54F00: @@ -3216,7 +3222,6 @@ L_08B54F08: } L_08B54F28: aot_gpr_31 = (0x08B54F30u); - // nop ctx.pc = 0x00000000u; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B54F30u) goto L_08B54F30; AOT_REGCACHE_SYNC_OUT(); return; @@ -3237,7 +3242,6 @@ L_08B54F38: } L_08B54F4C: aot_gpr_31 = (0x08B54F54u); - // nop ctx.pc = 0x08B73544u; AOT_REGCACHE_SYNC_OUT(); return; L_08B54F54: @@ -3274,7 +3278,6 @@ L_08B54F74: } L_08B54F8C: aot_gpr_31 = (0x08B54F94u); - // nop ctx.pc = 0x08B735BCu; AOT_REGCACHE_SYNC_OUT(); return; L_08B54F94: @@ -3305,7 +3308,17 @@ L_08B54FBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B54FD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3371,7 +3384,6 @@ L_08B55038: } L_08B55048: aot_gpr_31 = (0x08B55050u); - // nop ctx.pc = 0x08B7355Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B55050: @@ -3430,7 +3442,17 @@ L_08B550AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B550C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[3] = (0u + static_cast(1)); @@ -3456,7 +3478,6 @@ L_08B550E0: } L_08B550EC: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B5512C; } @@ -3493,14 +3514,22 @@ L_08B55114: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5512C: aot_gpr_31 = (0x08B55134u); - // nop ctx.pc = 0x08B7358Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B55134: - // nop goto L_08B550F8; L_08B5513C: if (aot_gpr_4 != 0u) { @@ -3510,19 +3539,15 @@ L_08B5513C: goto L_08B55144; L_08B55144: aot_gpr_31 = (0x08B5514Cu); - // nop ctx.pc = 0x08B7357Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B5514C: - // nop goto L_08B550F8; L_08B55154: aot_gpr_31 = (0x08B5515Cu); - // nop ctx.pc = 0x08B73584u; AOT_REGCACHE_SYNC_OUT(); return; L_08B5515C: - // nop goto L_08B550F8; L_08B55164: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); @@ -3549,7 +3574,6 @@ L_08B55184: } L_08B55190: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B551D0; } @@ -3586,14 +3610,22 @@ L_08B551B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B551D0: aot_gpr_31 = (0x08B551D8u); - // nop ctx.pc = 0x08B7358Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B551D8: - // nop goto L_08B5519C; L_08B551E0: if (aot_gpr_4 != 0u) { @@ -3603,19 +3635,15 @@ L_08B551E0: goto L_08B551E8; L_08B551E8: aot_gpr_31 = (0x08B551F0u); - // nop ctx.pc = 0x08B7357Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B551F0: - // nop goto L_08B5519C; L_08B551F8: aot_gpr_31 = (0x08B55200u); - // nop ctx.pc = 0x08B73584u; AOT_REGCACHE_SYNC_OUT(); return; L_08B55200: - // nop goto L_08B5519C; L_08B55208: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); @@ -3638,7 +3666,6 @@ L_08B55218: } L_08B55224: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B55254; } @@ -3671,14 +3698,22 @@ L_08B55244: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55254: aot_gpr_31 = (0x08B5525Cu); - // nop ctx.pc = 0x08B7358Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B5525C: - // nop goto L_08B55230; L_08B55264: if (aot_gpr_4 != 0u) { @@ -3688,19 +3723,15 @@ L_08B55264: goto L_08B5526C; L_08B5526C: aot_gpr_31 = (0x08B55274u); - // nop ctx.pc = 0x08B7357Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B55274: - // nop goto L_08B55230; L_08B5527C: aot_gpr_31 = (0x08B55284u); - // nop ctx.pc = 0x08B73584u; AOT_REGCACHE_SYNC_OUT(); return; L_08B55284: - // nop goto L_08B55230; L_08B5528C: ctx.gpr[3] = (0u + static_cast(8192)); @@ -3710,7 +3741,17 @@ L_08B5528C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5529C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3732,10 +3773,19 @@ L_08B552B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B552C8: aot_gpr_31 = (0x08B552D0u); - // nop ctx.pc = 0x08B7356Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B552D0: @@ -3752,7 +3802,17 @@ L_08B552D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B552F4: aot_gpr_4 = (2234u << 16u); jump_target = aot_gpr_31; @@ -3760,7 +3820,17 @@ L_08B552F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55300: { const bool branch_taken = 0u == 0u; aot_gpr_4 = (2234u << 16u); @@ -3772,7 +3842,6 @@ L_08B55300: L_08B55308: ctx.gpr[2] = (aot_mem.aot_direct_load32(0u + static_cast(4))); { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B55320; } @@ -3787,14 +3856,33 @@ L_08B55318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55320: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55328: { const std::uint32_t aot_run_words[23]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], aot_gpr_29, ctx.gpr[30], aot_gpr_31, std::bit_cast(aot_fpr_20), std::bit_cast(ctx.fpr[21]), std::bit_cast(ctx.fpr[22]), std::bit_cast(ctx.fpr[23]), std::bit_cast(ctx.fpr[24]), std::bit_cast(ctx.fpr[25]), std::bit_cast(ctx.fpr[26]), std::bit_cast(ctx.fpr[27]), std::bit_cast(ctx.fpr[28]), std::bit_cast(ctx.fpr[29]), std::bit_cast(ctx.fpr[30]), std::bit_cast(ctx.fpr[31])}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -3803,7 +3891,17 @@ L_08B55328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5538C: { std::uint32_t aot_run_words[22]{}; aot_mem.aot_direct_load32_block(aot_gpr_4 + static_cast(0), aot_run_words); @@ -3846,17 +3944,25 @@ L_08B553F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B553F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-4)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B55408u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 482u, 0x08B625C8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B55408u) goto L_08B55408; AOT_REGCACHE_SYNC_OUT(); return; L_08B55408: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B55424; } @@ -3874,11 +3980,20 @@ L_08B55424: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(0))); aot_gpr_29 = (aot_gpr_29 + static_cast(4)); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55434: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -3916,7 +4031,17 @@ L_08B5546C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55480: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_5 = (2234u << 16u); @@ -4043,7 +4168,6 @@ L_08B55540: L_08B55548: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(56))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B55574; } @@ -4084,7 +4208,17 @@ L_08B55574: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55590: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -4131,7 +4265,17 @@ L_08B555D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B555EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(15532))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(84), aot_gpr_4); @@ -4145,7 +4289,6 @@ L_08B555F8: goto L_08B55600; L_08B55600: aot_gpr_31 = (0x08B55608u); - // nop goto L_08B55884; L_08B55608: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); @@ -4153,7 +4296,6 @@ L_08B55608: L_08B5560C: aot_gpr_5 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B55674; } @@ -4162,7 +4304,6 @@ L_08B5560C: L_08B55618: ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B55674; } @@ -4229,7 +4370,17 @@ L_08B55674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55690: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); ctx.gpr[2] = (0u + static_cast(-1)); @@ -4247,7 +4398,17 @@ L_08B55690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B556B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -4289,7 +4450,6 @@ L_08B5570C: goto L_08B55714; L_08B55714: { const bool branch_taken = ctx.gpr[21] == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B55748; } @@ -4313,7 +4473,17 @@ L_08B5571C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55748: ctx.gpr[2] = (0u | 0u); { std::uint32_t aot_run_words[7]{}; @@ -4331,7 +4501,17 @@ L_08B55748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55770: ctx.gpr[20] = (aot_gpr_5 | 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); @@ -4419,7 +4599,17 @@ L_08B557FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5582C: { const std::uint32_t aot_run_words[3]{0u, 0u, 0u}; aot_mem.aot_direct_store32_block(aot_gpr_4 + static_cast(0), aot_run_words); } @@ -4445,7 +4635,17 @@ L_08B5582C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55884: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (aot_gpr_4 | 0u); @@ -4486,7 +4686,17 @@ L_08B558E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55900: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (2229u << 16u); @@ -4501,7 +4711,17 @@ L_08B55914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55920: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_6, ctx.gpr[7], ctx.gpr[8]}; @@ -4524,7 +4744,17 @@ L_08B55954: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55960: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_4); @@ -4553,7 +4783,17 @@ L_08B5599C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B559AC: ctx.gpr[7] = (aot_gpr_4 | 0u); ctx.gpr[8] = (aot_gpr_6 | 0u); @@ -4581,11 +4821,20 @@ L_08B559C0: } L_08B559E0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B559E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::int64_t product = static_cast(static_cast(aot_gpr_6)) * static_cast(static_cast(aot_gpr_5)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } @@ -4641,7 +4890,17 @@ L_08B55A38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55A64: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(4), 0u); ctx.gpr[19] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); @@ -4720,7 +4979,17 @@ L_08B55ACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55B10: { const std::uint32_t dividend = aot_gpr_4; const std::uint32_t divisor = ctx.gpr[18]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[2] = (ctx.lo); @@ -4740,7 +5009,17 @@ L_08B55B10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55B40: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); @@ -4759,7 +5038,6 @@ L_08B55B78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); aot_gpr_4 = (aot_gpr_4 & 8u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B55B94; } @@ -4778,7 +5056,6 @@ L_08B55B94: goto L_08B575C8; L_08B55B9C: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B55BC0; } @@ -4824,7 +5101,17 @@ L_08B55BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55BF0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); { const bool branch_taken = ctx.gpr[18] != 0u; @@ -4882,7 +5169,6 @@ L_08B55C38: } L_08B55C50: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B55EF0; } @@ -5069,7 +5355,6 @@ L_08B55D80: } L_08B55D94: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B55EF0; } @@ -5077,7 +5362,6 @@ L_08B55D94: } L_08B55D9C: { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B55DB8; } @@ -5297,7 +5581,17 @@ L_08B55EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55F20: ctx.gpr[2] = (0u + static_cast(-1)); aot_gpr_4 = (aot_gpr_4 | 64u); @@ -5321,7 +5615,17 @@ L_08B55F28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55F58: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[19]); @@ -5399,7 +5703,17 @@ L_08B55FC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B55FE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(76), aot_gpr_16); @@ -5450,7 +5764,17 @@ L_08B56028: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5604C: aot_gpr_31 = (0x08B56054u); aot_gpr_6 = (aot_gpr_29 + static_cast(16)); @@ -5530,12 +5854,21 @@ L_08B560C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B560E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); aot_gpr_31 = (0x08B560F8u); - // nop goto L_08B55590; L_08B560F8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); @@ -5544,7 +5877,17 @@ L_08B560F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56104: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5570,7 +5913,6 @@ L_08B56130: goto L_08B56138; L_08B56138: aot_gpr_31 = (0x08B56140u); - // nop goto L_08B55884; L_08B56140: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); @@ -5610,7 +5952,17 @@ L_08B56164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56178: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_5 = (aot_gpr_4 & 8u); @@ -5621,7 +5973,6 @@ L_08B56178: } L_08B56180: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B561A8; } @@ -5645,14 +5996,23 @@ L_08B56194: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B561A8: aot_gpr_31 = (0x08B561B0u); aot_gpr_4 = (aot_gpr_16 | 0u); goto L_08B55590; L_08B561B0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B561D8; } @@ -5681,7 +6041,17 @@ L_08B561D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B561EC: if (aot_gpr_4 == 0u) { aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); @@ -5702,7 +6072,6 @@ L_08B56200: goto L_08B56204; L_08B56204: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B56230; } @@ -5727,7 +6096,17 @@ L_08B56214: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56230: aot_gpr_31 = (0x08B56238u); aot_gpr_4 = (aot_gpr_16 | 0u); @@ -5757,7 +6136,6 @@ L_08B56254: ctx.gpr[7] = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(32))); jump_target = ctx.gpr[7]; aot_gpr_31 = (0x08B56270u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B56270u) goto L_08B56270; AOT_REGCACHE_SYNC_OUT(); return; @@ -5806,7 +6184,17 @@ L_08B562B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B562C4: ctx.gpr[2] = (0u | 0u); aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); @@ -5816,7 +6204,17 @@ L_08B562C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B562D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); { const std::uint32_t aot_run_words[6]{aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10], ctx.gpr[11]}; @@ -5850,14 +6248,34 @@ L_08B5633C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56350: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56358: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); { const std::uint32_t aot_run_words[5]{aot_gpr_6, ctx.gpr[7], ctx.gpr[8], ctx.gpr[9], ctx.gpr[10]}; @@ -5900,7 +6318,17 @@ L_08B563D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B563E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -5942,7 +6370,17 @@ L_08B56430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56440: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[18]); @@ -6001,7 +6439,17 @@ L_08B564BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B564D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -6046,7 +6494,17 @@ L_08B56520: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56530: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_4 + static_cast(14)))))); @@ -6062,7 +6520,17 @@ L_08B56544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56550: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -6099,7 +6567,6 @@ L_08B56590: goto L_08B56598; L_08B56598: aot_gpr_31 = (0x08B565A0u); - // nop goto L_08B55884; L_08B565A0: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); @@ -6139,7 +6606,6 @@ L_08B565D0: goto L_08B55590; L_08B565D8: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B56600; } @@ -6173,7 +6639,17 @@ L_08B56600: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5661C: aot_gpr_4 = (aot_gpr_4 | 4u); goto L_08B56620; @@ -6221,7 +6697,17 @@ L_08B56654: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56670: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.gpr[2] = (ctx.gpr[17] | 0u); @@ -6243,7 +6729,17 @@ L_08B56670: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B566A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -6286,7 +6782,17 @@ L_08B566CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B566F4: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(60), aot_gpr_4); goto L_08B566F8; @@ -6314,7 +6820,17 @@ L_08B566F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5673C: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); ctx.gpr[2] = (aot_gpr_5 + static_cast(1)); @@ -6381,7 +6897,17 @@ L_08B567A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B567AC: aot_mem.aot_direct_store8(ctx.gpr[10] + static_cast(0), static_cast(ctx.gpr[8])); ctx.gpr[10] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); @@ -6423,7 +6949,17 @@ L_08B567D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B567E0: { const bool branch_taken = ctx.gpr[3] == ctx.gpr[7]; ctx.gpr[2] = (aot_gpr_5 + static_cast(1)); @@ -6475,11 +7011,20 @@ L_08B56824: } L_08B5682C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56834: aot_gpr_29 = (aot_gpr_29 + static_cast(-720)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(680), ctx.gpr[18]); @@ -6571,7 +7116,6 @@ L_08B56918: goto L_08B56104; L_08B56920: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B571CC; } @@ -6644,7 +7188,17 @@ L_08B56994: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B569AC: aot_gpr_16 = (0u | 0u); goto L_08B569B0; @@ -6681,7 +7235,6 @@ L_08B569DC: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0)))))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B571CC; } @@ -6975,7 +7528,17 @@ L_08B56BB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B56BE8: aot_gpr_4 = (ctx.gpr[30] + aot_gpr_4); goto L_08B56BEC; @@ -7113,7 +7676,6 @@ L_08B56CBC: } L_08B56CC4: { const bool branch_taken = ctx.gpr[17] == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B572C4; } @@ -7286,7 +7848,6 @@ L_08B56DE8: goto L_08B56DF0; L_08B56DF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B56E18; } @@ -7306,7 +7867,6 @@ L_08B56DFC: goto L_08B56E10; L_08B56E10: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B571CC; } @@ -7398,7 +7958,6 @@ L_08B56EA4: goto L_08B56EA8; L_08B56EA8: { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B571CC; } @@ -7470,7 +8029,6 @@ L_08B56F20: goto L_08B56104; L_08B56F28: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B56F4C; } @@ -7628,11 +8186,20 @@ L_08B57034: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28968))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57050: { const bool branch_taken = aot_gpr_6 == aot_gpr_4; aot_gpr_4 = (aot_gpr_16 & 256u); @@ -7926,7 +8493,17 @@ L_08B571CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57200: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(-1)))))); aot_gpr_5 = (0u | 120u); @@ -8132,7 +8709,6 @@ L_08B57330: } L_08B57338: { const bool branch_taken = aot_gpr_4 == ctx.gpr[1]; - // nop if (branch_taken) { goto L_08B573D4; } @@ -8322,7 +8898,6 @@ L_08B57438: aot_gpr_16 = (aot_gpr_29 + static_cast(292)); aot_gpr_4 = (aot_gpr_16 < ctx.gpr[17] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B571CC; } @@ -8347,7 +8922,6 @@ L_08B57458: } L_08B57464: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B571CC; } @@ -8368,7 +8942,6 @@ L_08B57470: } L_08B57480: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B57498; } @@ -8500,7 +9073,17 @@ L_08B57548: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57578: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); ctx.gpr[7] = (0u | 520u); @@ -8528,7 +9111,17 @@ L_08B575B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B575C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8554,7 +9147,6 @@ L_08B575F4: goto L_08B575FC; L_08B575FC: aot_gpr_31 = (0x08B57604u); - // nop goto L_08B55884; L_08B57604: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load16(aot_gpr_16 + static_cast(12)))))); @@ -8601,7 +9193,17 @@ L_08B5762C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57640: aot_gpr_4 = (aot_gpr_4 & aot_gpr_5); aot_mem.aot_direct_store16(aot_gpr_16 + static_cast(12), static_cast(aot_gpr_4)); @@ -8668,7 +9270,17 @@ L_08B576AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B576C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -8679,7 +9291,6 @@ L_08B576C8: goto L_08B54F08; L_08B576D0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B576C8; } @@ -8694,11 +9305,20 @@ L_08B576D8: goto L_08B576E4; L_08B576E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B576EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -8714,7 +9334,6 @@ L_08B576EC: AOT_REGCACHE_SYNC_OUT(); return; L_08B57714: aot_gpr_31 = (0x08B5771Cu); - // nop goto L_08B576C0; L_08B5771C: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(32))); @@ -8723,7 +9342,17 @@ L_08B5771C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57728: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[7] = (2234u << 16u); @@ -8788,7 +9417,17 @@ L_08B57794: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B577BC: ctx.gpr[2] = (0u + static_cast(-1)); aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); @@ -8797,7 +9436,17 @@ L_08B577BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B577CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_31); @@ -8812,7 +9461,17 @@ L_08B577DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B577E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (0u | 0u); @@ -8828,7 +9487,17 @@ L_08B577FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57808: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), aot_gpr_16); @@ -8864,7 +9533,6 @@ L_08B57850: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); jump_target = aot_gpr_4; aot_gpr_31 = (0x08B5785Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5785Cu) goto L_08B5785C; AOT_REGCACHE_SYNC_OUT(); return; @@ -8890,7 +9558,6 @@ L_08B57874: goto L_08B5787C; L_08B5787C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B5788C; } @@ -8899,7 +9566,6 @@ L_08B5787C: L_08B57884: jump_target = aot_gpr_5; aot_gpr_31 = (0x08B5788Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5788Cu) goto L_08B5788C; AOT_REGCACHE_SYNC_OUT(); return; @@ -8922,7 +9588,17 @@ L_08B57894: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B578B4: ctx.gpr[2] = (aot_gpr_4 | 0u); if (static_cast(aot_gpr_4) < 0) { @@ -8932,11 +9608,20 @@ L_08B578B4: goto L_08B578C0; L_08B578C0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B578C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21]}; @@ -8961,7 +9646,6 @@ L_08B57908: goto L_08B57910; L_08B57910: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B5792C; } @@ -8972,7 +9656,6 @@ L_08B57918: goto L_08B5791C; L_08B5791C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B57E64; } @@ -8980,7 +9663,6 @@ L_08B5791C: } L_08B57924: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B57954; } @@ -9003,10 +9685,19 @@ L_08B5792C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57954: aot_gpr_31 = (0x08B5795Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08B58974, 213u, 150u, 0x08B58974u>(ctx, &aot_mem, ctx.pc, ctx.gpr[2], aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0213_entry, 213u, 150u, 0x08B58974u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B5795Cu) goto L_08B5795C; AOT_REGCACHE_SYNC_OUT(); return; L_08B5795C: @@ -9071,7 +9762,6 @@ L_08B579A0: } L_08B579A8: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B57E64; } @@ -9122,7 +9812,17 @@ L_08B579D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B579F8: if (aot_gpr_5 != 0u) { aot_gpr_4 = (aot_gpr_4 << 8u); @@ -9142,7 +9842,6 @@ L_08B57A04: } L_08B57A0C: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B57A48; } @@ -9170,7 +9869,17 @@ L_08B57A18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57A48: ctx.gpr[2] = (0u + static_cast(-1)); { std::uint32_t aot_run_words[7]{}; @@ -9188,7 +9897,17 @@ L_08B57A48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57A70: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); aot_gpr_31 = (0x08B57A7Cu); @@ -9270,7 +9989,17 @@ L_08B57ABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57AE4: ctx.gpr[2] = (0u + static_cast(-1)); { std::uint32_t aot_run_words[7]{}; @@ -9288,7 +10017,17 @@ L_08B57AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57B0C: aot_gpr_4 = (aot_gpr_4 + ctx.gpr[21]); aot_mem.aot_direct_store16(ctx.gpr[17] + static_cast(0), static_cast(aot_gpr_4)); @@ -9308,7 +10047,17 @@ L_08B57B0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57B3C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(52))); aot_gpr_31 = (0x08B57B48u); @@ -9317,7 +10066,6 @@ L_08B57B3C: AOT_REGCACHE_SYNC_OUT(); return; L_08B57B48: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B57E64; } @@ -9366,7 +10114,17 @@ L_08B57B70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57B98: aot_gpr_4 = (0u | 0u); ctx.gpr[2] = (0u | 0u); @@ -9556,7 +10314,6 @@ L_08B57CCC: L_08B57CE0: ctx.gpr[24] = (ctx.gpr[13] < static_cast(7) ? 1u : 0u); { const bool branch_taken = ctx.gpr[24] == 0u; - // nop if (branch_taken) { goto L_08B57E04; } @@ -9568,11 +10325,20 @@ L_08B57CEC: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[13]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-28784))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57D04: { const bool branch_taken = 0u == 0u; ctx.gpr[2] = (ctx.gpr[2] + static_cast(1)); @@ -9599,7 +10365,17 @@ L_08B57D0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57D38: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); @@ -9621,7 +10397,17 @@ L_08B57D38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57D70: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(0), 0u); aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); @@ -9645,7 +10431,17 @@ L_08B57D70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57DB0: aot_gpr_4 = (0u | 1u); aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(0), aot_gpr_4); @@ -9671,7 +10467,17 @@ L_08B57DB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57DF8: aot_gpr_5 = (ctx.gpr[15] | 0u); { const bool branch_taken = 0u == 0u; @@ -9698,7 +10504,17 @@ L_08B57E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57E2C: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); ctx.gpr[13] = (ctx.gpr[2] < ctx.gpr[19] ? 1u : 0u); @@ -9726,10 +10542,19 @@ L_08B57E3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57E64: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B57EA4; } @@ -9756,7 +10581,17 @@ L_08B57E6C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57EA4: ctx.gpr[2] = (0u | 0u); { std::uint32_t aot_run_words[7]{}; @@ -9774,7 +10609,17 @@ L_08B57EA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57ECC: aot_gpr_5 = (2234u << 16u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(15532))); @@ -9783,7 +10628,17 @@ L_08B57ECC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B57EDC: ctx.gpr[9] = (2234u << 16u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(14520)); @@ -9826,7 +10681,6 @@ L_08B57F18: } L_08B57F2C: { const bool branch_taken = ctx.gpr[10] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B57F40; } @@ -9912,8 +10766,6 @@ L_08B57FA4: ctx.gpr[3] = (0u | 0u); ctx.gpr[2] = (0u | 0u); ctx.gpr[13] = (ctx.lo); - // nop - // nop { const std::uint32_t dividend = ctx.gpr[12]; const std::uint32_t divisor = ctx.gpr[7]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[12] = (ctx.hi); goto L_08B57FC8; @@ -9956,7 +10808,6 @@ L_08B57FF4: goto L_08B57FFC; L_08B57FFC: { const bool branch_taken = ctx.gpr[14] == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0213_entry, 213u, 8u, 0x08B58054u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0213.cpp b/profiles/vcs/generated/generated_unit_0213.cpp index 14b49e1..3208190 100644 --- a/profiles/vcs/generated/generated_unit_0213.cpp +++ b/profiles/vcs/generated/generated_unit_0213.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0213[4092] = { - 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 9, 0, 0, 10, 0, 11, 12, 0, 13, 0, - 14, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 0, 20, 0, 0, 0, 21, 0, 22, 0, 23, - 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 0, 0, 26, 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 30, 0, 31, - 0, 0, 0, 32, 0, 33, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 36, 0, 37, 0, 38, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, - 0, 41, 0, 42, 0, 0, 0, 0, 43, 0, 0, 44, 0, 45, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 49, 0, 50, 0, 0, 51, 0, 52, 0, 53, 0, 0, 54, 0, 55, 0, 56, 57, 0, 58, 0, 0, 59, 0, 0, 0, 60, 0, 0, 61, - 0, 0, 0, 62, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 65, 0, 66, 0, 0, 67, 68, 0, 0, 69, 0, - 70, 0, 0, 71, 72, 0, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 77, 0, 0, 0, 0, 78, - 0, 0, 0, 0, 79, 0, 0, 0, 0, 80, 0, 0, 0, 0, 81, 0, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, 0, 0, 84, 0, 0, - 0, 0, 85, 0, 0, 0, 0, 86, 0, 0, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, - 0, 0, 0, 98, 0, 0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 0, 0, 0, 102, 0, 0, 0, 0, 103, 0, 0, 0, - 0, 104, 0, 0, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, 0, 110, - 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, 0, 0, 0, 0, 113, 0, 0, 0, 0, 114, 0, 0, 0, 0, 115, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 117, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 0, 122, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 126, 0, 0, 0, 0, 127, 0, 0, 0, 0, 128, 0, 0, 0, 0, 129, 0, - 0, 0, 0, 130, 0, 0, 0, 0, 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 0, 0, 0, 134, 0, 0, 0, 0, 135, 0, 0, 0, - 0, 136, 0, 0, 0, 0, 137, 0, 0, 0, 0, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, 0, 0, 0, 142, - 0, 0, 0, 0, 143, 0, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 0, 146, 0, 147, 0, 148, 0, 149, 0, 0, 150, 0, 0, 151, - 152, 0, 0, 153, 0, 154, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 157, 0, 0, 0, 158, 0, 159, 160, 0, 0, 0, 161, 0, 162, 0, 163, - 0, 0, 0, 164, 0, 165, 0, 0, 166, 0, 0, 0, 0, 0, 167, 0, 168, 169, 0, 0, 0, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, - 175, 0, 0, 0, 176, 177, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 0, 180, 0, 0, 181, 0, 182, 0, 0, 0, 183, 184, 0, 0, - 185, 0, 0, 186, 0, 0, 0, 0, 187, 0, 188, 0, 189, 0, 190, 0, 191, 0, 192, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 196, 0, 197, - 0, 0, 0, 198, 199, 0, 0, 200, 0, 0, 0, 201, 202, 0, 0, 0, 0, 0, 203, 0, 204, 0, 0, 205, 0, 0, 0, 0, 0, 206, 0, 207, - 0, 0, 208, 0, 209, 0, 0, 210, 0, 211, 0, 0, 0, 212, 213, 0, 0, 214, 215, 0, 216, 0, 217, 0, 0, 218, 0, 0, 0, 219, 0, 220, - 221, 0, 222, 0, 0, 223, 0, 0, 224, 0, 225, 0, 0, 0, 226, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 229, 0, 0, 0, 0, 0, 230, 231, 0, 0, - 0, 232, 0, 233, 0, 0, 234, 235, 0, 0, 236, 0, 0, 0, 237, 238, 0, 0, 239, 0, 0, 240, 241, 0, 0, 0, 0, 242, 0, 0, 243, 0, - 0, 244, 0, 0, 245, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 0, 248, 0, 0, 0, 0, 249, 250, 0, 251, 0, 0, 0, 0, 252, 0, 253, - 0, 0, 0, 0, 0, 254, 255, 0, 256, 0, 0, 257, 0, 0, 0, 258, 0, 0, 259, 0, 0, 260, 0, 0, 261, 0, 0, 0, 0, 262, 263, 0, - 0, 264, 0, 0, 0, 265, 0, 0, 266, 0, 267, 0, 0, 0, 268, 0, 0, 269, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 272, 273, 0, - 0, 0, 274, 275, 0, 276, 0, 0, 277, 0, 0, 0, 278, 0, 279, 0, 0, 0, 0, 0, 280, 0, 0, 281, 0, 282, 0, 0, 283, 0, 284, 0, - 0, 285, 0, 286, 0, 287, 0, 288, 0, 289, 0, 0, 0, 290, 291, 0, 292, 0, 293, 0, 294, 0, 0, 0, 0, 295, 0, 296, 0, 0, 0, 0, - 0, 297, 0, 0, 0, 298, 0, 299, 0, 300, 0, 301, 0, 302, 303, 0, 304, 0, 0, 305, 0, 306, 0, 0, 307, 0, 0, 308, 0, 309, 0, 0, - 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 312, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 315, 0, 316, 0, - 317, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, - 327, 328, 0, 0, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 332, 0, 333, 0, 334, 335, 0, 0, 0, 0, - 0, 0, 0, 0, 336, 0, 337, 338, 0, 339, 0, 0, 0, 340, 0, 341, 0, 0, 342, 0, 0, 343, 0, 0, 344, 0, 0, 345, 0, 346, 0, 0, - 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, 0, 350, 0, 351, 0, 352, 0, 0, 0, 353, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, 0, 357, 0, 0, 0, 0, 0, 358, 0, 0, 359, 0, 0, 360, - 0, 0, 361, 0, 0, 362, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 365, 0, 366, 0, 0, 0, 0, 0, 367, 0, - 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 369, 0, 370, 371, 0, 0, 0, 0, 0, 0, 0, 0, 372, 0, 373, 374, 0, 375, 376, - 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, - 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 384, 0, 0, 0, 385, 0, 386, 0, 387, 0, 0, 0, 0, 388, 0, - 389, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 392, 0, 393, 0, 0, 394, 0, 395, 0, 396, 0, 0, 0, 0, 0, 397, 0, 0, 0, 398, 0, - 399, 0, 0, 0, 400, 401, 0, 402, 0, 0, 403, 404, 0, 405, 0, 0, 406, 407, 0, 408, 0, 0, 409, 410, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 0, 0, 412, 0, 0, 413, 0, 0, 414, 0, 0, 415, 0, 0, 0, 0, 0, 416, 0, 0, 0, 417, 0, 0, 0, 418, 0, 419, 0, 420, - 0, 421, 0, 0, 0, 0, 422, 0, 0, 0, 423, 0, 0, 424, 0, 0, 0, 0, 0, 0, 425, 0, 426, 0, 427, 428, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 429, 0, 430, 0, 431, 0, 0, 0, 0, 432, 0, 0, 0, 0, 433, 0, 0, 434, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 0, 0, 437, 0, 438, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, 0, 441, 0, 442, 0, 443, 0, 0, 0, 0, 0, - 444, 0, 0, 445, 0, 0, 0, 0, 446, 447, 0, 448, 0, 449, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 453, 0, - 0, 0, 454, 0, 0, 0, 0, 455, 0, 456, 0, 0, 457, 0, 0, 458, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 0, 461, - 0, 462, 0, 463, 0, 0, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 467, 0, 0, - 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 470, 471, 0, 0, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 474, 0, 0, - 0, 0, 475, 0, 476, 0, 0, 0, 0, 477, 0, 0, 478, 0, 479, 0, 0, 480, 0, 0, 481, 0, 482, 0, 0, 0, 0, 483, 0, 0, 0, 0, - 484, 0, 0, 0, 0, 485, 0, 0, 0, 0, 486, 0, 487, 0, 0, 488, 0, 489, 0, 0, 0, 0, 490, 0, 0, 491, 0, 0, 492, 0, 0, 0, - 0, 493, 494, 0, 0, 0, 0, 495, 0, 496, 0, 0, 0, 0, 497, 0, 498, 0, 499, 500, 0, 0, 0, 0, 501, 0, 502, 503, 0, 0, 504, 0, - 0, 505, 0, 0, 506, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 509, 0, 0, 510, 0, 0, 511, 0, 0, 512, 0, 0, 513, 0, 0, 514, 515, - 0, 0, 0, 516, 0, 0, 517, 0, 518, 0, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 522, 0, - 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 525, 0, 526, 0, 0, 527, 0, 528, 0, 529, 0, 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, 532, - 0, 533, 0, 534, 0, 0, 535, 0, 0, 0, 0, 536, 0, 537, 0, 538, 0, 0, 539, 0, 540, 0, 541, 0, 542, 0, 0, 543, 0, 0, 0, 544, - 0, 0, 0, 545, 0, 0, 0, 546, 0, 547, 548, 0, 0, 0, 549, 0, 550, 0, 551, 0, 552, 0, 0, 0, 0, 553, 0, 0, 554, 0, 0, 0, - 0, 0, 555, 0, 556, 0, 557, 558, 0, 559, 0, 560, 0, 0, 561, 562, 0, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 565, 0, 566, 0, 0, 0, 0, 567, 0, 0, 568, 0, 569, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 571, 0, 572, 0, 0, 0, 0, 573, 0, 0, 574, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, 0, 0, 579, 0, 580, 0, 0, 0, 581, 0, - 582, 0, 0, 0, 583, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 586, 0, 587, 0, 0, 588, 0, 0, 589, 0, 0, 0, 590, 0, 0, - 591, 592, 0, 0, 0, 0, 0, 593, 0, 594, 0, 0, 595, 0, 0, 0, 0, 0, 0, 596, 0, 0, 597, 0, 0, 598, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, 0, 0, 0, 0, 0, 604, 0, - 0, 605, 606, 0, 0, 0, 0, 607, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, 0, 610, 0, 0, 611, 0, 0, 0, 0, 612, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 615, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 618, 0, 0, 0, 0, 0, 619, 0, 0, 620, - 0, 621, 0, 0, 0, 0, 622, 0, 623, 0, 0, 0, 0, 0, 624, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 627, 0, - 0, 0, 628, 0, 0, 629, 0, 0, 630, 0, 631, 632, 0, 0, 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 635, - 0, 0, 636, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 640, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, - 642, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 646, 647, 0, 0, 0, 0, - 648, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 0, 652, 0, 0, 0, 653, 0, 654, 0, 0, - 0, 0, 0, 655, 0, 656, 0, 657, 0, 0, 658, 0, 0, 0, 659, 660, 0, 0, 0, 0, 0, 661, 0, 0, 0, 662, 0, 0, 663, 0, 0, 0, - 0, 0, 664, 0, 665, 0, 666, 0, 0, 0, 667, 0, 668, 0, 0, 669, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 672, 0, 0, - 673, 0, 0, 0, 674, 0, 675, 0, 0, 0, 0, 676, 0, 0, 0, 677, 678, 0, 0, 0, 679, 0, 680, 0, 681, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 685, 0, 0, 0, 0, - 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 690, - 0, 0, 691, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, - 0, 0, 0, 0, 0, 695, 696, 0, 697, 0, 0, 698, 0, 0, 699, 0, 700, 0, 0, 701, 0, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 0, - 704, 0, 0, 0, 0, 0, 0, 705, 0, 0, 706, 707, 0, 0, 708, 0, 0, 0, 0, 0, 0, 709, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, - 0, 0, 713, 0, 0, 0, 0, 0, 714, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 720, 0, 0, 0, - 721, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 723, 0, 0, 0, 0, 0, 724, 0, 725, 0, 726, 0, 0, 0, 727, 0, 0, 0, 728, 0, 0, - 729, 0, 730, 0, 0, 731, 0, 0, 0, 732, 733, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 735, 0, 736, 0, 0, 0, 0, 0, 737, 0, 0, - 738, 0, 0, 739, 0, 0, 740, 0, 0, 741, 0, 0, 0, 0, 0, 742, 0, 0, 743, 0, 744, 0, 745, 0, 0, 0, 746, 0, 0, 0, 0, 747, - 0, 0, 0, 0, 0, 0, 748, 0, 749, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 752, 0, 753, 0, 0, - 754, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 757, 0, 0, 758, 0, 0, 759, 0, 0, 0, 760, 0, 0, 0, 761, 0, - 762, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 0, 0, 765, 0, 0, 0, 766, 0, 767, 0, 0, - 0, 0, 0, 0, 0, 768, 0, 769, 0, 0, 0, 0, 0, 770, 0, 771, 0, 0, 0, 0, 0, 0, 772, 0, 0, 773, 0, 774, 0, 775, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 777, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 780, 0, 0, 0, 781, 782, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 784, 0, 0, 0, 0, 0, 0, 0, 785, 0, 786, 0, - 0, 787, 0, 0, 788, 0, 789, 0, 0, 790, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 0, 793, 0, 794, 0, 0, 0, 0, 795, - 0, 796, 797, 0, 0, 798, 0, 799, 800, 0, 801, 0, 802, 0, 803, 0, 0, 0, 0, 0, 0, 804, 0, 0, 805, 0, 0, 0, 806, 0, 0, 0, - 0, 807, 0, 0, 808, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 811, 0, 0, 0, 0, 0, 812, 0, 813, 0, 0, 0, 0, - 0, 814, 0, 0, 0, 0, 815, 0, 0, 0, 0, 0, 816, 0, 0, 0, 817, 0, 818, 0, 0, 0, 0, 0, 0, 0, 819, 0, 820, 0, 0, 0, - 0, 0, 821, 0, 822, 0, 0, 0, 0, 0, 823, 0, 0, 824, 0, 825, 0, 826, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 830, 0, 0, 831, 0, 0, 832, 0, 0, 0, 833, 0, 0, 834, 0, 0, 835, - 0, 836, 0, 0, 837, 0, 0, 838, 0, 0, 0, 0, 0, 0, 839, 0, 0, 0, 0, 840, 0, 841, 0, 0, 0, 0, 0, 0, 0, 842, 0, 843, - 0, 0, 0, 0, 0, 844, 0, 845, 0, 0, 0, 0, 0, 846, 0, 0, 847, 0, 848, 0, 849, 0, 0, 0, 0, 850, 0, 0, 0, 0, 0, 0, - 851, 0, 0, 0, 0, 0, 852, 0, 853, 0, 0, 0, 0, 0, 0, 0, 854, 0, 855, 0, 0, 0, 0, 0, 856, 0, 857, 0, 0, 0, 0, 0, - 858, 0, 0, 859, 0, 860, 0, 861, 0, 0, 0, 0, 862, 0, 0, 0, 0, 0, 863, 0, 864, 0, 865, 866, 0, 0, 0, 0, 0, 867, 0, 868, - 0, 0, 0, 0, 0, 869, 0, 870, 0, 871, 0, 872, 0, 873, 0, 0, 0, 874, 0, 0, 875, 0, 876, 0, 0, 877, 0, 878, 0, 0, 0, 0, - 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 880, 0, 881, 0, 882, 0, 0, 0, 883, 0, 0, 884, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 885, 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 887, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, 892, 893, 0, 0, 0, 894, 0, 0, 895, 0, 0, 0, 0, 896, 0, 0, - 897, 898, 0, 899, 0, 900, 0, 0, 0, 0, 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, 902, 0, 903, 0, 904, 0, 0, 905, 906, 907, 0, - 908, 0, 0, 909, 0, 910, 0, 911, 0, 0, 0, 912, 0, 0, 0, 913, 0, 0, 0, 0, 0, 0, 0, 0, 914, 0, 0, 0, 915, 0, 0, 0, - 0, 0, 0, 0, 916, 0, 917, 0, 918, 919, 920, 0, 0, 0, 921, 0, 922, 0, 0, 0, 923, 0, 924, 0, 0, 0, 925, 0, 0, 0, 926, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, 928, 0, 0, 0, 0, 0, 0, 0, 0, 929, 0, 0, 930, 0, 931, 0, 0, 0, 932, 0, - 0, 0, 933, 0, 0, 934, 935, 0, 0, 936, 0, 937, 0, 0, 0, 938, 0, 0, 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, 940, 0, 0, 0, - 941, 0, 0, 0, 0, 0, 0, 0, 942, 0, 943, 0, 944, 0, 0, 945, 0, 0, 0, 946, 0, 0, 947, 0, 0, 948, 0, 0, 949, 0, 0, 0, - 950, 0, 0, 0, 951, 0, 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, 0, 954, 0, 0, 955, 0, 956, 0, - 0, 957, 0, 0, 0, 958, 0, 959, 0, 0, 0, 960, 0, 961, 0, 962, 0, 963, 0, 0, 0, 964, 0, 0, 0, 965, 0, 0, 0, 0, 0, 0, - 0, 0, 966, 0, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 968, 0, 969, 0, 970, 0, 971, 0, 0, 0, 972, 0, 973, 0, 0, 0, 974, 0, - 975, 0, 0, 0, 976, 0, 0, 0, 977, 0, 0, 0, 0, 0, 0, 0, 0, 978, 0, 0, 0, 979, 0, 0, 0, 0, 0, 0, 0, 980, 0, 981, - 0, 982, 0, 0, 983, 0, 0, 0, 984, 0, 985, 0, 0, 0, 0, 986, 0, 987, 0, 988, 0, 0, 0, 989, 0, 0, 0, 990, 0, 0, 0, 0, - 0, 0, 0, 0, 991, 0, 0, 0, 992, 0, 0, 0, 0, 0, 0, 0, 993, 0, 994, 0, 995, 0, 996, 0, 0, 0, 997, 0, 998, 0, 0, 0, - 999, 0, 1000, 0, 0, 0, 1001, 0, 0, 0, 1002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1003, 0, 0, 0, 1004, 0, 0, 0, 0, 0, 0, 0, - 0, 1005, 0, 1006, 0, 1007, 0, 0, 1008, 0, 0, 0, 1009, 0, 0, 1010, 0, 1011, 0, 0, 0, 1012, 0, 0, 0, 1013, 0, 0, 0, 0, 0, 0, - 0, 1014, 0, 0, 0, 1015, 0, 0, 0, 0, 0, 1016, 0, 1017, 0, 1018, 0, 0, 1019, 0, 0, 0, 1020, 0, 0, 1021, 0, 0, 1022, 0, 0, 0, - 0, 0, 1023, 0, 1024, 0, 0, 0, 1025, 0, 0, 0, 1026, 0, 0, 0, 0, 0, 0, 0, 0, 1027, 0, 0, 0, 1028, 0, 0, 0, 0, 0, 0, - 0, 1029, 0, 1030, 0, 1031, 0, 1032, 0, 0, 0, 1033, 0, 1034, 0, 0, 0, 1035, 0, 1036, 0, 0, 0, 1037, 0, 0, 0, 1038, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0213[64] = { + 0xA890480B5A504555ull, 0x062A0A28A0854110ull, 0x912D4A940822290Aull, 0x842082994CA04048ull, + 0x0842108421084210ull, 0x1084210842108421ull, 0x2108421084210842ull, 0x4210842108421084ull, + 0x8421084210842108ull, 0xA8D1112992A84210ull, 0x3148503155434128ull, 0xA0941898A8955509ull, + 0x00014525A2566294ull, 0x4864C4CA30480000ull, 0x61248960A1611412ull, 0x5290512C62424522ull, + 0x29296AA20A1562AAull, 0x0109000952211002ull, 0x0D50009320052010ull, 0x8A8240202924A2D0ull, + 0x414040A492095000ull, 0x04048020DA01A020ull, 0x4415290542A21011ull, 0xA888249020CB2CB1ull, + 0x081210A803502442ull, 0x50206B0905404A81ull, 0x2108008A90209284ull, 0x0852521424218840ull, + 0x4D0D428612429421ull, 0x40800D48C924C092ull, 0x8954A84A8A0A9482ull, 0x0208CAD412154688ull, + 0x0000248500094850ull, 0x224A8051450A4000ull, 0x4042104802481283ull, 0x904A090142500186ull, + 0x81080D2440424142ull, 0x0C40800508284084ull, 0x1220C4A828828041ull, 0x0151885120849454ull, + 0x8801800408880020ull, 0x0489496010020044ull, 0x1000008001204C81ull, 0x222A088111124904ull, + 0x8454824920A20625ull, 0x4449100328801140ull, 0x2A40A0A028820009ull, 0x5014031004028400ull, + 0x112055A685400A52ull, 0x140510420A090092ull, 0x9224A0080022A414ull, 0x021520A0A0284092ull, + 0xA0D410A905050141ull, 0x48A800100A522AA0ull, 0x0020020002000600ull, 0x72A0202B21234004ull, + 0x44514750110088A9ull, 0x10088A6445201100ull, 0x5202201112489501ull, 0x451540440222A8A2ull, + 0x088A8512A0220111ull, 0x0110044514550110ull, 0x1244A8220222912Aull, 0x088A28AA02201114ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0213[64] = { + 1u, 24u, 41u, 62u, 79u, 91u, 104u, 117u, 130u, 143u, 164u, 185u, 208u, 228u, 244u, 264u, + 285u, 310u, 322u, 336u, 354u, 368u, 381u, 399u, 421u, 436u, 454u, 468u, 484u, 505u, 523u, 545u, + 565u, 576u, 591u, 605u, 621u, 636u, 648u, 664u, 682u, 691u, 704u, 713u, 729u, 748u, 762u, 776u, + 787u, 807u, 821u, 836u, 851u, 869u, 885u, 890u, 908u, 927u, 941u, 957u, 975u, 991u, 1005u, 1023u, }; void recomp_unit_0213_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -152,13 +47,25 @@ void recomp_unit_0213_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B58004u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0213[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0213[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0213[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B58004; @@ -1215,7 +1122,6 @@ L_08B58004: } L_08B5800C: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B58024; } @@ -1231,7 +1137,6 @@ L_08B58014: } L_08B5801C: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B5802C; } @@ -1282,7 +1187,6 @@ L_08B5805C: } L_08B58068: { const bool branch_taken = ctx.gpr[11] == 0u; - // nop if (branch_taken) { goto L_08B58074; } @@ -1314,7 +1218,17 @@ L_08B58088: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58090: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (aot_gpr_6 | 0u); @@ -1333,7 +1247,17 @@ L_08B580B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B580BC: aot_gpr_2 = (aot_gpr_4 | 0u); aot_gpr_7 = (aot_gpr_6 | 0u); @@ -1371,14 +1295,33 @@ L_08B580F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B580F8: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58100: aot_gpr_7 = (aot_gpr_4 | 0u); ctx.gpr[8] = (aot_gpr_6 | 0u); @@ -1394,7 +1337,6 @@ L_08B58114: ctx.gpr[9] = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); ctx.gpr[8] = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B58144; } @@ -1418,14 +1360,34 @@ L_08B5813C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58144: jump_target = ctx.gpr[31]; aot_gpr_2 = (ctx.gpr[9] - ctx.gpr[8]); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5814C: ctx.gpr[9] = (aot_gpr_6 | 0u); aot_gpr_7 = (aot_gpr_6 + static_cast(-1)); @@ -1455,7 +1417,17 @@ L_08B58178: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58180: aot_gpr_6 = (2234u << 16u); aot_gpr_6 = (aot_gpr_6 + static_cast(14520)); @@ -1474,7 +1446,6 @@ L_08B58198: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); ctx.gpr[8] = (ctx.gpr[8] & 1u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B581B0; } @@ -1494,7 +1465,6 @@ L_08B581B0: ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(0)))))); ctx.gpr[9] = (ctx.gpr[9] & 1u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B581D0; } @@ -1536,7 +1506,6 @@ L_08B581EC: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); aot_gpr_7 = (ctx.gpr[8] & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B58210; } @@ -1568,14 +1537,33 @@ L_08B58224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58230: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58238: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_2 = (aot_gpr_4 | 0u); @@ -1623,11 +1611,20 @@ L_08B58270: } L_08B5828C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58294: aot_gpr_2 = (aot_gpr_4 | 0u); aot_gpr_5 = (aot_gpr_5 & 255u); @@ -1635,7 +1632,6 @@ L_08B58294: goto L_08B582A0; L_08B582A0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B582BC; } @@ -1643,7 +1639,6 @@ L_08B582A0: } L_08B582A8: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B582BC; } @@ -1666,11 +1661,20 @@ L_08B582BC: goto L_08B582C4; L_08B582C4: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B582CC: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); goto L_08B582D0; @@ -1704,12 +1708,21 @@ L_08B582F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58300: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); ctx.gpr[31] = (0x08B58310u); - // nop goto L_08B582CC; L_08B58310: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(16))); @@ -1718,7 +1731,17 @@ L_08B58310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5831C: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); aot_gpr_2 = (aot_gpr_4 | 0u); @@ -1748,11 +1771,20 @@ L_08B5833C: } L_08B58358: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58360: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] == 0u; @@ -1783,7 +1815,6 @@ L_08B5837C: L_08B58384: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B5837C; } @@ -1807,14 +1838,23 @@ L_08B583A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B583A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_5 = (aot_gpr_4 + static_cast(-1)); aot_gpr_6 = (aot_gpr_5 < static_cast(113) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B58950; } @@ -1826,11 +1866,20 @@ L_08B583C0: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_5); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-27176))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B583D8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28752)); @@ -1840,7 +1889,17 @@ L_08B583D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B583EC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28740)); @@ -1850,7 +1909,17 @@ L_08B583EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58400: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28712)); @@ -1860,7 +1929,17 @@ L_08B58400: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58414: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28696)); @@ -1870,7 +1949,17 @@ L_08B58414: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58428: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28672)); @@ -1880,7 +1969,17 @@ L_08B58428: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5843C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28660)); @@ -1890,7 +1989,17 @@ L_08B5843C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58450: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28632)); @@ -1900,7 +2009,17 @@ L_08B58450: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58464: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28612)); @@ -1910,7 +2029,17 @@ L_08B58464: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58478: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28592)); @@ -1920,7 +2049,17 @@ L_08B58478: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5848C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28576)); @@ -1930,7 +2069,17 @@ L_08B5848C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B584A0: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28564)); @@ -1940,7 +2089,17 @@ L_08B584A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B584B4: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28544)); @@ -1950,7 +2109,17 @@ L_08B584B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B584C8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28524)); @@ -1960,7 +2129,17 @@ L_08B584C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B584DC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28504)); @@ -1970,7 +2149,17 @@ L_08B584DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B584F0: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28492)); @@ -1980,7 +2169,17 @@ L_08B584F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58504: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28468)); @@ -1990,7 +2189,17 @@ L_08B58504: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58518: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28444)); @@ -2000,7 +2209,17 @@ L_08B58518: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5852C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28432)); @@ -2010,7 +2229,17 @@ L_08B5852C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58540: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28412)); @@ -2020,7 +2249,17 @@ L_08B58540: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58554: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28396)); @@ -2030,7 +2269,17 @@ L_08B58554: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58568: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28380)); @@ -2040,7 +2289,17 @@ L_08B58568: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5857C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28364)); @@ -2050,7 +2309,17 @@ L_08B5857C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58590: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28344)); @@ -2060,7 +2329,17 @@ L_08B58590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B585A4: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28312)); @@ -2070,7 +2349,17 @@ L_08B585A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B585B8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28292)); @@ -2080,7 +2369,17 @@ L_08B585B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B585CC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28268)); @@ -2090,7 +2389,17 @@ L_08B585CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B585E0: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28252)); @@ -2100,7 +2409,17 @@ L_08B585E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B585F4: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28236)); @@ -2110,7 +2429,17 @@ L_08B585F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58608: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28212)); @@ -2120,7 +2449,17 @@ L_08B58608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5861C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28196)); @@ -2130,7 +2469,17 @@ L_08B5861C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58630: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28172)); @@ -2140,7 +2489,17 @@ L_08B58630: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58644: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28156)); @@ -2150,7 +2509,17 @@ L_08B58644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58658: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28144)); @@ -2160,7 +2529,17 @@ L_08B58658: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5866C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28128)); @@ -2170,7 +2549,17 @@ L_08B5866C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58680: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28108)); @@ -2180,7 +2569,17 @@ L_08B58680: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58694: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28080)); @@ -2190,7 +2589,17 @@ L_08B58694: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B586A8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28060)); @@ -2200,7 +2609,17 @@ L_08B586A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B586BC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28048)); @@ -2210,7 +2629,17 @@ L_08B586BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B586D0: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28040)); @@ -2220,7 +2649,17 @@ L_08B586D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B586E4: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28024)); @@ -2230,7 +2669,17 @@ L_08B586E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B586F8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-28000)); @@ -2240,7 +2689,17 @@ L_08B586F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5870C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27980)); @@ -2250,7 +2709,17 @@ L_08B5870C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58720: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27948)); @@ -2260,7 +2729,17 @@ L_08B58720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58734: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27936)); @@ -2270,7 +2749,17 @@ L_08B58734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58748: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27916)); @@ -2280,7 +2769,17 @@ L_08B58748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5875C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27892)); @@ -2290,7 +2789,17 @@ L_08B5875C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58770: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27876)); @@ -2300,7 +2809,17 @@ L_08B58770: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58784: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27860)); @@ -2310,7 +2829,17 @@ L_08B58784: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58798: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27840)); @@ -2320,7 +2849,17 @@ L_08B58798: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B587AC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27824)); @@ -2330,7 +2869,17 @@ L_08B587AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B587C0: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27804)); @@ -2340,7 +2889,17 @@ L_08B587C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B587D4: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27792)); @@ -2350,7 +2909,17 @@ L_08B587D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B587E8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27752)); @@ -2360,7 +2929,17 @@ L_08B587E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B587FC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27712)); @@ -2370,7 +2949,17 @@ L_08B587FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58810: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27680)); @@ -2380,7 +2969,17 @@ L_08B58810: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58824: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27616)); @@ -2390,7 +2989,17 @@ L_08B58824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58838: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27576)); @@ -2400,7 +3009,17 @@ L_08B58838: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5884C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27548)); @@ -2410,7 +3029,17 @@ L_08B5884C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58860: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27532)); @@ -2420,7 +3049,17 @@ L_08B58860: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58874: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27512)); @@ -2430,7 +3069,17 @@ L_08B58874: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58888: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27484)); @@ -2440,7 +3089,17 @@ L_08B58888: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5889C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27460)); @@ -2450,7 +3109,17 @@ L_08B5889C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B588B0: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27432)); @@ -2460,7 +3129,17 @@ L_08B588B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B588C4: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27384)); @@ -2470,7 +3149,17 @@ L_08B588C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B588D8: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27352)); @@ -2480,7 +3169,17 @@ L_08B588D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B588EC: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27320)); @@ -2490,7 +3189,17 @@ L_08B588EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58900: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27296)); @@ -2500,7 +3209,17 @@ L_08B58900: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58914: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27260)); @@ -2510,7 +3229,17 @@ L_08B58914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58928: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27240)); @@ -2520,7 +3249,17 @@ L_08B58928: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5893C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-27216)); @@ -2530,14 +3269,22 @@ L_08B5893C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58950: ctx.gpr[31] = (0x08B58958u); - // nop goto L_08B59F44; L_08B58958: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B58968; } @@ -2554,7 +3301,17 @@ L_08B58968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58974: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 == 0u; @@ -2580,7 +3337,17 @@ L_08B58990: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58998: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -2610,7 +3377,6 @@ L_08B589C4: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0)))))); aot_gpr_7 = (aot_gpr_7 & 1u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B589DC; } @@ -2639,11 +3405,20 @@ L_08B589E0: } L_08B589F0: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B589F8: { const bool branch_taken = aot_gpr_6 == 0u; aot_gpr_7 = (2234u << 16u); @@ -2668,7 +3443,17 @@ L_08B58A10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58A18: ctx.gpr[8] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[8] == 0u; @@ -2764,7 +3549,6 @@ L_08B58A98: aot_gpr_4 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); aot_gpr_6 = (ctx.gpr[8] & 1u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B58ABC; } @@ -2796,14 +3580,33 @@ L_08B58AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58ADC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58AE4: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); aot_gpr_2 = (aot_gpr_4 | 0u); @@ -2862,14 +3665,22 @@ L_08B58B2C: } L_08B58B34: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58B3C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B58B4C; } @@ -2889,7 +3700,17 @@ L_08B58B4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58B54: aot_gpr_7 = (aot_gpr_6 | 0u); { const bool branch_taken = aot_gpr_7 == 0u; @@ -2939,7 +3760,17 @@ L_08B58B94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58BA0: aot_gpr_7 = (aot_gpr_5 | 0u); ctx.gpr[8] = (aot_gpr_4 | 0u); @@ -2998,7 +3829,17 @@ L_08B58BF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58C00: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_7 != 0u; @@ -3014,7 +3855,17 @@ L_08B58C0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58C14: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); if (aot_gpr_6 == 0u) { @@ -3032,7 +3883,6 @@ L_08B58C28: ctx.gpr[8] = (ctx.gpr[8] + static_cast(1)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[8] + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B58C20; } @@ -3063,7 +3913,17 @@ L_08B58C54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58C5C: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_6 != 0u; @@ -3083,11 +3943,20 @@ L_08B58C68: goto L_08B58C78; L_08B58C78: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58C80: aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); goto L_08B58C84; @@ -3123,7 +3992,17 @@ L_08B58CA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58CAC: aot_gpr_4 = (aot_gpr_4 + static_cast(1)); aot_gpr_6 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); @@ -3140,7 +4019,17 @@ L_08B58CBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58CC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_7 = (aot_gpr_4 | 0u); @@ -3186,11 +4075,20 @@ L_08B58D5C: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26720))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B58D74: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(100), aot_gpr_2); goto L_08B58D78; @@ -3547,7 +4445,6 @@ L_08B58F90: L_08B58F98: aot_gpr_7 = (0u | 69u); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B590BC; } @@ -3710,7 +4607,6 @@ L_08B59088: aot_gpr_4 = (ctx.gpr[9] - aot_gpr_2); aot_gpr_4 = (static_cast(aot_gpr_4) < 9 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B590A0; } @@ -3722,7 +4618,6 @@ L_08B59098: goto L_08B590A0; L_08B590A0: { const bool branch_taken = ctx.gpr[3] == 0u; - // nop if (branch_taken) { goto L_08B590BC; } @@ -4503,7 +5398,6 @@ L_08B596A4: goto L_08B596B0; L_08B596B0: { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B596C4; } @@ -4634,7 +5528,6 @@ L_08B59778: L_08B59794: aot_gpr_4 = (aot_gpr_2 | 0u); { const bool branch_taken = static_cast(aot_gpr_4) >= 0; - // nop if (branch_taken) { goto L_08B59800; } @@ -5451,12 +6344,10 @@ L_08B59D90: goto L_08B59D9C; L_08B59D9C: ctx.gpr[31] = (0x08B59DA4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0215_entry, 215u, 510u, 0x08B62778u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B59DA4u) goto L_08B59DA4; AOT_REGCACHE_SYNC_OUT(); return; L_08B59DA4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B59DB0; } @@ -5484,7 +6375,17 @@ L_08B59DB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59DE0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -5501,7 +6402,17 @@ L_08B59DFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59E08: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (2234u << 16u); @@ -5517,10 +6428,19 @@ L_08B59E20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59E2C: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B59E40; } @@ -5529,7 +6449,6 @@ L_08B59E2C: L_08B59E34: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B59E48; } @@ -5549,7 +6468,17 @@ L_08B59E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59E50: ctx.gpr[11] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0)))))); @@ -5601,7 +6530,17 @@ L_08B59E90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59E9C: aot_gpr_7 = (ctx.gpr[8] | 0u); ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); @@ -5630,14 +6569,34 @@ L_08B59EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59ECC: jump_target = ctx.gpr[31]; aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), aot_gpr_4); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59ED4: if (ctx.gpr[9] != 0u) { ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0)))))); @@ -5681,7 +6640,6 @@ L_08B59F10: aot_gpr_7 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0)))))); aot_gpr_7 = (aot_gpr_7 & 2u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B59F28; } @@ -5710,18 +6668,37 @@ L_08B59F2C: } L_08B59F3C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59F44: jump_target = ctx.gpr[31]; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59F4C: { const bool branch_taken = static_cast(aot_gpr_5) <= 0; ctx.gpr[10] = (aot_gpr_5 + static_cast(-1)); @@ -5781,14 +6758,34 @@ L_08B59FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59FA8: jump_target = ctx.gpr[31]; aot_gpr_2 = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B59FB0: aot_gpr_5 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0)))))); { const bool branch_taken = aot_gpr_5 == 0u; @@ -5815,7 +6812,6 @@ L_08B59FD0: aot_gpr_7 = (aot_gpr_5 | 0u); ctx.gpr[8] = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B5A014; } @@ -5844,7 +6840,17 @@ L_08B5A014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5A01C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (static_cast(aot_gpr_4) < 0 ? 1u : 0u); @@ -5883,8 +6889,6 @@ L_08B5A050: ctx.gpr[11] = (aot_gpr_5 + ctx.gpr[8]); ctx.gpr[10] = (ctx.gpr[8] + static_cast(1)); aot_gpr_2 = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = ctx.gpr[9]; const std::uint32_t divisor = aot_gpr_6; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[9] = (aot_gpr_2 + aot_gpr_4); ctx.gpr[9] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(0)))))); @@ -5924,7 +6928,17 @@ L_08B5A0AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5A0B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-128)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_5); @@ -5988,7 +7002,6 @@ L_08B5A150: goto L_08B5831C; L_08B5A164: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5A7E4; } @@ -6002,7 +7015,6 @@ L_08B5A16C: goto L_08B5831C; L_08B5A17C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5A7E4; } @@ -6016,7 +7028,6 @@ L_08B5A184: goto L_08B5831C; L_08B5A194: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5A7E4; } @@ -6092,7 +7103,6 @@ L_08B5A208: AOT_REGCACHE_SYNC_OUT(); return; L_08B5A220: { const bool branch_taken = static_cast(aot_gpr_2) < 0; - // nop if (branch_taken) { goto L_08B5A354; } @@ -6200,7 +7210,6 @@ L_08B5A30C: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B5A354; } @@ -6690,7 +7699,6 @@ L_08B5A6F4: goto L_08B5A70C; L_08B5A70C: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B5A72C; } @@ -6698,7 +7706,6 @@ L_08B5A70C: } L_08B5A714: { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5A72C; } @@ -6812,7 +7819,6 @@ L_08B5A7C4: goto L_08B5A01C; L_08B5A7D4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5A7E4; } @@ -6842,7 +7848,17 @@ L_08B5A7E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5A818: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -6910,7 +7926,17 @@ L_08B5A88C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5A8C0: aot_gpr_4 = (ctx.gpr[17] + ctx.gpr[19]); goto L_08B5A8C4; @@ -6975,7 +8001,17 @@ L_08B5A91C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5A948: aot_gpr_2 = (0u | 0u); { std::uint32_t aot_run_words[8]{}; @@ -6994,7 +8030,17 @@ L_08B5A948: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5A974: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_gpr_5 | 0u); @@ -7069,11 +8115,20 @@ L_08B5A9EC: ctx.gpr[1] = (ctx.gpr[1] + ctx.gpr[8]); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26440))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5AA04: ctx.gpr[8] = (aot_gpr_5 | 0u); ctx.gpr[9] = (aot_gpr_4 | 0u); @@ -7090,14 +8145,23 @@ L_08B5AA20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5AA2C: ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); goto L_08B5AA30; L_08B5AA30: ctx.gpr[8] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B5A99C; } @@ -7120,7 +8184,17 @@ L_08B5AA58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5AA64: aot_gpr_29 = (aot_gpr_29 + static_cast(-528)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(492), ctx.gpr[17]); @@ -7204,7 +8278,6 @@ L_08B5AB3C: L_08B5AB48: aot_gpr_7 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B5AC04; } @@ -7343,7 +8416,6 @@ L_08B5AC48: goto L_08B5AC58; L_08B5AC58: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B5B790; } @@ -7355,11 +8427,20 @@ L_08B5AC60: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_7); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-26296))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5AC78: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 != 0u; @@ -8467,7 +9548,6 @@ L_08B5B4B4: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16628))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16624))); { const bool branch_taken = aot_gpr_2 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B5B4D4; } @@ -8475,7 +9555,6 @@ L_08B5B4B4: } L_08B5B4CC: { const bool branch_taken = ctx.gpr[3] == aot_gpr_7; - // nop if (branch_taken) { goto L_08B5B4DC; } @@ -8518,7 +9597,6 @@ L_08B5B500: } L_08B5B518: { const bool branch_taken = ctx.gpr[19] != aot_gpr_7; - // nop if (branch_taken) { goto L_08B5B528; } @@ -8899,7 +9977,6 @@ L_08B5B804: } L_08B5B810: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5B8D4; } @@ -8998,7 +10075,6 @@ L_08B5B8C4: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5B818; } @@ -9331,7 +10407,6 @@ L_08B5BB30: } L_08B5BB38: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5BBFC; } @@ -9426,7 +10501,6 @@ L_08B5BBEC: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5BB40; } @@ -9535,7 +10609,6 @@ L_08B5BCAC: } L_08B5BCC0: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5BD84; } @@ -9630,7 +10703,6 @@ L_08B5BD74: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5BCC8; } @@ -9931,7 +11003,6 @@ L_08B5BFB8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5BF0C; } diff --git a/profiles/vcs/generated/generated_unit_0214.cpp b/profiles/vcs/generated/generated_unit_0214.cpp index 0191793..4e19499 100644 --- a/profiles/vcs/generated/generated_unit_0214.cpp +++ b/profiles/vcs/generated/generated_unit_0214.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0214[4092] = { - 1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 6, 0, 0, 7, 0, 0, 0, 8, 9, 0, 0, 10, 0, 0, 0, - 11, 12, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 0, 22, 0, 23, 0, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 29, 0, 30, 0, 0, 0, 31, 0, 32, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 0, 36, 0, 0, 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 41, 0, 0, 0, 0, - 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, - 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 0, 51, 0, 0, 52, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 0, 56, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 61, 0, 0, - 62, 0, 0, 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, - 0, 0, 0, 70, 0, 71, 0, 72, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 75, 0, 76, 0, 0, 77, 0, 0, 0, 78, 79, 0, 0, 0, - 0, 0, 0, 80, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 83, 0, 0, 84, 0, 0, 85, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, - 0, 88, 0, 0, 89, 0, 90, 0, 91, 0, 0, 0, 92, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 94, 0, 95, 0, 0, 0, 96, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 98, 0, 99, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 103, 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, 106, 0, 107, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 110, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 113, 0, 114, 0, 0, 0, 0, 0, - 115, 0, 116, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, - 0, 0, 122, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, 126, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 0, - 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 131, 0, 0, 0, 132, 0, 133, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, - 0, 0, 136, 0, 137, 0, 0, 0, 0, 0, 138, 0, 0, 139, 0, 140, 0, 141, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 145, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 0, 148, 0, 0, 149, 0, - 0, 150, 0, 151, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, 155, 0, 156, 0, 0, 0, 0, - 0, 0, 0, 157, 0, 158, 0, 0, 0, 0, 0, 159, 0, 160, 0, 0, 0, 0, 0, 161, 0, 0, 162, 0, 163, 0, 164, 0, 0, 0, 0, 165, - 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 167, 0, 168, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 171, 0, - 172, 0, 0, 0, 0, 0, 173, 0, 0, 174, 0, 175, 0, 176, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 178, 0, 179, 0, 180, 181, 0, 0, - 0, 0, 0, 182, 0, 183, 0, 0, 0, 0, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 190, 0, - 191, 0, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 196, - 0, 197, 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 207, 208, 0, 0, 0, 209, - 0, 0, 210, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 212, 213, 0, 0, 0, 0, 0, 214, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 216, 0, 0, 217, 0, 0, 218, 0, 219, 0, 0, 220, 221, 222, 0, 223, 0, 0, 224, 0, 225, 0, 226, 0, 0, 0, 227, 0, 0, - 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 231, 0, 232, 0, 233, 234, 235, 0, 0, 0, - 236, 0, 237, 0, 0, 0, 238, 0, 239, 0, 0, 0, 240, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 243, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 0, 0, 245, 0, 246, 0, 0, 0, 247, 0, 0, 0, 248, 0, 0, 249, 250, 0, 0, 251, 0, 252, 0, 0, 0, - 253, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 257, 0, 258, 0, 259, 0, 0, 260, - 0, 0, 0, 261, 0, 0, 262, 0, 0, 263, 0, 0, 264, 0, 0, 0, 265, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, - 268, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 270, 0, 271, 0, 0, 272, 0, 0, 0, 273, 0, 274, 0, 0, 0, 275, 0, 276, 0, 277, 0, - 278, 0, 0, 0, 279, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 284, - 0, 285, 0, 286, 0, 0, 0, 287, 0, 288, 0, 0, 0, 289, 0, 290, 0, 0, 0, 291, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, - 293, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 295, 0, 296, 0, 297, 0, 0, 298, 0, 0, 0, 299, 0, 300, 0, 0, 0, 0, 301, 0, 302, - 0, 303, 0, 0, 0, 304, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, - 309, 0, 310, 0, 311, 0, 0, 0, 312, 0, 313, 0, 0, 0, 314, 0, 315, 0, 0, 0, 316, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 318, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 321, 0, 322, 0, 0, 323, 0, 0, 0, 324, 0, 0, 325, 0, 326, 0, - 0, 0, 327, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 330, 0, 0, 0, 0, 0, 331, 0, 332, 0, 333, 0, 0, 334, - 0, 0, 0, 335, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 340, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, - 0, 0, 342, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 344, 0, 345, 0, 346, 0, 347, 0, 0, 0, 348, 0, 349, 0, 0, 0, 350, 0, - 351, 0, 0, 0, 352, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 355, 0, 0, 0, 0, 0, 356, 0, 357, 0, 358, 0, 0, - 359, 0, 0, 0, 360, 361, 0, 0, 362, 0, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 367, 0, 0, 0, 368, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 371, 0, 0, 0, 0, 0, - 0, 372, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 0, 374, 375, 0, 376, 0, 0, 377, 0, 0, 0, 378, 0, 0, 0, 0, 0, 379, 0, 380, - 0, 0, 381, 0, 0, 0, 0, 382, 0, 0, 383, 0, 0, 384, 0, 0, 0, 0, 0, 385, 386, 0, 387, 388, 0, 0, 0, 389, 0, 0, 390, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 392, 0, 393, 0, 394, 0, 0, 395, 0, 396, 0, 397, 0, 398, - 0, 0, 399, 0, 400, 0, 0, 401, 0, 0, 402, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, - 0, 0, 407, 0, 408, 0, 0, 0, 409, 0, 410, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 414, 0, 0, 0, 415, 0, 416, 0, 0, 417, 0, 0, 418, 0, 0, 0, 0, 0, 419, 0, 420, - 421, 0, 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 424, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 428, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, 0, 431, 0, - 0, 0, 0, 0, 0, 432, 0, 0, 433, 0, 0, 0, 0, 434, 0, 435, 0, 0, 436, 0, 437, 0, 0, 438, 439, 0, 440, 0, 0, 0, 441, 0, - 442, 0, 0, 0, 443, 0, 0, 444, 0, 0, 0, 445, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 447, 0, 448, 0, 0, 449, 0, 450, 0, - 0, 0, 451, 0, 452, 0, 453, 0, 454, 0, 455, 0, 456, 0, 457, 0, 458, 0, 0, 0, 459, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, - 462, 0, 0, 463, 0, 464, 465, 0, 466, 0, 467, 468, 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 471, 0, 0, 472, 0, 0, 0, 0, - 473, 0, 0, 474, 0, 0, 0, 475, 0, 0, 0, 476, 0, 477, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 0, 481, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 485, 0, - 486, 0, 487, 0, 0, 488, 0, 0, 0, 0, 489, 0, 0, 490, 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 493, 0, - 494, 0, 495, 0, 0, 496, 0, 0, 497, 0, 0, 498, 0, 0, 0, 499, 0, 0, 0, 0, 500, 0, 501, 0, 0, 0, 0, 0, 0, 0, 0, 502, - 0, 0, 0, 0, 503, 0, 0, 0, 0, 504, 0, 0, 0, 0, 0, 505, 0, 506, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 510, - 0, 511, 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 519, 0, 520, 0, 0, 0, 0, 521, - 0, 0, 0, 0, 522, 0, 0, 523, 0, 524, 0, 525, 0, 526, 527, 0, 0, 528, 0, 529, 530, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 532, - 0, 0, 533, 0, 0, 534, 0, 535, 536, 0, 537, 0, 0, 538, 0, 539, 540, 541, 542, 0, 543, 0, 544, 0, 0, 545, 0, 0, 546, 0, 547, 548, - 0, 549, 0, 0, 550, 0, 551, 552, 553, 554, 0, 555, 0, 0, 0, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 558, 0, 0, 559, 0, - 560, 0, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 0, 563, 0, 0, 0, 0, 0, 564, 0, 0, 565, 0, - 0, 0, 566, 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, 568, 0, 569, 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 571, 0, 0, 572, 0, 0, 573, 0, 574, 0, 0, 575, 0, 576, 0, 577, 0, 578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, 580, 0, 0, - 0, 0, 0, 581, 582, 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 585, 0, 0, 0, 0, 0, 0, 0, 586, 0, - 587, 0, 0, 0, 0, 0, 588, 0, 0, 589, 0, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 592, 0, 0, 0, 0, 0, 593, 0, 0, 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 596, - 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 600, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 602, 0, 0, 0, 0, 0, 603, 0, 604, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 0, 0, 0, 0, 607, - 0, 608, 0, 609, 0, 610, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 617, - 0, 0, 0, 0, 0, 618, 0, 0, 0, 0, 619, 0, 0, 620, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, - 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 626, 0, 0, 0, 0, 627, 0, 0, 0, 0, 628, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 632, 0, 0, 0, - 0, 0, 0, 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, 0, 0, - 636, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 0, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 641, 0, - 0, 0, 0, 642, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 646, 0, 0, 0, 0, 0, 647, - 0, 0, 0, 0, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, - 652, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, 0, 0, 655, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, - 0, 658, 0, 0, 0, 0, 659, 0, 0, 0, 0, 660, 0, 0, 0, 0, 661, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 663, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 665, 0, 0, 666, 0, 0, 0, 0, 667, 0, 668, 0, 0, 0, 0, 0, 0, 0, 669, 0, - 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 677, - 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 679, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, 0, 0, 0, 682, 0, - 0, 0, 0, 0, 0, 0, 0, 683, 0, 0, 0, 684, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 690, - 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, - 0, 0, 0, 695, 0, 0, 696, 0, 0, 697, 698, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 701, 0, 0, 702, - 703, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 706, 0, 0, 707, 708, 0, 0, 0, 0, 709, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 710, 0, 0, 711, 0, 0, 712, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, - 0, 0, 717, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 721, 0, 0, 722, 723, 0, 0, 0, 0, 724, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 726, 0, 0, 0, 0, 727, 0, 0, 0, 0, 728, 0, 0, 0, 0, 729, 730, - 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 734, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, - 736, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 739, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 745, 0, 0, - 746, 0, 0, 0, 747, 0, 0, 0, 748, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 750, 0, 0, 0, 751, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 753, 0, 754, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 756, 0, 0, 757, - 0, 758, 0, 759, 760, 0, 0, 0, 0, 0, 761, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 764, 0, 765, 0, 0, 0, - 766, 0, 767, 0, 0, 768, 0, 769, 0, 0, 770, 0, 771, 0, 0, 772, 0, 0, 773, 0, 774, 0, 775, 0, 0, 0, 776, 0, 0, 777, 0, 778, - 0, 0, 0, 779, 0, 780, 0, 0, 781, 0, 782, 0, 783, 0, 0, 784, 0, 0, 785, 0, 786, 0, 0, 787, 0, 788, 0, 0, 789, 0, 790, 0, - 0, 791, 0, 792, 0, 793, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, - 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 801, 0, 0, 0, 802, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 804, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 806, 0, 807, 0, 0, 808, 0, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 810, 811, 812, 0, 0, 0, 813, 814, 0, 815, 0, 0, 816, 0, 817, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 0, 820, 821, 0, 0, 822, 0, 0, 0, 823, 0, 0, 824, 0, 0, 825, 0, 826, 0, 0, 827, - 0, 0, 828, 829, 0, 830, 0, 0, 0, 0, 831, 0, 0, 0, 832, 0, 0, 833, 0, 834, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 837, 0, 0, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 0, 839, 0, - 0, 0, 0, 840, 0, 0, 0, 0, 0, 841, 0, 0, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 843, 0, 844, 0, 845, 0, 0, 0, 0, 0, - 846, 0, 0, 0, 0, 0, 847, 0, 0, 848, 0, 0, 0, 0, 849, 0, 0, 0, 0, 0, 0, 0, 850, 0, 851, 0, 0, 0, 0, 852, 0, 0, - 0, 0, 0, 853, 0, 854, 0, 855, 0, 856, 0, 857, 0, 0, 0, 0, 0, 0, 0, 858, 0, 0, 859, 0, 0, 860, 0, 0, 0, 0, 0, 861, - 0, 862, 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, 0, 0, 868, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 869, 870, 0, 0, 871, 0, 0, 0, 872, 0, 0, 0, 873, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 874, 0, 0, 0, 0, 0, 875, 0, 0, 0, 876, 0, 0, 0, 0, 0, 0, 0, 877, 0, 0, 0, 878, 0, 0, 0, 879, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0214[64] = { + 0x004002131312A089ull, 0x1516AA5402007400ull, 0x110004010C451120ull, 0x0040089100300081ull, + 0x2410400000000902ull, 0x189488A822044449ull, 0x4502115209248288ull, 0x0004A224400CA200ull, + 0x2001520505014410ull, 0x140510420A090094ull, 0x4884A0080022A414ull, 0x854828280A10210Aull, + 0x35042A4141405040ull, 0xA0004029408AA828ull, 0x8008000800180122ull, 0x00A0C0848D001000ull, + 0x1D40440222A5CA48ull, 0x14C88A4024011145ull, 0x2011124895012011ull, 0xA022011154512901ull, + 0xA144A8090088A28Aull, 0x0111451540440222ull, 0x9504404452254024ull, 0x4515404402228248ull, + 0x002131312A088111ull, 0xA089620205000244ull, 0xAA55000048D82484ull, 0x0100251428021494ull, + 0xA0140201A0928A00ull, 0x4594A12042014100ull, 0x1411555452808891ull, 0x9204288909202D69ull, + 0x4108242541050000ull, 0x940A821080508925ull, 0x8540880000200E02ull, 0xD257A5A4A01A6A90ull, + 0x4820110148210BD2ull, 0x300552920080A014ull, 0x0001224140440058ull, 0x00204100A0020820ull, + 0x8080094100000022ull, 0x808800400420202Aull, 0x8421010140042420ull, 0x0400802011020800ull, + 0x8210420841010821ull, 0x0200A10908108100ull, 0x4050908200210842ull, 0x8208000200210840ull, + 0x0201088040820500ull, 0x0402101082100080ull, 0x10C9002192008648ull, 0x8648010C90086480ull, + 0x10240408C2109000ull, 0x2020450000082805ull, 0x9102811100002111ull, 0xA45494A51440441Aull, + 0x2810202A52949528ull, 0x0000510046004040ull, 0x008A58E000008940ull, 0x100A442C94913008ull, + 0x0540120840202200ull, 0x82480AA821404241ull, 0x0900000400101202ull, 0x0888088200889800ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0214[64] = { + 1u, 16u, 34u, 46u, 55u, 62u, 80u, 97u, 109u, 122u, 136u, 150u, 166u, 182u, 197u, 205u, + 216u, 236u, 253u, 268u, 285u, 303u, 318u, 335u, 351u, 367u, 381u, 399u, 413u, 427u, 442u, 462u, + 482u, 494u, 511u, 522u, 549u, 566u, 581u, 592u, 600u, 608u, 618u, 629u, 636u, 648u, 658u, 670u, + 678u, 687u, 695u, 710u, 725u, 736u, 746u, 758u, 779u, 798u, 806u, 819u, 836u, 846u, 862u, 869u, }; void recomp_unit_0214_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -152,13 +47,25 @@ void recomp_unit_0214_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B5C000u; - entry_id = (entry_delta < 16368u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0214[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16368u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0214[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0214[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B5C000; @@ -1128,7 +1035,6 @@ L_08B5C080: L_08B5C084: aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5C0A4; } @@ -1162,7 +1068,17 @@ L_08B5C0A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C0D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(36), ctx.gpr[30]); @@ -1191,7 +1107,6 @@ L_08B5C0D8: } L_08B5C128: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B5C164; } @@ -1199,14 +1114,12 @@ L_08B5C128: } L_08B5C130: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B5C164; } goto L_08B5C138; } L_08B5C134: - // nop goto L_08B5C138; L_08B5C138: aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(16), 0u); @@ -1241,7 +1154,17 @@ L_08B5C164: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C188: if (ctx.gpr[10] != 0u) { aot_mem.aot_direct_store32(ctx.gpr[30] + static_cast(16), ctx.gpr[9]); @@ -1342,7 +1265,17 @@ L_08B5C1F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C214: ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[30] + static_cast(20))); ctx.gpr[11] = (0u | 3u); @@ -1416,7 +1349,17 @@ L_08B5C280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C2A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -1484,7 +1427,17 @@ L_08B5C31C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C350: aot_gpr_4 = (ctx.gpr[17] + ctx.gpr[19]); goto L_08B5C354; @@ -1549,7 +1502,17 @@ L_08B5C3AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C3D8: ctx.gpr[2] = (0u | 0u); { std::uint32_t aot_run_words[8]{}; @@ -1568,7 +1531,17 @@ L_08B5C3D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C404: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (aot_gpr_6 | 0u); @@ -1585,7 +1558,17 @@ L_08B5C420: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C42C: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(164), ctx.gpr[17]); @@ -1665,7 +1648,6 @@ L_08B5C500: L_08B5C50C: aot_gpr_7 = (ctx.gpr[18] | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B5C5C8; } @@ -1804,7 +1786,6 @@ L_08B5C60C: goto L_08B5C61C; L_08B5C61C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B5CFD4; } @@ -1816,11 +1797,20 @@ L_08B5C624: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_7); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-25856))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5C63C: aot_gpr_4 = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(aot_gpr_29 + static_cast(32)))))); { const bool branch_taken = aot_gpr_4 != 0u; @@ -2708,7 +2698,6 @@ L_08B5CCC8: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16716))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16712))); { const bool branch_taken = ctx.gpr[2] != aot_gpr_6; - // nop if (branch_taken) { goto L_08B5CCE8; } @@ -2716,7 +2705,6 @@ L_08B5CCC8: } L_08B5CCE0: { const bool branch_taken = ctx.gpr[3] == aot_gpr_7; - // nop if (branch_taken) { goto L_08B5CCF0; } @@ -2759,7 +2747,6 @@ L_08B5CD14: } L_08B5CD2C: { const bool branch_taken = ctx.gpr[19] != aot_gpr_7; - // nop if (branch_taken) { goto L_08B5CD3C; } @@ -3152,7 +3139,6 @@ L_08B5D048: } L_08B5D054: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5D118; } @@ -3251,7 +3237,6 @@ L_08B5D108: ctx.gpr[18] = (ctx.gpr[18] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[18]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5D05C; } @@ -3581,7 +3566,6 @@ L_08B5D368: } L_08B5D370: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5D434; } @@ -3676,7 +3660,6 @@ L_08B5D424: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5D378; } @@ -3784,7 +3767,6 @@ L_08B5D4E0: } L_08B5D4F4: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5D5B8; } @@ -3879,7 +3861,6 @@ L_08B5D5A8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5D4FC; } @@ -4179,7 +4160,6 @@ L_08B5D7E8: ctx.gpr[16] = (ctx.gpr[16] + static_cast(-16)); aot_gpr_4 = (static_cast(ctx.gpr[16]) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5D73C; } @@ -4293,7 +4273,6 @@ L_08B5D8B0: L_08B5D8B4: aot_gpr_4 = (aot_gpr_4 & 512u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5D8D4; } @@ -4326,12 +4305,21 @@ L_08B5D8D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5D908: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B5DBA8; } @@ -4388,7 +4376,6 @@ L_08B5D984: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(8), ctx.gpr[8]); aot_gpr_5 = (aot_gpr_7 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B5D9B8; } @@ -4405,7 +4392,6 @@ L_08B5D9B4: goto L_08B5D9B8; L_08B5D9B8: aot_gpr_31 = (0x08B5D9C0u); - // nop goto L_08B5DFC8; L_08B5D9C0: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); @@ -4414,7 +4400,17 @@ L_08B5D9C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5D9CC: ctx.gpr[2] = (ctx.gpr[10] | 0u); aot_mem.aot_direct_store32(ctx.gpr[9] + static_cast(4), ctx.gpr[11]); @@ -4641,7 +4637,6 @@ L_08B5DB30: ctx.gpr[11] = (ctx.gpr[11] + aot_gpr_5); ctx.gpr[10] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(8))); { const bool branch_taken = ctx.gpr[10] != ctx.gpr[11]; - // nop if (branch_taken) { goto L_08B5DB6C; } @@ -4694,7 +4689,6 @@ L_08B5DB90: goto L_08B5DBA0; L_08B5DBA0: aot_gpr_31 = (0x08B5DBA8u); - // nop goto L_08B5DFC8; L_08B5DBA8: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(24))); @@ -4703,7 +4697,17 @@ L_08B5DBA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DBB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -4785,7 +4789,6 @@ L_08B5DC5C: } L_08B5DC74: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5DD38; } @@ -4821,7 +4824,17 @@ L_08B5DCA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DCC8: aot_gpr_31 = (0x08B5DCD0u); aot_gpr_4 = (ctx.gpr[16] | 0u); @@ -4842,7 +4855,17 @@ L_08B5DCD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DCF4: aot_gpr_31 = (0x08B5DCFCu); aot_gpr_4 = (ctx.gpr[16] | 0u); @@ -4863,7 +4886,17 @@ L_08B5DCFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DD20: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(18328))); aot_gpr_7 = (2234u << 16u); @@ -4892,7 +4925,17 @@ L_08B5DD40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DD64: ctx.gpr[10] = (2234u << 16u); ctx.gpr[10] = (ctx.gpr[10] + static_cast(14520)); @@ -4935,7 +4978,6 @@ L_08B5DDA0: } L_08B5DDB4: { const bool branch_taken = ctx.gpr[11] != ctx.gpr[2]; - // nop if (branch_taken) { goto L_08B5DDC8; } @@ -5028,8 +5070,6 @@ L_08B5DE3C: ctx.gpr[3] = (0u | 0u); ctx.gpr[2] = (0u | 0u); ctx.gpr[13] = (ctx.hi); - // nop - // nop { const std::uint32_t dividend = ctx.gpr[12]; const std::uint32_t divisor = aot_gpr_7; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } ctx.gpr[12] = (ctx.lo); goto L_08B5DE5C; @@ -5072,7 +5112,6 @@ L_08B5DE88: goto L_08B5DE90; L_08B5DE90: { const bool branch_taken = ctx.gpr[14] == 0u; - // nop if (branch_taken) { goto L_08B5DEE8; } @@ -5088,7 +5127,6 @@ L_08B5DE98: } L_08B5DEA0: { const bool branch_taken = ctx.gpr[2] != 0u; - // nop if (branch_taken) { goto L_08B5DEB8; } @@ -5104,7 +5142,6 @@ L_08B5DEA8: } L_08B5DEB0: { const bool branch_taken = ctx.gpr[2] == 0u; - // nop if (branch_taken) { goto L_08B5DEC0; } @@ -5138,7 +5175,6 @@ L_08B5DED0: } L_08B5DEE8: { const bool branch_taken = static_cast(ctx.gpr[2]) >= 0; - // nop if (branch_taken) { goto L_08B5DF0C; } @@ -5163,7 +5199,6 @@ L_08B5DF00: } L_08B5DF0C: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B5DF18; } @@ -5195,7 +5230,17 @@ L_08B5DF2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DF34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (aot_gpr_6 | 0u); @@ -5213,7 +5258,17 @@ L_08B5DF54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DF60: ctx.gpr[2] = (2234u << 16u); jump_target = aot_gpr_31; @@ -5221,7 +5276,17 @@ L_08B5DF60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DF6C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (2234u << 16u); @@ -5236,12 +5301,21 @@ L_08B5DF80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DF8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); aot_gpr_31 = (0x08B5DF9Cu); - // nop ctx.pc = 0x08B73604u; AOT_REGCACHE_SYNC_OUT(); return; L_08B5DF9C: @@ -5267,7 +5341,17 @@ L_08B5DFB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DFC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_4 = (2236u << 16u); @@ -5294,7 +5378,17 @@ L_08B5DFF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5DFFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -5489,7 +5583,17 @@ L_08B5E158: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E17C: aot_gpr_4 = (0u + static_cast(-1)); ctx.gpr[19] = (aot_gpr_4 >> (ctx.gpr[19] & 31u)); @@ -5520,7 +5624,6 @@ L_08B5E1A4: AOT_REGCACHE_SYNC_OUT(); return; L_08B5E1BC: { const bool branch_taken = static_cast(ctx.gpr[2]) > 0; - // nop if (branch_taken) { goto L_08B5E1E8; } @@ -5548,7 +5651,17 @@ L_08B5E1CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E1E8: { const bool branch_taken = static_cast(ctx.gpr[16]) >= 0; ctx.gpr[19] = (~(ctx.gpr[19] | 0u)); @@ -5609,7 +5722,17 @@ L_08B5E22C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E254: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -5700,7 +5823,17 @@ L_08B5E310: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E31C: { const bool branch_taken = aot_gpr_4 != 0u; aot_gpr_4 = (ctx.gpr[10] < ctx.gpr[11] ? 1u : 0u); @@ -5711,7 +5844,6 @@ L_08B5E31C: } L_08B5E324: { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5E6B4; } @@ -5731,7 +5863,6 @@ L_08B5E334: L_08B5E338: aot_gpr_5 = (static_cast(ctx.gpr[13]) < static_cast(aot_gpr_4) ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B5E374; } @@ -5761,7 +5892,17 @@ L_08B5E350: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E374: { const bool branch_taken = ctx.gpr[13] != 0u; aot_gpr_5 = (ctx.gpr[13] << 11u); @@ -6090,7 +6231,17 @@ L_08B5E55C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E584: ctx.gpr[15] = (aot_gpr_6 | 0u); { const bool branch_taken = ctx.gpr[15] != 0u; @@ -6134,7 +6285,6 @@ L_08B5E5B8: goto L_08B5E5C0; L_08B5E5C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5E610; } @@ -6154,7 +6304,17 @@ L_08B5E5C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E5F0: ctx.gpr[13] = (ctx.gpr[13] + ctx.gpr[13]); goto L_08B5E5F4; @@ -6195,7 +6355,17 @@ L_08B5E618: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E648: aot_gpr_5 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (static_cast(aot_gpr_5) < 21 ? 1u : 0u); @@ -6258,7 +6428,17 @@ L_08B5E6B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E6C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -6321,7 +6501,17 @@ L_08B5E744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E774: { const bool branch_taken = static_cast(ctx.gpr[8]) < 0; aot_gpr_4 = (2234u << 16u); @@ -6383,7 +6573,17 @@ L_08B5E7D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E804: aot_gpr_4 = (32752u << 16u); aot_gpr_4 = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_4) ? 1u : 0u); @@ -6469,7 +6669,17 @@ L_08B5E8AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E8DC: aot_gpr_4 = (2234u << 16u); ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16924))); @@ -6547,7 +6757,17 @@ L_08B5E968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E998: ctx.gpr[2] = (ctx.gpr[16] | 0u); { std::uint32_t aot_run_words[10]{}; @@ -6568,7 +6788,17 @@ L_08B5E998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5E9CC: aot_gpr_7 = (ctx.gpr[21] | 0u); aot_gpr_4 = (ctx.gpr[20] | 0u); @@ -6640,7 +6870,17 @@ L_08B5EA48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5EA78: aot_gpr_31 = (0x08B5EA80u); aot_gpr_4 = (ctx.gpr[18] | 0u); @@ -6711,7 +6951,17 @@ L_08B5EAFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5EB2C: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16988))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16984))); @@ -6960,7 +7210,6 @@ L_08B5EDA0: AOT_REGCACHE_SYNC_OUT(); return; L_08B5EDB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5EE54; } @@ -7041,7 +7290,17 @@ L_08B5EE54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5EE84: aot_gpr_7 = (aot_gpr_5 | 0u); aot_gpr_6 = (aot_gpr_4 | 0u); @@ -7078,7 +7337,6 @@ L_08B5EEBC: AOT_REGCACHE_SYNC_OUT(); return; L_08B5EED0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B5EF54; } @@ -7149,7 +7407,17 @@ L_08B5EF54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5EF84: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_5); @@ -7209,7 +7477,17 @@ L_08B5EFFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F020: { const bool branch_taken = static_cast(aot_gpr_7) < 0; aot_gpr_4 = (2234u << 16u); @@ -7266,7 +7544,17 @@ L_08B5F078: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F09C: aot_gpr_4 = (32752u << 16u); aot_gpr_4 = (static_cast(aot_gpr_7) < static_cast(aot_gpr_4) ? 1u : 0u); @@ -7301,7 +7589,17 @@ L_08B5F0C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F0E4: aot_gpr_4 = (ctx.gpr[18] + aot_gpr_4); aot_gpr_4 = (aot_gpr_4 + static_cast(-1023)); @@ -7394,7 +7692,17 @@ L_08B5F1C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F1E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -7410,7 +7718,6 @@ L_08B5F1E8: L_08B5F20C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5F228; } @@ -7419,7 +7726,6 @@ L_08B5F20C: L_08B5F218: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(18128))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5F228; } @@ -7440,7 +7746,17 @@ L_08B5F228: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F23C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -7457,7 +7773,6 @@ L_08B5F23C: L_08B5F264: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5F280; } @@ -7466,7 +7781,6 @@ L_08B5F264: L_08B5F270: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(18128))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5F280; } @@ -7487,7 +7801,17 @@ L_08B5F280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F294: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -7505,7 +7829,6 @@ L_08B5F294: L_08B5F2C0: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5F2DC; } @@ -7514,7 +7837,6 @@ L_08B5F2C0: L_08B5F2CC: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(18128))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5F2DC; } @@ -7535,7 +7857,17 @@ L_08B5F2DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F2F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -7553,7 +7885,6 @@ L_08B5F2F0: L_08B5F31C: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5F338; } @@ -7562,7 +7893,6 @@ L_08B5F31C: L_08B5F328: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(18128))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5F338; } @@ -7583,7 +7913,17 @@ L_08B5F338: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F34C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -7599,7 +7939,6 @@ L_08B5F34C: L_08B5F370: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5F38C; } @@ -7608,7 +7947,6 @@ L_08B5F370: L_08B5F37C: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(18128))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5F38C; } @@ -7629,7 +7967,17 @@ L_08B5F38C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F3A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -7647,7 +7995,6 @@ L_08B5F3A0: L_08B5F3CC: aot_gpr_4 = (0u + static_cast(-1)); { const bool branch_taken = ctx.gpr[2] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B5F3E8; } @@ -7656,7 +8003,6 @@ L_08B5F3CC: L_08B5F3D8: ctx.gpr[17] = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(18128))); { const bool branch_taken = ctx.gpr[17] == 0u; - // nop if (branch_taken) { goto L_08B5F3E8; } @@ -7677,7 +8023,17 @@ L_08B5F3E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F3FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[3]{aot_gpr_6, aot_gpr_7, ctx.gpr[8]}; @@ -7699,7 +8055,17 @@ L_08B5F430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F43C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(76))); @@ -7752,7 +8118,17 @@ L_08B5F48C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F4A8: aot_gpr_6 = (aot_gpr_6 << (aot_gpr_5 & 31u)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_5); @@ -7784,7 +8160,17 @@ L_08B5F4D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F4F0: ctx.gpr[2] = (0u | 0u); aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(28))); @@ -7793,10 +8179,19 @@ L_08B5F4F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F500: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B5F52C; } @@ -7815,11 +8210,20 @@ L_08B5F508: goto L_08B5F52C; L_08B5F52C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F534: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[10] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -7835,8 +8239,6 @@ L_08B5F54C: ctx.gpr[11] = (ctx.gpr[11] >> 16u); ctx.gpr[8] = (ctx.gpr[8] + static_cast(1)); ctx.gpr[2] = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[11])) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_7 = (ctx.gpr[2] + aot_gpr_7); ctx.gpr[11] = (aot_gpr_7 >> 16u); @@ -7857,7 +8259,6 @@ L_08B5F54C: } L_08B5F5A0: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B5F620; } @@ -7917,7 +8318,17 @@ L_08B5F620: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F634: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[16]); @@ -8010,7 +8421,6 @@ L_08B5F6FC: goto L_08B5F704; L_08B5F704: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B5F738; } @@ -8050,7 +8460,17 @@ L_08B5F738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F758: aot_gpr_5 = (65535u << 16u); aot_gpr_5 = (aot_gpr_4 & aot_gpr_5); @@ -8129,14 +8549,33 @@ L_08B5F7C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F7D0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F7D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (aot_gpr_5 & 7u); @@ -8170,14 +8609,34 @@ L_08B5F7FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F80C: jump_target = aot_gpr_31; ctx.gpr[2] = (0u | 0u); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F814: aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); jump_target = aot_gpr_31; @@ -8185,7 +8644,17 @@ L_08B5F814: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F820: { const bool branch_taken = aot_gpr_6 != 0u; ctx.gpr[2] = (0u | 0u); @@ -8240,7 +8709,6 @@ L_08B5F864: goto L_08B5F870; L_08B5F870: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B5F88C; } @@ -8261,14 +8729,34 @@ L_08B5F884: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F88C: jump_target = aot_gpr_31; aot_mem.aot_direct_store32(aot_gpr_4 + static_cast(0), aot_gpr_5); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F894: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -8293,7 +8781,17 @@ L_08B5F8B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5F8D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -8402,8 +8900,6 @@ L_08B5F9B8: ctx.gpr[24] = (ctx.gpr[24] >> 16u); ctx.gpr[9] = (ctx.gpr[9] + static_cast(4)); aot_gpr_31 = (ctx.lo); - // nop - // nop { const std::int64_t product = static_cast(static_cast(ctx.gpr[15])) * static_cast(static_cast(ctx.gpr[14])); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[15] = (aot_gpr_31 + ctx.gpr[25]); ctx.gpr[15] = (ctx.gpr[15] + ctx.gpr[12]); @@ -8500,7 +8996,6 @@ L_08B5FAB0: L_08B5FAB8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[13] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5FACC; } @@ -8522,7 +9017,17 @@ L_08B5FACC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FADC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[18]); @@ -8658,7 +9163,17 @@ L_08B5FBCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FBF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[11] = (aot_gpr_5 | 0u); @@ -8800,7 +9315,17 @@ L_08B5FD18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FD24: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(16))); @@ -8828,11 +9353,20 @@ L_08B5FD38: } L_08B5FD58: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FD60: aot_gpr_7 = (aot_gpr_5 | 0u); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); @@ -8856,11 +9390,20 @@ L_08B5FD74: goto L_08B5FD8C; L_08B5FD8C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FD94: { const bool branch_taken = aot_gpr_5 == 0u; aot_gpr_5 = (aot_gpr_7 + static_cast(-4)); @@ -8883,7 +9426,17 @@ L_08B5FDA4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FDAC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[11] = (aot_gpr_5 | 0u); @@ -8897,7 +9450,6 @@ L_08B5FDAC: L_08B5FDCC: aot_gpr_4 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B5FDFC; } @@ -8918,7 +9470,17 @@ L_08B5FDE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FDFC: { const bool branch_taken = static_cast(aot_gpr_4) >= 0; ctx.gpr[9] = (0u | 0u); @@ -9035,7 +9597,6 @@ L_08B5FF2C: L_08B5FF30: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B5FF4C; } @@ -9059,7 +9620,17 @@ L_08B5FF4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FF5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_5); @@ -9086,7 +9657,17 @@ L_08B5FF84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FF9C: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 20u)); aot_gpr_5 = (static_cast(aot_gpr_4) < 20 ? 1u : 0u); @@ -9109,7 +9690,17 @@ L_08B5FFAC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B5FFCC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), 0u); aot_gpr_6 = (static_cast(aot_gpr_5) < 31 ? 1u : 0u); @@ -9135,7 +9726,17 @@ L_08B5FFEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; } #undef AOT_REGCACHE_SYNC_IN diff --git a/profiles/vcs/generated/generated_unit_0215.cpp b/profiles/vcs/generated/generated_unit_0215.cpp index 3b3dc16..c8fd6d4 100644 --- a/profiles/vcs/generated/generated_unit_0215.cpp +++ b/profiles/vcs/generated/generated_unit_0215.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0215[4076] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 22, 0, 23, 0, 24, 0, - 0, 0, 0, 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 0, 0, 37, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 45, 0, 0, 0, - 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 56, 0, 0, 57, 0, 0, 0, 58, 0, - 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 63, 0, 64, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, - 68, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 70, 0, 71, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, - 0, 0, 76, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, 82, 0, 0, 83, 0, 84, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 89, 0, 0, 0, 90, 0, 91, 0, 0, 92, - 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 0, 0, 99, 0, 100, 0, - 0, 0, 101, 0, 0, 102, 0, 0, 103, 104, 0, 0, 105, 0, 0, 106, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 0, 0, 109, 0, 0, 0, 110, 111, 0, 112, 0, 113, 0, 0, 0, 114, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 123, 0, 0, 124, 0, 125, 0, 126, 0, 0, 127, - 0, 0, 128, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 130, 0, 131, 0, 0, 0, 132, 0, 0, 133, 0, 134, 0, 135, 0, 0, 136, 137, 0, 138, 0, 139, 0, 140, 0, 0, 0, 0, 0, 141, 142, 0, - 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 146, 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 150, - 0, 151, 0, 152, 0, 0, 153, 0, 154, 0, 0, 0, 155, 0, 0, 156, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 161, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 166, - 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 178, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 180, 0, 181, 0, 182, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 188, 0, - 0, 0, 189, 0, 0, 190, 191, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 195, 0, 196, 0, 197, - 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, - 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 207, 0, 0, 0, 208, 0, 0, 209, 0, 210, 211, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 214, 0, - 0, 215, 0, 216, 217, 0, 0, 0, 0, 0, 218, 0, 219, 0, 0, 0, 220, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 223, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 228, - 0, 0, 229, 0, 230, 231, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 234, 0, 0, 235, 0, 0, 236, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 240, 0, 241, 242, - 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, 0, 0, 246, 0, 247, 248, 0, 0, 249, 0, 0, 0, 250, 0, - 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 257, 0, 0, 258, 0, 259, 260, - 0, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 263, 0, 0, 264, 0, 265, 266, 0, 0, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 0, 0, 268, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, - 0, 277, 0, 0, 0, 278, 0, 0, 0, 279, 280, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 283, 0, 0, 0, 284, - 285, 0, 286, 0, 287, 0, 288, 0, 0, 0, 0, 0, 0, 0, 289, 0, 290, 0, 0, 0, 291, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, - 0, 299, 0, 0, 0, 300, 301, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 304, 0, 0, 0, 305, 0, 306, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 310, 311, 0, 0, - 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, 0, 314, 0, 0, 0, 315, 0, 316, 0, 0, 317, 0, 0, 0, 0, 318, 0, 0, 0, - 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, - 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 0, - 0, 328, 0, 329, 330, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 333, 0, 0, 334, 0, 335, 336, 0, 0, 0, - 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 338, 0, 0, 0, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 342, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 348, 0, 0, 0, 0, - 349, 0, 350, 0, 351, 0, 352, 0, 0, 353, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 355, 0, 356, 0, - 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 358, 0, 359, 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 362, 0, 363, 0, 0, - 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 365, 366, 367, 0, 0, 368, 0, 0, 0, 369, 0, 0, 0, 370, 0, 371, 0, 0, 0, 372, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 374, 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 378, 0, 379, 380, 0, 0, 0, 0, 0, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 383, 0, 384, 0, - 385, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387, 0, 388, 0, 0, 0, 389, 0, 0, 0, 390, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 393, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 401, 0, 0, 402, 0, 0, 0, 0, 403, 0, 0, 0, 404, 0, 0, 405, 0, 0, 0, 406, 407, 0, 0, 0, 0, 408, 0, - 409, 0, 0, 0, 0, 0, 0, 0, 410, 0, 411, 0, 0, 0, 412, 413, 0, 0, 0, 0, 0, 414, 0, 415, 0, 0, 416, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 0, 418, 419, 0, 0, 0, 0, 0, 0, 0, 420, 0, 421, - 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, - 424, 0, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 426, 0, 427, 0, 0, 0, 0, 428, 0, 0, 429, 0, 0, 0, 0, 0, 0, - 0, 430, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 432, 433, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, - 438, 0, 0, 439, 0, 0, 440, 0, 441, 442, 0, 0, 443, 0, 444, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, - 0, 0, 447, 0, 0, 0, 0, 448, 0, 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, 0, 451, 0, 0, 452, 453, 0, 454, 0, 0, 0, 455, 0, - 456, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 462, 0, 463, 0, - 464, 465, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 469, 0, 470, - 0, 0, 0, 0, 0, 0, 471, 0, 0, 472, 473, 0, 0, 474, 0, 475, 0, 476, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 480, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 485, 486, 0, - 487, 0, 0, 488, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, 0, - 494, 0, 0, 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 498, 0, 499, 0, 0, 500, 0, 0, 0, - 501, 0, 0, 502, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 0, 506, 0, 507, 0, 0, 508, 509, 0, 0, 0, 510, 0, - 0, 0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 512, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 0, 0, 515, 0, 0, 0, - 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 518, 0, 0, 0, 0, 0, - 0, 0, 0, 519, 0, 520, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 522, 0, 0, 0, 523, 524, 0, 525, 0, 526, 0, 0, 527, 0, 0, 0, - 0, 0, 0, 528, 0, 529, 0, 530, 0, 0, 531, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 533, 0, 0, 534, 0, 0, 0, 0, 0, 0, - 0, 535, 0, 0, 0, 0, 536, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, - 0, 539, 0, 0, 540, 0, 0, 541, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 544, 0, 0, 0, 0, 0, 545, 546, 547, 0, 548, 0, 0, 0, - 0, 0, 0, 549, 0, 550, 0, 551, 0, 0, 0, 0, 0, 0, 552, 0, 0, 553, 0, 0, 0, 0, 554, 0, 0, 555, 0, 556, 0, 0, 557, 558, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 560, 0, 561, 0, 0, 562, 563, 0, 0, 0, 0, 564, 0, 565, 0, 0, 0, 566, 0, 0, - 0, 0, 0, 0, 567, 568, 569, 0, 570, 0, 0, 0, 571, 0, 0, 0, 0, 0, 572, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, - 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 578, 579, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, - 582, 0, 0, 0, 0, 0, 0, 583, 584, 0, 0, 585, 0, 0, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 587, 0, 0, 588, 0, - 0, 0, 0, 0, 0, 589, 0, 0, 590, 0, 0, 0, 591, 0, 0, 0, 592, 593, 0, 594, 0, 595, 0, 0, 596, 0, 0, 0, 597, 0, 598, 0, - 0, 599, 0, 0, 600, 0, 601, 0, 0, 602, 603, 0, 604, 0, 605, 0, 606, 607, 0, 0, 608, 0, 0, 0, 0, 609, 0, 0, 0, 0, 0, 610, - 0, 0, 0, 0, 611, 0, 0, 0, 0, 612, 0, 613, 614, 0, 615, 0, 616, 0, 617, 0, 0, 0, 618, 619, 620, 0, 621, 0, 0, 0, 622, 623, - 0, 624, 0, 0, 0, 0, 0, 625, 0, 0, 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 628, 0, - 0, 629, 0, 0, 630, 0, 631, 0, 0, 0, 632, 0, 0, 0, 0, 633, 634, 0, 0, 0, 635, 636, 637, 0, 0, 0, 638, 0, 639, 0, 640, 0, - 641, 0, 0, 0, 0, 0, 0, 642, 0, 643, 644, 0, 645, 0, 0, 646, 647, 0, 648, 0, 0, 649, 0, 0, 650, 0, 651, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 654, 0, 0, 655, 0, 0, 0, 0, 656, 0, 0, - 0, 0, 0, 657, 0, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 660, 0, 0, 0, 661, 0, 662, 0, 0, 0, 663, 0, 664, 0, 0, 665, 0, - 0, 0, 0, 0, 0, 0, 666, 0, 667, 0, 668, 669, 0, 670, 0, 0, 671, 0, 672, 0, 673, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 675, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 677, 0, 678, 679, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 0, 682, 0, - 0, 0, 0, 0, 0, 683, 0, 684, 685, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 688, 0, 0, 0, 689, 0, 690, - 0, 691, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 0, 696, 0, 697, 0, 0, 0, 698, 0, 0, 699, 0, 700, 0, 0, 0, 701, 0, 0, - 0, 0, 702, 0, 0, 703, 0, 0, 0, 704, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 707, 0, 708, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 711, 0, 0, 712, 713, 0, 0, 0, 714, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 716, 0, 0, 717, 0, 0, 718, 719, 0, 0, 0, 720, 0, 721, 0, 0, 722, - 0, 723, 0, 724, 0, 0, 0, 725, 0, 726, 0, 0, 727, 0, 0, 728, 0, 0, 0, 0, 729, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, - 731, 0, 732, 0, 0, 0, 0, 0, 0, 0, 733, 0, 734, 0, 0, 0, 0, 0, 735, 0, 736, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 741, 0, 0, - 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, - 745, 0, 746, 0, 0, 747, 748, 0, 0, 0, 749, 0, 0, 750, 0, 0, 0, 0, 751, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 753, 754, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 756, 0, 757, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, - 760, 0, 761, 0, 762, 0, 0, 0, 0, 0, 763, 0, 0, 0, 764, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 766, 0, 767, 0, 0, 0, 768, 0, 0, 0, 0, 769, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 771, 0, 772, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 777, 0, - 0, 0, 0, 0, 778, 0, 779, 0, 0, 0, 0, 0, 0, 780, 781, 0, 0, 0, 0, 0, 782, 0, 783, 0, 0, 0, 0, 784, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 786, 787, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 789, 0, 790, 0, - 0, 0, 0, 0, 0, 791, 792, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 0, - 0, 0, 0, 0, 0, 796, 0, 797, 0, 0, 798, 0, 0, 0, 799, 0, 0, 0, 0, 800, 0, 0, 801, 0, 0, 0, 0, 0, 0, 802, 0, 803, - 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 0, 807, 0, 0, - 0, 808, 0, 0, 0, 809, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 812, 0, 0, 0, 813, 0, - 0, 814, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 816, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 818, 819, 0, 0, 820, 0, 0, 0, 0, - 0, 0, 0, 821, 0, 0, 0, 0, 822, 0, 0, 823, 0, 0, 0, 0, 0, 0, 824, 0, 825, 0, 0, 0, 826, 0, 0, 0, 0, 0, 0, 827, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 830, 0, 0, 0, 0, 831, 0, 0, 0, - 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 834, 0, 0, 835, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 837, 0, - 0, 0, 838, 0, 0, 0, 0, 0, 0, 839, 0, 840, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0215[64] = { + 0x0A01248028101001ull, 0x5430224A00080810ull, 0x0802008208108050ull, 0x1490004085089020ull, + 0x0002100002800002ull, 0x4481000028000021ull, 0x8220690122341482ull, 0x944109000A924924ull, + 0x0010932453004848ull, 0x020109080088AC42ull, 0x0000002495280400ull, 0xA00A500960AB2A45ull, + 0x000024008004914Aull, 0x10844102A8020082ull, 0x0005504200912100ull, 0xA840246442015000ull, + 0x0108100408240402ull, 0x8109141A44011A44ull, 0x2488023488022200ull, 0x44D22008D2200200ull, + 0xD220080010401020ull, 0x082400A040D22008ull, 0x8880462201081004ull, 0x2011200810914055ull, + 0x3110010028880462ull, 0x8208020410944402ull, 0x1A44011A44004002ull, 0x0A44090041014410ull, + 0x2A00948050000A55ull, 0x40001D0022889C01ull, 0x222802015400020Dull, 0x00114090008A2400ull, + 0x04A0C50143122120ull, 0x02000001A0340000ull, 0x9028608202428201ull, 0x4592088480045349ull, + 0xA208008351402281ull, 0x6A044900080AA640ull, 0x1284024140050149ull, 0x1200908046520449ull, + 0x12B1402804800020ull, 0x400000C2024024A8ull, 0xCA4240A817050892ull, 0x40A4117022865200ull, + 0x4800498120059002ull, 0x82135652512B1120ull, 0x40000C82C5C55A10ull, 0x0525968154718452ull, + 0x4A28908821210020ull, 0x4404681100552D40ull, 0x00000082A24011A0ull, 0x2291444000400000ull, + 0x8C81080015000A24ull, 0x0210928A94649000ull, 0x0008200000541405ull, 0x0084001024000000ull, + 0x0204290060442465ull, 0x1408845000204415ull, 0x085060504800A040ull, 0x400420605040C080ull, + 0x20400408A04844A0ull, 0x0981110244020422ull, 0x1084080081140908ull, 0x00000A0444091008ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0215[64] = { + 1u, 12u, 25u, 34u, 46u, 51u, 59u, 76u, 93u, 108u, 121u, 130u, 151u, 161u, 173u, 184u, + 198u, 207u, 224u, 237u, 251u, 261u, 273u, 285u, 299u, 312u, 324u, 337u, 349u, 364u, 378u, 391u, + 401u, 417u, 424u, 438u, 456u, 471u, 487u, 501u, 516u, 528u, 539u, 559u, 576u, 589u, 611u, 629u, + 652u, 666u, 683u, 693u, 702u, 715u, 731u, 740u, 745u, 760u, 773u, 785u, 796u, 808u, 821u, 832u, }; void recomp_unit_0215_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -156,13 +51,25 @@ void recomp_unit_0215_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B60000u; - entry_id = (entry_delta < 16304u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0215[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16304u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0215[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0215[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B60000; @@ -1071,7 +978,17 @@ L_08B60074: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6009C: aot_gpr_2 = (ctx.gpr[10] | 0u); { const bool branch_taken = aot_gpr_2 == 0u; @@ -1125,7 +1042,17 @@ L_08B600EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60110: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_4); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[10]); @@ -1137,7 +1064,17 @@ L_08B60110: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6012C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[9]); @@ -1263,7 +1200,17 @@ L_08B60218: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6023C: aot_gpr_5 = (ctx.gpr[11] << 2u); aot_mem.aot_direct_store32(ctx.gpr[9] + static_cast(0), aot_gpr_4); @@ -1283,7 +1230,17 @@ L_08B60250: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6026C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[12] = (aot_gpr_5 | 0u); @@ -1360,7 +1317,17 @@ L_08B60330: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6033C: ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((!(std::isnan(aot_fpr_12) || std::isnan(aot_fpr_12)) && aot_fpr_12 == aot_fpr_12)) ? 0x00800000u : 0u); aot_gpr_3 = (0u + static_cast(1)); @@ -1374,7 +1341,6 @@ L_08B6033C: L_08B6034C: ctx.fpr[1] = std::bit_cast(0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_4 = (2233u << 16u); if (branch_taken) { @@ -1389,7 +1355,6 @@ L_08B60360: L_08B60368: aot_fpr_4 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(-24280))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_4 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); aot_gpr_6 = (2233u << 16u); if (branch_taken) { @@ -1402,7 +1367,6 @@ L_08B6037C: aot_gpr_5 = (2233u << 16u); ctx.fpr[1] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(-24276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[1])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[9] = (2233u << 16u); if (branch_taken) { @@ -1438,15 +1402,23 @@ L_08B603DC: goto L_08B603E8; L_08B603E8: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B603F0: ctx.fpr[14] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(-24260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[14])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_2 = aot_fpr_12 + aot_fpr_4; goto L_08B60464; @@ -1502,7 +1474,6 @@ L_08B60464: L_08B604B0: ctx.fpr[7] = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(-24276))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[7])) ? 0x00800000u : 0u); - // nop { const bool branch_taken = !((ctx.fcr31 & 0x00800000u) != 0u); ctx.gpr[10] = (2233u << 16u); if (branch_taken) { @@ -1529,7 +1500,6 @@ L_08B604C4: L_08B60500: ctx.fpr[18] = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(-24260))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < ctx.fpr[18])) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_fpr_2 = aot_fpr_12 + aot_fpr_4; goto L_08B60574; @@ -1618,7 +1588,17 @@ L_08B605F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60604: aot_gpr_5 = (aot_gpr_6 | 0u); ctx.gpr[8] = (aot_gpr_4 | 0u); @@ -1634,21 +1614,49 @@ L_08B6061C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60628: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60630: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60648: { const bool branch_taken = aot_gpr_4 == 0u; aot_gpr_2 = (0u + 0u); @@ -1661,14 +1669,21 @@ L_08B60650: aot_gpr_2 = (0u + static_cast(-1)); goto L_08B60654; L_08B60654: - // nop - // nop jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60664: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); @@ -1682,7 +1697,17 @@ L_08B60674: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60680: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -1706,7 +1731,6 @@ L_08B606A0: goto L_08B606AC; L_08B606AC: ctx.gpr[31] = (0x08B606B4u); - // nop goto L_08B60664; L_08B606B4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(17068))); @@ -1725,7 +1749,17 @@ L_08B606B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B606D4: aot_gpr_4 = (aot_gpr_4 + static_cast(-1)); aot_gpr_5 = (aot_gpr_4 < static_cast(9) ? 1u : 0u); @@ -1742,11 +1776,20 @@ L_08B606E4: ctx.gpr[1] = (ctx.gpr[1] + aot_gpr_4); ctx.gpr[1] = (aot_mem.aot_direct_load32(ctx.gpr[1] + static_cast(-25032))); jump_target = ctx.gpr[1]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B606FC: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1754,7 +1797,17 @@ L_08B606FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60708: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1762,7 +1815,17 @@ L_08B60708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60714: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1770,7 +1833,17 @@ L_08B60714: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60720: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1778,7 +1851,17 @@ L_08B60720: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6072C: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1786,7 +1869,17 @@ L_08B6072C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60738: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1794,7 +1887,17 @@ L_08B60738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60744: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1802,7 +1905,17 @@ L_08B60744: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60750: aot_gpr_2 = (2233u << 16u); jump_target = ctx.gpr[31]; @@ -1810,18 +1923,37 @@ L_08B60750: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6075C: aot_gpr_2 = (2233u << 16u); aot_gpr_2 = (aot_gpr_2 + static_cast(-25100)); goto L_08B60764; L_08B60764: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6076C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[16]); @@ -1863,16 +1995,24 @@ L_08B607C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B607D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); ctx.gpr[31] = (0x08B607E8u); - // nop goto L_08B6076C; L_08B607E8: ctx.gpr[31] = (0x08B607F0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B607F0u) goto L_08B607F0; AOT_REGCACHE_SYNC_OUT(); return; L_08B607F0: @@ -1882,12 +2022,21 @@ L_08B607F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B607FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); ctx.gpr[31] = (0x08B6080Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6080Cu) goto L_08B6080C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6080C: @@ -1897,7 +2046,17 @@ L_08B6080C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60818: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_gpr_5 | 0u); @@ -1913,7 +2072,17 @@ L_08B6082C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60838: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -2041,7 +2210,6 @@ L_08B60928: goto L_08B6092C; L_08B6092C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6094C; } @@ -2050,7 +2218,6 @@ L_08B6092C: L_08B60934: jump_target = aot_gpr_4; ctx.gpr[31] = (0x08B6093Cu); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6093Cu) goto L_08B6093C; AOT_REGCACHE_SYNC_OUT(); return; @@ -2058,7 +2225,6 @@ L_08B6093C: ctx.gpr[16] = (ctx.gpr[16] + static_cast(8)); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B60934; } @@ -2072,7 +2238,17 @@ L_08B6094C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6095C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[17]); @@ -2135,7 +2311,17 @@ L_08B609C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B609E4: ctx.gpr[7] = (2234u << 16u); ctx.gpr[8] = (aot_mem.aot_direct_load32(ctx.gpr[7] + static_cast(18412))); @@ -2151,7 +2337,17 @@ L_08B609E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60A28: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[8] = (2234u << 16u); @@ -2179,7 +2375,17 @@ L_08B60A54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60A60: { const bool branch_taken = ctx.gpr[7] == 0u; ctx.gpr[7] = (aot_gpr_4 | 0u); @@ -2202,7 +2408,17 @@ L_08B60A70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60A7C: aot_gpr_5 = (aot_gpr_4 | 0u); jump_target = aot_gpr_5; @@ -2218,7 +2434,17 @@ L_08B60A88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60A94: aot_gpr_29 = (aot_gpr_29 + static_cast(-256)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(232), ctx.gpr[22]); @@ -2302,7 +2528,6 @@ L_08B60B40: goto L_08B60B44; L_08B60B44: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B60B54; } @@ -2400,7 +2625,6 @@ L_08B60BCC: AOT_REGCACHE_SYNC_OUT(); return; L_08B60BF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B60C04; } @@ -2415,7 +2639,6 @@ L_08B60BFC: AOT_REGCACHE_SYNC_OUT(); return; L_08B60C04: { const bool branch_taken = ctx.gpr[20] == 0u; - // nop if (branch_taken) { goto L_08B60C18; } @@ -2476,7 +2699,17 @@ L_08B60C48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60C7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), 0u); @@ -2497,7 +2730,17 @@ L_08B60CA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60CB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-208)); { const std::uint32_t aot_run_words[6]{ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23]}; @@ -2554,7 +2797,6 @@ L_08B60D44: { const std::int64_t product = static_cast(static_cast(ctx.gpr[19])) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); { const bool branch_taken = ctx.gpr[22] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B60D74; } @@ -2562,7 +2804,6 @@ L_08B60D44: } L_08B60D6C: ctx.gpr[31] = (0x08B60D74u); - // nop goto L_08B60E40; L_08B60D74: { const std::uint32_t dividend = ctx.gpr[22]; const std::uint32_t divisor = ctx.gpr[19]; if (divisor == 0u) { ctx.lo = 0xFFFFFFFFu; ctx.hi = dividend; } else { ctx.lo = dividend / divisor; ctx.hi = dividend % divisor; } } @@ -2647,7 +2888,17 @@ L_08B60DF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60E20: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[9] = (0u | 0u); @@ -2662,7 +2913,17 @@ L_08B60E34: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60E40: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); @@ -2676,7 +2937,17 @@ L_08B60E50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60E5C: { const std::int64_t product = static_cast(static_cast(aot_gpr_5)) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[10] = (ctx.lo); @@ -2691,7 +2962,17 @@ L_08B60E5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60E84: aot_gpr_2 = (0u + static_cast(32)); ctx.gpr[7] = (aot_gpr_2 - aot_gpr_6); @@ -2725,11 +3006,20 @@ L_08B60EB8: goto L_08B60EC0; L_08B60EC0: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60EC8: aot_gpr_3 = (31u << 16u); aot_gpr_3 = (aot_gpr_3 | 65535u); @@ -2834,7 +3124,17 @@ L_08B60FB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B60FD8: aot_gpr_6 = (2233u << 16u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(-24224))); @@ -2847,7 +3147,6 @@ L_08B60FEC: goto L_08B60F98; L_08B60FF4: { const bool branch_taken = aot_gpr_2 != 0u; - // nop if (branch_taken) { goto L_08B60F38; } @@ -2855,7 +3154,6 @@ L_08B60FF4: } L_08B60FFC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B60F38; } @@ -3045,7 +3343,17 @@ L_08B61190: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B611A8: { const bool branch_taken = aot_gpr_6 != 0u; aot_gpr_3 = (0u + static_cast(8)); @@ -3673,7 +3981,6 @@ L_08B61700: goto L_08B61708; L_08B61708: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B61718; } @@ -3695,7 +4002,17 @@ L_08B61718: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B61738: { const bool branch_taken = aot_gpr_6 != 0u; aot_gpr_3 = (0u + static_cast(8)); @@ -4137,7 +4454,6 @@ L_08B61B10: aot_gpr_3 = (ctx.gpr[15] < aot_gpr_6 ? 1u : 0u); aot_gpr_2 = (aot_gpr_2 & aot_gpr_3); { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B61B38; } @@ -4196,7 +4512,17 @@ L_08B61BA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B61BAC: ctx.gpr[7] = (aot_gpr_4 + 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -4254,7 +4580,17 @@ L_08B61C00: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B61C08: aot_gpr_6 = (ctx.gpr[7] + 0u); goto L_08B61C00; @@ -4574,7 +4910,6 @@ L_08B61EA4: goto L_08B61E0C; L_08B61ECC: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B61EE4; } @@ -4628,7 +4963,17 @@ L_08B61F4C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B61F5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-144)); aot_gpr_3 = (aot_gpr_5 + 0u); @@ -4670,7 +5015,17 @@ L_08B61FC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B61FD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-160)); aot_gpr_2 = (aot_gpr_4 + 0u); @@ -4745,7 +5100,6 @@ L_08B62064: goto L_08B62078; L_08B62078: ctx.gpr[31] = (0x08B62080u); - // nop goto L_08B62964; L_08B62080: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(148))); @@ -4759,7 +5113,17 @@ L_08B62080: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B620A0: { const bool branch_taken = aot_gpr_2 != 0u; aot_gpr_2 = (aot_gpr_3 ^ 2u); @@ -5142,7 +5506,6 @@ L_08B623DC: goto L_08B623E0; L_08B623E0: ctx.gpr[31] = (0x08B623E8u); - // nop goto L_08B62964; L_08B623E8: ctx.gpr[31] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(100))); @@ -5152,7 +5515,17 @@ L_08B623E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B623F8: { const bool branch_taken = aot_gpr_2 != 0u; aot_gpr_2 = (aot_gpr_6 ^ 2u); @@ -5275,7 +5648,6 @@ L_08B624E4: goto L_08B623E0; L_08B624F4: { const bool branch_taken = aot_gpr_3 != 0u; - // nop if (branch_taken) { goto L_08B624E4; } @@ -5295,7 +5667,6 @@ L_08B624FC: L_08B62518: aot_gpr_2 = (aot_gpr_6 | ctx.gpr[7]); { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B624E4; } @@ -5319,7 +5690,6 @@ L_08B6253C: goto L_08B62484; L_08B62544: { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B62460; } @@ -5367,7 +5737,17 @@ L_08B625B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B625C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_3 = (aot_gpr_4 >> 31u); @@ -5398,7 +5778,17 @@ L_08B625F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62600: aot_gpr_2 = (0u + static_cast(60)); { const bool branch_taken = aot_gpr_3 == 0u; @@ -5411,7 +5801,6 @@ L_08B62600: L_08B6260C: aot_gpr_2 = (32768u << 16u); { const bool branch_taken = aot_gpr_4 == aot_gpr_2; - // nop if (branch_taken) { goto L_08B62680; } @@ -5542,7 +5931,17 @@ L_08B62718: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62728: aot_gpr_4 = (0u + static_cast(60)); aot_gpr_4 = (aot_gpr_4 - aot_gpr_2); @@ -5550,7 +5949,6 @@ L_08B62728: aot_gpr_3 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); ctx.gpr[8] = (aot_gpr_4 << 26u); { const bool branch_taken = static_cast(ctx.gpr[8]) >= 0; - // nop if (branch_taken) { goto L_08B62750; } @@ -5611,7 +6009,17 @@ L_08B627B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B627BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_2 = (aot_gpr_4 + 0u); @@ -5630,7 +6038,17 @@ L_08B627E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B627F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_gpr_2 = (aot_gpr_4 + 0u); @@ -5669,7 +6087,17 @@ L_08B6285C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62868: aot_gpr_2 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_3 = (127u << 16u); @@ -5731,14 +6159,34 @@ L_08B628D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B628DC: jump_target = ctx.gpr[31]; aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(0), aot_gpr_2); local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B628E4: aot_gpr_2 = (0u + static_cast(255)); { const bool branch_taken = aot_gpr_6 == aot_gpr_2; @@ -5793,7 +6241,17 @@ L_08B62958: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62964: aot_gpr_3 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); @@ -5845,7 +6303,17 @@ L_08B6299C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B629F8: aot_gpr_2 = (aot_gpr_3 ^ 4u); if (aot_gpr_2 == 0u) { @@ -5856,7 +6324,6 @@ L_08B629F8: L_08B62A04: aot_gpr_2 = (aot_gpr_3 ^ 2u); { const bool branch_taken = aot_gpr_2 == 0u; - // nop if (branch_taken) { goto L_08B62B64; } @@ -5886,7 +6353,6 @@ L_08B62A2C: ctx.gpr[13] = (aot_gpr_2 - aot_gpr_4); aot_gpr_3 = (static_cast(ctx.gpr[13]) < 57 ? 1u : 0u); { const bool branch_taken = aot_gpr_3 != 0u; - // nop if (branch_taken) { goto L_08B62AC4; } @@ -5956,7 +6422,6 @@ L_08B62AC4: aot_gpr_4 = (0u + static_cast(1)); aot_gpr_6 = (ctx.gpr[13] << 26u); { const bool branch_taken = static_cast(aot_gpr_6) >= 0; - // nop if (branch_taken) { goto L_08B62AE4; } @@ -5997,7 +6462,6 @@ L_08B62AFC: aot_gpr_2 = (aot_gpr_2 | aot_gpr_3); ctx.gpr[8] = (ctx.gpr[13] << 26u); { const bool branch_taken = static_cast(ctx.gpr[8]) >= 0; - // nop if (branch_taken) { goto L_08B62B30; } @@ -6146,7 +6610,17 @@ L_08B62C40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62C48: aot_gpr_4 = (4095u << 16u); ctx.gpr[9] = (ctx.gpr[9] << 8u); @@ -6192,7 +6666,17 @@ L_08B62CA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62CAC: aot_gpr_2 = (0u + static_cast(2047)); { const bool branch_taken = ctx.gpr[7] == aot_gpr_2; @@ -6267,7 +6751,17 @@ L_08B62D44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62D4C: { const bool branch_taken = aot_gpr_2 != 0u; aot_gpr_2 = (aot_gpr_3 ^ 4u); @@ -6485,11 +6979,20 @@ L_08B62EAC: aot_gpr_6 = (aot_gpr_6 | aot_gpr_3); aot_fpr_0 = std::bit_cast(aot_gpr_6); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B62EF8: aot_gpr_2 = (aot_gpr_3 ^ 4u); if (aot_gpr_2 == 0u) { @@ -6618,7 +7121,6 @@ L_08B62FD4: } goto L_08B62FE0; L_08B62FE0: - // nop goto L_08B62FC0; L_08B62FE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); @@ -6760,7 +7262,17 @@ L_08B630F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63118: ctx.gpr[31] = (0x08B63120u); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); @@ -6776,7 +7288,6 @@ L_08B63128: goto L_08B6312C; L_08B6312C: ctx.gpr[31] = (0x08B63134u); - // nop ctx.pc = 0x08B733ACu; AOT_REGCACHE_SYNC_OUT(); return; L_08B63134: @@ -6849,7 +7360,17 @@ L_08B631B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B631C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[10] = (0u | 32768u); @@ -6903,7 +7424,17 @@ L_08B63220: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63230: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6961,7 +7492,17 @@ L_08B6329C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63358: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[23]); @@ -7075,14 +7616,23 @@ L_08B6342C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63460: ctx.gpr[31] = (0x08B63468u); aot_gpr_4 = (0u + static_cast(10000)); ctx.pc = 0x08B7340Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B63468: - // nop goto L_08B63408; L_08B63470: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); @@ -7158,7 +7708,17 @@ L_08B634FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63530: aot_gpr_6 = (aot_gpr_3 & 1024u); { const bool branch_taken = aot_gpr_6 != 0u; @@ -7402,7 +7962,17 @@ L_08B63774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63790: aot_gpr_3 = (0u + static_cast(76)); { const std::int64_t product = static_cast(static_cast(aot_gpr_4)) * static_cast(static_cast(aot_gpr_3)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } @@ -7447,7 +8017,6 @@ L_08B637DC: } L_08B63800: { const bool branch_taken = ctx.gpr[13] != 0u; - // nop if (branch_taken) { goto L_08B63908; } @@ -7471,7 +8040,17 @@ L_08B63818: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63828: aot_gpr_4 = (static_cast(aot_gpr_3) < 16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; @@ -7767,7 +8346,17 @@ L_08B63AD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63AD8: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); ctx.gpr[14] = (aot_gpr_6 < static_cast(112) ? 1u : 0u); @@ -7824,7 +8413,17 @@ L_08B63B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63B58: ctx.gpr[14] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (0u + 0u); @@ -8129,7 +8728,17 @@ L_08B63DE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B63DEC: { const std::int64_t product = static_cast(static_cast(ctx.gpr[8])) * static_cast(static_cast(aot_gpr_6)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } ctx.gpr[9] = (ctx.gpr[10] + static_cast(20800)); diff --git a/profiles/vcs/generated/generated_unit_0216.cpp b/profiles/vcs/generated/generated_unit_0216.cpp index 837a02a..ffbe82c 100644 --- a/profiles/vcs/generated/generated_unit_0216.cpp +++ b/profiles/vcs/generated/generated_unit_0216.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0216[4087] = { - 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 9, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 18, 0, 0, 0, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 24, 0, 25, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 29, 0, 0, - 30, 0, 0, 0, 31, 0, 32, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 40, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 45, 0, 46, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 50, 0, 0, 0, - 51, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, - 0, 61, 62, 0, 0, 0, 63, 0, 0, 64, 0, 0, 0, 0, 65, 66, 0, 67, 0, 68, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 70, 0, 71, 72, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 75, 76, 0, 0, 0, 77, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, - 0, 83, 0, 0, 0, 0, 0, 0, 0, 84, 0, 85, 0, 86, 0, 0, 0, 0, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 91, 0, 92, 0, 0, 93, 0, 94, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 96, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 100, 0, 0, 101, 0, 0, 0, 0, - 0, 102, 0, 0, 103, 0, 0, 104, 0, 105, 106, 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 109, 110, 0, 0, 0, 0, 111, 112, 0, - 0, 0, 0, 113, 0, 0, 0, 114, 0, 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 117, 0, 118, 0, 0, 0, 119, 0, 0, 0, 0, - 0, 120, 0, 0, 121, 0, 0, 122, 0, 123, 0, 0, 124, 0, 0, 125, 0, 126, 0, 0, 0, 0, 127, 128, 0, 129, 0, 0, 130, 0, 0, 0, - 0, 0, 131, 132, 133, 0, 0, 134, 0, 0, 135, 0, 0, 136, 0, 0, 137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 0, 141, 0, 142, - 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 0, 148, 0, 0, 149, 0, 150, 0, 0, 151, 0, 0, 152, 0, - 153, 0, 154, 0, 0, 0, 155, 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 158, 0, 0, 0, 159, 0, 0, 160, 0, 0, - 0, 0, 161, 0, 0, 0, 162, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 0, 166, 0, 167, 0, 0, 0, 0, 168, 169, 0, 0, 0, 0, 0, - 0, 0, 170, 171, 0, 0, 172, 0, 173, 0, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 176, 0, 0, 177, 0, 178, 0, 179, 0, 0, 0, 0, - 180, 0, 181, 0, 182, 0, 0, 0, 0, 0, 183, 0, 0, 0, 184, 185, 0, 0, 0, 186, 0, 187, 0, 0, 188, 0, 189, 0, 0, 190, 0, 0, - 0, 0, 0, 0, 191, 0, 192, 0, 193, 0, 0, 194, 0, 0, 0, 195, 0, 0, 0, 0, 196, 0, 0, 197, 0, 0, 0, 0, 0, 0, 198, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 0, 202, 0, 203, 0, 204, 0, 0, 205, 0, 0, 206, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 209, 210, 0, 0, 211, 0, 212, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, - 214, 0, 215, 0, 0, 216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 221, 0, 222, 0, - 0, 0, 0, 0, 223, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 226, 0, 0, 227, 0, 0, 228, 0, 229, 0, 230, 0, 0, - 231, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 236, - 0, 0, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 239, 0, 240, 0, 241, 0, 0, - 242, 0, 0, 0, 0, 0, 0, 243, 0, 0, 244, 245, 0, 0, 0, 0, 0, 246, 0, 247, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 250, 0, 251, 0, 252, 0, 0, 253, 0, 0, 0, 0, 254, 0, 0, 255, 256, 0, 0, 0, 0, 0, - 257, 0, 258, 0, 0, 259, 0, 0, 0, 0, 260, 0, 261, 0, 262, 0, 263, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, - 266, 0, 0, 267, 0, 268, 269, 0, 0, 270, 0, 0, 271, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 0, 0, 278, 0, 0, 0, 279, 0, - 0, 0, 280, 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 284, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, - 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 289, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 293, 0, 0, 294, 0, - 0, 295, 0, 296, 0, 0, 297, 0, 298, 0, 0, 299, 0, 0, 0, 300, 0, 0, 301, 0, 0, 0, 0, 302, 0, 0, 303, 0, 0, 304, 0, 305, - 0, 0, 306, 0, 0, 0, 307, 0, 0, 308, 0, 0, 0, 0, 309, 0, 0, 310, 0, 0, 311, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, 314, - 0, 0, 315, 0, 0, 316, 0, 317, 0, 0, 318, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 321, 0, - 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 326, 0, - 0, 0, 0, 327, 0, 0, 0, 328, 0, 329, 0, 330, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, 0, 0, 335, - 0, 0, 336, 0, 337, 0, 0, 338, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 341, 0, 342, 343, 0, 344, 0, 0, 345, 0, 0, - 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 348, 0, 349, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, - 0, 352, 0, 0, 353, 0, 354, 355, 0, 356, 0, 0, 357, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 0, 359, 0, 0, 360, 0, 361, 362, 0, - 363, 0, 0, 364, 0, 0, 0, 0, 365, 0, 0, 0, 366, 0, 367, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 0, 0, - 0, 370, 0, 371, 0, 372, 0, 0, 373, 0, 374, 0, 375, 0, 0, 0, 0, 376, 377, 0, 378, 0, 379, 0, 380, 0, 381, 0, 382, 0, 383, 0, - 384, 0, 385, 0, 0, 386, 0, 387, 0, 388, 0, 0, 0, 0, 389, 0, 0, 390, 391, 0, 392, 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 397, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 400, 0, 0, 401, - 0, 402, 403, 0, 404, 0, 0, 405, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 408, 0, 409, 410, 0, 411, 0, 0, 412, 0, - 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 415, 0, 416, 417, 0, 418, 0, 0, 419, 0, 0, 0, 0, 420, 0, 0, 421, 0, 0, - 422, 0, 423, 0, 0, 0, 424, 0, 425, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 430, 0, 431, 0, 0, 432, 0, 0, - 0, 433, 0, 0, 0, 0, 0, 434, 0, 0, 0, 0, 435, 0, 436, 437, 0, 438, 0, 0, 439, 0, 0, 0, 440, 0, 0, 0, 0, 0, 441, 0, - 0, 0, 0, 0, 0, 442, 0, 443, 444, 0, 445, 0, 0, 446, 0, 0, 0, 447, 0, 0, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 449, 0, - 450, 451, 0, 452, 0, 0, 0, 0, 0, 0, 453, 0, 0, 454, 0, 455, 456, 0, 457, 0, 0, 458, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, - 0, 460, 0, 0, 461, 0, 462, 463, 0, 464, 0, 0, 465, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 467, 0, 0, 468, 0, 469, 470, 0, - 471, 0, 0, 472, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 476, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 480, 0, 0, 0, - 0, 0, 0, 481, 482, 0, 0, 0, 0, 0, 483, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 485, 0, 0, 0, 486, 0, 487, 0, 0, - 0, 0, 488, 0, 489, 490, 0, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, - 0, 0, 493, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 496, 0, 497, 498, 0, 499, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, - 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 505, 0, 506, 0, - 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 512, 0, - 0, 513, 0, 514, 0, 515, 0, 0, 0, 516, 0, 517, 0, 0, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 520, 0, 0, 0, 521, 0, - 0, 0, 0, 0, 522, 0, 0, 0, 523, 0, 0, 524, 0, 525, 0, 526, 0, 0, 527, 528, 0, 529, 0, 0, 530, 0, 0, 0, 0, 531, 0, 0, - 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, 0, 0, 534, 0, 0, 0, 0, 0, 535, 0, 0, 0, 536, 0, 0, 537, 0, 538, 0, 539, 0, 0, - 540, 541, 0, 542, 0, 0, 543, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 547, 0, 0, 0, 548, 0, - 0, 0, 0, 0, 549, 0, 0, 0, 550, 0, 0, 551, 0, 552, 0, 553, 0, 0, 554, 555, 0, 556, 0, 0, 557, 0, 0, 0, 0, 558, 0, 0, - 0, 0, 0, 0, 559, 0, 0, 0, 560, 0, 0, 0, 0, 561, 0, 0, 562, 0, 0, 563, 0, 564, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, 568, 0, 0, 569, 0, 0, 570, - 0, 571, 572, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 0, 575, 0, 0, 576, 0, 577, 0, 578, 0, 579, 0, 0, 580, 0, - 0, 581, 0, 582, 583, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 587, 0, 0, 588, 0, - 0, 589, 0, 0, 590, 0, 0, 591, 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, 593, 0, 0, 0, 594, 0, 0, 0, 0, 0, 595, 0, 0, 0, - 596, 0, 0, 597, 0, 598, 0, 599, 0, 0, 600, 601, 0, 602, 0, 0, 603, 0, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, - 606, 0, 0, 0, 0, 607, 0, 0, 608, 0, 0, 609, 0, 610, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 612, 0, 613, 0, 0, 0, 614, - 0, 0, 615, 0, 616, 617, 0, 618, 0, 619, 0, 0, 0, 0, 620, 0, 0, 621, 0, 0, 622, 0, 623, 0, 0, 0, 624, 0, 625, 0, 0, 0, - 0, 0, 0, 0, 626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 627, 0, 628, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 631, 632, 0, 633, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 0, 0, 0, 0, - 0, 0, 635, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 638, 639, 0, 640, 0, 0, 0, 0, 0, 0, 641, 0, 0, - 0, 642, 0, 643, 0, 0, 0, 644, 0, 0, 0, 645, 0, 0, 0, 646, 0, 0, 647, 0, 0, 0, 0, 648, 0, 649, 0, 0, 650, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 651, 0, 0, 0, 0, 0, 0, 0, 652, 0, 0, 0, 653, 0, 0, 654, 0, 655, 0, 0, 0, 0, 0, 0, 0, - 0, 656, 0, 0, 0, 0, 0, 0, 657, 0, 0, 658, 0, 659, 660, 0, 661, 0, 0, 662, 0, 0, 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, 668, 0, 0, - 669, 0, 0, 670, 0, 671, 0, 0, 0, 672, 0, 673, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, 678, 0, 679, 0, 0, - 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 681, 682, 0, 683, 0, 0, 0, 0, 0, 0, 684, 0, 0, 685, 0, 686, 687, 0, 688, 0, - 0, 689, 0, 0, 0, 0, 690, 0, 0, 0, 691, 0, 0, 692, 0, 0, 693, 0, 0, 694, 0, 695, 0, 0, 696, 0, 0, 0, 0, 0, 0, 697, - 0, 0, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, 701, 0, 702, 0, 703, 0, 0, 704, - 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 706, 0, 0, 0, 707, 0, 0, 0, 0, 0, 708, 0, 0, 0, 709, 0, 0, 710, 0, 711, 0, 712, - 0, 0, 713, 714, 0, 715, 0, 0, 716, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 719, 0, 0, 0, 0, 720, 0, 0, - 721, 0, 0, 722, 0, 723, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 726, 0, 0, 727, 0, 728, 0, 729, 0, - 730, 0, 731, 0, 0, 0, 0, 732, 0, 0, 733, 734, 0, 735, 0, 736, 0, 0, 0, 0, 737, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, - 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 740, 741, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 744, 0, - 0, 0, 0, 0, 745, 0, 0, 746, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 749, 0, 0, 750, - 0, 751, 752, 0, 753, 0, 0, 754, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 756, 0, 0, 757, 0, 758, 759, 0, 760, 0, 0, 761, 0, - 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 764, 0, 765, 0, 0, 0, 0, 766, 0, 0, 767, 768, 0, 769, 0, 770, - 0, 0, 0, 0, 771, 0, 0, 0, 0, 772, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 775, 0, 0, 0, 0, 0, - 0, 0, 0, 776, 0, 0, 0, 0, 0, 777, 778, 0, 779, 0, 0, 0, 0, 0, 0, 780, 0, 0, 781, 0, 0, 782, 0, 783, 0, 0, 0, 784, - 0, 785, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 787, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 790, 0, 791, 0, 0, 0, 0, 0, 0, 792, 0, 793, 0, - 794, 0, 0, 795, 0, 0, 796, 0, 797, 0, 798, 0, 799, 800, 0, 801, 0, 802, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 0, 805, 0, 0, 806, 0, 807, 0, 0, 0, 0, 0, 0, 0, 808, 0, 0, 0, - 0, 0, 0, 0, 809, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 811, 0, 0, 0, 0, 0, 812, 0, 0, 0, 813, 0, 814, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 816, 0, 0, 0, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 818, 0, 819, 0, 820, 0, 0, 0, 821, 0, 0, 822, 0, 823, 0, 0, 824, 0, 825, 0, 0, 0, 826, 0, 0, - 0, 0, 827, 0, 0, 0, 828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 830, 0, 0, 0, 0, 831, 0, 0, 0, 0, 0, - 832, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 0, 0, 0, 834, 0, 0, 0, 0, 0, 835, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, - 0, 837, 0, 0, 0, 838, 0, 0, 0, 0, 839, 840, 0, 0, 0, 841, 842, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 843, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845, 0, 846, 0, 847, 0, 0, 848, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 849, 0, 0, 0, 850, 0, 851, 0, 852, 0, 0, 853, 0, 854, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, - 0, 0, 0, 858, 0, 0, 859, 0, 860, 0, 0, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 862, 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, 0, 864, 0, 0, 865, 0, 0, 866, 0, 867, 868, 0, 0, 0, 0, 0, 0, 0, 869, 0, 0, - 0, 870, 0, 0, 0, 871, 0, 0, 872, 0, 873, 0, 874, 0, 875, 0, 0, 876, 0, 0, 877, 0, 878, 879, 0, 0, 0, 0, 0, 0, 880, 0, - 0, 0, 0, 0, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 883, 0, 0, 0, 0, 0, 0, 0, 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, 886, 0, 0, 887, 0, 0, 0, 888, - 0, 889, 0, 0, 0, 0, 890, 0, 0, 0, 891, 0, 0, 0, 892, 893, 0, 0, 894, 0, 895, 0, 0, 0, 0, 0, 0, 896, 0, 0, 0, 897, - 898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, 0, 0, 0, 900, 0, 0, 901, 0, 0, 0, 902, 0, 903, 0, 904, 905, 0, 0, 906, 0, - 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 908, 0, 0, 0, 909, 0, 0, 910, 0, 911, 0, 0, 912, 0, 0, 913, 0, 914, 915, 0, 0, - 916, 0, 0, 917, 0, 0, 0, 918, 0, 919, 0, 920, 0, 0, 0, 0, 921, 922, 0, 923, 0, 0, 924, 0, 0, 0, 0, 925, 0, 926, 0, 927, - 0, 928, 0, 0, 0, 0, 929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 931, 0, 932, 0, 0, 933, 0, 0, 0, 934, 0, 935, 0, 0, 0, 0, 936, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0216[64] = { + 0x0032300004088111ull, 0x0000410000200000ull, 0x2201509000220000ull, 0x2828095128200250ull, + 0x1A000094012802A0ull, 0x800008D000128101ull, 0x08D0011A002AC246ull, 0x10302A02090004A0ull, + 0x09081340052A0000ull, 0x08A1048861828692ull, 0xA249249C12C29292ull, 0x2444044549495500ull, + 0x0A90494C06149444ull, 0x409089502528C415ull, 0x00A9C08012542401ull, 0x2A4A009058120125ull, + 0x2A02000482050011ull, 0x06425408004A0C81ull, 0x1000526940115425ull, 0x0091018444110208ull, + 0xA484894A4A144841ull, 0x440044A482524244ull, 0x90414A8840840410ull, 0x0409480425A40894ull, + 0x04025109690212D2ull, 0x205642A55556152Aull, 0x4B48109690204A40ull, 0x000101452425A408ull, + 0x4112D08225800280ull, 0x0425A40B408225A0ull, 0x00108109690212D2ull, 0x2880841810810201ull, + 0x402D402402000234ull, 0x4410280250220108ull, 0x212CA91044084A2Aull, 0x4444084B2A441110ull, + 0x04292110212CA910ull, 0x4AA4440692202000ull, 0x104440924910081Aull, 0x8A04292110212CA9ull, + 0x50000010145242B4ull, 0x02000000B0004200ull, 0x1284888A20582014ull, 0x0109690201488080ull, + 0x00080A2924404010ull, 0x5A40B0402C001400ull, 0x9510204081292442ull, 0x2110212CA9104440ull, + 0x2010AC8554820429ull, 0x9020109048086040ull, 0xAC8504084B481096ull, 0x8A48160805000610ull, + 0x502C001400000202ull, 0x101481000042B549ull, 0x01024000A2081010ull, 0x0424004422948A80ull, + 0x00018C2202104081ull, 0x14A8800025400022ull, 0x0000214804010100ull, 0x40D2552220349101ull, + 0x8910020100400080ull, 0x4D4488018814C442ull, 0xA84B0A8934948801ull, 0x0042894000020042ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0216[64] = { + 1u, 12u, 15u, 24u, 39u, 51u, 61u, 78u, 90u, 102u, 120u, 143u, 161u, 180u, 199u, 214u, + 231u, 242u, 257u, 274u, 286u, 306u, 322u, 336u, 352u, 370u, 395u, 413u, 427u, 442u, 460u, 476u, + 488u, 501u, 513u, 532u, 549u, 566u, 581u, 596u, 615u, 629u, 635u, 651u, 664u, 675u, 689u, 705u, + 721u, 739u, 751u, 771u, 785u, 794u, 809u, 818u, 832u, 843u, 855u, 862u, 881u, 889u, 907u, 928u, }; void recomp_unit_0216_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +50,25 @@ void recomp_unit_0216_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B64000u; - entry_id = (entry_delta < 16348u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0216[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16348u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0216[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0216[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B64000; @@ -1270,7 +1177,17 @@ L_08B641A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B641B8: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -1393,7 +1310,6 @@ L_08B642F4: } L_08B64310: aot_gpr_31 = (0x08B64318u); - // nop ctx.pc = 0x08B7330Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B64318: @@ -1403,7 +1319,17 @@ L_08B64318: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64324: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1483,10 +1409,19 @@ L_08B643AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B643CC: aot_gpr_31 = (0x08B643D4u); - // nop ctx.pc = 0x08B7335Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B643D4: @@ -1503,7 +1438,6 @@ L_08B643D4: } L_08B643EC: aot_gpr_31 = (0x08B643F4u); - // nop ctx.pc = 0x08B7336Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B643F4: @@ -1546,7 +1480,6 @@ L_08B64424: } L_08B6444C: aot_gpr_31 = (0x08B64454u); - // nop ctx.pc = 0x08B7332Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B64454: @@ -1556,7 +1489,17 @@ L_08B64454: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64460: aot_gpr_5 = (2236u << 16u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(22080))); @@ -1575,7 +1518,6 @@ L_08B64460: } L_08B64488: aot_gpr_31 = (0x08B64490u); - // nop ctx.pc = 0x08B7334Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B64490: @@ -1585,7 +1527,17 @@ L_08B64490: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6449C: ctx.gpr[14] = (2236u << 16u); ctx.gpr[13] = (aot_mem.aot_direct_load32(ctx.gpr[14] + static_cast(22080))); @@ -1612,7 +1564,6 @@ L_08B6449C: } L_08B644E4: aot_gpr_31 = (0x08B644ECu); - // nop ctx.pc = 0x08B73304u; AOT_REGCACHE_SYNC_OUT(); return; L_08B644EC: @@ -1626,7 +1577,17 @@ L_08B644F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64500: aot_gpr_7 = (2236u << 16u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(22080))); @@ -1656,7 +1617,6 @@ L_08B64520: } L_08B6453C: aot_gpr_31 = (0x08B64544u); - // nop ctx.pc = 0x08B7335Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B64544: @@ -1666,7 +1626,17 @@ L_08B64544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64550: ctx.gpr[11] = (2236u << 16u); ctx.gpr[12] = (aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(22080))); @@ -1691,7 +1661,6 @@ L_08B64550: } L_08B64590: aot_gpr_31 = (0x08B64598u); - // nop ctx.pc = 0x08B7333Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B64598: @@ -1705,7 +1674,17 @@ L_08B6459C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B645AC: ctx.gpr[24] = (2236u << 16u); ctx.gpr[13] = (aot_mem.aot_direct_load32(ctx.gpr[24] + static_cast(22080))); @@ -1734,7 +1713,6 @@ L_08B645AC: } L_08B645FC: aot_gpr_31 = (0x08B64604u); - // nop ctx.pc = 0x08B732DCu; AOT_REGCACHE_SYNC_OUT(); return; L_08B64604: @@ -1748,7 +1726,17 @@ L_08B64608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64618: ctx.gpr[3] = (2236u << 16u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[3] + static_cast(22080))); @@ -1774,10 +1762,19 @@ L_08B6463C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64644: aot_gpr_31 = (0x08B6464Cu); - // nop ctx.pc = 0x08B7331Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B6464C: @@ -1803,7 +1800,6 @@ L_08B64654: } L_08B64684: aot_gpr_31 = (0x08B6468Cu); - // nop ctx.pc = 0x08B7337Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B6468C: @@ -1817,7 +1813,17 @@ L_08B64690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B646A0: aot_gpr_6 = (2236u << 16u); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(22080))); @@ -1838,7 +1844,6 @@ L_08B646A0: } L_08B646D0: aot_gpr_31 = (0x08B646D8u); - // nop ctx.pc = 0x08B73374u; AOT_REGCACHE_SYNC_OUT(); return; L_08B646D8: @@ -1852,7 +1857,17 @@ L_08B646DC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B646EC: aot_gpr_5 = (2236u << 16u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(22080))); @@ -1871,7 +1886,6 @@ L_08B646EC: } L_08B64714: aot_gpr_31 = (0x08B6471Cu); - // nop ctx.pc = 0x08B732F4u; AOT_REGCACHE_SYNC_OUT(); return; L_08B6471C: @@ -1881,7 +1895,17 @@ L_08B6471C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64728: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(24), ctx.gpr[18]); @@ -1973,7 +1997,17 @@ L_08B647D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B647F0: ctx.gpr[12] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); ctx.gpr[10] = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(1))); @@ -2057,7 +2091,17 @@ L_08B648A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B648B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-896)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(776), ctx.gpr[20]); @@ -2402,7 +2446,17 @@ L_08B64AFC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64B20: { const bool branch_taken = aot_gpr_4 == aot_gpr_5; aot_gpr_4 = (aot_gpr_4 + static_cast(1)); @@ -2437,7 +2491,17 @@ L_08B64B40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64B4C: ctx.gpr[10] = (static_cast(static_cast(ctx.gpr[10]) >> 28u)); { const bool branch_taken = ctx.gpr[20] == ctx.gpr[10]; @@ -2462,7 +2526,17 @@ L_08B64B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64B6C: ctx.gpr[2] = (ctx.gpr[2] + static_cast(1)); { const bool branch_taken = ctx.gpr[2] == 0u; @@ -2502,7 +2576,17 @@ L_08B64B98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64BA8: aot_gpr_6 = (aot_gpr_6 + static_cast(4)); ctx.gpr[24] = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); @@ -2539,7 +2623,17 @@ L_08B64BE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64BF4: ctx.gpr[10] = (aot_mem.aot_direct_load16(ctx.gpr[8] + static_cast(0))); ctx.gpr[2] = (ctx.gpr[2] + ctx.gpr[8]); @@ -2549,7 +2643,17 @@ L_08B64BF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64C08: ctx.gpr[2] = (ctx.gpr[24] >> (ctx.gpr[25] & 31u)); ctx.gpr[25] = (ctx.gpr[25] - ctx.gpr[12]); @@ -2743,7 +2847,17 @@ L_08B64D60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64D68: aot_mem.aot_direct_store32(ctx.gpr[20] + static_cast(48), 0u); { const bool branch_taken = ctx.gpr[8] != 0u; @@ -2839,7 +2953,6 @@ L_08B64E00: L_08B64E28: ctx.gpr[9] = (std::rotr(ctx.gpr[9], 16)); { const bool branch_taken = ctx.gpr[9] != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B64E58; } @@ -2918,7 +3031,17 @@ L_08B64EC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64ECC: { const bool branch_taken = aot_gpr_7 == 0u; ctx.gpr[3] = (aot_gpr_6 + 0u); @@ -2983,7 +3106,17 @@ L_08B64F44: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64F50: ctx.gpr[2] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (aot_gpr_4 + 0u); @@ -3006,7 +3139,17 @@ L_08B64F70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64F78: aot_gpr_6 = (ctx.gpr[3] + static_cast(62)); aot_gpr_4 = (aot_gpr_6 & 255u); @@ -3068,7 +3211,17 @@ L_08B64FEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B64FF4: ctx.gpr[3] = (0u + static_cast(2048)); { const bool branch_taken = aot_gpr_6 != 0u; @@ -3167,7 +3320,17 @@ L_08B650C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B650E4: aot_gpr_31 = (0x08B650ECu); aot_gpr_4 = (aot_gpr_29 + static_cast(20)); @@ -3259,7 +3422,17 @@ L_08B6518C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B651A8: aot_gpr_31 = (0x08B651B0u); aot_gpr_4 = (aot_gpr_29 + static_cast(20)); @@ -3349,7 +3522,17 @@ L_08B65240: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65250: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[3] = (aot_gpr_5 + 0u); @@ -3368,7 +3551,6 @@ L_08B65250: } L_08B65278: aot_gpr_31 = (0x08B65280u); - // nop ctx.pc = 0x08B72F1Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B65280: @@ -3382,7 +3564,6 @@ L_08B65280: } L_08B6528C: aot_gpr_31 = (0x08B65294u); - // nop ctx.pc = 0x08B72F2Cu; AOT_REGCACHE_SYNC_OUT(); return; L_08B65294: @@ -3395,7 +3576,17 @@ L_08B65298: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B652A4: aot_gpr_5 = (ctx.gpr[16] + 0u); aot_gpr_31 = (0x08B652B0u); @@ -3486,7 +3677,6 @@ L_08B65378: aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); aot_gpr_7 = (aot_gpr_6 < ctx.gpr[16] ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B653A0; } @@ -3518,7 +3708,17 @@ L_08B653A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B653C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); @@ -3573,7 +3773,17 @@ L_08B6542C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65438: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (ctx.gpr[28] + static_cast(-32752)); @@ -3582,7 +3792,6 @@ L_08B65438: goto L_08B65448; L_08B65448: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B65478; } @@ -3646,7 +3855,17 @@ L_08B654A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B654AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3685,7 +3904,6 @@ L_08B654DC: L_08B654E8: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B654FC; } @@ -3693,7 +3911,6 @@ L_08B654E8: } L_08B654F4: aot_gpr_31 = (0x08B654FCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B654FCu) goto L_08B654FC; AOT_REGCACHE_SYNC_OUT(); return; L_08B654FC: @@ -3703,7 +3920,17 @@ L_08B654FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65508: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -3742,7 +3969,6 @@ L_08B65538: L_08B65544: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B65558; } @@ -3750,7 +3976,6 @@ L_08B65544: } L_08B65550: aot_gpr_31 = (0x08B65558u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B65558u) goto L_08B65558; AOT_REGCACHE_SYNC_OUT(); return; L_08B65558: @@ -3760,7 +3985,17 @@ L_08B65558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65564: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3803,7 +4038,17 @@ L_08B655A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B655B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (aot_gpr_5 | 0u); @@ -3909,7 +4154,6 @@ L_08B6569C: } L_08B656A4: { const bool branch_taken = aot_gpr_5 == ctx.gpr[18]; - // nop if (branch_taken) { goto L_08B656C0; } @@ -3938,7 +4182,17 @@ L_08B656C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B656D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -3981,7 +4235,17 @@ L_08B6571C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6572C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3995,7 +4259,6 @@ L_08B6572C: L_08B65748: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65760; } @@ -4032,7 +4295,17 @@ L_08B65774: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65788: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4042,7 +4315,6 @@ L_08B65788: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B657CC; } @@ -4059,13 +4331,11 @@ L_08B657AC: } L_08B657B8: aot_gpr_31 = (0x08B657C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B657C0u) goto L_08B657C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B657C0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B657AC; } @@ -4085,7 +4355,17 @@ L_08B657CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B657E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4099,7 +4379,6 @@ L_08B657E8: L_08B65804: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B6581C; } @@ -4136,7 +4415,17 @@ L_08B65830: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65844: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4150,7 +4439,6 @@ L_08B65844: L_08B65860: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65878; } @@ -4187,7 +4475,17 @@ L_08B6588C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B658A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -4197,7 +4495,6 @@ L_08B658A0: AOT_REGCACHE_SYNC_OUT(); return; L_08B658B0: aot_gpr_31 = (0x08B658B8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0212_entry, 212u, 919u, 0x08B576C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B658B8u) goto L_08B658B8; AOT_REGCACHE_SYNC_OUT(); return; L_08B658B8: @@ -4207,7 +4504,17 @@ L_08B658B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B658C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[16]); @@ -4236,7 +4543,6 @@ L_08B658E8: } L_08B65904: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B65928; } @@ -4244,12 +4550,10 @@ L_08B65904: } L_08B6590C: aot_gpr_31 = (0x08B65914u); - // nop goto L_08B659F4; L_08B65914: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(48))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B65928; } @@ -4257,12 +4561,10 @@ L_08B65914: } L_08B65920: aot_gpr_31 = (0x08B65928u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B65928u) goto L_08B65928; AOT_REGCACHE_SYNC_OUT(); return; L_08B65928: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B65970; } @@ -4292,7 +4594,6 @@ L_08B65948: } L_08B65950: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B65970; } @@ -4300,7 +4601,6 @@ L_08B65950: } L_08B65958: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B65970; } @@ -4308,7 +4608,6 @@ L_08B65958: } L_08B65960: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B65970; } @@ -4316,12 +4615,10 @@ L_08B65960: } L_08B65968: aot_gpr_31 = (0x08B65970u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B65970u) goto L_08B65970; AOT_REGCACHE_SYNC_OUT(); return; L_08B65970: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B6599C; } @@ -4329,7 +4626,6 @@ L_08B65970: } L_08B65978: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B6599C; } @@ -4342,7 +4638,6 @@ L_08B65980: L_08B65988: ctx.gpr[19] = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(32))); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B6599C; } @@ -4382,7 +4677,6 @@ L_08B659C4: goto L_08B659C8; L_08B659C8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B659D8; } @@ -4407,7 +4701,17 @@ L_08B659D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B659F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -4417,7 +4721,6 @@ L_08B659F4: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B65A38; } @@ -4434,13 +4737,11 @@ L_08B65A18: } L_08B65A24: aot_gpr_31 = (0x08B65A2Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B65A2Cu) goto L_08B65A2C; AOT_REGCACHE_SYNC_OUT(); return; L_08B65A2C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B65A18; } @@ -4460,7 +4761,17 @@ L_08B65A38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65A54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4474,7 +4785,6 @@ L_08B65A54: L_08B65A70: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65A88; } @@ -4511,7 +4821,17 @@ L_08B65A9C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65AB0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4525,7 +4845,6 @@ L_08B65AB0: L_08B65ACC: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65AE4; } @@ -4562,7 +4881,17 @@ L_08B65AF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65B0C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4576,7 +4905,6 @@ L_08B65B0C: L_08B65B28: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65B40; } @@ -4613,7 +4941,17 @@ L_08B65B54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65B68: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -4630,7 +4968,6 @@ L_08B65B74: } L_08B65B80: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B65B98; } @@ -4695,11 +5032,20 @@ L_08B65BC0: goto L_08B65C1C; L_08B65C1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65C24: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 12u); @@ -4714,7 +5060,6 @@ L_08B65C24: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B65C60; } @@ -4725,15 +5070,23 @@ L_08B65C5C: goto L_08B65C60; L_08B65C60: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65C68: aot_gpr_6 = (static_cast(static_cast(aot_gpr_5) >> 8u)); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_08B65CB0; } @@ -4743,7 +5096,6 @@ L_08B65C74: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B65CB0; } @@ -4785,15 +5137,23 @@ L_08B65CB8: goto L_08B65CBC; L_08B65CBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65CC4: aot_gpr_6 = (static_cast(static_cast(aot_gpr_5) >> 8u)); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_08B65D14; } @@ -4803,7 +5163,6 @@ L_08B65CD0: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B65D14; } @@ -4815,7 +5174,6 @@ L_08B65CE0: aot_gpr_7 = (aot_gpr_7 + aot_gpr_6); aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B65D1C; } @@ -4847,15 +5205,23 @@ L_08B65D1C: goto L_08B65D20; L_08B65D20: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65D28: aot_gpr_6 = (static_cast(static_cast(aot_gpr_5) >> 8u)); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_08B65D78; } @@ -4865,7 +5231,6 @@ L_08B65D34: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B65D78; } @@ -4877,7 +5242,6 @@ L_08B65D44: aot_gpr_7 = (aot_gpr_7 + aot_gpr_6); aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B65D80; } @@ -4909,11 +5273,20 @@ L_08B65D80: goto L_08B65D84; L_08B65D84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65D8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4927,7 +5300,6 @@ L_08B65D8C: L_08B65DA8: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65DC0; } @@ -4964,7 +5336,17 @@ L_08B65DD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65DE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4978,7 +5360,6 @@ L_08B65DE8: L_08B65E04: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65E1C; } @@ -5015,7 +5396,17 @@ L_08B65E30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65E44: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5029,7 +5420,6 @@ L_08B65E44: L_08B65E60: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B65E78; } @@ -5066,7 +5456,17 @@ L_08B65E8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65EA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5086,7 +5486,17 @@ L_08B65EBC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65ED0: aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); ctx.gpr[8] = (0u | 10u); @@ -5099,7 +5509,6 @@ L_08B65ED0: aot_gpr_7 = (aot_gpr_7 < static_cast(1) ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B65F24; } @@ -5127,7 +5536,17 @@ L_08B65F24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B65F40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -5142,7 +5561,6 @@ L_08B65F5C: ctx.gpr[9] = (ctx.gpr[8] < static_cast(1) ? 1u : 0u); ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08B65FDC; } @@ -5168,7 +5586,6 @@ L_08B65F90: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[8] + static_cast(4))); aot_fpr_13 = aot_fpr_13 + aot_fpr_14; ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[9] = (ctx.gpr[8] | 0u); goto L_08B65FBC; @@ -5205,7 +5622,6 @@ L_08B65FDC: } L_08B65FEC: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B66010; } @@ -5237,7 +5653,17 @@ L_08B66014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66024: ctx.gpr[10] = (ctx.gpr[9] | 0u); ctx.gpr[9] = (aot_gpr_5 & 65535u); @@ -5278,7 +5704,6 @@ L_08B66064: L_08B66088: aot_gpr_4 = (aot_mem.aot_direct_load16(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 == ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B660C0; } @@ -5320,11 +5745,20 @@ L_08B660C8: goto L_08B660CC; L_08B660CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B660D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18]}; @@ -5340,7 +5774,6 @@ L_08B660F8: aot_gpr_5 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B66144; } @@ -5389,7 +5822,17 @@ L_08B66154: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66170: if (aot_gpr_7 == 0u) { aot_gpr_7 = (aot_mem.aot_direct_load16(aot_gpr_6 + static_cast(12))); @@ -5423,7 +5866,17 @@ L_08B661AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B661B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5443,7 +5896,6 @@ L_08B661D0: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6620C; } @@ -5453,7 +5905,6 @@ L_08B661E8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6620C; } @@ -5462,7 +5913,6 @@ L_08B661E8: L_08B661F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6620C; } @@ -5470,7 +5920,6 @@ L_08B661F8: } L_08B66204: aot_gpr_31 = (0x08B6620Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6620Cu) goto L_08B6620C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6620C: @@ -5513,7 +5962,17 @@ L_08B66238: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6624C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5543,7 +6002,6 @@ L_08B66278: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B662B4; } @@ -5553,7 +6011,6 @@ L_08B66290: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B662B4; } @@ -5562,7 +6019,6 @@ L_08B66290: L_08B662A0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B662B4; } @@ -5570,7 +6026,6 @@ L_08B662A0: } L_08B662AC: aot_gpr_31 = (0x08B662B4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B662B4u) goto L_08B662B4; AOT_REGCACHE_SYNC_OUT(); return; L_08B662B4: @@ -5615,7 +6070,17 @@ L_08B662E0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B662F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5655,7 +6120,6 @@ L_08B66330: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6636C; } @@ -5665,7 +6129,6 @@ L_08B66348: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6636C; } @@ -5674,7 +6137,6 @@ L_08B66348: L_08B66358: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6636C; } @@ -5682,7 +6144,6 @@ L_08B66358: } L_08B66364: aot_gpr_31 = (0x08B6636Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6636Cu) goto L_08B6636C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6636C: @@ -5727,7 +6188,17 @@ L_08B66398: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B663AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5777,7 +6248,6 @@ L_08B663F8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66434; } @@ -5787,7 +6257,6 @@ L_08B66410: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66434; } @@ -5796,7 +6265,6 @@ L_08B66410: L_08B66420: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66434; } @@ -5804,7 +6272,6 @@ L_08B66420: } L_08B6642C: aot_gpr_31 = (0x08B66434u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B66434u) goto L_08B66434; AOT_REGCACHE_SYNC_OUT(); return; L_08B66434: @@ -5849,7 +6316,17 @@ L_08B66460: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66474: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -5889,7 +6366,6 @@ L_08B664B4: L_08B664C0: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B664D4; } @@ -5912,7 +6388,17 @@ L_08B664D4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B664E8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -5975,7 +6461,6 @@ L_08B66570: } L_08B6657C: aot_gpr_31 = (0x08B66584u); - // nop goto L_08B65438; L_08B66584: ctx.gpr[21] = (ctx.gpr[2] | 0u); @@ -6019,12 +6504,10 @@ L_08B665C8: } L_08B665D4: aot_gpr_31 = (0x08B665DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B665DCu) goto L_08B665DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B665DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B66610; } @@ -6055,7 +6538,6 @@ L_08B665F8: } L_08B66604: aot_gpr_31 = (0x08B6660Cu); - // nop goto L_08B65438; L_08B6660C: ctx.gpr[21] = (ctx.gpr[2] | 0u); @@ -6085,7 +6567,17 @@ L_08B6662C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -6132,7 +6624,17 @@ L_08B66690: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6669C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6172,7 +6674,6 @@ L_08B666D8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66714; } @@ -6182,7 +6683,6 @@ L_08B666F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66714; } @@ -6191,7 +6691,6 @@ L_08B666F0: L_08B66700: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66714; } @@ -6199,7 +6698,6 @@ L_08B66700: } L_08B6670C: aot_gpr_31 = (0x08B66714u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B66714u) goto L_08B66714; AOT_REGCACHE_SYNC_OUT(); return; L_08B66714: @@ -6244,7 +6742,17 @@ L_08B66740: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66754: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6284,7 +6792,6 @@ L_08B66794: L_08B667A0: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B667B4; } @@ -6307,7 +6814,17 @@ L_08B667B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B667C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6348,7 +6865,6 @@ L_08B667FC: goto L_08B66808; L_08B66808: aot_gpr_31 = (0x08B66810u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B66810u) goto L_08B66810; AOT_REGCACHE_SYNC_OUT(); return; L_08B66810: @@ -6356,7 +6872,6 @@ L_08B66810: goto L_08B66814; L_08B66814: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66824; } @@ -6379,7 +6894,17 @@ L_08B66824: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66838: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -6396,7 +6921,6 @@ L_08B66844: } L_08B66850: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B66868; } @@ -6462,11 +6986,20 @@ L_08B66890: goto L_08B668F0; L_08B668F0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B668F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_6 = (static_cast(static_cast(aot_gpr_5) >> 8u)); @@ -6489,7 +7022,17 @@ L_08B66924: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66938: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 544u); @@ -6504,7 +7047,6 @@ L_08B66938: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B66974; } @@ -6515,11 +7057,20 @@ L_08B66970: goto L_08B66974; L_08B66974: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6697C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_7 = (static_cast(static_cast(aot_gpr_5) >> 8u)); @@ -6546,7 +7097,6 @@ L_08B6697C: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B66A08; } @@ -6561,7 +7111,6 @@ L_08B669E4: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B669E4; } @@ -6569,11 +7118,20 @@ L_08B669E4: } L_08B66A08: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66A10: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 544u); @@ -6583,7 +7141,6 @@ L_08B66A10: aot_gpr_5 = (ctx.lo); aot_gpr_6 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B66A4C; } @@ -6606,11 +7163,20 @@ L_08B66A4C: goto L_08B66A50; L_08B66A50: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66A58: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 544u); @@ -6618,16 +7184,24 @@ L_08B66A58: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66A74: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B66ADC; } @@ -6682,7 +7256,6 @@ L_08B66AC8: } L_08B66ADC: aot_gpr_31 = (0x08B66AE4u); - // nop goto L_08B658A0; L_08B66AE4: aot_gpr_31 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(8))); @@ -6691,7 +7264,17 @@ L_08B66AE4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66AF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[16]); @@ -6756,7 +7339,17 @@ L_08B66B60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66B84: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6770,7 +7363,6 @@ L_08B66B84: L_08B66BA0: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B66BB8; } @@ -6807,7 +7399,17 @@ L_08B66BCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66BE0: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -6824,7 +7426,17 @@ L_08B66BE0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66C10: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[8] = (aot_gpr_5 | 0u); @@ -6871,7 +7483,17 @@ L_08B66C68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66C74: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -6888,7 +7510,6 @@ L_08B66C80: } L_08B66C8C: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B66CA4; } @@ -6953,11 +7574,20 @@ L_08B66CCC: goto L_08B66D28; L_08B66D28: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66D30: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 48u); @@ -6972,7 +7602,6 @@ L_08B66D30: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B66D6C; } @@ -6983,11 +7612,20 @@ L_08B66D68: goto L_08B66D6C; L_08B66D6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66D74: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 48u); @@ -6997,7 +7635,6 @@ L_08B66D74: aot_gpr_5 = (ctx.lo); aot_gpr_6 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B66DB0; } @@ -7020,11 +7657,20 @@ L_08B66DB0: goto L_08B66DB4; L_08B66DB4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66DBC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7038,7 +7684,6 @@ L_08B66DBC: L_08B66DD8: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B66DF0; } @@ -7075,7 +7720,17 @@ L_08B66E04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66E18: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7103,7 +7758,6 @@ L_08B66E34: L_08B66E40: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B66E54; } @@ -7111,7 +7765,6 @@ L_08B66E40: } L_08B66E4C: aot_gpr_31 = (0x08B66E54u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B66E54u) goto L_08B66E54; AOT_REGCACHE_SYNC_OUT(); return; L_08B66E54: @@ -7121,7 +7774,17 @@ L_08B66E54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66E60: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 544u); @@ -7129,11 +7792,20 @@ L_08B66E60: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66E7C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 96u); @@ -7141,11 +7813,20 @@ L_08B66E7C: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66E98: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 96u); @@ -7153,11 +7834,20 @@ L_08B66E98: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66EB4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 96u); @@ -7165,11 +7855,20 @@ L_08B66EB4: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66ED0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -7182,7 +7881,6 @@ L_08B66ED0: } L_08B66EE0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B66EF0; } @@ -7190,7 +7888,6 @@ L_08B66EE0: } L_08B66EE8: aot_gpr_31 = (0x08B66EF0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B66EF0u) goto L_08B66EF0; AOT_REGCACHE_SYNC_OUT(); return; L_08B66EF0: @@ -7200,7 +7897,17 @@ L_08B66EF0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66EFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7240,7 +7947,6 @@ L_08B66F38: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66F74; } @@ -7250,7 +7956,6 @@ L_08B66F50: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66F74; } @@ -7259,7 +7964,6 @@ L_08B66F50: L_08B66F60: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B66F74; } @@ -7267,7 +7971,6 @@ L_08B66F60: } L_08B66F6C: aot_gpr_31 = (0x08B66F74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B66F74u) goto L_08B66F74; AOT_REGCACHE_SYNC_OUT(); return; L_08B66F74: @@ -7312,7 +8015,17 @@ L_08B66FA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B66FB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -7352,7 +8065,6 @@ L_08B66FF4: L_08B67000: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B67014; } @@ -7375,7 +8087,17 @@ L_08B67014: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67028: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -7412,7 +8134,6 @@ L_08B6705C: } L_08B67068: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B67080; } @@ -7420,7 +8141,6 @@ L_08B67068: } L_08B67070: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B67080; } @@ -7428,7 +8148,6 @@ L_08B67070: } L_08B67078: aot_gpr_31 = (0x08B67080u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B67080u) goto L_08B67080; AOT_REGCACHE_SYNC_OUT(); return; L_08B67080: @@ -7460,7 +8179,6 @@ L_08B670A8: goto L_08B670AC; L_08B670AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B670BC; } @@ -7483,7 +8201,17 @@ L_08B670BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B670D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[16]); @@ -7593,7 +8321,17 @@ L_08B671B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B671D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7607,7 +8345,6 @@ L_08B671D4: L_08B671F0: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B67208; } @@ -7644,7 +8381,17 @@ L_08B6721C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67230: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7658,7 +8405,6 @@ L_08B67230: L_08B6724C: ctx.gpr[16] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B67264; } @@ -7695,7 +8441,17 @@ L_08B67278: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6728C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7747,7 +8503,6 @@ L_08B672E8: goto L_08B672EC; L_08B672EC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B672FC; } @@ -7770,7 +8525,17 @@ L_08B672FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67310: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -7805,11 +8570,20 @@ L_08B67328: goto L_08B67360; L_08B67360: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67368: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 3344u); @@ -7819,7 +8593,6 @@ L_08B67368: aot_gpr_5 = (ctx.lo); aot_gpr_6 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B673A4; } @@ -7842,11 +8615,20 @@ L_08B673A4: goto L_08B673A8; L_08B673A8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B673B0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 352u); @@ -7854,11 +8636,20 @@ L_08B673B0: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B673CC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -7875,7 +8666,6 @@ L_08B673D8: } L_08B673E4: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B673FC; } @@ -7942,11 +8732,20 @@ L_08B67424: goto L_08B67488; L_08B67488: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67490: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 352u); @@ -7961,7 +8760,6 @@ L_08B67490: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B674CC; } @@ -7972,11 +8770,20 @@ L_08B674C8: goto L_08B674CC; L_08B674CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B674D4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -8034,7 +8841,6 @@ L_08B67520: goto L_08B67528; L_08B67528: aot_gpr_31 = (0x08B67530u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B67530u) goto L_08B67530; AOT_REGCACHE_SYNC_OUT(); return; L_08B67530: @@ -8042,7 +8848,6 @@ L_08B67530: goto L_08B67534; L_08B67534: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B67544; } @@ -8065,7 +8870,17 @@ L_08B67544: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67558: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_31); @@ -8084,7 +8899,6 @@ L_08B67558: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); ctx.gpr[9] = (aot_gpr_7 | 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B675F0; } @@ -8097,7 +8911,6 @@ L_08B675A0: ctx.gpr[10] = (ctx.gpr[10] < static_cast(1) ? 1u : 0u); ctx.gpr[10] = (ctx.gpr[10] & 255u); { const bool branch_taken = ctx.gpr[10] != 0u; - // nop if (branch_taken) { goto L_08B675D0; } @@ -8106,7 +8919,6 @@ L_08B675A0: L_08B675BC: ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[9] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08B675A0; } @@ -8114,7 +8926,6 @@ L_08B675BC: } L_08B675C8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B675F0; } @@ -8220,7 +9031,17 @@ L_08B676B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B676C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8228,7 +9049,6 @@ L_08B676C4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_31); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B67788; } @@ -8281,7 +9101,6 @@ L_08B6772C: L_08B6773C: aot_gpr_7 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B67788; } @@ -8289,7 +9108,6 @@ L_08B6773C: } L_08B67748: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B67774; } @@ -8324,7 +9142,6 @@ L_08B67774: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(0))); aot_gpr_7 = (aot_gpr_5 | 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B67748; } @@ -8338,7 +9155,17 @@ L_08B67788: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67798: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -8351,7 +9178,6 @@ L_08B67798: aot_gpr_7 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_31); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B67968; } @@ -8465,7 +9291,6 @@ L_08B678AC: ctx.gpr[10] = (aot_gpr_7 + ctx.gpr[11]); ctx.gpr[9] = (aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(0))); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B67904; } @@ -8530,7 +9355,6 @@ L_08B67914: } L_08B67958: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B67968; } @@ -8548,7 +9372,17 @@ L_08B67968: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67974: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -8589,13 +9423,11 @@ L_08B679CC: } L_08B679D4: aot_gpr_31 = (0x08B679DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B679DCu) goto L_08B679DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B679DC: aot_gpr_4 = (ctx.gpr[19] | 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B679CC; } @@ -8638,7 +9470,17 @@ L_08B67A20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67A40: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_4 = (2234u << 16u); @@ -8689,7 +9531,17 @@ L_08B67AA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67AB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -8752,7 +9604,6 @@ L_08B67B3C: } L_08B67B48: aot_gpr_31 = (0x08B67B50u); - // nop goto L_08B65438; L_08B67B50: ctx.gpr[21] = (ctx.gpr[2] | 0u); @@ -8796,12 +9647,10 @@ L_08B67B94: } L_08B67BA0: aot_gpr_31 = (0x08B67BA8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B67BA8u) goto L_08B67BA8; AOT_REGCACHE_SYNC_OUT(); return; L_08B67BA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B67BDC; } @@ -8832,7 +9681,6 @@ L_08B67BC4: } L_08B67BD0: aot_gpr_31 = (0x08B67BD8u); - // nop goto L_08B65438; L_08B67BD8: ctx.gpr[21] = (ctx.gpr[2] | 0u); @@ -8862,7 +9710,17 @@ L_08B67BF8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67C1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), ctx.gpr[16]); @@ -8977,7 +9835,6 @@ L_08B67D28: aot_gpr_4 = (ctx.gpr[17] | 0u); ctx.gpr[17] = (ctx.gpr[17] + ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B67D48; } @@ -8995,7 +9852,6 @@ L_08B67D3C: goto L_08B67D48; L_08B67D48: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B67DF8; } @@ -9091,7 +9947,6 @@ L_08B67DEC: goto L_08B67DF8; L_08B67DF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B67F18; } @@ -9275,7 +10130,17 @@ L_08B67F18: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67F44: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -9328,11 +10193,20 @@ L_08B67FAC: } L_08B67FBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67FC4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -9342,7 +10216,17 @@ L_08B67FC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B67FD8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[2] = (aot_gpr_4 | 0u); diff --git a/profiles/vcs/generated/generated_unit_0217.cpp b/profiles/vcs/generated/generated_unit_0217.cpp index 582c319..565d72a 100644 --- a/profiles/vcs/generated/generated_unit_0217.cpp +++ b/profiles/vcs/generated/generated_unit_0217.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0217[4096] = { - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 0, 6, 0, 7, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, - 0, 18, 0, 0, 19, 0, 0, 0, 0, 0, 20, 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, 27, 0, 28, 0, 0, 0, 0, 29, 0, 0, 30, 31, 0, 32, 0, 33, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 35, 0, 0, 36, 0, 37, 38, 0, 39, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 45, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 0, 0, 48, 0, 49, 50, 0, 51, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 54, 0, 55, 0, 0, 0, 56, 0, 0, 57, 0, 58, 59, 0, 60, 0, 61, 0, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 66, 0, 67, 0, 68, - 0, 69, 0, 0, 0, 0, 70, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 0, 0, 78, 0, 0, 79, 0, 80, 0, 81, 0, - 0, 82, 0, 83, 84, 0, 85, 0, 86, 0, 0, 87, 0, 88, 0, 89, 0, 90, 0, 0, 0, 0, 91, 0, 0, 92, 93, 0, 94, 0, 95, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, - 0, 0, 0, 98, 0, 0, 0, 99, 0, 0, 100, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, - 106, 0, 0, 107, 0, 108, 0, 109, 0, 110, 0, 0, 111, 0, 0, 112, 0, 113, 114, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, - 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 122, 0, 0, 123, 0, 0, 0, 0, 124, 0, 0, 125, 0, 126, 127, 0, 128, 0, 129, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, 133, 0, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 137, - 0, 0, 0, 138, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 142, 143, 0, 0, 0, 144, 0, 0, 0, 0, 145, 0, 0, 0, 146, 0, - 0, 147, 0, 0, 0, 0, 148, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 151, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 158, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 167, 0, 0, 168, 0, 169, 0, 0, 0, 0, 170, 0, 0, - 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 178, 0, 179, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 182, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 184, 0, 185, 0, 0, 0, 0, - 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 190, 191, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 194, 0, 0, 0, 195, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 0, 0, 201, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 209, 0, 0, 0, 210, 211, 0, 212, 0, 0, 213, 0, 214, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 217, 0, 0, 0, 0, - 218, 219, 0, 220, 0, 0, 221, 222, 0, 223, 0, 224, 0, 225, 0, 226, 0, 227, 228, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 232, 0, 233, 0, 0, 234, 0, 0, 0, 235, - 0, 0, 236, 0, 237, 0, 0, 0, 0, 238, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, - 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 245, - 0, 246, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 251, 0, - 0, 0, 0, 0, 0, 252, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 255, 0, 256, - 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 261, 0, 0, 0, - 0, 0, 0, 262, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 268, 0, 0, 0, - 269, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 272, 0, 0, 0, 273, 0, 274, 0, 0, 0, 275, 0, 0, 0, 276, - 0, 0, 0, 277, 0, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 280, 0, 0, 0, 281, 0, 0, 0, 282, 0, 283, 0, 0, 0, - 0, 0, 0, 0, 284, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 287, 0, 288, 0, 0, 0, 289, 290, 0, 291, - 0, 292, 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 295, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 297, 298, 0, 0, 299, 0, 300, 0, 0, 301, 0, 302, 0, 0, 303, 0, 304, 0, - 0, 305, 0, 306, 0, 307, 0, 0, 0, 0, 0, 0, 0, 308, 0, 309, 0, 310, 311, 0, 312, 0, 313, 0, 0, 0, 314, 0, 315, 0, 0, 0, - 316, 0, 317, 318, 0, 0, 319, 0, 320, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 323, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 325, 0, 0, 326, 0, 327, 328, 0, 329, 0, 0, - 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 332, 333, 0, 0, 0, 0, 0, 0, 334, 335, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 338, 0, - 0, 0, 0, 0, 339, 0, 0, 0, 340, 0, 0, 341, 0, 0, 342, 0, 0, 343, 0, 344, 0, 0, 345, 0, 0, 0, 346, 0, 0, 347, 0, 0, - 0, 348, 0, 0, 349, 0, 0, 350, 0, 351, 0, 0, 352, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 0, 0, 355, 0, 356, 357, - 0, 0, 358, 0, 359, 0, 0, 360, 0, 361, 362, 0, 363, 0, 364, 0, 0, 0, 365, 0, 366, 0, 367, 0, 0, 0, 0, 368, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 369, 0, 370, 0, 0, 0, 371, 0, 0, 0, 372, 0, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, - 0, 376, 0, 0, 377, 0, 378, 0, 0, 0, 0, 0, 0, 379, 380, 0, 381, 0, 382, 0, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, - 0, 385, 0, 0, 386, 0, 387, 0, 0, 0, 0, 0, 0, 388, 389, 0, 390, 0, 0, 0, 0, 0, 0, 391, 0, 0, 392, 0, 0, 0, 393, 0, - 0, 0, 394, 0, 395, 0, 0, 0, 396, 0, 0, 0, 0, 397, 398, 0, 399, 400, 0, 401, 0, 0, 402, 0, 0, 0, 403, 0, 404, 0, 0, 405, - 0, 0, 0, 406, 0, 0, 0, 407, 0, 408, 0, 0, 0, 0, 409, 0, 0, 0, 0, 410, 0, 411, 0, 0, 0, 412, 0, 413, 0, 0, 0, 0, - 414, 0, 415, 0, 0, 0, 416, 0, 417, 418, 0, 0, 419, 0, 0, 0, 420, 0, 421, 0, 0, 0, 0, 422, 0, 423, 0, 0, 0, 424, 0, 425, - 426, 0, 0, 427, 0, 0, 428, 0, 0, 429, 0, 430, 0, 0, 0, 431, 0, 432, 0, 0, 0, 0, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 436, 437, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 440, 0, 441, 0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 443, - 0, 0, 0, 0, 444, 0, 0, 0, 445, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, - 450, 0, 0, 0, 451, 0, 452, 0, 0, 0, 0, 453, 0, 0, 0, 0, 454, 0, 0, 0, 455, 0, 0, 456, 0, 0, 457, 0, 0, 0, 458, 0, - 0, 0, 0, 0, 0, 0, 0, 459, 460, 0, 0, 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, - 0, 463, 0, 0, 0, 464, 0, 0, 465, 0, 466, 0, 467, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 469, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 471, 472, 0, 473, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 476, 0, 477, - 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, - 0, 482, 0, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 487, 0, - 488, 0, 0, 0, 489, 0, 0, 0, 490, 491, 0, 492, 0, 0, 0, 0, 0, 0, 493, 0, 0, 494, 0, 495, 0, 0, 0, 0, 0, 496, 0, 497, - 0, 498, 0, 0, 499, 0, 0, 0, 500, 0, 0, 501, 0, 502, 0, 0, 0, 0, 0, 0, 503, 0, 504, 505, 0, 0, 506, 0, 0, 507, 0, 0, - 0, 508, 0, 0, 509, 0, 510, 0, 511, 0, 0, 512, 0, 0, 513, 0, 0, 0, 514, 515, 0, 0, 516, 517, 0, 0, 518, 0, 0, 519, 0, 0, - 520, 0, 0, 0, 521, 522, 0, 0, 523, 524, 0, 0, 525, 0, 0, 526, 0, 527, 0, 528, 0, 0, 529, 0, 0, 530, 0, 0, 0, 531, 0, 0, - 0, 0, 532, 533, 0, 0, 534, 0, 0, 535, 0, 536, 0, 0, 537, 0, 0, 0, 0, 538, 0, 539, 0, 0, 540, 0, 541, 542, 0, 0, 543, 544, - 0, 0, 0, 0, 0, 545, 546, 0, 0, 547, 0, 548, 0, 549, 0, 0, 550, 0, 0, 0, 0, 551, 552, 0, 0, 553, 0, 0, 554, 0, 555, 0, - 0, 556, 0, 0, 0, 0, 557, 0, 558, 0, 0, 559, 0, 560, 561, 0, 0, 562, 563, 0, 0, 0, 0, 0, 564, 565, 0, 0, 566, 0, 567, 0, - 568, 0, 569, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 573, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 578, 0, 0, 0, 0, 0, 0, - 0, 0, 579, 0, 0, 580, 0, 0, 0, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 582, 0, 583, 0, 0, 0, 0, 0, 0, 584, 0, 585, 0, - 0, 586, 0, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 588, 0, 589, 0, 0, 0, 0, 0, 0, 590, 0, 591, 0, 0, 0, 592, 0, 0, 593, - 0, 0, 0, 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, 0, 596, 0, 597, 0, 0, 0, 598, 0, - 0, 599, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, 0, 603, 0, 0, - 0, 0, 0, 0, 604, 0, 605, 0, 0, 0, 0, 0, 0, 606, 0, 607, 0, 0, 608, 0, 0, 609, 0, 0, 0, 0, 0, 0, 610, 0, 611, 0, - 612, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, 617, 0, 0, 0, - 0, 0, 0, 618, 0, 619, 0, 620, 0, 0, 621, 0, 0, 0, 622, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 625, 626, - 0, 0, 0, 0, 0, 0, 627, 628, 0, 0, 0, 629, 0, 630, 0, 0, 0, 0, 631, 632, 0, 0, 0, 0, 0, 0, 633, 634, 0, 0, 0, 635, - 0, 636, 0, 0, 0, 637, 0, 638, 0, 0, 639, 0, 0, 0, 0, 0, 640, 0, 641, 0, 642, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 644, - 0, 0, 0, 0, 0, 645, 0, 646, 0, 647, 0, 648, 649, 0, 0, 0, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 652, 0, 0, 653, 654, 0, - 655, 0, 656, 0, 0, 0, 0, 0, 657, 0, 0, 0, 658, 0, 0, 0, 0, 659, 0, 0, 660, 0, 0, 0, 0, 0, 0, 661, 0, 0, 662, 0, - 663, 664, 0, 665, 0, 0, 666, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 669, 670, 0, 0, 0, 671, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 675, - 0, 0, 676, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 678, 679, 0, 0, 0, 0, 0, 680, 0, 0, 681, 0, 682, 0, 0, 683, 0, - 0, 0, 684, 0, 0, 0, 0, 0, 0, 685, 0, 0, 686, 0, 687, 688, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 691, - 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 697, 0, 0, 0, 698, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 700, 0, 0, 0, - 0, 0, 0, 0, 0, 701, 0, 0, 702, 0, 0, 703, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 705, 706, 0, 0, 0, 0, 0, 707, - 0, 0, 708, 0, 709, 0, 0, 710, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 713, 0, 714, 715, 0, 0, 0, 0, 716, - 0, 0, 0, 0, 0, 0, 0, 717, 0, 0, 718, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, - 0, 0, 0, 0, 722, 0, 0, 723, 0, 724, 0, 0, 725, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 727, 0, 0, 728, 0, 0, - 0, 729, 0, 0, 730, 0, 731, 0, 732, 0, 0, 0, 733, 0, 0, 734, 0, 735, 736, 0, 737, 0, 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, - 0, 0, 740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 742, 0, 0, 0, 0, 743, 0, 0, 744, 745, 0, 746, 0, 747, 0, 0, 0, - 0, 748, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, - 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 753, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 756, 0, 0, 757, - 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 760, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 763, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 765, 0, 766, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, 0, 0, 0, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, 771, 772, 0, 773, 0, 774, 0, - 775, 0, 0, 0, 0, 0, 776, 777, 0, 778, 0, 779, 0, 780, 0, 781, 0, 0, 0, 0, 0, 782, 783, 0, 784, 0, 785, 0, 786, 0, 787, 0, - 788, 0, 0, 0, 0, 0, 789, 790, 0, 791, 0, 792, 0, 793, 0, 794, 0, 0, 0, 0, 0, 795, 796, 0, 797, 0, 798, 799, 0, 0, 0, 800, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0217[64] = { + 0x22102080090AC405ull, 0x1008241202081000ull, 0x084B4810AC852208ull, 0x2B48A0425A408524ull, + 0x548AAAC2AA204004ull, 0x080001005642A95Aull, 0x020692A91101A488ull, 0x0215A42408052404ull, + 0x0002001884104680ull, 0x08A4024244230400ull, 0x4000000080000001ull, 0x0000000000000000ull, + 0x0806000000000000ull, 0x0000500000A00820ull, 0x00080040214A0000ull, 0x0000000000000000ull, + 0x2080201800000000ull, 0x0000000000002280ull, 0x0A04000084000000ull, 0x0000000000000010ull, + 0x4008000000040000ull, 0x0000000000000000ull, 0x000000802208020Cull, 0x0000000000040080ull, + 0x1008208020C00000ull, 0x08A14B1002010080ull, 0x894400040016AACBull, 0x8800200140800A14ull, + 0xA200012042081022ull, 0x0000004810820408ull, 0x88A2080511010802ull, 0xB141005014441048ull, + 0x5294C0480080000Aull, 0x0240054D1456A02Aull, 0x428C0C212D204000ull, 0xD2081292244A4910ull, + 0x402488A008545694ull, 0x4481605240256052ull, 0x0A284288944B6114ull, 0x02028A49A2851345ull, + 0x8405400B00050000ull, 0x4491085104044910ull, 0x0004152202008180ull, 0x10200840A802B202ull, + 0xA0A40B1154002022ull, 0x24CC495224D02912ull, 0xCD284A4C224A9331ull, 0x5306694252612A60ull, + 0x024502009000200Dull, 0x9140A04250280224ull, 0x2100401245008008ull, 0x140840115024A050ull, + 0x8C0C28C0C20244A8ull, 0x64281AA0809504A2ull, 0x0040084B48121105ull, 0x4A41808490080846ull, + 0x200104109010D204ull, 0x8301092010108900ull, 0x0820848086900894ull, 0x0856915224081290ull, + 0x401001021590A004ull, 0x8410280490202440ull, 0x56050A0001480000ull, 0x8D60AAC15560AAC1ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0217[64] = { + 1u, 15u, 24u, 42u, 62u, 82u, 98u, 116u, 131u, 141u, 154u, 157u, 157u, 160u, 166u, 173u, + 173u, 178u, 181u, 186u, 187u, 190u, 190u, 197u, 199u, 206u, 218u, 236u, 246u, 257u, 264u, 277u, + 292u, 305u, 324u, 339u, 358u, 376u, 394u, 414u, 434u, 444u, 459u, 469u, 482u, 498u, 520u, 545u, + 568u, 579u, 594u, 604u, 618u, 636u, 655u, 669u, 684u, 696u, 708u, 722u, 740u, 752u, 764u, 775u, }; void recomp_unit_0217_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -154,13 +49,25 @@ void recomp_unit_0217_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B68000u; - entry_id = (entry_delta < 16384u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0217[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16384u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0217[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0217[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B68000; @@ -981,7 +888,6 @@ L_08B68008: ctx.gpr[8] = (ctx.gpr[8] < aot_gpr_5 ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B68038; } @@ -1002,7 +908,6 @@ L_08B68038: goto L_08B6803C; L_08B6803C: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B68008; } @@ -1014,7 +919,17 @@ L_08B68044: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6804C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); ctx.gpr[9] = (aot_gpr_6 + ctx.gpr[8]); @@ -1084,7 +999,17 @@ L_08B680E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B680F4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[17]); @@ -1187,7 +1112,17 @@ L_08B681CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B681F0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1207,7 +1142,6 @@ L_08B6820C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(8)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B68240; } @@ -1258,7 +1192,6 @@ L_08B68268: goto L_08B6826C; L_08B6826C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6827C; } @@ -1281,7 +1214,17 @@ L_08B6827C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B68290: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1295,7 +1238,6 @@ L_08B68290: L_08B682AC: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B682C4; } @@ -1332,7 +1274,17 @@ L_08B682D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B682EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1355,7 +1307,6 @@ L_08B68308: L_08B68314: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B68328; } @@ -1378,7 +1329,17 @@ L_08B68328: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6833C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1392,7 +1353,6 @@ L_08B6833C: L_08B68358: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B68370; } @@ -1429,7 +1389,17 @@ L_08B68384: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B68398: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1470,7 +1440,6 @@ L_08B683CC: goto L_08B683D8; L_08B683D8: ctx.gpr[31] = (0x08B683E0u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B683E0u) goto L_08B683E0; AOT_REGCACHE_SYNC_OUT(); return; L_08B683E0: @@ -1478,7 +1447,6 @@ L_08B683E0: goto L_08B683E4; L_08B683E4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B683F4; } @@ -1501,7 +1469,17 @@ L_08B683F4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B68408: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -1540,7 +1518,6 @@ L_08B68454: } L_08B68464: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6847C; } @@ -1548,7 +1525,6 @@ L_08B68464: } L_08B6846C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6847C; } @@ -1556,12 +1532,10 @@ L_08B6846C: } L_08B68474: ctx.gpr[31] = (0x08B6847Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6847Cu) goto L_08B6847C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6847C: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B684C4; } @@ -1591,7 +1565,6 @@ L_08B6849C: } L_08B684A4: { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B684C4; } @@ -1599,7 +1572,6 @@ L_08B684A4: } L_08B684AC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B684C4; } @@ -1607,7 +1579,6 @@ L_08B684AC: } L_08B684B4: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B684C4; } @@ -1615,12 +1586,10 @@ L_08B684B4: } L_08B684BC: ctx.gpr[31] = (0x08B684C4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B684C4u) goto L_08B684C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B684C4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B6853C; } @@ -1672,7 +1641,6 @@ L_08B6850C: goto L_08B68510; L_08B68510: { const bool branch_taken = ctx.gpr[20] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B684E8; } @@ -1680,7 +1648,6 @@ L_08B68510: } L_08B68518: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B6853C; } @@ -1689,7 +1656,6 @@ L_08B68518: L_08B68520: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6853C; } @@ -1697,7 +1663,6 @@ L_08B68520: } L_08B6852C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6853C; } @@ -1705,7 +1670,6 @@ L_08B6852C: } L_08B68534: ctx.gpr[31] = (0x08B6853Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6853Cu) goto L_08B6853C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6853C: @@ -1737,7 +1701,6 @@ L_08B68564: goto L_08B68568; L_08B68568: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B68578; } @@ -1765,7 +1728,17 @@ L_08B68578: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B685A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -1828,7 +1801,6 @@ L_08B68628: } L_08B68634: ctx.gpr[31] = (0x08B6863Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6863Cu) goto L_08B6863C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6863C: @@ -1873,12 +1845,10 @@ L_08B68680: } L_08B6868C: ctx.gpr[31] = (0x08B68694u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B68694u) goto L_08B68694; AOT_REGCACHE_SYNC_OUT(); return; L_08B68694: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B686C8; } @@ -1909,7 +1879,6 @@ L_08B686B0: } L_08B686BC: ctx.gpr[31] = (0x08B686C4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B686C4u) goto L_08B686C4; AOT_REGCACHE_SYNC_OUT(); return; L_08B686C4: @@ -1940,7 +1909,17 @@ L_08B686E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B68708: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_4); @@ -1983,7 +1962,17 @@ L_08B68748: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6876C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -2021,7 +2010,6 @@ L_08B687A8: goto L_08B687B4; L_08B687B4: ctx.gpr[31] = (0x08B687BCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B687BCu) goto L_08B687BC; AOT_REGCACHE_SYNC_OUT(); return; L_08B687BC: @@ -2029,7 +2017,6 @@ L_08B687BC: goto L_08B687C0; L_08B687C0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B687D0; } @@ -2052,7 +2039,17 @@ L_08B687D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B687E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -2181,14 +2178,23 @@ L_08B688C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B68928: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[31]); aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B68998; } @@ -2243,7 +2249,17 @@ L_08B68998: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B689A4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -2252,7 +2268,6 @@ L_08B689A4: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B689EC; } @@ -2261,7 +2276,6 @@ L_08B689A4: L_08B689C8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B689DC; } @@ -2269,14 +2283,12 @@ L_08B689C8: } L_08B689D4: ctx.gpr[31] = (0x08B689DCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B689DCu) goto L_08B689DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B689DC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B689C8; } @@ -2294,7 +2306,17 @@ L_08B689EC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B68A00: aot_gpr_29 = (aot_gpr_29 + static_cast(-800)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(792), aot_gpr_16); @@ -2477,7 +2499,6 @@ L_08B68AF8: aot_gpr_5 = (aot_gpr_5 + aot_gpr_6); aot_gpr_5 = (aot_gpr_5 + static_cast(-64)); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08B68D5C; } @@ -2566,7 +2587,6 @@ L_08B68D5C: goto L_08B6927C; L_08B68DB0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B69268; } @@ -2777,7 +2797,6 @@ L_08B68ECC: ctx.gpr[10] = (ctx.gpr[10] + ctx.gpr[11]); ctx.gpr[10] = (ctx.gpr[10] + static_cast(-64)); { const bool branch_taken = static_cast(ctx.gpr[10]) <= 0; - // nop if (branch_taken) { goto L_08B69134; } @@ -2933,7 +2952,17 @@ L_08B69268: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6927C: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); { const std::uint32_t aot_run_words[7]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[31]}; @@ -2948,7 +2977,6 @@ L_08B6927C: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B69310; } @@ -2961,7 +2989,6 @@ L_08B692C8: aot_gpr_6 = (aot_gpr_6 < static_cast(1) ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B69310; } @@ -3064,7 +3091,6 @@ L_08B69310: aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 1u)); aot_gpr_6 = (static_cast(ctx.gpr[19]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6969C; } @@ -3188,7 +3214,6 @@ L_08B694F8: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B69664; } @@ -3249,7 +3274,6 @@ L_08B69674: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(84))); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(12), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B698F0; } @@ -3372,7 +3396,6 @@ L_08B69748: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B698B4; } @@ -3481,7 +3504,17 @@ L_08B69940: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B69964: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -3522,7 +3555,6 @@ L_08B699A4: L_08B699AC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B699C0; } @@ -3530,7 +3562,6 @@ L_08B699AC: } L_08B699B8: ctx.gpr[31] = (0x08B699C0u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B699C0u) goto L_08B699C0; AOT_REGCACHE_SYNC_OUT(); return; L_08B699C0: @@ -3538,7 +3569,6 @@ L_08B699C0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(28))); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B69990; } @@ -3602,7 +3632,6 @@ L_08B69A1C: } L_08B69A24: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B69A50; } @@ -3615,7 +3644,6 @@ L_08B69A2C: AOT_REGCACHE_SYNC_OUT(); return; L_08B69A34: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B69A50; } @@ -3663,7 +3691,17 @@ L_08B69A50: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B69A88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[31]); @@ -3725,7 +3763,6 @@ L_08B69B10: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B69B2C; } @@ -3751,7 +3788,17 @@ L_08B69B2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B69B5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3759,7 +3806,6 @@ L_08B69B5C: aot_gpr_16 = (aot_gpr_4 | 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B69B80; } @@ -3767,7 +3813,6 @@ L_08B69B5C: } L_08B69B78: ctx.gpr[31] = (0x08B69B80u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B69B80u) goto L_08B69B80; AOT_REGCACHE_SYNC_OUT(); return; L_08B69B80: @@ -3787,7 +3832,17 @@ L_08B69B80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B69BB4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[31]); @@ -3802,7 +3857,6 @@ L_08B69BB4: aot_gpr_6 = (static_cast(static_cast(aot_gpr_6) >> 2u)); aot_gpr_6 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B69C04; } @@ -3890,7 +3944,17 @@ L_08B69C94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B69CA0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[31]); @@ -3908,7 +3972,6 @@ L_08B69CA0: aot_gpr_7 = (aot_gpr_5 + static_cast(1)); aot_gpr_6 = (aot_gpr_6 < aot_gpr_7 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B69CFC; } @@ -3996,7 +4059,17 @@ L_08B69D8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B69D98: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[8]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[31]}; @@ -4079,7 +4152,6 @@ L_08B69E70: AOT_REGCACHE_SYNC_OUT(); return; L_08B69E80: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6A00C; } @@ -4118,7 +4190,6 @@ L_08B69EC4: AOT_REGCACHE_SYNC_OUT(); return; L_08B69ED4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6A00C; } @@ -4266,7 +4337,6 @@ L_08B69FF0: goto L_08B69FF4; L_08B69FF4: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B6A004; } @@ -4308,7 +4378,17 @@ L_08B6A00C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A05C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[31]); @@ -4330,7 +4410,17 @@ L_08B6A08C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A098: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_gpr_5 - aot_gpr_4); @@ -4525,7 +4615,17 @@ L_08B6A1A0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A1A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), ctx.gpr[31]); @@ -4547,7 +4647,17 @@ L_08B6A1D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A1E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_7); @@ -4575,7 +4685,17 @@ L_08B6A1E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A238: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4589,7 +4709,6 @@ L_08B6A238: L_08B6A254: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B6A26C; } @@ -4626,7 +4745,17 @@ L_08B6A280: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A294: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -4648,7 +4777,6 @@ L_08B6A2AC: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B6A2CC; } @@ -4661,7 +4789,6 @@ L_08B6A2CC: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B6A2AC; } @@ -4669,11 +4796,20 @@ L_08B6A2CC: } L_08B6A2DC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A2E4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4691,7 +4827,17 @@ L_08B6A2F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A310: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4719,7 +4865,6 @@ L_08B6A32C: L_08B6A338: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A34C; } @@ -4727,7 +4872,6 @@ L_08B6A338: } L_08B6A344: ctx.gpr[31] = (0x08B6A34Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6A34Cu) goto L_08B6A34C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6A34C: @@ -4737,7 +4881,17 @@ L_08B6A34C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A358: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4775,7 +4929,6 @@ L_08B6A384: L_08B6A390: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A3A4; } @@ -4783,7 +4936,6 @@ L_08B6A390: } L_08B6A39C: ctx.gpr[31] = (0x08B6A3A4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6A3A4u) goto L_08B6A3A4; AOT_REGCACHE_SYNC_OUT(); return; L_08B6A3A4: @@ -4793,7 +4945,17 @@ L_08B6A3A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A3B0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4828,7 +4990,6 @@ L_08B6A3E4: goto L_08B6A3F0; L_08B6A3F0: ctx.gpr[31] = (0x08B6A3F8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6A3F8u) goto L_08B6A3F8; AOT_REGCACHE_SYNC_OUT(); return; L_08B6A3F8: @@ -4841,7 +5002,6 @@ L_08B6A3FC: goto L_08B6A408; L_08B6A408: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6A430; } @@ -4856,7 +5016,6 @@ L_08B6A410: goto L_08B6A41C; L_08B6A41C: ctx.gpr[31] = (0x08B6A424u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2E4, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 472u, 0x08ABE2E4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6A424u) goto L_08B6A424; AOT_REGCACHE_SYNC_OUT(); return; L_08B6A424: @@ -4882,7 +5041,6 @@ L_08B6A438: goto L_08B6A448; L_08B6A448: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6A458; } @@ -4905,7 +5063,17 @@ L_08B6A458: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A46C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -4920,7 +5088,6 @@ L_08B6A46C: goto L_08B6A494; L_08B6A494: { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08B6A5C0; } @@ -4930,7 +5097,6 @@ L_08B6A49C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B6A5C0; } @@ -4940,7 +5106,6 @@ L_08B6A4AC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B6A540; } @@ -4949,7 +5114,6 @@ L_08B6A4AC: L_08B6A4BC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A4F8; } @@ -4958,7 +5122,6 @@ L_08B6A4BC: L_08B6A4C8: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B6A4F8; } @@ -5009,7 +5172,6 @@ L_08B6A534: goto L_08B6A538; L_08B6A538: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6A5B8; } @@ -5017,7 +5179,6 @@ L_08B6A538: } L_08B6A540: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A578; } @@ -5026,7 +5187,6 @@ L_08B6A540: L_08B6A548: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B6A578; } @@ -5077,7 +5237,6 @@ L_08B6A5B4: goto L_08B6A5B8; L_08B6A5B8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6A494; } @@ -5097,11 +5256,20 @@ L_08B6A5C0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A5DC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A610; } @@ -5111,7 +5279,6 @@ L_08B6A5E8: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A644; } @@ -5121,7 +5288,6 @@ L_08B6A5F8: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6A5F8; } @@ -5129,7 +5295,6 @@ L_08B6A5F8: } L_08B6A608: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6A644; } @@ -5139,7 +5304,6 @@ L_08B6A610: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6A638; } @@ -5150,7 +5314,6 @@ L_08B6A620: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B6A620; } @@ -5161,7 +5324,6 @@ L_08B6A634: goto L_08B6A638; L_08B6A638: { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B6A644; } @@ -5176,11 +5338,20 @@ L_08B6A644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A64C: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6A670; } @@ -5190,7 +5361,6 @@ L_08B6A658: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6A670; } @@ -5207,7 +5377,6 @@ L_08B6A668: L_08B6A670: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A6A4; } @@ -5217,7 +5386,6 @@ L_08B6A67C: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A69C; } @@ -5227,7 +5395,6 @@ L_08B6A68C: aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6A68C; } @@ -5235,7 +5402,6 @@ L_08B6A68C: } L_08B6A69C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6A6CC; } @@ -5246,7 +5412,6 @@ L_08B6A6A4: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 != aot_gpr_6; - // nop if (branch_taken) { goto L_08B6A6CC; } @@ -5257,7 +5422,6 @@ L_08B6A6B8: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B6A6B8; } @@ -5269,7 +5433,17 @@ L_08B6A6CC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A6D4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(8))); @@ -5289,7 +5463,6 @@ L_08B6A6EC: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), aot_gpr_7); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6A708; } @@ -5307,7 +5480,6 @@ L_08B6A708: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6A720; } @@ -5331,7 +5503,17 @@ L_08B6A724: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A730: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_6 + static_cast(12))); @@ -5351,7 +5533,6 @@ L_08B6A748: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(4), aot_gpr_7); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6A764; } @@ -5369,7 +5550,6 @@ L_08B6A764: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6A77C; } @@ -5393,7 +5573,17 @@ L_08B6A780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A78C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -5410,7 +5600,6 @@ L_08B6A798: } L_08B6A7A4: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B6A7BC; } @@ -5475,11 +5664,20 @@ L_08B6A7E4: goto L_08B6A840; L_08B6A840: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A848: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 3344u); @@ -5494,7 +5692,6 @@ L_08B6A848: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6A884; } @@ -5505,11 +5702,20 @@ L_08B6A880: goto L_08B6A884; L_08B6A884: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6A88C: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_16); @@ -5529,7 +5735,6 @@ L_08B6A88C: } L_08B6A8B8: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6A998; } @@ -5537,7 +5742,6 @@ L_08B6A8B8: } L_08B6A8C0: { const bool branch_taken = aot_gpr_6 != 0u; - // nop if (branch_taken) { goto L_08B6A8E8; } @@ -5551,7 +5755,6 @@ L_08B6A8C8: aot_gpr_5 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A998; } @@ -5591,7 +5794,6 @@ L_08B6A920: L_08B6A92C: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A948; } @@ -5633,7 +5835,6 @@ L_08B6A980: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B6AA20; } @@ -5681,7 +5882,6 @@ L_08B6A9D0: L_08B6A9DC: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6A9F8; } @@ -5737,7 +5937,17 @@ L_08B6AA3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6AA64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5793,7 +6003,17 @@ L_08B6AAB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6AAC8: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(40), ctx.gpr[18]); @@ -5843,7 +6063,6 @@ L_08B6AB30: goto L_08B6AB34; L_08B6AB34: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B6AB04; } @@ -5867,7 +6086,6 @@ L_08B6AB44: aot_gpr_4 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6AB7C; } @@ -5915,7 +6133,6 @@ L_08B6ABAC: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6AC04; } @@ -5962,7 +6179,17 @@ L_08B6AC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6AC34: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5990,7 +6217,6 @@ L_08B6AC68: } L_08B6AC70: { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6AC80; } @@ -5998,7 +6224,6 @@ L_08B6AC70: } L_08B6AC78: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6ACA4; } @@ -6008,7 +6233,6 @@ L_08B6AC80: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6ACA0; } @@ -6018,7 +6242,6 @@ L_08B6AC90: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(8))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6AC90; } @@ -6029,7 +6252,6 @@ L_08B6ACA0: goto L_08B6ACA4; L_08B6ACA4: { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AD50; } @@ -6042,7 +6264,6 @@ L_08B6ACAC: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(8), aot_gpr_5); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = ctx.gpr[17] == aot_gpr_5; - // nop if (branch_taken) { goto L_08B6ACF4; } @@ -6079,7 +6300,6 @@ L_08B6ACF4: goto L_08B6ACFC; L_08B6ACFC: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AD10; } @@ -6098,7 +6318,6 @@ L_08B6AD10: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AD2C; } @@ -6144,7 +6363,6 @@ L_08B6AD58: L_08B6AD5C: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AD74; } @@ -6163,7 +6381,6 @@ L_08B6AD74: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); ctx.gpr[8] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(8))); { const bool branch_taken = ctx.gpr[8] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AD90; } @@ -6184,7 +6401,6 @@ L_08B6AD90: goto L_08B6AD98; L_08B6AD98: { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6ADDC; } @@ -6193,7 +6409,6 @@ L_08B6AD98: L_08B6ADA0: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6ADB8; } @@ -6232,7 +6447,6 @@ L_08B6ADD8: L_08B6ADDC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AE24; } @@ -6241,7 +6455,6 @@ L_08B6ADDC: L_08B6ADE8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6AE00; } @@ -6280,7 +6493,6 @@ L_08B6AE20: L_08B6AE24: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B00C; } @@ -6293,7 +6505,6 @@ L_08B6AE30: goto L_08B6AE3C; L_08B6AE3C: { const bool branch_taken = ctx.gpr[18] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6B000; } @@ -6301,7 +6512,6 @@ L_08B6AE3C: } L_08B6AE44: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B6AE58; } @@ -6310,7 +6520,6 @@ L_08B6AE44: L_08B6AE4C: aot_gpr_4 = (aot_mem.aot_direct_load8(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6B000; } @@ -6319,7 +6528,6 @@ L_08B6AE4C: L_08B6AE58: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(8))); { const bool branch_taken = ctx.gpr[18] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6AF34; } @@ -6329,7 +6537,6 @@ L_08B6AE64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(12))); aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6AE8C; } @@ -6357,7 +6564,6 @@ L_08B6AE8C: L_08B6AE98: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6AECC; } @@ -6365,7 +6571,6 @@ L_08B6AE98: } L_08B6AEA4: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6AEB8; } @@ -6374,7 +6579,6 @@ L_08B6AEA4: L_08B6AEAC: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6AECC; } @@ -6393,7 +6597,6 @@ L_08B6AEB8: } L_08B6AECC: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6AEE0; } @@ -6402,7 +6605,6 @@ L_08B6AECC: L_08B6AED4: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6AEFC; } @@ -6410,7 +6612,6 @@ L_08B6AED4: } L_08B6AEE0: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6AEEC; } @@ -6433,7 +6634,6 @@ L_08B6AEFC: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(0), static_cast(ctx.gpr[21])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6AF18; } @@ -6449,7 +6649,6 @@ L_08B6AF18: goto L_08B6A6D4; L_08B6AF24: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B000; } @@ -6457,7 +6656,6 @@ L_08B6AF24: } L_08B6AF2C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6AFF8; } @@ -6466,7 +6664,6 @@ L_08B6AF2C: L_08B6AF34: aot_gpr_5 = (aot_mem.aot_direct_load8(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6AF58; } @@ -6494,7 +6691,6 @@ L_08B6AF58: L_08B6AF64: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6AF98; } @@ -6502,7 +6698,6 @@ L_08B6AF64: } L_08B6AF70: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6AF84; } @@ -6511,7 +6706,6 @@ L_08B6AF70: L_08B6AF78: aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6AF98; } @@ -6530,7 +6724,6 @@ L_08B6AF84: } L_08B6AF98: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6AFAC; } @@ -6539,7 +6732,6 @@ L_08B6AF98: L_08B6AFA0: aot_gpr_6 = (aot_mem.aot_direct_load8(aot_gpr_6 + static_cast(0))); { const bool branch_taken = aot_gpr_6 != ctx.gpr[20]; - // nop if (branch_taken) { goto L_08B6AFC8; } @@ -6547,7 +6739,6 @@ L_08B6AFA0: } L_08B6AFAC: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6AFB8; } @@ -6570,7 +6761,6 @@ L_08B6AFC8: aot_mem.aot_direct_store8(ctx.gpr[19] + static_cast(0), static_cast(ctx.gpr[21])); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6AFE4; } @@ -6586,7 +6776,6 @@ L_08B6AFE4: goto L_08B6A730; L_08B6AFF0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B000; } @@ -6594,7 +6783,6 @@ L_08B6AFF0: } L_08B6AFF8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6AE3C; } @@ -6602,7 +6790,6 @@ L_08B6AFF8: } L_08B6B000: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B6B00C; } @@ -6628,7 +6815,17 @@ L_08B6B00C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B034: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(96), ctx.gpr[20]); @@ -6653,7 +6850,6 @@ L_08B6B034: L_08B6B070: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B0C8; } @@ -6669,7 +6865,6 @@ L_08B6B07C: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B0E4; } @@ -6686,7 +6881,6 @@ L_08B6B0A4: goto L_08B6A88C; L_08B6B0C0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -6716,7 +6910,6 @@ L_08B6B0E4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B178; } @@ -6731,7 +6924,6 @@ L_08B6B114: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[2]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6B154; } @@ -6747,7 +6939,6 @@ L_08B6B124: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6B184; } @@ -6755,7 +6946,6 @@ L_08B6B124: } L_08B6B14C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B1E0; } @@ -6772,7 +6962,6 @@ L_08B6B154: goto L_08B6A88C; L_08B6B170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -6792,7 +6981,6 @@ L_08B6B184: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6B1BC; } @@ -6809,7 +6997,6 @@ L_08B6B198: goto L_08B6A88C; L_08B6B1B4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -6826,7 +7013,6 @@ L_08B6B1BC: goto L_08B6A88C; L_08B6B1D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -6851,7 +7037,6 @@ L_08B6B1FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B6B284; } @@ -6869,7 +7054,6 @@ L_08B6B20C: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B268; } @@ -6888,7 +7072,6 @@ L_08B6B23C: goto L_08B6A88C; L_08B6B260: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -6924,7 +7107,6 @@ L_08B6B290: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.gpr[19] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B6B33C; } @@ -6940,7 +7122,6 @@ L_08B6B2B8: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B33C; } @@ -6951,7 +7132,6 @@ L_08B6B2E0: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6B318; } @@ -6968,7 +7148,6 @@ L_08B6B2F4: goto L_08B6A88C; L_08B6B310: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -6985,7 +7164,6 @@ L_08B6B318: goto L_08B6A88C; L_08B6B334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -7016,7 +7194,6 @@ L_08B6B354: goto L_08B6B370; L_08B6B370: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B6B414; } @@ -7024,7 +7201,6 @@ L_08B6B370: } L_08B6B378: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B414; } @@ -7034,7 +7210,6 @@ L_08B6B380: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B6B3B8; } @@ -7050,7 +7225,6 @@ L_08B6B390: aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6B414; } @@ -7061,7 +7235,6 @@ L_08B6B3B8: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6B3F0; } @@ -7078,7 +7251,6 @@ L_08B6B3CC: goto L_08B6A88C; L_08B6B3E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -7095,7 +7267,6 @@ L_08B6B3F0: goto L_08B6A88C; L_08B6B40C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B444; } @@ -7103,7 +7274,6 @@ L_08B6B40C: } L_08B6B414: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6B428; } @@ -7148,7 +7318,17 @@ L_08B6B444: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B464: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -7170,7 +7350,6 @@ L_08B6B47C: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B6B49C; } @@ -7183,7 +7362,6 @@ L_08B6B49C: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B6B47C; } @@ -7191,11 +7369,20 @@ L_08B6B49C: } L_08B6B4AC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B4B4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -7217,7 +7404,6 @@ L_08B6B4CC: aot_gpr_7 = (0u < aot_gpr_7 ? 1u : 0u); aot_gpr_7 = (aot_gpr_7 & 255u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B6B4EC; } @@ -7230,7 +7416,6 @@ L_08B6B4EC: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 != 0u; - // nop if (branch_taken) { goto L_08B6B4CC; } @@ -7238,16 +7423,24 @@ L_08B6B4EC: } L_08B6B4FC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B504: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B550; } @@ -7276,7 +7469,6 @@ L_08B6B528: goto L_08B6B540; L_08B6B540: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6B550; } @@ -7284,7 +7476,6 @@ L_08B6B540: } L_08B6B548: ctx.gpr[31] = (0x08B6B550u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6B550u) goto L_08B6B550; AOT_REGCACHE_SYNC_OUT(); return; L_08B6B550: @@ -7294,7 +7485,17 @@ L_08B6B550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B55C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7323,7 +7524,6 @@ L_08B6B57C: } L_08B6B594: ctx.gpr[31] = (0x08B6B59Cu); - // nop goto L_08B6B620; L_08B6B59C: { const bool branch_taken = ctx.gpr[18] == 0u; @@ -7379,7 +7579,6 @@ L_08B6B5F4: goto L_08B6B5F8; L_08B6B5F8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6B608; } @@ -7403,12 +7602,21 @@ L_08B6B608: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B620: aot_gpr_5 = (aot_gpr_4 - 0u); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_6 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B6B644; } @@ -7419,7 +7627,6 @@ L_08B6B630: aot_mem.aot_direct_store32(aot_gpr_6 + static_cast(0), 0u); aot_gpr_6 = (aot_gpr_7 | 0u); { const bool branch_taken = aot_gpr_6 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B6B630; } @@ -7432,7 +7639,17 @@ L_08B6B644: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B650: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7446,7 +7663,6 @@ L_08B6B650: L_08B6B66C: aot_gpr_16 = (ctx.gpr[2] | 0u); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B6B684; } @@ -7483,7 +7699,17 @@ L_08B6B698: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B6AC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7549,7 +7775,17 @@ L_08B6B72C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7559,7 +7795,6 @@ L_08B6B74C: ctx.gpr[17] = (aot_gpr_16 + static_cast(16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6B788; } @@ -7573,7 +7808,6 @@ L_08B6B770: L_08B6B77C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6B770; } @@ -7591,7 +7825,17 @@ L_08B6B788: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B79C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7613,7 +7857,6 @@ L_08B6B7C0: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[8] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[8] = (0u | 1u); goto L_08B6B7D8; @@ -7622,7 +7865,6 @@ L_08B6B7C0: L_08B6B7D8: ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B6B7EC; } @@ -7630,7 +7872,6 @@ L_08B6B7D8: } L_08B6B7E4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6B7F8; } @@ -7639,7 +7880,6 @@ L_08B6B7E4: L_08B6B7EC: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_16 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6B7C0; } @@ -7649,7 +7889,6 @@ L_08B6B7F8: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(48)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6B838; } @@ -7692,7 +7931,17 @@ L_08B6B83C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B850: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7720,7 +7969,17 @@ L_08B6B87C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B890: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(12), aot_gpr_6); @@ -7731,7 +7990,17 @@ L_08B6B890: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B8A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -7742,7 +8011,17 @@ L_08B6B8A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B8C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7812,7 +8091,17 @@ L_08B6B950: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B970: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7822,7 +8111,6 @@ L_08B6B970: ctx.gpr[17] = (aot_gpr_16 + static_cast(20)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6B9AC; } @@ -7836,7 +8124,6 @@ L_08B6B994: L_08B6B9A0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6B994; } @@ -7854,7 +8141,17 @@ L_08B6B9AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6B9C0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7876,7 +8173,6 @@ L_08B6B9E4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[8] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[8] = (0u | 1u); goto L_08B6B9FC; @@ -7885,7 +8181,6 @@ L_08B6B9E4: L_08B6B9FC: ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B6BA10; } @@ -7893,7 +8188,6 @@ L_08B6B9FC: } L_08B6BA08: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6BA1C; } @@ -7902,7 +8196,6 @@ L_08B6BA08: L_08B6BA10: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(16))); { const bool branch_taken = aot_gpr_16 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6B9E4; } @@ -7912,7 +8205,6 @@ L_08B6BA1C: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(60)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6BA64; } @@ -7956,7 +8248,17 @@ L_08B6BA68: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BA7C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7984,7 +8286,17 @@ L_08B6BAA8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BABC: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(16), aot_gpr_6); @@ -7995,7 +8307,17 @@ L_08B6BABC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BAD4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(16))); @@ -8006,7 +8328,17 @@ L_08B6BAD4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BAEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8016,7 +8348,6 @@ L_08B6BAEC: ctx.gpr[17] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[31]); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6BB30; } @@ -8033,13 +8364,11 @@ L_08B6BB10: } L_08B6BB1C: ctx.gpr[31] = (0x08B6BB24u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6BB24u) goto L_08B6BB24; AOT_REGCACHE_SYNC_OUT(); return; L_08B6BB24: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); { const bool branch_taken = ctx.gpr[17] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6BB10; } @@ -8059,7 +8388,17 @@ L_08B6BB30: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BB4C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -8075,7 +8414,6 @@ L_08B6BB4C: L_08B6BB68: aot_gpr_4 = (ctx.gpr[17] + static_cast(112)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6BB98; } @@ -8085,7 +8423,6 @@ L_08B6BB74: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(184))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6BB98; } @@ -8094,7 +8431,6 @@ L_08B6BB74: L_08B6BB84: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(176))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6BB98; } @@ -8102,7 +8438,6 @@ L_08B6BB84: } L_08B6BB90: ctx.gpr[31] = (0x08B6BB98u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6BB98u) goto L_08B6BB98; AOT_REGCACHE_SYNC_OUT(); return; L_08B6BB98: @@ -8132,7 +8467,6 @@ L_08B6BBB0: goto L_08B6BBBC; L_08B6BBBC: ctx.gpr[31] = (0x08B6BBC4u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6BBC4u) goto L_08B6BBC4; AOT_REGCACHE_SYNC_OUT(); return; L_08B6BBC4: @@ -8140,7 +8474,6 @@ L_08B6BBC4: goto L_08B6BBC8; L_08B6BBC8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6BBD8; } @@ -8163,7 +8496,17 @@ L_08B6BBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BBEC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -8219,7 +8562,6 @@ L_08B6BC5C: goto L_08B6BC60; L_08B6BC60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6BC70; } @@ -8242,7 +8584,17 @@ L_08B6BC70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BC84: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_5 - aot_gpr_4); @@ -8250,11 +8602,20 @@ L_08B6BC84: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_5); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BCA0: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -8271,7 +8632,17 @@ L_08B6BCA0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BCD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -8318,7 +8689,17 @@ L_08B6BD28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BD34: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -8396,7 +8777,17 @@ L_08B6BDD0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BDE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -8406,7 +8797,17 @@ L_08B6BDE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6BDFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -8478,7 +8879,6 @@ L_08B6BEAC: AOT_REGCACHE_SYNC_OUT(); return; L_08B6BEC0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0218_entry, 218u, 4u, 0x08B6C038u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -8489,7 +8889,6 @@ L_08B6BEC8: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[9] = (0u | 1u); goto L_08B6BEE4; @@ -8500,7 +8899,6 @@ L_08B6BEE4: goto L_08B6BEE8; L_08B6BEE8: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B6BF70; } @@ -8524,7 +8922,6 @@ L_08B6BF00: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_7 = (0u | 1u); goto L_08B6BF18; @@ -8535,7 +8932,6 @@ L_08B6BF18: goto L_08B6BF1C; L_08B6BF1C: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B6BF2C; } @@ -8567,7 +8963,6 @@ L_08B6BF3C: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (0u | 1u); goto L_08B6BF54; @@ -8578,7 +8973,6 @@ L_08B6BF54: goto L_08B6BF58; L_08B6BF58: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6BF68; } @@ -8618,7 +9012,6 @@ L_08B6BF80: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_6 = (0u | 1u); goto L_08B6BF98; @@ -8629,7 +9022,6 @@ L_08B6BF98: goto L_08B6BF9C; L_08B6BF9C: { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6BFAC; } @@ -8661,7 +9053,6 @@ L_08B6BFBC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_7 = (0u | 1u); goto L_08B6BFD4; @@ -8672,7 +9063,6 @@ L_08B6BFD4: goto L_08B6BFD8; L_08B6BFD8: { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B6BFE8; } diff --git a/profiles/vcs/generated/generated_unit_0218.cpp b/profiles/vcs/generated/generated_unit_0218.cpp index d34c4e7..3713008 100644 --- a/profiles/vcs/generated/generated_unit_0218.cpp +++ b/profiles/vcs/generated/generated_unit_0218.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0218[4072] = { - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 6, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 9, 10, 0, 0, 0, 11, - 0, 12, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 25, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 0, 0, 0, 0, 0, 41, 0, 42, - 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, 0, 0, 54, 55, 0, 56, - 0, 0, 57, 0, 58, 0, 59, 0, 60, 0, 0, 0, 0, 61, 62, 0, 63, 0, 0, 0, 64, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, - 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 0, 75, 0, 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 79, 0, 0, 0, 0, - 0, 0, 80, 81, 0, 82, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, - 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 0, 88, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 93, 0, 0, 0, 0, 94, 95, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 103, - 0, 0, 0, 104, 0, 0, 105, 0, 0, 0, 0, 106, 0, 0, 107, 0, 0, 108, 109, 0, 0, 110, 0, 0, 111, 0, 112, 0, 113, 0, 0, 114, - 115, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, - 0, 0, 0, 0, 119, 0, 0, 120, 0, 121, 0, 0, 0, 0, 0, 122, 0, 0, 0, 123, 0, 0, 124, 0, 0, 125, 0, 0, 126, 0, 0, 127, - 0, 0, 128, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 130, 0, 0, 0, 131, 0, 0, 132, 0, 133, 0, 0, 0, 134, 0, 0, 135, - 136, 0, 137, 0, 0, 138, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 141, 142, 0, 143, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 146, - 0, 0, 147, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 150, 0, 0, 151, 0, 0, 0, 0, 152, 0, 0, 153, 0, 0, 154, - 0, 155, 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 158, 0, 0, 159, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, - 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 164, 0, 165, 0, 0, 0, 166, 0, 167, 0, 0, 0, 0, 0, 0, 0, - 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 170, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 171, 172, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, - 176, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, - 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 182, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 190, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 194, - 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 200, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 204, 0, 0, 205, 0, 0, 0, 206, 0, 207, 0, 208, 0, 0, 209, 0, 0, 0, 210, 0, 211, 212, 0, 213, 0, 214, - 0, 0, 215, 0, 216, 0, 217, 218, 0, 219, 0, 220, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 223, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 225, 0, 0, 0, 226, 0, 0, 0, 227, 0, 0, 0, 0, 0, 228, 0, 0, 0, 229, 0, 0, 230, - 0, 231, 0, 232, 0, 0, 233, 234, 0, 235, 0, 0, 236, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, - 0, 240, 0, 0, 241, 0, 0, 242, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 246, 0, 0, 0, 0, 0, 247, - 0, 0, 0, 248, 0, 0, 249, 0, 250, 0, 251, 0, 0, 252, 253, 0, 254, 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, - 257, 258, 0, 0, 259, 0, 260, 0, 0, 261, 0, 262, 0, 0, 263, 0, 264, 0, 0, 265, 0, 266, 0, 267, 0, 0, 0, 0, 0, 0, 0, 268, - 0, 269, 0, 270, 271, 0, 272, 0, 273, 0, 0, 0, 274, 0, 275, 0, 0, 0, 276, 0, 277, 278, 0, 0, 279, 0, 280, 0, 281, 0, 0, 0, - 0, 0, 0, 0, 282, 283, 0, 0, 284, 0, 285, 0, 0, 286, 0, 287, 0, 0, 288, 0, 289, 0, 0, 290, 0, 291, 0, 292, 0, 0, 0, 0, - 0, 0, 0, 293, 0, 294, 0, 295, 296, 0, 297, 0, 298, 0, 0, 0, 299, 0, 300, 0, 0, 0, 301, 0, 302, 303, 0, 0, 304, 0, 305, 0, - 306, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 309, 0, 0, 0, 310, 0, 0, 0, 311, 0, 0, 0, 0, 0, 312, 0, - 0, 0, 313, 0, 0, 314, 0, 315, 0, 316, 0, 0, 317, 318, 0, 319, 0, 0, 320, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 322, 0, - 0, 0, 323, 0, 0, 0, 0, 324, 0, 0, 325, 0, 0, 326, 0, 327, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, - 0, 330, 0, 0, 331, 0, 332, 0, 0, 0, 0, 333, 0, 0, 0, 334, 0, 0, 335, 0, 0, 0, 336, 0, 0, 337, 0, 0, 338, 0, 339, 0, - 0, 340, 0, 0, 0, 341, 0, 0, 342, 0, 0, 343, 0, 0, 344, 0, 0, 345, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 347, 348, 0, 349, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 0, 353, 0, 0, 354, 0, 355, 0, 0, 356, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 358, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 0, 361, 0, 0, 362, 0, 0, - 0, 363, 0, 0, 364, 0, 365, 366, 0, 367, 0, 368, 0, 0, 0, 0, 369, 0, 0, 0, 370, 0, 0, 371, 0, 0, 372, 0, 0, 373, 0, 0, - 374, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, 377, 0, 0, 378, 0, 379, 0, 380, 0, 0, 0, 0, 0, 381, 0, 0, 0, - 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, 0, 0, 0, 384, 0, 0, 385, 0, 386, 0, 0, 0, 0, 387, 0, 0, 388, 389, 0, 390, 0, 391, - 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, - 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 396, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 399, 0, 400, 0, 0, - 0, 0, 0, 0, 0, 401, 402, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 405, 0, 0, 406, 0, 0, 407, 0, 0, 0, 0, 0, 408, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, 410, 0, 0, 0, 411, 0, 412, 0, 0, 0, 413, 0, 0, 0, 0, 414, 0, 0, 0, - 415, 0, 0, 416, 0, 0, 417, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 419, 420, 0, 0, 0, 0, 0, 0, 421, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 424, 0, 0, 0, 425, 0, 426, 0, 0, 427, 0, 0, 0, - 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 430, 0, 0, 431, 432, 0, 433, - 0, 0, 434, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 439, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 0, 442, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 445, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, - 0, 448, 0, 449, 0, 0, 0, 450, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 453, 0, 0, 0, 454, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 455, 0, 456, 0, 0, 0, 0, 0, 0, 457, 0, 458, 0, 0, 459, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 461, - 0, 462, 0, 0, 0, 0, 0, 0, 463, 0, 464, 0, 0, 0, 465, 0, 0, 466, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 470, 0, 0, 0, 471, 0, 0, 472, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 478, 0, 0, 0, 0, 0, 0, - 479, 0, 480, 0, 0, 0, 481, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 483, 0, 484, 0, 485, 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 487, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 490, 0, 0, 0, 0, 0, 0, 491, 0, 492, 0, 493, 0, 0, 494, - 0, 0, 0, 495, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 499, 500, 0, 0, 0, 501, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 0, 0, 503, 0, 0, 0, 0, 0, 0, 0, 0, 504, - 0, 0, 505, 0, 0, 506, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 508, 509, 0, 0, 0, 0, 0, 510, 0, 0, 511, 0, 512, 0, - 0, 513, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 516, 0, 517, 518, 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, 0, 0, 520, - 0, 0, 521, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, - 0, 0, 0, 0, 0, 0, 526, 0, 0, 0, 527, 0, 528, 0, 0, 529, 0, 530, 531, 0, 0, 0, 0, 0, 0, 0, 532, 0, 0, 0, 533, 0, - 0, 0, 534, 0, 0, 535, 0, 536, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 539, 0, 0, 0, 0, 540, 0, 0, 541, - 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 545, 0, - 0, 0, 546, 0, 0, 547, 0, 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, - 553, 0, 0, 554, 0, 0, 0, 555, 0, 556, 0, 0, 0, 0, 557, 0, 0, 0, 558, 0, 0, 0, 559, 560, 0, 0, 561, 0, 562, 0, 0, 0, - 0, 0, 563, 0, 0, 0, 564, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, 0, 0, 567, 0, 0, 568, 0, 0, 0, 569, 0, 570, - 0, 0, 571, 572, 0, 0, 573, 0, 574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 576, 0, 0, 577, 0, 578, 0, 0, - 579, 0, 0, 580, 0, 581, 582, 0, 0, 583, 0, 0, 584, 0, 0, 0, 585, 0, 586, 0, 587, 0, 0, 0, 0, 588, 589, 0, 590, 0, 0, 591, - 0, 0, 0, 0, 592, 0, 593, 0, 594, 0, 595, 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 597, 0, 0, 0, 0, 598, - 599, 0, 0, 600, 0, 601, 0, 0, 602, 0, 603, 0, 0, 604, 0, 605, 0, 0, 606, 0, 607, 0, 608, 0, 0, 0, 609, 0, 610, 0, 611, 612, - 0, 613, 0, 614, 0, 0, 0, 615, 0, 616, 0, 0, 0, 617, 0, 618, 619, 0, 0, 620, 0, 621, 0, 622, 0, 0, 0, 0, 623, 0, 0, 0, - 0, 0, 0, 624, 0, 625, 0, 0, 0, 0, 0, 0, 626, 0, 0, 0, 627, 628, 0, 629, 0, 630, 0, 0, 0, 0, 631, 632, 0, 0, 633, 0, - 634, 0, 0, 635, 0, 636, 0, 0, 637, 0, 638, 0, 0, 639, 0, 640, 0, 641, 0, 0, 0, 642, 0, 643, 0, 644, 645, 0, 646, 0, 647, 0, - 0, 0, 648, 0, 649, 0, 0, 0, 650, 0, 651, 652, 0, 0, 653, 0, 654, 0, 655, 0, 0, 656, 0, 0, 0, 657, 0, 0, 0, 0, 0, 658, - 0, 0, 0, 0, 0, 659, 0, 660, 661, 0, 662, 0, 0, 0, 0, 0, 0, 663, 0, 0, 664, 0, 0, 0, 665, 0, 0, 666, 0, 667, 668, 0, - 669, 0, 670, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 672, 0, 0, 673, 0, 0, 0, 0, 674, 0, 0, 675, 0, 676, 677, 0, 678, 0, - 679, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, 0, 682, 683, 0, 0, 0, 684, 0, 0, 0, 0, 0, - 685, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 687, 0, 0, 0, 688, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 692, 0, - 0, 0, 0, 693, 0, 0, 0, 0, 694, 0, 0, 0, 695, 0, 0, 696, 0, 0, 0, 0, 697, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, - 699, 0, 0, 700, 0, 701, 0, 0, 0, 702, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 704, 0, 0, 0, 0, 0, 0, 705, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 707, 708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 712, 713, 0, 0, 0, 0, 714, 0, 0, 0, 0, 0, 0, 0, 0, 715, - 0, 0, 0, 0, 0, 0, 716, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 721, 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 726, 0, 0, - 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, - 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, 732, 733, 0, 734, 0, 0, 735, 0, 736, 0, 0, 0, 0, 737, - 738, 0, 0, 0, 0, 739, 0, 0, 0, 0, 740, 741, 0, 742, 0, 0, 743, 744, 0, 745, 0, 746, 0, 747, 0, 748, 0, 749, 750, 0, 751, 752, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, - 0, 0, 755, 756, 0, 0, 0, 757, 0, 0, 0, 758, 0, 0, 759, 0, 760, 0, 0, 0, 0, 761, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, 765, 766, 0, 0, 0, 767, 0, - 0, 0, 768, 0, 0, 769, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 772, 0, 0, 773, 0, 0, 0, 0, 0, - 0, 774, 0, 775, 776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 781, 0, 782, 0, - 0, 0, 0, 0, 0, 0, 0, 783, 0, 784, 0, 0, 0, 785, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, - 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, 0, 0, 791, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, - 0, 0, 0, 0, 0, 0, 0, 793, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0218[64] = { + 0x8C40000482006041ull, 0x0041141100000582ull, 0x0004054100080002ull, 0x8000500000D82802ull, + 0x180000B0A0A00000ull, 0xB0A8000480000002ull, 0x4002080000916154ull, 0x0A00409400084A04ull, + 0x080092404008042Cull, 0x82460082002C2A00ull, 0x2008000595264848ull, 0x9148820492488290ull, + 0x8100200016080425ull, 0x0409401292122014ull, 0x0280000101452408ull, 0x8010400301200580ull, + 0x0030120041000C04ull, 0x2008200180900104ull, 0xAD12A24010400301ull, 0x9104444082080AD4ull, + 0x82204292110212CAull, 0x80A94A5301096548ull, 0x0A94A5301534515Aull, 0x41111021534515A8ull, + 0x0810A4844084B2A4ull, 0x0012492252448852ull, 0x240816000949122Cull, 0x1054880924910AD2ull, + 0x10010010AC852208ull, 0x824884602A002410ull, 0x20601049108A2080ull, 0xB202000412888080ull, + 0x4044204010815004ull, 0x0888048A04012000ull, 0x00224502810940A0ull, 0x0281080200891402ull, + 0x95028108022A0445ull, 0x8040423002004048ull, 0x80869022520C0424ull, 0x4406944020082084ull, + 0x44000840908410A4ull, 0x1002008020004024ull, 0xA24400C414C44289ull, 0x961512692910014Cull, + 0xD454A52984008550ull, 0x4C2B102810A9A28Aull, 0x82254D1456A2A529ull, 0x5A424085691205A0ull, + 0x8001884104640021ull, 0x0090910841000000ull, 0x000C028100004229ull, 0x0000000000000000ull, + 0x0000100200000001ull, 0x8043000000000000ull, 0x2004000000080440ull, 0x0000000000000000ull, + 0x0402004020810086ull, 0xDAAB2C21852C4008ull, 0x0421488C40001000ull, 0x048800A446200020ull, + 0x800000200001001Aull, 0x5100000000000000ull, 0x8100802020082280ull, 0x0000008080000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0218[64] = { + 1u, 12u, 22u, 29u, 39u, 48u, 57u, 69u, 80u, 91u, 104u, 119u, 136u, 147u, 161u, 171u, + 181u, 190u, 199u, 215u, 231u, 248u, 269u, 293u, 313u, 330u, 347u, 363u, 382u, 395u, 409u, 422u, + 434u, 445u, 455u, 468u, 479u, 495u, 505u, 521u, 534u, 546u, 553u, 571u, 592u, 613u, 634u, 659u, + 679u, 691u, 699u, 709u, 709u, 712u, 716u, 721u, 721u, 730u, 753u, 763u, 774u, 780u, 783u, 792u, }; void recomp_unit_0218_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +50,25 @@ void recomp_unit_0218_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B6C000u; - entry_id = (entry_delta < 16288u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0218[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16288u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0218[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0218[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B6C000; @@ -979,7 +886,6 @@ L_08B6C018: aot_gpr_5 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < 17 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 765u, 0x08B6BE58u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } @@ -1006,7 +912,17 @@ L_08B6C038: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C064: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); @@ -1022,7 +938,17 @@ L_08B6C07C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C088: aot_gpr_29 = (aot_gpr_29 + static_cast(-80)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -1071,7 +997,6 @@ L_08B6C104: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[19] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08B6C11C; @@ -1082,7 +1007,6 @@ L_08B6C11C: goto L_08B6C120; L_08B6C120: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6C180; } @@ -1114,7 +1038,6 @@ L_08B6C180: ctx.gpr[19] = (ctx.gpr[19] + static_cast(12)); aot_gpr_4 = (ctx.gpr[19] < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6C0EC; } @@ -1172,7 +1095,17 @@ L_08B6C1D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C204: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -1187,7 +1120,6 @@ L_08B6C204: aot_gpr_5 = (ctx.lo); aot_gpr_5 = (static_cast(aot_gpr_5) < 2 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6C2A8; } @@ -1247,7 +1179,17 @@ L_08B6C2A8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C2C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); @@ -1262,7 +1204,6 @@ L_08B6C2C8: ctx.gpr[8] = (ctx.gpr[8] + static_cast(2)); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B6C3B0; } @@ -1294,7 +1235,6 @@ L_08B6C334: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[2] + static_cast(0))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[9] = (0u | 1u); goto L_08B6C34C; @@ -1305,7 +1245,6 @@ L_08B6C34C: goto L_08B6C350; L_08B6C350: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B6C35C; } @@ -1334,7 +1273,6 @@ L_08B6C35C: ctx.gpr[8] = (ctx.gpr[8] + static_cast(2)); ctx.gpr[9] = (static_cast(ctx.gpr[8]) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = ctx.gpr[9] != 0u; - // nop if (branch_taken) { goto L_08B6C304; } @@ -1342,7 +1280,6 @@ L_08B6C35C: } L_08B6C3B0: { const bool branch_taken = aot_gpr_6 != ctx.gpr[8]; - // nop if (branch_taken) { goto L_08B6C3FC; } @@ -1418,7 +1355,6 @@ L_08B6C474: L_08B6C47C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[11] + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[2] = (0u | 1u); goto L_08B6C490; @@ -1469,7 +1405,17 @@ L_08B6C4F0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C504: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), ctx.gpr[31]); @@ -1507,7 +1453,17 @@ L_08B6C57C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C588: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); ctx.gpr[8] = (aot_gpr_5 | 0u); @@ -1546,7 +1502,6 @@ L_08B6C5D4: L_08B6C5DC: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_14 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_5 = (0u | 1u); goto L_08B6C5F0; @@ -1557,7 +1512,6 @@ L_08B6C5F0: goto L_08B6C5F4; L_08B6C5F4: { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6C608; } @@ -1593,7 +1547,6 @@ L_08B6C618: L_08B6C620: aot_fpr_14 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 <= aot_fpr_14)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[10] = (0u | 1u); goto L_08B6C634; @@ -1604,7 +1557,6 @@ L_08B6C634: goto L_08B6C638; L_08B6C638: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B6C650; } @@ -1662,7 +1614,17 @@ L_08B6C6AC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C6C4: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -1698,7 +1660,6 @@ L_08B6C708: goto L_08B6C99C; L_08B6C724: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6C738; } @@ -1721,7 +1682,17 @@ L_08B6C738: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[10]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[30], ctx.gpr[31]}; @@ -1737,7 +1708,6 @@ L_08B6C74C: } L_08B6C788: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6C8BC; } @@ -1746,7 +1716,6 @@ L_08B6C788: L_08B6C790: ctx.gpr[18] = (aot_gpr_16 + static_cast(12)); { const bool branch_taken = ctx.gpr[18] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6C8BC; } @@ -1790,7 +1759,6 @@ L_08B6C7EC: aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { aot_gpr_4 = (0u | 1u); goto L_08B6C808; @@ -1822,7 +1790,6 @@ L_08B6C828: { const std::int32_t dividend = static_cast(aot_gpr_5); const std::int32_t divisor = static_cast(ctx.gpr[23]); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } aot_gpr_5 = (ctx.lo); { const bool branch_taken = static_cast(aot_gpr_5) <= 0; - // nop if (branch_taken) { goto L_08B6C878; } @@ -1867,7 +1834,6 @@ L_08B6C898: L_08B6C8A4: ctx.gpr[18] = (ctx.gpr[22] | 0u); { const bool branch_taken = ctx.gpr[18] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6C7B8; } @@ -1897,7 +1863,17 @@ L_08B6C8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C8EC: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_fpr_12 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); @@ -1930,7 +1906,6 @@ L_08B6C92C: L_08B6C934: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_7 + static_cast(0))); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 <= aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[10] = (0u | 1u); goto L_08B6C948; @@ -1941,7 +1916,6 @@ L_08B6C948: goto L_08B6C94C; L_08B6C94C: { const bool branch_taken = ctx.gpr[10] == 0u; - // nop if (branch_taken) { goto L_08B6C984; } @@ -1973,7 +1947,17 @@ L_08B6C984: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C99C: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31], aot_gpr_7}; @@ -1981,7 +1965,6 @@ L_08B6C99C: aot_gpr_16 = (aot_gpr_5 | 0u); ctx.gpr[18] = (aot_gpr_4 | 0u); { const bool branch_taken = ctx.gpr[18] == aot_gpr_16; - // nop if (branch_taken) { goto L_08B6C9E4; } @@ -1999,7 +1982,6 @@ L_08B6C9C8: L_08B6C9D8: ctx.gpr[18] = (ctx.gpr[18] + static_cast(12)); { const bool branch_taken = ctx.gpr[18] != aot_gpr_16; - // nop if (branch_taken) { goto L_08B6C9C8; } @@ -2018,7 +2000,17 @@ L_08B6C9E4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6C9FC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -2032,13 +2024,22 @@ L_08B6CA0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CA18: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(4))); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_4 = (aot_gpr_7 + aot_gpr_4); { const bool branch_taken = aot_gpr_6 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6CA7C; } @@ -2052,7 +2053,6 @@ L_08B6CA2C: L_08B6CA38: ctx.gpr[9] = (aot_gpr_7 | 0u); { const bool branch_taken = ctx.gpr[9] == aot_gpr_5; - // nop if (branch_taken) { goto L_08B6CA70; } @@ -2064,7 +2064,6 @@ L_08B6CA44: L_08B6CA48: ctx.gpr[10] = (static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(ctx.gpr[9] + static_cast(0)))))); { const bool branch_taken = ctx.gpr[8] == ctx.gpr[10]; - // nop if (branch_taken) { goto L_08B6CA68; } @@ -2073,7 +2072,6 @@ L_08B6CA48: L_08B6CA54: ctx.gpr[9] = (ctx.gpr[9] + static_cast(1)); { const bool branch_taken = ctx.gpr[9] != aot_gpr_5; - // nop if (branch_taken) { goto L_08B6CA48; } @@ -2081,7 +2079,6 @@ L_08B6CA54: } L_08B6CA60: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6CA70; } @@ -2098,7 +2095,6 @@ L_08B6CA68: L_08B6CA70: aot_gpr_6 = (aot_gpr_6 + static_cast(1)); { const bool branch_taken = aot_gpr_6 != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6CA38; } @@ -2109,11 +2105,20 @@ L_08B6CA7C: goto L_08B6CA80; L_08B6CA80: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CA88: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -2187,7 +2192,17 @@ L_08B6CB24: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CB3C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -2234,7 +2249,17 @@ L_08B6CB7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CB88: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2254,7 +2279,6 @@ L_08B6CBA4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(32)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6CBD8; } @@ -2328,7 +2352,17 @@ L_08B6CC14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CC28: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 2080u); @@ -2338,7 +2372,6 @@ L_08B6CC28: aot_gpr_5 = (ctx.lo); aot_gpr_6 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6CC64; } @@ -2361,11 +2394,20 @@ L_08B6CC64: goto L_08B6CC68; L_08B6CC68: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CC70: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(28), aot_gpr_16); @@ -2442,7 +2484,17 @@ L_08B6CD10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CD34: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -2481,7 +2533,6 @@ L_08B6CD64: L_08B6CD70: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6CD84; } @@ -2489,7 +2540,6 @@ L_08B6CD70: } L_08B6CD7C: ctx.gpr[31] = (0x08B6CD84u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6CD84u) goto L_08B6CD84; AOT_REGCACHE_SYNC_OUT(); return; L_08B6CD84: @@ -2499,7 +2549,17 @@ L_08B6CD84: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CD90: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); { const std::uint32_t aot_run_words[5]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[31]}; @@ -2515,7 +2575,6 @@ L_08B6CD90: } L_08B6CDB8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6CE0C; } @@ -2524,7 +2583,6 @@ L_08B6CDB8: L_08B6CDC0: ctx.gpr[19] = (ctx.gpr[18] + static_cast(2)); { const bool branch_taken = ctx.gpr[19] == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6CE0C; } @@ -2551,7 +2609,6 @@ L_08B6CDE8: aot_mem.aot_direct_store16(aot_gpr_4 + static_cast(0), static_cast(aot_gpr_6)); ctx.gpr[19] = (ctx.gpr[19] + static_cast(2)); { const bool branch_taken = ctx.gpr[19] != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6CDCC; } @@ -2571,7 +2628,17 @@ L_08B6CE0C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CE28: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -2588,7 +2655,6 @@ L_08B6CE34: } L_08B6CE40: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B6CE58; } @@ -2653,11 +2719,20 @@ L_08B6CE80: goto L_08B6CEDC; L_08B6CEDC: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CEE4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 20u); @@ -2672,7 +2747,6 @@ L_08B6CEE4: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6CF20; } @@ -2683,11 +2757,20 @@ L_08B6CF1C: goto L_08B6CF20; L_08B6CF20: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CF28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2699,7 +2782,6 @@ L_08B6CF28: { const std::int64_t product = static_cast(static_cast(aot_gpr_16)) * static_cast(static_cast(aot_gpr_4)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } aot_gpr_4 = (ctx.lo); ctx.gpr[31] = (0x08B6CF54u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0174_entry, 174u, 468u, 0x08ABE29Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6CF54u) goto L_08B6CF54; AOT_REGCACHE_SYNC_OUT(); return; L_08B6CF54: @@ -2755,7 +2837,17 @@ L_08B6CFB8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6CFD0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2823,7 +2915,17 @@ L_08B6D060: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D078: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2891,7 +2993,17 @@ L_08B6D108: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D120: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -2960,7 +3072,17 @@ L_08B6D1B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D1CC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -3027,7 +3149,17 @@ L_08B6D258: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D270: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[17]); @@ -3092,7 +3224,6 @@ L_08B6D2D0: } L_08B6D2E0: ctx.gpr[31] = (0x08B6D2E8u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D2E8u) goto L_08B6D2E8; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D2E8: @@ -3100,7 +3231,6 @@ L_08B6D2E8: goto L_08B6D2EC; L_08B6D2EC: { const bool branch_taken = ctx.gpr[18] != ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B6D2B4; } @@ -3129,7 +3259,6 @@ L_08B6D308: goto L_08B6D310; L_08B6D310: ctx.gpr[31] = (0x08B6D318u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D318u) goto L_08B6D318; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D318: @@ -3137,7 +3266,6 @@ L_08B6D318: goto L_08B6D31C; L_08B6D31C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D32C; } @@ -3163,14 +3291,23 @@ L_08B6D32C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D34C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[31]); aot_gpr_16 = (aot_gpr_4 | 0u); ctx.gpr[31] = (0x08B6D364u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 624u, 0x08B6B464u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D364u) goto L_08B6D364; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D364: @@ -3183,7 +3320,17 @@ L_08B6D364: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D37C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3233,7 +3380,6 @@ L_08B6D3C8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D404; } @@ -3243,7 +3389,6 @@ L_08B6D3E0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D404; } @@ -3252,7 +3397,6 @@ L_08B6D3E0: L_08B6D3F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D404; } @@ -3260,7 +3404,6 @@ L_08B6D3F0: } L_08B6D3FC: ctx.gpr[31] = (0x08B6D404u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D404u) goto L_08B6D404; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D404: @@ -3305,7 +3448,17 @@ L_08B6D430: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D444: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -3345,7 +3498,6 @@ L_08B6D484: L_08B6D490: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D4A4; } @@ -3368,7 +3520,17 @@ L_08B6D4A4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D4B8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3398,7 +3560,6 @@ L_08B6D4E4: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D520; } @@ -3408,7 +3569,6 @@ L_08B6D4FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D520; } @@ -3417,7 +3577,6 @@ L_08B6D4FC: L_08B6D50C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D520; } @@ -3425,7 +3584,6 @@ L_08B6D50C: } L_08B6D518: ctx.gpr[31] = (0x08B6D520u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D520u) goto L_08B6D520; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D520: @@ -3470,7 +3628,17 @@ L_08B6D54C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D560: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_gpr_5 - aot_gpr_4); @@ -3665,7 +3833,17 @@ L_08B6D668: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D670: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_gpr_5 - aot_gpr_4); @@ -3860,7 +4038,17 @@ L_08B6D778: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D780: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -3870,7 +4058,17 @@ L_08B6D780: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D794: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -3920,7 +4118,6 @@ L_08B6D7E0: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D81C; } @@ -3930,7 +4127,6 @@ L_08B6D7F8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D81C; } @@ -3939,7 +4135,6 @@ L_08B6D7F8: L_08B6D808: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D81C; } @@ -3947,7 +4142,6 @@ L_08B6D808: } L_08B6D814: ctx.gpr[31] = (0x08B6D81Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D81Cu) goto L_08B6D81C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D81C: @@ -3992,7 +4186,17 @@ L_08B6D848: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D85C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -4032,7 +4236,6 @@ L_08B6D89C: L_08B6D8A8: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D8BC; } @@ -4055,7 +4258,17 @@ L_08B6D8BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D8D0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{aot_gpr_16, ctx.gpr[17], ctx.gpr[31]}; @@ -4080,7 +4293,6 @@ L_08B6D8EC: L_08B6D904: aot_gpr_4 = (aot_gpr_16 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6D918; } @@ -4103,7 +4315,17 @@ L_08B6D918: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D92C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4141,7 +4363,6 @@ L_08B6D958: L_08B6D964: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6D978; } @@ -4149,7 +4370,6 @@ L_08B6D964: } L_08B6D970: ctx.gpr[31] = (0x08B6D978u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6D978u) goto L_08B6D978; AOT_REGCACHE_SYNC_OUT(); return; L_08B6D978: @@ -4159,7 +4379,17 @@ L_08B6D978: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D984: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4206,7 +4436,17 @@ L_08B6D9C4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6D9D0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 96u); @@ -4221,7 +4461,6 @@ L_08B6D9D0: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6DA0C; } @@ -4232,11 +4471,20 @@ L_08B6DA08: goto L_08B6DA0C; L_08B6DA0C: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DA14: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4274,7 +4522,6 @@ L_08B6DA40: L_08B6DA4C: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6DA60; } @@ -4282,7 +4529,6 @@ L_08B6DA4C: } L_08B6DA58: ctx.gpr[31] = (0x08B6DA60u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6DA60u) goto L_08B6DA60; AOT_REGCACHE_SYNC_OUT(); return; L_08B6DA60: @@ -4292,7 +4538,17 @@ L_08B6DA60: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DA6C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 96u); @@ -4307,7 +4563,6 @@ L_08B6DA6C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6DAA8; } @@ -4318,11 +4573,20 @@ L_08B6DAA4: goto L_08B6DAA8; L_08B6DAA8: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DAB0: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 96u); @@ -4330,11 +4594,20 @@ L_08B6DAB0: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DACC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4376,7 +4649,6 @@ L_08B6DB04: goto L_08B6DB10; L_08B6DB10: ctx.gpr[31] = (0x08B6DB18u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6DB18u) goto L_08B6DB18; AOT_REGCACHE_SYNC_OUT(); return; L_08B6DB18: @@ -4384,7 +4656,6 @@ L_08B6DB18: goto L_08B6DB1C; L_08B6DB1C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6DB2C; } @@ -4407,7 +4678,17 @@ L_08B6DB2C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DB40: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[31]); @@ -4454,7 +4735,17 @@ L_08B6DB80: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DB8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4510,7 +4801,17 @@ L_08B6DBD8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DBF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -4530,7 +4831,6 @@ L_08B6DC0C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(72)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6DC40; } @@ -4581,7 +4881,6 @@ L_08B6DC68: goto L_08B6DC6C; L_08B6DC6C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6DC7C; } @@ -4604,7 +4903,17 @@ L_08B6DC7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DC90: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -4621,7 +4930,17 @@ L_08B6DC90: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DCC0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_7); @@ -4672,7 +4991,17 @@ L_08B6DD28: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DD34: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4747,7 +5076,6 @@ L_08B6DDCC: L_08B6DDD8: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6DDFC; } @@ -4791,7 +5119,6 @@ L_08B6DE34: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B6DED8; } @@ -4838,7 +5165,6 @@ L_08B6DE80: L_08B6DE8C: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6DEB0; } @@ -4897,7 +5223,17 @@ L_08B6DEF4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DF1C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[31]}; @@ -4920,7 +5256,6 @@ L_08B6DF4C: aot_gpr_4 = (aot_gpr_16 + static_cast(8)); ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_16 == 0u; - // nop if (branch_taken) { goto L_08B6DF64; } @@ -4934,7 +5269,6 @@ L_08B6DF5C: L_08B6DF64: aot_gpr_16 = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B6DF3C; } @@ -4953,7 +5287,17 @@ L_08B6DF70: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6DF88: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -4999,7 +5343,6 @@ L_08B6DFF0: goto L_08B6DFF4; L_08B6DFF4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B6DFC4; } @@ -5008,7 +5351,6 @@ L_08B6DFF4: L_08B6DFFC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E070; } @@ -5024,7 +5366,6 @@ L_08B6E008: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6E040; } @@ -5073,7 +5414,6 @@ L_08B6E070: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E0C8; } @@ -5120,7 +5460,17 @@ L_08B6E0D8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E0F8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -5141,7 +5491,6 @@ L_08B6E0F8: L_08B6E134: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E18C; } @@ -5157,7 +5506,6 @@ L_08B6E140: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E1A8; } @@ -5174,7 +5522,6 @@ L_08B6E168: goto L_08B6DD34; L_08B6E184: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5204,7 +5551,6 @@ L_08B6E1A8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E240; } @@ -5214,14 +5560,12 @@ L_08B6E1CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_4); ctx.gpr[31] = (0x08B6E1DCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6E1DCu) goto L_08B6E1DC; AOT_REGCACHE_SYNC_OUT(); return; L_08B6E1DC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[2]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6E21C; } @@ -5237,7 +5581,6 @@ L_08B6E1EC: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6E24C; } @@ -5245,7 +5588,6 @@ L_08B6E1EC: } L_08B6E214: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E2A8; } @@ -5262,7 +5604,6 @@ L_08B6E21C: goto L_08B6DD34; L_08B6E238: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5282,7 +5623,6 @@ L_08B6E24C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6E284; } @@ -5299,7 +5639,6 @@ L_08B6E260: goto L_08B6DD34; L_08B6E27C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5316,7 +5655,6 @@ L_08B6E284: goto L_08B6DD34; L_08B6E2A0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5341,7 +5679,6 @@ L_08B6E2C4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B6E34C; } @@ -5359,7 +5696,6 @@ L_08B6E2D4: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E330; } @@ -5378,7 +5714,6 @@ L_08B6E304: goto L_08B6DD34; L_08B6E328: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5403,7 +5738,6 @@ L_08B6E34C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_4); ctx.gpr[31] = (0x08B6E35Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 401u, 0x08B6A64Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6E35Cu) goto L_08B6E35C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6E35C: @@ -5416,7 +5750,6 @@ L_08B6E35C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(0))); ctx.gpr[19] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B6E408; } @@ -5432,7 +5765,6 @@ L_08B6E384: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E408; } @@ -5443,7 +5775,6 @@ L_08B6E3AC: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6E3E4; } @@ -5460,7 +5791,6 @@ L_08B6E3C0: goto L_08B6DD34; L_08B6E3DC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5477,7 +5807,6 @@ L_08B6E3E4: goto L_08B6DD34; L_08B6E400: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5487,14 +5816,12 @@ L_08B6E408: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_4); ctx.gpr[31] = (0x08B6E418u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6E418u) goto L_08B6E418; AOT_REGCACHE_SYNC_OUT(); return; L_08B6E418: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[2]); aot_gpr_4 = (ctx.gpr[19] < static_cast(1) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B6E444; } @@ -5511,7 +5838,6 @@ L_08B6E428: goto L_08B6E444; L_08B6E444: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B6E4E8; } @@ -5519,7 +5845,6 @@ L_08B6E444: } L_08B6E44C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6E4E8; } @@ -5529,7 +5854,6 @@ L_08B6E454: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B6E48C; } @@ -5545,7 +5869,6 @@ L_08B6E464: aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6E4E8; } @@ -5556,7 +5879,6 @@ L_08B6E48C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6E4C4; } @@ -5573,7 +5895,6 @@ L_08B6E4A0: goto L_08B6DD34; L_08B6E4BC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5590,7 +5911,6 @@ L_08B6E4C4: goto L_08B6DD34; L_08B6E4E0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E518; } @@ -5598,7 +5918,6 @@ L_08B6E4E0: } L_08B6E4E8: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B6E4FC; } @@ -5643,7 +5962,17 @@ L_08B6E518: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E538: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -5709,7 +6038,17 @@ L_08B6E5B8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E5D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5719,7 +6058,6 @@ L_08B6E5D8: ctx.gpr[17] = (aot_gpr_16 + static_cast(16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(8), ctx.gpr[31]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6E614; } @@ -5733,7 +6071,6 @@ L_08B6E5FC: L_08B6E608: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6E5FC; } @@ -5751,7 +6088,17 @@ L_08B6E614: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E628: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5773,7 +6120,6 @@ L_08B6E64C: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(4))); ctx.gpr[8] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_13 < aot_fpr_12)) ? 0x00800000u : 0u); - // nop if (!((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[8] = (0u | 1u); goto L_08B6E664; @@ -5782,7 +6128,6 @@ L_08B6E64C: L_08B6E664: ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B6E678; } @@ -5790,7 +6135,6 @@ L_08B6E664: } L_08B6E670: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E684; } @@ -5799,7 +6143,6 @@ L_08B6E670: L_08B6E678: aot_gpr_16 = (aot_mem.aot_direct_load32(aot_gpr_16 + static_cast(12))); { const bool branch_taken = aot_gpr_16 != aot_gpr_7; - // nop if (branch_taken) { goto L_08B6E64C; } @@ -5809,7 +6152,6 @@ L_08B6E684: ctx.gpr[17] = (aot_gpr_6 | 0u); aot_gpr_4 = (aot_gpr_4 + static_cast(48)); { const bool branch_taken = ctx.gpr[17] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B6E6C4; } @@ -5852,7 +6194,17 @@ L_08B6E6C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E6DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -5880,7 +6232,17 @@ L_08B6E708: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E71C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(12), aot_gpr_6); @@ -5891,7 +6253,17 @@ L_08B6E71C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E734: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -5902,7 +6274,17 @@ L_08B6E734: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E74C: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[31]}; @@ -5948,7 +6330,6 @@ L_08B6E7A8: L_08B6E7B0: ctx.gpr[20] = (ctx.gpr[2] | 0u); { const bool branch_taken = ctx.gpr[20] != 0u; - // nop if (branch_taken) { goto L_08B6E7C8; } @@ -6001,7 +6382,6 @@ L_08B6E808: } L_08B6E814: ctx.gpr[31] = (0x08B6E81Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6E81Cu) goto L_08B6E81C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6E81C: @@ -6009,7 +6389,6 @@ L_08B6E81C: aot_gpr_4 = (ctx.gpr[20] + ctx.gpr[18]); aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(8), aot_gpr_4); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E908; } @@ -6021,7 +6400,6 @@ L_08B6E830: aot_gpr_4 = (aot_gpr_4 - aot_gpr_5); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[18] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6E87C; } @@ -6049,7 +6427,6 @@ L_08B6E85C: L_08B6E870: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(11), static_cast(0u)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6E908; } @@ -6132,7 +6509,17 @@ L_08B6E914: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6E938: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); { const std::uint32_t aot_run_words[9]{aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], ctx.gpr[22], ctx.gpr[23], ctx.gpr[31]}; @@ -6157,7 +6544,6 @@ L_08B6E974: aot_gpr_4 = (static_cast(static_cast(aot_gpr_4) >> 2u)); aot_gpr_4 = (aot_gpr_4 < ctx.gpr[20] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6EB20; } @@ -6245,7 +6631,6 @@ L_08B6EA48: aot_gpr_4 = (ctx.gpr[17] | 0u); ctx.gpr[17] = (ctx.gpr[17] + ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == ctx.gpr[17]; - // nop if (branch_taken) { goto L_08B6EA68; } @@ -6263,7 +6648,6 @@ L_08B6EA5C: goto L_08B6EA68; L_08B6EA68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6EB18; } @@ -6341,7 +6725,6 @@ L_08B6EAF4: L_08B6EAFC: aot_mem.aot_direct_store32(aot_gpr_16 + static_cast(4), ctx.gpr[21]); { const bool branch_taken = ctx.gpr[17] == ctx.gpr[19]; - // nop if (branch_taken) { goto L_08B6EB18; } @@ -6359,7 +6742,6 @@ L_08B6EB0C: goto L_08B6EB18; L_08B6EB18: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B6EC3C; } @@ -6544,7 +6926,17 @@ L_08B6EC3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6EC68: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_gpr_5 - aot_gpr_4); @@ -6732,7 +7124,17 @@ L_08B6ED54: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6ED5C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(0), static_cast(0u)); @@ -6742,7 +7144,17 @@ L_08B6ED5C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6ED70: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); ctx.gpr[2] = (aot_gpr_4 | 0u); @@ -6750,7 +7162,6 @@ L_08B6ED70: aot_mem.aot_direct_store8(aot_gpr_29 + static_cast(12), static_cast(0u)); aot_gpr_4 = (aot_gpr_5 - ctx.gpr[2]); { const bool branch_taken = static_cast(aot_gpr_4) <= 0; - // nop if (branch_taken) { goto L_08B6EDCC; } @@ -6767,7 +7178,6 @@ L_08B6ED94: ctx.gpr[8] = (ctx.gpr[8] < aot_gpr_5 ? 1u : 0u); ctx.gpr[8] = (ctx.gpr[8] & 255u); { const bool branch_taken = ctx.gpr[8] == 0u; - // nop if (branch_taken) { goto L_08B6EDC0; } @@ -6788,7 +7198,6 @@ L_08B6EDC0: goto L_08B6EDC4; L_08B6EDC4: { const bool branch_taken = static_cast(aot_gpr_4) > 0; - // nop if (branch_taken) { goto L_08B6ED94; } @@ -6800,7 +7209,17 @@ L_08B6EDCC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6EDD4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_7 = (aot_gpr_5 - aot_gpr_4); @@ -6988,11 +7407,20 @@ L_08B6EEC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6EEC8: aot_gpr_6 = (static_cast(static_cast(aot_gpr_5) >> 8u)); { const bool branch_taken = static_cast(aot_gpr_6) < 0; - // nop if (branch_taken) { goto L_08B6EF14; } @@ -7002,7 +7430,6 @@ L_08B6EED4: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_7 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_7) ? 1u : 0u); { const bool branch_taken = aot_gpr_7 == 0u; - // nop if (branch_taken) { goto L_08B6EF14; } @@ -7014,7 +7441,6 @@ L_08B6EEE4: aot_gpr_7 = (aot_gpr_7 + aot_gpr_6); aot_gpr_7 = (aot_mem.aot_direct_load8(aot_gpr_7 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B6EF1C; } @@ -7045,11 +7471,20 @@ L_08B6EF1C: goto L_08B6EF20; L_08B6EF20: jump_target = ctx.gpr[31]; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6EF28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7091,7 +7526,6 @@ L_08B6EF60: goto L_08B6EF6C; L_08B6EF6C: ctx.gpr[31] = (0x08B6EF74u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6EF74u) goto L_08B6EF74; AOT_REGCACHE_SYNC_OUT(); return; L_08B6EF74: @@ -7099,7 +7533,6 @@ L_08B6EF74: goto L_08B6EF78; L_08B6EF78: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6EF88; } @@ -7122,7 +7555,17 @@ L_08B6EF88: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6EF9C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -7161,7 +7604,6 @@ L_08B6EFD8: goto L_08B6EFE4; L_08B6EFE4: ctx.gpr[31] = (0x08B6EFECu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6EFECu) goto L_08B6EFEC; AOT_REGCACHE_SYNC_OUT(); return; L_08B6EFEC: @@ -7169,7 +7611,6 @@ L_08B6EFEC: goto L_08B6EFF0; L_08B6EFF0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6F000; } @@ -7192,7 +7633,17 @@ L_08B6F000: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6F014: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_7 = (aot_gpr_5 >> 4u); @@ -7323,14 +7774,23 @@ L_08B6F0FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6F160: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), ctx.gpr[31]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6F1D0; } @@ -7372,7 +7832,6 @@ L_08B6F1BC: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B6F178; } @@ -7385,7 +7844,17 @@ L_08B6F1D0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6F1DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -7395,7 +7864,6 @@ L_08B6F1DC: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6F224; } @@ -7404,7 +7872,6 @@ L_08B6F1DC: L_08B6F200: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6F214; } @@ -7412,14 +7879,12 @@ L_08B6F200: } L_08B6F20C: ctx.gpr[31] = (0x08B6F214u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6F214u) goto L_08B6F214; AOT_REGCACHE_SYNC_OUT(); return; L_08B6F214: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_16 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6F200; } @@ -7437,7 +7902,17 @@ L_08B6F224: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6F238: aot_gpr_29 = (aot_gpr_29 + static_cast(-384)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(352), aot_gpr_16); @@ -7691,7 +8166,6 @@ L_08B6F4B0: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6F618; } @@ -7875,7 +8349,6 @@ L_08B6F6F4: aot_gpr_6 = (0u < aot_gpr_6 ? 1u : 0u); aot_gpr_6 = (aot_gpr_6 & 255u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6F85C; } @@ -7982,7 +8455,17 @@ L_08B6F8E8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6F90C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), aot_gpr_16); @@ -7994,7 +8477,6 @@ L_08B6F90C: ctx.gpr[17] = (aot_gpr_4 + static_cast(4)); aot_gpr_6 = (ctx.gpr[17] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B6F980; } @@ -8024,7 +8506,6 @@ L_08B6F94C: L_08B6F954: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B6F968; } @@ -8032,7 +8513,6 @@ L_08B6F954: } L_08B6F960: ctx.gpr[31] = (0x08B6F968u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6F968u) goto L_08B6F968; AOT_REGCACHE_SYNC_OUT(); return; L_08B6F968: @@ -8040,7 +8520,6 @@ L_08B6F968: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_4 = (ctx.gpr[17] < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B6F938; } @@ -8162,7 +8641,17 @@ L_08B6F9FC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6FA30: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(28))); @@ -8181,7 +8670,6 @@ L_08B6FA30: aot_gpr_5 = (aot_gpr_5 < static_cast(2) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6FA8C; } @@ -8255,7 +8743,17 @@ L_08B6FAE8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6FB14: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); @@ -8272,7 +8770,6 @@ L_08B6FB14: aot_gpr_5 = (aot_gpr_5 < static_cast(1) ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(16), ctx.gpr[31]); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B6FB68; } @@ -8346,7 +8843,17 @@ L_08B6FBDC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6FBE8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_16); @@ -8360,7 +8867,6 @@ L_08B6FBE8: goto L_08B6FC04; L_08B6FC04: ctx.gpr[31] = (0x08B6FC0Cu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], aot_gpr_16, ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, ctx.gpr[31]); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B6FC0Cu) goto L_08B6FC0C; AOT_REGCACHE_SYNC_OUT(); return; L_08B6FC0C: @@ -8382,7 +8888,17 @@ L_08B6FC10: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6FC40: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(44), aot_gpr_16); @@ -8441,7 +8957,17 @@ L_08B6FC94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B6FCFC: aot_gpr_29 = (aot_gpr_29 + static_cast(-320)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(300), aot_gpr_16); diff --git a/profiles/vcs/generated/generated_unit_0219.cpp b/profiles/vcs/generated/generated_unit_0219.cpp index 87d768d..0704e72 100644 --- a/profiles/vcs/generated/generated_unit_0219.cpp +++ b/profiles/vcs/generated/generated_unit_0219.cpp @@ -7,135 +7,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0219[4084] = { - 1, 0, 0, 2, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, 0, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 31, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, - 35, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 44, 0, 45, 0, 0, 0, 46, 47, 0, 48, 0, 49, 0, 50, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, 54, 0, 0, 0, 55, 0, 0, 56, - 0, 0, 57, 0, 58, 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 64, 0, 0, 65, 0, 66, 0, 67, 0, 0, 68, 69, 0, 70, 0, 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, - 74, 0, 0, 0, 0, 75, 0, 0, 76, 0, 0, 77, 0, 78, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 81, - 0, 0, 82, 0, 83, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 87, 88, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 91, 0, 92, 0, 0, 93, 0, - 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 96, 0, 97, 0, 98, 0, 0, 0, 99, 0, 0, 0, 100, 0, 0, 101, 0, 0, 102, 0, 103, - 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 110, 0, 111, 0, 0, 0, 0, 0, 0, 112, 0, - 0, 113, 0, 0, 114, 0, 115, 0, 0, 0, 116, 0, 117, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 122, 0, 123, 0, - 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 125, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 0, - 129, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, - 145, 0, 0, 146, 0, 0, 0, 0, 147, 0, 0, 148, 0, 149, 150, 0, 151, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 154, 0, 0, 155, 156, 0, 0, 0, 157, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 0, - 0, 161, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, - 0, 169, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 173, 0, 174, 0, 0, 0, 175, 0, 0, 0, 0, - 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 178, 0, 179, 0, 0, 0, 0, 0, 0, 0, 180, 181, 0, 0, 0, 182, 0, 0, - 0, 0, 183, 0, 0, 0, 184, 0, 0, 185, 0, 0, 186, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, - 0, 0, 190, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 196, 0, 0, 0, 197, 0, 0, 0, 0, - 0, 0, 0, 0, 198, 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 0, - 0, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 210, 211, 0, 212, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 215, 0, 216, - 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, - 0, 221, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 225, 0, 226, 0, 0, - 0, 0, 0, 0, 0, 227, 228, 0, 0, 0, 229, 0, 0, 0, 0, 230, 0, 0, 0, 231, 0, 0, 232, 0, 0, 233, 0, 0, 0, 0, 0, 0, - 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 237, 0, 0, 0, 238, 0, 239, 0, 0, 0, 240, 0, 0, 0, 0, - 241, 0, 0, 0, 242, 0, 0, 243, 0, 0, 244, 0, 0, 0, 0, 0, 0, 245, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 247, 248, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 252, 0, 0, 0, 0, - 253, 0, 254, 0, 255, 0, 0, 256, 0, 0, 0, 257, 0, 258, 0, 259, 0, 260, 0, 0, 261, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 265, 266, 0, 267, 0, 0, 268, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 269, 0, 270, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 276, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 279, 0, 280, 0, 281, 0, 0, 0, 0, 0, 0, 0, 282, 283, 0, 0, 0, 284, 0, 0, 0, 0, 285, 0, 0, 0, 286, 0, 0, - 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 291, 0, 0, 0, 292, 0, 293, 0, 0, 0, 294, - 0, 0, 0, 0, 295, 0, 0, 0, 296, 0, 0, 297, 0, 0, 298, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 300, 301, 0, 0, 0, - 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, - 0, 0, 0, 0, 305, 0, 0, 306, 307, 0, 308, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 311, 0, 312, 0, 0, 0, 0, - 0, 0, 313, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 317, 0, - 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 0, 0, 321, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 324, 0, 0, 0, 325, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 328, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 333, 0, 0, 334, - 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 0, 337, 0, 0, 0, 0, 0, 0, 338, 0, 339, 0, 0, 0, 340, 0, 0, 341, 0, 0, - 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 345, 0, 0, 0, 346, 0, 0, 347, - 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 351, 0, 0, 0, - 0, 0, 0, 352, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 355, 0, 0, 0, 356, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 359, - 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 365, 0, 0, - 0, 0, 0, 0, 366, 0, 367, 0, 368, 0, 0, 369, 0, 0, 0, 370, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 376, 0, 377, - 0, 0, 0, 378, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 383, 0, 384, 0, 0, 0, 0, 0, 0, 385, 0, 386, 0, 0, 387, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 390, 0, 0, - 0, 0, 0, 0, 391, 0, 392, 0, 0, 0, 393, 0, 0, 394, 0, 0, 0, 395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 397, 0, 398, 0, 0, 0, 399, 0, 0, 400, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 405, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 408, 0, - 0, 0, 409, 0, 0, 0, 410, 0, 0, 0, 0, 0, 0, 411, 0, 412, 0, 413, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, - 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 417, 0, 418, 0, 0, 0, 0, 0, 0, 419, 0, 420, 0, 421, 0, 0, 422, 0, 0, 0, 423, - 0, 0, 424, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, 427, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 429, 0, 430, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 433, - 0, 0, 0, 434, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 437, 0, 0, 0, 0, 0, 0, 438, 0, 439, 0, 0, 440, - 0, 0, 0, 0, 441, 0, 0, 0, 0, 0, 0, 442, 0, 443, 0, 0, 0, 0, 0, 0, 444, 0, 445, 0, 0, 0, 446, 0, 0, 447, 0, 0, - 0, 448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 450, 0, 451, 0, 0, 0, 452, 0, 0, 453, - 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 457, 0, 0, 0, - 0, 0, 0, 458, 0, 459, 0, 0, 0, 0, 0, 0, 460, 0, 461, 0, 0, 0, 462, 0, 0, 0, 463, 0, 0, 0, 0, 0, 0, 464, 0, 465, - 0, 466, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 471, 0, 0, - 0, 0, 0, 0, 472, 0, 473, 0, 474, 0, 0, 475, 0, 0, 0, 476, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 479, 0, 0, - 480, 0, 481, 0, 0, 0, 482, 0, 483, 0, 0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 485, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 488, 0, 489, 0, 0, 0, 0, - 0, 0, 490, 0, 0, 0, 491, 0, 0, 492, 0, 0, 0, 493, 0, 0, 494, 0, 0, 495, 0, 496, 0, 0, 497, 0, 498, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 499, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 0, 0, 502, 0, 0, 0, 0, 503, 0, - 0, 0, 504, 0, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 0, 0, 0, 508, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0, 0, 511, 0, 0, 0, 512, 0, 0, 513, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, - 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 0, 0, 518, 519, 0, 0, - 0, 0, 520, 0, 0, 0, 521, 0, 522, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 524, 525, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, 527, 0, 0, 528, 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 531, 0, 532, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 534, 0, 0, 535, 0, 0, - 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 538, 0, 539, 0, 540, 0, 0, 0, 0, 541, - 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 544, 0, 0, 0, 545, 0, 0, 0, 546, 0, 0, 0, 0, 0, 547, 0, 0, 0, - 548, 0, 0, 549, 0, 550, 0, 551, 0, 0, 552, 553, 0, 554, 0, 0, 555, 0, 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, 557, 0, 0, 0, - 558, 0, 0, 0, 0, 559, 0, 0, 560, 0, 0, 561, 0, 562, 0, 0, 0, 0, 563, 0, 0, 564, 0, 565, 566, 0, 567, 0, 0, 568, 0, 569, - 570, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 574, 0, 0, 575, 0, 576, 0, 0, 0, 577, 0, 0, 578, - 579, 0, 580, 0, 0, 581, 0, 0, 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 0, 0, 0, 0, 584, 585, 0, 586, 0, 0, 0, - 0, 587, 0, 0, 0, 0, 0, 588, 0, 589, 0, 590, 0, 591, 0, 592, 0, 593, 0, 594, 0, 595, 0, 596, 0, 597, 0, 598, 0, 599, 0, 600, - 0, 601, 0, 602, 0, 603, 0, 604, 0, 605, 0, 606, 0, 607, 0, 608, 0, 609, 0, 610, 0, 611, 0, 612, 0, 613, 0, 614, 0, 615, 0, 616, - 0, 617, 0, 618, 0, 619, 0, 620, 0, 621, 0, 622, 0, 623, 0, 624, 0, 625, 0, 626, 0, 627, 0, 628, 0, 629, 0, 630, 0, 631, 0, 632, - 0, 633, 0, 634, 0, 635, 0, 636, 0, 637, 0, 638, 0, 639, 0, 640, 0, 641, 0, 642, 0, 643, 0, 644, 0, 645, 0, 646, 0, 647, 0, 648, - 0, 649, 0, 650, 0, 651, 0, 652, 0, 653, 0, 654, 0, 655, 0, 656, 0, 657, 0, 658, 0, 659, 0, 660, 0, 661, 0, 662, 0, 663, 0, 664, - 0, 665, 0, 666, 0, 667, 0, 668, 0, 669, 0, 670, 0, 671, 0, 672, 0, 673, 0, 674, 0, 675, 0, 676, 0, 677, 0, 678, 0, 679, 0, 680, - 0, 681, 0, 682, 0, 0, 0, 0, 0, 683, 0, 684, 0, 685, 0, 686, 0, 687, 0, 688, 0, 689, 0, 690, 0, 691, 0, 692, 0, 693, 0, 694, - 0, 695, 0, 696, 0, 697, 0, 698, 0, 699, 0, 700, 0, 701, 0, 702, 0, 703, 0, 704, 0, 0, 0, 705, 0, 0, 0, 0, 0, 706, 0, 707, - 0, 708, 0, 709, 0, 0, 0, 710, 0, 0, 0, 711, 0, 0, 0, 712, 0, 0, 0, 713, 0, 0, 0, 714, 0, 0, 0, 715, 0, 716, 0, 717, - 0, 718, 0, 719, 0, 720, 0, 721, 0, 722, 0, 723, 0, 0, 0, 0, 0, 0, 0, 724, 0, 0, 0, 725, 0, 0, 0, 726, 0, 0, 0, 727, - 0, 0, 0, 728, 0, 729, 0, 730, 0, 731, 0, 732, 0, 733, 0, 734, 0, 735, 0, 736, 0, 737, 0, 738, 0, 739, 0, 740, 0, 741, 0, 742, - 0, 743, 0, 744, 0, 745, 0, 746, 0, 747, 0, 748, 0, 749, 0, 750, 0, 751, 0, 752, 0, 753, 0, 754, 0, 755, 0, 756, 0, 757, 0, 758, - 0, 759, 0, 760, 0, 761, 0, 762, 0, 763, 0, 764, 0, 765, 0, 0, 0, 766, 0, 767, 0, 768, 0, 769, 0, 770, 0, 771, 0, 772, 0, 773, - 0, 774, 0, 775, 0, 776, 0, 777, 0, 778, 0, 779, 0, 780, 0, 781, 0, 782, 0, 783, 0, 784, 0, 785, 0, 786, 0, 787, 0, 788, 0, 789, - 0, 790, 0, 791, 0, 792, 0, 793, 0, 794, 0, 795, 0, 0, 0, 796, 0, 0, 0, 797, 0, 798, 0, 799, 0, 800, 0, 801, 0, 0, 0, 802, - 0, 803, 0, 804, 0, 805, 0, 806, 0, 807, 0, 0, 808, 0, 0, 0, 809, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, 812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 813, 0, 0, 0, 0, 0, 814, 0, 0, 0, 0, 815, 0, 0, 0, 816, 817, 0, 0, 0, 0, 0, 818, 0, 819, 0, 0, 0, 820, - 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 824, 0, 0, 0, 825, 0, 826, 0, 827, 0, 0, - 0, 0, 828, 0, 0, 0, 829, 0, 0, 830, 0, 0, 0, 831, 0, 0, 832, 0, 833, 0, 834, 0, 835, 0, 836, 0, 837, 0, 838, 0, 0, 839, - 0, 0, 0, 840, 0, 0, 0, 0, 841, 0, 0, 0, 0, 0, 842, 0, 843, 844, 0, 845, 0, 846, 0, 0, 0, 0, 847, 0, 0, 0, 0, 848, - 0, 0, 0, 0, 849, 0, 0, 850, 851, 0, 0, 852, 0, 0, 0, 853, 0, 0, 0, 0, 854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 855, 0, - 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 858, 0, 0, 859, 0, 860, 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, - 862, 0, 0, 0, 863, 0, 0, 0, 864, 0, 865, 0, 866, 0, 0, 0, 867, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 868, 0, 869, 0, 0, 0, 870, 0, 871, 872, 0, 0, 873, 0, 0, 874, 0, 875, 0, 876, 0, 0, 0, 0, 0, 0, 0, 0, 877, 0, 0, 0, - 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 880, 0, 881, 0, 0, 0, 0, 882, 0, 0, 0, - 0, 0, 883, 0, 0, 0, 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 885, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 886, 0, 887, 0, 0, 0, 0, 888, 0, 889, 890, 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, 892, 893, - 0, 894, 0, 895, 0, 0, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 898, 0, 0, 0, - 0, 0, 0, 899, 0, 0, 0, 0, 900, 901, 0, 0, 0, 0, 0, 902, 0, 0, 0, 903, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0219[64] = { + 0x0802240048404069ull, 0x0000004010100408ull, 0x0800000100180000ull, 0x2222842014440420ull, + 0x6AC5040140511041ull, 0x1044409491220000ull, 0x8204292110212CA9ull, 0x4A041000C0480214ull, + 0x00002028A488A821ull, 0x0010145240B00050ull, 0x0A000C2058002800ull, 0x100148A000C28003ull, + 0x0085690902410100ull, 0x0002000621041190ull, 0x08A4024244210400ull, 0x4101124423015001ull, + 0x4040103008922114ull, 0xA802590100020944ull, 0x2A00202210200840ull, 0x08A2080902488460ull, + 0x0880802060120491ull, 0x04B202000412A895ull, 0x0080884080208150ull, 0x8A208089221180A8ull, + 0x1000200818044910ull, 0x420401040A802590ull, 0x8048A04012000404ull, 0x24502810940A0088ull, + 0x1080200891402002ull, 0x28108022A0445028ull, 0xA040120004048950ull, 0x2810940A00888048ull, + 0x2008914020022450ull, 0x8022A04450281080ull, 0x1200040489502810ull, 0x940A00888048A040ull, + 0x9140200224502810ull, 0xA044502810802008ull, 0x2404895028108022ull, 0x0B00050000010145ull, + 0x4240014005292244ull, 0x40A4410001204034ull, 0x00C0814430080010ull, 0x2402A0000100A500ull, + 0x1044440885420010ull, 0xA5A4292110212CA9ull, 0x1608042591488205ull, 0xAAAAAAAAAAAAAA82ull, + 0xAAAAAAAAAAAAAAAAull, 0xAAAAAAAAAAAAAAAAull, 0xA08AAAAAAAAAAA0Aull, 0x88880AAAA888888Aull, + 0xAAAAAAAAAAAAAAA8ull, 0xAAAAAAAAAAAA2AAAull, 0x000512AA8AA88AAAull, 0x0000000000000000ull, + 0x0030000000000000ull, 0x2A2104108A0C4208ull, 0x842B410895552244ull, 0x0129100140108990ull, + 0x100A934500011511ull, 0x0800008410A20010ull, 0x0020004AC10D0A00ull, 0x0008830810000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0219[64] = { + 1u, 13u, 18u, 22u, 35u, 52u, 64u, 82u, 94u, 107u, 119u, 129u, 141u, 154u, 164u, 176u, + 190u, 203u, 217u, 227u, 241u, 253u, 269u, 279u, 295u, 305u, 318u, 328u, 342u, 352u, 366u, 378u, + 391u, 403u, 416u, 428u, 441u, 454u, 466u, 480u, 490u, 504u, 516u, 526u, 536u, 548u, 570u, 587u, + 617u, 649u, 681u, 708u, 728u, 759u, 790u, 811u, 811u, 813u, 828u, 849u, 862u, 878u, 886u, 898u, }; void recomp_unit_0219_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -155,13 +50,25 @@ void recomp_unit_0219_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B70000u; - entry_id = (entry_delta < 16336u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0219[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16336u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0219[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0219[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B70000; @@ -1312,7 +1219,17 @@ L_08B70250: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70280: aot_gpr_29 = (aot_gpr_29 + static_cast(-96)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[16]); @@ -1583,7 +1500,6 @@ L_08B704D8: goto L_08B704DC; L_08B704DC: { const bool branch_taken = ctx.gpr[18] == 0u; - // nop if (branch_taken) { goto L_08B704EC; } @@ -1627,7 +1543,17 @@ L_08B704F8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70544: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -1665,7 +1591,6 @@ L_08B70570: L_08B7057C: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B70590; } @@ -1673,7 +1598,6 @@ L_08B7057C: } L_08B70588: aot_gpr_31 = (0x08B70590u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B70590u) goto L_08B70590; AOT_REGCACHE_SYNC_OUT(); return; L_08B70590: @@ -1683,7 +1607,17 @@ L_08B70590: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7059C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1723,7 +1657,6 @@ L_08B705D8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70614; } @@ -1733,7 +1666,6 @@ L_08B705F0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70614; } @@ -1742,7 +1674,6 @@ L_08B705F0: L_08B70600: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70614; } @@ -1750,7 +1681,6 @@ L_08B70600: } L_08B7060C: aot_gpr_31 = (0x08B70614u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B70614u) goto L_08B70614; AOT_REGCACHE_SYNC_OUT(); return; L_08B70614: @@ -1795,7 +1725,17 @@ L_08B70640: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70654: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -1835,7 +1775,6 @@ L_08B70694: L_08B706A0: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B706B4; } @@ -1858,7 +1797,17 @@ L_08B706B4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B706C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -1883,7 +1832,6 @@ L_08B706E4: L_08B706FC: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70710; } @@ -1906,7 +1854,17 @@ L_08B70710: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70724: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -1973,7 +1931,17 @@ L_08B707B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B707C8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -1994,7 +1962,6 @@ L_08B707E4: L_08B707EC: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70800; } @@ -2017,7 +1984,17 @@ L_08B70800: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70814: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); @@ -2052,7 +2029,17 @@ L_08B7084C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7085C: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -2069,7 +2056,6 @@ L_08B70868: } L_08B70874: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B7088C; } @@ -2134,11 +2120,20 @@ L_08B708B4: goto L_08B70910; L_08B70910: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70918: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 28u); @@ -2153,7 +2148,6 @@ L_08B70918: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B70954; } @@ -2164,11 +2158,20 @@ L_08B70950: goto L_08B70954; L_08B70954: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7095C: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 28u); @@ -2176,11 +2179,20 @@ L_08B7095C: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70978: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -2197,7 +2209,6 @@ L_08B70984: } L_08B70990: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B709A8; } @@ -2262,11 +2273,20 @@ L_08B709D0: goto L_08B70A2C; L_08B70A2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70A34: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 96u); @@ -2281,7 +2301,6 @@ L_08B70A34: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B70A70; } @@ -2292,11 +2311,20 @@ L_08B70A6C: goto L_08B70A70; L_08B70A70: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70A78: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 96u); @@ -2304,11 +2332,20 @@ L_08B70A78: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70A94: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -2343,11 +2380,20 @@ L_08B70AAC: goto L_08B70AE4; L_08B70AE4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70AEC: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -2382,11 +2428,20 @@ L_08B70B04: goto L_08B70B3C; L_08B70B3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70B44: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); aot_gpr_6 = (0u | 0u); @@ -2421,11 +2476,20 @@ L_08B70B5C: goto L_08B70B94; L_08B70B94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70B9C: aot_gpr_5 = (aot_gpr_4 - 0u); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -2447,11 +2511,20 @@ L_08B70BAC: } L_08B70BB8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70BC0: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(4))); @@ -2468,7 +2541,17 @@ L_08B70BC0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70BF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(32), aot_gpr_7); @@ -2519,7 +2602,17 @@ L_08B70C58: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70C64: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -2558,7 +2651,6 @@ L_08B70CA0: goto L_08B70CAC; L_08B70CAC: aot_gpr_31 = (0x08B70CB4u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B70CB4u) goto L_08B70CB4; AOT_REGCACHE_SYNC_OUT(); return; L_08B70CB4: @@ -2566,7 +2658,6 @@ L_08B70CB4: goto L_08B70CB8; L_08B70CB8: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70CC8; } @@ -2589,7 +2680,17 @@ L_08B70CC8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70CDC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); aot_gpr_7 = (aot_gpr_5 >> 5u); @@ -2720,14 +2821,23 @@ L_08B70DC4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70E28: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_gpr_4 = (aot_gpr_5 | 0u); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(12), aot_gpr_31); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B70E98; } @@ -2769,7 +2879,6 @@ L_08B70E84: aot_gpr_4 = (aot_gpr_4 + static_cast(4)); aot_gpr_5 = (aot_gpr_4 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_5 != 0u; - // nop if (branch_taken) { goto L_08B70E40; } @@ -2782,7 +2891,17 @@ L_08B70E98: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70EA4: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -2792,7 +2911,6 @@ L_08B70EA4: ctx.gpr[17] = (aot_gpr_5 | 0u); aot_gpr_4 = (ctx.gpr[17] < ctx.gpr[16] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70EEC; } @@ -2801,7 +2919,6 @@ L_08B70EA4: L_08B70EC8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(0))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B70EDC; } @@ -2809,14 +2926,12 @@ L_08B70EC8: } L_08B70ED4: aot_gpr_31 = (0x08B70EDCu); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE398, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 482u, 0x08ABE398u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B70EDCu) goto L_08B70EDC; AOT_REGCACHE_SYNC_OUT(); return; L_08B70EDC: ctx.gpr[17] = (ctx.gpr[17] + static_cast(4)); aot_gpr_4 = (ctx.gpr[17] < ctx.gpr[16] ? 1u : 0u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B70EC8; } @@ -2834,7 +2949,17 @@ L_08B70EEC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B70F00: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -2909,7 +3034,6 @@ L_08B70F98: L_08B70FA4: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B70FC0; } @@ -2951,7 +3075,6 @@ L_08B70FF8: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B71094; } @@ -2998,7 +3121,6 @@ L_08B71044: L_08B71050: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B7106C; } @@ -3055,7 +3177,17 @@ L_08B710B0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B710D8: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3078,7 +3210,6 @@ L_08B71108: aot_gpr_4 = (ctx.gpr[16] + static_cast(8)); ctx.gpr[18] = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B71120; } @@ -3092,7 +3223,6 @@ L_08B71118: L_08B71120: ctx.gpr[16] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B710F8; } @@ -3111,7 +3241,17 @@ L_08B7112C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B71144: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3157,7 +3297,6 @@ L_08B711AC: goto L_08B711B0; L_08B711B0: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B71180; } @@ -3166,7 +3305,6 @@ L_08B711B0: L_08B711B8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B7122C; } @@ -3182,7 +3320,6 @@ L_08B711C4: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B711FC; } @@ -3231,7 +3368,6 @@ L_08B7122C: aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71284; } @@ -3278,7 +3414,17 @@ L_08B71294: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B712B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3353,7 +3499,6 @@ L_08B7134C: L_08B71358: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B7138C; } @@ -3366,7 +3511,6 @@ L_08B71364: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(4), aot_gpr_6); aot_gpr_5 = (aot_gpr_6 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B7138C; } @@ -3407,7 +3551,6 @@ L_08B713C4: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B71478; } @@ -3454,7 +3597,6 @@ L_08B71410: L_08B7141C: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B71450; } @@ -3467,7 +3609,6 @@ L_08B71428: aot_mem.aot_direct_store32(aot_gpr_5 + static_cast(4), aot_gpr_6); aot_gpr_5 = (aot_gpr_6 | 0u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B71450; } @@ -3523,7 +3664,17 @@ L_08B71494: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B714BC: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3555,7 +3706,6 @@ L_08B714EC: } L_08B71500: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71534; } @@ -3563,7 +3713,6 @@ L_08B71500: } L_08B71508: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71534; } @@ -3572,7 +3721,6 @@ L_08B71508: L_08B71510: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(20))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71534; } @@ -3590,12 +3738,10 @@ L_08B7151C: } L_08B7152C: aot_gpr_31 = (0x08B71534u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B71534u) goto L_08B71534; AOT_REGCACHE_SYNC_OUT(); return; L_08B71534: { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B71544; } @@ -3609,7 +3755,6 @@ L_08B7153C: L_08B71544: ctx.gpr[16] = (ctx.gpr[18] | 0u); { const bool branch_taken = ctx.gpr[18] != 0u; - // nop if (branch_taken) { goto L_08B714DC; } @@ -3628,7 +3773,17 @@ L_08B71550: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B71568: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -3674,7 +3829,6 @@ L_08B715D0: goto L_08B715D4; L_08B715D4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B715A4; } @@ -3683,7 +3837,6 @@ L_08B715D4: L_08B715DC: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71654; } @@ -3699,7 +3852,6 @@ L_08B715E8: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71620; } @@ -3733,7 +3885,6 @@ L_08B7163C: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), aot_gpr_5); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(4), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B716BC; } @@ -3749,7 +3900,6 @@ L_08B71654: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B716AC; } @@ -3796,7 +3946,17 @@ L_08B716BC: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B716DC: aot_gpr_29 = (aot_gpr_29 + static_cast(-48)); { const std::uint32_t aot_run_words[4]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], aot_gpr_31}; @@ -3871,7 +4031,6 @@ L_08B71774: L_08B71780: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B7179C; } @@ -3913,7 +4072,6 @@ L_08B717D4: aot_gpr_5 = (aot_gpr_5 + static_cast(8)); ctx.gpr[9] = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != ctx.gpr[9]; - // nop if (branch_taken) { goto L_08B71870; } @@ -3960,7 +4118,6 @@ L_08B71820: L_08B7182C: aot_gpr_5 = (ctx.gpr[18] + static_cast(16)); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B71848; } @@ -4017,7 +4174,17 @@ L_08B7188C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B718B4: aot_gpr_29 = (aot_gpr_29 + static_cast(-64)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4063,7 +4230,6 @@ L_08B7191C: goto L_08B71920; L_08B71920: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B718F0; } @@ -4072,7 +4238,6 @@ L_08B71920: L_08B71928: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[20]); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B719A0; } @@ -4088,7 +4253,6 @@ L_08B71934: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B7196C; } @@ -4122,7 +4286,6 @@ L_08B71988: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(0), aot_gpr_5); aot_mem.aot_direct_store8(ctx.gpr[17] + static_cast(4), static_cast(aot_gpr_4)); { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71A08; } @@ -4138,7 +4301,6 @@ L_08B719A0: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B719F8; } @@ -4185,7 +4347,17 @@ L_08B71A08: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B71A28: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4206,7 +4378,6 @@ L_08B71A28: L_08B71A64: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71ABC; } @@ -4222,7 +4393,6 @@ L_08B71A70: aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71AD8; } @@ -4239,7 +4409,6 @@ L_08B71A98: goto L_08B70F00; L_08B71AB4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4269,7 +4438,6 @@ L_08B71AD8: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71B70; } @@ -4279,14 +4447,12 @@ L_08B71AFC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_4); aot_gpr_31 = (0x08B71B0Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B71B0Cu) goto L_08B71B0C; AOT_REGCACHE_SYNC_OUT(); return; L_08B71B0C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[2]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B71B4C; } @@ -4302,7 +4468,6 @@ L_08B71B1C: aot_gpr_4 = (aot_gpr_5 < aot_gpr_4 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71B7C; } @@ -4310,7 +4475,6 @@ L_08B71B1C: } L_08B71B44: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71BD8; } @@ -4327,7 +4491,6 @@ L_08B71B4C: goto L_08B70F00; L_08B71B68: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4347,7 +4510,6 @@ L_08B71B7C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71BB4; } @@ -4364,7 +4526,6 @@ L_08B71B90: goto L_08B70F00; L_08B71BAC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4381,7 +4542,6 @@ L_08B71BB4: goto L_08B70F00; L_08B71BD0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4406,7 +4566,6 @@ L_08B71BF4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B71C7C; } @@ -4424,7 +4583,6 @@ L_08B71C04: aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71C60; } @@ -4443,7 +4601,6 @@ L_08B71C34: goto L_08B70F00; L_08B71C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4468,7 +4625,6 @@ L_08B71C7C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_4); aot_gpr_31 = (0x08B71C8Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 401u, 0x08B6A64Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B71C8Cu) goto L_08B71C8C; AOT_REGCACHE_SYNC_OUT(); return; L_08B71C8C: @@ -4481,7 +4637,6 @@ L_08B71C8C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); ctx.gpr[19] = (aot_gpr_4 < ctx.gpr[19] ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B71D38; } @@ -4497,7 +4652,6 @@ L_08B71CB4: aot_gpr_4 = (aot_gpr_4 < aot_gpr_5 ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71D38; } @@ -4508,7 +4662,6 @@ L_08B71CDC: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71D14; } @@ -4525,7 +4678,6 @@ L_08B71CF0: goto L_08B70F00; L_08B71D0C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4542,7 +4694,6 @@ L_08B71D14: goto L_08B70F00; L_08B71D30: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4552,14 +4703,12 @@ L_08B71D38: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_4); aot_gpr_31 = (0x08B71D48u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B71D48u) goto L_08B71D48; AOT_REGCACHE_SYNC_OUT(); return; L_08B71D48: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[2]); aot_gpr_4 = (ctx.gpr[19] < static_cast(1) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B71D74; } @@ -4576,7 +4725,6 @@ L_08B71D58: goto L_08B71D74; L_08B71D74: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B71E18; } @@ -4584,7 +4732,6 @@ L_08B71D74: } L_08B71D7C: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71E18; } @@ -4594,7 +4741,6 @@ L_08B71D84: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B71DBC; } @@ -4610,7 +4756,6 @@ L_08B71D94: aot_gpr_5 = (aot_gpr_6 < aot_gpr_5 ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B71E18; } @@ -4621,7 +4766,6 @@ L_08B71DBC: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71DF4; } @@ -4638,7 +4782,6 @@ L_08B71DD0: goto L_08B70F00; L_08B71DEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4655,7 +4798,6 @@ L_08B71DF4: goto L_08B70F00; L_08B71E10: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B71E48; } @@ -4663,7 +4805,6 @@ L_08B71E10: } L_08B71E18: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B71E2C; } @@ -4708,7 +4849,17 @@ L_08B71E48: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B71E68: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -4729,7 +4880,6 @@ L_08B71E68: L_08B71EA4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71EFC; } @@ -4745,7 +4895,6 @@ L_08B71EB0: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71F18; } @@ -4762,7 +4911,6 @@ L_08B71ED8: goto L_08B712B4; L_08B71EF4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -4792,7 +4940,6 @@ L_08B71F18: aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B71FB0; } @@ -4802,14 +4949,12 @@ L_08B71F3C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_4); aot_gpr_31 = (0x08B71F4Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B71F4Cu) goto L_08B71F4C; AOT_REGCACHE_SYNC_OUT(); return; L_08B71F4C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[2]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B71F8C; } @@ -4825,7 +4970,6 @@ L_08B71F5C: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71FBC; } @@ -4833,7 +4977,6 @@ L_08B71F5C: } L_08B71F84: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72018; } @@ -4850,7 +4993,6 @@ L_08B71F8C: goto L_08B712B4; L_08B71FA8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -4870,7 +5012,6 @@ L_08B71FBC: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B71FF4; } @@ -4887,7 +5028,6 @@ L_08B71FD0: goto L_08B712B4; L_08B71FEC: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -4904,7 +5044,6 @@ L_08B71FF4: goto L_08B712B4; L_08B72010: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -4929,7 +5068,6 @@ L_08B72034: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B720BC; } @@ -4947,7 +5085,6 @@ L_08B72044: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B720A0; } @@ -4966,7 +5103,6 @@ L_08B72074: goto L_08B712B4; L_08B72098: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -4991,7 +5127,6 @@ L_08B720BC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_4); aot_gpr_31 = (0x08B720CCu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 401u, 0x08B6A64Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B720CCu) goto L_08B720CC; AOT_REGCACHE_SYNC_OUT(); return; L_08B720CC: @@ -5004,7 +5139,6 @@ L_08B720CC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[16] + static_cast(0))); ctx.gpr[19] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B72178; } @@ -5020,7 +5154,6 @@ L_08B720F4: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72178; } @@ -5031,7 +5164,6 @@ L_08B7211C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B72154; } @@ -5048,7 +5180,6 @@ L_08B72130: goto L_08B712B4; L_08B7214C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -5065,7 +5196,6 @@ L_08B72154: goto L_08B712B4; L_08B72170: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -5075,14 +5205,12 @@ L_08B72178: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_4); aot_gpr_31 = (0x08B72188u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B72188u) goto L_08B72188; AOT_REGCACHE_SYNC_OUT(); return; L_08B72188: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[2]); aot_gpr_4 = (ctx.gpr[19] < static_cast(1) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B721B4; } @@ -5099,7 +5227,6 @@ L_08B72198: goto L_08B721B4; L_08B721B4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B72258; } @@ -5107,7 +5234,6 @@ L_08B721B4: } L_08B721BC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72258; } @@ -5117,7 +5243,6 @@ L_08B721C4: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B721FC; } @@ -5133,7 +5258,6 @@ L_08B721D4: aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B72258; } @@ -5144,7 +5268,6 @@ L_08B721FC: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B72234; } @@ -5161,7 +5284,6 @@ L_08B72210: goto L_08B712B4; L_08B7222C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -5178,7 +5300,6 @@ L_08B72234: goto L_08B712B4; L_08B72250: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72288; } @@ -5186,7 +5307,6 @@ L_08B72250: } L_08B72258: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B7226C; } @@ -5231,7 +5351,17 @@ L_08B72288: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B722A8: aot_gpr_29 = (aot_gpr_29 + static_cast(-112)); { const std::uint32_t aot_run_words[6]{ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_31}; @@ -5252,7 +5382,6 @@ L_08B722A8: L_08B722E4: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(4))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B7233C; } @@ -5268,7 +5397,6 @@ L_08B722F0: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72358; } @@ -5285,7 +5413,6 @@ L_08B72318: goto L_08B716DC; L_08B72334: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5315,7 +5442,6 @@ L_08B72358: aot_gpr_5 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(0))); aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B723F0; } @@ -5325,14 +5451,12 @@ L_08B7237C: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), aot_gpr_4); aot_gpr_31 = (0x08B7238Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B7238Cu) goto L_08B7238C; AOT_REGCACHE_SYNC_OUT(); return; L_08B7238C: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(20), ctx.gpr[2]); aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = ctx.gpr[2] == aot_gpr_4; - // nop if (branch_taken) { goto L_08B723CC; } @@ -5348,7 +5472,6 @@ L_08B7239C: aot_gpr_4 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_4) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B723FC; } @@ -5356,7 +5479,6 @@ L_08B7239C: } L_08B723C4: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72458; } @@ -5373,7 +5495,6 @@ L_08B723CC: goto L_08B716DC; L_08B723E8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5393,7 +5514,6 @@ L_08B723FC: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B72434; } @@ -5410,7 +5530,6 @@ L_08B72410: goto L_08B716DC; L_08B7242C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5427,7 +5546,6 @@ L_08B72434: goto L_08B716DC; L_08B72450: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5452,7 +5570,6 @@ L_08B72474: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_gpr_5 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_4 != aot_gpr_5; - // nop if (branch_taken) { goto L_08B724FC; } @@ -5470,7 +5587,6 @@ L_08B72484: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B724E0; } @@ -5489,7 +5605,6 @@ L_08B724B4: goto L_08B716DC; L_08B724D8: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5514,7 +5629,6 @@ L_08B724FC: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(48), aot_gpr_4); aot_gpr_31 = (0x08B7250Cu); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 401u, 0x08B6A64Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B7250Cu) goto L_08B7250C; AOT_REGCACHE_SYNC_OUT(); return; L_08B7250C: @@ -5527,7 +5641,6 @@ L_08B7250C: aot_gpr_4 = (aot_mem.aot_direct_load16(ctx.gpr[16] + static_cast(0))); ctx.gpr[19] = (static_cast(aot_gpr_4) < static_cast(ctx.gpr[19]) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] == 0u; - // nop if (branch_taken) { goto L_08B725B8; } @@ -5543,7 +5656,6 @@ L_08B72534: aot_gpr_4 = (static_cast(aot_gpr_4) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B725B8; } @@ -5554,7 +5666,6 @@ L_08B7255C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B72594; } @@ -5571,7 +5682,6 @@ L_08B72570: goto L_08B716DC; L_08B7258C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5588,7 +5698,6 @@ L_08B72594: goto L_08B716DC; L_08B725B0: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5598,14 +5707,12 @@ L_08B725B8: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[20] + static_cast(0))); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), aot_gpr_4); aot_gpr_31 = (0x08B725C8u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0217_entry, 217u, 391u, 0x08B6A5DCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B725C8u) goto L_08B725C8; AOT_REGCACHE_SYNC_OUT(); return; L_08B725C8: aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(56), ctx.gpr[2]); aot_gpr_4 = (ctx.gpr[19] < static_cast(1) ? 1u : 0u); { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B725F4; } @@ -5622,7 +5729,6 @@ L_08B725D8: goto L_08B725F4; L_08B725F4: { const bool branch_taken = ctx.gpr[19] != 0u; - // nop if (branch_taken) { goto L_08B72698; } @@ -5630,7 +5736,6 @@ L_08B725F4: } L_08B725FC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72698; } @@ -5640,7 +5745,6 @@ L_08B72604: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(56))); aot_gpr_6 = (aot_mem.aot_direct_load32(ctx.gpr[18] + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B7263C; } @@ -5656,7 +5760,6 @@ L_08B72614: aot_gpr_5 = (static_cast(aot_gpr_6) < static_cast(aot_gpr_5) ? 1u : 0u); aot_gpr_5 = (aot_gpr_5 & 255u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B72698; } @@ -5667,7 +5770,6 @@ L_08B7263C: aot_gpr_4 = (aot_gpr_4 + static_cast(12)); aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B72674; } @@ -5684,7 +5786,6 @@ L_08B72650: goto L_08B716DC; L_08B7266C: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5701,7 +5802,6 @@ L_08B72674: goto L_08B716DC; L_08B72690: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B726C8; } @@ -5709,7 +5809,6 @@ L_08B72690: } L_08B72698: { const bool branch_taken = ctx.gpr[19] != aot_gpr_4; - // nop if (branch_taken) { goto L_08B726AC; } @@ -5754,7 +5853,17 @@ L_08B726C8: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B726E8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(8))); ctx.gpr[8] = (0u | 0u); @@ -5771,7 +5880,6 @@ L_08B726F4: } L_08B72700: { const bool branch_taken = ctx.gpr[8] != 0u; - // nop if (branch_taken) { goto L_08B72718; } @@ -5837,11 +5945,20 @@ L_08B72740: goto L_08B727A0; L_08B727A0: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B727A8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 2080u); @@ -5856,7 +5973,6 @@ L_08B727A8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(12))); aot_gpr_6 = (static_cast(aot_gpr_5) < static_cast(aot_gpr_6) ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B727E4; } @@ -5867,11 +5983,20 @@ L_08B727E0: goto L_08B727E4; L_08B727E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B727EC: aot_gpr_4 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_6 = (0u | 2080u); @@ -5879,11 +6004,20 @@ L_08B727EC: { const std::int32_t dividend = static_cast(aot_gpr_4); const std::int32_t divisor = static_cast(aot_gpr_6); if (divisor == 0) { ctx.lo = dividend >= 0 ? 0xFFFFFFFFu : 1u; ctx.hi = static_cast(dividend); } else if (dividend == static_cast(0x80000000u) && divisor == -1) { ctx.lo = 0x80000000u; ctx.hi = 0u; } else { ctx.lo = static_cast(dividend / divisor); ctx.hi = static_cast(dividend % divisor); } } ctx.gpr[2] = (ctx.lo); jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72808: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), aot_gpr_31); @@ -5921,7 +6055,6 @@ L_08B72834: L_08B72840: aot_gpr_5 = (aot_gpr_5 & 1u); { const bool branch_taken = aot_gpr_5 == 0u; - // nop if (branch_taken) { goto L_08B72854; } @@ -5929,7 +6062,6 @@ L_08B72840: } L_08B7284C: aot_gpr_31 = (0x08B72854u); - // nop if (([&]() { /*PSPRECOMP_RESIDENT_SCHED_SAFE*/ if (rt.resident_generated_leaf_fast_allowed()) return rt.invoke_resident_generated_leaf<&vcs_resident_region_08ABE2C0, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem, ctx.pc, aot_gpr_4, aot_gpr_5, aot_gpr_6, aot_gpr_7, ctx.gpr[8], ctx.gpr[16], ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], aot_gpr_29, aot_gpr_31); AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_resident_scheduler_fallback<&recomp_unit_0174_entry, 174u, 470u, 0x08ABE2C0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B72854u) goto L_08B72854; AOT_REGCACHE_SYNC_OUT(); return; L_08B72854: @@ -5939,10 +6071,19 @@ L_08B72854: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72860: { const bool branch_taken = aot_gpr_4 == aot_gpr_6; - // nop if (branch_taken) { goto L_08B72898; } @@ -5964,11 +6105,20 @@ L_08B72868: goto L_08B72898; L_08B72898: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B728A0: aot_gpr_29 = (aot_gpr_29 + static_cast(-368)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(332), ctx.gpr[16]); @@ -5979,7 +6129,6 @@ L_08B728A0: { const std::uint32_t aot_run_words[6]{ctx.gpr[17], ctx.gpr[18], ctx.gpr[19], ctx.gpr[20], ctx.gpr[21], aot_gpr_31}; aot_mem.aot_direct_store32_block(aot_gpr_29 + static_cast(336), aot_run_words); } { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B72B3C; } @@ -5988,7 +6137,6 @@ L_08B728A0: L_08B728D8: aot_gpr_5 = (aot_mem.aot_direct_load32(aot_gpr_5 + static_cast(0))); { const bool branch_taken = aot_gpr_5 == aot_gpr_4; - // nop if (branch_taken) { goto L_08B72B3C; } @@ -6014,7 +6162,6 @@ L_08B728F8: } L_08B72908: aot_gpr_31 = (0x08B72910u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_direct<&recomp_unit_0216_entry, 216u, 289u, 0x08B65438u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B72910u) goto L_08B72910; AOT_REGCACHE_SYNC_OUT(); return; L_08B72910: @@ -6066,7 +6213,6 @@ L_08B72960: aot_gpr_4 = (aot_gpr_4 < static_cast(1) ? 1u : 0u); aot_gpr_4 = (aot_gpr_4 & 255u); { const bool branch_taken = aot_gpr_4 != 0u; - // nop if (branch_taken) { goto L_08B729C8; } @@ -6236,7 +6382,6 @@ L_08B72B20: L_08B72B28: ctx.gpr[16] = (aot_mem.aot_direct_load32(aot_gpr_29 + static_cast(20))); { const bool branch_taken = ctx.gpr[16] == 0u; - // nop if (branch_taken) { goto L_08B72B3C; } @@ -6263,7 +6408,17 @@ L_08B72B3C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72B60: aot_gpr_29 = (aot_gpr_29 + static_cast(-32)); aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); @@ -6289,7 +6444,6 @@ L_08B72B60: goto L_08B72BB4; L_08B72BB4: { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B72C60; } @@ -6297,7 +6451,6 @@ L_08B72BB4: } L_08B72BBC: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72C60; } @@ -6310,7 +6463,6 @@ L_08B72BC4: aot_fpr_13 = std::bit_cast(aot_mem.aot_direct_load32(ctx.gpr[10] + static_cast(16))); ctx.gpr[9] = (0u | 0u); ctx.fcr31 = (ctx.fcr31 & ~0x00800000u) | (((aot_fpr_12 < aot_fpr_13)) ? 0x00800000u : 0u); - // nop if (((ctx.fcr31 & 0x00800000u) != 0u)) { ctx.gpr[9] = (0u | 1u); goto L_08B72BE8; @@ -6319,7 +6471,6 @@ L_08B72BC4: L_08B72BE8: ctx.gpr[9] = (ctx.gpr[9] & 255u); { const bool branch_taken = ctx.gpr[9] == 0u; - // nop if (branch_taken) { goto L_08B72C44; } @@ -6365,7 +6516,6 @@ L_08B72C44: goto L_08B72C58; L_08B72C58: { const bool branch_taken = 0u == 0u; - // nop if (branch_taken) { goto L_08B72BB4; } @@ -6373,7 +6523,6 @@ L_08B72C58: } L_08B72C60: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72C7C; } @@ -6394,7 +6543,17 @@ L_08B72C7C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72C8C: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6444,7 +6603,6 @@ L_08B72CD8: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(16)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72D14; } @@ -6454,7 +6612,6 @@ L_08B72CF0: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(88))); aot_gpr_4 = (aot_gpr_4 & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72D14; } @@ -6463,7 +6620,6 @@ L_08B72CF0: L_08B72D00: aot_gpr_4 = (aot_mem.aot_direct_load32(ctx.gpr[17] + static_cast(80))); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72D14; } @@ -6471,7 +6627,6 @@ L_08B72D00: } L_08B72D0C: aot_gpr_31 = (0x08B72D14u); - // nop if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0117_entry, 117u, 129u, 0x089D89E0u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B72D14u) goto L_08B72D14; AOT_REGCACHE_SYNC_OUT(); return; L_08B72D14: @@ -6516,7 +6671,17 @@ L_08B72D40: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72D54: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); { const std::uint32_t aot_run_words[3]{ctx.gpr[16], ctx.gpr[17], aot_gpr_31}; @@ -6556,7 +6721,6 @@ L_08B72D94: L_08B72DA0: aot_gpr_4 = (ctx.gpr[16] & 1u); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72DB4; } @@ -6579,7 +6743,17 @@ L_08B72DB4: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72DC8: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_7 != aot_gpr_5; @@ -6602,7 +6776,6 @@ L_08B72DDC: goto L_08B72DE0; L_08B72DE0: { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72DFC; } @@ -6611,7 +6784,6 @@ L_08B72DE0: L_08B72DE8: aot_gpr_7 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); { const bool branch_taken = aot_gpr_7 == aot_gpr_5; - // nop if (branch_taken) { goto L_08B72DFC; } @@ -6630,11 +6802,20 @@ L_08B72DFC: goto L_08B72E00; L_08B72E00: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72E08: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(4), ctx.gpr[17]); @@ -6654,7 +6835,6 @@ L_08B72E24: aot_mem.aot_direct_store32(ctx.gpr[17] + static_cast(4), aot_gpr_4); aot_gpr_4 = (ctx.gpr[17] + static_cast(44)); { const bool branch_taken = aot_gpr_4 == 0u; - // nop if (branch_taken) { goto L_08B72E58; } @@ -6728,7 +6908,17 @@ L_08B72E94: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72EA8: aot_gpr_6 = (aot_mem.aot_direct_load32(aot_gpr_4 + static_cast(0))); aot_gpr_7 = (0u | 96u); @@ -6738,7 +6928,6 @@ L_08B72EA8: aot_gpr_5 = (ctx.lo); aot_gpr_6 = (aot_gpr_5 < aot_gpr_6 ? 1u : 0u); { const bool branch_taken = aot_gpr_6 == 0u; - // nop if (branch_taken) { goto L_08B72EE4; } @@ -6761,11 +6950,20 @@ L_08B72EE4: goto L_08B72EE8; L_08B72EE8: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72EF0: aot_gpr_29 = (aot_gpr_29 + static_cast(-16)); aot_mem.aot_direct_store32(aot_gpr_29 + static_cast(0), ctx.gpr[16]); @@ -6784,1573 +6982,3552 @@ L_08B72F04: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F1C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F24: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F2C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F34: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F3C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F44: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F4C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F54: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F5C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F64: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F6C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F74: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F7C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F84: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F8C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F94: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72F9C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FA4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FAC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FB4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FBC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FC4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FCC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FD4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FDC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FE4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FEC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FF4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B72FFC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73004: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7300C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73014: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7301C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73024: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7302C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73034: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7303C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73044: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7304C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73054: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7305C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73064: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7306C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73074: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7307C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73084: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7308C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73094: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7309C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B730FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73104: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7310C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73114: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7311C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73124: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7312C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73134: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7313C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73144: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7314C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73154: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7315C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73164: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7316C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73174: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7317C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73184: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7318C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73194: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7319C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B731FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73204: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7320C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73224: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7322C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73234: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7323C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73244: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7324C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73254: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7325C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73264: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7326C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73274: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7327C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73284: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7328C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73294: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7329C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B732FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73304: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7330C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7331C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7332C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7333C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7334C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7335C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7336C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73374: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7337C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73384: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7338C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73394: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7339C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B733A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B733AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B733CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B733DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B733EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B733FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7340C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73414: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7341C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73424: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7342C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73434: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7343C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73444: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7344C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73454: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7345C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73464: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7346C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73474: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7347C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73484: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7348C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73494: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7349C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B734FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73504: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7350C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73514: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7351C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73524: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7352C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73534: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73544: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7354C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73554: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7355C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73564: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7356C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73574: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7357C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73584: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7358C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73594: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7359C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735AC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735B4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735BC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735C4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735CC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735D4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735DC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735E4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735EC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735F4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B735FC: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73604: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7360C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73614: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7361C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73624: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7362C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7363C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7364C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73654: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7365C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73664: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7366C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7367C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73684: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7368C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B73694: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B7369C: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B736A4: jump_target = aot_gpr_31; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B736B0: - // nop (void)(static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(0u + static_cast(0)))))); (void)(ctx.gpr[2] << (0u & 31u)); - // nop ctx.pc = 0x02DCEBA0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B736C0: - // nop - // nop goto L_08B736C8; L_08B736C8: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B736CCu, 0x40010011u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; ctx.pc = 0x02DCE430u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B738D0: - // nop goto L_08B738D4; L_08B738D4: (void)(ctx.gpr[1] << 0u); ctx.gpr[1] = (ctx.gpr[26] & 21575u); - // nop - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B738F8u, 0x08B736B0u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7390C: @@ -8364,7 +10541,6 @@ L_08B73938: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7393Cu, 0x63657845u, "vfpu0 not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B73948: - // nop goto L_08B7394C; L_08B7394C: AOT_REGCACHE_SYNC_OUT(); @@ -8430,7 +10606,6 @@ L_08B73A40: goto L_08B73A48; L_08B73A48: ctx.gpr[14] = (0u | 0u); - // nop goto L_08B73A50; L_08B73A50: if (ctx.gpr[11] != aot_gpr_5) { @@ -8450,8 +10625,6 @@ L_08B73A60: } goto L_08B73A68; L_08B73A68: - // nop - // nop goto L_08B73A70; L_08B73A70: AOT_REGCACHE_SYNC_OUT(); @@ -8473,7 +10646,6 @@ L_08B73AB8: } goto L_08B73AC0; L_08B73AC0: - // nop goto L_08B73AC4; L_08B73AC4: if (ctx.gpr[27] != aot_gpr_5) { @@ -8718,18 +10890,6 @@ L_08B73E98: rt.unsupported(0x08B73E98u, 0x71B19E77u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B73ED4: ctx.gpr[17] = (ctx.gpr[18] & 59990u); - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B73F08u, 0x00000054u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B73F70: @@ -8739,7 +10899,6 @@ L_08B73F8C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B73F8Cu, 0x74696E49u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B73FA0: - // nop goto L_08B73FA4; L_08B73FA4: ctx.gpr[10] = (static_cast(ctx.gpr[17]) < 2570 ? 1u : 0u); diff --git a/profiles/vcs/generated/generated_unit_0220.cpp b/profiles/vcs/generated/generated_unit_0220.cpp index 31ab0d8..a60d0c2 100644 --- a/profiles/vcs/generated/generated_unit_0220.cpp +++ b/profiles/vcs/generated/generated_unit_0220.cpp @@ -6,83 +6,23 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0220[2427] = { - 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 5, 0, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, 0, 35, 0, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 40, 0, 41, - 0, 42, 43, 44, 0, 45, 0, 46, 0, 0, 47, 0, 48, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0220[38] = { + 0x0402000029020009ull, 0x0010000000000001ull, 0x8008004080410801ull, 0x0400810081042000ull, + 0x0008404000420404ull, 0x0000000000000000ull, 0xA0C400000A500000ull, 0x00000000000094AEull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0400000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0220[38] = { + 1u, 9u, 11u, 19u, 26u, 33u, 33u, 42u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, + 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, 50u, + 50u, 50u, 50u, 50u, 50u, 50u, }; void recomp_unit_0220_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -99,13 +39,25 @@ void recomp_unit_0220_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B74000u; - entry_id = (entry_delta < 9708u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0220[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 9708u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0220[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0220[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B74000; @@ -269,14 +221,10 @@ L_08B74458: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B74458u, 0x2061754Cu, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B74498: - // nop - // nop - // nop (void)(0u << 16u); (void)(0u << 16u); (void)(0u << 16u); (void)(0u << 16u); - // nop goto L_08B744B8; L_08B744B8: AOT_REGCACHE_SYNC_OUT(); @@ -302,7 +250,6 @@ L_08B74664: } goto L_08B7466C; L_08B7466C: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B74674u, 0x08827518u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B746C8: diff --git a/profiles/vcs/generated/generated_unit_0221.cpp b/profiles/vcs/generated/generated_unit_0221.cpp index 73f2c19..8b3141a 100644 --- a/profiles/vcs/generated/generated_unit_0221.cpp +++ b/profiles/vcs/generated/generated_unit_0221.cpp @@ -6,127 +6,29 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0221[3812] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 6, 0, 0, 0, 7, 0, 0, 8, 0, 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 0, - 13, 0, 14, 0, 0, 0, 0, 15, 0, 16, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 27, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 35, 0, 0, 36, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 46, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 0, 0, 50, 51, - 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, - 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 71, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, - 0, 0, 0, 75, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 79, 0, 80, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, - 0, 0, 0, 84, 85, 0, 86, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, - 0, 0, 0, 90, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0221[60] = { + 0x0000000000000001ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x8000000000000000ull, + 0x0000002000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x40804A4480200000ull, 0x2020410101020685ull, 0x0090090120121020ull, 0x1202402402404812ull, + 0x00808410C4800002ull, 0x0000000000004002ull, 0x0000000008000000ull, 0x0820800800000000ull, + 0x0000121080000002ull, 0x0000000000000000ull, 0x0808080000000000ull, 0x0000000000000021ull, + 0x0000010820000200ull, 0x210214A000000000ull, 0x4200000000000458ull, 0x0000004040100208ull, + 0x0000000802000000ull, 0x0000000000000200ull, 0x0000000040000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000040000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000800A80002ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0221[60] = { + 1u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, 2u, + 2u, 2u, 2u, 2u, 3u, 4u, 4u, 4u, 4u, 13u, 25u, 35u, 47u, 56u, 58u, 59u, + 63u, 68u, 68u, 71u, 73u, 77u, 84u, 90u, 95u, 97u, 98u, 99u, 99u, 99u, 99u, 99u, + 99u, 100u, 100u, 100u, 100u, 100u, 100u, 100u, 100u, 100u, 100u, 100u, }; void recomp_unit_0221_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -143,13 +45,25 @@ void recomp_unit_0221_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B78434u; - entry_id = (entry_delta < 15248u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0221[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 15248u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0221[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0221[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B78434; @@ -293,7 +207,6 @@ L_08B79CCC: rt.unsupported(0x08B79CCCu, 0x452F4154u, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B79CD8: { const std::int64_t product = static_cast(static_cast(0u)) * static_cast(static_cast(0u)); ctx.lo = static_cast(product); ctx.hi = static_cast(static_cast(product) >> 32u); } - // nop goto L_08B79CE0; L_08B79CE0: AOT_REGCACHE_SYNC_OUT(); @@ -472,7 +385,6 @@ L_08B7A09C: if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B7A0ACu) goto L_08B7A0AC; AOT_REGCACHE_SYNC_OUT(); return; L_08B7A0AC: - // nop goto L_08B7A0B0; L_08B7A0B0: AOT_REGCACHE_SYNC_OUT(); @@ -544,7 +456,6 @@ L_08B7A438: ctx.gpr[3] = (ctx.gpr[23] << 12u); ctx.gpr[24] = (ctx.gpr[13] << 27u); ctx.gpr[30] = (ctx.gpr[30] << 15u); - // nop goto L_08B7A4B0; L_08B7A4B0: AOT_REGCACHE_SYNC_OUT(); @@ -686,7 +597,6 @@ L_08B7B4DC: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7B4E0u, 0x088D658Cu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7BF38: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7BF3Cu, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7BF80: @@ -708,7 +618,6 @@ L_08B7BF90: rt.unsupported(0x08B7BF90u, 0x202D204Fu, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7BFC0: // vflush: architectural no-op that retains VFPU prefixes - // nop // vflush: architectural no-op that retains VFPU prefixes AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7BFCCu, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; diff --git a/profiles/vcs/generated/generated_unit_0222.cpp b/profiles/vcs/generated/generated_unit_0222.cpp index 21ffd9a..e0690fc 100644 --- a/profiles/vcs/generated/generated_unit_0222.cpp +++ b/profiles/vcs/generated/generated_unit_0222.cpp @@ -6,135 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0222[4095] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 6, 0, 7, 0, 0, 0, 0, - 8, 0, 0, 9, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 14, 0, 15, 0, 16, 17, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 24, 0, 0, 0, 0, 25, 0, 0, 0, 0, 26, 0, - 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 0, 0, 0, 0, 36, 0, 0, 37, 0, 38, 0, 39, 0, 0, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, - 0, 44, 0, 0, 0, 45, 0, 46, 0, 0, 0, 47, 0, 0, 48, 0, 0, 0, 49, 0, 50, 0, 0, 0, 51, 52, 0, 0, 53, 0, 0, 0, - 54, 0, 0, 0, 0, 55, 0, 0, 56, 0, 57, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 62, 0, 63, 0, 0, 0, 64, 0, - 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 72, 0, 0, 0, - 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, - 0, 78, 0, 0, 0, 0, 0, 79, 0, 0, 0, 80, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, 87, 0, 0, 0, 88, 0, 0, - 89, 0, 0, 0, 90, 0, 0, 0, 91, 0, 0, 92, 0, 0, 0, 93, 0, 0, 0, 94, 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, 97, 0, - 0, 98, 0, 0, 0, 99, 0, 0, 100, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 112, 0, - 0, 0, 113, 114, 0, 115, 0, 0, 0, 116, 0, 0, 0, 117, 118, 0, 119, 0, 0, 120, 0, 0, 121, 0, 0, 122, 0, 123, 0, 0, 0, 0, - 0, 124, 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 129, - 0, 130, 0, 0, 0, 0, 131, 0, 0, 132, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 135, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, 138, 0, 0, 139, 0, 0, 0, 140, 0, 0, 141, 0, 0, 0, 142, - 0, 0, 143, 0, 0, 0, 144, 0, 0, 145, 0, 0, 0, 146, 0, 0, 147, 0, 0, 0, 148, 0, 0, 149, 0, 0, 0, 150, 0, 0, 151, 0, - 0, 0, 152, 0, 0, 153, 0, 0, 0, 154, 0, 0, 155, 0, 0, 0, 156, 0, 0, 157, 0, 0, 0, 158, 0, 0, 159, 0, 0, 0, 160, 0, - 0, 161, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 164, 0, 0, 165, 0, 0, 0, 166, 0, 0, 167, 0, 0, 0, 168, 0, 0, 169, 0, 0, - 0, 170, 0, 0, 171, 0, 0, 0, 172, 0, 0, 173, 0, 0, 0, 174, 0, 0, 175, 0, 0, 0, 176, 0, 0, 177, 0, 0, 0, 178, 0, 0, - 179, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 182, 0, 0, 183, 0, 0, 0, 184, 0, 0, 185, 0, 0, 0, 186, 0, 0, 187, 0, 0, 0, - 188, 0, 0, 189, 0, 0, 0, 190, 0, 0, 191, 0, 0, 0, 192, 0, 0, 193, 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, 196, 0, 0, 197, - 0, 0, 0, 198, 0, 0, 199, 0, 0, 0, 200, 0, 0, 201, 0, 0, 0, 202, 0, 0, 203, 0, 0, 0, 204, 0, 205, 0, 0, 206, 207, 0, - 0, 208, 0, 0, 209, 210, 0, 0, 211, 212, 0, 213, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, - 0, 0, 216, 0, 0, 217, 0, 0, 218, 0, 0, 0, 219, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 222, 0, 0, - 0, 0, 0, 0, 223, 0, 0, 0, 224, 0, 0, 225, 0, 226, 0, 0, 0, 227, 0, 0, 228, 0, 229, 0, 0, 0, 230, 0, 0, 231, 0, 232, - 0, 0, 0, 233, 0, 0, 234, 0, 235, 0, 0, 0, 236, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 240, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 241, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 245, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 248, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 252, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 254, 0, 0, - 0, 0, 255, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 261, 0, 262, 263, 0, 0, 0, 0, 0, 0, 0, 264, 0, - 0, 0, 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 268, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 0, 0, 279, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 286, 0, - 0, 0, 0, 287, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 291, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, - 0, 297, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, - 0, 0, 0, 0, 302, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, - 0, 0, 307, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 0, 310, 0, 311, 0, 0, 0, 0, - 0, 0, 0, 312, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 316, 0, 0, 0, 0, 0, 0, - 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 320, 0, 0, 0, 0, 0, 0, 0, 321, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 323, 0, 0, 0, 0, 0, 0, 0, 324, 0, 325, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, - 327, 0, 0, 0, 0, 0, 0, 328, 0, 0, 329, 0, 330, 0, 0, 0, 0, 331, 0, 332, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 334, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0222[64] = { + 0x0000000000110001ull, 0x0000000000000000ull, 0x0000000000400000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x6A0814890A400000ull, 0x0010000000008500ull, + 0x0000000842108100ull, 0x0000000000004000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0012010500004000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x400000004108A904ull, + 0x00002521131448A2ull, 0x4501040000000040ull, 0x1081000810410020ull, 0x0000000000010404ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0400188210100000ull, 0x0000000000000001ull, + 0x2224100000000000ull, 0x0008892244488911ull, 0x0000000000000010ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0040000000000000ull, 0x0000000000000000ull, 0x4200800020200404ull, + 0x000810420A49622Cull, 0x2040824290000000ull, 0x4891224489122400ull, 0x2448912244891224ull, + 0x1224489122448912ull, 0x6512244891224489ull, 0x2100912402004B32ull, 0x20829148A4522910ull, + 0x0000004200000000ull, 0x0000000010840000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0080040000000000ull, 0x0000000000000000ull, 0x0000009000000000ull, 0x2040910000000000ull, + 0x4069000001084084ull, 0x0200080008404008ull, 0x0100820402004080ull, 0x0000000000000000ull, + 0x0000000001240000ull, 0x0101000020040000ull, 0x0840010841000000ull, 0x4000000000081082ull, + 0x2020410210000000ull, 0x0A40010408208210ull, 0x80A0080202802048ull, 0x480A148120280A00ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0222[64] = { + 1u, 4u, 4u, 5u, 5u, 5u, 5u, 18u, 22u, 28u, 29u, 29u, 29u, 35u, 35u, 35u, + 35u, 35u, 35u, 35u, 44u, 59u, 65u, 73u, 76u, 76u, 76u, 83u, 84u, 89u, 104u, 105u, + 105u, 105u, 106u, 106u, 113u, 128u, 136u, 152u, 170u, 188u, 208u, 223u, 241u, 243u, 246u, 246u, + 246u, 248u, 248u, 250u, 255u, 265u, 271u, 278u, 278u, 281u, 285u, 291u, 296u, 302u, 312u, 322u, }; void recomp_unit_0222_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -151,13 +46,25 @@ void recomp_unit_0222_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B7C000u; - entry_id = (entry_delta < 16380u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0222[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16380u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0222[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0222[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B7C000; @@ -502,28 +409,14 @@ LOCAL_DISPATCH: } L_08B7C000: (void)(0u << 16u); - // nop - // nop - // nop - // nop (void)(0u << 16u); - // nop - // nop - // nop - // nop (void)(0u << 16u); - // nop - // nop - // nop - // nop (void)(0u << 16u); goto L_08B7C040; L_08B7C040: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7C040u, 0x6E756F73u, "vfpu3 not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7C050: - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7C05Cu, 0x088E8E7Cu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7C258: @@ -704,7 +597,6 @@ L_08B7D450: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7D450u, 0x4549564Fu, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7D460: - // nop goto L_08B7D464; L_08B7D464: AOT_REGCACHE_SYNC_OUT(); @@ -733,32 +625,10 @@ L_08B7D4A8: rt.unsupported(0x08B7D4A8u, 0x43534944u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7D4B4: ctx.gpr[5] = (aot_gpr_26 < static_cast(19777) ? 1u : 0u); - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7D4C4u, 0x08936800u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7D518: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop if (!([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_ok_ = ctx.execute_signed_add(0u, 0u, 0u); AOT_REGCACHE_SYNC_IN(); return aot_regcache_ok_; }())) { rt.arithmetic_overflow(0x08B7D554u, 0x00000020u); AOT_REGCACHE_SYNC_OUT(); return; } - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7D56Cu, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7D5A8: @@ -779,7 +649,6 @@ L_08B7D5E8: ctx.execute_vfpu_vscl_ct<109u, 69u, 118u, 1u>(); ctx.execute_vfpu_vcmp_ct<116u, 70u, 1u, 14u>(); ctx.gpr[12] = (0u + 0u); - // nop goto L_08B7D5F8; L_08B7D5F8: AOT_REGCACHE_SYNC_OUT(); @@ -953,20 +822,8 @@ L_08B7DDCC: rt.unsupported(0x08B7DDD0u, 0x089558B0u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7DE10: (void)(0u << 16u); - // nop - // nop - // nop - // nop (void)(0u << 16u); - // nop - // nop - // nop - // nop (void)(0u << 16u); - // nop - // nop - // nop - // nop (void)(0u << 16u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7DE50u, 0x00007070u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1072,8 +929,6 @@ L_08B7E598: L_08B7E5A4: ctx.gpr[12] = (aot_gpr_19 < static_cast(28024) ? 1u : 0u); ctx.gpr[14] = (ctx.gpr[3] - aot_gpr_16); - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7E5B4u, 0x68547265u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7E5BC: @@ -1092,7 +947,6 @@ L_08B7E634: aot_gpr_16 = (aot_gpr_25 < static_cast(0) ? 1u : 0u); aot_gpr_24 = (ctx.gpr[10] & 18003u); if (ctx.gpr[2] == aot_gpr_19) { - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0227_entry, 227u, 73u, 0x08B927BCu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08B7E644; @@ -1103,7 +957,6 @@ L_08B7E650: aot_gpr_16 = (aot_gpr_25 < static_cast(0) ? 1u : 0u); aot_gpr_24 = (aot_gpr_26 & 18003u); if (ctx.gpr[2] == aot_gpr_19) { - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0227_entry, 227u, 75u, 0x08B927D8u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08B7E660; @@ -1114,7 +967,6 @@ L_08B7E66C: aot_gpr_16 = (aot_gpr_25 < static_cast(0) ? 1u : 0u); aot_gpr_24 = (ctx.gpr[10] | 18003u); if (ctx.gpr[2] == aot_gpr_19) { - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0227_entry, 227u, 76u, 0x08B927F4u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08B7E67C; @@ -1125,7 +977,6 @@ L_08B7E688: aot_gpr_16 = (aot_gpr_25 < static_cast(0) ? 1u : 0u); aot_gpr_24 = (aot_gpr_26 | 18003u); if (ctx.gpr[2] == aot_gpr_19) { - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0227_entry, 227u, 77u, 0x08B92810u>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08B7E698; @@ -1136,7 +987,6 @@ L_08B7E6A4: aot_gpr_16 = (aot_gpr_25 < static_cast(0) ? 1u : 0u); aot_gpr_24 = (ctx.gpr[10] ^ 18003u); if (ctx.gpr[2] == aot_gpr_19) { - // nop (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_trusted_direct<&recomp_unit_0227_entry, 227u, 79u, 0x08B9282Cu>(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08B7E6B4; @@ -1469,7 +1319,6 @@ L_08B7E9E8: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7E9E8u, 0x4F4C5F4Du, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7E9F4: - // nop goto L_08B7E9F8; L_08B7E9F8: AOT_REGCACHE_SYNC_OUT(); @@ -1639,7 +1488,6 @@ L_08B7ED70: aot_gpr_25 = (39322u << 16u); ctx.gpr[21] = (49807u << 16u); ctx.gpr[3] = (55050u << 16u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7ED8Cu, 0x0899BD80u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7F0A8: @@ -1756,7 +1604,6 @@ L_08B7F848: L_08B7F854: aot_gpr_18 = (aot_gpr_19 < static_cast(29811) ? 1u : 0u); ctx.gpr[14] = (ctx.gpr[3] - aot_gpr_16); - // nop goto L_08B7F860; L_08B7F860: ctx.execute_vfpu_vscl_ct<85u, 110u, 100u, 1u>(); @@ -1888,10 +1735,6 @@ L_08B7FE0C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FE0Cu, 0x434F5256u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FE18: - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FE28u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FE34: @@ -1904,11 +1747,6 @@ L_08B7FE5C: } goto L_08B7FE64; L_08B7FE64: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FE78u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FE84: @@ -1942,21 +1780,12 @@ L_08B7FF4C: } goto L_08B7FF54; L_08B7FF54: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FF68u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FF74: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FF74u, 0x45544157u, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FF80: - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FF90u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FF9C: @@ -1967,7 +1796,6 @@ L_08B7FFA8: rt.unsupported(0x08B7FFACu, 0x504F4F4Cu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FFB0: ctx.gpr[20] = (aot_gpr_26 & 16686u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FFB8u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FFC4: @@ -1977,19 +1805,12 @@ L_08B7FFC4: } goto L_08B7FFCC; L_08B7FFCC: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FFE0u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FFEC: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B7FFECu, 0x45544157u, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B7FFF8: - // nop - // nop ctx.pc = 0x08B80000u; AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0223.cpp b/profiles/vcs/generated/generated_unit_0223.cpp index 1b0628f..eb9d6d6 100644 --- a/profiles/vcs/generated/generated_unit_0223.cpp +++ b/profiles/vcs/generated/generated_unit_0223.cpp @@ -6,135 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0223[4094] = { - 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 15, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 0, 18, 0, 0, 0, 0, 19, 0, 20, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, 0, 0, 0, 0, 0, 0, - 0, 39, 0, 40, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 0, 48, 0, 0, 0, 0, 0, 0, 0, 49, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51, 0, 52, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, - 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 0, 65, 0, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 68, 0, 0, 0, 0, 0, 0, 0, 69, 0, 70, 0, 0, 0, 0, 0, 0, - 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 78, 0, 0, 0, 0, 0, 0, 0, 79, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 81, 0, 82, 0, 0, 0, 0, 0, 0, 0, 83, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 99, - 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 0, 0, 0, 0, 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, 104, 0, 105, 0, 0, - 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, 0, 0, 0, 0, 121, 0, 122, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 0, 0, - 0, 0, 0, 0, 0, 125, 0, 126, 0, 0, 0, 0, 0, 0, 0, 127, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 0, 130, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 132, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 146, 0, - 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, - 150, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 153, 0, 0, 154, 0, 0, 155, 0, 0, 0, 0, 156, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 160, 0, 161, - 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 163, 0, 164, 0, 0, 165, 0, 166, 0, 0, 167, 0, 168, 0, 169, 0, 170, 171, 0, 172, 0, 173, - 174, 0, 175, 0, 0, 0, 176, 0, 177, 0, 178, 179, 0, 180, 0, 181, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 0, 0, 186, 0, 0, 0, 187, 0, 188, 0, 0, 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, - 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 197, 0, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, - 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 205, - 0, 0, 0, 0, 206, 0, 0, 207, 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, - 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, - 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 218, 0, 0, 219, 0, 0, 0, 0, 220, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 231, - 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 0, 0, 238, 0, 0, 0, 0, 239, 0, 0, 0, 0, 240, 0, 0, 0, 0, 241, 0, 0, 0, 0, 242, 0, 0, - 0, 0, 243, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 246, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 248, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, - 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 258, 0, 0, 0, 0, 259, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, 0, 0, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 268, 0, 269, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, - 272, 0, 0, 0, 0, 273, 274, 0, 0, 275, 0, 0, 0, 276, 0, 277, 0, 278, 0, 0, 279, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, - 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 289, 0, 0, 0, 0, 290, 0, 0, 0, 0, 291, 0, 0, 0, 0, 292, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 293, 0, 294, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 298, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, - 300, 0, 0, 0, 301, 0, 302, 0, 0, 0, 303, 0, 0, 304, 0, 0, 305, 0, 0, 0, 0, 0, 306, 0, 307, 0, 0, 0, 308, 0, 0, 0, - 0, 0, 309, 310, 0, 0, 0, 0, 311, 312, 313, 0, 0, 0, 314, 0, 315, 0, 0, 316, 317, 0, 318, 0, 0, 0, 319, 0, 0, 320, 0, 0, - 321, 322, 0, 0, 323, 0, 324, 325, 0, 0, 0, 326, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, - 329, 0, 0, 0, 0, 330, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 333, - 0, 0, 334, 335, 336, 0, 337, 0, 338, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 0, 0, - 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 347, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 349, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 351, 0, 0, 0, 352, 0, 0, - 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 0, 359, 0, 360, 0, 0, 0, 361, 0, 362, 0, 363, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0223[64] = { + 0x0280A0280A028121ull, 0x2008020080A1280Aull, 0x020080A028020080ull, 0x80A0280A0280A028ull, + 0x280A0280A0280A02ull, 0x0280A0280A0280A0ull, 0xA02802008020080Aull, 0x02008020080A0280ull, + 0x8020080200802008ull, 0x280A0280A0080200ull, 0x0080200802008020ull, 0x2008020080200802ull, + 0x0A0280A0280A0280ull, 0x8020080200802028ull, 0x4822008020080200ull, 0x0000000501008020ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000040ull, 0x0000000000000000ull, + 0x0042124000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0xAD529420A1000400ull, + 0x000084000002AD45ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x40104A2400000000ull, + 0x2205020202020080ull, 0x4020409084081010ull, 0x0000002040202020ull, 0x0000002000842501ull, + 0x1000000000000000ull, 0x0000000000000040ull, 0x0000000000000000ull, 0x0000002100010200ull, + 0x8410000000000000ull, 0x0810000401000010ull, 0x4108408421084210ull, 0x0210000000000000ull, + 0x0000000000000000ull, 0x2010410100000040ull, 0x0080408008108420ull, 0x0000000000000001ull, + 0x0000000000000000ull, 0x0000000000400000ull, 0x0052A26101010A40ull, 0x0081000000000000ull, + 0x0084000000001041ull, 0x0000000042108400ull, 0x1141245104210425ull, 0x080208D32459470Cull, + 0x0000000000000421ull, 0x0000000000000000ull, 0x0208215C90000000ull, 0x0900000050042081ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x2A29550222400000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0223[64] = { + 1u, 14u, 25u, 33u, 46u, 59u, 71u, 81u, 89u, 96u, 106u, 112u, 119u, 131u, 139u, 147u, + 152u, 152u, 152u, 153u, 153u, 158u, 158u, 158u, 174u, 185u, 185u, 185u, 192u, 201u, 211u, 216u, + 223u, 224u, 225u, 225u, 229u, 232u, 237u, 249u, 251u, 251u, 257u, 265u, 266u, 266u, 267u, 281u, + 283u, 288u, 293u, 309u, 329u, 332u, 332u, 342u, 350u, 350u, 350u, 350u, 350u, 350u, 350u, 350u, }; void recomp_unit_0223_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -151,13 +46,25 @@ void recomp_unit_0223_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B80000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0223[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0223[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0223[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B80000; @@ -530,18 +437,12 @@ LOCAL_DISPATCH: } } L_08B80000: - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80008u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80014: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80014u, 0x45544157u, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80020: - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80030u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8003C: @@ -551,11 +452,6 @@ L_08B8003C: } goto L_08B80044; L_08B80044: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80058u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80064: @@ -565,11 +461,6 @@ L_08B80064: } goto L_08B8006C; L_08B8006C: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80080u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8008C: @@ -579,11 +470,6 @@ L_08B8008C: } goto L_08B80094; L_08B80094: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B800A8u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B800B4: @@ -593,11 +479,6 @@ L_08B800B4: } goto L_08B800BC; L_08B800BC: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B800D0u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B800DC: @@ -607,11 +488,6 @@ L_08B800DC: } goto L_08B800E4; L_08B800E4: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B800F8u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80104: @@ -621,11 +497,6 @@ L_08B80104: } goto L_08B8010C; L_08B8010C: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80120u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8012C: @@ -639,8 +510,6 @@ L_08B80134: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80134u, 0x41425F52u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80140: - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80148u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80154: @@ -684,11 +553,6 @@ L_08B80294: } goto L_08B8029C; L_08B8029C: - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B802B0u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B802BC: @@ -906,10 +770,6 @@ L_08B806CC: goto L_08B806D4; L_08B806D4: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B806E8u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B806F4: @@ -920,10 +780,6 @@ L_08B806F4: goto L_08B806FC; L_08B806FC: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80710u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8071C: @@ -934,10 +790,6 @@ L_08B8071C: goto L_08B80724; L_08B80724: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80738u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80744: @@ -948,10 +800,6 @@ L_08B80744: goto L_08B8074C; L_08B8074C: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80760u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8076C: @@ -1001,10 +849,6 @@ L_08B80974: goto L_08B8097C; L_08B8097C: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80990u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8099C: @@ -1015,10 +859,6 @@ L_08B8099C: goto L_08B809A4; L_08B809A4: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B809B8u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B809C4: @@ -1029,10 +869,6 @@ L_08B809C4: goto L_08B809CC; L_08B809CC: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B809E0u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B809EC: @@ -1043,10 +879,6 @@ L_08B809EC: goto L_08B809F4; L_08B809F4: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80A08u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80A14: @@ -1096,10 +928,6 @@ L_08B80C1C: goto L_08B80C24; L_08B80C24: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80C38u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80C44: @@ -1110,10 +938,6 @@ L_08B80C44: goto L_08B80C4C; L_08B80C4C: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80C60u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80C6C: @@ -1124,10 +948,6 @@ L_08B80C6C: goto L_08B80C74; L_08B80C74: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80C88u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80C94: @@ -1138,10 +958,6 @@ L_08B80C94: goto L_08B80C9C; L_08B80C9C: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80CB0u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80CBC: @@ -1152,10 +968,6 @@ L_08B80CBC: goto L_08B80CC4; L_08B80CC4: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80CD8u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80CE4: @@ -1166,10 +978,6 @@ L_08B80CE4: goto L_08B80CEC; L_08B80CEC: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80D00u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80D0C: @@ -1180,10 +988,6 @@ L_08B80D0C: goto L_08B80D14; L_08B80D14: aot_gpr_20 = (aot_gpr_26 & 16686u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80D28u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80D34: @@ -1220,19 +1024,12 @@ L_08B80EC4: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80EC4u, 0x442F454Eu, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80ED4: - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80EE0u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80EEC: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80EECu, 0x4D454854u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80EF8: - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B80F08u, 0x49445541u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B80F14: @@ -1266,7 +1063,6 @@ L_08B81498: L_08B814A4: ctx.execute_vfpu_vminmax_ct<95u, 115u, 101u, 1u, false>(); (void)(0u + 0u); - // nop goto L_08B814B0; L_08B814B0: // PSP CACHE is a no-op in coherent host memory. @@ -1383,14 +1179,12 @@ L_08B8183C: } goto L_08B81844; L_08B81844: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8184Cu, 0x08A3A890u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B818A8: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B818A8u, 0x4F4D4552u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B818BC: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B818C4u, 0x08A41804u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B81B88: @@ -1416,7 +1210,6 @@ L_08B81BA4: L_08B81BAC: ctx.gpr[5] = (ctx.gpr[18] < static_cast(19777) ? 1u : 0u); ctx.gpr[10] = (aot_gpr_26 << (ctx.gpr[2] & 31u)); - // nop goto L_08B81BB8; L_08B81BB8: ctx.execute_vfpu_vec3_ct<76u, 111u, 97u, 1u, 2u>(); @@ -1922,7 +1715,6 @@ L_08B83340: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B83340u, 0x6B617242u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8334C: - // nop goto L_08B83350; L_08B83350: if (ctx.gpr[19] == aot_gpr_20) { diff --git a/profiles/vcs/generated/generated_unit_0224.cpp b/profiles/vcs/generated/generated_unit_0224.cpp index 359903f..b8af047 100644 --- a/profiles/vcs/generated/generated_unit_0224.cpp +++ b/profiles/vcs/generated/generated_unit_0224.cpp @@ -6,135 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0224[4093] = { - 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 0, 6, 0, 0, 0, 0, 7, 0, 0, 8, 0, 0, 9, 10, 11, 12, 0, 0, 0, 13, 0, 14, 0, 0, 15, 16, 0, 0, 0, - 17, 18, 0, 19, 0, 20, 21, 0, 22, 0, 23, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 36, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 47, 0, 0, 48, 0, 0, 49, - 0, 50, 51, 0, 0, 52, 0, 53, 0, 0, 54, 0, 0, 55, 0, 0, 56, 0, 57, 0, 0, 58, 0, 59, 60, 0, 0, 61, 0, 0, 62, 0, - 0, 0, 0, 63, 0, 64, 0, 65, 0, 0, 0, 66, 0, 67, 0, 0, 68, 0, 69, 70, 0, 0, 71, 0, 72, 73, 0, 0, 0, 74, 0, 75, - 76, 0, 0, 0, 77, 0, 0, 78, 0, 0, 0, 79, 0, 80, 81, 0, 0, 82, 0, 83, 0, 84, 0, 0, 0, 85, 86, 0, 0, 0, 87, 88, - 0, 0, 89, 0, 90, 0, 0, 91, 0, 92, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 95, 0, 96, 0, 0, 97, 0, 0, 98, 0, 0, 99, - 0, 100, 0, 0, 0, 101, 0, 0, 0, 102, 0, 0, 0, 103, 0, 0, 104, 0, 0, 105, 0, 0, 0, 106, 0, 0, 107, 0, 0, 108, 109, 0, - 0, 110, 0, 111, 0, 0, 0, 112, 113, 0, 0, 0, 0, 0, 114, 0, 0, 0, 115, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, - 0, 0, 119, 0, 0, 0, 120, 0, 121, 0, 0, 0, 122, 123, 0, 0, 124, 0, 125, 0, 126, 0, 127, 128, 0, 129, 0, 130, 0, 0, 131, 0, - 132, 0, 133, 0, 0, 134, 0, 135, 0, 136, 0, 0, 0, 137, 0, 0, 138, 0, 0, 0, 139, 0, 0, 0, 0, 140, 0, 0, 0, 0, 141, 0, - 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 145, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 151, 0, 0, 152, 0, 0, 0, 153, 0, 154, - 0, 0, 0, 155, 0, 156, 0, 0, 157, 0, 158, 0, 0, 0, 159, 160, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 0, 163, 0, 0, 164, 0, 0, 0, 0, 165, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 169, 0, 0, 0, 0, 170, 0, 0, 0, 0, 171, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 174, 175, 0, 176, 177, 0, 178, 0, 179, - 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 182, 0, 183, 0, 0, 0, 184, 0, 0, 0, 0, 0, 185, 186, 0, - 0, 187, 0, 188, 189, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 194, 0, - 195, 0, 0, 196, 0, 0, 0, 0, 197, 198, 0, 0, 199, 0, 200, 0, 0, 201, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 203, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0224[64] = { + 0x0000000000050101ull, 0x212AAD6B19479214ull, 0x00000000A4400420ull, 0x0000000000000000ull, + 0x4000000000000000ull, 0x0000000000000000ull, 0x0100000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000200ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000800000ull, 0x0000000004000000ull, 0x0000010000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0002000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000080ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x9240000000000000ull, 0xA34D28A849A524A6ull, 0x92512294C62A6891ull, + 0x9014418A64892222ull, 0x421122A54AD53144ull, 0x4000000000000008ull, 0x0000000000004500ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000400000400ull, 0xA241040000000000ull, + 0x000000000020C528ull, 0x1041084A00000000ull, 0x608A0810AD850842ull, 0x104253094C04081Aull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0224[64] = { + 1u, 5u, 32u, 38u, 38u, 39u, 39u, 40u, 40u, 40u, 40u, 40u, 40u, 41u, 41u, 41u, + 41u, 41u, 41u, 41u, 41u, 41u, 41u, 41u, 41u, 41u, 42u, 43u, 44u, 44u, 44u, 44u, + 44u, 44u, 44u, 44u, 44u, 44u, 44u, 45u, 45u, 45u, 46u, 46u, 46u, 46u, 46u, 46u, + 46u, 46u, 50u, 76u, 100u, 119u, 142u, 144u, 147u, 147u, 147u, 149u, 155u, 162u, 169u, 187u, }; void recomp_unit_0224_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -151,13 +46,25 @@ void recomp_unit_0224_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B84000u; - entry_id = (entry_delta < 16372u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0224[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16372u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0224[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0224[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B84000; @@ -427,7 +334,6 @@ L_08B84160: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B84160u, 0x4D5F4554u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8416C: - // nop goto L_08B84170; L_08B84170: AOT_REGCACHE_SYNC_OUT(); @@ -435,7 +341,6 @@ L_08B84170: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B84174u, 0x4D5F5245u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B84180: - // nop goto L_08B84184; L_08B84184: AOT_REGCACHE_SYNC_OUT(); @@ -448,7 +353,6 @@ L_08B8418C: } goto L_08B84194; L_08B84194: - // nop goto L_08B84198; L_08B84198: if (aot_gpr_2 != aot_gpr_19) { @@ -527,38 +431,26 @@ L_08B8427C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B84280u, 0x20642520u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B844F8: - // nop // vflush: architectural no-op that retains VFPU prefixes // vflush: architectural no-op that retains VFPU prefixes // vflush: architectural no-op that retains VFPU prefixes // vflush: architectural no-op that retains VFPU prefixes - // nop // vflush: architectural no-op that retains VFPU prefixes AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B84514u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B846E0: - // nop - // nop ctx.pc = 0x02AEC130u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B84C24: - // nop ctx.pc = 0x02B92FC0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8595C: - // nop ctx.pc = 0x0277B880u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B85A68: - // nop - // nop ctx.pc = 0x02CAAA30u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B85BA0: - // nop - // nop ctx.pc = 0x02CAB900u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B866C4: - // nop ctx.pc = 0x027615F0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8691C: - // nop ctx.pc = 0x02BA9E70u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B871D8: AOT_REGCACHE_SYNC_OUT(); @@ -672,7 +564,6 @@ L_08B872F4: } goto L_08B872FC; L_08B872FC: - // nop goto L_08B87300; L_08B87300: AOT_REGCACHE_SYNC_OUT(); @@ -710,7 +601,6 @@ L_08B87354: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B87354u, 0x49544341u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B87364: - // nop goto L_08B87368; L_08B87368: AOT_REGCACHE_SYNC_OUT(); @@ -846,7 +736,6 @@ L_08B87550: } goto L_08B87558; L_08B87558: - // nop goto L_08B8755C; L_08B8755C: AOT_REGCACHE_SYNC_OUT(); @@ -914,7 +803,6 @@ L_08B87728: rt.unsupported(0x08B87728u, 0x4745504Du, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B87738: (void)(0u & 0u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B87740u, 0x7070632Eu, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B87A28: @@ -966,7 +854,6 @@ L_08B87C28: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B87C28u, 0x70696C42u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B87C38: - // nop goto L_08B87C3C; L_08B87C3C: AOT_REGCACHE_SYNC_OUT(); @@ -1021,7 +908,6 @@ L_08B87E48: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B87E50u, 0x68537069u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B87E5C: - // nop goto L_08B87E60; L_08B87E60: if (aot_gpr_3 == aot_gpr_20) { diff --git a/profiles/vcs/generated/generated_unit_0225.cpp b/profiles/vcs/generated/generated_unit_0225.cpp index decf5fa..0f01a76 100644 --- a/profiles/vcs/generated/generated_unit_0225.cpp +++ b/profiles/vcs/generated/generated_unit_0225.cpp @@ -6,135 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0225[4094] = { - 1, 0, 2, 0, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 7, 0, 0, 8, 0, 9, 0, 0, 0, 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, - 15, 0, 0, 16, 0, 0, 0, 17, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 22, 0, 23, 0, 0, 0, 0, 24, - 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 28, 0, 0, 29, 0, 0, 0, 30, 31, 0, 32, 0, 0, 33, 0, 34, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 37, 0, - 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 46, 0, 0, 0, 47, 0, 0, 48, 0, 49, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 60, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 64, 0, 0, 65, 0, 66, 0, 0, 67, 0, 68, 0, 0, - 0, 0, 0, 69, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 71, 0, 0, 72, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, - 76, 0, 0, 77, 0, 0, 78, 0, 0, 79, 0, 0, 80, 0, 0, 81, 0, 0, 82, 0, 83, 0, 84, 0, 0, 85, 0, 0, 0, 0, 86, 0, - 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 91, 92, 0, 0, 0, 93, 0, 0, 0, 0, 94, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 97, 0, 98, 0, 0, 99, 0, 0, 100, 0, - 0, 101, 0, 0, 0, 0, 0, 102, 0, 0, 103, 0, 0, 0, 104, 0, 0, 0, 105, 0, 0, 106, 107, 0, 108, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 110, 0, 0, 0, 111, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 118, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 120, 0, 0, 0, 0, 0, - 121, 0, 0, 122, 0, 0, 0, 0, 0, 0, 123, 0, 0, 124, 0, 125, 0, 0, 126, 0, 127, 0, 0, 128, 129, 0, 0, 130, 0, 0, 0, 0, - 131, 0, 0, 0, 0, 132, 0, 0, 0, 0, 133, 0, 0, 134, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 136, 0, 0, 137, 0, 0, 0, - 0, 138, 0, 0, 0, 139, 0, 0, 0, 140, 0, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 144, - 0, 0, 0, 0, 0, 145, 0, 0, 0, 146, 0, 0, 0, 147, 0, 0, 0, 0, 0, 148, 0, 0, 0, 149, 0, 0, 0, 0, 0, 150, 0, 0, - 0, 151, 0, 0, 152, 0, 0, 0, 153, 0, 0, 0, 0, 154, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 156, 0, 0, 157, 0, 158, 0, - 0, 0, 159, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 163, 0, 0, 0, 0, 164, 0, 0, - 0, 0, 0, 165, 0, 0, 0, 166, 0, 0, 0, 167, 0, 0, 0, 0, 168, 0, 0, 0, 169, 0, 0, 0, 0, 170, 0, 0, 171, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 178, 0, 0, - 0, 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, - 0, 187, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 196, 0, 0, 0, 0, 197, - 0, 198, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 0, 0, 0, 0, - 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, - 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 217, 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 221, 0, 0, 222, 223, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 225, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 231, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 233, 234, 235, 236, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 242, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, - 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 250, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 256, - 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 258, 0, 0, 259, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 263, 0, 264, 0, 0, 0, 0, 265, 0, 0, 266, 0, - 0, 0, 267, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 278, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 290, 0, 291, 0, 0, 0, 0, 292, 0, 0, 0, 293, 0, 0, 294, 0, - 0, 0, 0, 0, 295, 296, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 302, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 307, 0, 0, 0, - 0, 0, 308, 0, 0, 309, 0, 0, 310, 0, 0, 0, 0, 0, 311, 312, 0, 0, 0, 0, 0, 0, 313, 0, 0, 314, 0, 0, 0, 0, 315, 0, - 0, 0, 0, 316, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 319, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 0, 0, 0, 322, 0, - 0, 323, 0, 0, 0, 0, 324, 0, 0, 0, 0, 325, 0, 0, 326, 0, 327, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 0, 0, 330, 331, 332, - 0, 0, 0, 0, 0, 0, 333, 0, 0, 334, 0, 335, 0, 0, 336, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 0, 0, - 340, 0, 0, 0, 0, 0, 341, 342, 0, 0, 0, 0, 343, 0, 0, 0, 0, 344, 0, 0, 345, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 349, 0, 0, 0, 0, 0, 350, 351, 0, 0, 0, 0, 0, - 0, 352, 0, 353, 0, 0, 0, 0, 354, 0, 0, 0, 0, 355, 0, 356, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 360, 0, 0, 0, 361, 0, 0, 0, 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, 364, 365, - 0, 0, 0, 366, 0, 0, 0, 0, 367, 368, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 372, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0225[64] = { + 0x0000000010529245ull, 0x0001000000000000ull, 0x0000028984100000ull, 0x8504000201000000ull, + 0x440000008A589441ull, 0x0008040040024401ull, 0x0000000000000000ull, 0x0008019011010A45ull, + 0x2949210200200401ull, 0x4254924921448208ull, 0x0008423010102020ull, 0x4948000000000000ull, + 0x0000051801644482ull, 0x0000010000000000ull, 0x0000000000000000ull, 0x0440900240040000ull, + 0x120824210994A409ull, 0x2088222084042222ull, 0x2120210452102112ull, 0x0101004012110888ull, + 0x0040820422040100ull, 0x0020104201040404ull, 0x0000000000880000ull, 0x0000200000000000ull, + 0x0000004284400001ull, 0x0000000000000000ull, 0x010A100000000000ull, 0x0000000000000000ull, + 0x000840040C000000ull, 0x2041008080004002ull, 0x0040010400000800ull, 0x000E410000000000ull, + 0x0000000000000009ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0040000400010000ull, 0x0000000001400000ull, 0x000040100007C040ull, + 0x0000104002801000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000810204080ull, 0x0000000000000000ull, 0x0000000000000120ull, 0x0000080000000000ull, + 0x8102040000000000ull, 0x0000000000000040ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000022400000000ull, 0x0400420448502004ull, 0x0040040040040040ull, 0x0404400400414004ull, + 0x0002000080000000ull, 0x4885020002008010ull, 0x0010001200101030ull, 0x4240C12418022090ull, + 0xE061484240C06048ull, 0x081210C130084A40ull, 0x0080A10A06088020ull, 0x22090308C0311802ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0225[64] = { + 1u, 11u, 12u, 19u, 25u, 38u, 45u, 45u, 57u, 69u, 87u, 96u, 101u, 113u, 114u, 114u, + 121u, 138u, 151u, 165u, 175u, 183u, 191u, 193u, 194u, 200u, 200u, 204u, 204u, 209u, 216u, 220u, + 225u, 227u, 227u, 227u, 227u, 227u, 230u, 232u, 240u, 245u, 245u, 245u, 245u, 250u, 250u, 252u, + 253u, 257u, 258u, 258u, 258u, 261u, 271u, 276u, 284u, 286u, 295u, 302u, 316u, 333u, 347u, 358u, }; void recomp_unit_0225_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -151,13 +46,25 @@ void recomp_unit_0225_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B88000u; - entry_id = (entry_delta < 16376u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0225[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16376u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0225[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0225[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B88000; @@ -639,7 +546,6 @@ L_08B883E8: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B883E8u, 0x696C4265u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B883FC: - // nop goto L_08B88400; L_08B88400: AOT_REGCACHE_SYNC_OUT(); @@ -664,7 +570,6 @@ L_08B8843C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B88440u, 0x616C5072u, "vfpu0 not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8844C: - // nop goto L_08B88450; L_08B88450: if (aot_gpr_19 == ctx.gpr[20]) { @@ -751,8 +656,6 @@ L_08B88740: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B88744u, 0x08B3CEBCu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B88760: - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B88768u, 0x00002928u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B88770: @@ -877,7 +780,6 @@ L_08B889E4: ctx.execute_vfpu_vcmp_ct<105u, 99u, 1u, 8u>(); ctx.execute_vfpu_vscl_ct<101u, 87u, 114u, 1u>(); ctx.execute_vfpu_vec3_ct<99u, 107u, 101u, 1u, 2u>(); - // nop goto L_08B889F8; L_08B889F8: AOT_REGCACHE_SYNC_OUT(); @@ -915,7 +817,6 @@ L_08B88BCC: L_08B88BD8: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B88BD8u, 0x44454B43u, "unsupported CFC1 control register"); AOT_REGCACHE_SYNC_OUT(); return; - // nop goto L_08B88BE0; L_08B88BE0: AOT_REGCACHE_SYNC_OUT(); @@ -968,7 +869,6 @@ L_08B88C90: rt.unsupported(0x08B88C90u, 0x72657355u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B88CA0: (void)(static_cast(static_cast(0u) >> 1u)); - // nop goto L_08B88CA8; L_08B88CA8: AOT_REGCACHE_SYNC_OUT(); @@ -1238,7 +1138,6 @@ L_08B895B0: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B895B0u, 0x74666F53u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B895D4: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B895DCu, 0x08B583ECu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8964C: @@ -1255,7 +1154,6 @@ L_08B89800: rt.unsupported(0x08B89804u, 0x08B58D9Cu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B89858: ctx.execute_vfpu_vhdp_ct<45u, 73u, 110u, 1u>(); - // nop jump_target = aot_gpr_3; ctx.gpr[13] = (0x08B89868u); AOT_REGCACHE_SYNC_OUT(); @@ -1301,7 +1199,6 @@ L_08B89C68: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B89C68u, 0x0000002Eu, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B89C6C: - // nop (void)(static_cast(static_cast(0u) >> 1u)); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B89C74u, 0x494A2D43u, "cop2/vfpu not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1344,12 +1241,6 @@ L_08B89E2C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B89E2Cu, 0x203A7325u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B89E88: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B89EA0; L_08B89EA0: (void)(ctx.gpr[2] << 4u); @@ -1390,12 +1281,6 @@ L_08B89FCC: aot_gpr_18 = (ctx.gpr[17] & 12850u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B89FE4u, 0x44454B46u, "unsupported CFC1 control register"); AOT_REGCACHE_SYNC_OUT(); return; - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8A000; L_08B8A000: AOT_REGCACHE_SYNC_OUT(); @@ -1414,176 +1299,46 @@ L_08B8A588: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8A58Cu, 0x00972014u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8A5D8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8A658; L_08B8A658: - // nop - // nop goto L_08B8A660; L_08B8A660: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8A718; L_08B8A718: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8A738; L_08B8A738: - // nop goto L_08B8A73C; L_08B8A73C: - // nop goto L_08B8A740; L_08B8A740: - // nop goto L_08B8A744; L_08B8A744: - // nop goto L_08B8A748; L_08B8A748: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8A790; L_08B8A790: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8A7B8; L_08B8A7B8: - // nop - // nop - // nop (void)(0u << 16u); aot_gpr_12 = (52429u << 16u); (void)(0u << 16u); - // nop (void)(0u << 16u); (void)(0u << 16u); (void)(0u << 16u); aot_gpr_12 = (52429u << 16u); (void)(0u << 16u); - // nop - // nop aot_gpr_12 = (52429u << 16u); (void)(0u << 16u); aot_gpr_19 = (13107u << 16u); - // nop aot_gpr_19 = (13107u << 16u); - // nop aot_gpr_12 = (52429u << 16u); (void)(0u << 16u); (void)(0u << 16u); (void)(0u << 16u); aot_gpr_19 = (13107u << 16u); - // nop (void)(0u << 16u); (void)(0u << 16u); (void)(0u << 16u); - // nop goto L_08B8A830; L_08B8A830: AOT_REGCACHE_SYNC_OUT(); @@ -1616,15 +1371,23 @@ L_08B8AC1C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B8AC38: ctx.gpr[1] = (0u << 18u); - // nop (void)(ctx.hi); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8AC44u, 0x000003E8u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8AC54: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8AC58u, 0x000003E8u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8AC70: @@ -1638,7 +1401,17 @@ L_08B8AC8C: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B8AE14: jump_target = 0u; AOT_REGCACHE_SYNC_OUT(); @@ -1646,26 +1419,32 @@ L_08B8AE14: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B8AE20: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8AE24u, 0x08BAACD4u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8AFAC: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8AFB4u, 0x08BAAE10u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B0A8: (void)(static_cast(static_cast(0u) >> 0u)); if (0u != 0u) (void)(0u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B0B8u, 0x08BAAEE0u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B0C4: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B0CCu, 0x08BAAEF0u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B0E0: - // nop ctx.pc = 0x02EABC00u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B0FC: AOT_REGCACHE_SYNC_OUT(); @@ -1682,46 +1461,16 @@ L_08B8B494: rt.unsupported(0x08B8B498u, 0x44525355u, "unsupported CFC1 control register"); AOT_REGCACHE_SYNC_OUT(); return; jump_target = ctx.gpr[1]; ctx.gpr[10] = (0x08B8B4A4u); - // nop ctx.pc = jump_target; if (([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()) && ctx.pc == 0x08B8B4A4u) goto L_08B8B4A4; AOT_REGCACHE_SYNC_OUT(); return; L_08B8B4A4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8B508; L_08B8B508: - // nop ctx.pc = 0x02EACB70u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B534: - // nop - // nop ctx.pc = 0x02EACC30u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B550: - // nop ctx.pc = 0x02EACC90u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B558: jump_target = 0u; @@ -1729,7 +1478,17 @@ L_08B8B558: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08B8B56C: (void)(0u >> 0u); jump_target = 0u; @@ -1752,52 +1511,22 @@ L_08B8B5A4: rt.unsupported(0x08B8B5A8u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B5B8: (void)(0u << (0u & 31u)); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B5CCu, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B5E8: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B5ECu, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B618: (void)(static_cast(static_cast(0u) >> 0u)); (void)(0u >> 0u); - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B630u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B648: (void)(0u >> 0u); - // nop - // nop - // nop - // nop - // nop (void)(0u >> 0u); - // nop - // nop - // nop - // nop - // nop goto L_08B8B678; L_08B8B678: (void)(0u >> 0u); - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8B6A8; L_08B8B6A8: AOT_REGCACHE_SYNC_OUT(); @@ -1809,25 +1538,16 @@ L_08B8B708: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B708u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B738: - // nop - // nop goto L_08B8B740; L_08B8B740: - // nop - // nop - // nop - // nop (void)(static_cast(std::countl_zero(0u))); - // nop goto L_08B8B758; L_08B8B758: (void)(0u << 16u); aot_gpr_19 = (13107u << 16u); - // nop // PSP CACHE is a no-op in coherent host memory. // PSP CACHE is a no-op in coherent host memory. // PSP CACHE is a no-op in coherent host memory. - // nop aot_gpr_19 = (13107u << 16u); aot_gpr_12 = (52429u << 16u); // PSP CACHE is a no-op in coherent host memory. @@ -1835,11 +1555,9 @@ L_08B8B758: // PSP CACHE is a no-op in coherent host memory. goto L_08B8B788; L_08B8B788: - // nop // PSP CACHE is a no-op in coherent host memory. // PSP CACHE is a no-op in coherent host memory. // PSP CACHE is a no-op in coherent host memory. - // nop aot_gpr_19 = (13107u << 16u); (void)(0u << 16u); aot_gpr_19 = (13107u << 16u); @@ -1849,10 +1567,8 @@ L_08B8B788: // PSP CACHE is a no-op in coherent host memory. goto L_08B8B7B8; L_08B8B7B8: - // nop (void)(0u << 16u); (void)(0u << 16u); - // nop goto L_08B8B7C8; L_08B8B7C8: (void)(0u << 16u); @@ -1865,7 +1581,6 @@ L_08B8B7C8: aot_gpr_25 = (39322u << 16u); goto L_08B8B7E8; L_08B8B7E8: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B7ECu, 0x42700000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B87C: @@ -1883,7 +1598,6 @@ L_08B8B93C: aot_gpr_25 = (39322u << 16u); aot_gpr_19 = (13107u << 16u); aot_gpr_19 = (13107u << 16u); - // nop aot_gpr_12 = (52429u << 16u); (void)(0u << 16u); aot_gpr_12 = (52429u << 16u); @@ -1897,7 +1611,6 @@ L_08B8B964: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8B974u, 0x40000000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8B9A4: - // nop aot_gpr_12 = (52429u << 16u); aot_gpr_5 = (7864u << 16u); aot_gpr_12 = (52429u << 16u); @@ -1910,7 +1623,6 @@ L_08B8B9C0: (void)(0u << 16u); goto L_08B8B9C8; L_08B8B9C8: - // nop ctx.gpr[6] = (26214u << 16u); ctx.gpr[6] = (26214u << 16u); (void)(0u << 16u); @@ -1936,82 +1648,19 @@ L_08B8B9F8: aot_gpr_12 = (52429u << 16u); goto L_08B8BA10; L_08B8BA10: - // nop goto L_08B8BA14; L_08B8BA14: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8BA30; L_08B8BA30: - // nop - // nop - // nop // PSP CACHE is a no-op in coherent host memory. - // nop - // nop - // nop - // nop goto L_08B8BA50; L_08B8BA50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8BA84; L_08B8BA84: - // nop - // nop - // nop goto L_08B8BA90; L_08B8BA90: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8BAD0; L_08B8BAD0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8BB10; L_08B8BB10: (void)(aot_gpr_5 << 0u); @@ -2047,12 +1696,10 @@ L_08B8BB70: L_08B8BB88: aot_gpr_5 = (58196u << 16u); aot_gpr_5 = (58196u << 16u); - // nop goto L_08B8BB94; L_08B8BB94: // PSP CACHE is a no-op in coherent host memory. // PSP CACHE is a no-op in coherent host memory. - // nop goto L_08B8BBA0; L_08B8BBA0: (void)(ctx.gpr[1] << 0u); @@ -2237,10 +1884,8 @@ L_08B8BD98: goto L_08B8BD9C; L_08B8BD9C: ctx.gpr[21] = (49807u << 16u); - // nop // PSP CACHE is a no-op in coherent host memory. // PSP CACHE is a no-op in coherent host memory. - // nop goto L_08B8BDB0; L_08B8BDB0: (void)(ctx.gpr[1] << 0u); @@ -2251,15 +1896,8 @@ L_08B8BDB0: goto L_08B8BDC4; L_08B8BDC4: (void)(static_cast(static_cast(ctx.gpr[6]) >> (0u & 31u))); - // nop - // nop goto L_08B8BDD0; L_08B8BDD0: - // nop - // nop - // nop - // nop - // nop (void)(0u << 0u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8BDE8u, 0x01010101u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -2267,7 +1905,6 @@ L_08B8BDEC: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8BDECu, 0x01010101u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8BE14: - // nop (void)(0u << 0u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8BE1Cu, 0x01010101u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -2290,15 +1927,9 @@ L_08B8BE8C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8BE8Cu, 0x00010101u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8BEA0: - // nop - // nop - // nop - // nop - // nop goto L_08B8BEB4; L_08B8BEB4: (void)(ctx.gpr[1] << 0u); - // nop goto L_08B8BEBC; L_08B8BEBC: AOT_REGCACHE_SYNC_OUT(); @@ -2314,22 +1945,12 @@ L_08B8BF2C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8BF2Cu, 0x00000101u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8BF30: - // nop - // nop - // nop - // nop goto L_08B8BF40; L_08B8BF40: - // nop - // nop - // nop - // nop goto L_08B8BF50; L_08B8BF50: - // nop goto L_08B8BF54; L_08B8BF54: - // nop aot_gpr_12 = (52429u << 16u); aot_gpr_25 = (39322u << 16u); aot_gpr_12 = (52429u << 16u); @@ -2355,28 +1976,12 @@ L_08B8BFA4: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B8BFA4u, 0x00001770u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B8BFC0: - // nop - // nop - // nop goto L_08B8BFCC; L_08B8BFCC: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8BFE4; L_08B8BFE4: - // nop - // nop - // nop - // nop goto L_08B8BFF4; L_08B8BFF4: - // nop - // nop - // nop ctx.pc = 0x08B8C000u; AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0226.cpp b/profiles/vcs/generated/generated_unit_0226.cpp index 8d25a8c..32e666e 100644 --- a/profiles/vcs/generated/generated_unit_0226.cpp +++ b/profiles/vcs/generated/generated_unit_0226.cpp @@ -6,119 +6,28 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0226[3582] = { - 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, 0, 22, 0, 23, 0, 0, - 0, 0, 0, 0, 24, 25, 0, 0, 0, 0, 0, 26, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 0, - 67, 0, 68, 0, 69, 70, 0, 0, 71, 0, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0226[56] = { + 0x0200802008020081ull, 0x8020080200802008ull, 0x2842008020080204ull, 0x0080200802008830ull, + 0x2008020080200812ull, 0x0600803008020080ull, 0x8020080204812028ull, 0x0842208020082200ull, + 0x0080202C02009135ull, 0x2008020080200802ull, 0x0200802008020080ull, 0x8020080200802008ull, + 0x0000000020080200ull, 0x0000000000000004ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000100000000ull, 0x0001000000000000ull, 0x0000000000000000ull, + 0x0010000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000008004000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000400000000000ull, 0x0000000000000000ull, 0x0000000000000004ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0100000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0800000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000001000ull, 0x0000000010000000ull, 0x0041000000000000ull, + 0x0000200001000010ull, 0x0000000000000000ull, 0x0000000010001000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x2001000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x4000000000800000ull, 0x2000000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0226[56] = { + 1u, 8u, 15u, 24u, 32u, 40u, 48u, 58u, 67u, 80u, 87u, 93u, 100u, 103u, 104u, 104u, + 104u, 104u, 105u, 106u, 106u, 107u, 107u, 107u, 107u, 107u, 109u, 109u, 109u, 110u, 110u, 111u, + 111u, 111u, 112u, 112u, 112u, 112u, 113u, 113u, 113u, 113u, 114u, 115u, 117u, 120u, 120u, 122u, + 122u, 122u, 124u, 124u, 124u, 124u, 124u, 126u, }; void recomp_unit_0226_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -135,13 +44,25 @@ void recomp_unit_0226_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B8C000u; - entry_id = (entry_delta < 14328u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0226[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 14328u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0226[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0226[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B8C000; @@ -277,3032 +198,232 @@ LOCAL_DISPATCH: } } L_08B8C000: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C01C; L_08B8C01C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C044; L_08B8C044: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C06C; L_08B8C06C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C094; L_08B8C094: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C0BC; L_08B8C0BC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C0E4; L_08B8C0E4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C10C; L_08B8C10C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C134; L_08B8C134: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C15C; L_08B8C15C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C184; L_08B8C184: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C1AC; L_08B8C1AC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C1D4; L_08B8C1D4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C1FC; L_08B8C1FC: - // nop - // nop - // nop goto L_08B8C208; L_08B8C208: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C224; L_08B8C224: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C24C; L_08B8C24C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C274; L_08B8C274: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C29C; L_08B8C29C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C2C4; L_08B8C2C4: - // nop - // nop - // nop - // nop - // nop goto L_08B8C2D8; L_08B8C2D8: - // nop - // nop - // nop - // nop - // nop goto L_08B8C2EC; L_08B8C2EC: - // nop - // nop goto L_08B8C2F4; L_08B8C2F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C310; L_08B8C310: - // nop goto L_08B8C314; L_08B8C314: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C32C; L_08B8C32C: - // nop - // nop - // nop - // nop goto L_08B8C33C; L_08B8C33C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C364; L_08B8C364: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C38C; L_08B8C38C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C3B4; L_08B8C3B4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C3DC; L_08B8C3DC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C404; L_08B8C404: - // nop - // nop - // nop goto L_08B8C410; L_08B8C410: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C42C; L_08B8C42C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C454; L_08B8C454: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C47C; L_08B8C47C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C4A4; L_08B8C4A4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C4CC; L_08B8C4CC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C4F4; L_08B8C4F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C51C; L_08B8C51C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C544; L_08B8C544: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C56C; L_08B8C56C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C590; L_08B8C590: - // nop goto L_08B8C594; L_08B8C594: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C5BC; L_08B8C5BC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C5E4; L_08B8C5E4: - // nop goto L_08B8C5E8; L_08B8C5E8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C60C; L_08B8C60C: - // nop - // nop goto L_08B8C614; L_08B8C614: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C634; L_08B8C634: - // nop - // nop - // nop goto L_08B8C640; L_08B8C640: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C65C; L_08B8C65C: - // nop - // nop - // nop goto L_08B8C668; L_08B8C668: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C684; L_08B8C684: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C6AC; L_08B8C6AC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C6D4; L_08B8C6D4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C6FC; L_08B8C6FC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C724; L_08B8C724: - // nop - // nop - // nop - // nop goto L_08B8C734; L_08B8C734: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C74C; L_08B8C74C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C774; L_08B8C774: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C79C; L_08B8C79C: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C7B4; L_08B8C7B4: - // nop - // nop - // nop - // nop goto L_08B8C7C4; L_08B8C7C4: - // nop - // nop - // nop - // nop - // nop goto L_08B8C7D8; L_08B8C7D8: - // nop - // nop - // nop - // nop - // nop goto L_08B8C7EC; L_08B8C7EC: - // nop - // nop - // nop - // nop - // nop goto L_08B8C800; L_08B8C800: - // nop - // nop goto L_08B8C808; L_08B8C808: - // nop - // nop goto L_08B8C810; L_08B8C810: - // nop goto L_08B8C814; L_08B8C814: - // nop - // nop - // nop goto L_08B8C820; L_08B8C820: - // nop - // nop - // nop - // nop goto L_08B8C830; L_08B8C830: - // nop - // nop - // nop goto L_08B8C83C; L_08B8C83C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C864; L_08B8C864: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C888; L_08B8C888: - // nop goto L_08B8C88C; L_08B8C88C: - // nop - // nop goto L_08B8C894; L_08B8C894: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C8B4; L_08B8C8B4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C8DC; L_08B8C8DC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C904; L_08B8C904: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C92C; L_08B8C92C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C954; L_08B8C954: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C97C; L_08B8C97C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C9A4; L_08B8C9A4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C9CC; L_08B8C9CC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8C9F4; L_08B8C9F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CA1C; L_08B8CA1C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CA44; L_08B8CA44: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CA6C; L_08B8CA6C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CA94; L_08B8CA94: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CABC; L_08B8CABC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CAE4; L_08B8CAE4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CB0C; L_08B8CB0C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CB34; L_08B8CB34: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CB5C; L_08B8CB5C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CB84; L_08B8CB84: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CBAC; L_08B8CBAC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CBD4; L_08B8CBD4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CBFC; L_08B8CBFC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CC24; L_08B8CC24: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CC4C; L_08B8CC4C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CC74; L_08B8CC74: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8CD08; L_08B8CD08: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8D180; L_08B8D180: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8D2C0; L_08B8D2C0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8D4D0; L_08B8D4D0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8D968; L_08B8D968: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8D99C; L_08B8D99C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8DCB8; L_08B8DCB8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8DE08; L_08B8DE08: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8E1E0; L_08B8E1E0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8E5EC; L_08B8E5EC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8E930; L_08B8E930: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8EA70; L_08B8EA70: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8EBC0; L_08B8EBC0: (void)(ctx.gpr[1] << 0u); @@ -3370,1140 +491,16 @@ L_08B8EE30: rt.unsupported(0x08B8EE34u, 0x00000005u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; ctx.pc = 0x02EB0FE0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08B8EE70: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8F1C0; L_08B8F1C0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8F1F4; L_08B8F1F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8F65C; L_08B8F65C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8F6F8; L_08B8F6F8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B8F7F4; L_08B8F7F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop ctx.pc = 0x08B90000u; AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0227.cpp b/profiles/vcs/generated/generated_unit_0227.cpp index eb384bb..50b31e4 100644 --- a/profiles/vcs/generated/generated_unit_0227.cpp +++ b/profiles/vcs/generated/generated_unit_0227.cpp @@ -6,145 +6,53 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0227[4044] = { - 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, - 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 73, 0, 74, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 76, 0, 0, - 0, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0227[64] = { + 0x0000000000000021ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000100000ull, 0x0000080000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000441ull, 0x0000400000000000ull, + 0x0000000000000000ull, 0x0000040000000000ull, 0x0000000000000400ull, 0x0000000000000000ull, + 0x0000000000001000ull, 0x0000000000020000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000801000800ull, + 0x0401004010040000ull, 0x0040100401004010ull, 0x1004010040100401ull, 0x0000000000010040ull, + 0x0000000100401004ull, 0x0000010004002040ull, 0x0040100000000000ull, 0x0000000000004401ull, + 0x4000000000000000ull, 0x4010040100400000ull, 0x0000000000040100ull, 0x0000000000000000ull, + 0x0020100000800000ull, 0x0802008020080000ull, 0x0080200400801022ull, 0x2042820000000000ull, + 0x0402010080400910ull, 0x0800000000000000ull, 0x0000000000000000ull, 0x0000800000000000ull, + 0x0002000000000000ull, 0x0000000020108001ull, 0x0000000000000000ull, 0x0000000000000001ull, + 0x0004000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000008004ull, 0x0000000000000001ull, 0x0000000000002000ull, 0x0000000000000000ull, + 0x0010000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000002000000ull, 0x0000000000000840ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0227[64] = { + 1u, 3u, 3u, 3u, 3u, 4u, 5u, 5u, 5u, 5u, 5u, 8u, 9u, 9u, 10u, 11u, + 11u, 12u, 13u, 13u, 13u, 13u, 13u, 13u, 16u, 21u, 27u, 34u, 36u, 40u, 44u, 46u, + 49u, 50u, 55u, 57u, 57u, 60u, 65u, 72u, 77u, 85u, 86u, 86u, 87u, 88u, 92u, 92u, + 93u, 94u, 94u, 94u, 94u, 96u, 97u, 98u, 98u, 99u, 99u, 99u, 99u, 99u, 99u, 100u, }; void recomp_unit_0227_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B90000u; - entry_id = (entry_delta < 16176u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0227[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16176u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0227[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0227[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B90000; @@ -255,4302 +163,206 @@ LOCAL_DISPATCH: } } L_08B90000: - // nop - // nop - // nop - // nop - // nop goto L_08B90014; L_08B90014: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B90450; L_08B90450: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B905AC; L_08B905AC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B90A00; L_08B90A00: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B90A18; L_08B90A18: - // nop - // nop - // nop - // nop goto L_08B90A28; L_08B90A28: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B90BB8; L_08B90BB8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B90DA8; L_08B90DA8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B90E28; L_08B90E28: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91030; L_08B91030: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91144; L_08B91144: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9172C; L_08B9172C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91760; L_08B91760: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9178C; L_08B9178C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91848; L_08B91848: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91870; L_08B91870: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91898; L_08B91898: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B918C0; L_08B918C0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B918E8; L_08B918E8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91910; L_08B91910: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91938; L_08B91938: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91960; L_08B91960: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91988; L_08B91988: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B919B0; L_08B919B0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B919D8; L_08B919D8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91A00; L_08B91A00: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91A28; L_08B91A28: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91A50; L_08B91A50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91A78; L_08B91A78: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91AA0; L_08B91AA0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91AC8; L_08B91AC8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91AF0; L_08B91AF0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91B18; L_08B91B18: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91B40; L_08B91B40: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91C08; L_08B91C08: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91C30; L_08B91C30: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91C58; L_08B91C58: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91C80; L_08B91C80: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91D18; L_08B91D18: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91D34; L_08B91D34: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91D68; L_08B91D68: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91DA0; L_08B91DA0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91EB0; L_08B91EB0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91ED8; L_08B91ED8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91F00; L_08B91F00: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B91F28; L_08B91F28: - // nop - // nop - // nop - // nop goto L_08B91F38; L_08B91F38: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B920F8; L_08B920F8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92158; L_08B92158: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92180; L_08B92180: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B921A8; L_08B921A8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B921D0; L_08B921D0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B921F8; L_08B921F8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92220; L_08B92220: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92248; L_08B92248: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9245C; L_08B9245C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B924B0; L_08B924B0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B924D4; L_08B924D4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9254C; L_08B9254C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92574; L_08B92574: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9259C; L_08B9259C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B925C4; L_08B925C4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B925EC; L_08B925EC: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92604; L_08B92604: - // nop - // nop - // nop - // nop goto L_08B92614; L_08B92614: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92630; L_08B92630: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9265C; L_08B9265C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92688; L_08B92688: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B926B4; L_08B926B4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B926DC; L_08B926DC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B927A4; L_08B927A4: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B927BC; L_08B927BC: - // nop - // nop goto L_08B927C4; L_08B927C4: - // nop - // nop - // nop - // nop - // nop goto L_08B927D8; L_08B927D8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B927F4; L_08B927F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92810; L_08B92810: - // nop - // nop - // nop - // nop goto L_08B92820; L_08B92820: - // nop - // nop - // nop goto L_08B9282C; L_08B9282C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92858; L_08B92858: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9287C; L_08B9287C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B928A0; L_08B928A0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B928C4; L_08B928C4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B928E8; L_08B928E8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B929EC; L_08B929EC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92BBC; L_08B92BBC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92CC4; L_08B92CC4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92D00; L_08B92D00: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92D3C; L_08B92D3C: - // nop - // nop - // nop - // nop - // nop goto L_08B92D50; L_08B92D50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92D74; L_08B92D74: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B92F00; L_08B92F00: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B930C8; L_08B930C8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B93408; L_08B93408: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9343C; L_08B9343C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B93500; L_08B93500: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B93634; L_08B93634: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B938D0; L_08B938D0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B93E64; L_08B93E64: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B93F18; L_08B93F18: - // nop - // nop - // nop - // nop - // nop goto L_08B93F2C; L_08B93F2C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop ctx.pc = 0x08B94000u; return; } diff --git a/profiles/vcs/generated/generated_unit_0228.cpp b/profiles/vcs/generated/generated_unit_0228.cpp index 92152d2..eacc0c2 100644 --- a/profiles/vcs/generated/generated_unit_0228.cpp +++ b/profiles/vcs/generated/generated_unit_0228.cpp @@ -6,146 +6,53 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0228[4073] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 20, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 40, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 43, 44, 0, 0, - 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 0, 0, 0, 47, 48, 0, 0, 0, 0, 0, 49, 0, 50, 0, 0, 51, 0, 0, 0, 0, 0, 52, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, - 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, - 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0228[64] = { + 0x0000402010080401ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0010000000000001ull, 0x1000000000000000ull, + 0x0040000000000000ull, 0x0000000000000002ull, 0x0000000000000000ull, 0x0000000080000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x4000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000080000000ull, 0x0000000000000000ull, + 0x1000000000000000ull, 0x0000000000004082ull, 0x2000000000000000ull, 0x0000000000000104ull, + 0x0000000000000000ull, 0x0000000000004000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000801008000ull, 0x0000000000000000ull, 0x0000000080000000ull, + 0x0000000000000000ull, 0x0000000000080000ull, 0x0000000000000008ull, 0x8040201000000000ull, + 0x310A0C0402010180ull, 0x0203010082506030ull, 0x0000402010180804ull, 0x0000000000000000ull, + 0x1080000200000000ull, 0x0000800000000000ull, 0x0000000000000000ull, 0x0008000000040000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0088000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000001000800ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0020000008000200ull, + 0x0000008002000000ull, 0x0000200008080000ull, 0x0000001080000400ull, 0x0000000000000000ull, + 0x4002000204010200ull, 0x0000000000000000ull, 0x0000002000000000ull, 0x0000010000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0228[64] = { + 1u, 7u, 7u, 7u, 7u, 7u, 7u, 9u, 10u, 11u, 12u, 12u, 13u, 13u, 13u, 13u, + 14u, 14u, 14u, 15u, 15u, 16u, 19u, 20u, 22u, 22u, 23u, 23u, 23u, 23u, 26u, 26u, + 27u, 27u, 28u, 29u, 33u, 45u, 57u, 64u, 64u, 67u, 68u, 68u, 70u, 70u, 70u, 70u, + 70u, 72u, 72u, 72u, 74u, 74u, 74u, 74u, 77u, 79u, 82u, 85u, 85u, 91u, 91u, 92u, }; void recomp_unit_0228_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B94000u; - entry_id = (entry_delta < 16292u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0228[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16292u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0228[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0228[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B94000; @@ -247,4284 +154,188 @@ LOCAL_DISPATCH: } } L_08B94000: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94028; L_08B94028: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9404C; L_08B9404C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94070; L_08B94070: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94094; L_08B94094: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B940B8; L_08B940B8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94600; L_08B94600: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B946D0; L_08B946D0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B947F0; L_08B947F0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B948D8; L_08B948D8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94904; L_08B94904: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94B7C; L_08B94B7C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B94FF8; L_08B94FF8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9527C; L_08B9527C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B954F0; L_08B954F0: - // nop - // nop - // nop - // nop - // nop goto L_08B95504; L_08B95504: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9551C; L_08B9551C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95538; L_08B95538: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B956F4; L_08B956F4: - // nop - // nop - // nop - // nop - // nop goto L_08B95708; L_08B95708: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95720; L_08B95720: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95938; L_08B95938: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95D3C; L_08B95D3C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95D60; L_08B95D60: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95D8C; L_08B95D8C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B95F7C; L_08B95F7C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9614C; L_08B9614C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9620C; L_08B9620C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96390; L_08B96390: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B963B4; L_08B963B4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B963D8; L_08B963D8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B963FC; L_08B963FC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9641C; L_08B9641C: - // nop goto L_08B96420; L_08B96420: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96440; L_08B96440: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96464; L_08B96464: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96488; L_08B96488: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B964A8; L_08B964A8: - // nop goto L_08B964AC; L_08B964AC: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B964C4; L_08B964C4: - // nop - // nop goto L_08B964CC; L_08B964CC: - // nop - // nop - // nop - // nop - // nop goto L_08B964E0; L_08B964E0: - // nop - // nop - // nop - // nop goto L_08B964F0; L_08B964F0: - // nop goto L_08B964F4; L_08B964F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96510; L_08B96510: - // nop goto L_08B96514; L_08B96514: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96534; L_08B96534: - // nop goto L_08B96538; L_08B96538: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96550; L_08B96550: - // nop - // nop goto L_08B96558; L_08B96558: - // nop - // nop - // nop goto L_08B96564; L_08B96564: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9657C; L_08B9657C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B965A0; L_08B965A0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B965C0; L_08B965C0: - // nop goto L_08B965C4; L_08B965C4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B965E4; L_08B965E4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96608; L_08B96608: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9662C; L_08B9662C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9664C; L_08B9664C: - // nop goto L_08B96650; L_08B96650: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96670; L_08B96670: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96694; L_08B96694: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B966B8; L_08B966B8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96884; L_08B96884: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B968DC; L_08B968DC: - // nop - // nop - // nop - // nop - // nop goto L_08B968F0; L_08B968F0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B969BC; L_08B969BC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96B48; L_08B96B48: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B96BCC; L_08B96BCC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B970CC; L_08B970CC: - // nop - // nop - // nop - // nop goto L_08B970DC; L_08B970DC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9732C; L_08B9732C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97360; L_08B97360: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97724; L_08B97724: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9776C; L_08B9776C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B977D4; L_08B977D4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97864; L_08B97864: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9789C; L_08B9789C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9794C; L_08B9794C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9796C; L_08B9796C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B979B4; L_08B979B4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97A28; L_08B97A28: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97A7C; L_08B97A7C: - // nop - // nop - // nop - // nop - // nop goto L_08B97A90; L_08B97A90: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97C24; L_08B97C24: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97C40; L_08B97C40: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97C68; L_08B97C68: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97C84; L_08B97C84: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97CC4; L_08B97CC4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97CF8; L_08B97CF8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97E94; L_08B97E94: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B97FA0; L_08B97FA0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop ctx.pc = 0x08B98000u; return; } diff --git a/profiles/vcs/generated/generated_unit_0229.cpp b/profiles/vcs/generated/generated_unit_0229.cpp index 1fe2389..13b7ec1 100644 --- a/profiles/vcs/generated/generated_unit_0229.cpp +++ b/profiles/vcs/generated/generated_unit_0229.cpp @@ -6,139 +6,53 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0229[3863] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 17, 0, 0, 0, 0, - 0, 18, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 22, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, - 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, - 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 69, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 78, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0229[61] = { + 0x0000000002040001ull, 0x0000000000010000ull, 0x0408109000000000ull, 0x0001000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x8000000000000000ull, 0x5002000A09410820ull, + 0x0000002010000100ull, 0x0010000000000001ull, 0x0408108000200020ull, 0x0000000004004000ull, + 0x0000800000000800ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000084000000000ull, + 0x0000000400000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0040000002000000ull, 0x0000000000000000ull, 0x0020841000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000008210ull, 0x0000000000110000ull, 0x0000000100400000ull, + 0x0000000000000000ull, 0x0000000000100000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000008000000ull, + 0x0010000400020000ull, 0x0000000000000000ull, 0x0002000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x8000000000000000ull, 0x0000000000000000ull, 0x4000000000000000ull, + 0x4021000080000010ull, 0x0000010200002080ull, 0x0000000000001000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0400200000000080ull, 0x0000000000100080ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x00008000C0000000ull, 0x0000000000000000ull, + 0x0000000000020000ull, 0x0000000200020000ull, 0x0000000000000000ull, 0x0000000000000020ull, + 0x0000000000400000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0229[61] = { + 1u, 4u, 5u, 10u, 11u, 11u, 11u, 12u, 23u, 26u, 28u, 34u, 36u, 38u, 38u, 38u, + 40u, 41u, 41u, 41u, 41u, 43u, 43u, 47u, 47u, 47u, 50u, 52u, 54u, 54u, 55u, 55u, + 55u, 55u, 55u, 55u, 56u, 59u, 59u, 60u, 60u, 60u, 61u, 61u, 62u, 67u, 71u, 72u, + 72u, 72u, 75u, 77u, 77u, 77u, 77u, 80u, 80u, 81u, 83u, 83u, 84u, }; void recomp_unit_0229_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B98000u; - entry_id = (entry_delta < 15452u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0229[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 15452u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0229[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0229[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B98000; @@ -232,4268 +146,172 @@ LOCAL_DISPATCH: } } L_08B98000: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98048; L_08B98048: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98064; L_08B98064: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98140; L_08B98140: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98290; L_08B98290: - // nop - // nop - // nop goto L_08B9829C; L_08B9829C: - // nop - // nop - // nop - // nop - // nop goto L_08B982B0; L_08B982B0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B982CC; L_08B982CC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B982E8; L_08B982E8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B983C0; L_08B983C0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B986FC; L_08B986FC: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98714; L_08B98714: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9872C; L_08B9872C: - // nop - // nop - // nop - // nop - // nop goto L_08B98740; L_08B98740: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98758; L_08B98758: - // nop - // nop goto L_08B98760; L_08B98760: - // nop - // nop - // nop goto L_08B9876C; L_08B9876C: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98784; L_08B98784: - // nop - // nop goto L_08B9878C; L_08B9878C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B987C4; L_08B987C4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B987F0; L_08B987F0: - // nop - // nop goto L_08B987F8; L_08B987F8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98820; L_08B98820: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98870; L_08B98870: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98894; L_08B98894: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98900; L_08B98900: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B989D0; L_08B989D0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98A14; L_08B98A14: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98A54; L_08B98A54: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98A9C; L_08B98A9C: - // nop - // nop - // nop - // nop - // nop goto L_08B98AB0; L_08B98AB0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98ACC; L_08B98ACC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98AE8; L_08B98AE8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98B38; L_08B98B38: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98B68; L_08B98B68: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98C2C; L_08B98C2C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98CBC; L_08B98CBC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B98F98; L_08B98F98: - // nop - // nop - // nop - // nop - // nop goto L_08B98FAC; L_08B98FAC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99088; L_08B99088: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99464; L_08B99464: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B994D8; L_08B994D8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99690; L_08B99690: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B996A8; L_08B996A8: - // nop - // nop - // nop - // nop - // nop goto L_08B996BC; L_08B996BC: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B996D4; L_08B996D4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99910; L_08B99910: - // nop - // nop - // nop - // nop - // nop goto L_08B99924; L_08B99924: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9993C; L_08B9993C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99A40; L_08B99A40: - // nop - // nop - // nop - // nop goto L_08B99A50; L_08B99A50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99B58; L_08B99B58: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99B80; L_08B99B80: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B99D50; L_08B99D50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9A36C; L_08B9A36C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9A444; L_08B9A444: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9A488; L_08B9A488: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9A4D0; L_08B9A4D0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9A6C4; L_08B9A6C4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9A9FC; L_08B9A9FC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9ABF8; L_08B9ABF8: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9AC10; L_08B9AC10: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9AC7C; L_08B9AC7C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9ACC0; L_08B9ACC0: - // nop - // nop - // nop - // nop - // nop goto L_08B9ACD4; L_08B9ACD4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9ACF8; L_08B9ACF8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9AD1C; L_08B9AD1C: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9AD34; L_08B9AD34: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9AD84; L_08B9AD84: - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9ADA0; L_08B9ADA0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9AE30; L_08B9AE30: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B11C; L_08B9B11C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B1B4; L_08B9B1B4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B1E8; L_08B9B1E8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B21C; L_08B9B21C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B250; L_08B9B250: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B678; L_08B9B678: - // nop goto L_08B9B67C; L_08B9B67C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B6BC; L_08B9B6BC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B844; L_08B9B844: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B944; L_08B9B944: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9B984; L_08B9B984: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9BB14; L_08B9BB14: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9BC58; L_08B9BC58: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop ctx.pc = 0x08B9C000u; return; } diff --git a/profiles/vcs/generated/generated_unit_0230.cpp b/profiles/vcs/generated/generated_unit_0230.cpp index 263c4a2..551b4ed 100644 --- a/profiles/vcs/generated/generated_unit_0230.cpp +++ b/profiles/vcs/generated/generated_unit_0230.cpp @@ -6,129 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0230[3898] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0230[61] = { + 0x0002000000000001ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0400000000020000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000400000000001ull, 0x0000000000000000ull, + 0x0000000010000400ull, 0x0000000080000000ull, 0x0001000000000000ull, 0x0000800000000000ull, + 0x0000000400400080ull, 0x0000000000000000ull, 0x0000000000100000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000800000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000800000ull, 0x0000000000000000ull, + 0x0010000000000200ull, 0x0000008000000000ull, 0x0200000000000000ull, 0x0040100000000080ull, + 0x1000000010140480ull, 0x0000001000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000020000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000040000ull, 0x0000000000000000ull, 0x0000000000100010ull, + 0x0000100000000000ull, 0x2000000200000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000001000000ull, + 0x0200000000000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0230[61] = { + 1u, 3u, 3u, 3u, 5u, 5u, 5u, 7u, 7u, 9u, 10u, 11u, 12u, 15u, 15u, 16u, + 16u, 16u, 16u, 16u, 17u, 17u, 17u, 18u, 18u, 20u, 21u, 22u, 25u, 31u, 32u, 32u, + 32u, 32u, 32u, 32u, 32u, 33u, 33u, 33u, 33u, 33u, 33u, 33u, 33u, 33u, 34u, 34u, + 36u, 37u, 39u, 39u, 39u, 39u, 39u, 39u, 39u, 39u, 39u, 39u, 40u, }; void recomp_unit_0230_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -142,13 +43,25 @@ void recomp_unit_0230_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08B9C000u; - entry_id = (entry_delta < 15592u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0230[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 15592u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0230[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0230[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08B9C000; @@ -198,1628 +111,40 @@ LOCAL_DISPATCH: } } L_08B9C000: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C0C4; L_08B9C0C4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C344; L_08B9C344: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C3E8; L_08B9C3E8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C600; L_08B9C600: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C6B8; L_08B9C6B8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C828; L_08B9C828: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C870; L_08B9C870: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9C97C; L_08B9C97C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9CAC0; L_08B9CAC0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9CBBC; L_08B9CBBC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9CC1C; L_08B9CC1C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9CC58; L_08B9CC58: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9CC88; L_08B9CC88: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9CE50; L_08B9CE50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9D3BC; L_08B9D3BC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9D65C; L_08B9D65C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9D824; L_08B9D824: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9D8D0; L_08B9D8D0: AOT_REGCACHE_SYNC_OUT(); @@ -1828,28 +153,20 @@ L_08B9D99C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B9D99Cu, 0x00003630u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B9DAE4: - // nop (void)(0u >> 0u); (void)(0u >> (0u & 31u)); - // nop aot_gpr_12 = (52429u << 16u); aot_gpr_25 = (39322u << 16u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B9DB00u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B9DB1C: - // nop - // nop // PSP CACHE is a no-op in coherent host memory. (void)(0u << 16u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B9DB30u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B9DBB0: - // nop aot_gpr_25 = (39322u << 16u); aot_gpr_25 = (39322u << 16u); - // nop if (0u == 0u) (void)(0u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B9DBC4u, 0x00000005u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1862,15 +179,11 @@ L_08B9DBD8: L_08B9DC1C: if (0u != 0u) (void)(0u); (void)(static_cast(0u) < static_cast(0u) ? 0u : 0u); - // nop goto L_08B9DC28; L_08B9DC28: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B9DC30u, 0x08BAD118u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08B9DC48: - // nop - // nop goto L_08B9DC50; L_08B9DC50: AOT_REGCACHE_SYNC_OUT(); @@ -1880,2270 +193,26 @@ L_08B9DC70: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08B9DC74u, 0x00020001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08B9DCF0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9DD90; L_08B9DD90: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9E444; L_08B9E444: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9ED48; L_08B9ED48: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9EF10; L_08B9EF10: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9EF50; L_08B9EF50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9F0B0; L_08B9F0B0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9F184; L_08B9F184: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9F1F4; L_08B9F1F4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9FB60; L_08B9FB60: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08B9FCE4; L_08B9FCE4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop ctx.pc = 0x08BA0000u; AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0231.cpp b/profiles/vcs/generated/generated_unit_0231.cpp index bbbb16a..27886d5 100644 --- a/profiles/vcs/generated/generated_unit_0231.cpp +++ b/profiles/vcs/generated/generated_unit_0231.cpp @@ -6,133 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0231[4003] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 29, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, - 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, - 0, 73, 0, 74, 0, 0, 75, 76, 77, 0, 0, 0, 78, 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 86, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 98, 0, 0, 99, - 0, 0, 100, 0, 0, 101, 0, 0, 102, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, - 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 136, 0, - 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 142, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 153, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0231[63] = { + 0x0000001041000001ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000800000000ull, 0x0000410020180001ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x1000100000000000ull, 0x0000101010000100ull, 0x000000000000000Dull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0020010010000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0008040000000000ull, 0x0800000090820008ull, 0x0000000842000000ull, 0x0002101004000000ull, + 0x0408000041000020ull, 0x0000000100000000ull, 0x0000000000000000ull, 0x8000004101010000ull, + 0x0000100040000080ull, 0x0000210000000000ull, 0x1000000000000800ull, 0x0004000000000100ull, + 0x1000104104104100ull, 0x0400800100110001ull, 0x120001040100F1CAull, 0x0000000040100000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000100000ull, + 0x0400000000000002ull, 0x0000000000000000ull, 0x0000000020000000ull, 0x0000010000010002ull, + 0x0000000000008000ull, 0x9400000000000000ull, 0x0000000080000924ull, 0x0000040000000000ull, + 0x0000000100000000ull, 0x0000800002000020ull, 0x0001000800000000ull, 0x0000000000000000ull, + 0x0040080000000000ull, 0x0000000800000000ull, 0x1001000000050000ull, 0x0400020001001000ull, + 0x0000000101000010ull, 0x0000041010000100ull, 0x0000001000000000ull, 0x0000000000000000ull, + 0x4500400020400000ull, 0x0001000000008080ull, 0x0010000021040000ull, 0x8000020000104104ull, + 0x0040100000200000ull, 0x0000000000000000ull, 0x0000000400000000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0231[63] = { + 1u, 5u, 5u, 5u, 5u, 6u, 12u, 12u, 12u, 14u, 18u, 21u, 21u, 21u, 24u, 24u, + 24u, 26u, 32u, 35u, 39u, 44u, 45u, 45u, 50u, 53u, 55u, 57u, 59u, 67u, 73u, 87u, + 89u, 89u, 89u, 89u, 90u, 92u, 92u, 93u, 96u, 97u, 100u, 105u, 106u, 107u, 110u, 112u, + 112u, 114u, 115u, 119u, 123u, 126u, 130u, 131u, 131u, 137u, 140u, 144u, 150u, 153u, 153u, }; void recomp_unit_0231_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -149,13 +46,25 @@ void recomp_unit_0231_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08BA0000u; - entry_id = (entry_delta < 16012u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0231[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16012u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0231[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0231[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08BA0000; @@ -318,600 +227,28 @@ LOCAL_DISPATCH: } } L_08BA0000: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0060; L_08BA0060: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0078; L_08BA0078: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0090; L_08BA0090: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA048C; L_08BA048C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0500; L_08BA0500: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA054C; L_08BA054C: - // nop goto L_08BA0550; L_08BA0550: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0574; L_08BA0574: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA05A0; L_08BA05A0: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA05B8; L_08BA05B8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA08B0; L_08BA08B0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA08F0; L_08BA08F0: AOT_REGCACHE_SYNC_OUT(); @@ -923,274 +260,29 @@ L_08BA0970: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA0970u, 0x42C80000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA0990: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA09B0; L_08BA09B0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0A00; L_08BA0A00: - // nop { const bool branch_taken = static_cast(ctx.gpr[8]) > 0; - // nop if (branch_taken) { goto L_08BA0A08; } goto L_08BA0A0C; } L_08BA0A08: - // nop goto L_08BA0A0C; L_08BA0A0C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA0A10u, 0x0A1F0A1Fu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA0D70: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0DA0; L_08BA0DA0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA0DD4; L_08BA0DD4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop if (!([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_ok_ = ctx.execute_signed_add(4u, 0u, 0u); AOT_REGCACHE_SYNC_IN(); return aot_regcache_ok_; }())) { rt.arithmetic_overflow(0x08BA10A0u, 0x00002020u); AOT_REGCACHE_SYNC_OUT(); return; } - // nop goto L_08BA10A8; L_08BA10A8: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA10CC; L_08BA10CC: ctx.execute_vfpu_compare3_ct<99u, 111u, 114u, 1u, 6u>(); @@ -1202,8 +294,6 @@ L_08BA110C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1114u, 0x00006E6Fu, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1144: - // nop - // nop ctx.execute_vfpu_compare3_ct<99u, 111u, 114u, 1u, 6u>(); ctx.execute_vfpu_vscl_ct<110u, 97u, 104u, 1u>(); AOT_REGCACHE_SYNC_OUT(); @@ -1216,10 +306,6 @@ L_08BA1170: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1174u, 0x00000078u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA117C: - // nop - // nop - // nop - // nop ctx.execute_vfpu_compare3_ct<99u, 111u, 114u, 1u, 6u>(); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1190u, 0x6963616Eu, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1232,8 +318,6 @@ L_08BA1264: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1268u, 0x40F00000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1278: - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1280u, 0x00FF00FFu, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA128C: @@ -1253,24 +337,6 @@ L_08BA13C4: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA13C8u, 0x08C46D40u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1414: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1460u, 0x08CABC00u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1460: @@ -1281,7 +347,6 @@ L_08BA1478: aot_gpr_12 = (52429u << 16u); (void)(0u << 16u); ctx.gpr[21] = (49807u << 16u); - // nop aot_gpr_9 = (4059u << 16u); ctx.gpr[18] = (47299u << 16u); AOT_REGCACHE_SYNC_OUT(); @@ -1342,12 +407,7 @@ L_08BA17FC: rt.unsupported(0x08BA17FCu, 0x01020201u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA181C: (void)(0u >> (0u & 31u)); - // nop (void)(aot_gpr_3 << 0u); - // nop - // nop - // nop - // nop (void)(ctx.gpr[1] << 4u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA183Cu, 0x01030101u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1407,7 +467,6 @@ L_08BA1C68: rt.unsupported(0x08BA1C6Cu, 0xC0060A92u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1C80: aot_gpr_6 = (2706u << 16u); - // nop aot_gpr_6 = (2706u << 16u); aot_gpr_9 = (4059u << 16u); // PSP CACHE is a no-op in coherent host memory. @@ -1425,51 +484,14 @@ L_08BA1CB0: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1CB4u, 0x08BAFA9Cu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1CF0: - // nop - // nop - // nop - // nop goto L_08BA1D00; L_08BA1D00: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA1D40; L_08BA1D40: - // nop - // nop - // nop - // nop goto L_08BA1D50; L_08BA1D50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA1D80; L_08BA1D80: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1D84u, 0x00000015u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1DBC: @@ -1504,7 +526,17 @@ L_08BA1E20: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08BA1E30: if (!([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_ok_ = ctx.execute_signed_add(5u, 0u, 0u); AOT_REGCACHE_SYNC_IN(); return aot_regcache_ok_; }())) { rt.arithmetic_overflow(0x08BA1E30u, 0x00002EE0u); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08BA1E34; @@ -1518,7 +550,17 @@ L_08BA1E38: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08BA1E3C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1E3Cu, 0x40400000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1531,101 +573,20 @@ L_08BA1E88: (void)(0u << 16u); (void)(0u << 16u); aot_gpr_19 = (13107u << 16u); - // nop goto L_08BA1EA0; L_08BA1EA0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA1EE4; L_08BA1EE4: - // nop - // nop - // nop goto L_08BA1EF0; L_08BA1EF0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA1F50; L_08BA1F50: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1F54u, 0x77073096u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA1F78: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA1F78u, 0xE0D5E91Eu, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA2350: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop aot_gpr_12 = (52429u << 16u); ctx.gpr[21] = (49807u << 16u); (void)(0u << 16u); @@ -1660,8 +621,6 @@ L_08BA2404: aot_gpr_25 = (39322u << 16u); aot_gpr_12 = (52429u << 16u); aot_gpr_12 = (52429u << 16u); - // nop - // nop aot_gpr_12 = (52429u << 16u); ctx.gpr[21] = (49807u << 16u); (void)(0u << 16u); @@ -1694,7 +653,6 @@ L_08BA2404: aot_gpr_25 = (39322u << 16u); aot_gpr_12 = (52429u << 16u); aot_gpr_12 = (52429u << 16u); - // nop goto L_08BA24E8; L_08BA24E8: AOT_REGCACHE_SYNC_OUT(); @@ -1741,7 +699,6 @@ L_08BA2A20: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA2A20u, 0x0000000Eu, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA2A2C: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA2A30u, 0x00000601u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA2A7C: @@ -1756,7 +713,6 @@ L_08BA2C80: rt.unsupported(0x08BA2C84u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; ctx.pc = 0x02EC3570u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA2D14: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA2D18u, 0x00000601u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA2D64: @@ -1765,11 +721,20 @@ L_08BA2D64: ctx.pc = 0x02EC3570u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA2DBC: jump_target = 0u; - // nop local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08BA2E8C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA2E8Cu, 0x00000601u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1787,17 +752,10 @@ L_08BA318C: rt.unsupported(0x08BA318Cu, 0x0000304Du, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA3240: if (ctx.gpr[2] != ctx.gpr[15]) { - // nop ctx.pc = 0x08BB6390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } goto L_08BA3248; L_08BA3248: - // nop - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA3260u, 0x45464153u, "cop1? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA32C0: @@ -1822,18 +780,6 @@ L_08BA32F0: aot_gpr_12 = (52429u << 16u); goto L_08BA3330; L_08BA3330: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3360; L_08BA3360: AOT_REGCACHE_SYNC_OUT(); @@ -1845,31 +791,9 @@ L_08BA33E8: (void)(0u << 16u); aot_gpr_19 = (13107u << 16u); (void)(0u << 16u); - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA33FCu, 0x40000000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA3410: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3460; L_08BA3460: AOT_REGCACHE_SYNC_OUT(); @@ -1917,15 +841,6 @@ L_08BA3480: // vflush: architectural no-op that retains VFPU prefixes goto L_08BA3520; L_08BA3520: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop (void)(ctx.gpr[26] << 0u); AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA3548u, 0x009600FAu, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; @@ -1970,218 +885,31 @@ L_08BA391C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA391Cu, 0x42424242u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA393C: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA39C0; L_08BA39C0: - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA39C8u, 0x08BA3BFCu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA3A48: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3A60; L_08BA3A60: - // nop - // nop - // nop - // nop - // nop goto L_08BA3A74; L_08BA3A74: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3AD0; L_08BA3AD0: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3B08; L_08BA3B08: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3B20; L_08BA3B20: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3B38; L_08BA3B38: - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3B50; L_08BA3B50: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3BA4; L_08BA3BA4: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3BFC; L_08BA3BFC: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop goto L_08BA3C54; L_08BA3C54: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop if (ctx.gpr[1] == 0u) (void)(0u); ctx.pc = 0x02E8E700u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA3CB0: @@ -2194,7 +922,17 @@ L_08BA3CB0: local_pc = jump_target; if (++local_transfers < 256u) { entry_id = 0u; goto LOCAL_DISPATCH; } ctx.pc = jump_target; - AOT_REGCACHE_SYNC_OUT(); return; + AOT_REGCACHE_SYNC_OUT(); + // PSPRECOMP_V811_LOCAL_LINK: preserve the 256-transfer scheduler boundary, skip outer trampoline. + if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) { + ++local_redispatch_rounds; + AOT_REGCACHE_SYNC_IN(); + local_transfers = 0u; + local_pc = ctx.pc; + entry_id = 0u; + goto LOCAL_DISPATCH; + } + return; L_08BA3CD8: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA3CD8u, 0x00000001u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; diff --git a/profiles/vcs/generated/generated_unit_0232.cpp b/profiles/vcs/generated/generated_unit_0232.cpp index e0b4338..de86c0a 100644 --- a/profiles/vcs/generated/generated_unit_0232.cpp +++ b/profiles/vcs/generated/generated_unit_0232.cpp @@ -6,135 +6,30 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0232[4091] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, - 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, - 54, 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, - 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, - 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, - 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, - 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 129, 0, 130, 0, 131, 0, 132, 0, 133, 0, - 134, 0, 135, 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, 0, 146, 0, 147, 0, 148, 0, 149, 0, - 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, - 0, 154, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 167, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 170, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 176, 0, 177, 0, 0, 178, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 181, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, - 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, - 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 223, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 238, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, 0, 253, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0232[64] = { + 0x0150000040000001ull, 0x0400400020004400ull, 0x0060000001105401ull, 0x5555555440180400ull, + 0x5555555555555555ull, 0x5555555555555555ull, 0x5555555555555555ull, 0x0000000155555555ull, + 0x1000002210004020ull, 0x0004000000001002ull, 0x0010000400000000ull, 0x0000000040000000ull, + 0x0000000000100000ull, 0x0000000010004010ull, 0x0000000000000110ull, 0x0440000000000000ull, + 0x0001000001000000ull, 0x0000000100000000ull, 0x0000000000400000ull, 0x09000CA000004000ull, + 0x0004000000000040ull, 0x0000110000000000ull, 0x0000000000000004ull, 0x0010000000400000ull, + 0x0100000010000011ull, 0x0001000001001001ull, 0x0000000000004000ull, 0x0000000000010000ull, + 0x1000000000440000ull, 0x0000000000000004ull, 0x0010080000000000ull, 0x0000040000000001ull, + 0x0400004000000100ull, 0x0040040040040040ull, 0x0000000001100000ull, 0x4000000000004000ull, + 0x0000040000000000ull, 0x0000000100000000ull, 0x0000000000000000ull, 0x0000000000040000ull, + 0x0000000000100000ull, 0x0000000000000011ull, 0x0040000000000000ull, 0x0000100000000000ull, + 0x0010000010000000ull, 0x0000000000000000ull, 0x0010000440000000ull, 0x1000040001000040ull, + 0x0000000100004000ull, 0x0400000000000440ull, 0x0001000000000000ull, 0x0004000000000000ull, + 0x0010000000000010ull, 0x0000000440000000ull, 0x0000000000000000ull, 0x0000000000010000ull, + 0x0400000000000440ull, 0x0001000040400200ull, 0x0004000004000000ull, 0x0000010000000000ull, + 0x0000001001000000ull, 0x4000000000004000ull, 0x0010000000000000ull, 0x0400000000001000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0232[64] = { + 1u, 6u, 11u, 19u, 38u, 70u, 102u, 134u, 151u, 157u, 160u, 162u, 163u, 164u, 167u, 169u, + 171u, 173u, 174u, 175u, 182u, 184u, 186u, 187u, 189u, 193u, 197u, 198u, 199u, 202u, 203u, 205u, + 207u, 210u, 215u, 217u, 219u, 220u, 221u, 221u, 222u, 223u, 225u, 226u, 227u, 229u, 229u, 232u, + 236u, 238u, 241u, 242u, 243u, 245u, 247u, 247u, 248u, 251u, 255u, 257u, 258u, 260u, 262u, 263u, }; void recomp_unit_0232_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { // PSPRECOMP_AOT_REGCACHE_BEGIN @@ -151,13 +46,25 @@ void recomp_unit_0232_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t dir // PSPRECOMP_AOT_REGCACHE_END std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08BA4000u; - entry_id = (entry_delta < 16364u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0232[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 16364u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0232[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0232[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08BA4000; @@ -431,23 +338,6 @@ LOCAL_DISPATCH: } } L_08BA4000: - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA4044u, 0x40000000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4078: @@ -466,9 +356,6 @@ L_08BA40E0: aot_gpr_16 = (aot_gpr_1 & 12336u); aot_gpr_16 = (aot_gpr_1 & 12336u); aot_gpr_16 = (aot_gpr_1 & 12336u); - // nop - // nop - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA40FCu, 0xC0100000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4128: @@ -479,25 +366,18 @@ L_08BA4138: aot_gpr_16 = (aot_gpr_1 & 12336u); aot_gpr_16 = (aot_gpr_1 & 12336u); aot_gpr_16 = (aot_gpr_1 & 12336u); - // nop - // nop (void)(static_cast(static_cast(0u) >> (0u & 31u))); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA4158u, 0x00000030u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4174: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA4178u, 0x08B89C6Cu, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA41B8: - // nop - // nop - // nop (void)(static_cast(static_cast(static_cast(aot_mem.aot_direct_load8(0u + static_cast(0)))))); ctx.eat_vfpu_prefixes(); // VFPU sync/no-op consumes prefixes ctx.gpr[6] = (11842u << 16u); aot_gpr_25 = (ctx.gpr[11] | 15478u); ctx.gpr[10] = (14831u << 16u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA41DCu, 0x43500000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA41E8: @@ -522,8 +402,6 @@ L_08BA4200: { const float vfpu_value[1]{static_cast(21060)}; ctx.write_vfpu_vector_with_destination_prefix_ct<62u, 1u>(vfpu_value); } ctx.gpr[2] = (61714u << 16u); - // nop - // nop { const bool branch_taken = ctx.gpr[9] != ctx.gpr[6]; ctx.gpr[27] = (52091u << 16u); if (branch_taken) { @@ -546,21 +424,15 @@ L_08BA4230: goto L_08BA4238; } L_08BA4238: - // nop aot_gpr_16 = ((aot_gpr_31 >> 0u) & 0x00000001u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA4244u, 0xC3500000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4250: - // nop (void)(0u << 16u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA425Cu, 0x40000000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4260: - // nop aot_gpr_16 = (0u << 16u); - // nop AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA426Cu, 0x40240000u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA42D4: @@ -586,8 +458,6 @@ L_08BA4378: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA4378u, 0x00000005u, "special? not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4388: - // nop - // nop goto L_08BA4390; L_08BA4390: AOT_REGCACHE_SYNC_OUT(); @@ -971,9 +841,6 @@ L_08BA4780: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA4784u, 0x08BA4778u, "control flow in delay slot"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4814: - // nop - // nop - // nop (void)(0u << 1u); (void)(0u << 1u); (void)(0u << 1u); @@ -982,127 +849,50 @@ L_08BA4814: (void)(0u << 1u); goto L_08BA4838; L_08BA4838: - // nop - // nop - // nop - // nop ctx.pc = 0x02AC02D0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4870: - // nop - // nop ctx.pc = 0x02B3EE70u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4884: - // nop ctx.pc = 0x02B3FF40u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4894: - // nop ctx.pc = 0x02B418F0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA48F0: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4904: - // nop ctx.pc = 0x02997DE0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4930: - // nop - // nop ctx.pc = 0x02B3F2E0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA49C8: - // nop - // nop - // nop - // nop ctx.pc = 0x0206BD60u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4A88: - // nop - // nop - // nop - // nop ctx.pc = 0x02D81FF0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4AD0: - // nop - // nop - // nop - // nop ctx.pc = 0x0208DC70u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4B78: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4C50: - // nop - // nop - // nop - // nop ctx.pc = 0x02096F10u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4D10: - // nop - // nop - // nop - // nop ctx.pc = 0x0209C8C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4D38: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4D70: - // nop - // nop ctx.pc = 0x02B3EE70u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4E10: - // nop - // nop - // nop - // nop ctx.pc = 0x02D9B040u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4E20: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4FD8: - // nop - // nop - // nop - // nop ctx.pc = 0x02132130u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA4FE8: - // nop - // nop - // nop - // nop ctx.pc = 0x0213A590u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5060: - // nop - // nop - // nop - // nop ctx.pc = 0x02D9B860u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA50C0: - // nop - // nop - // nop - // nop ctx.pc = 0x021AED00u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5180: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5258: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5338: AOT_REGCACHE_SYNC_OUT(); @@ -1120,498 +910,178 @@ L_08BA539C: AOT_REGCACHE_SYNC_OUT(); rt.unsupported(0x08BA53A0u, 0xC0000001u, "unknown not lowered yet"); AOT_REGCACHE_SYNC_OUT(); return; L_08BA53A8: - // nop goto L_08BA53AC; L_08BA53AC: - // nop - // nop - // nop ctx.pc = 0x0221DAF0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA53E0: - // nop - // nop - // nop goto L_08BA53EC; L_08BA53EC: - // nop ctx.pc = 0x0221EA40u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5418: - // nop - // nop - // nop - // nop ctx.pc = 0x022394A0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA54C8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA55A0: - // nop - // nop - // nop - // nop ctx.pc = 0x02279D10u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA55B0: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5608: - // nop - // nop ctx.pc = 0x0228CB90u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5758: - // nop - // nop - // nop - // nop ctx.pc = 0x022E2570u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA57D0: - // nop - // nop - // nop - // nop ctx.pc = 0x022EAED0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5800: - // nop - // nop - // nop - // nop ctx.pc = 0x02316640u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5810: - // nop - // nop - // nop - // nop ctx.pc = 0x0237DBB0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5870: - // nop - // nop - // nop - // nop ctx.pc = 0x023E0800u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA58E0: - // nop - // nop - // nop - // nop ctx.pc = 0x02DA8EC0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5900: - // nop - // nop - // nop - // nop ctx.pc = 0x023E6D10u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5930: - // nop - // nop - // nop - // nop ctx.pc = 0x023E8E40u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5960: - // nop - // nop - // nop - // nop ctx.pc = 0x0240CF60u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA59C0: - // nop - // nop - // nop - // nop ctx.pc = 0x024106E0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5A38: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5B40: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5C48: - // nop - // nop - // nop - // nop ctx.pc = 0x02DAF340u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5C58: - // nop - // nop - // nop - // nop ctx.pc = 0x02594DB0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5CF0: - // nop - // nop ctx.pc = 0x02A6E690u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5D08: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5EAC: - // nop ctx.pc = 0x02993780u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5ED0: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5F00: - // nop - // nop ctx.pc = 0x02B3E9C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA5FA8: - // nop - // nop - // nop - // nop ctx.pc = 0x025C7B50u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6020: - // nop - // nop - // nop - // nop ctx.pc = 0x025ED2F0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6098: - // nop - // nop - // nop - // nop ctx.pc = 0x02601A50u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA60E8: - // nop - // nop - // nop - // nop ctx.pc = 0x02610F10u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6118: - // nop - // nop - // nop - // nop ctx.pc = 0x02613290u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6148: - // nop - // nop - // nop - // nop ctx.pc = 0x02614850u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6178: - // nop - // nop - // nop - // nop ctx.pc = 0x026150F0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA61A8: - // nop - // nop - // nop - // nop ctx.pc = 0x02615CD0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA61D8: - // nop - // nop - // nop - // nop ctx.pc = 0x026E7350u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6250: - // nop - // nop - // nop - // nop ctx.pc = 0x02718EC0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6260: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6338: - // nop - // nop - // nop - // nop ctx.pc = 0x027387A0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA63F8: - // nop - // nop - // nop - // nop ctx.pc = 0x02749D20u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA64A8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6580: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6748: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6850: - // nop - // nop - // nop - // nop ctx.pc = 0x0279FD50u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6900: - // nop - // nop - // nop - // nop ctx.pc = 0x027AECA0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6910: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6AD8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6BB0: - // nop - // nop - // nop - // nop ctx.pc = 0x027DC800u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6C70: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB64B0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6CD0: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6E78: - // nop - // nop - // nop - // nop ctx.pc = 0x02801680u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6E88: - // nop - // nop - // nop - // nop ctx.pc = 0x028060C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6ED0: - // nop - // nop - // nop - // nop ctx.pc = 0x028060C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6F18: - // nop - // nop - // nop - // nop ctx.pc = 0x028060C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6F60: - // nop - // nop - // nop - // nop ctx.pc = 0x028060C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6FA8: - // nop - // nop - // nop - // nop ctx.pc = 0x028099F0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA6FF0: - // nop - // nop - // nop - // nop ctx.pc = 0x028060C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7038: - // nop - // nop - // nop - // nop ctx.pc = 0x028060C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7080: - // nop - // nop - // nop - // nop ctx.pc = 0x02827E10u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7118: - // nop - // nop ctx.pc = 0x02A6E690u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7128: - // nop - // nop - // nop - // nop ctx.pc = 0x02B44E30u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA71E8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA72C0: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA73C8: - // nop - // nop - // nop - // nop ctx.pc = 0x028E6DD0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7410: - // nop - // nop - // nop - // nop ctx.pc = 0x02B44E30u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA74D0: - // nop - // nop - // nop - // nop ctx.pc = 0x028FACD0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7578: - // nop - // nop - // nop - // nop ctx.pc = 0x0294AE90u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7588: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7740: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7818: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB7300u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7828: - // nop - // nop - // nop - // nop ctx.pc = 0x029FEAC0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA78E8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7924: - // nop ctx.pc = 0x02B3EE70u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7958: - // nop - // nop ctx.pc = 0x02B41950u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7978: - // nop - // nop ctx.pc = 0x029EE8A0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA79C0: - // nop - // nop - // nop - // nop ctx.pc = 0x02A69B60u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7A68: - // nop - // nop - // nop - // nop ctx.pc = 0x02DC1510u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7AC8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7BA0: - // nop - // nop - // nop - // nop ctx.pc = 0x02A92630u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7C60: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7C90: - // nop - // nop ctx.pc = 0x02B3E9C0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7D38: - // nop - // nop - // nop - // nop ctx.pc = 0x02AB29B0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7DF8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7ED0: - // nop - // nop - // nop - // nop ctx.pc = 0x02DA8C40u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7F30: - // nop - // nop - // nop - // nop ctx.pc = 0x02AC02D0u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; L_08BA7FE8: - // nop - // nop - // nop - // nop ctx.pc = 0x02ACD090u; (void)([&]() { AOT_REGCACHE_SYNC_OUT(); const bool aot_regcache_same_ = (rt.invoke_chained_call(ctx, &aot_mem)); if (aot_regcache_same_) AOT_REGCACHE_SYNC_IN(); else aot_regcache_valid = false; return aot_regcache_same_; }()); AOT_REGCACHE_SYNC_OUT(); return; } diff --git a/profiles/vcs/generated/generated_unit_0233.cpp b/profiles/vcs/generated/generated_unit_0233.cpp index 2e1f71e..9a561b8 100644 --- a/profiles/vcs/generated/generated_unit_0233.cpp +++ b/profiles/vcs/generated/generated_unit_0233.cpp @@ -6,77 +6,43 @@ #include namespace psprecomp { -static const std::uint16_t kEntryIds_recomp_unit_0233[1874] = { - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 20, 0, 0, 0, 21, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, 24, 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, - 0, 27, 0, 0, 0, 28, 0, 0, 0, 29, 0, 0, 0, 30, 0, 0, 0, 31, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 48, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 0, 0, 52, 0, 0, 0, 53, 0, 0, - 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, - 0, 56, 0, 0, 0, 57, 0, 0, 0, 58, 0, 0, 0, 59, 0, 0, 0, 60, 0, 0, 0, 61, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, - 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 82, 0, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 0, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, +// PSPRECOMP_V811_COMPACT_DISPATCH: 64-slot occupancy masks + per-group base id. +static constexpr std::uint64_t kEntryMasks_recomp_unit_0233[30] = { + 0x0000000040000001ull, 0x0000000440001000ull, 0x0000000000000001ull, 0x0000040000000000ull, + 0x0000000000000004ull, 0x1000000000000000ull, 0x0004000000000000ull, 0x0000000400000000ull, + 0x0000100000004000ull, 0x0000400000000000ull, 0x0004000000100400ull, 0x0004000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, 0x2222222200000000ull, + 0x0000000002222222ull, 0x0080000000002200ull, 0x0088888000000000ull, 0x8888888000000000ull, + 0x0200000222220008ull, 0x0000000022222222ull, 0x0000000222222200ull, 0x0000000002220000ull, + 0x2000000000002220ull, 0x0000088000000000ull, 0x2222200000000008ull, 0x0002000000000002ull, + 0x0000002200000000ull, 0x0000000000020000ull, +}; +static constexpr std::uint16_t kEntryBases_recomp_unit_0233[30] = { + 1u, 3u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 14u, 15u, 18u, 19u, 19u, 19u, 19u, + 27u, 34u, 37u, 42u, 49u, 56u, 64u, 71u, 74u, 78u, 80u, 86u, 88u, 90u, }; void recomp_unit_0233_entry(Runtime &rt, AllegrexContext &ctx, std::uint16_t direct_entry_id, GuestMemory::AotFastView &aot_mem) { std::uint32_t jump_target = 0u; std::uint32_t local_transfers = 0u; + std::uint32_t local_redispatch_rounds = 0u; std::uint32_t local_pc = ctx.pc; std::uint32_t entry_id = direct_entry_id; LOCAL_DISPATCH: { if (entry_id == 0u) { const std::uint32_t entry_delta = local_pc - 0x08BA8018u; - entry_id = (entry_delta < 7496u && (entry_delta & 3u) == 0u) ? kEntryIds_recomp_unit_0233[entry_delta >> 2u] : 0u; + entry_id = 0u; + if (entry_delta < 7496u && (entry_delta & 3u) == 0u) { + const std::uint32_t entry_slot = entry_delta >> 2u; + const std::uint32_t entry_group = entry_slot >> 6u; + const std::uint64_t entry_mask = kEntryMasks_recomp_unit_0233[entry_group]; + const std::uint64_t entry_bit = 1ull << (entry_slot & 63u); + if ((entry_mask & entry_bit) != 0u) { + entry_id = static_cast( + kEntryBases_recomp_unit_0233[entry_group] + + std::popcount(entry_mask & (entry_bit - 1ull))); + } + } } switch (entry_id) { case 1u: goto L_08BA8018; @@ -176,541 +142,184 @@ LOCAL_DISPATCH: } } L_08BA8018: - // nop - // nop - // nop - // nop ctx.pc = 0x02B16570u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8090: - // nop - // nop - // nop - // nop ctx.pc = 0x02B44E30u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8148: - // nop - // nop - // nop - // nop ctx.pc = 0x02B65C60u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8190: - // nop - // nop - // nop - // nop ctx.pc = 0x02DC2FC0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA81A0: - // nop - // nop - // nop - // nop ctx.pc = 0x02B8CD60u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8218: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA83C0: - // nop - // nop - // nop - // nop ctx.pc = 0x02DCA020u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8420: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8608: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA86E0: - // nop - // nop - // nop - // nop ctx.pc = 0x02C6F0E0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA87A0: - // nop - // nop - // nop - // nop ctx.pc = 0x02C798F0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8850: - // nop - // nop - // nop - // nop ctx.pc = 0x02C7E200u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA88C8: - // nop - // nop - // nop - // nop ctx.pc = 0x029A3390u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA89D0: - // nop - // nop - // nop - // nop ctx.pc = 0x02C91AF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8A40: - // nop - // nop - // nop - // nop ctx.pc = 0x02CF9370u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8A68: - // nop - // nop - // nop - // nop ctx.pc = 0x02CFB690u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8AE0: - // nop - // nop - // nop - // nop ctx.pc = 0x02D3FB60u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8BE0: - // nop ctx.pc = 0x020134F0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8F9C: - // nop - // nop - // nop - // nop ctx.pc = 0x02010200u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8FAC: - // nop - // nop - // nop - // nop ctx.pc = 0x020102E0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8FBC: - // nop - // nop - // nop - // nop ctx.pc = 0x02D952B0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8FCC: - // nop - // nop - // nop - // nop ctx.pc = 0x02010420u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8FDC: - // nop - // nop - // nop - // nop ctx.pc = 0x02D95420u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8FEC: - // nop - // nop - // nop - // nop ctx.pc = 0x02018AE0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA8FFC: - // nop - // nop - // nop - // nop ctx.pc = 0x02D96310u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA900C: - // nop - // nop - // nop - // nop ctx.pc = 0x02032FC0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA901C: - // nop - // nop - // nop - // nop ctx.pc = 0x02033100u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA902C: - // nop - // nop - // nop - // nop ctx.pc = 0x0206A890u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA903C: - // nop - // nop - // nop - // nop ctx.pc = 0x02D986D0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA904C: - // nop - // nop - // nop - // nop ctx.pc = 0x02D98930u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA905C: - // nop - // nop - // nop - // nop ctx.pc = 0x02D98BD0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA906C: - // nop - // nop - // nop - // nop ctx.pc = 0x02D98EB0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA907C: - // nop - // nop - // nop - // nop ctx.pc = 0x0206BD60u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA913C: - // nop - // nop - // nop - // nop ctx.pc = 0x02D99940u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA914C: - // nop - // nop - // nop - // nop ctx.pc = 0x0208DC70u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA91F4: - // nop - // nop - // nop - // nop ctx.pc = 0x02096F10u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA92B4: - // nop - // nop - // nop - // nop ctx.pc = 0x02D99A70u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA92C4: - // nop - // nop - // nop - // nop ctx.pc = 0x02D81FF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA92D4: - // nop - // nop - // nop - // nop ctx.pc = 0x02131FF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA92E4: - // nop - // nop - // nop - // nop ctx.pc = 0x02186220u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA92F4: - // nop - // nop - // nop - // nop ctx.pc = 0x021AED00u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA93B4: - // nop - // nop - // nop - // nop ctx.pc = 0x02D9BBF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA93C4: - // nop - // nop - // nop - // nop ctx.pc = 0x021BE400u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA93D4: - // nop - // nop - // nop - // nop ctx.pc = 0x02D9C0A0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA93E4: - // nop - // nop - // nop - // nop ctx.pc = 0x021D4160u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA93F4: - // nop - // nop - // nop - // nop ctx.pc = 0x02D9CA30u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9404: - // nop - // nop - // nop - // nop ctx.pc = 0x022142F0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9414: - // nop - // nop - // nop - // nop ctx.pc = 0x02DA07C0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9424: - // nop - // nop - // nop - // nop ctx.pc = 0x0221D950u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA945C: - // nop - // nop - // nop - // nop ctx.pc = 0x02279BD0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA946C: - // nop - // nop - // nop - // nop ctx.pc = 0x022DCAE0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA947C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DA1020u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA948C: - // nop - // nop - // nop - // nop ctx.pc = 0x02316500u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA949C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DA8D60u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA94FC: - // nop - // nop - // nop - // nop ctx.pc = 0x023E1990u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA951C: - // nop - // nop - // nop - // nop ctx.pc = 0x02D81FF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA952C: - // nop - // nop - // nop - // nop ctx.pc = 0x023F41A0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA953C: - // nop - // nop - // nop - // nop ctx.pc = 0x024E82F0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA954C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DAD570u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA955C: - // nop - // nop - // nop - // nop ctx.pc = 0x0255D0D0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA956C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DAEFB0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA957C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB2CF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA958C: - // nop - // nop - // nop - // nop ctx.pc = 0x02594DB0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA963C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB2E20u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA964C: - // nop - // nop - // nop - // nop ctx.pc = 0x025D4270u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA965C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB34D0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA966C: - // nop - // nop - // nop - // nop ctx.pc = 0x026E9470u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA967C: - // nop - // nop - // nop - // nop ctx.pc = 0x026E95B0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA968C: - // nop - // nop - // nop - // nop ctx.pc = 0x02718D80u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA969C: - // nop - // nop - // nop - // nop ctx.pc = 0x027387A0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA975C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB4DF0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA976C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB52E0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA977C: - // nop - // nop - // nop - // nop ctx.pc = 0x02749D20u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA982C: - // nop - // nop - // nop - // nop ctx.pc = 0x027AEB60u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA983C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB5E50u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA984C: - // nop - // nop - // nop - // nop ctx.pc = 0x027DC800u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA990C: - // nop - // nop - // nop - // nop ctx.pc = 0x02827E10u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA99B4: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB6610u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA99C4: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB6850u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9A24: - // nop - // nop - // nop - // nop ctx.pc = 0x028FACD0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9ACC: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB6D00u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9ADC: - // nop - // nop - // nop - // nop ctx.pc = 0x02949B80u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9AEC: - // nop - // nop - // nop - // nop ctx.pc = 0x0295A2C0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9AFC: - // nop - // nop - // nop - // nop ctx.pc = 0x02DB6FC0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9B0C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DC1670u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9B1C: - // nop - // nop - // nop - // nop ctx.pc = 0x02A92630u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9BDC: - // nop - // nop - // nop - // nop ctx.pc = 0x02C6F0E0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9C9C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DCB230u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9CAC: - // nop - // nop - // nop - // nop ctx.pc = 0x02C798F0u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; L_08BA9D5C: - // nop - // nop - // nop - // nop ctx.pc = 0x02DCB820u; (void)rt.invoke_chained_call(ctx, &aot_mem); return; } diff --git a/profiles/vcs/generated/v811_perf_manifest.json b/profiles/vcs/generated/v811_perf_manifest.json new file mode 100644 index 0000000..b8164d8 --- /dev/null +++ b/profiles/vcs/generated/v811_perf_manifest.json @@ -0,0 +1,22 @@ +{ + "stage": "V8.11 linked local dispatch + compact entry maps", + "unit_count": 234, + "source_changes": { + "runtime_hpp": false, + "runtime_cpp": false, + "generic_codegen": false, + "vcs_codegen": false, + "regcache_tool": false, + "ge_renderer_clangcl": true + }, + "dense_tables_rewritten": 0, + "dense_slots_removed": 0, + "compact_metadata_bytes_estimate": 0, + "local_link_sites": 11299, + "nops_removed": 0, + "adjacent_gotos_removed": 0, + "generated_source_bytes_before_this_run": 121704134, + "generated_source_bytes_after_this_run": 121704134, + "generated_source_bytes_saved_this_run": 0, + "units": [] +} diff --git a/profiles/vcs/host/ge_renderer.cpp b/profiles/vcs/host/ge_renderer.cpp index 7406bf6..6331bfe 100644 --- a/profiles/vcs/host/ge_renderer.cpp +++ b/profiles/vcs/host/ge_renderer.cpp @@ -2706,12 +2706,12 @@ FragmentSetup make_fragment_setup_cached(const std::array &c 0x9D,0xD2,0x9C,0xD4,0xD5,0xD3,0x1E,0xE8,0xE9,0x9F,0x9E,0x23, 0xDE,0xE7,0xDF,0x21,0xE0,0xE1,0xDB,0x22,0xC9,0xCA,0x00}}; struct Cache { - std::array values{}; + std::array values{}; FragmentSetup setup{}; bool valid{}; }; static thread_local Cache cache; - std::array values{}; + std::array values{}; for (std::size_t i = 0; i + 1 < regs.size(); ++i) values[i] = commands[regs[i]]; // Framebuffer/depth base helpers also consume the high-address words. values.back() = commands[0x9C] ^ (commands[0x9E] * 0x9E3779B9u); diff --git a/profiles/vcs/scripts/build_perf_ninja_clangcl.bat b/profiles/vcs/scripts/build_perf_ninja_clangcl.bat new file mode 100644 index 0000000..9bc37ed --- /dev/null +++ b/profiles/vcs/scripts/build_perf_ninja_clangcl.bat @@ -0,0 +1,5 @@ +@echo off +setlocal +rem Compatibility launcher: keep one authoritative V8.11 build path. +call "%~dp0build_release_ninja_clangcl_v811.bat" +exit /b %ERRORLEVEL% diff --git a/profiles/vcs/scripts/build_release_ninja_clangcl_v811.bat b/profiles/vcs/scripts/build_release_ninja_clangcl_v811.bat new file mode 100644 index 0000000..da11c37 --- /dev/null +++ b/profiles/vcs/scripts/build_release_ninja_clangcl_v811.bat @@ -0,0 +1,203 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion +for %%I in ("%~dp0..\..\..") do set "REPO=%%~fI" +set "PROFILE=%REPO%\profiles\vcs" +set "BUILD=%REPO%\out\vcs-release-ninja-clangcl-v811" + +if not exist "%REPO%\CMakeLists.txt" goto :BAD_ROOT +if not exist "%PROFILE%\CMakeLists.txt" goto :BAD_ROOT + +echo ================================================================ +echo VCS V8.11 - CPU / CODE-DENSITY BUILD +echo Ninja + clang-cl + lld-link + echo Base: temp-edits-1 / V8.10.1 + echo Audio work intentionally untouched + echo ================================================================ + +call "%PROFILE%\FIX_FUTURE_TIMESTAMPS.bat" +if errorlevel 1 goto :FAIL +call "%PROFILE%\scripts\pick_jobs.bat" +if errorlevel 1 goto :FAIL +if defined PSPRECOMP_NINJA_JOBS set "JOBS=%PSPRECOMP_NINJA_JOBS%" +if not defined JOBS set "JOBS=2" + +set "VSROOT=" +for %%E in (Community Professional Enterprise BuildTools) do ( + if not defined VSROOT if exist "%ProgramFiles%\Microsoft Visual Studio\2022\%%E\Common7\Tools\VsDevCmd.bat" set "VSROOT=%ProgramFiles%\Microsoft Visual Studio\2022\%%E" + if not defined VSROOT if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\%%E\Common7\Tools\VsDevCmd.bat" set "VSROOT=%ProgramFiles(x86)%\Microsoft Visual Studio\2022\%%E" +) +if not defined VSROOT ( + set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" + if exist "!VSWHERE!" for /f "delims=" %%I in ('"!VSWHERE!" -latest -version "[17.0,18.0)" -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath 2^>nul') do if not defined VSROOT set "VSROOT=%%I" +) +if not defined VSROOT goto :NO_VS +call "%VSROOT%\Common7\Tools\VsDevCmd.bat" -arch=x64 -host_arch=x64 >nul +if errorlevel 1 goto :NO_VS + +if defined PSPRECOMP_LLVM_BIN ( + set "LLVM_BIN=%PSPRECOMP_LLVM_BIN%" +) else ( + set "LLVM_BIN=%ProgramFiles%\LLVM\bin" +) +set "CLANG_CL_EXE=%LLVM_BIN%\clang-cl.exe" +set "LLD_LINK_EXE=%LLVM_BIN%\lld-link.exe" +if not exist "%CLANG_CL_EXE%" goto :NO_LLVM +if not exist "%LLD_LINK_EXE%" goto :NO_LLVM +for /f "tokens=3" %%V in ('"%CLANG_CL_EXE%" --version ^| findstr /B /C:"clang version"') do set "CLANG_VERSION=%%V" +for /f "tokens=1 delims=." %%M in ("!CLANG_VERSION!") do set "CLANG_MAJOR=%%M" +if not defined CLANG_MAJOR goto :NO_LLVM +if !CLANG_MAJOR! LSS 22 goto :OLD_LLVM + +set "CMAKE_EXE=%VSROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" +if not exist "%CMAKE_EXE%" set "CMAKE_EXE=" +if not defined CMAKE_EXE for /f "delims=" %%I in ('where cmake.exe 2^>nul') do if not defined CMAKE_EXE set "CMAKE_EXE=%%~fI" +if not defined CMAKE_EXE goto :NO_CMAKE +set "NINJA_EXE=%VSROOT%\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe" +if not exist "%NINJA_EXE%" set "NINJA_EXE=" +if not defined NINJA_EXE for /f "delims=" %%I in ('where ninja.exe 2^>nul') do if not defined NINJA_EXE set "NINJA_EXE=%%~fI" +if not defined NINJA_EXE goto :NO_NINJA +for %%I in ("%CMAKE_EXE%") do set "CTEST_EXE=%%~dpIctest.exe" +if not exist "%CTEST_EXE%" set "CTEST_EXE=ctest.exe" + +set "PYTHON3_CMD=" +py -3 -c "import sys; raise SystemExit(0 if sys.version_info.major == 3 else 1)" >nul 2>&1 +if not errorlevel 1 set "PYTHON3_CMD=py -3" +if not defined PYTHON3_CMD ( + python -c "import sys; raise SystemExit(0 if sys.version_info.major == 3 else 1)" >nul 2>&1 + if not errorlevel 1 set "PYTHON3_CMD=python" +) +if not defined PYTHON3_CMD goto :NO_PYTHON + +if not defined PSPRECOMP_TIER2_DEEP_TELEMETRY set "PSPRECOMP_TIER2_DEEP_TELEMETRY=OFF" +if not defined PSPRECOMP_RUNTIME_CHAIN_TELEMETRY set "PSPRECOMP_RUNTIME_CHAIN_TELEMETRY=OFF" +if /I "%PSPRECOMP_TIER2_DEEP_TELEMETRY%"=="1" set "PSPRECOMP_TIER2_DEEP_TELEMETRY=ON" +if /I "%PSPRECOMP_RUNTIME_CHAIN_TELEMETRY%"=="1" set "PSPRECOMP_RUNTIME_CHAIN_TELEMETRY=ON" + + echo [0/6] Applying idempotent V8.11 structural CPU pass... +%PYTHON3_CMD% "%PROFILE%\tools\apply_v811_perf.py" "%REPO%" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tools\apply_v811_perf.py" "%REPO%" --check +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v811_perf.py" +if errorlevel 1 goto :FAIL + + echo [1/6] Verifying protected V8.10 baseline... +%PYTHON3_CMD% "%PROFILE%\tests\check_v827_save_thread_lifecycle.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v827a_internal_save_repro_gate.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v84_aggressive_cpu.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v85_aggressive_vfpu.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v86_radio_vfpu_ct2.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v88_extreme_cpu_trusted_dispatch.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v89_register_residency.py" +if errorlevel 1 goto :FAIL +%PYTHON3_CMD% "%PROFILE%\tests\check_v810_resident_regions.py" +if errorlevel 1 goto :FAIL + + echo [2/6] Configuring clang-cl !CLANG_VERSION! / lld-link / Ninja... +rem Cold 84%% of generated TUs use O2 instead of Ox/O3 to reduce code footprint. +rem The measured 37-unit hot set remains O3 through PSPRECOMP_HOT_GENERATED_OPT_LEVEL. +rem /arch:AVX2 is forced here because CMake's generic MSVC gate does not reliably +rem classify clang-cl as the Microsoft compiler even though it uses the MSVC ABI. +"%CMAKE_EXE%" -S "%REPO%" -B "%BUILD%" -G Ninja ^ + "-DCMAKE_MAKE_PROGRAM=%NINJA_EXE%" ^ + "-DCMAKE_CXX_COMPILER=%CLANG_CL_EXE%" ^ + "-DCMAKE_LINKER=%LLD_LINK_EXE%" ^ + "-DCMAKE_CXX_FLAGS_RELEASE=/O2 /DNDEBUG /arch:AVX2 /Gy /Gw" ^ + "-DCMAKE_EXE_LINKER_FLAGS_RELEASE=/OPT:REF /OPT:ICF" ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DPSPRECOMP_PROFILE=vcs ^ + -DPSPRECOMP_WINDOWS_GPU_BACKEND=DX12 ^ + -DPSPRECOMP_GENERATED_OPT_LEVEL=2 ^ + -DPSPRECOMP_HOT_GENERATED_OPT_LEVEL=3 ^ + -DPSPRECOMP_GENERATED_INLINE_LEVEL=0 ^ + -DPSPRECOMP_HOT_GENERATED_INLINE_LEVEL=3 ^ + -DPSPRECOMP_PROFILE_GUIDED_AOT=ON ^ + -DPSPRECOMP_LTO=ON ^ + -DPSPRECOMP_VCS_AOT_LTO=OFF ^ + -DPSPRECOMP_NATIVE_AVX2=ON ^ + -DPSPRECOMP_AOT_ASSUME_NO_WRITE_WATCH=ON ^ + -DPSPRECOMP_AOT_PRODUCTION_FASTPATHS=ON ^ + -DPSPRECOMP_RUNTIME_CHAIN_TELEMETRY=%PSPRECOMP_RUNTIME_CHAIN_TELEMETRY% ^ + -DPSPRECOMP_VCS_TIER2_DEEP_TELEMETRY=%PSPRECOMP_TIER2_DEEP_TELEMETRY% ^ + -DPSPRECOMP_MSVC_CGTHREADS=0 ^ + -DPSPRECOMP_MSVC_MP_JOBS=1 ^ + -DPSPRECOMP_BUILD_TESTS=ON ^ + -DPSPRECOMP_BUILD_PROFILE_TESTS=ON +if errorlevel 1 goto :FAIL + + echo [3/6] Building VCSNative... +set "NINJA_STATUS=[%%f/%%t %%p ^| %%e elapsed ^| %%r running] " +"%CMAKE_EXE%" --build "%BUILD%" --parallel %JOBS% --target VCSNative +if errorlevel 1 goto :FAIL + + echo [4/6] Building and running regression tests... +"%CMAKE_EXE%" --build "%BUILD%" --parallel %JOBS% --target psprecomp_tests vcs_profile_tests vcs_config_tests audio_resampler_tests vfpu_tier2_tests vcs_bootstrap_paths_tests vcs_dx12_probe vcs_dx12_ge_probe +if errorlevel 1 goto :FAIL +"%CTEST_EXE%" --test-dir "%BUILD%" --output-on-failure +if errorlevel 1 goto :TEST_FAIL + +set "BIN=%BUILD%\bin\Release" +if not exist "%BIN%\VCSNative.exe" goto :FAIL + echo [5/6] DX12 / GE probes... +"%BIN%\vcs_dx12_probe.exe" +if errorlevel 1 goto :FAIL +set "PSPRECOMP_DX12_GE_STRICT=1" +set "PSPRECOMP_GE_PARALLEL_VERTEX_DECODE=0" +set "PSPRECOMP_GE_DIRECT_NONINDEXED_DRAW=1" +set "PSPRECOMP_DX12_PACKED_0115=1" +set "PSPRECOMP_DX12_NATIVE_INDEXED_DRAW=1" +set "PSPRECOMP_DX12_BATCH_MERGE=1" +"%BIN%\vcs_dx12_ge_probe.exe" +if errorlevel 1 goto :FAIL +set "PSPRECOMP_DX12_GE_STRICT=" + + echo [6/6] Installing config + reporting size... +copy /Y "%PROFILE%\config\VCSNative.ini" "%BIN%\VCSNative.ini" >nul +for %%F in ("%BIN%\VCSNative.exe") do echo VCSNative.exe size: %%~zF bytes +%PYTHON3_CMD% -c "import pathlib; p=pathlib.Path(r'%PROFILE%')/'generated'; fs=list(p.glob('*.cpp')); n=sum(x.stat().st_size for x in fs); print(f'Generated C++: {len(fs)} files, {n/1048576:.2f} MiB')" + +echo. +echo ================================================================ +echo V8.11 CLANG-CL BUILD OK +echo EXE: %BIN%\VCSNative.exe +echo Build tree: %BUILD% +echo ================================================================ +exit /b 0 + +:BAD_ROOT +echo ERROR: repository root/profile not found. +exit /b 20 +:NO_VS +echo ERROR: Visual Studio 2022 Desktop C++ tools not found. +exit /b 2 +:NO_LLVM +echo ERROR: standalone LLVM clang-cl/lld-link not found in "%LLVM_BIN%". +echo Install LLVM 22+ or set PSPRECOMP_LLVM_BIN to its bin directory. +exit /b 3 +:OLD_LLVM +echo ERROR: clang-cl !CLANG_VERSION! is too old. VCS requires LLVM 22+. +echo LLVM 19 is known to hang on generated_unit_0103.cpp in this project. +exit /b 4 +:NO_CMAKE +echo ERROR: CMake not found. +exit /b 5 +:NO_NINJA +echo ERROR: Ninja not found. +exit /b 6 +:NO_PYTHON +echo ERROR: Python 3 not found. +exit /b 7 +:TEST_FAIL +echo ERROR: regression tests failed. +exit /b 8 +:FAIL +echo. +echo ERROR: V8.11 clang-cl Ninja build failed. +echo Send the FIRST real compiler/test error above. +exit /b 12 diff --git a/profiles/vcs/tests/check_v811_perf.py b/profiles/vcs/tests/check_v811_perf.py new file mode 100644 index 0000000..31523b0 --- /dev/null +++ b/profiles/vcs/tests/check_v811_perf.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +from __future__ import annotations +import json +import pathlib +import sys + +ROOT = pathlib.Path(__file__).resolve().parents[3] +GEN = ROOT / "profiles" / "vcs" / "generated" +manifest = GEN / "v811_perf_manifest.json" +errors=[] +if not manifest.exists(): errors.append("v811 manifest missing") +else: + data=json.loads(manifest.read_text(encoding="utf-8")) + if data.get("unit_count",0) < 200: errors.append("unexpectedly small AOT corpus") +for p in sorted(GEN.glob("generated_unit_*.cpp")): + t=p.read_text(encoding="utf-8",errors="ignore") + if "static const std::uint16_t kEntryIds_" in t: errors.append(f"dense map remains: {p.name}") +if "continue_generated_local_dispatch" not in (ROOT/"include"/"psprecomp"/"runtime.hpp").read_text(encoding="utf-8"): + errors.append("runtime declaration missing") +if "PSPRECOMP_V811_LOCAL_REDISPATCH" not in (ROOT/"src"/"runtime.cpp").read_text(encoding="utf-8"): + errors.append("runtime implementation missing") +if errors: + print("V8.11 CHECK FAILED") + for e in errors[:20]: print(" -",e) + sys.exit(1) +print("V8.11 CHECK OK") diff --git a/profiles/vcs/tools/apply_v811_perf.py b/profiles/vcs/tools/apply_v811_perf.py new file mode 100644 index 0000000..7894f87 --- /dev/null +++ b/profiles/vcs/tools/apply_v811_perf.py @@ -0,0 +1,503 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import argparse +import json +import re +import sys +from dataclasses import asdict, dataclass +from pathlib import Path + +STAGE = "V8.11 linked local dispatch + compact entry maps" +RUNTIME_DECL_MARKER = "continue_generated_local_dispatch" +RUNTIME_IMPL_MARKER = "PSPRECOMP_V811_LOCAL_REDISPATCH" +COMPACT_MARKER = "PSPRECOMP_V811_COMPACT_DISPATCH" +LOCAL_MARKER = "PSPRECOMP_V811_LOCAL_LINK" + +TABLE_RE = re.compile( + r"static const std::uint16_t (?PkEntryIds_[A-Za-z0-9_]+)\[(?P\d+)\] = \{\n" + r"(?P.*?)\n\};\n", + re.DOTALL, +) +NOP_RE = re.compile(r"(?m)^[ \t]*// nop\r?\n") + + +@dataclass +class UnitStats: + path: str + bytes_before: int + bytes_after: int + dense_tables: int + dense_slots: int + compact_metadata_bytes: int + local_links: int + nops_removed: int + adjacent_gotos_removed: int + + +def read(path: Path) -> str: + return path.read_text(encoding="utf-8", errors="strict") + + +def write_if_changed(path: Path, old: str, new: str) -> bool: + if old == new: + return False + tmp = path.with_suffix(path.suffix + ".v811tmp") + tmp.write_text(new, encoding="utf-8", newline="\n") + tmp.replace(path) + return True + + +def require_once(text: str, needle: str, path: Path, description: str) -> None: + count = text.count(needle) + if count != 1: + raise RuntimeError(f"{path}: expected one {description}, found {count}") + + +def patch_runtime_hpp(path: Path) -> bool: + old = read(path) + if RUNTIME_DECL_MARKER in old: + return False + anchor = ( + " [[nodiscard]] bool invoke_chained_unit(AllegrexContext &ctx, std::uint32_t unit_index,\n" + " GuestMemory::AotFastView *shared_aot_mem = nullptr);\n" + ) + require_once(old, anchor, path, "invoke_chained_unit declaration") + declaration = anchor + ( + "\n" + " // V8.11: scheduler-exact top-level local redispatch. Generated code keeps\n" + " // the proven 256-JR boundary, publishes ctx.pc, and asks Runtime to perform\n" + " // the same logical outer-dispatch accounting without paying PC->unit lookup\n" + " // and native function return/re-entry when it is safe to remain in-place.\n" + " [[nodiscard]] bool continue_generated_local_dispatch(AllegrexContext &ctx);\n" + ) + text = old.replace(anchor, declaration, 1) + field_anchor = " bool chain_context_invalidated_{};\n" + require_once(text, field_anchor, path, "chain_context_invalidated_ field") + text = text.replace( + field_anchor, + field_anchor + + " // Enabled only inside Runtime::run's production outer loop when no outer\n" + + " // dispatch observer/heartbeat/progress contract would be skipped.\n" + + " bool local_redispatch_fastpath_active_{};\n", + 1, + ) + return write_if_changed(path, old, text) + + +def patch_runtime_cpp(path: Path) -> bool: + old = read(path) + text = old + if RUNTIME_IMPL_MARKER not in text: + anchor = ( + "bool Runtime::account_dispatch_work(AllegrexContext &ctx, bool allow_preemption) {\n" + "#if !defined(PSPRECOMP_AOT_PRODUCTION_FASTPATHS)\n" + " if (track_dispatch_counters_) ++dispatch_work_count_;\n" + "#endif\n" + " const std::uint64_t interval = g_runtime_starvation_interval_fast;\n" + " if (interval == 0u) return true;\n" + " ++dispatches_since_import_;\n" + " if (!allow_preemption || dispatches_since_import_ < interval) return true;\n" + " return run_starvation_boundary(ctx);\n" + "}\n" + ) + require_once(text, anchor, path, "account_dispatch_work implementation") + impl = anchor + ( + "\n" + "// PSPRECOMP_V811_LOCAL_REDISPATCH\n" + "bool Runtime::continue_generated_local_dispatch(AllegrexContext &ctx) {\n" + "#if !defined(PSPRECOMP_AOT_PRODUCTION_FASTPATHS)\n" + " (void)ctx;\n" + " return false;\n" + "#else\n" + " // Do not retain a nested native chain frame across a boundary that the\n" + " // old implementation used to unwind. Top-level only keeps chain-depth\n" + " // semantics identical while removing the redundant outer trampoline.\n" + " if (!local_redispatch_fastpath_active_ || stopped_ || chain_depth_ != 0u ||\n" + " chain_context_invalidated_) return false;\n" + " if (!account_dispatch_work(ctx, true)) return false;\n" + " return !stopped_ && !chain_context_invalidated_;\n" + "#endif\n" + "}\n" + ) + text = text.replace(anchor, impl, 1) + + gate_marker = "PSPRECOMP_V811_LOCAL_REDISPATCH_GATE" + if gate_marker not in text: + anchor = ( + " const RuntimeStarvationHook starvation = g_starvation_hook;\n" + " const std::uint64_t starvation_every = starvation != nullptr ? g_starvation_interval : 0u;\n" + " std::uint64_t executed_dispatches = 0u;\n" + ) + require_once(text, anchor, path, "production outer-loop timing setup") + replacement = ( + " const RuntimeStarvationHook starvation = g_starvation_hook;\n" + " const std::uint64_t starvation_every = starvation != nullptr ? g_starvation_interval : 0u;\n" + " // PSPRECOMP_V811_LOCAL_REDISPATCH_GATE\n" + "#if defined(PSPRECOMP_AOT_PRODUCTION_FASTPATHS)\n" + " local_redispatch_fastpath_active_ =\n" + " progress_every == 0u && heartbeat_every == 0u &&\n" + " g_pre_dispatch_hook == nullptr && g_post_dispatch_hook == nullptr &&\n" + " std::getenv(\"PSPRECOMP_REPORT_DISPATCH_COUNT\") == nullptr;\n" + "#else\n" + " local_redispatch_fastpath_active_ = false;\n" + "#endif\n" + " struct LocalRedispatchResetGuard {\n" + " bool &flag;\n" + " ~LocalRedispatchResetGuard() { flag = false; }\n" + " } local_redispatch_reset_guard{local_redispatch_fastpath_active_};\n" + " std::uint64_t executed_dispatches = 0u;\n" + ) + text = text.replace(anchor, replacement, 1) + + return write_if_changed(path, old, text) + + +def patch_codegen_nops(path: Path) -> bool: + old = read(path) + text = old + # Source-size cleanup for future regenerations. A guest NOP has no host-side + # semantic statement, so emitting a comment per instruction only inflates the corpus. + text = text.replace( + ' case psprecomp::OpcodeKind::Nop: out << " // nop\\n"; break;\n', + ' case psprecomp::OpcodeKind::Nop: break;\n', + ) + return write_if_changed(path, old, text) + + +def patch_regcache_tool(path: Path) -> bool: + """Teach future V8.9 reapplications that the V8.11 helper is scheduler-visible.""" + old = read(path) + if "continue_generated_local_dispatch" in old: + return False + text = old + # Expand both canonical boundary matcher and strip matcher. The patterns in + # this tool are intentionally single-line raw strings in temp-edits-1. + needle1 = "r'(rt\\.invoke_(?:chained_trusted_direct|chained_direct|compact_generated_leaf)<[^;\\n]+?>\\(ctx, &aot_mem\\)|rt\\.invoke_chained_call\\(ctx, &aot_mem\\))')" + replacement1 = "r'(rt\\.invoke_(?:chained_trusted_direct|chained_direct|compact_generated_leaf)<[^;\\n]+?>\\(ctx, &aot_mem\\)|rt\\.invoke_chained_call\\(ctx, &aot_mem\\)|rt\\.continue_generated_local_dispatch\\(ctx\\))')" + if needle1 not in text: + raise RuntimeError(f"{path}: V8.9 CHAIN_RE anchor changed") + text = text.replace(needle1, replacement1, 1) + + needle2 = "(rt\\.invoke_(?:chained_trusted_direct|chained_direct|compact_generated_leaf)<[^;\\n]+?>\\(ctx, &aot_mem\\)|rt\\.invoke_chained_call\\(ctx, &aot_mem\\))" + replacement2 = "(rt\\.invoke_(?:chained_trusted_direct|chained_direct|compact_generated_leaf)<[^;\\n]+?>\\(ctx, &aot_mem\\)|rt\\.invoke_chained_call\\(ctx, &aot_mem\\)|rt\\.continue_generated_local_dispatch\\(ctx\\))" + if needle2 not in text: + raise RuntimeError(f"{path}: V8.9 CHAIN_WRAP_RE anchor changed") + text = text.replace(needle2, replacement2, 1) + return write_if_changed(path, old, text) + + +def parse_dense_values(body: str) -> list[int]: + residue = re.sub(r"[0-9,\s]", "", body) + if residue: + raise RuntimeError(f"unexpected token in dense entry table: {residue[:40]!r}") + return [int(x) for x in re.findall(r"\d+", body)] + + +def compact_table(table_name: str, values: list[int]) -> tuple[str, str, str, int]: + nonzero = [x for x in values if x != 0] + if nonzero != list(range(1, len(nonzero) + 1)): + raise RuntimeError(f"{table_name}: entry ids are not monotonic 1..N") + suffix = table_name[len("kEntryIds_") :] + mask_name = f"kEntryMasks_{suffix}" + base_name = f"kEntryBases_{suffix}" + masks: list[int] = [] + bases: list[int] = [] + next_id = 1 + for group_start in range(0, len(values), 64): + bases.append(next_id) + mask = 0 + for bit, value in enumerate(values[group_start : group_start + 64]): + if value: + mask |= 1 << bit + next_id += 1 + masks.append(mask) + + lines = [f"// {COMPACT_MARKER}: 64-slot occupancy masks + per-group base id."] + lines.append(f"static constexpr std::uint64_t {mask_name}[{len(masks)}] = {{") + for i in range(0, len(masks), 4): + lines.append(" " + " ".join(f"0x{x:016X}ull," for x in masks[i : i + 4])) + lines.append("};") + lines.append(f"static constexpr std::uint16_t {base_name}[{len(bases)}] = {{") + for i in range(0, len(bases), 16): + lines.append(" " + " ".join(f"{x}u," for x in bases[i : i + 16])) + lines.append("};") + lines.append("") + return "\n".join(lines), mask_name, base_name, len(masks) * 8 + len(bases) * 2 + + +def replace_dense_lookup(text: str, table_name: str, mask_name: str, base_name: str) -> str: + pattern = re.compile( + r"(?P[ \t]*)entry_id = \(entry_delta < (?P\d+)u && " + r"\(entry_delta & 3u\) == 0u\) \? " + + re.escape(table_name) + + r"\[entry_delta >> 2u\] : 0u;" + ) + matches = list(pattern.finditer(text)) + if len(matches) != 1: + raise RuntimeError(f"{table_name}: expected exactly one dense lookup, found {len(matches)}") + m = matches[0] + indent = m.group("indent") + span = m.group("span") + replacement = ( + f"{indent}entry_id = 0u;\n" + f"{indent}if (entry_delta < {span}u && (entry_delta & 3u) == 0u) {{\n" + f"{indent} const std::uint32_t entry_slot = entry_delta >> 2u;\n" + f"{indent} const std::uint32_t entry_group = entry_slot >> 6u;\n" + f"{indent} const std::uint64_t entry_mask = {mask_name}[entry_group];\n" + f"{indent} const std::uint64_t entry_bit = 1ull << (entry_slot & 63u);\n" + f"{indent} if ((entry_mask & entry_bit) != 0u) {{\n" + f"{indent} entry_id = static_cast(\n" + f"{indent} {base_name}[entry_group] +\n" + f"{indent} std::popcount(entry_mask & (entry_bit - 1ull)));\n" + f"{indent} }}\n" + f"{indent}}}" + ) + return text[: m.start()] + replacement + text[m.end() :] + + +def add_local_round_counter(text: str) -> str: + if "local_redispatch_rounds" in text: + return text + anchor = " std::uint32_t local_transfers = 0u;\n" + if anchor not in text: + return text + return text.replace(anchor, anchor + " std::uint32_t local_redispatch_rounds = 0u;\n", 1) + + +def rewrite_local_boundaries(text: str) -> tuple[str, int]: + if LOCAL_MARKER in text: + return text, text.count(LOCAL_MARKER) + text = add_local_round_counter(text) + count = 0 + + # V8.9 register-resident form. Synchronize the architectural context before + # Runtime can run a scheduler hook, then reload native register locals only + # when the same PSP context remains active. + reg_pattern = re.compile( + r"(?P[ \t]*)ctx\.pc = jump_target;\n" + r"(?P=indent)AOT_REGCACHE_SYNC_OUT\(\); return;" + ) + def reg_repl(m: re.Match[str]) -> str: + nonlocal count + count += 1 + i = m.group("indent") + return ( + f"{i}ctx.pc = jump_target;\n" + f"{i}AOT_REGCACHE_SYNC_OUT();\n" + f"{i}// {LOCAL_MARKER}: preserve the 256-transfer scheduler boundary, skip outer trampoline.\n" + f"{i}if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) {{\n" + f"{i} ++local_redispatch_rounds;\n" + f"{i} AOT_REGCACHE_SYNC_IN();\n" + f"{i} local_transfers = 0u;\n" + f"{i} local_pc = ctx.pc;\n" + f"{i} entry_id = 0u;\n" + f"{i} goto LOCAL_DISPATCH;\n" + f"{i}}}\n" + f"{i}return;" + ) + text = reg_pattern.sub(reg_repl, text) + + # Canonical/non-regcache form. + plain_pattern = re.compile( + r"(?P[ \t]*)ctx\.pc = jump_target;\n" + r"(?P=indent)return;" + ) + def plain_repl(m: re.Match[str]) -> str: + nonlocal count + count += 1 + i = m.group("indent") + return ( + f"{i}ctx.pc = jump_target;\n" + f"{i}// {LOCAL_MARKER}: preserve the 256-transfer scheduler boundary, skip outer trampoline.\n" + f"{i}if (local_redispatch_rounds < 7u && rt.continue_generated_local_dispatch(ctx)) {{\n" + f"{i} ++local_redispatch_rounds;\n" + f"{i} local_transfers = 0u;\n" + f"{i} local_pc = ctx.pc;\n" + f"{i} entry_id = 0u;\n" + f"{i} goto LOCAL_DISPATCH;\n" + f"{i}}}\n" + f"{i}return;" + ) + text = plain_pattern.sub(plain_repl, text) + return text, count + + +def remove_adjacent_gotos(text: str) -> tuple[str, int]: + removed = 0 + # Only remove a goto when the *very next source line* is its target label. + # No instruction, sync, hook or declaration can be skipped by this rule. + pattern = re.compile( + r"(?m)^(?P[ \t]*)goto (?P